Changeset 3993 in Sophya for trunk/AddOn/TAcq/brproc.cc


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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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
Note: See TracChangeset for help on using the changeset viewer.