ATLAS Offline Software
MuonConfigFlags.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
2 
3 from AthenaConfiguration.AthConfigFlags import AthConfigFlags
4 from AthenaConfiguration.Enums import BeamType, LHCPeriod, ProductionStep, Project, FlagEnum
5 
6 import 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 
13 # MuonByteStream
14 # - MuonByteStreamFlags.py - AFAICS this is only used here MuonCnv/MuonCnvExample/python/MuonCablingConfig.py & duplicates global flag functionality.
15 
16 # MuonRecExample
17 # - MuonAlignFlags.py - looks necessary
18 # - MuonStandaloneFlags.py - necessary, but should be cleaned up (and probably merged with MuonRecFlags i.e. here)
19 # https://gitlab.cern.ch/atlas/athena/blob/master/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonStandaloneFlags.py
20 # - MuonRecFlags.py - necessary, but needs cleaning up.
21 # https://gitlab.cern.ch/atlas/athena/blob/master/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecFlags.py
22 
23 
24 class MMClusterBuilderEnum(FlagEnum):
25  """Flag values for Muon.MMClusterCalibRecoTool"""
26  Centroid = "Centroid"
27  ClusterTimeProjection = "ClusterTimeProjection"
28 
29 def _muonAlignMode(flags):
30  # Small function that determines if the alignment flags should be true or false
31  # follows the logic in https://acode-browser1.usatlas.bnl.gov/lxr/source/athena/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonAlignFlags.py
32  problematic_tags = ['COMCOND-HLT[A-C]-00[01]-00', 'COMCOND-ES1C-00[01]-00', 'COMCOND-REPC-001', 'COMCOND-SIM-01-00']
33  if any(re.match(tag,flags.IOVDb.DatabaseInstance) for tag in problematic_tags):
34  return False
35  elif flags.Input.isMC or not flags.Muon.enableAlignment:
36  return False
37  else:
38  return True
39 
41  mcf=AthConfigFlags()
42 
43  # stages of processing
44  # 0. Geometry
45 
46 
47  from AthenaConfiguration.AutoConfigFlags import DetDescrInfo
48 
49  mcf.addFlag("Muon.usePhaseIIGeoSetup",lambda prevFlags : DetDescrInfo(prevFlags.GeoModel.AtlasVersion,
50  prevFlags.GeoModel.SQLiteDB ,
51  prevFlags.GeoModel.SQLiteDBFullPath)["Muon"]["useR4Plugin"] )
52  # 1. Digitization
53  mcf.addFlag("Muon.doDigitization",True)
54  mcf.addFlag("Muon.doFastMMDigitization",True)
55  # 2. Reco MuonRecFlags
56  mcf.addFlag("Muon.doTGCClusterSegmentFinding", False) # Run cluster segment finding
57  mcf.addFlag("Muon.doRPCClusterSegmentFinding", False) # Run cluster segment finding
58  mcf.addFlag("Muon.prdToxAOD", False) # Run clusterization
59  mcf.addFlag("Muon.rpcRawToxAOD", False) # Add RPC RDO to xAOD
60  mcf.addFlag("Muon.doMSVertex", True) # Run MS vertex (arXiv:1311.7070)
61  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.
62  mcf.addFlag("Muon.enableErrorTuning",True) # turn on error tuning to account for misalignments
63  mcf.addFlag("Muon.useLooseErrorTuning",False)
64  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.
65  mcf.addFlag("Muon.useAlignmentCorrections",True) # Apply alignment corrections to MuonGeoModel. The corrections are read from a COOL database
66 
67  mcf.addFlag("Muon.makePRDs",True) # Disable when e.g. re-running from ESD
68 
69  mcf.addFlag("Muon.enableNRPC", lambda prevFlags: prevFlags.Detector.GeometryRPC and \
70  prevFlags.Muon.usePhaseIIGeoSetup )
71  # MuonStandaloneFlags.py
72  mcf.addFlag("Muon.printSummary", False) # Print out a summary for each event at each reco stage
73  mcf.addFlag("Muon.segmentOrigin", "Muon") # Can be 'Muon','TruthTracking'
74  # reconstructionMode - I think this is a complete duplication of global.BeamType. Dropping.
75  mcf.addFlag("Muon.strategy", []) # CutSeedsOnTracks, CombineSegInStation, DynamicSeeding, PreferOutsideIn, AllowOneSharedHit, DoRefinement, DoAmbiSolving
76  mcf.addFlag("Muon.straightLineFitMomentum", 2000.0 )
77  #mcf.addFlag("Muon.doSegmentsOnly", True) # Also in MuonRecFlags ... redundant in both?
78  mcf.addFlag("Muon.Chi2NDofCut", 20.0 ) # chi-squared per degree of freedom cut in fitter.
79  mcf.addFlag("Muon.enableCurvedSegmentFinding", False ) # TODO I think this one could possibly be removed, since it really is a Tool level configuration.
80  mcf.addFlag("Muon.updateSegmentSecondCoordinate", lambda prevFlags : prevFlags.Beam.Type is BeamType.Collisions) # Do not use for cosmics or singlebeam
81 
82  mcf.addFlag("Muon.useSegmentMatching", lambda prevFlags : prevFlags.Beam.Type is BeamType.Collisions) # Do not use for cosmics or singlebeam
83  mcf.addFlag("Muon.useTrackSegmentMatching", True )
84  mcf.addFlag("Muon.runCommissioningChain", lambda prevFlags: ( False and (prevFlags.Detector.EnableMM or prevFlags.Detector.EnablesTGC) \
85  and prevFlags.Beam.Type is BeamType.Collisions) )
86 
87  mcf.addFlag("Muon.applyMMPassivation", lambda prevFlags: prevFlags.Detector.EnableMM and not prevFlags.Common.isOnline and (prevFlags.Common.Project is not Project.AthSimulation \
88  and (prevFlags.Common.ProductionStep not in [ProductionStep.Simulation, ProductionStep.FastChain] or prevFlags.Overlay.DataOverlay)))
89  # CalibFlags
90  mcf.addFlag("Muon.Calib.readMDTCalibFromBlob", True) # Read mdt tube calibration from blob-folders
91  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)
92  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)
93  mcf.addFlag("Muon.Calib.useMLRt", True) # use ML-RT functions from COOL
94  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
95  mcf.addFlag("Muon.Calib.mdtCalibrationSource", "MDT") # Source for MDT t0s and rts
96  mcf.addFlag("Muon.Calib.mdtPropagationSpeedBeta", lambda prevFlags : 1.0 if prevFlags.Input.isMC else 0.85) #
97 
98  mcf.addFlag("Muon.Calib.CscPedFromLocalFile", False)
99  mcf.addFlag("Muon.Calib.CscNoiseFromLocalFile", False)
100  mcf.addFlag("Muon.Calib.CscPSlopeFromLocalFile", False)
101  mcf.addFlag("Muon.Calib.CscStatusFromLocalFile", False)
102  mcf.addFlag("Muon.Calib.CscRmsFromLocalFile", False)
103  mcf.addFlag("Muon.Calib.CscF001FromLocalFile", False)
104  mcf.addFlag("Muon.Calib.CscT0BaseFromLocalFile", False)
105  mcf.addFlag("Muon.Calib.CscT0PhaseFromLocalFile", False)
106 
107  mcf.addFlag("Muon.Calib.EventTag", "MoMu")
108 
109  # Choose the (MDT) calibration mode.
110  # 'ntuple' : write standard calibration ntuple (up to segments)
111  # 'trackNtuple' : write standard ntuple + tracks
112  # 'regionNtuple' : write one ntuple per calibration region
113  # 't0Classic' : do classic t0 calibration
114  # 't0MT' : do MT t0 calibration
115  # 'rtClassic' : do classic rt calibration
116  # 'rtAnalytic' : do analytic rt calibration
117  mcf.addFlag("Muon.Calib.mdtMode", "ntuple")
118 
119  # 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
120  # do not apply NSW T0 calibration if we are running online or MC or a RUN4 geometry
121  mcf.addFlag("Muon.Calib.applyMmT0Correction", lambda prevFlags: prevFlags.GeoModel.Run<LHCPeriod.Run4 and not prevFlags.Common.isOnline and not prevFlags.Input.isMC and False)
122  mcf.addFlag("Muon.Calib.applysTgcT0Correction", lambda prevFlags: prevFlags.GeoModel.Run<LHCPeriod.Run4 and not prevFlags.Common.isOnline and not prevFlags.Input.isMC and False)
123  mcf.addFlag("Muon.Calib.applyMmBFieldCalib", True)
124 
125  # Muon Align flags
126 
127  mcf.addFlag("Muon.Align.UseALines", lambda prevFlags: (_muonAlignMode(prevFlags)))
128  mcf.addFlag("Muon.Align.UseBLines", lambda prevFlags: prevFlags.Muon.Align.UseALines)
129  mcf.addFlag("Muon.Align.UseILines", lambda prevFlags: (_muonAlignMode(prevFlags)) and \
130  prevFlags.Detector.GeometryCSC and 'HLT' not in prevFlags.IOVDb.GlobalTag)
131  mcf.addFlag("Muon.Align.UseAsBuilt", lambda prevFlags: (_muonAlignMode(prevFlags)) and not \
132  (prevFlags.IOVDb.DatabaseInstance == 'COMP200' or \
133  'HLT' in prevFlags.IOVDb.GlobalTag or prevFlags.Common.isOnline) )
134 
135  # Muon Trigger Flags
136  mcf.addFlag("Muon.MuonTrigger", False)
137  mcf.addFlag("Muon.SAMuonTrigger", False)
138  mcf.addFlag("Muon.disableNSWForL2SA", False)
139 
140  mcf.addFlag("Muon.enableAlignment",lambda flags: (flags.Common.Project is not Project.AthSimulation \
141  and (flags.Common.ProductionStep not in [ProductionStep.Simulation, ProductionStep.FastChain] or flags.Overlay.DataOverlay)))
142  mcf.addFlag("Muon.enableTrigIDtrackReuse", False)
143  # configuration of the DESDM_MCP output format
144 
145  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.
146 
147  # configuration to write out RPC RDO for trigger timing calibration
148  mcf.addFlag("Muon.doWriteRpcRDO", True)
149 
150  mcf.addFlag("Muon.writeSDOs", lambda prevFlags : prevFlags.Output.doWriteESD and prevFlags.Input.isMC)
151 
152  # configure the MM cluster reco method that is used in the cluster calibration step
153  mcf.addFlag("Muon.MMClusterCalibRecoTool", lambda prevFlags : MMClusterBuilderEnum.ClusterTimeProjection if prevFlags.Input.isMC else MMClusterBuilderEnum.Centroid, type=MMClusterBuilderEnum)
154 
155  mcf.addFlag("Muon.writexAODPRD", False) # Output new xAOD format from convertors (to be removed once the old format is deprecated)
156  # 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
157  mcf.addFlag("Muon.useMdtDcsData", lambda prevFlags : not prevFlags.Common.isOnline)
158 
159 
160 
161 
162 
163 
164  # TODO - add configuration for above
165 
166  return mcf
167 
python.MuonConfigFlags.createMuonConfigFlags
def createMuonConfigFlags()
Definition: MuonConfigFlags.py:40
python.MuonConfigFlags.MMClusterBuilderEnum
Definition: MuonConfigFlags.py:24
python.AutoConfigFlags.DetDescrInfo
def DetDescrInfo(geoTag, sqliteDB, sqliteDBFullPath)
Definition: AutoConfigFlags.py:133
python.MuonConfigFlags._muonAlignMode
def _muonAlignMode(flags)
Definition: MuonConfigFlags.py:29