EDM4eic
EIC data model
Loading...
Searching...
No Matches
SimPulse.h
Go to the documentation of this file.
1// AUTOMATICALLY GENERATED FILE - DO NOT EDIT
2
3#ifndef EDM4EIC_SimPulse_H
4#define EDM4EIC_SimPulse_H
5
7
8#include "edm4hep/MCParticle.h"
9#include "edm4hep/SimCalorimeterHit.h"
10#include "edm4hep/SimTrackerHit.h"
11#include "edm4hep/Vector3f.h"
12#include "podio/RelationRange.h"
13#include <cstdint>
14#include <vector>
15
16#include "podio/utilities/MaybeSharedPtr.h"
17#include "podio/detail/OrderKey.h"
18
19#include <ostream>
20#include <cstdint>
21
22#if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
23#include "nlohmann/json_fwd.hpp"
24#endif
25
26// forward declarations
27namespace edm4eic {
29}
30
31
32namespace podio::detail {
33// Internal function used in less comparison operators of the datatypes and interface types
34OrderKey getOrderKey(const edm4eic::SimPulse& obj);
35};
36
37namespace edm4eic {
38
39class MutableSimPulse;
42
43/** @class SimPulse
44 * Simulated pulse prior to digitization.
45 * @author: D. Anderson, S. Gardner, S. Joosten., D. Kalinkin
46 */
47class SimPulse {
48
49 friend class MutableSimPulse;
50 friend class SimPulseCollection;
53 friend podio::detail::OrderKey podio::detail::getOrderKey(const SimPulse & obj);
54
55public:
58
59 /// default constructor
60 SimPulse();
61
62 /// Constructor initializing all members
63 SimPulse(const std::uint64_t cellID, const float integral, const edm4hep::Vector3f& position, const float time, const float interval);
64
65 /// copy constructor
66 SimPulse(const SimPulse& other) = default;
67
68 /// copy-assignment operator
69 SimPulse& operator=(SimPulse other) &; // Rebind this to other's internal object
70 SimPulse& operator=(SimPulse other) && = delete; // Prevent rebinding temporary as the changes wouldn't persist
71
72 /// create a mutable deep-copy of the object with identical relations
73 /// if cloneRelations=false, the relations are not cloned and will be empty
74 MutableSimPulse clone(bool cloneRelations=true) const;
75
76 /// destructor
77 ~SimPulse() = default;
78
79 /// converting constructor from mutable object
80 SimPulse(const MutableSimPulse& other);
81
82 static SimPulse makeEmpty();
83
84public:
85
86 static constexpr std::string_view typeName = "edm4eic::SimPulse";
87
88 /// Access the ID of the readout cell for this pulse.
89 std::uint64_t getCellID() const;
90
91 /// Access the Total pulse integral in relevant units.
92 float getIntegral() const;
93
94 /// Access the Position the pulse is evaluated in world coordinates [mm].
95 const edm4hep::Vector3f& getPosition() const;
96
97 /// Access the Start time for the pulse in [ns].
98 float getTime() const;
99
100 /// Access the Time interval between amplitude values [ns].
101 float getInterval() const;
102
103
104
105 std::size_t calorimeterHits_size() const;
106 edm4hep::SimCalorimeterHit getCalorimeterHits(std::size_t) const;
107 std::vector<edm4hep::SimCalorimeterHit>::const_iterator calorimeterHits_begin() const;
108 std::vector<edm4hep::SimCalorimeterHit>::const_iterator calorimeterHits_end() const;
109 podio::RelationRange<edm4hep::SimCalorimeterHit> getCalorimeterHits() const;
110 std::size_t trackerHits_size() const;
111 edm4hep::SimTrackerHit getTrackerHits(std::size_t) const;
112 std::vector<edm4hep::SimTrackerHit>::const_iterator trackerHits_begin() const;
113 std::vector<edm4hep::SimTrackerHit>::const_iterator trackerHits_end() const;
114 podio::RelationRange<edm4hep::SimTrackerHit> getTrackerHits() const;
115 std::size_t pulses_size() const;
116 edm4eic::SimPulse getPulses(std::size_t) const;
117 std::vector<edm4eic::SimPulse>::const_iterator pulses_begin() const;
118 std::vector<edm4eic::SimPulse>::const_iterator pulses_end() const;
119 podio::RelationRange<edm4eic::SimPulse> getPulses() const;
120 std::size_t particles_size() const;
121 edm4hep::MCParticle getParticles(std::size_t) const;
122 std::vector<edm4hep::MCParticle>::const_iterator particles_begin() const;
123 std::vector<edm4hep::MCParticle>::const_iterator particles_end() const;
124 podio::RelationRange<edm4hep::MCParticle> getParticles() const;
125 std::size_t amplitude_size() const;
126 float getAmplitude(std::size_t) const;
127 std::vector<float>::const_iterator amplitude_begin() const;
128 std::vector<float>::const_iterator amplitude_end() const;
129 podio::RelationRange<float> getAmplitude() const;
130
131
132 /// check whether the object is actually available
133 bool isAvailable() const;
134 /// disconnect from SimPulseObj instance
135 void unlink() { m_obj = podio::utils::MaybeSharedPtr<SimPulseObj>{nullptr}; }
136
137 bool operator==(const SimPulse& other) const { return m_obj == other.m_obj; }
138 bool operator==(const MutableSimPulse& other) const;
139
140 bool operator!=(const SimPulse& other) const { return !(*this == other); }
141 bool operator!=(const MutableSimPulse& other) const { return !(*this == other); }
142
143 // less comparison operator, so that objects can be e.g. stored in sets.
144 bool operator<(const SimPulse& other) const { return podio::detail::getOrderKey(*this) < podio::detail::getOrderKey(other); }
145
146 podio::ObjectID id() const { return getObjectID(); }
147
148 const podio::ObjectID getObjectID() const;
149
150 friend std::hash<SimPulse>;
151
152 friend void swap(SimPulse& a, SimPulse& b) {
153 using std::swap;
154 swap(a.m_obj, b.m_obj); // swap out the internal pointers
155 }
156
157private:
158 /// constructor from existing SimPulseObj
159 explicit SimPulse(podio::utils::MaybeSharedPtr<SimPulseObj> obj);
160 SimPulse(SimPulseObj* obj);
161
162 podio::utils::MaybeSharedPtr<SimPulseObj> m_obj{nullptr};
163};
164
165std::ostream& operator<<(std::ostream& o, const SimPulse& value);
166
167#if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
168void to_json(nlohmann::json& j, const SimPulse& value);
169#endif
170
171
172} // namespace edm4eic
173
174
175
176template<>
177struct std::hash<edm4eic::SimPulse> {
178 std::size_t operator()(const edm4eic::SimPulse& obj) const {
179 return std::hash<edm4eic::SimPulseObj*>{}(obj.m_obj.get());
180 }
181};
182
183
184// This is needed to avoid triggering opening every library in LD_LIBRARY_PATH
185// until it's fixed in ROOT. See https://github.com/root-project/root/issues/18489
186// and https://github.com/AIDASoft/podio/issues/770
187#if defined(__clang__)
188#pragma clang diagnostic push
189#pragma clang diagnostic ignored "-Wunknown-warning-option"
190#pragma clang diagnostic ignored "-Wdeprecated-redundant-constexpr-static-def"
191#pragma clang diagnostic ignored "-Wdeprecated"
192constexpr std::string_view edm4eic::SimPulse::typeName;
193#pragma clang diagnostic pop
194#elif defined(__GNUC__)
195#pragma GCC diagnostic push
196#pragma GCC diagnostic ignored "-Wdeprecated"
197constexpr std::string_view edm4eic::SimPulse::typeName;
198#pragma GCC diagnostic pop
199#endif
200
201#endif
Definition MutableSimPulse.h:39
Definition SimPulseCollectionData.h:33
Definition SimPulseCollection.h:137
Definition SimPulse.h:47
std::vector< edm4hep::SimCalorimeterHit >::const_iterator calorimeterHits_end() const
Definition SimPulse.cc:125
std::vector< edm4eic::SimPulse >::const_iterator pulses_begin() const
Definition SimPulse.cc:183
std::size_t amplitude_size() const
Definition SimPulse.cc:259
SimPulse & operator=(SimPulse other) &
copy-assignment operator
Definition SimPulse.cc:32
podio::RelationRange< edm4hep::MCParticle > getParticles() const
Definition SimPulse.cc:238
std::vector< float >::const_iterator amplitude_end() const
Definition SimPulse.cc:253
std::size_t pulses_size() const
Definition SimPulse.cc:195
podio::RelationRange< float > getAmplitude() const
Definition SimPulse.cc:270
std::vector< edm4hep::MCParticle >::const_iterator particles_begin() const
Definition SimPulse.cc:215
bool operator==(const SimPulse &other) const
Definition SimPulse.h:137
static SimPulse makeEmpty()
Definition SimPulse.cc:107
float getTime() const
Access the Start time for the pulse in [ns].
Definition SimPulse.cc:114
std::vector< edm4hep::SimCalorimeterHit >::const_iterator calorimeterHits_begin() const
Definition SimPulse.cc:119
std::vector< edm4hep::MCParticle >::const_iterator particles_end() const
Definition SimPulse.cc:221
podio::RelationRange< edm4hep::SimTrackerHit > getTrackerHits() const
Definition SimPulse.cc:174
friend class MutableSimPulse
Definition SimPulse.h:49
friend class SimPulseCollection
Definition SimPulse.h:50
~SimPulse()=default
destructor
podio::RelationRange< edm4hep::SimCalorimeterHit > getCalorimeterHits() const
Definition SimPulse.cc:142
podio::RelationRange< edm4eic::SimPulse > getPulses() const
Definition SimPulse.cc:206
SimPulse(const SimPulse &other)=default
copy constructor
bool operator<(const SimPulse &other) const
Definition SimPulse.h:144
std::vector< edm4hep::SimTrackerHit >::const_iterator trackerHits_begin() const
Definition SimPulse.cc:151
std::vector< float >::const_iterator amplitude_begin() const
Definition SimPulse.cc:247
std::vector< edm4hep::SimTrackerHit >::const_iterator trackerHits_end() const
Definition SimPulse.cc:157
bool operator!=(const SimPulse &other) const
Definition SimPulse.h:140
std::size_t calorimeterHits_size() const
Definition SimPulse.cc:131
friend class SimPulseCollectionIterator
Definition SimPulse.h:52
MutableSimPulse clone(bool cloneRelations=true) const
Definition SimPulse.cc:37
MutableSimPulse mutable_type
Definition SimPulse.h:56
std::size_t particles_size() const
Definition SimPulse.cc:227
std::vector< edm4eic::SimPulse >::const_iterator pulses_end() const
Definition SimPulse.cc:189
SimPulseCollection collection_type
Definition SimPulse.h:57
friend void swap(SimPulse &a, SimPulse &b)
Definition SimPulse.h:152
void unlink()
disconnect from SimPulseObj instance
Definition SimPulse.h:135
float getIntegral() const
Access the Total pulse integral in relevant units.
Definition SimPulse.cc:112
std::uint64_t getCellID() const
Access the ID of the readout cell for this pulse.
Definition SimPulse.cc:111
bool operator!=(const MutableSimPulse &other) const
Definition SimPulse.h:141
podio::ObjectID id() const
Definition SimPulse.h:146
float getInterval() const
Access the Time interval between amplitude values [ns].
Definition SimPulse.cc:115
std::size_t trackerHits_size() const
Definition SimPulse.cc:163
const edm4hep::Vector3f & getPosition() const
Access the Position the pulse is evaluated in world coordinates [mm].
Definition SimPulse.cc:113
static constexpr std::string_view typeName
Definition SimPulse.h:86
SimPulse & operator=(SimPulse other) &&=delete
bool isAvailable() const
check whether the object is actually available
Definition SimPulse.cc:282
const podio::ObjectID getObjectID() const
Definition SimPulse.cc:286
SimPulse()
default constructor
Definition SimPulse.cc:20
Definition SimPulseObj.h:22
Definition CalorimeterHit.cc:17
std::ostream & operator<<(std::ostream &o, const CalorimeterHit &value)
Definition CalorimeterHit.cc:103
Definition CalorimeterHit.h:31
OrderKey getOrderKey(const edm4eic::CalorimeterHit &obj)
Definition CalorimeterHit.cc:150
std::size_t operator()(const edm4eic::SimPulse &obj) const
Definition SimPulse.h:178