// Ottimizza Significanza Statistica con un taglio sulla variabile var2 #include #include #include #include void Ottim_Signif_1D() { gROOT->Reset(); gStyle->SetHistLineColor(4); TFile *f = new TFile("mva1_sample.root"); TTree* signalTree = (TTree*)f->Get("signal"); TTree* bkgTree = (TTree*)f->Get("bkg"); Double_t var1, var2, eff_s,rej_b, FOM, vcut, vcut0 = 0.05; Int_t i, ns, nbkg, ntot; Double_t varMin=0.0, varMax = 1.1; signalTree->SetBranchAddress("var1",&var1); signalTree->SetBranchAddress("var2",&var2); bkgTree->SetBranchAddress("var1",&var1); bkgTree->SetBranchAddress("var2",&var2); Int_t n_sigEntries = (Int_t)signalTree->GetEntries(); cout << "Num. of signal entries: " << n_sigEntries << endl; Int_t n_bkgEntries = (Int_t)bkgTree->GetEntries(); cout << "Num. of background entries: " << n_bkgEntries << endl; TCanvas* c1= new TCanvas("c1","Istogrammi",1); c1->Divide(2); TPad* c1_1 = c1->cd(1); c1_1->SetLogy(); TH1F* h1 = new TH1F ("h1", "var1", 50,0.0, 1.4); TH1F* h1s = new TH1F ("h1s", "var2", 50,0.0, 1.4); h1->SetLineColor(1); h1->SetLineStyle(1); h1->SetStats(kFALSE); h1->GetXaxis()->SetTitle("var1"); h1->GetYaxis()->SetTitle("Events/bin"); signalTree-> Draw("var1>>h1"); h1s->SetLineColor(2); h1s->TH1F::SetLineStyle(2); bkgTree-> Draw("var1>>h1s", "","SAME"); TLegend *leg = new TLegend(0.75, 0.75, 0.89, 0.89); leg -> AddEntry(h1,"Signal"); leg->AddEntry(h1s, "Bkg"); leg->SetFillColor(0); leg->SetTextSize(0.04); leg->Draw(); c1->cd(2); TH1F* h2 = new TH1F ("h2", "va2", 50,0.0, 1.1); TH1F* h2s = new TH1F ("h2s", "var2", 50,0.0, 1.1); h2->SetLineColor(2); h2->SetLineStyle(2); h2->SetStats(kFALSE); h2->GetXaxis()->SetTitle("var2"); h2->GetYaxis()->SetTitle("Events/bin"); bkgTree-> Draw("var2>>h2"); h2s->SetLineColor(1); h2s->TH1F::SetLineStyle(1); signalTree-> Draw("var2>>h2s","","SAME"); TLegend *leg2 = new TLegend(0.75, 0.75, 0.89, 0.89); leg2 -> AddEntry(h2s,"Signal"); leg2->AddEntry(h2, "Bkg"); leg2->SetFillColor(0); leg2->SetTextSize(0.04); leg2->Draw(); //Optimizing signal statistical significance TCanvas* c2 = new TCanvas("c2","eff_s",200,30,700,500); TCanvas* c3 = new TCanvas("c3","rej_b",200,30,700,500); TCanvas* c4 = new TCanvas("c4","FOM",220,50,700,500); TCanvas* c5 = new TCanvas("c5","ROC",240,70,700,500); TGraph *effs = new TGraph(); TGraph *effss = new TGraph(); TGraph *bkgRej = new TGraph(); TGraph *FOMg = new TGraph(); TGraph *ROC = new TGraph(); const Int_t ncuts = int((varMax-varMin)/vcut0); for (i=0; i Draw("var2", (buffer.str()) .c_str()); nbkg = bkgTree-> Draw("var2", (buffer.str()) .c_str()); eff_s = Double_t(ns)/Double_t(n_sigEntries); effs->SetPoint(i, vcut, eff_s); effss->SetPoint(i, vcut, eff_s); rej_b = (Double_t(n_bkgEntries) -Double_t(nbkg))/Double_t(n_bkgEntries); bkgRej -> SetPoint(i, vcut, rej_b); ntot = ns + nbkg; if(ntot<1) ntot=1; if(nbkg <1) nbkg=1; FOM = Double_t (ns)/sqrt(ntot); // FOM = Double_t(ns)/sqrt(nbkg); FOMg-> SetPoint(i, vcut, FOM); ROC -> SetPoint(i, eff_s, rej_b); vcut = (i+1)*vcut0; } c2 ->cd(); effs ->SetTitle("Signal "); effs->GetXaxis()->SetTitle("var2"); effs->GetYaxis()->SetTitle("Signal Efficiency"); effs ->SetFillColor(35); effs ->SetMarkerStyle(21); effs->SetMarkerColor(4); effs->Draw("APL"); c3 ->cd(); bkgRej->GetXaxis()->SetTitle("var2"); bkgRej->GetYaxis()->SetTitle("Bkg Rejection Efficiency"); bkgRej ->SetFillColor(35); bkgRej ->SetTitle("Background Rejection"); bkgRej ->SetMarkerStyle(21); bkgRej->SetMarkerColor(2); bkgRej->Draw("APL"); c4 ->cd(); FOMg->GetXaxis()->SetTitle("var2"); FOMg->GetYaxis()->SetTitle("FOM"); FOMg ->SetFillColor(35); FOMg->SetMarkerColor(3); FOMg ->SetTitle("FOM"); FOMg ->SetMarkerStyle(21); FOMg->Draw("APC"); c5 ->cd(); ROC->GetXaxis()->SetTitle("var2"); ROC->GetYaxis()->SetTitle("ROC"); ROC ->SetFillColor(35); ROC ->SetTitle("ROC"); ROC ->SetMarkerStyle(21); ROC->SetMarkerColor(3); ROC->Draw("APC"); TCanvas* all = new TCanvas ("all","All in one"); all->Divide(2,2); all_1->cd(); effss->GetYaxis()->SetTitle("Efficiency"); effss ->SetTitle("Signal Efficiency and Background Rejection"); effss ->SetMarkerStyle(21); effss->SetMarkerColor(1); effss->Draw("APL"); bkgRej ->SetFillColor(35); bkgRej ->SetMarkerStyle(21); bkgRej->SetLineColor(2); bkgRej->SetMarkerColor(2); bkgRej -> Draw("PL"); leg = new TLegend(0.60, 0.80, 0.88, 0.88); leg->SetHeader("Black=S; Red=B"); leg->SetTextSize(0.05); leg->Draw(); all_2->cd(); FOMg->SetMarkerColor(3); FOMg->Draw("APL"); all_3->cd(); ROC->GetYaxis()->SetTitle("Background Rejection"); ROC->GetXaxis()->SetTitle("Signal Efficiency"); ROC->SetMarkerColor(4); ROC->Draw("APL"); }