def doSystematicsPlots(self): if self._mySystObject == None: return # Make sure results have been obtained if self._hSystematicsUp == None: self.doSystematicsForMetShapeDifference() # Create output directory if os.path.exists("%s/Systematics_%s"%(self._myDir, self._systName)): shutils.rmtree("%s/Systematics_%s"%(self._myDir, self._systName)) os.mkdir("%s/Systematics_%s"%(self._myDir, self._systName)) # Make plot for systematics (phase-space bins integrated) if self._hFinalShape != None: self._hFinalShape.SetLineColor(ROOT.kBlack) self._hSystematicsUp.SetLineColor(ROOT.kBlue) self._hSystematicsDown.SetLineColor(ROOT.kRed) myYmax = 15 if "2012" in self._moduleInfoString: myYmax = 30 plot = plots.ComparisonManyPlot(histograms.Histo(self._hFinalShape, "Nominal", drawStyle="E"), [histograms.Histo(self._hSystematicsUp, "Up", drawStyle="E"), histograms.Histo(self._hSystematicsDown, "Down", drawStyle="E")]) plot.createFrame("%s/Systematics_%s/QCDInvertedShapeWithMetSyst_final_%s"%(self._myDir, self._systName, self._moduleInfoString), createRatio=True, opts2={"ymin": 0, "ymax": 2}, opts={"addMCUncertainty": True, "ymin": -5, "ymax": myYmax}) plot.frame.GetXaxis().SetTitle(self._histoSpecs["xtitle"]) plot.frame.GetYaxis().SetTitle(self._histoSpecs["ytitle"]) plot.setLegend(histograms.createLegend(0.59, 0.70, 0.87, 0.90)) plot.legend.SetFillColor(0) plot.legend.SetFillStyle(1001) styles.mcStyle(plot.histoMgr.getHisto("Up")) #plot.histoMgr.getHisto("Up").getRootHisto().SetMarkerSize(0) styles.mcStyle2(plot.histoMgr.getHisto("Down")) styles.dataStyle(plot.histoMgr.getHisto("Nominal")) self._drawPlot(plot) # Make plots for systematics (for each phase-space bin separately) nSplitBins = self._myCtrlRegion.getNumberOfPhaseSpaceSplitBins() myCtrlHistograms = self._mySystObject.getHistogramsForCtrlRegion() mySignalHistograms = self._mySystObject.getHistogramsForSignalRegion() myMinIndex = 0 if myCtrlHistograms[0] == None: myMinIndex = 1 # Skip empty first bin for i in range(myMinIndex, nSplitBins): plot = plots.ComparisonPlot(histograms.Histo(mySignalHistograms[i].Clone(), "Signal region", drawStyle="E"), histograms.Histo(myCtrlHistograms[i].Clone(), "Ctrl. region", drawStyle="E")) plot.createFrame("%s/Systematics_%s/QCDInvertedShapeWithMetSyst_%s_%s"%(self._myDir, self._systName, self._myCtrlRegion.getPhaseSpaceBinFileFriendlyTitle(i), self._moduleInfoString), createRatio=True, opts2={"ymin": 0, "ymax": 2}, opts={"addMCUncertainty": True, "ymin": -0.05, "ymax": 0.3}) plot.frame.GetXaxis().SetTitle(self._histoSpecs["xtitle"]) plot.frame.GetYaxis().SetTitle("Arb. units. (Normalised to 1)") styles.mcStyle(plot.histoMgr.getHisto("Ctrl. region")) styles.dataStyle(plot.histoMgr.getHisto("Signal region")) plot.setLegend(histograms.createLegend(0.59, 0.77, 0.87, 0.90)) plot.legend.SetFillColor(0) plot.legend.SetFillStyle(1001) #plot.histoMgr.getHisto("Up").getRootHisto().SetMarkerSize(0) self._drawPlot(plot) print "Saved MET shape systematics plot for bin %s"%self._myCtrlRegion.getPhaseSpaceBinFileFriendlyTitle(i)
def transverseMass(h, rebin=20): name = flipName(h.getRootHistoPath()) particle = "" if "Original" in name: particle = "#mu" name = name.replace("TransverseMass", "Mt") else: particle = "#tau jet" name = name.replace("TransverseMass", "Mt") h.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin)) xlabel = "m_{T}(%s, MET) (GeV/c^{2})" % particle ylabel = "Events / %.2f GeV/c^{2}" % h.binWidth() scaleMCfromWmunu(h) h.stackMCSignalHistograms() h.stackMCHistograms(stackSignal=False)#stackSignal=True) h.addMCUncertainty() opts = {"xmax": 200} #h.createFrameFraction(name, opts=opts) h.createFrame(name, opts=opts) h.setLegend(histograms.createLegend()) common(h, xlabel, ylabel)
def rtauGen(h, name, rebin=2, ratio=False, defaultStyles=True): if defaultStyles: h.setDefaultStyles() h.histoMgr.forEachHisto(styles.generator()) h.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin)) xlabel = "PF E_{T}^{miss} (GeV)" ylabel = "Events / %.2f" % h.binWidth() if "LeptonsInMt" in name: xlabel = "m_{T}(#tau jet, E_{T}^{miss}) (GeV/c^{2})" ylabel = "Events / %.0f GeV/c^{2}" % h.binWidth() if "NoLeptonsRealTau" in name: xlabel = "m_{T}(#tau jet, E_{T}^{miss}) (GeV/c^{2})" ylabel = "Events / %.0f GeV/c^{2}" % h.binWidth() if "Mass" in name: xlabel = "m_{T}(#tau jet, E_{T}^{miss}) (GeV/c^{2})" ylabel = "Events / %.0f GeV/c^{2}" % h.binWidth() kwargs = {"ymin": 0.1, "ymax": 1000} if "LeptonsInMt" in name: kwargs = {"ymin": 0., "xmax": 300} if "NoLeptonsRealTau" in name: kwargs = {"ymin": 0., "xmax": 300} if "Rtau" in name: kwargs = {"ymin": 0.0001, "xmax": 1.1} kwargs = {"ymin": 0.1, "xmax": 1.1} h.getPad().SetLogy(True) # kwargs["opts"] = {"ymin": 0, "xmax": 14, "ymaxfactor": 1.1}} if ratio: kwargs["opts2"] = {"ymin": 0.5, "ymax": 1.5} kwargs["createRatio"] = True # name = name+"_log" h.createFrame(name, **kwargs) # histograms.addText(0.65, 0.7, "BR(t #rightarrow bH^{#pm})=0.05", 20) h.getPad().SetLogy(True) leg = histograms.createLegend(0.6, 0.75, 0.8, 0.9) if "LeptonsInMt" in name: h.getPad().SetLogy(False) leg = histograms.moveLegend(leg, dx=-0.18) histograms.addText(0.5, 0.65, "TailKiller cut: Tight", 20) h.setLegend(leg) plots._legendLabels["MetNoJetInHole"] = "Jets outside dead cells" plots._legendLabels["MetJetInHole"] = "Jets within dead cells" histograms.addText(300, 300, "p_{T}^{jet} > 50 GeV/c", 20) kwargs["opts2"] = {"ymin": 0.5, "ymax": 1.5} kwargs["createRatio"] = True # if ratio: # h.createFrameFraction(name, opts=opts, opts2=opts2) # h.setLegend(leg) common(h, xlabel, ylabel)
def transverseMass(h, rebin=20): name = flipName(h.getRootHistoPath()) particle = "" if "Original" in name: particle = "#mu" name = name.replace("TransverseMass", "Mt") else: particle = "#tau jet" name = name.replace("TransverseMass", "Mt") h.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin)) xlabel = "m_{T}(%s, MET) (GeV/c^{2})" % particle ylabel = "Events / %.2f GeV/c^{2}" % h.binWidth() scaleMCfromWmunu(h) h.stackMCSignalHistograms() h.stackMCHistograms(stackSignal=False) #stackSignal=True) h.addMCUncertainty() opts = {"xmax": 200} #h.createFrameFraction(name, opts=opts) h.createFrame(name, opts=opts) h.setLegend(histograms.createLegend()) common(h, xlabel, ylabel)
def main(): if len(sys.argv) < 2: usage() paths = [sys.argv[1]] analysis = "Hplus2tbAnalysis" hName = "associatedTPt" plotname = analysis + "_" + hName datasetsHiggs = dataset.getDatasetsFromMulticrabDirs( paths, analysisName=analysis, includeOnlyTasks="ChargedHiggs_HplusTB_HplusToTauB_M_") datasetsTT = dataset.getDatasetsFromMulticrabDirs(paths, analysisName=analysis, includeOnlyTasks="TT") datasetsTT.merge("MC", ["TT", "TT_ext"], keepSources=True) style = tdrstyle.TDRStyle() dataset1 = datasetsHiggs.getDataset( "ChargedHiggs_HplusTB_HplusToTauB_M_200").getDatasetRootHisto(hName) dataset2 = datasetsTT.getDataset("MC").getDatasetRootHisto(hName) # dataset1.normalizeToOne() dataset2.normalizeToOne() histo1 = dataset1.getHistogram() histo1.SetMarkerColor(2) histo1.SetMarkerStyle(20) removeNegatives(histo1) histo1.Scale(1. / histo1.Integral()) histo2 = dataset2.getHistogram() histo2.SetMarkerColor(4) histo2.SetMarkerStyle(21) p = plots.ComparisonPlot( histograms.Histo(histo1, "m_{H^{#pm}} = 200 GeV/c^{2}", "p", "P"), histograms.Histo(histo2, "t#bar{t}", "p", "P")) opts = {"ymin": 0, "ymax": 0.2} opts2 = {"ymin": 0.5, "ymax": 1.5} p.createFrame(os.path.join(plotDir, plotname), createRatio=True, opts=opts, opts2=opts2) moveLegend = {"dx": -0.2, "dy": -0.1, "dh": -0.1} p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) p.getFrame().GetYaxis().SetTitle("Arbitrary units") p.getFrame().GetXaxis().SetTitle("Top p_{T} (GeV/c)") p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) p.draw() if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats)
def doPlot(mass, name, nuisance, thetas): f = ROOT.TFile.Open("lands_histograms_hplushadronic_m%d.root" % mass) h = f.Get(name) hUp = f.Get("%s_%dUp" % (name, nuisance)) hDown = f.Get("%s_%dDown" % (name, nuisance)) shapes = [] ll = {} for i, theta in enumerate(thetas): morphed = doShape(h, hUp, hDown, theta) shapes.append(histograms.Histo(morphed, "Theta%d" % i, drawStyle="HIST", legendStyle="l")) ll["Theta%d" % i] = "#theta=%.2f (%.1f)" % (theta, _integral(morphed)) plot = plots.PlotBase(shapes) plot.histoMgr.forEachHisto(styles.generator()) plot.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetLineWidth(3)) plot.histoMgr.setHistoLegendLabelMany(ll) plot.setLegend(histograms.createLegend()) plot.createFrame("shape_theta_%s_syst%d_m%d" % (name, nuisance, mass)) plot.frame.GetXaxis().SetTitle("m_{T} (GeV)") plot.frame.GetYaxis().SetTitle("Rate") plot.draw() x = 0.6 size = 20 histograms.addText(x, 0.70, "Sample %s" % name, size=size) histograms.addText(x, 0.65, "Nuisance %d" % nuisance, size=size) histograms.addText(x, 0.60, "m_{H^{+}}=%d GeV" % mass, size=size) plot.save() f.Close()
def doPlotMu(name, graphs, styleList, limits, xlabel): objs = [] ll = {} for gr, mu in graphs: objs.append(histograms.HistoGraph(gr, "Obs%d"%mu, drawStyle="LP", legendStyle="lp")) ll["Obs%d"%mu] = "Observed, #mu=%d %s" % (mu, limit.massUnit()) plot = plots.PlotBase(objs) plot.histoMgr.forEachHisto(styles.Generator(styleList)) plot.histoMgr.setHistoLegendLabelMany(ll) plot.setLegend(histograms.moveLegend(histograms.createLegend(0.57, 0.155, 0.87, 0.355), dx=-0.1)) plot.createFrame(name, opts={"ymin": 0, "ymax": tanbMax}) plot.frame.GetXaxis().SetTitle(xlabel) plot.frame.GetYaxis().SetTitle(limit.tanblimit) plot.draw() plot.setLuminosity(limits.getLuminosity()) plot.addStandardTexts() size = 20 x = 0.2 histograms.addText(x, 0.9, limit.process, size=size) histograms.addText(x, 0.863, limits.getFinalstateText(), size=size) histograms.addText(x, 0.815, "MSSM m_{h}^{max}", size=size) histograms.addText(x, 0.775, limit.BRassumption, size=size) plot.save()
def getLegend(opts, dx=0, dy=0): # Create customised legend xLeg1 = 0.72 + dx xLeg2 = xLeg1 + 0.2 yLeg1 = 0.82 + dy yLeg2 = 0.92 # Adjust legend slightly to visually align with text legend = histograms.createLegend(xLeg1 * .98, yLeg1, xLeg2, yLeg2) legend.SetMargin(0.17) return legend
def drawPlot(h, name, xlabel, ylabel="Events / %.0f GeV/c", rebin=1, log=True, addMCUncertainty=True, ratio=False, opts={}, opts2={}, moveLegend={}, textFunction=None, cutLine=None, cutBox=None): if cutLine != None and cutBox != None: raise Exception("Both cutLine and cutBox were given, only either one can exist") if rebin > 1: h.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin)) ylab = ylabel if "%" in ylabel: ylab = ylabel % h.binWidth() scaleMCfromWmunu(h) # h.stackMCSignalHistograms() h.stackMCHistograms(stackSignal=True)#stackSignal=True) # h.stackMCHistograms() if addMCUncertainty: h.addMCUncertainty() _opts = {"ymin": 0.01, "ymaxfactor": 2} if not log: _opts["ymin"] = 0 _opts["ymaxfactor"] = 1.1 ## _opts2 = {"ymin": 0.5, "ymax": 1.5} _opts2 = {"ymin": 0.0, "ymax": 2.0} _opts.update(opts) _opts2.update(opts2) #if log: # name = name + "_log" h.createFrame(name, createRatio=ratio, opts=_opts, opts2=_opts2) if log: h.getPad().SetLogy(log) h.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) # Add cut line and/or box if cutLine != None: lst = cutLine if not isinstance(lst, list): lst = [lst] for line in lst: h.addCutBoxAndLine(line, box=False, line=True) if cutBox != None: lst = cutBox if not isinstance(lst, list): lst = [lst] for box in lst: h.addCutBoxAndLine(**box) common(h, xlabel, ylab, textFunction=textFunction)
def drawPlot(h, name, xlabel, ylabel="Events / %.0f GeV/c", rebin=1, log=True, addMCUncertainty=True, ratio=False, opts={}, opts2={}, moveLegend={}, textFunction=None, cutLine=None, cutBox=None): if cutLine != None and cutBox != None: raise Exception("Both cutLine and cutBox were given, only either one can exist") if rebin > 1: h.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin)) ylab = ylabel if "%" in ylabel: ylab = ylabel % h.binWidth() # scaleMCfromWmunu(h) # h.stackMCSignalHistograms() h.stackMCHistograms(stackSignal=True)#stackSignal=True) # h.stackMCHistograms() if addMCUncertainty: h.addMCUncertainty() _opts = {"ymin": 0.01, "ymaxfactor": 2} if not log: _opts["ymin"] = 0 _opts["ymaxfactor"] = 1.1 ## _opts2 = {"ymin": 0.5, "ymax": 1.5} _opts2 = {"ymin": 0.0, "ymax": 2.0} _opts.update(opts) _opts2.update(opts2) #if log: # name = name + "_log" h.createFrame(name, createRatio=ratio, opts=_opts, opts2=_opts2) if log: h.getPad().SetLogy(log) h.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) # Add cut line and/or box if cutLine != None: lst = cutLine if not isinstance(lst, list): lst = [lst] for line in lst: h.addCutBoxAndLine(line, box=False, line=True) if cutBox != None: lst = cutBox if not isinstance(lst, list): lst = [lst] for box in lst: h.addCutBoxAndLine(**box) common(h, xlabel, ylab, textFunction=textFunction)
def main(): if len(sys.argv) < 2: usage() paths = [sys.argv[1]] analysis = "Hplus2tbAnalysis" hName = "associatedTPt" plotname = analysis+"_"+hName datasetsHiggs = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="ChargedHiggs_HplusTB_HplusToTauB_M_") datasetsTT = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="TT") datasetsTT.merge("MC", ["TT","TT_ext"], keepSources=True) style = tdrstyle.TDRStyle() dataset1 = datasetsHiggs.getDataset("ChargedHiggs_HplusTB_HplusToTauB_M_200").getDatasetRootHisto(hName) dataset2 = datasetsTT.getDataset("MC").getDatasetRootHisto(hName) # dataset1.normalizeToOne() dataset2.normalizeToOne() histo1 = dataset1.getHistogram() histo1.SetMarkerColor(2) histo1.SetMarkerStyle(20) removeNegatives(histo1) histo1.Scale(1./histo1.Integral()) histo2 = dataset2.getHistogram() histo2.SetMarkerColor(4) histo2.SetMarkerStyle(21) p = plots.ComparisonPlot(histograms.Histo(histo1, "m_{H^{#pm}} = 200 GeV/c^{2}", "p", "P"), histograms.Histo(histo2, "t#bar{t}", "p", "P")) opts = {"ymin": 0, "ymax": 0.2} opts2 = {"ymin": 0.5, "ymax": 1.5} p.createFrame(os.path.join(plotDir, plotname), createRatio=True, opts=opts, opts2=opts2) moveLegend = {"dx": -0.2, "dy": -0.1, "dh": -0.1} p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) p.getFrame().GetYaxis().SetTitle("Arbitrary units") p.getFrame().GetXaxis().SetTitle("Top p_{T} (GeV/c)") p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) p.draw() if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats)
def getLegend(nPlots, limit, opts, xLeg1): dy = (nPlots - 3) * 0.15 # Create customised legend xLeg2 = 0.93 yLeg1 = 0.66 - dy yLeg2 = 0.82 # Adjust legend slightly to visually align with text legend = histograms.createLegend(xLeg1 * .98, yLeg1, xLeg2, yLeg2) legend.SetMargin(0.17) # Make room for the final state text if 0: #opts.excludedArea: legend.SetFillStyle(1001) return legend
def getLegend(opts, xLeg1=0.53): dy = -0.10 # Create customised legend #xLeg1 = 0.53 xLeg2 = 0.93 yLeg1 = 0.78 + dy yLeg2 = 0.91 + dy # Adjust legend slightly to visually align with text legend = histograms.createLegend(xLeg1 * .98, yLeg1, xLeg2, yLeg2) legend.SetMargin(0.17) # Make room for the final state text # legend.SetFillStyle(1001) #legend.SetFillStyle(3001) return legend
def getLegend(opts, xLeg1=0.53): dy = -0.10 # Create customised legend #xLeg1 = 0.53 xLeg2 = 0.93 yLeg1 = 0.78 + dy yLeg2 = 0.91 + dy # Adjust legend slightly to visually align with text legend = histograms.createLegend(xLeg1*.98, yLeg1, xLeg2, yLeg2) legend.SetMargin(0.17) # Make room for the final state text # legend.SetFillStyle(1001) #legend.SetFillStyle(3001) return legend
def plotClosure(mt_nom, mts_var, name, optMode): #for mt_var in mts_var: # printSummedDifference(mt_nom, mt_var) style = tdrstyle.TDRStyle() plot = plots.ComparisonManyPlot(mt_nom, mts_var) plot.createFrame(optMode.replace("Opt","mT_Closure_"+ name +"_"), createRatio=True) moveLegend={"dx": -0.325,"dy": 0.02,"dw":-0.14,"dh":-0.12} plot.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) histograms.addText(0.65, 0.3, optMode.replace("OptQCDTailKiller","R_{BB} ").replace("Plus",""), 25) histograms.addStandardTexts() plot.draw() plot.save()
def doPlot2(limits, legendLabels, name): graphs = [ histograms.HistoGraph(limits[0].expectedGraph(), "Expected", drawStyle="L"), histograms.HistoGraph(limits[0].expectedBandGraph(sigma=1), "Expected1", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(limits[0].expectedBandGraph(sigma=2), "Expected2", drawStyle="F", legendStyle="fl"), ] graphs[0].getRootHisto().SetLineStyle(1) plot = plots.PlotBase(graphs) ll = { "Expected": None, "Expected1": "%s exp. median #pm 1#sigma" % legendLabels[0], "Expected2": "%s exp. median #pm 2#sigma" % legendLabels[0], } stGen = styles.generator() for i in xrange(1, len(limits)): gr = histograms.HistoGraph(limits[i].expectedGraph(), "Exp%d"%i, drawStyle="L") stGen(gr) gr.getRootHisto().SetLineWidth(3) gr.getRootHisto().SetLineStyle(1) plot.histoMgr.insertHisto(len(plot.histoMgr)-2, gr, legendIndex=len(plot.histoMgr)) ll["Exp%d"%i] = "%s exp. median" % legendLabels[i] plot.histoMgr.setHistoLegendLabelMany(ll) legend = histograms.moveLegend(histograms.createLegend(0.48, 0.75, 0.85, 0.92), dx=-0.02) if len(limits[0].getFinalstates()) > 1: legend = histograms.moveLegend(legend, dy=-0.1) plot.setLegend(legend) plot.createFrame(name+"_limits", opts={"ymin": 0, "ymax": limits[0].getFinalstateYmaxBR()}) plot.frame.GetXaxis().SetTitle(limit.mHplus()) plot.frame.GetYaxis().SetTitle(limit.BRlimit) plot.draw() plot.setLuminosity(limits[0].getLuminosity()) plot.addStandardTexts(cmsTextPosition="outframe") size = 20 x = 0.2 histograms.addText(x, 0.88, limit.process, size=size) histograms.addText(x, 0.84, limits[0].getFinalstateText(), size=size) histograms.addText(x, 0.79, limit.BRassumption, size=size) plot.save()
def doPlot(limits, legendLabels, graphs, name, ylabel, opts={}, plotLabel=None, moveLegend={}, log=False): hg = [] ll = {} for i in xrange(len(graphs)): hg.append(histograms.HistoGraph(graphs[i], "Graph%d"%i, drawStyle="PL", legendStyle="lp")) ll["Graph%d"%i] = legendLabels[i] plot = plots.PlotBase(hg) plot.histoMgr.forEachHisto(styles.Generator(styleList[0:len(limits)])) def sty(h): r = h.getRootHisto() r.SetLineWidth(3) r.SetLineStyle(1) plot.histoMgr.forEachHisto(sty) plot.histoMgr.setHistoLegendLabelMany(ll) legend = histograms.createLegend(0.48, 0.65, 0.85, 0.92) if len(limits[0].getFinalstates()) > 1: legend = histograms.moveLegend(legend, dy=-0.1) if plotLabel: legend = histograms.moveLegend(legend, dy=-0.04) legend = histograms.moveLegend(legend, **moveLegend) plot.setLegend(legend) opts_ = {"ymin": 0} opts_.update(opts) plot.createFrame(name, opts=opts_) plot.frame.GetXaxis().SetTitle(limit.mHplus()) plot.frame.GetYaxis().SetTitle(ylabel) ROOT.gPad.SetLogy(log) plot.draw() plot.setLuminosity(limits[0].getLuminosity()) plot.addStandardTexts(cmsTextPosition="outframe") size = 20 x = 0.18 histograms.addText(x, 0.88, limit.process, size=size) histograms.addText(x, 0.84, limits[0].getFinalstateText(), size=size) histograms.addText(x, 0.79, limit.BRassumption, size=size) if plotLabel: histograms.addText(legend.GetX1()+0.01, legend.GetY2(), plotLabel, size=size) plot.save()
def getLegend(limit, opts, xLeg1=0.53): dy = -0.10 if limit.BRassumption != "": dy -= 0.05 # Create customised legend #xLeg1 = 0.53 xLeg2 = 0.93 yLeg1 = 0.78 + dy yLeg2 = 0.91 + dy if opts.unblinded: yLeg2 = 0.92 + dy # Adjust legend slightly to visually align with text legend = histograms.createLegend(xLeg1 * .98, yLeg1, xLeg2, yLeg2) legend.SetMargin(0.17) # Make room for the final state text if opts.excludedArea: legend.SetFillStyle(1001) #legend.SetFillStyle(3001) return legend
def plotClosure(mt_nom, mts_var, name, optMode): #for mt_var in mts_var: # printSummedDifference(mt_nom, mt_var) style = tdrstyle.TDRStyle() plot = plots.ComparisonManyPlot(mt_nom, mts_var) plot.createFrame(optMode.replace("Opt", "mT_Closure_" + name + "_"), createRatio=True) moveLegend = {"dx": -0.325, "dy": 0.02, "dw": -0.14, "dh": -0.12} plot.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) histograms.addText( 0.65, 0.3, optMode.replace("OptQCDTailKiller", "R_{BB} ").replace("Plus", ""), 25) histograms.addStandardTexts() plot.draw() plot.save()
def getLegend(limit, opts, xLeg1=0.53): dy = -0.10 if limit.BRassumption != "": dy -= 0.05 # Create customised legend #xLeg1 = 0.53 xLeg2 = 0.93 yLeg1 = 0.70 + dy yLeg2 = 0.91 + dy if opts.unblinded: yLeg2 = 0.92 + dy # Adjust legend slightly to visually align with text legend = histograms.createLegend(xLeg1*.98, yLeg1, xLeg2, yLeg2) legend.SetMargin(0.17) # Make room for the final state text if opts.excludedArea: legend.SetFillStyle(1001) #legend.SetFillStyle(3001) return legend
def doPlot(mass, name, nuisance, thetas): f = ROOT.TFile.Open("lands_histograms_hplushadronic_m%d.root" % mass) h = f.Get(name) hUp = f.Get("%s_%dUp" % (name, nuisance)) hDown = f.Get("%s_%dDown" % (name, nuisance)) shapes = [] ll = {} for i, theta in enumerate(thetas): morphed = doShape(h, hUp, hDown, theta) shapes.append( histograms.Histo(morphed, "Theta%d" % i, drawStyle="HIST", legendStyle="l")) ll["Theta%d" % i] = "#theta=%.2f (%.1f)" % (theta, _integral(morphed)) plot = plots.PlotBase(shapes) plot.histoMgr.forEachHisto(styles.generator()) plot.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetLineWidth(3)) plot.histoMgr.setHistoLegendLabelMany(ll) plot.setLegend(histograms.createLegend()) plot.createFrame("shape_theta_%s_syst%d_m%d" % (name, nuisance, mass)) plot.frame.GetXaxis().SetTitle("m_{T} (GeV)") plot.frame.GetYaxis().SetTitle("Rate") plot.draw() x = 0.6 size = 20 histograms.addText(x, 0.70, "Sample %s" % name, size=size) histograms.addText(x, 0.65, "Nuisance %d" % nuisance, size=size) histograms.addText(x, 0.60, "m_{H^{+}}=%d GeV" % mass, size=size) plot.save() f.Close()
def doPlotMu(name, graphs, styleList, limits, xlabel): objs = [] ll = {} for gr, mu in graphs: objs.append( histograms.HistoGraph(gr, "Obs%d" % mu, drawStyle="LP", legendStyle="lp")) ll["Obs%d" % mu] = "Observed, #mu=%d %s" % (mu, limit.massUnit()) plot = plots.PlotBase(objs) plot.histoMgr.forEachHisto(styles.Generator(styleList)) plot.histoMgr.setHistoLegendLabelMany(ll) plot.setLegend( histograms.moveLegend(histograms.createLegend(0.57, 0.155, 0.87, 0.355), dx=-0.1)) plot.createFrame(name, opts={"ymin": 0, "ymax": tanbMax}) plot.frame.GetXaxis().SetTitle(xlabel) plot.frame.GetYaxis().SetTitle(limit.tanblimit) plot.draw() plot.setLuminosity(limits.getLuminosity()) plot.addStandardTexts() size = 20 x = 0.2 histograms.addText(x, 0.9, limit.process, size=size) histograms.addText(x, 0.863, limits.getFinalstateText(), size=size) histograms.addText(x, 0.815, "MSSM m_{h}^{max}", size=size) histograms.addText(x, 0.775, limit.BRassumption, size=size) plot.save()
def doLimitError(limits, unblindedStatus): expRelErrors = [] expLabels = {} obsRelErrors = [] obsLabels = {} order = [0, 1, -1, 2, -2] expErrors = [limits.expectedErrorGraph(sigma=s) for s in order] if expErrors[0] != None: exps = [limits.expectedGraph(sigma=s) for s in order] expRelErrors = [(limit.divideGraph(expErrors[i], exps[i]), "ExpRelErr%d"%i) for i in xrange(len(exps))] expLabels = { "ExpRelErr0": "Expected median", "ExpRelErr1": "Expected +1#sigma", "ExpRelErr2": "Expected -1#sigma", "ExpRelErr3": "Expected +2#sigma", "ExpRelErr4": "Expected -2#sigma", } if unblindedStatus: obsErr = limits.observedErrorGraph() if obsErr != None: obs = limits.observedGraph() if obs != None: obsRelErrors = [(limit.divideGraph(obsErr, obs), "ObsRelErr")] obsLabels = {"ObsRelErr": "Observed"} if len(expRelErrors) == 0 and len(obsRelErrors) == 0: return # Create the plot plot = plots.PlotBase() if len(expRelErrors) > 0: plot.histoMgr.extendHistos([histograms.HistoGraph(x[0], x[1], drawStyle="PL", legendStyle="lp") for x in expRelErrors]) plot.histoMgr.forEachHisto(styles.generator()) def sty(h): r = h.getRootHisto() r.SetLineStyle(1) r.SetLineWidth(3) r.SetMarkerSize(1.4) plot.histoMgr.forEachHisto(sty) plot.histoMgr.setHistoLegendLabelMany(expLabels) if unblindedStatus: if len(obsRelErrors) > 0: obsRelErrors[0][0].SetMarkerSize(1.4) obsRelErrors[0][0].SetMarkerStyle(25) plot.histoMgr.insertHisto(0, histograms.HistoGraph(obsRelErrors[0][0], obsRelErrors[0][1], drawStyle="PL", legendStyle="lp")) plot.histoMgr.setHistoLegendLabelMany(obsLabels) plot.setLegend(histograms.moveLegend(histograms.createLegend(0.48, 0.75, 0.85, 0.92), dx=0.1, dy=-0.1)) if len(limits.mass) == 1: plot.createFrame("limitsBrRelativeUncertainty", opts={"xmin": limits.mass[0]-5.0, "xmax": limits.mass[0]+5.0, "ymin": 0, "ymaxfactor": 1.5}) else: plot.createFrame("limitsBrRelativeUncertainty", opts={"ymin": 0, "ymaxfactor": 1.5}) plot.frame.GetXaxis().SetTitle(limit.mHplus()) plot.frame.GetYaxis().SetTitle("Uncertainty/limit") plot.draw() plot.setLuminosity(limits.getLuminosity()) plot.addStandardTexts() size = 20 x = 0.2 histograms.addText(x, 0.88, limit.process, size=size) histograms.addText(x, 0.84, limits.getFinalstateText(), size=size) histograms.addText(x, 0.79, limit.BRassumption, size=size) size = 22 x = 0.55 histograms.addText(x, 0.88, "Toy MC relative", size=size) histograms.addText(x, 0.84, "statistical uncertainty", size=size) plot.save()
def main(opts): style = tdrstyle.TDRStyle() #style.setWide(True) style.setPaletteMy() ROOT.gStyle.SetNumberContours(20) # tdrstyle.setDeepSeaPalette() # tdrstyle.setRainBowPalette() # tdrstyle.setDarkBodyRadiatorPalette() # tdrstyle.setGreyScalePalette() # tdrstyle.setTwoColorHuePalette() # Set ROOT batch mode boolean ROOT.gROOT.SetBatch(opts.batchMode) # ======================================== # Datasets # ======================================== # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts.mcrab, opts, **kwargs) intLumi = GetLumi(datasetsMgr) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.PrintCrossSections() #datasetsMgr.PrintLuminosities() # Set/Overwrite cross-sections for d in datasetsMgr.getAllDatasets(): if "ChargedHiggs" in d.getName(): datasetsMgr.getDataset(d.getName()).setCrossSection(1.0) # Merge datasts (Note: Merged MC histograms must be normalized to something) plots.mergeRenameReorderForDataMC(datasetsMgr) # Remove datasets if 0: datasetsMgr.remove("TTJets") datasetsMgr.remove(filter(lambda name: not "QCD" in name, datasetsMgr.getAllDatasetNames())) # Print dataset information datasetsMgr.PrintInfo() # For-loop: All Histogram names for counter, hName in enumerate(hNames): savePath, saveName = GetSavePathAndName(hName, **kwargs) # Get Histos for Plotter refHisto, otherHistos = GetHistosForPlotter(datasetsMgr, hName, **kwargs) # Create a plot p = plots.PlotBase([refHisto], kwargs.get("saveFormats")) # Remove negative contributions #RemoveNegativeBins(datasetsMgr, hName, p) # Customize # p.histoMgr.setHistoDrawStyleAll("COL") #"CONT4" "COLZ" "COL" p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinX(kwargs.get("rebinX"))) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinY(kwargs.get("rebinY"))) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetXaxis().SetRangeUser(1.0, 5.0)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetYaxis().SetRangeUser(1.0, 5.0)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetZaxis().SetRangeUser(0.0, 0.015)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMinimum(kwargs.get("zMin"))) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMaximum(kwargs.get("zMax"))) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinX(2)) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinY(2)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMinimum(0.0015)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMaximum(0.0045)) # Create a frame opts = {"ymin": 0.0, "ymaxfactor": 1.0} p.createFrame(saveName, opts=opts) # Customise frame p.getFrame().GetXaxis().SetTitle( getTitleX(refHisto, **kwargs) ) #p.getFrame().GetYaxis().SetTitle( getTitleY(refHisto, **kwargs) ) # SetLog SetLogAndGrid(p, **kwargs) # Add cut line/box _kwargs = { "lessThan": kwargs.get("cutLessThan")} p.addCutBoxAndLine(cutValue=kwargs.get("cutValue"), fillColor=kwargs.get("cutFillColour"), box=kwargs.get("cutBox"), line=kwargs.get("cutLine"), **_kwargs) # Customise Legend moveLegend = {"dx": -0.1, "dy": +0.0, "dh": -0.1} p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) p.removeLegend() # Add MC Uncertainty (Invalid method for a 2-d histogram) #p.addMCUncertainty() # Draw plots p.draw() # Customise text histograms.addStandardTexts(lumi=intLumi) # histograms.addText(0.17, 0.95, plots._legendLabels[kwargs.get("refDataset")], 22) histograms.addText(0.17, 0.88, plots._legendLabels[kwargs.get("refDataset")], 17) # Save canvas under custom dir SaveAs(p, savePath, saveName, kwargs.get("saveFormats"), counter==0) return
def main(): if len(sys.argv) < 2: usage() paths = [sys.argv[1]] analysis = "METLeg_2015D_MET80" # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis) # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="Tau\S+25ns$|TTJets$") datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,excludeTasks="Tau_Run2015C|Tau\S+25ns_Silver$|DYJetsToLL|WJetsToLNu$") # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="Tau_Run2015D_PromptReco_v4_246908_260426_25ns$|DYJetsToLL_M_50$") for d in datasets.getAllDatasets(): print d.getName() style = tdrstyle.TDRStyle() dataset1 = datasets.getDataDatasets() dataset2 = datasets.getMCDatasets() eff1_MET80 = getEfficiency(dataset1) eff2_MET80 = getEfficiency(dataset2) styles.dataStyle.apply(eff1_MET80) styles.mcStyle.apply(eff2_MET80) eff1_MET80.SetMarkerSize(1) eff2_MET80.SetMarkerSize(1.5) p = plots.ComparisonPlot(histograms.HistoGraph(eff1_MET80, "eff1_MET80", "p", "P"), histograms.HistoGraph(eff2_MET80, "eff2_MET80", "p", "P")) opts = {"ymin": 0, "ymax": 1.1} opts2 = {"ymin": 0.5, "ymax": 1.5} moveLegend = {"dx": -0.55, "dy": -0.15} name = "TauMET_"+analysis+"_DataVsMC_PFMET" legend1 = "Data" # legend2 = "MC (TTJets)" legend2 = "MC" p.histoMgr.setHistoLegendLabelMany({"eff1_MET80": legend1, "eff2_MET80": legend2}) p.createFrame(os.path.join(plotDir, name), createRatio=True, opts=opts, opts2=opts2) p.setLegend(histograms.moveLegend(histograms.createLegend(y1=0.8), **moveLegend)) p.getFrame().GetYaxis().SetTitle("L1+HLT MET efficiency") p.getFrame().GetXaxis().SetTitle("MET Type 1 (GeV)") p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.2, 0.6, "LooseIsoPFTau50_Trk30_eta2p1_MET80", 17) # histograms.addText(0.2, 0.53, analysis.split("_")[len(analysis.split("_")) -1], 17) label = analysis.split("_")[1] histograms.addText(0.2, 0.53, label, 17) runRange = datasets.loadRunRange() histograms.addText(0.2, 0.46, "Runs "+runRange, 17) p.draw() lumi = 0.0 for d in datasets.getDataDatasets(): print "luminosity",d.getName(),d.getLuminosity() lumi += d.getLuminosity() print "luminosity, sum",lumi histograms.addStandardTexts(lumi=lumi) if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats) pythonWriter.addParameters(plotDir,label,runRange,lumi,eff1_MET80) pythonWriter.addMCParameters(label,eff2_MET80) pythonWriter.writeJSON(os.path.join(plotDir,"metLegTriggerEfficiency2015.json")) """ #### MET120 analysis = "METLeg_2015CD_MET120" datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis) for d in datasets.getAllDatasets(): print d.getName() style = tdrstyle.TDRStyle() dataset1 = datasets.getDataDatasets() dataset2 = datasets.getMCDatasets() eff1_MET120 = getEfficiency(dataset1) eff2_MET120 = getEfficiency(dataset2) styles.dataStyle.apply(eff1_MET120) styles.mcStyle.apply(eff2_MET120) eff1_MET120.SetMarkerSize(1) eff2_MET120.SetMarkerSize(1.5) p = plots.ComparisonPlot(histograms.HistoGraph(eff1_MET120, "eff1_MET120", "p", "P"), histograms.HistoGraph(eff2_MET120, "eff2_MET120", "p", "P")) opts = {"ymin": 0, "ymax": 1.1} opts2 = {"ymin": 0.5, "ymax": 1.5} moveLegend = {"dx": -0.55, "dy": -0.15} name = "DataVsMC_L1HLTMET_PFMET_MET120" legend1 = "Data" legend2 = "MC" p.histoMgr.setHistoLegendLabelMany({"eff1_MET120": legend1, "eff2_MET120": legend2}) p.createFrame(os.path.join(plotDir, name), createRatio=True, opts=opts, opts2=opts2) p.setLegend(histograms.moveLegend(histograms.createLegend(y1=0.8), **moveLegend)) p.getFrame().GetYaxis().SetTitle("L1+HLT MET efficiency") p.getFrame().GetXaxis().SetTitle("MET Type 1 (GeV)") p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) p.draw() lumi = 0.0 histograms.addStandardTexts(lumi=lumi) if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats) """ # CaloMET #### MET80 analysisc = "METLeg_2015D_CaloMET_MET80" datasetsc = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysisc) datasetsc = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysisc,excludeTasks="Tau\S+25ns_Silver$") # datasetsc = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysisc,includeOnlyTasks="Tau\S+25ns$|TTJets$") style = tdrstyle.TDRStyle() dataset1c = datasetsc.getDataDatasets() dataset2c = datasetsc.getMCDatasets() # eff1c_MET80 = getEfficiency(dataset1c) eff2c_MET80 = getEfficiency(dataset2c) # styles.dataStyle.apply(eff1c_MET80) styles.mcStyle.apply(eff2c_MET80) # eff1c_MET80.SetMarkerSize(1) eff2c_MET80.SetMarkerSize(1.5) eff2c_MET80.SetMarkerColor(4) p = plots.ComparisonPlot(histograms.HistoGraph(eff2_MET80, "eff2_MET80", "p", "P"), histograms.HistoGraph(eff2c_MET80, "eff2c_MET80", "p", "P")) namec = "TauMET_"+analysis+"_MC_TrgBitVsCaloMET80_PFMET" legend1c = "MC, trigger bit" legend2c = "MC, CaloMET > 80" p.histoMgr.setHistoLegendLabelMany({"eff2_MET80": legend1c, "eff2c_MET80": legend2c}) p.createFrame(os.path.join(plotDir, namec), createRatio=True, opts=opts, opts2=opts2) p.setLegend(histograms.moveLegend(histograms.createLegend(y1=0.8), **moveLegend)) p.getFrame().GetYaxis().SetTitle("L1+HLT MET efficiency") p.getFrame().GetXaxis().SetTitle("MET Type 1 (GeV)") p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) p.draw() lumi = 0.0 for d in datasets.getDataDatasets(): print "luminosity",d.getName(),d.getLuminosity() lumi += d.getLuminosity() print "luminosity, sum",lumi histograms.addStandardTexts(lumi=lumi) histograms.addText(0.2, 0.6, "LooseIsoPFTau50_Trk30_eta2p1_MET80", 17) if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats) """ #### MET120 analysisc = "METLeg_2015A_CaloMET_MET120" datasetsc = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysisc) style = tdrstyle.TDRStyle() dataset1c = datasetsc.getDataDatasets() dataset2c = datasetsc.getMCDatasets() eff1c_MET120 = getEfficiency(dataset1c) eff2c_MET120 = getEfficiency(dataset2c) styles.dataStyle.apply(eff1c_MET120) styles.mcStyle.apply(eff1c_MET120) eff1c_MET120.SetMarkerSize(1) eff2c_MET120.SetMarkerSize(1.5) p = plots.ComparisonPlot(histograms.HistoGraph(eff2_MET120, "eff2_MET120", "p", "P"), histograms.HistoGraph(eff2c_MET120, "eff2c_MET120", "p", "P")) namec = "MC_TrgBitVsCaloMET120_L1HLTMET_PFMET" legend1c = "MC, trigger bit" legend2c = "MC, CaloMET > 120" p.histoMgr.setHistoLegendLabelMany({"eff2_MET120": legend1c, "eff2c_MET120": legend2c}) p.createFrame(os.path.join(plotDir, namec), createRatio=True, opts=opts, opts2=opts2) p.setLegend(histograms.moveLegend(histograms.createLegend(y1=0.8), **moveLegend)) p.getFrame().GetYaxis().SetTitle("L1+HLT MET efficiency") p.getFrame().GetXaxis().SetTitle("MET Type 1 (GeV)") p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) p.draw() lumi = 0.0 histograms.addStandardTexts(lumi=lumi) if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats) """ ######################################################################### namePU = "TauMET_"+analysis+"_DataVsMC_nVtx" eff1PU = getEfficiency(dataset1,"NumeratorPU","DenominatorPU") eff2PU = getEfficiency(dataset2,"NumeratorPU","DenominatorPU") styles.dataStyle.apply(eff1PU) styles.mcStyle.apply(eff2PU) eff1PU.SetMarkerSize(1) eff2PU.SetMarkerSize(1.5) pPU = plots.ComparisonManyPlot(histograms.HistoGraph(eff1PU, "eff1", "p", "P"), [histograms.HistoGraph(eff2PU, "eff2", "p", "P")]) pPU.histoMgr.setHistoLegendLabelMany({"eff1": legend1, "eff2": legend2}) opts = {"ymin": 0.001, "ymax": 0.1} pPU.createFrame(os.path.join(plotDir, namePU), createRatio=True, opts=opts, opts2=opts2) pPU.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) pPU.getPad1().SetLogy(True) pPU.getFrame().GetYaxis().SetTitle("L1+HLT MET efficiency") pPU.getFrame().GetXaxis().SetTitle("Number of reco vertices") pPU.getFrame2().GetYaxis().SetTitle("Ratio") pPU.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.4, 0.25, "LooseIsoPFTau50_Trk30_eta2p1_MET80", 17) histograms.addText(0.4, 0.18, analysis.split("_")[len(analysis.split("_")) -1], 17) histograms.addText(0.4, 0.11, "Runs "+datasets.loadRunRange(), 17) pPU.draw() histograms.addStandardTexts(lumi=lumi) pPU.save(formats) print "Output written in",plotDir
def main(opts): style = tdrstyle.TDRStyle() style.setOptStat(True) style.setWide(True, 0.15) ### style = tdrstyle.TDRStyle() ### #style.setWide(True) ### style.setPaletteMy() ### ROOT.gStyle.SetNumberContours(20) # tdrstyle.setDeepSeaPalette() # tdrstyle.setRainBowPalette() # tdrstyle.setDarkBodyRadiatorPalette() # tdrstyle.setGreyScalePalette() # tdrstyle.setTwoColorHuePalette() style.setWide(True, 0.15) # Set ROOT batch mode boolean ROOT.gROOT.SetBatch(opts.batchMode) # ======================================== # Datasets # ======================================== # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts.mcrab, opts, **kwargs) intLumi = GetLumi(datasetsMgr) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.PrintCrossSections() #datasetsMgr.PrintLuminosities() # Set/Overwrite cross-sections for d in datasetsMgr.getAllDatasets(): if "ChargedHiggs" in d.getName(): datasetsMgr.getDataset(d.getName()).setCrossSection(1.0) # Merge datasts (Note: Merged MC histograms must be normalized to something) plots.mergeRenameReorderForDataMC(datasetsMgr) # Remove datasets if 0: datasetsMgr.remove("TTJets") datasetsMgr.remove( filter(lambda name: not "QCD" in name, datasetsMgr.getAllDatasetNames())) # Print dataset information datasetsMgr.PrintInfo() # For-loop: All Histogram names for counter, hName in enumerate(hNames): savePath, saveName = GetSavePathAndName(hName, **kwargs) # Get Histos for Plotter refHisto, otherHistos = GetHistosForPlotter(datasetsMgr, hName, **kwargs) # Create a plot p = plots.PlotBase([refHisto], kwargs.get("saveFormats")) # Remove negative contributions #RemoveNegativeBins(datasetsMgr, hName, p) # Customize # p.histoMgr.setHistoDrawStyleAll("COL") #"CONT4" "COLZ" "COL" p.histoMgr.forEachHisto( lambda h: h.getRootHisto().RebinX(kwargs.get("rebinX"))) p.histoMgr.forEachHisto( lambda h: h.getRootHisto().RebinY(kwargs.get("rebinY"))) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetXaxis().SetRangeUser(1.0, 5.0)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetYaxis().SetRangeUser(1.0, 5.0)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetZaxis().SetRangeUser(0.0, 0.015)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMinimum(0.00001)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMaximum(0.05)) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinX(2)) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinY(2)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMinimum(0.0009)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMaximum(0.0041)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMinimum(0.0012)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMaximum(0.00435)) p.histoMgr.forEachHisto( lambda h: h.getRootHisto().GetZaxis().SetTitle("Arbitrary Units")) p.histoMgr.forEachHisto( lambda h: h.getRootHisto().GetZaxis().SetTitleOffset(2.)) #ROOT.gPad.RedrawAxis() # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMinimum(kwargs.get("zMin"))) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMaximum(kwargs.get("zMax"))) # Create a frame opts = {"ymin": 0.0, "ymaxfactor": 1.0} p.createFrame(saveName, opts=opts) # Customise frame p.getFrame().GetXaxis().SetTitle(getTitleX(refHisto, **kwargs)) #p.getFrame().GetYaxis().SetTitle( getTitleY(refHisto, **kwargs) ) # SetLog SetLogAndGrid(p, **kwargs) # Add cut line/box _kwargs = {"lessThan": kwargs.get("cutLessThan")} p.addCutBoxAndLine(cutValue=kwargs.get("cutValue"), fillColor=kwargs.get("cutFillColour"), box=kwargs.get("cutBox"), line=kwargs.get("cutLine"), **_kwargs) # Customise Legend moveLegend = {"dx": -0.1, "dy": +0.0, "dh": -0.1} p.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) p.removeLegend() # Add MC Uncertainty (Invalid method for a 2-d histogram) #p.addMCUncertainty() # Customise histogram (after frame is created) # Draw plots p.draw() # Customise text #Soti lumitext histograms.addStandardTexts(lumi=intLumi) # histograms.addText(0.17, 0.95, plots._legendLabels[kwargs.get("refDataset")], 22) histograms.addText(0.17, 0.88, plots._legendLabels[kwargs.get("refDataset")], 17) # Save canvas under custom dir SaveAs(p, savePath, saveName, kwargs.get("saveFormats"), counter == 0) return
def main(opts): style = tdrstyle.TDRStyle() # Set ROOT batch mode boolean ROOT.gROOT.SetBatch(opts.batchMode) # Get all datasets from the mcrab dir # def GetDatasetsFromDir(mcrab, opts, **kwargs): #iro datasetsMgr = GetDatasetsFromDir(opts.mcrab, opts, **kwargs) #kwargs.get("analysis")) datasetsMgr_fixed = GetDatasetsFromDir(opts.mcrab, opts, **kwargs_fixed) # Determine Integrated Luminosity (If Data datasets present) intLumi = GetLumi(datasetsMgr) # Update to PU datasetsMgr.updateNAllEventsToPUWeighted() # Remove datasets datasetsMgr.remove(kwargs.get("rmDataset")) datasetsMgr_fixed.remove(kwargs_fixed.get("rmDataset")) # datasetsMgr.remove(filter(lambda name: not "QCD" in name, datasetsMgr.getAllDatasetNames())) # datasetsMgr.remove(filter(lambda name: "QCD" in name in name, datasetsMgr.getAllDatasetNames())) # Set custom XSections #datasetsMgr.getDataset("QCD_bEnriched_HT1000to1500").setCrossSection(1.0) #datasetsMgr.getDataset("QCD_bEnriched_HT1500to2000").setCrossSection(1.0) #datasetsMgr.getDataset("QCD_bEnriched_HT2000toInf").setCrossSection(1.0) #datasetsMgr.getDataset("QCD_bEnriched_HT300to500").setCrossSection(1.0) #datasetsMgr.getDataset("QCD_bEnriched_HT500to700").setCrossSection(1.0) #datasetsMgr.getDataset("QCD_bEnriched_HT700to1000").setCrossSection(1.0) # Default merging & ordering: "Data", "QCD", "SingleTop", "Diboson" plots.mergeRenameReorderForDataMC(datasetsMgr) plots.mergeRenameReorderForDataMC(datasetsMgr_fixed) # Remove datasets (for merged names) datasetsMgr.remove(kwargs.get("rmDataset")) datasetsMgr_fixed.remove(kwargs_fixed.get("rmDataset")) # Print the cross datasetsMgr.PrintCrossSections() for h_prefix in ["reco", "gen"]: # Get ref histo (?) here and the fixed histos (TT, QCD, QCD-b inclusiveHisto, fixedHistos = GetHistosForPlotter( datasetsMgr_fixed, h_prefix + "MHT", **kwargs_fixed) inclusiveHisto.setName(inclusiveHisto.getName() + " (inclusive)") #for hi in fixedHistos: # print(type(hi), hi.getName()) #return # For-loop: All Histogram names for counter, hName in enumerate(hNames): # Get the save path and name savePath, saveName = GetSavePathAndName(h_prefix + hName, **kwargs) # Get Histos for Plotter refHisto_, otherHistos_ = GetHistosForPlotter( datasetsMgr, h_prefix + hName, **kwargs) refHisto = refHisto_ otherHistos = otherHistos_ + fixedHistos #for hi in otherHistos: # print hi.getName() #return # Create a comparison plot p = plots.ComparisonManyPlot(refHisto, otherHistos) # Remove negative contributions #RemoveNegativeBins(datasetsMgr, hName, p) # Create a frame if kwargs.get("logY") == True: opts = {"ymin": 8e-5, "ymax": 2} #opts = {"ymin": 1e-3, "ymax": 1} else: opts = {"ymin": 8.e-5, "ymax": 2} ratioOpts = {"ymin": 0.0, "ymax": 2.0} p.createFrame(saveName, createRatio=kwargs.get("createRatio"), opts=opts, opts2=ratioOpts) # Customise Legend moveLegend = {"dx": -0.2, "dy": +0.0, "dh": -0.1} p.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) #p.removeLegend() # Customise frame p.getFrame().GetYaxis().SetTitle(getTitleY(refHisto, **kwargs)) #p.setEnergy("13") if kwargs.get("createRatio"): p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) # SetLog SetLogAndGrid(p, **kwargs) # Add cut line/box _kwargs = {"lessThan": kwargs.get("cutLessThan")} p.addCutBoxAndLine(cutValue=kwargs.get("cutValue"), fillColor=kwargs.get("cutFillColour"), box=kwargs.get("cutBox"), line=kwargs.get("cutLine"), **_kwargs) # Move the refDataset to first in the draw order (back) histoNames = [h.getName() for h in p.histoMgr.getHistos()] p.histoMgr.reorder( filter( lambda n: plots._legendLabels[kwargs.get("refDataset")] not in n, histoNames)) # Draw plots p.draw() # Customise text histograms.addStandardTexts(lumi=intLumi) # histograms.addText(0.4, 0.9, "Alexandros Attikis", 17) # histograms.addText(0.4, 0.11, "Runs " + datasetsMgr.loadRunRange(), 17) # Save canvas under custom dir if not os.path.exists(savePath): os.mkdir(savePath) SaveAs(p, savePath, saveName, kwargs.get("saveFormats")) return
def doPlot(name, graphs, limits, xlabel, scenario, isMA=False): blinded = True if "obs" in graphs.keys(): blinded = False higgs = "h" if scenario == "lowMH-LHCHXSWG": higgs = "H" if not blinded: obs = graphs["obs"] excluded = ROOT.TGraph(obs) excluded.SetName("ExcludedArea") if "_mA_" in name: rightX = obs.GetX()[obs.GetN()-1]+100 rightY = obs.GetY()[obs.GetN()-1] excluded.SetPoint(excluded.GetN(), rightX, rightY) excluded.SetPoint(excluded.GetN(), rightX, 1) else: excluded.SetPoint(excluded.GetN(), obs.GetX()[obs.GetN()-1], 0.5) excluded.SetPoint(excluded.GetN(), 0, 0.5) excluded.SetPoint(excluded.GetN(), 0, tanbMax) excluded.SetPoint(excluded.GetN(), obs.GetX()[0], tanbMax) excluded.SetPoint(excluded.GetN(), obs.GetX()[0], obs.GetY()[0]) limit.setExcludedStyle(excluded) excluded.SetLineWidth(0) excluded.SetLineColor(ROOT.kWhite) expected = graphs["exp"] expected.SetLineStyle(2) expected1 = graphs["exp1"] expected1.SetLineStyle(2) expected2 = graphs["exp2"] expected2.SetLineStyle(2) # allowed = graphs["Allowed"] # if not allowed == None: # allowed.SetFillStyle(3005) # allowed.SetFillColor(ROOT.kRed) # allowed.SetLineWidth(-302) # allowed.SetLineColor(ROOT.kRed) # allowed.SetLineStyle(1) if not blinded: graphs["obs_th_plus"].SetLineStyle(9) # graphs["obs_th_minus"].SetLineStyle(9) excludedCopy = excluded.Clone() # excludedCopy.SetFillColorAlpha(ROOT.kWhite, 0.0) # actual color doesn't matter, want fully transparent plot = plots.PlotBase([ histograms.HistoGraph(graphs["obs"], "Observed", drawStyle="PL", legendStyle="lp"), histograms.HistoGraph(graphs["obs_th_plus"], "ObservedPlus", drawStyle="L", legendStyle="l"), histograms.HistoGraph(graphs["obs_th_minus"], "ObservedMinus", drawStyle="L"), # histograms.HistoGraph(graphs["isomass"], "IsoMass", drawStyle="L"), # histograms.HistoGraph(graphs["isomass"], "IsoMassCopy", drawStyle="F"), histograms.HistoGraph(excluded, "Excluded", drawStyle="F", legendStyle=None), histograms.HistoGraph(excludedCopy, "ExcludedCopy", drawStyle=None, legendStyle="f"), histograms.HistoGraph(expected, "Expected", drawStyle="L"), # histograms.HistoGraph(graphs["exp"], "Expected", drawStyle="L"), # histograms.HistoGraph(graphs["Allowed"], "Allowed", drawStyle="L", legendStyle="lf"), # histograms.HistoGraph(graphs["Allowed"], "AllowedCopy", drawStyle="L", legendStyle="f"), histograms.HistoGraph(graphs["mintanb"], "MinTanb", drawStyle="L"), # histograms.HistoGraph(graphs["exp1"], "Expected1", drawStyle="F", legendStyle="fl"), # histograms.HistoGraph(graphs["exp2"], "Expected2", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(expected1, "Expected1", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(expected2, "Expected2", drawStyle="F", legendStyle="fl") ], saveFormats=[".png", ".pdf", ".C"] ) plot.histoMgr.setHistoLegendLabelMany({ "ObservedPlus": "Observed #pm1#sigma (th.)", "ObservedMinus": None, "Excluded": None, "ExcludedCopy": "Excluded", "Expected": None, "MinTanb": None, # "Allowed": "m_{"+higgs+"}^{MSSM} #neq 125#pm3 GeV", "Expected1": "Expected median #pm 1#sigma", "Expected2": "Expected median #pm 2#sigma", # "IsoMass": None, # "IsoMassCopy": None }) else: if not graphs["isomass"] == None: graphs["isomass"].SetFillColor(0) graphs["isomass"].SetFillStyle(1) plot = plots.PlotBase([ histograms.HistoGraph(expected, "Expected", drawStyle="L"), histograms.HistoGraph(graphs["isomass"], "IsoMass", drawStyle="L"), histograms.HistoGraph(graphs["isomass"], "IsoMassCopy", drawStyle="F"), # histograms.HistoGraph(graphs["Allowed"], "Allowed", drawStyle="L", legendStyle="lf"), # histograms.HistoGraph(graphs["Allowed"], "AllowedCopy", drawStyle="L", legendStyle="f"), histograms.HistoGraph(graphs["mintanb"], "MinTanb", drawStyle="L"), histograms.HistoGraph(expected1, "Expected1", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(expected2, "Expected2", drawStyle="F", legendStyle="fl"), ], saveFormats=[".png", ".pdf", ".C"] ) plot.histoMgr.setHistoLegendLabelMany({ "Expected": None, "MinTanb": None, # "Allowed": "m_{"+higgs+"}^{MSSM} #neq 125#pm3 GeV", "Expected1": "Expected median #pm 1#sigma", "Expected2": "Expected median #pm 2#sigma", "IsoMass": None, "IsoMassCopy": None }) # Move the m_h,H allowed region to the last in the legend histoNames = [h.getName() for h in plot.histoMgr.getHistos()] plot.histoMgr.reorderLegend(filter(lambda n: "Allowed" not in n, histoNames)) size = 20 x = 0.2 # dy = -0.15 dy = -0.13 plot.setLegend(histograms.createLegend(x-0.01, 0.50+dy, x+0.45, 0.80+dy)) plot.legend.SetMargin(0.17) # plot.legend.SetFillColor(0) #plot.legend.SetFillColorAlpha(ROOT.kWhite, 50) # plot.legend.SetFillStyle(1001) if blinded: name += "_blinded" name = os.path.basename(name) name = name.replace("-","_") frameXmax = 160 if "_mA_" in name: frameXmax = 145 plot.createFrame(name, opts={"ymin": 0, "ymax": tanbMax, "xmin": 90, "xmax": frameXmax}) plot.frame.GetXaxis().SetTitle(xlabel) plot.frame.GetYaxis().SetTitle(limit.tanblimit) plot.draw() plot.setLuminosity(limits.getLuminosity()) plot.addStandardTexts() histograms.addText(x, 0.9+dy, "t #rightarrow H^{+}b, H^{+} #rightarrow c#bar{s}", size=size) # histograms.addText(x, 0.863+dy, limits.getFinalstateText(), size=size) histograms.addText(x, 0.815+dy, limit.getTypesetScenarioName(scenario), size=size) #histograms.addText(0.2, 0.231, "Min "+limit.BR+"(t#rightarrowH^{+}b)#times"+limit.BR+"(H^{+}#rightarrow#tau#nu)", size=0.5*size) # Too small to be visible # if not graphs["isomass"] == None: # histograms.addText(0.8, 0.15, "m_{H^{#pm}} = 160 GeV", size=0.5*size) #Adding a LHC label: # ROOT.LHCHIGGS_LABEL(0.97,0.72,1) #FH_version = db.getVersion("FeynHiggs") #histograms.addText(x, 0.55+dy, FH_version, size=size) # HD_version = db.getVersion("HDECAY") # histograms.addText(x, 0.55, FH_version+" and "+HD_version, size=size) # histograms.addText(x, 0.48, "Derived from", size=size) # histograms.addText(x, 0.43, "CMS HIG-12-052", size=size) plot.save() print "Created",name
def main(): style = tdrstyle.TDRStyle() #style.setWide(True) style.setPaletteMy() ROOT.gStyle.SetNumberContours(20) # tdrstyle.setDeepSeaPalette() # tdrstyle.setRainBowPalette() # tdrstyle.setDarkBodyRadiatorPalette() # tdrstyle.setGreyScalePalette() # tdrstyle.setTwoColorHuePalette() # Set ROOT batch mode boolean ROOT.gROOT.SetBatch(parseOpts.batchMode) # Get all datasets from the mcrab dir #datasetsMgr = GetDatasetsFromDir(parseOpts.mcrab, kwargs.get("analysis")) datasetsMgr = GetDatasetsFromDir(parseOpts.mcrab, parseOpts, **kwargs) # Determine Integrated Luminosity (If Data datasets present) intLumi = GetLumi(datasetsMgr) # Update to PU datasetsMgr.updateNAllEventsToPUWeighted() # Remove datasets #datasetsMgr.remove(kwargs.get("rmDataset")) datasetsMgr.remove(filter(lambda name: not kwargs.get("refDataset") in name, datasetsMgr.getAllDatasetNames())) # Set custom XSections # d.getDataset("TT_ext3").setCrossSection(831.76) # Default merging & ordering: "Data", "QCD", "SingleTop", "Diboson" plots.mergeRenameReorderForDataMC(datasetsMgr) #WARNING: Merged MC histograms must be normalized to something! # Remove datasets (for merged names) # datasetsMgr.remove(kwargs.get("rmDataset")) # For-loop: All Histogram names for hName in hNames: savePath, saveName = GetSavePathAndName(hName, **kwargs) # Get Histos for Plotter refHisto, otherHistos = GetHistosForPlotter(datasetsMgr, hName, **kwargs) # Create a plot p = plots.PlotBase([refHisto], kwargs.get("saveFormats")) # Remove negative contributions #RemoveNegativeBins(datasetsMgr, hName, p) # Customize # p.histoMgr.setHistoDrawStyleAll("COL") #"CONT4" "COLZ" "COL" # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinX(kwargs.get("rebinX"))) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinY(kwargs.get("rebinY"))) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetXaxis().SetRangeUser(1.0, 5.0)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetYaxis().SetRangeUser(1.0, 5.0)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetZaxis().SetRangeUser(0.0, 0.015)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMinimum(kwargs.get("zMin"))) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMaximum(kwargs.get("zMax"))) # Create a frame opts = {"ymin": 0.0, "ymaxfactor": 1.0} p.createFrame(saveName, opts=opts) # Customise frame p.getFrame().GetXaxis().SetTitle( getTitleX(refHisto, **kwargs) ) p.getFrame().GetYaxis().SetTitle( getTitleY(refHisto, **kwargs) ) # p.getFrame().GetZaxis().SetTitle( getTitleZ(refHisto, **kwargs) ) #does not work # SetLog SetLogAndGrid(p, **kwargs) # Add cut line/box _kwargs = { "lessThan": kwargs.get("cutLessThan")} p.addCutBoxAndLine(cutValue=kwargs.get("cutValue"), fillColor=kwargs.get("cutFillColour"), box=kwargs.get("cutBox"), line=kwargs.get("cutLine"), **_kwargs) # Customise Legend moveLegend = {"dx": -0.1, "dy": +0.0, "dh": -0.1} p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) p.removeLegend() # Add MC Uncertainty (Invalid method for a 2-d histogram) #p.addMCUncertainty() # Draw plots p.draw() # Customise text histograms.addStandardTexts(lumi=intLumi) #histograms.addText(0.16, 0.95, plots._legendLabels[kwargs.get("refDataset")], 22) histograms.addText(0.20, 0.88, plots._legendLabels[kwargs.get("refDataset")], 17) # Save canvas under custom dir if not os.path.exists(savePath): os.mkdir(savePath) SaveAs(p, savePath, saveName, kwargs.get("saveFormats")) return
def doPlot(name, graphs, limits, xlabel, scenario, progversion): obs = graphs["obs"] # excluded = ROOT.TGraph(obs) # excluded.SetName("ExcludedArea") # excluded.SetFillColor(ROOT.kGray) ## excluded.SetPoint(excluded.GetN(), obs.GetX()[obs.GetN()-1], tanbMax) ## excluded.SetPoint(excluded.GetN(), obs.GetX()[0], tanbMax) # excluded.SetPoint(excluded.GetN(), -1, 1) # excluded.SetPoint(excluded.GetN(), -1, 100) # excluded.SetPoint(excluded.GetN(), obs.GetX()[0], 100) # if not obs.GetY()[0] == 100: # excluded.SetPoint(excluded.GetN(), obs.GetX()[0], obs.GetY()[0]) """ excluded.SetPoint(excluded.GetN(), obs.GetX()[0], tanbMax) excluded.SetPoint(excluded.GetN(), 0, tanbMax) excluded.SetPoint(excluded.GetN(), 0, 1) excluded.SetPoint(excluded.GetN(), obs.GetX()[obs.GetN()-1], 1) """ # excluded.SetFillColor(ROOT.kGray) # excluded.SetFillStyle(3354) # excluded.SetLineWidth(0) # excluded.SetLineColor(ROOT.kWhite) expected = graphs["exp"] expected.SetLineStyle(2) expected1 = graphs["exp1"] expected1.SetLineStyle(2) expected2 = graphs["exp2"] expected2.SetLineStyle(2) plot = plots.PlotBase([ histograms.HistoGraph(graphs["obs"], "Observed", drawStyle="PL", legendStyle="lp"), histograms.HistoGraph(graphs["obs_th_plus"], "ObservedPlus", drawStyle="L", legendStyle="l"), histograms.HistoGraph(graphs["obs_th_minus"], "ObservedMinus", drawStyle="L"), histograms.HistoGraph(graphs["excluded"], "Excluded", drawStyle="F", legendStyle="f"), histograms.HistoGraph(expected, "Expected", drawStyle="L"), #histograms.HistoGraph(graphs["exp"], "Expected", drawStyle="L"), #### histograms.HistoGraph(graphs["Allowed"], "Allowed by \nm_{H} = 125.9#pm3.0 "+GeVUnit, drawStyle="F", legendStyle="f"), #### histograms.HistoGraph(graphs["Allowed"], "AllowedCopy", drawStyle="L", legendStyle="f"), # histograms.HistoGraph(graphs["mintanb"], "MinTanb", drawStyle="L"), #histograms.HistoGraph(graphs["exp1"], "Expected1", drawStyle="F", legendStyle="fl"), #histograms.HistoGraph(graphs["exp2"], "Expected2", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(expected1, "Expected1", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(expected2, "Expected2", drawStyle="F", legendStyle="fl"), ]) plot.histoMgr.setHistoLegendLabelMany({ "ObservedPlus": "Observed #pm1#sigma (th.)", "ObservedMinus": None, "Expected": None, # "MinTanb": None, #### "AllowedCopy": None, "Expected1": "Expected median #pm 1#sigma", "Expected2": "Expected median #pm 2#sigma" }) # plot.setLegend(histograms.createLegend(0.57, 0.155, 0.87, 0.355)) plot.setLegend(histograms.createLegend(0.19, 0.60, 0.57, 0.80)) plot.legend.SetFillColor(0) plot.legend.SetFillStyle(1001) plot.createFrame(name, opts={ "ymin": 0, "ymax": tanbMax, "xmin": 180, "xmax": 600 }) plot.frame.GetXaxis().SetTitle(xlabel) plot.frame.GetYaxis().SetTitle(limit.tanblimit) plot.draw() histograms.addStandardTexts(lumi="2.3-4.9", addCmsText=False) size = 20 x = 0.2 histograms.addText(x, 0.9, limit.processHeavy, size=size) histograms.addText(x, 0.863, limits.getFinalstateText(), size=size) #### histograms.addText(x, 0.815, "MSSM m_{h}^{max}", size=size) histograms.addText(x, 0.815, scenario, size=size) # histograms.addText(x, 0.775, limit.BRassumption, size=size) # histograms.addText(x, 0.735, "#mu=%d %s"%(mu, limit.massUnit()), size=size) # histograms.addText(0.7, 0.23, "Min "+limit.BR+"(t#rightarrowH^{+}b)#times"+limit.BR+"(H^{+}#rightarrow#tau#nu)", size=0.5*size) #Adding a LHC label: ROOT.LHCHIGGS_LABEL(0.97, 0.72, 1) histograms.addText(x, 0.55, progversion, size=size) histograms.addText(x, 0.48, "Derived from", size=size) histograms.addText(x, 0.43, "CMS HIG-13-XXX", size=size) # histograms.addText(x, 0.38, "JHEP07(2012)143", size=size) plot.save()
def PlotHistosAndCalculateTF(datasetsMgr, histoList, binLabels, opts): # Get the histogram customisations (keyword arguments) _kwargs = GetHistoKwargs(histoList[0]) # Get the root histos for all datasets and Control Regions (CRs) regions = ["SR", "VR", "CRone", "CRtwo"] rhDict = GetRootHistos(datasetsMgr, histoList, regions, binLabels) #========================================================================================= # Calculate the Transfer Factor (TF) and save to file #========================================================================================= manager = FakeBNormalization.FakeBNormalizationManager(binLabels, opts.mcrab, opts.optMode, verbose=False) if opts.inclusiveOnly: #manager.CalculateTransferFactor(binLabels[0], rhDict["CRone-FakeB"], rhDict["CRtwo-FakeB"]) binLabel = "Inclusive" manager.CalculateTransferFactor("Inclusive", rhDict["FakeB-CRone-Inclusive"], rhDict["FakeB-CRtwo-Inclusive"]) else: for bin in binLabels: manager.CalculateTransferFactor(bin, rhDict["FakeB-CRone-%s" % bin], rhDict["FakeB-CRtwo-%s" % bin]) # Get unique a style for each region for k in rhDict: dataset = k.split("-")[0] region = k.split("-")[1] styles.getABCDStyle(region).apply(rhDict[k]) if "FakeB" in k: styles.getFakeBStyle().apply(rhDict[k]) # sr.apply(rhDict[k]) # ========================================================================================= # Create the final plot object # ========================================================================================= rData_SR = rhDict["Data-SR-Inclusive"] rEWKGenuineB_SR = rhDict["EWK-SR-Inclusive-EWKGenuineB"] rBkgSum_SR = rhDict["FakeB-VR-Inclusive"].Clone("BkgSum-SR-Inclusive") rBkgSum_SR.Reset() if opts.inclusiveOnly: bin = "Inclusive" # Normalise the VR histogram with the Transfer Factor ( BkgSum = VR * (CR1/CR2) ) binHisto_VR = rhDict["FakeB-VR-%s" % (bin)] VRtoSR_TF = manager.GetTransferFactor(bin) Print( "Applying TF = %s%0.6f%s to VR shape" % (ShellStyles.NoteStyle(), VRtoSR_TF, ShellStyles.NormalStyle()), True) binHisto_VR.Scale(VRtoSR_TF) # Add the normalised histogram to the final Inclusive SR (predicted) histo rBkgSum_SR.Add(binHisto_VR, +1) else: # For-loop: All bins for i, bin in enumerate(binLabels, 1): if bin == "Inclusive": continue # Normalise the VR histogram with the Transfer Factor ( BkgSum = VR * (CR1/CR2) ) binHisto_VR = rhDict["FakeB-VR-%s" % (bin)] VRtoSR_TF = manager.GetTransferFactor(bin) Print( "Applying TF = %s%0.6f%s to VR shape" % (ShellStyles.NoteStyle(), VRtoSR_TF, ShellStyles.NormalStyle()), i == 1) binHisto_VR.Scale(VRtoSR_TF) # Add the normalised histogram to the final Inclusive SR (predicted) histo rBkgSum_SR.Add(binHisto_VR, +1) #Print("Got Verification Region (VR) shape %s%s%s" % (ShellStyles.NoteStyle(), rFakeB_VR.GetName(), ShellStyles.NormalStyle()), True) # Normalise the VR histogram with the Transfer Factor ( BkgSum = VR * (CR1/CR2) ) #VRtoSR_TF = manager.GetTransferFactor("Inclusive") #Print("Applying TF = %s%0.6f%s to VR shape" % (ShellStyles.NoteStyle(), VRtoSR_TF, ShellStyles.NormalStyle()), True) #rBkgSum_SR.Scale(VRtoSR_TF) # Plot histograms if opts.altPlot: # Add the SR EWK Genuine-b to the SR FakeB ( BkgSum = [FakeB] + [GenuineB-MC] = [VR * (CR1/CR2)] + [GenuineB-MC] ) rBkgSum_SR.Add(rEWKGenuineB_SR, +1) # Change style styles.getGenuineBStyle().apply(rBkgSum_SR) # Remove unsupported settings of kwargs _kwargs["stackMCHistograms"] = False _kwargs["addLuminosityText"] = False # Create the plot p = plots.ComparisonManyPlot(rData_SR, [rBkgSum_SR], saveFormats=[]) # Set draw / legend style p.histoMgr.setHistoDrawStyle("Data-SR-Inclusive", "P") p.histoMgr.setHistoLegendStyle("Data-SR-Inclusive", "LP") p.histoMgr.setHistoDrawStyle("BkgSum-SR-Inclusive", "HIST") p.histoMgr.setHistoLegendStyle("BkgSum-SR-Inclusive", "F") # Set legend labels p.histoMgr.setHistoLegendLabelMany({ "Data-SR": "Data", "BkgSum-SR": "Fake-b + Gen-b", }) else: # Create empty histogram stack list myStackList = [] # Signal p2 = plots.DataMCPlot(datasetsMgr, "ForTestQGLR/QGLR_SR/QGLR_SRInclusive", saveFormats=[]) hSignal_800 = p2.histoMgr.getHisto( 'ChargedHiggs_HplusTB_HplusToTB_M_800').getRootHisto() hhSignal_800 = histograms.Histo( hSignal_800, 'ChargedHiggs_HplusTB_HplusToTB_M_800', "H^{+} m_{H^+}=800 GeV") hhSignal_800.setIsDataMC(isData=False, isMC=True) myStackList.append(hhSignal_800) hSignal_250 = p2.histoMgr.getHisto( 'ChargedHiggs_HplusTB_HplusToTB_M_250').getRootHisto() hhSignal_250 = histograms.Histo( hSignal_250, 'ChargedHiggs_HplusTB_HplusToTB_M_250', "H^{+} m_{H^+}=250 GeV" ) #plots._legendLabels['ChargedHiggs_HplusTB_HplusToTB_M_250']) hhSignal_250.setIsDataMC(isData=False, isMC=True) #myStackList.append(hhSignal_250) hSignal_500 = p2.histoMgr.getHisto( 'ChargedHiggs_HplusTB_HplusToTB_M_500').getRootHisto() hhSignal_500 = histograms.Histo( hSignal_500, 'ChargedHiggs_HplusTB_HplusToTB_M_500', "H^{+} m_{H^+}=500 GeV" ) #plots._legendLabels['ChargedHiggs_HplusTB_HplusToTB_M_500']) hhSignal_500.setIsDataMC(isData=False, isMC=True) #myStackList.append(hhSignal_500) hSignal_1000 = p2.histoMgr.getHisto( 'ChargedHiggs_HplusTB_HplusToTB_M_1000').getRootHisto() hhSignal_1000 = histograms.Histo( hSignal_1000, 'ChargedHiggs_HplusTB_HplusToTB_M_1000', "H^{+} m_{H^+}=1000 GeV" ) #plots._legendLabels['ChargedHiggs_HplusTB_HplusToTB_M_500']) hhSignal_1000.setIsDataMC(isData=False, isMC=True) #myStackList.append(hhSignal_1000) # Add the FakeB data-driven background to the histogram list hFakeB = histograms.Histo(rBkgSum_SR, "FakeB", "Fake-b") hFakeB.setIsDataMC(isData=False, isMC=True) myStackList.append(hFakeB) # Add the EWKGenuineB MC background to the histogram list hGenuineB = histograms.Histo(rEWKGenuineB_SR, "GenuineB", "EWK Genuine-b") hGenuineB.setIsDataMC(isData=False, isMC=True) myStackList.append(hGenuineB) # Add the collision datato the histogram list hData = histograms.Histo(rData_SR, "Data", "Data") hData.setIsDataMC(isData=True, isMC=False) myStackList.insert(0, hData) p = plots.DataMCPlot2(myStackList, saveFormats=[]) p.setLuminosity(opts.intLumi) p.setDefaultStyles() # Draw the plot and save it hName = "test" plots.drawPlot(p, hName, **_kwargs) SavePlot(p, hName, os.path.join(opts.saveDir, opts.optMode), saveFormats=[".png", ".pdf"]) #========================================================================================== # Calculate Cut-Flow Efficiency #========================================================================================== kwargs = { "rebinX": 1, "xlabel": "QGLR", "ylabel": "Significance / %.02f ", "opts": { "ymin": 0.0, "ymaxfactor": 1.3 }, "createLegend": { "x1": 0.55, "y1": 0.70, "x2": 0.92, "y2": 0.92 }, # "cutBox" : {"cutValue": 0.0, "fillColor" : 16, "box": False, "line": False, "greaterThan": True}, } efficiencyList = [] xValues = [] yValues_250 = [] yValues_500 = [] yValues_800 = [] yValues_1000 = [] yValues_Bkg = [] nBins = hSignal_250.GetNbinsX() + 1 hBkg = p.histoMgr.getHisto( "ChargedHiggs_HplusTB_HplusToTB_M_800").getRootHisto().Clone("Bkg") hBkg.Reset() # Bkg: FakeB + Genuine B hBkg.Add(hFakeB.getRootHisto(), +1) hBkg.Add(hGenuineB.getRootHisto(), +1) for i in range(0, nBins): # Cut value cut = hSignal_250.GetBinCenter(i) passed_250 = hSignal_250.Integral(i, hSignal_250.GetXaxis().GetNbins()) passed_500 = hSignal_500.Integral(i, hSignal_500.GetXaxis().GetNbins()) passed_800 = hSignal_800.Integral(i, hSignal_800.GetXaxis().GetNbins()) passed_1000 = hSignal_1000.Integral(i, hSignal_1000.GetXaxis().GetNbins()) passed_Bkg = hBkg.Integral(i, hBkg.GetXaxis().GetNbins()) total_250 = hSignal_250.Integral() total_500 = hSignal_500.Integral() total_800 = hSignal_800.Integral() total_1000 = hSignal_1000.Integral() total_Bkg = hBkg.Integral() eff_250 = float(passed_250) / total_250 eff_500 = float(passed_500) / total_500 eff_800 = float(passed_800) / total_800 eff_1000 = float(passed_1000) / total_1000 eff_Bkg = float(passed_Bkg) / total_Bkg xValues.append(cut) yValues_250.append(eff_250) yValues_500.append(eff_500) yValues_800.append(eff_800) yValues_1000.append(eff_1000) yValues_Bkg.append(eff_Bkg) # Create the Efficiency Plot tGraph_250 = ROOT.TGraph(len(xValues), array.array("d", xValues), array.array("d", yValues_250)) tGraph_500 = ROOT.TGraph(len(xValues), array.array("d", xValues), array.array("d", yValues_500)) tGraph_800 = ROOT.TGraph(len(xValues), array.array("d", xValues), array.array("d", yValues_800)) tGraph_1000 = ROOT.TGraph(len(xValues), array.array("d", xValues), array.array("d", yValues_1000)) tGraph_Bkg = ROOT.TGraph(len(xValues), array.array("d", xValues), array.array("d", yValues_Bkg)) styles.getSignalStyleHToTB_M("200").apply(tGraph_250) styles.getSignalStyleHToTB_M("500").apply(tGraph_500) styles.getSignalStyleHToTB_M("800").apply(tGraph_800) styles.getSignalStyleHToTB_M("1000").apply(tGraph_1000) styles.getQCDLineStyle().apply(tGraph_Bkg) drawStyle = "CPE" effGraph_250 = histograms.HistoGraph(tGraph_250, "H^{+} m_{H^{+}} = 250 GeV", "lp", drawStyle) effGraph_500 = histograms.HistoGraph(tGraph_500, "H^{+} m_{H^{+}} = 500 GeV", "lp", drawStyle) effGraph_800 = histograms.HistoGraph(tGraph_800, "H^{+} m_{H^{+}} = 800 GeV", "lp", drawStyle) effGraph_1000 = histograms.HistoGraph(tGraph_1000, "H^{+} m_{H^{+}} = 1000 GeV", "lp", drawStyle) effGraph_Bkg = histograms.HistoGraph(tGraph_Bkg, "Bkg", "lp", drawStyle) efficiencyList.append(effGraph_250) efficiencyList.append(effGraph_500) efficiencyList.append(effGraph_800) efficiencyList.append(effGraph_1000) efficiencyList.append(effGraph_Bkg) # Efficiency plot pE = plots.PlotBase(efficiencyList, saveFormats=["pdf"]) pE.createFrame("QGLR_Efficiency") pE.setEnergy("13") pE.getFrame().GetYaxis().SetLabelSize(18) pE.getFrame().GetXaxis().SetLabelSize(20) pE.getFrame().GetYaxis().SetTitle("Efficiency / 0.01") pE.getFrame().GetXaxis().SetTitle("QGLR Cut") # Add Standard Texts to plot histograms.addStandardTexts() # Customise Legend moveLegend = {"dx": -0.50, "dy": -0.5, "dh": -0.1} pE.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) pE.draw() # plots.drawPlot(pE, "QGLR_Efficiency", **kwargs) SavePlot(pE, "QGLR_Efficiency", os.path.join(opts.saveDir, opts.optMode), saveFormats=[".png", ".pdf"]) #========================================================================================== # Calculate Significance #========================================================================================== SignalName = "ChargedHiggs_HplusTB_HplusToTB_M_800" hSignif_250 = p.histoMgr.getHisto(SignalName).getRootHisto().Clone( SignalName) hSignif_500 = p.histoMgr.getHisto(SignalName).getRootHisto().Clone( SignalName) hSignif_800 = p.histoMgr.getHisto(SignalName).getRootHisto().Clone( SignalName) hSignif_1000 = p.histoMgr.getHisto(SignalName).getRootHisto().Clone( SignalName) hSignif_250.Reset() hSignif_500.Reset() hSignif_800.Reset() hSignif_1000.Reset() hBkg = p.histoMgr.getHisto(SignalName).getRootHisto().Clone("Bkg") hBkg.Reset() # Bkg: FakeB + Genuine B hBkg.Add(hFakeB.getRootHisto(), +1) hBkg.Add(hGenuineB.getRootHisto(), +1) nBins = hSignif_250.GetNbinsX() + 1 # For-loop: All histo bins for i in range(1, nBins + 1): sigmaB = ROOT.Double(0) b = hBkg.IntegralAndError(i, nBins, sigmaB) s_250 = hSignal_250.Integral(i, nBins) s_500 = hSignal_500.Integral(i, nBins) s_800 = hSignal_800.Integral(i, nBins) s_1000 = hSignal_1000.Integral(i, nBins) # Calculate significance signif_250 = stat.significance(s_250, b, sigmaB, option="Simple") #Asimov") signif_500 = stat.significance(s_500, b, sigmaB, option="Simple") #Asimov") signif_800 = stat.significance(s_800, b, sigmaB, option="Simple") #Asimov") signif_1000 = stat.significance(s_1000, b, sigmaB, option="Simple") #"Asimov") # Set signif for this bin hSignif_250.SetBinContent(i, signif_250) hSignif_500.SetBinContent(i, signif_500) hSignif_800.SetBinContent(i, signif_800) hSignif_1000.SetBinContent(i, signif_1000) # Apply style s_250 = styles.getSignalStyleHToTB_M("200") s_250.apply(hSignif_250) s_500 = styles.getSignalStyleHToTB_M("500") s_500.apply(hSignif_500) s_800 = styles.getSignalStyleHToTB_M("800") s_800.apply(hSignif_800) s_1000 = styles.getSignalStyleHToTB_M("1000") s_1000.apply(hSignif_1000) hList = [] hList.append(hSignif_250) hList.append(hSignif_500) hList.append(hSignif_800) hList.append(hSignif_1000) hSignif_250.SetName("H^{+} m_{H^{+}} = 250 GeV") hSignif_500.SetName("H^{+} m_{H^{+}} = 500 GeV") hSignif_800.SetName("H^{+} m_{H^{+}} = 800 GeV") hSignif_1000.SetName("H^{+} m_{H^{+}} = 1000 GeV") pS = plots.PlotBase(hList, saveFormats=["png", "pdf"]) pS.setLuminosity(opts.intLumi) # Drawing style pS.histoMgr.setHistoDrawStyleAll("HIST") pS.histoMgr.setHistoLegendStyleAll("L") pS.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMarkerSize(1.0)) pS.histoMgr.forEachHisto( lambda h: h.getRootHisto().SetLineStyle(ROOT.kSolid)) pS.histoMgr.forEachHisto( lambda h: h.getRootHisto().SetMarkerStyle(ROOT.kFullCircle)) # Draw the plot name = "QGLR_Signif" + "GE" plots.drawPlot(pS, name, **kwargs) SavePlot(pS, name, os.path.join(opts.saveDir, opts.optMode), saveFormats=[".png", ".pdf"]) #========================================================================================= # Calculate the Transfer Factor (TF) and save to file #========================================================================================= Verbose("Write the normalisation factors to a python file", True) fileName = os.path.join( opts.mcrab, "FakeBTransferFactors%s.py" % (getModuleInfoString(opts))) manager.writeNormFactorFile(fileName, opts) return
def analyze(analysis=None): paths = [sys.argv[1]] if not analysis == None: datasets = dataset.getDatasetsFromMulticrabDirs( paths, analysisName=analysis, excludeTasks="Silver|GluGluHToTauTau_M125") else: datasets = dataset.getDatasetsFromMulticrabDirs( paths, excludeTasks="Silver|GluGluHToTauTau_M125") analysis = datasets.getAllDatasets()[0].getAnalysisName() # datasetsDY = None datasetsDY = dataset.getDatasetsFromMulticrabDirs( paths, analysisName=analysis, includeOnlyTasks="DYJetsToLL") # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,excludeTasks="GluGluHToTauTau_M125|TTJets") datasetsH125 = None # datasetsH125 = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="GluGluHToTauTau_M125",emptyDatasetsAsNone=True) # datasetsH125 = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="GluGluHToTauTau_M125") datasets.loadLuminosities() style = tdrstyle.TDRStyle() dataset1 = datasets.getDataDatasets() dataset2 = dataset1 # dataset2 = datasets.getMCDatasets() if not datasetsDY == None: dataset2 = datasetsDY.getMCDatasets() eff1 = getEfficiency(dataset1) eff2 = getEfficiency(dataset2) if isinstance(datasetsH125, dataset.DatasetManager): eff3 = getEfficiency(datasetsH125.getMCDatasets()) styles.dataStyle.apply(eff1) styles.mcStyle.apply(eff2) eff1.SetMarkerSize(1) # eff2.SetMarkerSize(1.5) if isinstance(datasetsH125, dataset.DatasetManager): styles.mcStyle.apply(eff3) eff3.SetMarkerSize(1.5) eff3.SetMarkerColor(4) eff3.SetLineColor(4) # p = plots.ComparisonPlot(histograms.HistoGraph(eff1, "eff1", "p", "P"), # histograms.HistoGraph(eff2, "eff2", "p", "P")) if isinstance(datasetsH125, dataset.DatasetManager): p = plots.ComparisonManyPlot( histograms.HistoGraph(eff1, "eff1", "p", "P"), [ histograms.HistoGraph(eff2, "eff2", "p", "P"), histograms.HistoGraph(eff3, "eff3", "p", "P") ]) elif isinstance(datasetsDY, dataset.DatasetManager): p = plots.ComparisonPlot(histograms.HistoGraph(eff1, "eff1", "p", "P"), histograms.HistoGraph(eff2, "eff2", "p", "P")) else: p = plots.PlotBase([histograms.HistoGraph(eff1, "eff1", "p", "P")]) fit("Data", p, eff1, 20, 200) fit("MC", p, eff2, 20, 200) if isinstance(datasetsH125, dataset.DatasetManager): fit("H125", p, eff3, 20, 200) opts = {"ymin": 0, "ymax": 1.1} opts2 = {"ymin": 0.5, "ymax": 1.5} # moveLegend = {"dx": -0.55, "dy": -0.15, "dh": -0.1} moveLegend = {"dx": -0.2, "dy": -0.5, "dh": -0.1} name = "TauMET_" + analysis + "_DataVsMC_PFTauPt" legend1 = "Data" # legend2 = "MC (DY)" legend2 = "Simulation" legend3 = "MC (H125)" createRatio = False p.histoMgr.setHistoLegendLabelMany({"eff1": legend1}) if isinstance(datasetsDY, dataset.DatasetManager): p.histoMgr.setHistoLegendLabelMany({"eff1": legend1, "eff2": legend2}) createRatio = True if isinstance(datasetsH125, dataset.DatasetManager): p.histoMgr.setHistoLegendLabelMany({ "eff1": legend1, "eff2": legend2, "eff3": legend3 }) if createRatio: p.createFrame(os.path.join(plotDir, name), createRatio=createRatio, opts=opts, opts2=opts2) else: p.createFrame(os.path.join(plotDir, name), opts=opts, opts2=opts2) p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) p.getFrame().GetYaxis().SetTitle("HLT tau efficiency") # p.getFrame().GetXaxis().SetTitle("#tau-jet p_{T} (GeV/c)") p.getFrame().GetXaxis().SetTitle("#tau_{h} p_{T} (GeV/c)") if createRatio: p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.5, 0.6, "LooseIsoPFTau50_Trk30_eta2p1", 17) # label = analysis.split("_")[len(analysis.split("_")) -1] label = "2016" histograms.addText(0.5, 0.53, label, 17) runRange = datasets.loadRunRange() histograms.addText(0.5, 0.46, "Runs " + runRange, 17) p.draw() lumi = 0.0 for d in datasets.getDataDatasets(): print "luminosity", d.getName(), d.getLuminosity() lumi += d.getLuminosity() print "luminosity, sum", lumi histograms.addStandardTexts(lumi=lumi) if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats) pythonWriter.addParameters(plotDir, label, runRange, lumi, eff1) pythonWriter.addMCParameters(label, eff2) pythonWriter.writeJSON( os.path.join(plotDir, "tauLegTriggerEfficiency_" + label + ".json")) # if not createRatio: # sys.exit() ######################################################################### eff1eta = getEfficiency(dataset1, "NumeratorEta", "DenominatorEta") eff2eta = getEfficiency(dataset2, "NumeratorEta", "DenominatorEta") if isinstance(datasetsH125, dataset.DatasetManager): eff3eta = getEfficiency(datasetsH125.getMCDatasets(), "NumeratorEta", "DenominatorEta") styles.dataStyle.apply(eff1eta) styles.mcStyle.apply(eff2eta) eff1eta.SetMarkerSize(1) if isinstance(datasetsH125, dataset.DatasetManager): styles.mcStyle.apply(eff3eta) eff3eta.SetMarkerSize(1.5) eff3eta.SetMarkerColor(4) eff3eta.SetLineColor(4) if isinstance(datasetsH125, dataset.DatasetManager): p_eta = plots.ComparisonManyPlot( histograms.HistoGraph(eff1eta, "eff1eta", "p", "P"), [ histograms.HistoGraph(eff2eta, "eff2eta", "p", "P"), histograms.HistoGraph(eff3eta, "eff3eta", "p", "P") ]) elif isinstance(datasetsDY, dataset.DatasetManager): p_eta = plots.ComparisonPlot( histograms.HistoGraph(eff1eta, "eff1eta", "p", "P"), histograms.HistoGraph(eff2eta, "eff2eta", "p", "P")) else: p_eta = plots.PlotBase( [histograms.HistoGraph(eff1eta, "eff1eta", "p", "P")]) p_eta.histoMgr.setHistoLegendLabelMany({"eff1eta": legend1}) if isinstance(datasetsDY, dataset.DatasetManager): p_eta.histoMgr.setHistoLegendLabelMany({ "eff1eta": legend1, "eff2eta": legend2 }) if isinstance(datasetsH125, dataset.DatasetManager): p_eta.histoMgr.setHistoLegendLabelMany({ "eff1eta": legend1, "eff2eta": legend2, "eff3eta": legend3 }) name = "TauMET_" + analysis + "_DataVsMC_PFTauEta" if createRatio: p_eta.createFrame(os.path.join(plotDir, name), createRatio=createRatio, opts=opts, opts2=opts2) else: p_eta.createFrame(os.path.join(plotDir, name), opts=opts, opts2=opts2) moveLegendEta = {"dx": -0.5, "dy": -0.65, "dh": -0.1} p_eta.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegendEta)) p_eta.getFrame().GetYaxis().SetTitle("HLT tau efficiency") p_eta.getFrame().GetXaxis().SetTitle("#tau-jet #eta") if createRatio: p_eta.getFrame2().GetYaxis().SetTitle("Ratio") p_eta.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.2, 0.46, "LooseIsoPFTau50_Trk30_eta2p1", 17) histograms.addText(0.2, 0.38, label, 17) histograms.addText(0.2, 0.31, "Runs " + datasets.loadRunRange(), 17) p_eta.draw() histograms.addStandardTexts(lumi=lumi) p_eta.save(formats) ######################################################################### eff1phi = getEfficiency(dataset1, "NumeratorPhi", "DenominatorPhi") eff2phi = getEfficiency(dataset2, "NumeratorPhi", "DenominatorPhi") if isinstance(datasetsH125, dataset.DatasetManager): eff3phi = getEfficiency(datasetsH125.getMCDatasets(), "NumeratorPhi", "DenominatorPhi") styles.dataStyle.apply(eff1phi) styles.mcStyle.apply(eff2phi) eff1phi.SetMarkerSize(1) if isinstance(datasetsH125, dataset.DatasetManager): styles.mcStyle.apply(eff3phi) eff3phi.SetMarkerSize(1.5) eff3phi.SetMarkerColor(4) eff3phi.SetLineColor(4) if isinstance(datasetsH125, dataset.DatasetManager): p_phi = plots.ComparisonManyPlot( histograms.HistoGraph(eff1phi, "eff1phi", "p", "P"), [ histograms.HistoGraph(eff2phi, "eff2phi", "p", "P"), histograms.HistoGraph(eff3phi, "eff3phi", "p", "P") ]) elif isinstance(datasetsDY, dataset.DatasetManager): p_phi = plots.ComparisonPlot( histograms.HistoGraph(eff1phi, "eff1phi", "p", "P"), histograms.HistoGraph(eff2phi, "eff2phi", "p", "P")) else: p_phi = plots.PlotBase( [histograms.HistoGraph(eff1phi, "eff1phi", "p", "P")]) p_phi.histoMgr.setHistoLegendLabelMany({"eff1phi": legend1}) if isinstance(datasetsDY, dataset.DatasetManager): p_phi.histoMgr.setHistoLegendLabelMany({ "eff1phi": legend1, "eff2phi": legend2 }) if isinstance(datasetsH125, dataset.DatasetManager): p_phi.histoMgr.setHistoLegendLabelMany({ "eff1phi": legend1, "eff2phi": legend2, "eff3phi": legend3 }) name = "TauMET_" + analysis + "_DataVsMC_PFTauPhi" if createRatio: p_phi.createFrame(os.path.join(plotDir, name), createRatio=createRatio, opts=opts, opts2=opts2) else: p_phi.createFrame(os.path.join(plotDir, name), opts=opts, opts2=opts2) moveLegendPhi = {"dx": -0.5, "dy": -0.65, "dh": -0.1} p_phi.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegendPhi)) p_phi.getFrame().GetYaxis().SetTitle("HLT tau efficiency") p_phi.getFrame().GetXaxis().SetTitle("#tau-jet #phi") if createRatio: p_phi.getFrame2().GetYaxis().SetTitle("Ratio") p_phi.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.2, 0.46, "LooseIsoPFTau50_Trk30_eta2p1", 17) histograms.addText(0.2, 0.38, label, 17) histograms.addText(0.2, 0.31, "Runs " + datasets.loadRunRange(), 17) p_phi.draw() histograms.addStandardTexts(lumi=lumi) p_phi.save(formats) ######################################################################### namePU = "TauMET_" + analysis + "_DataVsMC_nVtx" eff1PU = getEfficiency(dataset1, "NumeratorPU", "DenominatorPU") eff2PU = getEfficiency(dataset2, "NumeratorPU", "DenominatorPU") styles.dataStyle.apply(eff1PU) styles.mcStyle.apply(eff2PU) eff1PU.SetMarkerSize(1) eff2PU.SetMarkerSize(1.5) if isinstance(datasetsDY, dataset.DatasetManager): pPU = plots.ComparisonManyPlot( histograms.HistoGraph(eff1PU, "eff1", "p", "P"), [histograms.HistoGraph(eff2PU, "eff2", "p", "P")]) pPU.histoMgr.setHistoLegendLabelMany({ "eff1": legend1, "eff2": legend2 }) else: pPU = plots.PlotBase([histograms.HistoGraph(eff1PU, "eff1", "p", "P")]) pPU.histoMgr.setHistoLegendLabelMany({"eff1": legend1}) optsPU = {"ymin": 0.01, "ymax": 1.0} createRatio = False if createRatio: pPU.createFrame(os.path.join(plotDir, namePU), createRatio=True, opts=optsPU, opts2=opts2) else: pPU.createFrame(os.path.join(plotDir, namePU), opts=optsPU, opts2=opts2) moveLegend = {"dx": -0.5, "dy": -0.5, "dh": -0.1} pPU.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) # if createRatio: # pPU.getPad1().SetLogy(True) # else: # pPU.getPad().SetLogy(True) pPU.getFrame().GetYaxis().SetTitle("HLT tau efficiency") pPU.getFrame().GetXaxis().SetTitle("Number of reco vertices") if createRatio: pPU.getFrame2().GetYaxis().SetTitle("Ratio") pPU.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.2, 0.6, "LooseIsoPFTau50_Trk30_eta2p1", 17) histograms.addText(0.2, 0.53, label, 17) histograms.addText(0.2, 0.46, "Runs " + datasets.loadRunRange(), 17) pPU.draw() histograms.addStandardTexts(lumi=lumi) pPU.save(formats) ######################################################################### """ hName = "Pull" # hName = "Sub" namePull = "TauMET_"+analysis+"_DataVsMC_"+hName+"s" plots.mergeRenameReorderForDataMC(datasets) datasets.merge("MC", ["TT","WJets","DYJetsToLL","SingleTop","QCD"], keepSources=True) drh1 = datasets.getDataset("Data").getDatasetRootHisto(hName) drh2 = datasets.getDataset("MC").getDatasetRootHisto(hName) drh1.normalizeToOne() drh2.normalizeToOne() pull1 = drh1.getHistogram() pull2 = drh2.getHistogram() if isinstance(datasetsH125,dataset.DatasetManager): plots.mergeRenameReorderForDataMC(datasetsH125) drh3 = datasetsH125.getMCDatasets()[0].getDatasetRootHisto(hName) drh3.normalizeToOne() pull3 = drh3.getHistogram() styles.dataStyle.apply(pull1) styles.mcStyle.apply(pull2) pull1.SetMarkerSize(1) if isinstance(datasetsH125,dataset.DatasetManager): styles.mcStyle.apply(pull3) pull3.SetMarkerSize(1.5) pull3.SetMarkerColor(4) pull3.SetLineColor(4) if isinstance(datasetsH125,dataset.DatasetManager): p_pull = plots.ComparisonManyPlot(histograms.Histo(pull1, "pull1", "p", "P"), [histograms.Histo(pull2, "pull2", "p", "P"), histograms.Histo(pull3, "pull3", "p", "P")]) else: p_pull = plots.ComparisonPlot(histograms.Histo(pull1, "pull1", "p", "P"), histograms.Histo(pull2, "pull2", "p", "P")) p_pull.histoMgr.setHistoLegendLabelMany({"pull1": legend1, "pull2": legend2}) if isinstance(datasetsH125,dataset.DatasetManager): p_pull.histoMgr.setHistoLegendLabelMany({"pull1": legend1, "pull2": legend2, "pull3": legend3}) p_pull.createFrame(os.path.join(plotDir, namePull), createRatio=True, opts=opts, opts2=opts2) moveLegendPull = {"dx": -0.5, "dy": -0.35, "dh": -0.1} p_pull.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegendPull)) p_pull.getFrame().GetYaxis().SetTitle("Arbitrary units") # p_pull.getFrame().GetXaxis().SetTitle("HLT #tau p_{T} - #tau-jet p_{T} (GeV/c)") p_pull.getFrame().GetXaxis().SetTitle("HLT #tau p_{T}/ #tau-jet p_{T} - 1") p_pull.getFrame2().GetYaxis().SetTitle("Ratio") p_pull.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.2, 0.75, "LooseIsoPFTau50_Trk30_eta2p1", 17) histograms.addText(0.2, 0.68, analysis.split("_")[len(analysis.split("_")) -1], 17) histograms.addText(0.2, 0.61, "Runs "+runRange, 17) p_pull.draw() histograms.addStandardTexts(lumi=lumi) p_pull.save(formats) """ ######################################################################### print "Output written in", plotDir
def main(argv): dirs = [] if len(sys.argv) < 2: usage() dirs.append(sys.argv[1]) QCDInvertedNormalization = QCDInvertedNormalizationFactors.QCDInvertedNormalization QCDInvertedNormalizationFilteredEWKFakeTaus = QCDInvertedNormalizationFactorsFilteredEWKFakeTaus.QCDInvertedNormalization analysis = "signalAnalysisInvertedTau" optModes = [] #optModes.append("OptQCDTailKillerZeroPlus") optModes.append("OptQCDTailKillerLoosePlus") optModes.append("OptQCDTailKillerMediumPlus") optModes.append("OptQCDTailKillerTightPlus") #optModes.append("OptQCDTailKillerVeryTightPlus") #optModes.append("OnlyGenuineMCTausFalse") #optModes.append("OnlyGenuineMCTausTrue") #Optimal: 0.8, 0.82, 0.9 #w1_list = [0.8, 0.82, 0.84, 0.87] #w1_list = [0.8, 0.82, 0.9, 1] w1_list = [0.9] defaultBinning = systematics.getBinningForPlot("shapeTransverseMass") diff_opt = [] for optMode in optModes: diff_list = [] for w1 in w1_list: var_values = [] nom_values = [] w2 = 1 - w1 color = 1 #signal dirs_signal = ["../../SignalAnalysis_140605_143702/"] datasets_signal = dataset.getDatasetsFromMulticrabDirs( dirs_signal, dataEra=dataEra, searchMode=searchMode, analysisName=analysis.replace("InvertedTau", ""), optimizationMode=optMode) datasets_signal.updateNAllEventsToPUWeighted() datasets_signal.loadLuminosities() datasets_signal.remove( filter(lambda name: "TTToHplus" in name, datasets_signal.getAllDatasetNames())) datasets_signal.remove( filter(lambda name: "HplusTB" in name, datasets_signal.getAllDatasetNames())) datasets_signal.remove( filter(lambda name: "Hplus_taunu_t-channel" in name, datasets_signal.getAllDatasetNames())) datasets_signal.remove( filter(lambda name: "Hplus_taunu_tW-channel" in name, datasets_signal.getAllDatasetNames())) datasets_signal.remove( filter(lambda name: "TTJets_SemiLept" in name, datasets_signal.getAllDatasetNames())) datasets_signal.remove( filter(lambda name: "TTJets_FullLept" in name, datasets_signal.getAllDatasetNames())) datasets_signal.remove( filter(lambda name: "TTJets_Hadronic" in name, datasets_signal.getAllDatasetNames())) plots.mergeRenameReorderForDataMC(datasets_signal) datasets_signal.merge( "EWK", ["TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson"]) mtplot_signalfaketaus = plots.DataMCPlot( datasets_signal, "shapeEWKFakeTausTransverseMass") mt_signalfaketaus = mtplot_signalfaketaus.histoMgr.getHisto( "EWK").getRootHisto().Clone("shapeEWKFakeTausTransverseMass") mt_signalfaketaus.SetName("BaselineFakeTaus") myBinning = [0, 20, 40, 60, 80, 100, 120, 140, 160, 200, 400] myArray = array.array("d", myBinning) fitBinning = [] for i in range(0, 45): fitBinning.append(i * 10) fitArray = array.array("d", fitBinning) mt_baseline = mt_signalfaketaus #rangeMin = mt_signalfaketaus.GetXaxis().GetXmin() #rangeMax = mt_signalfaketaus.GetXaxis().GetXmax() #theFit = TF1('theFit',FitFunction(),rangeMin,rangeMax,4) #theFit.SetParLimits(0,0.5,10000) #theFit.SetParLimits(1,90,10000) #theFit.SetParLimits(2,30,10000) #theFit.SetParLimits(3,0.001,10000) #mt_signalfaketaus.Fit(theFit,"R") #theFit.SetRange(mt_signalfaketaus.GetXaxis().GetXmin(),mt_signalfaketaus.GetXaxis().GetXmax()) #theFit.SetLineStyle(2) #theFit.SetLineColor(4) #theFit.SetLineWidth(3) #theFit.Draw() #mt_corr = theFit.GetHistogram() #mt_corr = mt_corr.Rebin(len(fitBinning)-1,"",fitArray) #mt_corr.Scale(mt_baseline.GetMaximum()/mt_corr.GetMaximum()) for HISTONAME in histoNameList: var = False if HISTONAME == "shapeEWKGenuineTausTransverseMass": var = True datasets = dataset.getDatasetsFromMulticrabDirs( dirs, dataEra=dataEra, searchMode=searchMode, analysisName=analysis, optimizationMode=optMode) datasets.updateNAllEventsToPUWeighted() datasets.loadLuminosities() plots.mergeRenameReorderForDataMC(datasets) datasets.merge( "EWK", ["TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson"]) histonames = datasets.getDataset("Data").getDirectoryContent( HISTONAME) bins = [] for histoname in histonames: binname = histoname.replace(HISTONAME, "") if not binname == "Inclusive": bins.append(binname) for i, bin in enumerate(bins): mtplot = plots.DataMCPlot( datasets, HISTONAME + "/" + HISTONAME + bin) if i == 0: mt = mtplot.histoMgr.getHisto( "Data").getRootHisto().Clone(HISTONAME + "/" + HISTONAME + bin) mt_ewk = mtplot.histoMgr.getHisto( "EWK").getRootHisto().Clone(HISTONAME + "/" + HISTONAME + bin) mtn = mtplot.histoMgr.getHisto( "Data").getRootHisto().Clone(HISTONAME + "/" + HISTONAME + bin) mtn_ewk = mtplot.histoMgr.getHisto( "EWK").getRootHisto().Clone(HISTONAME + "/" + HISTONAME + bin) if var: legendName = "QCD(Data)+EWK+t#bar{t}(Data, mis-ID. #tau)" else: legendName = "QCD(Data)+EWK+t#bar{t}(MC, mis-ID. #tau)" legendName = legendName.replace("Plus", "") mt.SetName(legendName) mt.SetLineColor(color) mt.Add(mt_ewk, -1) mtn.Add(mtn_ewk, -1) mtn.Scale(QCDInvertedNormalization[str(i)]) if var: scale = w1 * QCDInvertedNormalizationFilteredEWKFakeTaus[ str( i )] + w2 * QCDInvertedNormalizationFilteredEWKFakeTaus[ str(i) + "EWK_FakeTaus"] mt.Scale(scale) else: mt.Scale(QCDInvertedNormalization[str(i)]) color += 1 if color == 5: color += 1 else: h = mtplot.histoMgr.getHisto( "Data").getRootHisto().Clone(HISTONAME + "/" + HISTONAME + bin) mt_ewk = mtplot.histoMgr.getHisto( "EWK").getRootHisto().Clone(HISTONAME + "/" + HISTONAME + bin) hn = mtplot.histoMgr.getHisto( "Data").getRootHisto().Clone(HISTONAME + "/" + HISTONAME + bin) mtn_ewk = mtplot.histoMgr.getHisto( "EWK").getRootHisto().Clone(HISTONAME + "/" + HISTONAME + bin) h.Add(mt_ewk, -1) hn.Add(mtn_ewk, -1) hn.Scale(QCDInvertedNormalization[str(i)]) if var: scale = w1 * QCDInvertedNormalizationFilteredEWKFakeTaus[ str( i )] + w2 * QCDInvertedNormalizationFilteredEWKFakeTaus[ str(i) + "EWK_FakeTaus"] h.Scale(scale) else: h.Scale(QCDInvertedNormalization[str(i)]) mt.Add(h) mtn.Add(hn) #mt = mt.Rebin(len(myBinning)-1,"",myArray) #mt_corr = mt_corr.Rebin(len(myBinning)-1,"",myArray) if not var: mt.Add(mt_baseline) #mt.Add(mt_corr) #myBinning = [] #for i in range(0,11): # myBinning.append(20*i) #myBinning.append(400) #myArray = array.array("d",defaultBinning) mt = mt.Rebin(len(myBinning) - 1, "", myArray) for i in range(0, mt.GetSize()): if var: var_values.append(mt.GetBinContent(i)) else: nom_values.append(mt.GetBinContent(i)) if var: #mt.SetLineStyle(2) var_hist = mt else: #mt.SetLineStyle(2) nom_hist = mt style = tdrstyle.TDRStyle() #gStyle.SetOptStat(1101) #mt_data.SetStats(1) #gPad.Update() bins = [0, 390, 400] arr = array.array("d", bins) mtn = mtn.Rebin(len(bins) - 1, "", arr) plot_data = plots.PlotBase() plot_data.histoMgr.appendHisto(histograms.Histo(mtn, "Data")) plot_data.createFrame("Data_" + HISTONAME + "_" + optMode + "_" + str(w1)) plot_data.draw() plot_data.save() plot = plots.ComparisonPlot(nom_hist, var_hist) plot.createFrame(optMode.replace( "Opt", "Mt_" + "w1=" + str(w1) + "_w2=" + str(w2) + "_DataDrivenVsMC_"), createRatio=True) moveLegend = {"dx": -0.295, "dy": 0.05} plot.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) histograms.addText( 0.65, 0.20, optMode.replace("OptQCDTailKiller", "R_{BB} ").replace("Plus", ""), 25) histograms.addCmsPreliminaryText() histograms.addEnergyText() lumi = datasets.getDataset("Data").getLuminosity() histograms.addLuminosityText(x=None, y=None, lumi=lumi) plot.draw() plot.save() num = 0 denom = 0 #print var_values for i in range(0, len(nom_values)): num += var_values[i] * (var_values[i] - nom_values[i])**2 denom += var_values[i] diff = num / denom diff_list.append(diff) diff_opt.append(diff_list) print w1_list, '\n' for i in range(0, len(diff_opt)): print diff_opt[i] print w1_list[diff_opt[i].index(min(diff_opt[i]))] mt_baseline = mt_baseline.Rebin(len(bins) - 1, "", arr) plot_bft = plots.PlotBase() plot_bft.histoMgr.appendHisto(histograms.Histo(mt_baseline, "baseline")) #mt_corr.Scale(2) #plot_bft.histoMgr.appendHisto(histograms.Histo(mt_corr,"test")) #rangeMin = mt_signalfaketaus.GetXaxis().GetXmin() #rangeMax = mt_signalfaketaus.GetXaxis().GetXmax() #theFit = TF1('theFit',FitFunction(),rangeMin,rangeMax,4) #theFit.SetParLimits(0,0.5,10000) #theFit.SetParLimits(1,90,10000) #theFit.SetParLimits(2,30,10000) #theFit.SetParLimits(3,0.001,10000) #mt_signalfaketaus.Fit(theFit,"R") #theFit.SetRange(mt_signalfaketaus.GetXaxis().GetXmin(),mt_signalfaketaus.GetXaxis().GetXmax()) #theFit.SetLineStyle(2) #theFit.SetLineColor(4) #theFit.SetLineWidth(3) #theFit.Draw() #mt_corr = theFit.GetHistogram() #mt_corr = mt_corr.Rebin(len(fitBinning)-1,"",fitArray) #mt_corr.Scale(mt_baseline.GetMaximum()/mt_corr.GetMaximum()) #plot_bft.histoMgr.appendHisto(histograms.Histo(mt_corr,"test")) #plot_bft.histoMgr.appendHisto(histograms.Histo(theFit,"theFit")) plot_bft.createFrame('BaselineFakeTaus') plot_bft.draw() plot_bft.save()
def Plot2d(datasetsMgr, dataset, histoName, kwargs, opts): ''' ''' # Definitions saveName = histoName.replace("/", "_") # Get Histos for the plotter object refHisto = GetHisto(datasetsMgr, dataset, histoName) # Create the plotting object p = plots.PlotBase(datasetRootHistos=[refHisto], saveFormats=kwargs.get("saveFormats")) if 0: p.histoMgr.normalizeMCToLuminosity(opts.intLumi) # Customise axes (before drawing histo) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinX(kwargs.get("rebinX"))) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinY(kwargs.get("rebinY"))) if 0: p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetXaxis().SetTitle(kwargs.get("xlabel"))) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetYaxis().SetTitle(kwargs.get("ylabel"))) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetXaxis().SetTitle( h.getRootHisto().GetXaxis().GetTitle() + "%0.1f" )) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetXaxis().SetRangeUser(kwargs.get("xmin"), kwargs.get("xmax"))) #p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetYaxis().SetRangeUser(kwargs.get("ymin"), kwargs.get("ymax"))) #p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetYaxis().SetRangeUser(kwargs.get("ymin"), kwargs.get("ymax"))) #p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetZaxis().SetRangeUser(kwargs.get("zmin"), kwargs.get("zmax"))) # Create a frame fOpts = {"ymin": 0.0, "ymaxfactor": 1.0} p.createFrame(saveName, opts=fOpts) # SetLog SetLogAndGrid(p, **kwargs) # Add cut line/box if 1: _kwargs = { "lessThan": True} p.addCutBoxAndLine(cutValue=400.0, fillColor=ROOT.kGray, box=False, line=True, **_kwargs) p.addCutBoxAndLineY(cutValue=200.0, fillColor=ROOT.kGray, box=False, line=True, **_kwargs) # Customise Legend moveLegend = {"dx": -0.1, "dy": +0.0, "dh": -0.1} p.setLegend(histograms.moveLegend(histograms.createLegend(), **kwargs.get("moveLegend"))) p.removeLegend() # Customise histogram (after frame is created) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetZaxis().SetTitle("Events")) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetZaxis().SetTitleOffset(1.4)) #ROOT.gPad.RedrawAxis() p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMinimum(kwargs.get("zmin"))) #p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMaximum(kwargs.get("zmax"))) # Drawing style p.histoMgr.setHistoDrawStyle(dataset, "COLZ") p.histoMgr.setHistoDrawStyleAll("COLZ") # The lines below do nothing since the Legend is disabled if 0: p.histoMgr.setHistoLegendStyle(dataset, "F") if "FakeB" in dataset: p.histoMgr.setHistoLegendLabelMany({ dataset: "QCD (Data)", }) if dataset == "QCD": p.histoMgr.setHistoLegendLabelMany({ dataset: "QCD (MC)", }) # Draw the plot p.draw() # Add canvas text if kwargs.get("addLuminosityText"): histograms.addStandardTexts(lumi=opts.intLumi) else: histograms.addStandardTexts() # Add dataset name on the canvas if dataset == "QCD": histograms.addText(0.17, 0.88, "QCD (H_{T} binned)", 27) else: histograms.addText(0.17, 0.88, plots._legendLabels[dataset], 27) # Save the plots SavePlot(p, saveName, os.path.join(opts.saveDir, opts.analysisName, opts.folder, dataset, opts.optMode), [".png", ".pdf"] ) return
def main(): style = tdrstyle.TDRStyle() # Set ROOT batch mode boolean ROOT.gROOT.SetBatch(parseOpts.batchMode) ROOT.gErrorIgnoreLevel = 3000 # Get all datasets from the mcrab dir datasetsMgr = GetDatasetsFromDir(parseOpts.mcrab, kwargs.get("analysis")) # datasetsMgr = dataset.getDatasetsFromMulticrabDirs([parseOpts.mcrab], analysisName=kwargs.get("analysis"), includeOnlyTasks="ChargedHiggs_HplusTB_HplusToTB_M_200") # datasetsMgr = dataset.getDatasetsFromMulticrabDirs([parseOpts.mcrab], analysisName=kwargs.get("analysis"), excludeTasks="M_200") # Determine Integrated Luminosity intLumi = GetLumi(datasetsMgr) # Update to PU datasetsMgr.updateNAllEventsToPUWeighted() # Remove datasets datasetsMgr.remove(kwargs.get("rmDataset")) # datasetsMgr.remove(filter(lambda name: not "QCD" in name, datasetsMgr.getAllDatasetNames())) # datasetsMgr.remove(filter(lambda name: "QCD" in name in name, datasetsMgr.getAllDatasetNames())) # Set custom XSections # datasetsMgr.getDataset("TT_ext3").setCrossSection(831.76) # Default merging & ordering: "Data", "QCD", "SingleTop", "Diboson" plots.mergeRenameReorderForDataMC( datasetsMgr ) #WARNING: Merged MC histograms must be normalized to something! # Remove datasets (for merged names) datasetsMgr.remove(kwargs.get("rmDataset")) # datasetsMgr.remove(filter(lambda name: not "QCD" in name, datasetsMgr.getAllDatasetNames())) # datasetsMgr.remove(filter(lambda name: "QCD" in name in name, datasetsMgr.getAllDatasetNames())) # For-loop: All Histogram names for hName in hNames: savePath, saveName = GetSavePathAndName(hName, **kwargs) # Get efficiency histos refEff, otherEff = GetCutEfficiencyTGraphs(datasetsMgr, hName, "kFCP", **kwargs) # refEff, otherEff = GetCutEfficiencyTGraphs(datasetsMgr, hName, "kFFC", **kwargs) # refEff, otherEff = GetCutEfficiencyTGraphs(datasetsMgr, hName, "kBJeffrey", **kwargs) # refEff, otherEff = GetCutEfficiencyTGraphs(datasetsMgr, hName, "kFNormal", **kwargs) # Plot the efficiencies p = plots.ComparisonManyPlot(refEff, otherEff) # Create a frame opts = {"ymin": 0.0, "ymaxfactor": 1.2} #"ymax": 5e-1} ratioOpts = {"ymin": 0.0, "ymaxfactor": 1.2} p.createFrame(saveName, createRatio=kwargs.get("createRatio"), opts=opts, opts2=ratioOpts) # Customise Legend moveLegend = {"dx": -0.1, "dy": +0.0, "dh": -0.1} p.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) #p.removeLegend() # Customise frame # p.setEnergy("13") if kwargs.get("createRatio"): p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) # SetLog SetLogAndGrid(p, **kwargs) # Add cut line/box _kwargs = {"lessThan": kwargs.get("cutLessThan")} p.addCutBoxAndLine(cutValue=kwargs.get("cutValue"), fillColor=kwargs.get("cutFillColour"), box=kwargs.get("cutBox"), line=kwargs.get("cutLine"), **_kwargs) # Move the refDataset to first in the draw order (back) histoNames = [h.getName() for h in p.histoMgr.getHistos()] p.histoMgr.reorder( filter( lambda n: plots._legendLabels[kwargs.get("refDataset")] not in n, histoNames)) # Draw plots p.draw() # Customise text histograms.addStandardTexts(lumi=intLumi) # histograms.addText(0.4, 0.9, "Alexandros Attikis", 17) # histograms.addText(0.4, 0.11, "Runs " + datasetsMgr.loadRunRange(), 17) # Save canvas under custom dir SaveAs(p, savePath, saveName, kwargs.get("saveFormats")) return
def Fit (datasets, histo, function): FitList = [] for dataset in datasets: datasetName = dataset.getName() print "Dataset = ", datasetName hh = dataset.getDatasetRootHisto(histo) hh.normalizeToOne() h = hh.getHistogram() #h = dataset.getDatasetRootHisto(histo).getHistogram() xMin = h.GetXaxis().GetXmin() xMax = h.GetXaxis().GetXmax() yMin = 0 yMax = 1.2 #statOption = ROOT.TEfficiency.kFNormal if "TT" in datasetName: if function == "gaus": fitGauss = ROOT.TF1("fitGauss", "gaus", -2.5, 2.5) # TF1 *fitBoFreq = new TF1("fitBoFreq","[0]*x+[1]",0,20); # h.Fit("gaus") #fitTest = ROOT.TF1("fitTest", "0.01", -2.5, 2.5) h.Fit("fitGauss","SRBM") #h.GetListOfFunctions().Add(fitTest) legend = "TT" legend = "a legend" print "Legend", legend saveName = histo.split("/")[-1]+"_Fit" print saveName xTitle = "fixXTitle" yTitle = "fixYTitle" yMin = 0. yMax = 0.03 xMin = -2.3 xMax = 2.3 kwargs = {} options = {"ymin": yMin , "ymax": yMax, "xmin":xMin, "xMax":xMax} FitList.append(h) #p = plots.MCPlot(dataset, h, normalizeToLumi=0, saveFormats=[], **kwargs) p = plots.PlotBase(datasetRootHistos=FitList, saveFormats=kwargs.get("saveFormats")) p.createFrame(saveName, opts=options) p.getFrame().GetXaxis().SetTitle(xTitle) p.getFrame().GetYaxis().SetTitle(yTitle) #p.histoMgr.setHistoDrawStyle(datasetName, "AP") # Set range p.getFrame().GetXaxis().SetRangeUser(xMin, xMax) moveLegend = {"dx": -0.55, "dy": -0.01, "dh": -0.1} p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) # Add Standard Texts to plot histograms.addStandardTexts() p.draw() # Save plot in all formats savePath = os.path.join(opts.saveDir, "HplusMasses", histo.split("/")[0], opts.optMode) save_path = savePath SavePlot(p, saveName, save_path) return
def doPlot(name, graphs, limits, xlabel): if "obs" in graphs.keys(): obs = graphs["obs"] excluded = ROOT.TGraph(obs) excluded.SetName("ExcludedArea") excluded.SetFillColor(ROOT.kGray) excluded.SetPoint(excluded.GetN(), obs.GetX()[obs.GetN() - 1], tanbMax) excluded.SetPoint(excluded.GetN(), obs.GetX()[0], tanbMax) excluded.SetFillColor(ROOT.kGray) excluded.SetFillStyle(3354) excluded.SetLineWidth(0) excluded.SetLineColor(ROOT.kWhite) plot = None if "obs" in graphs.keys(): plot = plots.PlotBase([ histograms.HistoGraph(graphs["obs"], "Observed", drawStyle="PL", legendStyle="lp"), histograms.HistoGraph(graphs["obs_th_plus"], "ObservedPlus", drawStyle="L", legendStyle="l"), histograms.HistoGraph(graphs["obs_th_minus"], "ObservedMinus", drawStyle="L"), histograms.HistoGraph(excluded, "Excluded", drawStyle="F", legendStyle="f"), histograms.HistoGraph(graphs["exp"], "Expected", drawStyle="L"), histograms.HistoGraph(graphs["exp1"], "Expected1", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(graphs["exp2"], "Expected2", drawStyle="F", legendStyle="fl"), ]) plot.histoMgr.setHistoLegendLabelMany({ "ObservedPlus": "Observed #pm1#sigma (th.)", "ObservedMinus": None, "Expected": None, "Expected1": "Expected median #pm 1#sigma", "Expected2": "Expected median #pm 2#sigma" }) else: plot = plots.PlotBase([ histograms.HistoGraph(graphs["exp"], "Expected", drawStyle="L"), histograms.HistoGraph(graphs["exp1"], "Expected1", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(graphs["exp2"], "Expected2", drawStyle="F", legendStyle="fl"), ]) plot.histoMgr.setHistoLegendLabelMany({ "Expected": None, "Expected1": "Expected median #pm 1#sigma", "Expected2": "Expected median #pm 2#sigma" }) plot.setLegend(histograms.createLegend(0.57, 0.155, 0.87, 0.355)) plot.createFrame(name, opts={"ymin": 0, "ymax": tanbMax}) plot.frame.GetXaxis().SetTitle(xlabel) plot.frame.GetYaxis().SetTitle(limit.tanblimit) plot.draw() plot.setLuminosity(limits.getLuminosity()) plot.addStandardTexts() size = 20 x = 0.2 histograms.addText(x, 0.9, limit.process, size=size) histograms.addText(x, 0.863, limits.getFinalstateText(), size=size) histograms.addText(x, 0.815, "MSSM m_{h}^{max}", size=size) histograms.addText(x, 0.775, limit.BRassumption, size=size) histograms.addText(x, 0.735, "#mu=%d %s" % (mu, limit.massUnit()), size=size) plot.save()
def analyze(analysis=None): paths = [sys.argv[1]] if not analysis == None: # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis, includeOnlyTasks="Tau|TT") datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis) else: datasets = dataset.getDatasetsFromMulticrabDirs(paths) analysis = datasets.getAllDatasets()[0].getAnalysisName() analysisList = [] # analysisList.append("METLeg_2016MET80_MET80") # analysisList.append("METLeg_2016ICHEP_MET90") # analysisList.append("METLeg_2016_MET90") met_re = re.compile("_(?P<met>MET\d+)$") if True: #for analysis in analysisList: met = "METX" met_match = met_re.search(analysis) if met_match: met = met_match.group("met") print "Analysis",analysis datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis) # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="Tau\S+25ns$|TTJets$") # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,excludeTasks="Tau_Run2015C|Tau\S+25ns_Silver$|DYJetsToLL|WJetsToLNu$") # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="Tau_Run2015D_PromptReco_v4_246908_260426_25ns$|DYJetsToLL_M_50$") # datasetsMC = None datasetsMC = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,excludeTasks="Tau_") for d in datasets.getAllDatasets(): print d.getName() style = tdrstyle.TDRStyle() dataset1 = datasets.getDataDatasets() dataset2 = dataset1 createRatio = False if isinstance(datasetsMC,dataset.DatasetManager): dataset2 = datasetsMC.getMCDatasets() createRatio = True eff1_MET80 = getEfficiency(dataset1) eff2_MET80 = getEfficiency(dataset2) styles.dataStyle.apply(eff1_MET80) eff1_MET80.SetMarkerSize(1) if createRatio: styles.mcStyle.apply(eff2_MET80) eff2_MET80.SetMarkerSize(1.5) if createRatio: p = plots.ComparisonPlot(histograms.HistoGraph(eff1_MET80, "eff1_MET80", "p", "P"), histograms.HistoGraph(eff2_MET80, "eff2_MET80", "p", "P")) else: p = plots.PlotBase([histograms.HistoGraph(eff1_MET80, "eff1_MET80", "p", "P")]) #from plotTauLegEfficiency import fit #fit("Data",p,eff1_MET80,20,300) #fit("MC",p,eff2_MET80,20,300) opts = {"ymin": 0, "ymax": 1.1} opts2 = {"ymin": 0.5, "ymax": 1.5} moveLegend = {"dx": -0.55, "dy": -0.15} name = "TauMET_"+analysis+"_DataVsMC_PFMET" legend1 = "Data" # legend2 = "MC (TTJets)" #legend2 = "MC" legend2 = "Simulation" if createRatio: p.histoMgr.setHistoLegendLabelMany({"eff1_MET80": legend1, "eff2_MET80": legend2}) p.createFrame(os.path.join(plotDir, name), createRatio=True, opts=opts, opts2=opts2) else: p.histoMgr.setHistoLegendLabelMany({"eff1_MET80": legend1}) p.createFrame(os.path.join(plotDir, name), opts=opts, opts2=opts2) p.setLegend(histograms.moveLegend(histograms.createLegend(y1=0.8), **moveLegend)) p.getFrame().GetYaxis().SetTitle("L1+HLT MET efficiency") p.getFrame().GetXaxis().SetTitle("MET Type 1 (GeV)") if createRatio: p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) # histograms.addText(0.2, 0.6, "LooseIsoPFTau50_Trk30_eta2p1_"+met, 17) histograms.addText(0.4, 0.87, "LooseIsoPFTau50_Trk30_eta2p1_"+met, 17) # histograms.addText(0.2, 0.53, analysis.split("_")[len(analysis.split("_")) -1], 17) # label = analysis.split("_")[1] # label = "2016" label = string.replace(analysis,"METLeg_","") histograms.addText(0.2, 0.53, label, 17) runRange = datasets.loadRunRange() histograms.addText(0.2, 0.46, "Runs "+runRange, 17) p.draw() lumi = 0.0 for d in datasets.getDataDatasets(): print "luminosity",d.getName(),d.getLuminosity() lumi += d.getLuminosity() print "luminosity, sum",lumi histograms.addStandardTexts(lumi=lumi) if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats) pythonWriter.addParameters(plotDir,label,runRange,lumi,eff1_MET80) pythonWriter.addMCParameters(label,eff2_MET80) pythonWriter.writeJSON(os.path.join(plotDir,"metLegTriggerEfficiency_"+label+".json")) ######################################################################### eff1phi = getEfficiency(dataset1,"NumeratorPhi","DenominatorPhi") eff2phi = getEfficiency(dataset2,"NumeratorPhi","DenominatorPhi") styles.dataStyle.apply(eff1phi) styles.mcStyle.apply(eff2phi) eff1phi.SetMarkerSize(1) if isinstance(datasetsMC,dataset.DatasetManager): p_phi = plots.ComparisonPlot(histograms.HistoGraph(eff1phi, "eff1phi", "p", "P"), histograms.HistoGraph(eff2phi, "eff2phi", "p", "P")) else: p_phi = plots.PlotBase([histograms.HistoGraph(eff1phi, "eff1phi", "p", "P")]) p_phi.histoMgr.setHistoLegendLabelMany({"eff1phi": legend1}) if isinstance(datasetsMC,dataset.DatasetManager): p_phi.histoMgr.setHistoLegendLabelMany({"eff1phi": legend1, "eff2phi": legend2}) opts = {"ymin": 0, "ymax": 0.3} name = "TauMET_"+analysis+"_DataVsMC_PFMETPhi" if createRatio: p_phi.createFrame(os.path.join(plotDir, name), createRatio=createRatio, opts=opts, opts2=opts2) else: p_phi.createFrame(os.path.join(plotDir, name), opts=opts, opts2=opts2) # moveLegendPhi = {"dx": -0.5, "dy": -0.6, "dh": -0.1} moveLegendPhi = {"dx": -0.55, "dy": -0.15, "dh": -0.1} p_phi.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegendPhi)) p_phi.getFrame().GetYaxis().SetTitle("L1+HLT MET efficiency") p_phi.getFrame().GetXaxis().SetTitle("MET Type 1 #phi") if createRatio: p_phi.getFrame2().GetYaxis().SetTitle("Ratio") p_phi.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.4, 0.86, "LooseIsoPFTau50_Trk30_eta2p1_"+met, 17) # histograms.addText(0.4, 0.78, analysis.split("_")[len(analysis.split("_")) -1], 17) histograms.addText(0.4, 0.78, "2016", 17) histograms.addText(0.4, 0.71, "Runs "+datasets.loadRunRange(), 17) p_phi.draw() histograms.addStandardTexts(lumi=lumi) p_phi.save(formats) ######################################################################### """ #### MET120 analysis = "METLeg_2015CD_MET120" datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis) for d in datasets.getAllDatasets(): print d.getName() style = tdrstyle.TDRStyle() dataset1 = datasets.getDataDatasets() dataset2 = datasets.getMCDatasets() eff1_MET120 = getEfficiency(dataset1) eff2_MET120 = getEfficiency(dataset2) styles.dataStyle.apply(eff1_MET120) styles.mcStyle.apply(eff2_MET120) eff1_MET120.SetMarkerSize(1) eff2_MET120.SetMarkerSize(1.5) p = plots.ComparisonPlot(histograms.HistoGraph(eff1_MET120, "eff1_MET120", "p", "P"), histograms.HistoGraph(eff2_MET120, "eff2_MET120", "p", "P")) opts = {"ymin": 0, "ymax": 1.1} opts2 = {"ymin": 0.5, "ymax": 1.5} moveLegend = {"dx": -0.55, "dy": -0.15} name = "DataVsMC_L1HLTMET_PFMET_MET120" legend1 = "Data" legend2 = "MC" p.histoMgr.setHistoLegendLabelMany({"eff1_MET120": legend1, "eff2_MET120": legend2}) p.createFrame(os.path.join(plotDir, name), createRatio=True, opts=opts, opts2=opts2) p.setLegend(histograms.moveLegend(histograms.createLegend(y1=0.8), **moveLegend)) p.getFrame().GetYaxis().SetTitle("L1+HLT MET efficiency") p.getFrame().GetXaxis().SetTitle("MET Type 1 (GeV)") p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) p.draw() lumi = 0.0 histograms.addStandardTexts(lumi=lumi) if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats) """ # CaloMET """ #### MET80 analysisc = "METLeg_2016B_CaloMET_MET80" datasetsc = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysisc) datasetsc = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysisc,excludeTasks="Tau\S+25ns_Silver$") # datasetsc = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysisc,includeOnlyTasks="Tau\S+25ns$|TTJets$") style = tdrstyle.TDRStyle() dataset1c = datasetsc.getDataDatasets() dataset2c = datasetsc.getMCDatasets() # eff1c_MET80 = getEfficiency(dataset1c) eff2c_MET80 = getEfficiency(dataset2c) # styles.dataStyle.apply(eff1c_MET80) styles.mcStyle.apply(eff2c_MET80) # eff1c_MET80.SetMarkerSize(1) eff2c_MET80.SetMarkerSize(1.5) eff2c_MET80.SetMarkerColor(4) p = plots.ComparisonPlot(histograms.HistoGraph(eff2_MET80, "eff2_MET80", "p", "P"), histograms.HistoGraph(eff2c_MET80, "eff2c_MET80", "p", "P")) namec = "TauMET_"+analysis+"_MC_TrgBitVsCaloMET80_PFMET" legend1c = "MC, trigger bit" legend2c = "MC, CaloMET > 80" p.histoMgr.setHistoLegendLabelMany({"eff2_MET80": legend1c, "eff2c_MET80": legend2c}) p.createFrame(os.path.join(plotDir, namec), createRatio=True, opts=opts, opts2=opts2) p.setLegend(histograms.moveLegend(histograms.createLegend(y1=0.8), **moveLegend)) p.getFrame().GetYaxis().SetTitle("L1+HLT MET efficiency") p.getFrame().GetXaxis().SetTitle("MET Type 1 (GeV)") p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) p.draw() lumi = 0.0 for d in datasets.getDataDatasets(): print "luminosity",d.getName(),d.getLuminosity() lumi += d.getLuminosity() print "luminosity, sum",lumi histograms.addStandardTexts(lumi=lumi) histograms.addText(0.2, 0.6, "LooseIsoPFTau50_Trk30_eta2p1_MET80", 17) if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats) """ """ #### MET120 analysisc = "METLeg_2015A_CaloMET_MET120" datasetsc = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysisc) style = tdrstyle.TDRStyle() dataset1c = datasetsc.getDataDatasets() dataset2c = datasetsc.getMCDatasets() eff1c_MET120 = getEfficiency(dataset1c) eff2c_MET120 = getEfficiency(dataset2c) styles.dataStyle.apply(eff1c_MET120) styles.mcStyle.apply(eff1c_MET120) eff1c_MET120.SetMarkerSize(1) eff2c_MET120.SetMarkerSize(1.5) p = plots.ComparisonPlot(histograms.HistoGraph(eff2_MET120, "eff2_MET120", "p", "P"), histograms.HistoGraph(eff2c_MET120, "eff2c_MET120", "p", "P")) namec = "MC_TrgBitVsCaloMET120_L1HLTMET_PFMET" legend1c = "MC, trigger bit" legend2c = "MC, CaloMET > 120" p.histoMgr.setHistoLegendLabelMany({"eff2_MET120": legend1c, "eff2c_MET120": legend2c}) p.createFrame(os.path.join(plotDir, namec), createRatio=True, opts=opts, opts2=opts2) p.setLegend(histograms.moveLegend(histograms.createLegend(y1=0.8), **moveLegend)) p.getFrame().GetYaxis().SetTitle("L1+HLT MET efficiency") p.getFrame().GetXaxis().SetTitle("MET Type 1 (GeV)") p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) p.draw() lumi = 0.0 histograms.addStandardTexts(lumi=lumi) if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats) """ ######################################################################### namePU = "TauMET_"+analysis+"_DataVsMC_nVtx" eff1PU = getEfficiency(dataset1,"NumeratorPU","DenominatorPU") eff2PU = getEfficiency(dataset2,"NumeratorPU","DenominatorPU") styles.dataStyle.apply(eff1PU) styles.mcStyle.apply(eff2PU) eff1PU.SetMarkerSize(1) eff2PU.SetMarkerSize(1.5) if isinstance(datasetsMC,dataset.DatasetManager): pPU = plots.ComparisonManyPlot(histograms.HistoGraph(eff1PU, "eff1", "p", "P"), [histograms.HistoGraph(eff2PU, "eff2", "p", "P")]) pPU.histoMgr.setHistoLegendLabelMany({"eff1": legend1, "eff2": legend2}) else: pPU = plots.PlotBase([histograms.HistoGraph(eff1PU, "eff1", "p", "P")]) pPU.histoMgr.setHistoLegendLabelMany({"eff1": legend1}) opts = {"ymin": 0.001, "ymax": 1.0} moveLegend = {"dx": -0.33, "dy": -0.25, "dh": -0.1} createRatio = False if createRatio: pPU.createFrame(os.path.join(plotDir, namePU), createRatio=True, opts=opts, opts2=opts2) else: pPU.createFrame(os.path.join(plotDir, namePU), opts=opts, opts2=opts2) pPU.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) # if createRatio: # pPU.getPad1().SetLogy(True) # else: # pPU.getPad().SetLogy(True) pPU.getFrame().GetYaxis().SetTitle("L1+HLT MET efficiency") pPU.getFrame().GetXaxis().SetTitle("Number of reco vertices") if createRatio: pPU.getFrame2().GetYaxis().SetTitle("Ratio") pPU.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.4, 0.85, "LooseIsoPFTau50_Trk30_eta2p1_MET90", 17) # histograms.addText(0.4, 0.78, analysis.split("_")[len(analysis.split("_")) -1], 17) histograms.addText(0.4, 0.78, "2016", 17) histograms.addText(0.4, 0.71, "Runs "+datasets.loadRunRange(), 17) pPU.draw() histograms.addStandardTexts(lumi=lumi) pPU.save(formats) print "Output written in",plotDir
def main(argv): dirs = [] if len(sys.argv) < 2: usage() dirs.append(sys.argv[1]) dirs_signal = ["../../SignalAnalysis_140605_143702/"] QCDInvertedNormalization = sort(QCDInvertedNormalizationFactors.QCDInvertedNormalization) labels,QCDInvertedNormalizationFilteredEWKFakeTaus = getSortedLabelsAndFactors(QCDInvertedNormalizationFactorsFilteredEWKFakeTaus.QCDInvertedNormalization) analysis_inverted = "signalAnalysisInvertedTau" analysis = "signalAnalysis" optModes = [] #optModes.append("OptQCDTailKillerZeroPlus") optModes.append("OptQCDTailKillerLoosePlus") optModes.append("OptQCDTailKillerMediumPlus") optModes.append("OptQCDTailKillerTightPlus") varHistoName = "shapeEWKGenuineTausTransverseMass" nomHistoName = "shapeTransverseMass" signalHistoName = "shapeEWKFakeTausTransverseMass" #Optimal: 0.8, 0.82, 0.9 ###w_list = [0.65, 0.7, 0.76] #old baseline ft w_list = [0.66, 0.67, 0.75] #w_list = [0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 1] #defaultBinning = systematics.getBinningForPlot("shapeTransverseMass") defaultBinning = [0,20,40,60,80,100,120,140,160,200,400] defaultBinning_array = array.array("d",defaultBinning) diff_opt = [] for optMode in optModes: diff_list = [] for w in w_list: var_values = [] nom_values = [] # baseline fake taus mt_baseline_faketaus_data = getDataSets(dirs_signal, dataEra, searchMode, analysis, optMode) mtplot_signalfaketaus = plots.DataMCPlot(mt_baseline_faketaus_data, signalHistoName) mt_signalfaketaus = mtplot_signalfaketaus.histoMgr.getHisto("EWK").getRootHisto().Clone(signalHistoName) # inverted fake taus mt_inverted_faketaus_data = getDataSets(dirs, dataEra, searchMode, analysis_inverted, optMode) histonames_var = mt_inverted_faketaus_data.getDataset("Data").getDirectoryContent(varHistoName) histonames_nom = mt_inverted_faketaus_data.getDataset("Data").getDirectoryContent(nomHistoName) bins_var = getBins(histonames_var, varHistoName) bins_nom = getBins(histonames_nom, nomHistoName) normalization_var_qg = getNormalization(bins_var,w,QCDInvertedNormalizationFilteredEWKFakeTaus,True,True) normalization_var = getNormalization(bins_var,w,QCDInvertedNormalizationFilteredEWKFakeTaus,True,False) normalization_nom = getNormalization(bins_nom,w,QCDInvertedNormalization,False,False) mt_var_qg = getMt(mt_inverted_faketaus_data,bins_var,varHistoName,normalization_var_qg) mt_var = getMt(mt_inverted_faketaus_data,bins_var,varHistoName,normalization_var) mt_nom = getMt(mt_inverted_faketaus_data,bins_nom,nomHistoName,normalization_nom) mt_nom.Add(mt_signalfaketaus) mt_var_qg.SetName("QCD(Data)+EWK+t#bar{t}(Data, mis-ID. #tau), q-g bal.") mt_var.SetName("QCD(Data)+EWK+t#bar{t}(Data, mis-ID. #tau)") mt_nom.SetName("QCD(Data)+EWK+t#bar{t}(MC, mis-ID. #tau)") mt_var_qg.SetLineWidth(4) mt_var.SetLineColor(14) mt_nom.SetLineColor(2) mt_var_qg = mt_var_qg.Rebin(len(defaultBinning)-1,"",defaultBinning_array) mt_var = mt_var.Rebin(len(defaultBinning)-1,"",defaultBinning_array) mt_nom = mt_nom.Rebin(len(defaultBinning)-1,"",defaultBinning_array) for i in range(0,mt_nom.GetSize()): var_values.append(mt_var_qg.GetBinContent(i)) nom_values.append(mt_nom.GetBinContent(i)) style = tdrstyle.TDRStyle() varPlots = [mt_var, mt_var_qg] plot = plots.ComparisonManyPlot(mt_nom,varPlots) plot.createFrame(optMode.replace("Opt","Mt_DataDrivenVsMC_"+"w="+str(w)+"_"), createRatio=True) moveLegend={"dx": -0.35,"dy": 0.05} plot.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) histograms.addText(0.65, 0.3, optMode.replace("OptQCDTailKiller","R_{BB} ").replace("Plus",""), 25) histograms.addCmsPreliminaryText() histograms.addEnergyText() lumi=mt_inverted_faketaus_data.getDataset("Data").getLuminosity() histograms.addLuminosityText(x=None, y=None, lumi=lumi) plot.draw() plot.save() mt_var_qg.Delete() mt_var.Delete() mt_nom.Delete() #TFile.CurrentFile().Close("R") mt_baseline_faketaus_data.close() mt_inverted_faketaus_data.close() ROOT.gROOT.CloseFiles() ROOT.gROOT.GetListOfCanvases().Delete() ROOT.gDirectory.GetList().Delete() #print var_values #print nom_values # difference metrics num = 0 denom = 0 for i in range(0,len(nom_values)): num += var_values[i]*(var_values[i]-nom_values[i])**2 denom += var_values[i] diff = num/denom diff_list.append(diff) diff_opt.append(diff_list) os.system("rm MtOptimal/*") os.system("mkdir -p MtOptimal") print "\nWeights:\t",w_list,'\n' optimalWeights = {} for i in range(0,len(diff_opt)): print optModes[i] print "Differences:\t",diff_opt[i],"- Optimal: w =",w_list[diff_opt[i].index(min(diff_opt[i]))] optimalWeights[optModes[i]] = w_list[diff_opt[i].index(min(diff_opt[i]))] command = "cp *" + str(w_list[diff_opt[i].index(min(diff_opt[i]))])+"*"+optModes[i].replace("Opt","") + ".eps MtOptimal" os.system(command) print optimalWeights writeWeightsToFile("OptimalWeights.py",optimalWeights) writeNormalizationToFile("QCDPlusEWKFakeTauNormalizationFactors.py",normalization_var_qg,labels)
def analyze(analysis=None): paths = [sys.argv[1]] datasets = dataset.getDatasetsFromMulticrabDirs(paths) # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="SingleNeutrino") # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="QCD") # analysis = datasets.getAllDatasets()[0].getAnalysisName() #datasetsMC = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,excludeTasks="ZeroBias") createRatio = False # for d in datasets.getAllDatasets(): # print d.getName() style = tdrstyle.TDRStyle() dataset1 = datasets.getDataDatasets() #### dataset1 = datasets.getMCDatasets() rateETM120 = 5521.35 # Hz #effETM120 = 0.000611208781402 #8.75017364672e-05 #effETM120 = 0.000619219298648 effETM120 = 0.000203698623826 #### effETM120 = 0.186701136914 # QCD scale = rateETM120/effETM120*0.001 #(Hz->kHz) # for d in dataset1: # d.scale(scale) dataset2 = dataset1 createRatio = False #if isinstance(datasetsMC,dataset.DatasetManager): # dataset2 = datasetsMC.getMCDatasets() # createRatio = True eff1PU = getEfficiency(dataset1,"NumeratorPU","DenominatorPU") scaleGraph(eff1PU,scale) namePU = "TauMET_"+analysis+"_nVtx" legend1 = "Data" legend2 = "Simulation" styles.dataStyle.apply(eff1PU) eff1PU.SetMarkerSize(1) #eff2PU.SetMarkerSize(1.5) pPU = plots.PlotBase([histograms.HistoGraph(eff1PU, "eff1", "p", "P")]) pPU.histoMgr.setHistoLegendLabelMany({"eff1": legend1}) # Fit # yval = fit("Data",pPU,eff1PU,30,59) yval = fit("Data",pPU,eff1PU,5,59) #### opts = {"ymin": 0, "ymax": 6, "xmax": 60} opts = {"ymin": 0, "ymax": 20, "xmax": 60} #### opts = {"ymin": 0, "ymax": 300, "xmax": 60} opts2 = {"ymin": 0.5, "ymax": 1.5} moveLegend = {"dx": -0.5, "dy": -0.1, "dh": -0.1} if createRatio: pPU.createFrame(os.path.join(plotDir, namePU), createRatio=True, opts=opts, opts2=opts2) else: pPU.createFrame(os.path.join(plotDir, namePU), opts=opts, opts2=opts2) pPU.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) pPU.getFrame().GetYaxis().SetTitle("L1 rate (kHz)") pPU.getFrame().GetXaxis().SetTitle("n vertices") if createRatio: pPU.getFrame2().GetYaxis().SetTitle("Ratio") pPU.getFrame2().GetYaxis().SetTitleOffset(1.6) pPU.draw() print "check frame min,max",pPU.getFrame().GetYaxis().GetXmin(),pPU.getFrame().GetYaxis().GetXmax() x = array.array('d',[55,55,0]) y = array.array('d',[0,yval,yval]) n = 3 vert = ROOT.TGraph(n,x,y) vert.SetLineStyle(2) vert.SetLineColor(2) vert.SetLineWidth(2) vert.Draw("L") lumi = 0.0 for d in datasets.getDataDatasets(): print "luminosity",d.getName(),d.getLuminosity() lumi += d.getLuminosity() histograms.addStandardTexts(lumi=lumi) if not os.path.exists(plotDir): os.mkdir(plotDir) pPU.save(formats) print "Output written in",plotDir
def main(opts): global RunEra mcrabName = opts.mcrab print("mcrabNAME ISSSSSS ", mcrabName) RunEra = mcrabName.split("_")[1] print " Run Era is: ", RunEra print " Plotting efficiency for trigger:", kwargs.get("trigger") # Setup the style style = tdrstyle.TDRStyle() # Set ROOT batch mode boolean ROOT.gROOT.SetBatch(opts.batchMode) # Setup & configure the dataset manager #datasetsMgr = GetSpecificDatasetsFromDir(opts.mcrab, opts, RunEra, reHLT_samples, **kwargs) datasetsMgr = GetDatasetsFromDir(opts.mcrab, opts, **kwargs) minRunRange = None maxRunRange = None Counter = 0 nDataDatasets = len(datasetsMgr.getDataDatasets()) for d in datasetsMgr.getDataDatasets(): Counter = Counter + 1 if Counter == 1: minRunRange = d.getName().split("_")[-2] if Counter == nDataDatasets: maxRunRange = d.getName().split("_")[-1] print "Data Name==> ", d.getName() print "RunRange ==> ", d.getName().split( "_")[-2], " - ", d.getName().split("_")[-1] print "Run Range = ", minRunRange, " - ", maxRunRange runRange = minRunRange + " - " + maxRunRange intLumi = GetLumi(datasetsMgr) print "intLumi=", intLumi # Update to PU datasetsMgr.updateNAllEventsToPUWeighted() # Load Luminosities datasetsMgr.loadLuminosities() datasetsMgr.PrintLuminosities() # Default merging & ordering: "Data", "QCD", "SingleTop", "Diboson" #plots.mergeRenameReorderForDataMC(datasetsMgr) #WARNING: Merged MC histograms must be normalized to something! #dataset_MC.normalizeMCByLuminosity() datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() plots.mergeRenameReorderForDataMC(datasetsMgr) datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() dataset_Data = datasetsMgr.getDataDatasets() datasetsMgr.mergeMC() #ATHER dataset_MC = None dataset_MC = datasetsMgr.getMCDatasets() #datasetsMgr.normalizeMCByLuminosity() #datasetsMgr.mergeMC() datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() lumi = 0.0 for d in datasetsMgr.getDataDatasets(): lumi += d.getLuminosity() SigSel = ["1BTag", "2BTag", "OR", "OR_PFJet450"] for s in SigSel: for xVar in xVariables: print s, xVar #if xVar == "pt6thJet": # cutValue = 40 # cutLine = True #for den,num num_name = "hNum_" + xVar + "_RefTrg_OfflineSel_Signal" + s den_name = "hDen_" + xVar + "_RefTrg_OfflineSel" # Get the save path and name plotName = "Eff" + "_" + xVar + "_" + s savePath, saveName = GetSavePathAndName(plotName, **kwargs) # Get Efficiency Plots eff_Data = getEfficiency(datasetsMgr, dataset_Data, num_name, den_name, **kwargs) eff_MC = getEfficiency(datasetsMgr, dataset_MC, num_name, den_name, **kwargs) if xVar == "pt6thJet": xMin = 29.0 xMax = 125.0 elif xVar == "eta6thJet": xMin = -2.5 xMax = 2.5 elif xVar == "phi6thJet": xMin = -3.2 xMax = 3.2 elif xVar == "Ht": xMin = 350 xMax = 2000 elif xVar == "nBTagJets": xMin = 0 xMax = 10 elif xVar == "pu": xMin = 0 xMax = 50 elif xVar == "CSV": xMin = 0 xMax = 1 elif xVar == "JetMulti": xMin = 4 xMax = 15 elif xVar == "BJetMulti": xMin = 0 xMax = 8 # Apply Styles styles.dataStyle.apply(eff_Data) styles.mcStyle.apply(eff_MC) # Marker Style eff_Data.SetMarkerSize(1) # Create Comparison Plot p = plots.ComparisonPlot( histograms.HistoGraph(eff_Data, "eff_Data", "p", "P"), histograms.HistoGraph(eff_MC, "eff_MC", "p", "P")) opts = {"ymin": 0, "ymax": 1.1, "xmin": xMin, "xmax": xMax} opts2 = {"ymin": 0.8, "ymax": 1.05} if xVar == "pu": moveLegend = {"dx": -0.44, "dy": -0.62, "dh": -0.2} else: moveLegend = {"dx": -0.44, "dy": -0.57, "dh": -0.2} p.histoMgr.setHistoLegendLabelMany({ "eff_Data": "Data", "eff_MC": "Simulation" }) createRatio = True #kwargs.get("ratio") p.createFrame(saveName, createRatio=createRatio, opts=opts, opts2=opts2) # Set Legend p.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) # Set Log & Grid SetLogAndGrid(p, **kwargs) # Set Titles p.getFrame().GetYaxis().SetTitle(kwargs.get("ylabel")) if xVar == "pt6thJet": p.getFrame().GetXaxis().SetTitle("p_{T,6thJet} (Gev/c)") elif xVar == "eta6thJet": p.getFrame().GetXaxis().SetTitle("#eta_{6thJet}") elif xVar == "phi6thJet": p.getFrame().GetXaxis().SetTitle("#phi_{6thJet}") elif xVar == "Ht": p.getFrame().GetXaxis().SetTitle("H_{T} (Gev/c)") elif xVar == "nBTagJets": p.getFrame().GetXaxis().SetTitle("nB-Jet") elif xVar == "pu": p.getFrame().GetXaxis().SetTitle("nPU") elif xVar == "CSV": p.getFrame().GetXaxis().SetTitle("CSV") elif xVar == "JetMulti": p.getFrame().GetXaxis().SetTitle("Jet Multiplicity") elif xVar == "BJetMulti": p.getFrame().GetXaxis().SetTitle("B-Jet Multiplicity") if createRatio: p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) #if xVar == "pt6thJet" and s == "OR": # plist = [0.7, 0.99, 1000, 0.16, 28.0] # Fit_Richards(30.0, 120.0, p, eff_Data, plist) # plist = [0.72, 0.91, 0.212, 0.15, 50.0] # Fit_Richards(30.0, 120.0, p, eff_MC, plist) #elif xVar == "Ht" and s == "OR": # plist = [0.00005, 0.988, 0.000000109, 0.15, 29.0] # Fit_Richards(350.0, 2000.0, p, eff_Data, plist) #plist = [0.0003, 0.97, 0.45, 0.24, 43.0] #Fit_Richards(500.0, 2000.0, p, eff_MC, plist) #elif xVar == "nBTagJets": #plist = [0.07, 0.984, 0.45, 0.24, 43.0] #Fit_Richards(30.0, 120.0, p, eff_Data, plist) #elif xVar == "pu": #plist = [0.07, 0.984, 0.45, 0.24, 43.0] #Fit_Richards(30.0, 120.0, p, eff_Data, plist) # Draw histograms.addText(0.30, 0.10, "Runs " + runRange, 17) histograms.addText(0.30, 0.15, "2016", 17) histograms.addStandardTexts(lumi=lumi) p.draw() # Save the canvas to a file SaveAs(p, kwargs.get("savePath"), saveName, kwargs.get("saveFormats"), True) ''' # IN SLICES OF HT HTSlices = ["450ht600","600ht800","800ht1000", "1000ht1250", "1250ht1500", "1500ht2000"] for s in SigSel: for hsl in HTSlices: num_name = "Num_pt6thJet_Vs_"+hsl+"_RefTrg_OfflineSel_"+s den_name = "Den_pt6thJet_Vs_"+hsl+"_RefTrg_OfflineSel" # Get the save path and name plotName = "Eff_pt6thJet_Vs_"+hsl+"_"+s savePath, saveName = GetSavePathAndName(plotName, **kwargs) # Get Efficiency Plots eff_Data = getEfficiency(datasetsMgr, dataset_Data, num_name, den_name , **kwargs) eff_MC = getEfficiency(datasetsMgr, dataset_MC, num_name, den_name, **kwargs) xMin = 29.0 xMax = 125.0 # Apply Styles styles.dataStyle.apply(eff_Data) styles.mcStyle.apply(eff_MC) # Marker Style eff_Data.SetMarkerSize(1) # Create Comparison Plot p = plots.ComparisonPlot(histograms.HistoGraph(eff_Data, "eff_Data","p","P"), histograms.HistoGraph(eff_MC, "eff_MC", "p", "P")) opts = {"ymin": 0 , "ymax": 1.1, "xmin":xMin, "xMax":xMax} opts2 = {"ymin": 0.7, "ymax": 1.3} moveLegend = {"dx": -0.44, "dy": -0.57, "dh": -0.2 } p.histoMgr.setHistoLegendLabelMany({"eff_Data": "Data", "eff_MC": "Simulation"}) createRatio = True #kwargs.get("ratio") p.createFrame(saveName, createRatio=createRatio, opts=opts, opts2=opts2) # Set Legend p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) # Set Log & Grid SetLogAndGrid(p, **kwargs) # Set Titles p.getFrame().GetYaxis().SetTitle(kwargs.get("ylabel")) p.getFrame().GetXaxis().SetTitle("p_{T} (Gev/c)") if createRatio: p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) # Draw histograms.addText(0.30, 0.10, "Runs "+runRange, 17) histograms.addText(0.30, 0.15, "2016", 17) histograms.addStandardTexts(lumi=lumi) p.draw() # Save the canvas to a file SaveAs(p, kwargs.get("savePath"), saveName, kwargs.get("saveFormats"), True) PTSlices = ["40pt50","50pt60", "60pt70", "70pt90", "90pt120"] for s in SigSel: for psl in PTSlices: num_name = "Num_ht_Vs_"+psl+"_HLT_PFHT350_"+s den_name = "Den_ht_Vs_"+psl+"_HLT_PFHT350" # Get the save path and name plotName = "Eff_ht_Vs_"+psl+"_"+s savePath, saveName = GetSavePathAndName(plotName, **kwargs) # Get Efficiency Plots eff_Data = getEfficiency(datasetsMgr, dataset_Data, num_name, den_name , **kwargs) eff_MC = getEfficiency(datasetsMgr, dataset_MC, num_name, den_name, **kwargs) xMin = 450 xMax = 2000 # Apply Styles styles.dataStyle.apply(eff_Data) styles.mcStyle.apply(eff_MC) # Marker Style eff_Data.SetMarkerSize(1) # Create Comparison Plot p = plots.ComparisonPlot(histograms.HistoGraph(eff_Data, "eff_Data","p","P"), histograms.HistoGraph(eff_MC, "eff_MC", "p", "P")) opts = {"ymin": 0 , "ymax": 1.1, "xmin":xMin, "xMax":xMax} opts2 = {"ymin": 0.7, "ymax": 1.3} moveLegend = {"dx": -0.44, "dy": -0.57, "dh": -0.2 } p.histoMgr.setHistoLegendLabelMany({"eff_Data": "Data", "eff_MC": "Simulation"}) createRatio = True #kwargs.get("ratio") #if eff_Data != None and eff_MC != None: p.createFrame(saveName, createRatio=createRatio, opts=opts, opts2=opts2) # Set Legend p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) # Set Log & Grid SetLogAndGrid(p, **kwargs) # Set Titles p.getFrame().GetYaxis().SetTitle(kwargs.get("ylabel")) p.getFrame().GetXaxis().SetTitle("H_{T} (Gev/c)") if createRatio: p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) # Draw histograms.addText(0.30, 0.10, "Runs "+runRange, 17) histograms.addText(0.30, 0.15, "2016", 17) histograms.addStandardTexts(lumi=lumi) p.draw() # Save the canvas to a file SaveAs(p, kwargs.get("savePath"), saveName, kwargs.get("saveFormats"), True) ''' return
def doPlot(mass, mu, mul=None): f = openFile(mass) tree_obs = f.Get("TESTED_R%s"%mu) if not tree_obs: print "Did not find TESTED_R%s TTree in file %s" % (mu, f.GetName()) listMu(mass, f) f.Close() return tree_sb = f.Get("SAMPLING_SB_TESTED_R%s" % mu) if not tree_sb: raise Exception("Did not find SAMPLING_SB_TESTED_R%s from file %s" % (mu, f.GetName())) tree_b = f.Get("SAMPLING_B_TESTED_R%s" % mu) if not tree_b: raise Exception("Did not find SAMPLING_B_TESTED_R%s from file %s" % (mu, f.GetName())) xmin = min(tree_sb.GetMinimum("brT"), tree_b.GetMinimum("brT")) xmax = max(tree_sb.GetMaximum("brT"), tree_b.GetMaximum("brT")) obsval = tree_obs.GetMinimum("brT") # Get the distributions tree_sb.Draw("brT >>hsb(%d, %f, %f)" % (nbins, xmin, xmax), "", "goff") h_sb = tree_sb.GetHistogram() tree_b.Draw("brT >>hb(%d, %f, %f)" % (nbins, xmin, xmax), "", "goff") h_b = tree_b.GetHistogram() # Set obsval to bin boundary obsval_bin = obsval for bin in xrange(0, h_sb.GetNbinsX()+1): edge = h_sb.GetBinLowEdge(bin) if obsval > edge: obsval_bin = edge # Normalize the distributions to unit area dataset._normalizeToOne(h_sb) dataset._normalizeToOne(h_b) plot = plots.PlotBase([ histograms.Histo(h_b, "B"), histograms.Histo(h_sb, "SB") ]) mulegend = mul if mul == None: mulegend = mu plot.histoMgr.setHistoLegendLabelMany({ "B": "f(#tilde{q}_{#mu=%s} | #mu=0, #hat{#bf{#theta}}_{0}^{obs})" % mulegend, "SB": "f(#tilde{q}_{#mu=%s} | #mu=%s, #hat{#bf{#theta}}_{#mu=%s}^{obs})" % (mulegend, mulegend, mulegend), }) plot.setLegend(histograms.moveLegend(histograms.createLegend(0.6, 0.8, 0.9, 0.9), dy=0.02, dx=-0.05)) plot.histoMgr.forEachHisto(styles.generator()) fname = "teststat_m%s_mu%s" % (mass, mu) plot.createFrame(fname.replace(".", "_"), opts={"ymin": 1e-6, "ymaxfactor": 2}) plot.frame.GetXaxis().SetTitle("Test statistic #tilde{q}_{#mu}") plot.frame.GetYaxis().SetTitle("Arbitrary units") plot.getPad().SetLogy(True) area_sb = h_sb.Clone("AreaSB") area_sb.SetFillColor(area_sb.GetLineColor()) area_sb.SetFillStyle(3005) area_sb.SetLineWidth(0) area_b = h_b.Clone("AreaB") area_b.SetFillColor(area_b.GetLineColor()) area_b.SetFillStyle(3004) area_b.SetLineWidth(0) for bin in xrange(0, area_sb.GetNbinsX()+1): if area_sb.GetBinLowEdge(bin) < obsval_bin: area_sb.SetBinContent(bin, 0) if area_b.GetBinLowEdge(bin) >= obsval_bin: area_b.SetBinContent(bin, 0) plot.appendPlotObject(area_b, "HIST ][") plot.appendPlotObject(area_sb, "HIST ][") plot.addCutBoxAndLine(box=False, cutValue=obsval_bin) plot.draw() size = 26 histograms.addText(0.35, 0.4, "CL_{s+b}", size=size) histograms.addText(0.18, 0.4, "1-CL_{b}", size=size) size = 20 # x = obsval_bin/(plot.frame.GetXaxis().GetXmax() - plot.frame.GetXaxis().GetXmin())+0.02 x = (obsval_bin - plot.getPad().GetX1()) / (plot.getPad().GetX2() - plot.getPad().GetX1()) x += 0.01 histograms.addText(x, 0.88, "Observed", size=size) histograms.addText(x, 0.85, "value", size=size) histograms.addText(0.62, 0.78, "m_{H^{+}} = %s %s" % (mass, limit.massUnit()), size=size) # size = 20 # x = 0.2 # histograms.addText(x, 0.88, brlimit.process, size=size) # histograms.addText(x, 0.84, brlimit._finalstateLabels["taujets"], size=size) # histograms.addText(x, 0.79, brlimit.BRassumption, size=size) plot.save() f.Close()
def main(opts): # Setup the style style = tdrstyle.TDRStyle() # Set ROOT batch mode boolean ROOT.gROOT.SetBatch(opts.batchMode) # ======================================== # Datasets # ======================================== # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts.mcrab, opts, **kwargs) intLumi = GetLumi(datasetsMgr) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Set/Overwrite cross-sections for d in datasetsMgr.getAllDatasets(): if "ChargedHiggs" in d.getName(): datasetsMgr.getDataset(d.getName()).setCrossSection(1.0) # Merge datasets:All JetHT to "Data", QCD_Pt to "QCD", # QCD_bEnriched to "QCD_b", single-top to "SingleTop", WW, WZ, ZZ to "Diboson" plots.mergeRenameReorderForDataMC(datasetsMgr) # Remove datasets if 0: datasetsMgr.remove("TTJets") datasetsMgr.remove(filter(lambda name: not "QCD" in name, datasetsMgr.getAllDatasetNames())) # Print dataset information datasetsMgr.PrintInfo() # ======================================== # Histograms # ======================================== for counter, hName in enumerate(hNames): # Get the save path and name, Get Histos for Plotter savePath, saveName = GetSavePathAndName(hName, **kwargs) refHisto, otherHistos = GetHistosForPlotter(datasetsMgr, hName, **kwargs) # Create a comparison plot #p = plots.ComparisonManyPlot(refHisto, otherHistos) p = plots.DataMCPlot(datasetsMgr, hName) # Remove negative contributions if 0: RemoveNegativeBins(datasetsMgr, hName, p) # Y-axis ratioOpts = {"ymin": 0.0, "ymax": 2.0} if kwargs.get("logY")==True: opts = {"ymin": 1e-2, "ymaxfactor": 100} else: opts = {"ymin": 0.0, "ymaxfactor": 1.2} # ======================================== # Frame # ======================================== p.createFrame(saveName, createRatio=kwargs.get("createRatio"), opts=opts, opts2=ratioOpts) # Legend moveLegend = {"dx": -0.11, "dy": +0.0, "dh": +0.2} p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) # Move the refDataset to first in the draw order (back) histoNames = [h.getName() for h in p.histoMgr.getHistos()] p.histoMgr.reorder(filter(lambda n: plots._legendLabels[kwargs.get("refDataset") ] not in n, histoNames)) if 0: p.removeLegend() # Axes #p.getFrame().GetYaxis().SetTitle( getTitleY(refHisto, **kwargs) ) #p.getFrame().GetYaxis().SetTitle( getTitleY(p.histoMgr.getHistos()[0], **kwargs) ) if kwargs.get("createRatio"): p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) # Set Log and Grid SetLogAndGrid(p, **kwargs) # Cut line / Cut box _kwargs = {"lessThan": kwargs.get("cutLessthan")} p.addCutBoxAndLine(cutValue=kwargs.get("cutValue"), fillColor=kwargs.get("cutFillColour"), box=kwargs.get("cutBox"), line=kwargs.get("cutLine"), **_kwargs) # Draw the final plot p.draw() # ======================================== # Add Text # ======================================== histograms.addStandardTexts(lumi=intLumi) # histograms.addText(0.4, 0.9, "Alexandros Attikis", 17) # histograms.addText(0.4, 0.11, "Runs " + datasetsMgr.loadRunRange(), 17) # Save the canvas to a file SaveAs(p, savePath, saveName, kwargs.get("saveFormats"), counter==0) return
def main(argv): dirs = [] if len(sys.argv) < 2: usage() dirs.append(sys.argv[1]) dirs_signal = ["../../SignalAnalysis_140605_143702/"] QCDInvertedNormalization = sort( QCDInvertedNormalizationFactors.QCDInvertedNormalization) labels, QCDInvertedNormalizationFilteredEWKFakeTaus = getSortedLabelsAndFactors( QCDInvertedNormalizationFactorsFilteredEWKFakeTaus. QCDInvertedNormalization) analysis_inverted = "signalAnalysisInvertedTau" analysis = "signalAnalysis" optModes = [] #optModes.append("OptQCDTailKillerZeroPlus") optModes.append("OptQCDTailKillerLoosePlus") optModes.append("OptQCDTailKillerMediumPlus") optModes.append("OptQCDTailKillerTightPlus") varHistoName = "shapeEWKGenuineTausTransverseMass" nomHistoName = "shapeTransverseMass" signalHistoName = "shapeEWKFakeTausTransverseMass" #Optimal: 0.8, 0.82, 0.9 ###w_list = [0.65, 0.7, 0.76] #old baseline ft w_list = [0.66, 0.67, 0.75] #w_list = [0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 1] #defaultBinning = systematics.getBinningForPlot("shapeTransverseMass") defaultBinning = [0, 20, 40, 60, 80, 100, 120, 140, 160, 200, 400] defaultBinning_array = array.array("d", defaultBinning) diff_opt = [] for optMode in optModes: diff_list = [] for w in w_list: var_values = [] nom_values = [] # baseline fake taus mt_baseline_faketaus_data = getDataSets(dirs_signal, dataEra, searchMode, analysis, optMode) mtplot_signalfaketaus = plots.DataMCPlot(mt_baseline_faketaus_data, signalHistoName) mt_signalfaketaus = mtplot_signalfaketaus.histoMgr.getHisto( "EWK").getRootHisto().Clone(signalHistoName) # inverted fake taus mt_inverted_faketaus_data = getDataSets(dirs, dataEra, searchMode, analysis_inverted, optMode) histonames_var = mt_inverted_faketaus_data.getDataset( "Data").getDirectoryContent(varHistoName) histonames_nom = mt_inverted_faketaus_data.getDataset( "Data").getDirectoryContent(nomHistoName) bins_var = getBins(histonames_var, varHistoName) bins_nom = getBins(histonames_nom, nomHistoName) normalization_var_qg = getNormalization( bins_var, w, QCDInvertedNormalizationFilteredEWKFakeTaus, True, True) normalization_var = getNormalization( bins_var, w, QCDInvertedNormalizationFilteredEWKFakeTaus, True, False) normalization_nom = getNormalization(bins_nom, w, QCDInvertedNormalization, False, False) mt_var_qg = getMt(mt_inverted_faketaus_data, bins_var, varHistoName, normalization_var_qg) mt_var = getMt(mt_inverted_faketaus_data, bins_var, varHistoName, normalization_var) mt_nom = getMt(mt_inverted_faketaus_data, bins_nom, nomHistoName, normalization_nom) mt_nom.Add(mt_signalfaketaus) mt_var_qg.SetName( "QCD(Data)+EWK+t#bar{t}(Data, mis-ID. #tau), q-g bal.") mt_var.SetName("QCD(Data)+EWK+t#bar{t}(Data, mis-ID. #tau)") mt_nom.SetName("QCD(Data)+EWK+t#bar{t}(MC, mis-ID. #tau)") mt_var_qg.SetLineWidth(4) mt_var.SetLineColor(14) mt_nom.SetLineColor(2) mt_var_qg = mt_var_qg.Rebin( len(defaultBinning) - 1, "", defaultBinning_array) mt_var = mt_var.Rebin( len(defaultBinning) - 1, "", defaultBinning_array) mt_nom = mt_nom.Rebin( len(defaultBinning) - 1, "", defaultBinning_array) for i in range(0, mt_nom.GetSize()): var_values.append(mt_var_qg.GetBinContent(i)) nom_values.append(mt_nom.GetBinContent(i)) style = tdrstyle.TDRStyle() varPlots = [mt_var, mt_var_qg] plot = plots.ComparisonManyPlot(mt_nom, varPlots) plot.createFrame(optMode.replace( "Opt", "Mt_DataDrivenVsMC_" + "w=" + str(w) + "_"), createRatio=True) moveLegend = {"dx": -0.35, "dy": 0.05} plot.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) histograms.addText( 0.65, 0.3, optMode.replace("OptQCDTailKiller", "R_{BB} ").replace("Plus", ""), 25) histograms.addCmsPreliminaryText() histograms.addEnergyText() lumi = mt_inverted_faketaus_data.getDataset("Data").getLuminosity() histograms.addLuminosityText(x=None, y=None, lumi=lumi) plot.draw() plot.save() mt_var_qg.Delete() mt_var.Delete() mt_nom.Delete() #TFile.CurrentFile().Close("R") mt_baseline_faketaus_data.close() mt_inverted_faketaus_data.close() ROOT.gROOT.CloseFiles() ROOT.gROOT.GetListOfCanvases().Delete() ROOT.gDirectory.GetList().Delete() #print var_values #print nom_values # difference metrics num = 0 denom = 0 for i in range(0, len(nom_values)): num += var_values[i] * (var_values[i] - nom_values[i])**2 denom += var_values[i] diff = num / denom diff_list.append(diff) diff_opt.append(diff_list) os.system("rm MtOptimal/*") os.system("mkdir -p MtOptimal") print "\nWeights:\t", w_list, '\n' optimalWeights = {} for i in range(0, len(diff_opt)): print optModes[i] print "Differences:\t", diff_opt[i], "- Optimal: w =", w_list[ diff_opt[i].index(min(diff_opt[i]))] optimalWeights[optModes[i]] = w_list[diff_opt[i].index(min( diff_opt[i]))] command = "cp *" + str(w_list[diff_opt[i].index(min( diff_opt[i]))]) + "*" + optModes[i].replace("Opt", "") + ".eps MtOptimal" os.system(command) print optimalWeights writeWeightsToFile("OptimalWeights.py", optimalWeights) writeNormalizationToFile("QCDPlusEWKFakeTauNormalizationFactors.py", normalization_var_qg, labels)
def analyze(analysis=None): paths = [sys.argv[1]] if (len(sys.argv) == 3): howAnalyse = sys.argv[2] else: howAnalyse = "--fit" # howAnalyse = "--bin" if not analysis == None: datasets = dataset.getDatasetsFromMulticrabDirs( paths, analysisName=analysis, excludeTasks="Silver|GluGluHToTauTau_M125") else: datasets = dataset.getDatasetsFromMulticrabDirs( paths, excludeTasks="Silver|GluGluHToTauTau_M125") analysis = datasets.getAllDatasets()[0].getAnalysisName() # datasetsDY = None datasetsDY = dataset.getDatasetsFromMulticrabDirs( paths, analysisName=analysis, includeOnlyTasks="DYJetsToLL") datasetsDY = dataset.getDatasetsFromMulticrabDirs( paths, analysisName=analysis, includeOnlyTasks="DYJetsToLL|Zprime") # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,excludeTasks="GluGluHToTauTau_M125|TTJets") datasetsH125 = None # datasetsH125 = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="GluGluHToTauTau_M125",emptyDatasetsAsNone=True) # datasetsH125 = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="GluGluHToTauTau_M125") datasets.loadLuminosities() style = tdrstyle.TDRStyle() dataset1 = datasets.getDataDatasets() dataset2 = dataset1 # dataset2 = datasets.getMCDatasets() if not datasetsDY == None: dataset2 = datasetsDY.getMCDatasets() histeff1 = getEfficiency(dataset1) histeff2 = getEfficiency(dataset2) eff1 = convert2TGraph(histeff1) eff2 = convert2TGraph(histeff2) if isinstance(datasetsH125, dataset.DatasetManager): histeff3 = getEfficiency(datasetsH125.getMCDatasets()) eff3 = convert2TGraph(histeff3) styles.dataStyle.apply(eff1) styles.mcStyle.apply(eff2) eff1.SetMarkerSize(1) # eff2.SetMarkerSize(1.5) if isinstance(datasetsH125, dataset.DatasetManager): styles.mcStyle.apply(eff3) eff3.SetMarkerSize(1.5) eff3.SetMarkerColor(4) eff3.SetLineColor(4) # p = plots.ComparisonPlot(histograms.HistoGraph(eff1, "eff1", "p", "P"), # histograms.HistoGraph(eff2, "eff2", "p", "P")) if isinstance(datasetsH125, dataset.DatasetManager): p = plots.ComparisonManyPlot( histograms.HistoGraph(eff1, "eff1", "p", "P"), [ histograms.HistoGraph(eff2, "eff2", "p", "P"), histograms.HistoGraph(eff3, "eff3", "p", "P") ]) elif isinstance(datasetsDY, dataset.DatasetManager): p = plots.ComparisonPlot(histograms.HistoGraph(eff1, "eff1", "p", "P"), histograms.HistoGraph(eff2, "eff2", "p", "P")) else: p = plots.PlotBase([histograms.HistoGraph(eff1, "eff1", "p", "P")]) ## FIT FUNCTIONS: "Sigmoid", "Error", "Gompertz", "Richard","Crystal" ## ## FIT TYPES: binned max likelihood: "ML" , Chi2-fit: "Chi" ## if (howAnalyse == "--fit"): datafit = fitType("Data", p, histeff1, eff1, 20, 500, "Crystal", "ML") mcfit = fitType("MC", p, histeff2, eff2, 20, 500, "Crystal", "ML") if isinstance(datasetsH125, dataset.DatasetManager): fit("H125", p, eff3, 20, 200) opts = {"ymin": 0, "ymax": 1.1} opts2 = {"ymin": 0.5, "ymax": 1.5} # moveLegend = {"dx": -0.55, "dy": -0.15, "dh": -0.1} moveLegend = {"dx": -0.2, "dy": -0.5, "dh": -0.1} name = "TauMET_" + analysis + "_DataVsMC_PFTauPt" legend1 = "Data" # legend2 = "MC (DY)" legend2 = "Simulation" legend3 = "MC (H125)" createRatio = False p.histoMgr.setHistoLegendLabelMany({"eff1": legend1}) if isinstance(datasetsDY, dataset.DatasetManager): p.histoMgr.setHistoLegendLabelMany({"eff1": legend1, "eff2": legend2}) createRatio = True if isinstance(datasetsH125, dataset.DatasetManager): p.histoMgr.setHistoLegendLabelMany({ "eff1": legend1, "eff2": legend2, "eff3": legend3 }) if createRatio: p.createFrame(os.path.join(plotDir, name), createRatio=createRatio, opts=opts, opts2=opts2) else: p.createFrame(os.path.join(plotDir, name), opts=opts, opts2=opts2) p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) p.getFrame().GetYaxis().SetTitle("HLT tau efficiency") # p.getFrame().GetXaxis().SetTitle("#tau-jet p_{T} (GeV/c)") p.getFrame().GetXaxis().SetTitle("#tau_{h} p_{T} (GeV/c)") if createRatio: p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.5, 0.6, "LooseIsoPFTau50_Trk30_eta2p1", 17) # histograms.addText(0.5, 0.6, "VLooseIsoPFTau120_Trk50_eta2p1", 17) # histograms.addText(0.5, 0.6, "VLooseIsoPFTau140_Trk50_eta2p1", 17) # label = analysis.split("_")[len(analysis.split("_")) -1] label = "2016" histograms.addText(0.5, 0.53, label, 17) runRange = datasets.loadRunRange() histograms.addText(0.5, 0.46, "Runs " + runRange, 17) p.draw() ## does the ratio of the fits if (howAnalyse == "--fit"): funcRatio = ROOT.TH1F("", "", 480, 20, 500) for i in range(0, 480): ratio = datafit.Eval(i + 20 - 1) / mcfit.Eval(i + 20 - 1) funcRatio.SetBinContent(i, ratio) p.getPad().GetCanvas().cd(2) funcRatio.Draw("SAME") p.getPad().GetCanvas().cd(1) ## lumi = 0.0 for d in datasets.getDataDatasets(): if (d.getName() != "SingleMuon_Run2016F_03Feb2017_v1_277932_278800" and d.getName() != "SingleMuon_Run2016C_03Feb2017_v1_275656_276283"): print "luminosity", d.getName(), d.getLuminosity() lumi += d.getLuminosity() print "luminosity, sum", lumi histograms.addStandardTexts(lumi=lumi) if not os.path.exists(plotDir): os.mkdir(plotDir) p.save(formats) if (howAnalyse == "--fit"): pythonWriter.addParameters(plotDir, label, runRange, lumi, datafit) pythonWriter.addMCParameters(label, mcfit) pythonWriter.writeJSON( os.path.join(plotDir, "tauLegTriggerEfficiency_" + label + "_fit.json")) pythonWriter.__init__() #need to clear the Json arrays # if (howAnalyse == "--bin"): pythonWriter.addParameters(plotDir, label, runRange, lumi, eff1) pythonWriter.addMCParameters(label, eff2) pythonWriter.writeJSON( os.path.join(plotDir, "tauLegTriggerEfficiency_" + label + "_bin.json")) # if not createRatio: # sys.exit() ######################################################################### histeff1eta = getEfficiency(dataset1, "NumeratorEta", "DenominatorEta") histeff2eta = getEfficiency(dataset2, "NumeratorEta", "DenominatorEta") eff1eta = convert2TGraph(histeff1eta) eff2eta = convert2TGraph(histeff2eta) if isinstance(datasetsH125, dataset.DatasetManager): histeff3eta = getEfficiency(datasetsH125.getMCDatasets(), "NumeratorEta", "DenominatorEta") eff3eta = convert2TGraph(histeff3eta) styles.dataStyle.apply(eff1eta) styles.mcStyle.apply(eff2eta) eff1eta.SetMarkerSize(1) if isinstance(datasetsH125, dataset.DatasetManager): styles.mcStyle.apply(eff3eta) eff3eta.SetMarkerSize(1.5) eff3eta.SetMarkerColor(4) eff3eta.SetLineColor(4) if isinstance(datasetsH125, dataset.DatasetManager): p_eta = plots.ComparisonManyPlot( histograms.HistoGraph(eff1eta, "eff1eta", "p", "P"), [ histograms.HistoGraph(eff2eta, "eff2eta", "p", "P"), histograms.HistoGraph(eff3eta, "eff3eta", "p", "P") ]) elif isinstance(datasetsDY, dataset.DatasetManager): p_eta = plots.ComparisonPlot( histograms.HistoGraph(eff1eta, "eff1eta", "p", "P"), histograms.HistoGraph(eff2eta, "eff2eta", "p", "P")) else: p_eta = plots.PlotBase( [histograms.HistoGraph(eff1eta, "eff1eta", "p", "P")]) p_eta.histoMgr.setHistoLegendLabelMany({"eff1eta": legend1}) if isinstance(datasetsDY, dataset.DatasetManager): p_eta.histoMgr.setHistoLegendLabelMany({ "eff1eta": legend1, "eff2eta": legend2 }) if isinstance(datasetsH125, dataset.DatasetManager): p_eta.histoMgr.setHistoLegendLabelMany({ "eff1eta": legend1, "eff2eta": legend2, "eff3eta": legend3 }) name = "TauMET_" + analysis + "_DataVsMC_PFTauEta" if createRatio: p_eta.createFrame(os.path.join(plotDir, name), createRatio=createRatio, opts=opts, opts2=opts2) else: p_eta.createFrame(os.path.join(plotDir, name), opts=opts, opts2=opts2) moveLegendEta = {"dx": -0.5, "dy": -0.65, "dh": -0.1} p_eta.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegendEta)) p_eta.getFrame().GetYaxis().SetTitle("HLT tau efficiency") p_eta.getFrame().GetXaxis().SetTitle("#tau-jet #eta") if createRatio: p_eta.getFrame2().GetYaxis().SetTitle("Ratio") p_eta.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.2, 0.46, "LooseIsoPFTau50_Trk30_eta2p1", 17) histograms.addText(0.2, 0.38, label, 17) histograms.addText(0.2, 0.31, "Runs " + datasets.loadRunRange(), 17) p_eta.draw() histograms.addStandardTexts(lumi=lumi) p_eta.save(formats) ######################################################################### histeff1phi = getEfficiency(dataset1, "NumeratorPhi", "DenominatorPhi") histeff2phi = getEfficiency(dataset2, "NumeratorPhi", "DenominatorPhi") eff1phi = convert2TGraph(histeff1phi) eff2phi = convert2TGraph(histeff2phi) if isinstance(datasetsH125, dataset.DatasetManager): histeff3phi = getEfficiency(datasetsH125.getMCDatasets(), "NumeratorPhi", "DenominatorPhi") eff3phi = convert2TGraph(histeff3phi) styles.dataStyle.apply(eff1phi) styles.mcStyle.apply(eff2phi) eff1phi.SetMarkerSize(1) if isinstance(datasetsH125, dataset.DatasetManager): styles.mcStyle.apply(eff3phi) eff3phi.SetMarkerSize(1.5) eff3phi.SetMarkerColor(4) eff3phi.SetLineColor(4) if isinstance(datasetsH125, dataset.DatasetManager): p_phi = plots.ComparisonManyPlot( histograms.HistoGraph(eff1phi, "eff1phi", "p", "P"), [ histograms.HistoGraph(eff2phi, "eff2phi", "p", "P"), histograms.HistoGraph(eff3phi, "eff3phi", "p", "P") ]) elif isinstance(datasetsDY, dataset.DatasetManager): p_phi = plots.ComparisonPlot( histograms.HistoGraph(eff1phi, "eff1phi", "p", "P"), histograms.HistoGraph(eff2phi, "eff2phi", "p", "P")) else: p_phi = plots.PlotBase( [histograms.HistoGraph(eff1phi, "eff1phi", "p", "P")]) p_phi.histoMgr.setHistoLegendLabelMany({"eff1phi": legend1}) if isinstance(datasetsDY, dataset.DatasetManager): p_phi.histoMgr.setHistoLegendLabelMany({ "eff1phi": legend1, "eff2phi": legend2 }) if isinstance(datasetsH125, dataset.DatasetManager): p_phi.histoMgr.setHistoLegendLabelMany({ "eff1phi": legend1, "eff2phi": legend2, "eff3phi": legend3 }) name = "TauMET_" + analysis + "_DataVsMC_PFTauPhi" if createRatio: p_phi.createFrame(os.path.join(plotDir, name), createRatio=createRatio, opts=opts, opts2=opts2) else: p_phi.createFrame(os.path.join(plotDir, name), opts=opts, opts2=opts2) moveLegendPhi = {"dx": -0.5, "dy": -0.65, "dh": -0.1} p_phi.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegendPhi)) p_phi.getFrame().GetYaxis().SetTitle("HLT tau efficiency") p_phi.getFrame().GetXaxis().SetTitle("#tau-jet #phi") if createRatio: p_phi.getFrame2().GetYaxis().SetTitle("Ratio") p_phi.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.2, 0.46, "LooseIsoPFTau50_Trk30_eta2p1", 17) histograms.addText(0.2, 0.38, label, 17) histograms.addText(0.2, 0.31, "Runs " + datasets.loadRunRange(), 17) p_phi.draw() histograms.addStandardTexts(lumi=lumi) p_phi.save(formats) ######################################################################### namePU = "TauMET_" + analysis + "_DataVsMC_nVtx" histeff1PU = getEfficiency(dataset1, "NumeratorPU", "DenominatorPU") histeff2PU = getEfficiency(dataset2, "NumeratorPU", "DenominatorPU") eff1PU = convert2TGraph(histeff1PU) eff2PU = convert2TGraph(histeff2PU) styles.dataStyle.apply(eff1PU) styles.mcStyle.apply(eff2PU) eff1PU.SetMarkerSize(1) eff2PU.SetMarkerSize(1.5) if isinstance(datasetsDY, dataset.DatasetManager): pPU = plots.ComparisonManyPlot( histograms.HistoGraph(eff1PU, "eff1", "p", "P"), [histograms.HistoGraph(eff2PU, "eff2", "p", "P")]) pPU.histoMgr.setHistoLegendLabelMany({ "eff1": legend1, "eff2": legend2 }) else: pPU = plots.PlotBase([histograms.HistoGraph(eff1PU, "eff1", "p", "P")]) pPU.histoMgr.setHistoLegendLabelMany({"eff1": legend1}) optsPU = {"ymin": 0.01, "ymax": 1.0} createRatio = False if createRatio: pPU.createFrame(os.path.join(plotDir, namePU), createRatio=True, opts=optsPU, opts2=opts2) else: pPU.createFrame(os.path.join(plotDir, namePU), opts=optsPU, opts2=opts2) moveLegend = {"dx": -0.5, "dy": -0.5, "dh": -0.1} pPU.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) # if createRatio: # pPU.getPad1().SetLogy(True) # else: # pPU.getPad().SetLogy(True) pPU.getFrame().GetYaxis().SetTitle("HLT tau efficiency") pPU.getFrame().GetXaxis().SetTitle("Number of reco vertices") if createRatio: pPU.getFrame2().GetYaxis().SetTitle("Ratio") pPU.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.2, 0.6, "LooseIsoPFTau50_Trk30_eta2p1", 17) histograms.addText(0.2, 0.53, label, 17) histograms.addText(0.2, 0.46, "Runs " + datasets.loadRunRange(), 17) pPU.draw() histograms.addStandardTexts(lumi=lumi) pPU.save(formats) ######################################################################### """ hName = "Pull" # hName = "Sub" namePull = "TauMET_"+analysis+"_DataVsMC_"+hName+"s" plots.mergeRenameReorderForDataMC(datasets) datasets.merge("MC", ["TT","WJets","DYJetsToLL","SingleTop","QCD"], keepSources=True) drh1 = datasets.getDataset("Data").getDatasetRootHisto(hName) drh2 = datasets.getDataset("MC").getDatasetRootHisto(hName) drh1.normalizeToOne() drh2.normalizeToOne() pull1 = drh1.getHistogram() pull2 = drh2.getHistogram() if isinstance(datasetsH125,dataset.DatasetManager): plots.mergeRenameReorderForDataMC(datasetsH125) drh3 = datasetsH125.getMCDatasets()[0].getDatasetRootHisto(hName) drh3.normalizeToOne() pull3 = drh3.getHistogram() styles.dataStyle.apply(pull1) styles.mcStyle.apply(pull2) pull1.SetMarkerSize(1) if isinstance(datasetsH125,dataset.DatasetManager): styles.mcStyle.apply(pull3) pull3.SetMarkerSize(1.5) pull3.SetMarkerColor(4) pull3.SetLineColor(4) if isinstance(datasetsH125,dataset.DatasetManager): p_pull = plots.ComparisonManyPlot(histograms.Histo(pull1, "pull1", "p", "P"), [histograms.Histo(pull2, "pull2", "p", "P"), histograms.Histo(pull3, "pull3", "p", "P")]) else: p_pull = plots.ComparisonPlot(histograms.Histo(pull1, "pull1", "p", "P"), histograms.Histo(pull2, "pull2", "p", "P")) p_pull.histoMgr.setHistoLegendLabelMany({"pull1": legend1, "pull2": legend2}) if isinstance(datasetsH125,dataset.DatasetManager): p_pull.histoMgr.setHistoLegendLabelMany({"pull1": legend1, "pull2": legend2, "pull3": legend3}) p_pull.createFrame(os.path.join(plotDir, namePull), createRatio=True, opts=opts, opts2=opts2) moveLegendPull = {"dx": -0.5, "dy": -0.35, "dh": -0.1} p_pull.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegendPull)) p_pull.getFrame().GetYaxis().SetTitle("Arbitrary units") # p_pull.getFrame().GetXaxis().SetTitle("HLT #tau p_{T} - #tau-jet p_{T} (GeV/c)") p_pull.getFrame().GetXaxis().SetTitle("HLT #tau p_{T}/ #tau-jet p_{T} - 1") p_pull.getFrame2().GetYaxis().SetTitle("Ratio") p_pull.getFrame2().GetYaxis().SetTitleOffset(1.6) histograms.addText(0.2, 0.75, "LooseIsoPFTau50_Trk30_eta2p1", 17) histograms.addText(0.2, 0.68, analysis.split("_")[len(analysis.split("_")) -1], 17) histograms.addText(0.2, 0.61, "Runs "+runRange, 17) p_pull.draw() histograms.addStandardTexts(lumi=lumi) p_pull.save(formats) """ ######################################################################### print "Output written in", plotDir
def main(opts): style = tdrstyle.TDRStyle() # Set ROOT batch mode boolean ROOT.gROOT.SetBatch(opts.batchMode) # Get all datasets from the mcrab dir # def GetDatasetsFromDir(mcrab, opts, **kwargs): #iro datasetsMgr = GetDatasetsFromDir(opts.mcrab, opts, **kwargs) #kwargs.get("analysis")) # Determine Integrated Luminosity (If Data datasets present) intLumi = GetLumi(datasetsMgr) # Update to PU datasetsMgr.updateNAllEventsToPUWeighted() # Remove datasets datasetsMgr.remove(kwargs.get("rmDataset")) # datasetsMgr.remove(filter(lambda name: not "QCD" in name, datasetsMgr.getAllDatasetNames())) # datasetsMgr.remove(filter(lambda name: "QCD" in name in name, datasetsMgr.getAllDatasetNames())) # Set custom XSections #datasetsMgr.getDataset("QCD_bEnriched_HT1000to1500").setCrossSection(1.0) #datasetsMgr.getDataset("QCD_bEnriched_HT1500to2000").setCrossSection(1.0) #datasetsMgr.getDataset("QCD_bEnriched_HT2000toInf").setCrossSection(1.0) #datasetsMgr.getDataset("QCD_bEnriched_HT300to500").setCrossSection(1.0) #datasetsMgr.getDataset("QCD_bEnriched_HT500to700").setCrossSection(1.0) #datasetsMgr.getDataset("QCD_bEnriched_HT700to1000").setCrossSection(1.0) # Default merging & ordering: "Data", "QCD", "SingleTop", "Diboson" plots.mergeRenameReorderForDataMC(datasetsMgr) # Remove datasets (for merged names) datasetsMgr.remove(kwargs.get("rmDataset")) # Print the cross datasetsMgr.PrintCrossSections() for h_prefix in ["reco"]: # Get ref histo here and the fixed histos (TT, QCD, QCD-b inclusiveHisto, fixedHistos = GetHistosForPlotter(datasetsMgr, h_prefix + "MET_Et", **kwargs) inclusiveHisto.setName("Inclusive") inclusiveHisto.setLegendLabel("Inclusive") #for hi in fixedHistos: # print(type(hi), hi.getName()) #return # For-loop: All Histogram names for counter, hName in enumerate(hNames): # Get the save path and name savePath, saveName = GetSavePathAndName(h_prefix + hName[0], **kwargs) saveName = savePath + h_prefix + hSaveNames[counter] # Get Histos for Plotter refHisto_, otherHistos_ = GetHistosForPlotter(datasetsMgr, h_prefix + hName[0], **kwargs) refHisto1, otherHistos2 = GetHistosForPlotter(datasetsMgr, h_prefix + hName[1], **kwargs) refHisto2, otherHistos2 = GetHistosForPlotter(datasetsMgr, h_prefix + hName[2], **kwargs) refHisto3, otherHistos2 = GetHistosForPlotter(datasetsMgr, h_prefix + hName[3], **kwargs) refHisto4, otherHistos2 = GetHistosForPlotter(datasetsMgr, h_prefix + hName[4], **kwargs) refHisto5, otherHistos2 = GetHistosForPlotter(datasetsMgr, h_prefix + hName[5], **kwargs) refHisto = inclusiveHisto # customize histos refHisto_.setName(hLegends[counter][0]) refHisto_.setLegendLabel(hLegends[counter][0]) refHisto_.setDrawStyle("P") refHisto_.setLegendStyle("P") styleDict[hStyles[0]].apply(refHisto_.getRootHisto()) refHisto1.setName(hLegends[counter][1]) refHisto1.setLegendLabel(hLegends[counter][1]) refHisto1.setDrawStyle("P") refHisto1.setLegendStyle("P") styleDict[hStyles[1]].apply(refHisto1.getRootHisto()) refHisto2.setName(hLegends[counter][2]) refHisto2.setLegendLabel(hLegends[counter][2]) refHisto2.setDrawStyle("P") refHisto2.setLegendStyle("P") styleDict[hStyles[2]].apply(refHisto2.getRootHisto()) refHisto3.setName(hLegends[counter][3]) refHisto3.setLegendLabel(hLegends[counter][3]) refHisto3.setDrawStyle("P") refHisto3.setLegendStyle("P") styleDict[hStyles[3]].apply(refHisto3.getRootHisto()) refHisto4.setName(hLegends[counter][4]) refHisto4.setLegendLabel(hLegends[counter][4]) refHisto4.setDrawStyle("P") refHisto4.setLegendStyle("P") styleDict[hStyles[4]].apply(refHisto4.getRootHisto()) refHisto5.setName(hLegends[counter][5]) refHisto5.setLegendLabel(hLegends[counter][5]) refHisto5.setDrawStyle("P") refHisto5.setLegendStyle("P") styleDict[hStyles[5]].apply(refHisto5.getRootHisto()) otherHistos = [refHisto_, refHisto1, refHisto2, refHisto3, refHisto4, refHisto5] #for hi in otherHistos: # print hi.getName() #return # Create a comparison plot p = plots.ComparisonManyPlot(refHisto, otherHistos) # Remove negative contributions #RemoveNegativeBins(datasetsMgr, hName, p) # Create a frame if kwargs.get("logY")==True: opts = {"ymin": 8e-5, "ymax": 2} #opts = {"ymin": 1e-3, "ymax": 1} else: opts = {"ymin": 8.e-5, "ymax": 2} ratioOpts = {"ymin": 0.1, "ymax": 10.0} p.createFrame(saveName, createRatio=kwargs.get("createRatio"), opts=opts, opts2=ratioOpts) # Customise Legend moveLegend = {"dx": -0.2, "dy": +0.0, "dh": -0.1} p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) #p.removeLegend() # Customise frame p.getFrame().GetYaxis().SetTitle( getTitleY(refHisto, **kwargs) ) #p.setEnergy("13") if kwargs.get("createRatio"): p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.7) # SetLog SetLogAndGrid(p, **kwargs) # Add cut line/box _kwargs = { "lessThan": kwargs.get("cutLessThan")} p.addCutBoxAndLine(cutValue=kwargs.get("cutValue"), fillColor=kwargs.get("cutFillColour"), box=kwargs.get("cutBox"), line=kwargs.get("cutLine"), **_kwargs) # Move the refDataset to first in the draw order (back) histoNames = [h.getName() for h in p.histoMgr.getHistos()] p.histoMgr.reorder(filter(lambda n: plots._legendLabels[kwargs.get("refDataset") ] not in n, histoNames)) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(2)) # Draw plots p.draw() # Customise text histograms.addStandardTexts(lumi=intLumi) # histograms.addText(0.4, 0.9, "Alexandros Attikis", 17) histograms.addText(0.2, 0.88, plots._legendLabels[kwargs.get("refDataset")], 17) # Save canvas under custom dir if not os.path.exists(savePath): os.mkdir(savePath) SaveAs(p, savePath, saveName, kwargs.get("saveFormats")) return
def doPlot(name, graphs, limits, xlabel, scenario, mass): higgs = "h" if "lowMH" in scenario: higgs = "H" excluded = graphs["muexcluded"] limit.setExcludedStyle(excluded) excluded.SetFillStyle(1001) excluded.SetLineWidth(0) excluded.SetLineStyle(0) excluded.SetLineColor(ROOT.kWhite) excludedCopy = excluded.Clone() if not mass in [90]: excludedCopy.SetFillColorAlpha( ROOT.kWhite, 0.0) # actual color doesn't matter, want fully transparent # else: # excluded.SetLineColor(ROOT.kBlack) # Uncomment when we have allowed for n in ["Allowed", "Allowed2"]: a = graphs[n] if a is None: continue a.SetFillStyle(3005) a.SetFillColor(ROOT.kRed) a.SetLineWidth(-302) a.SetLineColor(ROOT.kRed) a.SetLineStyle(1) legend_dh = 0 grs = [] if "observed" in graphs: grs.extend([ histograms.HistoGraph(graphs["observed"], "Observed", drawStyle="L", legendStyle="l"), histograms.HistoGraph(graphs["obs_th_plus"], "ObservedPlus", drawStyle="L", legendStyle="l"), histograms.HistoGraph(graphs["obs_th_minus"], "ObservedMinus", drawStyle="L", legendStyle=None), ]) legend_dh = 0.1 grs.extend([ histograms.HistoGraph(excluded, "Excluded", drawStyle="F"), histograms.HistoGraph(excludedCopy, "ExcludedCopy", drawStyle=None, legendStyle="f"), histograms.HistoGraph(graphs["Allowed"], "Allowed", drawStyle="L", legendStyle="lf"), ]) if graphs["Allowed2"] is not None: grs.append( histograms.HistoGraph(graphs["Allowed2"], "Allowed2", drawStyle="L", legendStyle=None)) plot = plots.PlotBase(grs, saveFormats=[".png", ".pdf", ".C"]) plot.histoMgr.setHistoLegendLabelMany({ "ExcludedCopy": "Excluded", "Allowed": "m_{" + higgs + "}^{MSSM} #neq 125#pm3 GeV", "Excluded": None, }) if "observed" in graphs: plot.histoMgr.setHistoLegendLabelMany({ "ObservedPlus": "Observed #pm1#sigma (th.)", }) textPos = "left" dx = 0 dy = -0.15 if mass in [90, 150]: textPos = "right" dx = 0.35 if mass in [155, 160]: textPos = "right" dy = -0.02 plot.setLegend( histograms.createLegend(0.19 + dx, 0.75 + dy - legend_dh, 0.57 + dx, 0.80 + dy)) histograms.moveLegend(plot.legend, dh=0.05, dy=-0.05) #plot.legend.SetFillColor(0) #plot.legend.SetFillStyle(1001) name = name.replace("-", "_") plot.createFrame(name, opts={ "ymin": 0, "ymax": tanbMax, "xmin": 200, "xmax": 3300 }) plot.frame.GetXaxis().SetTitle(xlabel) plot.frame.GetYaxis().SetTitle(limit.tanblimit) plot.draw() plot.setLuminosity(limits.getLuminosity()) plot.addStandardTexts(cmsTextPosition=textPos) size = 20 x = 0.2 + dx histograms.addText(x, 0.9 + dy, limit.process, size=size) histograms.addText(x, 0.863 + dy, limits.getFinalstateText(), size=size) histograms.addText(x, 0.815 + dy, limit.getTypesetScenarioName(scenario.replace( "_mu", "")), size=size) histograms.addText(x, 0.767 + dy, "m_{H^{+}}=%d GeV" % mass, size=size) # histograms.addText(0.2, 0.231, "Min "+limit.BR+"(t#rightarrowH^{+}b)#times"+limit.BR+"(H^{+}#rightarrow#tau#nu)", size=0.5*size) #Adding a LHC label: # ROOT.LHCHIGGS_LABEL(0.97,0.72,1) # FH_version = db.getVersion("FeynHiggs") # histograms.addText(x, 0.55, FH_version) # HD_version = db.getVersion("HDECAY") # histograms.addText(x, 0.55, FH_version+" and "+HD_version, size=size) # histograms.addText(x, 0.48, "Derived from", size=size) # histograms.addText(x, 0.43, "CMS HIG-12-052", size=size) plot.save() print "Created", name
def doPlotMu(name, graphs, styleList, limits, xlabel, xvarName, legendVariable): objs = [] ll = {} cutValue = 100 # for cutting a slice +- cutValue around 0 from the (mu,tanb) plot for gr, mu in graphs: if xvarName == "mu": histo = histograms.HistoGraph(gr, "Obs%d"%mu, drawStyle="LP", legendStyle="lp") plus = gr.Clone() minus = gr.Clone() N = gr.GetN() for i in range(0,N): j = N - 1 - i x = gr.GetX()[j] if x > -cutValue: minus.RemovePoint(j) if x < cutValue: plus.RemovePoint(0) objs.append(histograms.HistoGraph(minus, "Obs%d"%mu, drawStyle="LP", legendStyle="lp")) objs.append(histograms.HistoGraph(plus, "ObsCopy%d"%mu, drawStyle="LP", legendStyle="lp")) ll["ObsCopy%d"%mu] = None else: objs.append(histograms.HistoGraph(gr, "Obs%d"%mu, drawStyle="LP", legendStyle="lp")) ll["Obs%d"%mu] = "Observed, "+legendVariable+"=%d %s" % (mu, limit.massUnit()) # N = gr.GetN() # for i in range(0,N): # j = N - 1 - i # if gr.GetY()[j] == 1: # gr.RemovePoint(j) plot = plots.PlotBase(objs) if xvarName == "mu": doubleStyleList = [] for style in styleList: doubleStyleList.append(style) doubleStyleList.append(style) plot.histoMgr.forEachHisto(styles.Generator(doubleStyleList)) else: plot.histoMgr.forEachHisto(styles.Generator(styleList)) plot.histoMgr.setHistoLegendLabelMany(ll) plot.setLegend(histograms.moveLegend(histograms.createLegend(0.57, 0.155, 0.87, 0.355), dx=-0.1)) plot.createFrame(name, opts={"ymin": 0, "ymax": tanbMax}) plot.frame.GetXaxis().SetTitle(xlabel) plot.frame.GetXaxis().SetLabelSize(20) plot.frame.GetYaxis().SetTitle(limit.tanblimit) plot.draw() plot.setLuminosity(limits.getLuminosity()) plot.addStandardTexts() size = 20 x = 0.2 histograms.addText(x, 0.9, limit.process, size=size) histograms.addText(x, 0.863, limits.getFinalstateText(), size=size) histograms.addText(x, 0.815, "MSSM m_{h}^{max}", size=size) # histograms.addText(x, 0.775, limit.BRassumption, size=size) histograms.addText(x, 0.72, "FeynHiggs 2.9.4", size=size) histograms.addText(x, 0.65, "Derived from", size=size) histograms.addText(x, 0.6, "CMS HIG-12-052", size=size) # histograms.addText(x, 0.6, "CMS HIG-11-019", size=size) # histograms.addText(x, 0.55, "JHEP07(2012)143", size=size) #Adding a LHC label: ROOT.LHCHIGGS_LABEL(0.97,0.72,1) plot.save() print print "Plotting",name print
def analyze(analysis=None): paths = [sys.argv[1]] datasets = dataset.getDatasetsFromMulticrabDirs(paths) # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="SingleNeutrino") # datasets = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,includeOnlyTasks="QCD") # analysis = datasets.getAllDatasets()[0].getAnalysisName() #datasetsMC = dataset.getDatasetsFromMulticrabDirs(paths,analysisName=analysis,excludeTasks="ZeroBias") createRatio = False # for d in datasets.getAllDatasets(): # print d.getName() style = tdrstyle.TDRStyle() dataset1 = datasets.getDataDatasets() #### dataset1 = datasets.getMCDatasets() rateETM120 = 5521.35 # Hz #effETM120 = 0.000611208781402 #8.75017364672e-05 #effETM120 = 0.000619219298648 effETM120 = 0.000203698623826 #### effETM120 = 0.186701136914 # QCD scale = rateETM120 / effETM120 * 0.001 #(Hz->kHz) # for d in dataset1: # d.scale(scale) dataset2 = dataset1 createRatio = False #if isinstance(datasetsMC,dataset.DatasetManager): # dataset2 = datasetsMC.getMCDatasets() # createRatio = True eff1PU = getEfficiency(dataset1, "NumeratorPU", "DenominatorPU") scaleGraph(eff1PU, scale) namePU = "TauMET_" + analysis + "_nVtx" legend1 = "Data" legend2 = "Simulation" styles.dataStyle.apply(eff1PU) eff1PU.SetMarkerSize(1) #eff2PU.SetMarkerSize(1.5) pPU = plots.PlotBase([histograms.HistoGraph(eff1PU, "eff1", "p", "P")]) pPU.histoMgr.setHistoLegendLabelMany({"eff1": legend1}) # Fit # yval = fit("Data",pPU,eff1PU,30,59) yval = fit("Data", pPU, eff1PU, 5, 59) #### opts = {"ymin": 0, "ymax": 6, "xmax": 60} opts = {"ymin": 0, "ymax": 20, "xmax": 60} #### opts = {"ymin": 0, "ymax": 300, "xmax": 60} opts2 = {"ymin": 0.5, "ymax": 1.5} moveLegend = {"dx": -0.5, "dy": -0.1, "dh": -0.1} if createRatio: pPU.createFrame(os.path.join(plotDir, namePU), createRatio=True, opts=opts, opts2=opts2) else: pPU.createFrame(os.path.join(plotDir, namePU), opts=opts, opts2=opts2) pPU.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) pPU.getFrame().GetYaxis().SetTitle("L1 rate (kHz)") pPU.getFrame().GetXaxis().SetTitle("n vertices") if createRatio: pPU.getFrame2().GetYaxis().SetTitle("Ratio") pPU.getFrame2().GetYaxis().SetTitleOffset(1.6) pPU.draw() print "check frame min,max", pPU.getFrame().GetYaxis().GetXmin( ), pPU.getFrame().GetYaxis().GetXmax() x = array.array('d', [55, 55, 0]) y = array.array('d', [0, yval, yval]) n = 3 vert = ROOT.TGraph(n, x, y) vert.SetLineStyle(2) vert.SetLineColor(2) vert.SetLineWidth(2) vert.Draw("L") lumi = 0.0 for d in datasets.getDataDatasets(): print "luminosity", d.getName(), d.getLuminosity() lumi += d.getLuminosity() histograms.addStandardTexts(lumi=lumi) if not os.path.exists(plotDir): os.mkdir(plotDir) pPU.save(formats) print "Output written in", plotDir
def main(): style = tdrstyle.TDRStyle() #style.setWide(True) style.setPaletteMy() ROOT.gStyle.SetNumberContours(20) # tdrstyle.setDeepSeaPalette() # tdrstyle.setRainBowPalette() # tdrstyle.setDarkBodyRadiatorPalette() # tdrstyle.setGreyScalePalette() # tdrstyle.setTwoColorHuePalette() # Set ROOT batch mode boolean ROOT.gROOT.SetBatch(parseOpts.batchMode) # Get all datasets from the mcrab dir #datasetsMgr = GetDatasetsFromDir(parseOpts.mcrab, kwargs.get("analysis")) datasetsMgr = GetDatasetsFromDir(parseOpts.mcrab, parseOpts, **kwargs) # Determine Integrated Luminosity (If Data datasets present) intLumi = GetLumi(datasetsMgr) # Update to PU datasetsMgr.updateNAllEventsToPUWeighted() # Remove datasets #datasetsMgr.remove(kwargs.get("rmDataset")) datasetsMgr.remove( filter(lambda name: not kwargs.get("refDataset") in name, datasetsMgr.getAllDatasetNames())) # Set custom XSections # d.getDataset("TT_ext3").setCrossSection(831.76) # Default merging & ordering: "Data", "QCD", "SingleTop", "Diboson" plots.mergeRenameReorderForDataMC( datasetsMgr ) #WARNING: Merged MC histograms must be normalized to something! # Remove datasets (for merged names) # datasetsMgr.remove(kwargs.get("rmDataset")) # For-loop: All Histogram names for hName in hNames: savePath, saveName = GetSavePathAndName(hName, **kwargs) # Get Histos for Plotter refHisto, otherHistos = GetHistosForPlotter(datasetsMgr, hName, **kwargs) # Create a plot p = plots.PlotBase([refHisto], kwargs.get("saveFormats")) # Remove negative contributions #RemoveNegativeBins(datasetsMgr, hName, p) # Customize # p.histoMgr.setHistoDrawStyleAll("COL") #"CONT4" "COLZ" "COL" # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinX(kwargs.get("rebinX"))) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().RebinY(kwargs.get("rebinY"))) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetXaxis().SetRangeUser(1.0, 5.0)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetYaxis().SetRangeUser(1.0, 5.0)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetZaxis().SetRangeUser(0.0, 0.015)) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMinimum(kwargs.get("zMin"))) # p.histoMgr.forEachHisto(lambda h: h.getRootHisto().SetMaximum(kwargs.get("zMax"))) # Create a frame opts = {"ymin": 0.0, "ymaxfactor": 1.0} p.createFrame(saveName, opts=opts) # Customise frame p.getFrame().GetXaxis().SetTitle(getTitleX(refHisto, **kwargs)) p.getFrame().GetYaxis().SetTitle(getTitleY(refHisto, **kwargs)) # p.getFrame().GetZaxis().SetTitle( getTitleZ(refHisto, **kwargs) ) #does not work # SetLog SetLogAndGrid(p, **kwargs) # Add cut line/box _kwargs = {"lessThan": kwargs.get("cutLessThan")} p.addCutBoxAndLine(cutValue=kwargs.get("cutValue"), fillColor=kwargs.get("cutFillColour"), box=kwargs.get("cutBox"), line=kwargs.get("cutLine"), **_kwargs) # Customise Legend moveLegend = {"dx": -0.1, "dy": +0.0, "dh": -0.1} p.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) p.removeLegend() # Add MC Uncertainty (Invalid method for a 2-d histogram) #p.addMCUncertainty() # Draw plots p.draw() # Customise text histograms.addStandardTexts(lumi=intLumi) #histograms.addText(0.16, 0.95, plots._legendLabels[kwargs.get("refDataset")], 22) histograms.addText(0.20, 0.88, plots._legendLabels[kwargs.get("refDataset")], 17) # Save canvas under custom dir if not os.path.exists(savePath): os.mkdir(savePath) SaveAs(p, savePath, saveName, kwargs.get("saveFormats")) return
def main(): style = tdrstyle.TDRStyle() # Set ROOT batch mode boolean ROOT.gROOT.SetBatch(parseOpts.batchMode) # Get all datasets from the mcrab dir datasetsMgr = GetDatasetsFromDir(parseOpts.mcrab, kwargs.get("analysis")) # Determine Integrated Luminosity (If Data datasets present) intLumi = GetLumi(datasetsMgr) # Update to PU datasetsMgr.updateNAllEventsToPUWeighted() # Remove datasets datasetsMgr.remove(kwargs.get("rmDataset")) # datasetsMgr.remove(filter(lambda name: not "QCD" in name, datasetsMgr.getAllDatasetNames())) # datasetsMgr.remove(filter(lambda name: "QCD" in name in name, datasetsMgr.getAllDatasetNames())) # Set custom XSections # d.getDataset("TT_ext3").setCrossSection(831.76) # Default merging & ordering: "Data", "QCD", "SingleTop", "Diboson" plots.mergeRenameReorderForDataMC(datasetsMgr) #WARNING: Merged MC histograms must be normalized to something! # Remove datasets (for merged names) datasetsMgr.remove(kwargs.get("rmDataset")) # For-loop: All Histogram names for counter, hName in enumerate(hNames): # Get the save path and name savePath, saveName = GetSavePathAndName(hName, **kwargs) # Get Histos for Plotter refHisto, otherHistos = GetHistosForPlotter(datasetsMgr, hName, **kwargs) # Create a comparison plot p = plots.ComparisonManyPlot(refHisto, otherHistos) # Remove negative contributions #RemoveNegativeBins(datasetsMgr, hName, p) # Create a frame if kwargs.get("logY"): opts = {"ymin": 1e-5, "ymaxfactor": 10} else: opts = {"ymin": 0.0, "ymaxfactor": 1.2} ratioOpts = {"ymin": 0.0, "ymax": 2.0} p.createFrame(saveName, createRatio=kwargs.get("createRatio"), opts=opts, opts2=ratioOpts) # Customise Legend moveLegend = {"dx": -0.1, "dy": +0.0, "dh": -0.1} p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) #p.removeLegend() # Customise frame p.getFrame().GetYaxis().SetTitle( getTitleY(refHisto, **kwargs) ) #p.setEnergy("13") if kwargs.get("createRatio"): p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) # SetLog SetLogAndGrid(p, **kwargs) # Add cut line/box _kwargs = { "lessThan": kwargs.get("cutLessThan")} p.addCutBoxAndLine(cutValue=kwargs.get("cutValue"), fillColor=kwargs.get("cutFillColour"), box=kwargs.get("cutBox"), line=kwargs.get("cutLine"), **_kwargs) # Move the refDataset to first in the draw order (back) histoNames = [h.getName() for h in p.histoMgr.getHistos()] p.histoMgr.reorder(filter(lambda n: plots._legendLabels[kwargs.get("refDataset") ] not in n, histoNames)) # Draw plots p.draw() # Customise text histograms.addStandardTexts(lumi=intLumi) # histograms.addText(0.4, 0.9, "Alexandros Attikis", 17) # histograms.addText(0.4, 0.11, "Runs " + datasetsMgr.loadRunRange(), 17) # Save canvas under custom dir SaveAs(p, savePath, saveName, kwargs.get("saveFormats")) return
def doLimitError(limits, unblindedStatus): expRelErrors = [] expLabels = {} obsRelErrors = [] obsLabels = {} order = [0, 1, -1, 2, -2] expErrors = [limits.expectedErrorGraph(sigma=s) for s in order] if expErrors[0] != None: exps = [limits.expectedGraph(sigma=s) for s in order] expRelErrors = [(limit.divideGraph(expErrors[i], exps[i]), "ExpRelErr%d" % i) for i in xrange(len(exps))] expLabels = { "ExpRelErr0": "Expected median", "ExpRelErr1": "Expected +1#sigma", "ExpRelErr2": "Expected -1#sigma", "ExpRelErr3": "Expected +2#sigma", "ExpRelErr4": "Expected -2#sigma", } if unblindedStatus: obsErr = limits.observedErrorGraph() if obsErr != None: obs = limits.observedGraph() if obs != None: obsRelErrors = [(limit.divideGraph(obsErr, obs), "ObsRelErr")] obsLabels = {"ObsRelErr": "Observed"} if len(expRelErrors) == 0 and len(obsRelErrors) == 0: return # Create the plot plot = plots.PlotBase() if len(expRelErrors) > 0: plot.histoMgr.extendHistos([ histograms.HistoGraph(x[0], x[1], drawStyle="PL", legendStyle="lp") for x in expRelErrors ]) plot.histoMgr.forEachHisto(styles.generator()) def sty(h): r = h.getRootHisto() r.SetLineStyle(1) r.SetLineWidth(3) r.SetMarkerSize(1.4) plot.histoMgr.forEachHisto(sty) plot.histoMgr.setHistoLegendLabelMany(expLabels) if unblindedStatus: if len(obsRelErrors) > 0: obsRelErrors[0][0].SetMarkerSize(1.4) obsRelErrors[0][0].SetMarkerStyle(25) plot.histoMgr.insertHisto( 0, histograms.HistoGraph(obsRelErrors[0][0], obsRelErrors[0][1], drawStyle="PL", legendStyle="lp")) plot.histoMgr.setHistoLegendLabelMany(obsLabels) plot.setLegend( histograms.moveLegend(histograms.createLegend(0.48, 0.75, 0.85, 0.92), dx=0.1, dy=-0.1)) if len(limits.mass) == 1: plot.createFrame("limitsBrRelativeUncertainty", opts={ "xmin": limits.mass[0] - 5.0, "xmax": limits.mass[0] + 5.0, "ymin": 0, "ymaxfactor": 1.5 }) else: plot.createFrame("limitsBrRelativeUncertainty", opts={ "ymin": 0, "ymaxfactor": 1.5 }) plot.frame.GetXaxis().SetTitle(limit.mHplus()) plot.frame.GetYaxis().SetTitle("Uncertainty/limit") plot.draw() plot.setLuminosity(limits.getLuminosity()) plot.addStandardTexts() size = 20 x = 0.2 histograms.addText(x, 0.88, limit.process, size=size) histograms.addText(x, 0.84, limits.getFinalstateText(), size=size) histograms.addText(x, 0.79, limit.BRassumption, size=size) size = 22 x = 0.55 histograms.addText(x, 0.88, "Toy MC relative", size=size) histograms.addText(x, 0.84, "statistical uncertainty", size=size) plot.save()
def doBRlimit(limits, unblindedStatus, opts, log=False): leptonicFS = False graphs = [] if unblindedStatus: gr = limits.observedGraph() if gr != None: gr.SetPoint(gr.GetN() - 1, gr.GetX()[gr.GetN() - 1] - 1e-10, gr.GetY()[gr.GetN() - 1]) if opts.excludedArea: graphs.append( histograms.HistoGraph(gr, "Observed", drawStyle="PL", legendStyle=None)) excluded = gr.Clone() excluded.SetPoint(excluded.GetN(), excluded.GetX()[excluded.GetN() - 1], 0.05) excluded.SetPoint(excluded.GetN(), excluded.GetX()[0], 0.05) limit.setExcludedStyle(excluded) graphs.append( histograms.HistoGraph(excluded, "Excluded", drawStyle="F", legendStyle="lpf", legendLabel="Observed")) else: graphs.append( histograms.HistoGraph(gr, "Observed", drawStyle="PL", legendStyle="lp")) graphs.extend([ histograms.HistoGraph(limits.expectedGraph(), "Expected", drawStyle="L"), histograms.HistoGraph(limits.expectedBandGraph(sigma=1), "Expected1", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(limits.expectedBandGraph(sigma=2), "Expected2", drawStyle="F", legendStyle="fl"), ]) saveFormats = [".png", ".C", ".pdf"] if not opts.excludedArea: saveFormats.append(".eps") plot = plots.PlotBase(graphs, saveFormats=saveFormats) plot.setLuminosity(limits.getLuminosity()) plot.histoMgr.setHistoLegendLabelMany({ "Expected": None, "Expected1": "Expected median #pm 1#sigma", "Expected2": "Expected median #pm 2#sigma" }) dy = -0.1 limit.BRassumption = "" #limit.BRassumption = "Assuming B(H^{+}#rightarrow#tau^{+}#nu_{#tau}) = 1" #limit.BRassumption = "Assuming B(H^{+}#rightarrowt#bar{b}) = 1" if limit.BRassumption != "": dy -= 0.05 #if len(limits.getFinalstates()) > 1: # dy -= 0.1 # Create legend x = 0.51 x = 0.45 legend = histograms.createLegend(x, 0.78 + dy, x + 0.4, 0.92 + dy) legend.SetMargin(0.17) # Make room for the final state text if opts.excludedArea: legend.SetFillStyle(1001) plot.setLegend(legend) name = "limitsBr" ymin = 0 ymax = limits.getFinalstateYmaxBR() #fixme: alexandros if opts.logx: name += "_logx" if log: name += "_log" if limits.isHeavyStatus: ymin = 1e-3 ymax = 10.0 if limit.BRassumption != "": ymax = 10.0 else: ymin = 1e-3 ymax = 4e-2 if leptonicFS: ymax = 10 if len(limits.mass) == 1: plot.createFrame(name, opts={ "xmin": limits.mass[0] - 5.0, "xmax": limits.mass[0] + 5.0, "ymin": ymin, "ymax": ymax }) else: plot.createFrame(name, opts={"ymin": ymin, "ymax": ymax}) # Set x-axis title plot.frame.GetXaxis().SetTitle(limit.mHplus()) if limits.isHeavyStatus: if limit.BRassumption != "": plot.frame.GetYaxis().SetTitle( "95% CL limit for #sigma_{H^{+}} (pb)") else: plot.frame.GetYaxis().SetTitle(limit.sigmaBRlimit) else: plot.frame.GetYaxis().SetTitle(limit.BRlimit) # Enable/Disable logscale for axes if log: plot.getPad().SetLogy(log) if opts.logx: plot.getPad().SetLogx(log) # Draw the plot with standard texts plot.draw() plot.addStandardTexts() # Add physics-process text size = 20 x = 0.51 x = 0.45 process = limit.process if limits.isHeavyStatus: process = limit.processHeavy histograms.addText(x, 0.88, process, size=size) # Add final-state text # histograms.addText(x, 0.84, limits.getFinalstateText(), size=size) #fixme: alexandros histograms.addText(x, 0.84, "fully hadronic final state", size=size) #fixme: alexandros # histograms.addText(x, 0.84, "#tau_{h}+jets and #mu#tau_{h} final states", size=size) # histograms.addText(x, 0.84, "#tau_{h}+jets final state", size=size) # histograms.addText(x, 0.84, "#tau_{h}+jets, #mu#tau_{h}, ee, e#mu, #mu#mu final states", size=size) if leptonicFS: histograms.addText(x, 0.84, "#mu#tau_{h}, ee, e#mu, #mu#mu final states", size=size) if limit.BRassumption != "": histograms.addText(x, 0.79, limit.BRassumption, size=size) plot.save() return
def main(): style = tdrstyle.TDRStyle() # Set ROOT batch mode boolean ROOT.gROOT.SetBatch(parseOpts.batchMode) ROOT.gErrorIgnoreLevel = 3000 # Get all datasets from the mcrab dir datasetsMgr = GetDatasetsFromDir(parseOpts.mcrab, kwargs.get("analysis")) # datasetsMgr = dataset.getDatasetsFromMulticrabDirs([parseOpts.mcrab], analysisName=kwargs.get("analysis"), includeOnlyTasks="ChargedHiggs_HplusTB_HplusToTB_M_200") # datasetsMgr = dataset.getDatasetsFromMulticrabDirs([parseOpts.mcrab], analysisName=kwargs.get("analysis"), excludeTasks="M_200") # Determine Integrated Luminosity intLumi = GetLumi(datasetsMgr) # Update to PU datasetsMgr.updateNAllEventsToPUWeighted() # Remove datasets datasetsMgr.remove(kwargs.get("rmDataset")) # datasetsMgr.remove(filter(lambda name: not "QCD" in name, datasetsMgr.getAllDatasetNames())) # datasetsMgr.remove(filter(lambda name: "QCD" in name in name, datasetsMgr.getAllDatasetNames())) # Set custom XSections # datasetsMgr.getDataset("TT_ext3").setCrossSection(831.76) # Default merging & ordering: "Data", "QCD", "SingleTop", "Diboson" plots.mergeRenameReorderForDataMC(datasetsMgr) #WARNING: Merged MC histograms must be normalized to something! # Remove datasets (for merged names) datasetsMgr.remove(kwargs.get("rmDataset")) # datasetsMgr.remove(filter(lambda name: not "QCD" in name, datasetsMgr.getAllDatasetNames())) # datasetsMgr.remove(filter(lambda name: "QCD" in name in name, datasetsMgr.getAllDatasetNames())) # For-loop: All Histogram names for hName in hNames: savePath, saveName = GetSavePathAndName(hName, **kwargs) # Get efficiency histos refEff, otherEff = GetCutEfficiencyTGraphs(datasetsMgr, hName, "kFCP", **kwargs) # refEff, otherEff = GetCutEfficiencyTGraphs(datasetsMgr, hName, "kFFC", **kwargs) # refEff, otherEff = GetCutEfficiencyTGraphs(datasetsMgr, hName, "kBJeffrey", **kwargs) # refEff, otherEff = GetCutEfficiencyTGraphs(datasetsMgr, hName, "kFNormal", **kwargs) # Plot the efficiencies p = plots.ComparisonManyPlot(refEff, otherEff) # Create a frame opts = {"ymin": 0.0, "ymaxfactor": 1.2} #"ymax": 5e-1} ratioOpts = {"ymin": 0.0, "ymaxfactor": 1.2} p.createFrame(saveName, createRatio=kwargs.get("createRatio"), opts=opts, opts2=ratioOpts) # Customise Legend moveLegend = {"dx": -0.1 , "dy": +0.0, "dh": -0.1} p.setLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)) #p.removeLegend() # Customise frame # p.setEnergy("13") if kwargs.get("createRatio"): p.getFrame2().GetYaxis().SetTitle("Ratio") p.getFrame2().GetYaxis().SetTitleOffset(1.6) # SetLog SetLogAndGrid(p, **kwargs) # Add cut line/box _kwargs = { "lessThan": kwargs.get("cutLessThan")} p.addCutBoxAndLine(cutValue=kwargs.get("cutValue"), fillColor=kwargs.get("cutFillColour"), box=kwargs.get("cutBox"), line=kwargs.get("cutLine"), **_kwargs) # Move the refDataset to first in the draw order (back) histoNames = [h.getName() for h in p.histoMgr.getHistos()] p.histoMgr.reorder(filter(lambda n: plots._legendLabels[kwargs.get("refDataset") ] not in n, histoNames)) # Draw plots p.draw() # Customise text histograms.addStandardTexts(lumi=intLumi) # histograms.addText(0.4, 0.9, "Alexandros Attikis", 17) # histograms.addText(0.4, 0.11, "Runs " + datasetsMgr.loadRunRange(), 17) # Save canvas under custom dir SaveAs(p, savePath, saveName, kwargs.get("saveFormats")) return
def doPlot(name, graphs, limits, xlabel, scenario,progversion): obs = graphs["obs"] # excluded = ROOT.TGraph(obs) # excluded.SetName("ExcludedArea") # excluded.SetFillColor(ROOT.kGray) ## excluded.SetPoint(excluded.GetN(), obs.GetX()[obs.GetN()-1], tanbMax) ## excluded.SetPoint(excluded.GetN(), obs.GetX()[0], tanbMax) # excluded.SetPoint(excluded.GetN(), -1, 1) # excluded.SetPoint(excluded.GetN(), -1, 100) # excluded.SetPoint(excluded.GetN(), obs.GetX()[0], 100) # if not obs.GetY()[0] == 100: # excluded.SetPoint(excluded.GetN(), obs.GetX()[0], obs.GetY()[0]) """ excluded.SetPoint(excluded.GetN(), obs.GetX()[0], tanbMax) excluded.SetPoint(excluded.GetN(), 0, tanbMax) excluded.SetPoint(excluded.GetN(), 0, 1) excluded.SetPoint(excluded.GetN(), obs.GetX()[obs.GetN()-1], 1) """ # excluded.SetFillColor(ROOT.kGray) # excluded.SetFillStyle(3354) # excluded.SetLineWidth(0) # excluded.SetLineColor(ROOT.kWhite) expected = graphs["exp"] expected.SetLineStyle(2) expected1 = graphs["exp1"] expected1.SetLineStyle(2) expected2 = graphs["exp2"] expected2.SetLineStyle(2) plot = plots.PlotBase([ histograms.HistoGraph(graphs["obs"], "Observed", drawStyle="PL", legendStyle="lp"), histograms.HistoGraph(graphs["obs_th_plus"], "ObservedPlus", drawStyle="L", legendStyle="l"), histograms.HistoGraph(graphs["obs_th_minus"], "ObservedMinus", drawStyle="L"), histograms.HistoGraph(graphs["excluded"], "Excluded", drawStyle="F", legendStyle="f"), histograms.HistoGraph(expected, "Expected", drawStyle="L"), #histograms.HistoGraph(graphs["exp"], "Expected", drawStyle="L"), #### histograms.HistoGraph(graphs["Allowed"], "Allowed by \nm_{H} = 125.9#pm3.0 "+GeVUnit, drawStyle="F", legendStyle="f"), #### histograms.HistoGraph(graphs["Allowed"], "AllowedCopy", drawStyle="L", legendStyle="f"), # histograms.HistoGraph(graphs["mintanb"], "MinTanb", drawStyle="L"), #histograms.HistoGraph(graphs["exp1"], "Expected1", drawStyle="F", legendStyle="fl"), #histograms.HistoGraph(graphs["exp2"], "Expected2", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(expected1, "Expected1", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(expected2, "Expected2", drawStyle="F", legendStyle="fl"), ]) plot.histoMgr.setHistoLegendLabelMany({ "ObservedPlus": "Observed #pm1#sigma (th.)", "ObservedMinus": None, "Expected": None, # "MinTanb": None, #### "AllowedCopy": None, "Expected1": "Expected median #pm 1#sigma", "Expected2": "Expected median #pm 2#sigma" }) # plot.setLegend(histograms.createLegend(0.57, 0.155, 0.87, 0.355)) plot.setLegend(histograms.createLegend(0.19, 0.60, 0.57, 0.80)) plot.legend.SetFillColor(0) plot.legend.SetFillStyle(1001) plot.createFrame(name, opts={"ymin": 0, "ymax": tanbMax, "xmin": 180, "xmax": 600}) plot.frame.GetXaxis().SetTitle(xlabel) plot.frame.GetYaxis().SetTitle(limit.tanblimit) plot.draw() histograms.addStandardTexts(lumi="2.3-4.9", addCmsText=False) size = 20 x = 0.2 histograms.addText(x, 0.9, limit.processHeavy, size=size) histograms.addText(x, 0.863, limits.getFinalstateText(), size=size) #### histograms.addText(x, 0.815, "MSSM m_{h}^{max}", size=size) histograms.addText(x, 0.815,scenario, size=size) # histograms.addText(x, 0.775, limit.BRassumption, size=size) # histograms.addText(x, 0.735, "#mu=%d %s"%(mu, limit.massUnit()), size=size) # histograms.addText(0.7, 0.23, "Min "+limit.BR+"(t#rightarrowH^{+}b)#times"+limit.BR+"(H^{+}#rightarrow#tau#nu)", size=0.5*size) #Adding a LHC label: ROOT.LHCHIGGS_LABEL(0.97,0.72,1) histograms.addText(x, 0.55, progversion, size=size) histograms.addText(x, 0.48, "Derived from", size=size) histograms.addText(x, 0.43, "CMS HIG-13-XXX", size=size) # histograms.addText(x, 0.38, "JHEP07(2012)143", size=size) plot.save()
def Fit(datasets, histo, function): FitList = [] for dataset in datasets: datasetName = dataset.getName() print "Dataset = ", datasetName hh = dataset.getDatasetRootHisto(histo) hh.normalizeToOne() h = hh.getHistogram() #h = dataset.getDatasetRootHisto(histo).getHistogram() xMin = h.GetXaxis().GetXmin() xMax = h.GetXaxis().GetXmax() yMin = 0 yMax = 1.2 #statOption = ROOT.TEfficiency.kFNormal if "TT" in datasetName: if function == "gaus": fitGauss = ROOT.TF1("fitGauss", "gaus", -2.5, 2.5) # TF1 *fitBoFreq = new TF1("fitBoFreq","[0]*x+[1]",0,20); # h.Fit("gaus") #fitTest = ROOT.TF1("fitTest", "0.01", -2.5, 2.5) h.Fit("fitGauss", "SRBM") #h.GetListOfFunctions().Add(fitTest) legend = "TT" legend = "a legend" print "Legend", legend saveName = histo.split("/")[-1] + "_Fit" print saveName xTitle = "fixXTitle" yTitle = "fixYTitle" yMin = 0. yMax = 0.03 xMin = -2.3 xMax = 2.3 kwargs = {} options = {"ymin": yMin, "ymax": yMax, "xmin": xMin, "xMax": xMax} FitList.append(h) #p = plots.MCPlot(dataset, h, normalizeToLumi=0, saveFormats=[], **kwargs) p = plots.PlotBase(datasetRootHistos=FitList, saveFormats=kwargs.get("saveFormats")) p.createFrame(saveName, opts=options) p.getFrame().GetXaxis().SetTitle(xTitle) p.getFrame().GetYaxis().SetTitle(yTitle) #p.histoMgr.setHistoDrawStyle(datasetName, "AP") # Set range p.getFrame().GetXaxis().SetRangeUser(xMin, xMax) moveLegend = {"dx": -0.55, "dy": -0.01, "dh": -0.1} p.setLegend( histograms.moveLegend(histograms.createLegend(), **moveLegend)) # Add Standard Texts to plot histograms.addStandardTexts() p.draw() # Save plot in all formats savePath = os.path.join(opts.saveDir, "HplusMasses", histo.split("/")[0], opts.optMode) save_path = savePath SavePlot(p, saveName, save_path) return
def doPlot(name, graphs, limits, xlabel): if "obs" in graphs.keys(): obs = graphs["obs"] excluded = ROOT.TGraph(obs) excluded.SetName("ExcludedArea") excluded.SetFillColor(ROOT.kGray) excluded.SetPoint(excluded.GetN(), obs.GetX()[obs.GetN()-1], tanbMax) excluded.SetPoint(excluded.GetN(), obs.GetX()[0], tanbMax) excluded.SetFillColor(ROOT.kGray) excluded.SetFillStyle(3354) excluded.SetLineWidth(0) excluded.SetLineColor(ROOT.kWhite) plot = None if "obs" in graphs.keys(): plot = plots.PlotBase([ histograms.HistoGraph(graphs["obs"], "Observed", drawStyle="PL", legendStyle="lp"), histograms.HistoGraph(graphs["obs_th_plus"], "ObservedPlus", drawStyle="L", legendStyle="l"), histograms.HistoGraph(graphs["obs_th_minus"], "ObservedMinus", drawStyle="L"), histograms.HistoGraph(excluded, "Excluded", drawStyle="F", legendStyle="f"), histograms.HistoGraph(graphs["exp"], "Expected", drawStyle="L"), histograms.HistoGraph(graphs["exp1"], "Expected1", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(graphs["exp2"], "Expected2", drawStyle="F", legendStyle="fl"), ]) plot.histoMgr.setHistoLegendLabelMany({ "ObservedPlus": "Observed #pm1#sigma (th.)", "ObservedMinus": None, "Expected": None, "Expected1": "Expected median #pm 1#sigma", "Expected2": "Expected median #pm 2#sigma" }) else: plot = plots.PlotBase([ histograms.HistoGraph(graphs["exp"], "Expected", drawStyle="L"), histograms.HistoGraph(graphs["exp1"], "Expected1", drawStyle="F", legendStyle="fl"), histograms.HistoGraph(graphs["exp2"], "Expected2", drawStyle="F", legendStyle="fl"), ]) plot.histoMgr.setHistoLegendLabelMany({ "Expected": None, "Expected1": "Expected median #pm 1#sigma", "Expected2": "Expected median #pm 2#sigma" }) plot.setLegend(histograms.createLegend(0.57, 0.155, 0.87, 0.355)) plot.createFrame(name, opts={"ymin": 0, "ymax": tanbMax}) plot.frame.GetXaxis().SetTitle(xlabel) plot.frame.GetYaxis().SetTitle(limit.tanblimit) plot.draw() plot.setLuminosity(limits.getLuminosity()) plot.addStandardTexts() size = 20 x = 0.2 histograms.addText(x, 0.9, limit.process, size=size) histograms.addText(x, 0.863, limits.getFinalstateText(), size=size) histograms.addText(x, 0.815, "MSSM m_{h}^{max}", size=size) histograms.addText(x, 0.775, limit.BRassumption, size=size) histograms.addText(x, 0.735, "#mu=%d %s"%(mu, limit.massUnit()), size=size) plot.save()