Logo Coherent WaveBurst  
Reference Guide
Logo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
DrawRECvsINJ.C
Go to the documentation of this file.
1 //
2 // Draw injected vs detected events distributions vs SNRnet
3 // Note : this macro is used to generate the PRC report (cwb_report merge_label prc)
4 // Author : Gabriele Vedovato
5 
6 namespace DrawRECvsINJ_namespace { // used to avoid conflict with global variables
7 
8 #include <vector>
9 
10 void RECvsINJ(int mtype, TString gtype, TString ptitle, TString xtitle, TString ytitle, int nIFO, float T_win,
11  int pp_inetcc, float T_cor, int pp_irho, float T_cut, float T_vED, float T_pen, float T_ifar);
12 
13 // --------------------------------------------------------
14 // Global variables
15 // --------------------------------------------------------
16 TCanvas* gCANVAS = NULL; // canvas object
17 TTree* gTRWAVE = NULL; // wave tree
18 TTree* gTRMDC = NULL; // mdc tree
19 
20 
21 void
23  int pp_inetcc, float T_cor, int pp_irho, float T_cut, float T_vED, float T_pen, float T_ifar) {
24 
25  if(gtype!="distance" && gtype!="snr") {
26  cout << "DrawRECvsINJ : Error - wrong input gtype (snr/distance)" << endl;
27  gSystem->Exit(1);
28  }
29 
30  // ------------------------------------------------
31  // create canvas
32  // ------------------------------------------------
33  gCANVAS = new TCanvas("fom", "PRC", 300,40, 600, 500);
34  gCANVAS->Range(-19.4801,-9.25,-17.4775,83.25);
35  gCANVAS->SetBorderSize(2);
36  gCANVAS->SetFrameFillColor(0);
37  gCANVAS->SetGridx();
38  gCANVAS->SetGridy();
39 
40  // ------------------------------------------------
41  // open wave/mdc trees
42  // ------------------------------------------------
43  // open wave file
44  char sim_file_name[1024];
45  sprintf(sim_file_name,"merge/wave_%s.%s.root",data_label.Data(),merge_label.Data());
46  TFile* fwave = TFile::Open(sim_file_name);
47  gTRWAVE = (TTree*) gROOT->FindObject("waveburst");
48  // open mdc file
49  char mdc_file_name[1024];
50  sprintf(mdc_file_name,"merge/mdc_%s.%s.root",data_label.Data(),merge_label.Data());
51  TFile *fmdc = TFile::Open(mdc_file_name);
52  gTRMDC = (TTree*) gROOT->FindObject("mdc");
53 
54  TString ptitle;
56  TString ytitle;
57 
58  if(gtype=="snr") gCANVAS->SetLogx(true);
59  gCANVAS->SetLogy(true);
60  ptitle="Reconstructed events vs Injected events";
61  gStyle->SetOptStat(0);
62  //if(nIFO==2) xtitle = "sqrt(hrss[0]^2+hrss[1]^2)";
63  //if(nIFO==3) xtitle = "sqrt(hrss[0]^2+hrss[1]^2+hrss[2]^2)";
64  xtitle = gtype=="snr" ? "Injected SNRnet" : "distance (Mpc)";
65  ytitle = "counts";
66 
67  RECvsINJ(0, gtype, ptitle, xtitle, ytitle, nIFO, T_win, pp_inetcc, T_cor, pp_irho, T_cut, T_vED, T_pen, T_ifar);
68 
69  char ofname[1024];
70  if(gtype=="snr") {
71  sprintf(ofname,"%s/inj_vs_rec_snr.gif",odir.Data());
72  } else {
73  sprintf(ofname,"%s/inj_vs_rec_distance.gif",odir.Data());
74  }
75  gCANVAS->Print(ofname);
76  char cmd[1024];
77  TString pfname(ofname);
78  pfname.ReplaceAll(".gif",".png");
79  sprintf(cmd,"convert %s %s",ofname,pfname.Data());
80  cout << cmd << endl;
81  gSystem->Exec(cmd);
82  sprintf(cmd,"rm %s",ofname);
83  cout << cmd << endl;
84  gSystem->Exec(cmd);
85  //exit(0);
86 
87 }
88 
89 void RECvsINJ(int mtype, TString gtype, TString ptitle, TString xtitle, TString ytitle, int nIFO, float T_win,
90  int pp_inetcc, float T_cor, int pp_irho, float T_cut, float T_vED, float T_pen, float T_ifar) {
91 
92  char sel[256]="";
93  char tmp[256]="";
94  char cut[256]="";
95  char title[256]="";
96 
97  // INJECTED
98  sprintf(cut,"");
99  if(gtype=="snr") {
100  strcpy(tmp,"snr[0]*snr[0]");
101  for(int i=1;i<nIFO;i++) {sprintf(sel,"%s+snr[%d]*snr[%d]",tmp,i,i);strcpy(tmp,sel);}
102  strcpy(tmp,sel);sprintf(sel,"sqrt(%s)>>hist(10000,1,10000)",tmp);
103  } else {
104  double dmin = gTRMDC->GetMinimum("distance");
105  double dmax = gTRMDC->GetMaximum("distance");
106  sprintf(sel,"distance>>hist(30,%f,%f)",dmin,dmax);
107  }
108  gTRMDC->Draw(sel,cut,"");
109  int nmdc = gTRMDC->GetSelectedRows();
110  cout << "nmdc : " << nmdc << endl;
111 
112  TH2F *htemp = (TH2F*)gPad->GetPrimitive("hist");
113  htemp->GetXaxis()->SetTitle(xtitle);
114  htemp->GetYaxis()->SetTitle(ytitle);
115  //htemp->GetXaxis()->SetRangeUser(4e-25,1e-21);
116  if(gtype=="snr") {
117  htemp->GetYaxis()->SetRangeUser(0.1, pow(10.,TMath::Ceil(TMath::Log10(htemp->GetMaximum()))));
118  } else {
119  htemp->GetXaxis()->SetRangeUser(gTRMDC->GetMinimum("distance"),gTRMDC->GetMaximum("distance"));
120  }
121  htemp->GetXaxis()->SetTitleOffset(1.35);
122  htemp->GetYaxis()->SetTitleOffset(1.35);
123  htemp->GetXaxis()->CenterTitle(true);
124  htemp->GetYaxis()->CenterTitle(true);
125  htemp->GetXaxis()->SetLabelFont(42);
126  htemp->GetXaxis()->SetTitleFont(42);
127  htemp->GetYaxis()->SetLabelFont(42);
128  htemp->GetYaxis()->SetTitleFont(42);
129 
130 
131  // DETECTED
132  if(gtype=="snr") {
133  strcpy(tmp,"iSNR[0]");
134  for(int i=1;i<nIFO;i++) {sprintf(sel,"%s+iSNR[%d]",tmp,i);strcpy(tmp,sel);}
135  strcpy(tmp,sel);sprintf(sel,"sqrt(%s)",tmp);
136  } else {
137  sprintf(sel,"range[1]");
138  }
139  sprintf(cut,"abs(time[0]-time[%d])<%g && netcc[%d]>%g && rho[%d]>%g",
140  nIFO,T_win,pp_inetcc,T_cor,pp_irho,T_cut);
141  if(T_vED>0) {strcpy(tmp,cut);sprintf(cut,"%s && neted[0]/ecor<%f",tmp,T_vED);}
142  if(T_pen>0) {strcpy(tmp,cut);sprintf(cut,"%s && penalty>%f",tmp,T_pen);}
143  if(T_ifar>0) {strcpy(tmp,cut);sprintf(cut,"%s && ifar>(24.*3600.*365.)*%f",tmp,T_ifar);}
144  gTRWAVE->SetLineColor(kRed);
145  gTRWAVE->SetFillColor(kRed);
146  gTRWAVE->Draw(sel,cut,"same");
147  int nwave = gTRWAVE->GetSelectedRows();
148  cout << "nwave : " << nwave << endl;
149  sprintf(title,"%s",cut);
150 
151  sprintf(title,"%s : inj = %d : rec : %d",ptitle.Data(),nmdc,nwave);
152  htemp->SetTitle(title);
153 
154 /*
155  // print plot
156  char ofname[256];
157  if(mtype==0) {
158  sprintf(ofname,"%s/%s_%s.png",
159  gODIR.Data(),gPTYPE.Data(),"ALL");
160  } else {
161  sprintf(ofname,"%s/%s_%s.png",
162  gODIR.Data(),gPTYPE.Data(),gMDC->wfList[mtype-1].name.Data());
163  }
164  cout << ofname << endl;
165  gCANVAS->Print(ofname);
166 */
167 
168  return;
169 }
170 
171 } // end namespace
172 
173 void
175  int pp_inetcc, float T_cor, int pp_irho, float T_cut, float T_vED, float T_pen, float T_ifar) {
176 
177  DrawRECvsINJ_namespace::DrawRECvsINJ(gtype, data_label, odir, merge_label, nIFO, T_win,
178  pp_inetcc, T_cor, pp_irho, T_cut, T_vED, T_pen, T_ifar);
179  return;
180 }
char cut[512]
double T_ifar
char xtitle[1024]
void DrawRECvsINJ(TString gtype, TString data_label, TString odir, TString merge_label, int nIFO, float T_win, int pp_inetcc, float T_cor, int pp_irho, float T_cut, float T_vED, float T_pen, float T_ifar)
Definition: DrawRECvsINJ.C:22
double T_pen
char cmd[1024]
int nwave
Definition: cbc_plots.C:820
TString("c")
double T_cor
void DrawRECvsINJ(TString gtype, TString data_label, TString odir, TString merge_label, int nIFO, float T_win, int pp_inetcc, float T_cor, int pp_irho, float T_cut, float T_vED, float T_pen, float T_ifar)
Definition: DrawRECvsINJ.C:174
char odir[1024]
i pp_inetcc
i drho i
#define nIFO
vector< int > mtype
Definition: cwb_report_pe.C:48
char data_label[512]
Definition: test_config1.C:160
int nmdc
Definition: cbc_plots.C:791
double * tmp
Definition: testWDM_5.C:31
TString merge_label
void RECvsINJ(int mtype, TString gtype, TString ptitle, TString xtitle, TString ytitle, int nIFO, float T_win, int pp_inetcc, float T_cor, int pp_irho, float T_cut, float T_vED, float T_pen, float T_ifar)
Definition: DrawRECvsINJ.C:89
char sim_file_name[1024]
char title[256]
Definition: SSeriesExample.C:1
double T_win
TString sel("slag[1]:rho[1]")
strcpy(RunLabel, RUN_LABEL)
sprintf(tfres,"(1/%g)x(%g) (sec)x(Hz)", 2 *df, df)
double T_cut
double T_vED
char mdc_file_name[1024]
i drho pp_irho