Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-04-02 08:12:45

0001 // Tell emacs that this is a C++ source
0002 //  -*- C++ -*-.
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