116 def makeAlgs (self, config) :
118 log = logging.getLogger(
'ElectronCalibrationConfig')
120 if self.forceFullSimConfig:
121 log.warning(
"You are running ElectronCalibrationConfig forcing full sim config")
122 log.warning(
" This is only intended to be used for testing purposes")
124 inputContainer =
"AnalysisElectrons" if config.isPhyslite()
else "Electrons"
125 if self.inputContainer:
126 inputContainer = self.inputContainer
127 config.setSourceName (self.containerName, inputContainer)
130 if self.decorateCaloClusterEta:
131 alg = config.createAlgorithm(
'CP::EgammaCaloClusterEtaAlg',
132 'ElectronEgammaCaloClusterEtaAlg' + self.postfix,
134 alg.particles = config.readName(self.containerName)
135 config.addOutputVar (self.containerName,
'caloEta2',
'caloEta2', noSys=
True)
137 if self.decorateSamplingPattern:
138 config.createAlgorithm(
'CP::EgammaSamplingPatternDecoratorAlg',
'EgammaSamplingPatternDecoratorAlg' + self.postfix )
141 if config.wantCopy (self.containerName) :
142 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'ElectronShallowCopyAlg' + self.postfix )
143 alg.input = config.readName (self.containerName)
144 alg.output = config.copyName (self.containerName)
147 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'ElectronEtaCutAlg' + self.postfix )
148 alg.selectionDecoration =
'selectEta' + self.postfix +
',as_bits'
149 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
150 alg.selectionTool.maxEta = self.maxEta
152 alg.selectionTool.etaGapLow = 1.37
153 alg.selectionTool.etaGapHigh = 1.52
154 alg.selectionTool.useClusterEta =
True
155 alg.particles = config.readName (self.containerName)
156 alg.preselection = config.getPreselection (self.containerName,
'')
157 config.addSelection (self.containerName,
'', alg.selectionDecoration)
160 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'ElectronObjectQualityAlg' + self.postfix )
161 alg.selectionDecoration =
'goodOQ' + self.postfix +
',as_bits'
162 config.addPrivateTool(
'selectionTool',
'CP::EgammaIsGoodOQSelectionTool' )
163 alg.selectionTool.Mask = xAOD.EgammaParameters.BADCLUSELECTRON
164 alg.particles = config.readName (self.containerName)
165 alg.preselection = config.getPreselection (self.containerName,
'')
166 config.addSelection (self.containerName,
'', alg.selectionDecoration)
168 if not self.splitCalibrationAndSmearing :
170 alg = self.makeCalibrationAndSmearingAlg (config,
'ElectronCalibrationAndSmearingAlg')
171 if config.isPhyslite()
and not self.recalibratePhyslite :
172 alg.skipNominal =
True
191 alg = self.makeCalibrationAndSmearingAlg (config,
'ElectronBaseCalibrationAlg')
193 alg.noToolSystematics =
True
195 alg.calibrationAndSmearingTool.doSmearing =
False
198 alg = self.makeCalibrationAndSmearingAlg (config,
'ElectronCalibrationSystematicsAlg')
200 alg.calibrationAndSmearingTool.doScaleCorrection =
False
201 alg.calibrationAndSmearingTool.useMVACalibration =
False
202 alg.calibrationAndSmearingTool.decorateEmva =
False
206 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'ElectronPtCutAlg' + self.postfix )
207 alg.selectionDecoration =
'selectPt' + self.postfix +
',as_bits'
208 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
209 alg.selectionTool.minPt = self.minPt
210 alg.particles = config.readName (self.containerName)
211 alg.preselection = config.getPreselection (self.containerName,
'')
212 config.addSelection (self.containerName,
'', alg.selectionDecoration,
216 if self.isolationCorrection:
217 alg = config.createAlgorithm(
'CP::EgammaIsolationCorrectionAlg',
218 'ElectronIsolationCorrectionAlg' + self.postfix )
219 config.addPrivateTool(
'isolationCorrectionTool',
220 'CP::IsolationCorrectionTool' )
221 alg.isolationCorrectionTool.IsMC = config.dataType()
is not DataType.Data
222 alg.isolationCorrectionTool.AFII_corr = (
223 0
if self.forceFullSimConfig
224 else config.dataType()
is DataType.FastSim)
225 alg.egammas = config.readName (self.containerName)
226 alg.egammasOut = config.copyName (self.containerName)
227 alg.preselection = config.getPreselection (self.containerName,
'')
230 if self.writeTrackD0Z0:
231 alg = config.createAlgorithm(
'CP::AsgLeptonTrackDecorationAlg',
232 'LeptonTrackDecorator' + self.containerName + self.postfix,
234 alg.particles = config.readName (self.containerName)
236 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'EnergyDecorator' + self.containerName + self.postfix )
237 alg.particles = config.readName(self.containerName)
239 config.addOutputVar (self.containerName,
'pt',
'pt')
240 config.addOutputVar (self.containerName,
'eta',
'eta', noSys=
True)
241 config.addOutputVar (self.containerName,
'phi',
'phi', noSys=
True)
242 config.addOutputVar (self.containerName,
'e_%SYS%',
'e')
243 config.addOutputVar (self.containerName,
'charge',
'charge', noSys=
True)
245 if self.writeTrackD0Z0:
246 config.addOutputVar (self.containerName,
'd0_%SYS%',
'd0', noSys=
True)
247 config.addOutputVar (self.containerName,
'd0sig_%SYS%',
'd0sig', noSys=
True)
248 config.addOutputVar (self.containerName,
'z0sintheta_%SYS%',
'z0sintheta', noSys=
True)
249 config.addOutputVar (self.containerName,
'z0sinthetasig_%SYS%',
'z0sinthetasig', noSys=
True)
252 if self.decorateTruth
and config.dataType()
is not DataType.Data:
253 config.addOutputVar (self.containerName,
"truthType",
"truth_type", noSys=
True)
254 config.addOutputVar (self.containerName,
"truthOrigin",
"truth_origin", noSys=
True)
256 config.addOutputVar (self.containerName,
"firstEgMotherPdgId",
"truth_firstEgMotherPdgId", noSys=
True)
257 config.addOutputVar (self.containerName,
"firstEgMotherTruthOrigin",
"truth_firstEgMotherTruthOrigin", noSys=
True)
258 config.addOutputVar (self.containerName,
"firstEgMotherTruthType",
"truth_firstEgMotherTruthType", noSys=
True)