Exemplo n.º 1
0
void canvasRAAPbPb_0_100()
{
//=========Macro generated from canvas: canvasRAA/canvasRAA
//=========  (Mon Nov 21 04:10:29 2016) by ROOT version6.02/10
   TCanvas *canvasRAA = new TCanvas("canvasRAA", "canvasRAA",0,0,600,600);
   gStyle->SetOptStat(0);
   gStyle->SetOptTitle(0);
   canvasRAA->SetHighLightColor(2);
   canvasRAA->Range(0.5519499,-0.2310559,1.777118,1.69441);
   canvasRAA->SetFillColor(0);
   canvasRAA->SetBorderMode(0);
   canvasRAA->SetBorderSize(2);
   canvasRAA->SetLogx();
   canvasRAA->SetLeftMargin(0.12);
   canvasRAA->SetRightMargin(0.03);
   canvasRAA->SetTopMargin(0.075);
   canvasRAA->SetBottomMargin(0.12);
   canvasRAA->SetFrameBorderMode(0);
   canvasRAA->SetFrameBorderMode(0);
   
   TH2F *hemptyEff1 = new TH2F("hemptyEff1","",50,5,55,10,0,1.55);
   hemptyEff1->SetMinimum(0);
   hemptyEff1->SetMaximum(2);
   hemptyEff1->SetStats(0);

   Int_t ci;      // for color index setting
   TColor *color; // for color definition with alpha
   ci = TColor::GetColor("#000099");
   hemptyEff1->SetLineColor(ci);
   hemptyEff1->SetMarkerStyle(20);
   hemptyEff1->GetXaxis()->SetTitle("p_{T} (GeV/c)");
   hemptyEff1->GetXaxis()->CenterTitle(true);
   hemptyEff1->GetXaxis()->SetLabelFont(42);
   hemptyEff1->GetXaxis()->SetTitleSize(0.05);
   hemptyEff1->GetXaxis()->SetTitleFont(42);
   hemptyEff1->GetYaxis()->SetTitle("R_{AA}");
   hemptyEff1->GetYaxis()->CenterTitle(true);
   hemptyEff1->GetYaxis()->SetLabelFont(42);
   hemptyEff1->GetYaxis()->SetTitleSize(0.05);
   hemptyEff1->GetYaxis()->SetTitleOffset(1.1);
   hemptyEff1->GetYaxis()->SetTitleFont(42);
   hemptyEff1->GetZaxis()->SetLabelFont(42);
   hemptyEff1->GetZaxis()->SetLabelSize(0.035);
   hemptyEff1->GetZaxis()->SetTitleSize(0.035);
   hemptyEff1->GetZaxis()->SetTitleFont(42);
   hemptyEff1->Draw("");
   TLine *line = new TLine(5,1,55,1);
   line->SetLineStyle(2);
   line->SetLineWidth(2);
   line->Draw();
   TBox *box = new TBox(5,0.8492652,5.35,1.150735);
   box->SetFillColor(16);
   box->SetLineColor(16);
   box->Draw();
   TLatex *   tex = new TLatex(0.38,0.595,"Centrality 0-100%");
tex->SetNDC();
   tex->SetTextFont(42);
   tex->SetLineWidth(2);
   tex->Draw();
      tex = new TLatex(0.13,0.936,"25.8 pb^{-1} (5.02 TeV pp) + 350.68 #mub^{-1} (5.02 TeV PbPb)");
tex->SetNDC();
   tex->SetTextFont(42);
   tex->SetTextSize(0.038);
   tex->SetLineWidth(2);
   tex->Draw();
      tex = new TLatex(0.15,0.9,"CMS");
tex->SetNDC();
   tex->SetTextAlign(13);
   tex->SetTextSize(0.06);
   tex->SetLineWidth(2);
   tex->Draw();
      tex = new TLatex(0.15,0.84,"Preliminary");
tex->SetNDC();
   tex->SetTextAlign(13);
   tex->SetTextFont(52);
   tex->SetLineWidth(2);
   tex->Draw();
      tex = new TLatex(0.23,0.7,"T_{AA} and lumi.");
tex->SetNDC();
   tex->SetTextFont(42);
   tex->SetTextSize(0.04);
   tex->SetLineWidth(2);
   tex->Draw();
      tex = new TLatex(0.23,0.65,"uncertainty");
tex->SetNDC();
   tex->SetTextFont(42);
   tex->SetTextSize(0.04);
   tex->SetLineWidth(2);
   tex->Draw();
   
   Double_t gNuclearModification_fx3001[5] = {
   8.5,
   12.5,
   17.5,
   25,
   40};
   Double_t gNuclearModification_fy3001[5] = {
   0.2588925,
   0.3541164,
   0.4248931,
   0.6428491,
   0.3291394};
   Double_t gNuclearModification_felx3001[5] = {
   1.5,
   2.5,
   2.5,
   5,
   10};
   Double_t gNuclearModification_fely3001[5] = {
   0.06471243,
   0.08566381,
   0.1025233,
   0.1541752,
   0.07884685};
   Double_t gNuclearModification_fehx3001[5] = {
   1.5,
   2.5,
   2.5,
   5,
   10};
   Double_t gNuclearModification_fehy3001[5] = {
   0.06471243,
   0.08566381,
   0.1025233,
   0.1541752,
   0.07884685};
   TGraphAsymmErrors *grae = new TGraphAsymmErrors(5,gNuclearModification_fx3001,gNuclearModification_fy3001,gNuclearModification_felx3001,gNuclearModification_fehx3001,gNuclearModification_fely3001,gNuclearModification_fehy3001);
   grae->SetName("gNuclearModification");
   grae->SetTitle("Graph");

   ci = TColor::GetColor("#0099ff");
   grae->SetFillColor(ci);
   grae->SetFillStyle(3001);

   ci = TColor::GetColor("#0099ff");
   grae->SetLineColor(ci);

   ci = TColor::GetColor("#330066");
   grae->SetMarkerColor(ci);
   grae->SetMarkerStyle(21);
   
   TH1F *Graph_gNuclearModification3001 = new TH1F("Graph_gNuclearModification3001","Graph",100,2.7,54.3);
   Graph_gNuclearModification3001->SetMinimum(0.1338956);
   Graph_gNuclearModification3001->SetMaximum(0.8573087);
   Graph_gNuclearModification3001->SetDirectory(0);
   Graph_gNuclearModification3001->SetStats(0);

   ci = TColor::GetColor("#000099");
   Graph_gNuclearModification3001->SetLineColor(ci);
   Graph_gNuclearModification3001->SetMarkerStyle(20);
   Graph_gNuclearModification3001->GetXaxis()->SetLabelFont(42);
   Graph_gNuclearModification3001->GetXaxis()->SetLabelSize(0.035);
   Graph_gNuclearModification3001->GetXaxis()->SetTitleSize(0.035);
   Graph_gNuclearModification3001->GetXaxis()->SetTitleFont(42);
   Graph_gNuclearModification3001->GetYaxis()->SetLabelFont(42);
   Graph_gNuclearModification3001->GetYaxis()->SetLabelSize(0.035);
   Graph_gNuclearModification3001->GetYaxis()->SetTitleSize(0.035);
   Graph_gNuclearModification3001->GetYaxis()->SetTitleFont(42);
   Graph_gNuclearModification3001->GetZaxis()->SetLabelFont(42);
   Graph_gNuclearModification3001->GetZaxis()->SetLabelSize(0.035);
   Graph_gNuclearModification3001->GetZaxis()->SetTitleSize(0.035);
   Graph_gNuclearModification3001->GetZaxis()->SetTitleFont(42);
   grae->SetHistogram(Graph_gNuclearModification3001);
   
   grae->Draw("5");
   Double_t xAxis1[6] = {7, 10, 15, 20, 30, 50}; 
   
   TH1D *hNuclearModification2 = new TH1D("hNuclearModification2","",5, xAxis1);
   hNuclearModification2->SetBinContent(1,0.2588925);
   hNuclearModification2->SetBinContent(2,0.3541164);
   hNuclearModification2->SetBinContent(3,0.4248931);
   hNuclearModification2->SetBinContent(4,0.6428491);
   hNuclearModification2->SetBinContent(5,0.3291394);
   hNuclearModification2->SetBinError(1,0.1738922);
   hNuclearModification2->SetBinError(2,0.08216078);
   hNuclearModification2->SetBinError(3,0.09029037);
   hNuclearModification2->SetBinError(4,0.1168973);
   hNuclearModification2->SetBinError(5,0.1254217);
   hNuclearModification2->SetEntries(54.19682);

   ci = TColor::GetColor("#330066");
   hNuclearModification2->SetLineColor(ci);
   hNuclearModification2->SetLineWidth(3);

   ci = TColor::GetColor("#330066");
   hNuclearModification2->SetMarkerColor(ci);
   hNuclearModification2->SetMarkerStyle(21);
   hNuclearModification2->SetMarkerSize(1.2);
   hNuclearModification2->GetXaxis()->SetTitle("D^{0} p_{T} (GeV/c)");
   hNuclearModification2->GetXaxis()->SetLabelFont(42);
   hNuclearModification2->GetXaxis()->SetLabelSize(0.035);
   hNuclearModification2->GetXaxis()->SetTitleSize(0.035);
   hNuclearModification2->GetXaxis()->SetTitleFont(42);
   hNuclearModification2->GetYaxis()->SetTitle("Uncorrected dN(D^{0})/dp_{T}");
   hNuclearModification2->GetYaxis()->SetLabelFont(42);
   hNuclearModification2->GetYaxis()->SetLabelSize(0.035);
   hNuclearModification2->GetYaxis()->SetTitleSize(0.035);
   hNuclearModification2->GetYaxis()->SetTitleFont(42);
   hNuclearModification2->GetZaxis()->SetLabelFont(42);
   hNuclearModification2->GetZaxis()->SetLabelSize(0.035);
   hNuclearModification2->GetZaxis()->SetTitleSize(0.035);
   hNuclearModification2->GetZaxis()->SetTitleFont(42);
   hNuclearModification2->Draw("same");
   
   TLegend *leg = new TLegend(0.6036242,0.7474695,0.942953,0.8457592,NULL,"brNDC");
   leg->SetBorderSize(0);
   leg->SetTextSize(0.04);
   leg->SetLineColor(0);
   leg->SetLineStyle(1);
   leg->SetLineWidth(1);
   leg->SetFillColor(0);
   leg->SetFillStyle(1001);
   TLegendEntry *entry=leg->AddEntry("gNuclearModification","B^{+} |y| < 1.0","pf");

   ci = TColor::GetColor("#0099ff");
   entry->SetFillColor(ci);
   entry->SetFillStyle(3001);

   ci = TColor::GetColor("#0099ff");
   entry->SetLineColor(ci);
   entry->SetLineStyle(1);
   entry->SetLineWidth(1);

   ci = TColor::GetColor("#330066");
   entry->SetMarkerColor(ci);
   entry->SetMarkerStyle(21);
   entry->SetMarkerSize(1);
   entry->SetTextFont(42);
   entry->SetTextSize(0.038);
   leg->Draw();
   
   TH2F *hemptyEff_copy3 = new TH2F("hemptyEff_copy3","",50,5,55,10,0,1.55);
   hemptyEff_copy3->SetMinimum(0);
   hemptyEff_copy3->SetMaximum(2);
   hemptyEff_copy3->SetDirectory(0);
   hemptyEff_copy3->SetStats(0);

   ci = TColor::GetColor("#000099");
   hemptyEff_copy3->SetLineColor(ci);
   hemptyEff_copy3->SetMarkerStyle(20);
   hemptyEff_copy3->GetXaxis()->SetTitle("p_{T} (GeV/c)");
   hemptyEff_copy3->GetXaxis()->CenterTitle(true);
   hemptyEff_copy3->GetXaxis()->SetLabelFont(42);
   hemptyEff_copy3->GetXaxis()->SetTitleSize(0.05);
   hemptyEff_copy3->GetXaxis()->SetTitleFont(42);
   hemptyEff_copy3->GetYaxis()->SetTitle("R_{AA}");
   hemptyEff_copy3->GetYaxis()->CenterTitle(true);
   hemptyEff_copy3->GetYaxis()->SetLabelFont(42);
   hemptyEff_copy3->GetYaxis()->SetTitleSize(0.05);
   hemptyEff_copy3->GetYaxis()->SetTitleOffset(1.1);
   hemptyEff_copy3->GetYaxis()->SetTitleFont(42);
   hemptyEff_copy3->GetZaxis()->SetLabelFont(42);
   hemptyEff_copy3->GetZaxis()->SetLabelSize(0.035);
   hemptyEff_copy3->GetZaxis()->SetTitleSize(0.035);
   hemptyEff_copy3->GetZaxis()->SetTitleFont(42);
   hemptyEff_copy3->Draw("sameaxis");
   canvasRAA->Modified();
   canvasRAA->cd();
   canvasRAA->SetSelected(canvasRAA);
}
void plot_config_combsignal_category_monojet()
{
//=========Macro generated from canvas: c_0/c_0
//=========  (Wed Mar  2 17:34:36 2016) by ROOT version6.07/03
   TCanvas *c_0 = new TCanvas("c_0", "c_0",0,0,800,800);
   gStyle->SetOptStat(0);
   c_0->SetHighLightColor(2);
   c_0->Range(0,0,1,1);
   c_0->SetFillColor(0);
   c_0->SetBorderMode(0);
   c_0->SetBorderSize(2);
   c_0->SetFrameBorderMode(0);
  
// ------------>Primitives in pad: p1
   TPad *p1 = new TPad("p1", "p1",0,0.28,1,1);
   p1->Draw();
   p1->cd();
   p1->Range(99.99999,-1.766386,1100,4.975187);
   p1->SetFillColor(0);
   p1->SetBorderMode(0);
   p1->SetBorderSize(2);
   p1->SetLogy();
   p1->SetBottomMargin(0.01);
   p1->SetFrameBorderMode(0);
   p1->SetFrameBorderMode(0);
   Double_t xAxis1[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *QCD_FITTY__1 = new TH1F("QCD_FITTY__1","",16, xAxis1);
   QCD_FITTY__1->SetBinContent(1,5.692051);
   QCD_FITTY__1->SetBinContent(2,0.6079234);
   QCD_FITTY__1->SetBinContent(3,0.1364834);
   QCD_FITTY__1->SetBinContent(5,0.1015811);
   QCD_FITTY__1->SetBinError(1,4.740265);
   QCD_FITTY__1->SetBinError(2,0.2887402);
   QCD_FITTY__1->SetBinError(3,0.1318165);
   QCD_FITTY__1->SetBinError(5,0.1015811);
   QCD_FITTY__1->SetMinimum(0.02);
   QCD_FITTY__1->SetMaximum(20000);
   QCD_FITTY__1->SetEntries(93114);
   
   TF1 *func1 = new TF1("func","[0]*(TMath::Exp(-[1]*x))",200,1000);
   func1->SetFillColor(19);
   func1->SetFillStyle(0);
   func1->SetLineColor(2);
   func1->SetLineWidth(2);
   func1->SetChisquare(1.944907);
   func1->SetNDF(14);
   func1->GetXaxis()->SetLabelFont(42);
   func1->GetXaxis()->SetLabelSize(0.035);
   func1->GetXaxis()->SetTitleSize(0.035);
   func1->GetXaxis()->SetTitleFont(42);
   func1->GetYaxis()->SetLabelFont(42);
   func1->GetYaxis()->SetLabelSize(0.035);
   func1->GetYaxis()->SetTitleSize(0.035);
   func1->GetYaxis()->SetTitleFont(42);
   func1->SetParameter(0,18385.94);
   func1->SetParError(0,68314.65);
   func1->SetParLimits(0,0,0);
   func1->SetParameter(1,0.03609646);
   func1->SetParError(1,0.01573978);
   func1->SetParLimits(1,0,0);
   QCD_FITTY__1->GetListOfFunctions()->Add(func1);

   Int_t ci;      // for color index setting
   TColor *color; // for color definition with alpha
   ci = TColor::GetColor("#000099");
   QCD_FITTY__1->SetLineColor(ci);
   QCD_FITTY__1->GetXaxis()->SetLabelFont(42);
   QCD_FITTY__1->GetXaxis()->SetLabelSize(0);
   QCD_FITTY__1->GetXaxis()->SetTitleSize(0.035);
   QCD_FITTY__1->GetXaxis()->SetTitleFont(42);
   QCD_FITTY__1->GetYaxis()->SetTitle("Events/GeV");
   QCD_FITTY__1->GetYaxis()->SetLabelFont(42);
   QCD_FITTY__1->GetYaxis()->SetLabelSize(0.045);
   QCD_FITTY__1->GetYaxis()->SetTitleSize(0.05);
   QCD_FITTY__1->GetYaxis()->SetTitleOffset(0.9);
   QCD_FITTY__1->GetYaxis()->SetTitleFont(42);
   QCD_FITTY__1->GetZaxis()->SetLabelFont(42);
   QCD_FITTY__1->GetZaxis()->SetLabelSize(0.035);
   QCD_FITTY__1->GetZaxis()->SetTitleSize(0.035);
   QCD_FITTY__1->GetZaxis()->SetTitleFont(42);
   QCD_FITTY__1->Draw("");
   
   THStack *bkg = new THStack();
   bkg->SetName("bkg");
   bkg->SetTitle("");
   Double_t xAxis2[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *bkg_stack_1 = new TH1F("bkg_stack_1","",16, xAxis2);
   bkg_stack_1->SetMinimum(0.4825172);
   bkg_stack_1->SetMaximum(1930.069);
   bkg_stack_1->SetDirectory(0);
   bkg_stack_1->SetStats(0);

   ci = TColor::GetColor("#000099");
   bkg_stack_1->SetLineColor(ci);
   bkg_stack_1->GetXaxis()->SetLabelFont(42);
   bkg_stack_1->GetXaxis()->SetLabelSize(0.035);
   bkg_stack_1->GetXaxis()->SetTitleSize(0.035);
   bkg_stack_1->GetXaxis()->SetTitleFont(42);
   bkg_stack_1->GetYaxis()->SetLabelFont(42);
   bkg_stack_1->GetYaxis()->SetLabelSize(0.035);
   bkg_stack_1->GetYaxis()->SetTitleSize(0.035);
   bkg_stack_1->GetYaxis()->SetTitleFont(42);
   bkg_stack_1->GetZaxis()->SetLabelFont(42);
   bkg_stack_1->GetZaxis()->SetLabelSize(0.035);
   bkg_stack_1->GetZaxis()->SetTitleSize(0.035);
   bkg_stack_1->GetZaxis()->SetTitleFont(42);
   bkg->SetHistogram(bkg_stack_1);
   
   Double_t xAxis3[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__2 = new TH1F("signal_data__2","",16, xAxis3);
   signal_data__2->SetBinContent(1,3.366115);
   signal_data__2->SetBinContent(2,0.787499);
   signal_data__2->SetBinContent(3,0.1981346);
   signal_data__2->SetBinContent(4,0.05906976);
   signal_data__2->SetBinContent(5,0.02671834);
   signal_data__2->SetBinContent(6,0.009428909);
   signal_data__2->SetBinContent(7,0.003852866);
   signal_data__2->SetBinContent(9,0.001330514);
   signal_data__2->SetBinError(1,0.06263562);
   signal_data__2->SetBinError(2,0.03020511);
   signal_data__2->SetBinError(3,0.01526774);
   signal_data__2->SetBinError(4,0.008347501);
   signal_data__2->SetBinError(5,0.005865361);
   signal_data__2->SetBinError(6,0.003101941);
   signal_data__2->SetBinError(7,0.002245571);
   signal_data__2->SetBinError(9,0.001330514);
   signal_data__2->SetMinimum(0.02);
   signal_data__2->SetMaximum(20000);
   signal_data__2->SetEntries(93114);

   ci = TColor::GetColor("#006600");
   signal_data__2->SetFillColor(ci);
   signal_data__2->SetLineWidth(2);
   signal_data__2->GetXaxis()->SetLabelFont(42);
   signal_data__2->GetXaxis()->SetLabelSize(0);
   signal_data__2->GetXaxis()->SetTitleSize(0.035);
   signal_data__2->GetXaxis()->SetTitleFont(42);
   signal_data__2->GetYaxis()->SetTitle("Events/GeV");
   signal_data__2->GetYaxis()->SetLabelFont(42);
   signal_data__2->GetYaxis()->SetLabelSize(0.045);
   signal_data__2->GetYaxis()->SetTitleSize(0.05);
   signal_data__2->GetYaxis()->SetTitleOffset(0.9);
   signal_data__2->GetYaxis()->SetTitleFont(42);
   signal_data__2->GetZaxis()->SetLabelFont(42);
   signal_data__2->GetZaxis()->SetLabelSize(0.035);
   signal_data__2->GetZaxis()->SetTitleSize(0.035);
   signal_data__2->GetZaxis()->SetTitleFont(42);
   bkg->Add(signal_data,"");
   Double_t xAxis4[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__3 = new TH1F("signal_data__3","",16, xAxis4);
   signal_data__3->SetBinContent(1,5.462509);
   signal_data__3->SetBinContent(2,0.8986022);
   signal_data__3->SetBinContent(3,0.1478233);
   signal_data__3->SetBinContent(4,0.02431746);
   signal_data__3->SetBinContent(5,0.004000308);
   signal_data__3->SetBinContent(6,0.0006580651);
   signal_data__3->SetBinContent(7,0.0001082541);
   signal_data__3->SetBinContent(8,1.780818e-05);
   signal_data__3->SetBinContent(9,2.929509e-06);
   signal_data__3->SetBinContent(10,4.819148e-07);
   signal_data__3->SetBinContent(11,7.92767e-08);
   signal_data__3->SetBinContent(12,1.30413e-08);
   signal_data__3->SetBinContent(13,2.145341e-09);
   signal_data__3->SetBinContent(14,3.529162e-10);
   signal_data__3->SetBinContent(15,5.805598e-11);
   signal_data__3->SetBinContent(16,9.550416e-12);
   signal_data__3->SetEntries(93130);

   ci = TColor::GetColor("#990099");
   signal_data__3->SetFillColor(ci);
   signal_data__3->SetLineWidth(2);
   signal_data__3->GetXaxis()->SetLabelFont(42);
   signal_data__3->GetXaxis()->SetLabelSize(0);
   signal_data__3->GetXaxis()->SetTitleSize(0.035);
   signal_data__3->GetXaxis()->SetTitleFont(42);
   signal_data__3->GetYaxis()->SetTitle("Events/GeV");
   signal_data__3->GetYaxis()->SetLabelFont(42);
   signal_data__3->GetYaxis()->SetLabelSize(0.045);
   signal_data__3->GetYaxis()->SetTitleSize(0.05);
   signal_data__3->GetYaxis()->SetTitleOffset(0.9);
   signal_data__3->GetYaxis()->SetTitleFont(42);
   signal_data__3->GetZaxis()->SetLabelFont(42);
   signal_data__3->GetZaxis()->SetLabelSize(0.035);
   signal_data__3->GetZaxis()->SetTitleSize(0.035);
   signal_data__3->GetZaxis()->SetTitleFont(42);
   bkg->Add(signal_data,"");
   Double_t xAxis5[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__4 = new TH1F("signal_data__4","",16, xAxis5);
   signal_data__4->SetBinContent(1,11.27338);
   signal_data__4->SetBinContent(2,5.164269);
   signal_data__4->SetBinContent(3,2.134427);
   signal_data__4->SetBinContent(4,0.9783491);
   signal_data__4->SetBinContent(5,0.4964133);
   signal_data__4->SetBinContent(6,0.2830323);
   signal_data__4->SetBinContent(7,0.1401665);
   signal_data__4->SetBinContent(8,0.0659925);
   signal_data__4->SetBinContent(9,0.04940417);
   signal_data__4->SetBinContent(10,0.02696197);
   signal_data__4->SetBinContent(11,0.01117821);
   signal_data__4->SetBinContent(12,0.01268177);
   signal_data__4->SetBinContent(13,0.0008583732);
   signal_data__4->SetBinContent(14,0.005009577);
   signal_data__4->SetBinContent(15,0.001705303);
   signal_data__4->SetBinContent(16,0.0008942028);
   signal_data__4->SetBinError(1,0.1195696);
   signal_data__4->SetBinError(2,0.07936277);
   signal_data__4->SetBinError(3,0.04934242);
   signal_data__4->SetBinError(4,0.03261242);
   signal_data__4->SetBinError(5,0.02356661);
   signal_data__4->SetBinError(6,0.01626474);
   signal_data__4->SetBinError(7,0.01126338);
   signal_data__4->SetBinError(8,0.007697977);
   signal_data__4->SetBinError(9,0.007462621);
   signal_data__4->SetBinError(10,0.005887312);
   signal_data__4->SetBinError(11,0.002575424);
   signal_data__4->SetBinError(12,0.002793759);
   signal_data__4->SetBinError(13,0.0005778751);
   signal_data__4->SetBinError(14,0.003120235);
   signal_data__4->SetBinError(15,0.001219083);
   signal_data__4->SetBinError(16,0.0006213816);
   signal_data__4->SetMinimum(0.02);
   signal_data__4->SetMaximum(20000);
   signal_data__4->SetEntries(93114);

   ci = TColor::GetColor("#cccccc");
   signal_data__4->SetFillColor(ci);
   signal_data__4->SetLineWidth(2);
   signal_data__4->GetXaxis()->SetLabelFont(42);
   signal_data__4->GetXaxis()->SetLabelSize(0);
   signal_data__4->GetXaxis()->SetTitleSize(0.035);
   signal_data__4->GetXaxis()->SetTitleFont(42);
   signal_data__4->GetYaxis()->SetTitle("Events/GeV");
   signal_data__4->GetYaxis()->SetLabelFont(42);
   signal_data__4->GetYaxis()->SetLabelSize(0.045);
   signal_data__4->GetYaxis()->SetTitleSize(0.05);
   signal_data__4->GetYaxis()->SetTitleOffset(0.9);
   signal_data__4->GetYaxis()->SetTitleFont(42);
   signal_data__4->GetZaxis()->SetLabelFont(42);
   signal_data__4->GetZaxis()->SetLabelSize(0.035);
   signal_data__4->GetZaxis()->SetTitleSize(0.035);
   signal_data__4->GetZaxis()->SetTitleFont(42);
   bkg->Add(signal_data,"");
   Double_t xAxis6[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__5 = new TH1F("signal_data__5","",16, xAxis6);
   signal_data__5->SetBinContent(1,9.395635);
   signal_data__5->SetBinContent(2,2.767704);
   signal_data__5->SetBinContent(3,0.825768);
   signal_data__5->SetBinContent(4,0.270995);
   signal_data__5->SetBinContent(5,0.1046858);
   signal_data__5->SetBinContent(6,0.04337157);
   signal_data__5->SetBinContent(7,0.006181574);
   signal_data__5->SetBinContent(8,0.006578597);
   signal_data__5->SetBinContent(9,0.002775389);
   signal_data__5->SetBinContent(10,0.0001472684);
   signal_data__5->SetBinContent(12,0.001207239);
   signal_data__5->SetBinError(1,0.1914438);
   signal_data__5->SetBinError(2,0.09748959);
   signal_data__5->SetBinError(3,0.05366274);
   signal_data__5->SetBinError(4,0.03048251);
   signal_data__5->SetBinError(5,0.01732507);
   signal_data__5->SetBinError(6,0.009830044);
   signal_data__5->SetBinError(7,0.002704768);
   signal_data__5->SetBinError(8,0.002764011);
   signal_data__5->SetBinError(9,0.001745024);
   signal_data__5->SetBinError(10,0.0001403425);
   signal_data__5->SetBinError(12,0.001207239);
   signal_data__5->SetMinimum(0.02);
   signal_data__5->SetMaximum(20000);
   signal_data__5->SetEntries(93114);

   ci = TColor::GetColor("#ffcc00");
   signal_data__5->SetFillColor(ci);
   signal_data__5->SetLineWidth(2);
   signal_data__5->GetXaxis()->SetLabelFont(42);
   signal_data__5->GetXaxis()->SetLabelSize(0);
   signal_data__5->GetXaxis()->SetTitleSize(0.035);
   signal_data__5->GetXaxis()->SetTitleFont(42);
   signal_data__5->GetYaxis()->SetTitle("Events/GeV");
   signal_data__5->GetYaxis()->SetLabelFont(42);
   signal_data__5->GetYaxis()->SetLabelSize(0.045);
   signal_data__5->GetYaxis()->SetTitleSize(0.05);
   signal_data__5->GetYaxis()->SetTitleOffset(0.9);
   signal_data__5->GetYaxis()->SetTitleFont(42);
   signal_data__5->GetZaxis()->SetLabelFont(42);
   signal_data__5->GetZaxis()->SetLabelSize(0.035);
   signal_data__5->GetZaxis()->SetTitleSize(0.035);
   signal_data__5->GetZaxis()->SetTitleFont(42);
   bkg->Add(signal_data,"");
   Double_t xAxis7[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__6 = new TH1F("signal_data__6","",16, xAxis7);
   signal_data__6->SetBinContent(1,485.676);
   signal_data__6->SetBinContent(2,150.4476);
   signal_data__6->SetBinContent(3,48.99616);
   signal_data__6->SetBinContent(4,16.70447);
   signal_data__6->SetBinContent(5,7.399257);
   signal_data__6->SetBinContent(6,2.859279);
   signal_data__6->SetBinContent(7,1.354017);
   signal_data__6->SetBinContent(8,0.6687575);
   signal_data__6->SetBinContent(9,0.3364223);
   signal_data__6->SetBinContent(10,0.1512945);
   signal_data__6->SetBinContent(11,0.0427805);
   signal_data__6->SetBinContent(12,0.008073589);
   signal_data__6->SetBinContent(15,0.04519286);
   signal_data__6->SetBinError(1,5.197335);
   signal_data__6->SetBinError(2,2.689428);
   signal_data__6->SetBinError(3,1.486889);
   signal_data__6->SetBinError(4,0.7618376);
   signal_data__6->SetBinError(5,0.5645714);
   signal_data__6->SetBinError(6,0.2985256);
   signal_data__6->SetBinError(7,0.2173355);
   signal_data__6->SetBinError(8,0.1679533);
   signal_data__6->SetBinError(9,0.08155546);
   signal_data__6->SetBinError(10,0.07316577);
   signal_data__6->SetBinError(11,0.02187704);
   signal_data__6->SetBinError(12,0.008073589);
   signal_data__6->SetBinError(15,0.02937385);
   signal_data__6->SetMinimum(0.02);
   signal_data__6->SetMaximum(20000);
   signal_data__6->SetEntries(93114);

   ci = TColor::GetColor("#0066ff");
   signal_data__6->SetFillColor(ci);
   signal_data__6->SetLineWidth(2);
   signal_data__6->GetXaxis()->SetLabelFont(42);
   signal_data__6->GetXaxis()->SetLabelSize(0);
   signal_data__6->GetXaxis()->SetTitleSize(0.035);
   signal_data__6->GetXaxis()->SetTitleFont(42);
   signal_data__6->GetYaxis()->SetTitle("Events/GeV");
   signal_data__6->GetYaxis()->SetLabelFont(42);
   signal_data__6->GetYaxis()->SetLabelSize(0.045);
   signal_data__6->GetYaxis()->SetTitleSize(0.05);
   signal_data__6->GetYaxis()->SetTitleOffset(0.9);
   signal_data__6->GetYaxis()->SetTitleFont(42);
   signal_data__6->GetZaxis()->SetLabelFont(42);
   signal_data__6->GetZaxis()->SetLabelSize(0.035);
   signal_data__6->GetZaxis()->SetTitleSize(0.035);
   signal_data__6->GetZaxis()->SetTitleFont(42);
   bkg->Add(signal_data,"");
   Double_t xAxis8[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__7 = new TH1F("signal_data__7","",16, xAxis8);
   signal_data__7->SetBinContent(1,691.1194);
   signal_data__7->SetBinContent(2,259.5456);
   signal_data__7->SetBinContent(3,104.7472);
   signal_data__7->SetBinContent(4,44.93597);
   signal_data__7->SetBinContent(5,20.99294);
   signal_data__7->SetBinContent(6,10.32105);
   signal_data__7->SetBinContent(7,5.277536);
   signal_data__7->SetBinContent(8,2.623267);
   signal_data__7->SetBinContent(9,1.527075);
   signal_data__7->SetBinContent(10,0.8305721);
   signal_data__7->SetBinContent(11,0.4631412);
   signal_data__7->SetBinContent(12,0.2500485);
   signal_data__7->SetBinContent(13,0.1764325);
   signal_data__7->SetBinContent(14,0.08449654);
   signal_data__7->SetBinContent(15,0.06779213);
   signal_data__7->SetBinContent(16,0.03614071);
   signal_data__7->SetBinError(1,1.220341);
   signal_data__7->SetBinError(2,0.7476462);
   signal_data__7->SetBinError(3,0.4749452);
   signal_data__7->SetBinError(4,0.3110437);
   signal_data__7->SetBinError(5,0.2123163);
   signal_data__7->SetBinError(6,0.1491278);
   signal_data__7->SetBinError(7,0.1066568);
   signal_data__7->SetBinError(8,0.07549773);
   signal_data__7->SetBinError(9,0.05746214);
   signal_data__7->SetBinError(10,0.04245363);
   signal_data__7->SetBinError(11,0.03171115);
   signal_data__7->SetBinError(12,0.0230028);
   signal_data__7->SetBinError(13,0.01935178);
   signal_data__7->SetBinError(14,0.01319687);
   signal_data__7->SetBinError(15,0.01228991);
   signal_data__7->SetBinError(16,0.008698386);
   signal_data__7->SetMinimum(0.02);
   signal_data__7->SetMaximum(20000);
   signal_data__7->SetEntries(93114);

   ci = TColor::GetColor("#9999ff");
   signal_data__7->SetFillColor(ci);
   signal_data__7->SetLineWidth(2);
   signal_data__7->GetXaxis()->SetLabelFont(42);
   signal_data__7->GetXaxis()->SetLabelSize(0);
   signal_data__7->GetXaxis()->SetTitleSize(0.035);
   signal_data__7->GetXaxis()->SetTitleFont(42);
   signal_data__7->GetYaxis()->SetTitle("Events/GeV");
   signal_data__7->GetYaxis()->SetLabelFont(42);
   signal_data__7->GetYaxis()->SetLabelSize(0.045);
   signal_data__7->GetYaxis()->SetTitleSize(0.05);
   signal_data__7->GetYaxis()->SetTitleOffset(0.9);
   signal_data__7->GetYaxis()->SetTitleFont(42);
   signal_data__7->GetZaxis()->SetLabelFont(42);
   signal_data__7->GetZaxis()->SetLabelSize(0.035);
   signal_data__7->GetZaxis()->SetTitleSize(0.035);
   signal_data__7->GetZaxis()->SetTitleFont(42);
   bkg->Add(signal_data,"");
   bkg->Draw("histfsame");
   Double_t xAxis9[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__8 = new TH1F("signal_data__8","",16, xAxis9);
   signal_data__8->SetBinContent(1,2.224751);
   signal_data__8->SetBinContent(2,1.974505);
   signal_data__8->SetBinContent(3,1.697419);
   signal_data__8->SetBinContent(4,1.381147);
   signal_data__8->SetBinContent(5,1.072331);
   signal_data__8->SetBinContent(6,0.7898172);
   signal_data__8->SetBinContent(7,0.6394378);
   signal_data__8->SetBinContent(8,0.5046116);
   signal_data__8->SetBinContent(9,0.4333764);
   signal_data__8->SetBinContent(10,0.3183351);
   signal_data__8->SetBinContent(11,0.2179884);
   signal_data__8->SetBinContent(12,0.2030754);
   signal_data__8->SetBinContent(13,0.1783056);
   signal_data__8->SetBinContent(14,0.1315356);
   signal_data__8->SetBinContent(15,0.08231596);
   signal_data__8->SetBinContent(16,0.06008587);
   signal_data__8->SetBinError(1,29.60662);
   signal_data__8->SetBinError(2,27.89184);
   signal_data__8->SetBinError(3,25.86084);
   signal_data__8->SetBinError(4,23.32749);
   signal_data__8->SetBinError(5,20.55477);
   signal_data__8->SetBinError(6,17.64052);
   signal_data__8->SetBinError(7,15.87257);
   signal_data__8->SetBinError(8,14.10025);
   signal_data__8->SetBinError(9,13.06715);
   signal_data__8->SetBinError(10,11.19929);
   signal_data__8->SetBinError(11,9.267548);
   signal_data__8->SetBinError(12,8.944927);
   signal_data__8->SetBinError(13,8.38167);
   signal_data__8->SetBinError(14,7.198961);
   signal_data__8->SetBinError(15,5.694953);
   signal_data__8->SetBinError(16,4.865577);
   signal_data__8->SetEntries(93114);

   ci = TColor::GetColor("#cc0000");
   signal_data__8->SetLineColor(ci);
   signal_data__8->SetLineStyle(7);
   signal_data__8->SetLineWidth(5);
   signal_data__8->GetXaxis()->SetLabelFont(42);
   signal_data__8->GetXaxis()->SetLabelSize(0);
   signal_data__8->GetXaxis()->SetTitleSize(0.035);
   signal_data__8->GetXaxis()->SetTitleFont(42);
   signal_data__8->GetYaxis()->SetTitle("Events/GeV");
   signal_data__8->GetYaxis()->SetLabelFont(42);
   signal_data__8->GetYaxis()->SetLabelSize(0.045);
   signal_data__8->GetYaxis()->SetTitleSize(0.05);
   signal_data__8->GetYaxis()->SetTitleOffset(0.9);
   signal_data__8->GetYaxis()->SetTitleFont(42);
   signal_data__8->GetZaxis()->SetLabelFont(42);
   signal_data__8->GetZaxis()->SetLabelSize(0.035);
   signal_data__8->GetZaxis()->SetTitleSize(0.035);
   signal_data__8->GetZaxis()->SetTitleFont(42);
   signal_data__8->Draw("samehist");
   Double_t xAxis10[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__9 = new TH1F("signal_data__9","",16, xAxis10);
   signal_data__9->SetBinContent(1,1206.523);
   signal_data__9->SetBinContent(2,419.3206);
   signal_data__9->SetBinContent(3,157.0381);
   signal_data__9->SetBinContent(4,62.94885);
   signal_data__9->SetBinContent(5,29.12159);
   signal_data__9->SetBinContent(6,13.51616);
   signal_data__9->SetBinContent(7,6.781754);
   signal_data__9->SetBinContent(8,3.364596);
   signal_data__9->SetBinContent(9,1.917007);
   signal_data__9->SetBinContent(10,1.008976);
   signal_data__9->SetBinContent(11,0.5170999);
   signal_data__9->SetBinContent(12,0.2720111);
   signal_data__9->SetBinContent(13,0.1772909);
   signal_data__9->SetBinContent(14,0.08950612);
   signal_data__9->SetBinContent(15,0.1146903);
   signal_data__9->SetBinContent(16,0.03703492);
   signal_data__9->SetBinError(1,7.143284);
   signal_data__9->SetBinError(2,2.809285);
   signal_data__9->SetBinError(3,1.568227);
   signal_data__9->SetBinError(4,0.8241403);
   signal_data__9->SetBinError(5,0.6123951);
   signal_data__9->SetBinError(6,0.3342565);
   signal_data__9->SetBinError(7,0.2423832);
   signal_data__9->SetBinError(8,0.1843234);
   signal_data__9->SetBinError(9,0.1000685);
   signal_data__9->SetBinError(10,0.08479517);
   signal_data__9->SetBinError(11,0.03861133);
   signal_data__9->SetBinError(12,0.02456775);
   signal_data__9->SetBinError(13,0.01936041);
   signal_data__9->SetBinError(14,0.01356072);
   signal_data__9->SetBinError(15,0.03186457);
   signal_data__9->SetBinError(16,0.008720552);
   signal_data__9->SetMinimum(0.02);
   signal_data__9->SetMaximum(20000);
   signal_data__9->SetEntries(93114);
   signal_data__9->SetFillColor(1);
   signal_data__9->SetFillStyle(3144);

   ci = TColor::GetColor("#000099");
   signal_data__9->SetLineColor(ci);
   signal_data__9->SetMarkerSize(0);
   signal_data__9->GetXaxis()->SetLabelFont(42);
   signal_data__9->GetXaxis()->SetLabelSize(0);
   signal_data__9->GetXaxis()->SetTitleSize(0.035);
   signal_data__9->GetXaxis()->SetTitleFont(42);
   signal_data__9->GetYaxis()->SetTitle("Events/GeV");
   signal_data__9->GetYaxis()->SetLabelFont(42);
   signal_data__9->GetYaxis()->SetLabelSize(0.045);
   signal_data__9->GetYaxis()->SetTitleSize(0.05);
   signal_data__9->GetYaxis()->SetTitleOffset(0.9);
   signal_data__9->GetYaxis()->SetTitleFont(42);
   signal_data__9->GetZaxis()->SetLabelFont(42);
   signal_data__9->GetZaxis()->SetLabelSize(0.035);
   signal_data__9->GetZaxis()->SetTitleSize(0.035);
   signal_data__9->GetZaxis()->SetTitleFont(42);
   signal_data__9->Draw("E2same");
   Double_t xAxis11[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__10 = new TH1F("signal_data__10","",16, xAxis11);
   signal_data__10->SetBinContent(1,1215.98);
   signal_data__10->SetBinContent(2,401.4);
   signal_data__10->SetBinContent(3,141.34);
   signal_data__10->SetBinContent(4,56.42);
   signal_data__10->SetBinContent(5,24.04);
   signal_data__10->SetBinContent(6,10.98);
   signal_data__10->SetBinContent(7,5.44);
   signal_data__10->SetBinContent(8,2.62);
   signal_data__10->SetBinContent(9,1.7);
   signal_data__10->SetBinContent(10,0.8);
   signal_data__10->SetBinContent(11,0.38);
   signal_data__10->SetBinContent(12,0.26);
   signal_data__10->SetBinContent(13,0.14);
   signal_data__10->SetBinContent(14,0.06);
   signal_data__10->SetBinContent(15,0.06);
   signal_data__10->SetBinContent(16,0.02);
   signal_data__10->SetBinError(1,4.931491);
   signal_data__10->SetBinError(2,2.833373);
   signal_data__10->SetBinError(3,1.681309);
   signal_data__10->SetBinError(4,1.062262);
   signal_data__10->SetBinError(5,0.6933974);
   signal_data__10->SetBinError(6,0.468615);
   signal_data__10->SetBinError(7,0.3298485);
   signal_data__10->SetBinError(8,0.2289105);
   signal_data__10->SetBinError(9,0.1843909);
   signal_data__10->SetBinError(10,0.1264911);
   signal_data__10->SetBinError(11,0.08717798);
   signal_data__10->SetBinError(12,0.07211103);
   signal_data__10->SetBinError(13,0.05291503);
   signal_data__10->SetBinError(14,0.03464102);
   signal_data__10->SetBinError(15,0.03464102);
   signal_data__10->SetBinError(16,0.02);
   signal_data__10->SetMinimum(0.02);
   signal_data__10->SetMaximum(20000);
   signal_data__10->SetEntries(93098);
   signal_data__10->SetMarkerStyle(20);
   signal_data__10->SetMarkerSize(0.9);
   signal_data__10->GetXaxis()->SetLabelFont(42);
   signal_data__10->GetXaxis()->SetLabelSize(0);
   signal_data__10->GetXaxis()->SetTitleSize(0.035);
   signal_data__10->GetXaxis()->SetTitleFont(42);
   signal_data__10->GetYaxis()->SetTitle("Events/GeV");
   signal_data__10->GetYaxis()->SetLabelFont(42);
   signal_data__10->GetYaxis()->SetLabelSize(0.045);
   signal_data__10->GetYaxis()->SetTitleSize(0.05);
   signal_data__10->GetYaxis()->SetTitleOffset(0.9);
   signal_data__10->GetYaxis()->SetTitleFont(42);
   signal_data__10->GetZaxis()->SetLabelFont(42);
   signal_data__10->GetZaxis()->SetLabelSize(0.035);
   signal_data__10->GetZaxis()->SetTitleSize(0.035);
   signal_data__10->GetZaxis()->SetTitleFont(42);
   signal_data__10->Draw("same");
   
   TLegend *leg = new TLegend(0.43,0.41,0.88,0.89,NULL,"brNDC");
   leg->SetBorderSize(0);
   leg->SetLineColor(1);
   leg->SetLineStyle(1);
   leg->SetLineWidth(1);
   leg->SetFillColor(0);
   leg->SetFillStyle(1001);
   TLegendEntry *entry=leg->AddEntry("signal_data","Data","PEL");
   entry->SetLineColor(1);
   entry->SetLineStyle(1);
   entry->SetLineWidth(1);
   entry->SetMarkerColor(1);
   entry->SetMarkerStyle(20);
   entry->SetMarkerSize(0.9);
   entry->SetTextFont(42);
   entry=leg->AddEntry("signal_data","Z(#rightarrow #nu#nu)+jets","F");

   ci = TColor::GetColor("#9999ff");
   entry->SetFillColor(ci);
   entry->SetFillStyle(1001);
   entry->SetLineColor(1);
   entry->SetLineStyle(1);
   entry->SetLineWidth(2);
   entry->SetMarkerColor(1);
   entry->SetMarkerStyle(21);
   entry->SetMarkerSize(1);
   entry->SetTextFont(42);
   entry=leg->AddEntry("signal_data","W(#rightarrow l#nu)+jets","F");

   ci = TColor::GetColor("#0066ff");
   entry->SetFillColor(ci);
   entry->SetFillStyle(1001);
   entry->SetLineColor(1);
   entry->SetLineStyle(1);
   entry->SetLineWidth(2);
   entry->SetMarkerColor(1);
   entry->SetMarkerStyle(21);
   entry->SetMarkerSize(1);
   entry->SetTextFont(42);
   entry=leg->AddEntry("signal_data","top","F");

   ci = TColor::GetColor("#ffcc00");
   entry->SetFillColor(ci);
   entry->SetFillStyle(1001);
   entry->SetLineColor(1);
   entry->SetLineStyle(1);
   entry->SetLineWidth(2);
   entry->SetMarkerColor(1);
   entry->SetMarkerStyle(21);
   entry->SetMarkerSize(1);
   entry->SetTextFont(42);
   entry=leg->AddEntry("signal_data","Dibosons","F");

   ci = TColor::GetColor("#cccccc");
   entry->SetFillColor(ci);
   entry->SetFillStyle(1001);
   entry->SetLineColor(1);
   entry->SetLineStyle(1);
   entry->SetLineWidth(2);
   entry->SetMarkerColor(1);
   entry->SetMarkerStyle(21);
   entry->SetMarkerSize(1);
   entry->SetTextFont(42);
   entry=leg->AddEntry("signal_data","QCD","F");

   ci = TColor::GetColor("#990099");
   entry->SetFillColor(ci);
   entry->SetFillStyle(1001);
   entry->SetLineColor(1);
   entry->SetLineStyle(1);
   entry->SetLineWidth(2);
   entry->SetMarkerColor(1);
   entry->SetMarkerStyle(21);
   entry->SetMarkerSize(1);
   entry->SetTextFont(42);
   entry=leg->AddEntry("signal_data","Z(#rightarrow ll)+jets","F");

   ci = TColor::GetColor("#006600");
   entry->SetFillColor(ci);
   entry->SetFillStyle(1001);
   entry->SetLineColor(1);
   entry->SetLineStyle(1);
   entry->SetLineWidth(2);
   entry->SetMarkerColor(1);
   entry->SetMarkerStyle(21);
   entry->SetMarkerSize(1);
   entry->SetTextFont(42);
   entry=leg->AddEntry("signal_data","#splitline{Vector Mediator}{m_{med}=1 TeV, m_{DM}=10 GeV}","L");

   ci = TColor::GetColor("#cc0000");
   entry->SetLineColor(ci);
   entry->SetLineStyle(7);
   entry->SetLineWidth(5);
   entry->SetMarkerColor(1);
   entry->SetMarkerStyle(21);
   entry->SetMarkerSize(1);
   entry->SetTextFont(42);
   leg->Draw();
   Double_t xAxis12[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *QCD_FITTY_copy__11 = new TH1F("QCD_FITTY_copy__11","",16, xAxis12);
   QCD_FITTY_copy__11->SetBinContent(1,5.692051);
   QCD_FITTY_copy__11->SetBinContent(2,0.6079234);
   QCD_FITTY_copy__11->SetBinContent(3,0.1364834);
   QCD_FITTY_copy__11->SetBinContent(5,0.1015811);
   QCD_FITTY_copy__11->SetBinError(1,4.740265);
   QCD_FITTY_copy__11->SetBinError(2,0.2887402);
   QCD_FITTY_copy__11->SetBinError(3,0.1318165);
   QCD_FITTY_copy__11->SetBinError(5,0.1015811);
   QCD_FITTY_copy__11->SetMinimum(0.02);
   QCD_FITTY_copy__11->SetMaximum(20000);
   QCD_FITTY_copy__11->SetEntries(93114);
   QCD_FITTY_copy__11->SetDirectory(0);
   
   TF1 *func2 = new TF1("func","[0]*(TMath::Exp(-[1]*x))",200,1000);
   func2->SetFillColor(19);
   func2->SetFillStyle(0);
   func2->SetLineColor(2);
   func2->SetLineWidth(2);
   func2->SetChisquare(1.944907);
   func2->SetNDF(14);
   func2->GetXaxis()->SetLabelFont(42);
   func2->GetXaxis()->SetLabelSize(0.035);
   func2->GetXaxis()->SetTitleSize(0.035);
   func2->GetXaxis()->SetTitleFont(42);
   func2->GetYaxis()->SetLabelFont(42);
   func2->GetYaxis()->SetLabelSize(0.035);
   func2->GetYaxis()->SetTitleSize(0.035);
   func2->GetYaxis()->SetTitleFont(42);
   func2->SetParameter(0,18385.94);
   func2->SetParError(0,68314.65);
   func2->SetParLimits(0,0,0);
   func2->SetParameter(1,0.03609646);
   func2->SetParError(1,0.01573978);
   func2->SetParLimits(1,0,0);
   QCD_FITTY_copy__11->GetListOfFunctions()->Add(func2);

   ci = TColor::GetColor("#000099");
   QCD_FITTY_copy__11->SetLineColor(ci);
   QCD_FITTY_copy__11->GetXaxis()->SetLabelFont(42);
   QCD_FITTY_copy__11->GetXaxis()->SetLabelSize(0);
   QCD_FITTY_copy__11->GetXaxis()->SetTitleSize(0.035);
   QCD_FITTY_copy__11->GetXaxis()->SetTitleFont(42);
   QCD_FITTY_copy__11->GetYaxis()->SetTitle("Events/GeV");
   QCD_FITTY_copy__11->GetYaxis()->SetLabelFont(42);
   QCD_FITTY_copy__11->GetYaxis()->SetLabelSize(0.045);
   QCD_FITTY_copy__11->GetYaxis()->SetTitleSize(0.05);
   QCD_FITTY_copy__11->GetYaxis()->SetTitleOffset(0.9);
   QCD_FITTY_copy__11->GetYaxis()->SetTitleFont(42);
   QCD_FITTY_copy__11->GetZaxis()->SetLabelFont(42);
   QCD_FITTY_copy__11->GetZaxis()->SetLabelSize(0.035);
   QCD_FITTY_copy__11->GetZaxis()->SetTitleSize(0.035);
   QCD_FITTY_copy__11->GetZaxis()->SetTitleFont(42);
   QCD_FITTY_copy__11->Draw("sameaxis");
   TLatex *   tex = new TLatex(0.17,0.82,"#bf{CMS}");
tex->SetNDC();
   tex->SetTextFont(42);
   tex->SetLineWidth(2);
   tex->Draw();
      tex = new TLatex(0.72,0.92,"19.7 fb^{-1} (8 TeV)");
tex->SetNDC();
   tex->SetTextFont(42);
   tex->SetTextSize(0.04);
   tex->SetLineWidth(2);
   tex->Draw();
   p1->Modified();
   c_0->cd();
  
// ------------>Primitives in pad: p2
   TPad *p2 = new TPad("p2", "p2",0,0.068,1,0.28);
   p2->Draw();
   p2->cd();
   p2->Range(99.99999,0.03045454,1100,1.825909);
   p2->SetFillColor(0);
   p2->SetBorderMode(0);
   p2->SetBorderSize(2);
   p2->SetTopMargin(0.02);
   p2->SetFrameBorderMode(0);
   p2->SetFrameBorderMode(0);
   Double_t xAxis13[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__12 = new TH1F("signal_data__12","",16, xAxis13);
   signal_data__12->SetBinContent(1,1.00803);
   signal_data__12->SetBinContent(2,0.9565997);
   signal_data__12->SetBinContent(3,0.899971);
   signal_data__12->SetBinContent(4,0.8959371);
   signal_data__12->SetBinContent(5,0.8282797);
   signal_data__12->SetBinContent(6,0.8123214);
   signal_data__12->SetBinContent(7,0.8021396);
   signal_data__12->SetBinContent(8,0.7786927);
   signal_data__12->SetBinContent(9,0.8867975);
   signal_data__12->SetBinContent(10,0.7928828);
   signal_data__12->SetBinContent(11,0.7348676);
   signal_data__12->SetBinContent(12,0.9558432);
   signal_data__12->SetBinContent(13,0.7896627);
   signal_data__12->SetBinContent(14,0.6703452);
   signal_data__12->SetBinContent(15,0.523148);
   signal_data__12->SetBinContent(16,0.5400309);
   signal_data__12->SetBinError(1,0.004088137);
   signal_data__12->SetBinError(2,0.006752375);
   signal_data__12->SetBinError(3,0.0107056);
   signal_data__12->SetBinError(4,0.01686848);
   signal_data__12->SetBinError(5,0.02389048);
   signal_data__12->SetBinError(6,0.03466903);
   signal_data__12->SetBinError(7,0.04863685);
   signal_data__12->SetBinError(8,0.0680347);
   signal_data__12->SetBinError(9,0.09618669);
   signal_data__12->SetBinError(10,0.1253658);
   signal_data__12->SetBinError(11,0.1685902);
   signal_data__12->SetBinError(12,0.2651032);
   signal_data__12->SetBinError(13,0.2984644);
   signal_data__12->SetBinError(14,0.387024);
   signal_data__12->SetBinError(15,0.3020397);
   signal_data__12->SetBinError(16,0.5400309);
   signal_data__12->SetMinimum(0.21);
   signal_data__12->SetMaximum(1.79);
   signal_data__12->SetEntries(219.6838);
   signal_data__12->SetMarkerStyle(20);
   signal_data__12->SetMarkerSize(0.9);
   signal_data__12->GetXaxis()->SetLabelFont(42);
   signal_data__12->GetXaxis()->SetLabelSize(0.12);
   signal_data__12->GetXaxis()->SetTitleSize(0.085);
   signal_data__12->GetXaxis()->SetTitleFont(42);
   signal_data__12->GetYaxis()->SetTitle("Data/MC");
   signal_data__12->GetYaxis()->SetNdivisions(5);
   signal_data__12->GetYaxis()->SetLabelFont(42);
   signal_data__12->GetYaxis()->SetLabelSize(0.12);
   signal_data__12->GetYaxis()->SetTitleSize(0.12);
   signal_data__12->GetYaxis()->SetTitleOffset(0.3);
   signal_data__12->GetYaxis()->SetTitleFont(42);
   signal_data__12->GetZaxis()->SetLabelFont(42);
   signal_data__12->GetZaxis()->SetLabelSize(0.035);
   signal_data__12->GetZaxis()->SetTitleSize(0.035);
   signal_data__12->GetZaxis()->SetTitleFont(42);
   signal_data__12->Draw("");
   Double_t xAxis14[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__13 = new TH1F("signal_data__13","",16, xAxis14);
   signal_data__13->SetBinContent(1,1.00019);
   signal_data__13->SetBinContent(2,0.9993073);
   signal_data__13->SetBinContent(3,0.9999277);
   signal_data__13->SetBinContent(4,0.9996138);
   signal_data__13->SetBinContent(5,1.003362);
   signal_data__13->SetBinContent(6,0.9999514);
   signal_data__13->SetBinContent(7,0.999984);
   signal_data__13->SetBinContent(8,0.9999948);
   signal_data__13->SetBinContent(9,0.9999985);
   signal_data__13->SetBinContent(10,0.9999995);
   signal_data__13->SetBinContent(11,0.9999998);
   signal_data__13->SetBinContent(12,0.9999999);
   signal_data__13->SetBinContent(13,0.9999998);
   signal_data__13->SetBinContent(14,1);
   signal_data__13->SetBinContent(15,0.9999999);
   signal_data__13->SetBinContent(16,1);
   signal_data__13->SetBinError(1,0.005921683);
   signal_data__13->SetBinError(2,0.006694971);
   signal_data__13->SetBinError(3,0.009985558);
   signal_data__13->SetBinError(4,0.01308717);
   signal_data__13->SetBinError(5,0.0210996);
   signal_data__13->SetBinError(6,0.02472894);
   signal_data__13->SetBinError(7,0.03573992);
   signal_data__13->SetBinError(8,0.05478295);
   signal_data__13->SetBinError(9,0.05220027);
   signal_data__13->SetBinError(10,0.08404079);
   signal_data__13->SetBinError(11,0.07466899);
   signal_data__13->SetBinError(12,0.0903189);
   signal_data__13->SetBinError(13,0.1092014);
   signal_data__13->SetBinError(14,0.1515061);
   signal_data__13->SetBinError(15,0.2778315);
   signal_data__13->SetBinError(16,0.2354684);
   signal_data__13->SetMinimum(0.02);
   signal_data__13->SetMaximum(20000);
   signal_data__13->SetEntries(1301.711);

   ci = TColor::GetColor("#cccccc");
   signal_data__13->SetFillColor(ci);

   ci = TColor::GetColor("#000099");
   signal_data__13->SetLineColor(ci);
   signal_data__13->SetMarkerSize(0);
   signal_data__13->GetXaxis()->SetLabelFont(42);
   signal_data__13->GetXaxis()->SetLabelSize(0);
   signal_data__13->GetXaxis()->SetTitleSize(0.035);
   signal_data__13->GetXaxis()->SetTitleFont(42);
   signal_data__13->GetYaxis()->SetTitle("Events/GeV");
   signal_data__13->GetYaxis()->SetLabelFont(42);
   signal_data__13->GetYaxis()->SetLabelSize(0.045);
   signal_data__13->GetYaxis()->SetTitleSize(0.05);
   signal_data__13->GetYaxis()->SetTitleOffset(0.9);
   signal_data__13->GetYaxis()->SetTitleFont(42);
   signal_data__13->GetZaxis()->SetLabelFont(42);
   signal_data__13->GetZaxis()->SetLabelSize(0.035);
   signal_data__13->GetZaxis()->SetTitleSize(0.035);
   signal_data__13->GetZaxis()->SetTitleFont(42);
   signal_data__13->Draw("sameE2");
   Double_t xAxis15[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__14 = new TH1F("signal_data__14","",16, xAxis15);
   signal_data__14->SetBinContent(1,1.00803);
   signal_data__14->SetBinContent(2,0.9565997);
   signal_data__14->SetBinContent(3,0.899971);
   signal_data__14->SetBinContent(4,0.8959371);
   signal_data__14->SetBinContent(5,0.8282797);
   signal_data__14->SetBinContent(6,0.8123214);
   signal_data__14->SetBinContent(7,0.8021396);
   signal_data__14->SetBinContent(8,0.7786927);
   signal_data__14->SetBinContent(9,0.8867975);
   signal_data__14->SetBinContent(10,0.7928828);
   signal_data__14->SetBinContent(11,0.7348676);
   signal_data__14->SetBinContent(12,0.9558432);
   signal_data__14->SetBinContent(13,0.7896627);
   signal_data__14->SetBinContent(14,0.6703452);
   signal_data__14->SetBinContent(15,0.523148);
   signal_data__14->SetBinContent(16,0.5400309);
   signal_data__14->SetBinError(1,0.004088137);
   signal_data__14->SetBinError(2,0.006752375);
   signal_data__14->SetBinError(3,0.0107056);
   signal_data__14->SetBinError(4,0.01686848);
   signal_data__14->SetBinError(5,0.02389048);
   signal_data__14->SetBinError(6,0.03466903);
   signal_data__14->SetBinError(7,0.04863685);
   signal_data__14->SetBinError(8,0.0680347);
   signal_data__14->SetBinError(9,0.09618669);
   signal_data__14->SetBinError(10,0.1253658);
   signal_data__14->SetBinError(11,0.1685902);
   signal_data__14->SetBinError(12,0.2651032);
   signal_data__14->SetBinError(13,0.2984644);
   signal_data__14->SetBinError(14,0.387024);
   signal_data__14->SetBinError(15,0.3020397);
   signal_data__14->SetBinError(16,0.5400309);
   signal_data__14->SetMinimum(0.21);
   signal_data__14->SetMaximum(1.79);
   signal_data__14->SetEntries(219.6838);
   signal_data__14->SetMarkerStyle(20);
   signal_data__14->SetMarkerSize(0.9);
   signal_data__14->GetXaxis()->SetLabelFont(42);
   signal_data__14->GetXaxis()->SetLabelSize(0.12);
   signal_data__14->GetXaxis()->SetTitleSize(0.085);
   signal_data__14->GetXaxis()->SetTitleFont(42);
   signal_data__14->GetYaxis()->SetTitle("Data/MC");
   signal_data__14->GetYaxis()->SetNdivisions(5);
   signal_data__14->GetYaxis()->SetLabelFont(42);
   signal_data__14->GetYaxis()->SetLabelSize(0.12);
   signal_data__14->GetYaxis()->SetTitleSize(0.12);
   signal_data__14->GetYaxis()->SetTitleOffset(0.3);
   signal_data__14->GetYaxis()->SetTitleFont(42);
   signal_data__14->GetZaxis()->SetLabelFont(42);
   signal_data__14->GetZaxis()->SetLabelSize(0.035);
   signal_data__14->GetZaxis()->SetTitleSize(0.035);
   signal_data__14->GetZaxis()->SetTitleFont(42);
   signal_data__14->Draw("same");
   TLine *line = new TLine(200,1,1000,1);
   line->SetLineColor(2);
   line->SetLineWidth(3);
   line->Draw();
   Double_t xAxis16[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data__15 = new TH1F("signal_data__15","",16, xAxis16);
   signal_data__15->SetBinContent(1,1.00803);
   signal_data__15->SetBinContent(2,0.9565997);
   signal_data__15->SetBinContent(3,0.899971);
   signal_data__15->SetBinContent(4,0.8959371);
   signal_data__15->SetBinContent(5,0.8282797);
   signal_data__15->SetBinContent(6,0.8123214);
   signal_data__15->SetBinContent(7,0.8021396);
   signal_data__15->SetBinContent(8,0.7786927);
   signal_data__15->SetBinContent(9,0.8867975);
   signal_data__15->SetBinContent(10,0.7928828);
   signal_data__15->SetBinContent(11,0.7348676);
   signal_data__15->SetBinContent(12,0.9558432);
   signal_data__15->SetBinContent(13,0.7896627);
   signal_data__15->SetBinContent(14,0.6703452);
   signal_data__15->SetBinContent(15,0.523148);
   signal_data__15->SetBinContent(16,0.5400309);
   signal_data__15->SetBinError(1,0.004088137);
   signal_data__15->SetBinError(2,0.006752375);
   signal_data__15->SetBinError(3,0.0107056);
   signal_data__15->SetBinError(4,0.01686848);
   signal_data__15->SetBinError(5,0.02389048);
   signal_data__15->SetBinError(6,0.03466903);
   signal_data__15->SetBinError(7,0.04863685);
   signal_data__15->SetBinError(8,0.0680347);
   signal_data__15->SetBinError(9,0.09618669);
   signal_data__15->SetBinError(10,0.1253658);
   signal_data__15->SetBinError(11,0.1685902);
   signal_data__15->SetBinError(12,0.2651032);
   signal_data__15->SetBinError(13,0.2984644);
   signal_data__15->SetBinError(14,0.387024);
   signal_data__15->SetBinError(15,0.3020397);
   signal_data__15->SetBinError(16,0.5400309);
   signal_data__15->SetMinimum(0.21);
   signal_data__15->SetMaximum(1.79);
   signal_data__15->SetEntries(219.6838);
   signal_data__15->SetMarkerStyle(20);
   signal_data__15->SetMarkerSize(0.9);
   signal_data__15->GetXaxis()->SetLabelFont(42);
   signal_data__15->GetXaxis()->SetLabelSize(0.12);
   signal_data__15->GetXaxis()->SetTitleSize(0.085);
   signal_data__15->GetXaxis()->SetTitleFont(42);
   signal_data__15->GetYaxis()->SetTitle("Data/MC");
   signal_data__15->GetYaxis()->SetNdivisions(5);
   signal_data__15->GetYaxis()->SetLabelFont(42);
   signal_data__15->GetYaxis()->SetLabelSize(0.12);
   signal_data__15->GetYaxis()->SetTitleSize(0.12);
   signal_data__15->GetYaxis()->SetTitleOffset(0.3);
   signal_data__15->GetYaxis()->SetTitleFont(42);
   signal_data__15->GetZaxis()->SetLabelFont(42);
   signal_data__15->GetZaxis()->SetLabelSize(0.035);
   signal_data__15->GetZaxis()->SetTitleSize(0.035);
   signal_data__15->GetZaxis()->SetTitleFont(42);
   signal_data__15->Draw("same");
   Double_t xAxis17[17] = {200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; 
   
   TH1F *signal_data_copy__16 = new TH1F("signal_data_copy__16","",16, xAxis17);
   signal_data_copy__16->SetBinContent(1,1.00803);
   signal_data_copy__16->SetBinContent(2,0.9565997);
   signal_data_copy__16->SetBinContent(3,0.899971);
   signal_data_copy__16->SetBinContent(4,0.8959371);
   signal_data_copy__16->SetBinContent(5,0.8282797);
   signal_data_copy__16->SetBinContent(6,0.8123214);
   signal_data_copy__16->SetBinContent(7,0.8021396);
   signal_data_copy__16->SetBinContent(8,0.7786927);
   signal_data_copy__16->SetBinContent(9,0.8867975);
   signal_data_copy__16->SetBinContent(10,0.7928828);
   signal_data_copy__16->SetBinContent(11,0.7348676);
   signal_data_copy__16->SetBinContent(12,0.9558432);
   signal_data_copy__16->SetBinContent(13,0.7896627);
   signal_data_copy__16->SetBinContent(14,0.6703452);
   signal_data_copy__16->SetBinContent(15,0.523148);
   signal_data_copy__16->SetBinContent(16,0.5400309);
   signal_data_copy__16->SetBinError(1,0.004088137);
   signal_data_copy__16->SetBinError(2,0.006752375);
   signal_data_copy__16->SetBinError(3,0.0107056);
   signal_data_copy__16->SetBinError(4,0.01686848);
   signal_data_copy__16->SetBinError(5,0.02389048);
   signal_data_copy__16->SetBinError(6,0.03466903);
   signal_data_copy__16->SetBinError(7,0.04863685);
   signal_data_copy__16->SetBinError(8,0.0680347);
   signal_data_copy__16->SetBinError(9,0.09618669);
   signal_data_copy__16->SetBinError(10,0.1253658);
   signal_data_copy__16->SetBinError(11,0.1685902);
   signal_data_copy__16->SetBinError(12,0.2651032);
   signal_data_copy__16->SetBinError(13,0.2984644);
   signal_data_copy__16->SetBinError(14,0.387024);
   signal_data_copy__16->SetBinError(15,0.3020397);
   signal_data_copy__16->SetBinError(16,0.5400309);
   signal_data_copy__16->SetMinimum(0.21);
   signal_data_copy__16->SetMaximum(1.79);
   signal_data_copy__16->SetEntries(219.6838);
   signal_data_copy__16->SetDirectory(0);
   signal_data_copy__16->SetMarkerStyle(20);
   signal_data_copy__16->SetMarkerSize(0.9);
   signal_data_copy__16->GetXaxis()->SetLabelFont(42);
   signal_data_copy__16->GetXaxis()->SetLabelSize(0.12);
   signal_data_copy__16->GetXaxis()->SetTitleSize(0.085);
   signal_data_copy__16->GetXaxis()->SetTitleFont(42);
   signal_data_copy__16->GetYaxis()->SetTitle("Data/MC");
   signal_data_copy__16->GetYaxis()->SetNdivisions(5);
   signal_data_copy__16->GetYaxis()->SetLabelFont(42);
   signal_data_copy__16->GetYaxis()->SetLabelSize(0.12);
   signal_data_copy__16->GetYaxis()->SetTitleSize(0.12);
   signal_data_copy__16->GetYaxis()->SetTitleOffset(0.3);
   signal_data_copy__16->GetYaxis()->SetTitleFont(42);
   signal_data_copy__16->GetZaxis()->SetLabelFont(42);
   signal_data_copy__16->GetZaxis()->SetLabelSize(0.035);
   signal_data_copy__16->GetZaxis()->SetTitleSize(0.035);
   signal_data_copy__16->GetZaxis()->SetTitleFont(42);
   signal_data_copy__16->Draw("sameaxis");
   p2->Modified();
   c_0->cd();
      tex = new TLatex(0.72,0.02,"E_{T}^{miss} (GeV)");
tex->SetNDC();
   tex->SetTextFont(42);
   tex->SetTextSize(0.04);
   tex->SetLineWidth(2);
   tex->Draw();
   c_0->Modified();
   c_0->cd();
   c_0->SetSelected(c_0);
}
Exemplo n.º 3
0
void Fig1Rec_now4j()
{
  // ========================
  // Initialization
  // ========================
   
   gROOT->Reset();
   gROOT->SetStyle("Plain");
   
   gROOT->LoadMacro("DividegPad.C");
   
   //   TCanvas *c1 = new TCanvas("c1","Plot");
   TCanvas *c1 = new TCanvas("c1","Plot",600,800);

   //   c1->SetLogy(1);

   gStyle->SetOptStat(0);
   gStyle->SetOptTitle(0);
   gStyle->SetFrameLineWidth(2);
   gStyle->SetEndErrorSize(0.);
   //   gStyle->SetPaintTextFormat("5.3f");

   //   gStyle->SetPalette(1);
   //   gStyle->SetPadGridX(kTRUE);

   TString f_ttx_root = "../LHEAnalysis_pp_ttx_Wmjjbbx.root";
   TString f_Wmjjbbx_root = "../LHEAnalysis_pp_Wmjjbbx.root";
   //   TString f_Wmjjjj_root = "../LHEAnalysis_pp_Wmjjjj.root";
   TString f_pdf = "Fig1Rec.pdf";
   TString f_eps = "Fig1Rec.eps";

   TFile* file_ttx = new TFile(f_ttx_root);
   TFile* file_Wmjjbbx = new TFile(f_Wmjjbbx_root);
   //   TFile* file_Wmjjjj = new TFile(f_Wmjjjj_root);


   TH1D* h_ttx_MttRec =
      (TH1D*)file_ttx->Get("h_MttRec_Norm")
      ->Clone("h_ttx_MttRec");
   TH1D* h_ttx_MttRec_Forw =
      (TH1D*)file_ttx->Get("h_MttRec_Forw")
      ->Clone("h_ttx_MttRec_Forw");
   TH1D* h_ttx_MttRec_Backw =
      (TH1D*)file_ttx->Get("h_MttRec_Backw")
      ->Clone("h_ttx_MttRec_Backw");

   TH1D* h_Wmjjbbx_MttRec =
      (TH1D*)file_Wmjjbbx->Get("h_MttRec_Norm")
      ->Clone("h_Wmjjbbx_MttRec");
   TH1D* h_Wmjjbbx_MttRec_Forw =
      (TH1D*)file_Wmjjbbx->Get("h_MttRec_Forw")
      ->Clone("h_Wmjjbbx_MttRec_Forw");
   TH1D* h_Wmjjbbx_MttRec_Backw =
      (TH1D*)file_Wmjjbbx->Get("h_MttRec_Backw")
      ->Clone("h_Wmjjbbx_MttRec_Backw");
   /*
   TH1D* h_Wmjjjj_MttRec =
      (TH1D*)file_Wmjjjj->Get("h_MttRec_Norm")
      ->Clone("h_Wmjjjj_MttRec");
   TH1D* h_Wmjjjj_MttRec_Forw =
      (TH1D*)file_Wmjjjj->Get("h_MttRec_Forw")
      ->Clone("h_Wmjjjj_MttRec_Forw");
   TH1D* h_Wmjjjj_MttRec_Backw =
      (TH1D*)file_Wmjjjj->Get("h_MttRec_Backw")
      ->Clone("h_Wmjjjj_MttRec_Backw");
   */
   /*
   TH1D* h_w4j_MttRec =
      new TH1D((*h_Wmjjbbx_MttRec)+
               (*h_Wmjjjj_MttRec));
   
   TH1D* h_w4j_MttRec_Forw =
      new TH1D((*h_Wmjjbbx_MttRec_Forw)+
               (*h_Wmjjjj_MttRec_Forw));
   
   TH1D* h_w4j_MttRec_Backw =
      new TH1D((*h_Wmjjbbx_MttRec_Backw)+
               (*h_Wmjjjj_MttRec_Backw));
   */

   /*
   gStyle->SetPadTopMargin(0.);
   gStyle->SetPadBottomMargin(0.);
   gStyle->SetPadLeftMargin(0.);
   gStyle->SetPadRightMargin(0.);
   */
   Double_t ml = 0.1;
   Double_t mr = 0.1;
   Double_t mt = 0.4;
   Double_t mb = 0.4;
   Int_t nx  = 1;
   Int_t ny  = 2;

   DividegPad(nx,ny,ml,mr,mt,mb);
        
   TLegend* legend;
   TLine* line;

   TLatex* text = new TLatex();
   text->SetTextAlign(12);
   text->SetTextSize(0.040);
   Double_t f_ytext = 0.88;
   Double_t ytext;

   Double_t ymin,ymax;

   Double_t x1leg = 0.70;
   Double_t y1leg = 0.43;
   Double_t x2leg = 0.88;
   Double_t y2leg = 0.58;

   /*
   const Int_t npt = 14;
   Double_t xpt[npt]
      = {325., 375., 425., 475., 525., 575., 625., 675., 725., 775.,
         825., 875., 925., 975.};
   Double_t dxpt[npt]
      = { 25., 25., 25., 25., 25., 25., 25., 25., 25., 25.,
          25., 25., 25., 25.};
   Double_t ypt_ttx[npt];
   Double_t dypt_ttx[npt] = { 0. };;
   Double_t ypt_w4j[npt];
   Double_t dypt_w4j[npt] = { 0. };
   */                
   const Int_t npt = 4;
   //   const Int_t npt = 7;
   Double_t xpt[npt];
      //      = {300., 400., 500., 600., 700., 800., 900.};
      //      = {400., 500., 600., 700., 800.};
   Double_t dxpt[npt];
      //      = { 50., 50., 50., 50., 50.};
   Double_t ypt_ttx[npt];
   Double_t dypt_ttx[npt];
   Double_t ypt_Wmjjjj[npt];
   Double_t dypt_Wmjjjj[npt];
   Double_t ypt_Wmjjbbx[npt];
   Double_t dypt_Wmjjbbx[npt];
                
   c1->cd(2);
   gPad->SetLogy(1);
   gPad->SetLeftMargin(0.12);
   gPad->SetBottomMargin(0.);
   //   ymax = 9.6;
   ymax = 16.;
   ymin = 4.e-4;

   h_ttx_MttRec->SetMaximum(ymax);
   h_ttx_MttRec->SetMinimum(ymin);
   h_ttx_MttRec->SetLineWidth(2);
   h_ttx_MttRec->SetLineStyle(1);
   h_ttx_MttRec->SetLineColor(kRed+1);

   h_Wmjjbbx_MttRec->SetLineWidth(2);
   h_Wmjjbbx_MttRec->SetLineStyle(2);
   h_Wmjjbbx_MttRec->SetLineColor(kBlue+1);
   /*
   h_Wmjjjj_MttRec->SetMaximum(ymax);
   h_Wmjjjj_MttRec->SetMinimum(ymin);
   h_Wmjjjj_MttRec->SetLineWidth(2);
   h_Wmjjjj_MttRec->SetLineStyle(3);
   h_Wmjjjj_MttRec->SetLineColor(kGreen+1);
   */
   h_ttx_MttRec->GetXaxis()
      ->SetTitle("M_{t#bar{t}} [GeV]");
   h_ttx_MttRec->GetYaxis()
      ->SetTitle("d#sigma / d M_{t#bar{t}} [fb/GeV]");
   h_ttx_MttRec->GetYaxis()->SetTitleOffset(1.2);
   
   //   h_Wmjjjj_MttRec->Draw();
   h_ttx_MttRec->Draw();
   h_Wmjjbbx_MttRec->Draw("same");


   legend = new TLegend(x1leg,y1leg,x2leg,y2leg);
   legend->AddEntry(h_ttx_MttRec,"t#bar{t}","l");
   legend->AddEntry(h_Wmjjbbx_MttRec,"W+b#bar{b}+2j","l");
   //   legend->AddEntry(h_Wmjjjj_MttRec,"W+4j","l");
   legend->SetTextSize(0.035);
   legend->SetBorderSize(0);
   legend->SetFillColor(0);
   legend->Draw();

   Int_t nbins = h_ttx_MttRec->GetNbinsX();
   Double_t sigma = 0.;
   for (Int_t ibin=1;ibin<=nbins;++ibin) {
      Double_t dx = h_ttx_MttRec->GetBinWidth(ibin);
      Double_t y = h_ttx_MttRec->GetBinContent(ibin);
      sigma += y*dx;
   }
   std::cout<<"sigma = "<<sigma<<std::endl;

   c1->cd(1);
   gPad->SetLeftMargin(0.12);
   gPad->SetTopMargin(0.);
   gPad->SetBottomMargin(0.6);

   Double_t nf, nb;
   Double_t asym, dasym;
   
   const Int_t ipt0 = 2;
   for (Int_t ipt=1;ipt<=npt;++ipt) {
      Int_t i=ipt0+ipt-1;
      Double_t xcent = h_ttx_MttRec_Forw->GetBinCenter(i);
      xpt[ipt-1] = xcent;
      Double_t xwid = 0.5*h_ttx_MttRec_Forw->GetBinWidth(i);
      dxpt[ipt-1] = xwid;
      nf = h_ttx_MttRec_Forw->GetBinContent(i);
      nb = h_ttx_MttRec_Backw->GetBinContent(i);
      Asymmetry(nf,nb, asym,dasym);
      ypt_ttx[ipt-1] = asym;
      dypt_ttx[ipt-1] = dasym;
      //      std::cout<<"ttx:asym = "<<asym<<" +- "<<dasym<<std::endl;
      nf = h_Wmjjbbx_MttRec_Forw->GetBinContent(i);
      nb = h_Wmjjbbx_MttRec_Backw->GetBinContent(i);
      Asymmetry(nf,nb, asym,dasym);
      ypt_Wmjjbbx[ipt-1] = asym;
      dypt_Wmjjbbx[ipt-1] = dasym;
      //      nf = h_Wmjjjj_MttRec_Forw->GetBinContent(i);
      //nb = h_Wmjjjj_MttRec_Backw->GetBinContent(i);
      //Asymmetry(nf,nb, asym,dasym);
      //ypt_Wmjjjj[ipt-1] = asym;
      //dypt_Wmjjjj[ipt-1] = dasym;
      //      std::cout<<"w4j:asym = "<<xpt[ipt-1]<<", "<<asym<<" +- "<<dasym<<std::endl;
   }

   for (Int_t i=0;i<npt;++i) {
      std::cout<<"ttx: x,y = "<<xpt[i]<<" "<<ypt_ttx[i]<<std::endl;
      std::cout<<"   : dx,dy = "<<dxpt[i]<<" "<<dypt_ttx[i]<<std::endl;
   }

   for (Int_t i=0;i<npt;++i) {
      std::cout<<"Wmjjjj: x,y = "<<xpt[i]<<" "<<ypt_Wmjjjj[i]<<std::endl;
   }

   TGraphErrors* g_ttx_asym = new TGraphErrors(npt,xpt,ypt_ttx,dxpt,dypt_ttx);
   TGraphErrors* g_Wmjjbbx_asym =
      new TGraphErrors(npt,xpt,ypt_Wmjjbbx,dxpt,dypt_Wmjjbbx);
   //   TGraphErrors* g_Wmjjjj_asym =
   //  new TGraphErrors(npt,xpt,ypt_Wmjjjj,dxpt,dypt_Wmjjjj);

   Double_t xmin = h_ttx_MttRec->GetXaxis()->GetXmin();
   Double_t xmax = h_ttx_MttRec->GetXaxis()->GetXmax();

   x1leg = 0.15;
   y1leg = 0.85;
   x2leg = 0.30;
   y2leg = 1.;

   //   ymin = -0.25;
   //   ymax = 0.35;
   ymin = -0.1;
   ymax = 0.199;
   g_ttx_asym->GetXaxis()->SetLimits(xmin,xmax);
   //   g_ttx_asym->SetMinimum(ymin);
   //   g_ttx_asym->SetMaximum(ymax);
   g_ttx_asym->SetMinimum(ymin);
   g_ttx_asym->SetMaximum(ymax);
   g_ttx_asym->GetXaxis()->SetTitle("M_{t#bar{t}} [GeV]");
   g_ttx_asym->GetYaxis()->SetTitle("Asymmetry");
   g_ttx_asym->GetYaxis()->SetTitleOffset(1.2);

   g_ttx_asym->SetMarkerStyle(20);
   g_ttx_asym->SetMarkerSize(0.8);
   g_ttx_asym->SetMarkerColor(kRed+1);
   g_ttx_asym->SetLineWidth(2);
   g_ttx_asym->SetLineStyle(1);
   g_ttx_asym->SetLineColor(kRed+1);
   g_ttx_asym->Draw("ap");

   g_Wmjjbbx_asym->SetMarkerStyle(21);
   g_Wmjjbbx_asym->SetMarkerSize(0.7);
   g_Wmjjbbx_asym->SetMarkerColor(kBlue+1);
   g_Wmjjbbx_asym->SetLineWidth(2);
   g_Wmjjbbx_asym->SetLineStyle(1);
   g_Wmjjbbx_asym->SetLineColor(kBlue+1);
   g_Wmjjbbx_asym->Draw("p same");
   /*
   g_Wmjjjj_asym->SetMarkerStyle(22);
   g_Wmjjjj_asym->SetMarkerSize(0.9);
   g_Wmjjjj_asym->SetMarkerColor(kGreen+1);
   g_Wmjjjj_asym->SetLineWidth(2);
   g_Wmjjjj_asym->SetLineStyle(1);
   g_Wmjjjj_asym->SetLineColor(kGreen+1);
   g_Wmjjjj_asym->Draw("p same");
   */
   legend = new TLegend(x1leg,y1leg,x2leg,y2leg);
   legend->AddEntry(g_ttx_asym,"t#bar{t}","lp");
   legend->AddEntry(g_Wmjjbbx_asym,"W+b#bar{b}+2j","lp");
   //  legend->AddEntry(g_Wmjjjj_asym,"W+4j","lp");
   legend->SetTextSize(0.035);
   legend->SetBorderSize(0);
   legend->SetFillColor(0);
   legend->Draw();

   line = new TLine(xmin,0.,xmax,0.);
   line->SetLineWidth(1);
   line->Draw();
   /*
   ytext = f_ytext*ymax;
   text->DrawLatex(1.,ytext,"M_{t#bar{t}} > 450GeV");
   */

   c1->Update();
   c1->Print(f_pdf);

}
Exemplo n.º 4
0
void validation()
{
	msglvl[DBG] = SILENT;
	msglvl[INF] = VISUAL;
	msglvl[WRN] = VISUAL;
	msglvl[ERR] = VISUAL;
	msglvl[FAT] = VISUAL;

	TDirectory* oldDir = gDirectory; // remember old directory

	style();

	Int_t g4bin = (ng4bins/g4max+1); //==> g^4=1 ==> SSM !
	
	TString suffix = "";
	if(doTruth) suffix = "_truth";
	
	TString mctype  = (isMC11c) ? "mc11c" : "mc11a";
	
	// TString fBGname = "plots/ZP_2dtemplates_"+mctype+"_33st_overallEWkF_noInAmpSigEWkF_noHighMbins_wthOfficialZP_Xmass2000.root";
	// TString fBGname = "plots/ZP_2dtemplates_"+mctype+"_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_noTruth_wthOfficialZP_treeLevelMass_Xmass2000.root";
	// TString fBGname = "plots/ZP_2dtemplates_"+mctype+"_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_wthOfficialZP_treeLevelMass_Xmass2000.root";
	// TString fBGname = "plots/ZP_2dtemplates_mc11c_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_wthOfficialZP_fixedBWwidth_treeLevelMass_Xmass2000.root";
	// TString fBGname = "plots/ZP_2dtemplates_mc11c_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_noTruth_wthOfficialZP_treeLevelMass_Xmass2000.root";
	// TString fBGname = "plots/ZP_2dtemplates_"+mctype+"_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_noTruth_wthOfficialZP_treeLevelMass_Xmass2000.root";
	// TString fBGname = "plots/ZP_2dtemplates_"+mctype+"_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_noTruth_wthOfficialZP_fixedBWwidth_treeLevelMass_Xmass2000.root";

	TLegend* legR = new TLegend(0.15,0.75,0.35,0.85,NULL,"brNDC");
	legR->SetFillStyle(4000); //will be transparent
	legR->SetFillColor(0);
	legR->SetTextFont(42);
	TH1D* hDummy = new TH1D("","",1,0.,1.);
	hDummy->SetMarkerStyle(20);
	hDummy->SetMarkerSize(0.8);
	hDummy->SetMarkerColor(kBlack);
	if(!doResiduals) legR->AddEntry(hDummy,"#frac{template}{official}","lep");
	else             legR->AddEntry(hDummy,"#frac{template - official}{#sqrt{#delta^{2}template + #delta^{2}official}}","lep");
	
	TPaveText* ptxt = new TPaveText(0.145,0.35,0.245,0.55,"NDC");
	TText* txt;
	ptxt->SetTextSize(0.03);
	ptxt->SetBorderSize(0);
	ptxt->SetFillStyle(4000); //will be transparent
	ptxt->SetFillColor(0);
	ptxt->SetTextAlign(12);
	txt = ptxt->AddText("This range");
	txt = ptxt->AddText("is chopped");
	txt = ptxt->AddText("before the");
	txt = ptxt->AddText("template is");
	txt = ptxt->AddText("handed to");
	txt = ptxt->AddText("BAT (limit).");
	
	oldDir->cd();

	TString fBGname = "plots/validation/ZP_2dtemplates_mc11c_33st_noKKtmplates_wthOfficialZP_treeLevelMass_Xmass2000.root";
	TFile* fD = new TFile(fBGname,"READ");
	TH1D* hDY = NULL;
	if(doTruth) hDY = (TH1D*)fD->Get("hMass_DYmumu_truth")->Clone();
	else        hDY = (TH1D*)fD->Get("hMass_DYmumu")->Clone();
	hDY->SetLineColor(kMagenta-5);
	hDY->SetMarkerColor(kMagenta-5);

	oldDir->cd();

	TFile* fDYrozmin    = new TFile("plots/mass_plot_tables_3st.root","READ");
	TH1D* hDYrozmin = (TH1D*)fDYrozmin->Get("mass_log_dy")->Clone();
	hDYrozmin = (TH1D*)hGeV2TeV(hDYrozmin)->Clone();
	hDYrozmin = (TH1D*)hChopper(hDYrozmin,bins2chop)->Clone();
	oldDir->cd();
	TFile* f1dTemplates = new TFile("plots/ZpSignal_MM_MC11c_5points.root","READ");
	TObjArray* toarr1d = new TObjArray();
	toarr1d->Read("template");
	TMapTSP2TH1D h1dBrandeisTmpltMap;
	double Nflat = 399948;
	double sigmaflat = 4.3988E+07*nb2fb;
	double Lmcflat = Nflat/sigmaflat;
	double scale = luminosity/Lmcflat;
	TH1D* h1dTmp = NULL;
	h1dTmp = (TH1D*)((TObjArray*)toarr1d->At(0/*22*/))->Clone();
	h1dTmp->Scale(scale);
	h1dTmp = (TH1D*)hChopper(h1dTmp,bins2chop)->Clone();
	h1dTmp->Add(hDYrozmin);
	h1dBrandeisTmpltMap.insert( make_pair("1000",(TH1D*)resetErrors(h1dTmp)->Clone("1000")) );
	h1dTmp = NULL;
	h1dTmp = (TH1D*)((TObjArray*)toarr1d->At(1/*28*/))->Clone();
	h1dTmp->Scale(scale);
	h1dTmp = (TH1D*)hChopper(h1dTmp,bins2chop)->Clone();
	h1dTmp->Add(hDYrozmin);
	h1dBrandeisTmpltMap.insert( make_pair("1250",(TH1D*)resetErrors(h1dTmp)->Clone("1250")) );
	h1dTmp = NULL;
	h1dTmp = (TH1D*)((TObjArray*)toarr1d->At(2/*34*/))->Clone();
	h1dTmp->Scale(scale);
	h1dTmp = (TH1D*)hChopper(h1dTmp,bins2chop)->Clone();
	h1dTmp->Add(hDYrozmin);
	h1dBrandeisTmpltMap.insert( make_pair("1500",(TH1D*)resetErrors(h1dTmp)->Clone("1500")) );
	h1dTmp = NULL;
	h1dTmp = (TH1D*)((TObjArray*)toarr1d->At(3/*40*/))->Clone();
	h1dTmp->Scale(scale);
	h1dTmp = (TH1D*)hChopper(h1dTmp,bins2chop)->Clone();
	h1dTmp->Add(hDYrozmin);
	h1dBrandeisTmpltMap.insert( make_pair("1750",(TH1D*)resetErrors(h1dTmp)->Clone("1750")) );
	h1dTmp = NULL;
	h1dTmp = (TH1D*)((TObjArray*)toarr1d->At(4/*47*/))->Clone();
	h1dTmp->Scale(scale);
	h1dTmp = (TH1D*)hChopper(h1dTmp,bins2chop)->Clone();
	h1dTmp->Add(hDYrozmin);
	h1dBrandeisTmpltMap.insert( make_pair("2000",(TH1D*)resetErrors(h1dTmp)->Clone("2000")) );

	oldDir->cd();

	TMapTSP2TH1D h1Map;
	h1Map.insert( make_pair("1000o", (TH1D*)fD->Get("hMass_Zprime_SSM1000"+suffix)->Clone()) );
	h1Map.insert( make_pair("1000t", (TH1D*)fD->Get("hMass_Zprime_SSM1000_template"+suffix)->Clone()) );
	if(isMC11c)
	{
		h1Map.insert( make_pair("1250o", (TH1D*)fD->Get("hMass_Zprime_SSM1250"+suffix)->Clone()) );
		h1Map.insert( make_pair("1250t", (TH1D*)fD->Get("hMass_Zprime_SSM1250_template"+suffix)->Clone()) );
	}
	h1Map.insert( make_pair("1500o", (TH1D*)fD->Get("hMass_Zprime_SSM1500"+suffix)->Clone()) );
	h1Map.insert( make_pair("1500t", (TH1D*)fD->Get("hMass_Zprime_SSM1500_template"+suffix)->Clone()) );
	h1Map.insert( make_pair("1750o", (TH1D*)fD->Get("hMass_Zprime_SSM1750"+suffix)->Clone()) );
	h1Map.insert( make_pair("1750t", (TH1D*)fD->Get("hMass_Zprime_SSM1750_template"+suffix)->Clone()) );
	h1Map.insert( make_pair("2000o", (TH1D*)fD->Get("hMass_Zprime_SSM2000"+suffix)->Clone()) );
	h1Map.insert( make_pair("2000t", (TH1D*)fD->Get("hMass_Zprime_SSM2000_template"+suffix)->Clone()) );

	TMapTSP2TH1D h1rMap;
	h1rMap.insert( make_pair("1000", (TH1D*)fD->Get("hMass_Zprime_SSM1000"+suffix)->Clone()) );
	if(isMC11c) h1rMap.insert( make_pair("1250", (TH1D*)fD->Get("hMass_Zprime_SSM1250"+suffix)->Clone()) );
	h1rMap.insert( make_pair("1500", (TH1D*)fD->Get("hMass_Zprime_SSM1500"+suffix)->Clone()) );
	h1rMap.insert( make_pair("1750", (TH1D*)fD->Get("hMass_Zprime_SSM1750"+suffix)->Clone()) );
	h1rMap.insert( make_pair("2000", (TH1D*)fD->Get("hMass_Zprime_SSM2000"+suffix)->Clone()) );
	for(TMapTSP2TH1D::iterator it=h1rMap.begin() ; it!=h1rMap.end() ; ++it)
	{
		it->second->Reset();
		if(!doResiduals) it->second->Divide(h1Map[it->first+"o"],h1Map[it->first+"t"],1.,1.,"B");
		else             residuals(h1Map[it->first+"o"], h1Map[it->first+"t"], it->second);
		
		// for(Int_t i=0 ; i<=it->second->GetNbinsX()+1 ; i++) it->second->SetBinError(i,0);
		it->second->SetMarkerStyle(20);
		it->second->SetMarkerSize(0.5);
		it->second->GetXaxis()->SetLabelSize(0.073);
		it->second->GetYaxis()->SetLabelSize(0.073);
		it->second->GetXaxis()->SetTitleSize(0.073);
		it->second->GetYaxis()->SetTitleSize(0.073);
		it->second->SetTitleSize(0.075);
		it->second->GetYaxis()->SetTitleOffset(0.5);
		if(!doResiduals)
		{
			it->second->SetMinimum(0.2);
			it->second->SetMaximum(1.8);
		}
		else
		{
			it->second->SetMinimum(-5.);
			it->second->SetMaximum(+5.);
		}
		it->second->SetTitle("");
		if(!doResiduals) it->second->GetYaxis()->SetTitle("ratio");
		else             it->second->GetYaxis()->SetTitle("residuals");
	}

	TMapTSP2TGAE poissonGraphMap;
	TMapTSP2TLeg legMap;


	_INFO("");

	oldDir->cd();

	fD->cd();	
	TH1D* h1Template = (TH1D*)fD->Get("hMass_DYmumu"+suffix)->Clone();
	h1Template->Reset();
	TObjArray* toarr = new TObjArray();
	if(doTruth) toarr->Read("truth_template2d");
	else        toarr->Read("template2d");
	TH2D* h2SSM2000 = (TH2D*)((TObjArray*)toarr->At(0))->Clone("hMass"+suffix+"_Zprime_SSM2000_template2d");
	for(Int_t bin=1 ; bin<=h2SSM2000->GetNbinsX() ; bin++)
	{
		h1Template->SetBinContent(bin, h2SSM2000->GetBinContent(bin,g4bin));
		h1Template->SetBinError(bin, h2SSM2000->GetBinError(bin,g4bin));
	}
	h1Template->SetLineColor(kViolet);
	h1Template->SetLineWidth(1);
	h1Template->SetMarkerStyle(20);
	h1Template->SetMarkerSize(0.3);
	h1Template->SetMarkerColor(kViolet);
	// the functions
	h2Template = (TH2D*)h2SSM2000->Clone();
	vector<TF1*> vfunc;
	unsigned int nmllbins = h2Template->GetNbinsX();
	for(unsigned int mll=1 ; mll<=(nmllbins-bins2chop) ; mll++) // 1...(56-9 = 47)
	{
		TString mllname = (TString)_s(mll);
		TString mllval  = (TString)_s(h2Template->GetXaxis()->GetBinCenter(mll+bins2chop));
		
		TF1* f = new TF1("fNominal_mll"+mllname,fTH1toTF1,g4min,g4max,1);
		f->SetParameter(0,mll);
		f->SetParNames("mll");
		// f->SetLineColor(kBlue);
		// f->SetLineWidth(1);
		f->SetNpx(400);
		vfunc.push_back(f);
	}
	TGraph* graphDY = new TGraph();
	graphDY->SetMarkerStyle(25);
	graphDY->SetMarkerSize(0.6);
	graphDY->SetMarkerColor(kGreen+2);
	TGraph* graphSSM = new TGraph();
	graphSSM->SetMarkerStyle(24);
	graphSSM->SetMarkerSize(0.6);
	graphSSM->SetMarkerColor(kOrange+8);
	for(unsigned int i=0 ; i<vfunc.size() ; i++)
	{
		double DY = vfunc[i]->Eval(0.0);
		double SSM = vfunc[i]->Eval(1.0);
		graphDY->SetPoint(i,h2Template->GetXaxis()->GetBinCenter(bins2chop+i+1),DY);
		graphSSM->SetPoint(i,h2Template->GetXaxis()->GetBinCenter(bins2chop+i+1),SSM);
	}
	
	
	oldDir->cd();

	TObjArray* toarr1dTLV = new TObjArray();
	TMapTSP2TH1D h1dTlvTmpltMap;
	TFile* fT = NULL;
	TString fTname = "plots/validation/ZP_2dtemplates_mc11c_33st_noInterference_noKKtmplates_noOverallEWkF_wthOfficialZP_treeLevelMass_Xmass";
	
	fT = new TFile(fTname+"1000.root","READ");
	toarr1dTLV->Read("template");
	h1dTmp = (TH1D*)((TObjArray*)toarr1dTLV->At(0))->Clone();
	h1dTmp->Add(hDY);
	h1dTlvTmpltMap.insert( make_pair("1000",(TH1D*)resetErrors(h1dTmp)->Clone("1000")) );
	fT = new TFile(fTname+"1250.root","READ");
	toarr1dTLV->Read("template");
	h1dTmp = (TH1D*)((TObjArray*)toarr1dTLV->At(0))->Clone();
	h1dTmp->Add(hDY);
	h1dTlvTmpltMap.insert( make_pair("1250",(TH1D*)resetErrors(h1dTmp)->Clone("1250")) );
	fT = new TFile(fTname+"1500.root","READ");
	toarr1dTLV->Read("template");
	h1dTmp = (TH1D*)((TObjArray*)toarr1dTLV->At(0))->Clone();
	h1dTmp->Add(hDY);
	h1dTlvTmpltMap.insert( make_pair("1500",(TH1D*)resetErrors(h1dTmp)->Clone("1500")) );
	fT = new TFile(fTname+"1750.root","READ");
	toarr1dTLV->Read("template");
	h1dTmp = (TH1D*)((TObjArray*)toarr1dTLV->At(0))->Clone();
	h1dTmp->Add(hDY);
	h1dTlvTmpltMap.insert( make_pair("1750",(TH1D*)resetErrors(h1dTmp)->Clone("1750")) );
	fT = new TFile(fTname+"2000.root","READ");
	toarr1dTLV->Read("template");
	h1dTmp = (TH1D*)((TObjArray*)toarr1dTLV->At(0))->Clone();
	h1dTmp->Add(hDY);
	h1dTlvTmpltMap.insert( make_pair("2000",(TH1D*)resetErrors(h1dTmp)->Clone("2000")) );

	oldDir->cd();
	
	
	for(TMapTSP2TH1D::iterator it=h1Map.begin() ; it!=h1Map.end() ; ++it)
	{
		if(it->first.Contains("o"))
		{
			TString name = it->first;
			name.ReplaceAll("o","");
			it->second->SetFillColor(kAzure-9);
			if(doTruth) it->second->SetTitle("m_{Z'} = "+name+" GeV (truth)");
			else        it->second->SetTitle("m_{Z'} = "+name+" GeV");
		}
		if(it->first.Contains("t"))
		{
			//TGraphAsymmErrors* poisson(TH1D* h)
			it->second->SetLineColor(kBlue);
			it->second->SetMarkerStyle(20);
			it->second->SetMarkerSize(0.4);
			it->second->SetMarkerColor(kBlue);
			it->second->SetLineWidth(1);
			
			TString name = it->first;
			name.ReplaceAll("t","");
			poissonGraphMap.insert( make_pair(name, (TGraphAsymmErrors*)poisson(it->second)->Clone()) );
			poissonGraphMap[name]->SetMarkerStyle(20);
			poissonGraphMap[name]->SetMarkerSize(0.3);
			poissonGraphMap[name]->SetMarkerColor(kBlue);
			poissonGraphMap[name]->SetLineWidth(1);
			poissonGraphMap[name]->SetLineColor(kBlue);
		}
	}	

	Double_t yLine = (!doResiduals) ? 1. : 0.;

	TLine* line = new TLine(0.07,yLine,3.,yLine);	
	line->SetLineColor(kRed);
	line->SetLineWidth(2);
	
	TMapTSP2TCNV cnvMap;
	cnvMap.insert( make_pair("1000", new TCanvas("1000","1000",600,550)) );
	if(isMC11c) cnvMap.insert( make_pair("1250", new TCanvas("1250","1250",600,550)) );
	cnvMap.insert( make_pair("1500", new TCanvas("1500","1500",600,550)) );
	cnvMap.insert( make_pair("1750", new TCanvas("1750","1750",600,550)) );
	cnvMap.insert( make_pair("2000", new TCanvas("2000","2000",600,550)) );
	for(TMapTSP2TCNV::iterator it=cnvMap.begin() ; it!=cnvMap.end() ; ++it)
	{
		_INFO("starting "+(string)it->first);
		if(it->first=="2000") legMap.insert( make_pair(it->first, new TLegend(0.35,0.55,0.83,0.84,NULL,"brNDC")) );
		else                  legMap.insert( make_pair(it->first, new TLegend(0.35,0.60,0.83,0.84,NULL,"brNDC")) );
		legMap[it->first]->SetFillStyle(4000); //will be transparent
		legMap[it->first]->SetFillColor(0);
		legMap[it->first]->SetTextFont(42);
		legMap[it->first]->AddEntry(h1Map[it->first+"o"],"Official Z'_{SSM}","F");
		legMap[it->first]->AddEntry(hDY,"Official DY#mu#mu","lep");
		legMap[it->first]->AddEntry(h1Map[it->first+"t"],"ME^{2} method: Template w/o couplings scale","lep");
		if(it->first=="2000")
		{
			legMap[it->first]->AddEntry(h1Template,"ME^{2} method: Template histogram at  #it{g=1} (SSM)","lep");
			legMap[it->first]->AddEntry(graphSSM,  "ME^{2} method: Template function  at  #it{g=1} (SSM)","p");
			legMap[it->first]->AddEntry(graphDY,   "ME^{2} method: Template function  at  #it{g=0} (DY)","p");
		}
		if(!doTruth)
		{
			h1dTlvTmpltMap[it->first]->SetLineColor(kCyan+2);
			h1dTlvTmpltMap[it->first]->SetMarkerColor(kCyan+2);
			h1dTlvTmpltMap[it->first]->SetMarkerStyle(5);
			h1dTlvTmpltMap[it->first]->SetMarkerSize(0.5);
			legMap[it->first]->AddEntry(h1dTlvTmpltMap[it->first],"ME^{2} method: DY+Template (no interference)","p");
		
			h1dBrandeisTmpltMap[it->first]->SetLineColor(kRed);
			h1dBrandeisTmpltMap[it->first]->SetMarkerColor(kRed);
			h1dBrandeisTmpltMap[it->first]->SetMarkerStyle(27);
			h1dBrandeisTmpltMap[it->first]->SetMarkerSize(0.5);
			legMap[it->first]->AddEntry(h1dBrandeisTmpltMap[it->first],"Flat Z' method: DY+Template (no interference)","p");
		}

		it->second->Divide(1,2);
		TVirtualPad* ph = it->second->cd(1);
		TVirtualPad* pr = it->second->cd(2);	
		ph->SetPad(0.00, 0.35, 1.00, 1.00);
		pr->SetPad(0.00, 0.00, 1.00, 0.35);
		ph->SetBottomMargin(0.012);
		pr->SetBottomMargin(0.20);
		pr->SetTopMargin(0.012);
		
		ph->cd();
		ph->Draw();
		ph->SetTicks(1,1);
		ph->SetLogy();
		ph->SetLogx();
		// h1Map[it->first+"o"]->SetMaximum( h1Map[it->first+"t"]->GetMaximum()*1.5 );
		// h1Map[it->first+"o"]->Draw();
		TH1D* hTmpNoErr = (TH1D*)resetErrors(h1Map[it->first+"o"])->Clone();
		hTmpNoErr->SetMaximum( h1Map[it->first+"t"]->GetMaximum()*1.5 );
		hTmpNoErr->SetLineStyle(1);
		hTmpNoErr->SetLineColor(kBlack);
		hTmpNoErr->SetFillColor(kAzure-9);
		hTmpNoErr->Draw();
		TH1D* hTmpErr = (TH1D*)ShiftLog(h1Map[it->first+"o"],0.2)->Clone();
		hTmpErr->SetFillStyle(4000); //will be transparent
		hTmpErr->SetFillColor(0);
		hTmpErr->DrawCopy("epx0SAMES");
		hDY->Draw("SAMES");
		h1Map[it->first+"t"]->Draw("epSAMES");
		//poissonGraphMap[it->first]->Draw("pSAMES");
		if(it->first=="2000")
		{
			graphDY->Draw("SAMESp");
			graphSSM->Draw("SAMESp");
			h1Template->Draw("epSAMES");
		}
		_INFO("");
		h1dTlvTmpltMap[it->first]->Draw("SAMESp");
		h1dBrandeisTmpltMap[it->first]->Draw("SAMESp");
		
		TLine* chopline = new TLine(0.12805,getYmin(h1Map[it->first+"o"]),0.12805,7.e5);
		chopline->SetLineStyle(2);
		chopline->SetLineColor(kBlack);
		chopline->Draw("SAMES");
		ptxt->Draw("SAMES");
		
		legMap[it->first]->Draw("SAMES");
		ph->RedrawAxis();
		ph->Update();

		_INFO("");

		pr->cd();
		pr->Draw();
		pr->SetTicks(1,1);
		pr->SetGridy();
		pr->SetLogx();
		h1rMap[it->first]->Draw("ep");
		line->Draw("SAMES");
		h1rMap[it->first]->Draw("epSAMES");
		legR->Draw("SAMES");
		pr->RedrawAxis();
		pr->Update();

		unsigned int savestate = 1;
		if(it->first=="1000")      savestate = 0;
		else if(it->first=="2000") savestate = 2;
		else                       savestate = 1;
		TString testType = (doResiduals) ? "_residuals" : "_ratio";
		mutype   = (doTruth)     ? "_truth"     : "_recon";
		savemultipdf(it->second, "plots/validation/validation"+mutype+testType+"_"+mctype+"_all.pdf", savestate);
		saveas(it->second, "plots/validation/validation"+mutype+testType+"_"+mctype+"_"+it->first);
		
		TCanvas* c = new TCanvas(it->first,"",600,400);
		c->cd();
		c->Draw();
		c->SetTicks(1,1);
		c->SetLogy();
		c->SetLogx();
		hTmpNoErr->Draw();
		hTmpErr->DrawCopy("epx0SAMES");
		hDY->Draw("SAMES");
		h1Map[it->first+"t"]->Draw("epSAMES");
		//poissonGraphMap[it->first]->Draw("pSAMES");
		if(it->first=="2000")
		{
			graphDY->Draw("SAMESp");
			graphSSM->Draw("SAMESp");
			h1Template->Draw("epSAMES");
		}
		h1dTlvTmpltMap[it->first]->Draw("SAMESp");
		h1dBrandeisTmpltMap[it->first]->Draw("SAMESp");
		legMap[it->first]->Draw("SAMES");
		chopline->Draw("SAMES");
		ptxt->Draw("SAMES");
		c->RedrawAxis();
		c->Update();
		saveas(c,"plots/validation/validation_"+it->first+"_"+mutype+testType);
		
		_INFO("done "+(string)it->first);
	}
}
Exemplo n.º 5
0
//______________________________________________________________________________
void PIDEnergy()
{
    // Main method.
    
    Char_t tmp[256];
    
    // load CaLib
    gSystem->Load("libCaLib.so");
    
    // general configuration
    Bool_t watch = kTRUE;
    const Char_t* data = "Data.PID.E1";
    const Char_t* hName = "CaLib_PID_dE_E_013";
    Double_t yMin = 0;
    Double_t yMax = 2000;
    gMin = 500;
    gMax = 1100;

    // configuration (December 2007)
    //const Char_t calibration[] = "LD2_Dec_07";
    //const Char_t* fLoc = "/usr/puma_scratch0/werthm/A2/Dec_07/AR/out/droop";

    // configuration (February 2009)
    //const Char_t calibration[] = "LD2_Feb_09";
    //const Char_t* fLoc = "/usr/puma_scratch0/werthm/A2/Feb_09/AR/out/droop";
    
    // configuration (May 2009)
    const Char_t calibration[] = "LD2_May_09";
    const Char_t* fLoc = "/usr/puma_scratch0/werthm/A2/May_09/AR/out/droop";

    // create histogram
    gHOverview = new TH1F("Overview", "Overview", 40000, 0, 40000);
    TCanvas* cOverview = new TCanvas();
    gHOverview->GetYaxis()->SetRangeUser(yMin, yMax);
    gHOverview->Draw("E1");
    
    // create line
    gLine = new TLine();
    gLine->SetLineColor(kBlue);
    gLine->SetLineWidth(2);

    // init fitting function
    gFitFunc = 0;
    
    // create fitting canvas
    gCFit = new TCanvas();
    
    // get number of sets
    Int_t nSets = TCMySQLManager::GetManager()->GetNsets(data, calibration);
    
    // total number of runs
    Int_t nTotRuns = 0;

    // first and last runs
    Int_t first_run, last_run;

    // loop over sets
    for (Int_t i = 0; i < nSets; i++)
    {
        // get runs of set
        Int_t nRuns;
        Int_t* runs = TCMySQLManager::GetManager()->GetRunsOfSet(data, calibration, i, &nRuns);
    
        // loop over runs
        for (Int_t j = 0; j < nRuns; j++)
        {
            // save first and last runs
            if (i == 0 && j == 0) first_run = runs[j];
            if (i == nSets-1 && j == nRuns-1) last_run = runs[j];

            // clean-up
            if (gH) delete gH;
            if (gH3) delete gH3;
            if (gFile) delete gFile;
            gH = 0;
            gH3 = 0;
            gFile = 0;

            // load ROOT file
            sprintf(tmp, "%s/ARHistograms_CB_%d.root", fLoc, runs[j]);
            gFile = new TFile(tmp);

            // check file
            if (!gFile) continue;
            if (gFile->IsZombie()) continue;

            // load histogram
            gH3 = (TH3*) gFile->Get(hName);
            if (!gH3) continue;
            if (!gH3->GetEntries()) continue;
            if (gH3->GetEntries() < 5000) continue;

            // project histogram
            gH3->GetXaxis()->SetRangeUser(40, 60);
            sprintf(tmp, "Proj_%d_y", runs[j]);
            gH = (TH1D*) gH3->Project3D(tmp);
            gH->Rebin(3);

            // fit the histogram
            Fit(runs[j]);
            
            // update canvases and sleep
            if (watch)
            {
                cOverview->Update();
                gCFit->Update();
                //gSystem->Sleep(10);
            }
     
            // count run
            nTotRuns++;
        }

        // clean-up
        delete runs;

        // draw runset markers
        cOverview->cd();
        
        // get first run of set
        Int_t frun = TCMySQLManager::GetManager()->GetFirstRunOfSet(data, calibration, i);

        // draw line
        TLine* aLine = new TLine(frun, yMin, frun, yMax);
        aLine->SetLineColor(kBlue);
        aLine->SetLineWidth(2);
        aLine->Draw("same");
    }
    
    // adjust axis
    gHOverview->GetXaxis()->SetRangeUser(first_run-10, last_run+10);

    TFile* fout = new TFile("runset_overview.root", "recreate");
    cOverview->Write();
    delete fout;

    printf("%d runs analyzed.\n", nTotRuns);

    gSystem->Exit(0);
}
Exemplo n.º 6
0
void continuum_test2(const int type = 11) {
    TChain* gen_chain = new TChain("TEvent");
    gen_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_mixed.root");
    TChain* sig_chain = new TChain("TEvent");
    TChain* bkg_chain = new TChain("TEvent");
    int nsig;
    int m_mode,m_h0mode;
    double eff_min = 0.4;
    double eff_max = 0.95;
    double signif_min = 0;
    double signif_max = 15;
    double rej_min = 0.8;
    double rej_max = 1.0;
//  double mh0_min, mh0_max;
    double de_min, de_max;
    double mbc_min, mbc_max;
    string label;
    switch(type) {
    case 11:
        sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcPi0_s7.root");
        m_mode = 1;
        m_h0mode = 10;
        label = string("#pi^{0}");
        signif_min = 13.;
        signif_max = 20;
        de_min  =-0.1;
        de_max  = 0.0921343;
        mbc_min = 5.27093;
        mbc_max = 5.28789;
        break;
    case 101:
        sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcDST0_s1.root");
        m_mode = 10;
        m_h0mode = 10;
        label = string("D^{*0}#pi^{0}");
        signif_min = 5.5;
        signif_max = 7.2;
        de_min  =-0.1;
        de_max  = 0.0647985;
        mbc_min = 5.27146;
        mbc_max = 5.28769;
        break;
    case 12:
        sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcETA_s2.root");
        m_mode = 2;
        m_h0mode = 10;
        label = string("#eta#rightarrow#gamma#gamma");
        signif_min = 7.5;
        signif_max = 10;
        de_min  =-0.0994528;
        de_max  = 0.0758825;
        mbc_min = 5.27147;
        mbc_max = 5.28763;
        break;
    case 102:
        sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcDST0_s1.root");
        m_mode = 20;
        m_h0mode = 10;
        label = string("D^{*0}#eta(#rightarrow#gamma#gamma)");
        signif_min = 4.;
        signif_max = 5.;
        de_min  =-0.0853615;
        de_max  = 0.0630641;
        mbc_min = 5.27182;
        mbc_max = 5.28746;
        break;
    case 13:
        sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcETA_s2.root");
        m_mode = 2;
        m_h0mode = 20;
        label = string("#eta#rightarrow#pi^{+}#pi^{-}#pi^{0}");
        signif_min = 4.5;
        signif_max = 6.2;
        de_min  =-0.0534644;
        de_max  = 0.0453713;
        mbc_min = 5.27205;
        mbc_max = 5.28735;
        break;
    case 103:
        sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcDST0_s1.root");
        m_mode = 20;
        m_h0mode = 20;
        label = string("D^{*0}#eta(#rightarrow#pi^{+}#pi^{-}#pi^{0})");
        signif_min = 5;
        signif_max = 6.5;
        de_min  =-0.0567598;
        de_max  = 0.0459849;
        mbc_min = 5.27182;
        mbc_max = 5.28746;
        break;
    case 14:
        sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcOMEGA_s5.root");
        m_mode = 3;
        m_h0mode = 20;
        label = string("#omega");
        signif_min = 11.5;
        signif_max = 15.0;
        de_min  =-0.0565915;
        de_max  = 0.0467748;
        mbc_min = 5.27198;
        mbc_max = 5.28743;
        break;
    case 15:
        sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcETAP_s1.root");
        m_mode = 5;
        m_h0mode = 10;
        label = string("#eta'(#rightarrow#gamma#gamma)");
        signif_min = 3.;
        signif_max = 4;
        de_min  =-0.0873898;
        de_max  = 0.0642064;
        mbc_min = 5.27255;
        mbc_max = 5.28718;
        break;
    default:
        cout << "Wrong signal type " << type << endl;
        return;
    }

    bkg_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_cont.root");
//  bkg_chain->Add("/home/vitaly/B0toDh0/TMVA/FIL1_b2dh_charm_2_12.root");
//  bkg_chain->Add("/home/vitaly/B0toDh0/TMVA/FIL1_b2dh_uds_2_12.root");

    RooArgSet argset;

    RooCategory mode("mode","mode");
    mode.defineType("mode",m_mode);

    RooCategory h0mode("h0mode","h0mode");
    h0mode.defineType("h0mode",m_h0mode);

    argset.add(mode);
    argset.add(h0mode);

    RooCategory good_icpv("good_icpv","good_icpv");
    good_icpv.defineType("good_icpv",1);
    argset.add(good_icpv);

    RooRealVar mbc("mbc","mbc",mbc_min,mbc_max,"GeV");
    argset.add(mbc);
    RooRealVar de("de","#DeltaE",de_min,de_max,"GeV");
    argset.add(de);
    RooRealVar cos_thr("cos_thr","cos_thr",-1,1);
    argset.add(cos_thr);
    RooRealVar cos_hel("cos_hel","cos_hel",-1,1);
    if(type == 14) argset.add(cos_hel);
//  RooRealVar md("md_raw","md_raw",md_min,md_max,"GeV");     argset.add(md);
//  RooRealVar mk("mk","mk",KMass-mk_cut,KMass+mk_cut,"GeV"); argset.add(mk);
//  RooRealVar mh0("mh0","mh0",mh0_min,mh0_max,"GeV"); argset.add(mh0);
//  RooRealVar mpi0("mpi0","mpi0",mpi0_min,mpi0_max,"GeV"); if(type != 12) argset.add(mpi0);
//  RooRealVar chi2_mass_d0("chi2_mass_d0","chi2_mass_d0",0.,50.); argset.add(chi2_mass_d0);

    const bool bdt_flag  = type<15;
    const bool bdtg_flag = false;
    const bool lh1_flag  = false;
    const bool lh0_flag  = type>=15;

    double bdt_best_cut  = 0;
    double bdtg_best_cut = 0;
    double lh1_best_cut  = 0;
    double lh0_best_cut  = 0;

    double bdt_best_sig  = 0;
    double bdtg_best_sig = 0;
    double lh1_best_sig  = 0;
    double lh0_best_sig  = 0;

    double bdt_best_eff  = 0;
    double bdtg_best_eff = 0;
    double lh1_best_eff  = 0;
    double lh0_best_eff  = 0;

    double bdt_best_sup  = 0;
    double bdtg_best_sup = 0;
    double lh1_best_sup  = 0;
    double lh0_best_sup  = 0;

    double bdt_best_pur  = 0;
    double bdtg_best_pur = 0;
    double lh1_best_pur  = 0;
    double lh0_best_pur  = 0;

    if(bdt_flag) {
        RooRealVar bdt("bdt","bdt",-1.,1.);
        argset.add(bdt);
    }
    if(bdtg_flag) {
        RooRealVar bdtg("bdtg","bdtg",-1.,1.);
        argset.add(bdtg);
    }
    if(lh1_flag) {
        RooRealVar lh1("lh1","lh1",0.,1.);
        argset.add(lh1);
    }
    if(lh0_flag) {
        RooRealVar lh0("lh0","lh0",0.,1.);
        argset.add(lh0);
    }
//  RooRealVar atckpi_max("atckpi_max","atckpi_max",0.,atckpi_cut); argset.add(atckpi_max);
//  RooRealVar cos_thr("cos_thr","cos_thr",-1.,1.); argset.add(cos_thr);

//  RooArgSet argset_gen(argset);

    RooCategory b0f("b0f","b0f");
    b0f.defineType("comb",-1);
    b0f.defineType("good",1);
    b0f.defineType("wrph",5);
    b0f.defineType("fsr",10);
    argset.add(b0f);

    RooDataSet ds_sig("ds_sig","ds_sig",sig_chain,argset,"b0f == 1 || b0f == 5 || b0f == 10");
    RooDataSet ds_con("ds_con","ds_con",bkg_chain,argset,"b0f == -1");


    RooDataSet ds_gen("ds_gen","ds_gen",gen_chain,argset,"b0f == 1 || b0f == 5 || b0f == 10");
    nsig = ds_gen.sumEntries()*0.25;
    cout << "Nsig: " << nsig << endl;
    ds_sig.Print();
    ds_con.Print();

    double sig_eff_bdt[100];
    double sig_eff_bdtg[100];
    double sig_eff_lh1[100];
    double sig_eff_lh0[100];

    double back_reg_bdt[100];
    double back_reg_bdtg[100];
    double back_reg_lh1[100];
    double back_reg_lh0[100];

    double signif_bdt[100];
    double signif_bdtg[100];
    double signif_lh1[100];
    double signif_lh0[100];

    const double gen = ds_con.sumEntries()*0.25;
    const double sig = ds_sig.sumEntries();

    stringstream out;
    double S,B;
    const int dots = 100;
    const double dbdt = 1./dots;
    cout << gen*4 << " " << sig << endl;
    for(int i=0; i<dots; i++) {
        if(bdt_flag) {
            out.str("");
            out << "bdt>" << i*dbdt;
            S = ds_sig.sumEntries(out.str().c_str());
            B = ds_con.sumEntries(out.str().c_str())*0.25;
            sig_eff_bdt[i]  = S/sig;
            back_reg_bdt[i] = (gen-B)/gen;
            S = nsig/sig*S;
//      B = nback/gen*B;
            signif_bdt[i] = S/sqrt(S+B+0.0001);
            if(bdt_best_sig<(signif_bdt[i]-0.07)) {
                bdt_best_sig = signif_bdt[i];
                bdt_best_cut = i*dbdt;
                bdt_best_pur = S/(S+B);
                bdt_best_eff = sig_eff_bdt[i];
                bdt_best_sup = back_reg_bdt[i];
            }
        }

        if(lh1_flag) {
            out.str("");
            out << "lh1>sqrt(1-" << i*dbdt*i*dbdt << ") && abs(cos_thr)<1.";
            if(type == 14) out << " && abs(cos_hel)>0.3";
            S = ds_sig.sumEntries(out.str().c_str());
            B = ds_con.sumEntries(out.str().c_str())*0.25;
            sig_eff_lh1[i]  = S/sig;
            back_reg_lh1[i] = (gen-B)/gen;
            S = nsig/sig*S;
//      B = nback/gen*B;
            signif_lh1[i] = S/sqrt(S+B+0.0001);
            if(lh1_best_sig<signif_lh1[i]) {
                lh1_best_sig = signif_lh1[i];
                lh1_best_cut = sqrt(1-i*dbdt*i*dbdt);
                lh1_best_pur = S/(S+B);
                lh1_best_eff = sig_eff_lh1[i];
                lh1_best_sup = back_reg_lh1[i];
            }
        }

        if(lh0_flag) {
            out.str("");
            out << "lh0>" << -1 +2*i*dbdt << " && abs(cos_thr)<1.";
            if(type == 14) out << " && abs(cos_hel)>0.3";
            S = ds_sig.sumEntries(out.str().c_str());
            B = ds_con.sumEntries(out.str().c_str())*0.25;
            sig_eff_lh0[i]  = S/sig;
            back_reg_lh0[i] = (gen-B)/gen;
            S = nsig/sig*S;
//      B = nback/gen*B;
            signif_lh0[i] = S/sqrt(S+B+0.0001);
            if(lh0_best_sig<signif_lh0[i]) {
                lh0_best_sig = signif_lh0[i];
                lh0_best_cut = sqrt(1-i*dbdt*i*dbdt);
                lh0_best_pur = S/(S+B);
                lh0_best_eff = sig_eff_lh0[i];
                lh0_best_sup = back_reg_lh0[i];
            }
        }

        if(bdtg_flag) {
            out.str("");
            out << "bdtg>sqrt(1-" << i*dbdt*i*dbdt << ")";
            S = ds_sig.sumEntries(out.str().c_str());
            B = ds_con.sumEntries(out.str().c_str())/0.949;
            sig_eff_bdtg[i]  = S/sig;
            back_reg_bdtg[i] = (gen-B)/gen;
            S = nsig/sig*S;
//      B = nback/gen*B;
            signif_bdtg[i] = S/sqrt(S+B+0.0001);
            if(bdtg_best_sig<signif_bdtg[i]) {
                bdtg_best_sig = signif_bdtg[i];
                bdtg_best_cut = sqrt(1-i*dbdt*i*dbdt);
                bdtg_best_pur = S/(S+B);
                bdtg_best_eff = sig_eff_bdtg[i];
                bdtg_best_sup = back_reg_bdtg[i];
            }
        }
    }

    TCanvas* c1 = new TCanvas("c1","Signal Efficiency vs. Background Rejection",600,600);
    TH1F* h1 = c1->Draw();
    c1->SetGrid();
    TMultiGraph *mg = new TMultiGraph();
    mg->SetTitle("Background Rejection");
    TGraph* gr_bdt = new TGraph(dots,sig_eff_bdt,back_reg_bdt);
    gr_bdt->SetMarkerSize(1);
    gr_bdt->SetMarkerColor(kBlue);
    gr_bdt->SetMarkerStyle(21);
    gr_bdt->SetTitle("Background Rejection");
    gr_bdt->GetXaxis()->SetRangeUser(eff_min,eff_max);
    gr_bdt->GetXaxis()->SetTitle("Signal Efficiency");
    gr_bdt->GetXaxis()->SetTitleSize(0.06);
    gr_bdt->GetXaxis()->SetTitleOffset(0.75);
    gr_bdt->GetYaxis()->SetRangeUser(rej_min,rej_max);

    TGraph* gr_bdtg = new TGraph(dots,sig_eff_bdtg,back_reg_bdtg);
    gr_bdtg->SetMarkerSize(1);
    gr_bdtg->SetMarkerColor(kRed);
    gr_bdtg->SetMarkerStyle(21);

    TGraph* gr_ksfw1 = new TGraph(dots,sig_eff_lh1,back_reg_lh1);
    gr_ksfw1->SetMarkerSize(1);
    gr_ksfw1->SetMarkerColor(kRed);
    gr_ksfw1->SetMarkerStyle(22);

    TGraph* gr_ksfw0 = new TGraph(dots,sig_eff_lh0,back_reg_lh0);
    gr_ksfw0->SetMarkerSize(1.4);
    gr_ksfw0->SetMarkerColor(kBlue);
    gr_ksfw0->SetMarkerStyle(22);
    gr_ksfw0->SetTitle("Background Rejection");
    gr_ksfw0->GetXaxis()->SetRangeUser(eff_min,eff_max);
    gr_ksfw0->GetXaxis()->SetTitle("Signal Efficiency");
    gr_ksfw0->GetXaxis()->SetTitleSize(0.06);
    gr_ksfw0->GetXaxis()->SetTitleOffset(0.75);
    gr_ksfw0->GetYaxis()->SetRangeUser(rej_min,rej_max);

    if(bdt_flag)mg->Add(gr_bdt);
    if(bdtg_flag)mg->Add(gr_bdtg);
    if(lh1_flag)mg->Add(gr_ksfw1);
    if(lh0_flag)mg->Add(gr_ksfw0);

    if(bdt_flag && !bdtg_flag && !lh1_flag && !lh0_flag) {
        gr_bdt->Draw("AP");
    } else if(lh0_flag && !bdtg_flag && !lh1_flag && !bdt_flag) {
        gr_ksfw0->Draw("AP");
    } else {
        mg->Draw("AP");
    }

    if(type<15) {
        TLine* cutline = new TLine(bdt_best_eff,rej_min,bdt_best_eff,rej_max);
        cutline->SetLineColor(kRed);
        cutline->SetLineWidth(2);
        cutline->Draw("AP");
    } else {
        TLine* cutline = new TLine(lh0_best_eff,rej_min,lh0_best_eff,rej_max);
        cutline->SetLineColor(kRed);
        cutline->SetLineWidth(2);
        cutline->Draw("AP");
    }

    TPaveText *pt = new TPaveText(0.7,0.75,0.98,0.9,"brNDC");
    pt->SetFillColor(0);
    pt->SetTextAlign(12);
    pt->AddText(label.c_str());
    out.str("");
    out << "Input S = " << nsig;
    pt->AddText(out.str().c_str());
    out.str("");
    out << "Input B = " << (int)gen;
    pt->AddText(out.str().c_str());
    pt->Draw();

    TPaveText *pt2 = new TPaveText(0.3,0.25,0.6,0.5,"brNDC");
    pt2->SetFillColor(0);
    pt2->SetTextAlign(12);
    pt2->AddText("Best cut:");
    if(type<15) {
        out.str("");
        out << setprecision(3);
        out << "Pur = " << bdt_best_pur*100;
        pt2->AddText(out.str().c_str());
        out.str("");
        out << "Eff = " << bdt_best_eff*100;
        pt2->AddText(out.str().c_str());
        out.str("");
        out << "Rej = " << bdt_best_sup*100;
        pt2->AddText(out.str().c_str());
        pt2->Draw();
    } else {
        out.str("");
        out << setprecision(3);
        out << "Pur = " << lh0_best_pur*100;
        pt2->AddText(out.str().c_str());
        out.str("");
        out << "Eff = " << lh0_best_eff*100;
        pt2->AddText(out.str().c_str());
        out.str("");
        out << "Rej = " << lh0_best_sup*100;
        pt2->AddText(out.str().c_str());
        pt2->Draw();
    }

    c1->Update();
    out.str("");
    out << "../Note/pics/eff-rej-m" << type << ".root";
    c1->Print(out.str().c_str());
    out.str("");
    out << "../Note/pics/eff-rej-m" << type << ".eps";
    c1->Print(out.str().c_str());

    TCanvas* c2 = new TCanvas("c2","Significance",600,600);
    c2->cd();
    c2->SetGrid();

    TMultiGraph *signif_mg = new TMultiGraph();
    signif_mg->SetTitle("Signal Significance");
    TGraph* signif_gr_bdt = new TGraph(dots,sig_eff_bdt,signif_bdt);
    signif_gr_bdt->SetMarkerSize(1);
    signif_gr_bdt->SetMarkerColor(kBlue);
    signif_gr_bdt->SetMarkerStyle(21);
    signif_gr_bdt->SetTitle("Signal Significance");
    signif_gr_bdt->GetXaxis()->SetRangeUser(eff_min,eff_max);
    signif_gr_bdt->GetXaxis()->SetTitle("Signal Efficiency");
    signif_gr_bdt->GetXaxis()->SetTitleSize(0.06);
    signif_gr_bdt->GetXaxis()->SetTitleOffset(0.75);
    signif_gr_bdt->GetYaxis()->SetRangeUser(signif_min,signif_max);

    TGraph* signif_gr_bdtg = new TGraph(dots,sig_eff_bdtg,signif_bdtg);
    signif_gr_bdtg->SetMarkerSize(1);
    signif_gr_bdtg->SetMarkerColor(kRed);
    signif_gr_bdtg->SetMarkerStyle(21);

    TGraph* signif_gr_ksfw1 = new TGraph(dots,sig_eff_lh1,signif_lh1);
    signif_gr_ksfw1->SetMarkerSize(1);
    signif_gr_ksfw1->SetMarkerColor(kRed);
    signif_gr_ksfw1->SetMarkerStyle(22);

    TGraph* signif_gr_ksfw0 = new TGraph(dots,sig_eff_lh0,signif_lh0);
    signif_gr_ksfw0->SetMarkerSize(1.4);
    signif_gr_ksfw0->SetMarkerColor(kBlue);
    signif_gr_ksfw0->SetMarkerStyle(22);
    signif_gr_ksfw0->SetTitle("Signal Significance");
    signif_gr_ksfw0->GetXaxis()->SetRangeUser(eff_min,eff_max);
    signif_gr_ksfw0->GetXaxis()->SetTitle("Signal Efficiency");
    signif_gr_ksfw0->GetXaxis()->SetTitleSize(0.06);
    signif_gr_ksfw0->GetXaxis()->SetTitleOffset(0.75);
    signif_gr_ksfw0->GetYaxis()->SetRangeUser(signif_min,signif_max);

    if(bdt_flag)  signif_mg->Add(signif_gr_bdt);
    if(bdtg_flag) signif_mg->Add(signif_gr_bdtg);
    if(lh1_flag)  signif_mg->Add(signif_gr_ksfw1);
    if(lh0_flag)  signif_mg->Add(signif_gr_ksfw0);

    if(bdt_flag && !bdtg_flag && !lh1_flag && !lh0_flag) {
        signif_gr_bdt->Draw("AP");
    } else if(!bdt_flag && !bdtg_flag && !lh1_flag && lh0_flag) {
        signif_gr_ksfw0->Draw("AP");
    } else {
        signif_mg->Draw("AP");
    }
    if(type<15) {
        TLine* cutline2 = new TLine(bdt_best_eff,signif_min,bdt_best_eff,signif_max);
        cutline2->SetLineColor(kRed);
        cutline2->SetLineWidth(2);
        cutline2->Draw("AP");
    } else {
        TLine* cutline2 = new TLine(lh0_best_eff,signif_min,lh0_best_eff,signif_max);
        cutline2->SetLineColor(kRed);
        cutline2->SetLineWidth(2);
        cutline2->Draw("AP");
    }

    pt->Draw();
    pt2->Draw();

    c2->Update();
    out.str("");
    out << "../Note/pics/eff-fom-m" << type << ".root";
    c2->Print(out.str().c_str());
    out.str("");
    out << "../Note/pics/eff-fom-m" << type << ".eps";
    c2->Print(out.str().c_str());

    cout << "Summary:" << endl;

    if(bdtg_flag) {
        cout << "bdtg decision: ";
        cout << "sig: "   << bdtg_best_sig;
        cout << ", cut: " << bdtg_best_cut;
        cout << ", pur: " << bdtg_best_pur;
        cout << ", eff: " << bdtg_best_eff;
        cout << ", sup: " << bdtg_best_sup << endl;
    }
    if(bdt_flag) {
        cout << "bdt decision:  ";
        cout << "sig: "   << bdt_best_sig;
        cout << ", cut: " << bdt_best_cut;
        cout << ", pur: " << bdt_best_pur;
        cout << ", eff: " << bdt_best_eff;
        cout << ", sup: " << bdt_best_sup << endl;
    }
    if(lh1_flag) {
        cout << "lh1 decision:  ";
        cout << "sig: "   << lh1_best_sig;
        cout << ", cut: " << lh1_best_cut;
        cout << ", pur: " << lh1_best_pur;
        cout << ", eff: " << lh1_best_eff;
        cout << ", sup: " << lh1_best_sup << endl;
    }
    if(lh0_flag) {
        cout << "lh0 decision:  ";
        cout << "sig: "   << lh0_best_sig;
        cout << ", cut: " << lh0_best_cut;
        cout << ", pur: " << lh0_best_pur;
        cout << ", eff: " << lh0_best_eff;
        cout << ", sup: " << lh0_best_sup << endl;
    }

    return;
}
Exemplo n.º 7
0
int JERJES(const char *reta = "eta2")
{

  LoadStyle();

  int rfit=8;
  int statop=1;
  int kRebin=1;
  //const char *reta = "eta3.0";
  //bool iSave=false;

  float ketacut=2.0;
  if(strcmp(reta,"eta3.0")==0)ketacut=3;
  bool iSigma=false;

  if(rfit==0){fitmin=0.01;fitmax=2.00;}   
  else if(rfit==1){fitmin=0.00;fitmax=1.25;}
  else if(rfit==2){fitmin=0.00;fitmax=1.50;}
  else if(rfit==3){fitmin=0.00;fitmax=1.75;}
  else if(rfit==4){fitmin=0.00;fitmax=2.50;}
  else if(rfit==5){fitmin=0.00;fitmax=3.50;} 
  else if(rfit==6){fitmin=0.50;fitmax=1.25;}
  else if(rfit==7){fitmin=0.50;fitmax=1.50;}
  else if(rfit==8){fitmin=0.50;fitmax=1.75;}
  else if(rfit==9){fitmin=0.50;fitmax=2.50;}
  else if(rfit==10){fitmin=0.50;fitmax=3.50;}
  else if(rfit==11){fitmin=0.75;fitmax=1.25;}
  else if(rfit==12){fitmin=0.75;fitmax=1.50;}
  else if(rfit==13){fitmin=0.75;fitmax=1.75;}
  else if(rfit==14){fitmin=0.75;fitmax=2.50;}
  else if(rfit==15){fitmin=0.75;fitmax=3.50;}
  else if(rfit==16){fitmin=1.00;fitmax=1.25;}
  else if(rfit==17){fitmin=1.00;fitmax=1.50;}
  else if(rfit==18){fitmin=1.00;fitmax=1.75;}
  else if(rfit==19){fitmin=1.00;fitmax=2.50;}
  else if(rfit==20){fitmin=1.00;fitmax=3.50;}

  if(kRebin){
    if(bins%kRebin!=0){
      cout<<"Cannot be divided in these bins chose another combination : "<<endl;
      return 0;
    }
    bins /= kRebin;
    binw = (maxval  - minval)/(1.0*bins);
    cout<<"kRebin : "<<kRebin<<"\t bins : "<<bins<<"\t binw  : "<<binw<<endl;
  }
 
  //! Input files 
  TFile *fin_pbpb = new TFile("input/pbpb/MC_2011_pbpb_merged.root","r");
  //! 0   : pp  
  //TFile *fin_pp   = new TFile("input/pp/MC_2013_pp_merged.root","r");
  TFile *fin_pp   = new TFile("input/pp/MC_2013_v81_prod22_pp_merged.root","r");  

  cout<<"\t"<<endl
      <<"rfit : "<<rfit<<"\t fitmin : "<<fitmin<<"\t fitmax : "<<fitmax<<endl
      <<"Input file name  pbpb : "<<fin_pbpb->GetName()<<endl
      <<"Input file name  pp   : "<<fin_pp->GetName()<<endl
      <<"\t"<<endl;


  //! used for fit
  double ptbins[]   = {20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300};
  //double ptbins[] = {50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,220,240,260,280,300,340,400,440,600};
  const int b1  = sizeof(ptbins)/sizeof(Double_t) - 1;
  const int nbins = b1;
  cout<<"# of pt bins : "<<nbins<<endl;
  //return 0;

  int maxr=3;
  int ipad=0;

  //! 0-5 PbPb Resposnse and 6th is pp response
  //! Response corrected pT  (jtpt) / gen pT vs gen pT
  TH2F *hratiocorrrefpt[knj][ncen];
  TH1F *hratiocorrrefpt1D[knj][ncen][nbins];  
  TH1F *hMean[knj][ncen], *hSigma[knj][ncen], *hRMS[knj][ncen], *hArM[knj][ncen];

  //! Response raw pT / gen pT  vs gen pT
  TH2F *hratiorawrefpt[knj][ncen];
  TH1F *hratiorawrefpt1D[knj][ncen][nbins];  
  TH1F *hMean_r[knj][ncen], *hSigma_r[knj][ncen], *hRMS_r[knj][ncen], *hArM_r[knj][ncen];

  //! Ratio of Fit and geometric mean/RMS
  //TH1F *hRatio_Mean[knj][ncen], *hRatio_RMS[knj][ncen];


  for(int nj=0;nj<knj;nj++){
    //cout<<"nj : "<<nj<<Form("\t %s",calgo[nj])<<endl;
    for(int icen=0;icen<ncen;icen++){

      if(icen < ncen-1){
	if(nj==1)cout<<"icen : "<<ccent[icen]<<endl;

	//! PbPb Histograms
	//! corrected jet pT
	hMean [nj][icen] = new TH1F(Form("hMean%d_%d",nj,icen),Form("<reco p_{T}/gen p_{T}> %s pbpb %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hMean[nj][icen],statop);
	hArM [nj][icen] = new TH1F(Form("hArM%d_%d",nj,icen),Form("<reco p_{T}/gen p_{T}> %s pbpb %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hArM[nj][icen],statop);
	hSigma [nj][icen] = new TH1F(Form("hSigma%d_%d",nj,icen),Form("#sigma(reco p_{T}/gen p_{T}) %s pbpb %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hSigma[nj][icen],statop);    
	hRMS [nj][icen] = new TH1F(Form("hRMS%d_%d",nj,icen),Form("RMS(reco p_{T}/gen p_{T}) %s pbpb %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hRMS[nj][icen],statop);        
	
	//! Raw jet pt
	hMean_r [nj][icen] = new TH1F(Form("hMean_r%d_%d",nj,icen),Form("<raw p_{T}/gen p_{T}> %s pbpb %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hMean_r[nj][icen],statop);
	hArM_r [nj][icen] = new TH1F(Form("hArM_r%d_%d",nj,icen),Form("<raw p_{T}/gen p_{T}> %s pbpb %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hArM_r[nj][icen],statop);
	hSigma_r [nj][icen] = new TH1F(Form("hSigma_r%d_%d",nj,icen),Form("#sigma(raw p_{T}/gen p_{T}) %s pbpb %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hSigma_r[nj][icen],statop);    
	hRMS_r [nj][icen] = new TH1F(Form("hRMS_r%d_%d",nj,icen),Form("RMS(raw p_{T}/gen p_{T}) %s pbpb %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hRMS_r[nj][icen],statop);        

	//! PbPb  starts here
	hratiocorrrefpt[nj][icen] = (TH2F*)fin_pbpb->Get(Form("hrescrpt_genm%d_%d",nj+knj,icen));
	hratiocorrrefpt[nj][icen]->SetName(Form("hratiocorrrefpt_pbpb%d_%d",nj,icen));
	
	hratiorawrefpt[nj][icen] = (TH2F*)fin_pbpb->Get(Form("hresrrpt_genm%d_%d",nj+knj,icen));
	hratiorawrefpt[nj][icen]->SetName(Form("hratiorawrefpt_pbpb%d_%d",nj,icen));
	
	for(int ip=0;ip<nbins;ip++){
	  int lbin = (int)(ptbins[ip]   - minval)/binw +1;
	  int hbin = (int)(ptbins[ip+1] - minval)/binw +1;
	  hratiocorrrefpt1D[nj][icen][ip]  = (TH1F*)hratiocorrrefpt [nj][icen]->ProjectionY(Form("hratiocorrrefpt1D%d_%d_%d",nj,icen,ip),lbin,hbin,"e");
	  if(hratiocorrrefpt1D[nj][icen][ip]->GetEntries()<maxEntry)continue;
	  hratiocorrrefpt1D[nj][icen][ip]->Rebin(5);
	  FillMeanSigma(ip,hratiocorrrefpt1D[nj][icen][ip],
			hArM[nj][icen],hRMS[nj][icen],
			hMean[nj][icen],hSigma[nj][icen]);
	  
	  //! Raw / Gen
	  hratiorawrefpt1D[nj][icen][ip]  = (TH1F*)hratiorawrefpt [nj][icen]->ProjectionY(Form("hratiorawrefpt1D%d_%d_%d",nj,icen,ip),lbin,hbin,"e");
	  if(hratiorawrefpt1D[nj][icen][ip]->GetEntries()<maxEntry)continue;
	  hratiorawrefpt1D[nj][icen][ip]->Rebin(5);
	  FillMeanSigma(ip,hratiorawrefpt1D[nj][icen][ip],
			hArM_r[nj][icen],hRMS_r[nj][icen],
			hMean_r[nj][icen],hSigma_r[nj][icen]);
	}
      	//! PbPb ends

      }else{//! pp

	if(nj==1)cout<<"icen : "<<ccent[icen]<<endl;
	//! pp /////////////////////////////
	hMean [nj][icen] = new TH1F(Form("hMean%d_%d",nj,icen),Form("<reco p_{T}/gen p_{T}> %s pp %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hMean[nj][icen],statop);
	hArM [nj][icen] = new TH1F(Form("hArM%d_%d",nj,icen),Form("<reco p_{T}/gen p_{T}> %s pp %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hArM[nj][icen],statop);
	hSigma [nj][icen] = new TH1F(Form("hSigma%d_%d",nj,icen),Form("#sigma(reco p_{T}/gen p_{T}) %s pp %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hSigma[nj][icen],statop);    
	hRMS [nj][icen] = new TH1F(Form("hRMS%d_%d",nj,icen),Form("RMS(reco p_{T}/gen p_{T}) %s pp %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hRMS[nj][icen],statop);        
	
	hMean_r [nj][icen] = new TH1F(Form("hMean_r%d_%d",nj,icen),Form("<raw p_{T}/gen p_{T}> %s pp %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hMean_r[nj][icen],statop);
	hArM_r [nj][icen] = new TH1F(Form("hArM_r%d_%d",nj,icen),Form("<raw p_{T}/gen p_{T}> %s pp %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hArM_r[nj][icen],statop);
	hSigma_r [nj][icen] = new TH1F(Form("hSigma_r%d_%d",nj,icen),Form("#sigma(raw p_{T}/gen p_{T}) %s pp %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hSigma_r[nj][icen],statop);    
	hRMS_r [nj][icen] = new TH1F(Form("hRMS_r%d_%d",nj,icen),Form("RMS(raw p_{T}/gen p_{T}) %s pp %d",calgo[nj],icen),nbins,ptbins);
	MakeHist(hRMS_r[nj][icen],statop);        
      
	//! Histograms for the response calculation
	hratiocorrrefpt[nj][icen]  = (TH2F*)fin_pp->Get(Form("hrescrpt_genm%d_%d",nj,0));
	hratiocorrrefpt[nj][icen]->SetName(Form("hratiocorrrefpt_pp%d_%d",nj,icen));
	
	hratiorawrefpt[nj][icen]  = (TH2F*)fin_pp->Get(Form("hresrrpt_genm%d_%d",nj,0));
	hratiorawrefpt[nj][icen]->SetName(Form("hratiorawrefpt_pp%d_%d",nj,icen));
	
	/*
	//! Pile up subtracted algorithms
	hratiocorrrefpt[nj][icen]  = (TH2F*)fin_pp->Get(Form("hrescrpt%d_%d",nj+knj,icen));
	hratiocorrrefpt[nj][icen]->SetName(Form("hratiocorrrefpt_pp%d_%d",nj,icen));
	
	hratiorawrefpt[nj][icen]  = (TH2F*)fin_pp->Get(Form("hresrrpt%d_%d",nj+knj,icen));
	hratiorawrefpt[nj][icen]->SetName(Form("hratiorawrefpt_pp%d_%d",nj,icen));
	*/
	
	
	for(int ip=0;ip<nbins;ip++){
	  int lbin = (int)(ptbins[ip]   - minval)/binw +1;
	  int hbin = (int)(ptbins[ip+1] - minval)/binw +1;
	  hratiocorrrefpt1D[nj][icen][ip]  = (TH1F*)hratiocorrrefpt [nj][icen]->ProjectionY(Form("hratiocorrrefpt1D_pp%d_%d_%d",nj,icen,ip),lbin,hbin,"e");
	  if(hratiocorrrefpt1D[nj][icen][ip]->GetEntries()<maxEntry)continue;
	  hratiocorrrefpt1D[nj][icen][ip]->Rebin(5);
	  FillMeanSigma(ip,hratiocorrrefpt1D[nj][icen][ip],
			hArM[nj][icen],hRMS[nj][icen],
			hMean[nj][icen],hSigma[nj][icen]);
	  
	  //! Raw/Gen
	  hratiorawrefpt1D[nj][icen][ip]  = (TH1F*)hratiorawrefpt [nj][icen]->ProjectionY(Form("hratiorawrefpt1D_pp%d_%d_%d",nj,icen,ip),lbin,hbin,"e");
	  if(hratiorawrefpt1D[nj][icen][ip]->GetEntries()<maxEntry)continue;
	  hratiorawrefpt1D[nj][icen][ip]->Rebin(5);
	  FillMeanSigma(ip,hratiorawrefpt1D[nj][icen][ip],
			hArM_r[nj][icen],hRMS_r[nj][icen],
			hMean_r[nj][icen],hSigma_r[nj][icen]);
	}//! ip bin
      }//! pp ends    
    }//! icen loop ends
  }//! nj loop ends

  for(int nj=0;nj<knj;nj++){
    for(int ic=0;ic<ncen;ic++){
      
      MakeHistMean(hArM  [nj][ic],1.09,0.84);
      MakeHistRMS (hRMS  [nj][ic],0.43,0.001);
      MakeHistMean(hMean [nj][ic],1.09,0.84);
      MakeHistRMS (hSigma[nj][ic],0.43,0.001);

      // if(ic<ncen-1){
      // 	MakeHistMean(hArM  [nj][ic],1.058,0.955);
      // 	MakeHistRMS (hRMS  [nj][ic],0.43,0.001);
      // 	MakeHistMean(hMean [nj][ic],1.058,0.955);
      // 	MakeHistRMS (hSigma[nj][ic],0.43,0.001);
	
      // 	MakeHistMean(hArM_r  [nj][ic],1.058,0.955);
      // 	MakeHistRMS (hRMS_r  [nj][ic],0.43,0.001);
      // 	MakeHistMean(hMean_r [nj][ic],1.058,0.955);
      // 	MakeHistRMS (hSigma_r[nj][ic],0.43,0.001);
      // }else{
      // 	MakeHistMean(hArM  [nj][ic],1.058,0.955);
      // 	MakeHistRMS (hRMS  [nj][ic],0.43,0.001);
      // 	MakeHistMean(hMean [nj][ic],1.058,0.955);
      // 	MakeHistRMS (hSigma[nj][ic],0.43,0.001);
	
      // 	MakeHistMean(hArM_r  [nj][ic],1.058,0.955);
      // 	MakeHistRMS (hRMS_r  [nj][ic],0.43,0.001);
      // 	MakeHistMean(hMean_r [nj][ic],1.058,0.955);
      // 	MakeHistRMS (hSigma_r[nj][ic],0.43,0.001);
      // }
    }      
  }


  TCanvas *c3[knj];
  TLegend *l3[knj];
  int maxc=ncen-1;
  maxr=2;
  for(int nj=0;nj<knj;nj++){
    //if(nj!=1)continue;
    c3[nj] = new TCanvas(Form("c3_%d",nj),Form("%s JES JER",calgo[nj]),97,118,1739,479);
    makeMultiPanelCanvas(c3[nj],maxc,maxr,0.0,0.0,0.22,0.22,0.02,0);
    //std::cout<<std::endl;
    ipad=0;

    l3[nj] = new TLegend(0.2453033,0.6247655,0.4838159,0.9399625,NULL,"BRNDC");
    l3[nj]->SetHeader("");
    l3[nj]->SetBorderSize(0);
    l3[nj]->SetTextFont(42);
    l3[nj]->SetTextSize(0.09);
    l3[nj]->SetLineColor(1);
    l3[nj]->SetLineStyle(1);
    l3[nj]->SetLineWidth(1);
    l3[nj]->SetFillColor(10);
    l3[nj]->SetFillStyle(1001);
    l3[nj]->SetHeader("");			  

    for(int ic=ncen-2;ic>=0;ic--){

      if(iSigma){
	hSigma[nj][ic]->SetMarkerStyle(24);
	hSigma[nj][ic]->SetMarkerColor(1);
	hSigma[nj][ic]->SetLineColor(1);
	hSigma[nj][ic]->SetMarkerSize(1.3);
	hSigma[nj][ncen-1]->SetMarkerStyle(20);
	hSigma[nj][ncen-1]->SetMarkerColor(1);
	hSigma[nj][ncen-1]->SetLineColor(1);
	hSigma[nj][ncen-1]->SetMarkerSize(1.1);
	
	hMean[nj][ic]->SetMarkerStyle(24);
	hMean[nj][ic]->SetMarkerColor(1);
	hMean[nj][ic]->SetLineColor(1);
	hMean[nj][ic]->SetMarkerSize(1.3);
	hMean[nj][ncen-1]->SetMarkerStyle(20);
	hMean[nj][ncen-1]->SetMarkerColor(1);
	hMean[nj][ncen-1]->SetLineColor(1);
	hMean[nj][ncen-1]->SetMarkerSize(1.1);
	
	hMean_r[nj][ic]->SetMarkerStyle(25);
	hMean_r[nj][ic]->SetMarkerColor(1);
	hMean_r[nj][ic]->SetLineColor(1);
	hMean_r[nj][ic]->SetMarkerSize(1.3);
	hMean_r[nj][ncen-1]->SetMarkerStyle(21);
	hMean_r[nj][ncen-1]->SetMarkerColor(1);
	hMean_r[nj][ncen-1]->SetLineColor(1);
	hMean_r[nj][ncen-1]->SetMarkerSize(1.1);

	c3[nj]->cd(++ipad);
	//gPad->SetLogx();
	hSigma[nj][ic]->Draw("p");
	hSigma[nj][ncen-1]->Draw("psame");

	if(ipad==6){
	  //l3[nj]->AddEntry(hSigma[nj][ncen-1],"pp","p"); 
	  l3[nj]->AddEntry(hSigma[nj][ncen-1],"pp v81 prod 22","p"); 
	  //l3[nj]->AddEntry(hSigma[nj][ncen-1],"pp w pu subtraction","p"); 
	  l3[nj]->AddEntry(hSigma[nj][0],"PbPb","p"); 
	  l3[nj]->Draw();
	}
	if(ipad==1){
	  TPaveText *pt3 = new TPaveText(0.4193406,0.7098186,0.7083456,0.8899312,"brNDC");
	  pt3->SetBorderSize(0);
	  pt3->SetFillColor(10);
	  pt3->SetTextFont(42);
	  TText *text3 = pt3->AddText("CMS Preliminary");
	  text3->SetTextSize(0.09);
	  TText *text4 = pt3->AddText("PYTHIA Z2 + HYDJET 1.8");
	  text4->SetTextSize(0.09);
	  pt3->Draw();
	}
	
	TPaveText *pt = new TPaveText(0.2663379,0.02939336,0.4986753,0.1544715,"brNDC");
	pt->SetBorderSize(0);
	pt->SetFillColor(10);
	pt->SetTextFont(42);
	TText *text = pt->AddText(Form("%s",ccent[ic]));
	text->SetTextSize(0.09);
	pt->Draw();
	
	if(ipad==2){
	  TPaveText *pt1 = new TPaveText(0.1346399,0.6797999,0.9011061,0.8749218,"brNDC");
	  pt1->SetBorderSize(0);
	  pt1->SetFillColor(10);
	  pt1->SetTextFont(42);
	  //TText *text1 = pt1->AddText(Form("%s",calgo[nj]));
	  TText *text1 = pt1->AddText(Form("%s",algn[nj]));
	  text1->SetTextSize(0.09);
	  TText *text2 = pt1->AddText(Form("|#eta| < %0.0f",ketacut));
	  text2->SetTextSize(0.09);
	  pt1->Draw();
	}
	
	c3[nj]->cd(ipad+(ncen-1));
	
	//cout<<"pad : "<<(ipad+(ncen-1))<<"\t "<<calgo[nj]<<"\t centrality : "<<ccent[ic]<<"\t name : "<<hArM[nj][ic]->GetName()<<endl;
	//gPad->SetLogx();
	
	hMean[nj][ic]->Draw("p");
	hMean_r[nj][ic]->Draw("psame");      
	hMean[nj][ncen-1]->Draw("psame");
	hMean_r[nj][ncen-1]->Draw("psame");


	if(ipad==6){
	  TLatex *tex1 = new TLatex(175,0.68,"Raw");
	  tex1->SetTextFont(42);
	  tex1->SetTextSize(0.08);
	  tex1->SetLineWidth(2);
	  tex1->Draw();
	  TLatex *tex2 = new TLatex(174,0.63,"Corrected");
	  tex2->SetTextFont(42);
	  tex2->SetTextSize(0.08);
	  tex2->SetLineWidth(2);
	  tex2->Draw();
	  TMarker *marker1 = new TMarker(162,0.65,25);
	  marker1->SetMarkerStyle(25);
	  marker1->Draw();
	  TMarker *marker2 = new TMarker(139,0.65,21);
	  marker2->SetMarkerStyle(21);
	  marker2->Draw();
	  TMarker *marker3 = new TMarker(162,0.70,24);
	  marker3->SetMarkerStyle(24);
	  marker3->Draw();
	  TMarker *marker4 = new TMarker(139,0.70,20);
	marker4->SetMarkerStyle(20);
	marker4->Draw();
	}
	TLine *line = new TLine(xmin,1,xmax,1);
	line->SetLineWidth(1);
	line->SetLineStyle(2);
	line->Draw();

      }else{

	hRMS[nj][ic]->SetMarkerStyle(24);
	hRMS[nj][ic]->SetMarkerColor(1);
	hRMS[nj][ic]->SetLineColor(1);
	hRMS[nj][ic]->SetMarkerSize(1.3);
	
	hRMS[nj][ncen-1]->SetMarkerStyle(20);
	hRMS[nj][ncen-1]->SetMarkerColor(1);
	hRMS[nj][ncen-1]->SetLineColor(1);
	hRMS[nj][ncen-1]->SetMarkerSize(1.1);
	
	hArM[nj][ic]->SetMarkerStyle(24);
	hArM[nj][ic]->SetMarkerColor(1);
	hArM[nj][ic]->SetLineColor(1);
	hArM[nj][ic]->SetMarkerSize(1.3);
	
	hArM[nj][ncen-1]->SetMarkerStyle(20);
	hArM[nj][ncen-1]->SetMarkerColor(1);
	hArM[nj][ncen-1]->SetLineColor(1);
	hArM[nj][ncen-1]->SetMarkerSize(1.1);
	
	hArM_r[nj][ic]->SetMarkerStyle(25);
	hArM_r[nj][ic]->SetMarkerColor(1);
	hArM_r[nj][ic]->SetLineColor(1);
	hArM_r[nj][ic]->SetMarkerSize(1.3);
	
	hArM_r[nj][ncen-1]->SetMarkerStyle(21);
	hArM_r[nj][ncen-1]->SetMarkerColor(1);
	hArM_r[nj][ncen-1]->SetLineColor(1);
	hArM_r[nj][ncen-1]->SetMarkerSize(1.1);
	
	c3[nj]->cd(++ipad);
	//gPad->SetLogx();
	hRMS[nj][ic]->Draw("p");
	hRMS[nj][ncen-1]->Draw("psame");
	
	if(ipad==6){
	  l3[nj]->AddEntry(hRMS[nj][ncen-1],"pp v81 prod22 ak3PF","p"); 
	  //l3[nj]->AddEntry(hRMS[nj][ncen-1],"pp w pu subtraction","p"); 
	  l3[nj]->AddEntry(hRMS[nj][0],"PbPb akPu3PF","p"); 
	  l3[nj]->Draw();
	}
	if(ipad==1){
	  TPaveText *pt3 = new TPaveText(0.4193406,0.7098186,0.7083456,0.8899312,"brNDC");
	  pt3->SetBorderSize(0);
	  pt3->SetFillColor(10);
	  pt3->SetTextFont(42);
	  TText *text3 = pt3->AddText("CMS Preliminary");
	  text3->SetTextSize(0.09);
	  TText *text4 = pt3->AddText("PYTHIA Z2 + HYDJET 1.8");
	  text4->SetTextSize(0.09);
	  pt3->Draw();
	}
	
	TPaveText *pt = new TPaveText(0.2663379,0.02939336,0.4986753,0.1544715,"brNDC");
	pt->SetBorderSize(0);
	pt->SetFillColor(10);
	pt->SetTextFont(42);
	TText *text = pt->AddText(Form("%s",ccent[ic]));
	text->SetTextSize(0.09);
	pt->Draw();
	
	if(ipad==2){
	  TPaveText *pt1 = new TPaveText(0.1346399,0.6797999,0.9011061,0.8749218,"brNDC");
	  pt1->SetBorderSize(0);
	  pt1->SetFillColor(10);
	  pt1->SetTextFont(42);
	  //TText *text1 = pt1->AddText(Form("%s",calgo[nj]));
	  TText *text1 = pt1->AddText(Form("%s",algn[nj]));
	  text1->SetTextSize(0.09);
	  TText *text2 = pt1->AddText(Form("|#eta| < %0.0f",ketacut));
	  text2->SetTextSize(0.09);
	  pt1->Draw();
	}
	

	c3[nj]->cd(ipad+(ncen-1));
	
	//cout<<"pad : "<<(ipad+(ncen-1))<<"\t "<<calgo[nj]<<"\t centrality : "<<ccent[ic]<<"\t name : "<<hArM[nj][ic]->GetName()<<endl;
	//gPad->SetLogx();
	
	hArM[nj][ic]->Draw("p");
	//hArM_r[nj][ic]->Draw("psame");      
	hArM[nj][ncen-1]->Draw("psame");
	//hArM_r[nj][ncen-1]->Draw("psame");
	
	
	if(ipad==6){
	  TLatex *tex1 = new TLatex(175,0.68,"Raw");
	  tex1->SetTextFont(42);
	  tex1->SetTextSize(0.08);
	  tex1->SetLineWidth(2);
	  tex1->Draw();
	  TLatex *tex2 = new TLatex(174,0.63,"Corrected");
	  tex2->SetTextFont(42);
	  tex2->SetTextSize(0.08);
	  tex2->SetLineWidth(2);
	  tex2->Draw();
	  TMarker *marker1 = new TMarker(162,0.65,25);
	  marker1->SetMarkerStyle(25);
	  marker1->Draw();
	  TMarker *marker2 = new TMarker(139,0.65,21);
	  marker2->SetMarkerStyle(21);
	  marker2->Draw();
	  TMarker *marker3 = new TMarker(162,0.70,24);
	  marker3->SetMarkerStyle(24);
	  marker3->Draw();
	  TMarker *marker4 = new TMarker(139,0.70,20);
	  marker4->SetMarkerStyle(20);
	  marker4->Draw();
	}
	TLine *line = new TLine(xmin,1,xmax,1);
	line->SetLineWidth(1);
	line->SetLineStyle(2);
	line->Draw();
      }//! else
    }//! icen
    if(nj!=1)c3[nj]->Close();
   /*
   if(iSave){
     c3[nj]->SaveAs(Form("AN/JERJES/JERJES_%s.png",calgo[nj]));
     c3[nj]->SaveAs(Form("AN/JERJES/JERJES_%s.pdf",calgo[nj]));
     c3[nj]->SaveAs(Form("AN/JERJES/JERJES_%s.C",calgo[nj]));
     c3[nj]->SaveAs(Form("AN/JERJES/JERJES_%s.eps",calgo[nj]));
   }
   */
  }//! algo
  //return 0;


  ipad=0;
  TCanvas *c99[knj][ncen];
  maxr=3;
  for(int nj=1;nj<2;nj++){
    for(int ic=0;ic<ncen-1;ic++){
      c99[nj][ic] = new TCanvas(Form("c99_%d_%d",nj,ic),Form("%s Fitting plots %s",calgo[nj],ccent[ic]),100,102,1399,942);
      //c99[nj][ic]->Divide(6,maxr,0,0);
      c99[nj][ic]->Divide(7,4,0,0);
      ipad=0;
      
      for(int ip=0;ip<nbins;ip++){      
	c99[nj][ic]->cd(++ipad);
	if(ipad%7==0)gPad->SetRightMargin(0.02);
	if(ipad==1 || ipad==8 || ipad==15 || ipad==22)gPad->SetLeftMargin(0.15);
	gPad->SetBottomMargin(0.15);
	gPad->SetLogy();

	hratiocorrrefpt1D[nj][ic][ip]->SetMaximum(25.634);
	hratiocorrrefpt1D[nj][ic][ip]->SetMinimum(1e-09);
	hratiocorrrefpt1D[nj][ic][ip]->SetTitle(0);
	hratiocorrrefpt1D[nj][ic][ip]->GetXaxis()->SetTitle("<reco jet p_{T} / gen jet p_{T}>");
	hratiocorrrefpt1D[nj][ic][ip]->GetXaxis()->SetTitleFont(42);
	hratiocorrrefpt1D[nj][ic][ip]->GetXaxis()->SetLabelFont(42);
	hratiocorrrefpt1D[nj][ic][ip]->GetXaxis()->SetLabelSize(0.08);
	hratiocorrrefpt1D[nj][ic][ip]->GetXaxis()->SetTitleSize(0.07);
	
	hratiocorrrefpt1D[nj][ic][ip]->GetYaxis()->SetTitle("");
	hratiocorrrefpt1D[nj][ic][ip]->GetYaxis()->SetTitleFont(42);
	hratiocorrrefpt1D[nj][ic][ip]->GetYaxis()->SetLabelFont(42);
	hratiocorrrefpt1D[nj][ic][ip]->GetYaxis()->SetLabelSize(0.08);

	hratiocorrrefpt1D[nj][ic][ip]->SetMarkerStyle(24);
	hratiocorrrefpt1D[nj][ic][ip]->SetMarkerColor(1);
	hratiocorrrefpt1D[nj][ic][ip]->SetLineColor(1);
	hratiocorrrefpt1D[nj][ic][ip]->SetMarkerSize(1.1);
	hratiocorrrefpt1D[nj][ic][ip]->Draw("p");  


	// c99[nj][ic]->Update();
	// TPaveStats *ps = (TPaveStats*)  hratiocorrrefpt1D[nj][ic][ip]->GetListOfFunctions()->FindObject("stats");
	// ps->SetX1NDC(0.50);
	// ps->SetY1NDC(0.41);       
	// ps->SetX2NDC(0.95);
	// ps->SetY2NDC(0.79);
	// ps->SetTextFont(42);
	// ps->Draw();

	//pp
	if(ic==0){
	  hratiocorrrefpt1D[nj][ncen-1][ip]->SetMaximum(25.634);
	  hratiocorrrefpt1D[nj][ncen-1][ip]->SetMinimum(1e-09);
	  hratiocorrrefpt1D[nj][ncen-1][ip]->SetTitle(0);
	  hratiocorrrefpt1D[nj][ncen-1][ip]->GetXaxis()->SetTitle("<reco jet p_{T} / gen jet p_{T}>");
	  hratiocorrrefpt1D[nj][ncen-1][ip]->GetXaxis()->SetTitleFont(42);
	  hratiocorrrefpt1D[nj][ncen-1][ip]->GetXaxis()->SetLabelFont(42);
	  hratiocorrrefpt1D[nj][ncen-1][ip]->GetXaxis()->SetLabelSize(0.08);
	  hratiocorrrefpt1D[nj][ncen-1][ip]->GetXaxis()->SetTitleSize(0.07);
	  
	  hratiocorrrefpt1D[nj][ncen-1][ip]->GetYaxis()->SetTitle("");
	  hratiocorrrefpt1D[nj][ncen-1][ip]->GetYaxis()->SetTitleFont(42);
	  hratiocorrrefpt1D[nj][ncen-1][ip]->GetYaxis()->SetLabelFont(42);
	  hratiocorrrefpt1D[nj][ncen-1][ip]->GetYaxis()->SetLabelSize(0.08);
	  
	  hratiocorrrefpt1D[nj][ncen-1][ip]->SetMarkerStyle(24);
	  hratiocorrrefpt1D[nj][ncen-1][ip]->SetMarkerColor(2);
	  hratiocorrrefpt1D[nj][ncen-1][ip]->SetLineColor(2);
	  hratiocorrrefpt1D[nj][ncen-1][ip]->SetMarkerSize(0.8);

	}	  

	// TPaveStats *ps = (TPaveStats*)  hratiocorrrefpt1D[nj][ic][ip]->GetListOfFunctions()->FindObject("stats");
	// ps->SetX1NDC(0.50);
	// ps->SetY1NDC(0.41);       
	// ps->SetX2NDC(0.95);
	// ps->SetY2NDC(0.79);
	// ps->SetTextFont(42);
	// ps->Draw();

	hratiocorrrefpt1D[nj][ncen-1][ip]->Draw("psame");  
	c99[nj][ic]->Update();

	TPaveText *pt   = new TPaveText(0.4524683,0.8914759,0.7023389,0.9597512,"brNDC");
	pt->SetBorderSize(0);
	pt->SetFillColor(10);
	pt->SetTextFont(42);
	TText *text = pt->AddText(Form("%0.0f < p_{T} (GeV/c) < %0.0f",ptbins[ip], ptbins[ip+1]));
	text->SetTextSize(0.07);
	pt->Draw();


	
	// if(ic<ncen-1){
	//   hratiocorrrefpt1D[nj][ic][ip]->SetMaximum(25.634);
	//   hratiocorrrefpt1D[nj][ic][ip]->SetMinimum(1e-09);
	//   hratiocorrrefpt1D[nj][ic][ip]->SetTitle(0);
	//   hratiocorrrefpt1D[nj][ic][ip]->GetXaxis()->SetTitle("<reco jet p_{T} / gen jet p_{T}>");
	//   hratiocorrrefpt1D[nj][ic][ip]->GetXaxis()->SetTitleFont(42);
	//   hratiocorrrefpt1D[nj][ic][ip]->GetXaxis()->SetLabelFont(42);
	//   hratiocorrrefpt1D[nj][ic][ip]->GetXaxis()->SetLabelSize(0.08);
	//   hratiocorrrefpt1D[nj][ic][ip]->GetXaxis()->SetTitleSize(0.07);
	
	//   hratiocorrrefpt1D[nj][ic][ip]->GetYaxis()->SetTitle("");
	//   hratiocorrrefpt1D[nj][ic][ip]->GetYaxis()->SetTitleFont(42);
	//   hratiocorrrefpt1D[nj][ic][ip]->GetYaxis()->SetLabelFont(42);
	//   hratiocorrrefpt1D[nj][ic][ip]->GetYaxis()->SetLabelSize(0.08);

	//   hratiocorrrefpt1D[nj][ic][ip]->SetMarkerStyle(24);
	//   hratiocorrrefpt1D[nj][ic][ip]->SetMarkerColor(1);
	//   hratiocorrrefpt1D[nj][ic][ip]->SetLineColor(1);
	//   hratiocorrrefpt1D[nj][ic][ip]->SetMarkerSize(0.9);
	//   hratiocorrrefpt1D[nj][ic][ip]->Draw("p");  

	//   hratiorawrefpt1D[nj][ic][ip]->SetMarkerStyle(24);
	//   hratiorawrefpt1D[nj][ic][ip]->SetMarkerColor(4);
	//   hratiorawrefpt1D[nj][ic][ip]->SetLineColor(4);
	//   hratiorawrefpt1D[nj][ic][ip]->SetMarkerSize(0.9);
	//   //hratiorawrefpt1D[nj][ic][ip]->Draw("psame");  
	
	//   c99[nj][ic]->Update();
	//   TPaveStats *ps = (TPaveStats*)  hratiocorrrefpt1D[nj][ic][ip]->GetListOfFunctions()->FindObject("stats");
	//   ps->SetX1NDC(0.50);
	//   ps->SetY1NDC(0.41);       
	//   ps->SetX2NDC(0.95);
	//   ps->SetY2NDC(0.79);
	//   ps->SetTextFont(42);
	//   ps->Draw();

	// }else{
	  
	

	
	// TPaveText *pt   = new TPaveText(0.4524683,0.8914759,0.7023389,0.9597512,"brNDC");
	// pt->SetBorderSize(0);
	// pt->SetFillColor(10);
	// pt->SetTextFont(42);
	// TText *text = pt->AddText(Form("%0.0f < p_{T} (GeV/c) < %0.0f",ptbins[ip], ptbins[ip+1]));
	// text->SetTextSize(0.07);
	// pt->Draw();
	
	// if(ipad==1){
	//   TPaveText *pt1 = new TPaveText(0.6044166,0.2194909,0.8644171,0.3668644,"brNDC");
	//   pt1->SetBorderSize(0);
	//   pt1->SetFillColor(10);
	//   pt1->SetTextFont(42);
	//   TText *text1 = 0;
	//   if(ic==ncen-1)text1 = pt1->AddText("ak3PF");
	//   else text1 = pt1->AddText(calgo[nj]);
	//   text1->SetTextSize(0.09);	
	//   pt1->Draw();
	  
	//   TPaveText *pt2 = new TPaveText(0.60104,0.8160025,0.8475339,0.9142515,"brNDC");
	//   pt2->SetBorderSize(0);
	//   pt2->SetFillColor(10);
	//   pt->SetTextFont(42);
	//   TText *text2 = pt2->AddText(Form("%s",ccent[ic]));
	//   text2->SetTextSize(0.08);
	//   pt2->Draw();
	// }
      }
    }
  }
  return 0;


  /*
  //! Difference between Gaussian fits mean/sigma and ArM/RMS
  cout<<"Sigma and RMS ....." <<endl;
  ipad=0;
  ialg=1;
  TCanvas *c7 = new TCanvas("c7","Sigma and RMSFit resolution",15,131,1885,546);
  makeMultiPanelCanvas(c7,ncen,2,0.0,0.0,0.22,0.22,0.02,0);
  //c7->SetGridx();
  TLegend *l7 = new TLegend(0.2453033,0.6247655,0.4838159,0.9399625,NULL,"BRNDC");
  l7->SetHeader("");
  l7->SetBorderSize(0);
  l7->SetTextFont(42);
  l7->SetTextSize(0.09);
  l7->SetLineColor(1);
  l7->SetLineStyle(1);
  l7->SetLineWidth(1);
  l7->SetFillColor(10);
  l7->SetFillStyle(1001);
  l7->SetHeader("");			  
  l7->AddEntry(hRMS[ialg][0],"RMS","p");
  l7->AddEntry(hSigma[ialg][0],"Gaussian Sigma","p");

  for(int icen=ncen-1;icen>=0;icen--){
    c7->cd(++ipad); 
    //gPad->SetGridx();
    //gPad->SetLogx();

    if(ipad==1){//! pp

      hSigma[ialg][icen]->SetStats(0);
      hSigma[ialg][icen]->SetMarkerStyle(20);
      hSigma[ialg][icen]->SetMarkerColor(1);
      hSigma[ialg][icen]->SetLineColor(1);
      hSigma[ialg][icen]->SetMarkerSize(1.0);

      hRMS[ialg][icen]->SetStats(0);      
      hRMS[ialg][icen]->SetMarkerStyle(24);
      hRMS[ialg][icen]->SetMarkerColor(1);
      hRMS[ialg][icen]->SetLineColor(1);
      hRMS[ialg][icen]->SetMarkerSize(1.2);
      
      hRMS[ialg][icen]->Draw("p");
      hSigma[ialg][icen]->Draw("psame");
      hRatio_RMS[ialg][icen] = (TH1F*)hRMS[ialg][icen]->Clone(Form("hRatio_RMS%d_%d",1,icen));
      hRatio_RMS[ialg][icen]->Divide(hSigma[ialg][icen]);

    }else{//! pbpb

      hSigma[ialg][icen]->SetStats(0);      
      hSigma[ialg][icen]->SetMarkerStyle(20);
      hSigma[ialg][icen]->SetMarkerColor(1);
      hSigma[ialg][icen]->SetLineColor(1);
      hSigma[ialg][icen]->SetMarkerSize(1.0);

      hRMS[ialg][icen]->SetStats(0);            
      hRMS[ialg][icen]->SetMarkerStyle(24);
      hRMS[ialg][icen]->SetMarkerColor(1);
      hRMS[ialg][icen]->SetLineColor(1);
      hRMS[ialg][icen]->SetMarkerSize(1.2);
      
      hRMS[ialg][icen]->Draw("p");
      hSigma[ialg][icen]->Draw("psame");
      


      hRatio_RMS[ialg][icen] = (TH1F*)hRMS[ialg][icen]->Clone(Form("hRatio_RMS%d_%d",1,icen));
      hRatio_RMS[ialg][icen]->Divide(hSigma[ialg][icen]);
    }
  
    gPad->Update();
    
    TPaveText *pt1 = new TPaveText(0.2846445,0.06345905,0.4451356,0.2028512,"brNDC");
    pt1->SetBorderSize(0);
    pt1->SetFillColor(10);
    pt1->SetTextFont(42);
    TText *text1 = pt1->AddText(Form("%s",ccent[icen]));
    text1->SetTextSize(0.08);
    pt1->Draw();

    if(ipad==1)l7->Draw();
    
    gPad->Update();

    c7->cd(ipad+ncen);
    //gPad->SetLogx();
    //gPad->SetGridx();
    
    TLine *l2 = new TLine(xmin,1,xmax+250,1);
    l2->SetLineWidth(1);
    l2->SetLineStyle(2);

    hRatio_RMS[ialg][icen]->SetStats(0);
    hRatio_RMS[ialg][icen]->SetMaximum(1.546);
    hRatio_RMS[ialg][icen]->SetMinimum(0.846);
    hRatio_RMS[ialg][icen]->GetYaxis()->SetTitle("RMS/Sigma");
    hRatio_RMS[ialg][icen]->Draw("p");
    l2->Draw();
  }

  // c7->SaveAs("AN/JER/Fits_RMSSigma_JER.png");
  // c7->SaveAs("AN/JER/Fits_RMSSigma_JER.C");
  // c7->SaveAs("AN/JER/Fits_RMSSigma_JER.eps");
  // c7->SaveAs("AN/JER/Fits_RMsSigma_JER.pdf");


  cout<<endl;
  cout<<"ArM and Mean ....." <<endl;
  //! Mean
  ipad=0;
  TCanvas *c8 = new TCanvas("c8","ArM and Mean",15,131,1885,546);
  makeMultiPanelCanvas(c8,ncen,2,0.0,0.0,0.22,0.22,0.02,0);

  TLegend *l8 = new TLegend(0.2453033,0.6247655,0.4838159,0.9399625,NULL,"BRNDC");
  l8->SetHeader("");
  l8->SetBorderSize(0);
  l8->SetTextFont(42);
  l8->SetTextSize(0.09);
  l8->SetLineColor(1);
  l8->SetLineStyle(1);
  l8->SetLineWidth(1);
  l8->SetFillColor(10);
  l8->SetFillStyle(1001);
  l8->SetHeader("");			  
  l8->AddEntry(hArM[ialg][0],"Ar Mean","p");
  l8->AddEntry(hMean[ialg][0],"Gaussian Mean","p");

  for(int icen=ncen-1;icen>=0;icen--){
    
    c8->cd(++ipad); 

    if(ipad==1){//! pp
      hMean[ialg][icen]->SetStats(0);
      hMean[ialg][icen]->SetMarkerStyle(20);
      hMean[ialg][icen]->SetMarkerColor(1);
      hMean[ialg][icen]->SetLineColor(1);
      hMean[ialg][icen]->SetMarkerSize(1.0);
      
      hArM[ialg][icen]->SetStats(0);
      hArM[ialg][icen]->SetMarkerStyle(24);
      hArM[ialg][icen]->SetMarkerColor(1);
      hArM[ialg][icen]->SetLineColor(1);
      hArM[ialg][icen]->SetMarkerSize(1.2);

      hArM[ialg][icen]->Draw("p");
      hMean[ialg][icen]->Draw("psame");
      
      hRatio_Mean[ialg][icen] = (TH1F*)hArM[ialg][icen]->Clone(Form("hRatio_ArM%d_%d",ialg,icen));
      hRatio_Mean[ialg][icen]->Divide(hMean[ialg][icen]);
      
    }else{

      hMean[ialg][icen]->SetStats(0);
      hMean[ialg][icen]->SetMarkerStyle(20);
      hMean[ialg][icen]->SetMarkerColor(1);
      hMean[ialg][icen]->SetLineColor(1);
      hMean[ialg][icen]->SetMarkerSize(1.0);

      hArM[ialg][icen]->SetStats(0);
      hArM[ialg][icen]->SetMarkerStyle(24);
      hArM[ialg][icen]->SetMarkerColor(1);
      hArM[ialg][icen]->SetLineColor(1);
      hArM[ialg][icen]->SetMarkerSize(1.2);

      hArM[ialg][icen]->Draw("p");      
      hMean[ialg][icen]->Draw("psame");

      hRatio_Mean[ialg][icen] = (TH1F*)hArM[ialg][icen]->Clone(Form("hRatio_Mean%d_%d",ialg,icen));
      hRatio_Mean[ialg][icen]->Divide(hMean[ialg][icen]);
    }      

    TPaveText *pt1 = new TPaveText(0.2846445,0.06345905,0.4451356,0.2028512,"brNDC");
    pt1->SetBorderSize(0);
    pt1->SetFillColor(10);
    pt1->SetTextFont(42);
    TText *text1 = pt1->AddText(Form("%s",ccent[icen]));
    text1->SetTextSize(0.08);
    pt1->Draw();

    if(ipad==1)l8->Draw();

    c8->cd(ipad+ncen);
    TLine *l2 = new TLine(xmin,1,xmax+250,1);
    l2->SetLineWidth(1);
    l2->SetLineStyle(2);

    hRatio_Mean[ialg][icen]->SetStats(0);
    hRatio_Mean[ialg][icen]->SetMaximum(1.046);
    hRatio_Mean[ialg][icen]->SetMinimum(0.946);
    hRatio_Mean[ialg][icen]->GetYaxis()->SetTitle("ArM/Mean");
    hRatio_Mean[ialg][icen]->Draw("p");
    l2->Draw();
  }
  // c8->SaveAs("AN/JER/Fits_RMSSigma_JES.png");
  // c8->SaveAs("AN/JER/Fits_RMSSigma_JES.C");
  // c8->SaveAs("AN/JER/Fits_RMSSigma_JES.eps");
  // c8->SaveAs("AN/JER/Fits_RMsSigma_JES.pdf");
  */
  return 0;

}
Exemplo n.º 8
0
void bdtout_etaR9bins(TString r9bin, bool preselNorm=false, bool passcut=false) {

  gStyle->SetOptTitle(0);
  gStyle->SetOptStat(0);

  gStyle->SetCanvasColor(0);
  gStyle->SetFrameBorderMode(0);
  
  gStyle->SetPalette(1);

  TString r9_str;
  if (r9bin=="lowR9") {r9_str="both R9<0.9";}
  else if (r9bin=="mixedR9") {r9_str="one R9<0.9, one R9>0.9";}
  else if (r9bin=="highR9") {r9_str="both R9>0.9";}
  else {
    cout << "1st argument must be lowR9, midR9 or highR9" << endl;
    return;
  }

  TString passcut_str="";
  if (passcut) passcut_str="_passcut";

  TFile *file = TFile::Open("histograms_CMS-HGG_zeevalidation.root");
  file->cd();

  txt = new TLatex();
  txt->SetNDC();
  txt->SetTextSize(0.08);

  TH1* hist_Data[4];
  TH1* hist_MC[4];
  TH1* hist_MC_up[4];
  TH1* hist_MC_down[4];
  TH1* hist_syst[4];

  TString eta_str[4] = {"Inclusive","EBEB","EBEE","EEEE"};
  
  float sf_presel = bdtout_cat0_Data->Integral()/bdtout_cat0_DYJetsToLL->Integral();

  for (int i=0; i<4; i++) {
    TString iStr;
    iStr+=i;
    hist_Data[i] = (TH1*)(file->Get("bdtout_"+r9bin+"_cat"+iStr+"_Data"))->Clone();
    hist_MC[i] = (TH1*)(file->Get("bdtout_"+r9bin+"_cat"+iStr+"_DYJetsToLL"))->Clone();
    hist_MC_up[i] = (TH1*)(file->Get("bdtout_"+r9bin+"_up_cat"+iStr+"_DYJetsToLL"))->Clone();
    hist_MC_down[i] = (TH1*)(file->Get("bdtout_"+r9bin+"_down_cat"+iStr+"_DYJetsToLL"))->Clone();

    if (passcut) {
      hist_Data[i]->Rebin(2);
      hist_MC[i]->Rebin(2);
      hist_MC_up[i]->Rebin(2);
      hist_MC_down[i]->Rebin(2);
    } else {
      hist_Data[i]->Rebin(4);
      hist_MC[i]->Rebin(4);
      hist_MC_up[i]->Rebin(4);
      hist_MC_down[i]->Rebin(4);
    }

    hist_MC_up[i]->SetLineColor(2);
    hist_MC_down[i]->SetLineColor(2);

    hist_Data[i]->GetYaxis()->SetTitle("");
    hist_Data[i]->GetXaxis()->SetTitle("diphoMVA output ("+r9_str+", "+eta_str[i]+")");
    hist_Data[i]->GetXaxis()->SetTitleSize(0.05);
    hist_MC[i]->SetFillColor(38);
    hist_Data[i]->SetMarkerStyle(20);
    hist_Data[i]->SetMarkerSize(.5);

    hist_syst[i] = (TH1*)hist_MC_up[i]->Clone();
    hist_syst[i]->Add(hist_MC_down[i]);
    hist_syst[i]->Scale(0.5);
    for (int j=1; j<hist_syst[i]->GetNbinsX()+1; j++) {
      float up = hist_MC_up[i]->GetBinContent(j);
      float down = hist_MC_down[i]->GetBinContent(j);
      hist_syst[i]->SetBinError(j,fabs(up-down)/2.);
    }
  }

  TLegend *leg;
  leg = new TLegend(.6,.65,.87,.87);
  leg->SetBorderSize(0);
  leg->SetFillColor(10);
  leg->SetTextSize(.035);
  leg->AddEntry(hist_Data[0],"Data (19.6fb^{-1})");
  leg->AddEntry(hist_MC[0],"DYJetsToLL MC","F");
  leg->AddEntry(hist_syst[0],"MC with idmva�01","F");

  TLegend *leg2;
  leg2 = new TLegend(.2,.65,.52,.87);
  leg2->SetBorderSize(0);
  leg2->SetFillColor(10);
  leg2->SetTextSize(.035);
  leg2->AddEntry(hist_Data[0],"Data (19.6fb^{-1})");
  leg2->AddEntry(hist_MC[0],"DYJetsToLL MC","F");
  leg2->AddEntry(hist_syst[0],"MC with idmva�01","F");

  TLine *line;
  if (passcut) {
    line = new TLine(-0.05,1.,1.,1.);
  } else {
    line = new TLine(-1.,1.,1.,1.);
  }
  line->SetLineColor(4);
  line->SetLineWidth(2);

  TCanvas *c = new TCanvas("c","",2200,800);
  c->Divide(4,2);

  c->cd(1);
  plotDataMC(hist_Data[0],hist_MC[0],hist_MC_up[0],hist_MC_down[0], hist_syst[0],passcut,preselNorm,sf_presel);
  gPad->RedrawAxis();
  if (r9bin=="highR9" || !passcut) leg2->Draw();

  c->cd(2);
  plotDataMC(hist_Data[1],hist_MC[1],hist_MC_up[1],hist_MC_down[1], hist_syst[1],passcut,preselNorm,sf_presel);
  gPad->RedrawAxis();
  if (r9bin=="highR9" || !passcut) leg2->Draw();

  c->cd(3);
  plotDataMC(hist_Data[2],hist_MC[2],hist_MC_up[2],hist_MC_down[2], hist_syst[2],passcut,preselNorm,sf_presel);
  gPad->RedrawAxis();
  leg->Draw();

  c->cd(4);
  plotDataMC(hist_Data[3],hist_MC[3],hist_MC_up[3],hist_MC_down[3], hist_syst[3],passcut,preselNorm,sf_presel);
  gPad->RedrawAxis();
  leg->Draw();

  c->cd(5);
  gPad->SetGrid();
  plotRatio(hist_Data[0],hist_MC[0],hist_MC_up[0],hist_MC_down[0],passcut);
  line->Draw();

  c->cd(6);
  gPad->SetGrid();
  plotRatio(hist_Data[1],hist_MC[1],hist_MC_up[1],hist_MC_down[1],passcut);
  line->Draw();

  c->cd(7);
  gPad->SetGrid();
  plotRatio(hist_Data[2],hist_MC[2],hist_MC_up[2],hist_MC_down[2],passcut);
  line->Draw();

  c->cd(8);
  gPad->SetGrid();
  plotRatio(hist_Data[3],hist_MC[3],hist_MC_up[3],hist_MC_down[3],passcut);
  line->Draw();

  if (preselNorm) {
    c->SaveAs("bdtout_"+r9bin+passcut_str+"_preselNorm.png");
  } else {
    c->SaveAs("bdtout_"+r9bin+passcut_str+"_equalArea.png");
  }

}
Exemplo n.º 9
0
void makePlots_vdm_ls(double skip = 10.*11246.)
{
  gROOT->ProcessLine(" .L style.cc+");
#ifdef __CINT__
  style();
#endif

  TFile* file = TFile::Open("histos_vdmpp.root");
  TH1D* h_rate = (TH1D*)file->Get((string("pp/h_rate_ls")).c_str());
  h_rate->Scale(1./h_rate->GetBinWidth(1));
  h_rate->SetTitle(";orbitNb;dN/dT_{Orbit}");
  h_rate->GetXaxis()->SetNdivisions(505);
  h_rate->GetYaxis()->SetTitleOffset(h_rate->GetYaxis()->GetTitleOffset()*0.7);

  canFind = new TCanvas;
  canFind->Divide(1,2);

  vector<string> type;
  type.push_back("X");
  type.push_back("Y");

  vector<double> sectionXBegin;
  vector<double> sectionXEnd;
  vector<double> sectionXTruth;
  vector<double> sectionXMean;
  vector<double> sectionXMeanE;
  vector<TGraphErrors*> sectionXChi;

//   sectionXTruth.push_back(100); //0
//   sectionXTruth.push_back(50);  //1
//   sectionXTruth.push_back(0);   //2
//   sectionXTruth.push_back(-50); //3
//   sectionXTruth.push_back(-100);//4
//   sectionXTruth.push_back(-50); //5
//   sectionXTruth.push_back(0);   //6
//   sectionXTruth.push_back(50);  //7
//   sectionXTruth.push_back(100); //8
//   sectionXTruth.push_back(0);   //9

  //sectionXTruth.push_back(-70); //0
  sectionXTruth.push_back(-370);  //1
  sectionXTruth.push_back(-220);   //2
  sectionXTruth.push_back(-70); //3
  sectionXTruth.push_back(80);//4
  sectionXTruth.push_back(230); //5
  sectionXTruth.push_back(80);   //6
  sectionXTruth.push_back(-70);  //7
  sectionXTruth.push_back(-220); //8
  sectionXTruth.push_back(-370);   //9
  canFind->cd(1);
  FindSections(h_rate,sectionXBegin, sectionXEnd, BEGINX,ENDX,3.*11246.,skip);
  //FindSections(h_rate,sectionXBegin, sectionXEnd, 1.932e8,2.025e8,3.*11246.,skip);
#ifdef __CINT__
  CMSText(1,1,1,string("#DeltaX length scale"),"","pp, #sqrt{s}=2.76 TeV");
#endif
  if(sectionXTruth.size() != sectionXBegin.size())
    {
      cerr << "Sections error: not same size. Truth/Found: " << sectionXTruth.size() << " " <<  sectionXBegin.size() << endl;
      //exit(-1);
    }

  vector<double> sectionYBegin;
  vector<double> sectionYEnd;
  vector<double> sectionYTruth;
  vector<double> sectionYMean;
  vector<double> sectionYMeanE;
  vector<TGraphErrors*> sectionYChi;

//   sectionYTruth.push_back(100);
//   sectionYTruth.push_back(50); 
//   sectionYTruth.push_back(0);  
//   sectionYTruth.push_back(-50);
//   sectionYTruth.push_back(-100);
//   sectionYTruth.push_back(-50);
//   sectionYTruth.push_back(0);  
//   sectionYTruth.push_back(50); 
//   sectionYTruth.push_back(100);
//   sectionYTruth.push_back(0);


  //sectionYTruth.push_back(70); //0
  sectionYTruth.push_back(-370);  //1
  sectionYTruth.push_back(-220);   //2
  sectionYTruth.push_back(-70); //3
  sectionYTruth.push_back(80);//4
  sectionYTruth.push_back(230); //5
  sectionYTruth.push_back(80);   //6
  sectionYTruth.push_back(-70);  //7
  sectionYTruth.push_back(-220); //8
  sectionYTruth.push_back(-370);   //9
  canFind->cd(2);
  //FindSections(h_rate,sectionYBegin, sectionYEnd, 2.038e8,2.12e8,3.*11246.,skip);
  FindSections(h_rate,sectionYBegin, sectionYEnd, BEGINY,ENDY,3.*11246.,skip);
#ifdef __CINT__
  CMSText(1,1,1,string("#DeltaY length scale"),"","pp, #sqrt{s}=2.76 TeV");
#endif
  if(sectionYTruth.size() != sectionYBegin.size())
    {
      cerr << "Sections error: not same size. Truth/Found: " << sectionYTruth.size() << " " <<  sectionYBegin.size() << endl;
      //exit(-1);
    }
  


  TCanvas* can1 = new TCanvas;
  can1->Divide(1,2);

  //GENERAL LOOP OVER SECTIONS
  for(int n=0; n<int(type.size()); n++)
    {
      can1->cd(type[n]=="X"?1:2);
      
      vector<double>& sectionBegin      = type[n]=="X"?sectionXBegin:sectionYBegin;
      vector<double>& sectionEnd        = type[n]=="X"?sectionXEnd:sectionYEnd;
      vector<double>& sectionTruth      = type[n]=="X"?sectionXTruth:sectionYTruth;
      vector<double>& sectionMean       = type[n]=="X"?sectionXMean:sectionYMean;
      vector<double>& sectionMeanE      = type[n]=="X"?sectionXMeanE:sectionYMeanE;
      vector<TGraphErrors*>& sectionChi = type[n]=="X"?sectionXChi:sectionYChi;
        
      const int nSec = int(sectionBegin.size());

      sectionMean.resize(nSec);
      sectionMeanE.resize(nSec);

      TH2D* h_length_scale = (TH2D*)file->Get((string("pp/h_length_scale_") + type[n]).c_str());
      //      for(int i= 0; i<h_length_scale->GetNbinsX()+1;i++) cout << h_length_scale->Print
      TGraphErrors* h_truth_fit_up = new TGraphErrors(0);
      TGraphErrors* h_truth_fit_down = new TGraphErrors(0);
      TGraphErrors* h_truth_fit_crosscheck_up = new TGraphErrors(0);
      TGraphErrors* h_truth_fit_crosscheck_down = new TGraphErrors(0);
      ostringstream profiletitle; profiletitle << "truth_fit_" << type[n];
      ostringstream crosschecktitle; crosschecktitle << "truth_fit_crosscheck_" << type[n];
      h_truth_fit_down->SetName(profiletitle.str().c_str());
      h_truth_fit_crosscheck_down->SetName(crosschecktitle.str().c_str());
      profiletitle << "_down";
      crosschecktitle << "_down";
      h_truth_fit_up->SetName(profiletitle.str().c_str());
      h_truth_fit_crosscheck_up->SetName(crosschecktitle.str().c_str());

      vector<TF1*> sectionFunc; sectionFunc.resize(nSec);
      vector<TFitResultPtr> sectionFuncPtr; sectionFuncPtr.resize(nSec);

      ostringstream histotitle; histotitle << ";orbit number; vertex " << type[n] << " position [cm]";
      h_length_scale->SetTitle(histotitle.str().c_str());
      h_length_scale->SetMarkerSize(0.5);
      h_length_scale->GetXaxis()->SetNdivisions(505);
      h_length_scale->GetYaxis()->SetTitleOffset(h_length_scale->GetYaxis()->GetTitleOffset()*0.7);
      if(type[n]=="X")
        h_length_scale->GetXaxis()->SetRangeUser(BEGINX,ENDX);
      else
        h_length_scale->GetXaxis()->SetRangeUser(BEGINY,ENDY);
//       if(type[n]=="X")
//         h_length_scale->GetXaxis()->SetRangeUser(193000000,202000000);
//       else
//         h_length_scale->GetXaxis()->SetRangeUser(203000000,211000000);
//      h_length_scale->GetYaxis()->SetRangeUser(0.00,0.15);
      h_length_scale->Draw("COLZ");

#ifdef __CINT__
      CMSText(1,1,1,string("#Delta")+type[n]+string(" length scale"),"","pp, #sqrt{s}=2.76 TeV");
#endif
      //FIT EACH SECTION
      TCanvas* canFit = new TCanvas;
      canFit->Divide(TMath::Nint(nSec/2.),2);
      for (int i=0; i<nSec; i++)
        {
          int binStartNotSkipped,binStart, binEnd, helper;
          double x1,x2,xend;

          h_length_scale->GetBinXYZ(h_length_scale->FindBin(sectionBegin[i]),binStartNotSkipped,helper,helper); binStartNotSkipped++;
          h_length_scale->GetBinXYZ(h_length_scale->FindBin(sectionBegin[i]+skip),binStart,helper,helper); binStart++;
          h_length_scale->GetBinXYZ(h_length_scale->FindBin(sectionEnd[i]),binEnd,helper,helper); binEnd--;
          x1=h_length_scale->GetBinLowEdge(binStartNotSkipped);
          x2=h_length_scale->GetBinLowEdge(binStart);
          xend=h_length_scale->GetBinLowEdge(binEnd+1);

          if(binStart >= binEnd)
            {
              cerr << "MAJOR WARNING Chosen skipping value too large for section " << i << "(" << binStart << "," << binEnd << ")" << endl;
            }

          ostringstream funcTitle;
          funcTitle << "section" << type[n] << "Func_" << i;
          sectionFunc[i] = new TF1(funcTitle.str().c_str(),"gaus");
          sectionFunc[i]->SetLineWidth(2);
          sectionFunc[i]->SetLineColor(kRed);
          sectionFunc[i]->SetLineStyle(1);

          funcTitle << "_Prof";
          TH1D* helperProfile = h_length_scale->ProjectionY(funcTitle.str().c_str(),binStart,binEnd);
          canFit->cd(i+1);
          helperProfile->Draw();
          sectionFuncPtr[i] = helperProfile->Fit(sectionFunc[i],"QS");


          if(Int_t(sectionFuncPtr[i]) !=0)
            {
              cerr << " !!! MAJOR WARNING." << endl
                   << "in section " << i << " fit did not converge: " << gMinuit->fCstatu.Data() << endl;
            }

          sectionFunc[i]->SetLineWidth(2);
          sectionFunc[i]->Draw("SAME");

          sectionMean[i] = helperProfile->GetMean();
          sectionMeanE[i] = helperProfile->GetMeanError();

          if(x1<x2)
            {
              //can1->cd();
              TBox* box1 = new TBox(x1,0.1,x2,0.105);
              box1->SetFillColor(kRed);
              box1->SetFillStyle(3001);
              box1->DrawClone();
              TBox* box2 = new TBox(x2,0.1,xend,0.105);
              box2->SetFillColor(kGreen);
              box2->SetFillStyle(3001);
              box2->DrawClone();
            }
        }
      
//       //DETERMINE THE MEAN WHERE TRUTH IS AT NOMINAL POSITION -> now done below
//       double xw = 0;
//       double w = 0;
//       for(int i=0; i<nSec; i++)
//         {
//           if(sectionTruth[i]==70 || sectionTruth[i]==-70)
//             {
//               double weight = 1./pow(sectionFuncPtr[i]->ParError(1),2);
//               xw += sectionFuncPtr[i]->Parameter(1) * weight;
//               w += weight;
//               //cout << sectionFuncPtr[i]->Parameter(1) << " weight: " << weight << endl;
//             }
//         }
//       double sigma = sqrt(1./w);
//       double y0 = xw/w;
//       cout << "y0 = " << y0 << "+-" << sigma << endl;

      //CHECK CHI2 OPTIMISATION
      TCanvas* can3 = new TCanvas;
      sectionChi.resize(nSec);
      string drawoption("AL");
      TLegend* legchi = new TLegend(0.55,0.5,0.85,0.9);
      for(int i=0; i<nSec; i++)
        {
          if(i<1 || i >8)
            continue;
          
          const int nSkipBins=10;
          ostringstream graphTitle;
          graphTitle << "section_" << type[n] << "_chi2_Graph_" << i;
          sectionChi[i] = (new TGraphErrors(0));
          sectionChi[i]->SetName(graphTitle.str().c_str());
          for (int skipBin=0; skipBin<nSkipBins; skipBin++)
            {
              int binStart, binEnd, helper;
              h_length_scale->GetBinXYZ(h_length_scale->FindBin(sectionBegin[i]),binStart,helper,helper); binStart++;
              h_length_scale->GetBinXYZ(h_length_scale->FindBin(sectionEnd[i]),binEnd,helper,helper); binEnd--;

              binStart += skipBin;

              if(binStart >= binEnd)
                continue;

              double x = double(h_length_scale->GetBinLowEdge(binStart) - h_length_scale->GetBinLowEdge(binStart-skipBin)) / 11246.;
              //cout << "skip bin: " << skipBin << "(" << binStart << ")" << endl;

              ostringstream funcTitle;
              funcTitle << "section" << type[n] << "Func_" << i << "_" << skipBin;

              TF1* helperFunc = new TF1(funcTitle.str().c_str(),"gaus");
              funcTitle << "_Prof";
              TH1D* helperProfile = h_length_scale->ProjectionY(funcTitle.str().c_str(),binStart,binEnd);
              TFitResultPtr helperPtr = helperProfile->Fit(helperFunc,"QSN");

              if(Int_t(helperPtr) !=0)
                {
                  cout << "fit failed" << endl;
                  cout << "skip bin: " << skipBin << "(" << binStart << ")" << endl;
                  continue;
                }
              
              double chi2 = helperPtr->Chi2()/double(helperPtr->Ndf());
              sectionChi[i]->SetPoint(sectionChi[i]->GetN(),x,chi2);
              //cout << skipBin << " " << x << " " << chi2 << endl;
            }
          //sectionChi[i]->Print("ALL");
          sectionChi[i]->SetTitle(";skip interval [s]; #chi^{2}/NDF");
          sectionChi[i]->GetYaxis()->SetRangeUser(0,6);
          sectionChi[i]->GetXaxis()->SetLimits(0,30);
          sectionChi[i]->SetLineWidth(2);
          sectionChi[i]->SetLineColor(i);
          sectionChi[i]->Draw(drawoption.c_str());
          drawoption = string("L");
          
          ostringstream legtext ; legtext << "Section " << i << " (" << sectionTruth[i] << " µm)";
          legchi->AddEntry(sectionChi[i],legtext.str().c_str(),"l");

        }
#ifdef __CINT__
      CMSText(1,1,1,string("#Delta")+type[n]+string(" length scale"),"","pp, #sqrt{s}=2.76 TeV");
      SetLegAtt(legchi);
#endif
      legchi->Draw("SAME");
      TLine* line = new TLine(skip/11246.,0,skip/11246.,2.5);
      line->SetLineWidth(2);
      line->SetLineStyle(2);
      line->Draw("SAME");
      can3->SaveAs((string("plots/vdm_length_scale_")+type[n]+string("_3_pp.pdf")).c_str());
          
      //Determine reference value y0 to subtract from plotting
      TGraph helperGraph(nSec);
      double y0=0;
      for (int i=0; i<nSec; i++)
        {
          double y = sectionFuncPtr[i]->Parameter(1);
          helperGraph.SetPoint(i,sectionTruth[i]*(type[n]=="X"?-1:1), y);
          y0 = helperGraph.Eval(0);
        }
      cout << "y0 = " << y0 << endl;

      //TRUTH VS TRACKER PLOT
      for (int i=0; i<nSec; i++)
        {
          ostringstream text;
          double size = 0.01;
          double y = sectionFuncPtr[i]->Parameter(1);
          double y_cc = sectionMean[i]; //just used for cross checking (cc) the gaussian fit
          double yum = (y-y0)*1e4; //cm -> µm => 1e-2 -> 1e-6 => 1e4
          double yum_cc = (y_cc-y0)*1e4; //cm -> µm => 1e-2 -> 1e-6 => 1e4
          double yumerror = (sectionFuncPtr[i]->ParError(1))*10000.;
          double yumerror_cc = sectionMeanE[i] * 10000;
          text << "#Delta" << type[n] << "_{Fit}=" << fixed << setprecision(1) << yum;
          TPaveText* txt = new TPaveText(sectionBegin[i],y+1.5*size,sectionEnd[i],y+2.5*size,"b t l");
          txt->SetTextFont(62);
          txt->SetFillStyle(0);
          txt->SetTextColor(kRed);
          txt->SetTextSize(0.04);
          txt->SetBorderSize(0);
          txt->AddText(text.str().c_str());
          txt->Draw("SAME");
          if(i>=1 && i<=4) //WARNING also setpoint needs to be changed
            {
              cout << "up " << i << " " << sectionTruth[i]*(type[n]=="X"?-1:1) << " " << yum << "+-" << yumerror << endl;
              h_truth_fit_up->SetPoint(i-1,sectionTruth[i]*(type[n]=="X"?-1:1), yum); // Coordinate Sys different z? X has to be inverted.
              h_truth_fit_up->SetPointError(i-1,0, yumerror);
              h_truth_fit_crosscheck_up->SetPoint(i-1,sectionTruth[i]*(type[n]=="X"?-1:1), yum_cc); // Coordinate Sys different z? X has to be inverted.
              h_truth_fit_crosscheck_up->SetPointError(i-1,0, yumerror_cc);
            }
          if(i>=5 && i<=8) //anti hysteresis //WARNING also setpoint needs to be changed
            {
              cout << "down " << i << " " << sectionTruth[i]*(type[n]=="X"?-1:1) << " " << yum << "+-" << yumerror << endl;
              h_truth_fit_down->SetPoint(i-5,sectionTruth[i]*(type[n]=="X"?-1:1), yum); // Coordinate Sys different z? X has to be inverted.
              h_truth_fit_down->SetPointError(i-5,0, yumerror);
              h_truth_fit_crosscheck_down->SetPoint(i-5,sectionTruth[i]*(type[n]=="X"?-1:1), yum_cc); // Coordinate Sys different z? X has to be inverted.
              h_truth_fit_crosscheck_down->SetPointError(i-5,0, yumerror_cc);
            }
        }
      canFit->SaveAs((string("plots/vdm_length_scale_")+type[n]+string("_Fits_pp.pdf")).c_str());
      
      TCanvas* can2 = new TCanvas;
      ostringstream titleup; titleup << ";#Delta" << type[n] << " (LHC) [#mum]; #Delta" << type[n] << " (CMS) [#mum]";
      h_truth_fit_up->SetTitle(titleup.str().c_str());
      h_truth_fit_up->SetMarkerSize(1.3);
      h_truth_fit_up->SetMarkerColor(kRed);
      h_truth_fit_up->SetLineColor(kRed);
      h_truth_fit_up->SetLineWidth(2);
      h_truth_fit_up->GetXaxis()->SetLimits(-400,400);
      h_truth_fit_up->GetYaxis()->SetRangeUser(-400,400);
      h_truth_fit_up->Draw("AP");
      TFitResultPtr fit_up = h_truth_fit_up->Fit("pol1","QS");
      TFitResultPtr fit_crosscheck_up = h_truth_fit_crosscheck_up->Fit("pol1","QNS");
      h_truth_fit_up->GetFunction("pol1")->SetLineWidth(2);
      h_truth_fit_up->GetFunction("pol1")->SetLineColor(kRed);
      h_truth_fit_down->SetMarkerColor(kBlue);
      h_truth_fit_down->SetMarkerStyle(25);
      h_truth_fit_down->SetMarkerSize(1.3);
      h_truth_fit_down->SetLineColor(kBlue);
      h_truth_fit_down->SetLineWidth(2);
      h_truth_fit_down->Draw("P");
      TFitResultPtr fit_down = h_truth_fit_down->Fit("pol1","QS");
      TFitResultPtr fit_crosscheck_down = h_truth_fit_crosscheck_down->Fit("pol1","QNS");
      h_truth_fit_down->GetFunction("pol1")->SetLineWidth(2);
      h_truth_fit_down->GetFunction("pol1")->SetLineColor(kBlue);
      TLegend* leg = new TLegend(0.22,0.72,0.6,0.82);
      ostringstream legup,legdown;
      legup   << "#Delta" << type[n] << " low-to-high (Slope:" << fixed << setprecision(3) << fit_up  ->Parameter(1) << " )";
      legdown << "#Delta" << type[n] << " high-to-low (Slope:" << fixed << setprecision(3) << fit_down->Parameter(1) << " )";
      leg->AddEntry(h_truth_fit_up  ,legup  .str().c_str(),"lp");
      leg->AddEntry(h_truth_fit_down,legdown.str().c_str(),"lp");
#ifdef __CINT__
      SetLegAtt(leg);
      CMSText(1,1,1,"","","pp, #sqrt{s}=2.76 TeV");
#endif
      leg->Draw("SAME");
      can2->SaveAs((string("plots/vdm_length_scale_")+type[n]+string("_2_pp.pdf")).c_str());

      double average = (fit_up->Parameter(1) + fit_down->Parameter(1)) / 2.;
      double average_cc = (fit_crosscheck_up->Parameter(1) + fit_crosscheck_down->Parameter(1)) / 2.;
      double stat = sqrt( pow(fit_up->Parameter(1)/2.,2) * pow(fit_down->ParError(1),2) + pow(fit_down->Parameter(1)/2.,2) * pow(fit_up->ParError(1),2));
      double sysupdown = fabs(fit_up->Parameter(1) - fit_down->Parameter(1))/ 2.;
      double sysfit = fabs(average_cc - average) / 2.;
      double sysskip = (type[n]=="X"?0.001:0.003);
      double sys = sqrt ( sysfit*sysfit + sysupdown*sysupdown + sysskip*sysskip);

      cout << endl << endl << endl;
      cout << fixed << setprecision(3)
           << "        Δ" << type[n] << endl
           << "--Correction Factor: " << average << endl
           << "up: " << fit_up->Parameter(1) << endl
           << "down: " << fit_down->Parameter(1) << endl
           << "--Stat: " << stat << endl
           << "--Sys Combined: " << sys << endl
           << "Sys. Up Down: " << sysupdown << endl
           << "Sys. Fitting: " << sysfit << endl
           << "Sys. Skipping: " << sysskip << endl;
      cout << endl << endl << endl;
    }

  can1->SaveAs((string("plots/vdm_length_scale")+string("_1_pp.pdf")).c_str());
  canFind->SaveAs((string("plots/vdm_length_scale")+string("_sections_pp.pdf")).c_str());
}
Exemplo n.º 10
0
int FwBwRatio_rap() {

  string str_sig[] = {"Inclusive J/#psi", "Prompt J/#psi", "Non-prompt J/#psi"};
  string str_sig_filename[] = {"Inclusive_nRap3", "Prompt_nRap3", "Non-prompt_nRap3"};
  string str_rap[] = {
  "[-2.4, -1.757]", "[-1.757, -1.113]", "[-1.113, -0.47]", "[-0.47, 0.173]", "[0.173, 0.817]", "[0.817. 1.46]"
  };
//  string str_sig_filename[] = {"Inclusive_nRap5", "Prompt_nRap5", "Non-prompt_nRap5"};
//  string str_rap[] = {
//  "[-2.4, -2.014]", "[-2.014, -1.628]", "[-1.628, -1.242]", "[-1.242, -0.856]", "[-0.856, -0.47]", "[-0.47, -0.084]", "[-0.084, 0.302]", "[0.302. 0.688]", "[0.688, 1.074]", "[1.074, 1.46]", "[1.46, 1.93]", "[1.93, 2.4]"
//  };
  string str_pt[] = {"6.5-30"};
  string str_cent[] = {
    "50-100","30-50","10-30","0-10"
  };

  const int nBW = 3;  // Count number of backward bins
//  const int nBW = 5;  // Count number of backward bins
  const int nRap = sizeof(str_rap)/sizeof(string);
  const int nPt = sizeof(str_pt)/sizeof(string);
  const int nCent = sizeof(str_cent)/sizeof(string);
  const int nSig = sizeof(str_sig)/sizeof(string);

  // Number of binary collision is defined with Z raw yields for the moment
  double Ncoll[nCent] = {1.000, 0.742, 0.457, 0.552};  // 100, 50, 30, 10, 0 for 18.38/nb
  double NcollErr[nCent] = {0.032, 0.022, 0.014, 0.020};  // 100, 50, 30, 10, 0 for 18.38/nb

  // raw yields
  double forward[nSig][nRap][nCent];
  double backward[nSig][nRap][nCent];
  double forwardErr[nSig][nRap][nCent];
  double backwardErr[nSig][nRap][nCent];

  // R_cp of raw yields
  double forwardRcp[nSig][nRap][nCent];
  double backwardRcp[nSig][nRap][nCent];
  double forwardRcpErr[nSig][nRap][nCent];
  double backwardRcpErr[nSig][nRap][nCent];
  
  // Ratio of R_cp (forward/backward)
  double finalRatio[nSig][nRap][nCent];
  double finalRatioErr[nSig][nRap][nCent];

  // Get numbers from txt file
  ifstream finput;
  finput.open(Form("./fit_short_nRap3"));
//  finput.open(Form("./fit_short_nRap5_noSingleMuEtaCuts"));
  if (!finput.good()) {
    cout << "Cannot open input file: " << Form("./fit_short") << endl;
    return -1;
  }
  for (int rap=0; rap<nBW; rap++) {
    for (int cent=0; cent<nCent; cent++) {
      for (int sig=0; sig<nSig; sig++) {
        finput >> backward[sig][rap][cent] >> backwardErr[sig][rap][cent];
      }
    } // cent ends
  } // rap ends
  for (int rap=nBW; rap<nRap; rap++) {
    for (int cent=0; cent<nCent; cent++) {
      for (int sig=0; sig<nSig; sig++) {
        finput >> forward[sig][rap-nBW][cent] >> forwardErr[sig][rap-nBW][cent];
      }
    } // cent ends
  } // rap ends

  // Get Rcp and ratio of (forward/backward)
  for (int sig=0; sig<nSig; sig++) {
    for (int rap=0; rap<nRap; rap++) {
      for (int cent=0; cent<nCent; cent++) {

        forwardRcp[sig][rap][cent] = Ncoll[cent] * forward[sig][rap][cent] / forward[sig][rap][0];
        backwardRcp[sig][rap][cent] = Ncoll[cent] * backward[sig][rap][cent] / backward[sig][rap][0];

        double f_ncoll = NcollErr[cent]/Ncoll[cent];
        
        double f_central = forwardErr[sig][rap][cent] / forward[sig][rap][cent];
        double f_peri = forwardErr[sig][rap][0] / forward[sig][rap][0];
        forwardRcpErr[sig][rap][cent] = forwardRcp[sig][rap][cent] * TMath::Sqrt(TMath::Power(f_ncoll,2)+TMath::Power(f_central,2)+TMath::Power(f_peri,2));
        double b_central = backwardErr[sig][rap][cent] / backward[sig][rap][cent];
        double b_peri = backwardErr[sig][rap][0] / backward[sig][rap][0];
        backwardRcpErr[sig][rap][cent] = backwardRcp[sig][rap][cent] * TMath::Sqrt(TMath::Power(f_ncoll,2)+TMath::Power(b_central,2)+TMath::Power(b_peri,2));

        // Get Rcp ratio
        finalRatio[sig][rap][cent] = forwardRcp[sig][rap][cent]/backwardRcp[sig][rap][cent];
        
        double r_forw = forwardRcpErr[sig][rap][cent]/forwardRcp[sig][rap][cent];
        double r_back = backwardRcpErr[sig][rap][cent]/backwardRcp[sig][rap][cent];
        finalRatioErr[sig][rap][cent] = finalRatio[sig][rap][cent]*TMath::Sqrt(TMath::Power(r_forw,2)+TMath::Power(r_back,2));
      }
    }
  }

  double xaxis[nRap-nBW][nCent] = {{0}};
  double xaxis2[nCent+1] = {0};
  double yaxis[nCent] = {0};
  double yaxis2[nCent+1] = {0};
  for (int i=0; i<nCent; i++) {
    for (int j=0; j<nRap-nBW; j++) {
      xaxis[j][i] = i+0.35+(j*0.05);
    }
    yaxis[i] = 1;
  }
  for (int i=0; i<nCent+1; i++) {
    xaxis2[i] = i;
    yaxis2[i] = 1;
  }

  gROOT->Macro("~/JpsiStyle.C");
  TCanvas canv;  canv.Draw();
  TH1D *gr = new TH1D("ghost",";;",nCent,0,nCent);
  gr->GetYaxis()->SetRangeUser(0.5,3);
  gr->GetXaxis()->LabelsOption("h");
  gr->GetXaxis()->SetLabelSize(0.055);
  
  for (int i=0; i<nCent; i++) {
    gr->GetXaxis()->SetBinLabel(i+1,Form("%s%%",str_cent[i].c_str()));
  }
  gr->GetYaxis()->SetTitle("Forward R_{cp}");

  TLegend *leg;
  TLine *gline = new TLine();
  gline->SetLineWidth(1.2);
  gline->SetLineColor(kGray+1);

  TGraphErrors *gr_forwardRcp[nSig][nRap-nBW];
  for (int sig=0; sig<nSig; sig++) {
//    leg = new TLegend(0.15,0.58,0.93,0.93);
    leg = new TLegend(0.15,0.7,0.93,0.93);
    SetLegendStyle(leg);
    leg->SetHeader(str_sig[sig].c_str());
    gr->Draw("l");
    gline->DrawLine(0,1,nCent,1);

    for (int rap=0; rap<nRap-nBW; rap++) {
      gr_forwardRcp[sig][rap] = new TGraphErrors(nCent,xaxis[rap],forwardRcp[sig][rap],0,forwardRcpErr[sig][rap]);
      
      SetGraphStyle(gr_forwardRcp[sig][rap],sig,rap);
      
      char name[512];
      sprintf(name,"y: %s",str_rap[rap+nBW].c_str());
      leg->AddEntry(gr_forwardRcp[sig][rap],name,"lp");

      gr_forwardRcp[sig][rap]->Draw("[lp]");
    }

    leg->Draw();
    canv.SaveAs(Form("Ratio_Rcp_rap_fw_%s.pdf",str_sig_filename[sig].c_str()));
    delete leg;
    canv.Clear();
  }

  gr->GetYaxis()->SetTitle("Backward R_{cp}");
  TGraphErrors *gr_backwardRcp[nSig][nBW];
  for (int sig=0; sig<nSig; sig++) {
//    leg = new TLegend(0.15,0.65,0.93,0.93);
    leg = new TLegend(0.15,0.7,0.93,0.93);
    SetLegendStyle(leg);
    leg->SetHeader(str_sig[sig].c_str());
    gr->Draw("l");
    gline->DrawLine(0,1,nCent,1);

    for (int rap=0; rap<nBW; rap++) {
      gr_backwardRcp[sig][rap] = new TGraphErrors(nCent,xaxis[rap],backwardRcp[sig][rap],0,backwardRcpErr[sig][rap]);
      
      SetGraphStyle(gr_backwardRcp[sig][rap],sig,(nBW-1)-rap);
      
      char name[512];
      sprintf(name,"y: %s",str_rap[rap].c_str());
      leg->AddEntry(gr_backwardRcp[sig][rap],name,"lp");

      gr_backwardRcp[sig][rap]->Draw("[lp]");
    }
    leg->Draw();
    canv.SaveAs(Form("Ratio_Rcp_rap_bw_%s.pdf",str_sig_filename[sig].c_str()));
    canv.Clear();
    delete leg;
  }


/*  gr->GetYaxis()->SetTitle("Ratio of forward R_{cp}/backward R_{cp}");
  TGraphErrors *gr_finalRatio[nSig][nRap];
  for (int sig=0; sig<nSig; sig++) {
    leg = new TLegend(0.3,0.7,0.93,0.9);
    SetLegendStyle(leg);
    leg->SetHeader(str_sig[sig].c_str());
    gr->Draw("l");
    gline->DrawLine(0,1,nCent,1);
    for (int rap=0; rap<nRap; rap++) {
      gr_finalRatio[sig][rap]= new TGraphErrors(nCent,xaxis[rap],finalRatio[sig][rap],0,finalRatioErr[sig][rap]);
      
      SetGraphStyle(gr_finalRatio[sig][rap],sig,rap);
      
      char name[512];
      sprintf(name,"%s, y: %s",str_sig[sig].c_str(),str_rap[rap].c_str());
      leg->AddEntry(gr_finalRatio[sig][rap],name,"lp");

      gr_finalRatio[sig][rap]->Draw("[lp]");
    }
    leg->Draw();
    canv.SaveAs(Form("Ratio_Rcp_rap_fwbw_%s.pdf",str_sig_filename[sig].c_str()));
    canv.Clear();
    delete leg;
  }*/

  return 0;
}
Exemplo n.º 11
0
void raaExpOpen_pt(const char* inputDir = "../macro_raa/outRoot", // the place where the input root files, with the histograms are
                   bool bSavePlots      = true,
                   bool bDrawCh         = true,
                   double xMax          = 30 // x-axis range limit (ALICE D has x-range maximum value at 36, CMS has it at 30)
                  )
{
  // set the style
  gSystem->mkdir(Form("./figs/png"), kTRUE);
  gSystem->mkdir(Form("./figs/pdf"), kTRUE);
  setTDRStyle();
  
  // read CMS graphs
  TFile *pgRaaCms_pt   = new TFile(Form("%s/makeRaa_pt.root",inputDir));
  // ##################### HIGH PT ############################
  TGraphErrors *pgCms     = (TGraphErrors *)pgRaaCms_pt->Get("gNonPrJpsi");
  TGraphErrors *pgCmsP    = (TGraphErrors *)pgRaaCms_pt->Get("gNonPrJpsiP");
  TGraphErrors *pgCmsSyst = (TGraphErrors *)pgRaaCms_pt->Get("gNonPrJpsiSyst");
  pgCmsSyst->SetFillColorAlpha(kOrange-9,0.5);
  pgCms->SetName("gNonPrJpsi");

  TBox *lumi = (TBox*)pgRaaCms_pt->Get("lumi");
  lumi->SetFillColor(kOrange-9);
  lumi->SetFillStyle(1001);
  lumi->SetX1(xMax-0.75); lumi->SetX2(xMax);
  TBox *lumi_lowpt = (TBox*)lumi->Clone("lumi_lowpt");
  lumi_lowpt->SetFillColor(kViolet-9);
  lumi_lowpt->SetFillStyle(1001);
  lumi_lowpt->SetX1(xMax-1.5); lumi_lowpt->SetX2(xMax-0.75);

  // ##################### LOW PT ############################
  TGraphErrors *pgCms_lowpt     = (TGraphErrors *)pgRaaCms_pt->Get("gNonPrJpsi_pt365y1624");
  TGraphErrors *pgCmsP_lowpt    = (TGraphErrors *)pgRaaCms_pt->Get("gNonPrJpsiP_pt365y1624");
  TGraphErrors *pgCmsSyst_lowpt = (TGraphErrors *)pgRaaCms_pt->Get("gNonPrJpsiSyst_pt365y1624");
  pgCmsSyst_lowpt->SetFillColorAlpha(kViolet-9,0.5);
  pgCms_lowpt->SetName("gNonPrJpsi_pt365y1624");

  //-------------------------------------------------------------------- 
  // *********** CMS Charged particle RAA
  TGraphAsymmErrors *p8165_d5x1y1 = new TGraphAsymmErrors(p8165_d5x1y1_numpoints, p8165_d5x1y1_xval, p8165_d5x1y1_yval, p8165_d5x1y1_xerrminus, p8165_d5x1y1_xerrplus, p8165_d5x1y1_ystatminus, p8165_d5x1y1_ystatplus);
  TGraphAsymmErrors *p8165_d5x1y1_syst = new TGraphAsymmErrors(p8165_d5x1y1_numpoints, p8165_d5x1y1_xval, p8165_d5x1y1_yval, p8165_d5x1y1_xerrminus, p8165_d5x1y1_xerrplus, p8165_d5x1y1_yerrminus, p8165_d5x1y1_yerrplus);
  p8165_d5x1y1->SetName("cms_ch_raa");
  // X-axis errors will be discarded
  for (int i=0; i<p8165_d5x1y1_numpoints; i++) {
    p8165_d5x1y1->SetPointEXlow(i,0);
    p8165_d5x1y1->SetPointEXhigh(i,0);
    p8165_d5x1y1_syst->SetPointEXlow(i,0.5);
    p8165_d5x1y1_syst->SetPointEXhigh(i,0.5);
  }
   
  // *********** ALICE D RAA vs. pT
  TGraphAsymmErrors *p9059_d15x1y1 = new TGraphAsymmErrors(p9059_d15x1y1_numpoints, p9059_d15x1y1_xval, p9059_d15x1y1_yval, p9059_d15x1y1_xerrminus, p9059_d15x1y1_xerrplus, p9059_d15x1y1_yerrminus, p9059_d15x1y1_yerrplus);
  TGraphAsymmErrors *p9059_d15x1y1_syst = new TGraphAsymmErrors(p9059_d15x1y1_numpoints, p9059_d15x1y1_xval, p9059_d15x1y1_yval, p9059_d15x1y1_xerrminus, p9059_d15x1y1_xerrplus, p9059_d15x1y1_yerrminus, p9059_d15x1y1_yerrplus);
  p9059_d15x1y1->SetName("alice_d_raa");
  // X-axis errors will be discarded
  for (int i=0; i<p9059_d15x1y1_numpoints; i++) {
    p9059_d15x1y1->SetPointEXlow(i,0);
    p9059_d15x1y1->SetPointEXhigh(i,0);
    p9059_d15x1y1_syst->SetPointEXlow(i,0.5);
    p9059_d15x1y1_syst->SetPointEXhigh(i,0.5);
    if (xMax<=30 && (i+1)==p9059_d15x1y1_numpoints) {
      double x,y;
      p9059_d15x1y1->GetPoint(i,x,y);
      p9059_d15x1y1->SetPoint(i,x+5,y);
      p9059_d15x1y1_syst->GetPoint(i,x,y);
      p9059_d15x1y1_syst->SetPoint(i,x+5,y);
    }
  }

  // Style for graphs
  p9059_d15x1y1->SetMarkerStyle(kOpenSquare);
  p9059_d15x1y1->SetMarkerSize(1.3);
  p9059_d15x1y1->SetMarkerColor(kBlack);
  p9059_d15x1y1->SetLineColor(kBlack);
  p9059_d15x1y1_syst->SetFillColorAlpha(kGray+1,0.5);

  p8165_d5x1y1->SetMarkerStyle(20);
  p8165_d5x1y1->SetMarkerSize(1.3);
  p8165_d5x1y1->SetMarkerColor(kTeal+3);
  p8165_d5x1y1->SetLineColor(kTeal+4);
  p8165_d5x1y1_syst->SetFillColorAlpha(kTeal-1,0.5);



  //---------------------------------------------------------
  TLine *line = new TLine(0.,1,xMax,1);
  line->SetLineStyle(1);
  line->SetLineWidth(1);

  TCanvas *pc = new TCanvas("pc","pc");

  TF1 *f4 = new TF1("f4","1",0,xMax);
  f4->SetLineWidth(1);
  f4->GetXaxis()->SetTitle("p_{T} (GeV/c)");
  f4->GetYaxis()->SetTitle("R_{AA}");
  f4->GetXaxis()->SetRangeUser(0.0,xMax);
  f4->GetYaxis()->SetRangeUser(0.0,1.5);
  f4->GetXaxis()->CenterTitle(kTRUE);
 
  f4->Draw();
  lumi->Draw();
  lumi_lowpt->Draw();
  pc->Update();

  pgCmsSyst->Draw("2"); // for drawing x-axis

  p9059_d15x1y1_syst->Draw("2");
  if (bDrawCh) p8165_d5x1y1_syst->Draw("2");
  p9059_d15x1y1->Draw("pz");
  if (bDrawCh) p8165_d5x1y1->Draw("pz");

  pgCmsSyst->Draw("2");
  pgCmsP->Draw("P");
  pgCms->Draw("P");
  pgCmsSyst_lowpt->Draw("2");
  pgCmsP_lowpt->Draw("P");
  pgCms_lowpt->Draw("P");

  // additional info
  CMS_lumi(pc,12003000,0);

  TLegend *leg_cent = new TLegend(0.28,0.77,0.86,0.89,NULL,"brNDC"); // at top center
  leg_cent->SetMargin(0.12);
  leg_cent->SetBorderSize(0);
  leg_cent->SetTextFont(132);
  leg_cent->SetTextSize(0.03);
  leg_cent->SetLineColor(1);
  leg_cent->SetLineStyle(1);
  leg_cent->SetLineWidth(1);
  leg_cent->SetFillColor(19);
  leg_cent->SetFillStyle(0);

  TLegendEntry *entry_cent;
  entry_cent=leg_cent->AddEntry("raab","Open beauty: Nonprompt J/#psi","");
  entry_cent->SetTextFont(132);
  entry_cent->SetTextSize(ltxSetTextSize3);
  entry_cent=leg_cent->AddEntry("gNonPrJpsi_pt365y1624", "1.6 < |y| < 2.4","p");
  entry_cent->SetTextFont(42);
  entry_cent->SetTextSize(entrySize);
  entry_cent=leg_cent->AddEntry("gNonPrJpsi", "|y| < 2.4","p");
  entry_cent->SetTextFont(42);
  entry_cent->SetTextSize(entrySize);

  TLegend *leg_ch = new TLegend(0.28,0.685,0.86,0.765,NULL,"brNDC");
  leg_ch->SetMargin(0.12);
  leg_ch->SetBorderSize(0);
  leg_ch->SetTextFont(132);
  leg_ch->SetTextSize(0.03);
  leg_ch->SetLineColor(1);
  leg_ch->SetLineStyle(1);
  leg_ch->SetLineWidth(1);
  leg_ch->SetFillColor(19);
  leg_ch->SetFillStyle(0);

  if (bDrawCh) {
    TLegendEntry *entry_ch;
    entry_ch=leg_ch->AddEntry("cms_ch","Charged hadron","");
    entry_ch->SetTextSize(ltxSetTextSize3);
    entry_ch->SetTextFont(132);
    entry_ch=leg_ch->AddEntry("cms_ch_raa","|#eta| < 1, Cent. 0-5%","p");
    entry_ch->SetTextSize(entrySize);
    entry_ch->SetTextFont(42);
  }
  
  TLegend *leg_alice;
  if (bDrawCh) {
    leg_alice = new TLegend(0.28,0.60,0.86,0.68,NULL,"brNDC");
  } else {
    leg_alice = new TLegend(0.28,0.685,0.86,0.765,NULL,"brNDC");
  }
  leg_alice->SetMargin(0.12);
  leg_alice->SetBorderSize(0);
  leg_alice->SetTextFont(132);
  leg_alice->SetTextSize(0.03);
  leg_alice->SetLineColor(1);
  leg_alice->SetLineStyle(1);
  leg_alice->SetLineWidth(1);
  leg_alice->SetFillColor(kWhite);
  leg_alice->SetFillStyle(1000);

  TLegendEntry *entry_alice;
  entry_alice=leg_alice->AddEntry("alice_d","Open charm: Prompt D (ALICE)","");
  entry_alice->SetTextSize(ltxSetTextSize3);
  entry_alice->SetTextFont(132);
  entry_alice=leg_alice->AddEntry("alice_d_raa","|y| < 0.5, Cent. 0-10%","p");
  entry_alice->SetTextSize(entrySize);
  entry_alice->SetTextFont(42);

  TLatex *lat = new TLatex();
  lat->SetNDC();
  lat->SetTextFont(42);
  lat->SetTextSize(ltxSetTextSize2);
  if (bDrawCh) lat->DrawLatex(0.63,0.53,"Cent. 0-100%");
  else lat->DrawLatex(0.63,0.58,"Cent. 0-100%");

  line->Draw();
  leg_cent->Draw();
  if (bDrawCh) leg_ch->Draw();
  leg_alice->Draw();
  gPad->RedrawAxis();

  if(bSavePlots)
  {
    pc->SaveAs(Form("figs/pdf/raaExpOpen_pt_RaaCh%d.pdf",bDrawCh));
    pc->SaveAs(Form("figs/png/raaExpOpen_pt_RaaCh%d.png",bDrawCh));
  }
}
Exemplo n.º 12
0
void myRatio(TH1D* h_DY100,
             TH1D* h_DY200,
             TH1D* h_DY400,
             TH1D* h_DY600,
             TH1D* h_TTbar,
             TH1D* h_WW,
             TH1D* h_WZ,
             TH1D* h_ZZ,
             TH1D* h_data0,
	     TH1D* h_data1,
             Double_t scaleDY100,
             Double_t scaleDY200,
             Double_t scaleDY400,
             Double_t scaleDY600,
             Double_t scaleTTbar,
             Double_t scaleWW,
             Double_t scaleWZ,
             Double_t scaleZZ){

  TH1D* h_data = (TH1D*)h_data0->Clone("h_data");

  h_data->Reset();
  h_data->Add(h_data0);
  h_data->Add(h_data1);

  TH1D *h_bkg = (TH1D*)h_data->Clone("h_bkg");

  h_bkg->Reset();
  h_bkg->Add(h_DY100, scaleDY100);
  h_bkg->Add(h_DY200, scaleDY200);
  h_bkg->Add(h_DY400, scaleDY400);
  h_bkg->Add(h_DY600, scaleDY600);
  h_bkg->Add(h_TTbar, scaleTTbar);
  h_bkg->Add(h_WW, scaleWW);
  h_bkg->Add(h_WZ, scaleWZ);
  h_bkg->Add(h_ZZ, scaleZZ);

  TH1D* h_ratio = (TH1D*)h_data->Clone("h_ratio");

  h_ratio->Reset();

  Int_t nbin = h_ratio->GetNbinsX();
  Double_t ratio[nbin];
  Double_t error[nbin];
  Double_t numer_nbincontent[nbin];
  Double_t denom_nbincontent[nbin];
  Double_t numer_binerror[nbin];
  Double_t denom_binerror[nbin];

  for(Int_t i=1; i<=nbin; i++){

    numer_nbincontent[i] = h_data->GetBinContent(i);
    denom_nbincontent[i] = h_bkg->GetBinContent(i);
    numer_binerror[i] = h_data->GetBinError(i);
    denom_binerror[i] = h_bkg->GetBinError(i);

    if( denom_nbincontent[i] <= 0 || numer_nbincontent[i] <= 0 ) continue;
    if( denom_binerror[i] <= 0 || numer_binerror[i] <= 0 ) continue;

    ratio[i] = (Double_t)numer_nbincontent[i]/denom_nbincontent[i];
    error[i] = (ratio[i])*sqrt(pow(numer_binerror[i]/numer_nbincontent[i],2)+pow(denom_binerror[i]/denom_nbincontent[i],2));

    h_ratio->SetBinContent(i,ratio[i]);
    h_ratio->SetBinError(i,error[i]);

  }

  h_ratio->SetLineColor(kBlack);
  h_ratio->SetTitle("");
  h_ratio->GetYaxis()->SetTitle("data/MC");
  h_ratio->GetYaxis()->SetTitleOffset(0.3);
  h_ratio->GetXaxis()->SetLabelSize(0.1);
  h_ratio->GetXaxis()->SetTitleSize(0.125);
  h_ratio->GetYaxis()->SetLabelSize(0.1);
  h_ratio->GetYaxis()->SetTitleSize(0.1);
  h_ratio->GetYaxis()->SetNdivisions(505);
  h_ratio->GetYaxis()->SetRangeUser(0,2);
  h_ratio->Draw();

  Double_t x0 = h_bkg->GetXaxis()->GetXmin();
  Double_t x1 = h_bkg->GetXaxis()->GetXmax();
  Double_t y0 = 1.;
  Double_t y1 = 1.;

  TLine* one = new TLine(x0,y0,x1,y1);
  one->SetLineColor(2);
  one->SetLineStyle(1);
  one->SetLineWidth(2);
  one->Draw("same");

  h_ratio->Draw("same");

}
Exemplo n.º 13
0
void diphomva_inputs(bool passMVAcut=false, bool equalArea=true) {

  gStyle->SetOptTitle(0);
  gStyle->SetOptStat(0);

  gStyle->SetCanvasColor(0);
  gStyle->SetFrameBorderMode(0);
  
  gStyle->SetPalette(1);
  gStyle->SetLineColor(1);

  TString preselNorm_str = "";
  if (!equalArea) preselNorm_str = "_preselNorm";

  TFile *file = TFile::Open("histograms_CMS-HGG_zeevalidation.root");
  file->cd();

  txt = new TLatex();
  txt->SetNDC();
  txt->SetTextSize(0.08);

  bdtout_cat0_DYJetsToLL->Rebin(2);
  bdtout_cat1_DYJetsToLL->Rebin(2);
  bdtout_cat2_DYJetsToLL->Rebin(2);
  bdtout_cat3_DYJetsToLL->Rebin(2);
  bdtout_cat4_DYJetsToLL->Rebin(2);
  bdtoutEB_cat0_DYJetsToLL->Rebin(2);
  bdtoutEBEE_cat0_DYJetsToLL->Rebin(2);
  bdtoutEE_cat0_DYJetsToLL->Rebin(2);
  bdtout_cat0_Data->Rebin(2);
  bdtout_cat1_Data->Rebin(2);
  bdtout_cat2_Data->Rebin(2);
  bdtout_cat3_Data->Rebin(2);
  bdtout_cat4_Data->Rebin(2);
  bdtoutEB_cat0_Data->Rebin(2);
  bdtoutEBEE_cat0_Data->Rebin(2);
  bdtoutEE_cat0_Data->Rebin(2);

  bdtout_cat0_Data->GetXaxis()->SetTitle("di-photon BDT output");
  bdtout_cat1_Data->GetXaxis()->SetTitle("di-photon BDT output, CiC cat0");
  bdtout_cat2_Data->GetXaxis()->SetTitle("di-photon BDT output, CiC cat1");
  bdtout_cat3_Data->GetXaxis()->SetTitle("di-photon BDT output, CiC cat2");
  bdtout_cat4_Data->GetXaxis()->SetTitle("di-photon BDT output, CiC cat3");
  bdtoutEB_cat0_Data->GetXaxis()->SetTitle("di-photon BDT output (both EB)");
  bdtoutEBEE_cat0_Data->GetXaxis()->SetTitle("di-photon BDT output (one EB, one EE)");
  bdtoutEE_cat0_Data->GetXaxis()->SetTitle("di-photon BDT output (both EE)");
  pho1_phoidMva_cat0_Data->GetXaxis()->SetTitle("lead photon ID MVA output");
  pho2_phoidMva_cat0_Data->GetXaxis()->SetTitle("sublead photon ID MVA output");
  sigmaMOverM_cat0_Data->GetXaxis()->SetTitle("#sigma_{M}/M_{#gamma#gamma} (right vertex)");
  sigmaMOverM_wrongVtx_cat0_Data->GetXaxis()->SetTitle("#sigma_{M}/M_{#gamma#gamma} (wrong vertex)");
  sigmaMOverM_EB_cat0_Data->GetXaxis()->SetTitle("#sigma_{M}/M_{#gamma#gamma} (right vertex, both EB)");
  sigmaMOverM_wrongVtx_EB_cat0_Data->GetXaxis()->SetTitle("#sigma_{M}/M_{#gamma#gamma} (wrong vertex, both EB)");
  sigmaMOverM_EE_cat0_Data->GetXaxis()->SetTitle("#sigma_{M}/M_{#gamma#gamma} (right vertex, both EE)");
  sigmaMOverM_wrongVtx_EE_cat0_Data->GetXaxis()->SetTitle("#sigma_{M}/M_{#gamma#gamma} (wrong vertex, both EE)");
  vtxProb_cat0_Data->GetXaxis()->SetTitle("Vertex probabilty");
  pho1_ptOverM_cat0_Data->GetXaxis()->SetTitle("lead p_{T}/M_{#gamma#gamma}");
  pho2_ptOverM_cat0_Data->GetXaxis()->SetTitle("sublead p_{T}/M_{#gamma#gamma}");
  pho1_eta_cat0_Data->GetXaxis()->SetTitle("lead #eta");
  pho2_eta_cat0_Data->GetXaxis()->SetTitle("sublead #eta");
  cosDeltaPhi_cat0_Data->GetXaxis()->SetTitle("cos(#Delta#phi)");

  bdtout_cat0_Data->GetYaxis()->SetTitle("");
  bdtout_cat1_Data->GetYaxis()->SetTitle("");
  bdtout_cat2_Data->GetYaxis()->SetTitle("");
  bdtout_cat3_Data->GetYaxis()->SetTitle("");
  bdtout_cat4_Data->GetYaxis()->SetTitle("");
  bdtoutEB_cat0_Data->GetYaxis()->SetTitle("");
  bdtoutEBEE_cat0_Data->GetYaxis()->SetTitle("");
  bdtoutEE_cat0_Data->GetYaxis()->SetTitle("");
  pho1_phoidMva_cat0_Data->GetYaxis()->SetTitle("");
  pho2_phoidMva_cat0_Data->GetYaxis()->SetTitle("");
  sigmaMOverM_cat0_Data->GetYaxis()->SetTitle("");
  sigmaMOverM_wrongVtx_cat0_Data->GetYaxis()->SetTitle("");
  sigmaMOverM_EB_cat0_Data->GetYaxis()->SetTitle("");
  sigmaMOverM_wrongVtx_EB_cat0_Data->GetYaxis()->SetTitle("");
  sigmaMOverM_EE_cat0_Data->GetYaxis()->SetTitle("");
  sigmaMOverM_wrongVtx_EE_cat0_Data->GetYaxis()->SetTitle("");
  vtxProb_cat0_Data->GetYaxis()->SetTitle("");
  pho1_ptOverM_cat0_Data->GetYaxis()->SetTitle("");
  pho2_ptOverM_cat0_Data->GetYaxis()->SetTitle("");
  pho1_eta_cat0_Data->GetYaxis()->SetTitle("");
  pho2_eta_cat0_Data->GetYaxis()->SetTitle("");
  cosDeltaPhi_cat0_Data->GetYaxis()->SetTitle("");

  bdtout_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  bdtout_cat1_Data->GetXaxis()->SetTitleSize(0.05);
  bdtout_cat2_Data->GetXaxis()->SetTitleSize(0.05);
  bdtout_cat3_Data->GetXaxis()->SetTitleSize(0.05);
  bdtout_cat4_Data->GetXaxis()->SetTitleSize(0.05);
  bdtoutEB_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  bdtoutEBEE_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  bdtoutEE_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  pho1_phoidMva_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  pho2_phoidMva_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  sigmaMOverM_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  sigmaMOverM_wrongVtx_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  sigmaMOverM_EB_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  sigmaMOverM_wrongVtx_EB_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  sigmaMOverM_EE_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  sigmaMOverM_wrongVtx_EE_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  vtxProb_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  pho1_ptOverM_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  pho2_ptOverM_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  pho1_eta_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  pho2_eta_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  cosDeltaPhi_cat0_Data->GetXaxis()->SetTitleSize(0.05);

  bdtout_cat0_DYJetsToLL->SetFillColor(38);
  bdtout_cat1_DYJetsToLL->SetFillColor(38);
  bdtout_cat2_DYJetsToLL->SetFillColor(38);
  bdtout_cat3_DYJetsToLL->SetFillColor(38);
  bdtout_cat4_DYJetsToLL->SetFillColor(38);
  bdtoutEB_cat0_DYJetsToLL->SetFillColor(38);
  bdtoutEBEE_cat0_DYJetsToLL->SetFillColor(38);
  bdtoutEE_cat0_DYJetsToLL->SetFillColor(38);
  pho1_phoidMva_cat0_DYJetsToLL->SetFillColor(38);
  pho2_phoidMva_cat0_DYJetsToLL->SetFillColor(38);
  sigmaMOverM_cat0_DYJetsToLL->SetFillColor(38);
  sigmaMOverM_wrongVtx_cat0_DYJetsToLL->SetFillColor(38);
  sigmaMOverM_EB_cat0_DYJetsToLL->SetFillColor(38);
  sigmaMOverM_wrongVtx_EB_cat0_DYJetsToLL->SetFillColor(38);
  sigmaMOverM_EE_cat0_DYJetsToLL->SetFillColor(38);
  sigmaMOverM_wrongVtx_EE_cat0_DYJetsToLL->SetFillColor(38);
  vtxProb_cat0_DYJetsToLL->SetFillColor(38);
  pho1_ptOverM_cat0_DYJetsToLL->SetFillColor(38);
  pho2_ptOverM_cat0_DYJetsToLL->SetFillColor(38);
  pho1_eta_cat0_DYJetsToLL->SetFillColor(38);
  pho2_eta_cat0_DYJetsToLL->SetFillColor(38);
  cosDeltaPhi_cat0_DYJetsToLL->SetFillColor(38);

  bdtout_cat0_DYJetsToLL->SetLineColor(1);
  bdtoutEB_cat0_DYJetsToLL->SetLineColor(1);
  bdtoutEBEE_cat0_DYJetsToLL->SetLineColor(1);
  bdtoutEE_cat0_DYJetsToLL->SetLineColor(1);
  pho1_phoidMva_cat0_DYJetsToLL->SetLineColor(1);
  pho2_phoidMva_cat0_DYJetsToLL->SetLineColor(1);
  sigmaMOverM_cat0_DYJetsToLL->SetLineColor(1);
  sigmaMOverM_wrongVtx_cat0_DYJetsToLL->SetLineColor(1);
  sigmaMOverM_EB_cat0_DYJetsToLL->SetLineColor(1);
  sigmaMOverM_wrongVtx_EB_cat0_DYJetsToLL->SetLineColor(1);
  sigmaMOverM_EE_cat0_DYJetsToLL->SetLineColor(1);
  sigmaMOverM_wrongVtx_EE_cat0_DYJetsToLL->SetLineColor(1);
  vtxProb_cat0_DYJetsToLL->SetLineColor(1);
  pho1_ptOverM_cat0_DYJetsToLL->SetLineColor(1);
  pho2_ptOverM_cat0_DYJetsToLL->SetLineColor(1);
  pho1_eta_cat0_DYJetsToLL->SetLineColor(1);
  pho2_eta_cat0_DYJetsToLL->SetLineColor(1);
  cosDeltaPhi_cat0_DYJetsToLL->SetLineColor(1);

  bdtout_cat0_Data->SetMarkerStyle(20);
  bdtout_cat1_Data->SetMarkerStyle(20);
  bdtout_cat2_Data->SetMarkerStyle(20);
  bdtout_cat3_Data->SetMarkerStyle(20);
  bdtout_cat4_Data->SetMarkerStyle(20);
  bdtoutEB_cat0_Data->SetMarkerStyle(20);
  bdtoutEBEE_cat0_Data->SetMarkerStyle(20);
  bdtoutEE_cat0_Data->SetMarkerStyle(20);
  pho1_phoidMva_cat0_Data->SetMarkerStyle(20);
  pho2_phoidMva_cat0_Data->SetMarkerStyle(20);
  sigmaMOverM_cat0_Data->SetMarkerStyle(20);
  sigmaMOverM_wrongVtx_cat0_Data->SetMarkerStyle(20);
  sigmaMOverM_EB_cat0_Data->SetMarkerStyle(20);
  sigmaMOverM_wrongVtx_EB_cat0_Data->SetMarkerStyle(20);
  sigmaMOverM_EE_cat0_Data->SetMarkerStyle(20);
  sigmaMOverM_wrongVtx_EE_cat0_Data->SetMarkerStyle(20);
  vtxProb_cat0_Data->SetMarkerStyle(20);
  pho1_ptOverM_cat0_Data->SetMarkerStyle(20);
  pho2_ptOverM_cat0_Data->SetMarkerStyle(20);
  pho1_eta_cat0_Data->SetMarkerStyle(20);
  pho2_eta_cat0_Data->SetMarkerStyle(20);
  cosDeltaPhi_cat0_Data->SetMarkerStyle(20);

  bdtout_cat0_Data->SetMarkerSize(0.4);
  bdtout_cat1_Data->SetMarkerSize(0.4);
  bdtout_cat2_Data->SetMarkerSize(0.4);
  bdtout_cat3_Data->SetMarkerSize(0.4);
  bdtout_cat4_Data->SetMarkerSize(0.4);
  bdtoutEB_cat0_Data->SetMarkerSize(0.4);
  bdtoutEBEE_cat0_Data->SetMarkerSize(0.4);
  bdtoutEE_cat0_Data->SetMarkerSize(0.4);
  pho1_phoidMva_cat0_Data->SetMarkerSize(0.4);
  pho2_phoidMva_cat0_Data->SetMarkerSize(0.4);
  sigmaMOverM_cat0_Data->SetMarkerSize(0.4);
  sigmaMOverM_wrongVtx_cat0_Data->SetMarkerSize(0.4);
  sigmaMOverM_EB_cat0_Data->SetMarkerSize(0.4);
  sigmaMOverM_wrongVtx_EB_cat0_Data->SetMarkerSize(0.4);
  sigmaMOverM_EE_cat0_Data->SetMarkerSize(0.4);
  sigmaMOverM_wrongVtx_EE_cat0_Data->SetMarkerSize(0.4);
  vtxProb_cat0_Data->SetMarkerSize(0.4);
  pho1_ptOverM_cat0_Data->SetMarkerSize(0.4);
  pho2_ptOverM_cat0_Data->SetMarkerSize(0.4);
  pho1_eta_cat0_Data->SetMarkerSize(0.4);
  pho2_eta_cat0_Data->SetMarkerSize(0.4);
  cosDeltaPhi_cat0_Data->SetMarkerSize(0.4);

  bdtout_cat0_Data->SetLineColor(1);
  bdtout_cat1_Data->SetLineColor(1);
  bdtout_cat2_Data->SetLineColor(1);
  bdtout_cat3_Data->SetLineColor(1);
  bdtout_cat4_Data->SetLineColor(1);
  bdtoutEB_cat0_Data->SetLineColor(1);
  bdtoutEBEE_cat0_Data->SetLineColor(1);
  bdtoutEE_cat0_Data->SetLineColor(1);
  pho1_phoidMva_cat0_Data->SetLineColor(1);
  pho2_phoidMva_cat0_Data->SetLineColor(1);
  sigmaMOverM_cat0_Data->SetLineColor(1);
  sigmaMOverM_wrongVtx_cat0_Data->SetLineColor(1);
  sigmaMOverM_EB_cat0_Data->SetLineColor(1);
  sigmaMOverM_wrongVtx_EB_cat0_Data->SetLineColor(1);
  sigmaMOverM_EE_cat0_Data->SetLineColor(1);
  sigmaMOverM_wrongVtx_EE_cat0_Data->SetLineColor(1);
  vtxProb_cat0_Data->SetLineColor(1);
  pho1_ptOverM_cat0_Data->SetLineColor(1);
  pho2_ptOverM_cat0_Data->SetLineColor(1);
  pho1_eta_cat0_Data->SetLineColor(1);
  pho2_eta_cat0_Data->SetLineColor(1);
  cosDeltaPhi_cat0_Data->SetLineColor(1);

  if (passMVAcut) {
    bdtout_cat0_Data->GetXaxis()->SetRangeUser(-0.05,1.);
    bdtout_cat1_Data->GetXaxis()->SetRangeUser(-0.05,1.);
    bdtout_cat2_Data->GetXaxis()->SetRangeUser(-0.05,1.);
    bdtout_cat3_Data->GetXaxis()->SetRangeUser(-0.05,1.);
    bdtout_cat4_Data->GetXaxis()->SetRangeUser(-0.05,1.);
    bdtoutEB_cat0_Data->GetXaxis()->SetRangeUser(-0.05,1.);
    bdtoutEBEE_cat0_Data->GetXaxis()->SetRangeUser(-0.05,1.);
    bdtoutEE_cat0_Data->GetXaxis()->SetRangeUser(-0.05,1.);
  }

  TLegend *leg;
  leg = new TLegend(.6,.65,.87,.87);
  leg->SetBorderSize(0);
  leg->SetFillColor(10);
  leg->SetTextSize(.035);
  leg->AddEntry(vtxProb_cat0_Data,"Data (19.6fb^{-1})");
  leg->AddEntry(vtxProb_cat0_DYJetsToLL,"DYJetsToLL MC","F");

  TLegend *leg2;
  leg2 = new TLegend(.2,.65,.52,.87);
  leg2->SetBorderSize(0);
  leg2->SetFillColor(10);
  leg2->SetTextSize(.035);
  leg2->AddEntry(vtxProb_cat0_Data,"Data (19.6fb^{-1})");
  leg2->AddEntry(vtxProb_cat0_DYJetsToLL,"DYJetsToLL MC","F");

  float sf_presel = bdtout_cat0_Data->Integral()/bdtout_cat0_DYJetsToLL->Integral();
  cout << "sf_presel " << sf_presel << endl;

  //------------------------------------------------------------------------------

  TCanvas *c_bdtout = new TCanvas("c_bdtout","BDT output",2200,800);
  c_bdtout->Divide(4,2);

  c_bdtout->cd(1);
  float sf;
  if (passMVAcut) {
    sf = bdtout_cat0_Data->Integral(48,100)/bdtout_cat0_DYJetsToLL->Integral(48,100);
  } else {
    sf = bdtout_cat0_Data->Integral()/bdtout_cat0_DYJetsToLL->Integral();
  }
  bdtout_cat0_DYJetsToLL->Scale(sf);
  bdtout_cat0_Data->Draw("e");
  leg2->Draw();
  bdtout_cat0_DYJetsToLL->Draw("hist,same");
  bdtout_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_bdtout->cd(2);
  if (passMVAcut) {
    sf = bdtoutEB_cat0_Data->Integral(48,100)/bdtoutEB_cat0_DYJetsToLL->Integral(48,100);
  } else {
    sf = bdtoutEB_cat0_Data->Integral()/bdtoutEB_cat0_DYJetsToLL->Integral();
    if (!equalArea) sf = sf_presel;
  }
  bdtoutEB_cat0_DYJetsToLL->Scale(sf);
  bdtoutEB_cat0_Data->Draw("e");
  leg2->Draw();
  bdtoutEB_cat0_DYJetsToLL->Draw("hist,same");
  bdtoutEB_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_bdtout->cd(3);
  if (passMVAcut) {
    sf = bdtoutEBEE_cat0_Data->Integral(48,100)/bdtoutEBEE_cat0_DYJetsToLL->Integral(48,100);
  } else {
    sf = bdtoutEBEE_cat0_Data->Integral()/bdtoutEBEE_cat0_DYJetsToLL->Integral();
    if (!equalArea) sf = sf_presel;
  }
  bdtoutEBEE_cat0_DYJetsToLL->Scale(sf);
  bdtoutEBEE_cat0_Data->Draw("e");
  leg->Draw();
  bdtoutEBEE_cat0_DYJetsToLL->Draw("hist,same");
  bdtoutEBEE_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_bdtout->cd(4);
  if (passMVAcut) {
    sf = bdtoutEE_cat0_Data->Integral(48,100)/bdtoutEE_cat0_DYJetsToLL->Integral(48,100);
  } else {
    sf = bdtoutEE_cat0_Data->Integral()/bdtoutEE_cat0_DYJetsToLL->Integral();
    if (!equalArea) sf = sf_presel;
  }
  bdtoutEE_cat0_DYJetsToLL->Scale(sf);
  bdtoutEE_cat0_Data->Draw("e");
  leg->Draw();
  bdtoutEE_cat0_DYJetsToLL->Draw("hist,same");
  bdtoutEE_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();

  TLine *line;
  if (passMVAcut) {
    line = new TLine(-0.06,1.,1.,1.);
  } else {
    line = new TLine(-1.,1.,1.,1.);
  }
  line->SetLineColor(4);
  line->SetLineWidth(2);

  c_bdtout->cd(5);
  plotRatio(bdtout_cat0_Data,bdtout_cat0_DYJetsToLL);
  line->Draw();

  c_bdtout->cd(6);
  plotRatio(bdtoutEB_cat0_Data,bdtoutEB_cat0_DYJetsToLL);
  line->Draw();

  c_bdtout->cd(7);
  plotRatio(bdtoutEBEE_cat0_Data,bdtoutEBEE_cat0_DYJetsToLL);
  line->Draw();

  c_bdtout->cd(8);
  plotRatio(bdtoutEE_cat0_Data,bdtoutEE_cat0_DYJetsToLL);
  line->Draw();

  c_bdtout->SaveAs("bdtout"+preselNorm_str+".png");

  //------------------------------------------------------------------------------

  TCanvas *c_bdtout_basecat = new TCanvas("c_bdtout_basecat","BDT output in CiC categories",2200,800);
  c_bdtout_basecat->Divide(4,2);

  c_bdtout_basecat->cd(1);
  if (passMVAcut) {
    sf = bdtout_cat1_Data->Integral(48,100)/bdtout_cat1_DYJetsToLL->Integral(48,100);
  } else {
    sf = bdtout_cat1_Data->Integral()/bdtout_cat1_DYJetsToLL->Integral();
    if (!equalArea) sf = sf_presel;
  }
  bdtout_cat1_DYJetsToLL->Scale(sf);
  bdtout_cat1_Data->Draw("e");
  leg2->Draw();
  bdtout_cat1_DYJetsToLL->Draw("hist,same");
  bdtout_cat1_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_bdtout_basecat->cd(2);
  if (passMVAcut) {
    sf = bdtout_cat2_Data->Integral(48,100)/bdtout_cat2_DYJetsToLL->Integral(48,100);
  } else {
    sf = bdtout_cat2_Data->Integral()/bdtout_cat2_DYJetsToLL->Integral();
    if (!equalArea) sf = sf_presel;
  }
  bdtout_cat2_DYJetsToLL->Scale(sf);
  bdtout_cat2_Data->Draw("e");
  leg2->Draw();
  bdtout_cat2_DYJetsToLL->Draw("hist,same");
  bdtout_cat2_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_bdtout_basecat->cd(3);
  if (passMVAcut) {
    sf = bdtout_cat3_Data->Integral(48,100)/bdtout_cat3_DYJetsToLL->Integral(48,100);
  } else {
    sf = bdtout_cat3_Data->Integral()/bdtout_cat3_DYJetsToLL->Integral();
    if (!equalArea) sf = sf_presel;
  }
  bdtout_cat3_DYJetsToLL->Scale(sf);
  bdtout_cat3_Data->Draw("e");
  leg->Draw();
  bdtout_cat3_DYJetsToLL->Draw("hist,same");
  bdtout_cat3_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_bdtout_basecat->cd(4);
  if (passMVAcut) {
    sf = bdtout_cat4_Data->Integral(48,100)/bdtout_cat4_DYJetsToLL->Integral(48,100);
  } else {
    sf = bdtout_cat4_Data->Integral()/bdtout_cat4_DYJetsToLL->Integral();
    if (!equalArea) sf = sf_presel;
  }
  bdtout_cat4_DYJetsToLL->Scale(sf);
  bdtout_cat4_Data->Draw("e");
  leg->Draw();
  bdtout_cat4_DYJetsToLL->Draw("hist,same");
  bdtout_cat4_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_bdtout_basecat->cd(5);
  plotRatio(bdtout_cat1_Data,bdtout_cat1_DYJetsToLL);
  line->Draw();

  c_bdtout_basecat->cd(6);
  plotRatio(bdtout_cat2_Data,bdtout_cat2_DYJetsToLL);
  line->Draw();

  c_bdtout_basecat->cd(7);
  plotRatio(bdtout_cat3_Data,bdtout_cat3_DYJetsToLL);
  line->Draw();

  c_bdtout_basecat->cd(8);
  plotRatio(bdtout_cat4_Data,bdtout_cat4_DYJetsToLL);
  line->Draw();

  c_bdtout_basecat->SaveAs("bdtout_basecat"+preselNorm_str+".png");

  //------------------------------------------------------------------------------

  TCanvas *c_bdtin_1 = new TCanvas("c_bdtin_1","BDT input variables",1600,800);
  c_bdtin_1->Divide(4,2);

  c_bdtin_1->cd(1);
  sf = pho1_phoidMva_cat0_Data->Integral()/pho1_phoidMva_cat0_DYJetsToLL->Integral();
  pho1_phoidMva_cat0_DYJetsToLL->Scale(sf);
  pho1_phoidMva_cat0_Data->GetXaxis()->SetRangeUser(-0.3,0.6);
  pho1_phoidMva_cat0_Data->Draw("e");
  pho1_phoidMva_cat0_DYJetsToLL->Draw("hist,same");
  pho1_phoidMva_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_bdtin_1->cd(2);
  sf = pho2_phoidMva_cat0_Data->Integral()/pho2_phoidMva_cat0_DYJetsToLL->Integral();
  pho2_phoidMva_cat0_DYJetsToLL->Scale(sf);
  pho2_phoidMva_cat0_Data->GetXaxis()->SetRangeUser(-0.3,0.6);
  pho2_phoidMva_cat0_Data->Draw("e");
  pho2_phoidMva_cat0_DYJetsToLL->Draw("hist,same");
  pho2_phoidMva_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_bdtin_1->cd(3);
  gPad->SetLogy();
  sf = vtxProb_cat0_Data->Integral()/vtxProb_cat0_DYJetsToLL->Integral();
  vtxProb_cat0_DYJetsToLL->Scale(sf);
  //vtxProb_cat0_Data->GetXaxis()->SetRangeUser(0.2,1.);
  vtxProb_cat0_Data->Draw("e");
  vtxProb_cat0_DYJetsToLL->Draw("hist,same");
  vtxProb_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg2->Draw();

  c_bdtin_1->cd(4);
  gPad->SetLogy();
  sf = cosDeltaPhi_cat0_Data->Integral()/cosDeltaPhi_cat0_DYJetsToLL->Integral();
  cosDeltaPhi_cat0_DYJetsToLL->Scale(sf);
  cosDeltaPhi_cat0_Data->Draw("e");
  cosDeltaPhi_cat0_DYJetsToLL->Draw("hist,same");
  cosDeltaPhi_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_bdtin_1->cd(5);
  plotRatio(pho1_phoidMva_cat0_Data,pho1_phoidMva_cat0_DYJetsToLL);
  line1 = (TLine*)line->Clone();
  line1->SetX1(-0.3);
  line1->SetX2(0.6);
  line1->Draw();

  c_bdtin_1->cd(6);
  plotRatio(pho2_phoidMva_cat0_Data,pho2_phoidMva_cat0_DYJetsToLL);
  line1->Draw();

  c_bdtin_1->cd(7);
  plotRatio(vtxProb_cat0_Data,vtxProb_cat0_DYJetsToLL);
  line->Draw();

  c_bdtin_1->cd(8);
  plotRatio(cosDeltaPhi_cat0_Data,cosDeltaPhi_cat0_DYJetsToLL);
  line->Draw();

  c_bdtin_1->SaveAs("bdtin_1.png");

  //------------------------------------------------------------------------------

  TCanvas *c_bdtin_2 = new TCanvas("c_bdtin_2","BDT input variables",1500,900);
  c_bdtin_2->Divide(4,3);
  c_bdtin_2->cd(1);

  sf = sigmaMOverM_cat0_Data->Integral()/sigmaMOverM_cat0_DYJetsToLL->Integral();
  sigmaMOverM_cat0_DYJetsToLL->Scale(sf);
  sigmaMOverM_cat0_Data->Draw("e");
  sigmaMOverM_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_bdtin_2->cd(2);
  sf = sigmaMOverM_wrongVtx_cat0_Data->Integral()/sigmaMOverM_wrongVtx_cat0_DYJetsToLL->Integral();
  sigmaMOverM_wrongVtx_cat0_DYJetsToLL->Scale(sf);
  sigmaMOverM_wrongVtx_cat0_Data->Draw("e");
  sigmaMOverM_wrongVtx_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_wrongVtx_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg2->Draw();

  c_bdtin_2->cd(3);
  sf = pho1_ptOverM_cat0_Data->Integral()/pho1_ptOverM_cat0_DYJetsToLL->Integral();
  pho1_ptOverM_cat0_DYJetsToLL->Scale(sf);
  pho1_ptOverM_cat0_Data->GetXaxis()->SetRangeUser(0.2,1.2);
  pho1_ptOverM_cat0_Data->Draw("e");
  pho1_ptOverM_cat0_DYJetsToLL->Draw("hist,same");
  pho1_ptOverM_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_bdtin_2->cd(4);
  sf = pho2_ptOverM_cat0_Data->Integral()/pho2_ptOverM_cat0_DYJetsToLL->Integral();
  pho2_ptOverM_cat0_DYJetsToLL->Scale(sf);
  pho2_ptOverM_cat0_Data->GetXaxis()->SetRangeUser(0.2,.9);
  pho2_ptOverM_cat0_Data->Draw("e");
  pho2_ptOverM_cat0_DYJetsToLL->Draw("hist,same");
  pho2_ptOverM_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_bdtin_2->cd(5);
  gPad->SetLogy();
  sigmaMOverM_cat0_Data->Draw("e");
  sigmaMOverM_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_bdtin_2->cd(6);
  gPad->SetLogy();
  sigmaMOverM_wrongVtx_cat0_Data->Draw("e");
  sigmaMOverM_wrongVtx_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_wrongVtx_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_bdtin_2->cd(7);
  gPad->SetLogy();
  pho1_ptOverM_cat0_Data->Draw("e");
  pho1_ptOverM_cat0_DYJetsToLL->Draw("hist,same");
  pho1_ptOverM_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_bdtin_2->cd(8);
  gPad->SetLogy();
  pho2_ptOverM_cat0_Data->Draw("e");
  pho2_ptOverM_cat0_DYJetsToLL->Draw("hist,same");
  pho2_ptOverM_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_bdtin_2->cd(9);
  plotRatio(sigmaMOverM_cat0_Data,sigmaMOverM_cat0_DYJetsToLL);
  line3 = (TLine*)line->Clone();
  line3->SetX1(0.);
  line3->SetX2(0.06);
  line3->Draw();

  c_bdtin_2->cd(10);
  plotRatio(sigmaMOverM_wrongVtx_cat0_Data,sigmaMOverM_wrongVtx_cat0_DYJetsToLL);
  line3->Draw();

  c_bdtin_2->cd(11);
  plotRatio(pho1_ptOverM_cat0_Data,pho1_ptOverM_cat0_DYJetsToLL);
  line4 = (TLine*)line->Clone();
  line4->SetX1(0.2);
  line4->SetX2(1.2);
  line4->Draw();

  c_bdtin_2->cd(12);
  plotRatio(pho2_ptOverM_cat0_Data,pho2_ptOverM_cat0_DYJetsToLL);
  line5 = (TLine*)line->Clone();
  line5->SetX1(0.2);
  line5->SetX2(0.9);
  line5->Draw();

  c_bdtin_2->SaveAs("bdtin_2.png");

  //------------------------------------------------------------------------------

  TCanvas *c_bdtin_3 = new TCanvas("c_bdtin_3","BDT input variables",1200,800);
  c_bdtin_3->Divide(2,2);
  c_bdtin_3->cd(1);

  c_bdtin_3->cd(1);
  sf = pho1_eta_cat0_Data->Integral()/pho1_eta_cat0_DYJetsToLL->Integral();
  pho1_eta_cat0_DYJetsToLL->Scale(sf);
  pho1_eta_cat0_Data->Draw("e");
  pho1_eta_cat0_DYJetsToLL->Draw("hist,same");
  pho1_eta_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_bdtin_3->cd(2);
  sf = pho2_eta_cat0_Data->Integral()/pho2_eta_cat0_DYJetsToLL->Integral();
  pho2_eta_cat0_DYJetsToLL->Scale(sf);
  pho2_eta_cat0_Data->Draw("e");
  pho2_eta_cat0_DYJetsToLL->Draw("hist,same");
  pho2_eta_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_bdtin_3->cd(3);
  plotRatio(pho1_eta_cat0_Data,pho1_eta_cat0_DYJetsToLL);
  line6 = (TLine*)line->Clone();
  line6->SetX1(-2.5);
  line6->SetX2(2.5);
  line6->Draw();

  c_bdtin_3->cd(4);
  plotRatio(pho2_eta_cat0_Data,pho2_eta_cat0_DYJetsToLL);
  line6->Draw();

  c_bdtin_3->SaveAs("bdtin_3.png");

  //------------------------------------------------------------------------------

  TCanvas *c_sigmam_ebee = new TCanvas("c_sigmam_ebee","BDT input variables",1500,900);
  c_sigmam_ebee->Divide(4,3);
  c_sigmam_ebee->cd(1);

  sf = sigmaMOverM_EB_cat0_Data->Integral()/sigmaMOverM_EB_cat0_DYJetsToLL->Integral();
  sigmaMOverM_EB_cat0_DYJetsToLL->Scale(sf);
  sigmaMOverM_EB_cat0_Data->Draw("e");
  sigmaMOverM_EB_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_EB_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_sigmam_ebee->cd(2);
  sf = sigmaMOverM_wrongVtx_EB_cat0_Data->Integral()/sigmaMOverM_wrongVtx_EB_cat0_DYJetsToLL->Integral();
  sigmaMOverM_wrongVtx_EB_cat0_DYJetsToLL->Scale(sf);
  sigmaMOverM_wrongVtx_EB_cat0_Data->Draw("e");
  sigmaMOverM_wrongVtx_EB_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_wrongVtx_EB_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_sigmam_ebee->cd(3);
  sf = sigmaMOverM_EE_cat0_Data->Integral()/sigmaMOverM_EE_cat0_DYJetsToLL->Integral();
  sigmaMOverM_EE_cat0_DYJetsToLL->Scale(sf);
  sigmaMOverM_EE_cat0_Data->Draw("e");
  sigmaMOverM_EE_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_EE_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_sigmam_ebee->cd(4);
  sf = sigmaMOverM_wrongVtx_EE_cat0_Data->Integral()/sigmaMOverM_wrongVtx_EE_cat0_DYJetsToLL->Integral();
  sigmaMOverM_wrongVtx_EE_cat0_DYJetsToLL->Scale(sf);
  sigmaMOverM_wrongVtx_EE_cat0_Data->Draw("e");
  sigmaMOverM_wrongVtx_EE_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_wrongVtx_EE_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg2->Draw();

  c_sigmam_ebee->cd(5);
  gPad->SetLogy();
  sigmaMOverM_EB_cat0_Data->Draw("e");
  sigmaMOverM_EB_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_EB_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_sigmam_ebee->cd(6);
  gPad->SetLogy();
  sigmaMOverM_wrongVtx_EB_cat0_Data->Draw("e");
  sigmaMOverM_wrongVtx_EB_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_wrongVtx_EB_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_sigmam_ebee->cd(7);
  gPad->SetLogy();
  sigmaMOverM_EE_cat0_Data->Draw("e");
  sigmaMOverM_EE_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_EE_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_sigmam_ebee->cd(8);
  gPad->SetLogy();
  sigmaMOverM_wrongVtx_EE_cat0_Data->Draw("e");
  sigmaMOverM_wrongVtx_EE_cat0_DYJetsToLL->Draw("hist,same");
  sigmaMOverM_wrongVtx_EE_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();

  c_sigmam_ebee->cd(9);
  plotRatio(sigmaMOverM_EB_cat0_Data,
	    sigmaMOverM_EB_cat0_DYJetsToLL);
  line3->Draw();

  c_sigmam_ebee->cd(10);
  plotRatio(sigmaMOverM_wrongVtx_EB_cat0_Data,
	    sigmaMOverM_wrongVtx_EB_cat0_DYJetsToLL);
  line3->Draw();

  c_sigmam_ebee->cd(11);
  plotRatio(sigmaMOverM_EE_cat0_Data,
	    sigmaMOverM_EE_cat0_DYJetsToLL);
  line3->Draw();

  c_sigmam_ebee->cd(12);
  plotRatio(sigmaMOverM_wrongVtx_EE_cat0_Data,
	    sigmaMOverM_wrongVtx_EE_cat0_DYJetsToLL);
  line3->Draw();

  c_sigmam_ebee->SaveAs("sigmam_ebee.png");


}
Exemplo n.º 14
0
void myRatio(TH1D* h_data, TH1D *h_bkg,string xtitle="",int option=0){
cout<<h_bkg->Integral()/h_data->Integral()<<endl;
  TH1D* h_ratio = (TH1D*)h_bkg->Clone("h_ratio");
	
  h_ratio->Reset();

  Int_t nbin = h_ratio->GetNbinsX();
  Float_t ratio[nbin];
  Float_t error[nbin];
  Float_t numer_nbincontent[nbin];
  Float_t denom_nbincontent[nbin];
  Float_t numer_binerror[nbin];
  Float_t denom_binerror[nbin];

  for(Int_t i = 1; i <= nbin; i++){
	
	
    numer_nbincontent[i] = h_data->GetBinContent(i);
    denom_nbincontent[i] = h_bkg ->GetBinContent(i);
    numer_binerror[i]    = h_data->GetBinError(i);
    denom_binerror[i]    = h_bkg ->GetBinError(i);

    if( denom_nbincontent[i] <= 0 || numer_nbincontent[i] <= 0 ) continue;
    if( denom_binerror[i] <= 0 || numer_binerror[i] <= 0 ) continue;

    ratio[i] = (Float_t)numer_nbincontent[i]/denom_nbincontent[i];
    error[i] = (ratio[i])*sqrt(pow(numer_binerror[i]/numer_nbincontent[i],2)+pow(denom_binerror[i]/denom_nbincontent[i],2));

    h_ratio->SetBinContent(i,ratio[i]);
    h_ratio->SetBinError(i,error[i]);

  }

  h_ratio->SetLineColor(kBlack);
  h_ratio->SetMarkerStyle(8);
  h_ratio->SetMarkerSize(1.5);
  h_ratio->SetTitle("");
  h_ratio->SetXTitle(xtitle.data());
  h_ratio->GetYaxis()->SetTitle("Data/MC");
  h_ratio->GetYaxis()->SetTitleOffset(0.45);
  h_ratio->GetXaxis()->SetLabelSize(0.125);
  h_ratio->GetXaxis()->SetLabelOffset(0.005);
  h_ratio->GetXaxis()->SetTitleSize(0.125);
  h_ratio->GetXaxis()->SetTitleOffset(0.92);
  h_ratio->GetYaxis()->SetLabelSize(0.1);
  h_ratio->GetYaxis()->SetTitleSize(0.1);
  h_ratio->GetYaxis()->SetNdivisions(505);
  h_ratio->GetYaxis()->SetRangeUser(0,2);
  if(option==1){
	   h_ratio->GetXaxis()->SetLabelSize(0.18);
	  h_ratio->GetXaxis()->SetBinLabel(1,"0b");
	  h_ratio->GetXaxis()->SetBinLabel(2,"1b");
	  h_ratio->GetXaxis()->SetBinLabel(3,"2b");
	  h_ratio->GetXaxis()->SetBinLabel(4,"3b");
	  h_ratio->GetXaxis()->SetBinLabel(5,"4b");
	  
		//h_ratio->GetXaxis()->SetBinLabel(6,"3bHPHP");
  }
  h_ratio->Draw();

  Float_t x0 = h_bkg->GetXaxis()->GetXmin();
  Float_t x1 = h_bkg->GetXaxis()->GetXmax();
  Float_t y0 = 1.;
  Float_t y1 = 1.;
if(isSetRange){
	x0=rangeUserDown;
	x1=rangeUserUp;
}
  TLine* one = new TLine(x0,y0,x1,y1);

  one->SetLineColor(2);
  one->SetLineStyle(1);
  one->SetLineWidth(2);
  one->Draw("same");
 if(isSetRange)h_ratio->GetXaxis()->SetRangeUser(rangeUserDown,rangeUserUp);
  h_ratio->Draw("same");

}
Exemplo n.º 15
0
void vnpt_5panels_ratio()
{
  gROOT->Reset();
  gROOT->SetStyle("MyStyle");
//  gROOT->LoadMacro("v2pt_12cen_MyDef.C");
  // gROOT->LoadMacro("MyDef.C");
  gStyle->SetTextFont(43);
  gStyle->SetLabelFont(43,"x");
  gStyle->SetLabelFont(43,"y");
  gStyle->SetLabelFont(43,"z");
  gStyle->SetTitleFont(43,"x");
  gStyle->SetTitleFont(43,"y");
  gStyle->SetTitleFont(43,"z");
  gStyle->SetEndErrorSize(0);

  double textsize = 19;

//int   mcol[8]={kRed,kMagenta,kBlue,kCyan,kGreen,kYellow,kOrange,kGray};
int   mcol[8]={kRed,kOrange+1,kBlue,kGreen+1,kCyan,kYellow,kOrange,kGray};
int   mcol2[4]={6,2,4,8};

//int   msty[8][2]={{20,20},{25,24},{22,22},{28,26},{29,30},{33,27},{34,28},{20,24}};
int   msty[8][2]={{20,20},{21,24},{22,29},{23,30},{24,30},{25,27},{28,28},{30,24}};


//float msiz[8]={1.11,0.9,1.2,1.24,1.5,1,1,1};
float msiz[8]={1.11,1.0,1.5,1.2,1.2,1.2,1.2,1.6};
float msiz2[4]={1.5,1.5,1.5,1.5};
//
// arrays
//
const int Mfiles=50;
int   ndp[Mfiles];
char *cfn[Mfiles];
char *cft[Mfiles];
const int Mpoints=40;
double xa[Mfiles][Mpoints],xe[Mfiles][Mpoints],xesys[Mfiles][Mpoints];
double ya[Mfiles][Mpoints],ye[Mfiles][Mpoints],yesys[Mfiles][Mpoints];  

double nAxa[Mfiles][Mpoints],nAxe[Mfiles][Mpoints];
double nAya[Mfiles][Mpoints],nAye[Mfiles][Mpoints];
double nBxa[Mfiles][Mpoints],nBxe[Mfiles][Mpoints];
double nBya[Mfiles][Mpoints],nBye[Mfiles][Mpoints];
double nARxa[Mfiles][Mpoints],nARxe[Mfiles][Mpoints];
double nARya[Mfiles][Mpoints],nARye[Mfiles][Mpoints];
double nBRxa[Mfiles][Mpoints],nBRxe[Mfiles][Mpoints];
double nBRya[Mfiles][Mpoints],nBRye[Mfiles][Mpoints];

double xa60[Mfiles][Mpoints],xe60[Mfiles][Mpoints],xesys60[Mfiles][Mpoints];
double ya60[Mfiles][Mpoints],ye60[Mfiles][Mpoints],yesys60[Mfiles][Mpoints];
double nAxa60[Mfiles][Mpoints],nAxe60[Mfiles][Mpoints];
double nAya60[Mfiles][Mpoints],nAye60[Mfiles][Mpoints];
double nBxa60[Mfiles][Mpoints],nBxe60[Mfiles][Mpoints];
double nBya60[Mfiles][Mpoints],nBye60[Mfiles][Mpoints];
double nARxa60[Mfiles][Mpoints],nARxe60[Mfiles][Mpoints];
double nARya60[Mfiles][Mpoints],nARye60[Mfiles][Mpoints];
double nBRxa60[Mfiles][Mpoints],nBRxe60[Mfiles][Mpoints];
double nBRya60[Mfiles][Mpoints],nBRye60[Mfiles][Mpoints];

const int Mpads=14;


char  *htit[Mpads];
char  *htitc2[Mpads];
char  *atit[Mpads][3];
double ptit[Mpads][2];
double hxmin[Mpads],hxmax[Mpads];
double hymin[Mpads],hymax[Mpads];
double lxmin[Mpads],lxmax[Mpads];
double lymin[Mpads],lymax[Mpads];


 
  //
  // Data input
  //
  char *cjob="v2pt_12cen_4x3";
  int i=-1;


  // histogram parameter
  htit[0]="(a) v_{4}{#Psi_{22}}";
  htit[1]="(b) v_{5}{#Psi_{23}}";
  htit[2]="(c) v_{6}{#Psi_{222}}";
  htit[3]="(d) v_{6}{#Psi_{33}}";
  htit[4]="(e) v_{7}{#Psi_{223}}";
  htit[5]="25-30%";
  htit[6]="30-35%";
  htit[7]="35-40%";
  htit[8]="40-50%";
  htit[9]="50-60%";
  htit[10]="60-70%";
  htit[11]="70-80%";
  htitc2[0]="(f) v_{4}{#Psi_{22}}";
  htitc2[1]="(g) v_{5}{#Psi_{23}}";
  htitc2[2]="(h) v_{6}{#Psi_{222}}";
  htitc2[3]="(i) v_{6}{#Psi_{33}}";
  htitc2[4]="(j) v_{7}{#Psi_{223}}";
  for (int ip=0;ip<Mpads;ip++)
  {
    //  hxmin[ip]=0.0; hxmax[ip]=11.9;
    hxmin[ip]=0.0001; hxmax[ip]=4.1;
    hymin[ip]=-0.003; hymax[ip]=0.0655;
    lxmin[ip]=0.24; lxmax[ip]=0.88;
    lymin[ip]=0.65; lymax[ip]=0.94;
    ptit[ip][0]=0.45; ptit[ip][1]=0.036;// position legends 
    atit[ip][0]="p_{T} (GeV/c)"; atit[ip][1]="v_{n}";
  }
  //
  // Read data and create vector files
  //

  double sysXYZ[5]={6,7,8,8,9};
  //double sysXYZ[5]={8,9,12,12,15};
  //double sysXYZ[5]={8,9,20,20,20};
  double sysEach[5]={0.0002, 0.0002, 0.0002, 0.0003, 0.0002};
  double tmp;
  const int nw=5;
  const int npt=20;
  ifstream inEP;
  inEP.open("./data_vnptcent020_5020gev.txt");
  for(int i=0; i<nw; i++){
    for(int j=0; j<npt; j++){
      inEP>>tmp; inEP>>tmp; inEP>>xa[i][j]; inEP>>tmp; inEP>>ya[i][j]; inEP>>ye[i][j];
      if(ye[i][j]<0) ye[i][j]=-ye[i][j];
      xe[i][j]=0.0;
    }
  }
  inEP.close();
  ifstream inEP;
  inEP.open("./data_vnptcent020_5020gev_vzA.txt");
  for(int i=0; i<nw; i++){
    for(int j=0; j<npt; j++){
      inEP>>tmp; inEP>>tmp; inEP>>nAxa[i][j]; inEP>>tmp; inEP>>nAya[i][j]; inEP>>nAye[i][j];
      if(nAye[i][j]<0) nAye[i][j]=-nAye[i][j];
      nAxe[i][j]=0.0; 

      nARxa[i][j]=nAxa[i][j];
      nARxe[i][j]=nAxe[i][j];
      nARye[i][j]=nAya[i][j]/ya[i][j]*sqrt(ye[i][j]*ye[i][j]/ya[i][j]/ya[i][j] + nAye[i][j]*nAye[i][j]/nAya[i][j]/nAya[i][j] - 2.5*ye[i][j]*ye[i][j]/ya[i][j]/nAya[i][j] );
      nARya[i][j]=nAya[i][j]/ya[i][j];
    }
  }
  inEP.close();
  ifstream inEP;
  inEP.open("./data_vnptcent020_5020gev_vzB.txt");
  for(int i=0; i<nw; i++){
    for(int j=0; j<npt; j++){
      inEP>>tmp; inEP>>tmp; inEP>>nBxa[i][j]; inEP>>tmp; inEP>>nBya[i][j]; inEP>>nBye[i][j];
      if(nBye[i][j]<0) nBye[i][j]=-nBye[i][j];
      nBxe[i][j]=0.0; 

      nBRxa[i][j]=nBxa[i][j];
      nBRxe[i][j]=nBxe[i][j];
      nBRye[i][j]=nBya[i][j]/ya[i][j]*sqrt(ye[i][j]*ye[i][j]/ya[i][j]/ya[i][j] + nBye[i][j]*nBye[i][j]/nBya[i][j]/nBya[i][j] - 2.5*ye[i][j]*ye[i][j]/ya[i][j]/nBya[i][j] );
      nBRya[i][j]=nBya[i][j]/ya[i][j];
    }
  }
  inEP.close();

//20-60%
  ifstream inEP;
  inEP.open("./data_vnptcent2060_5020gev.txt");
  for(int i=0; i<nw; i++){
    for(int j=0; j<npt; j++){
      inEP>>tmp; inEP>>tmp; inEP>>xa60[i][j]; inEP>>tmp; inEP>>ya60[i][j]; inEP>>ye60[i][j];
      if(ye60[i][j]<0) ye60[i][j]=-ye60[i][j];
      xe60[i][j]=0.0;
    }
  }
  inEP.close();
  ifstream inEP;
  inEP.open("./data_vnptcent2060_5020gev_vzA.txt");
  for(int i=0; i<nw; i++){
    for(int j=0; j<npt; j++){
      inEP>>tmp; inEP>>tmp; inEP>>nAxa60[i][j]; inEP>>tmp; inEP>>nAya60[i][j]; inEP>>nAye60[i][j];
      if(nAye60[i][j]<0) nAye60[i][j]=-nAye60[i][j];
      nAxe60[i][j]=0.0; 

      nARxa60[i][j]=nAxa60[i][j];
      nARxe60[i][j]=nAxe60[i][j];
      nARye60[i][j]=nAya60[i][j]/ya60[i][j]*sqrt(ye60[i][j]*ye60[i][j]/ya60[i][j]/ya60[i][j] + nAye60[i][j]*nAye60[i][j]/nAya60[i][j]/nAya60[i][j] - 2.5*ye60[i][j]*ye60[i][j]/ya60[i][j]/nAya60[i][j] );
      nARya60[i][j]=nAya60[i][j]/ya60[i][j];
    }
  }
  inEP.close();
  ifstream inEP;
  inEP.open("./data_vnptcent2060_5020gev_vzB.txt");
  for(int i=0; i<nw; i++){
    for(int j=0; j<npt; j++){
      inEP>>tmp; inEP>>tmp; inEP>>nBxa60[i][j]; inEP>>tmp; inEP>>nBya60[i][j]; inEP>>nBye60[i][j];
      if(nBye60[i][j]<0) nBye60[i][j]=-nBye60[i][j];
      nBxe60[i][j]=0.0; 

      nBRxa60[i][j]=nBxa60[i][j];
      nBRxe60[i][j]=nBxe60[i][j];
      nBRye60[i][j]=nBya60[i][j]/ya60[i][j]*sqrt(ye60[i][j]*ye60[i][j]/ya60[i][j]/ya60[i][j] + nBye60[i][j]*nBye60[i][j]/nBya60[i][j]/nBya60[i][j] - 2.5*ye60[i][j]*ye60[i][j]/ya60[i][j]/nBya60[i][j] );
      nBRya60[i][j]=nBya60[i][j]/ya60[i][j];
    }
  }
  inEP.close();
nBRya60[1][2]=1.06;

  TCanvas *can=new TCanvas("can","can",10,10,1050*0.8*1.3,800*0.3*1.3*1.8);

  can->Divide(5,2,0,0); //sticks the pads with no space inbetween 
  
  TH1D *h1[nw];
  for (int iw=0;iw<nw;iw++)
  {
    can->cd(iw+1);
    if(iw==4) gPad->SetRightMargin(0.02);
    //gPad->SetLogy();
    char ch1[8];
    sprintf(ch1,"h1_%d",iw);
    h1[iw] = new TH1D(ch1,"",500,hxmin[iw],hxmax[iw]);
    h1[iw]->SetMinimum(0.5); h1[iw]->SetMaximum(1.5);
    h1[iw]->SetXTitle(atit[iw][0]); h1[iw]->SetYTitle("v_{n} ratio");
    h1[iw]->GetXaxis()->CenterTitle(1);
    h1[iw]->GetYaxis()->CenterTitle(1);

    // futz with the axes
    h1[iw]->GetYaxis()->SetNdivisions(606);
    h1[iw]->GetXaxis()->SetNdivisions(606);

      h1[iw]->GetYaxis()->SetTitleSize(textsize*1.4);
      h1[iw]->GetYaxis()->SetTitleOffset(2.3);
      h1[iw]->GetYaxis()->SetLabelSize(textsize);
      h1[iw]->GetXaxis()->SetTitleSize(textsize*1.4);
      h1[iw]->GetXaxis()->SetTitleOffset(1.3);
      h1[iw]->GetXaxis()->SetLabelSize(textsize);
     // h1[iw]->GetXaxis()->SetLabelOffset(1.2);

    h1[iw]->Draw();
  }
  TH1D *h2[nw];
  for (int iw=0;iw<nw;iw++)
  {
    can->cd(iw+1+5);

    if(iw==4) gPad->SetRightMargin(0.02);
    //gPad->SetLogy();
    char ch2[8];
    sprintf(ch2,"h2_%d",iw);
    h2[iw] = new TH1D(ch2,"",500,hxmin[iw],hxmax[iw]);
    h2[iw]->SetMinimum(0.5); h2[iw]->SetMaximum(1.5);
    h2[iw]->SetXTitle(atit[iw][0]); h2[iw]->SetYTitle("v_{n} ratio");
    h2[iw]->GetXaxis()->CenterTitle(1);
    h2[iw]->GetYaxis()->CenterTitle(1);

    // futz with the axes
    h2[iw]->GetYaxis()->SetNdivisions(606);
    h2[iw]->GetXaxis()->SetNdivisions(606);

      h2[iw]->GetYaxis()->SetTitleSize(textsize*1.4);
      h2[iw]->GetYaxis()->SetTitleOffset(2.3);
      h2[iw]->GetYaxis()->SetLabelSize(textsize*1.2);
      h2[iw]->GetXaxis()->SetTitleSize(textsize*1.4);
      h2[iw]->GetXaxis()->SetTitleOffset(1.9);
      h2[iw]->GetXaxis()->SetLabelSize(textsize*1.2);
     // h2[iw]->GetXaxis()->SetLabelOffset(1.2);

    h2[iw]->Draw();
  }

  //
  // Draw! 
  //

  const int nPlotBin = 40;
  double ptPlot[nPlotBin];
  double vnPlot[nPlotBin];
  double errPlot[nPlotBin];

  cout << "Now Draw!" << endl;
  TGraphErrors *ge, *ge2, *ge3, *ge4;
  for (int iw=0;iw<nw;iw++)
  {
    can->cd(iw+1);

    //
    if (iw==0)
    {
      tex=new TLatex(0.6,0.0235*0.88*1.275*1.47*1.6,"CMS");
      tex->SetTextSize(textsize*1.0);
      //tex->Draw();
      tex=new TLatex(2.8,0.0235*0.88*1.275*1.47*1.6,"Preliminary");
      tex->SetTextSize(textsize*1.0);
      //tex->Draw();
    }
    if (iw==0)
    {
      tex=new TLatex(1.5,1.18,"0-20%");
      tex->SetTextSize(textsize*1.0);
      tex->Draw();
      tex=new TLatex(2.,0.021,"|#eta|<0.8");
      tex->SetTextSize(textsize*1.0);
      //tex->Draw();
      tex=new TLatex(0.5,0.02,"0.3<p_{T}<3.0 GeV/c");
      tex->SetTextSize(textsize*1.0);
      //tex->Draw();
    }
    //if (iw < 4) tex=new TLatex(ptit[iw][0]+2,0.27,htit[iw]);
    tex=new TLatex(2.1,1.4,htit[iw]);
    if ( iw == 0)   tex->SetTextSize(textsize);
    else if (iw == 8) tex->SetTextSize(textsize);
    else  tex->SetTextSize(textsize);
    tex->Draw();
    //
    // Legend
    //
    TLegend *leg = new TLegend(lxmin[iw]*1.2,lymin[iw]*1.*0.75*0.1,lxmax[iw]*0.8,lymax[iw]*1.02*0.4*0.92);
    leg->SetFillColor(0);
    leg->SetTextSize(textsize);
    TLegend *leg2 = new TLegend(lxmin[iw]*1.2,lymin[iw]*1.*0.75*0.52,lxmax[iw]*0.8,lymax[iw]*1.02*0.56*0.92);
    leg2->SetFillColor(0);
    leg2->SetTextSize(textsize);
    //
    // Read data
    //

    for (int im=0;im<1;im++)
    {
      int j=im*5+iw;
      int col=2;
      //if (ndp[j]==0) continue;

      ge=new TGraphErrors(19,&nARxa[j][0],&nARya[j][0],&nARxe[j][0],&nARye[j][0]);
      ge->SetTitle("");
      ge->SetMarkerStyle(24);
      //      ge->SetMarkerStyle(msty[im]);
      ge->SetMarkerSize(msiz[im]);
      ge->SetMarkerColor(col);
      ge->SetLineWidth(1.2);
      ge->SetLineColor(col);
      //ge->Draw("pe");
      leg->AddEntry(ge,"HF(3,4)/HF(3,5)","pl");
    }
    for (int im=0;im<1;im++)
    {
      int j=im*5+iw;
      int col=4;
      //if (ndp[j]==0) continue;
      ge2=new TGraphErrors(19,&nBRxa[j][0],&nBRya[j][0],&nBRxe[j][0],&nBRye[j][0]);
      ge2->SetTitle("");
      ge2->SetMarkerStyle(25);
      //      ge2->SetMarkerStyle(msty[im]);
      ge2->SetMarkerSize(msiz[im]);
      ge2->SetMarkerColor(col);
      ge2->SetLineWidth(1.2);
      ge2->SetLineColor(col);
      //ge2->Draw("pe");
      leg->AddEntry(ge2,"HF(4,5)/HF(3,5)","pl");
      //drawSysBox(ge2,16,0.2, sysXYZ[j]);
    }
    ge2->Draw("pe");
    ge->Draw("pe");
    if (iw==0) leg->Draw();
    TLine *lines = new TLine(0,1,4.0,1);
    lines->SetLineStyle(2);
    lines->SetLineWidth(1);
    lines->Draw();

if(iw==0||iw<6){
    TF1 *fitFun = new TF1("fitFun","pol1", 0, 4);
    fitFun->SetLineColor(2);
    ge->Fit("fitFun","R+");
    fitFun->Draw("same");
cout<<fitFun->Eval(0.4)<<",  "<<fitFun->Eval(0.9)<<",  "<<fitFun->Eval(1.9)<<",  "<<fitFun->Eval(3.5)<<endl;
    double p0 = fitFun->GetParameter(0);
    double p0Err = fitFun->GetParError(0);
    double p1 = fitFun->GetParameter(1);
    double p1Err = fitFun->GetParError(1);
    //double p2 = fitFun->GetParameter(2);
    //double p2Err = fitFun->GetParError(2);

  //TF1 *fitFunE = new TF1("fitFunE","[0]+[1]*x+[2]*x*x", 0, 4);
  TF1 *fitFunE = new TF1("fitFunE","[0]+[1]*x", 0, 4);
  //fitFunE->SetParameters(p0+p0Err, p1+p1Err, p2+p2Err);
  fitFunE->SetParameters(p0+p0Err, p1);
  for(int ipt=0; ipt<nPlotBin; ipt++){
    ptPlot[ipt] = ipt*0.1+0.05;
    vnPlot[ipt] = fitFun->Eval(ptPlot[ipt]);
    errPlot[ipt] = fitFunE->Eval(ptPlot[ipt]) - fitFun->Eval(ptPlot[ipt]);
  }

  TGraphErrors *graph = new TGraphErrors(nPlotBin,ptPlot,vnPlot,0,errPlot);
  graph->SetTitle("");
  graph->SetMarkerStyle(20);
  graph->SetMarkerSize(1.0);
  graph->SetMarkerColor(1);
  graph->SetLineWidth(2);
  graph->SetLineColor(2);
MyStyle->SetFillColor(kRed+1);
  graph->SetFillColor(kRed+1);
graph->SetFillStyle(3002);
  graph->Draw("e3same");

}
else {
    TF1 *fitFun = new TF1("fitFun","pol1", 0, 4);
    fitFun->SetLineColor(4);
    ge->Fit("fitFun","R+");
    fitFun->Draw("same");
cout<<fitFun->Eval(0.4)<<",  "<<fitFun->Eval(0.9)<<",  "<<fitFun->Eval(1.9)<<",  "<<fitFun->Eval(3.5)<<endl;

}

    double chi2 = fitFun->GetChisquare();
    double ndf = fitFun->GetNDF();
   TLatex *tex = new TLatex(0.6,0.53,Form("#chi^{2}/ndf = %2.1f", chi2/ndf));
   tex->SetTextColor(2);
   tex->SetTextSize(16);
   tex->Draw("same");


    can->cd(iw+1+5);
    tex=new TLatex(2.1,1.4,htitc2[iw]);
    if ( iw == 0)   tex->SetTextSize(textsize);
    else if (iw == 8) tex->SetTextSize(textsize);
    else  tex->SetTextSize(textsize);
    tex->Draw();

    for (int im=0;im<1;im++)
    {
      int j=im*5+iw;
      int col=2;
      //if (ndp[j]==0) continue;

      ge3=new TGraphErrors(19,&nARxa60[j][0],&nARya60[j][0],&nARxe60[j][0],&nARye60[j][0]);
      ge3->SetTitle("");
      ge3->SetMarkerStyle(24);
      //      ge3->SetMarkerStyle(msty[im]);
      ge3->SetMarkerSize(msiz[im]);
      ge3->SetMarkerColor(col);
      ge3->SetLineWidth(1.2);
      ge3->SetLineColor(col);
      //ge3->Draw("pe");
      leg2->AddEntry(ge3,"HF(3,4)/HF(3,5)","pl");
    }
    for (int im=0;im<1;im++)
    {
      int j=im*5+iw;
      int col=4;
      //if (ndp[j]==0) continue;
      ge4=new TGraphErrors(19,&nBRxa60[j][0],&nBRya60[j][0],&nBRxe60[j][0],&nBRye60[j][0]);
      ge4->SetTitle("");
      ge4->SetMarkerStyle(25);
      //      ge4->SetMarkerStyle(msty[im]);
      ge4->SetMarkerSize(msiz[im]);
      ge4->SetMarkerColor(col);
      ge4->SetLineWidth(1.2);
      ge4->SetLineColor(col);
      //ge4->Draw("pe");
      leg2->AddEntry(ge4,"HF(4,5)/HF(3,5)","pl");
    }
    ge4->Draw("pe");
    ge3->Draw("pe");
    TLine *lines = new TLine(0,1,4.0,1);
    lines->SetLineStyle(2);
    lines->SetLineWidth(1);
    lines->Draw();
    if(iw==0) leg2->Draw();

if(iw==0||iw<6){
    TF1 *fitFun = new TF1("fitFun","pol1", 0, 4);
    fitFun->SetLineColor(2);
    ge3->Fit("fitFun","R+");
    fitFun->Draw("same");
cout<<fitFun->Eval(2.5)<<",  "<<fitFun->Eval(7.5)<<",  "<<fitFun->Eval(45)<<",  "<<fitFun->Eval(55)<<endl;
    double p0 = fitFun->GetParameter(0);
    double p0Err = fitFun->GetParError(0);
    double p1 = fitFun->GetParameter(1);
    double p1Err = fitFun->GetParError(1);
    //double p2 = fitFun->GetParameter(2);
    //double p2Err = fitFun->GetParError(2);

  //TF1 *fitFunE = new TF1("fitFunE","[0]+[1]*x+[2]*x*x", 0, 4);
  TF1 *fitFunE = new TF1("fitFunE","[0]+[1]*x", 0, 4);
  //fitFunE->SetParameters(p0+p0Err, p1+p1Err, p2+p2Err);
  fitFunE->SetParameters(p0+p0Err, p1);
  for(int ipt=0; ipt<nPlotBin; ipt++){
    ptPlot[ipt] = ipt*0.1+0.05;
    vnPlot[ipt] = fitFun->Eval(ptPlot[ipt]);
    errPlot[ipt] = fitFunE->Eval(ptPlot[ipt]) - fitFun->Eval(ptPlot[ipt]);
  }

  TGraphErrors *graph = new TGraphErrors(nPlotBin,ptPlot,vnPlot,0,errPlot);
  graph->SetTitle("");
  graph->SetMarkerStyle(20);
  graph->SetMarkerSize(1.0);
  graph->SetMarkerColor(1);
  graph->SetLineWidth(2);
  graph->SetLineColor(2);
MyStyle->SetFillColor(kRed+1);
  graph->SetFillColor(kRed+1);
graph->SetFillStyle(3002);
  graph->Draw("e3same");
}
else {
    TF1 *fitFun = new TF1("fitFun","pol1", 0, 4);
    fitFun->SetLineColor(4);
    ge3->Fit("fitFun","R+");
    fitFun->Draw("same");
cout<<fitFun->Eval(2.5)<<",  "<<fitFun->Eval(7.5)<<",  "<<fitFun->Eval(45)<<",  "<<fitFun->Eval(55)<<endl;
}

    double chi2 = fitFun->GetChisquare();
    double ndf = fitFun->GetNDF();
   TLatex *tex = new TLatex(0.6,0.53,Form("#chi^{2}/ndf = %2.1f", chi2/ndf));
   tex->SetTextColor(2);
   tex->SetTextSize(16);
   tex->Draw("same");

     
      if(iw==0){
      can->cd(iw+5+1);
      TLatex *tex=new TLatex(1.5,1.18,"20-60%");
      tex->SetTextSize(textsize*1.0);
      tex->Draw();
      }

  }


   can->cd();
   TLatex *   tex = new TLatex(0.06,0.96,"CMS");
   tex->SetNDC();
   tex->SetTextFont(62);
   tex->SetTextSize(0.038);
   tex->SetLineWidth(2);
   tex->Draw();
   TLatex *   tex = new TLatex(0.108,0.96,"Preliminary");
   tex->SetNDC();
   tex->SetTextFont(52);
   tex->SetTextSize(0.038);
   tex->SetLineWidth(2);
   //tex->Draw();
   TLatex *   tex = new TLatex(0.24,0.963,"|#eta|<0.8");
   tex->SetNDC();
   tex->SetTextFont(42);
   tex->SetTextSize(0.038);
   tex->SetLineWidth(2);
   tex->Draw();

  cout << "end of process" << endl;
  can->cd();
  can->Print("./figures/plot_vnpt_5panels_hfSys_ratio.png");
  can->Print("./figures/plot_vnpt_5panels_hfSys_ratio.pdf");
  //can->Print("./figures/plot_vnpt_5panels.gif");
}
Exemplo n.º 16
0
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// DY
//
// channel = SF, MuMu, EE
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void DY(Double_t &yield,
        Double_t &statError,
        Double_t &systError,
        Double_t &scaleFactor,
        Int_t     njet,
        TString   channel,
        TString   directory,
        Bool_t    useDataDriven,
        Int_t     printLevel,
        Bool_t    drawR = false)
{
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    // Input files
    //
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    TString path = Form("%s/%djet/%s/", directory.Data(), njet, channel.Data());

    TFile* inputDYSF   = new TFile(path + "DY.root");
    TFile* inputZZSF   = new TFile(path + "ZZ.root");
    TFile* inputWZSF   = new TFile(path + "WZ.root");
    TFile* inputDataSF = new TFile(path + "DataRun2012_Total.root");
    TFile* inputDataOF = new TFile(Form("%s/%djet/OF/DataRun2012_Total.root", directory.Data(), njet));


    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    // Input histograms
    //
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    TH1F* hNinDYSF  [numberMetCuts];
    TH1F* hNinWZSF  [numberMetCuts];
    TH1F* hNinZZSF  [numberMetCuts];
    TH1F* hNinDataSF[numberMetCuts];
    TH1F* hNinDataOF[numberMetCuts];

    TH1F* hNoutDYSF  [numberMetCuts];
    TH1F* hNoutWZSF  [numberMetCuts];
    TH1F* hNoutZZSF  [numberMetCuts];
    TH1F* hNoutDataSF[numberMetCuts];
    TH1F* hNoutDataOF[numberMetCuts];

    for (UInt_t nC=0; nC<numberMetCuts; nC++) {
        hNinDYSF  [nC] = (TH1F*)inputDYSF  ->Get(Form("hNinZevents%.2f", MetCuts[nC]));
        hNinWZSF  [nC] = (TH1F*)inputWZSF  ->Get(Form("hNinZevents%.2f", MetCuts[nC]));
        hNinZZSF  [nC] = (TH1F*)inputZZSF  ->Get(Form("hNinZevents%.2f", MetCuts[nC]));
        hNinDataSF[nC] = (TH1F*)inputDataSF->Get(Form("hNinZevents%.2f", MetCuts[nC]));
        hNinDataOF[nC] = (TH1F*)inputDataOF->Get(Form("hNinZevents%.2f", MetCuts[nC]));

        hNoutDYSF  [nC] = (TH1F*)inputDYSF  ->Get(Form("hNoutZevents%.2f", MetCuts[nC]));
        hNoutWZSF  [nC] = (TH1F*)inputWZSF  ->Get(Form("hNoutZevents%.2f", MetCuts[nC]));
        hNoutZZSF  [nC] = (TH1F*)inputZZSF  ->Get(Form("hNoutZevents%.2f", MetCuts[nC]));
        hNoutDataSF[nC] = (TH1F*)inputDataSF->Get(Form("hNoutZevents%.2f", MetCuts[nC]));
        hNoutDataOF[nC] = (TH1F*)inputDataOF->Get(Form("hNoutZevents%.2f", MetCuts[nC]));
    }


    // Histogram at analysis level
    //----------------------------------------------------------------------------
    TH1F* hExpectedDYSF = (TH1F*)inputDYSF->Get("hWTopTagging");


    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    // k estimation
    //
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    TFile* inputDYmumu = new TFile(Form("%s/%djet/MuMu/DY.root", directory.Data(), njet));
    TFile* inputDYee   = new TFile(Form("%s/%djet/EE/DY.root",   directory.Data(), njet));

    TH1F* hNinDYmumu = (TH1F*)inputDYmumu->Get("hNinLooseZevents20.00");
    TH1F* hNinDYee   = (TH1F*)inputDYee  ->Get("hNinLooseZevents20.00");

    Double_t NinDYmumu = hNinDYmumu->GetBinContent(2);
    Double_t NinDYee   = hNinDYee  ->GetBinContent(2);

    Double_t k    = 0.5 * (sqrt(NinDYmumu / NinDYee) + sqrt(NinDYee / NinDYmumu));
    Double_t errk = errkSF(NinDYmumu, NinDYee);

    if (channel == "MuMu") {
        k    = 0.5 * sqrt(NinDYmumu / NinDYee);
        errk = errkFunction(NinDYmumu, NinDYee);
    }
    else if (channel == "EE") {
        k    = 0.5 * sqrt(NinDYee / NinDYmumu);
        errk = errkFunction(NinDYee, NinDYmumu);
    }


    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    // Counters
    //
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Double_t NinDYSF  [numberMetCuts];
    Double_t NinWZSF  [numberMetCuts];
    Double_t NinZZSF  [numberMetCuts];
    Double_t NinDataSF[numberMetCuts];
    Double_t NinDataOF[numberMetCuts];

    Double_t NoutDYSF  [numberMetCuts];
    Double_t NoutWZSF  [numberMetCuts];  // Not used for now
    Double_t NoutZZSF  [numberMetCuts];  // Not used for now
    Double_t NoutDataSF[numberMetCuts];
    Double_t NoutDataOF[numberMetCuts];

    for (UInt_t nC=0; nC<numberMetCuts-1; nC++) {
        NinDYSF   [nC] = hNinDYSF   [nC]->GetBinContent(2);
        NinWZSF   [nC] = hNinWZSF   [nC]->GetBinContent(2);
        NinZZSF   [nC] = hNinZZSF   [nC]->GetBinContent(2);
        NinDataSF [nC] = hNinDataSF [nC]->GetBinContent(2);
        NinDataOF [nC] = hNinDataOF [nC]->GetBinContent(2);

        NoutDYSF  [nC] = hNoutDYSF  [nC]->GetBinContent(2);
        NoutWZSF  [nC] = hNoutWZSF  [nC]->GetBinContent(2);
        NoutZZSF  [nC] = hNoutZZSF  [nC]->GetBinContent(2);
        NoutDataSF[nC] = hNoutDataSF[nC]->GetBinContent(2);
        NoutDataOF[nC] = hNoutDataOF[nC]->GetBinContent(2);
    }


    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    // R estimation
    //
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Double_t R       [numberMetCuts];
    Double_t RData   [numberMetCuts];
    Double_t errR    [numberMetCuts];
    Double_t errRData[numberMetCuts];


    // Loop over the met cuts
    //----------------------------------------------------------------------------
    for (UInt_t nC=0; nC<numberMetCuts-1; nC++) {

        R   [nC] = NoutDYSF[nC] / NinDYSF[nC];
        errR[nC] = errRFunction(NoutDYSF[nC], NinDYSF[nC]);

        RData   [nC] = RDataFunction   (NoutDataSF[nC], NoutDataOF[nC], NinDataSF[nC], NinDataOF[nC], k);
        errRData[nC] = errRDataFunction(NoutDataSF[nC], NoutDataOF[nC], NinDataSF[nC], NinDataOF[nC], k, errk);


        if (printLevel > 2) {
            printf("\n %.0f < mpmet < %.0f GeV\n", MetCuts[nC], MetCuts[nC+1]);
            printf(" -------------------------------------------------\n");
            printf("         N^{MC}_{out,SF}   = %6.1f\n", NoutDYSF[nC]);
            printf("         N^{MC}_{in, SF}   = %6.1f\n", NinDYSF[nC]);
            printf("         N^{data}_{out,SF} = %4.0f\n", NoutDataSF[nC]);
            printf("         N^{data}_{out,OF} = %4.0f\n", NoutDataOF[nC]);
            printf("         N^{data}_{in, SF} = %4.0f\n", NinDataSF[nC]);
            printf("         N^{data}_{in, OF} = %4.0f\n", NinDataOF[nC]);
            printf("         k                 = % 5.3f +- %5.3f\n", k,         errk);
            printf("         R^{MC}            = % 5.3f +- %5.3f\n", R[nC],     errR[nC]);
            printf("         R^{data}          = % 5.3f +- %5.3f\n", RData[nC], errRData[nC]);
        }
    }


    // Estimate the R systematic as the difference between R[2] and R[3]
    //----------------------------------------------------------------------------
    Int_t iMaxR = 0;
    Int_t iMinR = 0;

    for (UInt_t nC=0; nC<numberMetCuts-1; nC++) {

        if (R[nC] > 0 && R[nC] > R[iMaxR]) iMaxR = nC;
        if (R[nC] > 0 && R[nC] < R[iMinR]) iMinR = nC;
    }

    Int_t theR = 2;
    Int_t sysR = 3;

    Double_t RelDiffR = (R[theR] > 0) ? fabs(R[theR] - R[sysR]) / R[theR] : -999;


    if (printLevel > 0) {
        printf("\n [%s] R systematic uncertainty\n", channel.Data());
        printf(" -------------------------------------------------\n");
        printf("         min R              = %5.3f\n",     R[iMinR]);
        printf("         max R              = %5.3f\n",     R[iMaxR]);
        printf("         R[%d]               = %5.3f\n",    theR, R[theR]);
        printf("         R[%d]               = %5.3f\n",    sysR, R[sysR]);
        printf("         |R[%d]-R[%d]| / R[%d] = %.1f%s\n", theR, sysR, theR, 1e2*RelDiffR, "%");
        printf("\n");
    }


    // Estimate Nout
    //----------------------------------------------------------------------------
    Double_t NinCountedSFWZ   = NinWZSF  [sysR];
    Double_t NinCountedSFZZ   = NinZZSF  [sysR];
    Double_t NinCountedSFData = NinDataSF[sysR];
    Double_t NinCountedOFData = NinDataOF[sysR];

    Double_t NinEstSFFinal    = NinCountedSFData - k*NinCountedOFData;
    Double_t errNinEstSFFinal = errNinEstFunction(NinCountedSFData, NinCountedOFData, k, errk);

    Double_t NestSFFinal    = R[theR] * NinEstSFFinal;
    Double_t errNestSFFinal = errNestFunction(NestSFFinal, R[theR], errR[theR], NinEstSFFinal, errNinEstSFFinal);

    Double_t NinEstSFNoDibosonFinal    = NinEstSFFinal - NinCountedSFWZ - NinCountedSFZZ;
    Double_t errNinEstSFNoDibosonFinal = errNinEstNoDibosonFunction(NinCountedSFData, k, errk, NinCountedOFData, NinCountedSFWZ, NinCountedSFZZ);

    Double_t NestSFNoDibosonFinal    = R[theR] * NinEstSFNoDibosonFinal;
    Double_t errNestSFNoDibosonFinal = errNestFunction(NestSFNoDibosonFinal, R[theR], errR[theR], NinEstSFNoDibosonFinal, errNinEstSFNoDibosonFinal);
    Double_t totalError              = sqrt(errNestSFNoDibosonFinal*errNestSFNoDibosonFinal + (RelDiffR*NestSFNoDibosonFinal)*(RelDiffR*NestSFNoDibosonFinal));


    Double_t SFsf = NestSFNoDibosonFinal / hExpectedDYSF->GetBinContent(2);


    if (printLevel > 1) {
        printf("\n Analysis results\n");
        printf(" -------------------------------------------------\n");
        printf("         N^{data}_{in,SF} = %4.0f\n", NinCountedSFData);
        printf("         N^{data}_{in,OF} = %4.0f\n", NinCountedOFData);
        printf("         k                = %5.3f +- %5.3f\n", k, errk);
        printf("         R[%d]             = %5.3f +- %5.3f\n", theR, R[theR], errR[theR]);
        printf("         N^{WZ}_{in,SF}   = %7.2f +- %6.2f (stat.) +- %6.2f (syst.)\n",
               NinCountedSFWZ, sqrt(NinCountedSFWZ), 0.1*NinCountedSFWZ);
        printf("         N^{ZZ}_{in,SF}   = %7.2f +- %6.2f (stat.) +- %6.2f (syst.)\n",
               NinCountedSFZZ, sqrt(NinCountedSFZZ), 0.1*NinCountedSFZZ);
        printf("         N^{est}_{in, SF} = %7.2f +- %6.2f\n", NinEstSFFinal, errNinEstSFFinal);
        printf("         N^{est}_{out,SF} = %7.2f +- %6.2f (stat.) +- %6.2f (syst.)\n",
               NestSFFinal, errNestSFFinal, RelDiffR*NestSFFinal);
        printf(" -------------------------------------------------\n");
        printf(" [no VZ] N^{est}_{out,SF} = %7.2f +- %6.2f (stat.) +- %6.2f (syst.) = %7.2f +- %6.2f (stat. + syst.)\n",
               NestSFNoDibosonFinal, errNestSFNoDibosonFinal, RelDiffR*NestSFNoDibosonFinal,
               NestSFNoDibosonFinal, totalError);
        printf("         N^{MC}_{out,SF}  = %7.2f +- %6.2f\n",
               hExpectedDYSF->GetBinContent(2), hExpectedDYSF->GetBinError(2));
        printf("     *** scale factor     = %.3f\n\n", SFsf);
    }


    // Save the result
    //----------------------------------------------------------------------------
    yield       = (useDataDriven) ? NestSFNoDibosonFinal : hExpectedDYSF->GetBinContent(2);
    statError   = errNestSFNoDibosonFinal;
    systError   = RelDiffR*NestSFNoDibosonFinal;
    scaleFactor = yield / hExpectedDYSF->GetBinContent(2);


    // For the note
    //----------------------------------------------------------------------------
    if (printLevel > 0) {
        printf("\n [%s] DY values for the note\n", channel.Data());
        printf(" -------------------------------------------------\n");
        printf(" final state   &             R_{MC}  &  N^{control,data}  &     N_{DY}^{data}  &       N_{DY}^{MC}  &  data/MC\n");
        printf(" same flavour  &  %5.3f $\\pm$ %5.3f  &              %4.0f  &  %5.1f $\\pm$ %4.1f  &  %5.1f $\\pm$ %4.1f  &     %4.1f\n\n",
               R[theR],
               errR[theR],
               NinCountedSFData,
               yield,
               statError,
               hExpectedDYSF->GetBinContent(2),
               hExpectedDYSF->GetBinError(2),
               scaleFactor);
        printf("\n [%s] DY relative systematic uncertainties\n", channel.Data());
        printf(" -------------------------------------------------\n");
        printf(" DY normalisation = %.0f (stat.) $\\bigoplus$ %.0f (syst.)\n\n",
               1e2*statError/yield, 1e2*systError/yield);
    }


    // Check
    //----------------------------------------------------------------------------
    Double_t check = hExpectedDYSF->GetBinContent(2) - NoutDYSF[sysR];
    if (check != 0) printf(" WARNING: DY yields do not much by %f\n\n", check);


    // Draw histograms
    //----------------------------------------------------------------------------
    if (drawR) {

        Double_t absoluteMin = 999;

        TGraphErrors* gR     = new TGraphErrors(numberMetCuts-1);
        TGraphErrors* gRdata = new TGraphErrors(numberMetCuts-1);

        for (UInt_t i=0; i<numberMetCuts-1; i++) {

            gR->SetPoint     (i, 0.5 * (MetDraw[i+1] + MetDraw[i]),    R[i]);
            gR->SetPointError(i, 0.5 * (MetDraw[i+1] - MetDraw[i]), errR[i]);

            gRdata->SetPoint     (i, 0.5 * (MetDraw[i+1] + MetDraw[i]),    RData[i]);
            gRdata->SetPointError(i, 0.5 * (MetDraw[i+1] - MetDraw[i]), errRData[i]);

            if (absoluteMin > (R[i]     - errR[i]))     absoluteMin = R[i]     - errR[i];
            if (absoluteMin > (RData[i] - errRData[i])) absoluteMin = RData[i] - errRData[i];
        }

        if (absoluteMin > 0) absoluteMin = 0;


        // Cosmetics
        //--------------------------------------------------------------------------
        gR->SetMarkerSize (0.9);
        gR->SetMarkerStyle(kFullCircle);

        gRdata->SetLineColor  (kRed+1);
        gRdata->SetMarkerColor(kRed+1);
        gRdata->SetMarkerSize (0.9);
        gRdata->SetMarkerStyle(kFullCircle);


        // Draw
        //--------------------------------------------------------------------------
        canvas = new TCanvas();

        TMultiGraph *mgR = new TMultiGraph();
        mgR->Add(gRdata);
        mgR->Add(gR);

        mgR->Draw("ap");

        mgR->GetYaxis()->SetTitle("R^{out/in}");
        mgR->GetXaxis()->SetTitle("mpmet (GeV)");

        mgR->SetMinimum(absoluteMin - 0.1);
        mgR->SetMaximum(1.0);


        // Legend
        //--------------------------------------------------------------------------
        TLegend* lmgR = new TLegend(0.72, 0.68, 0.92, 0.88);

        lmgR->AddEntry(gR,    " DY MC", "lp");
        lmgR->AddEntry(gRdata," data",  "lp");

        lmgR->SetFillColor(0);
        lmgR->SetTextAlign(12);
        lmgR->SetTextFont (42);
        lmgR->SetTextSize (0.04);

        if      (channel == "SF")   lmgR->SetHeader("ee + #mu#mu");
        else if (channel == "EE")   lmgR->SetHeader("ee");
        else if (channel == "MuMu") lmgR->SetHeader("#mu#mu");

        lmgR->Draw("same");


        // Line at zero
        //--------------------------------------------------------------------------
        TLine* zeroLine = new TLine(canvas->GetUxmin(), 0.0, canvas->GetUxmax(), 0.0);
        zeroLine->SetLineStyle(3);
        zeroLine->SetLineWidth(2);
        zeroLine->Draw("same");
        mgR->Draw("p,same");


        // Save
        //--------------------------------------------------------------------------
        canvas->SaveAs("R_" + channel + ".png");
    }
}
Exemplo n.º 17
0
void QCD_Background_Estimator(bool removeMC = false)
{
  TFile* file1 = TFile::Open("outputFile_Mu_Run2010A_Sep17thReReco.root");
  TH2F* histo1 = static_cast<TH2F*>(file1->Get("relIso_Vs_d0"));
  TH2F* histo2 = static_cast<TH2F*>(file1->Get("relIso_Vs_d0_tagRatePred"));
  TH2F* histo3 = static_cast<TH2F*>(file1->Get("relIso_Vs_d0_tagRateObs"));
  TH2F* histo4 = static_cast<TH2F*>(file1->Get("relIso_Vs_d0_tagRatePredLowError"));
  TH2F* histo5 = static_cast<TH2F*>(file1->Get("relIso_Vs_d0_tagRatePredHighError"));
  histo1->SetStats(false);
  histo1->GetXaxis()->SetTitle("d_{0} (cm)");
  histo1->GetYaxis()->SetTitle("relIso");

  TFile* file2 = TFile::Open("outputFile_Mu_Run2010B_PromptReco_Part1.root");
  histo1->Add(static_cast<TH2F*>(file2->Get("relIso_Vs_d0")));
  histo2->Add(static_cast<TH2F*>(file2->Get("relIso_Vs_d0_tagRatePred")));
  histo3->Add(static_cast<TH2F*>(file2->Get("relIso_Vs_d0_tagRateObs")));
  histo4->Add(static_cast<TH2F*>(file2->Get("relIso_Vs_d0_tagRatePredLowError")));
  histo5->Add(static_cast<TH2F*>(file2->Get("relIso_Vs_d0_tagRatePredHighError")));

  TFile* file3 = TFile::Open("outputFile_Mu_Run2010B_PromptReco_Part2.root");
  histo1->Add(static_cast<TH2F*>(file3->Get("relIso_Vs_d0")));
  histo2->Add(static_cast<TH2F*>(file3->Get("relIso_Vs_d0_tagRatePred")));
  histo3->Add(static_cast<TH2F*>(file3->Get("relIso_Vs_d0_tagRateObs")));
  histo4->Add(static_cast<TH2F*>(file3->Get("relIso_Vs_d0_tagRatePredLowError")));
  histo5->Add(static_cast<TH2F*>(file3->Get("relIso_Vs_d0_tagRatePredHighError")));

  TFile* file4 = TFile::Open("outputFile_Mu_Run2010B_PromptReco_Part3.root");
  histo1->Add(static_cast<TH2F*>(file4->Get("relIso_Vs_d0")));
  histo2->Add(static_cast<TH2F*>(file4->Get("relIso_Vs_d0_tagRatePred")));
  histo3->Add(static_cast<TH2F*>(file4->Get("relIso_Vs_d0_tagRateObs")));
  histo4->Add(static_cast<TH2F*>(file4->Get("relIso_Vs_d0_tagRatePredLowError")));
  histo5->Add(static_cast<TH2F*>(file4->Get("relIso_Vs_d0_tagRatePredHighError")));

  if(removeMC)
  {
    TFile* ttbarFile = TFile::Open("old_outputFile_TTbarJets.root");
    histo1->Add(static_cast<TH2F*>(ttbarFile->Get("relIso_Vs_d0")), -15.07 / 8978.93);
    histo2->Add(static_cast<TH2F*>(ttbarFile->Get("relIso_Vs_d0_tagRatePred")), -15.07 / 8978.93);
    histo3->Add(static_cast<TH2F*>(ttbarFile->Get("relIso_Vs_d0_tagRateObs")), -15.07 / 8978.93);

    TFile* wFile = TFile::Open("old_outputFile_WJets.root");
    histo1->Add(static_cast<TH2F*>(wFile->Get("relIso_Vs_d0")), -15.07 / 241.16);
    histo2->Add(static_cast<TH2F*>(wFile->Get("relIso_Vs_d0_tagRatePred")), -15.07 / 241.16);
    histo3->Add(static_cast<TH2F*>(wFile->Get("relIso_Vs_d0_tagRateObs")), -15.07 / 241.16);
  }

  double N_ATotal = histo1->Integral(1, 8, 1, 1);
  std::cout << "N_ATotal = " << N_ATotal << std::endl;
  double N_B = histo1->Integral(1, 8, 29, 100);
  std::cout << "N_B = " << N_B << std::endl;
  double N_C = histo1->Integral(15, 100, 1, 1);
  std::cout << "N_C = " << N_C << std::endl;
  double N_D = histo1->Integral(15, 100, 29, 100);
  std::cout << "N_D = " << N_D << std::endl;
  double N_ACalc = N_B * N_C / N_D;
  double N_ACalcError = ABCDError(N_B, N_C, N_D);
  std::cout << "N_ACalc = " << N_ACalc << " +/- " << N_ACalcError << std::endl;
  double F_QCD = N_ACalc / N_ATotal;
  double F_QCD_Error = FQCDError(N_ACalc, N_ACalcError, N_ATotal);
  std::cout << "F_QCD = " << F_QCD << " +/- " << F_QCD_Error << std::endl;

  double N_E = histo1->Integral(1, 8, 2, 29);
  std::cout << "N_E = " << N_E << std::endl;
  double N_F = histo1->Integral(15, 100, 2, 29);
  std::cout << "N_F = " << N_F << std::endl;
  double F_QCD_E = N_B * N_F / (N_E * N_D);
  std::cout << "F_QCD_E = " << F_QCD_E << std::endl;

  double N_B_TagPred = histo2->Integral(1, 8, 29, 100);
  std::cout << "N_B_TagPred = " << N_B_TagPred << std::endl;
  double N_B_TagObs = histo3->Integral(1, 8, 29, 100);
  std::cout << "N_B_TagObs = " << N_B_TagObs << std::endl;
  double k = N_B_TagObs / N_B_TagPred;
  double N_B_LowError = histo4->Integral(1, 8, 29, 100);
  double N_B_HighError = histo5->Integral(1, 8, 29, 100);
  std::pair<double, double> k_error = kerror(N_B_TagObs, N_B_TagPred, N_B_LowError, N_B_HighError);
  std::cout << "k = " << k << " + " << k_error.second << " - " << k_error.first << std::endl;

  std::cout << "F_QCD * k = " << F_QCD * k << std::endl;

  histo1->Draw("box");
  TLine* Atop = new TLine(0, 0.05, 0.02, 0.05);
  Atop->SetLineColor(2);
  Atop->SetLineWidth(2);
  Atop->Draw("same");
}
void createWorkspace(const std::string &infilename, int nState, bool correctCtau, bool drawRapPt2D, bool drawPtCPM2D){
	gROOT->SetStyle("Plain");
	gStyle->SetTitleBorderSize(0);

	// Set some strings
	const std::string workspacename = "ws_masslifetime",
				treename = "selectedData";

	// Get the tree from the data file
	TFile *f = TFile::Open(infilename.c_str());
	TTree *tree = (TTree*)f->Get(treename.c_str());

	// Set branch addresses in tree to be able to import tree to roofit
	TLorentzVector* jpsi = new TLorentzVector;
	tree->SetBranchAddress("JpsiP",&jpsi);
	double CPMval = 0;
	tree->SetBranchAddress("CPM",&CPMval);
	double massErr = 0;
	tree->SetBranchAddress("JpsiMassErr",&massErr);
	double Vprob = 0;
	tree->SetBranchAddress("JpsiVprob",&Vprob);
	double lifetime = 0;
	tree->SetBranchAddress("Jpsict",&lifetime);
	double lifetimeErr = 0;
	tree->SetBranchAddress("JpsictErr",&lifetimeErr);

	// define variables necessary for J/Psi(Psi(2S)) mass,lifetime fit
	RooRealVar* JpsiMass =
		new RooRealVar("JpsiMass", "M [GeV]", onia::massMin, onia::massMax);
	RooRealVar* JpsiMassErr =
		new RooRealVar("JpsiMassErr", "#delta M [GeV]", 0, 5);
	RooRealVar* JpsiRap =
		new RooRealVar("JpsiRap", "y", -onia::rap, onia::rap);
	RooRealVar* JpsiPt =
		new RooRealVar("JpsiPt", "p_{T} [GeV]", 0. ,100.);
	RooRealVar* JpsiCPM =
		new RooRealVar("JpsiCPM", "N_{ch}", 0. ,100.);		
	RooRealVar* Jpsict =
		new RooRealVar("Jpsict", "lifetime [mm]", -1., 2.5);
	RooRealVar* JpsictErr =
		new RooRealVar("JpsictErr", "Error on lifetime [mm]", 0.0001, 1);
	RooRealVar* JpsiVprob =
		new RooRealVar("JpsiVprob", "", 0.01, 1.);

	// Set bins
	Jpsict->setBins(10000,"cache");
	Jpsict->setBins(100);
	JpsiMass->setBins(100);
	JpsictErr->setBins(100);

	// The list of data variables    
	RooArgList dataVars(*JpsiMass,*JpsiMassErr,*JpsiRap,*JpsiPt,*JpsiCPM,*Jpsict,*JpsictErr,*JpsiVprob);

	// construct dataset to contain events
	RooDataSet* fullData = new RooDataSet("fullData","The Full Data From the Input ROOT Trees",dataVars);

	int entries = tree->GetEntries();
	cout << "entries " << entries << endl;

	// loop through events in tree and save them to dataset
	for (int ientries = 0; ientries < entries; ientries++) {
	
		if (ientries%100000==0) std::cout << "event " << ientries << " of " << entries <<  std::endl;

		tree->GetEntry(ientries);

		double M =jpsi->M();
		double y=jpsi->Rapidity();
		double pt=jpsi->Pt();
		double cpm=CPMval;


		if (M > JpsiMass->getMin() && M < JpsiMass->getMax()
				&& massErr > JpsiMassErr->getMin() && massErr < JpsiMassErr->getMax()
				&& pt > JpsiPt->getMin() && pt < JpsiPt->getMax()
				&& cpm > JpsiCPM->getMin() && cpm < JpsiCPM->getMax()
				&& y > JpsiRap->getMin() && y < JpsiRap->getMax()
				&& lifetime > Jpsict->getMin() && lifetime < Jpsict->getMax()
				&& lifetimeErr > JpsictErr->getMin() && lifetimeErr < JpsictErr->getMax()
				&& Vprob > JpsiVprob->getMin() && Vprob < JpsiVprob->getMax()
			 ){

			JpsiPt      ->setVal(pt); 
			JpsiCPM		->setVal(cpm);
			JpsiRap     ->setVal(y); 
			JpsiMass    ->setVal(M);
			JpsiMassErr ->setVal(massErr);
			JpsiVprob   ->setVal(Vprob);

			//cout<<"before lifetime correction \n"
			//	<<"Jpsict: "<<lifetime<<" JpsictErr: "<<lifetimeErr<<endl;

			if(correctCtau){
				lifetime    = lifetime    * onia::MpsiPDG / M ;
				lifetimeErr = lifetimeErr * onia::MpsiPDG / M ;
				Jpsict    ->setVal(lifetime);
				JpsictErr ->setVal(lifetimeErr);
				//cout<<"MpsiPDG: "<<onia::MpsiPDG<<endl;
				//cout<<"after lifetime correction \n"
				//	<<"Jpsict: "<<lifetime<<" JpsictErr: "<<lifetimeErr<<endl;
			}
			else{
				Jpsict    ->setVal(lifetime);
				JpsictErr ->setVal(lifetimeErr);
			}

			fullData->add(dataVars);
		}
	}//ientries


	//------------------------------------------------------------------------------------------------------------------
	// Define workspace and import datasets

	////Get datasets binned in pT, cpm, and y

		for(int iRap = 1; iRap <= onia::kNbRapForPTBins; iRap++){ 

		Double_t yMin;
		Double_t yMax;
		if(iRap==0){
			yMin = onia::rapForPTRange[0];
			yMax = onia::rapForPTRange[onia::kNbRapForPTBins];
		} else{
			yMin = onia::rapForPTRange[iRap-1];
			yMax = onia::rapForPTRange[iRap];
		}

		for(int iPT = 1; iPT <= onia::kNbPTBins[iRap]; iPT++){
			//for(int iPT = 0; iPT <= 0; iPT++)

			Double_t ptMin;
			Double_t ptMax;
			if(iPT==0){
				ptMin = onia::pTRange[iRap][0];
				ptMax = onia::pTRange[iRap][onia::kNbPTBins[0]];
			} else{
				ptMin = onia::pTRange[iRap][iPT-1];
				ptMax = onia::pTRange[iRap][iPT];
			}
			
		  for(int iCPM = 1; iCPM <= onia::NchBins; iCPM++){
		  
		  
	  	    Double_t cpmMin;
			Double_t cpmMax;
			if(iCPM==0){
				cpmMin = onia::cpmRange[0];
				cpmMax = onia::cpmRange[onia::NchBins];
			} else{
				cpmMin = onia::cpmRange[iCPM-1];
				cpmMax = onia::cpmRange[iCPM];
			}

			// output file name and workspace
			std::stringstream outfilename;
			outfilename << "tmpFiles/backupWorkSpace/fit_Psi" << nState-3 << "S_rap" << iRap << "_pt" << iPT << "_cpm" << iCPM << ".root";
//			outfilename << "tmpFiles/fit_Psi" << nState-3 << "S_rap" << iRap << "_pt" << iPT << ".root";			
			RooWorkspace* ws = new RooWorkspace(workspacename.c_str());

			// define pt and y cuts on dataset
			std::stringstream cutString;
			cutString << "(JpsiCPM > " << cpmMin << " && JpsiCPM < "<< cpmMax << ") && " << "(JpsiPt >= " << ptMin << " && JpsiPt < "<< ptMax << ") && "
				<< "(TMath::Abs(JpsiRap) >= " << yMin << " && TMath::Abs(JpsiRap) < " << yMax << ")";

			cout << "cutString: " << cutString.str().c_str() << endl;

			// get the dataset for the fit
			RooDataSet* binData = (RooDataSet*)fullData->reduce(cutString.str().c_str());
			std::stringstream name;
			name << "data_rap" << iRap << "_pt" << iPT << "_cpm" << iCPM;;
			binData->SetNameTitle(name.str().c_str(), "Data For Fitting");    

			// Import variables to workspace
			ws->import(*binData);
			ws->writeToFile(outfilename.str().c_str());
			
		  }//iCPM
		}//iPT
	}//iRap

	////---------------------------------------------------------------
	////--Integrating rapidity and pt bins, in +/- 3*sigma mass window
	////---------------------------------------------------------------
	if(drawRapPt2D){
		double yMin = onia::rapForPTRange[0];
		double yMax = onia::rapForPTRange[onia::kNbRapForPTBins];
		double ptMin =  onia::pTRange[0][0];
		double ptMax =  onia::pTRange[0][onia::kNbPTBins[0]];
		double cpmMin =  onia::cpmRange[0];
		double cpmMax =  onia::cpmRange[onia::NchBins];		

		std::stringstream cutRapPt;
		cutRapPt << "(JpsiCPM > " << cpmMin << " && JpsiCPM < "<< cpmMax << ") && "
			<< "(JpsiPt > " << ptMin << " && JpsiPt < "<< ptMax << ") && "
			<< "(TMath::Abs(JpsiRap) > " << yMin << " && TMath::Abs(JpsiRap) < " << yMax << ")";
		cout<<"cutRapPt: "<<cutRapPt.str().c_str()<<endl;

		RooDataSet* rapPtData = (RooDataSet*)fullData->reduce(cutRapPt.str().c_str());
		std::stringstream nameRapPt;
		nameRapPt << "data_rap0_pt0_cpm0";
		rapPtData->SetNameTitle(nameRapPt.str().c_str(), "Data For full rap and pt");

		// output file name and workspace
		std::stringstream outfilename;
		outfilename << "tmpFiles/backupWorkSpace/fit_Psi" << nState-3 << "S_rap0_pt0_cpm0.root";
		RooWorkspace* ws_RapPt = new RooWorkspace(workspacename.c_str());
		//Import variables to workspace
		ws_RapPt->import(*rapPtData);
		ws_RapPt->writeToFile(outfilename.str().c_str());

		TH2D* rapPt;
		TH1D* rap1p2;
		double MassMin;
		double MassMax;

		rap1p2 = new TH1D("rap1p2","rap1p2",30,0, 1.8); 
		if(nState==4){
			rapPt = new TH2D( "rapPt", "rapPt", 52,-1.3,1.3,144,0,72);
			MassMin=3.011;//massPsi1S-onia::nSigMass*sigma1S;
			MassMax=3.174;//massPsi1S+onia::nSigMass*sigma1S;
			// sigma  27.2 MeV
			// mean 3.093 GeV
		}
		if(nState==5){
			rapPt = new TH2D( "rapPt", "rapPt", 64,-1.6,1.6,144,0,72); //  rap<1.5
			//rapPt = new TH2D( "rapPt", "rapPt", 52,-1.3,1.3,144,0,72); //  rap<1.2
			MassMin=3.576;//massPsi2S-onia::nSigMass*sigma2S;
			MassMax=3.786;//massPsi2S+onia::nSigMass*sigma2S;
			// sigma 34.9 MeV // pT > 7
			// sigma 34.3 MeV // pT > 10
			// mean 3.681 GeV
		}

		cout<<"Plotting rap-Pt for Psi"<<nState-3<<"S"<<endl;
		cout<<"MassMin for rap-Pt plot = "<<MassMin<<endl;
		cout<<"MassMax for rap-Pt plot = "<<MassMax<<endl;

		TTree *rapPtTree = (TTree*)rapPtData->tree();
		std::stringstream cutMass;
		cutMass<<"(JpsiMass > " << MassMin << " && JpsiMass < "<< MassMax << ")";
		//following two methods can only be used in root_v30, 34 does not work
		rapPtTree->Draw("JpsiPt:JpsiRap>>rapPt",cutMass.str().c_str(),"colz");
		cout<<"debug"<<endl;
		rapPtTree->Draw("TMath::Abs(JpsiRap)>>rap1p2",cutMass.str().c_str());

		TCanvas* c2 = new TCanvas("c2","c2",1200,1500);
		rapPt->SetYTitle("p_{T}(#mu#mu) [GeV]");
		rapPt->SetXTitle("y(#mu#mu)");
		gStyle->SetPalette(1);
		gPad->SetFillColor(kWhite);
		rapPt->SetTitle(0);
		rapPt->SetStats(0);
		gPad->SetLeftMargin(0.15);
		gPad->SetRightMargin(0.17);
		rapPt->GetYaxis()->SetTitleOffset(1.5);
		rapPt->Draw("colz");

		TLine* rapPtLine;

		for(int iRap=0;iRap<onia::kNbRapForPTBins+1;iRap++){
			rapPtLine= new TLine( -onia::rapForPTRange[iRap], onia::pTRange[0][0], -onia::rapForPTRange[iRap], onia::pTRange[0][onia::kNbPTBins[iRap]] );
			rapPtLine->SetLineWidth( 2 );
			rapPtLine->SetLineStyle( 1 );
			rapPtLine->SetLineColor( kWhite );
			rapPtLine->Draw();
			rapPtLine= new TLine( onia::rapForPTRange[iRap], onia::pTRange[0][0], onia::rapForPTRange[iRap], onia::pTRange[0][onia::kNbPTBins[iRap]] );
			rapPtLine->SetLineWidth( 2 );
			rapPtLine->SetLineStyle( 1 );
			rapPtLine->SetLineColor( kWhite );
			rapPtLine->Draw();
			int pTBegin = 0;
			if(nState==5) pTBegin = 1;
			for(int iPt=pTBegin;iPt<onia::kNbPTBins[iRap]+1;iPt++){
				rapPtLine= new TLine( -onia::rapForPTRange[onia::kNbRapForPTBins], onia::pTRange[0][iPt], onia::rapForPTRange[onia::kNbRapForPTBins], onia::pTRange[0][iPt] );
				rapPtLine->SetLineWidth( 2 );
				rapPtLine->SetLineStyle( 1 );
				rapPtLine->SetLineColor( kWhite );
				rapPtLine->Draw();
			}
		}

		char savename[200];
		sprintf(savename,"Fit/rapPt_Psi%dS.pdf",nState-3);
		c2->SaveAs(savename);
		TCanvas* c3 = new TCanvas("c3","c3",1500,1200);
		rap1p2->SetYTitle("Events");
		rap1p2->SetXTitle("y(#mu#mu)");
		rap1p2->SetTitle(0);
		rap1p2->SetStats(0);
		rap1p2->GetYaxis()->SetTitleOffset(1.2);
		rap1p2->Draw();
		sprintf(savename,"Fit/rapDimuon_1p2_Psi%dS.pdf",nState-3);
		c3->SaveAs(savename);
	}
	
	if(drawPtCPM2D){
		double yMin = onia::rapForPTRange[0];
		double yMax = onia::rapForPTRange[onia::kNbRapForPTBins];
		double ptMin =  onia::pTRange[0][0];
		double ptMax =  onia::pTRange[0][onia::kNbPTBins[0]];
		double cpmMin =  onia::cpmRange[0];
		double cpmMax =  onia::cpmRange[onia::NchBins];		

		std::stringstream cutRapPt;
		cutRapPt << "(JpsiCPM > " << cpmMin << " && JpsiCPM < "<< cpmMax << ") && "
			<< "(JpsiPt > " << ptMin << " && JpsiPt < "<< ptMax << ") && "
			<< "(TMath::Abs(JpsiRap) > " << yMin << " && TMath::Abs(JpsiRap) < " << yMax << ")";
		cout<<"cutRapPt: "<<cutRapPt.str().c_str()<<endl;

		RooDataSet* rapPtData = (RooDataSet*)fullData->reduce(cutRapPt.str().c_str());
		std::stringstream nameRapPt;
		nameRapPt << "data_rap0_pt0_cpm0";
		rapPtData->SetNameTitle(nameRapPt.str().c_str(), "Data For full rap and pt");

		// output file name and workspace
		std::stringstream outfilename;
		outfilename << "tmpFiles/backupWorkSpace/fit_Psi" << nState-3 << "S_rap0_pt0_cpm0.root";
		RooWorkspace* ws_RapPt = new RooWorkspace(workspacename.c_str());
		//Import variables to workspace
		ws_RapPt->import(*rapPtData);
		ws_RapPt->writeToFile(outfilename.str().c_str());

		TH2D* PtCPM;
		double MassMin;
		double MassMax;

		if(nState==4){
			PtCPM = new TH2D( "PtCPM", "PtCPM", 100,0,50,200,0,100);
			MassMin=3.011;//massPsi1S-onia::nSigMass*sigma1S;
			MassMax=3.174;//massPsi1S+onia::nSigMass*sigma1S;
			// sigma  27.2 MeV
			// mean 3.093 GeV
		}
		if(nState==5){
			PtCPM = new TH2D( "PtCPM", "PtCPM", 100,0,50,200,0,100); //  rap<1.5
			//rapPt = new TH2D( "rapPt", "rapPt", 52,-1.3,1.3,144,0,72); //  rap<1.2
			MassMin=3.576;//massPsi2S-onia::nSigMass*sigma2S;
			MassMax=3.786;//massPsi2S+onia::nSigMass*sigma2S;
			// sigma 34.9 MeV // pT > 7
			// sigma 34.3 MeV // pT > 10
			// mean 3.681 GeV
		}

		cout<<"Plotting Pt-CPM for Psi"<<nState-3<<"S"<<endl;
		cout<<"MassMin for Pt-CPM plot = "<<MassMin<<endl;
		cout<<"MassMax for Pt-CPM plot = "<<MassMax<<endl;

		TTree *rapPtTree = (TTree*)rapPtData->tree();
		std::stringstream cutMass;
		cutMass<<"(JpsiMass > " << MassMin << " && JpsiMass < "<< MassMax << ")";
		//following two methods can only be used in root_v30, 34 does not work
		rapPtTree->Draw("JpsiCPM:JpsiPt>>PtCPM",cutMass.str().c_str(),"colz");
		cout<<"debug"<<endl;

		TCanvas* c2 = new TCanvas("c2","c2",1200,1500);
		PtCPM->SetYTitle("N_{ch}");
		PtCPM->SetXTitle("p_{T}(#mu#mu) [GeV]");
		gStyle->SetPalette(1);
		gPad->SetFillColor(kWhite);
		PtCPM->SetTitle(0);
		PtCPM->SetStats(0);
		gPad->SetLeftMargin(0.15);
		gPad->SetRightMargin(0.17);
		PtCPM->GetYaxis()->SetTitleOffset(1.5);
		PtCPM->Draw("colz");

		TLine* PtCPMLine;

		int iRap=0;
		for(int iPt=0;iPt<onia::kNbPTMaxBins+1;iPt++){
		int cpmBegin = 0;
			if(nState==5) cpmBegin = 1;
			for(int icpm=cpmBegin;icpm<onia::NchBins+1;icpm++){
			
			PtCPMLine= new TLine( onia::pTRange[iRap][0], onia::cpmRange[icpm], onia::pTRange[iRap][onia::kNbPTMaxBins], onia::cpmRange[icpm] );
			PtCPMLine->SetLineWidth( 2 );
			PtCPMLine->SetLineStyle( 1 );
			PtCPMLine->SetLineColor( kWhite );
			PtCPMLine->Draw();
			PtCPMLine= new TLine( onia::pTRange[iRap][iPt], onia::cpmRange[0], onia::pTRange[iRap][iPt], onia::cpmRange[onia::NchBins] );
			PtCPMLine->SetLineWidth( 2 );
			PtCPMLine->SetLineStyle( 1 );
			PtCPMLine->SetLineColor( kWhite );
			PtCPMLine->Draw();

			
//				PtCPMLine= new TLine( onia::pTRange[0][onia::kNbPTMaxBins], onia::cpmRange[icpm], onia::pTRange[0][onia::kNbPTMaxBins], onia::cpmRange[icpm] );
//				PtCPMLine->SetLineWidth( 2 );
//				PtCPMLine->SetLineStyle( 1 );
//				PtCPMLine->SetLineColor( kWhite );
//				PtCPMLine->Draw();
			}
		}

		char savename[200];
		sprintf(savename,"Fit/PtCPM_Psi%dS.pdf",nState-3);
		c2->SaveAs(savename);
	}

	f->Close();
}
Exemplo n.º 19
0
void outputBDTplots(TString setup, TString MVA, TString dir, int MSTOP, int MLSP,bool lineacut,bool logbool){


	  gStyle->SetOptStat(0);
	  gStyle->SetCanvasColor(0);
	  gStyle->SetPadColor(0);
	  gStyle->SetMarkerStyle(15);
	  gStyle->SetMarkerSize(0.25);
	  gStyle->SetTextFont(42);
	  gStyle->SetMarkerColor(37);


          std::ostringstream ostr1;
          ostr1 << MSTOP; 
          std::string stop = ostr1.str();

          std::ostringstream ostr2;
          ostr2 << MLSP;
          std::string neut = ostr2.str();

          TString ntpdir ="ntuples_bestset_t2tt_good"; 
	  TString dataset_name;
          TString datasetnombre;
	
	
	  if (dir == "T2bw025") {dataset_name = "t2bw_025";}
	  if (dir == "T2bw050") {dataset_name = "t2bw_050";}
	  if (dir == "T2bw075") {dataset_name = "t2bw_075";}
	  if (dir == "T2tt") {dataset_name = "t2tt_all";}
	  if (dir == "T2tt") {datasetnombre = "t2tt_half";}
	  
          TFile ttbar(ntpdir+"/"+setup+"/"+dir+"/ttbar/output/ttbar_all_0.root");
          TFile wjets(ntpdir+"/"+setup+"/"+dir+"/wjets/output/wjets_all_0.root");
          TFile others(ntpdir+"/"+setup+"/"+dir+"/others/output/others_all_0.root");
          TFile sig(ntpdir+"/"+setup+"/"+dir+"/signal/"+TString(stop)+"/"+TString(neut)+"/output/"+dataset_name+"_0.root");



	  TH1D* TTBar= (TH1D*)ttbar.Get(MVA);
	  TH1D* WJets= (TH1D*)wjets.Get(MVA);
	  TH1D* Others= (TH1D*)others.Get(MVA);
	  TH1D* signal= (TH1D*)sig.Get(MVA);

	  TTBar->SetFillColor(40);
	  TTBar->SetFillStyle(3001);
	  TTBar->SetLineWidth(0.);
	  signal->SetLineColor(kRed);
	  signal->SetLineWidth(2.);


    	  WJets->SetFillColor(41);
    	  Others->SetFillColor(43);
	  
		  
	  
          THStack *stack= new THStack("stack", "");
          stack->Add(Others);
          stack->Add(WJets);
          stack->Add(TTBar);

         

          int nbins = TTBar->GetNbinsX();
          double hmin = TTBar->GetXaxis()->GetBinLowEdge(1);
          double hmax = TTBar->GetXaxis()->GetBinUpEdge(nbins);


          TH1D* SoB = new TH1D("","",nbins,hmin,hmax);
          int max_bin;
          double cutvalue; 
	  double nsignal = signal->Integral();




          SoB->SetLineColor(kBlue);
          SoB->SetLineWidth(2.);




	      for(int b=1; b<=nbins; ++b){

	      //cout << "Bkg: " << TTBar->Integral(b,nbins+1) << endl;
	      //cout << "Sig: " << signal->Integral(b,nbins+1) << endl;

	      double sig_ = signal->Integral(b,nbins+1);
	      double bkg_ = TTBar->Integral(b,nbins+1) + WJets->Integral(b,nbins+1) + Others->Integral(b,nbins+1);
	      
	      double SoSqrtB = calcSoSqrtB(sig_, bkg_ );

	      SoB->SetBinContent(b,SoSqrtB);

	      }


	/*      double bkgcut=0.;

 if (MLSP==150 && (MSTOP ==300 || MSTOP == 400 ||  MSTOP == 500 || MSTOP == 600 || MSTOP == 700 || MSTOP == 800)){
	     
	     double binR1=TTBar->FindBin(0.25);
	     double binR2=TTBar->FindBin(0.4);
	     double binR3=TTBar->FindBin(0.5);
	     double binR4=TTBar->FindBin(0.5);
	     double binR5=TTBar->FindBin(0.4);
	     double binR6=TTBar->FindBin(0.1);
	     
	     TH1F *histobackground=(TH1F*)TTBar->Clone();
	     histobackground->Add(WJets);
	     histobackground->Add(Others);
	     
	     //histobackground->SetAxisRange(0.3,1,"X");
	    	      
	      if (MSTOP==300)  cout << TTBar->Integral(binR1,nbins+1)+Others->Integral(binR1,nbins+1)+WJets->Integral(binR1,nbins+1) << " +/- "  << sqrt(histobackground->Integral(binR1,nbins+1)) <<  endl; 
	      if (MSTOP==400)  cout << histobackground->Integral(binR2,nbins+1) << " +/- "  << sqrt(histobackground->Integral(binR2,nbins+1)) <<  endl;  
	      if (MSTOP==500)  cout << histobackground->Integral(binR3,nbins+1) << " +/- "  << sqrt(histobackground->Integral(binR3,nbins+1)) <<  endl;  
	      if (MSTOP==600)  cout << histobackground->Integral(binR4,nbins+1) << " +/- "  << sqrt(histobackground->Integral(binR4,nbins+1)) <<  endl;  
	      if (MSTOP==700)  cout << histobackground->Integral(binR5,nbins+1) << " +/- "  << sqrt(histobackground->Integral(binR5,nbins+1)) <<  endl;  
	      if (MSTOP==800)  cout << histobackground->Integral(binR6,nbins+1) << " +/- "  << sqrt(histobackground->Integral(binR6,nbins+1)) <<  endl;  

	       }*/
 


	   max_bin = maxbin(SoB);
	   cutvalue = TTBar->GetBinLowEdge(max_bin);
           

	   double sob = SoB->GetBinContent(max_bin);

       	   char cutval_[32];
	   snprintf(cutval_, 32, "%.1g", cutvalue);
       	   char fom_[32];
	   snprintf(fom_, 32, "%.2g", sob);
       	   char signal_[32];
	   snprintf(signal_, 32, "%.2g", nsignal);

           TLegendEntry *legge;
           TLegend *leg;
           leg = new TLegend(0.6,0.55,0.9,0.85);
           leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextSize(0.043);
           legge = leg->AddEntry(TTBar,   "t#bar{t} + Jets", "F");
           legge = leg->AddEntry(WJets,   "W + Jets", "F");
           legge = leg->AddEntry(Others,   "Others", "F");
           legge = leg->AddEntry(signal, "sig("+TString(stop)+","+TString(neut)+")", "l");
           leg->SetFillColor(0);

 

           TCanvas c2("c2","c2",800,600);
	   
	 	   
	   stack->Draw("");
	   signal->Draw("same");
	  
	  stack->GetYaxis()->SetTitle("Entries");
	  stack->GetXaxis()->SetTitle("BDT output");
	  
	  signal->GetXaxis()->SetRangeUser(-0.4,0.8);
	  stack->GetXaxis()->SetRangeUser(-0.4,0.8);
	  
	  signal->SetMinimum(0.3);
	  stack->SetMinimum(0.3);
	  
	  //signal->GetYaxis()->SetNdivisions(10);
	  //stack->GetYaxis()->SetNdivisions(10);
	  
	  
	   if(logbool) c2.SetLogy();
           leg->Draw();
	   
	  
	   
	   double maximobin=stack->GetMaximum();
	   double cutvalueplot = atof(TString(cutval_));
	   TLine *linea = new TLine(cutvalueplot,0,cutvalueplot,maximobin);
	   linea->SetLineWidth(2);
	   linea->SetLineColor(4);
	   if (lineacut) linea->Draw();
           TLatex l1;
           l1.SetTextAlign(12);
           l1.SetTextSize(0.04);
           l1.SetNDC();
           l1.DrawLatex(0.155, 0.98, "CMS Simulation, 20 fb^{-1}");
           l1.DrawLatex(0.7, 0.98, "#sqrt{s} = 8 TeV");

           TLatex l2;
           l2.SetTextAlign(12);
           l2.SetTextSize(0.04);
           l2.SetNDC();
           l2.DrawLatex(0.22, 0.3, "#color[2]{Optimal cut: \t "+TString(cutval_)+"}");
           l2.DrawLatex(0.22, 0.25, "#color[2]{FOM@cut: \t "+TString(fom_)+"}");
           l2.DrawLatex(0.22, 0.2, "#color[2]{Tot. N_{Signal}: \t "+TString(signal_)+"}");
	   
          if (!logbool)  c2.Print("~/www/STOP/BDTTraining/8TeV/"+datasetnombre+"/BestSet/"+TString(MVA)+"/histo_"+TString(stop)+"_"+TString(neut)+"_lineal.png");
          if(logbool)   c2.Print("~/www/STOP/BDTTraining/8TeV/"+datasetnombre+"/BestSet/"+TString(MVA)+"/histo_"+TString(stop)+"_"+TString(neut)+"_log.png");
}
Exemplo n.º 20
0
void fitTF1(TCanvas *canvas, TH1F h, double XMIN_, double XMAX_, double dX_, double params[], Color_t LC_=kBlack) { //double& FWHM_, double& x0_, double& x1_, double& x2_, double& y0_, double& y1_, double& INT_, double& YIELD_) {
//TCanvas* fitTF1(TH1F h, double HSCALE_, double XMIN_, double XMAX_) {
//TF1* fitTF1(TH1F h, double HSCALE_, double XMIN_, double XMAX_) {
	gROOT->ForceStyle();
	RooMsgService::instance().setSilentMode(kTRUE);
	for(int i=0;i<2;i++) RooMsgService::instance().setStreamStatus(i,kFALSE);

	//TCanvas *canvas = new TCanvas(TString::Format("canvas_%s",h.GetName()),TString::Format("canvas_%s",h.GetName()),1800,1200);

	RooDataHist *RooHistFit = 0;
	RooAddPdf *model = 0;

	RooWorkspace w = RooWorkspace("w","workspace");

	RooRealVar x("mbbReg","mbbReg",XMIN_,XMAX_);
	RooRealVar kJES("CMS_scale_j","CMS_scale_j",1,0.9,1.1);
	RooRealVar kJER("CMS_res_j","CMS_res_j",1,0.8,1.2);
	kJES.setConstant(kTRUE);
	kJER.setConstant(kTRUE);

	TString hname = h.GetName();

	RooHistFit = new RooDataHist("fit_"+hname,"fit_"+hname,x,&h);


	RooRealVar YieldVBF = RooRealVar("yield_"+hname,"yield_"+hname,h.Integral());
	RooRealVar m("mean_"+hname,"mean_"+hname,125,100,150);
	RooRealVar s("sigma_"+hname,"sigma_"+hname,12,3,30);
	RooFormulaVar mShift("mShift_"+hname,"@0*@1",RooArgList(m,kJES));
	RooFormulaVar sShift("sShift_"+hname,"@0*@1",RooArgList(m,kJER));
	RooRealVar a("alpha_"+hname,"alpha_"+hname,1,-10,10);
	RooRealVar n("exp_"+hname,"exp_"+hname,1,0,100);
	RooRealVar b0("b0_"+hname,"b0_"+hname,0.5,0.,1.);
	RooRealVar b1("b1_"+hname,"b1_"+hname,0.5,0.,1.);
	RooRealVar b2("b2_"+hname,"b2_"+hname,0.5,0.,1.);
	RooRealVar b3("b3_"+hname,"b3_"+hname,0.5,0.,1.);
	
	RooBernstein bkg("signal_bkg_"+hname,"signal_bkg_"+hname,x,RooArgSet(b0,b1,b2));
	RooRealVar fsig("fsig_"+hname,"fsig_"+hname,0.7,0.0,1.0);
	RooCBShape sig("signal_gauss_"+hname,"signal_gauss_"+hname,x,mShift,sShift,a,n);

	model = new RooAddPdf("signal_model_"+hname,"signal_model_"+hname,RooArgList(sig,bkg),fsig);

	//RooFitResult *res = model->fitTo(*RooHistFit,RooFit::Save(),RooFit::SumW2Error(kFALSE),"q");
	model->fitTo(*RooHistFit,RooFit::Save(),RooFit::SumW2Error(kFALSE),"q");

	//res->Print();
	//model->Print();
	
	canvas->cd();
	canvas->SetTopMargin(0.1);
	RooPlot *frame = x.frame();
// no scale
	RooHistFit->plotOn(frame);
	model->plotOn(frame,RooFit::LineColor(LC_),RooFit::LineWidth(2));//,RooFit::LineStyle(kDotted));
	model->plotOn(frame,RooFit::Components(bkg),RooFit::LineColor(LC_),RooFit::LineWidth(2),RooFit::LineStyle(kDashed));
// with scale
//	RooHistFit->plotOn(frame,RooFit::Normalization(HSCALE_,RooAbsReal::NumEvent));
//	model->plotOn(frame,RooFit::Normalization(HSCALE_,RooAbsReal::NumEvent),RooFit::LineWidth(1));
//	model->plotOn(frame,RooFit::Components(bkg),RooFit::LineColor(kBlue),RooFit::LineWidth(1),RooFit::LineStyle(kDashed),RooFit::Normalization(HSCALE_,RooAbsReal::NumEvent));
	 
	frame->GetXaxis()->SetLimits(50,200);
	frame->GetXaxis()->SetNdivisions(505);
	frame->GetXaxis()->SetTitle("M_{b#bar{b}} (GeV)");
	frame->GetYaxis()->SetTitle("Events");
	frame->Draw();
	h.SetFillColor(kGray);
	h.Draw("hist,same");
	frame->Draw("same");
	gPad->RedrawAxis();

	TF1 *tmp = model->asTF(x,fsig,x);
	//tmp->Print();

	double y0_ = tmp->GetMaximum();
	double x0_ = tmp->GetMaximumX();
	double x1_ = tmp->GetX(y0_/2.,XMIN_,x0_);
	double x2_ = tmp->GetX(y0_/2.,x0_,XMAX_);
	double FWHM_ = x2_-x1_;
	double INT_ = tmp->Integral(XMIN_,XMAX_);
	double YIELD_= YieldVBF.getVal();
	double y1_ = dX_*0.5*y0_*(YieldVBF.getVal()/tmp->Integral(XMIN_,XMAX_));

	params[0] = x0_;
	params[1] = x1_;
	params[2] = x2_;
	params[3] = y0_;
	params[4] = y1_;
	params[5] = FWHM_;
	params[6] = INT_;
	params[7] = YIELD_;

	//cout<<"Int = "<<tmp->Integral(XMIN_,XMAX_)<<", Yield = "<<YieldVBF.getVal()<<", y0 = "<<y0_<<", y1 = "<<y1_ <<", x0 = "<< x0_ << ", x1 = "<<x1_<<", x2 = "<<x2_<<", FWHM = "<<FWHM_<<endl;

	TLine ln = TLine(x1_,y1_,x2_,y1_);
	ln.SetLineColor(kMagenta+3);
	ln.SetLineStyle(7);
	ln.SetLineWidth(2);
	ln.Draw();
	
	canvas->Update();
	canvas->SaveAs("testC.png");
	
//	tmp->Delete();
//	frame->Delete();
//	res->Delete();
//	TF1 *f1 = model->asTF(x,fsig,x);
//	return f1;
	
	////tmp->Delete();
	////ln->Delete();
	////model->Delete();
	////RooHistFit->Delete();
	////w->Delete();
	////YieldVBF->Delete();
	////frame->Delete();
	////res->Delete();
	//delete tmp;
	//delete ln;
	//delete model;
	//delete RooHistFit;
	//delete w;
	//delete YieldVBF;
	//delete frame;
	//delete res;

//	return canvas;
}
Exemplo n.º 21
0
void mp3player()
{
  // Drawing a mp3 type music player, using ROOT geometry class.
  // Name: mp3player.C
  // Author: Eun Young Kim, Dept. of Physics, Univ. of Seoul
  // Reviewed by Sunman Kim ([email protected])
  // Supervisor: Prof. Inkyu Park ([email protected])
  //
  // How to run: .x mp3player.C in ROOT terminal, then use OpenGL
  //
  // This macro was created for the evaluation of Computational Physics course in 2006.
  // We thank to Prof. Inkyu Park for his special lecture on ROOT and to all of ROOT team
  //

  TGeoManager *geom=new TGeoManager("geom","My first 3D geometry");



  //materials
  TGeoMaterial *vacuum=new TGeoMaterial("vacuum",0,0,0);
  TGeoMaterial *Fe=new TGeoMaterial("Fe",55.845,26,7.87);

  //create media

  TGeoMedium *Iron=new TGeoMedium("Iron",1,Fe);
  TGeoMedium *Air=new TGeoMedium("Vacuum",0,vacuum);


 //create volume

  TGeoVolume *top=geom->MakeBox("top",Air,800,800,800);
  geom->SetTopVolume(top);
  geom->SetTopVisible(0);
  // If you want to see the boundary, please input the number, 1 instead of 0.
  // Like this, geom->SetTopVisible(1);



  TGeoVolume *b1=geom->MakeBox("b1",Iron,100,200,600);
  b1->SetLineColor(2);


  TGeoVolume *b2=geom->MakeTubs("b2",Iron,0,50,200,0,90);
  b2->SetLineColor(10);


  TGeoVolume *b3=geom->MakeTubs("b3",Iron,0,50,200,90,180);
  b3->SetLineColor(10);


  TGeoVolume *b4=geom->MakeTubs("b4",Iron,0,50,200,180,270);
  b4->SetLineColor(10);

  TGeoVolume *b5=geom->MakeTubs("b5",Iron,0,50,200,270,360);
  b5->SetLineColor(10);


  TGeoVolume *b6=geom->MakeTubs("b6",Iron,0,50,600,0,90);
  b6->SetLineColor(10);

  TGeoVolume *b7=geom->MakeTubs("b7",Iron,0,50,600,90,180);
  b7->SetLineColor(10);

  TGeoVolume *b8=geom->MakeTubs("b8",Iron,0,50,600,180,270);
  b8->SetLineColor(10);

  TGeoVolume *b9=geom->MakeTubs("b9",Iron,0,50,600,270,360);
  b9->SetLineColor(10);



  TGeoVolume *b10=geom->MakeTubs("b10",Iron,0,50,100,0,90);
  b10->SetLineColor(10);

  TGeoVolume *b11=geom->MakeTubs("b11",Iron,0,50,100,90,180);
  b11->SetLineColor(10);

  TGeoVolume *b12=geom->MakeTubs("b12",Iron,0,50,100,180,270);
  b12->SetLineColor(10);

  TGeoVolume *b13=geom->MakeTubs("b13",Iron,0,50,100,270,360);
  b13->SetLineColor(10);


  TGeoVolume *b14=geom->MakeBox("b14",Iron,100,50,450);
  b14->SetLineColor(10);
  TGeoVolume *b15=geom->MakeBox("b15",Iron,50,200,600);
  b15->SetLineColor(10);



  TGeoVolume *b16=geom->MakeSphere("b16",Iron,0,50,0,90,0,90);
  b16->SetLineColor(10);

  TGeoVolume *b17=geom->MakeSphere("b17",Iron,0,50,0,90,270,360);
  b17->SetLineColor(10);

  TGeoVolume *b18=geom->MakeSphere("b18",Iron,0,50,0,90,180,270);
  b18->SetLineColor(10);

  TGeoVolume *b19=geom->MakeSphere("b19",Iron,0,50,0,90,90,180);
  b19->SetLineColor(10);


  TGeoVolume *b20=geom->MakeTube("b20",Iron,50,150,150);
  b20->SetLineColor(17);



  TGeoVolume *b21=geom->MakeSphere("b21",Iron,0,50,90,180,0,90);
  b21->SetLineColor(10);

  TGeoVolume *b22=geom->MakeSphere("b22",Iron,0,50,90,180,270,360);
  b22->SetLineColor(10);

  TGeoVolume *b23=geom->MakeSphere("b23",Iron,0,50,90,180,180,270);
  b23->SetLineColor(10);

  TGeoVolume *b24=geom->MakeSphere("b24",Iron,0,50,90,180,90,180);
  b24->SetLineColor(10);



  TGeoVolume *b25=geom->MakeTube("b25",Iron,51,54,150);
  b25->SetLineColor(17);
  TGeoVolume *b26=geom->MakeTube("b26",Iron,56,59,150);
  b26->SetLineColor(17);
  TGeoVolume *b27=geom->MakeTube("b27",Iron,61,64,150);
  b27->SetLineColor(17);
  TGeoVolume *b28=geom->MakeTube("b28",Iron,66,69,150);
  b28->SetLineColor(17);
  TGeoVolume *b29=geom->MakeTube("b29",Iron,71,74,150);
  b29->SetLineColor(17);

  TGeoVolume *b30=geom->MakeTube("b30",Iron,76,79,150);
  b30->SetLineColor(17);
  TGeoVolume *b31=geom->MakeTube("b31",Iron,81,84,150);
  b31->SetLineColor(17);
  TGeoVolume *b32=geom->MakeTube("b32",Iron,86,89,150);
  b32->SetLineColor(17);
  TGeoVolume *b33=geom->MakeTube("b33",Iron,91,94,150);
  b33->SetLineColor(17);
  TGeoVolume *b34=geom->MakeTube("b34",Iron,96,99,150);
  b34->SetLineColor(17);
  TGeoVolume *b35=geom->MakeTube("b35",Iron,101,104,150);
  b35->SetLineColor(17);
  TGeoVolume *b36=geom->MakeTube("b36",Iron,106,109,150);
  b36->SetLineColor(17);
  TGeoVolume *b37=geom->MakeTube("b37",Iron,111,114,150);
  b37->SetLineColor(17);
  TGeoVolume *b38=geom->MakeTube("b38",Iron,116,119,150);
  b38->SetLineColor(17);
  TGeoVolume *b39=geom->MakeTube("b39",Iron,121,124,150);
  b39->SetLineColor(17);
  TGeoVolume *b40=geom->MakeTube("b40",Iron,126,129,150);
  b40->SetLineColor(17);
  TGeoVolume *b41=geom->MakeTube("b41",Iron,131,134,150);
  b41->SetLineColor(17);
  TGeoVolume *b42=geom->MakeTube("b42",Iron,136,139,150);
  b42->SetLineColor(17);
  TGeoVolume *b43=geom->MakeTube("b43",Iron,141,144,150);
  b43->SetLineColor(17);
  TGeoVolume *b44=geom->MakeTube("b44",Iron,146,149,150);
  b44->SetLineColor(17);


  TGeoVolume *b45=geom->MakeTube("b45",Iron,0,25,150);
  b45->SetLineColor(10);

  TGeoVolume *b46=geom->MakeTube("b46",Iron,25,30,150);
  b46->SetLineColor(17);



  TGeoVolume *b47=geom->MakeBox("b47",Iron,140,194,504);
  b47->SetLineColor(32);


  TGeoVolume *b48=geom->MakeBox("b48",Iron,150,176,236);
  b48->SetLineColor(37);


  TGeoVolume *b49=geom->MakeBox("b49",Iron,150,2,236);
  b49->SetLineColor(20);
  top->AddNodeOverlap(b49,49,new TGeoTranslation(-2,179,-150));

  TGeoVolume *b50=geom->MakeBox("b50",Iron,150,2,236);
  b50->SetLineColor(20);
  top->AddNodeOverlap(b50,50,new TGeoTranslation(-2,-179,-150));

  TGeoVolume *b51=geom->MakeBox("b51",Iron,150,176,2);
  b51->SetLineColor(20);
  top->AddNodeOverlap(b51,51,new TGeoTranslation(-2,0,89));

  TGeoVolume *b52=geom->MakeBox("b52",Iron,150,176,2);
  b52->SetLineColor(20);
  top->AddNodeOverlap(b52,52,new TGeoTranslation(-2,0,-389));


  TGeoVolume *b53=geom->MakeBox("b53",Iron,150,200,90);
  b53->SetLineColor(10);
  top->AddNodeOverlap(b53,53,new TGeoTranslation(0,0,-510));





  TGeoVolume *b54=geom->MakeBox("b54",Iron,15,254,600);
  b54->SetLineColor(37);
  top->AddNodeOverlap(b54,54,new TGeoTranslation(25,0,0));

  TGeoVolume *b55=geom->MakeTubs("b55",Iron,0,54,15,270,360);
  b55->SetLineColor(37);
  top->AddNodeOverlap(b55,55,new TGeoCombiTrans(25,200,-600,new TGeoRotation("r1",90,90,0)));


  TGeoVolume *b56=geom->MakeTubs("b56",Iron,0,54,15,180,270);
  b56->SetLineColor(37);
  top->AddNodeOverlap(b56,56,new TGeoCombiTrans(25,-200,-600,new TGeoRotation("r1",90,90,0)));


  TGeoVolume *b57=geom->MakeTubs("b57",Iron,0,54,15,0,90);
  b57->SetLineColor(37);
  top->AddNodeOverlap(b57,57,new TGeoCombiTrans(25,200,600,new TGeoRotation("r1",90,90,0)));

  TGeoVolume *b58=geom->MakeTubs("b58",Iron,0,54,15,90,180);
  b58->SetLineColor(37);
  top->AddNodeOverlap(b58,58,new TGeoCombiTrans(25,-200,600,new TGeoRotation("r1",90,90,0)));

  //TGeoVolume *b59=geom->MakePgon("b59",Iron,100,100,100,100);
  //b59->SetLineColor(37);
  //top->AddNodeOverlap(b59,59,new TGeoCombiTrans(200,200,100,new TGeoRotation("r1",90,90,0)));



//IAudid



  TGeoVolume *b61=geom->MakeBox("b61",Iron,5,19,150);
  b61->SetLineColor(38);
  top->AddNodeOverlap(b61,61,new TGeoCombiTrans(-4,-87,-495,new TGeoRotation("r1",90,90,30)));

  TGeoVolume *b62=geom->MakeBox("b62",Iron,5,19,150);
  b62->SetLineColor(38);
  top->AddNodeOverlap(b62,62,new TGeoCombiTrans(-4,-65,-495,new TGeoRotation("r1",90,90,330)));
//u
  TGeoVolume *b63=geom->MakeBox("b63",Iron,5,15,150);
  b63->SetLineColor(38);
  top->AddNodeOverlap(b63,63,new TGeoCombiTrans(-4,-40,-497,new TGeoRotation("r1",90,90,0)));

  TGeoVolume *b64=geom->MakeBox("b64",Iron,5,15,150);
  b64->SetLineColor(38);
  top->AddNodeOverlap(b64,64,new TGeoCombiTrans(-4,-10,-497,new TGeoRotation("r1",90,90,0)));

  TGeoVolume *b65=geom->MakeTubs("b65",Iron,7,17,150,0,180);
  b65->SetLineColor(38);
  top->AddNodeOverlap(b65,65,new TGeoCombiTrans(-4,-25,-490,new TGeoRotation("r1",90,90,0)));


//D

  TGeoVolume *b66=geom->MakeBox("b66",Iron,5,19,150);
  b66->SetLineColor(38);
  top->AddNodeOverlap(b66,66,new TGeoCombiTrans(-4,10,-495,new TGeoRotation("r1",90,90,0)));


  TGeoVolume *b67=geom->MakeTubs("b67",Iron,10,20,150,230,480);
  b67->SetLineColor(38);
  top->AddNodeOverlap(b67,67,new TGeoCombiTrans(-4,23,-495,new TGeoRotation("r1",90,90,0)));

//I

  TGeoVolume *b68=geom->MakeBox("b68",Iron,5,20,150);
  b68->SetLineColor(38);
  top->AddNodeOverlap(b68,68,new TGeoCombiTrans(-4,53,-495,new TGeoRotation("r1",90,90,0)));

//O

  TGeoVolume *b69=geom->MakeTubs("b69",Iron,10,22,150,0,360);
  b69->SetLineColor(38);
  top->AddNodeOverlap(b69,69,new TGeoCombiTrans(-4,85,-495,new TGeoRotation("r1",90,90,0)));


// I
  TGeoVolume *b60=geom->MakeTube("b60",Iron,0,10,150);
  b60->SetLineColor(38);
  top->AddNodeOverlap(b60,60,new TGeoCombiTrans(-4,-120,-550,new TGeoRotation("r1",90,90,0)));


  TGeoVolume *b70=geom->MakeBox("b70",Iron,2,19,150);
  b70->SetLineColor(38);
  top->AddNodeOverlap(b70,70,new TGeoCombiTrans(-4,-114,-495,new TGeoRotation("r1",90,90,0)));

  TGeoVolume *b71=geom->MakeBox("b71",Iron,2,19,150);
  b71->SetLineColor(38);
  top->AddNodeOverlap(b71,71,new TGeoCombiTrans(-4,-126,-495,new TGeoRotation("r1",90,90,0)));


  TGeoVolume *b72=geom->MakeBox("b72",Iron,8,2,150);
  b72->SetLineColor(38);
  top->AddNodeOverlap(b72,72,new TGeoCombiTrans(-4,-120,-515,new TGeoRotation("r1",90,90,0)));


  TGeoVolume *b73=geom->MakeBox("b73",Iron,8,2,150);
  b73->SetLineColor(38);
  top->AddNodeOverlap(b73,73,new TGeoCombiTrans(-4,-120,-475,new TGeoRotation("r1",90,90,0)));


// button


  TGeoVolume *b74=geom->MakeBox("b74",Iron,35,250,70);
  b74->SetLineColor(38);
  top->AddNodeOverlap(b74,74,new TGeoCombiTrans(-25,10,-60,new TGeoRotation("r1",0,0,0)));

  TGeoVolume *b75=geom->MakeBox("b75",Iron,35,250,35);
  b75->SetLineColor(38);
  top->AddNodeOverlap(b75,75,new TGeoCombiTrans(-25,10,-175,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b76=geom->MakeBox("b76",Iron,35,250,35);
  b76->SetLineColor(38);
  top->AddNodeOverlap(b76,76,new TGeoCombiTrans(-25,10,55,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b77=geom->MakeTubs("b77",Iron,0,70,250,180,270);
  b77->SetLineColor(38);
  top->AddNodeOverlap(b77,77,new TGeoCombiTrans(10,10,-210,new TGeoRotation("r1",0,90,0)));


  TGeoVolume *b78=geom->MakeTubs("b78",Iron,0,70,250,90,180);
  b78->SetLineColor(38);
  top->AddNodeOverlap(b78,78,new TGeoCombiTrans(10,10,90,new TGeoRotation("r1",0,90,0)));



//Hold

  TGeoVolume *b79=geom->MakeBox("b79",Iron,40,250,150);
  b79->SetLineColor(10);
  top->AddNodeOverlap(b79,79,new TGeoCombiTrans(60,0,450,new TGeoRotation("r1",0,0,0)));

  TGeoVolume *b80=geom->MakeTubs("b80",Iron,50,100,250,180,270);
  b80->SetLineColor(10);
  top->AddNodeOverlap(b80,80,new TGeoCombiTrans(10,0,350,new TGeoRotation("r1",0,90,0)));


  TGeoVolume *b81=geom->MakeTubs("b81",Iron,50,100,250,90,180);
  b81->SetLineColor(10);
  top->AddNodeOverlap(b81,81,new TGeoCombiTrans(10,0,400,new TGeoRotation("r1",0,90,0)));


  TGeoVolume *b82=geom->MakeBox("b82",Iron,30,250,150);
  b82->SetLineColor(10);
  top->AddNodeOverlap(b82,82,new TGeoCombiTrans(-70,0,450,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b83=geom->MakeBox("b83",Iron,30,250,60);
  b83->SetLineColor(10);
  top->AddNodeOverlap(b83,83,new TGeoCombiTrans(-20,0,540,new TGeoRotation("r1",0,0,0)));




  TGeoVolume *b85=geom->MakeTubs("b85",Iron,0,40,240,180,270);
  b85->SetLineColor(38);
  top->AddNodeOverlap(b85,85,new TGeoCombiTrans(10,10,370,new TGeoRotation("r1",0,90,0)));




  TGeoVolume *b84=geom->MakeTubs("b84",Iron,0,40,240,90,180);
  b84->SetLineColor(38);
  top->AddNodeOverlap(b84,84,new TGeoCombiTrans(10,10,400,new TGeoRotation("r1",0,90,0)));


  TGeoVolume *b86=geom->MakeBox("b86",Iron,20,240,20);
  b86->SetLineColor(38);
  top->AddNodeOverlap(b86,86,new TGeoCombiTrans(-10,10,380,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b87=geom->MakeBox("b87",Iron,20,250,10);
  b87->SetLineColor(35);
  top->AddNodeOverlap(b87,87,new TGeoCombiTrans(-10,20,385,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b88=geom->MakeBox("b88",Iron,100,220,600);
  b88->SetLineColor(10);
  top->AddNodeOverlap(b88,88,new TGeoCombiTrans(0,-30,0,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b89=geom->MakeTube("b89",Iron,25,95,650);
  b89->SetLineColor(10);
  top->AddNodeOverlap(b89,89,new TGeoCombiTrans(0,-60,0,new TGeoRotation("r1",0,0,0)));

  TGeoVolume *b90=geom->MakeTube("b90",Iron,25,95,650);
  b90->SetLineColor(10);
  top->AddNodeOverlap(b90,90,new TGeoCombiTrans(0,60,0,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b91=geom->MakeBox("b91",Iron,40,200,650);
  b91->SetLineColor(10);
  top->AddNodeOverlap(b91,91,new TGeoCombiTrans(70,0,0,new TGeoRotation("r1",0,0,0)));

  TGeoVolume *b92=geom->MakeBox("b92",Iron,100,50,650);
  b92->SetLineColor(10);
  top->AddNodeOverlap(b92,92,new TGeoCombiTrans(0,150,0,new TGeoRotation("r1",0,0,0)));

  TGeoVolume *b93=geom->MakeBox("b93",Iron,100,50,650);
  b93->SetLineColor(10);
  top->AddNodeOverlap(b93,93,new TGeoCombiTrans(0,-150,0,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b94=geom->MakeBox("b94",Iron,40,200,650);
  b94->SetLineColor(10);
  top->AddNodeOverlap(b94,94,new TGeoCombiTrans(-70,0,0,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b95=geom->MakeTube("b95",Iron,25,35,650);
  b95->SetLineColor(1);
  top->AddNodeOverlap(b95,95,new TGeoCombiTrans(0,-60,-10,new TGeoRotation("r1",0,0,0)));

  TGeoVolume *b96=geom->MakeTube("b96",Iron,25,35,650);
  b96->SetLineColor(1);
  top->AddNodeOverlap(b96,96,new TGeoCombiTrans(0,60,-10,new TGeoRotation("r1",0,0,0)));
//usb

  TGeoVolume *b97=geom->MakeBox("b97",Iron,70,70,600);
  b97->SetLineColor(17);
  top->AddNodeOverlap(b97,97,new TGeoCombiTrans(0,0,57,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b98=geom->MakeTubs("b98",Iron,0,50,600,0,90);
  b98->SetLineColor(17);
  top->AddNodeOverlap(b98,98,new TGeoCombiTrans(20,60,57,new TGeoRotation("r1",0,0,0)));

  TGeoVolume *b99=geom->MakeTubs("b99",Iron,0,50,600,180,270);
  b99->SetLineColor(17);
  top->AddNodeOverlap(b99,99,new TGeoCombiTrans(-20,-60,57,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b100=geom->MakeTubs("b100",Iron,0,50,600,90,180);
  b100->SetLineColor(17);
  top->AddNodeOverlap(b100,100,new TGeoCombiTrans(-20,60,57,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b101=geom->MakeTubs("b101",Iron,0,50,600,270,360);
  b101->SetLineColor(17);
  top->AddNodeOverlap(b101,101,new TGeoCombiTrans(20,-60,57,new TGeoRotation("r1",0,0,0)));

  TGeoVolume *b102=geom->MakeBox("b102",Iron,20,110,600);
  b102->SetLineColor(17);
  top->AddNodeOverlap(b102,102,new TGeoCombiTrans(0,0,57,new TGeoRotation("r1",0,0,0)));


  TGeoVolume *b103=geom->MakeBox("b103",Iron,15,200,600);
  b103->SetLineColor(37);
  top->AddNodeOverlap(b103,103,new TGeoCombiTrans(25,0,57,new TGeoRotation("r1",0,0,0)));
//AddNode
  top->AddNodeOverlap(b1,1,new TGeoTranslation(0,0,0));
  top->AddNodeOverlap(b2,2,new TGeoCombiTrans(100,0,600,new TGeoRotation("r1",0,90,0)));
  top->AddNodeOverlap(b3,3,new TGeoCombiTrans(-100,0,600,new TGeoRotation("r1",0,90,0)));
  top->AddNodeOverlap(b4,4,new TGeoCombiTrans(-100,0,-600,new TGeoRotation("r1",0,90,0)));
  top->AddNodeOverlap(b5,5,new TGeoCombiTrans(100,0,-600,new TGeoRotation("r1",0,90,0)));
  top->AddNodeOverlap(b6,6,new TGeoCombiTrans(100,200,0,new TGeoRotation("r1",0,0,0)));
  top->AddNodeOverlap(b7,7,new TGeoCombiTrans(-100,200,0,new TGeoRotation("r1",0,0,0)));
  top->AddNodeOverlap(b8,8,new TGeoCombiTrans(-100,-200,0,new TGeoRotation("r1",0,0,0)));
  top->AddNodeOverlap(b9,9,new TGeoCombiTrans(100,-200,0,new TGeoRotation("r1",0,0,0)));

  top->AddNodeOverlap(b10,10,new TGeoCombiTrans(0,200,600,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b11,11,new TGeoCombiTrans(0,-200,600,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b12,12,new TGeoCombiTrans(0,-200,-600, new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b13,13,new TGeoCombiTrans(0,200,-600,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b14,14,new TGeoTranslation(0,200,-150));
  top->AddNodeOverlap(b15,15,new TGeoTranslation(100,0,0));

  top->AddNodeOverlap(b16,16,new TGeoCombiTrans(100,200,600,new TGeoRotation("r2",0,0,0)));
  top->AddNodeOverlap(b17,17,new TGeoCombiTrans(100,-200,600,new TGeoRotation("r2",0,0,0)));
  top->AddNodeOverlap(b18,18,new TGeoCombiTrans(-100,-200,600,new TGeoRotation("r2",0,0,0)));
  top->AddNodeOverlap(b19,19,new TGeoCombiTrans(-100,200,600,new TGeoRotation("r2",0,0,0)));
  top->AddNodeOverlap(b20,20,new TGeoCombiTrans(-3,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b21,21,new TGeoCombiTrans(100,200,-600,new TGeoRotation("r2",0,0,0)));
  top->AddNodeOverlap(b22,22,new TGeoCombiTrans(100,-200,-600,new TGeoRotation("r2",0,0,0)));
  top->AddNodeOverlap(b23,23,new TGeoCombiTrans(-100,-200,-600,new TGeoRotation("r2",0,0,0)));
  top->AddNodeOverlap(b24,24,new TGeoCombiTrans(-100,200,-600,new TGeoRotation("r2",0,0,0)));



  top->AddNodeOverlap(b25,25,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b26,26,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b27,27,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b28,28,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b29,29,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b30,30,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b31,31,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b32,32,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b33,33,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b34,34,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b35,35,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b36,36,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b37,37,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b38,38,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b39,39,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b40,40,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b41,41,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b42,42,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b43,43,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b44,44,new TGeoCombiTrans(-9,0,350,new TGeoRotation("r2",90,90,0)));


  top->AddNodeOverlap(b45,45,new TGeoCombiTrans(-20,0,350,new TGeoRotation("r2",90,90,0)));
  top->AddNodeOverlap(b46,46,new TGeoCombiTrans(-25,0,350,new TGeoRotation("r2",90,90,0)));

  top->AddNodeOverlap(b47,47,new TGeoTranslation(5,0,85));
  top->AddNodeOverlap(b48,48,new TGeoTranslation(-2,0,-150));
  geom->CloseGeometry();



  TCanvas *can=new TCanvas("can","My virtual laboratory",800,800);


//Mp3
   TPad *pad=new TPad("pad","Pad",0,0.5,0.5,1);
   pad->SetFillColor(1);
   pad->Draw();
   pad->cd();
  top->Draw();
//Sound
   can->cd();
   TPad *pad2=new TPad("pad2","Pad2",0.5,0.5,1,1);
   pad2->SetFillColor(10);
   pad2->Draw();
   pad2->cd();


   TPaveText *pt = new TPaveText(0.4,0.90,0.6,0.95,"br");
   pt->SetFillColor(30);
   pt->AddText(0.5,0.5,"Musics");
   pt->Draw();

   TLatex Tex;

   Tex.SetTextSize(0.04);
   Tex.SetTextColor(31);
   Tex.DrawLatex(0.3,0.81,"Mariah Carey - Shake it off");

   Tex.SetTextSize(0.04);
   Tex.SetTextColor(31);
   Tex.DrawLatex(0.3,0.71,"Alicia keys - If I ain't got you");

   Tex.SetTextSize(0.04);
   Tex.SetTextColor(31);
   Tex.DrawLatex(0.3,0.61,"Michael Jackson - Billie Jean");

   Tex.SetTextSize(0.04);
   Tex.SetTextColor(31);
   Tex.DrawLatex(0.3,0.51,"Christina Milian - Am to Pm");

   Tex.SetTextSize(0.04);
   Tex.SetTextColor(31);
   Tex.DrawLatex(0.3,0.41,"Zapp&Roger - Slow and Easy");

   Tex.SetTextSize(0.04);
   Tex.SetTextColor(31);
   Tex.DrawLatex(0.3,0.31,"Black Eyes Peas - Let's get retarded");

   Tex.SetTextSize(0.04);
   Tex.SetTextColor(31);
   Tex.DrawLatex(0.3,0.21,"Bosson - One in a Millin");

   Tex.SetTextSize(0.04);
   Tex.SetTextColor(15);
   Tex.DrawLatex(0.2,0.11,"Click Button!! You Can Listen to Musics");
   TButton *but1=new TButton("","Sound(1)",0.2,0.8,0.25,0.85);
   but1->Draw();
   but1->SetFillColor(29);
   TButton *but2=new TButton("","Sound(2)",0.2,0.7,0.25,.75);
   but2->Draw();
   but2->SetFillColor(29);
   TButton *but3=new TButton("","Sound(3)",0.2,0.6,0.25,0.65);
   but3->Draw();
   but3->SetFillColor(29);
   TButton *but4=new TButton("","Sound(4)",0.2,0.5,0.25,0.55);
   but4->Draw();
   but4->SetFillColor(29);
   TButton *but5=new TButton("","Sound(5)",0.2,0.4,0.25,0.45);
   but5->Draw();
   but5->SetFillColor(29);
   TButton *but6=new TButton("","Sound(6)",0.2,0.3,0.25,0.35);
   but6->Draw();
   but6->SetFillColor(29);
   TButton *but7=new TButton("","Sound(7)",0.2,0.2,0.25,0.25);
   but7->Draw();
   but7->SetFillColor(29);

   pad->cd();

//introduction
   can->cd();

   TPad *pad3=new TPad("pad3","Pad3",0,0,1,0.5);
   pad3->SetFillColor(10);
   pad3->Draw();
   pad3->cd();

   TImage *image=TImage::Open("mp3.jpg");
   image->Draw();



   TPad *pad4=new TPad("pad4","Pad4",0.6,0.1,0.9,0.9);
   pad4->SetFillColor(1);
   pad4->Draw();
   pad4->cd();


   TLine L;

   Tex.SetTextSize(0.08);
   Tex.SetTextColor(10);
   Tex.DrawLatex(0.06,0.85,"IAudio U3 Mp3 Player");


   L.SetLineColor(10);
   L.SetLineWidth(3);
   L.DrawLine(0.05, 0.83,0.90, 0.83);

   Tex.SetTextSize(0.06);
   Tex.SetTextColor(10);
   Tex.DrawLatex(0.06,0.75,"+ Color LCD");

   Tex.SetTextSize(0.06);
   Tex.SetTextColor(10);
   Tex.DrawLatex(0.06,0.65,"+ 60mW High Generating Power");

   Tex.SetTextSize(0.06);
   Tex.SetTextColor(10);
   Tex.DrawLatex(0.06,0.55,"+ GUI Theme Skin");

   Tex.SetTextSize(0.06);
   Tex.SetTextColor(10);
   Tex.DrawLatex(0.06,0.45,"+ Noble White&Black");

   Tex.SetTextSize(0.06);
   Tex.SetTextColor(10);
   Tex.DrawLatex(0.06,0.35,"+ Text Viewer+Image Viewer");

   Tex.SetTextSize(0.06);
   Tex.SetTextColor(10);
   Tex.DrawLatex(0.06,0.25,"+ 20 Hours Playing");

   Tex.SetTextSize(0.06);
   Tex.SetTextColor(10);
   Tex.DrawLatex(0.06,0.15,"+ The Best Quality of Sound");


   pad->cd();



}
Exemplo n.º 22
0
void plot() {

    TGraph * FWHM = new TGraph( "plot.txt" , "%lg %lg %*lg %*lg" );
    TGraph * FWTM = new TGraph( "plot.txt" , "%lg %*lg %lg %*lg" );
    TGraph * FWFM = new TGraph( "plot.txt" , "%lg %*lg %*lg %lg" );

    TGraph * ratioTH = new TGraph();
    TGraph * ratioFH = new TGraph();
    ratioTH->SetName("ratioTH");
    ratioFH->SetName("ratioFH");

    double * x = FWHM->GetX();
    double * yH = FWHM->GetY();
    double * yT = FWTM->GetY();
    double * yF = FWFM->GetY();

    for ( int i = 0 ; i < FWHM->GetN() ; i++ ) {
        ratioTH->SetPoint( i , x[i] , yT[i]/yH[i] );
        ratioFH->SetPoint( i , x[i] , yF[i]/yH[i] );
    }
	
	ratioTH->SetTitle("Gaussianity");
    ratioTH->GetXaxis()->SetTitle("Energy Width [us]");
	ratioTH->SetMarkerStyle(20);
	ratioTH->SetMarkerColor(kViolet+2);
	ratioTH->SetMarkerSize(1.5);
	ratioTH->SetLineColor(kViolet+2);
    
	ratioFH->SetMarkerStyle(29);
	ratioFH->SetMarkerColor(kYellow+2);
	ratioFH->SetMarkerSize(1.5);
	ratioFH->SetLineColor(kYellow+2);
    ratioTH->GetYaxis()->SetRangeUser(1,6);

    FWHM->SetTitle("Resolution");
    FWHM->GetYaxis()->SetRangeUser(0,17);
    FWHM->GetYaxis()->SetTitle("[keV]");
    FWHM->GetXaxis()->SetTitle("Energy Width [us]");

    FWHM->SetMarkerStyle(33);
    FWHM->SetMarkerColor(kGreen+3);
    FWHM->SetMarkerSize(1.5);
	FWHM->SetLineColor(kGreen+3);

    FWTM->SetMarkerStyle(22);
    FWTM->SetMarkerColor(kBlue);
    FWTM->SetMarkerSize(1.5);
	FWTM->SetLineColor(kBlue);

    FWFM->SetMarkerStyle(23);
    FWFM->SetMarkerColor(kRed);
    FWFM->SetMarkerSize(1.5);
	FWFM->SetLineColor(kRed);

    TCanvas * can = new TCanvas("can","can",1);
    can->Divide(2,1);
    can->cd(1);
    gPad->SetGrid();

    FWHM->Draw("AP");
    FWTM->Draw("PSAME");
    FWFM->Draw("PSAME");
	
	TLegend * leg = new TLegend(0.24,0.77,0.42,0.88);
	leg->SetTextAlign(22);
	leg->SetTextSize(0.037);
	leg->AddEntry(FWHM,"FWHM","p");
	leg->AddEntry(FWTM,"FWTM","p");
	leg->AddEntry(FWFM,"FWFM","p");
	leg->Draw();

    can->cd(2);
	gPad->SetGrid();
    ratioTH->Draw("AP");
    ratioFH->Draw("PSAME");
  
	TLine * lineTH = new TLine( ratioTH->GetXaxis()->GetXmin() , 1.82 , ratioTH->GetXaxis()->GetXmax() , 1.82 );
	TLine * lineFH = new TLine( ratioTH->GetXaxis()->GetXmin() , 2.38 , ratioTH->GetXaxis()->GetXmax() , 2.38 );

	lineTH->SetLineWidth(2);
	lineTH->SetLineStyle(9);
	lineTH->SetLineColor(kViolet+2);

	lineFH->SetLineWidth(2);
	lineFH->SetLineStyle(9);
	lineFH->SetLineColor(kYellow+2);

	lineTH->Draw();
    lineFH->Draw();
	
	TLegend * leg2 = new TLegend(0.14,0.77,0.45,0.88);
	leg2->SetTextAlign(22);
	leg2->SetTextSize(0.037);
	leg2->AddEntry(ratioTH,"FWTM/FWHM","p");
	leg2->AddEntry(ratioFH,"FWFM/FWHM","p");
	leg2->Draw();

	return;
}
Exemplo n.º 23
0
void TPCompare() {
  Int_t runn = 204292;
 

  Int_t answ;
  Int_t gainValues[kGains] = {12, 6, 1};
  TH1F* hRat126_1 = new TH1F("hRap126_1",Form("EE Ratio 12/6 run %i", runn),100,1.86,2.06);
  TH1F* hRat121_1 = new TH1F("hRap121_1",Form("EE Ratio 12/1 run %i", runn),100,10.5,11.5);
  TH1F* hRat126_2 = new TH1F("hRap126_2","EE Ratio 12/6 Reference : run 192043",100,1.86,2.06);
  TH1F* hRat121_2 = new TH1F("hRap121_2","EE Ratio 12/1 Reference : run 192043",100,10.5,11.5);

  TH2F* hCorr126 = new TH2F("hCorr126",Form("EE Gain ratio x12/x6 correlation _ run %i", runn), 
			50,1.86, 2.06,50, 1.86, 2.06);
  TH1F* hDiff126 = new TH1F("hDiff126",Form("EE Gain ratio x12/x6 difference _ run %i", runn), 
			50, -0.025, 0.025);
  TH2F* hCorr121 = new TH2F("hCorr121",Form("EE Gain ratio x12/x1 correlation _ run %i", runn), 
			50,10.5, 11.5,50, 10.5, 11.5);
  TH1F* hDiff121 = new TH1F("hDiff121",Form("EE Gain ratio x12/x1 difference _ run %i", runn), 
			50, -0.025, 0.025);

  TCanvas cPrint("cPrint");
 
 
  ifstream fRatio1, fRatio2;
  fRatio1.open(Form("TP_GainratioEE_%i.txt",runn));
  fRatio2.open("TP_GainratioEE_192043.txt");
  Int_t ixtal;
  Double_t Rat126_1, Rat126_2, Rat121_1, Rat121_2;
  for (int iChannel = 0; iChannel < kEEChannels; iChannel++) {
    fRatio1 >> ixtal  >> Rat121_1 >> Rat126_1;
    fRatio2 >> ixtal  >> Rat121_2 >> Rat126_2;
    if(iChannel%1000 == 0) cout << " Channel " << ixtal << " Rat 12/6 " << Rat126_1 
				<< " Ref " << Rat126_2  << " Rat 12/1 " << Rat121_1
				<< " Ref " << Rat121_2  << endl;
    hRat126_1->Fill(Rat126_1);
    hRat121_1->Fill(Rat121_1);
    hRat126_2->Fill(Rat126_2);
    hRat121_2->Fill(Rat121_2);
   if(Rat126_1 != 0 && Rat126_2 != 0) {
      hCorr126->Fill(Rat126_2, Rat126_1);
      hDiff126->Fill((Rat126_1-Rat126_2)/Rat126_2);
    }
    else if(Rat126_1 == 0 || Rat126_2 == 0)
      cout <<  " Channel " << ixtal << " Ratio12/6 = 0  " << endl;
   if(Rat121_1 != 0 && Rat121_2 != 0) {
      hCorr121->Fill(Rat121_2, Rat121_1);
      hDiff121->Fill((Rat121_1-Rat121_2)/Rat121_2);
    }
    else if(Rat121_1 == 0 || Rat121_2 == 0)
      cout <<  " Channel " << ixtal << " Ratio12/1 = 0  " << endl;
  }
  fRatio1.close();
  fRatio2.close();


  TCanvas* cRatio126 = new TCanvas("cRatio126", "Ratio 12/6");
  // cRatio126->SetCanvasSize(630,885);
  cRatio126->Divide(1,2);
  cRatio126->cd(1);
  hRat126_1->Draw();

  cRatio126->cd(2);
  hRat126_2->Draw();
  cRatio126->Print(Form("EE_Ratio126_%i.gif", runn));

  TCanvas* cRatio121 = new TCanvas("cRatio121", "Ratio 12/1");
  // cRatio121->SetCanvasSize(630,885);
  cRatio121->Divide(1,2);
  cRatio121->cd(1);
  hRat126_1->Draw();

  cRatio121->cd(2);
  hRat126_2->Draw();
  cRatio121->Print(Form("EE_Ratio121_%i.gif", runn));

  //  cout << "continue? "<< endl;
  // cin >> answ;

  TCanvas* cRatioCorr126 = new TCanvas("cRatioCorr126","Corr Gain Ratio 12/6");
  // cRatioCorr126->SetCanvasSize(630,885);
  //cRatioCorr126->Divide(1,1);
  //cRatioCorr126->cd(1);
  hCorr126->SetMarkerStyle(20);
  hCorr126->Draw();
  hCorr126->GetXaxis()->SetTitle("run 192043");
  hCorr126->GetYaxis()->SetTitle(Form("run %i", runn));
  TLine* l = new TLine(1.86,1.86,2.06,2.06);
  l->SetLineColor(2);
  l->SetLineWidth(3);
  l->Draw();
  cRatioCorr126->Print(Form("EE_hCorr126_%i.gif", runn));

  // cout << "continue? "<< endl;
  // cin >> answ;

  TCanvas* cRatioCorr121 = new TCanvas("cRatioCorr121","Corr Gain Ratio 12/1");
  //  cRatioCorr121->SetCanvasSize(630,885);
  //cRatioCorr121->Divide(1,1);
  //cRatioCorr121->cd(1);
  hCorr121->SetMarkerStyle(20);
  hCorr121->Draw();
  hCorr121->GetXaxis()->SetTitle("run 192043");
  hCorr121->GetYaxis()->SetTitle(Form("run %i", runn));
  TLine* l = new TLine(10.5,10.5,11.5,11.5);
  l->SetLineColor(3);
  l->SetLineWidth(3);
  l->Draw();
  cRatioCorr121->Print(Form("EE_hCorr121_%i.gif", runn));

  // cout << "continue? "<< endl;
  // cin >> answ;



  TCanvas* cRatioDiff126 = new TCanvas("cRatioDiff126","Diff Gain Ratio 12/6");
  //  cRatioDiff126->SetCanvasSize(630,885);
  // cRatioDiff126->Divide(1,1);
  // cRatioDiff126->cd(1);
  cRatioDiff126->SetLogy(1);
  hDiff126->SetMarkerStyle(20);
  hDiff126->Draw();
  hDiff126->GetXaxis()->SetTitle(Form("(run %i - run 192043)/run 192043", runn));
  hDiff126->GetYaxis()->SetTitle("# Xtals");
  hDiff126->SetFillColor(5);
  cRatioDiff126->Print(Form("EE_hDiff126_%i.gif", runn));

  TCanvas* cRatioDiff121 = new TCanvas("cRatioDiff121","Diff Gain Ratio 12/1");
  // cRatioDiff121->SetCanvasSize(630,885);
  // cRatioDiff121->Divide(1,1);
  // cRatioDiff121->cd(1);
  cRatioDiff121->SetLogy(1);
  hDiff121->SetMarkerStyle(20);
  hDiff121->Draw();
  hDiff121->GetXaxis()->SetTitle(Form("(run %i - run 192043)/run 192043", runn));
  hDiff121->GetYaxis()->SetTitle("# Xtals");
  hDiff121->SetFillColor(5);
  cRatioDiff121->Print(Form("EE_hDiff121_%i.gif", runn));

}
Exemplo n.º 24
0
void vs_PlotQCDcomp() {

  Bool_t saveC  = false;
  Bool_t diJets = true;
  Bool_t isMC   = false;

  TString vsSave;
  vsSave = "_T07w";

  TString jSave;
  if(diJets) jSave = "2j";
  else       jSave = "3j";

  TString sample;
  if(diJets) sample = "select_1ph_2jets";
  else       sample = "select_1ph_3jets";

  TString FOtag;
  if(isMC) FOtag = "_FO_CorrMC";
  //  else     FOtag = "_FO_Corr";
  else     FOtag = "_FO";

  TString sysu = "SYSTUP_";
  TString sysd = "SYSTDOWN_";

  TString outDir;
  outDir = "Plots_PhotonSusyAnalysis/QCDweights/";


  //  string inputFile1 = "/data/user/vsola/CMSSW_Releases/CMSSW_5_3_9/src/Plots_PhotonSusyAnalysis/Merged_QCD_PhotonJet_T07w_PAT/mergedHistos.root";
  //  string inputFile1 = "/data/user/vsola/CMSSW_Releases/CMSSW_5_3_9/src/Plots_PhotonSusyAnalysis/Merged_Data_V05w_PAT/mergedHistos.root";
  string inputFile1 = "/data/user/vsola/CMSSW_Releases/CMSSW_5_3_9/src/Plots_PhotonSusyAnalysis/PhotonHadReReco_22Jan2013_V05_PAT/mergedHistos.root";
  
  
  setMyTDRStyle();
  gROOT->SetStyle("mytdrStyle");
  
  //  gStyle->SetHistMinimumZero();
  //  gStyle->SetPaintTextFormat("4.2f");

  gStyle->SetHistLineWidth(2);
  gStyle->UseCurrentStyle();

  //  gStyle->SetPadTopMargin(1.0);
  //  gStyle->SetPadLeftMargin(3.2);
  //  gStyle->SetPadRightMargin(4.5);
  //  gStyle->SetPadBottomMargin(3.2);

  gROOT->ForceStyle(1);


  static const Int_t nHt  =  7;
  static const Int_t nPt  = 13;
  static const Int_t nMet = 16;
  static const Int_t nJet = 15;

  Double_t binPt[nPt+1]   = {0.,75.,90.,120.,160.,210.,260.,320.,400.,500.,650.,800.,1000.,1500.};
  Double_t binHt[nHt+1]   = {0.,400.,450.,550.,700.,900.,1200.,1500.};
  Double_t binMet[nMet+1] = {0.,10.,20.,30.,40.,50.,60.,70.,80.,90.,100.,120.,160.,200.,270.,350.,500.};
  Double_t binJet[nJet+1] = {0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15};


  TLatex *as = new TLatex();
  as->SetNDC(true);
  as->SetTextColor(12);
  as->SetTextFont(43);
  as->SetTextSize(19);

  TLegend *legend = new TLegend(0.60, 0.70, 0.75, 0.85, "");
  legend->SetFillColor(10);
  legend->SetFillStyle(1001);
  legend->SetTextSize(0.04);
  legend->SetBorderSize(0);
  legend->SetShadowColor(0);

  std::string outLumi  = "CMS Work in Progress - QCD MC #sqrt{s} = 8 TeV - #geq 1 #gamma, #geq 2 j";

  TFile* f1 = TFile::Open( inputFile1.c_str() );

  //photon Pt
  TCanvas * cPt = new TCanvas("cPt","cPt");

  TH1F* hpt   = (TH1F*) f1->Get( sample+"/PreselCut_photonPt" );
  TH1F* hptFO = (TH1F*) f1->Get( sample+FOtag+"/PreselCut_photonPt" );

  TH1F *hptR = (TH1F*) hpt->Rebin(nPt,hpt->GetTitle(),binPt);
  if (hptR->GetSumw2N() == 0)
    hptR->Sumw2();

  TH1F *hptFOR = (TH1F*) hptFO->Rebin(nPt,hptFO->GetTitle(),binPt);
  if (hptFOR->GetSumw2N() == 0)
    hptFOR->Sumw2();

  TH1F* hptSU = (TH1F*) f1->Get( sample+FOtag+"/PreselCut_"+sysu+"photonPt" );
  TH1F* hptSD = (TH1F*) f1->Get( sample+FOtag+"/PreselCut_"+sysd+"photonPt" );

  TH1F *hptSUR = (TH1F*) hptSU->Rebin(nPt,hptSU->GetTitle(),binPt);
  if (hptSUR->GetSumw2N() == 0)
    hptSUR->Sumw2();

  TH1F *hptSDR = (TH1F*) hptSD->Rebin(nPt,hptSD->GetTitle(),binPt);
  if (hptSDR->GetSumw2N() == 0)
    hptSDR->Sumw2();

  if ( hptFOR != 0 ) {
    for (int b = 0; b < hptFOR->GetNbinsX(); b++) {

      Double_t mainHistoContent   = hptFOR->GetBinContent(b);
      Double_t systUpHistoContent = hptSUR->GetBinContent(b);
      Double_t systDnHistoContent = hptSDR->GetBinContent(b);
      Double_t systDiffUp = fabs( (double) systUpHistoContent - mainHistoContent );
      Double_t systDiffDn = fabs( (double) mainHistoContent - systDnHistoContent );

      // use average error for histogram
      Double_t systDiff = ( systDiffUp + systDiffDn ) / 2.;
      
      Double_t statErr   = hptFOR->GetBinError(b);
      Double_t combError = sqrt( systDiff * systDiff + statErr * statErr );
      hptFOR->SetBinError(b, combError);
    } //for
  }//if
    
  cPt->SetLogy(1);
  gPad->Update();
  cPt->Update();

  //  hptR->Scale(1,"width");
  //  hptR->SetMinimum(0.02);
  //  hptR->SetMaximum(1000); 
  hptR->GetXaxis()->SetTitle("1^{st} photon p_{T} [GeV]");
  hptR->GetYaxis()->SetTitle("Number of Events / GeV");

  if(isMC) hptR->SetMarkerSize(0);
  if(isMC) hptR->Draw("histE");
  else     hptR->Draw("E X0");


  hptFOR->SetMarkerSize(0);
  hptFOR->SetLineColor(2);
  hptFOR->SetFillColor(2);
  hptFOR->SetFillStyle(3004);
  hptFOR->Draw("same hist ][ E2");

  legend->Clear();
  if(isMC) legend->SetHeader("#gamma/QCD (Sim)");
  else     legend->SetHeader("#gamma/QCD (Data)");
  if(isMC) legend->AddEntry(hptR, "#gamma", "l");
  else     legend->AddEntry(hptR, "#gamma", "p");
  legend->AddEntry(hptFOR, "Pred (from #gamma_{jet})", "f");
  legend->Draw();

  as->DrawLatex(0.17, 0.93, outLumi.c_str() );
  cPt->Update();
  cPt->SetBottomMargin(0.2 + 0.8 * cPt->GetBottomMargin() - 0.2 * cPt->GetTopMargin());

  TPad *ratioPt = new TPad("BottomPad", "", 0, 0, 1, 1);
  ratioPt->SetTopMargin(0.8 - 0.8 * ratioPt->GetBottomMargin() + 0.2 * ratioPt->GetTopMargin());
  ratioPt->SetFillStyle(0);
  ratioPt->SetFrameFillColor(10);
  ratioPt->SetFrameBorderMode(0);
  ratioPt->Draw();

  ratioPt->cd();
  ratioPt->SetLogy(0);

  TH1F *hptRat = (TH1F*) divideHistosForRatio(hptR,hptFOR);
  hptRat->SetMinimum(0.);
  hptRat->SetMaximum(10.);
  hptRat->GetXaxis()->SetNdivisions(505);
  if(isMC) hptRat->GetYaxis()->SetTitle("Sim/Pred");
  else     hptRat->GetYaxis()->SetTitle("Data/Pred");
  hptRat->GetYaxis()->SetTitleSize(0.04);
  hptRat->GetYaxis()->SetLabelSize(0.03);
  hptRat->GetYaxis()->SetTitleOffset(1.3);
  hptRat->GetYaxis()->SetNdivisions(505);
  hptRat->SetMarkerStyle(20);
  hptRat->SetMarkerSize(1);
  hptRat->SetMarkerColor(1);
  hptRat->SetLineColor(1);
  hptRat->Draw("E X0");

  TH1F *hptFRat = (TH1F*) getSystErrForRatio(hptFOR);
  hptFRat->SetLineColor(2);
  hptFRat->SetFillColor(2);
  hptFRat->SetFillStyle(3004);
  hptFRat->Draw("same hist ][ E2");


  TLine * line = new TLine( hptRat->GetXaxis()->GetXmin(), 1., hptRat->GetXaxis()->GetXmax(), 1. );
  line->SetLineColor(1);
  line->SetLineWidth(0.5);
  line->SetLineStyle(1);
  line->Draw("same");

  hptR->GetXaxis()->SetLabelSize(0);
  hptR->GetXaxis()->SetTitle("");
  cPt->RedrawAxis();
  gPad->Update();
  cPt->Update();


  return;
}
Exemplo n.º 25
0
int Colz2()
{
  std::cout << "Lese Files" << std::endl;

  Files.push_back (new TFile("TTJets.root", "READ"));
  //Files.push_back (new TFile("LM3.root", "READ"));
  //Files.push_back (new TFile("LM8.root", "READ"));
  Files.push_back (new TFile("LM9.root", "READ"));

  // lumi in fb-1
  //double lumi=0.0359;
  //double lumi=0.25;
  double lumi=1;

  // cross-sections
  double xsecQCDMu=296900000*0.00037;
  double xsecZjets=3048;
  double xsecWjets=3131;
  double xsecTTJets=158;
  double xsecLM1=4.888;
  double xsecLM3=3.438;
  double xsecLM8=0.73;
  double xsecLM7=1.209;
  double xsecLM9=7.134;
  double xsecLM12=4.414;
  double xsecG400=19.3944;
  double xsecG450=8.31098;
  double xsecG500=1.86744;
  double xsecG550=0.967942;
  double xsecG600=0.507335;
  double xsecG650=0.28241;
  double xsecG700=0.157907;
  double xsecG750=0.0902996;
  double xsecG800=0.0526242;

  // number of events
  double nQCD=29034562;
  double nZjets=2543706;
  double nWjets=10822996;
  double nTTJets=1286491;
  double nLM1=219190;
  double nLM3=220000;
  double nLM8=220000;
  double nLM7=220000;
  double nLM9=220000;
  double nLM12=219595;
  double nG400=10000;
  double nG450=10000;
  double nG500=10000;
  double nG550=10000;
  double nG600=10000;
  double nG650=10000;
  double nG700=10000;
  double nG750=10000;
  double nG800=10000;

  // weights
  double sQCDMu=lumi*1000*xsecQCDMu/(nQCD);  //3.72322;
  double sZjets=lumi*1000*xsecZjets/(nZjets);  //1.19824;
  double sWjets=lumi*1000*xsecWjets/(nWjets);  //2.11502;
  double sTTJets=lumi*1000*xsecTTJets/(nTTJets);  //0.13623;
  double sLM1=lumi*1000*xsecLM1/(nLM1);  //0.02230;
  double sLM3=lumi*1000*xsecLM3/(nLM3);  //0.01563;
  double sLM8=lumi*1000*xsecLM8/(nLM8);  //0.00332;
  double sLM7=lumi*1000*xsecLM7/(nLM7);
  double sLM9=lumi*1000*xsecLM9/(nLM9);
  double sLM12=lumi*1000*xsecLM12/(nLM12);
  double sData=1;
  double sG400=lumi*1000*xsecG400/(nG400);  //0.02230;
  double sG450=lumi*1000*xsecG450/(nG450);  //0.02230;
  double sG500=lumi*1000*xsecG500/(nG500);  //0.01563;
  double sG550=lumi*1000*xsecG550/(nG550);  //0.02230;
  double sG600=lumi*1000*xsecG600/(nG600);  //0.02230;
  double sG650=lumi*1000*xsecG650/(nG650);  //0.01563;
  double sG700=lumi*1000*xsecG700/(nG700);  //0.02230;
  double sG750=lumi*1000*xsecG750/(nG750);  //0.02230;
  double sG800=lumi*1000*xsecG800/(nG800);  //0.01563;

  //Scales.push_back(sQCDMu);
  //Scales.push_back(sWjets);
  //Scales.push_back(sZjets);
  Scales.push_back(sTTJets);
  //Scales.push_back(sData);
  //Scales.push_back(sLM1);  
  // Scales.push_back(sG500);
  //Scales.push_back(sLM3);
  //Scales.push_back(sLM8);
  Scales.push_back(sLM9);

  //--------------------
  // Fuelle Histogramme
  //--------------------

  std::cout << "Fuelle Histogramme" << std::endl;

  TH2F* hist1=(TH2F*)Files[0]->Get("analyzeSUSY1l_metSelection/mW_MT");
  TH2F* hist2=(TH2F*)Files[1]->Get("analyzeSUSY1l_metSelection/mW_MT");
  //TH2F* hist3=(TH2F*)Files[2]->Get("analyzeSUSY1b1l_3/mW_nJets");
  //TH2F* hist4=(TH2F*)Files[3]->Get("analyzeSUSY1b1l_3/mW_nJets");

  //TH2F* hist1=(TH2F*)Files[0]->Get("analyzeEventTopology1b1l_mediumTCHE_3/HT_dPhiLepMETMin");
  //TH2F* hist2=(TH2F*)Files[1]->Get("analyzeEventTopology1b1l_mediumTCHE_3/HT_dPhiLepMETMin");

  hist1->Scale(Scales[0]);
  hist2->Scale(Scales[1]);
  //hist3->Scale(Scales[2]);
  //hist4->Scale(Scales[3]);

//===============================================================define styles: mystyle2==================================================

  TStyle *mystyle2 = new TStyle("mystyle2","mystyle2");

  //canvases
  //   mystyle2->SetCanvasColor(0);
  //   mystyle2->SetPalette         (1,0);
  //   mystyle2->SetCanvasBorderMode(1);
  mystyle2->SetCanvasColor(10);
  mystyle2->SetPalette(1);

  //pads
  mystyle2->SetPadTopMargin   (0.03);
  mystyle2->SetPadBottomMargin(0.15);
  mystyle2->SetPadLeftMargin  (0.14);
  mystyle2->SetPadRightMargin (0.16);
//   mystyle2->SetPadBorderMode  (0);
  
  //options
//   mystyle2->SetStatBorderSize(3);
  mystyle2->SetOptStat       (0);
//   mystyle2->SetOptTitle      (0);
//   mystyle2->SetStatW         (0.4);
//   mystyle2->SetStatH         (0.4);
//   mystyle2->SetDrawOption("colz");
  
  //titles
  mystyle2->SetTitleFillColor (0);
  //mystyle2->SetTitleBorderSize(3 );
  //  mystyle2->SetTitleH         (0.06);
//   mystyle2->SetTitleSize      (0.06, "X");
//   mystyle2->SetTitleSize      (0.06, "Y");
//   mystyle2->SetTitleSize      (0.06, "Z");
//   mystyle2->SetTitleOffset    (1,  "X");
//   mystyle2->SetTitleOffset    (1,  "Y");
//   mystyle2->SetTitleOffset    (1,  "Z");
  //mystyle2->SetTitleFont      (62,   "X");
  //mystyle2->SetTitleFont      (62,   "Y");
  //mystyle2->SetTitleFont      (62,   "Z");
  
  //labels
//   mystyle2->SetLabelSize(0.05,   "X");
//   mystyle2->SetLabelSize(0.05,   "Y");
//   mystyle2->SetLabelSize(0.05,   "Z");
//   mystyle2->SetLabelOffset(0.01, "X");
//   mystyle2->SetLabelOffset(0.01, "Y");
//   mystyle2->SetLabelOffset(0.01, "Z");
//   mystyle2->SetLabelFont(62,     "X");
//   mystyle2->SetLabelFont(62,     "Y");
//   mystyle2->SetLabelFont(62,     "Z");
  
  //Frames
//   mystyle2->SetFrameFillStyle (0);
//   mystyle2->SetFrameFillColor (kWhite);
//   mystyle2->SetFrameLineColor (kBlack);
//   mystyle2->SetFrameLineStyle (0);
//   mystyle2->SetFrameLineWidth (2);
//   mystyle2->SetFrameBorderMode(0);
  
  //histograms
//   mystyle2->SetHistFillColor(8);
//   mystyle2->SetHistFillStyle(5);
//   mystyle2->SetHistLineColor(kBlack);
//   mystyle2->SetHistLineStyle(0);
//   mystyle2->SetHistLineWidth(2);
//   mystyle2->SetNdivisions   (10, "X");
//   mystyle2->SetNdivisions   (5, "Y");
//   mystyle2->SetNdivisions   (5, "Z");
  
  // lines
//   mystyle2->SetLineColor(kBlack);
//   mystyle2->SetLineStyle(1);
//   mystyle2->SetLineWidth(2);
  
  //markers
//   mystyle2->SetMarkerStyle(kFullCircle);
//   mystyle2->SetMarkerStyle(3);
//   mystyle2->SetMarkerSize (0.5);
  
  //functions
//   mystyle2->SetFuncColor(kBlack);
//   mystyle2->SetFuncStyle(0);
//   mystyle2->SetFuncWidth(2);
  
  //ticks
//   mystyle2->SetTickLength(0.03);
  
  //statistics box
//   mystyle2->SetStatFont (62);
//   mystyle2->SetStatColor(0);
//   mystyle2->SetStatH    (0.20);
//   mystyle2->SetStatW    (0.30);
//   mystyle2->SetStatX    (0.965);
//   mystyle2->SetStatY    (0.95);
  
  double A=hist1->Integral(1,  4, 12, hist1->GetNbinsY());
  double D=hist1->Integral(1,  4,  1, 11);
  
  double B=hist1->Integral(5, 10, 12, hist1->GetNbinsY());
  double E=hist1->Integral(5, 10,  1, 11);
  
  double C=hist1->Integral(11, hist1->GetNbinsX(), 12, hist1->GetNbinsY());
  double F=hist1->Integral(11, hist1->GetNbinsX(),  1, 11);

  double AD=A/D;
  double BE=B/E;
  double CF=C/F;
  
  std::cout << "A: " << A << std::endl;
  std::cout << "B: " << B << std::endl;
  std::cout << "C: " << C << std::endl;
  std::cout << "D: " << D << std::endl;
  std::cout << "E: " << E << std::endl;
  std::cout << "F: " << F << std::endl;

  std::cout << "----------" << std::endl;
  std::cout << "A/D: " << AD << std::endl;
  std::cout << "B/E: " << BE << std::endl;
  std::cout << "C/F: " << CF << std::endl;
  std::cout << "----------" << std::endl;


  //std::cout << "Estimate: " << Estimate << std::endl;

  gROOT->SetStyle("mystyle2");

  TCanvas *c1 =new TCanvas( "Ttbar" , "Ttbar" ,1);
  hist1->Draw("colz");
  hist1->GetXaxis()->SetTitle("mW [GeV]");
  hist1->GetXaxis()->CenterTitle();
  hist1->GetYaxis()->SetTitle("HT [GeV]");
  hist1->GetYaxis()->CenterTitle();
  hist1->GetYaxis()->SetRangeUser(350,2000);
  hist1->GetZaxis()->SetTitle("# of events");
  hist1->GetZaxis()->CenterTitle();
  hist1->GetXaxis()->SetTitleSize(0.06);
  hist1->GetYaxis()->SetTitleSize(0.06);
  hist1->GetZaxis()->SetTitleSize(0.06);
  hist1->GetXaxis()->SetTitleOffset(1.1);
  hist1->GetYaxis()->SetTitleOffset(1);
  hist1->GetZaxis()->SetTitleOffset(0.8);
  hist1->SetTitle("Ttbar");

  // TLine
  TLine * line = new TLine(50, 350, 50, 2000);
  line->SetLineWidth(3);
  line->SetLineStyle(1);
  line->SetLineColor(1);
  line->Draw("same");
  TLine * line2 = new TLine(100, 350, 100, 2000);
  line2->SetLineWidth(3);
  line2->SetLineStyle(1);
  line2->SetLineColor(1);
  line2->Draw("same");
  TLine * line3 = new TLine(0, 600, 200, 600);
  line3->SetLineWidth(3);
  line3->SetLineStyle(1);
  line3->SetLineColor(1);
  line3->Draw("same");

  //gPad->SetLogz();
  c1->SaveAs("HT_mW_Ttbar.pdf");

  TCanvas *c2 =new TCanvas( "LM9" , "LM9" ,1);
  hist2->Draw("colz");
  hist2->GetXaxis()->SetTitle("mW [GeV]");
  hist2->GetXaxis()->CenterTitle();
  hist2->GetYaxis()->SetTitle("HT [GeV]");
  hist2->GetYaxis()->CenterTitle();
  hist2->GetYaxis()->SetRangeUser(350,2000);
  hist2->GetZaxis()->SetTitle("# of events");
  hist2->GetZaxis()->CenterTitle();
  hist2->GetXaxis()->SetTitleSize(0.06);
  hist2->GetYaxis()->SetTitleSize(0.06);
  hist2->GetZaxis()->SetTitleSize(0.06);
  hist2->GetXaxis()->SetTitleOffset(1.1);
  hist2->GetYaxis()->SetTitleOffset(1);
  hist2->GetZaxis()->SetTitleOffset(0.8);
  hist2->SetTitle("LM9");

  line->Draw("same");
  line2->Draw("same");
  line3->Draw("same");

  //gPad->SetLogz();
  c2->SaveAs("HT_mW_LM9.pdf");

//   TCanvas *c3 =new TCanvas( "LM8" , "LM8" ,1);
//   hist3->Draw("colz");
//   hist3->GetXaxis()->SetTitle("mW [GeV]");
//   hist3->GetXaxis()->CenterTitle();
//   hist3->GetYaxis()->SetTitle("nJets [GeV]");
//   hist3->GetYaxis()->CenterTitle();
//   hist3->GetZaxis()->SetTitle("# of events");
//   hist3->GetZaxis()->CenterTitle();
//   hist3->GetXaxis()->SetTitleSize(0.06);
//   hist3->GetYaxis()->SetTitleSize(0.06);
//   hist3->GetZaxis()->SetTitleSize(0.06);
//   hist3->GetXaxis()->SetTitleOffset(1.1);
//   hist3->GetYaxis()->SetTitleOffset(1);
//   hist3->GetZaxis()->SetTitleOffset(0.8);
//   hist3->SetTitle("LM8");
//   //gPad->SetLogz();
//   c3->SaveAs("nJets_mW_LM8.pdf");

//   TCanvas *c4 =new TCanvas( "LM9" , "LM9" ,1);
//   hist4->Draw("colz");
//   hist4->GetXaxis()->SetTitle("mW [GeV]");
//   hist4->GetXaxis()->CenterTitle();
//   hist4->GetYaxis()->SetTitle("nJets [GeV]");
//   hist4->GetYaxis()->CenterTitle();
//   hist4->GetZaxis()->SetTitle("# of events");
//   hist4->GetZaxis()->CenterTitle();
//   hist4->GetXaxis()->SetTitleSize(0.06);
//   hist4->GetYaxis()->SetTitleSize(0.06);
//   hist4->GetZaxis()->SetTitleSize(0.06);
//   hist4->GetXaxis()->SetTitleOffset(1.1);
//   hist4->GetYaxis()->SetTitleOffset(1);
//   hist4->GetZaxis()->SetTitleOffset(0.8);
//   hist4->SetTitle("LM9");
//   //gPad->SetLogz();
//   c4->SaveAs("nJets_mW_LM9.pdf");

  return 0;
  
}
Exemplo n.º 26
0
void PlotPotential2D( const TString &sim, Int_t time, Int_t zoom=2, Int_t Nbins=2, const TString &options="") {

#ifdef __CINT__
    gSystem->Load("libplasma.so");
#endif

    PlasmaGlob::Initialize();

    // Palettes!
    gROOT->Macro("PlasmaPalettes.C");

    // Init Units table
    PUnits::UnitsTable::Get();

    // Load PData
    PData *pData = PData::Get(sim.Data());
    pData->LoadFileNames(time);
    if(!pData->IsInit()) return;

    TString opt = options;

    // More makeup
    gStyle->SetPadGridY(0);
    if(opt.Contains("gridx")) {
        gStyle->SetPadGridX(1);
    }
    if(opt.Contains("gridy")) {
        gStyle->SetPadGridY(1);
    }


    // Some plasma constants
    Double_t n0 = pData->GetPlasmaDensity();
    Double_t omegap = pData->GetPlasmaFrequency();
    Double_t timedepth = 1.;
    if(omegap!=0.0) timedepth = 1/omegap;
    Double_t kp = pData->GetPlasmaK();
    Double_t skindepth = 1.;
    if(kp!=0.0) skindepth = 1/kp;
    Double_t E0 = pData->GetPlasmaE0();

    // Some beam properties:
    Double_t Ebeam = pData->GetBeamEnergy();
    Double_t gamma = pData->GetBeamGamma();
    Double_t vbeam = pData->GetBeamVelocity();

    cout << Form(" - Bunch gamma      = %8.4f", gamma ) << endl;
    cout << Form(" - Bunch velocity   = %8.4f c", vbeam ) << endl;

    // Other parameters
    Float_t trapPotential = 1.0 - (1.0/gamma);
    cout << Form(" - Trap. potential  = %8.4f mc2/e",trapPotential) << endl;
    cout << endl;

    // Time in OU
    Float_t Time = pData->GetRealTime();
    // z start of the plasma in normalized units.
    Float_t zStartPlasma = pData->GetPlasmaStart()*kp;
    // z start of the beam in normalized units.
    Float_t zStartBeam = pData->GetBeamStart()*kp;
    // z start of the neutral in normalized units.
    Float_t zStartNeutral = pData->GetNeutralStart()*kp;
    // z end of the neutral in normalized units.
    Float_t zEndNeutral = pData->GetNeutralEnd()*kp;

    if(opt.Contains("center")) {
        Time -= zStartPlasma;
        if(opt.Contains("comov"))      // Centers on the head of the beam.
            Time += zStartBeam;
    }
    Float_t shiftz = pData->Shift(opt);
    //  cout << "Shift = " << shiftz << endl;


    // Calculate the "axis range" in number of bins. If Nbins==0 a RMS width is taken.
    Double_t rms0 = pData->GetBeamRmsY() * kp;
    if(pData->IsCyl())  rms0  = pData->GetBeamRmsR() * kp;

    Int_t FirstyBin = 0;
    Int_t LastyBin = 0;
    if(Nbins==0) {
        if(rms0>0.0)
            Nbins =  TMath::Nint(rms0 / pData->GetDX(1));
        else
            Nbins = 1;
    }

    // Slice width limits.
    if(!pData->IsCyl()) {
        FirstyBin = pData->GetNX(1)/2 + 1 - Nbins;
        LastyBin =  pData->GetNX(1)/2 + Nbins;
    } else {
        FirstyBin = 1;
        LastyBin  = Nbins;
    }
    // ----------------------------------------------------------------------------------


    // Get charge density histos
    Int_t Nspecies = pData->NSpecies();
    TH2F **hDen2D = new TH2F*[Nspecies];
    // Get charge density on-axis
    TH1F **hDen1D = new TH1F*[Nspecies];
    // And electric current (integrated)
    TH1F **hCur1D = new TH1F*[Nspecies];
    for(Int_t i=0; i<Nspecies; i++) {

        hDen2D[i] = NULL;

        if(!pData->GetChargeFileName(i))
            continue;

        cout << Form(" Getting charge density of specie: ") << i << endl;


        char hName[24];
        sprintf(hName,"hDen2D_%i",i);
        hDen2D[i] = (TH2F*) gROOT->FindObject(hName);
        if(hDen2D[i]) delete hDen2D[i];

        if(!pData->Is3D())
            hDen2D[i] = pData->GetCharge(i,opt);
        else
            hDen2D[i] = pData->GetCharge2DSliceZY(i,-1,Nbins,opt+"avg");

        hDen2D[i]->SetName(hName);
        hDen2D[i]->GetXaxis()->CenterTitle();
        hDen2D[i]->GetYaxis()->CenterTitle();
        hDen2D[i]->GetZaxis()->CenterTitle();

        if(opt.Contains("comov"))
            hDen2D[i]->GetXaxis()->SetTitle("k_{p} #zeta");
        else
            hDen2D[i]->GetXaxis()->SetTitle("k_{p} z");

        if(pData->IsCyl())
            hDen2D[i]->GetYaxis()->SetTitle("k_{p} r");
        else
            hDen2D[i]->GetYaxis()->SetTitle("k_{p} y");

        hDen2D[i]->GetZaxis()->SetTitle("n [n_{0}]");


        hDen1D[i] = NULL;
        hCur1D[i] = NULL;

        if(!pData->GetEfieldFileName(i))
            continue;

        sprintf(hName,"hDen1D_%i",i);
        hDen1D[i] = (TH1F*) gROOT->FindObject(hName);
        if(hDen1D[i]) delete hDen1D[i];

        // 1D histograms
        if(pData->Is3D()) {
            hDen1D[i] = pData->GetH1SliceZ3D(pData->GetChargeFileName(i)->c_str(),"charge",-1,Nbins,-1,Nbins,opt+"avg");
        } else if(pData->IsCyl()) { // Cylindrical: The first bin with r>0 is actually the number 1 (not the 0).
            hDen1D[i] = pData->GetH1SliceZ(pData->GetChargeFileName(i)->c_str(),"charge",1,Nbins,opt+"avg");
        } else { // 2D cartesian
            hDen1D[i] = pData->GetH1SliceZ(pData->GetChargeFileName(i)->c_str(),"charge",-1,Nbins,opt+"avg");
        }
        hDen1D[i]->SetName(hName);

        // if(hDen1D[i]) delete hDen1D[i];
        // hDen1D[i] = (TH1F*) hE2D[i]->ProjectionX(hName,FirstyBin,LastyBin);
        // hDen1D[i]->Scale(1.0/(LastyBin-FirstyBin+1));

        if(opt.Contains("comov"))
            hDen1D[i]->GetXaxis()->SetTitle("#zeta [c/#omega_{p}]");
        else
            hDen1D[i]->GetXaxis()->SetTitle("z [c/#omega_{p}]");

        if(i==0)
            hDen1D[i]->GetYaxis()->SetTitle("n/n_{0}");
        else if(i==1)
            hDen1D[i]->GetYaxis()->SetTitle("n_{b}/n_{0}");
        else
            hDen1D[i]->GetYaxis()->SetTitle("n_{i}/n_{0}");

        // Get the current:
        if(i==0) continue;

        sprintf(hName,"hCur1D_%i",i);
        hCur1D[i] = (TH1F*) gROOT->FindObject(hName);
        if(hCur1D[i]) delete hCur1D[i];

        if(opt.Contains("curr")) {
            // To get the current is needed to read in a wider transverse range which includes all the charge.
            Int_t NbinsT = 100;
            if(pData->Is3D()) {
                hCur1D[i] = pData->GetH1SliceZ3D(pData->GetChargeFileName(i)->c_str(),"charge",-1,NbinsT,-1,NbinsT,opt+"int");
            } else if(pData->IsCyl()) { // Cylindrical: The first bin with r>0 is actually the number 1 (not the 0).
                hCur1D[i] = pData->GetH1SliceZ(pData->GetChargeFileName(i)->c_str(),"charge",1,NbinsT,opt+"int");
            } else { // 2D cartesian
                hCur1D[i] = pData->GetH1SliceZ(pData->GetChargeFileName(i)->c_str(),"charge",-1,NbinsT,opt+"int");
            }
            hCur1D[i]->SetName(hName);

            if(opt.Contains("comov")) {
                hCur1D[i]->GetXaxis()->SetTitle("#zeta [c/#omega_{p}]");
                hCur1D[i]->GetYaxis()->SetTitle("dn/d#zeta [(n_{0}/k_{p}^{3}) (#omega_{p}/c)]");
            } else {
                hCur1D[i]->GetXaxis()->SetTitle("z [c/#omega_{p}]");
                hCur1D[i]->GetYaxis()->SetTitle("dn/dz [(n_{0}/k_{p}^{3}) (#omega_{p}/c)]");
            }

            Int_t NB = hCur1D[i]->GetNbinsX();
            Float_t dx = (hCur1D[i]->GetBinLowEdge(1)-hCur1D[i]->GetBinLowEdge(NB+1))/NB;

            // hCur1D[i]->Scale(dx);
            Float_t Charge = hCur1D[i]->Integral() * dx;

            cout << Form(" Integrated charge of specie %3i = %8.4f n0 * kp^-3",i,Charge) << endl;
        }
    }


    // Get electric fields 2D
    const Int_t Nfields = 3;
    TH2F **hE2D = new TH2F*[Nfields];
    TH1F **hE1D = new TH1F*[Nfields];
    TH2F *hV2D = NULL;
    TH1F *hV1D = NULL;
    for(Int_t i=0; i<Nfields; i++) {
        hE2D[i] = NULL;
        hE1D[i] = NULL;

        if(!pData->GetEfieldFileName(i))
            continue;

        cout << Form(" Getting electric field number ") << i+1 << endl;

        char hName[24];
        sprintf(hName,"hE2D_%i",i);
        hE2D[i] = (TH2F*) gROOT->FindObject(hName);
        if(hE2D[i]) delete hE2D[i];

        if(!pData->Is3D())
            hE2D[i] = pData->GetEField(i,opt);
        else
            hE2D[i] = pData->GetEField2DSliceZY(i,-1,Nbins,opt+"avg");

        hE2D[i]->SetName(hName);
        hE2D[i]->GetXaxis()->CenterTitle();
        hE2D[i]->GetYaxis()->CenterTitle();
        hE2D[i]->GetZaxis()->CenterTitle();
        if(opt.Contains("comov"))
            hE2D[i]->GetXaxis()->SetTitle("k_{p} #zeta");
        else
            hE2D[i]->GetXaxis()->SetTitle("k_{p} z");

        if(pData->IsCyl())
            hE2D[i]->GetYaxis()->SetTitle("k_{p} r");
        else
            hE2D[i]->GetYaxis()->SetTitle("k_{p} y");

        if(i==0)
            hE2D[i]->GetZaxis()->SetTitle("E_{z}/E_{0}");
        else if(i==1)
            hE2D[i]->GetZaxis()->SetTitle("E_{y}/E_{0}");
        else if(i==2)
            hE2D[i]->GetZaxis()->SetTitle("E_{x}/E_{0}");

        sprintf(hName,"hE1D_%i",i);
        hE1D[i] = (TH1F*) gROOT->FindObject(hName);
        if(hE1D[i]) delete hE1D[i];

        // 1D histograms
        char nam[3];
        sprintf(nam,"e%i",i+1);
        if(pData->Is3D()) {

            if(i==0)
                hE1D[i] = pData->GetH1SliceZ3D(pData->GetEfieldFileName(i)->c_str(),nam,-1,Nbins,-1,Nbins,opt+"avg");
            else
                hE1D[i] = pData->GetH1SliceZ3D(pData->GetEfieldFileName(i)->c_str(),nam,-Nbins,Nbins,-Nbins,Nbins,opt+"avg");

        } else if(pData->IsCyl()) { // Cylindrical: The first bin with r>0 is actually the number 1 (not the 0).

            hE1D[i] = pData->GetH1SliceZ(pData->GetEfieldFileName(i)->c_str(),nam,1,Nbins,opt+"avg");

        } else { // 2D cartesian

            if(i==0)
                hE1D[i] = pData->GetH1SliceZ(pData->GetEfieldFileName(i)->c_str(),nam,-1,Nbins,opt+"avg");
            else
                hE1D[i] = pData->GetH1SliceZ(pData->GetEfieldFileName(i)->c_str(),nam,-Nbins,Nbins,opt+"avg");
        }

        hE1D[i]->SetName(hName);
        if(opt.Contains("comov"))
            hE1D[i]->GetXaxis()->SetTitle("#zeta [c/#omega_{p}]");
        else
            hE1D[i]->GetXaxis()->SetTitle("z [c/#omega_{p}]");

        if(i==0)
            hE1D[i]->GetYaxis()->SetTitle("E_{z} [E_{0}]");
        else if(i==1)
            hE1D[i]->GetYaxis()->SetTitle("E_{y} [E_{0}]");
        else if(i==2)
            hE1D[i]->GetYaxis()->SetTitle("E_{x} [E_{0}]");

        // Alternative
        // if(hE1D[i]) delete hE1D[i];
        // hE1D[i] = (TH1F*) hE2D[i]->ProjectionX(hName,FirstyBin,LastyBin);
        // hE1D[i]->Scale(1.0/(LastyBin-FirstyBin+1));

        if(i==0) {
            Int_t   NbinsX = hE2D[i]->GetNbinsX();
            Int_t   NbinsY = hE2D[i]->GetNbinsY();

            Float_t dx = pData->GetDX(0);

            sprintf(hName,"hV2D");
            hV2D = (TH2F*) hE2D[i]->Clone(hName);
            hV2D->Reset();

            sprintf(hName,"hV1D");
            hV1D = (TH1F*) hE1D[i]->Clone(hName);
            hV1D->Reset();

            for(Int_t j=NbinsY; j>0; j--) {
                Double_t integral = 0.0;
                for(Int_t k=NbinsX; k>0; k--) {
                    integral += hE2D[i]->GetBinContent(k,j) * dx;
                    hV2D->SetBinContent(k,j,integral);
                }
            }

            Double_t integral = 0.0;
            for(Int_t k=NbinsX; k>0; k--) {
                integral += hE1D[i]->GetBinContent(k) * dx;
                hV1D->SetBinContent(k,integral);
            }

        }

    }

    // Now, combine the electric field components into the total |E|
    // and calculate ionization probability for He:
    // Outter Helium electron
    Double_t Eion0 = 24.59 * PUnits::eV;
    Double_t Z     = 1;

    TH2F *hETotal2D = (TH2F*) hE2D[0]->Clone("hETotal2D");
    hETotal2D->Reset();
    TH2F *hIonProb2D = (TH2F*) hE2D[0]->Clone("hIonProb2D");
    hIonProb2D->Reset();
    TH1F *hETotal1D = (TH1F*) hE1D[0]->Clone("hETotal1D");
    hETotal1D->Reset();
    TH1F *hIonProb1D = (TH1F*) hE1D[0]->Clone("hIonProb1D");
    hIonProb1D->Reset();
    {
        Int_t NbinsX = hE2D[0]->GetNbinsX();
        Int_t NbinsY = hE2D[0]->GetNbinsY();
        for(Int_t j=0; j<NbinsX; j++) {
            for(Int_t k=0; k<NbinsY; k++) {
                Double_t E1 = hE2D[0]->GetBinContent(j,k);
                Double_t E2 = hE2D[1]->GetBinContent(j,k);
                Double_t E3 = hE2D[2]->GetBinContent(j,k);
                Double_t E  = TMath::Sqrt(E1*E1+E2*E2+E3*E3);

                hETotal2D->SetBinContent(j,k,E);

                E *= E0;

                // Double_t IonProb = (PFunc::ADK(E,Eion0,Z,l,m)/PUnits::atomictime)*PUnits::femtosecond;
                Double_t IonProb = PFunc::ADK_ENG(E,Eion0,Z) * PUnits::femtosecond;
                // if(IonProb>1) IonProb = 1.0;
                // cout << "Ion prob = " << IonProb << endl;
                hIonProb2D->SetBinContent(j,k,IonProb);
            }
            Double_t E1 = hE1D[0]->GetBinContent(j);
            Double_t E2 = hE1D[1]->GetBinContent(j);
            Double_t E3 = hE1D[2]->GetBinContent(j);
            Double_t E  = TMath::Sqrt(E1*E1+E2*E2+E3*E3);

            hETotal1D->SetBinContent(j,E);

            E *= E0;

            // Double_t IonProb = (PFunc::ADK(E,Eion0,Z,l,m)/PUnits::atomictime)*PUnits::femtosecond;
            Double_t IonProb = PFunc::ADK_ENG(E,Eion0,Z) * PUnits::femtosecond;
            // cout << "Ion prob = " << IonProb << endl;

            hIonProb1D->SetBinContent(j,IonProb);


        }
    }
    hETotal2D->GetZaxis()->SetTitle("E [E_{0}]");
    hIonProb2D->GetZaxis()->SetTitle("W_{ADK} [fs^{-1}]");
    hETotal1D->GetYaxis()->SetTitle("E [E_{0}]");
    hIonProb1D->GetYaxis()->SetTitle("W_{ADK} [fs^{-1}]");



    // Tunning the Histograms
    // ---------------------

    // Chaning to user units:
    // --------------------------

    if(opt.Contains("units") && n0) {

        for(Int_t i=0; i<Nspecies; i++) {

            if(!hDen2D[i]) continue;

            Int_t NbinsX = hDen2D[i]->GetNbinsX();
            Float_t xMin = skindepth * hDen2D[i]->GetXaxis()->GetXmin() / PUnits::um;
            Float_t xMax = skindepth * hDen2D[i]->GetXaxis()->GetXmax() / PUnits::um;
            Int_t NbinsY = hDen2D[i]->GetNbinsY();
            Float_t ymin = skindepth * hDen2D[i]->GetYaxis()->GetXmin() / PUnits::um;
            Float_t ymax = skindepth * hDen2D[i]->GetYaxis()->GetXmax() / PUnits::um;
            hDen2D[i]->SetBins(NbinsX,xMin,xMax,NbinsY,ymin,ymax);
            // for(Int_t j=0;j<hDen2D[i]->GetNbinsX();j++) {
            // 	for(Int_t k=0;k<hDen2D[i]->GetNbinsY();k++) {
            // 	  hDen2D[i]->SetBinContent(j,k, hDen2D[i]->GetBinContent(j,k) * n0 / (1e17/PUnits::cm3) );
            // 	}
            // }

            if(pData->IsCyl())
                hDen2D[i]->GetYaxis()->SetTitle("r [#mum]");
            else
                hDen2D[i]->GetYaxis()->SetTitle("y [#mum]");

            if(opt.Contains("comov"))
                hDen2D[i]->GetXaxis()->SetTitle("#zeta [#mum]");
            else
                hDen2D[i]->GetXaxis()->SetTitle("z [#mum]");

            // if(i==0)
            // 	hDen2D[i]->GetZaxis()->SetTitle("n_{e} [10^{17}/cm^{3}]");
            // else if(i==1)
            // 	hDen2D[i]->GetZaxis()->SetTitle("n_{b} [10^{17}/cm^{3}]");
            // else
            // 	hDen2D[i]->GetZaxis()->SetTitle("n_{i} [10^{17}/cm^{3}]");

            hDen1D[i]->SetBins(NbinsX,xMin,xMax);
            // for(Int_t j=0;j<hDen1D[i]->GetNbinsX();j++) {
            // 	hDen1D[i]->SetBinContent(j, hDen1D[i]->GetBinContent(j) * n0 / (1e17/PUnits::cm3) );
            // }


            if(opt.Contains("comov"))
                hDen1D[i]->GetXaxis()->SetTitle("#zeta [#mum]");
            else
                hDen1D[i]->GetXaxis()->SetTitle("z [#mum]");

            if(hCur1D[i]) {

                hCur1D[i]->SetBins(NbinsX,xMin,xMax);
                Double_t binSize = (xMax - xMin)/NbinsX;  // bin size in um.

                Double_t dV = skindepth * skindepth * skindepth;
                Double_t lightspeed =  PConst::c_light / (PUnits::um/PUnits::femtosecond);

                hCur1D[i]->Scale(TMath::Abs(n0 * dV * (PConst::ElectronCharge/PUnits::picocoulomb) * (kp * PConst::c_light * PUnits::femtosecond)));

                hCur1D[i]->GetYaxis()->SetTitle("I[kA]");
                hCur1D[i]->GetYaxis()->SetTitle("");
                if(opt.Contains("comov"))
                    hCur1D[i]->GetXaxis()->SetTitle("#zeta [#mum]");
                else
                    hCur1D[i]->GetXaxis()->SetTitle("z [#mum]");


                Float_t Charge = hCur1D[i]->Integral() * (binSize / lightspeed);
                cout << Form(" Integrated charge of specie %3i = %8f pC",i,Charge) << endl;
            }
        }


        for(Int_t i=0; i<Nfields; i++) {
            Int_t NbinsX = hE2D[i]->GetNbinsX();
            Float_t xMin = skindepth * hE2D[i]->GetXaxis()->GetXmin() / PUnits::um;
            Float_t xMax = skindepth * hE2D[i]->GetXaxis()->GetXmax() / PUnits::um;
            Int_t NbinsY = hE2D[i]->GetNbinsY();
            Float_t ymin = skindepth * hE2D[i]->GetYaxis()->GetXmin() / PUnits::um;
            Float_t ymax = skindepth * hE2D[i]->GetYaxis()->GetXmax() / PUnits::um;
            hE2D[i]->SetBins(NbinsX,xMin,xMax,NbinsY,ymin,ymax);
            hE1D[i]->SetBins(NbinsX,xMin,xMax);

            for(Int_t j=0; j<hE2D[i]->GetNbinsX(); j++) {
                for(Int_t k=0; k<hE2D[i]->GetNbinsY(); k++) {
                    hE2D[i]->SetBinContent(j,k, hE2D[i]->GetBinContent(j,k) * ( E0 / (PUnits::GV/PUnits::m) ) );
                }
                hE1D[i]->SetBinContent(j, hE1D[i]->GetBinContent(j) * ( E0 / (PUnits::GV/PUnits::m) ) );
            }

            if(pData->IsCyl())
                hE2D[i]->GetYaxis()->SetTitle("r [#mum]");
            else
                hE2D[i]->GetYaxis()->SetTitle("y [#mum]");

            if(opt.Contains("comov"))
                hE2D[i]->GetXaxis()->SetTitle("#zeta [#mum]");
            else
                hE2D[i]->GetXaxis()->SetTitle("z [#mum]");

            if(i==0)
                hE2D[i]->GetZaxis()->SetTitle("E_{z} [GV/m]");
            else if(i==1)
                hE2D[i]->GetZaxis()->SetTitle("E_{y} [GV/m]");
            else if(i==2)
                hE2D[i]->GetZaxis()->SetTitle("E_{x} [GV/m]");


            if(opt.Contains("comov"))
                hE1D[i]->GetXaxis()->SetTitle("#zeta [mm]");
            else
                hE1D[i]->GetXaxis()->SetTitle("z [mm]");

            if(i==0)
                hE1D[i]->GetYaxis()->SetTitle("E_{z} [GV/m]");
            else if(i==1)
                hE1D[i]->GetYaxis()->SetTitle("E_{y} [GV/m]");
            else if(i==2)
                hE1D[i]->GetYaxis()->SetTitle("E_{x} [GV/m]");


            if(i==0) {
                hV2D->SetBins(NbinsX,xMin,xMax,NbinsY,ymin,ymax);
                hETotal2D->SetBins(NbinsX,xMin,xMax,NbinsY,ymin,ymax);
                hIonProb2D->SetBins(NbinsX,xMin,xMax,NbinsY,ymin,ymax);
                hV1D->SetBins(NbinsX,xMin,xMax);
                hETotal1D->SetBins(NbinsX,xMin,xMax);
                hIonProb1D->SetBins(NbinsX,xMin,xMax);
                for(Int_t j=0; j<NbinsX; j++) {
                    for(Int_t k=0; k<NbinsY; k++) {
                        hV2D->SetBinContent(j,k, hV2D->GetBinContent(j,k) * E0 * skindepth / (PUnits::MV));
                        hETotal2D->SetBinContent(j,k, hETotal2D->GetBinContent(j,k) * ( E0 / (PUnits::GV/PUnits::m) ) );
                    }
                    hV1D->SetBinContent(j, hV1D->GetBinContent(j) * ( E0 * skindepth / (PUnits::MV) ) );
                    hETotal1D->SetBinContent(j, hETotal1D->GetBinContent(j) * ( E0 / (PUnits::GV/PUnits::m) ) );
                }

                if(pData->IsCyl()) {
                    hV2D->GetYaxis()->SetTitle("r [#mum]");
                    hETotal2D->GetYaxis()->SetTitle("r [#mum]");
                } else {
                    hV2D->GetYaxis()->SetTitle("y [#mum]");
                    hETotal2D->GetYaxis()->SetTitle("y [#mum]");

                }

                if(opt.Contains("comov")) {
                    hV2D->GetXaxis()->SetTitle("#zeta [#mum]");
                    hV1D->GetXaxis()->SetTitle("#zeta [#mum]");
                    hETotal2D->GetXaxis()->SetTitle("#zeta [#mum]");
                    hETotal1D->GetXaxis()->SetTitle("#zeta [#mum]");
                } else {
                    hV2D->GetXaxis()->SetTitle("z [#mum]");
                    hV2D->GetXaxis()->SetTitle("z [#mum]");
                    hETotal2D->GetXaxis()->SetTitle("z [#mum]");
                    hETotal1D->GetXaxis()->SetTitle("z [#mum]");
                }

                hV2D->GetZaxis()->SetTitle("#Psi-#Psi_{t} [MV]");
                hV1D->GetYaxis()->SetTitle("#Psi-#Psi_{t} [MV]");
                hETotal2D->GetZaxis()->SetTitle("E [GV/m]");
                hETotal1D->GetYaxis()->SetTitle("E [GV/m]");
            }
        }
    }


    // --------------------------------------------------- Vertical Zoom ------------

    Float_t yRange    = (hDen2D[0]->GetYaxis()->GetXmax() - hDen2D[0]->GetYaxis()->GetXmin())/zoom;
    Float_t midPoint = (hDen2D[0]->GetYaxis()->GetXmax() + hDen2D[0]->GetYaxis()->GetXmin())/2.;
    Float_t yMin = midPoint-yRange/2;
    Float_t yMax = midPoint+yRange/2;
    if(pData->IsCyl()) {
        yMin = pData->GetXMin(1);
        yMax = yRange;
    }

    for(Int_t i=0; i<Nspecies; i++) {
        if(!hDen2D[i]) continue;
        hDen2D[i]->GetYaxis()->SetRangeUser(yMin,yMax);
    }

    for(Int_t i=0; i<Nfields; i++) {
        if(!hE2D[i]) continue;
        hE2D[i]->GetYaxis()->SetRangeUser(yMin,yMax);
    }

    hETotal2D->GetYaxis()->SetRangeUser(yMin,yMax);

    Float_t xMin = hDen2D[0]->GetXaxis()->GetXmin();
    Float_t xMax = hDen2D[0]->GetXaxis()->GetXmax();
    Float_t xRange = xMax - xMin;

    // ------------- z Zoom --------------------------------- Plasma palette -----------
    // Set the range of the plasma charge density histogram for maximum constrast
    // using a dynamic palette wich adjust the nominal value to a certain color.


    Float_t density = 1;
    Float_t Base  = density;

    Float_t *Max = new Float_t[Nspecies];
    Float_t *Min = new Float_t[Nspecies];

    for(Int_t i=0; i<Nspecies; i++) {
        if(!hDen2D[i]) continue;

        Max[i] = hDen2D[i]->GetMaximum();
        Min[i] = 1.01E-1 * Base;
        if(i==1) Min[i] = 1.01E-1 * Base;
        if(i==2) Min[i] = 1.01E-4 * Base;
        hDen2D[i]->GetZaxis()->SetRangeUser(Min[i],Max[i]);
    }

    // Dynamic plasma palette
    const Int_t plasmaDNRGBs = 3;
    const Int_t plasmaDNCont = 64;
    Float_t basePos = 0.5;
    if(Max[0]!=Min[0]) {
        if(opt.Contains("logz")) {
            Float_t a = 1.0/(TMath::Log10(Max[0])-TMath::Log10(Min[0]));
            Float_t b = TMath::Log10(Min[0]);
            basePos = a*(TMath::Log10(Base) - b);

        } else {
            basePos = (1.0/(Max[0]-Min[0]))*(Base - Min[0]);
        }
    }

    Double_t plasmaDStops[plasmaDNRGBs] = { 0.00, basePos, 1.00 };
    Double_t plasmaDRed[plasmaDNRGBs]   = { 0.99, 0.90, 0.00 };
    Double_t plasmaDGreen[plasmaDNRGBs] = { 0.99, 0.90, 0.00 };
    Double_t plasmaDBlue[plasmaDNRGBs]  = { 0.99, 0.90, 0.00 };

    PPalette * plasmaPalette = (PPalette*) gROOT->FindObject("plasma");
    plasmaPalette->CreateGradientColorTable(plasmaDNRGBs, plasmaDStops,
                                            plasmaDRed, plasmaDGreen, plasmaDBlue, plasmaDNCont);
    // Change the range of z axis for the fields to be symmetric.
    Float_t *Emax = new Float_t[Nfields];
    Float_t *Emin = new Float_t[Nfields];
    for(Int_t i=0; i<Nfields; i++) {
        Emax[i] = hE2D[i]->GetMaximum();
        Emin[i] = hE2D[i]->GetMinimum();
        if(Emax[i] > TMath::Abs(Emin[i]))
            Emin[i] = -Emax[i];
        else
            Emax[i] = -Emin[i];
        hE2D[i]->GetZaxis()->SetRangeUser(Emin[i],Emax[i]);
    }


    // Potential
    if(opt.Contains("units")) {
        trapPotential *=  ( E0 * skindepth / (PUnits::MV) );
    }

    Float_t Vmin = hV1D->GetMinimum();
    {   // Shift potential
        Int_t   NbinsX = hV2D->GetNbinsX();
        Int_t   NbinsY = hV2D->GetNbinsY();
        for(Int_t j=0; j<NbinsX; j++) {
            for(Int_t k=0; k<NbinsY; k++) {
                hV2D->SetBinContent(j,k, hV2D->GetBinContent(j,k) - Vmin -trapPotential);
            }
            hV1D->SetBinContent(j, hV1D->GetBinContent(j) - Vmin -trapPotential);
        }
    }

    Vmin = hV1D->GetMinimum();
    Float_t Vmax = hV1D->GetMaximum();

    // Dynamic potential palette
    const Int_t potPNRGBs = 5;
    const Int_t potPNCont = 64;
    Float_t zeroPos = -Vmin/(Vmax-Vmin);

    Double_t potPStops[potPNRGBs] = { 0.00, zeroPos-3.0/potPNCont,zeroPos, zeroPos+3.0/potPNCont, 1.00 };
    Double_t potPRed[potPNRGBs]   = { 0.518, 0.965, 0.90, 0.498, 0.106 };
    Double_t potPGreen[potPNRGBs] = { 0.078, 0.925, 0.90, 0.718, 0.078 };
    Double_t potPBlue[potPNRGBs]  = { 0.106, 0.353, 0.90, 0.780, 0.518 };

    PPalette * potentialPalette = (PPalette*) gROOT->FindObject("rbow2inv");
    potentialPalette->CreateGradientColorTable(potPNRGBs, potPStops,
            potPRed, potPGreen, potPBlue, potPNCont);

    // Extract contours
    TCanvas* c = new TCanvas("c","Contour List",0,0,600,600);
    c->cd();

    // Potential
    TH2F *hV2Dc = (TH2F*) hV2D->Clone("hV2Dc");
    const Int_t Ncontours = 25;
    Double_t contours[Ncontours];
    for(Int_t i=0; i<Ncontours; i++) {
        contours[i] = i*(trapPotential/5.0) - trapPotential;
    }
    hV2Dc->SetContour(Ncontours, contours);
    hV2Dc->Draw("cont list");

    c->Update();
    TObjArray *contsV2D = (TObjArray*) gROOT->GetListOfSpecials()->FindObject("contours");
    TClonesArray graphsV2D("TGraph",Ncontours);
    {
        Int_t ncontours = contsV2D->GetSize();
        TList* clist = NULL;
        Int_t nGraphs = 0;
        TGraph *gr = NULL;
        for(Int_t i = 0; i < ncontours; i++) {
            if(i==0) continue;

            clist = (TList*) contsV2D->At(i);

            for(Int_t j = 0 ; j < clist->GetSize(); j++) {
                gr = (TGraph*) clist->At(j);
                if(!gr) continue;

                gr->SetLineWidth(1);
                gr->SetLineColor(kGray+1);

                if( !((i)%5) ) {
                    gr->SetLineWidth(2);
                    gr->SetLineColor(kGray+2);
                }
                new(graphsV2D[nGraphs]) TGraph(*gr) ;
                nGraphs++;
            }
        }
    }

    // Ion probability
    hIonProb2D->GetZaxis()->SetRangeUser(0.00501,80);

    TH2F *hIonProb2Dc = (TH2F*) hIonProb2D->Clone("hIonProb2Dc");
    const Int_t NcontI = 4;
    Double_t contI[NcontI] = {0.01,0.1,1.0,10.0};
    hIonProb2Dc->SetContour(NcontI, contI);
    hIonProb2Dc->Draw("cont list");

    c->Update();
    TObjArray *contsI2D = (TObjArray*) gROOT->GetListOfSpecials()->FindObject("contours");
    TClonesArray graphsI2D("TGraph",NcontI);
    {
        Int_t ncontours = contsI2D->GetSize();
        TList* clist = NULL;
        Int_t nGraphs = 0;
        TGraph *gr = NULL;
        for(Int_t i = 0; i < ncontours; i++) {
            clist = (TList*) contsI2D->At(i);

            for(Int_t j = 0 ; j < clist->GetSize(); j++) {
                gr = (TGraph*) clist->At(j);
                if(!gr) continue;

                if( !(i%2) ) {
                    gr->SetLineWidth(1);
                    gr->SetLineStyle(2);
                    gr->SetLineColor(kOrange-3);
                } else {
                    gr->SetLineWidth(1);
                    gr->SetLineStyle(1);
                    gr->SetLineColor(kOrange-3);
                }

                new(graphsI2D[nGraphs]) TGraph(*gr) ;
                nGraphs++;
            }
        }
    }




    // "Axis range" in Osiris units:
    Double_t ylow  = hDen2D[0]->GetYaxis()->GetBinLowEdge(FirstyBin);
    Double_t yup = hDen2D[0]->GetYaxis()->GetBinUpEdge(LastyBin);
    Double_t xmin = hDen2D[0]->GetXaxis()->GetXmin();
    Double_t xmax = hDen2D[0]->GetXaxis()->GetXmax();

    TLine *lineYzero = new TLine(xmin,0.0,xmax,0.0);
    lineYzero->SetLineColor(kGray+2);
    lineYzero->SetLineStyle(2);

    TLine *lineYup = new TLine(xmin,yup,xmax,yup);
    lineYup->SetLineColor(kGray+1);
    lineYup->SetLineStyle(2);

    TLine *lineYdown = new TLine(xmin,ylow,xmax,ylow);
    lineYdown->SetLineColor(kGray+1);
    lineYdown->SetLineStyle(2);

    zStartPlasma -= shiftz;
    zStartNeutral -= shiftz;
    zEndNeutral -= shiftz;

    if(opt.Contains("units")) {
        zStartPlasma *= skindepth / PUnits::um;
        zStartNeutral *= skindepth / PUnits::um;
        zEndNeutral *= skindepth / PUnits::um;
    }

    //  cout << "Start plasma = " << zStartPlasma << endl;
    TLine *lineStartPlasma = new TLine(zStartPlasma,yMin,zStartPlasma,yMax);
    lineStartPlasma->SetLineColor(kGray+2);
    lineStartPlasma->SetLineStyle(2);
    lineStartPlasma->SetLineWidth(3);

    //  cout << "Start plasma = " << zStartNeutral << endl;
    TLine *lineStartNeutral = new TLine(zStartNeutral,yMin,zStartNeutral,yMax);
    lineStartNeutral->SetLineColor(kGray+1);
    lineStartNeutral->SetLineStyle(2);
    lineStartNeutral->SetLineWidth(3);

    //  cout << "End plasma = " << zEndNeutral << endl;
    TLine *lineEndNeutral = new TLine(zEndNeutral,yMin,zEndNeutral,yMax);
    lineEndNeutral->SetLineColor(kGray+1);
    lineEndNeutral->SetLineStyle(2);
    lineEndNeutral->SetLineWidth(3);


    // Plotting
    // -----------------------------------------------

    // Canvas setup
    TCanvas *C = new TCanvas("C","2D Charge density and Electric field",750,666);

    // Palettes setup
    TExec *exPlasma = new TExec("exPlasma","plasmaPalette->cd();");
    TExec *exElec   = new TExec("exElec","redelectronPalette->cd();");
    TExec *exHot    = new TExec("exHot","hotPalette->cd();");
    TExec *exField  = new TExec("exField","rbow2Palette->cd();");
    TExec *exFieldT = new TExec("exFieldT","redPalette->cd();");
    TExec *exIonP   = new TExec("exIonP","redPalette->cd();");
    TExec *exPot    = new TExec("exPot","rbow2invPalette->cd();");

    // Actual Plotting!
    // ------------------------------------------------------------

    // Output file
    TString fOutName = Form("./%s/Plots/Potential2D/Potential2D",pData->GetPath().c_str());
    fOutName += Form("-%s_%i",pData->GetName(),time);

    // Setup Pad layout:
    Float_t lMargin = 0.15;
    Float_t rMargin = 0.18;
    Float_t bMargin = 0.15;
    Float_t tMargin = 0.04;
    Float_t factor = 1.0;
    PlasmaGlob::CanvasAsymPartition(C,2,lMargin,rMargin,bMargin,tMargin,factor);

    TPad *pad[2];
    TString sLabels[] = {"(a)","(b)"};
    // Text objects
    TPaveText **textLabel = new TPaveText*[2];

    C->cd(0);
    char pname[16];
    sprintf(pname,"pad_%i",1);
    pad[0] = (TPad*) gROOT->FindObject(pname);
    pad[0]->Draw();
    pad[0]->cd(); // <---------------------------------------------- Top Plot ---------
    if(opt.Contains("logz")) {
        pad[0]->SetLogz(1);
    } else {
        pad[0]->SetLogz(0);
    }
    pad[0]->SetFrameLineWidth(3);
    pad[0]->SetTickx(1);

    // Re-range:
    for(Int_t i=0; i<Nspecies; i++) {
        if(!hDen2D[i]) continue;
        hDen2D[i]->GetYaxis()->SetRangeUser(yMin -(factor-1)*yRange, yMax);
    }


    TH2F *hFrame = (TH2F*) gROOT->FindObject("hFrame1");
    if(hFrame) delete hFrame;
    hFrame = (TH2F*) hDen2D[0]->Clone("hFrame1");
    hFrame->Reset();

    hFrame->SetLabelFont(42,"xyz");
    hFrame->SetTitleFont(42,"xyz");

    hFrame->GetYaxis()->SetNdivisions(505);
    hFrame->GetYaxis()->SetLabelSize(0.085);
    hFrame->GetYaxis()->SetTitleSize(0.09);
    hFrame->GetYaxis()->SetTitleOffset(0.7);
    hFrame->GetYaxis()->SetTickLength(0.02);

    hFrame->GetXaxis()->SetLabelOffset(999.);
    hFrame->GetXaxis()->SetTitleOffset(999.);
    hFrame->GetXaxis()->SetTickLength(0.04);

    // Frame asymmetry:
    hFrame->Draw("col");

    // hDen2D[0]->GetZaxis()->SetNdivisions(505);

    // Injected electrons if any
    if(Nspecies>=3) {
        if(hDen2D[2]) {
            exHot->Draw();
            hDen2D[2]->Draw("colz same");
        }
    }

    // Plasma
    hDen2D[0]->GetZaxis()->SetTitleFont(42);
    exPlasma->Draw();
    hDen2D[0]->Draw("colz same");

    // Beam driver.
    if(hDen2D[1]) {
        //    hDen2D[1]->GetZaxis()->SetNdivisions(505);
        exElec->Draw();
        hDen2D[1]->Draw("colz same");
    }

    {
        TGraph *gr = (TGraph*) graphsV2D.At(4);
        gr->Draw("C");
    }

    {
        TGraph *gr = (TGraph*) graphsI2D.At(1);
        gr->Draw("C");
    }


    if(opt.Contains("1dline")) {
        lineYzero->Draw();
        lineYdown->Draw();
        lineYup->Draw();
    }

    if(opt.Contains("sline")) {
        if(zStartPlasma>xmin && zStartPlasma<xmax)
            lineStartPlasma->Draw();
        if(zStartNeutral>xmin && zStartNeutral<xmax)
            lineStartNeutral->Draw();
        if(zEndNeutral>xmin && zEndNeutral<xmax)
            lineEndNeutral->Draw();
    }

    // lineYdown->Draw();
    // lineYup->Draw();

    // Palettes re-arrangement
    pad[0]->Update();
    Float_t y1 = pad[0]->GetBottomMargin();
    Float_t y2 = 1 - pad[0]->GetTopMargin();
    Float_t x1 = pad[0]->GetLeftMargin();
    Float_t x2 = 1 - pad[0]->GetRightMargin();

    TPaletteAxis *palette = NULL;
    if(Nspecies>=3) {
        if(hDen2D[2]) {
            palette = (TPaletteAxis*)hDen2D[2]->GetListOfFunctions()->FindObject("palette");
        }
    }
    if(palette) {
        palette->SetY2NDC(y2 - 0.00);
        palette->SetY1NDC(0.66*(y1+y2) + 0.00);
        palette->SetX1NDC(x2 + 0.005);
        palette->SetX2NDC(x2 + 0.03);
        //  palette->SetTitleFont(42);
        //  palette->SetTitleOffset(0.85);
        palette->SetTitleOffset(999.9);
        palette->SetTitleSize(0.075);
        palette->SetLabelFont(42);
        palette->SetLabelSize(0.075);
        palette->SetLabelOffset(0.001);
        palette->SetBorderSize(2);
        palette->SetLineColor(1);
    }

    palette = (TPaletteAxis*)hDen2D[0]->GetListOfFunctions()->FindObject("palette");
    if(palette) {
        palette->SetY2NDC(0.66*(y1+y2) - 0.00);
        palette->SetY1NDC(0.33*(y1+y2) + 0.00);
        palette->SetX1NDC(x2 + 0.005);
        palette->SetX2NDC(x2 + 0.03);
        // palette->SetTitleFont(42);
        palette->SetTitleOffset(0.80);
        palette->SetTitleSize(0.075);
        palette->SetLabelFont(42);
        palette->SetLabelSize(0.075);
        palette->SetLabelOffset(0.001);
        palette->SetBorderSize(2);
        palette->SetLineColor(1);
    }

    palette = (TPaletteAxis*)hDen2D[1]->GetListOfFunctions()->FindObject("palette");
    if(palette) {
        palette->SetY2NDC(0.33*(y1+y2) - 0.00);
        palette->SetY1NDC(y1 + 0.00);
        palette->SetX1NDC(x2 + 0.005);
        palette->SetX2NDC(x2 + 0.03);
        //palette->SetTitleFont(42);
        //palette->SetTitleOffset(0.85);
        palette->SetTitleOffset(999.9);
        palette->SetTitleSize(0.075);
        palette->SetLabelFont(42);
        palette->SetLabelSize(0.075);
        palette->SetLabelOffset(0.001);
        palette->SetBorderSize(2);
        palette->SetLineColor(1);
    }


    // 1D charge density plots:
    Float_t yaxismin  =  pad[0]->GetUymin();
    Float_t yaxismax  =  pad[0]->GetUymin() + 0.33*(pad[0]->GetUymax() - pad[0]->GetUymin()) - 0.00;
    Float_t denmin = Min[1];
    Float_t denmax = Max[1];
    if(opt.Contains("logz")) {
        denmin = TMath::Log10(denmin);
        denmax = TMath::Log10(denmax);
    }

    Float_t curmin = 0.0;
    Float_t curmax = 0.0;
    if(opt.Contains("curr")) {
        curmin = 0.0;
        curmax = hCur1D[1]->GetMaximum();

        cout << Form(" Maximum driver  current = %6.2f kA ", curmax) << endl ;
        if(Nspecies>=3)
            if(hCur1D[2])
                cout << Form(" Maximum witness current = %6.2f kA ", hCur1D[2]->GetMaximum()) << endl ;

        // Round for better plotting
        curmax = 0.1*TMath::Nint(curmax*10);
    }

    for(Int_t i=0; i<Nspecies; i++) {
        if(!hDen1D[i]) continue;

        Float_t slope = (yaxismax - yaxismin)/(denmax - denmin);

        for(Int_t j=0; j<hDen1D[i]->GetNbinsX(); j++) {
            Float_t content = hDen1D[i]->GetBinContent(j+1);
            if(opt.Contains("logz")) content = TMath::Log10(content);

            if(content<denmin)
                hDen1D[i]->SetBinContent(j+1,yaxismin);
            else
                hDen1D[i]->SetBinContent(j+1,(content - denmin) * slope + yaxismin);


        }

        if(hCur1D[i]) {
            slope = (yaxismax - yaxismin)/(curmax - curmin);

            for(Int_t j=0; j<hCur1D[i]->GetNbinsX(); j++) {
                Float_t content = hCur1D[i]->GetBinContent(j+1);

                if(content<curmin)
                    hCur1D[i]->SetBinContent(j+1,yaxismin);
                else
                    hCur1D[i]->SetBinContent(j+1,(content - curmin) * slope + yaxismin);
            }

        }

    }

    // Plasma on-axis density:
    // hDen1D[0]->SetLineWidth(2);
    // hDen1D[0]->SetLineColor(kGray+1);
    // // // PlasmaGlob::SetH1Style(hDen1D[0],1);
    // hDen1D[0]->Draw("same C");


    if(opt.Contains("curr")) {
        hCur1D[1]->SetLineWidth(2);
        hCur1D[1]->SetLineColor(PlasmaGlob::elecLine);
        hCur1D[1]->Draw("same C");
    } else {
        hDen1D[1]->SetLineWidth(2);
        hDen1D[1]->SetLineColor(PlasmaGlob::elecLine);
        //    hDen1D[1]->Draw("same C");
    }

    if(Nspecies>=3) {
        if(hDen1D[2]) {
            if(opt.Contains("curr")) {
                hCur1D[2]->SetLineWidth(2);
                hCur1D[2]->SetLineColor(kOrange+8);
                hCur1D[2]->Draw("same C");
            } else {
                hDen1D[2]->SetLineWidth(2);
                hDen1D[2]->SetLineColor(kOrange+8);
                //   hDen1D[2]->Draw("same C");
            }
        }
    }

    // Current axis
    TGaxis *axis = NULL;
    if(opt.Contains("curr")) {
        axis = new TGaxis(xMax-xRange/6.0,yMin - (factor-1)*yRange,
                          xMax-xRange/6.0,yaxismax,
                          0.001,curmax,503,"+LS");

        axis->SetLineWidth(1);
        axis->SetLineColor(kGray+3);//PlasmaGlob::elecLine);
        axis->SetLabelColor(kGray+3);//PlasmaGlob::elecLine);
        axis->SetLabelSize(0.06);
        axis->SetLabelOffset(0.01);
        axis->SetLabelFont(42);
        axis->SetTitleColor(kGray+3);//PlasmaGlob::elecLine);
        axis->SetTitleSize(0.06);
        axis->SetTitleOffset(0.6);
        axis->SetTitleFont(42);
        axis->SetTickSize(0.03);
        axis->SetTitle("I [kA]");
        axis->CenterTitle();
        axis->SetNdivisions(505);

        axis->Draw();
    }


    TPaveText *textTime = new TPaveText(xMax - 0.3*xRange, yMax-0.15*yRange, xMax-0.1, yMax-0.05*yRange);
    //x2-0.17,y2-0.12,x2-0.02,y2-0.02,"NDC");
    PlasmaGlob::SetPaveTextStyle(textTime,32);
    char ctext[128];
    if(opt.Contains("units") && n0)
        sprintf(ctext,"z = %5.1f #mum", Time * skindepth / PUnits::um);
    else
        sprintf(ctext,"t = %5.1f #omega_{p}^{-1}",Time);
    textTime->SetTextFont(42);
    textTime->AddText(ctext);

    textTime->Draw();
    // textDen->Draw();
    // if(opt.Contains("units"))
    //   textWav->Draw();

    textLabel[0] = new TPaveText(xMin + 0.02*xRange, yMax-0.2*yRange, xMin+0.30*xRange, yMax-0.05*yRange);
    PlasmaGlob::SetPaveTextStyle(textLabel[0],12);
    textLabel[0]->SetTextFont(42);
    textLabel[0]->AddText(sLabels[0]);
    textLabel[0]->Draw();


    pad[0]->RedrawAxis();

    C->cd(0);
    sprintf(pname,"pad_%i",0);
    pad[1] = (TPad*) gROOT->FindObject(pname);
    pad[1]->Draw();
    pad[1]->cd(); // <--------------------------------------------------------- Bottom Plot
    pad[1]->SetFrameLineWidth(3);
    pad[1]->SetTickx(1);

    hFrame = (TH2F*) gROOT->FindObject("hFrame2");
    if(hFrame) delete hFrame;
    hFrame = (TH2F*) hDen2D[0]->Clone("hFrame2");
    hFrame->Reset();

    Float_t yFactor = pad[0]->GetAbsHNDC()/pad[1]->GetAbsHNDC();


    hFrame->GetYaxis()->SetLabelSize(yFactor*0.085);
    hFrame->GetYaxis()->SetTitleSize(yFactor*0.09);
    hFrame->GetYaxis()->SetTitleOffset(0.7/yFactor);
    hFrame->GetYaxis()->SetTickLength(0.02/yFactor);

    hFrame->GetXaxis()->SetTitleSize(0.10);
    hFrame->GetXaxis()->SetLabelSize(0.08);
    hFrame->GetXaxis()->SetLabelOffset(0.02);
    hFrame->GetXaxis()->SetTitleOffset(1.0);
    hFrame->GetXaxis()->SetTickLength(0.04*yFactor);

    hFrame->SetLabelFont(42,"xyz");
    hFrame->SetTitleFont(42,"xyz");

    hFrame->Draw("col");

    //  hE2D[0]->GetZaxis()->SetNdivisions(505);
    hV2D->GetZaxis()->SetTitleFont(42);
    hV2D->GetZaxis()->SetTickLength(0.02/yFactor);


    exPot->Draw();

    hV2D->Draw("col z same");

    for(Int_t i=0; i<graphsV2D.GetEntriesFast(); i++) {
        TGraph *gr = (TGraph*) graphsV2D.At(i);
        if(!gr) continue;
        gr->Draw("C");
    }

    for(Int_t i=0; i<graphsI2D.GetEntriesFast(); i++) {
        //if(i!=2) continue;
        TGraph *gr = (TGraph*) graphsI2D.At(i);
        if(!gr) continue;
        gr->Draw("C");
    }


    if(opt.Contains("1dline")) {
        lineYzero->Draw();
        lineYdown->Draw();
        lineYup->Draw();
    }

    if(opt.Contains("sline")) {
        if(zStartPlasma>xmin && zStartPlasma<xmax)
            lineStartPlasma->Draw();
        if(zStartNeutral>xmin && zStartNeutral<xmax)
            lineStartNeutral->Draw();
        if(zEndNeutral>xmin && zEndNeutral<xmax)
            lineEndNeutral->Draw();
    }


    pad[1]->Update();

    y1 = pad[1]->GetBottomMargin();
    y2 = 1 - pad[1]->GetTopMargin();
    x1 = pad[1]->GetLeftMargin();
    x2 = 1 - pad[1]->GetRightMargin();

    palette = (TPaletteAxis*)hV2D->GetListOfFunctions()->FindObject("palette");
    if(palette) {
        palette->SetY2NDC(y2 - 0.00);
        palette->SetY1NDC(y1 + 0.00);
        palette->SetX1NDC(x2 + 0.005);
        palette->SetX2NDC(x2 + 0.03);
        // palette->SetTitleFont(42);
        palette->SetTitleSize(yFactor*0.075);
        palette->SetTitleOffset(0.80/yFactor);
        palette->SetLabelSize(yFactor*0.075);
        palette->SetLabelFont(42);
        palette->SetLabelOffset(0.01/yFactor);
        palette->SetBorderSize(2);
        palette->SetLineColor(1);
    }



    pad[1]->RedrawAxis();

    textLabel[1] = new TPaveText(xMin + 0.02*xRange, yMax-0.2*yRange, xMin+0.30*xRange, yMax-0.05*yRange);
    PlasmaGlob::SetPaveTextStyle(textLabel[1],12);
    textLabel[1]->SetTextFont(42);
    textLabel[1]->AddText(sLabels[1]);
    textLabel[1]->Draw();

    C->cd();

    // Print to a file
    PlasmaGlob::imgconv(C,fOutName,opt);
    // ---------------------------------------------------------

    PlasmaGlob::DestroyCanvases();
}
Exemplo n.º 27
0
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();

  }
}
Exemplo n.º 28
0
void sysPrior(){

  int norder_ = 2;
  double tkEta = 1.0;

  double vn2Min = 0.00;
  double vn2Max = 0.40;
  double vn4Min = 0.00;
  double vn4Max = 0.40;
  double vn6Min = 0.00;
  double vn6Max = 0.40;
  double vn8Min = 0.00;
  double vn8Max = 0.40;

  double gamma1expMin = -1.0;
  double gamma1expMax = 0.5;
  double vn6vn4Min    = 0.95;
  double vn6vn4Max    = 1.02;
  double vn8vn4Min    = 0.95;
  double vn8vn4Max    = 1.02;
  double vn8vn6Min    = 0.95;
  double vn8vn6Max    = 1.02;

  double ratioMin = 0.98;
  double ratioMax = 1.02;
  double gamma1ExpRatioMin = 0.9;
  double gamma1ExpRatioMax = 1.1;

  TFile * fPriorNom;
  TFile * fPriorThin;
  TFile * fPriorWide;
  TH1D * hPriorNom[NCENT];
  TH1D * hPriorThin[NCENT];
  TH1D * hPriorWide[NCENT];

  //-- Thin Cuts
  TFile * fUnfThin;
  TH1D * hUnfoldThin[NCENT][NITER];
  TH1D * hRefoldThin[NCENT][NITER];

  TFile * fStatThin;
  TH1D * hVarianceOfMean_Vn2_Thin;
  TH1D * hVarianceOfMean_Vn4_Thin;
  TH1D * hVarianceOfMean_Vn6_Thin;
  TH1D * hVarianceOfMean_Vn8_Thin;
  TH1D * hVarianceOfMean_Gamma1Exp_Thin;
  TH1D * hVarianceOfMean_Vn6Vn4_Thin;
  TH1D * hVarianceOfMean_Vn8Vn4_Thin;
  TH1D * hVarianceOfMean_Vn8Vn6_Thin;

  TGraphErrors * grVn2Thin;
  TGraphErrors * grVn4Thin;
  TGraphErrors * grVn6Thin;
  TGraphErrors * grVn8Thin;
  TGraphErrors * grGamma1ExpThin;
  TGraphErrors * grVn6Vn4Thin;
  TGraphErrors * grVn8Vn4Thin;
  TGraphErrors * grVn8Vn6Thin;

  double vn2Thin[NCENT];
  double vn4Thin[NCENT];
  double vn6Thin[NCENT];
  double vn8Thin[NCENT];
  double gamma1expThin[NCENT];
  double vn6vn4Thin[NCENT];
  double vn8vn4Thin[NCENT];
  double vn8vn6Thin[NCENT];

  double vn2Thin_staterr[NCENT];
  double vn4Thin_staterr[NCENT];
  double vn6Thin_staterr[NCENT];
  double vn8Thin_staterr[NCENT];
  double gamma1expThin_staterr[NCENT];
  double vn6vn4Thin_staterr[NCENT];
  double vn8vn4Thin_staterr[NCENT];
  double vn8vn6Thin_staterr[NCENT];

  TGraphErrors * grVn2Thin_RatiotoNominal;
  TGraphErrors * grVn4Thin_RatiotoNominal;
  TGraphErrors * grVn6Thin_RatiotoNominal;
  TGraphErrors * grVn8Thin_RatiotoNominal;
  TGraphErrors * grGamma1ExpThin_RatiotoNominal;
  TGraphErrors * grVn6Vn4Thin_RatiotoNominal;
  TGraphErrors * grVn8Vn4Thin_RatiotoNominal;
  TGraphErrors * grVn8Vn6Thin_RatiotoNominal;

  double vn2Thin_RatiotoNominal[NCENT];
  double vn4Thin_RatiotoNominal[NCENT];
  double vn6Thin_RatiotoNominal[NCENT];
  double vn8Thin_RatiotoNominal[NCENT];
  double gamma1expThin_RatiotoNominal[NCENT];
  double vn6vn4Thin_RatiotoNominal[NCENT];
  double vn8vn4Thin_RatiotoNominal[NCENT];
  double vn8vn6Thin_RatiotoNominal[NCENT];

  double vn2Thin_RatiotoNominal_staterr[NCENT];
  double vn4Thin_RatiotoNominal_staterr[NCENT];
  double vn6Thin_RatiotoNominal_staterr[NCENT];
  double vn8Thin_RatiotoNominal_staterr[NCENT];
  double gamma1expThin_RatiotoNominal_staterr[NCENT];
  double vn6vn4Thin_RatiotoNominal_staterr[NCENT];
  double vn8vn4Thin_RatiotoNominal_staterr[NCENT];
  double vn8vn6Thin_RatiotoNominal_staterr[NCENT];

  int iterCutoffThin[NCENT];

  //-- Wide Cuts
  TFile * fUnfWide;
  TH1D * hUnfoldWide[NCENT][NITER];
  TH1D * hRefoldWide[NCENT][NITER];

  TFile * fStatWide;
  TH1D * hVarianceOfMean_Vn2_Wide;
  TH1D * hVarianceOfMean_Vn4_Wide;
  TH1D * hVarianceOfMean_Vn6_Wide;
  TH1D * hVarianceOfMean_Vn8_Wide;
  TH1D * hVarianceOfMean_Gamma1Exp_Wide;
  TH1D * hVarianceOfMean_Vn6Vn4_Wide;
  TH1D * hVarianceOfMean_Vn8Vn4_Wide;
  TH1D * hVarianceOfMean_Vn8Vn6_Wide;

  TGraphErrors * grVn2Wide;
  TGraphErrors * grVn4Wide;
  TGraphErrors * grVn6Wide;
  TGraphErrors * grVn8Wide;
  TGraphErrors * grGamma1ExpWide;
  TGraphErrors * grVn6Vn4Wide;
  TGraphErrors * grVn8Vn4Wide;
  TGraphErrors * grVn8Vn6Wide;

  double vn2Wide[NCENT];
  double vn4Wide[NCENT];
  double vn6Wide[NCENT];
  double vn8Wide[NCENT];
  double gamma1expWide[NCENT];
  double vn6vn4Wide[NCENT];
  double vn8vn4Wide[NCENT];
  double vn8vn6Wide[NCENT];

  double vn2Wide_staterr[NCENT];
  double vn4Wide_staterr[NCENT];
  double vn6Wide_staterr[NCENT];
  double vn8Wide_staterr[NCENT];
  double gamma1expWide_staterr[NCENT];
  double vn6vn4Wide_staterr[NCENT];
  double vn8vn4Wide_staterr[NCENT];
  double vn8vn6Wide_staterr[NCENT];

  TGraphErrors * grVn2Wide_RatiotoNominal;
  TGraphErrors * grVn4Wide_RatiotoNominal;
  TGraphErrors * grVn6Wide_RatiotoNominal;
  TGraphErrors * grVn8Wide_RatiotoNominal;
  TGraphErrors * grGamma1ExpWide_RatiotoNominal;
  TGraphErrors * grVn6Vn4Wide_RatiotoNominal;
  TGraphErrors * grVn8Vn4Wide_RatiotoNominal;
  TGraphErrors * grVn8Vn6Wide_RatiotoNominal;

  double vn2Wide_RatiotoNominal[NCENT];
  double vn4Wide_RatiotoNominal[NCENT];
  double vn6Wide_RatiotoNominal[NCENT];
  double vn8Wide_RatiotoNominal[NCENT];
  double gamma1expWide_RatiotoNominal[NCENT];
  double vn6vn4Wide_RatiotoNominal[NCENT];
  double vn8vn4Wide_RatiotoNominal[NCENT];
  double vn8vn6Wide_RatiotoNominal[NCENT];

  double vn2Wide_RatiotoNominal_staterr[NCENT];
  double vn4Wide_RatiotoNominal_staterr[NCENT];
  double vn6Wide_RatiotoNominal_staterr[NCENT];
  double vn8Wide_RatiotoNominal_staterr[NCENT];
  double gamma1expWide_RatiotoNominal_staterr[NCENT];
  double vn6vn4Wide_RatiotoNominal_staterr[NCENT];
  double vn8vn4Wide_RatiotoNominal_staterr[NCENT];
  double vn8vn6Wide_RatiotoNominal_staterr[NCENT];

  int iterCutoffWide[NCENT];

  //-- Nominal
  TFile * fAnaNominal;
  TFile * fUnfNominal;
  TH1D * hObsNominal[NCENT];
  TH1D * hUnfoldNominal[NCENT][NITER];
  TH1D * hRefoldNominal[NCENT][NITER];

  TFile * fStatNominal;
  TH1D * hVarianceOfMean_Vn2_Nominal;
  TH1D * hVarianceOfMean_Vn4_Nominal;
  TH1D * hVarianceOfMean_Vn6_Nominal;
  TH1D * hVarianceOfMean_Vn8_Nominal;
  TH1D * hVarianceOfMean_Gamma1Exp_Nominal;
  TH1D * hVarianceOfMean_Vn6Vn4_Nominal;
  TH1D * hVarianceOfMean_Vn8Vn4_Nominal;
  TH1D * hVarianceOfMean_Vn8Vn6_Nominal;

  TGraphErrors * grVn2Nominal;
  TGraphErrors * grVn4Nominal;
  TGraphErrors * grVn6Nominal;
  TGraphErrors * grVn8Nominal;
  TGraphErrors * grGamma1ExpNominal;
  TGraphErrors * grVn6Vn4Nominal;
  TGraphErrors * grVn8Vn4Nominal;
  TGraphErrors * grVn8Vn6Nominal;

  double vn2Nominal[NCENT];
  double vn4Nominal[NCENT];
  double vn6Nominal[NCENT];
  double vn8Nominal[NCENT];
  double gamma1expNominal[NCENT];
  double vn6vn4Nominal[NCENT];
  double vn8vn4Nominal[NCENT];
  double vn8vn6Nominal[NCENT];

  double vn2Nominal_staterr[NCENT];
  double vn4Nominal_staterr[NCENT];
  double vn6Nominal_staterr[NCENT];
  double vn8Nominal_staterr[NCENT];
  double gamma1expNominal_staterr[NCENT];
  double vn6vn4Nominal_staterr[NCENT];
  double vn8vn4Nominal_staterr[NCENT];
  double vn8vn6Nominal_staterr[NCENT];

  int iterCutoffNominal[NCENT];

  TLatex latex;

  //
  //-- MAIN
  // 

  setTDRStyle();
  latex.SetNDC();

  //-- Grab files
  fPriorNom  = new TFile("../../AnalyzerResults/DDResp/dataDrivenResponseAndPriors.root");
  fPriorThin = new TFile("newPriors/dataDrivenResponseAndPriors_Thinner.root");
  fPriorWide = new TFile("newPriors/dataDrivenResponseAndPriors_Wider.root");

  fUnfThin = new TFile( Form("../../UnfoldResults/dataResp/data%i_Thinner.root", norder_) );
  fUnfWide = new TFile( Form("../../UnfoldResults/dataResp/data%i_Wider.root", norder_) );

  fAnaNominal   = new TFile( "../../AnalyzerResults/CastleEbyE.root"  );
  fUnfNominal   = new TFile( Form("../../UnfoldResults/dataResp/data%i.root", norder_) );

  //-- Stat Errors
  fStatThin = new TFile( Form("../../../../statErrorHandle/v%i/eta%.1f/systematicStudies/prior/StatUncertPriorThinner_v%i.root", norder_, tkEta, norder_) );
  hVarianceOfMean_Vn2_Thin       = (TH1D*) fStatThin->Get( "hVarianceOfMean_Vn2_PriorThinner" );
  hVarianceOfMean_Vn4_Thin       = (TH1D*) fStatThin->Get( "hVarianceOfMean_Vn4_PriorThinner" );
  hVarianceOfMean_Vn6_Thin       = (TH1D*) fStatThin->Get( "hVarianceOfMean_Vn6_PriorThinner" );
  hVarianceOfMean_Vn8_Thin       = (TH1D*) fStatThin->Get( "hVarianceOfMean_Vn8_PriorThinner" );
  hVarianceOfMean_Gamma1Exp_Thin = (TH1D*) fStatThin->Get( "hVarianceOfMean_Gamma1Exp_PriorThinner" );
  hVarianceOfMean_Vn6Vn4_Thin    = (TH1D*) fStatThin->Get( "hVarianceOfMean_Vn6Vn4_PriorThinner" );
  hVarianceOfMean_Vn8Vn4_Thin    = (TH1D*) fStatThin->Get( "hVarianceOfMean_Vn8Vn4_PriorThinner" );
  hVarianceOfMean_Vn8Vn6_Thin    = (TH1D*) fStatThin->Get( "hVarianceOfMean_Vn8Vn6_PriorThinner" );

  fStatWide = new TFile( Form("../../../../statErrorHandle/v%i/eta%.1f/systematicStudies/prior/StatUncertPriorWider_v%i.root", norder_, tkEta, norder_) );
  hVarianceOfMean_Vn2_Wide       = (TH1D*) fStatWide->Get( "hVarianceOfMean_Vn2_PriorWider" );
  hVarianceOfMean_Vn4_Wide       = (TH1D*) fStatWide->Get( "hVarianceOfMean_Vn4_PriorWider" );
  hVarianceOfMean_Vn6_Wide       = (TH1D*) fStatWide->Get( "hVarianceOfMean_Vn6_PriorWider" );
  hVarianceOfMean_Vn8_Wide       = (TH1D*) fStatWide->Get( "hVarianceOfMean_Vn8_PriorWider" );
  hVarianceOfMean_Gamma1Exp_Wide = (TH1D*) fStatWide->Get( "hVarianceOfMean_Gamma1Exp_PriorWider" );
  hVarianceOfMean_Vn6Vn4_Wide    = (TH1D*) fStatWide->Get( "hVarianceOfMean_Vn6Vn4_PriorWider" );
  hVarianceOfMean_Vn8Vn4_Wide    = (TH1D*) fStatWide->Get( "hVarianceOfMean_Vn8Vn4_PriorWider" );
  hVarianceOfMean_Vn8Vn6_Wide    = (TH1D*) fStatWide->Get( "hVarianceOfMean_Vn8Vn6_PriorWider" );

  fStatNominal = new TFile( Form("../../../../statErrorHandle/v%i/eta%.1f/StatisticalUncertainties_v%i.root", norder_, tkEta, norder_) );
  hVarianceOfMean_Vn2_Nominal       = (TH1D*) fStatNominal->Get( "hVarianceOfMean_Vn2" );
  hVarianceOfMean_Vn4_Nominal       = (TH1D*) fStatNominal->Get( "hVarianceOfMean_Vn4" );
  hVarianceOfMean_Vn6_Nominal       = (TH1D*) fStatNominal->Get( "hVarianceOfMean_Vn6" );
  hVarianceOfMean_Vn8_Nominal       = (TH1D*) fStatNominal->Get( "hVarianceOfMean_Vn8" );
  hVarianceOfMean_Gamma1Exp_Nominal = (TH1D*) fStatNominal->Get( "hVarianceOfMean_Gamma1Exp" );
  hVarianceOfMean_Vn6Vn4_Nominal    = (TH1D*) fStatNominal->Get( "hVarianceOfMean_Vn6Vn4" );
  hVarianceOfMean_Vn8Vn4_Nominal    = (TH1D*) fStatNominal->Get( "hVarianceOfMean_Vn8Vn4" );
  hVarianceOfMean_Vn8Vn6_Nominal    = (TH1D*) fStatNominal->Get( "hVarianceOfMean_Vn8Vn6" );

  for(int icent = 0; icent < NCENT; icent++){

    hObsNominal[icent] = (TH1D*) fAnaNominal->Get( Form("qwebye/hVnFull_c%i", icent) );
    hObsNominal[icent]->SetName( Form("hVnFull_c%i_nominal", icent) );

    hPriorNom[icent] = (TH1D*) fPriorNom->Get( Form("hPrior_c%i", icent) );
    hPriorNom[icent]->GetXaxis()->SetTitle( Form("v_{%i}", norder_) );
    hPriorNom[icent]->GetYaxis()->SetTitle( "Events" );
    hPriorNom[icent]->SetLineColor(1);
    hPriorNom[icent]->SetMarkerColor(1);
    hPriorNom[icent]->SetMarkerStyle(20);

    hPriorThin[icent] = (TH1D*) fPriorThin->Get( Form("hPrior_c%i", icent) );
    hPriorThin[icent]->GetXaxis()->SetTitle( Form("v_{%i}", norder_) );
    hPriorThin[icent]->GetYaxis()->SetTitle( "Events" );
    hPriorThin[icent]->SetLineColor(2);
    hPriorThin[icent]->SetMarkerColor(2);
    hPriorThin[icent]->SetMarkerStyle(21);

    hPriorWide[icent] = (TH1D*) fPriorWide->Get( Form("hPrior_c%i", icent) );
    hPriorWide[icent]->GetXaxis()->SetTitle( Form("v_{%i}", norder_) );
    hPriorWide[icent]->GetYaxis()->SetTitle( "Events" );
    hPriorWide[icent]->SetLineColor(4);
    hPriorWide[icent]->SetMarkerColor(4);
    hPriorWide[icent]->SetMarkerStyle(22);

    //-- -------------------- Thin --------------------

    //-- Iter loop
    iterCutoffThin[icent] = 0;
    for(int i = 0; i < NITER; i++){

      //-- Get the unfolded histograms
      hUnfoldThin[icent][i] = (TH1D*) fUnfThin->Get( Form("hreco%i_c%i", iter[i], icent) );
      hUnfoldThin[icent][i]->SetName( Form("hreco%i_c%i_thin", iter[i], icent) );
      hUnfoldThin[icent][i]->SetLineColor(col[i]);
      hUnfoldThin[icent][i]->SetMarkerColor(col[i]);

      //-- Get the Refolded histograms
      hRefoldThin[icent][i] = (TH1D*) fUnfThin->Get( Form("hrefold%i_c%i", iter[i], icent) );
      hRefoldThin[icent][i]->SetName( Form("hrefold%i_c%i_thin", iter[i], icent) );
      hRefoldThin[icent][i]->SetLineWidth(2);
      hRefoldThin[icent][i]->SetLineColor(col[i]);
      hRefoldThin[icent][i]->SetMarkerColor(col[i]);

      //-- Chi squares
      double chi2NDF_Refold = hRefoldThin[icent][i]->Chi2Test(hObsNominal[icent], "CHI2/NDF");

      if( chi2NDF_Refold < 1.2 ){
	iterCutoffThin[icent] = i;

	FixUnfold( hUnfoldThin[icent][i] );
	EbyECumu cumu(hUnfoldThin[icent][i]);
	vn2Thin[icent]  = cumu.GetCumu_vn2();
	vn4Thin[icent]  = cumu.GetCumu_vn4();
	vn6Thin[icent]  = cumu.GetCumu_vn6();
	vn8Thin[icent]  = cumu.GetCumu_vn8();
	gamma1expThin[icent] = cumu.GetGamma1Exp();

	if( vn4Thin[icent] == 0 ){
	  vn6vn4Thin[icent] = 0;
	  vn8vn4Thin[icent] = 0;
	}
	else{
	  vn6vn4Thin[icent] = vn6Thin[icent] / vn4Thin[icent];
	  vn8vn4Thin[icent] = vn8Thin[icent] / vn4Thin[icent];
	}
	if( vn6Thin[icent] == 0 ) vn8vn6Thin[icent] = 0;
	else                      vn8vn6Thin[icent] = vn8Thin[icent] / vn6Thin[icent];

	vn2Thin_staterr[icent]       = sqrt( hVarianceOfMean_Vn2_Thin->GetBinContent(icent+1) );
	vn4Thin_staterr[icent]       = sqrt( hVarianceOfMean_Vn4_Thin->GetBinContent(icent+1) );
	vn6Thin_staterr[icent]       = sqrt( hVarianceOfMean_Vn6_Thin->GetBinContent(icent+1) );
	vn8Thin_staterr[icent]       = sqrt( hVarianceOfMean_Vn8_Thin->GetBinContent(icent+1) );
	gamma1expThin_staterr[icent] = sqrt( hVarianceOfMean_Gamma1Exp_Thin->GetBinContent(icent+1) );
	vn6vn4Thin_staterr[icent]    = sqrt( hVarianceOfMean_Vn6Vn4_Thin->GetBinContent(icent+1) );
	vn8vn4Thin_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn4_Thin->GetBinContent(icent+1) );
	vn8vn6Thin_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn6_Thin->GetBinContent(icent+1) );

	break;
      }
      if( i == NITER - 1 ){
	iterCutoffThin[icent] = i;

	FixUnfold( hUnfoldThin[icent][i] );
        EbyECumu cumu(hUnfoldThin[icent][i]);
        vn2Thin[icent]  = cumu.GetCumu_vn2();
        vn4Thin[icent]  = cumu.GetCumu_vn4();
        vn6Thin[icent]  = cumu.GetCumu_vn6();
	vn8Thin[icent]  = cumu.GetCumu_vn8();
        gamma1expThin[icent] = cumu.GetGamma1Exp();

        if( vn4Thin[icent] == 0 ){
          vn6vn4Thin[icent] = 0;
          vn8vn4Thin[icent] = 0;
	}
        else{
          vn6vn4Thin[icent] = vn6Thin[icent] / vn4Thin[icent];
          vn8vn4Thin[icent] = vn8Thin[icent] / vn4Thin[icent];
	}
        if( vn6Thin[icent] == 0 ) vn8vn6Thin[icent] = 0;
        else                      vn8vn6Thin[icent] = vn8Thin[icent] / vn6Thin[icent];

	vn2Thin_staterr[icent]       = sqrt( hVarianceOfMean_Vn2_Thin->GetBinContent(icent+1) );
        vn4Thin_staterr[icent]       = sqrt( hVarianceOfMean_Vn4_Thin->GetBinContent(icent+1) );
        vn6Thin_staterr[icent]       = sqrt( hVarianceOfMean_Vn6_Thin->GetBinContent(icent+1) );
        vn8Thin_staterr[icent]       = sqrt( hVarianceOfMean_Vn8_Thin->GetBinContent(icent+1) );
        gamma1expThin_staterr[icent] = sqrt( hVarianceOfMean_Gamma1Exp_Thin->GetBinContent(icent+1) );
        vn6vn4Thin_staterr[icent]    = sqrt( hVarianceOfMean_Vn6Vn4_Thin->GetBinContent(icent+1) );
        vn8vn4Thin_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn4_Thin->GetBinContent(icent+1) );
        vn8vn6Thin_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn6_Thin->GetBinContent(icent+1) );

        break;
      }
 
    } //-- End iter loop

    //-- -------------------- Wide --------------------

    //-- Iter loop
    iterCutoffWide[icent] = 0;
    for(int i = 0; i < NITER; i++){

      //-- Get the unfolded histograms
      hUnfoldWide[icent][i] = (TH1D*) fUnfWide->Get( Form("hreco%i_c%i", iter[i], icent) );
      hUnfoldWide[icent][i]->SetName( Form("hreco%i_c%i_wide", iter[i], icent) );
      hUnfoldWide[icent][i]->SetLineColor(col[i]);
      hUnfoldWide[icent][i]->SetMarkerColor(col[i]);

      //-- Get the Refolded histograms
      hRefoldWide[icent][i] = (TH1D*) fUnfWide->Get( Form("hrefold%i_c%i", iter[i], icent) );
      hRefoldWide[icent][i]->SetName( Form("hrefold%i_c%i_wide", iter[i], icent) );
      hRefoldWide[icent][i]->SetLineWidth(2);
      hRefoldWide[icent][i]->SetLineColor(col[i]);
      hRefoldWide[icent][i]->SetMarkerColor(col[i]);

      //-- Chi squares
      double chi2NDF_Refold = hRefoldWide[icent][i]->Chi2Test(hObsNominal[icent], "CHI2/NDF");

      if( chi2NDF_Refold < 1.2 ){
        iterCutoffWide[icent] = i;

	FixUnfold( hUnfoldWide[icent][i] );
        EbyECumu cumu(hUnfoldWide[icent][i]);
        vn2Wide[icent]  = cumu.GetCumu_vn2();
        vn4Wide[icent]  = cumu.GetCumu_vn4();
        vn6Wide[icent]  = cumu.GetCumu_vn6();
	vn8Wide[icent]  = cumu.GetCumu_vn8();
        gamma1expWide[icent] = cumu.GetGamma1Exp();

        if( vn4Wide[icent] == 0 ){
          vn6vn4Wide[icent] = 0;
          vn8vn4Wide[icent] = 0;
	}
        else{
          vn6vn4Wide[icent] = vn6Wide[icent] / vn4Wide[icent];
          vn8vn4Wide[icent] = vn8Wide[icent] / vn4Wide[icent];
	}
        if( vn6Wide[icent] == 0 ) vn8vn6Wide[icent] = 0;
        else                      vn8vn6Wide[icent] = vn8Wide[icent] / vn6Wide[icent];

	vn2Wide_staterr[icent]       = sqrt( hVarianceOfMean_Vn2_Wide->GetBinContent(icent+1) );
        vn4Wide_staterr[icent]       = sqrt( hVarianceOfMean_Vn4_Wide->GetBinContent(icent+1) );
        vn6Wide_staterr[icent]       = sqrt( hVarianceOfMean_Vn6_Wide->GetBinContent(icent+1) );
        vn8Wide_staterr[icent]       = sqrt( hVarianceOfMean_Vn8_Wide->GetBinContent(icent+1) );
        gamma1expWide_staterr[icent] = sqrt( hVarianceOfMean_Gamma1Exp_Wide->GetBinContent(icent+1) );
        vn6vn4Wide_staterr[icent]    = sqrt( hVarianceOfMean_Vn6Vn4_Wide->GetBinContent(icent+1) );
        vn8vn4Wide_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn4_Wide->GetBinContent(icent+1) );
        vn8vn6Wide_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn6_Wide->GetBinContent(icent+1) );

        break;
      }
      if( i == NITER - 1 ){
        iterCutoffWide[icent] = i;

	FixUnfold( hUnfoldWide[icent][i] );
        EbyECumu cumu(hUnfoldWide[icent][i]);
        vn2Wide[icent]  = cumu.GetCumu_vn2();
        vn4Wide[icent]  = cumu.GetCumu_vn4();
        vn6Wide[icent]  = cumu.GetCumu_vn6();
        vn8Wide[icent]  = cumu.GetCumu_vn8();
        gamma1expWide[icent] = cumu.GetGamma1Exp();

        if( vn4Wide[icent] == 0 ){
          vn6vn4Wide[icent] = 0;
          vn8vn4Wide[icent] = 0;
        }
        else{
          vn6vn4Wide[icent] = vn6Wide[icent] / vn4Wide[icent];
          vn8vn4Wide[icent] = vn8Wide[icent] / vn4Wide[icent];
        }
        if( vn6Wide[icent] == 0 ) vn8vn6Wide[icent] = 0;
        else                      vn8vn6Wide[icent] = vn8Wide[icent] / vn6Wide[icent];

	vn2Wide_staterr[icent]       = sqrt( hVarianceOfMean_Vn2_Wide->GetBinContent(icent+1) );
        vn4Wide_staterr[icent]       = sqrt( hVarianceOfMean_Vn4_Wide->GetBinContent(icent+1) );
        vn6Wide_staterr[icent]       = sqrt( hVarianceOfMean_Vn6_Wide->GetBinContent(icent+1) );
        vn8Wide_staterr[icent]       = sqrt( hVarianceOfMean_Vn8_Wide->GetBinContent(icent+1) );
        gamma1expWide_staterr[icent] = sqrt( hVarianceOfMean_Gamma1Exp_Wide->GetBinContent(icent+1) );
        vn6vn4Wide_staterr[icent]    = sqrt( hVarianceOfMean_Vn6Vn4_Wide->GetBinContent(icent+1) );
        vn8vn4Wide_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn4_Wide->GetBinContent(icent+1) );
        vn8vn6Wide_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn6_Wide->GetBinContent(icent+1) );

        break;
      }
 
    } //-- End iter loop

    //-- -------------------- Nominal --------------------

    //-- Iter loop
    iterCutoffNominal[icent] = 0;
    for(int i = 0; i < NITER; i++){

      //-- Get the unfolded histograms
      hUnfoldNominal[icent][i] = (TH1D*) fUnfNominal->Get( Form("hreco%i_c%i", iter[i], icent) );
      hUnfoldNominal[icent][i]->SetName( Form("hreco%i_c%i_nominal", iter[i], icent) );
      hUnfoldNominal[icent][i]->SetLineColor(col[i]);
      hUnfoldNominal[icent][i]->SetMarkerColor(col[i]);

      //-- Get the Refolded histograms
      hRefoldNominal[icent][i] = (TH1D*) fUnfNominal->Get( Form("hrefold%i_c%i", iter[i], icent) );
      hRefoldNominal[icent][i]->SetName( Form("hrefold%i_c%i_nominal", iter[i], icent) );
      hRefoldNominal[icent][i]->SetLineWidth(2);
      hRefoldNominal[icent][i]->SetLineColor(col[i]);
      hRefoldNominal[icent][i]->SetMarkerColor(col[i]);

      //-- Chi squares
      double chi2NDF_Refold = hRefoldNominal[icent][i]->Chi2Test(hObsNominal[icent], "CHI2/NDF");

      if( chi2NDF_Refold < 1.2 ){
        iterCutoffNominal[icent] = i;

	FixUnfold( hUnfoldNominal[icent][i] );
        EbyECumu cumu(hUnfoldNominal[icent][i]);
        vn2Nominal[icent]  = cumu.GetCumu_vn2();
        vn4Nominal[icent]  = cumu.GetCumu_vn4();
        vn6Nominal[icent]  = cumu.GetCumu_vn6();
	vn8Nominal[icent]  = cumu.GetCumu_vn8();
        gamma1expNominal[icent] = cumu.GetGamma1Exp();

        if( vn4Nominal[icent] == 0 ){
          vn6vn4Nominal[icent] = 0;
          vn8vn4Nominal[icent] = 0;
	}
        else{
          vn6vn4Nominal[icent] = vn6Nominal[icent] / vn4Nominal[icent];
          vn8vn4Nominal[icent] = vn8Nominal[icent] / vn4Nominal[icent];
	}
        if( vn6Nominal[icent] == 0 ) vn8vn6Nominal[icent] = 0;
        else                vn8vn6Nominal[icent] = vn8Nominal[icent] / vn6Nominal[icent];

	vn2Nominal_staterr[icent]       = sqrt( hVarianceOfMean_Vn2_Nominal->GetBinContent(icent+1) );
        vn4Nominal_staterr[icent]       = sqrt( hVarianceOfMean_Vn4_Nominal->GetBinContent(icent+1) );
        vn6Nominal_staterr[icent]       = sqrt( hVarianceOfMean_Vn6_Nominal->GetBinContent(icent+1) );
        vn8Nominal_staterr[icent]       = sqrt( hVarianceOfMean_Vn8_Nominal->GetBinContent(icent+1) );
        gamma1expNominal_staterr[icent] = sqrt( hVarianceOfMean_Gamma1Exp_Nominal->GetBinContent(icent+1) );
        vn6vn4Nominal_staterr[icent]    = sqrt( hVarianceOfMean_Vn6Vn4_Nominal->GetBinContent(icent+1) );
        vn8vn4Nominal_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn4_Nominal->GetBinContent(icent+1) );
        vn8vn6Nominal_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn6_Nominal->GetBinContent(icent+1) );

        break;
      }
      if( i == NITER - 1 ){
        iterCutoffNominal[icent] = i;

	FixUnfold( hUnfoldNominal[icent][i] );
        EbyECumu cumu(hUnfoldNominal[icent][i]);
        vn2Nominal[icent]  = cumu.GetCumu_vn2();
        vn4Nominal[icent]  = cumu.GetCumu_vn4();
        vn6Nominal[icent]  = cumu.GetCumu_vn6();
        vn8Nominal[icent]  = cumu.GetCumu_vn8();
        gamma1expNominal[icent] = cumu.GetGamma1Exp();

        if( vn4Nominal[icent] == 0 ){
          vn6vn4Nominal[icent] = 0;
          vn8vn4Nominal[icent] = 0;
        }
        else{
          vn6vn4Nominal[icent] = vn6Nominal[icent] / vn4Nominal[icent];
          vn8vn4Nominal[icent] = vn8Nominal[icent] / vn4Nominal[icent];
        }
        if( vn6Nominal[icent] == 0 ) vn8vn6Nominal[icent] = 0;
        else                      vn8vn6Nominal[icent] = vn8Nominal[icent] / vn6Nominal[icent];

	vn2Nominal_staterr[icent]       = sqrt( hVarianceOfMean_Vn2_Nominal->GetBinContent(icent+1) );
        vn4Nominal_staterr[icent]       = sqrt( hVarianceOfMean_Vn4_Nominal->GetBinContent(icent+1) );
        vn6Nominal_staterr[icent]       = sqrt( hVarianceOfMean_Vn6_Nominal->GetBinContent(icent+1) );
        vn8Nominal_staterr[icent]       = sqrt( hVarianceOfMean_Vn8_Nominal->GetBinContent(icent+1) );
        gamma1expNominal_staterr[icent] = sqrt( hVarianceOfMean_Gamma1Exp_Nominal->GetBinContent(icent+1) );
        vn6vn4Nominal_staterr[icent]    = sqrt( hVarianceOfMean_Vn6Vn4_Nominal->GetBinContent(icent+1) );
        vn8vn4Nominal_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn4_Nominal->GetBinContent(icent+1) );
        vn8vn6Nominal_staterr[icent]    = sqrt( hVarianceOfMean_Vn8Vn6_Nominal->GetBinContent(icent+1) );

        break;
      }
 
    } //-- End iter loop

  } //-- End Cent loop

  //-- Calculate ratios to the nominal case
  for(int icent = 0; icent < NCENT; icent++){
    
    double vn2T        = vn2Thin[icent];
    double vn4T        = vn4Thin[icent];
    double vn6T        = vn6Thin[icent];
    double vn8T        = vn8Thin[icent];
    double gamma1expT  = gamma1expThin[icent];
    double vn6vn4T     = vn6vn4Thin[icent];
    double vn8vn4T     = vn8vn4Thin[icent];
    double vn8vn6T     = vn8vn6Thin[icent];

    double vn2T_e       = vn2Thin_staterr[icent];
    double vn4T_e       = vn4Thin_staterr[icent];
    double vn6T_e       = vn6Thin_staterr[icent];
    double vn8T_e       = vn8Thin_staterr[icent];
    double gamma1expT_e = gamma1expThin_staterr[icent];
    double vn6vn4T_e    = vn6vn4Thin_staterr[icent];
    double vn8vn4T_e    = vn8vn4Thin_staterr[icent];
    double vn8vn6T_e    = vn8vn6Thin_staterr[icent];

    double vn2W        = vn2Wide[icent];
    double vn4W        = vn4Wide[icent];
    double vn6W        = vn6Wide[icent];
    double vn8W        = vn8Wide[icent];
    double gamma1expW  = gamma1expWide[icent];
    double vn6vn4W     = vn6vn4Wide[icent];
    double vn8vn4W     = vn8vn4Wide[icent];
    double vn8vn6W     = vn8vn6Wide[icent];

    double vn2W_e       = vn2Wide_staterr[icent];
    double vn4W_e       = vn4Wide_staterr[icent];
    double vn6W_e       = vn6Wide_staterr[icent];
    double vn8W_e       = vn8Wide_staterr[icent];
    double gamma1expW_e = gamma1expWide_staterr[icent];
    double vn6vn4W_e    = vn6vn4Wide_staterr[icent];
    double vn8vn4W_e    = vn8vn4Wide_staterr[icent];
    double vn8vn6W_e    = vn8vn6Wide_staterr[icent];

    double vn2N        = vn2Nominal[icent];
    double vn4N        = vn4Nominal[icent];
    double vn6N        = vn6Nominal[icent];
    double vn8N        = vn8Nominal[icent];
    double gamma1expN  = gamma1expNominal[icent];
    double vn6vn4N     = vn6vn4Nominal[icent];
    double vn8vn4N     = vn8vn4Nominal[icent];
    double vn8vn6N     = vn8vn6Nominal[icent];

    double vn2N_e       = vn2Nominal_staterr[icent];
    double vn4N_e       = vn4Nominal_staterr[icent];
    double vn6N_e       = vn6Nominal_staterr[icent];
    double vn8N_e       = vn8Nominal_staterr[icent];
    double gamma1expN_e = gamma1expNominal_staterr[icent];
    double vn6vn4N_e    = vn6vn4Nominal_staterr[icent];
    double vn8vn4N_e    = vn8vn4Nominal_staterr[icent];
    double vn8vn6N_e    = vn8vn6Nominal_staterr[icent];

    double r2T         = vn2T / vn2N;
    double r4T         = vn4T / vn4N;
    double r6T         = vn6T / vn6N;
    double r8T         = vn8T / vn8N;
    double rgamma1expT = gamma1expT / gamma1expN;
    double r64T        = vn6vn4T / vn6vn4N;
    double r84T        = vn8vn4T / vn8vn4N;
    double r86T        = vn8vn6T / vn8vn6N;

    double r2T_e         = sqrt( pow(vn2T_e/vn2N, 2) + pow(vn2T*vn2N_e/vn2N/vn2N, 2) );
    double r4T_e         = sqrt( pow(vn4T_e/vn4N, 2) + pow(vn4T*vn4N_e/vn4N/vn4N, 2) );
    double r6T_e         = sqrt( pow(vn6T_e/vn6N, 2) + pow(vn6T*vn6N_e/vn6N/vn6N, 2) );
    double r8T_e         = sqrt( pow(vn8T_e/vn8N, 2) + pow(vn8T*vn8N_e/vn8N/vn8N, 2) );
    double rgamma1expT_e = sqrt( pow(gamma1expT_e/gamma1expN, 2) + pow(gamma1expT*gamma1expN_e/gamma1expN/gamma1expN, 2) );
    double r64T_e        = sqrt( pow(vn6vn4T_e/vn6vn4N, 2) + pow(vn6vn4T*vn6vn4N_e/vn6vn4N/vn6vn4N, 2) );
    double r84T_e        = sqrt( pow(vn8vn4T_e/vn8vn4N, 2) + pow(vn8vn4T*vn8vn4N_e/vn8vn4N/vn8vn4N, 2) );
    double r86T_e        = sqrt( pow(vn8vn6T_e/vn8vn6N, 2) + pow(vn8vn6T*vn8vn6N_e/vn8vn6N/vn8vn6N, 2) );

    double r2W         = vn2W / vn2N;
    double r4W         = vn4W / vn4N;
    double r6W         = vn6W / vn6N;
    double r8W         = vn8W / vn8N;
    double rgamma1expW = gamma1expW / gamma1expN;
    double r64W        = vn6vn4W / vn6vn4N;
    double r84W        = vn8vn4W / vn8vn4N;
    double r86W        = vn8vn6W / vn8vn6N;

    double r2W_e         = sqrt( pow(vn2W_e/vn2N, 2) + pow(vn2W*vn2N_e/vn2N/vn2N, 2) );
    double r4W_e         = sqrt( pow(vn4W_e/vn4N, 2) + pow(vn4W*vn4N_e/vn4N/vn4N, 2) );
    double r6W_e         = sqrt( pow(vn6W_e/vn6N, 2) + pow(vn6W*vn6N_e/vn6N/vn6N, 2) );
    double r8W_e         = sqrt( pow(vn8W_e/vn8N, 2) + pow(vn8W*vn8N_e/vn8N/vn8N, 2) );
    double rgamma1expW_e = sqrt( pow(gamma1expW_e/gamma1expN, 2) + pow(gamma1expW*gamma1expN_e/gamma1expN/gamma1expN, 2) );
    double r64W_e        = sqrt( pow(vn6vn4W_e/vn6vn4N, 2) + pow(vn6vn4W*vn6vn4N_e/vn6vn4N/vn6vn4N, 2) );
    double r84W_e        = sqrt( pow(vn8vn4W_e/vn8vn4N, 2) + pow(vn8vn4W*vn8vn4N_e/vn8vn4N/vn8vn4N, 2) );
    double r86W_e        = sqrt( pow(vn8vn6W_e/vn8vn6N, 2) + pow(vn8vn6W*vn8vn6N_e/vn8vn6N/vn8vn6N, 2) );

    vn2Thin_RatiotoNominal[icent]       = r2T;
    vn4Thin_RatiotoNominal[icent]       = r4T;
    vn6Thin_RatiotoNominal[icent]       = r6T;
    vn8Thin_RatiotoNominal[icent]       = r8T;
    gamma1expThin_RatiotoNominal[icent] = rgamma1expT;
    vn6vn4Thin_RatiotoNominal[icent]    = r64T;
    vn8vn4Thin_RatiotoNominal[icent]    = r84T;
    vn8vn6Thin_RatiotoNominal[icent]    = r86T;

    vn2Thin_RatiotoNominal_staterr[icent]       = r2T_e;
    vn4Thin_RatiotoNominal_staterr[icent]       = r4T_e;
    vn6Thin_RatiotoNominal_staterr[icent]       = r6T_e;
    vn8Thin_RatiotoNominal_staterr[icent]       = r8T_e;
    gamma1expThin_RatiotoNominal_staterr[icent] = rgamma1expT_e;
    vn6vn4Thin_RatiotoNominal_staterr[icent]    = r64T_e;
    vn8vn4Thin_RatiotoNominal_staterr[icent]    = r84T_e;
    vn8vn6Thin_RatiotoNominal_staterr[icent]    = r86T_e;

    vn2Wide_RatiotoNominal[icent]       = r2W;
    vn4Wide_RatiotoNominal[icent]       = r4W;
    vn6Wide_RatiotoNominal[icent]       = r6W;
    vn8Wide_RatiotoNominal[icent]       = r8W;
    gamma1expWide_RatiotoNominal[icent] = rgamma1expW;
    vn6vn4Wide_RatiotoNominal[icent]    = r64W;
    vn8vn4Wide_RatiotoNominal[icent]    = r84W;
    vn8vn6Wide_RatiotoNominal[icent]    = r86W;

    vn2Wide_RatiotoNominal_staterr[icent]       = r2W_e;
    vn4Wide_RatiotoNominal_staterr[icent]       = r4W_e;
    vn6Wide_RatiotoNominal_staterr[icent]       = r6W_e;
    vn8Wide_RatiotoNominal_staterr[icent]       = r8W_e;
    gamma1expWide_RatiotoNominal_staterr[icent] = rgamma1expW_e;
    vn6vn4Wide_RatiotoNominal_staterr[icent]    = r64W_e;
    vn8vn4Wide_RatiotoNominal_staterr[icent]    = r84W_e;
    vn8vn6Wide_RatiotoNominal_staterr[icent]    = r86W_e;

  }

  //-- Make sweet, sweet TGraphErrors
  double cErr[NCENT]; 
  for(int icent = 0; icent < NCENT; icent++) cErr[icent] = 0;

  //-- Ratios 
  grVn2Thin_RatiotoNominal       = new TGraphErrors(NCENT, centBinCenter, vn2Thin_RatiotoNominal,       cErr, vn2Thin_RatiotoNominal_staterr);
  grVn4Thin_RatiotoNominal       = new TGraphErrors(NCENT, centBinCenter, vn4Thin_RatiotoNominal,       cErr, vn4Thin_RatiotoNominal_staterr);
  grVn6Thin_RatiotoNominal       = new TGraphErrors(NCENT, centBinCenter, vn6Thin_RatiotoNominal,       cErr, vn6Thin_RatiotoNominal_staterr);
  grVn8Thin_RatiotoNominal       = new TGraphErrors(NCENT, centBinCenter, vn8Thin_RatiotoNominal,       cErr, vn8Thin_RatiotoNominal_staterr);
  grGamma1ExpThin_RatiotoNominal = new TGraphErrors(NCENT, centBinCenter, gamma1expThin_RatiotoNominal, cErr, gamma1expThin_RatiotoNominal_staterr);
  grVn6Vn4Thin_RatiotoNominal    = new TGraphErrors(NCENT, centBinCenter, vn6vn4Thin_RatiotoNominal,    cErr, vn6vn4Thin_RatiotoNominal_staterr);
  grVn8Vn4Thin_RatiotoNominal    = new TGraphErrors(NCENT, centBinCenter, vn8vn4Thin_RatiotoNominal,    cErr, vn6vn4Thin_RatiotoNominal_staterr);
  grVn8Vn6Thin_RatiotoNominal    = new TGraphErrors(NCENT, centBinCenter, vn8vn6Thin_RatiotoNominal,    cErr, vn8vn6Thin_RatiotoNominal_staterr);

  grVn2Wide_RatiotoNominal       = new TGraphErrors(NCENT, centBinCenter, vn2Wide_RatiotoNominal,       cErr, vn2Wide_RatiotoNominal_staterr);
  grVn4Wide_RatiotoNominal       = new TGraphErrors(NCENT, centBinCenter, vn4Wide_RatiotoNominal,       cErr, vn4Wide_RatiotoNominal_staterr);
  grVn6Wide_RatiotoNominal       = new TGraphErrors(NCENT, centBinCenter, vn6Wide_RatiotoNominal,       cErr, vn6Wide_RatiotoNominal_staterr);
  grVn8Wide_RatiotoNominal       = new TGraphErrors(NCENT, centBinCenter, vn8Wide_RatiotoNominal,       cErr, vn8Wide_RatiotoNominal_staterr);
  grGamma1ExpWide_RatiotoNominal = new TGraphErrors(NCENT, centBinCenter, gamma1expWide_RatiotoNominal, cErr, gamma1expWide_RatiotoNominal_staterr);
  grVn6Vn4Wide_RatiotoNominal    = new TGraphErrors(NCENT, centBinCenter, vn6vn4Wide_RatiotoNominal,    cErr, vn6vn4Wide_RatiotoNominal_staterr);
  grVn8Vn4Wide_RatiotoNominal    = new TGraphErrors(NCENT, centBinCenter, vn8vn4Wide_RatiotoNominal,    cErr, vn8vn4Wide_RatiotoNominal_staterr);
  grVn8Vn6Wide_RatiotoNominal    = new TGraphErrors(NCENT, centBinCenter, vn8vn6Wide_RatiotoNominal,    cErr, vn8vn6Wide_RatiotoNominal_staterr);

  //-- Cumu Ratio Plots
  TLine * line = new TLine(cent_min[0], 1.0, grVn2Thin_RatiotoNominal->GetXaxis()->GetXmax(), 1.0);
  line->SetLineColor(1);
  line->SetLineStyle(2);
  line->SetLineWidth(2);

  TCanvas * cSysCumu = new TCanvas("cSysCumu", "cSysCumu", 1000, 1000);
  cSysCumu->Divide(2,2);

  cSysCumu->cd(1);
  grVn2Thin_RatiotoNominal->Draw("ap");
  grVn2Wide_RatiotoNominal->Draw("psame");
  line->Draw("same");

  cSysCumu->cd(2);
  grVn4Thin_RatiotoNominal->Draw("ap");
  grVn4Wide_RatiotoNominal->Draw("psame");
  line->Draw("same");

  cSysCumu->cd(3);
  grVn6Thin_RatiotoNominal->Draw("ap");
  grVn6Wide_RatiotoNominal->Draw("psame");
  line->Draw("same");

  cSysCumu->cd(4);
  grVn8Thin_RatiotoNominal->Draw("ap");
  grVn8Wide_RatiotoNominal->Draw("psame");
  line->Draw("same");

  formatGraph(grVn2Thin_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{2} Ratio", norder_), 1, 24, "grVn2Thin_RatiotoNominal");
  formatGraph(grVn2Wide_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{2} Ratio", norder_), kCyan+2, 24, "grVn2Wide_RatiotoNominal");

  formatGraph(grVn4Thin_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{4} Ratio", norder_), kSpring+4, 25, "grVn4Thin_RatiotoNominal");
  formatGraph(grVn4Wide_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{4} Ratio", norder_), kViolet-1, 25, "grVn4Wide_RatiotoNominal");

  formatGraph(grVn6Thin_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{6} Ratio", norder_), 6, 28, "grVn6Thin_RatiotoNominal");
  formatGraph(grVn6Wide_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{6} Ratio", norder_), 4, 28, "grVn6Wide_RatiotoNominal");

  formatGraph(grVn8Thin_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{8} Ratio", norder_), kOrange+7, 27, "grVn8Thin_RatiotoNominal");
  formatGraph(grVn8Wide_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{8} Ratio", norder_), kGray+2, 27, "grVn8Wide_RatiotoNominal");

  TLegend * leg31 = new TLegend(0.7000, 0.7034, 0.9456, 0.9449);
  leg31->SetFillStyle(0);
  leg31->SetBorderSize(0);
  leg31->AddEntry(grVn2Thin_RatiotoNominal, "thin/nominal", "lp");
  leg31->AddEntry(grVn2Wide_RatiotoNominal, "wide/nominal", "lp");

  TLegend * leg32 = new TLegend(0.7000, 0.7034, 0.9456, 0.9449);
  leg32->SetFillStyle(0);
  leg32->SetBorderSize(0);
  leg32->AddEntry(grVn4Thin_RatiotoNominal, "thin/nominal", "lp");
  leg32->AddEntry(grVn4Wide_RatiotoNominal, "wide/nominal", "lp");

  TLegend * leg33 = new TLegend(0.7000, 0.7034, 0.9456, 0.9449);
  leg33->SetFillStyle(0);
  leg33->SetBorderSize(0);
  leg33->AddEntry(grVn6Thin_RatiotoNominal, "thin/nominal", "lp");
  leg33->AddEntry(grVn6Wide_RatiotoNominal, "wide/nominal", "lp");

  TLegend * leg34 = new TLegend(0.7000, 0.7034, 0.9456, 0.9449);
  leg34->SetFillStyle(0);
  leg34->SetBorderSize(0);
  leg34->AddEntry(grVn8Thin_RatiotoNominal, "thin/nominal", "lp");
  leg34->AddEntry(grVn8Wide_RatiotoNominal, "wide/nominal", "lp");

  cSysCumu->cd(1);
  leg31->Draw("same");
  cSysCumu->cd(2);
  leg32->Draw("same");
  cSysCumu->cd(3);
  leg33->Draw("same");
  cSysCumu->cd(4);
  leg34->Draw("same");

  cSysCumu->Update();
  cSysCumu->SaveAs("../../plots/systematicStudies/SysPrior_CumuCent.pdf");

  //-- Gamma1Exp Ratio Plot
  TCanvas * cGamma1Exp = new TCanvas("cGamma1Exp", "cGamma1Exp", 500, 500);
  cGamma1Exp->cd();
  grGamma1ExpThin_RatiotoNominal->Draw("ap");
  grGamma1ExpWide_RatiotoNominal->Draw("psame");
  line->Draw("same");

  formatGraph(grGamma1ExpThin_RatiotoNominal, "Centrality %", gamma1ExpRatioMin, gamma1ExpRatioMax, "#gamma_{1}^{exp} Ratio", 2, 28, "grGamma1ExpThin_RatiotoNominal");
  formatGraph(grGamma1ExpWide_RatiotoNominal, "Centrality %", gamma1ExpRatioMin, gamma1ExpRatioMax, "#gamma_{1}^{exp} Ratio", 1, 28, "grGamma1ExpWide_RatiotoNominal");

  TLegend * leg4 = new TLegend(0.7000, 0.7034, 0.9456, 0.9449);
  leg4->SetFillStyle(0);
  leg4->SetBorderSize(0);
  leg4->AddEntry(grGamma1ExpThin_RatiotoNominal, "thin/nominal", "lp");
  leg4->AddEntry(grGamma1ExpWide_RatiotoNominal, "wide/nominal", "lp");
  leg4->Draw("same");

  cGamma1Exp->Update();
  cGamma1Exp->SaveAs("../../plots/systematicStudies/SysPriorGamma1ExpCent.pdf");

  //-- Cumu Ratio Plot
  TCanvas * cCumuRatioSys = new TCanvas("cCumuRatioSys", "cCumuRatioSys", 1500, 500);
  cCumuRatioSys->Divide(3,1);
  cCumuRatioSys->cd(1);
  cCumuRatioSys->cd(1)->SetLeftMargin(0.2);
  grVn6Vn4Thin_RatiotoNominal->GetYaxis()->SetTitleOffset(1.6);
  grVn6Vn4Thin_RatiotoNominal->Draw("ap");
  grVn6Vn4Wide_RatiotoNominal->Draw("psame");
  line->Draw("same");
  cCumuRatioSys->cd(2);
  grVn8Vn4Thin_RatiotoNominal->Draw("ap");
  grVn8Vn4Wide_RatiotoNominal->Draw("psame");
  line->Draw("same");
  cCumuRatioSys->cd(3);
  grVn8Vn6Thin_RatiotoNominal->Draw("ap");
  grVn8Vn6Wide_RatiotoNominal->Draw("psame");
  line->Draw("same");

  formatGraph(grVn6Vn4Thin_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{6} / v_{%i}{4} Ratio", norder_, norder_), 4, 21, "grVn6Vn4Thin_RatiotoNominal");
  formatGraph(grVn6Vn4Wide_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{6} / v_{%i}{4} Ratio", norder_, norder_), 2, 21, "grVn6Vn4Wide_RatiotoNominal");

  formatGraph(grVn8Vn4Thin_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{8} / v_{%i}{4} Ratio", norder_, norder_), kGreen+2, 34, "grVn8Vn4Thin_RatiotoNominal");
  formatGraph(grVn8Vn4Wide_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{8} / v_{%i}{4} Ratio", norder_, norder_), 6, 34, "grVn8Vn4Wide_RatiotoNominal");

  formatGraph(grVn8Vn6Thin_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{8} / v_{%i}{6} Ratio", norder_, norder_), kViolet-1, 33, "grVn8Vn6Thin_RatiotoNominal");
  formatGraph(grVn8Vn6Wide_RatiotoNominal, "Centrality %", ratioMin, ratioMax, Form("v_{%i}{8} / v_{%i}{6} Ratio", norder_, norder_), kOrange+7, 33, "grVn8Vn6Wide_RatiotoNominal");

  TLegend * leg51 = new TLegend(0.24, 0.20, 0.76, 0.45);
  leg51->SetFillStyle(0);
  leg51->SetBorderSize(0);
  leg51->AddEntry(grVn6Vn4Thin_RatiotoNominal, "thin/nominal", "lp");
  leg51->AddEntry(grVn6Vn4Wide_RatiotoNominal, "wide/nominal", "lp");

  TLegend * leg52 = new TLegend(0.24, 0.20, 0.76, 0.45);
  leg52->SetFillStyle(0);
  leg52->SetBorderSize(0);
  leg52->AddEntry(grVn8Vn4Thin_RatiotoNominal, "thin/nominal", "lp");
  leg52->AddEntry(grVn8Vn4Wide_RatiotoNominal, "wide/nominal", "lp");

  TLegend * leg53 = new TLegend(0.24, 0.20, 0.76, 0.45);
  leg53->SetFillStyle(0);
  leg53->SetBorderSize(0);
  leg53->AddEntry(grVn8Vn6Thin_RatiotoNominal, "thin/nominal", "lp");
  leg53->AddEntry(grVn8Vn6Wide_RatiotoNominal, "wide/nominal", "lp");

  cCumuRatioSys->cd(1);
  leg51->Draw("same");
  cCumuRatioSys->cd(2);
  leg52->Draw("same");
  cCumuRatioSys->cd(3);
  leg53->Draw("same");

  cCumuRatioSys->Update();
  cCumuRatioSys->SaveAs("../../plots/systematicStudies/SysPrior_CumuRatioCent.pdf");

  //-- Draw Priors
  TCanvas * cPrior[NCENT];
  TLegend * legPrior = new TLegend(0.60, 0.72, 0.99, 0.92);
  legInit( legPrior );
  legPrior->AddEntry(hPriorNom[0],  "Default Prior", "lp");
  legPrior->AddEntry(hPriorThin[0], "Thin Prior", "lp");
  legPrior->AddEntry(hPriorWide[0], "Wide Prior", "lp");

  for(int icent = 0; icent < NCENT; icent++){
    if( icent != 5 ) continue;
    cPrior[icent] = new TCanvas( Form("cPrior_c%i", icent), Form("cPrior_c%i", icent), 500, 500);
    cPrior[icent]->cd();
    cPrior[icent]->SetLogy();
    hPriorThin[icent]->Draw();
    hPriorWide[icent]->Draw("same");
    hPriorNom[icent]->Draw("same");
    legPrior->Draw("same");
    latex.DrawLatex(0.2, 0.2, Form("Cent %i - %i%s", cent_min[icent], cent_max[icent], "%") );
    cPrior[icent]->SaveAs( Form("../../plots/systematicStudies/SysPriorComp_c%i.pdf", icent) );
  }

  //---------------------------------------------------------------------------------------------------- 
  //-- Save plots for smoothing
  TFile * fSave = new TFile("SysPrior.root", "recreate");
  fSave->cd();

  grVn2Thin_RatiotoNominal->Write("grVn2Thin_RatiotoNominal");
  grVn2Wide_RatiotoNominal->Write("grVn2Wide_RatiotoNominal");
  grVn4Thin_RatiotoNominal->Write("grVn4Thin_RatiotoNominal");
  grVn4Wide_RatiotoNominal->Write("grVn4Wide_RatiotoNominal");
  grVn6Thin_RatiotoNominal->Write("grVn6Thin_RatiotoNominal");
  grVn6Wide_RatiotoNominal->Write("grVn6Wide_RatiotoNominal");
  grVn8Thin_RatiotoNominal->Write("grVn8Thin_RatiotoNominal");
  grVn8Wide_RatiotoNominal->Write("grVn8Wide_RatiotoNominal");

  grVn6Vn4Thin_RatiotoNominal->Write("grVn6Vn4Thin_RatiotoNominal");
  grVn6Vn4Wide_RatiotoNominal->Write("grVn6Vn4Wide_RatiotoNominal");
  grVn8Vn4Thin_RatiotoNominal->Write("grVn8Vn4Thin_RatiotoNominal");
  grVn8Vn4Wide_RatiotoNominal->Write("grVn8Vn4Wide_RatiotoNominal");
  grVn8Vn6Thin_RatiotoNominal->Write("grVn8Vn6Thin_RatiotoNominal");
  grVn8Vn6Wide_RatiotoNominal->Write("grVn8Vn6Wide_RatiotoNominal");

  grGamma1ExpThin_RatiotoNominal->Write("grGamma1ExpThin_RatiotoNominal");
  grGamma1ExpWide_RatiotoNominal->Write("grGamma1ExpWide_RatiotoNominal");

  //-- Save the unfolded distns for when the cutoff is chi2=2.
  for(int icent = 0; icent < NCENT; icent++){
    int i = iterCutoffThin[icent];
    std::cout<<i<<std::endl;
    hUnfoldThin[icent][i]->SetLineColor(1);
    hUnfoldThin[icent][i]->SetMarkerColor(1);
    hUnfoldThin[icent][i]->Write( Form("hFinalUnfold_ThinSysPrior_c%i", icent) );

    i = iterCutoffWide[icent];
    std::cout<<i<<std::endl;
    hUnfoldWide[icent][i]->SetLineColor(1);
    hUnfoldWide[icent][i]->SetMarkerColor(1);
    hUnfoldWide[icent][i]->Write( Form("hFinalUnfold_WideSysPrior_c%i", icent) );
  }

}
Exemplo n.º 29
0
void ptRescale(bool setWeights=false) {

  gStyle->SetOptTitle(0);
  gStyle->SetOptStat(0);

  gStyle->SetCanvasColor(0);
  gStyle->SetFrameBorderMode(0);

  TFile *file = TFile::Open("histograms_CMS-HGG_zeevalidation.root");

  pt_cat0_Data_rebin = (TH1*)pt_cat0_Data->Clone();
  pt_cat0_DYJetsToLL_rebin = (TH1*)pt_cat0_DYJetsToLL->Clone();

  if (setWeights) {
    Double_t xbins[21] = {0.,2.,4.,8.,12.,16.,20.,24.,28.,32.,36.,40.,50.,60.,70.,80.,95.,110.,130.,160.,200.};
    pt_cat0_Data_rebin->Rebin(20,"pt_cat0_Data_rebin",xbins);
    pt_cat0_DYJetsToLL_rebin->Rebin(20,"pt_cat0_DYJetsToLL_rebin",xbins);
  }

  //pt_cat0_Data_rebin->Rebin(4);
  //pt_cat0_DYJetsToLL_rebin->Rebin(4);

  pt_cat0_Data_rebin->GetXaxis()->SetTitleSize(0.05);
  pt_cat0_Data_rebin->GetYaxis()->SetTitle("");
  pt_cat0_Data_rebin->GetXaxis()->SetTitle("p_{T}(e^{+}e^{-}) (GeV)");
  pt_cat0_DYJetsToLL_rebin->SetFillColor(38);
  pt_cat0_DYJetsToLL_rebin->SetLineColor(1);
  pt_cat0_Data_rebin->SetMarkerStyle(20);
  pt_cat0_Data_rebin->SetMarkerSize(0.4);
  pt_cat0_Data_rebin->SetLineColor(1);

  TLegend *leg;
  leg = new TLegend(.6,.65,.87,.87);
  leg->SetBorderSize(0);
  leg->SetFillColor(10);
  leg->SetTextSize(.035);
  leg->AddEntry(pt_cat0_Data_rebin,"Data (19.6fb^{-1})");
  leg->AddEntry(pt_cat0_DYJetsToLL_rebin,"DYJetsToLL MC","F");

  TLine *line = new TLine(0.,1.,200.,1.);
  line->SetLineColor(4);
  line->SetLineWidth(2);

  TCanvas *c_pt = new TCanvas("c_pt","di-photon p_{T}",600,800);
  c_pt->Divide(1,2);

  c_pt->cd(1);
  gPad->SetLogy();
  float sf = pt_cat0_Data_rebin->Integral()/pt_cat0_DYJetsToLL_rebin->Integral();
  pt_cat0_DYJetsToLL_rebin->Scale(sf);
  pt_cat0_Data_rebin->Draw("e");
  pt_cat0_DYJetsToLL_rebin->Draw("hist,same");
  pt_cat0_Data_rebin->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_pt->cd(2);
  gPad->SetGrid();
  ratio_pt = (TH1*)pt_cat0_Data_rebin->Clone();
  ratio_pt->Divide(pt_cat0_DYJetsToLL_rebin);
  //ratio_pt->SetMaximum(1.8);
  //ratio_pt->SetMinimum(0.2);
  ratio_pt->Draw("e");
  line->Draw();

  if (setWeights) {
    for (int i=1;i<21;i++) cout << "pt_reweight[" << i-1 << "] = " << ratio_pt->GetBinContent(i) << ";" << endl;
    cout << endl;
    for (int i=1;i<21;i++) cout << "pt_reweight_bin[" << i-1 << "] = " << ratio_pt->GetBinLowEdge(i) << ".;" << endl;
    cout << endl;
    cout << "zeePtWeight=";
    for (int i=1;i<21;i++) cout << ratio_pt->GetBinContent(i) << ",";
    cout << endl;
  }

  c_pt->SaveAs("pt.png");


  nvtx_cat0_Data->GetXaxis()->SetTitleSize(0.05);
  nvtx_cat0_Data->GetYaxis()->SetTitle("");
  nvtx_cat0_Data->GetXaxis()->SetTitle("number of primary vertices");
  nvtx_cat0_Data->GetXaxis()->SetRangeUser(0.,40.);
  nvtx_cat0_DYJetsToLL->SetFillColor(38);
  nvtx_cat0_DYJetsToLL->SetLineColor(1);
  nvtx_cat0_Data->SetMarkerStyle(20);
  nvtx_cat0_Data->SetMarkerSize(0.4);
  nvtx_cat0_Data->SetLineColor(1);

  TLine *line1 = new TLine(0.,1.,40.,1.);
  line1->SetLineColor(4);
  line1->SetLineWidth(2);

  TCanvas *c_nvtx = new TCanvas("c_nvtx","no. of primmary vertices",800,900);
  c_nvtx->Divide(1,2);

  c_nvtx->cd(1);
  sf = nvtx_cat0_Data->Integral()/nvtx_cat0_DYJetsToLL->Integral();
  nvtx_cat0_DYJetsToLL->Scale(sf);
  nvtx_cat0_Data->GetXaxis()->SetRangeUser(0.,39.5);
  nvtx_cat0_Data->Draw("e");
  nvtx_cat0_DYJetsToLL->Draw("hist,same");
  nvtx_cat0_Data->Draw("e,same");
  gPad->RedrawAxis();
  leg->Draw();

  c_nvtx->cd(2);
  gPad->SetGrid();
  ratio_nvtx = (TH1*)nvtx_cat0_Data->Clone();
  ratio_nvtx->Divide(nvtx_cat0_DYJetsToLL);
  ratio_nvtx->SetMaximum(1.8);
  ratio_nvtx->SetMinimum(0.2);
  ratio_nvtx->Draw("e");
  line1->Draw();

  //for (int i=1;i<26;i++) cout << "nvtx_reweight[" << i-1 << "] = " << ratio_nvtx->GetBinContent(i) << ";" << endl;
  //cout << endl;

  c_nvtx->SaveAs("nvtx.png");

}
Exemplo n.º 30
0
pull_Topmass_tWbarChannel()
{




TCanvas* c = new TCanvas("c","test",570,400);
  TFile *f0 = new TFile("./Mu_histograms_2J_1TTest_2_new.root");
  // Declare observable mtop
  RooRealVar mtop("mtop","M (GeV/c^{2})",80,360) ;
  RooDataHist ds("ds","ds",mtop,Import(*Mu_topMass__TbarWChannel)) ;
  // Print number of events in dataset
  ds.Print();
  // Print binned dataset with default frame 
  RooPlot* frame = mtop.frame(Title("Mu_topMass__TbarWChannel")) ;
  
  ds.plotOn(frame) ;
  
  RooRealVar mean("mean","mean",167.0,165,170);
  RooRealVar sigma("sigma","sigma",25.42,18.0,30.0);
  RooGaussian gtop("gtop","gtop",mtop,mean,sigma);

  RooRealVar sigma1("sigma1","sigma1",20.5,20.0,30.0);
  RooRealVar sigma2("sigma2","sigma2",75.5,65.0,75.0);
  RooBifurGauss bgtop("bgtop","bgtop",mtop,mean,sigma1,sigma2);

  RooRealVar frac0("frac0","frac0",0.25,0.1,0.6);
  RooAddPdf pdfg("pdfg","double gaussian Pdf", RooArgList(bgtop,gtop),RooArgList(frac0));
  RooRealVar slope("slope","slope",1.0,0.9,1.3);
  RooChebychev cheb("cheb","cheb",mtop,slope);
  RooRealVar frac("frac","frac",0.93,0.75,1.0);
  
  //  RooAddPdf pdf("pdf","total Pdf", RooArgList(gtop,cheb),RooArgList(frac));
  RooAddPdf pdf("pdf","total Pdf", RooArgList(pdfg,cheb),RooArgList(frac));

  /*  
  gtop.fitTo(ds);
  gtop.plotOn(frame);
  gtop.paramOn(frame);
  */

  /*
  bgtop.fitTo(ds);
  bgtop.plotOn(frame);
  bgtop.paramOn(frame);
  pdf.plotOn(frame,Components(RooArgList(bgtop)), LineColor(kRed),LineStyle(2), LineWidth(4));
  frame->Draw();
  */
  
      
  pdf.fitTo(ds);
  pdf.plotOn(frame);
  pdf.paramOn(frame);
  std::cout<<"AMAR CHI^2 ="<<frame->chiSquare()<<std::endl;  

  // pull 
  RooPlot* z1frame = mtop.frame(Title("TTBar_Topmass_SChannel"));
  RooHist* hpull1 = frame->pullHist();
  z1frame->addPlotable(hpull1,"P");

  RooPlot* z2frame = mtop.frame(Title("TTBar_Topmass_SChannel"));
  RooHist* hresid = frame->residHist();
  z2frame->addPlotable(hresid,"P") ;

  TCanvas* c2 = new TCanvas("pull1","pull1",900,300) ;
  c2->Divide(2,1) ; // column, row
  double xmin = 80.0; double xmax = 360.0;
  TLine *line = new TLine(xmin,0.0,xmax,0.0);
 
  c2->cd(2); line->SetLineColor(kRed); line->SetLineWidth(2); gPad->SetLeftMargin(0.15); z1frame->GetYaxis()->SetTitleOffset(1.6); z1frame->GetYaxis()->SetRangeUser(-5.0, 5.0); z1frame->Draw(); line->Draw("SAME");
  //  c2->cd(1); gPad->SetLeftMargin(0.15); z2frame->GetYaxis()->SetTitleOffset(1.6); z2frame->Draw(); line->Draw("SAME");
  c2->cd(1); gPad->SetLeftMargin(0.15); frame->GetYaxis()->SetTitleOffset(1.6); frame->Draw();
  
 pdf.plotOn(frame,Components(RooArgList(gtop)), LineColor(kRed),LineStyle(2), LineWidth(4));
 pdf.plotOn(frame,Components(RooArgList(cheb)), LineColor(kBlue),LineStyle(2), LineWidth(4));
 pdf.plotOn(frame,Components(RooArgList(bgtop)), LineColor(kGreen),LineStyle(2), LineWidth(4));
  
  

 frame->Draw();
  // Double_t signalchi = frame->chiSquare(); 
 
  c2->SaveAs("TTbar_pull.root");














}