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

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

drift scan runs (jec)

File size: 70.7 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//-----------------------------------------------
38//Usage
39//
40//./Objs/mergeAnaFiles -act meanRawDiffOnOff -inPath /sps/baoradio/AmasNancay/JEC/ -src NGC4383 -ppfFile dataRaw -debug 1000 -mxcycles 10
41//./Objs/mergeAnaFiles -src Abell85 -act meanCalibBAODiffOnOff -mxcycles 500 -calibfreq 1410 -inPath /sps/baoradio/AmasNancay/JEC/ -ppfFile dataRaw -debug 1 >& mergeAna-500.log
42//
43//
44//-----------------------------------------------
45const sa_size_t NUMBER_OF_CHANNELS = 2;
46const sa_size_t NUMBER_OF_FREQ = 8192;
47const r_4 LOWER_FREQUENCY = 1250.0; //MHz
48const r_4 TOTAL_BANDWIDTH = 250.0; //MHz
49//Input parameters
50struct Param {
51 int debuglev_; //debug
52 string inPath_; //root directory of the input files
53 string outPath_; //output files are located here
54 string sourceName_; //source name & subdirectory of the input files
55 string ppfFile_; //generic name of the input files
56 int nSliceInFreq_; //used by reduceSpectra() fnc
57 string calibFreq_; //freq. value used for calibration
58 r_4 rcalibFreq_; //float version
59 string calibBandFreq_; //band of freq. used for calibration
60 r_4 rcalibBandFreq_; //float version
61 int maxNumberCycles_;//maximum number of cycles to be treated
62} para;
63//--------------------------------------------------------------
64//Utility functions
65// template <class T>
66// void MeanSigma(TArray<T> const & a, T & mean, T & sig){
67// if (a.NbDimensions() < 1)
68// throw RangeCheckError("MathArray<T>::MeanSigma(TArray<T> const & a..) Not Allocated Array a !");
69// const T * pe;
70// sa_size_t j,k;
71// mean=0.;
72// sig = 0.;
73// T valok;
74// if (a.AvgStep() > 0) { // regularly spaced elements
75// sa_size_t step = a.AvgStep();
76// sa_size_t maxx = a.Size()*step;
77// pe = a.Data();
78// for(k=0; k<maxx; k+=step ) {
79// valok = pe[k];
80// mean += valok; sig += valok*valok;
81// }
82// }
83// else { // Non regular data spacing ...
84// int_4 ka = a.MaxSizeKA();
85// sa_size_t step = a.Step(ka);
86// sa_size_t gpas = a.Size(ka)*step;
87// sa_size_t naxa = a.Size()/a.Size(ka);
88// for(j=0; j<naxa; j++) {
89// pe = a.DataBlock().Begin()+a.Offset(ka,j);
90// for(k=0; k<gpas; k+=step) {
91// valok = pe[k];
92// mean += valok; sig += valok*valok;
93// }
94// }
95// }
96// T dsz = (T)(a.Size());
97// mean /= dsz;
98// if (dsz > 1.5) {
99// sig = sig/dsz - mean*mean;
100// sig *= (dsz/(dsz-1));
101// if (sig >= 0.) sig = sqrt(sig);
102// }
103// else sig = 0.;
104// }
105
106
107sa_size_t freqToChan(r_4 f){
108 return (sa_size_t)((f-LOWER_FREQUENCY)/TOTAL_BANDWIDTH*NUMBER_OF_FREQ);
109}
110//--------
111//COMPUTE the mean value on a freq. range for all channels
112//--------
113void meanInRange(const TMatrix<r_4> mtx,
114 sa_size_t chLow,
115 sa_size_t chHigh,
116 TVector<r_4>& vec){
117
118 sa_size_t nr = mtx.NRows();
119
120 for (sa_size_t ir=0; ir<nr; ir++){
121 TVector<r_4> tmp(mtx(Range(ir),Range(chLow,chHigh)),false);
122 r_8 mean, sigma;
123 MeanSigma(tmp,mean,sigma);
124 vec(ir) = mean;
125 }
126}
127//---------
128class median_of_empty_list_exception:public std::exception{
129 virtual const char* what() const throw() {
130 return "Attempt to take the median of an empty list of numbers. "
131 "The median of an empty list is undefined.";
132 }
133};
134template<class RandAccessIter>
135double median(RandAccessIter begin, RandAccessIter end)
136 throw(median_of_empty_list_exception){
137 if(begin == end){ throw median_of_empty_list_exception(); }
138 std::size_t size = end - begin;
139 std::size_t middleIdx = size/2;
140 RandAccessIter target = begin + middleIdx;
141 std::nth_element(begin, target, end);
142
143 if(size % 2 != 0){ //Odd number of elements
144 return *target;
145 }else{ //Even number of elements
146 double a = *target;
147 RandAccessIter targetNeighbor= target-1;
148 std::nth_element(begin, targetNeighbor, end);
149 return (a+*targetNeighbor)/2.0;
150 }
151}
152
153//-------------
154//JEC 25/10/11 Perform a median filtering with a sliding window of "halfwidth" half width
155// It takes care of the edges and is based on the median function (above)
156void medianFiltering(const TMatrix<r_4> mtx,
157 sa_size_t halfwidth,
158 TMatrix<r_4>& vec) {
159
160 sa_size_t nr = mtx.NRows();
161 sa_size_t nc = mtx.NCols();
162 sa_size_t chMin = 0;
163 sa_size_t chMax = nc-1;
164
165 for (sa_size_t ir=0; ir<nr; ir++){
166 for (sa_size_t ic=0; ic<nc; ic++) {
167 sa_size_t chLow = ic-halfwidth;
168 chLow = (chLow >= chMin) ? chLow : chMin;
169 sa_size_t chHigh = ic+halfwidth;
170 chHigh = ( chHigh <= chMax ) ? chHigh : chMax;
171 TVector<r_4> tmp(mtx(Range(ir),Range(chLow,chHigh)),false);
172 vector<r_4> val;
173 tmp.FillTo(val);
174 vec(ir,ic) = median(val.begin(),val.end());
175 }
176 }
177}
178//-------------
179void split(const string& str, const string& delimiters , vector<string>& tokens) {
180 // Skip delimiters at beginning.
181 string::size_type lastPos = str.find_first_not_of(delimiters, 0);
182 // Find first "non-delimiter".
183 string::size_type pos = str.find_first_of(delimiters, lastPos);
184
185 while (string::npos != pos || string::npos != lastPos)
186 {
187 // Found a token, add it to the vector.
188 tokens.push_back(str.substr(lastPos, pos - lastPos));
189 // Skip delimiters. Note the "not_of"
190 lastPos = str.find_first_not_of(delimiters, pos);
191 // Find next "non-delimiter"
192 pos = str.find_first_of(delimiters, lastPos);
193 }
194}
195//--------------------------------------------------------------
196char *regexp (const char *string, const char *patrn, int *begin, int *end) {
197 int i, w=0, len;
198 char *word = NULL;
199 regex_t rgT;
200 regmatch_t match;
201 regcomp(&rgT,patrn,REG_EXTENDED);
202 if ((regexec(&rgT,string,1,&match,0)) == 0) {
203 *begin = (int)match.rm_so;
204 *end = (int)match.rm_eo;
205 len = *end-*begin;
206 word=(char*)malloc(len+1);
207 for (i=*begin; i<*end; i++) {
208 word[w] = string[i];
209 w++; }
210 word[w]=0;
211 }
212 regfree(&rgT);
213 return word;
214}
215//-------
216sa_size_t round_sa(r_4 r) {
217 return static_cast<sa_size_t>((r > 0.0) ? (r + 0.5) : (r - 0.5));
218}
219//-----
220string StringToLower(string strToConvert){
221 //change each element of the string to lower case
222 for(unsigned int i=0;i<strToConvert.length();i++) {
223 strToConvert[i] = tolower(strToConvert[i]);
224 }
225 return strToConvert;//return the converted string
226}
227//-----
228bool stringCompare( const string &left, const string &right ){
229 if( left.size() < right.size() )
230 return true;
231 for( string::const_iterator lit = left.begin(), rit = right.begin(); lit != left.end() && rit != right.end(); ++lit, ++rit )
232 if( tolower( *lit ) < tolower( *rit ) )
233 return true;
234 else if( tolower( *lit ) > tolower( *rit ) )
235 return false;
236 return false;
237}
238//-----
239list<string> ListOfFileInDir(string dir, string filePettern) throw(string) {
240 list<string> theList;
241
242
243 DIR *dip;
244 struct dirent *dit;
245 string msg; string fileName;
246 string fullFileName;
247 size_t found;
248
249 if ((dip=opendir(dir.c_str())) == NULL ) {
250 msg = "opendir failed on directory "+dir;
251 throw msg;
252 }
253 while ( (dit = readdir(dip)) != NULL ) {
254 fileName = dit->d_name;
255 found=fileName.find(filePettern);
256 if (found != string::npos) {
257 fullFileName = dir + "/";
258 fullFileName += fileName;
259 theList.push_back(fullFileName);
260 }
261 }//eo while
262 if (closedir(dip) == -1) {
263 msg = "closedir failed on directory "+dir;
264 throw msg;
265 }
266
267 theList.sort(stringCompare);
268
269 return theList;
270
271}
272//
273class StringMatch : public unary_function<string,bool> {
274public:
275 StringMatch(const string& pattern): pattern_(pattern){}
276 bool operator()(const string& aStr) const {
277
278
279 int b,e;
280 regexp(aStr.c_str(),pattern_.c_str(),&b,&e);
281
282// cout << "investigate " << aStr << " to find " << pattern_
283// << "[" <<b<<","<<e<<"]"
284// << endl;
285
286
287 if (b != 0) return false;
288 if (e != (int)aStr.size()) return false;
289 return true;
290
291 }
292private:
293 string pattern_;
294};
295//-------------------------------------------------------
296//Rebin in frequence + compute mean and sigma
297void reduceSpectra(const TMatrix<r_4>& specMtxInPut,
298 TMatrix<r_4>& meanMtx,
299 TMatrix<r_4>& sigmaMtx) {
300 sa_size_t nSliceFreq = para.nSliceInFreq_;
301 sa_size_t deltaFreq = NUMBER_OF_FREQ/nSliceFreq;
302 for (sa_size_t iSlice=0; iSlice<nSliceFreq; iSlice++){
303 sa_size_t freqLow= iSlice*deltaFreq;
304 sa_size_t freqHigh= freqLow + deltaFreq -1;
305 for (sa_size_t iCh=0; iCh<NUMBER_OF_CHANNELS; ++iCh){
306 TVector<r_4> reducedRow;
307 reducedRow = specMtxInPut.SubMatrix(Range(iCh),Range(freqLow,freqHigh)).CompactAllDimensions();
308 double mean;
309 double sigma;
310 MeanSigma(reducedRow,mean,sigma);
311 meanMtx(iCh,iSlice) = mean;
312 sigmaMtx(iCh,iSlice) = sigma;
313 }//eo loop on channels
314 }//eo loop on slices
315}
316
317//AST 18/11/11
318//-------------------------------------------------------
319//Make n-tuple with calibration coefficients
320//
321void calibCoeffNtp() throw(string) {
322 list<string> listOfFiles;
323 string directoryName;
324 directoryName = para.inPath_ + "/" + para.sourceName_;
325
326 //Make the listing of the directory
327 listOfFiles = ListOfFileInDir(directoryName,para.ppfFile_);
328
329 list<string>::const_iterator iFile, iFileEnd, iSpec, iSpecEnd;
330 iFileEnd = listOfFiles.end();
331
332 static const int NINFO=19;
333 char* calibTupleName[NINFO]={"date","run","cycle"
334 ,"meancoeffoff0","meancoeffoff1"
335 ,"meancoeffon0","meancoeffon1"
336 ,"coeffoff0","coeffoff1"
337 ,"coeffon0","coeffon1"
338 ,"invmeancoeffoff0","invmeancoeffoff1"
339 ,"invmeancoeffon0","invmeancoeffon1"
340 ,"invcoeffoff0","invcoeffoff1"
341 ,"invcoeffon0","invcoeffon1"
342 };
343 NTuple calibcoeffs(NINFO,calibTupleName);
344 r_4 xnt[NINFO];
345
346 int totalNumberRuns=0; //total number of runs
347 int totalNumberCycles=0; //total number of cycles for normalisation
348 for (iFile = listOfFiles.begin(); iFile != iFileEnd; ++iFile) {
349 if (para.debuglev_>90){
350 cout << "load file <" << *iFile << ">" << endl;
351 }
352
353 vector<string> tokens;
354 split(*iFile,"_",tokens);
355 string dateOfRun = tokens[1];
356 r_4 rdateOfRun = atoi(dateOfRun.c_str()) - 2011*1.e4;
357
358 if (para.debuglev_>90){
359 cout << "date <" << dateOfRun << ">" << endl;
360 cout << "rdate <" << rdateOfRun << ">" << endl;
361 }
362 vector<string> tokens2;
363 split(tokens[2],".",tokens2);
364 string srcLower = tokens2[0];
365
366 PInPersist fin(*iFile);
367 vector<string> vec = fin.GetNameTags();
368
369 vector<string> modeList;
370 modeList.push_back("On");
371 modeList.push_back("Off");
372 vector<string>::const_iterator iMode;
373
374 map<string, list<int> > cycleModeCollect;
375
376 for (iMode = modeList.begin(); iMode!=modeList.end(); ++iMode) {
377 list<string> listOfSpectra;
378 //Keep only required PPF objects
379 string matchstr = "specRaw"+(*iMode)+"[0-9]+";
380 std::remove_copy_if(
381 vec.begin(), vec.end(), back_inserter(listOfSpectra),
382 not1(StringMatch(matchstr))
383 );
384
385 listOfSpectra.sort(stringCompare);
386 iSpecEnd = listOfSpectra.end();
387
388 matchstr = "[0-9]+";
389 //Loop of spectra matrix
390 list<int> listOfCycles;
391 for (iSpec = listOfSpectra.begin(); iSpec!=iSpecEnd; ++iSpec){
392 int b,e;
393 regexp(iSpec->c_str(),matchstr.c_str(),&b,&e);
394 if (para.debuglev_>90){
395 cout << " spectra <" << *iSpec << ">" << endl;
396 cout << " cycle " << iSpec->substr(b) << endl;
397 }
398 listOfCycles.push_back(atoi((iSpec->substr(b)).c_str()));
399 }//end loop spectra
400 cycleModeCollect[*iMode] = listOfCycles;
401 }//end of mode
402
403 //Take the Intersection of the list Of cycles in mode Off and On
404 list<int> commonCycles;
405 set_intersection(cycleModeCollect["On"].begin(),
406 cycleModeCollect["On"].end(),
407 cycleModeCollect["Off"].begin(),
408 cycleModeCollect["Off"].end(),
409 back_inserter(commonCycles)
410 );
411
412 if (para.debuglev_>90){
413 cout << "Liste of cycles common to On & Off: <";
414 for (list<int>::iterator i=commonCycles.begin(); i!=commonCycles.end(); ++i){
415 cout << *i << " ";
416 }
417 cout << ">" << endl;
418 }
419
420 //
421 //Load BAO Calibration factors "per Cycle and Channels"
422 //Compute the mean per Cycle to
423 // fill factors "per Run and Channels" with the same cycle list
424 //
425 //
426 //TODO improve the code....
427
428 TMatrix<r_4> calibBAOfactors_Off_Cycle_Ch0;
429 TMatrix<r_4> calibBAOfactors_Off_Cycle_Ch1;
430 TMatrix<r_4> calibBAOfactors_On_Cycle_Ch0;
431 TMatrix<r_4> calibBAOfactors_On_Cycle_Ch1;
432
433 string calibFileName;
434 ifstream ifs;
435 sa_size_t nr,nc; //values read
436
437 //OFF Cycle per Channel
438 calibFileName = directoryName + "/"
439 + "calib_" + dateOfRun + "_" + srcLower + "_Off_"
440 + para.calibFreq_ +"MHz-Ch0Cycles.txt";
441 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
442 ifs.open(calibFileName.c_str());
443 if ( ! ifs.is_open() ) {
444 throw calibFileName + " cannot be opened...";
445 }
446 calibBAOfactors_Off_Cycle_Ch0.ReadASCII(ifs,nr,nc);
447 if(para.debuglev_>9){
448 cout << "(nr,nc): "<< nr << "," << nc << endl;
449 calibBAOfactors_Off_Cycle_Ch0.Print(cout);
450 cout << endl;
451 }
452
453 TMatrix<r_4> calibBAOfactors_Off_Run_Ch0(nr,nc);
454 calibBAOfactors_Off_Run_Ch0.Column(0) = calibBAOfactors_Off_Cycle_Ch0.Column(0);
455 {//Compute the mean
456 TVector<r_4> coef(calibBAOfactors_Off_Cycle_Ch0(Range::all(),Range::last()),false);
457 double mean,sigma;
458 MeanSigma(coef,mean,sigma);
459 calibBAOfactors_Off_Run_Ch0.Column(1).SetCst(mean);
460 }
461 if(para.debuglev_>9){
462 cout << "Fill calib. with mean value " << endl;
463 calibBAOfactors_Off_Run_Ch0.Print(cout);
464 cout << endl;
465 }
466
467 TMatrix<r_4> invcalibBAOfactors_Off_Cycle_Ch0(nr,nc);
468 invcalibBAOfactors_Off_Cycle_Ch0.Column(0) = calibBAOfactors_Off_Cycle_Ch0.Column(0);
469 {//Compute the inverse value
470 TVector<r_4> coef(calibBAOfactors_Off_Cycle_Ch0(Range::all(),Range::last()),false);
471 invcalibBAOfactors_Off_Cycle_Ch0.Column(1).SetCst(1);
472 invcalibBAOfactors_Off_Cycle_Ch0.Column(1).Div(coef);
473 if(para.debuglev_>9){
474 cout << "Fill calib. with inverse value " << endl;
475 invcalibBAOfactors_Off_Cycle_Ch0.Print(cout);
476 cout << endl;
477 }
478 }
479 TMatrix<r_4> invcalibBAOfactors_Off_Run_Ch0(nr,nc);
480 invcalibBAOfactors_Off_Run_Ch0.Column(0) = calibBAOfactors_Off_Cycle_Ch0.Column(0);
481 {//Compute the inverse mean
482 TVector<r_4> coef(invcalibBAOfactors_Off_Cycle_Ch0(Range::all(),Range::last()),false);
483 double mean,sigma;
484 MeanSigma(coef,mean,sigma);
485 invcalibBAOfactors_Off_Run_Ch0.Column(1).SetCst(mean);
486 }
487 if(para.debuglev_>9){
488 cout << "Fill calib. with inverse mean value " << endl;
489 invcalibBAOfactors_Off_Run_Ch0.Print(cout);
490 cout << endl;
491 }
492 ifs.close();
493 //
494 calibFileName = directoryName + "/"
495 + "calib_" + dateOfRun + "_" + srcLower + "_Off_"
496 + para.calibFreq_ +"MHz-Ch1Cycles.txt";
497 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
498 ifs.open(calibFileName.c_str());
499 if ( ! ifs.is_open() ) {
500
501 throw calibFileName + " cannot be opened...";
502 }
503 calibBAOfactors_Off_Cycle_Ch1.ReadASCII(ifs,nr,nc);
504 if(para.debuglev_>9){
505 cout << "(nr,nc): "<< nr << "," << nc << endl;
506 calibBAOfactors_Off_Cycle_Ch1.Print(cout);
507 cout << endl;
508 }
509 TMatrix<r_4> calibBAOfactors_Off_Run_Ch1(nr,nc);
510 calibBAOfactors_Off_Run_Ch1.Column(0) = calibBAOfactors_Off_Cycle_Ch1.Column(0);
511 {//Compute the mean
512 TVector<r_4> coef(calibBAOfactors_Off_Cycle_Ch1(Range::all(),Range::last()),false);
513 double mean,sigma;
514 MeanSigma(coef,mean,sigma);
515 // cout << "Mean: " << mean << " sigma " << sigma << endl;
516 calibBAOfactors_Off_Run_Ch1.Column(1).SetCst(mean);
517 }
518 if(para.debuglev_>9){
519 cout << "Fill calib. with mean value " << endl;
520 calibBAOfactors_Off_Run_Ch1.Print(cout);
521 cout << endl;
522 }
523 TMatrix<r_4> invcalibBAOfactors_Off_Cycle_Ch1(nr,nc);
524 invcalibBAOfactors_Off_Cycle_Ch1.Column(0) = calibBAOfactors_Off_Cycle_Ch1.Column(0);
525 {//Compute the inverse value
526 TVector<r_4> coef(calibBAOfactors_Off_Cycle_Ch1(Range::all(),Range::last()),false);
527 invcalibBAOfactors_Off_Cycle_Ch1.Column(1).SetCst(1);
528 invcalibBAOfactors_Off_Cycle_Ch1.Column(1).Div(coef);
529 if(para.debuglev_>9){
530 cout << "Fill calib. with inverse value " << endl;
531 invcalibBAOfactors_Off_Cycle_Ch1.Print(cout);
532 cout << endl;
533 }
534 }
535 TMatrix<r_4> invcalibBAOfactors_Off_Run_Ch1(nr,nc);
536 invcalibBAOfactors_Off_Run_Ch1.Column(0) = calibBAOfactors_Off_Cycle_Ch1.Column(0);
537 {//Compute the inverse mean
538 TVector<r_4> coef(invcalibBAOfactors_Off_Cycle_Ch1(Range::all(),Range::last()),false);
539 double mean,sigma;
540 MeanSigma(coef,mean,sigma);
541 invcalibBAOfactors_Off_Run_Ch1.Column(1).SetCst(mean);
542 }
543 if(para.debuglev_>9){
544 cout << "Fill calib. with inverse mean value " << endl;
545 invcalibBAOfactors_Off_Run_Ch1.Print(cout);
546 cout << endl;
547 }
548 ifs.close();
549
550 //ON Cycle per Channel
551 calibFileName = directoryName + "/"
552 + "calib_" + dateOfRun + "_" + srcLower + "_On_"
553 + para.calibFreq_ +"MHz-Ch0Cycles.txt";
554 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
555 ifs.open(calibFileName.c_str());
556 if ( ! ifs.is_open() ) {
557
558 throw calibFileName + " cannot be opened...";
559 }
560 calibBAOfactors_On_Cycle_Ch0.ReadASCII(ifs,nr,nc);
561 if(para.debuglev_>9){
562 cout << "(nr,nc): "<< nr << "," << nc << endl;
563 calibBAOfactors_On_Cycle_Ch0.Print(cout);
564 cout << endl;
565 }
566
567 TMatrix<r_4> calibBAOfactors_On_Run_Ch0(nr,nc);
568 calibBAOfactors_On_Run_Ch0.Column(0) = calibBAOfactors_On_Cycle_Ch0.Column(0);
569 {//Compute the mean
570 TVector<r_4> coef(calibBAOfactors_On_Cycle_Ch0(Range::all(),Range::last()),false);
571 double mean,sigma;
572 MeanSigma(coef,mean,sigma);
573 // cout << "Mean: " << mean << " sigma " << sigma << endl;
574 calibBAOfactors_On_Run_Ch0.Column(1).SetCst(mean);
575 }
576 if(para.debuglev_>9){
577 cout << "Fill calib. with mean value " << endl;
578 calibBAOfactors_On_Run_Ch0.Print(cout);
579 cout << endl;
580 }
581
582 TMatrix<r_4> invcalibBAOfactors_On_Cycle_Ch0(nr,nc);
583 invcalibBAOfactors_On_Cycle_Ch0.Column(0) = calibBAOfactors_On_Cycle_Ch0.Column(0);
584 {//Compute the inverse value
585 TVector<r_4> coef(calibBAOfactors_On_Cycle_Ch0(Range::all(),Range::last()),false);
586 invcalibBAOfactors_On_Cycle_Ch0.Column(1).SetCst(1);
587 invcalibBAOfactors_On_Cycle_Ch0.Column(1).Div(coef);
588 if(para.debuglev_>9){
589 cout << "Fill calib. with inverse value " << endl;
590 invcalibBAOfactors_On_Cycle_Ch0.Print(cout);
591 cout << endl;
592 }
593 }
594 TMatrix<r_4> invcalibBAOfactors_On_Run_Ch0(nr,nc);
595 invcalibBAOfactors_On_Run_Ch0.Column(0) = calibBAOfactors_On_Cycle_Ch0.Column(0);
596 {//Compute the inverse mean
597 TVector<r_4> coef(invcalibBAOfactors_On_Cycle_Ch0(Range::all(),Range::last()),false);
598 double mean,sigma;
599 MeanSigma(coef,mean,sigma);
600 invcalibBAOfactors_On_Run_Ch0.Column(1).SetCst(mean);
601 }
602 if(para.debuglev_>9){
603 cout << "Fill calib. with inverse mean value " << endl;
604 invcalibBAOfactors_On_Run_Ch0.Print(cout);
605 cout << endl;
606 }
607 ifs.close();
608
609 calibFileName = directoryName + "/"
610 + "calib_" + dateOfRun + "_" + srcLower + "_On_"
611 + para.calibFreq_ +"MHz-Ch1Cycles.txt";
612 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
613 ifs.open(calibFileName.c_str());
614 if ( ! ifs.is_open() ) {
615 throw calibFileName + " cannot be opened...";
616 }
617 calibBAOfactors_On_Cycle_Ch1.ReadASCII(ifs,nr,nc);
618 if(para.debuglev_>9){
619 cout << "(nr,nc): "<< nr << "," << nc << endl;
620 calibBAOfactors_On_Cycle_Ch1.Print(cout);
621 cout << endl;
622 }
623 TMatrix<r_4> calibBAOfactors_On_Run_Ch1(nr,nc);
624 calibBAOfactors_On_Run_Ch1.Column(0) = calibBAOfactors_On_Cycle_Ch1.Column(0);
625 {//Compute the mean
626 TVector<r_4> coef(calibBAOfactors_On_Cycle_Ch1(Range::all(),Range::last()),false);
627 double mean,sigma;
628 MeanSigma(coef,mean,sigma);
629 // cout << "Mean: " << mean << " sigma " << sigma << endl;
630 calibBAOfactors_On_Run_Ch1.Column(1).SetCst(mean);
631 }
632 if(para.debuglev_>9){
633 cout << "Fill calib. with mean value " << endl;
634 calibBAOfactors_On_Run_Ch1.Print(cout);
635 cout << endl;
636 }
637
638 TMatrix<r_4> invcalibBAOfactors_On_Cycle_Ch1(nr,nc);
639 invcalibBAOfactors_On_Cycle_Ch1.Column(0) = calibBAOfactors_On_Cycle_Ch1.Column(0);
640 {//Compute the inverse value
641 TVector<r_4> coef(calibBAOfactors_On_Cycle_Ch1(Range::all(),Range::last()),false);
642 invcalibBAOfactors_On_Cycle_Ch1.Column(1).SetCst(1);
643 invcalibBAOfactors_On_Cycle_Ch1.Column(1).Div(coef);
644 if(para.debuglev_>9){
645 cout << "Fill calib. with inverse value " << endl;
646 invcalibBAOfactors_On_Cycle_Ch1.Print(cout);
647 cout << endl;
648 }
649 }
650 TMatrix<r_4> invcalibBAOfactors_On_Run_Ch1(nr,nc);
651 invcalibBAOfactors_On_Run_Ch1.Column(0) = calibBAOfactors_On_Cycle_Ch1.Column(0);
652 {//Compute the inverse mean
653 TVector<r_4> coef(invcalibBAOfactors_On_Cycle_Ch1(Range::all(),Range::last()),false);
654 double mean,sigma;
655 MeanSigma(coef,mean,sigma);
656 invcalibBAOfactors_On_Run_Ch1.Column(1).SetCst(mean);
657 }
658 if(para.debuglev_>9){
659 cout << "Fill calib. with inverse mean value " << endl;
660 invcalibBAOfactors_On_Run_Ch1.Print(cout);
661 cout << endl;
662 }
663 ifs.close();
664 //link <cycle> - <calibration coefficient>
665 //We cannot rely on identical cycle list of the OFF and ON calibration
666 map<int,r_4> calibBAO_Off_Run_Ch0;
667 map<int,r_4> calibBAO_Off_Run_Ch1;
668 map<int,r_4> calibBAO_On_Run_Ch0;
669 map<int,r_4> calibBAO_On_Run_Ch1;
670
671 map<int,r_4> calibBAO_Off_Cycle_Ch0;
672 map<int,r_4> calibBAO_Off_Cycle_Ch1;
673 map<int,r_4> calibBAO_On_Cycle_Ch0;
674 map<int,r_4> calibBAO_On_Cycle_Ch1;
675
676 map<int,r_4> invcalibBAO_Off_Run_Ch0;
677 map<int,r_4> invcalibBAO_Off_Run_Ch1;
678 map<int,r_4> invcalibBAO_On_Run_Ch0;
679 map<int,r_4> invcalibBAO_On_Run_Ch1;
680
681 map<int,r_4> invcalibBAO_Off_Cycle_Ch0;
682 map<int,r_4> invcalibBAO_Off_Cycle_Ch1;
683 map<int,r_4> invcalibBAO_On_Cycle_Ch0;
684 map<int,r_4> invcalibBAO_On_Cycle_Ch1;
685
686 //per Run based BAO coefficients
687 nr = calibBAOfactors_Off_Run_Ch0.NRows();
688 for (sa_size_t ir=0; ir<nr; ++ir){
689// cout << "Calib. Off Run Ch0 cycle ["<< calibBAOfactors_Off_Run_Ch0(ir,0)<<"], val "
690// << calibBAOfactors_Off_Run_Ch0(ir,1) << endl;
691
692 calibBAO_Off_Run_Ch0[(int)calibBAOfactors_Off_Run_Ch0(ir,0)]
693 = calibBAOfactors_Off_Run_Ch0(ir,1);
694 calibBAO_Off_Cycle_Ch0[(int)calibBAOfactors_Off_Cycle_Ch0(ir,0)]
695 = calibBAOfactors_Off_Cycle_Ch0(ir,1);
696 calibBAO_Off_Run_Ch1[(int)calibBAOfactors_Off_Run_Ch1(ir,0)]
697 = calibBAOfactors_Off_Run_Ch1(ir,1);
698 calibBAO_Off_Cycle_Ch1[(int)calibBAOfactors_Off_Cycle_Ch1(ir,0)]
699 = calibBAOfactors_Off_Cycle_Ch1(ir,1);
700
701 invcalibBAO_Off_Run_Ch0[(int)invcalibBAOfactors_Off_Run_Ch0(ir,0)]
702 = invcalibBAOfactors_Off_Run_Ch0(ir,1);
703 invcalibBAO_Off_Cycle_Ch0[(int)invcalibBAOfactors_Off_Cycle_Ch0(ir,0)]
704 = invcalibBAOfactors_Off_Cycle_Ch0(ir,1);
705 invcalibBAO_Off_Run_Ch1[(int)invcalibBAOfactors_Off_Run_Ch1(ir,0)]
706 = invcalibBAOfactors_Off_Run_Ch1(ir,1);
707 invcalibBAO_Off_Cycle_Ch1[(int)invcalibBAOfactors_Off_Cycle_Ch1(ir,0)]
708 = invcalibBAOfactors_Off_Cycle_Ch1(ir,1);
709 }//eo loop on coef Off
710
711 nr = calibBAOfactors_On_Run_Ch0.NRows();
712 for (sa_size_t ir=0; ir<nr; ++ir){
713 calibBAO_On_Run_Ch0[(int)calibBAOfactors_On_Run_Ch0(ir,0)]
714 = calibBAOfactors_On_Run_Ch0(ir,1);
715 calibBAO_On_Cycle_Ch0[(int)calibBAOfactors_On_Cycle_Ch0(ir,0)]
716 = calibBAOfactors_On_Cycle_Ch0(ir,1);
717 calibBAO_On_Run_Ch1[(int)calibBAOfactors_On_Run_Ch1(ir,0)]
718 = calibBAOfactors_On_Run_Ch1(ir,1);
719 calibBAO_On_Cycle_Ch1[(int)calibBAOfactors_On_Cycle_Ch1(ir,0)]
720 = calibBAOfactors_On_Cycle_Ch1(ir,1);
721
722 invcalibBAO_On_Run_Ch0[(int)invcalibBAOfactors_On_Run_Ch0(ir,0)]
723 = invcalibBAOfactors_On_Run_Ch0(ir,1);
724 invcalibBAO_On_Cycle_Ch0[(int)invcalibBAOfactors_On_Cycle_Ch0(ir,0)]
725 = invcalibBAOfactors_On_Cycle_Ch0(ir,1);
726 invcalibBAO_On_Run_Ch1[(int)invcalibBAOfactors_On_Run_Ch1(ir,0)]
727 = invcalibBAOfactors_On_Run_Ch1(ir,1);
728 invcalibBAO_On_Cycle_Ch1[(int)invcalibBAOfactors_On_Cycle_Ch1(ir,0)]
729 = invcalibBAOfactors_On_Cycle_Ch1(ir,1);
730 }//eo loop on coef On
731
732 //Loop on cyles
733 for (list<int>::iterator ic=commonCycles.begin(); ic!=commonCycles.end(); ++ic){
734
735 //Look if the cycle has been calibrated...
736 bool isCycleCalibrated =
737 ( calibBAO_On_Run_Ch0.count(*ic) *
738 calibBAO_On_Run_Ch1.count(*ic) *
739 calibBAO_Off_Run_Ch0.count(*ic) *
740 calibBAO_Off_Run_Ch1.count(*ic) *
741 calibBAO_On_Cycle_Ch0.count(*ic) *
742 calibBAO_On_Cycle_Ch1.count(*ic) *
743 calibBAO_Off_Cycle_Ch0.count(*ic) *
744 calibBAO_Off_Cycle_Ch1.count(*ic) ) != 0 ? true : false;
745
746 if(para.debuglev_>9) {
747 cout << "Calibration coefficients for cycle "<<*ic << endl;
748 if (isCycleCalibrated) {
749 cout << "Cycle calibrated " << endl;
750 cout << "Off Run Ch0 " << calibBAO_Off_Run_Ch0[*ic] << " "
751 << "Ch1 " << calibBAO_Off_Run_Ch1[*ic] << "\n"
752 << "On Run Ch0 " << calibBAO_On_Run_Ch0[*ic] << " "
753 << "Ch1 " << calibBAO_On_Run_Ch1[*ic] << "\n"
754 << "Off Cycle Ch0 " << calibBAO_Off_Cycle_Ch0[*ic] << " "
755 << "Ch1 " << calibBAO_Off_Cycle_Ch1[*ic] << "\n"
756 << "On Cycle Ch0 " << calibBAO_On_Cycle_Ch0[*ic] << " "
757 << "Ch1 " << calibBAO_On_Cycle_Ch1[*ic] << endl;
758 } else {
759 cout << "Cycle NOT calibrated " << endl;
760 }
761 }//debug
762
763 if ( ! isCycleCalibrated ) continue;
764
765 totalNumberCycles++;
766 //Fill NTuple
767 xnt[0] = rdateOfRun;
768 xnt[1] = totalNumberRuns;
769 xnt[2] = totalNumberCycles;
770 xnt[3] = calibBAO_Off_Run_Ch0[*ic];
771 xnt[4] = calibBAO_Off_Run_Ch1[*ic];
772 xnt[5] = calibBAO_On_Run_Ch0[*ic];
773 xnt[6] = calibBAO_On_Run_Ch1[*ic];
774 xnt[7] = calibBAO_Off_Cycle_Ch0[*ic];
775 xnt[8] = calibBAO_Off_Cycle_Ch1[*ic];
776 xnt[9] = calibBAO_On_Cycle_Ch0[*ic];
777 xnt[10] = calibBAO_On_Cycle_Ch1[*ic];
778 xnt[11] = invcalibBAO_Off_Run_Ch0[*ic];
779 xnt[12] = invcalibBAO_Off_Run_Ch1[*ic];
780 xnt[13] = invcalibBAO_On_Run_Ch0[*ic];
781 xnt[14] = invcalibBAO_On_Run_Ch1[*ic];
782 xnt[15] = invcalibBAO_Off_Cycle_Ch0[*ic];
783 xnt[16] = invcalibBAO_Off_Cycle_Ch1[*ic];
784 xnt[17] = invcalibBAO_On_Cycle_Ch0[*ic];
785 xnt[18] = invcalibBAO_On_Cycle_Ch1[*ic];
786
787 calibcoeffs.Fill(xnt);
788
789 //Quit if enough
790 if (totalNumberCycles >= para.maxNumberCycles_) break;
791
792 }//eo loop on cycles
793 if (totalNumberCycles >= para.maxNumberCycles_) break;
794 totalNumberRuns++;
795 }//eo loop on spectra in a file
796 cout << "End of jobs: we have treated " << totalNumberCycles << " cycles" << endl;
797
798 {//save the results
799 stringstream tmp;
800 tmp << totalNumberCycles;
801 string fileName = para.outPath_+"/calibcoeffTuple_"+StringToLower(para.sourceName_)+"-"+tmp.str()+"Cycles.ppf";
802
803 POutPersist fos(fileName);
804 cout << "Save output in " << fileName << endl;
805
806 string tag = "calib";
807 fos << PPFNameTag(tag) << calibcoeffs;
808
809 }//end of save
810}
811
812//-------------------------------------------------------
813//Compute the mean of Diff ON-OFF BAO-calibrated spectra and also the mean/sigma of rebinned spectra
814//
815void meanCalibBAODiffOnOffCycles() throw(string) {
816
817 list<string> listOfFiles;
818 string directoryName;
819 directoryName = para.inPath_ + "/" + para.sourceName_;
820
821 //Make the listing of the directory
822 listOfFiles = ListOfFileInDir(directoryName,para.ppfFile_);
823
824 list<string>::const_iterator iFile, iFileEnd, iSpec, iSpecEnd;
825 iFileEnd = listOfFiles.end();
826
827 //mean ON-OFF over the list of cycles
828 TMatrix<r_4> meanDiffONOFFovOFF_noCalib(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ); //set to 0
829 TMatrix<r_4> meanDiffONOFF_noCalib(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ); //set to 0
830 TMatrix<r_4> meanDiffONOFF_perRunCalib(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ); //set to 0
831 TMatrix<r_4> meanDiffONOFF_perCycleCalib(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ); //set to 0
832 static const int NINFO=25;
833 char* onffTupleName[NINFO]={"cycle"
834 ,"onoffRaw0","onoffRaw1"
835 ,"onoffRun0","onoffRun1"
836 ,"onoffCycle0","onoffCycle1"
837 ,"onoffRaw01420","onoffRaw11420"
838 ,"onoffRun01420","onoffRun11420"
839 ,"onoffCycle01420","onoffCycle11420"
840 ,"onoffRaw01420side","onoffRaw11420side"
841 ,"onoffRun01420side","onoffRun11420side"
842 ,"onoffCycle01420side","onoffCycle11420side"
843 ,"onoffRaw0f14101415","onoffRaw1f14101415"
844 ,"offRaw0f14101415","offRaw1f14101415"
845 ,"onRaw0f14101415","onRaw1f14101415"
846 };
847 NTuple onoffevolution(NINFO,onffTupleName);
848 r_4 xnt[NINFO];
849
850 //Lower and Higher freq. arround the Calibration Freq. bin to perform mean follow up
851 sa_size_t chCalibLow = freqToChan(para.rcalibFreq_ - (para.rcalibBandFreq_*0.5));
852 sa_size_t chCalibHigh = freqToChan(para.rcalibFreq_ + (para.rcalibBandFreq_*0.5));
853 //Lower and Higher freq. just around 1420.4MHz Freq. bin to perform mean follow up
854 sa_size_t ch1420Low;
855 sa_size_t ch1420High;
856 if (para.sourceName_ == "Abell85") {
857 ch1420Low = freqToChan(1420.4-0.2); // Abell85
858 ch1420High = freqToChan(1420.4+0.2);
859 } else if (para.sourceName_ == "Abell1205") {
860 ch1420Low = freqToChan(1420.4-0.3); // Abell1205
861 ch1420High = freqToChan(1420.4+0.2);
862 } else if (para.sourceName_ == "Abell2440") {
863 ch1420Low = freqToChan(1420.4); // Abell2440
864 ch1420High = freqToChan(1420.4+0.3);
865 } else {
866 ch1420Low = freqToChan(1420.4-0.2); // Abell85
867 ch1420High = freqToChan(1420.4+0.2);
868 }
869
870 //Lower and Higher freq. on the sides of 1420.4Mhz Freq. bin to perform mean follow up
871 sa_size_t ch1420aLow = freqToChan(1418);
872 sa_size_t ch1420aHigh = freqToChan(1419);
873 sa_size_t ch1420bLow = freqToChan(1422);
874 sa_size_t ch1420bHigh = freqToChan(1423);
875
876 //1400-1420Mhz
877 sa_size_t ch1400 = freqToChan(1400);
878 // sa_size_t ch1405 = freqToChan(1400);
879 sa_size_t ch1410 = freqToChan(1410);
880 sa_size_t ch1415 = freqToChan(1415);
881 sa_size_t ch1420 = freqToChan(1420);
882
883 if (para.debuglev_>0){
884 cout << "freq. band for follow up [" << chCalibLow << ", "<< chCalibHigh << "]" << endl;
885 cout << "freq. band for follow up [" << ch1420Low << ", "<< ch1420High << "]" << endl;
886 cout << "freq. band for follow up [" << ch1420aLow << ", "<< ch1420aHigh << "]" << endl;
887 cout << "freq. band for follow up [" << ch1420bLow << ", "<< ch1420bHigh << "]" << endl;
888 }
889
890 //Loop on files/run
891
892 int totalNumberCycles=0; //total number of cycles for normalisation
893 for (iFile = listOfFiles.begin(); iFile != iFileEnd; ++iFile) {
894 if (para.debuglev_>90){
895 cout << "load file <" << *iFile << ">" << endl;
896 }
897
898 vector<string> tokens;
899 split(*iFile,"_",tokens);
900 string dateOfRun = tokens[1];
901 if (para.debuglev_>90){
902 cout << "date <" << dateOfRun << ">" << endl;
903 }
904 vector<string> tokens2;
905 split(tokens[2],".",tokens2);
906 string srcLower = tokens2[0];
907
908 PInPersist fin(*iFile);
909 vector<string> vec = fin.GetNameTags();
910
911 vector<string> modeList;
912 modeList.push_back("On");
913 modeList.push_back("Off");
914 vector<string>::const_iterator iMode;
915
916 map<string, list<int> > cycleModeCollect;
917
918 for (iMode = modeList.begin(); iMode!=modeList.end(); ++iMode) {
919 list<string> listOfSpectra;
920 //Keep only required PPF objects
921 string matchstr = "specRaw"+(*iMode)+"[0-9]+";
922 std::remove_copy_if(
923 vec.begin(), vec.end(), back_inserter(listOfSpectra),
924 not1(StringMatch(matchstr))
925 );
926
927 listOfSpectra.sort(stringCompare);
928 iSpecEnd = listOfSpectra.end();
929
930 matchstr = "[0-9]+";
931 //Loop of spectra matrix
932 list<int> listOfCycles;
933 for (iSpec = listOfSpectra.begin(); iSpec!=iSpecEnd; ++iSpec){
934 int b,e;
935 regexp(iSpec->c_str(),matchstr.c_str(),&b,&e);
936 if (para.debuglev_>90){
937 cout << " spactra <" << *iSpec << ">" << endl;
938 cout << " cycle " << iSpec->substr(b) << endl;
939 }
940 listOfCycles.push_back(atoi((iSpec->substr(b)).c_str()));
941 }//end loop spectra
942 cycleModeCollect[*iMode] = listOfCycles;
943 }//end of mode
944
945 //Take the Intersection of the list Of cycles in mode Off and On
946 list<int> commonCycles;
947 set_intersection(cycleModeCollect["On"].begin(),
948 cycleModeCollect["On"].end(),
949 cycleModeCollect["Off"].begin(),
950 cycleModeCollect["Off"].end(),
951 back_inserter(commonCycles)
952 );
953
954 if (para.debuglev_>90){
955 cout << "Liste of cycles common to On & Off: <";
956 for (list<int>::iterator i=commonCycles.begin(); i!=commonCycles.end(); ++i){
957 cout << *i << " ";
958 }
959 cout << ">" << endl;
960 }
961
962 //
963 //Load BAO Calibration factors "per Cycle and Channels"
964 //Compute the mean per Cycle to
965 // fill factors "per Run and Channels" with the same cycle list
966 //
967 //
968 //TODO improve the code....
969
970 TMatrix<r_4> calibBAOfactors_Off_Cycle_Ch0;
971 TMatrix<r_4> calibBAOfactors_Off_Cycle_Ch1;
972 TMatrix<r_4> calibBAOfactors_On_Cycle_Ch0;
973 TMatrix<r_4> calibBAOfactors_On_Cycle_Ch1;
974
975 string calibFileName;
976 ifstream ifs;
977 sa_size_t nr,nc; //values read
978
979 //OFF Cycle per Channel
980 calibFileName = directoryName + "/"
981 + "calib_" + dateOfRun + "_" + srcLower + "_Off_"
982 + para.calibFreq_ +"MHz-Ch0Cycles.txt";
983 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
984 ifs.open(calibFileName.c_str());
985 if ( ! ifs.is_open() ) {
986
987 throw calibFileName + " cannot be opened...";
988 }
989 calibBAOfactors_Off_Cycle_Ch0.ReadASCII(ifs,nr,nc);
990 if(para.debuglev_>9){
991 cout << "(nr,nc): "<< nr << "," << nc << endl;
992 calibBAOfactors_Off_Cycle_Ch0.Print(cout);
993 cout << endl;
994 }
995
996 TMatrix<r_4> calibBAOfactors_Off_Run_Ch0(nr,nc);
997 calibBAOfactors_Off_Run_Ch0.Column(0) = calibBAOfactors_Off_Cycle_Ch0.Column(0);
998 {//Compute the mean
999 TVector<r_4> coef(calibBAOfactors_Off_Cycle_Ch0(Range::all(),Range::last()),false);
1000 double mean,sigma;
1001 MeanSigma(coef,mean,sigma);
1002 calibBAOfactors_Off_Run_Ch0.Column(1).SetCst(mean);
1003 }
1004 if(para.debuglev_>9){
1005 cout << "Fill calib. with mean value " << endl;
1006 calibBAOfactors_Off_Run_Ch0.Print(cout);
1007 cout << endl;
1008 }
1009 ifs.close();
1010
1011 //
1012 calibFileName = directoryName + "/"
1013 + "calib_" + dateOfRun + "_" + srcLower + "_Off_"
1014 + para.calibFreq_ +"MHz-Ch1Cycles.txt";
1015 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
1016 ifs.open(calibFileName.c_str());
1017 if ( ! ifs.is_open() ) {
1018
1019 throw calibFileName + " cannot be opened...";
1020 }
1021 calibBAOfactors_Off_Cycle_Ch1.ReadASCII(ifs,nr,nc);
1022 if(para.debuglev_>9){
1023 cout << "(nr,nc): "<< nr << "," << nc << endl;
1024 calibBAOfactors_Off_Cycle_Ch1.Print(cout);
1025 cout << endl;
1026 }
1027 TMatrix<r_4> calibBAOfactors_Off_Run_Ch1(nr,nc);
1028 calibBAOfactors_Off_Run_Ch1.Column(0) = calibBAOfactors_Off_Cycle_Ch1.Column(0);
1029 {//Compute the mean
1030 TVector<r_4> coef(calibBAOfactors_Off_Cycle_Ch1(Range::all(),Range::last()),false);
1031 double mean,sigma;
1032 MeanSigma(coef,mean,sigma);
1033 // cout << "Mean: " << mean << " sigma " << sigma << endl;
1034 calibBAOfactors_Off_Run_Ch1.Column(1).SetCst(mean);
1035 }
1036 if(para.debuglev_>9){
1037 cout << "Fill calib. with mean value " << endl;
1038 calibBAOfactors_Off_Run_Ch1.Print(cout);
1039 cout << endl;
1040 }
1041 ifs.close();
1042
1043 //ON Cycle per Channel
1044 calibFileName = directoryName + "/"
1045 + "calib_" + dateOfRun + "_" + srcLower + "_On_"
1046 + para.calibFreq_ +"MHz-Ch0Cycles.txt";
1047 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
1048 ifs.open(calibFileName.c_str());
1049 if ( ! ifs.is_open() ) {
1050
1051 throw calibFileName + " cannot be opened...";
1052 }
1053 calibBAOfactors_On_Cycle_Ch0.ReadASCII(ifs,nr,nc);
1054 if(para.debuglev_>9){
1055 cout << "(nr,nc): "<< nr << "," << nc << endl;
1056 calibBAOfactors_On_Cycle_Ch0.Print(cout);
1057 cout << endl;
1058 }
1059
1060 TMatrix<r_4> calibBAOfactors_On_Run_Ch0(nr,nc);
1061 calibBAOfactors_On_Run_Ch0.Column(0) = calibBAOfactors_On_Cycle_Ch0.Column(0);
1062 {//Compute the mean
1063 TVector<r_4> coef(calibBAOfactors_On_Cycle_Ch0(Range::all(),Range::last()),false);
1064 double mean,sigma;
1065 MeanSigma(coef,mean,sigma);
1066 // cout << "Mean: " << mean << " sigma " << sigma << endl;
1067 calibBAOfactors_On_Run_Ch0.Column(1).SetCst(mean);
1068 }
1069 if(para.debuglev_>9){
1070 cout << "Fill calib. with mean value " << endl;
1071 calibBAOfactors_On_Run_Ch0.Print(cout);
1072 cout << endl;
1073 }
1074 ifs.close();
1075
1076
1077 calibFileName = directoryName + "/"
1078 + "calib_" + dateOfRun + "_" + srcLower + "_On_"
1079 + para.calibFreq_ +"MHz-Ch1Cycles.txt";
1080 if(para.debuglev_>0) cout << "Read Calib file " << calibFileName << endl;
1081 ifs.open(calibFileName.c_str());
1082 if ( ! ifs.is_open() ) {
1083 throw calibFileName + " cannot be opened...";
1084 }
1085 calibBAOfactors_On_Cycle_Ch1.ReadASCII(ifs,nr,nc);
1086 if(para.debuglev_>9){
1087 cout << "(nr,nc): "<< nr << "," << nc << endl;
1088 calibBAOfactors_On_Cycle_Ch1.Print(cout);
1089 cout << endl;
1090 }
1091 TMatrix<r_4> calibBAOfactors_On_Run_Ch1(nr,nc);
1092 calibBAOfactors_On_Run_Ch1.Column(0) = calibBAOfactors_On_Cycle_Ch1.Column(0);
1093 {//Compute the mean
1094 TVector<r_4> coef(calibBAOfactors_On_Cycle_Ch1(Range::all(),Range::last()),false);
1095 double mean,sigma;
1096 MeanSigma(coef,mean,sigma);
1097 // cout << "Mean: " << mean << " sigma " << sigma << endl;
1098 calibBAOfactors_On_Run_Ch1.Column(1).SetCst(mean);
1099 }
1100 if(para.debuglev_>9){
1101 cout << "Fill calib. with mean value " << endl;
1102 calibBAOfactors_On_Run_Ch1.Print(cout);
1103 cout << endl;
1104 }
1105
1106 ifs.close();
1107
1108 //link <cycle> - <calibration coefficient>
1109 //We cannot rely on identical cycle list of the OFF and ON calibration
1110 map<int,r_4> calibBAO_Off_Run_Ch0;
1111 map<int,r_4> calibBAO_Off_Run_Ch1;
1112 map<int,r_4> calibBAO_On_Run_Ch0;
1113 map<int,r_4> calibBAO_On_Run_Ch1;
1114
1115 map<int,r_4> calibBAO_Off_Cycle_Ch0;
1116 map<int,r_4> calibBAO_Off_Cycle_Ch1;
1117 map<int,r_4> calibBAO_On_Cycle_Ch0;
1118 map<int,r_4> calibBAO_On_Cycle_Ch1;
1119
1120 //per Run based BAO coefficients
1121 nr = calibBAOfactors_Off_Run_Ch0.NRows();
1122 for (sa_size_t ir=0; ir<nr; ++ir){
1123 cout << "Calib. Off Run Ch0 cycle ["<< calibBAOfactors_Off_Run_Ch0(ir,0)<<"], val "
1124 << calibBAOfactors_Off_Run_Ch0(ir,1) << endl;
1125
1126 calibBAO_Off_Run_Ch0[(int)calibBAOfactors_Off_Run_Ch0(ir,0)]
1127 = calibBAOfactors_Off_Run_Ch0(ir,1);
1128 calibBAO_Off_Cycle_Ch0[(int)calibBAOfactors_Off_Cycle_Ch0(ir,0)]
1129 = calibBAOfactors_Off_Cycle_Ch0(ir,1);
1130 calibBAO_Off_Run_Ch1[(int)calibBAOfactors_Off_Run_Ch1(ir,0)]
1131 = calibBAOfactors_Off_Run_Ch1(ir,1);
1132 calibBAO_Off_Cycle_Ch1[(int)calibBAOfactors_Off_Cycle_Ch1(ir,0)]
1133 = calibBAOfactors_Off_Cycle_Ch1(ir,1);
1134 }//eo loop on coef Off
1135
1136 nr = calibBAOfactors_On_Run_Ch0.NRows();
1137 for (sa_size_t ir=0; ir<nr; ++ir){
1138 calibBAO_On_Run_Ch0[(int)calibBAOfactors_On_Run_Ch0(ir,0)]
1139 = calibBAOfactors_On_Run_Ch0(ir,1);
1140 calibBAO_On_Cycle_Ch0[(int)calibBAOfactors_On_Cycle_Ch0(ir,0)]
1141 = calibBAOfactors_On_Cycle_Ch0(ir,1);
1142 calibBAO_On_Run_Ch1[(int)calibBAOfactors_On_Run_Ch1(ir,0)]
1143 = calibBAOfactors_On_Run_Ch1(ir,1);
1144 calibBAO_On_Cycle_Ch1[(int)calibBAOfactors_On_Cycle_Ch1(ir,0)]
1145 = calibBAOfactors_On_Cycle_Ch1(ir,1);
1146 }//eo loop on coef On
1147
1148 //Loop on cyles
1149 for (list<int>::iterator ic=commonCycles.begin(); ic!=commonCycles.end(); ++ic){
1150
1151 //Look if the cycle has been calibrated...
1152 bool isCycleCalibrated =
1153 ( calibBAO_On_Run_Ch0.count(*ic) *
1154 calibBAO_On_Run_Ch1.count(*ic) *
1155 calibBAO_Off_Run_Ch0.count(*ic) *
1156 calibBAO_Off_Run_Ch1.count(*ic) *
1157 calibBAO_On_Cycle_Ch0.count(*ic) *
1158 calibBAO_On_Cycle_Ch1.count(*ic) *
1159 calibBAO_Off_Cycle_Ch0.count(*ic) *
1160 calibBAO_Off_Cycle_Ch1.count(*ic) ) != 0 ? true : false;
1161
1162 if(para.debuglev_>9) {
1163 cout << "Calibration coefficients for cycle "<<*ic << endl;
1164 if (isCycleCalibrated) {
1165 cout << "Cycle calibrated " << endl;
1166 cout << "Off Run Ch0 " << calibBAO_Off_Run_Ch0[*ic] << " "
1167 << "Ch1 " << calibBAO_Off_Run_Ch1[*ic] << "\n"
1168 << "On Run Ch0 " << calibBAO_On_Run_Ch0[*ic] << " "
1169 << "Ch1 " << calibBAO_On_Run_Ch1[*ic] << "\n"
1170 << "Off Cycle Ch0 " << calibBAO_Off_Cycle_Ch0[*ic] << " "
1171 << "Ch1 " << calibBAO_Off_Cycle_Ch1[*ic] << "\n"
1172 << "On Cycle Ch0 " << calibBAO_On_Cycle_Ch0[*ic] << " "
1173 << "Ch1 " << calibBAO_On_Cycle_Ch1[*ic] << endl;
1174 } else {
1175 cout << "Cycle << " << *ic <<" NOT calibrated for file " << *iFile << endl;
1176 }
1177 }//debug
1178
1179
1180 if ( ! isCycleCalibrated ) continue;
1181
1182 string ppftag;
1183 //load ON phase
1184 stringstream cycle;
1185 cycle << *ic;
1186
1187 ppftag = "specRawOn"+cycle.str();
1188 TMatrix<r_4> aSpecOn(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
1189 fin.GetObject(aSpecOn,ppftag);
1190
1191 TMatrix<r_4> aSpecOn_BAOCalibRun(aSpecOn,false);
1192 aSpecOn_BAOCalibRun(Range(0),Range::all()) /= calibBAO_On_Run_Ch0[*ic];
1193 aSpecOn_BAOCalibRun(Range(1),Range::all()) /= calibBAO_On_Run_Ch1[*ic];
1194
1195 TMatrix<r_4> aSpecOn_BAOCalibCycle(aSpecOn,false);
1196 aSpecOn_BAOCalibCycle(Range(0),Range::all()) /= calibBAO_On_Cycle_Ch0[*ic];
1197 aSpecOn_BAOCalibCycle(Range(1),Range::all()) /= calibBAO_On_Cycle_Ch1[*ic];
1198
1199 //Load OFF phase
1200 ppftag = "specRawOff"+cycle.str();
1201 TMatrix<r_4> aSpecOff(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
1202 fin.GetObject(aSpecOff,ppftag);
1203
1204 TMatrix<r_4> aSpecOff_BAOCalibRun(aSpecOff,false);
1205 aSpecOff_BAOCalibRun(Range(0),Range::all()) /= calibBAO_Off_Run_Ch0[*ic];
1206 aSpecOff_BAOCalibRun(Range(1),Range::all()) /= calibBAO_Off_Run_Ch1[*ic];
1207
1208 TMatrix<r_4> aSpecOff_BAOCalibCycle(aSpecOff,false);
1209 aSpecOff_BAOCalibCycle(Range(0),Range::all()) /= calibBAO_Off_Cycle_Ch0[*ic];
1210 aSpecOff_BAOCalibCycle(Range(1),Range::all()) /= calibBAO_Off_Cycle_Ch1[*ic];
1211
1212
1213 //Perform the difference ON-OFF with the different calibration options
1214 TMatrix<r_4> diffOnOff_noCalib = aSpecOn - aSpecOff;
1215 meanDiffONOFF_noCalib += diffOnOff_noCalib;
1216
1217 //JEC 29/10/11 add ON-OFF/OFF
1218 TMatrix<r_4> diffOnOffOvOff_noCalib(diffOnOff_noCalib,false); //do not share data
1219 TMatrix<r_4> aSpecOffFiltered(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
1220 sa_size_t halfWidth = 35; //number of freq. bin for the 1/2 width of the filtering window
1221 medianFiltering(aSpecOff,halfWidth,aSpecOffFiltered);
1222
1223 diffOnOffOvOff_noCalib.Div(aSpecOffFiltered); //division in place
1224 meanDiffONOFFovOFF_noCalib += diffOnOffOvOff_noCalib;
1225
1226 TMatrix<r_4> diffOnOff_perRunCalib = aSpecOn_BAOCalibRun - aSpecOff_BAOCalibRun;
1227 meanDiffONOFF_perRunCalib += diffOnOff_perRunCalib;
1228
1229 TMatrix<r_4> diffOnOff_perCycleCalib = aSpecOn_BAOCalibCycle - aSpecOff_BAOCalibCycle;
1230 meanDiffONOFF_perCycleCalib += diffOnOff_perCycleCalib;
1231
1232 totalNumberCycles++;
1233
1234 //Fill NTuple
1235 xnt[0] = totalNumberCycles;
1236
1237 //Follow up arround the Calibration Freq.
1238 TVector<r_4> meanInRange_CalibFreq_noCalib(NUMBER_OF_CHANNELS);
1239 meanInRange(diffOnOff_noCalib,chCalibLow,chCalibHigh,meanInRange_CalibFreq_noCalib);
1240 xnt[1] = meanInRange_CalibFreq_noCalib(0);
1241 xnt[2] = meanInRange_CalibFreq_noCalib(1);
1242
1243 TVector<r_4> meanInRange_CalibFreq_perRunCalib(NUMBER_OF_CHANNELS);
1244 meanInRange(diffOnOff_perRunCalib,chCalibLow,chCalibHigh,meanInRange_CalibFreq_perRunCalib);
1245 xnt[3] = meanInRange_CalibFreq_perRunCalib(0);
1246 xnt[4] = meanInRange_CalibFreq_perRunCalib(1);
1247
1248 TVector<r_4> meanInRange_CalibFreq_perCycleCalib(NUMBER_OF_CHANNELS);
1249 meanInRange(diffOnOff_perCycleCalib,chCalibLow,chCalibHigh,meanInRange_CalibFreq_perCycleCalib);
1250 xnt[5] = meanInRange_CalibFreq_perCycleCalib(0);
1251 xnt[6] = meanInRange_CalibFreq_perCycleCalib(1);
1252
1253
1254 //Follow up arround the 1420.4MHz Freq.
1255 TVector<r_4> meanInRange_1420Freq_noCalib(NUMBER_OF_CHANNELS);
1256 meanInRange(diffOnOff_noCalib,ch1420Low,ch1420High,meanInRange_1420Freq_noCalib);
1257 xnt[7] = meanInRange_1420Freq_noCalib(0);
1258 xnt[8] = meanInRange_1420Freq_noCalib(1);
1259
1260 TVector<r_4> meanInRange_1420Freq_perRunCalib(NUMBER_OF_CHANNELS);
1261 meanInRange(diffOnOff_perRunCalib,ch1420Low,ch1420High,meanInRange_1420Freq_perRunCalib);
1262 xnt[9] = meanInRange_1420Freq_perRunCalib(0);
1263 xnt[10] = meanInRange_1420Freq_perRunCalib(1);
1264
1265 TVector<r_4> meanInRange_1420Freq_perCycleCalib(NUMBER_OF_CHANNELS);
1266 meanInRange(diffOnOff_perCycleCalib,ch1420Low,ch1420High,meanInRange_1420Freq_perCycleCalib);
1267 xnt[11] = meanInRange_1420Freq_perCycleCalib(0);
1268 xnt[12] = meanInRange_1420Freq_perCycleCalib(1);
1269
1270
1271 //Follow up below the 1420.4MHz Freq.
1272 TVector<r_4> meanInRange_1420aFreq_noCalib(NUMBER_OF_CHANNELS);
1273 meanInRange(diffOnOff_noCalib,ch1420aLow,ch1420aHigh,meanInRange_1420aFreq_noCalib);
1274 TVector<r_4> meanInRange_1420bFreq_noCalib(NUMBER_OF_CHANNELS);
1275 meanInRange(diffOnOff_noCalib,ch1420bLow,ch1420bHigh,meanInRange_1420bFreq_noCalib);
1276
1277 xnt[13] = (meanInRange_1420aFreq_noCalib(0) + meanInRange_1420bFreq_noCalib(0))/2.;
1278 xnt[14] = (meanInRange_1420aFreq_noCalib(1) + meanInRange_1420bFreq_noCalib(1))/2.;
1279
1280
1281 TVector<r_4> meanInRange_1420aFreq_perRun(NUMBER_OF_CHANNELS);
1282 meanInRange(diffOnOff_perRunCalib,ch1420aLow,ch1420aHigh,meanInRange_1420aFreq_perRun);
1283 TVector<r_4> meanInRange_1420bFreq_perRun(NUMBER_OF_CHANNELS);
1284 meanInRange(diffOnOff_perRunCalib,ch1420bLow,ch1420bHigh,meanInRange_1420bFreq_perRun);
1285
1286 xnt[15] = (meanInRange_1420aFreq_perRun(0) + meanInRange_1420bFreq_perRun(0))/2.;
1287 xnt[16] = (meanInRange_1420aFreq_perRun(1) + meanInRange_1420bFreq_perRun(1))/2.;
1288
1289
1290 TVector<r_4> meanInRange_1420aFreq_perCycle(NUMBER_OF_CHANNELS);
1291 meanInRange(diffOnOff_perCycleCalib,ch1420aLow,ch1420aHigh,meanInRange_1420aFreq_perCycle);
1292 TVector<r_4> meanInRange_1420bFreq_perCycle(NUMBER_OF_CHANNELS);
1293 meanInRange(diffOnOff_perCycleCalib,ch1420bLow,ch1420bHigh,meanInRange_1420bFreq_perCycle);
1294
1295 xnt[17] = (meanInRange_1420aFreq_perCycle(0) + meanInRange_1420bFreq_perCycle(0))/2.;
1296 xnt[18] = (meanInRange_1420aFreq_perCycle(1) + meanInRange_1420bFreq_perCycle(1))/2.;
1297
1298
1299 //JEC 25/10/11 follow 1400-1420 MHz bande protege et n'inclue pas le 1420.4Mhz de la Galaxie
1300 TVector<r_4> meanInRange_1400a1420Freq_noCalib(NUMBER_OF_CHANNELS);
1301 meanInRange(diffOnOff_noCalib,ch1400,ch1420,meanInRange_1400a1420Freq_noCalib);
1302 xnt[19] = meanInRange_1400a1420Freq_noCalib(0);
1303 xnt[20] = meanInRange_1400a1420Freq_noCalib(1);
1304
1305 //JEC 18/11/11 follow up the 1400-1420MHz OFF only
1306 TMatrix<r_4> aSpecOffovOff(aSpecOff,false);
1307 aSpecOffovOff.Div(aSpecOffFiltered);
1308
1309 TVector<r_4> meanInRange_1410a1415Freq_OFF_noCalib(NUMBER_OF_CHANNELS);
1310 // meanInRange(aSpecOff,ch1410,ch1415,meanInRange_1410a1415Freq_OFF_noCalib);
1311 meanInRange(aSpecOffovOff,ch1410,ch1415,meanInRange_1410a1415Freq_OFF_noCalib);
1312
1313 xnt[21] = meanInRange_1410a1415Freq_OFF_noCalib(0);
1314 xnt[22] = meanInRange_1410a1415Freq_OFF_noCalib(1);
1315
1316 TMatrix<r_4> aSpecOnovOff(aSpecOn,false);
1317 aSpecOnovOff.Div(aSpecOffFiltered);
1318
1319 TVector<r_4> meanInRange_1410a1415Freq_ON_noCalib(NUMBER_OF_CHANNELS);
1320 //meanInRange(aSpecOn,ch1410,ch1415,meanInRange_1410a1415Freq_ON_noCalib);
1321 meanInRange(aSpecOnovOff,ch1410,ch1415,meanInRange_1410a1415Freq_ON_noCalib);
1322
1323 xnt[23] = meanInRange_1410a1415Freq_ON_noCalib(0);
1324 xnt[24] = meanInRange_1410a1415Freq_ON_noCalib(1);
1325
1326 //store infos to Ntuple
1327 onoffevolution.Fill(xnt);
1328
1329 //Quit if enough
1330 if (totalNumberCycles >= para.maxNumberCycles_) break;
1331
1332 }//eo loop on cycles
1333 if (totalNumberCycles >= para.maxNumberCycles_) break;
1334
1335 }//eo loop on spectra in a file
1336 cout << "End of jobs: we have treated " << totalNumberCycles << " cycles" << endl;
1337 //Normalisation
1338 if(totalNumberCycles > 0){
1339 //JEC 29/10 add ON-OFF/OFF
1340 meanDiffONOFFovOFF_noCalib /= (r_4)totalNumberCycles;
1341 meanDiffONOFF_noCalib /= (r_4)totalNumberCycles;
1342 meanDiffONOFF_perRunCalib /= (r_4)totalNumberCycles;
1343 meanDiffONOFF_perCycleCalib /= (r_4)totalNumberCycles;
1344 }
1345
1346 //Compute the reduced version of the mean and sigma
1347 TMatrix<r_4> meanRedMtx_noCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
1348 TMatrix<r_4> sigmaRedMtx_noCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
1349 reduceSpectra(meanDiffONOFF_noCalib,meanRedMtx_noCalib,sigmaRedMtx_noCalib);
1350
1351 TMatrix<r_4> meanRedMtx_perRunCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
1352 TMatrix<r_4> sigmaRedMtx_perRunCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
1353 reduceSpectra(meanDiffONOFF_perRunCalib,meanRedMtx_perRunCalib,sigmaRedMtx_perRunCalib);
1354
1355 TMatrix<r_4> meanRedMtx_perCycleCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
1356 TMatrix<r_4> sigmaRedMtx_perCycleCalib(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
1357 reduceSpectra(meanDiffONOFF_perCycleCalib,meanRedMtx_perCycleCalib,sigmaRedMtx_perCycleCalib);
1358
1359 {//save the results
1360 stringstream tmp;
1361 tmp << totalNumberCycles;
1362 string fileName = para.outPath_+"/onoffsurvey_"+StringToLower(para.sourceName_)+"-"+tmp.str()+"Cycles.ppf";
1363
1364 POutPersist fos(fileName);
1365 cout << "Save output in " << fileName << endl;
1366
1367 string tag = "meanNoCalib";
1368 fos << PPFNameTag(tag) << meanDiffONOFF_noCalib;
1369
1370 //JEC 29/10/11
1371 tag = "meanOvOffNoCalib";
1372 fos << PPFNameTag(tag) << meanDiffONOFFovOFF_noCalib;
1373
1374 tag = "meanPerRunCalib";
1375 fos << PPFNameTag(tag) << meanDiffONOFF_perRunCalib;
1376 tag = "meanPerCycleCalib";
1377 fos << PPFNameTag(tag) << meanDiffONOFF_perCycleCalib;
1378
1379 tag = "redmeanNoCalib";
1380 fos << PPFNameTag(tag) << meanRedMtx_noCalib;
1381 tag = "redsigmaNoCalib";
1382 fos << PPFNameTag(tag) << sigmaRedMtx_noCalib;
1383
1384 tag = "redmeanPerRunCalib";
1385 fos << PPFNameTag(tag) << meanRedMtx_perRunCalib;
1386 tag = "redsigmaPerRunCalib";
1387 fos << PPFNameTag(tag) << sigmaRedMtx_perRunCalib;
1388
1389 tag = "redmeanPerCycleCalib";
1390 fos << PPFNameTag(tag) << meanRedMtx_perCycleCalib;
1391 tag = "redsigmaPerCycleCalib";
1392 fos << PPFNameTag(tag) << sigmaRedMtx_perCycleCalib;
1393
1394 tag = "onoffevol";
1395 fos << PPFNameTag(tag) << onoffevolution;
1396
1397 }//end of save
1398
1399
1400}
1401//JEC 14/11/11 New meanRawDiffOnOffCycles START
1402//-------------------------------------------------------
1403//Compute the mean of Diff ON-OFF/OFF from Raw spectra
1404//Used like:
1405//
1406void meanRawDiffOnOffCycles() throw(string) {
1407 list<string> listOfFiles;
1408 string directoryName;
1409 directoryName = para.inPath_ + "/" + para.sourceName_;
1410
1411 //Make the listing of the directory
1412 listOfFiles = ListOfFileInDir(directoryName,para.ppfFile_);
1413
1414 list<string>::const_iterator iFile, iFileEnd, iSpec, iSpecEnd;
1415 iFileEnd = listOfFiles.end();
1416
1417 //mean ON-OFF over the list of cycles
1418 TMatrix<r_4> meanDiffONOFF_noCalib(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ); //(ON-OFF)/GAIN
1419 TMatrix<r_4> meanDiffONOFFovOFF_noCalib(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ); //(ON-OFF)/Filtered_OFF
1420 TMatrix<r_4> meanONovOFF_noCalib(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ); // ON/Filtered_OFF
1421 TMatrix<r_4> meanOFFovOFF_noCalib(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ); // OFF/Filtered_OFF
1422 //Tuple only for RAW things to follow
1423 static const int NINFO=11;
1424 char* onffTupleName[NINFO]={"cycle"
1425 ,"onoffRaw01420","onoffRaw11420"
1426 ,"onoffRaw01420side","onoffRaw11420side"
1427 ,"onoffRaw0f14101415","onoffRaw1f14101415"
1428 ,"offRaw0f14101415","offRaw1f14101415"
1429 ,"onRaw0f14101415","onRaw1f14101415"
1430 };
1431 NTuple onoffevolution(NINFO,onffTupleName);
1432 r_4 xnt[NINFO];
1433
1434 //Lower and Higher freq. just arround 1420.4MHz Freq. bin to perform mean follow up
1435 sa_size_t ch1420Low = freqToChan(1420.4-0.2);
1436 sa_size_t ch1420High = freqToChan(1420.4+0.2);
1437
1438 //Lower and Higher freq. on the sides of 1420.4Mhz Freq. bin to perform mean follow up
1439 sa_size_t ch1420aLow = freqToChan(1418);
1440 sa_size_t ch1420aHigh = freqToChan(1419);
1441 sa_size_t ch1420bLow = freqToChan(1422);
1442 sa_size_t ch1420bHigh = freqToChan(1423);
1443
1444 //1400-1420Mhz
1445 sa_size_t ch1400 = freqToChan(1400);
1446 // sa_size_t ch1405 = freqToChan(1400);
1447 sa_size_t ch1410 = freqToChan(1410);
1448 sa_size_t ch1415 = freqToChan(1415);
1449 sa_size_t ch1420 = freqToChan(1420);
1450
1451 if (para.debuglev_>0){
1452 cout << "freq. band for follow up [" << ch1420Low << ", "<< ch1420High << "]" << endl;
1453 cout << "freq. band for follow up [" << ch1420aLow << ", "<< ch1420aHigh << "]" << endl;
1454 cout << "freq. band for follow up [" << ch1420bLow << ", "<< ch1420bHigh << "]" << endl;
1455 }
1456
1457 int totalNumberCycles=0; //total number of cycles
1458
1459 //Loop on files
1460 for (iFile = listOfFiles.begin(); iFile != iFileEnd; ++iFile) {
1461 if (para.debuglev_>90){
1462 cout << "load file <" << *iFile << ">" << endl;
1463 }
1464
1465 vector<string> tokens;
1466 split(*iFile,"_",tokens);
1467 string dateOfRun = tokens[1];
1468 if (para.debuglev_>90){
1469 cout << "date <" << dateOfRun << ">" << endl;
1470 }
1471 vector<string> tokens2;
1472 split(tokens[2],".",tokens2);
1473 string srcLower = tokens2[0];
1474
1475 PInPersist fin(*iFile);
1476 vector<string> vec = fin.GetNameTags();
1477
1478 vector<string> modeList;
1479 modeList.push_back("On");
1480 modeList.push_back("Off");
1481 vector<string>::const_iterator iMode;
1482
1483 map<string, list<int> > cycleModeCollect;
1484
1485 for (iMode = modeList.begin(); iMode!=modeList.end(); ++iMode) {
1486 list<string> listOfSpectra;
1487 //Keep only required PPF objects
1488 string matchstr = "specRaw"+(*iMode)+"[0-9]+";
1489 std::remove_copy_if(
1490 vec.begin(), vec.end(), back_inserter(listOfSpectra),
1491 not1(StringMatch(matchstr))
1492 );
1493
1494 listOfSpectra.sort(stringCompare);
1495 iSpecEnd = listOfSpectra.end();
1496
1497 matchstr = "[0-9]+";
1498 //Loop of spectra matrix
1499 list<int> listOfCycles;
1500 for (iSpec = listOfSpectra.begin(); iSpec!=iSpecEnd; ++iSpec){
1501 int b,e;
1502 regexp(iSpec->c_str(),matchstr.c_str(),&b,&e);
1503 if (para.debuglev_>90){
1504 cout << " spectra <" << *iSpec << ">" << endl;
1505 cout << " cycle " << iSpec->substr(b) << endl;
1506 }
1507 listOfCycles.push_back(atoi((iSpec->substr(b)).c_str()));
1508 }//end loop spectra
1509 cycleModeCollect[*iMode] = listOfCycles;
1510 }//end of mode
1511
1512 //Take the Intersection of the list Of cycles in mode Off and On
1513 list<int> commonCycles;
1514 set_intersection(cycleModeCollect["On"].begin(),
1515 cycleModeCollect["On"].end(),
1516 cycleModeCollect["Off"].begin(),
1517 cycleModeCollect["Off"].end(),
1518 back_inserter(commonCycles)
1519 );
1520
1521 if (para.debuglev_>90){
1522 cout << "Liste of cycles common to On & Off: <";
1523 for (list<int>::iterator i=commonCycles.begin(); i!=commonCycles.end(); ++i){
1524 cout << *i << " ";
1525 }
1526 cout << ">" << endl;
1527 }
1528
1529 //Loop on cyles
1530 for (list<int>::iterator ic=commonCycles.begin(); ic!=commonCycles.end(); ++ic){
1531
1532 // AST 28.11.11 remove non-calibrated cycles for Abell1205 and Abell2440
1533 if ( *ic == 1 && srcLower == "abell1205" ) {
1534 if ( dateOfRun == "20110502" || dateOfRun == "20110607" || dateOfRun == "20110818" ) {
1535 cout << "Skipping non-calibrated cycle " << *ic << endl;
1536 continue;
1537 }
1538 } else if ( *ic == 1 && srcLower == "abell2440" ) {
1539 if ( dateOfRun == "20110516" ) {
1540 cout << "Skipping non-calibrated cycle " << *ic << endl;
1541 continue;
1542 }
1543 } else if ( *ic == 3 && srcLower == "abell1205" ) {
1544 if ( dateOfRun == "20110810" ) {
1545 cout << "Skipping non-calibrated cycle " << *ic << endl;
1546 continue;
1547 }
1548 }
1549
1550 string ppftag;
1551 //load ON phase
1552 stringstream cycle;
1553 cycle << *ic;
1554 ppftag = "specRawOn"+cycle.str();
1555 TMatrix<r_4> aSpecOn(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
1556 fin.GetObject(aSpecOn,ppftag);
1557
1558 //Load OFF phase
1559 ppftag = "specRawOff"+cycle.str();
1560 TMatrix<r_4> aSpecOff(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
1561 fin.GetObject(aSpecOff,ppftag);
1562
1563 //Perform the difference ON-OFF
1564 TMatrix<r_4> diffOnOff_noCalib = aSpecOn - aSpecOff;
1565
1566 meanDiffONOFF_noCalib += diffOnOff_noCalib;
1567
1568 //JEC 29/10/11 add ON-OFF/OFF
1569 TMatrix<r_4> diffOnOffOvOff_noCalib(diffOnOff_noCalib,false); //do not share data
1570 TMatrix<r_4> aSpecOffFiltered(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
1571 sa_size_t halfWidth = 35; //number of freq. bin for the 1/2 width of the filtering window
1572 medianFiltering(aSpecOff,halfWidth,aSpecOffFiltered);
1573
1574 diffOnOffOvOff_noCalib.Div(aSpecOffFiltered); //division in place
1575 meanDiffONOFFovOFF_noCalib += diffOnOffOvOff_noCalib;
1576
1577 //JEC 15/11/11 add ON/OFF and OFF/OFF
1578 TMatrix<r_4> onOvOff(aSpecOn,false);
1579 onOvOff.Div(aSpecOffFiltered);
1580 meanONovOFF_noCalib += onOvOff;
1581
1582 TMatrix<r_4> offOvOff(aSpecOff,false);
1583 offOvOff.Div(aSpecOffFiltered);
1584 meanOFFovOFF_noCalib += offOvOff;
1585
1586 totalNumberCycles++;
1587
1588 //Fill NTuple
1589 xnt[0] = totalNumberCycles;
1590
1591 //Follow up arround the 1420.4MHz Freq.
1592 TVector<r_4> meanInRange_1420Freq_noCalib(NUMBER_OF_CHANNELS);
1593 meanInRange(diffOnOffOvOff_noCalib,ch1420Low,ch1420High,meanInRange_1420Freq_noCalib);
1594 xnt[1] = meanInRange_1420Freq_noCalib(0);
1595 xnt[2] = meanInRange_1420Freq_noCalib(1);
1596
1597
1598 //Follow up below the 1420.4MHz Freq.
1599 TVector<r_4> meanInRange_1420aFreq_noCalib(NUMBER_OF_CHANNELS);
1600 meanInRange(diffOnOffOvOff_noCalib,ch1420aLow,ch1420aHigh,meanInRange_1420aFreq_noCalib);
1601 TVector<r_4> meanInRange_1420bFreq_noCalib(NUMBER_OF_CHANNELS);
1602 meanInRange(diffOnOffOvOff_noCalib,ch1420bLow,ch1420bHigh,meanInRange_1420bFreq_noCalib);
1603
1604 xnt[3] = (meanInRange_1420aFreq_noCalib(0) + meanInRange_1420bFreq_noCalib(0))/2.;
1605 xnt[4] = (meanInRange_1420aFreq_noCalib(1) + meanInRange_1420bFreq_noCalib(1))/2.;
1606
1607
1608 //JEC 25/10/11 follow 1410-1415 MHz bande protege et n'inclue pas le 1420.4Mhz de la Galaxie
1609 TVector<r_4> meanInRange_1410a1415Freq_noCalib(NUMBER_OF_CHANNELS);
1610 meanInRange(diffOnOffOvOff_noCalib,ch1410,ch1415,meanInRange_1410a1415Freq_noCalib);
1611 xnt[5] = meanInRange_1410a1415Freq_noCalib(0);
1612 xnt[6] = meanInRange_1410a1415Freq_noCalib(1);
1613
1614 //JEC 18/11/11 follow up the 1410-1415MHz OFF only
1615 TMatrix<r_4> aSpecOffovOff(aSpecOff,false);
1616 aSpecOffovOff.Div(aSpecOffFiltered);
1617
1618 TVector<r_4> meanInRange_1410a1415Freq_OFF_noCalib(NUMBER_OF_CHANNELS);
1619 meanInRange(aSpecOffovOff,ch1410,ch1415,meanInRange_1410a1415Freq_OFF_noCalib);
1620
1621 xnt[7] = meanInRange_1410a1415Freq_OFF_noCalib(0);
1622 xnt[8] = meanInRange_1410a1415Freq_OFF_noCalib(1);
1623
1624 TMatrix<r_4> aSpecOnovOff(aSpecOn,false);
1625 aSpecOnovOff.Div(aSpecOffFiltered);
1626
1627 TVector<r_4> meanInRange_1410a1415Freq_ON_noCalib(NUMBER_OF_CHANNELS);
1628 meanInRange(aSpecOnovOff,ch1410,ch1415,meanInRange_1410a1415Freq_ON_noCalib);
1629
1630 xnt[9] = meanInRange_1410a1415Freq_ON_noCalib(0);
1631 xnt[10] = meanInRange_1410a1415Freq_ON_noCalib(1);
1632
1633 //store infos to Ntuple
1634 onoffevolution.Fill(xnt);
1635
1636 //Quit if enough
1637 if (totalNumberCycles >= para.maxNumberCycles_) break;
1638 }//end of cycles
1639
1640 if (totalNumberCycles >= para.maxNumberCycles_) break;
1641
1642 }//end files
1643 cout << "End of jobs: we have treated " << totalNumberCycles << " cycles" << endl;
1644 //Normalisation
1645 if(totalNumberCycles > 0){
1646 meanDiffONOFFovOFF_noCalib /= (r_4)totalNumberCycles;
1647 meanDiffONOFF_noCalib /= (r_4)totalNumberCycles;
1648 meanONovOFF_noCalib /= (r_4)totalNumberCycles;
1649 meanOFFovOFF_noCalib /= (r_4)totalNumberCycles;
1650 }
1651
1652 {//save results
1653 stringstream tmp;
1654 tmp << totalNumberCycles;
1655 string fileName = para.outPath_+"/rawOnOffDiff_"+StringToLower(para.sourceName_)+"-"+tmp.str()+"Cycles.ppf";
1656
1657 POutPersist fos(fileName);
1658 cout << "Save output in " << fileName << endl;
1659
1660 string tag = "meanNoCalib";
1661 fos << PPFNameTag(tag) << meanDiffONOFF_noCalib;
1662
1663 tag = "meanOvOffNoCalib";
1664 fos << PPFNameTag(tag) << meanDiffONOFFovOFF_noCalib;
1665
1666 tag = "meanOnovOffNoCalib";
1667 fos << PPFNameTag(tag) << meanONovOFF_noCalib;
1668
1669 tag = "meanOffovOffNoCalib";
1670 fos << PPFNameTag(tag) << meanOFFovOFF_noCalib;
1671
1672 tag = "onoffevol";
1673 fos << PPFNameTag(tag) << onoffevolution;
1674
1675 }//end save
1676}
1677//JEC 14/11/11 New meanRawDiffOnOffCycles END
1678//-------------------------------------------------------
1679//Compute the median of Diff ON-OFF Raw spectra and also the mean/sigma of rebinned spectra
1680//Used like:
1681//
1682void medianRawDiffOnOffCycles() throw(string) {
1683 list<string> listOfFiles;
1684 string directoryName;
1685 directoryName = para.inPath_ + "/" + para.sourceName_;
1686
1687 //Make the listing of the directory
1688 listOfFiles = ListOfFileInDir(directoryName,para.ppfFile_);
1689
1690 list<string>::const_iterator iFile, iFileEnd, iSpec, iSpecEnd;
1691 iFileEnd = listOfFiles.end();
1692
1693
1694 TArray<r_4> tableOfSpectra(NUMBER_OF_FREQ,NUMBER_OF_CHANNELS,para.maxNumberCycles_); //para.maxNumberCycles_ should be large enough...
1695
1696 StringMatch match("specONOFFRaw[0-9]+"); //Tag of the PPF objects
1697 uint_4 nSpectra=0;
1698 //Loop on files
1699 for (iFile = listOfFiles.begin(); iFile != iFileEnd; ++iFile) {
1700 if (para.debuglev_>90){
1701 cout << "load file <" << *iFile << ">" << endl;
1702 }
1703 PInPersist fin(*iFile);
1704 vector<string> vec = fin.GetNameTags();
1705 list<string> listOfSpectra;
1706 //Keep only required PPF objects
1707 std::remove_copy_if(
1708 vec.begin(), vec.end(), back_inserter(listOfSpectra),
1709 not1(match)
1710 );
1711
1712 listOfSpectra.sort(stringCompare);
1713 iSpecEnd = listOfSpectra.end();
1714 //Loop of spectra matrix
1715 for (iSpec = listOfSpectra.begin(); iSpec !=iSpecEnd && (sa_size_t)nSpectra < para.maxNumberCycles_ ; ++iSpec){
1716 if (para.debuglev_>90){
1717 cout << " spactra <" << *iSpec << ">" << endl;
1718 }
1719 TMatrix<r_4> aSpec(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
1720 fin.GetObject(aSpec,*iSpec);
1721
1722 tableOfSpectra(Range::all(),Range::all(),Range(nSpectra)) = aSpec;
1723
1724 nSpectra++;
1725 }//eo loop on spectra in a file
1726 }//eo loop on files
1727
1728
1729
1730 TMatrix<r_4> medianOfSpectra(NUMBER_OF_CHANNELS,NUMBER_OF_FREQ);
1731 //Compute the median for each freq. and Channel
1732 for (sa_size_t iCh=0; iCh<NUMBER_OF_CHANNELS; iCh++){
1733 for (sa_size_t freq =0; freq<NUMBER_OF_FREQ; freq++){
1734 TVector<r_4> tmp0(tableOfSpectra(Range(freq),Range(iCh),Range(0,nSpectra-1)).CompactAllDimensions());
1735 vector<r_4> tmp;
1736 tmp0.FillTo(tmp);
1737 medianOfSpectra(iCh,freq) = median(tmp.begin(),tmp.end());
1738 }
1739 }
1740
1741
1742 //Compute the reduced version of the mean and sigma
1743 TMatrix<r_4> meanRedMtx(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
1744 TMatrix<r_4> sigmaRedMtx(NUMBER_OF_CHANNELS,para.nSliceInFreq_);
1745 reduceSpectra(medianOfSpectra,meanRedMtx,sigmaRedMtx);
1746
1747
1748 sa_size_t f1320=freqToChan(1320.);
1749 sa_size_t f1345=freqToChan(1345.);
1750 sa_size_t f1355=freqToChan(1355.);
1751 sa_size_t f1380=freqToChan(1380.);
1752 //Compute baseline arround 1350Mhz on [1320-1345] U [1355-1380]
1753 if (para.debuglev_>9){
1754 cout << "Compute baseline arround 1350Mhz on [1320-1345] U [1355-1380]" << endl;
1755 }
1756 TVector<r_4>meanMed(NUMBER_OF_CHANNELS);
1757 for (sa_size_t iCh=0; iCh<NUMBER_OF_CHANNELS; ++iCh){
1758 double meanMed1;
1759 double sigmaMed1;
1760 TVector<r_4> band1;
1761 band1 = medianOfSpectra(Range(iCh),Range(f1320,f1345)).CompactAllDimensions();
1762 MeanSigma(band1,meanMed1,sigmaMed1);
1763 double meanMed2;
1764 double sigmaMed2;
1765 TVector<r_4> band2;
1766 band2 = medianOfSpectra(Range(iCh),Range(f1355,f1380)).CompactAllDimensions();
1767 MeanSigma(band2,meanMed2,sigmaMed2);
1768 meanMed(iCh) = (meanMed1+meanMed2)*0.5;
1769 }
1770 meanMed.Print(cout);
1771 cout << endl;
1772
1773
1774 //Compute the sigma in the range 1320MHz-1380MHz
1775 if (para.debuglev_>9){
1776 cout << "Compute the sigma in the range 1320MHz-1380MHz" << endl;
1777 }
1778 TVector<r_4>sigmaMed(NUMBER_OF_CHANNELS);
1779 sa_size_t redf1320=(sa_size_t)((1320.0-LOWER_FREQUENCY)/TOTAL_BANDWIDTH*para.nSliceInFreq_);
1780 sa_size_t redf1380=(sa_size_t)((1380.0-LOWER_FREQUENCY)/TOTAL_BANDWIDTH*para.nSliceInFreq_);
1781
1782 for (sa_size_t iCh=0; iCh<NUMBER_OF_CHANNELS; ++iCh){
1783 double meanSigma;
1784 double sigmaSigma;
1785 TVector<r_4> band;
1786 band = sigmaRedMtx(Range(iCh),Range(redf1320,redf1380)).CompactAllDimensions();
1787 MeanSigma(band,meanSigma,sigmaSigma);
1788 meanSigma *= sqrt(para.nSliceInFreq_); //to scale to orignal spectra
1789 sigmaMed(iCh) = meanSigma;
1790 }
1791 sigmaMed.Print(cout);
1792 cout << endl;
1793
1794
1795
1796 if (para.debuglev_>9){
1797 cout << "Compute medianOfSpectraNorm" << endl;
1798 }
1799 TMatrix<r_4> medianOfSpectraNorm(medianOfSpectra,false); //do not share the data...
1800 for (sa_size_t iCh=0; iCh<NUMBER_OF_CHANNELS; ++iCh){
1801 medianOfSpectraNorm.Row(iCh) -= meanMed(iCh);
1802 medianOfSpectraNorm.Row(iCh) /= sigmaMed(iCh);
1803 }
1804
1805
1806
1807 {//Save the result
1808 stringstream tmp;
1809 tmp << nSpectra;
1810 string fileName = para.outPath_+"/medianDiffOnOffRaw_"+StringToLower(para.sourceName_)+"-"+tmp.str()+"Cycles.ppf";
1811 cout << "Save median based on " << nSpectra << " cycles " << endl;
1812 POutPersist fos(fileName);
1813
1814 string tag = "median";
1815 fos << PPFNameTag(tag) << medianOfSpectra;
1816
1817 tag = "medianNorm";
1818 fos << PPFNameTag(tag) << medianOfSpectraNorm;
1819
1820
1821 tag = "meanmedred";
1822 fos << PPFNameTag(tag) << meanRedMtx;
1823 tag = "sigmamedred";
1824 fos << PPFNameTag(tag) << sigmaRedMtx;
1825 tag = "cycleVsfreq";
1826
1827 TArray<r_4> tarr(tableOfSpectra(Range::all(),Range::all(),Range(0,nSpectra-1)));
1828 fos << PPFNameTag(tag) << tarr;
1829 }
1830}
1831
1832//-------------------------------------------------------
1833int main(int narg, char* arg[]) {
1834
1835 int rc = 0; //return code
1836 string msg; //message used in Exceptions
1837
1838
1839
1840 //default value for initial parameters (see Para structure on top of the file)
1841 string debuglev = "0";
1842 string action = "meanDiffOnOff";
1843 string inputPath = ".";
1844 string outputPath = ".";
1845 string sourceName = "Abell85";
1846 string ppfFile;
1847 string nSliceInFreq = "32";
1848 string typeOfCalib="perRun";
1849 string calibFreq = "1346";
1850 string calibBandFreq="6.25";
1851 string mxcycles;
1852
1853 // bool okarg=false;
1854 int ka=1;
1855 while (ka<narg) {
1856 if (strcmp(arg[ka],"-h")==0) {
1857 cout << "Usage: -act [meanRawDiffOnOff]|medianRawDiffOnOff|meanCalibBAODiffOnOff\n"
1858 << " -mxcycles <number> (max. number of cycles to be treated)\n"
1859 << " -calibfreq <number> (cf. freq. used by calibration operation)\n"
1860 << " -calibbandfreq <number> (cf. band of freq. used by calibration operation)\n"
1861 << " -src [Abell85]\n"
1862 << " -inPath [.]|<top_root_dir of the ppf file>\n"
1863 << " (ex. /sps/baoradio/AmasNancay/JEC/\n "
1864 << " -outPath [.]|<dir of the output> \n"
1865 << " -nSliceInFreq [32]|<number of bin in freq. to cumulate>\n"
1866 << " -ppfFile <generic name of the input ppf files> (ex. diffOnOffRaw)\n"
1867 << " -debug <level> "
1868 << endl;
1869 return 0;
1870 }
1871 else if (strcmp(arg[ka],"-debug")==0) {
1872 debuglev=arg[ka+1];
1873 ka+=2;
1874 }
1875 else if (strcmp(arg[ka],"-act")==0) {
1876 action=arg[ka+1];
1877 ka+=2;
1878 }
1879 else if (strcmp(arg[ka],"-calibfreq")==0) {
1880 calibFreq=arg[ka+1];
1881 ka+=2;
1882 }
1883 else if (strcmp(arg[ka],"-calibbandfreq")==0) {
1884 calibBandFreq=arg[ka+1];
1885 ka+=2;
1886 }
1887 else if (strcmp(arg[ka],"-mxcycles")==0) {
1888 mxcycles=arg[ka+1];
1889 ka+=2;
1890 }
1891 else if (strcmp(arg[ka],"-inPath")==0) {
1892 inputPath=arg[ka+1];
1893 ka+=2;
1894 }
1895 else if (strcmp(arg[ka],"-outPath")==0) {
1896 outputPath=arg[ka+1];
1897 ka+=2;
1898 }
1899 else if (strcmp(arg[ka],"-src")==0) {
1900 sourceName=arg[ka+1];
1901 ka+=2;
1902 }
1903 else if (strcmp(arg[ka],"-ppfFile")==0) {
1904 ppfFile=arg[ka+1];
1905 ka+=2;
1906 }
1907 else if (strcmp(arg[ka],"-nSliceInFreq")==0) {
1908 nSliceInFreq=arg[ka+1];
1909 ka+=2;
1910 }
1911 else ka++;
1912 }//eo while
1913
1914 para.debuglev_ = atoi(debuglev.c_str());
1915 para.inPath_ = inputPath;
1916 para.outPath_ = outputPath;
1917 para.sourceName_ = sourceName;
1918 para.ppfFile_ = ppfFile;
1919 para.nSliceInFreq_ = atoi(nSliceInFreq.c_str());
1920 para.calibFreq_ = calibFreq;
1921 para.calibBandFreq_ = calibBandFreq;
1922 para.rcalibFreq_ = atof(calibFreq.c_str());
1923 para.rcalibBandFreq_ = atof(calibBandFreq.c_str());
1924 if (mxcycles != "") {
1925 para.maxNumberCycles_ = atoi(mxcycles.c_str());
1926 } else {
1927 para.maxNumberCycles_ = std::numeric_limits<int>::max();
1928 }
1929
1930 cout << "Dump Initial parameters ............" << endl;
1931 cout << " action = " << action << "\n"
1932 << " maxNumberCycles = " << para.maxNumberCycles_ << "\n"
1933 << " inputPath = " << para.inPath_ << "\n"
1934 << " outputPath = " << para.outPath_ << "\n"
1935 << " sourceName = " << para.sourceName_ << "\n"
1936 << " ppfFile = " << para.ppfFile_ << "\n"
1937 << " nSliceInFreq = " << para.nSliceInFreq_ << "\n"
1938 << " calibFreq = " << para.calibFreq_ << "\n"
1939 << " calibBandFreq = " << para.calibBandFreq_ << "\n"
1940 << " debuglev = " << para.debuglev_ << "\n";
1941 cout << "...................................." << endl;
1942
1943 if ( "" == ppfFile ) {
1944 cerr << "mergeAnaFiles.cc: you have forgotten ppfFile option"
1945 << endl;
1946 return 999;
1947 }
1948
1949
1950 try {
1951
1952// int b,e;
1953// char *match=regexp("truc0machin","[a-z]+[0-9]*",&b,&e);
1954// printf("->%s<-\n(b=%d e=%d)\n",match,b,e);
1955
1956 if ( action == "meanRawDiffOnOff" ) {
1957 meanRawDiffOnOffCycles();
1958 } else if (action == "medianRawDiffOnOff") {
1959 medianRawDiffOnOffCycles();
1960 } else if (action == "meanCalibBAODiffOnOff") {
1961 meanCalibBAODiffOnOffCycles();
1962 } else if (action == "calibCoeffNtp") {
1963 calibCoeffNtp();
1964 } else {
1965 msg = "Unknown action " + action;
1966 throw msg;
1967 }
1968
1969
1970 } catch (std::exception& sex) {
1971 cerr << "mergeRawOnOff.cc std::exception :" << (string)typeid(sex).name()
1972 << "\n msg= " << sex.what() << endl;
1973 rc = 78;
1974 }
1975 catch ( string str ) {
1976 cerr << "mergeRawOnOff.cc Exception raised: " << str << endl;
1977 }
1978 catch (...) {
1979 cerr << "mergeRawOnOff.cc catched unknown (...) exception " << endl;
1980 rc = 79;
1981 }
1982
1983 return 0;
1984
1985}
Note: See TracBrowser for help on using the repository browser.