ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Event
xAOD
xAODTrackingAthenaPool
src
xAODTrackStateAuxContainerCnv.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// Local include(s):
6
#include "
xAODTrackStateAuxContainerCnv.h
"
7
8
// EDM include(s):
9
#include "
xAODTracking/TrackStateContainer.h
"
10
#include "
xAODTracking/TrackState.h
"
11
#include "
xAODMeasurementBase/UncalibratedMeasurementContainer.h
"
12
13
// Other includes
14
#include "AthLinks/ElementLink.h"
15
16
xAODTrackStateAuxContainerCnv::xAODTrackStateAuxContainerCnv
( ISvcLocator* svcLoc )
17
:
xAODTrackStateAuxContainerCnvBase
( svcLoc )
18
{}
19
20
StatusCode
xAODTrackStateAuxContainerCnv::initialize
()
21
{
22
ATH_MSG_DEBUG
(
"Initializing xAODTrackStateAuxContainerCnv ..."
);
23
return
xAODTrackStateAuxContainerCnvBase::initialize
();
24
}
25
26
namespace
{
27
28
template
<
typename
T>
29
using
const_span = std::span<T const>;
30
31
template
<
typename
T,
typename
T_AuxContainer>
32
const_span<T> getElementVector(
const
T_AuxContainer &aux_container,
const
SG::ConstAccessor<T>
&accessor) {
33
const
T *data =
static_cast<
const
T *
>
(aux_container.getData (accessor.auxid()));
34
const_span<T> ret( data, aux_container.size() );
35
return
ret;
36
}
37
template
<
typename
T,
typename
T_AuxContainer>
38
std::span<T> createDecoration(T_AuxContainer &aux_container,
const
SG::Decorator<T>
&decor) {
39
std::size_t
sz
=aux_container.size();
40
T *
data
=
static_cast<
T *
>
(aux_container.getDecoration(decor.auxid(),
sz
,
sz
));
41
return
std::span<T>( data,
sz
);
42
}
43
}
44
45
xAOD::TrackStateAuxContainer
*
xAODTrackStateAuxContainerCnv::createPersistentWithKey
(
xAOD::TrackStateAuxContainer
* trans,
46
const
std::string& key )
47
{
48
// Load the necessary ROOT class(es):
49
static
char
const
*
const
NAME =
50
"std::vector<ElementLink<xAOD::UncalibratedMeasurementContainer> >"
;
51
static
TClass
const
*
const
cls = TClass::GetClass( NAME );
52
if
( ! cls ) {
53
ATH_MSG_ERROR
(
"Couldn't load dictionary for type: "
<< NAME );
54
}
55
56
// This makes a copy of the container, with any thinning applied.
57
std::unique_ptr< xAOD::TrackStateAuxContainer > result
58
(
xAODTrackStateAuxContainerCnvBase::createPersistentWithKey
(trans, key) );
59
60
// see if we can get the variable from trans
61
static
const
SG::ConstAccessor<const xAOD::UncalibratedMeasurement*>
uncalibMeasurement_acc(
"uncalibratedMeasurement"
);
62
if
(trans->
getAuxIDs
().test(uncalibMeasurement_acc.
auxid
())){
63
64
const_span<const xAOD::UncalibratedMeasurement*>
65
uncalibratedMeasurements = getElementVector(*trans, uncalibMeasurement_acc);
66
67
static
const
SG::Decorator< ElementLink<xAOD::UncalibratedMeasurementContainer>
> link_decor(
"uncalibratedMeasurementLink"
);
68
std::span<
decltype
(link_decor)::element_type> links = createDecoration(*result, link_decor);
69
// @TODD thinning is not supported for Acts tracks but this would break if thinning was somehow implemented
70
assert( links.size() == uncalibratedMeasurements.size() );
71
// Convert the bare pointer(s) to Element Link(s)
72
for
(
unsigned
int
index
=0;
index
< uncalibratedMeasurements.size(); ++
index
) {
73
const
xAOD::UncalibratedMeasurement
*measurement = uncalibratedMeasurements[
index
];
74
if
(measurement) {
75
links[
index
]
76
=
ElementLink< xAOD::UncalibratedMeasurementContainer >
(*
dynamic_cast<
const
xAOD::UncalibratedMeasurementContainer
*
>
(measurement->container()),
77
measurement->index());
78
}
79
}
80
}
81
else
{
82
ATH_MSG_WARNING
(
"No uncalibratedMeasurement aux data."
);
83
}
84
85
return
result.release();
86
}
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
sz
static Double_t sz
Definition
LArPhysWaveHECTool.cxx:37
TrackStateContainer.h
TrackState.h
UncalibratedMeasurementContainer.h
ElementLink< xAOD::UncalibratedMeasurementContainer >
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition
ConstAccessor.h:55
SG::ConstAccessor::auxid
SG::auxid_t auxid() const
Return the aux id for this variable.
T_AthenaPoolAuxContainerCnv< xAOD::TrackStateAuxContainer >::createPersistentWithKey
virtual xAOD::TrackStateAuxContainer * createPersistentWithKey(xAOD::TrackStateAuxContainer *trans, const std::string &key) override
T_AthenaPoolAuxContainerCnv< xAOD::TrackStateAuxContainer >::initialize
virtual StatusCode initialize()
xAODTrackStateAuxContainerCnv::initialize
virtual StatusCode initialize() override
Gaudi Service Interface method implementations:
Definition
xAODTrackStateAuxContainerCnv.cxx:20
xAODTrackStateAuxContainerCnv::xAODTrackStateAuxContainerCnv
xAODTrackStateAuxContainerCnv(ISvcLocator *svcLoc)
Definition
xAODTrackStateAuxContainerCnv.cxx:16
xAODTrackStateAuxContainerCnv::createPersistentWithKey
virtual xAOD::TrackStateAuxContainer * createPersistentWithKey(xAOD::TrackStateAuxContainer *trans, const std::string &key) override
Convert a transient object to persistent form.
Definition
xAODTrackStateAuxContainerCnv.cxx:45
xAOD::AuxContainerBase::getAuxIDs
virtual const auxid_set_t & getAuxIDs() const override
Get the types(names) of variables handled by this container.
Definition
AuxContainerBase.cxx:277
CaloCondBlobAlgs_fillNoiseFromASCII.data
data
Definition
CaloCondBlobAlgs_fillNoiseFromASCII.py:94
SG::Decorator
SG::Decorator< T, ALLOC > Decorator
Helper class to provide type-safe access to aux data, specialized for JaggedVecElt.
Definition
AuxElement.h:576
index
Definition
index.py:1
xAOD::TrackStateAuxContainer
TrackStateAuxContainer_v1 TrackStateAuxContainer
Definition
TrackStateAuxContainer.h:11
xAOD::UncalibratedMeasurement
UncalibratedMeasurement_v1 UncalibratedMeasurement
Define the version of the uncalibrated measurement class.
Definition
UncalibratedMeasurementFwd.h:13
xAOD::UncalibratedMeasurementContainer
UncalibratedMeasurementContainer_v1 UncalibratedMeasurementContainer
Define the version of the uncalibrated measurement container.
Definition
UncalibratedMeasurementContainer.h:14
xAODTrackStateAuxContainerCnv.h
xAODTrackStateAuxContainerCnvBase
T_AthenaPoolAuxContainerCnv< xAOD::TrackStateAuxContainer > xAODTrackStateAuxContainerCnvBase
Definition
xAODTrackStateAuxContainerCnv.h:14
Generated on
for ATLAS Offline Software by
1.17.0