124 def makeAlgs (self, config) :
126 log = logging.getLogger(
'PhotonCalibrationConfig')
128 postfix = self.postfix
129 if postfix !=
'' and postfix[0] !=
'_' :
130 postfix =
'_' + postfix
132 if self.forceFullSimConfigForP4:
133 log.warning(
"You are running PhotonCalibrationConfig forcing full sim config for P4 corrections")
134 log.warning(
"This is only intended to be used for testing purposes")
136 if config.isPhyslite() :
137 config.setSourceName (self.containerName,
"AnalysisPhotons")
139 config.setSourceName (self.containerName,
"Photons")
141 cleaningWP =
'NoTime' if self.cleaningAllowLate
else ''
144 if self.decorateCaloClusterEta:
145 alg = config.createAlgorithm(
'CP::EgammaCaloClusterEtaAlg',
146 'ElectronEgammaCaloClusterEtaAlg',
148 alg.particles = config.readName(self.containerName)
149 config.addOutputVar (self.containerName,
'caloEta2',
'caloEta2', noSys=
True)
152 if config.wantCopy (self.containerName) :
153 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'PhotonShallowCopyAlg' )
154 alg.input = config.readName (self.containerName)
155 alg.output = config.copyName (self.containerName)
158 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonEtaCutAlg' )
159 alg.selectionDecoration =
'selectEta' + postfix +
',as_bits'
160 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
161 alg.selectionTool.maxEta = self.maxEta
163 alg.selectionTool.etaGapLow = 1.37
164 alg.selectionTool.etaGapHigh = 1.52
165 alg.selectionTool.useClusterEta =
True
166 alg.particles = config.readName (self.containerName)
167 alg.preselection = config.getPreselection (self.containerName,
'')
168 config.addSelection (self.containerName,
'', alg.selectionDecoration)
171 if self.recomputeIsEM
and config.dataType()
is DataType.FullSim:
172 alg = config.createAlgorithm(
'CP::PhotonShowerShapeFudgeAlg',
173 'PhotonShowerShapeFudgeAlg' )
174 config.addPrivateTool(
'showerShapeFudgeTool',
175 'ElectronPhotonVariableCorrectionTool' )
176 if config.geometry
is LHCPeriod.Run2:
177 alg.showerShapeFudgeTool.ConfigFile = \
178 'EGammaVariableCorrection/TUNE25/ElPhVariableNominalCorrection.conf'
179 if config.geometry
is LHCPeriod.Run3:
180 alg.showerShapeFudgeTool.ConfigFile = \
181 'EGammaVariableCorrection/TUNE23/ElPhVariableNominalCorrection.conf'
182 alg.photons = config.readName (self.containerName)
183 alg.photonsOut = config.copyName (self.containerName)
184 alg.preselection = config.getPreselection (self.containerName,
'')
187 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonObjectQualityAlg' )
188 alg.selectionDecoration =
'goodOQ,as_bits'
189 config.addPrivateTool(
'selectionTool',
'CP::EgammaIsGoodOQSelectionTool' )
190 alg.selectionTool.Mask = xAOD.EgammaParameters.BADCLUSPHOTON
191 alg.particles = config.readName (self.containerName)
192 alg.preselection = config.getPreselection (self.containerName,
'')
193 config.addSelection (self.containerName,
'', alg.selectionDecoration)
196 if self.enableCleaning:
197 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonCleaningAlg' )
198 config.addPrivateTool(
'selectionTool',
'CP::AsgFlagSelectionTool' )
199 alg.selectionDecoration =
'isClean,as_bits'
200 alg.selectionTool.selectionFlags = [
'DFCommonPhotonsCleaning' + cleaningWP]
201 alg.particles = config.readName (self.containerName)
202 alg.preselection = config.getPreselection (self.containerName,
'')
203 config.addSelection (self.containerName,
'', alg.selectionDecoration)
208 alg = config.createAlgorithm(
'CP::PhotonOriginCorrectionAlg',
209 'PhotonOriginCorrectionAlg',
211 alg.photons = config.readName (self.containerName)
212 alg.photonsOut = config.copyName (self.containerName)
213 alg.preselection = config.getPreselection (self.containerName,
'')
215 if not self.splitCalibrationAndSmearing :
217 alg = self.makeCalibrationAndSmearingAlg (config,
'PhotonCalibrationAndSmearingAlg')
218 if config.isPhyslite()
and not self.recalibratePhyslite :
219 alg.skipNominal =
True
238 alg = self.makeCalibrationAndSmearingAlg (config,
'PhotonBaseCalibrationAlg')
240 alg.noToolSystematics =
True
242 alg.calibrationAndSmearingTool.doSmearing =
False
245 alg = self.makeCalibrationAndSmearingAlg (config,
'PhotonCalibrationSystematicsAlg')
247 alg.calibrationAndSmearingTool.doScaleCorrection =
False
248 alg.calibrationAndSmearingTool.useMVACalibration =
False
249 alg.calibrationAndSmearingTool.decorateEmva =
False
251 if not self.applyIsolationCorrection:
252 log.warning(
"You are not applying the isolation corrections")
253 log.warning(
"This is only intended to be used for testing purposes")
258 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonPtCutAlg' )
259 alg.selectionDecoration =
'selectPt' + postfix +
',as_bits'
260 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
261 alg.selectionTool.minPt = self.minPt
262 alg.particles = config.readName (self.containerName)
263 alg.preselection = config.getPreselection (self.containerName,
'')
264 config.addSelection (self.containerName,
'', alg.selectionDecoration,
268 if self.applyIsolationCorrection:
270 if self.forceFullSimConfigForIso:
271 log.warning(
"You are running PhotonCalibrationConfig forcing full sim config for isolation corrections")
272 log.warning(
"This is only intended to be used for testing purposes")
274 alg = config.createAlgorithm(
'CP::EgammaIsolationCorrectionAlg',
275 'PhotonIsolationCorrectionAlg' )
276 config.addPrivateTool(
'isolationCorrectionTool',
277 'CP::IsolationCorrectionTool' )
278 alg.isolationCorrectionTool.IsMC = config.dataType()
is not DataType.Data
279 alg.isolationCorrectionTool.AFII_corr = (
280 0
if self.forceFullSimConfigForIso
281 else config.dataType()
is DataType.FastSim)
282 alg.egammas = config.readName (self.containerName)
283 alg.egammasOut = config.copyName (self.containerName)
284 alg.preselection = config.getPreselection (self.containerName,
'')
287 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'EnergyDecorator' )
288 alg.particles = config.readName (self.containerName)
290 config.addOutputVar (self.containerName,
'pt',
'pt')
291 config.addOutputVar (self.containerName,
'eta',
'eta', noSys=
True)
292 config.addOutputVar (self.containerName,
'phi',
'phi', noSys=
True)
293 config.addOutputVar (self.containerName,
'e_%SYS%',
'e')
296 if self.decorateTruth
and config.dataType()
is not DataType.Data:
297 config.addOutputVar (self.containerName,
"truthType",
"truth_type", noSys=
True)
298 config.addOutputVar (self.containerName,
"truthOrigin",
"truth_origin", noSys=
True)