Changeset 3905 in Sophya for trunk/AddOn


Ignore:
Timestamp:
Oct 15, 2010, 11:02:36 PM (15 years ago)
Author:
ansari
Message:

implementation de la fenetre en temps pour les spectres ds BRMeanSpecCalculator, Reza 15/10/2010

Location:
trunk/AddOn/TAcq
Files:
5 edited

Legend:

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

    r3888 r3905  
    3232  nthreads_=1;
    3333
     34  spec_win_sz_=0;
     35  spw_ext_sz_=0;
     36  nbmax_specwfiles_=0;
     37
    3438  vmin_=0.;  vmax_=9e99;
    3539  gainfile_="";
     
    96100    else if (strcmp(arg[ka],"-gain")==0) {
    97101      gainfile_=arg[ka+1];
     102      ka+=2;
     103    }
     104    else if (strcmp(arg[ka],"-tspwin")==0) {
     105      int ai1=0,ai2=0,ai3=0;
     106      sscanf(arg[ka+1],"%d,%d,%d",&ai1,&ai2,&ai3);
     107      spec_win_sz_=ai1;  spw_ext_sz_=ai2;   nbmax_specwfiles_=ai3;
    98108      ka+=2;
    99109    }
     
    138148       << "                 [-nbloc NBloc] [-freq NumFreqMin,NumFreqMax,NBinFreq] \n"
    139149       << "                 [-prt lev,modulo] [-nvcal n] [-nthr n] [-nosfc] \n"
    140        << "                 [-gain filename] [-varcut min,max] \n"
     150       << "                 [-gain filename] [-varcut min,max] [-tspwin wsz,extsz,nfiles] \n"
    141151       << "         -in Imin,Imax,Istep InPath FiberList [InPath2 FiberList2 InPath3 FiberList3 ...] \n" << endl;
    142152  if (fgshort) {
     
    159169       << " -varcut min,max : min-max cut on variance \n"
    160170       << " -gain filename : spectral response fits file name \n"
     171       << " -tspwin wsz,extsz,nfiles : spectra time (paquet no) window (ex: -tspwin 120,4,5) \n"
     172       << "    wsz,extsz= window,extension size;  nfiles= maximum number of windows saved \n"
    161173       << " -in : input files/directory definition : \n"
    162174       << "       Imin,Imax,Istep: fits files signalII.fits Imin<=II<=Imax Istep=increment \n"
     
    187199  cout << " FreqMin= " << freqmin_ << " FreqMax= " << freqmax_ << " NBinFreq= " << nbinfreq_ << endl;
    188200  cout << " GainFileName=" << gainfile_ << " VarianceMin= " << vmin_ << " VarianceMax= " << vmax_ << endl;
     201  cout << " Spectra TimeWindow (Nb.Paquets) Size=" << spec_win_sz_ << " ExtensionSize=" << spw_ext_sz_
     202       << " MaxNbFile=" << nbmax_specwfiles_ << endl;
    189203  cout << " PaqSize=" << paqsize_ << "  -  NZones=" << nzones_ << " NPaqZone=" << npaqinzone_
    190204       << " PrtLevel=" << prtlevel_ << " PrtCntModulo=" <<  prtmodulo_ << endl;
  • trunk/AddOn/TAcq/branap.h

    r3888 r3905  
    4646  uint_4 nthreads_;  // Nb de threads pour l'execution parallele ds BRVisibilityCalculator
    4747
     48  uint_4 spec_win_sz_;   // taille de fenetre (temps/no de paquet) pour les spectres
     49  uint_4 spw_ext_sz_;     // zone de garde en temps / no de paquet pour la fenetre des spectres
     50  uint_4 nbmax_specwfiles_;  // nb maxi de fichiers de fenetres de spectres sauvees
     51
    4852  double vmin_,vmax_;   // coupure min-max sur la variance
    4953  string gainfile_;     // nom du fichier de gain (reponse spectrale)
  • trunk/AddOn/TAcq/brproc.cc

    r3888 r3905  
    3232
    3333//---------------------------------------------------------------------
    34 // Classe de traitement simple - calcul de spectres moyennes / voie
     34// Classe de traitement de spectres -
     35// Calcul de spectres moyennes,variance / voie + nettoyage
    3536//---------------------------------------------------------------------
    3637/* --Methode-- */
     
    3940  : BRBaseProcessor(memgr), outpath_(outpath), nmean_(nmean),
    4041    fgdatafft_(fgdatafft), fgsinglechannel_(fgsinglechan),
    41     clnflg_(fgsinglechan?memgr_.NbFibres():2*memgr_.NbFibres()),
     42    nbpaq4mean_(fgsinglechan?memgr_.NbFibres():2*memgr_.NbFibres()),
    4243    nbadpaq_(fgsinglechan?memgr_.NbFibres():2*memgr_.NbFibres())
    4344{
     
    5960
    6061  numfile_=0;
    61   nbpaq4mean_=0;
    6262  totnbpaq_=0;
    6363
     64  size_t nchan=(fgsinglechannel_?memgr_.NbFibres():2*memgr_.NbFibres());
     65 
     66  for(size_t i=0; i<nchan; i++) {
     67    nbpaq4mean_[i]=nbadpaq_[i]=0;
     68  }
     69
     70  // Definition des tailles de fenetres de spectres, etc ...
     71  SetSpectraWindowSize();
     72  SetMaxNbSepcWinFiles();
     73  nbtot_specwin_=0;
    6474  SetVarianceLimits();
    6575
     
    6979  ofsdtp_ = new FitsInOutFile(dtfile,FitsInOutFile::Fits_Create);
    7080  dtp_ = new SwFitsDataTable(*ofsdtp_,1024,true);
    71   int nchan=(fgsinglechannel_?memgr_.NbFibres():2*memgr_.NbFibres());
    7281  char cnom[32];
    7382  for(int i=0; i<nchan; i++) {
    74     sprintf(cnom,"var%d",i);
     83    sprintf(cnom,"variance%d",i);
    7584    dtp_->AddFloatColumn(cnom);   
    7685  }
     86  /*
    7787  for(int i=0; i<nchan; i++) {
    78     sprintf(cnom,"varnorm%d",i);
     88    sprintf(cnom,"sigma%d",i);
    7989    dtp_->AddFloatColumn(cnom);   
    8090  }
     91  */
    8192  xnt_=new double[nchan*2];
     93
    8294}
    8395
     
    8597BRMeanSpecCalculator::~BRMeanSpecCalculator()
    8698{
    87   if (nbpaq4mean_>1)  SaveSpectra();
     99  uint_8 npqm=0;
     100  for(size_t i=0; i<nbpaq4mean_.size(); i++)  npqm+=nbpaq4mean_[i];
     101  if (npqm>nmean_*nbpaq4mean_.size()/10)  SaveMeanSpectra();
    88102  cout << " ---------------- BRMeanSpecCalculator()_Finalizing -------------------- " << endl;
    89103  for(size_t i=0; i<nbadpaq_.size(); i++) {
     
    100114
    101115/* --Methode-- */
    102 void BRMeanSpecCalculator::ReadGainFitsFile(string filename)
     116void BRMeanSpecCalculator::SetSpectraWindowSize(uint_4 winsz, uint_4 wszext)
     117{
     118  if (winsz < 3) {
     119    winsz=1;  wszext=0;
     120  } 
     121  if (wszext>=winsz/2) wszext=winsz/2;
     122  sa_size_t sz[5]={0,0,0,0,0};
     123  sz[0]=mspecmtx_.NCols();
     124  sz[1]=mspecmtx_.NRows();
     125  sz[2]=winsz+2*wszext;
     126  spec_window_.SetSize(3,sz);
     127  spwin_ext_sz_=wszext;
     128  sz[0]=mspecmtx_.NRows();
     129  sz[1]=winsz+2*wszext; 
     130  clnflg_.SetSize(2,sz);
     131  cout << "BRMeanSpecCalculator::SetSpectraWindowSize()/Info: SpectraWindowSize()=" << GetSpectraWindowSize()
     132       << " ExtensionSize=" << GetSpecWinExtensionSize() << " Overlap=" << GetSpecWinOverlapSize()
     133       << " ArraySize=" << spec_window_.SizeZ() << endl;
     134
     135  paqnum_w_start=spwin_ext_sz_;  // premiere initialisation du numero de paquet
     136  return;
     137}
     138
     139/* --Methode-- */
     140void BRMeanSpecCalculator::ReadGainFitsFile(string filename, bool fgapp)
    103141{
    104142  cout << " BRMeanSpecCalculator::ReadGainFitsFile() - reading file " << filename;
    105143  FitsInOutFile fis(filename, FitsInOutFile::Fits_RO);
    106144  fis >> sgain_;
    107   cout << " MeanGain=" << sgain_.Sum()/sgain_.Size() << endl;
     145  fg_apply_gains_=fgapp;
     146  cout << " MeanGain=" << sgain_.Sum()/sgain_.Size() << " ApplyGains="
     147       << ((fg_apply_gains_)?"true":"false") << endl;
    108148}
    109149
     
    111151{ return (z.real()*z.real()+z.imag()*z.imag()); }
    112152
     153
     154
     155
    113156/* --Methode-- */
    114157int BRMeanSpecCalculator::Process()
    115158{
    116   if (nbpaq4mean_==nmean_)  SaveSpectra();
    117   FlagBadPackets();
    118    
     159  // Cette methode remplit le tableau spec_window_ avec les spectres (renormalise avec
     160  // les gains si demande) et appelle la methode du traitement de la fenetre temporelle
     161  // des spectres le cas echeant ProcSpecWin()
     162
     163  int_8 nbpaqdec = (int_8)totnbpaq_-(int_8)GetSpecWinOverlapSize();
     164  if ((nbpaqdec>0)&&(nbpaqdec%GetSpectraWindowSize()==0)) {
     165    paqnum_w_end=totnbpaq_-GetSpecWinExtensionSize();
     166    ProcSpecWin(paqnum_w_start, paqnum_w_end);
     167    paqnum_w_start=totnbpaq_-GetSpecWinExtensionSize();
     168  }
     169
    119170  if (fgdatafft_) {  // Donnees firmware FFT
    120     for(sa_size_t i=0; i<(size_t)mspecmtx_.NRows(); i++) {
    121       if (clnflg_[i])  { nbadpaq_[i]++;  continue; }   // si le paquet a ete flagge mauvais ( clnflg_[i] <> 0 )
     171    for(sa_size_t i=0; i<spec_window_.SizeY(); i++) {
    122172      TwoByteComplex* zp=NULL;
    123173      if (fgsinglechannel_) {
     
    128178        if (i%2==1)  zp=vpaq_[i/2].Data2C();
    129179      }
    130       TVector< r_4 > spec = mspecmtx_.Row(i);
    131       TVector< r_4 > sspec = sigspecmtx_.Row(i);
    132       for(sa_size_t f=1; f<spec.Size(); f++) {
    133         r_4 m2zf=zp[f].module2F();;
    134         spec(f) += m2zf;
    135         sspec(f) += m2zf*m2zf;
    136       }
     180      sa_size_t kz=PaqNumToArrayIndex(totnbpaq_);
     181      for(sa_size_t f=0; f<spec_window_.SizeX(); f++)
     182        spec_window_(f,i,kz) = zp[f].module2F();
    137183    }
    138184  }
    139185  else {  // Donnees RAW qui ont du etre processe par BRFFTCalculator
    140     for(sa_size_t i=0; i<(size_t)mspecmtx_.NRows(); i++) {
    141       if (clnflg_[i])  { nbadpaq_[i]++;  continue; }   // si le paquet a ete flagge mauvais ( clnflg_[i] <> 0 )
     186    for(sa_size_t i=0; i<spec_window_.SizeY(); i++) {
    142187      complex<ODT>* zp=NULL;
    143188      if (fgsinglechannel_) {
     
    148193        if (i%2==1)  zp= reinterpret_cast< complex<ODT>* >(vprocpaq_[i/2]+memgr_.ProcPaqSize()/2) ;
    149194      }
     195      sa_size_t kz=PaqNumToArrayIndex(totnbpaq_);
     196      for(sa_size_t f=0; f<spec_window_.SizeX(); f++)
     197        spec_window_(f,i,kz) = Zmod2(zp[f]);
     198    }
     199  }
     200  if (fg_apply_gains_) {   // Application des gains, si demande
     201    sa_size_t kz=PaqNumToArrayIndex(totnbpaq_);
     202    for(sa_size_t i=0; i<spec_window_.SizeY(); i++)
     203      (spec_window_(Range::all(), Range(i), Range(kz))).Div(sgain_.Row(i));
     204  }
     205
     206  totnbpaq_++;
     207  return 0;
     208}
     209
     210
     211/* --Methode-- */
     212void BRMeanSpecCalculator::ProcSpecWin(uint_8 numpaqstart, uint_8 numpaqend)
     213{
     214  //DBG  cout << "BRMeanSpecCalculator::ProcSpecWin()/Debug: numpaqstart=" << numpaqstart
     215  //DBG     << " numpaqend=" << numpaqend << endl;
     216
     217  // On appelle la routine de nettoyage qui doit flagger les mauvais paquets
     218  FlagBadPackets(numpaqstart, numpaqend);
     219
     220  // Boucle sur les numeros de paquets de la fenetre en temps
     221  for (uint_8 jp=numpaqstart; jp<numpaqend; jp++) {
     222    // On sauvegarde les spectres moyennes si necessaire
     223    if ((nbpaq4mean_[0]>0)&&(nbpaq4mean_[0]%nmean_ == 0))  SaveMeanSpectra();
     224    //  On peut aussi acceder aux spectres et flags pour (jpmin -),(jpmax+) GetSpecWinExtensionSize()
     225    sa_size_t kz=PaqNumToArrayIndex(jp);
     226    // Boucle sur les numeros de voie (canaux)
     227    for(sa_size_t i=0; i<spec_window_.SizeY(); i++)  {
     228      if ( clnflg_(i,kz) != 0)  continue;
    150229      TVector< r_4 > spec = mspecmtx_.Row(i);
    151230      TVector< r_4 > sspec = sigspecmtx_.Row(i);
    152       for(sa_size_t f=1; f<spec.Size(); f++)  {
    153         r_4 m2zf=Zmod2(zp[f]);
    154         spec(f) += m2zf;
    155         sspec(f) += (m2zf*m2zf);       
    156       }     
     231      // Calcul de spectres moyennes et variance
     232      for(sa_size_t f=1; f<spec.Size(); f++)  {   // boucle sur les frequences
     233        spec(f) += spec_window_(f,i,kz);
     234        sspec(f) += spec_window_(f,i,kz)*spec_window_(f,i,kz); 
     235      }
     236      nbpaq4mean_[i]++;  // compteur de paquets OK pour la moyenne
    157237    }
    158238  }
    159   nbpaq4mean_++;   totnbpaq_++;
    160   return 0;
    161 }
    162 
    163 /* --Methode-- */
    164 void BRMeanSpecCalculator::FlagBadPackets()
    165 {
    166   if (fgdatafft_) {  // Donnees firmware FFT
    167     for(sa_size_t i=0; i<(size_t)mspecmtx_.NRows(); i++) {
    168       TwoByteComplex* zp=NULL;
    169       if (fgsinglechannel_) {
    170         zp=vpaq_[i].Data1C();
    171       }
    172       else {
    173         zp=vpaq_[i/2].Data1C();
    174         if (i%2==1)  zp=vpaq_[i/2].Data2C();
    175       }
     239  if (nbtot_specwin_<nmaxfiles_specw_)  SaveSpectraWindow();
     240  nbtot_specwin_++;
     241  return;
     242}
     243
     244/* --Methode-- */
     245void BRMeanSpecCalculator::FlagBadPackets(uint_8 numpaqstart, uint_8 numpaqend)
     246{
     247  // Boucle sur les numeros de paquets de la fenetre en temps
     248  for (uint_8 jp=numpaqstart; jp<numpaqend; jp++) {
     249    //  On peut aussi acceder aux spectres et flags pour (jpmin -),(jpmax+) GetSpecWinExtensionSize()
     250    sa_size_t kz=PaqNumToArrayIndex(jp);
     251    // Boucle sur les numeros de voie (canaux)
     252    for(sa_size_t i=0; i<spec_window_.SizeY(); i++)  {
     253      double mean, sigma;
     254      sa_size_t kz=PaqNumToArrayIndex(totnbpaq_);
    176255      double variance=0.;
    177       double varnorm=0.;
    178       for(sa_size_t f=1; f<mspecmtx_.NCols(); f++) {
    179         double modsq=(double)zp[f].module2F();
    180         variance+=modsq;
    181         varnorm+=modsq/sgain_(i,f);
    182       }
     256      variance=spec_window_(Range(1,Range::lastIndex()), Range(i), Range(kz)).Sum();
    183257      xnt_[i]=variance;
    184       xnt_[i+mspecmtx_.NRows()]=varnorm;
    185       clnflg_[i]=0;
    186       if (varnorm<varmin_) clnflg_[i]=1;
    187       else if (varnorm>varmax_) clnflg_[i]=2;
     258      clnflg_(i,kz)=0;
     259      if (variance<varmin_) { clnflg_(i,kz)=1;  nbadpaq_[i]++; }
     260      else if (variance>varmax_) { clnflg_(i,kz)=2;  nbadpaq_[i]++; }
    188261    }
    189   }
    190   else {  // Donnees RAW qui ont du etre processe par BRFFTCalculator
    191     for(sa_size_t i=0; i<(size_t)mspecmtx_.NRows(); i++) {
    192       complex<ODT>* zp=NULL;
    193       if (fgsinglechannel_) {
    194         zp=reinterpret_cast< complex<ODT>* > (vprocpaq_[i]);
    195       }
    196       else {
    197         zp=reinterpret_cast< complex<ODT>* > (vprocpaq_[i/2]);
    198         if (i%2==1)  zp= reinterpret_cast< complex<ODT>* >(vprocpaq_[i/2]+memgr_.ProcPaqSize()/2) ;
    199       }
    200       double variance=0.;
    201       double varnorm=0.;
    202       for(sa_size_t f=1; f<mspecmtx_.NCols(); f++) {
    203         double modsq=(double)Zmod2(zp[f]);
    204         variance+=modsq;
    205         varnorm+=modsq/sgain_(i,f);
    206       }
    207       xnt_[i]=variance;
    208       xnt_[i+mspecmtx_.NRows()]=varnorm;
    209       clnflg_[i]=0;
    210       if (varnorm<varmin_) clnflg_[i]=1;
    211       else if (varnorm>varmax_) clnflg_[i]=2;
     262  dtp_->AddRow(xnt_);
     263  }
     264  return;
     265}
     266
     267/* --Methode-- */
     268void BRMeanSpecCalculator::SaveMeanSpectra()
     269{
     270  for(sa_size_t ir=0; ir<mspecmtx_.NRows(); ir++) {
     271    char buff[32];
     272    sprintf(buff,"NPAQSUM_%d",(int)ir);
     273    mspecmtx_.Info()["NPAQSUM"] = nbpaq4mean_[0];
     274    mspecmtx_.Info()[buff] = nbpaq4mean_[ir];
     275    sigspecmtx_.Info()["NPAQSUM"] = nbpaq4mean_[0];
     276    sigspecmtx_.Info()[buff] = nbpaq4mean_[ir];
     277    if (nbpaq4mean_[ir] > 0) {
     278      mspecmtx_.Row(ir)  /= (r_4)nbpaq4mean_[ir];
     279      sigspecmtx_.Row(ir) /= (r_4)nbpaq4mean_[ir];
     280      sigspecmtx_.Row(ir) -= (mspecmtx_.Row(ir) && mspecmtx_.Row(ir));  // Mean(X^2) - [ Mean(X) ]^2
    212281    }
    213282  }
    214   dtp_->AddRow(xnt_);
    215   return;
    216 }
    217 
    218 /* --Methode-- */
    219 void BRMeanSpecCalculator::SaveSpectra()
    220 {
    221   mspecmtx_.Info()["NPAQSUM"] = nbpaq4mean_;
    222   mspecmtx_ /= (double)nbpaq4mean_;
    223   sigspecmtx_.Info()["NPAQSUM"] = nbpaq4mean_;
    224   sigspecmtx_ /= (double)nbpaq4mean_;
    225   sigspecmtx_ -= (mspecmtx_ && mspecmtx_);  // Mean(X^2) - [ Mean(X) ]^2
    226283  char nfile[64];
    227284  string flnm;
    228   /*
    229   {
    230   sprintf(nfile,"mspecmtx%d.ppf",numfile_);
    231   flnm=outpath_+nfile;
    232   POutPersist po(flnm);
    233   po << mspecmtx_;
    234   }
    235   {
    236   sprintf(nfile,"sigspecmtx%d.ppf",numfile_);
    237   flnm=outpath_+nfile;
    238   POutPersist po(flnm);
    239   po << sigspecmtx_;
    240   }
    241   */
    242285  {
    243286  sprintf(nfile,"mspecmtx%d.fits",numfile_);
     
    253296  }
    254297
    255   cout << numfile_ << "-BRMeanSpecCalculator::SaveSpectra() NPaqProc="
     298  cout << numfile_ << "-BRMeanSpecCalculator::SaveMeanSpectra() NPaqProc="
    256299       << totnbpaq_ << "  -> Mean/Sig spectra Matrix in " << flnm << " /sigspec...ppf" << endl;
    257   numfile_++;  nbpaq4mean_=0;
     300  numfile_++; 
     301
     302  for(size_t i=0; i<nbpaq4mean_.size(); i++) nbpaq4mean_[i]=0;
    258303  mspecmtx_ = (r_4)(0.);
    259304  sigspecmtx_ = (r_4)(0.);
    260305  return;
     306}
     307
     308/* --Methode-- */
     309void BRMeanSpecCalculator::SaveSpectraWindow()
     310{
     311  char nfile[64];
     312  string flnm;
     313  sprintf(nfile,"specwin%d.fits",nbtot_specwin_);
     314  flnm="!"+outpath_+nfile;
     315  FitsInOutFile fos(flnm,FitsInOutFile::Fits_Create);
     316  fos << spec_window_;
     317  cout << " SaveSpectraWindow() " << nbtot_specwin_ << "- file " << nfile << " created " << endl;
    261318}
    262319
     
    332389  for(uint_4 k=0; k<inp.Size(); k++)   inp(k)=(ODT)indata[k];
    333390  fftwf_execute(myplan_);
    334   for(uint_4 k=0; k<outfc.Size(); k++)   ofc[k]=outfc(k);
     391  for(uint_4 k=0; k<outfc.Size(); k++)   ofc[k]=outfc(k)/(ODT)sz_;   // on renormalise les coeff FFT ( / sz )
    335392  return;
    336393}
  • trunk/AddOn/TAcq/brproc.h

    r3888 r3905  
    66// Classes de threads de traitememt donnees BAORadio
    77//  Principales classes utilisables
    8 //  - BRMeanSpecCalculator (donnees FFT)
     8//  - BRMeanSpecCalculator (donnees FFT ou RAW apres BRFFTCalculator)
    99//  - BRFFTCalculator (donnees RAW)
    1010//----------------------------------------------------------------
     
    2727using namespace std;
    2828
    29 
    3029 
    3130//---------------------------------------------------------------------
     
    4039  virtual ~BRMeanSpecCalculator(); // Fait le nettoyage final , sauvegarde des objets ...
    4140
     41// Definit la taille de la fenetre temporelle (winsz = nb de paquets) des spectres a traiter
     42// Cette zone est etendu de wszext paquet en debut et en fin de paquet
     43  void SetSpectraWindowSize(uint_4 winsz=15, uint_4 wszext=3);
     44// Taille de la fenetre en temps (nb de paquets a traiter en bloc
     45  inline sa_size_t GetSpectraWindowSize() { return spec_window_.SizeZ()-2*spwin_ext_sz_; }
     46// Taille de la zone d'extension de la fenetre de chaque cote
     47  inline sa_size_t GetSpecWinExtensionSize() { return spwin_ext_sz_; }
     48// La taille de recouvrement est le double de la taille de la zone d'extension
     49  inline sa_size_t GetSpecWinOverlapSize() { return 2*spwin_ext_sz_; }
     50// Retourne l'index (selon Z) dans le tableau des spectres en fonction du numero de paquet
     51  inline sa_size_t PaqNumToArrayIndex(uint_8 numpaq)  { return numpaq%spec_window_.SizeZ() ; }
     52
     53// Pour definir le nombre maximum de fichiers de fenetres de spectres
     54  inline void SetMaxNbSepcWinFiles(uint_4 nmax=0)  {  nmaxfiles_specw_=nmax; }
     55
    4256  inline void SetVarianceLimits(double vmin=0., double vmax=9.e99)
    43      { varmin_=vmin;  varmax_=vmax; }
    44 
    45   void ReadGainFitsFile(string filename);
    46 
    47 protected:
    48   virtual int Process();
    49   virtual void FlagBadPackets();
    50   virtual void SaveSpectra();
     57    { varmin_=vmin;  varmax_=vmax; }
     58
     59// lecture des gains en fonction de la frequence depuis un fichier FITS
     60// flag fgapp: Active ou desactive la renormalisation de coefficients de Fourier par les gains=f(frequence) 
     61  void ReadGainFitsFile(string filename, bool fgapp=true);
     62
     63protected:
     64  virtual int Process();   // appele paquet par paquet
     65// appele par Process() pour traiter un groupe de paquets correspondant a une fenetre en temps
     66  virtual void ProcSpecWin(uint_8 numpaqstart, uint_8 numpaqend);  // appele fenetre par fenetre 
     67  virtual void FlagBadPackets(uint_8 numpaqstart, uint_8 numpaqend);   
     68  virtual void SaveMeanSpectra();  // Pour sauver les spectres moyennes ( + sigma ) dans un fichier
     69  virtual void SaveSpectraWindow();  // Pour sauver les spectres de la fenetre temporel ds un fichier
    5170
    5271
     
    5675  bool fgsinglechannel_;
    5776  uint_4 numfile_;
    58   uint_8 nbpaq4mean_;
    59 
     77  vector<uint_8> nbpaq4mean_;
    6078  uint_8 totnbpaq_;
     79
    6180  TMatrix< r_4 > mspecmtx_;    // Matrice des spectres moyennees
    6281  TMatrix< r_4 > sigspecmtx_;    // Matrice des sigmas des spectres 
    6382
     83  TArray< r_4 > spec_window_;    // fenetre en temps sur les spectres 
     84  uint_4 spwin_ext_sz_;          // Taille de la zone d'extension en debut et en fin
     85  TArray< uint_2 > clnflg_;      // flag de nettoyage resultant de la routine   FlagBadPackets()
     86  uint_8 paqnum_w_start;     // numero de paquet du debut de la fenetre en temps (inclusif)
     87  uint_8 paqnum_w_end;       // numero de paquet final de la fenetre en temps (non inclusif)
     88
     89  uint_4 nbtot_specwin_;    // nombre total de fenetre de spectres traites
     90  uint_4 nmaxfiles_specw_;   // nombre maximum de fichier de fenetre_spectre
     91 
    6492  TMatrix< r_4 > sgain_;   // gain en fonction de la frequence 
    65 
    66   vector<int> clnflg_;      // resultat de la routine "cleaner"
     93  bool fg_apply_gains_;
     94
    6795  double varmin_, varmax_;  // limites pour la coupure sur la variance
    6896  vector<uint_8> nbadpaq_;
  • trunk/AddOn/TAcq/specmfib.cc

    r3888 r3905  
    5959    BRPaquet paq(par.paqsize_);
    6060    uint_4 procsz=sizeof(float)*(paq.DataSize()+4);
    61     if ((par.fgdatafft_)||(par.action_=="cube3d")) procsz = 0;
     61//    if ((par.fgdatafft_)||(par.action_=="cube3d")) procsz = 0;
    6262    cout << " specmfib: Creating MemZoneMgr/threads - PaqSz= " << par.paqsize_
    6363         << " ProcPaqSz=" << procsz << endl;
     
    7777    BRFFTCalculator procfft(mmgr, par.fgsinglechannel_);
    7878    if (!par.fgdatafft_) procms.SetMemZAction(MemZA_ProcB);
    79 
     79    if (par.spec_win_sz_>0) {
     80      procms.SetSpectraWindowSize(par.spec_win_sz_, par.spw_ext_sz_);
     81      procms.SetMaxNbSepcWinFiles(par.nbmax_specwfiles_);
     82    }
    8083    FitsCubeWriter wrt(mmgr, par.outpath_, par.nbloc_);
    8184
Note: See TracChangeset for help on using the changeset viewer.