def addDatasetsFromMulticrab(self, directory, *args, **kwargs): ''' kwargs for 'includeOnlyTasks' or 'excludeTasks' to set the datasets over which this analyzer is processed, default is all datasets ''' Verbose("addDatasetsFromMulticrab()", True) blacklist = [] if "blacklist" in kwargs.keys(): if isinstance(kwargs["blacklist"], str): blacklist.append(kwargs["blacklist"]) elif isinstance(kwargs["blacklist"], list): blacklist.extend(kwargs["blacklist"]) else: raise Exception("Unsupported input format!") del kwargs["blacklist"] # dataset._optionDefaults["input"] = "miniaod2tree*.root" dataset._optionDefaults["input"] = "histograms-*.root" dsetMgrCreator = dataset.readFromMulticrabCfg(directory=directory, *args, **kwargs) dsets = dsetMgrCreator.getDatasetPrecursors() dsetMgrCreator.close() for dset in dsets: isOnBlackList = False for item in blacklist: if dset.getName().startswith(item): isOnBlackList = True if isOnBlackList: print "Ignoring dataset because of blacklist options: '%s' ..."%dset.getName() else: self.addDataset(dset.getName(), dset.getFileNames(), dataVersion=dset.getDataVersion(), lumiFile=dsetMgrCreator.getLumiFile()) return
def createDsetMgr(self, multicrabDir, era, searchMode, optimizationMode=None, systematicVariation=None): self._era = era self._searchMode = searchMode self._optimizationMode = optimizationMode self._systematicVariation = systematicVariation # Construct info string of module self._moduleInfoString = "%s_%s_%s" % (era, searchMode, optimizationMode) # Obtain dataset manager self._dsetMgrCreator = dataset.readFromMulticrabCfg( directory=multicrabDir) self._dsetMgr = self._dsetMgrCreator.createDatasetManager( dataEra=era, searchMode=searchMode, optimizationMode=optimizationMode, systematicVariation=systematicVariation) # Do the usual normalisation self._dsetMgr.updateNAllEventsToPUWeighted() self._dsetMgr.loadLuminosities() plots.mergeRenameReorderForDataMC(self._dsetMgr) self._dsetMgr.merge("EWK", _generalOptions["ewkDatasetsForMerging"]) # Obtain luminosity self._luminosity = self._dsetMgr.getDataset("Data").getLuminosity()
def addDatasetsFromMulticrab(self, directory, *args, **kwargs): blacklist = [] if "blacklist" in kwargs.keys(): if isinstance(kwargs["blacklist"], str): blacklist.append(kwargs["blacklist"]) elif isinstance(kwargs["blacklist"], list): blacklist.extend(kwargs["blacklist"]) else: raise Exception("Unsupported input format!") del kwargs["blacklist"] # dataset._optionDefaults["input"] = "miniaod2tree*.root" dataset._optionDefaults["input"] = "histograms-*.root" dsetMgrCreator = dataset.readFromMulticrabCfg(directory=directory, *args, **kwargs) dsets = dsetMgrCreator.getDatasetPrecursors() dsetMgrCreator.close() for dset in dsets: isOnBlackList = False for item in blacklist: if dset.getName().startswith(item): isOnBlackList = True if isOnBlackList: print "Ignoring dataset because of blacklist options: '%s' ..." % dset.getName( ) else: self.addDataset(dset.getName(), dset.getFileNames(), dataVersion=dset.getDataVersion(), lumiFile=dsetMgrCreator.getLumiFile())
def main(): style = tdrstyle.TDRStyle() # Object for selecting data eras, search modes, and optimization modes myModuleSelector = analysisModuleSelector.AnalysisModuleSelector() parser = OptionParser(usage="Usage: %prog [options]",add_help_option=True,conflict_handler="resolve") myModuleSelector.addParserOptions(parser) parser.add_option("-m", "--mcrab", dest="mcrab", action="store", help="Path to the multicrab directory for input") parser.add_option("-d", "--dataset", dest="dataset", action="store", help="Name of the dataset to be plotted") parser.add_option("-e", "--error", dest="errorlevel", default=0.10, action="store", help="Maximum relative uncertainty per bin (default=10%%)") (opts, args) = parser.parse_args() if opts.mcrab == None: raise Exception("Please provide input multicrab directory with -m") if not os.path.exists(opts.mcrab): raise Exception("The input root file '%s' does not exist!"%opts.mcrab) if opts.dataset == None: raise Exception("Please provide dataset name with -d") # Find module names #myNames = findModuleNames(opts.mcrab, "BTagEfficiency") # Get dataset managers # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) myModuleSelector.setPrimarySource("analysis", dsetMgrCreator) # Select modules myModuleSelector.doSelect(opts) myModuleSelector.printSelectedCombinationCount() #for n in myNames: results = [] #for era in myModuleSelector.getSelectedEras(): #degug for era in ["Run2016"]: msg = "=== FIXME:\n\tRunning only over era \"%s\". The function myModuleSelector.getSelectedEras does not seem to work. Press any key to proceed" % (era) raw_input(msg) for searchMode in myModuleSelector.getSelectedSearchModes(): for optimizationMode in myModuleSelector.getSelectedOptimizationModes(): dsetMgr = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode) #datasets = dataset.getDatasetsFromMulticrabDirs(dirs=[opts.mcrab], analysisName=n) dsetMgr.loadLuminosities() dsetMgr.updateNAllEventsToPUWeighted() plots.mergeRenameReorderForDataMC(dsetMgr) lumi = dsetMgr.getDataset("Data").getLuminosity() for dset in dsetMgr.getMCDatasets(): print dset.name if dset.name.startswith(opts.dataset): results.extend(doPlot("btageff_%s_%s_%s"%(era, searchMode, optimizationMode), dset, opts.errorlevel, optimizationMode, lumi)) #dsetMgr.close() print "\nFigures generated" for item in results: print item # Write results to a json file filename = "btageff_%s.json"%opts.dataset with open(filename, 'w') as outfile: json.dump(results, outfile) print "Written results to %s"%filename
def addDatasetsFromMulticrab(self, directory, *args, **kwargs): ''' kwargs for 'includeOnlyTasks' or 'excludeTasks' to set the datasets over which this analyzer is processed, default is all datasets ''' Verbose("addDatasetsFromMulticrab()", True) blacklist = [] if "blacklist" in kwargs.keys(): if isinstance(kwargs["blacklist"], str): blacklist.append(kwargs["blacklist"]) elif isinstance(kwargs["blacklist"], list): blacklist.extend(kwargs["blacklist"]) else: raise Exception("Unsupported input format!") del kwargs["blacklist"] whitelist = [] if "whitelist" in kwargs.keys(): if isinstance(kwargs["whitelist"], str): whitelist.append(kwargs["whitelist"]) elif isinstance(kwargs["whitelist"], list): whitelist.extend(kwargs["whitelist"]) else: raise Exception("Unsupported input format!") del kwargs["whitelist"] # dataset._optionDefaults["input"] = "miniaod2tree*.root" dataset._optionDefaults["input"] = "histograms-*.root" dsetMgrCreator = dataset.readFromMulticrabCfg(directory=directory, *args, **kwargs) dsets = dsetMgrCreator.getDatasetPrecursors() dsetMgrCreator.close() if len(whitelist) > 0: for dset in dsets: isOnWhiteList = False for item in whitelist: if dset.getName().startswith(item): isOnWhiteList = True if not isOnWhiteList: blacklist.append(dset.getName()) for dset in dsets: isOnBlackList = False for item in blacklist: if dset.getName().startswith(item): isOnBlackList = True if isOnBlackList: print "Ignoring dataset because of black/whitelist options: '%s' ..." % dset.getName( ) else: self.addDataset(dset.getName(), dset.getFileNames(), dataVersion=dset.getDataVersion(), lumiFile=dsetMgrCreator.getLumiFile()) return
def main(): style = tdrstyle.TDRStyle() # Object for selecting data eras, search modes, and optimization modes myModuleSelector = analysisModuleSelector.AnalysisModuleSelector() parser = OptionParser(usage="Usage: %prog [options]",add_help_option=True,conflict_handler="resolve") myModuleSelector.addParserOptions(parser) parser.add_option("-m", "--mcrab", dest="mcrab", action="store", help="Path to the multicrab directory for input") parser.add_option("-d", "--dataset", dest="dataset", action="store", help="Name of the dataset to be plotted") parser.add_option("-e", "--error", dest="errorlevel", default=0.10, action="store", help="Maximum relative uncertainty per bin (default=10%%)") (opts, args) = parser.parse_args() if opts.mcrab == None: raise Exception("Please provide input multicrab directory with -m") if not os.path.exists(opts.mcrab): raise Exception("The input root file '%s' does not exist!"%opts.mcrab) if opts.dataset == None: raise Exception("Please provide dataset name with -d") # Find module names #myNames = findModuleNames(opts.mcrab, "BTagEfficiency") # Get dataset managers # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) myModuleSelector.setPrimarySource("analysis", dsetMgrCreator) # Select modules myModuleSelector.doSelect(opts) myModuleSelector.printSelectedCombinationCount() #for n in myNames: results = [] for era in myModuleSelector.getSelectedEras(): for searchMode in myModuleSelector.getSelectedSearchModes(): for optimizationMode in myModuleSelector.getSelectedOptimizationModes(): dsetMgr = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode) #datasets = dataset.getDatasetsFromMulticrabDirs(dirs=[opts.mcrab], analysisName=n) dsetMgr.loadLuminosities() dsetMgr.updateNAllEventsToPUWeighted() plots.mergeRenameReorderForDataMC(dsetMgr) lumi = dsetMgr.getDataset("Data").getLuminosity() for dset in dsetMgr.getMCDatasets(): print dset.name if dset.name.startswith(opts.dataset): results.extend(doPlot("btageff_%s_%s_%s"%(era, searchMode, optimizationMode), dset, opts.errorlevel, optimizationMode, lumi)) #dsetMgr.close() print "\nFigures generated" for item in results: print item # Write results to a json file filename = "btageff_%s.json"%opts.dataset with open(filename, 'w') as outfile: json.dump(results, outfile) print "Written results to %s"%filename
def getDsetCreator(label, mcrabPath, mcrabInfoOutput, enabledStatus=True): if enabledStatus: if mcrabPath == "": mcrabInfoOutput.append("- %s: not present"%(label)) print "- %s: not present"%(label) else: mcrabInfoOutput.append("- %s: multicrab dir found (%s)"%(label,mcrabPath)) print "- %s%s: multicrab dir found%s (%s)"%(HighlightStyle(),label,NormalStyle(),mcrabPath) return dataset.readFromMulticrabCfg(directory=mcrabPath) else: mcrabInfoOutput.append("- %s: not considered"%(label)) print "- %s: not considered"%(label) return None
def getDsetCreator(label, mcrabPath, mcrabInfoOutput, enabledStatus=True): if enabledStatus: if mcrabPath == "": mcrabInfoOutput.append("- %s: not present"%(label)) print "- %s: not present"%(label) else: mcrabInfoOutput.append("- %s: multicrab dir found (%s)"%(label,mcrabPath)) print "- %s%s: multicrab dir found%s (%s)"%(HighlightStyle(),label,NormalStyle(),mcrabPath) return dataset.readFromMulticrabCfg(directory=mcrabPath) else: mcrabInfoOutput.append("- %s: not considered"%(label)) print "- %s: not considered"%(label) return None
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setGridX(False) style.setGridY(False) style.setOptStat(False) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") else: pass optModes = optList else: optModes = [opts.optMode] # For-loop: All optimisation modes for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if 1: datasetsMgr.printSelections() # Print PSets used for FakeBMeasurement if 0: datasetsMgr.printSelections() PrintPSet("BJetSelection", datasetsMgr) PrintPSet("TopSelectionBDT", datasetsMgr) PrintPSet("FakeBMeasurement", datasetsMgr) sys.exit() sys.exit() return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setGridX(False) style.setGridY(False) style.setOptStat(False) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") else: pass optModes = optList else: optModes = [opts.optMode] # For-loop: All optimisation modes for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if 1: datasetsMgr.printSelections() # Print PSets used for FakeBMeasurement if 0: datasetsMgr.printSelections() PrintPSet("BJetSelection", datasetsMgr) PrintPSet("TopSelectionBDT", datasetsMgr) PrintPSet("FakeBMeasurement", datasetsMgr) sys.exit() sys.exit() return
def getDsetCreator(label, mcrabPath, mcrabInfoOutput, enabledStatus=True): if enabledStatus: if mcrabPath == "": msg = "%s not present!" % (label) #fixme: application to H2tb? mcrabInfoOutput.append(msg) Print(WarningLabel() + msg) else: mcrabInfoOutput.append("- %s: multicrab dir found (%s)" % (label,mcrabPath) ) msg = "%s multicrab dir found in %s" % (label, mcrabPath) Verbose(NoteStyle() + msg + NormalStyle()) # HighlightStyle() return dataset.readFromMulticrabCfg(directory=mcrabPath) else: msg = "%s not considered!" % (label) mcrabInfoOutput.append(msg) Print(NoteStyle() + msg) return None
def createDsetMgr(self, multicrabDir, era, searchMode, optimizationMode=None, systematicVariation=None): self._era = era self._searchMode = searchMode self._optimizationMode = optimizationMode self._systematicVariation = systematicVariation # Construct info string of module self._moduleInfoString = self.getModuleInfoString() # Obtain dataset manager self._dsetMgrCreator = dataset.readFromMulticrabCfg( directory=multicrabDir) self._dsetMgr = self._dsetMgrCreator.createDatasetManager( dataEra=era, searchMode=searchMode, optimizationMode=optimizationMode, systematicVariation=systematicVariation) # Do the usual normalisation self._dsetMgr.updateNAllEventsToPUWeighted() self._dsetMgr.loadLuminosities() plots.mergeRenameReorderForDataMC(self._dsetMgr) # Print initial dataset info if opts.verbose: self._dsetMgr.PrintInfo() self._dsetMgr.merge("EWK", opts.ewkDatasets) # Remove all other datasets datasetList = ["ZJetsToQQ_HT600toInf", "Charged", "QCD"] for d in datasetList: self._dsetMgr.remove( filter(lambda name: d in name, self._dsetMgr.getAllDatasetNames())) # Print final dataset info if opts.verbose: self._dsetMgr.PrintInfo() # Obtain luminosity self._luminosity = self._dsetMgr.getDataset("Data").getLuminosity() return
def getDsetCreator(label, mcrabPath, mcrabInfoOutput, enabledStatus=True): if enabledStatus: if mcrabPath == "": msg = "%s not present!" % (label) #fixme: application to H2tb? mcrabInfoOutput.append(msg) Print(WarningLabel() + msg) else: mcrabInfoOutput.append("- %s: multicrab dir found (%s)" % (label, mcrabPath)) msg = "%s multicrab dir found in %s" % (label, mcrabPath) Verbose(NoteStyle() + msg + NormalStyle()) # HighlightStyle() return dataset.readFromMulticrabCfg(directory=mcrabPath) else: msg = "%s not considered!" % (label) mcrabInfoOutput.append(msg) Print(NoteStyle() + msg) return None
def createDsetMgr(self, multicrabDir, era, searchMode, optimizationMode=None, systematicVariation=None): self._era = era self._searchMode = searchMode self._optimizationMode = optimizationMode self._systematicVariation = systematicVariation # Construct info string of module self._moduleInfoString = "%s_%s_%s"%(era, searchMode, optimizationMode) # Obtain dataset manager self._dsetMgrCreator = dataset.readFromMulticrabCfg(directory=multicrabDir) self._dsetMgr = self._dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode,systematicVariation=systematicVariation) # Do the usual normalisation self._dsetMgr.updateNAllEventsToPUWeighted() self._dsetMgr.loadLuminosities() plots.mergeRenameReorderForDataMC(self._dsetMgr) self._dsetMgr.merge("EWK", _generalOptions["ewkDatasetsForMerging"]) # Obtain luminosity self._luminosity = self._dsetMgr.getDataset("Data").getLuminosity()
def main(opts): # Object for selecting data eras, search modes, and optimization modes myModuleSelector = analysisModuleSelector.AnalysisModuleSelector() # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Obtain systematics names mySystematicsNamesRaw = dsetMgrCreator.getSystematicVariationSources() mySystematicsNames = getSystematicsNames(mySystematicsNamesRaw, opts) # Set the primary source Verbose( "Setting the primary source (label=%s)" % (ShellStyles.NoteStyle() + opts.analysisName + ShellStyles.NormalStyle()), True) myModuleSelector.setPrimarySource(label=opts.analysisName, dsetMgrCreator=dsetMgrCreator) # Select modules myModuleSelector.doSelect(opts=None) # Loop over era/searchMode/optimizationMode combos myTotalModules = myModuleSelector.getSelectedCombinationCount() * ( len(mySystematicsNames) + 1) count, nEras, nSearchModes, nOptModes, nSysVars = myModuleSelector.getSelectedCombinationCountIndividually( ) if nSysVars > 0: msg = "Running over %d modules (%d eras x %d searchModes x %d optimizationModes x %d systematic variations)" % ( count, nEras, nSearchModes, nOptModes, nSysVars) else: msg = "Running over %d modules (%d eras x %d searchModes x %d optimizationModes)" % ( count, nEras, nSearchModes, nOptModes) Verbose(msg, True) # Create pseudo-multicrab creator msg = "Creating pseudo-dataset \"%s\" inside the pseudo-multicrab directory \"%s\"" % ( opts.newDsetName, opts.mcrab) Verbose(msg, True) myOutputCreator = pseudoMultiCrabCreator.PseudoMultiCrabCreator( opts.newDsetName, opts.mcrab, verbose=opts.verbose) # Make time stamp for start time myGlobalStartTime = time.time() # Initialize myOutputCreator.initialize(subTitle="", prefix="") # Get lists of settings erasList = myModuleSelector.getSelectedEras() modesList = myModuleSelector.getSelectedSearchModes() optList = myModuleSelector.getSelectedOptimizationModes() if 0: optList.append( "") #append the default opt mode iff more optimization modes exist Verbose( "Found %d eras, %d modes, %d optimisations" % (len(erasList), len(modesList), len(optList)), True) iModule = 0 # For-loop: All eras for era in erasList: # For-loop: All searchModes for searchMode in modesList: # For-loop: AlloptimizationModes for optimizationMode in optList: Verbose( "era = %s, searchMode = %s, optMode = %s" % (era, searchMode, optimizationMode), True) # If an optimization mode is defined in options skip the rest if opts.optMode != None: if optimizationMode != opts.optMode: continue # Nominal module myModuleInfoString = getModuleInfoString( opts.analysisName, era, searchMode, optimizationMode) iModule += 1 # Inform user of what is being processes msg = "{:<10} {:>3} {:^1} {:<3}: {:<20}".format( "Module", iModule, "/", myTotalModules, myModuleInfoString) Print(hs + msg + ns, iModule == 1) Verbose("Creating dataset manager for nominal module", True) myStartTime = time.time() nominalModule = ModuleBuilder(opts, myOutputCreator, opts.verbose) nominalModule.createDsetMgr(opts.mcrab, opts.analysisName, era, searchMode, optimizationMode) # Build the module nominalModule.buildModule(opts.dsetSrc) Verbose("Deleting nominal module", True) nominalModule.delete() Verbose("Printing time estimate", True) printTimeEstimate(myGlobalStartTime, myStartTime, iModule, myTotalModules) Verbose("Now do the rest of systematics variations", True) for syst in mySystematicsNames: myModuleInfoString = getModuleInfoString( opts.analysisName, era, searchMode, optimizationMode, syst) iModule += 1 msg = "{:<10} {:>3} {:^1} {:<3}: {:<20}".format( "Module", iModule, "/", myTotalModules, myModuleInfoString) Print(hs + msg + ns, False) Verbose( "Creating dataset manager for systematics module %s" % (syst), True) myStartTime = time.time() systModule = ModuleBuilder(opts, myOutputCreator, opts.verbose) systModule.createDsetMgr(opts.mcrab, opts.analysisName, era, searchMode, optimizationMode, systematicVariation=syst) # Build the module systModule.buildModule(opts.dsetSrc) Verbose("Deleting nominal module", True) systModule.delete() Verbose("Printing time estimate", True) printTimeEstimate(myGlobalStartTime, myStartTime, iModule, myTotalModules) Verbose( "New dataset %s added to pseud-multicrab %s" % (hs + opts.newDsetName + ns, hs + opts.mcrab + ns), True) # Print some timing statistics Verbose( "Average processing time per module was %.1f seconds" % getAvgProcessTimeForOneModule(myGlobalStartTime, myTotalModules), True) Verbose( "Total elapsed time was %.1f seconds" % getTotalElapsedTime(myGlobalStartTime), True) # Create rest of pseudo multicrab directory myOutputCreator.finalize(silent=False) # Update the multicrab.cfg file updateMulticrabCfg() return
def createDsetMgr(self, multicrabDir, analysis, era, searchMode, optimizationMode=None, systematicVariation=None): # Store variables self._analysis = analysis self._era = era self._searchMode = searchMode self._optimizationMode = optimizationMode self._systematicVariation = systematicVariation # Construct info string of module self._moduleInfoString = self.getModuleInfoString() # Obtain dataset manager self._dsetMgrCreator = dataset.readFromMulticrabCfg( directory=multicrabDir) self._dsetMgr = self._dsetMgrCreator.createDatasetManager( dataEra=era, searchMode=searchMode, optimizationMode=optimizationMode, systematicVariation=systematicVariation) # Do the usual normalisation self._dsetMgr.updateNAllEventsToPUWeighted() self._dsetMgr.loadLuminosities() # Merge, Rename, Reorder datasets plots.mergeRenameReorderForDataMC(self._dsetMgr) # Print initial dataset info if opts.verbose: self._dsetMgr.PrintInfo() self.Verbose( "Merging datasets to get new dataset: [%s] -> %s" % (ts + ", ".join(opts.dsetsToMerge) + ns, ss + opts.newDsetName + ns), True) self._dsetMgr.merge(opts.newDsetName, opts.dsetsToMerge, keepSources=True) # Remove all other datasets datasetList = opts.dsetsToRemove self.Verbose( "Removing datasets: [%s]" % (es + ", ".join(opts.dsetsToRemove) + ns), True) for i, d in enumerate(datasetList, 1): self._dsetMgr.remove( filter(lambda name: d in name, self._dsetMgr.getAllDatasetNames())) # Print final dataset info if opts.verbose: self._dsetMgr.PrintInfo() # Obtain luminosity self._luminosity = self._dsetMgr.getDataset("Data").getLuminosity() return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setOptStat(False) style.setGridX(True) #opts.gridX) style.setGridY(True) #opts.gridY) style.setLogX(False) #opts.logX) style.setLogY(False) #opts.logY) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") else: pass optModes = optList else: optModes = [opts.optMode] # For-loop: All optimisation modes for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if 0: datasetsMgr.printSelections() # Set/Overwrite cross-sections for d in datasetsMgr.getAllDatasets(): if "ChargedHiggs" in d.getName(): datasetsMgr.getDataset(d.getName()).setCrossSection(1.0) if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Custom Filtering of datasets if 0: datasetsMgr.remove(filter(lambda name: "Charged" in name and not "M_500" in name, datasetsMgr.getAllDatasetNames())) # ZJets and DYJets overlap! if "ZJetsToQQ_HT600toInf" in datasetsMgr.getAllDatasetNames() and "DYJetsToQQ_HT180" in datasetsMgr.getAllDatasetNames(): Print("Cannot use both ZJetsToQQ and DYJetsToQQ due to duplicate events? Investigate. Removing ZJetsToQQ datasets for now ..", True) datasetsMgr.remove(filter(lambda name: "ZJetsToQQ" in name, datasetsMgr.getAllDatasetNames())) # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) datasetsMgr.PrintInfo() # Get Luminosity if opts.intLumi < 0.0: if "Data" in datasetsMgr.getAllDatasetNames(): opts.intLumi = datasetsMgr.getDataset("Data").getLuminosity() else: opts.intLumi = 1.0 # Merge EWK samples if opts.dataset == "EWK": datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) plots._plotStyles["EWK"] = styles.getAltEWKStyle() # Print dataset information datasetsMgr.PrintInfo() # Get all histogram names in the given ROOT folder histoNames = datasetsMgr.getAllDatasets()[0].getDirectoryContent(opts.folder) # histoList = [os.path.join(opts.folder, h) for h in histoNames if "_" + opts.region in h and opts.refBdisc in h] histoList = [os.path.join(opts.folder, h) for h in histoNames if opts.refBdisc in h] # For-loop: All histos in CR of interest nHistos = len(histoList) for i, h in enumerate(histoList, 1): msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format("Histogram", "%i" % i,"/", "%s:" % (nHistos), h) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), i==1) PlotHistograms(datasetsMgr, h) # Inform user where the plots where saved Print("All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setOptStat(False) style.setGridX(True) #opts.gridX) style.setGridY(True) #opts.gridY) style.setLogX(False) #opts.logX) style.setLogY(False) #opts.logY) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") else: pass optModes = optList else: optModes = [opts.optMode] # For-loop: All optimisation modes for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if 0: datasetsMgr.printSelections() # Set/Overwrite cross-sections for d in datasetsMgr.getAllDatasets(): if "ChargedHiggs" in d.getName(): datasetsMgr.getDataset(d.getName()).setCrossSection(1.0) if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Custom Filtering of datasets if 0: datasetsMgr.remove(filter(lambda name: "Charged" in name and not "M_500" in name, datasetsMgr.getAllDatasetNames())) # ZJets and DYJets overlap! if "ZJetsToQQ_HT600toInf" in datasetsMgr.getAllDatasetNames() and "DYJetsToQQ_HT180" in datasetsMgr.getAllDatasetNames(): Print("Cannot use both ZJetsToQQ and DYJetsToQQ due to duplicate events? Investigate. Removing ZJetsToQQ datasets for now ..", True) datasetsMgr.remove(filter(lambda name: "ZJetsToQQ" in name, datasetsMgr.getAllDatasetNames())) # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) datasetsMgr.PrintInfo() # Get Luminosity if opts.intLumi < 0.0: if "Data" in datasetsMgr.getAllDatasetNames(): opts.intLumi = datasetsMgr.getDataset("Data").getLuminosity() else: opts.intLumi = 1.0 # Merge EWK samples if opts.dataset == "EWK": datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) plots._plotStyles["EWK"] = styles.getAltEWKStyle() # Print dataset information datasetsMgr.PrintInfo() # Get all histogram names in the given ROOT folder histoNames = datasetsMgr.getAllDatasets()[0].getDirectoryContent(opts.folder) histoList_ = [os.path.join(opts.folder, h) for h in histoNames if "_SR" in h] histoList = [h for h in histoList_ if "Pt" in h] + [h for h in histoList_ if "Eta" in h] # For-loop: All histos in SR nHistos = len(histoList) for i, h in enumerate(histoList, 1): msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format("Histogram", "%i" % i,"/", "%s:" % (nHistos), h) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), i==1) # print "*** h = ", h PlotHistograms(datasetsMgr, h) #break # Inform user where the plots where saved Print("All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
dest="multicrabDir", action="store", help="Multicrab directory") # Add here parser options, if necessary, following line is an example #parser.add_option("--showcard", dest="showDatacard", action="store_true", default=False, help="Print datacards also to screen") # Parse options (opts, args) = parser.parse_args() # Obtain multicrab directory myMulticrabDir = "../FakeTauComparison_140603_182139/" if opts.multicrabDir != None: myMulticrabDir = opts.multicrabDir # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir) myModuleSelector.setPrimarySource("analysis", dsetMgrCreator) # Select modules myModuleSelector.doSelect(opts) # Apply TDR style style = tdrstyle.TDRStyle() histograms.createLegend.moveDefaults(dx=-0.1, dh=-0.15) myDisplayStatus = True # Loop over era/searchMode/optimizationMode options for era in myModuleSelector.getSelectedEras(): for searchMode in myModuleSelector.getSelectedSearchModes(): for optimizationMode in myModuleSelector.getSelectedOptimizationModes( ): # Construct info string of module
def main(opts): # Object for selecting data eras, search modes, and optimization modes myModuleSelector = analysisModuleSelector.AnalysisModuleSelector() # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Obtain systematics names mySystematicsNamesRaw = dsetMgrCreator.getSystematicVariationSources() mySystematicsNames = [] for i, item in enumerate(mySystematicsNamesRaw, 0): Print( "Using systematic %s" % (ShellStyles.NoteStyle() + item + ShellStyles.NormalStyle()), i == 0) mySystematicsNames.append("%sPlus" % item) mySystematicsNames.append("%sMinus" % item) if opts.test: mySystematicsNames = [] # Set the primary source Verbose( "Setting the primary source (label=%s)" % (ShellStyles.NoteStyle() + opts.analysisName + ShellStyles.NormalStyle()), True) myModuleSelector.setPrimarySource( label=opts.analysisName, dsetMgrCreator=dsetMgrCreator) #fixme: what is label for? # Select modules myModuleSelector.doSelect(opts=None) #fixme: (opts=opts) # Loop over era/searchMode/optimizationMode combos myTotalModules = myModuleSelector.getSelectedCombinationCount() * ( len(mySystematicsNames) + 1) * len(opts.shape) Verbose("Found %s modules in total" % (myTotalModules), True) count, nEras, nSearchModes, nOptModes, nSysVars = myModuleSelector.getSelectedCombinationCountIndividually( ) if nSysVars > 0: msg = "Running over %d modules (%d eras x %d searchModes x %d optimizationModes x %d systematic variations)" % ( count, nEras, nSearchModes, nOptModes, nSysVars) else: msg = "Running over %d modules (%d eras x %d searchModes x %d optimizationModes)" % ( count, nEras, nSearchModes, nOptModes) Verbose(msg, True) # Create pseudo-multicrab creator msg = "Will create pseudo-dataset %s inside the pseudo-multicrab directory" % ( ShellStyles.NoteStyle() + opts.analysisName + ShellStyles.NormalStyle()) Verbose(msg, True) myOutputCreator = pseudoMultiCrabCreator.PseudoMultiCrabCreator( opts.analysisName, opts.mcrab, verbose=opts.verbose) # Make time stamp for start time myGlobalStartTime = time.time() iModule = 0 # For-loop: All Shapes for iShape, shapeType in enumerate(opts.shape, 1): msg = "Shape %d/%d:%s %s" % (iShape, len( opts.shape), ShellStyles.NormalStyle(), shapeType) Print(ShellStyles.CaptionStyle() + msg, True) # Initialize myOutputCreator.initialize( subTitle=shapeType, prefix="") #fixeme: remove shapeType from sub-directory name? # Get lists of settings erasList = myModuleSelector.getSelectedEras() modesList = myModuleSelector.getSelectedSearchModes() optList = myModuleSelector.getSelectedOptimizationModes() if 0: optList.append( "" ) #append the default opt mode iff more optimization modes exist # For-Loop over era, searchMode, and optimizationMode options for era in erasList: for searchMode in modesList: for optimizationMode in optList: Verbose( "era = %s, searchMode = %s, optMode = %s" % (era, searchMode, optimizationMode), True) # If an optimization mode is defined in options skip the rest if opts.optMode != None: if optimizationMode != opts.optMode: continue # Obtain normalization factors myNormFactors = importNormFactors(era, searchMode, optimizationMode, opts.mcrab) # Nominal module myModuleInfoString = getModuleInfoString( era, searchMode, optimizationMode) iModule += 1 # Inform user of what is being processes msg = "Module %d/%d:%s %s/%s" % ( iModule, myTotalModules, ShellStyles.NormalStyle(), myModuleInfoString, shapeType) Print(ShellStyles.CaptionStyle() + msg, True) # Keep time myStartTime = time.time() Verbose("Create dataset manager with given settings", True) nominalModule = ModuleBuilder(opts, myOutputCreator, opts.verbose) nominalModule.createDsetMgr(opts.mcrab, era, searchMode, optimizationMode) if (iModule == 1): if opts.verbose: nominalModule.debug() doQCDNormalizationSyst = False #FIXME if not doQCDNormalizationSyst: msg = "Disabling systematics" Verbose(ShellStyles.WarningLabel() + msg, True) #fixme # Build the module nominalModule.buildModule( opts.dataSrc, opts.ewkSrc, myNormFactors[opts.normFactorKey], doQCDNormalizationSyst, opts.normDataSrc, opts.normEwkSrc) if len(mySystematicsNames) > 0: Print( "Adding QCD normalization systematics (iff also other systematics present) ", True) nominalModule.buildQCDNormalizationSystModule( opts.dataSrc, opts.ewkSrc) # FIXME: add quark gluon weighting systematics! if 0: Print("Adding Quark/Gluon weighting systematics", True) nominalModule.buildQCDQuarkGluonWeightingSystModule( opts.dataSrc, opts.ewkSrc, myNormFactors["FakeWeightingUp"], myNormFactors["FakeWeightingDown"], False, opts.normDataSrc, opts.normEwkSrc) Verbose("Deleting nominal module", True) nominalModule.delete() Verbose("Printing time estimate", True) printTimeEstimate(myGlobalStartTime, myStartTime, iModule, myTotalModules) Verbose("Now do the rest of systematics variations", True) for syst in mySystematicsNames: iModule += 1 msg = "Analyzing systematics variations %d/%d: %s/%s/%s" % ( iModule, myTotalModules, myModuleInfoString, syst, shapeType) Print( ShellStyles.CaptionStyle() + msg + ShellStyles.NormalStyle(), True) myStartTime = time.time() systModule = ModuleBuilder(opts, myOutputCreator) # Create dataset manager with given settings systModule.createDsetMgr(opts.mcrab, era, searchMode, optimizationMode, systematicVariation=syst) # Build asystematics module systModule.buildModule( opts.dataSrc, opts.ewkSrc, myNormFactors[opts.normFactorKey], False, opts.normDataSrc, opts.normEwkSrc) printTimeEstimate(myGlobalStartTime, myStartTime, iModule, myTotalModules) systModule.delete() Verbose("Pseudo-multicrab ready for %s" % shapeType, True) # Print some timing statistics Print( "Average processing time per module was %.1f seconds" % getAvgProcessTimeForOneModule(myGlobalStartTime, myTotalModules), True) Print( "Total elapsed time was %.1f seconds" % getTotalElapsedTime(myGlobalStartTime), False) # Create rest of pseudo multicrab directory myOutputCreator.finalize(silent=False) return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setGridX(opts.gridX) style.setGridY(opts.gridY) style.setOptStat(False) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: optModes = optList else: optModes = [opts.optMode] # For-loop: All optimisation modes for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if 0: datasetsMgr.printSelections() # PrintPSet("BJetSelection", datasetsMgr) # PrintPSet("TopSelectionBDT", datasetsMgr) # PrintPSet("FakeBMeasurement", datasetsMgr) sys.exit() # Print dataset info? if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Set signal cross-section if 0: datasetsMgr.getDataset(opts.signal).setCrossSection(1.0) # Remove unwanted datasets if 0: datasetsMgr.remove(filter(lambda name: "QCD-b" in name, datasetsMgr.getAllDatasetNames())) # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Get Luminosity opts.intLumi = datasetsMgr.getDataset("Data").getLuminosity() # Merge EWK samples datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) plots._plotStyles["EWK"] = styles.getAltEWKStyle() # Print dataset information datasetsMgr.PrintInfo() # Get all the histograms and their paths (e.g. ForFakeBMeasurement/Baseline_DeltaRLdgTrijetBJetTetrajetBJet_AfterCRSelections) hList = datasetsMgr.getDataset(datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent(opts.folder) hPaths = [os.path.join(opts.folder, h) for h in hList] # Create two lists of paths: one for "Baseline" (SR) and one for "Inverted" (CR) path_SR = [] # baseline, _AfterAllSelections path_CR1 = [] # baseline, _AfterCRSelections path_VR = [] # inverted, _AfterAllSelections path_CR2 = [] # inverted, _AfterCRSelections # For-loop: All histogram paths for p in hPaths: if "AfterStandardSelections" in p: continue if "Baseline" in p: if "AllSelections" in p: path_SR.append(p) if "CRSelections" in p: path_CR1.append(p) if "Inverted" in p: if "AllSelections" in p: path_VR.append(p) if "CRSelections" in p: path_CR2.append(p) # For-loop: All histogram pairs for hVR, hCR2, hCR1 in zip(path_VR, path_CR2, path_CR1): break if "IsGenuineB" in hVR: continue PlotComparison(datasetsMgr, hVR, hCR2, "VRvCR2") # For-loop: All histogram pairs counter = 1 for hCR1, hCR2 in zip(path_CR1, path_CR2): if "IsGenuineB" in hCR1: continue hName = hCR1.replace("_AfterCRSelections", "_CR1vCR2").replace("ForFakeBMeasurement/Baseline_", "") msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format("Histogram", "%i" % counter, "/", "%s:" % (len(path_CR1)), hName) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), counter==1) PlotComparison(datasetsMgr, hCR1, hCR2, "CR1vCR2") counter+=1 # For-loop: All histogram pairs for hSR, hVR in zip(path_SR, path_VR): break # Print("UNBLINDING SR! Are you nuts ? BREAK!", False) if "IsGenuineB" in hSR: continue PlotComparison(datasetsMgr, hSR, hVR, "SRvVR") Print("All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setGridX(opts.gridX) style.setGridY(opts.gridY) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") else: pass optModes = optList else: optModes = [opts.optMode] # For-loop: All optimisation modes for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json # Print PSets used for FakeBMeasurement if 0: datasetsMgr.printSelections() # Set/Overwrite cross-sections for d in datasetsMgr.getAllDatasets(): if "ZJetsToQQ_HT600toInf" in d.getName(): datasetsMgr.remove(d.getName()) if "ChargedHiggs" in d.getName(): datasetsMgr.getDataset(d.getName()).setCrossSection(1.0) if d.getName() not in opts.signal: if not opts.acceptance: datasetsMgr.remove(d.getName()) if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() datasetsMgr.PrintInfo() # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Get Luminosity # For acceptance plot use all available masses if opts.acceptance: opts.signal = [] opts.signalMasses = [] for d in datasetsMgr.getAllDatasets(): if "ChargedHiggs" in d.getName(): #dName = d.getName().replace("_ext1", "").split("M_") dName = d.getName().split("M_") m = int(dName[-1]) opts.signal.append(d.getName()) opts.signalMasses.append(m) if opts.intLumi < 0: if "Data" in datasetsMgr.getAllDatasetNames(): opts.intLumi = datasetsMgr.getDataset("Data").getLuminosity() else: opts.intLumi = 1.0 # Merge EWK samples if 1: datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) plots._plotStyles["EWK"] = styles.getAltEWKStyle() # Print post EWK-merge dataset summary datasetsMgr.PrintInfo() # Get the efficiency graphs hGraphList = [] histoName = os.path.join(opts.folder, "counter") hGraphList, _kwargs = GetHistoGraphs(datasetsMgr, opts.folder, histoName) # Plot the histo graphs PlotHistoGraphs(hGraphList, _kwargs) Print( "All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setGridX(False) style.setGridY(False) style.setOptStat(False) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") optModes = optList else: optModes = [opts.optMode] # For-loop: All opt Mode for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Get the PSets: if 0: datasetsMgr.printSelections() #PrintPSet("BJetSelection", datasetsMgr, depth=150) #PrintPSet("fakeBMeasurement", datasetsMgr, depth=150) sys.exit() # ZJets and DYJets overlap! if "ZJetsToQQ_HT600toInf" in datasetsMgr.getAllDatasetNames() and "DYJetsToQQ_HT180" in datasetsMgr.getAllDatasetNames(): Print("Cannot use both ZJetsToQQ and DYJetsToQQ due to duplicate events? Investigate. Removing ZJetsToQQ datasets for now ..", True) datasetsMgr.remove(filter(lambda name: "ZJetsToQQ" in name, datasetsMgr.getAllDatasetNames())) # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Get luminosity if a value is not specified if opts.intLumi < 0: opts.intLumi = datasetsMgr.getDataset("Data").getLuminosity() # Remove datasets removeList = ["QCD-b", "Charged"] if not opts.useMC: removeList.append("QCD") for i, d in enumerate(removeList, 0): msg = "Removing dataset %s" % d Verbose(ShellStyles.WarningLabel() + msg + ShellStyles.NormalStyle(), i==0) datasetsMgr.remove(filter(lambda name: d in name, datasetsMgr.getAllDatasetNames())) # Print summary of datasets to be used if 0: datasetsMgr.PrintInfo() # Merge EWK samples datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) # Print dataset information datasetsMgr.PrintInfo() # List of TDirectoryFile (_CRone, _CRtwo, _VR, _SR) tdirs = ["LdgTetrajetMass_", "LdgTetrajetPt_", "LdgTrijetPt_", "LdgTrijetMass_", "TetrajetBJetPt_", "TetrajetBJetEta_"] region = ["CRone", "CRtwo", "SR", "VR"] hList = [] for d in tdirs: for r in region: hList.append(d + r) # Get the folders with the binned histograms folderList_ = datasetsMgr.getDataset(datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent(opts.folder) folderList = [h for h in folderList_ if h in hList] # For-loop: All folders histoPaths = [] for f in folderList: folderPath = os.path.join(opts.folder, f) histoList = datasetsMgr.getDataset(datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent(folderPath) pathList = [os.path.join(folderPath, h) for h in histoList] histoPaths.extend( pathList ) # Get all the bin labels binLabels = GetBinLabels("CRone", histoPaths) for i, t in enumerate(tdirs, 1): myList = [] for p in histoPaths: if t in p: myList.append(p) msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format("Histogram", "%i" % i, "/", "%s:" % (len(tdirs)), t.replace("_", "")) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), i==1) PlotHistograms(datasetsMgr, myList, binLabels, opts) # Save the plots Print("All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setOptStat(True) style.setGridX(True) style.setGridY(True) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") optModes = optList else: optModes = [opts.optMode] # For-loop: All opt Mode for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Get the PSets: if 0: datasetsMgr.printSelections() #PrintPSet("BJetSelection", datasetsMgr, depth=150) # ZJets and DYJets overlap! if "ZJetsToQQ_HT600toInf" in datasetsMgr.getAllDatasetNames( ) and "DYJetsToQQ_HT180" in datasetsMgr.getAllDatasetNames(): Print( "Cannot use both ZJetsToQQ and DYJetsToQQ due to duplicate events? Investigate. Removing ZJetsToQQ datasets for now ..", True) datasetsMgr.remove( filter(lambda name: "ZJetsToQQ" in name, datasetsMgr.getAllDatasetNames())) # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Get luminosity if a value is not specified if opts.intLumi < 0: opts.intLumi = datasetsMgr.getDataset("Data").getLuminosity() # Remove datasets removeList = ["QCD-b"] #, "Charged"] if not opts.useMC: removeList.append("QCD") for i, d in enumerate(removeList, 0): msg = "Removing dataset %s" % d Verbose( ShellStyles.WarningLabel() + msg + ShellStyles.NormalStyle(), i == 0) datasetsMgr.remove( filter(lambda name: d in name, datasetsMgr.getAllDatasetNames())) # Print summary of datasets to be used if 0: datasetsMgr.PrintInfo() # Merge EWK samples datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) # Print dataset information datasetsMgr.PrintInfo() # Do the fit on the histo after ALL selections (incl. topology cuts) folderList = datasetsMgr.getDataset( datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent( opts.folder) #folderList1 = [h for h in folderList if "TetrajetPt" in h] #folderList1 = [h for h in folderList if "TetrajetMass" in h] #folderList1 = [h for h in folderList if "MET" in h] #folderList1 = [h for h in folderList if "TetrajetBJetPt" in h] folderList1 = [h for h in folderList if "QGLR" in h] folderList2 = [ h for h in folderList1 if "CRtwo" in h or "VR" in h or "SR" in h or "CRone" in h ] # For-loop: All folders histoPaths = [] for f in folderList2: folderPath = os.path.join(opts.folder, f) histoList = datasetsMgr.getDataset( datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent( folderPath) pathList = [os.path.join(folderPath, h) for h in histoList] histoPaths.extend(pathList) binLabels = GetBinLabels("CRone", histoPaths) PlotHistosAndCalculateTF(datasetsMgr, histoPaths, binLabels, opts) return
def main(count, runRange, dsetList, opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setOptStat(True) style.setGridX(True) style.setGridY(True) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") optModes = optList else: optModes = [opts.optMode] # For-loop: All opt Mode for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Remove datasets removeList = ["QCD-b", "Charged", "QCD", "ZJetsToQQ_HT600toInf"] opts.intLumi = 0.0 # For-loop: All datasets in the manager for d in datasetsMgr.getAllDatasets(): if d.isMC(): continue # Inclusive data if len(dsetList) == 1 and dsetList[0] == "Run2016": Verbose("Inclusive data. Will not remove anything", True) opts.intLumi += GetLumi(datasetsMgr) break # Special combinations for rr in dsetList: if rr not in d.getName(): Verbose( "\"%s\" is not in dataset name \"%s\"" % (rr, d.getName()), False) if d.getName() not in removeList: # Ensure dataset to be removed is not in the dsetList if not any(rr in d.getName() for rr in dsetList): removeList.append(d.getName()) else: Verbose( "\"%s\" is in dataset name \"%s\"" % (rr, d.getName()), False) # Get luminosity if a value is not specified opts.intLumi += d.getLuminosity() # For-loop: All dataset names to be removed for i, d in enumerate(removeList, 0): Verbose( ShellStyles.HighlightAltStyle() + "Removing dataset %s" % d + ShellStyles.NormalStyle(), False) datasetsMgr.remove( filter(lambda name: d in name, datasetsMgr.getAllDatasetNames())) # Inform user of dataset and corresponding integrated lumi Print("%d) %s (%.1f 1/pb)" % (count, runRange, opts.intLumi), count == 1) #Print("%d) %s (%.1f 1/pb)" % (count, ", ".join(dsetList), opts.intLumi), count==1) # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Print dataset information if 0: datasetsMgr.PrintInfo() # Merge EWK samples datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) # Do the fit on the histo after ALL selections (incl. topology cuts) folderList = datasetsMgr.getDataset( datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent( opts.folder) folderList1 = [h for h in folderList if opts.histoKey in h] folderList2 = [ h for h in folderList1 if "VR" in h or "SR" in h or "CRone" in h or "CRtwo" in h or "CRthree" in h or "CRfour" in h ] # For-loop: All folders histoPaths = [] for f in folderList2: folderPath = os.path.join(opts.folder, f) histoList = datasetsMgr.getDataset( datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent( folderPath) pathList = [os.path.join(folderPath, h) for h in histoList] histoPaths.extend(pathList) binLabels = GetBinLabels("CRone", histoPaths) PlotHistosAndCalculateTF(runRange, datasetsMgr, histoPaths, binLabels, opts) return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setGridX(False) style.setGridY(False) style.setOptStat(False) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") else: pass optModes = optList else: optModes = [opts.optMode] # For-loop: All optimisation modes for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if 0: datasetsMgr.printSelections() # Print PSets used for FakeBMeasurement if 0: datasetsMgr.printSelections() PrintPSet("BJetSelection", datasetsMgr) PrintPSet("TopSelectionBDT", datasetsMgr) PrintPSet("FakeBMeasurement", datasetsMgr) sys.exit() # Set/Overwrite cross-sections for d in datasetsMgr.getAllDatasets(): if "ChargedHiggs" in d.getName(): datasetsMgr.getDataset(d.getName()).setCrossSection(1.0) if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() datasetsMgr.PrintInfo() # Filter the datasets datasetsMgr.remove(filter(lambda name: "Charged" in name, datasetsMgr.getAllDatasetNames())) # datasetsMgr.remove(filter(lambda name: "Charged" in name and not "M_500" in name, datasetsMgr.getAllDatasetNames())) # ZJets and DYJets overlap! if "ZJetsToQQ_HT600toInf" in datasetsMgr.getAllDatasetNames() and "DYJetsToQQ_HT180" in datasetsMgr.getAllDatasetNames(): Print("Cannot use both ZJetsToQQ and DYJetsToQQ due to duplicate events? Investigate. Removing ZJetsToQQ datasets for now ..", True) datasetsMgr.remove(filter(lambda name: "ZJetsToQQ" in name, datasetsMgr.getAllDatasetNames())) # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Get Luminosity if opts.intLumi < 0: if "Data" in datasetsMgr.getAllDatasetNames(): opts.intLumi = datasetsMgr.getDataset("Data").getLuminosity() else: opts.intLumi = 1.0 # Re-order datasets (different for inverted than default=baseline) if 0: newOrder = ["Data"] newOrder.extend(aux.GetListOfEwkDatasets()) datasetsMgr.selectAndReorder(newOrder) # Print post-merged data dataset summary if 0: datasetsMgr.PrintInfo() # Merge EWK samples datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) plots._plotStyles["EWK"] = styles.getAltEWKStyle() # Print post EWK-merge dataset summary if 1: datasetsMgr.PrintInfo() # Get all histograms from the in the selected folder inside the ROOT files allHistos = datasetsMgr.getAllDatasets()[0].getDirectoryContent(opts.folder) hList = [h for h in allHistos if "CRSelections" in h and "_Vs" not in h] hList.extend([h for h in allHistos if "AllSelections" in h and "_Vs" not in h]) # hList.extend([h for h in allHistos if "StandardSelections" in h and "_Vs" not in h]) # Create a list with strings included in the histogram names you want to plot myHistos = ["LdgTrijetPt", "LdgTrijetMass", "TetrajetBJetPt", "TetrajetBJetEta", "LdgTetrajetPt", "LdgTetrajetMass", "MVAmax2", "MVAmax1", "HT", "MET"] # For-loop: All histos for i, h in enumerate(myHistos, 1): hGraphList = [] for b in ["Baseline_", "Inverted_"]: for r in [ "_AfterCRSelections", "_AfterAllSelections"]: histoName = b + h + r hgQCD, kwargs = GetPurityHistoGraph(datasetsMgr, opts.folder, histoName) # Do not draw SR in multigraph plot! if GetControlRegionLabel(histoName) != "SR": hGraphList.append(hgQCD) # Plot individual purity graphs? if 0: PlotHistoGraph(hgQCD, kwargs) msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format("Histogram", "%i" % i, "/", "%s:" % (len(myHistos)), h) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), i==1) PlotHistoGraphs(hGraphList, kwargs) Print("All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setGridX(False) style.setGridY(False) style.setOptStat(False) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: optModes = optList else: optModes = [opts.optMode] # For-loop: All optimisation modes for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if 0: datasetsMgr.printSelections() # PrintPSet("BJetSelection", datasetsMgr) # PrintPSet("TopSelectionBDT", datasetsMgr) # PrintPSet("FakeBMeasurement", datasetsMgr) sys.exit() # Print dataset info? if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Set signal cross-section if 0: datasetsMgr.getDataset(opts.signal).setCrossSection(1.0) # Remove unwanted datasets if 0: datasetsMgr.remove( filter(lambda name: "QCD-b" in name, datasetsMgr.getAllDatasetNames())) # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Get Luminosity opts.intLumi = datasetsMgr.getDataset("Data").getLuminosity() # Merge EWK samples datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) plots._plotStyles["EWK"] = styles.getAltEWKStyle() # Print dataset information datasetsMgr.PrintInfo() # Get all the histograms and their paths (e.g. ForFakeBMeasurement/Baseline_DeltaRLdgTrijetBJetTetrajetBJet_AfterCRSelections) hList = datasetsMgr.getDataset( datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent( opts.folder) hPaths = [os.path.join(opts.folder, h) for h in hList] # Create two lists of paths: one for "Baseline" (SR) and one for "Inverted" (CR) path_SR = [] # baseline, _AfterAllSelections path_CR1 = [] # baseline, _AfterCRSelections path_VR = [] # inverted, _AfterAllSelections path_CR2 = [] # inverted, _AfterCRSelections # For-loop: All histogram paths for p in hPaths: if "AfterStandardSelections" in p: #print p continue if "Baseline" in p: if "AllSelections" in p: path_SR.append(p) if "CRSelections" in p: path_CR1.append(p) if "Inverted" in p: if "AllSelections" in p: path_VR.append(p) if "CRSelections" in p: path_CR2.append(p) # For-loop: All histogram pairs for hVR, hCR2, hCR1 in zip(path_VR, path_CR2, path_CR1): break # not needed now if "IsGenuineB" in hVR: continue PlotComparison(datasetsMgr, hVR, hCR2, "VRvCR2") # For-loop: All histogram pairs counter = 1 for hCR1, hCR2 in zip(path_CR1, path_CR2): if "IsGenuineB" in hCR1: continue hName = hCR1.replace("_AfterCRSelections", "_CR1vCR2").replace( "ForFakeBMeasurement/Baseline_", "") msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format( "Histogram", "%i" % counter, "/", "%s:" % (len(path_CR1)), hName) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), counter == 1) PlotComparison(datasetsMgr, hCR1, hCR2, "CR1vCR2") counter += 1 # For-loop: All histogram pairs for hSR, hVR in zip(path_SR, path_VR): break Print("UNBLINDING SR! Are you nuts ? BREAK!", False) if "IsGenuineB" in hSR: continue PlotComparison(datasetsMgr, hSR, hVR, "SRvVR") # # For-loop: All histogram pairs # for hSR, hCR1 in zip(path_SR, path_CR1): # #break # Print("UNBLINDING SR! Are you nuts ? BREAK!", False) # raw_input("Press any key to continue") # if "IsGenuineB" in hSR: # continue # PlotComparison(datasetsMgr, hSR, hCR1, "SRvCR1") Print( "All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
treatNegativeBins(qcdMt, "QCD_inverted mT") # Do calculation manager.calculateCombinedNormalizationCoefficient(qcdMt, ewkFakeTausMt) #===== Save normalization outFileName = "QCDNormalizationFactors_%s_%s.py"%(HISTONAME, moduleInfoString) outFileFullName = os.path.join(argv[1],outFileName) manager.writeScaleFactorFile(outFileFullName, moduleInfoString) if __name__ == "__main__": # Check parameters if len(sys.argv) < 2: usage() # Find out the era/search mode/optimization mode combinations and run each of them myModuleSelector = analysisModuleSelector.AnalysisModuleSelector() dsetMgrCreator = dataset.readFromMulticrabCfg(directory=sys.argv[1]) myModuleSelector.setPrimarySource("analysis", dsetMgrCreator) myModuleSelector.doSelect(None) #myModuleSelector.printSelectedCombinationCount() for era in myModuleSelector.getSelectedEras(): for searchMode in myModuleSelector.getSelectedSearchModes(): for optimizationMode in myModuleSelector.getSelectedOptimizationModes(): print ShellStyles.HighlightStyle()+"\nCalculating normalization for module %s/%s/%s%s"%(era, searchMode, optimizationMode, ShellStyles.NormalStyle()) # Construct info string for the module moduleInfoString = "%s_%s"%(era, searchMode) if len(optimizationMode) > 0: moduleInfoString += "_%s"%(optimizationMode) # Create dataset manager dsetMgr = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode) main(sys.argv, dsetMgr, moduleInfoString) dsetMgrCreator.close()
def main(opts): # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # Apply TDR style style = tdrstyle.TDRStyle() style.setGridX(opts.gridX) style.setGridY(opts.gridY) style.setOptStat(False) # If user does not define optimisation mode do all of them if opts.optMode == None: optModes = optList else: optModes = [opts.optMode] # Define genuineB and fakeB datasets mergeMap = {"TT": "GenuineB", "QCD_HT50to100" : "FakeB", #v. poor stats! "QCD_HT200to300" : "FakeB", #v. poor stats! "QCD_HT100to200" : "FakeB", #v. poor stats! "QCD_HT200to300" : "FakeB", #v. poor stats! "QCD_HT300to500" : "FakeB", "QCD_HT500to700" : "FakeB", "QCD_HT700to1000" : "FakeB", "QCD_HT1000to1500": "FakeB", "QCD_HT1500to2000": "FakeB", "QCD_HT2000toInf" : "FakeB", "WJetsToQQ_HT_600ToInf": "FakeB" } # Definitions results = [] # For-loop: All optimisation modes for index, opt in enumerate(optModes, 1): opts.optMode = opt # Definitions genuineB = None fakeB = None # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json # Print datasets info ? if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Remove unwanted datasets removeList = ["QCD_HT50to100", "QCD_HT100to200", "QCD_HT200to300", "QCD_HT200to300_ext1", "WJetsToQQ_HT_600ToInf"] for k, d in enumerate(datasetsMgr.getAllDatasets(), 1): if d.getName() in removeList: datasetsMgr.remove(d.getName()) Verbose(ShellStyles.ErrorStyle() + "Removing dataset %s" % d.getName() + ShellStyles.NormalStyle(), k==1) if index == 1: datasetsMgr.PrintInfo() # Merge datasets into two groups: Genuine-B and Fake-B datasetsMgr.mergeMany(mergeMap, addition=False) for d in datasetsMgr.getAllDatasets(): if d.getName() == "GenuineB": genuineB = d if d.getName() == "FakeB": fakeB = d # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Get integrated luminosity intLumi = datasetsMgr.getDataset("Data").getLuminosity() datasetsMgr.remove(filter(lambda name: "Data" in name, datasetsMgr.getAllDatasetNames())) # Print dataset information if index == 1: datasetsMgr.PrintInfo() # Do the plot name = GetPlotName(opts) myResults = doPlot(name, genuineB, fakeB, opts.errorlevel, opts.optMode, intLumi) # Save results and msgs results.extend(myResults) # For-loop: All points if opts.verbose: for item in results: print item # Print path of all saved plots msg = "All plots saved under directory %s" % (aux.convertToURL(opts.saveDir, opts.url)) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), True) # Write results to a json file with open(opts.json, 'w') as outfile: json.dump(results, outfile) msg = "Wrote results to \"%s\"" % (opts.json) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), True) return
def main(): # Object for selecting data eras, search modes, and optimization modes myModuleSelector = analysisModuleSelector.AnalysisModuleSelector() # Obtain multicrab directory myMulticrabDir = "." if opts.mcrab != None: myMulticrabDir = opts.mcrab if not os.path.exists("%s/multicrab.cfg" % myMulticrabDir): msg = "No multicrab directory found at path '%s'! Please check path or specify it with --mcrab!" % ( myMulticrabDir) raise Exception(ShellStyles.ErrorLabel() + msg + ShellStyles.NormalStyle()) if len(opts.shape) == 0: raise Exception( ShellStyles.ErrorLabel() + "Provide a shape identifierwith --shape (for example MT)!" + ShellStyles.NormalStyle()) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir) # Obtain systematics names mySystematicsNamesRaw = dsetMgrCreator.getSystematicVariationSources() mySystematicsNames = [] for item in mySystematicsNamesRaw: mySystematicsNames.append("%sPlus" % item) mySystematicsNames.append("%sMinus" % item) if opts.test: mySystematicsNames = [] #[mySystematicsNames[0]] #FIXME # Set the primary source myModuleSelector.setPrimarySource(label=opts.analysisName, dsetMgrCreator=dsetMgrCreator) # Select modules myModuleSelector.doSelect(opts=None) #FIXME: (opts=opts) # Loop over era/searchMode/optimizationMode combos myDisplayStatus = True myTotalModules = myModuleSelector.getSelectedCombinationCount() * ( len(mySystematicsNames) + 1) * len(opts.shape) Verbose("Found %s modules in total" % (myTotalModules), True) count, nEras, nSearchModes, nOptModes, nSysVars = myModuleSelector.getSelectedCombinationCountIndividually( ) if nSysVars > 0: msg = "Will run over %d modules (%d eras x %d searchModes x %d optimizationModes x %d systematic variations)" % ( count, nEras, nSearchModes, nOptModes, nSysVars) else: msg = "Will run over %d modules (%d eras x %d searchModes x %d optimizationModes)" % ( count, nEras, nSearchModes, nOptModes) Print(msg, True) # Create pseudo-multicrab creator myOutputCreator = pseudoMultiCrabCreator.PseudoMultiCrabCreator( opts.analysisName, myMulticrabDir) # Make time stamp for start time myGlobalStartTime = time.time() iModule = 0 # For-loop: All Shapes for shapeType in opts.shape: # Initialize myOutputCreator.initialize(shapeType, prefix="") msg = "Creating dataset for shape \"%s\"%s" % ( shapeType, ShellStyles.NormalStyle()) Verbose(ShellStyles.HighlightStyle() + msg, True) # Get lists of settings erasList = myModuleSelector.getSelectedEras() modesList = myModuleSelector.getSelectedSearchModes() optList = myModuleSelector.getSelectedOptimizationModes() optList.append("") #append the default opt mode! # For-Loop over era, searchMode, and optimizationMode options for era in erasList: for searchMode in modesList: for optimizationMode in optList: Verbose( "era = %s, searchMode = %s, optMode = %s" % (era, searchMode, optimizationMode), True) # If an optimization mode is defined in options skip the rest if opts.optMode != None: if optimizationMode != opts.optMode: continue # Obtain normalization factors myNormFactors = importNormFactors(era, searchMode, optimizationMode, opts.mcrab) # Nominal module myModuleInfoString = getModuleInfoString( era, searchMode, optimizationMode) iModule += 1 # Inform user of what is being processes msg = "Module %d/%d:%s %s/%s" % ( iModule, myTotalModules, ShellStyles.NormalStyle(), myModuleInfoString, shapeType) Print(ShellStyles.CaptionStyle() + msg, True) # Keep time myStartTime = time.time() Verbose("Create dataset manager with given settings", True) nominalModule = ModuleBuilder(opts, myOutputCreator) nominalModule.createDsetMgr(myMulticrabDir, era, searchMode, optimizationMode) if (iModule == 1): if opts.verbose: nominalModule.debug() doQCDNormalizationSyst = False #FIXME if not doQCDNormalizationSyst: msg = "Disabling systematics" Print(ShellStyles.WarningLabel() + msg, True) nominalModule.buildModule(opts.dataSrc, opts.ewkSrc, myNormFactors["nominal"], doQCDNormalizationSyst, opts.normDataSrc, opts.normEwkSrc) if len(mySystematicsNames) > 0: Print( "Adding QCD normalization systematics (iff also other systematics present) ", True) nominalModule.buildQCDNormalizationSystModule( opts.dataSrc, opts.ewkSrc) # FIXME: add quark gluon weighting systematics! if 0: Print("Adding Quark/Gluon weighting systematics", True) nominalModule.buildQCDQuarkGluonWeightingSystModule( opts.dataSrc, opts.ewkSrc, myNormFactors["FakeWeightingUp"], myNormFactors["FakeWeightingDown"], False, opts.normDataSrc, opts.normEwkSrc) Verbose("Deleting nominal module", True) nominalModule.delete() Verbose("Printing time estimate", True) printTimeEstimate(myGlobalStartTime, myStartTime, iModule, myTotalModules) Verbose("Now do the rest of systematics variations", True) for syst in mySystematicsNames: iModule += 1 msg = "Analyzing systematics variations %d/%d: %s/%s/%s" % ( iModule, myTotalModules, myModuleInfoString, syst, shapeType) Print( ShellStyles.CaptionStyle() + msg + ShellStyles.NormalStyle(), True) myStartTime = time.time() systModule = ModuleBuilder(opts, myOutputCreator) # Create dataset manager with given settings systModule.createDsetMgr(myMulticrabDir, era, searchMode, optimizationMode, systematicVariation=syst) # Build asystematics module systModule.buildModule(opts.dataSrc, opts.ewkSrc, myNormFactors["nominal"], False, opts.normDataSrc, opts.normEwkSrc) printTimeEstimate(myGlobalStartTime, myStartTime, iModule, myTotalModules) systModule.delete() Verbose("Pseudo-multicrab ready for %s" % shapeType, True) # Create rest of pseudo multicrab directory myOutputCreator.silentFinalize() # Print some timing statistics Print( "Average processing time per module was %.1f s" % getAvgProcessTimeForOneModule(myGlobalStartTime, myTotalModules), True) Print( "Total elapsed time was %.1f s" % getTotalElapsedTime(myGlobalStartTime), False) msg = "Created pseudo-multicrab %s for shape type \"%s\"" % ( myOutputCreator.getDirName(), shapeType) Print(ShellStyles.SuccessLabel() + msg, True) return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setGridX(False) style.setGridY(False) style.setOptStat(False) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") optModes = optList else: optModes = [opts.optMode] # For-loop: All opt Mode for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Get the PSets: if 0: datasetsMgr.printSelections() #PrintPSet("BJetSelection", datasetsMgr, depth=150) #PrintPSet("fakeBMeasurement", datasetsMgr, depth=150) sys.exit() # ZJets and DYJets overlap! if "ZJetsToQQ_HT600toInf" in datasetsMgr.getAllDatasetNames( ) and "DYJetsToQQ_HT180" in datasetsMgr.getAllDatasetNames(): Print( "Cannot use both ZJetsToQQ and DYJetsToQQ due to duplicate events? Investigate. Removing ZJetsToQQ datasets for now ..", True) datasetsMgr.remove( filter(lambda name: "ZJetsToQQ" in name, datasetsMgr.getAllDatasetNames())) # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Get luminosity if a value is not specified if opts.intLumi < 0: opts.intLumi = datasetsMgr.getDataset("Data").getLuminosity() # Remove datasets removeList = ["QCD-b", "Charged"] if not opts.useMC: removeList.append("QCD") for i, d in enumerate(removeList, 0): msg = "Removing dataset %s" % d Verbose( ShellStyles.WarningLabel() + msg + ShellStyles.NormalStyle(), i == 0) datasetsMgr.remove( filter(lambda name: d in name, datasetsMgr.getAllDatasetNames())) # Print summary of datasets to be used if 0: datasetsMgr.PrintInfo() # Merge EWK samples datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) # Print dataset information datasetsMgr.PrintInfo() # List of TDirectoryFile (_CRone, _CRtwo, _VR, _SR) tdirs = [ "LdgTrijetPt_", "LdgTrijetMass_", "TetrajetBJetPt_", "TetrajetBJetEta_", "LdgTetrajetPt_", "LdgTetrajetMass_" ] region = ["CRone", "CRtwo"] hList = [] for d in tdirs: for r in region: hList.append(d + r) # Get the folders with the binned histograms folderList_ = datasetsMgr.getDataset( datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent( opts.folder) folderList = [h for h in folderList_ if h in hList] # For-loop: All folders histoPaths = [] for f in folderList: folderPath = os.path.join(opts.folder, f) histoList = datasetsMgr.getDataset( datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent( folderPath) pathList = [os.path.join(folderPath, h) for h in histoList] histoPaths.extend(pathList) # Get all the bin labels binLabels = GetBinLabels("CRone", histoPaths) for i, t in enumerate(tdirs, 1): myList = [] for p in histoPaths: if t in p: myList.append(p) msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format( "Histogram", "%i" % i, "/", "%s:" % (len(tdirs)), t.replace("_", "")) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), i == 1) PlotHistograms(datasetsMgr, myList, binLabels, opts) # Save the plots Print( "All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
def main(opts): # Object for selecting data eras, search modes, and optimization modes myModuleSelector = analysisModuleSelector.AnalysisModuleSelector() # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Obtain systematics names mySystematicsNamesRaw = dsetMgrCreator.getSystematicVariationSources() mySystematicsNames = getSystematicsNames(mySystematicsNamesRaw, opts) # Set the primary source Verbose( "Setting the primary source (label=%s)" % (ShellStyles.NoteStyle() + opts.analysisName + ShellStyles.NormalStyle()), True) myModuleSelector.setPrimarySource(label=opts.analysisName, dsetMgrCreator=dsetMgrCreator) # Select modules myModuleSelector.doSelect(opts=None) #fixme: (opts=opts)? # Loop over era/searchMode/optimizationMode combos myTotalModules = myModuleSelector.getSelectedCombinationCount() * ( len(mySystematicsNames) + 1) * len(opts.shape) Verbose("Found %s modules in total" % (myTotalModules), True) count, nEras, nSearchModes, nOptModes, nSysVars = myModuleSelector.getSelectedCombinationCountIndividually( ) if nSysVars > 0: msg = "Running over %d modules (%d eras x %d searchModes x %d optimizationModes x %d systematic variations)" % ( count, nEras, nSearchModes, nOptModes, nSysVars) else: msg = "Running over %d modules (%d eras x %d searchModes x %d optimizationModes)" % ( count, nEras, nSearchModes, nOptModes) Verbose(msg, True) # Create pseudo-multicrab creator msg = "Will create pseudo-dataset %s inside the pseudo-multicrab directory" % ( ShellStyles.NoteStyle() + opts.analysisName + ShellStyles.NormalStyle()) Verbose(msg, True) myOutputCreator = pseudoMultiCrabCreator.PseudoMultiCrabCreator( opts.analysisName, opts.mcrab, verbose=opts.verbose) # Make time stamp for start time myGlobalStartTime = time.time() iModule = 0 # For-loop: All Shapes for iShape, shapeType in enumerate(opts.shape, 1): msg = "Shape %d/%d:%s %s" % (iShape, len( opts.shape), ShellStyles.NormalStyle(), shapeType) Verbose(ShellStyles.HighlightAltStyle() + msg, True) # Initialize myOutputCreator.initialize( subTitle=shapeType, prefix="") #fixme: remove shapeType from sub-directory name? # Get lists of settings erasList = myModuleSelector.getSelectedEras() modesList = myModuleSelector.getSelectedSearchModes() optList = myModuleSelector.getSelectedOptimizationModes() if 0: optList.append( "" ) #append the default opt mode iff more optimization modes exist # For-loop: All eras for era in erasList: # For-loop: All searchModes for searchMode in modesList: # For-loop: AlloptimizationModes for optimizationMode in optList: Verbose( "era = %s, searchMode = %s, optMode = %s" % (era, searchMode, optimizationMode), True) # If an optimization mode is defined in options skip the rest if opts.optMode != None: if optimizationMode != opts.optMode: continue # Obtain normalization factors for given Era, SearchMode, and OptimizationMode! myNormFactors = importNormFactors(era, searchMode, optimizationMode, opts.mcrab) # Nominal module myModuleInfoString = getModuleInfoString( era, searchMode, optimizationMode) iModule += 1 # Inform user of what is being processes if optimizationMode != "": msg = "Module %d/%d: %s_%s_%s_%s" % ( iModule, myTotalModules, opts.analysisName, searchMode, era, optimizationMode) else: msg = "Module %d/%d: %s_%s_%s" % ( iModule, myTotalModules, opts.analysisName, searchMode, era) Print( ShellStyles.HighlightAltStyle() + msg + ShellStyles.NormalStyle(), iModule == 1) # Keep time myStartTime = time.time() Verbose("Create dataset manager with given settings", True) nominalModule = ModuleBuilder(opts, myOutputCreator, opts.verbose) nominalModule.createDsetMgr(opts.mcrab, era, searchMode, optimizationMode) if (iModule == 1): if opts.verbose: nominalModule.debug() # Build the module doFakeBNormalisationSyst = False nominalModule.buildModule( opts.dataSrc, opts.ewkSrc, myNormFactors[opts.normFactorKey], doFakeBNormalisationSyst, opts.normDataSrc, opts.normEwkSrc) # Do TF variations named "SystVarUp" and "SystVarDown" (i.e. (Get results using TF+Error and TF-Error instead of TF) if len(mySystematicsNames) > 0: Verbose( "Adding FakeB normalization systematics (iff also other systematics present) ", True) #nominalModule.buildTransferFactorVarSystModule(opts.dataSrc, opts.ewkSrc, myNormFactors["SystVarUp"], myNormFactors["SystVarDown"]) nominalModule.buildTransferFactorVarSystModule( opts.dataSrc, opts.ewkSrc, myNormFactors) Verbose("Deleting nominal module", True) nominalModule.delete() Verbose("Printing time estimate", True) printTimeEstimate(myGlobalStartTime, myStartTime, iModule, myTotalModules) Verbose("Now do the rest of systematics variations", True) for syst in mySystematicsNames: iModule += 1 msg = "Module %d/%d: %s/%s" % ( iModule, myTotalModules, myModuleInfoString, syst) print Print( ShellStyles.HighlightAltStyle() + msg + ShellStyles.NormalStyle(), False) myStartTime = time.time() systModule = ModuleBuilder(opts, myOutputCreator) # Create dataset manager with given settings systModule.createDsetMgr(opts.mcrab, era, searchMode, optimizationMode, systematicVariation=syst) # Build systematics module Verbose( "Building systematics module (opts.normFactorKey = %s)" % (opts.normFactorKey), True) systModule.buildModule( opts.dataSrc, opts.ewkSrc, myNormFactors[opts.normFactorKey], False, opts.normDataSrc, opts.normEwkSrc) printTimeEstimate(myGlobalStartTime, myStartTime, iModule, myTotalModules) systModule.delete() print Verbose("Pseudo-multicrab ready for %s" % shapeType, True) # Print some timing statistics Verbose( "Average processing time per module was %.1f seconds" % getAvgProcessTimeForOneModule(myGlobalStartTime, myTotalModules), True) Print( "Total elapsed time was %.1f seconds" % getTotalElapsedTime(myGlobalStartTime), True) # Create rest of pseudo multicrab directory myOutputCreator.finalize(silent=False) return
myMulticrabDir = "." if opts.multicrabDir != None: myMulticrabDir = opts.multicrabDir if not os.path.exists("%s/multicrab.cfg"%myMulticrabDir): raise Exception(ShellStyles.ErrorLabel()+"No multicrab directory found at path '%s'! Please check path or specify it with --mdir!"%(myMulticrabDir)+ShellStyles.NormalStyle()) if len(opts.shape) == 0: raise Exception(ShellStyles.ErrorLabel()+"Provide a shape identifierwith --shape (for example MT)!"+ShellStyles.NormalStyle()) # Set EWK source depending on calculation mode if opts.qcdonly: _generalOptions["EWKsource"] = _generalOptions["ewkSourceForQCDOnly"] else: _generalOptions["EWKsource"] = _generalOptions["ewkSourceForQCDPlusFakeTaus"] # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir) # Obtain systematics names mySystematicsNamesRaw = dsetMgrCreator.getSystematicVariationSources() mySystematicsNames = [] for item in mySystematicsNamesRaw: mySystematicsNames.append("%sPlus"%item) mySystematicsNames.append("%sMinus"%item) if opts.test: mySystematicsNames = [mySystematicsNames[0]] myModuleSelector.setPrimarySource("analysis", dsetMgrCreator) # Select modules myModuleSelector.doSelect(opts) #dsetMgrCreator.close() # Loop over era/searchMode/optimizationMode combos myDisplayStatus = True
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setGridX(opts.gridX) style.setGridY(opts.gridY) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") else: pass optModes = optList else: optModes = [opts.optMode] # For-loop: All optimisation modes for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json # Print PSets used for FakeBMeasurement if 0: datasetsMgr.printSelections() # Set/Overwrite cross-sections for d in datasetsMgr.getAllDatasets(): if "ZJetsToQQ_HT600toInf" in d.getName(): datasetsMgr.remove(d.getName()) if "ChargedHiggs" in d.getName(): datasetsMgr.getDataset(d.getName()).setCrossSection(1.0) if d.getName() not in opts.signal: if not opts.acceptance: datasetsMgr.remove(d.getName()) if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() datasetsMgr.PrintInfo() # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Get Luminosity # For acceptance plot use all available masses if opts.acceptance: opts.signal = [] opts.signalMasses = [] for d in datasetsMgr.getAllDatasets(): if "ChargedHiggs" in d.getName(): #dName = d.getName().replace("_ext1", "").split("M_") dName = d.getName().split("M_") m = int(dName[-1]) opts.signal.append(d.getName()) opts.signalMasses.append(m) if opts.intLumi < 0: if "Data" in datasetsMgr.getAllDatasetNames(): opts.intLumi = datasetsMgr.getDataset("Data").getLuminosity() else: opts.intLumi = 1.0 # Merge EWK samples if 1: datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) plots._plotStyles["EWK"] = styles.getAltEWKStyle() # Print post EWK-merge dataset summary datasetsMgr.PrintInfo() # Get the efficiency graphs hGraphList = [] histoName = os.path.join(opts.folder, "counter") hGraphList, _kwargs = GetHistoGraphs(datasetsMgr, opts.folder, histoName) # Plot the histo graphs PlotHistoGraphs(hGraphList, _kwargs) Print("All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
def addDatasetsFromMulticrab(self, directory, *args, **kwargs): ''' kwargs for 'includeOnlyTasks' or 'excludeTasks' to set the datasets over which this analyzer is processed, default is all datasets ''' Verbose("addDatasetsFromMulticrab()", True) blacklist = [] if "blacklist" in kwargs.keys(): if isinstance(kwargs["blacklist"], str): blacklist.append(kwargs["blacklist"]) elif isinstance(kwargs["blacklist"], list): blacklist.extend(kwargs["blacklist"]) else: raise Exception("Unsupported input format!") del kwargs["blacklist"] whitelist = [] if "whitelist" in kwargs.keys(): if isinstance(kwargs["whitelist"], str): whitelist.append(kwargs["whitelist"]) elif isinstance(kwargs["whitelist"], list): whitelist.extend(kwargs["whitelist"]) else: raise Exception("Unsupported input format!") del kwargs["whitelist"] dataset._optionDefaults[ "input"] = "histograms-*.root" #"miniaod2tree*.root" dsetMgrCreator = dataset.readFromMulticrabCfg(directory=directory, *args, **kwargs) dsets = dsetMgrCreator.getDatasetPrecursors() # Check if data datasets included for i, d in enumerate(dsets, 1): if d.isData(): self.datasetsData.append(d) dsetMgrCreator.close() # Create a manager with data datasets (to enable PU reweighting even if not running with data) if len(self.datasetsData) < 1: dsetMgrCreator_tmp = dataset.readFromMulticrabCfg( directory=directory) dsets_tmp = dsetMgrCreator_tmp.getDatasetPrecursors() for i, d in enumerate(dsets_tmp, 1): if d.isData(): self.datasetsData.append(d) dsetMgrCreator_tmp.close() self.Print( "Pileup reweighting will be done according to the sum of:\n\t%s" % (sh_Note + "\n\t".join([d.getName() for d in self.datasetsData]) + sh_Normal), True) if len(whitelist) > 0: for dset in dsets: isOnWhiteList = False for item in whitelist: if dset.getName().startswith(item): isOnWhiteList = True if not isOnWhiteList: blacklist.append(dset.getName()) for dset in dsets: isOnBlackList = False for item in blacklist: if dset.getName().startswith(item): isOnBlackList = True if isOnBlackList: self.Print( "Ignoring dataset because of black/whitelist options: '%s' ..." % dset.getName(), True) else: self.addDataset(dset.getName(), dset.getFileNames(), dataVersion=dset.getDataVersion(), lumiFile=dsetMgrCreator.getLumiFile()) return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setOptStat(False) style.setGridX(False) style.setGridY(False) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab1) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: optModes = optList else: optModes = [opts.optMode] # For-loop: All optimisation modes for opt in optModes: opts.optMode = opt # Get the datasets from the directory datasetsMgr1 = GetDatasetsFromDir(opts.mcrab1, opts) datasetsMgr2 = GetDatasetsFromDir(opts.mcrab2, opts) datasetsMgr3 = GetDatasetsFromDir(opts.mcrab3, opts) # Setup the dataset managers datasetsMgr1.updateNAllEventsToPUWeighted() datasetsMgr1.loadLuminosities() # from lumi.json datasetsMgr2.updateNAllEventsToPUWeighted() datasetsMgr2.loadLuminosities() # from lumi.json datasetsMgr3.updateNAllEventsToPUWeighted() datasetsMgr3.loadLuminosities() # from lumi.json # Print dataset info? if opts.verbose: datasetsMgr1.PrintCrossSections() datasetsMgr1.PrintLuminosities() datasetsMgr2.PrintCrossSections() datasetsMgr2.PrintLuminosities() datasetsMgr2.PrintCrossSections() datasetsMgr2.PrintLuminosities() # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr1) plots.mergeRenameReorderForDataMC(datasetsMgr2) plots.mergeRenameReorderForDataMC(datasetsMgr3) # Get Luminosity lumi1 = datasetsMgr1.getDataset("Data").getLuminosity() lumi2 = datasetsMgr2.getDataset("Data").getLuminosity() lumi3 = datasetsMgr3.getDataset("Data").getLuminosity() if lumi1 != lumi2 != lumi3: raise Exception("Lumi1 (=%.2f) != Lumi2 (=%.2f) != Lumi3 (=%.2f" % (lumi1, lumi2, lumi3)) else: opts.intLumi = datasetsMgr1.getDataset("Data").getLuminosity() # Merge EWK samples datasetsMgr1.merge("EWK", aux.GetListOfEwkDatasets()) datasetsMgr2.merge("EWK", aux.GetListOfEwkDatasets()) datasetsMgr3.merge("EWK", aux.GetListOfEwkDatasets()) plots._plotStyles["EWK"] = styles.getAltEWKStyle() # Print dataset information datasetsMgr1.PrintInfo() if 0: datasetsMgr2.PrintInfo() datasetsMgr3.PrintInfo() # Get all the histograms and their paths (e.g. ForFakeBMeasurement/Baseline_DeltaRLdgTrijetBJetTetrajetBJet_AfterCRSelections) hList = datasetsMgr1.getDataset( datasetsMgr1.getAllDatasetNames()[0]).getDirectoryContent( opts.folder) hPaths = [os.path.join(opts.folder, h) for h in hList] # Create a smaller list with only histos of interest hListS = [] for h in hList: if "StandardSelections" in h: continue if "IsGenuineB" in h: continue if "_Bjet" in h: continue if "_Jet" in h: continue if "_SubLdg" in h: continue if "_Njets" in h: continue if "_NBjets" in h: continue if "_Delta" in h: continue if "Dijet" in h: continue if "Bdisc" in h: continue #if "MVA" in h: # continue if "MET" in h: continue if "HT" in h: continue # Otherwise keep the histogram hListS.append(h) hPathsS = [os.path.join(opts.folder, h) for h in hListS] # Create two lists of paths: one for "Baseline" (SR) and one for "Inverted" (CR) path_SR = [] # baseline, _AfterAllSelections path_CR1 = [] # baseline, _AfterCRSelections path_VR = [] # inverted, _AfterAllSelections path_CR2 = [] # inverted, _AfterCRSelections # For-loop: All histogram paths for p in hPathsS: #hPaths: if "Baseline" in p: if "AllSelections" in p: path_SR.append(p) if "CRSelections" in p: path_CR1.append(p) if "Inverted" in p: if "AllSelections" in p: path_VR.append(p) if "CRSelections" in p: path_CR2.append(p) counter = 1 # For-loop: All histogram pairs for hCR1, hCR2 in zip(path_CR1, path_CR2): if "IsGenuineB" in hCR1: continue #hName = hCR1.replace("_AfterCRSelections", "_CR1vCR2").replace("ForFakeBMeasurement/Baseline_", "") hName = hCR1.replace("_AfterCRSelections", " (CR1 and R2)").replace( "ForFakeBMeasurement/Baseline_", "") msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format( "Histogram", "%i" % counter, "/", "%s:" % (len(path_CR1)), hName) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), counter == 1) PlotComparison(datasetsMgr1, datasetsMgr2, datasetsMgr3, hCR1, hCR2, "CR1") PlotComparison(datasetsMgr1, datasetsMgr2, datasetsMgr3, hCR1, hCR2, "CR2") #iro counter += 1 # WARNING! This unblinds the Signal Region (SR) for hSR, hVR in zip(path_SR, path_VR): if "IsGenuineB" in hSR: continue if 1: continue #hName = hCR1.replace("_AfterCRSelections", "_SRvVR").replace("ForFakeBMeasurement/Baseline_", "") hName = hCR1.replace("_AfterCRSelections", " (SR and VR)").replace( "ForFakeBMeasurement/Baseline_", "") msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format( "Histogram", "%i" % counter, "/", "%s:" % (len(path_CR1)), hName) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), counter == 1) PlotComparison(datasetsMgr1, datasetsMgr2, datasetsMgr3, hSR, hVR, "SR") PlotComparison(datasetsMgr1, datasetsMgr2, datasetsMgr3, hSR, hVR, "VR") counter += 1 Print( "All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
#===== Save normalization outFileName = "QCDNormalizationFactors_%s_%s.py" % (HISTONAME, moduleInfoString) print argv[1], outFileName outFileFullName = os.path.join(argv[1], outFileName) manager.writeScaleFactorFile(outFileFullName, moduleInfoString) if __name__ == "__main__": # Check parameters if len(sys.argv) < 2: usage() # Find out the era/search mode/optimization mode combinations and run each of them myModuleSelector = analysisModuleSelector.AnalysisModuleSelector() dsetMgrCreator = dataset.readFromMulticrabCfg(directory=sys.argv[1]) myModuleSelector.setPrimarySource("analysis", dsetMgrCreator) myModuleSelector.doSelect(None) #myModuleSelector.printSelectedCombinationCount() for era in myModuleSelector.getSelectedEras(): for searchMode in myModuleSelector.getSelectedSearchModes(): for optimizationMode in myModuleSelector.getSelectedOptimizationModes( ): print ShellStyles.HighlightStyle( ) + "\nCalculating normalization for module %s/%s/%s%s" % ( era, searchMode, optimizationMode, ShellStyles.NormalStyle()) # Construct info string for the module moduleInfoString = "%s_%s" % (era, searchMode) if len(optimizationMode) > 0: moduleInfoString += "_%s" % (optimizationMode)
def main(opts): # Suppress warnings about weight being re-applied ROOT.gErrorIgnoreLevel = ROOT.kError # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") else: pass optModes = optList else: optModes = [opts.optMode] opts.optMode = "" mcrabName = opts.mcrab RunEra = mcrabName.split("_")[1] # Setup ROOT and style ROOT.gROOT.SetBatch(opts.batchMode) style = tdrstyle.TDRStyle() style.setOptStat(True) style.setGridX(True) style.setGridY(True) # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) # Remove some QCD samples (the cross sections of these samples are not calculated) if 0: msg = "Removing following samples:" Print(ShellStyles.ErrorStyle() + msg + ShellStyles.NormalStyle(), True) for d in getDatasetsToExclude(): Print(d, False) datasetsMgr.remove(d) # Get run-range minRunRange, maxRunRange, runRange = GetRunRange(datasetsMgr) # Get int lumi intLumi = GetLumi(datasetsMgr) # Update to PU & load luminosities datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() #datasetsMgr.normalizeMCByLuminosity() # Print luminisoties and cross-sections datasetsMgr.PrintLuminosities() datasetsMgr.PrintCrossSections() # Default merging & ordering: "Data", "QCD", "SingleTop", "Diboson" plots.mergeRenameReorderForDataMC(datasetsMgr) # Get datasets datasetsMgr.mergeMC() dataset_Data = datasetsMgr.getDataDatasets() dataset_MC = datasetsMgr.getMCDatasets() # Define lists of Triggers to be plotted and Variables xVars = ["pt6thJet", "eta6thJet", "phi6thJet", "Ht", "nBTagJets", "pu", "JetMulti", "BJetMulti"] trgList = ["1BTag", "2BTag", "OR", "OR_PFJet450"] if opts.fast: trgList = ["OR_PFJet450"] xVars = ["pt6thJet", "Ht"] nPlots = len(trgList)*len(xVars) counter = 0 # For-loop: All signal triggers for i, trg in enumerate(trgList, 1): # For-loop: All x-variables for j, xVar in enumerate(xVars, 1): counter+=1 msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format("Histogram", "%i" % counter, "/", "%s:" % (nPlots), "%s Vs %s" % (trg, xVar)) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), counter==1) # Define names hNumerator = "hNum_%s_RefTrg_OfflineSel_Signal%s" % (xVar, trg) hDenominator = "hDen_%s_RefTrg_OfflineSel" % (xVar) plotName = "Eff_%s_%s" % (xVar, trg) # Get Efficiency Plots _kwargs = GetHistoKwargs(xVar, opts) eff_Data = GetEfficiency(datasetsMgr, dataset_Data, hNumerator, hDenominator , **_kwargs) eff_MC = GetEfficiency(datasetsMgr, dataset_MC, hNumerator, hDenominator, **_kwargs) # Apply Styles styles.dataStyle.apply(eff_Data) styles.mcStyle.apply(eff_MC) # Create the plot p = plots.ComparisonPlot(histograms.HistoGraph(eff_Data, "eff_Data", "p", "P"), histograms.HistoGraph(eff_MC, "eff_MC" , "p", "P"), saveFormats=[]) # Define the legend entries p.histoMgr.setHistoLegendLabelMany( { "eff_Data": "Data", "eff_MC" : "Simulation" } ) # Draw and save the plot p.setLuminosity(intLumi) plots.drawPlot(p, plotName, **_kwargs) # Draw histograms.addText(0.65, 0.06, "Runs "+ runRange, 17) histograms.addText(0.65, 0.10, "2016", 17) # Save the canvas to a file SavePlot(p, plotName, os.path.join(opts.saveDir, opts.optMode), saveFormats=[".pdf", ".png", ".C"] ) Print("All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
def addDatasetsFromMulticrab(self, directory, *args, **kwargs): ''' kwargs for 'includeOnlyTasks' or 'excludeTasks' to set the datasets over which this analyzer is processed, default is all datasets ''' Verbose("addDatasetsFromMulticrab()", True) blacklist = [] if "blacklist" in kwargs.keys(): if isinstance(kwargs["blacklist"], str): blacklist.append(kwargs["blacklist"]) elif isinstance(kwargs["blacklist"], list): blacklist.extend(kwargs["blacklist"]) else: raise Exception("Unsupported input format!") del kwargs["blacklist"] whitelist = [] if "whitelist" in kwargs.keys(): if isinstance(kwargs["whitelist"], str): whitelist.append(kwargs["whitelist"]) elif isinstance(kwargs["whitelist"], list): whitelist.extend(kwargs["whitelist"]) else: raise Exception("Unsupported input format!") del kwargs["whitelist"] dataset._optionDefaults["input"] = "histograms-*.root" #"miniaod2tree*.root" dsetMgrCreator = dataset.readFromMulticrabCfg(directory=directory, *args, **kwargs) dsets = dsetMgrCreator.getDatasetPrecursors() # Check if data datasets included for i, d in enumerate(dsets, 1): if d.isData(): self.datasetsData.append(d) dsetMgrCreator.close() # Create a manager with data datasets (to enable PU reweighting even if not running with data) if len(self.datasetsData) < 1: dsetMgrCreator_tmp = dataset.readFromMulticrabCfg(directory=directory) dsets_tmp = dsetMgrCreator_tmp.getDatasetPrecursors() for i, d in enumerate(dsets_tmp, 1): if d.isData(): self.datasetsData.append(d) dsetMgrCreator_tmp.close() self.Print("Pileup reweighting will be done according to the sum of:\n\t%s" % (sh_Note + "\n\t".join([d.getName() for d in self.datasetsData]) + sh_Normal), True) if len(whitelist) > 0: for dset in dsets: isOnWhiteList = False for item in whitelist: if item==dset.getName() or ( item.endswith('*') and dset.getName().startswith(item[:-1]) ): isOnWhiteList = True if not isOnWhiteList: blacklist.append(dset.getName()) for dset in dsets: isOnBlackList = False for item in blacklist: if item==dset.getName() or ( item.endswith('*') and dset.getName().startswith(item[:-1]) ): isOnBlackList = True if isOnBlackList: self.Print("Ignoring dataset because of black/whitelist options: '%s' ..." % dset.getName(), True) else: self.addDataset(dset.getName(), dset.getFileNames(), dataVersion=dset.getDataVersion(), lumiFile=dsetMgrCreator.getLumiFile()) return
def main(opts): # Suppress warnings about weight being re-applied ROOT.gErrorIgnoreLevel = ROOT.kError # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") else: pass optModes = optList else: optModes = [opts.optMode] opts.optMode = "" mcrabName = opts.mcrab RunEra = mcrabName.split("_")[1] # Setup ROOT and style ROOT.gROOT.SetBatch(opts.batchMode) style = tdrstyle.TDRStyle() style.setGridX(opts.gridX) style.setGridY(opts.gridY) if opts.paper: style.setGridX(False) style.setGridY(False) # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) # Remove some QCD samples (the cross sections of these samples are not calculated) if 0: msg = "Removing following samples:" Print(ShellStyles.ErrorStyle() + msg + ShellStyles.NormalStyle(), True) for d in getDatasetsToExclude(): Print(d, False) datasetsMgr.remove(d) # Get run-range minRunRange, maxRunRange, runRange = GetRunRange(datasetsMgr) # Get int lumi intLumi = GetLumi(datasetsMgr) # Update to PU & load luminosities datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() #datasetsMgr.normalizeMCByLuminosity() # Print luminisoties and cross-sections datasetsMgr.PrintLuminosities() datasetsMgr.PrintCrossSections() # Default merging & ordering: "Data", "QCD", "SingleTop", "Diboson" plots.mergeRenameReorderForDataMC(datasetsMgr) # Get datasets datasetsMgr.mergeMC() dataset_Data = datasetsMgr.getDataDatasets() dataset_MC = datasetsMgr.getMCDatasets() # Define lists of Triggers to be plotted and Variables xVars = ["pt6thJet", "eta6thJet", "phi6thJet", "Ht", "nBTagJets", "pu", "JetMulti", "BJetMulti"] trgList = ["1BTag", "2BTag", "OR", "OR_PFJet450"] if opts.fast: trgList = ["OR_PFJet450"] xVars = ["pt6thJet", "Ht"] nPlots = len(trgList)*len(xVars) counter = 0 # For-loop: All signal triggers for i, trg in enumerate(trgList, 1): # For-loop: All x-variables for j, xVar in enumerate(xVars, 1): counter+=1 msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format("Histogram", "%i" % counter, "/", "%s:" % (nPlots), "%s Vs %s" % (trg, xVar)) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), counter==1) # Define names hNumerator = "hNum_%s_RefTrg_OfflineSel_Signal%s" % (xVar, trg) hDenominator = "hDen_%s_RefTrg_OfflineSel" % (xVar) plotName = "Eff_%s_%s" % (xVar, trg) # Get Efficiency Plots _kwargs = GetHistoKwargs(xVar, opts) eff_Data = GetEfficiency(datasetsMgr, dataset_Data, hNumerator, hDenominator , **_kwargs) eff_MC = GetEfficiency(datasetsMgr, dataset_MC, hNumerator, hDenominator, **_kwargs) # Apply Styles styles.dataStyle.apply(eff_Data) styles.mcStyle.apply(eff_MC) # Create the plot p = plots.ComparisonPlot(histograms.HistoGraph(eff_Data, "eff_Data", "p", "P"), histograms.HistoGraph(eff_MC, "eff_MC" , "p", "P"), saveFormats=[]) # Define the legend entries p.histoMgr.setHistoLegendLabelMany( { "eff_Data": "Data", "eff_MC" : "Simulation" } ) # Draw and save the plot p.setLuminosity(intLumi) plots.drawPlot(p, plotName, **_kwargs) # Draw histograms.addText(0.65, 0.06, "Runs "+ runRange, 17) histograms.addText(0.65, 0.10, "2016", 17) # Save the canvas to a file SavePlot(p, plotName, os.path.join(opts.saveDir, opts.optMode), saveFormats=[".pdf", ".png", ".C"] ) Print("All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setOptStat(True) style.setGridX(True) style.setGridY(True) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: if len(optList) < 1: optList.append("") optModes = optList else: optModes = [opts.optMode] # For-loop: All opt Mode for opt in optModes: opts.optMode = opt # Setup & configure the dataset manager datasetsMgr = GetDatasetsFromDir(opts) datasetsMgr.updateNAllEventsToPUWeighted() datasetsMgr.loadLuminosities() # from lumi.json if opts.verbose: datasetsMgr.PrintCrossSections() datasetsMgr.PrintLuminosities() # Get the PSets: if 0: datasetsMgr.printSelections() #PrintPSet("BJetSelection", datasetsMgr, depth=150) # ZJets and DYJets overlap! if "ZJetsToQQ_HT600toInf" in datasetsMgr.getAllDatasetNames() and "DYJetsToQQ_HT180" in datasetsMgr.getAllDatasetNames(): Print("Cannot use both ZJetsToQQ and DYJetsToQQ due to duplicate events? Investigate. Removing ZJetsToQQ datasets for now ..", True) datasetsMgr.remove(filter(lambda name: "ZJetsToQQ" in name, datasetsMgr.getAllDatasetNames())) # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr) # Get luminosity if a value is not specified if opts.intLumi < 0: opts.intLumi = datasetsMgr.getDataset("Data").getLuminosity() # Remove datasets removeList = ["QCD-b", "Charged"] if not opts.useMC: removeList.append("QCD") for i, d in enumerate(removeList, 0): msg = "Removing dataset %s" % d Verbose(ShellStyles.WarningLabel() + msg + ShellStyles.NormalStyle(), i==0) datasetsMgr.remove(filter(lambda name: d in name, datasetsMgr.getAllDatasetNames())) # Print summary of datasets to be used if 0: datasetsMgr.PrintInfo() # Merge EWK samples datasetsMgr.merge("EWK", aux.GetListOfEwkDatasets()) # Print dataset information datasetsMgr.PrintInfo() # Do the fit on the histo after ALL selections (incl. topology cuts) folderList = datasetsMgr.getDataset(datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent(opts.folder) #folderList1 = [h for h in folderList if "TetrajetMass" in h] #folderList1 = [h for h in folderList if "TetrajetBJetPt" in h] #folderList1 = [h for h in folderList if "TetrajetBJetEta" in h] folderList1 = [h for h in folderList if opts.histoKey in h] folderList2 = [h for h in folderList1 if "VR" in h or "SR" in h or "CRone" in h or "CRtwo" in h or "CRthree" in h or "CRfour" in h] # For-loop: All folders histoPaths = [] for f in folderList2: folderPath = os.path.join(opts.folder, f) histoList = datasetsMgr.getDataset(datasetsMgr.getAllDatasetNames()[0]).getDirectoryContent(folderPath) pathList = [os.path.join(folderPath, h) for h in histoList] histoPaths.extend( pathList ) binLabels = GetBinLabels("CRone", histoPaths) PlotHistosAndCalculateTF(datasetsMgr, histoPaths, binLabels, opts) return
def main(opts): # Apply TDR style style = tdrstyle.TDRStyle() style.setOptStat(False) style.setGridX(False) style.setGridY(False) # Obtain dsetMgrCreator and register it to module selector dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mcrab1) # Get list of eras, modes, and optimisation modes erasList = dsetMgrCreator.getDataEras() modesList = dsetMgrCreator.getSearchModes() optList = dsetMgrCreator.getOptimizationModes() sysVarList = dsetMgrCreator.getSystematicVariations() sysVarSrcList = dsetMgrCreator.getSystematicVariationSources() # If user does not define optimisation mode do all of them if opts.optMode == None: optModes = optList else: optModes = [opts.optMode] # For-loop: All optimisation modes for opt in optModes: opts.optMode = opt # Get the datasets from the directory datasetsMgr1 = GetDatasetsFromDir(opts.mcrab1, opts) datasetsMgr2 = GetDatasetsFromDir(opts.mcrab2, opts) datasetsMgr3 = GetDatasetsFromDir(opts.mcrab3, opts) # Setup the dataset managers datasetsMgr1.updateNAllEventsToPUWeighted() datasetsMgr1.loadLuminosities() # from lumi.json datasetsMgr2.updateNAllEventsToPUWeighted() datasetsMgr2.loadLuminosities() # from lumi.json datasetsMgr3.updateNAllEventsToPUWeighted() datasetsMgr3.loadLuminosities() # from lumi.json # Print dataset info? if opts.verbose: datasetsMgr1.PrintCrossSections() datasetsMgr1.PrintLuminosities() datasetsMgr2.PrintCrossSections() datasetsMgr2.PrintLuminosities() datasetsMgr2.PrintCrossSections() datasetsMgr2.PrintLuminosities() # Merge histograms (see NtupleAnalysis/python/tools/plots.py) plots.mergeRenameReorderForDataMC(datasetsMgr1) plots.mergeRenameReorderForDataMC(datasetsMgr2) plots.mergeRenameReorderForDataMC(datasetsMgr3) # Get Luminosity lumi1 = datasetsMgr1.getDataset("Data").getLuminosity() lumi2 = datasetsMgr2.getDataset("Data").getLuminosity() lumi3 = datasetsMgr3.getDataset("Data").getLuminosity() if lumi1 != lumi2 != lumi3: raise Exception("Lumi1 (=%.2f) != Lumi2 (=%.2f) != Lumi3 (=%.2f" % (lumi1, lumi2, lumi3)) else: opts.intLumi = datasetsMgr1.getDataset("Data").getLuminosity() # Merge EWK samples datasetsMgr1.merge("EWK", aux.GetListOfEwkDatasets()) datasetsMgr2.merge("EWK", aux.GetListOfEwkDatasets()) datasetsMgr3.merge("EWK", aux.GetListOfEwkDatasets()) plots._plotStyles["EWK"] = styles.getAltEWKStyle() # Print dataset information datasetsMgr1.PrintInfo() if 0: datasetsMgr2.PrintInfo() datasetsMgr3.PrintInfo() # Get all the histograms and their paths (e.g. ForFakeBMeasurement/Baseline_DeltaRLdgTrijetBJetTetrajetBJet_AfterCRSelections) hList = datasetsMgr1.getDataset(datasetsMgr1.getAllDatasetNames()[0]).getDirectoryContent(opts.folder) hPaths = [os.path.join(opts.folder, h) for h in hList] # Create a smaller list with only histos of interest hListS = [] for h in hList: if "StandardSelections" in h: continue if "IsGenuineB" in h: continue if "_Bjet" in h: continue if "_Jet" in h: continue if "_SubLdg" in h: continue if "_Njets" in h: continue if "_NBjets" in h: continue if "_Delta" in h: continue if "Dijet" in h: continue if "Bdisc" in h: continue #if "MVA" in h: # continue if "MET" in h: continue if "HT" in h: continue # Otherwise keep the histogram hListS.append(h) hPathsS = [os.path.join(opts.folder, h) for h in hListS] # Create two lists of paths: one for "Baseline" (SR) and one for "Inverted" (CR) path_SR = [] # baseline, _AfterAllSelections path_CR1 = [] # baseline, _AfterCRSelections path_VR = [] # inverted, _AfterAllSelections path_CR2 = [] # inverted, _AfterCRSelections # For-loop: All histogram paths for p in hPathsS: #hPaths: if "Baseline" in p: if "AllSelections" in p: path_SR.append(p) if "CRSelections" in p: path_CR1.append(p) if "Inverted" in p: if "AllSelections" in p: path_VR.append(p) if "CRSelections" in p: path_CR2.append(p) counter = 1 # For-loop: All histogram pairs for hCR1, hCR2 in zip(path_CR1, path_CR2): if "IsGenuineB" in hCR1: continue #hName = hCR1.replace("_AfterCRSelections", "_CR1vCR2").replace("ForFakeBMeasurement/Baseline_", "") hName = hCR1.replace("_AfterCRSelections", " (CR1 and R2)").replace("ForFakeBMeasurement/Baseline_", "") msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format("Histogram", "%i" % counter, "/", "%s:" % (len(path_CR1)), hName) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), counter==1) PlotComparison(datasetsMgr1, datasetsMgr2, datasetsMgr3, hCR1, hCR2, "CR1") PlotComparison(datasetsMgr1, datasetsMgr2, datasetsMgr3, hCR1, hCR2, "CR2") #iro counter+=1 # WARNING! This unblinds the Signal Region (SR) for hSR, hVR in zip(path_SR, path_VR): if "IsGenuineB" in hSR: continue if 1: continue #hName = hCR1.replace("_AfterCRSelections", "_SRvVR").replace("ForFakeBMeasurement/Baseline_", "") hName = hCR1.replace("_AfterCRSelections", " (SR and VR)").replace("ForFakeBMeasurement/Baseline_", "") msg = "{:<9} {:>3} {:<1} {:<3} {:<50}".format("Histogram", "%i" % counter, "/", "%s:" % (len(path_CR1)), hName) Print(ShellStyles.SuccessStyle() + msg + ShellStyles.NormalStyle(), counter==1) PlotComparison(datasetsMgr1, datasetsMgr2, datasetsMgr3, hSR, hVR, "SR") PlotComparison(datasetsMgr1, datasetsMgr2, datasetsMgr3, hSR, hVR, "VR") counter+=1 Print("All plots saved under directory %s" % (ShellStyles.NoteStyle() + aux.convertToURL(opts.saveDir, opts.url) + ShellStyles.NormalStyle()), True) return