Changeset 3876 in Sophya


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

Location:
trunk/AddOn/TAcq
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/AddOn/TAcq/acqparam_exemple.d

    r3764 r3876  
    5555#  @nosavesigfits
    5656nosavesigfits
     57######################
     58### Parametres pour calcul des visibilites
     59### Le calcul des visibilites ne peut etre active qu'avec le parametre de ligne de commande de mfacq
     60#  @visicalc NbPaqMean  NbCalcGrp   NbThrPerCalc
     61#  - NbPaqMean : nb de paquets moyennes
     62#  - NbCalcGrp : Nombre de calculateurs de visibilites s'executant en parallele ds le BRVisCalcGroup
     63#  - NbThrPerCalc : Nombre de thread dans chaque calculateur ( laisser a 1 de preference )
     64#  Defaut : visicalc 1024  1 1
     65visicalc 5000  2 1
     66##  Binning en frequence lors du calcul (parametre en numero des frequences)
     67#  @visicfreq freqmin freqmax nbinfreq
     68#  Defaut: visicfreq 0 0 1   (aucun binning, toutes les frequences)
     69visicfreq 0 0 1
    5770#  Taux de perte de paquets en simulation (Sans carte PCIExpress)
    5871#  @nopcilossrate Perte     (0<=Perte<1)
  • trunk/AddOn/TAcq/bracqvers.h

    r3757 r3876  
    55   Software version     LAL - 2008-2010
    66*/
    7 #define BAOR_ACQ_VER 7.1
    8 #define BAOR_ACQ_VER_STR "BaoAcq_v7r1_Avr10 "
     7#define BAOR_ACQ_VER 7.2
     8#define BAOR_ACQ_VER_STR "BaoAcq_v7r2_Sep10 "
    99
    1010#endif
  • trunk/AddOn/TAcq/brbaseproc.cc

    r3872 r3876  
    161161int BRBaseProcessor::Process()
    162162{
     163  // Cette methode est appele pour chaque "trigger', cad la serie de paquets pour toutes les fibres
    163164  // la methode par defaut ne fait rien
    164165  // if (fgokallfibers_) { faire le traitement }
     
    166167  /*    Exemple de code test  */
    167168  if ( totprocnpaq_ % 1000 == 0 ) {
    168     cout << " BRVisibilityCalculator::Process() " << totprocnpaq_ << " FrameCnt=" ;
     169    cout << " BRBaseProcessor::Process() " << totprocnpaq_ << " FrameCnt=" ;
    169170    for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)   
    170171      cout << curfc_[fib] << "," ;
  • trunk/AddOn/TAcq/brparam.cc

    r3764 r3876  
    139139  skysource="";
    140140
     141//  --- variables de controle pour le monitoring
    141142  fgdoProc=false;
    142143  nmeanProc=512;
    143144  stepProc=5;
    144145  nmaxProc=0;
    145 
     146//  --- variables de controle pour le calcul des visibilites 
     147  fgdoVisiC = false;
     148  nmeanVisiC=1024;
     149  nbcalgrpVisiC=1;
     150  nthrVisiC=1;
     151  freqminVisiC=freqmaxVisiC=0;
     152  nbinfreqVisiC=1; 
     153
     154// Autres variables / variables speciales
    146155  monothr=false;
    147156  activate_pattern=false;
     
    237246  ethr_nlink=conf.IParam("ethrnlink",0,0);   // Nombre de sources de paquets en reception ethernet
    238247
    239 
     248  //  Parametre de controle du monitoring
    240249  if (conf.HasKey("monitor")) {
    241250    fgdoProc=true;
     
    244253    nmaxProc=conf.IParam("monitor",2,0);
    245254  }
     255  // Parametres pour le calcul des visibilites - le flag fgdoVisiC ne peut etre active
     256  // qu'avec l'option de ligne de commande de mfacq
     257  if (conf.HasKey("visicalc")) {
     258    nmeanVisiC=conf.IParam("visicalc",0,1024);
     259    nbcalgrpVisiC=conf.IParam("visicalc",1,1);
     260    nthrVisiC=conf.IParam("visicalc",2,1);
     261  }
     262  if (conf.HasKey("visicfreq")) {
     263    freqminVisiC=conf.IParam("visicfreq",0,0);
     264    freqmaxVisiC=conf.IParam("visicfreq",1,0);
     265    nbinfreqVisiC=conf.IParam("visicfreq",2,1);
     266  }
     267
    246268  nopciLossRate=conf.DParam("nopcilossrate",0,0.);
    247269  fg_hard_ctrlc=conf.HasKey("hard_ctrlc");
     
    354376    os << " Monitoring  NMeanProc=" << nmeanProc << " StepProc=" << stepProc << " NMaxProc=" << nmaxProc << endl;
    355377  else os << " No monotoring thread " << endl;
     378  if (fgdoVisiC) {
     379    os << " Visibility calculation, nbCalGrp=" << nbcalgrpVisiC << " NThr/VisCal=" << nthrVisiC << endl;
     380    os << " ... VisiCalc FrequencyBinning FreqMin= " << freqminVisiC << " FreqMax= " << freqmaxVisiC
     381       << " NBinFreq= " << nbinfreqVisiC<< endl;
     382  }
    356383  os << " fg_hard_ctrlc=" << ((fg_hard_ctrlc)?"true":"false");
    357384  os << " Save to fits " << ((savesigfits)?"true":"false") << endl;
  • trunk/AddOn/TAcq/brparam.h

    r3775 r3876  
    175175  uint_4 nmaxProc;  // Nombre de blocs traites par le thread de traitement/monitoring (0-> MaxNbBlocs())
    176176 
     177  //  Variables pour le calcul de visibilites
     178  bool fgdoVisiC;           // true -> calcul des visibilites
     179  uint_4 nmeanVisiC;        // nombre de paquets moyennes pour les calculs de visibilites
     180  uint_4 nbcalgrpVisiC;     // Nb d'objets/threads dans BRVisCalcGroup
     181  uint_4 nthrVisiC;         // Nb de threads pour l'execution parallele ds BRVisibilityCalculator
     182  uint_4 freqminVisiC, freqmaxVisiC, nbinfreqVisiC;  // si zone de frequence/rebinning pour visibilites
     183
     184   
    177185  // Pour des tests de performances ou sans carte ADC (pattern)
    178186  bool monothr ;           // pour les test mono thread
  • trunk/AddOn/TAcq/brviscalc.cc

    r3872 r3876  
    6868BRVisibilityCalculator::~BRVisibilityCalculator()
    6969{
     70  if (totnbpaq_<1)   return;
    7071  cout << " BRVisibilityCalculator - Visibility Datatable : " << endl;
    7172  cout << visdt_;
     73 
    7274  string filename;
    7375  filename = outpath_+"visdt.ppf";
     
    8284    POutPersist poc(outpath_+"chanum.ppf");
    8385    poc << chanum_;
    84  
     86   
    8587    if (fgcktt_) {
    8688      cout << " BRVisibilityCalculator -  Check TimeTag done: TotNPaqProc= " << totnbpaq_ << endl;
     
    137139  if ((jf1_<1)||(jf1_>=vismtx_.NCols()))  jf1_=1;
    138140  if ((jf2_<1)||(jf2_>=vismtx_.NCols())||(jf2_<jf1_))  jf2_=vismtx_.NCols()-1;
    139   if (nbfreq<1) nbfreq=1;
     141  if (nbfreq<1) nbfreq=(jf2_-jf1_);
    140142  djf_=(jf2_-jf1_)/nbfreq;
    141   if (djf_<1) djf_=0;
     143  if (djf_<1) djf_=1;
    142144  cout << " BRVisibilityCalculator::SelectFreqBinning/Info  JF1=" << jf1_
    143145       << " JF2=" << jf2_ << " DJF=" << djf_ << endl;
  • trunk/AddOn/TAcq/brviscalc.h

    r3872 r3876  
    4343  uint_4 SelectPairs(uint_4 pair1=0, uint_4 nbpairs=99999999);
    4444  // pour definir le binning en frequence pour la VisibDataTable
    45   int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1);
     45  // par defaut, toutes les frequences avec un pas de 1
     46  int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=0);
    4647
    4748  // Pour activer la verification des timetag
  • 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}
  • trunk/AddOn/TAcq/mfacq.h

    r3757 r3876  
    2323#include "brpaqu.h"
    2424
     25#include "brviscalc.h"   // calcul de visibilites
     26
    2527#include "resusage.h"
    2628#include "ctimer.h"
     
    4244
    4345int PCIEToEthernetTransfer();
    44 int EthernetToMemoryAcq();
     46int EthernetToMemoryAcq(bool fgviscal=false);
    4547int MultiFibreAcq();
    4648
  • trunk/AddOn/TAcq/racquproc.cc

    r3729 r3876  
    5858  curfc_.SetSize(memgr.NbFibres(), memgr.NbPaquets());
    5959  cpaqok_.SetSize(memgr.NbFibres(), memgr.NbPaquets());
     60  SetMemZAction();
    6061}
    6162
     
    6465{
    6566  //  cout << " **** DBG ***** MonitorProc::~MonitorProc() " << endl;
     67}
     68
     69/* --Methode-- */
     70MemZStatus MonitorProc::SetMemZAction(MemZaction mmact)
     71{
     72  mmact_=mmact;
     73  mmsta_=MemZS_Proc;
     74  switch (mmact) {
     75  case MemZA_ProcA:
     76    mmsta_=MemZS_ProcA;   
     77    break;
     78  case MemZA_ProcB:
     79    mmsta_=MemZS_ProcB;   
     80    break;
     81  case MemZA_ProcC:
     82    mmsta_=MemZS_ProcC;   
     83    break;
     84  case MemZA_ProcD:
     85    mmsta_=MemZS_ProcD;   
     86    break;
     87  case MemZA_ProcE:
     88    mmsta_=MemZS_ProcE;   
     89    break;
     90  case MemZA_ProcF:
     91    mmsta_=MemZS_ProcF;   
     92    break;
     93  default:
     94    mmact_=MemZA_Proc;
     95    mmsta_=MemZS_Proc;
     96    break;
     97  }
     98  return mmsta_;
    6699}
    67100
     
    166199    if (memgr.GetRunState() == MemZR_Stopped) break;
    167200
    168     int mid = memgr.FindMemZoneId(MemZA_Proc);
     201    int mid = memgr.FindMemZoneId(mmact_);  // MemZA_Proc
    169202    Byte* buffg = memgr.GetMemZone(mid);
    170203    if (buffg == NULL) {
     
    173206    }
    174207    if ((step_>1)&&(kmz%step_ != 0))  {
    175       memgr.FreeMemZone(mid, MemZS_Proc);
     208      memgr.FreeMemZone(mid, mmsta_);  //  MemZS_Proc);
    176209      continue;
    177210    }
     
    237270      }  // FIN de la boucle sur les paquets
    238271    }   // Boucle sur les fibres
    239     memgr.FreeMemZone(mid, MemZS_Proc);
     272    memgr.FreeMemZone(mid, mmsta_);  // MemZS_Proc);
    240273    CheckFrameCounters();
    241274
  • trunk/AddOn/TAcq/racquproc.h

    r3775 r3876  
    3939  MonitorProc(RAcqMemZoneMgr& mem);
    4040  virtual ~MonitorProc();
     41  MemZStatus SetMemZAction(MemZaction mmact=MemZA_Proc);
    4142  virtual void run();
    4243  void Stop();
     
    4849
    4950  RAcqMemZoneMgr& memgr;
     51  MemZaction mmact_;    // Definition de l'action sur les paquets (defaut=MemZA_Proc)
     52  MemZStatus mmsta_;    // Statut associe a mmact_ (defaut=MemZS_Proc)
    5053  BRParList par_;
    5154  bool stop_; 
Note: See TracChangeset for help on using the changeset viewer.