ndm  0.1.1
Axis.hh
1 #pragma once
2 #include <string>
3 #include <vector>
4 namespace NDM {
11 
12 class Axis {
13 public:
15  enum EMode { kAligned = 0, kFixed = 1 };
16 
17  Axis(double min = 0.0, double max = 1.0, EMode mode = kAligned, double delta = 1);
18  virtual ~Axis();
19 
21  void print() const;
23  void find(double v, double & min, double & max, std::string & path, int levelrequest = -1, int levelmax = 100);
25  void expand(char direction = '>', int power = 1);
27  void shrink(char direction = '>', int power = 1);
28 
30  void min(double m) { mMin = m; }
32  void max(double m) { mMax = m; }
34  void is_bin(bool b) { mIsBin = b; }
36  void minmax(double min, double max);
38  void level(unsigned int l) { mLevel = l; }
39 
41  double min() const { return mMin; }
43  double max() const { return mMax; }
45  bool is_bin() const { return mIsBin; }
47  double maxb() const { return mMaxB; }
49  double maxb_user() const { return (mMax * mMultiply - mShift); }
50 
52  void info(std::string i) { mInfo = i; }
54  std::string info() const { return mInfo; }
55 
57  double to_user(double v) const { return (v + mShift) / mMultiply; }
59  double to_internal(double v) const { return (v * mMultiply) - mShift; }
60 
62  unsigned int level() const { return mLevel; }
63  void split(std::vector<double> & mins, int level);
64 
65 private:
66  double mMin{0.0};
67  double mMax{1.0};
68  bool mIsBin{false};
69  EMode mMode{kAligned};
70  double mMaxB{1};
71  double mShift{0};
72  double mMultiply{1};
73  unsigned int mLevel{0};
74  double mMinDelta{1};
75  std::string mInfo{};
76 
77  int decimels_right(double num, double mult = 10, double min = 0.01, double max = 0.99);
78  int decimels_left(double num, double mult = 10, double min = 0.01);
79  void find(double & v, int & levelrequest, int & levelmax, int & currentlevel, double & min, double & max,
80  std::string & path);
81  void modify_range(char direction = '>', int power = 1);
82  void recalculate_range();
83 };
84 } // namespace NDM
void print() const
Prints axis info.
Definition: Axis.cc:215
void split(std::vector< double > &mins, int level)
Definition: Axis.cc:266
double mMaxB
Internal maximum.
Definition: Axis.hh:70
void info(std::string i)
Sets info string.
Definition: Axis.hh:52
void level(unsigned int l)
Sets level.
Definition: Axis.hh:38
void minmax(double min, double max)
Sets user defined minimum and maximum.
Definition: Axis.cc:74
int decimels_right(double num, double mult=10, double min=0.01, double max=0.99)
Definition: Axis.cc:225
void find(double v, double &min, double &max, std::string &path, int levelrequest=-1, int levelmax=100)
Find bin and print info for given value.
Definition: Axis.cc:83
double mMinDelta
Minimal delta of axis range.
Definition: Axis.hh:74
void max(double m)
Sets user defined maximum.
Definition: Axis.hh:32
double maxb_user() const
Returns internal maximum2.
Definition: Axis.hh:49
unsigned int mLevel
Level of division.
Definition: Axis.hh:73
Axis object in n-dimensional space
Definition: Axis.hh:12
EMode
Mode for axis.
Definition: Axis.hh:15
unsigned int level() const
Returns level.
Definition: Axis.hh:62
std::string mInfo
Some additional info for axis.
Definition: Axis.hh:75
void is_bin(bool b)
Sets user defined maximum.
Definition: Axis.hh:34
double maxb() const
Returns internal maximum.
Definition: Axis.hh:47
double min() const
Returns user defined minimum.
Definition: Axis.hh:41
double max() const
Returns user defined maximum.
Definition: Axis.hh:43
void shrink(char direction='>', int power=1)
Shrink range.
Definition: Axis.cc:164
double mMin
User defined minimum.
Definition: Axis.hh:66
void expand(char direction='>', int power=1)
Expand range.
Definition: Axis.cc:156
double mShift
Shift to the internal min/max parameters.
Definition: Axis.hh:71
void min(double m)
Sets user defined minimum.
Definition: Axis.hh:30
double to_user(double v) const
Convert interal to user format.
Definition: Axis.hh:57
void recalculate_range()
Definition: Axis.cc:33
double mMultiply
Multiply to the internal min/max parameters.
Definition: Axis.hh:72
EMode mMode
Axis mode.
Definition: Axis.hh:69
double to_internal(double v) const
Convert user to internal format.
Definition: Axis.hh:59
virtual ~Axis()
Definition: Axis.cc:26
Definition: Axis.cc:9
bool is_bin() const
Returns user defined maximum.
Definition: Axis.hh:45
void modify_range(char direction='>', int power=1)
Definition: Axis.cc:172
double mMax
User defined maximum.
Definition: Axis.hh:67
bool mIsBin
Min max is in bin/user format.
Definition: Axis.hh:68
std::string info() const
Returns info string.
Definition: Axis.hh:54
Axis(double min=0.0, double max=1.0, EMode mode=kAligned, double delta=1)
Definition: Axis.cc:10
int decimels_left(double num, double mult=10, double min=0.01)
Definition: Axis.cc:245