ATLAS Offline Software
Loading...
Searching...
No Matches
MuonConfigFlags.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.AthConfigFlags import AthConfigFlags
4from AthenaConfiguration.Enums import BeamType, LHCPeriod, ProductionStep, Project, FlagEnum
5
6import re
7
8# Some comments from Ed about existing flags
9# MuonCnvExample
10# - MuonCnvFlags - not sure we need this - it really only configures single properties of the various cablings - we can just do this directly.
11# - MuonCalibFlags - looks like we need this
12
13class GeoTrfCacheMode(FlagEnum):
14
16 SlopyCache = 1
17
21 ActsSlopyALineCond = 2
22
24 SplitCache = 3
25
28 ActsSplitALineCond = 4
29
30 FullCacheCond = 5
31
32class MMClusterBuilderEnum(FlagEnum):
33 """Flag values for Muon.MMClusterCalibRecoTool"""
34 Centroid = "Centroid"
35 ClusterTimeProjection = "ClusterTimeProjection"
36
37def _muonAlignMode(flags):
38 # Small function that determines if the alignment flags should be true or false
39 # follows the logic in https://acode-browser1.usatlas.bnl.gov/lxr/source/athena/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonAlignFlags.py
40 problematic_tags = ['COMCOND-HLT[A-C]-00[01]-00', 'COMCOND-ES1C-00[01]-00', 'COMCOND-REPC-001', 'COMCOND-SIM-01-00']
41 if any(re.match(tag,flags.IOVDb.DatabaseInstance) for tag in problematic_tags):
42 return False
43 elif flags.Input.isMC or not flags.Muon.enableAlignment:
44 return False
45 else:
46 return True
47
49 mcf=AthConfigFlags()
50
51 # stages of processing
52 # 0. Geometry
53
54
55 from AthenaConfiguration.AutoConfigFlags import DetDescrInfo
56
57 mcf.addFlag("Muon.usePhaseIIGeoSetup",lambda prevFlags : prevFlags.Detector.GeometryMuon and
58 DetDescrInfo(prevFlags.GeoModel.AtlasVersion,
59 prevFlags.GeoModel.SQLiteDB ,
60 prevFlags.GeoModel.SQLiteDBFullPath)["Muon"]["useR4Plugin"] )
61
62 mcf.addFlag("Muon.AlignedGeoTrfCacheMode", GeoTrfCacheMode.FullCacheCond, type = GeoTrfCacheMode)
63
64
66 mcf.addFlag("Muon.trackGeometryActiveMaterial", True)
67
69 mcf.addFlag("Muon.trackGeometryPassiveMaterial", lambda prevFlags: prevFlags.Muon.usePhaseIIGeoSetup and \
70 len(prevFlags.Muon.trackGeometryMaterialMap) > 0)
71
72 mcf.addFlag("Muon.trackGeometryMaterialMap", "")
73 # 1. Digitization
74 mcf.addFlag("Muon.doFastMMDigitization", False)
75 mcf.addFlag("Muon.doFastsTGCDigitization",True)
76 mcf.addFlag("Muon.doFastRpcDigitization",True)
78 mcf.addFlag("Muon.setupTruthAlgorithms", lambda prevFlags: prevFlags.Muon.usePhaseIIGeoSetup and \
79 prevFlags.Input.isMC and \
80 not prevFlags.Trigger.doHLT)
81
82
83
84 # 2. Reco MuonRecFlags
85
86
88 try:
89 from TrkConfig.TrkConfigFlags import TrackingComponent
90 mcf.addFlag("Muon.scheduleActsReco", lambda prevFlags: prevFlags.Muon.usePhaseIIGeoSetup and \
91 prevFlags.Tracking.recoChain[0] in [TrackingComponent.ActsChain , TrackingComponent.ActsLegacyChain ])
92 except ImportError:
93 mcf.addFlag("Muon.scheduleActsReco", False)
94
95 try:
96 from ActsConfig.ActsConfigFlags import TrackFitterType
97 mcf.addFlag("Muon.TrackFitterType", TrackFitterType.GlobalChiSquareFitter)
98 except ImportError:
99 mcf.addFlag("Muon.TrackFitterType", "None")
100
101
103 mcf.addFlag("Muon.includePileUpTruth", False)
104
105 mcf.addFlag("Muon.enableMLBucketFilter", False)
106
108 mcf.addFlag("Muon.expressMsTrackAtEntrance", False)
109
113 mcf.addFlag("Muon.buildMETrack", lambda prevFlags: prevFlags.Reco.EnableTracking and\
114 not prevFlags.Muon.MuonTrigger )
115
116 mcf.addFlag("Muon.doMSVertex", True) # Run MS vertex (arXiv:1311.7070)
117 mcf.addFlag("Muon.doSegmentT0Fit",lambda prevFlags : prevFlags.Beam.Type is not BeamType.Collisions) # Fit MDT segments using a variable t0. Used for cosmics and single beam to compensate for large errors on the trigger time.
118 mcf.addFlag("Muon.enableErrorTuning",True) # turn on error tuning to account for misalignments
119 mcf.addFlag("Muon.useLooseErrorTuning",False)
120 mcf.addFlag("Muon.useTGCPriorNextBC",False) # Use TGC measurements from Prior and Next Bunch Crossings. These measurements are available in the real data since somewhere in 2008.
121 mcf.addFlag("Muon.useAlignmentCorrections",True) # Apply alignment corrections to MuonGeoModel. The corrections are read from a COOL database
122
123 mcf.addFlag("Muon.makePRDs",True) # Disable when e.g. re-running from ESD
124
125 mcf.addFlag("Muon.enableNRPC", lambda prevFlags: prevFlags.Detector.GeometryRPC and \
126 prevFlags.Muon.usePhaseIIGeoSetup )
127 # MuonStandaloneFlags.py
128 mcf.addFlag("Muon.printSummary", False) # Print out a summary for each event at each reco stage
129 mcf.addFlag("Muon.segmentOrigin", "Muon") # Can be 'Muon','TruthTracking'
130 # reconstructionMode - I think this is a complete duplication of global.BeamType. Dropping.
131 mcf.addFlag("Muon.strategy", []) # CutSeedsOnTracks, CombineSegInStation, DynamicSeeding, PreferOutsideIn, AllowOneSharedHit, DoRefinement, DoAmbiSolving
132 mcf.addFlag("Muon.straightLineFitMomentum", 2000.0 )
133 #mcf.addFlag("Muon.doSegmentsOnly", True) # Also in MuonRecFlags ... redundant in both?
134 mcf.addFlag("Muon.Chi2NDofCut", 20.0 ) # chi-squared per degree of freedom cut in fitter.
135 mcf.addFlag("Muon.enableCurvedSegmentFinding", False ) # TODO I think this one could possibly be removed, since it really is a Tool level configuration.
136 mcf.addFlag("Muon.updateSegmentSecondCoordinate", lambda prevFlags : prevFlags.Beam.Type is BeamType.Collisions) # Do not use for cosmics or singlebeam
137
138 mcf.addFlag("Muon.useSegmentMatching", lambda prevFlags : prevFlags.Beam.Type is BeamType.Collisions) # Do not use for cosmics or singlebeam
139 mcf.addFlag("Muon.useTrackSegmentMatching", True )
140 mcf.addFlag("Muon.runCommissioningChain", lambda prevFlags: ( False and (prevFlags.Detector.EnableMM or prevFlags.Detector.EnablesTGC) \
141 and prevFlags.Beam.Type is BeamType.Collisions) )
142
143 mcf.addFlag("Muon.applyMMPassivation", lambda prevFlags: prevFlags.Detector.EnableMM and not prevFlags.Common.isOnline and (prevFlags.Common.Project is not Project.AthSimulation \
144 and (prevFlags.Common.ProductionStep not in [ProductionStep.Simulation, ProductionStep.FastChain] or prevFlags.Overlay.DataOverlay)))
145 # CalibFlags
146 mcf.addFlag("Muon.Calib.readMdtJSON", lambda prevFlags: prevFlags.GeoModel.Run > LHCPeriod.Run3 and prevFlags.Muon.usePhaseIIGeoSetup) # Toggle whether the calibration constants are read from the JSON format. Enabled by default for a Run4 geometry read by the muon phase II geometry setup
147 mcf.addFlag("Muon.Calib.fitAnalyticRt", False) #Toggle whether the look-up R-t tables shall undergo an intermediate polynomial fit
148
149 mcf.addFlag("Muon.Calib.readMDTCalibFromBlob", True) # Read mdt tube calibration from blob-folders
150 mcf.addFlag("Muon.Calib.correctMdtRtForBField", lambda prevFlags : (prevFlags.Input.isMC is False and prevFlags.Beam.Type is BeamType.Collisions)) # Apply B-field correction to drift times only for collision data (as done in https://acode-browser1.usatlas.bnl.gov/lxr/source/athena/MuonSpectrometer/MuonCnv/MuonCnvExample/python/MuonCalibFlags.py#0028)
151 mcf.addFlag("Muon.Calib.correctMdtRtForTimeSlewing", lambda prevFlags : prevFlags.Input.isMC is False) # Apply time slewing correction to drift time only for data (as done in https://acode-browser1.usatlas.bnl.gov/lxr/source/athena/MuonSpectrometer/MuonCnv/MuonCnvExample/python/MuonCalibFlags.py#0028)
152
153 mcf.addFlag("Muon.Calib.applySigPropUncert", lambda prevFlags: prevFlags.Muon.usePhaseIIGeoSetup )
154 mcf.addFlag("Muon.Calib.useMLRt", True) # use ML-RT functions from COOL
155 mcf.addFlag("Muon.Calib.applyRtScaling", False) # TODO - apparently not needed, but currently used in MuonCalibConfig. Set false to match https://acode-browser1.usatlas.bnl.gov/lxr/source/athena/MuonSpectrometer/MuonCnv/MuonCnvExample/python/MuonCalibFlags.py#0072
156 mcf.addFlag("Muon.Calib.mdtCalibrationSource", "MDT") # Source for MDT t0s and rts
157 mcf.addFlag("Muon.Calib.mdtPropagationSpeedBeta", lambda prevFlags : 1.0 if prevFlags.Input.isMC else 0.85) #
158
159 mcf.addFlag("Muon.Calib.CscPedFromLocalFile", False)
160 mcf.addFlag("Muon.Calib.CscNoiseFromLocalFile", False)
161 mcf.addFlag("Muon.Calib.CscPSlopeFromLocalFile", False)
162 mcf.addFlag("Muon.Calib.CscStatusFromLocalFile", False)
163 mcf.addFlag("Muon.Calib.CscRmsFromLocalFile", False)
164 mcf.addFlag("Muon.Calib.CscF001FromLocalFile", False)
165 mcf.addFlag("Muon.Calib.CscT0BaseFromLocalFile", False)
166 mcf.addFlag("Muon.Calib.CscT0PhaseFromLocalFile", False)
167
168 mcf.addFlag("Muon.Calib.EventTag", "MoMu")
169
170 # Choose the (MDT) calibration mode.
171 # 'ntuple' : write standard calibration ntuple (up to segments)
172 # 'trackNtuple' : write standard ntuple + tracks
173 # 'regionNtuple' : write one ntuple per calibration region
174 # 't0Classic' : do classic t0 calibration
175 # 't0MT' : do MT t0 calibration
176 # 'rtClassic' : do classic rt calibration
177 # 'rtAnalytic' : do analytic rt calibration
178 mcf.addFlag("Muon.Calib.mdtMode", "ntuple")
179
180
181 # for now the T0 calibration in the NSW should be disabled by default until a final calibration is available. Introducing the flags anyhow to allow for studies of the calibration
182 # do not apply NSW T0 calibration if we are running online or MC or a RUN4 geometry, keep only for 23 or 24
183 mcf.addFlag("Muon.Calib.applyMmT0Correction", lambda prevFlags: prevFlags.GeoModel.Run==LHCPeriod.Run3 and prevFlags.Input.DataYear != 2022 and not prevFlags.Common.isOnline and not prevFlags.Input.isMC )
184 mcf.addFlag("Muon.Calib.applysTgcT0Correction", lambda prevFlags: prevFlags.GeoModel.Run<LHCPeriod.Run4 and not prevFlags.Common.isOnline and not prevFlags.Input.isMC and False)
185 mcf.addFlag("Muon.Calib.applyMmBFieldCalib", True)
186
187 # Muon Align flags
188
189 mcf.addFlag("Muon.Align.UseALines", lambda prevFlags: (_muonAlignMode(prevFlags)))
190 mcf.addFlag("Muon.Align.UseBLines", lambda prevFlags: prevFlags.Muon.Align.UseALines)
191 mcf.addFlag("Muon.Align.UseILines", lambda prevFlags: (_muonAlignMode(prevFlags)) and \
192 prevFlags.Detector.GeometryCSC and 'HLT' not in prevFlags.IOVDb.GlobalTag)
193 mcf.addFlag("Muon.Align.UseAsBuilt", lambda prevFlags: (_muonAlignMode(prevFlags)) and not \
194 (prevFlags.IOVDb.DatabaseInstance == 'COMP200' or \
195 'HLT' in prevFlags.IOVDb.GlobalTag or prevFlags.Common.isOnline) )
196 mcf.addFlag("Muon.Align.UsesTGCAsBuild", lambda prevFlags: (_muonAlignMode(prevFlags)) and not prevFlags.Common.isOnline and prevFlags.GeoModel.Run == LHCPeriod.Run3)
197
198 # Muon Trigger Flags
199 mcf.addFlag("Muon.MuonTrigger", False)
200 mcf.addFlag("Muon.SAMuonTrigger", False)
201 mcf.addFlag("Muon.disableNSWForL2SA", True)
202
203 mcf.addFlag("Muon.enableAlignment",lambda flags: (flags.Common.Project is not Project.AthSimulation \
204 and not (flags.Common.ProductionStep in [ProductionStep.Simulation, ProductionStep.FastChain] or flags.Overlay.DataOverlay)))
205 mcf.addFlag("Muon.enableTrigIDtrackReuse", False)
206 # configuration of the DESDM_MCP output format
207
208 mcf.addFlag("Muon.DESDM_MCP.doAlignmentFormat", False) # Flag to stear the DESDM_MCP format which switches to a looser event selection for toroid off runs used for alignment.
209 mcf.addFlag("Muon.DESDM_MCP.doExtendedAlignmentContent", False) # Flag to enable electron, photon and jet containers in DESDM_MCP for dedicate studies of the toroid off data.
210
211 # configuration to write out RPC RDO for trigger timing calibration
212 mcf.addFlag("Muon.doWriteRpcRDO", True)
213
214 mcf.addFlag("Muon.writeSDOs", lambda prevFlags : prevFlags.Output.doWriteESD and prevFlags.Input.isMC)
215
216 # configure the MM cluster reco method that is used in the cluster calibration step
217 #Use charge weighted only for trigger and 2022 where not sure if the t0 calibrations that we have are ok dor the commissioning phase of the NSW in 2022
218 mcf.addFlag("Muon.MMClusterCalibRecoTool", lambda prevFlags: MMClusterBuilderEnum.Centroid if (prevFlags.Common.isOnline or prevFlags.Input.DataYear == 2022 or prevFlags.Beam.Type is not BeamType.Collisions) else MMClusterBuilderEnum.ClusterTimeProjection, type=MMClusterBuilderEnum)
219
220 mcf.addFlag("Muon.writexAODPRD", lambda prevFlags: prevFlags.Muon.usePhaseIIGeoSetup) # Output new xAOD format from convertors (to be removed once the old format is deprecated)
221 # use the MDT DCS data to determine if a chamber is alive or not. This is used in the hole search and the region selector. Needs to be false if the job is running online or is the reconstruction of the MDT calib stream
222 mcf.addFlag("Muon.useMdtDcsData", lambda prevFlags : not prevFlags.Common.isOnline and prevFlags.Detector.GeometryMDT)
223
224
225 # TODO - add configuration for above
226
227 return mcf
228