Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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))
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
def getEventInfo(row, *args):
    return {"run": evVar(row, "run"), "event": evVar(row, "evt"), "lumi": evVar(row, "lumi")}
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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])
Ejemplo n.º 11
0
    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!"