Changeset 3938 in Sophya for trunk/AddOn
- Timestamp:
- Jan 13, 2011, 11:42:21 AM (15 years ago)
- Location:
- trunk/AddOn/TAcq
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/branap.cc
r3905 r3938 158 158 << " viscktt: compute visibilities and check TimeTag/FrameCounter\n " 159 159 << " mspec: compute and save mean spectra for each channel \n " 160 << " bproc: run BRBaseProcessor for debug/printing (use -prt) \n " 160 161 << " -out OutPath: Output directory name \n" 161 162 << " -nmean NMean: Number of packet used for spectra/visibility computation \n" -
trunk/AddOn/TAcq/brbaseproc.cc
r3909 r3938 39 39 totprocnpaq_=0; 40 40 setNameId("baseproc",0); 41 SetPrintLevel(); 41 42 } 42 43 … … 117 118 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 118 119 vpaq_[fib].Set(fbuff_[fib]+jp*paqsz); 119 vfgok_[fib] =vpchk_[fib].Check(vpaq_[fib],curfc_[fib]);120 vfgok_[fib]=vpchk_[fib].Check(vpaq_[fib],curfc_[fib]); 120 121 if (!vfgok_[fib]) fgokallfibers_=false; 121 122 if (procpaqsz>0) vprocpaq_[fib] = fprocbuff_[fib]+jp*procpaqsz; … … 167 168 // return 0; 168 169 /* Exemple de code test */ 169 if ( totprocnpaq_ % 1000 == 0 ) { 170 cout << " BRBaseProcessor::Process() " << totprocnpaq_ << " FrameCnt=" ; 170 if ((prtlev_>0)&&(totprocnpaq_ %prtmodulo_==0)) { 171 cout << " BRBaseProcessor::Process(totnpaq=" << totprocnpaq_ << ") ObsTime=" << getObsTime() 172 << " TimeTag=" << getCurTimeTagSeconds() << " s. FrameCounter=" << getCurFrameCounter() << endl; 173 if (prtlev_<2) return 0; 174 cout << " ... FrameCnt[0..." << memgr_.NbFibres()-1 << "]=" ; 171 175 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) 172 cout << curfc_[fib]<< "," ;176 cout << getCurFrameCounter(fib) << "," ; 173 177 cout << endl; 174 cout << " TimeTag :" ;178 cout << " ... TimeTag[0..." << memgr_.NbFibres()-1 << "]=" ; 175 179 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) 176 cout << vpaq_[fib].TimeTag()/125000000 << "," ; 177 cout << " seconds" << endl; 180 cout << getCurTimeTag(fib) << "," ; 181 cout << endl; 182 if (prtlev_<3) return 0; 183 cout << " ... TimeTagSeconds[0..." << memgr_.NbFibres()-1 << "]=" ; 184 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) 185 cout << getCurTimeTagSeconds(fib) << "," ; 186 cout << endl; 178 187 } 179 188 return 0; -
trunk/AddOn/TAcq/brbaseproc.h
r3909 r3938 30 30 31 31 virtual void run(); 32 inline void Stop(); 32 33 inline void Stop() { stop_ = true; } 33 34 inline void STOP() { stop_ = true; } 34 35 … … 37 38 inline void setNameId(string nom, int id) 38 39 { bpnom_=nom; bpid_=id; } 40 41 // get Observation Time ( obtained from MemZoneMgr ) 42 inline SOPHYA::TimeStamp& getObsTime() { return cts_; } 43 // Renvoie le numero de frame-counter courant - si fgz=true, soustrait le FC du premier paquet 44 inline uint_8 getCurFrameCounter(size_t fib=0, bool fgz=true) 45 { if (fgz) return (curfc_[fib]-fcfirst_[fib]) ; else return curfc_[fib]; } 46 // Renvoie le TimeTag courant (unite coups d'horloge) - si fgz=true, soustrait le TT du premier paquet 47 inline uint_8 getCurTimeTag(size_t fib=0, bool fgz=true) 48 { if (fgz) return (vpaq_[fib].TimeTag()-ttfirst_[fib]) ; else return vpaq_[fib].TimeTag(); } 49 // Renvoie le TimeTag courant converti en secondes - si fgz=true, soustrait le TT du premier paquet 50 inline double getCurTimeTagSeconds(size_t fib=0, bool fgz=true) 51 { 52 if (fgz) return ((double)(vpaq_[fib].TimeTag()-ttfirst_[fib])/1.25e8) ; 53 else return ((double)vpaq_[fib].TimeTag()/1.25e8); 54 } 55 //---- niveau d'impression 56 inline void SetPrintLevel(int lev=0, uint_8 prtmodulo=10) 57 { prtlev_=lev; prtmodulo_=prtmodulo;} 39 58 40 59 protected: … … 53 72 vector<uint_8> vfgok_; // Vecteur de flag si paquet OK pour chaque fibre 54 73 vector<uint_8> curfc_; // Vecteur de numero de FrameCounter pour chaque fibre 55 vector<uint_8> fcfirst_; // 56 vector<uint_8> ttfirst_; 74 vector<uint_8> fcfirst_; // numero du FrameCounter pour le premier paquet 75 vector<uint_8> ttfirst_; // TimeTag pour le premier paquet 57 76 bool fgokallfibers_; // true -> paquets for all fibers OK 58 77 59 78 uint_8 totprocnpaq_; 60 79 SOPHYA::TimeStamp cts_; // current time stamp, get from MemZoneMgr … … 62 81 string bpnom_; // nom du processeur 63 82 int bpid_; // numero d'identificateur 83 84 int prtlev_; // print level 85 uint_8 prtmodulo_; // print periodicity (modulo) 64 86 }; 65 87 -
trunk/AddOn/TAcq/brfitsrd.cc
r3909 r3938 57 57 // Extraction de qques parametres utiles depuis les fichiers FITS 58 58 string fkvs; 59 cpaqdeltatime_=0.; 59 60 if (fib==0) { 60 61 fkvs=mff_[fib].GetKeyValue("DATEOBS"); 61 if (fkvs.length()>0) { 62 cdateobs_.Set(fkvs); 63 cout << " BRMultiFitsReader/First file (for fiber 0) DATEOBS=" << fkvs << endl; 64 } 65 } 66 fkvs=mff_[fib].GetKeyValue("DATEOBS"); 62 if (fkvs.length()>0) cdateobs_.Set(fkvs); 63 fkvs=mff_[fib].GetKeyValue("TMSTART"); 64 if (fkvs.length()>0) { 65 ctmstart_.Set(fkvs); 66 cout << " BRMultiFitsReader/First file (for fiber 0) TMSTART=" << fkvs << endl; 67 fkvs=mff_[fib].GetKeyValue("TMEND"); 68 SOPHYA::TimeStamp tmend_=ctmstart_; 69 if (fkvs.length()>0) tmend_.Set(fkvs); 70 cpaqdeltatime_=((double)(tmend_.DaysPart()-cdateobs_.DaysPart())*86400.+ 71 (tmend_.SecondsPart()-cdateobs_.SecondsPart()))/(double)mff_[fib].NAxis2(); 72 } 73 } 74 fkvs=mff_[fib].GetKeyValue("FIBERNUM"); 67 75 memgr_.FiberId(fib) = atoi( fkvs.c_str() ); 68 76 … … 222 230 string fkvs=mff_[fib].GetKeyValue("DATEOBS"); 223 231 if (fkvs.length()>0) cdateobs_.Set(fkvs); 232 fkvs=mff_[fib].GetKeyValue("TMSTART"); 233 if (fkvs.length()>0) { 234 ctmstart_.Set(fkvs); 235 cout << " BRMultiFitsReader/First file (for fiber 0) TMSTART=" << fkvs << endl; 236 fkvs=mff_[fib].GetKeyValue("TMEND"); 237 SOPHYA::TimeStamp tmend_=ctmstart_; 238 if (fkvs.length()>0) tmend_.Set(fkvs); 239 cpaqdeltatime_=((double)(tmend_.DaysPart()-cdateobs_.DaysPart())*86400.+ 240 (tmend_.SecondsPart()-cdateobs_.SecondsPart()))/(double)mff_[fib].NAxis2(); 241 } 224 242 } 225 243 vfpos_[fib]=0; … … 254 272 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) 255 273 mmbufib_[fib]=memgr_.GetMemZone(mid_,fib); 274 // Definition temps pour la zone a remplir 275 memgr_.GetAuxData(mid_)->FillTime().Set(ctmstart_.ToDays()+cpaqdeltatime_*(double)vfpos_[0]/86400.); 256 276 return false; 257 277 } -
trunk/AddOn/TAcq/brfitsrd.h
r3909 r3938 80 80 Byte* mmbufib_[MAXANAFIB]; // Pointeurs zone memoire de chaque fibre rendu par RAcqMemZoneMgr 81 81 82 SOPHYA::TimeStamp cdateobs_; // current time/date read from file 82 SOPHYA::TimeStamp cdateobs_; // current file time/date (from DATEOBS keyword in fits file) 83 SOPHYA::TimeStamp ctmstart_; // current time/date read from file (from TMSTART keyword in fits file) 84 double cpaqdeltatime_; // current time laps between two paquets in file = (TMEND-TMSTART)/NAXIS2 83 85 84 86 int prtlev_; // print level -
trunk/AddOn/TAcq/brproc.cc
r3905 r3938 76 76 ofsdtp_=NULL; 77 77 dtp_=NULL; 78 string dtfile="!"+outpath_+"/dtspec.fits"; 79 ofsdtp_ = new FitsInOutFile(dtfile,FitsInOutFile::Fits_Create); 80 dtp_ = new SwFitsDataTable(*ofsdtp_,1024,true); 81 char cnom[32]; 82 for(int i=0; i<nchan; i++) { 83 sprintf(cnom,"variance%d",i); 84 dtp_->AddFloatColumn(cnom); 85 } 86 /* 87 for(int i=0; i<nchan; i++) { 88 sprintf(cnom,"sigma%d",i); 89 dtp_->AddFloatColumn(cnom); 90 } 91 */ 92 xnt_=new double[nchan*2]; 93 78 xnt_=new double[nchan*2]; // CHECK : ATTENTION la taille depend de nombre de colonne du NTuple ! 94 79 } 95 80 … … 108 93 delete dtp_; 109 94 delete ofsdtp_; 110 delete xnt_;111 }95 } 96 if (xnt_) delete xnt_; 112 97 cout << " ------------------------------------------------------------------------ " << endl; 113 98 } … … 138 123 139 124 /* --Methode-- */ 125 void BRMeanSpecCalculator::DefineDataTable() 126 { 127 string dtfile="!"+outpath_+"/dtspec.fits"; 128 ofsdtp_ = new FitsInOutFile(dtfile,FitsInOutFile::Fits_Create); 129 dtp_ = new SwFitsDataTable(*ofsdtp_,1024,true); 130 char cnom[32]; 131 size_t nchan=(fgsinglechannel_?memgr_.NbFibres():2*memgr_.NbFibres()); 132 for(int i=0; i<nchan; i++) { 133 sprintf(cnom,"variance%d",i); 134 dtp_->AddFloatColumn(cnom); 135 } 136 /* 137 for(int i=0; i<nchan; i++) { 138 sprintf(cnom,"sigma%d",i); 139 dtp_->AddFloatColumn(cnom); 140 } 141 */ 142 // xnt_=new double[nchan*2]; CHECK : faut-il reallouer ? 143 } 144 145 /* --Methode-- */ 140 146 void BRMeanSpecCalculator::ReadGainFitsFile(string filename, bool fgapp) 141 147 { … … 212 218 void BRMeanSpecCalculator::ProcSpecWin(uint_8 numpaqstart, uint_8 numpaqend) 213 219 { 214 //DBG cout << "BRMeanSpecCalculator::ProcSpecWin()/Debug: numpaqstart=" << numpaqstart 215 //DBG << " numpaqend=" << numpaqend << endl; 216 220 221 if (prtlev_>0) { 222 uint_8 modulo = prtmodulo_/GetSpectraWindowSize(); 223 if (modulo<1) modulo=1; 224 if (nbtot_specwin_%modulo==0) { 225 cout << " BRMeanSpecCalculator::ProcSpecWin() num_win=" << nbtot_specwin_ << " numpaqstart=" << numpaqstart 226 << " numpaqend=" << numpaqend << endl; 227 cout << " ... ObsTime=" << getObsTime() << " TimeTag=" << getCurTimeTagSeconds() << " s. FrameCounter=" 228 << getCurFrameCounter() << endl; 229 } 230 } 231 nbtot_specwin_++; 232 return; 217 233 // On appelle la routine de nettoyage qui doit flagger les mauvais paquets 218 234 FlagBadPackets(numpaqstart, numpaqend); … … 255 271 double variance=0.; 256 272 variance=spec_window_(Range(1,Range::lastIndex()), Range(i), Range(kz)).Sum(); 257 xnt_[i]=variance;273 // xnt_[i]=variance; 258 274 clnflg_(i,kz)=0; 259 275 if (variance<varmin_) { clnflg_(i,kz)=1; nbadpaq_[i]++; } 260 276 else if (variance>varmax_) { clnflg_(i,kz)=2; nbadpaq_[i]++; } 261 277 } 262 dtp_->AddRow(xnt_);278 if (dtp_) dtp_->AddRow(xnt_); 263 279 } 264 280 return; -
trunk/AddOn/TAcq/brproc.h
r3905 r3938 26 26 27 27 using namespace std; 28 28 29 29 30 … … 51 52 inline sa_size_t PaqNumToArrayIndex(uint_8 numpaq) { return numpaq%spec_window_.SizeZ() ; } 52 53 53 // Pour definir le nombre maximum de fichiers de fenetres de spectres 54 // Pour definir le nombre maximum de fichiers de fenetres de spectres a sauver sur fichiers 54 55 inline void SetMaxNbSepcWinFiles(uint_4 nmax=0) { nmaxfiles_specw_=nmax; } 56 57 // Pour definir le datatable a remplir - pas de DataTable rempli si pas appele 58 virtual void DefineDataTable(); 55 59 56 60 inline void SetVarianceLimits(double vmin=0., double vmax=9.e99) -
trunk/AddOn/TAcq/specmfib.cc
r3905 r3938 50 50 if (rc) return rc; 51 51 par.Print(cout); 52 if ((par.action_!="cube3d")&&(par.action_!="mspec") ) {53 cout << " !!! specmfib.cc BAD action = " << par.action_ << " possible values: mspec,cube3d " << endl;52 if ((par.action_!="cube3d")&&(par.action_!="mspec")&&(par.action_!="bproc")) { 53 cout << " !!! specmfib.cc BAD action = " << par.action_ << " possible values: mspec,cube3d,bproc" << endl; 54 54 return 5; 55 55 } … … 74 74 procms.SetVarianceLimits(par.vmin_, par.vmax_); 75 75 if (par.gainfile_.length()>0) procms.ReadGainFitsFile(par.gainfile_); 76 procms.SetPrintLevel(par.prtlevel_,par.prtmodulo_); 77 // Il faut appeler procms.DefineDataTable() si on veut remplir le DataTable 76 78 77 79 BRFFTCalculator procfft(mmgr, par.fgsinglechannel_); … … 83 85 FitsCubeWriter wrt(mmgr, par.outpath_, par.nbloc_); 84 86 87 BRBaseProcessor* bproc_p=NULL; 88 if (par.action_=="bproc") { 89 bproc_p = new BRBaseProcessor(mmgr); 90 bproc_p->SetPrintLevel(par.prtlevel_,par.prtmodulo_); 91 if (!par.fgdatafft_) bproc_p->SetMemZAction(MemZA_ProcB); 92 } 93 85 94 cout << " specmfib: Starting threads (reader meanSpecCalculator ...) ... " << endl; 86 95 reader.start(); … … 88 97 else { // Calcul spectre moyenne 89 98 if (!par.fgdatafft_) procfft.start(); 90 procms.start(); 99 if (par.action_=="bproc") bproc_p->start(); 100 else procms.start(); 91 101 } 92 102 usleep(200000); … … 95 105 else { 96 106 if (!par.fgdatafft_) procfft.join(); 97 procms.join(); 107 if (par.action_=="bproc") bproc_p->join(); 108 else procms.join(); 98 109 } 99 110 mmgr.Print(cout); 111 if (bproc_p) delete bproc_p; 100 112 cout << resu ; 101 113 } -
trunk/AddOn/TAcq/svv2mtx.cc
r3714 r3938 173 173 174 174 cout << " ---- ProcSVFiles()-Begin - Reading chanum vector" << endl; 175 TVector< uint_4 > chanum; 175 /* 176 TVector< uint_4 > chanum(8*17); 177 int ku=0; 178 for(int iu=1; iu<=16; iu++) 179 for(int ju=iu; ju<=16; ju++) { 180 chanum(ku)=iu*1000+ju; ku++; 181 } 182 */ 183 TVector< uint_4 > chanum; 176 184 { 177 sprintf(fname, "%s/chanum .ppf",inoutpath.c_str());185 sprintf(fname, "%s/chanum_0.ppf",inoutpath.c_str()); 178 186 PInPersist pic(fname); 179 pic >> chanum;180 } 181 187 pic >> PPFNameTag("chanpairnum") >> chanum; 188 } 189 182 190 cout << " ---- ProcSVFiles()-Read chanum done " << endl; 183 191 sa_size_t nrows = (imax-imin+1)/istep; 184 192 sa_size_t kr=0; 185 193 194 sa_size_t mtf_binfreq=25; 195 sa_size_t mtf_bintime=5; 196 197 sa_size_t ncols=1; 198 186 199 for(int ifile=imin; ifile<=imax; ifile+=istep) { 187 sprintf(fname, "%s/vismtx %d.ppf",inoutpath.c_str(),ifile);200 sprintf(fname, "%s/vismtx_0_%d.ppf",inoutpath.c_str(),ifile); 188 201 cout << " ProcSVFiles[" << ifile << "] opening file " << fname << endl; 189 202 PInPersist pin(fname); … … 192 205 193 206 if (ifile==imin) { 194 sa_size_tncols = vismtx.NCols();207 ncols = vismtx.NCols(); 195 208 cout << " ProcSVFilesVJun09/Info: Output Time-Frequency matrices NRows=NFiles" 196 209 << nrows << " NCols=NFreq=" << ncols << endl; 197 210 for(size_t j=0; j<rowlist.size(); j++) 198 vmtf.push_back(TMatrix< complex<r_4> >(nrows, ncols) ); 199 } 211 vmtf.push_back(TMatrix< complex<r_4> >(ncols/mtf_binfreq+1, nrows/mtf_bintime+1)); 212 } 213 /* 200 214 for(size_t j=0; j<rowlist.size(); j++) 201 215 vmtf[j].Row(kr) = vismtx.Row(rowlist[j]); 216 */ 217 for(size_t j=0; j<rowlist.size(); j++) 218 for(sa_size_t icf=0; icf<ncols; icf++) { 219 vmtf[j](icf/mtf_binfreq,kr/mtf_bintime)+=vismtx(rowlist[j],icf); 220 } 221 // cout << " DBG* kr=" << kr << " kr/mtf_bintime=" << kr/mtf_bintime 222 // << " ncols/2/mtf_binfreq=" << ncols/2/mtf_binfreq << endl; 202 223 kr++; 224 203 225 204 226 // Calcul moyenne dans des bandes en frequence
Note:
See TracChangeset
for help on using the changeset viewer.