Jpp
Public Member Functions | Static Protected Member Functions | Protected Attributes | Friends | List of all members
JTOOLS::JQuantile Class Reference

Quantile calculator. More...

#include <JQuantile.hh>

Inheritance diagram for JTOOLS::JQuantile:
JLANG::JTitle

Public Member Functions

 JQuantile (const JTitle &title="", const int option=0)
 Constructor. More...
 
template<class iterator_type , class value_type , class result_type >
 JQuantile (const JTitle &title, iterator_type __begin, iterator_type __end, result_type value_type::*member, const double w=1.0)
 Constructor. More...
 
template<class iterator_type , class value_type , class result_type >
 JQuantile (const JTitle &title, iterator_type __begin, iterator_type __end, result_type(value_type::*function)() const, const double w=1.0)
 Constructor. More...
 
void reset ()
 Reset. More...
 
void put (const double x, const double w=1.0)
 Put value. More...
 
template<class iterator_type , class value_type , class result_type >
void put (iterator_type __begin, iterator_type __end, result_type value_type::*member, const double w=1.0)
 Put data. More...
 
template<class iterator_type , class value_type , class result_type >
void put (iterator_type __begin, iterator_type __end, result_type(value_type::*function)() const, const double w=1.0)
 Put data. More...
 
long long int getCount () const
 Get total count. More...
 
double getTotal () const
 Get total weight. More...
 
double getSum () const
 Get weighted sum. More...
 
double getMean () const
 Get mean value. More...
 
double getRMS () const
 Get RMS. More...
 
double getSTDev () const
 Get standard deviation. More...
 
double getDeviation (const bool relative=true) const
 Get maximal deviation from average. More...
 
bool hasAccuracy (const double precision) const
 Test relative accuracy. More...
 
double getQuantile (const double Q, const bool reverse=false) const
 Get quantile. More...
 
std::ostream & print (std::ostream &out, bool lpr=true) const
 Print quantile. More...
 
const std::string & getTitle () const
 Get title. More...
 
void setTitle (const std::string &title)
 Set title. More...
 

Static Protected Member Functions

template<class T >
static double getQuantile (T __begin, T __end, const double W)
 Get quantile. More...
 

Protected Attributes

double sum
 
double rms
 
double tot
 
double min
 
double max
 
long long int num
 
bool quantiles
 
std::multimap< double, double > buffer
 
std::string title
 

Friends

std::ostream & operator<< (std::ostream &out, const JQuantile &quantile)
 Print quantile. More...
 

Detailed Description

Quantile calculator.


This class acts as a zero-dimensional histogram.

Definition at line 34 of file JQuantile.hh.

Constructor & Destructor Documentation

◆ JQuantile() [1/3]

JTOOLS::JQuantile::JQuantile ( const JTitle title = "",
const int  option = 0 
)
inline

Constructor.

Parameters
titletitle
optionoption

Definition at line 44 of file JQuantile.hh.

45  :
46  JTitle (title),
47  quantiles(false)
48  {
49  reset();
50 
51  quantiles = (option > 0);
52  }

◆ JQuantile() [2/3]

template<class iterator_type , class value_type , class result_type >
JTOOLS::JQuantile::JQuantile ( const JTitle title,
iterator_type  __begin,
iterator_type  __end,
result_type value_type::*  member,
const double  w = 1.0 
)
inline

Constructor.


Set range according to minimal and maximal value in input data.

Parameters
titletitle
__beginbegin of data
__endend of data
memberpointer to data member
wweight

Definition at line 66 of file JQuantile.hh.

70  :
71  JTitle (title),
72  quantiles(true)
73  {
74  put(__begin, __end, member, w);
75  }

◆ JQuantile() [3/3]

template<class iterator_type , class value_type , class result_type >
JTOOLS::JQuantile::JQuantile ( const JTitle title,
iterator_type  __begin,
iterator_type  __end,
result_type(value_type::*)() const  function,
const double  w = 1.0 
)
inline

Constructor.


Set range according to minimal and maximal value in input data.

Parameters
titletitle
__beginbegin of data
__endend of data
functionpointer to member method
wweight

Definition at line 89 of file JQuantile.hh.

93  :
94  JTitle (title),
95  quantiles(true)
96  {
97  put(__begin, __end, function, w);
98  }

Member Function Documentation

◆ reset()

void JTOOLS::JQuantile::reset ( )
inline

Reset.

Definition at line 104 of file JQuantile.hh.

105  {
106  sum = 0.0;
107  rms = 0.0;
108  tot = 0.0;
109  num = 0;
110  min = +std::numeric_limits<double>::max();
111  max = -std::numeric_limits<double>::max();
112 
113  buffer.clear();
114  }

◆ put() [1/3]

void JTOOLS::JQuantile::put ( const double  x,
const double  w = 1.0 
)
inline

Put value.

Parameters
xvalue
wweight

Definition at line 123 of file JQuantile.hh.

124  {
125  sum += w*x;
126  rms += w*x*x;
127  tot += w;
128  num += 1;
129  min = std::min(min, x);
130  max = std::max(max, x);
131 
132  if (quantiles) {
133  buffer.insert(std::make_pair(x,w));
134  }
135  }

◆ put() [2/3]

template<class iterator_type , class value_type , class result_type >
void JTOOLS::JQuantile::put ( iterator_type  __begin,
iterator_type  __end,
result_type value_type::*  member,
const double  w = 1.0 
)
inline

Put data.

Parameters
__beginbegin of data
__endend of data
memberpointer to data member
wweight

Definition at line 147 of file JQuantile.hh.

151  {
152  for (iterator_type i = __begin; i != __end; ++i) {
153  put((*i).*member, w);
154  }
155  }

◆ put() [3/3]

template<class iterator_type , class value_type , class result_type >
void JTOOLS::JQuantile::put ( iterator_type  __begin,
iterator_type  __end,
result_type(value_type::*)() const  function,
const double  w = 1.0 
)
inline

Put data.

Parameters
__beginbegin of data
__endend of data
functionpointer to member method
wweight

Definition at line 167 of file JQuantile.hh.

171  {
172  for (iterator_type i = __begin; i != __end; ++i) {
173  put(((*i).*function)(), w);
174  }
175  }

◆ getCount()

long long int JTOOLS::JQuantile::getCount ( ) const
inline

Get total count.

Returns
count

Definition at line 183 of file JQuantile.hh.

184  {
185  return num;
186  }

◆ getTotal()

double JTOOLS::JQuantile::getTotal ( ) const
inline

Get total weight.

Returns
weight

Definition at line 194 of file JQuantile.hh.

195  {
196  return tot;
197  }

◆ getSum()

double JTOOLS::JQuantile::getSum ( ) const
inline

Get weighted sum.

Returns
weighted sum

Definition at line 206 of file JQuantile.hh.

207  {
208  return sum;
209  }

◆ getMean()

double JTOOLS::JQuantile::getMean ( ) const
inline

Get mean value.

Returns
mean value

Definition at line 217 of file JQuantile.hh.

218  {
219  if (tot != 0.0)
220  return sum / tot;
221  else
222  THROW(JDivisionByZero, "JQuantile::getMean()");
223  }

◆ getRMS()

double JTOOLS::JQuantile::getRMS ( ) const
inline

Get RMS.

Returns
RMS

Definition at line 231 of file JQuantile.hh.

232  {
233  if (tot != 0.0)
234  return sqrt(rms/tot);
235  else
236  THROW(JDivisionByZero, "JQuantile::getRMS()");
237  }

◆ getSTDev()

double JTOOLS::JQuantile::getSTDev ( ) const
inline

Get standard deviation.

Returns
standard deviation

Definition at line 245 of file JQuantile.hh.

246  {
247  if (tot != 0.0)
248  return sqrt(rms*tot - sum*sum)/tot;
249  else
250  THROW(JDivisionByZero, "JQuantile::getSTDev()");
251  }

◆ getDeviation()

double JTOOLS::JQuantile::getDeviation ( const bool  relative = true) const
inline

Get maximal deviation from average.

Parameters
relativerelative to average or absolute
Returns
deviation

Definition at line 260 of file JQuantile.hh.

261  {
262  if (relative)
263  return std::max(max - getMean(), getMean() - min);
264  else
265  return std::max(fabs(max), fabs(min));
266  }

◆ hasAccuracy()

bool JTOOLS::JQuantile::hasAccuracy ( const double  precision) const
inline

Test relative accuracy.

Parameters
precisionrelative precision
Returns
true if reached accuracy; else false

Definition at line 275 of file JQuantile.hh.

276  {
277  return getCount() > 3 && getSTDev() < precision * getMean();
278  }

◆ getQuantile() [1/2]

double JTOOLS::JQuantile::getQuantile ( const double  Q,
const bool  reverse = false 
) const
inline

Get quantile.

Parameters
Qquantile
reversereverse
Returns
value

Definition at line 288 of file JQuantile.hh.

289  {
290  if (quantiles) {
291 
292  double W = 0.0;
293 
294  for (std::map<double, double>::const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
295  W += i->second;
296  }
297 
298  if (reverse)
299  return getQuantile(buffer.rbegin(), buffer.rend(), Q*W);
300  else
301  return getQuantile(buffer. begin(), buffer. end(), Q*W);
302  }
303 
304  THROW(JNoValue, "JQuantile::getQuantile()");
305  }

◆ print()

std::ostream& JTOOLS::JQuantile::print ( std::ostream &  out,
bool  lpr = true 
) const
inline

Print quantile.

Parameters
outoutput stream
lprlong print

Definition at line 314 of file JQuantile.hh.

315  {
316  using namespace std;
317 
318  const int nc = getTitle().size();
319 
320  if (lpr) {
321  out << setw(nc) << left << " " << ' '
322  << setw(10) << left << " mean" << ' '
323  << setw(10) << left << " STD" << ' '
324  << setw(10) << left << " deviation" << endl;
325  }
326 
327  out << setw(nc) << left << getTitle() << ' '
328  << SCIENTIFIC(10,2) << getMean() << ' '
329  << SCIENTIFIC(10,2) << getSTDev() << ' '
330  << SCIENTIFIC(10,2) << getDeviation(false) << endl;
331 
332  return out;
333  }

◆ getQuantile() [2/2]

template<class T >
static double JTOOLS::JQuantile::getQuantile ( __begin,
__end,
const double  W 
)
inlinestaticprotected

Get quantile.

Parameters
__beginbegin of data
__endend of data
Wweight
Returns
value

Definition at line 369 of file JQuantile.hh.

370  {
371  double w = 0.0;
372 
373  for (T i = __begin; i != __end; ++i) {
374 
375  w += i->second;
376 
377  if (w >= W) {
378  return i->first;
379  }
380  }
381 
382  THROW(JNoValue, "JQuantile::getQuantile()");
383  }

◆ getTitle()

const std::string& JLANG::JTitle::getTitle ( ) const
inlineinherited

Get title.

Returns
title

Definition at line 55 of file JTitle.hh.

56  {
57  return this->title;
58  }

◆ setTitle()

void JLANG::JTitle::setTitle ( const std::string &  title)
inlineinherited

Set title.

Parameters
titletitle

Definition at line 66 of file JTitle.hh.

67  {
68  this->title = title;
69  }

Friends And Related Function Documentation

◆ operator<<

std::ostream& operator<< ( std::ostream &  out,
const JQuantile quantile 
)
friend

Print quantile.

Parameters
outoutput stream
quantilequantile
Returns
output stream

Definition at line 343 of file JQuantile.hh.

344  {
345  return quantile.print(out, getLongprint(out));
346  }

Member Data Documentation

◆ sum

double JTOOLS::JQuantile::sum
protected

Definition at line 349 of file JQuantile.hh.

◆ rms

double JTOOLS::JQuantile::rms
protected

Definition at line 350 of file JQuantile.hh.

◆ tot

double JTOOLS::JQuantile::tot
protected

Definition at line 351 of file JQuantile.hh.

◆ min

double JTOOLS::JQuantile::min
protected

Definition at line 352 of file JQuantile.hh.

◆ max

double JTOOLS::JQuantile::max
protected

Definition at line 353 of file JQuantile.hh.

◆ num

long long int JTOOLS::JQuantile::num
protected

Definition at line 354 of file JQuantile.hh.

◆ quantiles

bool JTOOLS::JQuantile::quantiles
protected

Definition at line 356 of file JQuantile.hh.

◆ buffer

std::multimap<double, double> JTOOLS::JQuantile::buffer
protected

Definition at line 357 of file JQuantile.hh.

◆ title

std::string JLANG::JTitle::title
protectedinherited

Definition at line 73 of file JTitle.hh.


The documentation for this class was generated from the following file:
JTOOLS::JQuantile::buffer
std::multimap< double, double > buffer
Definition: JQuantile.hh:357
JTOOLS::w
data_type w[N+1][M+1]
Definition: JPolint.hh:708
JTOOLS::JQuantile::getCount
long long int getCount() const
Get total count.
Definition: JQuantile.hh:183
JTOOLS::JQuantile::quantiles
bool quantiles
Definition: JQuantile.hh:356
JTOOLS::JQuantile::getDeviation
double getDeviation(const bool relative=true) const
Get maximal deviation from average.
Definition: JQuantile.hh:260
JTOOLS::JQuantile::min
double min
Definition: JQuantile.hh:352
JTOOLS::JQuantile::num
long long int num
Definition: JQuantile.hh:354
JTOOLS::JQuantile::getSTDev
double getSTDev() const
Get standard deviation.
Definition: JQuantile.hh:245
JLANG::JTitle::JTitle
JTitle()
Default constructor.
Definition: JTitle.hh:24
JTOOLS::JQuantile::sum
double sum
Definition: JQuantile.hh:349
getLongprint
bool getLongprint(std::ostream &out)
Get long print option.
Definition: JPrint.hh:157
JTOOLS::JQuantile::put
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:123
JTOOLS::JQuantile::rms
double rms
Definition: JQuantile.hh:350
JLANG::JTitle::getTitle
const std::string & getTitle() const
Get title.
Definition: JTitle.hh:55
THROW
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:669
JTOOLS::JQuantile::print
std::ostream & print(std::ostream &out, bool lpr=true) const
Print quantile.
Definition: JQuantile.hh:314
JTOOLS::JQuantile::max
double max
Definition: JQuantile.hh:353
SCIENTIFIC
Auxiliary data structure for floating point format specification.
Definition: JPrint.hh:518
std::map
Definition: JSTDTypes.hh:16
JTOOLS::JQuantile::getMean
double getMean() const
Get mean value.
Definition: JQuantile.hh:217
JTOOLS::JQuantile::tot
double tot
Definition: JQuantile.hh:351
JTOOLS::JQuantile::getQuantile
double getQuantile(const double Q, const bool reverse=false) const
Get quantile.
Definition: JQuantile.hh:288
JTOOLS::JQuantile::reset
void reset()
Reset.
Definition: JQuantile.hh:104
std
Definition: jaanetDictionary.h:36
JLANG::JTitle::title
std::string title
Definition: JTitle.hh:73