83 biasQoverPsagitta : float=
None,
84 customRunNumber : int=
None,
85 applyD0Bias : bool=
True,
86 applyZ0Bias : bool=
False,
87 applyQoverPBias : bool=
False) :
88 toolName =
"biasingTool"
89 config.addPrivateTool(toolName,
"InDet::InDetTrackBiasingTool")
94 if config.geometry()
is LHCPeriod.Run2:
95 if config.campaign()
is Campaign.MC20a:
97 alg.biasingTool.calibFiles = [
98 "InDetTrackSystematicsTools/CalibData_22.0_2022-v00/REL22_REPRO_2015.root",
99 "InDetTrackSystematicsTools/CalibData_22.0_2022-v00/REL22_REPRO_2016_1stPart.root",
100 "InDetTrackSystematicsTools/CalibData_22.0_2022-v00/REL22_REPRO_2016_2ndPart.root",
102 alg.biasingTool.runNumberBounds = [-1, 296938, 301912, 999999]
103 elif config.campaign()
is Campaign.MC20d:
105 alg.biasingTool.calibFiles = [
106 "InDetTrackSystematicsTools/CalibData_22.0_2022-v00/REL22_REPRO_2017_1stPart.root",
107 "InDetTrackSystematicsTools/CalibData_22.0_2022-v00/REL22_REPRO_2017_2ndPart.root",
109 alg.biasingTool.runNumberBounds = [-1, 334842, 999999]
110 elif config.campaign()
is Campaign.MC20e:
112 alg.biasingTool.calibFiles = [
113 "InDetTrackSystematicsTools/CalibData_22.0_2022-v00/REL22_REPRO_2018_1stPart.root",
114 "InDetTrackSystematicsTools/CalibData_22.0_2022-v00/REL22_REPRO_2018_2ndPart.root",
116 alg.biasingTool.runNumberBounds = [-1, 353000, 999999]
118 raise ValueError (
'No biasing recommendations found for campaign \"'
119 + config.campaign().value +
'\" in Run 2. '
120 'Please check the configuration.')
121 elif config.geometry()
is LHCPeriod.Run3:
122 if config.campaign()
is Campaign.MC23a:
124 alg.biasingTool.calibFiles = [
125 "dev/InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2022_d0z0qoverp_biasing_factor.root",
127 elif config.campaign()
is Campaign.MC23d:
129 alg.biasingTool.calibFiles = [
130 "dev/InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2023_d0z0qoverp_biasing_factor.root",
132 elif config.campaign()
is Campaign.MC23e:
134 alg.biasingTool.calibFiles = [
135 "dev/InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2024_d0z0qoverp_biasing_factor.root",
138 raise ValueError (
'No biasing recommendations found for campaign \"'
139 + config.campaign().value +
'\" in Run 3. '
140 'Please check the configuration.')
142 raise ValueError (
'No biasing recommendations found for geometry \"'
143 + config.geometry().value +
'\". Please check '
144 'the configuration.')
147 alg.biasingTool.biasD0 = biasD0
149 alg.biasingTool.biasZ0 = biasZ0
150 if biasQoverPsagitta:
151 alg.biasingTool.biasQoverPsagitta = biasQoverPsagitta
153 alg.biasingTool.runNumber = customRunNumber
156 alg.biasingTool.applyD0Bias = applyD0Bias
157 alg.biasingTool.applyZ0Bias = applyZ0Bias
158 alg.biasingTool.applyQoverPBias = applyQoverPBias
159 alg.biasingTool.isMC = config.dataType()
is not DataType.Data
166 calibFile : str=
None) :
167 toolName =
"smearingTool"
168 config.addPrivateTool(toolName,
"InDet::InDetTrackSmearingTool")
170 alg.smearingTool.Seed = seed
172 alg.tackSmearingTool.calibFileIP_CTIDE = calibFile
174 if config.geometry()
is LHCPeriod.Run2:
176 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00/d0z0_smearing_factors_Run2_v2.root"
177 elif config.geometry()
is LHCPeriod.Run3:
178 if config.campaign()
is Campaign.MC23a:
180 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2022_d0z0_smearing_factors_v2.root"
181 elif config.campaign()
is Campaign.MC23d:
183 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2023_d0z0_smearing_factors_v2.root"
184 elif config.campaign()
is Campaign.MC23e:
186 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2024_d0z0_smearing_factors.root"
188 raise ValueError (
'No recommendations found for campaign \"'
189 + config.campaign().value +
'\" in Run 3. '
190 'Please check that the recommendations exist.')
192 raise ValueError (
'No recommendations found for geometry \"'
193 + config.geometry().value +
'\". Please check '
194 'the configuration.')
198 log = logging.getLogger(
'InDetTrackCalibrationConfig')
200 inputContainer =
"InDetTrackParticles"
207 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'InDetTrackShallowCopyAlg' )
212 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'InDetTrackEtaCutAlg' )
213 alg.selectionDecoration =
'selectEta' + self.postfix +
',as_bits'
214 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
215 alg.selectionTool.maxEta = self.maxEta
217 alg.preselection = config.getPreselection (self.
containerName,
'')
218 config.addSelection (self.
containerName,
'', alg.selectionDecoration)
221 if config.dataType()
is not DataType.Data:
223 log.warning(
'Disabling the biasing tool for now. This should not '
224 'be used in an analysis.')
226 alg = config.createAlgorithm(
'CP::InDetTrackBiasingAlg',
'InDetTrackBiasingAlg' )
238 alg.preselection = config.getPreselection (self.
containerName,
'')
241 if config.dataType()
is not DataType.Data:
242 alg = config.createAlgorithm(
'CP::InDetTrackSmearingAlg',
'InDetTrackSmearingAlg' )
249 alg.preselection = config.getPreselection (self.
containerName,
'')
252 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'InDetTrackPtCutAlg' )
253 alg.selectionDecoration =
'selectPt' + self.postfix +
',as_bits'
254 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
255 alg.selectionTool.minPt = self.minPt
257 alg.preselection = config.getPreselection (self.
containerName,
'')
258 config.addSelection (self.
containerName,
'', alg.selectionDecoration,
262 alg = config.createAlgorithm(
'CP::InDetTrackExtraVarDecoratorAlg',
'ExtraVarDecorator' )
266 config.addOutputVar (self.
containerName,
'eta_%SYS%',
'eta', noSys=
True)
267 config.addOutputVar (self.
containerName,
'phi',
'phi', noSys=
True)
268 config.addOutputVar (self.
containerName,
'charge_%SYS%',
'charge', noSys=
True)
272 config.addOutputVar (self.
containerName,
'vz',
'vz', noSys=
True, auxType=
'float')
276 config.addOutputVar (self.
containerName,
'numberOfInnermostPixelLayerHits',
'numberOfInnermostPixelLayerHits', noSys=
True, auxType=
'unsigned_char')
277 config.addOutputVar (self.
containerName,
'numberOfPixelDeadSensors',
'numberOfPixelDeadSensors', noSys=
True, auxType=
'unsigned_char')
278 config.addOutputVar (self.
containerName,
'numberOfPixelHits',
'numberOfPixelHits', noSys=
True, auxType=
'unsigned_char')
279 config.addOutputVar (self.
containerName,
'numberOfPixelHoles',
'numberOfPixelHoles', noSys=
True, auxType=
'unsigned_char')
280 config.addOutputVar (self.
containerName,
'numberOfPixelSharedHits',
'numberOfPixelSharedHits', noSys=
True, auxType=
'unsigned_char')
281 config.addOutputVar (self.
containerName,
'numberOfSCTDeadSensors',
'numberOfSCTDeadSensors', noSys=
True, auxType=
'unsigned_char')
282 config.addOutputVar (self.
containerName,
'numberOfSCTHits',
'numberOfSCTHits', noSys=
True, auxType=
'unsigned_char')
283 config.addOutputVar (self.
containerName,
'numberOfSCTHoles',
'numberOfSCTHoles', noSys=
True, auxType=
'unsigned_char')
284 config.addOutputVar (self.
containerName,
'numberOfSCTSharedHits',
'numberOfSCTSharedHits', noSys=
True, auxType=
'unsigned_char')
285 config.addOutputVar (self.
containerName,
'numberOfTRTHits',
'numberOfTRTHits', noSys=
True, auxType=
'unsigned_char')
286 config.addOutputVar (self.
containerName,
'numberOfTRTOutliers',
'numberOfTRTOutliers', noSys=
True, auxType=
'unsigned_char')