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


Ignore:
Timestamp:
Feb 1, 2011, 9:30:20 AM (15 years ago)
Author:
campagne
Message:

release.txt

File:
1 edited

Legend:

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

    r3939 r3943  
    4343    fgdatafft_(fgdatafft), fgsinglechannel_(fgsinglechan),
    4444    nbpaq4mean_(fgsinglechan?memgr_.NbFibres():2*memgr_.NbFibres()),
    45     nbadpaq_(fgsinglechan?memgr_.NbFibres():2*memgr_.NbFibres()) 
     45    nbadpaq_(fgsinglechan?memgr_.NbFibres():2*memgr_.NbFibres())
    4646{
    4747  setNameId("meanSpecCalc",1);
    48   BRPaquet paq(memgr_.PaqSize());
     48
     49  uint_4 nb_octets_entrop = 0; //this value is valid for Dec. 2010 data at Nancay
     50  const char* venvp = NULL;
     51  venvp=getenv("BRANA_NBYTECUT");
     52  if (venvp!=NULL){
     53    nb_octets_entrop = atoi(venvp);
     54    cout << "BRMeanSpecCalculator : BRANA_NBYTECUT : " << nb_octets_entrop << endl;
     55  }
     56
     57  BRPaquet paq(memgr_.PaqSize()-nb_octets_entrop);
     58
    4959  if (fgsinglechannel_) {
    5060    mspecmtx_.SetSize(memgr_.NbFibres(), paq.DataSize()/2);
     
    7080  }
    7181
     82  //
     83 
     84
    7285  // Definition des tailles de fenetres de spectres, etc ...
    7386  SetSpectraWindowSize();
    74   SetMaxNbSepcWinFiles();
     87  SetMaxNbSpecWinFiles();
    7588  nbtot_specwin_=0;
    7689  SetVarianceLimits();
     90  SetNumberOfBands();
    7791
    7892  ofsdtp_=NULL;
    7993  dtp_=NULL;
    80   xnt_=new double[nchan*2];  // CHECK : ATTENTION la taille depend de nombre de colonne du NTuple !
     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 !
     97  xnt_=NULL;
    8198}
    8299
     
    84101BRMeanSpecCalculator::~BRMeanSpecCalculator()
    85102{
     103  cout << " ---------------- BRMeanSpecCalculator()_Finalizing -------------------- " << endl;
    86104  uint_8 npqm=0;
    87105  for(size_t i=0; i<nbpaq4mean_.size(); i++)  npqm+=nbpaq4mean_[i];
    88106  if (npqm>nmean_*nbpaq4mean_.size()/10)  SaveMeanSpectra();
    89   cout << " ---------------- BRMeanSpecCalculator()_Finalizing -------------------- " << endl;
    90107  for(size_t i=0; i<nbadpaq_.size(); i++) {
    91108    cout << " Channel " << i << "  NBadPaq=" << nbadpaq_[i] << " / TotNbPaq=" << totnbpaq_ << endl;
     
    127144void BRMeanSpecCalculator::DefineDataTable()
    128145{
     146  cout << "(JEC) BRMeanSpecCalculator::DefineDataTable START" << endl;
    129147  string dtfile="!"+outpath_+"/dtspec.fits";
    130148  ofsdtp_ = new FitsInOutFile(dtfile,FitsInOutFile::Fits_Create);
     
    136154    dtp_->AddFloatColumn(cnom);   
    137155  }
     156  for(int i=0; i<nchan; i++) {
     157    for(int j=0;j<numberOfBands_;j++){
     158      sprintf(cnom,"varnormb%d%d",i,j);
     159      dtp_->AddFloatColumn(cnom);   
     160    }
     161  }
    138162  /*
    139163  for(int i=0; i<nchan; i++) {
     
    143167  */
    144168  //  xnt_=new double[nchan*2];  CHECK : faut-il reallouer ?
     169  cout << "(JEC) creation tuple de " << nchan*(1+numberOfBands_) << " doubles " << endl;
     170  xnt_=new double[nchan*(1+numberOfBands_)];
     171  cout << "(JEC) BRMeanSpecCalculator::DefineDataTable END" << endl;
     172}
     173 
     174/* --Methode-- */
     175void BRMeanSpecCalculator::SetNumberOfBands(int numberOfBands, int ibandfirst, int ibandlast)
     176{
     177  if (numberOfBands < 1) numberOfBands = 1;
     178  numberOfBands_ = numberOfBands;
     179  if (ibandfirst < 0 )ibandfirst = 0;
     180  if (ibandlast >= numberOfBands_ ) ibandlast = numberOfBands_-1;
     181  ibandfirst_=ibandfirst; ibandlast_=ibandlast;
     182
     183  cout << "(JEC): SetNumberOfBands (END) : "
     184       << numberOfBands_ << " "
     185       << ibandfirst_ << " "
     186       << ibandlast_ << endl;
     187
    145188}
    146189
     
    154197  cout << " MeanGain=" << sgain_.Sum()/sgain_.Size() << " ApplyGains="
    155198       << ((fg_apply_gains_)?"true":"false") << endl;
    156 }
    157 
    158 static inline r_4 Zmod2(complex<r_4> z)
    159 { return (z.real()*z.real()+z.imag()*z.imag()); }
     199  if( (spec_window_.SizeX()!= sgain_.NCols()) || (spec_window_.SizeY()!= sgain_.NRows()) ){
     200    cout << " ReadGainFitsFile: BAD Gain Matrix sizes " << endl;
     201    sgain_.Show();
     202    spec_window_.Show();
     203    throw ParmError("ReadGainFitsFile: BAD Gain Matrix sizes");
     204  }
     205}
     206
     207//JEC
     208//static inline r_4 Zmod2(complex<r_4> z)
     209//{ return (z.real()*z.real()+z.imag()*z.imag()); }
    160210
    161211
     
    169219  // des spectres le cas echeant ProcSpecWin()
    170220
     221 
    171222  int_8 nbpaqdec = (int_8)totnbpaq_-(int_8)GetSpecWinOverlapSize();
    172223  if ((nbpaqdec>0)&&(nbpaqdec%GetSpectraWindowSize()==0)) {
     
    208259  if (fg_apply_gains_) {   // Application des gains, si demande
    209260    sa_size_t kz=PaqNumToArrayIndex(totnbpaq_);
    210     for(sa_size_t i=0; i<spec_window_.SizeY(); i++)
    211       (spec_window_(Range::all(), Range(i), Range(kz))).Div(sgain_.Row(i));
     261    for(sa_size_t i=0; i<spec_window_.SizeY(); i++) {
     262      (spec_window_(Range::all(), Range(i), Range(kz)).CompactAllDimensions()).Div(sgain_.Row(i).CompactAllDimensions());
     263    }
    212264  }
    213265
     
    231283    }
    232284  }
    233   nbtot_specwin_++;
    234   return;
    235285  // On appelle la routine de nettoyage qui doit flagger les mauvais paquets
    236286  FlagBadPackets(numpaqstart, numpaqend);
     
    249299      // Calcul de spectres moyennes et variance
    250300      for(sa_size_t f=1; f<spec.Size(); f++)  {   // boucle sur les frequences
    251         spec(f) += spec_window_(f,i,kz);
     301        spec(f)  += spec_window_(f,i,kz);
    252302        sspec(f) += spec_window_(f,i,kz)*spec_window_(f,i,kz); 
    253303      }
     
    270320    for(sa_size_t i=0; i<spec_window_.SizeY(); i++)  {
    271321      double mean, sigma;
    272       sa_size_t kz=PaqNumToArrayIndex(totnbpaq_);
     322      ////////BUG      sa_size_t kz=PaqNumToArrayIndex(totnbpaq_);
    273323      double variance=0.;
    274324      variance=spec_window_(Range(1,Range::lastIndex()), Range(i), Range(kz)).Sum();
    275       //      xnt_[i]=variance;
     325      xnt_[i]=variance;
     326      //Compute nomalized variance in bands freq.
     327      sa_size_t fMin;
     328      sa_size_t fMax;
     329      int bandW = spec_window_.SizeX()/numberOfBands_;
     330      vector<double> varNomBinned(numberOfBands_);
     331      for (sa_size_t j=0; j<numberOfBands_; j++){
     332        fMin = j*bandW;
     333        fMax =fMin+bandW-1;
     334        varNomBinned[j]=spec_window_(Range(fMin,fMax), Range(i), Range(kz)).Sum();
     335        varNomBinned[j]/=(r_4)bandW;
     336        xnt_[spec_window_.SizeY()+i*numberOfBands_+j] =  varNomBinned[j];
     337      }//eof
     338
    276339      clnflg_(i,kz)=0;
    277       if (variance<varmin_) { clnflg_(i,kz)=1;  nbadpaq_[i]++; }
    278       else if (variance>varmax_) { clnflg_(i,kz)=2;  nbadpaq_[i]++; }
     340      for (sa_size_t j=ibandfirst_; j<=ibandlast_; j++){
     341        //        cout << "(jec) var["<<j<<"] =" << varNomBinned[j]
     342        //     << " min " << varmin_
     343        //     << " max " << varmax_ << endl;
     344        if(varNomBinned[j]<varmin_)      { clnflg_(i,kz)=10+j;  nbadpaq_[i]++; break;}
     345        else if(varNomBinned[j]>varmax_) { clnflg_(i,kz)=100+j; nbadpaq_[i]++; break;}
     346      }
     347      //cout << "clnflg_("<<i<<","<<kz<<"): " << clnflg_(i,kz)  << endl;
    279348    }
    280349    if (dtp_)  dtp_->AddRow(xnt_);
     
    343412  : BRBaseProcessor(memgr), fgsinglechannel_(fgsinglechannel), totnbfftpaq_(0)
    344413{
    345   BRPaquet paq(memgr_.PaqSize());
     414  uint_4 nb_octets_entrop = 0; //this value is valid for Dec. 2010 data at Nancay
     415  const char* venvp = NULL;
     416  venvp=getenv("BRANA_NBYTECUT");
     417  if (venvp!=NULL){
     418    nb_octets_entrop = atoi(venvp);
     419    cout << "BRFFTCalculator  : BRANA_NBYTECUT : " << nb_octets_entrop << endl;
     420  }
     421
     422  BRPaquet paq(memgr_.PaqSize()-nb_octets_entrop);
     423  //JEC END
     424  //  BRPaquet paq(memgr_.PaqSize());
    346425  setNameId("FFTCalc",2);
    347426  ffts_.SetInDataSize((fgsinglechannel_)?paq.DataSize():paq.DataSize()/2);
     
    633712        }
    634713        for(sa_size_t j=0; j<spectreV1.Size(); j++)
    635           spectreV1(j) += Zmod2(cfour1(j));
     714          spectreV1(j) += BRMeanSpecCalculator::Zmod2(cfour1(j));
    636715        memcpy(procbuff+i*procpaqsz, cfour1.Data(), sizeof(complex<r_4>)*cfour1.Size());
    637716        if (fgtimfreq) {   // Remplissage tableau temps-frequence
    638717          for(sa_size_t c=1; c<timfreqV1.NCols(); c++) {
    639718            for(sa_size_t j=c*nfsmap_; j<(c+1)*nfsmap_; j++)
    640               timfreqV1(nzm, c) += Zmod2(cfour1(j));
     719              timfreqV1(nzm, c) += BRMeanSpecCalculator::Zmod2(cfour1(j));
    641720          }
    642721        }
    643722        for(sa_size_t j=0; j<spectreV2.Size(); j++)
    644           spectreV2(j) += Zmod2(cfour2(j));  // Zmod2(zp2[j]);
     723          spectreV2(j) += BRMeanSpecCalculator::Zmod2(cfour2(j));  // BRMeanSpecCalculator::Zmod2(zp2[j]);
    645724        memcpy(procbuff+i*procpaqsz+procpaqsz/2, cfour2.Data(), sizeof(complex<r_4>)*cfour2.Size());
    646725        if (fgtimfreq) {   // Remplissage tableau temps-frequence
    647726          for(sa_size_t c=1; c<timfreqV2.NCols(); c++) {
    648727            for(sa_size_t j=c*nfsmap_; j<(c+1)*nfsmap_; j++)
    649               timfreqV2(nzm,c) += Zmod2(cfour2(j));
     728              timfreqV2(nzm,c) += BRMeanSpecCalculator::Zmod2(cfour2(j));
    650729          }
    651730        }
     
    667746        if (nmnt==0)  { xnt[0]=paq.FrameCounter();  xnt[1]=paq.TimeTag(); }
    668747        for(sa_size_t j=2700; j<2800; j++) {
    669           ms1 += Zmod2(cfour1(j)); ms2 += Zmod2(cfour2(j));
     748          ms1 += BRMeanSpecCalculator::Zmod2(cfour1(j)); ms2 += BRMeanSpecCalculator::Zmod2(cfour2(j));
    670749          complex<r_4> zvis =  cfour1(j)*conj(cfour2(j));
    671           ms12 += Zmod2(zvis);   ms12re += zvis.real();  ms12im += zvis.imag();
     750          ms12 += BRMeanSpecCalculator::Zmod2(zvis);   ms12re += zvis.real();  ms12im += zvis.imag();
    672751          ms12phi+= atan2(zvis.imag(),zvis.real());
    673752        }
     
    742821          int_4 sspvmaxidx[3] = {-1,-1,-1};
    743822          for(int jji=1;jji<visiV12.Size()-1;jji++) {
    744             r_4 zmv2 = Zmod2(visiV12(jji));
     823            r_4 zmv2 = BRMeanSpecCalculator::Zmod2(visiV12(jji));
    745824            if (zmv2>sspvmax[2]) { sspvmax[2]=zmv2; sspvmaxidx[2]=jji; }
    746825          }
Note: See TracChangeset for help on using the changeset viewer.