120 def makeAlgs (self, config) :
122 log = logging.getLogger(
'PhotonCalibrationConfig')
124 postfix = self.postfix
125 if postfix !=
'' and postfix[0] !=
'_' :
126 postfix =
'_' + postfix
128 if self.forceFullSimConfigForP4:
129 log.warning(
"You are running PhotonCalibrationConfig forcing full sim config for P4 corrections")
130 log.warning(
"This is only intended to be used for testing purposes")
132 if config.isPhyslite() :
133 config.setSourceName (self.containerName,
"AnalysisPhotons")
135 config.setSourceName (self.containerName,
"Photons")
137 cleaningWP =
'NoTime' if self.cleaningAllowLate
else ''
140 if self.decorateCaloClusterEta:
141 alg = config.createAlgorithm(
'CP::EgammaCaloClusterEtaAlg',
142 'ElectronEgammaCaloClusterEtaAlg' + self.postfix,
144 alg.particles = config.readName(self.containerName)
145 config.addOutputVar (self.containerName,
'caloEta2',
'caloEta2', noSys=
True)
148 if config.wantCopy (self.containerName) :
149 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'PhotonShallowCopyAlg' + postfix )
150 alg.input = config.readName (self.containerName)
151 alg.output = config.copyName (self.containerName)
154 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonEtaCutAlg' + postfix )
155 alg.selectionDecoration =
'selectEta' + postfix +
',as_bits'
156 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
157 alg.selectionTool.maxEta = self.maxEta
159 alg.selectionTool.etaGapLow = 1.37
160 alg.selectionTool.etaGapHigh = 1.52
161 alg.selectionTool.useClusterEta =
True
162 alg.particles = config.readName (self.containerName)
163 alg.preselection = config.getPreselection (self.containerName,
'')
164 config.addSelection (self.containerName,
'', alg.selectionDecoration)
167 if self.recomputeIsEM
and config.dataType()
is DataType.FullSim:
168 alg = config.createAlgorithm(
'CP::PhotonShowerShapeFudgeAlg',
169 'PhotonShowerShapeFudgeAlg' + postfix )
170 config.addPrivateTool(
'showerShapeFudgeTool',
171 'ElectronPhotonVariableCorrectionTool' )
172 if config.geometry
is LHCPeriod.Run2:
173 alg.showerShapeFudgeTool.ConfigFile = \
174 'EGammaVariableCorrection/TUNE25/ElPhVariableNominalCorrection.conf'
175 if config.geometry
is LHCPeriod.Run3:
176 alg.showerShapeFudgeTool.ConfigFile = \
177 'EGammaVariableCorrection/TUNE23/ElPhVariableNominalCorrection.conf'
178 alg.photons = config.readName (self.containerName)
179 alg.photonsOut = config.copyName (self.containerName)
180 alg.preselection = config.getPreselection (self.containerName,
'')
183 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonObjectQualityAlg' + postfix )
184 alg.selectionDecoration =
'goodOQ,as_bits'
185 config.addPrivateTool(
'selectionTool',
'CP::EgammaIsGoodOQSelectionTool' )
186 alg.selectionTool.Mask = xAOD.EgammaParameters.BADCLUSPHOTON
187 alg.particles = config.readName (self.containerName)
188 alg.preselection = config.getPreselection (self.containerName,
'')
189 config.addSelection (self.containerName,
'', alg.selectionDecoration)
192 if self.enableCleaning:
193 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonCleaningAlg' + postfix)
194 config.addPrivateTool(
'selectionTool',
'CP::AsgFlagSelectionTool' )
195 alg.selectionDecoration =
'isClean,as_bits'
196 alg.selectionTool.selectionFlags = [
'DFCommonPhotonsCleaning' + cleaningWP]
197 alg.particles = config.readName (self.containerName)
198 alg.preselection = config.getPreselection (self.containerName,
'')
199 config.addSelection (self.containerName,
'', alg.selectionDecoration)
204 alg = config.createAlgorithm(
'CP::PhotonOriginCorrectionAlg',
205 'PhotonOriginCorrectionAlg' + postfix,
207 alg.photons = config.readName (self.containerName)
208 alg.photonsOut = config.copyName (self.containerName)
209 alg.preselection = config.getPreselection (self.containerName,
'')
211 if not self.splitCalibrationAndSmearing :
213 alg = self.makeCalibrationAndSmearingAlg (config,
'PhotonCalibrationAndSmearingAlg')
214 if config.isPhyslite()
and not self.recalibratePhyslite :
215 alg.skipNominal =
True
234 alg = self.makeCalibrationAndSmearingAlg (config,
'PhotonBaseCalibrationAlg')
236 alg.noToolSystematics =
True
238 alg.calibrationAndSmearingTool.doSmearing =
False
241 alg = self.makeCalibrationAndSmearingAlg (config,
'PhotonCalibrationSystematicsAlg')
243 alg.calibrationAndSmearingTool.doScaleCorrection =
False
244 alg.calibrationAndSmearingTool.useMVACalibration =
False
245 alg.calibrationAndSmearingTool.decorateEmva =
False
247 if not self.applyIsolationCorrection:
248 log.warning(
"You are not applying the isolation corrections")
249 log.warning(
"This is only intended to be used for testing purposes")
254 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonPtCutAlg' + postfix )
255 alg.selectionDecoration =
'selectPt' + postfix +
',as_bits'
256 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
257 alg.selectionTool.minPt = self.minPt
258 alg.particles = config.readName (self.containerName)
259 alg.preselection = config.getPreselection (self.containerName,
'')
260 config.addSelection (self.containerName,
'', alg.selectionDecoration,
264 if self.applyIsolationCorrection:
266 if self.forceFullSimConfigForIso:
267 log.warning(
"You are running PhotonCalibrationConfig forcing full sim config for isolation corrections")
268 log.warning(
"This is only intended to be used for testing purposes")
270 alg = config.createAlgorithm(
'CP::EgammaIsolationCorrectionAlg',
271 'PhotonIsolationCorrectionAlg' + postfix )
272 config.addPrivateTool(
'isolationCorrectionTool',
273 'CP::IsolationCorrectionTool' )
274 alg.isolationCorrectionTool.IsMC = config.dataType()
is not DataType.Data
275 alg.isolationCorrectionTool.AFII_corr = (
276 0
if self.forceFullSimConfigForIso
277 else config.dataType()
is DataType.FastSim)
278 alg.egammas = config.readName (self.containerName)
279 alg.egammasOut = config.copyName (self.containerName)
280 alg.preselection = config.getPreselection (self.containerName,
'')
283 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'EnergyDecorator' + self.containerName + self.postfix )
284 alg.particles = config.readName (self.containerName)
286 config.addOutputVar (self.containerName,
'pt',
'pt')
287 config.addOutputVar (self.containerName,
'eta',
'eta', noSys=
True)
288 config.addOutputVar (self.containerName,
'phi',
'phi', noSys=
True)
289 config.addOutputVar (self.containerName,
'e_%SYS%',
'e')
292 if self.decorateTruth
and config.dataType()
is not DataType.Data:
293 config.addOutputVar (self.containerName,
"truthType",
"truth_type", noSys=
True)
294 config.addOutputVar (self.containerName,
"truthOrigin",
"truth_origin", noSys=
True)