void drawLabels(){ // "Hadron Gas" TLatex *xHad1 = new TLatex(0.11, 0.13, "Hadron"); TLatex *xHad2 = new TLatex(0.15, 0.085, "Gas"); xHad1->SetTextSize(0.04); xHad2->SetTextSize(0.04); if(iColor)xHad1->SetTextColor(4); if(iColor)xHad2->SetTextColor(4); xHad1->Draw(); xHad2->Draw(); //"Quark Gloun Plasma" TLatex *xQGP1 = new TLatex(0.55, 0.8, "Quark Gluon"); TLatex *xQGP2 = new TLatex(0.62, 0.755, "Plasma"); xQGP1->SetTextSize(0.04); xQGP2->SetTextSize(0.04); if(iColor)xQGP1->SetTextColor(4); if(iColor)xQGP2->SetTextColor(4); xQGP1->Draw(); xQGP2->Draw(); //"Early Universe" TArrow *aUniv = new TArrow(.025, 0.95,.025, 0.45,0.03,"|>"); aUniv->SetLineWidth(2); if(iColor)aUniv->SetLineColor(2); if(iColor)aUniv->SetFillColor(2); aUniv->Draw(); TLatex *xUniv = new TLatex(0.075, 0.58, "Early Universe"); xUniv->SetTextSize(0.04); xUniv->SetTextAngle(90); if(iColor)xUniv->SetTextColor(2); xUniv->Draw(); //"Neutron Stars" TArrow *aNeut = new TArrow(.65, .05 ,.99, 0.075,0.03,"|>"); aNeut->SetLineWidth(2); if(iColor)aNeut->SetLineColor(8); if(iColor)aNeut->SetFillColor(8); aNeut->Draw(); TLatex *xNeut = new TLatex(0.735, 0.08, "Neutron Stars"); xNeut->SetTextSize(0.04); xNeut->SetTextAngle(5); if(iColor)xNeut->SetTextColor(8); xNeut->Draw(); //"Critical Point" TLatex *xCrit1 = new TLatex(0.2, 0.585, "Critical"); TLatex *xCrit2 = new TLatex(0.225, 0.54, "Point"); xCrit1->SetTextSize(0.04); xCrit2->SetTextSize(0.04); xCrit1->Draw(); xCrit2->Draw(); }
void drawAxis() { TArrow *arr = new TArrow(0,0,1,0,0.03,"|>"); arr->SetFillColor(1); arr->SetLineWidth(2); arr->Draw(); arr = new TArrow(0,0,0,1,0.03,"|>"); arr->SetFillColor(1); arr->SetLineWidth(2); arr->Draw(); }
void drawArrow(Double_t u, Double_t v, Double_t du, Double_t due, Double_t dv, Double_t dve){ if ( du+dv ){ Double_t arrowLengthSqr = du*du+dv*dv; Double_t relErrorOnArrowLength = sqrt(du*du*due*due+dv*dv*dve*dve)/arrowLengthSqr; Int_t color = 0; //-10, -9, -7, -4, 0 Int_t lwid = 2; if ( relErrorOnArrowLength>0.5 ) color=kBlue-9; if ( relErrorOnArrowLength<0.4 ) color=kBlue-7; if ( relErrorOnArrowLength<0.3 ) color=kBlue-4; if ( relErrorOnArrowLength<0.2 ) color=kBlue; // if ( relErrorOnArrowLength<0.1 ) color=kBlue; if ( relErrorOnArrowLength<0.1 ) { color=kBlue; lwid = 3; } if ( relErrorOnArrowLength<0.05 ) { color=kBlue; lwid = 4; } Double_t arrowSize = 0.006; TArrow * ar = new TArrow(u-0.5*du,v-0.5*dv,u+0.5*du,v+0.5*dv,arrowSize,"|>"); ar->SetLineWidth(lwid); ar->SetFillColor(color); ar->SetLineColor(color); ar->Draw(); } }
void Plot(RooRealVar *mass, RooDataSet *data, RooAbsPdf *pdf, pair<double,double> sigRange, vector<double> fwhmRange, string title, string savename){ double semin=sigRange.first; double semax=sigRange.second; double fwmin=fwhmRange[0]; double fwmax=fwhmRange[1]; double halfmax=fwhmRange[2]; double binwidth=fwhmRange[3]; RooPlot *plot = mass->frame(Bins(binning_),Range("higgsRange")); if (data) data->plotOn(plot,Invisible()); pdf->plotOn(plot,NormRange("higgsRange"),Range(semin,semax),FillColor(19),DrawOption("F"),LineWidth(2),FillStyle(1001),VLines(),LineColor(15)); TObject *seffLeg = plot->getObject(int(plot->numItems()-1)); pdf->plotOn(plot,NormRange("higgsRange"),Range(semin,semax),LineColor(15),LineWidth(2),FillStyle(1001),VLines()); pdf->plotOn(plot,NormRange("higgsRange"),Range("higgsRange"),LineColor(kBlue),LineWidth(2),FillStyle(0)); TObject *pdfLeg = plot->getObject(int(plot->numItems()-1)); if (data) data->plotOn(plot,MarkerStyle(kOpenSquare)); TObject *dataLeg = plot->getObject(int(plot->numItems()-1)); TLegend *leg = new TLegend(0.15,0.89,0.5,0.55); leg->SetFillStyle(0); leg->SetLineColor(0); leg->SetTextSize(0.03); if (data) leg->AddEntry(dataLeg,"Simulation","lep"); leg->AddEntry(pdfLeg,"Parametric model","l"); leg->AddEntry(seffLeg,Form("#sigma_{eff} = %1.2f GeV",0.5*(semax-semin)),"fl"); plot->GetXaxis()->SetNdivisions(509); halfmax*=(plot->getFitRangeBinW()/binwidth); TArrow *fwhmArrow = new TArrow(fwmin,halfmax,fwmax,halfmax,0.02,"<>"); fwhmArrow->SetLineWidth(2.); TPaveText *fwhmText = new TPaveText(0.15,0.45,0.45,0.58,"brNDC"); fwhmText->SetFillColor(0); fwhmText->SetLineColor(kWhite); fwhmText->SetTextSize(0.03); fwhmText->AddText(Form("FWHM = %1.2f GeV",(fwmax-fwmin))); TLatex lat1(0.65,0.85,"#splitline{CMS Preliminary}{Simulation}"); lat1.SetNDC(1); lat1.SetTextSize(0.03); TLatex lat2(0.65,0.75,title.c_str()); lat2.SetNDC(1); lat2.SetTextSize(0.025); TCanvas *canv = new TCanvas("c","c",600,600); plot->SetTitle(""); plot->GetXaxis()->SetTitle("m_{#gamma#gamma} (GeV)"); plot->Draw(); leg->Draw("same"); fwhmArrow->Draw("same <>"); fwhmText->Draw("same"); lat1.Draw("same"); lat2.Draw("same"); canv->Print(Form("%s.pdf",savename.c_str())); canv->Print(Form("%s.png",savename.c_str())); string path = savename.substr(0,savename.find('/')); canv->Print(Form("%s/animation.gif+100",path.c_str())); delete canv; }
void HHV4Vector::Draw(Int_t color, Int_t style) const { // draw particle for event display in x-y view TArrow *Ar = new TArrow(0, 0, Px(), Py(), 0.001, "|>"); Ar->SetLineColor(color); Ar->SetFillColor(color); Ar->SetLineWidth(3); Ar->SetLineStyle(style); Ar->Draw(); }
void transparency() { TCanvas *c1 = new TCanvas("c1", "c1",224,330,700,527); c1->Range(-0.125,-0.125,1.125,1.125); TLatex *tex = new TLatex(0.06303724,0.0194223,"This text is opaque and this line is transparent"); tex->SetLineWidth(2); tex->Draw(); TArrow *arrow = new TArrow(0.5555158,0.07171314,0.8939828,0.6195219,0.05,"|>"); arrow->SetLineWidth(4); arrow->SetAngle(30); arrow->Draw(); // Draw a transparent graph. Double_t x[10] = { 0.5232808, 0.8724928, 0.9280086, 0.7059456, 0.7399714, 0.4659742, 0.8241404, 0.4838825, 0.7936963, 0.743553}; Double_t y[10] = { 0.7290837, 0.9631474, 0.4775896, 0.6494024, 0.3555777, 0.622012, 0.7938247, 0.9482072, 0.3904382, 0.2410359}; TGraph *graph = new TGraph(10,x,y); graph->SetLineColorAlpha(46, 0.1); graph->SetLineWidth(7); graph->Draw("l"); // Draw an ellipse with opaque colors. TEllipse *ellipse = new TEllipse(0.1740688,0.8352632,0.1518625,0.1010526,0,360,0); ellipse->SetFillColor(30); ellipse->SetLineColor(51); ellipse->SetLineWidth(3); ellipse->Draw(); // Draw an ellipse with transparent colors, above the previous one. ellipse = new TEllipse(0.2985315,0.7092105,0.1566977,0.1868421,0,360,0); ellipse->SetFillColorAlpha(9, 0.571); ellipse->SetLineColorAlpha(8, 0.464); ellipse->SetLineWidth(3); ellipse->Draw(); // Draw a transparent blue text. tex = new TLatex(0.04871059,0.1837649,"This text is transparent"); tex->SetTextColorAlpha(9, 0.476); tex->SetTextSize(0.125); tex->SetTextAngle(26.0); tex->Draw(); }
void draw_synapse(Double_t cx1, Double_t cy1, Double_t cx2, Double_t cy2, Double_t rad1, Double_t rad2, Double_t weightNormed) { const Double_t TIP_SIZE = 0.01; const Double_t MAX_WEIGHT = 8; const Double_t MAX_COLOR = 100; // red const Double_t MIN_COLOR = 60; // blue if (weightNormed == 0) return; // gStyle->SetPalette(100, NULL); TArrow *arrow = new TArrow(cx1+rad1, cy1, cx2-rad2, cy2, TIP_SIZE, ">"); arrow->SetFillColor(1); arrow->SetFillStyle(1001); arrow->SetLineWidth((Int_t)(TMath::Abs(weightNormed)*MAX_WEIGHT+0.5)); arrow->SetLineColor((Int_t)((weightNormed+1.0)/2.0*(MAX_COLOR-MIN_COLOR)+MIN_COLOR+0.5)); arrow->Draw(); }
void CCProtonPi0_SideBandTool::Plot_NoRatio(int ind, std::string sb_name, std::string var_name, MnvH1D* data, MnvH1D* mc_total, MnvH1D* signal, MnvH1D* WithPi0, MnvH1D* QELike, MnvH1D* SinglePiPlus, MnvH1D* Other) { (void) mc_total; std::string type; if (ind == 0) type = "Nominal"; else type = "Fitted"; std::string norm = "POT"; std::string plot_title = "Side Band: " + sb_name + " " + type + " " + norm + " Normalized"; // Get Histograms -- Use new Histograms not to change originals MnvH1D* h_data = new MnvH1D(*data); h_data->GetYaxis()->CenterTitle(); h_data->GetXaxis()->SetNdivisions(5,5,0); h_data->GetYaxis()->SetNdivisions(5,5,0); MnvH1D* h_signal = new MnvH1D(*signal); h_signal->GetYaxis()->CenterTitle(); h_signal->SetFillColor(kGreen+1); h_signal->SetLineColor(kGreen+1); h_signal->SetFillStyle(3002); h_signal->SetLineWidth(2); h_signal->GetXaxis()->SetNdivisions(5,5,0); h_signal->GetYaxis()->SetNdivisions(5,5,0); MnvH1D* h_WithPi0 = new MnvH1D(*WithPi0); h_WithPi0->GetYaxis()->CenterTitle(); h_WithPi0->SetFillColor(kRed); h_WithPi0->SetLineColor(kRed); h_WithPi0->SetFillStyle(3002); h_WithPi0->SetLineWidth(2); h_WithPi0->GetXaxis()->SetNdivisions(5,5,0); h_WithPi0->GetYaxis()->SetNdivisions(5,5,0); MnvH1D* h_QELike = new MnvH1D(*QELike); h_QELike->GetYaxis()->CenterTitle(); h_QELike->SetFillColor(kOrange-1); h_QELike->SetLineColor(kOrange-1); h_QELike->SetFillStyle(3002); h_QELike->SetLineWidth(2); h_QELike->GetXaxis()->SetNdivisions(5,5,0); h_QELike->GetYaxis()->SetNdivisions(5,5,0); MnvH1D* h_SinglePiPlus = new MnvH1D(*SinglePiPlus); h_SinglePiPlus->GetYaxis()->CenterTitle(); h_SinglePiPlus->SetFillColor(kBlue); h_SinglePiPlus->SetLineColor(kBlue); h_SinglePiPlus->SetFillStyle(3002); h_SinglePiPlus->SetLineWidth(2); h_SinglePiPlus->GetXaxis()->SetNdivisions(5,5,0); h_SinglePiPlus->GetYaxis()->SetNdivisions(5,5,0); MnvH1D* h_Other = new MnvH1D(*Other); h_Other->GetYaxis()->CenterTitle(); h_Other->SetFillColor(kGray+2); h_Other->SetLineColor(kGray+2); h_Other->SetFillStyle(3002); h_Other->SetLineWidth(2); h_Other->GetXaxis()->SetNdivisions(5,5,0); h_Other->GetYaxis()->SetNdivisions(5,5,0); // Clear Error Bars h_signal->ClearAllErrorBands(); h_WithPi0->ClearAllErrorBands(); h_QELike->ClearAllErrorBands(); h_SinglePiPlus->ClearAllErrorBands(); h_Other->ClearAllErrorBands(); TObjArray* mc_hists = new TObjArray; mc_hists->Add(h_Other); mc_hists->Add(h_SinglePiPlus); mc_hists->Add(h_QELike); mc_hists->Add(h_WithPi0); mc_hists->Add(h_signal); // ------------------------------------------------------------------------ // Plot // ------------------------------------------------------------------------ MnvPlotter* plotter = new MnvPlotter(); plotter->SetRootEnv(); gStyle->SetCanvasDefW(640); gStyle->SetCanvasDefH(480); // 4x3 aspect ratio gStyle->SetPadRightMargin(0.05); gStyle->SetEndErrorSize(2); gStyle->SetStripDecimals(false); plotter->axis_minimum = 0.01; plotter->legend_text_size = 0.04; plotter->legend_text_font = 42; // default 62 (bold) plotter->data_marker_size = 0.8; plotter->axis_title_font_x = 42; plotter->axis_title_size_x = 0.06; plotter->axis_title_offset_x = 1.1; plotter->axis_title_font_y = 42; plotter->axis_title_size_y = 0.06; plotter->axis_title_offset_y = 1.0; plotter->axis_label_size = 0.05; plotter->axis_label_font = 42; plotter->headroom = 1.75; plotter->mc_line_width = 2; TCanvas* c = new TCanvas("c"); /* void MnvPlotter::DrawDataStackedMC( const MnvH1D * dataHist, const TObjArray * mcHists, const Double_t mcScale = 1.0, const std::string & legPos = "L", const std::string & dataName = "Data", const Int_t mcBaseColor = 2, const Int_t mcColorOffset = 1, const Int_t mcFillStyle = 3001, const char * xaxislabel = "", const char * yaxislabel = "", bool cov_area_normalize = false ) */ plotter->DrawDataStackedMC(h_data, mc_hists, POT_ratio, "N", "Data (3.33e20 POT)", 0, 0, 3002); // Add Legend double leg_x_min = 0.55; double leg_x_max = 0.90; double leg_y_min = 0.55; double leg_y_max = 0.85; h_data->SetMarkerStyle(plotter->data_marker); h_data->SetMarkerSize(plotter->data_marker_size); h_data->SetMarkerColor(plotter->data_color); h_data->SetLineColor(plotter->data_color); h_data->SetLineWidth(plotter->data_line_width); TLegend *legend = new TLegend(leg_x_min, leg_y_min, leg_x_max, leg_y_max); legend->SetBorderSize(0); legend->SetFillColor(-1); legend->SetFillStyle(0); legend->SetTextFont(42); legend->SetTextSize(0.04); legend->AddEntry(h_data, "Data", "lep"); legend->AddEntry(h_signal, "Signal", "f"); legend->AddEntry(h_WithPi0, "Bkgrd: #pi^{0} + meson(s)", "f"); legend->AddEntry(h_QELike, "Bkgrd: zero meson", "f"); legend->AddEntry(h_SinglePiPlus, "Bkgrd: charged meson(s)", "f"); legend->AddEntry(h_Other, "Bkgrd: other", "f"); legend->SetTextSize(0.04); legend->SetTextFont(42); legend->Draw(); // Add Alines if Original Side Band //if (false) { if (sb_name.compare("Original") == 0) { double max_bin = h_data->GetMaximumBin(); double hist_max = h_data->GetBinContent(max_bin)*1.2; TLine line; TArrow arrow; // Cut Line at 60 MeV line.SetLineWidth(2); line.SetLineStyle(2); line.SetLineColor(kBlack); arrow.SetLineWidth(2); arrow.SetLineColor(kBlack); line.DrawLine(60.0, 0.0, 60.0, hist_max); arrow.DrawArrow(60.0, hist_max, 50.0, hist_max, 0.01); line.DrawLine(200.0, 0.0, 200.0, hist_max); arrow.DrawArrow(200.0, hist_max, 210.0, hist_max, 0.01); arrow.SetLineColor(kBlue); arrow.DrawArrow(134.98,hist_max/8,134.98,0, 0.01); } // Add Normalization Label TLatex norm_text; norm_text.SetNDC(); norm_text.SetTextColor(kBlue); norm_text.SetTextSize(0.03); norm_text.SetTextAlign(22); norm_text.DrawLatex(0.35,0.85,"POT Normalized"); double info_text_x = 0.85; double info_text_y = 0.85; TLatex info_text; info_text.SetNDC(); info_text.SetTextColor(kBlack); info_text.SetTextFont(62); info_text.SetTextAlign(12); info_text.SetTextSize(0.04); if ( ind == 0) info_text.DrawLatex(info_text_x, info_text_y, "(a)"); else info_text.DrawLatex(info_text_x, info_text_y, "(b)"); // Plot Output c->Update(); std::string plotDir = Folder_List::plotDir_Paper; std::string out_name; out_name = plotDir + var_name + "_" + sb_name + "_" + type + "_" + norm + ".pdf"; c->Print(out_name.c_str(),"pdf"); delete h_data; delete h_signal; delete h_WithPi0; delete h_QELike; delete h_SinglePiPlus; delete h_Other; delete legend; delete c; delete plotter; }
void toyplotsge1btight() { gStyle->SetPadBottomMargin(0.15) ; gStyle->SetPadLeftMargin(0.15) ; gStyle->SetOptTitle(0) ; TCanvas* c1 = new TCanvas("c1","c1") ; TArrow* arrow = new TArrow() ; arrow->SetLineWidth(3) ; TChain toyns("tt_toy_nosusyfit") ; toyns.Add("an-11-257-v3-files/output-files/toyge1btight-smonly-mctest.root") ; TChain bgo("tt_cls_bgonly") ; TChain spb("tt_cls_splusb") ; bgo.Add("an-11-257-v3-files/output-files/toyge1btight-smonly-mctest.root") ; spb.Add("an-11-257-v3-files/output-files/toyge1btight-smonly-mctest.root") ; //============ fit values gStyle->SetOptStat("emr") ; TH1F* httwjfit = new TH1F("httwjfit","ttwj",40, 0., 45. ) ; TH1F* hqcdfit = new TH1F("hqcdfit" ,"qcd" ,40, 0., 10. ) ; TH1F* hznnfit = new TH1F("hznnfit" ,"znn" ,40, 0., 20. ) ; toyns.Draw("ttwj_sig_fit>>httwjfit","") ; toyns.Draw("qcd_sig_fit>>hqcdfit","") ; toyns.Draw("znn_sig_fit>>hznnfit","") ; httwjfit->SetLineWidth(2) ; hqcdfit->SetLineWidth(2) ; hznnfit->SetLineWidth(2) ; httwjfit->SetFillColor(11) ; hqcdfit->SetFillColor(11) ; hznnfit->SetFillColor(11) ; httwjfit->SetXTitle("Fit ttwj SIG events") ; hqcdfit->SetXTitle("Fit QCD SIG events") ; hznnfit->SetXTitle("Fit Znn SIG events") ; httwjfit->SetYTitle("Toy experiments") ; hqcdfit->SetYTitle("Toy experiments") ; hznnfit->SetYTitle("Toy experiments") ; httwjfit->Draw() ; arrow->DrawArrow(19.6,40,19.6,0) ; c1->SaveAs("an-11-257-v3-files/output-files/toymc-ttwj-sig-fit-ge1btight.png") ; hqcdfit->Draw() ; arrow->DrawArrow(1.3,60,1.3,0) ; c1->SaveAs("an-11-257-v3-files/output-files/toymc-qcd-sig-fit-ge1btight.png") ; hznnfit->Draw() ; arrow->DrawArrow(4.25,40,4.25,0) ; c1->SaveAs("an-11-257-v3-files/output-files/toymc-znn-sig-fit-ge1btight.png") ; //============ fit uncertainty TH1F* httwjerr = new TH1F("httwjerr","ttwj",40, 0., 10. ) ; TH1F* hqcderr = new TH1F("hqcderr" ,"qcd" ,40, 0., 8. ) ; TH1F* hznnerr = new TH1F("hznnerr" ,"znn" ,40, 0., 10. ) ; toyns.Draw("ttwj_sig_err>>httwjerr","") ; toyns.Draw("qcd_sig_err>>hqcderr","") ; toyns.Draw("znn_sig_err>>hznnerr","") ; httwjerr->SetLineWidth(2) ; hqcderr->SetLineWidth(2) ; hznnerr->SetLineWidth(2) ; httwjerr->SetFillColor(11) ; hqcderr->SetFillColor(11) ; hznnerr->SetFillColor(11) ; httwjerr->SetXTitle("err ttwj SIG events") ; hqcderr->SetXTitle("err QCD SIG events") ; hznnerr->SetXTitle("err Znn SIG events") ; httwjerr->SetYTitle("Toy experiments") ; hqcderr->SetYTitle("Toy experiments") ; hznnerr->SetYTitle("Toy experiments") ; httwjerr->Draw() ; c1->SaveAs("an-11-257-v3-files/output-files/toymc-ttwj-sig-err-ge1btight.png") ; hqcderr->Draw() ; c1->SaveAs("an-11-257-v3-files/output-files/toymc-qcd-sig-err-ge1btight.png") ; hznnerr->Draw() ; c1->SaveAs("an-11-257-v3-files/output-files/toymc-znn-sig-err-ge1btight.png") ; //============ q value distributions. gStyle->SetOptStat(0) ; TH1F* hbgo = new TH1F("hbgo","BG only", 50, 0., 15.) ; TH1F* hspb = new TH1F("hspb","SIG + BG", 50, 0., 15.) ; hbgo->SetLineWidth(2) ; hspb->SetLineWidth(2) ; hbgo->SetLineColor(2) ; hspb->SetLineColor(4) ; bgo.Draw("testStat>>hbgo","") ; spb.Draw("testStat>>hspb","") ; hspb->SetXTitle("q value") ; hspb->SetYTitle("Toy experiments") ; hspb->Draw() ; hbgo->Draw("same") ; //+++ X value below is hardwired to 2.44. // If inputs are changed, grep the string "Data value of test statistic" // in the runtoyge1btight log file to find the new value. // arrow->DrawArrow(1.13,150,1.13,0.,0,">") ; TLegend* legend = new TLegend(0.4,0.5,0.8,0.8) ; legend->AddEntry( hbgo, "BG-only hypothesis") ; legend->AddEntry( hspb, "SUSY+BG hypothesis") ; legend->SetFillColor(kWhite) ; legend->Draw() ; c1->SaveAs("an-11-257-v3-files/output-files/toymc-qvalue-distributions-ge1btight.png") ; }
void gluinostopMassLifetime(double lumi=4560., double maxInstLumi=5000.) { ExtraLimitPlots plots(lumi); plots.calculateCrossSections(4,6,3,39,9); // xsecs as extracted from nllfast http://web.physik.rwth-aachen.de/service/wiki/bin/view/Main/SquarksandGluinos // gluino (m_squark=m_gluino): "nllfast gg mstw <mass> <mass>" // gluino (m_squark>>m_gluino): "nllfast gdcpl mstw <mass>" // stop: "nllfast st mstw <mass>" // the xsec of gluino and stop are updated for 13TeV analysis, the xsecs are extracted from: // https://twiki.cern.ch/twiki/bin/view/LHCPhysics/SUSYCrossSections#Cross_sections_for_various_S_AN2 double g_mass [21] = { 200 , 250 , 300 , 350 , 400 , 450 , 500 , 550 , 600 , 650 , 700 , 750 , 800 , 850 , 900 , 950 , 1000 , 1050 , 1100 , 1150 , 1200 }; double g_xsec [21] = { 3574, 1190, 462, 202, 98.0, 50.4, 27.4, 15.6, 9.20, 5.60, 3.53, 2.27, 1.49, 0.996, 0.677, 0.466, 0.325, 0.229, 0.163, 0.118, 0.0856 }; double g_xsecdcpl [21] = { 3574, 1190, 462, 202, 98.0, 50.4, 27.4, 15.6, 9.20, 5.60, 3.53, 2.27, 1.49, 0.996, 0.677, 0.466, 0.325, 0.229, 0.163, 0.118, 0.0856 }; double s_mass [21] = { 100 , 150 , 200 , 250 , 300 , 350 , 400 , 450 , 500 , 550 , 600 , 650 , 700 , 750 , 800 , 850 , 900 , 950 , 1000 , 1050 , 1100 }; double s_xsec [21] = { 1521, 249.4, 64.5, 21.6, 8.51, 3.79, 1.84, 0.948, 0.518, 0.296, 0.175, 0.107, 0.067, 0.0431, 0.0283, 0.0190, 0.0129, 0.00883, 0.00615, 0.00432, 0.00307 }; //gluino xsec vector<double> masses; for (int i = 0; i < 21; ++i) { masses.push_back(g_mass[i]); g_xsec [i] = log10 (g_xsec [i]*1e3) * 20.; g_xsecdcpl [i] = log10 (g_xsecdcpl [i]*1e3) * 20.; } // Xsection gluino_xs (masses, g_xsec); Xsection gluino_xs (masses, g_xsecdcpl); //stop xsec masses.clear(); for (int i = 0; i < 19; ++i) { masses.push_back(s_mass[i]); s_xsec [i] = log10 (s_xsec [i]*1e3) * 20.; } Xsection stop_xs (masses, s_xsec); // graphs TGraph* g_obs = new TGraph (*plots.getLimitGluino()); gluino_xs.xsec2mass (g_obs); TGraph* g_exp = new TGraph (*plots.getExpLimitGluino()); gluino_xs.xsec2mass (g_exp); TGraphAsymmErrors* g_exp_1sig = new TGraphAsymmErrors (*plots.getExpLimitGluino1Sig()); gluino_xs.xsec2mass (g_exp_1sig); TGraphAsymmErrors* g_exp_2sig = new TGraphAsymmErrors (*plots.getExpLimitGluino2Sig()); gluino_xs.xsec2mass (g_exp_2sig); TGraph* stop_obs = new TGraph (*plots.getLimitStop()); stop_xs.xsec2mass (stop_obs); TGraph* stop_exp = new TGraph (*plots.getExpLimitStop()); stop_xs.xsec2mass (stop_exp); TGraphAsymmErrors* stop_exp_1sig = new TGraphAsymmErrors (*plots.getExpLimitStop1Sig()); stop_xs.xsec2mass (stop_exp_1sig); TGraphAsymmErrors* stop_exp_2sig = new TGraphAsymmErrors (*plots.getExpLimitStop2Sig()); stop_xs.xsec2mass (stop_exp_2sig); TCanvas *canvas = new TCanvas("allMassLifetime", "allMassLifetime", 800, 600); canvas->SetLogx(); // canvas->SetGridy(); TH1F* h = new TH1F ("h", "", 1, 7.5e-8, 1e6); h->SetStats (0); h->SetMinimum (300); h->SetMaximum (2000); h->SetTitle("Beamgap Expt"); // h->GetXaxis()->SetTitle("#tau_{#tilde{g},#tilde{t},#tilde{#tau}} [s]"); h->GetXaxis()->SetTitle("#tau [s]"); h->GetYaxis()->SetTitle("m [GeV] "); h->Draw (""); // limit arrows double* x = g_obs->GetX(); for (int i = 0; i < g_obs->GetN(); ++i) { if (x[i] > 0.5) { double y = g_obs->GetY()[i]; TArrow* arrow = new TArrow (x[i], y, h->GetXaxis()->GetXmin(), y, 0.02); arrow->SetLineColor (kRed); arrow->SetLineWidth (2); //arrow->Draw(); cout << "GLUINO mass limit @ " << x[i] << "sec is found: " << y << endl; break; } } x = g_obs->GetX(); for (int i = 0; i < stop_obs->GetN(); ++i) { if (x[i] > 0.5) { double y = stop_obs->GetY()[i]; TArrow* arrow = new TArrow (x[i], y, h->GetXaxis()->GetXmin(), y, 0.02); arrow->SetLineColor (kBlue); arrow->SetLineWidth (2); //arrow->Draw(); cout << "STOP mass limit @ " << x[i] << "sec is found: " << y << endl; break; } } // gluino // 2 sigma band if (g_exp_2sig) { g_exp_2sig->SetLineColor(0); g_exp_2sig->SetLineStyle(0); g_exp_2sig->SetLineWidth(0); g_exp_2sig->SetFillColor(kYellow); g_exp_2sig->SetFillStyle(1001); g_exp_2sig->Draw("3"); } // 1 sigma band if (g_exp_1sig) { // g_exp_1sig->SetLineColor(8); g_exp_1sig->SetLineColor(0); g_exp_1sig->SetLineStyle(0); g_exp_1sig->SetLineWidth(0); // g_exp_1sig->SetFillColor(8); g_exp_1sig->SetFillColor(kGreen); g_exp_1sig->SetFillStyle(1001); // g_exp_1sig->SetFillStyle(3005); g_exp_1sig->Draw("3"); // g_exp_1sig->Draw("lX"); } // epxected limit if (g_exp) { g_exp->SetLineColor(kRed); g_exp->SetLineStyle(4); g_exp->SetLineWidth(2); g_exp->Draw("l3"); } // observed limit if (g_obs) { g_obs->SetLineColor(kRed); g_obs->SetLineStyle(1); g_obs->SetLineWidth(2); g_obs->Draw("l"); } // stop // 2 sigma band if (stop_exp_2sig) { stop_exp_2sig->SetLineColor(0); stop_exp_2sig->SetLineStyle(0); stop_exp_2sig->SetLineWidth(0); stop_exp_2sig->SetFillColor(kYellow); stop_exp_2sig->SetFillStyle(1001); stop_exp_2sig->Draw("3"); } // 1 sigma band if (stop_exp_1sig) { // stop_exp_1sig->SetLineColor(8); stop_exp_1sig->SetLineColor(0); stop_exp_1sig->SetLineStyle(0); stop_exp_1sig->SetLineWidth(0); // stop_exp_1sig->SetFillColor(8); stop_exp_1sig->SetFillColor(kGreen); stop_exp_1sig->SetFillStyle(1001); // stop_exp_1sig->SetFillStyle(3005); stop_exp_1sig->Draw("3"); // stop_exp_1sig->Draw("lX"); } // epxected limit if (stop_exp) { stop_exp->SetLineColor(kBlue); stop_exp->SetLineStyle(3); stop_exp->SetLineWidth(2); stop_exp->Draw("l3"); } // observed limit if (stop_obs) { stop_obs->SetLineColor(kBlue); stop_obs->SetLineStyle(2); stop_obs->SetLineWidth(2); stop_obs->Draw("l"); } TPaveText* blurb = new TPaveText(0.20, 0.63, 0.60, 0.90, "NDC"); blurb->AddText("CMS Preliminary 2015"); //blurb->AddText("CMS 2012"); blurb->AddText("#int L dt = 2.46 fb^{-1}"); //, #int L_{eff} dt = 935 pb^{-1}"); //blurb->AddText("L^{max}_{inst} = 3.5 #times 10^{33} cm^{-2}s^{-1}"); // std::stringstream label; // label<<"#int L dt = "<<lumi<<" pb^{-1}"; // blurb->AddText(label.str().c_str()); // double peakInstLumi=maxInstLumi; // int exponent=30; // while (peakInstLumi>10) { // peakInstLumi/=10; // ++exponent; // } // std::stringstream label2; // label2<<"L^{max}_{inst} = "<<peakInstLumi<<" x 10^{"<<exponent<<"} cm^{-2}s^{-1}"; // blurb->AddText(label2.str().c_str()); blurb->AddText("#sqrt{s} = 13 TeV"); blurb->AddText("E_{g} > 120 GeV, E_{t} > 150 GeV"); blurb->AddText("E_{jet} > 70 GeV"); blurb->SetTextFont(42); blurb->SetBorderSize(0); blurb->SetFillColor(0); blurb->SetShadowColor(0); blurb->SetTextAlign(12); blurb->SetTextSize(0.033); blurb->Draw(); TLegend* leg = new TLegend(0.6, 0.62, 0.87, 0.90,"95% CL Limits:","NDC"); leg->SetTextSize(0.033); leg->SetBorderSize(0); leg->SetTextFont(42); leg->SetFillColor(0); leg->AddEntry(g_obs, " #tilde{g} observed", "l"); leg->AddEntry(stop_obs, " #tilde{t} observed", "l"); TGraph* expectedStyle1 = new TGraph (*g_exp); expectedStyle1->SetFillColor (g_exp_1sig->GetFillColor()); TGraph* expectedStyle2 = new TGraph (*g_exp); expectedStyle2->SetFillColor (g_exp_2sig->GetFillColor()); leg->AddEntry(expectedStyle1, " #tilde{g} expected #pm1#sigma", "lf"); leg->AddEntry(expectedStyle2, " #tilde{g} expected #pm2#sigma", "lf"); expectedStyle1 = new TGraph (*stop_exp); expectedStyle1->SetFillColor (stop_exp_1sig->GetFillColor()); expectedStyle2 = new TGraph (*stop_exp); expectedStyle2->SetFillColor (stop_exp_2sig->GetFillColor()); leg->AddEntry(expectedStyle1, " #tilde{t} expected #pm1#sigma", "lf"); leg->AddEntry(expectedStyle2, " #tilde{t} expected #pm2#sigma", "lf"); leg->Draw(); h->Draw("sameaxis"); canvas->Print("gluinostopMassLifetime.png"); canvas->Print("gluinostopMassLifetime.pdf"); }
void toyplotsge1btight() { gStyle->SetPadBottomMargin(0.15) ; gStyle->SetPadLeftMargin(0.15) ; gStyle->SetOptTitle(0) ; TCanvas* c1 = new TCanvas("c1","c1") ; TArrow* arrow = new TArrow() ; arrow->SetLineWidth(3) ; TChain toyns("toytt") ; toyns.Add("output-files/toy-data-ge1btight.root") ; //--- extract true values from TTree. double fit_tru_ttwj ; TBranch* b_fit_tru_ttwj ; toyns.SetBranchAddress("fit_tru_ttwj", &fit_tru_ttwj, &b_fit_tru_ttwj ) ; toyns.GetEntry() ; printf("\n\n true value for ttwj : %8.2f\n", fit_tru_ttwj ) ; double fit_tru_qcd ; TBranch* b_fit_tru_qcd ; toyns.SetBranchAddress("fit_tru_qcd", &fit_tru_qcd, &b_fit_tru_qcd ) ; toyns.GetEntry() ; printf("\n\n true value for qcd : %8.2f\n", fit_tru_qcd ) ; double fit_tru_znn ; TBranch* b_fit_tru_znn ; toyns.SetBranchAddress("fit_tru_znn", &fit_tru_znn, &b_fit_tru_znn ) ; toyns.GetEntry() ; printf("\n\n true value for znn : %8.2f\n", fit_tru_znn ) ; //============ fit values gStyle->SetOptStat("emr") ; TH1F* httwjfit = new TH1F("httwjfit","ttwj",40, 0., 40. ) ; TH1F* hqcdfit = new TH1F("hqcdfit" ,"qcd" ,40, 0., 15. ) ; TH1F* hznnfit = new TH1F("hznnfit" ,"znn" ,40, 0., 25. ) ; toyns.Draw("fit_val_ttwj>>httwjfit","fit_cov_qual==3") ; toyns.Draw("fit_val_qcd>>hqcdfit","fit_cov_qual==3") ; toyns.Draw("fit_val_znn>>hznnfit","fit_cov_qual==3") ; httwjfit->SetLineWidth(2) ; hqcdfit->SetLineWidth(2) ; hznnfit->SetLineWidth(2) ; httwjfit->SetFillColor(11) ; hqcdfit->SetFillColor(11) ; hznnfit->SetFillColor(11) ; httwjfit->SetXTitle("Fit ttwj SIG events") ; hqcdfit->SetXTitle("Fit QCD SIG events") ; hznnfit->SetXTitle("Fit Znn SIG events") ; httwjfit->SetYTitle("Toy experiments") ; hqcdfit->SetYTitle("Toy experiments") ; hznnfit->SetYTitle("Toy experiments") ; httwjfit->Draw() ; arrow->DrawArrow(fit_tru_ttwj, 0.4*(httwjfit->GetMaximum()), fit_tru_ttwj, 0) ; c1->SaveAs("output-files/toymc-ttwj-sig-fit-ge1btight.png") ; hqcdfit->Draw() ; arrow->DrawArrow(fit_tru_qcd, 0.4*(hqcdfit->GetMaximum()), fit_tru_qcd, 0) ; c1->SaveAs("output-files/toymc-qcd-sig-fit-ge1btight.png") ; hznnfit->Draw() ; arrow->DrawArrow(fit_tru_znn, 0.4*(hznnfit->GetMaximum()), fit_tru_znn, 0) ; c1->SaveAs("output-files/toymc-znn-sig-fit-ge1btight.png") ; //============ fit uncertainty TH1F* httwjerr = new TH1F("httwjerr","ttwj",40, 0., 15. ) ; TH1F* hqcderr = new TH1F("hqcderr" ,"qcd" ,40, 0., 10. ) ; TH1F* hznnerr = new TH1F("hznnerr" ,"znn" ,40, 0., 15. ) ; toyns.Draw("fit_err_ttwj>>httwjerr","fit_cov_qual==3") ; toyns.Draw("fit_err_qcd>>hqcderr","fit_cov_qual==3") ; toyns.Draw("fit_err_znn>>hznnerr","fit_cov_qual==3") ; httwjerr->SetLineWidth(2) ; hqcderr->SetLineWidth(2) ; hznnerr->SetLineWidth(2) ; httwjerr->SetFillColor(11) ; hqcderr->SetFillColor(11) ; hznnerr->SetFillColor(11) ; httwjerr->SetXTitle("err ttwj SIG events") ; hqcderr->SetXTitle("err QCD SIG events") ; hznnerr->SetXTitle("err Znn SIG events") ; httwjerr->SetYTitle("Toy experiments") ; hqcderr->SetYTitle("Toy experiments") ; hznnerr->SetYTitle("Toy experiments") ; httwjerr->Draw() ; c1->SaveAs("output-files/toymc-ttwj-sig-err-ge1btight.png") ; hqcderr->Draw() ; c1->SaveAs("output-files/toymc-qcd-sig-err-ge1btight.png") ; hznnerr->Draw() ; c1->SaveAs("output-files/toymc-znn-sig-err-ge1btight.png") ; }
int main (int argc, char *argv[]) { if (argc != 2) { cout << "Usage: " << argv[0] << " INPUT_FILE" << endl; cout << " or: " << argv[0] << " INPUT_LIST" << endl; cout << "" << endl; cout << endl; return 0; } string inputFile = argv[1], upperInputFile; upperInputFile.resize (inputFile.length ()); transform (inputFile.begin (), inputFile.end (), upperInputFile.begin (), ::toupper); // so canvases don't appear on the screen when being created // very useful when running on the OSU T3 from CERN gROOT->SetBatch(); gStyle->SetPadTopMargin(0.1); gStyle->SetPadBottomMargin(0.1); gStyle->SetPadLeftMargin(0.03); gStyle->SetPadRightMargin(0.08); //Create chain of root trees TChain chain("Delphes"); if (upperInputFile.length () < 5 || upperInputFile.substr (upperInputFile.length () - 5, 5) != ".ROOT") { ifstream fin (inputFile); string line; while(getline(fin, line)) { chain.Add(line.c_str()); } fin.close(); } else chain.Add(inputFile.c_str()); // Create object of class ExRootTreeReader ExRootTreeReader *treeReader = new ExRootTreeReader(&chain); // Get pointers to branches used in this analysis TClonesArray *branchTrack = treeReader->UseBranch("Track"); TClonesArray *branchCluster = treeReader->UseBranch("Cluster"); TClonesArray *branchNPU = treeReader->UseBranch("NPU"); //gStyle->SetOptStat(10011); //actually, let's turn this off for now gStyle->SetOptStat(0); TH2D *hist[LEN]; signal (SIGINT, signalHandler); //Loop over a LEN Events for (int event = 0; event < LEN && !interrupted; event++) { //Load Branches treeReader->ReadEntry(event); // N.B. this is a hack put in by Andrew using the ScalarHT class // it's the number of pileup interactions, it's not actually the HT unsigned nInteractions = (unsigned) ((ScalarHT *) branchNPU->At(0))->HT + 1; int nClusters = branchCluster->GetEntries(); // create and format the histogram for this event TString name = "TrackPtVsTrackZ_" + TString(Form("%d",event+1)); TCanvas *can = new TCanvas(name,name,1600,500); TString title = "Event " + TString(Form("%d",event+1)) + ": "; title += TString(Form("%d",nInteractions)) + " Interactions, "; title += TString(Form("%d",nClusters)) + " Clusters"; hist[event] = new TH2D(name, title, X_BIN, X_MIN, X_MAX, Y_BIN, Y_MIN, Y_MAX); hist[event]->GetXaxis()->SetTitle("track z [mm]"); hist[event]->GetXaxis()->SetLabelOffset(0.02); hist[event]->GetXaxis()->SetTitleOffset(1.2); hist[event]->GetYaxis()->SetTitle("track p_{T} [GeV]"); hist[event]->GetYaxis()->SetTitleOffset(0.35); TArrow *genPVArrow = new TArrow(0,0,0,0.01,0.01,"|>"); genPVArrow->SetLineColor(3); genPVArrow->SetFillColor(3); genPVArrow->SetLineWidth(0.1); genPVArrow->SetAngle(40); vector<float> interactionPositions; vector<TLine *> clusterLineVector; Cluster *recoPV = (Cluster *) branchCluster->At(0); TLine *highELine = new TLine(recoPV->Z,0,recoPV->Z,Y_MAX); highELine->SetLineColor(1); highELine->SetLineWidth(0.8); highELine->SetLineStyle(3); // Draw cluster lines // Skip first cluster since we've already drawn it (start from 1) for(int iCluster = 1; iCluster < branchCluster->GetEntries(); iCluster++) { Cluster *cluster = (Cluster *) branchCluster->At(iCluster); TLine *clusterLine = new TLine(cluster->Z,0,cluster->Z,Y_MAX); clusterLine->SetLineWidth(0.5); clusterLineVector.push_back(clusterLine); } for(int iTrack = 0; iTrack < branchTrack->GetEntries(); iTrack++) { Track *track = (Track *) branchTrack->At(iTrack); if (track->PT < Y_MAX) hist[event]->Fill(track->Z, track->PT); else hist[event]->Fill(track->Z, Y_MAX-0.01); // if entry would be off the y-scale, draw it in the last bin if(track->IsPU==0) { // track comes from primary interaction // genPVArrow->SetX1(track->TrueZ); FIXME // genPVArrow->SetX2(track->TrueZ); FIXME } // else if (find(interactionPositions.begin(), interactionPositions.end(), track->TrueZ) == interactionPositions.end()){ FIXME // interactionPositions.push_back(track->TrueZ); FIXME // } FIXME } //create arrows for all the generated pileup interactions vector<TArrow *> interactionArrowVector; for(uint iInteraction = 0; iInteraction < interactionPositions.size() ; iInteraction++) { TArrow *interactionArrow = new TArrow(interactionPositions.at(iInteraction),0,interactionPositions.at(iInteraction),0.01,0.01,"|>"); interactionArrow->SetLineWidth(0.1); interactionArrow->SetAngle(20); interactionArrow->SetLineColor(2); interactionArrow->SetFillColor(2); interactionArrowVector.push_back(interactionArrow); } //Draw and save images hist[event]->Draw("contz"); for(uint iCluster = 0; iCluster < clusterLineVector.size(); iCluster++) { clusterLineVector.at(iCluster)->Draw(); } for(uint iInteraction = 0; iInteraction < interactionArrowVector.size(); iInteraction++) { interactionArrowVector.at(iInteraction)->Draw(); } highELine->Draw(); genPVArrow->Draw(); TLegend *leg = new TLegend(0.07,0.6,0.25,0.89); leg->SetBorderSize(0); leg->SetFillColor(0); leg->SetFillStyle(0); leg->AddEntry(genPVArrow, "Primary Gen. Interaction", ""); if (interactionArrowVector.size() > 0) leg->AddEntry(interactionArrowVector.at(0), "Pileup Interactions", ""); leg->AddEntry(highELine, "Highest #Sigmap_{T}^{2} Cluster", "l"); if (clusterLineVector.size() > 0) leg->AddEntry(clusterLineVector.at(0), "Other Clusters", "l"); leg->Draw(); //hack to get the triangles to draw in the legend double x_left = X_MIN + (X_MAX-X_MIN)/13; double x_right = X_MIN + (X_MAX-X_MIN)/13; if (interactionArrowVector.size() > 0){ TArrow *interactionArrowLabel = new TArrow(x_left,Y_MAX*0.86,x_right,Y_MAX*0.86,0.02,"|>"); interactionArrowLabel->SetLineWidth(1); interactionArrowLabel->SetAngle(20); interactionArrowLabel->SetLineColor(2); interactionArrowLabel->SetFillColor(2); interactionArrowLabel->Draw(); } TArrow *genPVArrowLabel = new TArrow(x_left,Y_MAX*0.94,x_right,Y_MAX*0.94,0.02,"|>"); genPVArrowLabel->SetLineWidth(1); genPVArrowLabel->SetAngle(40); genPVArrowLabel->SetLineColor(3); genPVArrowLabel->SetFillColor(3); genPVArrowLabel->Draw(); can->SaveAs("output/" + name + ".pdf"); //can->Write(); } }
void fildir(){ TCanvas *c1 = new TCanvas("c1","ROOT FilDir description",700,900); c1->Range(1,1,19,24.5); TPaveLabel *title = new TPaveLabel(4,23,16,24.2,"ROOT File/Directory/Key description"); title->SetFillColor(16); title->Draw(); Int_t keycolor = 42; Int_t dircolor = 21; Int_t objcolor = 46; TPaveText *file = new TPaveText(2,19,6,22); file->SetFillColor(39); file->Draw(); file->SetTextSize(0.04); file->AddText("TFile"); file->AddText("Header"); TArrow *arrow = new TArrow(6,20.5,17,20.5,0.02,"|>"); arrow->SetFillStyle(1001); arrow->SetLineWidth(2); arrow->Draw(); TPaveText *free1 = new TPaveText(8,20,11,21); free1->SetFillColor(18); free1->Draw(); free1->AddText("First:Last"); TPaveText *free2 = new TPaveText(12,20,15,21); free2->SetFillColor(18); free2->Draw(); free2->AddText("First:Last"); TText *tfree = new TText(6.2,21.2,"fFree = TList of free blocks"); tfree->SetTextSize(0.02); tfree->Draw(); TText *tkeys = new TText(5.2,18.2,"fKeys = TList of Keys"); tkeys->SetTextSize(0.02); tkeys->Draw(); TText *tmemory = new TText(3.2,15.2,"fListHead = TList of Objects in memory"); tmemory->SetTextSize(0.02); tmemory->Draw(); arrow->DrawArrow(5,17,17,17,0.02,"|>"); TLine *line = new TLine(5,19,5,17); line->SetLineWidth(2); line->Draw(); TPaveText *key0 = new TPaveText(7,16,10,18); key0->SetTextSize(0.04); key0->SetFillColor(keycolor); key0->AddText("Key 0"); key0->Draw(); TPaveText *key1 = new TPaveText(12,16,15,18); key1->SetTextSize(0.04); key1->SetFillColor(keycolor); key1->AddText("Key 1"); key1->Draw(); line->DrawLine(3,19,3,14); line->DrawLine(3,14,18,14); TPaveText *obj0 = new TPaveText(5,13,8,15); obj0->SetFillColor(objcolor); obj0->AddText("Object"); obj0->Draw(); TPaveText *dir1 = new TPaveText(10,13,13,15); dir1->SetFillColor(dircolor); dir1->AddText("SubDir"); dir1->Draw(); TPaveText *obj1 = new TPaveText(15,13,18,15); obj1->SetFillColor(objcolor); obj1->AddText("Object"); obj1->Draw(); arrow->DrawArrow(12,11,17,11,0.015,"|>"); arrow->DrawArrow(11,9,17,9,0.015,"|>"); line->DrawLine(12,13,12,11); line->DrawLine(11,13,11,9); TPaveText *key2 = new TPaveText(14,10.5,16,11.5); key2->SetFillColor(keycolor); key2->AddText("Key 0"); key2->Draw(); TPaveText *obj2 = new TPaveText(14,8.5,16,9.5); obj2->SetFillColor(objcolor); obj2->AddText("Object"); obj2->Draw(); TLine *ldot = new TLine(10,15,2,11); ldot->SetLineStyle(2); ldot->Draw(); ldot->DrawLine(13,15,8,11); ldot->DrawLine(13,13,8,5); TPaveText *dirdata = new TPaveText(2,5,8,11); dirdata->SetTextAlign(12); dirdata->SetFillColor(dircolor); dirdata->Draw(); dirdata->SetTextSize(0.015); dirdata->AddText("fModified: True if directory is modified"); dirdata->AddText("fWritable: True if directory is writable"); dirdata->AddText("fDatimeC: Creation Date/Time"); dirdata->AddText("fDatimeM: Last mod Date/Time"); dirdata->AddText("fNbytesKeys: Number of bytes of key"); dirdata->AddText("fNbytesName : Header length up to title"); dirdata->AddText("fSeekDir: Start of Directory on file"); dirdata->AddText("fSeekParent: Start of Parent Directory"); dirdata->AddText("fSeekKeys: Pointer to Keys record"); TPaveText *keydata = new TPaveText(10,2,17,7); keydata->SetTextAlign(12); keydata->SetFillColor(keycolor); keydata->Draw(); ldot->DrawLine(14,11.5,10,7); ldot->DrawLine(16,11.5,17,7); keydata->SetTextSize(0.015); keydata->AddText("fNbytes: Size of compressed Object"); keydata->AddText("fObjLen: Size of uncompressed Object"); keydata->AddText("fDatime: Date/Time when written to store"); keydata->AddText("fKeylen: Number of bytes for the key"); keydata->AddText("fCycle : Cycle number"); keydata->AddText("fSeekKey: Pointer to Object on file"); keydata->AddText("fSeekPdir: Pointer to directory on file"); keydata->AddText("fClassName: 'TKey'"); keydata->AddText("fName: Object name"); keydata->AddText("fTitle: Object Title"); c1->Print("fildir.png"); }
void rf106_plotdecoration() { // S e t u p m o d e l // --------------------- // Create observables RooRealVar x("x","x",-10,10) ; // Create Gaussian RooRealVar sigma("sigma","sigma",1,0.1,10) ; RooRealVar mean("mean","mean",-3,-10,10) ; RooGaussian gauss("gauss","gauss",x,mean,sigma) ; // Generate a sample of 1000 events with sigma=3 RooDataSet* data = gauss.generate(x,1000) ; // Fit pdf to data gauss.fitTo(*data) ; // P l o t p . d . f a n d d a t a // ------------------------------------- // Overlay projection of gauss on data RooPlot* frame = x.frame(Name("xframe"),Title("RooPlot with decorations"),Bins(40)) ; data->plotOn(frame) ; gauss.plotOn(frame) ; // A d d b o x w i t h p d f p a r a m e t e r s // ----------------------------------------------------- // Left edge of box starts at 55% of Xaxis) gauss.paramOn(frame,Layout(0.55)) ; // A d d b o x w i t h d a t a s t a t i s t i c s // ------------------------------------------------------- // X size of box is from 55% to 99% of Xaxis range, top of box is at 80% of Yaxis range) data->statOn(frame,Layout(0.55,0.99,0.8)) ; // A d d t e x t a n d a r r o w // ----------------------------------- // Add text to frame TText* txt = new TText(2,100,"Signal") ; txt->SetTextSize(0.04) ; txt->SetTextColor(kRed) ; frame->addObject(txt) ; // Add arrow to frame TArrow* arrow = new TArrow(2,100,-1,50,0.01,"|>") ; arrow->SetLineColor(kRed) ; arrow->SetFillColor(kRed) ; arrow->SetLineWidth(3) ; frame->addObject(arrow) ; // P e r s i s t f r a m e w i t h a l l d e c o r a t i o n s i n R O O T f i l e // --------------------------------------------------------------------------------------------- TFile f("rf106_plotdecoration.root","RECREATE") ; frame->Write() ; f.Close() ; // To read back and plot frame with all decorations in clean root session do // root> TFile f("rf106_plotdecoration.root") ; // root> xframe->Draw() ; new TCanvas("rf106_plotdecoration","rf106_plotdecoration",600,600) ; gPad->SetLeftMargin(0.15) ; frame->GetYaxis()->SetTitleOffset(1.6) ; frame->Draw() ; }
int extractSignificanceStats(){ const float lumi7TeV=5.051; const float lumi8TeV=5.261; char fileName[128]; sprintf(fileName,"qmu.root"); TFile *fq=new TFile(fileName,"READ"); TTree *t=(TTree*)fq->Get("q"); float q,m,w; int type; t->SetBranchAddress("q",&q); t->SetBranchAddress("mh",&m); t->SetBranchAddress("weight",&w); t->SetBranchAddress("type",&type); TH1F *hSM=new TH1F("hSM;S = -2 #times ln(L_{1}/L_{2});Number of Toys","",8000,-15,15); TH1F *hPS=new TH1F("hPS;S = -2 #times ln(L_{1}/L_{2});Number of Toys","",8000,-15,15); TH1F *hObs=new TH1F("hObserved","",8000,-15,15); cout<<"Start to lopp on tree in file "<<fileName<<endl; std::vector<float> v_SM, v_PS,v_Obs; for(int i=0;i<t->GetEntries();i++){ t->GetEntry(i); if(i==0)cout<<"MASS in the TREE = "<<m<<endl<<endl; if(type<0){ //SM hypothesis hSM->Fill(-q); v_SM.push_back(-q); } else if(type>0){//ALT hypothesis hPS->Fill(-q); v_PS.push_back(-q); } else{ hObs->Fill(q); v_Obs.push_back(q); } }//end loop on tree entries cout<<"Finished to loop, sorting vectors "<<v_SM.size()<<" "<<v_PS.size()<<" "<<v_Obs.size()<<endl; sort(v_SM.begin(),v_SM.end());//sort in ascending order sort(v_PS.begin(),v_PS.end()); sort(v_Obs.begin(),v_Obs.end()); int ntoysSM= hSM->GetEntries(); int ntoysPS= hPS->GetEntries(); //we assume that SM is on the right and PS on the left of zero if(v_PS.at(0)>v_SM.at(ntoysSM-1)){ cout<<"Swapped distributions !!! The alternative model shouldstay on the negative side of the significance."<<endl; cout<<"Please edit the code and change the sign of q when filling histos and vectors in the loop on tree entries"<<endl; return 1; } float medianSM=v_SM.at(int(ntoysSM/2)); float medianPS=v_PS.at(int(ntoysPS/2)); cout<<"Toys generated "<<ntoysSM<<"\t"<<ntoysPS<<endl; cout<<"Mean of SM/PS hypothesis: "<<hSM->GetMean()<<"\t"<<hPS->GetMean()<<endl; cout<<"RMS of SM/PS hypothesis: "<<hSM->GetRMS()<<"\t"<<hPS->GetRMS()<<endl; cout<<"Median of SM/PS hypothesis: "<<medianSM<<"\t"<<medianPS<<endl; const float step=0.05; float coverage=0.0; float diff=10.0; float cut=v_PS.at(0)-step; float crosspoint=-99.0; int startSM=ntoysSM-1, startPS=0; cout<<"Starting to loop with cut at "<<cut<<endl; /* while(cut<=v_SM.at(ntoysSM-1)+step){ // if(int(cut*100)%100==0) cout<<"Cutting at "<<cut<<endl; for(int iSM=startSM;iSM>=0;iSM--){ if(v_SM.at(iSM)<cut){ startSM=ntoysSM-iSM; //break; } else cout<<"SM "<<v_SM.at(iSM)<<" > "<<cut<<endl; } for(int iPS=startPS;iPS<ntoysPS;iPS++){ if(v_PS.at(iPS)>cut){ startPS=iPS; //break; } else cout<<v_PS.at(iPS)<<" < "<<cut<<endl; } float fracSM=(ntoysSM-startSM)/ntoysSM; float fracPS=startPS/ntoysPS; cout<<"Frac "<<fracSM<<" "<<fracPS<<endl; if(fabs(fracSM-fracPS)<diff){ diff=fabs(fracSM-fracPS); coverage=fabs(fracSM-fracPS)/2.0; crosspoint=cut; cout<<"New coverage="<<coverage<<" at xpoint="<<crosspoint<<" "<<startSM<<endl; } cut+=step; }//end while loop */ cout<<"Finished loop on vector elements, min is "<<diff<<" cut is at "<<cut<<endl; cout<<"q value where SM and ALT distributions have same area on opposite sides: "<<crosspoint<<endl; cout<<"Coverage "<<coverage<<endl; float separation=2*ROOT::Math::normal_quantile_c(1.0 - coverage, 1.0); cout<<"Separation: "<<separation<<endl<<endl<<endl; float integralSM=hSM->Integral(); float integralPS=hPS->Integral(); float tailSM=hSM->Integral(1,hSM->FindBin(medianPS))/integralSM; float tailPS=hPS->Integral(hPS->FindBin(medianSM),hPS->GetNbinsX())/integralPS; cout<<"Tail prob SM: "<<tailSM<<" ("<<ROOT::Math::normal_quantile_c(tailSM,1.0) <<" sigma)"<<endl; cout<<"Tail prob PS: "<<tailPS<<" ("<<ROOT::Math::normal_quantile_c(tailPS,1.0) <<" sigma)"<<endl; diff=10.0; coverage=0.0; for(int i=1;i<hSM->GetNbinsX();i++){ float fracSM=hSM->Integral(1,i) / integralSM; float fracPS=hPS->Integral(i,hPS->GetNbinsX()) / integralPS; if(fabs(fracSM-fracPS)<diff){ diff=fabs(fracSM-fracPS); coverage=(fracSM+fracPS)/2.0; } } float sepH= 2*ROOT::Math::normal_quantile_c(1.0 - coverage, 1.0); cout<<"Separation from histograms = "<<sepH<<" with coverage "<<coverage<<endl; cout << "OBSERVED SIGNIFICANCE" << endl; cout << "observation: " << v_Obs[0] << endl; cout << "bin: " << hObs->GetMaximumBin() << endl; cout << " --------------- " << endl; double obsPval_SM = 1-hSM->Integral(0,hObs->GetMaximumBin())/hSM->Integral(); cout << "pvalue SM: " << obsPval_SM << endl; cout << "signif SM: " << ROOT::Math::normal_quantile_c(obsPval_SM,1.0) << endl;; double obsPval_PS = hPS->Integral(0,hObs->GetMaximumBin())/hPS->Integral(); cout << "pvalue PS: " << obsPval_PS << endl; cout << "signif PS: " << ROOT::Math::normal_quantile_c(obsPval_PS,1.0) << endl;; gStyle->SetOptStat(0); TCanvas *c1=new TCanvas("c1","c1",500,500); c1->cd(); hSM->Rebin(50); hPS->Rebin(50); float maxhSM=hSM->GetBinContent(hSM->GetMaximumBin()); float maxhPS=hPS->GetBinContent(hPS->GetMaximumBin()); if(maxhPS>maxhSM){ hSM->SetMaximum(maxhPS*1.15); hPS->SetMaximum(maxhPS*1.15); } else{ hSM->SetMaximum(maxhSM*1.15); hPS->SetMaximum(maxhSM*1.15); } hSM->SetXTitle("S = -2 #times ln(L_{1}/L_{2})"); hSM->SetYTitle("Generated experiments"); hPS->SetXTitle("S = -2 #times ln(L_{1}/L_{2})"); hPS->SetYTitle("Generated experiments"); hSM->SetLineColor(kMagenta-3); hSM->SetFillColor(kMagenta-3); hSM->SetLineWidth(2); hSM->SetFillStyle(3605); hPS->SetLineColor(kBlue+1); hPS->SetFillColor(kBlue+1); hPS->SetLineWidth(2); hPS->SetFillStyle(3695); hObs->SetLineColor(kGreen+3); hObs->SetLineWidth(2); hSM->Draw(); hPS->Draw("sames"); TArrow *obsArrow = new TArrow(v_Obs[0],hSM->GetMaximum()/2.,v_Obs[0],0.0,.05,"|>"); obsArrow->SetLineWidth(3); obsArrow->Draw("same"); //hObs->Draw("sames"); TLegend *leg = new TLegend(0.7,0.6,0.9,0.9); leg->SetFillColor(0); leg->SetBorderSize(0); leg->AddEntry(hSM," PS, 0-","f"); leg->AddEntry(hPS," SM, 0+","f"); leg->Draw(); TPaveText pt(0.16,0.95,0.45,0.99,"NDC"); pt.SetFillColor(0); pt.AddText("CMS Expected"); pt.SetBorderSize(0); TPaveText pt2(0.55,0.95,0.99,0.99,"NDC"); pt2.SetFillColor(0); pt2.AddText(Form(" #sqrt{s} = 7 TeV, L = %.3f fb^{-1}; #sqrt{s} = 8 TeV, L = %.3f fb^{-1}",lumi7TeV,lumi8TeV)); pt2.SetBorderSize(0); pt.Draw(); pt2.Draw(); c1->SaveAs("sigsep_combine.eps"); c1->SaveAs("sigsep_combine.root"); return 0; }//end main
//void gluinostopMassLifetime(double lumi=4560., double maxInstLumi=5000.) { void gluinostopMassLifetime(double lumi=4560.) { ExtraLimitPlots plots(lumi); //mchamp index 0 is used, corresponds to 0th mass point = 100 GeV plots.calculateCrossSections(7,4,3,0,39,9); // xsecs as extracted from nllfast http://web.physik.rwth-aachen.de/service/wiki/bin/view/Main/SquarksandGluinos // gluino (m_squark=m_gluino): "nllfast gg mstw <mass> <mass>" // gluino (m_squark>>m_gluino): "nllfast gdcpl mstw <mass>" // stop: "nllfast st mstw <mass>" double g_mass [21] = { 200 , 250 , 300 , 350 , 400 , 450 , 500 , 550 , 600 , 650 , 700 , 750 , 800 , 850 , 900 , 950 , 1000 , 1050 , 1100 , 1150 , 1200 }; double g_xsec [21] = { 1010, 302, 106, 42.6, 18.9, 8.93, 4.52, 2.39, 1.31, 0.744, 0.434, 0.259, 0.157, 0.0967, 0.0603, 0.0381, 0.0244, 0.0157, 0.0102, 0.00667, 0.00440 }; double g_xsecdcpl [21] = { 1010, 302, 106, 42.6, 18.9, 8.93, 4.52, 2.39, 1.31, 0.744, 0.434, 0.259, 0.157, 0.0967, 0.0603, 0.0381, 0.0244, 0.0157, 0.0102, 0.00667, 0.00440 }; double s_mass [21] = { 100 , 150 , 200 , 250 , 300 , 350 , 400 , 450 , 500 , 550 , 600 , 650 , 700 , 750 , 800 , 850 , 900 , 950 , 1000 , 1050 , 1100 }; double s_xsec [21] = { 560, 80.3, 18.5, 5.58, 2.00, 0.807, 0.357, 0.170, 0.0856, 0.0452, 0.0248, 0.0140, 0.00811, 0.00480, 0.00290, 0.00177,0.00110, 0.000687, 0.000435, 0.000278, 0.000180 }; double m_mass [10] = { 100 , 200 , 300 , 400 , 500 , 600 , 700 , 800 , 900 , 1000 }; double m_xsec [10] = { 1.88, 0.1402, 0.02622, 0.006968, 0.002257, 0.0008183, 0.0003228, 0.0001333, 0.00005764, 0.0000254 }; //gluino xsec vector<double> masses; for (int i = 0; i < 21; ++i) { masses.push_back(g_mass[i]); g_xsec [i] = log10 (g_xsec [i]*1e3) * 20.; g_xsecdcpl [i] = log10 (g_xsecdcpl [i]*1e3) * 20.; } // Xsection gluino_xs (masses, g_xsec); Xsection gluino_xs (masses, g_xsecdcpl); //stop xsec masses.clear(); for (int i = 0; i < 19; ++i) { masses.push_back(s_mass[i]); s_xsec [i] = log10 (s_xsec [i]*1e3) * 20.; } Xsection stop_xs (masses, s_xsec); //mchamp xsec masses.clear(); for (int i = 0; i < 10; ++i) { masses.push_back(m_mass[i]); m_xsec [i] = log10 (m_xsec [i]*1e3) * 20.; } Xsection mchamp_xs (masses, m_xsec); // graphs TGraph* g_obs = new TGraph (*plots.getLimitGluino()); gluino_xs.xsec2mass (g_obs); TGraph* g_exp = new TGraph (*plots.getExpLimitGluino()); gluino_xs.xsec2mass (g_exp); TGraphAsymmErrors* g_exp_1sig = new TGraphAsymmErrors (*plots.getExpLimitGluino1Sig()); gluino_xs.xsec2mass (g_exp_1sig); TGraphAsymmErrors* g_exp_2sig = new TGraphAsymmErrors (*plots.getExpLimitGluino2Sig()); gluino_xs.xsec2mass (g_exp_2sig); TGraph* stop_obs = new TGraph (*plots.getLimitStop()); stop_xs.xsec2mass (stop_obs); TGraph* stop_exp = new TGraph (*plots.getExpLimitStop()); stop_xs.xsec2mass (stop_exp); TGraphAsymmErrors* stop_exp_1sig = new TGraphAsymmErrors (*plots.getExpLimitStop1Sig()); stop_xs.xsec2mass (stop_exp_1sig); TGraphAsymmErrors* stop_exp_2sig = new TGraphAsymmErrors (*plots.getExpLimitStop2Sig()); stop_xs.xsec2mass (stop_exp_2sig); TGraph* mchamp_obs = new TGraph (*plots.getLimitMchamp()); mchamp_xs.xsec2mass (mchamp_obs); TGraph* mchamp_exp = new TGraph (*plots.getExpLimitMchamp()); mchamp_xs.xsec2mass (mchamp_exp); TGraphAsymmErrors* mchamp_exp_1sig = new TGraphAsymmErrors (*plots.getExpLimitMchamp1Sig()); mchamp_xs.xsec2mass (mchamp_exp_1sig); TGraphAsymmErrors* mchamp_exp_2sig = new TGraphAsymmErrors (*plots.getExpLimitMchamp2Sig()); mchamp_xs.xsec2mass (mchamp_exp_2sig); TCanvas *canvas = new TCanvas("allMassLifetime", "allMassLifetime", 800, 600); canvas->SetLogx(); canvas->SetGridy(); TH1F* h = new TH1F ("h", "", 1, 7.5e-8, 1e6); h->SetStats (0); //h->SetMinimum (300); h->SetMinimum (0); //h->SetMaximum (1500); h->SetMaximum (600); h->SetTitle("Beamgap Expt"); // h->GetXaxis()->SetTitle("#tau_{#tilde{g},#tilde{t},#tilde{#tau}} [s]"); h->GetXaxis()->SetTitle("#tau [s]"); h->GetYaxis()->SetTitle("m [GeV] "); h->Draw (""); // limit arrows double* x = g_obs->GetX(); for (int i = 0; i < g_obs->GetN(); ++i) { if (x[i] > 0.5) { double y = g_obs->GetY()[i]; TArrow* arrow = new TArrow (x[i], y, h->GetXaxis()->GetXmin(), y, 0.02); arrow->SetLineColor (kRed); arrow->SetLineWidth (2); //arrow->Draw(); cout << "GLUINO mass limit @ " << x[i] << "sec is found: " << y << endl; break; } } x = g_obs->GetX(); for (int i = 0; i < stop_obs->GetN(); ++i) { if (x[i] > 0.5) { double y = stop_obs->GetY()[i]; TArrow* arrow = new TArrow (x[i], y, h->GetXaxis()->GetXmin(), y, 0.02); arrow->SetLineColor (kBlue); arrow->SetLineWidth (2); //arrow->Draw(); cout << "STOP mass limit @ " << x[i] << "sec is found: " << y << endl; break; } } x = mchamp_obs->GetX(); for (int i = 0; i < mchamp_obs->GetN(); ++i) { if (x[i] > 0.5) { double y = mchamp_obs->GetY()[i]; TArrow* arrow = new TArrow (x[i], y, h->GetXaxis()->GetXmin(), y, 0.02); arrow->SetLineColor (kBlack); arrow->SetLineWidth (2); arrow->Draw(); cout << "MCHAMP mass limit @ " << x[i] << "sec is found: " << y << endl; break; } } // gluino // 2 sigma band if (g_exp_2sig) { g_exp_2sig->SetLineColor(0); g_exp_2sig->SetLineStyle(0); g_exp_2sig->SetLineWidth(0); g_exp_2sig->SetFillColor(kYellow); g_exp_2sig->SetFillStyle(1001); //g_exp_2sig->Draw("3"); } // 1 sigma band if (g_exp_1sig) { // g_exp_1sig->SetLineColor(8); g_exp_1sig->SetLineColor(0); g_exp_1sig->SetLineStyle(0); g_exp_1sig->SetLineWidth(0); // g_exp_1sig->SetFillColor(8); g_exp_1sig->SetFillColor(kGreen); g_exp_1sig->SetFillStyle(1001); // g_exp_1sig->SetFillStyle(3005); //g_exp_1sig->Draw("3"); // g_exp_1sig->Draw("lX"); } // epxected limit if (g_exp) { g_exp->SetLineColor(kRed); g_exp->SetLineStyle(4); g_exp->SetLineWidth(2); //g_exp->Draw("l3"); } // observed limit if (g_obs) { g_obs->SetLineColor(kRed); g_obs->SetLineStyle(1); g_obs->SetLineWidth(2); //g_obs->Draw("l"); } // stop // 2 sigma band if (stop_exp_2sig) { stop_exp_2sig->SetLineColor(0); stop_exp_2sig->SetLineStyle(0); stop_exp_2sig->SetLineWidth(0); stop_exp_2sig->SetFillColor(kYellow); stop_exp_2sig->SetFillStyle(1001); //stop_exp_2sig->Draw("3"); } // 1 sigma band if (stop_exp_1sig) { // stop_exp_1sig->SetLineColor(8); stop_exp_1sig->SetLineColor(0); stop_exp_1sig->SetLineStyle(0); stop_exp_1sig->SetLineWidth(0); // stop_exp_1sig->SetFillColor(8); stop_exp_1sig->SetFillColor(kGreen); stop_exp_1sig->SetFillStyle(1001); // stop_exp_1sig->SetFillStyle(3005); //stop_exp_1sig->Draw("3"); // stop_exp_1sig->Draw("lX"); } // epxected limit if (stop_exp) { stop_exp->SetLineColor(kBlue); stop_exp->SetLineStyle(3); stop_exp->SetLineWidth(2); //stop_exp->Draw("l3"); } // observed limit if (stop_obs) { stop_obs->SetLineColor(kBlue); stop_obs->SetLineStyle(2); stop_obs->SetLineWidth(2); //stop_obs->Draw("l"); } //mchamp // 2 sigma band if (mchamp_exp_2sig) { mchamp_exp_2sig->SetLineColor(0); mchamp_exp_2sig->SetLineStyle(0); mchamp_exp_2sig->SetLineWidth(0); mchamp_exp_2sig->SetFillColor(kYellow); mchamp_exp_2sig->SetFillStyle(1001); mchamp_exp_2sig->Draw("3"); } // 1 sigma band if (mchamp_exp_1sig) { // mchamp_exp_1sig->SetLineColor(8); mchamp_exp_1sig->SetLineColor(0); mchamp_exp_1sig->SetLineStyle(0); mchamp_exp_1sig->SetLineWidth(0); // mchamp_exp_1sig->SetFillColor(8); mchamp_exp_1sig->SetFillColor(kGreen); mchamp_exp_1sig->SetFillStyle(1001); // mchamp_exp_1sig->SetFillStyle(3005); mchamp_exp_1sig->Draw("3"); // mchamp_exp_1sig->Draw("lX"); } // epxected limit if (mchamp_exp) { mchamp_exp->SetLineColor(kBlack); mchamp_exp->SetLineStyle(3); mchamp_exp->SetLineWidth(2); mchamp_exp->Draw("l3"); } // observed limit if (mchamp_obs) { mchamp_obs->SetLineColor(kBlack); mchamp_obs->SetLineStyle(2); mchamp_obs->SetLineWidth(2); mchamp_obs->Draw("l"); } TPaveText* blurb = new TPaveText(0.20, 0.63, 0.60, 0.90, "NDC"); blurb->AddText("CMS Preliminary 2012"); //blurb->AddText("CMS 2012"); blurb->AddText("#int L dt = 19.7 fb^{-1}"); //, #int L_{eff} dt = 935 pb^{-1}"); //blurb->AddText("L^{max}_{inst} = 3.5 #times 10^{33} cm^{-2}s^{-1}"); // std::stringstream label; // label<<"#int L dt = "<<lumi<<" pb^{-1}"; // blurb->AddText(label.str().c_str()); // double peakInstLumi=maxInstLumi; // int exponent=30; // while (peakInstLumi>10) { // peakInstLumi/=10; // ++exponent; // } // std::stringstream label2; // label2<<"L^{max}_{inst} = "<<peakInstLumi<<" x 10^{"<<exponent<<"} cm^{-2}s^{-1}"; // blurb->AddText(label2.str().c_str()); blurb->AddText("#sqrt{s} = 8 TeV"); //blurb->AddText("E_{gluon} > 120 GeV, E_{top} > 150 GeV"); blurb->SetTextFont(42); blurb->SetBorderSize(0); blurb->SetFillColor(0); blurb->SetShadowColor(0); blurb->SetTextAlign(12); blurb->SetTextSize(0.033); blurb->Draw(); TLegend* leg = new TLegend(0.6, 0.62, 0.87, 0.90,"95% CL Limits:","NDC"); leg->SetTextSize(0.033); leg->SetBorderSize(0); leg->SetTextFont(42); leg->SetFillColor(0); //leg->AddEntry(g_obs, " #tilde{g} observed", "l"); //leg->AddEntry(stop_obs, " #tilde{t} observed", "l"); leg->AddEntry(mchamp_obs, "mchamp observed", "l"); TGraph* expectedStyle1 = new TGraph (*g_exp); expectedStyle1->SetFillColor (g_exp_1sig->GetFillColor()); TGraph* expectedStyle2 = new TGraph (*g_exp); expectedStyle2->SetFillColor (g_exp_2sig->GetFillColor()); //leg->AddEntry(expectedStyle1, " #tilde{g} expected #pm1#sigma", "lf"); //leg->AddEntry(expectedStyle2, " #tilde{g} expected #pm2#sigma", "lf"); expectedStyle1 = new TGraph (*stop_exp); expectedStyle1->SetFillColor (stop_exp_1sig->GetFillColor()); expectedStyle2 = new TGraph (*stop_exp); expectedStyle2->SetFillColor (stop_exp_2sig->GetFillColor()); //leg->AddEntry(expectedStyle1, " #tilde{t} expected #pm1#sigma", "lf"); //leg->AddEntry(expectedStyle2, " #tilde{t} expected #pm2#sigma", "lf"); expectedStyle1 = new TGraph (*mchamp_exp); expectedStyle1->SetFillColor (mchamp_exp_1sig->GetFillColor()); expectedStyle2 = new TGraph (*mchamp_exp); expectedStyle2->SetFillColor (mchamp_exp_2sig->GetFillColor()); leg->AddEntry(expectedStyle1, "mchamp expected #pm1#sigma", "lf"); leg->AddEntry(expectedStyle2, "mchamp expected #pm2#sigma", "lf"); leg->Draw(); h->Draw("sameaxis"); canvas->Print("gluinostopmchampMassLifetime.png"); canvas->Print("gluinostopmchampMassLifetime.pdf"); }
void EvtSel_Q2Pmiss(){ Styles style2; style2.setPadsStyle(2); style2.applyStyle(); TString NameTrees[3] = {"AWG82/ntuples/small/RAll_RunAll.root", "AWG82/ntuples/small/uds_RunAll.root", "AWG82/ntuples/small/ccbar_RunAll.root"}; TChain gen("ntp1"), cont("ntp1"); gen.Add(NameTrees[0]); for(int t=1; t<3; t++) cont.Add(NameTrees[t]); double totMCB = 0, totuds = 0, totccbar = 0, totdata = 0, totOffdata = 0; getNumberB(NameTrees[0], "All", totMCB, totdata, totuds, totccbar, totOffdata); double wuds = totMCB/totuds*2.09/1.05; TH1F *hCount = new TH1F("hCount","",100,-4,12); gen.Draw("candM2>>hCount","weight"); double nTotal = hCount->Integral(); cont.Draw("candM2>>hCount","weight"); nTotal += hCount->Integral()*wuds; TLine line; line.SetLineStyle(2); line.SetLineColor(28); line.SetLineWidth(2); TArrow arrow; arrow.SetLineColor(28); arrow.SetFillColor(28); arrow.SetLineWidth(2); TCanvas can("can","Pmiss and q2 cuts"); can.Divide(2,1); TPad *cPad = (TPad *)can.cd(1); int bins[] = {42,40}, colors[2][4] = {{8,4,1,3},{8,2,4,1}}; double xrange[2][2] = {{0,4.2},{-3,13}}, yield[2][4], maxi[] = {-99,-99}; TString Variable[] = {"candPMiss","candQ2"}; TString labels[2][4] = {{"Signal (", "Normaliz. (","Had. bkg. (",""}, {"Signal (", "D l #nu (", "D* l #nu (", "Bkg. ("}}; // TString labels[2][4] = {{"Signal", "Normaliz.","Had. Bkg.",""}, // {"Signal", "D l #nu", "D* l #nu", "Bkg."}}; TString cuts[2][4] = {{"(candType<3&&MCType>4&&MCType<7||candType>2&&MCType>10&&MCType<13)*weight", "(candType<3&&MCType>0&&MCType<5||candType>2&&MCType>6&&MCType<11)*weight", "(MCType==0&&MCCombmode==12)*weight", ""}, {"(candType<3&&MCType>4&&MCType<7||candType>2&&MCType>10&&MCType<13)*weight", "(candType<3&&(MCType==1||MCType==3)||candType>2&&(MCType==7||MCType==9))*weight", "(candType<3&&(MCType==2||MCType==4)||candType>2&&(MCType==8||MCType==10))*weight", "(!(candType<3&&MCType>0&&MCType<7||candType>2&&MCType>6&&MCType<13))*weight"}}; double legW = 0.4, legH = 0.225; double legX = 1-style2.PadRightMargin-0.02, legY = 1-style2.PadTopMargin-0.02; TLegend *leg[2]; leg[0] = new TLegend(legX-legW, legY-legH, legX, legY); legW = 0.24; legH = 0.285; legX = 0.47; leg[1] = new TLegend(legX-legW, legY-legH, legX, legY); TH1F* h[2][4]; for(int pad=0; pad<2; pad++){ leg[pad]->SetTextSize(style2.LabelSize); leg[pad]->SetFillColor(0); leg[pad]->SetTextFont(style2.nFont); leg[pad]->SetBorderSize(0); for(int i=0; i<4; i++) { if(pad==0 && i==3) continue; TString hname = "h"; hname += pad; hname += i; h[pad][i] = new TH1F(hname,"",bins[pad],xrange[pad][0],xrange[pad][1]); h[pad][i]->SetLineWidth(2); h[pad][i]->SetLineColor(colors[pad][i]); TString vari = Variable[pad]; vari += ">>"; vari += hname; gen.Draw(vari,cuts[pad][i]); if(i==3){ hname = "hCont"; hname += pad; hname += i; TH1F *hCont = new TH1F(hname,"",bins[pad],xrange[pad][0],xrange[pad][1]); TString vari = Variable[pad]; vari += ">>"; vari += hname; cont.Draw(vari,cuts[pad][i]); hCont->Scale(wuds); h[pad][i]->Add(hCont); hCont->Delete(); } yield[pad][i] = h[pad][i]->Integral(); h[pad][i]->Scale(1000/h[pad][i]->Integral()); if(h[pad][i]->GetMaximum()>maxi[pad]) maxi[pad] = h[pad][i]->GetMaximum(); labels[pad][i] += RoundNumber(yield[pad][i]*100,0,nTotal); labels[pad][i] += "%)"; leg[pad]->AddEntry(h[pad][i],labels[pad][i]); } h[pad][0]->SetMaximum(maxi[pad]*1.22); } h[0][0]->Draw(); style2.fixYAxis(h[0][0],cPad); style2.setTitles(h[0][0],"|p_{miss}| (GeV)","Entries/(100 MeV)","a)"); h[0][1]->Draw("same");h[0][2]->Draw("same"); leg[0]->Draw(); line.DrawLine(0.2,h[0][0]->GetMinimum(), 0.2,maxi[0]/1.45); arrow.DrawArrow(0.2,maxi[0]/1.65,0.5,maxi[0]/1.65,0.01,"|>"); cPad = (TPad *)can.cd(2); h[1][0]->Draw(); style2.fixYAxis(h[1][0],cPad); style2.setTitles(h[1][0],"q^{2} (GeV^{2})","Entries/(0.4 GeV^{2})","b)"); h[1][1]->Draw("same"); h[1][2]->Draw("same"); h[1][3]->Draw("same"); leg[1]->Draw(); line.DrawLine(4,h[1][0]->GetMinimum(), 4,maxi[1]/1.45); arrow.DrawArrow(4,maxi[1]/1.65,5.4,maxi[1]/1.65,0.01,"|>"); TString pName = "public_html/EvtSel_Q2Pmiss.eps"; can.SaveAs(pName); for(int pad=0; pad<2; pad++){ leg[pad]->Delete(); for(int i=0; i<4; i++){ if(pad==0 && i==3) continue; h[pad][i]->Delete(); } } hCount->Delete(); }