3#ifndef EDM4EIC_Cluster_H
4#define EDM4EIC_Cluster_H
11#include "edm4hep/ParticleID.h"
12#include "edm4hep/Vector3f.h"
13#include "podio/RelationRange.h"
17#include "podio/utilities/MaybeSharedPtr.h"
18#include "podio/detail/OrderKey.h"
23#if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
24#include "nlohmann/json_fwd.hpp"
64 Cluster(
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 intrinsicTheta,
const float intrinsicPhi,
const edm4eic::Cov2f& intrinsicDirectionError);
87 static constexpr std::string_view
typeName =
"edm4eic::Cluster";
126 std::vector<edm4eic::Cluster>::const_iterator
clusters_begin()
const;
127 std::vector<edm4eic::Cluster>::const_iterator
clusters_end()
const;
128 podio::RelationRange<edm4eic::Cluster>
getClusters()
const;
131 std::vector<edm4eic::CalorimeterHit>::const_iterator
hits_begin()
const;
132 std::vector<edm4eic::CalorimeterHit>::const_iterator
hits_end()
const;
133 podio::RelationRange<edm4eic::CalorimeterHit>
getHits()
const;
137 std::vector<edm4hep::ParticleID>::const_iterator
particleIDs_end()
const;
159 void unlink() { m_obj = podio::utils::MaybeSharedPtr<ClusterObj>{
nullptr}; }
174 friend std::hash<Cluster>;
178 swap(a.m_obj, b.m_obj);
183 explicit Cluster(podio::utils::MaybeSharedPtr<ClusterObj> obj);
186 podio::utils::MaybeSharedPtr<ClusterObj> m_obj{
new ClusterObj{}, podio::utils::MarkOwned};
191#if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
192void to_json(nlohmann::json& j,
const Cluster& value);
203 return std::hash<edm4eic::ClusterObj*>{}(obj.m_obj.get());
211#if defined(__clang__)
212 #pragma clang diagnostic push
213 #pragma clang diagnostic ignored "-Wunknown-warning-option"
214 #pragma clang diagnostic ignored "-Wdeprecated-redundant-constexpr-static-def"
215 #pragma clang diagnostic ignored "-Wdeprecated"
217 #pragma clang diagnostic pop
218#elif defined(__GNUC__)
219 #pragma GCC diagnostic push
220 #pragma GCC diagnostic ignored "-Wdeprecated"
222 #pragma GCC diagnostic pop
Definition CalorimeterHit.h:46
Definition ClusterCollectionData.h:33
Definition ClusterCollection.h:138
std::size_t particleIDs_size() const
Definition Cluster.cc:214
podio::RelationRange< float > getSubdetectorEnergies() const
Definition Cluster.cc:321
std::vector< edm4hep::ParticleID >::const_iterator particleIDs_begin() const
Definition Cluster.cc:202
bool operator<(const Cluster &other) const
Definition Cluster.h:168
std::vector< float >::const_iterator hitContributions_end() const
Definition Cluster.cc:272
bool operator==(const Cluster &other) const
Definition Cluster.h:161
std::vector< edm4eic::Cluster >::const_iterator clusters_begin() const
Definition Cluster.cc:138
podio::RelationRange< float > getShapeParameters() const
Definition Cluster.cc:257
void unlink()
disconnect from ClusterObj instance
Definition Cluster.h:159
const edm4hep::Vector3f & getPosition() const
Access the Global position of the cluster [mm].
Definition Cluster.cc:130
std::vector< float >::const_iterator shapeParameters_end() const
Definition Cluster.cc:240
friend class ClusterCollectionIterator
Definition Cluster.h:53
Cluster(const Cluster &other)=default
copy constructor
std::vector< float >::const_iterator subdetectorEnergies_begin() const
Definition Cluster.cc:298
float getEnergyError() const
Access the Error on the cluster energy [GeV].
Definition Cluster.cc:126
std::uint32_t getNhits() const
Access the Number of hits in the cluster.
Definition Cluster.cc:129
std::vector< float >::const_iterator hitContributions_begin() const
Definition Cluster.cc:266
podio::RelationRange< edm4hep::ParticleID > getParticleIDs() const
Definition Cluster.cc:225
std::vector< edm4eic::CalorimeterHit >::const_iterator hits_begin() const
Definition Cluster.cc:170
MutableCluster mutable_type
Definition Cluster.h:57
MutableCluster clone(bool cloneRelations=true) const
Definition Cluster.cc:39
friend class ClusterCollection
Definition Cluster.h:51
bool isAvailable() const
check whether the object is actually available
Definition Cluster.cc:333
float getTime() const
Access the [ns].
Definition Cluster.cc:127
podio::RelationRange< float > getHitContributions() const
Definition Cluster.cc:289
Cluster & operator=(Cluster other) &&=delete
std::size_t hits_size() const
Definition Cluster.cc:182
podio::RelationRange< edm4eic::Cluster > getClusters() const
Definition Cluster.cc:161
const edm4eic::Cov2f & getIntrinsicDirectionError() const
Access the Error on the intrinsic cluster propagation direction.
Definition Cluster.cc:134
std::size_t subdetectorEnergies_size() const
Definition Cluster.cc:310
podio::RelationRange< edm4eic::CalorimeterHit > getHits() const
Definition Cluster.cc:193
std::size_t hitContributions_size() const
Definition Cluster.cc:278
float getIntrinsicPhi() const
Access the Intrinsic cluster propagation direction azimuthal angle [rad].
Definition Cluster.cc:133
bool operator!=(const Cluster &other) const
Definition Cluster.h:164
friend class MutableCluster
Definition Cluster.h:50
std::size_t clusters_size() const
Definition Cluster.cc:150
const edm4eic::Cov3f & getPositionError() const
Access the Covariance matrix of the position (6 Parameters).
Definition Cluster.cc:131
std::vector< float >::const_iterator shapeParameters_begin() const
Definition Cluster.cc:234
Cluster()=default
default constructor
static constexpr std::string_view typeName
Definition Cluster.h:87
static Cluster makeEmpty()
Definition Cluster.cc:120
float getIntrinsicTheta() const
Access the Intrinsic cluster propagation direction polar angle [rad].
Definition Cluster.cc:132
float getTimeError() const
Access the Error on the cluster time.
Definition Cluster.cc:128
std::vector< edm4eic::CalorimeterHit >::const_iterator hits_end() const
Definition Cluster.cc:176
podio::ObjectID id() const
Definition Cluster.h:170
~Cluster()=default
destructor
std::int32_t getType() const
Access the Flag-word that defines the type of the cluster.
Definition Cluster.cc:124
Cluster & operator=(Cluster other) &
copy-assignment operator
Definition Cluster.cc:34
std::size_t shapeParameters_size() const
Definition Cluster.cc:246
float getEnergy() const
Access the Reconstructed energy of the cluster [GeV].
Definition Cluster.cc:125
bool operator!=(const MutableCluster &other) const
Definition Cluster.h:165
ClusterCollection collection_type
Definition Cluster.h:58
const podio::ObjectID getObjectID() const
Definition Cluster.cc:337
std::vector< edm4eic::Cluster >::const_iterator clusters_end() const
Definition Cluster.cc:144
std::vector< edm4hep::ParticleID >::const_iterator particleIDs_end() const
Definition Cluster.cc:208
friend void swap(Cluster &a, Cluster &b)
Definition Cluster.h:176
std::vector< float >::const_iterator subdetectorEnergies_end() const
Definition Cluster.cc:304
Definition ClusterObj.h:21
Definition MutableCluster.h:40
Definition CalorimeterHit.cc:17
std::ostream & operator<<(std::ostream &o, const CalorimeterHit &value)
Definition CalorimeterHit.cc:99
Definition CalorimeterHit.h:31
OrderKey getOrderKey(const edm4eic::CalorimeterHit &obj)
Definition CalorimeterHit.cc:146
std::size_t operator()(const edm4eic::Cluster &obj) const
Definition Cluster.h:202