// Modes: linear or log plotHistogram(const char* canvas, const char* mode, const char* title, double xlo, double xhi, int nbin, double* sig, double* sigerr, double* bgr, double* bgrerr) { TCanvas *c = new TCanvas(canvas,"SPR Classifier Output",200,10,600,400); gStyle->SetPalette(1); TLegend *leg = new TLegend(0.1,0.85,0.5,1.,"Classifier Output","NDC"); double dx = (xhi-xlo) / nbin; TH1D* hs = new TH1D("signal", title,nbin,xlo,xhi); TH1D* hb = new TH1D("background",title,nbin,xlo,xhi); leg->AddEntry(hs,"Signal","L"); leg->AddEntry(hb,"Background","L"); for( int i=0;i<nbin;i++ ) { hs->SetBinContent(i+1,sig[i]); hs->SetBinError(i+1,sigerr[i]); hb->SetBinContent(i+1,bgr[i]); hb->SetBinError(i+1,bgrerr[i]); } TPad* pad = new TPad("pad","pad",0,0,1,1); if( strcmp(mode,"log") == 0 ) pad->SetLogy(1); pad->Draw(); pad->cd(); hs->SetLineColor(2); hs->SetLineWidth(3); hb->SetLineColor(4); hb->SetLineWidth(3); hb->Draw(); hs->Draw("same"); leg->Draw(); }
void plotter::draw_output_pseudo(TH1* output_, TH1D* pseudotruth_, TH1D* mctruth_, bool norm, TString file_name){ TH1* output = (TH1*) output_->Clone("output"); TH1D* pseudotruth = (TH1D*) pseudotruth_->Clone("pseudotruth"); TH1D* mctruth = (TH1D*) mctruth_->Clone("mctruth"); double ymax_temp = 0; if(pseudotruth->GetMaximum() > ymax_temp) ymax_temp = pseudotruth->GetMaximum(); if(mctruth->GetMaximum() > ymax_temp) ymax_temp = mctruth->GetMaximum(); if(output->GetMaximum() > ymax_temp) ymax_temp = output->GetMaximum(); double ymax = 1.5 * ymax_temp; pseudotruth->SetTitle(" "); pseudotruth->GetYaxis()->SetRangeUser(0., ymax); pseudotruth->GetXaxis()->SetTitle("Leading-jet mass [GeV]"); if(norm) pseudotruth->GetYaxis()->SetTitle("#frac{1}{#sigma} #frac{d#sigma}{dm_{jet}} [#frac{1}{GeV}]"); else pseudotruth->GetYaxis()->SetTitle("events"); pseudotruth->GetYaxis()->SetTitleOffset(1.1); pseudotruth->GetXaxis()->SetTitleOffset(0.9); pseudotruth->GetYaxis()->SetTitleSize(0.05); pseudotruth->GetXaxis()->SetTitleSize(0.05); pseudotruth->GetYaxis()->SetNdivisions(505); pseudotruth->SetLineWidth(4); pseudotruth->SetLineColor(kRed); mctruth->SetLineWidth(3); mctruth->SetLineStyle(2); mctruth->SetLineColor(kBlue); output->SetLineColor(kBlack); output->SetMarkerColor(kBlack); output->SetMarkerStyle(8); output->SetMarkerSize(1); TCanvas *c= new TCanvas("Particle Level","",600,600); gPad->SetLeftMargin(0.15); TGaxis::SetMaxDigits(3); pseudotruth->Draw("HIST SAME"); mctruth->Draw("HIST SAME"); output->Draw("E1 SAME"); TLegend *l; if(mctruth->GetSize() > 20) l=new TLegend(0.2,0.6,0.4,0.85); else l=new TLegend(0.55,0.6,0.85,0.85); l->SetBorderSize(0); l->SetFillStyle(0); l->AddEntry(output,"pseudo data","pl"); l->AddEntry(pseudotruth,"pseudo data truth","pl"); l->AddEntry(mctruth,"MC truth","pl"); l->SetTextSize(0.04); l->Draw(); gPad->RedrawAxis(); c->SaveAs(directory + file_name + ".pdf"); delete c; }
void plotTurnOn(TTree* inttree, TString triggerpass, TString variable, TString varname, TString varlatex) { if(varname=="vtxprob") { BIN_MIN = 0; BIN_MAX = 1; } else if(varname=="ffls3d") { BIN_MIN = 0; BIN_MAX = 50; } else if(varname=="cosalpha") { BIN_MIN = 0.9; BIN_MAX = 1; } TH1D* hAll = new TH1D(Form("h%s_%s_All",triggerpass.Data(),varname.Data()),Form(";%s;Probability",varlatex.Data()),BIN_NUM,BIN_MIN,BIN_MAX); inttree->Project(Form("h%s_%s_All",triggerpass.Data(),varname.Data()),variable,prefilter); TH1D* hMBseed = new TH1D(Form("h%s_%s_MBseed",triggerpass.Data(),varname.Data()),Form(";%s;Probability",varlatex.Data()),BIN_NUM,BIN_MIN,BIN_MAX); inttree->Project(Form("h%s_%s_MBseed",triggerpass.Data(),varname.Data()),variable,Form("%s&&%s",prefilter.Data(),triggerpass.Data())); //cout<<hAll->Integral()<<endl; hAll->Scale(1./hAll->Integral()); hMBseed->Scale(1./hMBseed->Integral()); hAll->SetStats(0); hMBseed->SetStats(0); hAll->SetMaximum(hMBseed->GetMaximum()*1.3); hAll->SetLineWidth(2); hAll->SetLineColor(kBlue-7); hAll->SetFillColor(kBlue-7); hAll->SetFillStyle(3001); hMBseed->SetLineWidth(2); hMBseed->SetLineColor(kRed); hMBseed->SetFillColor(kRed); hMBseed->SetFillStyle(3004); TCanvas* c = new TCanvas(Form("c%s_%s",triggerpass.Data(),varname.Data()),"",500,500); hAll->Draw(); hMBseed->Draw("same"); TLatex* tex = new TLatex(0.18,0.96,triggerpass); tex->SetNDC(); tex->SetTextFont(42); tex->SetTextSize(0.04); tex->Draw(); TLegend* leg = new TLegend(0.60,0.82,0.92,0.93); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->AddEntry(hAll,"all","f"); leg->AddEntry(hMBseed,"pass trigger","f"); leg->Draw(); c->SaveAs(Form("triggerturnonPlots/pthat%.0f/c%s_%s.pdf",pthat,triggerpass.Data(),varname.Data())); }
void savePlots2(const std::string& canvasName, TH1D& dataPlot, TH1D& fitPlot, TH1D& signalPlot, TH1D& bkgPlot) { TCanvas c(canvasName.c_str(), canvasName.c_str()) ; TPad mainPad("mainPad", "mainPad", 0., 0.2, 1., 1.) ; mainPad.Draw() ; TPad pullPad("pullPad", "pullPad", 0., 0., 1., 0.2) ; pullPad.Draw() ; mainPad.cd() ; dataPlot.SetStats(true) ; //dataPlot.SetOptStat(111111111); dataPlot.SetLineWidth(2) ; dataPlot.Draw() ; fitPlot.SetLineWidth(2) ; fitPlot.SetLineColor(kBlue) ; fitPlot.Draw("same") ; signalPlot.SetLineWidth(2) ; signalPlot.SetLineColor(kGreen) ; signalPlot.Draw("same") ; bkgPlot.SetLineColor(kRed) ; bkgPlot.SetLineWidth(2) ; bkgPlot.Draw("same") ; TLegend leg(0.6, 0.7, 0.9, 0.9) ; leg.AddEntry(&dataPlot, "Data") ; leg.AddEntry(&fitPlot, "Fit") ; leg.AddEntry(&signalPlot, "Signal") ; leg.AddEntry(&bkgPlot, "Background") ; leg.SetFillStyle(0) ; leg.SetBorderSize(0) ; leg.Draw() ; pullPad.cd() ; pullPad.SetGridy() ; TH1D* h_residuals(NULL), *h_pulls(NULL), *h_pullDistribution(NULL) ; FitterTools::makePullPlot(dataPlot, fitPlot, h_residuals, h_pulls, h_pullDistribution) ; h_pulls->Draw() ; c.Write() ; h_pulls->Write() ; delete h_pulls ; h_residuals->Write() ; delete h_residuals ; h_pullDistribution->Write() ; delete h_pullDistribution ; dataPlot.Write() ; fitPlot.Write() ; }
void vertex_distribution_dataMC() { bool print = false; TFile *file0 = TFile::Open("results/RecoRoutines_W-selection_WJetsMGZ238PU.root"); TFile *file1 = TFile::Open("results/RecoRoutines_W-selection_dataskimnov4rereco_newJetColl.root"); TCanvas * canvas = makeCanvas("vertexDistribution_dataMC"); TH1D * mc = (TH1D*)file0->Get("RECO_PolPlots_50toinf/RECO_NumVerticesPerEvent"); TH1D * data = (TH1D*)file1->Get("RECO_PolPlots_50toinf/RECO_NumVerticesPerEvent"); mc->GetXaxis()->SetTitle("Vertex Multiplicity"); mc->GetXaxis()->SetTitleSize(0.06); mc->GetXaxis()->SetLabelOffset(0.015); mc->GetXaxis()->SetTitleOffset(1.2); mc->GetXaxis()->SetRangeUser(0,10); mc->GetYaxis()->SetRangeUser(0,0.35); mc->GetYaxis()->SetTitle("Normalised"); mc->GetYaxis()->SetTitleSize(0.06); mc->GetYaxis()->SetTitleOffset(0.85); mc->SetLineColor(kRed); data->SetLineColor(kBlack); mc->SetLineWidth(4); mc->SetLineStyle(2); data->SetLineWidth(4); data->SetLineStyle(1); leg = new TLegend(0.6426174,0.8074324,0.9010067,0.9273649,NULL,"brNDC"); leg->AddEntry(mc,"MC","l"); leg->AddEntry(data,"Data","l"); leg->SetFillColor(kWhite); leg->SetBorderSize(0); leg->SetTextFont(62); canvas->cd(); mc->DrawNormalized("h"); data->DrawNormalized("sameh"); leg->DrawClone(); if(print) { canvas->Write(); } file1->Close(); file0->Close(); return; }
void plotter::draw_bias(TH1* output_, TH1D* truth_, TH1* bias_, TString file_name){ TH1D* bias = (TH1D*) bias_->Clone("bias"); TH1D* truth = (TH1D*) truth_->Clone("truth"); TH1D* output = (TH1D*) output_->Clone("output"); double ymax_temp = 0; if(truth->GetMaximum() > ymax_temp) ymax_temp = truth->GetMaximum(); if(bias->GetMaximum() > ymax_temp) ymax_temp = bias->GetMaximum(); if(output->GetMaximum() > ymax_temp) ymax_temp = output->GetMaximum(); double ymax = 1.5 * ymax_temp; TCanvas *c= new TCanvas("Bias Distribution","",600,600); TGaxis::SetMaxDigits(3); gPad->SetLeftMargin(0.15); truth->SetTitle(file_name); truth->GetYaxis()->SetRangeUser(0., ymax); truth->GetXaxis()->SetTitle("Leading-jet mass [GeV]"); truth->GetYaxis()->SetTitle("events"); truth->GetYaxis()->SetTitleOffset(1.1); truth->GetXaxis()->SetTitleOffset(0.9); truth->GetYaxis()->SetTitleSize(0.05); truth->GetXaxis()->SetTitleSize(0.05); truth->GetYaxis()->SetNdivisions(505); truth->SetLineWidth(4); truth->SetLineColor(kRed); bias->SetLineWidth(4); bias->SetLineColor(kAzure+7); output->SetLineColor(kBlack); output->SetMarkerColor(kBlack); output->SetMarkerStyle(8); output->SetMarkerSize(1); truth->Draw("HIST SAME"); bias->Draw("HIST SAME"); output->Draw("E1 SAME"); TLegend *l=new TLegend(0.55,0.6,0.85,0.85); l->SetBorderSize(0); l->SetFillStyle(0); l->AddEntry(output,"unfolded result","pl"); l->AddEntry(truth,"truth","pl"); l->AddEntry(bias,"bias distribution","pl"); l->SetTextSize(0.04); l->Draw(); gPad->RedrawAxis(); c->SaveAs(directory + file_name + ".pdf"); delete c; }
void mc2ibd_R2(TChain *tMC, TFile *fBgnd, TCanvas *cv) { char str[1024]; TLatex *txt = new TLatex(); TH1D *hExp = (TH1D *) fBgnd->Get("hR2A-diff"); if (!hExp) { printf("Histogram hR2A-diff not found in %s\n", fBgnd->GetName()); return; } hExp->SetTitle("Distance between positron and neutron, 3D case;cm;Events/4cm"); hExp->SetLineColor(kBlack); hExp->SetLineWidth(3); gROOT->cd(); TH1D *hMC = new TH1D("hR2MC", "Distance between positron and neutron, 3D case (MC);cm;Events/4cm", 40, 0, 160); hMC->SetLineColor(kBlue); tMC->Project(hMC->GetName(), "Distance", cX && cY && cZ && cRXY && c20 && cGamma && cGammaMax && cPe && cN); hMC->Sumw2(); hMC->Scale(hExp->Integral() / hMC->Integral()); cv->Clear(); hExp->DrawCopy(); hMC->Draw("hist,same"); TLegend *lg = new TLegend(0.65, 0.8, 0.89, 0.89); lg->AddEntry(hExp, "IBD", "LE"); lg->AddEntry(hMC, "MC", "L"); lg->Draw(); }
TH1D* returnRelDiff(TH1D* h, TH1D* b, TString name) { TH1D* hRelDiff = new TH1D(name, "", h->GetNbinsX(), h->GetXaxis()->GetXmin(), h->GetXaxis()->GetXmax()); hRelDiff->SetLineColor(h->GetLineColor()); hRelDiff->SetLineStyle(h->GetLineStyle()); hRelDiff->SetLineWidth(h->GetLineWidth()); hRelDiff->GetYaxis()->SetTitleOffset(0.42); hRelDiff->GetYaxis()->SetTitleSize(0.13); hRelDiff->GetYaxis()->SetLabelSize(0.10); hRelDiff->GetXaxis()->SetTitleOffset(1.2); hRelDiff->GetXaxis()->SetTitleSize(0.13); hRelDiff->GetXaxis()->SetLabelSize(0.12); //hRelDiff->GetXaxis()->CenterTitle(); hRelDiff->GetYaxis()->CenterTitle(); hRelDiff->GetYaxis()->SetNdivisions(303,kTRUE); // (mc-data)/mc, uncertainty is √data for (Int_t i=1; i<h->GetNbinsX()+1; i++) { Double_t y = b->GetBinContent(i); Double_t val = h->GetBinContent(i) - y; if (y!=0) { hRelDiff->SetBinContent(i, val/h->GetBinContent(i)); hRelDiff->SetBinError(i,TMath::Sqrt(b->GetBinContent(i))/h->GetBinContent(i)); } else hRelDiff->SetBinContent(i, 0); } return hRelDiff; }
void mc2ibd_NE(TChain *tMC, TFile *fBgnd, TCanvas *cv) { char str[1024]; TLatex *txt = new TLatex(); TH1D *hExp = (TH1D *) fBgnd->Get("hNEA-diff"); if (!hExp) { printf("Histogram hNEA-diff not found in %s\n", fBgnd->GetName()); return; } hExp->SetTitle("Delayed event energy;MeV;Events/200 keV"); hExp->SetLineColor(kBlack); hExp->SetLineWidth(3); gROOT->cd(); TH1D *hMC = new TH1D("hNEMC", "Delayed event energy (MC);MeV;Events/200 keV", 45, 3, 12); hMC->SetLineColor(kBlue); tMC->Project(hMC->GetName(), "NeutronEnergy", cX && cY && cZ && cR && c20 && cGamma && cGammaMax && cPe); hMC->Sumw2(); hMC->Scale(hExp->Integral(15, 45) / hMC->Integral(15,45)); cv->Clear(); hMC->Draw("hist"); hExp->DrawCopy("same"); TLegend *lg = new TLegend(0.65, 0.8, 0.89, 0.89); lg->AddEntry(hExp, "IBD", "LE"); lg->AddEntry(hMC, "MC", "L"); lg->Draw(); }
void PrintHist(const char *filename = "test.root", const char *histname = "histname") { Init(); TFile *f = new TFile(filename); TH1D *histo; histo = (TH1D*)(f->Get(histname)); histo->GetXaxis()->SetTitleSize(0.055); histo->GetYaxis()->SetTitleSize(0.055); histo->GetXaxis()->SetLabelSize(0.04); histo->GetYaxis()->SetLabelSize(0.05); histo->GetXaxis()->SetTitleOffset(1.15); histo->GetYaxis()->SetTitleOffset(1.1); histo->SetTitle(""); histo->SetLineStyle(1); histo->SetLineWidth(2); // histo->GetXaxis()->SetTitle("Vcal [low range DAC units]"); // histo->GetYaxis()->SetTitle("PH [ADC units]"); histo->GetXaxis()->SetTitle("par1"); histo->GetYaxis()->SetTitle("# pixels"); // histo->GetXaxis()->SetTitle("position resolution [#mum]"); // histo->GetYaxis()->SetTitle("# pixels"); // histo->GetXaxis()->SetTitle("Vana [DAC units]"); // histo->GetYaxis()->SetTitle("par1"); // histo->GetXaxis()->SetTitle("nChip"); // histo->GetYaxis()->SetTitle("par1"); histo->Draw(); //histo->Draw("colz"); }
void mc2ibd_PPX(char X, TChain *tMC, TFile *fBgnd, TCanvas *cv) { char str[1024]; TH1D *hExp; TH1D *hMC; TCut cut; sprintf(str, "hP%cA-diff", X); hExp = (TH1D *) fBgnd->Get(str); if (!hExp) { printf("Histogram hP%cA-diff not found in %s\n", X, fBgnd->GetName()); return; } gROOT->cd(); sprintf(str, "hMCPP%c", X); hMC = new TH1D(str, "MC XYZ", hExp->GetNbinsX(), 0, 100); sprintf(str, "PositronX[%d]+%4.1f", X - 'X', (X=='Z') ? 0.5 : 2.0); switch (X) { case 'X': cut = cY && "PositronX[0]>=0" && cZ && cR && c20 && cGamma && cGammaMax && cPe && cN; break; case 'Y': cut = cX && "PositronX[1]>=0" && cZ && cR && c20 && cGamma && cGammaMax && cPe && cN; break; default: cut = cX && cY && cR && c20 && cGamma && cGammaMax && cPe && cN; } tMC->Project(hMC->GetName(), str, cut); hMC->Sumw2(); cv->Clear(); hExp->SetLineColor(kBlack); hExp->SetLineWidth(3); hMC->SetLineColor(kBlue); hMC->SetLineWidth(1); hMC->Scale(hExp->Integral() / hMC->Integral()); hExp->Draw(); hMC->Draw("hist,same"); TLegend *lg = new TLegend(0.5, 0.2, 0.65, 0.35); lg->AddEntry(hExp, "IBD", "LE"); lg->AddEntry(hMC, "MC", "L"); lg->Draw(); cv->Update(); }
void nu_spect(const std::string& filename) { TFile* file = new TFile(filename.c_str(), "read"); TTree* tree = NULL; file->GetObject("MARLEY_event_tree", tree); if (!tree) { std::cout << "MARLEY event tree not found" << '\n'; return; } marley::Event* ev = new marley::Event; tree->SetBranchAddress("event", &ev); size_t num_events = tree->GetEntries(); std::vector<double> E_vec; for (size_t i = 0; i < num_events; ++i) { tree->GetEntry(i); E_vec.push_back(ev->projectile().total_energy()); if (i % 1000 == 0) std::cout << "Event " << i << '\n'; } double E_max = -1e30; double E_min = 1e30; for (size_t k = 0; k < E_vec.size(); ++k) { double e = E_vec.at(k); if (e > E_max) E_max = e; else if (e < E_min) E_min = e; } TString title_str; TH1D* Es = new TH1D("nu_Es", "reacting neutrino spectrum", 100, E_max, E_min); for (size_t j = 0; j < E_vec.size(); ++j) { Es->Fill(E_vec.at(j)); } TCanvas* c = new TCanvas; c->cd(); gStyle->SetOptStat(); Es->SetStats(true); Es->SetLineColor(kBlue); Es->SetLineWidth(2); Es->Draw(); //c->SaveAs("nu_Es.pdf"); }
void makeplot(const char *name, TTree *tree, TCut weight, const char *drawstring, const char *xlabel, int nbins, double xlow, double xhigh) { //this is for NLO with FXFX merging // TCut mult0 = "LHEEvent.npNLO()==0"; // TCut mult1 = "LHEEvent.npNLO()==1"; // TCut mult2 = "LHEEvent.npNLO()==2"; // TCut mult3 = "LHEEvent.npNLO()==3"; //this is for LO with MLM TCut mult0 = "GenEvent.nMEPartons()==0"; TCut mult1 = "GenEvent.nMEPartons()==1"; TCut mult2 = "GenEvent.nMEPartons()==2"; TCut mult3 = "GenEvent.nMEPartons()==3"; //this is for LO with MLM (plotting partons after excluding non-matched partons in wbb/vbf type processes) // TCut mult0 = "GenEvent.nMEPartonsFiltered()==0"; // TCut mult1 = "GenEvent.nMEPartonsFiltered()==1"; // TCut mult2 = "GenEvent.nMEPartonsFiltered()==2"; TH1D *hall = new TH1D(TString::Format("hall_%s",name),"",nbins,xlow,xhigh); TH1D *hmult0 = new TH1D(TString::Format("hmult0_%s",name),"",nbins,xlow,xhigh); TH1D *hmult1 = new TH1D(TString::Format("hmult1_%s",name),"",nbins,xlow,xhigh); TH1D *hmult2 = new TH1D(TString::Format("hmult2_%s",name),"",nbins,xlow,xhigh); TH1D *hmult3 = new TH1D(TString::Format("hmult3_%s",name),"",nbins,xlow,xhigh); hmult0->SetLineColor(kBlue); hmult1->SetLineColor(kRed); hmult2->SetLineColor(kMagenta); hmult3->SetLineColor(kGreen+1); tree->Draw(TString::Format("%s>>%s",drawstring,hall->GetName()),weight,"goff"); tree->Draw(TString::Format("%s>>%s",drawstring,hmult0->GetName()),weight*mult0,"goff"); tree->Draw(TString::Format("%s>>%s",drawstring,hmult1->GetName()),weight*mult1,"goff"); tree->Draw(TString::Format("%s>>%s",drawstring,hmult2->GetName()),weight*mult2,"goff"); tree->Draw(TString::Format("%s>>%s",drawstring,hmult3->GetName()),weight*mult3,"goff"); hall->GetXaxis()->SetTitle(xlabel); TCanvas* c = new TCanvas(name,name); c->cd(); hall->SetLineWidth(2); hall->Draw("EHIST"); hmult0->SetLineWidth(2); hmult0->Draw("EHISTSAME"); hmult1->SetLineWidth(2); hmult1->Draw("EHISTSAME"); hmult2->SetLineWidth(2); hmult2->Draw("EHISTSAME"); hmult3->SetLineWidth(2); hmult3->Draw("EHISTSAME"); c->SetLogy(); c->SaveAs(TString::Format("%s.pdf",name)); }
void plot(TFile * measurement, const char * mname, TFile * mctruth, const char * mcname) { TH1D * mHistogram = (TH1D*) measurement->Get(mname); TH1D * mcHistogram = (TH1D*) mctruth->Get(mcname); mHistogram->GetYaxis()->SetRangeUser(0., 1.2); mcHistogram->GetYaxis()->SetRangeUser(0., 1.2); mHistogram->SetLineWidth(2); mcHistogram->SetLineWidth(2); mcHistogram->SetLineStyle(2); mcHistogram->SetLineColor(kRed); mHistogram->Draw(); mcHistogram->Draw("same"); TLegend * legend = new TLegend(0.25, 0.77, 0.6, 0.92); legend->AddEntry(mHistogram, "Measure", "pl"); legend->AddEntry(mcHistogram, "MCTruth", "l"); legend->Draw(); }
void plotter::draw_output_stat(TH1* output_, TH1* stat_, TH1D* truth_, bool norm, TString file_name){ // std::vector<double> sys = get_sys_errors(); // TH1* output_sys = add_error_bar(output, sys); TH1* output = (TH1*) output_->Clone("output"); TH1* stat = (TH1*) stat_->Clone("stat"); TH1D* truth = (TH1D*) truth_->Clone("truth"); TCanvas *c = new TCanvas("c","",600,600); double ymax; gPad->SetLeftMargin(0.15); if(truth->GetMaximum() > output->GetMaximum()) ymax = 1.5 * truth->GetMaximum(); else ymax = 1.5 * output->GetMaximum(); TGaxis::SetMaxDigits(3); output->SetTitle(" "); output->GetYaxis()->SetRangeUser(0., ymax); output->GetXaxis()->SetTitle("Leading-jet mass [GeV]"); if(norm) output->GetYaxis()->SetTitle("#frac{1}{#sigma} #frac{d#sigma}{dm_{jet}} [#frac{1}{GeV}]"); else output->GetYaxis()->SetTitle("events"); output->GetYaxis()->SetTitleOffset(1.1); output->GetXaxis()->SetTitleOffset(0.9); output->GetYaxis()->SetTitleSize(0.05); output->GetXaxis()->SetTitleSize(0.05); output->GetYaxis()->SetNdivisions(505); output->SetLineColor(kBlack); output->SetMarkerColor(kBlack); output->SetMarkerStyle(8); output->SetMarkerSize(1); output->Draw("E1"); stat->SetLineColor(kBlack); stat->SetMarkerColor(kBlack); stat->SetMarkerStyle(8); stat->SetMarkerSize(1); gStyle->SetEndErrorSize(5); truth->SetLineWidth(3); truth->SetLineColor(kRed); truth->SetLineStyle(2); truth->Draw("HIST SAME"); stat->Draw("E1 SAME"); output->Draw("E1 SAME"); TLegend *l=new TLegend(0.5,0.65,0.85,0.85); l->SetBorderSize(0); l->SetFillStyle(0); l->AddEntry(output,"data unfolded","pl"); l->AddEntry(truth,"MC particle level","pl"); l->SetTextSize(0.04); l->Draw(); c->SaveAs(directory + file_name + ".pdf"); delete c; }
void plotter::draw_output_smear(std::vector<TH1*> output_, TH1D* truth_, TString file_name){ // std::vector<double> sys = get_sys_errors(); // TH1* output_sys = add_error_bar(output, sys); std::vector<TH1*> outputs; for(int i=0; i<output_.size(); i++){ TH1* hist = (TH1*) output_[i]->Clone(); outputs.push_back(hist); } TH1D* truth = (TH1D*) truth_->Clone("truth"); TCanvas *c = new TCanvas("c","",600,600); double ymax; gPad->SetLeftMargin(0.15); if(truth->GetMaximum() > outputs[0]->GetMaximum()) ymax = 1.5 * truth->GetMaximum(); else ymax = 1.5 * outputs[0]->GetMaximum(); TGaxis::SetMaxDigits(3); for(auto output: outputs){ output->SetTitle(" "); output->GetYaxis()->SetRangeUser(0., ymax); output->GetXaxis()->SetTitle("Leading-jet mass [GeV]"); output->GetYaxis()->SetTitle("events"); output->GetYaxis()->SetTitleOffset(1.1); output->GetXaxis()->SetTitleOffset(0.9); output->GetYaxis()->SetTitleSize(0.05); output->GetXaxis()->SetTitleSize(0.05); output->GetYaxis()->SetNdivisions(505); output->SetLineColor(kBlack); output->SetMarkerColor(kBlack); output->SetMarkerStyle(8); output->SetMarkerSize(1); output->Draw("E1 SAME"); } gStyle->SetEndErrorSize(5); truth->SetLineWidth(3); truth->SetLineColor(kRed); truth->SetLineStyle(2); truth->Draw("HIST SAME"); TLegend *l; if(truth->GetSize() > 20) l=new TLegend(0.2,0.6,0.4,0.85); else l=new TLegend(0.5,0.6,0.85,0.85); l->SetBorderSize(0); l->SetFillStyle(0); l->AddEntry(outputs[0],"data unfolded","pl"); l->AddEntry(truth,"MC particle level","pl"); l->SetTextSize(0.04); l->Draw(); c->SaveAs(directory + file_name + ".pdf"); delete c; }
TH1D * GetITSsaSpectrum(TFile *file, Int_t part, Int_t charge, Int_t cent, Bool_t cutSpectrum = kTRUE, Bool_t addSystematicError = kTRUE) { /* pt limits for combined spectra */ Double_t ptMin[AliPID::kSPECIES] = {0., 0., 0.1, 0.2, 0.3}; Double_t ptMax[AliPID::kSPECIES] = {0., 0., 0.6, 0.5, 0.6}; TList *list = (TList *)file->Get("output"); TH1D *hin = (TH1D *)list->FindObject(Form("h_%s_%s_cen_%d", ITSsaPartName[part], ITSsaChargeName[charge], cent)); if (!hin) return NULL; /* get systematics */ TFile *fsys = TFile::Open("SPECTRASYS_ITSsa.root"); TH1 *hsys = fsys->Get(Form("hSystTot%s%s", ITSsaChargeName[charge], ITSsaPartName[part])); TH1D *h = new TH1D(Form("hITSsa_cent%d_%s_%s", cent, AliPID::ParticleName(part), chargeName[charge]), "ITSsa", NptBins, ptBin); Double_t pt, width, value, error, sys; Int_t bin; for (Int_t ipt = 0; ipt < NptBins; ipt++) { /* get input bin */ pt = h->GetBinCenter(ipt + 1); width = h->GetBinWidth(ipt + 1); bin = hin->FindBin(pt); /* sanity check */ if (TMath::Abs(hin->GetBinCenter(bin) - pt) > 0.001 || TMath::Abs(hin->GetBinWidth(bin) - width) > 0.001) continue; /* check pt limits */ if (cutSpectrum && (pt < ptMin[part] || pt > ptMax[part])) continue; /* copy bin */ value = hin->GetBinContent(bin); error = hin->GetBinError(bin); /*** TEMP ADD SYS ***/ if (addSystematicError) { sys = hsys->GetBinContent(bin) * value; error = TMath::Sqrt(error * error + sys * sys); } h->SetBinContent(ipt + 1, value); h->SetBinError(ipt + 1, error); } h->SetTitle("ITSsa"); h->SetLineWidth(1); h->SetLineColor(1); h->SetMarkerStyle(20); h->SetMarkerColor(1); h->SetFillStyle(0); h->SetFillColor(0); return h; }
void compare(){ TFile *fileJian=new TFile("InputsPurdue/PromptRAA_D0_PbPb_spectrum_fonll_effunpre_cent0to100_ptbin12_y1_dataplusfonll.root"); TFile *fileRawJian=new TFile("InputsPurdue/Dspectrum_pbpb_data_ptbin_14_ptd_unpreMBtrig_0_cent0to100_y1.root"); TH1D *hspectrumJian = (TH1D*)fileJian->Get("D0_pbpb_spectrum"); TH1D *rawJian = (TH1D*)fileRawJian->Get("N_mb_expobkg_count"); hspectrumJian->Scale(5.67*1e-9); TFile *fileMIT=new TFile("InputsMIT/alphaD0.root"); TH1D *hspectrumMIT = (TH1D*)fileMIT->Get("hPtCor"); TH1D *hrawMIT = (TH1D*)fileMIT->Get("hPt"); hspectrumMIT->Scale(0.90*1./(2*0.0388*3.01781340000000000e+07)); TCanvas*c=new TCanvas("c","",500,500); c->cd(); c->SetLogy(); hspectrumMIT->Draw(); hspectrumMIT->SetLineWidth(4); hspectrumJian->Draw("same"); TFile*fEffJian=new TFile("InputsPurdue/D0_PbPb_acc_eff_ptbin_14_ybin_6_prompt_FONLLweight_cent-0to100_dataptshape_y1_Ncollweight1.root"); TH1D *EffJian = (TH1D*)fEffJian->Get("d0accxeff_pt"); TH1D *EffMIT = (TH1D*)fileMIT->Get("hEff"); cout<<"bin center MIT"<<EffMIT->GetBinCenter(1)<<"GeV, efficiency="<<EffMIT->GetBinContent(1)<<endl; cout<<"bin center Jian"<<EffJian->GetBinCenter(4)<<"GeV, efficiency="<<EffJian->GetBinContent(4)<<endl; cout<<"bin center MIT"<<hrawMIT->GetBinCenter(1)<<"GeV, raws="<<hrawMIT->GetBinContent(1)<<endl; cout<<"bin center Jian"<<rawJian->GetBinCenter(4)<<"GeV, raws="<<rawJian->GetBinContent(4)<<endl; cout<<"*************"<<endl; cout<<"bin center MIT"<<EffMIT->GetBinCenter(7)<<"GeV, efficiency="<<EffMIT->GetBinContent(7)<<endl; cout<<"bin center Jian"<<EffJian->GetBinCenter(10)<<"GeV, efficiency="<<EffJian->GetBinContent(10)<<endl; cout<<"bin center MIT"<<hrawMIT->GetBinCenter(7)<<"GeV, raws="<<hrawMIT->GetBinContent(7)<<endl; cout<<"bin center Jian"<<rawJian->GetBinCenter(10)<<"GeV, raws="<<rawJian->GetBinContent(10)<<endl; for (int i=1;i<11;i++){ cout<<"pt centre="<<EffJian->GetBinCenter(i+3)<<",value="<<hspectrumMIT->GetBinContent(i)/hspectrumJian->GetBinContent(i+3)<<endl; } }
TH1D * GetITSTPCSpectrum(TFile *file, Int_t part, Int_t charge, Int_t cent) { TList *list = (TList *)file->Get("output"); TH1D *hin = (TH1D *)list->FindObject(Form("h_%s_%s_cen_%d", ITSTPCPartName[part], ITSTPCChargeName[charge], cent + 1)); if (!hin) return NULL; TH1D *h = new TH1D(Form("hITSTPC_cent%d_%s_%s", cent, AliPID::ParticleName(part), chargeName[charge]), "ITSTPC", NptBins, ptBin); Double_t pt, width, value, error; Int_t bin; for (Int_t ipt = 0; ipt < NptBins; ipt++) { /* get input bin */ pt = h->GetBinCenter(ipt + 1); width = h->GetBinWidth(ipt + 1); bin = hin->FindBin(pt); /* sanity check */ if (TMath::Abs(hin->GetBinCenter(bin) - pt) > 0.001 || TMath::Abs(hin->GetBinWidth(bin) - width) > 0.001) continue; /* copy bin */ value = hin->GetBinContent(bin); error = hin->GetBinError(bin); h->SetBinContent(ipt + 1, value); h->SetBinError(ipt + 1, error); } #if 0 /* add systematic error */ Double_t sys; if (part == 2) sys = 0.5; else sys = 0.1; Double_t cont, conte; for (Int_t ipt = 0; ipt < h->GetNbinsX(); ipt++) { cont = h->GetBinContent(ipt + 1); conte = h->GetBinError(ipt + 1); conte = TMath::Sqrt(conte * conte + sys * sys * cont * cont); h->SetBinError(ipt + 1, conte); } #endif h->SetTitle("ITSTPC"); h->SetLineWidth(1); h->SetLineColor(1); h->SetMarkerStyle(21); h->SetMarkerColor(2); h->SetFillStyle(0); h->SetFillColor(0); return h; }
TH1D* GetDiff(TH1D* hEM,TH1D* hME,double xmin, double xmax) { TH1D* diff = (TH1D*)hEM->Clone("diff"); diff->Add(hME,-1); diff->GetYaxis()->SetTitle("Diff"); diff->GetYaxis()->SetTitleSize(0.1); diff->GetYaxis()->SetTitleOffset(0.3); diff->GetYaxis()->CenterTitle(); diff->GetXaxis()->SetRangeUser(xmin,xmax); diff->SetLineColor(kBlack); diff->GetYaxis()->SetLabelSize(0.08); diff->SetLineWidth(2); diff->SetMarkerStyle(8); diff->SetMarkerSize(0.7); diff->SetMarkerColor(kBlack); diff->GetXaxis()->SetTitle("M_{coll} (GeV)"); diff->GetXaxis()->SetTitleSize(0.15); diff->GetXaxis()->SetTitleOffset(0.8); diff->GetXaxis()->SetLabelOffset(); diff->GetXaxis()->SetLabelSize(0.1); return diff; }
// Draw 1D histos TH1D *plot1Dhisto(double intLumi,TFile *fileName,TString folderName,TString histoName,int color,int rebin,float xMin,float xMax,TString xName, TString yName,TString sampleName,bool mc) { TH1D *hTemp = (TH1D*)fileName->Get(folderName+"/"+histoName); hTemp->SetName(histoName+"_"+sampleName); if (mc){ hTemp->Scale(intLumi/100.); } hTemp->Rebin(rebin); hTemp->SetLineColor(color); hTemp->SetLineWidth(5); hTemp->GetXaxis()->SetRangeUser(xMin,xMax); hTemp->GetXaxis()->SetTitle(xName); hTemp->GetXaxis()->SetTitleSize(0.06); hTemp->GetXaxis()->SetLabelSize(0.06); hTemp->GetYaxis()->SetTitle(yName); hTemp->GetYaxis()->SetTitleSize(0.06); hTemp->GetYaxis()->SetLabelSize(0.06); hTemp->SetTitleOffset(1.5, "Y"); // last/first bin: put over/underflow hTemp->SetBinContent(hTemp->FindBin(xMax),hTemp->Integral(hTemp->FindBin(xMax),hTemp->GetNbinsX()+1)); hTemp->SetBinContent(hTemp->FindBin(xMin),hTemp->Integral(-1,hTemp->FindBin(xMin))); hTemp->SetBinError(hTemp->FindBin(xMax),sqrt(hTemp->Integral(hTemp->FindBin(xMax),hTemp->GetNbinsX()+1))); hTemp->SetBinError(hTemp->FindBin(xMin),sqrt(hTemp->Integral(-1,hTemp->FindBin(xMin)))); //fileName->Close(); /* if (histoName != "LP_tot") { if (histoName != "SumLepPt_tot") { if ((folderName == "ANplots150_NOLP")) { hTemp->GetXaxis()->SetRangeUser(0.,300.); } if ((folderName == "ANplots250_NOLP")) { hTemp->GetXaxis()->SetRangeUser(0.,400.); } if ((folderName == "ANplots350_NOLP")) { hTemp->GetXaxis()->SetRangeUser(0.,500.); } if ((folderName == "ANplots450_NOLP")) { hTemp->GetXaxis()->SetRangeUser(0.,1000.); } } else { if ((folderName == "ANplots150_NOLP")) { hTemp->GetXaxis()->SetRangeUser(100.,300.); } if ((folderName == "ANplots250_NOLP")) { hTemp->GetXaxis()->SetRangeUser(200.,400.); } if ((folderName == "ANplots350_NOLP")) { hTemp->GetXaxis()->SetRangeUser(300.,500.); } if ((folderName == "ANplots450_NOLP")) { hTemp->GetXaxis()->SetRangeUser(400.,1000.); } } } */ return hTemp; } // ~ end of plot1Dhisto function
TH1D *HistoRatio (TH1D *hisNum, TH1D *hisDen){ //Graph Ratio Clone TH1D *Ratio; Ratio = (TH1D*)hisNum->Clone(); Ratio->Divide(hisDen); for(int ibin=1;ibin<=Ratio->GetNbinsX();ibin++) { if (Ratio->GetBinContent(ibin) == 0.0 ) { Ratio->SetBinContent(ibin, 1.0); Ratio->SetBinError(ibin, 0.0); } } Ratio->SetFillColor(0); Ratio->SetLineColor(kGray+2); // Ratio->SetLineColor(kMagenta-5); Ratio->SetLineWidth(1); Ratio->SetTitle(""); Ratio->GetYaxis()->SetTitle("Obs/Exp"); Ratio->GetYaxis()->CenterTitle(); Ratio->GetYaxis()->SetTitleFont(42); Ratio->GetYaxis()->SetTitleSize(0.135); Ratio->GetYaxis()->SetTitleOffset(0.28); Ratio->GetYaxis()->SetLabelFont(42); Ratio->GetYaxis()->SetLabelSize(0.115); Ratio->GetYaxis()->SetNdivisions(402); Ratio->GetXaxis()->SetTitle("CSVv2 bin"); Ratio->GetXaxis()->SetNdivisions(509); //(402) Ratio->GetXaxis()->SetTitleOffset(1.1); Ratio->GetXaxis()->SetTitleFont(42); Ratio->GetXaxis()->SetTitleSize(0.16); Ratio->GetXaxis()->SetTitleFont(42); Ratio->GetXaxis()->SetLabelSize(0.14); Ratio->SetMinimum(0.4); Ratio->SetMaximum(1.6); return Ratio; }
TH1D *plotIso(TTree *tSig,TString var,TString weight, TString etcut, TString htcut, TString njetcut, TString ph, TString bin,Double_t xmax, Int_t icol) { TCut etcut20=weight+" * ("+etcut+htcut+" && "+njetcut+")"; TCut conv1=weight+" * ("+etcut+htcut+" &&"+njetcut+" && mHits<=1)"; TCut conv2=weight+" * ("+etcut+htcut+" && "+njetcut+"&& mHits<=1)"; TCut conv3=weight+" * ("+etcut+htcut+" && "+njetcut+"&& mHits<=1 && (dcot>0.02 || dcot<-0.02 || dist>0.02 || dist<-0.02))"; TCanvas *c = getaCanvas(ph+var+etcut+htcut+"hsqrti"); tSig->Draw(var+">>hsqrti"+bin,conv3); TH1D *hsqrt = (TH1D*)gDirectory->Get("hsqrti"); hsqrt->SetName(ph+var+htcut+"hsqrti"); hsqrt->SetLineColor(icol); hsqrt->SetLineWidth(3); c->Close(); return hsqrt; }
TCanvas* Com(TString plot,TString plot_dir,UInt_t rbin, TString xtitle, Double_t max, TString title){ gROOT->SetStyle("Plain"); gStyle->SetTitleFontSize(0.07); TH1D *Sig = ((TH1D*)Sig->Get(plot_dir+"/"+plot))->Clone(); TH1D *Bkgd= ((TH1D*)Bkgd->Get(plot_dir+"/"+plot))->Clone(); Sig->Rebin(rbin); Bkgd->Rebin(rbin); Sig->Scale(1/(Sig->Integral())); Bkgd->Scale(1/(Bkgd->Integral())); //TLine *li =new TLine(0.55,0.,0.55,100000); TCanvas* c = new TCanvas(plot_dir+plot,plot_dir+plot); c->SetLogy(); TLegend *leg = new TLegend(0.5,0.8,0.99,0.99); leg->SetFillColor(0); leg->AddEntry(Sig,"Selected events","L"); leg->AddEntry(Bkgd,"Anti-selected events","L"); Sig->SetLineColor(kRed); Sig->SetLineWidth(2); Bkgd->SetLineColor(kBlue); Bkgd->SetLineWidth(2); Sig->Draw("EHIST"); Bkgd->Draw("HISTSAME"); leg->Draw("SAME"); // li->Draw("SAME"); Sig->SetTitle(title); Sig->SetStats(kFALSE); Sig->GetXaxis()->SetTitle(xtitle); if (max == 999999){ } else{ Sig->GetXaxis()->SetRangeUser(0.2,max);} Sig->GetYaxis()->SetTitle(""); c->Update(); c->SaveAs(saving+"IDinv_Delta_"+plot_dir+plot+".png"); return c; }
TH1D * GetTPCTOFSpectrum(TFile *file, Int_t part, Int_t charge, Int_t cent, Bool_t cutSpectrum = kTRUE) { /* pt limits for combined spectra */ Double_t ptMin[AliPID::kSPECIES] = {0., 0., 0., 0., 0.}; Double_t ptMax[AliPID::kSPECIES] = {0., 0., 1.2, 1.2, 1.8}; TH1D *hin = (TH1D *)file->Get(Form("%sFinal%s%d", TPCTOFPartName[part], TPCTOFChargeName[charge], cent)); if (!hin) return NULL; TH1D *h = new TH1D(Form("hTPCTOF_cent%d_%s_%s", cent, AliPID::ParticleName(part), chargeName[charge]), "TPCTOF", NptBins, ptBin); Double_t pt, width, value, error; Int_t bin; for (Int_t ipt = 0; ipt < NptBins; ipt++) { /* get input bin */ pt = h->GetBinCenter(ipt + 1); width = h->GetBinWidth(ipt + 1); bin = hin->FindBin(pt); /* sanity check */ if (TMath::Abs(hin->GetBinCenter(bin) - pt) > 0.001 || TMath::Abs(hin->GetBinWidth(bin) - width) > 0.001) continue; /* check pt limits */ if (cutSpectrum && (pt < ptMin[part] || pt > ptMax[part])) continue; /* copy bin */ value = hin->GetBinContent(bin); error = hin->GetBinError(bin); h->SetBinContent(ipt + 1, value); h->SetBinError(ipt + 1, error); } h->SetTitle("TPCTOF"); h->SetLineWidth(1); h->SetLineColor(1); h->SetMarkerStyle(22); h->SetMarkerColor(8); h->SetFillStyle(0); h->SetFillColor(0); return h; }
TH1D *create1Dhisto(TTree *tree,TString intLumi,TString cuts,TString branch,int bins,float xmin,float xmax,bool useLog) { TH1::SetDefaultSumw2(kTRUE); // TString cut ="(wgt*"+intLumi+")*("+cuts+")"; TString cut ="("+intLumi+")*("+cuts+")"; TH1D *hTemp = new TH1D("hTemp","hTemp",bins,xmin,xmax); tree->Project("hTemp",branch,cut); if (useLog) { hTemp->GetYaxis()->SetRangeUser(0.1,50.*(hTemp->GetBinContent(hTemp->GetMaximumBin()))); } else if (!useLog) { hTemp->GetYaxis()->SetRangeUser(0.,2.*(hTemp->GetBinContent(hTemp->GetMaximumBin()))); } hTemp->SetLineWidth(3); hTemp->GetXaxis()->SetTitle(branch); return hTemp; } //~ end of create1Dhisto
TH1D* GetRatio(TH1D* hEM,TH1D* hME,double xmin, double xmax) { TH1D* ratio = (TH1D*)hEM->Clone("ratio"); ratio->Divide(hME); // ratio->GetYaxis()->SetTitle("Ratio"); //ratio->SetTitleFont(64); ratio->GetYaxis()->SetTitle("Ratio"); ratio->GetYaxis()->SetTitleSize(0.1); ratio->GetYaxis()->SetTitleOffset(0.3); ratio->GetYaxis()->CenterTitle(); // ratio->SetTitleSize(0.1); ratio->GetXaxis()->SetRangeUser(xmin,xmax); ratio->SetLineColor(kBlack); ratio->GetYaxis()->SetRangeUser(0,2); ratio->SetLineWidth(2); ratio->SetMarkerStyle(8); ratio->SetMarkerSize(0.7); ratio->SetMarkerColor(kBlack); ratio->GetXaxis()->SetTitle("M_{coll} (GeV)"); ratio->GetXaxis()->SetTitleSize(0.15); ratio->GetXaxis()->SetTitleOffset(0.8); ratio->GetXaxis()->SetLabelOffset(); ratio->GetYaxis()->SetLabelSize(0.1); ratio->GetYaxis()->SetNdivisions(5); ratio->GetXaxis()->SetLabelSize(0.1); ratio->GetXaxis()->SetRangeUser(xmin,xmax); for (int i=1; i<=hEM->GetXaxis()->FindBin(99); i++){ double n = hEM->GetBinContent(i); double m = hME->GetBinContent(i); double deltaN = hEM->GetBinError(i); double deltaM = hME->GetBinError(i); double err = (1./m)*TMath::Sqrt(TMath::Power(deltaN,2)+TMath::Power(n*deltaM/m,2)); ratio->SetBinError(i,err); } for (int i=hEM->GetXaxis()->FindBin(151); i<=hEM->GetXaxis()->GetNbins(); i++){ double n = hEM->GetBinContent(i); double m = hME->GetBinContent(i); double deltaN = hEM->GetBinError(i); double deltaM = hME->GetBinError(i); double err = (1./m)*TMath::Sqrt(TMath::Power(deltaN,2)+TMath::Power(n*deltaM/m,2)); ratio->SetBinError(i,err); } return ratio; }
// -- Draw 1D histos TH1D *plot1Dhisto(double intLumi,TFile *fileName,TString folderName,TString histoName,int color,int rebin,float xMin,float xMax,TString xName, TString yName,TString sampleName,bool mc) { TH1D *hTemp = (TH1D*)fileName->Get(folderName+"/"+histoName); hTemp->SetName(histoName+"_"+sampleName); // hTemp->Sumw2(); if (mc) { hTemp->Scale(intLumi/100.); } hTemp->Rebin(rebin); hTemp->SetLineColor(color); hTemp->SetLineWidth(3); hTemp->GetXaxis()->SetRangeUser(xMin,xMax); hTemp->GetXaxis()->SetTitle(xName); hTemp->GetYaxis()->SetTitle(yName); // last bin: put put overflow hTemp->SetBinContent(hTemp->FindBin(xMax),hTemp->Integral(hTemp->FindBin(xMax),hTemp->GetNbinsX()+1)); // cout << "Nbins=" << hTemp->GetNbinsX() << "\n"; return hTemp; } // ~ end of plot1Dhisto function
TCanvas* plotHistswSomeUncAndAbsUncertainty(std::vector<TH1D*> fit_func_list, TH1D* baseHist, TString title="", TString xTitle="", TString yTitle="", TH1D* pt_uncertainty_band=0) { int numberOfFitFuncs = fit_func_list.size(); if (numberOfFitFuncs>5) { cout << "Too many histograms for numerator (currently only supports up to 5)" << endl; exit; } if (!baseHist) { cout << "baseHist provided does not exist" << endl; exit; } //************************************************* // Variables bool topPlotLogY = 0; // 0 = no log; 1= log TString yTitle2 = "ratio"; // bottom plot y axis title std::vector<int> histColors; histColors.push_back(kBlue); // change colors as you like histColors.push_back(kRed); histColors.push_back(kGreen-1); histColors.push_back(8); histColors.push_back(33); // histColors.push_back(kGreen-1); std::vector<int> fillStyles; fillStyles.push_back(3002); fillStyles.push_back(3004); // fillStyles.push_back(3305); // fillStyles.push_back(3490); fillStyles.push_back(3004); fillStyles.push_back(3005); fillStyles.push_back(3006); std::vector<int> good_markers; good_markers.push_back(20); good_markers.push_back(25); good_markers.push_back(21); good_markers.push_back(24); good_markers.push_back(22); good_markers.push_back(26); good_markers.push_back(29); good_markers.push_back(30); good_markers.push_back(23); good_markers.push_back(28); good_markers.push_back(34); int histDenominatorColor = kBlack; float defaultRatioYmin = 1.02; float defaultRatioYmax = 0.60; // END of Variables //************************************************* setTDRStyle(); TCanvas* c = new TCanvas("c","",600,600); TH1D* baseHistogram = (TH1D*)baseHist->Clone(); // Create ratio histograms std::vector<TH1D*> hists_with_fitted_uncertainties; for (int i=0; i<numberOfFitFuncs; i++) { //// hists_with_fitted_uncertainties.push_back( (TH1D*)fit_func_list.at(i)->Clone() ); // hists_with_fitted_uncertainties.push_back( (TH1D*)baseHist->Clone() ); // hists_with_fitted_uncertainties[i]->GetTitle(); // for(unsigned int bin_i=1;bin_i<= hists_with_fitted_uncertainties[i]->GetNbinsX();bin_i++){ // //Get uncertainty from fitted function // Double_t x_bc=baseHist->GetBinCenter(bin_i); // Double_t uncertainty=fit_func_list.at(i)->Eval(x_bc); // hists_with_fitted_uncertainties[i]->SetBinError(bin_i,uncertainty); // } hists_with_fitted_uncertainties.push_back( (TH1D*)baseHist->Clone() ); hists_with_fitted_uncertainties[i]->GetTitle(); for(unsigned int bin_i=1;bin_i<= hists_with_fitted_uncertainties[i]->GetNbinsX();bin_i++){ Double_t uncertainty=fit_func_list.at(i)->GetBinContent(bin_i); hists_with_fitted_uncertainties[i]->SetBinError(bin_i,uncertainty); } } for(unsigned int bin_i=1;bin_i<= baseHist->GetNbinsX();bin_i++){ Double_t uncertainty= pt_uncertainty_band->GetBinError(bin_i)*baseHist->GetBinContent(bin_i); pt_uncertainty_band->SetBinError(bin_i,uncertainty); pt_uncertainty_band->SetBinContent(bin_i,baseHist->GetBinContent(bin_i)); } TH1D* abs_uncertainty_otf = (TH1D*)baseHist->Clone(); for(unsigned int bin_i=1;bin_i<= abs_uncertainty_otf->GetNbinsX();bin_i++){ Double_t sum_x2=0; for (int i=0; i<numberOfFitFuncs; i++) { sum_x2+=TMath::Power(hists_with_fitted_uncertainties[i]->GetBinError(bin_i),2); } abs_uncertainty_otf->SetBinError(bin_i,TMath::Sqrt(sum_x2)); } abs_uncertainty_otf->SetFillStyle(3001); abs_uncertainty_otf->SetFillColor(kGray); abs_uncertainty_otf->SetMarkerStyle(1); baseHistogram->SetLineWidth(2); baseHistogram->SetLineColor(histDenominatorColor); baseHistogram->SetMarkerColor(histDenominatorColor); baseHistogram->Draw(); abs_uncertainty_otf->Draw("same e3"); pt_uncertainty_band->Draw("same e3"); baseHistogram->Draw("same"); // baseHistogram->SetLabelSize(0.0); // // baseHistogram->GetYaxis()->SetNdivisions(10); // baseHistogram->GetYaxis()->SetRangeUser(0.95,1.25); // baseHistogram->GetXaxis()->SetTitleSize(0.00); // baseHistogram->GetYaxis()->SetLabelSize(0.07); // baseHistogram->GetYaxis()->SetTitleSize(0.08); // baseHistogram->GetYaxis()->SetTitleOffset(0.76); baseHistogram->SetTitle(title+";"+xTitle+";"+yTitle); // for (int i=0; i<numberOfFitFuncs; i++) { hists_with_fitted_uncertainties[i]->SetLineWidth(2); hists_with_fitted_uncertainties[i]->SetLineColor(histColors[i]); hists_with_fitted_uncertainties[i]->SetFillColor(histColors[i]); hists_with_fitted_uncertainties[i]->SetFillStyle(fillStyles[i]); hists_with_fitted_uncertainties[i]->SetMarkerColor(histColors[i]); // hists_with_fitted_uncertainties[i]->SetMarkerStyle(good_markers[i+1]); hists_with_fitted_uncertainties[i]->SetMarkerStyle(1); hists_with_fitted_uncertainties[i]->Draw("same e3"); } c->SetLogy(topPlotLogY); return c; }
void MCtoSTATerrors() { TLatex *tplus = labelLatex(0.1364943,0.8114407,"MC sample"); TFile *file0 = TFile::Open("results/StandardCutflow/allmc.root"); TCanvas *c1 = new TCanvas(); //TCanvas *c2 = new TCanvas(); TH1D * LPplus = (TH1D*)file0->Get("RECO_PolPlots_50toinf/RECO_ICVarPFPlus"); TH1D * LPminus = (TH1D*)file0->Get("RECO_PolPlots_50toinf/RECO_ICVarPFMinus"); LPplus->Rebin(20); LPminus->Rebin(20); LPplus->Scale(0.3); LPminus->Scale(0.3); TH1D * newLPplus = (TH1D*)LPplus->Clone(); TH1D * newLPminus = (TH1D*)LPminus->Clone(); for(unsigned int i=1; i < LPplus->GetXaxis()->GetNbins(); i++) { newLPplus->SetBinError(i, TMath::Sqrt(LPplus->GetBinContent(i))); newLPminus->SetBinError(i, TMath::Sqrt(LPminus->GetBinContent(i))); } c1->cd(); newLPplus->GetYaxis()->SetTitle("Events / 300 nb^{-1}"); //newLPplus->GetXaxis()->SetTitle("LP(#mu^{+})"); newLPplus->GetXaxis()->SetTitle("LP(#mu)"); newLPplus->GetXaxis()->SetRangeUser(-1.0,2.0); newLPplus->SetLineWidth(3); newLPplus->SetLineStyle(2); newLPplus->SetLineColor(kRed); newLPplus->DrawCopy(); tplus->DrawClone("same"); // c2->cd(); // newLPminus->GetYaxis()->SetTitle("Events / 100 nb^{-1}"); // newLPminus->GetXaxis()->SetTitle("LP(#mu^{-})"); newLPminus->SetLineWidth(3); newLPminus->SetLineStyle(2); newLPminus->SetLineColor(kBlack); newLPminus->DrawCopy("same"); // tplus->DrawClone("same"); leg = new TLegend(0.762931,0.720339,0.8649425,0.8622881,NULL,"brNDC"); leg->AddEntry(newLPplus,"#mu^{+}","l"); leg->AddEntry(newLPminus,"#mu^{-}","l"); leg->SetFillColor(kWhite); leg->SetBorderSize(0); leg->SetTextFont(62); leg->DrawClone(); file0->Close(); return; }