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


Ignore:
Timestamp:
Sep 24, 2010, 12:31:21 AM (15 years ago)
Author:
ansari
Message:

Codage remplissage n_tuple avec les variances, Reza 23/09/2010

File:
1 edited

Legend:

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

    r3881 r3886  
    2020#include "ctimer.h"
    2121#include "fftpserver.h"
    22 #include "fftwserver.h"
     22#include "fitsarrhand.h"
    2323
    2424#include "FFTW/fftw3.h"
     
    3838                                           bool fgdatafft, bool fgsinglechan)
    3939  : BRBaseProcessor(memgr), outpath_(outpath), nmean_(nmean),
    40     fgdatafft_(fgdatafft), fgsinglechannel_(fgsinglechan)
     40    fgdatafft_(fgdatafft), fgsinglechannel_(fgsinglechan),
     41    clnflg_(fgsinglechan?memgr_.NbFibres():2*memgr_.NbFibres()),
     42    nbadpaq_(fgsinglechan?memgr_.NbFibres():2*memgr_.NbFibres())
    4143{
    4244  setNameId("meanSpecCalc",1);
     
    5557  nbpaq4mean_=0;
    5658  totnbpaq_=0;
     59
     60  SetVarianceLimits();
     61
     62  ofsdtp_=NULL;
     63  dtp_=NULL;
     64  string dtfile="!"+outpath_+"/dtspec.fits";
     65  ofsdtp_ = new FitsInOutFile(dtfile,FitsInOutFile::Fits_Create);
     66  dtp_ = new SwFitsDataTable(*ofsdtp_,1024,true);
     67  int nchan=(fgsinglechannel_?memgr_.NbFibres():2*memgr_.NbFibres());
     68  char cnom[32];
     69  for(int i=0; i<nchan; i++) {
     70    sprintf(cnom,"var%d",i);
     71    dtp_->AddFloatColumn(cnom);   
     72  }
     73  xnt_=new double[nchan];
    5774}
    5875
     
    6178{
    6279  if (nbpaq4mean_>1)  SaveSpectra();
     80  cout << " ---------------- BRMeanSpecCalculator()_Finalizing -------------------- " << endl;
     81  for(size_t i=0; i<nbadpaq_.size(); i++) {
     82    cout << " Channel " << i << "  NBadPaq=" << nbadpaq_[i] << " / TotNbPaq=" << totnbpaq_ << endl;
     83  }
     84  if (dtp_) {
     85    cout << *dtp_;
     86    delete dtp_;
     87    delete ofsdtp_;
     88    delete xnt_;
     89  }
     90  cout << " ------------------------------------------------------------------------ " << endl;
    6391}
    6492
     
    7098int BRMeanSpecCalculator::Process()
    7199{
    72      
    73100  if (nbpaq4mean_==nmean_)  SaveSpectra();
     101  FlagBadPackets();
    74102   
    75103  if (fgdatafft_) {  // Donnees firmware FFT
    76104    for(sa_size_t i=0; i<(size_t)mspecmtx_.NRows(); i++) {
     105      if (clnflg_[i])  { nbadpaq_[i]++;  continue; }   // si le paquet a ete flagge mauvais ( clnflg_[i] <> 0 )
    77106      TwoByteComplex* zp=NULL;
    78107      if (fgsinglechannel_) {
     
    94123  else {  // Donnees RAW qui ont du etre processe par BRFFTCalculator
    95124    for(sa_size_t i=0; i<(size_t)mspecmtx_.NRows(); i++) {
     125      if (clnflg_[i])  { nbadpaq_[i]++;  continue; }   // si le paquet a ete flagge mauvais ( clnflg_[i] <> 0 )
    96126      complex<ODT>* zp=NULL;
    97127      if (fgsinglechannel_) {
     
    116146
    117147/* --Methode-- */
     148void BRMeanSpecCalculator::FlagBadPackets()
     149{
     150  if (fgdatafft_) {  // Donnees firmware FFT
     151    for(sa_size_t i=0; i<(size_t)mspecmtx_.NRows(); i++) {
     152      TwoByteComplex* zp=NULL;
     153      if (fgsinglechannel_) {
     154        zp=vpaq_[i].Data1C();
     155      }
     156      else {
     157        zp=vpaq_[i/2].Data1C();
     158        if (i%2==1)  zp=vpaq_[i/2].Data2C();
     159      }
     160      double variance=0.;
     161      for(sa_size_t f=1; f<mspecmtx_.NCols(); f++)   variance+=(double)zp[f].module2F();
     162      xnt_[i]=variance;
     163      clnflg_[i]=0;
     164      if (variance<varmin_) clnflg_[i]=1;
     165      else if (variance>varmax_) clnflg_[i]=2;
     166    }
     167  }
     168  else {  // Donnees RAW qui ont du etre processe par BRFFTCalculator
     169    for(sa_size_t i=0; i<(size_t)mspecmtx_.NRows(); i++) {
     170      complex<ODT>* zp=NULL;
     171      if (fgsinglechannel_) {
     172        zp=reinterpret_cast< complex<ODT>* > (vprocpaq_[i]);
     173      }
     174      else {
     175        zp=reinterpret_cast< complex<ODT>* > (vprocpaq_[i/2]);
     176        if (i%2==1)  zp= reinterpret_cast< complex<ODT>* >(vprocpaq_[i/2]+memgr_.ProcPaqSize()/2) ;
     177      }
     178      double variance=0.;
     179      for(sa_size_t f=1; f<mspecmtx_.NCols(); f++)   variance+=(double)Zmod2(zp[f]);
     180      xnt_[i]=variance;
     181      clnflg_[i]=0;
     182      if (variance<varmin_) clnflg_[i]=1;
     183      else if (variance>varmax_) clnflg_[i]=2;     
     184    }
     185  }
     186  dtp_->AddRow(xnt_);
     187  return;
     188}
     189
     190/* --Methode-- */
    118191void BRMeanSpecCalculator::SaveSpectra()
    119192{
     
    125198  char nfile[64];
    126199  string flnm;
     200  /*
    127201  {
    128202  sprintf(nfile,"mspecmtx%d.ppf",numfile_);
     
    137211  po << sigspecmtx_;
    138212  }
     213  */
     214  {
     215  sprintf(nfile,"mspecmtx%d.fits",numfile_);
     216  flnm="!"+outpath_+nfile;
     217  FitsInOutFile fos(flnm,FitsInOutFile::Fits_Create);
     218  fos << mspecmtx_;
     219  }
     220  {
     221  sprintf(nfile,"sigspecmtx%d.fits",numfile_);
     222  flnm="!"+outpath_+nfile;
     223  FitsInOutFile fos(flnm,FitsInOutFile::Fits_Create);
     224  fos << sigspecmtx_;
     225  }
     226
    139227  cout << numfile_ << "-BRMeanSpecCalculator::SaveSpectra() NPaqProc="
    140228       << totnbpaq_ << "  -> Mean/Sig spectra Matrix in " << flnm << " /sigspec...ppf" << endl;
Note: See TracChangeset for help on using the changeset viewer.