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='EMPFlow')
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 infix = "CustomVtx",
121 context = jetContextName,
122 ghostdefs = ghostCustomVtx,
123 modifiers = modsCustomVtx+("JetPtAssociation","QGTaggingCustomVtx","BoostedQGTaggingCustomVtx","fJVTCustomVtx","NNJVTCustomVtx","CaloEnergiesClus","JetPileupLabel"),
124 ptmin = 10000,
125 )
126
127 def getUsedInVertexFitTrackDecoratorAlgCustomVtx(jetdef, jetmod):
128 """ Create the alg to decorate the used-in-fit information for AMVF """
129 context = jetdef._contextDic
130
131 from InDetUsedInFitTrackDecoratorTool.UsedInVertexFitTrackDecoratorConfig import getUsedInVertexFitTrackDecoratorAlg
132 alg = getUsedInVertexFitTrackDecoratorAlg(context['Tracks'], context['Vertices'],
133 vertexDeco='TTVA_AMVFVertices_forHiggs',
134 weightDeco='TTVA_AMVFWeights_forHiggs')
135 return alg
136
137
138
139 stdInputExtDic[context['Vertices']] = JetInputExternal( context['Vertices'], xAODType.Vertex )
140
141 stdInputExtDic["JetSelectedTracksCustomVtx"] = JetInputExternal("JetSelectedTracksCustomVtx", xAODType.TrackParticle,
142 prereqs= [ f"input:{context['Tracks']}" ],
143 algoBuilder = lambda jdef,_ : jrtcfg.getTrackSelAlg(jdef, trackSelOpt=False,
144 DecorDeps=["TTVA_AMVFWeights_forHiggs", "TTVA_AMVFVertices_forHiggs"] )
145 )
146
147 stdInputExtDic["JetTrackUsedInFitDecoCustomVtx"] = JetInputExternal("JetTrackUsedInFitDecoCustomVtx", xAODType.TrackParticle,
148 prereqs= [ f"input:{context['Tracks']}" ,
149 f"input:{context['Vertices']}"],
150 algoBuilder = getUsedInVertexFitTrackDecoratorAlgCustomVtx
151 )
152
153 stdInputExtDic["JetTrackVtxAssocCustomVtx"] = JetInputExternal("JetTrackVtxAssocCustomVtx", xAODType.TrackParticle,
154 algoBuilder = lambda jdef,_ : jrtcfg.getJetTrackVtxAlg(jdef._contextDic, algname="jetTVACustomVtx",
155 WorkingPoint="Nonprompt_All_MaxWeight",
156 AMVFVerticesDeco='TTVA_AMVFVertices_forHiggs',
157 AMVFWeightsDeco='TTVA_AMVFWeights_forHiggs'),
158 prereqs = [ "input:JetTrackUsedInFitDecoCustomVtx", f"input:{context['Vertices']}" ] )
159
160 stdInputExtDic["EventDensityCustomVtx"] = JetInputExternal("EventDensityCustomVtx", "EventShape", algoBuilder = buildEventShapeAlg,
161 containername = lambda jetdef, _ : "Kt4"+jetdef.inputdef.label+"CustomVtxEventShape",
162 prereqs = lambda jetdef : ["input:"+jetdef.inputdef.name] )
163
164 from JetRecConfig.StandardJetMods import stdJetModifiers
165 from JetRecConfig.JetDefinition import JetModifier
166 from JetCalibTools import JetCalibToolsConfig
167
168 stdJetModifiers.update(
169
170 CalibCustomVtx = JetModifier("JetCalibrationTool","jetcalib_jetcoll_calibseqCustomVtx",
171 createfn=JetCalibToolsConfig.getJetCalibToolFromString,
173
174
175 JVFCustomVtx = JetModifier("JetVertexFractionTool", "jvfCustomVtx",
177 modspec = "CustomVtx",
178 prereqs = ["input:JetTrackVtxAssocCustomVtx", "mod:TrackMomentsCustomVtx", f"input:{context['Vertices']}"] ,
179 JetContainer = CustomPFJetContainerName),
180
181 JVTCustomVtx = JetModifier("JetVertexTaggerTool", "jvtCustomVtx",
183 modspec = "CustomVtx",
184 prereqs = [ "mod:JVFCustomVtx" ],JetContainer = CustomPFJetContainerName),
185
186 NNJVTCustomVtx = JetModifier("JetVertexNNTagger", "nnjvtCustomVtx",
188 prereqs = [ "mod:JVFCustomVtx" ],JetContainer = CustomPFJetContainerName),
189
190 OriginSetPVCustomVtx = JetModifier("JetOriginCorrectionTool", "origin_setpvCustomVtx",
191 modspec = "CustomVtx",
192 prereqs = [ "mod:JVFCustomVtx" ],JetContainer = CustomPFJetContainerName, OnlyAssignPV=True),
193
194 TrackMomentsCustomVtx = JetModifier("JetTrackMomentsTool", "trkmomsCustomVtx",
196 modspec = "CustomVtx",
197 prereqs = [ "input:JetTrackVtxAssocCustomVtx","ghost:Track" ],JetContainer = CustomPFJetContainerName),
198
199 TrackSumMomentsCustomVtx = JetModifier("JetTrackSumMomentsTool", "trksummomsCustomVtx",
201 modspec = "CustomVtx",
202 prereqs = [ "input:JetTrackVtxAssocCustomVtx","ghost:Track" ],JetContainer = CustomPFJetContainerName),
203
204 ChargeCustomVtx = JetModifier("JetChargeTool", "jetchargeCustomVtx",
205 prereqs = [ "ghost:Track" ]),
206
207
208 QGTaggingCustomVtx = JetModifier("JetQGTaggerVariableTool", "qgtaggingCustomVtx",
210 modspec = "CustomVtx",
211 prereqs = lambda _,jdef :
212 ["input:JetTrackVtxAssocCustomVtx","mod:TrackMomentsCustomVtx"] +
213 (["mod:JetPtAssociation"] if not jdef._cflags.Input.isMC else []),
214 JetContainer = CustomPFJetContainerName),
215
216 BoostedQGTaggingCustomVtx = JetModifier("BoostedJetTaggerTool", "boostedqgtaggingCustomVtx",
218 modspec = "CustomVtx",
219 prereqs = lambda _,jdef :
220 ["input:JetTrackVtxAssocCustomVtx","mod:TrackMomentsCustomVtx"] +
221 (["mod:JetPtAssociation"] if not jdef._cflags.Input.isMC else []),
222 JetContainer = CustomPFJetContainerName),
223
224
225 fJVTCustomVtx = JetModifier("JetForwardPFlowJvtTool", "fJVTCustomVtx",
227 modspec = "CustomVtx",
228 prereqs = ["input:JetTrackVtxAssocCustomVtx","input:EventDensityCustomVtx",f"input:{context['Vertices']}","mod:NNJVTCustomVtx"],
229 JetContainer = CustomPFJetContainerName),
230 )
231
232 from JetRecConfig.JetRecConfig import JetRecCfg
233
234 acc.merge(JetRecCfg(ConfigFlags,AntiKt4EMPFlowCustomVtx))
235
236 return acc
237
void print(char *figname, TCanvas *c1)