3 #include "TTreeFormula.h"
8 #define CCAST(PAR) const_cast<char*>(PAR) \
17 #define MAX_THREADS 16
19 #define MAX_TREE_SIZE 100000000000LL
34 MergeParms mp = *((MergeParms*) ptr);
38 sprintf(ofName,
"%s/mergeList.T%d.txt",mp.odir.Data(),mp.threadID);
44 sprintf(cmd,
"root -l -b '%s/cwb_merge_thread.C(\"%s\",%d,\"%s\",\"%s\",%d,%d,%d)'",
45 gSystem->ExpandPathName(
"$CWB_MACROS"),
ofName, mp.simulation,
46 mp.odir.Data(), mp.label.Data(), mp.brms, mp.bvar, mp.bpsm);
50 gSystem->Exec(TString::Format(
"rm %s",ofName));
70 cout <<
"CWB::Toolbox::readSegments - Error Opening File : " << ifile << endl;
80 vector<waveSegment>
iseg;
84 if(str[0] ==
'#')
continue;
85 in.seekg(fpos, ios::beg);
89 if (!in.good())
break;
117 vector<waveSegment> vsegs;
118 int n = ilist.size();
119 if(n==0)
return vsegs;
125 for(
int i=0;
i<
n;
i++) {
127 cout <<
"CWB::Toolbox::unionSegments - Error : start must be <= stop - start = "
128 << ilist[
i].start <<
" stop = " << ilist[
i].stop << endl;
132 cout <<
"CWB::Toolbox::unionSegments - Error : start must be positive - start = "
133 << ilist[
i].start << endl;
140 double right_most = -1;
142 for (
int i = 0 ;
i <
n ;
i++) {
143 if (isegs[
i].
start > right_most) {
144 right_most = isegs[
i].
stop;
149 if (isegs[
i].
stop > right_most) {
150 right_most = isegs[
i].
stop;
157 for(
int i=0;
i<cnt+1;
i++)
if(osegs[
i].
stop>0) {seg=osegs[
i];seg.
index=vcnt++;vsegs.push_back(seg);}
176 int size = ilist.size();
181 start[
i] = ilist[
i].start;
182 stop[
i] = ilist[
i].stop;
187 Int_t *
id =
new Int_t[
size];
188 TMath::Sort(size,start,
id,
false);
191 if(start[
id[
i]]<=0) flag=
false;
192 if(start[
id[
i]]>stop[
id[
i]]) flag=
false;
193 if(start[
id[i]]<stop[
id[i-1]]) flag=
false;
196 cout <<
"CWB::Toolbox::invertSegments - Error in segment list (duplicated veto) : " << endl;
197 cout <<
id[i-1]+1 <<
" " << start[
id[i-1]] <<
" " << stop[
id[i-1]] <<
" flag " << flag << endl;
198 cout <<
id[
i]+1 <<
" " << start[
id[
i]] <<
" " << stop[
id[
i]] <<
" flag " << flag << endl;
205 vector<waveSegment>
olist;
215 SEG.
stop = stop[
id[
i]];
216 ctime+=stop[
id[
i]]-start[
id[
i]];
217 olist.push_back(SEG);
244 int size = ilist.size();
249 start[
i] = ilist[
i].start;
250 stop[
i] = ilist[
i].stop;
255 Int_t *
id =
new Int_t[
size];
256 TMath::Sort(size,start,
id,
false);
259 if(start[
id[
i]]<=0) flag=
false;
260 if(start[
id[
i]]>stop[
id[
i]]) flag=
false;
261 if(start[
id[i]]<stop[
id[i-1]]) flag=
false;
264 cout <<
"CWB::Toolbox::invertSegments - Error in segment list (duplicated veto) : " << endl;
265 cout <<
id[i-1]+1 <<
" " << start[
id[i-1]] <<
" " << stop[
id[i-1]] <<
" flag " << flag << endl;
266 cout <<
id[
i]+1 <<
" " << start[
id[
i]] <<
" " << stop[
id[
i]] <<
" flag " << flag << endl;
273 vector<waveSegment>
olist;
282 SEG.
stop = start[
id[0]];
283 olist.push_back(SEG);
284 for(
int i=0;
i<size-1;
i++) {
287 SEG.
stop = start[
id[
i+1]];
289 olist.push_back(SEG);
292 SEG.
start = stop[
id[size-1]];
293 SEG.
stop = 4000000000;
294 olist.push_back(SEG);
314 for (
int i = 0;
i <
n;
i++)
317 f = ((double)
i) / ((double) (n - 1));
318 window[
i] = 0.35875 -
325 for (
int i=0;
i<
n;
i++) norm += pow(window[
i],2);
327 for (
int i=0;i<
n;i++) window[i] /= sqrt(norm);
354 int n1=ilist1.size();
355 int n2=ilist2.size();
360 vector<waveSegment>
olist;
364 while (i<n1 && j<n2) {
365 if (ilist2[j].stop<=ilist1[i].start) j++;
366 else if (ilist1[i].stop <= ilist2[j].start) i++;
368 if (ilist2[j].start < ilist1[i].start) start=ilist1[
i].start;
369 else start = ilist2[
j].start;
370 if (ilist2[j].stop > ilist1[i].stop) stop=ilist1[
i].stop;
371 else stop=ilist2[
j].stop;
372 if (ilist2[j].stop >= ilist1[i].stop) i++;
379 olist.push_back(SEG);
403 vector<waveSegment>
olist;
409 if (!in.good()) {cout <<
"CWB::Toolbox::readSegList - Error Opening File : " << DQF.
file << endl;gSystem->Exit(1);}
415 in.getline(str,1024);
416 if (!in.good())
break;
417 if(str[0] !=
'#') size++;
420 in.clear(ios::goodbit);
421 in.seekg(0, ios::beg);
422 if (size==0) {cout <<
"CWB::Toolbox::readSegList - Error : File " << DQF.
file <<
" is empty" << endl;gSystem->Exit(1);}
430 in.getline(str,1024);
431 if(str[0] ==
'#')
continue;
432 in.seekg(fpos, ios::beg);
435 if(DQF.
c4) in >> dummy >> start[
N] >> stop[
N] >> dummy;
436 else in >> start[
N] >> stop[
N];
437 if (!in.good())
break;
440 if(stop[N]<=start[N]) {
442 cout <<
"CWB::Toolbox::readSegList - Error Ranges : " << start[
N] <<
" " << stop[
N] << endl;
447 cout <<
"CWB::Toolbox::readSegList - Error Max Range : " << N <<
" " << size << endl;
455 Int_t *
id =
new Int_t[
N];
456 TMath::Sort(N,start,
id,
false);
457 for(
int i=1;
i<
N;
i++) {
459 if(start[
id[
i]]<=0) flag=
false;
460 if(start[
id[
i]]>stop[
id[
i]]) flag=
false;
461 if(start[
id[i]]<stop[
id[i-1]]) flag=
false;
464 cout <<
"CWB::Toolbox::readSegList - Error in segment list file (duplicated veto) : " << DQF.
file << endl;
465 cout <<
id[i-1]+1 <<
" " << start[
id[i-1]] <<
" " << stop[
id[i-1]] <<
" flag " << flag << endl;
466 cout <<
id[
i]+1 <<
" " << start[
id[
i]] <<
" " << stop[
id[
i]] <<
" flag " << flag << endl;
480 SEG.
stop = start[
id[0]];
481 olist.push_back(SEG);
482 for(
int i=0;
i<N-1;
i++) {
485 SEG.
stop = start[
id[
i+1]];
487 olist.push_back(SEG);
490 SEG.
start = stop[
id[N-1]];
491 SEG.
stop = 4000000000;
492 olist.push_back(SEG);
494 for(
int i=0;
i<
N;
i++) {
497 SEG.
stop = stop[
id[
i]];
498 ctime+=stop[
id[
i]]-start[
id[
i]];
499 olist.push_back(SEG);
524 vector<waveSegment>
olist;
529 if(DQF[
n].
cat<=dqcat) dqf[ndqf++]=DQF[
n];
532 cout <<
"CWB::Toolbox::readSegList - no CWB_CAT=" << dqcat <<
" files in the list" << endl;
536 vector<waveSegment>*
list =
new vector<waveSegment>[ndqf];
538 for(
int n=0;
n<ndqf;
n++) list[
n]=readSegList(dqf[
n]);
541 for(
int n=1;n<ndqf;n++) olist = mergeSegLists(list[n],olist);
543 for(
int n=0;n<ndqf;n++) list[n].
clear();
564 if((fP = fopen(fName.Data(),
"w")) == NULL) {
565 cout <<
"cannot open output file " << fName.Data() <<
". \n";
568 cout <<
"Write output file : " << fName.Data() << endl;
571 fprintf(fP,
"# seg start stop duration\n");
572 for(
int i=0;
i<(
int)list.size();
i++) {
574 fprintf(fP,
"%-d\t%-d\t%-d\t%-d\n",
578 int(list[
i].stop-list[
i].start));
617 vector<waveSegment>
olist;
618 olist=getJobList(ilist, segLen, segMLS, segEdge);
651 cout << endl <<
"CWB::Toolbox::getJobList - Error : segMLS must be <= segLen" << endl;
652 cout <<
"segMLS = " << segMLS <<
" - segLen = " << segLen << endl << endl;
659 int size = ilist.size();
661 vector<waveSegment>
olist;
668 start = fmod(ilist[
i].start,1)!=0 ?
int(ilist[
i].start+1) : ilist[
i].start;
669 stop = fmod(ilist[
i].stop ,1)!=0 ?
int(ilist[
i].stop) : ilist[
i].stop;
685 olist.push_back(SEG);
691 half=
int(remainder/2);
696 olist.push_back(SEG);
700 olist.push_back(SEG);
705 olist.push_back(SEG);
711 olist.push_back(SEG);
716 for(
int j=0;
j<n-1;
j++) {
720 olist.push_back(SEG);
722 remainder=stop-SEG.
stop;
723 half=
int(remainder/2);
728 olist.push_back(SEG);
732 olist.push_back(SEG);
737 olist.push_back(SEG);
741 printf(
"Toolbox::getJobList : lost livetime after building of the standard job list = %d sec\n",lostlivetime);
765 vector<waveSegment> jobList1=getJobList(cat1List, segLen, segMLS, segEdge);
768 vector<waveSegment> jobList2;
769 for(
int i=0;
i<jobList1.size();
i++) {
772 detSegs_dq2.push_back(jobList1[
i]);
773 detSegs_dq2 = mergeSegLists(detSegs_dq2,cat2List);
775 if(detSegs_ctime<segTHR) {
776 cout <<
"CWB::Toolbox::getJobList : job segment=" << i+1
777 <<
" live time after cat2 : " << detSegs_ctime << endl;
778 cout <<
" segTHR=" << segTHR
779 <<
" sec -> job removed !!!" << endl;
781 jobList2.push_back(jobList1[i]);
847 if(slagSize<1) slagSize=1;
849 if((
int)slagMax>slagSegs) {
850 cout <<
"CWB::Toolbox::makeSlagList : Error - slagMax must be < slagSegs" << endl;
855 cout <<
"CWB::Toolbox::makeSlagList : Error - slagSegs must be positive" << endl;
859 if((slagMax>0)&&(slagMin>slagMax)) {
860 cout <<
"CWB::Toolbox::getSlagList : Error - slagMin must be < slagMax" << endl;
864 if(slagSite!=NULL)
for(
int n=0;
n<(
int)nIFO;
n++) {
865 if(slagSite[
n] >= nIFO) {
866 cout <<
"CWB::Toolbox::getSlagList : Error slagSite - value out of range " << endl;
876 cout << endl <<
"CWB::Toolbox::getSlagList : read slags from file -> " << slagFile << endl;
881 cout <<
"CWB::Toolbox::getSlagList : Error Opening File : " << slagFile << endl;
891 in.getline(str,1024);
892 if(str[0] ==
'#')
continue;
893 in.seekg(fpos, ios::beg);
897 if (!in.good())
break;
899 for(
int j=0;
j<(
int)slagList.size();
j++) {
900 if(
id==slagList[
j].
jobId) {
901 cout <<
"CWB::Toolbox::getSlagList : duplicated slag id "
902 <<
" or wrong format in slag file -> " << slagFile << endl;
907 for(
int n=0;
n<(
int)nIFO;
n++) {
908 in >>
id; SLAG.
slagId.push_back(
id);
910 slagList.push_back(SLAG);
911 if (slagList.size()==
size)
break;
912 if (!in.good())
break;
917 if(size>slagList.size()) {
918 cout <<
"CWB::Toolbox::getSlagList : Error - slagOff+slagSize " << size <<
" is > entries in slagFile " << slagList.size() << endl;
924 cout << endl <<
"CWB::Toolbox::getSlagList : built-in slags" << endl;
928 for(
int n=0;
n<(
int)nIFO;
n++) {
931 for(
int m=0;
m<(
int)ifo.size();
m++)
if((
int)slagSite[
n]==ifo[
m]) unique=
false;
932 if(unique) ifo.push_back(slagSite[
n]);
944 for(
int n=0;
n<(
int)nIFO;
n++) SLAG.
slagId.push_back(0);
945 slagList.push_back(SLAG);
947 for(
int m=(
int)slagMin;
m<=(
int)slagMax;
m++) {
950 int nifo = ifo.size();
952 getSlagList(slags,size,
m,nifo,
id);
954 gRandom->SetSeed(
m+1);
955 while(slags.size()>0) {
956 int k =
int(gRandom->Uniform(0,
int(slags.size())));
957 slags[
k].jobId=jobId++;
958 slagList.push_back(slags[k]);
959 slags.erase(slags.begin()+
k);
964 for(
int j=0;
j<(
int)slagList.size();
j++) {
965 slag SLAG = slagList[
j];
966 slagList[
j].slagId.resize(nIFO);
967 for(
int n=0;
n<(
int)nIFO;
n++) {
968 for(
int m=0;
m<(
int)ifo.size();
m++)
969 if((
int)slagSite[
n]==ifo[
m]) slagList[
j].slagId[
n] = SLAG.
slagId[
m];
975 if((slagSize>slagList.size()-
slagOff)) {
976 cout <<
"CWB::Toolbox::getSlagList : Error - the number of available slags = "
977 << slagList.size() <<
" are less than the requested slag (slagSize) = " << slagSize << endl;
986 for(
int i=(
int)slagOff;
i<
int(slagOff+slagSize);
i++) {
997 for(
int j=(
int)slagOff;
j<
int(slagOff+slagSize);
j++){
1001 for (
int n=0;
n<(
int)nIFO;
n++)
if((
k+slagList[
j].slagId[
n])>
slagSegs) check=
false;
1002 for (
int n=0; n<(
int)nIFO; n++)
if((
k+slagList[
j].slagId[n])<0) check=
false;
1008 SLAG.
slagId.push_back(++nseg);
1009 for(
int n=0; n<(
int)nIFO; n++) {
1010 SLAG.
slagId.push_back(slagList[
j].slagId[n]);
1011 SLAG.
segId.push_back(slagList[
j].slagId[n]+
k);
1013 slist.push_back(SLAG);
1036 if(slagSize && ((
int)slagList.size()==
slagSize))
return;
1037 for(
int j=-slagRank;
j<=slagRank;
j++) {
1040 for(
int n=0;
n<(
int)
id.
size();
n++)
if(
j==
id[
n]) unique=
false;
1041 if(!unique)
continue;
1045 for(
int n=0; n<(
int)
id.
size(); n++) m+=abs(
id[n]);
1048 SLAG.
jobId=slagList.size();
1049 SLAG.
slagId.push_back(0);
1050 for(
int n=0; n<(
int)
id.
size(); n++) SLAG.
slagId.push_back(
id[n]);
1051 slagList.push_back(SLAG);
1052 if(slagSize && ((
int)slagList.size()==
slagSize))
return;
1054 id.resize(
id.
size()-1);
1058 getSlagList(slagList, slagSize, slagRank, nifo-1,
id);
1059 id.resize(
id.
size()-1);
1084 if(((
int)slagList.size()>0)&&(slagFile!=
"")) {
1087 if((fP = fopen(slagFile.Data(),
"w")) == NULL) {
1088 cout <<
"CWB::Toolbox::makeSlagList : Error - cannot open file " << slagFile.Data() << endl;
1092 int nIFO = slagList[0].segId.size();
1097 fprintf(fP,
"# Super Lags List - %d jobs\n",(
int)slagList.size());
1099 fprintf(fP,
"# nIFO %13d\n",
int(nIFO));
1108 for(
int j=0;
j<(
int)slagList.size();
j++){
1110 if(slagList[
j].slagId[1]==1) {
1111 fprintf(fP,
"%14d", slagList[
j].slagId[0]);
1117 fprintf(fP,
"%14d", slagList[
j].slagId[0]);
1145 vector<waveSegment> _jobList(jobList.size());
1146 for(
int i=0;
i<(
int)jobList.size();
i++) _jobList[
i].
index=jobList[
i];
1147 return createDagFile(_jobList, condor_dir, label, jobFiles, stage, jobmin, jobmax);
1165 return createDagFile(jobList, condor_dir, label, jobFiles,
"CWB_STAGE_FULL", jobmin, jobmax);
1184 if(jobFiles.size()==0) {
1186 if(gSystem->Getenv(
"CWB_UPARAMETERS_FILE")!=NULL) {
1187 cwb_uparameters_file=
TString(gSystem->Getenv(
"CWB_UPARAMETERS_FILE"));
1188 if(cwb_uparameters_file!=
"")
checkFile(cwb_uparameters_file);
1189 jobFiles.resize(jobList.size());
1190 for(
int n=0;
n<(
int)jobFiles.size();
n++) jobFiles[
n]=cwb_uparameters_file;
1192 cout <<
"CWB::Toolbox::createDagFile : Error - CWB_UPARAMETERS_FILE env is not defined" << endl;
1196 if(jobFiles.size()!=jobList.size()) {
1197 cout <<
"CWB::Toolbox::createDagFile : Error - jobFiles size " << jobFiles.size() <<
1198 "is != jobList size " << jobList.size() << endl;
1203 int end = jobmax<1||jobmax>(
int)jobList.size() ? jobList.size() :
jobmax;
1206 sprintf(ofile,
"%s/%s.dag",condor_dir.Data(),label.Data());
1213 if(jobFiles[
n-1]==
"")
continue;
1214 jID = jobList[
n-1].index;
1216 sprintf(ostring,
"JOB A%i %s/%s.sub",jID,condor_dir.Data(),label.Data());
1217 out << ostring << endl;
1218 sprintf(ostring,
"VARS A%i PID=\"%i\" CWB_UFILE=\"%s\" CWB_STAGE=\"%s\"",
1219 jID,jID,jobFiles[
n-1].Data(),stage.Data());
1220 out << ostring << endl;
1221 if(gSystem->Getenv(
"_USE_OSG")!=NULL) {
1222 sprintf(ostring,
"SCRIPT POST A%i %s/cwb_net_osg_post.sh %i",jID,gSystem->Getenv(
"CWB_SCRIPTS"),jID);
1223 out << ostring << endl;
1225 sprintf(ostring,
"RETRY A%i 3000",jID);
1226 out << ostring << endl;
1248 return createDagFile(slagList, condor_dir, label, jobFiles,
"CWB_STAGE_FULL", jobmin, jobmax);
1267 if(jobFiles.size()==0) {
1269 if(gSystem->Getenv(
"CWB_UPARAMETERS_FILE")!=NULL) {
1270 cwb_uparameters_file=
TString(gSystem->Getenv(
"CWB_UPARAMETERS_FILE"));
1271 if(cwb_uparameters_file!=
"")
checkFile(cwb_uparameters_file);
1272 jobFiles.resize(slagList.size());
1273 for(
int n=0;
n<(
int)jobFiles.size();
n++) jobFiles[
n]=cwb_uparameters_file;
1275 cout <<
"CWB::Toolbox::createDagFile : Error - CWB_UPARAMETERS_FILE env is not defined" << endl;
1279 if(jobFiles.size()!=slagList.size()) {
1280 cout <<
"CWB::Toolbox::createDagFile : Error - jobFiles size " << jobFiles.size() <<
1281 "is != slagList size " << slagList.size() << endl;
1286 int end = jobmax<1||jobmax>(
int)slagList.size() ? slagList.size() :
jobmax;
1289 sprintf(ofile,
"%s/%s.dag",condor_dir.Data(),label.Data());
1296 if(jobFiles[
n-1]==
"")
continue;
1297 jID = slagList[
n-1].jobId;
1299 sprintf(ostring,
"JOB A%i %s/%s.sub",jID,condor_dir.Data(),label.Data());
1300 out << ostring << endl;
1301 sprintf(ostring,
"VARS A%i PID=\"%i\" CWB_UFILE=\"%s\" CWB_STAGE=\"%s\"",
1302 jID,jID,jobFiles[
n-1].Data(),stage.Data());
1303 out << ostring << endl;
1304 sprintf(ostring,
"RETRY A%i 3000",jID);
1305 out << ostring << endl;
1306 if(gSystem->Getenv(
"_USE_OSG")!=NULL) {
1307 sprintf(ostring,
"SCRIPT POST A%i %s/cwb_net_osg_post.sh",jID,gSystem->Getenv(
"CWB_SCRIPTS"));
1308 out << ostring << endl;
1332 sprintf(ofile,
"%s/%s.sub",condor_dir.Data(),label.Data());
1334 sprintf(ofile,
"%s/%s.sub.%s",condor_dir.Data(),label.Data(),ext.Data());
1337 if((fP = fopen(ofile,
"w")) == NULL) {
1338 cout <<
"CWB::Toolbox::createSubFile : Error - cannot open file " << ofile << endl;
1342 fprintf(fP,
"universe = vanilla\n");
1343 fprintf(fP,
"getenv = true\n");
1344 fprintf(fP,
"priority = $(PRI)\n");
1345 fprintf(fP,
"on_exit_hold = ( ExitCode != 0 )\n");
1346 fprintf(fP,
"request_memory = 3000\n");
1347 fprintf(fP,
"executable = cwb.sh\n");
1348 fprintf(fP,
"job_machine_attrs = Machine\n");
1349 fprintf(fP,
"job_machine_attrs_history_length = 5\n");
1350 fprintf(fP,
"requirements = target.machine =!= MachineAttrMachine1 && target.machine =!= MachineAttrMachine2 && target.machine =!= MachineAttrMachine3 && target.machine =!= MachineAttrMachine4 && target.machine =!= MachineAttrMachine5\n");
1351 fprintf(fP,
"environment = CWB_JOBID=$(PID);CWB_UFILE=$(CWB_UFILE);CWB_STAGE=$(CWB_STAGE)\n");
1352 if(condor_tag!=
"")
fprintf(fP,
"accounting_group = %s\n",condor_tag.Data());
1353 fprintf(fP,
"output = %s/$(PID)_%s_$(CWB_STAGE).out\n",out_dir.Data(),label.Data());
1354 fprintf(fP,
"error = %s/$(PID)_%s_$(CWB_STAGE).err\n",err_dir.Data(),label.Data());
1355 if(gSystem->Getenv(
"_USE_OSG")!=NULL) {
1358 fprintf(fP,
"log = %s/condor/%s.log\n",home_dir.Data(),label.Data());
1359 fprintf(fP,
"should_transfer_files = YES\n");
1360 fprintf(fP,
"when_to_transfer_output = ON_EXIT\n");
1361 fprintf(fP,
"transfer_input_files = %s/.rootrc, %s/%s.tgz\n",home_dir.Data(), condor_dir.Data(),label.Data());
1362 fprintf(fP,
"transfer_output_files = %s/output, %s/log\n", label.Data(), label.Data());
1363 fprintf(fP,
"request_memory = 2000\n");
1365 fprintf(fP,
"log = %s/%s.log\n",log_dir.Data(),label.Data());
1367 fprintf(fP,
"notification = never\n");
1387 sprintf(ifile,
"%s/%s.dag",condor_dir.Data(),label.Data());
1390 if(!in.good()) {cout <<
"Error Opening File : " << ifile << endl;gSystem->Exit(1);}
1396 in.getline(istring,1024);
1397 if (!in.good())
break;
1399 TObjString* stoken =(TObjString*)token->At(0);
1400 TString jobLabel = stoken->GetString();
1401 if(jobLabel.CompareTo(
"JOB")!=0)
continue;
1402 stoken =(TObjString*)token->At(1);
1404 jobs.push_back(jobID);
1405 if(token)
delete token;
1411 Int_t *
id =
new Int_t[jobs.size()];
1412 Int_t *jd =
new Int_t[jobs.size()];
1413 for(
int i=0;
i<(
int)jobs.size();
i++) jd[
i]=jobs[
i];
1414 TMath::Sort((
int)jobs.size(),jd,
id,
false);
1415 for(
int i=0;
i<(
int)jobs.size();
i++) jobList.push_back(jd[
id[
i]]);
1430 return getJobBenchmark(ifName, stageID, -1, -1, bench);
1464 vector<float> vbench(2);
1468 TFile *
ifile = TFile::Open(ifName);
1470 cout <<
"Failed to open " << ifName.Data() << endl;
1475 if(ihistory==NULL) {
1476 cout <<
"Error : history is not present!!!" << endl;
1481 char stageName[64];
sprintf(stageName,
"STG:%d-",stageID);
1484 char resName[64];
sprintf(resName,
"RES:%d-",resID);
1487 char factorName[64];
sprintf(factorName,
"FCT:%d-",factorID);
1490 for(
int i=0;
i<log_size;
i++) {
1493 if(!log.Contains(stageName))
continue;
1494 if(resID>=0 && !log.Contains(resName))
continue;
1495 if(factorID>=0 && !log.Contains(factorName))
continue;
1496 if(log.Contains(bench+
TString(
":"))) {
1497 TObjArray*
token = log.Tokenize(
'\n');
1498 for(
int j=0;
j<token->GetEntries();
j++) {
1501 if(line.Contains(bench+
TString(
":"))) {
1504 TObjArray* ltoken = line.Tokenize(
'-');
1505 for(
int k=0;
k<ltoken->GetEntries();
k++) {
1508 TObjArray* stoken = stat.Tokenize(
':');
1509 if(stoken->GetEntries()!=2)
continue;
1514 if(stat_name==bench) {
1515 float value = stat_value.Atof();
1516 if(value>vbench[1]) vbench[1]=
value;
1519 if(stat_name==
"JOB") {
1520 vbench[0] = stat_value.Atoi();
1534 if(vbench[0]==-1) vbench[0] = getJobId(ifName);
1558 UserGroup_t*
uinfo = gSystem->GetUserInfo();
1563 if(gSystem->Getenv(
"HOME_WAT")!=NULL) {
1564 cwb_home_wat=
TString(gSystem->Getenv(
"HOME_WAT"));
1566 if(cwb_home_wat==
"") {
1567 cout <<
"CWB::Toolbox::DAG2LSF : Error : HOME_WAT not defined !!!" << endl;
1573 if(gSystem->Getenv(
"LSF_QUEUE")!=NULL) {
1574 lsf_queue=
TString(gSystem->Getenv(
"LSF_QUEUE"));
1577 cout <<
"CWB::Toolbox::DAG2LSF : Error : LSF_QUEUE not defined !!!" << endl;
1589 cout <<
"CWB::Toolbox::DAG2LSF - Error Opening File : " << dagFile << endl;
1595 lsfFile.ReplaceAll(
".dag",
".lsf");
1599 cout <<
"CWB::Toolbox::DAG2LSF - Error Opening File : " << lsfFile << endl;
1603 out <<
"#!/bin/bash" << endl << endl;
1611 in.getline(istring,1024);
1612 if (!in.good())
break;
1613 if(!
TString(istring).BeginsWith(
"VARS"))
continue;
1615 for(
int j=2;
j<token->GetEntries();
j++) {
1617 if(item.BeginsWith(
"PID=")) {
1618 item.ReplaceAll(
"PID=",
"");
1619 item.ReplaceAll(
"\"",
"");
1623 if(item.BeginsWith(
"CWB_UFILE=")) {
1624 item.ReplaceAll(
"CWB_UFILE=",
"");
1625 item.ReplaceAll(
"\"",
"");
1629 if(item.BeginsWith(
"CWB_STAGE=")) {
1630 item.ReplaceAll(
"CWB_STAGE=",
"");
1631 item.ReplaceAll(
"\"",
"");
1638 char lsf_label[1024];
1639 if(CWB_STAGE==
"CWB_STAGE_FULL") {
1640 sprintf(lsf_label,
"%s",data_label);
1642 sprintf(lsf_label,
"%s_%s",data_label,CWB_STAGE.Data());
1644 sprintf(lsf_cmd,
"bsub -q %s -J A%d -g /%s/%s \
1645 \\\n -f \"%s > %s/%d_%s.ufile\" \
1646 \\\n -f \"%s/%s.tgz > %s/%d_%s.tgz\" \
1647 \\\n -o %d_%s.out -f \"%s/%s/%d_%s.out < %d_%s.out\" \
1648 \\\n -e %d_%s.err -f \"%s/%s/%d_%s.err < %d_%s.err\" \
1649 \\\n -f \"%s/%s/%d_%s.tgz < %s/%d_%s.tgz\" \
1650 \\\n -Ep \"rm %d_%s.out\" \
1651 \\\n -Ep \"rm %d_%s.err\" \
1652 \\\n -Ep \"rm %s/%d_%s.tgz\" \
1653 \\\n \"/bin/bash %s/tools/cwb/scripts/cwb_net_lsf.sh %d %s %s %s %s %s\"",
1654 lsf_queue.Data(), PID, uname.Data(),
data_label,
1655 CWB_UFILE.Data(),
nodedir, PID, lsf_label,
1664 out << lsf_cmd << endl << endl;
1666 if(token)
delete token;
1673 return lsf_job_cnt>0 ? lsfFile :
"";
1690 sprintf(ifile,
"%s/merge_%s.M%d.lst",merge_dir.Data(),label.Data(),
version);
1691 vector<TString> jfname;
1692 return getMergeJobList(ifile,jfname);
1705 vector<TString> jfname;
1706 return getMergeJobList(ifname,jfname);
1722 in.open(ifname.Data());
1724 cout <<
"CWB::Toolbox::getMergeJobList : Error Opening File : " << ifname << endl;
1729 vector<TString> jfname;
1733 in.getline(istring,1024);
1734 if (!in.good())
break;
1736 TObjString* stoken =(TObjString*)token->At(token->GetEntries()-1);
1738 if(jobID==0)
continue;
1739 job.push_back(jobID);
1740 jfname.push_back(istring);
1741 if(token)
delete token;
1746 jobFileList.clear();
1748 Int_t *
id =
new Int_t[job.size()];
1749 Int_t *jd =
new Int_t[job.size()];
1750 for(
int i=0;
i<(
int)job.size();
i++) jd[
i]=job[
i];
1751 TMath::Sort((
int)job.size(),jd,
id,
false);
1752 for(
int i=0;
i<(
int)job.size();
i++) {
1753 jobList.push_back(jd[
id[
i]]);
1754 jobFileList.push_back(jfname[
id[i]]);
1784 if(ilist.size()==0) {cout <<
"CWB::Toolbox::getSlagJobList - Error ilist size=0" << endl;gSystem->Exit(1);}
1785 if(seglen<=0) {cout <<
"CWB::Toolbox::getSlagJobList - Error seglen<=0" << endl;gSystem->Exit(1);}
1788 vector<waveSegment>
jlist;
1790 int start=ilist[0].start;
1791 int stop=ilist[ilist.size()-1].stop;
1792 start=seglen*TMath::Nint(
double(start/seglen));
1793 stop=seglen*TMath::Nint(
double(stop/seglen));
1795 int njob=(stop-
start)/seglen;
1796 for(
int n=0;
n<njob;
n++) {
1797 SEG.
start=start+
n*seglen;
1799 jlist.push_back(SEG);
1816 for(
int i=0;
i<(
int)list.size();
i++) {
1834 for(
int j=0;
j<(
int)slagList.size();
j++)
if(slagList[
j].
jobId==jobid) {SLAG=slagList[
j];
break;}
1860 cout <<
"CWB::Toolbox::getSlagList : dqcat must be CWB_CAT1 or CWB_CAT2 !!!" << endl;
1866 int lsize=islagList.size();
1872 vector<waveSegment> dqList;
1876 vector<slag> oslagList;
1879 if(lsize>0) nIFO=islagList[0].segId.size();
1885 dq1List=readSegList(nDQF, DQF,
CWB_CAT1);
1887 jobList=getSlagJobList(dq1List, segLen);
1888 cout <<
"input list size " << lsize << endl;
1889 cout <<
"jobList size " << jobList.size() << endl;
1893 vector<waveSegment>* ilist =
new vector<waveSegment>[
nDQF];
1894 for(
int i=0;
i<
nDQF;
i++) ilist[
i]=readSegList(DQF[
i]);
1897 for(
int j=0;
j<lsize;
j++) {
1898 if(
j%1000==0)
printf(
"%6d - Rejected slags = %d/%lu\n",
j,nRejected,islagList.size());
1899 SLAG = islagList[
j];
1900 slagID = SLAG.slagId[0];
1902 for(
int n=0;
n<
nIFO;
n++) segID[
n]=SLAG.segId[
n];
1906 for(
int i=0;i<
nDQF;i++) DQF[i].
shift=0.;
1907 setSlagShifts(SLAG, ifos, segLen, nDQF, DQF);
1912 for(
int i=0;i<
nDQF;i++) {
1913 if(DQF[i].
cat<=dqcat) {
1918 if(first) {dqList=ilist[
i];first=
false;}
1919 else dqList = mergeSegLists(ilist[i],dqList);
1928 if(dqList.size()==0)
continue;
1939 for(
int i=0;i<
nDQF;i++) {
1945 if(first) {dq1List=ilist[
i];first=
false;}
1946 else dq1List = mergeSegLists(ilist[i],dq1List);
1954 segList.push_back(SEG);
1955 segList = mergeSegLists(dq1List,segList);
1956 SEG = getMaxSeg(segList);
1962 segList.push_back(SEG);
1963 segList = mergeSegLists(dqList,segList);
1966 MSEG = getMaxSeg(segList);
1971 segLength=getTimeSegList(segList);
1974 livetime1+=segLength;
1975 if(segLength<lenTHR) {
1978 livetime2+=segLength;
1979 oslagList.push_back(SLAG);
1982 printf(
"%6lu - Rejected slags = %d/%lu\n\n",islagList.size(),nRejected,islagList.size());
1983 printf(
"Slag livetime before dq cat%d is approximately %d sec \t= %.2f days\n",dqcat,livetime1,
double(livetime1)/86400.);
1984 printf(
"Slag livetime after dq cat%d is approximately %d sec \t= %.2f days\n",dqcat,livetime2,
double(livetime2)/86400.);
1988 for(
int i=0;i<
nDQF;i++) ilist[i].
clear();
2011 for(
int j=0;
j<(
int)ifos.size();
j++)
if(ifos[
j]==DQF[
i].
ifo) ifoID=
j;
2013 cout <<
"CWB::Toolbox::setSlagShifts - " << DQF[
i].
ifo <<
" is not in the contained into ifos vector" << endl;
2016 if(ifoID>=(
int)SLAG.
segId.size()) {
2017 cout <<
"CWB::Toolbox::setSlagShifts - " << DQF[
i].
ifo <<
" index " << ifoID <<
"is not correct" << endl;
2030 vector<waveSegment> dqList) {
2052 segList.push_back(SEG);
2053 segList = mergeSegLists(dqList,segList);
2054 MSEG = getMaxSeg(segList);
2056 if(segLength<segMLS+2*segEdge) {
2057 cout <<
"CWB::Toolbox::getSegList - Segment length too small : " << segLength << endl;
2065 segList.push_back(SEG);
2076 vector<double> dummy;
2077 return getLiveTime(jobList, dqList, dummy);
2101 if(shiftList.size()==0) shiftList.push_back(0.);
2102 int nshift = shiftList.size();
2105 vector<waveSegment>*
segList =
new vector<waveSegment>[nshift];
2106 vector<waveSegment> mergeList=mergeSegLists(jobList,dqList);
2108 for(
int i=0;
i<nshift;
i++) {
2109 double shift = shiftList[
i];
2110 if(shift==0) {segList[
i]=mergeList;
continue;}
2111 int jsize = jobList.size();
2112 for(
int j=0;
j<jsize;
j++) {
2113 double jstart = jobList[
j].start;
2114 double jstop = jobList[
j].stop;
2115 double jlen = jstop-jstart;
2116 int ksize = mergeList.size();
2117 for(
int k=0;
k<ksize;
k++) {
2118 double kstart = mergeList[
k].start;
2119 double kstop = mergeList[
k].stop;
2120 if((kstop<=jstart)||(kstart>=jstop))
continue;
2126 seg.
start=kstart;seg.
stop=kstop;segList[
i].push_back(seg);
2129 seg.
start=kstart-jlen;seg.
stop=kstop-jlen;segList[
i].push_back(seg);
2131 if((kstart<jstop)&&(kstop>jstop)) {
2132 seg.
start=kstart;seg.
stop=jstop;segList[
i].push_back(seg);
2133 seg.
start=jstart;seg.
stop=kstop-jlen;segList[
i].push_back(seg);
2140 for(
int i=0;
i<nshift;
i++) segList[
i]=unionSegments(segList[
i]);
2143 for(
int i=1;i<nshift;i++) segList[0]=mergeSegLists(segList[0],segList[i]);
2145 double livetime=getTimeSegList(segList[0]);
2146 for(
int i=0;i<nshift;i++) segList[i].
clear();
2164 for(
int i=0;
i<(
int)mdcList.size();
i++) {
2165 char mdc_string[1024]=
"";
2168 sprintf(mdc_string,
"%s",(((TObjString*)token->At(0))->
GetString()).Data());
2169 for(
int j=1;
j<9;
j++)
2170 sprintf(mdc_string,
"%s %s",mdc_string,(((TObjString*)token->At(
j))->
GetString()).Data());
2171 double frTime = (((TObjString*)token->At(9))->
GetString()).Atof();
2172 sprintf(mdc_string,
"%s %10.6f",mdc_string,frTime+mdc_shift);
2174 double mdcTime = (((TObjString*)token->At(10))->
GetString()).Atof();
2175 sprintf(mdc_string,
"%s %10.6f",mdc_string,mdcTime+mdc_shift);
2177 for(
int j=11;
j<15;
j++)
2178 sprintf(mdc_string,
"%s %s",mdc_string,(((TObjString*)token->At(
j))->
GetString()).Data());
2179 for(
int j=15;
j<token->GetEntries();
j++) {
2181 sprintf(mdc_string,
"%s %s",mdc_string,stoken.Data());
2182 for(
int n=0;
n<(
int)ifos.size();
n++) {
2183 if(ifos[
n]==stoken) {
2184 double ifoTime = (((TObjString*)token->At(
j+1))->
GetString()).Atof();
2185 sprintf(mdc_string,
"%s %10.6f",mdc_string,ifoTime+mdc_shift);
2191 mdcList[
i]=mdc_string;
2193 if(token)
delete token;
2212 char sval[32];
sprintf(sval,
"%e",val);
2213 return SetMDCLog(log, pos, sval);
2229 char log_string[1024]=
"";
2232 for(
int n=0;
n<token->GetEntries();
n++) {
2233 if(
n==pos)
sprintf(log_string,
"%s %s",log_string, val.Data());
2234 else sprintf(log_string,
"%s %s",log_string, (((TObjString*)token->At(
n))->
GetString()).Data());
2236 if(token)
delete token;
2251 int size = token->GetEntries();
2267 for(
int n=0;
n<token->GetEntries();
n++) {
2268 if(
n==pos)
return (((TObjString*)token->At(
n))->
GetString()).Data();
2302 if(mlength<=0)
return 0.;
2323 mergeCWBTrees(nthreads, fileList, simulation, odir, label, brms, bvar, bpsm);
2339 cout <<
"CWB::Toolbox::mergeCWBTrees : Error - nthreads must be <= : " <<
MAX_THREADS << endl;
2348 vector<TString> waveList;
2349 vector<TString> mdcList;
2350 vector<TString> liveList;
2351 vector<TString> rmsList;
2352 vector<TString> varList;
2356 if(fileList.size()<=nthreads) {
2358 lSize[0]=fileList.size();
2360 if(fileList.size()%nthreads!=0) {
2361 for(
int i=0;
i<nthreads;
i++) lSize[
i]=
int(fileList.size()/nthreads);
2362 lSize[0]+=fileList.size()%nthreads;
2364 for(
int i=0;
i<nthreads;
i++) lSize[
i]=
int(fileList.size()/nthreads);
2370 for(
int i=0;
i<nthreads;
i++) {
2372 tLabel[
i]=TString::Format(
"%s.T%d",label.Data(),
i);
2374 waveList.push_back(TString::Format(
"%s/wave_%s.root",odir.Data(),tLabel[
i].Data()));
2376 mdcList.push_back(TString::Format(
"%s/mdc_%s.root",odir.Data(),tLabel[
i].Data()));
2378 liveList.push_back(TString::Format(
"%s/live_%s.root",odir.Data(),tLabel[
i].Data()));
2379 if(brms) rmsList.push_back(TString::Format(
"%s/rms_%s.root",odir.Data(),tLabel[
i].Data()));
2380 if(bvar) varList.push_back(TString::Format(
"%s/var_%s.root",odir.Data(),tLabel[
i].Data()));
2385 for(
int i=0;
i<nthreads;
i++) {
2386 mergeParms[
i].threadID =
i;
2387 mergeParms[
i].fileList = fList[
i];
2389 mergeParms[
i].odir =
odir;
2390 mergeParms[
i].label = tLabel[
i];
2391 mergeParms[
i].brms = brms;
2392 mergeParms[
i].bvar = bvar;
2393 mergeParms[
i].bpsm = bpsm;
2397 for(
int i=0;
i<nthreads;
i++) {
2399 thread[
i] =
new TThread(name,
MergeHandle, (
void*) &mergeParms[
i]);
2401 printf(
"Starting Thread : %s\n",name);
2405 for(
int i=0;
i<nthreads;
i++) thread[
i]->Join();
2410 fName=TString::Format(
"wave_%s",label.Data());
2411 if(waveList.size()) {
2412 mergeTrees(waveList,
"waveburst", odir, fName,
true);
2413 for(
int i=0;
i<waveList.size();
i++) gSystem->Exec(
"rm "+waveList[
i]);
2415 fName=TString::Format(
"mdc_%s",label.Data());
2416 if(mdcList.size()) {
2417 mergeTrees(mdcList,
"mdc", odir, fName,
true);
2418 for(
int i=0;
i<waveList.size();
i++) gSystem->Exec(
"rm "+mdcList[
i]);
2420 fName=TString::Format(
"live_%s",label.Data());
2421 if(liveList.size()) {
2422 mergeTrees(liveList,
"liveTime", odir, fName,
true);
2423 for(
int i=0;
i<liveList.size();
i++) gSystem->Exec(
"rm "+liveList[
i]);
2425 fName=TString::Format(
"rms_%s",label.Data());
2426 if(rmsList.size()) {
2427 mergeTrees(rmsList,
"noise", odir, fName,
true);
2428 for(
int i=0;
i<rmsList.size();
i++) gSystem->Exec(
"rm "+rmsList[
i]);
2430 fName=TString::Format(
"var_%s",label.Data());
2431 if(varList.size()) {
2432 mergeTrees(varList,
"variability", odir, fName,
true);
2433 for(
int i=0;
i<varList.size();
i++) gSystem->Exec(
"rm "+varList[
i]);
2437 for(
int i=0;
i<nthreads;
i++)
delete thread[
i];
2456 mergeCWBTrees(fileList, simulation, odir, label, brms, bvar, bpsm);
2491 if (simulation==1) c =
's';
2494 cout <<
"CWB::Toolbox::mergeCWBTrees - Start merging "
2495 << fileList.size() <<
" files (simulation) ..." << endl;
2497 cout <<
"CWB::Toolbox::mergeCWBTrees - Start merging "
2498 << fileList.size() <<
" files (production) ..." << endl;
2500 TChain wav(
"waveburst");
2501 if(!bpsm) wav.SetBranchStatus(
"Psm",
false);
2504 TChain rms(
"noise");
2505 TChain var(
"variability");
2506 TChain liv(
"liveTime");
2513 cout <<
"CWB::Toolbox::mergeCWBTrees - Add file to chain in progress ..." << endl;
2514 for(
int n=0;
n<(
int)fileList.size();
n++) {
2515 sprintf(f,
"%s",fileList[
n].Data());
2550 if (++nfiles%1000==0) cout <<
"CWB::Toolbox::mergeCWBTrees - " << nfiles
2551 <<
"/" << fileList.size() <<
" files" << endl;
2552 if(c==
's') mdc.Add(f);
2553 else { liv.Add(f);
if(brms) rms.Add(f);
if(bvar) var.Add(f);}
2556 sprintf(s,
"%s/wave_%s.root",odir.Data(),label.Data());
2557 cout <<
"CWB::Toolbox::mergeCWBTrees - Merging " << s <<
" in progress ..." << endl;
2568 sprintf(work_dir,
"%s",gSystem->WorkingDirectory());
2574 TFile fwav(s,
"UPDATE");
2575 history->Write(
"history");
2580 sprintf(s,
"%s/mdc_%s.root",odir.Data(),label.Data());
2581 cout <<
"CWB::Toolbox::mergeCWBTrees - Merging " << s <<
" in progress ..." << endl;
2585 TFile fmdc(s,
"UPDATE");
2591 sprintf(s,
"%s/live_%s.root",odir.Data(),label.Data());
2592 cout <<
"CWB::Toolbox::mergeCWBTrees - Merging " << s <<
" in progress ..." << endl;
2596 TFile fliv(s,
"UPDATE");
2601 sprintf(s,
"%s/rms_%s.root",odir.Data(),label.Data());
2602 cout <<
"CWB::Toolbox::mergeCWBTrees - Merging " << s <<
" in progress ..." << endl;
2605 TFile frms(s,
"UPDATE");
2611 sprintf(s,
"%s/var_%s.root",odir.Data(),label.Data());
2612 cout <<
"CWB::Toolbox::mergeCWBTrees - Merging " << s <<
" in progress ..." << endl;
2615 TFile fvar(s,
"UPDATE");
2621 if(history!=NULL)
delete history;
2623 cout <<
"CWB::Toolbox::mergeCWBTrees - Merged files : " << nfiles<<endl;
2648 cout <<
"CWB::Toolbox::mergeTrees - Start merging "
2649 << fileList.size() <<
" files (simulation) ..." << endl;
2651 TChain
tree(treeName);
2658 cout <<
"CWB::Toolbox::mergeTrees - Add file to chain in progress ..." << endl;
2659 for(
int n=0;
n<(
int)fileList.size();
n++) {
2660 sprintf(f,
"%s",fileList[
n].Data());
2666 sprintf(cmd,
"mv %s %s.zombie",f,f);
2674 int estat = gSystem->GetPathInfo(txtfile,&
id,&size,&flags,&mt);
2677 cmd2.ReplaceAll(
".root",
".txt");
2678 gSystem->Exec(cmd2.Data());
2679 cout<<
"Zombie file!!! Renamed root and txt files as :"<<f<<
".zombie"<<endl;
2692 if (++nfiles%1000==0) cout <<
"CWB::Toolbox::mergeTrees - " << nfiles
2693 <<
"/" << fileList.size() <<
" files" << endl;
2696 if(ofName.EndsWith(
".root")) {
2697 sprintf(s,
"%s/%s",odir.Data(),ofName.Data());
2699 sprintf(s,
"%s/%s.root",odir.Data(),ofName.Data());
2701 cout <<
"CWB::Toolbox::mergeTrees - Merging " << s <<
" in progress ..." << endl;
2706 TFile
froot(s,
"UPDATE");
2707 history->Write(
"history");
2710 if(history!=NULL)
delete history;
2712 cout <<
"CWB::Toolbox::mergeTrees - Merged files : " << nfiles<<endl;
2713 cout <<
"CWB::Toolbox::mergeTrees - Zombie files : " << ZombieCnt<<endl;
2729 in.open(ifName.Data(),
ios::in);
2731 cout <<
"CWB::Toolbox::readFileList - Error Opening File : " << ifName.Data() << endl;
2739 in.getline(istring,8192);
2740 if (!in.good())
break;
2741 fileList.push_back(istring);
2757 char ofile_name[256];
2758 if(ofName[0]!=
'/') {
2759 sprintf(ofile_name,
"%s/%s",gSystem->WorkingDirectory(),ofName.Data());
2761 sprintf(ofile_name,
"%s",ofName.Data());
2763 cout << ofile_name << endl;
2766 if (!out.good()) {cout <<
"CWB::Toolbox::dumpFileList - Error Opening File : " << ofName.Data() << endl;gSystem->Exit(1);}
2768 for (
int i=0;
i<(
int)fileList.size();
i++) {
2769 out << fileList[
i] << endl;
2781 vector<waveSegment> dqList) {
2796 if (jobId<1) {cout <<
"CWB::Toolbox::getSegList - Error : jobId must be > 0" << endl;gSystem->Exit(1);}
2798 vector<waveSegment>
jobList = getJobList(dqList, segLen, segMLS, segEdge);
2800 if (jobId>(
int)jobList.size()) {
2801 cout <<
"CWB::Toolbox::getSegList - Error : jobId is > max jobs " << jobList.size() << endl;
2805 vector<waveSegment>
detSegs(nIFO);
2806 for(
int i=0;
i<
nIFO;
i++) detSegs[
i] = jobList[jobId-1];
2822 char* fileBuffer=NULL;
2829 in.open(ifName.Data(),
ios::in);
2831 cout <<
"CWB::Toolbox::readFile - Error Opening File : " << ifName.Data() << endl;
2835 fileBuffer =
new char[2*size+1];
2836 bzero(fileBuffer,(2*size+1)*
sizeof(
char));
2841 in.getline(istring,8192);
2842 if (!in.good())
break;
2844 int len = strlen(istring);
2846 strncpy(fileBuffer+fileLength,istring,len+1);
2847 fileLength += len+1;
2872 cout <<
"CWB::Toolbox::setCuts - cuts is empty : nothing to do" << endl;
2876 TString ifname = idir+
"/"+ifName;
2879 cout<<
"Opening File : " << ifname.Data() << endl;
2880 TFile
ifile(ifname);
2881 if (ifile.IsZombie()) {
2882 cout <<
"CWB::Toolbox::setCuts - Error opening file " << ifname.Data() << endl;
2885 TTree *
itree = (TTree*)ifile.Get(trname.Data());
2887 cout <<
"CWB::Toolbox::setCuts - tree " << trname
2888 <<
" is not present in file " << ifname.Data() << endl;
2891 Int_t
isize = (Int_t)itree->GetEntries();
2892 cout <<
"tree size : " << isize << endl;
2894 cout <<
"CWB::Toolbox::setCuts - tree " << trname
2895 <<
" is empty in file " << ifname.Data() << endl;
2901 int err =
formula.Compile(cuts.Data());
2903 cout <<
"CWB::Toolbox::setCuts - wrong input cuts " << cuts << endl;
2908 itree->SetEstimate(isize);
2909 itree->Draw(
"Entry$",cuts.Data(),
"goff",
isize);
2910 int nentries = itree->GetSelectedRows();
2911 cout <<
"CWB::Toolbox::setCuts - selected entries : "
2912 << nentries <<
"/" << itree->GetEntries() << endl;
2915 TString ofname = odir+
"/"+ifName;
2916 ofname.ReplaceAll(
".root",
TString(
".C_")+olabel+
".root");
2917 cout <<
"CWB::Toolbox::setCuts - Create cuts file : " << ofname << endl;
2919 if(!overwrite) gSystem->Exit(0);
2922 TFile
ofile(ofname,
"RECREATE");
2923 TTree*
otree = itree->CopyTree(cuts.Data());
2924 otree->SetDirectory(&ofile);
2934 for(
int i=0;
i<stageList->GetSize();
i++) {
2935 TObjString* stageObjString = (TObjString*)stageList->At(
i);
2936 TString stageName = stageObjString->GetString();
2937 char* stage =
const_cast<char*
>(stageName.Data());
2946 sprintf(work_dir,
"%s",gSystem->WorkingDirectory());
2948 TString _cuts = (pcuts!=
"") ? pcuts+
" "+cuts : cuts;
2950 char logmsg[2048];
sprintf(logmsg,
"Apply Selection Cuts : %s",cuts.Data());
2959 TFile
ofile(ofname,
"UPDATE");
2960 history->Write(
"history");
2990 if(irho!=0 && irho!=1) {
2991 cout <<
"CWB::Toolbox::setIFAR - bad irho value : irho must be 0/1" << endl;
2996 cout <<
"CWB::Toolbox::setIFAR - sels is empty : nothing to do" << endl;
3002 if(!exist) gSystem->Exit(0);
3004 vector<double> xrho,xfar;
3005 int xsize = GetStepFunction(farFile, xrho, xfar);
3007 vector<double> trho,tfar;
3008 for(
int i=0;
i<xsize;
i++) {
3010 trho.push_back(xrho[
i]);
3011 tfar.push_back(xfar[i]);
3014 xrho=trho; xfar=tfar;
3016 std::vector<double>::iterator it;
3017 it = xrho.begin(); xrho.insert(it,-DBL_MAX);
3018 it = xfar.begin(); xfar.insert(it,xfar[0]);
3020 xrho.push_back(DBL_MAX/2);
3021 xfar.push_back(xfar[xfar.size()-1]);
3026 for(
int i=1;
i<xsize;
i++) {
3027 double dx = (xrho[
i]-xrho[
i-1])/100000.;
3028 gr.SetPoint(cnt++,xrho[
i]-dx,xfar[
i-1]);
3029 gr.SetPoint(cnt++,xrho[
i]+dx,xfar[
i]);
3032 TString ifname = idir+
"/"+ifName;
3035 cout<<
"Opening File : " << ifname.Data() << endl;
3036 TFile
ifile(ifname);
3037 if (ifile.IsZombie()) {
3038 cout <<
"CWB::Toolbox::setIFAR - Error opening file " << ifname.Data() << endl;
3041 TTree *
itree = (TTree*)ifile.Get(trname.Data());
3043 cout <<
"CWB::Toolbox::setIFAR - tree " << trname
3044 <<
" is not present in file " << ifname.Data() << endl;
3047 Int_t
isize = (Int_t)itree->GetEntries();
3048 itree->SetEstimate(isize);
3049 cout <<
"tree size : " << isize << endl;
3051 cout <<
"CWB::Toolbox::setIFAR - tree " << trname
3052 <<
" is empty in file " << ifname.Data() << endl;
3057 TTreeFormula fsel(
"sels", sels.Data(),
itree);
3058 int err = fsel.Compile(sels.Data());
3060 cout <<
"CWB::Toolbox::setIFAR - wrong input sels " << sels << endl;
3065 TString ofname = odir+
"/"+ifName;
3066 ofname.ReplaceAll(
".root",
TString(
".S_")+olabel+
".root");
3067 cout <<
"CWB::Toolbox::setIFAR - Create sels file : " << ofname << endl;
3069 if(!overwrite) gSystem->Exit(0);
3072 TFile
ofile(ofname,
"RECREATE");
3073 TTree *
otree = (TTree*)itree->CloneTree(0);
3078 bool ifar_exists=
false;
3079 bool bin_exists=
false;
3080 TIter
next(itree->GetListOfBranches());
3081 while ((branch=(TBranch*)
next())) {
3082 if(
TString(
"ifar").CompareTo(branch->GetName())==0) ifar_exists=
true;
3083 if(
TString(
"bin").CompareTo(branch->GetName())==0) bin_exists=
true;
3087 if (ifar_exists) itree->SetBranchAddress(
"ifar",&ifar);
3088 else otree->Branch(
"ifar",&ifar,
"ifar/F");
3089 string* bin =
new string();
3090 if (bin_exists) itree->SetBranchAddress(
"bin",&bin);
3091 else otree->Branch(
"bin",bin);
3094 itree->Draw(
"Entry$",sels.Data(),
"goff",
isize);
3095 double*
entry = itree->GetV1();
3096 int nsel = itree->GetSelectedRows();
3097 cout <<
"CWB::Toolbox::setIFAR - selected entries : "
3098 << nsel <<
"/" << itree->GetEntries() << endl;
3101 itree->SetBranchAddress(
"rho",rho);
3104 itree->GetEntry(
int(entry[
i]));
3105 double far = gr.Eval(rho[irho]);
3106 double xifar = far>0 ? 1./far : -1;
3114 *bin = olabel.Data();
3119 itree->Draw(
"Entry$",TString::Format(
"!(%s)",sels.Data()).Data(),
"goff",
isize);
3120 int _nsel = itree->GetSelectedRows();
3121 double* _entry = itree->GetV1();
3122 cout <<
"CWB::Toolbox::setIFAR - not selected entries : "
3123 << _nsel <<
"/" << itree->GetEntries() << endl;
3125 for(
int i=0;
i<_nsel;
i++) {
3126 itree->GetEntry(
int(_entry[
i]));
3127 if(!ifar_exists) ifar=0;
3128 if(!bin_exists) *bin=
"";
3142 for(
int i=0;
i<stageList->GetSize();
i++) {
3143 TObjString* stageObjString = (TObjString*)stageList->At(
i);
3144 TString stageName = stageObjString->GetString();
3145 char* stage =
const_cast<char*
>(stageName.Data());
3146 if(stageName==
"IFAR") psels=history->
GetHistory(stage,
CCAST(
"PARAMETERS"));
3147 if(stageName==
"IFAR") pfile=history->
GetHistory(stage,
CCAST(
"FARFILE"));
3156 sprintf(work_dir,
"%s",gSystem->WorkingDirectory());
3158 TString _sels = (psels!=
"") ? psels+
"\n"+sels : sels;
3160 char logmsg[2048];
sprintf(logmsg,
"Created ifar on the bin set (%s) specified by the selection : %s",olabel.Data(),sels.Data());
3162 char* buffer = readFile(farFile);
3164 char* farBuffer=NULL;
3166 farBuffer =
new char[strlen(pfile)+strlen(buffer)+farFile.Sizeof()+10];
3167 sprintf(farBuffer,
"%s\n%s\n%s\n",pfile,farFile.Data(),buffer);
3169 farBuffer =
new char[strlen(buffer)+farFile.Sizeof()+10];
3170 sprintf(farBuffer,
"%s\n%s\n",farFile.Data(),buffer);
3174 delete [] farBuffer;
3183 TFile
ofile(ofname,
"UPDATE");
3184 history->Write(
"history");
3207 cout <<
"CWB::Toolbox::setChunk - bad chunk chunk value : chunk must be >0" << endl;
3211 TString ifname = idir+
"/"+ifName;
3214 cout<<
"Opening File : " << ifname.Data() << endl;
3215 TFile
ifile(ifname);
3216 if (ifile.IsZombie()) {
3217 cout <<
"CWB::Toolbox::setChunk - Error opening file " << ifname.Data() << endl;
3220 TTree *
itree = (TTree*)ifile.Get(trname.Data());
3222 cout <<
"CWB::Toolbox::setChunk - tree " << trname
3223 <<
" is not present in file " << ifname.Data() << endl;
3226 Int_t
isize = (Int_t)itree->GetEntries();
3227 itree->SetEstimate(isize);
3228 cout <<
"tree size : " << isize << endl;
3230 cout <<
"CWB::Toolbox::setChunk - tree " << trname
3231 <<
" is empty in file " << ifname.Data() << endl;
3236 TString ofname = odir+
"/"+ifName;
3238 ofname.ReplaceAll(
".root",
TString(
".K_")+schunk+
".root");
3239 cout <<
"CWB::Toolbox::setChunk - Create sels file : " << ofname << endl;
3241 if(!overwrite) gSystem->Exit(0);
3244 TFile
ofile(ofname,
"RECREATE");
3245 TTree *
otree = (TTree*)itree->CloneTree(0);
3250 bool chunk_exists=
false;
3251 TIter
next(itree->GetListOfBranches());
3252 while ((branch=(TBranch*)
next())) {
3253 if(
TString(
"chunk").CompareTo(branch->GetName())==0) chunk_exists=
true;
3256 if (chunk_exists) itree->SetBranchAddress(
"chunk",&chunk);
3257 else otree->Branch(
"chunk",&chunk,
"chunk/I");
3260 itree->Draw(
"Entry$",
"",
"goff",isize);
3261 double*
entry = itree->GetV1();
3262 int nsel = itree->GetSelectedRows();
3263 cout <<
"CWB::Toolbox::setChunk - selected entries : "
3264 << nsel <<
"/" << itree->GetEntries() << endl;
3267 itree->GetEntry(
int(entry[
i]));
3280 for(
int i=0;
i<stageList->GetSize();
i++) {
3281 TObjString* stageObjString = (TObjString*)stageList->At(
i);
3282 TString stageName = stageObjString->GetString();
3283 char* stage =
const_cast<char*
>(stageName.Data());
3284 if(stageName==
"CHUNK") psels=history->
GetHistory(stage,
CCAST(
"PARAMETERS"));
3285 if(stageName==
"CHUNK") pfile=history->
GetHistory(stage,
CCAST(
"FARFILE"));
3293 sprintf(work_dir,
"%s",gSystem->WorkingDirectory());
3295 char logmsg[2048];
sprintf(logmsg,
"Created chunk leaf : %d",chunk);
3304 TFile
ofile(ofname,
"UPDATE");
3305 history->Write(
"history");
3329 cout <<
"CWB::Toolbox::setUniqueEvents - Create unique events file : " << ofwave << endl;
3331 if(!overwrite) gSystem->Exit(0);
3333 TFile* iwroot = TFile::Open(ifwave);
3334 if(iwroot==NULL||!iwroot->IsOpen()) {
3335 cout <<
"CWB::Toolbox::setUniqueEvents - Error : input file " << ifwave <<
" not found" << endl;
3339 TTree* iwtree = (TTree*) iwroot->Get(
"waveburst");
3341 cout <<
"CWB::Toolbox::setUniqueEvents - Error : tree waveburst not found in file " << ifwave << endl;
3345 cout <<
"CWB::Toolbox::setUniqueEvents : number of input events : " << iwtree->GetEntries() << endl;
3348 TFile* owroot =
new TFile(ofwave,
"RECREATE");
3349 if(owroot->IsZombie()) {
3350 cout <<
"CWB::Toolbox::setUniqueEvents - Error : output file " << ofwave <<
" not opened" << endl;
3354 TTree *owtree = (TTree*)iwtree->CloneTree(0);
3362 bool replaceLeaf=
false;
3363 TIter
next(iwtree->GetListOfBranches());
3364 while ((branch=(TBranch*)
next())) {
3365 if (leaf_name.CompareTo(branch->GetName())==0) {
3366 cout <<
"fragment leaf [" << leaf_name <<
"] already applied" << endl;
3370 cout <<
"CWB::Toolbox::setUniqueEvents : Do you want to overwrite the previous leaf ? (y/n) ";
3372 }
while ((strcmp(answer,
"y")!=0)&&(strcmp(answer,
"n")!=0));
3373 if (strcmp(answer,
"y")==0) {
3382 if (replaceLeaf) owtree->SetBranchAddress(
"fsize",&fsize);
3383 else owtree->Branch(
"fsize",&fsize,
"fsize/I");
3386 sprintf(sel,
"Entry$:rho[%i]:time[%i]:factor",pp_irho,nIFO);
3387 int iwsize=iwtree->GetEntries();
3388 iwtree->Draw(sel,
"",
"goff",iwsize);
3389 double*
entry = iwtree->GetV1();
3390 double*
rho = iwtree->GetV2();
3391 double*
time = iwtree->GetV3();
3392 double*
factor = iwtree->GetV4();
3395 std::map <float, float> mfactors;
3396 for(
int i=0;
i<iwsize;
i++) {
3397 iwtree->GetEntry(
i);
3398 mfactors[factor[
i]]=factor[
i];
3401 std::map<float, float>::iterator iter;
3402 for (iter=mfactors.begin(); iter!=mfactors.end(); iter++) {
3403 factors.push_back(iter->second);
3409 sprintf(cuts,
"abs(factor-%g)/%g<0.0001",factors[
i],factors[i]);
3410 iwtree->Draw(sel,cuts,
"goff",iwsize);
3411 int size=iwtree->GetSelectedRows();
3414 iwtree->GetEntry(entry[0]);
3419 TMath::Sort(size,time,index,kFALSE);
3421 float rhomax=rho[
j];
3428 if(abs(time1-time2)>0.001 ||
k==size-1) {
3429 iwtree->GetEntry(entry[imax]);
3436 if(rho[j]>rhomax) {rhomax=rho[
j];imax=
j;}
3443 cout <<
" factor id = " << i <<
"\t reconstructed events : "
3444 << iwtree->GetSelectedRows() <<
"\t unique events : "
3445 << unique_evt <<
"\tfactor = " << factors[
i] << endl;
3458 for(
int i=0;
i<stageList->GetSize();
i++) {
3459 TObjString* stageObjString = (TObjString*)stageList->At(
i);
3460 TString stageName = stageObjString->GetString();
3461 char* stage =
const_cast<char*
>(stageName.Data());
3470 sprintf(work_dir,
"%s",gSystem->WorkingDirectory());
3472 TString cuts = (pcuts!=
"") ? pcuts+
" (U)" :
"(U)";
3474 char logmsg[2048];
sprintf(logmsg,
"Apply Selection Cuts : %s",
"(U)");
3483 TFile
ofile(ofwave,
"UPDATE");
3484 history->Write(
"history");
3515 int nIFO = ifos.size();
3521 vector<TString> wifos;
3526 for(
int i=0;
i<(
int)wifos.size();
i++)
if(wifos[
i].CompareTo(VDQF[
j].
ifo)==0) bifo=
false;
3527 for(
int i=0;
i<
nIFO;
i++)
if(ifos[
i].CompareTo(VDQF[
j].ifo)==0) bifo=
false;
3528 if(bifo) wifos.push_back(VDQF[
j].ifo);
3530 for(
int i=0;
i<(
int)wifos.size();
i++) cout << wifos[
i].Data() <<
" ";
3538 int nNET=TMath::Factorial(5);
3539 vector<TString>* xifos =
new vector<TString>[nNET];
3544 for(
int i=0;
i<
nIFO;
i++)
if(ifos[
i].CompareTo(VDQF[
j].
ifo)==0) bifo=
true;
3549 for(
int k=0;
k<(
int)wifos.size();
k++) {
3550 if(wifos[
k].CompareTo(VDQF[
j].ifo)==0) {
3552 strcpy(XDQF[nXDQF].ifo,ifos[
i].Data());
3555 xifos[
nXDQF].push_back(wifos[
k]);
3567 cout <<
"CWB::Toolbox::setVeto - No veto found : setVeto terminated" << endl;
3572 for(
int i=0;
i<(
int)xifos[
j].
size();
i++) cout << xifos[
j][
i].Data() <<
" ";
3578 vector<waveSegment>
jobList = getJobList(cat1List, segLen, segMLS, segEdge);
3582 char ifo_label[10][256];
3583 char veto_label[10][256];
3588 for(
int m=0;
m<
nset;
m++)
if(veto_name.CompareTo(veto_label[
m])==0) bnew=
false;
3589 if(bnew)
strcpy(veto_label[nset++],veto_name.Data());
3594 for(
int m=0;m<
nset;m++) {
3595 if(veto_name.CompareTo(veto_label[m])==0) {
3596 if(!
TString(ifo_label[m]).Contains(XDQF[
n].
ifo)) {
3597 sprintf(ifo_label[m],
"%s%s",ifo_label[m],XDQF[
n].ifo);
3602 char veto_file_label[256]=
"";
3603 for(
int m=0;m<
nset;m++) {
3604 if(strlen(veto_file_label)==0) {
3605 sprintf(veto_file_label,
".V_%s%s",veto_label[m],ifo_label[m]);
3607 sprintf(veto_file_label,
"%s_%s%s",veto_file_label,veto_label[m],ifo_label[m]);
3612 sprintf(veto_file_label,
"%s.root",veto_file_label);
3613 cout <<
"veto file label : " << veto_file_label << endl;
3615 TString efname = odir+
"/"+ifName;
3616 efname.ReplaceAll(
".root",veto_file_label);
3618 if(!overwrite) gSystem->Exit(0);
3620 TString ifname = idir+
"/"+ifName;
3621 TString ofname = odir+
"/"+ifName;
3622 ofname.ReplaceAll(
".root",
".root.tmp.1");
3629 vector<waveSegment> vlist;
3633 for(
int i=0;
i<
nIFO;
i++)
if(ifos[
i].CompareTo(XDQF[
n].
ifo)==0) iIFO=
i;
3634 if (iIFO==-1)
continue;
3647 for(
int k=0;
k<
nIFO;
k++)
if(ifos[
k].CompareTo(VDQF[
j].ifo)==0) RDQF[nRDQF++]=VDQF[
j];
3651 vlist=readSegList(nRDQF, RDQF,
CWB_CAT2);
3659 for(
int k=0;
k<(
int)xifos[
n].
size();
k++)
if(xifos[
n][
k].CompareTo(VDQF[
j].ifo)==0) RDQF[nRDQF++]=VDQF[
j];
3662 vlist=readSegList(nRDQF, RDQF,
CWB_CAT2);
3669 vlist=readSegList(XDQF[
n]);
3671 double vlist_time = getTimeSegList(vlist);
3683 cout << veto_name <<
" list duration " <<
int(vlist_time) <<
" list size " << vlist.size() << endl;
3688 cout<<
"Opening BKG File : " << ifname.Data() << endl;
3689 TFile
ifile(ifname);
3690 if (ifile.IsZombie()) {
3691 cout <<
"CWB::Toolbox::setVeto - Error opening file " << ifname.Data() << endl;
3694 TTree *
itree = (TTree*)ifile.Get(
"waveburst");
3696 cout <<
"CWB::Toolbox::setVeto - tree waveburst is not present in file " << ifname.Data() << endl;
3699 Int_t
isize = (Int_t)itree->GetEntries();
3700 cout <<
"tree size : " << isize << endl;
3702 cout <<
"CWB::Toolbox::setVeto - tree waveburst is empty in file " << ifname.Data() << endl;
3705 itree->SetEstimate(isize);
3706 char selection[256];
sprintf(selection,
"time[%d]",iIFO);
3707 itree->Draw(selection,
"",
"goff",isize);
3708 double*
time = itree->GetV1();
3711 if(TMath::IsNaN(time[
i])) {
3713 cout <<
"CWB::Toolbox::setVeto - tree waveburst file " << ifname.Data() <<
" contains time NaN in ifo=" << ifos[iIFO] <<
" time=" << time[
i] << endl;
3718 Int_t *
id =
new Int_t[
isize];
3719 bool *bveto =
new bool[
isize];
3720 TMath::Sort((
int)isize,time,
id,
false);
3723 SEG.
start=time[
id[isize-1]];
3724 SEG.
stop=time[
id[isize-1]];
3725 vlist.push_back(SEG);
3726 int vsize = vlist.size();
3744 bool replaceVeto=
false;
3745 TIter
next(itree->GetListOfBranches());
3746 while ((branch=(TBranch*)
next())) {
3747 if (veto_name.CompareTo(branch->GetName())==0) {
3748 cout <<
"Veto [" << veto_name <<
"] already applied" << endl;
3752 cout <<
"Do you want to overwrite the previous spurious ? (y/n) ";
3754 }
while ((strcmp(answer,
"y")!=0)&&(strcmp(answer,
"n")!=0));
3755 if (strcmp(answer,
"y")==0) {
3768 TFile* ftmp =
new TFile(ofname,
"RECREATE");
3769 if (ftmp->IsZombie()) {
3770 cout <<
"CWB::Toolbox::setVeto - Error opening file " << ofname.Data() << endl;
3773 TTree *trtmp = (TTree*)itree->CloneTree(0);
3775 TString tVeto = veto_name;tVeto+=
"/b";
3777 trtmp->SetBranchAddress(veto_name.Data(),&bVeto);
3779 trtmp->Branch(veto_name.Data(),&bVeto,tVeto.Data());
3788 cout <<
"Start applying flag to time["<<iIFO<<
"]..." << endl;
3794 int ipc = (
int)((
double)(isize+1)/10.);
if(ipc==0) ipc=1;
3796 double ttime=time[
id[
h]];
3797 for (
int h=0;h<
isize;h++) bveto[h]=0;
3798 for (
int j=0;
j<vsize;
j++) {
3799 while ((ttime<=vlist[
j].
stop) && (h<
isize)) {
3800 if ((ttime>vlist[
j].
start)&&(ttime<=vlist[
j].stop)) {bveto[
id[
h]]=1;count++;}
else bveto[
id[
h]]=0;
3801 if(++h<isize) ttime=time[
id[
h]];
3802 if (h%ipc==0) {cout <<
pc;
if (pc<100) cout <<
" - ";pc+=10;cout.flush();}
3805 cout << pc << endl << endl;
3807 for (
int h=0;h<
isize;h++) {
3816 cout <<
"Writing new ofile "<< ofname.Data() << endl;
3817 Int_t osize = (Int_t)trtmp->GetEntries();
3818 cout <<
"osize : " << osize << endl;
3819 cout <<
"Flagged events: " << count <<
" Percentage: "<< (double)count/osize << endl;
3828 TString ecwb_pparameters_name =
TString(gSystem->Getenv(
"CWB_PPARAMETERS_FILE"));
3829 for(
int i=0;
i<gApplication->Argc()-1;
i++) {
3830 if(
TString(gApplication->Argv(
i)).Contains(
".C")) {
3831 char* parametersBuffer = readFile(gApplication->Argv(
i));
3832 if(parametersBuffer!=NULL) {
3833 if(
TString(gApplication->Argv(
i))==ecwb_pparameters_name) {
3839 delete [] parametersBuffer;
3845 sprintf(work_dir,
"%s",gSystem->WorkingDirectory());
3849 sprintf(veto_log,
"%s Flagged events: %d/%d - Percentage : %f ",
3850 veto_name.Data(),
count, osize, (double)count/osize );
3859 if(
n%2) ofname.ReplaceAll(
".root.tmp.2",
".root.tmp.1");
3860 else ofname.ReplaceAll(
".root.tmp.1",
".root.tmp.2");
3864 for(
int i=0;
i<nNET;
i++) xifos[
i].
clear();
3871 lfname.ReplaceAll(
".root",veto_file_label);
3872 lfname.ReplaceAll(
"wave_",
"live_");
3873 TString ilfname = idir+
"/"+ifName;
3874 ilfname.ReplaceAll(
"wave_",
"live_");
3876 imfname.ReplaceAll(
"live_",
"mdc_");
3878 mfname.ReplaceAll(
"live_",
"mdc_");
3880 ilstfname.ReplaceAll(
"wave_",
"merge_");
3881 ilstfname.ReplaceAll(
".root",
".lst");
3883 lstfname.ReplaceAll(
"live_",
"merge_");
3884 lstfname.ReplaceAll(
".root",
".lst");
3886 cout <<
" rfile : " << rfname.Data() << endl;
3887 cout <<
" ifile : " << ifname.Data() << endl;
3888 cout <<
" ofile : " << ofname.Data() << endl;
3889 cout <<
" lfile : " << lfname.Data() << endl;
3890 cout <<
" mfile : " << mfname.Data() << endl;
3891 cout <<
" ilstfile : " << ilstfname.Data() << endl;
3892 cout <<
" lstfile : " << lstfname.Data() << endl;
3895 sprintf(cmd,
"mv %s %s",ifname.Data(),ofname.Data());
3896 cout << cmd << endl;
3900 estat = gSystem->GetPathInfo(ilfname,&
id,&size,&flags,&mt);
3902 sprintf(cmd,
"cd %s;ln -sf ../%s %s",odir.Data(),ilfname.Data(),lfname.Data());
3903 cout << cmd << endl;
3906 estat = gSystem->GetPathInfo(imfname,&
id,&size,&flags,&mt);
3908 sprintf(cmd,
"cd %s;ln -sf ../%s %s",odir.Data(),imfname.Data(),mfname.Data());
3909 cout << cmd << endl;
3912 estat = gSystem->GetPathInfo(ilstfname,&
id,&size,&flags,&mt);
3914 sprintf(cmd,
"cd %s;ln -sf ../%s %s",odir.Data(),ilstfname.Data(),lstfname.Data());
3915 cout << cmd << endl;
3918 sprintf(cmd,
"rm %s",rfname.Data());
3919 cout << cmd << endl;
3924 TFile fhist(ofname,
"UPDATE");
3925 history->Write(
"history");
3951 return (estat!=0) ?
false :
true;
3974 if ((estat!=0)&&(!question)) {
3975 cout <<
"CWB::Toolbox::checkFile - Error - File/Dir \"" << fName.Data() <<
"\" not exist" << endl;
3982 if ((estat==0)&&(question)) {
3986 cout <<
"File/Dir " << fName.Data() <<
" already exist" << endl;
3987 if(message.Sizeof()>1) cout << message.Data() << endl;
3988 cout <<
"Do you want to overwrite it ? (y/n) ";
3990 cout << endl << endl;
3991 }
while ((strcmp(answer,
"y")!=0)&&(strcmp(answer,
"n")!=0));
3992 if (strcmp(answer,
"n")==0) overwrite=
false;
4015 if((estat==0)&&(question==
true)) {
4020 cout <<
"dir \"" << dir.Data() <<
"\" already exist" << endl;
4021 cout <<
"Do you want to remove the files & recreate dir ? (y/n) ";
4024 }
while ((strcmp(answer,
"y")!=0)&&(strcmp(answer,
"n")!=0));
4025 if (strcmp(answer,
"y")==0) {
4026 if(
remove)
sprintf(cmd,
"rm %s/*",dir.Data());
4027 cout << cmd << endl;
4029 sprintf(cmd,
"mkdir -p %s",dir.Data());
4030 cout << cmd << endl;
4033 }
else if((estat==0)&&(question==
false)) {
4034 if(
remove)
sprintf(cmd,
"rm %s/*",dir.Data());
4035 cout << cmd << endl;
4037 sprintf(cmd,
"mkdir -p %s",dir.Data());
4038 cout << cmd << endl;
4041 sprintf(cmd,
"mkdir -p %s",dir.Data());
4042 cout << cmd << endl;
4066 if((estat==0)&&(question==
true)) {
4071 sprintf(cmd,
"rm -rf %s",dir.Data());
4072 cout << cmd << endl;
4073 cout <<
"Do you want to remove the dir ? (y/n) ";
4076 }
while ((strcmp(answer,
"y")!=0)&&(strcmp(answer,
"n")!=0));
4077 if (strcmp(answer,
"y")==0) {
4081 }
else if((estat==0)&&(question==
false)) {
4082 sprintf(cmd,
"rm -rf %s",dir.Data());
4083 cout << cmd << endl;
4105 cout << question <<
" (y/n) ";
4108 }
while ((strcmp(answer,
"y")!=0)&&(strcmp(answer,
"n")!=0));
4109 return (strcmp(answer,
"y")==0) ?
true :
false;
4128 TIter
next(liv.GetListOfBranches());
4129 while ((branch=(TBranch*)
next())) {
4130 if (
TString(
"slag").CompareTo(branch->GetName())==0) slagFound=
true;
4134 cout <<
"CWB::Toolbox::getZeroLiveTime : Error - live tree do not contains slag leaf" << endl;
4138 long int ntot = liv.GetEntries();
4139 liv.Draw(
"live",TString::Format(
"lag[%d]==0&&slag[%d]==0",nIFO,nIFO).Data(),
"goff",ntot);
4140 long int nsel = liv.GetSelectedRows();
4141 double*
live = liv.GetV1();
4144 for(
long int i=0;
i<
nsel;
i++) liveZero += live[
i];
4154 int lag_number,
int slag_number,
int dummy) {
4194 std::map <double, std::map <double, int> > QMap;
4199 TIter
next(liv.GetListOfBranches());
4200 while ((branch=(TBranch*)
next())) {
4201 if (
TString(
"slag").CompareTo(branch->GetName())==0) slagFound=
true;
4205 cout <<
"CWB::Toolbox::getLiveTime : Error - live tree do not contains slag leaf" << endl;
4209 int run_max = liv.GetMaximum(
"run");
4212 long int ntot = liv.GetEntries();
4215 TLeaf* leaf = liv.GetLeaf(
"lag");
4217 cout <<
"CWB::Toolbox::getLiveTime : Error - lag leaf is not present" << endl;
4220 branch = leaf->GetBranch();
4222 for (
long int i=0;
i<ntot; ++
i) {
4223 long int entryNumber = liv.GetEntryNumber(
i);
4224 if (entryNumber < 0)
break;
4225 branch->GetEntry(entryNumber);
4226 double val = leaf->GetValue(nIFO);
4227 if (val>lag_max) lag_max = (
int)val;
4230 liv.SetBranchAddress(
"slag",xslag);
4231 liv.SetBranchAddress(
"lag",xlag);
4232 liv.SetBranchAddress(
"run",&xrun);
4233 liv.SetBranchAddress(
"live",&xlive);
4234 liv.SetBranchStatus(
"*",
false);
4235 liv.SetBranchStatus(
"live",
true);
4236 liv.SetBranchStatus(
"lag",
true);
4237 liv.SetBranchStatus(
"slag",
true);
4238 liv.SetBranchStatus(
"run",
true);
4241 int ipc = double(ntot)/10.;
if(ipc==0) ipc=1;
4242 for(
long int i=0;
i<ntot;
i++) {
4245 if(
i%ipc==0) {
if(ntot>100) {cout << pc<<
"%";
if (pc<100) cout <<
" - ";pc+=10;cout.flush();}}
4247 if((lag_number>=0)&&(slag_number>=0)) {
4248 Live = (xlag[
nIFO]==lag_number&&xslag[
nIFO]==slag_number) ? xlive : 0.;
4250 if((lag_number>=0)&&(slag_number==-1)) {
4251 Live = ((xlag[
nIFO]==lag_number)&&!((xlag[nIFO]==0)&&(xslag[
nIFO]==0))) ? xlive : 0.;
4253 if((lag_number==-1)&&(slag_number>=0)) {
4254 Live = ((xslag[
nIFO]==slag_number)&&!((xlag[nIFO]==0)&&(xslag[
nIFO]==0))) ? xlive : 0.;
4256 if((lag_number==-1)&&(slag_number==-1)) {
4257 Live = !((xlag[
nIFO]==0)&&(xslag[nIFO]==0)) ? xlive : 0.;
4266 if(QMap.find(xlag[nIFO])!=QMap.end()) {
4267 if(QMap[xlag[nIFO]].find(xslag[nIFO])!=QMap[xlag[
nIFO]].end()) {
4274 if((lag_number>=0)&&(slag_number>=0)) {
4275 save = (xlag[
nIFO]==lag_number&&xslag[
nIFO]==slag_number) ? save :
false;
4277 if((lag_number>=0)&&(slag_number==-1)) {
4278 save = ((xlag[
nIFO]==lag_number)&&!((xlag[nIFO]==0)&&(xslag[
nIFO]==0))) ? save :
false;
4280 if((lag_number==-1)&&(slag_number>=0)) {
4281 save = ((xslag[
nIFO]==slag_number)&&!((xlag[nIFO]==0)&&(xslag[
nIFO]==0))) ? save :
false;
4283 if((lag_number==-1)&&(slag_number==-1)) {
4284 save = !((xlag[
nIFO]==0)&&(xslag[nIFO]==0)) ? save :
false;
4288 for (
int j=0; j<
nIFO; j++) Qslag[j].
append(xslag[j]);
4295 dlag=xslag[
nIFO]*lag_max+xlag[
nIFO];
4296 Qdlag.
append(sqrt(dlag));
4299 if(pc==100) cout << pc<<
"%";;
4300 cout << endl << endl;
4303 double* dlag =
new double[Qdlag.
size()];
4305 Int_t *
id =
new Int_t[Qdlag.
size()];
4306 TMath::Sort((
int)Qdlag.
size(),dlag,
id,
false);
4311 for (
int j=0;
j<nIFO+1;
j++) {
4319 for (
int j=0;
j<nIFO+1;
j++) {
4346 TString wdir = gSystem->WorkingDirectory();
4347 TSystemDirectory gdir(
"", dir_name);
4348 TList *dfiles = NULL;
4350 void *dir = gSystem->OpenDirectory(dir_name);
4352 const char *
file = 0;
4355 while ((file = gSystem->GetDirEntry(dir))) {
4356 dfiles->Add(
new TSystemFile(file, dir_name));
4358 gSystem->FreeDirectory(dir);
4361 dfiles = gdir.GetListOfFiles();
4364 cout <<
"CWB::Toolbox::getFileListFromDir : Error - dir not found !!!" << endl;
4367 TIter dnext(dfiles);
4373 while ((dfile = (TSystemFile*)dnext())) {
4374 fname = dfile->GetName();
4375 sprintf(path,
"%s/%s",dir_name.Data(),fname.Data());
4377 if ((endString!=
"")&&!fname.EndsWith(endString)) fsave=
false;
4378 if ((beginString!=
"")&&!fname.BeginsWith(beginString)) fsave=
false;
4379 if ((containString!=
"")&&!fname.Contains(containString)) fsave=
false;
4380 if(fsave) fileList.push_back(path);
4383 gSystem->ChangeDirectory(wdir);
4393 std::map<int,TString>
4409 std::map<int, TString> fileMap;
4410 for(
int i=0;
i<fileList.size();
i++) {
4411 fileMap[getJobId(fileList[
i])]=fileList[
i];
4431 double LT=0.,LAMBDA;
4432 double normalization=0;
4433 double enormalization=0;
4440 double ChiSquare=0.0;
4441 double dChiSquare=0.0;
4442 int minCountsPerBin=5;
4445 int min_fa_per_lag=1000000000;
4446 int max_fa_per_lag=0;
4448 if(Wlag[nIFO].data[
j]>0.) {
4450 if(fa_per_lag<min_fa_per_lag) min_fa_per_lag=fa_per_lag;
4451 if(fa_per_lag>max_fa_per_lag) max_fa_per_lag=fa_per_lag;
4454 int nbin = max_fa_per_lag-min_fa_per_lag;
4457 TH1I *h1 =
new TH1I(
"h1",
"h1",nbin,min_fa_per_lag,max_fa_per_lag);
4460 if(Wlag[nIFO].data[
j]>0.) {
4466 LAMBDA= LT>0 ? NC/LT : 0;
4468 cout <<
"Total Number of bkg coinc.: " << NC <<
" total Live Time: "
4469 << LT <<
" nb = " << LAMBDA << endl;
4473 TCanvas *
canvas =
new TCanvas(
"BackgroundPoissonFit",
"Background Poisson Fit",32,55,750,502);
4474 canvas->Range(-0.75,-1.23433,6.75,8.17182);
4475 canvas->SetBorderSize(1);
4476 canvas->SetFillColor(0);
4479 canvas->SetFrameFillColor(0);
4482 TF1 poisson(
"PoissonIFunction",
PoissonIFunction,min_fa_per_lag,max_fa_per_lag,2);
4483 poisson.FixParameter(0,h1->GetEntries());
4484 poisson.SetParameter(1,h1->GetMean());
4486 TH1D* hfit = (TH1D*)h1->Clone(
"hfit");
4489 for (
int k=1;
k<=hfit->GetNbinsX();
k++) {
4491 if (poisson.Eval(n)>minCountsPerBin) {
4493 dChiSquare=pow((hfit->GetBinContent(
k)-poisson.Eval(n)),2)/poisson.Eval(n);
4494 ChiSquare+=dChiSquare;
4495 cout <<
"NCoinc = " << n <<
" Found = " << hfit->GetBinContent(
k) <<
" Expected = "
4496 << poisson.Eval(n) <<
" Chi2_bin" << n <<
"= " << dChiSquare<<endl;
4501 cout <<
"CWB::Toolbox::doPoissonPlot - Warning !!! - Poisson NDF <=0 " << endl;
4506 double myPLevel=TMath::Prob(ChiSquare,myNDF);
4507 cout<<
"myChiSquare :"<<ChiSquare<<endl;
4508 cout <<
"NDF : " << myNDF << endl;
4509 cout<<
"myPlevel :"<<myPLevel<<endl;
4510 int XMIN=kMaxInt,
XMAX=kMinInt;
4512 while((hfit->GetBinContent(g)==0)&&(g<hfit->GetNbinsX())){XMIN=
g;g++;}
4514 while((hfit->GetBinContent(hfit->GetNbinsX()-
g)==0)&&(g<hfit->GetNbinsX())){XMAX=hfit->GetNbinsX()-
g;g++;}
4517 cout<<XMIN<<
" "<<XMAX<<endl;
4518 hfit->Fit(
"PoissonIFunction",
"R");
4519 TF1* fpois = hfit->GetFunction(
"PoissonIFunction");
4520 fpois->SetFillColor(kGreen);
4521 fpois->SetFillStyle(3002);
4522 fpois->SetLineColor(kGreen);
4523 fpois->SetLineStyle(1);
4524 fpois->SetLineWidth(1);
4525 fpois->SetLineColor(kGreen);
4526 hfit->SetTitle(
"Poisson Fit (Black : Data - Green : Fit)");
4528 hfit->SetLineWidth(4);
4529 hfit->GetXaxis()->SetTitle(
"#False Alarms/lag");
4530 hfit->GetYaxis()->SetTitle(
"#Counts");
4531 hfit->GetXaxis()->SetTitleSize(0.04);
4532 hfit->GetYaxis()->SetTitleSize(0.05);
4533 hfit->GetXaxis()->SetLabelSize(0.04);
4534 hfit->GetYaxis()->SetLabelSize(0.04);
4535 hfit->GetXaxis()->SetTitleOffset(0.97);
4536 hfit->GetYaxis()->SetTitleOffset(1.0);
4537 hfit->GetXaxis()->SetRange(XMIN,XMAX);
4538 gStyle->SetOptFit(0);
4539 gStyle->SetOptStat(0);
4544 chi2 = fpois->GetChisquare();
4545 ndf = fpois->GetNDF()-1;
4546 plevel = TMath::Prob(chi2,ndf);
4547 normalization = fpois->GetParameter(0);
4548 enormalization = fpois->GetParError(0);
4549 mean = fpois->GetParameter(1);
4550 emean = fpois->GetParError(1);
4552 cout <<
"Mean : "<<mean<<endl;
4553 cout <<
"Norm : "<<normalization<<endl;
4554 cout <<
"ChiSquare : " << chi2 << endl;
4555 cout <<
"NDF : " << ndf << endl;
4556 cout <<
"Plevel : " << plevel << endl;
4558 TLegend *legend =
new TLegend(0.597,0.660,0.961,0.921,NULL,
"brNDC");
4559 legend->SetLineColor(1);
4560 legend->SetTextSize(0.033);
4561 legend->SetBorderSize(1);
4562 legend->SetLineStyle(1);
4563 legend->SetLineWidth(1);
4564 legend->SetFillColor(10);
4565 legend->SetFillStyle(1001);
4567 legend->SetTextSize(0.03);
4569 sprintf(entry,
"# lags = %d ",(
int)Wlag[nIFO].
size());
4570 legend->AddEntry(
"",entry,
"");
4573 legend->AddEntry(
"*",entry,
"");
4574 sprintf(entry,
"Total Live time = %d s",
int(LT));
4575 legend->AddEntry(
"*",entry,
"");
4576 sprintf(entry,
"Mean = %.3f +/-%.3f FA/lag",mean,emean);
4577 legend->AddEntry(
"*",entry,
"");
4578 sprintf(entry,
"Chi2 (counts>%d) = %.3f",minCountsPerBin,ChiSquare);
4579 legend->AddEntry(
"*",entry,
"");
4580 sprintf(entry,
"NDF = %d",myNDF);
4581 legend->AddEntry(
"*",entry,
"");
4582 sprintf(entry,
"p-level = %.3f",myPLevel);
4583 legend->AddEntry(
"*",entry,
"");
4588 sprintf(fname,
"%s/Lag_PoissonFit.png",odir.Data());
4589 canvas->Print(fname);
4604 const int nCWB = 35;
4628 "CWB_ROOTLOGON_FILE",
4629 "CWB_PARAMETERS_FILE",
4630 "CWB_UPARAMETERS_FILE",
4631 "CWB_PPARAMETERS_FILE",
4632 "CWB_UPPARAMETERS_FILE",
4637 "CWB_HTML_BODY_PROD",
4638 "CWB_HTML_BODY_SIM",
4645 for(
int i=0;
i<nCWB;
i++) {
4646 if(gSystem->Getenv(ecwb_name[
i])==NULL) {
4650 ecwb_value[
i]=
TString(gSystem->Getenv(ecwb_name[i]));
4656 for(
int i=0;
i<nCWB;
i++) ecwb_csize+=ecwb_name[
i].Sizeof();
4657 for(
int i=0;
i<nCWB;
i++) ecwb_csize+=ecwb_value[
i].Sizeof();
4659 char* iBuffer =
new char[2*ecwb_csize];
4660 bzero(iBuffer,(2*ecwb_csize)*
sizeof(
char));
4664 for(
int i=0;
i<nCWB;
i++) {
4665 len = ecwb_name[
i].Sizeof();
4666 strncpy(iBuffer+iLength,ecwb_name[
i].Data(),len);
4668 iBuffer[iLength]=
'=';
4670 len = ecwb_value[
i].Sizeof();
4671 strncpy(iBuffer+iLength,ecwb_value[
i].Data(),len);
4673 iBuffer[iLength]=0x0a;
4694 TIter
next(itree->GetListOfBranches());
4695 while ((branch=(TBranch*)
next())) {
4696 if (
TString(leaf.Data()).CompareTo(branch->GetName())==0) bleaf=
true;
4719 cout <<
"CWB::Toolbox::makeSpectrum : Error - chuncklen<=0" << endl;
4724 cout <<
"CWB::Toolbox::makeSpectrum : Error - scratchlen<0" << endl;
4728 int scratchsize = scratchlen*x.
rate();
4729 int blocksize = chuncklen*x.
rate();
4730 scratchsize-=scratchsize%2;
4731 blocksize-=blocksize%2;
4732 double df=(double)x.
rate()/(double)(blocksize);
4734 if(x.
size()-2*scratchsize<blocksize) {
4735 cout <<
"CWB::Toolbox::makeSpectrum : Error - data size not enough to produce PSD" << endl;
4739 int loops = (x.
size()-2*scratchsize)/blocksize;
4740 cout <<
"Rate: " << x.
rate() << endl;
4742 double* window =
new double[blocksize];
4743 blackmanharris(window, blocksize);
4751 for (
int n=0;
n<loops;
n++) {
4755 for (
int i=0;
i<blocksize;
i++) y.
data[
i]=x.
data[
i+scratchsize+shift];
4759 for (
int i=0;
i<blocksize;
i+=2) psd[
i/2]+=pow(y.
data[
i],2)+pow(y.
data[
i+1],2);
4762 for (
int i=0;
i<blocksize/2;
i++) psd[
i]=sqrt(psd[
i]/(
double)loops);
4764 for (
int i=0;
i<blocksize/2;
i++) psd[
i]*=sqrt(2/df);
4766 for (
int i=0;
i<blocksize/2;
i++) psd[
i]*=sqrt(1/df);
4792 makeSpectrum(psd, x, chuncklen, scratchlen, oneside);
4797 if (!out.good()) {cout <<
"CWB::Toolbox::makeSpectrum - Error : Opening File : " << ofname.Data() << endl;gSystem->Exit(1);}
4798 for (
int i=0;
i<psd.
size();
i++) {
4799 double freq =
i*df+psd.
start();
4800 out << freq <<
" " << psd[
i] << endl;
4826 #define OTIME_LENGHT 616 // minimum time lenght simulation
4827 #define TIME_SCRATCH 184 // time scratch used by the FFT
4828 #define LOW_CUT_FREQ 2.0 // output noise is 0 for freq<LOW_CUT_FREQ
4829 #define FREQ_RES 0.125 // input PSD is resampled with dF=FREQ_RES
4830 #define SRATE 16384. // output noise is produced @ rate=SRATE
4835 double ilenght = u.
size()/u.
rate();
4840 in.open(fName.Data(),
ios::in);
4842 cout <<
"CWB::Toolbox::getSimNoise - Error Opening File : " << fName.Data() << endl;
4849 in.getline(str,1024);
4850 if (!in.good())
break;
4851 if(str[0] !=
'#') size++;
4854 in.clear(ios::goodbit);
4855 in.seekg(0, ios::beg);
4863 if (!in.good())
break;
4864 if(ish.
data[cnt]<=0)
4865 {cout <<
"CWB::Toolbox::getSimNoise - input sensitivity file : " << fName.Data()
4866 <<
" contains zero at frequency : " << ifr.
data[
cnt] <<
" Hz " << endl;gSystem->Exit(1);}
4876 convertSampleRate(ifr,ish,ofr,osh);
4889 for (
int j=0;
j<time_factor;
j++) {
4894 y*=1./sqrt(time_factor);
4903 double am = y.
data[
i];
4916 int scratch=z.
size()/z.
rate()-otime_lenght;
4917 cout <<
"CWB::Toolbox::getSimNoise - scratch : " << scratch <<
" osize : " << z.
size()/z.
rate() << endl;
4918 if (scratch<0) {cout <<
"Error : bad data length -> " << z.
size()/z.
rate() << endl;gSystem->Exit(1);}
4926 random.SetSeed(seed+run);
4928 random.SetSeed(seed+run+1);
4933 cout <<
"CWB::Toolbox::getSimNoise - Error : whitened data size " << u.
size()
4934 <<
" is greater than temporary datat size " << x.
size() << endl;
4939 for(
int i=0;
i<u.
size();
i++) x[
i+iS]=u[
i];
4955 double df=u.rate()/u.size();
4956 int ipad =
fabs(seed)/
df;
4957 if(ipad>u.size()/2-1) ipad=u.size()/2-1;
4958 double fpad = sqrt(pow(u.data[2*ipad],2)+pow(u.data[2*ipad+1],2))*
run;
4959 for(
int i=0;
i<(
int)u.size()/2;
i++) {
4961 if(frequency<=
fabs(seed)) {
4962 u.data[2*
i] = gRandom->Gaus(0,fpad);
4963 u.data[2*i+1] = gRandom->Gaus(0,fpad);
4969 df=u.rate()/u.size();
4976 scratch=(osize-otime_lenght*u.rate())/2;
4977 for (
int i=0;
i<otime_lenght*u.rate();
i++) u.data[
i]=u.data[scratch+
i];
4979 u.resize(otime_lenght*u.rate());
4998 in.open(fName.Data(),
ios::in);
5000 {cout <<
"CWB::Toolbox::ReadDetectorPSD - Error Opening File : "
5001 << fName.Data() << endl;gSystem->Exit(1);}
5003 cout <<
"CWB::Toolbox::ReadDetectorPSD - Read File : " << fName.Data() << endl;
5008 in.getline(str,1024);
5009 if (!in.good())
break;
5010 if(str[0] !=
'#') size++;
5013 in.clear(ios::goodbit);
5014 in.seekg(0, ios::beg);
5022 if (!in.good())
break;
5023 if(ish.
data[cnt]<=0)
5024 {cout <<
"CWB::Toolbox::ReadDetectorPSD - input sensitivity file : " << fName.Data()
5025 <<
" contains zero at frequency : " << ifr.
data[
cnt] <<
" Hz " << endl;gSystem->Exit(1);}
5031 size=
int(fWidth/dFreq);
5036 convertSampleRate(ifr,ish,ofr,osh);
5038 osh.
rate(size*dFreq);
5055 if(iw.
size()<=0) {cout <<
"CWB::Toolbox::convertSampleRate : Error - input size <=0" << endl;gSystem->Exit(1);}
5056 if(iw.
rate()<=0) {cout <<
"CWB::Toolbox::convertSampleRate : Error - input rate <=0" << endl;gSystem->Exit(1);}
5057 if(ow.
size()<=0) {cout <<
"CWB::Toolbox::convertSampleRate : Error - output size <=0" << endl;gSystem->Exit(1);}
5058 if(ow.
rate()<=0) {cout <<
"CWB::Toolbox::convertSampleRate : Error - output rate <=0" << endl;gSystem->Exit(1);}
5062 double idx=1./iw.
rate();
5063 for (
int i=0;
i<(
int)ix.size();
i++) ix[
i]=
i*idx;
5067 double odx=1./ow.
rate();
5068 for (
int i=0;
i<(
int)ox.size();
i++) ox[
i]=
i*odx;
5071 TGraph* grin =
new TGraph(ix.size(), ix.data, iw.
data);
5072 TGraphSmooth* gs =
new TGraphSmooth(
"normal");
5073 TGraph* grout = gs->Approx(grin,
"linear", ox.size(), ox.data);
5076 for (
int i=0;
i<(
int)ox.size();
i++) {
5077 grout->GetPoint(
i,ox[
i],ow[i]);
5102 if(ix.
size()<=0) {cout <<
"CWB::Toolbox::convertSampleRate : Error - input size <=0" << endl;gSystem->Exit(1);}
5103 if(ox.
size()<=0) {cout <<
"CWB::Toolbox::convertSampleRate : Error - output size <=0" << endl;gSystem->Exit(1);}
5106 TGraph* grin =
new TGraph(ix.
size(), ix.
data, iy.
data);
5107 TGraphSmooth* gs =
new TGraphSmooth(
"normal");
5108 TGraph* grout = gs->Approx(grin,
"linear", ox.
size(), ox.
data);
5112 grout->GetPoint(
i,ox[
i],oy[i]);
5134 gRandom->SetSeed(1);
5139 TString efname = odir+
"/"+ifName;
5140 efname.ReplaceAll(
".root",
".N.root");
5142 if(!overwrite) gSystem->Exit(0);
5144 TString ifname = idir+
"/"+ifName;
5145 TString ofname = odir+
"/"+ifName;
5146 ofname.ReplaceAll(
".root",
".root.tmp.1");
5153 cout<<
"Opening BKG File : " << ifname.Data() << endl;
5154 TFile
ifile(ifname);
5155 if (ifile.IsZombie()) {
5156 cout <<
"CWB::Toolbox::setMultiplicity - Error opening file " << ifname.Data() << endl;
5159 TTree *
itree = (TTree*)ifile.Get(
"waveburst");
5161 cout <<
"CWB::Toolbox::setMultiplicity - tree waveburst is not present in file " << ifname.Data() << endl;
5164 Int_t tsize = (Int_t)itree->GetEntries();
5165 cout <<
"tree size : " << tsize << endl;
5167 cout <<
"CWB::Toolbox::setMultiplicity - tree waveburst is empty in file " << ifname.Data() << endl;
5170 itree->SetEstimate(tsize);
5171 char selection[256];
sprintf(selection,
"time[%d]:Entry$",
n);
5174 int isize = itree->Draw(selection,cut,
"goff",tsize);
5175 double*
time = itree->GetV1();
5176 double*
entry = itree->GetV2();
5178 Int_t *
id =
new Int_t[
isize];
5179 TMath::Sort((
int)isize,time,
id,
false);
5193 TIter
next(itree->GetListOfBranches());
5194 while((branch=(TBranch*)
next())) {
5195 if(
TString(
"Msize").CompareTo(branch->GetName())==0) {
5196 cout <<
"Multiplicity already applied" << endl;
5200 cout <<
"Do you want to overwrite the previous values ? (y/n) ";
5202 }
while((strcmp(answer,
"y")!=0)&&(strcmp(answer,
"n")!=0));
5203 if(strcmp(answer,
"n")==0) {
5215 int* Msize =
new int[
nIFO];
5216 int* Mid =
new int[
nIFO];
5217 UChar_t* Mm =
new UChar_t[
nIFO];
5219 char cMsize[32];
sprintf(cMsize,
"Msize[%1d]/I",nIFO);
5220 char cMid[32];
sprintf(cMid,
"Mid[%1d]/I",nIFO);
5221 char cMm[32];
sprintf(cMm,
"Mm[%1d]/b",nIFO);
5223 TFile* ftmp =
new TFile(ofname,
"RECREATE");
5224 if (ftmp->IsZombie()) {
5225 cout <<
"CWB::Toolbox::setMultiplicity - Error opening file " << ofname.Data() << endl;
5228 TTree *trtmp = (TTree*)itree->CloneTree(0);
5231 trtmp->SetBranchAddress(
"Msize",Msize);
5232 trtmp->SetBranchAddress(
"Mid",Mid);
5233 trtmp->SetBranchAddress(
"Mm",Mm);
5235 trtmp->Branch(
"Msize",Msize,cMsize);
5236 trtmp->Branch(
"Mid",Mid,cMid);
5237 trtmp->Branch(
"Mm",Mm,cMm);
5246 cout <<
"Start applying flag to time["<<
n<<
"]..." << endl;
5251 int ipc = (
int)((
double)(isize+1)/10.);
5252 int *oMsize =
new int[tsize];
5253 int *oMid =
new int[tsize];
5254 bool *oMm =
new bool[tsize];
5255 for(
int j=0;
j<tsize;
j++) {
5263 int ientry=
int(entry[
id[0]]);
5264 oMsize[ientry]=xMsize; oMid[ientry]=xMid; oMm[ientry]=
false;
5265 mlist.push_back(
id[0]);
5267 ientry=
int(entry[
id[
j]]);
5270 if((time[
id[j]]-time[
id[j-1]])<Tgap) {
5272 mlist.push_back(
id[j]);
5274 int xMm=mlist[
int(gRandom->Uniform(0,mlist.size()))];
5275 oMm[
int(entry[xMm])]=
true;
5276 for(
int m=0;
m<(
int)mlist.size();
m++) oMsize[
int(entry[mlist[
m]])]=xMsize;
5279 mlist.push_back(
id[j]);
5283 if(ipc!=0)
if(j%ipc==0) {cout <<
pc;
if (pc<100) cout <<
" - ";pc+=10;cout.flush();}
5285 cout << pc << endl << endl;
5287 int* iMsize =
new int[
nIFO];
5288 int* iMid =
new int[
nIFO];
5289 UChar_t* iMm =
new UChar_t[
nIFO];
5291 itree->SetBranchAddress(
"Msize",iMsize);
5292 itree->SetBranchAddress(
"Mid",iMid);
5293 itree->SetBranchAddress(
"Mm",iMm);
5296 for (
int j=0;
j<tsize;
j++) {
5306 if(Mm[
n]) nevt_master++;
5328 cout <<
"Writing new ofile "<< ofname.Data() << endl;
5329 Int_t osize = (Int_t)trtmp->GetEntries();
5330 cout <<
"osize : " << osize << endl;
5331 cout <<
"Master events: " << nevt_master <<
" Percentage: "<< 100.*double(nevt_master)/double(tsize) << endl;
5333 if((history!=NULL)&&(
n==nIFO-1)) {
5340 sprintf(work_dir,
"%s",gSystem->WorkingDirectory());
5342 char hTgap[256];
sprintf(hTgap,
"Tgap = %f",Tgap);
5351 if(
n%2) ofname.ReplaceAll(
".root.tmp.2",
".root.tmp.1");
5352 else ofname.ReplaceAll(
".root.tmp.1",
".root.tmp.2");
5360 lfname.ReplaceAll(
".root",
".N.root");
5361 lfname.ReplaceAll(
"wave_",
"live_");
5362 TString ilfname = idir+
"/"+ifName;
5363 ilfname.ReplaceAll(
"wave_",
"live_");
5367 mfname.ReplaceAll(
".root",
".N.root");
5368 mfname.ReplaceAll(
"wave_",
"merge_");
5369 mfname.ReplaceAll(
".root",
".lst");
5370 TString imfname = idir+
"/"+ifName;
5371 imfname.ReplaceAll(
"wave_",
"merge_");
5372 imfname.ReplaceAll(
".root",
".lst");
5374 cout <<
" rfile " << rfname.Data() << endl;
5375 cout <<
" ifile " << ifname.Data() << endl;
5376 cout <<
" ofile " << ofname.Data() << endl;
5377 cout <<
" lfile " << lfname.Data() << endl;
5378 cout <<
" mfile " << mfname.Data() << endl;
5381 sprintf(cmd,
"mv %s %s",ifname.Data(),ofname.Data());
5382 cout << cmd << endl;
5385 sprintf(cmd,
"cd %s;ln -s ../%s %s",odir.Data(),ilfname.Data(),lfname.Data());
5386 cout << cmd << endl;
5389 sprintf(cmd,
"cd %s;ln -s ../%s %s",odir.Data(),imfname.Data(),mfname.Data());
5390 cout << cmd << endl;
5392 sprintf(cmd,
"rm %s",rfname.Data());
5393 cout << cmd << endl;
5398 TFile fhist(ofname,
"UPDATE");
5425 gRandom->SetSeed(1);
5428 float* iWslag =
new float[nIFO+1];
5429 W.
fChain->SetBranchAddress(
"slag",iWslag);
5434 for(
int i=0;
i<(
int)Tlag.
size();
i++) liveTot+=Tlag[
i];
5446 for(
int j=0;
j<
n;
j++) {
5447 if(slag[
j]==islag) {save=
false;
j=
n;}
5449 if(save) slag.
append(islag);
5451 int ilag=
int(Wlag[nIFO].data[i]);
5454 for(
int j=0;
j<
n;
j++) {
5455 if(lag[
j]==ilag) {save=
false;
j=
n;}
5457 if(save) lag.
append(ilag);
5464 int* slag2id =
new int[slag.
max()+1];
5465 int* lag2id =
new int[lag.
max()+1];
5466 for(
int i=0;
i<(
int)slag.
size();
i++) slag2id[slag[
i]]=
i;
5470 int** lag2live = (
int**)malloc((slag.
size())*
sizeof(
int*));
5471 for (
int i=0;
i<(
int)slag.
size();
i++) lag2live[
i] =
new int[lag.
size()];
5475 int ilag=
int(Wlag[nIFO].data[i]);
5476 lag2live[slag2id[
islag]][lag2id[
ilag]]=Tlag[
i];
5480 bool** lagRej = (
bool**)malloc((slag.
size())*
sizeof(
bool*));
5481 for (
int i=0;
i<(
int)slag.
size();
i++) lagRej[
i] =
new bool[lag.
size()];
5484 int ntrg = wav.GetEntries();
5486 int *
id =
new int[
ntrg];
5487 int *wslag =
new int[
ntrg];
5488 int *wlag =
new int[
ntrg];
5490 double**
time = (
double**)malloc(nIFO*
sizeof(
double*));
5491 for (
int i=0;
i<
nIFO;
i++) time[
i] =
new double[ntrg];
5492 bool *trgMaster =
new bool[
ntrg];
5493 for (
int i=0;
i<
ntrg;
i++) trgMaster[
i] =
false;
5494 bool *wrej =
new bool[
ntrg];
5495 for (
int i=0;
i<
ntrg;
i++) wrej[
i] =
false;
5499 if(!Wsel[
i])
continue;
5503 for(
int j=0;
j<
nIFO;
j++)
if(!TMath::IsNaN(W.
time[
j])) time[
j][isel]=W.
time[
j];
else skip=
true;
5506 wslag[isel]=iWslag[
nIFO];
5516 vector<double> livlist;
5519 if(isel==0)
continue;
5520 TMath::Sort((
int)isel,time[
i],
id,
false);
5521 int islag = slag2id[wslag[
id[0]]];
5522 int ilag = lag2id[wlag[
id[0]]];
5524 livlist.push_back(live);
5525 idlist.push_back(
id[0]);
5526 for (
int j=1;
j<isel;
j++) {
5527 if(wrej[
id[
j]])
continue;
5528 if((time[i][
id[j]]-time[i][
id[j-1]])>Tgap) {
5536 int M=
int(gRandom->Uniform(0,(
int)idlist.size()));
5537 trgMaster[idlist[
M]]=
true;
5538 for(
int m=0;
m<(
int)idlist.size();
m++) {
5541 int islag = slag2id[wslag[idlist[
m]]];
5542 int ilag = lag2id[wlag[idlist[
m]]];
5543 if(!trgMaster[idlist[
m]]) {
5544 if(!lagRej[islag][ilag]) rejLive+=livlist[
m];
5546 wrej[idlist[
m]]=
true;
5547 Wsel[entry[idlist[
m]]]=2;
5554 int islag = slag2id[wslag[
id[
j]]];
5555 int ilag = lag2id[wlag[
id[
j]]];
5557 livlist.push_back(live);
5558 idlist.push_back(
id[j]);
5567 int M=
int(gRandom->Uniform(0,(
int)idlist.size()));
5568 trgMaster[idlist[
M]]=
true;
5569 for(
int m=0;
m<(
int)idlist.size();
m++) {
5572 int islag = slag2id[wslag[idlist[
m]]];
5573 int ilag = lag2id[wlag[idlist[
m]]];
5574 if(!trgMaster[idlist[
m]]) {
5575 if(!lagRej[islag][ilag]) rejLive+=livlist[
m];
5577 wrej[idlist[
m]]=
true;
5578 Wsel[entry[idlist[
m]]]=2;
5588 for (
int j=0;
j<isel;
j++) {
5589 if(wrej[
j])
continue;
5590 int islag = slag2id[wslag[
j]];
5591 int ilag = lag2id[wlag[
j]];
5592 if(lagRej[islag][ilag]) {
5625 for (
int i=0;
i<
nIFO;
i++)
delete [] time[
i];
5629 for (
int i=0;
i<(
int)slag.
size();
i++)
delete [] lag2live[
i];
5633 delete [] trgMaster;
5637 double rate = (isel-rejTrg)/(liveTot-rejLive);
5638 double erate = sqrt(isel-rejTrg)/(liveTot-rejLive);
5646 vector<double>& ex, vector<double>& ey) {
5648 GetStepFunction(
"", fName, 0, x, y, ex, ey);
5654 x.erase(x.begin()+size-1);
5655 y.erase(y.begin()+size-1);
5656 ex.erase(ex.begin()+size-1);
5657 ey.erase(ey.begin()+size-1);
5662 ex.erase(ex.begin());
5663 ey.erase(ey.begin());
5671 vector<double>&
x, vector<double>&
y, vector<double>& ex, vector<double>& ey) {
5700 if((option!=
"XMIN")&&(option!=
"XMAX")&&
5701 (option!=
"YMIN")&&(option!=
"YMAX")&&
5702 (option!=
"Y")&&(option!=
"EX")&&(option!=
"EY")) {
5703 cout<<
"GetLinearInterpolation : Error : option --value bad value -> "
5704 <<
"must be y/xmin/xmax/ymin/ymax"<<endl;
5707 if(option.BeginsWith(
"E")) {ferror=
true;option.Remove(0,1);}
5710 double xmin=DBL_MAX;
5711 double ymin=DBL_MAX;
5712 double xmax=-DBL_MAX;
5713 double ymax=-DBL_MAX;
5715 double exmin=DBL_MAX;
5716 double eymin=DBL_MAX;
5717 double exmax=-DBL_MAX;
5718 double eymax=-DBL_MAX;
5721 in.open(fName.Data());
5722 if (!in.good()) {cout <<
"GetGraphValue : Error Opening File : " << fName << endl;
exit(1);}
5727 in.getline(line,1024);
5728 if (in.eof())
break;
5729 std::stringstream linestream(line);
5731 if(linestream >> ix >> iy >> iex >> iey) {
5734 if(iex<exmin) exmin=iex;
5735 if(iey<eymin) eymin=iey;
5736 if(iex>exmax) exmax=iex;
5737 if(iey>eymax) eymax=iey;
5739 linestream.str(line);
5741 if(!(linestream >> ix >> iy)) {
5742 cout <<
"GetGraphValue : Wrong line format : must be 'x y' " << endl;
5745 ex.push_back(0); ey.push_back(0);
5746 exmin=0;eymin=0;exmax=0;eymax=0;
5749 if(!(linestream >> ix >> iy)) {
5750 cout <<
"GetGraphValue : Wrong line format : must be 'x y' " << endl;
5753 ex.push_back(0); ey.push_back(0);
5754 exmin=0;eymin=0;exmax=0;eymax=0;
5758 if(ix<xmin) xmin=ix;
5759 if(iy<ymin) ymin=iy;
5760 if(ix>xmax) xmax=ix;
5761 if(iy>ymax) ymax=iy;
5765 if(option==
"XMIN")
return ferror ? exmin : xmin;
5766 if(option==
"XMAX")
return ferror ? exmax : xmax;
5767 if(option==
"YMIN")
return ferror ? eymin : ymin;
5768 if(option==
"YMAX")
return ferror ? eymax : ymax;
5770 if(x.size()==0) cout <<
"GetGraphValue : Error - input file empty" << endl;
5773 int size = x.size();
5777 TMath::Sort(size,X.
data,I.
data,
false);
5781 std::vector<double>::iterator it;
5782 it = x.begin(); x.insert(it,-DBL_MAX);
5783 it = y.begin(); y.insert(it,y[I[0]]);
5784 it = ex.begin(); ex.insert(it,ex[I[0]]);
5785 it = ey.begin(); ey.insert(it,ey[I[0]]);
5792 TMath::Sort(size,X.
data,I.data,
false);
5794 x.push_back(x[I[size-1]]); y.push_back(-DBL_MAX);
5795 ex.push_back(ex[I[size-1]]); ey.push_back(ey[I[size-1]]);
5796 I.resize(size+1); I[
size]=I[size-1]; size++;
5799 if(V<x[I[0]])
return y[I[0]];
5800 if(V>=x[I[size-1]])
return y[I[size-1]];
5801 for(
int i=1;i<size;i++) if((V>=x[I[
i-1]]) && (V<x[I[
i]]))
return y[I[i-1]];
5804 if(V<x[I[0]])
return ex[I[0]];
5805 if(V>=x[I[size-1]])
return ex[I[size-1]];
5806 for(
int i=1;i<size;i++) if((V>=x[I[
i-1]]) && (V<x[I[
i]]))
return ex[I[i-1]];
5807 }
else if(option==
"Y") {
5808 if(V<x[I[0]])
return ey[I[0]];
5809 if(V>=x[I[size-1]])
return ey[I[size-1]];
5810 for(
int i=1;i<size;i++) if((V>=x[I[
i-1]]) && (V<x[I[
i]]))
return ey[I[i-1]];
5824 int R=1;
while (R < 2*(
int)w.
rate()) R*=2;
5826 if(R==2*w.
rate())
return;
5842 fprintf(stdout,
"--------------------------------\n");
5844 fprintf(stdout,
"--------------------------------\n");
5856 gSystem->Exec(
"date");
5858 FILE *
f = fopen(Form(
"/proc/%d/statm", gSystem->GetPid()),
"r");
5861 sscanf(s.Data(),
"%ld %ld", &total, &rss);
5862 cout << str.Data() <<
" virtual : " << total * 4 / 1024 <<
" (mb) rss : " << rss * 4 / 1024 <<
" (mb)" << endl;
5878 gRandom->SetSeed(0);
5879 int rnID =
int(gRandom->Rndm(13)*1.e9);
5880 UserGroup_t*
uinfo = gSystem->GetUserInfo();
5883 gSystem->Exec(
TString(
"mkdir -p /dev/shm/")+uname);
5887 sprintf(fName,
"/dev/shm/%s/%s_%d.%s",uname.Data(),label.Data(),
rnID,extension.Data());
5902 std::vector<std::string> vec(ilist.size());
5903 for(
int i=0;
i<ilist.size();
i++) vec[
i]=ilist[
i].Data();
5904 std::sort( vec.begin(), vec.end() ) ;
5905 vector<TString>
slist(ilist.size());
5906 for(
int i=0;
i<vec.size();
i++)
slist[
i]=vec[
i];
5919 if(!file.EndsWith(
"."+fext)) {
5920 cout <<
"CWB::Toolbox::getJobId : input file "
5921 << file.Data() <<
" must terminate with ." << fext << endl;
5925 file.ReplaceAll(
"."+fext,
"");
5926 TObjArray*
token = file.Tokenize(
'_');
5927 TObjString* sjobId = (TObjString*)token->At(token->GetEntries()-1);
5928 TString check = sjobId->GetString(); check.ReplaceAll(
"job",
"");
5929 if(!check.IsDigit()) {
5930 cout <<
"CWB::Toolbox::getJobId : input file " << file.Data()
5931 <<
" must terminate with _job#id." << fext << endl;
5932 cout <<
"#id is not a digit" << endl;
5936 if(token)
delete token;
5950 token = param.Tokenize(
TString(
" "));
5951 if((token->GetEntries())>0) {
5952 TObjString* otoken = (TObjString*)token->At(0);
5953 TString stoken = otoken->GetString();
5954 if(((token->GetEntries())>1) || (!stoken.BeginsWith(
"--"))) {
5955 cout <<
"CWB::Toolbox::getParameter : Bad param format \"" << param.Data() <<
"\"" << endl;
5956 cout <<
"Correct format is : --par1" << endl;
5960 if(token)
delete token;
5962 token = options.Tokenize(
TString(
" "));
5964 if((token->GetEntries())%2==1) {
5965 cout <<
"CWB::Toolbox::getParameter : Bad options format \"" << options.Data() <<
"\"" << endl;
5966 cout <<
"Correct format is : --par1 val1 --par2 val2 ..." << endl;
5969 for(
int i=0;
i<token->GetEntries();
i+=2) {
5970 TObjString* otoken = (TObjString*)token->At(
i);
5971 TString stoken = otoken->GetString();
5972 if(!stoken.BeginsWith(
"--")) {
5973 cout <<
"CWB::Toolbox::getParameter : Bad options format \"" << stoken.Data() <<
"\"" << endl;
5974 cout <<
"Correct format is : --par1 val1 --par2 val2 ..." << endl;
5978 for(
int i=0;
i<token->GetEntries();
i++) {
5979 TObjString* otoken = (TObjString*)token->At(
i);
5980 TString stoken = otoken->GetString();
5983 if(i<token->GetEntries()-1) {
5984 otoken = (TObjString*)token->At(
i+1);
5985 return otoken->GetString();
5989 if(token)
delete token;
6001 int MAXSIZE = 0xFFF;
6002 char proclnk[0xFFF];
6003 char filename[0xFFF];
6010 sprintf(proclnk,
"/proc/self/fd/%d", fno);
6011 r = readlink(proclnk, filename, MAXSIZE);
6012 if (r < 0)
return "";
6026 int MAXSIZE = 0xFFF;
6027 char proclnk[0xFFF];
6028 char filename[0xFFF];
6031 if (symlink != NULL)
6033 sprintf(proclnk,
"%s", symlink);
6034 r = readlink(symlink, filename, MAXSIZE);
6035 if (r < 0)
return "";
6049 vector<std::string> ifileList;
6050 vector<std::string> ipathList;
6051 vector<std::string> ofileList;
6052 vector<std::string> opathList;
6055 in.open(ifile.Data());
6057 cout <<
"CWB::Toolbox::getUniqueFileList : Error Opening Input File : " << ifile.Data() << endl;
6064 in.getline(istring,1024);
6065 if (!in.good())
break;
6068 TObjString* stoken =(TObjString*)token->At(token->GetEntries()-1);
6071 ipathList.push_back(istring);
6072 ifileList.push_back(fName.Data());
6077 for(
int i=0;
i<(
int)ifileList.size();
i++) {
6079 for(
int j=0;
j<(
int)ofileList.size();
j++) {
6083 ofileList.push_back(ifileList[
i]);
6084 opathList.push_back(ipathList[i]);
6094 cout <<
"CWB::Toolbox::getUniqueFileList : Error Opening Output File : " << ofile.Data() << endl;
6098 for(
int i=0;
i<(
int)ofileList.size();
i++) {
6099 out << opathList[
i] << endl;
6120 double temp=y[2*
i+1];
6143 y[
i]=sqrt(y[
i]*y[
i]+h[
i]*h[
i]);
6158 double twopi = TMath::TwoPi();
6167 p[
i]=TMath::ATan2(y[
i],h[i]);
6171 for(
int i=1;
i<(
int)p.size()/2-1;
i++) p[2*
i]=(p[2*
i-1]+p[2*
i+1])/2;
6175 y[
i] = (p[
i]-p[
i-1])/(twopi*dt);
6176 if(y[
i]>x.
rate()/2) y[
i]=0;
6179 if(y.
size()>1) y[0]=y[1];
else y[0]=0;
6202 z=0;
for(
int i=dN;
i<2*dN; ++
i) z[
i] = y[
i-dN];
6209 for(
int n=1;
n<=
N; ++
n ) {
6211 for(
int i=0;
i<
N; ++
i) y[
i] = z[dN+2*
n+
i]*z[dN+2*
n-
i];
6212 for(
int i=-N;
i<0; ++
i) y[dN+
i] = z[dN+2*
n+
i]*z[dN+2*
n-
i];
6216 for(
int m=0;
m<
N;
m++) wv[
m*N+(
n-1)] = y[2*
m];
6238 float cutoff = M_PI;
6243 for (j = 0; j < N-1; j++) dp[j] = p[j+1] - p[j];
6247 for (j = 0; j < N-1; j++)
6248 dps[j] = (dp[j]+M_PI) - floor((dp[j]+M_PI) / (2*M_PI))*(2*M_PI) - M_PI;
6252 for (j = 0; j < N-1; j++)
6253 if ((dps[j] == -M_PI) && (dp[
j] > 0))
6258 for (j = 0; j < N-1; j++)
6259 dp_corr[j] = dps[j] - dp[j];
6263 for (j = 0; j < N-1; j++)
6264 if (
fabs(dp[j]) < cutoff)
6269 cumsum[0] = dp_corr[0];
6270 for (j = 1; j < N-1; j++)
6271 cumsum[j] = cumsum[j-1] + dp_corr[j];
6275 for (j = 1; j <
N; j++) p[j] += cumsum[j-1];
6293 if(((a<b && b>=c && b>0)||(a>b && b<=c && b<0)) && (
fabs((a+c)/(2*b))<1)){
6295 omega = acos((a+c)/(2*b))/
dt;
6296 phase = atan2(a*a+c*a-2*b*b, 2*a*b*sin(omega*dt));
6297 amplitude = (a!=0)?(a/cos(phase)):(b/sin(omega*dt));
6324 cout <<
"CWB::Toolbox::WriteFrameFile - Error : wavearray size=0 or rate=0 " << endl;
6332 if(fmod(gps,1)!=0) {
6333 cout <<
"CWB::Toolbox::WriteFrameFile - Error : start gps time is not integer" << endl;
6337 if(fmod(length,1)!=0) {
6338 cout <<
"CWB::Toolbox::WriteFrameFile - Error : length is not integer" << endl;
6342 if(frDir==
"") frDir=
".";
6345 sprintf(frFile,
"%s/%s-%lu-%lu.gwf",frDir.Data(),frLabel.Data(),(
int)gps,(
int)
length);
6346 cout << frFile << endl;
6347 FrFile *ofp = FrFileONew(frFile,1);
6352 simFrame->frame = 0;
6355 simFrame->GTimeS =
gps;
6356 simFrame->GTimeN = 0;
6358 cout <<
"Size (sec) " << x.
size()/x.
rate() << endl;
6360 if(proc == NULL) {cout <<
"CWB::Toolbox::WriteFrameFile - Cannot create FrProcData" << endl;
exit(-1);}
6361 proc->timeOffset = 0;
6362 proc->tRange = simFrame->dt;
6365 for (
int i=0;
i<(
int)proc->data->nData;
i++) proc->data->dataD[
i] = x[
i];
6367 int err=FrameWrite(simFrame,ofp);
6368 if (err) {cout <<
"CWB::Toolbox::WriteFrameFile - Error writing frame" << endl;
exit(1);}
6369 FrameFree(simFrame);
6371 if (ofp!=NULL) FrFileOEnd(ofp);
size_t append(const wavearray< DataType_t > &)
virtual size_t size() const
Float_t * rho
biased null statistics
static double g(double e)
printf("total live time: non-zero lags = %10.1f \n", liveTot)
TB createDagFile(rslagList, full_condor_dir, data_label, jobFiles, cwb_stage_name)
fprintf(stdout,"start=%f duration=%f rate=%f\n", x.start(), x.size()/x.rate(), x.rate())
virtual void rate(double r)
wavearray< double > a(hp.size())
wavearray< double > Trun(500000)
cout<< "slagList size : "<< slagList.size()<< endl;cout<< endl<< "Start segments selection from dq cat1 list ..."<< endl<< endl;rslagList=TB.getSlagList(slagList, ifos, segLen, segMLS, segEdge, nDQF, DQF, CWB_CAT1);cout<< "Number of selected jobs after cat1 : "<< rslagList.size()<< endl;cout<< endl<< "Start segments selection from dq cat2 list ..."<< endl<< endl;rslagList=TB.getSlagList(rslagList, ifos, segLen, segTHR, segEdge, nDQF, DQF, CWB_CAT2);cout<< "Number of selected jobs after cat2 : "<< rslagList.size()<< endl;vector< TString > jobFiles
cout<< "skymap size : "<< L<< endl;for(int l=0;l< L;l++) sm.set(l, l);sm > const_cast< char * >("skymap.dat")
bool TypeAllowed(char *Name)
cout<< endl;cout<< "ts size = "<< ts.size()<< " ts rate = "<< ts.rate()<< endl;tf.Forward(ts, wdm);int levels=tf.getLevel();cout<< "tf size = "<< tf.size()<< endl;double dF=tf.resolution();double dT=1./(2 *dF);cout<< "rate(hz) : "<< RATE<< "\t layers : "<< nLAYERS<< "\t dF(hz) : "<< dF<< "\t dT(ms) : "<< dT *1000.<< endl;int itime=TIME_PIXEL_INDEX;int ifreq=FREQ_PIXEL_INDEX;int index=(levels+1)*itime+ifreq;double time=itime *dT;double freq=(ifreq >0)?ifreq *dF:dF/4;cout<< endl;cout<< "PIXEL TIME = "<< time<< " sec "<< endl;cout<< "PIXEL FREQ = "<< freq<< " Hz "<< endl;cout<< endl;wavearray< double > x
wavearray< double > psd(33)
std::vector< waveSegment > olist
TTree * fChain
root input file cointainig the analyzed TTree
cout<< "baudline_FFL : "<< baudline_FFL<< endl;ofstream out;out.open(baudline_FFL, ios::out);if(!out.good()){cout<< "Error Opening File : "<< baudline_FFL<< endl;exit(1);}ifstream in;in.open(frFiles[ifoID], ios::in);if(!in.good()){cout<< "Error Opening File : "<< frFiles[ifoID]<< endl;exit(1);}TString pfile_path="";char istring[1024];while(1){in > istring
virtual void start(double s)
vector< waveSegment > detSegs_dq2
wavearray< int > Wsel(ntrg)
TB mergeTrees(fileList, TREE_NAME, OUTPUT_MERGE_DIR, OFILE_NAME, false)
std::vector< waveSegment > mlist
cout<< "ctime : "<< int(ctime)<< " sec "<< ctime/3600.<< " h "<< ctime/86400.<< " day"<< endl;std::vector< waveSegment > jlist
virtual DataType_t max() const
cout<< endl;sprintf(dq1ListFile,"%s/%s.dq1", dump_dir, data_label);vector< waveSegment > dq1List
char * GetLog(char *Stage, int index)
int GetLogSize(char *Stage)
TB dumpSegList(dq1List, dq1ListFile, false)
int getLayer(wavearray< DataType_t > &w, double n)
param: n - layer number
TIter next(twave->GetListOfBranches())
Float_t * lag
time between consecutive events
wavearray< double > Tdlag
bool StageAlreadyPresent(char *Name)
vector< TString > getFileListFromDir(TString dir_name, TString endString="", TString beginString="")
vector< waveSegment > cat1List
bool SetHistoryModify(bool Replace=true)
vector< waveSegment > detSegs
vector< waveSegment > iseg
Double_t * time
beam pattern coefficients for hx
condor_log_dir ReplaceAll("X_HOME", uhome.Data())
cout<< "Starting reading output directory ..."<< endl;vector< TString > fileList
virtual void stop(double s)
double fabs(const Complex &x)
TString sel("slag[1]:rho[1]")
void resample(const wavearray< DataType_t > &, double, int=6)
void AddLog(char *Stage, char *Log, TDatime *Time=NULL)
void Forward(int n=-1)
param: wavelet - n is number of steps (-1 means full decomposition)
strcpy(RunLabel, RUN_LABEL)
cout<< "total cat1 livetime : "<< int(cat1_time)<< " sec "<< cat1_time/3600.<< " h "<< cat1_time/86400.<< " day"<< endl;cout<< endl;vector< waveSegment > cat2List
sprintf(tfres,"(1/%g)x(%g) (sec)x(Hz)", 2 *df, df)
char * AddType(char *TypeName)
wavearray< double > Wlag[NIFO_MAX+1]
char * GetHistory(char *StageName, char *Type)
const CWB::HistoryStage * GetStage(char *Name)
for(int i=0;i< 101;++i) Cos2[2][i]=0
virtual void resize(unsigned int)
void Inverse(int n=-1)
param: n - number of steps (-1 means full reconstruction)
void putLayer(wavearray< DataType_t > &, double n)
param: n - layer number
TString frLabel[NIFO_MAX]
void AddHistory(char *Stage, char *Type, char *History, TDatime *Time=NULL)
TB checkFile(gSystem->Getenv("CWB_ROOTLOGON_FILE"))
char * AddStage(char *StageName)
wavearray< double > Wslag[NIFO_MAX+1]