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