Changeset 3886 in Sophya for trunk/AddOn/TAcq/brproc.cc
- Timestamp:
- Sep 24, 2010, 12:31:21 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/brproc.cc
r3881 r3886 20 20 #include "ctimer.h" 21 21 #include "fftpserver.h" 22 #include "f ftwserver.h"22 #include "fitsarrhand.h" 23 23 24 24 #include "FFTW/fftw3.h" … … 38 38 bool fgdatafft, bool fgsinglechan) 39 39 : 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()) 41 43 { 42 44 setNameId("meanSpecCalc",1); … … 55 57 nbpaq4mean_=0; 56 58 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]; 57 74 } 58 75 … … 61 78 { 62 79 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; 63 91 } 64 92 … … 70 98 int BRMeanSpecCalculator::Process() 71 99 { 72 73 100 if (nbpaq4mean_==nmean_) SaveSpectra(); 101 FlagBadPackets(); 74 102 75 103 if (fgdatafft_) { // Donnees firmware FFT 76 104 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 ) 77 106 TwoByteComplex* zp=NULL; 78 107 if (fgsinglechannel_) { … … 94 123 else { // Donnees RAW qui ont du etre processe par BRFFTCalculator 95 124 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 ) 96 126 complex<ODT>* zp=NULL; 97 127 if (fgsinglechannel_) { … … 116 146 117 147 /* --Methode-- */ 148 void 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-- */ 118 191 void BRMeanSpecCalculator::SaveSpectra() 119 192 { … … 125 198 char nfile[64]; 126 199 string flnm; 200 /* 127 201 { 128 202 sprintf(nfile,"mspecmtx%d.ppf",numfile_); … … 137 211 po << sigspecmtx_; 138 212 } 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 139 227 cout << numfile_ << "-BRMeanSpecCalculator::SaveSpectra() NPaqProc=" 140 228 << totnbpaq_ << " -> Mean/Sig spectra Matrix in " << flnm << " /sigspec...ppf" << endl;
Note:
See TracChangeset
for help on using the changeset viewer.