13 from svd
import add_svd_create_recodigits
15 from geometry
import check_components
16 from analysisDQM
import add_analysis_dqm, add_mirabelle_dqm
19 def add_common_dqm(path, components=None, dqm_environment="expressreco", dqm_mode="dont_care", create_hlt_unit_histograms=False):
21 This function adds DQMs which are common for Cosmic runs and Collion runs
23 @param components: A list of the detector components which are available in this
25 @param dqm_environment: The environment the DQM modules are running in
26 "expressreco" (default) if running on the ExpressReco system
27 "hlt" if running on the HLT online reconstructon nodes
28 If running on the hlt, you may want to output less or other DQM plots
29 due to the limited bandwith of the HLT nodes.
30 @param dqm_mode: How to split up the path for online/HLT.
31 For dqm_mode == "dont_care" all the DQM modules should be added.
32 For dqm_mode == "all_events" only the DQM modules which should run on all events
33 (filtered and dismissed) should be added
34 For dqm_mode == "before_reco" only the DQM modules which should run before
36 For dqm_mode == "filtered" only the DQM modules which should run on filtered
37 events should be added
38 @param create_hlt_unit_histograms: Parameter for SoftwareTiggerHLTDQMModule.
39 Should be True only when running on the HLT servers
41 assert dqm_mode
in [
"dont_care",
"all_events",
"filtered",
"before_filter"]
43 check_components(components)
45 if dqm_environment ==
"expressreco" and (dqm_mode
in [
"dont_care"]):
47 if components
is None or 'PXD' in components:
48 path.add_module(
'PXDDAQDQM', histogramDirectoryName=
'PXDDAQ')
49 path.add_module(
'PXDROIDQM', histogramDirectoryName=
'PXDROI')
50 path.add_module(
'PXDDQMExpressReco', histogramDirectoryName=
'PXDER')
51 path.add_module(
'SetupGenfitExtrapolation')
52 path.add_module(
'PXDROIFinder',
53 recoTrackListName=
'RecoTracks',
54 PXDInterceptListName=
'PXDIntercepts')
57 path.add_module(
'PXDTrackClusterDQM', histogramDirectoryName=
'PXDER')
58 path.add_module(
'PXDInjectionDQM', histogramDirectoryName=
'PXDINJ', eachModule=
True)
60 if components
is None or 'SVD' in components:
62 add_svd_create_recodigits(path)
65 svdunpackerdqm = b2.register_module(
'SVDUnpackerDQM')
66 path.add_module(svdunpackerdqm)
69 'SVDZeroSuppressionEmulator',
71 ShaperDigits=
'SVDShaperDigits',
72 ShaperDigitsIN=
'SVDShaperDigitsZS5',
75 path.add_module(
'SVDDQMInjection', ShaperDigits=
'SVDShaperDigitsZS5')
77 path.add_module(
'SVDDQMExpressReco',
78 offlineZSShaperDigits=
'SVDShaperDigitsZS5')
80 path.add_module(
'SVDDQMHitTime')
82 path.add_module(
'SetupGenfitExtrapolation')
83 path.add_module(
'SVDROIFinder',
84 recoTrackListName=
'RecoTracks',
85 SVDInterceptListName=
'SVDIntercepts')
86 path.add_module(
'SVDDQMEfficiency')
88 path.add_module(
'SVDDQMClustersOnTrack')
90 add_svd_dqm_dose(path,
'SVDShaperDigitsZS5')
93 if components
is None or 'CDC' in components
or 'ECL' in components
or 'TOP' in components:
94 eventT0DQMmodule = b2.register_module(
'EventT0DQM')
95 path.add_module(eventT0DQMmodule)
97 if dqm_environment ==
"hlt" and (dqm_mode
in [
"dont_care",
"before_filter"]):
99 "SoftwareTriggerHLTDQM",
100 createHLTUnitHistograms=create_hlt_unit_histograms,
101 createTotalResultHistograms=
False,
102 createExpRunEventHistograms=
False,
103 createErrorFlagHistograms=
True,
104 cutResultIdentifiers={},
105 histogramDirectoryName=
"softwaretrigger_before_filter",
106 pathLocation=
"before filter",
107 ).set_name(
"SoftwareTriggerHLTDQM_before_filter")
109 path.add_module(
"StatisticsTimingHLTDQM",
110 createHLTUnitHistograms=create_hlt_unit_histograms,
113 if dqm_environment ==
"hlt" and (dqm_mode
in [
"dont_care",
"filtered"]):
115 hlt_trigger_lines_in_plot = []
116 hlt_skim_lines_in_plot = []
118 hlt_trigger_lines_per_unit_in_plot = [
119 "ge3_loose_tracks_inc_1_tight_not_ee2leg",
120 "Elab_gt_0.5_plus_2_others_with_Elab_gt_0.18_plus_no_clust_with_Ecms_gt_2.0",
122 "Estargt2_GeV_cluster",
124 cutResultIdentifiers = {}
126 from softwaretrigger
import filter_categories, skim_categories
128 filter_cat = [method
for method
in dir(filter_categories)
if method.startswith(
'__')
is False if method !=
'RESULTS']
129 skim_cat = [method
for method
in dir(skim_categories)
if method.startswith(
'__')
is False]
131 def read_lines(category):
132 return [i.split(
" ", 1)[1].replace(
" ",
"_")
for i
in category]
135 cutResultIdentifiers[i] = {
"filter": read_lines(getattr(filter_categories, i))}
136 hlt_trigger_lines_in_plot += read_lines(getattr(filter_categories, i))
139 cutResultIdentifiers[i] = {
"skim": read_lines(getattr(skim_categories, i))}
140 hlt_skim_lines_in_plot += read_lines(getattr(skim_categories, i))
142 cutResultIdentifiers[
"skim"] = {
"skim": hlt_skim_lines_in_plot}
143 cutResultIdentifiers[
"filter"] = {
"filter": hlt_trigger_lines_in_plot}
145 additionalL1Identifiers = [
180 "SoftwareTriggerHLTDQM",
181 cutResultIdentifiers=cutResultIdentifiers,
182 l1Identifiers=[
"fff",
"ffo",
"lml0",
"ffb",
"fp"],
183 additionalL1Identifiers=additionalL1Identifiers,
184 createHLTUnitHistograms=create_hlt_unit_histograms,
185 cutResultIdentifiersPerUnit=hlt_trigger_lines_per_unit_in_plot,
186 pathLocation=
"after filter",
190 "SoftwareTriggerHLTDQM",
191 cutResultIdentifiers={
192 "skim": {
"skim": hlt_skim_lines_in_plot},
194 cutResultIdentifiersIgnored={
199 createTotalResultHistograms=
False,
200 createExpRunEventHistograms=
False,
201 histogramDirectoryName=
"softwaretrigger_skim_nobhabha",
202 ).set_name(
"SoftwareTriggerHLTDQM_skim_nobhabha")
204 if dqm_environment ==
"hlt" and (dqm_mode
in [
"dont_care",
"filtered"]):
206 if components
is None or 'SVD' in components:
207 svdunpackerdqm = b2.register_module(
'SVDUnpackerDQM')
208 path.add_module(svdunpackerdqm)
211 if (components
is None or 'CDC' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
212 cdcdqm = b2.register_module(
'cdcDQM7')
213 path.add_module(cdcdqm)
215 module_names = [m.name()
for m
in path.modules()]
216 if (
'SoftwareTrigger' in module_names):
217 cdcdedxdqm = b2.register_module(
'CDCDedxDQM')
218 path.add_module(cdcdedxdqm)
220 if dqm_environment ==
"expressreco":
221 path.add_module(
'CDCDQM')
224 if (components
is None or 'ECL' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
225 ecldqm = b2.register_module(
'ECLDQM')
226 path.add_module(ecldqm)
227 ecldqmext = b2.register_module(
'ECLDQMEXTENDED')
228 path.add_module(ecldqmext)
230 if dqm_environment ==
"expressreco":
231 path.add_module(
'ECLDQMInjection', histogramDirectoryName=
'ECLINJ')
234 if (components
is None or 'TOP' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
235 topdqm = b2.register_module(
'TOPDQM')
236 path.add_module(topdqm)
239 if (components
is None or 'KLM' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
240 klmdqm = b2.register_module(
"KLMDQM")
241 path.add_module(klmdqm)
244 if (components
is None or 'TRG' in components)
and (dqm_mode
in [
"dont_care",
"before_filter"]):
246 trgecldqm = b2.register_module(
'TRGECLDQM')
247 path.add_module(trgecldqm)
249 trggdldqm = b2.register_module(
'TRGGDLDQM')
250 trggdldqm.param(
'skim', 0)
251 path.add_module(trggdldqm)
253 trgtopdqm = b2.register_module(
'TRGTOPDQM')
254 trgtopdqm.param(
'skim', 0)
255 path.add_module(trgtopdqm)
257 trggrldqm = b2.register_module(
'TRGGRLDQM')
258 path.add_module(trggrldqm)
260 nmod_tsf = [0, 1, 2, 3, 4, 5, 6]
261 for mod_tsf
in nmod_tsf:
262 path.add_module(
'TRGCDCTSFDQM', TSFMOD=mod_tsf)
264 trgcdct2ddqm = b2.register_module(
'TRGCDCT2DDQM')
265 path.add_module(trgcdct2ddqm)
267 nmod_t3d = [0, 1, 2, 3]
268 for mod_t3d
in nmod_t3d:
269 path.add_module(
'TRGCDCT3DConverter',
270 hitCollectionName=
'FirmCDCTriggerSegmentHits' + str(mod_t3d),
271 addTSToDatastore=
True,
272 EventTimeName=
'FirmBinnedEventT0' + str(mod_t3d),
273 addEventTimeToDatastore=
True,
274 inputCollectionName=
'FirmTRGCDC2DFinderTracks' + str(mod_t3d),
275 add2DFinderToDatastore=
True,
276 outputCollectionName=
'FirmTRGCDC3DFitterTracks' + str(mod_t3d),
277 add3DToDatastore=
True,
279 firmwareResultCollectionName=
'TRGCDCT3DUnpackerStore' + str(mod_t3d),
281 path.add_module(
'TRGCDCT3DDQM', T3DMOD=mod_t3d)
283 path.add_module(
'CDCTriggerNeuroDQM')
285 if (components
is None or 'TRG' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
287 trggdldqm_skim = b2.register_module(
'TRGGDLDQM')
288 trggdldqm_skim.param(
'skim', 1)
289 path.add_module(trggdldqm_skim)
291 trgtopdqm_skim = b2.register_module(
'TRGTOPDQM')
292 trgtopdqm_skim.param(
'skim', 1)
293 path.add_module(trgtopdqm_skim)
296 if (components
is None or 'SVD' in components
or 'PXD' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
297 if (dqm_environment ==
"hlt"):
298 path.add_module(
'TrackingHLTDQM')
300 path.add_module(
'ParallelTrackFilter', min_d0=-0.5, max_d0=0.5, min_z0=-1, max_z0=1,
301 inputArrayName=
"", outputINArrayName=
"TracksFromIP", outputOUTArrayName=
"TracksNotFromIP")
302 path.add_module(
'TrackingExpressRecoDQM', histogramDirectoryName=
"TrackingERDQM_FromIP",
303 tracksStoreArrayName=
"TracksFromIP").set_name(
"TrackingExpressRecoDQM_FromIP")
304 path.add_module(
'TrackingExpressRecoDQM', histogramDirectoryName=
"TrackingERDQM_NotFromIP",
305 tracksStoreArrayName=
"TracksNotFromIP").set_name(
"TrackingExpressRecoDQM_NotFromIP")
308 if (components
is None or 'ARICH' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
309 path.add_module(
'ARICHDQM')
311 if dqm_mode
in [
"dont_care",
"filtered"]:
313 add_analysis_dqm(path)
314 if dqm_environment ==
"expressreco" and (dqm_mode
in [
"dont_care"]):
315 add_mirabelle_dqm(path)
318 if dqm_mode
in [
"dont_care",
"all_events"]:
320 path.add_module(
'DAQMonitor')