12from svd
import add_svd_create_recodigits
14from geometry
import check_components
15from analysisDQM
import add_analysis_dqm, add_mirabelle_dqm, get_hadB_path
19def 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 bandwidth 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")
111 histogramDirectoryName=
"TrackingAbort_before_filter",
112 ).set_name(
"TrackingAbortDQM_before_filter")
114 path.add_module(
"DetectorOccupanciesDQM", histogramDirectoryName=
"DetectorOccupancies_before_filter").set_name(
115 "DetectorOccupanciesDQM_before_filter")
117 path.add_module(
"StatisticsTimingHLTDQM",
118 createHLTUnitHistograms=create_hlt_unit_histograms,
121 path.add_module(
'TTDDQM')
123 if 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",
"passive_veto"],
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(
"StatisticsTimingHLTDQM",
200 histogramDirectoryName=
"timing_statistics_after_filter"
201 ).set_name(
"StatisticsTimingHLTDQM_after_filter")
203 path.add_module(
"TrackingAbortDQM")
205 path.add_module(
"DetectorOccupanciesDQM")
209 "SoftwareTriggerHLTDQM",
210 cutResultIdentifiers={
211 "skim": {
"skim": hlt_skim_lines_in_plot},
213 cutResultIdentifiersIgnored={
218 createTotalResultHistograms=
False,
219 createExpRunEventHistograms=
False,
220 histogramDirectoryName=
"softwaretrigger_skim_nobhabha",
221 ).set_name(
"SoftwareTriggerHLTDQM_skim_nobhabha")
223 if dqm_environment ==
"hlt" and (dqm_mode
in [
"dont_care",
"filtered"]):
225 if components
is None or 'SVD' in components:
226 svdunpackerdqm = b2.register_module(
'SVDUnpackerDQM')
227 path.add_module(svdunpackerdqm)
230 if (components
is None or 'CDC' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
231 cdcdqm = b2.register_module(
'cdcDQM7')
232 path.add_module(cdcdqm)
234 module_names = [m.name()
for m
in path.modules()]
235 if (
'SoftwareTrigger' in module_names):
236 cdcdedxdqm = b2.register_module(
'CDCDedxDQM')
237 path.add_module(cdcdedxdqm)
239 if dqm_environment ==
"expressreco":
240 path.add_module(
'CDCDQM')
243 if (components
is None or 'ECL' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
244 ecldqm = b2.register_module(
'ECLDQM')
245 path.add_module(ecldqm)
246 ecldqmext = b2.register_module(
'ECLDQMEXTENDED')
247 path.add_module(ecldqmext)
248 path.add_module(
'ECLDQMOutOfTimeDigits')
249 path.add_module(
'ECLDQMConnectedRegions')
251 if dqm_environment ==
"expressreco":
252 path.add_module(
'ECLDQMInjection', histogramDirectoryName=
'ECLINJ')
255 if (components
is None or 'TOP' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
256 topdqm = b2.register_module(
'TOPDQM')
257 path.add_module(topdqm)
260 if (components
is None or 'KLM' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
261 klmdqm = b2.register_module(
"KLMDQM")
262 path.add_module(klmdqm)
265 if (components
is None or 'TRG' in components)
and (dqm_mode
in [
"dont_care",
"before_filter"]):
267 trgecldqm = b2.register_module(
'TRGECLDQM')
268 path.add_module(trgecldqm)
269 trgecltimingdqm = b2.register_module(
'TRGECLEventTimingDQM')
270 path.add_module(trgecltimingdqm)
272 trggdldqm = b2.register_module(
'TRGGDLDQM')
273 trggdldqm.param(
'skim', 0)
274 path.add_module(trggdldqm)
276 trggrldqm = b2.register_module(
'TRGGRLDQM')
277 path.add_module(trggrldqm)
279 nmod_tsf = [0, 1, 2, 3, 4, 5, 6]
280 for mod_tsf
in nmod_tsf:
281 path.add_module(
'TRGCDCTSFDQM', TSFMOD=mod_tsf)
283 trgcdct2ddqm = b2.register_module(
'TRGCDCT2DDQM')
284 path.add_module(trgcdct2ddqm)
286 nmod_t3d = [0, 1, 2, 3]
287 for mod_t3d
in nmod_t3d:
288 path.add_module(
'TRGCDCT3DConverter',
289 hitCollectionName=
'FirmCDCTriggerSegmentHits' + str(mod_t3d),
290 addTSToDatastore=
True,
291 EventTimeName=
'FirmBinnedEventT0' + str(mod_t3d),
292 addEventTimeToDatastore=
True,
293 inputCollectionName=
'FirmTRGCDC2DFinderTracks' + str(mod_t3d),
294 add2DFinderToDatastore=
True,
295 outputCollectionName=
'FirmTRGCDC3DFitterTracks' + str(mod_t3d),
296 add3DToDatastore=
True,
298 firmwareResultCollectionName=
'TRGCDCT3DUnpackerStore' + str(mod_t3d),
300 path.add_module(
'TRGCDCT3DDQM', T3DMOD=mod_t3d)
302 if dqm_environment !=
"expressreco":
304 path.add_module(
'CDCTriggerNeuroDQMOnline', histogramDirectoryName=
"TRGCDCTNN2", useRecoTracks=
False)
305 path.add_module(
'CDCTriggerNeuroDQM')
308 if dqm_environment ==
"expressreco" and (components
is None or 'TRG' in components)
and (dqm_mode
in [
"dont_care"]):
311 path.add_module(
'CDCTriggerRecoMatcher', TrgTrackCollectionName=neurotrigger.hwneurotracks,
312 hitCollectionName=neurotrigger.hwneuroinputsegmenthits, axialOnly=
True)
313 path.add_module(
'CDCTriggerRecoMatcher', TrgTrackCollectionName=neurotrigger.hwsimneurotracks,
314 hitCollectionName=neurotrigger.hwneuroinputsegmenthits, axialOnly=
True)
315 path.add_module(
'CDCTriggerRecoMatcher', TrgTrackCollectionName=neurotrigger.hwneuroinput2dfindertracks,
316 hitCollectionName=neurotrigger.hwneuroinputsegmenthits, axialOnly=
True)
317 path.add_module(
'CDCTriggerNeuroDQMOnline', histogramDirectoryName=
"TRGCDCTNN2", useRecoTracks=
True)
320 if (components
is None or 'TRG' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
322 trggdldqm_skim = b2.register_module(
'TRGGDLDQM')
323 trggdldqm_skim.param(
'skim', 1)
324 path.add_module(trggdldqm_skim)
325 trgeffdqm = b2.register_module(
"TRGEFFDQM")
326 path.add_module(trgeffdqm)
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 produce1Dresiduals=
False, produce2Dresiduals=
False, produceTRClusterPlots=
False) \
341 .set_name(
"TrackingExpressRecoDQM_NotFromIP")
344 if (components
is None or 'ARICH' in components)
and (dqm_mode
in [
"dont_care",
"filtered"]):
345 path.add_module(
'ARICHDQM')
347 if dqm_mode
in [
"dont_care",
"filtered"]:
349 add_analysis_dqm(path)
350 if dqm_environment ==
"expressreco" and (dqm_mode
in [
"dont_care"]):
351 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)