void determineWorkingPoint(TString algo="csv",TString baseURL="~/scratch0/top-nosyst/plotter.root") { float workPoint(0.244); float sfb(1.020), sfberr(0.04); //from BTV-11-003 float sflight(1.08), sflighterr(0.13); //from BTV-11-002 // float sfb(0.99), sfberr(0.099); //from BTV-11-001 // float sflight(1.07882), sflighterr(0.244); //from BTV-11-001 if(algo=="tche") { workPoint=1.7; sfb=0.95; sfberr=0.095; sflight=1.08018; sflighterr=0.1125; } TObjArray bjets=getDistributionFromPlotter(algo+"b",baseURL); TObjArray lightjets=getDistributionFromPlotter(algo+"light",baseURL); TH1F *bDisc=(TH1F *) bjets.At(1); TH1F *lightDisc=(TH1F *) lightjets.At(1); setStyle(); gStyle->SetOptFit(0); TCanvas *cnv = getNewCanvas("c","c",false); cnv->Clear(); cnv->SetCanvasSize(1200,1200); cnv->SetWindowSize(1200,1200); cnv->Divide(2,2); //draw the discriminator TPad *p = (TPad *)cnv->cd(1); bDisc->SetTitle("b"); bDisc->SetLineColor(1); bDisc->SetMarkerColor(1); bDisc->SetMarkerStyle(20); bDisc->SetFillStyle(0); bDisc->DrawNormalized("histe1"); lightDisc->SetLineColor(1); lightDisc->SetMarkerColor(1); lightDisc->SetMarkerStyle(24); lightDisc->SetFillStyle(0); lightDisc->SetTitle("udcsg"); lightDisc->DrawNormalized("histe1same"); TLegend *leg=p->BuildLegend(); formatForCmsPublic(p,leg,"CMS simulation",2); //draw the b/light efficiencies p=(TPad *)cnv->cd(2); p->SetLogy(); TGraphAsymmErrors *bEff = getEfficiencyFrom(bDisc); TGraphAsymmErrors *lightEff = getEfficiencyFrom(lightDisc); bEff->SetMarkerStyle(20); bEff->SetFillStyle(0); bEff->Draw("ap"); bEff->GetXaxis()->SetTitle(bDisc->GetXaxis()->GetTitle()); bEff->GetYaxis()->SetTitle("Efficiency"); lightEff->SetMarkerStyle(24); lightEff->SetFillStyle(0); lightEff->Draw("p"); //draw relatively to a given working point p=(TPad *)cnv->cd(3); Double_t baseBEff=bEff->Eval(workPoint); TGraphAsymmErrors *relBEff=new TGraphAsymmErrors; relBEff->SetMarkerStyle(20); relBEff->SetFillStyle(0); Double_t baseLightEff=lightEff->Eval(workPoint); TGraphAsymmErrors *relLightEff=new TGraphAsymmErrors; relLightEff->SetMarkerStyle(24); relLightEff->SetFillStyle(0); for(int ip=0; ip<bEff->GetN(); ip++) { Double_t cut, y,ey; bEff->GetPoint(ip,cut,y); ey = bEff->GetErrorY(ip); Double_t relEff(y/baseBEff); if(relEff<sfb+2*sfberr && relEff>sfb-2*sfberr) { int ipt=relBEff->GetN(); relBEff->SetPoint(ipt,cut,relEff); relBEff->SetPointError(ipt,0,0,ey/baseBEff,ey/baseBEff); } lightEff->GetPoint(ip,cut,y); ey = lightEff->GetErrorY(ip); relEff=y/baseLightEff; // if(relEff<sflight+7*sflighterr && relEff>sflight-7*sflighterr) if(relEff<sflight+3*sflighterr && relEff>sflight-3*sflighterr) { int ipt=relLightEff->GetN(); relLightEff->SetPoint(ipt,cut,relEff); relLightEff->SetPointError(ipt,0,0,ey/baseLightEff,ey/baseLightEff); } } relLightEff->Draw("ap"); relLightEff->GetXaxis()->SetTitle( bDisc->GetXaxis()->GetTitle() ); relLightEff->GetYaxis()->SetTitle( "#varepsilon/#varepsilon_{0}" ); relLightEff->Fit("expo","Q+"); TF1 *ffunc=relLightEff->GetFunction("expo"); float newLightCut=(TMath::Log(sflight)-ffunc->GetParameter(0))/ffunc->GetParameter(1); float newLightCutErrPlus=(TMath::Log(sflight+sflighterr)-ffunc->GetParameter(0))/ffunc->GetParameter(1)-newLightCut; float newLightCutErrMinus=(TMath::Log(sflight-sflighterr)-ffunc->GetParameter(0))/ffunc->GetParameter(1)-newLightCut; TArrow *lightArrow = new TArrow(newLightCut, sflight-3*sflighterr, newLightCut, sflight-3*sflighterr*0.8, 0.02, "<|"); lightArrow->SetLineColor(kGray+2); lightArrow->SetFillColor(kGray+2); lightArrow->Draw("SAME <|"); relBEff->Draw("p"); relBEff->Fit("expo","Q+"); ffunc=relBEff->GetFunction("expo"); float newBCut=(TMath::Log(sfb)-ffunc->GetParameter(0))/ffunc->GetParameter(1); float newBCutErrPlus=(TMath::Log(sfb+sfberr)-ffunc->GetParameter(0))/ffunc->GetParameter(1)-newBCut; float newBCutErrMinus=(TMath::Log(sfb-sfberr)-ffunc->GetParameter(0))/ffunc->GetParameter(1)-newBCut; cout << sfb << " " << sfb+sfberr << " " << sfb-sfberr << endl; TArrow *bArrow = new TArrow(newBCut, sflight-3*sflighterr, newBCut, sflight-3*sflighterr*0.8, 0.02, "<|"); bArrow->Draw("SAME <|"); //draw epsilon_b vs epsilon_q p=(TPad *)cnv->cd(4); p->SetLogy(); TGraphAsymmErrors *perf=new TGraphAsymmErrors; perf->SetName("algoperformance"); perf->SetMarkerStyle(20); perf->SetFillStyle(0); for(int ip=0; ip<bEff->GetN(); ip++) { Double_t cut; Double_t x,ex; bEff->GetPoint(ip,cut,x); ex = bEff->GetErrorY(ip); Double_t y,ey; lightEff->GetPoint(ip,cut,y); ey = lightEff->GetErrorY(ip); perf->SetPoint(ip,x,y); perf->SetPointError(ip,ex,ex,ey,ey); } perf->Draw("ap"); perf->GetXaxis()->SetTitle( bEff->GetTitle() ); perf->GetYaxis()->SetTitle( lightEff->GetTitle() ); //new performance expected after applying the new cuts TGraphAsymmErrors *newperf=new TGraphAsymmErrors; newperf->SetName("newalgoperformance"); newperf->SetMarkerStyle(24); newperf->SetFillStyle(0); newperf->SetLineWidth(2); newperf->SetLineColor(kRed); newperf->SetLineColor(kRed); newperf->SetPoint(0,baseBEff*sfb,baseLightEff*sflight); newperf->SetPointError(0,baseBEff*sfberr,baseBEff*sfberr,baseLightEff*sflighterr,baseLightEff*sflighterr); newperf->Draw("p"); cnv->Modified(); cnv->Update(); cnv->SaveAs("discFlavor.C"); cnv->SaveAs("discFlavor.png"); cout << "[determineWorkingPoint]" << endl << "To emulate the measured scale-factors you can use the following new cuts per jet flavor" << endl << "SF-b : " << newBCut << " +" << newBCutErrPlus << " " << newBCutErrMinus << endl << "SF-light : " << newLightCut << " +" << newLightCutErrPlus << " " << newLightCutErrMinus << endl; }
void SingleAnalysis::DrawGraphs() { std::cout << "Drawing graphs" << std::endl; // special case for erec and deviation m_pERecCanvas->cd(); TPad *pERecPad = new TPad("ERecPad", "ERecPad", 0.02, 0.37, 0.95, 0.99); pERecPad->Draw(); pERecPad->cd(); pERecPad->Range(-19.23077,0.01,96.15385,1428.571); pERecPad->SetFillColor(0); pERecPad->SetBorderMode(0); pERecPad->SetBorderSize(2); pERecPad->SetTickx(1); pERecPad->SetTicky(1); pERecPad->SetLeftMargin(0.1666667); pERecPad->SetRightMargin(0.01); pERecPad->SetTopMargin(0.02); pERecPad->SetBottomMargin(0.0); pERecPad->SetFrameLineWidth(1); pERecPad->SetFrameBorderMode(0); m_canvasMultiGraphMap[E_REC].second->Draw("ap"); this->PostDrawMultiGraph(E_REC, m_canvasMultiGraphMap[E_REC].second); TLegend *pLegend = pERecPad->BuildLegend(); pLegend->SetBorderSize(0); pLegend->SetLineColor(0); pLegend->SetLineStyle(0); pLegend->SetLineWidth(1); pLegend->SetFillColor(0); pLegend->SetFillStyle(0); pLegend->SetTextSize(0.04); pERecPad->Modified(); m_pERecCanvas->cd(); TPad *pERecDeviationPad = new TPad("ERecDeviationPad", "ERecDeviationPad", 0.02, 0, 0.95, 0.37); pERecDeviationPad->Draw(); pERecDeviationPad->cd(); pERecDeviationPad->Range(-19.23077,-0.3993507,96.15385,0.25); pERecDeviationPad->SetFillColor(0); pERecDeviationPad->SetBorderMode(0); pERecDeviationPad->SetBorderSize(2); pERecDeviationPad->SetTickx(1); pERecDeviationPad->SetTicky(1); pERecDeviationPad->SetLeftMargin(0.1666667); pERecDeviationPad->SetRightMargin(0.01); pERecDeviationPad->SetTopMargin(0); pERecDeviationPad->SetBottomMargin(0.23); pERecDeviationPad->SetFrameLineWidth(1); pERecDeviationPad->SetFrameBorderMode(0); m_canvasMultiGraphMap[E_REC_DEVIATION].second->Draw("ap"); TF1 *pLin = new TF1("lin", "0", 0, 90); pLin->SetLineColor(kBlack); pLin->SetLineWidth(1); pLin->SetLineStyle(2); pLin->Draw("same"); this->PostDrawMultiGraph(E_REC_DEVIATION, m_canvasMultiGraphMap[E_REC_DEVIATION].second); pERecDeviationPad->Modified(); for(CanvasMultiGraphMap::iterator graphIter = m_canvasMultiGraphMap.begin(), graphEndIter = m_canvasMultiGraphMap.end() ; graphEndIter != graphIter ; ++graphIter) { if(graphIter->first == E_REC || graphIter->first == E_REC_DEVIATION) continue; graphIter->second.first->cd(); graphIter->second.second->Draw("ap"); this->PostDrawMultiGraph(graphIter->first, graphIter->second.second); TLegend *pLegend = graphIter->second.first->BuildLegend(); pLegend->SetBorderSize(0); pLegend->SetLineColor(0); pLegend->SetLineStyle(1); pLegend->SetLineWidth(1); pLegend->SetFillColor(0); pLegend->SetFillStyle(0); pLegend->SetTextSize(0.04); } }
CompareSpectra(Int_t part, Int_t charge, Int_t cent = -1, Int_t ratio = kFALSE, Int_t fitfunc = -1, Bool_t cutSpectra = kTRUE) { gROOT->LoadMacro("HistoUtils.C"); gStyle->SetOptStat(0); gStyle->SetOptFit(); LoadLibraries(); AliBWFunc bwf; bwf.SetVarType(AliBWFunc::kdNdpt); TF1 *fFitFunc = NULL; switch (fitfunc) { case 0: gROOT->LoadMacro("SpectraAnalysis.C"); fFitFunc = STAR_BlastWave("fBW", AliPID::ParticleMass(part), 0.9, 0.1, 1.); fBW->SetParLimits(3, 0.5, 1.5); // fBW->FixParameter(3, 1.); break; case 1: fFitFunc = bwf.GetLevi(AliPID::ParticleMass(part), AliPID::ParticleMass(part), 5., 1000.); break; case 2: fFitFunc = bwf.GetBoltzmann(AliPID::ParticleMass(part), AliPID::ParticleMass(part), 100.); break; case 3: fFitFunc = bwf.GetMTExp(AliPID::ParticleMass(part),AliPID::ParticleMass(part) , 100.); break; case 4: fFitFunc = bwf.GetPTExp(AliPID::ParticleMass(part), 100.); break; case 5: fFitFunc = bwf.GetBGBW(AliPID::ParticleMass(part), 0.5, 0.1, 1.e6); break; case 6: fFitFunc = new TF1("fpol9", "pol9", 0., 5.0); break; } if (fFitFunc) fFitFunc->SetLineWidth(2); TFile *itssafile = TFile::Open(ratio ? itssaratiofilename : itssafilename); // TFile *itstpcfile = TFile::Open(itstpcfilename); if (part / 3 == charge / 3) Char_t *tpctofratiofilename = tpctofratiofilenameA; else Char_t *tpctofratiofilename = tpctofratiofilenameB; TFile *tpctoffile = TFile::Open(ratio ? tpctofratiofilename : tpctoffilename); TFile *toffile = TFile::Open(ratio ? tofratiofilename : toffilename); // TFile *hydrofile = TFile::Open(hydrofilename); TCanvas *cCanvas = new TCanvas("cCanvas"); if (cent == -1) cCanvas->Divide(5, 2); TCanvas *cCanvasCombined = new TCanvas("cCanvasCombined"); TCanvas *cCanvasRatio = new TCanvas("cCanvasRatio"); if (cent == -1) cCanvasRatio->Divide(5, 2); TCanvas *cCanvasRatioComb = new TCanvas("cCanvasRatioComb"); if (cent == -1) cCanvasRatioComb->Divide(5, 2); TCanvas *cCanvasRatioFit = new TCanvas("cCanvasRatioFit"); if (cent == -1) cCanvasRatioFit->Divide(5, 2); TPad *curpad = NULL; TH1D *hITSsa, *hITSTPC, *hTPCTOF, *hTOF; TGraph *hHydro; TGraphErrors *gCombined[10]; TProfile *pCombined[10]; TH1D *hCombined[10]; TH1D *hRatio_ITSsa_ITSTPC[10]; TH1D *hRatio_ITSsa_TPCTOF[10]; TH1D *hRatio_ITSTPC_TPCTOF[10]; TH1D *hRatio_ITSTPC_TOF[10]; TH1D *hRatio_TPCTOF_TOF[10]; TH1D *hRatio_ITSsa_TOF[10]; for (Int_t icent = 0; icent < 10; icent++) { if (cent != -1 && icent != cent) continue; gCombined[icent] = new TGraphErrors(); pCombined[icent] = new TProfile(Form("pCombined_cent%d", icent), "", NptBins, ptBin); hCombined[icent] = new TH1D(Form("hCombined_cent%d", icent), "", NptBins, ptBin); TObjArray spectraArray; hITSsa = ratio ? GetITSsaRatio(itssafile, part, charge, icent, cutSpectra): GetITSsaSpectrum(itssafile, part, charge, icent, cutSpectra); // hITSTPC = GetITSTPCSpectrum(itstpcfile, part, charge, icent, cutSpectra); hTPCTOF = ratio ? GetTPCTOFRatio(tpctoffile, part, charge, icent, cutSpectra) : GetTPCTOFSpectrum(tpctoffile, part, charge, icent, cutSpectra); hTOF = ratio ? GetTOFRatio(toffile, part, charge, icent, cutSpectra) : GetTOFSpectrum(toffile, part, charge, icent, cutSpectra); // hHydro = GetHydroSpectrum(hydrofile, part, charge, icent); if (cent == -1) curpad = (TPad *)cCanvas->cd(icent + 1); else curpad = (TPad *)cCanvas->cd(); if (!ratio) TH1D *hArea = new TH1D(Form("hArea_%d", icent), Form("%s (%s);p_{T} (GeV/c);#frac{d^{2}N}{dy dp_{t}};", partChargeName[part][charge], centName[icent]), 100, 0., 5.); else TH1D *hArea = new TH1D(Form("hArea_%d", icent), Form("%s (%s);p_{T} (GeV/c);#frac{d^{2}N}{dy dp_{t}};", "generic ratio", centName[icent]), 100, 0., 5.); hArea->Draw(); Double_t minimum = 0.001; Double_t maximum = 1000.; if (hITSsa) { AddPointsToGraph(hITSsa, gCombined[icent]); AddPointsToProfile(hITSsa, pCombined[icent]); spectraArray.Add(hITSsa); hITSsa->DrawCopy("same"); if (hITSsa->GetMaximum() > maximum) maximum = hITSsa->GetMaximum(); if (hITSsa->GetMinimum() < minimum) minimum = hITSsa->GetMinimum(); } if (hITSTPC) { AddPointsToGraph(hITSTPC, gCombined[icent]); AddPointsToProfile(hITSTPC, pCombined[icent]); spectraArray.Add(hITSTPC); hITSTPC->DrawCopy("same"); if (hITSTPC->GetMaximum() > maximum) maximum = hITSTPC->GetMaximum(); if (hITSTPC->GetMinimum() < minimum) minimum = hITSTPC->GetMinimum(); } if (hTPCTOF) { AddPointsToGraph(hTPCTOF, gCombined[icent]); AddPointsToProfile(hTPCTOF, pCombined[icent]); spectraArray.Add(hTPCTOF); hTPCTOF->DrawCopy("same"); if (hTPCTOF->GetMaximum() > maximum) maximum = hTPCTOF->GetMaximum(); if (hTPCTOF->GetMinimum() < minimum) minimum = hTPCTOF->GetMinimum(); } if (hTOF) { AddPointsToGraph(hTOF, gCombined[icent]); AddPointsToProfile(hTOF, pCombined[icent]); spectraArray.Add(hTOF); hTOF->DrawCopy("same"); if (hTOF->GetMaximum() > maximum) maximum = hTOF->GetMaximum(); if (hTOF->GetMinimum() < minimum) minimum = hTOF->GetMinimum(); } if (hHydro) { ;//hHydro->Draw("c,same"); } TLegend *legend = curpad->BuildLegend(); legend->SetFillStyle(0); legend->SetFillColor(0); legend->DeleteEntry(); hArea->SetMaximum(maximum * 1.1); hArea->SetMinimum(0.01); // gPad->SetLogy(); /*** RATIOS ***/ /* switch canvas */ if (cent == -1) curpad = (TPad *)cCanvasRatio->cd(icent + 1); else curpad = (TPad *)cCanvasRatio->cd(); /* area histo */ if (!ratio) TH1D *hAreaRatio = new TH1D(Form("hAreaRatio_%d", icent), Form("%s (%s);p_{T} (GeV/c);ratio;", partChargeName[part][charge], centName[icent]), 100, 0., 5.); else TH1D *hAreaRatio = new TH1D(Form("hAreaRatio_%d", icent), Form("%s (%s);p_{T} (GeV/c);ratio;", "generic ratio", centName[icent]), 100, 0., 5.); hAreaRatio->SetMaximum(1.5); hAreaRatio->SetMinimum(0.5); hAreaRatio->Draw(); /* do ratios */ if (hITSsa && hITSTPC) { hRatio_ITSsa_ITSTPC[icent] = new TH1D(*hITSsa); hRatio_ITSsa_ITSTPC[icent]->Divide(hITSTPC); hRatio_ITSsa_ITSTPC[icent]->SetNameTitle(Form("hRatio_ITSsa_ITSTPC_cent%d", icent), "ITSsa / ITSTPC"); hRatio_ITSsa_ITSTPC[icent]->Draw("same"); } if (hITSsa && hTPCTOF) { hRatio_ITSsa_TPCTOF[icent] = new TH1D(*hITSsa); hRatio_ITSsa_TPCTOF[icent]->Divide(hTPCTOF); hRatio_ITSsa_TPCTOF[icent]->SetNameTitle(Form("hRatio_ITSsa_TPCTOF_cent%d", icent), "ITSsa / TPCTOF"); hRatio_ITSsa_TPCTOF[icent]->SetMarkerStyle(23); hRatio_ITSsa_TPCTOF[icent]->SetMarkerColor(4); hRatio_ITSsa_TPCTOF[icent]->Draw("same"); } if (hITSTPC && hTPCTOF) { hRatio_ITSTPC_TPCTOF[icent] = new TH1D(*hITSTPC); hRatio_ITSTPC_TPCTOF[icent]->Divide(hTPCTOF); hRatio_ITSTPC_TPCTOF[icent]->SetNameTitle(Form("hRatio_ITSTPC_TPCTOF_cent%d", icent), "ITSTPC / TPCTOF"); hRatio_ITSTPC_TPCTOF[icent]->Draw("same"); } if (hTPCTOF && hTOF) { hRatio_TPCTOF_TOF[icent] = new TH1D(*hTPCTOF); hRatio_TPCTOF_TOF[icent]->Divide(hTOF); hRatio_TPCTOF_TOF[icent]->SetNameTitle(Form("hRatio_TPCTOF_TOF_cent%d", icent), "TPCTOF / TOF"); hRatio_TPCTOF_TOF[icent]->Draw("same"); } if (hITSsa && hTOF) { hRatio_ITSsa_TOF[icent] = new TH1D(*hITSsa); hRatio_ITSsa_TOF[icent]->Divide(hTOF); hRatio_ITSsa_TOF[icent]->SetNameTitle(Form("hRatio_ITSsa_TOF_cent%d", icent), "ITSsa / TOF"); // hRatio_ITSsa_TOF[icent]->SetMarkerStyle(25); // hRatio_ITSsa_TOF[icent]->SetMarkerColor(2); hRatio_ITSsa_TOF[icent]->Draw("same"); } /* legend */ TLegend *legendRatio = curpad->BuildLegend(); legendRatio->SetFillStyle(0); legendRatio->SetFillColor(0); legendRatio->DeleteEntry(); CombineSpectra(hCombined[icent], &spectraArray); hCombined[icent]->SetFillStyle(0); hCombined[icent]->SetFillColor(kOrange + 1); hCombined[icent]->SetMarkerColor(kOrange+1); hCombined[icent]->SetMarkerStyle(24); hCombined[icent]->SetLineColor(kOrange+1); hCombined[icent]->SetLineWidth(2); hCombined[icent]->SetMarkerSize(0); // hCombined[icent]->DrawCopy("same,E2"); // pCombined[icent]->DrawCopy("same"); if (cent == -1) cCanvas->cd(icent + 1); else cCanvas->cd(); // hCombined[icent]->Draw("same, E2"); cCanvasCombined->cd(); if (cent == -1 && icent != 0) hCombined[icent]->Draw("E2,same"); else hCombined[icent]->Draw("E2"); // cCanvasCombined->DrawClonePad(); if (hITSsa) { hITSsa->DrawCopy("same"); } if (hITSTPC) { hITSTPC->DrawCopy("same"); } if (hTPCTOF) { hTPCTOF->DrawCopy("same"); } if (hTOF) { hTOF->DrawCopy("same"); } if (hHydro) { ;//hHydro->Draw("c,same"); } if (cent == -1) cCanvasRatioComb->cd(icent + 1); else cCanvasRatioComb->cd(); // hCombined[icent]->Draw("same, E2"); TH1 *hhr = HistoUtils_smartratio(hCombined[icent], hCombined[icent]); hhr->SetMaximum(1.25); hhr->SetMinimum(0.75); hhr->SetFillStyle(3001); hhr->SetTitle("combined error;p_{T} (GeV/c);ratio wrt. combined"); hhr->Draw("e2"); if (hITSsa) { hhr = HistoUtils_smartratio(hITSsa, hCombined[icent]); hhr->SetLineColor(1); hhr->SetLineWidth(2); hhr->Draw("e2,same"); } if (hITSTPC) { hhr = HistoUtils_smartratio(hITSTPC, hCombined[icent]); hhr->SetLineColor(1); hhr->SetLineWidth(2); hhr->Draw("e2,same"); } if (hTPCTOF) { hhr = HistoUtils_smartratio(hTPCTOF, hCombined[icent]); hhr->SetLineColor(8); hhr->SetLineWidth(2); hhr->Draw("e2,same"); } if (hTOF) { hhr = HistoUtils_smartratio(hTOF, hCombined[icent]); hhr->SetLineColor(4); hhr->SetLineWidth(2); hhr->Draw("e2,same"); } if (hHydro) { ;//hHydro->Draw("c,same"); } if (!fFitFunc) continue; // gCombined[icent]->Draw("p*"); // gCombined[icent]->Fit(fFitFunc, "0q", "", 0.5, 1.0); // gCombined[icent]->Fit(fFitFunc, "0q", "", 0.2, 1.5); hCombined[icent]->Fit(fFitFunc, "0q", "", 0., 5.); fFitFunc->DrawCopy("same"); printf("cent = %d, dNdy = %f +- %f\n", icent, fFitFunc->GetParameter(0), fFitFunc->GetParError(0)); if (cent == -1) cCanvas->cd(icent + 1); else cCanvas->cd(); fFitFunc->DrawCopy("same"); if (cent == -1) cCanvasRatioFit->cd(icent + 1); else cCanvasRatioFit->cd(); if (!ratio) TH1D *hAreaRatioFit = new TH1D(Form("hAreaRatioFit_%d", icent), Form("%s (%s);p_{T} (GeV/c);ratio wrt. fit;", partChargeName[part][charge], centName[icent]), 100, 0., 5.); else TH1D *hAreaRatioFit = new TH1D(Form("hAreaRatioFit_%d", icent), Form("%s (%s);p_{T} (GeV/c);ratio wrt. fit;", "generic ratio", centName[icent]), 100, 0., 5.); hAreaRatioFit->SetMaximum(1.5); hAreaRatioFit->SetMinimum(0.5); hAreaRatioFit->Draw(); legend->Draw("same"); if (hITSsa) { hITSsa->Divide(fFitFunc); hITSsa->DrawCopy("same"); } if (hITSTPC) { hITSTPC->Divide(fFitFunc); hITSTPC->DrawCopy("same"); } if (hTPCTOF) { hTPCTOF->Divide(fFitFunc); hTPCTOF->DrawCopy("same"); } if (hTOF) { hTOF->Divide(fFitFunc); hTOF->DrawCopy("same"); } } }
void view() { TFile* f = TFile::Open("result.root"); int signalColorTable[20], backgroundColorTable[20]; for ( int i=0; i<20; ++i ) { signalColorTable[i] = kAzure+10-i; backgroundColorTable[i] = kOrange+10-i; } TList* signalPlots = makePlots((TDirectory*)f->Get("MC_Signal_EMEM"), signalColorTable); TList* backgroundPlots = makePlots((TDirectory*)f->Get("MC_Background_EMEM"), backgroundColorTable, true); if ( signalPlots == 0 || backgroundPlots == 0 ) return; const int nPlots = signalPlots->GetSize(); for ( int i=0; i<nPlots; ++i ) { THStack* hSignal = (THStack*)signalPlots->At(i); THStack* hBackground = (THStack*)backgroundPlots->At(i); TString histName = hSignal->GetName(); bool doLog = histName.Contains("Pt");// || histName.Contains("RelIso"); TCanvas* c = new TCanvas(TString("c")+hSignal->GetName(), hSignal->GetTitle(), 1200, 600); TPad* pad; c->Divide(2,1); TString xTitle, yTitle; pad = (TPad*)c->cd(1); if ( doLog ) pad->SetLogy(); pad->SetBorderSize(0); pad->SetBorderMode(0); hBackground->Draw(); xTitle = ((TH1*)hBackground->GetHists()->At(0))->GetXaxis()->GetTitle(); yTitle = ((TH1*)hBackground->GetHists()->At(0))->GetYaxis()->GetTitle(); hBackground->GetXaxis()->SetTitle(xTitle); hBackground->GetYaxis()->SetTitle(yTitle); pad->BuildLegend(0.6, 0.6, 0.98, 0.98); pad = (TPad*)c->cd(2); if ( doLog ) pad->SetLogy(); pad->SetBorderSize(0); pad->SetBorderMode(0); hSignal->Draw("nostack"); xTitle = ((TH1*)hSignal->GetHists()->At(0))->GetXaxis()->GetTitle(); yTitle = ((TH1*)hSignal->GetHists()->At(0))->GetYaxis()->GetTitle(); hSignal->GetXaxis()->SetTitle(xTitle); hSignal->GetYaxis()->SetTitle(yTitle); pad->BuildLegend(0.6, 0.7, 0.98, 0.98); c->Print(TString(c->GetName())+".png"); } }