3 #ifndef EICD_RingImageCollection_H
4 #define EICD_RingImageCollection_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;
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(),
132 [
ID] (
RingImageObj* obj) { obj->id = {obj->id.index, static_cast<int>(ID)}; }
137 unsigned getID() const override final {
138 return m_collectionID;
153 return iterator(m_entries.size(), &m_entries);
165 template<
size_t arraysize>
166 const std::array<eic::Index, arraysize> ID()
const;
167 template<
size_t arraysize>
168 const std::array<float, arraysize> npe()
const;
169 template<
size_t arraysize>
170 const std::array<eic::VectorXYZ, arraysize> position()
const;
171 template<
size_t arraysize>
172 const std::array<eic::VectorXYZ, arraysize> positionError()
const;
173 template<
size_t arraysize>
174 const std::array<float, arraysize> theta()
const;
175 template<
size_t arraysize>
176 const std::array<float, arraysize> thetaError()
const;
177 template<
size_t arraysize>
178 const std::array<float, arraysize> radius()
const;
179 template<
size_t arraysize>
180 const std::array<float, arraysize> radiusError()
const;
183 bool m_isValid{
false};
184 bool m_isReadFromFile{
false};
185 int m_collectionID{0};
192 podio::CollRefCollection m_refCollections{};
193 podio::VectorMembersInfo m_vecmem_info{};
197 std::ostream&
operator<<(std::ostream& o,
const RingImageCollection& v);
199 template<
typename... Args>
201 const int size = m_entries.size();
202 auto obj =
new RingImageObj({size, m_collectionID}, {args...});
203 m_entries.push_back(obj);
207 template<
size_t arraysize>
208 const std::array<eic::Index, arraysize> RingImageCollection::ID()
const {
209 std::array<eic::Index, arraysize> tmp;
210 const auto valid_size = std::min(arraysize, m_entries.size());
211 for (
unsigned i = 0; i < valid_size; ++i) {
212 tmp[i] = m_entries[i]->data.ID;
217 template<
size_t arraysize>
218 const std::array<float, arraysize> RingImageCollection::npe()
const {
219 std::array<float, arraysize> tmp;
220 const auto valid_size = std::min(arraysize, m_entries.size());
221 for (
unsigned i = 0; i < valid_size; ++i) {
222 tmp[i] = m_entries[i]->data.npe;
227 template<
size_t arraysize>
228 const std::array<eic::VectorXYZ, arraysize> RingImageCollection::position()
const {
229 std::array<eic::VectorXYZ, arraysize> tmp;
230 const auto valid_size = std::min(arraysize, m_entries.size());
231 for (
unsigned i = 0; i < valid_size; ++i) {
232 tmp[i] = m_entries[i]->data.position;
237 template<
size_t arraysize>
238 const std::array<eic::VectorXYZ, arraysize> RingImageCollection::positionError()
const {
239 std::array<eic::VectorXYZ, arraysize> tmp;
240 const auto valid_size = std::min(arraysize, m_entries.size());
241 for (
unsigned i = 0; i < valid_size; ++i) {
242 tmp[i] = m_entries[i]->data.positionError;
247 template<
size_t arraysize>
248 const std::array<float, arraysize> RingImageCollection::theta()
const {
249 std::array<float, arraysize> tmp;
250 const auto valid_size = std::min(arraysize, m_entries.size());
251 for (
unsigned i = 0; i < valid_size; ++i) {
252 tmp[i] = m_entries[i]->data.theta;
257 template<
size_t arraysize>
258 const std::array<float, arraysize> RingImageCollection::thetaError()
const {
259 std::array<float, arraysize> tmp;
260 const auto valid_size = std::min(arraysize, m_entries.size());
261 for (
unsigned i = 0; i < valid_size; ++i) {
262 tmp[i] = m_entries[i]->data.thetaError;
267 template<
size_t arraysize>
268 const std::array<float, arraysize> RingImageCollection::radius()
const {
269 std::array<float, arraysize> tmp;
270 const auto valid_size = std::min(arraysize, m_entries.size());
271 for (
unsigned i = 0; i < valid_size; ++i) {
272 tmp[i] = m_entries[i]->data.radius;
277 template<
size_t arraysize>
278 const std::array<float, arraysize> RingImageCollection::radiusError()
const {
279 std::array<float, arraysize> tmp;
280 const auto valid_size = std::min(arraysize, m_entries.size());
281 for (
unsigned i = 0; i < valid_size; ++i) {
282 tmp[i] = m_entries[i]->data.radiusError;