ATLAS Offline Software
Loading...
Searching...
No Matches
TrigElectronFactoriesCfg.py
Go to the documentation of this file.
2# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3#
4
5__doc__ = "ToolFactories to configure egammaAlgs to be used at the HLT"
6
7"""
8This file defines the factories of the algorithms to be used in an electron trigger sequence in athenaMT
9These are inspired by the offline factories, alhtough modified so they reflect the configuration we need for these algorithms at the HLT.
10Offline configurations are available here:
11 https://gitlab.cern.ch/atlas/athena/blob/master/Reconstruction/egamma/egammaAlgs/python/
12
13
14"""
15
16from AthenaConfiguration.ComponentFactory import CompFactory
17from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
18from AthenaConfiguration.Enums import BeamType
19
20def TrigEMTrackMatchBuilderToolCfg(flags,tag,trackparticles):
21 acc = ComponentAccumulator()
22 name='TrigEMTrackMatchBuilder'+tag
23 from egammaTrackTools.egammaTrackToolsConfig import EMExtrapolationToolsCfg
24 emExtrapolatorTools = acc.popToolsAndMerge(EMExtrapolationToolsCfg(flags))
25 builderTool = CompFactory.EMTrackMatchBuilder( name, #TODO, this is provate tool, it does not need to be specifically named
26 TrackParticlesName = trackparticles,
27 ExtrapolationTool = emExtrapolatorTools,
28 broadDeltaEta = 0.1, #candidate match is done in 2 times this so +- 0.2
29 broadDeltaPhi = 0.15, #candidate match is done in 2 times this so +- 0.3
30 useCandidateMatch = True,
31 useScoring = True,
32 SecondPassRescale = True,
33 UseRescaleMetric = True,
34 isCosmics = flags.Beam.Type is BeamType.Cosmics)
35 acc.setPrivateTools(builderTool)
36 return acc
37
38
39def TrigEgammaRecElectronCfg(flags, tag, trackparticles, calocluster, egammaRecContainer):
40 acc = ComponentAccumulator()
41 name = 'TrigEgammaRecElectron'+tag
42 electronRec = CompFactory.egammaRecBuilder( name,
43 InputClusterContainerName= calocluster,
44 egammaRecContainer= egammaRecContainer,
45 doConversions = False,
46 TrackMatchBuilderTool = acc.popToolsAndMerge(TrigEMTrackMatchBuilderToolCfg(flags, tag, trackparticles)) )
47 acc.addEventAlgo(electronRec)
48 return acc
49
50
51def TrigElectronSuperClusterBuilderCfg(flags, tag, InputEgammaRecContainerName, SuperElectronRecCollectionName,trackparticles):
52 acc = ComponentAccumulator()
53 from egammaTools.egammaSwToolConfig import egammaSwToolCfg
54 from egammaMVACalib.egammaMVACalibConfig import egammaMVASvcCfg
55 superClusterBuilder = CompFactory.electronSuperClusterBuilder( 'TrigElectronSuperClusterBuilder'+tag,
56 InputEgammaRecContainerName = InputEgammaRecContainerName,
57 OutputEgammaRecContainerKey = SuperElectronRecCollectionName,
58 ClusterCorrectionTool = acc.popToolsAndMerge(egammaSwToolCfg(flags)),
59 MVACalibSvc = acc.getPrimaryAndMerge(egammaMVASvcCfg(flags)),
60 EtThresholdCut = 1000,
61 TrackMatchBuilderTool = acc.popToolsAndMerge(TrigEMTrackMatchBuilderToolCfg(flags, tag, trackparticles)),
62 LinkToConstituents = False)
63 acc.addEventAlgo(superClusterBuilder)
64 return acc
65
66
67
68def TrigEMClusterToolCfg(flags,variant,OutputClusterContainerName):
69 acc = ComponentAccumulator()
70 from egammaMVACalib.egammaMVACalibConfig import egammaMVASvcCfg
71 tool = CompFactory.EMClusterTool('TrigEMClusterTool_electron'+variant,
72 OutputClusterContainerName = OutputClusterContainerName,
73 MVACalibSvc = acc.getPrimaryAndMerge(egammaMVASvcCfg(flags))
74 )
75 acc.setPrivateTools(tool)
76 return acc
77
78
79def TrigTopoEgammaElectronCfg(flags, tag, variant, cellsName, InputElectronRecCollectionName, InputPhotonRecCollectionName, ElectronOutputName, PhotonOutputName, OutputClusterContainerName):
80 acc = ComponentAccumulator()
81 from egammaTools.EMShowerBuilderConfig import EMShowerBuilderCfg
82 builder = CompFactory.xAODEgammaBuilder(name='topoEgammaBuilder_TrigElectrons'+tag,
83 InputElectronRecCollectionName = InputElectronRecCollectionName,
84 InputPhotonRecCollectionName = InputPhotonRecCollectionName,
85 ElectronOutputName = ElectronOutputName,
86 PhotonOutputName = PhotonOutputName,
87 DummyElectronOutputName = "HLT_PrecisionDummyElectron",
88 AmbiguityTool = CompFactory.EGammaAmbiguityTool(),
89 EMClusterTool = acc.popToolsAndMerge(TrigEMClusterToolCfg(flags,variant,OutputClusterContainerName)),
90 EMShowerTool = acc.popToolsAndMerge(EMShowerBuilderCfg(flags, CellsName=cellsName)),
91 doPhotons = False,
92 doElectrons = True)
93 acc.addEventAlgo(builder)
94 return acc
95
96
97def TrigTrackIsolationToolCfg(flags,tag,trackParticleLocation):
98 from InDetConfig.InDetTrackSelectionToolConfig import InDetTrackSelectionTool_Loose_Cfg
99 acc = ComponentAccumulator()
100
101 tpicTool = CompFactory.xAOD.TrackParticlesInConeTool(TrackParticleLocation = trackParticleLocation)
102 tiTool = CompFactory.xAOD.TrackIsolationTool(name='TrigTrackIsolationTool'+tag,
103 TrackParticleLocation = trackParticleLocation,
104 VertexLocation = '',
105 TracksInConeTool = tpicTool,
106 TrackSelectionTool = acc.popToolsAndMerge(
107 InDetTrackSelectionTool_Loose_Cfg(flags, maxZ0SinTheta = 3, minPt = 1000)))
108 acc.setPrivateTools(tiTool)
109 return acc
110
111
112def TrigElectronIsoBuilderCfg(flags, tag, TrackParticleLocation, electronCollectionContainerName, useBremAssoc):
113 acc = ComponentAccumulator()
114 from xAODPrimitives.xAODIso import xAODIso as isoPar
115 builder = CompFactory.IsolationBuilder(
116 name = 'TrigElectronIsolationBuilder'+tag,
117 ElectronCollectionContainerName = electronCollectionContainerName,
118 CaloCellIsolationTool = None,
119 CaloTopoIsolationTool = None,
120 PFlowIsolationTool = None,
121 useBremAssoc = useBremAssoc,
122 TrackIsolationTool = acc.popToolsAndMerge(TrigTrackIsolationToolCfg(flags,tag,TrackParticleLocation)),
123 ElIsoTypes = [[isoPar.ptcone30,isoPar.ptcone20]],
124 ElCorTypes = [[isoPar.coreTrackPtr]],
125 ElCorTypesExtra = [[]],
126 IsTrigger = True)
127 acc.addEventAlgo(builder)
128 return acc
129
130def PrecisionElectronTopoMonitorCfg(flags, tag, electronKey, isoVarKeys):
131 acc = ComponentAccumulator()
132 name = 'PrecisionElectronTopoMonitoring'+tag
133 from TrigEgammaMonitoring.egammaMonitorPrecisionConfig import egammaMonitorPrecisionCfg
134 monTool = egammaMonitorPrecisionCfg(flags, name)
135 PrecisionElectronTopoMonitor = CompFactory.egammaMonitorElectronAlgorithm(
136 name = name,
137 ElectronKey = electronKey,
138 IsoVarKeys = isoVarKeys,
139 MonTool = monTool)
140 acc.addEventAlgo(PrecisionElectronTopoMonitor)
141 return acc
142
143def PrecisionElectronSuperClusterMonitorCfg(flags, tag, inputEgammaRecContainerName):
144 acc = ComponentAccumulator()
145 name = 'PrecisionElectronSuperClusterMonitoring'+tag
146 from TrigEgammaMonitoring.egammaMonitorPrecisionConfig import egammaMonitorSuperClusterCfg
147 monTool = egammaMonitorSuperClusterCfg(flags, name)
148 PrecisionElectronSuperClusterMonitor = CompFactory.egammaMonitorSuperClusterAlgorithm(
149 name = name,
150 InputEgammaRecContainerName = inputEgammaRecContainerName,
151 MonTool = monTool)
152 acc.addEventAlgo(PrecisionElectronSuperClusterMonitor)
153 return acc
154
PrecisionElectronTopoMonitorCfg(flags, tag, electronKey, isoVarKeys)
TrigTopoEgammaElectronCfg(flags, tag, variant, cellsName, InputElectronRecCollectionName, InputPhotonRecCollectionName, ElectronOutputName, PhotonOutputName, OutputClusterContainerName)
TrigElectronSuperClusterBuilderCfg(flags, tag, InputEgammaRecContainerName, SuperElectronRecCollectionName, trackparticles)
TrigTrackIsolationToolCfg(flags, tag, trackParticleLocation)
TrigEgammaRecElectronCfg(flags, tag, trackparticles, calocluster, egammaRecContainer)
PrecisionElectronSuperClusterMonitorCfg(flags, tag, inputEgammaRecContainerName)
TrigElectronIsoBuilderCfg(flags, tag, TrackParticleLocation, electronCollectionContainerName, useBremAssoc)
TrigEMClusterToolCfg(flags, variant, OutputClusterContainerName)