def getCandInfo(row, *objects): numbers = {} numbers["run"] = row.run numbers["lumi"] = row.lumi numbers["event"] = row.evt numbers["m4l"] = evVar(row, "Mass") numbers["mZ1"] = nObjVar(row, "Mass", objects[0], objects[1]) numbers["mZ2"] = nObjVar(row, "Mass", objects[2], objects[3]) # eemm channel may have masses swapped if zMassDist(numbers["mZ1"]) > zMassDist(numbers["mZ2"]): temp = numbers["mZ2"] numbers["mZ2"] = numbers["mZ1"] numbers["mZ1"] = temp numbers["nJets"] = evVar(row, "nJets") if numbers["nJets"] > 0: numbers["jet1pt"] = evVar(row, "jetPt").at(0) if numbers["nJets"] > 1: numbers["jet2pt"] = evVar(row, "jetPt").at(1) else: numbers["jet2pt"] = 0 else: numbers["jet1pt"] = 0 numbers["jet2pt"] = 0 numbers["mjj"] = max(0, evVar(row, "mjj")) return numbers
def passCut(self, row, channel, cut): ''' Regular passCut function, but if this is an interesting event and the last cut, say it passed. ''' if cut == 'SelectBest': # Have to get ID again because best cand selection is run separately afterwards rowID = (evVar(row, 'run'), evVar(row, 'lumi'), evVar(row, 'evt')) if rowID in self.interesting: self.interesting[rowID] = 999 super(SyncAnalyzer, self).passCut(row, channel, cut)
def getCandInfo(z1Var, z2Var, row): run = evVar(row, 'run') evt = evVar(row, 'evt') lumi = evVar(row, 'lumi') mass = evVar(row, 'MassFSR') mZ1 = evVar(row, z1Var) mZ2 = evVar(row, z2Var) kd = evVar(row, 'D_bkg_kin') nJets = evVar(row, 'nJets') j1pt = max(-1.,evVar(row, 'jet1Pt')) j2pt = max(-1.,evVar(row, 'jet2Pt')) return ("%d:%d:%d:%.2f:%.2f:%.2f:%.3f:%d:%.2f:%.2f\n"%(run, lumi, evt, mass, mZ1, mZ2, kd, nJets, j1pt, j2pt))
def getCandInfo(z1Var, z2Var, row): run = evVar(row, "run") evt = evVar(row, "evt") lumi = evVar(row, "lumi") mass = evVar(row, "MassFSR") mZ1 = evVar(row, z1Var) mZ2 = evVar(row, z2Var) kd = evVar(row, "D_bkg_kin") nJets = evVar(row, "nJets") j1pt = max(-1.0, evVar(row, "jet1Pt")) j2pt = max(-1.0, evVar(row, "jet2Pt")) return "%d:%d:%d:%.2f:%.2f:%.2f:%.3f:%d:%.2f:%.2f\n" % (run, lumi, evt, mass, mZ1, mZ2, kd, nJets, j1pt, j2pt)
def storeVars(self, row, objects, cuts): ''' Need d_bkg^kin and Z1 distance from nominal mass. ''' self.dbk = row.D_bkg_kin #row.D_sel_kin self.dZ = zCompatibility(row, objects[0], objects[1], cuts.fsrVar) self.m4l = evVar(row, 'Mass'+cuts.fsrVar)
def preCut(self, row, channel, cut): ''' Regular preCut function, but updates the interesting event info for relevant events. ''' if cut == self.cutOrder[0]: self.currentRowInfo = (evVar(row, 'run'), evVar(row, 'lumi'), evVar(row, 'evt')) if self.currentRowInfo in self.interesting and self.interesting[self.currentRowInfo] == -999: self.interesting[self.currentRowInfo] = 0 self.interestingChannels[self.currentRowInfo].add(channel) if self.currentRowInfo in self.interesting and self.interesting[self.currentRowInfo] < len(self.cutOrder) - 1: # We only care if this is the cut after the furthest cut yet achieved if self.cutOrder[self.interesting[self.currentRowInfo]+1] == cut: self.interesting[self.currentRowInfo] += 1 super(SyncAnalyzer, self).preCut(row, channel, cut)
def getCandInfo3l(row, *objects): numbers = {} numbers["run"] = row.run numbers["lumi"] = row.lumi numbers["event"] = row.evt numbers["m3l"] = evVar(row, "Mass") numbers["mZ"] = nObjVar(row, "Mass", objects[0], objects[1]) numbers["ptL3"] = objVar(row, "Pt", objects[2]) numbers["l3Tight"] = 1 if objVar(row, "ZZTightID", objects[2]) and objVar(row, "ZZIsoPass", objects[2]) else 0 return numbers
def getEventInfo(row, *args): return {"run": evVar(row, "run"), "event": evVar(row, "evt"), "lumi": evVar(row, "lumi")}
def getCandInfo(zMassVar, row, *objects): numbers = {} numbers['run'] = row.run numbers['lumi'] = row.lumi numbers['event'] = row.evt numbers['mass4l'] = evVar(row, 'MassFSR') numbers['mZ1'] = nObjVar(row, zMassVar, objects[0], objects[1]) numbers['mZ2'] = nObjVar(row, zMassVar, objects[2], objects[3]) # eemm channel may have masses swapped if zMassDist(numbers['mZ1']) > zMassDist(numbers['mZ2']): temp = numbers['mZ2'] numbers['mZ2'] = numbers['mZ1'] numbers['mZ1'] = temp numbers['D_bkg^kin'] = evVar(row, 'D_bkg_kin') numbers['D_bkg'] = evVar(row, 'D_bkg') numbers['D_gg'] = evVar(row, 'D_gg') numbers['Dkin_HJJ^VBF'] = evVar(row, 'D_VBF2j') numbers['D_0-'] = evVar(row, 'D_g4') numbers['Dkin_HJ^VBF-1'] = evVar(row, 'D_VBF1j') numbers['Dkin_HJJ^WH-h'] = evVar(row, 'D_WHh') numbers['Dkin_HJJ^ZH-h'] = evVar(row, 'D_ZHh') numbers['njets30'] = evVar(row, 'nJets') numbers['jet1pt'] = max(-1.,evVar(row, 'jet1Pt')) numbers['jet2pt'] = max(-1.,evVar(row, 'jet2Pt')) numbers['jet1qgl'] = evVar(row, 'jet1QGLikelihood') numbers['jet2qgl'] = evVar(row, 'jet2QGLikelihood') numbers['Dfull_HJJ^VBF'] = evVar(row, 'D_VBF2j_QG') numbers['Dfull_HJ^VBF-1'] = evVar(row, 'D_VBF1j_QG') numbers['Dfull_HJJ^WH-h'] = evVar(row, 'D_WHh_QG') numbers['Dfull_HJJ^ZH-h'] = evVar(row, 'D_ZHh_QG') numbers['category'] = evVar(row, "ZZCategory") # numbers['m4lRefit'] = evVar(row, 'MassRefit') # numbers['m4lRefitError'] = evVar(row, 'MassRefitError') if not args.data: numbers['weight'] = evVar(row, 'genWeight') numbers['weight'] /= abs(numbers['weight']) for ob in objects: numbers['weight'] *= objVar(row, 'EffScaleFactor', ob) outTemp = ('{run}:{lumi}:{event}:{mass4l:.2f}:{mZ1:.2f}:{mZ2:.2f}:{D_bkg^kin:' '.3f}:{D_bkg:.3f}:{D_gg:.3f}:{Dkin_HJJ^VBF:.3f}:{D_0-:.3f}:' '{Dkin_HJ^VBF-1:.3f}:{Dkin_HJJ^WH-h:.3f}:{Dkin_HJJ^ZH-h:.3f}:' '{njets30:d}:{jet1pt:.2f}:{jet2pt:.2f}:{jet1qgl:.3f}:{jet2qgl:.3f}:' '{Dfull_HJJ^VBF:.3f}:{Dfull_HJ^VBF-1:.3f}:{Dfull_HJJ^WH-h:.3f}:' '{Dfull_HJJ^ZH-h:.3f}:{category}') #:{m4lRefit:.2f}:{m4lRefitError:.2f}:' if not args.data: outTemp += ':{weight:.3f}' return outTemp.format(**numbers)
def getEventInfo(row): run = evVar(row, 'run') evt = evVar(row, 'evt') lumi = evVar(row, 'lumi') return ':'.join(str(n) for n in [run,lumi,evt])
channels = args.channels.split(',') inFile = args.input[0] with root_open(inFile) as fin: with open(args.output, 'w') as fout: for channel in channels: print "\nChannel %s:"%channel ntuple = fin.Get(channel+'/ntuple') objects = getObjects(channel) evtLeps = LeptonCollection(-1,-1,-1) for n, row in enumerate(ntuple): if n % 500 == 0: print "Processing row %d"%n evt = evVar(row, 'evt') lumi = evVar(row, 'lumi') run = evVar(row, 'run') if evt != evtLeps.evt or lumi != evtLeps.lumi or run != evtLeps.run: evtLeps.writeAll(fout) evtLeps = LeptonCollection(run, lumi, evt) for lep in objects: evtLeps.addLepton(lep, row) # Make sure the last row gets written evtLeps.writeAll(fout) print "Done!"