3 from PhysicsTools.Heppy.analyzers.core.Analyzer
import Analyzer
4 from PhysicsTools.Heppy.analyzers.core.AutoHandle
import AutoHandle
5 from PhysicsTools.Heppy.analyzers.core.AutoFillTreeProducer
import NTupleVariable
7 import PhysicsTools.HeppyCore.framework.config
as cfg
10 def __init__(self, cfg_ana, cfg_comp, looperName ):
11 super(TriggerMatchAnalyzer,self).
__init__(cfg_ana,cfg_comp,looperName)
12 self.
processName = getattr(self.cfg_ana,
"processName",
"PAT")
13 self.
fallbackName = getattr(self.cfg_ana,
"fallbackProcessName",
"RECO")
15 self.
label = self.cfg_ana.label
17 self.trgObjSelectors.extend(getattr(self.cfg_ana,
"trgObjSelectors",[]))
18 self.
collToMatch = getattr(self.cfg_ana,
"collToMatch",
None)
20 self.collMatchSelectors.extend(getattr(self.cfg_ana,
"collMatchSelectors",[]))
22 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")
23 self.
match1To1 = getattr(self.cfg_ana,
"univoqueMatching",
True)
27 self.handles[
'TriggerBits'] = AutoHandle( (
'TriggerResults',
'',
'HLT'),
'edm::TriggerResults' )
29 self.handles[
'TriggerObjects'] = AutoHandle( (
'selectedPatTrigger',
'',self.
processName),
'std::vector<pat::TriggerObjectStandAlone>', fallbackLabel=fallback )
32 super(TriggerMatchAnalyzer,self).
beginLoop(setup)
35 self.readCollections( event.input )
36 triggerBits = self.handles[
'TriggerBits'].product()
37 allTriggerObjects = self.handles[
'TriggerObjects'].product()
38 names = event.input.object().triggerNames(triggerBits)
39 for ob
in allTriggerObjects: ob.unpackPathNames(names)
40 triggerObjects = [ob
for ob
in allTriggerObjects
if False not in [
sel(ob)
for sel
in self.
trgObjSelectors]]
42 setattr(event,
'trgObjects_'+self.
label,triggerObjects)
46 doubleandselector =
lambda lep,ob:
False if False in [
sel(lep,ob)
for sel
in self.
collMatchSelectors]
else True 48 for lep
in tcoll: setattr(lep,
'matchedTrgObj'+self.
label,pairs[lep])
51 print 'Verbose debug for triggerMatchAnalyzer %s'%self.
label 52 for ob
in getattr(event,
'trgObjects_'+self.
label):
53 types =
", ".
join([
str(f)
for f
in ob.filterIds()])
54 filters =
", ".
join([
str(f)
for f
in ob.filterLabels()])
55 paths =
", ".
join([(
"%s***" if f
in set(ob.pathNames(
True))
else "%s")%f
for f
in ob.pathNames()])
56 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)
60 ob = getattr(lep,
'matchedTrgObj'+self.
label)
61 if ob: mstring =
'trigger obj with pt=%.2f, eta=%.2f, phi=%.2f, collection=%s'%(ob.pt(),ob.eta(),ob.phi(),ob.collection())
62 print 'Lepton pt=%.2f, eta=%.2f, phi=%.2f matched to %s'%(lep.pt(),lep.eta(),lep.phi(),mstring)
67 setattr(TriggerMatchAnalyzer,
"defaultConfig",cfg.Analyzer(
68 TriggerMatchAnalyzer, name=
"TriggerMatchAnalyzerDefault",
69 label=
'DefaultTrigObjSelection',
71 fallbackProcessName =
'RECO',
72 unpackPathNames =
True,
75 collMatchSelectors = [],
77 univoqueMatching =
True,
def matchObjectCollection
def beginLoop(self, setup)
static std::string join(char **cmd)
def __init__(self, cfg_ana, cfg_comp, looperName)
def matchObjectCollection3