def ratioplot(): # create required parts h1 = createH1() h2 = createH2() h3 = createRatio(h1, h2) c, pad1, pad2 = createCanvasPads() # draw everything pad1.cd() h1.Draw() h2.Draw("same") # to avoid clipping the bottom zero, redraw a small axis h1.GetYaxis().SetLabelSize(0.0) axis = TGaxis(-5, 20, -5, 220, 20, 220, 510, "") axis.SetLabelFont(43) axis.SetLabelSize(15) axis.Draw() pad2.cd() h3.Draw("ep")
def PlotOnCanvas(self,pdf_name): tdrstyle.setTDRStyle() canvas = TCanvas("c", "c", 600, 600) pad1 = TPad("pad1", "pad1", 0, 0.0, 1, 1.0) pad1.SetTopMargin(0.15) pad1.SetBottomMargin(0.32) pad1.SetRightMargin(0.05) pad1.SetLeftMargin(0.15) if self.title == '': pad1.SetTopMargin(0.05) pad1.SetGridx() pad1.Draw() pad1.cd() self.histo1.SetStats(0) self.histo1.Draw(self.option) self.histo2.Draw(self.option+" same") if self.logx: pad1.SetLogx() if self.logy: pad1.SetLogy() # Redraw axis to avoid clipping 0 self.histo1.GetXaxis().SetLabelSize(0.) self.histo1.GetXaxis().SetTitle('') axis = TGaxis(-9,-2.8,-9,2.8,0,10000,50510,"") axis.SetLabelFont(43) axis.SetLabelSize(15) axis.Draw("same") pad2 = TPad("pad2", "pad2", 0, 0.0, 1, 0.3) pad2.SetTopMargin(0) pad2.SetBottomMargin(0.4) pad2.SetRightMargin(0.05) pad2.SetLeftMargin(0.15) pad2.SetGridx() pad2.Draw() pad2.cd() if self.logx: pad2.SetLogx() self.ratio.SetLineColor(ROOT.kBlack) self.ratio.SetMinimum(0.5) self.ratio.SetMaximum(1.5) self.ratio.SetStats(0) self.ratio.SetMarkerStyle(21) self.ratio.Draw("ep") self.histo1.SetLineColor(ROOT.kBlue+1) self.histo1.SetLineWidth(2) max_y = max(self.histo1.GetMaximum(),self.histo2.GetMaximum()) self.histo1.SetMaximum(max_y*1.1) self.histo1.GetXaxis().SetTitleOffset(1.5) self.histo1.GetXaxis().SetLabelSize(0.) self.histo1.GetXaxis().SetTitleSize(0.) self.histo1.GetYaxis().SetTitleOffset(1.5) self.histo1.GetYaxis().SetLabelSize(0.03) self.histo1.GetYaxis().SetTitleSize(0.05) self.histo1.GetYaxis().SetNdivisions(505) self.histo2.SetLineColor(ROOT.kRed) self.histo2.SetLineWidth(2) self.ratio.SetTitle("") self.ratio.GetXaxis().SetNdivisions(510) self.ratio.GetXaxis().SetTitleOffset(1.1) self.ratio.GetXaxis().SetLabelSize(0.10) self.ratio.GetXaxis().SetTitleSize(0.15) if len(self.xlabel) > 30: self.ratio.GetXaxis().SetTitleSize(0.13) if len(self.xlabel) > 60: self.ratio.GetXaxis().SetTitleSize(0.11) self.ratio.GetYaxis().SetTitle("Ratio") self.ratio.GetYaxis().SetNdivisions(505) self.ratio.GetYaxis().SetTitleOffset(0.5) self.ratio.GetYaxis().SetLabelSize(0.10) self.ratio.GetYaxis().SetTitleSize(0.15) if len(self.ylabel) > 30: self.ratio.GetYaxis().SetTitleSize(0.13) if len(self.ylabel) > 60: self.ratio.GetYaxis().SetTitleSize(0.11) # Legend # canvas.cd() if self.title == '': self.legend = TLegend(0.60,0.80,0.93,0.93) else: self.legend = TLegend(0.60,0.70,0.93,0.83) self.legend.SetTextSize(0.05) self.legend.SetBorderSize(0) self.legend.SetFillColor(0) self.legend.AddEntry(self.histo1,self.legend1,"l") self.legend.AddEntry(self.histo2,self.legend2,"l") self.legend.Draw() ROOT.SetOwnership(canvas, False) ROOT.SetOwnership(pad1, False) ROOT.SetOwnership(pad2, False) return canvas,self.filename
gAxis.SetBit(TAxis.kRotateTitle) gAxis.SetBit(TAxis.kCenterTitle) gAxis.Draw() else: mbbHi_meV = SensClass.GetMbb(tHalfMin_y * CLHEP.year, isotope, nmeModel, ga) / CLHEP.meV mbbLow_meV = SensClass.GetMbb(tHalfMax_y * CLHEP.year, isotope, nmeModel, ga) / CLHEP.meV nLabels = 4 gAxis = TGaxis(expMax_ty * 1.01, tHalfMax_y, expMax_ty - (expMax_ty - expMin_ty) / 10000., tHalfMin_y, mbbLow_meV, mbbHi_meV, nLabels, "-G") gAxis.SetTitle("m_{#beta#beta} sensitivity (90% CL) [meV]") gAxis.SetTitleOffset(1.2) gAxis.SetTitleFont(hiBGFunc.GetYaxis().GetTitleFont()) gAxis.SetTitleSize(hiBGFunc.GetYaxis().GetTitleSize()) gAxis.SetLabelFont(hiBGFunc.GetYaxis().GetLabelFont()) gAxis.SetLabelSize(hiBGFunc.GetYaxis().GetLabelSize()) gAxis.SetBit(TAxis.kRotateTitle) gAxis.SetBit(TAxis.kCenterTitle) gAxis.Draw() canvas.Update() label = "sensVsExp" if options.use5SigDL: label = "DLVsExp" if options.xenon136: label += "_Xe" if options.useShellModel: label += "_SM" if ga != 1.25: label += "_g" canvas.Print(label + ".pdf") canvas.Print(label + ".png")
def make_comparison_plot(outdir, var, groupname1, groupname2, category, weight = "PU_weight*MC_weight*bTagSF_weight*leptonSF_weight*triggerSF_weight*FR_weight", dataset = "ttH"): var_name = var[0] n_bins = var[3] range_low = var[4] range_high = var[5] histos = [] plot_name = "p" #segfault when using different names for each #"%s_%s_%s_%s_%s_vs_%s" % (outdir, var_name, dataset, category, groupname1, groupname2) name1 = "plot_%s_%s" % (groupname1, plot_name) plot1 = single_plot("%s/%s" % (groups[groupname1]["inputPath"], groups[groupname1]["inputFiles"][dataset]), name1, "%s_%s" % (groups[groupname1]["treePrefix"], category), var_name, weight, n_bins, range_low, range_high) name2 = "plot_%s_%s" % (groupname2, plot_name) plot2 = single_plot("%s/%s" % (groups[groupname2]["inputPath"], groups[groupname2]["inputFiles"][dataset]), name2, "%s_%s" % (groups[groupname2]["treePrefix"], category), var_name, weight, n_bins, range_low, range_high) histos.append(plot1) histos.append(plot2) leg_entry = [] leg_entry.append("%s:\t N=%d, mean=%.2f, RMS=%.2f" % (groupname1, plot1.GetEntries(), plot1.GetMean(), plot1.GetRMS())) leg_entry.append("%s:\t N=%d, mean=%.2f, RMS=%.2f" % (groupname2, plot2.GetEntries(), plot2.GetMean(), plot2.GetRMS())) leg=TLegend(0.45,0.74,0.85,0.89) leg.SetHeader(get_header(category)); leg.SetBorderSize(0) leg.SetTextSize(0.04) leg.SetFillColor(0) for i in range(len(histos)): normalize_histogram(histos[i]) leg.AddEntry(histos[i], leg_entry[i]) histos[0].SetLineColor(ROOT.kOrange-2) histos[0].SetFillColor(ROOT.kOrange-2) histos[0].SetStats(0) histos[0].SetTitle("") histos[1].SetLineColor(1) histos[1].SetLineWidth(2) c=TCanvas("c_%s" % plot_name,"c_%s" % plot_name, 800, 600) pad1 = TPad("pad1", "pad1", 0, 0.3, 1, 1.0) pad1.SetLeftMargin(0.15) pad1.SetBottomMargin(0) # Upper and lower plot are joined pad1.Draw() # Draw the upper pad: pad1 pad1.cd() # pad1 becomes the current pad max_val = 0.1 min_val = 0 for i in range(len(histos)): max_val = max(histos[i].GetMaximum(), max_val) min_val = min(histos[i].GetMinimum(), min_val) for i in range(len(histos)): histos[i].SetMaximum(1.4*max_val) histos[i].SetMinimum(1.4*min_val) histos[i].GetXaxis().SetTitle(var_name) histos[i].GetYaxis().SetTitle("a.u.") histos[i].GetYaxis().SetTitleOffset(1.7) #histos[i].GetYaxis().SetTickLength(0) #histos[i].GetYaxis().SetLabelOffset(999) texl = TLatex(histos[0].GetBinLowEdge(1), 1.01*1.4*max_val, "CMS Preliminary, Simulation ttH #sqrt{s}=13 TeV") texl.SetTextSize(0.04) texl.Draw("same") histos[0].Draw("hist") histos[1].Draw("same") leg.Draw("same") texl.Draw("same") histos[0].GetYaxis().SetLabelSize(0.) axis = TGaxis(range_low, min_val, range_low, max_val, min_val, max_val, 510, "") axis.SetLabelFont(43) #Absolute font size in pixel (precision 3) axis.SetLabelSize(15) axis.Draw() # lower plot will be in pad c.cd() # Go back to the main canvas before defining pad2 pad2 = TPad("pad2", "pad2", 0, 0.05, 1, 0.3) pad2.SetLeftMargin(0.15) pad2.SetTopMargin(0) pad2.SetBottomMargin(0.35) pad2.Draw() pad2.cd() h_ratio = make_ratio_histogram("h_ratio", histos[1], histos[0]) """ h_ratio = h[1].Clone("h_ratio") """ h_ratio.SetTitle("") h_ratio.Draw() #Draw the ratio plot # Y axis histo_emul plot settings histos[0].GetYaxis().SetTitleSize(20) histos[0].GetYaxis().SetTitleFont(43) histos[0].GetYaxis().SetTitleOffset(1.5) # Ratio plot (h_ratio) settings #h_ratio.SetTitle("") # Remove the ratio title h_ratio.GetYaxis().SetLabelSize(0.) axis2 = TGaxis( range_low, 0.01, range_low, 1.99, 0.01, 1.99, 505,"") axis2.SetLabelFont(43) # Absolute font size in pixel (precision 3) axis2.SetLabelSize(15) axis2.Draw() # Y axis ratio plot settings h_ratio.GetYaxis().SetTitle("%s/%s" % (groupname2, groupname1)) h_ratio.GetYaxis().SetNdivisions(505) h_ratio.GetYaxis().SetTitleSize(20) h_ratio.GetYaxis().SetTitleFont(43) h_ratio.GetYaxis().SetTitleOffset(1.5) #h_ratio.GetYaxis().SetLabelFont(43) # Absolute font size in pixel (precision 3) #h_ratio.GetYaxis().SetLabelSize(15) # X axis ratio plot settings h_ratio.GetXaxis().SetTitleSize(20) h_ratio.GetXaxis().SetTitleFont(43) h_ratio.GetXaxis().SetTitleOffset(4.) h_ratio.GetXaxis().SetLabelFont(43) # Absolute font size in pixel (precision 3) h_ratio.GetXaxis().SetLabelSize(15) line = TLine(range_low, 1., range_high,1.) line.Draw("same") plot_file_name="%s" % (var_name) dirname = ("%s_vs_%s/%s/%s" % (groupname1, groupname2, category, outdir)).replace(" ", "_") for file_format in ["png", "pdf"]: mkdir_p("plots_test/%s/%s" % (dirname, file_format)) c.SaveAs("plots_test/%s/%s/%s.%s" % (dirname, file_format, plot_file_name, file_format))
lines = [] for iLine, line in enumerate(avgSF): lines.append(TLine(0, avgSF[iLine], Nslices * sliceWidth, avgSF[iLine])) lines[iLine].SetLineColor(iLine + 1) lines[iLine].Draw('same') # add second axis canv.SetRightMargin(0.1) all_graphs[0].GetXaxis().SetRangeUser(0, 68) all_graphs[0].GetXaxis().SetLabelOffset(0.02) gPad.RangeAxis(0, gPad.GetUymin(), 68, gPad.GetUxmax()) axis = TGaxis(gPad.GetUxmin(), gPad.GetUymin(), gPad.GetUxmax(), gPad.GetUymin(), gPad.GetUxmin() * calo_init.args.X0density, gPad.GetUxmax() * calo_init.args.X0density, 506, "-") axis.SetLabelSize(0.05) axis.SetTitleSize(0.07) axis.SetTitleOffset(0.9) axis.SetLabelOffset(0.02) axis.Draw() axis.SetLabelFont(42) unit1 = draw_text(['(cm)'], [0.91, 0.09, 1, 0.14], 1, 0) unit1.SetTextSize(0.05) unit1.SetTextFont(42) unit2 = draw_text(['(X_{0})'], [0.91, 0.16, 1, 0.21], 1, 0) unit2.SetTextSize(0.05) unit2.SetTextFont(42) canv.Update() # Draw all labels if calo_init.args.specialLabel:
def __reweightCanvas(self, can, addLabels, addTopXNumbers): import numpy as np, ROOT from ROOT import TGaxis, TLatex, kBlack if can.GetPrimitive('pad_top'): self.__reweightCanvas(can.GetPrimitive('pad_top'), False, addTopXNumbers) if can.GetPrimitive('pad_bot'): self.__reweightCanvas(can.GetPrimitive('pad_bot'), self.addLabels, False) if can.GetPrimitive('pad_bot') or can.GetPrimitive('pad_bot'): return can.cd() # First we "remove" previous axis xaxis = GetXaxis(can) # Now create new axis #xaxis.SetName("__xaxis_ignored") # Now draw new canvas #xmin, xmax = GetXaxisRanges(can) #import os #c = ROOT.TCanvas(self.func.GetName(),self.func.GetName()) #self.func.Draw() #c.SaveAs( os.path.join( 'e26_RunByRun_noAdjustment', c.GetName() +'.pdf' ) ) #can.cd() #chopt = "+C" + ("U" if not addLabels else "") chopt = "+CU" axis = TGaxis(can.GetUxmin(), can.GetUymin(), can.GetUxmax(), can.GetUymin(), self.func.GetName(), 10000 * self.N3 + 100 * self.N2 + 1 * self.N1, chopt) axis.SetNoExponent(False) #axis.SetExponentOffset() if xaxis: axis.ImportAxisAttributes(xaxis) xaxis.SetTickLength(0) xaxis.SetLabelOffset(999.) if self.labelSize: axis.SetLabelSize(self.labelSize) #1 + 100*N2 + *N3N axis.Draw() from .PlotFunctions import tobject_collector if addTopXNumbers: _, ymax = GetYaxisRanges(can, check_all=True, ignorezeros=True, ignoreErrors=False) for xc in self.xcenters: text = TLatex(self.func.Eval(xc), ymax, str(xc)) text.SetTextFont(43) text.SetTextSize(2) text.SetTextAlign(12) text.SetTextAngle(90) text.SetTextColor(ROOT.kBlack) text.Draw() tobject_collector.append(text) if addLabels: binLow, binHigh, nBins = self.__getXEdges(chopt) #labelPos = map( lambda x: (x,self.func.GetX(x),(self.func.GetX(x)-self.xedges[0])/(self.xedges[-1]-self.xedges[0])) # , np.linspace(binLow,binHigh, nBins) ) labelPos = map( lambda x: (x, self.func.Eval(x), (self.func.Eval(x) - self.xedges[0]) / (self.xedges[-1] - self.xedges[0])), np.linspace(binLow, binHigh, nBins)) ypos = can.GetUymin() - 0.04 * (can.GetUymax() - can.GetUymin()) #labels = [] for x, mx, pmx in labelPos: text = TLatex(mx, ypos, str(x)) text.SetTextFont(43) #text.SetTextSizePixels(textPerc) text.SetTextAlign(23) text.SetTextColor(ROOT.kBlack) text.SetTextSize(14) text.Draw() tobject_collector.append(text) #labels.append(text) #gxc = (self.xedges[-1]-self.xedges[0] )/2 #lLabels = len(labels) #for i, text in enumerate(labels): # xc = text.GetBBoxCenter() # if xc < gxc: # if i+1 < lLabels: # text2 = labels[i+1] # while conflict(text.GetBBox(),text2.GetBBox()): # sizes[i] = possible_sizes[sizes[i]+1] # text.SetTextSize( getNewSize ##AdjustBinSize (Double_t A1, Double_t A2, Int_t nold, Double_t &BinLow, Double_t &BinHigh, Int_t &nbins, Double_t &BinWidth) #lLabels = [labels.At(i) for i in range(labels.GetEntries())] tobject_collector.append(axis) #can.Modified() #can.Update() return axis
leg_2d_exclusion_v1_v2.AddEntry(graph_exclusion_exp_v1, v1_label + " Exp", "L") leg_2d_exclusion_v1_v2.AddEntry(graph_exclusion_exp_v2, v2_label + " Exp", "L") if drawObs: leg_2d_exclusion_v1_v2.AddEntry(graph_exclusion_obs_v1, v1_label + " Obs", "L") leg_2d_exclusion_v1_v2.AddEntry(graph_exclusion_obs_v2, v2_label + " Obs", "L") leg_2d_exclusion_v1_v2.Draw() drawCMS2(myC2D, 13, lumi) f1_lambda = TF1("f1", "(x+6.00)/1.454", 72.902, 416.78) A1_lambda = TGaxis(100.0, 0.02, 600.0, 0.02, "f1", 1010, "NI") A1_lambda.SetLabelFont(42) A1_lambda.SetLabelSize(0.035) A1_lambda.SetTextFont(42) A1_lambda.SetTextSize(1.2) A1_lambda.SetTitle("#Lambda [TeV]") A1_lambda.SetTitleSize(0.04) A1_lambda.SetTitleOffset(0.9) A1_lambda.Draw() myC2D.SaveAs(outputDir + "/limits" + "/limit_exclusion_region_2D_" + year_to_plot + "_" + v1_tag + "_vs_" + v2_tag + ".pdf") myC2D.SaveAs(outputDir + "/limits" + "/limit_exclusion_region_2D_" + year_to_plot + "_" + v1_tag + "_vs_" + v2_tag + ".png") myC2D.SaveAs(outputDir + "/limits" + "/limit_exclusion_region_2D_" + year_to_plot + "_" + v1_tag + "_vs_" + v2_tag + ".C")
def ratio_plot(h1, h2, legend, name='c', dim=(800, 600), mode='', l_range=(0, 0), l_y_title=''): if not isinstance(dim, collections.abc.Sequence): raise TypeError("The variable 'dim' has a wrong type") elif len(dim) != 2: raise ValueError("Wrong length given for list 'dim'") if not isinstance(l_range, collections.abc.Sequence): raise TypeError("The variable 'l_range' has a wrong type") elif len(l_range) != 2: raise ValueError("Wrong length given for list 'l_range'") if name == 'c': name = name + '_' + random_string() c = TCanvas(name, '', dim[0], dim[1]) pad1 = TPad('pad1', 'pad1', 0, 0.3, 1, 1.0) pad1.SetBottomMargin(0) # Upper and lower plot are joined pad1.Draw() # Draw the upper pad: pad1 pad1.cd() # pad1 becomes the current pad h1.SetStats(0) h1.Draw() h2opt = h2.GetOption() + 'SAME' h2.Draw(h2opt) legend.Draw() axis = TGaxis(-5, 20, -5, 220, 20, 220, 510, '') axis.SetLabelFont(43) # Absolute font size in pixel (precision 3) axis.SetLabelSize(20) axis.SetTitleFont(43) axis.SetTitleSize(20) axis.SetTitleOffset(1.3) axis.Draw() c.Update() # lower plot will be in pad c.cd() # Go back to the main canvas before defining pad2 pad2 = TPad('pad2', 'pad2', 0, 0.01, 1., 0.30) pad2.SetTopMargin(0.0) pad2.SetBottomMargin(0.28) pad2.SetGridy(1) pad2.Draw() pad2.cd() # pad2 becomes the current pad # Define the ratio plot h3 = h1.Clone('h3') h3.SetLineColor(kPurpleC) h3.SetMarkerColor(kPurpleC) h3.SetMarkerSize(0.5) h3.Sumw2() h3.SetStats(0) # No statistics on lower plot if (mode == 'ratio'): h3.Divide(h2) if (mode == 'diff'): h3.Add(h2, -1.) h3.SetMarkerStyle(21) h3.Draw('ep') # Draw the ratio plot # Remove the ratio title h3.SetTitle('') # Y axis ratio plot settings l_title = '' if l_y_title == '': l_title = mode + ' ' else: l_title = l_y_title h3.GetYaxis().SetTitle(l_title) h3.GetYaxis().SetNdivisions(505) h3.GetYaxis().SetTitleSize(20) h3.GetYaxis().SetTitleFont(43) h3.GetYaxis().SetTitleOffset(1.2) h3.GetYaxis().SetLabelFont(43) # Absolute font size in pixel(precision 3) h3.GetYaxis().SetLabelSize(16) if l_range != (0, 0): h3.GetYaxis().SetRangeUser(l_range[0], l_range[1]) # X axis ratio plot settings h3.GetXaxis().SetTitleSize(20) h3.GetXaxis().SetTitleFont(43) h3.GetXaxis().SetTitleOffset(3.5) h3.GetXaxis().SetLabelFont(43) # Absolute font size in pixel(precision 3) h3.GetXaxis().SetLabelSize(18) c.Write() c.Close()
texts.append( TText( xcenter, level['energy'] + 2 * param['TextFloat'] + (plot_range['ymax'] - plot_range['ymin']) * param['TextSize'], str(level['life']))) texts[-1].SetTextAlign(21) texts[-1].SetTextColor(texts[-2].GetTextColor()) if 'Axis' in param: paxis = param['Axis'] axis_margin = 0.015 * (plot_range['ymax'] - plot_range['ymin']) axis = TGaxis(-param['space'], paxis['range_min'], -param['space'], paxis['range_max'], paxis['range_min'], paxis['range_max'], paxis['ticks'], "") axis.SetTitle(paxis['title']) axis.SetLabelSize(paxis['label_size']) axis.SetTitleSize(paxis['title_size']) axis.SetTitleOffset(paxis['title_offset']) axis.Draw() for line in lines: line.SetLineWidth(param['LineWidth']) line.Draw() for text in texts: text.SetTextSize(param['TextSize']) text.Draw() for i, g in enumerate(gamma): level1 = filter(lambda x: x.GetY1() == g['from'], lines)[0] level2 = filter(lambda x: x.GetY1() == g['to'], lines)[0]
def plot_ratio(ih_,max_val_,xbins__,comb_ID_): # // Define two gaussian histograms. Note the X and Y title are defined # // at booking time using the convention "Hist_title ; X_title ; Y_title" # TH1F *h1 = new TH1F("h1", "Two gaussian plots and their ratio;x title; h1 and h2 gaussian histograms", 100, -5, 5); # TH1F *h2 = new TH1F("h2", "h2", 100, -5, 5); # h1.FillRandom("gaus"); # h2.FillRandom("gaus"); # // Define the Canvas #TCanvas *c = new TCanvas("c", "canvas", 800, 800); cc = TCanvas("cc", "canvas", 800, 800) h1 = ih_[0][0] h2 = ih_[1][0] #print 'h1 = ',h1 #print 'h2 = ',h2 #print'h1.GetMaximum() = ' ,h1.GetMaximum() #// Upper plot will be in pad1 pad1 = TPad("pad1", "pad1", 0, 0.3, 1, 1.0) pad1.SetBottomMargin(0) # Upper and lower plot are joined #pad1.SetGridx() #Vertical grid, dashed lines pad1.Draw() #Draw the upper pad: pad1 pad1.cd() # pad1 becomes the current pad h1.SetStats(0) # No statistics on upper plot h1.GetXaxis().SetNdivisions(xbins__) h1.Draw() # Draw h1 # pad1.Update() # lline = TLine(pad1.GetUxmin(),20,pad1.GetUxmax(),20) # #lline.SetNDC(1) # lline.SetLineStyle(3) # lline.Draw('same') h2.Draw("same") # Draw h2 on top of h1 # // Do not draw the Y axis label on the upper plot and redraw a small # // axis instead, in order to avoid the first label (0) to be clipped. h1.GetYaxis().SetLabelSize(0.) #TGaxis *axis = new TGaxis( -5, 20, -5, 220, 20,220,510,""); #axis = TGaxis( -5, 20, -5, 220, 20,220,510,"") #xmin ymin xmax ymax axis = TGaxis( 0, 0, 0, max_val_, 0.001,max_val_,510,"") axis.SetLabelFont(43) #Absolute font size in pixel (precision 3) axis.SetLabelSize(15) axis.Draw() #lower plot will be in pad cc.cd() # Go back to the main canvas before defining pad2 #TPad *pad2 = new TPad("pad2", "pad2", 0, 0.05, 1, 0.3) pad2 = TPad("pad2", "pad2", 0, 0.05, 1, 0.3) pad2.SetTopMargin(0) # can change to separate top and bottom #pad2.SetBottomMargin(0.2) #pad2.SetBottomMargin(0) #pad2.SetGridx() # vertical grid, dashed lines pad2.Draw() pad2.cd() # pad2 becomes the current pad # Define the ratio plot #TH1F *h3 = (TH1F*)h1.Clone("h3"); h3 = h2.Clone("h3") h3.SetLineColor(1) h3.SetMinimum(0.5) # Define Y .. h3.SetMaximum(1.5) # .. range h3.Sumw2() h3.SetStats(0) # No statistics on lower plot h3.Divide(h1) h3.SetMarkerStyle(21) #gPad.Modified() #gPad.Update() h3.Draw("ep") # Draw the ratio plot pad2.Update() lline = TLine(pad2.GetUxmin(),1,pad2.GetUxmax(),1) #lline.SetNDC(1) lline.SetLineStyle(1) lline.Draw('same') #// h1 settings h1.SetLineColor(600+1) h1.SetLineWidth(2) #// Y axis h1 plot settings h1.GetYaxis().SetTitleSize(20) h1.GetYaxis().SetTitleFont(43) h1.GetYaxis().SetTitleOffset(1.55) #print 'xbins__ = ',xbins__ h1.GetXaxis().SetNdivisions(xbins__) #h1.GetXaxis().SetNdivisions(0) #// h2 settings h2.SetLineColor(632) h2.SetLineWidth(2) # // Ratio plot (h3) settings h3.SetTitle("") # Remove the ratio title #// Y axis ratio plot settings h3.GetYaxis().SetTitle("Reco/Gen") h3.GetYaxis().SetNdivisions(505) h3.GetYaxis().SetTitleSize(20) h3.GetYaxis().SetTitleFont(43) h3.GetYaxis().SetTitleOffset(1.55) h3.GetYaxis().SetLabelFont(43) #Absolute font size in pixel (precision 3) h3.GetYaxis().SetLabelSize(15) # // X axis ratio plot settings #h3.GetXaxis().SetNdivisions(xbins__) h3.GetXaxis().SetNdivisions(xbins__) #h3.GetXaxis().SetNdivisions(0) h3.GetXaxis().SetTitleSize(20) h3.GetXaxis().SetTitleFont(43) h3.GetXaxis().SetTitleOffset(4.) h3.GetXaxis().SetLabelFont(43) # Absolute font size in pixel (precision 3) h3.GetXaxis().SetLabelSize(15) pad1.cd() leg_ = TLegend(0.6, 0.75, 0.89, 0.89) #for hi_,h_ in enumerate(hists_): a = ih_[:] #print'a = ',a #for i,hist_info_ in enumerate(a): for hist_info_ in a: this_h = hist_info_[0] this_label = hist_info_[1] leg_.AddEntry(this_h,this_label,'lf') # histo object, ID #leg.SetTextSize(0.02) leg_.Draw('same') #cc.SaveAs(output_Loc + "Gen_Reco_" + comb_ID_ + ".png") cc.SaveAs(output_Loc + "Gen_Reco_" + comb_ID_ + ".pdf") cc.SaveAs(output_Loc + "Gen_Reco_" + comb_ID_ + ".png") return 0
mg.GetYaxis().SetMoreLogLabels() mg.GetYaxis().SetTitleOffset(1.9) legend.SetBorderSize(0) legend.SetTextSize(0.03) legend.Draw("same") c.SetGrid() gStyle.SetGridStyle(2) gStyle.SetGridColor(ROOT.kGray) latex = Text(gPad, 0.88,0.65, "#scale[1.2]{#bf{CMS}} #font[50]{Preliminary}", align = 33) latex = Text(gPad, 0.88,0.60,"Run2 Data (13 TeV)", align = 33,size = 0.03) if args.glob: latex = Text(gPad, 0.88,0.55,"Z#rightarrow ee events, EB", align = 33,size = 0.03) if args.loc: latex = Text(gPad, 0.88,0.55,"Same cluster, EB", align = 33,size = 0.03) latex = Text(gPad, 0.88,0.48,"#sigma = #frac{N}{A_{eff}} #font[62]{#oplus} #sqrt{2}C", align = 33,size = 0.04) top_axis = TGaxis(xmin ,mg.GetHistogram().GetMaximum(),xmax,mg.GetHistogram().GetMaximum(),ADC2GEV_B*xmin,ADC2GEV_B*xmax,510,"G-"); top_axis.SetTitle("E [GeV]") top_axis.SetTitleSize(0.035) top_axis.SetLabelSize(0.035) top_axis.SetTitleFont(42) top_axis.SetLabelFont(42) top_axis.Draw() Frame(gPad) c.Update() c.Modified() input() c.SaveAs("plots/"+args.tag+"/allYears/sigma_"+name+".png") c.SaveAs("plots/"+args.tag+"/allYears/sigma_"+name+".pdf")
graph_exclusion_cms_8TeV_1g.SetLineColorAlpha(kAzure + 10, 0.65) ######CMS 8TeV, two photons mass_cms_8TeV_2g = np.array([198., 227., 256., 256., 227., 198.]) ctau_cms_8TeV_2g = 0.01 * np.array([0.4, 2, 9, 9, 25., 50.]) graph_exclusion_cms_8TeV_2g = TGraph(6, mass_cms_8TeV_2g, ctau_cms_8TeV_2g) graph_exclusion_cms_8TeV_2g.SetFillColorAlpha(kGray, 0.6) graph_exclusion_cms_8TeV_2g.SetLineColorAlpha(kGray, 0.6) ####legend #Lambda axis f1_lambda = TF1("f1", "(x+6.00)/1.454", 72.902, 416.78) A1_lambda = TGaxis(100.0, 0.0125, 600.0, 0.0125, "f1", 1010, "NI") A1_lambda.SetLabelFont(42) A1_lambda.SetLabelSize(0.035) A1_lambda.SetTextFont(42) A1_lambda.SetTextSize(1.3) A1_lambda.SetTitle("#Lambda (TeV)") A1_lambda.SetTitleSize(0.04) A1_lambda.SetTitleOffset(0.9) ### only graph_exclusion_exp_ = TGraph( len(lambda_point_boundary_exp_), np.array(1.454 * lambda_point_boundary_exp_ - 6.0), 0.01 * np.array(ctau_points)) graph_exclusion_exp_p1sig_ = TGraph( len(lambda_point_boundary_exp_p1sig_), np.array(1.454 * lambda_point_boundary_exp_p1sig_ - 6.0), 0.01 * np.array(ctau_points))
hRawYieldDistr[-1].GetMean()) / hRawYieldDistr[-1].GetMean() * 100 syst = TMath.Sqrt(rms**2 + shift**2) hRMS.SetBinContent(iPt, rms) hMeanShift.SetBinContent(iPt, shift) hSyst.SetBinContent(iPt, syst) cRMS = TCanvas('cRMS', '', 800, 800) cRMS.DrawFrame(hRMS.GetBinLowEdge(1), 0.1, ptMax, 20., ';#it{p}_{T} (GeV/#it{c});RMS (%)') hRMS.DrawCopy('same') axisSoverB = TGaxis(gPad.GetUxmax(), gPad.GetUymin(), gPad.GetUxmax(), gPad.GetUymax(), 0.01, 20., 510, "+LG") axisSoverB.SetLineColor(kRed + 1) axisSoverB.SetLabelColor(kRed + 1) axisSoverB.SetLabelFont(42) axisSoverB.SetLabelSize(0.045) axisSoverB.SetTitle('S/B (3#sigma)') axisSoverB.SetTitleOffset(1.2) axisSoverB.SetLabelOffset(0.012) axisSoverB.SetTitleColor(kRed + 1) axisSoverB.SetTitleFont(42) axisSoverB.SetTitleSize(0.05) axisSoverB.SetMaxDigits(3) axisSoverB.Draw() hSoverB.DrawCopy('same') cRMS.Update() cSyst = TCanvas('cSyst', '', 800, 800) cSyst.DrawFrame(hSyst.GetBinLowEdge(1), 0.1, ptMax, 20., ';#it{p}_{T} (GeV/#it{c}); Syst (%)') SetObjectStyle(hRMS, color=kRed + 1, fillstyle=0, linewidth=3)
def PlotOnCanvas(self, pdf_name): #gROOT.SetBatch(False) tdrstyle.setTDRStyle() canvas = TCanvas("c1", "c1", 600, 600) pad1 = TPad("pad1", "pad1", 0, 0.0, 1, 1.0) pad1.SetBottomMargin(0.32) pad1.SetGridx() pad1.Draw() pad1.cd() self.histo1.SetStats(0) self.histo1.Draw(self.option) self.histo2.Draw(self.option + " same") if self.logx: pad1.SetLogx() if self.logy: pad1.SetLogy() legend = TLegend(0.65, 0.7, 0.85, 0.83) legend.SetHeader("Legend", "C") legend.AddEntry(self.histo1, self.legend1, "l") legend.AddEntry(self.histo2, self.legend2, "l") legend.Draw() # Redraw axis to avoid clipping 0 self.histo1.GetXaxis().SetLabelSize(0.) self.histo1.GetXaxis().SetTitle('') axis = TGaxis(-9, -2.8, -9, 2.8, 0, 10000, 50510, "") axis.SetLabelFont(43) axis.SetLabelSize(15) axis.Draw("same") pad2 = TPad("pad2", "pad2", 0, 0.0, 1, 0.3) pad2.SetTopMargin(0) pad2.SetBottomMargin(0.4) pad2.SetGridx() pad2.Draw() pad2.cd() if self.logx: pad2.SetLogx() self.ratio.SetLineColor(ROOT.kBlack) self.ratio.SetMinimum(0.5) self.ratio.SetMaximum(1.5) self.ratio.SetStats(0) self.ratio.SetMarkerStyle(21) self.ratio.Draw("ep") self.histo1.SetLineColor(ROOT.kBlue + 1) self.histo1.SetLineWidth(2) max_y = max(self.histo1.GetMaximum(), self.histo2.GetMaximum()) self.histo1.SetMaximum(max_y * 1.1) self.histo1.GetYaxis().SetNdivisions(505) self.histo1.GetYaxis().SetTitleSize(20) self.histo1.GetYaxis().SetTitleFont(43) self.histo1.GetYaxis().SetTitleOffset(1.8) self.histo2.SetLineColor(ROOT.kRed) self.histo2.SetLineWidth(2) self.ratio.SetTitle("") self.ratio.GetYaxis().SetTitle("Ratio") self.ratio.GetYaxis().SetNdivisions(505) self.ratio.GetYaxis().SetTitleSize(20) self.ratio.GetYaxis().SetTitleFont(43) self.ratio.GetYaxis().SetTitleOffset(1.8) self.ratio.GetYaxis().SetLabelFont(43) self.ratio.GetYaxis().SetLabelSize(15) self.ratio.GetXaxis().SetNdivisions(510) self.ratio.GetXaxis().SetTitleSize(20) self.ratio.GetXaxis().SetTitleFont(43) self.ratio.GetXaxis().SetTitleOffset(4.) self.ratio.GetXaxis().SetLabelFont(43) self.ratio.GetXaxis().SetLabelSize(15) ROOT.SetOwnership(canvas, False) ROOT.SetOwnership(pad1, False) ROOT.SetOwnership(pad2, False) canvas.Print(pdf_name, 'Title:' + self.title) canvas.Close()
class Differential1D: """ Base class for displaying 1D differential plots. Produces a plot comparing the baseline geometry (base) to the geometry specified by the geom arguement. The quantity plotted is given by the "stat" option, and is limited to the different statistics created by the StarBASE application. At present, these include: stat="radlen" :: plots number of radiation lengths of material encountered ... need to add more stats The plot will show a solid histogram for the baseline geometry, with the comparison geometry shown with red hashes. The fractional difference (baseline-comp)/baseline is shown at the bottom in blue, scaled according to the alternate axis at the right. base: selects the baseline geometry. [Mandatory] geom: selects the comparison geometry. [Mandatory] volume: selects the volume to be compared. [Mandatory] geomvolume: selects the volume in the comparison geometry. [Default: same] stat: selects the statistic to compare. [Default: radlen] xmin, xmax: x-axis range. [Optional] ymin, ymax: y-axis range. [Optional] """ def __init__(self, base, geom, volume="EMSS", geomvolume="same", stat="radlen", xmin=+0., xmax=-1., ymin=+0., ymax=-1., canvas=0, legend=False ): self.name = volume self.base = base self.geom = geom baseFile = get_geom_file(base) # get the files compFile = get_geom_file(geom) hname = "h_"+stat+"_"+volume+"_eta" # retrive the histograms from the files print "Get histo: " + str(hname) self.histo_base = stat_histo( stat, volume, file=baseFile ) if ( geomvolume == "same" ): self.histo_comp = stat_histo( stat, volume, compFile ) else: self.histo_comp = stat_histo( stat, geomvolume, compFile ) self.histo_diff = self.histo_base.Clone( hname + "_diff" ) # difference the histograms self.histo_diff.Add( self.histo_comp, -1.0 ) self.histo_diff.Divide(self.histo_base) # diff will be (old-new)/old * 100% if ( canvas == 0 ): canvas = TCanvas("temp"+base+geom+volume+geomvolume,"Differential 1D: baseline="+base+" compare="+geom,500,400); self.canvas = canvas # Detect and apply optional x-axis range if ( xmax > xmin ): self.histo_base.GetXaxis().SetRangeUser(xmin,xmax) self.histo_comp.GetXaxis().SetRangeUser(xmin,xmax) # ... or zoom in on an appropriate scale else: # auto_range( self.histo_base ) # auto_range( self.histo_comp ) xmin = auto_min( self.histo_base ) xmax = auto_max( self.histo_base ) self.histo_base.GetXaxis().SetRangeUser(xmin,xmax) self.histo_comp.GetXaxis().SetRangeUser(xmin,xmax) # xmin = TMath.Min( self.histo_base.GetXaxis().GetXmin(),self.histo_comp.GetXaxis().GetXmin() ) # xmax = TMath.Max( self.histo_base.GetXaxis().GetXmax(),self.histo_comp.GetXaxis().GetXmax() ) # print "xmin="+str(xmin) # print "xmax="+str(xmax) # Detect and apply optional y-axis range if ( ymax > ymin ): self.histo_base.GetYaxis().SetRangeUser(ymin,ymax) else: ymin = self.histo_base.GetMinimum() ymax = TMath.Max( self.histo_base.GetMaximum(), self.histo_comp.GetMaximum()) ymax *= 1.05 # Current range in y-axis extends from 0 to ymax. We want # to expand this to go from -0.2*ymax to ymax. ymin = -0.2 * ymax self.histo_base.GetYaxis().SetRangeUser(ymin,ymax) # Draw the baseline and comparison histograms self.histo_base.SetLineWidth(2) self.histo_base.SetFillStyle(1001) self.histo_base.SetFillColor(22) self.histo_base.Draw() self.histo_comp.SetLineColor(2) self.histo_comp.SetLineStyle(2) self.histo_comp.SetFillStyle(3345) self.histo_comp.SetFillColor(2) self.histo_comp.Draw("same") # Rescale difference histogram so that it is in percent self.histo_diff.Scale(100.0) # This is the maximum of the histogram. yfull_max = self.histo_diff.GetMaximum() yfull_min = self.histo_diff.GetMinimum() yfull = TMath.Max( yfull_max, TMath.Abs( yfull_min ) ) self.max_differential = yfull yfull *= 1.3 if ( yfull == 0. ): yfull = 1.0 # We need to rescale the histogram so that it fits w/in 10% of ymax self.histo_diff.Scale( 0.10 * ymax / yfull ) # Next we shift the histogram down by 0.1 * ymax nbinx=self.histo_diff.GetNbinsX(); i=1 while ( i<=nbinx ): self.histo_diff[i] -= 0.1 * ymax i+=1 # Reset the line color and draw on the same plot self.histo_diff.SetLineColor(4) self.histo_diff.Draw("same") self.line = TLine(xmin, -0.1 * ymax, xmax, -0.1*ymax ) self.line.SetLineStyle(3) self.line.Draw() # And superimpose an axis on the new plot xa = xmax self.axis = TGaxis( xa, -0.2*ymax, xa, 0.0, -yfull, +yfull, 50510, "-+L" ) self.axis.SetLabelSize(0.03) self.axis.SetLabelOffset(-0.02) self.axis.SetLineColor(4) self.axis.SetTextColor(4) self.axis.SetLabelColor(4) self.axis.SetNdivisions(4) # self.axis.SetTitle("(base-comp)/base [%]") self.axis.SetTitleSize(0.0175) self.axis.SetTitleOffset(-0.5) self.axis.Draw(); # Add the legend if requested if ( legend ): self.legend = TLegend( 0.78, 0.80, 0.98, 0.98 ) self.legend.AddEntry( self.histo_base, base ) self.legend.AddEntry( self.histo_comp, geom ) self.legend.AddEntry( self.histo_diff, "#frac{"+base+"-"+geom+"}{"+base+"} [%]" ) self.legend.Draw()
def main(): # pylint: disable=too-many-locals, too-many-statements, too-many-branches """ Main plotting function """ gROOT.SetBatch(True) # pylint: disable=unused-variable parser = argparse.ArgumentParser() parser.add_argument("--database-analysis", "-d", dest="database_analysis", help="analysis database to be used", required=True) parser.add_argument("--analysis", "-a", dest="type_ana", help="choose type of analysis", required=True) parser.add_argument("--input", "-i", dest="input_file", help="results input file", required=True) args = parser.parse_args() typean = args.type_ana shape = typean[len("jet_"):] print("Shape:", shape) file_in = args.input_file with open(args.database_analysis, "r") as file_db: data_param = yaml.safe_load(file_db) case = list(data_param.keys())[0] datap = data_param[case] logger = get_logger() i_cut = file_in.rfind("/") rootpath = file_in[:i_cut] # plotting # LaTeX string p_latexnhadron = datap["analysis"][typean]["latexnamehadron"] p_latexbin2var = datap["analysis"][typean]["latexbin2var"] v_varshape_latex = datap["analysis"][typean]["var_shape_latex"] # first variable (hadron pt) lpt_finbinmin = datap["analysis"][typean]["sel_an_binmin"] lpt_finbinmax = datap["analysis"][typean]["sel_an_binmax"] var1ranges = lpt_finbinmin.copy() var1ranges.append(lpt_finbinmax[-1]) # second variable (jet pt) v_var2_binning = datap["analysis"][typean]["var_binning2"] # name lvar2_binmin_reco = datap["analysis"][typean].get("sel_binmin2_reco", None) lvar2_binmax_reco = datap["analysis"][typean].get("sel_binmax2_reco", None) p_nbin2_reco = len(lvar2_binmin_reco) # number of reco bins lvar2_binmin_gen = datap["analysis"][typean].get("sel_binmin2_gen", None) lvar2_binmax_gen = datap["analysis"][typean].get("sel_binmax2_gen", None) p_nbin2_gen = len(lvar2_binmin_gen) # number of gen bins var2ranges_reco = lvar2_binmin_reco.copy() var2ranges_reco.append(lvar2_binmax_reco[-1]) var2binarray_reco = array( "d", var2ranges_reco) # array of bin edges to use in histogram constructors var2ranges_gen = lvar2_binmin_gen.copy() var2ranges_gen.append(lvar2_binmax_gen[-1]) var2binarray_gen = array( "d", var2ranges_gen) # array of bin edges to use in histogram constructors # observable (z, shape,...) v_varshape_binning = datap["analysis"][typean][ "var_binningshape"] # name (reco) v_varshape_binning_gen = datap["analysis"][typean][ "var_binningshape_gen"] # name (gen) lvarshape_binmin_reco = \ datap["analysis"][typean].get("sel_binminshape_reco", None) lvarshape_binmax_reco = \ datap["analysis"][typean].get("sel_binmaxshape_reco", None) p_nbinshape_reco = len(lvarshape_binmin_reco) # number of reco bins lvarshape_binmin_gen = \ datap["analysis"][typean].get("sel_binminshape_gen", None) lvarshape_binmax_gen = \ datap["analysis"][typean].get("sel_binmaxshape_gen", None) p_nbinshape_gen = len(lvarshape_binmin_gen) # number of gen bins varshaperanges_reco = lvarshape_binmin_reco.copy() varshaperanges_reco.append(lvarshape_binmax_reco[-1]) varshapebinarray_reco = array( "d", varshaperanges_reco ) # array of bin edges to use in histogram constructors varshaperanges_gen = lvarshape_binmin_gen.copy() varshaperanges_gen.append(lvarshape_binmax_gen[-1]) varshapebinarray_gen = array( "d", varshaperanges_gen ) # array of bin edges to use in histogram constructors file_results = TFile.Open(file_in) if not file_results: logger.fatal(make_message_notfound(file_in)) ibin2 = 1 suffix = "%s_%g_%g" % (v_var2_binning, lvar2_binmin_gen[ibin2], lvar2_binmax_gen[ibin2]) # HF data nameobj = "%s_hf_data_%d_stat" % (shape, ibin2) hf_data_stat = file_results.Get(nameobj) if not hf_data_stat: logger.fatal(make_message_notfound(nameobj, file_in)) nameobj = "%s_hf_data_%d_syst" % (shape, ibin2) hf_data_syst = file_results.Get(nameobj) if not hf_data_syst: logger.fatal(make_message_notfound(nameobj, file_in)) # HF PYTHIA nameobj = "%s_hf_pythia_%d_stat" % (shape, ibin2) hf_pythia_stat = file_results.Get(nameobj) if not hf_pythia_stat: logger.fatal(make_message_notfound(nameobj, file_in)) # HF ratio nameobj = "%s_hf_ratio_%d_stat" % (shape, ibin2) hf_ratio_stat = file_results.Get(nameobj) if not hf_ratio_stat: logger.fatal(make_message_notfound(nameobj, file_in)) nameobj = "%s_hf_ratio_%d_syst" % (shape, ibin2) hf_ratio_syst = file_results.Get(nameobj) if not hf_ratio_syst: logger.fatal(make_message_notfound(nameobj, file_in)) # inclusive data nameobj = "%s_incl_data_%d_stat" % (shape, ibin2) incl_data_stat = file_results.Get(nameobj) if not incl_data_stat: logger.fatal(make_message_notfound(nameobj, file_in)) nameobj = "%s_incl_data_%d_syst" % (shape, ibin2) incl_data_syst = file_results.Get(nameobj) if not incl_data_syst: logger.fatal(make_message_notfound(nameobj, file_in)) # inclusive PYTHIA nameobj = "%s_incl_pythia_%d_stat" % (shape, ibin2) incl_pythia_stat = file_results.Get(nameobj) if not incl_pythia_stat: logger.fatal(make_message_notfound(nameobj, file_in)) nameobj = "%s_incl_pythia_%d_syst" % (shape, ibin2) incl_pythia_syst = file_results.Get(nameobj) if not incl_pythia_syst: logger.fatal(make_message_notfound(nameobj, file_in)) # inclusive ratio nameobj = "%s_incl_ratio_%d_stat" % (shape, ibin2) incl_ratio_stat = file_results.Get(nameobj) if not incl_ratio_stat: logger.fatal(make_message_notfound(nameobj, file_in)) nameobj = "%s_incl_ratio_%d_syst" % (shape, ibin2) incl_ratio_syst = file_results.Get(nameobj) if not incl_ratio_syst: logger.fatal(make_message_notfound(nameobj, file_in)) # quark PYTHIA nameobj = "%s_quark_pythia_%d_stat" % (shape, ibin2) quark_pythia_stat = file_results.Get(nameobj) if not quark_pythia_stat: logger.fatal(make_message_notfound(nameobj, file_in)) nameobj = "%s_quark_pythia_%d_syst" % (shape, ibin2) quark_pythia_syst = file_results.Get(nameobj) if not quark_pythia_syst: logger.fatal(make_message_notfound(nameobj, file_in)) # gluon PYTHIA nameobj = "%s_gluon_pythia_%d_stat" % (shape, ibin2) gluon_pythia_stat = file_results.Get(nameobj) if not gluon_pythia_stat: logger.fatal(make_message_notfound(nameobj, file_in)) nameobj = "%s_gluon_pythia_%d_syst" % (shape, ibin2) gluon_pythia_syst = file_results.Get(nameobj) if not gluon_pythia_syst: logger.fatal(make_message_notfound(nameobj, file_in)) # plot the results with systematic uncertainties and models size_can = [800, 800] offsets_axes = [0.8, 1.1] margins_can = [0.1, 0.13, 0.1, 0.03] size_thg = 0.05 offset_thg = 0.85 gStyle.SetErrorX(0) # do not plot horizontal error bars of histograms fontsize = 0.035 opt_leg_g = "FP" opt_plot_g = "2" list_new = [] # list to avoid loosing objects created in loops # labels x_latex = 0.16 y_latex_top = 0.83 y_step = 0.055 title_x = v_varshape_latex title_y = "(1/#it{N}_{jet}) d#it{N}/d%s" % v_varshape_latex title_full = ";%s;%s" % (title_x, title_y) title_full_ratio = ";%s;data/MC: ratio of %s" % (title_x, title_y) text_alice = "#bf{ALICE} Preliminary, pp, #sqrt{#it{s}} = 13 TeV" text_alice_sim = "#bf{ALICE} Simulation, pp, #sqrt{#it{s}} = 13 TeV" text_pythia = "PYTHIA 8 (Monash)" text_pythia_split = "#splitline{PYTHIA 8}{(Monash)}" text_jets = "charged jets, anti-#it{k}_{T}, #it{R} = 0.4" text_ptjet = "%g #leq %s < %g GeV/#it{c}, #left|#it{#eta}_{jet}#right| #leq 0.5" % ( lvar2_binmin_reco[ibin2], p_latexbin2var, lvar2_binmax_reco[ibin2]) text_pth = "%g #leq #it{p}_{T}^{%s} < %g GeV/#it{c}, #left|#it{y}_{%s}#right| #leq 0.8" % ( lpt_finbinmin[0], p_latexnhadron, min(lpt_finbinmax[-1], lvar2_binmax_reco[ibin2]), p_latexnhadron) text_ptcut = "#it{p}_{T, incl. ch. jet}^{leading track} #geq 5.33 GeV/#it{c}" text_ptcut_sim = "#it{p}_{T, incl. ch. jet}^{leading h^{#pm}} #geq 5.33 GeV/#it{c} (varied)" text_sd = "Soft Drop (#it{z}_{cut} = 0.1, #it{#beta} = 0)" title_thetag = "#it{#theta}_{g} = #it{R}_{g}/#it{R}" radius_jet = 0.4 # colour and marker indeces c_hf_data = 0 c_incl_data = 1 c_hf_mc = 2 c_incl_mc = 6 c_quark_mc = 5 c_gluon_mc = 0 # markers m_hf_data = get_marker(0) m_incl_data = get_marker(1) m_hf_mc = get_marker(0, 2) m_incl_mc = get_marker(1, 2) m_quark_mc = get_marker(2) m_gluon_mc = get_marker(3) # make the horizontal error bars smaller if shape == "nsd": for gr in [ hf_data_syst, incl_data_syst, hf_ratio_syst, incl_ratio_syst, incl_pythia_syst, quark_pythia_syst, gluon_pythia_syst ]: for i in range(gr.GetN()): gr.SetPointEXlow(i, 0.1) gr.SetPointEXhigh(i, 0.1) # data, HF and inclusive hf_data_syst_cl = hf_data_syst.Clone() leg_pos = [.72, .75, .85, .85] list_obj = [hf_data_syst, incl_data_syst, hf_data_stat, incl_data_stat] labels_obj = ["%s-tagged" % p_latexnhadron, "inclusive", "", ""] colours = [ get_colour(i, j) for i, j in zip((c_hf_data, c_incl_data, c_hf_data, c_incl_data), (2, 2, 1, 1)) ] markers = [m_hf_data, m_incl_data, m_hf_data, m_incl_data] y_margin_up = 0.46 y_margin_down = 0.05 cshape_data, list_obj_data_new = make_plot("cshape_data_" + suffix, size=size_can, \ list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \ colours=colours, markers=markers, leg_pos=leg_pos, margins_y=[y_margin_down, y_margin_up], margins_c=margins_can, \ title=title_full) for gr, c in zip((hf_data_syst, incl_data_syst), (c_hf_data, c_incl_data)): gr.SetMarkerColor(get_colour(c)) list_obj_data_new[0].SetTextSize(fontsize) if shape == "nsd": hf_data_syst.GetXaxis().SetNdivisions(5) # Draw a line through the points. if shape == "nsd": for h in (hf_data_stat, incl_data_stat): h_line = h.Clone(h.GetName() + "_line") h_line.SetLineStyle(2) h_line.Draw("l hist same") list_new.append(h_line) cshape_data.Update() if shape == "rg": # plot the theta_g axis gr_frame = hf_data_syst axis_rg = gr_frame.GetXaxis() rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst()) rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast()) thetag_min = rg_min / radius_jet thetag_max = rg_max / radius_jet y_axis = cshape_data.GetUymax() axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min, thetag_max, 510, "-") axis_thetag.SetTitle(title_thetag) axis_thetag.SetTitleSize(size_thg) axis_thetag.SetLabelSize(0.036) axis_thetag.SetTitleFont(42) axis_thetag.SetLabelFont(42) axis_thetag.SetLabelOffset(0) axis_thetag.SetTitleOffset(offset_thg) cshape_data.SetTickx(0) axis_thetag.Draw("same") # Draw LaTeX y_latex = y_latex_top list_latex_data = [] for text_latex in [ text_alice, text_jets, text_ptjet, text_pth, text_ptcut, text_sd ]: latex = TLatex(x_latex, y_latex, text_latex) list_latex_data.append(latex) draw_latex(latex, textsize=fontsize) y_latex -= y_step cshape_data.Update() cshape_data.SaveAs("%s/%s_data_%s.pdf" % (rootpath, shape, suffix)) # data and PYTHIA, HF leg_pos = [.72, .65, .85, .85] list_obj = [hf_data_syst_cl, hf_data_stat, hf_pythia_stat] labels_obj = ["data", "", text_pythia_split] colours = [ get_colour(i, j) for i, j in zip((c_hf_data, c_hf_data, c_hf_mc), (2, 1, 1)) ] markers = [m_hf_data, m_hf_data, m_hf_mc] y_margin_up = 0.4 y_margin_down = 0.05 cshape_data_mc_hf, list_obj_data_mc_hf_new = make_plot("cshape_data_mc_hf_" + suffix, size=size_can, \ list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \ colours=colours, markers=markers, leg_pos=leg_pos, margins_y=[y_margin_down, y_margin_up], margins_c=margins_can, \ title=title_full) for gr, c in zip([hf_data_syst_cl], [c_hf_data]): gr.SetMarkerColor(get_colour(c)) leg_data_mc_hf = list_obj_data_mc_hf_new[0] leg_data_mc_hf.SetHeader("%s-tagged" % p_latexnhadron) leg_data_mc_hf.SetTextSize(fontsize) if shape == "nsd": hf_data_syst_cl.GetXaxis().SetNdivisions(5) #axis_nsd = hf_data_syst_cl.GetHistogram().GetXaxis() #x1 = axis_nsd.GetBinLowEdge(1) #x2 = axis_nsd.GetBinUpEdge(axis_nsd.GetNbins()) #axis_nsd.Set(5, x1, x2) #for ibin in range(axis_nsd.GetNbins()): # axis_nsd.SetBinLabel(ibin + 1, "%d" % ibin) #axis_nsd.SetNdivisions(5) cshape_data_mc_hf.Update() if shape == "rg": # plot the theta_g axis axis_rg = hf_data_stat.GetXaxis() rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst()) rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast()) thetag_min = rg_min / radius_jet thetag_max = rg_max / radius_jet y_axis = cshape_data_mc_hf.GetUymax() axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min, thetag_max, 510, "-") axis_thetag.SetTitle(title_thetag) axis_thetag.SetTitleSize(size_thg) axis_thetag.SetLabelSize(0.036) axis_thetag.SetTitleFont(42) axis_thetag.SetLabelFont(42) axis_thetag.SetLabelOffset(0) axis_thetag.SetTitleOffset(offset_thg) cshape_data_mc_hf.SetTickx(0) axis_thetag.Draw("same") # Draw LaTeX y_latex = y_latex_top list_latex_data_mc_hf = [] for text_latex in [text_alice, text_jets, text_ptjet, text_pth, text_sd]: latex = TLatex(x_latex, y_latex, text_latex) list_latex_data_mc_hf.append(latex) draw_latex(latex, textsize=fontsize) y_latex -= y_step cshape_data_mc_hf.Update() cshape_data_mc_hf.SaveAs("%s/%s_data_mc_hf_%s.pdf" % (rootpath, shape, suffix)) # data and PYTHIA, inclusive #leg_pos = [.68, .65, .85, .85] list_obj = [ incl_data_syst, incl_pythia_syst, incl_data_stat, incl_pythia_stat ] labels_obj = ["data", text_pythia_split] colours = [ get_colour(i, j) for i, j in zip((c_incl_data, c_incl_mc, c_incl_data, c_incl_mc), (2, 2, 1, 1)) ] markers = [m_incl_data, m_incl_mc, m_incl_data, m_incl_mc] y_margin_up = 0.4 y_margin_down = 0.05 cshape_data_mc_incl, list_obj_data_mc_incl_new = make_plot("cshape_data_mc_incl_" + suffix, size=size_can, \ list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \ colours=colours, markers=markers, leg_pos=leg_pos, margins_y=[y_margin_down, y_margin_up], margins_c=margins_can, \ title=title_full) for gr, c in zip([incl_data_syst, incl_pythia_syst], [c_incl_data, c_incl_mc]): gr.SetMarkerColor(get_colour(c)) leg_data_mc_incl = list_obj_data_mc_incl_new[0] leg_data_mc_incl.SetHeader("inclusive") leg_data_mc_incl.SetTextSize(fontsize) if shape == "nsd": incl_data_syst.GetXaxis().SetNdivisions(5) cshape_data_mc_incl.Update() if shape == "rg": # plot the theta_g axis axis_rg = incl_data_stat.GetXaxis() rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst()) rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast()) thetag_min = rg_min / radius_jet thetag_max = rg_max / radius_jet y_axis = cshape_data_mc_incl.GetUymax() axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min, thetag_max, 510, "-") axis_thetag.SetTitle(title_thetag) axis_thetag.SetTitleSize(size_thg) axis_thetag.SetLabelSize(0.036) axis_thetag.SetTitleFont(42) axis_thetag.SetLabelFont(42) axis_thetag.SetLabelOffset(0) axis_thetag.SetTitleOffset(offset_thg) cshape_data_mc_incl.SetTickx(0) axis_thetag.Draw("same") # Draw LaTeX y_latex = y_latex_top list_latex_data_mc_incl = [] for text_latex in [text_alice, text_jets, text_ptjet, text_ptcut, text_sd]: latex = TLatex(x_latex, y_latex, text_latex) list_latex_data_mc_incl.append(latex) draw_latex(latex, textsize=fontsize) y_latex -= y_step cshape_data_mc_incl.Update() cshape_data_mc_incl.SaveAs("%s/%s_data_mc_incl_%s.pdf" % (rootpath, shape, suffix)) # Ratios data/MC, HF and inclusive line_1 = TLine(lvarshape_binmin_reco[0], 1, lvarshape_binmax_reco[-1], 1) line_1.SetLineStyle(9) line_1.SetLineColor(1) line_1.SetLineWidth(3) #leg_pos = [.72, .7, .85, .85] # with header leg_pos = [.72, .75, .85, .85] # without header list_obj = [ hf_ratio_syst, line_1, incl_ratio_syst, hf_ratio_stat, incl_ratio_stat ] labels_obj = ["%s-tagged" % p_latexnhadron, "inclusive"] colours = [ get_colour(i, j) for i, j in zip((c_hf_data, c_incl_data, c_hf_data, c_incl_data), (2, 2, 1, 1)) ] markers = [m_hf_data, m_incl_data, m_hf_data, m_incl_data] y_margin_up = 0.52 y_margin_down = 0.05 if shape == "nsd": y_margin_up = 0.22 cshape_ratio, list_obj_ratio_new = make_plot("cshape_ratio_" + suffix, size=size_can, \ list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \ colours=colours, markers=markers, leg_pos=leg_pos, margins_y=[y_margin_down, y_margin_up], margins_c=margins_can, \ title=title_full_ratio) cshape_ratio.Update() for gr, c in zip((hf_ratio_syst, incl_ratio_syst), (c_hf_data, c_incl_data)): gr.SetMarkerColor(get_colour(c)) leg_ratio = list_obj_ratio_new[0] leg_ratio.SetTextSize(fontsize) #leg_ratio.SetHeader("data/MC") if shape == "nsd": hf_ratio_syst.GetXaxis().SetNdivisions(5) cshape_ratio.Update() if shape == "rg": # plot the theta_g axis gr_frame = hf_ratio_syst axis_rg = gr_frame.GetXaxis() rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst()) rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast()) thetag_min = rg_min / radius_jet thetag_max = rg_max / radius_jet y_axis = cshape_ratio.GetUymax() axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min, thetag_max, 510, "-") axis_thetag.SetTitle(title_thetag) axis_thetag.SetTitleSize(size_thg) axis_thetag.SetLabelSize(0.036) axis_thetag.SetTitleFont(42) axis_thetag.SetLabelFont(42) axis_thetag.SetLabelOffset(0) axis_thetag.SetTitleOffset(offset_thg) cshape_ratio.SetTickx(0) axis_thetag.Draw("same") # Draw LaTeX y_latex = y_latex_top list_latex_ratio = [] for text_latex in [ text_alice, text_jets, text_ptjet, text_pth, text_ptcut, text_sd, text_pythia ]: latex = TLatex(x_latex, y_latex, text_latex) list_latex_ratio.append(latex) draw_latex(latex, textsize=fontsize) y_latex -= y_step cshape_ratio.Update() cshape_ratio.SaveAs("%s/%s_ratio_%s.pdf" % (rootpath, shape, suffix)) # PYTHIA, HF, inclusive, quark, gluon incl_pythia_syst_cl = incl_pythia_syst.Clone() y_min_h, y_max_h = get_y_window_his([ hf_pythia_stat, incl_pythia_stat, quark_pythia_stat, gluon_pythia_stat ]) y_min_g, y_max_g = get_y_window_gr( [incl_pythia_syst, quark_pythia_syst, gluon_pythia_syst]) y_min = min(y_min_h, y_min_g) y_max = max(y_max_h, y_max_g) y_margin_up = 0.46 y_margin_down = 0.05 y_min_plot, y_max_plot = get_plot_range(y_min, y_max, y_margin_down, y_margin_up) #leg_pos = [.6, .65, .75, .85] leg_pos = [.72, .55, .85, .85] list_obj = [ incl_pythia_syst, quark_pythia_syst, gluon_pythia_syst, hf_pythia_stat, incl_pythia_stat, quark_pythia_stat, gluon_pythia_stat ] labels_obj = ["inclusive", "quark", "gluon", "%s-tagged" % p_latexnhadron] colours = [ get_colour(i, j) for i, j in zip((c_incl_mc, c_quark_mc, c_gluon_mc, c_hf_mc, c_incl_mc, c_quark_mc, c_gluon_mc), (2, 2, 2, 1, 1, 1, 1)) ] markers = [ m_incl_mc, m_quark_mc, m_gluon_mc, m_hf_mc, m_incl_mc, m_quark_mc, m_gluon_mc ] y_margin_up = 0.46 y_margin_down = 0.05 cshape_mc, list_obj_mc_new = make_plot("cshape_mc_" + suffix, size=size_can, \ list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \ colours=colours, markers=markers, leg_pos=leg_pos, range_y=[y_min_plot, y_max_plot], margins_c=margins_can, \ title=title_full) cshape_mc.Update() for gr, c in zip((incl_pythia_syst, quark_pythia_syst, gluon_pythia_syst), (c_incl_mc, c_quark_mc, c_gluon_mc)): gr.SetMarkerColor(get_colour(c)) leg_mc = list_obj_mc_new[0] leg_mc.SetTextSize(fontsize) leg_mc.SetHeader(text_pythia_split) if shape == "nsd": incl_pythia_syst.GetXaxis().SetNdivisions(5) cshape_mc.Update() if shape == "rg": # plot the theta_g axis axis_rg = hf_pythia_stat.GetXaxis() rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst()) rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast()) thetag_min = rg_min / radius_jet thetag_max = rg_max / radius_jet y_axis = cshape_mc.GetUymax() axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min, thetag_max, 510, "-") axis_thetag.SetTitle(title_thetag) axis_thetag.SetTitleSize(size_thg) axis_thetag.SetLabelSize(0.036) axis_thetag.SetTitleFont(42) axis_thetag.SetLabelFont(42) axis_thetag.SetLabelOffset(0) axis_thetag.SetTitleOffset(offset_thg) cshape_mc.SetTickx(0) axis_thetag.Draw("same") # Draw LaTeX y_latex = y_latex_top list_latex_mc = [] for text_latex in [ text_alice_sim, text_jets, text_ptjet, text_pth, text_ptcut_sim, text_sd ]: latex = TLatex(x_latex, y_latex, text_latex) list_latex_mc.append(latex) draw_latex(latex, textsize=fontsize) y_latex -= y_step cshape_mc.Update() cshape_mc.SaveAs("%s/%s_mc_%s.pdf" % (rootpath, shape, suffix)) # PYTHIA, HF, quark, gluon #leg_pos = [.6, .65, .75, .85] leg_pos = [.72, .61, .85, .85] list_obj = [ quark_pythia_syst, gluon_pythia_syst, hf_pythia_stat, quark_pythia_stat, gluon_pythia_stat ] labels_obj = ["quark", "gluon", "%s-tagged" % p_latexnhadron] colours = [ get_colour(i, j) for i, j in zip((c_quark_mc, c_gluon_mc, c_hf_mc, c_quark_mc, c_gluon_mc), (2, 2, 1, 1, 1)) ] markers = [m_quark_mc, m_gluon_mc, m_hf_mc, m_quark_mc, m_gluon_mc] y_margin_up = 0.46 y_margin_down = 0.05 cshape_mc, list_obj_mc_new = make_plot("cshape_mc_qgd_" + suffix, size=size_can, \ list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \ colours=colours, markers=markers, leg_pos=leg_pos, range_y=[y_min_plot, y_max_plot], margins_c=margins_can, \ title=title_full) cshape_mc.Update() for gr, c in zip((quark_pythia_syst, gluon_pythia_syst), (c_quark_mc, c_gluon_mc)): gr.SetMarkerColor(get_colour(c)) leg_mc = list_obj_mc_new[0] leg_mc.SetTextSize(fontsize) leg_mc.SetHeader(text_pythia_split) if shape == "nsd": quark_pythia_syst.GetXaxis().SetNdivisions(5) cshape_mc.Update() if shape == "rg": # plot the theta_g axis axis_rg = hf_pythia_stat.GetXaxis() rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst()) rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast()) thetag_min = rg_min / radius_jet thetag_max = rg_max / radius_jet y_axis = cshape_mc.GetUymax() axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min, thetag_max, 510, "-") axis_thetag.SetTitle(title_thetag) axis_thetag.SetTitleSize(size_thg) axis_thetag.SetLabelSize(0.036) axis_thetag.SetTitleFont(42) axis_thetag.SetLabelFont(42) axis_thetag.SetLabelOffset(0) axis_thetag.SetTitleOffset(offset_thg) cshape_mc.SetTickx(0) axis_thetag.Draw("same") # Draw LaTeX y_latex = y_latex_top list_latex_mc = [] for text_latex in [ text_alice_sim, text_jets, text_ptjet, text_pth, text_ptcut_sim, text_sd ]: latex = TLatex(x_latex, y_latex, text_latex) list_latex_mc.append(latex) draw_latex(latex, textsize=fontsize) y_latex -= y_step cshape_mc.Update() cshape_mc.SaveAs("%s/%s_mc_qgd_%s.pdf" % (rootpath, shape, suffix)) # PYTHIA, HF, inclusive #leg_pos = [.6, .65, .75, .85] leg_pos = [.72, .67, .85, .85] list_obj = [incl_pythia_syst_cl, incl_pythia_stat, hf_pythia_stat] labels_obj = ["inclusive", "", "%s-tagged" % p_latexnhadron] colours = [ get_colour(i, j) for i, j in zip((c_incl_mc, c_incl_mc, c_hf_mc), (2, 1, 1)) ] markers = [m_incl_mc, m_incl_mc, m_hf_mc] y_margin_up = 0.46 y_margin_down = 0.05 cshape_mc, list_obj_mc_new = make_plot("cshape_mc_id_" + suffix, size=size_can, \ list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \ colours=colours, markers=markers, leg_pos=leg_pos, range_y=[y_min_plot, y_max_plot], margins_c=margins_can, \ title=title_full) # Draw a line through the points. if shape == "nsd": for h in (incl_pythia_stat, hf_pythia_stat): h_line = h.Clone(h.GetName() + "_line") h_line.SetLineStyle(2) h_line.Draw("l hist same") list_new.append(h_line) cshape_mc.Update() incl_pythia_syst_cl.SetMarkerColor(get_colour(c_incl_mc)) leg_mc = list_obj_mc_new[0] leg_mc.SetTextSize(fontsize) leg_mc.SetHeader(text_pythia_split) if shape == "nsd": incl_pythia_syst_cl.GetXaxis().SetNdivisions(5) cshape_mc.Update() if shape == "rg": # plot the theta_g axis axis_rg = hf_pythia_stat.GetXaxis() rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst()) rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast()) thetag_min = rg_min / radius_jet thetag_max = rg_max / radius_jet y_axis = cshape_mc.GetUymax() axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min, thetag_max, 510, "-") axis_thetag.SetTitle(title_thetag) axis_thetag.SetTitleSize(size_thg) axis_thetag.SetLabelSize(0.036) axis_thetag.SetTitleFont(42) axis_thetag.SetLabelFont(42) axis_thetag.SetLabelOffset(0) axis_thetag.SetTitleOffset(offset_thg) cshape_mc.SetTickx(0) axis_thetag.Draw("same") # Draw LaTeX y_latex = y_latex_top list_latex_mc = [] for text_latex in [ text_alice_sim, text_jets, text_ptjet, text_pth, text_ptcut_sim, text_sd ]: latex = TLatex(x_latex, y_latex, text_latex) list_latex_mc.append(latex) draw_latex(latex, textsize=fontsize) y_latex -= y_step cshape_mc.Update() cshape_mc.SaveAs("%s/%s_mc_id_%s.pdf" % (rootpath, shape, suffix)) # data inclusive vs PYTHIA, quark, gluon #leg_pos = [.6, .65, .75, .85] #leg_pos = [.72, .55, .85, .85] leg_pos = [.6, .7, .85, .85] list_obj = [ incl_data_syst, quark_pythia_syst, gluon_pythia_syst, incl_data_stat, quark_pythia_stat, gluon_pythia_stat ] labels_obj = ["inclusive (data)", "quark (PYTHIA 8)", "gluon (PYTHIA 8)"] colours = [ get_colour(i, j) for i, j in zip((c_incl_data, c_quark_mc, c_gluon_mc, c_incl_data, c_quark_mc, c_gluon_mc), (2, 2, 2, 1, 1, 1)) ] markers = [ m_incl_data, m_quark_mc, m_gluon_mc, m_incl_data, m_quark_mc, m_gluon_mc ] y_margin_up = 0.3 y_margin_down = 0.05 cshape_mc, list_obj_mc_new = make_plot("cshape_mc_data_iqg" + suffix, size=size_can, \ list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \ colours=colours, markers=markers, leg_pos=leg_pos, margins_y=[y_margin_down, y_margin_up], margins_c=margins_can, \ title=title_full) for gr, c in zip((incl_data_syst, quark_pythia_syst, gluon_pythia_syst), (c_incl_data, c_quark_mc, c_gluon_mc)): gr.SetMarkerColor(get_colour(c)) leg_mc = list_obj_mc_new[0] leg_mc.SetTextSize(fontsize) cshape_mc.Update() cshape_mc.SaveAs("%s/%s_data_i_mc_qg_%s.pdf" % (rootpath, shape, suffix))
simple_nue.SetLineColor(46) rebin_nue.SetLineWidth(6) simple_nue.SetLineWidth(6) simple_nue.GetXaxis().SetRangeUser(0, 4) rebin_nue.GetXaxis().SetRangeUser(0, 4) simple_nue.Draw("hist") rebin_nue.Draw("hist same") # Do not draw the Y axis label on the upper plot and redraw a small # axis instead, in order to avoid the first label (0) to be clipped. rebin_nue.GetYaxis().SetLabelSize(0.) axis = TGaxis(-5, 20, -5, 220, 20, 220, 510, "") axis.SetLabelFont(43) # Absolute font size in pixel (precision 3) axis.SetLabelSize(15) axis.Draw() leg_nue = TLegend(0.75, 0.95, 0.75, 0.95) leg_nue.AddEntry(simple_nue, "nue gSimple Flux", "l") leg_nue.AddEntry(rebin_nue, "nue dk2nu Flux", "l") leg_nue.Draw() c6.cd() pad2 = TPad("pad2", "pad2", 0, 0.05, 1, 0.3) pad2.SetTopMargin(0.1) pad2.SetBottomMargin(0.1) pad2.SetGridx() # vertical grid pad2.Draw() pad2.cd() # pad2 becomes the current pad
simple_nue.SetLineColor(46) corrected_nue.SetLineWidth(4) simple_nue.SetLineWidth(4) simple_nue.GetXaxis().SetRangeUser(0, 4) corrected_nue.GetXaxis().SetRangeUser(0, 4) simple_nue.Draw("hist") corrected_nue.Draw("hist same") # Do not draw the Y axis label on the upper plot and redraw a small # axis instead, in order to avoid the first label (0) to be clipped. corrected_nue.GetYaxis().SetLabelSize(0.) axis = TGaxis(-5, 20, -5, 220, 20, 220, 510, "") axis.SetLabelFont(43) # Absolute font size in pixel (precision 3) axis.SetLabelSize(15) axis.Draw() leg_nue = TLegend(0.75, 0.95, 0.75, 0.95) leg_nue.AddEntry(simple_nue, "nue std. Flux", "l") leg_nue.AddEntry(corrected_nue, "nue cor. Flux", "l") leg_nue.Draw() c6.cd() pad2 = TPad("pad2", "pad2", 0, 0.05, 1, 0.3) pad2.SetTopMargin(0.1) pad2.SetBottomMargin(0.1) pad2.SetGridx() # vertical grid pad2.Draw() pad2.cd() # pad2 becomes the current pad