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_environment ==
"expressreco" and (dqm_mode
in [
"dont_care"]):
48 if components
is None or 'PXD' in components:
49 path.add_module(
'PXDDAQDQM', histogramDirectoryName=
'PXDDAQ')
50 path.add_module(
'PXDROIDQM', histogramDirectoryName=
'PXDROI')
51 path.add_module(
'PXDDQMExpressReco', histogramDirectoryName=
'PXDER')
52 path.add_module(
'SetupGenfitExtrapolation')
53 path.add_module(
'PXDROIFinder',
54 recoTrackListName=
'RecoTracks',
55 PXDInterceptListName=
'PXDIntercepts')
58 path.add_module(
'PXDTrackClusterDQM', histogramDirectoryName=
'PXDER')
59 path.add_module(
'PXDInjectionDQM', histogramDirectoryName=
'PXDINJ', eachModule=
True)
61 if components
is None or 'SVD' in components:
63 add_svd_create_recodigits(path)
66 svdunpackerdqm = b2.register_module(
'SVDUnpackerDQM')
67 path.add_module(svdunpackerdqm)
70 'SVDZeroSuppressionEmulator',
72 ShaperDigits=
'SVDShaperDigits',
73 ShaperDigitsIN=
'SVDShaperDigitsZS5',
76 path.add_module(
'SVDDQMInjection', ShaperDigits=
'SVDShaperDigitsZS5')
78 path.add_module(
'SVDDQMExpressReco',
79 offlineZSShaperDigits=
'SVDShaperDigitsZS5')
81 path.add_module(
'SVDDQMHitTime')
83 path.add_module(
'SetupGenfitExtrapolation')
84 path.add_module(
'SVDROIFinder',
85 recoTrackListName=
'RecoTracks',
86 SVDInterceptListName=
'SVDIntercepts')
87 path.add_module(
'SVDDQMEfficiency')
89 path.add_module(
'SVDDQMClustersOnTrack')
91 add_svd_dqm_dose(path,
'SVDShaperDigitsZS5')
94 if components
is None or 'CDC' in components
or 'ECL' in components
or 'TOP' in components:
95 eventT0DQMmodule = b2.register_module(
'EventT0DQM')
96 path.add_module(eventT0DQMmodule)
98 if dqm_environment ==
"hlt" and (dqm_mode
in [
"dont_care",
"before_filter"]):
100 "SoftwareTriggerHLTDQM",
101 createHLTUnitHistograms=create_hlt_unit_histograms,
102 createTotalResultHistograms=
False,
103 createExpRunEventHistograms=
False,
104 createErrorFlagHistograms=
True,
105 cutResultIdentifiers={},
106 histogramDirectoryName=
"softwaretrigger_before_filter",
107 pathLocation=
"before filter",
108 ).set_name(
"SoftwareTriggerHLTDQM_before_filter")
112 histogramDirectoryName=
"TrackingAbort_before_filter",
113 ).set_name(
"TrackingAbortDQM_before_filter")
115 path.add_module(
"DetectorOccupanciesDQM", histogramDirectoryName=
"DetectorOccupancies_before_filter").set_name(
116 "DetectorOccupanciesDQM_before_filter")
118 path.add_module(
"StatisticsTimingHLTDQM",
119 createHLTUnitHistograms=create_hlt_unit_histograms,
122 path.add_module(
'TTDDQM')
124 if dqm_environment ==
"hlt" and (dqm_mode
in [
"dont_care",
"filtered"]):
126 hlt_trigger_lines_in_plot = []
127 hlt_skim_lines_in_plot = []
129 hlt_trigger_lines_per_unit_in_plot = [
130 "ge3_loose_tracks_inc_1_tight_not_ee2leg",
131 "Elab_gt_0.5_plus_2_others_with_Elab_gt_0.18_plus_no_clust_with_Ecms_gt_2.0",
133 "Estargt2_GeV_cluster",
135 cutResultIdentifiers = {}
137 from softwaretrigger
import filter_categories, skim_categories
139 filter_cat = [method
for method
in dir(filter_categories)
if method.startswith(
'__')
is False if method !=
'RESULTS']
140 skim_cat = [method
for method
in dir(skim_categories)
if method.startswith(
'__')
is False]
142 def read_lines(category):
143 return [i.split(
" ", 1)[1].replace(
" ",
"_")
for i
in category]
146 cutResultIdentifiers[i] = {
"filter": read_lines(getattr(filter_categories, i))}
147 hlt_trigger_lines_in_plot += read_lines(getattr(filter_categories, i))
150 cutResultIdentifiers[i] = {
"skim": read_lines(getattr(skim_categories, i))}
151 hlt_skim_lines_in_plot += read_lines(getattr(skim_categories, i))
153 cutResultIdentifiers[
"skim"] = {
"skim": hlt_skim_lines_in_plot}
154 cutResultIdentifiers[
"filter"] = {
"filter": hlt_trigger_lines_in_plot}
156 additionalL1Identifiers = [
191 "SoftwareTriggerHLTDQM",
192 cutResultIdentifiers=cutResultIdentifiers,
193 l1Identifiers=[
"fff",
"ffo",
"lml0",
"ffb",
"fp",
"passive_veto"],
194 additionalL1Identifiers=additionalL1Identifiers,
195 createHLTUnitHistograms=create_hlt_unit_histograms,
196 cutResultIdentifiersPerUnit=hlt_trigger_lines_per_unit_in_plot,
197 pathLocation=
"after filter",
200 path.add_module(
"StatisticsTimingHLTDQM",
201 histogramDirectoryName=
"timing_statistics_after_filter"
202 ).set_name(
"StatisticsTimingHLTDQM_after_filter")
204 path.add_module(
"TrackingAbortDQM")
206 path.add_module(
"DetectorOccupanciesDQM")
210 "SoftwareTriggerHLTDQM",
211 cutResultIdentifiers={
212 "skim": {
"skim": hlt_skim_lines_in_plot},
214 cutResultIdentifiersIgnored={
219 createTotalResultHistograms=
False,
220 createExpRunEventHistograms=
False,
221 histogramDirectoryName=
"softwaretrigger_skim_nobhabha",
222 ).set_name(
"SoftwareTriggerHLTDQM_skim_nobhabha")
224 if dqm_environment ==
"hlt" and (dqm_mode
in [
"dont_care",
"filtered"]):
226 if components
is None or 'SVD' in components:
227 svdunpackerdqm = b2.register_module(
'SVDUnpackerDQM')
228 path.add_module(svdunpackerdqm)
231 if (components
is None or 'CDC' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
232 cdcdqm = b2.register_module(
'cdcDQM7')
233 path.add_module(cdcdqm)
235 module_names = [m.name()
for m
in path.modules()]
236 if (
'SoftwareTrigger' in module_names):
237 cdcdedxdqm = b2.register_module(
'CDCDedxDQM')
238 path.add_module(cdcdedxdqm)
240 if dqm_environment ==
"expressreco":
241 path.add_module(
'CDCDQM')
244 if (components
is None or 'ECL' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
245 ecldqm = b2.register_module(
'ECLDQM')
246 path.add_module(ecldqm)
247 ecldqmext = b2.register_module(
'ECLDQMEXTENDED')
248 path.add_module(ecldqmext)
249 path.add_module(
'ECLDQMOutOfTimeDigits')
250 path.add_module(
'ECLDQMConnectedRegions')
252 if dqm_environment ==
"expressreco":
253 path.add_module(
'ECLDQMInjection', histogramDirectoryName=
'ECLINJ')
256 if (components
is None or 'TOP' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
257 topdqm = b2.register_module(
'TOPDQM')
258 path.add_module(topdqm)
261 if (components
is None or 'KLM' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
262 klmdqm = b2.register_module(
"KLMDQM")
263 path.add_module(klmdqm)
266 if (components
is None or 'TRG' in components)
and (dqm_mode
in [
"dont_care",
"before_filter"]):
268 trgecldqm = b2.register_module(
'TRGECLDQM')
269 path.add_module(trgecldqm)
270 trgecltimingdqm = b2.register_module(
'TRGECLEventTimingDQM')
271 path.add_module(trgecltimingdqm)
273 trggdldqm = b2.register_module(
'TRGGDLDQM')
274 trggdldqm.param(
'skim', 0)
275 path.add_module(trggdldqm)
277 trggrldqm = b2.register_module(
'TRGGRLDQM')
278 path.add_module(trggrldqm)
280 nmod_tsf = [0, 1, 2, 3, 4, 5, 6]
281 for mod_tsf
in nmod_tsf:
282 path.add_module(
'TRGCDCTSFDQM', TSFMOD=mod_tsf)
284 trgcdct2ddqm = b2.register_module(
'TRGCDCT2DDQM')
285 path.add_module(trgcdct2ddqm)
287 nmod_t3d = [0, 1, 2, 3]
288 for mod_t3d
in nmod_t3d:
289 path.add_module(
'TRGCDCT3DConverter',
290 hitCollectionName=
'FirmCDCTriggerSegmentHits' + str(mod_t3d),
291 addTSToDatastore=
True,
292 EventTimeName=
'FirmBinnedEventT0' + str(mod_t3d),
293 addEventTimeToDatastore=
True,
294 inputCollectionName=
'FirmTRGCDC2DFinderTracks' + str(mod_t3d),
295 add2DFinderToDatastore=
True,
296 outputCollectionName=
'FirmTRGCDC3DFitterTracks' + str(mod_t3d),
297 add3DToDatastore=
True,
299 firmwareResultCollectionName=
'TRGCDCT3DUnpackerStore' + str(mod_t3d),
301 path.add_module(
'TRGCDCT3DDQM', T3DMOD=mod_t3d)
303 if dqm_environment !=
"expressreco":
305 path.add_module(
'CDCTriggerNeuroDQMOnline', histogramDirectoryName=
"TRGCDCTNN2", useRecoTracks=
False)
306 path.add_module(
'CDCTriggerNeuroDQM')
309 if dqm_environment ==
"expressreco" and (components
is None or 'TRG' in components)
and (dqm_mode
in [
"dont_care"]):
312 path.add_module(
'CDCTriggerRecoMatcher', TrgTrackCollectionName=neurotrigger.hwneurotracks,
313 hitCollectionName=neurotrigger.hwneuroinputsegmenthits, axialOnly=
True)
314 path.add_module(
'CDCTriggerRecoMatcher', TrgTrackCollectionName=neurotrigger.hwsimneurotracks,
315 hitCollectionName=neurotrigger.hwneuroinputsegmenthits, axialOnly=
True)
316 path.add_module(
'CDCTriggerRecoMatcher', TrgTrackCollectionName=neurotrigger.hwneuroinput2dfindertracks,
317 hitCollectionName=neurotrigger.hwneuroinputsegmenthits, axialOnly=
True)
318 path.add_module(
'CDCTriggerNeuroDQMOnline', histogramDirectoryName=
"TRGCDCTNN2", useRecoTracks=
True)
321 if (components
is None or 'TRG' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
323 trggdldqm_skim = b2.register_module(
'TRGGDLDQM')
324 trggdldqm_skim.param(
'skim', 1)
325 path.add_module(trggdldqm_skim)
326 trgeffdqm = b2.register_module(
"TRGEFFDQM")
327 path.add_module(trgeffdqm)
330 if (components
is None or 'SVD' in components
or 'PXD' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
331 if (dqm_environment ==
"hlt"):
332 path.add_module(
'TrackingHLTDQM')
334 path.add_module(
'ParallelTrackFilter', min_d0=-0.5, max_d0=0.5, min_z0=-1, max_z0=1,
335 inputArrayName=
"", outputINArrayName=
"TracksFromIP", outputOUTArrayName=
"TracksNotFromIP")
336 path.add_module(
'TrackingExpressRecoDQM', histogramDirectoryName=
"TrackingERDQM_FromIP",
337 tracksStoreArrayName=
"TracksFromIP", histogramTitleSuffix=
" - Tracks from IP") \
338 .set_name(
"TrackingExpressRecoDQM_FromIP")
339 path.add_module(
'TrackingExpressRecoDQM', histogramDirectoryName=
"TrackingERDQM_NotFromIP",
340 tracksStoreArrayName=
"TracksNotFromIP", histogramTitleSuffix=
" - Tracks not from IP",
341 produce1Dresiduals=
False, produce2Dresiduals=
False, produceTRClusterPlots=
False) \
342 .set_name(
"TrackingExpressRecoDQM_NotFromIP")
345 if (components
is None or 'ARICH' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
346 path.add_module(
'ARICHDQM')
348 if dqm_mode
in [
"dont_care",
"filtered"]:
350 add_analysis_dqm(path)
351 if dqm_environment ==
"expressreco" and (dqm_mode
in [
"dont_care"]):
352 add_mirabelle_dqm(path)
355 if (components
is None or (
'KLM' in components
and 'CDC' in components))
and (dqm_mode
in [
"dont_care",
"filtered"]):
356 path.add_module(
"KLMDQM2", MuonListName=
'mu+:KLMDQM',
357 MinimalMatchingDigits=12,
358 MinimalMatchingDigitsOuterLayers=0,
359 MinimalMomentumNoOuterLayers=4.0,
360 SoftwareTriggerName=
"")
363 if dqm_mode
in [
"dont_care",
"all_events"]:
365 path.add_module(
'DAQMonitor')
def add_neurotrigger_hw(path, nntweightfile=None, debug_level=4, debugout=False, **kwargs)