ATLAS Offline Software
Loading...
Searching...
No Matches
MuonCalibrationConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3# Based on : https://gitlab.cern.ch/atlas/athena/blob/master/MuonSpectrometer/MuonCnv/MuonCnvExample/python/MuonCalibConfig.py
4
5from MuonConfig.MuonCondAlgConfig import CscCondDbAlgCfg, NswCalibDbAlgCfg
6from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
7from AthenaConfiguration.AccumulatorCache import AccumulatorCache
8from AthenaConfiguration.ComponentFactory import CompFactory
9from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
10from AthenaConfiguration.Enums import BeamType, LHCPeriod
11from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline
12from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
13
14from AthenaCommon.Logging import logging
15log = logging.getLogger('MuonCalibConfig')
16
17
20
21def CscCalibToolCfg(flags, name="CscCalibTool", **kwargs):
22 """Return ComponentAccumulator configured for CSC calibration with CscCalibTool as PrivateTools"""
23
24 acc = CscCondDbAlgCfg(flags)
25
26 kwargs.setdefault("Slope", 0.19)
27 kwargs.setdefault("Noise", 3.5)
28 kwargs.setdefault("Pedestal", 2048.0)
29 kwargs.setdefault("ReadFromDatabase", True)
30 kwargs.setdefault("SlopeFromDatabase", False)
31 kwargs.setdefault("integrationNumber", 12.0)
32 kwargs.setdefault("integrationNumber2", 11.66)
33 kwargs.setdefault("samplingTime", 50.0)
34 kwargs.setdefault("signalWidth", 14.40922)
35 kwargs.setdefault("timeOffset", 71.825)
36 kwargs.setdefault("IsOnline", flags.Common.isOnline)
37 kwargs.setdefault("Latency", 119)
38
39 acc.setPrivateTools(CompFactory.CscCalibTool(name, **kwargs))
40
41 return acc
42
43
44
45
48
49def _setupMdtCondDB(flags):
50 result=ComponentAccumulator()
51
52 if flags.Muon.Calib.readMDTCalibFromBlob:
53 mdt_folder_name_appendix = "BLOB"
54 else:
55 mdt_folder_name_appendix=""
56
57 online_folders = ['/MDT/Onl/RT'+ mdt_folder_name_appendix,'/MDT/Onl/T0' + mdt_folder_name_appendix]
58 offline_folders = ['/MDT/RT' + mdt_folder_name_appendix, '/MDT/T0' + mdt_folder_name_appendix]
59
60 if flags.Muon.Calib.mdtCalibrationSource=="MDT":
61 if flags.GeoModel.Run is LHCPeriod.Run4:
62 # TODO: temporary conditions override until we get a global tag
63 from IOVDbSvc.IOVDbSvcConfig import addFolders
64 # Ugly, but hopefully temporary hack
65 if flags.GeoModel.AtlasVersion.startswith('ATLAS-P2-RUN4-01-00'):
66 result.merge(addFolders(flags, '/MDT/RT' + mdt_folder_name_appendix, 'MDT_OFL', className='CondAttrListCollection', tag='MDTRT_Sim-Run4-01', db="OFLP200"))
67 result.merge(addFolders(flags, '/MDT/T0' + mdt_folder_name_appendix, 'MDT_OFL', className='CondAttrListCollection', tag='MDTT0_Sim-Run4-01', db="OFLP200"))
68 else:
69 result.merge(addFolders(flags, '/MDT/RT' + mdt_folder_name_appendix, 'MDT_OFL', className='CondAttrListCollection', tag='MDTRT_Sim-R3SYM-04', db="OFLP200"))
70 result.merge(addFolders(flags, '/MDT/T0' + mdt_folder_name_appendix, 'MDT_OFL', className='CondAttrListCollection', tag='MDTT0_Sim-R3SYM-03', db="OFLP200"))
71 else:
72 result.merge(addFoldersSplitOnline(flags, 'MDT', online_folders , offline_folders,
73 className = 'CondAttrListCollection' ) )
74 else:
75 result.merge(addFoldersSplitOnline(flags, flags.Muon.Calib.mdtCalibrationSource, online_folders, offline_folders,
76 className = 'CondAttrListCollection' ) )
77
78 return result, mdt_folder_name_appendix
79# end of function setupMdtCondDB()
80
81@AccumulatorCache
82def MdtCalibrationToolCfg(flags, name= "MdtCalibrationTool", **kwargs):
83 result=ComponentAccumulator()
84 result.merge(MdtCalibDbAlgCfg(flags))
85
86 kwargs.setdefault("DoSlewingCorrection", flags.Muon.Calib.correctMdtRtForTimeSlewing)
87 kwargs.setdefault("DoTemperatureCorrection", flags.Muon.Calib.applyRtScaling)
88 kwargs.setdefault("DoTofCorrection", flags.Beam.Type is BeamType.Collisions) # No TOF correction if not collisions
89 kwargs.setdefault("DoPropagationTimeUncert", flags.Muon.Calib.applySigPropUncert)
90
91 if flags.Beam.Type is BeamType.Collisions:
92 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig import MdtCalibWindowNumber
93 kwargs.setdefault("TimeWindowSetting", MdtCalibWindowNumber('Collision_G4'))
94
95 result.merge(AtlasFieldCacheCondAlgCfg(flags))
96
97 mdt_calibration_tool = CompFactory.MdtCalibrationTool(name= name, **kwargs)
98 result.setPrivateTools(mdt_calibration_tool)
99 return result
100
101def MdtCalibDbAlgR4Cfg(flags, name="MdtCalibDbAlg",**kwargs):
102 result = ComponentAccumulator()
103 kwargs.setdefault("PropagationSpeedBeta", flags.Muon.Calib.mdtPropagationSpeedBeta)
104 kwargs.setdefault("CreateBFieldFunctions", flags.Muon.Calib.correctMdtRtForBField)
105 kwargs.setdefault("CreateSlewingFunctions", flags.Muon.Calib.correctMdtRtForTimeSlewing)
106 kwargs.setdefault("RtJSON","")
107 kwargs.setdefault("TubeT0JSON","")
108
109 if(kwargs["RtJSON"] or kwargs["TubeT0JSON"]):
110 kwargs.setdefault("ReadKeyRt","")
111 kwargs.setdefault("ReadKeyTube","")
112 kwargs.setdefault("dbPayloadType","")
113
114 else:
115 kwargs.setdefault("ReadKeyRt","/MDT/RTJSONS")
116 kwargs.setdefault("ReadKeyTube","/MDT/T0JSONS")
117 kwargs.setdefault("dbPayloadType","TTree")
118 from IOVDbSvc.IOVDbSvcConfig import addFolders
119 result.merge(addFolders(flags,[kwargs["ReadKeyRt"]], className='CondAttrListCollection', detDb="MDT_OFL", tag="MDTRTTREE-RUN4-01"))
120 result.merge(addFolders(flags,[kwargs["ReadKeyTube"]], className='CondAttrListCollection', detDb="MDT_OFL", tag="MDTT0TREE-RUN4-01"))
121
122 alg = CompFactory.MuonCalibR4.MdtCalibDbAlg(name, **kwargs)
123 result.addCondAlgo (alg, primary = True)
124 return result
125
126
127
128def MdtCalibDbAlgCfg(flags,name="MdtCalibDbAlg",**kwargs):
129 result = ComponentAccumulator()
130 result.merge(MuonGeoModelCfg(flags))
131 # setup COOL folders
132 if not flags.Muon.Calib.readMdtJSON:
133 acc, mdt_folder_name_appendix = _setupMdtCondDB(flags)
134 result.merge(acc)
135
136 if not flags.Muon.useMdtDcsData:
137 kwargs.setdefault("ReadKeyDCS", "" )
138 else:
139 from MuonConfig.MuonCondAlgConfig import MdtCondDbAlgCfg
140 result.merge(MdtCondDbAlgCfg(flags))
141
142 if flags.Muon.Calib.fitAnalyticRt:
143 from MuonCondAlgR4.ConditionsConfig import MdtAnalyticRtCalibAlgCfg
144 kwargs.setdefault("WriteKey", "LookUpMdtCalibDb")
145 result.merge(MdtAnalyticRtCalibAlgCfg(flags, ReadKey="LookUpMdtCalibDb"))
146 if flags.Muon.Calib.readMdtJSON:
147 result.merge(MdtCalibDbAlgR4Cfg(flags, name, **kwargs))
148 return result
149
150 # set some default proper ties
151 if flags.Common.isOnline and not flags.Input.isMC:
152 kwargs.setdefault("ReadKeyTube", "/MDT/T0")
153 kwargs.setdefault("ReadKeyRt", "/MDT/RT")
154 else:
155 kwargs.setdefault("ReadKeyTube", "/MDT/T0"+ mdt_folder_name_appendix)
156 kwargs.setdefault("ReadKeyRt", "/MDT/RT"+ mdt_folder_name_appendix)
157 if flags.Input.isMC is False: # Should be " if flags.Input.isMC=='data' " ?
158 kwargs.setdefault("defaultT0", 40)
159 else:
160 kwargs.setdefault("defaultT0", 799)
161
162 kwargs.setdefault("UseMLRt", flags.Muon.Calib.useMLRt )
163 kwargs.setdefault("TimeSlewingCorrection", flags.Muon.Calib.correctMdtRtForTimeSlewing)
164 kwargs.setdefault("MeanCorrectionVsR", [ -5.45973, -4.57559, -3.71995, -3.45051, -3.4505, -3.4834, -3.59509, -3.74869, -3.92066, -4.10799, -4.35237, -4.61329, -4.84111, -5.14524 ])
165 kwargs.setdefault("PropagationSpeedBeta", flags.Muon.Calib.mdtPropagationSpeedBeta)
166 # the same as MdtCalibrationDbTool
167 kwargs.setdefault("CreateBFieldFunctions", flags.Muon.Calib.correctMdtRtForBField)
168 kwargs.setdefault("CreateSlewingFunctions", flags.Muon.Calib.correctMdtRtForTimeSlewing)
169 from RngComps.RngCompsConfig import AthRNGSvcCfg
170 kwargs.setdefault("AthRNGSvc", result.getPrimaryAndMerge(AthRNGSvcCfg(flags)))
171
172 kwargs.setdefault("UseR4DetMgr", flags.Muon.usePhaseIIGeoSetup)
173 alg = CompFactory.MdtCalibDbAlg (name, **kwargs)
174 result.addCondAlgo (alg, primary = True)
175 return result
176
177def NSWCalibToolCfg(flags, name="NSWCalibTool", **kwargs):
178 """Return ComponentAccumulator configured for NSW calibration with NSWCalibTool as PrivateTools"""
179 result = ComponentAccumulator()
180 result.merge(NswCalibDbAlgCfg(flags))
181 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
182 result.merge(AtlasFieldCacheCondAlgCfg(flags))
183 kwargs.setdefault("isData", not flags.Input.isMC)
184 kwargs.setdefault("mmPeakTime",200)
185 kwargs.setdefault("sTgcPeakTime",0)
186 kwargs.setdefault("applyMmT0Calib", flags.Muon.Calib.applyMmT0Correction)
187 kwargs.setdefault("applysTgcT0Calib", flags.Muon.Calib.applysTgcT0Correction)
188 kwargs.setdefault("applyMmBFieldCalib",flags.Muon.Calib.applyMmBFieldCalib)
189 the_tool = CompFactory.Muon.NSWCalibTool(name,**kwargs)
190 result.setPrivateTools(the_tool)
191 return result
192
193def MMCalibSmearingToolCfg(flags, name="MMCalibSmearingTool", **kwargs):
194 """Return ComponentAccumulator configured for MM smearing with NSWCalibSmearing as PrivateTools"""
195 result = ComponentAccumulator()
196 kwargs.setdefault("EtaSectors", [True, True, True, True])
197 the_tool = CompFactory.Muon.NSWCalibSmearingTool(name,**kwargs)
198 result.setPrivateTools(the_tool)
199 return result
200
201def STgcCalibSmearingToolCfg(flags, name="STgcCalibSmearingTool", **kwargs):
202 """Return ComponentAccumulator configured for sTGC smearing with NSWCalibSmearing as PrivateTools"""
203 result = ComponentAccumulator()
204 kwargs.setdefault("EtaSectors", [True, True, True, True, True, True])
205 the_tool = CompFactory.Muon.NSWCalibSmearingTool(name,**kwargs)
206 result.setPrivateTools(the_tool)
207 return result
208
209def NswErrorCalibDbAlgCfg(flags, name = "NswErrorCalibDbAlg", **kwargs):
210 result = ComponentAccumulator()
211 folderNames = []
212 if "readFromJSON" in kwargs:
213 folderNames=[]
214
215 elif flags.Common.isOnline:
216 from IOVDbSvc.IOVDbSvcConfig import addFolders
217 folderNames+=["/MDT/Onl/MM/ClusterUncertainties/SIDEA",
218 "/MDT/Onl/MM/ClusterUncertainties/SIDEC",
219 "/TGC/Onl/NSW/ClusterUncertainties/SIDEA",
220 "/TGC/Onl/NSW/ClusterUncertainties/SIDEC",
221 ]
222 result.merge(addFolders(flags,folderNames[:2], className='CondAttrListCollection', detDb="MDT_ONL"))
223 result.merge(addFolders(flags,folderNames[2:], className='CondAttrListCollection', detDb="TGC_ONL"))
224
225 else:
226 from IOVDbSvc.IOVDbSvcConfig import addFolders
227 folderNames+=["/MDT/MM/ClusterUncertainties/SIDEA",
228 "/MDT/MM/ClusterUncertainties/SIDEC",
229 "/TGC/NSW/ClusterUncertainties/SIDEA",
230 "/TGC/NSW/ClusterUncertainties/SIDEC"]
231 result.merge(addFolders(flags,folderNames[:2], className='CondAttrListCollection', detDb="MDT_OFL"))
232 result.merge(addFolders(flags,folderNames[2:], className='CondAttrListCollection', detDb="TGC_OFL"))
233
234 kwargs.setdefault("ReadKeys", folderNames)
235 the_alg = CompFactory.NswUncertDbAlg(name = name, **kwargs)
236 result.addCondAlgo(the_alg, primary = True)
237 return result
238
239def MmCTPCondDbAlgCfg(flags, name = "MmCTPCondDbAlg", **kwargs):
240 result = ComponentAccumulator()
241 if "readFromJSON" in kwargs:
242 kwargs.setdefault("ReadKey", "")
243 else:
244 from IOVDbSvc.IOVDbSvcConfig import addFolders
245 kwargs.setdefault("ReadKey", "/MDT/MM/CTPSLOPE")
246 result.merge(addFolders(flags, kwargs["ReadKey"], className='CondAttrListCollection', detDb="MDT_OFL"))
247
248 the_alg = CompFactory.MmCTPCondDbAlg(name = name, **kwargs)
249 result.addCondAlgo(the_alg, primary = True)
250 return result
if(febId1==febId2)
STgcCalibSmearingToolCfg(flags, name="STgcCalibSmearingTool", **kwargs)
_setupMdtCondDB(flags)
MDT calibration.
MmCTPCondDbAlgCfg(flags, name="MmCTPCondDbAlg", **kwargs)
MMCalibSmearingToolCfg(flags, name="MMCalibSmearingTool", **kwargs)
MdtCalibrationToolCfg(flags, name="MdtCalibrationTool", **kwargs)
NSWCalibToolCfg(flags, name="NSWCalibTool", **kwargs)
MdtCalibDbAlgR4Cfg(flags, name="MdtCalibDbAlg", **kwargs)
NswErrorCalibDbAlgCfg(flags, name="NswErrorCalibDbAlg", **kwargs)
MdtCalibDbAlgCfg(flags, name="MdtCalibDbAlg", **kwargs)
CscCalibToolCfg(flags, name="CscCalibTool", **kwargs)
CSC calibration.