Logo coherent WaveBurst  
Library Reference Guide
Logo
DrawSensitivityPE.C
Go to the documentation of this file.
1 /*
2 # Copyright (C) 2019 Gabriele Vedovato
3 #
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17 
18 
19 #define MAX_GW 100
20 
21 
22 void DrawSensitivityPE(TString type, TString ifname_ff, TString ifname_of, TString ifname_re, TString odir, TString label) {
23 
24  bool check = (type!="phase")&&(type!="time")&&(type!="amp");
25  check = check&&(type!="dphase50")&&(type!="dtime50")&&(type!="damp50");
26  check = check&&(type!="dphase90")&&(type!="dtime90")&&(type!="damp90");
27  if(check) {cout << "DrawSensitivityPE.C - Input type option error" << endl;exit(1);}
28 
29  // init blind colors
30  Color_t color[4];
31  color[0] = CWB::Toolbox::getTableau10BlindColor("DarkOrange1");
32  color[1] = CWB::Toolbox::getTableau10BlindColor("DeepSkyBlue4");
33  color[2] = CWB::Toolbox::getTableau10BlindColor("DarkGray");
34  color[3] = CWB::Toolbox::getTableau10BlindColor("SandyBrown");
35 
36  int N=0;
37  double event[MAX_GW];
38  double zero[MAX_GW]; for(int i=0;i<MAX_GW;i++) zero[i]=0;
39  char dummy[256];
40  char gw_name[MAX_GW][256];
41 
42  ifstream in_ff;
43  in_ff.open(ifname_ff.Data(),ios::in);
44  if (!in_ff.good()) {cout << "DrawSensitivityPE.C - Error Opening File : " << ifname_ff.Data() << endl;exit(1);}
45  double dff_phase[MAX_GW],dff_time[MAX_GW],dff_amp[MAX_GW];
46  double ff_dphase50[MAX_GW],ff_dtime50[MAX_GW],ff_damp50[MAX_GW];
47  double ff_dphase90[MAX_GW],ff_dtime90[MAX_GW],ff_damp90[MAX_GW];
48  N=0;
49  while(1) {
50  in_ff >> gw_name[N] >> dummy >> dummy
51  >> dummy >> dff_phase[N] >> dummy >> dff_time[N] >> dummy >> dff_amp[N]
52  >> dummy >> ff_dphase50[N] >> dummy >> ff_dtime50[N] >> dummy >> ff_damp50[N]
53  >> dummy >> ff_dphase90[N] >> dummy >> ff_dtime90[N] >> dummy >> ff_damp90[N];
54  if(!in_ff.good()) break;
55  //cout <<" "<< gw_name[N] <<" "<< dff_phase[N] <<" "<< dff_time[N] <<" "<< dff_amp[N] << endl;
56  event[N] = N+1;
57  dff_time[N]/=1000.; // sec -> msec
58  ff_dtime50[N]*=1000.; // sec -> msec
59  ff_dtime90[N]*=1000.; // sec -> msec
60  N++;
61  }
62  int NFF=N;
63  in_ff.close();
64 
65  ifstream in_of;
66  in_of.open(ifname_of.Data(),ios::in);
67  if (!in_of.good()) {cout << "DrawSensitivityPE.C - Error Opening File : " << ifname_of.Data() << endl;exit(1);}
68  double dof_phase[MAX_GW],dof_time[MAX_GW],dof_amp[MAX_GW];
69  double of_dphase50[MAX_GW],of_dtime50[MAX_GW],of_damp50[MAX_GW];
70  double of_dphase90[MAX_GW],of_dtime90[MAX_GW],of_damp90[MAX_GW];
71  N=0;
72  while(1) {
73  in_of >> gw_name[N] >> dummy >> dummy
74  >> dummy >> dof_phase[N] >> dummy >> dof_time[N] >> dummy >> dof_amp[N]
75  >> dummy >> of_dphase50[N] >> dummy >> of_dtime50[N] >> dummy >> of_damp50[N]
76  >> dummy >> of_dphase90[N] >> dummy >> of_dtime90[N] >> dummy >> of_damp90[N];
77  if(!in_of.good()) break;
78  //cout <<" "<< gw_name[N] <<" "<< dof_phase[N] <<" "<< dof_time[N] <<" "<< dof_amp[N] << endl;
79  dof_time[N]/=1000.; // sec -> msec
80  of_dtime50[N]*=1000.; // sec -> msec
81  of_dtime90[N]*=1000.; // sec -> msec
82  N++;
83  }
84  int NOF=N;
85  in_of.close();
86 
87  ifstream in_re;
88  in_re.open(ifname_re.Data(),ios::in);
89  if (!in_re.good()) {cout << "DrawSensitivityPE.C - Error Opening File : " << ifname_re.Data() << endl;exit(1);}
90  double dre_phase[MAX_GW],dre_time[MAX_GW],dre_amp[MAX_GW];
91  double re_dphase50[MAX_GW],re_dtime50[MAX_GW],re_damp50[MAX_GW];
92  double re_dphase90[MAX_GW],re_dtime90[MAX_GW],re_damp90[MAX_GW];
93  N=0;
94  while(1) {
95  in_re >> gw_name[N] >> dummy >> dummy
96  >> dummy >> dre_phase[N] >> dummy >> dre_time[N] >> dummy >> dre_amp[N]
97  >> dummy >> re_dphase50[N] >> dummy >> re_dtime50[N] >> dummy >> re_damp50[N]
98  >> dummy >> re_dphase90[N] >> dummy >> re_dtime90[N] >> dummy >> re_damp90[N];
99  if(!in_re.good()) break;
100  //cout <<" "<< gw_name[N] <<" "<< dre_phase[N] <<" "<< dre_time[N] <<" "<< dre_amp[N] << endl;
101  dre_time[N]/=1000.; // sec -> msec
102  re_dtime50[N]*=1000.; // sec -> msec
103  re_dtime90[N]*=1000.; // sec -> msec
104  N++;
105  }
106  int NRE=N;
107  in_re.close();
108 
109  TCanvas* canvas = new TCanvas("sensitivity", "sensitivity", 300,40, 1000, 600);
110  canvas->SetGrid();
111 
112  gStyle->SetGridStyle(3);
113  gStyle->SetGridWidth(1);
114  gStyle->SetFrameBorderMode(0);
115  gStyle->SetTitleTextColor(kBlack);
116  gStyle->SetTitleFont(12,"D");
117 
118  double xmax=0,ymax=0,ymin=1e20;
119  for(int i=0;i<NFF;i++) {
120  if(type=="phase") {
121  if(dff_phase[i]<ymin) ymin=dff_phase[i];
122  if(dff_phase[i]>ymax) ymax=dff_phase[i];
123  if(dof_phase[i]<ymin) ymin=dof_phase[i];
124  if(dof_phase[i]>ymax) ymax=dof_phase[i];
125  if(dre_phase[i]<ymin) ymin=dre_phase[i];
126  if(dre_phase[i]>ymax) ymax=dre_phase[i];
127  }
128  if(type=="time") {
129  if(dff_time[i]<ymin) ymin=dff_time[i];
130  if(dff_time[i]>ymax) ymax=dff_time[i];
131  if(dof_time[i]<ymin) ymin=dof_time[i];
132  if(dof_time[i]>ymax) ymax=dof_time[i];
133  if(dre_time[i]<ymin) ymin=dre_time[i];
134  if(dre_time[i]>ymax) ymax=dre_time[i];
135  }
136  if(type=="amp") {
137  if(dff_amp[i]<ymin) ymin=dff_amp[i];
138  if(dff_amp[i]>ymax) ymax=dff_amp[i];
139  if(dof_amp[i]<ymin) ymin=dof_amp[i];
140  if(dof_amp[i]>ymax) ymax=dof_amp[i];
141  if(dre_amp[i]<ymin) ymin=dre_amp[i];
142  if(dre_amp[i]>ymax) ymax=dre_amp[i];
143  }
144  if(type=="dphase50") {
145  if(ff_dphase50[i]<ymin) ymin=ff_dphase50[i];
146  if(ff_dphase50[i]>ymax) ymax=ff_dphase50[i];
147  if(of_dphase50[i]<ymin) ymin=of_dphase50[i];
148  if(of_dphase50[i]>ymax) ymax=of_dphase50[i];
149  if(re_dphase50[i]<ymin) ymin=re_dphase50[i];
150  if(re_dphase50[i]>ymax) ymax=re_dphase50[i];
151  }
152  if(type=="dtime50") {
153  if(ff_dtime50[i]<ymin) ymin=ff_dtime50[i];
154  if(ff_dtime50[i]>ymax) ymax=ff_dtime50[i];
155  if(of_dtime50[i]<ymin) ymin=of_dtime50[i];
156  if(of_dtime50[i]>ymax) ymax=of_dtime50[i];
157  if(re_dtime50[i]<ymin) ymin=re_dtime50[i];
158  if(re_dtime50[i]>ymax) ymax=re_dtime50[i];
159  }
160  if(type=="damp50") {
161  if(ff_damp50[i]<ymin) ymin=ff_damp50[i];
162  if(ff_damp50[i]>ymax) ymax=ff_damp50[i];
163  if(of_damp50[i]<ymin) ymin=of_damp50[i];
164  if(of_damp50[i]>ymax) ymax=of_damp50[i];
165  if(re_damp50[i]<ymin) ymin=re_damp50[i];
166  if(re_damp50[i]>ymax) ymax=re_damp50[i];
167  }
168  if(type=="dphase90") {
169  if(ff_dphase90[i]<ymin) ymin=ff_dphase90[i];
170  if(ff_dphase90[i]>ymax) ymax=ff_dphase90[i];
171  if(of_dphase90[i]<ymin) ymin=of_dphase90[i];
172  if(of_dphase90[i]>ymax) ymax=of_dphase90[i];
173  if(re_dphase90[i]<ymin) ymin=re_dphase90[i];
174  if(re_dphase90[i]>ymax) ymax=re_dphase90[i];
175  }
176  if(type=="dtime90") {
177  if(ff_dtime90[i]<ymin) ymin=ff_dtime90[i];
178  if(ff_dtime90[i]>ymax) ymax=ff_dtime90[i];
179  if(of_dtime90[i]<ymin) ymin=of_dtime90[i];
180  if(of_dtime90[i]>ymax) ymax=of_dtime90[i];
181  if(re_dtime90[i]<ymin) ymin=re_dtime90[i];
182  if(re_dtime90[i]>ymax) ymax=re_dtime90[i];
183  }
184  if(type=="damp90") {
185  if(ff_damp90[i]<ymin) ymin=ff_damp90[i];
186  if(ff_damp90[i]>ymax) ymax=ff_damp90[i];
187  if(of_damp90[i]<ymin) ymin=of_damp90[i];
188  if(of_damp90[i]>ymax) ymax=of_damp90[i];
189  if(re_damp90[i]<ymin) ymin=re_damp90[i];
190  if(re_damp90[i]>ymax) ymax=re_damp90[i];
191  }
192  }
193 
194  TH2F *frame = new TH2F("frame","",1000,0.0,NFF+1,1000,0.9*ymin,1.1*ymax);
195  if(type=="phase") frame->SetTitle("phase sensitivity");
196  if(type=="time") frame->SetTitle("time sensitivity");
197  if(type=="amp") frame->SetTitle("amp sensitivity");
198  if(type=="dphase50") frame->SetTitle("phase-50cr sensitivity");
199  if(type=="dtime50") frame->SetTitle("time-50cr sensitivity");
200  if(type=="damp50") frame->SetTitle("amp-50cr sensitivity");
201  if(type=="dphase90") frame->SetTitle("phase-90cr sensitivity");
202  if(type=="dtime90") frame->SetTitle("time-90cr sensitivity");
203  if(type=="damp90") frame->SetTitle("amp-90cr sensitivity");
204  frame->SetStats(0);
205  if(type=="phase") frame->GetYaxis()->SetTitle("phase sensitivity per degree");
206  if(type=="time") frame->GetYaxis()->SetTitle("time sensitivity per msec");
207  if(type=="amp") frame->GetYaxis()->SetTitle("amp sensitivity per amp factor");
208  if(type=="dphase50") frame->GetYaxis()->SetTitle("phase-50cr sensitivity (degree)");
209  if(type=="dtime50") frame->GetYaxis()->SetTitle("time-50cr sensitivity (msec)");
210  if(type=="damp50") frame->GetYaxis()->SetTitle("amp-50cr sensitivity (amp factor)");
211  if(type=="dphase90") frame->GetYaxis()->SetTitle("phase-90cr sensitivity (degree)");
212  if(type=="dtime90") frame->GetYaxis()->SetTitle("time-90cr sensitivity (msec)");
213  if(type=="damp90") frame->GetYaxis()->SetTitle("amp-90cr sensitivity (amp factor)");
214  frame->GetXaxis()->CenterTitle(kTRUE);
215  frame->GetXaxis()->SetRangeUser(0,NFF+1);
216  frame->GetYaxis()->SetTitleOffset(1.10);
217  frame->GetXaxis()->CenterTitle(kTRUE);
218  frame->GetYaxis()->CenterTitle(kTRUE);
219  frame->GetXaxis()->SetTitleFont(132);
220  frame->GetXaxis()->SetLabelFont(132);
221  frame->GetYaxis()->SetTitleFont(132);
222  frame->GetYaxis()->SetLabelFont(132);
223  frame->GetXaxis()->SetTitleSize(0.045);
224  frame->GetXaxis()->SetLabelSize(0.045);
225  frame->GetYaxis()->SetTitleSize(0.045);
226  frame->GetYaxis()->SetLabelSize(0.045);
227  frame->GetYaxis()->SetLabelOffset(0.01);
228  frame->LabelsOption("x");
229  if(N<10) {
230  frame->GetXaxis()->SetMoreLogLabels();
231  frame->GetXaxis()->SetNoExponent();
232  }
233  frame->Draw();
234 
235  canvas->SetBottomMargin(0.15);
236  //frame->GetXaxis()->SetNdivisions(-221);
237  frame->GetXaxis()->SetNdivisions(120);
238  frame->GetXaxis()->SetTitle("");
239  frame->GetXaxis()->SetLabelOffset(.05);
240  frame->GetXaxis()->SetLabelSize(0.03);
241  frame->GetXaxis()->CenterLabels();
242  for(int n=0;n<NFF;n++) frame->GetXaxis()->ChangeLabel(n+1,45,-1,-1,-1,-1,gw_name[n]);
243  frame->GetXaxis()->ChangeLabel(N+1,45,-1,-1,-1,-1," ");
244 
245  double dff[MAX_GW];
246  if(type=="phase") for(int i=0;i<NFF;i++) dff[i]=dff_phase[i];
247  if(type=="time") for(int i=0;i<NFF;i++) dff[i]=dff_time[i];
248  if(type=="amp") for(int i=0;i<NFF;i++) dff[i]=dff_amp[i];
249  if(type=="dphase50") for(int i=0;i<NFF;i++) dff[i]=ff_dphase50[i];
250  if(type=="dtime50") for(int i=0;i<NFF;i++) dff[i]=ff_dtime50[i];
251  if(type=="damp50") for(int i=0;i<NFF;i++) dff[i]=ff_damp50[i];
252  if(type=="dphase90") for(int i=0;i<NFF;i++) dff[i]=ff_dphase90[i];
253  if(type=="dtime90") for(int i=0;i<NFF;i++) dff[i]=ff_dtime90[i];
254  if(type=="damp90") for(int i=0;i<NFF;i++) dff[i]=ff_damp90[i];
255 
256  TGraph* gdff = new TGraph(NFF,event,dff);
257  gdff->SetLineWidth(2);
258  gdff->SetLineColor(color[2]);
259  gdff->SetMarkerColor(color[2]);
260  gdff->SetMarkerStyle(20);
261  gdff->Draw("LPSAME");
262 
263  double dof[MAX_GW];
264  if(type=="phase") for(int i=0;i<NFF;i++) dof[i]=dof_phase[i];
265  if(type=="time") for(int i=0;i<NFF;i++) dof[i]=dof_time[i];
266  if(type=="amp") for(int i=0;i<NFF;i++) dof[i]=dof_amp[i];
267  if(type=="dphase50") for(int i=0;i<NFF;i++) dof[i]=of_dphase50[i];
268  if(type=="dtime50") for(int i=0;i<NFF;i++) dof[i]=of_dtime50[i];
269  if(type=="damp50") for(int i=0;i<NFF;i++) dof[i]=of_damp50[i];
270  if(type=="dphase90") for(int i=0;i<NFF;i++) dof[i]=of_dphase90[i];
271  if(type=="dtime90") for(int i=0;i<NFF;i++) dof[i]=of_dtime90[i];
272  if(type=="damp90") for(int i=0;i<NFF;i++) dof[i]=of_damp90[i];
273 
274  TGraph* gdof = new TGraph(NFF,event,dof);
275  gdof->SetLineWidth(2);
276  gdof->SetLineColor(color[1]);
277  gdof->SetMarkerColor(color[1]);
278  gdof->SetMarkerStyle(20);
279  gdof->Draw("LPSAME");
280 
281  double dre[MAX_GW];
282  if(type=="phase") for(int i=0;i<NFF;i++) dre[i]=dre_phase[i];
283  if(type=="time") for(int i=0;i<NFF;i++) dre[i]=dre_time[i];
284  if(type=="amp") for(int i=0;i<NFF;i++) dre[i]=dre_amp[i];
285  if(type=="dphase50") for(int i=0;i<NFF;i++) dre[i]=re_dphase50[i];
286  if(type=="dtime50") for(int i=0;i<NFF;i++) dre[i]=re_dtime50[i];
287  if(type=="damp50") for(int i=0;i<NFF;i++) dre[i]=re_damp50[i];
288  if(type=="dphase90") for(int i=0;i<NFF;i++) dre[i]=re_dphase90[i];
289  if(type=="dtime90") for(int i=0;i<NFF;i++) dre[i]=re_dtime90[i];
290  if(type=="damp90") for(int i=0;i<NFF;i++) dre[i]=re_damp90[i];
291 
292  TGraph* gdre = new TGraph(NFF,event,dre);
293  gdre->SetLineWidth(2);
294  gdre->SetLineColor(color[0]);
295  gdre->SetMarkerColor(color[0]);
296  gdre->SetMarkerStyle(20);
297  gdre->Draw("LPSAME");
298 
299  TLegend *leg = new TLegend(0.1102204,0.7456446,0.3226453,0.8867596,NULL,"brNDC");
300  leg->SetBorderSize(1);
301  leg->SetTextAlign(22);
302  leg->SetTextFont(12);
303  leg->SetLineColor(1);
304  leg->SetLineStyle(1);
305  leg->SetLineWidth(1);
306  leg->SetFillColor(0);
307  leg->SetFillStyle(1001);
308  leg->SetTextSize(0.04);
309  leg->SetLineColor(kBlack);
310  leg->SetFillColor(kWhite);
311  leg->AddEntry(gdff,"Fitting Factor","lp");
312  leg->AddEntry(gdof,"Overlap Factor","lp");
313  leg->AddEntry(gdre,"Residual Energy","lp");
314  leg->Draw();
315 
316  // dump pvalue plot
317  if(odir!="") odir=odir+"/";
318  TString ofname;
319  if(type=="phase") ofname=odir+"/"+"A_phase_sensitivity.png";
320  if(type=="dphase50") ofname=odir+"/"+"B_dphase_50cr_sensitivity.png";
321  if(type=="dphase90") ofname=odir+"/"+"C_dphase_90cr_sensitivity.png";
322  if(type=="time") ofname=odir+"/"+"D_time_sensitivity.png";
323  if(type=="dtime50") ofname=odir+"/"+"E_dtime_50cr_sensitivity.png";
324  if(type=="dtime90") ofname=odir+"/"+"F_dtime_90cr_sensitivity.png";
325  if(type=="amp") ofname=odir+"/"+"G_amp_sensitivity.png";
326  if(type=="damp50") ofname=odir+"/"+"H_damp_50cr_sensitivity.png";
327  if(type=="damp90") ofname=odir+"/"+"I_damp_90cr_sensitivity.png";
328  cout << ofname << endl;
329  canvas->Print(ofname);
330 }
331 
int n
Definition: cwb_net.C:28
TString("c")
char odir[1024]
return wmap canvas
i drho i
#define N
#define MAX_GW
TString label
Definition: MergeTrees.C:21
ifstream in
void DrawSensitivityPE(TString type, TString ifname_ff, TString ifname_of, TString ifname_re, TString odir, TString label)
static Int_t getTableau10BlindColor(Int_t index)
Definition: Toolbox.cc:7275
int check
exit(0)