CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
hltExoticaPostProcessors_cff.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 
4 
5 # Build the standard strings to the DQM
6 def efficiency_string(objtype,plot_type,triggerpath):
7  # --- IMPORTANT: Add here a elif if you are introduce a new collection
8  # (see EVTColContainer::getTypeString)
9  if objtype == "Mu" :
10  objtypeLatex="#mu"
11  elif objtype == "refittedStandAloneMuons":
12  objtypeLatex="refittedStandAlone #mu"
13  elif objtype == "Ele":
14  objtypeLatex="e"
15  elif objtype == "Photon":
16  objtypeLatex="#gamma"
17  elif objtype == "PFTau":
18  objtypeLatex="#tau"
19  else:
20  objtypeLatex=objtype
21  numer_description = "# gen %s passed the %s" % (objtypeLatex,triggerpath)
22  denom_description = "# gen %s " % (objtypeLatex)
23 
24  if plot_type == "TurnOn1":
25  title = "pT Turn-On"
26  xAxis = "p_{T} of Leading Generated %s (GeV/c)" % (objtype)
27  input_type = "gen%sMaxPt1" % (objtype)
28  if plot_type == "TurnOn2":
29  title = "Next-to-Leading pT Turn-On"
30  xAxis = "p_{T} of Next-to-Leading Generated %s (GeV/c)" % (objtype)
31  input_type = "gen%sMaxPt2" % (objtype)
32  if plot_type == "TurnOn3":
33  title = "Next-to-next-to-Leading pT Turn-On"
34  xAxis = "p_{T} of Next-to-next-to-Leading Generated %s (GeV/c)" % (objtype)
35  input_type = "gen%sMaxPt3" % (objtype)
36  if plot_type == "TurnOn4":
37  title = "SumEt Turn-On"
38  xAxis = "SumEt of Leading Generated %s (GeV/c)" % (objtype)
39  input_type = "gen%sSumEt" % (objtype)
40  if plot_type == "EffEta":
41  title = "#eta Efficiency"
42  xAxis = "#eta of Generated %s " % (objtype)
43  input_type = "gen%sEta" % (objtype)
44  if plot_type == "EffPhi":
45  title = "#phi Efficiency"
46  xAxis = "#phi of Generated %s " % (objtype)
47  input_type = "gen%sPhi" % (objtype)
48  if plot_type == "EffDxy":
49  title = "Dxy Efficiency"
50  xAxis = "Dxy of Generated %s " % (objtype)
51  input_type = "gen%sDxy" % (objtype)
52 
53  yAxis = "%s / %s" % (numer_description, denom_description)
54  all_titles = "%s for trigger %s; %s; %s" % (title, triggerpath,
55  xAxis, yAxis)
56  return "Eff_%s_%s '%s' %s_%s %s" % (input_type,triggerpath,
57  all_titles,input_type,triggerpath,input_type)
58 
59 # Adding the reco objects
60 def add_reco_strings(strings):
61  reco_strings = []
62  for entry in strings:
63  reco_strings.append(entry
64  .replace("Generated", "Reconstructed")
65  .replace("Gen", "Reco")
66  .replace("gen", "rec"))
67  strings.extend(reco_strings)
68 
69 
70 plot_types = ["TurnOn1", "TurnOn2", "TurnOn3", "TurnOn4", "EffEta", "EffPhi", "EffDxy"]
71 #--- IMPORTANT: Update this collection whenever you introduce a new object
72 # in the code (from EVTColContainer::getTypeString)
73 obj_types = ["Mu","refittedStandAloneMuons","Track","Ele","Photon","PFTau","PFJet","MET","PFMET","PFMHT","GenMET","CaloJet"
74  ,"CaloMET","CaloMHT","l1MET"]
75 #--- IMPORTANT: Trigger are extracted from the hltExoticaValidator_cfi.py module
76 triggers = [ ]
77 efficiency_strings = []
78 
79 # Extract the triggers used in the hltExoticaValidator, for each path
80 from HLTriggerOffline.Exotica.hltExoticaValidator_cfi import hltExoticaValidator as _config
81 triggers = set([])
82 for an in _config.analysis:
83  s = _config.__getattribute__(an)
84  vstr = s.__getattribute__("hltPathsToCheck")
85  map(lambda x: triggers.add(x.replace("_v","")),vstr)
86 triggers = list(triggers)
87 print triggers
88 #------------------------------------------------------------
89 
90 # Generating the list with all the efficiencies
91 for type in plot_types:
92  for obj in obj_types:
93  for trig in triggers:
94  efficiency_strings.append(efficiency_string(obj,type,trig))
95 #for item in efficiency_strings:
96 # print item
97 
98 add_reco_strings(efficiency_strings)
99 
100 #--- IMPORTANT: Here you have to add the analyses one by one.
101 hltExoticaPostLowPtTrimuon = hltExoticaPostProcessor.clone()
102 hltExoticaPostLowPtTrimuon.subDirs = ['HLT/Exotica/LowPtTrimuon']
103 hltExoticaPostLowPtTrimuon.efficiencyProfile = efficiency_strings
104 
105 hltExoticaPostHighPtDimuon = hltExoticaPostProcessor.clone()
106 hltExoticaPostHighPtDimuon.subDirs = ['HLT/Exotica/HighPtDimuon']
107 hltExoticaPostHighPtDimuon.efficiencyProfile = efficiency_strings
108 
109 hltExoticaPostHighPtDielectron = hltExoticaPostProcessor.clone()
110 hltExoticaPostHighPtDielectron.subDirs = ['HLT/Exotica/HighPtDielectron']
111 hltExoticaPostHighPtDielectron.efficiencyProfile = efficiency_strings
112 
113 hltExoticaPostHighPtElectron = hltExoticaPostProcessor.clone()
114 hltExoticaPostHighPtElectron.subDirs = ['HLT/Exotica/HighPtElectron']
115 hltExoticaPostHighPtElectron.efficiencyProfile = efficiency_strings
116 
117 hltExoticaPostLowPtElectron = hltExoticaPostProcessor.clone()
118 hltExoticaPostLowPtElectron.subDirs = ['HLT/Exotica/LowPtElectron']
119 hltExoticaPostLowPtElectron.efficiencyProfile = efficiency_strings
120 
121 hltExoticaPostLowPtDimuon = hltExoticaPostProcessor.clone()
122 hltExoticaPostLowPtDimuon.subDirs = ['HLT/Exotica/LowPtDimuon']
123 hltExoticaPostLowPtDimuon.efficiencyProfile = efficiency_strings
124 
125 hltExoticaPostLowPtDielectron = hltExoticaPostProcessor.clone()
126 hltExoticaPostLowPtDielectron.subDirs = ['HLT/Exotica/LowPtDielectron']
127 hltExoticaPostLowPtDielectron.efficiencyProfile = efficiency_strings
128 
129 hltExoticaPostHighPtPhoton = hltExoticaPostProcessor.clone()
130 hltExoticaPostHighPtPhoton.subDirs = ['HLT/Exotica/HighPtPhoton']
131 hltExoticaPostHighPtPhoton.efficiencyProfile = efficiency_strings
132 
133 hltExoticaPostDiPhoton = hltExoticaPostProcessor.clone()
134 hltExoticaPostDiPhoton.subDirs = ['HLT/Exotica/DiPhoton']
135 hltExoticaPostDiPhoton.efficiencyProfile = efficiency_strings
136 
137 hltExoticaPostSingleMuon = hltExoticaPostProcessor.clone()
138 hltExoticaPostSingleMuon.subDirs = ['HLT/Exotica/SingleMuon']
139 hltExoticaPostSingleMuon.efficiencyProfile = efficiency_strings
140 
141 hltExoticaPostPFHT = hltExoticaPostProcessor.clone()
142 hltExoticaPostPFHT.subDirs = ['HLT/Exotica/PFHT']
143 hltExoticaPostPFHT.efficiencyProfile = efficiency_strings
144 
145 hltExoticaPostCaloHT = hltExoticaPostProcessor.clone()
146 hltExoticaPostCaloHT.subDirs = ['HLT/Exotica/CaloHT']
147 hltExoticaPostCaloHT.efficiencyProfile = efficiency_strings
148 
149 hltExoticaPostJetNoBptx = hltExoticaPostProcessor.clone()
150 hltExoticaPostJetNoBptx.subDirs = ['HLT/Exotica/JetNoBptx']
151 hltExoticaPostJetNoBptx.efficiencyProfile = efficiency_strings
152 
153 hltExoticaPostMuonNoBptx = hltExoticaPostProcessor.clone()
154 hltExoticaPostMuonNoBptx.subDirs = ['HLT/Exotica/MuonNoBptx']
155 hltExoticaPostMuonNoBptx.efficiencyProfile = efficiency_strings
156 
157 hltExoticaPostDisplacedMuEG = hltExoticaPostProcessor.clone()
158 hltExoticaPostDisplacedMuEG.subDirs = ['HLT/Exotica/DisplacedMuEG']
159 hltExoticaPostDisplacedMuEG.efficiencyProfile = efficiency_strings
160 
161 hltExoticaPostDisplacedDimuon = hltExoticaPostProcessor.clone()
162 hltExoticaPostDisplacedDimuon.subDirs = ['HLT/Exotica/DisplacedDimuon']
163 hltExoticaPostDisplacedDimuon.efficiencyProfile = efficiency_strings
164 
165 hltExoticaPostDisplacedL2Dimuon = hltExoticaPostProcessor.clone()
166 hltExoticaPostDisplacedL2Dimuon.subDirs = ['HLT/Exotica/DisplacedL2Dimuon']
167 hltExoticaPostDisplacedL2Dimuon.efficiencyProfile = efficiency_strings
168 
169 hltExoticaPostMonojet = hltExoticaPostProcessor.clone()
170 hltExoticaPostMonojet.subDirs = ['HLT/Exotica/Monojet']
171 hltExoticaPostMonojet.efficiencyProfile = efficiency_strings
172 
173 hltExoticaPostMonojetBackup = hltExoticaPostProcessor.clone()
174 hltExoticaPostMonojetBackup.subDirs = ['HLT/Exotica/MonojetBackup']
175 hltExoticaPostMonojetBackup.efficiencyProfile = efficiency_strings
176 
177 hltExoticaPostPureMET = hltExoticaPostProcessor.clone()
178 hltExoticaPostPureMET.subDirs = ['HLT/Exotica/PureMET']
179 hltExoticaPostPureMET.efficiencyProfile = efficiency_strings
180 
181 hltExoticaPostMETplusTrack = hltExoticaPostProcessor.clone()
182 hltExoticaPostMETplusTrack.subDirs = ['HLT/Exotica/METplusTrack']
183 hltExoticaPostMETplusTrack.efficiencyProfile = efficiency_strings
184 
185 hltExoticaDisplacedDimuonDijet = hltExoticaPostProcessor.clone()
186 hltExoticaDisplacedDimuonDijet.subDirs = ['HLT/Exotica/DisplacedDimuonDijet']
187 hltExoticaDisplacedDimuonDijet.efficiencyProfile = efficiency_strings
188 
189 hltExoticaEleMu = hltExoticaPostProcessor.clone()
190 hltExoticaEleMu.subDirs = ['HLT/Exotica/EleMu']
191 hltExoticaEleMu.efficiencyProfile = efficiency_strings
192 
193 hltExoticaPhotonMET = hltExoticaPostProcessor.clone()
194 hltExoticaPhotonMET.subDirs = ['HLT/Exotica/PhotonMET']
195 hltExoticaPhotonMET.efficiencyProfile = efficiency_strings
196 
197 hltExoticaHTDisplacedJets = hltExoticaPostProcessor.clone()
198 hltExoticaHTDisplacedJets.subDirs = ['HLT/Exotica/HTDisplacedJets']
199 hltExoticaHTDisplacedJets.efficiencyProfile = efficiency_strings
200 
201 hltExoticaDSTJets = hltExoticaPostProcessor.clone()
202 hltExoticaDSTJets.subDirs = ['HLT/Exotica/DSTJets']
203 hltExoticaDSTJets.efficiencyProfile = efficiency_strings
204 
205 hltExoticaDSTMuons = hltExoticaPostProcessor.clone()
206 hltExoticaDSTMuons.subDirs = ['HLT/Exotica/DSTMuons']
207 hltExoticaDSTMuons.efficiencyProfile = efficiency_strings
208 
209 hltExoticaTracklessJets = hltExoticaPostProcessor.clone()
210 hltExoticaTracklessJets.subDirs = ['HLT/Exotica/TracklessJets']
211 hltExoticaTracklessJets.efficiencyProfile = efficiency_strings
212 
213 hltExoticaPostProcessors = cms.Sequence(
214  # Tri-lepton paths
215  hltExoticaPostLowPtTrimuon +
216  # Di-lepton paths
217  hltExoticaPostHighPtDimuon +
218  hltExoticaPostHighPtDielectron +
219  hltExoticaPostLowPtDimuon +
220  hltExoticaPostLowPtDielectron +
221  # Single Lepton paths
222  hltExoticaPostHighPtElectron +
223  hltExoticaPostLowPtElectron +
224  # Photon paths
225  hltExoticaPostHighPtPhoton +
226  hltExoticaPostDiPhoton +
227  # HT path
228  hltExoticaPostPFHT +
229  hltExoticaPostCaloHT +
230  # NoBptx paths
231  hltExoticaPostJetNoBptx +
232  hltExoticaPostMuonNoBptx +
233  # Displaced paths
234  hltExoticaPostDisplacedMuEG +
235  hltExoticaPostDisplacedDimuon +
236  hltExoticaPostDisplacedL2Dimuon +
237  # Others
238  hltExoticaPostMonojet +
239  hltExoticaPostMonojetBackup +
240  hltExoticaPostPureMET +
241  hltExoticaPostMETplusTrack +
242  hltExoticaDisplacedDimuonDijet +
243  hltExoticaEleMu +
244  hltExoticaPhotonMET +
245  hltExoticaHTDisplacedJets +
246  hltExoticaTracklessJets +
247  # scouting triggers
248  hltExoticaDSTJets +
249  hltExoticaDSTMuons
250  )
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run