Changeset 3876 in Sophya for trunk/AddOn/TAcq/mfacq.cc


Ignore:
Timestamp:
Sep 9, 2010, 11:49:42 AM (15 years ago)
Author:
ansari
Message:

Ajout de la fonctionalite de calcul des visibilites (sur donnees firmware FFT uniquement) dans le programme d'acquisition mfacq.cc , Reza 09/09/2010

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/AddOn/TAcq/mfacq.cc

    r3767 r3876  
    5252  }
    5353 
    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"};
    5555  string action=arg[1];
    5656  int act = 0;
    57   if ((action != "-pci2eth")&&(action != "-pci2disk")&&(action != "-eth2disk")) {
     57  if ((action != "-pci2eth")&&(action != "-pci2disk")&&(action != "-eth2disk")&&(action != "-eth2visib")) {
    5858    cout << " mfacq/Error , Bad action argument : " << action << endl;
    5959    return 2;
    6060  }
    6161  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;
    6465
    6566  string pardcfile=arg[2];
     
    8485    if (act > 0)
    8586      if (acpar.CreateOutputDirectories()!=0)  return 9;
     87    acpar.GetParams().fgdoVisiC=false;
     88    if (act == 2)  acpar.GetParams().fgdoVisiC=true;
     89
    8690    acpar.Print(cout);
    8791    struct sigaction siact; 
     
    9498      rc = PCIEToEthernetTransfer();
    9599      break;
    96     case 1:
    97       rc = EthernetToMemoryAcq();
     100    case 1:    // ethernet --> disk
     101      rc = EthernetToMemoryAcq(false);
    98102      break;
    99     case 2:
     103    case 2:   // ethernet --> visibility calculation
     104      rc = EthernetToMemoryAcq(true);
     105      break;
     106    case 3:
    100107      rc = MultiFibreAcq();
    101108      break;
     
    134141  cout << " Usage: mfacq Action DataCardFile [BaseDirectory / TargetMachines]" << endl;
    135142  if (fgshort) return;
    136   cout << " o Action = -pci2disk , -pci2eth , -eth2disk \n "
     143  cout << " o Action = -pci2disk , -pci2eth , -eth2disk , -eth2visib \n "
    137144       << "   DataCardFile : File name for parameters list (DataCards) : \n"
    138145       << "     fibres outpathname skysource paqsize dmasizekb nbfiles \n"
     
    262269       << acpar.nZones << " NbPaquet/Zone=" << acpar.nPaqZone
    263270       << " MmgrPaqSize=" << acpar.MMgrPaquetSize() << endl;
    264  
    265271#ifndef NOPCIECARD 
    266272  for (int i=0 ;i <acpar.NFibers() ;i++) {
     
    319325}
    320326
     327
     328/* Fonction-Utilitaire : Voir en fin de fichier  */
     329MemZaction ConvertMemZ_Status2Action( MemZStatus st );
     330
    321331/* --Nouvelle-Fonction-- */
    322 int EthernetToMemoryAcq()
     332int EthernetToMemoryAcq(bool fgviscal)
    323333{
    324334  Timer tm("mfacq/EthernetToMemoryAcq");
     
    327337  BRAcqConfig bpar;
    328338  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; 
    330342  cout << " mfacq[1]/Info: Creating RAcqMemZoneMgr for" << acpar.NbEthLinks() << " Eth-links , nZones="
    331343       << acpar.nZones << " NbPaquet/Zone=" << acpar.nPaqZone
     
    333345  RAcqMemZoneMgr mmgr(acpar.nZones, acpar.NbEthLinks(), acpar.nPaqZone, acpar.MMgrPaquetSize());
    334346  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]"; }
    336369    // Dans ce cas, toutes les zones doivent passer ds le thread de monitoring
    337370    // 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;
    344380  MultiDataSaver DsThr(mmgr);   //   Utilise les parametres globaux BRAcqConfig
    345381  string ppath=bpar.OutputDirectory();
    346382  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
    347388  cout << "mfacq[3] Creating   EthernetReader thread object     " << endl;
    348389  EthernetReader ethrdr(mmgr, bpar.GetParams(), bpar.GetParams().tcpportid, false);
     
    350391  //  usleep(200);  attente au cas ou ...
    351392  pEthRdr=&ethrdr;
    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;
    358395  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;
    361406    PrThr.start();
    362407  }
     
    367412  cout << "mfacq[5] -  Waiting for threads to finish ... " << endl; 
    368413  ethrdr.join();
    369   DsThr.join();
     414  if (fgviscal)  VCGThr.join();
     415  else DsThr.join();
    370416  mmgr.Stop();
    371417  if (acpar.fgdoProc) { // On n'attend la fin que si le thread a ete demarre (NMaxProc>0)
     
    381427
    382428}
     429
     430
     431/* --Nouvelle-Fonction-Utilitaire */
     432MemZaction 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.