81 biasQoverPsagitta : float=
None,
82 customRunNumber : int=
None,
83 applyD0Bias : bool=
True,
84 applyZ0Bias : bool=
False,
85 applyQoverPBias : bool=
False) :
86 from InDetTrackSystematicsTools.InDetTrackSystematicsToolsConfig
import (
87 InDetTrackBiasingCalibKwargs,
89 toolName =
"biasingTool"
90 config.addPrivateTool(toolName,
"InDet::InDetTrackBiasingTool")
92 calib = InDetTrackBiasingCalibKwargs(config.flags)
93 alg.biasingTool.calibFiles = calib[
'calibFiles']
94 if 'runNumberBounds' in calib:
95 alg.biasingTool.runNumberBounds = calib[
'runNumberBounds']
98 alg.biasingTool.biasD0 = biasD0
100 alg.biasingTool.biasZ0 = biasZ0
101 if biasQoverPsagitta:
102 alg.biasingTool.biasQoverPsagitta = biasQoverPsagitta
104 alg.biasingTool.runNumber = customRunNumber
107 alg.biasingTool.applyD0Bias = applyD0Bias
108 alg.biasingTool.applyZ0Bias = applyZ0Bias
109 alg.biasingTool.applyQoverPBias = applyQoverPBias
110 alg.biasingTool.isMC = config.dataType()
is not DataType.Data
116 calibFile : str=
None) :
117 toolName =
"smearingTool"
118 config.addPrivateTool(toolName,
"InDet::InDetTrackSmearingTool")
120 alg.tackSmearingTool.calibFileIP_CTIDE = calibFile
122 if config.geometry()
is LHCPeriod.Run2:
124 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00/d0z0_smearing_factors_Run2_v2.root"
125 elif config.geometry()
is LHCPeriod.Run3:
126 if config.campaign()
is Campaign.MC23a:
128 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2022_d0z0_smearing_factors_v2.root"
129 elif config.campaign()
is Campaign.MC23d:
131 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2023_d0z0_smearing_factors_v2.root"
132 elif config.campaign()
is Campaign.MC23e:
134 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2024_d0z0_smearing_factors.root"
136 raise ValueError (
'No recommendations found for campaign \"'
137 + config.campaign().value +
'\" in Run 3. '
138 'Please check that the recommendations exist.')
140 raise ValueError (
'No recommendations found for geometry \"'
141 + config.geometry().value +
'\". Please check '
142 'the configuration.')
146 log = logging.getLogger(
'InDetTrackCalibrationConfig')
148 inputContainer =
"InDetTrackParticles"
155 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'InDetTrackShallowCopyAlg' )
160 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'InDetTrackEtaCutAlg' )
161 alg.selectionDecoration =
'selectEta' + self.postfix +
',as_bits'
162 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
163 alg.selectionTool.maxEta = self.maxEta
165 alg.preselection = config.getPreselection (self.
containerName,
'')
166 config.addSelection (self.
containerName,
'', alg.selectionDecoration)
169 if config.dataType()
is not DataType.Data:
171 log.warning(
'Disabling the biasing tool for now. This should not '
172 'be used in an analysis.')
174 alg = config.createAlgorithm(
'CP::InDetTrackBiasingAlg',
'InDetTrackBiasingAlg' )
186 alg.preselection = config.getPreselection (self.
containerName,
'')
189 if config.dataType()
is not DataType.Data:
190 alg = config.createAlgorithm(
'CP::InDetTrackSmearingAlg',
'InDetTrackSmearingAlg' )
196 alg.preselection = config.getPreselection (self.
containerName,
'')
199 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'InDetTrackPtCutAlg' )
200 alg.selectionDecoration =
'selectPt' + self.postfix +
',as_bits'
201 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
202 alg.selectionTool.minPt = self.minPt
204 alg.preselection = config.getPreselection (self.
containerName,
'')
205 config.addSelection (self.
containerName,
'', alg.selectionDecoration,
209 alg = config.createAlgorithm(
'CP::InDetTrackExtraVarDecoratorAlg',
'ExtraVarDecorator' )
213 config.addOutputVar (self.
containerName,
'eta_%SYS%',
'eta', noSys=
True)
214 config.addOutputVar (self.
containerName,
'phi',
'phi', noSys=
True)
215 config.addOutputVar (self.
containerName,
'charge_%SYS%',
'charge', noSys=
True)
219 config.addOutputVar (self.
containerName,
'vz',
'vz', noSys=
True, auxType=
'float')
223 config.addOutputVar (self.
containerName,
'numberOfInnermostPixelLayerHits',
'numberOfInnermostPixelLayerHits', noSys=
True, auxType=
'unsigned_char')
224 config.addOutputVar (self.
containerName,
'numberOfPixelDeadSensors',
'numberOfPixelDeadSensors', noSys=
True, auxType=
'unsigned_char')
225 config.addOutputVar (self.
containerName,
'numberOfPixelHits',
'numberOfPixelHits', noSys=
True, auxType=
'unsigned_char')
226 config.addOutputVar (self.
containerName,
'numberOfPixelHoles',
'numberOfPixelHoles', noSys=
True, auxType=
'unsigned_char')
227 config.addOutputVar (self.
containerName,
'numberOfPixelSharedHits',
'numberOfPixelSharedHits', noSys=
True, auxType=
'unsigned_char')
228 config.addOutputVar (self.
containerName,
'numberOfSCTDeadSensors',
'numberOfSCTDeadSensors', noSys=
True, auxType=
'unsigned_char')
229 config.addOutputVar (self.
containerName,
'numberOfSCTHits',
'numberOfSCTHits', noSys=
True, auxType=
'unsigned_char')
230 config.addOutputVar (self.
containerName,
'numberOfSCTHoles',
'numberOfSCTHoles', noSys=
True, auxType=
'unsigned_char')
231 config.addOutputVar (self.
containerName,
'numberOfSCTSharedHits',
'numberOfSCTSharedHits', noSys=
True, auxType=
'unsigned_char')
232 config.addOutputVar (self.
containerName,
'numberOfTRTHits',
'numberOfTRTHits', noSys=
True, auxType=
'unsigned_char')
233 config.addOutputVar (self.
containerName,
'numberOfTRTOutliers',
'numberOfTRTOutliers', noSys=
True, auxType=
'unsigned_char')