ATLAS Offline Software
Loading...
Searching...
No Matches
ftag::MetadataAlg Class Referencefinal

#include <MetadataAlg.h>

Inheritance diagram for ftag::MetadataAlg:
Collaboration diagram for ftag::MetadataAlg:

Public Member Functions

 MetadataAlg (const std::string &name, ISvcLocator *pSvcLocator)
StatusCode initialize () override
StatusCode execute () override
StatusCode finalize () override
void handle (const Incident &) override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

bool isGoodBook (const xAOD::CutBookkeeper &cbk) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

ServiceHandle< StoreGateSvcm_inputMetaStore
ToolHandle< PMGTools::IPMGTruthWeightToolm_truthWeightTool
ServiceHandle< IH5GroupSvcm_output_svc
Gaudi::Property< std::string > m_json_output
ServiceHandle< IH5GroupSvcm_hist_output_svc
Gaudi::Property< bool > m_enable_systematics
Gaudi::Property< std::set< std::string > > m_allowed_streams
std::unordered_map< size_t, OriginalAodCountsm_weights
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 23 of file MetadataAlg.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ MetadataAlg()

ftag::MetadataAlg::MetadataAlg ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 64 of file MetadataAlg.cxx.

66 :
67 AthAlgorithm(name, pSvcLocator),
68 m_inputMetaStore("StoreGateSvc/InputMetaDataStore", name)
69 {
70 }
AthAlgorithm()
Default constructor:
ServiceHandle< StoreGateSvc > m_inputMetaStore
Definition MetadataAlg.h:38

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode ftag::MetadataAlg::execute ( )
override

Definition at line 99 of file MetadataAlg.cxx.

100 {
101 return StatusCode::SUCCESS;
102 }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ finalize()

StatusCode ftag::MetadataAlg::finalize ( )
override

Definition at line 181 of file MetadataAlg.cxx.

182 {
183
184 if (m_weights.empty()) {
185 ATH_MSG_WARNING("No CutBookkeeper weights collected; skipping output.");
186 return StatusCode::SUCCESS;
187 }
188
189 std::vector<CP::SystematicSet> systematics;
190 systematics.emplace_back(); // nominal always first
192 for (const CP::SystematicVariation& v :
193 m_truthWeightTool->affectingSystematics()) {
195 "using systematic " << CP::SystematicSet({v}).name());
196 systematics.emplace_back(CP::SystematicSet({v}));
197 }
198 }
199
200 std::optional<H5::Group> h5_cbk;
201 if (!m_output_svc.empty()) {
202 h5_cbk = H5::Group(m_output_svc->group()->createGroup(top_group));
203 }
204 std::optional<boost::json::object> json_cbk;
205 if (!m_json_output.empty()) {
206 json_cbk = boost::json::object{};
207 }
208
209 for (const CP::SystematicSet &sys : systematics)
210 {
211 const std::string sysname = sys.name().empty() ? "nominal": sys.name();
212 const OriginalAodCounts &weights = m_weights.at(
213 m_truthWeightTool->getSysWeightIndex(sys));
214
215 if (h5_cbk) {
216 H5::Group sysgroup(h5_cbk->createGroup(sysname));
217 addCounts(sysgroup, weights);
218 }
219 if (json_cbk) {
220 boost::json::object& cbk_root = *json_cbk;
221 addCounts(cbk_root[sysname].emplace_object(), weights);
222 }
223 }
224 if (json_cbk) {
225 std::ofstream out(m_json_output.value());
226 boost::json::object jroot {
227 {top_group, *json_cbk}
228 };
229 out << jroot << std::endl;
230 }
231
232 if (!m_hist_output_svc.empty()) {
233 namespace bh = boost::histogram;
234
235 // Build index->name map and index list in one pass.
236 using sys_map_t = std::map<size_t, std::string>;
237 sys_map_t sys_map;
238 std::vector<size_t> indices;
239 for (const CP::SystematicSet& sys : systematics) {
240 size_t idx = m_truthWeightTool->getSysWeightIndex(sys);
241 sys_map[idx] = sys.name().empty() ? "nominal" : sys.name();
242 indices.push_back(idx);
243 }
244
245 // Categorical axis: bin value = index, metadata = map for labels.
246 using map_meta_t = std::pair<std::string, sys_map_t>;
247 using sys_ax_t = bh::axis::category<size_t, map_meta_t>;
248 const sys_ax_t ax(indices, map_meta_t{"systematic", sys_map});
249
250 // Weighted histogram: bin=(sumOfWeights, sumOfWeightsSquared).
251 auto h_w = bh::make_weighted_histogram(ax);
252
253 // Integer histogram: nEventsProcessed.
254 using int64_storage = bh::dense_storage<int64_t>;
255 auto h_n = bh::make_histogram_with(int64_storage{}, ax);
256
257 // Fill by systematic index.
258 for (size_t idx : indices) {
259 const auto& w = m_weights.at(idx);
260 const auto bin = ax.index(idx);
261 h_w.at(bin) =
262 bh::accumulators::weighted_sum<double>(
263 w.sumOfWeights, w.sumOfWeightsSquared);
264 h_n.at(bin) =
265 static_cast<int64_t>(w.nEventsProcessed);
266 }
267
268 H5::Group hist_grp(
269 m_hist_output_svc->group()
270 ->createGroup("cutBookkeeperHists"));
272 hist_grp, h_w, "sumOfWeights");
274 hist_grp, h_n, "nEventsProcessed");
275 }
276
277 return StatusCode::SUCCESS;
278 }
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
static const std::vector< std::string > systematics
ToolHandle< PMGTools::IPMGTruthWeightTool > m_truthWeightTool
Definition MetadataAlg.h:40
Gaudi::Property< bool > m_enable_systematics
Definition MetadataAlg.h:51
std::unordered_map< size_t, OriginalAodCounts > m_weights
Definition MetadataAlg.h:60
ServiceHandle< IH5GroupSvc > m_output_svc
Definition MetadataAlg.h:43
Gaudi::Property< std::string > m_json_output
Definition MetadataAlg.h:45
ServiceHandle< IH5GroupSvc > m_hist_output_svc
Definition MetadataAlg.h:48
void write_hist_to_group(H5::Group &group, const T &hist, const std::string &name)
std::pair< long int, long int > indices

◆ handle()

void ftag::MetadataAlg::handle ( const Incident & inc)
override

Definition at line 104 of file MetadataAlg.cxx.

105 {
106
107 // skip all incidents beyond the start of input files
108 if (inc.type() != IncidentType::BeginInputFile) return;
109
110 ATH_MSG_DEBUG("Updating CutBookkeeper information");
111
112 // Retrieve complete CutBookkeeperContainer
113 const xAOD::CutBookkeeperContainer *completeCBC{};
114 auto rc = m_inputMetaStore->retrieve(completeCBC, "CutBookkeepers");
115 if (!rc.isSuccess()) throw std::runtime_error(
116 "could not retrieve CutBookkeepers");
117
118 // Find the max cycle
119 int maxCycle{-1};
120 const xAOD::CutBookkeeper *allEvents{};
121 for (const xAOD::CutBookkeeper *cbk : *completeCBC)
122 {
124 "Complete cbk name: " << cbk->name() <<
125 " - stream: " << cbk->inputStream()
126 );
127
128 if (cbk->cycle() > maxCycle && isGoodBook(*cbk))
129 {
130 allEvents = cbk;
131 maxCycle = cbk->cycle();
132 }
133 }
134
135 if (allEvents == nullptr)
136 {
137 throw std::runtime_error(
138 "Could not find AllExecutedEvents CutBookkeeper information.");
139 }
140
141 for (const xAOD::CutBookkeeper *cbk : *completeCBC)
142 {
143 if (cbk->cycle() == maxCycle && isGoodBook(*cbk))
144 {
145 static const std::regex re("AllExecutedEvents.*_([0-9]+)");
146 // Get the CBK index
147 size_t index{0};
148 std::smatch match;
149 if (std::regex_match(cbk->name(), match, re))
150 {
151 index = std::stoi(match[1]);
152 }
153 m_weights[index] += getCounts(*cbk);
154 }
155 }
156
157 // now try systematics-aware containers
158 for (size_t index{1}; index < m_truthWeightTool->getWeightNames().size(); ++index)
159 {
160 std::string cbkName = "CutBookkeepers_weight_" + std::to_string(index);
161 if (!m_inputMetaStore->contains<xAOD::CutBookkeeperContainer>(cbkName))
162 {
163 ATH_MSG_VERBOSE("No container named " << cbkName << "available");
164 continue;
165 }
166
167 if (!m_inputMetaStore->retrieve(completeCBC, cbkName).isSuccess()) {
168 throw std::runtime_error("could not retrieve " + cbkName);
169 }
170 for (const xAOD::CutBookkeeper *cbk : *completeCBC)
171 {
172 if (cbk->cycle() == maxCycle && isGoodBook(*cbk))
173 {
174 m_weights[index] += getCounts(*cbk);
175 }
176 }
177 }
178 }
const boost::regex re(r_e)
#define ATH_MSG_VERBOSE(x)
static Double_t rc
size_t size() const
Number of registered mappings.
bool isGoodBook(const xAOD::CutBookkeeper &cbk) const
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Definition hcg.cxx:359
str index
Definition DeMoScan.py:362
CutBookkeeper_v1 CutBookkeeper
Define the latest version of the CutBookkeeper class.
CutBookkeeperContainer_v1 CutBookkeeperContainer
Define the latest version of the CutBookkeeperContainer class.

◆ initialize()

StatusCode ftag::MetadataAlg::initialize ( )
override

Definition at line 78 of file MetadataAlg.cxx.

79 {
80 // register with incident service
81 ServiceHandle<IIncidentSvc> incSvc( "IncidentSvc", name() );
82 CHECK( incSvc.retrieve() );
83 // remove first to make sure it's not called twice
84 incSvc->removeListener( this, IncidentType::BeginInputFile );
85 incSvc->addListener( this, IncidentType::BeginInputFile, 0, true );
86
87 CHECK(m_truthWeightTool.retrieve());
88
89 if (!m_output_svc.empty()) {
90 ATH_CHECK(m_output_svc.retrieve());
91 }
92 if (!m_hist_output_svc.empty()) {
93 ATH_CHECK(m_hist_output_svc.retrieve());
94 }
95
96 return StatusCode::SUCCESS;
97 }
#define ATH_CHECK
Evaluate an expression and check for errors.
#define CHECK(...)
Evaluate an expression and check for errors.

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isGoodBook()

bool ftag::MetadataAlg::isGoodBook ( const xAOD::CutBookkeeper & cbk) const
private

Definition at line 72 of file MetadataAlg.cxx.

73 {
74 return cbk.name() == "AllExecutedEvents"
75 && m_allowed_streams.value().contains(cbk.inputStream());
76 }
Gaudi::Property< std::set< std::string > > m_allowed_streams
Definition MetadataAlg.h:54
const std::string & inputStream() const
Get the name of the input-file stream object that was seen by this CutBookkeeper.
const std::string & name() const
Get the name of this CutBookkeeper.

◆ msg()

MsgStream & AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
#define ATH_MSG_ERROR(x)
static Double_t sc
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_allowed_streams

Gaudi::Property<std::set<std::string> > ftag::MetadataAlg::m_allowed_streams
private
Initial value:
{
this, "allowedStreams",
{"StreamAOD", "StreamEVGEN", "StreamEVNT",
"StreamDAOD_PHYS", "StreamDAOD_PHYSLITE"},
"CutBookkeeper inputStream values accepted as AllExecutedEvents"
}

Definition at line 54 of file MetadataAlg.h.

54 {
55 this, "allowedStreams",
56 {"StreamAOD", "StreamEVGEN", "StreamEVNT",
57 "StreamDAOD_PHYS", "StreamDAOD_PHYSLITE"},
58 "CutBookkeeper inputStream values accepted as AllExecutedEvents"
59 };

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_enable_systematics

Gaudi::Property<bool> ftag::MetadataAlg::m_enable_systematics
private
Initial value:
{
this, "enableSystematics", true,
"include systematic variations (false = nominal only)"}

Definition at line 51 of file MetadataAlg.h.

51 {
52 this, "enableSystematics", true,
53 "include systematic variations (false = nominal only)"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_hist_output_svc

ServiceHandle<IH5GroupSvc> ftag::MetadataAlg::m_hist_output_svc
private
Initial value:
{
this, "h5OutputHists", "",
"output service for histogram output"}

Definition at line 48 of file MetadataAlg.h.

48 {
49 this, "h5OutputHists", "",
50 "output service for histogram output"};

◆ m_inputMetaStore

ServiceHandle< StoreGateSvc > ftag::MetadataAlg::m_inputMetaStore
private

Definition at line 38 of file MetadataAlg.h.

◆ m_json_output

Gaudi::Property<std::string> ftag::MetadataAlg::m_json_output
private
Initial value:
{
this, "jsonOutput", "", "json output file"
}

Definition at line 45 of file MetadataAlg.h.

45 {
46 this, "jsonOutput", "", "json output file"
47 };

◆ m_output_svc

ServiceHandle<IH5GroupSvc> ftag::MetadataAlg::m_output_svc
private
Initial value:
{
this, "h5Output", "", "output file service"}

Definition at line 43 of file MetadataAlg.h.

43 {
44 this, "h5Output", "", "output file service"};

◆ m_truthWeightTool

ToolHandle<PMGTools::IPMGTruthWeightTool> ftag::MetadataAlg::m_truthWeightTool
private
Initial value:
{
this, "truthWeightTool", "PMGTools::PMGTruthWeightTool",
"the truth weight tool"}

Definition at line 40 of file MetadataAlg.h.

40 {
41 this, "truthWeightTool", "PMGTools::PMGTruthWeightTool",
42 "the truth weight tool"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_weights

std::unordered_map<size_t, OriginalAodCounts> ftag::MetadataAlg::m_weights
private

Definition at line 60 of file MetadataAlg.h.


The documentation for this class was generated from the following files: