ATLAS Offline Software
Loading...
Searching...
No Matches
ThinInDetClustersConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2#
3# Heavily Inspired by ThinInDetForwardTrackParticles.py
4
5__doc__ = """
6 Instantiate the InDetTrackParticles Cluster Thinning
7 """
8
9from AthenaCommon.Logging import logging
10from AthenaConfiguration.ComponentFactory import CompFactory
11from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
12
13def ThinInDetClustersCfg(flags, name="ThinInDetClustersAlg", **kwargs):
14 mlog = logging.getLogger(name)
15 mlog.info("Starting InDetTrackParticle Cluster Thinning configuration")
16 acc = ComponentAccumulator()
17
18 kwargs.setdefault("StreamName", "StreamAOD")
19
20 if not flags.Detector.EnablePixel:
21 kwargs.setdefault("InDetTrackStatesPixKey", "")
22 kwargs.setdefault("InDetTrackMeasurementsPixKey", "")
23 if not flags.Detector.EnableSCT:
24 kwargs.setdefault("InDetTrackStatesSctKey", "")
25 kwargs.setdefault("InDetTrackMeasurementsSctKey", "")
26 if not flags.Detector.EnableTRT:
27 kwargs.setdefault("InDetTrackStatesTrtKey", "")
28 kwargs.setdefault("InDetTrackMeasurementsTrtKey", "")
29
30 if not flags.Tracking.thinPixelClustersOnTrack:
31 kwargs.setdefault("ThinPixelHitsOnTrack", False)
32 if not flags.Tracking.thinSCTClustersOnTrack:
33 kwargs.setdefault("ThinSCTHitsOnTrack", False)
34 if not flags.Tracking.thinTRTClustersOnTrack:
35 kwargs.setdefault("ThinTRTHitsOnTrack", False)
36
37 kwargs.setdefault("InDetTrackParticlesKey", "InDetTrackParticles")
38 kwargs.setdefault("SelectionString", "InDetTrackParticles.pt>10*GeV")
39
40
43
44 if flags.Tracking.thinPixelClustersOnTrack and not flags.Tracking.writeExtendedSi_PRDInfo:
45 msg = "Requested to thin pixel hits on track, but flags.Tracking.writeExtendedSi_PRDInfo is set to false, so the relevant containers will not be written to the AOD. Cannot add ThinInDetClustersAlg."
46 mlog.error( msg )
47 raise RuntimeError( msg )
48
49 if flags.Tracking.thinSCTClustersOnTrack and not flags.Tracking.writeExtendedSi_PRDInfo:
50 msg = "Requested to thin SCT hits on track, but flags.Tracking.writeExtendedSi_PRDInfo is set to false, so the relevant containers will not be written to the AOD. Cannot add ThinInDetClustersAlg."
51 mlog.error( msg )
52 raise RuntimeError( msg )
53
54 if flags.Tracking.thinTRTClustersOnTrack and not flags.Tracking.writeExtendedTRT_PRDInfo:
55 msg = "Requested to thin TRT hits on track, but flags.Tracking.writeExtendedTRT_PRDInfo is set to false, so the relevant containers will not be written to the AOD. Cannot add ThinInDetClustersAlg."
56 mlog.error( msg )
57 raise RuntimeError( msg )
58
59 nTrackContainers = len(flags.Tracking.thinInDetClustersTrackContainers)
60 nSelectionStrings = len(flags.Tracking.thinInDetClustersSelectionStrings)
61 nPixelMSOSContainers = len(flags.Tracking.thinInDetClustersPixelMSOSContainers)
62 nSCTMSOSContainers = len(flags.Tracking.thinInDetClustersSCTMSOSContainers)
63 nTRTMSOSContainers = len(flags.Tracking.thinInDetClustersTRTMSOSContainers)
64
65 if not nTrackContainers == nSelectionStrings:
66 msg = f"Number of selection strings ({nSelectionStrings}) does not match number of track containers ({nTrackContainers}). Cannot add ThinInDetClustersAlg."
67 mlog.error( msg )
68 raise RuntimeError( msg )
69
70 if flags.Tracking.thinPixelClustersOnTrack:
71 if not nTrackContainers == nPixelMSOSContainers:
72 msg = f"Number of pixel MSOS containers ({nPixelMSOSContainers}) does not match number of track containers ({nTrackContainers}). Cannot add ThinInDetClustersAlg."
73 mlog.error( msg )
74 raise RuntimeError( msg )
75
76 if flags.Tracking.thinSCTClustersOnTrack:
77 if not nTrackContainers == nSCTMSOSContainers:
78 msg = f"Number of SCT MSOS containers ({nSCTMSOSContainers}) does not match number of track containers ({nTrackContainers}). Cannot add ThinInDetClustersAlg."
79 mlog.error( msg )
80 raise RuntimeError( msg )
81
82 if flags.Tracking.thinTRTClustersOnTrack:
83 if not nTrackContainers == nTRTMSOSContainers:
84 msg = f"Number of TRT MSOS containers ({nTRTMSOSContainers}) does not match number of track containers ({nTrackContainers}). Cannot add ThinInDetClustersAlg."
85 mlog.error( msg )
86 raise RuntimeError( msg )
87
88 for idx,trackContainer in enumerate(flags.Tracking.thinInDetClustersTrackContainers):
89 selectionString = flags.Tracking.thinInDetClustersSelectionStrings[idx]
90 if trackContainer not in selectionString:
91 mlog.warning(f"Track container {trackContainer} is not used in the associated selection string: {selectionString}.")
92
93
96
97 for idx,trackContainer in enumerate(flags.Tracking.thinInDetClustersTrackContainers):
98 kwargs["InDetTrackParticlesKey"]= trackContainer
99 kwargs["SelectionString"] = flags.Tracking.thinInDetClustersSelectionStrings[idx]
100
101 # TODO: Test selection strings for seeds and candidates
102 # Change selections without keyword-based argument without changing code (flags)
103
104 # Thin hits on track from requested detector technologies
105 if flags.Tracking.thinPixelClustersOnTrack:
106 kwargs["ThinPixelHitsOnTrack"] = True
107 kwargs["InDetTrackStatesPixKey"] = flags.Tracking.thinInDetClustersPixelMSOSContainers[idx]
108 kwargs["InDetTrackMeasurementsPixKey"] = (
109 "ITkPixelMeasurements" if flags.Detector.GeometryITk
110 else "PixelClusters")
111 if flags.Tracking.thinSCTClustersOnTrack:
112 kwargs["ThinSCTHitsOnTrack"] = True
113 kwargs["InDetTrackStatesSctKey"] = flags.Tracking.thinInDetClustersSCTMSOSContainers[idx]
114 kwargs["InDetTrackMeasurementsSctKey"] = (
115 "ITkStripMeasurements" if flags.Detector.GeometryITk
116 else "SCT_Clusters")
117 if flags.Tracking.thinTRTClustersOnTrack:
118 kwargs["ThinTRTHitsOnTrack"] = True
119 kwargs["InDetTrackStatesTrtKey"] = flags.Tracking.thinInDetClustersTRTMSOSContainers[idx]
120 kwargs["InDetTrackMeasurementsTrtKey"] = "TRT_DriftCircles"
121
122 acc.addEventAlgo(CompFactory.ThinInDetClustersAlg(name+"_"+trackContainer, **kwargs))
123
124 return acc
125
126
127if __name__ == "__main__":
128 from AthenaConfiguration.AllConfigFlags import initConfigFlags
129 from AthenaConfiguration.TestDefaults import defaultTestFiles
130 from AthenaConfiguration.ComponentAccumulator import printProperties
131 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
132 flags = initConfigFlags()
133 flags.Input.Files = defaultTestFiles.RDO_RUN2
134 flags.Tracking.writeExtendedSi_PRDInfo=True
135 flags.Tracking.writeExtendedTRT_PRDInfo=True
136 flags.Tracking.thinPixelClustersOnTrack=True
137 flags.Tracking.thinSCTClustersOnTrack=True
138 flags.Tracking.thinTRTClustersOnTrack=True
139 flags.Output.doWriteAOD = True # To test the AOD parts
140 flags.lock()
141 acc = MainServicesCfg(flags)
142 acc.merge(ThinInDetClustersCfg(flags))
143 mlog = logging.getLogger("ThinInDetClustersConfigTest")
144 printProperties(
145 mlog,
146 acc.getEventAlgo("ThinInDetClustersAlg"),
147 nestLevel=1,
148 printDefaults=True,
149 )
150
151 with open("thinindetclusterscfg.pkl", "wb") as f:
152 acc.store(f)
ThinInDetClustersCfg(flags, name="ThinInDetClustersAlg", **kwargs)