void n_photons(){ gStyle->SetOptStat(2210); TString filename = TString("/Users/scook/code/MuSIC/simulation/") + TString("MuSIC_5_detector_sim/MuSIC5/output/output_from_hep_batch/") + TString("optical_processes.root"); TFile* file = new TFile(filename.Data(), "READ"); TTree* mppc = (TTree*) file->Get("mppc"); TH1F* hist = new TH1F("h", "Number of detected photons", 1000, 0, 1000); hist->GetXaxis()->SetTitle("Number of photons"); hist->GetYaxis()->SetTitle("Count"); n_photons_t branch; mppc->SetBranchAddress("mppc_x", branch.x); mppc->SetBranchAddress("mppc_y", branch.y); mppc->SetBranchAddress("mppc_z", branch.z); mppc->SetBranchAddress("mppc_hits", &branch.nhits); for(int entry = 0; entry < mppc->GetEntries(); ++entry) { mppc->GetEntry(entry); int count = 0; for(Int_t hit = 0; hit < branch.nhits; ++hit) { bool correct_z = 3635.0 < branch.z[hit] && branch.z[hit] < 3640.0; bool correct_y = 97.0 < branch.y[hit] && branch.y[hit] < 102.0; if(correct_z && correct_y) { ++count; } } if (count > 0) hist->Fill(count); } TCanvas* can = new TCanvas("c1","c1",1436,856); can->SetLogx(); can->SetLogy(); hist->Draw(); can->Update(); TPaveStats* stats = (TPaveStats*) hist->FindObject("stats"); stats->SetX1NDC(0.65); stats->SetX2NDC(0.90); stats->SetY1NDC(0.70); stats->SetY2NDC(0.90); can->Update(); can->SaveAs("n_photons.png"); can->SaveAs("n_photons.svg"); }
void FitDijetMass_Data() { TFile *inf = new TFile("MassResults_ak7calo.root"); TH1F *hCorMassDen = (TH1F*) inf->Get("DiJetMass"); hCorMassDen->SetXTitle("Corrected Dijet Mass (GeV)"); hCorMassDen->SetYTitle("Events/GeV"); hCorMassDen->GetYaxis()->SetTitleOffset(1.5); hCorMassDen->SetMarkerStyle(20); hCorMassDen->GetXaxis()->SetRangeUser(120.,900.); gROOT->ProcessLine(".L tdrstyle.C"); setTDRStyle(); tdrStyle->SetErrorX(0.5); tdrStyle->SetPadRightMargin(0.08); tdrStyle->SetLegendBorderSize(0); gStyle->SetOptFit(1111); tdrStyle->SetOptStat(0); TCanvas* c2 = new TCanvas("c2","DijetMass", 500, 500); /////// perform 4 parameters fit TF1 *func = new TF1("func", "[0]*((1-x/7000.+[3]*(x/7000)^2)^[1])/(x^[2])", 100., 1000.); func->SetParameter(0, 1.0e+08); func->SetParameter(1, -1.23); func->SetParameter(2, 4.13); func->SetParameter(3, 1.0); func->SetLineColor(4); func->SetLineWidth(3); TVirtualFitter::SetMaxIterations( 10000 ); TVirtualFitter *fitter; TMatrixDSym* cov_matrix; int fitStatus = hCorMassDen->Fit("func","LLI","",130.0, 800.0); // QCD fit TH1F *hFitUncertainty = hCorMassDen->Clone("hFitUncertainty"); hFitUncertainty->SetLineColor(5); hFitUncertainty->SetFillColor(5); hFitUncertainty->SetMarkerColor(5); if (fitStatus == 0) { fitter = TVirtualFitter::GetFitter(); double* m_elements = fitter->GetCovarianceMatrix(); cov_matrix = new TMatrixDSym( func->GetNumberFreeParameters(),m_elements); cov_matrix->Print(); double x, y, e; for(int i=0;i<hFitUncertainty->GetNbinsX();i++) { x = hFitUncertainty->GetBinCenter(i+1); y = func->Eval(x); e = QCDFitUncertainty( func, *cov_matrix, x); hFitUncertainty->SetBinContent(i+1,y); hFitUncertainty->SetBinError(i+1,e); } } hCorMassDen->Draw("ep"); gPad->Update(); TPaveStats *st = (TPaveStats*)hCorMassDen->FindObject("stats"); st->SetName("stats1"); st->SetX1NDC(0.3); //new x start position st->SetX2NDC(0.6); //new x end position st->SetTextColor(4); hCorMassDen->GetListOfFunctions()->Add(st); /////// perform 2 parameters fit TF1 *func2 = new TF1("func2", "[0]*(1-x/7000.)/(x^[1])", 100., 1000.); func2->SetParameter(0, 10000.); func2->SetParameter(1, 5.0); func2->SetLineWidth(3); fitStatus = hCorMassDen->Fit("func2","LLI","",130.0, 800.0); // QCD fit TH1F *hFitUncertainty2 = hCorMassDen->Clone("hFitUncertainty2"); hFitUncertainty2->SetLineColor(kGray); hFitUncertainty2->SetFillColor(kGray); hFitUncertainty2->SetMarkerColor(kGray); if (fitStatus == 0) { fitter = TVirtualFitter::GetFitter(); double* m_elements = fitter->GetCovarianceMatrix(); cov_matrix = new TMatrixDSym( func2->GetNumberFreeParameters(),m_elements); cov_matrix->Print(); double x, y, e; for(int i=0;i<hFitUncertainty2->GetNbinsX();i++) { x = hFitUncertainty2->GetBinCenter(i+1); y = func2->Eval(x); e = QCDFitUncertainty( func2, *cov_matrix, x); hFitUncertainty2->SetBinContent(i+1,y); hFitUncertainty2->SetBinError(i+1,e); } } hFitUncertainty->Draw("E3 same"); hCorMassDen->Draw("ep sames"); hFitUncertainty2->Draw("E3 same"); hCorMassDen->Draw("ep sames"); func2->Draw("same"); c2->SetLogy(1); /* TH1F *hCorMass = hCorMassDen->Clone("hCorMass"); for(int i=0; i<hCorMass->GetNbinsX(); i++){ hCorMass->SetBinContent(i+1, hCorMassDen->GetBinContent(i+1) * hCorMassDen->GetBinWidth(i+1)); hCorMass->SetBinError(i+1, hCorMassDen->GetBinError(i+1) * hCorMassDen->GetBinWidth(i+1)); } // Our observable is the invariant mass RooRealVar invMass("invMass", "Corrected dijet mass", 100., 1000.0, "GeV"); RooDataHist data( "data", "", invMass, hCorMass); ////////////////////////////////////////////// // make QCD model RooRealVar p0("p0", "# events", 600.0, 0.0, 10000000000.); RooRealVar p1("p1","p1", 3.975, -10., 10.) ; RooRealVar p2("p2","p2", 5.302, 4., 8.) ; RooRealVar p3("p3","p3", -1.51, -100., 100.) ; // // define QCD line shape RooGenericPdf qcdModel("qcdModel", "pow(1-@0/7000.+@3*(@0/7000.)*(@0/7000.),@1)*pow(@0/7000.,-@2)", RooArgList(invMass,p1,p2,p3)); // full model RooAddPdf model("model","qcd",RooArgList(qcdModel), RooArgList(p0)); //plot sig candidates, full model, and individual componenets // __ _ _ // / _(_) |_ // | |_| | __| // | _| | |_ // |_| |_|\__| // Important: fit integrating f(x) over ranges defined by X errors, rather // than taking point at center of bin RooFitResult* fit = model.fitTo(data, Minos(kFALSE), Extended(kTRUE), SumW2Error(kFALSE),Save(kTRUE), Range(130.,800.), Integrate(kTRUE) ); // to perform chi^2 minimization fit instead // RooFitResult* fit = model.chi2FitTo(data, Extended(kTRUE), // Save(),Range(50.,526.),Integrate(kTRUE) ); fit->Print(); //plot data TCanvas* cdataNull = new TCanvas("cdataNull","fit to dijet mass",500,500); RooPlot* frame1 = invMass.frame() ; data.plotOn(frame1, DataError(RooAbsData::SumW2) ) ; model.plotOn(frame1, LineColor(kBlue)) ; model.plotOn(frame1, VisualizeError(*fit, 1),FillColor(kYellow)) ; data.plotOn(frame1, DataError(RooAbsData::SumW2) ) ; model.plotOn(frame1, LineColor(kBlue)) ; model.paramOn(frame1, Layout(0.4, 0.85, 0.92)); TPaveText* dataPave = (TPaveText*) frame1->findObject("model_paramBox"); dataPave->SetY1(0.77); gPad->SetLogy(); frame1->GetYaxis()->SetNoExponent(); frame1->GetYaxis()->SetRangeUser(5E-2,5E+4); frame1->GetYaxis()->SetTitle("Events / bin"); frame1->GetYaxis()->SetTitleOffset(1.35); frame1->SetTitle("fit to data with QCD lineshape"); frame1->Draw() ; // S h o w r e s i d u a l a n d p u l l d i s t s // ------------------------------------------------------- //// Construct a histogram with the residuals of the data w.r.t. the curve RooHist* hresid = frame1->residHist() ; // Create a new frame to draw the residual distribution and add the distribution to the frame RooPlot* frame2 = invMass.frame(Title("Residual Distribution")) ; frame2->addPlotable(hresid,"P") ; ///// Construct a histogram with the pulls of the data w.r.t the curve RooHist* hpull = frame1->pullHist() ; //// Create a new frame to draw the pull distribution and add the distribution to the frame RooPlot* frame3 = invMass.frame(Title("Pull Distribution")) ; frame3->addPlotable(hpull,"P") ; TCanvas* cResidual = new TCanvas("cResidual","Residual Distribution",1000,500); cResidual->Divide(2) ; cResidual->cd(1) ; gPad->SetLeftMargin(0.15) ; frame1->GetYaxis()->SetTitleOffset(1.6) ; frame2->Draw() ; cResidual->cd(2) ; gPad->SetLeftMargin(0.15) ; frame1->GetYaxis()->SetTitleOffset(1.6) ; frame3->Draw() ; */ }
void comparisonJetMCData(string plot,int rebin){ string tmp; string dir="/gpfs/cms/data/2011/Observables/"; //string dir=plotpath; if (isAngularAnalysis){ mcfile=dir+"MC_zjets"+version; back_w=dir+"MC_wjets"+version; back_ttbar=dir+"MC_ttbar"+version; WW=dir+"MC_diW"+version; ZZ=dir+"MC_siZ"+version; WZ=dir+"MC_diWZ"+version; datafile=dir+"DATA"+version; } // List of files TFile *dataf = TFile::Open(datafile.c_str()); //data file TFile *mcf = TFile::Open(mcfile.c_str()); //MC file TFile *ttbarf = TFile::Open(back_ttbar.c_str()); //MC background file TFile *wf = TFile::Open(back_w.c_str()); TFile *qcd23emf = TFile::Open(qcd23em.c_str()); TFile *qcd38emf = TFile::Open(qcd38em.c_str()); TFile *qcd817emf = TFile::Open(qcd817em.c_str()); TFile *qcd23bcf = TFile::Open(qcd23bc.c_str()); TFile *qcd38bcf = TFile::Open(qcd38bc.c_str()); TFile *qcd817bcf = TFile::Open(qcd817bc.c_str()); TFile *WZf = TFile::Open(WZ.c_str()); TFile *ZZf = TFile::Open(ZZ.c_str()); TFile *WWf = TFile::Open(WW.c_str()); // Canvas if (CanvPlot) delete CanvPlot; CanvPlot = new TCanvas("CanvPlot","CanvPlot",0,0,800,600); // Getting, defining ... dataf->cd("validationJEC"); TObject * obj; gDirectory->GetObject(plot.c_str(),obj); TH1 *data; TH2F *data2; TH1D *data3; THStack *hs = new THStack("hs","Total MC"); int flag=-1; if ((data = dynamic_cast<TH1F *>(obj)) ){ flag=1; gROOT->Reset(); gROOT->ForceStyle(); gStyle->SetPadRightMargin(0.03); gPad->SetLogy(1); gPad->Modified(); gPad->Update(); } if ((data2 = dynamic_cast<TH2F *>(obj)) ){ flag=2; gStyle->SetPalette(1); gStyle->SetPadRightMargin(0.15); gPad->Modified(); } //=================== // Dirty jobs :) if (flag==1){ CanvPlot->cd(); TPad *pad1 = new TPad("pad1","pad1",0,0.3,1,1); pad1->Draw(); pad1->cd(); pad1->SetLogy(1); TString str=data->GetTitle(); if (str.Contains("jet") && !str.Contains("zMass") && !str.Contains("Num") && !str.Contains("Eta") && !str.Contains("Phi") && !str.Contains("eld") && !str.Contains("meanPtZVsNjet")) { if (!isAngularAnalysis) rebin=5; } //====================== // DATA Double_t dataint = data->Integral(); data->SetLineColor(kBlack); data->Rebin(rebin); if(str.Contains("nJetVtx")) data->GetXaxis()->SetRangeUser(0,10); if(str.Contains("zMass")) data->GetXaxis()->SetRangeUser(70,110); data->SetMinimum(1.); data->Sumw2(); data->Draw("E1"); TLegend* legend = new TLegend(0.825,0.57,0.95,0.72); legend->SetFillColor(0); legend->SetFillStyle(0); legend->SetBorderSize(0); legend->AddEntry(data,"data","p"); // hack to calculate some yields in restricted regions... int num1=0, num2=0, num3=0, num4=0, num5=0; if(str.Contains("invMass") && !str.Contains("PF")){ for(int j=1;j<=data->GetNbinsX();j++){ num1 += data->GetBinContent(j); //conto quante Z ci sono tra 60 e 120 GeV if(j>10&&j<=50) num2 += data->GetBinContent(j); // ... tra 70 e 110 if(j>15&&j<=45) num3 += data->GetBinContent(j); // ... tra 75 e 105 } cout << "\n"; cout << data->GetNbinsX() <<" Number of bins of the invmass histo\n"; printf("Number of Z in 60-120 %i --- 70-110 %i --- 75-105 %i \n",num1,num2,num3); cout << "\n"; } if(str.Contains("zYieldVsjets") && !str.Contains("Vtx")){ for(int j=1;j<=data->GetNbinsX();j++){ num1 += data->GetBinContent(j); //conto quante Z if(j>1) num2 += data->GetBinContent(j); // ... +1,2,3,4... jets if(j>2) num3 += data->GetBinContent(j); // ... +2,3,4... jets if(j>3) num4 += data->GetBinContent(j); // .. if(str=="jet_pT"){ if(j>4) num5 += data->GetBinContent(j); // ... +4... jets } cout << "\n"; cout << data->GetNbinsX() <<" Number of bins of the zYieldVsjets histo\n"; printf("Number of Z+n jet %i --- >1 %i --- >2 %i --- >3 %i --- >4 %i \n",num1,num2,num3,num4,num5); cout << "\n"; } //====================== // Z + jets signal mcf->cd("validationJEC"); TH1F* mc; gDirectory->GetObject(plot.c_str(),mc); TH1F * hsum; if(mc){ hsum = (TH1F*) mc->Clone(); hsum->SetTitle("hsum"); hsum->SetName("hsum"); hsum->Reset(); Double_t mcint = mc->Integral(); mc->SetFillColor(kRed); mc->Sumw2(); if(lumiweights==0) mc->Scale(dataint/mcint); // Blocco da propagare negli altri MC if(zNumEvents>0.){ if(lumiweights==1) { if (WholeStat){ if (lumiPixel) mc->Scale( dataLumi2011pix / (zNumEvents / zjetsXsect)); else mc->Scale( dataLumi2011 / (zNumEvents / zjetsXsect)); } else{ if (RunA){ if (lumiPixel) mc->Scale( dataLumi2011Apix / (zNumEvents / zjetsXsect)); else mc->Scale( dataLumi2011A / (zNumEvents / zjetsXsect)); } if (!RunA){ if (lumiPixel) mc->Scale( dataLumi2011Bpix / (zNumEvents / zjetsXsect)); else mc->Scale( dataLumi2011B / (zNumEvents / zjetsXsect)); } } } } else { if(lumiweights==1) mc->Scale(zjetsScale); } // fin qui if(lumiweights==1) mc->Scale(1./zwemean); // perche' i Weights non fanno 1... mc->Rebin(rebin); if(lumiweights==0) mc->Draw("HISTO SAMES"); hsum->Rebin(rebin); hsum->Add(mc); legend->AddEntry(mc,"Z+jets","f"); } //====================== // ttbar ttbarf->cd("validationJEC"); TH1F* ttbar; gDirectory->GetObject(plot.c_str(),ttbar); if(ttbar){ ttbar->SetFillColor(kBlue); ttbar->Sumw2(); if(ttNumEvents>0.){ if(lumiweights==1) { if (WholeStat){ if (lumiPixel) ttbar->Scale( dataLumi2011pix / (ttNumEvents / ttbarXsect)); else ttbar->Scale( dataLumi2011 / (ttNumEvents / ttbarXsect)); } else{ if (RunA){ if (lumiPixel) ttbar->Scale( dataLumi2011Apix / (ttNumEvents / ttbarXsect)); else ttbar->Scale( dataLumi2011A / (ttNumEvents / ttbarXsect)); } if (!RunA){ if (lumiPixel) ttbar->Scale( dataLumi2011Bpix / (ttNumEvents / ttbarXsect)); else ttbar->Scale( dataLumi2011B / (ttNumEvents / ttbarXsect)); } } } } else { if(lumiweights==1) ttbar->Scale(ttwemean); } // fin qui if(lumiweights==1) ttbar->Scale(1./ttwemean); // perche' i Weights non fanno 1... ttbar->Rebin(rebin); if(lumiweights==0) ttbar->Draw("HISTO SAMES"); hsum->Rebin(rebin); hsum->Add(ttbar); if(lumiweights==1)legend->AddEntry(ttbar,"ttbar","f"); ////////// //Storing the bckgrounds! ////////// if(str=="jet_pT") evaluateAndFillBackgrounds(ttbar,"jet_pT"); if(str=="jet_pT2") evaluateAndFillBackgrounds(ttbar,"jet_pT2"); if(str=="jet_pT3") evaluateAndFillBackgrounds(ttbar,"jet_pT3"); if(str=="jet_pT4") evaluateAndFillBackgrounds(ttbar,"jet_pT4"); if(str=="Jet_multi") evaluateAndFillBackgrounds(ttbar,"jet_Multiplicity"); } //====================== // w+jets wf->cd("validationJEC"); TH1F* w; gDirectory->GetObject(plot.c_str(),w); if(w){ w->SetFillColor(kViolet+2); w->Sumw2(); if(wNumEvents>0.){ if(lumiweights==1) { if (WholeStat){ if (lumiPixel) w->Scale( dataLumi2011pix / (wNumEvents / wjetsXsect)); else w->Scale( dataLumi2011 / (wNumEvents / wjetsXsect)); } else{ if (RunA){ if (lumiPixel) w->Scale( dataLumi2011Apix / (wNumEvents / wjetsXsect)); else w->Scale( dataLumi2011A / (wNumEvents / wjetsXsect)); } if (!RunA){ if (lumiPixel) w->Scale( dataLumi2011Bpix / (wNumEvents / wjetsXsect)); else w->Scale( dataLumi2011B / (wNumEvents / wjetsXsect)); } } } } else { if(lumiweights==1) w->Scale(wwemean); } // fin qui if(lumiweights==1) w->Scale(1./wwemean); // perche' i Weights non fanno 1... w->Rebin(rebin); if(lumiweights==0) w->Draw("HISTO SAMES"); hsum->Rebin(rebin); hsum->Add(w); if(lumiweights==1)legend->AddEntry(w,"W+jets","f"); } //====================== // wz+jets WZf->cd("validationJEC"); TH1F* wz; gDirectory->GetObject(plot.c_str(),wz); if(wz){ wz->SetFillColor(kYellow+2); wz->Sumw2(); if(wzEvents>0.){ if(lumiweights==1) { if (WholeStat){ if (lumiPixel) wz->Scale( dataLumi2011pix / (wzEvents / WZXsect)); else wz->Scale( dataLumi2011 / (wzEvents / WZXsect)); } else{ if (RunA){ if (lumiPixel) wz->Scale( dataLumi2011Apix / (wzEvents / WZXsect)); else wz->Scale( dataLumi2011A / (wzEvents / WZXsect)); } if (!RunA){ if (lumiPixel) wz->Scale( dataLumi2011Bpix / (wzEvents / WZXsect)); else wz->Scale( dataLumi2011B / (wzEvents / WZXsect)); } } } } else { if(lumiweights==1) wz->Scale(wzjetsScale); } // fin qui if(lumiweights==1) wz->Scale(1./wzwemean); // perche' i Weights non fanno 1... wz->Rebin(rebin); if(lumiweights==0) wz->Draw("HISTO SAMES"); hsum->Rebin(rebin); hsum->Add(wz); legend->AddEntry(wz,"WZ+jets","f"); ////////// //Storing the bckgrounds! ////////// if(str=="jet_pT") evaluateAndFillBackgrounds(wz,"jet_pT"); if(str=="jet_pT2") evaluateAndFillBackgrounds(wz,"jet_pT2"); if(str=="jet_pT3") evaluateAndFillBackgrounds(wz,"jet_pT3"); if(str=="jet_pT4") evaluateAndFillBackgrounds(wz,"jet_pT4"); if(str=="Jet_multi") evaluateAndFillBackgrounds(wz,"jet_Multiplicity"); } //====================== // zz+jets ZZf->cd("validationJEC"); TH1F* zz; gDirectory->GetObject(plot.c_str(),zz); if(zz){ zz->SetFillColor(kOrange+2); zz->Sumw2(); if(zzEvents>0.){ if(lumiweights==1) { if (WholeStat){ if (lumiPixel) zz->Scale( dataLumi2011pix / (zzEvents / ZZXsect)); else zz->Scale( dataLumi2011 / (zzEvents / ZZXsect)); } else{ if (RunA){ if (lumiPixel) zz->Scale( dataLumi2011Apix / (zzEvents / ZZXsect)); else zz->Scale( dataLumi2011A / (zzEvents / ZZXsect)); } if (!RunA){ if (lumiPixel) zz->Scale( dataLumi2011Bpix / (zzEvents / ZZXsect)); else zz->Scale( dataLumi2011B / (zzEvents / ZZXsect)); } } } } else { if(lumiweights==1) zz->Scale(zzjetsScale); } // fin qui if(lumiweights==1) zz->Scale(1./zzwemean); // perche' i Weights non fanno 1... zz->Rebin(rebin); if(lumiweights==0) zz->Draw("HISTO SAMES"); hsum->Rebin(rebin); hsum->Add(zz); legend->AddEntry(zz,"ZZ+jets","f"); ////////// //Storing the bckgrounds! ////////// if(str=="jet_pT") evaluateAndFillBackgrounds(zz,"jet_pT"); if(str=="jet_pT2") evaluateAndFillBackgrounds(zz,"jet_pT2"); if(str=="jet_pT3") evaluateAndFillBackgrounds(zz,"jet_pT3"); if(str=="jet_pT4") evaluateAndFillBackgrounds(zz,"jet_pT4"); if(str=="Jet_multi") evaluateAndFillBackgrounds(zz,"jet_Multiplicity"); } //====================== // ww+jets WWf->cd("validationJEC"); TH1F* ww; gDirectory->GetObject(plot.c_str(),ww); if(ww){ ww->SetFillColor(kBlack); ww->Sumw2(); if(wwEvents>0.){ if(lumiweights==1) { if (WholeStat){ if (lumiPixel) ww->Scale( dataLumi2011pix / (wwEvents / WWXsect)); else ww->Scale( dataLumi2011 / (wwEvents / WWXsect)); } else{ if (RunA){ if (lumiPixel) ww->Scale( dataLumi2011Apix / (wwEvents / WWXsect)); else ww->Scale( dataLumi2011A / (wwEvents / WWXsect)); } if (!RunA){ if (lumiPixel) ww->Scale( dataLumi2011Bpix / (wwEvents / WWXsect)); else ww->Scale( dataLumi2011B / (wwEvents / WWXsect)); } } } } else { if(lumiweights==1) ww->Scale(wwjetsScale); } // fin qui if(lumiweights==1) ww->Scale(1./wwwemean); // perche' i Weights non fanno 1... ww->Rebin(rebin); if(lumiweights==0) ww->Draw("HISTO SAMES"); hsum->Rebin(rebin); hsum->Add(ww); legend->AddEntry(ww,"WW+jets","f"); ////////// //Storing the bckgrounds! ////////// if(str=="jet_pT") evaluateAndFillBackgrounds(ww,"jet_pT"); if(str=="jet_pT2") evaluateAndFillBackgrounds(ww,"jet_pT2"); if(str=="jet_pT3") evaluateAndFillBackgrounds(ww,"jet_pT3"); if(str=="jet_pT4") evaluateAndFillBackgrounds(ww,"jet_pT4"); if(str=="Jet_multi") evaluateAndFillBackgrounds(ww,"jet_Multiplicity"); } ///////// // Print the bkg contributions //////// for(int j=0;j<bckg_leadingJetPt.size();j++){ cout<<bckg_leadingJetPt[j]<<endl; } //====================== // QCD EM enriched qcd23emf->cd("validationJEC"); TH1F* qcd23emp; gDirectory->GetObject(plot.c_str(),qcd23emp); if(qcd23emp){ TH1D * qcdTotEM = (TH1D*) qcd23emp->Clone(); qcdTotEM->SetTitle("qcd em"); qcdTotEM->SetName("qcd em"); qcdTotEM->Reset(); qcdTotEM->Rebin(rebin); qcd38emf->cd("validationJEC"); TH1F* qcd38emp; gDirectory->GetObject(plot.c_str(),qcd38emp); qcd817emf->cd("validationJEC"); TH1F* qcd817emp; gDirectory->GetObject(plot.c_str(),qcd817emp); qcd23emp->Rebin(rebin); qcd23emp->Sumw2(); qcd23emp->Scale(qcd23emScale); qcd38emp->Rebin(rebin); qcd38emp->Sumw2(); qcd38emp->Scale(qcd38emScale); qcd817emp->Rebin(rebin); qcd817emp->Sumw2(); qcd817emp->Scale(qcd817emScale); qcdTotEM->SetFillColor(kOrange+1); qcdTotEM->Add(qcd23emp); qcdTotEM->Add(qcd38emp); qcdTotEM->Add(qcd817emp); hsum->Add(qcdTotEM); if(lumiweights==1)legend->AddEntry(qcdTotEM,"QCD em","f"); } //====================== // QCD bc qcd23bcf->cd("validationJEC"); TH1F* qcd23bcp; TH1D * qcdTotBC; bool qcdbcempty=true; gDirectory->GetObject(plot.c_str(),qcd23bcp); if(qcd23bcp){ qcdTotBC = (TH1D*) qcd23bcp->Clone(); qcdTotBC->SetTitle("qcd bc"); qcdTotBC->SetName("qcd bc"); qcdTotBC->Reset(); qcdTotBC->Rebin(rebin); qcd38bcf->cd("validationJEC"); TH1F* qcd38bcp; gDirectory->GetObject(plot.c_str(),qcd38bcp); qcd817bcf->cd("validationJEC"); TH1F* qcd817bcp; gDirectory->GetObject(plot.c_str(),qcd817bcp); qcd23bcp->Rebin(rebin); qcd23bcp->Sumw2(); qcd23bcp->Scale(qcd23bcScale); qcd38bcp->Rebin(rebin); qcd38bcp->Sumw2(); qcd38bcp->Scale(qcd38bcScale); qcd817bcp->Rebin(rebin); qcd817bcp->Sumw2(); qcd817bcp->Scale(qcd817bcScale); qcdTotBC->SetFillColor(kGreen+2); qcdTotBC->Add(qcd23bcp); qcdTotBC->Add(qcd38bcp); qcdTotBC->Add(qcd817bcp); hsum->Add(qcdTotBC); if (qcdTotBC->GetEntries()>0) qcdbcempty=false; if(lumiweights==1)legend->AddEntry(qcdTotBC,"QCD bc","f"); } //====================== // Add here other backgrounds //====================== // Stacked Histogram //if(qcd23em) hs->Add(qcdTotEM); if(!qcdbcempty) hs->Add(qcdTotBC); if (ww) hs->Add(ww); if (ttbar) hs->Add(ttbar); if(w) hs->Add(w); if (zz) hs->Add(zz); if (wz) hs->Add(wz); if(mc) hs->Add(mc); //Z+Jets // per avere le statistiche if(lumiweights==1) hsum->Draw("HISTO SAMES"); //====================== // Setting the stats pad1->Update(); // altrimenti non becchi la stat TPaveStats *r2; if(lumiweights==0) r2 = (TPaveStats*)mc->FindObject("stats"); if(lumiweights==1) r2 = (TPaveStats*)hsum->FindObject("stats"); r2->SetY1NDC(0.875); r2->SetY2NDC(0.75); r2->SetTextColor(kRed); if(lumiweights==1) hs->Draw("HISTO SAME"); gPad->RedrawAxis(); data->Draw("E1 SAMES"); r2->Draw(); legend->Draw(); TLegend* lumi = new TLegend(0.45,0.3,0.75,0.2); lumi->SetFillColor(0); lumi->SetFillStyle(0); lumi->SetBorderSize(0); lumi->AddEntry((TObject*)0,"#int L dt =4.9 1/fb",""); lumi->Draw(); //TLatex *latexLabel=CMSPrel(4.890,"",0.65,0.9); // make fancy label //latexLabel->Draw("same"); CanvPlot->Update(); //===============// // RATIO DATA MC // //===============// CanvPlot->cd(); TPad *pad2 = new TPad("pad2","pad2",0,0,1,0.3); pad2->Draw(); pad2->cd(); TH1D * ratio = (TH1D*) data->Clone(); ratio->SetTitle("ratio"); ratio->SetName("ratio"); ratio->Reset(); ratio->Sumw2(); //data->Sumw2(); hsum->Sumw2(); // FIXME controlla che sia corretto questo... ratio->SetMarkerSize(.5); ratio->SetLineColor(kBlack); ratio->SetMarkerColor(kBlack); gStyle->SetOptStat("m"); TH1F* sumMC; hs->Draw("nostack"); sumMC=(TH1F*) hs->GetHistogram(); ratio->Divide(data,hsum,1.,1.); ratio->GetYaxis()->SetRangeUser(0,2); pad2->SetTopMargin(1); ratio->Draw("E1"); TLine *OLine = new TLine(ratio->GetXaxis()->GetXmin(),1.,ratio->GetXaxis()->GetXmax(),1.); OLine->SetLineColor(kBlack); OLine->SetLineStyle(2); OLine->Draw(); TLegend* label = new TLegend(0.60,0.9,0.50,0.95); label->SetFillColor(0); label->SetFillStyle(0); label->SetBorderSize(0); //horrible mess double binContent = 0; double binSum = 0; double weightSum = 0; double binError = 1; double totalbins = ratio->GetSize() -2; for(unsigned int bin=1;bin<=totalbins;bin++){ binContent = ratio->GetBinContent(bin); binError = ratio->GetBinError(bin); if(binError!=0){ binSum += binContent/binError; weightSum += 1./binError; } } double ymean = binSum / weightSum; //double ymean = ratio->GetMean(2); stringstream sYmean; sYmean << ymean; string labeltext=sYmean.str()+" mean Y"; //label->AddEntry((TObject*)0,labeltext.c_str(),""); // mean on Y //label->Draw(); TPaveStats *r3 = (TPaveStats*)ratio->FindObject("stats"); r3->SetX1NDC(0.01); r3->SetX2NDC(0.10); r3->SetY1NDC(0.20); r3->SetY2NDC(0.50); gStyle->SetOptStat("mr"); r3->SetTextColor(kWhite); r3->SetLineColor(kWhite); r3->Draw(); CanvPlot->Update(); tmp=plotpath+plot+".png"; CanvPlot->Print(tmp.c_str()); OutputFile->cd(); string plotTmp; plotTmp = plot+"Ratio"; ratio->SetName(plotTmp.c_str()); ratio->Write(); plotTmp = plot+"Data"; data->SetName(plotTmp.c_str()); data->Write(); plotTmp = plot+"MC"; hsum->SetName(plotTmp.c_str()); hsum->Write(); } else if (flag==2){ //CanvPlot.Divide(2,1); //CanvPlot.cd(1); // data dataf->cd("validationJEC"); gDirectory->GetObject(plot.c_str(),data2); data2->Draw("COLZ"); gPad->Update(); // altrimenti non becchi la stat TPaveStats *r1 = (TPaveStats*)data2->FindObject("stats"); r1->SetX1NDC(0.70); r1->SetX2NDC(0.85); r1->Draw(); CanvPlot->Update(); tmp=plotpath+plot+"data.png"; CanvPlot->Print(tmp.c_str()); //CanvPlot.cd(2); // montecarlo mcf->cd("validationJEC"); gDirectory->GetObject(plot.c_str(),data2); data2->SetMinimum(1); data2->Draw("COLZ"); gPad->Update(); // altrimenti non becchi la stat TPaveStats *r2 = (TPaveStats*)data2->FindObject("stats"); r2->SetX1NDC(0.70); r2->SetX2NDC(0.85); r2->Draw(); CanvPlot->Update(); tmp=plotpath+plot+"mc.png"; CanvPlot->Print(tmp.c_str()); } // else { cout << "You're getting an exception! Most likely there's no histogram here... \n"; } delete data; delete data2; delete hs; //delete CanvPlot; dataf->Close(); mcf->Close(); ttbarf->Close(); wf->Close(); qcd23emf->Close(); qcd38emf->Close(); qcd817emf->Close(); qcd23bcf->Close(); qcd38bcf->Close(); qcd817bcf->Close(); WZf->Close(); ZZf->Close(); if (bckg_leadingJetPt.size()>0 && bckg_2leadingJetPt.size()>0 && bckg_3leadingJetPt.size()>0 && bckg_4leadingJetPt.size()>0 && bckg_JetMultiplicity.size()>0 && cold){ fzj->cd(); treeBKG_->Fill(); treeBKG_->Write(); TH1F *leadhisto=new TH1F("leadhisto","leading jet background contribution",bckg_leadingJetPt.size(),0,bckg_leadingJetPt.size()); TH1F *leadhisto2=new TH1F("leadhisto2","subleading jet background contribution",bckg_leadingJetPt.size(),0,bckg_leadingJetPt.size()); TH1F *leadhisto3=new TH1F("leadhisto3","subsubleading jet background contribution",bckg_leadingJetPt.size(),0,bckg_leadingJetPt.size()); TH1F *leadhisto4=new TH1F("leadhisto4","subsubsubleading jet background contribution",bckg_leadingJetPt.size(),0,bckg_leadingJetPt.size()); TH1F *multiphisto=new TH1F("multiphisto","jet multiplicity background contribution",bckg_JetMultiplicity.size(),0,bckg_JetMultiplicity.size()); for (int i=0; i< bckg_leadingJetPt.size(); i++){ leadhisto->Fill(i,bckg_leadingJetPt[i]); leadhisto2->Fill(i,bckg_2leadingJetPt[i]); leadhisto3->Fill(i,bckg_3leadingJetPt[i]); leadhisto4->Fill(i,bckg_4leadingJetPt[i]); } leadhisto->Write(); leadhisto2->Write(); leadhisto3->Write(); leadhisto4->Write(); //fzj->Close(); for (int i=0; i< bckg_JetMultiplicity.size(); i++){ multiphisto->Fill(i,bckg_JetMultiplicity[i]); } multiphisto->Write(); cold=false; } return; }