3 #ifndef EICD_ReconstructedParticleCollection_H
4 #define EICD_ReconstructedParticleCollection_H
12 #include "podio/ICollectionProvider.h"
13 #include "podio/CollectionBase.h"
14 #include "podio/CollectionIDTable.h"
37 return m_index != x.m_index;
59 return m_index != x.m_index;
88 void clear() override final;
98 template<
typename... Args>
102 size_t size() const override final;
105 std::
string getValueTypeName()
const override {
return std::string(
"eic::ReconstructedParticle"); }
122 void setBuffer(
void* address) override final;
123 bool setReferences(const podio::ICollectionProvider* collectionProvider) override final;
127 podio::VectorMembersInfo*
vectorMembers()
override {
return &m_vecmem_info; }
131 std::for_each(m_entries.begin(),m_entries.end(),
137 unsigned getID() const override final {
138 return m_collectionID;
153 return iterator(m_entries.size(), &m_entries);
163 std::vector<ReconstructedParticleData>*
_getBuffer() {
return m_data; }
165 template<
size_t arraysize>
166 const std::array<eic::Index, arraysize> ID()
const;
167 template<
size_t arraysize>
168 const std::array<eic::VectorXYZ, arraysize> p()
const;
169 template<
size_t arraysize>
170 const std::array<eic::VectorXYZ, arraysize> v()
const;
171 template<
size_t arraysize>
172 const std::array<float, arraysize> time()
const;
173 template<
size_t arraysize>
174 const std::array<std::int32_t, arraysize> pid()
const;
175 template<
size_t arraysize>
176 const std::array<std::int16_t, arraysize> status()
const;
177 template<
size_t arraysize>
178 const std::array<std::int16_t, arraysize> charge()
const;
179 template<
size_t arraysize>
180 const std::array<eic::Weight, arraysize> weight()
const;
181 template<
size_t arraysize>
182 const std::array<eic::Direction, arraysize> direction()
const;
183 template<
size_t arraysize>
184 const std::array<float, arraysize> momentum()
const;
185 template<
size_t arraysize>
186 const std::array<float, arraysize> energy()
const;
187 template<
size_t arraysize>
188 const std::array<float, arraysize> mass()
const;
191 bool m_isValid{
false};
192 bool m_isReadFromFile{
false};
193 int m_collectionID{0};
200 podio::CollRefCollection m_refCollections{};
201 podio::VectorMembersInfo m_vecmem_info{};
205 std::ostream&
operator<<(std::ostream& o,
const ReconstructedParticleCollection& v);
207 template<
typename... Args>
209 const int size = m_entries.size();
211 m_entries.push_back(obj);
215 template<
size_t arraysize>
216 const std::array<eic::Index, arraysize> ReconstructedParticleCollection::ID()
const {
217 std::array<eic::Index, arraysize> tmp;
218 const auto valid_size = std::min(arraysize, m_entries.size());
219 for (
unsigned i = 0; i < valid_size; ++i) {
220 tmp[i] = m_entries[i]->data.ID;
225 template<
size_t arraysize>
226 const std::array<eic::VectorXYZ, arraysize> ReconstructedParticleCollection::p()
const {
227 std::array<eic::VectorXYZ, arraysize> tmp;
228 const auto valid_size = std::min(arraysize, m_entries.size());
229 for (
unsigned i = 0; i < valid_size; ++i) {
230 tmp[i] = m_entries[i]->data.p;
235 template<
size_t arraysize>
236 const std::array<eic::VectorXYZ, arraysize> ReconstructedParticleCollection::v()
const {
237 std::array<eic::VectorXYZ, arraysize> tmp;
238 const auto valid_size = std::min(arraysize, m_entries.size());
239 for (
unsigned i = 0; i < valid_size; ++i) {
240 tmp[i] = m_entries[i]->data.v;
245 template<
size_t arraysize>
246 const std::array<float, arraysize> ReconstructedParticleCollection::time()
const {
247 std::array<float, arraysize> tmp;
248 const auto valid_size = std::min(arraysize, m_entries.size());
249 for (
unsigned i = 0; i < valid_size; ++i) {
250 tmp[i] = m_entries[i]->data.time;
255 template<
size_t arraysize>
256 const std::array<std::int32_t, arraysize> ReconstructedParticleCollection::pid()
const {
257 std::array<std::int32_t, arraysize> tmp;
258 const auto valid_size = std::min(arraysize, m_entries.size());
259 for (
unsigned i = 0; i < valid_size; ++i) {
260 tmp[i] = m_entries[i]->data.pid;
265 template<
size_t arraysize>
266 const std::array<std::int16_t, arraysize> ReconstructedParticleCollection::status()
const {
267 std::array<std::int16_t, arraysize> tmp;
268 const auto valid_size = std::min(arraysize, m_entries.size());
269 for (
unsigned i = 0; i < valid_size; ++i) {
270 tmp[i] = m_entries[i]->data.status;
275 template<
size_t arraysize>
276 const std::array<std::int16_t, arraysize> ReconstructedParticleCollection::charge()
const {
277 std::array<std::int16_t, arraysize> tmp;
278 const auto valid_size = std::min(arraysize, m_entries.size());
279 for (
unsigned i = 0; i < valid_size; ++i) {
280 tmp[i] = m_entries[i]->data.charge;
285 template<
size_t arraysize>
286 const std::array<eic::Weight, arraysize> ReconstructedParticleCollection::weight()
const {
287 std::array<eic::Weight, arraysize> tmp;
288 const auto valid_size = std::min(arraysize, m_entries.size());
289 for (
unsigned i = 0; i < valid_size; ++i) {
290 tmp[i] = m_entries[i]->data.weight;
295 template<
size_t arraysize>
296 const std::array<eic::Direction, arraysize> ReconstructedParticleCollection::direction()
const {
297 std::array<eic::Direction, arraysize> tmp;
298 const auto valid_size = std::min(arraysize, m_entries.size());
299 for (
unsigned i = 0; i < valid_size; ++i) {
300 tmp[i] = m_entries[i]->data.direction;
305 template<
size_t arraysize>
306 const std::array<float, arraysize> ReconstructedParticleCollection::momentum()
const {
307 std::array<float, arraysize> tmp;
308 const auto valid_size = std::min(arraysize, m_entries.size());
309 for (
unsigned i = 0; i < valid_size; ++i) {
310 tmp[i] = m_entries[i]->data.momentum;
315 template<
size_t arraysize>
316 const std::array<float, arraysize> ReconstructedParticleCollection::energy()
const {
317 std::array<float, arraysize> tmp;
318 const auto valid_size = std::min(arraysize, m_entries.size());
319 for (
unsigned i = 0; i < valid_size; ++i) {
320 tmp[i] = m_entries[i]->data.energy;
325 template<
size_t arraysize>
326 const std::array<float, arraysize> ReconstructedParticleCollection::mass()
const {
327 std::array<float, arraysize> tmp;
328 const auto valid_size = std::min(arraysize, m_entries.size());
329 for (
unsigned i = 0; i < valid_size; ++i) {
330 tmp[i] = m_entries[i]->data.mass;