File indexing completed on 2025-09-16 08:53:32
0001
0002
0003 #ifndef EDM4HEP_MutableParticleID_H
0004 #define EDM4HEP_MutableParticleID_H
0005
0006 #include "edm4hep/ParticleIDObj.h"
0007
0008 #include "edm4hep/ParticleID.h"
0009
0010 #include "podio/RelationRange.h"
0011 #include <cstdint>
0012 #include <vector>
0013
0014 #include "podio/utilities/MaybeSharedPtr.h"
0015
0016 #include <cstdint>
0017
0018 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0019 #include "nlohmann/json_fwd.hpp"
0020 #endif
0021
0022
0023 namespace edm4hep {
0024 class ParticleIDCollection;
0025 class ReconstructedParticle;
0026 class MutableReconstructedParticle;
0027 }
0028
0029
0030 namespace edm4hep {
0031
0032
0033
0034
0035
0036
0037 class MutableParticleID {
0038
0039 friend class ParticleIDCollection;
0040 friend class ParticleIDMutableCollectionIterator;
0041 friend class ParticleID;
0042
0043 public:
0044 using object_type = ParticleID;
0045 using collection_type = ParticleIDCollection;
0046
0047
0048 MutableParticleID();
0049
0050
0051 MutableParticleID(const std::int32_t type, const std::int32_t PDG, const std::int32_t algorithmType, const float likelihood);
0052
0053
0054 MutableParticleID(const MutableParticleID& other) = default;
0055
0056
0057 MutableParticleID& operator=(MutableParticleID other) &;
0058 MutableParticleID& operator=(MutableParticleID other) && = delete;
0059
0060
0061
0062 MutableParticleID clone(bool cloneRelations=true) const;
0063
0064
0065 ~MutableParticleID() = default;
0066
0067
0068 public:
0069
0070
0071 std::int32_t getType() const;
0072
0073
0074 std::int32_t getPDG() const;
0075
0076
0077 std::int32_t getAlgorithmType() const;
0078
0079
0080 float getLikelihood() const;
0081
0082
0083
0084 const edm4hep::ReconstructedParticle getParticle() const;
0085
0086
0087 void setType(const std::int32_t type);
0088
0089 std::int32_t& getType();
0090
0091 [[deprecated("use getType instead")]]
0092 std::int32_t& type();
0093
0094
0095 void setPDG(const std::int32_t PDG);
0096
0097 std::int32_t& getPDG();
0098
0099 [[deprecated("use getPDG instead")]]
0100 std::int32_t& PDG();
0101
0102
0103 void setAlgorithmType(const std::int32_t algorithmType);
0104
0105 std::int32_t& getAlgorithmType();
0106
0107 [[deprecated("use getAlgorithmType instead")]]
0108 std::int32_t& algorithmType();
0109
0110
0111 void setLikelihood(const float likelihood);
0112
0113 float& getLikelihood();
0114
0115 [[deprecated("use getLikelihood instead")]]
0116 float& likelihood();
0117
0118
0119
0120 void setParticle(const edm4hep::ReconstructedParticle& value);
0121
0122 void addToParameters(const float&);
0123 std::size_t parameters_size() const;
0124 float getParameters(std::size_t) const;
0125 std::vector<float>::const_iterator parameters_begin() const;
0126 std::vector<float>::const_iterator parameters_end() const;
0127 podio::RelationRange<float> getParameters() const;
0128
0129
0130
0131
0132 bool isAvailable() const;
0133
0134 void unlink() { m_obj = podio::utils::MaybeSharedPtr<ParticleIDObj>{nullptr}; }
0135
0136 bool operator==(const MutableParticleID& other) const { return m_obj == other.m_obj; }
0137 bool operator==(const ParticleID& other) const;
0138
0139 bool operator!=(const MutableParticleID& other) const { return !(*this == other); }
0140 bool operator!=(const ParticleID& other) const { return !(*this == other); }
0141
0142
0143 bool operator<(const MutableParticleID& other) const { return podio::detail::getOrderKey(*this) < podio::detail::getOrderKey(other); }
0144
0145 podio::ObjectID id() const { return getObjectID(); }
0146
0147 const podio::ObjectID getObjectID() const;
0148
0149 friend std::hash<MutableParticleID>;
0150
0151 friend void swap(MutableParticleID& a, MutableParticleID& b) {
0152 using std::swap;
0153 swap(a.m_obj, b.m_obj);
0154 }
0155
0156 private:
0157
0158 explicit MutableParticleID(podio::utils::MaybeSharedPtr<ParticleIDObj> obj);
0159
0160 podio::utils::MaybeSharedPtr<ParticleIDObj> m_obj{nullptr};
0161 };
0162
0163 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0164 void to_json(nlohmann::json& j, const MutableParticleID& value);
0165 #endif
0166
0167
0168 }
0169
0170
0171
0172 template<>
0173 struct std::hash<edm4hep::MutableParticleID> {
0174 std::size_t operator()(const edm4hep::MutableParticleID& obj) const {
0175 return std::hash<edm4hep::ParticleIDObj*>{}(obj.m_obj.get());
0176 }
0177 };
0178
0179
0180 #endif