164 jetCollectionName=
"AntiKt4EMPFlowJets"
166 jetCollectionName=
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
168 if self.
jetInput not in [
"EMTopo",
"EMPFlow",
"HI"]:
170 "Unsupported input type '{0}' for R=0.4 jets!".format(self.
jetInput) )
172 if self.
jvtWP not in [
"FixedEffPt"]:
174 "Unsupported NNJvt WP '{0}'".format(self.
jvtWP) )
176 if self.
fJvtWP not in [
"Loose",
"Tight",
"Tighter"]:
178 "Unsupported fJvt WP '{0}'".format(self.
fJvtWP) )
182 alg = config.createAlgorithm(
'CP::JetCalibrationAlg',
'JetCalibrationAlg' )
183 config.addPrivateTool(
'calibrationTool',
'JetCalibrationTool' )
184 alg.calibrationTool.JetCollection = jetCollectionName[:-4]
187 if config.geometry()
is LHCPeriod.Run2:
188 configFile =
"PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config"
189 alg.calibrationTool.CalibArea =
"00-04-82"
190 elif config.geometry() >= LHCPeriod.Run3:
191 configFile =
"AntiKt4EMPFlow_MC23a_PreRecR22_Phase2_CalibConfig_ResPU_EtaJES_GSC_241208_InSitu.config"
192 alg.calibrationTool.CalibArea =
"00-04-83"
194 if config.geometry()
is LHCPeriod.Run2:
195 configFile =
"JES_MC16_HI_Jan2021_5TeV.config"
196 if config.geometry()
is LHCPeriod.Run3:
197 configFile =
"AntiKt4HI_JES_constants_11-05-2024_13p6TeVFinalConfiguration.config"
198 alg.calibrationTool.CalibArea =
"00-04-83"
200 if config.dataType()
is DataType.FastSim:
201 configFile =
"JES_MC16Recommendation_AFII_{0}_Apr2019_Rel21.config"
203 configFile =
"JES_MC16Recommendation_Consolidated_{0}_Apr2019_Rel21.config"
204 configFile = configFile.format(self.
jetInput)
205 if self.calibToolCalibArea
is not None:
206 alg.calibrationTool.CalibArea = self.calibToolCalibArea
207 if self.calibToolConfigFile
is not None:
208 configFile = self.calibToolConfigFile
209 alg.calibrationTool.ConfigFile = configFile
210 if config.dataType()
is DataType.Data:
212 if config.geometry()
is LHCPeriod.Run2:
213 alg.calibrationTool.CalibSequence =
'EtaJES_Insitu'
214 if config.geometry()
is LHCPeriod.Run3:
215 alg.calibrationTool.CalibSequence =
'EtaJES'
217 alg.calibrationTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Insitu'
220 alg.calibrationTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC'
222 alg.calibrationTool.CalibSequence =
'EtaJES'
224 alg.calibrationTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Smear'
225 if self.calibToolCalibSeq
is not None:
226 alg.calibrationTool.CalibSequence = self.calibToolCalibSeq
227 alg.calibrationTool.IsData = (config.dataType()
is DataType.Data)
233 alg = config.createAlgorithm(
'CP::JvtUpdateAlg',
'JvtUpdateAlg' )
234 config.addPrivateTool(
'jvtTool',
'JetVertexTaggerTool' )
236 alg.jvtTool.SuppressInputDependence=
True
239 alg.preselection = config.getPreselection (self.
containerName,
'')
242 assert self.
jetInput==
"EMPFlow",
"NN JVT only defined for PFlow jets"
243 alg = config.createAlgorithm(
'CP::JetDecoratorAlg',
'NNJvtUpdateAlg' )
244 config.addPrivateTool(
'decorator',
'JetPileupTag::JetVertexNNTagger' )
248 alg.decorator.JetContainer = alg.jetsOut.replace (
'%SYS%',
'NOSYS')
249 alg.decorator.SuppressInputDependence=
True
250 alg.decorator.SuppressOutputDependence=
True
255 assert self.
jetInput==
"EMPFlow",
"NNJvt WPs and SFs only valid for PFlow jets"
256 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JvtSelectionAlg')
257 config.addPrivateTool(
'selectionTool',
'CP::NNJvtSelectionTool')
258 alg.selectionTool.JetContainer = config.readName(self.
containerName)
259 alg.selectionTool.JvtMomentName =
"NNJvt"
260 alg.selectionTool.WorkingPoint = self.
jvtWP
261 alg.selectionTool.MaxPtForJvt = 60*GeV
262 alg.selectionDecoration =
"jvt_selection,as_char"
265 if self.runJvtEfficiency
and config.dataType()
is not DataType.Data:
266 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'JvtEfficiencyAlg' )
267 config.addPrivateTool(
'efficiencyTool',
'CP::NNJvtEfficiencyTool' )
268 alg.efficiencyTool.JetContainer = config.readName(self.
containerName)
269 alg.efficiencyTool.MaxPtForJvt = 60*GeV
270 alg.efficiencyTool.WorkingPoint = self.
jvtWP
271 if config.geometry()
is LHCPeriod.Run2:
272 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run2_EMPFlow.root"
274 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run3_EMPFlow.root"
275 alg.selection =
'jvt_selection,as_char'
276 alg.scaleFactorDecoration =
'jvt_effSF_%SYS%'
277 alg.outOfValidity = 2
278 alg.outOfValidityDeco =
'no_jvt'
279 alg.skipBadEfficiency =
False
281 alg.preselection = config.getPreselection (self.
containerName,
'')
282 config.addOutputVar (self.
containerName, alg.scaleFactorDecoration,
'jvtEfficiency')
283 config.addSelection (self.
containerName,
'baselineJvt',
'jvt_selection,as_char', preselection=
False)
286 assert self.
jetInput==
"EMPFlow",
"fJvt WPs and SFs only valid for PFlow jets"
287 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'FJvtSelectionAlg')
288 config.addPrivateTool(
'selectionTool',
'CP::FJvtSelectionTool')
289 alg.selectionTool.JetContainer = config.readName(self.
containerName)
290 alg.selectionTool.JvtMomentName =
"DFCommonJets_fJvt"
291 alg.selectionTool.WorkingPoint = self.
fJvtWP
292 alg.selectionDecoration =
"fjvt_selection,as_char"
295 if self.runFJvtEfficiency
and config.dataType()
is not DataType.Data:
296 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'FJvtEfficiencyAlg' )
297 config.addPrivateTool(
'efficiencyTool',
'CP::FJvtEfficiencyTool' )
298 alg.efficiencyTool.JetContainer = config.readName(self.
containerName)
299 alg.efficiencyTool.WorkingPoint = self.
fJvtWP
300 if config.geometry()
is LHCPeriod.Run2:
301 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run2_EMPFlow.root"
303 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run3_EMPFlow.root"
304 alg.selection =
'fjvt_selection,as_char'
305 alg.scaleFactorDecoration =
'fjvt_effSF_%SYS%'
306 alg.outOfValidity = 2
307 alg.outOfValidityDeco =
'no_fjvt'
308 alg.skipBadEfficiency =
False
310 alg.preselection = config.getPreselection (self.
containerName,
'')
311 config.addOutputVar (self.
containerName, alg.scaleFactorDecoration,
'fjvtEfficiency')
312 config.addSelection (self.
containerName,
'baselineFJvt',
'fjvt_selection,as_char', preselection=
False)
315 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'AsgEnergyDecoratorAlg' )