Changeset 3876 in Sophya for trunk/AddOn/TAcq/mfacq.cc
- Timestamp:
- Sep 9, 2010, 11:49:42 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/mfacq.cc
r3767 r3876 52 52 } 53 53 54 const char* desact[ 3] = {"PCIE_To_Ethernet", "Ethernet_To_Disk","PCIE_DMA_To_Disk"};54 const char* desact[4] = {"PCIE_To_Ethernet", "Ethernet_To_Disk", "Ethernet_To_Visibilities","PCIE_DMA_To_Disk"}; 55 55 string action=arg[1]; 56 56 int act = 0; 57 if ((action != "-pci2eth")&&(action != "-pci2disk")&&(action != "-eth2disk") ) {57 if ((action != "-pci2eth")&&(action != "-pci2disk")&&(action != "-eth2disk")&&(action != "-eth2visib")) { 58 58 cout << " mfacq/Error , Bad action argument : " << action << endl; 59 59 return 2; 60 60 } 61 61 if (action == "-pci2eth") act=0; 62 else if (action == "-eth2disk") act=1; 63 else if (action == "-pci2disk") act=2; 62 else if (action == "-eth2disk") act=1; 63 else if (action == "-eth2visib") act=2; 64 else if (action == "-pci2disk") act=3; 64 65 65 66 string pardcfile=arg[2]; … … 84 85 if (act > 0) 85 86 if (acpar.CreateOutputDirectories()!=0) return 9; 87 acpar.GetParams().fgdoVisiC=false; 88 if (act == 2) acpar.GetParams().fgdoVisiC=true; 89 86 90 acpar.Print(cout); 87 91 struct sigaction siact; … … 94 98 rc = PCIEToEthernetTransfer(); 95 99 break; 96 case 1: 97 rc = EthernetToMemoryAcq( );100 case 1: // ethernet --> disk 101 rc = EthernetToMemoryAcq(false); 98 102 break; 99 case 2: 103 case 2: // ethernet --> visibility calculation 104 rc = EthernetToMemoryAcq(true); 105 break; 106 case 3: 100 107 rc = MultiFibreAcq(); 101 108 break; … … 134 141 cout << " Usage: mfacq Action DataCardFile [BaseDirectory / TargetMachines]" << endl; 135 142 if (fgshort) return; 136 cout << " o Action = -pci2disk , -pci2eth , -eth2disk \n "143 cout << " o Action = -pci2disk , -pci2eth , -eth2disk , -eth2visib \n " 137 144 << " DataCardFile : File name for parameters list (DataCards) : \n" 138 145 << " fibres outpathname skysource paqsize dmasizekb nbfiles \n" … … 262 269 << acpar.nZones << " NbPaquet/Zone=" << acpar.nPaqZone 263 270 << " MmgrPaqSize=" << acpar.MMgrPaquetSize() << endl; 264 265 271 #ifndef NOPCIECARD 266 272 for (int i=0 ;i <acpar.NFibers() ;i++) { … … 319 325 } 320 326 327 328 /* Fonction-Utilitaire : Voir en fin de fichier */ 329 MemZaction ConvertMemZ_Status2Action( MemZStatus st ); 330 321 331 /* --Nouvelle-Fonction-- */ 322 int EthernetToMemoryAcq( )332 int EthernetToMemoryAcq(bool fgviscal) 323 333 { 324 334 Timer tm("mfacq/EthernetToMemoryAcq"); … … 327 337 BRAcqConfig bpar; 328 338 BRParList& acpar=bpar.GetParams(); 329 339 340 if (fgviscal) cout << "mfacq[0]/EthernetToMemoryAcq() : On the fly Visibility Calculation " << endl; 341 else cout << "mfacq[0]/EthernetToMemoryAcq() : data dumped to disk " << endl; 330 342 cout << " mfacq[1]/Info: Creating RAcqMemZoneMgr for" << acpar.NbEthLinks() << " Eth-links , nZones=" 331 343 << acpar.nZones << " NbPaquet/Zone=" << acpar.nPaqZone … … 333 345 RAcqMemZoneMgr mmgr(acpar.nZones, acpar.NbEthLinks(), acpar.nPaqZone, acpar.MMgrPaquetSize()); 334 346 pMmgr=&mmgr; 335 if (acpar.fgdoProc && (acpar.stepProc>0)) { 347 348 349 string strfmask; 350 uint_4 fmask=0; 351 MemZStatus mskmon=MemZS_Proc; 352 if (fgviscal) { // gestion de finalized_mask lors du calcul de visibilites 353 if (acpar.nbcalgrpVisiC<1) acpar.nbcalgrpVisiC=1; 354 if (acpar.nbcalgrpVisiC>4) acpar.nbcalgrpVisiC=4; 355 cout << " mfacq[1.b]/Info: NbCalGrpVisiC = " << acpar.nbcalgrpVisiC << " (1<=NbCalGrpVisiC<=4)" << endl; 356 fmask=(uint_4)MemZS_ProcA; strfmask="MemZS_ProcA"; mskmon=MemZS_ProcB; 357 if (acpar.nbcalgrpVisiC>1) 358 { fmask |= (uint_4)MemZS_ProcB; strfmask+=" | MemZS_ProcB"; mskmon=MemZS_ProcC; } 359 if (acpar.nbcalgrpVisiC>2) 360 { fmask |= (uint_4)MemZS_ProcC; strfmask+=" | MemZS_ProcC"; mskmon=MemZS_ProcD; } 361 if (acpar.nbcalgrpVisiC>3) 362 { fmask |= (uint_4)MemZS_ProcD; strfmask+=" | MemZS_ProcD"; mskmon=MemZS_ProcE; } 363 } 364 else { 365 fmask=(uint_4)MemZS_Saved; strfmask="MemZS_Saved"; mskmon=MemZS_Proc; 366 } 367 if (acpar.fgdoProc) 368 { fmask |= (uint_4)mskmon; strfmask+=" | MemZS_Proc[Monotoring]"; } 336 369 // Dans ce cas, toutes les zones doivent passer ds le thread de monitoring 337 370 // pour etre au moins marque comme traite - seul 1/acpar.stepProc sont effectivement traite 338 mmgr.SetFinalizedMask(((uint_4)MemZS_Saved) | ((uint_4)MemZS_Proc)); 339 cout << " mfacq[1.b]/Info: Mmgr.SetFinalizedMask( MemZS_Saved | MemZS_Proc )" << endl; 340 } 341 342 343 cout <<"mfacq[2] Creating MultiDataSaver and MonitorProc thread objects ... " << endl; 371 372 mmgr.SetFinalizedMask(fmask); 373 cout << " mfacq[1.b]/Info: Mmgr.SetFinalizedMask( " << strfmask << " )" << endl; 374 375 if (fgviscal) 376 cout <<"mfacq[2] Creating BRVisCalcGroup, NbVisibCalculator=" << acpar.nbcalgrpVisiC 377 << " and MonitorProc " << endl; 378 else 379 cout <<"mfacq[2] Creating MultiDataSaver and MonitorProc thread objects ... " << endl; 344 380 MultiDataSaver DsThr(mmgr); // Utilise les parametres globaux BRAcqConfig 345 381 string ppath=bpar.OutputDirectory(); 346 382 MonitorProc PrThr(mmgr); 383 PrThr.SetMemZAction( ConvertMemZ_Status2Action( mskmon ) ); 384 BRVisCalcGroup VCGThr(acpar.nbcalgrpVisiC, mmgr, bpar.OutputDirectory(), acpar.nmeanVisiC, acpar.nthrVisiC); 385 VCGThr.SelectFreqBinning(acpar.freqminVisiC, acpar.freqmaxVisiC, acpar.nbinfreqVisiC); 386 387 347 388 cout << "mfacq[3] Creating EthernetReader thread object " << endl; 348 389 EthernetReader ethrdr(mmgr, bpar.GetParams(), bpar.GetParams().tcpportid, false); … … 350 391 // usleep(200); attente au cas ou ... 351 392 pEthRdr=ðrdr; 352 tm.Split("Threads created"); 353 if (acpar.fgdoProc>0) 354 cout << "mfacq[4] - starting three threads: EthernetReader, MultiDataSaver, MonitorProc ... " << endl; 355 else 356 cout << "mfacq[4] - starting two threads: EthernetReader, MultiDataSaver ... " << endl; 357 393 tm.Split("Threads created"); 394 cout << "mfacq[4] - starting EthernetReader thread object ..." << endl; 358 395 ethrdr.start(); 359 DsThr.start(); 360 if (acpar.fgdoProc>0) { // On ne demarre que si au moins NMaxProc>0 396 if (fgviscal) { 397 cout << "mfacq[4.b] - starting Visibility calculator threads " << endl; 398 VCGThr.start(); 399 } 400 else { 401 cout << "mfacq[4.b] - starting MultiDataSaver " << endl; 402 DsThr.start(); 403 } 404 if (acpar.fgdoProc) { // demarrage (optionnel) du thread de monitoring 405 cout << " mfacq[4.c] - starting MonitorProc thread object " << endl; 361 406 PrThr.start(); 362 407 } … … 367 412 cout << "mfacq[5] - Waiting for threads to finish ... " << endl; 368 413 ethrdr.join(); 369 DsThr.join(); 414 if (fgviscal) VCGThr.join(); 415 else DsThr.join(); 370 416 mmgr.Stop(); 371 417 if (acpar.fgdoProc) { // On n'attend la fin que si le thread a ete demarre (NMaxProc>0) … … 381 427 382 428 } 429 430 431 /* --Nouvelle-Fonction-Utilitaire */ 432 MemZaction ConvertMemZ_Status2Action( MemZStatus st ) 433 { 434 MemZaction ra=MemZA_None; 435 switch (st) { 436 case MemZS_Filled: 437 ra=MemZA_Fill; 438 break; 439 case MemZS_Saved: 440 ra=MemZA_Save; 441 break; 442 case MemZS_Proc: 443 ra=MemZA_Proc; 444 break; 445 case MemZS_ProcA: 446 ra=MemZA_ProcA; 447 break; 448 case MemZS_ProcB: 449 ra=MemZA_ProcB; 450 break; 451 case MemZS_ProcC: 452 ra=MemZA_ProcC; 453 break; 454 case MemZS_ProcD: 455 ra=MemZA_ProcD; 456 break; 457 case MemZS_ProcE: 458 ra=MemZA_ProcE; 459 break; 460 case MemZS_ProcF: 461 ra=MemZA_ProcF; 462 break; 463 default: 464 ra=MemZA_None; 465 break; 466 } 467 return ra; 468 }
Note:
See TracChangeset
for help on using the changeset viewer.