21 TString pdir,
double P,
bool freq=
false,
bool showerr=
true);
36 #define IN_CWB_ASCII_FILE_L1 "L1_pe_wave.dat" 37 #define IN_CWB_ASCII_FILE_H1 "H1_pe_wave.dat" 39 #define OUT_CWB_ASCII_FILE_L1 "OUT_L1_pe_wave.dat" 40 #define OUT_CWB_ASCII_FILE_H1 "OUT_H1_pe_wave.dat" 78 bool bexit =
label.Contains(
"EXIT") ? true :
false;
79 label.ReplaceAll(
"EXIT",
"");
87 if(
label==
"GW150914") {tshift=-0.0069;tchirp=8.42;mchirp=30.0;}
88 if(
label==
"GW151226") {tshift=-0.0011;tchirp=7.65;mchirp=8.9;}
89 if(
label==
"LVT151012") {tshift= 0.0010;tchirp=7.43;mchirp=24.0;}
109 std::vector<TString> ifoname;
114 &frec[ifo], &fmed[ifo], &fl50[ifo], &fu50[ifo], &fl90[ifo], &fu90[ifo]);
116 &fu90[ifo], &wrec[ifo],
".", P,
true);
121 ifoname =
ReadDataFromROOT(ipath,
n, &winj[
n], &wrec[n], &wwht[n], &wmed[n], &wl50[n], &wu50[n], &wl90[n], &wu90[n]);
122 nifo = ifoname.size();
125 if(
ifo>nifo-1) {cout <<
"DrawWaveformPE Error : input ifo=" <<
ifo <<
" parameter must be < nifo=" << nifo << endl;
exit(1);}
133 double tmed = wrec[0].
start()+(wrec[0].
size()/wrec[0].
rate())/2.;
135 double tstop = tmed+1;
141 PlotWaveformAsymmErrors(
"",
"", &wrec[
ifo], &wwht[ifo], &wl50[ifo], &wu50[ifo], &wl90[ifo], &wu90[ifo], &wrec[ifo],
"", P,
false,
false);
146 PlotWaveformAsymmErrors(
"",
"", &wrec[
ifo], &wmed[ifo], &wl50[ifo], &wu50[ifo], &wl90[ifo], &wu90[ifo], &wrec[ifo],
"", P);
151 PlotWaveformAsymmErrors(
"",
"", &winj[
ifo], &wmed[ifo], &wl50[ifo], &wu50[ifo], &wl90[ifo], &wu90[ifo], &wrec[ifo],
"", P);
158 PlotWaveformAsymmErrors(
"",
"", &wdif[ifo], &wdif[ifo], &wl50[ifo], &wu50[ifo], &wl90[ifo], &wu90[ifo], &wrec[ifo],
"", P);
164 TString ofile = TString::Format(
"%s_whitened_data_%s_Spectrogram.png",
label.Data(),ifoname[
ifo].Data());
166 if(bexit)
exit(0);
else return;
170 TString title = TString::Format(
"%s whitened data %s + %s(inv/tshift)",
label.Data(),ifoname[0].Data(),ifoname[1].Data());
171 TString ofile = TString::Format(
"%s_whitened_data_%s_plus_%s_Spectrogram.png",
label.Data(),ifoname[0].Data(),ifoname[1].Data());
179 if(bexit)
exit(0);
else return;
183 TString title = TString::Format(
"%s whitened data %s - %s(inv/tshift)",
label.Data(),ifoname[0].Data(),ifoname[1].Data());
184 TString ofile = TString::Format(
"%s_whitened_data_%s_minus_%s_Spectrogram.png",
label.Data(),ifoname[0].Data(),ifoname[1].Data());
192 if(bexit)
exit(0);
else return;
196 DumpWaveform(
ifo, &wrec[
ifo], &wmed[ifo], &wl50[ifo], &wu50[ifo], &wl90[ifo], &wu90[ifo]);
231 TFile*
froot =
new TFile(ifile,
"READ");
232 if(froot==NULL) {cout <<
"ReadWaveformPE Error : opening input root file" << endl;
exit(1);}
233 TTree*
gTREE = (TTree*)froot->Get(
"waveburst");
234 if(gTREE==NULL) {cout <<
"ReadWaveformPE Error : no waveburst present in the file" << endl;
exit(1);}
237 TList*
list = gTREE->GetUserInfo();
238 int nIFO=list->GetSize();
239 std::vector<TString> ifoname;
240 if (nIFO==0) {cout <<
"ReadWaveformPE Error : no ifo present in the tree" << endl;
exit(1);}
241 for (
int n=0;
n<list->GetSize();
n++) {
244 ifoname.push_back(pDetector->
Name);
262 gTREE->SetBranchAddress(
"pe_trials",&pe_trials);
263 gTREE->SetBranchAddress(
"pe_erR",pe_erR);
264 gTREE->SetBranchAddress(
"pe_erF",pe_erF);
265 gTREE->SetBranchAddress(
"pe_pnul",pe_pnul);
266 gTREE->SetBranchAddress(
"pe_snet",pe_snet);
267 gTREE->SetBranchAddress(
"pe_ff",pe_ff);
268 gTREE->SetBranchAddress(
"pe_of",pe_of);
269 gTREE->SetBranchAddress(
"pe_mch",pe_mch);
272 gTREE->SetBranchAddress(TString::Format(
"pe_wINJ_%d",
n).Data(),&pe_wINJ[
n]);
273 gTREE->SetBranchAddress(TString::Format(
"pe_wREC_%d",n).Data(),&pe_wREC[n]);
274 gTREE->SetBranchAddress(TString::Format(
"pe_wWHT_%d",n).Data(),&pe_wWHT[n]);
275 gTREE->SetBranchAddress(TString::Format(
"pe_wMED_%d",n).Data(),&pe_wMED[n]);
276 gTREE->SetBranchAddress(TString::Format(
"pe_wL50_%d",n).Data(),&pe_wL50[n]);
277 gTREE->SetBranchAddress(TString::Format(
"pe_wU50_%d",n).Data(),&pe_wU50[n]);
278 gTREE->SetBranchAddress(TString::Format(
"pe_wL90_%d",n).Data(),&pe_wL90[n]);
279 gTREE->SetBranchAddress(TString::Format(
"pe_wU90_%d",n).Data(),&pe_wU90[n]);
280 gTREE->SetBranchAddress(TString::Format(
"pe_wAVR_%d",n).Data(),&pe_wAVR[n]);
281 gTREE->SetBranchAddress(TString::Format(
"pe_wRMS_%d",n).Data(),&pe_wRMS[n]);
287 cout <<
"---------------------> size " << pe_wMED[0]->
size() << endl;
288 cout <<
"---------------------> pe_trials " << pe_trials << endl;
301 for(
int n=0;n<
nIFO;n++) {
327 for(
int i=0;
i<
N;
i++) {avr+=
i*x[
i]*x[
i]; E+=x[
i]*x[
i];}
334 double sum = ((M>=0)&&(M<N)) ? x[M]*x[M] : 0.;
335 for(
int j=1;
j<
N;
j++) {
336 a = ((M-
j>=0)&&(M-j<N)) ? x[M-j] : 0.;
337 b = ((M+j>=0)&&(M+j<N)) ? x[M+j] : 0.;
369 for(
int i=0;
i<wrec->
size();
i++) {
370 if(time[
i]>bT && time[
i]<eT)
continue;
375 TGraphAsymmErrors* egr90 =
new TGraphAsymmErrors(size,time.
data,wmed->
data,etime.
data,etime.
data,wl90->
data,wu90->
data);
376 egr90->SetLineColor(17);
377 egr90->SetFillStyle(1001);
378 egr90->SetFillColor(17);
379 egr90->GetXaxis()->SetTitle(
"time (s)");
380 if(freq) egr90->GetYaxis()->SetTitle(
"frequency (hz)");
381 else egr90->GetYaxis()->SetTitle(
"magnitude");
382 egr90->SetTitle(title);
384 TGraphAsymmErrors* egr50 =
new TGraphAsymmErrors(size,time.
data,wmed->
data,etime.
data,etime.
data,wl50->
data,wu50->
data);
385 egr50->SetLineColor(15);
386 egr50->SetFillStyle(1001);
387 egr50->SetFillColor(15);
389 TGraph* agr =
new TGraph(size,time.
data,wmed->
data);
390 agr->SetLineWidth(1);
391 agr->SetLineColor(kWhite);
392 agr->SetLineStyle(1);
394 TGraph*
gr =
new TGraph(size,time.
data,wrec->
data);
398 TCanvas*
canvas =
new TCanvas(
"wrec",
"wrec",200,20,800,500);
403 egr90->GetXaxis()->SetRangeUser(bT, eT);
406 egr50->Draw(
"4same");
410 agr->GetXaxis()->SetTitle(
"time (s)");
411 if(freq) agr->GetYaxis()->SetTitle(
"frequency (hz)");
412 else agr->GetYaxis()->SetTitle(
"magnitude");
413 agr->SetTitle(title);
414 agr->GetXaxis()->SetRangeUser(bT, eT);
415 agr->SetLineColor(16);
423 canvas->Print(ofname);
424 cout <<
"write : " << ofname << endl;
442 if(wf1==NULL)
return wf;
443 if(wf1->
size()==0)
return wf;
445 double R=wf1->
rate();
447 double b_wf1 = wf1->
start();
448 double e_wf1 = wf1->
start()+wf1->
size()/R;
449 double b_wf2 = wf2->
start();
450 double e_wf2 = wf2->
start()+wf2->
size()/R;
452 int o_wf1 = b_wf1>b_wf2 ? 0 :
int((b_wf2-b_wf1)*R+0.5);
453 int o_wf2 = b_wf1<b_wf2 ? 0 :
int((b_wf1-b_wf2)*R+0.5);
455 double startXCOR = b_wf1>b_wf2 ? b_wf1 : b_wf2;
456 double endXCOR = e_wf1<e_wf2 ? e_wf1 : e_wf2;
457 int sizeXCOR =
int((endXCOR-startXCOR)*R+0.5);
459 for(
int i=0;
i<sizeXCOR;
i++) wf[
i+o_wf2] = wf1->
data[
i+o_wf1];
466 double R=wf1->
rate();
468 double b_wf1 = wf1->
start();
469 double e_wf1 = wf1->
start()+wf1->
size()/R;
470 double b_wf2 = wf2->
start();
471 double e_wf2 = wf2->
start()+wf2->
size()/R;
473 int o_wf1 = b_wf1>b_wf2 ? 0 :
int((b_wf2-b_wf1)*R+0.5);
474 int o_wf2 = b_wf1<b_wf2 ? 0 :
int((b_wf1-b_wf2)*R+0.5);
476 double startXCOR = b_wf1>b_wf2 ? b_wf1 : b_wf2;
477 double endXCOR = e_wf1<e_wf2 ? e_wf1 : e_wf2;
478 int sizeXCOR =
int((endXCOR-startXCOR)*R+0.5);
483 wfdif.
start(b_wf1+
double(o_wf1)/R);
485 for(
int i=0;
i<sizeXCOR;
i++) wfdif[
i] = wf1->
data[
i+o_wf1] - wf2->
data[
i+o_wf2];
508 for(
int i=0;
i<wrec->
size();
i++) {
509 if(time[
i]>bT && time[
i]<eT)
continue;
514 TGraphAsymmErrors* egr90 =
new TGraphAsymmErrors(size,time.
data,wmed->
data,etime.
data,etime.
data,wl90->
data,wu90->
data);
515 egr90->SetLineColor(17);
516 egr90->SetFillStyle(1001);
517 egr90->SetFillColor(17);
518 egr90->GetXaxis()->SetTitle(
"time (s)");
519 if(freq) egr90->GetYaxis()->SetTitle(
"frequency (hz)");
520 else egr90->GetYaxis()->SetTitle(
"magnitude");
521 egr90->SetTitle(title);
523 TGraphAsymmErrors* egr50 =
new TGraphAsymmErrors(size,time.
data,wmed->
data,etime.
data,etime.
data,wl50->
data,wu50->
data);
524 egr50->SetLineColor(15);
525 egr50->SetFillStyle(1001);
526 egr50->SetFillColor(15);
528 TGraph* agr =
new TGraph(size,time.
data,wmed->
data);
529 agr->SetLineWidth(1);
530 agr->SetLineColor(kWhite);
531 agr->SetLineStyle(1);
533 TGraph*
gr =
new TGraph(size,time.
data,wrec->
data);
537 TCanvas*
canvas =
new TCanvas(
"wrec",
"wrec",200,20,800,500);
542 egr90->GetXaxis()->SetRangeUser(bT, eT);
544 egr50->Draw(
"4same");
550 canvas->Print(ofname);
551 cout <<
"write : " << ofname << endl;
573 if (!out.good()) {cout <<
"Error Opening Output File : " << ofname << endl;
exit(1);}
574 cout <<
"Create Output File : " << ofname << endl;
578 out <<
"#whitened data : time, amp_point, amp_median, amp_lower_50_perc, amp_lower_90_perc, amp_upper_50_perc, amp_upper_90_perc" << endl;
582 double dt=1./wrec->
rate();
584 double time =
i*dt+wrec->
start();
586 double vrec = wrec->
data[
i];
587 double vmed = wmed->
data[
i];
593 double l50 = vmed-vl50;
594 double u50 = vmed+vu50;
595 double l90 = vmed-vl90;
596 double u90 = vmed+vu90;
599 out << time <<
" " << vrec <<
" " << vmed <<
" " << l50 <<
" " << l90 <<
" " << u50 <<
" " << u90 << endl;
626 if(!in.good()) {cout <<
"Error Opening File : " << ifname << endl;
exit(1);}
631 in.getline(str,1024);
633 in.getline(str,1024);
634 if (!in.good())
break;
637 cout <<
"size " << size << endl;
638 in.clear(ios::goodbit);
639 in.seekg(0, ios::beg);
640 if (size==0) {cout <<
"Error : File " << ifname<<
" is empty" << endl;gSystem->Exit(1);}
643 double vrec, vavr, vrms, vmed, vl50, vl90, vu50, vu90;
644 double grec, gavr, grms, gmed, gl50, gl90, gu50, gu90;
675 in.getline(str,1024);
681 >> vrec >> vavr >> vrms >> vmed >> vl50 >> vl90 >> vu50 >> vu90
682 >> grec >> gavr >> grms >> gmed >> gl50 >> gl90 >> gu50 >> gu90;
684 if (!in.good())
break;
686 wrec->
data[
i] = vrec;
687 wmed->
data[
i] = vmed;
690 wl50->
data[
i] = vmed-vl50;
691 wu50->
data[
i] = vu50-vmed;
692 wl90->
data[
i] = vmed-vl90;
693 wu90->
data[
i] = vu90-vmed;
705 fmed->
data[
i] = gmed;
708 fl50->
data[
i] = gmed-gl50;
709 fu50->
data[
i] = gu50-gmed;
710 fl90->
data[
i] = gmed-gl90;
711 fu90->
data[
i] = gu90-gmed;
745 double dF=(x->
rate()/(double)x->
size())/2.;
747 for(
int j=0;
j<x->
size()/2;
j+=2) {
749 if(F<bF || F>eF) {x->
data[
j]=0;x->
data[
j+1]=0;}
756 if(tstart==0) tstart=x->
start();
757 if(tstop==0) tstop=x->
stop();
769 double p0 = 256.*Pi/5*pow(G*Mc*SM*Pi/C/C/C, 5./3);
776 fchirp =
new TF1(
"fchirp",
"pow([0]*([1]-x),-3./8.)", tmin, tmax);
777 fchirp->SetLineColor(kWhite);
780 fchirp->SetParameter(0, p0);
781 fchirp->SetParameter(1, p1);
790 double fparm=nfact*6;
795 int ysize=ystop-ystart;
802 stft =
new CWB::STFT(y,nfft,noverlap,
"energy",
"gauss",fparm);
805 double xtstart = nfft/x->
rate()+ystart/x->
rate();
806 double xtstop = (ysize-
nfft)/x->
rate()+ystart/x->
rate();
808 xtstart+=0.9;xtstop-=0.9;
809 stft->
Draw(xtstart,xtstop,16,1024,0,0,1);
814 canvas->SetLogy(
true);
816 if(ofname!=
"") stft->
Print(ofname);
detectorParams getDetectorParams()
virtual void rate(double r)
void Print(TString pname)
wavearray< double > a(hp.size())
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<< "\ layers : "<< nLAYERS<< "\ dF(hz) : "<< dF<< "\ 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
virtual void start(double s)
void Draw(double t1=0.0, double t2=0.0, double f1=0.0, double f2=0.0, double z1=0.0, double z2=0.0, int dpaletteId=DUMMY_PALETTE_ID, Option_t *option="colfz")
virtual size_t size() const
watplot p1(const_cast< char *>("TFMap1"))
double GravitationalConstant()
static void TimeShift(wavearray< double > &x, double tShift=0.)
virtual void stop(double s)
double fabs(const Complex &x)
sprintf(tfres,"(1/%g)x(%g) (sec)x(Hz)", 2 *df, df)
virtual void resize(unsigned int)
gwavearray< double > * grec
double SpeedOfLightInVacuo()