16#ifndef O2_CONSTMCTRUTHCONTAINER_H
17#define O2_CONSTMCTRUTHCONTAINER_H
20#ifndef GPUCA_STANDALONE
38template <
typename TruthElement>
43 using std::vector<
char>::vector;
51 return getHeaderStart()[dataindex];
54 gsl::span<const TruthElement>
getLabels(uint32_t dataindex)
const
57 return gsl::span<const TruthElement>();
60 const auto labelsptr = getLabelStart();
61 return gsl::span<const TruthElement>(&labelsptr[
start], getSize(dataindex));
65 size_t getIndexedSize()
const {
return size() >=
sizeof(FlatHeader) ? getHeader().nofHeaderElements : 0; }
68 size_t getNElements()
const {
return size() >=
sizeof(FlatHeader) ? getHeader().nofTruthElements : 0; }
73 size_t getSize(uint32_t dataindex)
const
85 TruthElement
const* getLabelStart()
const
87 auto*
source = &(*this)[0];
88 auto flatheader = getHeader();
89 source +=
sizeof(FlatHeader);
90 const size_t headerSize = flatheader.sizeofHeaderElement * flatheader.nofHeaderElements;
92 return (TruthElement
const*)
source;
95 FlatHeader
const& getHeader()
const
97 const auto*
source = &(*this)[0];
98 const auto& flatheader = *
reinterpret_cast<FlatHeader const*
>(
source);
102 MCTruthHeaderElement
const* getHeaderStart()
const
104 auto*
source = &(*this)[0];
105 source +=
sizeof(FlatHeader);
106 return (MCTruthHeaderElement
const*)
source;
116#ifndef GPUCA_STANDALONE
120struct is_specialization<
o2::dataformats::ConstMCTruthContainer<T>, std::vector> : std::true_type {
131template <
typename TruthElement>
149 return getHeaderStart()[dataindex];
152 gsl::span<const TruthElement>
getLabels(uint32_t dataindex)
const
155 return gsl::span<const TruthElement>();
158 const auto labelsptr = getLabelStart();
159 return gsl::span<const TruthElement>(&labelsptr[
start], getSize(dataindex));
163 size_t getIndexedSize()
const {
return (
size_t)mStorage.size() >=
sizeof(FlatHeader) ? getHeader().nofHeaderElements : 0; }
166 size_t getNElements()
const {
return (
size_t)mStorage.size() >=
sizeof(FlatHeader) ? getHeader().nofTruthElements : 0; }
169 const gsl::span<const char>&
getBuffer()
const {
return mStorage; }
172 gsl::span<const char> mStorage;
176 size_t getSize(uint32_t dataindex)
const
188 TruthElement
const* getLabelStart()
const
190 auto*
source = &(mStorage)[0];
191 auto flatheader = getHeader();
192 source +=
sizeof(FlatHeader);
193 const size_t headerSize = flatheader.sizeofHeaderElement * flatheader.nofHeaderElements;
195 return (TruthElement
const*)
source;
198 FlatHeader
const& getHeader()
const
200 const auto*
source = &(mStorage)[0];
201 const auto& flatheader = *
reinterpret_cast<FlatHeader const*
>(
source);
205 MCTruthHeaderElement
const* getHeaderStart()
const
207 auto*
source = &(mStorage)[0];
208 source +=
sizeof(FlatHeader);
209 return (MCTruthHeaderElement
const*)
source;
Definition of a container to keep Monte Carlo truth external to simulation objects.
GLsizei GLsizei GLchar * source
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
Defining PrimaryVertex explicitly as messageable.
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::unique_ptr< TTree > tree((TTree *) flIn.Get(std::string(o2::base::NameConf::CTFTREENAME).c_str()))