13 from svd
import add_svd_create_recodigits
15 from geometry
import check_components
16 from analysisDQM
import add_analysis_dqm, add_mirabelle_dqm
20 def add_common_dqm(path, components=None, dqm_environment="expressreco", dqm_mode="dont_care", create_hlt_unit_histograms=False):
22 This function adds DQMs which are common for Cosmic runs and Collion runs
24 @param components: A list of the detector components which are available in this
26 @param dqm_environment: The environment the DQM modules are running in
27 "expressreco" (default) if running on the ExpressReco system
28 "hlt" if running on the HLT online reconstructon nodes
29 If running on the hlt, you may want to output less or other DQM plots
30 due to the limited bandwith of the HLT nodes.
31 @param dqm_mode: How to split up the path for online/HLT.
32 For dqm_mode == "dont_care" all the DQM modules should be added.
33 For dqm_mode == "all_events" only the DQM modules which should run on all events
34 (filtered and dismissed) should be added
35 For dqm_mode == "before_reco" only the DQM modules which should run before
37 For dqm_mode == "filtered" only the DQM modules which should run on filtered
38 events should be added
39 @param create_hlt_unit_histograms: Parameter for SoftwareTiggerHLTDQMModule.
40 Should be True only when running on the HLT servers
42 assert dqm_mode
in [
"dont_care",
"all_events",
"filtered",
"before_filter"]
44 check_components(components)
46 if dqm_mode
in [
"dont_care",
"filtered"]:
48 path.add_module(
'TTDDQM')
50 if dqm_environment ==
"expressreco" and (dqm_mode
in [
"dont_care"]):
52 if components
is None or 'PXD' in components:
53 path.add_module(
'PXDDAQDQM', histogramDirectoryName=
'PXDDAQ')
54 path.add_module(
'PXDROIDQM', histogramDirectoryName=
'PXDROI')
55 path.add_module(
'PXDDQMExpressReco', histogramDirectoryName=
'PXDER')
56 path.add_module(
'SetupGenfitExtrapolation')
57 path.add_module(
'PXDROIFinder',
58 recoTrackListName=
'RecoTracks',
59 PXDInterceptListName=
'PXDIntercepts')
62 path.add_module(
'PXDTrackClusterDQM', histogramDirectoryName=
'PXDER')
63 path.add_module(
'PXDInjectionDQM', histogramDirectoryName=
'PXDINJ', eachModule=
True)
65 if components
is None or 'SVD' in components:
67 add_svd_create_recodigits(path)
70 svdunpackerdqm = b2.register_module(
'SVDUnpackerDQM')
71 path.add_module(svdunpackerdqm)
74 'SVDZeroSuppressionEmulator',
76 ShaperDigits=
'SVDShaperDigits',
77 ShaperDigitsIN=
'SVDShaperDigitsZS5',
80 path.add_module(
'SVDDQMInjection', ShaperDigits=
'SVDShaperDigitsZS5')
82 path.add_module(
'SVDDQMExpressReco',
83 offlineZSShaperDigits=
'SVDShaperDigitsZS5')
85 path.add_module(
'SVDDQMHitTime')
87 path.add_module(
'SetupGenfitExtrapolation')
88 path.add_module(
'SVDROIFinder',
89 recoTrackListName=
'RecoTracks',
90 SVDInterceptListName=
'SVDIntercepts')
91 path.add_module(
'SVDDQMEfficiency')
93 path.add_module(
'SVDDQMClustersOnTrack')
95 add_svd_dqm_dose(path,
'SVDShaperDigitsZS5')
98 if components
is None or 'CDC' in components
or 'ECL' in components
or 'TOP' in components:
99 eventT0DQMmodule = b2.register_module(
'EventT0DQM')
100 path.add_module(eventT0DQMmodule)
102 if dqm_environment ==
"hlt" and (dqm_mode
in [
"dont_care",
"before_filter"]):
104 "SoftwareTriggerHLTDQM",
105 createHLTUnitHistograms=create_hlt_unit_histograms,
106 createTotalResultHistograms=
False,
107 createExpRunEventHistograms=
False,
108 createErrorFlagHistograms=
True,
109 cutResultIdentifiers={},
110 histogramDirectoryName=
"softwaretrigger_before_filter",
111 pathLocation=
"before filter",
112 ).set_name(
"SoftwareTriggerHLTDQM_before_filter")
116 histogramDirectoryName=
"TrackingAbort_before_filter",
117 ).set_name(
"TrackingAbortDQM_before_filter")
119 path.add_module(
"StatisticsTimingHLTDQM",
120 createHLTUnitHistograms=create_hlt_unit_histograms,
123 if dqm_environment ==
"hlt" and (dqm_mode
in [
"dont_care",
"filtered"]):
125 hlt_trigger_lines_in_plot = []
126 hlt_skim_lines_in_plot = []
128 hlt_trigger_lines_per_unit_in_plot = [
129 "ge3_loose_tracks_inc_1_tight_not_ee2leg",
130 "Elab_gt_0.5_plus_2_others_with_Elab_gt_0.18_plus_no_clust_with_Ecms_gt_2.0",
132 "Estargt2_GeV_cluster",
134 cutResultIdentifiers = {}
136 from softwaretrigger
import filter_categories, skim_categories
138 filter_cat = [method
for method
in dir(filter_categories)
if method.startswith(
'__')
is False if method !=
'RESULTS']
139 skim_cat = [method
for method
in dir(skim_categories)
if method.startswith(
'__')
is False]
141 def read_lines(category):
142 return [i.split(
" ", 1)[1].replace(
" ",
"_")
for i
in category]
145 cutResultIdentifiers[i] = {
"filter": read_lines(getattr(filter_categories, i))}
146 hlt_trigger_lines_in_plot += read_lines(getattr(filter_categories, i))
149 cutResultIdentifiers[i] = {
"skim": read_lines(getattr(skim_categories, i))}
150 hlt_skim_lines_in_plot += read_lines(getattr(skim_categories, i))
152 cutResultIdentifiers[
"skim"] = {
"skim": hlt_skim_lines_in_plot}
153 cutResultIdentifiers[
"filter"] = {
"filter": hlt_trigger_lines_in_plot}
155 additionalL1Identifiers = [
190 "SoftwareTriggerHLTDQM",
191 cutResultIdentifiers=cutResultIdentifiers,
192 l1Identifiers=[
"fff",
"ffo",
"lml0",
"ffb",
"fp"],
193 additionalL1Identifiers=additionalL1Identifiers,
194 createHLTUnitHistograms=create_hlt_unit_histograms,
195 cutResultIdentifiersPerUnit=hlt_trigger_lines_per_unit_in_plot,
196 pathLocation=
"after filter",
199 path.add_module(
"TrackingAbortDQM")
203 "SoftwareTriggerHLTDQM",
204 cutResultIdentifiers={
205 "skim": {
"skim": hlt_skim_lines_in_plot},
207 cutResultIdentifiersIgnored={
212 createTotalResultHistograms=
False,
213 createExpRunEventHistograms=
False,
214 histogramDirectoryName=
"softwaretrigger_skim_nobhabha",
215 ).set_name(
"SoftwareTriggerHLTDQM_skim_nobhabha")
217 if dqm_environment ==
"hlt" and (dqm_mode
in [
"dont_care",
"filtered"]):
219 if components
is None or 'SVD' in components:
220 svdunpackerdqm = b2.register_module(
'SVDUnpackerDQM')
221 path.add_module(svdunpackerdqm)
224 if (components
is None or 'CDC' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
225 cdcdqm = b2.register_module(
'cdcDQM7')
226 path.add_module(cdcdqm)
228 module_names = [m.name()
for m
in path.modules()]
229 if (
'SoftwareTrigger' in module_names):
230 cdcdedxdqm = b2.register_module(
'CDCDedxDQM')
231 path.add_module(cdcdedxdqm)
233 if dqm_environment ==
"expressreco":
234 path.add_module(
'CDCDQM')
237 if (components
is None or 'ECL' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
238 ecldqm = b2.register_module(
'ECLDQM')
239 path.add_module(ecldqm)
240 ecldqmext = b2.register_module(
'ECLDQMEXTENDED')
241 path.add_module(ecldqmext)
242 path.add_module(
'ECLDQMOutOfTimeDigits')
243 path.add_module(
'ECLDQMConnectedRegions')
245 if dqm_environment ==
"expressreco":
246 path.add_module(
'ECLDQMInjection', histogramDirectoryName=
'ECLINJ')
249 if (components
is None or 'TOP' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
250 topdqm = b2.register_module(
'TOPDQM')
251 path.add_module(topdqm)
254 if (components
is None or 'KLM' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
255 klmdqm = b2.register_module(
"KLMDQM")
256 path.add_module(klmdqm)
259 if (components
is None or 'TRG' in components)
and (dqm_mode
in [
"dont_care",
"before_filter"]):
261 trgecldqm = b2.register_module(
'TRGECLDQM')
262 path.add_module(trgecldqm)
263 trgecltimingdqm = b2.register_module(
'TRGECLEventTimingDQM')
264 path.add_module(trgecltimingdqm)
266 trggdldqm = b2.register_module(
'TRGGDLDQM')
267 trggdldqm.param(
'skim', 0)
268 path.add_module(trggdldqm)
270 trgtopdqm = b2.register_module(
'TRGTOPDQM')
271 trgtopdqm.param(
'skim', 0)
272 path.add_module(trgtopdqm)
274 trggrldqm = b2.register_module(
'TRGGRLDQM')
275 path.add_module(trggrldqm)
277 nmod_tsf = [0, 1, 2, 3, 4, 5, 6]
278 for mod_tsf
in nmod_tsf:
279 path.add_module(
'TRGCDCTSFDQM', TSFMOD=mod_tsf)
281 trgcdct2ddqm = b2.register_module(
'TRGCDCT2DDQM')
282 path.add_module(trgcdct2ddqm)
284 nmod_t3d = [0, 1, 2, 3]
285 for mod_t3d
in nmod_t3d:
286 path.add_module(
'TRGCDCT3DConverter',
287 hitCollectionName=
'FirmCDCTriggerSegmentHits' + str(mod_t3d),
288 addTSToDatastore=
True,
289 EventTimeName=
'FirmBinnedEventT0' + str(mod_t3d),
290 addEventTimeToDatastore=
True,
291 inputCollectionName=
'FirmTRGCDC2DFinderTracks' + str(mod_t3d),
292 add2DFinderToDatastore=
True,
293 outputCollectionName=
'FirmTRGCDC3DFitterTracks' + str(mod_t3d),
294 add3DToDatastore=
True,
296 firmwareResultCollectionName=
'TRGCDCT3DUnpackerStore' + str(mod_t3d),
298 path.add_module(
'TRGCDCT3DDQM', T3DMOD=mod_t3d)
300 if dqm_environment !=
"expressreco":
302 path.add_module(
'CDCTriggerNeuroDQMOnline', histogramDirectoryName=
"TRGCDCTNN2", useRecoTracks=
False)
303 path.add_module(
'CDCTriggerNeuroDQM')
306 if dqm_environment ==
"expressreco" and (components
is None or 'TRG' in components)
and (dqm_mode
in [
"dont_care"]):
309 path.add_module(
'CDCTriggerRecoMatcher', TrgTrackCollectionName=neurotrigger.hwneurotracks,
310 hitCollectionName=neurotrigger.hwneuroinputsegmenthits, axialOnly=
True)
311 path.add_module(
'CDCTriggerRecoMatcher', TrgTrackCollectionName=neurotrigger.hwsimneurotracks,
312 hitCollectionName=neurotrigger.hwneuroinputsegmenthits, axialOnly=
True)
313 path.add_module(
'CDCTriggerRecoMatcher', TrgTrackCollectionName=neurotrigger.hwneuroinput2dfindertracks,
314 hitCollectionName=neurotrigger.hwneuroinputsegmenthits, axialOnly=
True)
315 path.add_module(
'CDCTriggerNeuroDQMOnline', histogramDirectoryName=
"TRGCDCTNN2", useRecoTracks=
True)
318 if (components
is None or 'TRG' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
320 trggdldqm_skim = b2.register_module(
'TRGGDLDQM')
321 trggdldqm_skim.param(
'skim', 1)
322 path.add_module(trggdldqm_skim)
324 trgtopdqm_skim = b2.register_module(
'TRGTOPDQM')
325 trgtopdqm_skim.param(
'skim', 1)
326 path.add_module(trgtopdqm_skim)
329 if (components
is None or 'SVD' in components
or 'PXD' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
330 if (dqm_environment ==
"hlt"):
331 path.add_module(
'TrackingHLTDQM')
333 path.add_module(
'ParallelTrackFilter', min_d0=-0.5, max_d0=0.5, min_z0=-1, max_z0=1,
334 inputArrayName=
"", outputINArrayName=
"TracksFromIP", outputOUTArrayName=
"TracksNotFromIP")
335 path.add_module(
'TrackingExpressRecoDQM', histogramDirectoryName=
"TrackingERDQM_FromIP",
336 tracksStoreArrayName=
"TracksFromIP", histogramTitleSuffix=
" - Tracks from IP") \
337 .set_name(
"TrackingExpressRecoDQM_FromIP")
338 path.add_module(
'TrackingExpressRecoDQM', histogramDirectoryName=
"TrackingERDQM_NotFromIP",
339 tracksStoreArrayName=
"TracksNotFromIP", histogramTitleSuffix=
" - Tracks not from IP") \
340 .set_name(
"TrackingExpressRecoDQM_NotFromIP")
343 if (components
is None or 'ARICH' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
344 path.add_module(
'ARICHDQM')
346 if dqm_mode
in [
"dont_care",
"filtered"]:
348 add_analysis_dqm(path)
349 if dqm_environment ==
"expressreco" and (dqm_mode
in [
"dont_care"]):
350 add_mirabelle_dqm(path)
353 if (components
is None or (
'KLM' in components
and 'CDC' in components))
and (dqm_mode
in [
"dont_care",
"filtered"]):
354 path.add_module(
"KLMDQM2", MuonListName=
'mu+:KLMDQM',
355 MinimalMatchingDigits=12,
356 MinimalMatchingDigitsOuterLayers=0,
357 MinimalMomentumNoOuterLayers=4.0,
358 SoftwareTriggerName=
"")
361 if dqm_mode
in [
"dont_care",
"all_events"]:
363 path.add_module(
'DAQMonitor')
def add_neurotrigger_hw(path, nntweightfile=None, debug_level=4, debugout=False, **kwargs)