Logo Coherent WaveBurst  
Reference Guide
Logo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
cwb_report_sim.C
Go to the documentation of this file.
1 // post-production macro for the simulation report : used by the cwb_report command
2 {
3  #define NMDC_MAX 64
4 
5  CWB::Toolbox::checkFile(gSystem->Getenv("CWB_ROOTLOGON_FILE"));
6  CWB::Toolbox::checkFile(gSystem->Getenv("CWB_PARAMETERS_FILE"));
7  CWB::Toolbox::checkFile(gSystem->Getenv("CWB_UPARAMETERS_FILE"));
8  CWB::Toolbox::checkFile(gSystem->Getenv("CWB_PPARAMETERS_FILE"));
9  CWB::Toolbox::checkFile(gSystem->Getenv("CWB_UPPARAMETERS_FILE"));
10  CWB::Toolbox::checkFile(gSystem->Getenv("CWB_EPPARAMETERS_FILE"));
11 
12 #ifndef _USE_ROOT6
13  // the CWB_CAT_NAME declared in CWB_EPPARAMETERS_FILE is not visible. why?
14  // the include is defined again
15  #undef GTOOLBOX_HH
16 #else
17  #include "GToolbox.hh"
18 #endif
19 
20  if(nIFO==1) { // Single Detector Mode
22  config.Import();
23  config.SetSingleDetectorMode();
24  config.Export();
25  }
26 
27  // initialize the ifo name (takes into account the non built-in detectors)
28  char IFO[NIFO_MAX][32];
29  for(int n=0;n<nIFO;n++) {
30  if(strlen(ifo[n])!=0) strcpy(IFO[n],ifo[n]); else strcpy(IFO[n],detParms[n].name);
31  }
32 
33  CWB::Toolbox::mkDir(netdir,!pp_batch);
34 
35  gStyle->SetTitleOffset(1.4,"X");
36  gStyle->SetTitleOffset(1.2,"Y");
37  gStyle->SetLabelOffset(0.014,"X");
38  gStyle->SetLabelOffset(0.010,"Y");
39  gStyle->SetLabelFont(42,"X");
40  gStyle->SetLabelFont(42,"Y");
41  gStyle->SetTitleFont(42,"X");
42  gStyle->SetTitleFont(42,"Y");
43  gStyle->SetLabelSize(0.03,"X");
44  gStyle->SetLabelSize(0.03,"Y");
45 
46  gStyle->SetTitleH(0.050);
47  gStyle->SetTitleW(0.95);
48  gStyle->SetTitleY(0.98);
49  gStyle->SetTitleFont(12,"D");
50  gStyle->SetTitleColor(kBlue,"D");
51  gStyle->SetTextFont(12);
52  gStyle->SetTitleFillColor(kWhite);
53  //gStyle->SetLineColor(kWhite);
54  gStyle->SetNumberContours(256);
55  gStyle->SetCanvasColor(kWhite);
56  gStyle->SetStatBorderSize(1);
57 // gStyle->SetOptStat(kFALSE);
58 
59  gStyle->SetStatX(0.878);
60  gStyle->SetStatY(0.918);
61  gStyle->SetStatW(0.200);
62  gStyle->SetStatH(0.160);
63 // gStyle->SetStatBorderSize(1);
64  gStyle->SetStatColor(0);
65 
66  // remove the red box around canvas
67  gStyle->SetFrameBorderMode(0);
68  gROOT->ForceStyle();
69 
70  cout<<"cwb_report_sim.C starts..."<<endl;
71 
72 
73  Color_t colors[NMDC_MAX] = { 6, 3, 2, 8,43, 7, 8, 4, 4, 2,43, 1, 3, 1, 6, 7,
74  6, 3, 2, 8,43, 7, 8, 4, 4, 2,43, 1, 3, 1, 6, 7,
75  6, 3, 2, 8,43, 7, 8, 4, 4, 2,43, 1, 3, 1, 6, 7,
76  6, 3, 2, 8,43, 7, 8, 4, 4, 2,43, 1, 3, 1, 6, 7 };
77  Style_t markers[NMDC_MAX]= {20,21,22,23,29,29,21,22,20,21,22,23,29,20,21,22,
78  21,22,23,29,29,21,22,20,21,22,23,29,20,21,22,20,
79  21,22,23,29,29,21,22,20,21,22,23,29,20,21,22,20,
80  21,22,23,29,29,21,22,20,21,22,23,29,20,21,22,20 };
81  // histograms
82  TH2F* HH[NIFO_MAX][NMDC_MAX];
83  TH2F* NRE[NIFO_MAX][NMDC_MAX];
84  TH1F* hT[NMDC_MAX];
85  TH1F* hF[NMDC_MAX];
86  TGraphErrors* EFF[NMDC_MAX];
87 
88  for(int i=0;i<NMDC_MAX;i++) {
89  for(int j=0;j<nIFO;j++) HH[j][i]=NULL;
90  for(int j=0;j<nIFO;j++) NRE[j][i]=NULL;
91  hT[i]=NULL;
92  hF[i]=NULL;
93  EFF[i]=NULL;
94  }
95 
96  // transform T_ifar from years into sec
97  T_ifar*=(365.*24.*3600.);
98 
99  // XDQF structure used for internal's computations
100  dqfile* XDQF = new dqfile[nVDQF];
101 
102  // read injection file types
103  char imdc_set[NMDC_MAX][128]; // injection set
104  size_t imdc_type[NMDC_MAX]; // injection type
105  char imdc_name[NMDC_MAX][128]; // injection name
106  double imdc_flow[NMDC_MAX]; // injection low frequencies
107  double imdc_fhigh[NMDC_MAX]; // injection high frequencies
108  double imdc_fcentral[NMDC_MAX]; // injection low frequencies
109  double imdc_fbandwidth[NMDC_MAX]; // injection high frequencies
110  size_t imdc_index[NMDC_MAX]; // type reference array
111  size_t imdc_iset[NMDC_MAX]; // injection set index
112  size_t imdc_tset[NMDC_MAX]; // injection set type index
113 
114  int ninj=ReadInjType(mdc_inj_file,NMDC_MAX,imdc_set,imdc_type,
115  imdc_name,imdc_fcentral,imdc_fbandwidth);
116  if(ninj==0) {
117  cout << endl;
118  cout << "cwb_report_sim.C : Error - no injection types or bad format" << endl;
119  cout << "mdc injection file list : " << mdc_inj_file << endl;
120  cout << "format must be : mdc_set mdc_type mdc_name mdc_fcentral mdc_fbandwidth" << endl;
121  cout << "process terminated !!!" << endl;
122  exit(1);
123  }
124 
125  for(int i=0; i<NMDC_MAX; i++) {
126  imdc_flow[i] = imdc_fcentral[i]-imdc_fbandwidth[i];
127  if(imdc_flow[i]<fLow) imdc_flow[i]=fLow;
128  if(imdc_flow[i]>fHigh) imdc_flow[i]=fLow;
129  imdc_fhigh[i] = imdc_fcentral[i]+imdc_fbandwidth[i];
130  if(imdc_fhigh[i]<fLow) imdc_fhigh[i]=fHigh;
131  if(imdc_fhigh[i]>fHigh) imdc_fhigh[i]=fHigh;
132  }
133 
134  for(int i=0; i<NMDC_MAX; i++) imdc_index[i] = NMDC_MAX;
135  for(int j=0;j<ninj;j++) imdc_index[imdc_type[j]]=j;
136  for(int j=0;j<ninj;j++) {
137  cout << j << " " << imdc_index[j] << endl;
138  if(imdc_index[j]>=ninj) {
139  cout << endl;
140  cout << "cwb_report_sim.C : Error - mdc type must be < num max type inj = " << ninj << endl;
141  cout << "check mdc_type injection file list : " << mdc_inj_file << endl;
142  cout << "format : mdc_set mdc_type mdc_name mdc_fcentral mdc_fbandwidth" << endl;
143  cout << "process terminated !!!" << endl;
144  exit(1);
145  }
146  }
147 
149  int nset=0;
150  for(int i=0;i<ninj;i++) {
151  bool bnew=true;
152  for(int j=0;j<nset;j++) if(imdc_set[i]==imdc_set_name[j]) bnew=false;
153  if(bnew) imdc_set_name[nset++]=imdc_set[i];
154  }
155  cout << "nset : " << nset << endl;
156 
157  for(int i=0;i<nset;i++) {
158  for(int j=0;j<ninj;j++) if(imdc_set[j]==imdc_set_name[i]) imdc_iset[j]=i;
159  }
160 
161  for(int i=0;i<ninj;i++) {
162  for(int j=0;j<nset;j++) if(imdc_set[i]==imdc_set_name[j]) imdc_tset[imdc_type[i]]=j;
163  }
164 
165  for(int i=0;i<ninj;i++) {
166  cout << i << " " << imdc_name[i] << " " << imdc_set[i] << " " << imdc_iset[i]
167  << " " << imdc_tset[i] << " " << imdc_type[i] << " " << imdc_index[i] << endl;
168  }
169 
170  // compute efficiency vs threshold for each mdc type (used for ROC)
171  TString pp_eff_vs_thr_mode = CWB::Toolbox::getParameter(pp_eff_vs_thr,"--mode");
172  if((pp_eff_vs_thr_mode!="DISABLED")&&(pp_eff_vs_thr_mode!="disabled")) {
173 
174  TString pp_eff_vs_thr_eff = CWB::Toolbox::getParameter(pp_eff_vs_thr,"--eff");
175  int pp_eff = 50;
176  if(pp_eff_vs_thr_eff.IsFloat()) pp_eff = pp_eff_vs_thr_eff.Atoi();
177  if(pp_eff<0) pp_eff=0;
178  if(pp_eff>100) pp_eff=100;
179 
180  TChain sim("waveburst");
181  TChain mdc("mdc");
182  sim.Add(sim_file_name);
183  mdc.Add(mdc_file_name);
184 
185  char fname[1024];
186  wavearray<double> factorXX(ninj); factorXX=0;
187 
188  // if mode=FILE_NAME -> read factorXX from custom input file
189  if((pp_eff_vs_thr_mode!="AUTO")&&(pp_eff_vs_thr_mode!="auto")) {
190  sprintf(fname,"%s",pp_eff_vs_thr_mode.Data());
191  //cout << fname << endl;
192  FILE* fp = fopen(fname,"r");
193  if(fp==NULL) {
194  cout << "cwb_report_sim.C - Error opening file : " << fname << endl;
195  gSystem->Exit(1);
196  }
197  char xmdc_name[256];
199  float xfactors;
200  for(int i=0; i<ninj; i++) {
201  fscanf(fp,"%s %d %f",xmdc_name, &xmdc_type, &xfactors);
202  cout << i << " " << xmdc_name <<" "<< xmdc_type <<" "<< xfactors << endl;
203  for(int j=0;j<ninj;j++) {
204  if(TString(xmdc_name).Contains(imdc_name[j])) {factorXX[j]=xfactors;strcpy(imdc_name[j],xmdc_name);}
205  if(TString(imdc_name[j]).Contains(xmdc_name)) {factorXX[j]=xfactors;strcpy(imdc_name[j],xmdc_name);}
206  }
207  }
208  fclose(fp);
209  // check if input parameters are consistent to the current ones
210  for(int i=0; i<ninj; i++) {
211  if(factorXX[i]==0) {
212  cout << "cwb_report_sim.C - missing factor for : " << imdc_name[i] << endl << endl;
213  gSystem->Exit(1);
214  }
215  }
216  }
217 
218  for(int i=0; i<ninj; i++) {
219 
220  int nmdc,nsim;
221  char sim_cuts[1024];
222  char mdc_cuts[1024];
223  char fac_cuts[1024];
224  char rho_cuts[1024];
225 
226  // if mode=AUTO -> select the nearest factor to %XX efficiency
227  if((pp_eff_vs_thr_mode=="AUTO")||(pp_eff_vs_thr_mode=="auto")) {
228 
229  double effXX=0;
230  for(int k=0;k<nfactor;k++) {
231  sprintf(rho_cuts,"rho[%d]>%f",pp_irho,T_cut);
232  sprintf(fac_cuts,"abs(factor-%f)<0.1*%f",factors[k],factors[k]);
233  if(pp_merge_types) {
234  sprintf(sim_cuts,"%s && %s && %s",ch2,fac_cuts,rho_cuts);
235  } else {
236  sprintf(mdc_cuts,"type[0]==%d && %s",(int)(imdc_type[i]+1),fac_cuts);
237  sprintf(sim_cuts,"%s && type[1]==%lu && %s && %s",ch2,imdc_type[i]+1,fac_cuts,rho_cuts);
238  }
239  //cout << "mdc_cuts " << mdc_cuts << endl;
240  //cout << "sim_cuts " << sim_cuts << endl;
241  mdc.Draw("Entry$",mdc_cuts,"goff");
242  nmdc = mdc.GetSelectedRows();
243  sim.Draw("Entry$",sim_cuts,"goff");
244  nsim = sim.GetSelectedRows();
245  double xeff = double(nsim)/double(nmdc);
246  if(fabs(100*xeff-pp_eff)<fabs(100*effXX-pp_eff)) {effXX=xeff;factorXX[i]=factors[k];}
247  //cout << "factor : " << factors[k] << " eff : " << nsim << "/" << nmdc << " % " << xeff << endl;
248  }
249  //cout << "factorXX : " << factorXX[i] << endl;
250  }
251 
252  cout << i << "\tCompute efficiency vs threshold @ factor : "
253  << factorXX[i] << "\tmdc : " << imdc_name[i] << endl;
254 
255  // compute mdc injections @ factorXX
256  sprintf(fac_cuts,"abs(factor-%f)<0.1*%f",factorXX[i],factorXX[i]);
257  if(pp_merge_types) {
258  } else {
259  sprintf(mdc_cuts,"type[0]==%d && %s",(int)(imdc_type[i]+1),fac_cuts);
260  }
261  //cout << "mdc_cuts " << mdc_cuts << endl;
262  mdc.Draw("Entry$",mdc_cuts,"goff");
263  nmdc = mdc.GetSelectedRows();
264  //cout << "mdc size : " << nmdc << endl;
265 
266  // get the minimum rho for the efficiency computation
267  float rho_min=0;
268  TString pp_eff_vs_thr_rho_min = CWB::Toolbox::getParameter(pp_eff_vs_thr,"--rho_min");
269  if(pp_eff_vs_thr_rho_min.IsFloat()) rho_min = pp_eff_vs_thr_rho_min.Atof();
270 
271  // compute efficiency vs threshold @ factorXX
272  sprintf(fname,"%s/eff_%d_threshold_%s.txt",netdir,pp_eff,imdc_name[i]);
273  cout << fname << endl;
274  ofstream fout;
275  fout.open(fname, ios::out);
276  if (!fout.good()) {cout << "Error Opening File : " << fname << endl;exit(1);}
277  int rho_size=0;
278  double drho = (pp_rho_max-pp_rho_min)/pp_rho_bin;
279  for(int j=0; j<pp_rho_bin; j++) {
280  double rho = pp_rho_min+j*drho;
281  double xeff = 0;
282  if(rho>rho_min) {
283  if(pp_merge_types) {
284  sprintf(sim_cuts,"%s && %s && rho[%d]>%f", ch2,fac_cuts,pp_irho,rho);
285  } else {
286  sprintf(sim_cuts,"%s && type[1]==%lu && %s && rho[%d]>%f", ch2,imdc_type[i]+1,fac_cuts,pp_irho,rho);
287  }
288  //cout << "sim_cuts " << sim_cuts << endl;
289  sim.Draw("Entry$",sim_cuts,"goff");
290  nsim = sim.GetSelectedRows();
291  double xeff = double(nsim)/double(nmdc);
292  }
293  //cout << "rho : " << rho << " eff : " << nsim << "/" << nmdc << " % " << xeff << endl;
294  fout << rho << " " << xeff << endl;
295  }
296  fout.close();
297  }
298 
299  sprintf(fname,"%s/eff_%d_threshold_factors.txt",netdir,pp_eff,imdc_name[i]);
300  cout << fname << endl;
301  FILE* fp = fopen(fname,"w");
302  if(fp==NULL) {
303  cout << "cwb_report_sim.C - Error opening file : " << fname << endl;
304  gSystem->Exit(1);
305  }
306  for(int i=0; i<ninj; i++) {
307  fprintf(fp,"%s %d %g\n",imdc_name[i], (int)imdc_type[i], factorXX[i]);
308  }
309  fclose(fp);
310 
312  pp_eff_vs_thr_quit.ToUpper();
313  if(pp_eff_vs_thr_quit=="TRUE") {
314  cout << "efficiency " << pp_eff << " vs threshold terminated, exit" << endl;
315  gSystem->Exit(1);
316  }
317  }
318 
319  char fname[4096];
320  sprintf(fname,"%s/fit_parameters_ALL.txt", netdir);
321  FILE* in_all = fopen(fname,"w");
322  sprintf(fname,"%s/evt_parameters_ALL.txt", netdir);
323  FILE* evt_all = fopen(fname,"w");
324 
325  for (int iset=0;iset<nset;iset++) {
326 
327  TChain sim("waveburst");
328  TChain mdc("mdc");
329  sim.Add(sim_file_name);
330  mdc.Add(mdc_file_name);
331  netevent ww(&sim,nIFO);
332  injection mm(&mdc,nIFO);
333 
334  // check vetoes
335  UChar_t VETO[100];
336  int nXDQF=0;
337  for(int i=0;i<nVDQF;i++) {
338  if((VDQF[i].cat!=CWB_CAT2)&&(VDQF[i].cat!=CWB_HVETO)&&(VDQF[i].cat!=CWB_CAT3)) continue;
339  char veto_name[256];sprintf(veto_name,"%s_%s",CWB_CAT_NAME[VDQF[i].cat].Data(),VDQF[i].ifo);
340  if(!CWB::Toolbox::isLeafInTree(ww.fChain,veto_name)) {
341  cout << "cwb_report_sim.C Error : Leaf " << veto_name
342  << " is not present in tree" << endl;
343  exit(1);
344  }
345  }
346 
347  // build XDQF structure used for internal's computations
348  for(int j=0;j<nVDQF;j++) {
349  if(VDQF[j].cat==CWB_CAT0) continue;
350  if(VDQF[j].cat==CWB_CAT1) continue;
351  bool bifo=false;
352  for(int i=0;i<nIFO;i++) if(TString(IFO[i]).CompareTo(VDQF[j].ifo)==0) bifo=true;
353  if(bifo) XDQF[nXDQF++]=VDQF[j];
354  }
355  for(int j=0;j<nXDQF;j++) {
356  cout << "XDQF[" << j << "] " << CWB_CAT_NAME[XDQF[j].cat] << "_" << XDQF[j].ifo << endl;
357  }
358 
359  // set veto branches
360  for(int j=0;j<nXDQF;j++) {
361  char veto_name[256];
362  sprintf(veto_name,"%s_%s",CWB_CAT_NAME[XDQF[j].cat].Data(),XDQF[j].ifo);
363  ww.fChain->SetBranchAddress(veto_name,&VETO[j]);
364  }
365 
366  // sigmoid fit function
367  double inf = simulation==2 ? log10(factors[0]) : -25;
368  double sup = simulation==2 ? log10(factors[nfactor-1]) : -19;
369 
370  if(simulation==1 && pp_factor2distance) {
371  inf = log10(pp_factor2distance/factors[nfactor-1]);
372  sup = log10(pp_factor2distance/factors[0]);
373  }
374 
375  TF1 *gfit=new TF1("logNfit",logNfit,pow(10.0,inf),pow(10.0,sup),5);
376  gfit->SetParameters((inf+sup)/2.,0.3,1.,1.);
377  gfit->SetParNames("hrss50","sigma","betam","betap");
378  gfit->FixParameter(4,pp_factor2distance);
379  gfit->SetParLimits(0,inf,sup);
380  if(simulation==1 && pp_factor2distance) {
381 // gfit->SetParLimits(1,0.05,10.);
382 // gfit->SetParLimits(2,0.05,3.);
383  } else if(simulation==2) {
384  gfit->SetParLimits(1,0.05,10.);
385  gfit->SetParLimits(2,0.05,3.);
386  } else {
387  gfit->SetParLimits(1,0.08,10.);
388  gfit->SetParLimits(2,0.00,3.);
389  }
390  gfit->SetParLimits(3,0.0,2.50);
391 
392  // legend pannel
393  TLegend *legend = new TLegend(0.53,0.17,0.99,0.7,"","brNDC");
394  legend->SetLineColor(1);
395  legend->SetTextSize(0.033);
396  legend->SetBorderSize(1);
397  legend->SetLineStyle(1);
398  legend->SetLineWidth(1);
399  legend->SetFillColor(0);
400  legend->SetFillStyle(1001);
401 
402  //double xcor,esnr,null,etot,ecor,asnr,acor,a2or, nill, rho;
403  double xcor,esnr,null,etot,asnr,acor,a2or, nill, rho;
404  double a,b,vED,enrg[5];
405  int j,n,m,k;
406  size_t indx;
407 
414 
415  bool save;
416 
417  int ntrg = sim.GetEntries();
418  int nmdc = mdc.GetEntries();
419 
420  cout<<" total injections: " << nmdc <<endl;
421 
422  for(int i=0; i<ninj+1; i++) {
423  if((i<ninj)&&(imdc_iset[i]!=iset)) continue; // skip unwanted injection types
424 
425  sprintf(fname,"hT%d",i);
426  hT[i] = new TH1F(fname,fname,250,-T_win,T_win);
427  hT[i]->SetTitleOffset(1.3,"Y");
428  hT[i]->GetXaxis()->SetTitle("detected-injected time, sec");
429  hT[i]->GetYaxis()->SetTitle("events");
430  sprintf(fname,"%s",imdc_name[i]);
431  hT[i]->SetTitle(fname);
432 
433  sprintf(fname,"hF%d",i);
434  hF[i] = new TH1F(fname,fname,512,imdc_flow[i],imdc_fhigh[i]);
435  hF[i]->SetTitleOffset(1.3,"Y");
436  if(i<ninj) hF[i]->GetXaxis()->SetTitle("frequency, Hz");
437  else hF[i]->GetXaxis()->SetTitle("detected-injected, Hz");
438  hF[i]->GetYaxis()->SetTitle("events");
439  sprintf(fname,"%s",imdc_name[i]);
440  hF[i]->SetTitle(fname);
441 
442  for(int j=0; j<nIFO; j++) {
443  sprintf(fname,"%s_hrss_%d",IFO[j],i);
444  HH[j][i] = new TH2F(fname,"",500,-23.,-19.,500,-23.,-19.);
445  HH[j][i]->SetTitleOffset(1.7,"Y");
446  HH[j][i]->SetTitleOffset(1.7,"Y");
447  HH[j][i]->GetXaxis()->SetTitle("injected log10(hrss)");
448  HH[j][i]->GetYaxis()->SetTitle("detected log10(hrss)");
449  HH[j][i]->SetStats(kFALSE);
450  sprintf(fname,"%s: %s",IFO[j],imdc_name[i]);
451  HH[j][i]->SetTitle(fname);
452  HH[j][i]->SetMarkerColor(2);
453  }
454  for(int j=0; j<nIFO; j++) {
455  sprintf(fname,"%s_nre_%d",IFO[j],i);
456  NRE[j][i] = new TH2F(fname,"",500,0.,7.,500,-3,1.);
457  NRE[j][i]->SetTitleOffset(1.7,"Y");
458  NRE[j][i]->SetTitleOffset(1.7,"Y");
459  NRE[j][i]->GetXaxis()->SetTitle("injected log10(snr^{2})");
460  NRE[j][i]->GetYaxis()->SetTitle("log10(normalized residual energy)");
461  NRE[j][i]->SetStats(kFALSE);
462  sprintf(fname,"%s: %s",IFO[j],imdc_name[i]);
463  NRE[j][i]->SetTitle(fname);
464  NRE[j][i]->SetMarkerColor(2);
465  }
466  }
467 
468  TH1F* hcor = new TH1F("hcor","",100,0,1.);
469  hcor->SetTitleOffset(1.3,"Y");
470  hcor->GetXaxis()->SetTitle("network correlation (ecor)");
471  hcor->GetYaxis()->SetTitle("events");
472  hcor->SetStats(kFALSE);
473 
474  TH1F* hcc = new TH1F("hcc","",100,0,1.);
475  hcc->SetTitleOffset(1.3,"Y");
476  hcc->GetXaxis()->SetTitle("network correlation");
477  hcc->GetYaxis()->SetTitle("events");
478  hcc->SetStats(kFALSE);
479 
480  TH1F* hrho = new TH1F("hrho","",500,0,10.);
481  hrho->SetTitleOffset(1.3,"Y");
482  hrho->GetXaxis()->SetTitle("log10(#rho^2)");
483  hrho->GetYaxis()->SetTitle("events");
484 
485  TH1F* eSNR = new TH1F("eSNR","",500,0,10.);
486  eSNR->SetTitleOffset(1.3,"Y");
487  eSNR->GetXaxis()->SetTitle("log10(SNR/det)");
488  eSNR->GetYaxis()->SetTitle("events");
489  eSNR->SetStats(kFALSE);
490 
491  TH2F* rhocc = new TH2F("rhocc","",100,0.,1.,500,0,10.);
492  rhocc->SetTitleOffset(1.3,"Y");
493  rhocc->GetXaxis()->SetTitle("network correlation");
494  rhocc->GetYaxis()->SetTitle("log10(rho^2)");
495  rhocc->SetStats(kFALSE);
496 
497  TH2F* skyc = new TH2F("skyc","",180,-180,180.,90,-90.,90.);
498  skyc->SetTitleOffset(1.3,"Y");
499  skyc->GetXaxis()->SetTitle("#Delta#phi, deg.");
500  skyc->GetYaxis()->SetTitle("#Delta#theta, deg.");
501  skyc->SetStats(kFALSE);
502 
503  TH1F* hpf = new TH1F("hpf","",100,0.,1.);
504  hpf->SetTitleOffset(1.3,"Y");
505  hpf->SetTitle("");
506  hpf->GetXaxis()->SetTitle("penalty factor");
507  hpf->GetYaxis()->SetTitle("events");
508 
509  TH1F* hvED = new TH1F("hvED","",200,0,2.);
510  hvED->SetTitleOffset(1.3,"Y");
511  hvED->SetTitle("");
512  hvED->GetXaxis()->SetTitle("hvED consistency");
513  hvED->GetYaxis()->SetTitle("events");
514 
515  TH2F* pf_cc = new TH2F("pf_cc","",100,0.,1.,100,0,1.);
516  pf_cc->SetTitleOffset(1.3,"Y");
517  pf_cc->GetXaxis()->SetTitle("network correlation");
518  pf_cc->GetYaxis()->SetTitle("penalty");
519  pf_cc->SetMarkerStyle(20);
520  pf_cc->SetMarkerColor(1);
521  pf_cc->SetMarkerSize(0.8);
522  pf_cc->SetStats(kFALSE);
523 
524  TH2F* pf_vED = new TH2F("pf_vED","",100,0.,1.,100,0,1.);
525  pf_vED->SetTitleOffset(1.3,"Y");
526  pf_vED->GetXaxis()->SetTitle("H1H2 consistency");
527  pf_vED->GetYaxis()->SetTitle("penalty");
528  pf_vED->SetMarkerStyle(20);
529  pf_vED->SetMarkerColor(1);
530  pf_vED->SetMarkerSize(0.8);
531  pf_vED->SetStats(kFALSE);
532 
533  TH2F* hrs1[nIFO];
534  TH1F* ifoT[nIFO];
535  TH2F* hrs2[nIFO];
536 
537  for(int i=0; i<nIFO; i++) {
538 
539  sprintf(fname,"ifoT%s",IFO[i]);
540  ifoT[i] = new TH1F(fname,"",250,-0.05,0.05);
541  ifoT[i]->SetTitleOffset(1.3,"Y");
542  ifoT[i]->GetXaxis()->SetTitle("detected-injected time, sec");
543  ifoT[i]->GetYaxis()->SetTitle("events");
544  ifoT[i]->SetTitle(IFO[i]);
545 
546  sprintf(fname,"hrs1%s",IFO[i]);
547  hrs1[i] = new TH2F(fname,"",500,-23.,-19.,500,-23.,-19.);
548  hrs1[i]->SetTitleOffset(1.3,"Y");
549  hrs1[i]->GetXaxis()->SetTitle("detected");
550  hrs1[i]->GetYaxis()->SetTitle("injected");
551  hrs1[i]->SetStats(kFALSE);
552  hrs1[i]->SetTitle(IFO[i]);
553  hrs1[i]->SetMarkerColor(2);
554 
555  sprintf(fname,"hrs2%s",IFO[i]);
556  hrs2[i] = new TH2F(fname,"",500,-23.,-19.,500,-23.,-19.);
557  hrs2[i]->SetTitleOffset(1.3,"Y");
558  hrs2[i]->SetMarkerColor(2);
559  hrs2[i]->SetStats(kFALSE);
560  }
561 
562  // init simulations=4 stuff
563  int nhrss=10;
564  vector<double> vhrss[NMDC_MAX]; for(int i=0;i<NMDC_MAX;i++) vhrss[i].resize(nhrss+1);
565  wavearray<double>* mhrss[NMDC_MAX]; for(int i=0;i<NMDC_MAX;i++) mhrss[i] = new wavearray<double>[nhrss];
566  if(simulation==4) {
567 
568  // loop over injection tree : compute min/max injected hrss
569  wavearray<double> hrss_min(NMDC_MAX); for(int i=0;i<NMDC_MAX;i++) hrss_min[i]=1e20;
570  wavearray<double> hrss_max(NMDC_MAX); for(int i=0;i<NMDC_MAX;i++) hrss_max[i]=0.;
571  for(int i=0; i<nmdc; i++) {
572  mm.GetEntry(i);
573  if(pp_merge_types) {
574  indx=0;
575  } else {
576  if(imdc_tset[mm.type-1] != iset) continue; // skip unwanted injections
577  indx = imdc_index[mm.type-1];
578  }
579  if(mm.strain<hrss_min[indx]) if(mm.strain>0) hrss_min[indx]=mm.strain;
580  if(mm.strain>hrss_max[indx]) hrss_max[indx]=mm.strain;
581  }
582  for(int i=0;i<NMDC_MAX;i++) {
583  sMDC[i].resize(nhrss);
584  sMDC[i]=0.;
585  if(hrss_min[i]==1e20) continue;
586  if(hrss_max[i]==0) continue;
587  vhrss[i][0]=hrss_min[i];
588  vhrss[i][nhrss]=hrss_max[i];
589  double fhrss=exp(log(vhrss[i][nhrss]/vhrss[i][0])/nhrss);
590  for(int j=1;j<=nhrss;j++) vhrss[i][j]=fhrss*vhrss[i][j-1];
591  for(int j=0;j<nhrss;j++) sMDC[i][j]=(vhrss[i][j+1]+vhrss[i][j])/2.;
592  }
593  for(int j=0;j<nhrss;j++) for(int k=0; k<NMDC_MAX; k++) {nMDC[k].append(1.);}
594  }
595 
596  // loop over injection tree
597  for(int i=0; i<nmdc; i++) {
598 
599  mm.GetEntry(i);
600  if(pp_merge_types) {
601  indx=0;
602  } else {
603  if(imdc_tset[mm.type-1] != iset) continue; // skip unwanted injections
604  indx = imdc_index[mm.type-1];
605  }
606  save = true;
607 
608  n = sMDC[0].size();
609  for(int j=0; j<n; j++) {
610  switch(simulation) {
611  case 1: // factors are hrss multipliers
612  if(pp_factor2distance) {
613  if(fabs(sMDC[0].data[j]-mm.factor)<0.1*mm.factor) {
614  save = false; nMDC[indx].data[j]+=1.; j=n;
615  }
616  } else {
617  if(fabs(sMDC[0].data[j]-mm.strain)<0.1*mm.strain) { // WARNING DOUBLE HRSS
618  save = false; nMDC[indx].data[j]+=1.; j=n;
619  }
620  }
621  break;
622  case 2: // factors are snr
623  if(fabs(sMDC[0].data[j]-mm.factor)<0.1*mm.factor) {
624  save = false; nMDC[indx].data[j]+=1.; j=n;
625  }
626  break;
627  case 3: // factors are time shift
628  case 4: // nfactor is number of retries
629  if(mm.strain>vhrss[indx][j] && mm.strain<=vhrss[indx][j+1]) {
630  nMDC[indx].data[j]+=1.;
631  mhrss[indx][j].append(mm.strain);
632  j=n;
633  }
634  break;
635  }
636  }
637  // simulation=4 is already performed within the previous for loop
638  if(save && (simulation!=4)) {
639  switch(simulation) {
640  case 1:
641  if(pp_factor2distance) {
642  for(int k=0; k<NMDC_MAX; k++) sMDC[k].append(mm.factor);
643  } else {
644  for(int k=0; k<NMDC_MAX; k++) sMDC[k].append(mm.strain);
645  }
646  break;
647  case 2:
648  for(int k=0; k<NMDC_MAX; k++) sMDC[k].append(mm.factor);
649  break;
650  case 3:
651  case 4:
652  break;
653  }
654  for(int k=0; k<NMDC_MAX; k++) {nMDC[k].append(0.);}
655  nMDC[indx].data[j]+=1.;
656  }
657  }
658  if(simulation==1 && sMDC[0].size()>nfactor) {
659  cout << "cwb_report_sim.C Error : number of detected strains " << sMDC[0].size()
660  << " is greater of nfactor declared in the user_parameters.C : " << nfactor << endl;
661  bool answer = CWB::Toolbox::question("do you want to ignore this warning ? ");
662  if(!answer) exit(1);
663  }
664 
665  // for simulation==4 -> compute sMDC
666  if(simulation==4) {
667  for(int k=0; k<NMDC_MAX; k++) {
668  if(sMDC[k].size()==0) {delete [] mhrss[k];continue;}
669  // compute sMDC using median50
670  for(int i=0;i<nhrss;i++) {
671  int K = mhrss[k][i].size();
672  int* hrss_index = new int[K];
673  if(K>0) TMath::Sort(K,mhrss[k][i].data,hrss_index,kFALSE);
674  //if(K>0) cout << "XDEB " << i << " " << mhrss[k][i].data[K/2] << endl;
675  if(K>0) sMDC[k][i] = mhrss[k][i].data[hrss_index[K/2]];
676  delete [] hrss_index;
677  mhrss[k][i].resize(0);
678  }
679 /*
680  // compute sMDC using weighing hrss with inj distribution
681  for(int i=0;i<nhrss;i++) {
682  int K = mhrss[k][i].size();
683  double A=0;
684  double B=0;
685  for(int j=0;j<K;j++) {
686  double X=mhrss[k][i].data[j];
687  A+=X;
688  B+=1;
689  }
690  if(K>0) sMDC[k][i] = A/B;
691  mhrss[k][i].resize(0);
692  }
693 */
694  delete [] mhrss[k];
695  }
696  }
697 
698  int* mdc_index[NMDC_MAX];
699  for(int k=0; k<NMDC_MAX; k++) {
700  if(sMDC[k].size()==0) continue;
701  mdc_index[k] = new int[sMDC[k].size()];
702  TMath::Sort((int)sMDC[k].size(),sMDC[k].data,mdc_index[k],kFALSE);
703  }
704 
705  n = sMDC[0].size();
706  for(int i=0; i<NMDC_MAX; i++){
707  nTRG[i].resize(n); nTRG[i]=0.;
708  err[i].resize(n); err[i]=0.;
709  e00[i].resize(n); e00[i]=0.;
710  eff[i].resize(n); eff[i]=0.;
711  }
712 
713  cout<<"total events: " << ntrg << endl;
714 
715  // check if ifar exist in the wave tree
716  TBranch* branch;
717  bool ifar_exists=false;
718  TIter next(ww.fChain->GetListOfBranches());
719  while ((branch=(TBranch*)next())) {
720  if(TString("ifar").CompareTo(branch->GetName())==0) ifar_exists=true;
721  }
722  float ifar=0;
723  if (ifar_exists) ww.fChain->SetBranchAddress("ifar",&ifar);
724 
725  // loop over trigger tree
726  for(int i=0; i<ntrg; i++) {
727 
728  ww.GetEntry(i);
729  if(ww.type[1]<1) continue;
730  if(pp_merge_types) {
731  } else {
732  if(imdc_tset[ww.type[1]-1] != iset) continue; // skip unwanted injections
733  }
734 
735  // check veto cuts
736  bool bveto=false;
737  for(int j=0;j<nXDQF;j++) {
738  if((XDQF[j].cat==CWB_CAT2)&&(!VETO[j])) bveto=true;
739  if((XDQF[j].cat==CWB_CAT3)&&(VETO[j])) bveto=true;
740  if((XDQF[j].cat==CWB_HVETO)&&(VETO[j])) bveto=true;
741  }
742  if(bveto) continue;
743 
744  vED = ww.neted[0]/ww.ecor;
745 
746  if (T_vED>0) { if(vED > T_vED) continue;}
747 
748  if (T_ifar>0) if(ifar_exists) {if(ifar < T_ifar) continue;}
749 
750  // frequencies user bud cut
751  bool bcut=false;
752  for(int j=0;j<nFCUT;j++) {
753  if((ww.frequency[0]>lowFCUT[j])&&(ww.frequency[0]<=highFCUT[j])) bcut=true;
754  }
755  if(bcut) continue;
756 
757  if(ww.ecor<T_acor) continue;
758  //if(ww.ecor<0) continue;
759 
760  if(fabs(ww.time[0]-ww.time[nIFO])>T_win) continue; // skip random coincidence
761  if(pp_merge_types) {
762  indx=0;
763  } else {
764  indx = imdc_index[ww.type[1]-1];
765  }
766 
767  null = nill = etot = 0.;
768  for(int j=0; j<nIFO; j++) {
769  null += ww.null[j];
770  nill += ww.nill[j];
771  enrg[j]= ww.snr[j]-ww.null[j];
772  etot += enrg[j];
773  }
774 
775  a2or = 1.e50;
776  for(int j=0; j<nIFO; j++) {
777  if(a2or > etot-enrg[j]) a2or = etot-enrg[j];
778  }
779  // if(a2or<0.) continue;
780 
781  acor = sqrt(ww.ECOR/nIFO);
782  //rho = sqrt(ww.ECOR*fabs(ww.netcc[0])/nIFO); // = rho[1]
783  rho = ww.rho[pp_irho];
784 
785  xcor = ww.netcc[pp_inetcc];
786 
787  hcor->Fill(ww.netcc[pp_inetcc]);
788  hcc->Fill(xcor);
789  rhocc->Fill(xcor,log10(rho*rho));
790  pf_cc->Fill(xcor,ww.penalty);
791 
792  if(xcor<T_cor) continue;
793 
794  pf_vED->Fill(vED,ww.penalty);
795  hvED->Fill(fabs(vED));
796  hpf->Fill(ww.penalty);
797 
798  if(ww.netcc[3] < T_scc) continue;
799  if(ww.penalty < T_pen) continue;
800  if (T_hrss>0) if (TMath::Abs((TMath::Log10(ww.hrss[i_hrss1])-TMath::Log10(ww.hrss[i_hrss2])))>T_hrss) continue;
801 
802  bool save=false;
803  if(rho > T_cut) save=true;
804  if (!save) continue;
805 
806  hrho->Fill(log10(rho*rho));
807  eSNR->Fill(log10(ww.likelihood/nIFO));
808 
809  a = ww.phi[0]-ww.phi[1];
810  if(a> 180) a = 360-a;
811  if(a< -180) a = -360-a;
812  b = ww.theta[0]-ww.theta[1];
813  if(b> 90) b = 180-b;
814  if(b< -90) b = -180-b;
815  skyc->Fill(a,b);
816 
817  for(int j=0; j<nIFO; j++) {
818  HH[j][ninj]->Fill(log10(ww.hrss[j+nIFO]),log10(ratio_hrss*ww.hrss[j]));
819  HH[j][indx]->Fill(log10(ww.hrss[j+nIFO]),log10(ratio_hrss*ww.hrss[j]));
820 
821  double nre = ww.iSNR[j] ? (ww.iSNR[j]+ww.oSNR[j]-2*ww.ioSNR[j])/ww.iSNR[j] : 10;
822  if(nre<=0) nre=10;
823  NRE[j][ninj]->Fill(log10(ww.iSNR[j]),log10(nre));
824  NRE[j][indx]->Fill(log10(ww.iSNR[j]),log10(nre));
825 
826  ifoT[j]->Fill(ww.time[j]-ww.time[j+nIFO]);
827  }
828 
829  hT[indx]->Fill(ww.time[0]-ww.time[nIFO]);
830  hF[indx]->Fill(float(ww.frequency[0]));
831  hT[ninj]->Fill(ww.time[0]-ww.time[nIFO]);
832  hF[ninj]->Fill(float(ww.frequency[0]-(imdc_flow[indx]+imdc_fhigh[indx])/2));
833 
834  n = sMDC[0].size();
835 
836  for(int j=0; j<n; j++) {
837  switch(simulation) {
838  case 1:
839  if(pp_factor2distance) {
840  if(fabs(sMDC[0].data[j]-ww.factor)<0.1*ww.factor) {
841  nTRG[indx].data[j]+=1.; j=n;
842  }
843  } else {
844  if(fabs(sMDC[0].data[j]-ww.strain[1])<0.1*ww.strain[1]) { //WARNING DOUBLE HRSS
845  nTRG[indx].data[j]+=1.; j=n;
846  }
847  }
848  break;
849  case 2:
850  if(fabs(sMDC[0].data[j]-ww.factor)<0.1*ww.factor) {
851  nTRG[indx].data[j]+=1.; j=n;
852  }
853  break;
854  case 3:
855  case 4:
856  if(ww.strain[1]>vhrss[indx][j] && ww.strain[1]<=vhrss[indx][j+1]) {
857  nTRG[indx].data[j]+=1.; j=n;
858  }
859  break;
860  }
861  }
862  }
863 
864  if(simulation==1 && pp_factor2distance) {
865  for(int k=0; k<NMDC_MAX; k++) for(int i=0;i<sMDC[k].size();i++) sMDC[k].data[i] = pp_factor2distance/sMDC[k].data[i];
866  }
867 
868  n = sMDC[0].size();
869  cout << "INJ HRSS NUMBER: " << n << endl;
870 
871  FILE* in;
872  char f_file[256];
873  for(int i=0; i<ninj; i++) {
874  if(imdc_iset[i]!=iset) continue; // skip unwanted injection types
875  sprintf(f_file,"%s/eff_%s.txt",netdir, imdc_name[i]);
876  in = fopen(f_file,"w");
877  if(in==NULL) {cout << "cwb_report_sim : Error opening file " << f_file << endl;exit(1);}
878  for(int k=0; k<n; k++){
879  int j=mdc_index[i][k];
880  if(nMDC[i].data[j] <= 0.) continue;
881  eff[i].data[j] = nTRG[i].data[j]/nMDC[i].data[j];
882  err[i].data[j] = eff[i].data[j]>1 ? 0.01 :
883  sqrt(eff[i].data[j]*(1-eff[i].data[j])/nMDC[i].data[j]);
884  fprintf(in,"%e %i %i %.3f\n", sMDC[i].data[j], (int)nTRG[i].data[j], (int)nMDC[i].data[j], eff[i].data[j]);
885  }
886  fclose(in);
887  }
888 
889  TCanvas *c1 = new TCanvas("c","C",0,0,800,800);
890  c1->SetBorderMode(0);
891  c1->SetFillColor(0);
892  c1->SetBorderSize(2);
893  c1->SetLogx(kFALSE);
894  c1->SetGridx();
895  c1->SetGridy();
896  c1->SetLeftMargin(0.137039);
897  c1->SetRightMargin(0.117039);
898  c1->SetTopMargin(0.0772727);
899  c1->SetBottomMargin(0.143939);
900  c1->ToggleEventStatus();
901 
902  for(int i=0; i<ninj; i++) {
903  if(imdc_iset[i]!=iset) continue; // skip unwanted injection types
904 
905  fprintf(evt_all,"%2d %s ", i,imdc_name[i]);
906 
907  c1->SetLogx(kFALSE);
908  c1->SetLogy();
909 
910  c1->Clear();
911  hF[i]->Draw();
912  sprintf(fname,"%s/f_%s.gif",netdir,imdc_name[i]);
913  fprintf(evt_all,"%3.2f %3.2f ", hF[i]->GetMean(), hF[i]->GetRMS());
914  cout<<fname<<endl;
915  c1->Update(); c1->SaveAs(fname);
916 
917  c1->Clear();
918  hT[i]->Draw();
919  sprintf(fname,"%s/t_%s.gif",netdir,imdc_name[i]);
920  fprintf(evt_all,"%3.6f %3.6f ", hT[i]->GetMean(), hT[i]->GetRMS());
921  c1->Update(); c1->SaveAs(fname);
922 
923  c1->SetLogx(kFALSE);
924  c1->SetLogy(kFALSE);
925  for(int j=0;j<nIFO;j++){
926  c1->Clear();
927  HH[j][i]->Draw();
928  sprintf(fname,"%s/hrss_%s_%s.gif",netdir,IFO[j],imdc_name[i]);
929  c1->Update(); c1->SaveAs(fname);
930 
931  c1->Clear();
932  NRE[j][i]->Draw();
933  sprintf(fname,"%s/nre_%s_%s.gif",netdir,IFO[j],imdc_name[i]);
934  c1->Update(); c1->SaveAs(fname);
935  }
936 
937  fprintf(evt_all,"\n");
938  }
939 
940  c1->Clear();
941  c1->SetLogy(kTRUE);
942  c1->SetLogx(kFALSE);
943  hcor->Draw();
944  sprintf(fname,"%s/netcor_%s.gif",netdir,imdc_set_name[iset].Data());
945  c1->Update(); c1->SaveAs(fname);
946  c1->SetLogy(kFALSE);
947 
948  c1->Clear();
949  c1->SetLogy(kTRUE);
950  c1->SetLogx(kFALSE);
951  hcc->Draw();
952  sprintf(fname,"%s/cc_%s.gif",netdir,imdc_set_name[iset].Data());
953  c1->Update(); c1->SaveAs(fname);
954  c1->SetLogy(kFALSE);
955 
956  c1->Clear();
957  c1->SetLogy(kTRUE);
958  hrho->Draw();
959  sprintf(fname,"%s/rho_%s.gif",netdir,imdc_set_name[iset].Data());
960  c1->Update(); c1->SaveAs(fname);
961 
962  c1->Clear();
963  hpf->Draw();
964  sprintf(fname,"%s/penalty_%s.gif",netdir,imdc_set_name[iset].Data());
965  c1->Update(); c1->SaveAs(fname);
966 
967  c1->Clear();
968  eSNR->Draw();
969  sprintf(fname,"%s/average_snr_%s.gif",netdir,imdc_set_name[iset].Data());
970  c1->Update(); c1->SaveAs(fname);
971  c1->SetLogy(kFALSE);
972 
973  c1->Clear();
974  c1->SetLogz(kTRUE);
975  rhocc->Draw("colz");
976  sprintf(fname,"%s/rho_cc_%s.gif",netdir,imdc_set_name[iset].Data());
977  c1->Update(); c1->SaveAs(fname);
978 
979  c1->Clear();
980  c1->SetLogz(kTRUE);
981  pf_cc->Draw("colz");
982  sprintf(fname,"%s/penalty_cc_%s.gif",netdir,imdc_set_name[iset].Data());
983  c1->Update(); c1->SaveAs(fname);
984 
985  c1->Clear();
986  c1->SetLogz(kTRUE);
987  skyc->Draw("colz");
988  sprintf(fname,"%s/coordinate_%s.gif",netdir,imdc_set_name[iset].Data());
989  c1->Update(); c1->SaveAs(fname);
990  c1->SetLogz(kFALSE);
991 
992  c1->Clear();
993  c1->SetLogz(kTRUE);
994  pf_vED->Draw("colz");
995  sprintf(fname,"%s/penalty_vED_%s.gif",netdir,imdc_set_name[iset].Data());
996  c1->Update(); c1->SaveAs(fname);
997  c1->SetLogz(kFALSE);
998 
999  c1->Clear();
1000  c1->SetLogy(kTRUE);
1001  hvED->Draw("");
1002  sprintf(fname,"%s/vED_%s.gif",netdir,imdc_set_name[iset].Data());
1003  c1->Update(); c1->SaveAs(fname);
1004  c1->SetLogy(kFALSE);
1005 
1006  // Efficiency
1007  if(c1) delete c1;
1008  c1 = new TCanvas("c","C",0,0,1000,800);
1009  c1->SetBorderMode(0);
1010  c1->SetFillColor(0);
1011  c1->SetBorderSize(2);
1012  c1->SetLogx(kFALSE);
1013  c1->SetGridx();
1014  c1->SetGridy();
1015  c1->SetRightMargin(0.0517039);
1016  c1->SetTopMargin(0.0772727);
1017  c1->SetBottomMargin(0.143939);
1018  c1->ToggleEventStatus();
1019 
1020  double chi2, hrss50, sigma, betam, betap, hrssEr;
1021 
1022  n = sMDC[0].size();
1023 
1024  sprintf(fname,"%s/fit_parameters_%s.txt", netdir,imdc_set_name[iset].Data());
1025  in = fopen(fname,"w");
1026 
1027  int iset_size=0; // iset size
1028  for(int i=0; i<ninj; i++) if(imdc_iset[i]==iset) iset_size++;
1029  double hleg = 0.18+iset_size*0.06;
1030  delete legend;
1031  if(pp_show_eff_fit_curve) legend = new TLegend(0.45,0.18,0.99,hleg,NULL,"brNDC");
1032  else legend = new TLegend(0.55,0.18,0.99,hleg,NULL,"brNDC");
1033 
1034  for(int i=0; i<ninj; i++) {
1035  if(imdc_iset[i]!=iset) continue; // skip unwanted injection types
1036 
1037  c1->Clear();
1038  c1->SetLogx();
1039  EFF[i]=new TGraphErrors(n,sMDC[i].data,eff[i].data,e00[i].data,err[i].data);
1040  if(simulation==1 && pp_factor2distance) EFF[i]->GetXaxis()->SetTitle("distance (Kpc)");
1041  else if(simulation==2) EFF[i]->GetXaxis()->SetTitle("snr");
1042  else EFF[i]->GetXaxis()->SetTitle("hrss, #frac{strain}{#sqrt{Hz}}");
1043  EFF[i]->GetYaxis()->SetTitle("Efficiency ");
1044  EFF[i]->GetXaxis()->SetTitleOffset(1.7);
1045  EFF[i]->GetXaxis()->SetLabelSize(0.04);
1046  EFF[i]->GetYaxis()->SetTitleOffset(1.3);
1047  EFF[i]->GetYaxis()->SetRangeUser(0,1);
1048  EFF[i]->GetYaxis()->SetLabelSize(0.04);
1049 
1050  //gfit->SetParameters(-21.,1.,1.,1.);
1051  //gfit->SetParNames("hrss50","sigma","betam","betap");
1052  gfit->SetLineColor(colors[i]);
1053  //gfit->SetParLimits(0,-22.,-19.);
1054  //gfit->SetParLimits(1,0.01,50.);
1055  //gfit->SetParLimits(2,0.01,50.);
1056  //gfit->SetParLimits(3,0.01,50.);
1057  gfit->SetNpx(100000);
1058  if(pp_show_eff_fit_curve) EFF[i]->Fit("logNfit"); else EFF[i]->Fit("logNfit","N");
1059  chi2=gfit->GetChisquare();
1060  hrss50=pow(10.,gfit->GetParameter(0));
1061  hrssEr=(pow(10.,gfit->GetParError(0))-1.)*hrss50;
1062  sigma=gfit->GetParameter(1);
1063  betam=gfit->GetParameter(2);
1064  betap=gfit->GetParameter(3);
1065 
1066  printf("%d %s %E %E +- %E %E %E %E\n",
1067  i,imdc_name[i],chi2,hrss50,hrssEr,sigma,betam,betap);
1068  fprintf(in,"%2d %9.3E %9.3E +- %9.3E %9.3E %9.3E %9.3E %s\n",
1069  i,chi2,hrss50,hrssEr,sigma,betam,betap,imdc_name[i]);
1070  fprintf(in_all,"%2d %9.3E %9.3E +- %9.3E %9.3E %9.3E %9.3E %s\n",
1071  i,chi2,hrss50,hrssEr,sigma,betam,betap,imdc_name[i]);
1072 
1073  sprintf(fname,"%s, hrss50=%5.2E", imdc_name[i],hrss50);
1074  EFF[i]->SetTitle(fname);
1075  //gStyle->SetOptStat(01);
1076  gfit->SetLineColor(colors[i]);
1077  EFF[i]->SetLineColor(colors[i]);
1078  EFF[i]->SetMarkerStyle(markers[i]);
1079  EFF[i]->SetMarkerColor(colors[i]);
1080  EFF[i]->SetMarkerSize(2);
1081 
1082  legend->SetBorderSize(1);
1083  legend->SetTextAlign(22);
1084  legend->SetTextFont(12);
1085  legend->SetLineColor(1);
1086  legend->SetLineStyle(1);
1087  legend->SetLineWidth(1);
1088  legend->SetFillColor(0);
1089  legend->SetFillStyle(1001);
1090  legend->SetTextSize(0.04);
1091  legend->SetLineColor(kBlack);
1092  legend->SetFillColor(kWhite);
1093 
1094  if(pp_show_eff_fit_curve) sprintf(fname,"%s, %5.2E",imdc_name[i], hrss50);
1095  else sprintf(fname,"%s",imdc_name[i]);
1096  legend->AddEntry(EFF[i], fname, "lp");
1097  if(pp_show_eff_fit_curve) EFF[i]->Draw("AP"); else EFF[i]->Draw("APL");
1098  sprintf(fname,"%s/%s.gif",netdir,imdc_name[i]);
1099  c1->SaveAs(fname);
1100  c1->SetLogx(kFALSE);
1101  c1->Clear();
1102  }
1103  fclose(in);
1104 
1105  char gname[512];
1106  sprintf(fname,"%s/eff_%s.eps", netdir,imdc_set_name[iset].Data());
1107  sprintf(gname,"%s/eff_%s.gif", netdir,imdc_set_name[iset].Data());
1108  TPostScript epsfile(fname,113);
1109 
1110  c1->Clear();
1111  if(simulation==2) c1->SetLogx(kFALSE); else c1->SetLogx();
1112  c1->SetLogy(kFALSE);
1113 
1114  char ptitle[256];
1115  bool first=true;
1116  TMultiGraph* mg=new TMultiGraph();
1117  sprintf(ptitle,"%s rho=%3.2f, cc=%3.2f",imdc_set_name[iset].Data(),T_cut,T_cor);
1118  mg->SetTitle(ptitle);
1119  double xmin=1.79769e+308;
1120  double xmax=0;
1121  for(int i=0;i<ninj;i++) {
1122  if(imdc_iset[i]!=iset) continue; // skip unwanted injection types
1123  mg->Add(EFF[i]);
1124  if(sMDC[i].data[mdc_index[i][0]]<xmin) xmin=sMDC[i].data[mdc_index[i][0]];
1125  if(sMDC[i].data[mdc_index[i][sMDC[i].size()-1]]>xmax) xmax=sMDC[i].data[mdc_index[i][sMDC[i].size()-1]];
1126  }
1127  if(pp_show_eff_fit_curve) mg->Draw("AP"); else mg->Draw("APL");
1128  if(simulation==1 && pp_factor2distance) mg->GetHistogram()->GetXaxis()->SetTitle("distance (Kpc)");
1129  else if(simulation==2) mg->GetHistogram()->GetXaxis()->SetTitle("snr");
1130  else mg->GetHistogram()->GetXaxis()->SetTitle("hrss, #frac{strain}{#sqrt{Hz}}");
1131  mg->GetHistogram()->GetYaxis()->SetTitle("Efficiency ");
1132  mg->GetHistogram()->GetXaxis()->SetTitleOffset(1.7);
1133  mg->GetHistogram()->GetXaxis()->SetLabelSize(0.04);
1134  mg->GetHistogram()->GetYaxis()->SetTitleOffset(1.3);
1135  mg->GetHistogram()->GetXaxis()->SetRangeUser(xmin,xmax);
1136  mg->GetHistogram()->GetYaxis()->SetRangeUser(0,1);
1137  mg->GetHistogram()->GetYaxis()->SetLabelSize(0.04);
1138  legend->Draw("SAME");
1139  c1->Update(); epsfile.Close();
1140  char cmd[1024];
1141  sprintf(cmd,"convert %s %s",fname,gname);cout<<cmd<<endl;
1142  gSystem->Exec(cmd);
1143 
1144  // delete histograms
1145  for (int i=0;i<ninj+1;i++) {
1146  if((i<ninj)&&(imdc_iset[i]!=iset)) continue; // skip unwanted injection types
1147  for(int j=0;j<nIFO;j++) if(HH[j][i]) delete HH[j][i];
1148  for(int j=0;j<nIFO;j++) if(NRE[j][i]) delete NRE[j][i];
1149  if(hT[i]) delete hT[i];
1150  if(hF[i]) delete hF[i];
1151  }
1152 
1153  delete hcor;
1154  delete hcc;
1155  delete hrho;
1156  delete eSNR;
1157  delete rhocc;
1158  delete skyc;
1159  delete hpf;
1160  delete hvED;
1161  delete pf_cc;
1162  delete pf_vED;
1163 
1164  for (int j=0;j<nIFO;j++) {
1165  delete hrs1[j];
1166  delete hrs2[j];
1167  delete ifoT[j];
1168  }
1169 
1170  if(simulation==4) {
1171  for(int k=0; k<NMDC_MAX; k++) {
1172  if(sMDC[k].size()==0) continue;
1173  delete [] mdc_index[k];
1174  }
1175  }
1176  for(int i=0;i<NMDC_MAX;i++) if(EFF[i]) {delete EFF[i];EFF[i]=NULL;}
1177  delete mg;
1178  }
1179 
1180  fclose(in_all);
1181  fclose(evt_all);
1182 
1183  exit(0);
1184 }
int i_hrss2
char ch2[2048]
size_t append(const wavearray< DataType_t > &)
Definition: wavearray.cc:775
double rho
virtual size_t size() const
Definition: wavearray.hh:127
double T_ifar
double T_pen
void Export(TString fname="")
Definition: config.cc:388
char mdc_inj_file[1024]
printf("total live time: non-zero lags = %10.1f \n", liveTot)
char cmd[1024]
fprintf(stdout,"start=%f duration=%f rate=%f\n", x.start(), x.size()/x.rate(), x.rate())
double fHigh
wavearray< double > a(hp.size())
TH2F * pf_cc
par[0] name
int n
Definition: cwb_net.C:10
dqfile VDQF[100]
double rho_min
TString("c")
int nset
Definition: cwb_mkeff.C:57
char ifo[32]
Definition: Toolbox.hh:66
double T_cor
double T_hrss
TH1F * hpf
float xfactors
float ratio_hrss
int xmdc_type
UChar_t VETO[100]
TString mdc[4]
dqfile * XDQF
TH2F * rhocc
i pp_inetcc
Long_t size
Color_t colors[16]
int m
Definition: cwb_net.C:10
static TString CWB_CAT_NAME[14]
Definition: GToolbox.hh:4
int nVDQF
int j
Definition: cwb_net.C:10
i drho i
void Import(TString umacro="")
Definition: config.cc:334
static bool checkFile(TString fName, bool question=false, TString message="")
Definition: Toolbox.cc:3956
size_t imdc_iset[NMDC_MAX]
Definition: cwb_mkeff.C:50
exit(0)
FILE * in_all
char ifo[NIFO_MAX][8]
TH1F * hF[NIFO_MAX+1]
TChain sim("waveburst")
nc append(pix)
#define nIFO
ofstream out
Definition: cwb_merge.C:196
CWB_CAT cat
Definition: Toolbox.hh:68
int nmdc
Definition: cbc_plots.C:791
double T_acor
int nXDQF
size_t imdc_index[NMDC_MAX]
Definition: cwb_mkeff.C:49
double vED
double pp_rho_min
static bool isLeafInTree(TTree *itree, TString leaf)
Definition: Toolbox.cc:4682
TCanvas * c1
char netdir[1024]
const int NIFO_MAX
Definition: wat.hh:4
x resize(N)
bool log
Definition: WaveMDC.C:41
int ninj
Definition: cwb_mkeff.C:52
char fname[4096]
TIter next(twave->GetListOfBranches())
fclose(fp)
#define nMDC
double acor
int k
int i_hrss1
float chi2
Definition: cbc_plots.C:603
pp_rho_bin
double sigma
char imdc_name[NMDC_MAX][128]
Definition: cwb_mkeff.C:46
TH2F * pf_vED
double pp_rho_max
static bool question(TString question)
Definition: Toolbox.cc:4092
WSeries< double > ww
Definition: Regression_H1.C:33
int ReadInjType(TString ifName, int ntype_max, char set[][128], size_t type[], char name[][128], double fcentral[], double fbandwidth[])
Definition: Toolfun.hh:740
char sim_file_name[1024]
double factors[100]
Definition: test_config1.C:84
char answer[256]
static TString getParameter(TString options, TString param="")
Definition: Toolbox.cc:5943
ifstream in
double fLow
char IFO[NIFO_MAX][32]
double T_win
double fabs(const Complex &x)
Definition: numpy.cc:37
TString pp_eff_vs_thr_quit
double highFCUT[100]
static void mkDir(TString dir, bool question=false, bool remove=true)
Definition: Toolbox.cc:4000
TBranch * branch
TH1F * hvED
strcpy(RunLabel, RUN_LABEL)
nfactor[0]
Definition: cwb_eced.C:10
double T_cut
double asnr
DataType_t * data
Definition: wavearray.hh:301
#define NMDC_MAX
int cat
size_t imdc_type[NMDC_MAX]
Definition: cwb_mkeff.C:45
char xmdc_name[256]
double T_scc
bool save
double T_vED
simulation
Definition: cwb_eced.C:9
char mdc_file_name[1024]
TString config
detectorParams detParms[4]
TString * imdc_set_name
Definition: cwb_mkeff.C:56
virtual void resize(unsigned int)
Definition: wavearray.cc:445
double imdc_fcentral[NMDC_MAX]
Definition: cwb_mkeff.C:47
TMultiGraph * mg
Double_t logNfit(Double_t *x, Double_t *par)
Definition: Toolfun.hh:20
double frequency(int l)
Definition: wseries.cc:99
i drho pp_irho
double lowFCUT[100]
char imdc_set[NMDC_MAX][128]
Definition: cwb_mkeff.C:44
void SetSingleDetectorMode()
Definition: config.cc:1334
double xcor
TString pp_eff_vs_thr
double imdc_fbandwidth[NMDC_MAX]
Definition: cwb_mkeff.C:48
FILE * evt_all
sprintf(fname,"%s/eff_%d_threshold_factors.txt", netdir, pp_eff, imdc_name[i])