ATLAS Offline Software
Loading...
Searching...
No Matches
CalibratedJetCopyConfig.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 sanitizeName(name: str) -> str:
12 return re.sub(r"[^A-Za-z0-9_]", "_", name)
13
14
16 jetCollection: str,
17 configFile: str,
18 calibSequence: str,
19 calibArea: str,
20 calibrationScale: str,
21 isData: bool,
22 calibJetCollection: str | None,
23 rhoKey: str | None,
24 pvKey: str | None,
25):
26 """Build the JetCalibrationTool and return (tool, jet_container)."""
27
28 if jetCollection.endswith("Jets"):
29 jet_container = jetCollection
30 jet_collection_nosuffix = jetCollection[:-4]
31 else:
32 jet_container = f"{jetCollection}Jets"
33 jet_collection_nosuffix = jetCollection
34
35 safe_collection = sanitizeName(jet_collection_nosuffix)
36 safe_scale = sanitizeName(calibrationScale)
37
38 calib_collection = calibJetCollection if calibJetCollection is not None else jet_collection_nosuffix
39
40 tool_kwargs = dict(
41 JetCollection=calib_collection,
42 ConfigFile=configFile,
43 CalibSequence=calibSequence,
44 CalibArea=calibArea,
45 IsData=isData,
46 )
47 if rhoKey is not None:
48 tool_kwargs['RhoKey'] = rhoKey
49 if pvKey is not None:
50 tool_kwargs['PrimaryVerticesContainerName'] = pvKey
51
52 jet_calib_tool = CompFactory.JetCalibrationTool(
53 f"JetCalibrationTool_{safe_collection}_{safe_scale}",
54 **tool_kwargs,
55 )
56
57 return jet_calib_tool, jet_container
58
59
61 cfgFlags,
62 jetCollection: str,
63 outputCollection: str,
64 configFile: str,
65 calibSequence: str,
66 calibArea: str,
67 calibrationScale: str,
68 isData: bool = False,
69 calibJetCollection: str | None = None,
70 rhoKey: str | None = None,
71 pvKey: str | None = None,
72) -> ComponentAccumulator:
73 """Record a calibrated shallow copy of a jet collection.
74
75 The copy is written to *outputCollection* and each input jet is
76 decorated with an element link ('calibratedJetLink') to its copy.
77 """
78
79 jet_calib_tool, jet_container = getJetCalibrationTool(
80 jetCollection=jetCollection,
81 configFile=configFile,
82 calibSequence=calibSequence,
83 calibArea=calibArea,
84 calibrationScale=calibrationScale,
85 isData=isData,
86 calibJetCollection=calibJetCollection,
87 rhoKey=rhoKey,
88 pvKey=pvKey,
89 )
90
91 acc = ComponentAccumulator()
92 acc.addPublicTool(jet_calib_tool)
93 acc.addEventAlgo(
94 CompFactory.CalibratedJetCopyAlg(
95 f"CalibratedJetCopyAlg_{sanitizeName(outputCollection)}",
96 JetCalibrationTool=jet_calib_tool,
97 JetContainer=jet_container,
98 OutputContainer=outputCollection,
99 )
100 )
101
102 return acc
getJetCalibrationTool(str jetCollection, str configFile, str calibSequence, str calibArea, str calibrationScale, bool isData, str|None calibJetCollection, str|None rhoKey, str|None pvKey)
ComponentAccumulator CalibratedJetCopyCfg(cfgFlags, str jetCollection, str outputCollection, str configFile, str calibSequence, str calibArea, str calibrationScale, bool isData=False, str|None calibJetCollection=None, str|None rhoKey=None, str|None pvKey=None)