ATLAS Offline Software
Loading...
Searching...
No Matches
JetReclusteringConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3from AnalysisAlgorithmsConfig.ConfigBlock import ConfigBlock
4from AthenaCommon.SystemOfUnits import GeV
5
6class JetReclusteringBlock(ConfigBlock):
7 """ConfigBlock for the jet reclustering algorithm:
8 run FastJet with small-R jets as input. The output
9 is a new container containing the reclustered jets.
10 The default output variables are the RC jet kinematics
11 as well as a vector of indices pointing to the
12 small-R jets that formed the RC jets.
13 ---- to be updated with substructure variables!"""
14
15 def __init__(self):
16 super().__init__()
17 self.addOption ('containerName', None, type=str,
18 noneAction='error',
19 info='name of the output reclustered jets container.',
20 meta={'role':'container'})
21 self.addOption ('jets', None, type=str,
22 noneAction='error',
23 info='the input jet collection to recluster, with a possible selection, in the format `container` or `container.selection`.',
24 meta={'role':'containerRef'})
25 self.addOption ('clusteringAlgorithm', 'AntiKt', type=str,
26 info='algorithm to use to recluster the jets: `AntiKt`, `Kt`, `CamKt`.',
27 meta={'choices':(['AntiKt','Kt','CamKt'],1)})
28 self.addOption ('reclusteredJetsRadius', 1.0, type=float,
29 info='radius parameter of the reclustering algorithm.')
30 self.addOption ('minPt', 200*GeV, type=float,
31 info=r'minimum $p_\mathrm{T}$ requirement (in MeV) on the reclustered jets, creating the selection `passed_sel`.')
32 self.addOption ('maxEta', 0., type=float,
33 info=r'maximum $\vert\eta\vert$ requirement on the reclustered jets, creating the selection `passed_sel`.')
34 self.addOption ('maxRapidity', 2.5, type=float,
35 info='maximum rapidity requirement on the reclustered jets, creating the selection `passed_sel`.')
36 def instanceName (self) :
37 """Return the instance name for this block"""
38 return self.containerName
39
40 def makeAlgs(self, config):
41
42 alg = config.createAlgorithm('CP::JetReclusteringAlg', 'JetReclusteringAlg')
43
44 alg.jets, alg.jetSelection = config.readNameAndSelection(self.jets)
45 alg.reclusteredJets = config.writeName(self.containerName)
46 alg.smallRjetIndices = 'smallRjetIndices_%SYS%'
47 alg.rcJetEnergy = 'e_%SYS%'
48 alg.clusteringAlgorithm = self.clusteringAlgorithm
49 alg.reclusteredJetsRadius = self.reclusteredJetsRadius
50
51 # prepare selection algorithm
52 if self.minPt > 0 or self.maxEta > 0 or self.maxRapidity > 0 :
53 selAlg = config.createAlgorithm('CP::AsgSelectionAlg', 'RCJetsMinPtAlg')
54 selAlg.selectionDecoration = 'passed_sel,as_bits'
55 config.addPrivateTool('selectionTool', 'CP::AsgPtEtaSelectionTool')
56 selAlg.selectionTool.minPt = self.minPt
57 selAlg.selectionTool.maxEta = self.maxEta
58 selAlg.selectionTool.maxRapidity = self.maxRapidity
59 selAlg.particles = config.readName(self.containerName)
60 selAlg.preselection = config.getPreselection(self.containerName, '')
61 config.addSelection(self.containerName, 'passed_sel', selAlg.selectionDecoration)
62
63 config.addOutputVar(self.containerName, 'pt', 'pt', auxType="float")
64 config.addOutputVar(self.containerName, 'eta', 'eta', auxType="float")
65 config.addOutputVar(self.containerName, 'phi', 'phi', auxType="float")
66 config.addOutputVar(self.containerName, 'm', 'm', auxType="float")
67 config.addOutputVar(self.containerName, alg.rcJetEnergy, 'e', auxType="float")
68 config.addOutputVar(self.containerName, alg.smallRjetIndices, 'small_r_jet_indices', auxType="vector_int")