1///////////////////////// -*- C++ -*- /////////////////////////////
4 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
11 // Hides these from other code that might include METHelpers.h
13 static const SG::AuxElement::ConstAccessor< std::vector< ElementLink< xAOD::IParticleContainer> > > constitObjLinks("ConstitObjectLinks");
14 static const SG::AuxElement::ConstAccessor< std::vector< float > > constitObjWeights("ConstitObjectWeights");
18 std::vector<const T*> getMETElements(const xAOD::MissingET& met) {
19 using namespace msgMET;
21 const auto& uniqueLinks = accessors::constitObjLinks(met);
22 std::vector<const T*> objs_out{};
23 objs_out.reserve(uniqueLinks.size());
25 for (const auto& link: uniqueLinks){
27 const T* obj = dynamic_cast<const T*>(*link);
29 ANA_MSG_WARNING("Mismatched element type retrieved from " << met.name());
30 objs_out.push_back(nullptr);
32 objs_out.push_back(obj);
35 ANA_MSG_WARNING("Invalid ElementLink from MET term " << met.name());
36 objs_out.push_back(nullptr);
44 std::vector<std::pair<const T*,float> > getMETElementsWeights(const xAOD::MissingET& met) {
45 using namespace msgMET;
47 const auto& uniqueLinks = accessors::constitObjLinks(met);
48 const auto& uniqueWeights = accessors::constitObjWeights(met);
49 std::vector<std::pair<const T*,float> > objs_weights_out{};
50 objs_weights_out.reserve(uniqueLinks.size());
52 for (size_t i=0; i<uniqueLinks.size(); ++i) {
53 auto& link = uniqueLinks[i];
54 float weight = uniqueWeights[i];
56 const T* obj = dynamic_cast<const T*>(*link);
58 ANA_MSG_WARNING("Mismatched element type retrieved from " << met.name());
59 objs_weights_out.push_back(std::make_pair(nullptr,0));
61 objs_weights_out.push_back(std::make_pair(obj,weight));
64 ANA_MSG_WARNING("Invalid ElementLink from MET term " << met.name());
65 objs_weights_out.push_back(std::make_pair(nullptr,0));
69 return objs_weights_out;