File indexing completed on 2024-04-06 12:23:27
0001 from builtins import range
0002 from PhysicsTools.Heppy.analyzers.core.Analyzer import Analyzer
0003 from PhysicsTools.Heppy.analyzers.core.AutoHandle import AutoHandle
0004 import PhysicsTools.HeppyCore.framework.config as cfg
0005 from math import *
0006 from DataFormats.FWLite import Events, Handle
0007
0008 class LHEAnalyzer( Analyzer ):
0009 """ """
0010 def __init__(self, cfg_ana, cfg_comp, looperName ):
0011 super(LHEAnalyzer,self).__init__(cfg_ana,cfg_comp,looperName)
0012 self.lheh=Handle('LHEEventProduct')
0013
0014 def declareHandles(self):
0015 super(LHEAnalyzer, self).declareHandles()
0016
0017
0018 def beginLoop(self, setup):
0019 super(LHEAnalyzer,self).beginLoop(setup)
0020
0021 def process(self, event):
0022
0023
0024 if not self.cfg_comp.isMC:
0025 return True
0026 event.lheHT=0
0027 event.lheHTIncoming=0
0028 event.lheNj=0
0029 event.lheNb=0
0030 event.lheNc=0
0031 event.lheNl=0
0032 event.lheNg=0
0033 event.lheV_pt = 0
0034 try:
0035 event.input.getByLabel( 'externalLHEProducer',self.lheh)
0036 except :
0037 return True
0038 if not self.lheh.isValid() :
0039 return True
0040 self.readCollections( event.input )
0041 hepeup=self.lheh.product().hepeup()
0042 pup=hepeup.PUP
0043 l=None
0044 lBar=None
0045 nu=None
0046 nuBar=None
0047 for i in range(0,len(pup)):
0048 id=hepeup.IDUP[i]
0049 status = hepeup.ISTUP[i]
0050 idabs=abs(id)
0051
0052 mothIdx = max(hepeup.MOTHUP[i][0]-1,0)
0053 mothIdxTwo = max(hepeup.MOTHUP[i][1]-1,0)
0054
0055 mothStatus = hepeup.ISTUP[mothIdx]
0056 mothStatusTwo = hepeup.ISTUP[mothIdxTwo]
0057
0058 hasIncomingAsMother = mothStatus<0 or mothStatusTwo<0
0059
0060 if status == 1 and ( ( idabs == 21 ) or (idabs > 0 and idabs < 7) ) :
0061 pt = sqrt( pup[i][0]**2 + pup[i][1]**2 )
0062 event.lheHT += pt
0063 if hasIncomingAsMother: event.lheHTIncoming += pt
0064 event.lheNj +=1
0065 if idabs==5:
0066 event.lheNb += 1
0067 if idabs==4:
0068 event.lheNc += 1
0069 if idabs in [1,2,3]:
0070 event.lheNl += 1
0071 if idabs==21:
0072 event.lheNg += 1
0073 if idabs in [12,14,16] :
0074 if id > 0 :
0075 nu = i
0076 else :
0077 nuBar = i
0078 if idabs in [11,13,15] :
0079 if id > 0 :
0080 l = i
0081 else :
0082 lBar = i
0083 v=None
0084 if l and lBar :
0085 v=(l,lBar)
0086 elif l and nuBar :
0087 v=(l,nuBar)
0088 elif lBar and nu :
0089 v=(nu,lBar)
0090 elif nu and nuBar :
0091 v=(nu,nuBar)
0092 if v :
0093 event.lheV_pt = sqrt( (pup[v[0]][0]+pup[v[1]][0])**2 + (pup[v[0]][1]+pup[v[1]][1])**2 )
0094
0095 return True
0096
0097 setattr(LHEAnalyzer,"defaultConfig",
0098 cfg.Analyzer(LHEAnalyzer,
0099 )
0100 )