Changeset 3993 in Sophya for trunk/AddOn


Ignore:
Timestamp:
May 13, 2011, 12:37:14 AM (14 years ago)
Author:
ansari
Message:

Ajout possibilite de faire un DataTable (NTuple) avec la puissance spectrale dans plusieurs bandes en fonction du temps, Reza 13/05/2011

Location:
trunk/AddOn/TAcq
Files:
9 edited

Legend:

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

    r3992 r3993  
    2222  istep_=1;
    2323  rdsamefc_=true;   // read paquets with same frame counter
    24   freqmin_=freqmax_=0;
     24  freqmin_=0; freqmax_=-1;
    2525  nbinfreq_=1; 
    2626  paqsize_=16424;
     
    4040  vmin_=0.;  vmax_=9e99;
    4141  nbands_=0; bandfirst_ = bandlast_ = 0;
    42   fgdt_ = false;
     42  fgdtpaq_ = fgdtms_ = false;
    4343
    4444  fgfreqfilter_=false; //JEC 1/2/11
     
    133133      ka+=2;
    134134    }
    135     else if (strcmp(arg[ka],"-filldt")==0) {
    136       fgdt_=true;
     135    else if (strcmp(arg[ka],"-fdtpaq")==0) {
     136      fgdtpaq_=true;
     137      ka++;
     138    }
     139    else if (strcmp(arg[ka],"-fdtms")==0) {
     140      fgdtms_=true;
    137141      ka++;
    138142    }
     
    205209       << "                 [-freqfilter medhw] [-gain filename] [-varcut min,max] [-nband nband,first,last] \n"
    206210       << "                 [-freqfilter] [-gain filename] [-varcut min,max] [-nband nband,first,last] \n"
    207        << "                 [-tmproc hh:mm:ss,nseconds] [-filldt] [-tspwin wsz,extsz,nfiles] \n"
     211       << "                 [-tmproc hh:mm:ss,nseconds] [-fdtpaq] [-fdtms] [-tspwin wsz,extsz,nfiles] \n"
    208212       << "         -in Imin,Imax,Istep InPath FiberList [InPath2 FiberList2 InPath3 FiberList3 ...] \n" << endl;
    209213  if (fgshort) {
     
    232236       << " -fftdata : Force FFT data mode (firmware fft) \n"
    233237       << " -varcut min,max : min-max cut on variance \n"
    234        << " -nband nband,first,last: numbers of freq. bands and first and last bands used for cuts \n"
     238       << " -nband nband,first,last: numbers of freq. bands and first and last bands used for cuts\n"
    235239       << " -tmproc hh:mm:ss,nseconds : processing time window definition \n"
    236        << " -filldt : force data table filling \n"
     240       << " -fdtpaq : force per paquet data table filling (specmfib) \n"
     241       << " -fdtms : force time averaged/filtered data table filling; use -freq for defining bands (specmfib)\n"
    237242       << " -freqfilter medhw: force median filtering on the frequencies \n"
    238243       << "   with half window width medhw (use - for default=" << medhalfwidth_ << ") \n"
     
    283288  cout << " Action=" << action_ << "  NMean=" << nmean_ << " NBloc=" << nbloc_ << endl;
    284289  cout << " FreqMin= " << freqmin_ << " FreqMax= " << freqmax_ << " NBinFreq= " << nbinfreq_ << endl;
    285   cout<<  ((fgdt_)?" Fill DadaTable ":" NO DataTable") << endl;
     290  if (fgdtpaq_) cout<<  " Fill Per Paquet DadaTable ";
     291  if (fgdtms_) cout<<  " Fill Time Averaged/Filtered binned power DataTable ";
     292  if (!fgdtpaq_&&!fgdtms_)  cout << " NO DataTable " << endl;
     293  else cout << endl;
    286294  cout << " GainFileName=" << gainfile_ << " Variance: Min= " << vmin_ << " Max= " << vmax_
    287295       << " Bands: N=" <<  nbands_ << " First=" << bandfirst_ << " Last=" << bandlast_
  • trunk/AddOn/TAcq/branap.h

    r3992 r3993  
    5858  double vmin_,vmax_;   // coupure min-max sur la variance
    5959  int nbands_,bandfirst_,bandlast_; //bandes en frequences pour mean, variance et cut
    60   bool fgdt_; //if true fill datatable
     60  bool fgdtpaq_; //if true fill per per paquet datatable
     61  bool fgdtms_; //if true fill time avergared/filtered spectral power  datatable
    6162
    6263  bool fgfreqfilter_; // if true force median filtering on the frequencies
     
    6566  string gainfile_;     // nom du fichier de gain (reponse spectrale)
    6667
     68  // Remplissage DataTable power = f(time)
     69 
    6770  // definition fenetre en temps pour le traitement des paquets
    6871  SOPHYA::TimeStamp proctimestart_; //  temps de debut de la fenetre
  • trunk/AddOn/TAcq/brbaseproc.cc

    r3982 r3993  
    4040  fgokallfibers_=true;
    4141  totprocnpaq_=0;
     42  startdate_=0;
    4243  setNameId("baseproc",0);
    4344  ClearProcTimeWindow();
     
    119120      }
    120121      cts_=memgr_.GetAuxData(mid_)->FillTime();   // get associated date/time (DATEOBS)
     122      if (startdate_==0)  startdate_=cts_.DaysPart();
     123
    121124      for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
    122125        fbuff_[fib] = memgr_.GetMemZone(mid_,fib);
  • trunk/AddOn/TAcq/brbaseproc.h

    r3979 r3993  
    5050  // get Observation Time ( obtained from MemZoneMgr )
    5151  inline SOPHYA::TimeStamp& getObsTime()  { return cts_; }
     52  // get Obsservation time in seconds since the start date
     53  // Temps ecoule en seconde a partir de 0h00 de la date du premier fichier
     54  inline double getObsTimeSeconds() { return ((cts_.DaysPart()-startdate_)*86400.+cts_.SecondsPart()); }
     55
    5256  // Attention : les methodes suivantes ne sont pas protegees pour le numero de fibre
    5357  // Renvoie le numero de frame-counter courant - si fgz=true, soustrait le FC du premier paquet
     
    8993  uint_8 totprocnpaq_;
    9094  SOPHYA::TimeStamp cts_;   // current time stamp, get from MemZoneMgr
     95  int_8 startdate_;         // Temps de depart cts_.DaysPart()
    9196
    9297  string bpnom_;    // nom du processeur
  • trunk/AddOn/TAcq/brproc.cc

    r3946 r3993  
    7373  numfile_=0;
    7474  totnbpaq_=0;
     75  moyfc_=moytt_=0.;
     76  nbpmoyttfc_=0;
    7577
    7678  size_t nchan=(fgsinglechannel_?memgr_.NbFibres():2*memgr_.NbFibres());
     
    7981    nbpaq4mean_[i]=nbadpaq_[i]=0;
    8082  }
    81 
    82   //
    8383 
    8484
     
    9292  ofsdtp_=NULL;
    9393  dtp_=NULL;
    94  
    95   //  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 !
    9794  xnt_=NULL;
     95  ofsdtpms_=NULL;
     96  dtpms_=NULL;
     97  xntms_=NULL;
     98  firstfreqms_=0;
     99  lastfreqms_=-1;
     100  nbandms_=-1;
    98101}
    99102
     
    113116    delete ofsdtp_;
    114117  }
     118  if (dtpms_) {
     119    cout << *dtpms_;
     120    delete dtpms_;
     121    delete ofsdtpms_;
     122  }
    115123  if (xnt_)   delete xnt_;
     124  if (xntms_)   delete xntms_;
    116125  cout << " ------------------------------------------------------------------------ " << endl;
    117126}
     
    142151
    143152/* --Methode-- */
    144 void BRMeanSpecCalculator::DefineDataTable()
    145 {
    146   cout << "(JEC) BRMeanSpecCalculator::DefineDataTable START" << endl;
    147   string dtfile="!"+outpath_+"/dtspec.fits";
     153void BRMeanSpecCalculator::DefinePerPaquetDataTable()
     154{
     155  cout << "BRMeanSpecCalculator::DefinePerPaquetDataTable: Creating DataTable" << endl;
     156  string dtfile="!"+outpath_+"/dtspecpaq.fits";
    148157  ofsdtp_ = new FitsInOutFile(dtfile,FitsInOutFile::Fits_Create);
    149158  dtp_ = new SwFitsDataTable(*ofsdtp_,1024,true);
    150159  char cnom[32];
    151   size_t nchan=(fgsinglechannel_?memgr_.NbFibres():2*memgr_.NbFibres());
     160  size_t nchan=mspecmtx_.NRows();
    152161  for(int i=0; i<nchan; i++) {
    153162    sprintf(cnom,"variance%d",i);
     
    161170  }
    162171  /*
    163   for(int i=0; i<nchan; i++) {
     172    for(int i=0; i<nchan; i++) {
    164173    sprintf(cnom,"sigma%d",i);
    165174    dtp_->AddFloatColumn(cnom);   
    166   }
     175    }
    167176  */
    168177  //  xnt_=new double[nchan*2];  CHECK : faut-il reallouer ?
    169   cout << "(JEC) creation tuple de " << nchan*(1+numberOfBands_) << " doubles " << endl;
     178  cout << " ...Number of columns " << nchan*(1+numberOfBands_) << " doubles -> to FITS file" << dtfile << endl;
    170179  xnt_=new double[nchan*(1+numberOfBands_)];
    171   cout << "(JEC) BRMeanSpecCalculator::DefineDataTable END" << endl;
     180
     181}
     182
     183/* --Methode-- */
     184void BRMeanSpecCalculator::DefineTimeAvgPowerDataTable(int first, int last, int nband)
     185{
     186  cout << "BRMeanSpecCalculator::DefineTimeAvgPowerDataTable: Creating time averged power spectrum" << endl;
     187  string dtfile="!"+outpath_+"/avgspec.fits";
     188  ofsdtpms_ = new FitsInOutFile(dtfile,FitsInOutFile::Fits_Create);
     189  dtpms_ = new SwFitsDataTable(*ofsdtpms_,1024,true);
     190  dtpms_->AddDoubleColumn("mtimetag");
     191  dtpms_->AddDoubleColumn("time");
     192 
     193  if (last>first) {
     194    if ((first<0)||(first>=mspecmtx_.NCols()))  first=0;
     195    if ((last<0)||(last>mspecmtx_.NCols()))  last=mspecmtx_.NCols();
     196    if (nband<1)  nband=1;
     197  }
     198  else {
     199    first=1;  last=mspecmtx_.NCols();  nband=1;
     200  }
     201  firstfreqms_=first;   lastfreqms_=last;  nbandms_=nband;
     202  char cnom[32];
     203  size_t nchan=mspecmtx_.NRows();
     204  for(int i=0; i<nchan; i++) {
     205    for(int j=0; j<nband; j++) {
     206      sprintf(cnom,"pow%dc%d",j,i);
     207      dtpms_->AddFloatColumn(cnom);
     208    }   
     209  }
     210  cout << " ...Number of columns " << (2+nchan*nband) << " doubles -> to FITS file" << dtfile << endl;
     211  xntms_=new double[nchan*nband+2];
    172212}
    173213 
     
    181221  ibandfirst_=ibandfirst; ibandlast_=ibandlast;
    182222
    183   cout << "(JEC): SetNumberOfBands (END) : "
     223  cout << "BRMeanSpecCalculator::SetNumberOfBands (END) : "
    184224       << numberOfBands_ << " "
    185225       << ibandfirst_ << " "
     
    264304  }
    265305
     306  // Pour calcul MeanTimeTag , MeanFrameCounter
     307  moyfc_+=curfc_[0];
     308  moytt_+=((double)vpaq_[0].TimeTag()/1.25e8);
     309  nbpmoyttfc_++;
    266310  totnbpaq_++;
    267311  return 0;
     
    371415    }
    372416  }
     417  mspecmtx_.Info()["ENDTIME"]=getObsTime();
     418  sigspecmtx_.Info()["ENDTIME"]=getObsTime();
     419  if (nbpmoyttfc_>1)  {
     420    moyfc_/=(double)nbpmoyttfc_;
     421    moytt_/=(double)nbpmoyttfc_;
     422  }
     423  string ikey,ikdesc;   
     424  ikey="MeanFC";  ikdesc="Mean FrameCounter";
     425  mspecmtx_.Info().SetI(ikey,moyfc_);
     426  mspecmtx_.Info().SetComment(ikey,ikdesc);
     427  sigspecmtx_.Info().SetI(ikey,moyfc_);
     428  sigspecmtx_.Info().SetComment(ikey,ikdesc);
     429 
     430  ikey="MeanTT";  ikdesc="Mean TimeTag";
     431  mspecmtx_.Info().SetD(ikey,moytt_);
     432  mspecmtx_.Info().SetComment(ikey,ikdesc);
     433  sigspecmtx_.Info().SetD(ikey,moytt_);
     434  sigspecmtx_.Info().SetComment(ikey,ikdesc);
     435 
    373436  char nfile[64];
    374437  string flnm;
     
    390453  numfile_++; 
    391454
     455  if (dtpms_!=NULL)  FillPwrTmDTable(mspecmtx_);
     456
    392457  for(size_t i=0; i<nbpaq4mean_.size(); i++) nbpaq4mean_[i]=0;
    393458  mspecmtx_ = (r_4)(0.);
    394459  sigspecmtx_ = (r_4)(0.);
     460  moyfc_=moytt_=0.; 
     461  nbpmoyttfc_=0;
    395462  return;
    396463}
     
    406473  fos << spec_window_;
    407474  cout << " SaveSpectraWindow() " << nbtot_specwin_ << "- file " << nfile << " created " << endl;
     475}
     476
     477/* --Methode-- */
     478void BRMeanSpecCalculator::FillPwrTmDTable(TMatrix< r_4 >& specmtx)
     479{
     480  if (dtpms_==NULL) return;
     481  xntms_[0]=moytt_; 
     482  xntms_[1]=getObsTimeSeconds();
     483  size_t knt=2; 
     484  sa_size_t wband=(lastfreqms_-firstfreqms_)/nbandms_;
     485  for(sa_size_t ir=0; ir<specmtx.NRows(); ir++) {
     486    for(sa_size_t jf=0; jf<specmtx.NCols()-wband; jf+=wband) {
     487      TVector<r_4> srow=specmtx.Row(ir);
     488      xntms_[knt]=srow.SubVector(Range(jf,jf+wband-1)).Sum();
     489      knt++;
     490    }
     491  }
     492  dtpms_->AddRow(xntms_);
    408493}
    409494
  • trunk/AddOn/TAcq/brproc.h

    r3943 r3993  
    6363  inline void SetMaxNbSpecWinFiles(uint_4 nmax=0)  {  nmaxfiles_specw_=nmax; }
    6464
    65 // Pour definir le datatable a remplir - pas de DataTable rempli si pas appele
    66   virtual void DefineDataTable();
     65// Pour definir le datatable (moyenne spectre paquet par paquet) 
     66// Le DataTable est rempli par FlagBadPackets - Pas de DataTable rempli si pas appele
     67  virtual void DefinePerPaquetDataTable();
     68
     69// Pour definir le datatable puissance spectrale moyennee ou filtree en fonction du temps
     70  virtual void DefineTimeAvgPowerDataTable(int first=1, int last=-1, int nband=1);
    6771
    6872  inline void SetVarianceLimits(double vmin=0., double vmax=9.e99)
     
    8589  virtual void SaveMeanSpectra();  // Pour sauver les spectres moyennes ( + sigma ) dans un fichier
    8690  virtual void SaveSpectraWindow();  // Pour sauver les spectres de la fenetre temporel ds un fichier
    87 
     91  virtual void FillPwrTmDTable(TMatrix< r_4 >& specmtx);  // pour remplir la puissance spectrale en fonction du temps
    8892   
    8993  uint_4 nmean_;  // Nombre de spectres pour le calcul des moyennes
     
    9599  uint_8 totnbpaq_;
    96100
    97   TMatrix< r_4 > mspecmtx_;    // Matrice des spectres moyennees
     101  TMatrix< r_4 > mspecmtx_;      // Matrice des spectres moyennees
    98102  TMatrix< r_4 > sigspecmtx_;    // Matrice des sigmas des spectres 
     103  double moyfc_, moytt_;         // FrameCounter/TimeTag moyen pour chaque matrice
     104  uint_8 nbpmoyttfc_;            // Nombre de TimeTag/FrameCounter somme 
    99105
    100106  TArray< r_4 > spec_window_;    // fenetre en temps sur les spectres 
     
    117123  vector<uint_8> nbadpaq_;
    118124
     125  // DataTable for paquet/paquet mean/variance for frequency bands
    119126  FitsInOutFile* ofsdtp_;   // Output fits stream for datatable
    120   SwFitsDataTable* dtp_;    // DataTable
     127  SwFitsDataTable* dtp_;    // per paquet DataTable
    121128  double* xnt_;
     129  // DataTable for time averaged spectrum mean per frequency band
     130  FitsInOutFile* ofsdtpms_;   // Output fits stream for datatable for time averaged spectrum 
     131  SwFitsDataTable* dtpms_;    // DataTable for time averaged spectrum 
     132  double* xntms_;
     133  int firstfreqms_, lastfreqms_, nbandms_;
    122134};
    123135
  • trunk/AddOn/TAcq/brprocGain.cc

    r3992 r3993  
    185185    medfiltspecmtx_.Info()["NPAQSUM"] = nbtot_specwin_;
    186186    medfiltspecmtx_.Info()[buff] = nbtot_specwin_;
    187     //JEC timeStamp in the day @ millisec: faudra gerer le passage a minuit!
    188     medfiltspecmtx_.Info()["TIMEWIN"] = (windowTime_.SecondsPart())*1000.;
    189 
    190 
    191187    if ( nbtot_specwin_ > 0) {
    192188      medfiltspecmtx_.Row(ir)  /= (r_4)nbtot_specwin_;
    193189    }
    194190  }//eo loop on channels
     191  //JEC timeStamp in the day @ millisec: faudra gerer le passage a minuit!
     192  //Reza : getObsTimeSeconds() fournit le temps ecoule en seconde a partir de 0h00 de la date du premier fichier
     193  medfiltspecmtx_.Info()["TIMEWIN"] = (windowTime_.SecondsPart())*1000.;
     194  if (nbpmoyttfc_>1)  {
     195    moyfc_/=(double)nbpmoyttfc_;
     196    moytt_/=(double)nbpmoyttfc_;
     197  }
     198  string ikey,ikdesc;   
     199  ikey="MeanFC";  ikdesc="Mean FrameCounter";
     200  medfiltspecmtx_.Info().SetI(ikey,moyfc_);
     201  medfiltspecmtx_.Info().SetComment(ikey,ikdesc);
     202  ikey="MeanTT";  ikdesc="Mean TimeTag";
     203  medfiltspecmtx_.Info().SetD(ikey,moytt_);
     204  medfiltspecmtx_.Info().SetComment(ikey,ikdesc);
     205
    195206  char nfile[64];
    196207  string flnm;
     
    206217  //increment the file index
    207218  nummedianfile_++;
     219
     220  if (dtpms_!=NULL)  FillPwrTmDTable(mspecmtx_);
    208221   
    209222  //reset the matirx
    210223  medfiltspecmtx_ = (r_4)(0.);
    211 
    212224  //reset counter
    213225  nbtot_specwin_ = 0;
     226  moyfc_=moytt_=0.; 
     227  nbpmoyttfc_=0;
    214228
    215229  return;
  • trunk/AddOn/TAcq/brviscalc.cc

    r3967 r3993  
    165165int BRVisibilityCalculator::SelectFreqBinning(uint_4 freq1, uint_4 freq2, uint_4 nbfreq)
    166166{
     167  if (freq2<freq1) {
     168    freq1=0; freq2=vismtx_.NCols()-1; nbfreq=1;
     169  }
    167170  jf1_=freq1; jf2_=freq2;
    168171  if ((jf1_<1)||(jf1_>=vismtx_.NCols()))  jf1_=1;
  • trunk/AddOn/TAcq/specmfib.cc

    r3992 r3993  
    8585    //JEC 27/1/11 see below    if (par.gainfile_.length()>0) procms.ReadGainFitsFile(par.gainfile_);
    8686    procms.SetPrintLevel(par.prtlevel_,par.prtmodulo_);
    87     if (par.fgdt_) procms.DefineDataTable();
     87    if (par.fgdtpaq_) procms.DefinePerPaquetDataTable();
     88    if (par.fgdtms_) procms.DefineTimeAvgPowerDataTable(par.freqmin_,par.freqmax_,par.nbinfreq_);
     89
    8890    if(par.fgtimeselect_) procms.SetProcTimeWindow(par.proctimestart_,par.proctimeend_);
    8991
     
    99101        if (par.medhalfwidth_>0) procgain_p->SetMedianFilterHalfWidth(par.medhalfwidth_);
    100102      }
     103      if (par.fgdtpaq_) procgain_p->DefinePerPaquetDataTable();
     104      if (par.fgdtms_) procgain_p->DefineTimeAvgPowerDataTable(par.freqmin_,par.freqmax_,par.nbinfreq_);
    101105      if(par.fgtimeselect_) procgain_p->SetProcTimeWindow(par.proctimestart_,par.proctimeend_);
    102106    }
Note: See TracChangeset for help on using the changeset viewer.