65 def makeAlgs (self, config) :
66 log = logging.getLogger(
'InDetTrackCalibrationConfig')
68 inputContainer =
"InDetTrackParticles"
69 if self.inputContainer:
70 inputContainer = self.inputContainer
71 config.setSourceName (self.containerName, inputContainer)
74 if config.wantCopy (self.containerName) :
75 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'InDetTrackShallowCopyAlg' )
76 alg.input = config.readName (self.containerName)
77 alg.output = config.copyName (self.containerName)
80 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'InDetTrackEtaCutAlg' )
81 alg.selectionDecoration =
'selectEta' + self.postfix +
',as_bits'
82 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
83 alg.selectionTool.maxEta = self.maxEta
84 alg.particles = config.readName (self.containerName)
85 alg.preselection = config.getPreselection (self.containerName,
'')
86 config.addSelection (self.containerName,
'', alg.selectionDecoration)
89 if config.dataType()
is not DataType.Data:
90 if not self.runBiasing:
91 log.warning(
'Disabling the biasing tool for now. This should not '
92 'be used in an analysis.')
94 if config.geometry()
is LHCPeriod.Run3:
95 raise ValueError (
'Recommendations are not yet available in Run 3.')
96 elif config.geometry()
is not LHCPeriod.Run2:
97 raise ValueError (
'No recommendations found for geometry \"'
98 + config.geometry().value +
'\". Please check '
100 alg = config.createAlgorithm(
'CP::InDetTrackBiasingAlg',
'InDetTrackBiasingAlg' )
101 config.addPrivateTool(
'biasingTool',
'InDet::InDetTrackBiasingTool' )
103 alg.biasingTool.biasD0 = self.biasD0
105 alg.biasingTool.biasZ0 = self.biasZ0
106 if self.biasQoverPsagitta:
107 alg.biasingTool.biasQoverPsagitta = self.biasQoverPsagitta
108 if self.customRunNumber:
109 alg.biasingTool.runNumber = self.customRunNumber
110 alg.inDetTracks = config.readName (self.containerName)
111 alg.inDetTracksOut = config.copyName (self.containerName)
112 alg.preselection = config.getPreselection (self.containerName,
'')
115 if config.dataType()
is not DataType.Data:
116 alg = config.createAlgorithm(
'CP::InDetTrackSmearingAlg',
'InDetTrackSmearingAlg' )
117 config.addPrivateTool(
'smearingTool',
'InDet::InDetTrackSmearingTool' )
118 if self.smearingToolSeed:
119 alg.smearingTool.Seed = self.smearingToolSeed
121 alg.smearingTool.calibFileIP_CTIDE = self.calibFile
123 if config.geometry()
is LHCPeriod.Run2:
125 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00/d0z0_smearing_factors_Run2_v2.root"
126 elif config.geometry()
is LHCPeriod.Run3:
127 if config.campaign()
is Campaign.MC23a:
129 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2022_d0z0_smearing_factors_v2.root"
130 elif config.campaign()
is Campaign.MC23d:
132 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2023_d0z0_smearing_factors_v2.root"
133 elif config.campaign()
is Campaign.MC23e:
135 alg.smearingTool.calibFileIP_CTIDE =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2024_d0z0_smearing_factors.root"
137 raise ValueError (
'No recommendations found for capaign \"'
138 + config.campaign().value +
'\" in Run 3. '
139 'Please check that the recommendations exist.')
141 raise ValueError (
'No recommendations found for geometry \"'
142 + config.geometry().value +
'\". Please check '
143 'the configuration.')
144 alg.inDetTracks = config.readName (self.containerName)
145 alg.inDetTracksOut = config.copyName (self.containerName)
146 alg.preselection = config.getPreselection (self.containerName,
'')
149 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'InDetTrackPtCutAlg' )
150 alg.selectionDecoration =
'selectPt' + self.postfix +
',as_bits'
151 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
152 alg.selectionTool.minPt = self.minPt
153 alg.particles = config.readName (self.containerName)
154 alg.preselection = config.getPreselection (self.containerName,
'')
155 config.addSelection (self.containerName,
'', alg.selectionDecoration,
158 alg = config.createAlgorithm(
'CP::InDetTrackMomentumDecoratorAlg',
'MomentumDecorator' )
159 alg.inDetTracks = config.readName(self.containerName)
161 config.addOutputVar (self.containerName,
'pt_%SYS%',
'pt')
162 config.addOutputVar (self.containerName,
'eta',
'eta', noSys=
True)
163 config.addOutputVar (self.containerName,
'phi',
'phi', noSys=
True)
164 config.addOutputVar (self.containerName,
'charge',
'charge', noSys=
True)
165 config.addOutputVar (self.containerName,
'qOverP',
'qOverP')
166 config.addOutputVar (self.containerName,
'd0',
'd0')
167 config.addOutputVar (self.containerName,
'z0',
'z0')
168 config.addOutputVar (self.containerName,
'vz',
'vz', noSys=
True)
171 if self.outputTrackSummaryInfo
and config.dataType()
is not DataType.Data:
172 config.addOutputVar (self.containerName,
'numberOfInnermostPixelLayerHits',
'numberOfInnermostPixelLayerHits', noSys=
True)
173 config.addOutputVar (self.containerName,
'numberOfPixelDeadSensors',
'numberOfPixelDeadSensors', noSys=
True)
174 config.addOutputVar (self.containerName,
'numberOfPixelHits',
'numberOfPixelHits', noSys=
True)
175 config.addOutputVar (self.containerName,
'numberOfPixelHoles',
'numberOfPixelHoles', noSys=
True)
176 config.addOutputVar (self.containerName,
'numberOfPixelSharedHits',
'numberOfPixelSharedHits', noSys=
True)
177 config.addOutputVar (self.containerName,
'numberOfSCTDeadSensors',
'numberOfSCTDeadSensors', noSys=
True)
178 config.addOutputVar (self.containerName,
'numberOfSCTHits',
'numberOfSCTHits', noSys=
True)
179 config.addOutputVar (self.containerName,
'numberOfSCTHoles',
'numberOfSCTHoles', noSys=
True)
180 config.addOutputVar (self.containerName,
'numberOfSCTSharedHits',
'numberOfSCTSharedHits', noSys=
True)
181 config.addOutputVar (self.containerName,
'numberOfTRTHits',
'numberOfTRTHits', noSys=
True)
182 config.addOutputVar (self.containerName,
'numberOfTRTOutliers',
'numberOfTRTOutliers', noSys=
True)