File indexing completed on 2024-04-06 12:23:27
0001 from PhysicsTools.Heppy.analyzers.core.Analyzer import Analyzer
0002 from PhysicsTools.HeppyCore.utils.deltar import deltaR
0003
0004 class GenHeavyFlavourAnalyzer( Analyzer ):
0005 """
0006 Makes:
0007 event.genallbquarks, event.genallcquarks:
0008 list of all b and c quarks (without doublecounting of b->b and c->c chains).
0009 if status2Only == True, only status 2 ones are included.
0010 event.allBPartons
0011 all status 2 b-quarks, sorted by pt decreasingly
0012 event.bPartons:
0013 status 2 b-quarks passing a pt cut bquarkPtCut (default: 15)
0014
0015 Requires:
0016 event.genParticles
0017 """
0018
0019 def __init__(self, cfg_ana, cfg_comp, looperName ):
0020 super(GenHeavyFlavourAnalyzer,self).__init__(cfg_ana,cfg_comp,looperName)
0021 self.status2Only = cfg_ana.status2Only
0022 self.bquarkPtCut = cfg_ana.bquarkPtCut
0023
0024 def declareHandles(self):
0025 super(GenHeavyFlavourAnalyzer, self).declareHandles()
0026
0027 def beginLoop(self,setup):
0028 super(GenHeavyFlavourAnalyzer,self).beginLoop(setup)
0029
0030 def makeBPartons(self,event):
0031 event.allBPartons = [ q for q in event.genParticles if abs(q.pdgId()) == 5 and abs(q.status()) == 2 and abs(q.pt()) > self.bquarkPtCut ]
0032 event.allBPartons.sort(key = lambda q : q.pt(), reverse = True)
0033 event.bPartons = []
0034 for q in event.allBPartons:
0035 duplicate = False
0036 for q2 in event.bPartons:
0037 if deltaR(q.eta(),q.phi(),q2.eta(),q2.phi()) < 0.5:
0038 duplicate = True
0039 continue
0040 if not duplicate: event.bPartons.append(q)
0041
0042 def process(self, event):
0043 self.readCollections( event.input )
0044
0045
0046 if not self.cfg_comp.isMC:
0047 return True
0048
0049 status2f = (lambda p : p.status() == 2) if self.status2Only else (lambda p : True)
0050 event.genallcquarks = [ p for p in event.genParticles if abs(p.pdgId()) == 5 and ( p.numberOfDaughters() == 0 or abs(p.daughter(0).pdgId()) != 5) and status2f(p) ]
0051 event.genallbquarks = [ p for p in event.genParticles if abs(p.pdgId()) == 4 and ( p.numberOfDaughters() == 0 or abs(p.daughter(0).pdgId()) != 4) and status2f(p) ]
0052
0053 self.makeBPartons(event)
0054
0055 return True
0056
0057 import PhysicsTools.HeppyCore.framework.config as cfg
0058 setattr(GenHeavyFlavourAnalyzer,"defaultConfig",
0059 cfg.Analyzer(GenHeavyFlavourAnalyzer,
0060 status2Only = False,
0061 bquarkPtCut = 15.0,
0062 )
0063 )