source: BAORadio/AmasNancay/trunk/mergeAnaFiles.cc@ 562

Last change on this file since 562 was 562, checked in by campagne, 14 years ago

continue w/wo calibration stuff (jec)

File size: 38.6 KB
Line 
1// Utilisation de SOPHYA pour faciliter les tests ...
2#include "sopnamsp.h"
3#include "machdefs.h"
4#include <dirent.h>
5#include <matharr.h>
6
7// include standard c/c++
8#include <regex.h>
9#include <stdio.h>
10#include <stdlib.h>
11#include <limits>
12#include <iostream>
13#include <fstream>
14#include <string>
15#include <vector>
16#include <map>
17#include <functional>
18#include <algorithm>
19#include <numeric>
20#include <list>
21#include <exception>
22
23// include sophya mesure ressource CPU/memoire ...
24#include "resusage.h"
25#include "ctimer.h"
26#include "timing.h"
27#include "timestamp.h"
28#include "strutilxx.h"
29#include "ntuple.h"
30#include "fioarr.h"
31#include "tarrinit.h"
32#include "histinit.h"
33#include "fitsioserver.h"
34#include "fiosinit.h"
35#include "ppersist.h"
36
37//-----------------------------------------------
38const sa_size_t NUMBER_OF_CHANNELS = 2;
39const sa_size_t NUMBER_OF_FREQ = 8192;
40const r_4 LOWER_FREQUENCY = 1250.0; //MHz
41const r_4 TOTAL_BANDWIDTH = 250.0; //MHz
42//-----------------------------------------------
43//Input parameters
44struct Param {
45 int debuglev_; //debug
46 string inPath_; //root directory of the input files
47 string outPath_; //output files are located here
48 string sourceName_; //source name & subdirectory of the input files
49 string ppfFile_; //generic name of the input files
50 int nSliceInFreq_; //used by reduceSpectra() fnc
51 string calibFreq_; //freq. value used for calibration
52 r_4 rcalibFreq_; //float version
53 string calibBandFreq_; //band of freq. used for calibration
54 r_4 rcalibBandFreq_; //float version
55 int maxNumberCycles_;//maximum number of cycles to be treated
56} para;
57//--------------------------------------------------------------
58//Utility functions
59
60sa_size_t freqToChan(r_4 f){
61 return (sa_size_t)((f-LOWER_FREQUENCY)/TOTAL_BANDWIDTH*NUMBER_OF_FREQ);
62}
63//--------
64//COMPUTE the mean value on a freq. range for all channels
65//--------
66void meanInRange(const TMatrix<r_4> mtx,
67 sa_size_t chLow,
68 sa_size_t chHigh,
69 TVector<r_4>& vec){
70 sa_size_t nr = mtx.NRows();
71 for (sa_size_t ir=0; ir<nr; ir++){
72 TVector<r_4> tmp(mtx(Range(ir),Range(chLow,chHigh)),false);
73 double mean, sigma;
74 MeanSigma(tmp,mean,sigma);
75 vec(ir) = mean;
76 }
77}
78//---------
79class median_of_empty_list_exception:public std::exception{
80 virtual const char* what() const throw() {
81 return "Attempt to take the median of an empty list of numbers. "
82 "The median of an empty list is undefined.";
83 }
84 };
85 template<class RandAccessIter>
86 double median(RandAccessIter begin, RandAccessIter end)
87 throw(median_of_empty_list_exception){
88 if(begin == end){ throw median_of_empty_list_exception(); }
89 std::size_t size = end - begin;
90 std::size_t middleIdx = size/2;
91 RandAccessIter target = begin + middleIdx;
92 std::nth_element(begin, target, end);
93
94 if(size % 2 != 0){ //Odd number of elements
95 return *target;
96 }else{ //Even number of elements
97 double a = *target;
98 RandAccessIter targetNeighbor= target-1;
99 std::nth_element(begin, targetNeighbor, end);
100 return (a+*targetNeighbor)/2.0;
101 }
102 }
103
104//-------------
105void split(const string& str, const string& delimiters , vector<string>& tokens) {
106 // Skip delimiters at beginning.
107 string::size_type lastPos = str.find_first_not_of(delimiters, 0);
108 // Find first "non-delimiter".
109 string::size_type pos = str.find_first_of(delimiters, lastPos);
110
111 while (string::npos != pos || string::npos != lastPos)
112 {
113 // Found a token, add it to the vector.
114 tokens.push_back(str.substr(lastPos, pos - lastPos));
115 // Skip delimiters. Note the "not_of"
116 lastPos = str.find_first_not_of(delimiters, pos);
117 // Find next "non-delimiter"
118 pos = str.find_first_of(delimiters, lastPos);
119 }
120}
121//--------------------------------------------------------------
122char *regexp (const char *string, const char *patrn, int *begin, int *end) {
123 int i, w=0, len;
124 char *word = NULL;
125 regex_t rgT;
126 regmatch_t match;
127 regcomp(&rgT,patrn,REG_EXTENDED);
128 if ((regexec(&rgT,string,1,&match,0)) == 0) {
129 *begin = (int)match.rm_so;
130 *end = (int)match.rm_eo;
131 len = *end-*begin;
132 word=(char*)malloc(len+1);
133 for (i=*begin; i<*end; i++) {
134 word[w] = string[i];
135 w++; }
136 word[w]=0;
137 }
138 regfree(&rgT);
139 return word;
140}
141//-------
142sa_size_t round_sa(r_4 r) {
143 return static_cast<sa_size_t>((r > 0.0) ? (r + 0.5) : (r - 0.5));
144}
145//-----
146string StringToLower(string strToConvert){
147 //change each element of the string to lower case
148 for(unsigned int i=0;i<strToConvert.length();i++) {
149 strToConvert[i] = tolower(strToConvert[i]);
150 }
151 return strToConvert;//return the converted string
152}
153//-----
154bool stringCompare( const string &left, const string &right ){
155 if( left.size() < right.size() )
156 return true;
157 for( string::const_iterator lit = left.begin(), rit = right.begin(); lit != left.end() && rit != right.end(); ++lit, ++rit )
158 if( tolower( *lit ) < tolower( *rit ) )
159 return true;
160 else if( tolower( *lit ) > tolower( *rit ) )
161 return false;
162 return false;
163}
164//-----
165list<string> ListOfFileInDir(string dir, string filePettern) throw(string) {
166 list<string> theList;
167
168
169 DIR *dip;
170 struct dirent *dit;
171 string msg; string fileName;
172 string fullFileName;
173 size_t found;
174
175 if ((dip=opendir(dir.c_str())) == NULL ) {
176 msg = "opendir failed on directory "+dir;
177 throw msg;
178 }
179 while ( (dit = readdir(dip)) != NULL ) {
180 fileName = dit->d_name;
181 found=fileName.find(filePettern);
182 if (found != string::npos) {
183 fullFileName = dir + "/";
184 fullFileName += fileName;
185 theList.push_back(fullFileName);
186 }
187 }//eo while
188 if (closedir(dip) == -1) {
189 msg = "closedir failed on directory "+dir;
190 throw msg;
191 }
192
193 theList.sort(stringCompare);
194
195 return theList;
196
197}
198//
199class StringMatch : public unary_function<string,bool> {
200public:
201 StringMatch(const string& pattern): pattern_(pattern){}
202 bool operator()(const string& aStr) const {
203
204
205 int b,e;
206 regexp(aStr.c_str(),pattern_.c_str(),&b,&e);
207
208// cout << "investigate " << aStr << " to find " << pattern_
209// << "[" <<b<<","<<e<<"]"
210// << endl;
211
212
213 if (b != 0) return false;
214 if (e != (int)aStr.size()) return false;
215 return true;
216
217 }
218private:
219 string pattern_;
220};
221//-------------------------------------------------------
222//Rebin in frequence + compute mean and sigma
223void reduceSpectra(const TMatrix<r_4>& specMtxInPut,
224 TMatrix<r_4>& meanMtx,
225 TMatrix<r_4>& sigmaMtx) {
226 sa_size_t nSliceFreq = para.nSliceInFreq_;
227 sa_size_t deltaFreq = NUMBER_OF_FREQ/nSliceFreq;
228 for (sa_size_t iSlice=0; iSlice<nSliceFreq; iSlice++){
229 sa_size_t freqLow= iSlice*deltaFreq;
230 sa_size_t freqHigh= freqLow + deltaFreq -1;
231 for (sa_size_t iCh=0; iCh<NUMBER_OF_CHANNELS; ++iCh){
232 TVector<r_4> reducedRow;
233 reducedRow = specMtxInPut.SubMatrix(Range(iCh),Range(freqLow,freqHigh)).CompactAllDimensions();
234 double mean;
235 double sigma;
236 MeanSigma(reducedRow,mean,sigma);
237 meanMtx(iCh,iSlice) = mean;
238 sigmaMtx(iCh,iSlice) = sigma;
239 }//eo loop on channels
240 }//eo loop on slices
241}
242//-------------------------------------------------------
243//Compute the mean of Diff ON-OFF BAO-calibrated spectra and also the mean/sigma of rebinned spectra
244//Used like:
245//
246// void meanCalibBAODiffOnOffCycles() throw(string) {
247
248// list<string> listOfFiles;
249// string directoryName;
250// directoryName = para.inPath_ + "/" + para.sourceName_;
251
252// //Make the listing of the directory
253// listOfFiles = ListOfFileInDir(directoryName,para.ppfFile_);
254
255// list<string>::const_iterator iFile, iFileEnd, iSpecOff, iSpecOffEnd, iSpecOn, iSpecOnEnd;
256// iFileEnd = listOfFiles.end();
257
258
259// //Loop on files
260// uint_4 nRuns=0;
261// TArray<r_4> tableOfSpectra(NUMBER_OF_FREQ,NUMBER_OF_CHANNELS,para.maxNumberCycles_); //para.maxNumberCycles_ should be large enough...
262
263
264// for (iFile = listOfFiles.begin(); iFile != iFileEnd; ++iFile) {
265// if (para.debuglev_>90){
266// cout << "load file <" << *iFile << ">" << endl;
267// }
268
269// vector<string> tokens;
270// split(*File,"_",tokens);
271// string dateOfRun = tokens[1];
272// string srcLower = tokens[2];
273// if (para.debuglev_>90){
274// cout << "date <" << dateOfRun << ">" << endl;
275// }
276
277// PInPersist fin(*iFile);
278// vector<string> vec = fin.GetNameTags();
279
280// if (para.typeOfCalib_ == "perRun") {
281// ///////////////////
282// //make the calibration of the mean of all Off and On of the run and perform the difference
283
284// vector<string> modeList;
285// modeList.push_back("On");
286// modeList.push_back("Off");
287// vector<string>::const_iterator iMode;
288// map<string, TMatrix<r_4> > spectreModeCollect;
289
290// for (iMode = modeList.begin(); iMode!=modeList.end(); ++iMode) {
291// ///////////////////
292// //
293// //Compute the mean of the mode
294// //
295// list<string> listOfSpectra;
296// //Keep only required PPF objects
297// string matchstr = "specRaw"+(*iMode)+"[0-9]+";
298// std::remove_copy_if(
299// vec.begin(), vec.end(), back_inserter(listOfSpectra),
300// not1(StringMatch(matchstr))
301// );
302
303// listOfSpectra.sort(stringCompare);
304// iSpecEnd = listOfSpectra.end();
305// TMatrix<r_4> meanOfSpectra(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
306// uint_4 nSpectra=0;
307// //Loop of spectra matrix
308// for (iSpec = listOfSpectra.begin(); iSpec!=iSpecEnd; ++iSpec){
309// if (para.debuglev_>90){
310// cout << " spactra <" << *iSpec << ">" << endl;
311// }
312// TMatrix<r_4> aSpec(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
313// fin.GetObject(aSpec,*iSpec);
314// //How to see if the GetObject is ok?? Ask Reza
315// nSpectra++;
316// meanOfSpectra+=aSpec;
317// }//end loop Off
318// //Mean
319// if(nSpectra>0)meanOfSpectra=(r_4)(nSpectra);
320
321// //BAO Calibrator
322// string calibFileName = directoryName + "/"
323// + "calib_" + dateOfRun + "_" + srcLower + "_"+(*iMode)+"_"
324// + para.calibFreq_ +"MHz-All.txt";
325// if(debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
326// ifstream ifs(calibFileName.c_str());
327// if ( ! ifs.is_open() ) {
328// rc = 999;
329// throw calibFileName + " cannot be opened...";
330// }
331// TVector<r_4> calibBAOfactors;
332// sa_size_t nr,nc; //values read
333// calibBAOfactorsOff.ReadASCII(ifs,nr,nc);
334// if(debuglev_>9){
335// cout << "(nr,nc): "<< nr << "," << nc << endl;
336// calibBAOfactors.Print(cout);
337// }
338
339// for (sa_size_t iCh=0;iCh<NUMBER_OF_CHANNELS;++iCh){
340// meanOfSpectra(Range(iCh), Range::all()) /=calibBAOfactors(iCh);
341// }
342// //storage
343// spectreModeCollect.insert(pair<string, TMatrix<r_4> >(*iMode,TMatrix<r_4>(meanOfSpectra,false))); //do not share data (cf. SOPHYA)
344// }//end of mode
345
346// //Take the difference ON-OFF in current run
347// TMatrix<r_4>diffOnOff = spectreModeCollect["On"]-spectreModeCollect["Off"];
348
349
350// } else if (para.typeOfCalib_ == "perCycle") {
351// //perform the calibration of the OFF and ON per cycle, then make the mean and take the diff
352// } else {
353// string msg="FATAL (meanCalibBAODiffOnOffCycles); unknown calibration mode "
354// + para.typeOfCalib_ ;
355// throw(msg);
356// }
357
358
359// nRuns++;
360
361// }//eo loop on spectra in a file
362// }
363void meanCalibBAODiffOnOffCycles() throw(string) {
364
365 list<string> listOfFiles;
366 string directoryName;
367 directoryName = para.inPath_ + "/" + para.sourceName_;
368
369 //Make the listing of the directory
370 listOfFiles = ListOfFileInDir(directoryName,para.ppfFile_);
371
372 list<string>::const_iterator iFile, iFileEnd, iSpec, iSpecEnd;
373 iFileEnd = listOfFiles.end();
374
375 //mean ON-OFF over the list of cycles
376 TMatrix<r_4> meanDiffONOFF_noCalib(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ); //set to 0
377 TMatrix<r_4> meanDiffONOFF_perRunCalib(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ); //set to 0
378 TMatrix<r_4> meanDiffONOFF_perCycleCalib(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ); //set to 0
379 char* onffTupleName[7]={"cycle",
380 "onoffRaw0","onoffRun0","onoffCycle0",
381 "onoffRaw1","onoffRun1","onoffCycle1"};
382 NTuple onoffevolution(7,onffTupleName);
383 r_4 xnt[7];
384
385 //Lower and Higher freq. bin to perform mean follow up
386 sa_size_t chLow = freqToChan(para.rcalibFreq_ - (para.rcalibBandFreq_*0.5));
387 sa_size_t chHigh = freqToChan(para.rcalibFreq_ + (para.rcalibBandFreq_*0.5));
388
389 //Loop on files/run
390
391 int totalNumberCycles=0; //total number of cycles for normalisation
392 for (iFile = listOfFiles.begin(); iFile != iFileEnd; ++iFile) {
393 if (para.debuglev_>90){
394 cout << "load file <" << *iFile << ">" << endl;
395 }
396
397 vector<string> tokens;
398 split(*iFile,"_",tokens);
399 string dateOfRun = tokens[1];
400 if (para.debuglev_>90){
401 cout << "date <" << dateOfRun << ">" << endl;
402 }
403 vector<string> tokens2;
404 split(tokens[2],".",tokens2);
405 string srcLower = tokens2[0];
406
407
408
409 PInPersist fin(*iFile);
410 vector<string> vec = fin.GetNameTags();
411
412 vector<string> modeList;
413 modeList.push_back("On");
414 modeList.push_back("Off");
415 vector<string>::const_iterator iMode;
416
417 map<string, list<int> > cycleModeCollect;
418
419 for (iMode = modeList.begin(); iMode!=modeList.end(); ++iMode) {
420 list<string> listOfSpectra;
421 //Keep only required PPF objects
422 string matchstr = "specRaw"+(*iMode)+"[0-9]+";
423 std::remove_copy_if(
424 vec.begin(), vec.end(), back_inserter(listOfSpectra),
425 not1(StringMatch(matchstr))
426 );
427
428 listOfSpectra.sort(stringCompare);
429 iSpecEnd = listOfSpectra.end();
430
431 matchstr = "[0-9]+";
432 //Loop of spectra matrix
433 list<int> listOfCycles;
434 for (iSpec = listOfSpectra.begin(); iSpec!=iSpecEnd; ++iSpec){
435 int b,e;
436 regexp(iSpec->c_str(),matchstr.c_str(),&b,&e);
437 if (para.debuglev_>90){
438 cout << " spactra <" << *iSpec << ">" << endl;
439 cout << " cycle " << iSpec->substr(b) << endl;
440 }
441 listOfCycles.push_back(atoi((iSpec->substr(b)).c_str()));
442 }//end loop spectra
443 cycleModeCollect[*iMode] = listOfCycles;
444 }//end of mode
445
446 //Take the Intersection of the list Of cycles in mode Off and On
447 list<int> commonCycles;
448 set_intersection(cycleModeCollect["On"].begin(),
449 cycleModeCollect["On"].end(),
450 cycleModeCollect["Off"].begin(),
451 cycleModeCollect["Off"].end(),
452 back_inserter(commonCycles)
453 );
454
455 if (para.debuglev_>90){
456 cout << "Liste of cycles common to On & Off: <";
457 for (list<int>::iterator i=commonCycles.begin(); i!=commonCycles.end(); ++i){
458 cout << *i << " ";
459 }
460 cout << ">" << endl;
461 }
462
463 //
464 //Load BAO Calibration factors "per Cycle and Channels"
465 //Compute the mean per Cycle to
466 // fill factors "per Run and Channels" with the same cycle list
467 //
468 //
469 //TODO improve the code....
470
471 TMatrix<r_4> calibBAOfactors_Off_Cycle_Ch0;
472 TMatrix<r_4> calibBAOfactors_Off_Cycle_Ch1;
473 TMatrix<r_4> calibBAOfactors_On_Cycle_Ch0;
474 TMatrix<r_4> calibBAOfactors_On_Cycle_Ch1;
475
476 string calibFileName;
477 ifstream ifs;
478 sa_size_t nr,nc; //values read
479
480 //OFF Cycle per Channel
481 calibFileName = directoryName + "/"
482 + "calib_" + dateOfRun + "_" + srcLower + "_Off_"
483 + para.calibFreq_ +"MHz-Ch0Cycles.txt";
484 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
485 ifs.open(calibFileName.c_str());
486 if ( ! ifs.is_open() ) {
487
488 throw calibFileName + " cannot be opened...";
489 }
490 calibBAOfactors_Off_Cycle_Ch0.ReadASCII(ifs,nr,nc);
491 if(para.debuglev_>9){
492 cout << "(nr,nc): "<< nr << "," << nc << endl;
493 calibBAOfactors_Off_Cycle_Ch0.Print(cout);
494 cout << endl;
495 }
496
497 TMatrix<r_4> calibBAOfactors_Off_Run_Ch0(nr,nc);
498 calibBAOfactors_Off_Run_Ch0.Column(0) = calibBAOfactors_Off_Cycle_Ch0.Column(0);
499 {//Compute the mean
500 TVector<r_4> coef(calibBAOfactors_Off_Cycle_Ch0(Range::all(),Range::last()),false);
501 double mean,sigma;
502 MeanSigma(coef,mean,sigma);
503 cout << "Mean: " << mean << " sigma " << sigma << endl;
504 calibBAOfactors_Off_Run_Ch0.Column(1).SetCst(mean);
505 }
506 if(para.debuglev_>9){
507 cout << "Fill calib. with mean value " << endl;
508 calibBAOfactors_Off_Run_Ch0.Print(cout);
509 cout << endl;
510 }
511 ifs.close();
512
513 //
514 calibFileName = directoryName + "/"
515 + "calib_" + dateOfRun + "_" + srcLower + "_Off_"
516 + para.calibFreq_ +"MHz-Ch1Cycles.txt";
517 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
518 ifs.open(calibFileName.c_str());
519 if ( ! ifs.is_open() ) {
520
521 throw calibFileName + " cannot be opened...";
522 }
523 calibBAOfactors_Off_Cycle_Ch1.ReadASCII(ifs,nr,nc);
524 if(para.debuglev_>9){
525 cout << "(nr,nc): "<< nr << "," << nc << endl;
526 calibBAOfactors_Off_Cycle_Ch1.Print(cout);
527 cout << endl;
528 }
529 TMatrix<r_4> calibBAOfactors_Off_Run_Ch1(nr,nc);
530 calibBAOfactors_Off_Run_Ch1.Column(0) = calibBAOfactors_Off_Cycle_Ch1.Column(0);
531 {//Compute the mean
532 TVector<r_4> coef(calibBAOfactors_Off_Cycle_Ch1(Range::all(),Range::last()),false);
533 double mean,sigma;
534 MeanSigma(coef,mean,sigma);
535 cout << "Mean: " << mean << " sigma " << sigma << endl;
536 calibBAOfactors_Off_Run_Ch1.Column(1).SetCst(mean);
537 }
538 if(para.debuglev_>9){
539 cout << "Fill calib. with mean value " << endl;
540 calibBAOfactors_Off_Run_Ch1.Print(cout);
541 cout << endl;
542 }
543 ifs.close();
544
545 //ON Cycle per Channel
546 calibFileName = directoryName + "/"
547 + "calib_" + dateOfRun + "_" + srcLower + "_On_"
548 + para.calibFreq_ +"MHz-Ch0Cycles.txt";
549 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
550 ifs.open(calibFileName.c_str());
551 if ( ! ifs.is_open() ) {
552
553 throw calibFileName + " cannot be opened...";
554 }
555 calibBAOfactors_On_Cycle_Ch0.ReadASCII(ifs,nr,nc);
556 if(para.debuglev_>9){
557 cout << "(nr,nc): "<< nr << "," << nc << endl;
558 calibBAOfactors_On_Cycle_Ch0.Print(cout);
559 cout << endl;
560 }
561
562 TMatrix<r_4> calibBAOfactors_On_Run_Ch0(nr,nc);
563 calibBAOfactors_On_Run_Ch0.Column(0) = calibBAOfactors_On_Cycle_Ch0.Column(0);
564 {//Compute the mean
565 TVector<r_4> coef(calibBAOfactors_On_Cycle_Ch0(Range::all(),Range::last()),false);
566 double mean,sigma;
567 MeanSigma(coef,mean,sigma);
568 cout << "Mean: " << mean << " sigma " << sigma << endl;
569 calibBAOfactors_On_Run_Ch0.Column(1).SetCst(mean);
570 }
571 if(para.debuglev_>9){
572 cout << "Fill calib. with mean value " << endl;
573 calibBAOfactors_On_Run_Ch0.Print(cout);
574 cout << endl;
575 }
576 ifs.close();
577
578
579 calibFileName = directoryName + "/"
580 + "calib_" + dateOfRun + "_" + srcLower + "_On_"
581 + para.calibFreq_ +"MHz-Ch1Cycles.txt";
582 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
583 ifs.open(calibFileName.c_str());
584 if ( ! ifs.is_open() ) {
585 throw calibFileName + " cannot be opened...";
586 }
587 calibBAOfactors_On_Cycle_Ch1.ReadASCII(ifs,nr,nc);
588 if(para.debuglev_>9){
589 cout << "(nr,nc): "<< nr << "," << nc << endl;
590 calibBAOfactors_On_Cycle_Ch1.Print(cout);
591 cout << endl;
592 }
593 TMatrix<r_4> calibBAOfactors_On_Run_Ch1(nr,nc);
594 calibBAOfactors_On_Run_Ch1.Column(0) = calibBAOfactors_On_Cycle_Ch1.Column(0);
595 {//Compute the mean
596 TVector<r_4> coef(calibBAOfactors_On_Cycle_Ch1(Range::all(),Range::last()),false);
597 double mean,sigma;
598 MeanSigma(coef,mean,sigma);
599 cout << "Mean: " << mean << " sigma " << sigma << endl;
600 calibBAOfactors_On_Run_Ch1.Column(1).SetCst(mean);
601 }
602 if(para.debuglev_>9){
603 cout << "Fill calib. with mean value " << endl;
604 calibBAOfactors_On_Run_Ch1.Print(cout);
605 cout << endl;
606 }
607
608 ifs.close();
609
610 //link <cycle> - <calibration coefficient>
611 //We cannot rely on identical cycle list of the OFF and ON calibration
612 map<int,r_4> calibBAO_Off_Run_Ch0;
613 map<int,r_4> calibBAO_Off_Run_Ch1;
614 map<int,r_4> calibBAO_On_Run_Ch0;
615 map<int,r_4> calibBAO_On_Run_Ch1;
616
617 map<int,r_4> calibBAO_Off_Cycle_Ch0;
618 map<int,r_4> calibBAO_Off_Cycle_Ch1;
619 map<int,r_4> calibBAO_On_Cycle_Ch0;
620 map<int,r_4> calibBAO_On_Cycle_Ch1;
621
622 //per Run based BAO coefficients
623 nr = calibBAOfactors_Off_Run_Ch0.NRows();
624 for (sa_size_t ir=0; ir<nr; ++ir){
625 calibBAO_Off_Run_Ch0[(int)calibBAOfactors_Off_Run_Ch0(ir,0)]
626 = calibBAOfactors_Off_Run_Ch0(ir,1);
627 calibBAO_Off_Cycle_Ch0[(int)calibBAOfactors_Off_Cycle_Ch0(ir,0)]
628 = calibBAOfactors_Off_Cycle_Ch0(ir,1);
629 calibBAO_Off_Run_Ch1[(int)calibBAOfactors_Off_Run_Ch1(ir,0)]
630 = calibBAOfactors_Off_Run_Ch1(ir,1);
631 calibBAO_Off_Cycle_Ch1[(int)calibBAOfactors_Off_Cycle_Ch1(ir,0)]
632 = calibBAOfactors_Off_Cycle_Ch1(ir,1);
633 }
634
635 nr = calibBAOfactors_On_Run_Ch0.NRows();
636 for (sa_size_t ir=0; ir<nr; ++ir){
637 calibBAO_On_Run_Ch0[(int)calibBAOfactors_On_Run_Ch0(ir,0)]
638 = calibBAOfactors_On_Run_Ch0(ir,1);
639 calibBAO_On_Cycle_Ch0[(int)calibBAOfactors_On_Cycle_Ch0(ir,0)]
640 = calibBAOfactors_On_Cycle_Ch0(ir,1);
641 calibBAO_On_Run_Ch1[(int)calibBAOfactors_On_Run_Ch1(ir,0)]
642 = calibBAOfactors_On_Run_Ch1(ir,1);
643 calibBAO_On_Cycle_Ch1[(int)calibBAOfactors_On_Cycle_Ch1(ir,0)]
644 = calibBAOfactors_On_Cycle_Ch1(ir,1);
645 }
646
647
648
649// for (sa_size_t iCh=0;iCh<NUMBER_OF_CHANNELS;++iCh){
650// meanOfSpectra(Range(iCh), Range::all()) /=calibBAOfactors(iCh);
651// }
652
653 //Loop on cyles
654 for (list<int>::iterator ic=commonCycles.begin(); ic!=commonCycles.end(); ++ic){
655
656 if(para.debuglev_>9){
657 cout << "Calibration coefficients for cycle "<<*ic << endl;
658 cout << "Off Run Ch0 " << calibBAO_Off_Run_Ch0[*ic] << " "
659 << "Ch1 " << calibBAO_Off_Run_Ch1[*ic] << "\n"
660 << "On Run Ch0 " << calibBAO_On_Run_Ch0[*ic] << " "
661 << "Ch1 " << calibBAO_On_Run_Ch1[*ic] << "\n"
662 << "Off Cycle Ch0 " << calibBAO_Off_Cycle_Ch0[*ic] << " "
663 << "Ch1 " << calibBAO_Off_Cycle_Ch1[*ic] << "\n"
664 << "On Cycle Ch0 " << calibBAO_On_Cycle_Ch0[*ic] << " "
665 << "Ch1 " << calibBAO_On_Cycle_Ch1[*ic] << endl;
666 }
667
668 string ppftag;
669 //load ON phase
670 stringstream cycle;
671 cycle << *ic;
672
673 ppftag = "specRawOn"+cycle.str();
674 TMatrix<r_4> aSpecOn(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
675 fin.GetObject(aSpecOn,ppftag);
676
677 TMatrix<r_4> aSpecOn_BAOCalibRun(aSpecOn,false);
678 aSpecOn_BAOCalibRun(Range(0),Range::all()) /= calibBAO_On_Run_Ch0[*ic];
679 aSpecOn_BAOCalibRun(Range(1),Range::all()) /= calibBAO_On_Run_Ch1[*ic];
680
681 TMatrix<r_4> aSpecOn_BAOCalibCycle(aSpecOn,false);
682 aSpecOn_BAOCalibCycle(Range(0),Range::all()) /= calibBAO_On_Cycle_Ch0[*ic];
683 aSpecOn_BAOCalibCycle(Range(1),Range::all()) /= calibBAO_On_Cycle_Ch1[*ic];
684
685 ppftag = "specRawOff"+cycle.str();
686 TMatrix<r_4> aSpecOff(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
687 fin.GetObject(aSpecOff,ppftag);
688
689 TMatrix<r_4> aSpecOff_BAOCalibRun(aSpecOff,false);
690 aSpecOff_BAOCalibRun(Range(0),Range::all()) /= calibBAO_Off_Run_Ch0[*ic];
691 aSpecOff_BAOCalibRun(Range(1),Range::all()) /= calibBAO_Off_Run_Ch1[*ic];
692
693 TMatrix<r_4> aSpecOff_BAOCalibCycle(aSpecOff,false);
694 aSpecOff_BAOCalibCycle(Range(0),Range::all()) /= calibBAO_Off_Cycle_Ch0[*ic];
695 aSpecOff_BAOCalibCycle(Range(1),Range::all()) /= calibBAO_Off_Cycle_Ch1[*ic];
696
697
698 //Perform the difference ON-OFF with the different calibration options
699 TMatrix<r_4> diffOnOff_noCalib = aSpecOn - aSpecOff;
700 meanDiffONOFF_noCalib += diffOnOff_noCalib;
701
702 TMatrix<r_4> diffOnOff_perRunCalib = aSpecOn_BAOCalibRun - aSpecOff_BAOCalibRun;
703 meanDiffONOFF_perRunCalib += diffOnOff_perRunCalib;
704
705 TMatrix<r_4> diffOnOff_perCycleCalib = aSpecOn_BAOCalibCycle - aSpecOff_BAOCalibCycle;
706 meanDiffONOFF_perCycleCalib += diffOnOff_perCycleCalib;
707
708 //Fill NTuple
709 xnt[0] = *ic;
710
711 TVector<r_4> meanInRange_noCalib(NUMBER_OF_CHANNELS);
712 meanInRange(diffOnOff_noCalib,chLow,chHigh,meanInRange_noCalib);
713 xnt[1] = meanInRange_noCalib(0);
714 xnt[2] = meanInRange_noCalib(1);
715
716 TVector<r_4> meanInRange_perRunCalib(NUMBER_OF_CHANNELS);
717 meanInRange(diffOnOff_perRunCalib,chLow,chHigh,meanInRange_perRunCalib);
718 xnt[3] = meanInRange_perRunCalib(0);
719 xnt[4] = meanInRange_perRunCalib(1);
720
721 TVector<r_4> meanInRange_perCycleCalib(NUMBER_OF_CHANNELS);
722 meanInRange(diffOnOff_perCycleCalib,chLow,chHigh,meanInRange_perCycleCalib);
723 xnt[3] = meanInRange_perCycleCalib(0);
724 xnt[4] = meanInRange_perCycleCalib(1);
725
726 onoffevolution.Fill(xnt);
727
728 totalNumberCycles++;
729 if (totalNumberCycles >= para.maxNumberCycles_) break;
730
731 }//eo loop on cycles
732 if (totalNumberCycles >= para.maxNumberCycles_) break;
733
734 }//eo loop on spectra in a file
735 cout << "End of jobs: we have treated " << totalNumberCycles << " cycles" << endl;
736 //Normalisation
737 if(totalNumberCycles>0){
738 meanDiffONOFF_noCalib /= (r_4)totalNumberCycles;
739 meanDiffONOFF_perRunCalib /= (r_4)totalNumberCycles;
740 meanDiffONOFF_perCycleCalib /= (r_4)totalNumberCycles;
741 }
742
743 //Compute the reduced version of the mean and sigma
744 TMatrix<r_4> meanRedMtx_noCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
745 TMatrix<r_4> sigmaRedMtx_noCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
746 reduceSpectra(meanDiffONOFF_noCalib,meanRedMtx_noCalib,sigmaRedMtx_noCalib);
747
748 TMatrix<r_4> meanRedMtx_perRunCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
749 TMatrix<r_4> sigmaRedMtx_perRunCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
750 reduceSpectra(meanDiffONOFF_perRunCalib,meanRedMtx_perRunCalib,sigmaRedMtx_perRunCalib);
751
752 TMatrix<r_4> meanRedMtx_perCycleCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
753 TMatrix<r_4> sigmaRedMtx_perCycleCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
754 reduceSpectra(meanDiffONOFF_perCycleCalib,meanRedMtx_perCycleCalib,sigmaRedMtx_perCycleCalib);
755
756 {//save the results
757 stringstream tmp;
758 tmp << totalNumberCycles;
759 string fileName = para.outPath_+"/onoffsurvey_"+StringToLower(para.sourceName_)+"-"+tmp.str()+"Cycles.ppf";
760 POutPersist fos(fileName);
761
762 string tag = "meanNoCalib";
763 fos << PPFNameTag(tag) << meanDiffONOFF_noCalib;
764 tag = "meanPerRunCalib";
765 fos << PPFNameTag(tag) << meanDiffONOFF_perRunCalib;
766 tag = "meanPerCycleCalib";
767 fos << PPFNameTag(tag) << meanDiffONOFF_perCycleCalib;
768
769 tag = "redmeanNoCalib";
770 fos << PPFNameTag(tag) << meanRedMtx_noCalib;
771 tag = "redsigmaNoCalib";
772 fos << PPFNameTag(tag) << sigmaRedMtx_noCalib;
773
774 tag = "redmeanPerRunCalib";
775 fos << PPFNameTag(tag) << meanRedMtx_perRunCalib;
776 tag = "redsigmaPerRunCalib";
777 fos << PPFNameTag(tag) << sigmaRedMtx_perRunCalib;
778
779 tag = "redmeanPerCycleCalib";
780 fos << PPFNameTag(tag) << meanRedMtx_perCycleCalib;
781 tag = "redsigmaPerCycleCalib";
782 fos << PPFNameTag(tag) << sigmaRedMtx_perCycleCalib;
783
784 tag = "onoffevol";
785 fos << PPFNameTag(tag) << onoffevolution;
786 }//end of save
787}
788//-------------------------------------------------------
789//Compute the mean of Diff ON-OFF Raw spectra and also the mean/sigma of rebinned spectra
790//Used like:
791//
792void meanRawDiffOnOffCycles() throw(string) {
793 list<string> listOfFiles;
794 string directoryName;
795 directoryName = para.inPath_ + "/" + para.sourceName_;
796
797 //Make the listing of the directory
798 listOfFiles = ListOfFileInDir(directoryName,para.ppfFile_);
799
800 list<string>::const_iterator iFile, iFileEnd, iSpec, iSpecEnd;
801 iFileEnd = listOfFiles.end();
802
803 StringMatch match("specONOFFRaw[0-9]+"); //Tag of the PPF objects
804 TMatrix<r_4> meanOfSpectra(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
805 uint_4 nSpectra=0;
806 //Loop on files
807 for (iFile = listOfFiles.begin(); iFile != iFileEnd; ++iFile) {
808 if (para.debuglev_>90){
809 cout << "load file <" << *iFile << ">" << endl;
810 }
811 PInPersist fin(*iFile);
812 vector<string> vec = fin.GetNameTags();
813 list<string> listOfSpectra;
814 //Keep only required PPF objects
815 std::remove_copy_if(
816 vec.begin(), vec.end(), back_inserter(listOfSpectra),
817 not1(match)
818 );
819
820 listOfSpectra.sort(stringCompare);
821 iSpecEnd = listOfSpectra.end();
822 //Loop of spectra matrix
823 for (iSpec = listOfSpectra.begin(); iSpec !=iSpecEnd; ++iSpec){
824 if (para.debuglev_>90){
825 cout << " spactra <" << *iSpec << ">" << endl;
826 }
827 TMatrix<r_4> aSpec(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
828 fin.GetObject(aSpec,*iSpec);
829 //How to see if the GetObject is ok?? Ask Reza
830 nSpectra++;
831 meanOfSpectra+=aSpec;
832 }//eo loop on spectra in a file
833 }//eo loop on files
834
835 //Normalisation
836 if(nSpectra>0)meanOfSpectra/=(r_4)(nSpectra);
837
838 //Compute the reduced version of the mean and sigma
839 TMatrix<r_4> meanRedMtx(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
840 TMatrix<r_4> sigmaRedMtx(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
841 reduceSpectra(meanOfSpectra,meanRedMtx,sigmaRedMtx);
842
843 {//Save the result
844 stringstream tmp;
845 tmp << nSpectra;
846 string fileName = para.outPath_+"/meanDiffOnOffRaw_"+StringToLower(para.sourceName_)+"-"+tmp.str()+"Cycles.ppf";
847 cout << "Save mean based on " << nSpectra << " cycles " << endl;
848 POutPersist fos(fileName);
849
850 string tag = "mean";
851 fos << PPFNameTag(tag) << meanOfSpectra;
852 tag = "meanred";
853 fos << PPFNameTag(tag) << meanRedMtx;
854 tag = "sigmared";
855 fos << PPFNameTag(tag) << sigmaRedMtx;
856 }
857}
858//-------------------------------------------------------
859//Compute the median of Diff ON-OFF Raw spectra and also the mean/sigma of rebinned spectra
860//Used like:
861//
862void medianRawDiffOnOffCycles() throw(string) {
863 list<string> listOfFiles;
864 string directoryName;
865 directoryName = para.inPath_ + "/" + para.sourceName_;
866
867 //Make the listing of the directory
868 listOfFiles = ListOfFileInDir(directoryName,para.ppfFile_);
869
870 list<string>::const_iterator iFile, iFileEnd, iSpec, iSpecEnd;
871 iFileEnd = listOfFiles.end();
872
873
874 TArray<r_4> tableOfSpectra(NUMBER_OF_FREQ,NUMBER_OF_CHANNELS,para.maxNumberCycles_); //para.maxNumberCycles_ should be large enough...
875
876 StringMatch match("specONOFFRaw[0-9]+"); //Tag of the PPF objects
877 uint_4 nSpectra=0;
878 //Loop on files
879 for (iFile = listOfFiles.begin(); iFile != iFileEnd; ++iFile) {
880 if (para.debuglev_>90){
881 cout << "load file <" << *iFile << ">" << endl;
882 }
883 PInPersist fin(*iFile);
884 vector<string> vec = fin.GetNameTags();
885 list<string> listOfSpectra;
886 //Keep only required PPF objects
887 std::remove_copy_if(
888 vec.begin(), vec.end(), back_inserter(listOfSpectra),
889 not1(match)
890 );
891
892 listOfSpectra.sort(stringCompare);
893 iSpecEnd = listOfSpectra.end();
894 //Loop of spectra matrix
895 for (iSpec = listOfSpectra.begin(); iSpec !=iSpecEnd && (sa_size_t)nSpectra < para.maxNumberCycles_ ; ++iSpec){
896 if (para.debuglev_>90){
897 cout << " spactra <" << *iSpec << ">" << endl;
898 }
899 TMatrix<r_4> aSpec(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
900 fin.GetObject(aSpec,*iSpec);
901
902 tableOfSpectra(Range::all(),Range::all(),Range(nSpectra)) = aSpec;
903
904 nSpectra++;
905 }//eo loop on spectra in a file
906 }//eo loop on files
907
908
909
910 TMatrix<r_4> medianOfSpectra(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
911 //Compute the median for each freq. and Channel
912 for (sa_size_t iCh=0; iCh<NUMBER_OF_CHANNELS; iCh++){
913 for (sa_size_t freq =0; freq<NUMBER_OF_FREQ; freq++){
914 TVector<r_4> tmp0(tableOfSpectra(Range(freq),Range(iCh),Range(0,nSpectra-1)).CompactAllDimensions());
915 vector<r_4> tmp;
916 tmp0.FillTo(tmp);
917 medianOfSpectra(iCh,freq) = median(tmp.begin(),tmp.end());
918 }
919 }
920
921
922 //Compute the reduced version of the mean and sigma
923 TMatrix<r_4> meanRedMtx(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
924 TMatrix<r_4> sigmaRedMtx(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
925 reduceSpectra(medianOfSpectra,meanRedMtx,sigmaRedMtx);
926
927
928 sa_size_t f1320=freqToChan(1320.);
929 sa_size_t f1345=freqToChan(1345.);
930 sa_size_t f1355=freqToChan(1355.);
931 sa_size_t f1380=freqToChan(1380.);
932 //Compute baseline arround 1350Mhz on [1320-1345] U [1355-1380]
933 if (para.debuglev_>9){
934 cout << "Compute baseline arround 1350Mhz on [1320-1345] U [1355-1380]" << endl;
935 }
936 TVector<r_4>meanMed(NUMBER_OF_CHANNELS);
937 for (sa_size_t iCh=0; iCh<NUMBER_OF_CHANNELS; ++iCh){
938 double meanMed1;
939 double sigmaMed1;
940 TVector<r_4> band1;
941 band1 = medianOfSpectra(Range(iCh),Range(f1320,f1345)).CompactAllDimensions();
942 MeanSigma(band1,meanMed1,sigmaMed1);
943 double meanMed2;
944 double sigmaMed2;
945 TVector<r_4> band2;
946 band2 = medianOfSpectra(Range(iCh),Range(f1355,f1380)).CompactAllDimensions();
947 MeanSigma(band2,meanMed2,sigmaMed2);
948 meanMed(iCh) = (meanMed1+meanMed2)*0.5;
949 }
950 meanMed.Print(cout);
951 cout << endl;
952
953
954 //Compute the sigma in the range 1320MHz-1380MHz
955 if (para.debuglev_>9){
956 cout << "Compute the sigma in the range 1320MHz-1380MHz" << endl;
957 }
958 TVector<r_4>sigmaMed(NUMBER_OF_CHANNELS);
959 sa_size_t redf1320=(sa_size_t)((1320.0-LOWER_FREQUENCY)/TOTAL_BANDWIDTH*para.nSliceInFreq_);
960 sa_size_t redf1380=(sa_size_t)((1380.0-LOWER_FREQUENCY)/TOTAL_BANDWIDTH*para.nSliceInFreq_);
961
962 for (sa_size_t iCh=0; iCh<NUMBER_OF_CHANNELS; ++iCh){
963 double meanSigma;
964 double sigmaSigma;
965 TVector<r_4> band;
966 band = sigmaRedMtx(Range(iCh),Range(redf1320,redf1380)).CompactAllDimensions();
967 MeanSigma(band,meanSigma,sigmaSigma);
968 meanSigma *= sqrt(para.nSliceInFreq_); //to scale to orignal spectra
969 sigmaMed(iCh) = meanSigma;
970 }
971 sigmaMed.Print(cout);
972 cout << endl;
973
974
975
976 if (para.debuglev_>9){
977 cout << "Compute medianOfSpectraNorm" << endl;
978 }
979 TMatrix<r_4> medianOfSpectraNorm(medianOfSpectra,false); //do not share the data...
980 for (sa_size_t iCh=0; iCh<NUMBER_OF_CHANNELS; ++iCh){
981 medianOfSpectraNorm.Row(iCh) -= meanMed(iCh);
982 medianOfSpectraNorm.Row(iCh) /= sigmaMed(iCh);
983 }
984
985
986
987 {//Save the result
988 stringstream tmp;
989 tmp << nSpectra;
990 string fileName = para.outPath_+"/medianDiffOnOffRaw_"+StringToLower(para.sourceName_)+"-"+tmp.str()+"Cycles.ppf";
991 cout << "Save median based on " << nSpectra << " cycles " << endl;
992 POutPersist fos(fileName);
993
994 string tag = "median";
995 fos << PPFNameTag(tag) << medianOfSpectra;
996
997 tag = "medianNorm";
998 fos << PPFNameTag(tag) << medianOfSpectraNorm;
999
1000
1001 tag = "meanmedred";
1002 fos << PPFNameTag(tag) << meanRedMtx;
1003 tag = "sigmamedred";
1004 fos << PPFNameTag(tag) << sigmaRedMtx;
1005 tag = "cycleVsfreq";
1006
1007 TArray<r_4> tarr(tableOfSpectra(Range::all(),Range::all(),Range(0,nSpectra-1)));
1008 fos << PPFNameTag(tag) << tarr;
1009 }
1010}
1011
1012//-------------------------------------------------------
1013int main(int narg, char* arg[]) {
1014
1015 int rc = 0; //return code
1016 string msg; //message used in Exceptions
1017
1018
1019
1020 //default value for initial parameters (see Para structure on top of the file)
1021 string debuglev = "0";
1022 string action = "meanDiffOnOff";
1023 string inputPath = ".";
1024 string outputPath = ".";
1025 string sourceName = "Abell85";
1026 string ppfFile;
1027 string nSliceInFreq = "32";
1028 string typeOfCalib="perRun";
1029 string calibFreq = "1346";
1030 string calibBandFreq="6.25";
1031 string mxcycles;
1032
1033 // bool okarg=false;
1034 int ka=1;
1035 while (ka<narg) {
1036 if (strcmp(arg[ka],"-h")==0) {
1037 cout << "Usage: -act [meanRawDiffOnOff]|medianRawDiffOnOff|meanCalibBAODiffOnOff\n"
1038 << " -mxcycles <number> (max. number of cycles to be treated)\n"
1039 << " -calibfreq <number> (cf. freq. used by calibration operation)\n"
1040 << " -calibbandfreq <number> (cf. band of freq. used by calibration operation)\n"
1041 << " -src [Abell85]\n -inPath [.]|<top_root_dir of the ppf file>\n"
1042 << " (ex. /sps/baoradio/AmasNancay/JEC/\n "
1043 << " -outPath [.]|<dir of the output> \n"
1044 << " -nSliceInFreq [32]|<number of bin in freq. to cumulate>\n"
1045 << " -ppfFile <generic name of the input ppf files> (ex. diffOnOffRaw)\n"
1046 << " -debug <level> "
1047 << endl;
1048 return 0;
1049 }
1050 else if (strcmp(arg[ka],"-debug")==0) {
1051 debuglev=arg[ka+1];
1052 ka+=2;
1053 }
1054 else if (strcmp(arg[ka],"-act")==0) {
1055 action=arg[ka+1];
1056 ka+=2;
1057 }
1058 else if (strcmp(arg[ka],"-calibfreq")==0) {
1059 calibFreq=arg[ka+1];
1060 ka+=2;
1061 }
1062 else if (strcmp(arg[ka],"-calibbandfreq")==0) {
1063 calibBandFreq=arg[ka+1];
1064 ka+=2;
1065 }
1066 else if (strcmp(arg[ka],"-mxcycles")==0) {
1067 mxcycles=arg[ka+1];
1068 ka+=2;
1069 }
1070 else if (strcmp(arg[ka],"-inPath")==0) {
1071 inputPath=arg[ka+1];
1072 ka+=2;
1073 }
1074 else if (strcmp(arg[ka],"-outPath")==0) {
1075 outputPath=arg[ka+1];
1076 ka+=2;
1077 }
1078 else if (strcmp(arg[ka],"-src")==0) {
1079 sourceName=arg[ka+1];
1080 ka+=2;
1081 }
1082 else if (strcmp(arg[ka],"-ppfFile")==0) {
1083 ppfFile=arg[ka+1];
1084 ka+=2;
1085 }
1086 else if (strcmp(arg[ka],"-nSliceInFreq")==0) {
1087 nSliceInFreq=arg[ka+1];
1088 ka+=2;
1089 }
1090 else ka++;
1091 }//eo while
1092
1093 para.debuglev_ = atoi(debuglev.c_str());
1094 para.inPath_ = inputPath;
1095 para.outPath_ = outputPath;
1096 para.sourceName_ = sourceName;
1097 para.ppfFile_ = ppfFile;
1098 para.nSliceInFreq_ = atoi(nSliceInFreq.c_str());
1099 para.calibFreq_ = calibFreq;
1100 para.calibBandFreq_ = calibBandFreq;
1101 para.rcalibFreq_ = atof(calibFreq.c_str());
1102 para.rcalibBandFreq_ = atof(calibBandFreq.c_str());
1103 if (mxcycles != "") {
1104 para.maxNumberCycles_ = atoi(mxcycles.c_str());
1105 } else {
1106 para.maxNumberCycles_ = std::numeric_limits<int>::max();
1107 }
1108
1109 cout << "Dump Initial parameters ............" << endl;
1110 cout << " action = " << action << "\n"
1111 << " maxNumberCycles = " << para.maxNumberCycles_ << "\n"
1112 << " inputPath = " << para.inPath_ << "\n"
1113 << " outputPath = " << para.outPath_ << "\n"
1114 << " sourceName = " << para.sourceName_ << "\n"
1115 << " ppfFile = " << para.ppfFile_ << "\n"
1116 << " nSliceInFreq = " << para.nSliceInFreq_ << "\n"
1117 << " calibFreq = " << para.calibFreq_ << "\n"
1118 << " calibBandFreq = " << para.calibBandFreq_ << "\n"
1119 << " debuglev = " << para.debuglev_ << "\n";
1120 cout << "...................................." << endl;
1121
1122 if ( "" == ppfFile ) {
1123 cerr << "mergeAnaFiles.cc: you have forgotten ppfFile option"
1124 << endl;
1125 return 999;
1126 }
1127
1128
1129 try {
1130
1131// int b,e;
1132// char *match=regexp("truc0machin","[a-z]+[0-9]*",&b,&e);
1133// printf("->%s<-\n(b=%d e=%d)\n",match,b,e);
1134
1135 if ( action == "meanRawDiffOnOff" ) {
1136 meanRawDiffOnOffCycles();
1137 } else if (action == "medianRawDiffOnOff") {
1138 medianRawDiffOnOffCycles();
1139 } else if (action == "meanCalibBAODiffOnOff") {
1140 meanCalibBAODiffOnOffCycles();
1141 } else {
1142 msg = "Unknown action " + action;
1143 throw msg;
1144 }
1145
1146
1147 } catch (std::exception& sex) {
1148 cerr << "mergeRawOnOff.cc std::exception :" << (string)typeid(sex).name()
1149 << "\n msg= " << sex.what() << endl;
1150 rc = 78;
1151 }
1152 catch ( string str ) {
1153 cerr << "mergeRawOnOff.cc Exception raised: " << str << endl;
1154 }
1155 catch (...) {
1156 cerr << "mergeRawOnOff.cc catched unknown (...) exception " << endl;
1157 rc = 79;
1158 }
1159
1160 return 0;
1161
1162}
Note: See TracBrowser for help on using the repository browser.