EICd
EIC data model
VertexCollection.h
Go to the documentation of this file.
1 // AUTOMATICALLY GENERATED FILE - DO NOT EDIT
2 
3 #ifndef EICD_VertexCollection_H
4 #define EICD_VertexCollection_H
5 
6 // datamodel specific includes
7 #include "eicd/VertexData.h"
8 #include "eicd/Vertex.h"
9 #include "eicd/VertexObj.h"
10 
11 // podio specific includes
12 #include "podio/ICollectionProvider.h"
13 #include "podio/CollectionBase.h"
14 #include "podio/CollectionIDTable.h"
15 
16 #include <string>
17 #include <vector>
18 #include <deque>
19 #include <array>
20 #include <algorithm>
21 #include <ostream>
22 
23 namespace eic {
24 
25 
26 using VertexDataContainer = std::vector<VertexData>;
27 using VertexObjPointerContainer = std::deque<VertexObj*>;
28 
30 public:
31  VertexCollectionIterator(size_t index, const VertexObjPointerContainer* collection) : m_index(index), m_object(nullptr), m_collection(collection) {}
32 
35 
36  bool operator!=(const VertexCollectionIterator& x) const {
37  return m_index != x.m_index; // TODO: may not be complete
38  }
39 
40  Vertex operator*();
41  Vertex* operator->();
43 
44 private:
45  size_t m_index;
46  Vertex m_object;
47  const VertexObjPointerContainer* m_collection;
48 };
49 
50 
52 public:
53  VertexConstCollectionIterator(size_t index, const VertexObjPointerContainer* collection) : m_index(index), m_object(nullptr), m_collection(collection) {}
54 
57 
59  return m_index != x.m_index; // TODO: may not be complete
60  }
61 
65 
66 private:
67  size_t m_index;
68  ConstVertex m_object;
69  const VertexObjPointerContainer* m_collection;
70 };
71 
72 
73 /**
74 A Collection is identified by an ID.
75 */
76 class VertexCollection : public podio::CollectionBase {
77 
78 public:
81 
85 // VertexCollection(VertexVector* data, int collectionID);
87 
88  void clear() override final;
89 
90  /// operator to allow pointer like calling of members a la LCIO
91  VertexCollection* operator->() { return (VertexCollection*) this; }
92 
93  /// Append a new object to the collection, and return this object.
94  Vertex create();
95 
96  /// Append a new object to the collection, and return this object.
97  /// Initialized with the parameters given
98  template<typename... Args>
99  Vertex create(Args&&... args);
100 
101  /// number of elements in the collection
102  size_t size() const override final;
103 
104  /// fully qualified type name of elements - with namespace
105  std::string getValueTypeName() const override { return std::string("eic::Vertex"); }
106 
107  /// Returns the const object of given index
108  ConstVertex operator[](unsigned int index) const;
109  /// Returns the object of a given index
110  Vertex operator[](unsigned int index);
111  /// Returns the const object of given index
112  ConstVertex at(unsigned int index) const;
113  /// Returns the object of given index
114  Vertex at(unsigned int index);
115 
116 
117  /// Append object to the collection
118  void push_back(ConstVertex object);
119 
120  void prepareForWrite() override final;
121  void prepareAfterRead() override final;
122  void setBuffer(void* address) override final;
123  bool setReferences(const podio::ICollectionProvider* collectionProvider) override final;
124 
125  podio::CollRefCollection* referenceCollections() override final { return &m_refCollections; }
126 
127  podio::VectorMembersInfo* vectorMembers() override { return &m_vecmem_info; }
128 
129  void setID(unsigned ID) override final {
130  m_collectionID = ID;
131  std::for_each(m_entries.begin(),m_entries.end(),
132  [ID] (VertexObj* obj) { obj->id = {obj->id.index, static_cast<int>(ID)}; }
133  );
134  m_isValid = true;
135  };
136 
137  unsigned getID() const override final {
138  return m_collectionID;
139  }
140 
141  bool isValid() const override final {
142  return m_isValid;
143  }
144 
145  // support for the iterator protocol
147  return iterator(0, &m_entries);
148  }
150  return const_iterator(0, &m_entries);
151  }
153  return iterator(m_entries.size(), &m_entries);
154  }
155  const_iterator end() const {
156  return const_iterator(m_entries.size(), &m_entries);
157  }
158 
159  /// returns the address of the pointer to the data buffer
160  void* getBufferAddress() override final { return (void*)&m_data; }
161 
162  /// Returns the pointer to the data buffer
163  std::vector<VertexData>* _getBuffer() { return m_data; }
164 
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> position() const;
169  template<size_t arraysize>
170  const std::array<float, arraysize> time() const;
171  template<size_t arraysize>
172  const std::array<float, arraysize> chi2() const;
173  template<size_t arraysize>
174  const std::array<float, arraysize> probability() const;
175  template<size_t arraysize>
176  const std::array<bool, arraysize> primary() const;
177 
178 private:
179  bool m_isValid{false};
180  bool m_isReadFromFile{false};
181  int m_collectionID{0};
182  VertexObjPointerContainer m_entries;
183 
184  // members to handle 1-to-N-relations
185 
186  // members to handle vector members
187  // members to handle streaming
188  podio::CollRefCollection m_refCollections{};
189  podio::VectorMembersInfo m_vecmem_info{};
190  VertexDataContainer* m_data;
191 };
192 
193 std::ostream& operator<<(std::ostream& o, const VertexCollection& v);
194 
195 template<typename... Args>
196 Vertex VertexCollection::create(Args&&... args) {
197  const int size = m_entries.size();
198  auto obj = new VertexObj({size, m_collectionID}, {args...});
199  m_entries.push_back(obj);
200  return Vertex(obj);
201 }
202 
203 template<size_t arraysize>
204 const std::array<eic::Index, arraysize> VertexCollection::ID() const {
205  std::array<eic::Index, arraysize> tmp;
206  const auto valid_size = std::min(arraysize, m_entries.size());
207  for (unsigned i = 0; i < valid_size; ++i) {
208  tmp[i] = m_entries[i]->data.ID;
209  }
210  return tmp;
211 }
212 
213 template<size_t arraysize>
214 const std::array<eic::VectorXYZ, arraysize> VertexCollection::position() const {
215  std::array<eic::VectorXYZ, arraysize> tmp;
216  const auto valid_size = std::min(arraysize, m_entries.size());
217  for (unsigned i = 0; i < valid_size; ++i) {
218  tmp[i] = m_entries[i]->data.position;
219  }
220  return tmp;
221 }
222 
223 template<size_t arraysize>
224 const std::array<float, arraysize> VertexCollection::time() const {
225  std::array<float, arraysize> tmp;
226  const auto valid_size = std::min(arraysize, m_entries.size());
227  for (unsigned i = 0; i < valid_size; ++i) {
228  tmp[i] = m_entries[i]->data.time;
229  }
230  return tmp;
231 }
232 
233 template<size_t arraysize>
234 const std::array<float, arraysize> VertexCollection::chi2() const {
235  std::array<float, arraysize> tmp;
236  const auto valid_size = std::min(arraysize, m_entries.size());
237  for (unsigned i = 0; i < valid_size; ++i) {
238  tmp[i] = m_entries[i]->data.chi2;
239  }
240  return tmp;
241 }
242 
243 template<size_t arraysize>
244 const std::array<float, arraysize> VertexCollection::probability() const {
245  std::array<float, arraysize> tmp;
246  const auto valid_size = std::min(arraysize, m_entries.size());
247  for (unsigned i = 0; i < valid_size; ++i) {
248  tmp[i] = m_entries[i]->data.probability;
249  }
250  return tmp;
251 }
252 
253 template<size_t arraysize>
254 const std::array<bool, arraysize> VertexCollection::primary() const {
255  std::array<bool, arraysize> tmp;
256  const auto valid_size = std::min(arraysize, m_entries.size());
257  for (unsigned i = 0; i < valid_size; ++i) {
258  tmp[i] = m_entries[i]->data.primary;
259  }
260  return tmp;
261 }
262 
263 
264 } // namespace eic
265 
266 
267 #endif
eic::operator<<
std::ostream & operator<<(std::ostream &o, const ConstBasicParticle &value)
Definition: BasicParticle.cc:102
eic::VertexDataContainer
std::vector< VertexData > VertexDataContainer
Definition: VertexCollection.h:26
eic::VertexCollection::vectorMembers
podio::VectorMembersInfo * vectorMembers() override
Definition: VertexCollection.h:127
eic::VertexCollectionIterator::operator!=
bool operator!=(const VertexCollectionIterator &x) const
Definition: VertexCollection.h:36
eic::VertexObjPointerContainer
std::deque< VertexObj * > VertexObjPointerContainer
Definition: VertexCollection.h:27
eic::VertexCollection::getValueTypeName
std::string getValueTypeName() const override
fully qualified type name of elements - with namespace
Definition: VertexCollection.h:105
VertexObj.h
eic::VertexCollection::push_back
void push_back(ConstVertex object)
Append object to the collection.
Definition: VertexCollection.cc:89
eic::VertexCollection::end
iterator end()
Definition: VertexCollection.h:152
eic::VertexCollection::clear
void clear() override final
Definition: VertexCollection.cc:50
eic::VertexConstCollectionIterator::operator*
ConstVertex operator*()
Definition: VertexCollection.cc:123
eic::VertexCollection::isValid
bool isValid() const override final
Definition: VertexCollection.h:141
eic::VertexConstCollectionIterator
Definition: VertexCollection.h:51
eic
Definition: BasicParticle.cc:13
eic::VertexCollection::VertexCollection
VertexCollection()
Definition: VertexCollection.cc:13
eic::VertexConstCollectionIterator::operator!=
bool operator!=(const VertexConstCollectionIterator &x) const
Definition: VertexCollection.h:58
VertexData.h
eic::VertexCollection::_getBuffer
std::vector< VertexData > * _getBuffer()
Returns the pointer to the data buffer.
Definition: VertexCollection.h:163
eic::ConstVertex
Definition: VertexConst.h:21
eic::VertexCollection::prepareForWrite
void prepareForWrite() override final
Definition: VertexCollection.cc:56
eic::VertexConstCollectionIterator::VertexConstCollectionIterator
VertexConstCollectionIterator(const VertexConstCollectionIterator &)=delete
eic::VertexConstCollectionIterator::operator->
ConstVertex * operator->()
Definition: VertexCollection.cc:128
eic::VertexCollectionIterator::VertexCollectionIterator
VertexCollectionIterator(const VertexCollectionIterator &)=delete
eic::VertexCollectionIterator::operator*
Vertex operator*()
Definition: VertexCollection.cc:106
eic::VertexCollection::end
const_iterator end() const
Definition: VertexCollection.h:155
eic::VertexCollection::create
Vertex create()
Append a new object to the collection, and return this object.
Definition: VertexCollection.cc:43
eic::VertexCollection::prepareAfterRead
void prepareAfterRead() override final
Definition: VertexCollection.cc:69
eic::VertexCollection::at
ConstVertex at(unsigned int index) const
Returns the const object of given index.
Definition: VertexCollection.cc:27
eic::VertexCollection::referenceCollections
podio::CollRefCollection * referenceCollections() override final
Definition: VertexCollection.h:125
eic::VertexCollection::getID
unsigned getID() const override final
Definition: VertexCollection.h:137
eic::VertexCollection::begin
iterator begin()
Definition: VertexCollection.h:146
eic::VertexCollection::size
size_t size() const override final
number of elements in the collection
Definition: VertexCollection.cc:39
eic::VertexConstCollectionIterator::operator++
VertexConstCollectionIterator & operator++()
Definition: VertexCollection.cc:133
eic::VertexConstCollectionIterator::VertexConstCollectionIterator
VertexConstCollectionIterator(size_t index, const VertexObjPointerContainer *collection)
Definition: VertexCollection.h:53
eic::VertexCollection::setID
void setID(unsigned ID) override final
Definition: VertexCollection.h:129
eic::VertexCollection::setReferences
bool setReferences(const podio::ICollectionProvider *collectionProvider) override final
Definition: VertexCollection.cc:84
eic::VertexCollection::operator[]
ConstVertex operator[](unsigned int index) const
Returns the const object of given index.
Definition: VertexCollection.cc:23
eic::VertexCollectionIterator::operator=
VertexCollectionIterator & operator=(const VertexCollectionIterator &)=delete
eic::VertexCollectionIterator::operator->
Vertex * operator->()
Definition: VertexCollection.cc:111
eic::VertexCollection
Definition: VertexCollection.h:76
eic::VertexCollectionIterator
Definition: VertexCollection.h:29
eic::Vertex
Definition: Vertex.h:23
eic::VertexCollection::VertexCollection
VertexCollection(const VertexCollection &)=delete
Vertex.h
eic::VertexCollection::setBuffer
void setBuffer(void *address) override final
Definition: VertexCollection.cc:101
eic::VertexCollection::~VertexCollection
~VertexCollection()
Definition: VertexCollection.cc:18
eic::VertexCollection::ID
const std::array< eic::Index, arraysize > ID() const
Definition: VertexCollection.h:204
eic::VertexCollectionIterator::VertexCollectionIterator
VertexCollectionIterator(size_t index, const VertexObjPointerContainer *collection)
Definition: VertexCollection.h:31
eic::VertexCollectionIterator::operator++
VertexCollectionIterator & operator++()
Definition: VertexCollection.cc:116
eic::VertexConstCollectionIterator::operator=
VertexConstCollectionIterator & operator=(const VertexConstCollectionIterator &)=delete
eic::VertexCollection::getBufferAddress
void * getBufferAddress() override final
returns the address of the pointer to the data buffer
Definition: VertexCollection.h:160
eic::VertexObj
Definition: VertexObj.h:18
eic::VertexCollection::operator=
VertexCollection & operator=(const VertexCollection &)=delete
eic::VertexCollection::begin
const_iterator begin() const
Definition: VertexCollection.h:149