ATLAS Offline Software
Loading...
Searching...
No Matches
HIGlobalConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5from OutputStreamAthenaPool.OutputStreamConfig import addToAOD, addToESD
6
7def HITowerWeightToolCfg(flags, name="WeightTool", **kwargs):
8 """Configures HITowerWeightTool"""
9 acc = ComponentAccumulator()
10
11 if "InputFile" not in kwargs:
12 from HIJetRec.HIJetRecUtilsCA import getHIClusterGeoWeightFile
13 kwargs.setdefault("InputFile", getHIClusterGeoWeightFile(flags))
14 kwargs.setdefault("ApplyCorrection", flags.HeavyIon.Jet.ApplyTowerEtaPhiCorrection)
15 kwargs.setdefault("ConfigDir", 'HIJetCorrection/')
16
17 acc.setPrivateTools(CompFactory.HITowerWeightTool(name, **kwargs))
18 return acc
19
20def HIEventShapeMapToolCfg(flags, name="HIEventShapeMapTool", **kwargs):
21 """Configures HIEventShapeMapTool"""
22 acc = ComponentAccumulator()
23 acc.setPrivateTools(CompFactory.HIEventShapeMapTool(name, **kwargs))
24 return acc
25
26def HIEventShapeFillerToolCfg(flags, name="HIEventShapeFillerTool", **kwargs):
27 """Configures HIEventShapeFillerTool"""
28 acc = ComponentAccumulator()
29 if "EventShapeMapTool" not in kwargs:
30 eventShapeMapTool = acc.popToolsAndMerge(HIEventShapeMapToolCfg(flags, name="HIEventShapeMapTool"))
31 kwargs.setdefault("EventShapeMapTool", eventShapeMapTool)
32 kwargs.setdefault("UseClusters", False)
33 kwargs.setdefault("CaloCellContainerKey", "AllCalo")
34 if kwargs["UseClusters"]:
35 #Add weight tool to filler tool
36 TWTool=acc.popToolsAndMerge(HITowerWeightToolCfg(flags, name="WeightTool"))
37 kwargs.setdefault("TowerWeightTool", TWTool)
38
39 acc.setPrivateTools(CompFactory.HIEventShapeFillerTool(name, **kwargs))
40 return acc
41
42def HIEventShapeMakerCfg(flags, name="HIEventShapeMaker", doWeighted=False, **kwargs):
43 """Configures HIEventShapeMaker, either with weights (for HIJets) or without weight (for HIGlobal)"""
44 acc = ComponentAccumulator()
45
46 # merge dependencies
47 if not flags.HeavyIon.isDerivation:
48 from CaloRec.CaloRecoConfig import CaloRecoCfg
49 acc.merge(CaloRecoCfg(flags))
50
51 from CaloRec.CaloTowerMakerConfig import CaloTowerMakerCfg
52 towerMaker = acc.getPrimaryAndMerge(CaloTowerMakerCfg(flags))
53
54 kwargs.setdefault("NaviTowerKey", towerMaker.TowerContainerName)
55 kwargs.setdefault("InputTowerKey", "")
56 else:
57 kwargs.setdefault("InputTowerKey", "HIClusters")
58
59 kwargs.setdefault("OutputContainerKey", "HIEventShape")
60 if "HIEventShapeFillerTool" not in kwargs:
61 name_esft="HIEventShapeFillerTool_Weighted" if doWeighted else "HIEventShapeFillerTool"
62 eventShapeTool = acc.popToolsAndMerge(HIEventShapeFillerToolCfg(flags,
63 name=name_esft,
64 UseClusters=doWeighted))
65 kwargs.setdefault("HIEventShapeFillerTool",eventShapeTool)
66
67 acc.addEventAlgo(CompFactory.HIEventShapeMaker(name, **kwargs))
68 return acc
69
70def HIEventShapeSummaryToolCfg(flags, name="HIEventShapeSummaryTool", **kwargs):
71 """Configures HIEventShapeSummaryTool"""
72 acc = ComponentAccumulator()
73
74 # TODO configure MBTS &FWD conversion once available
75 kwargs.setdefault("SubCalos", ['FCal','EMCal','HCal','ALL'])
76 kwargs.setdefault("Samplings", ['FCAL0','FCAL1','FCAL2'])
77 kwargs.setdefault("DoPositiveNegativeSides", False)
78
79 acc.setPrivateTools(CompFactory.HIEventShapeSummaryTool(name, **kwargs))
80 return acc
81
82def HIGlobalRecCfg(flags):
83 """Configures Heavy Ion Global quantities """
84 acc = ComponentAccumulator()
85
86 shapeKey=flags.HeavyIon.Global.EventShape
87 output = [ f"xAOD::HIEventShapeContainer#{shapeKey}", f"xAOD::HIEventShapeAuxContainer#{shapeKey}Aux."]
88
89 kwargs_hies=dict()
90 if flags.HeavyIon.Global.doEventShapeSummary:
91 summaryKey = "CaloSums"
92 summaryTool = acc.popToolsAndMerge(HIEventShapeSummaryToolCfg(flags))
93 kwargs_hies["SummaryTool"] = summaryTool
94 kwargs_hies["SummaryContainerKey"] = summaryKey
95 output.extend([ f"xAOD::HIEventShapeContainer#{summaryKey}", f"xAOD::HIEventShapeAuxContainer#{summaryKey}Aux."])
96
97 acc.merge(HIEventShapeMakerCfg(flags, **kwargs_hies))
98
99 acc.merge(addToESD(flags, output))
100 acc.merge(addToAOD(flags, output))
101
102 return acc
103
104
105if __name__ == "__main__":
106 from AthenaConfiguration.AllConfigFlags import initConfigFlags
107 from AthenaConfiguration.TestDefaults import defaultConditionsTags, defaultGeometryTags, defaultTestFiles
108 flags = initConfigFlags()
109 flags.Input.Files = [defaultTestFiles.d + "/RecJobTransformTests/data18_hi.00367384.physics_HardProbes.daq.RAW._lb0145._SFO-8._0001.data"]
110 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN2
111 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_DATA
112 flags.Exec.MaxEvents=5
113 flags.Concurrency.NumThreads=1
114
115 flags.fillFromArgs() # enable unit tests to switch only parts of reco: python -m HIRecConfig.HIRecConfig HeavyIon.doGlobal = 0 and so on
116 flags.lock()
117
118 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
119 acc = MainServicesCfg(flags)
120 from TriggerJobOpts.TriggerByteStreamConfig import ByteStreamReadCfg
121 acc.merge(ByteStreamReadCfg(flags))
122
123 acc.merge(HIGlobalRecCfg(flags))
124 from AthenaCommon.Constants import DEBUG
125 acc.getEventAlgo("HIEventShapeMaker").OutputLevel=DEBUG
126
127 acc.printConfig(withDetails=True, summariseProps=True)
128 flags.dump()
129
130 import sys
131 sys.exit(acc.run().isFailure())
HIEventShapeMakerCfg(flags, name="HIEventShapeMaker", doWeighted=False, **kwargs)
HIEventShapeSummaryToolCfg(flags, name="HIEventShapeSummaryTool", **kwargs)
HIEventShapeMapToolCfg(flags, name="HIEventShapeMapTool", **kwargs)
HIEventShapeFillerToolCfg(flags, name="HIEventShapeFillerTool", **kwargs)
HITowerWeightToolCfg(flags, name="WeightTool", **kwargs)