CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
hltHiggsPostProcessors_cff.py
Go to the documentation of this file.
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 == "Photon":
12  objtypeLatex="#gamma"
13  elif objtype == "Ele":
14  objtypeLatex="e"
15  elif objtype == "MET" :
16  objtypeLatex="MET"
17  elif objtype == "PFMET" :
18  objtypeLatex="PFMET"
19  elif objtype == "PFTau":
20  objtypeLatex="#tau"
21  elif objtype == "Jet":
22  objtypeLatex="jet"
23  else:
24  objtypeLatex=objtype
25 
26  numer_description = "# gen %s passed the %s" % (objtypeLatex,triggerpath)
27  denom_description = "# gen %s " % (objtypeLatex)
28 
29  if plot_type == "TurnOn1":
30  title = "pT Turn-On"
31  xAxis = "p_{T} of Leading Generated %s (GeV/c)" % (objtype)
32  input_type = "gen%sMaxPt1" % (objtype)
33  elif plot_type == "TurnOn2":
34  title = "Next-to-Leading pT Turn-On"
35  xAxis = "p_{T} of Next-to-Leading Generated %s (GeV/c)" % (objtype)
36  input_type = "gen%sMaxPt2" % (objtype)
37  elif plot_type == "EffEta":
38  title = "#eta Efficiency"
39  xAxis = "#eta of Generated %s " % (objtype)
40  input_type = "gen%sEta" % (objtype)
41  elif plot_type == "EffPhi":
42  title = "#phi Efficiency"
43  xAxis = "#phi of Generated %s " % (objtype)
44  input_type = "gen%sPhi" % (objtype)
45  elif "TurnOn" in plot_type:
46  title = "%sth Leading pT Turn-On" % (plot_type[-1])
47  xAxis = "p_{T} of %sth Leading Generated %s (GeV/c)" % (plot_type[-1], objtype)
48  input_type = "gen%sMaxPt%s" % (objtype, plot_type[-1])
49  elif plot_type == "EffdEtaqq":
50  title = "#Delta #eta_{qq} Efficiency"
51  xAxis = "#Delta #eta_{qq} of Generated %s " % (objtype)
52  input_type = "gen%sdEtaqq" % (objtype)
53  elif plot_type == "Effmqq":
54  title = "m_{qq} Efficiency"
55  xAxis = "m_{qq} of Generated %s " % (objtype)
56  input_type = "gen%smqq" % (objtype)
57  elif plot_type == "EffdPhibb":
58  title = "#Delta #phi_{bb} Efficiency"
59  xAxis = "#Delta #phi_{bb} of Generated %s " % (objtype)
60  input_type = "gen%sdPhibb" % (objtype)
61  elif plot_type == "EffCSV1":
62  title = "CSV1 Efficiency"
63  xAxis = "CSV1 of Generated %s " % (objtype)
64  input_type = "gen%sCSV1" % (objtype)
65  elif plot_type == "EffCSV2":
66  title = "CSV2 Efficiency"
67  xAxis = "CSV2 of Generated %s " % (objtype)
68  input_type = "gen%sCSV2" % (objtype)
69  elif plot_type == "EffCSV3":
70  title = "CSV3 Efficiency"
71  xAxis = "CSV3 of Generated %s " % (objtype)
72  input_type = "gen%sCSV3" % (objtype)
73  elif plot_type == "EffmaxCSV":
74  title = "max CSV Efficiency"
75  xAxis = "max CSV of Generated %s " % (objtype)
76  input_type = "gen%smaxCSV" % (objtype)
77 
78  yAxis = "%s / %s" % (numer_description, denom_description)
79  all_titles = "%s for trigger %s; %s; %s" % (title, triggerpath,
80  xAxis, yAxis)
81  return "Eff_%s_%s '%s' %s_%s %s" % (input_type,triggerpath,
82  all_titles,input_type,triggerpath,input_type)
83 
84 # Adding the reco objects
85 def get_reco_strings(strings):
86  reco_strings = []
87  for entry in strings:
88  reco_strings.append(entry
89  .replace("Generated", "Reconstructed")
90  .replace("Gen", "Reco")
91  .replace("gen", "rec"))
92  return reco_strings
93 
94 
95 plot_types = ["TurnOn1", "TurnOn2", "EffEta", "EffPhi"]
96 #--- IMPORTANT: Update this collection whenever you introduce a new object
97 # in the code (from EVTColContainer::getTypeString)
98 obj_types = ["Mu","Ele","Photon","MET","PFMET","PFTau","Jet"]
99 #--- IMPORTANT: Trigger are extracted from the hltHiggsValidator_cfi.py module
100 triggers = []
101 efficiency_strings = []
102 
103 # Extract the triggers used in the hltHiggsValidator
104 from HLTriggerOffline.Higgs.hltHiggsValidator_cfi import hltHiggsValidator as _config
105 triggers = set([])
106 for an in _config.analysis:
107  s = _config.__getattribute__(an)
108  vstr = s.__getattribute__("hltPathsToCheck")
109  map(lambda x: triggers.add(x.replace("_v","")),vstr)
110 triggers = list(triggers)
111 
112 #------------------------------------------------------------
113 
114 # Generating the list with all the efficiencies
115 for type in plot_types:
116  for obj in obj_types:
117  for trig in triggers:
118  efficiency_strings.append(efficiency_string(obj,type,trig))
119 
120 
121 #add the summary plots
122 for an in _config.analysis:
123  efficiency_strings.append("EffSummaryPaths_"+an+"_gen ' Efficiency of paths used in "+an+" ; trigger path ' SummaryPaths_"+an+"_gen_passingHLT SummaryPaths_"+an+"_gen")
124  for trig in triggers:
125  efficiency_strings.append("Eff_trueVtxDist_"+an+"_gen_"+trig+" ' Efficiency of "+trig+" vs nb of interactions ; nb events passing each path ' trueVtxDist_"+an+"_gen_"+trig+" trueVtxDist_"+an+"_gen")
126 
127 efficiency_strings.extend(get_reco_strings(efficiency_strings))
128 
129 
130 
131 hltHiggsPostHWW = hltHiggsPostProcessor.clone()
132 hltHiggsPostHWW.subDirs = ['HLT/Higgs/HWW']
133 hltHiggsPostHWW.efficiencyProfile = efficiency_strings
134 
135 
136 hltHiggsPostHZZ = hltHiggsPostProcessor.clone()
137 hltHiggsPostHZZ.subDirs = ['HLT/Higgs/HZZ']
138 hltHiggsPostHZZ.efficiencyProfile = efficiency_strings
139 
140 
141 hltHiggsPostHgg = hltHiggsPostProcessor.clone()
142 hltHiggsPostHgg.subDirs = ['HLT/Higgs/Hgg']
143 hltHiggsPostHgg.efficiencyProfile = efficiency_strings
144 
145 hltHiggsPostDoubleHinTaus = hltHiggsPostProcessor.clone()
146 hltHiggsPostDoubleHinTaus.subDirs = ['HLT/Higgs/DoubleHinTaus']
147 hltHiggsPostDoubleHinTaus.efficiencyProfile = efficiency_strings
148 
149 hltHiggsPostHiggsDalitz = hltHiggsPostProcessor.clone()
150 hltHiggsPostHiggsDalitz.subDirs = ['HLT/Higgs/HiggsDalitz']
151 hltHiggsPostHiggsDalitz.efficiencyProfile = efficiency_strings
152 
153 hltHiggsPostH2tau = hltHiggsPostProcessor.clone()
154 hltHiggsPostH2tau.subDirs = ['HLT/Higgs/H2tau']
155 hltHiggsPostH2tau.efficiencyProfile = efficiency_strings
156 
157 
158 hltHiggsPostHtaunu = hltHiggsPostProcessor.clone()
159 hltHiggsPostHtaunu.subDirs = ['HLT/Higgs/Htaunu']
160 hltHiggsPostHtaunu.efficiencyProfile = efficiency_strings
161 
162 
163 efficiency_strings_TTHbbej = list(efficiency_strings)
164 #add the summary plots
165 for an in _config.analysis:
166  for trig in triggers:
167  efficiency_strings_TTHbbej.append("Eff_HtDist_"+an+"_gen_"+trig+" ' Efficiency of "+trig+" vs sum pT of jets ; sum pT of jets ' HtDist_"+an+"_gen_"+trig+" HtDist_"+an+"_gen")
168 
169 efficiency_strings_TTHbbej.extend(get_reco_strings(efficiency_strings_TTHbbej))
170 
171 hltHiggsPostTTHbbej = hltHiggsPostProcessor.clone()
172 hltHiggsPostTTHbbej.subDirs = ['HLT/Higgs/TTHbbej']
173 hltHiggsPostTTHbbej.efficiencyProfile = efficiency_strings_TTHbbej
174 
175 
176 #Specific plots for VBFHbb
177 #dEtaqq, mqq, dPhibb, CVS1, maxCSV_jets, maxCSV_E, MET, pt1, pt2, pt3, pt4
178 NminOneCutNames = ("EffdEtaqq", "Effmqq", "EffdPhibb", "EffCSV1", "EffCSV2", "EffCSV3", "EffmaxCSV", "", "", "TurnOn1", "TurnOn2", "TurnOn3", "TurnOn4")
179 plot_types = ["EffEta", "EffPhi"]
180 NminOneCuts = (_config.__getattribute__("VBFHbb")).__getattribute__("NminOneCuts")
181 if NminOneCuts:
182  for iCut in range(0,len(NminOneCuts)):
183  if( NminOneCuts[iCut] and NminOneCutNames[iCut] ):
184  if( NminOneCutNames[iCut] == "EffmaxCSV" ):
185  plot_types.pop()
186  plot_types.append(NminOneCutNames[iCut])
187 
188 efficiency_strings = []
189 for type in plot_types:
190  for obj in ["Jet"]:
191  for trig in triggers:
192  efficiency_strings.append(efficiency_string(obj,type,trig))
193 
194 efficiency_strings = get_reco_strings(efficiency_strings)
195 
196 hltHiggsPostVBFHbb = hltHiggsPostProcessor.clone()
197 hltHiggsPostVBFHbb.subDirs = ['HLT/Higgs/VBFHbb']
198 hltHiggsPostVBFHbb.efficiencyProfile = efficiency_strings
199 
200 
201 #Specific plots for ZnnHbb
202 #Jet plots
203 plot_types = ["EffEta", "EffPhi"]
204 NminOneCuts = (_config.__getattribute__("ZnnHbb")).__getattribute__("NminOneCuts")
205 if NminOneCuts:
206  for iCut in range(0,len(NminOneCuts)):
207  if( NminOneCuts[iCut] and NminOneCutNames[iCut] ):
208  plot_types.append(NminOneCutNames[iCut])
209 
210 efficiency_strings = []
211 for type in plot_types:
212  for obj in ["Jet"]:
213  for trig in triggers:
214  efficiency_strings.append(efficiency_string(obj,type,trig))
215 
216 efficiency_strings = get_reco_strings(efficiency_strings)
217 
218 #PFMET plots
219 plot_types = ["TurnOn1", "EffPhi"]
220 efficiency_strings2 = []
221 for type in plot_types:
222  for obj in ["PFMET"]:
223  for trig in triggers:
224  efficiency_strings2.append(efficiency_string(obj,type,trig))
225 
226 efficiency_strings2 = get_reco_strings(efficiency_strings2)
227 efficiency_strings += efficiency_strings2
228 
229 hltHiggsPostZnnHbb = hltHiggsPostProcessor.clone()
230 hltHiggsPostZnnHbb.subDirs = ['HLT/Higgs/ZnnHbb']
231 hltHiggsPostZnnHbb.efficiencyProfile = efficiency_strings
232 
233 
234 #Specific plots for X4b
235 #Jet plots
236 NminOneCuts = (_config.__getattribute__("X4b")).__getattribute__("NminOneCuts")
237 if NminOneCuts:
238  for iCut in range(0,len(NminOneCuts)):
239  if( NminOneCuts[iCut] and NminOneCutNames[iCut] ):
240  plot_types.append(NminOneCutNames[iCut])
241 
242 efficiency_strings = []
243 for type in plot_types:
244  for obj in ["Jet"]:
245  for trig in triggers:
246  efficiency_strings.append(efficiency_string(obj,type,trig))
247 
248 efficiency_strings = get_reco_strings(efficiency_strings)
249 
250 hltHiggsPostX4b = hltHiggsPostProcessor.clone()
251 hltHiggsPostX4b.subDirs = ['HLT/Higgs/X4b']
252 hltHiggsPostX4b.efficiencyProfile = efficiency_strings
253 
254 
255 
256 hltHiggsPostProcessors = cms.Sequence(
257  hltHiggsPostHWW+
258  hltHiggsPostHZZ+
259  hltHiggsPostHgg+
260  hltHiggsPostHtaunu+
261  hltHiggsPostH2tau+
262  hltHiggsPostTTHbbej+
263  hltHiggsPostVBFHbb+
264  hltHiggsPostZnnHbb+
265  hltHiggsPostDoubleHinTaus+
266  hltHiggsPostHiggsDalitz+
267  hltHiggsPostX4b
268 
269 )
270 
271 
if(conf.exists("allCellsPositionCalc"))
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