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