Changeset 3918 in Sophya for trunk


Ignore:
Timestamp:
Dec 2, 2010, 4:41:13 PM (15 years ago)
Author:
ansari
Message:

Amelioration code thread monitoring pour tenir compte du mode fftshrink + calcul matrice saturation, cmv+Reza

Location:
trunk/AddOn/TAcq
Files:
4 edited

Legend:

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

    r3915 r3918  
    4545#  Par defaut  @acqmode std
    4646#   Modes standard:  [std=raw2c : 2 channels raw data] [fft2c: fft 2 canaux - NOT reordered]
    47 #   Autres modes:  raw1c , fft1c , ordfft2c , ordfft1c 
     47#                     fftshrink=fft2cshrink 
     48#   Autres modes:  raw1c , fft1c , fft1cshrink , ordfft2c , ordfft1c 
    4849#                  [nof=std+NoFitsFile] pattern,patnof,fft2cnof ...
    4950@acqmode std
  • trunk/AddOn/TAcq/brparam.cc

    r3915 r3918  
    154154  AcqMode=acqmod;
    155155  fgdatafft=false;
     156  fgfftshrink=false;
    156157  fgsinglechannel=false;
    157158
     
    233234  AcqMode=p.AcqMode;
    234235  fgdatafft=p.fgdatafft;
     236  fgfftshrink=p.fgfftshrink;
    235237  fgsinglechannel=p.fgsinglechannel;
    236238
     
    425427  }
    426428  string acqmode = AcqMode;
    427   fgdatafft=false;  fgsinglechannel=false;
     429  fgdatafft=false;  fgfftshrink=false;  fgsinglechannel=false;
    428430  reducneedcopy=false;  pqreducmode=BR_TwoChanReduc;
    429431  if ((acqmode == "std")||(acqmode=="raw2c"))   swapall = BR_Copy ;
    430432  if (acqmode=="raw1c") { swapall = BR_Copy ;  fgsinglechannel=true;  pqreducmode=BR_OneChanReduc; }
    431433
    432   if ((acqmode == "fft2c")||(acqmode == "fft1c"))   swapall = BR_Copy ; 
     434  if (acqmode=="fft2c")  { swapall = BR_Copy;  fgdatafft=true; }
     435  if ((acqmode=="fft2cshrink")||(acqmode=="fftshrink"))  {  swapall = BR_Copy; fgdatafft=true; fgfftshrink=true; }
     436  if (acqmode=="fft1c")  { swapall = BR_Copy;  fgdatafft=true; fgsinglechannel=true; }
     437  if (acqmode=="fft1cshrink")  {  swapall = BR_Copy; fgdatafft=true; fgfftshrink=true; fgfftshrink=true; }
     438
    433439  if (acqmode == "nosw")   swapall = BR_Copy ;
    434440  if (acqmode == "nof")  { swapall = BR_Copy ; savesigfits = false; }
     
    497503  os << " AcqMode="<<AcqMode;
    498504  os << " Type of acquisition :" << BRPaquet::FmtConvToString( swapall) << endl;
     505  os << " Firmware: " << ((fgdatafft)?" FFT_Data ":" RawData ");
     506  os << ((fgfftshrink)?" ShrinkFFT ":" FULLFFT ");
     507  os << ((fgsinglechannel)?" SingleChannel":" TwoChannels") << endl;
    499508  os << " SkySource=" << skysource;
    500509  os << " NbFiles="<<NbFiles;
  • trunk/AddOn/TAcq/brparam.h

    r3915 r3918  
    143143  string AcqMode;  // Mode d'acquisition (conditionne la mise en ordre/conversion des donnees lues par DMA
    144144  bool fgdatafft;  // true -> donnee FFT (provenant du firmware FFT)
     145  bool fgfftshrink;  // true -> donnee FFT tronquee [NumFreq=2048...3072] (provenant du firmware FFT)
    145146  bool fgsinglechannel; // true -> un seul canal par fibre (par defaut=2 canaux/fibres)
    146147
  • trunk/AddOn/TAcq/racquproc.cc

    r3876 r3918  
    177177
    178178  // Histo pour valeurs des bytes dans les paquets
    179   Histo* phist[2*MAXNBFIB] = {NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL};
    180   Histo2D* ph2[2*MAXNBFIB] = {NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL};
    181   Histo* phexp[2*MAXNBFIB] = {NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL};
     179  Histo* phist[2*MAXNBFIB];
     180  Histo2D* ph2[2*MAXNBFIB];
     181  Histo* phexp[2*MAXNBFIB];
     182  TMatrix<r_4>* psatur[2*MAXNBFIB]; 
     183  for(int ifib=0; ifib<2*MAXNBFIB; ifib++) {
     184    phist[ifib]=NULL; ph2[ifib]=NULL; phexp[ifib]=NULL; psatur[ifib]=NULL;
     185  }
    182186  if (par_.fgdatafft) {    // data de type FFT   
    183187    for(sa_size_t lc=0; lc<2*memgr.NbFibres(); lc++) {
     
    185189      ph2[lc]   = new Histo2D(-128.5,+128.5,257, -128.5,+128.5,257);
    186190      phexp[lc] = new Histo(-128.5,+128.5,257);
     191      psatur[lc] = new TMatrix<r_4>(3,3);
     192      *psatur[lc] = 0.;
    187193    }
    188194  }
     
    218224      }
    219225    }
     226
     227    // DBG-ATTENTION : freq 0 pour expo full FFT si reordonne
     228    int idxexpo=(par_.fgfftshrink)?1023:0; // exposant FFT shrink 1024 freq, ou freq 0 pour full-FFT
    220229   
    221230    cpaqok_ = (uint_1)0;
     
    230239        if (par_.fgdatafft) {    // Traitement data de type FFT
    231240          TwoByteComplex* tbcp=paq.Data1C();
    232           phexp[lc]->Add((r_4)tbcp[0].realD());
     241
     242          //  exposant FFT
     243          phexp[lc]->Add((r_4)tbcp[idxexpo].realD());
     244
    233245          for(sa_size_t j=1; j<spectre_.NCols(); j++) {
    234246            phist[lc]->Add((r_4)tbcp[j].realD());
    235247            phist[lc]->Add((r_4)tbcp[j].imagD());
    236248            ph2[lc]->Add((r_4)tbcp[j].realD(), (r_4)tbcp[j].imagD());
     249            // comptage saturation
     250            int sir=0, sii=0;  // saturation partie reelle, partie imaginaire
     251            if (tbcp[j].realI()==-128) sir=-1;
     252            else if (tbcp[j].realI()==127) sir=1;
     253            if (tbcp[j].imagI()==-128) sii=-1;
     254            else if (tbcp[j].imagI()==127) sii=1;
     255            (*psatur[lc])(sir+1,sii+1)+=1.;
     256
    237257            spectre_(lc,j) += Zmod2(tbcp[j]);
    238258          }
    239259          nzm_[lc]++;   
    240260          tbcp=paq.Data2C();   lc++;
    241           phexp[lc]->Add((r_4)tbcp[0].realD());
     261          phexp[lc]->Add((r_4)tbcp[idxexpo].realD());
    242262          for(sa_size_t j=1; j<spectre_.NCols(); j++) {
    243263            phist[lc]->Add((r_4)tbcp[j].realD());
    244264            phist[lc]->Add((r_4)tbcp[j].imagD());
    245265            ph2[lc]->Add((r_4)tbcp[j].realD(), (r_4)tbcp[j].imagD());
     266            // comptage saturation
     267            int sir=0, sii=0;  // saturation partie reelle, partie imaginaire
     268            if (tbcp[j].realI()==-128) sir=-1;
     269            else if (tbcp[j].realI()==127) sir=1;
     270            if (tbcp[j].imagI()==-128) sii=-1;
     271            else if (tbcp[j].imagI()==127) sii=1;
     272            (*psatur[lc])(sir+1,sii+1)+=1.;
     273
    246274            spectre_(lc,j) += Zmod2(tbcp[j]);
    247275          }
     
    303331          po << PPFNameTag(buftag) << (*phexp[lc]);
    304332          phexp[lc]->Zero();
     333          sprintf(buftag,"saturV%d",(int)lc);
     334          po << PPFNameTag(buftag) << (*psatur[lc]);
     335          cout << " Matrice Saturation Voie[" << lc << "] : " <<  (*psatur[lc]);
     336          if (nzm_[lc]>0)  {
     337            (*psatur[lc]) /= ((r_4)nzm_[lc]*0.01); 
     338            cout << " Matrice Saturation Pourcentage Voie[" << lc << "] : " <<  (*psatur[lc]);
     339          }
     340          (*psatur[lc])=0.;
    305341        }
    306342        nzm_[lc]=0;
     
    351387        po << PPFNameTag(buftag) << (*phexp[lc]);
    352388        delete phexp[lc];
     389        sprintf(buftag,"saturV%d",(int)lc);
     390        po << PPFNameTag(buftag) << (*psatur[lc]);
     391        cout << " Matrice Saturation Voie[" << lc << "] : " <<  (*psatur[lc]);
     392        if (nzm_[lc]>0)  {
     393          (*psatur[lc]) /= ((r_4)nzm_[lc]*0.01); 
     394          cout << " Matrice Saturation Pourcentage Voie[" << lc << "] : " <<  (*psatur[lc]);
     395        }
     396        (*psatur[lc])=0.;
    353397      }
    354398      nzm_[lc]=0;
     
    369413         << " -> " << fracsame << " % )" << endl;
    370414  }
     415
     416  for(sa_size_t lc=0; lc<2*memgr.NbFibres(); lc++) {
     417    if (phist[lc]) delete phist[lc];
     418    if (ph2[lc]) delete ph2[lc];
     419    if (phexp[lc]) delete phexp[lc];
     420    if (psatur[lc]) delete psatur[lc];
     421  }
     422
    371423  return 0;
    372424}
Note: See TracChangeset for help on using the changeset viewer.