80 biasQoverPsagitta : float=
None,
81 customRunNumber : int=
None,
82 applyD0Bias : bool=
True,
83 applyZ0Bias : bool=
False,
84 applyQoverPBias : bool=
False) :
85 from InDetTrackSystematicsTools.InDetTrackSystematicsToolsConfig
import (
86 InDetTrackBiasingCalibKwargs,
88 toolName =
"biasingTool"
89 config.addPrivateTool(toolName,
"InDet::InDetTrackBiasingTool")
91 calib = InDetTrackBiasingCalibKwargs(config.flags)
92 alg.biasingTool.calibFiles = calib[
'calibFiles']
93 if 'runNumberBounds' in calib:
94 alg.biasingTool.runNumberBounds = calib[
'runNumberBounds']
97 alg.biasingTool.biasD0 = biasD0
99 alg.biasingTool.biasZ0 = biasZ0
100 if biasQoverPsagitta:
101 alg.biasingTool.biasQoverPsagitta = biasQoverPsagitta
103 alg.biasingTool.runNumber = customRunNumber
106 alg.biasingTool.applyD0Bias = applyD0Bias
107 alg.biasingTool.applyZ0Bias = applyZ0Bias
108 alg.biasingTool.applyQoverPBias = applyQoverPBias
109 alg.biasingTool.isMC = config.dataType()
is not DataType.Data
115 calibFile : str=
None) :
116 toolName =
"smearingTool"
117 config.addPrivateTool(toolName,
"InDet::InDetTrackSmearingTool")
119 alg.tackSmearingTool.calibFileIP_CTIDE = calibFile
121 if config.geometry()
is LHCPeriod.Run2:
123 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00/d0z0_smearing_factors_Run2_v2.root"
124 elif config.geometry()
is LHCPeriod.Run3:
125 if config.campaign()
is Campaign.MC23a:
127 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2022_d0z0_smearing_factors_v2.root"
128 elif config.campaign()
is Campaign.MC23d:
130 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2023_d0z0_smearing_factors_v2.root"
131 elif config.campaign()
is Campaign.MC23e:
133 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2024_d0z0_smearing_factors.root"
135 raise ValueError (
'No recommendations found for campaign \"'
136 + config.campaign().value +
'\" in Run 3. '
137 'Please check that the recommendations exist.')
139 raise ValueError (
'No recommendations found for geometry \"'
140 + config.geometry().value +
'\". Please check '
141 'the configuration.')
145 log = logging.getLogger(
'InDetTrackCalibrationConfig')
147 inputContainer =
"InDetTrackParticles"
154 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'InDetTrackShallowCopyAlg' )
159 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'InDetTrackEtaCutAlg' )
160 alg.selectionDecoration =
'selectEta' + self.postfix +
',as_bits'
161 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
162 alg.selectionTool.maxEta = self.maxEta
164 alg.preselection = config.getPreselection (self.
containerName,
'')
165 config.addSelection (self.
containerName,
'', alg.selectionDecoration)
168 if config.dataType()
is not DataType.Data:
170 log.warning(
'Disabling the biasing tool for now. This should not '
171 'be used in an analysis.')
173 alg = config.createAlgorithm(
'CP::InDetTrackBiasingAlg',
'InDetTrackBiasingAlg' )
185 alg.preselection = config.getPreselection (self.
containerName,
'')
188 if config.dataType()
is not DataType.Data:
189 alg = config.createAlgorithm(
'CP::InDetTrackSmearingAlg',
'InDetTrackSmearingAlg' )
195 alg.preselection = config.getPreselection (self.
containerName,
'')
198 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'InDetTrackPtCutAlg' )
199 alg.selectionDecoration =
'selectPt' + self.postfix +
',as_bits'
200 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
201 alg.selectionTool.minPt = self.minPt
203 alg.preselection = config.getPreselection (self.
containerName,
'')
204 config.addSelection (self.
containerName,
'', alg.selectionDecoration,
208 alg = config.createAlgorithm(
'CP::InDetTrackExtraVarDecoratorAlg',
'ExtraVarDecorator' )
212 config.addOutputVar (self.
containerName,
'eta_%SYS%',
'eta', noSys=
True)
213 config.addOutputVar (self.
containerName,
'phi',
'phi', noSys=
True)
214 config.addOutputVar (self.
containerName,
'charge_%SYS%',
'charge', noSys=
True)
218 config.addOutputVar (self.
containerName,
'vz',
'vz', noSys=
True, auxType=
'float')
222 config.addOutputVar (self.
containerName,
'numberOfInnermostPixelLayerHits',
'numberOfInnermostPixelLayerHits', noSys=
True, auxType=
'unsigned_char')
223 config.addOutputVar (self.
containerName,
'numberOfPixelDeadSensors',
'numberOfPixelDeadSensors', noSys=
True, auxType=
'unsigned_char')
224 config.addOutputVar (self.
containerName,
'numberOfPixelHits',
'numberOfPixelHits', noSys=
True, auxType=
'unsigned_char')
225 config.addOutputVar (self.
containerName,
'numberOfPixelHoles',
'numberOfPixelHoles', noSys=
True, auxType=
'unsigned_char')
226 config.addOutputVar (self.
containerName,
'numberOfPixelSharedHits',
'numberOfPixelSharedHits', noSys=
True, auxType=
'unsigned_char')
227 config.addOutputVar (self.
containerName,
'numberOfSCTDeadSensors',
'numberOfSCTDeadSensors', noSys=
True, auxType=
'unsigned_char')
228 config.addOutputVar (self.
containerName,
'numberOfSCTHits',
'numberOfSCTHits', noSys=
True, auxType=
'unsigned_char')
229 config.addOutputVar (self.
containerName,
'numberOfSCTHoles',
'numberOfSCTHoles', noSys=
True, auxType=
'unsigned_char')
230 config.addOutputVar (self.
containerName,
'numberOfSCTSharedHits',
'numberOfSCTSharedHits', noSys=
True, auxType=
'unsigned_char')
231 config.addOutputVar (self.
containerName,
'numberOfTRTHits',
'numberOfTRTHits', noSys=
True, auxType=
'unsigned_char')
232 config.addOutputVar (self.
containerName,
'numberOfTRTOutliers',
'numberOfTRTOutliers', noSys=
True, auxType=
'unsigned_char')