File indexing completed on 2026-09-02 09:05:45
0001
0002
0003 #ifndef EDM4EIC_MutableTrajectory_H
0004 #define EDM4EIC_MutableTrajectory_H
0005
0006 #include "edm4eic/TrajectoryObj.h"
0007
0008 #include "edm4eic/Trajectory.h"
0009
0010 #include "edm4eic/Measurement2D.h"
0011 #include "edm4eic/TrackParameters.h"
0012 #include "podio/RelationRange.h"
0013 #include <cstdint>
0014 #include <vector>
0015
0016 #include "podio/utilities/MaybeSharedPtr.h"
0017
0018 #include <cstdint>
0019
0020 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0021 #include "nlohmann/json_fwd.hpp"
0022 #endif
0023
0024
0025 namespace edm4eic {
0026 class TrajectoryCollection;
0027 class TrackSeed;
0028 class MutableTrackSeed;
0029 }
0030
0031
0032 namespace edm4eic {
0033
0034
0035
0036
0037
0038
0039 class MutableTrajectory {
0040
0041 friend class TrajectoryCollection;
0042 friend class TrajectoryMutableCollectionIterator;
0043 friend class Trajectory;
0044
0045 public:
0046 using object_type = Trajectory;
0047 using collection_type = TrajectoryCollection;
0048
0049
0050 MutableTrajectory() = default;
0051
0052
0053 MutableTrajectory(const std::uint32_t type, const std::uint32_t nStates, const std::uint32_t nMeasurements, const std::uint32_t nOutliers, const std::uint32_t nHoles, const std::uint32_t nSharedHits);
0054
0055
0056 MutableTrajectory(const MutableTrajectory& other) = default;
0057
0058
0059 MutableTrajectory& operator=(MutableTrajectory other) &;
0060 MutableTrajectory& operator=(MutableTrajectory other) && = delete;
0061
0062
0063
0064 MutableTrajectory clone(bool cloneRelations=true) const;
0065
0066
0067 ~MutableTrajectory() = default;
0068
0069
0070 public:
0071
0072
0073 std::uint32_t getType() const;
0074
0075
0076 std::uint32_t getNStates() const;
0077
0078
0079 std::uint32_t getNMeasurements() const;
0080
0081
0082 std::uint32_t getNOutliers() const;
0083
0084
0085 std::uint32_t getNHoles() const;
0086
0087
0088 std::uint32_t getNSharedHits() const;
0089
0090
0091
0092 const edm4eic::TrackSeed getSeed() const;
0093
0094
0095 void setType(const std::uint32_t type);
0096
0097 std::uint32_t& getType();
0098
0099
0100 void setNStates(const std::uint32_t nStates);
0101
0102 std::uint32_t& getNStates();
0103
0104
0105 void setNMeasurements(const std::uint32_t nMeasurements);
0106
0107 std::uint32_t& getNMeasurements();
0108
0109
0110 void setNOutliers(const std::uint32_t nOutliers);
0111
0112 std::uint32_t& getNOutliers();
0113
0114
0115 void setNHoles(const std::uint32_t nHoles);
0116
0117 std::uint32_t& getNHoles();
0118
0119
0120 void setNSharedHits(const std::uint32_t nSharedHits);
0121
0122 std::uint32_t& getNSharedHits();
0123
0124
0125
0126 void setSeed(const edm4eic::TrackSeed& value);
0127
0128 void addToTrackParameters(const edm4eic::TrackParameters&);
0129 std::size_t trackParameters_size() const;
0130 edm4eic::TrackParameters getTrackParameters(std::size_t) const;
0131 std::vector<edm4eic::TrackParameters>::const_iterator trackParameters_begin() const;
0132 std::vector<edm4eic::TrackParameters>::const_iterator trackParameters_end() const;
0133 podio::RelationRange<edm4eic::TrackParameters> getTrackParameters() const;
0134 void addToMeasurements_deprecated(const edm4eic::Measurement2D&);
0135 std::size_t measurements_deprecated_size() const;
0136 edm4eic::Measurement2D getMeasurements_deprecated(std::size_t) const;
0137 std::vector<edm4eic::Measurement2D>::const_iterator measurements_deprecated_begin() const;
0138 std::vector<edm4eic::Measurement2D>::const_iterator measurements_deprecated_end() const;
0139 podio::RelationRange<edm4eic::Measurement2D> getMeasurements_deprecated() const;
0140 void addToOutliers_deprecated(const edm4eic::Measurement2D&);
0141 std::size_t outliers_deprecated_size() const;
0142 edm4eic::Measurement2D getOutliers_deprecated(std::size_t) const;
0143 std::vector<edm4eic::Measurement2D>::const_iterator outliers_deprecated_begin() const;
0144 std::vector<edm4eic::Measurement2D>::const_iterator outliers_deprecated_end() const;
0145 podio::RelationRange<edm4eic::Measurement2D> getOutliers_deprecated() const;
0146 void addToMeasurementChi2(const float&);
0147 std::size_t measurementChi2_size() const;
0148 float getMeasurementChi2(std::size_t) const;
0149 std::vector<float>::const_iterator measurementChi2_begin() const;
0150 std::vector<float>::const_iterator measurementChi2_end() const;
0151 podio::RelationRange<float> getMeasurementChi2() const;
0152 void addToOutlierChi2(const float&);
0153 std::size_t outlierChi2_size() const;
0154 float getOutlierChi2(std::size_t) const;
0155 std::vector<float>::const_iterator outlierChi2_begin() const;
0156 std::vector<float>::const_iterator outlierChi2_end() const;
0157 podio::RelationRange<float> getOutlierChi2() const;
0158
0159
0160
0161
0162 bool isAvailable() const;
0163
0164 void unlink() { m_obj = podio::utils::MaybeSharedPtr<TrajectoryObj>{nullptr}; }
0165
0166 constexpr bool operator==(const MutableTrajectory& other) const { return m_obj == other.m_obj; }
0167 bool operator==(const Trajectory& other) const;
0168
0169 constexpr bool operator!=(const MutableTrajectory& other) const { return !(*this == other); }
0170 bool operator!=(const Trajectory& other) const { return !(*this == other); }
0171
0172
0173 bool operator<(const MutableTrajectory& other) const { return podio::detail::getOrderKey(*this) < podio::detail::getOrderKey(other); }
0174
0175 podio::ObjectID id() const { return getObjectID(); }
0176
0177 const podio::ObjectID getObjectID() const;
0178
0179 friend std::hash<MutableTrajectory>;
0180
0181 friend void swap(MutableTrajectory& a, MutableTrajectory& b) {
0182 using std::swap;
0183 swap(a.m_obj, b.m_obj);
0184 }
0185
0186 private:
0187
0188 explicit MutableTrajectory(podio::utils::MaybeSharedPtr<TrajectoryObj> obj);
0189
0190 podio::utils::MaybeSharedPtr<TrajectoryObj> m_obj{new TrajectoryObj{}, podio::utils::MarkOwned};
0191 };
0192
0193 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0194 void to_json(nlohmann::json& j, const MutableTrajectory& value);
0195 #endif
0196
0197
0198 }
0199
0200
0201
0202 template<>
0203 struct std::hash<edm4eic::MutableTrajectory> {
0204 std::size_t operator()(const edm4eic::MutableTrajectory& obj) const {
0205 return std::hash<edm4eic::TrajectoryObj*>{}(obj.m_obj.get());
0206 }
0207 };
0208
0209
0210 #endif