source: Sophya/trunk/AddOn/TAcq/branap.cc@ 3966

Last change on this file since 3966 was 3956, checked in by ansari, 15 years ago

Amelioration du processeur de calcul de visibilite (BRVisibilityCalculator) et du programme vismfib.cc pour permettre la prise en charge des donnees raw-2c pour le calcul des visibilites et ajout de la possibilite d ecrire les fichiers de sortie (matrices de visibilites) au format FITS, Reza 02/03/2011

File size: 10.2 KB
Line 
1#include <stdlib.h>
2#include <string.h>
3
4#include "branap.h"
5#include "minifits.h"
6#include "strutilxx.h"
7#include "sopnamsp.h"
8
9//--------------------------------------------------------------
10// Projet BAORadio - (C) LAL/IRFU 2008-2010
11// Classe de gestion des parametres programmes d'analyse
12//--------------------------------------------------------------
13
14/* --Methode-- */
15BRAnaParam::BRAnaParam(uint_4 nmean, uint_4 nzon, uint_4 npaqz)
16{
17 outpath_="./";
18 fgfitsout_=false;
19 nmean_=nmean;
20 nbloc_=1;
21 imin_=imax_=0;
22 istep_=1;
23 rdsamefc_=true; // read paquets with same frame counter
24 freqmin_=freqmax_=0;
25 nbinfreq_=1;
26 paqsize_=16424;
27 nzones_=nzon;
28 npaqinzone_=npaqz;
29 fgdatafft_=false; fgforceraworfft_=false;
30 fgsinglechannel_=false; fgforcesinglechan_=false;
31 prtlevel_=0;
32 prtmodulo_=50000;
33 nbcalgrp_=1;
34 nthreads_=1;
35
36 spec_win_sz_=0;
37 spw_ext_sz_=0;
38 nbmax_specwfiles_=0;
39
40 vmin_=0.; vmax_=9e99;
41 nbands_=0; bandfirst_ = bandlast_ = 0;
42 fgdt_ = false;
43
44 fgfreqfilter_=false; //JEC 1/2/11
45
46 gainfile_="";
47}
48
49/* --Methode-- */
50int BRAnaParam::DecodeArgs(int narg, char* arg[])
51{
52 if ((narg>1)&&(strcmp(arg[1],"-h")==0)) return Usage(false);
53 if (narg<5) return Usage(true);
54
55 bool okarg=false;
56 int ka=1;
57 while (ka<(narg-1)) {
58 if (strcmp(arg[ka],"-act")==0) {
59 action_=arg[ka+1];
60 ka+=2;
61 }
62 else if (strcmp(arg[ka],"-out")==0) {
63 outpath_=arg[ka+1];
64 size_t lenp=outpath_.size();
65 if ((lenp>0)&&(outpath_[lenp-1]!='/')) outpath_+='/';
66 ka+=2;
67 }
68 else if (strcmp(arg[ka],"-fitsout")==0) {
69 fgfitsout_=true;
70 ka++;
71 }
72 else if (strcmp(arg[ka],"-nmean")==0) {
73 nmean_=atoi(arg[ka+1]);
74 ka+=2;
75 }
76 else if (strcmp(arg[ka],"-nbloc")==0) {
77 nbloc_=atoi(arg[ka+1]);
78 ka+=2;
79 }
80 else if (strcmp(arg[ka],"-freq")==0) {
81 sscanf(arg[ka+1],"%d,%d,%d",&freqmin_,&freqmax_,&nbinfreq_);
82 ka+=2;
83 }
84 else if (strcmp(arg[ka],"-zones")==0) {
85 int nzon=4;
86 int npaqz=128;
87 sscanf(arg[ka+1],"%d,%d",&nzon,&npaqz);
88 nzones_=nzon; npaqinzone_=npaqz;
89 ka+=2;
90 }
91 else if (strcmp(arg[ka],"-prt")==0) {
92 sscanf(arg[ka+1],"%d,%ld",&prtlevel_,&prtmodulo_);
93 ka+=2;
94 }
95 else if (strcmp(arg[ka],"-nthr")==0) {
96 nthreads_=atoi(arg[ka+1]);
97 ka+=2;
98 }
99 else if (strcmp(arg[ka],"-nvcal")==0) {
100 nbcalgrp_=atoi(arg[ka+1]);
101 ka+=2;
102 }
103 else if (strcmp(arg[ka],"-nosfc")==0) {
104 rdsamefc_=false;
105 ka++;
106 }
107 else if (strcmp(arg[ka],"-singlechan")==0) {
108 fgsinglechannel_=true; fgforcesinglechan_ = true;
109 ka++;
110 }
111 else if (strcmp(arg[ka],"-rawdata")==0) {
112 fgforceraworfft_=true; fgdatafft_ = false;
113 ka++;
114 }
115 else if (strcmp(arg[ka],"-fftdata")==0) {
116 fgforceraworfft_=true; fgdatafft_ = true;
117 ka++;
118 }
119 else if (strcmp(arg[ka],"-varcut")==0) {
120 sscanf(arg[ka+1],"%lg,%lg",&vmin_,&vmax_);
121 ka+=2;
122 }
123 else if (strcmp(arg[ka],"-nband")==0) {
124 sscanf(arg[ka+1],"%d,%d,%d",&nbands_,&bandfirst_,&bandlast_);
125 ka+=2;
126 }
127 else if (strcmp(arg[ka],"-filldt")==0) {
128 fgdt_=true;
129 ka++;
130 }
131 else if (strcmp(arg[ka],"-freqfilter")==0) {
132 fgfreqfilter_=true;
133 ka++;
134 }
135 else if (strcmp(arg[ka],"-gain")==0) {
136 gainfile_=arg[ka+1];
137 ka+=2;
138 }
139 else if (strcmp(arg[ka],"-tspwin")==0) {
140 int ai1=0,ai2=0,ai3=0;
141 sscanf(arg[ka+1],"%d,%d,%d",&ai1,&ai2,&ai3);
142 spec_win_sz_=ai1; spw_ext_sz_=ai2; nbmax_specwfiles_=ai3;
143 ka+=2;
144 }
145 else if (strcmp(arg[ka],"-in")==0) {
146 if ((narg-ka)<4) {
147 cout << " BRAnaParam::DecodeArgs() / Argument error " << endl;
148 return Usage(true);
149 }
150 sscanf(arg[ka+1],"%d,%d,%d",&imin_,&imax_,&istep_); ka+=2;
151 while(ka<(narg-1)) {
152 string inpath = arg[ka];
153 size_t lenp=inpath.size();
154 if (lenp<1) inpath="./";
155 if ((lenp>0)&&(inpath[lenp-1]!='/')) inpath+='/';
156 vector<string> fiblist;
157 string sa1 = arg[ka+1];
158 FillVStringFrString(sa1, fiblist, ',');
159 char dbuff[32];
160 for(size_t i=0; i<fiblist.size(); i++) {
161 sprintf(dbuff,"Fiber%d/",(int)atoi(fiblist[i].c_str()));
162 dirlist_.push_back(inpath+dbuff);
163 }
164 ka += 2;
165 }
166 okarg=true;
167 }
168 else ka++;
169 }
170
171 if (!okarg) {
172 cout << " BRAnaParam::DecodeArgs() / Argument error " << endl;
173 return Usage(true);
174 }
175 return 0;
176}
177
178/* --Methode-- */
179int BRAnaParam::Usage(bool fgshort)
180{
181 cout << " --- BRAnaParam : Reading/Processing BAORadio FITS files parameters " << endl;
182 cout << " Usage: prgname [-act ACT] [-out OutPath] [-fitsout] \n"
183 << " [-nmean NMean] [-zones NZones,nPaqinZone] \n"
184 << " [-nbloc NBloc] [-freq NumFreqMin,NumFreqMax,NBinFreq] \n"
185 << " [-prt lev,modulo] [-nvcal n] [-nthr n] [-nosfc]\n"
186 << " [-singlechan] [-fftdata] [-rawdata] \n"
187 << " [-freqfilter] [-gain filename] [-varcut min,max] [-nband nband,first,last] \n"
188 << " [-filldt] [-tspwin wsz,extsz,nfiles] \n"
189 << " -in Imin,Imax,Istep InPath FiberList [InPath2 FiberList2 InPath3 FiberList3 ...] \n" << endl;
190 if (fgshort) {
191 cout << " prgname -h for detailed instructions" << endl;
192 return 5;
193 }
194 cout << " -act Action: cube3d or vis or viscktt or mspec \n"
195 << " cube3d: create 3D fits cubes \n "
196 << " vis: compute visibilites (vismfib program) \n"
197 << " viscktt: compute visibilities and check TimeTag/FrameCounter (vismfib program)\n "
198 << " mspec: compute and save mean spectra for each channel \n "
199 << " bproc: run BRBaseProcessor for debug/printing (use -prt) \n "
200 << " -out OutPath: Output directory name \n"
201 << " -fitsout : Force FITS format for output files \n"
202 << " -nmean NMean: Number of packet used for spectra/visibility computation \n"
203 << " -nbloc NBloc: Number of MemMgr blocs in output file\n"
204 << " -zones NZones,NbPaqinZone : Number of Zones and number of paquets in one zone (RAcqMemZoneMgr) \n"
205 << " -freq NumFreqMin,NumFreqMax,NBinFreq : Frequency zone and number of bins \n"
206 << " -prt lev,modulo : Print level (0,1,2...) and print counter modulo (10000, 50000 ...) \n"
207 << " -nvcal n : number of BRVisibilityCalculator objects running in parallel in BRVisCalcGroup (default=1) \n"
208 << " -nthr n : number of threads for parallel execution in BRVisibilityCalculator (default=1) \n"
209 << " -nosfc : Don't force reading with SAME FrameCounter \n"
210 << " -singlechan : Force one channel per fiber \n"
211 << " -rawdata : Force raw data mode (firmware raw) \n"
212 << " -fftdata : Force FFT data mode (firmware fft) \n"
213 << " -varcut min,max : min-max cut on variance \n"
214 << " -nband nband,first,last: numbers of freq. bands and first and last bands used for cuts \n"
215 << " -filldt : force data table filling \n"
216 << " -freqfilter : force median filtering on the frequencies \n"
217 << " -gain filename : spectral response fits file name \n"
218 << " -tspwin wsz,extsz,nfiles : spectra time (paquet no) window (ex: -tspwin 120,4,5) \n"
219 << " wsz,extsz= window,extension size; nfiles= maximum number of windows saved \n"
220 << " -in : input files/directory definition : \n"
221 << " Imin,Imax,Istep: fits files signalII.fits Imin<=II<=Imax Istep=increment \n"
222 << " InPath: Input directerory fits files in InPath/FiberJJ directory \n"
223 << " FiberList: List of fiber numbers (JJ - Ex: 2,1,4 ) \n" << endl;
224 return 1;
225}
226
227/* --Fonction-- */
228int BRAnaParam::PaqSizeFromFits()
229{
230 uint_4 paqsz, npaqf;
231 char flnm[1024];
232 sprintf(flnm,"%s/signal%d.fits",dirlist_[0].c_str(),imin_);
233 bool fgdatafft_in_fits=false;
234 int rc = DecodeMiniFitsHeader(flnm,paqsize_, npaqinfile_,fgdatafft_in_fits, fgsinglechannel_);
235 if(fgforcesinglechan_) fgsinglechannel_= true;
236 if (!fgforceraworfft_) fgdatafft_=fgdatafft_in_fits;
237 return rc;
238}
239
240/* --Fonction-- */
241ostream& BRAnaParam::Print(ostream& os)
242{
243 os << " BRAnaParam::Print() dirlist_.size()=" << dirlist_.size() << " Input directories: " << endl;
244 for(size_t k=0; k< dirlist_.size(); k++)
245 cout << k+1 << " : " << dirlist_[k] << endl;
246 cout << " IMin= " << imin_ << " IMax= " << imax_ << " IStep= " << istep_
247 << ((rdsamefc_)?" SameFrameCounter read mode":" AllOKPaquets read mode ") << endl;
248 cout << " OutPath= " << outpath_ << (fgfitsout_?" force FITS output":" PPF output") << endl;
249 cout << " Action=" << action_ << " NMean=" << nmean_ << " NBloc=" << nbloc_ << endl;
250 cout << " FreqMin= " << freqmin_ << " FreqMax= " << freqmax_ << " NBinFreq= " << nbinfreq_ << endl;
251 cout<< ((fgdt_)?" Fill DadaTable ":" NO DataTable") << endl;
252 cout << " GainFileName=" << gainfile_ << " Variance: Min= " << vmin_ << " Max= " << vmax_
253 << " Bands: N=" << nbands_ << " First=" << bandfirst_ << " Last=" << bandlast_
254 << endl;
255 cout << " force frequence median filtering (action gain)" << endl;
256 cout << " Spectra TimeWindow (Nb.Paquets) Size=" << spec_win_sz_ << " ExtensionSize=" << spw_ext_sz_
257 << " MaxNbFile=" << nbmax_specwfiles_ << endl;
258 cout << " PaqSize=" << paqsize_ << " - NZones=" << nzones_ << " NPaqZone=" << npaqinzone_
259 << " PrtLevel=" << prtlevel_ << " PrtCntModulo=" << prtmodulo_ << endl;
260 cout << " AcqDataMode: " << ((fgdatafft_)?" Data_FFT " : " Data_Raw " )
261 << ((fgsinglechannel_)?" SingleChannel " : " TwoChannels " ) << endl;
262 cout << " NbVisibCalculator in Group: " << nbcalgrp_ << " with N//threads: " << nthreads_ << endl;
263
264
265 return os;
266}
267
268/* --Fonction-- */
269int BRAnaParam::DecodeMiniFitsHeader(const char* filename, uint_4& paqsz, uint_4& npaq,
270 bool& fgdatafft, bool& fgsinglechannel)
271{
272 cout << " DecodeMiniFitsHeader - Opening file: " << filename << endl;
273 MiniFITSFile mff(filename, MF_Read);
274 string acqmode=mff.GetKeyValue("ACQMODE");
275 cout << "DecodeMiniFitsHeader()... Type=" << mff.DataTypeToString() << " NAxis1=" << mff.NAxis1()
276 << " NAxis2=" << mff.NAxis2() << " AcqMode=" << acqmode << endl;
277 paqsz = mff.NAxis1();
278 npaq = mff.NAxis2();
279 if (acqmode.substr(0,3)=="fft") fgdatafft=true;
280 if (acqmode.find("1c") < acqmode.length()) fgsinglechannel=true;
281 return 0;
282}
283
Note: See TracBrowser for help on using the repository browser.