Changeset 3909 in Sophya for trunk/AddOn
- Timestamp:
- Nov 21, 2010, 2:26:12 PM (15 years ago)
- Location:
- trunk/AddOn/TAcq
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/acqparam_exemple.d
r3899 r3909 2 2 # ------------ Soft BAORadio -------------- 3 3 # ------ Exemple de datacard pour les parametres d'acquisition 4 # Octobre/novembre 20094 # 2009 - 2010 5 5 ################################################################# 6 # Liste des fibres - @fibres I[,J,K...] 7 # Par defaut @fibres 1 8 @fibres 1,2 6 # Liste des fibres - @fibres I[,J,K...] ou @fibers 7 # @fibers 1,2,3 OU @fibres 1,2,3 8 # Par defaut @fibres 1 9 @fibers 1,2 10 # Numero (absolu) d'identification des fibres 11 # Defaut: @fiberids 1,2,3,4,5,6,7,8 12 @fiberids 1,2,3,4,5,6,7,8 9 13 # Nom du Repertoire pour les fichiers d'acquisition 10 14 # Par defaut @outpathname TstAcq … … 16 20 # Par defaut @paqsize 16424 17 21 @paqsize 8192 22 ### Parametres du DMA 18 23 # Taille des DMA en kb (=1024 bytes) 19 24 # Par defaut @dmasizekb 32 20 25 @dmasizekb 32 26 # Parametres du timeout 27 # @waitenddma maxkloop_check_enddma maxretry first_maxkloop_check_enddma first_maxretry 28 # maxkloop_check_enddma : taille de boucle d'attente de fin DMA, en unite de 1000 (max_loop=1000*maxkloop) 29 # first_maxkloop...,first_maxretry : parametres pour le premier DMA (attente debut trigger) 30 # Defaut : @waitenddma 1000 3 20000 9 31 waitenddma 1000 3 20000 9 21 32 # Nombre total (maximum) de fichiers fits produits (/fibre) 22 33 # Par defaut @nbfiles 1 … … 27 38 # Mode d'acquisition 28 39 # Par defaut @acqmode std 29 # Modes standard: [std=raw data] [fft2c=fft 2 canaux] 30 # Autres modes: [nof=std,NoFitsFile] pattern,patnof,fft2cnof ...] 40 # Modes standard: [std=raw2c : 2 channels raw data] [fft2c: fft 2 canaux - NOT reordered] 41 # Autres modes: raw1c , fft1c , ordfft2c , ordfft1c 42 # [nof=std+NoFitsFile] pattern,patnof,fft2cnof ... 31 43 @acqmode std 32 44 # Parametres MemmoryManager @memmgr NZones,NPaqPerZone … … 51 63 # @ethrnlink 4 52 64 ethrnlink 4 53 # En mode reception de paquets sur ethernet, On peut forcer la lecture54 # de paquets avec meme compteur de paquet (Force SameFrameCounter )55 # @ethrforcesamefc MaxDiffNumPaq MaxNbResync56 # Le parametre MaxDiffNumPaq (50 par defaut) est la difference maximum entre nombre de57 # paquets lus sur les differents liens et MaxNbResync (def=50) est le nombre maximum de tentatives65 # En mode reception de paquets sur ethernet, On peut activer la lecture 66 # de paquets avec alignement du compteur (FrameCounter) avec la carte @ethrforcesamefc 67 # @ethrforcesamefc maxdiff_paqnum maxresync 68 # Le parametre maxdiff_paqnum (0 par defaut) est la difference maximum entre nombre de 69 # paquets lus sur les differents liens et maxresync (0 par defaut) est le nombre maximum de tentatives 58 70 # de resynchronisation succesive 59 ethrforcesamefc 50 50 71 # - force_samefc=false : lecture des paquet sans alignement des FrameCounter 72 # - force_samefc=true : lecture paquets avec alignement des FrameCounter 73 # + mode par defaut : maxdiff_paqnum=0, maxresync=0 -> on cherche a aligner FrameCounter sur les 74 # differents liens ethernet 75 # + maxdiff_paqnum>0 : difference maximum de nombre de paquets entre les differents liens 76 # + maxresync>0 : Mode de lecture avec resynchronisation du nombre de paquets , 77 # nombre maxi de resynchronisation 78 # Modes conseilles : false ; @ethrforcesamefc 0 0 ; @ethrforcesamefc 10 0 ; @ethrforcesamefc 50 0 79 ethrforcesamefc 0 0 60 80 ##### 61 81 # En activant la carte suivante, le lecteur (EthernetReader) attend les messages END sur chaque lien … … 83 103 visicfreq 0 0 0 84 104 ######################## 85 # Taux de perte de paquets en simulation (Sans carte PCIExpress) 86 # @nopcilossrate Perte (0<=Perte<1) 105 # Taux de perte de paquets en simulation / nombre maxi de paquets generes (Sans carte PCIExpress) 106 # @nopcilossrate MaxCount.LossRate (0<=LossRate<1) - Defaut MaxCount=0 -> Non limite 107 # MaxCount=Partie_Entiere , LossRate=Partie_Fractionnaire 87 108 # Defaut @nopcilossrate 0. 88 109 ######################## -
trunk/AddOn/TAcq/bracqvers.h
r3876 r3909 5 5 Software version LAL - 2008-2010 6 6 */ 7 #define BAOR_ACQ_VER 7. 28 #define BAOR_ACQ_VER_STR "BaoAcq_v7r 2_Sep10 "7 #define BAOR_ACQ_VER 7.3 8 #define BAOR_ACQ_VER_STR "BaoAcq_v7r3_Nov10 " 9 9 10 10 #endif -
trunk/AddOn/TAcq/brbaseproc.cc
r3882 r3909 97 97 break; 98 98 } 99 cts_=memgr_.GetAuxData(mid)->FillTime(); // get associated date/time (DATEOBS) 99 100 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 100 101 fbuff_[fib] = memgr_.GetMemZone(mid,fib); -
trunk/AddOn/TAcq/brbaseproc.h
r3872 r3909 14 14 15 15 #include "brpaqu.h" 16 #include "timestamp.h" // include SOPHYA 16 17 17 18 using namespace std; … … 57 58 58 59 uint_8 totprocnpaq_; 60 SOPHYA::TimeStamp cts_; // current time stamp, get from MemZoneMgr 59 61 60 62 string bpnom_; // nom du processeur -
trunk/AddOn/TAcq/brfitsrd.cc
r3883 r3909 55 55 throw BAORadioException("BRMultiFitsReader::BRMultiFitsReader/ mff.NAxis1() != memgr_.PaqSize() "); 56 56 } 57 // Extraction de qques parametres utiles depuis les fichiers FITS 58 string fkvs; 59 if (fib==0) { 60 fkvs=mff_[fib].GetKeyValue("DATEOBS"); 61 if (fkvs.length()>0) { 62 cdateobs_.Set(fkvs); 63 cout << " BRMultiFitsReader/First file (for fiber 0) DATEOBS=" << fkvs << endl; 64 } 65 } 66 fkvs=mff_[fib].GetKeyValue("DATEOBS"); 67 memgr_.FiberId(fib) = atoi( fkvs.c_str() ); 68 57 69 vfilenum_.push_back(imin_); 58 70 vfpos_.push_back(0); … … 207 219 throw BAORadioException("BRMultiFitsReader::ReadNext()/ mff.NAxis1() != memgr_.PaqSize() "); 208 220 } 221 if (fib==0) { // updating current date from file (fiber 0) 222 string fkvs=mff_[fib].GetKeyValue("DATEOBS"); 223 if (fkvs.length()>0) cdateobs_.Set(fkvs); 224 } 209 225 vfpos_[fib]=0; 210 226 } -
trunk/AddOn/TAcq/brfitsrd.h
r3883 r3909 14 14 #include "brpaqu.h" 15 15 #include "minifits.h" 16 #include "timestamp.h" 16 17 17 18 using namespace std; … … 79 80 Byte* mmbufib_[MAXANAFIB]; // Pointeurs zone memoire de chaque fibre rendu par RAcqMemZoneMgr 80 81 82 SOPHYA::TimeStamp cdateobs_; // current time/date read from file 83 81 84 int prtlev_; // print level 82 85 uint_8 prtmodulo_; // print periodicity (modulo) -
trunk/AddOn/TAcq/brparam.cc
r3901 r3909 98 98 99 99 // Classe qui memorise tous les parametres importants de l'acquisition 100 #define PMAXNBFIBRES 64 100 101 101 102 /* --Methode-- */ … … 109 110 110 111 FiberListS=fibres; 111 NbFibers=0;112 for (int fib=0; fib<PMAXNBFIBRES;fib++) FiberNum[fib]=0; 112 FiberIdsS="1,2,3,4,5,6,7,8"; 113 113 114 PaqSize=paqsz; 115 114 116 dmasizekb=dmaszkb; 117 maxkwedma_=1000; 118 nretrydma_=3; 119 first_maxkwedma_=20000; 120 first_nretrydma_=9; 115 121 116 122 NbFiles=nfiles; … … 181 187 182 188 FiberListS=p.FiberListS; 183 NbFibers=p.NbFibers; 184 for (int fib=0; fib<PMAXNBFIBRES;fib++) FiberNum[fib]=p.FiberNum[fib]; 189 FiberNum=p.FiberNum; 190 FiberIdsS=p.FiberIdsS; 191 FiberIds=p.FiberIds; 185 192 186 193 PaqSize=p.PaqSize; 194 187 195 dmasizekb=p.dmasizekb; 196 maxkwedma_=p.maxkwedma_; 197 nretrydma_=p.nretrydma_; 198 first_maxkwedma_=p.first_maxkwedma_; 199 first_nretrydma_=p.first_nretrydma_; 188 200 189 201 NbFiles=p.NbFiles; … … 237 249 { 238 250 DataCards conf(file); 239 FiberListS= conf.SParam("fibres",0,"1"); 251 if(conf.HasKey("fibres")) 252 FiberListS= conf.SParam("fibres",0,"1"); 253 else if(conf.HasKey("fibers")) 254 FiberListS= conf.SParam("fibers",0,"1"); 255 if(conf.HasKey("fiberids")) 256 FiberIdsS= conf.SParam("fiberids",0,"1"); 257 240 258 OutPathName= conf.SParam("outpathname",0,"TstAcq"); 241 259 skysource= conf.SParam("skysource",0,""); 242 260 PaqSize=(uint_4)conf.IParam("paqsize",0,16424); 261 243 262 dmasizekb =(uint_4) conf.IParam("dmasizekb",0,32); 263 maxkwedma_=(unsigned int)conf.IParam("waitenddma",0,1000); 264 nretrydma_=(unsigned int)conf.IParam("waitenddma",1,3); 265 first_maxkwedma_=(unsigned int)conf.IParam("waitenddma",2,20*maxkwedma_); 266 first_nretrydma_=(unsigned int)conf.IParam("waitenddma",3,3*nretrydma_); 267 244 268 NbFiles=conf.IParam("nbfiles",0,1); 245 269 NBlocPerFile=conf.IParam("nblocperfile",0,10); … … 303 327 vector<string> fiblist; 304 328 FillVStringFrString(FiberListS, fiblist, ','); 305 NbFibers=fiblist.size();306 329 for (int fib=0; fib<fiblist.size(); fib++) { 307 FiberNum[fib]=atoi(fiblist[fib].c_str()); 308 } 330 FiberNum.push_back(atoi(fiblist[fib].c_str())); 331 } 332 vector<string> fibids; 333 FillVStringFrString(FiberIdsS, fibids, ','); 334 for (int fib=0; fib<fibids.size(); fib++) { 335 FiberIds.push_back(atoi(fibids[fib].c_str())); 336 } 337 309 338 if (OutPathName == "/dev/null") { 310 339 fgnulldev4fits=true; … … 318 347 fgdatafft=false; fgsinglechannel=false; 319 348 reducneedcopy=false; pqreducmode=BR_TwoChanReduc; 320 if ((acqmode == "std")||(acqmode=="raw2c")) swapall = BR_Copy ; 349 if ((acqmode == "std")||(acqmode=="raw2c")) swapall = BR_Copy ; 350 if (acqmode=="raw1c") { swapall = BR_Copy ; fgsinglechannel=true; pqreducmode=BR_OneChanReduc; } 351 352 if ((acqmode == "fft2c")||(acqmode == "fft1c")) swapall = BR_Copy ; 321 353 if (acqmode == "nosw") swapall = BR_Copy ; 322 354 if (acqmode == "nof") { swapall = BR_Copy ; savesigfits = false; } 323 if (acqmode == "fft1c") { swapall = BR_FFTOneChan; reducneedcopy=true; pqreducmode=BR_OneChanReducK0; } 324 if (acqmode == "fft2c") { swapall = BR_FFTTwoChan; reducneedcopy=true; pqreducmode=BR_TwoChanReducK0; } 355 if (acqmode == "ordfft1c") { swapall = BR_FFTOneChan; reducneedcopy=true; pqreducmode=BR_OneChanReducK0; } 356 if (acqmode == "ordfft2c") { swapall = BR_FFTTwoChan; reducneedcopy=true; pqreducmode=BR_TwoChanReducK0; } 357 325 358 if (acqmode == "fft1cnof") 326 359 { swapall = BR_FFTOneChan; savesigfits = false; reducneedcopy=true; pqreducmode=BR_OneChanReducK0; } … … 379 412 os << " ------ BRParList::Print() ----- " << endl; 380 413 os << " FiberListS=" << FiberListS ; 414 os << " FiberIdsS=" << FiberIdsS ; 415 os << " Fibers (Num->Id): "; 416 for(size_t f=0; f<NbFibers(); f++) cout << FiberNum[f] << " -> " << FiberIds[f] << " ; " ; 417 os << endl; 381 418 os << " PaqSize=" <<PaqSize; 382 os << " DMA_Size_kb=" <<dmasizekb << endl; 419 os << " DMA_Size_kb=" <<dmasizekb << " (EndDMA: Maxkw=" << maxkwedma_ << " NRetry=" << nretrydma_ 420 << " FirstDMA: Maxkw=" << first_maxkwedma_ << " NRetry=" << first_nretrydma_ << ")" << endl; 383 421 os << " AcqMode="<<AcqMode; 384 422 os << " Type of acquisition :" << BRPaquet::FmtConvToString( swapall) << endl; -
trunk/AddOn/TAcq/brparam.h
r3899 r3909 71 71 }; 72 72 73 #define PMAXNBFIBRES 3274 73 75 74 //----------------------------------------------------------------------------- … … 88 87 89 88 // Nombre de fibres 90 inline int NFibers() { return NbFibers; } 89 inline size_t NFibers() { return FiberNum.size(); } 90 inline size_t NbFibers() { return FiberNum.size(); } 91 91 // Taille des operations DMA (en octets) 92 92 inline uint_4 DMASizeBytes() { return dmasizekb*1024; } … … 130 130 bool fgsinglechannel; // true -> un seul canal par fibre (par defaut=2 canaux/fibres) 131 131 132 string FiberListS ; // liste des fibres a utiliser 1,3,4 par exemple 133 int NbFibers; // liste des fibres a utiliser 1,3,4 par exemple 134 int FiberNum[PMAXNBFIBRES]; 132 string FiberListS ; // String_liste des fibres a utiliser 1,3,4 par exemple 133 vector<int> FiberNum; // liste des fibres a utiliser {1,3,4} par exemple 134 string FiberIdsS ; // String_liste des numeros 'absolu' des fibres 12,13,14,15 par exemple 135 vector<int> FiberIds; // liste des numero d'identification 'absolu' des fibres {12,13,14,15} par ex. 135 136 136 137 string OutPathName; // directory de base 137 138 string ProcPathName; 138 139 uint_4 PaqSize ; // taille des paquets ou sizeFrame 140 141 // Controle/gestion du DMA 139 142 uint_4 dmasizekb ; // taille du dma en multiple de 2 (2 a 56) 143 unsigned int maxkwedma_; // Nombre d'iterations de la boucle d'attente de fin de DMA (en unite de 1000) 144 unsigned int nretrydma_; // nombre maxi de tentatives pour terminer le DMA 145 unsigned int first_maxkwedma_; // Nombre d'iterations de la boucle d'attente de fin du PREMIER DMA (u 1000) 146 unsigned int first_nretrydma_; // nombre maxi de tentatives pour terminer le PREMIER DMA 147 140 148 int NbFiles; // nombre de fichier produits 141 149 int NBlocPerFile; // nombre de bloc par fichier … … 234 242 235 243 // Nombre de fibres 236 inline int NFibers() { return param_->NbFibers; } 244 inline int NFibers() { return param_->NbFibers(); } 245 inline int NbFibers() { return param_->NbFibers(); } 246 237 247 // Taille des operations DMA (en octets) 238 248 inline uint_4 DMASizeBytes() { return param_->DMASizeBytes(); } -
trunk/AddOn/TAcq/brviscalc.cc
r3895 r3909 32 32 33 33 uint_4 maxnpairs = (2*memgr_.NbFibres()+1)*memgr_.NbFibres(); 34 chanum_.SetSize(maxnpairs); 35 sa_size_t k=0; 36 for(size_t i=0; i<2*memgr_.NbFibres(); i++) vpdata_[i]=NULL; 37 for(size_t i=0; i<2*memgr_.NbFibres(); i++) { 38 for(size_t j=i; j<2*memgr_.NbFibres(); j++) { 39 chanum_(k) = (i+1)*100+(j+1); k++; 40 } 41 } 34 chanids_.SetSize(2*memgr_.NbFibres()); 35 chanpairnumall_.SetSize(maxnpairs); 36 chanpairsall_.SetSize(maxnpairs,2); 37 for(size_t i=0; i<2*memgr_.NbFibres(); i++) vpdata_[i]=NULL; 42 38 SelectPairs(); 43 39 … … 82 78 po << visdt_; 83 79 if (calcid_ == 0) { 84 POutPersist poc(outpath_+"chanum.ppf");85 poc << chanum_;86 80 87 81 if (fgcktt_) { … … 130 124 nbpairs_=nbpairs; 131 125 vismtx_.SetSize(nbpairs_, paq.DataSize()/4); 126 127 chanpairnum_.SetSize(nbpairs_); 128 chanpairs_.SetSize(nbpairs_,2); 129 132 130 return nbpairs_; 133 131 } … … 147 145 } 148 146 147 /* --Methode-- */ 148 void BRVisibilityCalculator::UpdateChanIds() 149 { 150 151 for(size_t i=0; i<memgr_.NbFibres(); i++) { 152 chanids_(2*i)=memgr_.FiberId(i)*2-1; 153 chanids_(2*i+1)=memgr_.FiberId(i)*2; 154 } 155 sa_size_t k=0; // numero de ligne dans la matrice des visibilites 156 for(size_t i=0; i<vpdata_.size(); i++) { 157 for(size_t j=i; j<vpdata_.size(); j++) { 158 chanpairnumall_(k)=chanids_(i)*CHANPAIRCONVFAC+chanids_(j); 159 chanpairsall_(k,0)=chanids_(i); chanpairsall_(k,1)=chanids_(j); k++; 160 } 161 } 162 sa_size_t kpair=0; 163 k=0; // numero de ligne dans la matrice des visibilites 164 for(size_t i=0; i<vpdata_.size(); i++) { 165 for(size_t j=i; j<vpdata_.size(); j++) { 166 kpair++; 167 if (kpair<(pairst_+1)) continue; 168 if (kpair>=(pairst_+nbpairs_+1)) break; 169 chanpairnum_(k)=chanids_(i)*CHANPAIRCONVFAC+chanids_(j); 170 chanpairs_(k,0)=chanids_(i); chanpairs_(k,1)=chanids_(j); k++; 171 } 172 } 173 174 string filename; 175 filename = outpath_+"chanum.ppf"; 176 if (nbcalc_>1) { 177 char sbuff[32]; 178 sprintf(sbuff,"chanum_%d.ppf",(int)calcid_); 179 filename = outpath_+sbuff; 180 } 181 POutPersist poc(outpath_+"chanum.ppf"); 182 poc << PPFNameTag("chanids") << chanids_; 183 poc << PPFNameTag("chanpairs") << chanpairs_; 184 poc << PPFNameTag("chanpairnum") << chanpairnum_; 185 poc << PPFNameTag("chanpairsall") << chanpairsall_; 186 poc << PPFNameTag("chanpairnumal") << chanpairnumall_; 187 cout << "BRVisibilityCalculator::UpdateChanIds() Channel Ids/Pairs saved to PPF file " << filename << endl; 188 return; 189 } 149 190 150 191 /* --Methode-- */ … … 207 248 break; 208 249 } 250 cts_=memgr_.GetAuxData(mid)->FillTime(); // get associated date/time (DATEOBS) 251 209 252 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 210 253 fbuff_[fib] = memgr_.GetMemZone(mid,fib); … … 238 281 vismtx_ = complex<r_4>((r_4)0.,(r_4)0.); 239 282 moyfc_=moytt_=0.; 240 first_tmstamp_.SetNow(); // Current date and time 283 // first_tmstamp_.SetNow(); // Current date and time 284 first_tmstamp_=cts_; // Current date and time 241 285 } 242 286 … … 326 370 first_fc_=curfc_[0]; 327 371 first_tt_= (vpaq_[0].TimeTag()-ttfirst_[0]); 328 first_tmstamp_.SetNow(); // Current date and time 372 // first_tmstamp_.SetNow(); // Current date and time 373 first_tmstamp_=cts_; // Current date and time 329 374 } 330 375 … … 439 484 for(sa_size_t jf=jf1_; jf<jf2_; jf++) { 440 485 xnt[2]=jf; 441 xnt[3]=chan um_(rv+pairst_);486 xnt[3]=chanpairnumall_(rv+pairst_); 442 487 xnt[4]=vismtx_(rv,jf).real()/(r_4)(nmean_); 443 488 xnt[5]=vismtx_(rv,jf).imag()/(r_4)(nmean_); … … 458 503 } 459 504 xnt[2]=jf+djf_/2; 460 xnt[3]=chan um_(rv+pairst_);505 xnt[3]=chanpairnumall_(rv+pairst_); 461 506 xnt[4]=moyreal/(r_4)(nmean_*djf_); 462 507 xnt[5]=moyimag/(r_4)(nmean_*djf_); -
trunk/AddOn/TAcq/brviscalc.h
r3895 r3909 32 32 // Classe de traitement - calcul de visibilite pour n fibres 33 33 //--------------------------------------------------------------------- 34 // Pour convertir une paire de numeros de canaux en un seul entier C1*CHANPAIRCONVFAC+C2 35 #define CHANPAIRCONVFAC 1000 36 34 37 class BRVisibilityCalculator : public BRBaseProcessor, ParallelTaskInterface { 35 38 public: … … 62 65 63 66 protected: 67 virtual void UpdateChanIds(); 64 68 virtual int Process(); 65 69 virtual void UpdateVisMtxInfo(); … … 85 89 86 90 TMatrix< complex<r_4> > vismtx_; 87 TVector< uint_4 > chanum_; 91 TVector< uint_4 > chanids_; // Numero de chaque canal=FiberId*2-1, FiberId*2 92 TVector< uint_4 > chanpairnumall_; // Liste de tous les numeros de paires de canaux (forme 1000*C1+C2=IIIJJJ) 93 TMatrix< uint_4 > chanpairsall_ ; // Liste de toutes paires de canaux (forme (C1,C2) ) 94 TVector< uint_4 > chanpairnum_; // Liste des paires de canaux calcules par ce BRVisibilityCalculator 95 TMatrix< uint_4 > chanpairs_ ; // Liste des paires de canaux (forme (C1,C2) ) pour ce BRVisibilityCalculator 96 88 97 // FitsInOutFile dtfos_; 89 98 DataTable visdt_; -
trunk/AddOn/TAcq/mfacq.cc
r3899 r3909 162 162 BRParList& acpar=bpar.GetParams(); 163 163 164 cout << " mfacq[1]/Info: Creating RAcqMemZoneMgr for" << acpar.NbFibers << " fibers , nZones="164 cout << " mfacq[1]/Info: Creating RAcqMemZoneMgr for" << acpar.NbFibers() << " fibers , nZones=" 165 165 << acpar.nZones << " NbPaquet/Zone=" << acpar.nPaqZone 166 166 << " MmgrPaqSize=" << acpar.MMgrPaquetSize() << endl; … … 177 177 178 178 #ifndef NOPCIECARD 179 for ( int i=0 ;i <acpar.NFibers() ;i++) {179 for (size_t i=0 ;i <acpar.NFibers() ;i++) { 180 180 UINT32 card=(acpar.FiberNum[i]-1)/2+1; 181 181 UINT32 cardfiber=(acpar.FiberNum[i]-1)%2; … … 209 209 cout << "mfacq[3] Creating PCIEMultiReader thread object " << endl; 210 210 vector<PCIEWrapperInterface*> vec_pciw; 211 for (int i=0 ;i<bpar.NFibers();i++) { 211 for (size_t i=0 ;i<bpar.NFibers();i++) { 212 pciwp[i]->SetFiberNumId(acpar.FiberNum[i], acpar.FiberIds[i]); 212 213 vec_pciw.push_back( pciwp[i]); 213 214 // cout << " mfacq[3.b]/Debug - pciwp[" << i << "] " << hex << pciwp[i] << dec << endl; … … 244 245 mmgr.Print(cout); 245 246 #ifndef NOPCIECARD 246 for ( int i=0 ;i <acpar.NbFibers ;i++) {247 for (size_t i=0; i<acpar.NbFibers(); i++) { 247 248 UINT32 card=(acpar.FiberNum[i]-1)/2+1; 248 249 UINT32 cardfiber=(acpar.FiberNum[i]-1)%2; … … 266 267 BRParList& acpar=bpar.GetParams(); 267 268 268 cout << " mfacq[1]/Info: PCIEToEthernet for" << acpar.NbFibers << " fibers , nZones="269 cout << " mfacq[1]/Info: PCIEToEthernet for" << acpar.NbFibers() << " fibers , nZones=" 269 270 << acpar.nZones << " NbPaquet/Zone=" << acpar.nPaqZone 270 271 << " MmgrPaqSize=" << acpar.MMgrPaquetSize() << endl; 271 272 #ifndef NOPCIECARD 272 for ( int i=0 ;i <acpar.NFibers() ;i++) {273 for (size_t i=0 ;i <acpar.NFibers() ;i++) { 273 274 UINT32 card=(acpar.FiberNum[i]-1)/2+1; 274 275 UINT32 cardfiber=(acpar.FiberNum[i]-1)%2; … … 297 298 298 299 vector<PCIEWrapperInterface*> vec_pciw; 299 for (int i=0 ;i<bpar.NFibers();i++) vec_pciw.push_back( pciwp[i]); 300 for (size_t i=0 ;i<bpar.NFibers();i++) { 301 pciwp[i]->SetFiberNumId(acpar.FiberNum[i], acpar.FiberIds[i]); 302 vec_pciw.push_back( pciwp[i]); 303 } 300 304 cout <<"mfacq[2] Creating PCIEToEthernet thread object " << endl; 301 305 PCIEToEthernet pci2eth(vec_pciw, bpar.GetParams().GetEthTargets(), bpar.GetParams(), bpar.GetParams().tcpportid); … … 316 320 317 321 #ifndef NOPCIECARD 318 for ( int i=0 ;i <acpar.NbFibers ;i++) {322 for (size_t i=0; i<acpar.NbFibers(); i++) { 319 323 UINT32 card=(acpar.FiberNum[i]-1)/2+1; 320 324 UINT32 cardfiber=(acpar.FiberNum[i]-1)%2; -
trunk/AddOn/TAcq/pciewrap.cc
r3683 r3909 12 12 using namespace SOPHYA; 13 13 14 //----------------------------------------------------------------------- 15 // Classe PCIEWrapperInterface ( virtuelle pure ) 16 //----------------------------------------------------------------------- 17 18 /* --Methode-- */ 19 PCIEWrapperInterface::PCIEWrapperInterface() 20 { 21 SetMaxWaitEndDMA(); 22 } 23 24 /* --Methode-- */ 25 PCIEWrapperInterface::~PCIEWrapperInterface() 26 { 27 } 28 29 /* --Methode-- */ 30 unsigned long PCIEWrapperInterface::SetMaxWaitEndDMA(unsigned int maxkwedma, unsigned int nretry) 31 { 32 if (maxkwedma>1) { maxwaitenddmaloop_=maxkwedma*1000; maxretryenddma_=nretry; } 33 return maxwaitenddmaloop_; 34 } 35 36 //------------------------------------------------------------------ 37 // Classe TestPCIWrapperNODMA : genere des paquets sans appel au DMA 38 //------------------------------------------------------------------ 14 39 /* --Methode-- */ 15 40 TestPCIWrapperNODMA::TestPCIWrapperNODMA(UInt32 sz, double lossrate) … … 23 48 timetag_ = 0; 24 49 tottransfer_ = 0; 25 lossrate_ = lossrate; 26 cout << " TestPCIWrapperNODMA(PaqSz=" << sz << ",LossRate=" << lossrate << ")" << endl; 50 if (lossrate<0.) lossrate=-lossrate; 51 max_frcount_=(UInt32)lossrate; 52 lossrate_ = lossrate-(double)max_frcount_; 53 if (lossrate_<1.e-9) lossrate_=0.; 54 cout << " TestPCIWrapperNODMA(PaqSz=" << sz << ",LossRate=" << lossrate 55 << " MaxFrameCount=" << max_frcount_ << ")" << endl; 27 56 } 28 57 … … 49 78 Byte* TestPCIWrapperNODMA::GetData() 50 79 { 51 if (lossrate_ > 1.e-19) { 80 if (frame_counter_>max_frcount_) return NULL; 81 if (lossrate_ > 1.e-9) { 52 82 UInt32 dfc = 1; 53 83 while (rg_.Flat01()<lossrate_) dfc++; -
trunk/AddOn/TAcq/pciewrap.h
r3683 r3909 32 32 public: 33 33 // Constructeur - fait l'initialisation 34 PCIEWrapperInterface() { }34 PCIEWrapperInterface(); 35 35 // destructeur - libere la memoire allouee 36 virtual ~PCIEWrapperInterface() { }36 virtual ~PCIEWrapperInterface(); 37 37 38 38 virtual UInt32 TransferSize() = 0; … … 41 41 virtual UInt64 TotTransferBytes() = 0; 42 42 virtual void PrintStatus(ostream& os) = 0; 43 // Identification de fibres / voies 44 inline void SetFiberNumId(int fibnum=1, int fibid=1) 45 { fiber_num_=fibnum; fiber_id_=fibid; } 46 inline int FiberNum() { return fiber_num_; } 47 inline int FiberId() { return fiber_id_; } 48 // Parametre de controle de la boucle d'attente de fin de DMA (en unite de 1000 pour maxkwedma) 49 virtual unsigned long SetMaxWaitEndDMA(unsigned int maxkwedma=1000, unsigned int nretry=3); 50 protected: 51 unsigned long maxwaitenddmaloop_; // Nombre d'iterations de la boucle d'attente de fin de DMA 52 unsigned int maxretryenddma_; // nombre maxi de tentatives pour terminer le DMA 53 int fiber_num_; // numero de fibre sur la machine 54 int fiber_id_; // identificateur de fibre - numero absolu sur l'ensemble des machines 43 55 }; 44 56 … … 46 58 class TestPCIWrapperNODMA : public PCIEWrapperInterface { 47 59 public: 60 // lossrate_=partie_fractionnaire[lossrate], max_frcount_=partie entiere[lossrate] 48 61 TestPCIWrapperNODMA(UInt32 sz, double lossrate=0.); 49 62 virtual ~TestPCIWrapperNODMA(); … … 62 75 UInt64 tottransfer_; 63 76 double lossrate_; 77 UInt32 max_frcount_; 64 78 BRPaqChecker pchk_; 65 79 // FMTRandGen rg_; -
trunk/AddOn/TAcq/racqueth.cc
r3907 r3909 55 55 for(int ii=0; ii<BRTCPMSGLEN; ii++) msg[ii]='\0'; 56 56 uint_4 dmasz = (fgdirectsend_) ? vec_pciw_[0]->TransferSize() : 0; 57 sprintf(msg,"BAORadio-PCIEToEthernet %d %d %d %d %d", par_.MMgrNbPaquet(), par_.MMgrPaquetSize(), dmasz, 0,i); 57 sprintf(msg,"BAORadio-PCIEToEthernet %d %d %d %d %d", par_.MMgrNbPaquet(), par_.MMgrPaquetSize(), 58 vec_pciw_[i]->FiberId(), dmasz, i); 58 59 // 123456789012345678901234567890 59 60 sok.SendAll(msg,BRTCPMSGLEN); … … 72 73 vvec_errorcnt_.push_back(verrcnt); 73 74 vec_cntpaq_.push_back(0); 75 vfgmsgfin_.push_back(false); 76 74 77 } 75 78 totrdsnd_ = 0; … … 119 122 uint_4 off_acheval=0; 120 123 121 int nerrdma = 0;122 int maxerrdma = 10;123 124 bool fgarret = false; 124 125 … … 170 171 uint_4 npaqfaitg = 0; 171 172 173 for (int i=0;i< (int)nbDma_ ;i++) 174 vec_pciw_[i]->SetMaxWaitEndDMA(par_.first_maxkwedma_,par_.first_nretrydma_); 175 172 176 while (npaqfaitg < nmaxpaq_) { // Boucle global G 173 177 if (fgarret) break; 174 178 if (stop_) break; 179 180 if ((prtlev_>0)&&(npaqfaitg>1)&&((npaqfaitg-1)%prtmodulo_==0)) 181 cout << " PCIEToEthernet::run()/Info NPaqFait= " << npaqfaitg << endl; 175 182 176 183 // Lancement des DMA 177 184 for (int dma=0; dma < (int)nbDma_ ;dma++) vec_pciw_[dma]->StartTransfers(); 185 if (npaqfaitg==1) { 186 for (int i=0;i< (int)nbDma_ ;i++) 187 vec_pciw_[i]->SetMaxWaitEndDMA(par_.maxkwedma_,par_.nretrydma_); 188 } 178 189 179 190 // On pointe vers le debut de la zone a remplir aver le prochain DMA … … 185 196 Datas[dma]=vec_pciw_[dma]->GetData(); 186 197 if (Datas[dma] == NULL) { // No data Read in DMA 187 nerrdma ++;fgbaddma=true;188 cout << "PCIEToEthernetChecker/Err eur Waiting for datas ..." << endl;198 fgbaddma=true; 199 cout << "PCIEToEthernetChecker/Error Waiting for datas ..." << endl; 189 200 vec_pciw_[dma]->PrintStatus(cout); 190 if (nerrdma>=maxerrdma) { fgarret = true; break; }201 fgarret = true; break; 191 202 } 192 203 } 193 204 if (fgbaddma) continue; 194 if ((prtlev_>0)&&(npaqfaitg%prtmodulo_==0)) 195 cout << " PCIEToEthernet::run()/Info NPaqFait= " << npaqfaitg << endl; 205 196 206 if (fgdirectsend_) { // Pas de copie / reduction de taille de paquet, on rebalance tel quel ... 197 207 for (int fib=0; fib<(int) nbDma_ ;fib++) { … … 283 293 } // FIN Boucle global G 284 294 295 // ----- Nettoyage final et impression de resume ------- 296 CleanUpEndSendAllLinks(); 285 297 setRC(0); 286 298 gettimeofday(&tv2, NULL); … … 326 338 static long cnt_prt=0; 327 339 /* --Methode-- */ 328 size_t PCIEToEthernet::SendToTargets(int fib, Byte* data, size_t len )340 size_t PCIEToEthernet::SendToTargets(int fib, Byte* data, size_t len, bool fgfin) 329 341 { 330 342 //DBG cout << " SendToTargets/DBG" << cnt_prt << " len=" << len << " data=" << hex << (unsigned long)data << dec << endl; cnt_prt++; … … 360 372 } 361 373 #endif 362 if ( vec_cntpaq_[fib]==nmaxpaq_) { // fin de l'envoi pour cette fibre374 if ((vec_cntpaq_[fib]==nmaxpaq_)||(fgfin&&(vec_cntpaq_[fib]%par_.MMgrNbPaquet()==0))) { // fin de l'envoi pour cette fibre 363 375 sprintf(msg,"PCIEToEthernet-Send-END %d",vec_cntpaq_[fib]); 364 376 for(size_t j=0; j<vskt.size(); j++) { 365 377 vskt[j].SendAll(msg, BRTCPMSGLEN2); 366 378 } 367 379 vfgmsgfin_[fib]=true; 368 380 } 369 381 return rc; 370 382 } 383 384 /* --Methode-- */ 385 void PCIEToEthernet::CleanUpEndSendAllLinks() 386 { 387 cout << " PCIEToEthernet::CleanUpEndSendAllLinks() - Ending transmission on links ..." << endl; 388 Byte* tampon = new Byte[par_.MMgrPaquetSize()]; 389 memset(tampon,0,(size_t)par_.MMgrPaquetSize()); 390 for(size_t fib=0; fib<vfgmsgfin_.size(); fib++) { 391 while (!vfgmsgfin_[fib]) SendToTargets(fib,tampon,par_.MMgrPaquetSize(),true); 392 cout << " ... Ended transmission on links for Fiber " << fib << endl; 393 } 394 delete[] tampon; 395 } 396 371 397 //------------------------------------------------------------------ 372 398 // Classe thread de lecture sur interface reseau (Ethernet) … … 429 455 sok.SendAll(msg,BRTCPMSGLEN); 430 456 vsok_.push_back(sok); 431 cout << " EthernetReader/Info connection/link" << fib << " established." << endl; 457 vfibid_.push_back(ic); 458 cout << " EthernetReader/Info connection/link" << fib << " established - FiberId= " << ic << endl; 432 459 vec_cntpaq_.push_back(0); 433 460 vec_fgsokend_.push_back(false); 434 461 } 462 if (vsok_.size()>1) { 463 cout << " EthernetReader/Info: sorting socket according to FiberIds ..." << endl; 464 bool encore=true; 465 Socket tmpskt; 466 int tmpid; 467 while(encore) { 468 encore=false; 469 for(size_t ii=0; ii<vsok_.size()-1; ii++) { 470 if (vfibid_[ii]<vfibid_[ii+1]) { 471 tmpskt=vsok_[ii]; tmpid=vfibid_[ii]; 472 vsok_[ii]=vsok_[ii+1]; vfibid_[ii]=vfibid_[ii+1]; 473 vsok_[ii+1]=tmpskt; vfibid_[ii+1]=tmpid; 474 encore=true; 475 } 476 } 477 } 478 } 479 cout << " EthernetReader/Info: Setting FiberIds in RAcqMemZoneMgr \n ... FiberIds= " ; 480 for(size_t ii=0; ii<vsok_.size(); ii++) { 481 memgr_.FiberId(ii)=vfibid_[ii]; 482 cout << vfibid_[ii] << " ; "; 483 } 484 cout << endl; 485 435 486 gl_fgsokend = true; 436 487 stopreason_="??Unknown??"; -
trunk/AddOn/TAcq/racqueth.h
r3901 r3909 61 61 62 62 protected: 63 virtual size_t SendToTargets(int fib, Byte* data, size_t len); 63 virtual size_t SendToTargets(int fib, Byte* data, size_t len, bool fgfin=false); 64 virtual void CleanUpEndSendAllLinks(); 64 65 65 66 BRParList par_; // Parametres divers d'acquisition … … 75 76 vector< vector<uint_8> > vvec_errorcnt_; 76 77 vector< uint_8 > vec_cntpaq_; 78 vector< bool > vfgmsgfin_; // true -> message fin envoye pour la fibre correspondante 77 79 uint_4 packSize_; 78 80 uint_4 packSizeInMgr_; … … 96 98 // Si force_samefc=true, on essaye de lire des paquets avec meme FrameCounter, sans depasser une 97 99 // difference maximum de maxdiff_paqnum entre nombre de paquets lus sur chaque fibre 100 // - force_samefc=false : lecture des paquet sans alignement des FrameCounter 101 // - force_samefc=true : lecture paquets avec alignement des FrameCounter 102 // + mode par defaut : maxdiff_paqnum=0, maxresync=0 -> on cherche a aligner FrameCounter sur les 103 // differents liens ethernet 104 // + maxdiff_paqnum>0 : difference maximum de nombre de paquets entre les differents liens 105 // + maxresync>0 : Mode de lecture avec resynchronisation du nombre de paquets , nombre 106 // maxi de resynchronisation - 107 // Modes conseilles : false - true,0,0 - true,10,0 98 108 inline void SetReadMode(bool force_samefc=false, uint_4 maxdiff_paqnum=0, uint_4 maxresync=0) 99 109 { rdsamefc_=force_samefc; sfc_maxdpc_=maxdiff_paqnum; sfc_maxresync_=maxresync; } … … 138 148 ServerSocket* srv_sokp_; // Le socket serveur 139 149 vector< Socket > vsok_; // Les sockets de lecture pour chaque lien ethernet (1 lien= 1 fibre a l'envoi) 150 vector< int > vfibid_; // Identificateur des fibres transmis par l'emetteur 140 151 vector< uint_8 > vec_cntpaq_; // vecteur de compteurs de paquet ( 1 compteur / lien ) 141 152 vector< uint_4 > vec_fgsokend_; // vecteur de flag, >0 : fin de reception (ou ereur) sur le lien -
trunk/AddOn/TAcq/racqumem.cc
r3779 r3909 38 38 memzones.push_back(new Byte[mzsz] ); 39 39 states.push_back(st); 40 auxdatap.push_back(new RAcqMZAuxData ); 41 fiber_id.push_back(0); 40 42 if (procmzsz > 0) procmemzones.push_back(new Byte[procmzsz] ); 41 43 } 44 dummy_=0; 42 45 serial_ = 0; 43 46 SetFinalizedMask(); … … 50 53 for(uint_4 k=0; k<NbZones(); k++) { 51 54 delete[] memzones[k]; 55 delete auxdatap[k]; 52 56 if (procpaqsz > 0) delete[] procmemzones[k]; 53 57 } -
trunk/AddOn/TAcq/racqumem.h
r3683 r3909 16 16 #include <iostream> 17 17 #include "brtypes.h" 18 #include "timestamp.h" 18 19 19 20 using namespace std; … … 63 64 64 65 66 // --------------------------------------------------------- 67 // Classe pour donnees auxiliaires associees a chaque zone 68 // --------------------------------------------------------- 69 class RAcqMZAuxData { 70 public: 71 RAcqMZAuxData() { } 72 inline SOPHYA::TimeStamp& FillTime() { return filltime_; } 73 74 SOPHYA::TimeStamp filltime_; 75 }; 76 65 77 // ------------------------------------------------------------------- 66 78 // Classe de gestion de zones memoire partagee (des buffers) entre … … 80 92 ~RAcqMemZoneMgr(); 81 93 94 // Retourne le nombre de zones memoire 95 inline uint_4 NbZones() { return nzones; } 82 96 // Retourne le nombre de fibres dans chaque zone 83 inline uint_4 NbZones() { return nzones; }84 // Retourne le nombre de zones memoire85 97 inline uint_4 NbFibres() { return nfibres; } 86 98 // Retourne la taille de paquet … … 136 148 return procmemzones[id]; 137 149 } 138 150 // Retourne le pointeur sur les donnees auxiliaire associee a une zone 151 inline RAcqMZAuxData* GetAuxData(int id) { 152 if ((id < 0) || (id >=(int) auxdatap.size())) return NULL; 153 return auxdatap[id]; 154 } 155 // Retourne l'identificateur (numero absolu) de la fibre 156 inline int& FiberId(int fib) { 157 if ((fib < 0) || (fib >=(int) nfibres)) return dummy_; 158 return fiber_id[fib]; 159 } 160 139 161 ostream& Print(ostream& os); 140 162 inline ostream& Print() { return Print(cout); } … … 153 175 SOPHYA::ZMutex mex; 154 176 uint_4 nzones, nfibres, npaq, paqsz, procpaqsz; 155 // DMAMgrInterface &dma_; 156 vector< Byte* > memzones; 157 vector< St_MemZ > states; 158 vector< Byte* > procmemzones; 177 vector< Byte* > memzones; // pointeur de donnees de chaque zone 178 vector< St_MemZ > states; // etat de chaque zone 179 vector< RAcqMZAuxData* > auxdatap; // pointeur de donnees auxiliaires associees a chaque zone 180 vector< Byte* > procmemzones; // pointeur de donnees traitees de chaque zone 181 // Identificateur (numero absolu) des fibres 182 vector< int > fiber_id; 183 int dummy_; 159 184 bool stop_; 160 185 MemZRunState runstate_; -
trunk/AddOn/TAcq/racqurw.cc
r3683 r3909 487 487 mmbuf_=NULL; 488 488 max_targ_npaq = memgr.NbPaquets(); 489 for (int fid=0 ; fid<(int)nbDma_ ;fid++) mmbufib_[fid]=NULL; 489 for (int fid=0 ; fid<(int)nbDma_ ;fid++) { 490 memgr.FiberId(fid)=vec_pciw[fid]->FiberId(); 491 mmbufib_[fid]=NULL; 492 } 490 493 } 491 494 … … 507 510 uint_4 paqsz = packSize_; 508 511 uint_4 dmasz = vec_pciw_[0]->TransferSize(); 509 vec_pciw_[0]->StartTransfers();512 //DEL vec_pciw_[0]->StartTransfers(); 510 513 511 514 BRPaqChecker pcheck[MAXNBFIB]; // Verification/comptage des paquets … … 516 519 uint_4 off_acheval=0; 517 520 518 int nerrdma = 0;519 int maxerrdma = 10;520 521 bool fgarret = false; 521 522 … … 523 524 for (int i=0;i< (int)nbDma_ ;i++) { 524 525 tampon[i]= new Byte[paqsz]; 526 vec_pciw_[i]->SetMaxWaitEndDMA(par_.first_maxkwedma_,par_.first_nretrydma_); 525 527 } 526 528 bool fgredpaq=par_.fgreducpsize; … … 551 553 // Lancement des DMA 552 554 for (int dma=0; dma < (int)nbDma_ ;dma++) vec_pciw_[dma]->StartTransfers(); 553 555 if (npaqfaitg==1) { 556 for (int i=0;i< (int)nbDma_ ;i++) 557 vec_pciw_[i]->SetMaxWaitEndDMA(par_.maxkwedma_,par_.nretrydma_); 558 } 554 559 // On pointe vers le debut de la zone a remplir aver le prochain DMA 555 560 //-- Zone memoire locale Byte* nextdma = buff+i*paqsz; … … 560 565 Datas[dma]=vec_pciw_[dma]->GetData(); 561 566 if (Datas[dma] == NULL) { // No data Read in DMA 562 nerrdma ++;fgbaddma=true;563 cout << "PCIEMultiReaderChecker/Err eur Waiting for datas ..." << endl;567 fgbaddma=true; 568 cout << "PCIEMultiReaderChecker/Error Waiting for datas ..." << endl; 564 569 vec_pciw_[dma]->PrintStatus(cout); 565 if (nerrdma>=maxerrdma) { fgarret = true; break; }570 fgarret = true; break; 566 571 } 567 572 } … … 681 686 cout << " --------------------------------------------------------------------" << endl; 682 687 683 // //// Nettoyage final688 //---- Nettoyage final et arret 684 689 MZoneManage(true); 690 memgr.Stop(); // Pour arreter les autres threads 691 685 692 for (int i=0;i< (int)nbDma_ ;i++) delete[] tampon[i]; 686 693 if ((fgredpaq)&&predtampon) delete[] predtampon; … … 700 707 << " max_targ_npaq=" << max_targ_npaq << endl; 701 708 */ 702 if (mid_ >= 0) memgr.FreeMemZone(mid_, MemZS_Filled); 709 if (mid_ >= 0) { 710 memgr.GetAuxData(mid_)->filltime_.SetNow(); 711 memgr.FreeMemZone(mid_, MemZS_Filled); 712 } 703 713 mmbuf_ = NULL; targ_npaq_ = 0; mid_ = -2; 704 714 for (int fid=0;fid<(int)nbDma_ ;fid++) mmbufib_[fid]=NULL; … … 790 800 } 791 801 BRPaquet paq0(NULL, NULL, paqsz); 802 TimeStamp tsmz; 792 803 for (uint_4 nbFile=0;nbFile<nfiles_ ;nbFile++) { 793 804 if (stop_ ) break; … … 813 824 // Sans TRAILER de paquet mff.setDTypeNaxis(MF_Byte, paq0.DataSize()+paq0.HeaderSize(), npaqperfile); 814 825 } 815 AddFitsKWStart(mff,bpar);816 826 fnum++; fgfirstfctt=true; 817 827 } … … 828 838 return; 829 839 } 840 tsmz = memgr.GetAuxData(mid)->filltime_; 830 841 for(uint_4 fib=0; fib<memgr.NbFibres(); fib++) { // Boucle sur les fibres 831 842 Byte* buff = memgr.GetMemZone(mid,fib); … … 841 852 framecnt_first_[fib] = pcheck[fib].LastFrameNum(); 842 853 timetag_first_[fib] = paq.TimeTag(); 854 AddFitsKWStart(mff,bpar,tsmz); 843 855 fgfirstfctt=false; 844 856 } … … 871 883 framecnt_last_[fib] = pcheck[fib].LastFrameNum(); 872 884 873 AddFitsKWEnd(mff,bpar );885 AddFitsKWEnd(mff,bpar,tsmz); 874 886 for(uint_4 fib=0; fib<memgr.NbFibres(); fib++) { 875 887 header[fib].close(); … … 907 919 908 920 /* --Methode-- */ 909 int MultiDataSaver::AddFitsKWStart(MiniFITSFile* mff, BRAcqConfig& acpar )921 int MultiDataSaver::AddFitsKWStart(MiniFITSFile* mff, BRAcqConfig& acpar, TimeStamp& ts) 910 922 { 911 TimeStamp ts;912 923 string cdtu=ts.ToString(); 913 924 string& skysrc=acpar.SkySource(); … … 922 933 mff[fib].AddKeyS("BRPAQCFMT", BRPaquet::FmtConvToString(acpar.GetParams().GetDataConvFg()), 923 934 " BAORadio BRPaquet DataFormatConversion" ); 924 mff[fib].AddKeyI("FIBERNUM", acpar.GetParams().FiberNum[fib], " Fiber number/id") ; 935 mff[fib].AddKeyI("FIBERNUM", acpar.GetParams().FiberNum[fib], " Fiber number") ; 936 mff[fib].AddKeyI("FIBERID",memgr.FiberId(fib), " Fiber identifier (absolute id)"); 925 937 if (hassrc) 926 938 mff[fib].AddKeyS("SKYSOURC", skysrc, " Source identification" ); … … 935 947 936 948 /* --Methode-- */ 937 int MultiDataSaver::AddFitsKWEnd(MiniFITSFile* mff, BRAcqConfig& acpar )949 int MultiDataSaver::AddFitsKWEnd(MiniFITSFile* mff, BRAcqConfig& acpar, TimeStamp& ts) 938 950 { 939 TimeStamp ts;940 951 string cdtu=ts.ToString(); 941 952 for(uint_4 fib=0; fib<memgr.NbFibres(); fib++) { -
trunk/AddOn/TAcq/racqurw.h
r3775 r3909 170 170 inline void STOP() { stop_ = true; } 171 171 protected: 172 int AddFitsKWStart(MiniFITSFile* mff, BRAcqConfig& acpar );173 int AddFitsKWEnd(MiniFITSFile* mff, BRAcqConfig& acpar );172 int AddFitsKWStart(MiniFITSFile* mff, BRAcqConfig& acpar, TimeStamp& ts); 173 int AddFitsKWEnd(MiniFITSFile* mff, BRAcqConfig& acpar, TimeStamp& ts); 174 174 175 175 RAcqMemZoneMgr& memgr;
Note:
See TracChangeset
for help on using the changeset viewer.