TH2* RootWriter::CreateTH2(Histogram2D* h) { const Axis& xax = h->GetAxisX(), yax = h->GetAxisY(); const int xchannels = xax.GetBinCount(); const int ychannels = yax.GetBinCount(); TH2* mat = new TH2F( h->GetName().c_str(), h->GetTitle().c_str(), xchannels, xax.GetLeft(), xax.GetRight(), ychannels, yax.GetLeft(), yax.GetRight() ); mat->SetOption( "colz" ); mat->SetContour( 64 ); TAxis* rxax = mat->GetXaxis(); rxax->SetTitle(xax.GetTitle().c_str()); rxax->SetTitleSize(0.03); rxax->SetLabelSize(0.03); TAxis* ryax = mat->GetYaxis(); ryax->SetTitle(yax.GetTitle().c_str()); ryax->SetTitleSize(0.03); ryax->SetLabelSize(0.03); ryax->SetTitleOffset(1.3); TAxis* zax = mat->GetZaxis(); zax->SetLabelSize(0.025); for(int iy=0; iy<ychannels+2; ++iy) for(int ix=0; ix<xchannels+2; ++ix) mat->SetBinContent(ix, iy, h->GetBinContent(ix, iy)); mat->SetEntries( h->GetEntries() ); return mat; }
//------------------------------------------------------------------------------ // SetAxis //------------------------------------------------------------------------------ void SetAxis(TH1* hist, TString xtitle, TString ytitle, Float_t size, Float_t offset) { TAxis* xaxis = (TAxis*)hist->GetXaxis(); TAxis* yaxis = (TAxis*)hist->GetYaxis(); xaxis->SetLabelFont(42); yaxis->SetLabelFont(42); xaxis->SetTitleFont(42); yaxis->SetTitleFont(42); xaxis->SetLabelOffset(0.025); yaxis->SetLabelOffset(0.025); xaxis->SetTitleOffset(1.4); yaxis->SetTitleOffset(offset); xaxis->SetLabelSize(size); yaxis->SetLabelSize(size); xaxis->SetTitleSize(size); yaxis->SetTitleSize(size); xaxis->SetTitle(xtitle); yaxis->SetTitle(ytitle); xaxis->SetNdivisions(505); yaxis->SetNdivisions(505); yaxis->CenterTitle(); gPad->GetFrame()->DrawClone(); gPad->RedrawAxis(); }
/* double residual_error( double error_data, double pdf ) { double chi2 = 0.; if ( pdf > 0 ) chi2 += 2. * ( pdf - error_data ); if ( error_data > 0 && pdf > 0 ) chi2=(error_data/pdf); //chi2 += 2. * error_data * log( error_data / error_pdf ); // return ( ( error_data >= pdf ) ? sqrt( chi2 ) : -sqrt( chi2 ) ); // return ( ( error_data >= pdf ) ? chi2 : chi2 ); return ( chi2 ); } */ TH1D* residualHist( const RooHist* rhist, const RooCurve* curve ) { double r = 0.2; double sr = 1. / r; // Grab info from the histogram. int n = rhist->GetN(); double* x = rhist->GetX(); double* y = rhist->GetY(); //rhist->Sumw2(); // double e; // Create residual histogram. double xMin = x[ 0 ]; double xMax = x[ n - 1 ]; TH1D* residuals_temp = new TH1D( "r", "", n, xMin, xMax ); double datum = 0.; double pdf = 0.; double error_data = 0.; // Fill the histogram. if ( curve ) for ( int bin = 0; bin < n; bin++ ) { datum = y[ bin ]; pdf = curve->Eval( x[ bin ] ); error_data = rhist->GetErrorY(bin); // error_pdf = curve->Eval( x[ bin ] ); residuals_temp->SetBinContent( bin + 1, residual( datum, pdf ) ); // residuals_temp->SetBinError ( bin + 1, residual_error( error_data, pdf ) ); residuals_temp->SetBinError ( bin + 1, error_data / pdf ); } residuals_temp->SetMinimum ( -2. ); residuals_temp->SetMaximum ( 2. ); residuals_temp->SetStats ( false ); residuals_temp->SetMarkerStyle( 8 ); residuals_temp->SetMarkerSize ( .8 ); TAxis* xAxis = residuals_temp->GetXaxis(); xAxis->SetTickLength ( sr * xAxis->GetTickLength() ); xAxis->SetLabelSize ( sr * xAxis->GetLabelSize() ); xAxis->SetTitleSize ( sr * xAxis->GetTitleSize() ); xAxis->SetLabelOffset( sr * xAxis->GetLabelOffset() ); TAxis* yAxis = residuals_temp->GetYaxis(); //yAxis->SetNdivisions ( 500 ); //yAxis->SetLabelSize ( 10*sr * yAxis->GetLabelSize() ); yAxis->SetLabelSize ( 2.5 * yAxis->GetLabelSize() ); yAxis->SetTitle(" (DATA - FIT) / FIT"); yAxis->SetTitleSize ( 0.09 ); yAxis->SetTitleOffset( 0.35 ); return residuals_temp; }
void showGraph(double canvasSizeX, double canvasSizeY, TGraph* graph, bool useLogScaleX, double xMin, double xMax, const std::string& xAxisTitle, double xAxisOffset, bool useLogScaleY, double yMin, double yMax, const std::string& yAxisTitle, double yAxisOffset, const std::string& outputFileName) { TCanvas* canvas = new TCanvas("canvas", "canvas", canvasSizeX, canvasSizeY); canvas->SetFillColor(10); canvas->SetBorderSize(2); canvas->SetTopMargin(0.05); canvas->SetLeftMargin(0.19); canvas->SetBottomMargin(0.19); canvas->SetRightMargin(0.05); canvas->SetLogx(useLogScaleX); canvas->SetLogy(useLogScaleY); TH1* dummyHistogram = new TH1D("dummyHistogram", "dummyHistogram", 10, xMin, xMax); dummyHistogram->SetTitle(""); dummyHistogram->SetStats(false); dummyHistogram->SetMinimum(yMin); dummyHistogram->SetMaximum(yMax); dummyHistogram->Draw("axis"); TAxis* xAxis = dummyHistogram->GetXaxis(); xAxis->SetTitle(xAxisTitle.data()); xAxis->SetTitleOffset(xAxisOffset); xAxis->SetTitleSize(0.065); xAxis->SetLabelSize(0.055); xAxis->SetLabelOffset(0.01); xAxis->SetTickLength(0.055); xAxis->SetNdivisions(505); TAxis* yAxis = dummyHistogram->GetYaxis(); yAxis->SetTitle(yAxisTitle.data()); yAxis->SetTitleOffset(yAxisOffset); yAxis->SetTitleSize(0.070); yAxis->SetLabelSize(0.055); yAxis->SetLabelOffset(0.01); yAxis->SetTickLength(0.055); yAxis->SetNdivisions(505); graph->SetMarkerColor(1); graph->SetLineColor(1); graph->Draw("p"); canvas->Update(); size_t idx = outputFileName.find_last_of('.'); std::string outputFileName_plot = std::string(outputFileName, 0, idx); if ( useLogScaleY ) outputFileName_plot.append("_log"); else outputFileName_plot.append("_linear"); if ( idx != std::string::npos ) canvas->Print(std::string(outputFileName_plot).append(std::string(outputFileName, idx)).data()); canvas->Print(std::string(outputFileName_plot).append(".png").data()); //canvas->Print(std::string(outputFileName_plot).append(".pdf").data()); //canvas->Print(std::string(outputFileName_plot).append(".root").data()); delete dummyHistogram; delete canvas; }
void showHistograms(double canvasSizeX, double canvasSizeY, TH1* histogram, double xMin, double xMax, const std::string& xAxisTitle, double xAxisOffset, bool useLogScale, double yMin, double yMax, const std::string& yAxisTitle, double yAxisOffset, const std::string& outputFileName) { TCanvas* canvas = new TCanvas("canvas", "canvas", canvasSizeX, canvasSizeY); canvas->SetFillColor(10); canvas->SetBorderSize(2); canvas->SetLeftMargin(0.15); canvas->SetBottomMargin(0.15); canvas->SetLogy(useLogScale); histogram->SetTitle(""); histogram->SetStats(true); histogram->SetMinimum(yMin); histogram->SetMaximum(yMax); histogram->SetLineColor(1); histogram->SetLineWidth(2); histogram->SetMarkerColor(1); histogram->SetMarkerStyle(20); histogram->SetMarkerSize(1.5); histogram->Draw("hist"); TAxis* xAxis = histogram->GetXaxis(); xAxis->SetRangeUser(xMin, xMax); xAxis->SetTitle(xAxisTitle.data()); xAxis->SetTitleSize(0.060); xAxis->SetTitleOffset(xAxisOffset); xAxis->SetLabelSize(0.050); xAxis->SetNdivisions(505); TAxis* yAxis = histogram->GetYaxis(); yAxis->SetTitle(yAxisTitle.data()); yAxis->SetTitleSize(0.060); yAxis->SetTitleOffset(yAxisOffset); yAxis->SetLabelSize(0.050); yAxis->SetNdivisions(505); canvas->Update(); size_t idx = outputFileName.find_last_of('.'); std::string outputFileName_plot = std::string(outputFileName, 0, idx); if ( useLogScale ) outputFileName_plot.append("_log"); else outputFileName_plot.append("_linear"); if ( idx != std::string::npos ) canvas->Print(std::string(outputFileName_plot).append(std::string(outputFileName, idx)).data()); //canvas->Print(std::string(outputFileName_plot).append(".png").data()); canvas->Print(std::string(outputFileName_plot).append(".pdf").data()); //canvas->Print(std::string(outputFileName_plot).append(".root").data()); delete canvas; }
void PrettyFonts(TH1D* h){ TAxis * x = h->GetXaxis(); TAxis * y = h->GetYaxis(); x->SetTitleFont(132); y->SetTitleFont(132); x->SetTitleSize(0.06); x->SetTitleOffset(1.05); //make the Title a little further from the axis y->SetTitleOffset(1.05); y->SetTitleSize(0.06); x->SetLabelFont(132); y->SetLabelFont(132); x->SetLabelSize(0.06); y->SetLabelSize(0.06); }
//========================================== //========================================== void plotPair(TH1F *h1,TH1F *h0 ) { h1->Draw(); // edit fonts/sizes TAxis *ax =h1->GetYaxis(); float ss=ax->GetTitleSize(); //printf("ss=%f\n",ss); ax->SetTitleSize(2*ss); ax->SetTitleOffset(0.5); ax =h1->GetXaxis(); ax->SetTitleSize(1.5*ss); ax->SetLabelSize(1.5*ss); ax->SetTitleOffset(0.7); // edit fonts/sizes DONE gPad->Update(); //scale hint1 to the pad coordinates Float_t rightmax = 1.1*h0->GetMaximum(); Float_t scale = gPad->GetUymax()/rightmax; h0->Scale(scale); h0->Draw("same"); //draw an axis on the right side TGaxis *axis = new TGaxis(gPad->GetUxmax(),gPad->GetUymin(), gPad->GetUxmax(), gPad->GetUymax(),0,rightmax,510,"-R"); int col=h0->GetLineColor(); axis->SetLineColor(col); axis->SetTextColor(col); axis->SetLabelColor(col); axis ->SetTitle("LCP yield"); axis->SetTitleSize(2*ss); axis->SetTitleOffset(.5); axis->Draw(); TPaveStats *st =( TPaveStats *)gPad->GetPrimitive("stats"); st->SetX1NDC(0.35); st->SetX2NDC(0.5); st->SetY1NDC(0.7); st->SetY2NDC(1.); }
THStack* DrawOne(TVirtualPad* p, Double_t yr, Bool_t top, TDirectory* dir, const char* name) { p->cd(); p->SetFillColor(0); p->SetFillStyle(0); p->SetLineColor(0); p->SetRightMargin(0.01); p->SetLeftMargin(0.12); p->SetGridx(); if (top) p->SetBottomMargin(0.001); else p->SetBottomMargin(0.2); if (top) p->SetTopMargin(0.02); else p->SetTopMargin(0.0001); THStack* s = static_cast<THStack*>(dir->Get(name)); s->Draw("nostack"); Double_t sc = (top ? 1-yr : yr); TAxis* ya = s->GetHistogram()->GetYaxis(); ya->SetLabelSize(1/sc*ya->GetLabelSize()); ya->SetTitleSize(1/sc*ya->GetTitleSize()); ya->SetTitleOffset(sc*(ya->GetTitleOffset()+.5)); ya->SetTitleFont(42); ya->SetLabelFont(42); TAxis* xa = s->GetHistogram()->GetXaxis(); xa->SetLabelSize(!top ? 1/yr*xa->GetLabelSize() : 0); xa->SetTitleSize(!top ? 1/yr*xa->GetTitleSize() : 0); xa->SetTitleOffset(yr*(xa->GetTitleOffset()+2)); xa->SetTitleFont(42); xa->SetLabelFont(42); p->Modified(); p->Update(); p->cd(); return s; }
void SetAxisLabels(TH1& hist, char* xtitle, char* ytitle="", double xoffset=1.1, double yoffset=1.4) { TAxis* x = hist.GetXaxis(); TAxis* y = hist.GetYaxis(); x->SetTitle(xtitle); x->SetTitleSize(0.06); x->SetLabelSize(0.05); x->SetTitleOffset(xoffset); x->SetNdivisions(505); y->SetTitle(ytitle); y->SetTitleSize(0.06); y->SetLabelSize(0.05); y->SetTitleOffset(yoffset); y->SetNoExponent(); hist.SetLineWidth(2); hist.SetMarkerStyle(20); std::stringstream str; str << "Events / " << (int) lumi << " pb^{-1} "; std::string defYtitle = str.str(); if(ytitle=="") y->SetTitle( defYtitle.c_str() ); }
//------------------------------------------------------------------------------ // SetAxis //------------------------------------------------------------------------------ void SetAxis(TH1* hist, TString xtitle, TString ytitle, Float_t xoffset, Float_t yoffset) { gPad->cd(); gPad->Update(); // See https://root.cern.ch/doc/master/classTAttText.html#T4 Float_t padw = gPad->XtoPixel(gPad->GetX2()); Float_t padh = gPad->YtoPixel(gPad->GetY1()); Float_t size = (padw < padh) ? padw : padh; size = 20. / size; // Like this label size is always 20 pixels TAxis* xaxis = (TAxis*)hist->GetXaxis(); TAxis* yaxis = (TAxis*)hist->GetYaxis(); xaxis->SetTitleOffset(xoffset); yaxis->SetTitleOffset(yoffset); xaxis->SetLabelSize(size); yaxis->SetLabelSize(size); xaxis->SetTitleSize(size); yaxis->SetTitleSize(size); xaxis->SetTitle(xtitle); yaxis->SetTitle(ytitle); yaxis->CenterTitle(); gPad->GetFrame()->DrawClone(); gPad->RedrawAxis(); }
TH1p RootWriter::CreateTH1(Histogram1D* h) { const Axis& xax = h->GetAxisX(); const int channels = xax.GetBinCount(); TH1* r = new TH1I( h->GetName().c_str(), h->GetTitle().c_str(), channels, xax.GetLeft(), xax.GetRight() ); TAxis* rxax = r->GetXaxis(); rxax->SetTitle(xax.GetTitle().c_str()); rxax->SetTitleSize(0.03); rxax->SetLabelSize(0.03); TAxis* ryax = r->GetYaxis(); ryax->SetLabelSize(0.03); for(int i=0; i<channels+2; ++i) r->SetBinContent(i, h->GetBinContent(i)); r->SetEntries( h->GetEntries() ); return r; }
void LEPStyle::setHist() { _hist = new TH1F( "bidon", "bidon", 100, _xmin, _xmax ); _ax = _hist->GetXaxis(); _ay = _hist->GetYaxis(); _ax->SetTitle(_title); _ax->SetNdivisions(_ndivx); if( _logX ) { _ax->SetMoreLogLabels(); } _ax->SetLabelSize(_scale*0.060); // _ax->SetLabelOffset(_scale*0.007); _ax->SetTitleSize(_scale*0.070); _ax->SetTitleOffset(0.9); _ax->CenterTitle( _centerTitle ); _ay->SetNdivisions(0); }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // drawFigure7 // // parameter = "dg0" // parameter = "lam0" // parameter = "dk0" // //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void drawFigure7(TString parameter = "dk0") { gInterpreter->ExecuteMacro("WZPaperStyle.C"); gSystem->mkdir("pdf", kTRUE); gSystem->mkdir("png", kTRUE); // Individual settings //---------------------------------------------------------------------------- if (parameter.Contains("dg0")) { xtitle = "#Delta#kappa^{Z}"; ytitle = "#lambda"; xmin = -0.5; xmax = 0.5; ymin = -0.039; ymax = 0.053; } else if (parameter.Contains("lam0")) { xtitle = "#Delta#kappa^{Z}"; ytitle = "#Deltag^{Z}_{1}"; xmin = -0.53; xmax = 0.53; ymin = -0.05; ymax = 0.09; } else if (parameter.Contains("dk0")) { xtitle = "#Deltag^{Z}_{1}"; ytitle = "#lambda"; xmin = -0.059; xmax = 0.059; ymin = -0.037; ymax = 0.052; } // Read the input file //---------------------------------------------------------------------------- TFile* file = new TFile("rootfiles/contours_" + parameter + "_2Dpol2.root", "read"); TGraph* cont_exp_68 = (TGraph*)file->Get("cont_exp_68"); TGraph* cont_exp_95 = (TGraph*)file->Get("cont_exp_95"); TGraph* cont_exp_99 = (TGraph*)file->Get("cont_exp_99"); TGraph* cont_obs_95 = (TGraph*)file->Get("cont_obs_95"); TGraph* bestFit = (TGraph*)file->Get("bestFit"); bestFit->SetMarkerSize(1.5); bestFit->SetMarkerStyle(34); TGraph* g_large = new TGraph(2); g_large->SetPoint(0, -1.0, 1.0); g_large->SetPoint(1, 1.0, 1.0); // Draw //---------------------------------------------------------------------------- TCanvas* canvas = new TCanvas("canvas", "canvas"); TMultiGraph* mg = new TMultiGraph(); mg->Add(cont_exp_68); mg->Add(cont_exp_95); mg->Add(cont_exp_99); mg->Add(cont_obs_95); mg->Add(bestFit, "p"); mg->Add(g_large); mg->Draw("ac"); mg->SetMinimum(ymin); mg->SetMaximum(ymax); // Axis labels //---------------------------------------------------------------------------- TAxis* xaxis = mg->GetXaxis(); TAxis* yaxis = mg->GetYaxis(); xaxis->SetLabelFont ( 42); xaxis->SetLabelOffset( 0.01); xaxis->SetLabelSize ( 0.05); xaxis->SetNdivisions ( 505); xaxis->SetTitle (xtitle); xaxis->SetTitleFont ( 42); xaxis->SetTitleOffset( 1.2); xaxis->SetTitleSize ( 0.05); xaxis->SetLimits(xmin, xmax); yaxis->SetLabelFont ( 42); yaxis->SetLabelOffset( 0.01); yaxis->SetLabelSize ( 0.05); yaxis->SetNdivisions ( 505); yaxis->SetTitle (ytitle); yaxis->SetTitleFont ( 42); yaxis->SetTitleOffset( 1.6); yaxis->SetTitleSize ( 0.05); canvas->Modified(); // Legend //---------------------------------------------------------------------------- Double_t x0 = 0.580; Double_t y0 = 0.755; DrawTLegend(x0 - 0.36, y0 + 2.*(_yoffset+0.001), (TH1F*)cont_exp_68, " Expected 68% CL", "l"); DrawTLegend(x0 - 0.36, y0 + 1.*(_yoffset+0.001), (TH1F*)cont_exp_95, " Expected 95% CL", "l"); DrawTLegend(x0, y0 + 2.*(_yoffset+0.001), (TH1F*)cont_exp_99, " Expected 99% CL", "l"); DrawTLegend(x0, y0 + 1.*(_yoffset+0.001), (TH1F*)cont_obs_95, " Observed 95% CL", "l"); DrawTLegend(x0, y0, (TH1F*)bestFit, " Best fit", "p"); // Finish it //---------------------------------------------------------------------------- DrawTLatex(_cmsTextFont, 0.190, 0.94, 0.055, 11, "CMS"); // DrawTLatex(_extraTextFont, 0.315, 0.94, 0.030, 11, "Preliminary"); DrawTLatex(_lumiTextFont, 0.940, 0.94, 0.040, 31, "19.6 fb^{-1} (8 TeV)"); canvas->SaveAs("pdf/lZ_dkg_2dlimit_" + parameter + "_2Dpol2_deltaNLL.pdf"); canvas->SaveAs("png/lZ_dkg_2dlimit_" + parameter + "_2Dpol2_deltaNLL.png"); }
void makeTable( int num ) { // TString rootfilename; // if(num<9) rootfilename = Form("root_electroneff_%d_eta_et.root", num); // else if(num<17) rootfilename = Form("root_electroneff_10%d_eta_et.root", num-8); // else if(num<25) rootfilename = Form("root_electroneff_20%d_eta_et.root", num-16); // else if(num<33) rootfilename = Form("root_electroneff_30%d_eta_et.root", num-24); // else rootfilename = Form("root_electroneff_40%d_eta_et.root", num-32); TString rootfilename; if(num==0) rootfilename = "root_electroneff_WenuOff_eta_et.root"; if(num==1) rootfilename = "root_electroneff_WenuOn_eta_et.root"; if(num==2) rootfilename = "root_electroneff_ZeeOff_eta_et.root"; if(num==3) rootfilename = "root_electroneff_ZeeOn_eta_et.root"; TString pname = ""; if(num==0) pname = "WenuOff-"; if(num==1) pname = "WenuOn-"; if(num==2) pname = "ZeeOff-"; if(num==3) pname = "ZeeOn-"; // if(num==1) pname = "WenuSelection-A1"; // if(num==2) pname = "WenuSelection-A2"; // if(num==3) pname = "WenuSelection-A3"; // if(num==4) pname = "WenuSelection-B1"; // if(num==5) pname = "WenuSelection-B2"; // if(num==6) pname = "WenuSelection-B3"; // if(num==7) pname = "ZeeSelection-A"; // if(num==8) pname = "ZeeSelection-B"; // if(num==9) pname = "WenuSelection-A1-noId-"; // if(num==10) pname = "WenuSelection-A2-noId-"; // if(num==11) pname = "WenuSelection-A3-noId-"; // if(num==12) pname = "WenuSelection-B1-noId-"; // if(num==13) pname = "WenuSelection-B2-noId-"; // if(num==14) pname = "WenuSelection-B3-noId-"; // if(num==15) pname = "ZeeSelection-A-noId-"; // if(num==16) pname = "ZeeSelection-B-noId-"; // if(num==17) pname = "WenuSelection-A1-noTrackIso-"; // if(num==18) pname = "WenuSelection-A2-noTrackIso-"; // if(num==19) pname = "WenuSelection-A3-noTrackIso-"; // if(num==20) pname = "WenuSelection-B1-noTrackIso-"; // if(num==21) pname = "WenuSelection-B2-noTrackIso-"; // if(num==22) pname = "WenuSelection-B3-noTrackIso-"; // if(num==23) pname = "ZeeSelection-A-noTrackIso-"; // if(num==24) pname = "ZeeSelection-B-noTrackIso-"; // if(num==25) pname = "WenuSelection-A1-noIso-"; // if(num==26) pname = "WenuSelection-A2-noIso-"; // if(num==27) pname = "WenuSelection-A3-noIso-"; // if(num==28) pname = "WenuSelection-B1-noIso-"; // if(num==29) pname = "WenuSelection-B2-noIso-"; // if(num==30) pname = "WenuSelection-B3-noIso-"; // if(num==31) pname = "ZeeSelection-A-noIso-"; // if(num==32) pname = "ZeeSelection-B-noIso-"; // if(num==33) pname = "WenuSelection-A1-noSigmaEtaEta-"; // if(num==34) pname = "WenuSelection-A2-noSigmaEtaEta-"; // if(num==35) pname = "WenuSelection-A3-noSigmaEtaEta-"; // if(num==36) pname = "WenuSelection-B1-noSigmaEtaEta-"; // if(num==37) pname = "WenuSelection-B2-noSigmaEtaEta-"; // if(num==38) pname = "WenuSelection-B3-noSigmaEtaEta-"; // if(num==39) pname = "ZeeSelection-A-noSigmaEtaEta-"; // if(num==40) pname = "ZeeSelection-B-noSigmaEtaEta-"; TString label = TString("electroneff-") + pname; gROOT->ProcessLine(".L tdrstyleNew.C"); setTDRStyle(); tdrStyle->SetPadLeftMargin(0.16); tdrStyle->SetPadRightMargin(0.1); tdrStyle->SetPadTopMargin(0.08); tdrStyle->SetLegendBorderSize(0); TFile* myhistos = new TFile(rootfilename); TH1F* h0 = (TH1F*) myhistos->Get("sbs_eff_EtDet"); TH1F* h1 = (TH1F*) myhistos->Get("sbs_eff_EtaDet"); TH2F* h2 = (TH2F*) myhistos->Get("sbs_eff_EtDet_EtaDet"); // TH1F *base = (TH1F*)f.Get("base"); // TH1F *destination = (TH1F*)f.Get("destination"); // TGraphAsymmErrors *g1 = new TGraphAsymmErrors(); // g1->BayesDivide(destination, base, ""); // g1->GetYaxis()->SetRangeUser(0.5, 1.05); h0->SetMarkerStyle(20); h1->SetMarkerStyle(20); ScaleTo10pb( *h0 ); ScaleTo10pb( *h1 ); // TH1F* h01 = (TH1F*) myhistos->Get("fit_eff_Et"); // TH1F* h11 = (TH1F*) myhistos->Get("fit_eff_Eta"); // h01->SetMarkerColor(4); // h01->SetLineColor(4); // h11->SetMarkerColor(4); // h11->SetLineColor(4); // ScaleTo10pb( *h01 ); // ScaleTo10pb( *h11 ); TH1F* h02 = (TH1F*) myhistos->Get("truth_eff_EtDet"); TH1F* h12 = (TH1F*) myhistos->Get("truth_eff_EtaDet"); h02->SetMarkerColor(2); h02->SetLineColor(2); h02->SetMarkerStyle(24); h12->SetMarkerColor(2); h12->SetLineColor(2); h12->SetMarkerStyle(24); ScaleTo10pb( *h02 ); ScaleTo10pb( *h12 ); TAxis* xaxis = h0->GetXaxis(); TAxis* yaxis = h0->GetYaxis(); xaxis->SetTitle("E_{T} (GeV)"); xaxis->SetTitleSize(0.04); xaxis->SetTitleOffset(1.3); xaxis->SetNdivisions(505); yaxis->SetTitle("Efficiency "); yaxis->SetTitleSize(0.04); yaxis->SetTitleOffset(1.6); h0->SetMinimum(0.5); h0->SetMaximum(1.1); TAxis* xaxis = h1->GetXaxis(); TAxis* yaxis = h1->GetYaxis(); xaxis->SetTitle("#eta"); xaxis->SetTitleSize(0.04); xaxis->SetTitleOffset(1.3); xaxis->SetNdivisions(505); yaxis->SetTitle("Efficiency "); yaxis->SetTitleSize(0.04); yaxis->SetTitleOffset(1.6); h1->SetMinimum(0.5); h1->SetMaximum(1.1); TAxis* xaxis = h2->GetXaxis(); TAxis* yaxis = h2->GetYaxis(); xaxis->SetTitle("E_{T} (GeV)"); xaxis->SetTitleSize(0.04); xaxis->SetTitleOffset(1.3); xaxis->SetNdivisions(505); yaxis->SetTitle("#eta "); yaxis->SetTitleSize(0.04); yaxis->SetTitleOffset(1.7); double l1 = 0.2, l2 =0.3; double p1 = 0.5; if(num==0) p1 = 0.82; if(num==2) p1 = 0.4; TCanvas* can0 = new TCanvas("can0", "", 500, 500); gStyle->SetOptStat(0); h0->Draw("e"); // h01->Draw("esame"); h02->Draw("esame"); leg_hist = new TLegend(0.3, l1, 0.8, l2); leg_hist->AddEntry( h0,"Sideband subtracted","P"); // leg_hist->AddEntry( h01,"fit","le"); leg_hist->AddEntry( h02,"Monte Carlo truth","P"); leg_hist->SetFillColor(0); leg_hist->SetMargin(0.15); leg_hist->Draw(); TLatex* CMS = new TLatex(); CMS->SetTextAlign(12); CMS->SetTextSize(0.04); CMS->SetNDC(); CMS->DrawLatex(0.25, p1, "CMS Preliminary, #intLdt = 10 pb^{-1}"); can0->Update(); can0->SaveAs( label+TString("et.eps") ); can0->SaveAs( label+TString("et.gif") ); can0->SaveAs( label+TString("et.root") ); can0->SaveAs( label+TString("et.pdf") ); p1 = 0.5; if(num==0 || num==2) p1 = 0.82; TCanvas* can1 = new TCanvas("can1", "", 500, 500); gStyle->SetOptStat(0); h1->Draw("e"); // h11->Draw("esame"); h12->Draw("esame"); leg_hist = new TLegend(0.3,l1,0.8,l2); leg_hist->AddEntry( h1,"Sideband subtracted","P"); // leg_hist->AddEntry( h11,"fit","le"); leg_hist->AddEntry( h12,"Monte Carlo truth","P"); leg_hist->SetFillColor(0); leg_hist->SetMargin(0.15); leg_hist->Draw(); TLatex* CMS2 = new TLatex(); CMS2->SetTextAlign(12); CMS2->SetTextSize(0.04); CMS2->SetNDC(); CMS2->DrawLatex(0.25,p1,"CMS Preliminary, #intLdt = 10 pb^{-1}"); can1->Update(); can1->SaveAs( label+TString("eta.eps") ); can1->SaveAs( label+TString("eta.gif") ); can1->SaveAs( label+TString("eta.root") ); can1->SaveAs( label+TString("eta.pdf") ); tdrStyle->SetPadRightMargin(0.2); TCanvas* can2 = new TCanvas("can2", "", 500, 500); gStyle->SetOptStat(0); h2->Draw("colz"); can2->SaveAs( label+TString("et_eta.eps") ); can2->SaveAs( label+TString("et_eta.gif") ); can2->SaveAs( label+TString("et_eta.root") ); can2->SaveAs( label+TString("et_eta.pdf") ); delete can0; delete can1; delete can2; delete myhistos; }
/* * Main Function */ void ratio() { gStyle->SetFrameLineWidth(1); //Number of Measurements const int NUM = 2; //Measurements and uncertainties // mean, -stat, +stat, -syst, +syst double m[NUM][5] = { 0.98, 0.10, 0.10, 0.14, 0.14, //1.33, 0.32, 0.32, 0.22, 0.22 1.26, 0.37, 0.37, 0.46, 0.46 }; //Theory and uncertainties // mean, -uncert, +uncert double t[NUM][3] = { 1.0, 0.114, 0.114, 1.0, 0.111, 0.111 }; // label text, sub-label text // Note: TString does not work, b/c one cannot pass an array of TStrings // as an argument to a function char label[NUM][2][100] = { "Z#gamma#gamma", "", //"W#gamma#gamma", "" "W#gamma#gamma (#mu)", "" }; // format: // # color, bgColor, fontSytle, linewidth, markerStyle int aux[NUM][5] = { 1, 10, 42, 2, 20, 1, 10, 42, 2, 20 }; // determning the x size of the plot double lowX = LOW_X; double uppX = UPP_X; TH2F* lft = new TH2F("lft", "", 50, lowX, uppX, 1, 0.0, 1.0); // height = NUM*unitHeight + 2*spacers + 1*bottomMargin + 0.5*topMargin const double unitHeight = 50.0; // even number const double height = (double(NUM)+2.0)*unitHeight+100.0+30.0; // how much to step each time to cover the vertical range of the histo in // exactly NUM+2 steps const double vstep = unitHeight/(height-100.0-30.0); const double width = 800.0; printf("Canvas: width=%d, height=%d\n", TMath::Nint(width), TMath::Nint(height)); printf("Y-step = %6.4f\n", vstep); // Set canvas and margins TCanvas* canvas = new TCanvas("canvas", "canvas", 200, 0, TMath::Nint(width), TMath::Nint(height)); canvas->SetFillColor(10); canvas->SetRightMargin(20.0/width); canvas->SetLeftMargin(20.0/width); canvas->SetBottomMargin(56.0/height); canvas->SetTopMargin(30.0/height); canvas->Draw(); canvas->cd(); //printf("TopMargin : %6.4f\n", canvas->GetTopMargin()); //printf("BottomMargin: %6.4f\n", canvas->GetBottomMargin()); TAxis* xaxis = lft->GetXaxis(); TAxis* yaxis = lft->GetYaxis(); xaxis->CenterTitle(kTRUE); xaxis->SetTitleSize(0.07); xaxis->SetTitleFont(62); xaxis->SetTitleOffset(1.1); xaxis->SetNdivisions(6,5,0); xaxis->SetLabelOffset(0.01); xaxis->SetLabelSize(0.05); xaxis->SetLabelFont(42); yaxis->SetLabelSize(0.0); yaxis->SetNdivisions(-1); lft->SetXTitle("Cross Section Ratio #sigma_{Exp} / #sigma_{Theory}"); lft->SetYTitle(""); lft->SetStats(kFALSE); lft->SetTitle(""); lft->Draw(); // Draw Theory Bands for (int i=0; i!=NUM; ++i) { drawTheory(i, t[i][0], t[i][1], t[i][2], vstep); } canvas->RedrawAxis(); gPad->RedrawAxis(); // Draw Measurements for (int i=0; i!=NUM; ++i) { drawMeasurement(i, m[i], label[i], aux[i], vstep, lft, canvas); } //Set CMS Preliminary marker int iPeriod=2; // 8 TeV int iPos = 0; // CMS_lumi( canvas, iPeriod, iPos ); // Print //canvas->Print("Ratio_CrossSec_Exp_Theory.pdf"); canvas->Draw(); }
void showGraphs(double canvasSizeX, double canvasSizeY, TGraph* graph1, const std::string& legendEntry1, TGraph* graph2, const std::string& legendEntry2, TGraph* graph3, const std::string& legendEntry3, TGraph* graph4, const std::string& legendEntry4, TGraph* graph5, const std::string& legendEntry5, TGraph* graph6, const std::string& legendEntry6, int colors[], int markerStyles[], double legendTextSize, double legendPosX, double legendPosY, double legendSizeX, double legendSizeY, std::vector<std::string>& labelTextLines, double labelTextSize, double labelPosX, double labelPosY, double labelSizeX, double labelSizeY, double xMin, double xMax, const std::string& xAxisTitle, double xAxisOffset, double yMin, double yMax, const std::string& yAxisTitle, double yAxisOffset, const std::string& outputFileName) { TCanvas* canvas = new TCanvas("canvas", "canvas", canvasSizeX, canvasSizeY); canvas->SetFillColor(10); canvas->SetBorderSize(2); canvas->SetLeftMargin(0.14); canvas->SetBottomMargin(0.12); TH1* dummyHistogram = new TH1D("dummyHistogram", "dummyHistogram", 100, xMin, xMax); dummyHistogram->SetTitle(""); dummyHistogram->SetStats(false); dummyHistogram->SetMinimum(yMin); dummyHistogram->SetMaximum(yMax); TAxis* xAxis = dummyHistogram->GetXaxis(); xAxis->SetTitle(xAxisTitle.data()); xAxis->SetTitleSize(0.045); xAxis->SetTitleOffset(xAxisOffset); TAxis* yAxis = dummyHistogram->GetYaxis(); yAxis->SetTitle(yAxisTitle.data()); yAxis->SetTitleSize(0.045); yAxis->SetTitleOffset(yAxisOffset); dummyHistogram->Draw("axis"); graph1->SetLineColor(colors[0]); graph1->SetLineWidth(2); graph1->SetMarkerColor(colors[0]); graph1->SetMarkerStyle(markerStyles[0]); graph1->SetMarkerSize(2); graph1->Draw("p"); if ( graph2 ) { graph2->SetLineColor(colors[1]); graph2->SetLineWidth(2); graph2->SetMarkerColor(colors[1]); graph2->SetMarkerStyle(markerStyles[1]); graph2->SetMarkerSize(2); graph2->Draw("p"); } if ( graph3 ) { graph3->SetLineColor(colors[2]); graph3->SetLineWidth(2); graph3->SetMarkerColor(colors[2]); graph3->SetMarkerStyle(markerStyles[2]); graph3->SetMarkerSize(2); graph3->Draw("p"); } if ( graph4 ) { graph4->SetLineColor(colors[3]); graph4->SetLineWidth(2); graph4->SetMarkerColor(colors[3]); graph4->SetMarkerStyle(markerStyles[3]); graph4->SetMarkerSize(2); graph4->Draw("p"); } if ( graph5 ) { graph5->SetLineColor(colors[4]); graph5->SetLineWidth(2); graph5->SetMarkerColor(colors[4]); graph5->SetMarkerStyle(markerStyles[4]); graph5->SetMarkerSize(2); graph5->Draw("p"); } if ( graph6 ) { graph6->SetLineColor(colors[5]); graph6->SetLineWidth(2); graph6->SetMarkerColor(colors[5]); graph6->SetMarkerStyle(markerStyles[5]); graph6->SetMarkerSize(2); graph6->Draw("p"); } TLegend* legend = new TLegend(legendPosX, legendPosY, legendPosX + legendSizeX, legendPosY + legendSizeY, "", "brNDC"); legend->SetBorderSize(0); legend->SetFillColor(0); legend->SetTextSize(legendTextSize); legend->AddEntry(graph1, legendEntry1.data(), "p"); if ( graph2 ) legend->AddEntry(graph2, legendEntry2.data(), "p"); if ( graph3 ) legend->AddEntry(graph3, legendEntry3.data(), "p"); if ( graph4 ) legend->AddEntry(graph4, legendEntry4.data(), "p"); if ( graph5 ) legend->AddEntry(graph5, legendEntry5.data(), "p"); if ( graph6 ) legend->AddEntry(graph6, legendEntry6.data(), "p"); legend->Draw(); TPaveText* label = 0; if ( labelTextLines.size() > 0 ) { label = new TPaveText(labelPosX, labelPosY, labelPosX + labelSizeX, labelPosY + labelSizeY, "brNDC"); for ( std::vector<std::string>::const_iterator labelTextLine = labelTextLines.begin(); labelTextLine != labelTextLines.end(); ++labelTextLine ) { label->AddText(labelTextLine->data()); } label->SetFillColor(10); label->SetBorderSize(0); label->SetTextColor(1); label->SetTextAlign(12); label->SetTextSize(labelTextSize); label->Draw(); } canvas->Update(); std::string outputFileName_plot = "plots/"; size_t idx = outputFileName.find_last_of('.'); outputFileName_plot.append(std::string(outputFileName, 0, idx)); if ( idx != std::string::npos ) canvas->Print(std::string(outputFileName_plot).append(std::string(outputFileName, idx)).data()); canvas->Print(std::string(outputFileName_plot).append(".png").data()); canvas->Print(std::string(outputFileName_plot).append(".pdf").data()); delete dummyHistogram; delete label; delete legend; delete canvas; }
void showHistograms(double canvasSizeX, double canvasSizeY, TH1* histogram1, const std::string& legendEntry1, TH1* histogram2, const std::string& legendEntry2, TH1* histogram3, const std::string& legendEntry3, TH1* histogram4, const std::string& legendEntry4, double legendTextSize, double legendPosX, double legendPosY, double legendSizeX, double legendSizeY, std::vector<std::string>& labelTextLines, double labelTextSize, double labelPosX, double labelPosY, double labelSizeX, double labelSizeY, double xMin, double xMax, const std::string& xAxisTitle, double xAxisOffset, bool useLogScale, double yMin, double yMax, const std::string& yAxisTitle, double yAxisOffset, const std::string& outputFileName) { const unsigned numBinsMin_rebinned = 20; TH1* histogram1_rebinned = rebinHistogram(histogram1, numBinsMin_rebinned, xMin, xMax); TH1* histogram2_rebinned = rebinHistogram(histogram2, numBinsMin_rebinned, xMin, xMax); TH1* histogram3_rebinned = rebinHistogram(histogram3, numBinsMin_rebinned, xMin, xMax); TH1* histogram4_rebinned = rebinHistogram(histogram4, numBinsMin_rebinned, xMin, xMax); TCanvas* canvas = new TCanvas("canvas", "canvas", canvasSizeX, canvasSizeY); canvas->SetFillColor(10); canvas->SetBorderSize(2); canvas->SetLeftMargin(0.14); canvas->SetBottomMargin(0.12); canvas->SetLogy(useLogScale); histogram1_rebinned->SetTitle(""); histogram1_rebinned->SetStats(false); histogram1_rebinned->SetMinimum(yMin); histogram1_rebinned->SetMaximum(yMax); TAxis* xAxis = histogram1_rebinned->GetXaxis(); xAxis->SetTitle(xAxisTitle.data()); xAxis->SetTitleSize(0.045); xAxis->SetTitleOffset(xAxisOffset); if ( xMax > xMin ) { std::cout << "limiting x-axis range to " << xMin << ".." << xMax << std::endl; xAxis->SetRangeUser(xMin, xMax); } TAxis* yAxis = histogram1_rebinned->GetYaxis(); yAxis->SetTitle(yAxisTitle.data()); yAxis->SetTitleSize(0.045); yAxis->SetTitleOffset(yAxisOffset); int colors[4] = { 1, 2, 3, 4 }; int lineStyles[4] = { 1, 7, 4, 3 }; histogram1_rebinned->SetLineColor(colors[0]); histogram1_rebinned->SetLineWidth(2); histogram1_rebinned->SetLineStyle(lineStyles[0]); histogram1_rebinned->Draw("hist"); if ( histogram2_rebinned ) { histogram2_rebinned->SetLineColor(colors[1]); histogram2_rebinned->SetLineWidth(2); histogram2_rebinned->SetLineStyle(lineStyles[1]); histogram2_rebinned->Draw("histsame"); } if ( histogram3_rebinned ) { histogram3_rebinned->SetLineColor(colors[2]); histogram3_rebinned->SetLineWidth(2); histogram3_rebinned->SetLineStyle(lineStyles[2]); histogram3_rebinned->Draw("histsame"); } if ( histogram4_rebinned ) { histogram4_rebinned->SetLineColor(colors[3]); histogram4_rebinned->SetLineWidth(2); histogram4_rebinned->SetLineStyle(lineStyles[3]); histogram4_rebinned->Draw("histsame"); } TLegend* legend = new TLegend(legendPosX, legendPosY, legendPosX + legendSizeX, legendPosY + legendSizeY, "", "brNDC"); legend->SetBorderSize(0); legend->SetFillColor(0); legend->SetTextSize(legendTextSize); legend->AddEntry(histogram1_rebinned, legendEntry1.data(), "l"); if ( histogram2_rebinned ) legend->AddEntry(histogram2_rebinned, legendEntry2.data(), "l"); if ( histogram3_rebinned ) legend->AddEntry(histogram3_rebinned, legendEntry3.data(), "l"); if ( histogram4_rebinned ) legend->AddEntry(histogram4_rebinned, legendEntry4.data(), "l"); legend->Draw(); TPaveText* label = 0; if ( labelTextLines.size() > 0 ) { label = new TPaveText(labelPosX, labelPosY, labelPosX + labelSizeX, labelPosY + labelSizeY, "brNDC"); for ( std::vector<std::string>::const_iterator labelTextLine = labelTextLines.begin(); labelTextLine != labelTextLines.end(); ++labelTextLine ) { label->AddText(labelTextLine->data()); } label->SetFillColor(10); label->SetBorderSize(0); label->SetTextColor(1); label->SetTextAlign(12); label->SetTextSize(labelTextSize); label->Draw(); } canvas->Update(); std::string outputFileName_plot = "plots/"; size_t idx = outputFileName.find_last_of('.'); outputFileName_plot.append(std::string(outputFileName, 0, idx)); if ( idx != std::string::npos ) canvas->Print(std::string(outputFileName_plot).append(std::string(outputFileName, idx)).data()); canvas->Print(std::string(outputFileName_plot).append(".png").data()); canvas->Print(std::string(outputFileName_plot).append(".pdf").data()); delete label; delete legend; delete canvas; delete histogram1_rebinned; delete histogram2_rebinned; delete histogram3_rebinned; delete histogram4_rebinned; }
void showGraphs(double canvasSizeX, double canvasSizeY, const std::vector<std::string>& entriesToPlot, std::map<std::string, TGraph*>& graphs, std::map<std::string, std::string>& legendEntries, int colors[], int lineWidths[], int lineStyles[], double legendTextSize, double legendPosX, double legendPosY, double legendSizeX, double legendSizeY, double xMin, double xMax, const std::string& xAxisTitle, double xAxisOffset, double yMin, double yMax, const std::string& yAxisTitle, double yAxisOffset, const std::string& outputFileName) { TCanvas* canvas = new TCanvas("canvas", "canvas", canvasSizeX, canvasSizeY); canvas->SetFillColor(10); canvas->SetBorderSize(2); canvas->SetLeftMargin(0.14); canvas->SetBottomMargin(0.12); TH1* dummyHistogram = new TH1D("dummyHistogram", "dummyHistogram", 100, xMin, xMax); dummyHistogram->SetTitle(""); dummyHistogram->SetStats(false); dummyHistogram->SetMinimum(yMin); dummyHistogram->SetMaximum(yMax); TAxis* xAxis = dummyHistogram->GetXaxis(); xAxis->SetTitle(xAxisTitle.data()); xAxis->SetTitleSize(0.045); xAxis->SetTitleOffset(xAxisOffset); TAxis* yAxis = dummyHistogram->GetYaxis(); yAxis->SetTitle(yAxisTitle.data()); yAxis->SetTitleSize(0.045); yAxis->SetTitleOffset(yAxisOffset); dummyHistogram->Draw("axis"); TLegend* legend = new TLegend(legendPosX, legendPosY, legendPosX + legendSizeX, legendPosY + legendSizeY, "", "brNDC"); legend->SetBorderSize(0); legend->SetFillColor(0); legend->SetTextSize(legendTextSize); size_t numEntriesToPlot = entriesToPlot.size(); for ( size_t iEntryToPlot = 0; iEntryToPlot < numEntriesToPlot; ++iEntryToPlot ) { const std::string& entryToPlot = entriesToPlot[iEntryToPlot]; TGraph* graph = graphs[entryToPlot]; assert(graph); graph->SetLineColor(colors[iEntryToPlot]); graph->SetLineWidth(lineWidths[iEntryToPlot]); graph->SetLineStyle(lineStyles[iEntryToPlot]); graph->SetMarkerColor(colors[iEntryToPlot]); graph->Draw("L"); legend->AddEntry(graph, legendEntries[entryToPlot].data(), "l"); } legend->Draw(); canvas->Update(); std::string outputFileName_plot = "plots/"; size_t idx = outputFileName.find_last_of('.'); outputFileName_plot.append(std::string(outputFileName, 0, idx)); if ( idx != std::string::npos ) canvas->Print(std::string(outputFileName_plot).append(std::string(outputFileName, idx)).data()); canvas->Print(std::string(outputFileName_plot).append(".png").data()); canvas->Print(std::string(outputFileName_plot).append(".pdf").data()); delete dummyHistogram; delete legend; delete canvas; }
void Plot::FitSignal(int mode, int fitMode) { const int nPar = 6; TRandom ran; if(mode==0) { gStyle->SetOptLogy(1); } else { gStyle->SetOptLogy(0); } gStyle->SetOptStat(0); gStyle->SetOptTitle(0); const float limitBinSize = 2.0; // **** bin size here TCanvas* c = NewCanvas(); c->Divide(1,2); gROOT->cd(); TH1F* cc = new TH1F("CCSignal","CC Signal",500,0.0,1000.0); TH1F* ccBg = new TH1F("CCBgFit","CC Bg Fit",500,0.0,1000.0); TH1F* ccBgErr = new TH1F("CCBgErr","CC Bg Err",500,0.0,1000.0); TH1F* ccBgP = new TH1F("CCBgPlus","CC Bg Plus",500,0.0,1000.0); TH1F* ccBgM = new TH1F("CCBgMinus","CC Bg Minus",500,0.0,1000.0); TH1F* cp = new TH1F("CPSignal","CP Signal",500,0.0,1000.0); TH1F* cpBg = new TH1F("CPBgFit","CP Bg Fit",500,0.0,1000.0); TH1F* cpBgErr = new TH1F("CPBgErr","CP Bg Err",500,0.0,1000.0); TH1F* cpBgP = new TH1F("CPBgPlus","CP Bg Plus",500,0.0,1000.0); TH1F* cpBgM = new TH1F("CPBgMinus","CP Bg Minus",500,0.0,1000.0); TMatrixD matrix(nPar,nPar); fd->cd(); TH1F* hInt,*hBgInt; char fitname[100]; for(int ind=0; ind<2; ind++) { if(debug) printf("starting ind %i\n",ind); c->cd(ind+1); gStyle->SetOptLogy(1); printf("Starting %i ######################################\n",ind); TH1F* h; //char cind[20]; //char handle[100]; //sprintf(handle,"side_1exp_%02i_%02i_%02i",ind,mode,fitMode); TF1* fits[4]; //TF1* dpx[4]; if(debug) printf("looking for h %i\n",int(fd)); if(ind==0) { h = (TH1F*)fd->FindObjectAny("pair_mass_2GeV1"); } else if(ind==1) { h = (TH1F*)fd->FindObjectAny("pair_mass_2GeV3"); } if(debug) printf("new h %i\n",int(h)); if(debug) printf("new fit\n"); sprintf(fitname,"hfit_%1i",ind); fits[ind] = new TF1(fitname,"([0]*pow((x-30.0),[1])+[3]*pow((x-30.0),0.2))*([2]*exp(-[2]*(x-30.0))+[4]*[5]*exp(-[5]*(x-30.0)))",30.0,500.0); //fits[ind] = new TF1(fitname,"([0]*((1-[3])*pow((x-30.0),[1])+[3]*pow((x-30.0),0.2)))*(exp(-[2]*(x-30.0))+[4]*exp(-[5]*(x-30.0)))",30.0,500.0); fits[ind]->SetParameter(0,0.0004); fits[ind]->SetParameter(1,2); fits[ind]->SetParameter(2,0.02); fits[ind]->SetParameter(3,0.005); //fits[ind]->SetParameter(3,0.5); fits[ind]->SetParameter(4,1.005); fits[ind]->SetParameter(5,0.05); float llim = 30.0; h->Fit(fits[ind],"LN","",llim,1000.0); double par[20],parMin[20],fval,fvalMin; for(int i=0; i<nPar; i++) parMin[i] = fits[ind]->GetParameter(i); gMinuit->Eval(nPar,0,fvalMin,parMin,0); //printf("got back %10.5f\n",fvalMin); // save the fit results in a histogram, for limit program for(int ibin=16; ibin<250; ibin++) { float xx = h->GetBinCenter(ibin); float yy = fits[ind]->Eval(xx); if(ind==0) { cc->SetBinContent(ibin,h->GetBinContent(ibin)); ccBg->SetBinContent(ibin,yy); ccBgErr->SetBinContent(ibin,0.0); ccBgP->SetBinContent(ibin,0.0); ccBgM->SetBinContent(ibin,99999.0); } else { cp->SetBinContent(ibin,h->GetBinContent(ibin)); cpBg->SetBinContent(ibin,yy); cpBgErr->SetBinContent(ibin,0.0); cpBgP->SetBinContent(ibin,0.0); cpBgM->SetBinContent(ibin,99999.0); } } //vary the parameters to find an error envelope double par2[20],fval2=1e10; int pslim = (ind==0?25000:150000); for(int ips=0; ips<pslim; ips++) { if(ips%10000==0) printf("Processing %d\n",ips); for(int i=0; i<nPar; i++) { par[i] = parMin[i]; } for(int i=0; i<nPar; i++) { //int i = (ips%2==0?0:3); par[i] = parMin[i]+(2.0*(ran.Uniform()-0.5))*fits[ind]->GetParError(i); } fval = 0.0; gMinuit->Eval(nPar,0,fval,par,0); if((fval-fvalMin)<1.0) { printf("Found nearby min %10.5f\n",fval-fvalMin); float eOld,eNew; for(int ibin=16; ibin<250; ibin++) { float xx = h->GetBinCenter(ibin); for(int i=0; i<nPar; i++) fits[ind]->SetParameter(i,par[i]); float yy = fits[ind]->Eval(xx); for(int i=0; i<nPar; i++) fits[ind]->SetParameter(i,parMin[i]); float yyMin = fits[ind]->Eval(xx); TH1F *hBgErr,*hBgP,*hBgM; if(ind==0) { hBgErr = ccBgErr; hBgP = ccBgP; hBgM = ccBgM; } else { hBgErr = cpBgErr; hBgP = cpBgP; hBgM = cpBgM; } eOld = hBgErr->GetBinContent(ibin); eNew = yy - yyMin; if(eOld>fabs(eNew)) hBgErr->SetBinContent(ibin,fabs(eNew)); eOld = hBgP->GetBinContent(ibin); if(yy>eOld) hBgP->SetBinContent(ibin,yy); eOld = hBgM->GetBinContent(ibin); if(yy<eOld) hBgM->SetBinContent(ibin,yy); } } // end if near maximum /* if(fval<fval2) { for(int i=0; i<nPar; i++) par2[i] = par[i]; fval2 = fval; } */ } /* printf("forcing new fit..\n"); for(int i=0; i<nPar; i++) { printf("old,new = %10.5f %10.5f\n",parMin[i],par2[i]); fits[ind]->SetParameter(i,par2[i]); } */ // restore original fit fval = 0.0; gMinuit->Eval(nPar,0,fval,parMin,0); for(int i=0; i<nPar; i++) fits[ind]->SetParameter(i,parMin[i]); //extract fit error matrix gMinuit->mnemat(matrix.GetMatrixArray(),nPar); matrix.Print(); for(int i=0; i<nPar; i++) { for(int j=0; j<nPar; j++) { printf("%10.5f",matrix(i,j)/sqrt(matrix(i,i)*matrix(j,j))); } printf("\n"); } //matrix.Draw("text"); float hm = h->GetMaximum(); if(mode==0) { //TAxis* ax = h->GetXaxis(); //ax->SetRangeUser(24.1,199.9); h->SetMaximum(1.2*hm); //h->SetMinimum(0.0); } else if(mode==1) { TAxis* ax = h->GetXaxis(); ax->SetRangeUser(20.0,500.0); h->SetMaximum(1.15*hm); h->SetMinimum(0.0); } h->Draw(); fits[ind]->SetLineColor(1); fits[ind]->SetLineWidth(2.0); fits[ind]->Draw("SAME"); // find chi2's and KS's //AnaChiKs(h,fits[ind]); TAxis* ax,*ay; ax = h->GetXaxis(); ay = h->GetYaxis(); ax->SetTitle("m(#gamma#gamma) (GeV/c^{2})"); ay->SetTitle("Entries/2 GeV/c^{2}"); ax->CenterTitle(); ay->CenterTitle(); ax->SetTitleOffset(0.9); ay->SetTitleOffset(1.0); ax->SetTitleSize(0.08); ay->SetTitleSize(0.07); ax->SetLabelSize(0.07); ay->SetLabelSize(0.07); gPad->SetLeftMargin(0.16); gPad->SetBottomMargin(0.16); TText* text; text = new TLatex(0.5,0.8,"Diphoton Data"); text->SetNDC(true); text->SetTextSize(0.06); text->Draw(); if(ind==0) text = new TLatex(0.5,0.72,"Central-Central"); else if(ind==1) text = new TLatex(0.5,0.72,"Central-Plug"); text->SetNDC(true); text->SetTextSize(0.06); text->Draw(); if(ind==0) { text = new TLatex(0.15,0.92,"W/Z H#rightarrow X(#gamma#gamma)"); text->SetNDC(true); text->SetTextSize(0.08); text->Draw(); text = new TLatex(0.5,0.92,"CDF Run II Preliminary, 2.0 fb^{-1}"); text->SetNDC(true); text->SetTextSize(0.06); text->Draw(); } /* if(debug) printf("start loop\n"); int ibin; for(ibin=16; ibin<=250; ibin++) { if(debug) printf("start bin %i\n",ibin); float xx = (ibin-0.5)*2.0; // *** bin width here if(debug) printf("-1 test ibin %i\n",ibin); float yy = fits[ind]->Eval(xx); //printf("%f yy= %f \n",xx,yy); // the derivative of this yield wrt parameters if(debug) printf("0 test ibin %i\n",ibin); double y0 = yy; if(debug) printf("1 test ibin %i\n",ibin); TMatrixD vv(nPar,1); float dirSize = 0.5; for(int i=0; i<nPar; i++){ int ipar = i; double par = fits[ind]->GetParameter(ipar); double spar = fits[ind]->GetParError(ipar); double parp = par + dirSize*spar; fits[ind]->SetParameter(ipar,parp); double yp = fits[ind]->Eval(xx); vv(i,0) = limitBinSize*(yp-y0)/(dirSize*spar); fits[ind]->SetParameter(ipar,par); //printf("%f %f %f\n",yp,y0,spar); } //vv.Print(); if(debug) printf("start matrix %i\n",ibin); TMatrixD tempM(matrix, TMatrixDBase::kMult, vv); //matrix.Print(); TMatrixD tempN(vv, TMatrixDBase::kTransposeMult, tempM); //tempN.Print(); float bgSig = 0.0; if(tempN(0,0)>0.0) bgSig = sqrt(tempN(0,0)); // ****** hack temp ********** bgSig = 0.3*y0; // file hists to be saved if(debug) printf("start fill %i\n",ibin); if(ind==0) { //printf("filling cc %i %f\n",ibin,h->GetBinContent(ibin)); cc->SetBinContent(ibin,h->GetBinContent(ibin)); //printf("getting cc %i %f\n",ibin,cc->GetBinContent(ibin)); ccBg->SetBinContent(ibin,yy); ccBgErr->SetBinContent(ibin,bgSig); ccBgP->SetBinContent(ibin,yy+bgSig); ccBgM->SetBinContent(ibin,TMath::Max(yy-bgSig,float(0.0))); //if(ibin==27) { //printf("bg %f %f \n",yy,bgSig); //} } else { cp->SetBinContent(ibin,h->GetBinContent(ibin)); cpBg->SetBinContent(ibin,yy); cpBgErr->SetBinContent(ibin,bgSig); cpBgP->SetBinContent(ibin,yy+bgSig); cpBgM->SetBinContent(ibin,TMath::Max(yy-bgSig,float(0.0))); } if(debug) printf("end fill %i\n",ibin); } */ } printf("cc plus BG=%f\n",ccBgP->GetSum()); printf("cc minus BG=%f\n",ccBgM->GetSum()); printf("cp plus BG=%f\n",cpBgP->GetSum()); printf("cp minus BG=%f\n",cpBgM->GetSum()); char fn[100]; if(mode==0) { sprintf(fn,"FitSignal_%d",fitMode); savePlot(c,fn); } else if(mode==1) { sprintf(fn,"FitSignalLin_%d",fitMode); savePlot(c,fn); } //if(mode!=0) return; // plot of fit results gStyle->SetOptLogy(0); c = NewCanvas(); c->Divide(1,2); c->cd(1); cc->Draw(); ccBg->Draw("SAME"); c->cd(2); ccBgErr->SetMinimum(0.0); ccBgErr->SetMaximum(4.0); ccBgErr->Draw(); ccBgP->SetLineStyle(2); ccBgP->Draw("SAME"); ccBgM->SetLineStyle(2); ccBgM->Draw("SAME"); savePlot(c,"FitSignalResultsCC"); c = NewCanvas(); c->Divide(1,2); c->cd(1); cp->Draw(); cpBg->Draw("SAME"); c->cd(2); cpBgErr->SetMinimum(0.0); cpBgErr->SetMaximum(4.0); cpBgErr->Draw(); cpBgP->SetLineStyle(2); cpBgP->Draw("SAME"); cpBgM->SetLineStyle(2); cpBgM->Draw("SAME"); savePlot(c,"FitSignalResultsCP"); char title[100]; if(name) { sprintf(title,"TPeaksHiggs_FitSignalHist_%s.root",name); TFile* ff = new TFile(title,"RECREATE"); gROOT->GetList()->Write(); ff->Close(); } }
void Limit_2D_LQ() { // setTDRStyle(); gStyle->SetPadLeftMargin(0.15); gStyle->SetLineWidth(2); gROOT->ForceStyle(); TCanvas *c = new TCanvas("c1", "c1",0,45,600,600); gStyle->SetOptStat(0); c->SetHighLightColor(2); c->Range(0,0,1,1); c->SetFillColor(0); c->SetBorderMode(0); c->SetBorderSize(2); c->SetLeftMargin(0.12); c->SetRightMargin(0.04); c->SetTopMargin(0.06); c->SetBottomMargin(0.12); c->SetFrameFillStyle(0); c->SetFrameLineWidth(2); c->SetFrameBorderMode(0); c->SetTickx(1); c->SetTicky(1); c->cd(); // const int nMass = 15; // Double_t mData[] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900}; // Double_t limit_observed[] = {0.0827284, 0.0981056, 0.0646578, 0.0733808, 0.115078, 0.154828, 0.227671, 0.307448, 0.39362, 0.554267, 0.783352, 1.07813, 1.5539, 2.21602, 3.46142}; // Double_t limit_expected[] = {0.088132, 0.100218, 0.0708202, 0.0703361, 0.090391, 0.131143, 0.175555, 0.247355, 0.34838, 0.487021, 0.693413, 0.979308, 1.406, 2.00591, 3.09258}; //// // // // // // // https://twiki.cern.ch/twiki/bin/view/CMS/Exo2015LQ1AndLQ2Analyses std::map<int, float> XS; XS[200]= 60.6; XS[250]= 20.3; XS[300]= 8.05E+00; XS[350]= 3.58E+00; XS[400]= 1.74E+00; XS[450]= 9.05E-01; XS[500]= 4.96E-01; XS[550]= 2.84E-01; XS[600]= 1.69E-01; XS[650]= 1.03E-01; XS[700]= 6.48E-02; XS[750]= 4.16E-02; XS[800]= 2.73E-02; XS[850]= 1.82E-02; XS[900]= 1.23E-02; XS[950]= 8.45E-03; XS[1000]= 5.86E-03; XS[1050]= 4.11E-03; XS[1100]= 2.91E-03; XS[1150]= 2.08E-03; XS[1200]= 1.50E-03; XS[1250]= 1.09E-03; XS[1300]= 7.95E-04; XS[1350]= 5.85E-04; XS[1400]= 4.33E-04; XS[1450]= 3.21E-04; XS[1500]= 2.40E-04; const int nMass = 26; int mData[nMass] = { 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, 1400, // 1450, 1500}; // Observed!!!!!!! Double_t ObservedLimitValues[27] = { 5.169031, 2.127156, 1.119, // new 0.554736, 0.279327, 0.164877, 0.10318, 0.0695557, 0.0507156, 0.0386856, 0.031826, 0.0244583, 0.0194931, 0.0175816, 0.0156609, 0.0132805, 0.0108856, 0.00979614, 0.0088028, 0.00763702, 0.00695305, 0.00662155, 0.0061306, 0.0051651, 0.0056942, 0.00519066, 0.00458145}; // Expected !!!!! Double_t ExpectedLimitValues[27] = { 5.212884, 2.624342, 1.0423, //new 0.39624, 0.206909, 0.113708, 0.0687866, 0.0496826, 0.0375671, 0.028656, 0.0247536, 0.0197548, 0.0155945, 0.0136745, 0.0126492, 0.0102158, 0.00997849, 0.0089798, 0.00806923, 0.00694275, 0.00632095, 0.00601959, 0.00557327, 0.0051651, 0.00517654, 0.00471878, 0.00458145}; //Plus One sigma Double_t PlusOneSigmaLimitValues[27] = { 2.541088, 1.288593, 0.502809, 0.1918498, 0.103455, 0.051169, 0.0343934, 0.0248413, 0.0187836, 0.014328, 0.0106086, 0.0103477, 0.0077972, 0.0058606, 0.005421, 0.0061294, 0.00362851, 0.0040817, 0.00366787, 0.00485995, 0.00379255, 0.00361176, 0.00334397, 0.00361557, 0.00258828, 0.00377502, 0.00320702}; //////////////////////////////////////////////////////////////// // -1 sigma //////////////////////////////////////////////////////////////// Double_t MinusOneSigmaLimitValues[27] = { 1.480962, 0.7831655, 0.2920889, 0.09906, 0.051727, 0.0341121, 0.0171966, 0.0149048, 0.0093917, 0.007164, 0.0082512, 0.0056442, 0.0046784, 0.0032558, 0.00421643, 0.00306477, 0.00362854, 0.00326538, 0.0022007, 0.00208283, 0.00126419, 0.00180588, 0.00167198, 0.00154953, 0.0010353, 0.00094376, 0.00091629}; // Double_t limit_expected[26]; Double_t limit_plusOneSigma[26]; Double_t limit_MinusOneSigma[26]; Double_t limit_observed[26]; for (int i=0; i < 26; i++){ limit_expected[i]=ExpectedLimitValues[i]/XS[mData[i]]; limit_plusOneSigma[i]=(ExpectedLimitValues[i]+PlusOneSigmaLimitValues[i])/XS[mData[i]]; limit_MinusOneSigma[i]=(ExpectedLimitValues[i]-MinusOneSigmaLimitValues[i])/XS[mData[i]]; limit_observed[i]=ObservedLimitValues[i]/XS[mData[i]]; } /* //Asympt CLs Double_t limit_observed[] = {0.0594621, 0.0843084, 0.0609738, 0.0718055, 0.110206, 0.147462, 0.217648, 0.294432, 0.367942, 0.525929, 0.739963, 1.01469, 1.45093, 2.07904, 3.25821}; Double_t limit_expected[] = {0.074707, 0.103027, 0.0668945, 0.0737305, 0.0942383, 0.130371, 0.175293, 0.250977, 0.338867, 0.482422, 0.689453, 0.964844, 1.37109, 1.94531, 2.99219}; */ std::vector<double> limExp; std::vector<double> betaExp; std::vector<double> limPlusSigma; std::vector<double> betaPlusSigma; std::vector<double> limMinusSigma; std::vector<double> betaMinusSigma; std::vector<double> limObs; std::vector<double> betaObs; /////////////////////////////////////////////////////////////////////////////////////////// // Expected limit /////////////////////////////////////////////////////////////////////////////////////////// for(int i = 0; i != 1; ++i) { double lim1 = limit_expected[i]; double lim2 = limit_expected[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 0.001; beta < 1.001; beta += 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); // cout << m1 <<" "<< m2 <<" "<< 1<<" "<< 1<<" "<< lim1/beta/beta<<" "<< lim2/beta/beta <<" "<< " ---> "<< result<<"\n"; if ( result != 0 ) { limExp.push_back(result); betaExp.push_back(beta); // cout << beta << '\t' << result << endl; //KK } } } for(int i = 1; i != 2; ++i) { double lim1 = limit_expected[i]; double lim2 = limit_expected[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 1.001; beta >= 0; beta -= 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); if ( result != 0 ) { limExp.push_back(result); betaExp.push_back(beta); // cout << beta << '\t' << result << endl; //KK } } } for(int i = 2; i != nMass; ++i) { double lim1 = limit_expected[i]; double lim2 = limit_expected[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 0.001; beta < 1.001; beta += 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); if ( result != 0 ) { limExp.push_back(result); betaExp.push_back(beta); // cout << beta << '\t' << result << endl; //KK } } } /////////////////////////////////////////////////////////////////////////////////////////// // Expected +1 sigma limit /////////////////////////////////////////////////////////////////////////////////////////// for(int i = 0; i != 1; ++i) { double lim1 = limit_plusOneSigma[i]; double lim2 = limit_plusOneSigma[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 0.001; beta < 1.001; beta += 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); // cout << m1 <<" "<< m2 <<" "<< 1<<" "<< 1<<" "<< lim1/beta/beta<<" "<< lim2/beta/beta <<" "<< " ---> "<< result<<"\n"; if ( result != 0 ) { limPlusSigma.push_back(result); betaPlusSigma.push_back(beta); // cout << beta << '\t' << result << endl; //KK } } } for(int i = 1; i != 2; ++i) { double lim1 = limit_plusOneSigma[i]; double lim2 = limit_plusOneSigma[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 1.001; beta >= 0; beta -= 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); if ( result != 0 ) { limPlusSigma.push_back(result); betaPlusSigma.push_back(beta); // cout << beta << '\t' << result << endl; //KK } } } for(int i = 2; i != nMass; ++i) { double lim1 = limit_plusOneSigma[i]; double lim2 = limit_plusOneSigma[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 0.001; beta < 1.001; beta += 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); if ( result != 0 ) { limPlusSigma.push_back(result); betaPlusSigma.push_back(beta); // cout << beta << '\t' << result << endl; //KK } } } /////////////////////////////////////////////////////////////////////////////////////////// // Expected -1 sigma limit /////////////////////////////////////////////////////////////////////////////////////////// for(int i = 0; i != 1; ++i) { double lim1 = limit_MinusOneSigma[i]; double lim2 = limit_MinusOneSigma[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 0.001; beta < 1.001; beta += 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); // cout << m1 <<" "<< m2 <<" "<< 1<<" "<< 1<<" "<< lim1/beta/beta<<" "<< lim2/beta/beta <<" "<< " ---> "<< result<<"\n"; if ( result != 0 ) { limMinusSigma.push_back(result); betaMinusSigma.push_back(beta); // cout << beta << '\t' << result << endl; //KK } } } for(int i = 1; i != 2; ++i) { double lim1 = limit_MinusOneSigma[i]; double lim2 = limit_MinusOneSigma[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 1.001; beta >= 0; beta -= 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); if ( result != 0 ) { limMinusSigma.push_back(result); betaMinusSigma.push_back(beta); // cout << beta << '\t' << result << endl; //KK } } } for(int i = 2; i != nMass; ++i) { double lim1 = limit_MinusOneSigma[i]; double lim2 = limit_MinusOneSigma[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 0.001; beta < 1.001; beta += 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); if ( result != 0 ) { limMinusSigma.push_back(result); betaMinusSigma.push_back(beta); // cout << beta << '\t' << result << endl; //KK } } } /////////////////////////////////////////////////////////////////////////////////////////// // observed limit /////////////////////////////////////////////////////////////////////////////////////////// for(int i = 0; i != 1; ++i) { double lim1 = limit_observed[i]; double lim2 = limit_observed[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 0.001; beta < 1.001; beta += 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); if ( result != 0 ) { limObs.push_back(result); betaObs.push_back(beta); } } } for(int i = 1; i != 2; ++i) { double lim1 = limit_observed[i]; double lim2 = limit_observed[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 1.001; beta >= 0; beta -= 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); if ( result != 0 ) { limObs.push_back(result); betaObs.push_back(beta); } } } for(int i = 2; i != nMass; ++i) { double lim1 = limit_observed[i]; double lim2 = limit_observed[i+1]; double m1 = mData[i]; double m2 = mData[i+1]; for(double beta = 0.001; beta < 1.001; beta += 0.001) { double result = intersection(m1, m2, 1, 1, lim1/beta/beta, lim2/beta/beta); if ( result != 0 ) { limObs.push_back(result); betaObs.push_back(beta); } } } ////////////////////////////////////////////////////////////////// // Expected ////////////////////////////////////////////////////////////////// const int nexp = limExp.size(); // cout <<"--------------------> "<<nexp <<"\n\n\n\n"; Double_t massExp[nexp+4]; Double_t bExp[nexp+4]; for(int i = 0; i != nexp; ++i) { massExp[i] = limExp[i]; bExp[i] = betaExp[i]; // cout <<"###### exp massExp[i] "<<massExp[i] << " bExp[i] "<<bExp[i]<<"\n"; } massExp[nexp] = massExp[nexp-1]; bExp[nexp] = 1; massExp[nexp+1] = 200; bExp[nexp+1] = 1; massExp[nexp+2] = 200; bExp[nexp+2] = bExp[0]; massExp[nexp+3] = massExp[0]; bExp[nexp+3] = bExp[0]; ////////////////////////////////////////////////////////////////// // Plus One Sigma ////////////////////////////////////////////////////////////////// const int nplusSig = limPlusSigma.size(); // cout <<"--------------------> "<<nplusSig <<"\n\n\n\n"; Double_t massPlusOneSigma[nplusSig+4]; Double_t bPlusOneSigma[nplusSig+4]; for(int i = 0; i != nplusSig; ++i) { massPlusOneSigma[i] = limPlusSigma[i]; bPlusOneSigma[i] = betaPlusSigma[i]; // cout <<"###### exp massPlusOneSigma[i] "<<massPlusOneSigma[i] << " bPlusOneSigma[i] "<<bPlusOneSigma[i]<<"\n"; } massPlusOneSigma[nplusSig] = massPlusOneSigma[nplusSig-1]; bPlusOneSigma[nplusSig] = 1; massPlusOneSigma[nplusSig+1] = 200; bPlusOneSigma[nplusSig+1] = 1; massPlusOneSigma[nplusSig+2] = 200; bPlusOneSigma[nplusSig+2] = bPlusOneSigma[0]; massPlusOneSigma[nplusSig+3] = massPlusOneSigma[0]; bPlusOneSigma[nplusSig+3] = bPlusOneSigma[0]; Double_t NewbPlusOneSigma[nexp+4]; for(int i = 0; i != nexp+4; ++i) { NewbPlusOneSigma[i]=bPlusOneSigma[i]-bExp[i]; } ////////////////////////////////////////////////////////////////// // Minus One Sigma ////////////////////////////////////////////////////////////////// const int nMinusSig = limMinusSigma.size(); // cout <<"--------------------> "<<nMinusSig <<"\n\n\n\n"; Double_t massMinusOneSigma[nMinusSig+4]; Double_t bMinusOneSigma[nMinusSig+4]; for(int i = 0; i != nMinusSig; ++i) { massMinusOneSigma[i] = limMinusSigma[i]; bMinusOneSigma[i] = betaMinusSigma[i]; // cout <<"###### exp massMinusOneSigma[i] "<<massMinusOneSigma[i] << " bMinusOneSigma[i] "<<bMinusOneSigma[i]<<"\n"; } massMinusOneSigma[nMinusSig] = massMinusOneSigma[nMinusSig-1]; bMinusOneSigma[nMinusSig] = 1; massMinusOneSigma[nMinusSig+1] = 200; bMinusOneSigma[nMinusSig+1] = 1; massMinusOneSigma[nMinusSig+2] = 200; bMinusOneSigma[nMinusSig+2] = bMinusOneSigma[0]; massMinusOneSigma[nMinusSig+3] = massMinusOneSigma[0]; bMinusOneSigma[nMinusSig+3] = bMinusOneSigma[0]; Double_t NewbMinusOneSigma[nexp+4]; for(int i = 0; i != nexp+4; ++i) { NewbMinusOneSigma[i]=bExp[i]-bMinusOneSigma[i]; // cout<<" mas comaprison "<<massExp[i]<<" "<<massMinusOneSigma[i]<<" "<<massPlusOneSigma[i]<<"\n"; } ////////////////////////////////////////////////////////////////// // Observed ////////////////////////////////////////////////////////////////// const int nobs = limObs.size(); float massObs[nobs+4]; float bObs[nobs+4]; for(int i = 0; i != nobs; ++i) { massObs[i] = limObs[i]; bObs[i] = betaObs[i]; // cout <<"###### obs massObs[i] "<<massObs[i] << " bObs[i] "<<bObs[i]<<"\n"; } massObs[nobs] = massObs[nobs-1]; bObs[nobs] = 1; massObs[nobs+1] = 200; bObs[nobs+1] = 1; massObs[nobs+2] = 200; bObs[nobs+2] = bObs[0]; massObs[nobs+3] = massObs[0]; bObs[nobs+3] = bObs[0]; ////////////////////////////////////////////////////////////////// // TGRAPH ////////////////////////////////////////////////////////////////// // massExp.sort() TGraph* grExp = new TGraph(nexp+4, massExp, bExp); grExp->Sort(&TGraph::CompareX, 0, 0,-1111); TGraph* gPlusOneSigma = new TGraph(nplusSig+4, massPlusOneSigma, bPlusOneSigma); gPlusOneSigma->Sort(&TGraph::CompareX, 0, 0,-1111); TGraph* gMinusOneSigma = new TGraph(nMinusSig+4, massMinusOneSigma, bMinusOneSigma); gMinusOneSigma->Sort(&TGraph::CompareX, 0, 0,-1111); TGraph* grObs = new TGraph(nobs+4, massObs, bObs); // grObs->Sort(); // for(int i = 0; i < nexp+3; ++i) { // cout << i << "\t" << massExp[i] << "\t" << bExp[i] << endl; // } // ------------>Primitives in pad: pad_plot TPad *pad_plot = new TPad("pad_plot", "pad_plot",0,0,1,1); pad_plot->Draw(); pad_plot->cd(); pad_plot->Range(10.71429,-5.02439,1500,3.512195); pad_plot->SetFillColor(0); pad_plot->SetFillStyle(4000); pad_plot->SetBorderMode(0); pad_plot->SetBorderSize(2); // pad_plot->SetLogy(); // pad_plot->SetGridx(); // pad_plot->SetGridy(); pad_plot->SetLeftMargin(0.12); pad_plot->SetRightMargin(0.04); pad_plot->SetTopMargin(0.06); pad_plot->SetBottomMargin(0.12); pad_plot->SetFrameFillStyle(0); pad_plot->SetFrameLineWidth(2); pad_plot->SetFrameBorderMode(0); pad_plot->SetFrameFillStyle(0); pad_plot->SetFrameLineWidth(2); pad_plot->SetFrameBorderMode(0); pad_plot->SetTickx(1); pad_plot->SetTicky(1); TH2F* frame = new TH2F("frame", "", 100, 200, 1000, 100, 0.001, 1); TAxis* ax = frame->GetXaxis(); TAxis* ay = frame->GetYaxis(); ax->SetTitle("M_{LQ} [GeV]"); // ax->SetLabelOffset(0.01); ay->SetTitle("#beta"); //ay->SetTitle("#Beta(LQ#rightarrow#tau b)"); // ax->SetTitleFont(132); ax->SetTitleSize(0.05); // ay->SetTitleFont(132); ay->SetTitleSize(0.05); ay->SetRangeUser(0.,1); frame->Draw(); // grExp->SetLineColor(TColor::GetColor(0, 0, 333)); // grExp->SetFillColorAlpha(TColor::GetColor(200, 222, 285), 0.65); // grObs->SetLineColor(TColor::GetColor(0, 0, 333)); grObs->SetFillColorAlpha(TColor::GetColor(200, 222, 285), 0.65); // grObs->SetLineColor(kBlack); grObs->SetLineWidth(3); grExp->SetLineColor(kBlack); grExp->SetLineWidth(2); grExp->SetLineStyle(7); // grObs->SetFillStyle(3005); // grExp->SetLineWidth(2); // grObs->SetLineWidth(2); // grObs->SetFillStyle(3005); // grObs->Draw("F"); grExp->Draw("L"); // grExp->Draw("Lsame"); // gMinusOneSigma->SetLineColor(kBlue); gMinusOneSigma->SetLineWidth(0); // gMinusOneSigma->SetLineStyle(2); ci = TColor::GetColor("#fcf10f"); gMinusOneSigma->SetFillColorAlpha(15, 0.65); gMinusOneSigma->Draw("f"); // gPlusOneSigma->SetLineColor(kBlue); gPlusOneSigma->SetLineWidth(0); // gPlusOneSigma->SetLineStyle(2); // ci = TColor::GetColor("#fcf10f"); gPlusOneSigma->SetFillColor(0); gPlusOneSigma->Draw("fsame"); // gMinusOneSigma->Draw("Lsame"); grObs->Draw("LSame"); grObs->Draw("fsame"); // grExp->Draw("same"); // frame->Draw("same"); frame->Draw("sameaxis"); // grExp->Draw("Lsame"); // grObs->Draw("fsame"); // // Double_t x[5] = {200,300,400,500,600}; // Double_t y[5] = {5,.1,.9,.7,.5}; // TPolyLine *pline = new TPolyLine(nexp+4,massExp,bExp); // pline->SetFillColor(38); // pline->SetLineColor(2); // pline->SetLineWidth(4); // pline->Draw("f"); // pline->Draw(); // // TLatex* tx = new TLatex(250,0.93,"CMS"); // tx->SetTextFont(61); // tx->SetTextSize(0.05); // tx->Draw("SAME"); // TLatex* tx2 = new TLatex(1000,1.03101,"12.9 fb^{-1} (13 TeV)"); // tx2->SetTextSize(0.04); // tx2->SetTextAlign( 12 ); // tx2->SetTextColor( 1 ); // tx2->SetTextFont ( 42 ); // tx2->Draw("SAME"); float lowX=0.65; float lowY=0.85; TPaveText * lumi = new TPaveText(lowX, lowY+0.06, lowX+0.30, lowY+0.16, "NDC"); lumi->SetBorderSize( 0 ); lumi->SetFillStyle( 0 ); lumi->SetTextAlign( 12 ); lumi->SetTextColor( 1 ); lumi->SetTextSize(0.04); lumi->SetTextFont ( 42 ); lumi->AddText("12.9 fb^{-1} (13 TeV)"); lumi->Draw(); lowX=0.15; lowY=0.75; TPaveText * lumi1 = new TPaveText(lowX, lowY+0.06, lowX+0.15, lowY+0.16, "NDC"); lumi1->SetTextFont(61); lumi1->SetTextSize(0.05); lumi1->SetBorderSize( 0 ); lumi1->SetFillStyle( 0 ); lumi1->SetTextAlign( 12 ); lumi1->SetTextColor( 1 ); lumi1->AddText("CMS"); lumi1->Draw(); Double_t Graph0_felx3001[1000] = {0}; Double_t Graph0_fehx3001[1000] = {0}; // for (int i=0;i < 100; i++){ // // cout << "check--->>>>>"<<massExp[i]<<" "<<bExp[i]<<" "<<Graph0_felx3001[i]<<" "<<Graph0_fehx3001[i]<<" "<<NewbMinusOneSigma[i]<<" "<<NewbPlusOneSigma[i]<<"\n"; // } // const Int_t n = 5; // Double_t x[n] = {200, 250, 300, 350, 400}; // Double_t y[n] = {.2,.3,.4,.5,.6}; // Double_t exl[n] = {0}; // Double_t exh[n] = {0}; // Double_t eyl[n] = {.1,.2,.3,.4,.5}; // Double_t eyh[n] = {.3,.4,.5,.6,.7}; // TGraphAsymmErrors *grae = new TGraphAsymmErrors(n,x,y,exl,exh,eyl,eyh); TGraphAsymmErrors *grae = new TGraphAsymmErrors(700,massExp,bExp,Graph0_felx3001,Graph0_fehx3001,NewbMinusOneSigma,NewbPlusOneSigma); grae->Sort(&TGraph::CompareX, 0, 0,-1111); grae->SetName(""); grae->SetTitle(""); ci = TColor::GetColor("#fcf10f"); grae->SetFillColorAlpha(ci, 0.65); // grae->SetMarkerStyle(20); // TH1F *Graph_Graph3002 = new TH1F("Graph_Graph3002","",100,70,1630); // Graph_Graph3002->SetMinimum(0); // Graph_Graph3002->SetMaximum(7.043383); // Graph_Graph3002->SetDirectory(0); // Graph_Graph3002->SetStats(0); // Graph_Graph3002->SetLineStyle(0); // Graph_Graph3002->SetMarkerStyle(20); // Graph_Graph3002->GetXaxis()->SetNdivisions(506); // Graph_Graph3002->GetXaxis()->SetLabelFont(42); // Graph_Graph3002->GetXaxis()->SetTitleSize(0.05); // Graph_Graph3002->GetXaxis()->SetTickLength(0.02); // Graph_Graph3002->GetXaxis()->SetTitleOffset(1.08); // Graph_Graph3002->GetXaxis()->SetTitleFont(42); // Graph_Graph3002->GetYaxis()->SetNdivisions(506); // Graph_Graph3002->GetYaxis()->SetLabelFont(42); // Graph_Graph3002->GetYaxis()->SetLabelOffset(0.007); // Graph_Graph3002->GetYaxis()->SetTitleSize(0.05); // Graph_Graph3002->GetYaxis()->SetTickLength(0.02); // Graph_Graph3002->GetYaxis()->SetTitleOffset(1.08); // Graph_Graph3002->GetYaxis()->SetTitleFont(42); // Graph_Graph3002->GetZaxis()->SetNdivisions(506); // Graph_Graph3002->GetZaxis()->SetLabelFont(42); // Graph_Graph3002->GetZaxis()->SetLabelOffset(0.007); // Graph_Graph3002->GetZaxis()->SetTitleSize(0.05); // Graph_Graph3002->GetZaxis()->SetTickLength(0.02); // Graph_Graph3002->GetZaxis()->SetTitleFont(42); // grae->SetHistogram(Graph_Graph3002); // grae->Draw("3LP"); // TLegend* leg = new TLegend(0.50, 0.14, 0.90, 0.35,"CMS 19.7 fb^{-1}, #sqrt{s} = 8 TeV", "brNDC"); // TLegend* leg = new TLegend(0.50, 0.14, 0.90, 0.35,"19.7 fb^{-1}, #sqrt{s} = 8 TeV", "brNDC"); TLegend* leg = new TLegend(0.45, 0.20, 0.8, 0.35,"", "brNDC"); leg->SetTextFont(42); leg->SetTextSize(0.04); leg->SetMargin(0.15); leg->SetFillColor(0); leg->SetBorderSize(0); leg->AddEntry(grObs, "Observed exclusion","f"); leg->AddEntry(grExp, "Median expected limit","L"); leg->AddEntry(gMinusOneSigma, "68% expected limit","f"); leg->Draw(); //gPad->RedrawAxis(); // c->RedrawAxis(); // pad_plot->Modified(); pad_plot->Draw(); c->cd(); c->Modified(); // c->Print("limit_beta_vs_mass.eps"); c->Print("limit_2D_LQ.pdf"); // c->Print("limit_beta_vs_mass.png"); }
void makePlot(const std::string& inputFilePath, const std::string& canvasName, const std::string& histogram, const std::string& channel, const std::string& xAxisTitle, const std::string& yAxisTitle, const std::string& inputFileName, const std::string& outputFilePath, const std::string& outputFileName) { std::string inputFileName_full = Form("%s%s", inputFilePath.data(), inputFileName.data()); TFile* inputFile = new TFile(inputFileName_full.data()); if ( !inputFile ) { std::cerr << "Failed to open input file = " << inputFileName_full << " !!" << std::endl; assert(0); } inputFile->ls(); TCanvas* canvas = dynamic_cast<TCanvas*>(inputFile->Get(canvasName.data())); if ( !canvas ) { std::cerr << "Failed to load canvas = " << canvasName << " !!" << std::endl; assert(0); } int idxPad = -1; if ( histogram == "mVis" ) idxPad = 1; if ( histogram == "mTauTau" ) idxPad = 2; if ( !(idxPad >= 1 && idxPad <= 2) ) { std::cerr << "Invalid histogram = " << histogram << " !!" << std::endl; assert(0); } TVirtualPad* pad = canvas->GetPad(idxPad); std::cout << "pad = " << pad << ": ClassName = " << pad->ClassName() << std::endl; TCanvas* canvas_new = new TCanvas("canvas_new", "canvas_new", 900, 850); canvas_new->SetFillColor(10); canvas_new->SetBorderSize(2); canvas_new->SetTopMargin(0.065); canvas_new->SetLeftMargin(0.17); canvas_new->SetBottomMargin(0.155); canvas_new->SetRightMargin(0.045); canvas_new->SetLogx(false); canvas_new->SetLogy(false); canvas_new->Draw(); canvas_new->cd(); //TList* pad_primitives = canvas->GetListOfPrimitives(); TList* pad_primitives = pad->GetListOfPrimitives(); TH1* histogramDYJets = 0; TH1* histogramHiggs125 = 0; TH1* histogramHiggs200 = 0; TH1* histogramHiggs300 = 0; TIter pad_nextObj(pad_primitives); while ( TObject* obj = pad_nextObj() ) { std::string objName = ""; if ( dynamic_cast<TNamed*>(obj) ) objName = (dynamic_cast<TNamed*>(obj))->GetName(); std::cout << "obj = " << obj << ": name = " << objName << ", type = " << obj->ClassName() << std::endl; TH1* tmpHistogram = dynamic_cast<TH1*>(obj); if ( tmpHistogram ) { std::cout << "tmpHistogram:" << " fillColor = " << tmpHistogram->GetFillColor() << ", fillStyle = " << tmpHistogram->GetFillStyle() << "," << " lineColor = " << tmpHistogram->GetLineColor() << ", lineStyle = " << tmpHistogram->GetLineStyle() << ", lineWidth = " << tmpHistogram->GetLineWidth() << "," << " markerColor = " << tmpHistogram->GetMarkerColor() << ", markerStyle = " << tmpHistogram->GetMarkerStyle() << ", markerSize = " << tmpHistogram->GetMarkerSize() << "," << " integral = " << tmpHistogram->Integral() << std::endl; if ( tmpHistogram->GetFillColor() == 0 ) histogramDYJets = tmpHistogram; if ( tmpHistogram->GetFillColor() == 632 ) histogramHiggs125 = tmpHistogram; if ( tmpHistogram->GetFillColor() == 616 ) histogramHiggs200 = tmpHistogram; if ( tmpHistogram->GetFillColor() == 600 ) histogramHiggs300 = tmpHistogram; } } if ( !(histogramDYJets && histogramHiggs125 && histogramHiggs200 && histogramHiggs300) ) { std::cerr << "Failed to load histograms !!" << std::endl; assert(0); } int lineColors[4] = { 1, 2, 6, 4 }; int lineStyles[4] = { 1, 1, 1, 1 }; int lineWidths[4] = { 2, 2, 2, 2 }; int fillColors[4] = { 10, 2, 6, 4 }; int fillStyles[4] = { 0, 3002, 3004, 3005 }; histogramDYJets->SetFillColor(fillColors[0]); histogramDYJets->SetFillStyle(fillStyles[0]); histogramDYJets->SetLineColor(lineColors[0]); histogramDYJets->SetLineStyle(lineStyles[0]); histogramDYJets->SetLineWidth(lineWidths[0]); histogramHiggs125->SetFillColor(fillColors[1]); histogramHiggs125->SetFillStyle(fillStyles[1]); histogramHiggs125->SetLineColor(lineColors[1]); histogramHiggs125->SetLineStyle(lineStyles[1]); histogramHiggs125->SetLineWidth(lineWidths[1]); histogramHiggs200->SetFillColor(fillColors[2]); histogramHiggs200->SetFillStyle(fillStyles[2]); histogramHiggs200->SetLineColor(lineColors[2]); histogramHiggs200->SetLineStyle(lineStyles[2]); histogramHiggs200->SetLineWidth(lineWidths[2]); histogramHiggs300->SetFillColor(fillColors[3]); histogramHiggs300->SetFillStyle(fillStyles[3]); histogramHiggs300->SetLineColor(lineColors[3]); histogramHiggs300->SetLineStyle(lineStyles[3]); histogramHiggs300->SetLineWidth(lineWidths[3]); TAxis* xAxis = histogramHiggs300->GetXaxis(); if ( histogram == "mVis" ) xAxis->SetRangeUser(0,350); else xAxis->SetRangeUser(0,450); xAxis->SetTitle(xAxisTitle.data()); xAxis->SetTitleOffset(1.00); xAxis->SetTitleSize(0.070); xAxis->SetTitleFont(42); xAxis->SetLabelOffset(0.010); xAxis->SetLabelSize(0.050); xAxis->SetLabelFont(42); xAxis->SetTickLength(0.040); xAxis->SetNdivisions(505); //double xMin = 20.; //double xMax = xAxis->GetXmax(); //xAxis->SetRangeUser(xMin, xMax); TAxis* yAxis = histogramHiggs300->GetYaxis(); yAxis->SetTitle(yAxisTitle.data()); yAxis->SetTitleOffset(1.20); yAxis->SetTitleSize(0.070); yAxis->SetTitleFont(42); yAxis->SetLabelOffset(0.010); yAxis->SetLabelSize(0.055); yAxis->SetLabelFont(42); yAxis->SetTickLength(0.040); yAxis->SetNdivisions(505); histogramHiggs300->SetTitle(""); histogramHiggs300->SetStats(false); histogramHiggs300->SetMaximum(1.2*histogramDYJets->GetMaximum()); histogramHiggs300->SetMinimum(0.); histogramHiggs300->Draw("hist"); histogramHiggs200->Draw("histsame"); histogramHiggs125->Draw("histsame"); histogramDYJets->Draw("histsame"); histogramHiggs300->Draw("axissame"); TLegend* legend_new = new TLegend(0.50, 0.62, 0.87, 0.92, NULL, "brNDC"); legend_new->SetFillColor(10); legend_new->SetFillStyle(0); legend_new->SetBorderSize(0); legend_new->SetTextFont(42); legend_new->SetTextSize(0.055); legend_new->SetTextColor(1); legend_new->SetMargin(0.20); legend_new->AddEntry(histogramDYJets, "Z/#gamma* #rightarrow #tau#tau", "f"); legend_new->AddEntry(histogramHiggs125, "H(125 GeV) #rightarrow #tau#tau", "f"); legend_new->AddEntry(histogramHiggs200, "H(200 GeV) #rightarrow #tau#tau", "f"); legend_new->AddEntry(histogramHiggs300, "H(300 GeV) #rightarrow #tau#tau", "f"); legend_new->Draw(); double label_channel_y0; if ( channel == "e#mu" ) label_channel_y0 = 0.9275; else if ( channel == "#mu#tau_{h}" ) label_channel_y0 = 0.9400; else if ( channel == "#tau_{h}#tau_{h}" ) label_channel_y0 = 0.9350; else { std::cerr << "Invalid channel = " << channel << " !!" << std::endl; assert(0); } TPaveText* label_channel = new TPaveText(0.855, label_channel_y0, 0.945, label_channel_y0 + 0.055, "NDC"); label_channel->SetFillStyle(0); label_channel->SetBorderSize(0); label_channel->AddText(channel.data()); label_channel->SetTextFont(62); label_channel->SetTextSize(0.055); label_channel->SetTextColor(1); label_channel->SetTextAlign(31); label_channel->Draw(); canvas_new->Update(); std::string outputFileName_full = Form("%s%s", outputFilePath.data(), outputFileName.data()); size_t idx = outputFileName_full.find_last_of('.'); std::string outputFileName_plot = std::string(outputFileName_full, 0, idx); canvas_new->Print(std::string(outputFileName_plot).append(".pdf").data()); //canvas_new->Print(std::string(outputFileName_plot).append(".root").data()); delete legend_new; delete label_channel; delete canvas_new; delete inputFile; }
//------------------------------------------------------------------------------ // DrawZPeak //------------------------------------------------------------------------------ void DrawZPeak(TString energy) { if (energy.Contains("7TeV")) { _lumiText = "4.9 fb^{-1} (7 TeV)"; } else { _lumiText = "19.6 fb^{-1} (8 TeV)"; } // Read the input file //---------------------------------------------------------------------------- TString name = "invMass2Lep_"; TFile* file = new TFile("rootfiles/" + name + energy + ".root", "read"); TH1F* data; TH1F* WZ; TH1F* fakes; TH1F* ZZ; TH1F* Zgamma; TH1F* WV; TH1F* VVV; TH1F* allmc; if (energy.Contains("7TeV")) { data = (TH1F*)file->Get("hZMass_Sel_datahist_COMB"); WZ = (TH1F*)file->Get("hZMass_Sel_wz_COMB"); fakes = (TH1F*)file->Get("hZMass_Sel_datadriven_COMB"); ZZ = (TH1F*)file->Get("hZMass_Sel_zz_COMB"); Zgamma = (TH1F*)file->Get("hZMass_Sel_zg_COMB"); WV = (TH1F*)file->Get("hZMass_Sel_wz_COMB"); VVV = (TH1F*)file->Get("hZMass_Sel_wz_COMB"); allmc = (TH1F*)file->Get("all_estimates_with_error_COMB"); } else if (energy.Contains("8TeV")) { data = (TH1F*)file->Get("h_data"); WZ = (TH1F*)file->Get("h_WZ"); fakes = (TH1F*)file->Get("h_Fakes"); ZZ = (TH1F*)file->Get("h_ZZ"); Zgamma = (TH1F*)file->Get("h_ZGamma"); WV = (TH1F*)file->Get("h_WV"); VVV = (TH1F*)file->Get("h_VVV"); allmc = (TH1F*)file->Get("h_All"); } WZ->SetFillColor(kOrange-2); WZ->SetLineColor(kOrange-2); Zgamma->SetFillColor(kRed+1); // kRed+2 Zgamma->SetLineColor(kRed+1); // kRed+2 ZZ->SetFillColor(kRed+1); ZZ->SetLineColor(kRed+1); fakes->SetFillColor(kGray+1); fakes->SetLineColor(kGray+1); data->SetMarkerStyle(kFullCircle); allmc->SetFillColor (kBlack); allmc->SetFillStyle (3345); allmc->SetLineColor (kWhite); allmc->SetLineWidth (0); allmc->SetMarkerColor(kOrange-2); allmc->SetMarkerSize (0); THStack* hs = new THStack(); if (energy.Contains("8TeV")) { WV->SetFillColor(kRed+1); // kAzure WV->SetLineColor(kRed+1); // kAzure VVV->SetFillColor(kRed+1); // kBlack VVV->SetLineColor(kRed+1); // kBlack hs->Add(VVV); hs->Add(WV); } hs->Add(Zgamma); hs->Add(ZZ); hs->Add(fakes); hs->Add(WZ); // Draw //---------------------------------------------------------------------------- TCanvas* canvas = new TCanvas(energy, energy); data->Draw("ep"); // Axis labels //---------------------------------------------------------------------------- TAxis* xaxis = data->GetXaxis(); TAxis* yaxis = data->GetYaxis(); xaxis->SetLabelFont ( 42); xaxis->SetLabelOffset(0.01); xaxis->SetLabelSize (0.05); xaxis->SetNdivisions ( 505); xaxis->SetTitleFont ( 42); xaxis->SetTitleOffset( 1.3); xaxis->SetTitleSize (0.05); yaxis->SetLabelFont ( 42); yaxis->SetLabelOffset(0.01); yaxis->SetLabelSize (0.05); yaxis->SetNdivisions ( 505); yaxis->SetTitleFont ( 42); yaxis->SetTitleOffset( 1.6); yaxis->SetTitleSize (0.05); xaxis->SetRangeUser(68, 112); xaxis->SetTitle("m_{#font[12]{ll}} (GeV)"); yaxis->SetTitle(Form("Events / %.0f GeV", data->GetBinWidth(0))); // Adjust scale //---------------------------------------------------------------------------- Float_t theMax = GetMaximumIncludingErrors(data); Float_t theMaxMC = GetMaximumIncludingErrors(allmc); if (theMaxMC > theMax) theMax = theMaxMC; data->SetMaximum(1.15 * theMax); // Legend //---------------------------------------------------------------------------- Double_t x0 = 0.635; Double_t y0 = 0.770; DrawTLegend(x0, y0 + 2.*(_yoffset+0.001), data, " Data", "ep"); DrawTLegend(x0, y0 + 1.*(_yoffset+0.001), WZ, " WZ", "f"); DrawTLegend(x0, y0, fakes, " Non-prompt leptons", "f"); DrawTLegend(x0, y0 - 1.*(_yoffset+0.001), ZZ, " MC background", "f"); DrawTLegend(x0, y0 - 2.*(_yoffset+0.001), allmc, " stat. #oplus syst.", "f"); // Finish it //---------------------------------------------------------------------------- data->SetTitle(""); DrawTLatex(_cmsTextFont, 0.215, 0.880, 0.055, 13, "CMS"); // DrawTLatex(_extraTextFont, 0.215, 0.826, 0.030, 13, "Preliminary"); DrawTLatex(_lumiTextFont, 0.940, 0.940, 0.040, 31, _lumiText); hs ->Draw("hist,same"); allmc->Draw("e2,same"); data ->Draw("ep,same"); canvas->GetFrame()->DrawClone(); canvas->RedrawAxis(); canvas->Update(); canvas->SaveAs("pdf/" + name + energy + ".pdf"); canvas->SaveAs("png/" + name + energy + ".png"); }
void BkgDemo_Diplot(TCanvas* c, TH1F** h, TLegend* l1, TLegend* l2){ //Make a split canvas, comparison of methods and tag above, bkg subtracted tag below // printf("\nDo BkgDemo_Diplot for canvas %s\n",c->GetName()); // printf("integrals stage1: tag %f usb %f lsb %f\n",h[1]->Integral(),h[5]->Integral(),h[6]->Integral()); TLatex * TEX_CMSPrelim; if(preliminary) TEX_CMSPrelim = new TLatex(0.177136,0.953368,"CMS Preliminary"); else TEX_CMSPrelim = new TLatex(0.177136,0.953368,"CMS"); PrettyLatex(TEX_CMSPrelim,0.03); TLatex * TEX_E_TeV = new TLatex(0.800251,0.953368,"#sqrt{s} = 8 TeV"); PrettyLatex(TEX_E_TeV,0.03); TLatex * TEX_lumi_fb = new TLatex(0.621859,0.953368,Form("#intL dt = %.1f fb^{-1}",Integrated_Luminosity_Data)); PrettyLatex(TEX_lumi_fb,0.03); string sp1 = string(c->GetName())+"_p1"; string sp2 = string(c->GetName())+"_p2"; TPad *p1 = new TPad((char*)sp1.c_str(),"",0.,0.3,1.,1.); p1->SetBottomMargin(0); p1->cd(); // c->Divide(1,2); // c->cd(1); PrettyHist(h[3],kRed); PrettyHist(h[5],kBlue); PrettyHist(h[1]); PrettyHist(h[6],kGreen); //PrettyHist(h[3],kRed); PrettyHist(h[7],kTeal); PrettyBlock2(h[5],kBlue,3354,2); //PrettyBlock(h[5],kBlue,string("//thatch"));//PrettyMarker(h[5],kBlue,4); PrettyMarker(h[1]); PrettyBlock2(h[6],kGreen,3345,2); //PrettyBlock(h[6],kGreen,string("\\thatch"));//PrettyMarker(h[6],kGreen,4); //PrettyMarker(h[3],kRed); PrettyMarker(h[7],kTeal); // h[5]->Scale(mHwidth/sidebandwidth);//lsb scaled // h[6]->Scale(mHwidth/sidebandwidth);//usb scaled // printf("integrals stage2: tag %f usb %f lsb %f\n",h[1]->Integral(),h[5]->Integral(),h[6]->Integral()); // printf("ranges maximi before setrange tag %f lsb %f, usb %f\n",h[1]->GetMaximum(),h[5]->GetMaximum(),h[6]->GetMaximum()); // printf("integrals stage3: tag %f usb %f lsb %f\n",h[1]->Integral(),h[5]->Integral(),h[6]->Integral()); // printf("ranges maximi before after tag %f lsb %f usb %f\n",h[1]->GetMaximum(),h[5]->GetMaximum(),h[6]->GetMaximum()); h[3]->SetFillStyle(0);//open rectangle h[3]->SetLineColor(kRed); h[3]->SetLineWidth(4); h[6]->SetMinimum(0.0); //float linmax = h[6]->GetMaximum(); //float linmin = h[6]->GetMinimum(); playNiceWithLegend(h[6],0.30,0.0); playNiceWithLegend(h[3],0.30,0.0); playNiceWithLegend(h[5],0.30,0.0); playNiceWithLegend(h[1],0.30,0.0); SameRange(h[3],h[1]); SameRange(h[3],h[5],h[6]); SameRange(h[3],h[1]); h[3]->Draw("e2p"); h[5]->Draw("e2psame"); h[6]->Draw("e2psame"); h[3]->Draw("e2psame"); //if(showTag) h[1]->Draw("e1psame");//tag TPad *p2 = new TPad((char*)sp2.c_str(),"",0.,0.125,1.,0.3); p2->SetTopMargin(0); p2->cd(); // c->cd(2); TAxis * x = h[7]->GetXaxis(); TAxis * y = h[7]->GetYaxis(); float fontsize = 0.25; float fontsizeY = 0.10; x->SetTitleSize(fontsize); y->SetTitleSize(fontsizeY); x->SetLabelSize(fontsize); y->SetLabelSize(fontsizeY); h[7]->GetYaxis()->SetRangeUser(0.,2.); h[7]->Draw("e1p"); TLine *OneLine = new TLine(x->GetXmin(),1.0,x->GetXmax(),1.0); OneLine->SetLineColor(kBlack); OneLine->SetLineWidth(2); OneLine->SetLineStyle(7);//dashed. OneLine->Draw("same"); h[7]->Draw("e1psame"); p1->cd(); // c->cd(1); if(showTag) l1->AddEntry(h[1],"Higgs Mass Region"); TH1F * box = new TH1F("box","asdf",1,0,1); box->SetMarkerColor(kRed); box->SetMarkerStyle(25); box->SetMarkerSize(2); box->SetLineColor(0); l1->AddEntry(box,"Data Driven Background"); l1->AddEntry(h[5],"Lower Mass Sideband"); l1->AddEntry(h[6], "Upper Mass Sideband"); l1->Draw("same"); TEX_CMSPrelim->Draw("same"); TEX_E_TeV->Draw("same"); TEX_lumi_fb->Draw("same"); p2->cd(); //c->cd(2); l2->SetTextSize(fontsize*0.8); l2->AddEntry(h[7],"Lower/Upper Sideband Ratio"); l2->Draw("same"); c->cd(); p1->Draw(); p2->Draw(); }
void draw() { gROOT->Reset(); // first make a canvas and a 2D histogram for the axes TCanvas* canvas = new TCanvas("canvas", "canvas", 10, 10, 500, 500); canvas->SetFillColor(0); canvas->SetBorderMode(0); canvas->SetFrameBorderMode(0); // need this to turn off red hist frame! gROOT->SetStyle("Plain"); canvas->UseCurrentStyle(); gPad->SetLeftMargin(0.15); gPad->SetRightMargin(0.05); gPad->SetTopMargin(0.07); gPad->SetBottomMargin(0.17); gStyle->SetOptStat(0); gStyle->SetTitleBorderSize(0); gStyle->SetTitleSize(0.04); gStyle->SetTextFont(42); gStyle->SetTextSize(0.04); gStyle->SetTitleFont(42, "hxy"); // for histogram and axis title gStyle->SetLabelFont(42, "xyz"); // for axis labels (values) gStyle->SetTitleOffset(0.8, "h"); // what does this do? gStyle->SetTitleX(0.15); gStyle->SetTitleY(0.99); gROOT->ForceStyle(); // can make histogram or alternatively use the histograms automatically // connected to the TF1 or TGraph objects double xMin = 0.1; double xMax = 100.; // double yMin = 0.1; // double yMax = 10.; double yMin = 0.; double yMax = 8.; TH2F* axhist = new TH2F("axhist", "title", 10, xMin, xMax, 10, yMin, yMax); axhist->SetTitle(""); axhist->SetXTitle("b"); axhist->SetYTitle("med[Z|s]"); gPad->SetLogx(1); gPad->SetLogy(0); double u[20]; double x[20][500]; // Read in data from file and insert in TTree TString fileName; // cout << "Enter file name: "; // cin >> fileName; fileName = "medsig_s5_rel_bi.txt"; ifstream inFile; inFile.open(fileName); if (inFile.fail()) { cout << "Couldn't open file!" << endl; exit(1); } bool readLine = true; int lineNum = 0; int ncol; while ( readLine ){ TString line; stringstream ss; line.ReadLine(inFile); readLine = inFile.good(); if ( readLine ) { TString firstChar = line(0,1); bool useLine = firstChar != "#"; if ( useLine ){ int i = 0; stringstream ss; ss << line; // put whole line into ss TString token; bool getToken = true; while ( getToken ) { ss >> token; // extracts one token if ( token.Length() > 0 ) { u[i] = token.Atof(); i++; } else { getToken = false; } } // getToken ncol = i; for (int i=0; i<ncol; i++){ x[i][lineNum] = u[i]; } lineNum++; } // useLine } // readLine } // readLine int n = lineNum; inFile.close(); // for (int i=0; i<n; i++){ // cout << i << " " << x[0][i] << " " << x[3][i] << " " // << x[4][i] << endl; // } TGraph* tg1 = new TGraph(n, x[0], x[1]); TGraph* tg2 = new TGraph(n, x[0], x[2]); TGraph* tg3 = new TGraph(n, x[0], x[3]); TGraph* tg4 = new TGraph(n, x[0], x[4]); TGraph* tg5 = new TGraph(n, x[0], x[5]); TGraph* tg6 = new TGraph(n, x[0], x[6]); TGraph* tg7 = new TGraph(n, x[0], x[7]); TGraph* tg8 = new TGraph(n, x[0], x[8]); TGraph* tg9 = new TGraph(n, x[0], x[9]); TGraph* tg10 = new TGraph(n, x[0], x[10]); TGraph* tg11 = new TGraph(n, x[0], x[11]); TGraph* tg12 = new TGraph(n, x[0], x[12]); TGraph* tg13 = new TGraph(n, x[0], x[13]); TGraph* tg14 = new TGraph(n, x[0], x[14]); TGraph* tg15 = new TGraph(n, x[0], x[15]); TAxis* xa = axhist->GetXaxis(); TAxis* ya = axhist->GetYaxis(); xa->SetTitleOffset(1.2); // factor multiplies default offset ya->SetTitleOffset(1.1); xa->SetLabelOffset(0.005); ya->SetLabelOffset(0.005); xa->SetTickLength(0.015); // default = 0.03 ya->SetTickLength(0.015); // default = 0.03 xa->SetTitleSize(0.05); ya->SetTitleSize(0.05); // gPad->SetLogx(1); // xa->SetLimits(90., 700.); xa->SetNdivisions(-5); // negative value should force number of divisions? ya->SetNdivisions(-4); xa->SetLabelSize(0.05); ya->SetLabelSize(0.05); // Draw axes and then add stuff // kDot=1, kPlus, kStar, kCircle=4, kMultiply=5, // kFullDotSmall=6, kFullDotMedium=7, kFullDotLarge=8, // kFullCircle=20, kFullSquare=21, kFullTriangleUp=22, // kFullTriangleDown=23, kOpenCircle=24, kOpenSquare=25, // kOpenTriangleUp=26, kOpenDiamond=27, kOpenCross=28, // kFullStar=29, kOpenStar=30 axhist->Draw(); tg1->SetLineColor(kRed); tg1->SetLineWidth(2); tg1->SetLineStyle(2); tg1->SetMarkerColor(kRed); tg1->SetMarkerSize(0.8); tg1->SetMarkerStyle(20); tg1->Draw("L,same"); // or P for points tg2->SetLineColor(kRed); tg2->SetLineWidth(2); tg2->SetLineStyle(2); tg2->SetMarkerColor(kRed); tg2->SetMarkerSize(0.8); tg2->SetMarkerStyle(20); tg2->Draw("L,same"); // or P for points tg3->SetLineColor(kRed); tg3->SetLineWidth(2); tg3->SetLineStyle(2); tg3->SetMarkerColor(kRed); tg3->SetMarkerSize(0.8); tg3->SetMarkerStyle(20); // tg3->Draw("L,same"); // or P for points tg4->SetLineColor(kBlue); tg4->SetLineWidth(2); tg4->SetLineStyle(1); tg4->SetMarkerColor(kBlue); tg4->SetMarkerSize(0.8); tg4->SetMarkerStyle(20); tg4->Draw("L,same"); // or P for points tg5->SetLineColor(kBlue); tg5->SetLineWidth(2); tg5->SetLineStyle(1); tg5->SetMarkerColor(kBlue); tg5->SetMarkerSize(0.8); tg5->SetMarkerStyle(20); tg5->Draw("L,same"); // or P for points tg6->SetLineColor(kBlue); tg6->SetLineWidth(2); tg6->SetLineStyle(1); tg6->SetMarkerColor(kBlue); tg6->SetMarkerSize(0.8); tg6->SetMarkerStyle(20); // tg6->Draw("L,same"); // or P for points tg7->SetLineColor(kRed); tg7->SetLineWidth(2); tg7->SetLineStyle(1); tg7->SetMarkerColor(kRed); tg7->SetMarkerSize(0.8); tg7->SetMarkerStyle(21); // tg7->Draw("P,same"); // or P for points tg8->SetLineColor(kRed); tg8->SetLineWidth(2); tg8->SetLineStyle(1); tg8->SetMarkerColor(kRed); tg8->SetMarkerSize(0.8); tg8->SetMarkerStyle(21); // tg8->Draw("P,same"); // or P for points tg9->SetLineColor(kRed); tg9->SetLineWidth(2); tg9->SetLineStyle(2); tg9->SetMarkerColor(kRed); tg9->SetMarkerSize(0.8); tg9->SetMarkerStyle(21); // tg9->Draw("P,same"); // or P for points tg10->SetLineColor(kBlack); tg10->SetLineWidth(2); tg10->SetLineStyle(2); tg10->SetMarkerColor(kBlack); tg10->SetMarkerSize(0.8); tg10->SetMarkerStyle(20); tg10->Draw("P,same"); // or P for points tg11->SetLineColor(kBlack); tg11->SetLineWidth(2); tg11->SetLineStyle(2); tg11->SetMarkerColor(kBlack); tg11->SetMarkerSize(0.8); tg11->SetMarkerStyle(20); tg11->Draw("P,same"); // or P for points tg12->SetLineColor(kBlack); tg12->SetLineWidth(2); tg12->SetLineStyle(2); tg12->SetMarkerColor(kBlack); tg12->SetMarkerSize(0.8); tg12->SetMarkerStyle(20); // tg12->Draw("P,same"); // or P for points tg13->SetLineColor(kBlack); tg13->SetLineWidth(2); tg13->SetLineStyle(3); tg13->SetMarkerColor(kBlack); tg13->SetMarkerSize(0.8); tg13->SetMarkerStyle(20); // tg13->Draw("L,same"); // or P for points tg14->SetLineColor(kBlack); tg14->SetLineWidth(2); tg14->SetLineStyle(3); tg14->SetMarkerColor(kBlack); tg14->SetMarkerSize(0.8); tg14->SetMarkerStyle(20); // tg14->Draw("L,same"); // or P for points tg15->SetLineColor(kBlack); tg15->SetLineWidth(2); tg15->SetLineStyle(3); tg15->SetMarkerColor(kBlack); tg15->SetMarkerSize(0.8); tg15->SetMarkerStyle(20); // tg15->Draw("L,same"); // or P for points TLegend* leg = new TLegend(0.53, 0.48, 0.95, .73); // x1, y1, x2, y2 leg->SetTextSize(0.05); leg->SetTextFont(42); leg->SetBorderSize(0); leg->SetFillColor(0); leg->AddEntry(tg1, " s / #sqrt{b + #sigma_{b}^{2}}", "l"); leg->AddEntry(tg4, " Z_{A}", "l"); // leg->AddEntry(tg7, " #sqrt{q0}, MC median", "p"); leg->AddEntry(tg10, " Monte Carlo", "p"); // leg->AddEntry(tg13, " Z_{bi}" , "l"); // leg->AddEntry(tg4, "s = 0.03", "l"); leg->Draw(); TLatex* tl = new TLatex(); tl->SetTextAlign(11); tl->SetTextSize(0.05); tl->SetTextFont(42); tl->SetNDC(); // tl->DrawLatex(.76, 0.33, "s = 2"); // tl->DrawLatex(.76, 0.465, "s = 5"); // tl->DrawLatex(.76, 0.6, "s = 10"); // tl->DrawLatex(.76, 0.73, "s = 20"); // tl->DrawLatex(.5, .77, "#sigma_{b}/b = 0.2, 0.5, 1"); tl->DrawLatex(.5, .77, "#sigma_{b}/b = 0.2, 0.5"); tl->DrawLatex(.5, .85, "s = 5"); // Fix idiotic problem with frame TLine* tli = new TLine(); tli->SetLineStyle(1); tli->SetLineWidth(1); tli->DrawLine(xMin, yMin, xMax, yMin); tli->DrawLine(xMax, yMin, xMax, yMax); tli->DrawLine(xMin, yMax, xMax, yMax); tli->DrawLine(xMin, yMin, xMin, yMax); TPostScript psfile("medsig_s5_rel_bi.eps", 113); // 113 makes eps canvas->Draw(); psfile.Close(); // canvas->Print("plot.gif", "gif"); }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // drawFigure6 // // logy = 0 // logy = 1 // //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void drawFigure6(Int_t logy = 0) { gInterpreter->ExecuteMacro("WZPaperStyle.C"); gSystem->mkdir("pdf", kTRUE); gSystem->mkdir("png", kTRUE); // Read the input file //---------------------------------------------------------------------------- TString name = "WZ_PtZ_plot_allCh_largeATGC"; TFile* file = new TFile("rootfiles/" + name + ".root", "read"); TCanvas* c1 = (TCanvas*)file->Get("c1_allCh"); TH1F* data = (TH1F*)c1->FindObject("histo_data_3e"); TH1F* aTGC_dk = (TH1F*)c1->FindObject("histo_aTGC_dk_3e"); TH1F* aTGC_lam = (TH1F*)c1->FindObject("histo_aTGC_lam_3e"); TH1F* aTGC_dg = (TH1F*)c1->FindObject("histo_aTGC_dg_3e"); TH1F* WZ = (TH1F*)c1->FindObject("histo_SM_3e"); TH1F* fakes = (TH1F*)c1->FindObject("fake_0"); TH1F* ZZ = (TH1F*)c1->FindObject("total_bkg_rebined_ZZ_0"); TH1F* Zgamma = (TH1F*)c1->FindObject("total_bkg_rebined_Zgamma_0"); TH1F* WV = (TH1F*)c1->FindObject("total_bkg_rebined_WV_0"); TH1F* VVV = (TH1F*)c1->FindObject("total_bkg_rebined_VVV_0"); WZ->SetFillColor(kOrange-2); WZ->SetLineColor(kOrange-2); Zgamma->SetFillColor(kRed+1); Zgamma->SetLineColor(kRed+1); ZZ->SetFillColor(kRed+1); ZZ->SetLineColor(kRed+1); fakes->SetFillColor(kGray+1); fakes->SetLineColor(kGray+1); WV->SetFillColor(kRed+1); WV->SetLineColor(kRed+1); VVV->SetFillColor(kRed+1); VVV->SetLineColor(kRed+1); // Draw //---------------------------------------------------------------------------- TCanvas* canvas = new TCanvas("canvas", "canvas"); canvas->SetLogy(logy); data->Draw("ep"); // Axis labels //---------------------------------------------------------------------------- TAxis* xaxis = data->GetXaxis(); TAxis* yaxis = data->GetYaxis(); xaxis->SetLabelFont ( 42); xaxis->SetLabelOffset(0.01); xaxis->SetLabelSize (0.05); xaxis->SetNdivisions ( 505); xaxis->SetTitleFont ( 42); xaxis->SetTitleOffset( 1.2); xaxis->SetTitleSize (0.05); yaxis->SetLabelFont ( 42); yaxis->SetLabelOffset(0.01); yaxis->SetLabelSize (0.05); yaxis->SetNdivisions ( 505); yaxis->SetTitleFont ( 42); yaxis->SetTitleOffset( 1.6); yaxis->SetTitleSize (0.05); xaxis->SetTitle("p_{T}^{Z} (GeV)"); yaxis->SetTitle(Form("Events / %.0f GeV", data->GetBinWidth(0))); // Adjust scale //---------------------------------------------------------------------------- Float_t theMax = GetMaximumIncludingErrors(data); Float_t theMaxMC = GetMaximumIncludingErrors(aTGC_dk); if (theMaxMC > theMax) theMax = theMaxMC; if (canvas->GetLogy()) { data->SetMaximum(15 * theMax); data->SetMinimum(1); } else { data->SetMaximum(1.2 * theMax); } // Legend //---------------------------------------------------------------------------- Double_t x0; Double_t y0; if (logy) { x0 = 0.630; y0 = 0.765; DrawTLegend(x0 - 0.37, y0 + 2.*(_yoffset+0.001), data, " Data", "ep"); DrawTLegend(x0 - 0.37, y0 + 1.*(_yoffset+0.001), aTGC_dk, " WZ aTGC (#Delta#kappa^{Z} = 0.6)", "l"); DrawTLegend(x0 - 0.37, y0, aTGC_dg, " WZ aTGC (#Deltag^{Z}_{1} = -0.06)", "l"); DrawTLegend(x0 - 0.37, y0 - 1.*(_yoffset+0.001), aTGC_lam, " WZ aTGC (#lambda = 0.04)", "l"); DrawTLegend(x0, y0 + 2.*(_yoffset+0.001), WZ, " WZ", "f"); DrawTLegend(x0, y0 + 1.*(_yoffset+0.001), fakes, " Non-prompt leptons", "f"); DrawTLegend(x0, y0, ZZ, " MC background", "f"); } else { x0 = 0.570; y0 = 0.755; DrawTLegend(x0, y0 + 2.*(_yoffset+0.001), data, " Data", "ep"); DrawTLegend(x0, y0 + 1.*(_yoffset+0.001), aTGC_dk, " WZ aTGC (#Delta#kappa^{Z} = 0.6)", "l"); DrawTLegend(x0, y0, aTGC_dg, " WZ aTGC (#Deltag^{Z}_{1} = -0.06)", "l"); DrawTLegend(x0, y0 - 1.*(_yoffset+0.001), aTGC_lam, " WZ aTGC (#lambda = 0.04)", "l"); DrawTLegend(x0, y0 - 2.*(_yoffset+0.001), WZ, " WZ", "f"); DrawTLegend(x0, y0 - 3.*(_yoffset+0.001), fakes, " Non-prompt leptons", "f"); DrawTLegend(x0, y0 - 4.*(_yoffset+0.001), ZZ, " MC background", "f"); } // Finish it //---------------------------------------------------------------------------- data->SetTitle(""); if (logy) { DrawTLatex(_cmsTextFont, 0.190, 0.94, 0.055, 11, "CMS"); // DrawTLatex(_extraTextFont, 0.315, 0.94, 0.030, 11, "Preliminary"); } else { DrawTLatex(_cmsTextFont, 0.215, 0.891, 0.055, 13, "CMS"); // DrawTLatex(_extraTextFont, 0.215, 0.837, 0.030, 13, "Preliminary"); } DrawTLatex(_lumiTextFont, 0.940, 0.94, 0.040, 31, "19.6 fb^{-1} (8 TeV)"); WZ ->Draw("hist,same"); aTGC_dk ->Draw("hist,same"); aTGC_lam->Draw("hist,same"); aTGC_dg ->Draw("hist,same"); fakes ->Draw("hist,same"); ZZ ->Draw("hist,same"); Zgamma ->Draw("hist,same"); WV ->Draw("hist,same"); VVV ->Draw("hist,same"); data ->Draw("ep,same"); canvas->GetFrame()->DrawClone(); canvas->RedrawAxis(); canvas->Update(); TString cname = name; if (logy) cname += "_log_range"; canvas->SaveAs("pdf/" + cname + ".pdf"); canvas->SaveAs("png/" + cname + ".png"); }
void makePlot(const std::string& inputFilePath, const std::string& canvasName, const std::string& sample, int massPoint, const std::string& channel, double k, const std::string& inputFileName, const std::string& outputFilePath, const std::string& outputFileName) { std::string inputFileName_full = Form("%s%s", inputFilePath.data(), inputFileName.data()); TFile* inputFile = new TFile(inputFileName_full.data()); if ( !inputFile ) { std::cerr << "Failed to open input file = " << inputFileName_full << " !!" << std::endl; assert(0); } inputFile->ls(); TCanvas* canvas = dynamic_cast<TCanvas*>(inputFile->Get(canvasName.data())); if ( !canvas ) { std::cerr << "Failed to load canvas = " << canvasName << " !!" << std::endl; assert(0); } int idxPad = -1; if ( massPoint == 90 ) idxPad = 1; if ( massPoint == 125 ) idxPad = 2; if ( massPoint == 200 ) idxPad = 3; if ( massPoint == 300 ) idxPad = 4; if ( massPoint == 500 ) idxPad = 5; if ( massPoint == 800 ) idxPad = 6; if ( !(idxPad >= 1 && idxPad <= 6) ) { std::cerr << "Invalid sample = " << sample << " !!" << std::endl; assert(0); } TVirtualPad* pad = canvas->GetPad(idxPad); std::cout << "pad = " << pad << ": ClassName = " << pad->ClassName() << std::endl; TCanvas* canvas_new = new TCanvas("canvas_new", "canvas_new", 900, 800); canvas_new->SetFillColor(10); canvas_new->SetBorderSize(2); canvas_new->SetTopMargin(0.065); canvas_new->SetLeftMargin(0.17); canvas_new->SetBottomMargin(0.165); canvas_new->SetRightMargin(0.015); canvas_new->SetLogx(true); canvas_new->SetLogy(true); canvas_new->Draw(); canvas_new->cd(); //TList* pad_primitives = canvas->GetListOfPrimitives(); TList* pad_primitives = pad->GetListOfPrimitives(); TH1* histogramCA = 0; TH1* histogramSVfit = 0; TH1* histogramSVfitMEMkEq0 = 0; TH1* histogramSVfitMEMkNeq0 = 0; TIter pad_nextObj(pad_primitives); while ( TObject* obj = pad_nextObj() ) { std::string objName = ""; if ( dynamic_cast<TNamed*>(obj) ) objName = (dynamic_cast<TNamed*>(obj))->GetName(); std::cout << "obj = " << obj << ": name = " << objName << ", type = " << obj->ClassName() << std::endl; TH1* tmpHistogram = dynamic_cast<TH1*>(obj); if ( tmpHistogram ) { std::cout << "tmpHistogram:" << " fillColor = " << tmpHistogram->GetFillColor() << ", fillStyle = " << tmpHistogram->GetFillStyle() << "," << " lineColor = " << tmpHistogram->GetLineColor() << ", lineStyle = " << tmpHistogram->GetLineStyle() << ", lineWidth = " << tmpHistogram->GetLineWidth() << "," << " markerColor = " << tmpHistogram->GetMarkerColor() << ", markerStyle = " << tmpHistogram->GetMarkerStyle() << ", markerSize = " << tmpHistogram->GetMarkerSize() << "," << " integral = " << tmpHistogram->Integral() << std::endl; std::cout << "(mean = " << tmpHistogram->GetMean() << ", rms = " << tmpHistogram->GetRMS() << ": rms/mean = " << (tmpHistogram->GetRMS()/tmpHistogram->GetMean()) << ")" << std::endl; if ( tmpHistogram->GetLineColor() == 416 ) histogramCA = tmpHistogram; if ( tmpHistogram->GetLineColor() == 600 ) histogramSVfit = tmpHistogram; if ( tmpHistogram->GetLineColor() == 616 ) histogramSVfitMEMkEq0 = tmpHistogram; if ( tmpHistogram->GetLineColor() == 632 ) histogramSVfitMEMkNeq0 = tmpHistogram; } } if ( !(histogramCA && histogramSVfit && histogramSVfitMEMkEq0 && histogramSVfitMEMkNeq0) ) { std::cerr << "Failed to load histograms !!" << std::endl; assert(0); } //gStyle->SetLineStyleString(2,"40 10 10 10 10 10 10 10"); //gStyle->SetLineStyleString(3,"25 15"); //gStyle->SetLineStyleString(4,"60 25"); //int colors[4] = { kBlack, kGreen - 6, kBlue - 7, kMagenta - 7 }; int colors[4] = { 28, kGreen - 6, kBlue - 7, kBlack }; //int lineStyles[4] = { 2, 3, 4, 1 }; int lineStyles[4] = { 7, 1, 1, 1 }; //int lineWidths[4] = { 3, 3, 4, 3 }; int lineWidths[4] = { 3, 3, 1, 1 }; int markerStyles[4] = { 20, 25, 21, 24 }; int markerSizes[4] = { 2, 2, 2, 2 }; histogramCA->SetFillColor(0); histogramCA->SetFillStyle(0); histogramCA->SetLineColor(colors[0]); histogramCA->SetLineStyle(lineStyles[0]); histogramCA->SetLineWidth(lineWidths[0]); histogramCA->SetMarkerColor(colors[0]); histogramCA->SetMarkerStyle(markerStyles[0]); histogramCA->SetMarkerSize(markerSizes[0]); histogramSVfit->SetFillColor(0); histogramSVfit->SetFillStyle(0); histogramSVfit->SetLineColor(colors[1]); histogramSVfit->SetLineStyle(lineStyles[1]); histogramSVfit->SetLineWidth(lineWidths[1]); histogramSVfit->SetMarkerColor(colors[1]); histogramSVfit->SetMarkerStyle(markerStyles[1]); histogramSVfit->SetMarkerSize(markerSizes[1]); histogramSVfitMEMkEq0->SetFillColor(0); histogramSVfitMEMkEq0->SetFillStyle(0); histogramSVfitMEMkEq0->SetLineColor(colors[2]); histogramSVfitMEMkEq0->SetLineStyle(lineStyles[2]); histogramSVfitMEMkEq0->SetLineWidth(lineWidths[2]); histogramSVfitMEMkEq0->SetMarkerColor(colors[2]); histogramSVfitMEMkEq0->SetMarkerStyle(markerStyles[2]); histogramSVfitMEMkEq0->SetMarkerSize(markerSizes[2]); // CV: fix pathological bins at high mass for which dN/dm increases int numBins = histogramSVfitMEMkEq0->GetNbinsX(); for ( int idxBin = 1; idxBin <= numBins; ++idxBin ) { double binCenter = histogramSVfitMEMkEq0->GetBinCenter(idxBin); if ( (channel == "#tau_{h}#tau_{h}" && massPoint == 500 && binCenter > 1500.) || (channel == "#tau_{h}#tau_{h}" && massPoint == 800 && binCenter > 2000.) || (channel == "#mu#tau_{h}" && massPoint == 500 && binCenter > 1500.) || (channel == "#mu#tau_{h}" && massPoint == 800 && binCenter > 2500.) ) { histogramSVfitMEMkEq0->SetBinContent(idxBin, 0.); } } histogramSVfitMEMkNeq0->SetFillColor(0); histogramSVfitMEMkNeq0->SetFillStyle(0); histogramSVfitMEMkNeq0->SetLineColor(colors[3]); histogramSVfitMEMkNeq0->SetLineStyle(lineStyles[3]); histogramSVfitMEMkNeq0->SetLineWidth(lineWidths[3]); histogramSVfitMEMkNeq0->SetMarkerColor(colors[3]); histogramSVfitMEMkNeq0->SetMarkerStyle(markerStyles[3]); histogramSVfitMEMkNeq0->SetMarkerSize(markerSizes[3]); TAxis* xAxis = histogramCA->GetXaxis(); xAxis->SetTitle("m_{#tau#tau} [GeV]"); xAxis->SetTitleOffset(1.15); xAxis->SetTitleSize(0.070); xAxis->SetTitleFont(42); xAxis->SetLabelOffset(0.010); xAxis->SetLabelSize(0.055); xAxis->SetLabelFont(42); xAxis->SetTickLength(0.040); xAxis->SetNdivisions(510); //double xMin = 20.; //double xMax = xAxis->GetXmax(); //xAxis->SetRangeUser(xMin, xMax); TAxis* yAxis = histogramCA->GetYaxis(); yAxis->SetTitle("dN/dm_{#tau#tau} [1/GeV]"); yAxis->SetTitleOffset(1.20); yAxis->SetTitleSize(0.070); yAxis->SetTitleFont(42); yAxis->SetLabelOffset(0.010); yAxis->SetLabelSize(0.055); yAxis->SetLabelFont(42); yAxis->SetTickLength(0.040); yAxis->SetNdivisions(505); double massPoint_double = 0.; if ( massPoint == 90 ) massPoint_double = 91.2; else massPoint_double = massPoint; double dLog = (TMath::Log(5.*massPoint_double) - TMath::Log(50.))/25.; // xMin = 50, xMax = 5*massPoint, numBins = 25 double binWidth = TMath::Exp(TMath::Log(massPoint_double) + 0.5*dLog) - TMath::Exp(TMath::Log(massPoint_double) - 0.5*dLog); double sf_binWidth = 1./binWidth; std::cout << "massPoint = " << massPoint << ": sf_binWidth = " << sf_binWidth << std::endl; histogramCA->SetTitle(""); histogramCA->SetStats(false); histogramCA->SetMaximum(sf_binWidth*0.79); histogramCA->SetMinimum(sf_binWidth*1.1e-4); histogramCA->Draw("hist"); histogramSVfit->Draw("histsame"); //histogramSVfitMEMkEq0->Draw("histsame"); histogramSVfitMEMkEq0->Draw("epsame"); //histogramSVfitMEMkNeq0->Draw("histsame"); histogramSVfitMEMkNeq0->Draw("epsame"); histogramCA->Draw("axissame"); //TPaveText* label_sample = new TPaveText(0.21, 0.86, 0.46, 0.94, "NDC"); TPaveText* label_sample = new TPaveText(0.1700, 0.9475, 0.4600, 1.0375, "NDC"); label_sample->SetFillStyle(0); label_sample->SetBorderSize(0); label_sample->AddText(sample.data()); label_sample->SetTextFont(42); label_sample->SetTextSize(0.055); label_sample->SetTextColor(1); label_sample->SetTextAlign(13); label_sample->Draw(); //TLegend* legend_new = new TLegend(0.225, 0.52, 0.41, 0.82, NULL, "brNDC"); TLegend* legend_new = new TLegend(0.30, 0.30, 0.80, 0.80, NULL, "brNDC"); legend_new->SetFillColor(10); legend_new->SetFillStyle(0); legend_new->SetBorderSize(0); legend_new->SetTextFont(42); legend_new->SetTextSize(0.055); legend_new->SetTextColor(1); legend_new->SetMargin(0.20); legend_new->AddEntry(histogramCA, "CA", "l"); legend_new->AddEntry(histogramSVfit, "SVfit", "l"); //legend_new->AddEntry(histogramSVfitMEMkEq0, "SVfitMEM (k=0)", "l"); legend_new->AddEntry(histogramSVfitMEMkEq0, "SVfitMEM (k=0)", "p"); //legend_new->AddEntry(histogramSVfitMEMkNeq0, Form("SVfitMEM(k=%1.0f)", k), "l"); legend_new->AddEntry(histogramSVfitMEMkNeq0, Form("SVfitMEM (k=%1.0f)", k), "p"); //legend_new->Draw(); double label_channel_y0; if ( channel == "e#mu" ) label_channel_y0 = 0.9275; else if ( channel == "#mu#tau_{h}" ) label_channel_y0 = 0.9400; else if ( channel == "#tau_{h}#tau_{h}" ) label_channel_y0 = 0.9350; else { std::cerr << "Invalid channel = " << channel << " !!" << std::endl; assert(0); } TPaveText* label_channel = new TPaveText(0.895, label_channel_y0, 0.975, label_channel_y0 + 0.055, "NDC"); label_channel->SetFillStyle(0); label_channel->SetBorderSize(0); label_channel->AddText(channel.data()); label_channel->SetTextFont(62); label_channel->SetTextSize(0.055); label_channel->SetTextColor(1); label_channel->SetTextAlign(31); label_channel->Draw(); canvas_new->Update(); std::string outputFileName_full = Form("%s%s", outputFilePath.data(), outputFileName.data()); size_t idx = outputFileName_full.find_last_of('.'); std::string outputFileName_plot = std::string(outputFileName_full, 0, idx); canvas_new->Print(std::string(outputFileName_plot).append(".pdf").data()); canvas_new->Print(std::string(outputFileName_plot).append(".root").data()); std::string channel_string; if ( channel == "e#mu" ) channel_string = "emu"; else if ( channel == "#mu#tau_{h}" ) channel_string = "muhad"; else if ( channel == "#tau_{h}#tau_{h}" ) channel_string = "hadhad"; else { std::cerr << "Invalid channel = " << channel << " !!" << std::endl; assert(0); } std::string outputFileName_legend = Form("makeSVfitMEM_PerformancePlots_legend_%s.pdf", channel_string.data()); makePlot_legend(legend_new, outputFilePath, outputFileName_legend); delete label_sample; delete legend_new; delete label_channel; delete canvas_new; delete inputFile; }
void finalSpectra( const char* inCentral= "links/P01hi.central.2000.hist/finish_cut88778999_iter3.hist.root", const char* inMinbias= "links/P01hi.minbias.2000.hist/finish_cut97778999_iter3.hist.root", const char* inPeripheral= "links/P01hi.minbias.2000.hist/finish_cut57778999_iter3.hist.root", const char* psDir="psFinal" ) { gSystem->Clear(); TFile* rCentral=new TFile(inCentral); TFile* rMinbias=new TFile(inMinbias); TFile* rPeripheral=new TFile(inPeripheral); int DOKLUDGE=1; // // get the graphs // char name[200],title[200],txt[500]; char* sign=0; // "Minus" int bin=0; setName(name,"gSpecCorrected",bin,sign); TGraphAsymmErrors* gCentralX=(TGraphAsymmErrors*)rCentral->Get(name); TGraphAsymmErrors* gMinbiasX=(TGraphAsymmErrors*)rMinbias->Get(name); TGraphAsymmErrors* gPeripheralX=(TGraphAsymmErrors*)rPeripheral->Get(name); // // kludges // if(DOKLUDGE){ cout << ">>>>WARNING DOING KLUDGE" << endl; cout << ">>>>WARNING DOING KLUDGE" << endl; cout << ">>>>WARNING DOING KLUDGE" << endl; kludgeBackground(gCentralX,0.08); kludgeBackground(gMinbiasX,0.08); kludgeBackground(gPeripheralX,0.05); kludgeSystematics(gCentralX); kludgeSystematics(gMinbiasX); kludgeSystematics(gPeripheralX); } // low pt stuff TGraphAsymmErrors* gCentralLowPt=makeHMinus(2); TGraphAsymmErrors* gMinbiasLowPt=makeHMinus(0); TGraphAsymmErrors* gPeripheralLowPt=makeHMinus(1); // ua1 float sigmaUA1_200=42; float ua1Scale200 = 2.*3.14159/sigmaUA1_200; float sigmaUA1_130=40.5; float ua1Scale130= 2.*3.14159/sigmaUA1_130; TGraphErrors* gUA1Data200=ua1Data200(); scale(gUA1Data200,ua1Scale200); TF1* fUA1Fit130 = ua1Fit130(ua1Scale130); // remove some error bars gCentralLowPt=removeXErrors(gCentralLowPt); gMinbiasLowPt=removeXErrors(gMinbiasLowPt); gPeripheralLowPt=removeXErrors(gPeripheralLowPt); // gStyles gStyle->SetOptStat(0); gStyle->SetOptTitle(0); gStyle->SetPadTickX(1); gStyle->SetPadTickY(1); // follow manuel in the fonts int font = 42; gStyle->SetTextFont(font); gStyle->SetTitleFont(font); gStyle->SetLabelFont(font,"x"); gStyle->SetLabelFont(font,"y"); // TLatex TLatex* ltx=new TLatex; TCanvas* c1=new TCanvas("c1","c1",400,500); // draw the spectra double xMin=0,xMax=6; double yMin=1e-7,yMax=10000; double textSize=0.03; double titleSize=0.04; double markerSize=1; double labelSize=0.03; double yTitleOffset=1.2; double xTitleOffset=0.8; double tickSize=9990; TAxis* axis; c1->cd(); gPad->SetLogy(); int centralMarker=29; int minbiasMarker=8; int peripheralMarker=22; int hMinusMarker=21; int ua1Marker=4; // central // gCentral=removeXErrors(gCentralX); gCentral->SetMinimum(yMin); gCentral->SetMaximum(yMax); gCentral->SetMarkerStyle(centralMarker); gCentral->SetMarkerSize(markerSize+.2); gCentral->Draw("ap"); strcpy(txt,"1/p_{T} d^{2}N^{(h^{-}+h^{+})/2}/dp_{T}d#eta #cbar_{|#eta|<0.5}(GeV/c)^{-2}"); // yaxis axis=gCentral->GetYaxis(); axis->SetTitle(txt); axis->SetTitleSize(titleSize); axis->SetTitleOffset(yTitleOffset); axis->SetLabelSize(labelSize); // xaxis axis=gCentral->GetXaxis(); axis->SetTitle("p_{T} (GeV/c)"); axis->SetTitleSize(titleSize); axis->SetTitleOffset(xTitleOffset); axis->SetLabelOffset(0.003); axis->SetLabelSize(labelSize); axis->SetLimits(xMin,xMax); // low pt central gCentralLowPt->SetMarkerStyle(centralMarker); gCentralLowPt->SetMarkerSize(markerSize); gCentralLowPt->Draw("p"); // draw bin widths // drawAxisBins(gCentralX,tickSize,yMax); // TLine* line=new TLine; // line->DrawLineNDC((2/6)*(1./.8)+.1,.8,2/6*(1./.8)+.1 ,.9); // minbias // // remove x errors gMinbias=removeXErrors(gMinbiasX); gMinbias->SetMarkerStyle(minbiasMarker); gMinbias->SetMarkerSize(markerSize); gMinbias->Draw("p"); gMinbiasLowPt->SetMarkerStyle(minbiasMarker); gMinbiasLowPt->SetMarkerSize(markerSize); gMinbiasLowPt->Draw("p"); // peripheral // // remove x errors gPeripheral=removeXErrors(gPeripheralX); gPeripheral->SetMarkerStyle(peripheralMarker); gPeripheral->SetMarkerSize(markerSize); gPeripheral->Draw("p"); gPeripheralLowPt->SetMarkerStyle(peripheralMarker); gPeripheralLowPt->SetMarkerSize(markerSize); gPeripheralLowPt->Draw("p"); // ua1 // gUA1Data200->SetMarkerStyle(ua1Marker); gUA1Data200->SetMarkerSize(markerSize); //fUA1Fit130->SetLineColor(); gUA1Data200->Draw("p"); fUA1Fit130->SetRange(.1,6); fUA1Fit130->Draw("same"); // // legend // TLegend* l=new TLegend(0.5,0.7,0.8,0.8); l->SetTextSize(textSize); l->SetBorderSize(0); l->SetFillColor(4000); // transparent l->AddEntry(gCentral,"central 0-5%","p"); l->AddEntry(gPeripheral,"periperhal 60-80%","p"); l->AddEntry(gMinbias,"minimum bias","p"); l->AddEntry(gUA1Data200,"ua1 200 GeV data","p"); l->AddEntry(fUA1Fit130,"ua1 130 GeV fit","l"); l->Draw(); Print(c1,psDir,"spectra"); }