void draw_mSUGRA_exclusion(TH2F *ocrosssection, TH2F *oFilterEfficiency, TH2F *oabsXS, TH2F *limitmap, TH2F *expmap, TH2F *expplusmap, TH2F *expminusmap, TH2F *exp2plusmap, TH2F *exp2minusmap, bool isobserved) { TH2F *crosssection = (TH2F*)ocrosssection->Clone("crosssection"); // TH2F *limitmap = (TH2F*)olimitmap->Clone(((string)olimitmap->GetName()+"clone").c_str()); TH2F *cleanhisto = (TH2F*)limitmap->Clone("clean"); for(int ix=1;ix<=cleanhisto->GetNbinsX();ix++) { for(int iy=1;iy<=cleanhisto->GetNbinsY();iy++) { cleanhisto->SetBinContent(ix,iy,0); } } TH2F *FilterEfficiency; TH2F *absXS; write_warning(__FUNCTION__,"You'll want to switch off 'wrongwaytodothis')"); if(wrongwaytodothis) { //this part is the one you want to remove. TFile *Efficiencies = new TFile("FilterEfficiencyv3.root"); FilterEfficiency = cast_into_shape((TH2F*) Efficiencies->Get("FilterEfficiency"),limitmap); assert(FilterEfficiency); assert(crosssection); absXS=(TH2F*)crosssection->Clone("absXS"); crosssection->Multiply(FilterEfficiency); } else { //this part is the one you want to keep! FilterEfficiency=(TH2F*)oFilterEfficiency->Clone("FilterEfficiency"); absXS=(TH2F*)oabsXS->Clone("absXS"); } TH2F *limits = (TH2F*)limitmap->Clone("limits"); set_range(limits,true,false); limitmap->Divide(crosssection); expminusmap->Divide(crosssection); expplusmap->Divide(crosssection); exp2minusmap->Divide(crosssection); exp2plusmap->Divide(crosssection); expmap->Divide(crosssection); TGraph *observed = get_mSUGRA_exclusion_line(limitmap, PlottingSetup::mSUGRA); observed->SetLineColor(kRed); TGraph *expminus = get_mSUGRA_exclusion_line(expminusmap, PlottingSetup::mSUGRA); TGraph *expplus = get_mSUGRA_exclusion_line(expplusmap, PlottingSetup::mSUGRA); TGraph *exp2minus; if(draw2sigma) exp2minus = get_mSUGRA_exclusion_line(exp2minusmap, PlottingSetup::mSUGRA); TGraph *exp2plus; if(draw2sigma) exp2plus = get_mSUGRA_exclusion_line(exp2plusmap, PlottingSetup::mSUGRA); TGraph *expected = new TGraph(expminus->GetN()+expplus->GetN()); TGraph *expected2; if(draw2sigma) expected2 = new TGraph(exp2minus->GetN()+exp2plus->GetN()); for(int i=0;i<=expminus->GetN();i++) { Double_t x,y; expminus->GetPoint(i,x,y); expected->SetPoint(i,x,y); } for(int i=0;i<=exp2minus->GetN();i++) { Double_t x,y; exp2minus->GetPoint(i,x,y); expected2->SetPoint(i,x,y); } for(int i=exp2plus->GetN()-1;i>=0;i--) { Double_t x,y; exp2plus->GetPoint(i,x,y); expected2->SetPoint(exp2minus->GetN()+(exp2plus->GetN()-i),x,y); } for(int i=expplus->GetN()-1;i>=0;i--) { Double_t x,y; expplus->GetPoint(i,x,y); expected->SetPoint(expminus->GetN()+(expplus->GetN()-i),x,y); } expected->SetFillColor(TColor::GetColor("#9FF781")); if(draw2sigma) expected2->SetFillColor(TColor::GetColor("#F3F781")); smooth_line(observed); smooth_line(expected); if(draw2sigma) smooth_line(expected2); TCanvas *te = new TCanvas("te","te"); te->SetRightMargin(standardmargin); // decorate_mSUGRA(cleanhisto,te,expected,expected2,observed); TH2F *noh = new TH2F("noh","noh",1,1,2,1,1,2); SugarCoatThis(te,10,noh,observed); // expected->Draw("c"); // observed->Draw("c"); stringstream saveas; if((int)((string)limitmap->GetName()).find("limitmap")>0) { saveas << "Limits/"; if(!isobserved) saveas << "expected/expected_"; saveas << "final_exclusion_for_JZB_geq_" << ((string)limitmap->GetName()).substr(((string)limitmap->GetName()).find("limitmap")+8,10); } else { saveas << "Limits/"; if(!isobserved) saveas << "expected/expected"; saveas << "final_exclusion_for_bestlimits"; } CompleteSave(te,saveas.str()); delete te; TCanvas *overview = new TCanvas("overview","overview",1500,1000); set_range(crosssection,true,false); set_range(limits,true,false); set_range(limitmap,true,false); overview->Divide(3,2); overview->cd(1); overview->cd(1)->SetLogz(1); absXS->GetZaxis()->SetRangeUser(0.0001,100); absXS->Draw("COLZ"); TText *title0 = write_title("Cross Section"); title0->Draw("same"); overview->cd(2); FilterEfficiency->GetZaxis()->SetRangeUser(0.01,0.7); FilterEfficiency->Draw("COLZ"); TText *title0aa = write_title("Filter #epsilon"); title0aa->Draw("same"); overview->cd(3); overview->cd(3)->SetLogz(1); crosssection->GetZaxis()->SetRangeUser(0.0001,100); crosssection->Draw("COLZ"); TText *title0a = write_title("Filter #epsilon x Cross Section"); title0a->Draw("same"); overview->cd(4); overview->cd(4)->SetLogz(1); limits->GetZaxis()->SetRangeUser(0.01,100); limits->Draw("COLZ"); TText *title1 = write_title("Cross Section Upper Limit"); title1->Draw("same"); overview->cd(5); limitmap->Draw("COLZ"); TText *title2 = write_title("UL/XS"); title2->Draw("same"); observed->Draw("c"); overview->cd(6); overview->cd(6)->SetRightMargin(standardmargin); // decorate_mSUGRA(cleanhisto,overview->cd(4),expected,expected2,observed); SugarCoatThis(overview->cd(6),10,noh,observed); // observed->Draw("c"); stringstream saveas2; if((int)((string)limitmap->GetName()).find("limitmap")>0) { saveas2 << "Limits/"; if(!isobserved) saveas << "expected/expected_"; saveas2 << "exclusion_overview_for_JZB_geq_" << ((string)limitmap->GetName()).substr(((string)limitmap->GetName()).find("limitmap")+8,10); } else { saveas2 << "Limits/"; if(!isobserved) saveas << "expected/expected_"; saveas2 << "exclusion_overview_for_bestlimits"; } CompleteSave(overview,saveas2.str()); delete overview; delete noh; delete crosssection; delete absXS; delete FilterEfficiency; }