示例#1
0
 def analyze(self, event):
     """process event, return True (go to next module) or False (fail, go to next event)"""
     HLT = Object(event, "HLT")
     run = Object(event, "run")
     if self.year == '2016' and self.runP != 'H':
         if run.__getattr__('') > 274954:
             good_HLT = HLT.PFHT800 or HLT.PFHT900 or HLT.Mu50 or HLT.TkMu50 or HLT.Ele115_CaloIdVT_GsfTrkIdT or HLT.Photon175 or HLT.Ele27_WPTight_Gsf
     return good_HLT
示例#2
0
 def analyze(self, event):
     """process event, return True (go to next module) or False (fail, go to next event)"""
     HLT = Object(event, "HLT")
     run = Object(event, "run")
     if self.year == '2016' and self.runP != 'H':
         if run.__getattr__('') > 274954:
             good_HLT = HLT.PFHT800 or HLT.PFHT900 or HLT.Mu50 or HLT.TkMu50 or HLT.Ele115_CaloIdVT_GsfTrkIdT or HLT.Photon175 or HLT.Ele27_WPTight_Gsf
         else:
             good_HLT = HLT.PFHT800 or HLT.PFHT900 or HLT.Mu50 or HLT.Ele115_CaloIdVT_GsfTrkIdT or HLT.Photon175 or HLT.Ele27_WPTight_Gsf
     elif self.year == '2016' and self.runP == 'H':
         good_HLT = HLT.PFHT900 or HLT.Mu50 or HLT.TkMu50 or HLT.Ele115_CaloIdVT_GsfTrkIdT or HLT.Photon175 or HLT.Ele27_WPTight_Gsf
     elif self.year == '2017' and self.runP != 'B':
         good_HLT = HLT.PFHT780 or HLT.PFHT890 or HLT.Mu50 or HLT.OldMu100 or HLT.TkMu100 or HLT.Ele115_CaloIdVT_GsfTrkIdT or HLT.Photon200 or HLT.Ele35_WPTight_Gsf
     elif self.year == '2017' and self.runP == 'B':
         good_HLT = HLT.PFHT780 or HLT.PFHT890 or HLT.Mu50 or HLT.Ele35_WPTight_Gsf
     elif self.year == '2018':
         good_HLT = HLT.PFHT780 or HLT.PFHT890 or HLT.Mu50 or HLT.OldMu100 or HLT.TkMu100 or HLT.Ele115_CaloIdVT_GsfTrkIdT or HLT.Photon200 or HLT.Ele35_WPTight_Gsf
     else:
         print "Please specify the year: possible choices are 2016, 2017 or 2018"
     return good_HLT
示例#3
0
 def __getattr__(self, attr):
     if self.replaceMap and attr in self.replaceMap:
         return Object.__getattr__(self, self.replaceMap[attr])
     else:
         return Object.__getattr__(self, attr)
    def analyze(self, event):
        """process event, return True (go to next module) or False (fail, go to next event)"""
        objs = Collection(event, self.collectionName)

        #print 'Length of objs %s: %s'%(self.collectionName,len(objs))

        eventSelW = 1.0
        eventVetoW = 1.0
        eventSelW_err = [1.0] * 2 * len(self.SFerr)
        eventVetoW_err = [1.0] * 2 * len(self.SFerr)

        cleanObjs_idx = []
        cleanObjs_pt = []
        cleanObjs_eta = []
        cleanObjs_phi = []
        cleanObjs_mass = []

        objIdx = 0
        #brojac = -1
        for obj in objs:
            # brojac=brojac+1
            if not (eval(self.selection)):
                #print ' ---- Loop: obj idx %d failed'%objIdx
                objIdx += 1
                #print " Jet ", str(brojac)," fails the Obj selection -- no crossCleaning"
                continue
            #print ' ---- Loop: obj idx %d passed'%objIdx

        #crossCleaning
            xCleaned = True
            if len(self.xcleaningCollectionNames) > 0:
                #print "Cleaning of Jet ", str(brojac)
                for xCleaningName in self.xcleaningCollectionNames:
                    if not xCleaned:
                        break
                    xCleaningCollection = Collection(event, xCleaningName)
                    #print "Cleaning of "+self.collectionName+" against "+xCleaningName, "size = ", len(xCleaningCollection)
                    for xCleaningObj in xCleaningCollection:
                        xCleaned = CrossCleaning(obj.eta, obj.phi,
                                                 xCleaningObj.eta,
                                                 xCleaningObj.phi,
                                                 xCleaningName)
                        if not xCleaned:
                            #print "Object should fail"
                            break
            if not xCleaned:
                continue

#print "Object is clean"
            cleanObjs_idx.append(objIdx)
            cleanObjs_pt.append(obj.pt)
            cleanObjs_eta.append(obj.eta)
            cleanObjs_phi.append(obj.phi)
            cleanObjs_mass.append(obj.mass)

            #get scale factors
            if (self.doW):
                #for w in SFweights:
                #print ' ------ loop weight value: %3.3f'%w.effSF_Loose
                werr = [1.0] * 2 * len(self.SFerr)
                if (self.SFnamePrefix is not None):
                    ret = Object(event, self.collectionName, index=objIdx)
                    #wobj = obj[objIdx].effSF_Loose
                    wobj = ret.__getattr__(self.SFname)
                    for i in range(len(self.SFerr)):
                        if ("syst" not in self.SFerr[i]):
                            werr[2 * i] = ret.__getattr__(self.SFname +
                                                          "_up") - wobj
                            werr[2 * i + 1] = ret.__getattr__(self.SFname +
                                                              "_down") - wobj
                        else:
                            werr[2 * i] = ret.__getattr__(self.SFname +
                                                          self.SFerr[i])
                            werr[2 * i +
                                 1] = -1. * ret.__getattr__(self.SFname +
                                                            self.SFerr[i])
                else:
                    #werr = [1.0]*2
                    wobj = self.SFval[0]
                    if (len(self.SFerr) > 0):
                        werr[0] = self.SFval[1]
                        werr[1] = -1. * self.SFval[1]

                #print ' ------ loop weight value: %3.3f'%wobj
                eventSelW *= wobj
                eventVetoW *= (1 - wobj)

                for i in range(len(eventSelW_err)):
                    eventSelW_err[i] *= (wobj + werr[i])
                    eventVetoW_err[i] *= (1 - (wobj + werr[i]))

            objIdx += 1

        self.out.fillBranch(self.outCollectionName + "_idx", cleanObjs_idx)
        self.out.fillBranch(self.outCollectionName + "_pt", cleanObjs_pt)
        self.out.fillBranch(self.outCollectionName + "_eta", cleanObjs_eta)
        self.out.fillBranch(self.outCollectionName + "_phi", cleanObjs_phi)
        self.out.fillBranch(self.outCollectionName + "_mass", cleanObjs_mass)
        if (self.doW):
            self.out.fillBranch(self.outCollectionName + "_eventSelW",
                                eventSelW)
            self.out.fillBranch(self.outCollectionName + "_eventVetoW",
                                eventVetoW)
            for i in range(len(self.SFerr)):
                self.out.fillBranch(
                    self.outCollectionName + "_eventSelW" + self.SFerr[i] +
                    "_up", eventSelW_err[2 * i])
                self.out.fillBranch(
                    self.outCollectionName + "_eventVetoW" + self.SFerr[i] +
                    "_up", eventVetoW_err[2 * i])
                self.out.fillBranch(
                    self.outCollectionName + "_eventSelW" + self.SFerr[i] +
                    "_down", eventSelW_err[2 * i + 1])
                self.out.fillBranch(
                    self.outCollectionName + "_eventVetoW" + self.SFerr[i] +
                    "_down", eventVetoW_err[2 * i + 1])

        return True