81 """Create the calibration and smearing algorithm
83 Factoring this out into its own function, as we want to
84 instantiate it in multiple places"""
85 log = logging.getLogger(
'PhotonCalibrationConfig')
88 alg = config.createAlgorithm(
'CP::EgammaCalibrationAndSmearingAlg', name )
89 config.addPrivateTool(
'calibrationAndSmearingTool',
90 'CP::EgammaCalibrationAndSmearingTool' )
93 alg.calibrationAndSmearingTool.ESModel = self.
ESModel
95 if config.geometry()
is LHCPeriod.Run2:
96 alg.calibrationAndSmearingTool.ESModel =
'es2023_R22_Run2_v1'
97 elif config.geometry()
is LHCPeriod.Run3:
98 alg.calibrationAndSmearingTool.ESModel =
'es2024_Run3_v0'
99 elif config.geometry()
is LHCPeriod.Run4:
100 log.warning(
"No ESModel set for Run4, using Run3 model")
101 alg.calibrationAndSmearingTool.ESModel =
'es2024_Run3_v0'
103 raise ValueError (f
"Can't set up the ElectronCalibrationConfig with {config.geometry().value}, "
104 "there must be something wrong!")
106 alg.calibrationAndSmearingTool.decorrelationModel = self.decorrelationModel
107 alg.calibrationAndSmearingTool.useFastSim = (
109 else int( config.dataType()
is DataType.FastSim ))
110 alg.calibrationAndSmearingTool.decorateEmva = self.decorateEmva
113 alg.preselection = config.getPreselection (self.
containerName,
'')
119 log = logging.getLogger(
'PhotonCalibrationConfig')
121 postfix = self.postfix
122 if postfix !=
'' and postfix[0] !=
'_' :
123 postfix =
'_' + postfix
126 log.warning(
"You are running PhotonCalibrationConfig forcing full sim config for P4 corrections")
127 log.warning(
"This is only intended to be used for testing purposes")
129 if config.isPhyslite() :
134 cleaningWP =
'NoTime' if self.cleaningAllowLate
else ''
138 alg = config.createAlgorithm(
'CP::EgammaCaloClusterEtaAlg',
139 'ElectronEgammaCaloClusterEtaAlg',
142 config.addOutputVar (self.
containerName,
'caloEta2',
'caloEta2', noSys=
True)
146 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'PhotonShallowCopyAlg' )
151 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonEtaCutAlg' )
152 alg.selectionDecoration =
'selectEta' + postfix +
',as_bits'
153 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
154 alg.selectionTool.maxEta = self.maxEta
156 alg.selectionTool.etaGapLow = 1.37
157 alg.selectionTool.etaGapHigh = 1.52
158 alg.selectionTool.useClusterEta =
True
160 alg.preselection = config.getPreselection (self.
containerName,
'')
161 config.addSelection (self.
containerName,
'', alg.selectionDecoration)
164 if self.recomputeIsEM
and config.dataType()
is DataType.FullSim:
165 alg = config.createAlgorithm(
'CP::PhotonShowerShapeFudgeAlg',
166 'PhotonShowerShapeFudgeAlg' )
167 config.addPrivateTool(
'showerShapeFudgeTool',
168 'ElectronPhotonVariableCorrectionTool' )
169 if config.geometry
is LHCPeriod.Run2:
170 alg.showerShapeFudgeTool.ConfigFile = \
171 'EGammaVariableCorrection/TUNE25/ElPhVariableNominalCorrection.conf'
172 if config.geometry
is LHCPeriod.Run3:
173 alg.showerShapeFudgeTool.ConfigFile = \
174 'EGammaVariableCorrection/TUNE23/ElPhVariableNominalCorrection.conf'
177 alg.preselection = config.getPreselection (self.
containerName,
'')
180 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonObjectQualityAlg' )
181 alg.selectionDecoration =
'goodOQ,as_bits'
182 config.addPrivateTool(
'selectionTool',
'CP::EgammaIsGoodOQSelectionTool' )
183 alg.selectionTool.Mask = xAOD.EgammaParameters.BADCLUSPHOTON
185 alg.preselection = config.getPreselection (self.
containerName,
'')
186 config.addSelection (self.
containerName,
'', alg.selectionDecoration)
190 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonCleaningAlg' )
191 config.addPrivateTool(
'selectionTool',
'CP::AsgFlagSelectionTool' )
192 alg.selectionDecoration =
'isClean,as_bits'
193 alg.selectionTool.selectionFlags = [
'DFCommonPhotonsCleaning' + cleaningWP]
195 alg.preselection = config.getPreselection (self.
containerName,
'')
196 config.addSelection (self.
containerName,
'', alg.selectionDecoration)
201 alg = config.createAlgorithm(
'CP::PhotonOriginCorrectionAlg',
202 'PhotonOriginCorrectionAlg',
206 alg.preselection = config.getPreselection (self.
containerName,
'')
212 alg.skipNominal =
True
233 alg.noToolSystematics =
True
235 alg.calibrationAndSmearingTool.doSmearing =
False
240 alg.calibrationAndSmearingTool.doScaleCorrection =
False
241 alg.calibrationAndSmearingTool.useMVACalibration =
False
242 alg.calibrationAndSmearingTool.decorateEmva =
False
245 log.warning(
"You are not applying the isolation corrections")
246 log.warning(
"This is only intended to be used for testing purposes")
251 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'PhotonPtCutAlg' )
252 alg.selectionDecoration =
'selectPt' + postfix +
',as_bits'
253 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
254 alg.selectionTool.minPt = self.minPt
256 alg.preselection = config.getPreselection (self.
containerName,
'')
257 config.addSelection (self.
containerName,
'', alg.selectionDecoration,
264 log.warning(
"You are running PhotonCalibrationConfig forcing full sim config for isolation corrections")
265 log.warning(
"This is only intended to be used for testing purposes")
267 alg = config.createAlgorithm(
'CP::EgammaIsolationCorrectionAlg',
268 'PhotonIsolationCorrectionAlg' )
269 config.addPrivateTool(
'isolationCorrectionTool',
270 'CP::IsolationCorrectionTool' )
271 alg.isolationCorrectionTool.IsMC = config.dataType()
is not DataType.Data
272 alg.isolationCorrectionTool.AFII_corr = (
274 else config.dataType()
is DataType.FastSim)
275 alg.isolationCorrectionTool.FixTimingIssueInCore =
True
278 alg.preselection = config.getPreselection (self.
containerName,
'')
281 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'EnergyDecorator' )
285 config.addOutputVar (self.
containerName,
'eta',
'eta', noSys=
True)
286 config.addOutputVar (self.
containerName,
'phi',
'phi', noSys=
True)
288 config.addOutputVar (self.
containerName,
'caloClusterEnergyReso_%SYS%',
'caloClusterEnergyReso', noSys=
True)
291 if self.decorateTruth
and config.dataType()
is not DataType.Data:
292 config.addOutputVar (self.
containerName,
"truthType",
"truth_type", noSys=
True)
293 config.addOutputVar (self.
containerName,
"truthOrigin",
"truth_origin", noSys=
True)