Warning, file /include/edm4hep/MutableCluster.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 EDM4HEP_MutableCluster_H
0004 #define EDM4HEP_MutableCluster_H
0005
0006 #include "edm4hep/ClusterObj.h"
0007
0008 #include "edm4hep/Cluster.h"
0009
0010 #include "edm4hep/CalorimeterHit.h"
0011 #include "edm4hep/CovMatrix3f.h"
0012 #include "edm4hep/Vector3f.h"
0013 #include "podio/RelationRange.h"
0014 #include <cstdint>
0015 #include <edm4hep/Constants.h>
0016 #include <vector>
0017
0018 #include "podio/utilities/MaybeSharedPtr.h"
0019
0020 #include <cstdint>
0021
0022 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0023 #include "nlohmann/json_fwd.hpp"
0024 #endif
0025
0026
0027 namespace edm4hep {
0028 class ClusterCollection;
0029 }
0030
0031 namespace edm4hep {
0032
0033
0034
0035
0036
0037 class MutableCluster {
0038
0039 friend class ClusterCollection;
0040 friend class ClusterMutableCollectionIterator;
0041 friend class Cluster;
0042
0043 public:
0044 using object_type = Cluster;
0045 using collection_type = ClusterCollection;
0046
0047
0048 MutableCluster() = default;
0049
0050
0051 MutableCluster(const std::int32_t type, const float energy, const float energyError,
0052 const edm4hep::Vector3f& position, const edm4hep::CovMatrix3f& positionError, const float iTheta,
0053 const float phi, const edm4hep::Vector3f& directionError);
0054
0055
0056 MutableCluster(const MutableCluster& other) = default;
0057
0058
0059 MutableCluster& operator=(MutableCluster other) &;
0060 MutableCluster&
0061 operator=(MutableCluster other) && = delete;
0062
0063
0064
0065 MutableCluster clone(bool cloneRelations = true) const;
0066
0067
0068 ~MutableCluster() = default;
0069
0070 public:
0071
0072 std::int32_t getType() const;
0073
0074
0075 float getEnergy() const;
0076
0077
0078 float getEnergyError() const;
0079
0080
0081 const edm4hep::Vector3f& getPosition() const;
0082
0083
0084 const edm4hep::CovMatrix3f& getPositionError() const;
0085
0086
0087
0088 float getITheta() const;
0089
0090
0091
0092 float getPhi() const;
0093
0094
0095 const edm4hep::Vector3f& getDirectionError() const;
0096
0097
0098 void setType(const std::int32_t type);
0099
0100 std::int32_t& getType();
0101
0102 [[deprecated("use getType instead")]] std::int32_t& type();
0103
0104
0105 void setEnergy(const float energy);
0106
0107 float& getEnergy();
0108
0109 [[deprecated("use getEnergy instead")]] float& energy();
0110
0111
0112 void setEnergyError(const float energyError);
0113
0114 float& getEnergyError();
0115
0116 [[deprecated("use getEnergyError instead")]] float& energyError();
0117
0118
0119 void setPosition(const edm4hep::Vector3f& position);
0120
0121 edm4hep::Vector3f& getPosition();
0122
0123 [[deprecated("use getPosition instead")]] edm4hep::Vector3f& position();
0124
0125
0126 void setPositionError(const edm4hep::CovMatrix3f& positionError);
0127
0128 edm4hep::CovMatrix3f& getPositionError();
0129
0130 [[deprecated("use getPositionError instead")]] edm4hep::CovMatrix3f& positionError();
0131
0132
0133
0134 void setITheta(const float iTheta);
0135
0136
0137 float& getITheta();
0138
0139
0140 [[deprecated("use getITheta instead")]] float& iTheta();
0141
0142
0143
0144 void setPhi(const float phi);
0145
0146
0147 float& getPhi();
0148
0149
0150 [[deprecated("use getPhi instead")]] float& phi();
0151
0152
0153 void setDirectionError(const edm4hep::Vector3f& directionError);
0154
0155 edm4hep::Vector3f& getDirectionError();
0156
0157 [[deprecated("use getDirectionError instead")]] edm4hep::Vector3f& directionError();
0158
0159 void addToClusters(const edm4hep::Cluster&);
0160 std::size_t clusters_size() const;
0161 edm4hep::Cluster getClusters(std::size_t) const;
0162 std::vector<edm4hep::Cluster>::const_iterator clusters_begin() const;
0163 std::vector<edm4hep::Cluster>::const_iterator clusters_end() const;
0164 podio::RelationRange<edm4hep::Cluster> getClusters() const;
0165 void addToHits(const edm4hep::CalorimeterHit&);
0166 std::size_t hits_size() const;
0167 edm4hep::CalorimeterHit getHits(std::size_t) const;
0168 std::vector<edm4hep::CalorimeterHit>::const_iterator hits_begin() const;
0169 std::vector<edm4hep::CalorimeterHit>::const_iterator hits_end() const;
0170 podio::RelationRange<edm4hep::CalorimeterHit> getHits() const;
0171 void addToShapeParameters(const float&);
0172 std::size_t shapeParameters_size() const;
0173 float getShapeParameters(std::size_t) const;
0174 std::vector<float>::const_iterator shapeParameters_begin() const;
0175 std::vector<float>::const_iterator shapeParameters_end() const;
0176 podio::RelationRange<float> getShapeParameters() const;
0177 void addToSubdetectorEnergies(const float&);
0178 std::size_t subdetectorEnergies_size() const;
0179 float getSubdetectorEnergies(std::size_t) const;
0180 std::vector<float>::const_iterator subdetectorEnergies_begin() const;
0181 std::vector<float>::const_iterator subdetectorEnergies_end() const;
0182 podio::RelationRange<float> getSubdetectorEnergies() const;
0183
0184
0185 float getPositionError(edm4hep::Cartesian dimI, edm4hep::Cartesian dimJ) const {
0186 return getPositionError().getValue(dimI, dimJ);
0187 }
0188
0189
0190 void setPositionError(float value, edm4hep::Cartesian dimI, edm4hep::Cartesian dimJ) {
0191 return getPositionError().setValue(value, dimI, dimJ);
0192 }
0193
0194
0195 bool isAvailable() const;
0196
0197 void unlink() { m_obj = podio::utils::MaybeSharedPtr<ClusterObj>{nullptr}; }
0198
0199 bool operator==(const MutableCluster& other) const { return m_obj == other.m_obj; }
0200 bool operator==(const Cluster& other) const;
0201
0202 bool operator!=(const MutableCluster& other) const { return !(*this == other); }
0203 bool operator!=(const Cluster& other) const { return !(*this == other); }
0204
0205
0206 bool operator<(const MutableCluster& other) const {
0207 return podio::detail::getOrderKey(*this) < podio::detail::getOrderKey(other);
0208 }
0209
0210 podio::ObjectID id() const { return getObjectID(); }
0211
0212 const podio::ObjectID getObjectID() const;
0213
0214 friend std::hash<MutableCluster>;
0215
0216 friend void swap(MutableCluster& a, MutableCluster& b) {
0217 using std::swap;
0218 swap(a.m_obj, b.m_obj);
0219 }
0220
0221 private:
0222
0223 explicit MutableCluster(podio::utils::MaybeSharedPtr<ClusterObj> obj);
0224
0225 podio::utils::MaybeSharedPtr<ClusterObj> m_obj{new ClusterObj{}, podio::utils::MarkOwned};
0226 };
0227
0228 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0229 void to_json(nlohmann::json& j, const MutableCluster& value);
0230 #endif
0231
0232 }
0233
0234 template <>
0235 struct std::hash<edm4hep::MutableCluster> {
0236 std::size_t operator()(const edm4hep::MutableCluster& obj) const {
0237 return std::hash<edm4hep::ClusterObj*>{}(obj.m_obj.get());
0238 }
0239 };
0240
0241 #endif