Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Static Protected Member Functions | Protected Attributes | Friends | List of all members
JTOOLS::JQuantile Struct Reference

Quantile calculator. More...

#include <JQuantile.hh>

Inheritance diagram for JTOOLS::JQuantile:
JTOOLS::JQuantile_t JMATH::JMath< JQuantile > JLANG::JTitle

Public Member Functions

 JQuantile (const JTitle &title="", const bool quantiles=false)
 Constructor. More...
 
template<class iterator_type >
 JQuantile (const JTitle &title, iterator_type __begin, iterator_type __end, const bool quantiles=false, 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::*member, const bool quantiles=false, 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 bool quantiles=false, const double w=1.0)
 Constructor. More...
 
JQuantileadd (const JQuantile &Q)
 Add quantile. More...
 
void put (const double x, const double w=1.0)
 Put value. More...
 
template<class iterator_type >
void put (iterator_type __begin, iterator_type __end, 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::*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 getMin () const
 Get minimum. More...
 
double getMax () const
 Get maximum. 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...
 
void reset ()
 Reset. More...
 
const std::string & getTitle () const
 Get title. More...
 
void setTitle (const std::string &title)
 Set title. More...
 
JQuantilemul (const JNullType &object)
 Multiply with object. 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 83 of file JQuantile.hh.

Constructor & Destructor Documentation

JTOOLS::JQuantile::JQuantile ( const JTitle title = "",
const bool  quantiles = false 
)
inline

Constructor.

Parameters
titletitle
quantilesquantiles

Definition at line 93 of file JQuantile.hh.

94  :
96  {}
JQuantile_t(const JTitle &title="", const bool quantiles=false)
Constructor.
Definition: JQuantile.hh:43
std::string title
Definition: JTitle.hh:73
template<class iterator_type >
JTOOLS::JQuantile::JQuantile ( const JTitle title,
iterator_type  __begin,
iterator_type  __end,
const bool  quantiles = false,
const double  w = 1.0 
)
inline

Constructor.


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

Parameters
titletitle
__beginbegin of data
__endend of data
quantilesquantiles
wweight

Definition at line 110 of file JQuantile.hh.

114  :
116  {
117  put(__begin, __end, w);
118  }
JQuantile_t(const JTitle &title="", const bool quantiles=false)
Constructor.
Definition: JQuantile.hh:43
data_type w[N+1][M+1]
Definition: JPolint.hh:708
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:198
std::string title
Definition: JTitle.hh:73
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 bool  quantiles = false,
const double  w = 1.0 
)
inline

Constructor.


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

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

Definition at line 133 of file JQuantile.hh.

138  :
140  {
141  put(__begin, __end, member, w);
142  }
JQuantile_t(const JTitle &title="", const bool quantiles=false)
Constructor.
Definition: JQuantile.hh:43
data_type w[N+1][M+1]
Definition: JPolint.hh:708
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:198
std::string title
Definition: JTitle.hh:73
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 bool  quantiles = false,
const double  w = 1.0 
)
inline

Constructor.


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

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

Definition at line 157 of file JQuantile.hh.

162  :
164  {
165  put(__begin, __end, function, w);
166  }
JQuantile_t(const JTitle &title="", const bool quantiles=false)
Constructor.
Definition: JQuantile.hh:43
data_type w[N+1][M+1]
Definition: JPolint.hh:708
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:198
std::string title
Definition: JTitle.hh:73

Member Function Documentation

JQuantile& JTOOLS::JQuantile::add ( const JQuantile Q)
inline

Add quantile.

Parameters
Qquantile
Returns
this quantile

Definition at line 175 of file JQuantile.hh.

176  {
177  sum += Q.sum;
178  rms += Q.rms;
179  tot += Q.tot;
180  num += Q.num;
181  min = std::min(min, Q.min);
182  max = std::max(max, Q.max);
183 
184  if (quantiles) {
185  std::copy(Q.buffer.begin(), Q.buffer.end(), std::inserter(buffer, buffer.end()));
186  }
187 
188  return *this;
189  }
long long int num
Definition: JQuantile.hh:73
std::multimap< double, double > buffer
Definition: JQuantile.hh:75
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:153
void JTOOLS::JQuantile::put ( const double  x,
const double  w = 1.0 
)
inline

Put value.

Parameters
xvalue
wweight

Definition at line 198 of file JQuantile.hh.

199  {
200  sum += w*x;
201  rms += w*x*x;
202  tot += w;
203  num += 1;
204  min = std::min(min, x);
205  max = std::max(max, x);
206 
207  if (quantiles) {
208  buffer.insert(std::make_pair(x,w));
209  }
210  }
data_type w[N+1][M+1]
Definition: JPolint.hh:708
long long int num
Definition: JQuantile.hh:73
std::multimap< double, double > buffer
Definition: JQuantile.hh:75
template<class iterator_type >
void JTOOLS::JQuantile::put ( iterator_type  __begin,
iterator_type  __end,
const double  w = 1.0 
)
inline

Put data.

Parameters
__beginbegin of data
__endend of data
wweight

Definition at line 221 of file JQuantile.hh.

224  {
225  for (iterator_type i = __begin; i != __end; ++i) {
226  put(*i, w);
227  }
228  }
data_type w[N+1][M+1]
Definition: JPolint.hh:708
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:198
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 240 of file JQuantile.hh.

244  {
245  for (iterator_type i = __begin; i != __end; ++i) {
246  put((*i).*member, w);
247  }
248  }
data_type w[N+1][M+1]
Definition: JPolint.hh:708
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:198
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 260 of file JQuantile.hh.

264  {
265  for (iterator_type i = __begin; i != __end; ++i) {
266  put(((*i).*function)(), w);
267  }
268  }
data_type w[N+1][M+1]
Definition: JPolint.hh:708
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:198
long long int JTOOLS::JQuantile::getCount ( ) const
inline

Get total count.

Returns
count

Definition at line 276 of file JQuantile.hh.

277  {
278  return num;
279  }
long long int num
Definition: JQuantile.hh:73
double JTOOLS::JQuantile::getTotal ( ) const
inline

Get total weight.

Returns
weight

Definition at line 287 of file JQuantile.hh.

288  {
289  return tot;
290  }
double JTOOLS::JQuantile::getSum ( ) const
inline

Get weighted sum.

Returns
weighted sum

Definition at line 298 of file JQuantile.hh.

299  {
300  return sum;
301  }
double JTOOLS::JQuantile::getMin ( ) const
inline

Get minimum.

Returns
minimum

Definition at line 309 of file JQuantile.hh.

310  {
311  return min;
312  }
double JTOOLS::JQuantile::getMax ( ) const
inline

Get maximum.

Returns
maximum

Definition at line 320 of file JQuantile.hh.

321  {
322  return max;
323  }
double JTOOLS::JQuantile::getMean ( ) const
inline

Get mean value.

Returns
mean value

Definition at line 331 of file JQuantile.hh.

332  {
333  if (tot != 0.0)
334  return sum / tot;
335  else
336  THROW(JDivisionByZero, "JQuantile::getMean()");
337  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
double JTOOLS::JQuantile::getRMS ( ) const
inline

Get RMS.

Returns
RMS

Definition at line 345 of file JQuantile.hh.

346  {
347  if (tot != 0.0)
348  return sqrt(rms/tot);
349  else
350  THROW(JDivisionByZero, "JQuantile::getRMS()");
351  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
double JTOOLS::JQuantile::getSTDev ( ) const
inline

Get standard deviation.

Returns
standard deviation

Definition at line 359 of file JQuantile.hh.

360  {
361  if (tot != 0.0)
362  return sqrt(rms*tot - sum*sum)/tot;
363  else
364  THROW(JDivisionByZero, "JQuantile::getSTDev()");
365  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
double JTOOLS::JQuantile::getDeviation ( const bool  relative = true) const
inline

Get maximal deviation from average.

Parameters
relativeif true, relative to average, else absolute
Returns
deviation

Definition at line 374 of file JQuantile.hh.

375  {
376  if (relative)
377  return std::max(getMax() - getMean(), getMean() - getMin());
378  else
379  return getMax() - getMin();
380  }
double getMax() const
Get maximum.
Definition: JQuantile.hh:320
double getMean() const
Get mean value.
Definition: JQuantile.hh:331
double getMin() const
Get minimum.
Definition: JQuantile.hh:309
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 389 of file JQuantile.hh.

390  {
391  return getCount() > 3 && getSTDev() < precision * getMean();
392  }
double getSTDev() const
Get standard deviation.
Definition: JQuantile.hh:359
double getMean() const
Get mean value.
Definition: JQuantile.hh:331
long long int getCount() const
Get total count.
Definition: JQuantile.hh:276
double JTOOLS::JQuantile::getQuantile ( const double  Q,
const bool  reverse = false 
) const
inline

Get quantile.

Parameters
Qquantile
reversereverse
Returns
value

Definition at line 402 of file JQuantile.hh.

403  {
404  if (quantiles) {
405 
406  double W = 0.0;
407 
408  for (std::map<double, double>::const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
409  W += i->second;
410  }
411 
412  if (reverse)
413  return getQuantile(buffer.rbegin(), buffer.rend(), Q*W);
414  else
415  return getQuantile(buffer. begin(), buffer. end(), Q*W);
416  }
417 
418  THROW(JNoValue, "Option 'quantiles' at JQuantile() incompatible with method getQuantile().");
419  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
std::multimap< double, double > buffer
Definition: JQuantile.hh:75
double getQuantile(const double Q, const bool reverse=false) const
Get quantile.
Definition: JQuantile.hh:402
std::ostream& JTOOLS::JQuantile::print ( std::ostream &  out,
bool  lpr = true 
) const
inline

Print quantile.

Parameters
outoutput stream
lprlong print

Definition at line 428 of file JQuantile.hh.

429  {
430  using namespace std;
431 
432  const int nc = getTitle().size();
433 
434  if (lpr) {
435  out << setw(nc) << left << " " << ' '
436  << setw(10) << left << " mean" << ' '
437  << setw(10) << left << " STD" << ' '
438  << setw(10) << left << " deviation" << endl;
439  }
440 
441  out << setw(nc) << left << getTitle() << ' '
442  << SCIENTIFIC(10,2) << getMean() << ' '
443  << SCIENTIFIC(10,2) << getSTDev() << ' '
444  << SCIENTIFIC(10,2) << getDeviation(false) << endl;
445 
446  return out;
447  }
double getSTDev() const
Get standard deviation.
Definition: JQuantile.hh:359
const std::string & getTitle() const
Get title.
Definition: JTitle.hh:55
double getMean() const
Get mean value.
Definition: JQuantile.hh:331
double getDeviation(const bool relative=true) const
Get maximal deviation from average.
Definition: JQuantile.hh:374
Auxiliary data structure for floating point format specification.
Definition: JPrint.hh:518
template<class T >
static double JTOOLS::JQuantile::getQuantile ( T  __begin,
T  __end,
const double  W 
)
inlinestaticprotected

Get quantile.

Parameters
__beginbegin of data
__endend of data
Wweight
Returns
value

Definition at line 472 of file JQuantile.hh.

473  {
474  double w = 0.0;
475 
476  for (T i = __begin; i != __end; ++i) {
477 
478  w += i->second;
479 
480  if (w >= W) {
481  return i->first;
482  }
483  }
484 
485  THROW(JNoValue, "Invalid weight " << W);
486  }
data_type w[N+1][M+1]
Definition: JPolint.hh:708
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
do set_variable OUTPUT_DIRECTORY $WORKDIR T
void JTOOLS::JQuantile_t::reset ( )
inlineinherited

Reset.

Definition at line 55 of file JQuantile.hh.

56  {
57  sum = 0.0;
58  rms = 0.0;
59  tot = 0.0;
60  num = 0;
61  min = +std::numeric_limits<double>::max();
62  max = -std::numeric_limits<double>::max();
63 
64  buffer.clear();
65  }
long long int num
Definition: JQuantile.hh:73
std::multimap< double, double > buffer
Definition: JQuantile.hh:75
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  }
std::string title
Definition: JTitle.hh:73
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  }
std::string title
Definition: JTitle.hh:73
JQuantile & JMATH::JMath< JQuantile , JNullType >::mul ( const JNullType object)
inlineinherited

Multiply with object.

Parameters
objectobject
Returns
result object

Definition at line 273 of file JMath.hh.

274  {
275  return static_cast<JFirst_t&>(*this) = JCalculator<JFirst_t>::calculator.mul(static_cast<const JFirst_t&>(*this), object);
276  }
Auxiliary class for arithmetic operations on objects.
Definition: JCalculator.hh:18

Friends And Related Function Documentation

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

Print quantile.

Parameters
outoutput stream
quantilequantile
Returns
output stream

Definition at line 457 of file JQuantile.hh.

458  {
459  return quantile.print(out, getLongprint(out));
460  }
bool getLongprint(std::ostream &out)
Get long print option.
Definition: JPrint.hh:157
std::ostream & print(std::ostream &out, bool lpr=true) const
Print quantile.
Definition: JQuantile.hh:428

Member Data Documentation

double JTOOLS::JQuantile_t::sum
protectedinherited

Definition at line 68 of file JQuantile.hh.

double JTOOLS::JQuantile_t::rms
protectedinherited

Definition at line 69 of file JQuantile.hh.

double JTOOLS::JQuantile_t::tot
protectedinherited

Definition at line 70 of file JQuantile.hh.

double JTOOLS::JQuantile_t::min
protectedinherited

Definition at line 71 of file JQuantile.hh.

double JTOOLS::JQuantile_t::max
protectedinherited

Definition at line 72 of file JQuantile.hh.

long long int JTOOLS::JQuantile_t::num
protectedinherited

Definition at line 73 of file JQuantile.hh.

bool JTOOLS::JQuantile_t::quantiles
protectedinherited

Definition at line 74 of file JQuantile.hh.

std::multimap<double, double> JTOOLS::JQuantile_t::buffer
protectedinherited

Definition at line 75 of file JQuantile.hh.

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

Definition at line 73 of file JTitle.hh.


The documentation for this struct was generated from the following file: