CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
GenHeavyFlavourAnalyzer.py
Go to the documentation of this file.
1 from PhysicsTools.Heppy.analyzers.core.Analyzer import Analyzer
3 
4 class GenHeavyFlavourAnalyzer( Analyzer ):
5  """
6  Makes:
7  event.genallbquarks, event.genallcquarks:
8  list of all b and c quarks (without doublecounting of b->b and c->c chains).
9  if status2Only == True, only status 2 ones are included.
10  event.allBPartons
11  all status 2 b-quarks, sorted by pt decreasingly
12  event.bPartons:
13  status 2 b-quarks passing a pt cut bquarkPtCut (default: 15)
14 
15  Requires:
16  event.genParticles
17  """
18 
19  def __init__(self, cfg_ana, cfg_comp, looperName ):
20  super(GenHeavyFlavourAnalyzer,self).__init__(cfg_ana,cfg_comp,looperName)
21  self.status2Only = cfg_ana.status2Only
22  self.bquarkPtCut = cfg_ana.bquarkPtCut
23 
24  def declareHandles(self):
25  super(GenHeavyFlavourAnalyzer, self).declareHandles()
26 
27  def beginLoop(self,setup):
28  super(GenHeavyFlavourAnalyzer,self).beginLoop(setup)
29 
30  def makeBPartons(self,event):
31  event.allBPartons = [ q for q in event.genParticles if abs(q.pdgId()) == 5 and abs(q.status()) == 2 and abs(q.pt()) > self.bquarkPtCut ]
32  event.allBPartons.sort(key = lambda q : q.pt(), reverse = True)
33  event.bPartons = []
34  for q in event.allBPartons:
35  duplicate = False
36  for q2 in event.bPartons:
37  if deltaR(q.eta(),q.phi(),q2.eta(),q2.phi()) < 0.5:
38  duplicate = True
39  continue
40  if not duplicate: event.bPartons.append(q)
41 
42  def process(self, event):
43  self.readCollections( event.input )
44 
45  # if not MC, nothing to do
46  if not self.cfg_comp.isMC:
47  return True
48 
49  status2f = (lambda p : p.status() == 2) if self.status2Only else (lambda p : True)
50  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) ]
51  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) ]
52 
53  self.makeBPartons(event)
54 
55  return True
56 
58 setattr(GenHeavyFlavourAnalyzer,"defaultConfig",
59  cfg.Analyzer(GenHeavyFlavourAnalyzer,
60  status2Only = False,
61  bquarkPtCut = 15.0,
62  )
63 )
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17