def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setOptStat(False) style.setGridX(opts.gridX) style.setGridY(opts.gridY) # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts, 0) datasetsMgr.updateNAllEventsToPUWeighted() if 0: datasetsMgr.loadLuminosities() # from lumi.json if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Print datasets info summary datasetsMgr.PrintInfo() # Define the mapping histograms in numerator->denominator pairs VariableList = [ "L1Taus_SingleTau_Eff", "L1Taus_SingleTau_Rate", "L1Taus_TurnOn25", "L1Taus_TurnOn50" ] counter = 0 opts.nDatasets = len(datasetsMgr.getAllDatasets()) nPlots = len(VariableList) * opts.nDatasets # For-loop: All datasets for dataset in datasetsMgr.getAllDatasets(): opts.saveDir = aux.getSaveDirPath(opts.saveDirBase, prefix="hltaus/", postfix="ROC") PlotRateVsEff(datasetsMgr, dataset, "SingleTau", "PU140") PlotRateVsEff(datasetsMgr, dataset, "SingleTau", "PU200") PlotRateVsEff(datasetsMgr, dataset, "DiTau", "PU140") PlotRateVsEff(datasetsMgr, dataset, "DiTau", "PU200") # For-looop: All variables for hName in VariableList: hPath = os.path.join(opts.folder, hName) counter += 1 msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format( "Histogram", "%i" % counter, "/", "%s:" % (nPlots), "%s" % (dataset.getName())) aux.Print( ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), counter == 1) if "neutrino" in dataset.getName().lower(): if "rate" in hName.lower(): opts.saveDir = aux.getSaveDirPath(opts.saveDirBase, prefix="hltaus/", postfix="Rates") PlotHistos(dataset.getName(), hPath, hName.split("_")[0] + "_") else: pass else: if "rate" in hName.lower(): continue else: if "eff" in hName.lower(): opts.saveDir = aux.getSaveDirPath( opts.saveDirBase, prefix="hltaus/", postfix="Efficiencies") PlotHistos(dataset.getName(), hPath, hName.split("_")[0] + "_") if "turnon" in hName.lower(): opts.saveDir = aux.getSaveDirPath(opts.saveDirBase, prefix="hltaus/", postfix="TurnOns") PlotHistos(dataset.getName(), hPath, hName.split("_")[1] + "_") aux.Print( "All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
import HLTausAnalysis.NtupleAnalysis.tools.dataset as dataset import HLTausAnalysis.NtupleAnalysis.tools.histograms as histograms import HLTausAnalysis.NtupleAnalysis.tools.counter as counter import HLTausAnalysis.NtupleAnalysis.tools.tdrstyle as tdrstyle import HLTausAnalysis.NtupleAnalysis.tools.styles as styles import HLTausAnalysis.NtupleAnalysis.tools.plots as plots import HLTausAnalysis.NtupleAnalysis.tools.crosssection as xsect import HLTausAnalysis.NtupleAnalysis.tools.aux as aux import HLTausAnalysis.NtupleAnalysis.tools.multicrabConsistencyCheck as consistencyCheck import HLTausAnalysis.NtupleAnalysis.tools.ShellStyles as ShellStyles #================================================================================================ # Variable definition #================================================================================================ ss = ShellStyles.SuccessStyle() ns = ShellStyles.NormalStyle() ts = ShellStyles.NoteStyle() hs = ShellStyles.HighlightAltStyle() ls = ShellStyles.HighlightStyle() es = ShellStyles.ErrorStyle() cs = ShellStyles.CaptionStyle() #================================================================================================ # Function Definition #================================================================================================ def Print(msg, printHeader=False): fName = __file__.split("/")[-1] if printHeader == True: print "=== ", fName
def Plot2dHistograms(datasetsMgr, dsetName, histoName, index): msg = "%s%s (%s)%s" % (ShellStyles.SuccessStyle(), histoName, dsetName, ShellStyles.NormalStyle() ) aux.PrintFlushed(msg, index==1) # Custom Filtering of datasets dsetsMgr = datasetsMgr.deepCopy() if opts.verbose: dsetsMgr.PrintInfo() # Get Histogram name and its kwargs saveName = histoName.rsplit("/")[-1] + "_" + dsetName.split("_")[0] + dsetName.split("_")[-1] kwargs_ = GetHistoKwargs(saveName, opts) for i, d in enumerate(dsetsMgr.getAllDatasetNames(), 0): if d == dsetName: continue else: # Remove dataset from manager but do NOT close the file! dsetsMgr.remove(d, close=False) # Sanity check nDatasets = len(dsetsMgr.getAllDatasets()) if nDatasets > 1: raise Exception("More than 1 datasets detected in the dataset manager! Can only support 1 dataset. Please use the -i option to choose exactly 1 dataset'") # Get the reference histo and the list of histos to compare datasets0 = dsetsMgr.getAllDatasets()[0].getName() histoList = [getHisto(dsetsMgr, datasets0, histoName)] # Create the 2d plot Verbose("Creating the 2d plot", True) if opts.normalizeToLumi: p = plots.MCPlot(dsetsMgr, histoName, normalizeToLumi=opts.intLumi, saveFormats=[]) elif opts.normalizeByCrossSection: p = plots.MCPlot(dsetsMgr, histoName, normalizeByCrossSection=True, saveFormats=[], **{}) elif opts.normalizeToOne: p = plots.MCPlot(dsetsMgr, histoName, normalizeToOne=True, saveFormats=[], **{}) else: raise Exception("One of the options --normalizeToOne, --normalizeByCrossSection, --normalizeToLumi must be enabled (set to \"True\").") Verbose("Setting universal histo styles", True) p.histoMgr.setHistoDrawStyleAll("COLZ") #p.histoMgr.setHistoLegendStyleAll("L") Verbose("Customising histograms", True) p.histoMgr.forEachHisto(lambda h: h.getRootHisto().GetZaxis().SetTitleOffset(1.3)) #fixme Verbose("Setting plot styles to histograms", True) for index, h in enumerate(p.histoMgr.getHistos()): plots._plotStyles[p.histoMgr.getHistos()[index].getDataset().getName()].apply(p.histoMgr.getHistos()[index].getRootHisto()) Verbose("Drawing the plot", True) plots.drawPlot(p, saveName, **kwargs_) #the "**" unpacks the kwargs_ dictionary # Add fit line for shrinking cone? const= 0.0 coeff= 0.0 step = 1 xmin = 0 xmax = 0 if "GenP_VisEt_Vs" in histoName: const= 3.5 coeff= 1.0 step = 100 xmin = 0 xmax = 30 if "GenP_PtLdg_Vs" in histoName: const= 2.5 #2.0 coeff= 1.0 step = 100 xmin = 0 xmax = 30 if "VtxIso_Vs_RelIso" in histoName: const= -0.5 coeff= 0.3 #0.4 step = 100 xmin = 0 xmax = 0#3 if "GenP_VisEt_Vs" in histoName or "GenP_PtLdg_Vs" in histoName: gr = getCustomTGraph(histoName, const, coeff, xmin, xmax, step) gr.SetLineWidth(3) gr.Draw("L same") Verbose("Removing the legend", True) p.removeLegend() Verbose("Adding text on canvas", True) histograms.addText(0.22, 0.89, plots._legendLabels[datasets0], 18) #histograms.addText(0.5, 0.89, plots._legendLabels[datasets0], 18) Verbose("Saving the canvas", True) aux.SavePlot(p, opts.saveDir, saveName, opts.saveFormats, opts.url) return