Warning, file /include/edm4eic/MCRecoTrackParticleAssociationCollection.h was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003 #ifndef EDM4EIC_MCRecoTrackParticleAssociationCollection_H
0004 #define EDM4EIC_MCRecoTrackParticleAssociationCollection_H
0005
0006
0007 #include "edm4eic/MCRecoTrackParticleAssociation.h"
0008 #include "edm4eic/MutableMCRecoTrackParticleAssociation.h"
0009 #include "edm4eic/MCRecoTrackParticleAssociationObj.h"
0010 #include "edm4eic/MCRecoTrackParticleAssociationCollectionData.h"
0011
0012
0013 #include "podio/ICollectionProvider.h"
0014 #include "podio/CollectionBase.h"
0015 #include "podio/detail/Pythonizations.h"
0016
0017 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0018 #include "nlohmann/json_fwd.hpp"
0019 #endif
0020
0021 #include <string_view>
0022 #include <vector>
0023 #include <algorithm>
0024 #include <ostream>
0025 #include <mutex>
0026 #include <memory>
0027 #include <cstddef>
0028
0029 namespace podio {
0030 struct RelationNames;
0031 }
0032
0033 namespace edm4eic {
0034
0035
0036
0037 class MCRecoTrackParticleAssociationCollectionIterator {
0038 public:
0039 using value_type = MCRecoTrackParticleAssociation;
0040 using difference_type = ptrdiff_t;
0041 using reference = MCRecoTrackParticleAssociation;
0042 using pointer = MCRecoTrackParticleAssociation*;
0043 using iterator_category = std::input_iterator_tag;
0044
0045
0046 using iterator_concept = std::random_access_iterator_tag;
0047
0048 MCRecoTrackParticleAssociationCollectionIterator(size_t index, const MCRecoTrackParticleAssociationObjPointerContainer* collection) : m_index(index), m_object(podio::utils::MaybeSharedPtr<MCRecoTrackParticleAssociationObj>{nullptr}), m_collection(collection) {}
0049 MCRecoTrackParticleAssociationCollectionIterator() = default;
0050
0051 MCRecoTrackParticleAssociationCollectionIterator(const MCRecoTrackParticleAssociationCollectionIterator&) = default;
0052 MCRecoTrackParticleAssociationCollectionIterator(MCRecoTrackParticleAssociationCollectionIterator&&) = default;
0053 MCRecoTrackParticleAssociationCollectionIterator& operator=(const MCRecoTrackParticleAssociationCollectionIterator&) = default;
0054 MCRecoTrackParticleAssociationCollectionIterator& operator=(MCRecoTrackParticleAssociationCollectionIterator&&) = default;
0055 ~MCRecoTrackParticleAssociationCollectionIterator() = default;
0056
0057 auto operator<=>(const MCRecoTrackParticleAssociationCollectionIterator& other) const {
0058 return m_index <=> other.m_index;
0059 }
0060
0061 bool operator==(const MCRecoTrackParticleAssociationCollectionIterator& x) const {
0062 return m_index == x.m_index;
0063 }
0064
0065 reference operator*() const;
0066 pointer operator->();
0067 MCRecoTrackParticleAssociationCollectionIterator& operator++();
0068 MCRecoTrackParticleAssociationCollectionIterator operator++(int);
0069 MCRecoTrackParticleAssociationCollectionIterator& operator--();
0070 MCRecoTrackParticleAssociationCollectionIterator operator--(int);
0071 MCRecoTrackParticleAssociationCollectionIterator& operator+=(difference_type n);
0072 MCRecoTrackParticleAssociationCollectionIterator operator+(difference_type n) const;
0073 friend MCRecoTrackParticleAssociationCollectionIterator operator+(difference_type n, const MCRecoTrackParticleAssociationCollectionIterator& it);
0074 MCRecoTrackParticleAssociationCollectionIterator& operator-=(difference_type n);
0075 MCRecoTrackParticleAssociationCollectionIterator operator-(difference_type n) const;
0076 reference operator[](difference_type n) const;
0077 difference_type operator-(const MCRecoTrackParticleAssociationCollectionIterator& other) const;
0078
0079 private:
0080 size_t m_index{0};
0081 MCRecoTrackParticleAssociation m_object { podio::utils::MaybeSharedPtr<MCRecoTrackParticleAssociationObj>{nullptr} };
0082 const MCRecoTrackParticleAssociationObjPointerContainer* m_collection{nullptr};
0083 };
0084
0085
0086 class MCRecoTrackParticleAssociationMutableCollectionIterator {
0087 public:
0088 using value_type = MCRecoTrackParticleAssociation;
0089 using difference_type = ptrdiff_t;
0090 using reference = MutableMCRecoTrackParticleAssociation;
0091 using pointer = MutableMCRecoTrackParticleAssociation*;
0092 using iterator_category = std::input_iterator_tag;
0093
0094
0095 using iterator_concept = std::random_access_iterator_tag;
0096
0097 MCRecoTrackParticleAssociationMutableCollectionIterator(size_t index, const MCRecoTrackParticleAssociationObjPointerContainer* collection) : m_index(index), m_object(podio::utils::MaybeSharedPtr<MCRecoTrackParticleAssociationObj>{nullptr}), m_collection(collection) {}
0098 MCRecoTrackParticleAssociationMutableCollectionIterator() = default;
0099
0100 MCRecoTrackParticleAssociationMutableCollectionIterator(const MCRecoTrackParticleAssociationMutableCollectionIterator&) = default;
0101 MCRecoTrackParticleAssociationMutableCollectionIterator(MCRecoTrackParticleAssociationMutableCollectionIterator&&) = default;
0102 MCRecoTrackParticleAssociationMutableCollectionIterator& operator=(const MCRecoTrackParticleAssociationMutableCollectionIterator&) = default;
0103 MCRecoTrackParticleAssociationMutableCollectionIterator& operator=(MCRecoTrackParticleAssociationMutableCollectionIterator&&) = default;
0104 ~MCRecoTrackParticleAssociationMutableCollectionIterator() = default;
0105
0106 auto operator<=>(const MCRecoTrackParticleAssociationMutableCollectionIterator& other) const {
0107 return m_index <=> other.m_index;
0108 }
0109
0110 bool operator==(const MCRecoTrackParticleAssociationMutableCollectionIterator& x) const {
0111 return m_index == x.m_index;
0112 }
0113
0114 reference operator*() const;
0115 pointer operator->();
0116 MCRecoTrackParticleAssociationMutableCollectionIterator& operator++();
0117 MCRecoTrackParticleAssociationMutableCollectionIterator operator++(int);
0118 MCRecoTrackParticleAssociationMutableCollectionIterator& operator--();
0119 MCRecoTrackParticleAssociationMutableCollectionIterator operator--(int);
0120 MCRecoTrackParticleAssociationMutableCollectionIterator& operator+=(difference_type n);
0121 MCRecoTrackParticleAssociationMutableCollectionIterator operator+(difference_type n) const;
0122 friend MCRecoTrackParticleAssociationMutableCollectionIterator operator+(difference_type n, const MCRecoTrackParticleAssociationMutableCollectionIterator& it);
0123 MCRecoTrackParticleAssociationMutableCollectionIterator& operator-=(difference_type n);
0124 MCRecoTrackParticleAssociationMutableCollectionIterator operator-(difference_type n) const;
0125 reference operator[](difference_type n) const;
0126 difference_type operator-(const MCRecoTrackParticleAssociationMutableCollectionIterator& other) const;
0127
0128 private:
0129 size_t m_index{0};
0130 MutableMCRecoTrackParticleAssociation m_object { podio::utils::MaybeSharedPtr<MCRecoTrackParticleAssociationObj>{nullptr} };
0131 const MCRecoTrackParticleAssociationObjPointerContainer* m_collection{nullptr};
0132 };
0133
0134
0135
0136
0137
0138 class MCRecoTrackParticleAssociationCollection : public podio::CollectionBase {
0139 public:
0140 using value_type = MCRecoTrackParticleAssociation;
0141 using mutable_type = MutableMCRecoTrackParticleAssociation;
0142 using const_iterator = MCRecoTrackParticleAssociationCollectionIterator;
0143 using iterator = MCRecoTrackParticleAssociationMutableCollectionIterator;
0144 using difference_type = ptrdiff_t;
0145 using size_type = size_t;
0146 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
0147 using reverse_iterator = std::reverse_iterator<iterator>;
0148
0149 MCRecoTrackParticleAssociationCollection() = default;
0150 MCRecoTrackParticleAssociationCollection(MCRecoTrackParticleAssociationCollectionData&& data, bool isSubsetColl);
0151
0152 MCRecoTrackParticleAssociationCollection(const MCRecoTrackParticleAssociationCollection& ) = delete;
0153 MCRecoTrackParticleAssociationCollection& operator=(const MCRecoTrackParticleAssociationCollection& ) = delete;
0154 MCRecoTrackParticleAssociationCollection(MCRecoTrackParticleAssociationCollection&&) = default;
0155 MCRecoTrackParticleAssociationCollection& operator=(MCRecoTrackParticleAssociationCollection&&) = default;
0156
0157
0158 ~MCRecoTrackParticleAssociationCollection() override;
0159
0160 constexpr static std::string_view typeName = "edm4eic::MCRecoTrackParticleAssociationCollection";
0161 constexpr static std::string_view valueTypeName = "edm4eic::MCRecoTrackParticleAssociation";
0162 constexpr static std::string_view dataTypeName = "edm4eic::MCRecoTrackParticleAssociationData";
0163
0164 void clear() final;
0165
0166
0167 static void __cppyy_pythonize__(PyObject* klass, const std::string& name){
0168 podio::detail::pythonizations::pythonize_subscript(klass, name);
0169 }
0170
0171
0172 void print(std::ostream& os=std::cout, bool flush=true) const final;
0173
0174
0175 MutableMCRecoTrackParticleAssociation create();
0176
0177
0178
0179 template<typename... Args>
0180 MutableMCRecoTrackParticleAssociation create(Args&&... args);
0181
0182
0183 std::size_t size() const final;
0184
0185
0186 std::size_t max_size() const final;
0187
0188
0189 bool empty() const final;
0190
0191
0192 const std::string_view getTypeName() const final { return typeName; }
0193
0194 const std::string_view getValueTypeName() const final { return valueTypeName; }
0195
0196 const std::string_view getDataTypeName() const final { return dataTypeName; }
0197
0198 podio::SchemaVersionT getSchemaVersion() const final;
0199
0200 bool isSubsetCollection() const final {
0201 return m_isSubsetColl;
0202 }
0203
0204 void setSubsetCollection(bool setSubset=true) final;
0205
0206
0207 MCRecoTrackParticleAssociation operator[](std::size_t index) const;
0208
0209 MutableMCRecoTrackParticleAssociation operator[](std::size_t index);
0210
0211 MCRecoTrackParticleAssociation at(std::size_t index) const;
0212
0213 MutableMCRecoTrackParticleAssociation at(std::size_t index);
0214
0215
0216
0217 void push_back(const MutableMCRecoTrackParticleAssociation& object);
0218
0219 void push_back(const MCRecoTrackParticleAssociation& object);
0220
0221 void prepareForWrite() const final;
0222 void prepareAfterRead() final;
0223 bool setReferences(const podio::ICollectionProvider* collectionProvider) final;
0224
0225
0226 podio::CollectionWriteBuffers getBuffers() final;
0227
0228 void setID(uint32_t ID) final {
0229 m_collectionID = ID;
0230 if (!m_isSubsetColl) {
0231 std::for_each(m_storage.entries.begin(), m_storage.entries.end(),
0232 [ID] (MCRecoTrackParticleAssociationObj* obj) { obj->id = {obj->id.index, static_cast<uint32_t>(ID)}; }
0233 );
0234 }
0235 }
0236
0237 uint32_t getID() const final {
0238 return m_collectionID;
0239 }
0240
0241
0242 bool hasID() const final {
0243 return getID() != static_cast<uint32_t>(podio::ObjectID::untracked) &&
0244 getID() != static_cast<uint32_t>(podio::ObjectID::invalid);
0245 }
0246
0247 [[deprecated("isValid will be removed, use hasID() if you want to check if it has an ID, otherwise assume the "
0248 "collection is valid")]]
0249 bool isValid() const final {
0250 return hasID();
0251 }
0252
0253 size_t getDatamodelRegistryIndex() const final;
0254
0255
0256 iterator begin() {
0257 return iterator(0, &m_storage.entries);
0258 }
0259 const_iterator begin() const {
0260 return const_iterator(0, &m_storage.entries);
0261 }
0262 const_iterator cbegin() const {
0263 return begin();
0264 }
0265 iterator end() {
0266 return iterator(m_storage.entries.size(), &m_storage.entries);
0267 }
0268 const_iterator end() const {
0269 return const_iterator(m_storage.entries.size(), &m_storage.entries);
0270 }
0271 const_iterator cend() const {
0272 return end();
0273 }
0274
0275 reverse_iterator rbegin() {
0276 return reverse_iterator(end());
0277 }
0278 const_reverse_iterator rbegin() const {
0279 return const_reverse_iterator(end());
0280 }
0281 const_reverse_iterator crbegin() const {
0282 return rbegin();
0283 }
0284 reverse_iterator rend() {
0285 return reverse_iterator(begin());
0286 }
0287 const_reverse_iterator rend() const {
0288 return const_reverse_iterator(begin());
0289 }
0290 const_reverse_iterator crend() const {
0291 return rend();
0292 }
0293
0294
0295 std::vector<std::uint32_t> simID(const size_t nElem = 0) const;
0296 std::vector<std::uint32_t> recID(const size_t nElem = 0) const;
0297 std::vector<float> weight(const size_t nElem = 0) const;
0298
0299 private:
0300
0301
0302
0303 friend class MCRecoTrackParticleAssociationCollectionData;
0304
0305 mutable bool m_isPrepared{false};
0306 bool m_isSubsetColl{false};
0307 uint32_t m_collectionID{static_cast<uint32_t>(podio::ObjectID::untracked)};
0308 mutable std::unique_ptr<std::mutex> m_storageMtx{std::make_unique<std::mutex>()};
0309 mutable MCRecoTrackParticleAssociationCollectionData m_storage{};
0310 };
0311
0312 std::ostream& operator<<(std::ostream& o, const MCRecoTrackParticleAssociationCollection& v);
0313
0314 template<typename... Args>
0315 MutableMCRecoTrackParticleAssociation MCRecoTrackParticleAssociationCollection::create(Args&&... args) {
0316 if (m_isSubsetColl) {
0317 throw std::logic_error("Cannot create new elements on a subset collection");
0318 }
0319 auto obj = new MCRecoTrackParticleAssociationObj({static_cast<int>(m_storage.entries.size()), m_collectionID}, {std::forward<Args>(args)...});
0320 m_storage.entries.push_back(obj);
0321
0322 return MutableMCRecoTrackParticleAssociation(podio::utils::MaybeSharedPtr(obj));
0323 }
0324
0325 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0326 void to_json(nlohmann::json& j, const MCRecoTrackParticleAssociationCollection& collection);
0327 #endif
0328
0329 }
0330
0331
0332
0333
0334
0335 #if defined(__clang__)
0336 #pragma clang diagnostic push
0337 #pragma clang diagnostic ignored "-Wunknown-warning-option"
0338 #pragma clang diagnostic ignored "-Wdeprecated-redundant-constexpr-static-def"
0339 #pragma clang diagnostic ignored "-Wdeprecated"
0340 constexpr std::string_view edm4eic::MCRecoTrackParticleAssociationCollection::typeName;
0341 constexpr std::string_view edm4eic::MCRecoTrackParticleAssociationCollection::valueTypeName;
0342 constexpr std::string_view edm4eic::MCRecoTrackParticleAssociationCollection::dataTypeName;
0343 #pragma clang diagnostic pop
0344 #elif defined(__GNUC__)
0345 #pragma GCC diagnostic push
0346 #pragma GCC diagnostic ignored "-Wdeprecated"
0347 constexpr std::string_view edm4eic::MCRecoTrackParticleAssociationCollection::typeName;
0348 constexpr std::string_view edm4eic::MCRecoTrackParticleAssociationCollection::valueTypeName;
0349 constexpr std::string_view edm4eic::MCRecoTrackParticleAssociationCollection::dataTypeName;
0350 #pragma GCC diagnostic pop
0351 #endif
0352
0353
0354 #endif