Changeset 3944 in Sophya for trunk/AddOn/TAcq


Ignore:
Timestamp:
Feb 4, 2011, 5:51:53 PM (15 years ago)
Author:
ansari
Message:

Correction bug xnt_ non alloue ds BRMeanSpecCalculator, Reza 4/02/2011

Location:
trunk/AddOn/TAcq
Files:
2 edited

Legend:

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

    r3943 r3944  
    9494 
    9595  //  cout << "(JEC) creation tuple de " << nchan*(1+numberOfBands_) << " doubles " << endl;
    96   //  xnt_=new double[nchan*(1+numberOfBands_)];  // CHECK : ATTENTION la taille depend de nombre de colonne du NTuple !
    97   xnt_=NULL;
     96  // CHECK : ATTENTION , on alloue une taille minimum pour le tableau xnt, reallocation si DefineDataTable() appele
     97  xnt_=new double[nchan*2];
    9898}
    9999
     
    168168  //  xnt_=new double[nchan*2];  CHECK : faut-il reallouer ?
    169169  cout << "(JEC) creation tuple de " << nchan*(1+numberOfBands_) << " doubles " << endl;
     170  if (xnt_) delete[] xnt_;
    170171  xnt_=new double[nchan*(1+numberOfBands_)];
    171172  cout << "(JEC) BRMeanSpecCalculator::DefineDataTable END" << endl;
  • trunk/AddOn/TAcq/racquproc.cc

    r3920 r3944  
    155155
    156156/* --Methode-- */
    157 int MonitorProc::procData1C(ofstream& logf)
    158 {
    159   cout << " MonitorProc::procData1C() - NOT IMPLEMENTED -> Rc=67" << endl;
    160   logf << " MonitorProc::procData1C() - NOT IMPLEMENTED -> Rc=67" << endl;
    161   return 67; 
     157int MonitorProc::procData1C(ofstream& filog)
     158{
     159  /*
     160  if (par_.fgdatafft) {
     161    cout << " MonitorProc::procData1C() - NOT IMPLEMENTED for 1 channel FFT data -> Rc=67" << endl;
     162    filog << " MonitorProc::procData1C() - NOT IMPLEMENTED for 1 channel FFT data -> Rc=67" << endl;
     163    return 67; 
     164  }
     165  */
     166  BRPaqChecker pcheck[MAXNBFIB];  // Verification/comptage des paquets
     167// Initialisation pour calcul FFT
     168  uint_4 paqsz = memgr.PaqSize();
     169  BRPaquet pq(paqsz);
     170  TVector<r_4> vx(pq.DataSize());
     171  vx = (r_4)(0.);
     172  TVector< complex<r_4> > cfour(pq.DataSize()/2+1);  // composant TF
     173 
     174  fftwf_plan plan = fftwf_plan_dft_r2c_1d(vx.Size(), vx.Data(),
     175                                          (fftwf_complex *)cfour.Data(), FFTW_ESTIMATE);
     176
     177  // Histo pour valeurs des bytes dans les paquets
     178  Histo* phist[MAXNBFIB];
     179  Histo2D* ph2[MAXNBFIB];
     180  Histo* phexp[MAXNBFIB];
     181  TMatrix<r_4>* psatur[MAXNBFIB]; 
     182  TVector<uint_4>* pvsatfreq[MAXNBFIB];
     183  for(int ifib=0; ifib<MAXNBFIB; ifib++) {
     184    phist[ifib]=NULL; ph2[ifib]=NULL; phexp[ifib]=NULL; psatur[ifib]=NULL;
     185  }
     186  if (par_.fgdatafft) {    // data de type FFT   
     187    for(sa_size_t lc=0; lc<memgr.NbFibres(); lc++) {
     188      phist[lc] = new Histo(-128.5,+128.5,257);
     189      ph2[lc]   = new Histo2D(-128.5,+128.5,257, -128.5,+128.5,257);
     190      phexp[lc] = new Histo(-128.5,+128.5,257);
     191      psatur[lc] = new TMatrix<r_4>(3,3);
     192      pvsatfreq[lc] = new TVector<uint_4>(spectre_.NCols());
     193      *psatur[lc] = 0.;
     194    }
     195  }
     196  else {
     197    for(sa_size_t lc=0; lc<memgr.NbFibres(); lc++) 
     198      phist[lc] = new Histo(-0.5,256.5,257);   
     199  }
     200
     201  TimeStamp ts;   
     202  char fname[512];
     203  nfiles_ = 0;                                 
     204  for (uint_4 kmz=0; kmz<nmax_; kmz++) {
     205    if (stop_) break;
     206    if (memgr.GetRunState() == MemZR_Stopped) break;
     207
     208    int mid = memgr.FindMemZoneId(mmact_);  // MemZA_Proc
     209    Byte* buffg = memgr.GetMemZone(mid);
     210    if (buffg == NULL) {
     211      cout << " MonitorProc::procData1C()/ERROR memgr.GetMemZone(" << mid << ") -> NULL" << endl;
     212      break;   
     213    }
     214    if ((step_>1)&&(kmz%step_ != 0))  {
     215      memgr.FreeMemZone(mid, mmsta_);  //  MemZS_Proc);
     216      continue;
     217    }
     218    sa_size_t lc=0;
     219    Byte* fbuff[MAXNBFIB];
     220    for(uint_4 fib=0; fib<memgr.NbFibres(); fib++)  {  // Boucle sur les fibres
     221      fbuff[fib] = memgr.GetMemZone(mid,fib);
     222      if (fbuff[fib] == NULL) { // cela ne devrait pas arriver
     223        cout << " MonitorProc::procData1C()/ERROR memgr.GetMemZone(" << mid << "," << fib << ") -> NULL" << endl;
     224        return 9;       
     225      }
     226    }
     227
     228    // DBG-ATTENTION : freq 0 pour expo full FFT si reordonne
     229    //    int idxexpo=(par_.fgfftshrink)?1023:0; // exposant FFT shrink 1024 freq, ou freq 0 pour full-FFT
     230    int idxexpo=0;
     231
     232    cpaqok_ = (uint_1)0;
     233    curfc_ = (uint_8)0;
     234    for(uint_4 fib=0; fib<memgr.NbFibres(); fib++) {
     235      for(uint_4 i=0; i<memgr.NbPaquets(); i++) {
     236        BRPaquet paq(fbuff[fib]+i*paqsz, paqsz);
     237        bool pqok=pcheck[fib].Check(paq,curfc_(fib,i));   // Verification du paquet / FrameCounter
     238        if (!pqok)  continue;
     239        cpaqok_(fib,i) = 1;
     240        sa_size_t lc=fib;
     241        if (par_.fgdatafft) {    // Traitement data de type FFT
     242          TwoByteComplex* tbcp=paq.Data1C();
     243
     244          //  exposant FFT
     245          phexp[lc]->Add((r_4)tbcp[idxexpo].realD());
     246
     247          for(sa_size_t j=1; j<spectre_.NCols(); j++) {
     248            phist[lc]->Add((r_4)tbcp[j].realD());
     249            phist[lc]->Add((r_4)tbcp[j].imagD());
     250            ph2[lc]->Add((r_4)tbcp[j].realD(), (r_4)tbcp[j].imagD());
     251            // comptage saturation
     252            int sir=0, sii=0;  // saturation partie reelle, partie imaginaire
     253            if (tbcp[j].realI()==-128) sir=-1;
     254            else if (tbcp[j].realI()==127) sir=1;
     255            if (tbcp[j].imagI()==-128) sii=-1;
     256            else if (tbcp[j].imagI()==127) sii=1;
     257            (*psatur[lc])(sir+1,sii+1)+=1.;
     258            if ((sir!=0)||(sii!=0))  (*pvsatfreq[lc])(j)+=1;
     259            spectre_(lc,j) += Zmod2(tbcp[j]);
     260          }
     261          nzm_[lc]++;   
     262        }
     263        else {   // Traitement RawData
     264          for(sa_size_t j=0; j<vx.Size(); j++) {
     265            phist[lc]->Add((r_8)(*(paq.Data1()+j)));
     266            vx(j) = (r_4)(*(paq.Data1()+j))-127.5;
     267          }
     268          fftwf_execute(plan);
     269          //   ffts_.FFTForward(vx, cfour_);
     270          for(sa_size_t j=0; j<spectre_.NCols(); j++)
     271            spectre_(lc,j) += Zmod2(cfour(j+1));
     272          nzm_[lc]++;      lc++;
     273        }       
     274      }  // FIN de la boucle sur les paquets
     275    }   // Boucle sur les fibres
     276    memgr.FreeMemZone(mid, mmsta_);  // MemZS_Proc);
     277    CheckFrameCounters();
     278
     279    nblocproc_ ++;   
     280    totnprocpaq_ += memgr.NbPaquets();  nprocpaq_ += memgr.NbPaquets();
     281    bool fgnzm=true;
     282    for(int lc=0; lc<memgr.NbFibres(); lc++) 
     283      if (nzm_[lc]<nmean_) fgnzm=false;
     284   
     285    if (fgnzm) {
     286      char buff[32];
     287      for(sa_size_t lc=0; lc<memgr.NbFibres(); lc++)  {
     288        spectre_.Row(lc) /= (r_4)nzm_[lc];
     289        sprintf(buff,"NPaqMoy%d",(int)lc);
     290        spectre_.Info()[buff] = nzm_[lc];
     291      }
     292      sprintf(fname,"%s/meanspec%d.ppf",path_.c_str(),(int)nfiles_);
     293      nfiles_++;
     294      POutPersist po(fname);
     295      po << PPFNameTag("spectre") << spectre_;
     296      spectre_ = (r_4)(0.);
     297      char buftag[32];
     298      for(int lc=0; lc<memgr.NbFibres(); lc++)  {
     299        sprintf(buftag,"hvalV%d",(int)lc);
     300        po << PPFNameTag(buftag) << (*phist[lc]);
     301        phist[lc]->Zero();
     302        if (par_.fgdatafft) {    // data de type FFT   
     303          sprintf(buftag,"h2dV%d",(int)lc);
     304          po << PPFNameTag(buftag) << (*ph2[lc]);
     305          ph2[lc]->Zero();
     306          sprintf(buftag,"hexpV%d",(int)lc);
     307          po << PPFNameTag(buftag) << (*phexp[lc]);
     308          phexp[lc]->Zero();
     309          sprintf(buftag,"saturV%d",(int)lc);
     310          po << PPFNameTag(buftag) << (*psatur[lc]);
     311          (*psatur[lc])=0.;
     312          sprintf(buftag,"satfreqV%d",(int)lc);
     313          po << PPFNameTag(buftag) << (*pvsatfreq[lc]);
     314          (*pvsatfreq[lc])=0;
     315        }
     316        nzm_[lc]=0;
     317      }
     318      ts.SetNow();
     319      // Calcul / impression fraction des paquets avec same-framecounter
     320      int fracsame=0;
     321      if (nprocpaq_>0)  fracsame=100*npaqsamefc_/nprocpaq_;
     322      int totfracsame=0;
     323      if (totnprocpaq_>0)  totfracsame=100*totnpaqsamefc_/totnprocpaq_;
     324      filog << ts << " :  proc file (meanspectra) " << fname << endl;
     325      filog << "  NBlocProcessed=" << nblocproc_ << " NSameFC=" << totnpaqsamefc_ << " / " << totnprocpaq_
     326            << " -> " << totfracsame << " % (LastPqs: " << npaqsamefc_ <<  " / " << nprocpaq_
     327            << " -> " << fracsame << " % )" << endl;
     328      cout << " MonitorProc::procData1C() " << ts << " : created file  " << fname << endl;
     329      cout << "  NBlocProcessed=" << nblocproc_ << " NSameFC=" << totnpaqsamefc_ << " / " << totnprocpaq_
     330           << " -> " << totfracsame << " % (LastPqs: " << npaqsamefc_ <<  " / " << nprocpaq_
     331           << " -> " << fracsame << " % )" << endl;
     332      nprocpaq_=npaqsamefc_=0;
     333    }
     334  }   // Fin de boucle sur les kmz ( bloc MemZoneMgr  a traiter )
     335
     336  bool fgnzm=false;
     337  for(int lc=0; lc<memgr.NbFibres(); lc++) 
     338    if (nzm_[lc]>0) fgnzm=true;
     339 
     340  if (fgnzm) {
     341    char buff[32];
     342    for(sa_size_t lc=0; lc<memgr.NbFibres(); lc++)  {
     343      if (nzm_[lc]>0)  spectre_.Row(lc) /= (r_4)nzm_[lc];
     344      sprintf(buff,"NPaqMoy%d",(int)lc);
     345      spectre_.Info()[buff] = nzm_[lc];
     346    }
     347    sprintf(fname,"%s/meanspec%d.ppf",path_.c_str(),(int)nfiles_);
     348    POutPersist po(fname);
     349    po << PPFNameTag("spectre") << spectre_;
     350    spectre_ = (r_4)(0.);
     351    char buftag[32];
     352    for(int lc=0; lc<memgr.NbFibres(); lc++)  {
     353      sprintf(buftag,"hvalV%d",(int)lc);
     354      po << PPFNameTag(buftag) << (*phist[lc]);
     355      delete phist[lc];
     356      if (par_.fgdatafft) {    // data de type FFT   
     357        sprintf(buftag,"h2dV%d",(int)lc);
     358        po << PPFNameTag(buftag) << (*ph2[lc]);
     359        delete ph2[lc];
     360        sprintf(buftag,"hexpV%d",(int)lc);
     361        po << PPFNameTag(buftag) << (*phexp[lc]);
     362        delete phexp[lc];
     363        sprintf(buftag,"saturV%d",(int)lc);
     364        po << PPFNameTag(buftag) << (*psatur[lc]);
     365        sprintf(buftag,"satfreqV%d",(int)lc);
     366        po << PPFNameTag(buftag) << (*pvsatfreq[lc]);
     367        delete psatur[lc];
     368        delete pvsatfreq[lc];
     369      }
     370      nzm_[lc]=0;
     371    }
     372    ts.SetNow();
     373    // Calcul / impression fraction des paquets avec same-framecounter
     374    int fracsame=0;
     375    if (nprocpaq_>0)  fracsame=100*npaqsamefc_/nprocpaq_;
     376    int totfracsame=0;
     377    if (totnprocpaq_>0)  totfracsame=100*totnpaqsamefc_/totnprocpaq_;
     378    filog << ts << " :  proc file (meanspectra) " << fname << endl;                   
     379    filog << "  NBlocProcessed=" << nblocproc_ << " NSameFC=" << totnpaqsamefc_ << " / " << totnprocpaq_
     380          << " -> " << totfracsame << " % (LastPqs: " << npaqsamefc_ <<  " / " << nprocpaq_
     381          << " -> " << fracsame << " % )" << endl;
     382    cout << " MonitorProc::procData1C() " << ts << " : created file  " << fname << endl;
     383    cout << "  NBlocProcessed=" << nblocproc_ << " NSameFC=" << totnpaqsamefc_ << " / " << totnprocpaq_
     384         << " -> " << totfracsame << " % (LastPqs: " << npaqsamefc_ <<  " / " << nprocpaq_
     385         << " -> " << fracsame << " % )" << endl;
     386  }
     387  return 0;
    162388}
    163389
Note: See TracChangeset for help on using the changeset viewer.