2 from PhysicsTools.HeppyCore.framework.analyzer
import Analyzer
3 from PhysicsTools.Heppy.physicsobjects.Particle
import Particle
8 mass = {23: 91., 25: 125.}
11 '''Resonance decaying into 2 particles. 13 The interface of this class mimics the interface of the CMS Candidate class. 14 In this way Resonance objects or CMS Candidate objects can be processed 18 def __init__(self, leg1, leg2, pdgid, status=3):
20 Parameters (stored as attributes): 21 leg1,2 : first and second leg. 22 pdgid : pdg code of the resonance 23 status : status code of the resonance 27 self.
_p4 = leg1.p4() + leg2.p4()
28 self.
_charge = leg1.charge() + leg2.charge()
39 return self._p4.energy()
48 return self._p4.mass()
58 '''Builds resonances from an input collection of particles. 60 Example configuration: 62 from PhysicsTools.Heppy.analyzers.examples.ResonanceBuilder import ResonanceBuilder 63 dimuons = cfg.Analyzer( 66 leg_collection = 'muons', # input collection 67 filter_func = lambda x : True, # filtering function for input objects. here, take all. 68 pdgid = 23 # pdgid for the resonances, here Z 71 This analyzer puts one collection in the event: 72 event.dimuons : all resonances, sorted by their distance to the nominal mass 73 corresponding to the specified pdgid 76 legs = getattr(event, self.cfg_ana.leg_collection)
77 legs = [leg
for leg
in legs
if self.cfg_ana.filter_func(leg)]
79 for leg1, leg2
in itertools.combinations(legs,2):
80 resonances.append(
Resonance(leg1, leg2, self.cfg_ana.pdgid, 3) )
82 nominal_mass = mass[self.cfg_ana.pdgid]
83 resonances.sort(key=
lambda x:
abs(x.mass()-nominal_mass))
84 setattr(event, self.instance_label, resonances)
Abs< T >::type abs(const T &t)
def __init__(self, leg1, leg2, pdgid, status=3)