1 #ifndef NPSTAT_DUALHISTOAXIS_HH_
2 #define NPSTAT_DUALHISTOAXIS_HH_
28 : a_(a), u_(1U, 0.0, 1.0), uniform_(
false) {}
31 : a_(dummy_vec()), u_(u), uniform_(
true) {}
34 const char* label = 0)
35 : a_(binEdges, label), u_(1U, 0.0, 1.0), uniform_(
false) {}
38 const char* label = 0)
39 : a_(dummy_vec()), u_(nBins, min, max, label), uniform_(
true) {}
42 inline bool isUniform()
const {
return uniform_;}
44 inline double min()
const
45 {
return uniform_ ? u_.
min() : a_.
min();}
47 inline double max()
const
48 {
return uniform_ ? u_.max() : a_.max();}
51 {
return uniform_ ? u_.interval() : a_.interval();}
53 inline double length()
const
54 {
return uniform_ ? u_.length() : a_.length();}
56 inline unsigned nBins()
const
57 {
return uniform_ ? u_.nBins() : a_.nBins();}
59 inline double binWidth(
const int binNum)
const
60 {
return uniform_ ? u_.binWidth(binNum) : a_.binWidth(binNum);}
62 inline const std::string& label()
const
63 {
return uniform_ ? u_.label() : a_.label();}
65 inline double binCenter(
const int binNum)
const
68 inline double leftBinEdge(
const int binNum)
const
71 inline double rightBinEdge(
const int binNum)
const
84 {
return uniform_ ?
static_cast<const NUHistoAxis*
>(0) : &a_;}
86 inline const HistoAxis* getHistoAxis()
const
87 {
return uniform_ ? &u_ :
static_cast<const HistoAxis*
>(0);}
106 const bool mapLeftEdgeTo0=
true)
const
117 {
return uniform_ == r.uniform_ && a_ == r.a_ && u_ == r.u_;}
119 inline bool operator!=(
const DualHistoAxis& r)
const
120 {
return !(*
this == r);}
125 return uniform_ == r.uniform_ &&
132 {
return DualHistoAxis(newBins, min(), max(), label().c_str());}
136 inline gs::ClassId classId()
const {
return gs::ClassId(*
this);}
137 bool write(std::ostream& of)
const;
140 static inline const char* classname() {
return "npstat::DualHistoAxis";}
141 static inline unsigned version() {
return 1;}
142 static DualHistoAxis* read(
const gs::ClassId&
id, std::istream& in);
149 template <
typename Numeric,
class Axis>
friend class HistoND;
151 inline unsigned overflowIndex(
152 const double x,
unsigned*
binNumber)
const
154 return uniform_ ? u_.overflowIndex(x,
binNumber) :
158 inline static std::vector<double> dummy_vec()
160 std::vector<double> vec(2, 0.0);
167 inline std::pair<double,double> range()
const
168 {
return uniform_ ? u_.range() : a_.range();}
174 inline DualHistoAxis()
175 : a_(dummy_vec()), u_(1U, 0.0, 1.0), uniform_(true) {}
Histogram axis with equidistant bins.
Histogram axis with non-uniform bin spacing.
Definition: DualHistoAxis.hh:24
unsigned closestValidBin(const double x) const
Definition: DualHistoAxis.hh:113
DualHistoAxis rebin(const unsigned newBins) const
Definition: DualHistoAxis.hh:131
double fltBinNumber(const double x, const bool mapLeftEdgeTo0=true) const
Definition: DualHistoAxis.hh:105
void setLabel(const char *newlabel)
Definition: DualHistoAxis.hh:91
int binNumber(const double x) const
Definition: DualHistoAxis.hh:98
bool isClose(const DualHistoAxis &r, const double tol) const
Definition: DualHistoAxis.hh:123
const NUHistoAxis * getNUHistoAxis() const
Definition: DualHistoAxis.hh:83
Definition: HistoAxis.hh:31
double min() const
Definition: HistoAxis.hh:42
double fltBinNumber(const double x, const bool mapLeftEdgeTo0=true) const
Definition: HistoAxis.hh:99
double leftBinEdge(const int binNum) const
Definition: HistoAxis.hh:58
void setLabel(const char *newlabel)
Definition: HistoAxis.hh:70
bool isClose(const HistoAxis &, double tol) const
int binNumber(double x) const
Interval< double > binInterval(const int binNum) const
Definition: HistoAxis.hh:66
unsigned closestValidBin(double x) const
double rightBinEdge(const int binNum) const
Definition: HistoAxis.hh:62
double binCenter(const int binNum) const
Definition: HistoAxis.hh:54
Definition: Interval.hh:29
Definition: NUHistoAxis.hh:28
double leftBinEdge(const int binNum) const
Definition: NUHistoAxis.hh:52
double rightBinEdge(const int binNum) const
Definition: NUHistoAxis.hh:56
bool isClose(const NUHistoAxis &, double tol) const
Interval< double > binInterval(const int binNum) const
Definition: NUHistoAxis.hh:64
unsigned closestValidBin(double x) const
void setLabel(const char *newlabel)
Definition: NUHistoAxis.hh:69
double binCenter(const int binNum) const
Definition: NUHistoAxis.hh:60
double min() const
Definition: NUHistoAxis.hh:39
double fltBinNumber(double x, bool mapLeftEdgeTo0=true) const
int binNumber(double x) const
Definition: AbsArrayProjector.hh:14