void compnclusts(Int_t run) { TFile* f = new TFile(Form("hodtest_%d.root",run)); cout << "hcana root file " << Form("hodtest_%d.root",run) << endl; TH1F* h = nclust; TFile* f1 = new TFile(Form("%d_hbk.root",run)); cout << "Engine root file " << Form("%d_hbk.root",run) << endl; TH1F* h1; switch (run) { case 50017 : // h1 = h212; //A+ break; default : h1 = h412; //hnclusters } TCanvas *c1 = new TCanvas("c1", "Shower Cluster Map", 1000, 667); gPad->SetLogy(); h1->SetFillColor(kGreen); h1->SetLineColor(kGreen); h1->SetFillStyle(1111); h1->Draw(); h->SetFillColor(kBlue); h->SetLineWidth(2); h->SetFillStyle(0); h->Draw("same"); TLatex l; l.SetTextSize(0.04); Float_t maxy = h1->GetBinContent(h1->GetMaximumBin()); Float_t xmin = h1->GetXaxis()->GetXmin(); Float_t xmax = h1->GetXaxis()->GetXmax(); Float_t xt = xmin + 0.67*(xmax-xmin); l.SetTextColor(kGreen); l.DrawLatex(xt,0.095*maxy,"Engine"); l.SetTextColor(kBlue); l.DrawLatex(xt,0.045*maxy,"hcana"); // Difference between the histograms. TCanvas *c2 = new TCanvas("c2", "Cluster differences", 1000, 667); TH1F* dif = h->Clone(); dif->Add(h,h1,1.,-1.); dif->SetTitle("Difference"); dif->SetFillColor(kRed); dif->SetLineColor(kRed); dif->SetLineWidth(1); dif->SetFillStyle(1111); dif->Draw(); }
//_____________________________________________________________________________ void ProofEventProc::Terminate() { // The Terminate() function is the last function to be called during // a query. It always runs on the client, it can be used to present // the results graphically or save the results to file. // Check ranges CheckRanges(); if (gROOT->IsBatch()) return; TCanvas* canvas = new TCanvas("event","event",800,10,700,780); canvas->Divide(2,2); TPad *pad1 = (TPad *) canvas->GetPad(1); TPad *pad2 = (TPad *) canvas->GetPad(2); TPad *pad3 = (TPad *) canvas->GetPad(3); TPad *pad4 = (TPad *) canvas->GetPad(4); // The number of tracks pad1->cd(); pad1->SetLogy(); TH1F *hi = dynamic_cast<TH1F*>(fOutput->FindObject("pz_dist")); if (hi) { hi->SetFillColor(30); hi->SetLineColor(9); hi->SetLineWidth(2); hi->DrawCopy(); } else { Warning("Terminate", "no pz dist found"); } // The Pt distribution pad2->cd(); pad2->SetLogy(); TH1F *hf = dynamic_cast<TH1F*>(fOutput->FindObject("pt_dist")); if (hf) { hf->SetFillColor(30); hf->SetLineColor(9); hf->SetLineWidth(2); hf->DrawCopy(); } else { Warning("Terminate", "no pt dist found"); } // The Px,Py distribution, color surface TH2F *h2f = dynamic_cast<TH2F*>(fOutput->FindObject("px_py")); if (h2f) { // Color surface pad3->cd(); h2f->DrawCopy("SURF1 "); // Lego pad4->cd(); h2f->DrawCopy("CONT2COL"); } else { Warning("Terminate", "no px py found"); } // Final update canvas->cd(); canvas->Update(); }
void makePlot(TTree* tcpu, TTree* tlabv, TString name, TString cut) { TH1F* hcpu = getHisto(tcpu, name+"cpu", cut); TH1F* hlabv = getHisto(tlabv, name+"labv", cut); hlabv->SetLineColor(kRed); hlabv->SetLineWidth(2); hcpu->SetLineWidth(2); hcpu->Draw(); hlabv->Draw("same"); }
void performClosure(RooRealVar *mass, RooAbsPdf *pdf, RooDataSet *data, string closurename, double wmin=110., double wmax=130., double slow=110., double shigh=130., double step=0.002) { // plot to perform closure test cout << "Performing closure test..." << endl; double nbins = (wmax-wmin)/step; TH1F *h = new TH1F("h","h",int(floor(nbins+0.5)),wmin,wmax); if (data){ pdf->fillHistogram(h,RooArgList(*mass),data->sumEntries()); h->Scale(2*h->GetNbinsX()/double(binning_)); } else { pdf->fillHistogram(h,RooArgList(*mass)); } int binLow = h->FindBin(slow); int binHigh = h->FindBin(shigh)-1; TH1F *copy = new TH1F("copy","c",binHigh-binLow,h->GetBinLowEdge(binLow),h->GetBinLowEdge(binHigh+1)); for (int b=0; b<copy->GetNbinsX(); b++) copy->SetBinContent(b+1,h->GetBinContent(b+1+binLow)); double areaCov = 100*h->Integral(binLow,binHigh)/h->Integral(); // style h->SetLineColor(kBlue); h->SetLineWidth(3); h->SetLineStyle(7); copy->SetLineWidth(3); copy->SetFillColor(kGray); TCanvas *c = new TCanvas(); if (data){ RooPlot *plot = mass->frame(Bins(binning_),Range("higgsRange")); plot->addTH1(h,"hist"); plot->addTH1(copy,"same f"); if (data) data->plotOn(plot); pdf->plotOn(plot,Normalization(h->Integral(),RooAbsReal::NumEvent),NormRange("higgsRange"),Range("higgsRange"),LineWidth(1),LineColor(kRed),LineStyle(kDashed)); plot->Draw(); c->Print(closurename.c_str()); } else { RooPlot *plot = mass->frame(Bins(binning_),Range("higgsRange")); h->Scale(plot->getFitRangeBinW()/h->GetBinWidth(1)); copy->Scale(plot->getFitRangeBinW()/h->GetBinWidth(1)); pdf->plotOn(plot,LineColor(kRed),LineWidth(3)); plot->Draw(); h->Draw("hist same"); copy->Draw("same f"); c->Print(closurename.c_str()); } cout << "IntH: [" << h->GetBinLowEdge(binLow) << "-" << h->GetBinLowEdge(binHigh+1) << "] Area = " << areaCov << endl; delete c; delete copy; delete h; }
void dataMC() { double xmin = 60.0; double xmax = 160.0; int nbins = 200; TCanvas* c = new TCanvas("c", "c", 600, 600); std::string hfile = "/home/avartak/CMS/HMuMu/CMSSW_8_0_26_patch1/src/HMuMuAnalysis/AnalysisStep/trees/GluGlu_HToMuMu_M125_13TeV_powheg_pythia8/trim.root"; std::string zfile = "/home/avartak/CMS/HMuMu/CMSSW_8_0_26_patch1/src/HMuMuAnalysis/AnalysisStep/trees/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/trim.root"; std::string tfile = "/home/avartak/CMS/HMuMu/CMSSW_8_0_26_patch1/src/HMuMuAnalysis/AnalysisStep/trees/TTJets_Dilept_TuneCUETP8M2T4_13TeV-amcatnloFXFX-pythia8/trim.root"; std::string dfile = "/home/avartak/CMS/HMuMu/CMSSW_8_0_26_patch1/src/HMuMuAnalysis/AnalysisStep/trees/SingleMuon/trim.root"; TFile* fileh = new TFile(hfile.c_str()); TFile* filez = new TFile(zfile.c_str()); TFile* filet = new TFile(tfile.c_str()); TFile* filed = new TFile(dfile.c_str()); TH1F* histh = new TH1F("histh", "", nbins, xmin, xmax); TH1F* histz = new TH1F("histz", "", nbins, xmin, xmax); TH1F* histt = new TH1F("histt", "", nbins, xmin, xmax); TH1F* histd = new TH1F("histd", "", nbins, xmin, xmax); TTree* treeh = (TTree*)fileh->Get("tree"); TTree* treez = (TTree*)filez->Get("tree"); TTree* treet = (TTree*)filet->Get("tree"); TTree* treed = (TTree*)filed->Get("tree"); treez->Draw("mass>>histz", "(cat > 0) * wgt"); treet->Draw("mass>>histt", "(cat > 0) * wgt"); treed->Draw("mass>>histd", "(cat > 0 && (mass < 120 || mass > 130))"); histz->SetFillColor(kCyan+1); histt->SetFillColor(kOrange+1); histz->SetLineWidth(2); histt->SetLineWidth(2); histh->SetLineWidth(2); histz->Add(histt); histz->Draw("HIST"); histt->Draw("HIST SAME"); histd->Draw("PE SAME"); c->RedrawAxis(); }
void plotMuFromToys(std::string inputFile, std::string selectString="fit_status==0"){ // Some Global preferences gROOT->SetStyle("Plain"); gSystem->Load("$CMSSW_BASE/lib/$SCRAM_ARCH/libHiggsAnalysisCombinedLimit.so"); gStyle->SetOptFit(1111); gStyle->SetOptStat(1111); gStyle->SetPalette(1,0); TFile *fi_ = TFile::Open(inputFile.c_str()); TTree *tree_sb = (TTree*) fi_->Get("tree_fit_sb"); TH1F *mures = new TH1F("mures","",25,-2.,2.); mures->SetLineColor(kBlue+3); mures->SetMarkerStyle(kOpenCircle); mures->SetLineWidth(2); mures->GetXaxis()->SetTitle("#mu - 1"); mures->GetYaxis()->SetTitle(Form("no toys (%d total)",int(tree_sb->GetEntries()))); mures->GetYaxis()->SetTitleOffset(1.05); mures->GetXaxis()->SetTitleOffset(0.9); mures->GetYaxis()->SetTitleSize(0.05); mures->GetXaxis()->SetTitleSize(0.05); TCanvas *c = new TCanvas("c","",960,800); tree_sb->Draw("mu>>mures",selectString.c_str()); mures->Fit("gaus"); mures->GetFunction("gaus")->SetLineColor(kCyan+3); mures->Draw("pe1"); c->SaveAs("mlfit/mu_residual.pdf"); }
void drawFrequency(const char* ifname="output/HUMAN.pair.output", int type=2) { gROOT->SetStyle("Plain"); TFile outfile(TString(TString(ifname)+".root"),"RECREATE"); int nbins = 400; if(type == 1)nbins = 20; TH1F* freq = new TH1F("freq","",nbins,-0.5,float(nbins)-0.5); int bin = 1; ifstream infile(ifname); while(1){ TString name; float freq1,freq2; infile >> name >> freq1; if(type == 2) infile >> freq2; if(!infile.good()) break; freq->SetBinContent(bin,freq1); bin++; } infile.close(); TCanvas* c = new TCanvas("c","",800,600); gStyle->SetOptStat(0); freq->SetYTitle("Frequency"); freq->SetXTitle("Amino acid pair"); if(type == 1)freq->SetXTitle("Amino acid"); freq->SetLineWidth(2); freq->SetLineColor(kBlue); freq->Draw(); c->SaveAs(TString(TString(ifname)+".pdf")); outfile.Close(); }
TH1* AddOverflow(TH1* h) { ++overflowCounter; TString name = h->GetName(); Int_t nx = h->GetNbinsX()+1; Double_t bw = h->GetBinWidth(nx); Double_t x1 = h->GetBinLowEdge(1); Double_t x2 = h->GetBinLowEdge(nx) + bw; // Book a new histogram having an extra bin for overflows TH1F* htmp = new TH1F(Form(name + "_overflow_%d", overflowCounter), "", nx, x1, x2); // Fill the new histogram including the extra bin for overflows for (Int_t i=1; i<=nx; i++) { htmp->Fill(htmp->GetBinCenter(i), h->GetBinContent(i)); htmp->SetBinError(i, h->GetBinError(i)); } // Fill the underflow htmp->Fill(x1-1, h->GetBinContent(0)); // Restore the number of entries htmp->SetEntries(h->GetEntries()); // Cosmetics htmp->SetLineColor(h->GetLineColor()); htmp->SetLineWidth(h->GetLineWidth()); htmp->GetXaxis()->SetTitleOffset(1.5); return htmp; }
//Difference plotting void drawDifference(TH1* iH0,TH1 *iH1,TH1 *iHH=0,TH1 *iHL=0,TH1 *iHH1=0,TH1 *iHL1=0) { std::string lName = std::string(iH0->GetName()); TH1F *lHDiff = (TH1F*) iH0->Clone("Diff"); TH1F *lHDiffH = (TH1F*) iH0->Clone("DiffH"); TH1F *lHDiffL = (TH1F*) iH0->Clone("DiffL"); TH1F *lHDiffH1 = (TH1F*) iH0->Clone("DiffH1"); TH1F *lHDiffL1 = (TH1F*) iH0->Clone("DiffL1"); lHDiff ->SetFillColor(kViolet); lHDiff->SetFillStyle(1001); lHDiff->SetLineWidth(1); lHDiffL ->SetLineWidth(1); lHDiffL ->SetLineColor(iHL ->GetLineColor()); lHDiffH ->SetLineWidth(1); lHDiffH ->SetLineColor(iHH ->GetLineColor()); lHDiffL1->SetLineWidth(1); lHDiffL1->SetLineColor(iHL1->GetLineColor()); lHDiffH1->SetLineWidth(1); lHDiffH1->SetLineColor(iHH1->GetLineColor()); TH1F *lXHDiff1 = new TH1F((lName+"XDiff1").c_str(),(lName+"XDiff1").c_str(),iH0->GetNbinsX(),iH0->GetXaxis()->GetXmin(),iH0->GetXaxis()->GetXmax()); TH1F *lXHDiff2 = new TH1F((lName+"XDiff2").c_str(),(lName+"XDiff2").c_str(),iH0->GetNbinsX(),iH0->GetXaxis()->GetXmin(),iH0->GetXaxis()->GetXmax()); int i1 = 0; lXHDiff1->SetLineWidth(2); lXHDiff1->SetLineColor(kRed); lXHDiff2->SetLineWidth(2); lXHDiff2->SetLineColor(kRed); lXHDiff1->GetYaxis()->SetTitle("Ratio"); lXHDiff1->GetYaxis()->SetRangeUser(0.2,1.8); lXHDiff1->GetYaxis()->SetTitleOffset(0.4); lXHDiff1->GetYaxis()->SetTitleSize(0.2); lXHDiff1->GetYaxis()->SetLabelSize(0.11); for(int i0 = 0; i0 < lHDiff->GetNbinsX()+1; i0++) { double lXCenter = lHDiff->GetBinCenter(i0); double lXVal = iH0 ->GetBinContent(i0); double lXValH = iHH ->GetBinContent(i0); double lXValL = iHL ->GetBinContent(i0); double lXValH1 = iHH1 ->GetBinContent(i0); double lXValL1 = iHL1 ->GetBinContent(i0); lXHDiff1->SetBinContent(i0, 1.0); lXHDiff2->SetBinContent(i0, 1.0); while(iH1->GetBinCenter(i1) < lXCenter) {i1++;} if(iH1->GetBinContent(i0) > 0) lHDiff->SetBinContent(i0,lXVal /(iH1->GetBinContent(i0))); if(iH1->GetBinContent(i0) > 0) lHDiff->SetBinError (i0,sqrt(lXVal)/(iH1->GetBinContent(i0))); if(iH1->GetBinContent(i0) > 0) lHDiffL->SetBinContent(i0,lXValL/(iH1->GetBinContent(i0))); if(iH1->GetBinContent(i0) > 0) lHDiffH->SetBinContent(i0,lXValH/(iH1->GetBinContent(i0))); if(iH1->GetBinContent(i0) > 0) lHDiffL1->SetBinContent(i0,lXValL1/(iH1->GetBinContent(i0))); if(iH1->GetBinContent(i0) > 0) lHDiffH1->SetBinContent(i0,lXValH1/(iH1->GetBinContent(i0))); //if(iH1->GetBinContent(i0) > 0) cout << "unc" << lXVal << " -- " << sqrt(lXVal)/(iH1->GetBinContent(i0)) << endl; } lHDiff->SetMarkerStyle(kFullCircle); //lHDiff->Draw("EP"); lXHDiff1->SetStats(0); lXHDiff2->SetStats(0); lHDiff->SetStats(0); lHDiffH->SetStats(0); lHDiffL->SetStats(0); lHDiffH1->SetStats(0); lHDiffL1->SetStats(0); lXHDiff1->Draw("hist"); lXHDiff2->Draw("hist sames"); lHDiff->Draw("EP sames"); lHDiffH ->Draw("hist sames"); lHDiffL ->Draw("hist sames"); lHDiffH1->Draw("hist sames"); lHDiffL1->Draw("hist sames"); }
void Difference(TH1* iH0,TH1 *iH1) { std::string lName = std::string(iH0->GetName()); //TH1F *lHDiff = new TH1F((lName+"Diff").c_str(),(lName+"Diff").c_str(),50,0,300); lHDiff->Sumw2(); TH1F *lHDiff = new TH1F((lName+"Diff").c_str(),(lName+"Diff").c_str(),iH0->GetNbinsX(),iH0->GetXaxis()->GetXmin(),iH0->GetXaxis()->GetXmax()); lHDiff->Sumw2(); lHDiff->SetFillColor(kViolet); lHDiff->SetFillStyle(1001); lHDiff->SetLineWidth(1); TH1F *lXHDiff1 = new TH1F((lName+"XDiff1").c_str(),(lName+"XDiff1").c_str(),iH0->GetNbinsX(),iH0->GetXaxis()->GetXmin(),iH0->GetXaxis()->GetXmax()); int i1 = 0; lXHDiff1->SetLineStyle(2); lXHDiff1->SetLineWidth(2); lXHDiff1->SetLineColor(kRed); lHDiff->GetYaxis()->SetRangeUser(0,2); lHDiff->GetYaxis()->SetTitleOffset(0.6); lHDiff->GetYaxis()->SetTitleSize(0.08); lHDiff->GetYaxis()->SetLabelSize(0.08); lHDiff->GetYaxis()->CenterTitle(); lHDiff->GetXaxis()->SetTitleOffset(1.2); lHDiff->GetXaxis()->SetTitleSize(0.10); lHDiff->GetXaxis()->SetLabelSize(0.08); lHDiff->GetXaxis()->SetTitle("#slash{E}_{T} [GeV]"); //lHDiff->GetXaxis()->CenterTitle(); //lHDiff->GetYaxis()->SetTitle(YLabel); for(int i0 = 0; i0 < lHDiff->GetNbinsX()+1; i0++) { double lXCenter = lHDiff->GetBinCenter(i0); double lXVal = iH0 ->GetBinContent(i0); lXHDiff1->SetBinContent(i0, 1.0); while(iH1->GetBinCenter(i1) < lXCenter) {i1++;} if(iH1->GetBinContent(i0) > 0) lHDiff->SetBinContent(i0,(lXVal-iH1->GetBinContent(i0))/(iH1->GetBinContent(i0))); if(iH1->GetBinContent(i0) > 0) lHDiff->SetBinError (i0,iH0->GetBinError(i0)/(iH1->GetBinContent(i0))); } lHDiff->SetMarkerStyle(kFullCircle); lHDiff->SetLineColor(kBlack); lHDiff->SetMarkerColor(kBlack); lHDiff->Draw("E1"); lXHDiff1->Draw("hist sames"); }
void macroScema(){ gROOT->ProcessLine(".L ./tdrstyle.C"); setTDRStyle(); TFile *_file0 = new TFile("histo_file_QCDPU50GEM2019.root"); TFile *_file1 = new TFile("histo_file_VBFH2Tau_PU50GEM2019XX_noVBFTag.root"); TH1F *hQCD = (TH1F*)_file0->Get("hMuonPtReco"); TH1F *hH2tau = (TH1F*)_file1->Get("hMuonPtReco"); hH2tau->SetLineColor(kRed); hQCD->SetLineColor(kMagenta); hH2tau->SetLineWidth(2); hQCD->SetLineWidth(2); hQCD->Scale(1/hQCD->Integral()); hH2tau->Scale(1/hH2tau->Integral()); hQCD->GetXaxis()->SetRangeUser(0,100); hH2tau->GetXaxis()->SetRangeUser(0,100); hQCD->Draw("histe"); hH2tau->Draw("histesame"); hQCD->GetXaxis()->SetTitle("P_{T}^{#mu}"); hQCD->GetYaxis()->SetTitle("Relative Yield"); TLegend* legend = new TLegend( 0.65, 0.7, 0.8, 0.9); legend->SetTextSize(0.035); legend->SetFillColor(0); legend->AddEntry(hH2tau, "H #rightarrow #tau_{#mu} #tau_{h} ","l"); legend->AddEntry(hQCD, "QCD","l"); legend->Draw("same"); }
void pv_dist(const string& fFile, const string& fTitle, const string& fNameExt) { TH1F *h; TFile file(fFile.c_str()); TDirectoryFile *dir = (TDirectoryFile*)file.Get("offsetAnalysis"); TDirectoryFile *subDir = (TDirectoryFile*)dir->Get("PrimaryVertices"); h = (TH1F*)subDir->Get("h_NofPVs"); string name = h->GetName(); string fileName = name + "__" + fNameExt + ".png"; h->SetTitle(fTitle.c_str()); TCanvas *c = new TCanvas("c","",1120,800); c->cd(); h->SetLineWidth(2); h->Draw(); c->SetLogy(); c->SaveAs(fileName.c_str()); delete c; }
void SetSignalStyle(TH1F & ele, unsigned color) { ele.SetFillStyle(1001); ele.SetLineStyle(11); ele.SetFillColor(0); ele.SetLineColor(color); ele.SetLineWidth(2); return; }
TH1* def_hist(const char *name, const int &nbin, const double &bmin, const double &bmax, const int &col) { cout << "Hist def: " << name << " bmin= " << bmin << " bmax= "<< bmax << endl; TH1F* h = new TH1F(name, name, nbin, bmin, bmax); h->SetLineColor(col); h->SetLineWidth(2); return h; cout << "Done Hist def: " << name << endl; }
void plot1d(TCanvas* c, char* name){ TH1F *h; c->Divide(1,3); c->cd(1)->SetLogy(); readfile(OPT,11); h = (TH1F*)mTFile->Get(Form("%s",name)); h->Draw(); h->SetLineWidth(2); h->SetMinimum(1.0); h = (TH1F*)mTFile->Get(Form("%sAG",name)); h->Draw("same"); h->SetLineColor(2);h->SetLineWidth(2); t=new TText(0.2, 0.25,"pp collisions"); t->SetNDC(); t->Draw(); t=new TText(0.2, 0.20,"pp abort-gap"); t->SetNDC(); t->Draw(); t->SetTextColor(2); c->cd(2)->SetLogy(); readfile(OPT,13); h = (TH1F*)mTFile->Get(Form("%s",name)); h->Draw(); h->SetLineWidth(2); h->SetMinimum(1.0); h = (TH1F*)mTFile->Get(Form("%sAG",name)); h->Draw("same"); h->SetLineColor(2);h->SetLineWidth(2); t=new TText(0.2, 0.25,"pAl collisions"); t->SetNDC(); t->Draw(); t=new TText(0.2, 0.20,"pAl abort-gap"); t->SetNDC(); t->Draw(); t->SetTextColor(2); c->cd(3)->SetLogy(); readfile(OPT,12); h = (TH1F*)mTFile->Get(Form("%s",name)); h->Draw(); h->SetLineWidth(2);h->SetMinimum(1.0); h = (TH1F*)mTFile->Get(Form("%sAG",name)); h->Draw("same"); h->SetLineColor(2); h->SetLineWidth(2); readfile(OPT,15); h = (TH1F*)mTFile->Get(Form("%s",name)); h->Draw("same"); h->SetLineColor(4); h->SetLineWidth(2); h = (TH1F*)mTFile->Get(Form("%sAG",name)); h->Draw("same"); h->SetLineColor(6); h->SetLineWidth(2); t=new TText(0.2, 0.25,"pAu2 collisions"); t->SetNDC(); t->Draw(); t=new TText(0.2, 0.20,"pAu2 abort-gap"); t->SetNDC(); t->Draw(); t->SetTextColor(2); t=new TText(0.35, 0.25,"pAu1 collisions"); t->SetNDC(); t->Draw(); t->SetTextColor(4); t=new TText(0.35, 0.20,"pAu1 abort-gap"); t->SetNDC(); t->Draw(); t->SetTextColor(6); c->SaveAs(Form("plot/%s.png",name)); }
void PlotHistsNhitsPerModule(TFile* f, TTree* tr, TString strMillepedeRes, TString strOutdir) { TString canvName="c_"; canvName+=strMillepedeRes; canvName+="_"; canvName+=StrPlotType(NHITS); canvName.ReplaceAll(".res",""); //enum {PXB,PXF,TIB,TID,TOB,TEC}; int colors[6]={1,2,3,4,6,7}; // TString labels[6]={"PXB","PXF","TIB","TID","TOB","TEC"}; f->cd(); TCanvas* canv = new TCanvas(canvName,canvName,600,600); canv->SetLogx(); canv->SetLogy(); for (int ind=1; ind<=1; ind++){ TString strHist = "hNhits_"; strHist+=StrPar(ind); TString strCut="label<700000 && ((label%20-1)%9+1)=="; strCut+=ind; TStyle style; style.SetTitleFontSize(0.2); THStack *hSt = new THStack("hNhits","# of derivatives (~tracks or hits) per module"); TLegend *leg = new TLegend(0.75,0.65,0.95,0.95); for (int inv=0; inv<6; inv++){ std::cout<<"- - - - - -"<<std::endl; std::cout<<subdLabels[inv]<<":"<<std::endl; std::cout<<StrCutSubd(inv)<<": "<<tr->GetEntries(StrCutSubd(inv))<<" parameters"<<std::endl; TString strHist1=strHist; strHist1+=ind; strHist1+=inv; TH1F* hValInt = new TH1F(strHist1,strHist1,300,10,15000); TString strCut1 = strCut+TString(" && ")+StrCutSubd(inv); tr->Draw(TString("Nhits>>")+strHist1,strCut1,"goff"); std::cout<<"# hits = "<<(int)hValInt->GetMean()<<"+-"<<(int)hValInt->GetRMS()<<std::endl; hValInt->SetLineColor(1); hValInt->SetFillColor(colors[inv]); hValInt->SetLineWidth(2); hSt->Add(hValInt); leg->AddEntry(hValInt,subdLabels[inv],"f"); leg->SetFillColor(0); } hSt->Draw(); leg->Draw("same"); }//end of loop over ind canvName+=".png"; TString saveName=strOutdir+canvName; canv->SaveAs(saveName); saveName.ReplaceAll(".png",".pdf"); canv->SaveAs(saveName); }//end of PlotHistsNhitsPerModule
void SetDataStyle(TH1F & ele) { ele.SetMarkerColor(1); ele.SetLineColor(1); ele.SetFillColor(1); ele.SetFillStyle(0); ele.SetLineWidth(2); ele.SetMarkerStyle(20); ele.SetMarkerSize(1.1); return; }
TCanvas * plot (TH1F* histoDataIn, TString legendData, TH1F* histoSimulationIn, TString legendSimulation, TString & canvasName, Float_t maximum = 0.15, TString xAxisTitle = "#eta", TString yAxisTitle = "Number of Clusters", TString error = "", bool useLegend = true, TString text = "", Float_t textX = 0.7, Float_t textY = 0.4, Float_t rebin = 0 ) { TH1F * histoData = (TH1F*)histoDataIn->Clone(); TH1F * histoSimulation = (TH1F*)histoSimulationIn->Clone(); // histoData->Sumw2(); histoData->Scale(1/(histoData->Integral())); histoSimulation->Scale(1/(histoSimulation->Integral())); // Create also the legend and add the histograms TLegend * legend = new TLegend( 0.55, 0.65, 0.76, 0.82 ); legend->AddEntry( histoData, xAxisTitle ); legend->AddEntry( histoSimulation, yAxisTitle, "F" ); cout << "histoData = " << histoData << endl; cout << "histoSimulation = " << histoSimulation << endl; TCanvas * c = new TCanvas( canvasName, canvasName, 1000, 800 ); c->Draw(); histoSimulation->SetMaximum(maximum); histoSimulation->SetFillColor(kRed); // histoSimulation->SetLineWidth(0); histoSimulation->SetLineColor(kRed); histoSimulation->SetXTitle(xAxisTitle); histoSimulation->SetYTitle(yAxisTitle); histoSimulation->SetTitleOffset(1.6,"Y"); histoSimulation->SetTitle(); histoData->SetLineStyle(1); histoData->SetLineWidth(2.5); histoSimulation->Draw(); histoData->Draw("same"); legend->SetFillColor(kWhite); if (useLegend) legend->Draw("same"); if ( text != "" ) { TPaveText * pt = new TPaveText(textX, textY, textX+0.2, textY+0.17, "NDC" ); // "NDC" option sets coords relative to pad dimensions pt->SetFillColor(0); // text is black on white pt->SetTextSize(0.08); pt->SetBorderSize(0); pt->SetTextAlign(12); pt->AddText(text); pt->Draw("same"); //to draw your text object } return c; };
void draw(TH1F * uno, TH1F * due, TString &n1, TString &n2){ TString name(uno->GetName()); std::cout << " Plot " << name << " uno:" << uno->GetEntries() << " due:" << due->GetEntries() << std::endl; std::cout << " Plot " << name << " uno:" << uno->Integral() << " due:" << due->Integral() << std::endl; name = "Plot_"+name; TCanvas * can = new TCanvas(name,"",1000,750); uno->Sumw2(); due->Sumw2(); uno->Scale(1./(uno->Integral())); due->Scale(1./(due->Integral())); due->SetStats(kFALSE); uno->SetStats(kFALSE); due->SetMaximum(1.1*max(uno->GetMaximum(),due->GetMaximum())); due->SetMinimum(0.00001); TH1F *dueBis = (TH1F*)due->Clone("dueBis"); dueBis->SetLineColor(kBlue); dueBis->SetLineWidth(2); dueBis->SetFillStyle(0); dueBis->Draw("HIST"); due->SetMarkerStyle(20); due->SetMarkerSize(0.55); due->SetMarkerColor(kAzure+7); due->SetFillColor(kAzure+8); due->SetLabelSize(0.06,"xy"); due->SetTitleSize(0.06,"xy"); due->Draw("PE2same"); uno->SetMinimum(0.01); uno->SetMarkerStyle(20); uno->SetMarkerSize(0.75); uno->Draw("PE0X0same"); TLegend * leg = new TLegend(0.1,.92,0.9,0.98); leg->SetNColumns(2); leg->SetBorderSize(0); leg->SetFillStyle(0); leg->AddEntry(due,n2,"fp"); leg->AddEntry(uno,n1,"p"); leg->Draw(); can->SaveAs(name+".png"); }
/// /// Make a plot out of a 1D histogram holding a 1-CL curve. /// This is a fall back function that does no fancy stuff. /// /// \param s The scanner to plot. /// \param first Set this to true for the first plotted scanner. /// void OneMinusClPlot::scan1dPlotSimple(MethodAbsScan* s, bool first, int CLsType) { if ( arg->debug ){ cout << "OneMinusClPlot::scan1dPlotSimple() : plotting "; cout << s->getName() << " (" << s->getMethodName() << ")" << endl; } m_mainCanvas->cd(); TH1F *hCL = (TH1F*)s->getHCL()->Clone(getUniqueRootName()); if (CLsType==1) hCL = (TH1F*)s->getHCLs()->Clone(getUniqueRootName()); else if (CLsType==2) hCL = (TH1F*)s->getHCLsFreq()->Clone(getUniqueRootName()); // get rid of nan and inf for ( int i=1; i<=hCL->GetNbinsX(); i++ ){ if ( hCL->GetBinContent(i)!=hCL->GetBinContent(i) || std::isinf(hCL->GetBinContent(i)) ) hCL->SetBinContent(i, 0.0); } int color = s->getLineColor(); if(CLsType==1) color = color + 2 ; hCL->SetStats(0); hCL->SetLineColor(color); hCL->SetMarkerColor(color); hCL->SetLineWidth(2); hCL->SetLineStyle(s->getLineStyle()); hCL->SetMarkerColor(color); hCL->SetMarkerStyle(8); hCL->SetMarkerSize(0.6); hCL->GetYaxis()->SetNdivisions(407, true); hCL->GetXaxis()->SetTitle(s->getScanVar1()->GetTitle()); hCL->GetYaxis()->SetTitle("1-CL"); hCL->GetXaxis()->SetLabelFont(font); hCL->GetYaxis()->SetLabelFont(font); hCL->GetXaxis()->SetTitleFont(font); hCL->GetYaxis()->SetTitleFont(font); hCL->GetXaxis()->SetTitleOffset(0.9); hCL->GetYaxis()->SetTitleOffset(0.85); hCL->GetXaxis()->SetLabelSize(labelsize); hCL->GetYaxis()->SetLabelSize(labelsize); hCL->GetXaxis()->SetTitleSize(titlesize); hCL->GetYaxis()->SetTitleSize(titlesize); if ( plotLegend && !arg->isQuickhack(22) ){ if ( arg->plotlog ) hCL->GetYaxis()->SetRangeUser(1e-3,10); else hCL->GetYaxis()->SetRangeUser(0.0,1.3); } else{ if ( arg->plotlog ) hCL->GetYaxis()->SetRangeUser(1e-3,1); else hCL->GetYaxis()->SetRangeUser(0.0,1.0); } hCL->Draw(first?"":"same"); }
/*--------------------------------------------------------------------*/ TH1F* DrawZero(TH1F *hist,Int_t nbins,Double_t lowedge,Double_t highedge) /*--------------------------------------------------------------------*/ { TH1F *hzero = new TH1F(Form("hzero_%s",hist->GetName()),"hzero",nbins,lowedge,highedge); for (Int_t i=0;i<hzero->GetNbinsX();i++){ hzero->SetBinContent(i,0.); hzero->SetBinError(i,0.); } hzero->SetLineWidth(2); hzero->SetLineStyle(9); hzero->SetLineColor(kRed); return hzero; }
void addPlot(TObject* obj, TString title, int color, THStack* hStack, bool doFillColor) { TH1F* h = (TH1F*)obj; h->SetTitle(title); if ( doFillColor ) { h->SetFillColor(color); //h->SetLineWidth(2); } else { h->SetLineColor(color); h->SetLineWidth(2); } hStack->Add(h); }
void comphh(Int_t run, TH1F* h1, TH1F* h2) { TFile* f = new TFile(Form("hodtest_%d.root",run)); cout << "hcana root file " << Form("hodtest_%d.root",run) << endl; TCanvas *c1 = new TCanvas("c1", "h1 vs h2", 1000, 667); // gPad->SetLogy(); h1->SetFillColor(kGreen); h1->SetLineColor(kGreen); h1->Draw(); h2->SetLineColor(kBlue); h2->SetFillStyle(0); h2->SetLineWidth(2); h2->Draw("same"); TLatex l; l.SetTextSize(0.04); Float_t maxy = h1->GetBinContent(h1->GetMaximumBin()); Float_t xmin = h1->GetXaxis()->GetXmin(); Float_t xmax = h1->GetXaxis()->GetXmax(); Float_t xt = xmin + 0.75*(xmax-xmin); l.SetTextColor(kGreen); l.DrawLatex(xt,0.65*maxy,"h1"); l.SetTextColor(kBlue); l.DrawLatex(xt,0.75*maxy,"h2"); // Difference between the histograms. TCanvas *c2 = new TCanvas("c2", "Epr differences", 1000, 667); TH1F* dif = h2->Clone(); dif->Add(h2,h1,1.,-1.); dif->SetTitle("Difference"); dif->SetFillColor(kRed); dif->SetLineColor(kRed); dif->SetLineWidth(1); dif->SetFillStyle(1111); dif->Draw(); }
//------------------------------------------------------------// // Get histogram //------------------------------------------------------------// TH1F* getHist(TFile* file, TString pname, TString xtitle, TString ytitle, int color, int marker) { TH1F* hist = (TH1F*) (file->Get(pname.Data())->Clone(Form("%s_%i",pname.Data(),color))); hist->GetXaxis()->SetTitle(xtitle.Data()); hist->GetYaxis()->SetTitle(ytitle.Data()); hist->SetMarkerStyle(marker); hist->SetMarkerColor(color); hist->SetMarkerSize(0.5); hist->SetLineColor(color); hist->SetTitle(""); hist->SetStats(0); hist->GetYaxis()->SetTitleOffset(1.5); hist->SetLineWidth(2); return hist; }
void setPlottingStyle(TH1F& hsig){ hsig.SetStats(kFALSE); hsig.SetAxisRange(80,750,"Y"); hsig.SetAxisRange(0,520,"X"); hsig.SetAxisRange(200,520,"X"); hsig.GetXaxis()->SetTitle("m_{0} (GeV)"); hsig.GetYaxis()->SetTitle("m_{1/2} (GeV)"); hsig.GetYaxis()->SetTitleOffset(0.8); hsig.GetYaxis()->SetTitleSize(0.06); hsig.GetYaxis()->SetLabelSize(0.06); hsig.GetXaxis()->SetTitleOffset(0.9); hsig.GetXaxis()->SetTitleSize(0.06); hsig.GetXaxis()->SetLabelSize(0.06); hsig.SetLineWidth(1); hsig.SetLineColor(kBlue); }
void MakeCFPlot_pt_eta(TString path) { /// Set Plotting style setTDRStyle(); gStyle->SetPalette(1); TFile * fmc = new TFile(path); if(!fmc){ cout << "No MC file" << endl; return; } vector<TString> hists; hists.push_back("Zpeak_pt_eta1"); hists.push_back("Zpeak_pt_eta2"); for(vector<TString>::iterator it = hists.begin(); it!= hists.end(); it++){ TCanvas* c1 = new TCanvas(("Plot" +*it).Data(), "Plot", 800, 600); /// Make MTelectron_SingleTightElJet plot TH1F* hnum = (TH1F*)fmc->Get(("CFNumerator_"+*it).Data()); TH1F* hden = (TH1F*)fmc->Get(("CFDenominator_"+*it).Data()); hnum->SetLineColor(kRed); hnum->SetLineWidth(2.); hnum->Divide(hden); hnum->Draw("hist"); hnum->GetYaxis()->SetTitle("CF rate"); hnum->GetXaxis()->SetTitle("p_T GeV"); for(int ibin=1; ibin < hnum->GetNbinsX()+1; ibin++){ cout << *it << " bin " << ibin << " value = " << hnum->GetBinContent(ibin) << " error " << hnum->GetBinError(ibin) << endl; } c1->SaveAs(("/home/jalmond/WebPlots/CF/CF_MC" + *it +".pdf").Data()); } }
void plot(){ TFile* f1 = TFile::Open("prunedmass_cv.root"); TFile* f2 = TFile::Open("prunedmass_up.root"); TFile* f3 = TFile::Open("prunedmass_down.root"); TH1F* cv = (TH1F*)f1->Get("AK8jetPrunedMass"); TH1F* up = (TH1F*)f2->Get("AK8jetPrunedMass"); TH1F* down = (TH1F*)f3->Get("AK8jetPrunedMass"); TLegend* l = new TLegend(0.6645729,0.701049,0.8743719,0.8706294,"","NDC"); l->SetLineWidth(2); l->SetBorderSize(0); l->SetFillColor(0); l->SetFillStyle(0); l->SetTextFont(42); l->SetTextSize(0.035); l->SetTextAlign(12); cv->SetLineColor(kRed); cv->SetLineWidth(2); up->SetLineColor(kBlack); up->SetFillColor(kBlack); up->SetFillStyle(3018); down->SetLineColor(kBlue); down->SetFillColor(kBlue); l->AddEntry(cv,"central value","L"); l->AddEntry(up,"scale up","F"); l->AddEntry(down,"scale down","F"); down->Draw("HIST"); cv->Draw("HISTsame"); up->Draw("HISTsame"); l->Draw(); }
void plotComparison( TH1F* h_dt , TH1F* h_mc , TH1F *h_extra, char* label, bool dolog, bool drawbkg) { TPad* fullpad = new TPad(); TPad* plotpad = new TPad(); TPad* respad = new TPad(); fullpad = new TPad("fullpad","fullpad",0,0,1,1); fullpad->Draw(); fullpad->cd(); plotpad = new TPad("plotpad","plotpad",0,0,1,0.8); plotpad->Draw(); plotpad->cd(); if (dolog) plotpad->SetLogy(); h_dt->GetYaxis()->SetTitle("Entries"); h_dt->GetXaxis()->SetTitle(Form("%s", label)); h_dt->GetYaxis()->SetTitleSize(0.05); h_dt->GetXaxis()->SetTitleSize(0.05); h_dt->GetYaxis()->SetTitleOffset(1.5); h_dt->GetXaxis()->SetTitleOffset(1.3); if (!dolog) h_dt->GetYaxis()->SetRangeUser(0., 1.4*h_dt->GetMaximum()); h_dt->SetLineColor(kBlack); h_dt->SetMarkerColor(kBlack); h_mc->SetLineColor(kBlue); h_mc->SetMarkerColor(kBlue); h_extra->SetLineColor(kRed); h_extra->SetLineWidth(2); h_mc->SetLineWidth(2); h_dt->Draw(); h_mc->Draw("HISTSAME"); if (drawbkg) h_extra->Draw("HISTSAME"); h_dt->Draw("ESAME"); TLegend *legComp = new TLegend( 0.653, 0.663, 0.944, 0.870); legComp->AddEntry(h_dt, "Data", "lp"); legComp->AddEntry(h_mc, "MC", "l"); if (drawbkg) legComp->AddEntry(h_extra, "MC Bkg", "l"); legComp->SetFillColor(0); legComp->SetBorderSize(0); legComp->Draw(); TLatex *text = new TLatex(); text->SetNDC(); text->SetTextSize(0.04); // float xtex = 0.65; // text->DrawLatex(xtex,0.88,"1 lepton + jets Sample"); fullpad->cd(); respad = new TPad("respad","respad",0,0.8,1,1); respad->Draw(); respad->cd(); //gPad->SetGridy(); TH1F* ratio = (TH1F*) h_dt->Clone("ratio"); ratio->Divide(h_mc); ratio->GetYaxis()->SetTitleOffset(0.3); ratio->GetYaxis()->SetTitleSize(0.2); ratio->GetYaxis()->SetNdivisions(5); ratio->GetYaxis()->SetLabelSize(0.2); if (dolog) ratio->GetYaxis()->SetRangeUser(0.5,1.5); else ratio->GetYaxis()->SetRangeUser(0.7,1.3); ratio->GetYaxis()->SetTitle("Ratio "); ratio->GetXaxis()->SetLabelSize(0); ratio->GetXaxis()->SetTitleSize(0); ratio->SetMarkerSize(1); ratio->SetLineWidth(2); ratio->SetLineColor(kBlue); ratio->SetMarkerColor(kBlue); ratio->SetFillColor(kBlue); ratio->SetFillStyle(3002); ratio->Draw("E2"); TLine line; line.SetLineWidth(2); line.DrawLine(h_dt->GetXaxis()->GetXmin(),1,h_dt->GetXaxis()->GetXmax(),1); }
TCanvas* plotting36GS( bool logScale=false ) { std::cout << "plotting mu + standalone " << std::endl; TGaxis::SetMaxDigits(3); // channels, ordered as in the legend vector<TString> channels; vector<TString> hnames; vector<TString> type; map<TString,int> fillColor_; map<TString,int> lineColor_; int lineWidth1(2); int lineWidth2(1); bool salamanderStyle=true; if( salamanderStyle ) { fillColor_["Signal"] = kOrange-2; lineColor_["Signal"] = kOrange+3; fillColor_["EWK"] = kOrange+7; lineColor_["EWK"] = kOrange+3; fillColor_["QCD"] = kViolet-5; lineColor_["QCD"] = kViolet+3; fillColor_["ttbar"] = kRed+2; lineColor_["ttbar"] = kRed+4; fillColor_["gamma+jet"] = kMagenta+4; lineColor_["gamma+jet"] = kViolet+3; } else { lineWidth1 = 2; lineWidth2 = 2; fillColor_["Signal"] = kPink+6; lineColor_["Signal"] = kMagenta+3; fillColor_["EWK"] = kAzure+8; lineColor_["EWK"] = kAzure+4; fillColor_["QCD"] = kYellow-7; lineColor_["QCD"] = kYellow+4; fillColor_["ttbar"] = kGreen; lineColor_["ttbar"] = kGreen+2; fillColor_["gamma+jet"] = kOrange; lineColor_["gamma+jet"] = kOrange+2; } // root file, where the data is TString fname("root/"); // histogram limits, in linear and logarithmic int nbin_(100); float xmin_(0.), xmax_(0.); float ymin_(0.), ymax_(0.); float yminl_(0.), ymaxl_(0.); // titles and axis, marker size TString xtitle; TString ytitle; int ndivx(510); int ndivy(510); float markerSize(0.); float titleOffset(1.); float r0_ = 1.; float dr_ = 0.3; if( use_chi ) { r0_ = 0.; dr_ = 7.5; //dr_ = 3.0; } // canvas name TString cname(""); TString ctitle; // legend position and scale; float xl_ = 0.; float yl_ = 0.; float scalel_ = 0.0; { if( logScale ) // fname += "Zmumu_40-200_36pb"; fname += "Zmusta_36pb"; else fname += "Zmusta_36pb"; if( logScale ) { lineWidth1 = 1; lineWidth2 = 1; } channels.push_back("Zmumu"); hnames.push_back(" Z #rightarrow #mu^{+}#mu^{-}"); type.push_back("Signal"); bool revert(false); if( logScale ) { if( revert ) { channels.push_back("EWK"); hnames.push_back(" EWK"); type.push_back("EWK"); channels.push_back("tt"); hnames.push_back(" t#bar{t}"); type.push_back("ttbar"); channels.push_back("QCD"); hnames.push_back(" QCD"); type.push_back("QCD"); } else { channels.push_back("EWK"); hnames.push_back(" EWK"); type.push_back("EWK"); channels.push_back("tt"); hnames.push_back(" t#bar{t}"); type.push_back("ttbar"); channels.push_back("QCD"); hnames.push_back(" QCD"); type.push_back("QCD"); } } if( !logScale ) { // lin scale xmin_ = 60; xmax_ = 120; ymin_ = 0.01; ymax_ = 2100; } else { // log scale xmin_ = 40; xmax_ = 200; yminl_ = 0.08; ymaxl_ = 3000; } xtitle = "M(#mu^{+}#mu^{-}) [GeV]"; ytitle = "number of events /"; ndivx = 504; if( logScale ) { ytitle += "5 GeV"; ndivy = 510; } else { ytitle += " GeV"; ndivy = 506; } if( logScale ) { markerSize = 0.48; } else { markerSize = 0.75; } cname += "Zmusta"; ctitle = "Z to mu sta analysis"; if( logScale ) { xl_ = 0.60; yl_ = 0.50; scalel_ = 0.065; } else { xl_ = 0.22; yl_ = 0.50; scalel_ = 0.072; } } if( logScale ) cname += "MuSta_log"; else cname += "MuStaNotInThePAPER_lin"; //Open the root file containing histograms and graphs fname += ".root"; TFile* f_ = TFile::Open(fname,"READ"); TCanvas* c_ = new TCanvas(cname,ctitle,300,300,479,510); c_->SetLeftMargin( 87./479 ); c_->SetRightMargin( 42./479 ); c_->SetTopMargin( 30./510 ); c_->SetBottomMargin( 80./510 ); c_->SetFillColor(0); c_->SetTickx(1); c_->SetTicky(1); c_->SetFrameFillStyle(0); c_->SetFrameLineWidth(2); c_->SetFrameBorderMode(0); Double_t scale = 4; Double_t wbin = 42*scale; Double_t left = 8*scale; Double_t right = 5*scale; Double_t h1 = 135*scale; Double_t h2 = 45*scale; Double_t top1 = 15*scale; Double_t bot1 = 3*scale; Double_t top2 = 3*scale; // Double_t bot1 = 0*scale; // Double_t top2 = 0*scale; Double_t bot2 = 80*scale; Double_t W = left + wbin + right; Double_t H = h1 + h2; Double_t s[2] = {1, h1/h2 }; TPad* pad[2]; pad[0] = new TPad( "top", "top", 0, h2/H, 1, 1, kWhite,0,0); pad[0]->SetLeftMargin( left/W ); pad[0]->SetRightMargin( right/W ); pad[0]->SetTopMargin( top1/H ); pad[0]->SetBottomMargin( bot1/H ); pad[1] = new TPad( "bottom", "bottom", 0, 0, 1, h2/H, kWhite,0,0); pad[1]->SetLeftMargin( left/W ); pad[1]->SetRightMargin( right/W ); pad[1]->SetTopMargin( top2/H ); pad[1]->SetBottomMargin( bot2/H ); pad[1]->SetGridy(); for( int ii=0; ii<2; ii++ ) { pad[ii]->SetFillColor(0); pad[ii]->SetTickx(1); pad[ii]->SetTicky(1); pad[ii]->SetFrameFillStyle(0); pad[ii]->SetFrameLineWidth(2); pad[ii]->SetFrameBorderMode(0); pad[ii]->SetFrameFillStyle(0); pad[ii]->SetFrameLineWidth(2); pad[ii]->SetFrameBorderMode(0); } // a dummy histogram with the correct x axis // Warning: setTDRstyle() must be called before TH1F* h_= new TH1F( "bidon", "bidon", nbin_, xmin_, xmax_ ); TAxis* ax_ = h_->GetXaxis(); TAxis* ay_ = h_->GetYaxis(); ax_->SetTitle(xtitle); ax_->CenterTitle(); ax_->SetTitleOffset(1.0); ax_->SetNdivisions(ndivx); ay_->SetTitle(ytitle); ay_->CenterTitle(); ay_->SetNdivisions(ndivy); ay_->SetTitleOffset(titleOffset); ay_->SetLabelOffset(0.015); // fetch histograms and dress them vector<TH1F*> histos; size_t nChan=channels.size(); for( size_t ii=0;ii<nChan;ii++) { TH1F* tmp = (TH1F*)f_->Get(channels[ii]); tmp->SetFillColor( fillColor_[type[ii]] ); tmp->SetLineColor( lineColor_[type[ii]] ); tmp->SetLineWidth( lineWidth2 ); histos.push_back(tmp); } // // stack histograms // TH1* h_stack = (TH1*) histos[nChan-1]->Clone(); h_stack -> Reset(); TString stackName_ = TString("Mll"); vector<TH1*> listOfStackedHists; for( size_t ii=0; ii<nChan; ii++ ) { TH1* hh_ = (TH1*) histos[nChan-ii-1]->Clone(); stackName_ += "_"; stackName_ += hh_->GetName(); TAxis* xaxis = h_stack->GetXaxis(); for( int iBin=1; iBin<=xaxis->GetNbins(); iBin++ ) { hh_ -> AddBinContent( iBin, h_stack->GetBinContent( iBin ) ); } hh_->SetName( stackName_ ); delete h_stack; h_stack = hh_; listOfStackedHists.push_back( (TH1*)hh_->Clone() ); } delete h_stack; TH1* totalHisto = listOfStackedHists[nChan-1]; // colors the stacked histogram totalHisto->SetLineColor( lineColor_["Signal"] ); totalHisto->SetLineWidth( lineWidth1 ); // The data points are presented as a TGraph // - error bars indicate the Poisson confidence interval at 68% // - bins with zero entry are removed TH1* hdata = (TH1*) f_->Get("hdata"); // hdata->Sumw2(); //hdata->Rebin(2); RooHist* roohist; TGraphAsymmErrors* dataGraph; roohist = new RooHist((*hdata)); int Nn0=0; vector<double> vY; vector<double> vX; vector<double > veY; vector<double > veX; vector<double> tmp(0,2); for(int ip=0;ip<roohist->GetN();ip++) { double Y,X; roohist->GetPoint(ip,X,Y); if(Y!=0) { Nn0++; vY.push_back(Y); vX.push_back(X); veX.push_back( roohist->GetErrorXlow(ip) ); veX.push_back( roohist->GetErrorXhigh(ip) ); veY.push_back( roohist->GetErrorYlow(ip) ); veY.push_back( roohist->GetErrorYhigh(ip) ); } } dataGraph=new TGraphAsymmErrors(Nn0); for(int ip=0;ip<Nn0;ip++) { dataGraph->SetPoint(ip,vX[ip],vY[ip]); dataGraph->SetPointError(ip,veX[ip*2],veX[ip*2+1],veY[ip*2],veY[ip*2+1]); } dataGraph->SetName("data"); dataGraph->SetMarkerStyle(kFullCircle); dataGraph->SetMarkerColor(kBlack); dataGraph->SetMarkerSize(markerSize); TGraph* dummyGraph = (TGraph*) dataGraph->Clone("dummyGraph"); dummyGraph->SetLineColor(0); dummyGraph->SetMarkerSize(1.5*markerSize); // Remove the horizontal bars (at Michael's request) double x_(0), y_(0); for( int ii=0; ii<dataGraph->GetN(); ii++ ) { dataGraph->SetPointEXlow(ii,0); dataGraph->SetPointEXhigh(ii,0); dataGraph->GetPoint(ii,x_,y_ ); if( y_==0 ) { dataGraph->RemovePoint( ii ); ii--; } } // get the ratio data/fit TGraphAsymmErrors* ratioGraph = (TGraphAsymmErrors*) dataGraph->Clone("ratio"); TH1* hfit = totalHisto; for( int ii=0; ii<dataGraph->GetN(); ii++ ) { dataGraph->GetPoint(ii,x_,y_ ); ratioGraph->SetPointEYlow(ii,0); ratioGraph->SetPointEYhigh(ii,0); ratioGraph->SetPoint(ii,x_,0 ); double eyl_ = dataGraph->GetErrorYlow(ii); double eyh_ = dataGraph->GetErrorYhigh(ii); int jj = hfit->FindBin(x_); float fit_ = hfit->GetBinContent( jj ); if( fit_>0 ) { if( use_chi ) { ratioGraph->SetPointEYlow(ii,eyl_/sqrt(fit_)); ratioGraph->SetPointEYhigh(ii,eyh_/sqrt(fit_)); ratioGraph->SetPoint(ii,x_,(y_-fit_)/sqrt(fit_) ); } else { ratioGraph->SetPointEYlow(ii,eyl_/fit_); ratioGraph->SetPointEYhigh(ii,eyh_/fit_); ratioGraph->SetPoint(ii,x_,y_/fit_ ); } } // cout << ii << " ratio=" << ratioGraph->GetY()[ii] // << "+" << ratioGraph->GetEYhigh()[ii] // << "-" << ratioGraph->GetEYlow()[ii] << endl; } TH1* hratio_ = (TH1*) h_->Clone("hratio"); ax_->SetLabelOffset(99); ax_->SetTitleOffset(99); // // now plotting // c_->Draw(); c_->cd(); TPad* p_ = pad[0]; p_->Draw(); p_->cd(); if( logScale ) { p_->SetLogy(true); } else { p_->SetLogy(false); } if( !logScale ) { h_->GetYaxis()->SetRangeUser(ymin_+0.001*(ymax_-ymin_),ymax_); } else { h_->GetYaxis()->SetRangeUser(yminl_,ymaxl_); } h_->Draw(); float dxl_ = scalel_*3.5; float dyl_ = scalel_*1.8; if( logScale ) { dxl_ = scalel_*4; dyl_ = scalel_*3.4; } TLegend* legend=new TLegend(xl_,yl_,xl_+dxl_,yl_+dyl_); legend->SetLineColor(0); legend->SetFillColor(0); legend->SetTextFont(42); legend->SetTextSize(0.048); legend->AddEntry(dummyGraph," data","pl"); if( logScale ) { legend->AddEntry(dummyGraph," ","0"); } for(size_t ii=0;ii<nChan;ii++) { legend->AddEntry(histos[ii],hnames[ii],"f"); } legend->Draw("same"); totalHisto->Draw("same"); for( size_t ii=0; ii<nChan; ii++ ) { // listOfStackedHists[nChan-ii-1]->Sumw2(); listOfStackedHists[nChan-ii-1]->Rebin(1.); listOfStackedHists[nChan-ii-1]->Scale(1.); listOfStackedHists[nChan-ii-1]->Draw("Same"); } // draw the data points dataGraph->Draw("PE"); // redraw axis p_->RedrawAxis(); //lumi pad, cms prelim pad etc.. { int txtFont = 42; // bold is 62 float txtSize1 = 0.055; float txtX1 = 0.91; float txtY1 = 0.935; float txtSize2 = 0.05; float txtX2 = 0.85; float txtY2 = 0.83; // TEST FOR THE NAME ZMT, ZMMNONISO, ZMS float txtSize3 = 0.055; float txtX3 = 0.3; float txtY3 = 0.935; TLatex latex; latex.SetNDC(); latex.SetTextFont(txtFont); latex.SetTextSize(txtSize1); latex.SetTextAlign(31); // align right latex.DrawLatex(txtX1,txtY1,"CMS"); latex.SetTextAlign(31); // align right latex.SetTextSize(txtSize2); latex.DrawLatex(txtX2,txtY2,"36 pb^{-1} at #sqrt{s} = 7 TeV"); latex.SetTextAlign(21); // align left??? latex.SetTextSize(txtSize3); latex.DrawLatex(txtX3,txtY3,"global plus standalone muon"); } c_->cd(); p_ = pad[1]; p_->Draw(); p_->cd(); TAxis* xratio_ = hratio_->GetXaxis(); TAxis* yratio_ = hratio_->GetYaxis(); yratio_->SetRangeUser(r0_-0.9999*dr_,r0_+0.9999*dr_); yratio_->SetLabelSize( s[1]*yratio_->GetLabelSize() ); yratio_->SetTitleSize( s[1]*yratio_->GetTitleSize() ); yratio_->SetLabelOffset( yratio_->GetLabelOffset() ); yratio_->SetTitleOffset( yratio_->GetTitleOffset()/s[1] ); if( use_chi ) { yratio_->SetTitle("#chi"); yratio_->SetNdivisions(4); } else { yratio_->SetTitle("data/fit"); yratio_->SetNdivisions(3); } xratio_->SetLabelSize( s[1]*xratio_->GetLabelSize() ); xratio_->SetTitleSize( s[1]*xratio_->GetTitleSize() ); xratio_->SetTitleOffset( 1.0 ); xratio_->CenterTitle(); xratio_->SetLabelOffset( xratio_->GetLabelOffset()*s[1] ); xratio_->SetTickLength( xratio_->GetTickLength()*s[1] ); hratio_->Draw(); ratioGraph->SetMarkerSize( ratioGraph->GetMarkerSize()*1. ); ratioGraph->SetLineColor( kBlack ); ratioGraph->SetMarkerColor( kGray+2 ); ratioGraph->SetMarkerStyle( kFullCircle ); ratioGraph->DrawClone("PE"); ratioGraph->SetMarkerColor( kBlack ); ratioGraph->SetMarkerStyle( kOpenCircle ); ratioGraph->DrawClone("PE"); p_->RedrawAxis(); c_->cd(); return c_; }
void plottingmacro_IVF() { double fa = 0.46502; double fb = 0.53498; bool debug_ = true; // std::string path("Nov10thFall11Plots/"); // std::string path("Nov10Fall1160MTopSlimPlots/"); std::string path("Nov10Fall1160MTopIVFPlots_b/"); if(debug_) std::cout << "Init the style form setTDRStyle" << std::endl; setTDRStyle(); gStyle->SetErrorX(0.5); gROOT->ForceStyle(); initOptions(); if(debug_) std::cout << "Init the sample" << std::endl; // std::vector<Sample> s = Nov10thDiJetPtUpdatedSlimHistos(); //std::vector<Sample> s = Nov10Fall1160MTopSlimHistos(); std::vector<Sample> s = Nov10Fall1160MTopIVFHistos(); Sample data(1,"fake data","S1.root",0,true,1000); if(debug_) std::cout << "Init the data sample" << std::endl; for(size_t i=0;i< s.size();i++) if(s[i].data) {data=s[i];break;} if(debug_) std::cout << "Ls data sample" << std::endl; data.file()->ls(); if(debug_) std::cout << "Init the mc sample" << std::endl; for(size_t i=0;i< s.size();i++) s[i].dump(1,fa,fb); std::vector<std::string> names; if(debug_) std::cout << "Get List of Keys" << std::endl; TList * subs = data.file()->GetListOfKeys(); for(size_t i=0;i< subs->GetSize();i++) { TString nn = subs->At(i)->GetName(); if( nn.Contains(TRegexp("Count*")) ) continue; if(debug_) std::cout << "Get List of Keys in subdirs" << std::endl; TList * objs = ((TDirectoryFile *)data.file()->Get(subs->At(i)->GetName()))->GetListOfKeys(); for(size_t j=0;j< objs->GetSize();j++) { if(debug_) std::cout << "Name = " << subs->At(i)->GetName()+std::string("/") + objs->At(j)->GetName() << std::endl; names.push_back(subs->At(i)->GetName()+std::string("/") + objs->At(j)->GetName()); // std::cout << subs->At(i)->GetName() << "/" << objs->At(j)->GetName() << std::endl; //TODO: select plots via regexp } } if(debug_) std::cout << "Starting plotting" << std::endl; std::string process; for(size_t i = 0 ; i < names.size() ; i++) { std::map<std::string,TH1F *> grouped; TString n=names[i]; // if(!n.Contains(TRegexp("VlightRegionHZee/HiggsPtVlightRegionHZee"))) continue; // if(!n.Contains(TRegexp("VlightRegionHZee/ZPtVlightRegionHZee"))) continue; // if(!n.Contains(TRegexp("VlightRegionHZee"))) continue; // if(!n.Contains(TRegexp("ZSVRegionZmmSV"))) continue; // if(!n.Contains(TRegexp("ZSVRegionZeeSV"))) continue; // if(!n.Contains(TRegexp("ZSVRegionZcombSV"))) continue; // if(!n.Contains(TRegexp("ZSVPureRegionZcombSV"))) continue; // if(!n.Contains(TRegexp("ZSVTTbarPureRegionZcombSV"))) continue; if(!n.Contains(TRegexp("TTbarRegionZeeSVJets"))) continue; if(n.Contains(TRegexp("RegionHZcomb"))) process = "Z(l^{+}l^{-})H(b#bar{b})"; if(n.Contains(TRegexp("RegionHZmm"))) process = "Z(#mu^{+}#mu^{-})H(b#bar{b})"; if(n.Contains(TRegexp("RegionHZee"))) process = "Z(e^{+}e^{-})H(b#bar{b})"; if(debug_) std::cout << "Creating the Canvas" << std::endl; TCanvas *c = new TCanvas(); c->SetLogy(false); c->SetTitle(names[i].c_str()); if(debug_) std::cout << "Creating histograms" << std::endl; TH1F *hd = ((TH1F*)data.file()->Get(names[i].c_str())); hd->Sumw2(); Options o=options[names[i]]; // hd->Rebin(o.rebin); hd->SetMarkerStyle(20); hd->GetXaxis()->SetLabelOffset(99); hd->SetYTitle(o.yaxis.c_str()); double nbin = hd->GetNbinsX(); double min_bin = hd->GetXaxis()->GetXmin(); double max_bin = hd->GetXaxis()->GetXmax(); TH1F *hmc = new TH1F("hmc","hmc", nbin, min_bin, max_bin); hmc->SetFillColor(kWhite); hmc->Sumw2(); // hmc->Rebin(o.rebin); if(debug_) std::cout << "Creating the THStack and Legend" << std::endl; THStack * sta = new THStack("sta",hd->GetTitle()); TLegend * l = new TLegend(o.legendx1,o.legendy1,o.legendx2,o.legendy2); //0.7,0.1,0.9,0.6); l->SetFillColor(kWhite); l->SetBorderSize(0); l->SetTextFont(62); l->SetTextSize(0.03); if(debug_) std::cout << "Adding data to the legend" << std::endl; l->AddEntry(hd, "Data","P"); if(debug_) std::cout << "Adding MC to the THStack" << std::endl; //with the proper trigger eff // double SF[] = {1.01,1.03,1.00}; // double SF[] = {1.03,1.054,1.032}; double SF[] = {1.0,1.0,1.0}; if(debug_){ for(int i = 0; i< 3; ++i) std::cout << "SF [" << i << "] = " << SF[i] << std::endl; } double mcIntegral=0; for(size_t j=0;j< s.size() ;j++) { if(!s[j].data) { if(debug_) std::cout << "Creating TH1F from file " << s[j].name << std::endl; TH1F * h = ((TH1F*)s[j].file()->Get(names[i].c_str())); h->Sumw2(); if(debug_){ std::cout << "TH1F created from file " << s[j].name << std::endl; std::cout << "Scaling : " << s[j].scale(data.lumi(),fa,fb) << std::endl; std::cout << "Scaling with SF : " << s[j].scale(data.lumi(),fa,fb,SF) << std::endl; std::cout << "Histo integral before scaling = " << h->Integral() << std::endl; } h->Scale(s[j].scale(data.lumi(),fa,fb,SF)); if(debug_){ std::cout << "Histo integral after scaling = " << h->Integral() << std::endl; std::cout << "Managing style... " << std::endl; } h->SetLineWidth(1.); h->SetFillColor(s[j].color); h->SetLineColor(s[j].color); // h->Rebin(options[names[i]].rebin); if(debug_) std::cout << "Cloning and update legend " << std::endl; if(grouped.find(s[j].name) == grouped.end()){ l->AddEntry(h,s[j].name.c_str(),"F"); } std::cout << "Sample : " << s[j].name << " - Integral for plot " << names[i] << " = " << h->Integral(-10000,10000) << std::endl; mcIntegral += h->Integral(); sta->Add(h); hmc->Add(h); //TO FIX grouped map // sovrascrive histo con lo stesso nome tipo VV o ST etc... grouped[s[j].name]=(TH1F *)h->Clone(("_"+names[i]).c_str()); } } if(debug_){ std::cout << "Data total = " << hd->Integral() << std::endl; std::cout << "MC = " << mcIntegral << std::endl; std::cout << "Data/MC = " << hd->Integral()/mcIntegral << std::endl; } TPad * TopPad = new TPad("TopPad","Top Pad",0.,0.3,1.,1. ) ; TPad * BtmPad = new TPad("BtmPad","Bottom Pad",0.,0.,1.,0.313 ) ; TopPad->SetBottomMargin(0.02); BtmPad->SetTopMargin(0.0); BtmPad->SetFillStyle(4000); TopPad->SetFillStyle(4000); BtmPad->SetFillColor(0); BtmPad->SetBottomMargin(0.35); TopPad->Draw() ; BtmPad->Draw() ; std::cout << "hd maximum = " << hd->GetMaximum() << " sta maximum = " << sta->GetMaximum() << std::endl; double maxY; if(hd->GetMaximum() > sta->GetMaximum()) maxY = (hd->GetMaximum())*1.5; else maxY = (sta->GetMaximum())*1.5; TopPad->cd(); hd->Draw("E1X0"); sta->Draw("sameHIST"); hmc->Draw("sameE2"); hmc->SetFillColor(2); hmc->SetMarkerSize(0); hmc->SetFillStyle(3013); hd->Draw("E1X0same"); l->Draw("same"); std::cout << "Set Maximum to = " << maxY << std::endl; hd->GetYaxis()->SetRangeUser(0.,maxY); hd->GetXaxis()->SetRangeUser(options[names[i]].min,options[names[i]].max); BtmPad->cd(); std::cout << "Division" << std::endl; TH1D * divisionErrorBand = (TH1D*)(hmc)->Clone("divisionErrorBand"); divisionErrorBand->Sumw2(); divisionErrorBand->Divide(hmc); divisionErrorBand->Draw("E2"); divisionErrorBand->SetMaximum(2.49); divisionErrorBand->SetMinimum(0); divisionErrorBand->SetMarkerStyle(20); divisionErrorBand->SetMarkerSize(0.55); divisionErrorBand->GetXaxis()->SetTitleOffset(1.12); divisionErrorBand->GetXaxis()->SetLabelSize(0.12); divisionErrorBand->GetXaxis()->SetTitleSize(0.5); divisionErrorBand->GetYaxis()->SetTitle("Data/MC"); divisionErrorBand->GetYaxis()->SetLabelSize(0.12); divisionErrorBand->GetYaxis()->SetTitleSize(0.12); divisionErrorBand->GetYaxis()->SetTitleOffset(0.40); divisionErrorBand->GetYaxis()->SetNdivisions(505); //divisionErrorBand->UseCurrentStyle(); divisionErrorBand->SetFillColor(2); divisionErrorBand->SetFillStyle(3001); divisionErrorBand->SetMarkerSize(0.); TH1D * division = (TH1D*)(hd)->Clone("division"); division->Sumw2(); division->Divide(hmc); // division->SetMaximum(2.5); // division->SetMinimum(0); // division->SetMarkerStyle(20); // division->SetMarkerSize(0.55); // division->GetXaxis()->SetLabelSize(0.12); // division->GetXaxis()->SetTitleSize(0.14); // division->GetYaxis()->SetLabelSize(0.10); // division->GetYaxis()->SetTitleSize(0.10); // division->GetYaxis()->SetTitle("Data/MC"); Double_t min = division->GetXaxis()->GetXmin(); Double_t max = division->GetXaxis()->GetXmax(); division->Draw("E1X0same"); TLine *line = new TLine(min, 1.0, max, 1.0); line->SetLineColor(kRed); line->Draw("same"); TLegend * leg3 =new TLegend(0.50,0.86,0.69,0.96); leg3->AddEntry(divisionErrorBand,"MC uncert. (stat.)","f"); leg3->SetFillColor(0); leg3->SetLineColor(0); leg3->SetShadowColor(0); leg3->SetTextFont(62); leg3->SetTextSize(0.06); leg3->Draw(); TPaveText *pave = new TPaveText(0.15,0.85,0.32,0.96,"brNDC"); pave->SetTextAlign(12); pave->SetLineColor(0); pave->SetFillColor(0); pave->SetShadowColor(0); //TText *text = pave->AddText(Form("#chi_{#nu}^{2} = %.3f, K_{s} = %.3f",histDt->Chi2Test(histCopyMC5,"UWCHI2/NDF"),histDt->KolmogorovTest(histCopyMC5))); // stat + sys TText *text = pave->AddText(Form("#chi_{#nu}^{2} = %.3f, K_{s} = %.3f",hd->Chi2Test(hmc,"UWCHI2/NDF"),hd->KolmogorovTest(hmc))); // stat only text->SetTextFont(62); text->SetTextSize(0.08); pave->Draw(); TopPad->cd(); TLatex latex; latex.SetNDC(); latex.SetTextAlign(12); latex.SetTextSize(0.052); latex.DrawLatex(0.17,0.89,"CMS Preliminary"); latex.SetTextSize(0.04); latex.DrawLatex(0.17,0.84,"#sqrt{s} = 7 TeV, L = 4.7 fb^{-1}"); // latex.DrawLatex(0.17,0.79,"Z(e^{+}e^{-})H(b#bar{b})"); latex.DrawLatex(0.17,0.79,process.c_str()); c->Update(); std::string cName= hd->GetName(); cName += "_bare.pdf"; cName = path+cName; c->Print(cName.c_str(),"pdf"); // std::cout << names[i] << " d: " << hd->Integral() << " "; // THStack * sta2 = new THStack("sta2",hd->GetTitle()); // float tot=0; // float toterr2=0; // if(debug_) // std::cout << "Putting the iterator in the for loop" << std::endl; // for(std::map<std::string,TH1F *>::reverse_iterator it=grouped.rbegin(); it!=grouped.rend();++it) // { // if(debug_) // std::cout << "Using the iterator" << std::endl; // std::cout << (*it).first << " " << (*it).second->Integral() << " | " << std::endl ; // if((*it).second->GetEntries() > 0) { // float er=1.*sqrt((*it).second->GetEntries())/(*it).second->GetEntries()*(*it).second->Integral(); // toterr2+=er*er; // } // tot+=(*it).second->Integral(); // sta2->Add(it->second); // } // std::cout << " Tot: " << tot << "+-" << sqrt(toterr2) << " SF: " << hd->Integral()/tot << std::endl; // TCanvas *c2 = new TCanvas(); // c2->SetTitle(names[i].c_str()); // std::cout << "hd maximum = " << hd->GetMaximum() << " sta2 maximum = " << sta2->GetMaximum() << std::endl; // if(hd->GetMaximum() > sta2->GetMaximum()) maxY = hd->GetBinContent(hd->GetMaximumBin()) * 1.5; // else maxY = ( sta2->GetMaximum())*1.5; // // hd->Draw("E1"); // sta2->Draw("PADSHIST"); // // hd->Draw("E1same"); // // l->Draw("same"); // std::cout << "Set Maximum to = " << maxY << std::endl; // hd->GetYaxis()->SetRangeUser(0.,maxY); // hd->GetXaxis()->SetRangeUser(options[names[i]].min,options[names[i]].max); // c2->Update(); // std::string c2Name = hd->GetName(); // c2Name = path+c2Name; // c2Name += "_norm.pdf"; // c2->Print(c2Name.c_str(),"pdf"); } }