File indexing completed on 2025-07-09 08:30:15
0001
0002
0003 #ifndef EDM4HEP_MutableCaloHitContribution_H
0004 #define EDM4HEP_MutableCaloHitContribution_H
0005
0006 #include "edm4hep/CaloHitContributionObj.h"
0007
0008 #include "edm4hep/CaloHitContribution.h"
0009
0010 #include "edm4hep/Vector3f.h"
0011 #include <cstdint>
0012
0013 #include "podio/utilities/MaybeSharedPtr.h"
0014
0015 #include <cstdint>
0016
0017 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0018 #include "nlohmann/json_fwd.hpp"
0019 #endif
0020
0021
0022 namespace edm4hep {
0023 class CaloHitContributionCollection;
0024 class MCParticle;
0025 class MutableMCParticle;
0026 }
0027
0028 namespace edm4hep {
0029
0030
0031
0032
0033
0034 class MutableCaloHitContribution {
0035
0036 friend class CaloHitContributionCollection;
0037 friend class CaloHitContributionMutableCollectionIterator;
0038 friend class CaloHitContribution;
0039
0040 public:
0041 using object_type = CaloHitContribution;
0042 using collection_type = CaloHitContributionCollection;
0043
0044
0045 MutableCaloHitContribution();
0046
0047
0048 MutableCaloHitContribution(std::int32_t PDG, float energy, float time, edm4hep::Vector3f stepPosition);
0049
0050
0051 MutableCaloHitContribution(const MutableCaloHitContribution& other) = default;
0052
0053
0054 MutableCaloHitContribution& operator=(MutableCaloHitContribution other);
0055
0056
0057
0058 MutableCaloHitContribution clone(bool cloneRelations = true) const;
0059
0060
0061 ~MutableCaloHitContribution() = default;
0062
0063 public:
0064
0065 std::int32_t getPDG() const;
0066
0067
0068 float getEnergy() const;
0069
0070
0071 float getTime() const;
0072
0073
0074 const edm4hep::Vector3f& getStepPosition() const;
0075
0076
0077 const edm4hep::MCParticle getParticle() const;
0078
0079
0080 void setPDG(std::int32_t value);
0081
0082 std::int32_t& getPDG();
0083
0084 [[deprecated("use getPDG instead")]] std::int32_t& PDG();
0085
0086
0087 void setEnergy(float value);
0088
0089 float& getEnergy();
0090
0091 [[deprecated("use getEnergy instead")]] float& energy();
0092
0093
0094 void setTime(float value);
0095
0096 float& getTime();
0097
0098 [[deprecated("use getTime instead")]] float& time();
0099
0100
0101 void setStepPosition(edm4hep::Vector3f value);
0102
0103 edm4hep::Vector3f& getStepPosition();
0104
0105 [[deprecated("use getStepPosition instead")]] edm4hep::Vector3f& stepPosition();
0106
0107
0108 void setParticle(const edm4hep::MCParticle& value);
0109
0110
0111 bool isAvailable() const;
0112
0113 void unlink() {
0114 m_obj = podio::utils::MaybeSharedPtr<CaloHitContributionObj>{nullptr};
0115 }
0116
0117 bool operator==(const MutableCaloHitContribution& other) const {
0118 return m_obj == other.m_obj;
0119 }
0120 bool operator==(const CaloHitContribution& other) const;
0121
0122 bool operator!=(const MutableCaloHitContribution& other) const {
0123 return !(*this == other);
0124 }
0125 bool operator!=(const CaloHitContribution& other) const {
0126 return !(*this == other);
0127 }
0128
0129
0130 bool operator<(const MutableCaloHitContribution& other) const {
0131 return podio::detail::getOrderKey(*this) < podio::detail::getOrderKey(other);
0132 }
0133
0134 podio::ObjectID id() const {
0135 return getObjectID();
0136 }
0137
0138 const podio::ObjectID getObjectID() const;
0139
0140 friend void swap(MutableCaloHitContribution& a, MutableCaloHitContribution& b) {
0141 using std::swap;
0142 swap(a.m_obj, b.m_obj);
0143 }
0144
0145 private:
0146
0147 explicit MutableCaloHitContribution(podio::utils::MaybeSharedPtr<CaloHitContributionObj> obj);
0148
0149 podio::utils::MaybeSharedPtr<CaloHitContributionObj> m_obj{nullptr};
0150 };
0151
0152 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0153 void to_json(nlohmann::json& j, const MutableCaloHitContribution& value);
0154 #endif
0155
0156 }
0157
0158 #endif