// Utilisation de SOPHYA pour faciliter les tests ... #include "sopnamsp.h" #include "machdefs.h" /* ---------------------------------------------------------- Projet BAORadio/PAON4 - (C) LAL/IRFU 2008-2018 Programme de lecture des fichiers matrices de visibilites de PAON4 produits par mfacq pour les voies Thermometres et RFI (9,10) R. Ansari Univ. Paris Sud, & LAL CNRS/IN2P3 Juillet 2018 ---------------------------------------------------------- */ // include standard c/c++ #include #include #include #include #include #include #include "pexceptions.h" #include "array.h" #include "histats.h" #include "fitsioserver.h" #include "resusage.h" // include lecteur de fichiers visibilites #include "p4autils.h" #include "visp4winreader.h" int Usage(void) { cout<<"--- rdthermrfi : Read PPF files for thermometer & RFI signal channnels and produce TF-Maps \n"<1)&&(strcmp(arg[1],"-h")==0))) return Usage(); P4AnaParams params; params.DecodeArgs(narg, arg); if (params.inpath_thermRFI_.length()<1) { cout<<"rdthermrfi/ERROR no path specified for thermometer/RFI signals ... (rdthermrfi -h for usage)" <=1) { fitsoutfile = "!"+fitsoutfile ; // adds '!' ? } int deltaIavg = params.TFMtimebin_; sa_size_t TFMfbin = params.TFMfreqbin_; int rc = 0; try { FitsIOServerInit(); HiStatsInitiator _inia; ResourceUsage resu; VisiP4WindowReader wreader(params, true); // true -> Read Therometer/RFI long Imin = wreader.getReader().getSerialFirst(); long Imax = wreader.getReader().getSerialLast(); long Istep = wreader.getReader().getSerialStep(); cout << "vis2ra/Info: processing visibility matrix serial/sequence number range " < TotalNbWindows="< timevec(wreader.getTotalNbWindows()/deltaIavg); TVector< double > ravec(wreader.getTotalNbWindows()/deltaIavg); TMatrix< complex > meanvismtx; TMatrix< complex > visum; TimeStamp dateobs, cfdate,datestart; TimeStamp dateorg(2015,1,1,12,0,0.); // Date origine 1 jan 2015 double mttag; int cnt=0, cntnt=0, pcntnt=0; int I=0; //----- 2 auto-corr (Thermometer/RFI) TimeFrequency maps TArray TFM_therm; TArray TFM_RFI; //---- 1 cross-correlation TFM (Thermometer <> RFI) TArray< complex > TFM_cross; //---- for the time-freqency map filling sa_size_t TFMtmidx=0; sa_size_t tfmSX, tfmSY; bool fgok=true; while (fgok) { //reads next visibility matrix window fgok = wreader.Shift(); if (!fgok) break; TMatrix< complex > vismtx = wreader.getAverageVisMtx(cfdate); if (cnt==0) { //resizing matrices for sum of auto-correlations and sum of 6 cross-correlations visum = vismtx; meanvismtx=vismtx; tfmSX=wreader.getTotalNbWindows()/deltaIavg; tfmSY=vismtx.NCols()/TFMfbin; TFM_therm.SetSize2D(tfmSX, tfmSY); TFM_RFI.SetSize2D(tfmSX, tfmSY); TFM_cross.SetSize2D(tfmSX, tfmSY); dateobs=cfdate; cnt++; continue; } if (I==0) dateobs=cfdate; // start filling a new time bin // Accumulating visum += vismtx; meanvismtx += vismtx; I++; // incrementing DeltaTime counter // we check that our time index did not go beyond the allocated array size (might not be necessary) if ((I==deltaIavg)&&(TFMtmidx>=tfmSX)) { // Cela ne devrait pas arriver en principe TFMtmidx++; I=0; cout << "rdthermrfi/Warning: something wrong in the logic , (TFMtmidx="<= (tfmSX="<0) { meanvismtx /= complex((r_4)cnt, (r_4)0.); cout<<" rdthermrfi/Info: Saving vismtx_mean to PPF file "< avg_freqs( myp4fre.getP4NbFreqChannels()/TFMfbin); double frbase = myp4fre.freqstart_ + myp4fre.getP4FreqResolution()/2. ; for (int kf=0 ; kf< myp4fre.getP4NbFreqChannels()/TFMfbin ; kf++,frbase += myp4fre.getP4FreqResolution()*TFMfbin ) avg_freqs(kf) = frbase ; po << PPFNameTag("FreqVec") << avg_freqs; FitsInOutFile * fos = NULL ; if (fitsoutfile.length()>=1){ vector ext_names; cout << " fitsoutfile :" <>>> rdthermrfi.cc ------- END ----------- RC=" << rc << endl; return rc; }