Changeset 3943 in Sophya for trunk/AddOn/TAcq/brproc.cc
- Timestamp:
- Feb 1, 2011, 9:30:20 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/brproc.cc
r3939 r3943 43 43 fgdatafft_(fgdatafft), fgsinglechannel_(fgsinglechan), 44 44 nbpaq4mean_(fgsinglechan?memgr_.NbFibres():2*memgr_.NbFibres()), 45 nbadpaq_(fgsinglechan?memgr_.NbFibres():2*memgr_.NbFibres()) 45 nbadpaq_(fgsinglechan?memgr_.NbFibres():2*memgr_.NbFibres()) 46 46 { 47 47 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 49 59 if (fgsinglechannel_) { 50 60 mspecmtx_.SetSize(memgr_.NbFibres(), paq.DataSize()/2); … … 70 80 } 71 81 82 // 83 84 72 85 // Definition des tailles de fenetres de spectres, etc ... 73 86 SetSpectraWindowSize(); 74 SetMaxNbS epcWinFiles();87 SetMaxNbSpecWinFiles(); 75 88 nbtot_specwin_=0; 76 89 SetVarianceLimits(); 90 SetNumberOfBands(); 77 91 78 92 ofsdtp_=NULL; 79 93 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; 81 98 } 82 99 … … 84 101 BRMeanSpecCalculator::~BRMeanSpecCalculator() 85 102 { 103 cout << " ---------------- BRMeanSpecCalculator()_Finalizing -------------------- " << endl; 86 104 uint_8 npqm=0; 87 105 for(size_t i=0; i<nbpaq4mean_.size(); i++) npqm+=nbpaq4mean_[i]; 88 106 if (npqm>nmean_*nbpaq4mean_.size()/10) SaveMeanSpectra(); 89 cout << " ---------------- BRMeanSpecCalculator()_Finalizing -------------------- " << endl;90 107 for(size_t i=0; i<nbadpaq_.size(); i++) { 91 108 cout << " Channel " << i << " NBadPaq=" << nbadpaq_[i] << " / TotNbPaq=" << totnbpaq_ << endl; … … 127 144 void BRMeanSpecCalculator::DefineDataTable() 128 145 { 146 cout << "(JEC) BRMeanSpecCalculator::DefineDataTable START" << endl; 129 147 string dtfile="!"+outpath_+"/dtspec.fits"; 130 148 ofsdtp_ = new FitsInOutFile(dtfile,FitsInOutFile::Fits_Create); … … 136 154 dtp_->AddFloatColumn(cnom); 137 155 } 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 } 138 162 /* 139 163 for(int i=0; i<nchan; i++) { … … 143 167 */ 144 168 // 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-- */ 175 void 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 145 188 } 146 189 … … 154 197 cout << " MeanGain=" << sgain_.Sum()/sgain_.Size() << " ApplyGains=" 155 198 << ((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()); } 160 210 161 211 … … 169 219 // des spectres le cas echeant ProcSpecWin() 170 220 221 171 222 int_8 nbpaqdec = (int_8)totnbpaq_-(int_8)GetSpecWinOverlapSize(); 172 223 if ((nbpaqdec>0)&&(nbpaqdec%GetSpectraWindowSize()==0)) { … … 208 259 if (fg_apply_gains_) { // Application des gains, si demande 209 260 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 } 212 264 } 213 265 … … 231 283 } 232 284 } 233 nbtot_specwin_++;234 return;235 285 // On appelle la routine de nettoyage qui doit flagger les mauvais paquets 236 286 FlagBadPackets(numpaqstart, numpaqend); … … 249 299 // Calcul de spectres moyennes et variance 250 300 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); 252 302 sspec(f) += spec_window_(f,i,kz)*spec_window_(f,i,kz); 253 303 } … … 270 320 for(sa_size_t i=0; i<spec_window_.SizeY(); i++) { 271 321 double mean, sigma; 272 sa_size_t kz=PaqNumToArrayIndex(totnbpaq_);322 ////////BUG sa_size_t kz=PaqNumToArrayIndex(totnbpaq_); 273 323 double variance=0.; 274 324 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 276 339 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; 279 348 } 280 349 if (dtp_) dtp_->AddRow(xnt_); … … 343 412 : BRBaseProcessor(memgr), fgsinglechannel_(fgsinglechannel), totnbfftpaq_(0) 344 413 { 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()); 346 425 setNameId("FFTCalc",2); 347 426 ffts_.SetInDataSize((fgsinglechannel_)?paq.DataSize():paq.DataSize()/2); … … 633 712 } 634 713 for(sa_size_t j=0; j<spectreV1.Size(); j++) 635 spectreV1(j) += Zmod2(cfour1(j));714 spectreV1(j) += BRMeanSpecCalculator::Zmod2(cfour1(j)); 636 715 memcpy(procbuff+i*procpaqsz, cfour1.Data(), sizeof(complex<r_4>)*cfour1.Size()); 637 716 if (fgtimfreq) { // Remplissage tableau temps-frequence 638 717 for(sa_size_t c=1; c<timfreqV1.NCols(); c++) { 639 718 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)); 641 720 } 642 721 } 643 722 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]); 645 724 memcpy(procbuff+i*procpaqsz+procpaqsz/2, cfour2.Data(), sizeof(complex<r_4>)*cfour2.Size()); 646 725 if (fgtimfreq) { // Remplissage tableau temps-frequence 647 726 for(sa_size_t c=1; c<timfreqV2.NCols(); c++) { 648 727 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)); 650 729 } 651 730 } … … 667 746 if (nmnt==0) { xnt[0]=paq.FrameCounter(); xnt[1]=paq.TimeTag(); } 668 747 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)); 670 749 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(); 672 751 ms12phi+= atan2(zvis.imag(),zvis.real()); 673 752 } … … 742 821 int_4 sspvmaxidx[3] = {-1,-1,-1}; 743 822 for(int jji=1;jji<visiV12.Size()-1;jji++) { 744 r_4 zmv2 = Zmod2(visiV12(jji));823 r_4 zmv2 = BRMeanSpecCalculator::Zmod2(visiV12(jji)); 745 824 if (zmv2>sspvmax[2]) { sspvmax[2]=zmv2; sspvmaxidx[2]=jji; } 746 825 }
Note:
See TracChangeset
for help on using the changeset viewer.