125 def makeAlgs (self, config) :
127 log = logging.getLogger(
'PhotonCalibrationConfig')
129 postfix = self.postfix
130 if postfix !=
'' and postfix[0] !=
'_' :
131 postfix =
'_' + postfix
133 if self.forceFullSimConfigForP4:
134 log.warning(
"You are running PhotonCalibrationConfig forcing full sim config for P4 corrections")
135 log.warning(
"This is only intended to be used for testing purposes")
137 if config.isPhyslite() :
138 config.setSourceName (self.containerName,
"AnalysisPhotons")
140 config.setSourceName (self.containerName,
"Photons")
142 cleaningWP =
'NoTime' if self.cleaningAllowLate
else ''
145 if self.decorateCaloClusterEta:
146 alg = config.createAlgorithm(
'CP::EgammaCaloClusterEtaAlg',
147 'ElectronEgammaCaloClusterEtaAlg',
149 alg.particles = config.readName(self.containerName)
150 config.addOutputVar (self.containerName,
'caloEta2',
'caloEta2', noSys=
True)
153 if config.wantCopy (self.containerName) :
154 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'PhotonShallowCopyAlg' )
155 alg.input = config.readName (self.containerName)
156 alg.output = config.copyName (self.containerName)
159 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonEtaCutAlg' )
160 alg.selectionDecoration =
'selectEta' + postfix +
',as_bits'
161 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
162 alg.selectionTool.maxEta = self.maxEta
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)
172 if self.recomputeIsEM
and config.dataType()
is DataType.FullSim:
173 alg = config.createAlgorithm(
'CP::PhotonShowerShapeFudgeAlg',
174 'PhotonShowerShapeFudgeAlg' )
175 config.addPrivateTool(
'showerShapeFudgeTool',
176 'ElectronPhotonVariableCorrectionTool' )
177 if config.geometry
is LHCPeriod.Run2:
178 alg.showerShapeFudgeTool.ConfigFile = \
179 'EGammaVariableCorrection/TUNE25/ElPhVariableNominalCorrection.conf'
180 if config.geometry
is LHCPeriod.Run3:
181 alg.showerShapeFudgeTool.ConfigFile = \
182 'EGammaVariableCorrection/TUNE23/ElPhVariableNominalCorrection.conf'
183 alg.photons = config.readName (self.containerName)
184 alg.photonsOut = config.copyName (self.containerName)
185 alg.preselection = config.getPreselection (self.containerName,
'')
188 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonObjectQualityAlg' )
189 alg.selectionDecoration =
'goodOQ,as_bits'
190 config.addPrivateTool(
'selectionTool',
'CP::EgammaIsGoodOQSelectionTool' )
191 alg.selectionTool.Mask = xAOD.EgammaParameters.BADCLUSPHOTON
192 alg.particles = config.readName (self.containerName)
193 alg.preselection = config.getPreselection (self.containerName,
'')
194 config.addSelection (self.containerName,
'', alg.selectionDecoration)
197 if self.enableCleaning:
198 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonCleaningAlg' )
199 config.addPrivateTool(
'selectionTool',
'CP::AsgFlagSelectionTool' )
200 alg.selectionDecoration =
'isClean,as_bits'
201 alg.selectionTool.selectionFlags = [
'DFCommonPhotonsCleaning' + cleaningWP]
202 alg.particles = config.readName (self.containerName)
203 alg.preselection = config.getPreselection (self.containerName,
'')
204 config.addSelection (self.containerName,
'', alg.selectionDecoration)
209 alg = config.createAlgorithm(
'CP::PhotonOriginCorrectionAlg',
210 'PhotonOriginCorrectionAlg',
212 alg.photons = config.readName (self.containerName)
213 alg.photonsOut = config.copyName (self.containerName)
214 alg.preselection = config.getPreselection (self.containerName,
'')
216 if not self.splitCalibrationAndSmearing :
218 alg = self.makeCalibrationAndSmearingAlg (config,
'PhotonCalibrationAndSmearingAlg')
219 if config.isPhyslite()
and not self.recalibratePhyslite :
220 alg.skipNominal =
True
239 alg = self.makeCalibrationAndSmearingAlg (config,
'PhotonBaseCalibrationAlg')
241 alg.noToolSystematics =
True
243 alg.calibrationAndSmearingTool.doSmearing =
False
246 alg = self.makeCalibrationAndSmearingAlg (config,
'PhotonCalibrationSystematicsAlg')
248 alg.calibrationAndSmearingTool.doScaleCorrection =
False
249 alg.calibrationAndSmearingTool.useMVACalibration =
False
250 alg.calibrationAndSmearingTool.decorateEmva =
False
252 if not self.applyIsolationCorrection:
253 log.warning(
"You are not applying the isolation corrections")
254 log.warning(
"This is only intended to be used for testing purposes")
259 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonPtCutAlg' )
260 alg.selectionDecoration =
'selectPt' + postfix +
',as_bits'
261 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
262 alg.selectionTool.minPt = self.minPt
263 alg.particles = config.readName (self.containerName)
264 alg.preselection = config.getPreselection (self.containerName,
'')
265 config.addSelection (self.containerName,
'', alg.selectionDecoration,
269 if self.applyIsolationCorrection:
271 if self.forceFullSimConfigForIso:
272 log.warning(
"You are running PhotonCalibrationConfig forcing full sim config for isolation corrections")
273 log.warning(
"This is only intended to be used for testing purposes")
275 alg = config.createAlgorithm(
'CP::EgammaIsolationCorrectionAlg',
276 'PhotonIsolationCorrectionAlg' )
277 config.addPrivateTool(
'isolationCorrectionTool',
278 'CP::IsolationCorrectionTool' )
279 alg.isolationCorrectionTool.IsMC = config.dataType()
is not DataType.Data
280 alg.isolationCorrectionTool.AFII_corr = (
281 0
if self.forceFullSimConfigForIso
282 else config.dataType()
is DataType.FastSim)
283 alg.egammas = config.readName (self.containerName)
284 alg.egammasOut = config.copyName (self.containerName)
285 alg.preselection = config.getPreselection (self.containerName,
'')
288 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'EnergyDecorator' )
289 alg.particles = config.readName (self.containerName)
291 config.addOutputVar (self.containerName,
'pt',
'pt')
292 config.addOutputVar (self.containerName,
'eta',
'eta', noSys=
True)
293 config.addOutputVar (self.containerName,
'phi',
'phi', noSys=
True)
294 config.addOutputVar (self.containerName,
'e_%SYS%',
'e')
297 if self.decorateTruth
and config.dataType()
is not DataType.Data:
298 config.addOutputVar (self.containerName,
"truthType",
"truth_type", noSys=
True)
299 config.addOutputVar (self.containerName,
"truthOrigin",
"truth_origin", noSys=
True)