ATLAS Offline Software
HIGG1D1CustomJetsConfig.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 #==============================================================================
4 # Contains the configuration for customs jet reconstruction + decorations
5 # used in analysis DAODs
6 #==============================================================================
7 
8 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
9 from AthenaConfiguration.ComponentFactory import CompFactory
10 
11 def addJetContextFlags(flags):
12  jetContextName = 'CustomVtx'
13  PrefixForHggCollection = "Hgg"
14  HggVertexContainerName = PrefixForHggCollection+"PrimaryVertices"
15  def customVtxContext(prevflags):
16  context = prevflags.Jet.Context.default.clone(
17  Vertices = HggVertexContainerName,
18  GhostTracks = "PseudoJetGhostTrack"+jetContextName,
19  GhostTracksLabel = "GhostTrack"+jetContextName,
20  TVA = "JetTrackVtxAssoc"+jetContextName,
21  JetTracks = "JetSelectedTracks"+jetContextName,
22  JetTracksQualityCuts = "JetSelectedTracks"+jetContextName+"_trackSelOpt"
23  )
24  return context
25  flags.addFlag(f"Jet.Context.{jetContextName}", customVtxContext)
26 
27 def HIGG1D1CustomJetsCfg(ConfigFlags):
28  """Jet reconstruction needed for HIGG1D1"""
29 
30  acc = ComponentAccumulator()
31 
32  # Ideally there would be a nice way to configure the PFlowCustomVtx jets but at the moment
33  # all tools need to be configured manually to ensure that the track to vertex association is done correctly.
34  PrefixForHggCollection = "Hgg"
35  HggVertexContainerName = PrefixForHggCollection+"PrimaryVertices"
36  CustomPFJetContainerName = "AntiKt4EMPFlowCustomVtxJets"
37 
38  from JetRecConfig.StandardJetConstits import stdInputExtDic, JetInputExternal,JetInputConstit, JetInputConstitSeq, JetConstitModifier, xAODType
39  from JetRecConfig.StandardSmallRJets import AntiKt4EMPFlow
40  from JetRecConfig.JetDefinition import JetDefinition
41  from JetRecTools import JetRecToolsConfig as jrtcfg
42  from JetMomentTools import JetMomentToolsConfig
43  from JetRecConfig.StandardJetConstits import stdConstitDic, stdContitModifDic
44  from JetRecConfig.StandardJetContext import propFromContext, inputsFromContext
45  from JetRecConfig.JetInputConfig import buildEventShapeAlg
46 
47  # Get custom jet context
48  jetContextName = 'CustomVtx'
49  context = ConfigFlags.Jet.Context[jetContextName]
50 
51  def replaceItems(tup,orgName,newName):
52  newList = list(tup)
53  for i, item in enumerate(newList):
54  if orgName in item:
55  newList[i] = item.replace(orgName,newName)
56  print( "Updated ", orgName, " to ", newName )
57  return tuple(newList)
58  print( "Failed to update ", orgName, " to ", newName )
59  return tuple(newList)
60 
61  def updateCalibSequence(tup):
62  newList = list(tup)
63  for i, item in enumerate(newList):
64  if "Calib" in item:
65  calibspecs = item.split(":")
66  calib, calibcontext, data_type = calibspecs[:3]
67  calibseq=""
68  if len(calibspecs)>3:
69  calibseq = calibspecs[3]
70  rhoname = "Kt4EMPFlowCustomVtxEventShape"
71  pvname = HggVertexContainerName
72  finalCalibString = f"CalibCustomVtx:{calibcontext}:{data_type}:{calibseq}:{rhoname}:{pvname}"
73  if len(calibspecs)>6: finalCalibString = f"{finalCalibString}:{calibspecs[6]}"
74  newList[i] = finalCalibString
75  print(finalCalibString)
76  return tuple(newList)
77  print( "Failed to update calib sequence" )
78  return tuple(newList)
79 
80 
81  # Create modifier list and JetDefinition
82  modsCustomVtx = AntiKt4EMPFlow.modifiers
83  modsCustomVtx = updateCalibSequence(modsCustomVtx)
84  modsCustomVtx = replaceItems(modsCustomVtx,"TrackMoments","TrackMomentsCustomVtx")
85  modsCustomVtx = replaceItems(modsCustomVtx,"TrackSumMoments","TrackSumMomentsCustomVtx")
86  modsCustomVtx = replaceItems(modsCustomVtx,"JVF","JVFCustomVtx")
87  modsCustomVtx = replaceItems(modsCustomVtx,"JVT","JVTCustomVtx")
88  modsCustomVtx = replaceItems(modsCustomVtx,"Charge","ChargeCustomVtx")
89 
90  ghostCustomVtx = AntiKt4EMPFlow.ghostdefs
91  ghostCustomVtx = replaceItems(ghostCustomVtx,"Track","TrackCustomVtx")
92 
93  # GPFlow are the same than EMPFlow except they have pflow linked to elec or muons filtered out.
94  stdConstitDic["TrackCustomVtx"] = JetInputConstit("TrackCustomVtx", xAODType.TrackParticle,"JetSelectedTracksCustomVtx" )
95 
96 
97  stdConstitDic["GPFlowCustomVtx"] = JetInputConstitSeq("GPFlowCustomVtx", xAODType.FlowElement,["CorrectPFOCustomVtx", "CHSCustomVtx"] , 'GlobalParticleFlowObjects', 'CHSGCustomVtxParticleFlowObjects',
98  label='EMPFlow')
99 
100  stdContitModifDic["CorrectPFOCustomVtx"] = JetConstitModifier("CorrectPFOCustomVtx", "CorrectPFOTool",
101  prereqs=[inputsFromContext("Vertices")],
102  properties=dict(VertexContainerKey=propFromContext("Vertices"),
103  WeightPFOTool= CompFactory.getComp("CP::WeightPFOTool")("weightPFO") )
104  )
105 
106  stdContitModifDic["CHSCustomVtx"] = JetConstitModifier("CHSCustomVtx", "ChargedHadronSubtractionTool",
107  prereqs= [inputsFromContext("Vertices"),inputsFromContext("TVA")],
108  properties=dict(VertexContainerKey=propFromContext("Vertices"),
109  TrackVertexAssociation=propFromContext("TVA"),
110  UseTrackToVertexTool=True,
111  ))
112 
113 
114 
115  AntiKt4EMPFlowCustomVtx = JetDefinition("AntiKt",0.4,stdConstitDic.GPFlowCustomVtx,
116  infix = "CustomVtx",
117  context = jetContextName,
118  ghostdefs = ghostCustomVtx,
119  modifiers = modsCustomVtx+("JetPtAssociation","QGTaggingCustomVtx","fJVTCustomVtx","NNJVTCustomVtx"),
120  ptmin = 10000,
121  )
122 
123  def getUsedInVertexFitTrackDecoratorAlgCustomVtx(jetdef, jetmod):
124  """ Create the alg to decorate the used-in-fit information for AMVF """
125  context = jetdef._contextDic
126 
127  from InDetUsedInFitTrackDecoratorTool.UsedInVertexFitTrackDecoratorConfig import getUsedInVertexFitTrackDecoratorAlg
128  alg = getUsedInVertexFitTrackDecoratorAlg(context['Tracks'], context['Vertices'],
129  vertexDeco='TTVA_AMVFVertices_forHiggs',
130  weightDeco='TTVA_AMVFWeights_forHiggs')
131  return alg
132 
133 
134  # Define new input variables for jet configuration
135  stdInputExtDic[context['Vertices']] = JetInputExternal( context['Vertices'], xAODType.Vertex )
136 
137  stdInputExtDic["JetSelectedTracksCustomVtx"] = JetInputExternal("JetSelectedTracksCustomVtx", xAODType.TrackParticle,
138  prereqs= [ f"input:{context['Tracks']}" ], # in std context, this is InDetTrackParticles (see StandardJetContext)
139  algoBuilder = lambda jdef,_ : jrtcfg.getTrackSelAlg(jdef, trackSelOpt=False )
140  )
141 
142  stdInputExtDic["JetTrackUsedInFitDecoCustomVtx"] = JetInputExternal("JetTrackUsedInFitDecoCustomVtx", xAODType.TrackParticle,
143  prereqs= [ f"input:{context['Tracks']}" , # in std context, this is InDetTrackParticles (see StandardJetContext)
144  f"input:{context['Vertices']}"],
145  algoBuilder = getUsedInVertexFitTrackDecoratorAlgCustomVtx
146  )
147 
148  stdInputExtDic["JetTrackVtxAssocCustomVtx"] = JetInputExternal("JetTrackVtxAssocCustomVtx", xAODType.TrackParticle,
149  algoBuilder = lambda jdef,_ : jrtcfg.getJetTrackVtxAlg(jdef._contextDic, algname="jetTVACustomVtx", WorkingPoint="Nonprompt_All_MaxWeight"),
150  prereqs = [ "input:JetTrackUsedInFitDecoCustomVtx", f"input:{context['Vertices']}" ] )
151 
152  stdInputExtDic["EventDensityCustomVtx"] = JetInputExternal("EventDensityCustomVtx", "EventShape", algoBuilder = buildEventShapeAlg,
153  containername = lambda jetdef, _ : "Kt4"+jetdef.inputdef.label+"CustomVtxEventShape",
154  prereqs = lambda jetdef : ["input:"+jetdef.inputdef.name] )
155 
156  from JetRecConfig.StandardJetMods import stdJetModifiers
157  from JetRecConfig.JetDefinition import JetModifier
158  from JetCalibTools import JetCalibToolsConfig
159 
160  stdJetModifiers.update(
161 
162  CalibCustomVtx = JetModifier("JetCalibrationTool","jetcalib_jetcoll_calibseqCustomVtx",
163  createfn=JetCalibToolsConfig.getJetCalibToolFromString,
164  prereqs=lambda mod,jetdef : JetCalibToolsConfig.getJetCalibToolPrereqs(mod,jetdef)+[f"input:{context['Vertices']}"]),
165 
166 
167  JVFCustomVtx = JetModifier("JetVertexFractionTool", "jvfCustomVtx",
168  createfn= lambda jdef,_ : JetMomentToolsConfig.getJVFTool(jdef,"CustomVtx"),
169  modspec = "CustomVtx",
170  prereqs = ["input:JetTrackVtxAssocCustomVtx", "mod:TrackMomentsCustomVtx", f"input:{context['Vertices']}"] ,
171  JetContainer = CustomPFJetContainerName),
172 
173  JVTCustomVtx = JetModifier("JetVertexTaggerTool", "jvtCustomVtx",
174  createfn= lambda jdef,_ : JetMomentToolsConfig.getJVTTool(jdef,"CustomVtx"),
175  modspec = "CustomVtx",
176  prereqs = [ "mod:JVFCustomVtx" ],JetContainer = CustomPFJetContainerName),
177 
178  NNJVTCustomVtx = JetModifier("JetVertexNNTagger", "nnjvtCustomVtx",
179  createfn=lambda jdef,_ :JetMomentToolsConfig.getNNJvtTool(jdef,"CustomVtx"),
180  prereqs = [ "mod:JVFCustomVtx" ],JetContainer = CustomPFJetContainerName),
181 
182  OriginSetPVCustomVtx = JetModifier("JetOriginCorrectionTool", "origin_setpvCustomVtx",
183  modspec = "CustomVtx",
184  prereqs = [ "mod:JVFCustomVtx" ],JetContainer = CustomPFJetContainerName, OnlyAssignPV=True),
185 
186  TrackMomentsCustomVtx = JetModifier("JetTrackMomentsTool", "trkmomsCustomVtx",
187  createfn= lambda jdef,_ : JetMomentToolsConfig.getTrackMomentsTool(jdef,"CustomVtx"),
188  modspec = "CustomVtx",
189  prereqs = [ "input:JetTrackVtxAssocCustomVtx","ghost:TrackCustomVtx" ],JetContainer = CustomPFJetContainerName),
190 
191  TrackSumMomentsCustomVtx = JetModifier("JetTrackSumMomentsTool", "trksummomsCustomVtx",
192  createfn=lambda jdef,_ :JetMomentToolsConfig.getTrackSumMomentsTool(jdef,"CustomVtx"),
193  modspec = "CustomVtx",
194  prereqs = [ "input:JetTrackVtxAssocCustomVtx","ghost:TrackCustomVtx" ],JetContainer = CustomPFJetContainerName),
195 
196  ChargeCustomVtx = JetModifier("JetChargeTool", "jetchargeCustomVtx",
197  prereqs = [ "ghost:TrackCustomVtx" ]),
198 
199 
200  QGTaggingCustomVtx = JetModifier("JetQGTaggerVariableTool", "qgtaggingCustomVtx",
201  createfn=lambda jdef,_ :JetMomentToolsConfig.getQGTaggingTool(jdef,"CustomVtx"),
202  modspec = "CustomVtx",
203  prereqs = lambda _,jdef :
204  ["input:JetTrackVtxAssocCustomVtx","mod:TrackMomentsCustomVtx"] +
205  (["mod:JetPtAssociation"] if not jdef._cflags.Input.isMC else []),
206  JetContainer = CustomPFJetContainerName),
207 
208  fJVTCustomVtx = JetModifier("JetForwardPFlowJvtTool", "fJVTCustomVtx",
209  createfn=lambda jdef,_ :JetMomentToolsConfig.getPFlowfJVTTool(jdef,"CustomVtx"),
210  modspec = "CustomVtx",
211  prereqs = ["input:JetTrackVtxAssocCustomVtx","input:EventDensityCustomVtx",f"input:{context['Vertices']}","mod:NNJVTCustomVtx"],
212  JetContainer = CustomPFJetContainerName),
213  )
214 
215  from JetRecConfig.JetRecConfig import JetRecCfg
216  from JetRecConfig.JetConfigFlags import jetInternalFlags
217 
218  jetInternalFlags.isRecoJob = True
219  acc.merge(JetRecCfg(ConfigFlags,AntiKt4EMPFlowCustomVtx))
220 
221  return acc
222 
223 
224 
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
JetCalibToolsConfig.getJetCalibToolPrereqs
def getJetCalibToolPrereqs(modspec, jetdef)
Definition: JetCalibToolsConfig.py:202
python.HIGG1D1CustomJetsConfig.HIGG1D1CustomJetsCfg
def HIGG1D1CustomJetsCfg(ConfigFlags)
Definition: HIGG1D1CustomJetsConfig.py:27
python.StandardJetContext.inputsFromContext
def inputsFromContext(inputKey, prefix="", suffix="")
Definition: StandardJetContext.py:106
python.JetRecConfig.JetRecCfg
def JetRecCfg(flags, jetdef, returnConfiguredDef=False)
Top level functions returning ComponentAccumulator out of JetDefinition.
Definition: JetRecConfig.py:37
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
python.HIGG1D1CustomJetsConfig.addJetContextFlags
def addJetContextFlags(flags)
Definition: HIGG1D1CustomJetsConfig.py:11
UsedInVertexFitTrackDecoratorConfig.getUsedInVertexFitTrackDecoratorAlg
def getUsedInVertexFitTrackDecoratorAlg(trackCont="InDetTrackParticles", vtxCont="PrimaryVertices", vertexDeco="TTVA_AMVFVertices_forReco", weightDeco="TTVA_AMVFWeights_forReco")
Definition: UsedInVertexFitTrackDecoratorConfig.py:16
JetMomentToolsConfig.getNNJvtTool
def getNNJvtTool(jetdef, modspec)
Definition: JetMomentToolsConfig.py:124
python.StandardJetContext.propFromContext
def propFromContext(propName)
Definition: StandardJetContext.py:94
JetMomentToolsConfig.getPFlowfJVTTool
def getPFlowfJVTTool(jetdef, modspec)
Definition: JetMomentToolsConfig.py:202
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
JetMomentToolsConfig.getJVFTool
def getJVFTool(jetdef, modspec)
Definition: JetMomentToolsConfig.py:97
JetMomentToolsConfig.getTrackMomentsTool
def getTrackMomentsTool(jetdef, modspec)
Definition: JetMomentToolsConfig.py:133
JetMomentToolsConfig.getJVTTool
def getJVTTool(jetdef, modspec)
Definition: JetMomentToolsConfig.py:114
JetMomentToolsConfig.getQGTaggingTool
def getQGTaggingTool(jetdef, modspec)
Definition: JetMomentToolsConfig.py:189
JetMomentToolsConfig.getTrackSumMomentsTool
def getTrackSumMomentsTool(jetdef, modspec)
Definition: JetMomentToolsConfig.py:149