3 from AthenaCommon.Logging
import logging
4 lep_tag_log = logging.getLogger(
'LeptonTaggersConfig')
6 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
7 from AthenaConfiguration.ComponentFactory
import CompFactory
26 Generate a vertex fitting tool.
29 lep_tag_log.info(
"creating VtxFittingTool")
31 kwargs.setdefault(
"doSeedVertexFit",
False)
33 kwargs.setdefault(
"DistToPriVtxName",
"distToPriVtx")
34 kwargs.setdefault(
"NormDistToPriVtxName",
"normDistToPriVtx")
35 kwargs.setdefault(
"DistToRefittedPriVtxName",
"distToRefittedPriVtx")
36 kwargs.setdefault(
"NormDistToRefittedPriVtxName",
"normDistToRefittedPriVtx")
37 kwargs.setdefault(
"DistToRefittedRmLepPriVtxName",
"distToRefittedRmLepPriVtx")
38 kwargs.setdefault(
"NormDistToRefittedRmLepPriVtxName",
39 "normDistToRefittedRmLepPriVtx")
41 from TrkConfig.TrkVertexBilloirToolsConfig
import FastVertexFitterCfg
44 kwargs.setdefault(
"vertexFitterTool", fast_vtx_fitter)
45 kwargs.setdefault(
"seedVertexFitterTool", fast_vtx_fitter)
47 vertex_fitting_tool = CompFactory.Prompt.VertexFittingTool(
48 name=
"VertexFittingTool", **kwargs
51 acc.setPrivateTools(vertex_fitting_tool)
52 lep_tag_log.info(
"end of VtxFittingTool creation")
57 ConfigFlags, name="PrimaryVertexReFitter",
58 lepton_type="", **kwargs
59 ) -> ComponentAccumulator:
61 CA to run the PrimaryVertexReFitter algorithm.
64 if lepton_type
not in [
'Electrons',
'Muons']:
65 raise ValueError(f
'DecorateReFitPrimaryVertex - unknown lepton type: "{lepton_type}"')
69 kwargs.setdefault(
"ReFitPriVtxName", f
"RefittedPriVtx_{lepton_type}")
70 kwargs.setdefault(
"LeptonContainerName", lepton_type)
72 kwargs.setdefault(
"DistToRefittedPriVtxName",
"distToRefittedPriVtx")
73 kwargs.setdefault(
"NormDistToRefittedPriVtxName",
"normDistToRefittedPriVtx")
74 kwargs.setdefault(
"RefittedVtxLinkName",
"RefittedPriVtxLink")
75 kwargs.setdefault(
"RefittedVtxWithoutLeptonLinkName",
76 f
"RefittedPriVtxWithoutLepton_{lepton_type}")
78 alg_name = f
'PrimaryVertexReFitter_{lepton_type}_decoratePriVtx'
80 kwargs.setdefault(
"VertexFittingTool", acc.popToolsAndMerge(
84 the_alg = CompFactory.Prompt.PrimaryVertexReFitter(alg_name, **kwargs)
86 acc.addEventAlgo(the_alg, primary =
True)
87 lep_tag_log.info(
"end of DecorateReFitPrimaryVertexCfg")
92 lepton_name="", **kwargs) -> ComponentAccumulator:
94 Generate a VtxItrMergingTool configuration.
96 lep_tag_log.info(
"creating VtxItrMergingToolCfg configuration")
100 kwargs.setdefault(
"minFitProb", 0.03)
102 tool_name = f
'VtxIterFitMergingTool_{lepton_name}'
104 vtxItrMergingTool = CompFactory.Prompt.VertexIterativeFitMergingTool(
105 name=tool_name, **kwargs
108 acc.setPrivateTools(vtxItrMergingTool)
114 lepton_name="", **kwargs) -> ComponentAccumulator:
116 Configure the non-prompt vertex decorator.
118 if lepton_name
not in [
'Electrons',
'Muons']:
119 raise ValueError(f
'DecorateNonPromptVertex - unknown lepton type: "{lepton_name}"')
125 kwargs.setdefault(
"VertexFittingTool",vertex_fitting_tool)
130 flags, lepton_name=lepton_name,
131 VertexFittingTool=vertex_fitting_tool
135 kwargs.setdefault(
"LeptonContainerName", lepton_name)
136 kwargs.setdefault(
"ReFitPriVtxContainerName", f
"RefittedPriVtx_{lepton_name}")
137 kwargs.setdefault(
"SVContainerName", f
"SecVtxContainer_{lepton_name}")
139 kwargs.setdefault(
"SecVtxLinksName",
"SecVtxLinks")
140 kwargs.setdefault(
"DeepMergedSecVtxLinksName",
"DeepMergedSecVtxLinks")
141 kwargs.setdefault(
"NoLeptonPriVtxLinkName", f
"RefittedPriVtxWithoutLepton_{lepton_name}")
142 kwargs.setdefault(
"IndexVectorName",
"PromptLeptonInput_SecondaryVertexIndexVector")
144 alg = CompFactory.Prompt.NonPromptLeptonVertexingAlg(
145 name=f
'NonPromptVtx_decorate_{lepton_name}',
149 acc.addEventAlgo(alg, primary=
True)
155 RNN_name="RNN_name", lepton_name="",
156 **kwargs) -> ComponentAccumulator:
158 Configure the RNN tool.
160 lep_tag_log.info(
"calling RNNToolCfg with name"+RNN_name+
" with lepton_name="+lepton_name)
162 if lepton_name
not in [
"Electrons",
"Muons"]:
163 raise ValueError(f
'RNNTool - unknown lepton type: "{lepton_name}"')
170 if lepton_name ==
'Electrons':
171 kwargs.setdefault(
"configRNNVersion",
'InputData-2020-02-25/RNN/Electron')
172 kwargs.setdefault(
"configRNNJsonFile",
173 'elecs_feb20_fullrun2_linear_ptraw_ntk5_model_ndense10_nhidden50_nepoch10_nbatch256_use_weights_nn-config.json')
175 elif lepton_name ==
'Muons':
176 kwargs.setdefault(
"configRNNVersion",
'InputData-2020-02-25/RNN/Muon')
177 kwargs.setdefault(
"configRNNJsonFile",
178 'muons_feb19_fullrun2_linear_ptraw_ntk5_model_ndense10_nhidden50_nepoch10_nbatch256_use_weights_nn-config.json')
180 tool_rnn = CompFactory.Prompt.RNNTool(
181 name=f
'{RNN_name}_{lepton_name}_RNNTool', **kwargs
183 acc.setPrivateTools(tool_rnn)
189 name="DecoratePromptLeptonRNN",
190 **kwargs) -> ComponentAccumulator:
192 Configure the prompt lepton RNN decorator.
194 lep_tag_log.info(
"calling DecoratePromptLeptonRNNCfg with name"+RNN_name+
" with lepton_name="+lepton_name)
195 if lepton_name
not in [
"Electrons",
"Muons"]:
196 raise ValueError(f
'DecorateNonPromptVertex - unknown lepton type: "{lepton_name}"')
203 kwargs.setdefault(
"inputContainerLepton", lepton_name)
204 kwargs.setdefault(
"inputContainerTrack",
'InDetTrackParticles')
205 kwargs.setdefault(
"inputContainerTrackJet",
'AntiKtVR30Rmax4Rmin02PV0TrackJets')
206 kwargs.setdefault(
"inputContainerPrimaryVertices",
'PrimaryVertices')
208 kwargs.setdefault(
"decorationPrefixRNN",
'PromptLeptonRNN_')
210 kwargs.setdefault(
"debug",
False)
211 kwargs.setdefault(
"outputStream",
'out')
213 kwargs.setdefault(
"toolRNN", acc.popToolsAndMerge(
214 RNNToolCfg(flags, RNN_name=RNN_name, lepton_name=lepton_name)
217 alg = CompFactory.Prompt.DecoratePromptLeptonRNN(
218 name=f
'{lepton_name}_decorate_RNN_{RNN_name}', **kwargs
220 acc.addEventAlgo(alg, primary=
True)
222 lep_tag_log.info(
'Decorate%s - prepared %s algorithm for: %s',
223 RNN_name, RNN_name, lepton_name)
230 Get the integer variables for the BDT (I think)
234 if BDT_name ==
'PromptLeptonImprovedVeto':
235 int_vars += [
'MVAXBin']
236 elif (BDT_name ==
'PromptLeptonImprovedVetoBARR'
237 or BDT_name ==
'PromptLeptonImprovedVetoECAP'):
238 int_vars += [
'MVAXBin',
'TrackJetNTrack']
240 raise ValueError(f
'getStringIntVars - unknown alg: "{BDT_name}"')
247 Get the float variables for the BDT (I think)
251 if BDT_name ==
'PromptLeptonImprovedVeto':
252 float_vars += [
'topoetcone30rel',
253 'ptvarcone30_TightTTVA_pt500rel',
254 'PromptLeptonRNN_prompt',
258 'CandVertex_normDistToPriVtxLongitudinalBest']
259 elif (BDT_name ==
'PromptLeptonImprovedVetoBARR'
260 or BDT_name ==
'PromptLeptonImprovedVetoECAP'):
261 float_vars += [
'topoetcone30rel',
263 'PromptLeptonRNN_prompt',
266 'CaloClusterSumEtRel',
268 'CandVertex_normDistToPriVtxLongitudinalBest_ThetaCutVtx']
270 raise ValueError(f
'getStringFloatVars - unknown alg: "{BDT_name}"')
276 flags, BDT_name="", lepton_name="", track_jet_name="AntiKtVR30Rmax4Rmin02PV0TrackJets",
278 ) -> ComponentAccumulator:
280 Configure the PromptLeptonImproved decorator.
282 lep_tag_log.info(
"calling DecoratePromptLeptonImprovedCfg with BDT_name="+BDT_name+
" lepton_name="+lepton_name+
" track_jet_name="+track_jet_name)
286 if track_jet_name !=
'AntiKtVR30Rmax4Rmin02PV0TrackJets':
287 raise ValueError(f
'Decorate{BDT_name} - unknown track jet collection: "{track_jet_name}"')
294 kwargs.setdefault(
"LeptonContainerName", lepton_name)
296 kwargs.setdefault(
"TrackJetContainerName", track_jet_name)
297 kwargs.setdefault(
"PrimaryVertexContainerName",
'PrimaryVertices')
298 kwargs.setdefault(
"ClusterContainerName",
'CaloCalTopoClusters')
300 kwargs.setdefault(
"BDTName", BDT_name)
301 kwargs.setdefault(
"InputVarDecoratePrefix",
'PromptLeptonImprovedInput_')
302 kwargs.setdefault(
"PrintTime",
False)
303 kwargs.setdefault(
"OutputLevel", 10)
308 if lepton_name ==
'Electrons':
309 kwargs.setdefault(
"MethodTitleMVA", f
'BDT_Electron_{BDT_name}')
310 kwargs.setdefault(
"ConfigFileVersion",
'InputData-2020-02-25/BDT/Electron/' + BDT_name)
311 kwargs.setdefault(
"accessorRNNVars", [
'PromptLeptonRNN_prompt'])
312 elif lepton_name ==
'Muons':
313 kwargs.setdefault(
"MethodTitleMVA", f
'BDT_Muon_{BDT_name}')
314 kwargs.setdefault(
"ConfigFileVersion",
'InputData-2020-02-25/BDT/Muon/' + BDT_name)
315 kwargs.setdefault(
"accessorRNNVars", [
'PromptLeptonRNN_prompt'])
317 raise ValueError(f
'Decorate{BDT_name} - unknown lepton type: "{lepton_name}"')
321 kwargs.setdefault(
"extraDecoratorFloatVars", [
'RawPt'])
322 kwargs.setdefault(
"extraDecoratorShortVars", [
'CandVertex_NPassVtx'])
323 kwargs.setdefault(
"vetoDecoratorFloatVars", [
'PromptLeptonRNN_prompt'])
324 kwargs.setdefault(
"vetoDecoratorShortVars", [])
326 kwargs.setdefault(
"leptonPtBinsVector", [10.0e3, 15.0e3, 20.0e3, 25.0e3, 32.0e3, 43.0e3, 100.0e3])
332 kwargs.setdefault(
"VertexLinkName",
'DeepMergedSecVtxLinks')
334 alg = CompFactory.Prompt.DecoratePromptLeptonImproved(
335 f
'{lepton_name}_decorate{BDT_name}', **kwargs
337 acc.addEventAlgo(alg, primary=
True)
340 'Decorate%s - prepared %s algorithm for: %s, %s',
341 BDT_name, BDT_name, lepton_name, track_jet_name
348 ConfigFlags, name="DecorateImprovedPromptLeptonAlgs",
349 lepton_type="", **kwargs
350 ) -> ComponentAccumulator:
352 CA to decorate with PLIV input algorithms
354 valid_lepton_types = [
"",
"Electrons",
"Muons"]
355 if lepton_type
not in valid_lepton_types:
356 lep_tag_log.error(
"Requested lepton type: %s", lepton_type)
357 lep_tag_log.error(
"Allowed lepton types: %s", valid_lepton_types)
358 raise ValueError(
'DecorateImprovedPromptLeptonAlgsCfg - '
359 + f
'unknown lepton type: "{lepton_type}"')
363 if lepton_type
in [
"",
"Electrons"]:
367 RNN_name=
'PromptLeptonRNN',
368 lepton_name=
'Electrons'))
370 ConfigFlags, BDT_name=
"PromptLeptonImprovedVetoBARR",
371 lepton_name=
"Electrons", track_jet_name=
"AntiKtVR30Rmax4Rmin02PV0TrackJets"
374 ConfigFlags, BDT_name=
"PromptLeptonImprovedVetoECAP",
375 lepton_name=
"Electrons", track_jet_name=
"AntiKtVR30Rmax4Rmin02PV0TrackJets"
378 if lepton_type
in [
"",
"Muons"]:
382 RNN_name=
'PromptLeptonRNN',
383 lepton_name=
'Muons'))
385 ConfigFlags, BDT_name=
"PromptLeptonImprovedVeto",
386 lepton_name=
"Muons", track_jet_name=
"AntiKtVR30Rmax4Rmin02PV0TrackJets"
403 if name ==
"" or name ==
"Electrons":
404 prompt_lep_vars += [
"Electrons.PromptLeptonVeto.PromptLeptonIso.LowPtPLV."]
406 if name ==
"" or name ==
"Muons":
407 prompt_lep_vars += [
"Muons.PromptLeptonVeto.PromptLeptonIso.LowPtPLV."]
409 return prompt_lep_vars
412 prompt_vars =
"PromptLeptonVeto.PromptLeptonIso.LowPtPLV."
413 prompt_vars +=
"PromptLeptonInput_TrackJetNTrack.PromptLeptonInput_sv1_jf_ntrkv."
414 prompt_vars +=
"PromptLeptonInput_ip2.PromptLeptonInput_ip3."
415 prompt_vars +=
"PromptLeptonInput_LepJetPtFrac.PromptLeptonInput_DRlj."
416 prompt_vars +=
"PromptLeptonInput_PtFrac.PromptLeptonInput_PtRel."
417 prompt_vars +=
"PromptLeptonInput_DL1mu.PromptLeptonInput_rnnip."
418 prompt_vars +=
"PromptLeptonInput_topoetcone20rel.PromptLeptonInput_ptvarcone20rel."
419 prompt_vars +=
"PromptLeptonInput_topoetcone30rel.PromptLeptonInput_ptvarcone30rel."
421 prompt_vars +=
"PromptLeptonInput_SecondaryVertexIndexVector.PromptLeptonInput_SecondaryVertexIndexVectorInDet.PromptLeptonInput_SecondaryVertexIndexVectorMerge.PromptLeptonInput_SecondaryVertexIndexVectorDeepMerge."
422 prompt_vars +=
"rhocen.rhofor.SecVtxLinks.RefittedPriVtxLink.RefittedPriVtxWithoutLeptonLink."
425 secondaryvertex_vars =
"SVType.trackParticleLinks.trackWeights.neutralParticleLinks.neutralWeights.SecondaryVertexIndex.SecondaryVertexIndexVectorInput.chiSquared.numberDoF.x.y.z.covariance.vertexType.energyFraction.mass.normDist.ntrk.distToPriVtx.normDistToPriVtx.distToRefittedPriVtx.normDistToRefittedPriVtx.distToRefittedRmLepPriVtx.normDistToRefittedRmLepPriVtx"
428 prompt_vars +=
"PromptLeptonInput_JetPt.PromptLeptonInput_JetEta.PromptLeptonInput_JetPhi.PromptLeptonInput_JetM."
430 if name ==
"" or name ==
"Electrons":
431 prompt_el_vars =
"ptvarcone40.topoetcone20.topoetcone20ptCorrection.ptcone20_TightTTVA_pt500.ptcone20_TightTTVA_pt1000.ptvarcone20_TightTTVA_pt1000.ptvarcone30_TightTTVA_pt500.ptvarcone30_TightTTVA_pt1000.ptvarcone40_TightTTVALooseCone_pt500"
433 prompt_lep_vars += [
"Electrons." + prompt_vars + prompt_el_vars]
434 prompt_lep_vars += [
"SecVtxContainer_Electrons.%s" %secondaryvertex_vars]
435 prompt_lep_vars += [
"SecVtx_ConvVtxContainer_Electrons.%s" %secondaryvertex_vars]
437 if name ==
"" or name ==
"Muons":
438 prompt_mu_vars =
"ET_Core.ET_EMCore.ET_HECCore.ET_TileCore.EnergyLoss.EnergyLossSigma.MeasEnergyLoss.MeasEnergyLossSigma.ParamEnergyLoss.ParamEnergyLossSigmaMinus.ParamEnergyLossSigmaPlus.neflowisol20.neflowisol30.neflowisol40.ptvarcone20_TightTTVA_pt500.ptvarcone30_TightTTVA_pt500.ptvarcone40_TightTTVA_pt500.ptvarcone20_TightTTVA_pt1000.ptvarcone30_TightTTVA_pt1000.ptvarcone40_TightTTVA_pt1000.caloExt_Decorated.caloExt_eta.caloExt_phi"
440 prompt_lep_vars += [
"Muons." + prompt_vars + prompt_mu_vars]
441 prompt_lep_vars += [
"SecVtxContainer_Muons.%s" %secondaryvertex_vars]
443 return prompt_lep_vars
455 rawpt_vars =
"PromptLeptonImprovedInput_MVAXBin.PromptLeptonImprovedInput_RawPt"
457 if name ==
"" or name ==
"Electrons":
458 prompt_lep_vars += [
"Electrons.PromptLeptonImprovedVetoBARR.PromptLeptonImprovedVetoECAP.%s"%rawpt_vars]
460 if name ==
"" or name ==
"Muons":
461 prompt_lep_vars += [
"Muons.PromptLeptonImprovedVeto.%s"%rawpt_vars]
463 return prompt_lep_vars
465 prompt_vars =
"PromptLeptonImprovedInput_MVAXBin.PromptLeptonImprovedInput_RawPt."
466 prompt_vars +=
"PromptLeptonImprovedInput_PtFrac.PromptLeptonImprovedInput_DRlj."
467 prompt_vars +=
"PromptLeptonImprovedInput_topoetcone30rel.PromptLeptonImprovedInput_ptvarcone30rel."
469 if name ==
"" or name ==
"Electrons":
471 prompt_el_vars =
"PromptLeptonRNN_prompt.PromptLeptonRNN_non_prompt_b.PromptLeptonRNN_non_prompt_c.PromptLeptonRNN_conversion."
472 prompt_el_vars +=
"PromptLeptonImprovedVetoBARR.PromptLeptonImprovedVetoECAP.PromptLeptonImprovedInput_TrackJetNTrack.PromptLeptonImprovedInput_PtRel.PromptLeptonImprovedInput_CaloClusterSumEtRel.PromptLeptonImprovedInput_CandVertex_normDistToPriVtxLongitudinalBest_ThetaCutVtx"
474 prompt_lep_vars += [
"Electrons." + prompt_vars + prompt_el_vars]
476 if name ==
"" or name ==
"Muons":
478 prompt_mu_vars =
"PromptLeptonRNN_prompt.PromptLeptonRNN_non_prompt_b.PromptLeptonRNN_non_prompt_c."
479 prompt_mu_vars +=
"PromptLeptonImprovedVeto.PromptLeptonImprovedInput_ptvarcone30_TightTTVA_pt500rel.PromptLeptonImprovedInput_CaloClusterERel.PromptLeptonImprovedInput_CandVertex_normDistToPriVtxLongitudinalBest"
481 prompt_lep_vars += [
"Muons." + prompt_vars + prompt_mu_vars]
483 return prompt_lep_vars
488 if __name__ ==
"__main__":
490 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
493 from AthenaConfiguration.Enums
import ProductionStep
494 FLAGS.Common.ProductionStep = ProductionStep.Derivation
496 FLAGS.Exec.MaxEvents = 10
499 from AthenaConfiguration.TestDefaults
import defaultTestFiles
500 FLAGS.Input.Files = defaultTestFiles.AOD_RUN3_MC
506 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
510 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
516 from DerivationFrameworkPhys.TriggerListsHelper
import TriggerListsHelper
517 trigger_lists_helper = TriggerListsHelper(FLAGS)
519 from DerivationFrameworkPhys.PhysCommonConfig
import PhysCommonAugmentationsCfg
531 ACC.printConfig(withDetails=
True, summariseProps=
True)
538 sys.exit(
not status.isSuccess())