128 def makeAlgs (self, config) :
129
130 log = logging.getLogger('ElectronCalibrationConfig')
131
132 if self.forceFullSimConfigForP4:
133 log.warning("You are running ElectronCalibrationConfig forcing full sim config")
134 log.warning(" This is only intended to be used for testing purposes")
135
136 inputContainer = "AnalysisElectrons" if config.isPhyslite() else "Electrons"
137 if self.inputContainer:
138 inputContainer = self.inputContainer
139 config.setSourceName (self.containerName, inputContainer)
140
141
142 if self.decorateCaloClusterEta:
143 alg = config.createAlgorithm( 'CP::EgammaCaloClusterEtaAlg',
144 'ElectronEgammaCaloClusterEtaAlg',
145 reentrant=True )
146 alg.particles = config.readName(self.containerName)
147 config.addOutputVar (self.containerName, 'caloEta2', 'caloEta2', noSys=True)
148
149 if self.decorateSamplingPattern:
150 config.createAlgorithm( 'CP::EgammaSamplingPatternDecoratorAlg', 'EgammaSamplingPatternDecoratorAlg' )
151
152
153 if config.wantCopy (self.containerName) :
154 alg = config.createAlgorithm( 'CP::AsgShallowCopyAlg', 'ElectronShallowCopyAlg' )
155 alg.input = config.readName (self.containerName)
156 alg.output = config.copyName (self.containerName)
157
158
159 alg = config.createAlgorithm( 'CP::AsgSelectionAlg', 'ElectronEtaCutAlg' )
160 alg.selectionDecoration = 'selectEta' + self.postfix + ',as_bits'
161 config.addPrivateTool( 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
162 alg.selectionTool.maxEta = self.maxEta
163 if self.crackVeto:
164 alg.selectionTool.etaGapLow = 1.37
165 alg.selectionTool.etaGapHigh = 1.52
166 alg.selectionTool.useClusterEta = True
167 alg.particles = config.readName (self.containerName)
168 alg.preselection = config.getPreselection (self.containerName, '')
169 config.addSelection (self.containerName, '', alg.selectionDecoration)
170
171
172 alg = config.createAlgorithm( 'CP::AsgSelectionAlg', 'ElectronObjectQualityAlg' )
173 alg.selectionDecoration = 'goodOQ' + self.postfix + ',as_bits'
174 config.addPrivateTool( 'selectionTool', 'CP::EgammaIsGoodOQSelectionTool' )
175 alg.selectionTool.Mask = xAOD.EgammaParameters.BADCLUSELECTRON
176 alg.particles = config.readName (self.containerName)
177 alg.preselection = config.getPreselection (self.containerName, '')
178 config.addSelection (self.containerName, '', alg.selectionDecoration)
179
180 if not self.splitCalibrationAndSmearing :
181
182 alg = self.makeCalibrationAndSmearingAlg (config, 'ElectronCalibrationAndSmearingAlg')
183 if config.isPhyslite() and not self.recalibratePhyslite :
184 alg.skipNominal = True
185 else:
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203 alg = self.makeCalibrationAndSmearingAlg (config, 'ElectronBaseCalibrationAlg')
204
205 alg.noToolSystematics = True
206
207 alg.calibrationAndSmearingTool.doSmearing = False
208
209
210 alg = self.makeCalibrationAndSmearingAlg (config, 'ElectronCalibrationSystematicsAlg')
211
212 alg.calibrationAndSmearingTool.doScaleCorrection = False
213 alg.calibrationAndSmearingTool.useMVACalibration = False
214 alg.calibrationAndSmearingTool.decorateEmva = False
215
216 if self.minPt > 0 :
217
218 alg = config.createAlgorithm( 'CP::AsgSelectionAlg', 'ElectronPtCutAlg' )
219 alg.selectionDecoration = 'selectPt' + self.postfix + ',as_bits'
220 config.addPrivateTool( 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
221 alg.selectionTool.minPt = self.minPt
222 alg.particles = config.readName (self.containerName)
223 alg.preselection = config.getPreselection (self.containerName, '')
224 config.addSelection (self.containerName, '', alg.selectionDecoration,
225 preselection=True)
226
227
228 if self.isolationCorrection:
229 alg = config.createAlgorithm( 'CP::EgammaIsolationCorrectionAlg',
230 'ElectronIsolationCorrectionAlg' )
231 config.addPrivateTool( 'isolationCorrectionTool',
232 'CP::IsolationCorrectionTool' )
233 alg.isolationCorrectionTool.IsMC = config.dataType() is not DataType.Data
234 alg.isolationCorrectionTool.AFII_corr = (
235 0 if self.forceFullSimConfigForIso
236 else config.dataType() is DataType.FastSim)
237 alg.isolationCorrectionTool.FixTimingIssueInCore = True
238 alg.isolationCorrectionTool.ToolVer = "REL22"
239 alg.isolationCorrectionTool.CorrFile = "IsolationCorrections/v6/isolation_ptcorrections_rel22_mc20.root"
240 alg.egammas = config.readName (self.containerName)
241 alg.egammasOut = config.copyName (self.containerName)
242 alg.preselection = config.getPreselection (self.containerName, '')
243 else:
244 log.warning("You are not applying the isolation corrections")
245 log.warning("This is only intended to be used for testing purposes")
246
247
248 if self.writeTrackD0Z0:
249 alg = config.createAlgorithm( 'CP::AsgLeptonTrackDecorationAlg',
250 'LeptonTrackDecorator' )
251 if config.dataType() is not DataType.Data:
252 if self.runTrackBiasing:
253 InDetTrackCalibrationConfig.makeTrackBiasingTool(config, alg)
254 InDetTrackCalibrationConfig.makeTrackSmearingTool(config, alg)
255 alg.particles = config.readName (self.containerName)
256
257 alg = config.createAlgorithm( 'CP::AsgEnergyDecoratorAlg', 'EnergyDecorator' )
258 alg.particles = config.readName(self.containerName)
259
260 config.addOutputVar (self.containerName, 'pt', 'pt')
261 config.addOutputVar (self.containerName, 'eta', 'eta', noSys=True)
262 config.addOutputVar (self.containerName, 'phi', 'phi', noSys=True)
263 config.addOutputVar (self.containerName, 'e_%SYS%', 'e')
264 config.addOutputVar (self.containerName, 'charge', 'charge', noSys=True)
265
266 if self.writeTrackD0Z0:
267 config.addOutputVar (self.containerName, 'd0_%SYS%', 'd0')
268 config.addOutputVar (self.containerName, 'd0sig_%SYS%', 'd0sig')
269 config.addOutputVar (self.containerName, 'z0_%SYS%', 'z0')
270 config.addOutputVar (self.containerName, 'z0sintheta_%SYS%', 'z0sintheta')
271 config.addOutputVar (self.containerName, 'z0sinthetasig_%SYS%', 'z0sinthetasig')
272
273
274 if self.decorateTruth and config.dataType() is not DataType.Data:
275 config.addOutputVar (self.containerName, "truthType", "truth_type", noSys=True)
276 config.addOutputVar (self.containerName, "truthOrigin", "truth_origin", noSys=True)
277
278 config.addOutputVar (self.containerName, "firstEgMotherPdgId", "truth_firstEgMotherPdgId", noSys=True)
279 config.addOutputVar (self.containerName, "firstEgMotherTruthOrigin", "truth_firstEgMotherTruthOrigin", noSys=True)
280 config.addOutputVar (self.containerName, "firstEgMotherTruthType", "truth_firstEgMotherTruthType", noSys=True)
281
282