 |
ATLAS Offline Software
|
Go to the documentation of this file.
8 #ifndef COLUMNAR_MET_MET_INPUT_H
9 #define COLUMNAR_MET_MET_INPUT_H
31 template<ContainerIdConcept CI = ContainerId::particle,
typename CM=ColumnarModeDefault>
35 :
pt (columnarBase,
"pt"),
36 eta (columnarBase,
"eta"),
37 phi (columnarBase,
"phi"),
71 template<ContainerIdConcept CI = ContainerId::particle,
typename CM = ColumnarModeDefault>
class OriginalObjectHandle;
76 bool m_originalInputs =
false;
77 bool m_isShallowCopy =
false;
85 if (!container.empty())
87 using namespace MetDef;
88 m_originalInputs = !acc_originalObject.isAvailable(*container.getXAODObject().front());
89 m_isShallowCopy =
dynamic_cast<const xAOD::ShallowAuxContainer*
>(container.getXAODObject().front()->container()->getConstStore());
92 tool.msg(
MSG::VERBOSE) <<
"const store = " << container.getXAODObject().front()->container()->getConstStore() <<
endmsg;
98 return m_originalInputs;
102 return m_isShallowCopy;
107 if (m_originalInputs)
112 using namespace MetDef;
113 auto *originalObject = *acc_originalObject(
id.
getXAODObject());
115 throw std::runtime_error (
"originalObjectLink not available for MET input");
122 using namespace MetDef;
123 if (acc_nominalObject.isAvailable(
jet.getXAODObject())) {
124 auto nominal = acc_nominalObject(
jet.getXAODObject());
125 if (nominal && *nominal)
127 return ObjectId<CI,CM> {
static_cast<CI::xAODObjectIdType&
>(**nominal)};
131 message <<
"No nominal calibrated jet available for jet " <<
jet <<
". Cannot simplify overlap removal!";
132 throw std::runtime_error (
message.str());
160 throw std::runtime_error (
"no nominal object available in columnar mode");
168 template<ContainerIdConcept CI,
typename CM=ColumnarModeDefault>
171 template<ContainerIdConcept CI>
180 return object.getXAODObject().type();
185 if (container.empty())
187 return container.getXAODObject().front()->type();
191 template<ContainerIdConcept CI>
202 : typeAcc (columnBase, columnName) {}
206 return typeAcc(
object);
214 if (container.empty())
216 return typeAcc(container[0]);
OriginalObjectHandle(const asg::AsgTool &, ObjectRange< CI, CM >) -> OriginalObjectHandle< CI, CM >
ObjectId< CI, CM > getNominalObject(const ObjectId< CI, CM > &jet) const
ObjectId< CI, CM > getOriginal(const ObjectId< CI, CM > &id) const
xAODContainer & getXAODObject() const noexcept
bool originalInputs() const
Class creating a shallow copy of an existing auxiliary container.
bool isShallowCopy() const
ObjectTypeAccessor(ColumnarTool< CM > &, const std::string &)
a class representing a continuous sequence of objects (a.k.a. a container)
std::map< std::string, HypoJetVector >::const_iterator CI
ObjectId< CI, CM > getNominalObject(const ObjectId< CI, CM > &) const
OriginalObjectHandle(const asg::AsgTool &tool, ObjectRange< CI, CM > container)
OriginalObjectHandle(const asg::AsgTool &, ObjectRange< CI, CM >)
bool originalInputs() const
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
a class representing a single object (electron, muons, etc.)
bool isShallowCopy() const
ObjectId< CI, CM > getOriginal(const ObjectId< CI, CM > &id) const
the raw column accessor template class
ObjectType
Type of objects that have a representation in the xAOD EDM.
decltype(auto) operator()(ObjectId< CI, CM > id) const noexcept
ColumnAccessor< CI, RetypeColumn< xAODType::ObjectType, std::uint16_t >, CM > typeAcc
an accessor that allows to access the xAOD object type of an input object
ObjectTypeAccessor(ColumnarTool< CM > &columnBase, const std::string &columnName)