ATLAS Offline Software
Loading...
Searching...
No Matches
JetCalibrationDecoratorConfig.py
Go to the documentation of this file.
1"""
2Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3"""
4
5import re
6
7from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
8from AthenaConfiguration.ComponentFactory import CompFactory
9
10
11def _sanitize(name: str) -> str:
12 return re.sub(r"[^A-Za-z0-9_]", "_", name)
13
14
16 cfgFlags,
17 jetCollection: str,
18 configFile: str,
19 calibSequence: str,
20 calibArea: str,
21 calibrationScale: str,
22 isData: bool = False,
23 calibJetCollection: str | None = None,
24 rhoKey: str | None = None,
25 pvKey: str | None = None,
26) -> ComponentAccumulator:
27 """Decorate jets with calibrated four-momentum components."""
28
29 del cfgFlags
30
31 if jetCollection.endswith("Jets"):
32 jet_container = jetCollection
33 jet_collection_nosuffix = jetCollection[:-4]
34 else:
35 jet_container = f"{jetCollection}Jets"
36 jet_collection_nosuffix = jetCollection
37
38 safe_collection = _sanitize(jet_collection_nosuffix)
39 safe_scale = _sanitize(calibrationScale)
40
41 calib_collection = calibJetCollection if calibJetCollection is not None else jet_collection_nosuffix
42
43 tool_kwargs = dict(
44 JetCollection=calib_collection,
45 ConfigFile=configFile,
46 CalibSequence=calibSequence,
47 CalibArea=calibArea,
48 IsData=isData,
49 )
50 if rhoKey is not None:
51 tool_kwargs['RhoKey'] = rhoKey
52 if pvKey is not None:
53 tool_kwargs['PrimaryVerticesContainerName'] = pvKey
54
55 jet_calib_tool = CompFactory.JetCalibrationTool(
56 f"JetCalibrationTool_{safe_collection}_{safe_scale}",
57 **tool_kwargs,
58 )
59
60 acc = ComponentAccumulator()
61 acc.addPublicTool(jet_calib_tool)
62 acc.addEventAlgo(
63 CompFactory.FlavorTagDiscriminants.JetCalibrationDecoratorAlg(
64 f"JetCalibrationDecoratorAlg_{_sanitize(jet_container)}_{safe_scale}",
65 JetCalibrationTool=jet_calib_tool,
66 JetContainer=jet_container,
67 ptCalibratedKey=f"{jet_container}.{calibrationScale}_pt",
68 etaCalibratedKey=f"{jet_container}.{calibrationScale}_eta",
69 phiCalibratedKey=f"{jet_container}.{calibrationScale}_phi",
70 massCalibratedKey=f"{jet_container}.{calibrationScale}_mass",
71 )
72 )
73
74 return acc
ComponentAccumulator JetCalibrationDecoratorCfg(cfgFlags, str jetCollection, str configFile, str calibSequence, str calibArea, str calibrationScale, bool isData=False, str|None calibJetCollection=None, str|None rhoKey=None, str|None pvKey=None)