CMS 3D CMS Logo

TriggerMatchAnalyzer.py
Go to the documentation of this file.
1 from __future__ import print_function
2 import ROOT
3 
4 from PhysicsTools.Heppy.analyzers.core.Analyzer import Analyzer
5 from PhysicsTools.Heppy.analyzers.core.AutoHandle import AutoHandle
6 from PhysicsTools.Heppy.analyzers.core.AutoFillTreeProducer import NTupleVariable
7 from PhysicsTools.HeppyCore.utils.deltar import matchObjectCollection, matchObjectCollection3
8 import PhysicsTools.HeppyCore.framework.config as cfg
9 
11  def __init__(self, cfg_ana, cfg_comp, looperName ):
12  super(TriggerMatchAnalyzer,self).__init__(cfg_ana,cfg_comp,looperName)
13  self.processName = getattr(self.cfg_ana,"processName","PAT")
14  self.fallbackName = getattr(self.cfg_ana,"fallbackProcessName","RECO")
15  self.unpackPathNames = getattr(self.cfg_ana,"unpackPathNames",True)
16  self.label = self.cfg_ana.label
17  self.trgObjSelectors = []
18  self.trgObjSelectors.extend(getattr(self.cfg_ana,"trgObjSelectors",[]))
19  self.collToMatch = getattr(self.cfg_ana,"collToMatch",None)
20  self.collMatchSelectors = []
21  self.collMatchSelectors.extend(getattr(self.cfg_ana,"collMatchSelectors",[]))
22  self.collMatchDRCut = getattr(self.cfg_ana,"collMatchDRCut",0.3)
23  if self.collToMatch and not hasattr(self.cfg_ana,"univoqueMatching"): raise RuntimeError("Please specify if the matching to trigger objects should be 1-to-1 or 1-to-many")
24  self.match1To1 = getattr(self.cfg_ana,"univoqueMatching",True)
25 
26  def declareHandles(self):
27  super(TriggerMatchAnalyzer, self).declareHandles()
28  self.handles['TriggerBits'] = AutoHandle( ('TriggerResults','','HLT'), 'edm::TriggerResults' )
29  fallback = ( 'selectedPatTrigger','', self.fallbackName) if self.fallbackName else None
30  self.handles['TriggerObjects'] = AutoHandle( ('selectedPatTrigger','',self.processName), 'std::vector<pat::TriggerObjectStandAlone>', fallbackLabel=fallback )
31 
32  def beginLoop(self, setup):
33  super(TriggerMatchAnalyzer,self).beginLoop(setup)
34 
35  def process(self, event):
36  self.readCollections( event.input )
37  triggerBits = self.handles['TriggerBits'].product()
38  allTriggerObjects = self.handles['TriggerObjects'].product()
39  names = event.input.object().triggerNames(triggerBits)
40  for ob in allTriggerObjects: ob.unpackPathNames(names)
41  triggerObjects = [ob for ob in allTriggerObjects if False not in [sel(ob) for sel in self.trgObjSelectors]]
42 
43  setattr(event,'trgObjects_'+self.label,triggerObjects)
44 
45  if self.collToMatch:
46  tcoll = getattr(event,self.collToMatch)
47  doubleandselector = lambda lep,ob: False if False in [sel(lep,ob) for sel in self.collMatchSelectors] else True
48  pairs = matchObjectCollection3(tcoll,triggerObjects,deltaRMax=self.collMatchDRCut,filter=doubleandselector) if self.match1To1 else matchObjectCollection(tcoll,triggerObjects,self.collMatchDRCut,filter=doubleandselector)
49  for lep in tcoll: setattr(lep,'matchedTrgObj'+self.label,pairs[lep])
50 
51  if self.verbose:
52  print('Verbose debug for triggerMatchAnalyzer %s'%self.label)
53  for ob in getattr(event,'trgObjects_'+self.label):
54  types = ", ".join([str(f) for f in ob.filterIds()])
55  filters = ", ".join([str(f) for f in ob.filterLabels()])
56  paths = ", ".join([("%s***" if f in set(ob.pathNames(True)) else "%s")%f for f in ob.pathNames()]) # asterisks indicate final paths fired by this object, see pat::TriggerObjectStandAlone class
57  print('Trigger object: pt=%.2f, eta=%.2f, phi=%.2f, collection=%s, type_ids=%s, filters=%s, paths=%s'%(ob.pt(),ob.eta(),ob.phi(),ob.collection(),types,filters,paths))
58  if self.collToMatch:
59  for lep in tcoll:
60  mstring = 'None'
61  ob = getattr(lep,'matchedTrgObj'+self.label)
62  if ob: mstring = 'trigger obj with pt=%.2f, eta=%.2f, phi=%.2f, collection=%s'%(ob.pt(),ob.eta(),ob.phi(),ob.collection())
63  print('Lepton pt=%.2f, eta=%.2f, phi=%.2f matched to %s'%(lep.pt(),lep.eta(),lep.phi(),mstring))
64 
65  return True
66 
67 
68 setattr(TriggerMatchAnalyzer,"defaultConfig",cfg.Analyzer(
69  TriggerMatchAnalyzer, name="TriggerMatchAnalyzerDefault",
70  label='DefaultTrigObjSelection',
71  processName = 'PAT',
72  fallbackProcessName = 'RECO',
73  unpackPathNames = True,
74  trgObjSelectors = [],
75  collToMatch = None,
76  collMatchSelectors = [],
77  collMatchDRCut = 0.3,
78  univoqueMatching = True,
79  verbose = False
80 )
81 )
82 
83 
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.match1To1
match1To1
Definition: TriggerMatchAnalyzer.py:24
deltar.matchObjectCollection
def matchObjectCollection(objects, matchCollection, deltaR2Max, filter=lambda x, True y)
Definition: deltar.py:151
deltar.matchObjectCollection3
def matchObjectCollection3(objects, matchCollection, deltaRMax=0.3, filter=lambda x, True y)
Definition: deltar.py:41
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.beginLoop
def beginLoop(self, setup)
Definition: TriggerMatchAnalyzer.py:32
join
static std::string join(char **cmd)
Definition: RemoteFile.cc:17
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.__init__
def __init__(self, cfg_ana, cfg_comp, looperName)
Definition: TriggerMatchAnalyzer.py:11
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.fallbackName
fallbackName
Definition: TriggerMatchAnalyzer.py:14
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.collMatchDRCut
collMatchDRCut
Definition: TriggerMatchAnalyzer.py:77
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.unpackPathNames
unpackPathNames
Definition: TriggerMatchAnalyzer.py:73
L1TEGammaOffline_cfi.triggerNames
triggerNames
Definition: L1TEGammaOffline_cfi.py:40
str
#define str(s)
Definition: TestProcessor.cc:53
remoteMonitoring_LED_IterMethod_cfg.Analyzer
Analyzer
Definition: remoteMonitoring_LED_IterMethod_cfg.py:32
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.trgObjSelectors
trgObjSelectors
Definition: TriggerMatchAnalyzer.py:74
print
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:46
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer
Definition: TriggerMatchAnalyzer.py:10
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.declareHandles
def declareHandles(self)
Definition: TriggerMatchAnalyzer.py:26
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.process
def process(self, event)
Definition: TriggerMatchAnalyzer.py:35
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.processName
processName
Definition: TriggerMatchAnalyzer.py:71
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.collMatchSelectors
collMatchSelectors
Definition: TriggerMatchAnalyzer.py:76
deltar
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.label
label
Definition: TriggerMatchAnalyzer.py:70
EgammaValidation_Wenu_cff.sel
sel
Definition: EgammaValidation_Wenu_cff.py:33
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.collToMatch
collToMatch
Definition: TriggerMatchAnalyzer.py:75
core.TriggerMatchAnalyzer.TriggerMatchAnalyzer.verbose
verbose
Definition: TriggerMatchAnalyzer.py:79