def calcMETSig(event, sample): if sample.isData: JER = JERData params = paramsData else: JER = JERMC params = paramsMC ev = Event(event, JER, isData=sample.isData) ev.calcMETSig(params) event.MET_significance_rec = ev.MET_sig event.Jet_dpt = [x for x in ev.Jet_dpt]
def calcMETSig( event, sample ): if sample.isData: JER = JERData params = paramsData else: JER = JERMC params = paramsMC ev = Event(event, JER, isData=sample.isData, METPtVar=METPtVar, METPhiVar=METPhiVar, JetCollection=JetCollection, vetoEtaRegion=vetoEtaRegion, jetThreshold=jetThresh, pTdepMetSig=pTdependent) ev.calcMETSig(params) event.MET_significance_rec = ev.MET_sig event.Jet_dpt = [ x*ev.Jet_pt[i] for i,x in enumerate(ev.Jet_dpt) ] if len(ev.Jet_dpt) > 0 else [0]
def calcMETSig( event, sample ): if sample.isData: JER = JERData params = paramsData else: JER = JERMC params = paramsMC if year == 2017: METPtVar = "METFixEE2017_pt" METPhiVar = "METFixEE2017_phi" elif year == 2018: METPtVar = "MET_pt_nom" METPhiVar = "MET_phi" else: METPtVar = "MET_pt" METPhiVar = "MET_phi" if year == 2018: JetCollection = "Jet_pt_nom" else: JetCollection = "Jet_pt" ev = Event(event, JER, isData=sample.isData, METPtVar=METPtVar, METPhiVar=METPhiVar, JetCollection=JetCollection, vetoEtaRegion=vetoEtaRegion, jetThreshold=jetThreshold) ev.calcMETSig(params) event.MET_significance_rec = ev.MET_sig event.Jet_dpt = [ x for x in ev.Jet_dpt ]
def __init__(self, samples, selection, jetResolution, outfile="results/tune", METPtVar="MET_pt", METPhiVar="MET_phi", JetCollection="Jet_pt", maxN=1e6, vetoEtaRegion=(10, 10), jetThreshold=15., puWeight="puWeight", ttbarModifier=1, pTdepMetSig=True, nvtxHist=None): # Need fill a list in order to do the minimization, reading from the tree is too slow self.eventlist = [] if samples[0].isData: self.variables = map(TreeVariable.fromString, [ "nJet/I", "fixedGridRhoFastjetAll/F", "%s/F" % METPtVar, "%s/F" % METPhiVar, "MET_sumPtUnclustered/F" ]) else: self.variables = map(TreeVariable.fromString, [ "weight/F", "puWeight/F", "puWeightUp/F", "puWeightDown/F", "nJet/I", "fixedGridRhoFastjetAll/F", "PV_npvsGood/I", "%s/F" % METPtVar, "%s/F" % METPhiVar, "MET_sumPtUnclustered/F" ]) self.variables += [ VectorTreeVariable.fromString( "Jet[pt/F,eta/F,phi/F,cleanmask/O,jetId/I,cleanmaskMETSig/I,cleanmaskMETSigRec/I]" ) ] if JetCollection == "Jet_pt_nom": self.variables += [VectorTreeVariable.fromString("Jet[pt_nom/F]")] elif JetCollection == "Jet_pt_jerUp": self.variables += [ VectorTreeVariable.fromString("Jet[pt_jerUp/F]") ] self.outfile = os.path.abspath(outfile) self.outdir = os.path.dirname(self.outfile) if not os.path.isdir(self.outdir): os.makedirs(self.outdir) self.pTdepMetSig = pTdepMetSig self.paramRange = 12 if self.pTdepMetSig else 7 self.variableNames = ["a%i" % i for i in range(self.paramRange - 2) ] + ["u1", "u2"] self.defaultStep = [0.05] * self.paramRange self.defaultStart = [1.5] * (self.paramRange - 2) + [0., .5] for s in samples: logger.info("Now working on sample: %s" % s.name) s.setSelectionString(selection) logger.info("Getting number of events") nEvents = s.getYieldFromDraw(selectionString="(1)", weightString="(1)") logger.info("Running over %s events for sample %s." % (nEvents["val"], s.name)) nEvents = nEvents["val"] if nEvents > maxN: weightModifier = nEvents / float(maxN) fracToKeep = float(maxN) / nEvents logger.info( "Preliminary factor for modifying the event weight: %s" % weightModifier) else: weightModifier = 1 fracToKeep = 1 if "top" in s.name.lower(): weightModifier *= ttbarModifier logger.info("Filling the eventlist") reader = s.treeReader(variables=self.variables) reader.start() i = 0 tmp_eventlist = [] while reader.run(): i += 1 nvtxWeight = 1 if random.random() < fracToKeep: if nvtxHist: nvtxWeight = getNVtxWeight(nvtxHist, reader.event.PV_npvsGood) tmp_eventlist += [ Event(reader.event, jetResolution, weightModifier=weightModifier * nvtxWeight, isData=s.isData, METPtVar=METPtVar, METPhiVar=METPhiVar, JetCollection=JetCollection, vetoEtaRegion=vetoEtaRegion, jetThreshold=jetThreshold, puWeight=puWeight, pTdepMetSig=self.pTdepMetSig) ] update_progress(i / nEvents) self.eventlist += tmp_eventlist