void DrawSmooth(Int_t pad, const char *title, const char *xt, const char *yt) { vC1->cd(pad); TH1F *vFrame = gPad->DrawFrame(0,-130,60,70); vFrame->SetTitle(title); vFrame->SetTitleSize(0.2); vFrame->SetXTitle(xt); vFrame->SetYTitle(yt); grin->Draw("P"); grout->DrawClone("LPX"); }
void set_style(TGraph* tmg) { TH1F* h = tmg->GetHistogram(); h->GetXaxis()->SetTitleSize(0.06); h->GetXaxis()->SetTitleFont(62); h->GetXaxis()->SetLabelSize(0.05); h->GetYaxis()->SetTitleSize(0.06); h->GetYaxis()->SetTitleFont(62); h->GetYaxis()->SetLabelSize(0.05); h->SetTitleFont(22,"t"); h->SetTitleSize(0.08,"t"); h->GetXaxis()->SetNdivisions(610); }
TH1F* makehist( string id, int ndf ) { int hits_count = ndf + 2; TString hist_name, cut, title; hist_name += id; hist_name += "_chisq_"; hist_name += hits_count; hist_name += "hits"; cut += id; cut += "_hits_count == "; cut += hits_count; float min_x = 0; float max_x = (ndf == 2) ? 2.0 : 0.5; TH1F *hist = new TH1F(hist_name.Data(), cut, 1000, min_x, max_x); events->Draw(Form("%s_chisq >> %s", id.c_str(), hist_name.Data()), cut); if (hits_count > 3) { TF1 *func = new TF1("func", "[0]*exp([1]*x)+[2]"); TFitResultPtr fit = hist->Fit(func, "SQ", "", 0.0, 0.5); // S - return fit result, Q - quiet std::cout << hist_name << "\tslope: " << fit->Parameter(1) << "\tadd const: " << fit->Parameter(2) << std::endl; } if (id[1] == '3') { title += "Left "; } else { title += "Right "; } title += id[2]; title += " ("; title += cut; title += ")"; hist->SetTitle(title); hist->SetLabelSize(0.04, "X"); hist->SetLabelSize(0.04, "Y"); hist->SetTitleSize(0.05, "X"); hist->SetTitleSize(0.05, "Y"); hist->SetTitleOffset(0.9, "X"); hist->SetTitleOffset(1.1, "Y"); hist->GetXaxis()->SetTitle("#chi^2, [mm]"); hist->GetYaxis()->SetTitle("N"); return hist; }
void DrawSmooth(Int_t pad, const char *title, const char *xt, const char *yt) { vC1->cd(pad); TH1F *vFrame = gPad->DrawFrame(0,0,15,150); vFrame->SetTitle(title); vFrame->SetTitleSize(0.2); vFrame->SetXTitle(xt); vFrame->SetYTitle(yt); grxy->SetMarkerColor(kBlue); grxy->SetMarkerStyle(21); grxy->SetMarkerSize(0.5); grxy->Draw("P"); grin->SetMarkerColor(kRed); grin->SetMarkerStyle(5); grin->SetMarkerSize(0.7); grin->Draw("P"); grout->DrawClone("LP"); }
/*#include <TSystem.h> // interface to OS #include <TStyle.h> // class to handle ROOT plotting styles#include <TFile.h> // file handle class #include <TTree.h> // class to access ntuples #include <TBenchmark.h> // class to track macro running statistics #include <TH1D.h> // histogram class #include <vector> // STL vector class #include <iostream> // standard I/O #include <iomanip> // functions to format standard I/O #include <fstream> // functions for file I/O #include <string> // C++ string class #include <sstream> // class for parsing strings #include <TRandom3.h> #include <TGaxis.h> #include "Math/LorentzVector.h" // 4-vector class #include "../Utils/MyTools.hh" // various helper functions #include "../Utils/CPlot.hh" // helper class for plots #include "../Utils/MitStyleRemix.hh" // style settings for drawing #include "../Utils/WModels.hh" // definitions of PDFs for fitting #include "../Utils/RecoilCorrector.hh" // class to handle recoil corrections for MET */ void W_MET_Ratio() { TCanvas *c = new TCanvas("c","c",800,800); c->Divide(1,2,0,0); c->cd(1)->SetPad(0,0.3,1.0,1.0); c->cd(1)->SetTopMargin(0.1); c->cd(1)->SetBottomMargin(0.01); c->cd(1)->SetLeftMargin(0.15); c->cd(1)->SetRightMargin(0.07); c->cd(1)->SetTickx(1); c->cd(1)->SetTicky(1); c->cd(2)->SetPad(0,0,1.0,0.3); c->cd(2)->SetTopMargin(0.05); c->cd(2)->SetBottomMargin(0.45); c->cd(2)->SetLeftMargin(0.15); c->cd(2)->SetRightMargin(0.07); c->cd(2)->SetTickx(1); c->cd(2)->SetTicky(1); c->cd(2)->SetGridy(); TLegend * lgc = new TLegend(0.59, 0.67, 0.89, 0.89); lgc->SetTextSize(0.03); lgc->SetBorderSize(0); lgc->SetFillColor(0); // TFile *file = new TFile("../ElectronHighPU/Ele_RD_HighPU_A_Analysis.root"); TFile *file = new TFile("./ElectronHighPU_N/Ele_WToENu_S10_Analysis.root"); ///////////////Original Plot//////////////////////// c->cd(1); lgc->AddEntry(h1_W_Neut_pt1,"UnCorrected"); h1_W_Neut_pt1->SetYTitle("Events"); h1_W_Neut_pt1->SetFillColor(kWhite); h1_W_Neut_pt1->SetMarkerColor(kBlack); h1_W_Neut_pt1->SetMarkerStyle(1); h1_W_Neut_pt1->SetLineWidth(2); h1_W_Neut_pt1->Draw(); lgc->AddEntry(h1_W_Neut_pt_Corr,"Corrected"); h1_W_Neut_pt_Corr->SetLineColor(kRed); h1_W_Neut_pt_Corr->SetFillColor(kWhite); h1_W_Neut_pt_Corr->SetMarkerColor(kRed); h1_W_Neut_pt_Corr->SetMarkerStyle(1); h1_W_Neut_pt_Corr->SetLineWidth(2); h1_W_Neut_pt_Corr->Draw("same"); lgc->Draw(); /////////////////////////////////////////////////////// c->cd(2); TH1F * h1_Ori = (TH1F*)file->Get("h1_W_Neut_pt1"); TH1F * h1_Corr = (TH1F*)file->Get("h1_W_Neut_pt_Corr"); int Nbins = h1_Ori->GetNbinsX(); TH1F * ratio = new TH1F("ratio","", Nbins, h1_Ori->GetXaxis()->GetXmin(), h1_Ori->GetXaxis()->GetXmax()); ratio->Divide(h1_Ori, h1_Corr); ratio->SetXTitle("N_vtx"); ratio->SetMaximum(2); ratio->SetMinimum(0); ratio->SetNdivisions(10,"X"); ratio->SetNdivisions(4,"Y"); ratio->SetLabelSize(0.09,"XY"); ratio->SetTitleSize(0.12,"X"); ratio->SetMarkerStyle(20); ratio->SetMarkerSize(0.7); ratio->SetMarkerColor(kBlue); ratio->Draw("P"); // c->SaveAs("W_MET_Ratio_RD.png"); c->SaveAs("W_MET_Ratio_MC.png"); }
int compare(){ gROOT->SetStyle("Plain"); // For the canvas: gStyle->SetCanvasColor(0); // For the Pad: gStyle->SetPadColor(0); gStyle->SetPadTickX(1); gStyle->SetPadTickY(1); gStyle->SetPadBorderSize(2); // For the frame: gStyle->SetFrameBorderMode(0); // For the statistics box: gStyle->SetOptStat(0); // Margins: gStyle->SetPadBottomMargin(0.25); gStyle->SetPadTopMargin(0.15); gStyle->SetPadLeftMargin(0.15); gStyle->SetPadRightMargin(0.1); // For the Global title: gStyle->SetOptTitle(0); gStyle->SetTitleColor(1); gStyle->SetTitleFillColor(10); gStyle->SetTitleTextColor(1); gStyle->SetTitleFont(42); gStyle->SetTitleFontSize(0.05); gStyle->SetTitleBorderSize(0); // For the axis gStyle->SetNdivisions(510, "X"); gStyle->SetNdivisions(510, "Y"); gStyle->SetTickLength(0.03); // For the axis titles: gStyle->SetTitleOffset(1.4, "X"); gStyle->SetTitleOffset(1.2, "Y"); gStyle->SetTitleOffset(0.5, "Z"); gStyle->SetTitleSize(0.061, "XYZ"); gStyle->SetTitleFont(42, "XYZ"); // For the axis labels: gStyle->SetLabelSize(0.04, "XYZ"); gStyle->SetLabelOffset(0.01, "XYZ"); gStyle->SetLabelFont(42, "XYZ"); // For the legend gStyle->SetLegendBorderSize(0); gROOT->ForceStyle(); //////////////////////////////////////// TFile *f1 = new TFile("output_GetPrediction/prediction_histos_MyTest_data_METsoftSmeared_noAngSmear_N20_CR_v3.root", "READ", "", 0); TFile *f2 = new TFile("output_GetPrediction/bkg.root", "READ", "", 0); selection = (TH1F*) f1->FindObjectAny("VBF_MET_presel_4JV_dPhiSide_selection"); prediction = (TH1F*) f1->FindObjectAny("VBF_MET_presel_4JV_dPhiSide_prediction_px"); background2 = (TH1F*) f2->FindObjectAny("met_check_inVR_rebin"); TH1F* background = new TH1F(*prediction); background->Reset(); for (int i = 1; i <= background->GetXaxis()->GetNbins(); ++i) { float x = background->GetXaxis()->GetBinCenter(i); int j = background2->GetXaxis()->FindBin(x); float value = background2->GetBinContent(j); float error = background2->GetBinError(j); background->SetBinContent(i,value); background->SetBinError(i,error); } //double MinX = selection->GetXaxis()->GetBinLowEdge(1); //double MaxX = selection->GetXaxis()->GetBinUpEdge(selection->GetXaxis()->GetNbins()); double MinX = 150; double MaxX = 500; double BinWidth = selection->GetXaxis()->GetBinWidth(selection->GetXaxis()->GetNbins()); double MaxY = prediction->GetBinContent(prediction->GetMaximumBin()); double MaxYsel = selection->GetBinContent(selection->GetMaximumBin()); if (MaxY < MaxYsel) MaxY = MaxYsel; double YRangeMax = 2.*pow(10., int(log10(MaxY))+2); double MinY = prediction->GetBinContent(prediction->GetMinimumBin()); double MinYsel = selection->GetBinContent(selection->GetMinimumBin()); if (MinY > MinYsel) MinY = MinYsel; if (MinY < 0.001) MinY = 0.001; double YRangeMin = 0.5*pow(10., int(log10(MinY))-2); TString titlePrediction; TString titleSelection; TString titleBackground; TString RatioTitle; TString LumiTitle; TString Title; TString xTitle; TString yTitle; LumiTitle = "ATLAS internal, L = 36.1 fb^{ -1}, #sqrt{s} = 13 TeV"; Title = "3 jets, 1.8<#Delta#phi(jj)<2.7, MET>150 GeV, M(jj)>0.6 TeV, p_{T}^{3rd}<50 GeV"; xTitle = "#slash{E}_{T} (GeV)"; yTitle = "Events"; titlePrediction = "Data-driven Pred."; titleSelection = "Data"; titleBackground = "non-QCD background"; RatioTitle = "(Pred-Data)/Data"; static Int_t c_LightBrown = TColor::GetColor( "#D9D9CC" ); static Int_t c_LightGray = TColor::GetColor( "#DDDDDD" ); selection->SetAxisRange(MinX, MaxX, "X"); selection->GetYaxis()->SetRangeUser(YRangeMin, YRangeMax); selection->SetMarkerStyle(20); selection->SetMarkerSize(0.9); selection->SetMarkerColor(kBlack); selection->SetXTitle(xTitle); selection->SetYTitle(yTitle); prediction->SetAxisRange(MinX, MaxX, "X"); prediction->GetYaxis()->SetRangeUser(YRangeMin, YRangeMax); prediction->SetFillColor(c_LightGray); prediction->SetTitle(""); prediction->SetXTitle(xTitle); prediction->SetYTitle(yTitle); background->SetAxisRange(MinX, MaxX, "X"); background->GetYaxis()->SetRangeUser(YRangeMin, YRangeMax); background->SetTitle(""); background->SetLineColor(kRed); background->SetLineWidth(2); background->SetXTitle(xTitle); background->SetYTitle(yTitle); TCanvas *c = new TCanvas("ca", "Comparison and ratio of two histos", 700, 700); TPad *pad1 = new TPad("pad1a", "pad1a", 0, 0.35, 1, 1); pad1->SetLogy(); pad1->SetBottomMargin(0); pad1->Draw(); pad1->cd(); prediction->DrawCopy("hist"); selection->Draw("same"); prediction->SetFillColor(kAzure-3); prediction->SetFillStyle(3354); prediction->DrawCopy("e2same"); background->Scale(36.1/32.6); background->Draw("same"); prediction->SetFillStyle(1001); //prediction->SetFillColor(c_LightBrown); prediction->SetFillColor(c_LightGray); //TLegend* leg1 = new TLegend(0.48, 0.63, 0.95, 0.83); TLegend* leg1 = new TLegend(0.44, 0.63, 0.91, 0.83); leg1->SetFillStyle(0); leg1->SetLineStyle(1); leg1->SetTextFont(42); //leg1->SetTextSize(0.04); leg1->SetTextSize(0.045); leg1->AddEntry(prediction, titlePrediction, "lf"); leg1->AddEntry(selection, titleSelection, "lep"); leg1->AddEntry(background, titleBackground, "l"); leg1->Draw("same"); TPaveText* pt = new TPaveText(0.11, 0.98, 0.95, 0.86, "NDC"); pt->SetBorderSize(0); pt->SetFillStyle(0); pt->SetTextAlign(12); pt->SetTextSize(0.045); pt->AddText(Title); pt->AddText(LumiTitle); pt->Draw(); c->cd(); TPad *pad2 = new TPad("pad2a", "pad2a", 0, 0, 1, 0.35); pad2->SetTopMargin(0); pad2->Draw(); pad2->cd(); TH1F* r = new TH1F(*prediction); r->SetTitle(""); r->SetLabelSize(0.08, "XYZ"); r->SetLabelOffset(0.01, "XYZ"); // r->SetTitleSize(0.09, "XYZ"); r->SetTitleSize(0.125, "XYZ"); r->SetTitleOffset(0.95, "X"); r->SetTitleOffset(0.53, "Y"); // r->SetTitleOffset(0.65, "Y"); r->SetTickLength(0.05); r->SetYTitle(RatioTitle); r->SetStats(0); r->SetMarkerStyle(20); r->SetMarkerSize(0.9); r->SetMarkerColor(kBlack); r->Reset(); r->Add(prediction, 1); r->Add(background, 1); r->Add(selection, -1); r->Divide(selection); r->SetMaximum(2.2); r->SetMinimum(-2.2); r->Draw("ep"); TLine l; l.DrawLine(MinX, 0., MaxX+BinWidth, 0.); c->cd(); c->SaveAs("compare.pdf"); return 0; }
void plotCutFlowNotStaggered( FileList fileList , float Lumi_ = 30, float pt1_ = 20., float pt2_ = 15, float DEta_ = 1.0, float Mjj_ = 300. , float jetVeto_ = 15, float signalScale_ = 1.0) { for(int i = 0; i<fileList.size(); i++){ (fileList[i].first)->Close(); delete (fileList[i].first); } TFile* fVBF115 = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_VBFH115.root","READ"); TFile* fVBF135 = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_VBFH135.root","READ"); TFile* fDYJets = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_DYJets-madgraph-50-PU.root","READ"); TFile* fTT = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_TT-madgraph-PU.root","READ"); TFile* fWJets = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_WJets-madgraph-PU.root","READ"); TFile* fT = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_TToBLNu-tW-madhraph-PU.root","READ"); TFile* fQCD = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_QCD-pythia-PU.root","READ"); FileList fileList_; fileList_.push_back( make_pair(fT, make_pair("tW", 10.6 ) )); fileList_.push_back( make_pair(fTT, make_pair("ttbar", 157.5 ) )); fileList_.push_back( make_pair(fDYJets, make_pair("Zjets", 3048.0 ) )); fileList_.push_back( make_pair(fWJets, make_pair("Wjets", 31314.0 ) )); fileList_.push_back( make_pair(fQCD, make_pair("QCD", 349988.0 ) )); fileList_.push_back( make_pair(fVBF115, make_pair("qqH115", 0.1012 ) )); fileList_.push_back( make_pair(fVBF135, make_pair("qqH135", 0.05049) )); TCanvas *c1 = new TCanvas("c1CutFlowNotStaggeredMass","",5,30,650,600); c1->SetGrid(0,0); c1->SetFillStyle(4000); c1->SetFillColor(10); c1->SetTicky(); c1->SetObjectStat(0); c1->SetLogy(1); TPad* pad1 = new TPad("pad1CutFlowNotStaggeredMass","",0.05,0.27,0.96,0.97); TPad* pad2 = new TPad("pad2CutFlowNotStaggeredMass","",0.05,0.02,0.96,0.26); pad1->SetFillColor(0); pad2->SetFillColor(0); pad1->Draw(); pad2->Draw(); pad1->cd(); pad1->SetLogy(1); TLegend* leg = new TLegend(0.60,0.47,0.90,0.85,NULL,"brNDC"); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetFillColor(10); leg->SetTextSize(0.04); leg->SetHeader( "Cut Flow" ); vector<TH1F*> histos; histos.clear(); TH1F* hqqH115 = new TH1F(); TH1F* hqqH135 = new TH1F(); TH1F* hSiml = new TH1F(); vector< pair<string,string> > cutList; cutList.push_back(make_pair("vertexScarpingFilter/totalEvents","good vertex")); cutList.push_back(make_pair("oneMuonFilter/totalEvents","one gl. muon p_{T}>15 GeV")); cutList.push_back(make_pair("noElecFilter/totalEvents","electron veto")); cutList.push_back(make_pair("muonLegFilter/totalEvents","#mu cuts")); cutList.push_back(make_pair("tauLegFilter/totalEvents","#tau cuts")); cutList.push_back(make_pair("atLeastOneDiTauFilter/totalEvents","OS + m_{T} cut")); vector<float> cutFlow; float signalScale = 1; for(unsigned int i = 0 ; i < fileList_.size() ; i++){ signalScale = 1; TFile* currentFile = (TFile*)fileList_[i].first ; if( currentFile->IsZombie() ) continue; TH1F* allEvents = (TH1F*)currentFile->Get("allEventsFilter/totalEvents"); float totalEvents = allEvents->GetBinContent(1); cutFlow.clear(); for(int m = 0; m<cutList.size(); m++){ TH1F* tmph1 = (TH1F*)currentFile->Get( (cutList[m].first).c_str() ); if(tmph1!=0){ cutFlow.push_back( tmph1->GetBinContent(1) ); //cout << tmph1->GetBinContent(1) << endl; } } TTree* currentTree = (TTree*)currentFile->Get("muTauStreamAnalyzer/tree"); string h1Name = "h1_"+(fileList_[i].second).first; TH1F* h1 = new TH1F( h1Name.c_str() ,"", (int)(cutFlow.size()+3) ,0 , cutFlow.size()+3); if( ((fileList_[i].second).first).find("Zjets")!=string::npos ) { h1->SetLineColor(kRed); leg->AddEntry(h1,"MadGraph Z+jets","F"); } if( ((fileList_[i].second).first).find("ttbar")!=string::npos ) { h1->SetLineColor(kBlue); leg->AddEntry(h1,"MadGraph t#bar{t}+jets","F"); } if( ((fileList_[i].second).first).find("Wjets")!=string::npos ) { h1->SetLineColor(kGreen); leg->AddEntry(h1,"MadGraph W+jets","F"); } if( ((fileList_[i].second).first).find("tW")!=string::npos ){ h1->SetLineColor( 44 ); leg->AddEntry(h1,"MadGraph single-top","F"); } if( ((fileList_[i].second).first).find("QCD")!=string::npos ) { h1->SetLineColor(11); leg->AddEntry(h1,"Pythia QCD","F"); } if( ((fileList_[i].second).first).find("qqH115")!=string::npos ) { h1->SetLineColor(kBlack); h1->SetLineStyle(kDashed); h1->SetLineWidth(3.0); signalScale = signalScale_; leg->AddEntry(h1,Form("VBF H(115)#rightarrow#tau#tau X %.0f",signalScale),"l"); } if( ((fileList_[i].second).first).find("qqH135")!=string::npos ) { h1->SetLineColor(kBlack); h1->SetLineStyle(kDotted); h1->SetLineWidth(3.0); signalScale = signalScale_; leg->AddEntry(h1,Form("VBF H(135)#rightarrow#tau#tau X %.0f",signalScale),"l"); } h1->SetBinContent(1,totalEvents); h1->GetXaxis()->SetBinLabel(1,"#sigma*BR*#int L"); for(int m = 0; m<cutFlow.size(); m++){ h1->SetBinContent(m+2,cutFlow[m]); h1->GetXaxis()->SetBinLabel(m+2, (cutList[m].second).c_str() ); } h1->GetXaxis()->SetBinLabel(cutFlow.size()+2,"VBF 1%"); h1->GetXaxis()->SetBinLabel(cutFlow.size()+3,"CJV (15 GeV)"); int nEntries = currentTree->GetEntries() ; std::vector<ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > >* diTauSVfit3; std::vector<ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > >* jets; currentTree->SetBranchAddress("diTauSVfit3P4",&diTauSVfit3); currentTree->SetBranchAddress("jetsIDP4",&jets); for (int n = 0; n < nEntries ; n++) { currentTree->GetEntry(n); if( diTauSVfit3->size() < 1) continue; bool vbfCut = false; bool jetVeto = false; if( jets->size()>1 && (*jets)[0].Et()>pt1_ && (*jets)[1].Et()>pt2_ && abs((*jets)[0].Eta()-(*jets)[1].Eta())>DEta_ && ((*jets)[0]+(*jets)[1]).M()>Mjj_ ) vbfCut = true; for(unsigned k=0; k < jets->size(); k++){ if(k>1 && ( ((*jets)[k].Eta()>(*jets)[1].Eta()+0.5 && (*jets)[k].Eta()<(*jets)[0].Eta()-0.5) || ((*jets)[k].Eta()>(*jets)[0].Eta()+0.5 && (*jets)[k].Eta()<(*jets)[1].Eta()-0.5) ) && (*jets)[k].Et()>jetVeto_ ) jetVeto=true; } if(vbfCut) h1->Fill( cutFlow.size()+1.5 ) ; if(vbfCut && !jetVeto) h1->Fill( cutFlow.size()+2.5 ) ; } h1->Scale( Lumi_ / (totalEvents/((fileList_[i].second).second * signalScale)) ); if(((fileList_[i].second).first).find("qqH115")!=string::npos){ hqqH115=(TH1F*)h1->Clone("hqqH115"); hqqH115 = h1; hqqH115->Sumw2(); continue; } if(((fileList_[i].second).first).find("qqH135")!=string::npos){ hqqH135=(TH1F*)h1->Clone("hqqH135"); hqqH135 = h1; hqqH135->Sumw2(); continue; } if(i==0) hSiml=(TH1F*)h1->Clone("hSiml"); else hSiml->Add(h1); histos.push_back(h1); } //float numData = hData->GetEntries(); //float numSiml = hSiml->Integral(); //float dataToSimlRatio = numData/numSiml; //cout << "data " << numData << " --- simul " << numSiml << endl; hqqH115->SetTitle(Form("CMS Preliminary 2010 #sqrt{s}=7 TeV L=%.0f pb^{-1}",Lumi_)); hqqH115->SetXTitle(""); hqqH115->SetYTitle("Number of events"); hqqH115->SetTitleSize(0.05,"X"); hqqH115->SetTitleSize(0.05,"Y"); hqqH115->SetTitleOffset(0.75,"Y"); hqqH115->SetAxisRange(0.1,hSiml->GetMaximum()*1.2,"Y"); hqqH115->Draw("HIST"); hqqH135->Draw("HISTSAME"); for(int p = 0; p<histos.size(); p++){ histos[p]->Draw("HISTSAME"); } leg->Draw(); pad2->cd(); TH1F* hRatio = new TH1F("hRatio", " ; ; purity", hqqH115->GetNbinsX(), hqqH115->GetXaxis()->GetXmin(), hqqH115->GetXaxis()->GetXmax()); hRatio->SetLineStyle(kDashed); hRatio->SetLineWidth(1.0); hRatio->SetLabelSize(0.12,"X"); hRatio->SetLabelSize(0.10,"Y"); hRatio->SetTitleSize(0.12,"Y"); hRatio->SetTitleOffset(0.36,"Y"); TH1F* hqqH115Clone = (TH1F*)hqqH115->Clone("hqqH115Clone"); TH1F* hqqH135Clone = (TH1F*)hqqH135->Clone("hqqH135Clone"); hqqH115Clone->Divide( hqqH115 ,hSiml,1./signalScale,1.0); hqqH135Clone->Divide( hqqH135 ,hSiml,1./signalScale,1.0); hRatio->SetAxisRange(0.,0.1,"Y"); hRatio->Draw(); hqqH115Clone->Draw("HISTSAME"); hqqH135Clone->Draw("HISTSAME"); if(SAVE) c1->SaveAs("Zmm_CutFlowNotStaggeredMass.png"); }
void plotInclusiveMass( FileList fileList , float Lumi_ = 30) { for(int i = 0; i<fileList.size(); i++){ (fileList[i].first)->Close(); delete (fileList[i].first); } TFile* fVBF115 = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_VBFH115.root","READ"); TFile* fVBF135 = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_VBFH135.root","READ"); TFile* fDYJets = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_DYJets-madgraph-50-PU.root","READ"); TFile* fTT = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_TT-madgraph-PU.root","READ"); TFile* fWJets = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_WJets-madgraph-PU.root","READ"); TFile* fT = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_TToBLNu-tW-madhraph-PU.root","READ"); TFile* fQCD = new TFile("/data_CMS/cms/lbianchini/MuTauStream/treeMuTauStream_QCD-pythia-PU.root","READ"); FileList fileList_; fileList_.push_back( make_pair(fT, make_pair("tW", 10.6 ) )); fileList_.push_back( make_pair(fQCD, make_pair("QCD", 349988.0 ) )); fileList_.push_back( make_pair(fWJets, make_pair("Wjets", 31314.0 ) )); fileList_.push_back( make_pair(fTT, make_pair("ttbar", 157.5 ) )); fileList_.push_back( make_pair(fDYJets, make_pair("Zjets", 3048.0 ) )); fileList_.push_back( make_pair(fVBF115, make_pair("qqH115", 0.1012 ) )); fileList_.push_back( make_pair(fVBF135, make_pair("qqH135", 0.05049) )); TCanvas *c1 = new TCanvas("c1InclusiveMass","",5,30,650,600); c1->SetGrid(0,0); c1->SetFillStyle(4000); c1->SetFillColor(10); c1->SetTicky(); c1->SetObjectStat(0); c1->SetLogy(1); TPad* pad1 = new TPad("pad1InclusiveMass","",0.05,0.27,0.96,0.97); TPad* pad2 = new TPad("pad2InclusiveMass","",0.05,0.02,0.96,0.26); pad1->SetFillColor(0); pad2->SetFillColor(0); pad1->Draw(); pad2->Draw(); pad1->cd(); pad1->SetLogy(1); TLegend* leg = new TLegend(0.60,0.47,0.90,0.85,NULL,"brNDC"); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetFillColor(10); leg->SetTextSize(0.04); leg->SetHeader( "#mu+#tau Inclusive" ); THStack* aStack = new THStack("aStack",Form("CMS Preliminary 2010 #sqrt{s}=7 TeV L=%.0f pb^{-1}",Lumi_)); TH1F* hqqH115 = new TH1F(); TH1F* hqqH135 = new TH1F(); TH1F* hSiml = new TH1F(); float signalScale = 1; for(unsigned int i = 0 ; i < fileList_.size() ; i++){ TFile* currentFile = (TFile*)fileList_[i].first ; if( currentFile->IsZombie() ) continue; TH1F* allEvents = (TH1F*)currentFile->Get("allEventsFilter/totalEvents"); float totalEvents = allEvents->GetBinContent(1); TTree* currentTree = (TTree*)currentFile->Get("muTauStreamAnalyzer/tree"); string h1Name = "h1_"+(fileList_[i].second).first; TH1F* h1 = new TH1F( h1Name.c_str() ,"", 28 , 20, 300); if( ((fileList_[i].second).first).find("Zjets")!=string::npos ) { h1->SetFillColor(kRed); leg->AddEntry(h1,"MadGraph Z+jets","F"); } if( ((fileList_[i].second).first).find("ttbar")!=string::npos ) { h1->SetFillColor(kBlue); leg->AddEntry(h1,"MadGraph t#bar{t}+jets","F"); } if( ((fileList_[i].second).first).find("Wjets")!=string::npos ) { h1->SetFillColor(kGreen); leg->AddEntry(h1,"MadGraph W+jets","F"); } if( ((fileList_[i].second).first).find("tW")!=string::npos ){ h1->SetFillColor( 44 ); leg->AddEntry(h1,"MadGraph single-top","F"); } if( ((fileList_[i].second).first).find("QCD")!=string::npos ) { h1->SetFillColor(11); leg->AddEntry(h1,"Pythia QCD","F"); } if( ((fileList_[i].second).first).find("qqH115")!=string::npos ) { h1->SetLineColor(kBlack); h1->SetLineStyle(kDashed); h1->SetLineWidth(3.0); leg->AddEntry(h1,"VBF H(115)#rightarrow#tau#tau X 100","l"); signalScale = 100; } if( ((fileList_[i].second).first).find("qqH135")!=string::npos ) { h1->SetLineColor(kBlack); h1->SetLineStyle(kDotted); h1->SetLineWidth(3.0); leg->AddEntry(h1,"VBF H(135)#rightarrow#tau#tau X 100","l"); signalScale = 100; } int nEntries = currentTree->GetEntries() ; std::vector<ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > >* diTauSVfit3; currentTree->SetBranchAddress("diTauSVfit3P4",&diTauSVfit3); for (int n = 0; n < nEntries ; n++) { currentTree->GetEntry(n); if( diTauSVfit3->size() < 1) continue; h1->Fill( (*diTauSVfit3)[0].M() ) ; } h1->Scale( Lumi_ / (totalEvents/((fileList_[i].second).second * signalScale)) ); if(((fileList_[i].second).first).find("qqH115")!=string::npos){ hqqH115=(TH1F*)h1->Clone("hqqH115"); hqqH115 = h1; hqqH115->Sumw2(); continue; } if(((fileList_[i].second).first).find("qqH135")!=string::npos){ hqqH135=(TH1F*)h1->Clone("hqqH135"); hqqH135 = h1; hqqH135->Sumw2(); continue; } if(i==0) hSiml=(TH1F*)h1->Clone("hSiml"); else hSiml->Add(h1); aStack->Add(h1); } //float numData = hData->GetEntries(); //float numSiml = hSiml->Integral(); //float dataToSimlRatio = numData/numSiml; //cout << "data " << numData << " --- simul " << numSiml << endl; aStack->Draw("HIST"); hqqH115->Draw("HISTSAME"); hqqH135->Draw("HISTSAME"); TH1F* hStack = (TH1F*)aStack->GetHistogram(); hStack->SetXTitle("SVfit #tau#tau mass"); hStack->SetYTitle(Form("Number of events/%.0f GeV",hStack->GetBinWidth(1))); hStack->SetTitleSize(0.05,"X"); hStack->SetTitleSize(0.05,"Y"); hStack->SetTitleOffset(0.75,"Y"); leg->Draw(); pad2->cd(); TH1F* hRatio = new TH1F("hRatio", " ; ; purity", hStack->GetNbinsX(), hStack->GetXaxis()->GetXmin(), hStack->GetXaxis()->GetXmax()); hRatio->SetLineStyle(kDashed); hRatio->SetLineWidth(1.0); hRatio->SetLabelSize(0.12,"X"); hRatio->SetLabelSize(0.10,"Y"); hRatio->SetTitleSize(0.12,"Y"); hRatio->SetTitleOffset(0.36,"Y"); TH1F* hqqH115Clone = (TH1F*)hqqH115->Clone("hqqH115Clone"); TH1F* hqqH135Clone = (TH1F*)hqqH135->Clone("hqqH135Clone"); hqqH115Clone->Divide( hqqH115 ,hSiml,1./signalScale,1.0); hqqH135Clone->Divide( hqqH135 ,hSiml,1./signalScale,1.0); hRatio->SetAxisRange(0.,0.001,"Y"); hRatio->Draw(); hqqH115Clone->Draw("HISTSAME"); hqqH135Clone->Draw("HISTSAME"); if(SAVE) c1->SaveAs("Zmm_InclusiveMass.png"); }
void plot(){ typedef std::map<double, ROOT::Math::XYZTVector , User::moreStruct>::iterator CImap; TFile* file = new TFile("./vbfTree.root","READ"); TCanvas *c1 = new TCanvas("c1Mass","",5,30,650,600); c1->SetGrid(0,0); c1->SetFillStyle(4000); c1->SetFillColor(10); c1->SetTicky(); c1->SetObjectStat(0); c1->SetLogy(1); TPad* pad1 = new TPad("pad1","",0.05,0.27,0.96,0.97); TPad* pad2 = new TPad("pad2","",0.05,0.02,0.96,0.26); pad1->SetFillColor(0); pad2->SetFillColor(0); pad1->Draw(); pad2->Draw(); pad1->cd(); pad1->SetLogy(1); TLegend* leg = new TLegend(0.55,0.45,0.85,0.75,NULL,"brNDC"); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetFillColor(10); leg->SetTextSize(0.04); leg->SetHeader("#splitline{POWHEG+PYTHIA qqH(115)#rightarrow#tau#tau}{jets matched to tag partons}"); TTree* currentTree = (TTree*)file->Get("vbfJetAnalyzer/tree"); int nEntries = currentTree->GetEntries() ; TH1F* h_TagMult = new TH1F("h_TagMult"," ; multiplicity ; a.u. ", 6,-0.5,5.5); TH1F* h_ptTag1 = new TH1F("h_ptTag1","; p_{T} (GeV/c); a.u. ", 60,0,300); TH1F* h_ptTag2 = new TH1F("h_ptTag2","; p_{T} (GeV/c); a.u. ", 60,0,300); TH1F* h_ptTag3 = new TH1F("h_ptTag3","; p_{T} (GeV/c); a.u. ", 60,0,300); std::vector<ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > >* jets; std::vector<ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > >* tagjets; currentTree->SetBranchAddress("jetsP4", &jets); currentTree->SetBranchAddress("tagjetsP4",&tagjets); for (int n = 0; n < nEntries ; n++) { currentTree->GetEntry(n); std::map<double, ROOT::Math::XYZTVector , User::moreStruct> sortedTagJets; for(unsigned int i = 0; i < tagjets->size(); i++){ sortedTagJets.insert( make_pair( (*tagjets)[i].Et(),(*tagjets)[i] ) ) ; } std::map<double, ROOT::Math::XYZTVector , User::moreStruct> sortedJets; for(unsigned int i = 0; i < jets->size(); i++){ sortedJets.insert( make_pair( (*jets)[i].Et(),(*jets)[i] ) ) ; } h_TagMult->Fill(tagjets->size()); int counter=0; for(CImap it = sortedTagJets.begin(); it!=sortedTagJets.end(); it++){ if( counter==0 ) h_ptTag1->Fill( (it->second).Et() ); if( counter==1 ) h_ptTag2->Fill( (it->second).Et() ); if( counter==2 ) h_ptTag3->Fill( (it->second).Et() ); counter++; } } h_ptTag1->SetLineColor(kRed); h_ptTag1->SetLineStyle(kSolid); h_ptTag2->SetLineColor(kBlue); h_ptTag2->SetLineStyle(kDashed); h_ptTag2->SetLineColor(kMagenta); h_ptTag2->SetLineStyle(kDotted); cout << "1st jet " << h_ptTag1->GetEntries() << endl; cout << "2nd jet " << h_ptTag2->GetEntries() << endl; cout << "3rd jet " << h_ptTag3->GetEntries() << endl; h_ptTag3->Draw("HISTS"); h_ptTag1->Draw("HISTSAME"); h_ptTag2->Draw("HISTSAME"); leg->AddEntry(h_ptTag1,"1st largest-p_{T} jet","L"); leg->AddEntry(h_ptTag2,"2nd largest-p_{T} jet","L"); leg->AddEntry(h_ptTag3,"3rd largest-p_{T} jet","L"); leg->Draw(); pad2->cd(); TH1F* hLow = (TH1F*)h_TagMult->Clone(); hLow->SetLabelSize(0.12,"X"); hLow->SetLabelSize(0.10,"Y"); hLow->SetTitleSize(0.12,"Y"); hLow->SetTitleSize(0.12,"X"); hLow->SetTitleOffset(0.36,"Y"); hLow->SetTitleOffset(0.36,"X"); hLow->Draw("HIST"); }
int main(int argc, char* argv[]){ //int analyzer_stackRatio(){ gROOT->ProcessLine(".x /afs/cern.ch/work/n/nchernya/setTDRStyle.C"); const int nfiles = 16; TString leg_names[nfiles] = {"Data, 13 TeV, bx = 25 ns",/*"powheg, m(H) = 130 GeV","amc@NLO, m(H) = 125 GeV",*/"VBF, m(H) = 125 GeV","t#bar{t}H, H#rightarrow b#bar{b}","t#bar{t}H, non b#bar{b}","QCD","QCD, H_{T}=200-300 GeV","QCD, H_{T}=300-500 GeV","QCD, H_{T}=500-700 GeV","QCD, H_{T}=700-1000 GeV","QCD, H_{T}=1000-1500 GeV","QCD, H_{T}=1500-2000 GeV","QCD, H_{T}=2000-Inf GeV","t#bar{t}","single top (tW)","Z(qq) + jets","Z(ll) + jets"}; //TString file_names[nfiles] = { "data_BTagCSV",/*"Spring15_powheg_M130","Spring15_amcatnlo_M125",*/"VBFHToBB_M-125_13TeV_powheg","QCD_HT100to200","QCD_HT200to300","QCD_HT300to500","QCD_HT500to700","QCD_HT700to1000","QCD_HT1000to1500","QCD_HT1500to2000","QCD_HT2000toInf"}; TString file_names[nfiles] = { "BTagCSV",/*"VBFHToBB_M-130_13TeV_powheg",*/"VBFHToBB_M-125_13TeV_powheg","ttHtobb","ttHtoNbb","DYtoQQ","DYtoLL","ST_tW","TTbar","QCD_HT2000toInf","QCD_HT1500to2000","QCD_HT1000to1500","QCD_HT100to200","QCD_HT700to1000","QCD_HT200to300","QCD_HT500to700","QCD_HT300to500"}; //int FILLCOLOR[nfiles+1] = {1,1,kBlue+0,kCyan+2,kGreen+1,kSpring+8,kSpring+5,kOrange-2,kRed+2,kRed+1,kRed+0, kRed-7,kRed-9,kRed-6,kRed-8,kRed-10}; //int LINECOLOR[nfiles+1] = {1,1,kBlue+0,kCyan+2,kGreen+1,kSpring+8,kSpring+5,kOrange-2,kRed+2,kRed+1,kRed+0, kRed-7,kRed-9,kRed-6,kRed-8,kRed-10}; int FILLCOLOR[nfiles+1] = {1,1,kBlue+0,kCyan+2,kGreen+1,kSpring+8,kSpring+5,kOrange-2,kRed+2,kRed+2,kRed+2,kRed+2,kRed+2,kRed+2,kRed+2,kRed+2}; int LINECOLOR[nfiles+1] = {1,1,kBlue+0,kCyan+2,kGreen+1,kSpring+8,kSpring+5,kOrange-2,kRed+2,kRed+2,kRed+2,kRed+2,kRed+2,kRed+2,kRed+2,kRed+2}; int LINESTYLE[nfiles+1] = {1,1,2,8,1,1,1,1,1,1,1,1,1,1,1,1}; int LINEWIDTH[nfiles+1] = {1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1}; //int FILLSTYLE[nfiles] = {1001,3324,3001,3144,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001}; int FILLSTYLE[nfiles+1] = {1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001}; //int order_legend[nfiles] = {0,1,6,8,10,9,7,5,4,3,2}; //int order[nfiles] = {0,1,2,3,14,13,12,11,10,9,4,8,5,7,6}; //int order_legend[nfiles] = {0,1,2,3,10,12,14,13,11,9,8,7,6,5,4}; int order[nfiles+1] = {0,1,2,3,14,15,13,12,11,10,9,4,8,5,7,6}; int order_legend[nfiles+1] = {0,1,2,3,11,13,15,14,12,10,9,8,7,6,4,5}; int set_type = atoi(argv[1]); //0 - double, 1 - single TString btag[2] = {"v14, DoubleBtag","v14, SingleBtagBlike"}; int region_type=atoi(argv[2]); // 0 - analysis, 1 - control region , top TString region[3]={"_analysis","_controlTop","_controlDY"}; // 0 - analysis, 1 - control region , top; 2 - control region DY for (int i=0;i<nfiles;i++){ if (set_type==1) file_names[i].Prepend("_single"); file_names[i].Prepend(region[region_type]); file_names[i].Prepend("skimmed_tree"); file_names[i].Prepend("../../output_hist/v14/"); // file_names[i].Append("_v14_exclusive_blike_pu"); file_names[i].Append("_v14_exclusive_pu_triggerWeight_single_vtype23"); file_names[i].Append(".root"); } TString trigger[2] = {"RatioDoubleBtag_", "trigWeightRatioSingleBtag_blike_"}; //TString dir_name= "plots_powheg_130/"; TString dir_name= "plots_powheg_125_exclusive"; dir_name.Append(region[region_type]+"/"); //TString dir_name = "plots_amc/"; Float_t lumi = 1280.23; TLegend *leg = new TLegend(0.68,0.6,0.85,0.9); //TLegend *leg = new TLegend(0.4,0.6,0.62,0.9); leg->SetFillColor(0); leg->SetBorderSize(0); leg->SetTextSize(0.04); TLegend *leg2 = new TLegend(0.68,0.6,0.85,0.9); leg2->SetFillColor(0); leg2->SetBorderSize(0); leg2->SetTextSize(0.04); const int nhistos = 71; //40//52 TString hist_names[nhistos]={"hJet1_pt","hJet2_pt","hJet3_pt","hJet4_pt","hJet1_eta","hJet2_eta","hJet3_eta","hJet4_eta","hJet1_phi","hJet2_phi","hJet3_phi","hJet4_phi","hMqq", "hEtaQQ", "hPhiBB","hMbb","hbtag","hbtag2","hcosOqqbb","hEtaQB1", "hEtaQB2", "hPhiQB1", "hPhiQB2","hx1","hx2","hVB1_mass","hVB2_mass","hEtot","hPxtot","hPytot","hPztot","hJet5_pt","hPtqqbb","hEtaqqbb","hPhiqqbb","hJet1_pt_bin","hJet2_pt_bin","hJet3_pt_bin","hJet4_pt_bin", "hMqq_bin","hEtaSoftJets", "hPtSoftJets","hMassSoftJets","hHTsoft","hSoft_n2","hSoft_n5","hSoft_n10","hqgl","hqgl2", "hPtSoftJets2","hPtSoftJets3","hPVs", "hJet1q_pt", "hJet1q_eta", "hJet1q_ptd", "hJet1q_axis2", "hJet1q_mult", "hJet2q_pt", "hJet2q_eta", "hJet2q_ptd", "hJet2q_axis2", "hJet2q_mult","hMbb_regVBF","hMbb_regVBF_fsr","hblike1","hblike2", "hmet", "hselLeptons_tightId" , "hselLeptons_relIso03" , "hselLeptons_chargedHadRelIso03", "hselLeptons_pfRelIso03"}; TString hist_names_sum[nhistos]={}; TString sum_histos_names[nhistos]={}; std::string hist_names_sort[nhistos]; for (int i=0;i<nhistos;i++){ hist_names_sort[i] = hist_names[i]; hist_names_sum[i] = hist_names[i]; hist_names_sum[i].Append("_sum"); sum_histos_names[i] = hist_names[i]; sum_histos_names[i].Append("_sum0"); } Float_t discriminators[nhistos]; TString stacks_names[nhistos]; for (int i=0;i<nhistos;i++){ stacks_names[i] = hist_names[i]; stacks_names[i].Prepend("s"); } TString output_names[nhistos]; for (int i=0;i<nhistos;i++){ output_names[i] = hist_names[i]; output_names[i].Prepend(dir_name); output_names[i].Prepend(trigger[set_type]); output_names[i].Append(region[region_type]); output_names[i].Append(".png"); } TH1F *data_histos[nhistos]; TH1F *data_histos2[nhistos]; TH1F *signal_histos[nhistos]; TH1F *signal_histos2[nhistos]; TH1F *tthbb_histos[nhistos]; TH1F *tthnbb_histos[nhistos]; TH1F *sum_histos[nhistos]; TH1F *histos_forUnc[nhistos]; TH1F *histos_for_legened[nhistos]; TH1F *discr_histos[nhistos];//Mqq,delta eta, delta phi, qgl, btag //12,13,14,21,22 TH1F *hBkgVis[nhistos]; TH1F *hBkgUncUp[nhistos]; TH1F *hBkgUncLo[nhistos]; int files=0; THStack *stacks[nhistos]; for (int i=0;i<nhistos;++i){ stacks[i] = new THStack(stacks_names[i],""); } Double_t totalBG=0.; Double_t totalQCD=0.; Double_t totalMC=0.; Double_t totalData=0.; Double_t totalDataQCD=0.; ofstream out_efficiency; ofstream out_discrimination; out_efficiency.open(trigger[set_type]+dir_name+"efficiency.txt"); Float_t MC_data[2] = {1.,1.};////////////for efficiency //Float_t MC_data[2] = {1./0.708,1./.9};////////////TO BE CHANGED //Float_t MC_data[2] = {1./0.704,1./.899};////////////for trigger logic //Float_t MC_data[2] = {1./0.703,1./.964};////////////for blike single btag logic Float_t lumi_qcd=lumi/MC_data[set_type]; do{ TFile *file_initial = new TFile(file_names[files]); // file_initial->ls(); TH1F *histos[100]; for (int hist=0;hist<nhistos;++hist){ if (region_type==2) ((TH1F*)file_initial->Get(hist_names[hist]))->Rebin(2); histos[hist] = (TH1F*)file_initial->Get(hist_names[hist])->Clone("h"); if (files==0) data_histos[hist] = (TH1F*)file_initial->Get(hist_names[hist])->Clone("data"); if ((files>0)&&(files<7))histos[hist]->Scale(lumi); if (files>=7)histos[hist]->Scale(lumi_qcd); if (files==1) sum_histos[hist] = (TH1F*)histos[hist]->Clone(sum_histos_names[hist]); if (files>1) sum_histos[hist]->Add(histos[hist]); if (files>0) histos[hist]->Sumw2(kFALSE); if (hist==4) cout<<files<<" "<<histos[4]->Integral() <<endl; if (files==1) { signal_histos[hist] = (TH1F*)file_initial->Get(hist_names[hist])->Clone(hist_names_sum[hist]+"newhist"); signal_histos[hist]->Scale(lumi); signal_histos[hist]->Sumw2(kFALSE); signal_histos[hist]->SetLineColor(LINECOLOR[files]); signal_histos[hist]->SetLineStyle(LINESTYLE[files]); signal_histos2[hist]=(TH1F*)signal_histos[hist]->Clone("signalHist2"); } if (files==2) { tthbb_histos[hist] = (TH1F*)file_initial->Get(hist_names[hist])->Clone(hist_names_sum[hist]+"tthb"); tthbb_histos[hist]->Scale(lumi); tthbb_histos[hist]->Sumw2(kFALSE); tthbb_histos[hist]->SetLineColor(LINECOLOR[files]); tthbb_histos[hist]->SetLineStyle(LINESTYLE[files]); } if (files==3) { tthnbb_histos[hist] = (TH1F*)file_initial->Get(hist_names[hist])->Clone(hist_names_sum[hist]+"tthnb"); tthnbb_histos[hist]->Scale(lumi); tthnbb_histos[hist]->Sumw2(kFALSE); tthnbb_histos[hist]->SetLineColor(LINECOLOR[files]); tthnbb_histos[hist]->SetLineStyle(LINESTYLE[files]); } histos[hist]->SetLineColor(LINECOLOR[files]); histos[hist]->SetLineStyle(LINESTYLE[files]); histos[hist]->SetLineWidth(LINEWIDTH[files]); histos[hist]->SetFillStyle(FILLSTYLE[files]); if ((files!=0)) histos[hist]->SetFillColor(FILLCOLOR[files]); if (files==0) { histos[hist]->SetMarkerStyle(20); data_histos[hist]->SetLineColor(1); data_histos[hist]->SetMarkerStyle(20); data_histos[hist]->SetMarkerSize(.8); } if (files>=4) stacks[hist]->Add(histos[hist]); if (hist==0) histos_for_legened[files] = (TH1F*)histos[0]->Clone("newd"); if (files==4) discr_histos[hist] = (TH1F*)file_initial->Get(hist_names[hist])->Clone("discr"); if (files>4) discr_histos[hist]->Add(histos[hist]); } if (files>3) totalBG+=histos[4]->Integral(); if (files>6) totalQCD+=histos[4]->Integral(); if (files>0) totalMC+=histos[4]->Integral(); if (files==0) {totalData+=histos[4]->Integral(); totalDataQCD+=histos[4]->Integral();} if ((files>0)&&(files<7)) {totalDataQCD-=histos[4]->Integral();} if (files==0) out_efficiency<<"Sample & \t\t\t yield(per "<< lumi<<" $pb^{-1}$)"<<endl; if (files==0) out_efficiency<<leg_names[order[files]]<<"&\t \t \t"<< std::setprecision(5)<<histos[4]->Integral() <<endl; else out_efficiency<<leg_names[order[files]]<<"&\t\t\t "<<std::setprecision(5)<<histos[4]->Integral()<<endl; if (files==nfiles-1) out_efficiency<<"Total BG"<<"&\t \t \t "<<std::setprecision(5)<<totalBG<<endl; if (files==nfiles-1) out_efficiency<<"Total MC"<<"&\t \t \t "<<std::setprecision(5)<<totalMC<<endl; if (files==nfiles-1) out_efficiency<<"Data/MC"<<"&\t \t \t "<<std::setprecision(3)<<totalData/totalMC<<endl; if (files==nfiles-1) out_efficiency<<"DataQCD/QCD"<<"&\t \t \t "<<std::setprecision(3)<<totalDataQCD/totalQCD<<endl; files++; }while (files<nfiles); out_efficiency.close(); for (int hist=0;hist<nhistos;hist++){ hBkgUncUp[hist] = (TH1F*)sum_histos[hist]->Clone("hBkgUncUp"); hBkgUncLo[hist] = (TH1F*)sum_histos[hist]->Clone("hBkgUncLo"); hBkgVis[hist] = (TH1F*)sum_histos[hist]->Clone("hbkgVis"); for(int i=0;i<hBkgUncUp[hist]->GetNbinsX();i++) { float e = 0.0; if (sum_histos[hist]->GetBinContent(i+1) != 0) { e = sum_histos[hist]->GetBinError(i+1)/sum_histos[hist]->GetBinContent(i+1); } hBkgUncUp[hist]->SetBinContent(i+1,e); hBkgUncLo[hist]->SetBinContent(i+1,-e); } hBkgVis[hist]->SetMarkerSize(0); hBkgVis[hist]->SetFillColor(kBlack); hBkgVis[hist]->SetFillStyle(3004); hBkgUncUp[hist]->SetLineColor(kBlack); hBkgUncUp[hist]->SetLineWidth(1); hBkgUncUp[hist]->SetFillColor(kBlack); hBkgUncUp[hist]->SetFillStyle(3004); hBkgUncLo[hist]->SetLineColor(kBlack); hBkgUncLo[hist]->SetLineWidth(1); hBkgUncLo[hist]->SetFillColor(kBlack); hBkgUncLo[hist]->SetFillStyle(3004); } //Float_t TSF[2] = {0.452433,0.525697}; Float_t TSF[2] = {1.,1.}; Float_t kfactors[2] = {0.,0.}; kfactors[set_type] = 1./(MC_data[set_type] * TSF[set_type]); cout<<"kfactor = "<<kfactors[set_type]<<endl; cout<<"Data/MC = "<< MC_data[set_type]<<endl; //lumi/=kfactors[set_type]; for (int i=0;i<nfiles;i++){ if (i==0) leg->AddEntry(histos_for_legened[order_legend[i]],leg_names[i],"P"); if (i>11) { // else if ((i==1)||(i==2)||(i==3)) leg->AddEntry(histos_for_legened[order_legend[i]],leg_names[i],"L"); leg->AddEntry(histos_for_legened[order_legend[i]],leg_names[i],"F"); } } leg->AddEntry(histos_for_legened[order_legend[4]],leg_names[4],"F"); leg->AddEntry(hBkgUncUp[0],"MC stat. unc.","F"); for (int i=0;i<nfiles;i++){ if ((i>=4) && (i<=11)) { leg2->AddEntry(histos_for_legened[order_legend[i]],leg_names[i],"F"); } } for (int d=0;d<nhistos;d++){ discriminators[d] = Discr(discr_histos[d],signal_histos2[d]); } bubblesort(discriminators, hist_names_sort,nhistos); out_discrimination.open(trigger[set_type]+dir_name+"discrimination.txt"); for (int d=0;d<nhistos;d++){ if (d==0) out_discrimination<<"Variable &\t d"<<endl; out_discrimination<<"$"<<hist_names_sort[d]<<"$"<<" & \t "<< std::setprecision(2)<< discriminators[d]<<endl; } out_discrimination.close(); TLatex* tex = new TLatex(0.95,0.95,"13 TeV, bx = 25 ns, 1280.23 pb^{-1}"); tex->SetNDC(); tex->SetTextAlign(35); tex->SetTextFont(42); tex->SetTextSize(0.05); tex->SetLineWidth(2); TLatex *tex1 = new TLatex(0.2,0.84,"CMS"); tex1->SetNDC(); tex1->SetTextAlign(20); tex1->SetTextFont(61); tex1->SetTextSize(0.07); tex1->SetLineWidth(2); TLatex* tex2 = new TLatex(0.27,0.76,"Work in progress"); tex2->SetNDC(); tex2->SetTextAlign(20); tex2->SetTextFont(52); tex2->SetTextSize(0.045); tex2->SetLineWidth(2); // TLatex* tex_file = new TLatex(0.3,0.95,"v13, DoubleBtag"); TLatex* tex_file; if (set_type==0) tex_file = new TLatex(0.32,0.95, btag[set_type]); if (set_type==1) tex_file = new TLatex(0.38,0.95, btag[set_type]); tex_file->SetNDC(); tex_file->SetTextAlign(35); tex_file->SetTextFont(42); tex_file->SetTextSize(0.05); tex_file->SetLineWidth(2); TString temp_str; temp_str.Form("%2.2f",kfactors[set_type]); // temp_str.Form("%2.2f",(1./MC_data[set_type])); TString k_factor_str = temp_str.Prepend("QCD MC #times "); TLatex* tex_k = new TLatex(0.35,0.68,k_factor_str); tex_k->SetNDC(); tex_k->SetTextAlign(35); tex_k->SetTextFont(42); tex_k->SetTextSize(0.05); tex_k->SetLineWidth(2); for (int i=0;i<nhistos;i++){ temp_str.Form("%2.2f",Discr(discr_histos[i],signal_histos2[i])); TString disc_value = temp_str.Prepend(" d = "); TLatex *disc_value_text = new TLatex(0.92,0.903,disc_value); disc_value_text->SetNDC(); disc_value_text->SetTextAlign(35); disc_value_text->SetTextFont(42); disc_value_text->SetTextSize(0.04); disc_value_text->SetLineWidth(2); TCanvas *c1 = new TCanvas(); c1->SetBottomMargin(.1); c1->cd(); // if ((i!=51)&&(i<=65)/*||(i!=15)||(i!=63)||(i!=62)*/) c1->SetLogy(); TPad *pad1 = new TPad("pad1","pad1", 0, 0.3, 1, 1.0); pad1->SetBottomMargin(0); // Upper and lower plot are joined // if ((i!=51)&&(i<=65)/*&&(i!=15)&&(i!=63)&&(i!=62)*/) pad1->SetLogy(); pad1->SetBottomMargin(.03); pad1->SetTopMargin(0.06); pad1->SetTicks(1,1); pad1->Draw(); // Draw the upper pad: pad1 pad1->cd(); Double_t xmin = signal_histos[i]->GetBinCenter(0); Double_t xmax = signal_histos[i]->GetBinCenter(signal_histos[i]->GetNbinsX())*1.02; // if (i==70) {xmin=-2.;xmax=0.5;} // if (i==68) {xmin=0.;xmax=0.6;} if (i==66) {xmin=0.;xmax=400;} TH1F *frame = new TH1F("frame","",1,xmin,xmax); frame->SetMinimum(1e-4); frame->SetMaximum(1e18); // if ((i==51)||(i>65)/*||(i==15)||(i==63)||(i==62)*/) { frame->SetMinimum(0.); frame->SetMaximum((hBkgVis[i]->GetMaximum())*1.7); // if (set_type==1) frame->SetMaximum((hBkgVis[i]->GetMaximum())*1.7); // } if ((i>67)/*||(i==15)||(i==63)||(i==62)*/) { frame->SetMaximum(data_histos[i]->GetBinContent(9)*5); if (set_type==1) frame->SetMaximum(hBkgVis[i]->GetBinContent(9)*5); } frame->GetYaxis()->SetTitleOffset(0.9); frame->GetXaxis()->SetTitleOffset(0.91); frame->SetStats(0); frame->GetXaxis()->SetNdivisions(0); frame->SetTitleFont(42,"x"); frame->SetTitleFont(42,"y"); frame->SetTitleSize(0.06, "XYZ"); // frame->SetXTitle(signal_histos[i]->GetXaxis()->GetTitle()); if ((i<4))frame->SetYTitle("Events / 20 GeV");else if (i==37)frame->SetYTitle("Events / 20 GeV");else if (i==41)frame->SetYTitle("Events / 20 GeV");else if ((i>=4) && (i<8)) frame->SetYTitle("Events / 0.5");else if (i==15) frame->SetYTitle("Events / 5 GeV");else if ((i>=8) && (i<12)) frame->SetYTitle("Events / 0.2");else if (i==40) frame->SetYTitle("Events / 100 GeV");else if ((i==10)||(i==12)||(i==16)||(i==17)||(i==18) || (i==20) || (i==25) || (i==26) || (i==27) || (i==35) || (i==36) ||(i==38) || (i==39)) frame->SetYTitle("Events / 10 GeV"); else if ((i==13)||(i==14)) frame->SetYTitle("Events / 0.1"); else if ((i==21)||(i==22)) frame->SetYTitle("Events / 0.05"); else if ((i==23)||(i==24)) frame->SetYTitle("Events / 0.01"); else if (i==28) frame->SetYTitle("Events / 0.02"); else if ((i==29) || (i==30) || (i==31) || (i==32) )frame->SetYTitle("Events / 0.1");else if ((i==33) || (i==33))frame->SetYTitle("Events / 0.01"); else frame->SetYTitle("Events"); frame->Draw(); //tex_k->Draw(); // stacks[i]->Scale(TSF[set_type]); // stacks[i]->Scale(kfactors[set_type]); // leg2->Draw("same"); stacks[i]->Draw("same"); tex->Draw(); tex1->Draw(); tex2->Draw(); tex_file->Draw(); leg->Draw("same"); // signal_histos[i]->Draw("same"); // tthbb_histos[i]->Draw("same"); // tthnbb_histos[i]->Draw("same"); /////////////////cross check of stupid THStack////// // // sum_histos[i]->SetLineColor(kCyan); // sum_histos[i]->Scale(lumi); // sum_histos[i]->Draw("Lsame"); // /////////////////////////////////////////////////// // data_histos[i]->Scale(1./TSF[set_type]); // data_histos[i]->Scale(1./kfactors[set_type]); data_histos[i]->Draw("Psame"); hBkgVis[i]->Draw("same E2"); //disc_value_text->Draw(); c1->cd(); // Go back to the main canvas before defining pad2 TPad *pad2 = new TPad("pad2", "pad2", 0, 0.0, 1, 0.3); pad2->SetTopMargin(.13); pad2->SetBottomMargin(.4); pad2->Draw(); pad2->cd(); TH1F *frame2 = new TH1F("frame2","",1,xmin,xmax); frame2->SetMinimum(-.5); frame2->SetMaximum(.5); frame2->GetYaxis()->SetTitleOffset(0.4); frame2->GetXaxis()->SetTitleOffset(1.3); frame2->SetStats(0); frame2->SetTitleFont(42,"x"); frame2->SetTitleFont(42,"y"); frame2->SetTitleSize(0.13, "XYZ"); frame2->GetYaxis()->SetNdivisions(505); frame2->GetYaxis()->SetLabelSize(.09); frame2->GetXaxis()->SetLabelSize(.12); frame2->SetXTitle(signal_histos[i]->GetXaxis()->GetTitle()); frame2->SetYTitle("Data / MC - 1"); frame2->Draw(); Float_t aa[2] = {xmin,xmax}; Float_t bb[2] = {0,0}; TGraph *cons = new TGraph(2,aa,bb); cons->SetLineStyle(2); cons->Draw("Lsame"); data_histos2[i] = (TH1F*)data_histos[i]->Clone("new"); // sum_histos[i]->Scale(TSF[set_type]); // sum_histos[i]->Scale(kfactors[set_type]); data_histos2[i]->Add(sum_histos[i],-1); data_histos2[i]->Divide(sum_histos[i]); data_histos2[i]->Draw("PEsame"); hBkgUncUp[i]->Draw("HIST same"); hBkgUncLo[i]->Draw("HIST same"); pad1->RedrawAxis(); pad2->RedrawAxis(); c1->Print(output_names[i]); c1->Delete(); } return 0; }
void plotMuTau( Int_t mH_ = 120, string selection_ = "inclusive", string analysis_ = "", TString variable_ = "diTauVisMass", TString XTitle_ = "full mass", TString Unities_ = "GeV", Int_t nBins_ = 100, Float_t xMin_=0, Float_t xMax_=400, Float_t magnifySgn_ = 1.0, Float_t hltEff_ = 0.9967*0.997*0.968, // muID*muIso*muHLT Int_t logy_ = 0 ) { // input txt file with bins ifstream is; char* c = new char[10]; is.open(Form("bins/bins_muTau_mH%d_%s_%s.txt",mH_,selection_.c_str(),variable_.Data())); if(nBins_<0 && !is.good()){ cout << "Bins file not found" << endl; return; } int nBinsFromFile = 0; while (is.good()) { is.getline(c,999,','); if (is.good()){ nBinsFromFile++; //cout << c << endl; } } // choose the number of bins int nBins = nBins_>0 ? nBins_ : nBinsFromFile-1 ; Float_t bins[nBins+1]; cout << "Making histograms with " << nBins << " bins:" << endl; is.close(); is.open(Form("bins/bins_muTau_mH%d_%s_%s.txt",mH_,selection_.c_str(),variable_.Data())); nBinsFromFile = 0; if(nBins_>0){ for( ; nBinsFromFile <= nBins ; nBinsFromFile++){ bins[nBinsFromFile] = xMin_ + nBinsFromFile*(xMax_-xMin_)/nBins_; } } else{ while (is.good()) { is.getline(c,999,','); if (is.good() && nBinsFromFile<=nBins) { bins[nBinsFromFile] = atof(c); cout << bins[nBinsFromFile] << ", " ; } nBinsFromFile++; } cout << endl; } // Luminosity analyzed & parameters float Lumi = (159.+887.+361.7+531.5)*1.00; float WcorrectionFactorOS = 0.97; float WcorrectionFactorSS = 1.19; float MutoTauCorrectionFactor = 1.00; float JtoTauCorrectionFactor = 0.80; float VbfExtrapolationFactor = 1.03; TCanvas *c1 = new TCanvas("c1","",5,30,650,600); c1->SetGrid(0,0); c1->SetFillStyle(4000); c1->SetFillColor(10); c1->SetTicky(); c1->SetObjectStat(0); c1->SetLogy(logy_); TLegend* leg = new TLegend(0.55,0.42,0.85,0.85,NULL,"brNDC"); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetFillColor(10); leg->SetTextSize(0.03); leg->SetHeader(Form("#splitline{CMS Preliminary}{#splitline{%.1f fb^{-1} #sqrt{s}=7 TeV}{#tau_{#mu}#tau_{had}}}", Lumi/1000. )); THStack* aStack = new THStack("aStack",""); TH1F* hSiml = new TH1F( "hSiml" ,"all" , nBins , bins); TH1F* hSgn = new TH1F( "hSgn " ,"vbf+ggf" , nBins , bins); TH1F* hSgn1 = new TH1F( "hSgn1" ,"vbf" , nBins , bins); TH1F* hSgn2 = new TH1F( "hSgn2" ,"ggf" , nBins , bins); TH1F* hData = new TH1F( "hData" ,"Observed" , nBins , bins); TH1F* hW = new TH1F( "hW" ,"W+jets" , nBins , bins); TH1F* hEWK = new TH1F( "hEWK" ,"EWK" , nBins , bins); TH1F* hZtt = new TH1F( "hZtt" ,"Ztautau" , nBins , bins); TH1F* hZmm = new TH1F( "hZmm" ,"Z+jets, mu to tau" , nBins , bins); TH1F* hZmj = new TH1F( "hZmj" ,"Z+jets, jet to tau", nBins , bins); TH1F* hTTb = new TH1F( "hTTb" ,"ttbar" , nBins , bins); TH1F* hQCD = new TH1F( "hQCD" ,"QCD" , nBins , bins); TH1F* hVV = new TH1F( "hVV" ,"Diboson" , nBins , bins); // pZeta OS, N pZ sideband OS, pZeta SS, N sideband SS, N QCD SS, OS/SS TH1F* hParameters = new TH1F( "hParameters", "" , 7, 0,7); // Open the files TFile *fData = new TFile("/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStreamSummer11_fAna//nTupleRun2011-Mu-All_run_Open_MuTauStream.root", "READ"); TFile *fSignalVBF = new TFile(Form("/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStreamSummer11_fAna//nTupleVBFH%d-Mu-powheg-PUS4_run_Open_MuTauStream.root",mH_) ,"READ"); TFile *fSignalGGH = new TFile(Form("/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStreamSummer11_fAna//nTupleGGFH%d-Mu-powheg-PUS4_run_Open_MuTauStream.root",mH_),"READ"); TFile *fBackgroundDY = new TFile("/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStreamSummer11_fAna//nTupleDYJets-Mu-50-madgraph-PUS4_run_Open_MuTauStream.root","READ"); TFile *fBackgroundWJets = new TFile("/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStreamSummer11_fAna//nTupleWJets-Mu-madgraph-PUS4_run_Open_MuTauStream.root","READ"); TFile *fBackgroundTTbar = new TFile("/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStreamSummer11_fAna//nTupleTTJets-Mu-madgraph-PUS4_run_Open_MuTauStream.root","READ"); TFile *fBackgroundOthers = new TFile("/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStreamSummer11_fAna//nTupleOthers-Mu-PUS4_run_Open_MuTauStream.root","READ"); // choose the analysis: Nominal "", jet up/Down "JetUp/Down" , elec up/down "MuUp/Down" , tau up/down "TauUp/Down" TString tree = "outTreePtOrd"+analysis_; TTree *data = (TTree*)fData->Get("outTreePtOrd"); TTree *signalVBF = (TTree*)fSignalVBF->Get(tree); TTree *signalGGH = (TTree*)fSignalGGH->Get(tree); // split the DY->ll into l=e/mu and l=tau (MC level) ===> temporary, need fix !!! TFile* dummy1 = new TFile("dummy1.root","RECREATE"); cout << "Now copying g/Z -> tau+ tau- " << endl; TTree *backgroundDYTauTau = ((TTree*)fBackgroundDY->Get(tree))->CopyTree("abs(genDecay)==(23*15)"); // g/Z -> tau+ tau- cout << "Now copying g/Z -> mu+mu- mu->tau" << endl; TTree *backgroundDYMutoTau = ((TTree*)fBackgroundDY->Get(tree))->CopyTree("abs(genDecay)!=(23*15) && diTauCharge==0"); // g/Z -> mu+mu- mu->tau cout << "Now copying g/Z -> mu+mu- jet->tau" << endl; TTree *backgroundDYJtoTau = ((TTree*)fBackgroundDY->Get(tree))->CopyTree("abs(genDecay)!=(23*15) && diTauCharge!=0"); // g/Z -> mu+mu- jet->tau cout << backgroundDYTauTau->GetEntries() << " come from DY->tautau" << endl; cout << backgroundDYMutoTau->GetEntries() << " come from DY->mumu, mu->tau" << endl; cout << backgroundDYJtoTau->GetEntries() << " come from DY->mumu, jet->tau"<< endl; TTree *backgroundTTbar = (TTree*)fBackgroundTTbar->Get(tree); TTree *backgroundWJets = (TTree*)fBackgroundWJets->Get(tree); TTree *backgroundOthers = (TTree*)fBackgroundOthers->Get(tree); TCut lpt("ptL1>15"); TCut tpt("ptL2>21"); TCut tiso("tightestHPSDBWP>0"); TCut liso("combRelIsoLeg1DBeta<0.1"); TCut lveto("muFlag==0"); TCut SS("diTauCharge!=0"); TCut OS("diTauCharge==0"); TCut oneJet("pt1>30"); TCut twoJets("pt1>30 && pt2>30"); TCut vbf("pt1>30 && pt2>30 && eta1*eta2<0 && Mjj>350 && Deta>3.5 && ptVeto<30"); TCut novbf("pt2<30 || (pt1>30 && pt2>30 && ptVeto<30 && !(eta1*eta2<0 && Mjj>350 && Deta>3.5))"); TCut hltevent("HLTx==1"); TCut hltmatch("HLTmatch==1"); TCut bTag("pt2<30 && ((pt1>20 && jetsBtagHE1>3.3) || (pt2>20 && jetsBtagHE2>3.3))"); TCut nobTag("pt2<30 && jetsBtagHE1<3.3 && jetsBtagHE2<3.3"); TCut pZ("(pZetaCorr-1.5*pZetaVisCorr)>-20"); TCut apZ("(pZetaCorr-1.5*pZetaVisCorr)<-40"); TCut sbin; TCut sbinPZetaRel; TCut sbinSS; TCut sbinPZetaRelSS; TCut sbinPZetaRev; TCut sbinPZetaRevSS; if(selection_.find("inclusive")!=string::npos){ sbin = lpt && tpt && tiso && liso && lveto && OS && pZ && hltevent && hltmatch; sbinPZetaRel = lpt && tpt && tiso && liso && lveto && OS && hltevent && hltmatch; sbinPZetaRev = lpt && tpt && tiso && liso && lveto && OS && apZ && hltevent && hltmatch; sbinPZetaRevSS = lpt && tpt && tiso && liso && lveto && SS && apZ && hltevent && hltmatch; sbinSS = lpt && tpt && tiso && liso && lveto && SS && pZ && hltevent && hltmatch; sbinPZetaRelSS = lpt && tpt && tiso && liso && lveto && SS && hltevent && hltmatch; } else if(selection_.find("oneJet")!=string::npos){ sbin = lpt && tpt && tiso && liso && lveto && OS && pZ && hltevent && hltmatch && oneJet; sbinPZetaRel = lpt && tpt && tiso && liso && lveto && OS && hltevent && hltmatch && oneJet; sbinPZetaRev = lpt && tpt && tiso && liso && lveto && OS && apZ && hltevent && hltmatch && oneJet; sbinPZetaRevSS = lpt && tpt && tiso && liso && lveto && SS && apZ && hltevent && hltmatch && oneJet; sbinSS = lpt && tpt && tiso && liso && lveto && SS && pZ && hltevent && hltmatch && oneJet; sbinPZetaRelSS = lpt && tpt && tiso && liso && lveto && SS && hltevent && hltmatch && oneJet; } else if(selection_.find("twoJets")!=string::npos){ sbin = lpt && tpt && tiso && liso && lveto && OS && pZ && hltevent && hltmatch && twoJets; sbinPZetaRel = lpt && tpt && tiso && liso && lveto && OS && hltevent && hltmatch && twoJets; sbinPZetaRev = lpt && tpt && tiso && liso && lveto && OS && apZ && hltevent && hltmatch && twoJets; sbinPZetaRevSS = lpt && tpt && tiso && liso && lveto && SS && apZ && hltevent && hltmatch && twoJets; sbinSS = lpt && tpt && tiso && liso && lveto && SS && pZ && hltevent && hltmatch && twoJets; sbinPZetaRelSS = lpt && tpt && tiso && liso && lveto && SS && hltevent && hltmatch && twoJets; } else if(selection_.find("vbf")!=string::npos && selection_.find("novbf")==string::npos){ sbin = lpt && tpt && tiso && liso && lveto && OS && pZ && hltevent && hltmatch && vbf; sbinPZetaRel = lpt && tpt && tiso && liso && lveto && OS && hltevent && hltmatch && vbf; sbinPZetaRev = lpt && tpt && tiso && liso && lveto && OS && apZ && hltevent && hltmatch && vbf; sbinPZetaRevSS = lpt && tpt && tiso && liso && lveto && SS && apZ && hltevent && hltmatch && vbf; sbinSS = lpt && tpt && tiso && liso && lveto && SS && pZ && hltevent && hltmatch && vbf; sbinPZetaRelSS = lpt && tpt && tiso && liso && lveto && SS && hltevent && hltmatch && vbf; } else if(selection_.find("novbf")!=string::npos){ sbin = lpt && tpt && tiso && liso && lveto && OS && pZ && hltevent && hltmatch && novbf; sbinPZetaRev = lpt && tpt && tiso && liso && lveto && OS && apZ && hltevent && hltmatch && novbf; sbinPZetaRel = lpt && tpt && tiso && liso && lveto && OS && hltevent && hltmatch && novbf; sbinPZetaRevSS = lpt && tpt && tiso && liso && lveto && SS && apZ && hltevent && hltmatch && novbf; sbinSS = lpt && tpt && tiso && liso && lveto && SS && pZ && hltevent && hltmatch && novbf; sbinPZetaRelSS = lpt && tpt && tiso && liso && lveto && SS && hltevent && hltmatch && novbf; } else if(selection_.find("bTag")!=string::npos && selection_.find("nobTag")==string::npos){ sbin = lpt && tpt && tiso && liso && lveto && OS && pZ && hltevent && hltmatch && bTag; sbinPZetaRel = lpt && tpt && tiso && liso && lveto && OS && hltevent && hltmatch && bTag; sbinPZetaRev = lpt && tpt && tiso && liso && lveto && OS && apZ && hltevent && hltmatch && bTag; sbinPZetaRevSS = lpt && tpt && tiso && liso && lveto && SS && apZ && hltevent && hltmatch && bTag; sbinSS = lpt && tpt && tiso && liso && lveto && SS && pZ && hltevent && hltmatch && bTag; sbinPZetaRelSS = lpt && tpt && tiso && liso && lveto && SS && hltevent && hltmatch && bTag; } else if(selection_.find("nobTag")!=string::npos){ sbin = lpt && tpt && tiso && liso && lveto && OS && pZ && hltevent && hltmatch && nobTag; sbinPZetaRel = lpt && tpt && tiso && liso && lveto && OS && hltevent && hltmatch && nobTag; sbinPZetaRev = lpt && tpt && tiso && liso && lveto && OS && apZ && hltevent && hltmatch && nobTag; sbinPZetaRevSS = lpt && tpt && tiso && liso && lveto && SS && apZ && hltevent && hltmatch && nobTag; sbinSS = lpt && tpt && tiso && liso && lveto && SS && pZ && hltevent && hltmatch && nobTag; sbinPZetaRelSS = lpt && tpt && tiso && liso && lveto && SS && hltevent && hltmatch && nobTag; } // estimate the W+jets in the selection bin using pZeta extrapolation TH1F* hWMt = new TH1F("hWMt","",200,-200,200); cout << "Histogramming the pZeta variable every " << hWMt->GetBinWidth(1) << " GeV" << endl; ///////////////////////////////////////// Doing OS first... hWMt->Reset(); backgroundWJets->Draw("(pZetaCorr-1.5*pZetaVisCorr)>>hWMt","(sampleWeight*puWeight*HLTweightTau)"*sbinPZetaRel); cout << "Using " << hWMt->Integral() << " entries from the W+jets OS sample" << endl; float OSWinSignalRegionMC = hWMt->Integral(91,200)*Lumi*hltEff_/1000.; float scaleFactorOS = (hWMt->Integral(0,80))/(hWMt->Integral(91,200)); cout << "Extrapolation factor for W OS : P(pZetaCorr<-40)/P(pZetaCorr>-20) ==> " << scaleFactorOS << endl; hWMt->Reset(); cout << "Estimating cobtribution from ttbar and others in OS low pZeta tail..." << endl; backgroundTTbar->Draw("(pZetaCorr-1.5*pZetaVisCorr)>>hWMt","(sampleWeight*puWeight*HLTweightTau)"*sbinPZetaRel); hWMt->Scale(Lumi*hltEff_/1000.); float ttbarExtrOS = hWMt->Integral(0,80); cout << "Contribution from ttbar in OS is " << ttbarExtrOS << endl; hWMt->Reset(); backgroundOthers->Draw("(pZetaCorr-1.5*pZetaVisCorr)>>hWMt","(sampleWeight*puWeight*HLTweightTau)"*sbinPZetaRel); hWMt->Scale(Lumi*hltEff_/1000.); float othersExtrOS = hWMt->Integral(0,80); cout << "Contribution from single-t and di-boson in OS is " << othersExtrOS << endl; float OSWinSignalRegionDATA = data->GetEntries(sbinPZetaRev); cout << "Selected events in data in low pZeta tail " << OSWinSignalRegionDATA << endl; OSWinSignalRegionDATA -= ttbarExtrOS; OSWinSignalRegionDATA -= othersExtrOS; OSWinSignalRegionDATA /= scaleFactorOS; cout << "W+jets in signal region is estimated to be " << OSWinSignalRegionDATA*scaleFactorOS << "/" << scaleFactorOS << " = " << OSWinSignalRegionDATA << " +/- " << sqrt(OSWinSignalRegionDATA/scaleFactorOS)/scaleFactorOS << endl; cout << " ===> the MC prediction was " << OSWinSignalRegionMC << endl; hParameters->SetBinContent(1, 1./scaleFactorOS ); hParameters->SetBinContent(2, OSWinSignalRegionDATA*scaleFactorOS ); ///////////////////////////////////////// Doing SS last... hWMt->Reset(); backgroundWJets->Draw("(pZetaCorr-1.5*pZetaVisCorr)>>hWMt","(sampleWeight*puWeight*HLTweightTau)"*sbinPZetaRelSS); cout << "Using " << hWMt->Integral() << " entries from the SS W+jets sample" << endl; float SSWinSignalRegionMC = hWMt->Integral(91,200)*Lumi*hltEff_/1000.; float scaleFactorSS = (hWMt->Integral(0,80))/(hWMt->Integral(91,200)); cout << "Extrapolation factor for W SS : P(pZetaCorr<-40)/P(pZetaCorr>-20) ==> " << scaleFactorSS << endl; hWMt->Reset(); cout << "Estimating cobtribution from ttbar and others in SS low pZeta tail..." << endl; backgroundTTbar->Draw("(pZetaCorr-1.5*pZetaVisCorr)>>hWMt","(sampleWeight*puWeight*HLTweightTau)"*sbinPZetaRelSS); hWMt->Scale(Lumi*hltEff_/1000.); float ttbarExtrSS = hWMt->Integral(0,80); cout << "Contribution from ttbar in SS is " << ttbarExtrSS << endl; hWMt->Reset(); backgroundOthers->Draw("(pZetaCorr-1.5*pZetaVisCorr)>>hWMt","(sampleWeight*puWeight*HLTweightTau)"*sbinPZetaRelSS); hWMt->Scale(Lumi*hltEff_/1000.); float othersExtrSS = hWMt->Integral(0,80); cout << "Contribution from single-t and di-boson in SS is " << othersExtrSS << endl; float SSWinSignalRegionDATA = data->GetEntries(sbinPZetaRevSS); cout << "Selected events in data in low pZeta tail " << SSWinSignalRegionDATA << endl; SSWinSignalRegionDATA -= ttbarExtrSS; SSWinSignalRegionDATA -= othersExtrSS; SSWinSignalRegionDATA /= scaleFactorSS; cout << "W+jets in SS signal region is estimated to be " << SSWinSignalRegionDATA*scaleFactorSS << "/" << scaleFactorSS << " = " << SSWinSignalRegionDATA << " +/- " << sqrt(SSWinSignalRegionDATA/scaleFactorSS)/scaleFactorSS << endl; cout << " ===> the MC prediction was " << SSWinSignalRegionMC << endl; hParameters->SetBinContent(3, 1./scaleFactorSS ); hParameters->SetBinContent(4, SSWinSignalRegionDATA*scaleFactorSS ); // here I choose the order in the stack std::vector<string> samples; samples.push_back("Data"); samples.push_back("ggH115"); samples.push_back("qqH115"); samples.push_back("Others"); samples.push_back("TTbar"); samples.push_back("SS"); samples.push_back("WJets"); samples.push_back("DYMutoTau"); samples.push_back("DYJtoTau"); samples.push_back("DYToTauTau"); // here I define the map between a sample name and its tree std::map<std::string,TTree*> tMap; tMap["Data"] = data; tMap["ggH115"] = signalGGH; tMap["qqH115"] = signalVBF; tMap["DYToTauTau"]= backgroundDYTauTau; tMap["DYMutoTau"] = backgroundDYMutoTau; tMap["DYJtoTau"] = backgroundDYJtoTau; tMap["WJets"] = backgroundWJets; tMap["Others"] = backgroundOthers; tMap["TTbar"] = backgroundTTbar; tMap["SS"] = data; std::map<TString,Float_t> vMap; for( unsigned iter=0; iter<samples.size(); iter++){ cout << "Dealing with sample " << samples[iter] << endl; std::map<std::string,TTree*>::iterator it = tMap.find(samples[iter]); TString h1Name = "h1_"+it->first; TH1F* h1 = new TH1F( h1Name ,"" , nBins , bins); TTree* currentTree = 0; if((it->first).find("SS")!=string::npos){ cout << "Remove W contamination from SS data sample ... " << endl; currentTree = (it->second); float error2OnQCD = 0.0; TH1F* hHelp = (TH1F*)h1->Clone("hHelp"); hHelp->Reset(); currentTree->Draw(variable_+">>hHelp", sbinSS); int SSevents = hHelp->GetEntries(); cout << "Selected SS events in data " << hHelp->GetEntries() << endl; h1->Add(hHelp,1); hHelp->Reset(); backgroundWJets->Draw(variable_+">>hHelp", "(sampleWeight*puWeight*HLTweightTau)"*sbinSS); cout << "We expect " << hHelp->Integral()*Lumi/1000*hltEff_ << " SS events from W+jets (from " << hHelp->GetEntries() << " entries)" << endl; float sFWSS = ( selection_.find("novbf")!=string::npos || selection_.find("nobTag")!=string::npos ) ? SSWinSignalRegionDATA/SSWinSignalRegionMC : WcorrectionFactorSS; // from the extrapolation factor DATA/MC hHelp->Scale(sFWSS*Lumi/1000*hltEff_); cout << "We estimate " << hHelp->Integral() << " SS events from W+jets by extrapolating" << endl; cout << " ==> removing W+jets from SS...." << endl; h1->Add(hHelp, -1 ); if(hHelp->GetEntries()>0) error2OnQCD += pow( hHelp->Integral()/hHelp->GetEntries(), 2)*hHelp->GetEntries(); // error on MC W+jets SS events error2OnQCD += pow(WcorrectionFactorSS*0.06,2)*pow(hHelp->GetEntries(),2); // error on W+jets extrapolation factor ==> 6% according to Artur cout << sqrt(error2OnQCD) << " <== W" << endl; hHelp->Reset(); backgroundTTbar->Draw(variable_+">>hHelp", "(sampleWeight*puWeight*HLTweightTau)"*sbinSS); cout << "We expect " << hHelp->Integral()*Lumi/1000*hltEff_ << " SS events from TTbar (from " << hHelp->GetEntries() << " entries)" << endl; hHelp->Scale(1.0*Lumi/1000*hltEff_); cout << "We estimate " << hHelp->Integral() << " SS events from TTbar" << endl; cout << " ==> removing TTbar from SS...." << endl; h1->Add(hHelp, -1 ); if(hHelp->GetEntries()>0) error2OnQCD += pow(hHelp->Integral()/hHelp->GetEntries(),2)*hHelp->GetEntries(); // error on MC TTbar SS events cout << sqrt(error2OnQCD) << " <== W + TTb" << endl; hHelp->Reset(); backgroundDYMutoTau->Draw(variable_+">>hHelp", "(sampleWeight*puWeight*HLTweightTau)"*sbinSS); cout << "We expect " << hHelp->Integral()*Lumi/1000*hltEff_ << " SS events from DY->mumu, mu->jet" << endl; hHelp->Scale(MutoTauCorrectionFactor*Lumi/1000*hltEff_); cout << "We estimate " << hHelp->Integral() << " SS events from DY->mumu, mu->tau" << endl; cout << " ==> removing DY->mumu, mu->tau from SS...." << endl; h1->Add(hHelp, -1 ); if(hHelp->GetEntries()>0) error2OnQCD += pow(hHelp->Integral()/hHelp->GetEntries(),2)*hHelp->GetEntries(); // error on MC DY->mumu, mu->tau events cout << sqrt(error2OnQCD) << " <== W + TTb + DY(1)" << endl; hHelp->Reset(); backgroundDYJtoTau->Draw(variable_+">>hHelp", "(sampleWeight*puWeight*HLTweightTau)"*sbinSS); cout << "We expect " << hHelp->Integral()*Lumi/1000*hltEff_ << " SS events from DY->mumu, jet->tau" << endl; hHelp->Scale(JtoTauCorrectionFactor*Lumi/1000*hltEff_); cout << "We estimate " << hHelp->Integral() << " SS events from DY->mumu, jet->tau" << endl; cout << " ==> removing DY->mumu, mu->jet from SS...." << endl; h1->Add(hHelp, -1 ); if(hHelp->GetEntries()>0) error2OnQCD += pow(hHelp->Integral()/hHelp->GetEntries(),2)*hHelp->GetEntries(); // error on MC DY->mumu, jet->tau events cout << sqrt(error2OnQCD) << " <== W + TTb + DY(1,2)" << endl; // OS/SS ratio h1->Scale(1.06); cout << "After removing the expected contribution from W+jets and rescaling by 1.06 we expect " << h1->Integral() << " events from QCD processes" << endl; hParameters->SetBinContent(5, SSevents); hParameters->SetBinContent(6, h1->Integral()/SSevents); cout << "Total unceratinty from bkg subtraction in SS region is " << sqrt(error2OnQCD) << endl; float totalRelErrorOnQCD = 0.02 + sqrt(error2OnQCD)/h1->Integral(); //0.02 ==> uncertainty on OS/SS ratio hParameters->SetBinContent(7,totalRelErrorOnQCD); } else{ currentTree = (it->second); if((it->first).find("DYJtoTau")==string::npos) currentTree->Draw(variable_+">>"+h1Name, "(sampleWeight*puWeight*HLTweightTau)"*sbin); else currentTree->Draw(variable_+">>"+h1Name, "(sampleWeight*puWeight*HLTweightTau)"*sbinSS); // scale by correction factors if((it->first).find("Data")==string::npos) h1->Scale(Lumi/1000*hltEff_); // if W+jets, scale by extrapolation float sFWOS = ( selection_.find("novbf")!=string::npos || selection_.find("nobTag")!=string::npos ) ? OSWinSignalRegionDATA/OSWinSignalRegionMC : WcorrectionFactorOS; if((it->first).find("WJets")!=string::npos){ h1->Scale( sFWOS ); hW->Add(h1,1.0); } // if DY->tautau, and vbf scale by ratio data/MC if((it->first).find("DYToTauTau")!=string::npos && selection_.find("vbf")!=string::npos && selection_.find("novbf")==string::npos){ cout << "DY->tautau will be rescaled by 1.03 according to the Z->mumu+vbf/Z->mumu ratio" << endl; h1->Scale( VbfExtrapolationFactor ); } // if DY->mumu, mu->tau, scale by fake-rate if((it->first).find("DYMutoTau")!=string::npos){ float sF = MutoTauCorrectionFactor; if(selection_.find("vbf")!=string::npos && selection_.find("novbf")==string::npos) sF *= VbfExtrapolationFactor; h1->Scale(sF); hZmm->Add(h1,1.0); } // if DY->mumu, jet->tau, scale by fake-rate if((it->first).find("DYJtoTau")!=string::npos){ float sF = JtoTauCorrectionFactor; if(selection_.find("vbf")!=string::npos && selection_.find("novbf")==string::npos) sF *= VbfExtrapolationFactor; h1->Scale(sF); hZmj->Add(h1,2.0); // x2 } } ///////////////////////////////////////////////////////////////////////////////////// // Legend if( (it->first).find("DYMutoTau")!=string::npos || (it->first).find("DYJtoTau")!=string::npos || (it->first).find("WJets")!=string::npos || (it->first).find("Others")!=string::npos ) { hEWK->SetFillColor(kBlue); hEWK->Add(h1,1.0); if( (it->first).find("Others")!=string::npos ) hVV->Add(h1,1.0); } if( (it->first).find("DYToTauTau")!=string::npos ) { hZtt->Add(h1,1.0); hZtt->SetFillColor(kWhite); } if( (it->first).find("TTbar")!=string::npos ) { hTTb->Add(h1,1.0); hTTb->SetFillColor(kMagenta); } if( (it->first).find("SS")!=string::npos ) { hQCD->Add(h1,1.0); hQCD->SetFillColor(42); } if((it->first).find("qqH115")!=string::npos){ hSgn1->Add(h1,1.0); hSgn1->Scale(magnifySgn_); h1->Scale(magnifySgn_); hSgn1->SetLineWidth(2); h1->SetFillColor(kBlack); h1->SetFillStyle(3004); h1->SetLineColor(kBlack); } if((it->first).find("ggH115")!=string::npos){ hSgn2->Add(h1,1.0); hSgn2->Scale(magnifySgn_); h1->Scale(magnifySgn_); hSgn2->SetLineWidth(2); h1->SetFillColor(kBlack); h1->SetFillStyle(3005); h1->SetLineColor(kBlack); } if((it->first).find("Data")!=string::npos){ hData->Add(h1,1.0); hData->Sumw2(); hData->SetMarkerStyle(20); hData->SetMarkerSize(1.2); hData->SetMarkerColor(kBlack); hData->SetLineColor(kBlack); hData->SetXTitle(XTitle_+" ("+Unities_+")"); hData->SetYTitle(Form(" Events/(%.1f %s)", hData->GetBinWidth(1), Unities_.Data() ) ); hData->SetTitleSize(0.04,"X"); hData->SetTitleSize(0.05,"Y"); hData->SetTitleOffset(0.95,"Y"); } // adding alltogether hSiml->Add(h1,1.0); if(VERBOSE) cout<<(it->first) << " ==> " << h1->Integral() << " +/- " << TMath::Sqrt(h1->GetEntries())*(h1->Integral()/h1->GetEntries()) << endl; } // all signal summed together: hSgn->Add(hSgn1,hSgn2,1,1); hSgn->SetFillColor(kRed); hSgn->SetLineWidth(2); //Adding to the stack aStack->Add(hQCD); aStack->Add(hEWK); aStack->Add(hTTb); aStack->Add(hZtt); aStack->Add(hSgn); // legend leg->AddEntry(hData,"Observed","P"); leg->AddEntry(hSgn,Form("(%.0fx) H#rightarrow#tau#tau m_{H}=%d",magnifySgn_,mH_),"F"); leg->AddEntry(hZtt,"Z#rightarrow#tau#tau","F"); leg->AddEntry(hTTb,"t#bar{t}","F"); leg->AddEntry(hEWK,"Electroweak","F"); leg->AddEntry(hQCD,"QCD","F"); hData->Draw("P"); aStack->Draw("HISTSAME"); hData->Draw("PSAME"); TH1F* hStack = (TH1F*)aStack->GetHistogram(); hStack->SetXTitle(XTitle_+" ("+Unities_+")"); hStack->SetYTitle(Form(" Events/(%.0f %s)", hStack->GetBinWidth(1), Unities_.Data() ) ); hStack->SetTitleSize(0.04,"X"); hStack->SetTitleSize(0.05,"Y"); hStack->SetTitleOffset(0.95,"Y"); leg->Draw(); c1->SaveAs(Form("plots/plot_muTau_mH%d_%s_%s_%s.png",mH_,selection_.c_str(),analysis_.c_str(),variable_.Data())); // templates for fitting TFile* fout = new TFile(Form("histograms/muTau_mH%d_%s_%s_%s.root",mH_,selection_.c_str(),analysis_.c_str(),variable_.Data()),"RECREATE"); fout->cd(); hQCD->Write(); hZmm->Write(); hZmj->Write(); hTTb->Write(); hZtt->Write(); hW->Write(); hVV->Write(); hSgn1->Write(); hSgn2->Write(); hData->Write(); hParameters->Write(); fout->Write(); fout->Close(); }
void plotPhotonType(char* var="(ecalRecHitSumEtConeDR04+hcalTowerSumEtConeDR04):genCalIsoDR04") { TCut allCut = simpleCut + hardScatterCut; TProfile *hTemplate; TProfile *htmp= new TProfile("htmp","",100,0,20); htmp->SetXTitle("genCalIso [GeV]"); htmp->SetYTitle("recCalIso [GeV]"); hTemplate= getPlot(htmp,var,allCut,"MPA_PhotonJetPt15_31X.root","Analysis"); hTemplate->SetName("hTemplate"); hTemplate->Draw(); gStyle->SetOptFit(11111); hTemplate->Fit("pol1","",""); TF1* f1 = hTemplate->GetFunction("pol1"); float p0 = f1->GetParameter(0); float p1 = f1->GetParameter(1); char tempName[1000]; sprintf(tempName, "((ecalRecHitSumEtConeDR04+hcalTowerSumEtConeDR04)-genCalIsoDR04*%f):((ecalRecHitSumEtConeDR04+hcalTowerSumEtConeDR04)-genCalIsoDR04*(%f))",p1,-1.0/p1); cout << tempName << endl; TProfile *hTemplate_decompos; const int nbin=50; const float min = 0.0; const float max = 10.0; TProfile *htmp2= new TProfile("htmp2","",nbin,min,max); hTemplate_decompos= getPlot(htmp2,tempName,allCut,"MPA_PhotonJetPt15_31X.root","Analysis"); hTemplate_decompos->SetName("hTemplate_decompos"); hTemplate_decompos->Draw(); hTemplate_decompos->SetYTitle(Form("recCalIso-genCalIso*%.2f",p1)); hTemplate_decompos->SetXTitle(Form("recCalIso+genCalIso*%.2f",1.0/p1)); gStyle->SetOptFit(11111); // hTemplate_decompos->Fit("pol1"); TCanvas* c1 = new TCanvas("c1","",500,1000); c1->Divide(1,2); c1->cd(1); hTemplate->Draw(""); c1->cd(2); hTemplate_decompos->SetErrorOption("S"); hTemplate_decompos->Draw(""); c1->Print("bestGenCalIsoDR04.eps"); c1->Print("bestGenCalIsoDR04.gif"); TCanvas* c2 = new TCanvas("c2","",500,1000); c2->Divide(1,2); c2->cd(1); TH1F* hMean = new TH1F("hMean","",nbin,min,max); hMean->SetXTitle(Form("recCalIso+genCalIso*%.2f",1.0/p1)); hMean->SetTitleSize(0.06,"Y"); hMean->SetTitleOffset(1.2,"Y"); hMean->SetYTitle(Form("Mean of recCalIso-genCalIso*%.2f",p1)); for(int i=1; i <= nbin; i++) hMean->SetBinContent(i,hTemplate_decompos->GetBinContent(i)); hMean->Draw(); c2->cd(2); TH1F* hRMS = new TH1F("hRMS","",nbin,min,max); hRMS->SetXTitle(Form("recCalIso+genCalIso*%.2f",1.0/p1)); hRMS->SetTitleSize(0.06,"Y"); hRMS->SetTitleOffset(1.2,"Y"); hRMS->SetYTitle(Form("RMS of recCalIso-genCalIso*%.2f",p1)); for(int i=1; i <= nbin; i++) hRMS->SetBinContent(i,hTemplate_decompos->GetBinError(i)); hRMS->Draw(); c2->Print("bestGenCalIsoDR04_sup.eps"); c2->Print("bestGenCalIsoDR04_sup.gif"); int bestDeComposXBin = 11; float bestDeComposX = hMean->GetBinCenter(bestDeComposXBin); float bestDeComposY = hMean->GetBinContent(bestDeComposXBin); cout << "bestDeComposX = " << bestDeComposX << endl; cout << "bestDeComposY = " << bestDeComposY << endl; float bestGenIso = (bestDeComposX - bestDeComposY)/((1.0)/p1 + p1); float bestRecIso = bestDeComposX - (1.0/p1) * bestGenIso; cout << "bestGenIso = " << bestGenIso << endl; cout << "bestRecIso = " << bestRecIso << endl; }
void analyzer_stack() { //int main(){ const int nfiles = 8; const int nhistos = 46; const int ndiscr = 5; TString leg_names[nfiles] = {/*"powheg, m(H) = 130 GeV","amc@NLO, m(H) = 125 GeV",*/"powheg, m(H) = 125 GeV" ,"QCD, H_{T}=100-200 GeV","QCD, H_{T}=200-300 GeV","QCD, H_{T}=300-500 GeV","QCD, H_{T}=500-700 GeV","QCD, H_{T}=700-1000 GeV","QCD, H_{T}=1500-2000 GeV","QCD, H_{T}=2000-Inf GeV"}; TString file_names[nfiles] = {/*"Spring15_powheg_M130","Spring15_amcatnlo_M125",*/"Spring15_powheg_M125","Spring15_QCD_HT100to200","Spring15_QCD_HT200to300","Spring15_QCD_HT300to500","Spring15_QCD_HT500to700","Spring15_QCD_HT700to1000","Spring15_QCD_HT1500to2000","Spring15_QCD_HT2000toInf"}; for (int i=0; i<nfiles; i++) { // file_names[i].Prepend("SingleBtag_"); file_names[i].Prepend("../data40pb/tree"); file_names[i].Append(".root"); } TString trigger = "DoubleBtag_"; //TString trigger = "SingleBtag_"; //TString dir_name= "plots_powheg_130/"; TString dir_name= "plots_powheg_125/"; //TString dir_name = "plots_amc/"; Double_t xsec[nfiles] = { /* 1.96, 2.16,*/2.16, 2.75E07, 6.52E03, 3.67E05, 2.94E04, 2.54E01, 1.74E06, 121.5 }; TLegend *leg = new TLegend(0.35,0.58,0.75,0.88); leg->SetBorderSize(0); leg->SetTextSize(0.04); TString hist_names[nhistos]= {"hJet1_pt","hJet2_pt","hJet3_pt","hJet4_pt","hJet1_eta","hJet2_eta","hJet3_eta","hJet4_eta","hJet1_phi","hJet2_phi","hJet3_phi","hJet4_phi","hMqq", "hEtaQQ", "hPhiBB", "hEtaSoftJets", "hPtSoftJets","hMassSoftJets","hHTsoft","hSoft_n2","hSoft_n5","hSoft_n10","hMbb","hqgl","hbtag","hqgl2","hbtag2","hPtSoftJets2","hPtSoftJets3","hcosOqqbb","hEtaQB1", "hEtaQB2", "hPhiQB1", "hPhiQB2","hx1","hx2","hVB1_mass","hVB2_mass","hEtot","hPxtot","hPytot","hPztot","hJet5_pt","hPtqqbb","hEtaqqbb","hPhiqqbb"}; std::string hist_names_sort[nhistos]; for (int i=0; i<nhistos; i++) { hist_names_sort[i] = hist_names[i]; } Float_t discriminators[nhistos]; TString stacks_names[nhistos]; for (int i=0; i<nhistos; i++) { stacks_names[i] = hist_names[i]; stacks_names[i].Prepend("s"); } TString output_names[nhistos]; for (int i=0; i<nhistos; i++) { output_names[i] = hist_names[i]; output_names[i].Prepend(dir_name); output_names[i].Prepend(trigger); output_names[i].Append(".png"); } const char *xaxis_names[100] = {"1^{st} Jet p_{T} (GeV)","2^{nd} Jet p_{T} (GeV)","3^{rd} Jet p_{T} (GeV)","4^{th} Jet p_{T} (GeV)","1^{st} Jet #eta", "2^{nd} Jet #eta", "3^{rd} Jet #eta", "4^{th} Jet #eta", "1^{st} Jet #phi", "2^{nd} Jet #phi", "3^{rd} Jet #phi", "4^{th} Jet #phi","m_{qq} (GeV)","|#Delta#eta_{qq}|","|#Delta#phi_{bb}|","#eta^{soft}","1^{st} Soft jet p_{T} (GeV)","m^{soft} (GeV)","H_{T}^{soft} (GeV)","N^{soft}","m_{bb} (GeV)", "QGL of the first quark jet candidate","CSV of 1^{st} b-jet","QGL of the second quark jet candidate","CSV of 2^{nd} b-jet","2^{nd} Soft jet p_{T} (GeV)","3^{rd} Soft jet p_{T} (GeV)","H_{T}^{soft 3 jets} (GeV)","cos#theta_{qqbb}","#Delta#eta_{qb}^{forward}","#Delta#eta_{qb}^{backward}","|#Delta#phi_{qb}^{forward}|","|#Delta#phi_{qb}^{backward}|","x_{1}","x_{2}","M_{W'_{1}} (GeV)","M_{W'_{2}} (GeV)","E^{tot} (GeV)","p_{x}^{tot} (GeV)","p_{y}^{tot} (GeV)","p_{z}^{tot} (GeV)", "5^{th} Jet p_{T} (GeV)"}; TH1F *signal_histos[100]; TH1F *discr_histos[100];//Mqq,delta eta, delta phi, qgl, btag //12,13,14,21,22 int discr_index[100] = {12,13,14,21,22};//not used now int files=0; THStack *stacks[100]; for (int i=0; i<nhistos; ++i) { stacks[i] = new THStack(stacks_names[i],""); } Double_t totalBG=0.; ofstream out_efficiency; ofstream out_discrimination; out_efficiency.open(trigger+dir_name+"efficiency.txt"); do { TFile *file_initial = new TFile(file_names[files]); file_initial->ls(); TString temp_number; temp_number.Form("%d",files); TH1F *histos[100]; for (int hist=0; hist<nhistos; ++hist) { histos[hist] = (TH1F*)file_initial->Get(hist_names[hist]); histos[hist]->Sumw2(kFALSE); // histos[hist]->Scale(40.); if (files==0) signal_histos[hist] = (TH1F*)file_initial->Get(hist_names[hist]); // signal_histos[hist]->Scale(40.); // histos[hist]->SetLineColor(1+files); // histos[hist]->SetFillColor(1+files); if (files==1) { histos[hist]->SetFillColor(kBlue-10); histos[hist]->SetLineColor(kBlue-10); } if (files==2) { histos[hist]->SetFillColor(kBlue); histos[hist]->SetLineColor(kBlue); } if (files==3) { histos[hist]->SetFillColor(kOrange); histos[hist]->SetLineColor(kOrange); } if (files==4) { histos[hist]->SetFillColor(kRed); histos[hist]->SetLineColor(kRed); } if (files==5) { histos[hist]->SetFillColor(kAzure+10); histos[hist]->SetLineColor(kAzure+10); } if (files==6) { histos[hist]->SetFillColor(kGreen+2); histos[hist]->SetLineColor(kGreen+2); } if (files==7) { histos[hist]->SetFillColor(kPink+9); histos[hist]->SetLineColor(kPink+9); } if (files==0) { histos[hist]->SetFillStyle(3324); histos[hist]->SetFillColor(1); histos[hist]->SetLineColor(1); signal_histos[hist]->SetFillStyle(3324); signal_histos[hist]->SetLineColor(1); signal_histos[hist]->SetFillColor(1); } if (files>=0)stacks[hist]->Add(histos[hist]); if (hist==0) leg->AddEntry(histos[hist],leg_names[files],"F"); if (files==1) { discr_histos[hist] = (TH1F*)file_initial->Get(hist_names[hist]); } if ((files>1)) { discr_histos[hist]->Add(histos[hist]); } } if (files!=0) totalBG+=histos[4]->Integral(); if (files==0) out_efficiency<<"Sample & \t\t\t yield(per $fb^{-1}$)& \t efficiency"<<endl; if (files==0) out_efficiency<<leg_names[files]<<"&\t \t \t"<<histos[5]->Integral()*1000. <<"&\t"<< histos[5]->Integral()/xsec[files] <<endl; else out_efficiency<<leg_names[files]<<"&\t "<<histos[4]->Integral()*1000. <<"&\t"<< histos[4]->Integral()/xsec[files] <<endl; if (files==nfiles-1) out_efficiency<<"Total BG"<<"&\t \t \t "<<totalBG*1000.<< endl; files++; } while (files<nfiles); out_efficiency.close(); for (int d=0; d<nhistos; d++) { discriminators[d] = Discr(discr_histos[d],signal_histos[d]); } bubblesort(discriminators, hist_names_sort,nhistos); out_discrimination.open(trigger+dir_name+"discrimination.txt"); for (int d=0; d<nhistos; d++) { if (d==0) out_discrimination<<"Variable &\t d"<<endl; out_discrimination<<"$"<<hist_names_sort[d]<<"$"<<" & \t "<< std::setprecision(2)<< discriminators[d]<<endl; } out_discrimination.close(); TLatex* tex = new TLatex(0.90,0.92,"13 TeV, PU = 20, bx = 25 ns, 1 pb^{-1}"); tex->SetNDC(); tex->SetTextAlign(35); tex->SetTextFont(42); tex->SetTextSize(0.04); tex->SetLineWidth(2); TLatex *tex1 = new TLatex(0.13,0.83,"CMS"); tex1->SetNDC(); tex1->SetTextAlign(20); tex1->SetTextFont(61); tex1->SetTextSize(0.06); tex1->SetLineWidth(2); TLatex* tex2 = new TLatex(0.22,0.77,"Work in progress"); tex2->SetNDC(); tex2->SetTextAlign(20); tex2->SetTextFont(52); tex2->SetTextSize(0.04); tex2->SetLineWidth(2); TLatex* tex_file = new TLatex(0.35,0.92,"Spring15, DoubleBtag"); // TLatex* tex_file = new TLatex(0.35,0.92,"Spring15, SingleBtag"); tex_file->SetNDC(); tex_file->SetTextAlign(35); tex_file->SetTextFont(42); tex_file->SetTextSize(0.04); tex_file->SetLineWidth(2); for (int i=0; i<nhistos; i++) { TString temp_str; temp_str.Form("%2.2f",Discr(discr_histos[i],signal_histos[i])); TString disc_value = temp_str.Prepend(", d = "); TLatex *disc_value_text = new TLatex(0.86,0.853,disc_value); disc_value_text->SetNDC(); disc_value_text->SetTextAlign(35); disc_value_text->SetTextFont(42); disc_value_text->SetTextSize(0.04); disc_value_text->SetLineWidth(2); TCanvas *c1 = new TCanvas(); c1->SetBottomMargin(.12); c1->cd(); c1->SetLogy(); Double_t xmin = signal_histos[i]->GetBinCenter(0); Double_t xmax = signal_histos[i]->GetBinCenter(signal_histos[i]->GetNbinsX()); TH1F *frame = new TH1F("frame","",1,xmin,xmax); frame->SetMinimum(1e-4); frame->SetMaximum(1e10); frame->GetYaxis()->SetTitleOffset(0.9); frame->GetXaxis()->SetTitleOffset(0.91); frame->SetStats(0); frame->SetTitleFont(42,"x"); frame->SetTitleFont(42,"y"); frame->SetTitleSize(0.05, "XYZ"); frame->SetXTitle(signal_histos[i]->GetXaxis()->GetTitle()); if ((i<4))frame->SetYTitle("Events / 20 GeV"); else if (i==37)frame->SetYTitle("Events / 20 GeV"); else if (i==41)frame->SetYTitle("Events / 20 GeV"); else if ((i>=4) && (i<8)) frame->SetYTitle("Events / 0.5"); else if (i==15) frame->SetYTitle("Events / 0.5"); else if ((i>=8) && (i<12)) frame->SetYTitle("Events / 0.2"); else if (i==40) frame->SetYTitle("Events / 100 GeV"); else if ((i==10)||(i==12)||(i==16)||(i==17)||(i==18) || (i==20) || (i==25) || (i==26) || (i==27) || (i==35) || (i==36) ||(i==38) || (i==39)) frame->SetYTitle("Events / 10 GeV"); else if ((i==13)||(i==14)) frame->SetYTitle("Events / 0.1"); else if ((i==21)||(i==22)) frame->SetYTitle("Events / 0.05"); else if ((i==23)||(i==24)) frame->SetYTitle("Events / 0.01"); else if (i==28) frame->SetYTitle("Events / 0.02"); else if ((i==29) || (i==30) || (i==31) || (i==32) )frame->SetYTitle("Events / 0.1"); else if ((i==33) || (i==33))frame->SetYTitle("Events / 0.01"); else frame->SetYTitle("Events"); frame->Draw(); tex->Draw(); tex1->Draw(); tex2->Draw(); tex_file->Draw(); stacks[i]->Draw("nostacksame"); leg->Draw("same"); signal_histos[i]->Draw("same"); disc_value_text->Draw(); c1->Print(output_names[i]); c1->Delete(); } }
void fakeStudyMu( TCut Cuts_ = "ptL1>0", TString variable_ = "MtLeg1", TString XTitle_ = "M_{T}(#mu,MET)", TString Unities_ = "GeV", Int_t nBins_ = 12, Float_t xMin_=0, Float_t xMax_=120, Float_t magnifySgn_ = 10, Float_t hltEff_ = 1.0, Int_t enableHLTmatching_ = 1, Int_t logy_ = 0 ) { float Lumi = 24.86+159.15; TCanvas *c1 = new TCanvas("c1","",5,30,650,600); c1->SetGrid(0,0); c1->SetFillStyle(4000); c1->SetFillColor(10); c1->SetTicky(); c1->SetObjectStat(0); c1->SetLogy(logy_); TLegend* leg = new TLegend(0.60,0.50,0.85,0.85,NULL,"brNDC"); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetFillColor(10); leg->SetTextSize(0.04); leg->SetHeader("#mu+#tau_{had}"); THStack* aStack = new THStack("aStack",Form("CMS Preliminary 2011 #sqrt{s}=7 TeV L=%.0f pb^{-1}", Lumi )); TH1F* hSiml = new TH1F(); TH1F* hSgn = new TH1F(); TH1F* hSgn1 = new TH1F(); TH1F* hSgn2 = new TH1F(); TH1F* hData = new TH1F(); // OpenNTuples TString fDataName = "/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStream2011_iter2/Inclusive/nTupleRun2011-Mu_Open_MuTauStream.root"; TString fSignalNameVBF = "/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStream2011_iter2/Inclusive/nTupleVBFH115-Mu-powheg-PUS1_Open_MuTauStream.root"; TString fSignalNameGGH = "/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStream2011_iter2/Inclusive/nTupleGGFH115-Mu-powheg-PUS1_Open_MuTauStream.root"; TString fBackgroundNameDYTauTau = "/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStream2011_iter2/Inclusive/nTupleDYJets-Mu-50-madgraph-PUS1_Open_MuTauStream.root"; TString fBackgroundNameDYMuMu = "/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStream2011_iter2/Inclusive/nTupleDYJets-Mu-50-madgraph-PUS1_Open_MuTauStream.root"; TString fBackgroundNameWJets = "/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStream2011_iter2/Inclusive/nTupleWJets-Mu-madgraph-PUS1_Open_MuTauStream.root"; TString fBackgroundNameQCD = "/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStream2011_iter2/Inclusive/nTupleQCDmu_Open_MuTauStream.root"; TString fBackgroundNameTTbar = "/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStream2011_iter2/Inclusive/nTupleTTJets-Mu-madgraph-PUS1_Open_MuTauStream.root"; TString fBackgroundNameSingleTop = "/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStream2011_iter2/Inclusive/nTupleSingleTop-Mu_Open_MuTauStream.root"; TString fBackgroundNameDiBoson = "/data_CMS/cms/lbianchini/VbfJetsStudy/OpenNtuples/MuTauStream2011_iter2/Inclusive/nTupleDiBoson-Mu_Open_MuTauStream.root"; TFile *fData(0); TFile *fSignalVBF(0); TFile *fSignalGGH(0); TFile *fBackgroundDYTauTau(0); TFile *fBackgroundDYMuMu(0); TFile *fBackgroundWJets(0); TFile *fBackgroundQCD(0); TFile *fBackgroundTTbar(0); TFile *fBackgroundSingleTop(0); TFile *fBackgroundDiBoson(0); fData = TFile::Open( fDataName ); fSignalVBF = TFile::Open( fSignalNameVBF ); fSignalGGH = TFile::Open( fSignalNameGGH ); fBackgroundDYTauTau = TFile::Open( fBackgroundNameDYTauTau ); fBackgroundDYMuMu = TFile::Open( fBackgroundNameDYMuMu ); fBackgroundWJets = TFile::Open( fBackgroundNameWJets ); fBackgroundQCD = TFile::Open( fBackgroundNameQCD ); fBackgroundTTbar = TFile::Open( fBackgroundNameTTbar ); fBackgroundSingleTop= TFile::Open( fBackgroundNameSingleTop ); fBackgroundDiBoson = TFile::Open( fBackgroundNameDiBoson ); if(!fSignalVBF || !fBackgroundDYTauTau || !fBackgroundWJets || !fBackgroundQCD || !fBackgroundTTbar || !fBackgroundSingleTop || !fSignalGGH || !fBackgroundDYMuMu || !fBackgroundDiBoson || !fData){ std::cout << "ERROR: could not open files" << std::endl; exit(1); } TString tree = "outTreePtOrd"; TTree *data = (TTree*)fData->Get(tree); TTree *signalVBF = (TTree*)fSignalVBF->Get(tree); TTree *signalGGH = (TTree*)fSignalGGH->Get(tree); TFile* dummy1 = new TFile("dummy1.root","RECREATE"); TTree *backgroundDYTauTau = ((TTree*)fBackgroundDYTauTau->Get(tree))->CopyTree("isTauLegMatched>0.5"); TTree *backgroundDYMuMu = ((TTree*)fBackgroundDYMuMu->Get(tree))->CopyTree("isTauLegMatched<0.5"); cout <<backgroundDYTauTau->GetEntries() << " -- " << backgroundDYMuMu->GetEntries() << endl; TTree *backgroundWJets = (TTree*)fBackgroundWJets->Get(tree); TTree *backgroundQCD = (TTree*)fBackgroundQCD->Get(tree); TTree *backgroundTTbar = (TTree*)fBackgroundTTbar->Get(tree); TTree *backgroundSingleTop = (TTree*)fBackgroundSingleTop->Get(tree); TTree *backgroundDiBoson = (TTree*)fBackgroundDiBoson->Get(tree); // here I choose the order in the stack std::vector<string> samples; samples.push_back("ggH115"); samples.push_back("qqH115"); samples.push_back("DiBoson"); samples.push_back("SingleTop"); samples.push_back("TTbar"); samples.push_back("Wjets"); samples.push_back("QCD"); samples.push_back("ZfakeTau"); samples.push_back("Ztautau"); samples.push_back("Data"); // here I define the map between a sample name and its tree std::map<std::string,TTree*> tMap; tMap["Data"]=data; tMap["ggH115"]=signalGGH; tMap["qqH115"]=signalVBF; tMap["Ztautau"]=backgroundDYTauTau; tMap["ZfakeTau"]=backgroundDYMuMu; tMap["Wjets"]=backgroundWJets; tMap["QCD"]=backgroundQCD; tMap["TTbar"]=backgroundTTbar; tMap["SingleTop"]=backgroundSingleTop; tMap["DiBoson"]=backgroundDiBoson; Float_t pt1, pt2, Deta, Mjj, eta1, eta2; Float_t diTauSVFitPt,diTauVisPt,diTauVisEta,diTauSVFitEta,diTauVisMass,diTauSVFitMass,ptL1,ptL2,etaL1,etaL2,diTauCharge,MtLeg1,numPV,combRelIsoLeg1DBeta,combRelIsoLeg1,pZetaCutVar, MEt, ptVeto, leadTrackPt, jetsBtagHE1, jetsBtagHE2; Float_t sampleWeight,puWeight; std::map<TString,Float_t> vMap; for( unsigned iter=0; iter<samples.size(); iter++){ std::map<std::string,TTree*>::iterator it = tMap.find(samples[iter]); TString h1Name = "h1_"+it->first; TH1F* h1 = new TH1F( h1Name ,Form("CMS Preliminary 2011 #sqrt{s}=7 TeV L=%.0f pb^{-1}", Lumi) , nBins_ ,xMin_ , xMax_); TFile* dummy = new TFile("dummy.root","RECREATE"); TCut Cuts = Cuts_; TCut hlt = enableHLTmatching_ ? "( ((HLTmatch==2 && run<=163261) || (HLTmatch==1 && run>163261)) && ((HLTmu==1 && run<=163261) || (HLTx==1 && run>163261)) )" : "( ((HLTmu==1 && run<=163261) || (HLTx==1 && run>163261)) )"; if((it->first).find("Data")!=string::npos) Cuts = Cuts_ && hlt; TTree* currentTree = (TTree*)(it->second)->CopyTree(Cuts); Int_t counter = 0; currentTree->SetBranchAddress( "pt1", &pt1 ); currentTree->SetBranchAddress( "pt2", &pt2 ); currentTree->SetBranchAddress( "Deta",&Deta ); currentTree->SetBranchAddress( "Mjj", &Mjj ); currentTree->SetBranchAddress( "diTauSVFitPt",&diTauSVFitPt); currentTree->SetBranchAddress( "diTauSVFitEta",&diTauSVFitEta); currentTree->SetBranchAddress( "diTauSVFitMass",&diTauSVFitMass); currentTree->SetBranchAddress( "diTauVisPt",&diTauVisPt); currentTree->SetBranchAddress( "diTauVisEta",&diTauVisEta); currentTree->SetBranchAddress( "diTauVisMass",&diTauVisMass); currentTree->SetBranchAddress( "ptL1", &ptL1 ); currentTree->SetBranchAddress( "ptL2", &ptL2 ); currentTree->SetBranchAddress( "etaL1", &etaL1 ); currentTree->SetBranchAddress( "etaL2", &etaL2 ); currentTree->SetBranchAddress( "combRelIsoLeg1DBeta",&combRelIsoLeg1DBeta); currentTree->SetBranchAddress( "combRelIsoLeg1",&combRelIsoLeg1); currentTree->SetBranchAddress( "diTauCharge",&diTauCharge); currentTree->SetBranchAddress( "MtLeg1",&MtLeg1); currentTree->SetBranchAddress( "pZetaCutVar",&pZetaCutVar); currentTree->SetBranchAddress( "numPV",&numPV); currentTree->SetBranchAddress( "sampleWeight",&sampleWeight); currentTree->SetBranchAddress( "puWeight",&puWeight); currentTree->SetBranchAddress( "ptVeto",&ptVeto); currentTree->SetBranchAddress( "MEt",&MEt); currentTree->SetBranchAddress( "leadTrackPt",&leadTrackPt); currentTree->SetBranchAddress( "jetsBtagHE1",&jetsBtagHE1); currentTree->SetBranchAddress( "jetsBtagHE2",&jetsBtagHE2); for (Long64_t ievt=0; ievt<currentTree->GetEntries();ievt++) { currentTree->GetEntry(ievt); if (ievt%10000 == 0){ std::cout << (it->first) << " ---> processing event: " << ievt << " ..." <<std::endl; } vMap["diTauSVFitPt"] = diTauSVFitPt; vMap["diTauSVFitEta"] = diTauSVFitEta; vMap["diTauSVFitMass"]= diTauSVFitMass; vMap["diTauVisPt"] = diTauVisPt; vMap["diTauVisEta"] = diTauVisEta; vMap["diTauVisMass"] = diTauVisMass; vMap["ptL1"] = ptL1; vMap["ptL2"] = ptL2; vMap["etaL1"] = etaL1; vMap["etaL2"] = etaL2; vMap["diTauCharge"]= Float_t(diTauCharge); vMap["MtLeg1"]= MtLeg1; vMap["pZetaCutVar"] = pZetaCutVar; vMap["numPV"]= numPV; vMap["combRelIsoLeg1"]= combRelIsoLeg1; vMap["combRelIsoLeg1DBeta"]= combRelIsoLeg1DBeta; vMap["sampleWeight"]= sampleWeight; vMap["puWeight"]= puWeight; vMap["puWeight"]= puWeight; vMap["jetsBtagHE1"]= jetsBtagHE1; vMap["jetsBtagHE2"]= jetsBtagHE2; vMap["leadTrackPt"]= leadTrackPt; vMap["pt1"]= pt1; vMap["pt2"]= pt2; vMap["Deta"]= Deta; vMap["Mjj"]= Mjj; vMap["ptVeto"]= ptVeto; if((it->first).find("Data")==string::npos) sampleWeight*=(Lumi/1000*hltEff_*puWeight); counter++; h1->Fill( vMap[variable_], sampleWeight); }// end loop if( (it->first).find("ZfakeTau")!=string::npos ) { h1->SetFillColor(7); leg->AddEntry(h1,"Z+jets, fake-#tau","F"); } if( (it->first).find("Ztautau")!=string::npos ) { h1->SetFillColor(kRed); leg->AddEntry(h1,"Z+jets, genuine-#tau","F"); } if( (it->first).find("TTbar")!=string::npos ) { h1->SetFillColor(kBlue); leg->AddEntry(h1,"t#bar{t}+jets","F"); } if( (it->first).find("SingleTop")!=string::npos ) { h1->SetFillColor(29); leg->AddEntry(h1,"single-t","F"); } if( (it->first).find("Wjets")!=string::npos ) { h1->SetFillColor(kGreen); leg->AddEntry(h1,"W+jets","F"); } if( (it->first).find("DiBoson")!=string::npos ) { h1->SetFillColor(38); leg->AddEntry(h1,"Di-Boson","F"); } if( (it->first).find("QCD")!=string::npos ) { h1->SetFillColor(42); leg->AddEntry(h1,"QCD-multijets","F"); } if((it->first).find("qqH115")!=string::npos){ hSgn1 = (TH1F*)h1->Clone("hSgn1"); hSgn1->Scale(magnifySgn_); hSgn1->SetLineWidth(2); h1->SetFillColor(kBlack); h1->SetFillStyle(3004); h1->SetLineColor(kBlack); leg->AddEntry(h1,Form("VBF H(115) X %.0f",magnifySgn_),"F"); } if((it->first).find("ggH115")!=string::npos){ hSgn2 = (TH1F*)h1->Clone("hSgn2"); hSgn2->Scale(magnifySgn_); hSgn2->SetLineWidth(2); h1->SetFillColor(kBlack); h1->SetFillStyle(3005); h1->SetLineColor(kBlack); leg->AddEntry(h1,Form("GGF H(115) X %.0f",magnifySgn_),"F"); } if((it->first).find("Data")!=string::npos){ hData = (TH1F*)h1->Clone("hData"); hData->Sumw2(); hData->SetMarkerStyle(20); hData->SetMarkerSize(1.2); hData->SetMarkerColor(kBlack); hData->SetLineColor(kBlack); hData->SetXTitle(XTitle_+" ("+Unities_+")"); hData->SetYTitle(Form(" Events/(%.0f %s)", hData->GetBinWidth(1), Unities_.Data() ) ); hData->SetTitleSize(0.04,"X"); hData->SetTitleSize(0.05,"Y"); hData->SetTitleOffset(0.95,"Y"); leg->AddEntry(hData,"DATA","P"); } if(iter==0) hSiml=(TH1F*)h1->Clone("hSiml"); else if((it->first).find("Data")==string::npos) hSiml->Add(h1); if((it->first).find("Data")==string::npos) aStack->Add(h1); if(VERBOSE) cout<<(it->first) << " ==> " << h1->Integral() << " +/- " << TMath::Sqrt(h1->GetEntries())*(h1->Integral()/h1->GetEntries()) << endl; } // all signal summed together: hSgn = (TH1F*)hSgn1->Clone("hSgn"); hSgn->Add(hSgn1,hSgn2,1,1); if(VERBOSE) cout<< "S/sqrt(B) ==> " << hSgn->Integral()/ TMath::Sqrt(hSiml->Integral()) << " +/- " << (1./2)*TMath::Sqrt(hSiml->GetEntries())*(hSiml->GetSumOfWeights())/hSiml->Integral()*( hSgn->Integral()/ TMath::Sqrt(hSiml->Integral()) ) << endl; hData->SetXTitle(XTitle_+" ("+Unities_+")"); hData->SetYTitle(Form(" Events/(%.1f %s)", hData->GetBinWidth(1), Unities_.Data() ) ); hData->SetTitleSize(0.04,"X"); hData->SetTitleSize(0.05,"Y"); hData->SetTitleOffset(0.95,"Y"); hData->Draw("P"); aStack->Draw("HISTSAME"); hData->Draw("PSAME"); //hSgn1->Draw("HISTSAME"); //hSgn2->Draw("HISTSAME"); TH1F* hStack = (TH1F*)aStack->GetHistogram(); hStack->SetXTitle(XTitle_+" ("+Unities_+")"); hStack->SetYTitle(Form(" Events/(%.0f %s)", hStack->GetBinWidth(1), Unities_.Data() ) ); hStack->SetTitleSize(0.04,"X"); hStack->SetTitleSize(0.05,"Y"); hStack->SetTitleOffset(0.95,"Y"); //aStack->GetYaxis()->SetRangeUser(0.0,std::max(hData->GetMaximum(),hStack->GetMaximum())*1.1); leg->Draw(); }
void compareplots(){ vector<TFile*> files; files.push_back(new TFile("/storage/9/schweiger/analyseFxFx/pythia8/100kEvents/mergingscale_100/ttbar2JetLO8TeVMECut50GeVCTEQ6M-extracted.root")); files.push_back(new TFile("/storage/9/schweiger/analyseFxFx/pythia8/100kEvents/mergingscale_100/ttbarMergedMS100GeVMCCut50GeV8TeVCTEQ6M-extracted.root")); vector<TString> names; names.push_back("ttbar+2 Jets, in LO"); names.push_back("ttbar+1 Jet, FxFx-Merged"); vector<TString> titles; titles.push_back("Gen-Jet p_{T} with pos weights (GeV)"); titles.push_back("Gen-Jet p_{T} with neg weights (GeV)"); titles.push_back("Gen-Jet p_{T} (GeV)"); titles.push_back("Gen_Jet #phi with pos. weights"); titles.push_back("Gen_Jet #phi with neg. weights"); titles.push_back("Gen_Jet #phi"); titles.push_back("Gen Jet #theta with pos weights"); titles.push_back("Gen Jet #theta with neg weights"); titles.push_back("Gen Jet #theta"); titles.push_back("Gen Jet Energy with pos weights (GeV) "); titles.push_back("Gen Jet Energy with neg weights (GeV)"); titles.push_back("Gen Jet Energy (GeV)"); titles.push_back("p_{T} of hardest Gen-Jet with pos weights (GeV)"); titles.push_back("p_{T} of hardest Gen-Jet with neg weights (GeV)"); titles.push_back("p_{T} of hardest Gen-Jet (GeV)"); titles.push_back("p_{T} of 2nd hardest Gen-Jet with pos weights (GeV)"); titles.push_back("p_{T} of 2nd hardest Gen-Jet with neg weights (GeV)"); titles.push_back("p_{T} of 2nd hardest Gen-Jet (GeV)"); titles.push_back("#eta of hardest Gen-Jets with pos weights"); titles.push_back("#eta of hardest Gen-Jets with neg weights"); titles.push_back("#eta of hardest Gen-Jets"); titles.push_back("Number of Gen-Jets with pos. weights"); titles.push_back("Number of Gen-Jets with neg. weights"); titles.push_back("Number of Gen-Jets"); TFile *vergleich = new TFile("vergleich_ttbar_Fx_vs_noFx.root","RECREATE"); // Show no statistics box gStyle->SetOptStat(0); TH1::SetDefaultSumw2(); // Main program part TIter nextkey(files.at(0)->GetListOfKeys()); TKey *key; bool first=true; TCanvas* c = new TCanvas(); c->Print("plots.pdf["); // Save also as pictures int pictureNumber = 0; int run = 0; while (key = (TKey*)nextkey()) { pictureNumber++; TString pictureName = TString::Format("%d.png",pictureNumber); vector<TH1F*> histos; histos.push_back((TH1F*)key->ReadObj()); for(size_t i=1;i<files.size();i++){ histos.push_back((TH1F*)files.at(i)->Get(histos.at(0)->GetName())); } for(size_t i=0;i<histos.size();i++){ if(i == 0){ histos.at(i)->SetLineColor(kBlack); } if(i == 1){ histos.at(i)->SetLineColor(kRed); } if(i == 2){ histos.at(i)->SetLineColor(kBlue); } if(i == 3){ histos.at(i)->SetLineColor(kGreen+2); } if(i == 4){ histos.at(i)->SetLineColor(kMagenta-7); } if(i == 5){ histos.at(i)->SetLineColor(kOrange+7); } } for(size_t i=0;i<histos.size();i++){ histos.at(i)->Sumw2(); histos.at(i)->Scale(1./histos.at(i)->Integral(),"width"); } // Set axis title histos.at(0)->GetYaxis()->SetTitle("Normalized units"); std::string const histogramName = histos.at(0)->GetName(); histos.at(0)->GetXaxis()->SetLabelSize(0.06); histos.at(0)->GetXaxis()->SetLabelOffset(0.006); histos.at(0)->GetYaxis()->SetLabelSize(0.06); histos.at(0)->GetYaxis()->SetLabelOffset(0.006); histos.at(0)->GetXaxis()->SetTitleSize(0.06); histos.at(0)->GetXaxis()->SetTitleOffset(1.1); histos.at(0)->GetYaxis()->SetTitleSize(0.06); histos.at(0)->GetYaxis()->SetTitleOffset(1.08); histos.at(0)->GetXaxis()->SetTitle(titles.at(run)); run = run+1; if(run == (3*8)){ run = 0; } // If only two histograms per plot make a ratio plot if(histos.size() == 2) { //create main pad TPad *mainPad = new TPad("","",0.0,0.3,1.0,1.0); mainPad->SetNumber(1); mainPad->SetBottomMargin(0.0); mainPad->SetRightMargin(0.04); mainPad->SetLeftMargin(0.13); mainPad->Draw(); //create ratio pad TPad *ratioPad = new TPad("","",0.0,0.0,1.0,0.3); ratioPad->SetTopMargin(0.0); ratioPad->SetBottomMargin(0.4); ratioPad->SetLeftMargin(0.13); ratioPad->SetRightMargin(0.04); gStyle->SetOptTitle(0); ratioPad->SetFillColor(0); ratioPad->SetNumber(2); ratioPad->SetGridy(); ratioPad->Draw(); // Draw both histograms first c->cd(1); histos.at(0)->Draw("histo E"); histos.at(1)->Draw("histo same E"); // Show legend and statistical tests in first pad for(size_t i=0;i<histos.size()-1;i=i+2){ double ksresult = histos.at(i)->KolmogorovTest(histos.at(i+1)); ksresult=floor(ksresult*1000+0.5)/1000; double chi2result =histos.at(i)->Chi2Test(histos.at(i+1),"WW"); chi2result=floor(chi2result*1000+0.5)/1000; stringstream ss; ss << " KS: " <<std::setprecision(3) << ksresult << " chi2: " <<std::setprecision(3) << chi2result << " Private Work"; const char * ch = & ss.str().c_str();; TLatex * ks = new TLatex(0.1, 0.9-0.03*i, ch ); ks->SetTextColor(histos.at(i)->GetLineColor()); ks->SetNDC(); ks->Draw(""); } TLegend* l = new TLegend(0.55,0.9,0.69,0.99); // Options for legend l->SetBorderSize(0); l->SetLineStyle(0); l->SetTextSize(0.049); l->SetFillStyle(0); for(size_t i=0;i<names.size();i++){ l->AddEntry(histos.at(i),names.at(i),"L"); } l->Draw("same"); // Clone histograms and draw ratio plot c->cd(2); TH1F* ratioHisto = (TH1F*)histos.at(0)->Clone(); ratioHisto->Divide(histos.at(1)); ratioHisto->SetLineColor(kBlue); ratioHisto->SetStats(false); ratioHisto->GetYaxis()->SetTitle("Ratio #frac{noFxFx}{FxFx}"); // Same Size like in histogram ratioHisto->SetLabelSize(histos.at(0)->GetLabelSize() * 0.7 / 0.3); ratioHisto->SetTitleOffset((histos.at(0)->GetTitleOffset("Y") * 0.3 / 0.7), "Y"); ratioHisto->SetTitleSize((histos.at(0)->GetTitleSize("Y") * 0.7 / 0.3), "Y"); ratioHisto->SetTitleOffset((histos.at(0)->GetTitleOffset("X")), "X"); ratioHisto->SetTitleSize((histos.at(0)->GetTitleSize("X") * 0.7 / 0.3), "X"); // Use nicer range ratioHisto->GetYaxis()->SetRangeUser(0, 2.2); ratioHisto->GetYaxis()->SetNdivisions(503); ratioHisto->GetYaxis()->SetLabelSize(0.06 * 0.7 / 0.3); ratioHisto->Draw(); } else { histos.at(0)->Draw("histo E"); for(size_t i=0;i<histos.size();i++){ histos.at(i)->Draw("histo same E"); } for(size_t i=0;i<histos.size()-1;i=i+2){ double ksresult = histos.at(i)->KolmogorovTest(histos.at(i+1)); ksresult=floor(ksresult*1000+0.5)/1000; double chi2result =histos.at(i)->Chi2Test(histos.at(i+1),"WW"); chi2result=floor(chi2result*1000+0.5)/1000; stringstream ss; ss << "KS: " <<std::setprecision(3) << ksresult << " chi2: " <<std::setprecision(3) << chi2result; const char * ch = & ss.str().c_str();; TText * ks = new TText(0.1, 0.9-0.03*i, ch ); ks->SetTextColor(histos.at(i)->GetLineColor()); ks->SetNDC(); ks->Draw(""); } TLegend* l = new TLegend(0.65,0.5,0.9,0.7); l->SetBorderSize(0); l->SetLineStyle(0); // l->SetTextSize(0.039); l->SetFillStyle(0); for(size_t i=0;i<names.size();i++){ l->AddEntry(histos.at(i),names.at(i),"L"); } l->Draw("same"); } c->Print("plots.pdf"); c->SaveAs(pictureName); vergleich->WriteTObject(c); } c->Print("plots.pdf]"); }