121 def makeAlgs (self, config) :
123 log = logging.getLogger(
'ElectronCalibrationConfig')
125 if self.forceFullSimConfigForP4:
126 log.warning(
"You are running ElectronCalibrationConfig forcing full sim config")
127 log.warning(
" This is only intended to be used for testing purposes")
129 inputContainer =
"AnalysisElectrons" if config.isPhyslite()
else "Electrons"
130 if self.inputContainer:
131 inputContainer = self.inputContainer
132 config.setSourceName (self.containerName, inputContainer)
135 if self.decorateCaloClusterEta:
136 alg = config.createAlgorithm(
'CP::EgammaCaloClusterEtaAlg',
137 'ElectronEgammaCaloClusterEtaAlg',
139 alg.particles = config.readName(self.containerName)
140 config.addOutputVar (self.containerName,
'caloEta2',
'caloEta2', noSys=
True)
142 if self.decorateSamplingPattern:
143 config.createAlgorithm(
'CP::EgammaSamplingPatternDecoratorAlg',
'EgammaSamplingPatternDecoratorAlg' )
146 if config.wantCopy (self.containerName) :
147 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'ElectronShallowCopyAlg' )
148 alg.input = config.readName (self.containerName)
149 alg.output = config.copyName (self.containerName)
152 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'ElectronEtaCutAlg' )
153 alg.selectionDecoration =
'selectEta' + self.postfix +
',as_bits'
154 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
155 alg.selectionTool.maxEta = self.maxEta
157 alg.selectionTool.etaGapLow = 1.37
158 alg.selectionTool.etaGapHigh = 1.52
159 alg.selectionTool.useClusterEta =
True
160 alg.particles = config.readName (self.containerName)
161 alg.preselection = config.getPreselection (self.containerName,
'')
162 config.addSelection (self.containerName,
'', alg.selectionDecoration)
165 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'ElectronObjectQualityAlg' )
166 alg.selectionDecoration =
'goodOQ' + self.postfix +
',as_bits'
167 config.addPrivateTool(
'selectionTool',
'CP::EgammaIsGoodOQSelectionTool' )
168 alg.selectionTool.Mask = xAOD.EgammaParameters.BADCLUSELECTRON
169 alg.particles = config.readName (self.containerName)
170 alg.preselection = config.getPreselection (self.containerName,
'')
171 config.addSelection (self.containerName,
'', alg.selectionDecoration)
173 if not self.splitCalibrationAndSmearing :
175 alg = self.makeCalibrationAndSmearingAlg (config,
'ElectronCalibrationAndSmearingAlg')
176 if config.isPhyslite()
and not self.recalibratePhyslite :
177 alg.skipNominal =
True
196 alg = self.makeCalibrationAndSmearingAlg (config,
'ElectronBaseCalibrationAlg')
198 alg.noToolSystematics =
True
200 alg.calibrationAndSmearingTool.doSmearing =
False
203 alg = self.makeCalibrationAndSmearingAlg (config,
'ElectronCalibrationSystematicsAlg')
205 alg.calibrationAndSmearingTool.doScaleCorrection =
False
206 alg.calibrationAndSmearingTool.useMVACalibration =
False
207 alg.calibrationAndSmearingTool.decorateEmva =
False
211 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'ElectronPtCutAlg' )
212 alg.selectionDecoration =
'selectPt' + self.postfix +
',as_bits'
213 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
214 alg.selectionTool.minPt = self.minPt
215 alg.particles = config.readName (self.containerName)
216 alg.preselection = config.getPreselection (self.containerName,
'')
217 config.addSelection (self.containerName,
'', alg.selectionDecoration,
221 if self.isolationCorrection:
222 alg = config.createAlgorithm(
'CP::EgammaIsolationCorrectionAlg',
223 'ElectronIsolationCorrectionAlg' )
224 config.addPrivateTool(
'isolationCorrectionTool',
225 'CP::IsolationCorrectionTool' )
226 alg.isolationCorrectionTool.IsMC = config.dataType()
is not DataType.Data
227 alg.isolationCorrectionTool.AFII_corr = (
228 0
if self.forceFullSimConfigForIso
229 else config.dataType()
is DataType.FastSim)
230 alg.isolationCorrectionTool.ToolVer =
"REL22"
231 alg.isolationCorrectionTool.CorrFile =
"IsolationCorrections/v6/isolation_ptcorrections_rel22_mc20.root"
232 alg.egammas = config.readName (self.containerName)
233 alg.egammasOut = config.copyName (self.containerName)
234 alg.preselection = config.getPreselection (self.containerName,
'')
237 if self.writeTrackD0Z0:
238 alg = config.createAlgorithm(
'CP::AsgLeptonTrackDecorationAlg',
239 'LeptonTrackDecorator',
241 alg.particles = config.readName (self.containerName)
243 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'EnergyDecorator' )
244 alg.particles = config.readName(self.containerName)
246 config.addOutputVar (self.containerName,
'pt',
'pt')
247 config.addOutputVar (self.containerName,
'eta',
'eta', noSys=
True)
248 config.addOutputVar (self.containerName,
'phi',
'phi', noSys=
True)
249 config.addOutputVar (self.containerName,
'e_%SYS%',
'e')
250 config.addOutputVar (self.containerName,
'charge',
'charge', noSys=
True)
252 if self.writeTrackD0Z0:
253 config.addOutputVar (self.containerName,
'd0_%SYS%',
'd0', noSys=
True)
254 config.addOutputVar (self.containerName,
'd0sig_%SYS%',
'd0sig', noSys=
True)
255 config.addOutputVar (self.containerName,
'z0sintheta_%SYS%',
'z0sintheta', noSys=
True)
256 config.addOutputVar (self.containerName,
'z0sinthetasig_%SYS%',
'z0sinthetasig', noSys=
True)
259 if self.decorateTruth
and config.dataType()
is not DataType.Data:
260 config.addOutputVar (self.containerName,
"truthType",
"truth_type", noSys=
True)
261 config.addOutputVar (self.containerName,
"truthOrigin",
"truth_origin", noSys=
True)
263 config.addOutputVar (self.containerName,
"firstEgMotherPdgId",
"truth_firstEgMotherPdgId", noSys=
True)
264 config.addOutputVar (self.containerName,
"firstEgMotherTruthOrigin",
"truth_firstEgMotherTruthOrigin", noSys=
True)
265 config.addOutputVar (self.containerName,
"firstEgMotherTruthType",
"truth_firstEgMotherTruthType", noSys=
True)