Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:09:48

0001 #ifndef AMISIC_Tools_Lookup_Tables_H
0002 #define AMISIC_Tools_Lookup_Tables_H
0003 
0004 #include <cstddef>
0005 #include <vector>
0006 
0007 namespace AMISIC {
0008   struct axis_mode {
0009     enum code {
0010       linear  = 1,
0011       log     = 2
0012     };
0013   };
0014 
0015   class axis {
0016   public:
0017     size_t m_nbins;
0018     double m_xmin, m_xmax, m_xstep;
0019     axis_mode::code m_mode;
0020     axis(const size_t & nbins,const double & xmin,const double & xmax,
0021      const axis_mode::code & mode=axis_mode::linear);
0022     axis(const axis & old)
0023         : axis(old.m_nbins, old.m_xmin, old.m_xmax, old.m_mode) {}
0024     ~axis() = default;
0025     double x(const size_t & bin) const;
0026     size_t bin(const double & x) const;
0027   };
0028 
0029   class OneDim_Table {
0030   private:
0031     axis m_x;
0032     std::vector<double> m_values;
0033   public:
0034     explicit OneDim_Table(const axis & xbins);
0035     void Fill(const size_t & xbin,const double & value);
0036     double operator()(const double & x) const;
0037     inline double Value(const size_t & xbin) const { return m_values[xbin]; }
0038     inline size_t Size()                     const { return m_values.size(); }
0039     inline const axis & GetAxis()            const { return m_x; }
0040   };
0041 
0042   class TwoDim_Table {
0043   private:
0044     axis m_x, m_y;
0045     std::vector<std::vector<double> > m_values;
0046   public:
0047     TwoDim_Table(const axis & xbins,const axis & ybins);
0048     void Fill(const size_t & xbin,const size_t & ybin,const double & value);
0049     double operator()(const double & x,const double & y) const;
0050     double Value(const size_t & xbin,const size_t & ybin) const {
0051       return m_values[xbin][ybin];
0052     }
0053   };
0054 }
0055 #endif