EDM4eic
EIC data model
Loading...
Searching...
No Matches
TrackSegment.h
Go to the documentation of this file.
1// AUTOMATICALLY GENERATED FILE - DO NOT EDIT
2
3#ifndef EDM4EIC_TrackSegment_H
4#define EDM4EIC_TrackSegment_H
5
7
9#include "podio/RelationRange.h"
10#include <vector>
11
12#include "podio/utilities/MaybeSharedPtr.h"
13#include "podio/detail/OrderKey.h"
14
15#include <ostream>
16#include <cstdint>
17
18#if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
19#include "nlohmann/json_fwd.hpp"
20#endif
21
22// forward declarations
23namespace edm4eic {
25class Track;
26class MutableTrack;
27}
28
29
30namespace podio::detail {
31// Internal function used in less comparison operators of the datatypes and interface types
32OrderKey getOrderKey(const edm4eic::TrackSegment& obj);
33};
34
35namespace edm4eic {
36
40
41/** @class TrackSegment
42 * A track segment defined by one or more points along a track.
43 * @author: S. Joosten
44 */
46
47 friend class MutableTrackSegment;
51 friend podio::detail::OrderKey podio::detail::getOrderKey(const TrackSegment & obj);
52
53public:
56
57 /// default constructor
59
60 /// Constructor initializing all members
61 TrackSegment(const float length, const float lengthError);
62
63 /// copy constructor
64 TrackSegment(const TrackSegment& other) = default;
65
66 /// copy-assignment operator
67 TrackSegment& operator=(TrackSegment other) &; // Rebind this to other's internal object
68 TrackSegment& operator=(TrackSegment other) && = delete; // Prevent rebinding temporary as the changes wouldn't persist
69
70 /// create a mutable deep-copy of the object with identical relations
71 /// if cloneRelations=false, the relations are not cloned and will be empty
72 MutableTrackSegment clone(bool cloneRelations=true) const;
73
74 /// destructor
75 ~TrackSegment() = default;
76
77 /// converting constructor from mutable object
79
80 static TrackSegment makeEmpty();
81
82public:
83
84 static constexpr std::string_view typeName = "edm4eic::TrackSegment";
85
86 /// Access the Pathlength from the first to the last point
87 float getLength() const;
88
89 /// Access the Error on the segment length
90 float getLengthError() const;
91
92
93 /// Access the Track used for this projection
94 const edm4eic::Track getTrack() const;
95
96 std::size_t points_size() const;
97 edm4eic::TrackPoint getPoints(std::size_t) const;
98 std::vector<edm4eic::TrackPoint>::const_iterator points_begin() const;
99 std::vector<edm4eic::TrackPoint>::const_iterator points_end() const;
100 podio::RelationRange<edm4eic::TrackPoint> getPoints() const;
101
102
103 /// check whether the object is actually available
104 bool isAvailable() const;
105 /// disconnect from TrackSegmentObj instance
106 void unlink() { m_obj = podio::utils::MaybeSharedPtr<TrackSegmentObj>{nullptr}; }
107
108 bool operator==(const TrackSegment& other) const { return m_obj == other.m_obj; }
109 bool operator==(const MutableTrackSegment& other) const;
110
111 bool operator!=(const TrackSegment& other) const { return !(*this == other); }
112 bool operator!=(const MutableTrackSegment& other) const { return !(*this == other); }
113
114 // less comparison operator, so that objects can be e.g. stored in sets.
115 bool operator<(const TrackSegment& other) const { return podio::detail::getOrderKey(*this) < podio::detail::getOrderKey(other); }
116
117 podio::ObjectID id() const { return getObjectID(); }
118
119 const podio::ObjectID getObjectID() const;
120
121 friend std::hash<TrackSegment>;
122
123 friend void swap(TrackSegment& a, TrackSegment& b) {
124 using std::swap;
125 swap(a.m_obj, b.m_obj); // swap out the internal pointers
126 }
127
128private:
129 /// constructor from existing TrackSegmentObj
130 explicit TrackSegment(podio::utils::MaybeSharedPtr<TrackSegmentObj> obj);
132
133 podio::utils::MaybeSharedPtr<TrackSegmentObj> m_obj{nullptr};
134};
135
136std::ostream& operator<<(std::ostream& o, const TrackSegment& value);
137
138#if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
139void to_json(nlohmann::json& j, const TrackSegment& value);
140#endif
141
142
143} // namespace edm4eic
144
145
146
147template<>
148struct std::hash<edm4eic::TrackSegment> {
149 std::size_t operator()(const edm4eic::TrackSegment& obj) const {
150 return std::hash<edm4eic::TrackSegmentObj*>{}(obj.m_obj.get());
151 }
152};
153
154
155// This is needed to avoid triggering opening every library in LD_LIBRARY_PATH
156// until it's fixed in ROOT. See https://github.com/root-project/root/issues/18489
157// and https://github.com/AIDASoft/podio/issues/770
158#if defined(__clang__)
159#pragma clang diagnostic push
160#pragma clang diagnostic ignored "-Wunknown-warning-option"
161#pragma clang diagnostic ignored "-Wdeprecated-redundant-constexpr-static-def"
162#pragma clang diagnostic ignored "-Wdeprecated"
163constexpr std::string_view edm4eic::TrackSegment::typeName;
164#pragma clang diagnostic pop
165#elif defined(__GNUC__)
166#pragma GCC diagnostic push
167#pragma GCC diagnostic ignored "-Wdeprecated"
168constexpr std::string_view edm4eic::TrackSegment::typeName;
169#pragma GCC diagnostic pop
170#endif
171
172#endif
Definition MutableTrack.h:40
Definition MutableTrackSegment.h:37
Definition Track.h:48
Definition TrackPoint.h:22
Definition TrackSegmentCollectionData.h:31
Definition TrackSegmentCollection.h:137
Definition TrackSegment.h:45
friend class TrackSegmentCollection
Definition TrackSegment.h:48
float getLength() const
Access the Pathlength from the first to the last point.
Definition TrackSegment.cc:68
friend class MutableTrackSegment
Definition TrackSegment.h:47
std::size_t points_size() const
Definition TrackSegment.cc:92
const podio::ObjectID getObjectID() const
Definition TrackSegment.cc:119
MutableTrackSegment clone(bool cloneRelations=true) const
Definition TrackSegment.cc:35
void unlink()
disconnect from TrackSegmentObj instance
Definition TrackSegment.h:106
~TrackSegment()=default
destructor
std::vector< edm4eic::TrackPoint >::const_iterator points_begin() const
Definition TrackSegment.cc:80
std::vector< edm4eic::TrackPoint >::const_iterator points_end() const
Definition TrackSegment.cc:86
bool isAvailable() const
check whether the object is actually available
Definition TrackSegment.cc:115
TrackSegment & operator=(TrackSegment other) &
copy-assignment operator
Definition TrackSegment.cc:30
podio::RelationRange< edm4eic::TrackPoint > getPoints() const
Definition TrackSegment.cc:103
TrackSegment & operator=(TrackSegment other) &&=delete
bool operator<(const TrackSegment &other) const
Definition TrackSegment.h:115
TrackSegment(const TrackSegment &other)=default
copy constructor
bool operator!=(const MutableTrackSegment &other) const
Definition TrackSegment.h:112
friend void swap(TrackSegment &a, TrackSegment &b)
Definition TrackSegment.h:123
friend class TrackSegmentCollectionIterator
Definition TrackSegment.h:50
TrackSegment()
default constructor
Definition TrackSegment.cc:21
const edm4eic::Track getTrack() const
Access the Track used for this projection.
Definition TrackSegment.cc:71
TrackSegmentCollection collection_type
Definition TrackSegment.h:55
podio::ObjectID id() const
Definition TrackSegment.h:117
bool operator==(const TrackSegment &other) const
Definition TrackSegment.h:108
static TrackSegment makeEmpty()
Definition TrackSegment.cc:64
MutableTrackSegment mutable_type
Definition TrackSegment.h:54
static constexpr std::string_view typeName
Definition TrackSegment.h:84
bool operator!=(const TrackSegment &other) const
Definition TrackSegment.h:111
float getLengthError() const
Access the Error on the segment length.
Definition TrackSegment.cc:69
Definition TrackSegmentObj.h:24
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::TrackSegment &obj) const
Definition TrackSegment.h:149