290 def makeAlgs (self, config) :
292 jetCollectionName=self.jetCollection
293 if(self.jetCollection==
"AnalysisJets") :
294 jetCollectionName=
"AntiKt4EMPFlowJets"
295 if(self.jetCollection==
"AnalysisLargeRJets") :
296 jetCollectionName=
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
298 if self.jetInput
not in [
"EMTopo",
"EMPFlow",
"HI"]:
300 "Unsupported input type '{0}' for R=0.4 jets!".
format(self.jetInput) )
302 if self.jvtWP
not in [
"FixedEffPt"]:
304 "Unsupported NNJvt WP '{0}'".
format(self.jvtWP) )
306 if self.fJvtWP
not in [
"Loose",
"Tight",
"Tighter"]:
308 "Unsupported fJvt WP '{0}'".
format(self.fJvtWP) )
310 if not config.isPhyslite()
or self.recalibratePhyslite:
312 alg = config.createAlgorithm(
'CP::JetCalibrationAlg',
'JetCalibrationAlg' )
313 config.addPrivateTool(
'calibrationTool',
'JetCalibrationTool' )
314 alg.calibrationTool.JetCollection = jetCollectionName[:-4]
316 if self.jetInput ==
"EMPFlow":
317 if config.geometry()
is LHCPeriod.Run2:
318 configFile =
"PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config"
319 alg.calibrationTool.CalibArea =
"00-04-82"
320 elif config.geometry() >= LHCPeriod.Run3:
321 configFile =
"AntiKt4EMPFlow_MC23a_PreRecR22_Phase2_CalibConfig_ResPU_EtaJES_GSC_241208_InSitu.config"
322 alg.calibrationTool.CalibArea =
"00-04-83"
323 elif self.jetInput ==
"HI":
324 if config.geometry()
is LHCPeriod.Run2:
325 configFile =
"JES_MC16_HI_Jan2021_5TeV.config"
326 if config.geometry()
is LHCPeriod.Run3:
327 configFile =
"AntiKt4HI_JES_constants_11-05-2024_13p6TeVFinalConfiguration.config"
328 alg.calibrationTool.CalibArea =
"00-04-83"
330 if config.dataType()
is DataType.FastSim:
331 configFile =
"JES_MC16Recommendation_AFII_{0}_Apr2019_Rel21.config"
333 configFile =
"JES_MC16Recommendation_Consolidated_{0}_Apr2019_Rel21.config"
334 configFile = configFile.format(self.jetInput)
335 if self.calibToolCalibArea
is not None:
336 alg.calibrationTool.CalibArea = self.calibToolCalibArea
337 if self.calibToolConfigFile
is not None:
338 configFile = self.calibToolConfigFile
339 alg.calibrationTool.ConfigFile = configFile
340 if config.dataType()
is DataType.Data:
341 if self.jetInput ==
"HI":
342 if config.geometry()
is LHCPeriod.Run2:
343 alg.calibrationTool.CalibSequence =
'EtaJES_Insitu'
344 if config.geometry()
is LHCPeriod.Run3:
345 alg.calibrationTool.CalibSequence =
'EtaJES'
347 alg.calibrationTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Insitu'
349 if self.jetInput ==
"EMPFlow":
350 alg.calibrationTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC'
351 elif self.jetInput ==
"HI":
352 alg.calibrationTool.CalibSequence =
'EtaJES'
354 alg.calibrationTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Smear'
355 if self.calibToolCalibSeq
is not None:
356 alg.calibrationTool.CalibSequence = self.calibToolCalibSeq
357 alg.calibrationTool.IsData = (config.dataType()
is DataType.Data)
358 alg.jets = config.readName (self.containerName)
359 alg.jetsOut = config.copyName (self.containerName)
362 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
363 self.createUncertaintyTool(alg, config, jetCollectionName, doPseudoData=( self.systematicsModelJER
in [
"Full",
"All"] ))
364 alg.jets = config.readName (self.containerName)
365 alg.jetsOut = config.copyName (self.containerName)
366 alg.preselection = config.getPreselection (self.containerName,
'')
369 if self.runJvtUpdate :
370 alg = config.createAlgorithm(
'CP::JvtUpdateAlg',
'JvtUpdateAlg' )
371 config.addPrivateTool(
'jvtTool',
'JetVertexTaggerTool' )
372 alg.jvtTool.JetContainer = self.jetCollection
373 alg.jvtTool.SuppressInputDependence=
True
374 alg.jets = config.readName (self.containerName)
375 alg.jetsOut = config.copyName (self.containerName)
376 alg.preselection = config.getPreselection (self.containerName,
'')
378 if self.runNNJvtUpdate:
379 assert self.jetInput==
"EMPFlow",
"NN JVT only defined for PFlow jets"
380 alg = config.createAlgorithm(
'CP::JetDecoratorAlg',
'NNJvtUpdateAlg' )
381 config.addPrivateTool(
'decorator',
'JetPileupTag::JetVertexNNTagger' )
383 alg.jets = config.readName (self.containerName)
384 alg.jetsOut = config.copyName (self.containerName)
385 alg.decorator.JetContainer = alg.jetsOut.replace (
'%SYS%',
'NOSYS')
386 alg.decorator.SuppressInputDependence=
True
387 alg.decorator.SuppressOutputDependence=
True
391 if self.runJvtSelection :
392 assert self.jetInput==
"EMPFlow",
"NNJvt WPs and SFs only valid for PFlow jets"
393 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JvtSelectionAlg')
394 config.addPrivateTool(
'selectionTool',
'CP::NNJvtSelectionTool')
395 alg.selectionTool.JetContainer = config.readName(self.containerName)
396 alg.selectionTool.WorkingPoint = self.jvtWP
397 alg.selectionTool.MaxPtForJvt = 60*GeV
398 alg.selectionDecoration =
"jvt_selection,as_char"
399 alg.particles = config.readName(self.containerName)
401 if self.runJvtEfficiency
and config.dataType()
is not DataType.Data:
402 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'JvtEfficiencyAlg' )
403 config.addPrivateTool(
'efficiencyTool',
'CP::NNJvtEfficiencyTool' )
404 alg.efficiencyTool.JetContainer = config.readName(self.containerName)
405 alg.efficiencyTool.MaxPtForJvt = 60*GeV
406 alg.efficiencyTool.WorkingPoint = self.jvtWP
407 if config.geometry()
is LHCPeriod.Run2:
408 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run2_EMPFlow.root"
410 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run3_EMPFlow.root"
411 alg.selection =
'jvt_selection,as_char'
412 alg.scaleFactorDecoration =
'jvt_effSF_%SYS%'
413 alg.outOfValidity = 2
414 alg.outOfValidityDeco =
'no_jvt'
415 alg.skipBadEfficiency =
False
416 alg.jets = config.readName (self.containerName)
417 alg.preselection = config.getPreselection (self.containerName,
'')
418 config.addOutputVar (self.containerName, alg.scaleFactorDecoration,
'jvtEfficiency')
419 config.addSelection (self.containerName,
'baselineJvt',
'jvt_selection,as_char', preselection=
False)
421 if self.runFJvtSelection :
422 assert self.jetInput==
"EMPFlow",
"fJvt WPs and SFs only valid for PFlow jets"
423 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'FJvtSelectionAlg')
424 config.addPrivateTool(
'selectionTool',
'CP::FJvtSelectionTool')
425 alg.selectionTool.JetContainer = config.readName(self.containerName)
426 alg.selectionTool.WorkingPoint = self.fJvtWP
427 alg.selectionDecoration =
"fjvt_selection,as_char"
428 alg.particles = config.readName(self.containerName)
430 if self.runFJvtEfficiency
and config.dataType()
is not DataType.Data:
431 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'FJvtEfficiencyAlg' )
432 config.addPrivateTool(
'efficiencyTool',
'CP::FJvtEfficiencyTool' )
433 alg.efficiencyTool.JetContainer = config.readName(self.containerName)
434 alg.efficiencyTool.WorkingPoint = self.fJvtWP
435 if config.geometry()
is LHCPeriod.Run2:
436 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run2_EMPFlow.root"
438 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run3_EMPFlow.root"
439 alg.selection =
'fjvt_selection,as_char'
440 alg.scaleFactorDecoration =
'fjvt_effSF_%SYS%'
441 alg.outOfValidity = 2
442 alg.outOfValidityDeco =
'no_fjvt'
443 alg.skipBadEfficiency =
False
444 alg.jets = config.readName (self.containerName)
445 alg.preselection = config.getPreselection (self.containerName,
'')
446 config.addOutputVar (self.containerName, alg.scaleFactorDecoration,
'fjvtEfficiency')
447 config.addSelection (self.containerName,
'baselineFJvt',
'fjvt_selection,as_char', preselection=
False)
450 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'AsgEnergyDecoratorAlg' )
451 alg.particles = config.readName (self.containerName)
453 config.addOutputVar (self.containerName,
'e_%SYS%',
'e')