File indexing completed on 2025-07-11 08:04:33
0001
0002
0003 #ifndef ACTSPODIOEDM_TrackState_H
0004 #define ACTSPODIOEDM_TrackState_H
0005
0006 #include "ActsPodioEdm/Surface.h"
0007 #include "ActsPodioEdm/TrackStateInfo.h"
0008 #include "ActsPodioEdm/TrackStateObj.h"
0009
0010 #include <cstdint>
0011 #include <ostream>
0012
0013 #include "podio/detail/OrderKey.h"
0014 #include "podio/utilities/MaybeSharedPtr.h"
0015
0016 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0017 #include "nlohmann/json_fwd.hpp"
0018 #endif
0019
0020
0021 namespace ActsPodioEdm {
0022 class TrackStateCollection;
0023 }
0024
0025 namespace podio::detail {
0026
0027
0028 OrderKey getOrderKey(const ActsPodioEdm::TrackState& obj);
0029 };
0030
0031 namespace ActsPodioEdm {
0032
0033 class MutableTrackState;
0034 class TrackStateCollection;
0035 class TrackStateCollectionData;
0036
0037
0038
0039
0040
0041 class TrackState {
0042 friend class MutableTrackState;
0043 friend class TrackStateCollection;
0044 friend class ActsPodioEdm::TrackStateCollectionData;
0045 friend class TrackStateCollectionIterator;
0046 friend podio::detail::OrderKey podio::detail::getOrderKey(
0047 const TrackState& obj);
0048
0049 public:
0050 using mutable_type = MutableTrackState;
0051 using collection_type = TrackStateCollection;
0052
0053
0054 TrackState();
0055
0056
0057 TrackState(ActsPodioEdm::TrackStateInfo data,
0058 ActsPodioEdm::Surface referenceSurface);
0059
0060
0061 TrackState(const TrackState& other) = default;
0062
0063
0064 TrackState& operator=(TrackState other);
0065
0066
0067
0068 MutableTrackState clone(bool cloneRelations = true) const;
0069
0070
0071 ~TrackState() = default;
0072
0073
0074 TrackState(const MutableTrackState& other);
0075
0076 static TrackState makeEmpty();
0077
0078 public:
0079 static constexpr auto typeName = "ActsPodioEdm::TrackState";
0080
0081
0082 const ActsPodioEdm::TrackStateInfo& getData() const;
0083
0084
0085 const ActsPodioEdm::Surface& getReferenceSurface() const;
0086
0087
0088 bool isAvailable() const;
0089
0090 void unlink() {
0091 m_obj = podio::utils::MaybeSharedPtr<TrackStateObj>{nullptr};
0092 }
0093
0094 bool operator==(const TrackState& other) const {
0095 return m_obj == other.m_obj;
0096 }
0097 bool operator==(const MutableTrackState& other) const;
0098
0099 bool operator!=(const TrackState& other) const { return !(*this == other); }
0100 bool operator!=(const MutableTrackState& other) const {
0101 return !(*this == other);
0102 }
0103
0104
0105 bool operator<(const TrackState& other) const {
0106 return podio::detail::getOrderKey(*this) <
0107 podio::detail::getOrderKey(other);
0108 }
0109
0110 podio::ObjectID id() const { return getObjectID(); }
0111
0112 const podio::ObjectID getObjectID() const;
0113
0114 friend void swap(TrackState& a, TrackState& b) {
0115 using std::swap;
0116 swap(a.m_obj, b.m_obj);
0117 }
0118
0119 private:
0120
0121 explicit TrackState(podio::utils::MaybeSharedPtr<TrackStateObj> obj);
0122 TrackState(TrackStateObj* obj);
0123
0124 podio::utils::MaybeSharedPtr<TrackStateObj> m_obj{nullptr};
0125 };
0126
0127 std::ostream& operator<<(std::ostream& o, const TrackState& value);
0128
0129 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0130 void to_json(nlohmann::json& j, const TrackState& value);
0131 #endif
0132
0133 }
0134
0135 #endif