) #====== B-jet selection bjetSelection = PSet( jetPtCut = 30.0, jetEtaCut = 2.5, #bjetDiscr = "combinedInclusiveSecondaryVertexV2BJetTags", bjetDiscr = "pfCombinedInclusiveSecondaryVertexV2BJetTags", bjetDiscrWorkingPoint = "Loose", numberOfBJetsCutValue = 1, numberOfBJetsCutDirection = ">=", # options: ==, !=, <, <=, >, >= ) scaleFactors.setupBtagSFInformation(btagPset=bjetSelection, btagPayloadFilename="CSVv2.csv", #btagEfficiencyFilename="btageff_TTJets.json", #btagEfficiencyFilename="btageff_WJetsHT.json", btagEfficiencyFilename="btageff_hybrid.json", direction="nominal") #====== MET selection metSelection = PSet( METCutValue = 100.0, #for heavy H+, overriden in signalAnalysis.py for light H+ METCutDirection = ">", # options: ==, !=, <, <=, >, >= METSignificanceCutValue = -1000.0, METSignificanceCutDirection = ">", # options: ==, !=, <, <=, >, >= METType = "MET_Type1", # options: MET_Type1, MET_Type1_NoHF, MET_Puppi, GenMET, L1MET, HLTMET, CaloMET applyPhiCorrections = False # FIXME: no effect yet ) # MET trigger SF scaleFactors.assignMETTriggerSF(metSelection, bjetSelection.bjetDiscrWorkingPoint, "nominal")
triggerMatchingCone = 0.1, # DeltaR for matching offline bjet with trigger::TriggerBjet jetPtCuts = [30.0], jetEtaCuts = [2.4], bjetDiscr = "pfCombinedInclusiveSecondaryVertexV2BJetTags", # default # bjetDiscr = "pfCombinedMVAV2BJetTags", # use this for MVA b-tagging bjetDiscrWorkingPoint = "Medium", #optimal for CSVv2 # bjetDiscrWorkingPoint = "Tight", #optimal for CMVAv2 numberOfBJetsCutValue = 1, numberOfBJetsCutDirection = ">=", # options: ==, !=, <, <=, >, >= ) scaleFactors.setupBtagSFInformation(btagPset=bjetSelection, btagPayloadFilename="CSVv2.csv", #btagPayloadFilename="cMVAv2_Moriond17_B_H.csv", # use this for MVA b-tagging #btagEfficiencyFilename="btageff_TTJets.json", #btagEfficiencyFilename="btageff_WJetsHT.json", #btagEfficiencyFilename="btageff_hybrid.json", #btagEfficiencyFilename="btageff_hybrid_HToTB.json", btagEfficiencyFilename="btageff_Hybrid_TT+WJetsHT.json", # use with taunu analysis and WJetsHT samples direction="nominal") #====== MET selection metSelection = PSet( METCutValue = 90.0, METCutDirection = ">", # options: ==, !=, <, <=, >, >= METSignificanceCutValue = -1000.0, METSignificanceCutDirection = ">", # options: ==, !=, <, <=, >, >= METType = "MET_Type1", # options: MET_Type1, MET_Type1_NoHF, MET_Puppi, GenMET, L1MET, HLTMET, CaloMET applyPhiCorrections = False # FIXME: no effect yet ) # MET trigger SF
def __init__(self, selectorName, moduleName, config, **kwargs): self._selectorName = selectorName self._moduleName = moduleName self._config = config.clone() #self.__dict__.update(kwargs) #print kwargs #===== Process all keyword arguments to make changes to the config keys = kwargs.keys() for key in keys: value = kwargs[key] if key == "systematics": self._config.histogramAmbientLevel = "Systematics" # Energy scales if value.startswith("tauES"): self._config.TauSelection.systematicVariation = "_"+value.replace("Plus","down").replace("Minus","up").replace("tauES","TES") elif value.startswith("JES"): self._config.JetSelection.systematicVariation = "_"+value.replace("Plus","down").replace("Minus","up") # Fake tau elif value.startswith("FakeTau"): etaRegion = "full" if "Barrel" in value: etaRegion = "barrel" elif "Endcap" in value: etaRegion = "endcap" partonFakingTau = None if "Electron" in value: partonFakingTau = "eToTau" elif "Muon" in value: partonFakingTau = "muToTau" elif "Jet" in value: partonFakingTau = "jetToTau" scaleFactors.assignTauMisidentificationSF(self._config.TauSelection, partonFakingTau, etaRegion, self._getDirectionString(value)) # Trigger elif value.startswith("TauTrgEff"): variationType = value.replace("TauTrgEff","").replace("Minus","").replace("Plus","") scaleFactors.assignTauTriggerSF(self._config.TauSelection, self._getDirectionString(value), variationType) elif value.startswith("METTrgEff"): variationType = value.replace("METTrgEff","").replace("Minus","").replace("Plus","") scaleFactors.assignMETTriggerSF(self._config.METSelection, self._config.BJetSelection.bjetDiscrWorkingPoint, self._getDirectionString(value), variationType) # b tag SF elif value.startswith("BTagSF") or value.startswith("BMistagSF"): variationType = None if value.startswith("BTagSF"): variationType = "tag" elif value.startswith("BMistagSF"): variationType = "mistag" direction = value.replace("BTagSF","").replace("BMistagSF","").replace("Minus","down").replace("Plus","up") scaleFactors.setupBtagSFInformation(self._config.BJetSelection, btagPayloadFilename="CSVv2.csv", btagEfficiencyFilename="btageff_TTJets.json", direction=direction, variationInfo=variationType) # top quarks elif value.startswith("TopPt"): self._config.topPtSystematicVariation = value.replace("TopPt","").replace("Plus","plus").replace("Minus","minus") else: if value != "nominal": raise Exception("Error: unsupported variation item '%s'!"%value) else: # Process optimization options # First check that key is found in config subkeys = key.split(".") subconfig = [self._config] suffix = "" for i in range(len(subkeys)-1): if not hasattr(subconfig[len(subconfig)-1], subkeys[i]): raise Exception("Error: Cannot find key %s.%s in the config!"%(suffix, subkeys[i])) subconfig.append(getattr(subconfig[len(subconfig)-1], subkeys[i])) if suffix == "": suffix += "%s"%subkeys[i] else: suffix += ".%s"%subkeys[i] # Set value if key.startswith("AngularCuts") and subkeys[len(subkeys)-1] == "workingPoint": from HiggsAnalysis.NtupleAnalysis.parameters.signalAnalysisParameters import setAngularCutsWorkingPoint setAngularCutsWorkingPoint(subconfig[len(subconfig)-1], value) else: if not hasattr(subconfig[len(subconfig)-1], subkeys[len(subkeys)-1]): raise Exception("Error: Cannot find key %s.%s in the config!"%(suffix, subkeys[len(subkeys)-1])) setattr(subconfig[len(subconfig)-1], subkeys[len(subkeys)-1], value)
#================================================================================================ # FakeB Measurement Options #================================================================================================ fakeBBjetSelection = PSet( triggerMatchingApply = bjetSelection.triggerMatchingApply, triggerMatchingCone = bjetSelection.triggerMatchingCone, jetPtCuts = bjetSelection.jetPtCuts, jetEtaCuts = bjetSelection.jetEtaCuts, bjetDiscr = bjetSelection.bjetDiscr, bjetDiscrWorkingPoint = "Loose", # NOTE: Defines VR and CR2 numberOfBJetsCutValue = bjetSelection.numberOfBJetsCutValue, numberOfBJetsCutDirection = bjetSelection.numberOfBJetsCutDirection, ) scaleFactors.setupBtagSFInformation(btagPset = fakeBBjetSelection, btagPayloadFilename = "CSVv2.csv", btagEfficiencyFilename = "btageff_HToTB.json", direction = "nominal") fakeBMeasurement = PSet( # b-jets baselineBJetsCutValue = 2, # [default: 2] baselineBJetsCutDirection = "==", # [default: ==] baselineBJetsDiscr = bjetSelection.bjetDiscr, baselineBJetsDiscrWP = bjetSelection.bjetDiscrWorkingPoint, # Tops LdgTopMVACutValue = topSelectionBDT.TopMVACutValue, LdgTopMVACutDirection = topSelectionBDT.TopMVACutDirection, SubldgTopMVACutValue = topSelectionBDT.TopMVACutValue, SubldgTopMVACutDirection = "<", # [default: "<"] )
# Fat jet selection #================================================================================================= fatjetVeto = hplus2tbAnalysis.fatjetVeto #================================================================================================ # B-jet selection #================================================================================================ bjetSelection = hplus2tbAnalysis.bjetSelection bjetSelection.jetPtCuts = [40.0] bjetSelection.numberOfBJetsCutValue = 1 #================================================================================================ # Scale Factors #================================================================================================ scaleFactors.setupBtagSFInformation(btagPset = bjetSelection, btagPayloadFilename = "CSVv2.csv", btagEfficiencyFilename = "btageff_HToTB.json", direction = "nominal") #================================================================================================= # QGL selection #================================================================================================= #qglrSelection = hplus2tbAnalysis.qglrSelection #jsonReader.setupQGLInformation(QGLRPset = qglrSelection, # jsonname_Light = "QGLdiscriminator_QCD_LightJets.json", # jsonname_Gluon = "QGLdiscriminator_QCD_GluonJets.json") #================================================================================================ # Top selection BDT #================================================================================================ topSelectionBDT = hplus2tbAnalysis.topSelectionBDT
#================================================================================================= fatjetVeto = hplus2tbAnalysis.fatjetVeto #================================================================================================ # B-jet selection #================================================================================================ bjetSelection = hplus2tbAnalysis.bjetSelection bjetSelection.jetPtCuts = [40.0] bjetSelection.numberOfBJetsCutValue = 1 #================================================================================================ # Scale Factors #================================================================================================ scaleFactors.setupBtagSFInformation( btagPset=bjetSelection, btagPayloadFilename="CSVv2.csv", btagEfficiencyFilename="btageff_HToTB.json", direction="nominal") #================================================================================================= # QGL selection #================================================================================================= #qglrSelection = hplus2tbAnalysis.qglrSelection #jsonReader.setupQGLInformation(QGLRPset = qglrSelection, # jsonname_Light = "QGLdiscriminator_QCD_LightJets.json", # jsonname_Gluon = "QGLdiscriminator_QCD_GluonJets.json") #================================================================================================ # Top selection BDT #================================================================================================ topSelectionBDT = hplus2tbAnalysis.topSelectionBDT