File indexing completed on 2026-04-02 08:12:45
0001
0002
0003 #ifndef EVENTPLANEINFO_EVENTPLANEINFOV2_H
0004 #define EVENTPLANEINFO_EVENTPLANEINFOV2_H
0005
0006 #include "Eventplaneinfo.h"
0007
0008 #include <cstddef> // for size_t
0009 #include <iostream>
0010 #include <limits>
0011 #include <utility> // for pair, make_pair
0012 #include <vector>
0013
0014 class PHObject;
0015
0016 class Eventplaneinfov2 : public Eventplaneinfo
0017 {
0018 public:
0019 Eventplaneinfov2() = default;
0020 ~Eventplaneinfov2() override = default;
0021
0022 Eventplaneinfov2(const Eventplaneinfov2&) = default;
0023 Eventplaneinfov2& operator=(const Eventplaneinfov2&) = default;
0024 Eventplaneinfov2(Eventplaneinfov2&&) = default;
0025 Eventplaneinfov2& operator=(Eventplaneinfov2&&) = default;
0026
0027 void identify(std::ostream& os = std::cout) const override;
0028 void Reset() override { *this = Eventplaneinfov2(); }
0029 PHObject* CloneMe() const override { return new Eventplaneinfov2(*this); }
0030
0031 void set_qvector(const std::vector<std::pair<double, double>>& Qvec) override { mQvec = Qvec; }
0032 void set_qvector_raw(const std::vector<std::pair<double, double>>& Qvec) override { mQvec_raw = Qvec; }
0033 void set_qvector_recentered(const std::vector<std::pair<double, double>>& Qvec) override { mQvec_recentered = Qvec; }
0034 void set_shifted_psi(const std::vector<double>& Psi_Shifted) override { mPsi_Shifted = Psi_Shifted; }
0035 std::pair<double, double> get_qvector(unsigned int order) const override { return safe_qvec(mQvec, order); }
0036 std::pair<double, double> get_qvector_raw(unsigned int order) const override { return safe_qvec(mQvec_raw, order); }
0037 std::pair<double, double> get_qvector_recentered(unsigned int order) const override { return safe_qvec(mQvec_recentered, order); }
0038 void set_ring_qvector(const std::vector<std::vector<std::pair<double, double>>>& Qvec) override { ring_Qvec = Qvec; }
0039 std::pair<double, double> get_ring_qvector(int ring_index, unsigned int order) const override
0040 {
0041 if (ring_index < 0 || static_cast<size_t>(ring_index) >= ring_Qvec.size())
0042 {
0043 return {std::numeric_limits<double>::quiet_NaN(), std::numeric_limits<double>::quiet_NaN()};
0044 }
0045 return safe_qvec(ring_Qvec[ring_index], order);
0046 }
0047 double get_ring_psi(int ring_index, unsigned int order) const override
0048 {
0049 auto q = get_ring_qvector(ring_index, order);
0050 return GetPsi(q.first, q.second, order);
0051 }
0052
0053 double GetPsi(double Qx, double Qy, unsigned int order) const override;
0054 double get_psi(unsigned int order) const override
0055 {
0056 auto q = get_qvector(order);
0057 return GetPsi(q.first, q.second, order);
0058 }
0059 double get_shifted_psi(unsigned int order) const override
0060 {
0061 if (order <= 0 || order > mPsi_Shifted.size())
0062 {
0063 return std::numeric_limits<double>::quiet_NaN();
0064 }
0065 return mPsi_Shifted[order - 1];
0066 }
0067
0068 private:
0069 static std::pair<double, double> safe_qvec(const std::vector<std::pair<double, double>>& v, unsigned int order)
0070 {
0071 if (order <= 0 || order > v.size())
0072 {
0073 return {std::numeric_limits<double>::quiet_NaN(), std::numeric_limits<double>::quiet_NaN()};
0074 }
0075 return v[order - 1];
0076 }
0077
0078 std::vector<std::pair<double, double>> mQvec;
0079 std::vector<std::pair<double, double>> mQvec_raw;
0080 std::vector<std::pair<double, double>> mQvec_recentered;
0081 std::vector<double> mPsi_Shifted;
0082 std::vector<std::vector<std::pair<double, double>>> ring_Qvec;
0083 ClassDefOverride(Eventplaneinfov2, 1);
0084 };
0085
0086 #endif