9 #pragma GCC system_header
16 #include "TObjArray.h"
17 #include "TObjString.h"
18 #include "TPaletteAxis.h"
19 #include "TMultiLayerPerceptron.h"
20 #include "TMLPAnalyzer.h"
33 #define nIFO 3 // number of detectors
36 #define CREATE_NETWORK
46 if (!gROOT->GetClass(
"TMultiLayerPerceptron")) {
47 gSystem->Load(
"libMLP");
59 if(nTrain>nTrainBg) maxTrain=nTrain;
60 else maxTrain=nTrainBg;
62 TFile*
ifile=TFile::Open(TREE_FILE.Data());
63 TTree* NNTree=(TTree*)ifile->Get(
"nnTree");
67 int entries=NNTree->GetEntries();
68 cout<<
"entries: "<<entries<<endl;
77 NNTree->SetBranchAddress(
"#Entries_type",&entriesTot);
78 NNTree->SetBranchAddress(
"Matrix_dim",&ndim);
79 NNTree->SetBranchAddress(
"#inputs",&ninp);
80 NNTree->SetBranchAddress(
"amplitude_mode",&y);
83 sig_entries=entriesTot;
84 NNTree->GetEntry(entries-1);
85 bg_entries=entriesTot;
89 cout<<
"NDIM "<<NDIM<<endl;
90 cout<<
"nINP"<<nINP<<endl;
92 cout<<
"sig e "<<sig_entries<<endl;
93 cout<<
"bg e "<<bg_entries<<endl;
96 if(sig_entries==bg_entries) cout<<
"Error: training with a single type of event"<<endl;
98 if(bg_entries<nTrainBg){cout<<
"Error: Bg: num train>num events"<<endl;
100 if(sig_entries<nTrain) {cout<<
"Error: Sig: num train>num events"<<endl;
103 if(!nTrainBg) nTrainBg=bg_entries;
104 if(!nTrain) nTrain=sig_entries;
114 TreeF.ReplaceAll(
"/home/serena.vinciguerra/",
"");
115 TreeF.ReplaceAll(
"/",
"_");
116 TreeF.ReplaceAll(
".root",
"");
121 structure.ReplaceAll(
":",
"_");
123 sprintf(nomeNN,
"NN/mlpNetwork_nTS%i_nTB%i_structure%s_lm%i_epochs%i_s%i_b%i_ROC_TREEfile%s.root",nTrain,nTrainBg,structure.Data(),lm,nepoch,q,p,TreeF.Data());
126 sprintf(nameTrain,
"PropertyGraphs/mlpNetwork_nTS%i_nTB%i_s%i_b%i_TREEfile_%s.root",nTrain,nTrainBg,q,p,TreeF.Data());
131 NNTree->SetBranchAddress(
"Files_name",&FILE_NAME);
134 NNTree->GetEntry(entries-1);
136 cout<<
"fine ifdef RHO_CC"<<endl;
139 TString FileSelectName(nameTrain);
141 FileSelectName.ReplaceAll(
"PropertyGraphs/mlpNetwork",
"selectTREE/TreeTrain");
142 TFile *f0=TFile::Open(FileSelectName.Data(),
"read");
147 std::vector<int>* choice=
new vector<int>;
148 cout<<
"vector definition"<<endl;
150 for (
int z=0;
z<nTrain;
z++) choice->push_back(q+
z);
152 for (
int z=0;
z<nTrainBg;
z++) choice->push_back(
z+p);
156 cout<<
"new file created"<<endl;
159 nomefile=FileSelectName.Data();
160 cout<<
"open file-Train pre-existing: "<<nomefile.Data()<<endl;
165 TFile* fsel=TFile::Open(nomefile.Data());
166 TTree* tTrain1=(TTree*)fsel->Get(
"nnTree");
167 cout<<
"def Tree per Train"<<endl;
171 char ilabel[nINP][16];
173 for(
int i=0;
i<nINP;
i++) {
178 tTrain1->SetBranchAddress(ilabel[i], &x[i]);
180 tTrain1->SetBranchAddress(
"type",&type);
183 char wlabel[nINP][16];
186 for(
int i=0;
i<nINP;
i++) {
189 tTrain1->SetBranchAddress(wlabel[i], &w[i]);
193 tTrain1->SetBranchAddress(
"w",&w);
198 TChain sigTree(
"waveburst");
199 sigTree.Add(SIG_FILE.Data());
202 cout <<
"sig entries2 : " << sig_entries2 << endl;
204 TChain bgTree(
"waveburst");
205 bgTree.Add(BG_FILE.Data());
208 cout <<
"bg entries2 : " << bg_entries2 << endl;
210 TH1F *ibg =
new TH1F(
"bgh",
"rho[0]", 50, 0, 50);
211 TH1F *isig =
new TH1F(
"sigh",
"rho[0]", 50, 0, 18);
212 TH1F *ibg2 =
new TH1F(
"bgh2",
"netcc[1]", 50, 0, 1.2);
213 TH1F *isig2 =
new TH1F(
"sigh2",
"netcc[1]", 50, 0, 1.1);
217 ibg->SetDirectory(0);
218 isig->SetDirectory(0);
219 ibg2->SetDirectory(0);
220 isig2->SetDirectory(0);
229 TTree* t_NNout=
new TTree(
"rho_cc_NNout",
"rho_cc_NNout");
234 t_NNout->Branch(
"rho",&rho_NN,
"rho/D");
235 t_NNout->Branch(
"cc",&cc_NN,
"cc/D");
236 t_NNout->Branch(
"type",&NNtype,
"type/I");
237 t_NNout->Branch(
"NNout",&NNout,
"NNout/D");
239 for(
int h=q;
h<q+nTrain;
h++){
241 if(q%2==0) resto0=(
h)%2;
244 if (resto0==0&&
h<q+2) minCC=(double)signal.
netcc[1];
245 if (resto0==0&&
h<q+2) minRHO=(double)signal.
rho[0];
246 if (signal.
rho[0]<minRHO&&resto0==0)minRHO=(double)signal.
rho[0];
247 if (signal.
netcc[1]<minCC&&resto0==0)minCC=(double)signal.
netcc[1];
248 if (signal.
rho[0]>maxRHO&&resto0==0)maxRHO=(double)signal.
rho[0];
249 if (signal.
netcc[1]>maxCC&&resto0==0)maxCC=(double)signal.
netcc[1];
250 isig->Fill(signal.
rho[0]);
251 isig2->Fill(signal.
netcc[1]);
254 for(
int h=(p-sig_entries);
h<(p-sig_entries+nTrainBg);
h++){
256 if((p-sig_entries+nTrainBg)%2==0) resto0=(
h)%2;
259 if (resto0==0&&
h<q+2) minCC=(double)signal.
netcc[1];
260 if (resto0==0&&
h<q+2) minRHO=(double)signal.
rho[0];
261 if (background.
rho[0]<minRHO&&resto0==0)minRHO=(double)background.
rho[0];
262 if (background.
netcc[1]<minCC&&resto0==0)minCC=(double)background.
netcc[1];
263 if (background.
rho[0]>maxRHO&&resto0==0)maxRHO=(double)background.
rho[0];
264 if (background.
netcc[1]>maxCC&&resto0==0)maxCC=(double)background.
netcc[1];
265 ibg->Fill(background.
rho[0]);
266 ibg2->Fill(background.
netcc[1]);
268 cout<<
"max RHO"<<maxRHO<<
" maxCC "<<maxCC<<
" minRHO "<<minRHO<<
" minCC "<<minCC<<endl;
271 if (rm!=0) maxRHO=rm;
275 for (
int i=0;i<nINP-1;i++) {
282 sprintf(add1,
"@%s:%s:type",ilabel[nINP-1],option.Data());
284 cout<<layout.Data()<<endl;
291 #ifdef CREATE_NETWORK
292 TCanvas *errors=
new TCanvas(
"errors",
"errors",0,0,600,600);
293 TMultiLayerPerceptron *mlp =
new TMultiLayerPerceptron(layout,
"w",tTrain1,
"Entry$%2",
"(Entry$+1)%2");
294 if (lm==1)mlp->SetLearningMethod(TMultiLayerPerceptron::kStochastic);
295 if(lm==2)mlp->SetLearningMethod(TMultiLayerPerceptron::kBatch);
296 if(lm==3)mlp->SetLearningMethod(TMultiLayerPerceptron::kSteepestDescent);
297 if(lm==4)mlp->SetLearningMethod(TMultiLayerPerceptron::kRibierePolak);
298 if(lm==5)mlp->SetLearningMethod(TMultiLayerPerceptron::kFletcherReeves);
299 if(lm==6)mlp->SetLearningMethod(TMultiLayerPerceptron::kBFGS);
301 cout<<
"Invalid Learning Method:1<=lm<=6"<<endl;
305 mlp->Train(nepoch,
"text,current,graph,update=10");
309 PNGname.ReplaceAll(
"NN/",
"ErrorGraphs/");
310 PNGnameroot.ReplaceAll(
"NN/",
"ErrorGraphs/");
311 PNGname.ReplaceAll(
".root",
".png");
313 errors->SaveAs(PNGname.Data());
314 errors->Print(PNGnameroot.Data());
318 TFile fnet(nomeNN,
"RECREATE");
324 cout<<
"ci sono"<<endl;
326 cout<<
"non ci sono più"<<endl;
328 TMultiLayerPerceptron *mlp = (TMultiLayerPerceptron*)fnet.Get(
"TMultiLayerPerceptron");
329 if(mlp==NULL) {cout <<
"Error getting mlp" << endl;
exit(1);}
334 TCanvas* mlpa_canvas =
new TCanvas(
"mlpa_canvas",
"Network analysis");
336 mlpa_canvas->Divide(2,2);
340 ibg->SetLineColor(kBlue);
341 ibg->SetFillStyle(3008); ibg->SetFillColor(kBlue);
342 isig->SetLineColor(kRed);
343 isig->SetFillStyle(3003); isig->SetFillColor(kRed);
350 TLegend *ilegend =
new TLegend(.75, .80, .95, .95);
351 ilegend->AddEntry(ibg,
"Background");
352 ilegend->AddEntry(isig,
"Signal");
354 cout <<
"Integral ibg : " << ibg->GetEntries() << endl;
355 cout <<
"Integral isig : " << isig->GetEntries() << endl;
362 ibg2->SetLineColor(kBlue);
363 ibg2->SetFillStyle(3008); ibg2->SetFillColor(kBlue);
364 isig2->SetLineColor(kRed);
365 isig2->SetFillStyle(3003); isig2->SetFillColor(kRed);
370 TLegend *ilegend2 =
new TLegend(.75, .80, .95, .95);
371 ilegend2->AddEntry(ibg2,
"Background");
372 ilegend2->AddEntry(isig2,
"Signal");
374 cout <<
"Integral ibg : " << ibg2->GetEntries() << endl;
375 cout <<
"Integral isig : " << isig2->GetEntries() << endl;
380 TMLPAnalyzer ana(mlp);
382 ana.GatherInformations();
385 #ifdef CREATE_NETWORK
397 ana.DrawNetwork(0,
"type==1",
"type==0");
399 mlpa_canvas->Divide(1,2);
404 ana.DrawNetwork(0,
"type==1",
"type==0");
409 TTree*
t=
new TTree(
"info",
"info");
410 t->Branch(
"amplitude_mode",&y,
"amplitude_mode/I");
412 t->Branch(
"Matrix_dim",&ndim,
"Matrix_dim/I");
414 t->Branch(
"#inputs",&ninp,
"#inputs/I");
416 sprintf(NNname,
"%s",option.Data());
417 t->Branch(
"NNname",&NNname,
"NNname/C");
418 t->Branch(
"#trainBg",&nTrainBg,
"#trainBg/I");
419 t->Branch(
"#trainSig",&nTrain,
"#trainSig/I");
422 t->Branch(
"Rand_start_Bg",&p,
"Rand_start_Bg/I");
423 t->Branch(
"Rand_start_Sig",&q,
"Rand_start_Sig/I");
424 t->Branch(
"epochs",&nepoch,
"epocs/I");
425 t->Branch(
"learning_method",&lm,
"learning_method/I");
431 double errTot=mlp->GetError(TMultiLayerPerceptron::kTest);
435 mlpa_canvas->Write();
438 CanvNN.ReplaceAll(
"NN/",
"mlpa_canv/");
439 CanvNNroot.ReplaceAll(
"NN/",
"mlpa_canv/");
440 CanvNN.ReplaceAll(
".root",
".png");
441 mlpa_canvas->SaveAs(CanvNN.Data());
442 mlpa_canvas->Print(CanvNNroot.Data());
452 float thres0[npunti+1];
457 for (
int i=0;i<=npunti;i++){
466 passo=(
log(1.1)-
log(0.5))/(npunti/2);
467 cout<<
"passo "<<passo<<endl;
469 cout<<
"soglia0 "<<thres0[0]<<endl;
470 for(
int i=npunti;i>npunti/2;i--) {
471 thres0[i-1]=thres0[
i]*exp(passo);}
472 for(
int i=0;i<(npunti/2);i++) {
473 thres0[npunti/2+i+1]=1.6 -thres0[npunti/2+i+1];
474 thres0[npunti/2-i-1]=1.-thres0[npunti/2+i+1];
479 thres0[npunti/2]=0.5;
480 for(
int i=0;i<(npunti);i++) {
481 cout<<thres0[
i]<<endl;
493 TH2D* PUREZZA_S=
new TH2D(
"Purezza",
"Purezza",
NCC,minCC,maxCC,
NRHO,minRHO,maxRHO);
494 TH2D* h2BgO_R=
new TH2D(
"rho_cc_out",
"rho_cc_out",50,0.,50,50,-0.5,1.5);
495 TH2D* h2SigO_R=
new TH2D(
"rho_cc_out",
"rho_cc_out",50,0.,50,50,-0.5,1.5);
496 TH2D* h2BgR_C=
new TH2D(
"rho_cc_out",
"rho_cc_out",50,0.,1.2,50,0.,50);
497 TH2D* h2SigR_C=
new TH2D(
"rho_cc_out",
"rho_cc_out",50,0.,1.2,50,0.,50);
498 TH2D* h2Bg=
new TH2D(
"rho_cc_out",
"rho_cc_out",50,0.,1.2,50,-0.5,1.5);
499 TH2D* h2Sig=
new TH2D(
"rho_cc_out",
"rho_cc_out",50,0.,1.2,50,-0.5,1.5);
500 h2Bg->SetDirectory(0);
501 h2Sig->SetDirectory(0);
502 PUREZZA_S->SetDirectory(0);
518 for (
int ii=0;ii<
NRHO; ii++) {
520 for (
int ji=0;ji<
NCC; ji++) {
521 if (ii==0) cc1[ji]=0.;
528 deltacc=(maxCC-
minCC)/NCC;
531 deltarho=(maxRHO-minRHO)/NRHO;
533 for (
int ii=0;ii<
NRHO;ii++) {
534 rho1[ii]=maxRHO-(ii+1)*deltarho;
543 for (
int ji=0;ji<
NCC;ji++) {
544 cc1[ji]=(ji)*deltacc+minCC;
553 for (
int i = 0; i <(double)tTrain1->GetEntries(); i++)
555 tTrain1->GetEntry(i);
556 for (
int j=0;
j<nINP;
j++)
559 params[
j]=(double)x[
j];
562 double output=mlp->Evaluate(0,params);
570 rho_NN=(double)signal.
rho[0];
571 cc_NN=(
double)signal.
netcc[1];
575 rho_NN=(double)background.
rho[0];
576 cc_NN=(
double)background.
netcc[1];
581 if (type==1&&resto==0){
582 sigTree.GetEntry(i+q);
583 h2SigO_R->Fill(signal.
rho[0],output);
584 for (
int ii=0; ii<
NRHO;ii++){
585 if (signal.
rho[0]>=rho1[ii]) {
586 for (
int ji=0;ji<
NCC;ji++){
587 if (signal.
netcc[1]>=cc1[ji]) {
588 if (output>0.5){ pur[ii*NRHO+ji]=pur[ii*NRHO+ji]+1;
589 tot[ii*NRHO+ji]=tot[ii*NRHO+ji]+1;
595 if (output<0.1) cout<<
"output<0.1, while type=1 event_index: "<<i+q<<
" of file: "<<SIG_FILE.Data()<<endl;
596 h2SigR_C->Fill(signal.
netcc[1],signal.
rho[0]);
597 h2Sig->Fill(signal.
netcc[1],output);
599 if (type==0&&resto==0){
600 bgTree.GetEntry(p-sig_entries+i-nTrain);
601 h2BgO_R->Fill(background.
rho[0],output);
602 for (
int ii=0; ii<
NRHO;ii++){
603 for (
int ji=0;ji<
NCC;ji++){
604 if (background.
rho[0]>rho1[ii]) {
605 if (background.
netcc[1]>cc1[ji]) {
606 if (output>0.5) { tot[ii*NRHO+ji]=tot[ii*NRHO+ji]+1;
612 if (output>0.9) cout<<
"output>0.9, while type=0 event_index: "<<p-sig_entries+i-nTrain<<
" of file: "<<BG_FILE.Data()<<endl;
613 h2BgR_C->Fill(background.
netcc[1],background.
rho[0]);
614 h2Bg->Fill(background.
netcc[1],output);
621 while(output<thres0[j]&&(j>0)) j=j-1;
622 for (
int k=npunti;
k>=0;
k--){
624 if(
k<=j) FA[
k]=FA[
k]+1;}
627 if(
k<=j) TA[
k]=TA[
k]+1; }
636 while(output<thres0[j]&&(j>0)) j=j-1;
637 for (
int k=npunti;
k>=0;
k--){
639 if(
k<=j) FA1[
k]=FA1[
k]+1;}
642 if(
k<=j) TA1[
k]=TA1[
k]+1; }
644 tmedio1=tmedio1+type;
646 yy1=output*output+yy1;
659 NNoutName.ReplaceAll(
"NN/",
"NNout/NNout_");
660 TFile* f_NNout=
new TFile(NNoutName,
"RECREATE");
665 for (
int ii=0;ii<
NRHO; ii++)
for (
int ji=0;ji<
NCC; ji++) {
666 cout<<
" pur "<<pur[NRHO*ii+ji]<<
" tot "<<tot[NRHO*ii+ji]<<
" cc "<<cc1[ji]<<
" rho "<<rho1[ii];
668 if(tot[NRHO*ii+ji]>0) pur[NRHO*ii+ji]=pur[NRHO*ii+ji]/tot[NRHO*ii+ji];
669 cout<<
" pur_fin "<<pur[NRHO*ii+ji];
673 if(tot[NRHO*ii+ji]>0) PUREZZA_S->Fill(cc1[ji]+deltacc/2,rho1[ii]+deltarho/2,pur[NRHO*ii+ji]);
675 h2Bg->SetMarkerStyle(7);
676 h2Sig->SetMarkerStyle(6);
677 h2Bg->SetMarkerColor(4);
678 h2Sig->SetMarkerColor(2);
679 h2BgO_R->SetMarkerStyle(7);
680 h2SigO_R->SetMarkerStyle(6);
681 h2BgO_R->SetMarkerColor(4);
682 h2SigO_R->SetMarkerColor(2);
683 h2BgR_C->SetMarkerStyle(7);
684 h2SigR_C->SetMarkerStyle(6);
685 h2BgR_C->SetMarkerColor(4);
686 h2SigR_C->SetMarkerColor(2);
690 TCanvas *cRHO_CC_OUT=
new TCanvas(
"RHO_CC_NNOUT",
"RHO_CC_NNOUT",1200,700);
692 cRHO_CC_OUT->Divide(2,2);
693 cRHO_CC_OUT->cd(1)->SetTitle(
"OUT_CC");
694 h2Bg->GetXaxis()->SetTitle(
"cc");
695 h2Bg->GetYaxis()->SetTitle(
"NNoutput");
696 h2Bg->GetZaxis()->SetTitle(
"count");
699 cRHO_CC_OUT->cd(2)->SetTitle(
"OUT_RHO");
700 h2BgO_R->GetXaxis()->SetTitle(
"rho");
701 h2BgO_R->GetYaxis()->SetTitle(
"NNoutput");
702 h2BgO_R->GetZaxis()->SetTitle(
"count");
704 h2BgO_R->Draw(
"same");
705 cRHO_CC_OUT->cd(3)->SetTitle(
"RHO_CC");
706 h2BgR_C->GetXaxis()->SetTitle(
"cc");
707 h2BgR_C->GetYaxis()->SetTitle(
"rho");
708 h2BgR_C->GetZaxis()->SetTitle(
"count");
710 h2BgR_C->Draw(
"same");
711 cRHO_CC_OUT->cd(4)->SetTitle(
"PUREZZA");
712 PUREZZA_S->SetStats(0);
713 PUREZZA_S->GetXaxis()->SetTitle(
"cc");
714 PUREZZA_S->GetYaxis()->SetTitle(
"rho");
715 PUREZZA_S->GetZaxis()->SetTitle(
"count");
716 PUREZZA_S->Draw(
"colz");
718 TString cRHO_CC_OUTname(nomeNN);
719 TString cRHO_CC_OUTnameroot(nomeNN);
720 cRHO_CC_OUTname.ReplaceAll(
".root",
".png");
721 cRHO_CC_OUTname.ReplaceAll(
"NN/mlpNetwork",
"CC_OUT/RHO_CC_OUTgraph");
722 cRHO_CC_OUTnameroot.ReplaceAll(
"NN/mlpNetwork",
"CC_OUT/RHO_CC_OUTgraph");
723 cRHO_CC_OUT->SaveAs(cRHO_CC_OUTname.Data());
724 cRHO_CC_OUT->Print(cRHO_CC_OUTnameroot.Data());
726 tmedio1=tmedio1/nTrain;
727 ymedio1=ymedio1/nTrain;
731 tmedio=tmedio/nTrain;
732 ymedio=ymedio/nTrain;
736 cout<<
"tmedio1: "<<tmedio1<<
" ymedio1 "<<ymedio1<<
" tt1 "<<tt1<<
" yy1 "<<yy1<<
" ty1 "<<ty1<<
" entries "<<entries<<endl;
739 corr1=(ty1-nTrain*ymedio1*tmedio1)/sqrt((tt1-nTrain*tmedio1*tmedio1)*(yy1-nTrain*ymedio1*ymedio1));
740 corr=(ty-nTrain*ymedio*tmedio)/sqrt((tt-nTrain*tmedio*tmedio)*(yy-nTrain*ymedio*ymedio));
741 cout<<
"corr "<<corr<<endl;
742 cout<<
"corr1 "<<corr1<<endl;
745 for (
int k=0;
k<=npunti;
k++) {
748 TA1[
k]=(TA1[
k]/nTrain)*2;
749 TA[
k]=(TA[
k]/nTrain)*2;
751 FA1[
k]=(FA1[
k]/nTrainBg)*2;
752 FA[
k]=(FA[
k]/nTrainBg)*2;
755 cout<<
"ng "<<nf.Data()<<endl;
756 char nomefileTest[516];
759 sprintf(nomefileTest,
"thresFiles/thres_np%i_Test_onTrainSet_",npunti2);
760 nf.ReplaceAll(
"NN/mlpNetwork",nomefileTest);
761 cout<<
"nf "<<nf.Data()<<endl;
762 TFile *
gfile=
new TFile(nf.Data(),
"RECREATE");
765 TGraph* gROC1=
new TGraph(npunti+1,FA1,TA1);
766 gROC1->SetTitle(
"ROC_train(threshold)");
767 gROC1->SetMarkerStyle(7);
768 TGraph* gFA1=
new TGraph(npunti+1,thres0,FA1);
769 gFA1->SetTitle(
"False Alarm _train(threshold)");
770 gFA1->SetMarkerStyle(7);
771 TGraph* gTA1=
new TGraph(npunti+1,thres0,TA1);
772 gTA1->SetTitle(
"Efficiency _train(threshold)");
773 gTA1->SetMarkerStyle(7);
775 TGraph* gROC=
new TGraph(npunti+1,FA,TA);
776 gROC->SetTitle(
"ROC_test(threshold)");
777 gROC->SetMarkerStyle(7);
778 TGraph* gFA=
new TGraph(npunti+1,thres0,FA);
779 gFA->SetTitle(
"False Alarm _test(threshold)");
780 gFA->SetMarkerStyle(7);
781 TGraph* gTA=
new TGraph(npunti+1,thres0,TA);
782 gTA->SetTitle(
"Efficiency _test(threshold)");
783 gTA->SetMarkerStyle(7);
785 TCanvas *cROC=
new TCanvas(
"ROC_graph",
"ROC_graph");
787 cROC->cd(2)->SetLogx();
791 cROC->cd(6)->SetLogy();
794 cROC->cd(4)->SetLogy();
796 cROC->cd(1)->SetLogx();
800 cROC->cd(5)->SetLogy();
803 cROC->cd(3)->SetLogy();
809 CANV_NAME.ReplaceAll(
"NN/mlpNetwork",
"TRAIN_GRAPHS/ROC");
810 CANV_NAMEroot.ReplaceAll(
"NN/mlpNetwork",
"TRAIN_GRAPHS/ROC");
811 CANV_NAME.ReplaceAll(
".root",
".png");
812 cROC->SaveAs(CANV_NAME.Data());
813 cROC->Print(CANV_NAMEroot.Data());
816 TTree *ThTree=
new TTree(
"ROC",
"ROC");
822 sprintf(FAlabel1,
"FalseAlarm_train[%i]/F",npunti);
823 sprintf(TAlabel1,
"TrueAlarm_train[%i]/F",npunti);
824 sprintf(FAlabel,
"FalseAlarm_test[%i]/F",npunti);
825 sprintf(TAlabel,
"TrueAlarm_test[%i]/F",npunti);
826 sprintf(thlabel,
"thresholds[%i]/F",npunti);
828 ThTree->Branch(
"FalseAlarm_test",&FA,FAlabel);
829 ThTree->Branch(
"FalseAlarm_train",&FA1,FAlabel1);
831 ThTree->Branch(
"Efficiency_train",&TA1,TAlabel1);
832 ThTree->Branch(
"Efficiency_test",&TA,TAlabel);
834 ThTree->Branch(
"thresholds",&thres0,thlabel);
835 ThTree->Branch(
"correlation_train",&corr1,
"correlation_train/D");
836 ThTree->Branch(
"correlation_test",&corr,
"correlation_test/D");
839 ThTree->Branch(
"#points",&u,
"#points/I");
856 TFile* fOriginal=TFile::Open(ORIGINAL_FILE.Data());
857 TTree* tOriginal=(TTree*)fOriginal->Get(
"nnTree");
859 if((choice->size())>(tOriginal->GetEntries())){cout<<
"Error:startB+nTrainB>Entries"<<endl;
865 tOriginal->SetBranchAddress(
"#inputs",&ninp);
866 tOriginal->GetEntry(0);
869 int const NDIM=sqrt(nINP);
872 TTree*
t=
new TTree(
"nnTree",
"nnTree");
875 tOriginal->SetBranchAddress(
"type",&type);
876 t->Branch(
"type",&type,
"type/I");
879 char xlabel[nINP][16];
880 char xllabel[nINP][16];
883 char wlabel[nINP][16];
884 char wllabel[nINP][16];
887 tOriginal->SetBranchAddress(
"w",&w);
888 t->Branch(
"w",&w,
"w/F");
893 char SDlabels[nINP][16];
894 char SDllabels[nINP][16];
896 char RMSlabels[nINP][16];
897 char RMSllabels[nINP][16];
898 float averages[nINP];
899 char averagelabels[nINP][16];
900 char averagellabels[nINP][16];
902 char SDlabelb[nINP][16];
903 char SDllabelb[nINP][16];
905 char RMSlabelb[nINP][16];
906 char RMSllabelb[nINP][16];
907 float averageb[nINP];
908 char averagelabelb[nINP][16];
909 char averagellabelb[nINP][16];
911 char SDlabel[nINP][16];
912 char SDllabel[nINP][16];
914 char RMSlabel[nINP][16];
915 char RMSllabel[nINP][16];
917 char averagelabel[nINP][16];
918 char averagellabel[nINP][16];
920 TTree *tTrainTest=
new TTree(
"trainTEST",
"trainTEST");
923 for (
int i=0;
i<nINP;
i++){
936 sprintf(xllabel[i],
"%s/F",xlabel[i]);
937 tOriginal->SetBranchAddress(xlabel[i],&x[i]);
938 t->Branch(xlabel[i],&x[i],xllabel[i]);
941 sprintf(wllabel[i],
"%s/F",wlabel[i]);
942 tOriginal->SetBranchAddress(wlabel[i],&w[i]);
943 t->Branch(wlabel[i],w[i],wllabel[i]);
950 for (
int k=0;
k<choice->size();
k++){
952 tOriginal->GetEntry((*choice)[
k]);
954 for (
int i=0;
i<nINP;
i++){
955 RMS[
i]=RMS[
i]+x[
i]*x[
i];
956 average[
i]=average[
i]+x[
i];
958 RMSs[
i]=RMSs[
i]+x[
i]*x[
i];
959 averages[
i]=averages[
i]+x[
i];
962 RMSb[
i]=RMSb[
i]+x[
i]*x[
i];
963 averageb[
i]=averageb[
i]+x[
i];
967 for (
int u=0;u<
k;u++)
if( (*choice)[u]==(*choice)[k]) {cout<<
"Error:same event taken 2 times"<<
"u "<<u<<
" choise "<<(*choice)[u]<<endl;
exit(0);}
978 int Ntest=choice->size();
984 TH2D *RMShs=
new TH2D(
"RMShs",
"RMShs",NDIM,0,NDIM,NDIM,0,NDIM);
985 TH2D *AVhs=
new TH2D(
"AVhs",
"Avhs",NDIM,0,NDIM,NDIM,0,NDIM);
986 TH2D *SDhs=
new TH2D(
"SDhs",
"SDhs",NDIM,0,NDIM,NDIM,0,NDIM);
987 TH2D *RMShb=
new TH2D(
"RMShb",
"RMShb",NDIM,0,NDIM,NDIM,0,NDIM);
988 TH2D *AVhb=
new TH2D(
"AVhb",
"Avhb",NDIM,0,NDIM,NDIM,0,NDIM);
989 TH2D *SDhb=
new TH2D(
"SDhb",
"SDhb",NDIM,0,NDIM,NDIM,0,NDIM);
990 TH2D *RMSh=
new TH2D(
"RMSh",
"RMSh",NDIM,0,NDIM,NDIM,0,NDIM);
991 TH2D *AVh=
new TH2D(
"AVh",
"Avh",NDIM,0,NDIM,NDIM,0,NDIM);
992 TH2D *SDh=
new TH2D(
"SDh",
"SDh",NDIM,0,NDIM,NDIM,0,NDIM);
1008 for (
int i=0;
i<nINP;
i++){
1009 RMSs[
i]=RMSs[
i]/Ntest*2;
1010 averages[
i]=averages[
i]/Ntest*2;
1011 SDs[
i]=RMSs[
i]-pow(averages[
i],2);
1012 SDs[
i]=pow(SDs[i],0.5);
1013 RMSs[
i]=pow(RMSs[i],0.5);
1015 cout <<
"SIGNAL: " << averages[
i] <<
" " << RMSs[
i] <<
" " << SDs[
i] << endl;
1017 RMSb[
i]=RMSb[
i]/Ntest*2;
1018 averageb[
i]=averageb[
i]/Ntest*2;
1019 SDb[
i]=RMSb[
i]-pow(averageb[i],2);
1020 SDb[
i]=pow(SDb[i],0.5);
1021 RMSb[
i]=pow(RMSb[i],0.5);
1023 cout <<
"BKG: " << averageb[
i] <<
" " << RMSb[
i] <<
" " << SDb[
i] << endl;
1025 RMS[
i]=RMS[
i]/Ntest;
1026 average[
i]=average[
i]/Ntest;
1027 SD[
i]=RMS[
i]-pow(average[i],2);
1028 SD[
i]=pow(SD[i],0.5);
1029 RMS[
i]=pow(RMS[i],0.5);
1031 cout <<
"ALL: " << average[
i] <<
" " << RMS[
i] <<
" " << SD[
i] << endl;
1033 sprintf(SDlabels[i],
"SDs%i",i+1);
1034 sprintf(SDllabels[i],
"%s/F",SDlabels[i]);
1035 tTrainTest->Branch(SDlabels[i],&SDs[i],SDllabels[i]);
1036 sprintf(RMSlabels[i],
"RMSs%i",i+1);
1037 sprintf(RMSllabels[i],
"%s/F",RMSlabels[i]);
1038 tTrainTest->Branch(RMSlabels[i],&RMSs[i],RMSllabels[i]);
1039 sprintf(averagelabels[i],
"averages%i",i+1);
1040 sprintf(averagellabels[i],
"%s/F",averagelabels[i]);
1041 tTrainTest->Branch(averagelabels[i],&averages[i],averagellabels[i]);
1042 sprintf(SDlabelb[i],
"SDb%i",i+1);
1043 sprintf(SDllabelb[i],
"%s/F",SDlabelb[i]);
1044 tTrainTest->Branch(SDlabelb[i],&SDb[i],SDllabelb[i]);
1045 sprintf(RMSlabelb[i],
"RMSb%i",i+1);
1046 sprintf(RMSllabelb[i],
"%s/F",RMSlabelb[i]);
1047 tTrainTest->Branch(RMSlabelb[i],&RMSb[i],RMSllabelb[i]);
1048 sprintf(averagelabelb[i],
"averageb%i",i+1);
1049 sprintf(averagellabelb[i],
"%s/F",averagelabelb[i]);
1050 tTrainTest->Branch(averagelabelb[i],&averageb[i],averagellabelb[i]);
1051 sprintf(SDlabel[i],
"SD%i",i+1);
1052 sprintf(SDllabel[i],
"%s/F",SDlabel[i]);
1053 tTrainTest->Branch(SDlabel[i],&SD[i],SDllabel[i]);
1054 sprintf(RMSlabel[i],
"RMS%i",i+1);
1055 sprintf(RMSllabel[i],
"%s/F",RMSlabel[i]);
1056 tTrainTest->Branch(RMSlabel[i],&RMS[i],RMSllabel[i]);
1057 sprintf(averagelabel[i],
"average%i",i+1);
1058 sprintf(averagellabel[i],
"%s/F",averagelabel[i]);
1059 tTrainTest->Branch(averagelabel[i],&average[i],averagellabel[i]);
1069 RMShs->Fill(ti,fi,RMSs[i]);
1070 AVhs->Fill(ti,fi,averages[i]);
1071 SDhs->Fill(ti,fi,SDs[i]);
1072 RMShb->Fill(ti,fi,RMSb[i]);
1073 AVhb->Fill(ti,fi,averageb[i]);
1074 SDhb->Fill(ti,fi,SDb[i]);
1075 RMSh->Fill(ti,fi,RMS[i]);
1076 AVh->Fill(ti,fi,average[i]);
1077 SDh->Fill(ti,fi,SD[i]);
1082 TCanvas *cProp=
new TCanvas (
"TrainSet_Properties",
"TrainSet_Properties",0,0,900,600);
1085 RMSh->SetTitle(
"RMS");
1088 AVh->SetTitle(
"Average");
1091 SDh->SetTitle(
"SD");
1094 RMShs->SetTitle(
"RMS_s");
1095 RMShs->Draw(
"COLZ");
1097 AVhs->SetTitle(
"Average_s");
1100 SDhs->SetTitle(
"SD_s");
1103 RMShb->SetTitle(
"RMS_b");
1104 RMShb->Draw(
"COLZ");
1106 AVhb->SetTitle(
"Average_b");
1109 SDhb->SetTitle(
"SD_b");
1113 TString Prop_nameroot(IDname);
1114 Prop_name.ReplaceAll(
".root",
"Prop.png");
1115 Prop_nameroot.ReplaceAll(
".root",
"Prop.root");
1116 cProp->SaveAs(Prop_name.Data());
1117 cProp->Print(Prop_nameroot.Data());
1120 int ent=t->GetEntries();
1121 if (choice->size()!=ent) cout<<
"Error in Tree dimension: Entries new tree="<<t->GetEntries()<<
" vector->size"<<choice->size()<<endl;
1126 NOME_FILE.ReplaceAll(
"PropertyGraphs/mlpNetwork",
"selectTREE/TreeTrain");
1127 TFile*
ofile=
new TFile(NOME_FILE.Data(),
"RECREATE");
1128 t->SetDirectory(ofile);
1137 TFile* TrainTest=
new TFile(IDname.Data(),
"RECREATE");
1138 tTrainTest->Write();
1141 cout<<NOME_FILE.Data()<<endl;
wavearray< double > t(hp.size())
void cwbANN_purity_BoS(int nTrain, int nTrainBg, TString option, TString TREE_FILE, int q, int p, double rm=0., double cm=0., int lm=5, Int_t nepoch=700)
Float_t * rho
biased null statistics
TString select7Train_non_es(TString ORIGINAL_FILE, std::vector< int > *choice, TString IDname)
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
cout<< "Injected signals: "<< mdc.GetEntries()<< endl;cout<< "Injected signals in histogram factor_events_inj: "<< NEVTS<< endl;float myifar, ecor, m1, m2, netcc[3], neted, penalty;float rho[2];float chirp[6];float range[2];float frequency[2];float iSNR[3], sSNR[3];sim.SetBranchAddress("mass", mass);sim.SetBranchAddress("factor",&factor);sim.SetBranchAddress("range", range);sim.SetBranchAddress("chirp", chirp);sim.SetBranchAddress("rho", rho);sim.SetBranchAddress("netcc", netcc);sim.SetBranchAddress("neted",&neted);sim.SetBranchAddress("ifar",&myifar);sim.SetBranchAddress("ecor",&ecor);sim.SetBranchAddress("penalty",&penalty);sim.SetBranchAddress("time", mytime);sim.SetBranchAddress("iSNR", iSNR);sim.SetBranchAddress("sSNR", sSNR);sim.SetBranchAddress("spin", spin);sim.SetBranchAddress("frequency", frequency);float **volume=new float *[NBINS_mass1];float **volume_first_shell=new float *[NBINS_mass1];float **radius=new float *[NBINS_mass1];float **error_volume=new float *[NBINS_mass1];float **error_volume_first_shell=new float *[NBINS_mass1];float **error_radius=new float *[NBINS_mass1];for(int i=0;i< NBINS_mass1;i++){volume[i]=new float[NBINS_mass2];volume_first_shell[i]=new float[NBINS_mass2];radius[i]=new float[NBINS_mass2];error_volume[i]=new float[NBINS_mass2];error_volume_first_shell[i]=new float[NBINS_mass2];error_radius[i]=new float[NBINS_mass2];for(int j=0;j< NBINS_mass2;j++){volume[i][j]=0.;volume_first_shell[i][j]=0.;radius[i][j]=0.;error_volume[i][j]=0.;error_volume_first_shell[i][j]=0.;error_radius[i][j]=0.;}}float **spin_mtot_volume=new float *[NBINS_MTOT+1];float **spin_mtot_radius=new float *[NBINS_MTOT+1];float **error_spin_mtot_volume=new float *[NBINS_MTOT+1];float **error_spin_mtot_radius=new float *[NBINS_MTOT+1];for(int i=0;i< NBINS_MTOT+1;i++){spin_mtot_volume[i]=new float[NBINS_SPIN+1];spin_mtot_radius[i]=new float[NBINS_SPIN+1];error_spin_mtot_volume[i]=new float[NBINS_SPIN+1];error_spin_mtot_radius[i]=new float[NBINS_SPIN+1];for(int j=0;j< NBINS_SPIN+1;j++){spin_mtot_volume[i][j]=0.;error_spin_mtot_volume[i][j]=0.;spin_mtot_radius[i][j]=0.;error_spin_mtot_radius[i][j]=0.;}}char fname[1024];sprintf(fname,"%s/recovered_signals.txt", netdir);ofstream fev;fev.open(fname, std::ofstream::out);sprintf(line,"#GPS@L1 FAR[Hz] eFAR[Hz] Pval ""ePval factor rho frequency iSNR sSNR \n");fev<< line<< endl;ofstream *fev_single=new ofstream[nfactor];for(int l=1;l< nfactor+1;l++){sprintf(fname,"%s/recovered_signals_%d.txt", netdir, l);fev_single[l-1].open(fname, std::ofstream::out);fev_single[l-1]<< line<< endl;}double Vrho[RHO_NBINS], eVrho[RHO_NBINS], Rrho[RHO_NBINS], eRrho[RHO_NBINS], Trho[RHO_NBINS];for(int i=0;i< RHO_NBINS;i++){Vrho[i]=0.;eVrho[i]=0.;Rrho[i]=0.;eRrho[i]=0.;Trho[i]=RHO_MIN+i *RHO_BIN;}double dV, dV1, dV_spin_mtot, nevts, internal_volume;int nT;int countv=0;int cnt=0;int cnt2=0;int cntfreq=0;bool bcut=false;double liveTot=sim.GetMaximum("ifar");double BKG_LIVETIME_yr=liveTot/CYS;double BKG_LIVETIME_Myr=BKG_LIVETIME_yr/(1.e6);cout.precision(14);cout<< "Total live time ---> background
Float_t * netcc
effective correlated SNR
sprintf(tfres,"(1/%g)x(%g) (sec)x(Hz)", 2 *df, df)