28def HIGG1D1CustomJetsCfg(ConfigFlags):
29 """Jet reconstruction needed for HIGG1D1"""
30
31 acc = ComponentAccumulator()
32
33
34
35 PrefixForHggCollection = "Hgg"
36 HggVertexContainerName = PrefixForHggCollection+"PrimaryVertices"
37 CustomPFJetContainerName = "AntiKt4EMPFlowCustomVtxJets"
38
39 from JetRecConfig.StandardJetConstits import stdInputExtDic, JetInputExternal,JetInputConstit, JetInputConstitSeq, JetConstitModifier, xAODType
40 from JetRecConfig.StandardSmallRJets import AntiKt4EMPFlow
41 from JetRecConfig.JetDefinition import JetDefinition
42 from JetRecTools import JetRecToolsConfig as jrtcfg
43 from JetMomentTools import JetMomentToolsConfig
44 from JetRecConfig.StandardJetConstits import stdConstitDic, stdContitModifDic
45 from JetRecConfig.StandardJetContext import propFromContext, inputsFromContext
46 from JetRecConfig.JetInputConfig import buildEventShapeAlg
47
48
49 jetContextName = 'CustomVtx'
50 context = ConfigFlags.Jet.Context[jetContextName]
51
52 def replaceItems(tup,orgName,newName):
53 newList = list(tup)
54 for i, item in enumerate(newList):
55 if orgName in item:
56 newList[i] = item.replace(orgName,newName)
57 print(
"Updated ", orgName,
" to ", newName )
58 return tuple(newList)
59 print(
"Failed to update ", orgName,
" to ", newName )
60 return tuple(newList)
61
62 def updateCalibSequence(tup):
63 newList = list(tup)
64 if ConfigFlags.GeoModel.Run is LHCPeriod.Run3:
65 rhoname = "Kt4EMPFlowNeutEventShape"
66 else:
67 rhoname = "Kt4EMPFlowCustomVtxEventShape"
68
69 for i, item in enumerate(newList):
70 if "Calib" in item:
71 calibspecs = item.split(":")
72 calib, calibcontext, data_type = calibspecs[:3]
73 calibseq=""
74 if len(calibspecs)>3:
75 calibseq = calibspecs[3]
76 pvname = HggVertexContainerName
77 finalCalibString = f"CalibCustomVtx:{calibcontext}:{data_type}:{calibseq}:{rhoname}:{pvname}"
78 if len(calibspecs)>6: finalCalibString = f"{finalCalibString}:{calibspecs[6]}"
79 newList[i] = finalCalibString
80 print(finalCalibString)
81 return tuple(newList)
82 print(
"Failed to update calib sequence" )
83 return tuple(newList)
84
85
86
87 modsCustomVtx = AntiKt4EMPFlow.modifiers
88 modsCustomVtx = updateCalibSequence(modsCustomVtx)
89 modsCustomVtx = replaceItems(modsCustomVtx,"TrackMoments","TrackMomentsCustomVtx")
90 modsCustomVtx = replaceItems(modsCustomVtx,"TrackSumMoments","TrackSumMomentsCustomVtx")
91 modsCustomVtx = replaceItems(modsCustomVtx,"JVF","JVFCustomVtx")
92 modsCustomVtx = replaceItems(modsCustomVtx,"JVT","JVTCustomVtx")
93 modsCustomVtx = replaceItems(modsCustomVtx,"Charge","ChargeCustomVtx")
94
95 ghostCustomVtx = AntiKt4EMPFlow.ghostdefs
96
97
98 stdConstitDic["TrackCustomVtx"] = JetInputConstit("TrackCustomVtx", xAODType.TrackParticle,"JetSelectedTracksCustomVtx" )
99
100
101 stdConstitDic["GPFlowCustomVtx"] = JetInputConstitSeq("GPFlowCustomVtx", xAODType.FlowElement,["CorrectPFOCustomVtx", "CHSCustomVtx"] , 'GlobalParticleFlowObjects', 'CHSGCustomVtxParticleFlowObjects',
102 label='EMPFlowCustomVtx')
103
104 stdContitModifDic["CorrectPFOCustomVtx"] = JetConstitModifier("CorrectPFOCustomVtx", "CorrectPFOTool",
105 prereqs=[inputsFromContext("Vertices")],
106 properties=dict(VertexContainerKey=propFromContext("Vertices"),
107 WeightPFOTool= CompFactory.getComp("CP::WeightPFOTool")("weightPFO") )
108 )
109
110 stdContitModifDic["CHSCustomVtx"] = JetConstitModifier("CHSCustomVtx", "ChargedHadronSubtractionTool",
111 prereqs= [inputsFromContext("Vertices"),inputsFromContext("TVA")],
112 properties=dict(VertexContainerKey=propFromContext("Vertices"),
113 TrackVertexAssociation=propFromContext("TVA"),
114 UseTrackToVertexTool=True,
115 ))
116
117
118
119 AntiKt4EMPFlowCustomVtx = JetDefinition("AntiKt",0.4,stdConstitDic.GPFlowCustomVtx,
120 context = jetContextName,
121 ghostdefs = ghostCustomVtx,
122 modifiers = modsCustomVtx+("JetPtAssociation","QGTaggingCustomVtx","BoostedQGTaggingCustomVtx","fJVTCustomVtx","NNJVTCustomVtx","CaloEnergiesClus","JetPileupLabel"),
123 ptmin = 10000,
124 )
125
126 def getUsedInVertexFitTrackDecoratorAlgCustomVtx(jetdef, jetmod):
127 """ Create the alg to decorate the used-in-fit information for AMVF """
128 context = jetdef._contextDic
129
130 from InDetUsedInFitTrackDecoratorTool.UsedInVertexFitTrackDecoratorConfig import getUsedInVertexFitTrackDecoratorAlg
131 alg = getUsedInVertexFitTrackDecoratorAlg(context['Tracks'], context['Vertices'],
132 vertexDeco='TTVA_AMVFVertices_forHiggs',
133 weightDeco='TTVA_AMVFWeights_forHiggs')
134 return alg
135
136
137
138 stdInputExtDic[context['Vertices']] = JetInputExternal( context['Vertices'], xAODType.Vertex )
139
140 stdInputExtDic["JetSelectedTracksCustomVtx"] = JetInputExternal("JetSelectedTracksCustomVtx", xAODType.TrackParticle,
141 prereqs= [ f"input:{context['Tracks']}" ],
142 algoBuilder = lambda jdef,_ : jrtcfg.getTrackSelAlg(jdef, trackSelOpt=False,
143 DecorDeps=["TTVA_AMVFWeights_forHiggs", "TTVA_AMVFVertices_forHiggs"] )
144 )
145
146 stdInputExtDic["JetTrackUsedInFitDecoCustomVtx"] = JetInputExternal("JetTrackUsedInFitDecoCustomVtx", xAODType.TrackParticle,
147 prereqs= [ f"input:{context['Tracks']}" ,
148 f"input:{context['Vertices']}"],
149 algoBuilder = getUsedInVertexFitTrackDecoratorAlgCustomVtx
150 )
151
152 stdInputExtDic["JetTrackVtxAssocCustomVtx"] = JetInputExternal("JetTrackVtxAssocCustomVtx", xAODType.TrackParticle,
153 algoBuilder = lambda jdef,_ : jrtcfg.getJetTrackVtxAlg(jdef._contextDic, algname="jetTVACustomVtx",
154 WorkingPoint="Nonprompt_All_MaxWeight",
155 AMVFVerticesDeco='TTVA_AMVFVertices_forHiggs',
156 AMVFWeightsDeco='TTVA_AMVFWeights_forHiggs'),
157 prereqs = [ "input:JetTrackUsedInFitDecoCustomVtx", f"input:{context['Vertices']}" ] )
158
159 stdInputExtDic["EventDensityCustomVtx"] = JetInputExternal("EventDensityCustomVtx", "EventShape", algoBuilder = buildEventShapeAlg,
160 containername = lambda jetdef, _ : "Kt4"+jetdef.inputdef.label+"CustomVtxEventShape",
161 prereqs = lambda jetdef : ["input:"+jetdef.inputdef.name] )
162
163 from JetRecConfig.StandardJetMods import stdJetModifiers
164 from JetRecConfig.JetDefinition import JetModifier
165 from JetCalibTools import JetCalibToolsConfig
166
167 stdJetModifiers.update(
168
169 CalibCustomVtx = JetModifier("JetCalibrationTool","jetcalib_jetcoll_calibseqCustomVtx",
170 createfn=JetCalibToolsConfig.getJetCalibToolFromString,
172
173
174 JVFCustomVtx = JetModifier("JetVertexFractionTool", "jvfCustomVtx",
176 modspec = "CustomVtx",
177 prereqs = ["input:JetTrackVtxAssocCustomVtx", "mod:TrackMomentsCustomVtx", f"input:{context['Vertices']}"] ,
178 JetContainer = CustomPFJetContainerName),
179
180 JVTCustomVtx = JetModifier("JetVertexTaggerTool", "jvtCustomVtx",
182 modspec = "CustomVtx",
183 prereqs = [ "mod:JVFCustomVtx" ],JetContainer = CustomPFJetContainerName),
184
185 NNJVTCustomVtx = JetModifier("JetVertexNNTagger", "nnjvtCustomVtx",
187 prereqs = [ "mod:JVFCustomVtx" ],JetContainer = CustomPFJetContainerName),
188
189 OriginSetPVCustomVtx = JetModifier("JetOriginCorrectionTool", "origin_setpvCustomVtx",
190 modspec = "CustomVtx",
191 prereqs = [ "mod:JVFCustomVtx" ],JetContainer = CustomPFJetContainerName, OnlyAssignPV=True),
192
193 TrackMomentsCustomVtx = JetModifier("JetTrackMomentsTool", "trkmomsCustomVtx",
195 modspec = "CustomVtx",
196 prereqs = [ "input:JetTrackVtxAssocCustomVtx","ghost:Track" ],JetContainer = CustomPFJetContainerName),
197
198 TrackSumMomentsCustomVtx = JetModifier("JetTrackSumMomentsTool", "trksummomsCustomVtx",
200 modspec = "CustomVtx",
201 prereqs = [ "input:JetTrackVtxAssocCustomVtx","ghost:Track" ],JetContainer = CustomPFJetContainerName),
202
203 ChargeCustomVtx = JetModifier("JetChargeTool", "jetchargeCustomVtx",
204 prereqs = [ "ghost:Track" ]),
205
206
207 QGTaggingCustomVtx = JetModifier("JetQGTaggerVariableTool", "qgtaggingCustomVtx",
209 modspec = "CustomVtx",
210 prereqs = lambda _,jdef :
211 ["input:JetTrackVtxAssocCustomVtx","mod:TrackMomentsCustomVtx"] +
212 (["mod:JetPtAssociation"] if not jdef._cflags.Input.isMC else []),
213 JetContainer = CustomPFJetContainerName),
214
215 BoostedQGTaggingCustomVtx = JetModifier("BoostedJetTaggerTool", "boostedqgtaggingCustomVtx",
217 modspec = "CustomVtx",
218 prereqs = lambda _,jdef :
219 ["input:JetTrackVtxAssocCustomVtx","mod:TrackMomentsCustomVtx"] +
220 (["mod:JetPtAssociation"] if not jdef._cflags.Input.isMC else []),
221 JetContainer = CustomPFJetContainerName),
222
223
224 fJVTCustomVtx = JetModifier("JetForwardPFlowJvtTool", "fJVTCustomVtx",
226 modspec = "CustomVtx",
227 prereqs = ["input:JetTrackVtxAssocCustomVtx","input:EventDensityCustomVtx",f"input:{context['Vertices']}","mod:NNJVTCustomVtx"],
228 JetContainer = CustomPFJetContainerName),
229 )
230
231 from JetRecConfig.JetRecConfig import JetRecCfg
232
233 acc.merge(JetRecCfg(ConfigFlags,AntiKt4EMPFlowCustomVtx))
234
235 return acc
236
void print(char *figname, TCanvas *c1)