3#ifndef EDM4EIC_MutableCluster_H
4#define EDM4EIC_MutableCluster_H
13#include "edm4hep/ParticleID.h"
14#include "edm4hep/Vector3f.h"
15#include "podio/RelationRange.h"
20#include "podio/utilities/MaybeSharedPtr.h"
24#if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
25#include "nlohmann/json_fwd.hpp"
55 MutableCluster(
const std::int32_t type,
const float energy,
const float energyError,
const float time,
const float timeError,
const std::uint32_t nhits,
const edm4hep::Vector3f& position,
const edm4eic::Cov3f& positionError,
const float radius,
const float dispersion,
const std::array<float, 3>& principalAxesLengthsXYZ,
const std::array<float, 2>& principalAxesLengthsThetaPhi,
const float intrinsicTheta,
const float intrinsicPhi,
const edm4eic::Cov2f& intrinsicDirectionError);
124 void setType(
const std::int32_t type);
139 void setTime(
const float time);
149 void setNhits(
const std::uint32_t nhits);
154 void setPosition(
const edm4hep::Vector3f& position);
205 std::vector<edm4eic::Cluster>::const_iterator
clusters_begin()
const;
206 std::vector<edm4eic::Cluster>::const_iterator
clusters_end()
const;
207 podio::RelationRange<edm4eic::Cluster>
getClusters()
const;
211 std::vector<edm4eic::CalorimeterHit>::const_iterator
hits_begin()
const;
212 std::vector<edm4eic::CalorimeterHit>::const_iterator
hits_end()
const;
213 podio::RelationRange<edm4eic::CalorimeterHit>
getHits()
const;
218 std::vector<edm4hep::ParticleID>::const_iterator
particleIDs_end()
const;
244 void unlink() { m_obj = podio::utils::MaybeSharedPtr<ClusterObj>{
nullptr}; }
259 friend std::hash<MutableCluster>;
263 swap(a.m_obj, b.m_obj);
268 explicit MutableCluster(podio::utils::MaybeSharedPtr<ClusterObj> obj);
270 podio::utils::MaybeSharedPtr<ClusterObj> m_obj{
new ClusterObj{}, podio::utils::MarkOwned};
273#if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
285 return std::hash<edm4eic::ClusterObj*>{}(obj.m_obj.get());
Definition CalorimeterHit.h:46
Definition ClusterCollection.h:139
Definition ClusterObj.h:21
Definition MutableCluster.h:41
Cluster object_type
Definition MutableCluster.h:48
const edm4hep::Vector3f & getPosition() const
Access the Global position of the cluster [mm].
Definition MutableCluster.cc:75
podio::RelationRange< float > getSubdetectorEnergies() const
Definition MutableCluster.cc:330
std::vector< edm4hep::ParticleID >::const_iterator particleIDs_begin() const
Definition MutableCluster.cc:199
friend class Cluster
Definition MutableCluster.h:45
float getTime() const
Access the [ns].
Definition MutableCluster.cc:72
void addToShapeParameters(const float &)
Definition MutableCluster.cc:230
podio::RelationRange< edm4eic::CalorimeterHit > getHits() const
Definition MutableCluster.cc:186
std::vector< edm4eic::CalorimeterHit >::const_iterator hits_end() const
Definition MutableCluster.cc:169
podio::ObjectID id() const
Definition MutableCluster.h:255
void setPosition(const edm4hep::Vector3f &position)
Set the Global position of the cluster [mm].
Definition MutableCluster.cc:100
ClusterCollection collection_type
Definition MutableCluster.h:49
std::vector< edm4eic::CalorimeterHit >::const_iterator hits_begin() const
Definition MutableCluster.cc:163
float getRadius() const
Access the Cluster radius [mm].
Definition MutableCluster.cc:77
MutableCluster()=default
default constructor
void addToParticleIDs(const edm4hep::ParticleID &)
Definition MutableCluster.cc:194
void setIntrinsicPhi(const float intrinsicPhi)
Set the Intrinsic cluster propagation direction azimuthal angle [rad]. For an XY planar detector one ...
Definition MutableCluster.cc:116
void setType(const std::int32_t type)
Set the Flag-word that defines the type of the cluster.
Definition MutableCluster.cc:88
float getTimeError() const
Access the Error on the cluster time.
Definition MutableCluster.cc:73
void unlink()
disconnect from ClusterObj instance
Definition MutableCluster.h:244
float getEnergyError() const
Access the Error on the cluster energy [GeV].
Definition MutableCluster.cc:71
bool operator!=(const Cluster &other) const
Definition MutableCluster.h:250
const edm4eic::Cov2f & getIntrinsicDirectionError() const
Access the Error on the intrinsic cluster propagation direction.
Definition MutableCluster.cc:85
bool isAvailable() const
check whether the object is actually available
Definition MutableCluster.cc:343
MutableCluster(const MutableCluster &other)=default
copy constructor
bool operator<(const MutableCluster &other) const
Definition MutableCluster.h:253
void setPrincipalAxesLengthsThetaPhi(const std::array< float, 2 > &principalAxesLengthsThetaPhi)
Set the Lengths along the cluster's principal axes [rad], sorted in descending order.
Definition MutableCluster.cc:111
std::size_t particleIDs_size() const
Definition MutableCluster.cc:211
const std::array< float, 3 > & getPrincipalAxesLengthsXYZ() const
Access the Lengths along the cluster's principal axes [mm], sorted in descending order (equivalent to...
Definition MutableCluster.cc:79
void setPositionError(const edm4eic::Cov3f &positionError)
Set the Covariance matrix of the position (6 Parameters).
Definition MutableCluster.cc:102
std::size_t hits_size() const
Definition MutableCluster.cc:175
std::vector< edm4hep::ParticleID >::const_iterator particleIDs_end() const
Definition MutableCluster.cc:205
MutableCluster & operator=(MutableCluster other) &&=delete
float getIntrinsicTheta() const
Access the Intrinsic cluster propagation direction polar angle [rad].
Definition MutableCluster.cc:83
void addToHits(const edm4eic::CalorimeterHit &)
Definition MutableCluster.cc:158
friend void swap(MutableCluster &a, MutableCluster &b)
Definition MutableCluster.h:261
podio::RelationRange< edm4hep::ParticleID > getParticleIDs() const
Definition MutableCluster.cc:222
void setTimeError(const float timeError)
Set the Error on the cluster time.
Definition MutableCluster.cc:96
MutableCluster & operator=(MutableCluster other) &
copy-assignment operator
Definition MutableCluster.cc:36
std::vector< edm4eic::Cluster >::const_iterator clusters_end() const
Definition MutableCluster.cc:133
friend class ClusterCollection
Definition MutableCluster.h:43
constexpr bool operator==(const MutableCluster &other) const
Definition MutableCluster.h:246
void setTime(const float time)
Set the [ns].
Definition MutableCluster.cc:94
const std::array< float, 2 > & getPrincipalAxesLengthsThetaPhi() const
Access the Lengths along the cluster's principal axes [rad], sorted in descending order.
Definition MutableCluster.cc:81
void setIntrinsicTheta(const float intrinsicTheta)
Set the Intrinsic cluster propagation direction polar angle [rad].
Definition MutableCluster.cc:114
std::int32_t getType() const
Access the Flag-word that defines the type of the cluster.
Definition MutableCluster.cc:69
void setPrincipalAxesLengthsXYZ(const std::array< float, 3 > &principalAxesLengthsXYZ)
Set the Lengths along the cluster's principal axes [mm], sorted in descending order (equivalent to sq...
Definition MutableCluster.cc:108
void addToSubdetectorEnergies(const float &)
Definition MutableCluster.cc:302
std::vector< float >::const_iterator hitContributions_begin() const
Definition MutableCluster.cc:271
std::vector< float >::const_iterator subdetectorEnergies_begin() const
Definition MutableCluster.cc:307
std::uint32_t getNhits() const
Access the Number of hits in the cluster.
Definition MutableCluster.cc:74
std::size_t clusters_size() const
Definition MutableCluster.cc:139
void addToHitContributions(const float &)
Definition MutableCluster.cc:266
std::size_t hitContributions_size() const
Definition MutableCluster.cc:283
~MutableCluster()=default
destructor
friend class ClusterMutableCollectionIterator
Definition MutableCluster.h:44
std::vector< edm4eic::Cluster >::const_iterator clusters_begin() const
Definition MutableCluster.cc:127
float getEnergy() const
Access the Reconstructed energy of the cluster [GeV].
Definition MutableCluster.cc:70
void setIntrinsicDirectionError(const edm4eic::Cov2f &intrinsicDirectionError)
Set the Error on the intrinsic cluster propagation direction.
Definition MutableCluster.cc:118
std::size_t shapeParameters_size() const
Definition MutableCluster.cc:247
const edm4eic::Cov3f & getPositionError() const
Access the Covariance matrix of the position (6 Parameters).
Definition MutableCluster.cc:76
MutableCluster clone(bool cloneRelations=true) const
Definition MutableCluster.cc:41
void setRadius(const float radius)
Set the Cluster radius [mm].
Definition MutableCluster.cc:104
std::vector< float >::const_iterator shapeParameters_end() const
Definition MutableCluster.cc:241
const podio::ObjectID getObjectID() const
Definition MutableCluster.cc:347
void setDispersion(const float dispersion)
Set the Cluster dispersion [mm].
Definition MutableCluster.cc:106
podio::RelationRange< edm4eic::Cluster > getClusters() const
Definition MutableCluster.cc:150
podio::RelationRange< float > getHitContributions() const
Definition MutableCluster.cc:294
constexpr bool operator!=(const MutableCluster &other) const
Definition MutableCluster.h:249
void setNhits(const std::uint32_t nhits)
Set the Number of hits in the cluster.
Definition MutableCluster.cc:98
void addToClusters(const edm4eic::Cluster &)
Definition MutableCluster.cc:122
float getIntrinsicPhi() const
Access the Intrinsic cluster propagation direction azimuthal angle [rad]. For an XY planar detector o...
Definition MutableCluster.cc:84
std::vector< float >::const_iterator subdetectorEnergies_end() const
Definition MutableCluster.cc:313
float getDispersion() const
Access the Cluster dispersion [mm].
Definition MutableCluster.cc:78
std::vector< float >::const_iterator hitContributions_end() const
Definition MutableCluster.cc:277
void setEnergy(const float energy)
Set the Reconstructed energy of the cluster [GeV].
Definition MutableCluster.cc:90
void setEnergyError(const float energyError)
Set the Error on the cluster energy [GeV].
Definition MutableCluster.cc:92
std::vector< float >::const_iterator shapeParameters_begin() const
Definition MutableCluster.cc:235
podio::RelationRange< float > getShapeParameters() const
Definition MutableCluster.cc:258
std::size_t subdetectorEnergies_size() const
Definition MutableCluster.cc:319
Definition ArrowMapper.cc:61
OrderKey getOrderKey(const edm4eic::CalorimeterHit &obj)
Definition CalorimeterHit.cc:146
std::size_t operator()(const edm4eic::MutableCluster &obj) const
Definition MutableCluster.h:284