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< JFirst_t, JSecond_t > 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 JElement_t , class JAllocator_t >
 JQuantile (const JTitle &title, const array_type< JElement_t, JAllocator_t > &buffer, 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 JElement_t , class JAllocator_t >
void put (const array_type< JElement_t, JAllocator_t > &buffer, 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...
 
JFirst_t & mul (const JSecond_t &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 88 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 98 of file JQuantile.hh.

99  :
101  {}
JQuantile_t(const JTitle &title="", const bool quantiles=false)
Constructor.
Definition: JQuantile.hh:48
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.

Parameters
titletitle
__beginbegin of data
__endend of data
quantilesquantiles
wweight

Definition at line 114 of file JQuantile.hh.

118  :
120  {
121  put(__begin, __end, w);
122  }
JQuantile_t(const JTitle &title="", const bool quantiles=false)
Constructor.
Definition: JQuantile.hh:48
data_type w[N+1][M+1]
Definition: JPolint.hh:741
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:173
std::string title
Definition: JTitle.hh:73
template<class JElement_t , class JAllocator_t >
JTOOLS::JQuantile::JQuantile ( const JTitle title,
const array_type< JElement_t, JAllocator_t > &  buffer,
const bool  quantiles = false,
const double  w = 1.0 
)
inline

Constructor.

Parameters
titletitle
bufferinput data
quantilesquantiles
wweight

Definition at line 134 of file JQuantile.hh.

137  :
139  {
140  put(buffer, w);
141  }
JQuantile_t(const JTitle &title="", const bool quantiles=false)
Constructor.
Definition: JQuantile.hh:48
data_type w[N+1][M+1]
Definition: JPolint.hh:741
std::multimap< double, double > buffer
Definition: JQuantile.hh:80
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:173
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 150 of file JQuantile.hh.

151  {
152  sum += Q.sum;
153  rms += Q.rms;
154  tot += Q.tot;
155  num += Q.num;
156  min = std::min(min, Q.min);
157  max = std::max(max, Q.max);
158 
159  if (quantiles) {
160  std::copy(Q.buffer.begin(), Q.buffer.end(), std::inserter(buffer, buffer.end()));
161  }
162 
163  return *this;
164  }
long long int num
Definition: JQuantile.hh:78
std::multimap< double, double > buffer
Definition: JQuantile.hh:80
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:139
void JTOOLS::JQuantile::put ( const double  x,
const double  w = 1.0 
)
inline

Put value.

Parameters
xvalue
wweight

Definition at line 173 of file JQuantile.hh.

174  {
175  sum += w*x;
176  rms += w*x*x;
177  tot += w;
178  num += 1;
179  min = std::min(min, x);
180  max = std::max(max, x);
181 
182  if (quantiles) {
183  buffer.insert(std::make_pair(x,w));
184  }
185  }
data_type w[N+1][M+1]
Definition: JPolint.hh:741
long long int num
Definition: JQuantile.hh:78
std::multimap< double, double > buffer
Definition: JQuantile.hh:80
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 196 of file JQuantile.hh.

199  {
200  for (iterator_type i = __begin; i != __end; ++i) {
201  put(*i, w);
202  }
203  }
data_type w[N+1][M+1]
Definition: JPolint.hh:741
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:173
template<class JElement_t , class JAllocator_t >
void JTOOLS::JQuantile::put ( const array_type< JElement_t, JAllocator_t > &  buffer,
const double  w = 1.0 
)
inline

Put data.

Parameters
bufferinput data
wweight

Definition at line 213 of file JQuantile.hh.

215  {
216  for (typename array_type<JElement_t, JAllocator_t>::const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
217  put(*i, w);
218  }
219  }
data_type w[N+1][M+1]
Definition: JPolint.hh:741
std::multimap< double, double > buffer
Definition: JQuantile.hh:80
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:173
long long int JTOOLS::JQuantile::getCount ( ) const
inline

Get total count.

Returns
count

Definition at line 227 of file JQuantile.hh.

228  {
229  return num;
230  }
long long int num
Definition: JQuantile.hh:78
double JTOOLS::JQuantile::getTotal ( ) const
inline

Get total weight.

Returns
weight

Definition at line 238 of file JQuantile.hh.

239  {
240  return tot;
241  }
double JTOOLS::JQuantile::getSum ( ) const
inline

Get weighted sum.

Returns
weighted sum

Definition at line 249 of file JQuantile.hh.

250  {
251  return sum;
252  }
double JTOOLS::JQuantile::getMin ( ) const
inline

Get minimum.

Returns
minimum

Definition at line 260 of file JQuantile.hh.

261  {
262  return min;
263  }
double JTOOLS::JQuantile::getMax ( ) const
inline

Get maximum.

Returns
maximum

Definition at line 271 of file JQuantile.hh.

272  {
273  return max;
274  }
double JTOOLS::JQuantile::getMean ( ) const
inline

Get mean value.

Returns
mean value

Definition at line 282 of file JQuantile.hh.

283  {
284  if (tot != 0.0)
285  return sum / tot;
286  else
287  THROW(JDivisionByZero, "JQuantile::getMean()");
288  }
#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 296 of file JQuantile.hh.

297  {
298  if (tot != 0.0)
299  return sqrt(rms/tot);
300  else
301  THROW(JDivisionByZero, "JQuantile::getRMS()");
302  }
#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 310 of file JQuantile.hh.

311  {
312  if (tot != 0.0)
313  return sqrt(rms*tot - sum*sum)/tot;
314  else
315  THROW(JDivisionByZero, "JQuantile::getSTDev()");
316  }
#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 325 of file JQuantile.hh.

326  {
327  if (relative)
328  return std::max(getMax() - getMean(), getMean() - getMin());
329  else
330  return getMax() - getMin();
331  }
double getMax() const
Get maximum.
Definition: JQuantile.hh:271
double getMean() const
Get mean value.
Definition: JQuantile.hh:282
double getMin() const
Get minimum.
Definition: JQuantile.hh:260
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 340 of file JQuantile.hh.

341  {
342  return getCount() > 3 && getSTDev() < precision * getMean();
343  }
double getSTDev() const
Get standard deviation.
Definition: JQuantile.hh:310
double getMean() const
Get mean value.
Definition: JQuantile.hh:282
long long int getCount() const
Get total count.
Definition: JQuantile.hh:227
double JTOOLS::JQuantile::getQuantile ( const double  Q,
const bool  reverse = false 
) const
inline

Get quantile.

Parameters
Qquantile
reversereverse
Returns
value

Definition at line 353 of file JQuantile.hh.

354  {
355  if (quantiles) {
356 
357  double W = 0.0;
358 
359  for (std::map<double, double>::const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
360  W += i->second;
361  }
362 
363  if (reverse)
364  return getQuantile(buffer.rbegin(), buffer.rend(), Q*W);
365  else
366  return getQuantile(buffer. begin(), buffer. end(), Q*W);
367  }
368 
369  THROW(JNoValue, "Option 'quantiles' at JQuantile() incompatible with method getQuantile().");
370  }
#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:80
double getQuantile(const double Q, const bool reverse=false) const
Get quantile.
Definition: JQuantile.hh:353
std::ostream& JTOOLS::JQuantile::print ( std::ostream &  out,
bool  lpr = true 
) const
inline

Print quantile.

Parameters
outoutput stream
lprlong print

Definition at line 379 of file JQuantile.hh.

380  {
381  using namespace std;
382 
383  const int nc = getTitle().size();
384 
385  if (lpr) {
386  out << setw(nc) << left << " " << ' '
387  << setw(10) << left << " mean" << ' '
388  << setw(10) << left << " STD" << ' '
389  << setw(10) << left << " deviation" << endl;
390  }
391 
392  out << setw(nc) << left << getTitle() << ' '
393  << SCIENTIFIC(10,2) << getMean() << ' '
394  << SCIENTIFIC(10,2) << getSTDev() << ' '
395  << SCIENTIFIC(10,2) << getDeviation(false) << endl;
396 
397  return out;
398  }
double getSTDev() const
Get standard deviation.
Definition: JQuantile.hh:310
const std::string & getTitle() const
Get title.
Definition: JTitle.hh:55
double getMean() const
Get mean value.
Definition: JQuantile.hh:282
double getDeviation(const bool relative=true) const
Get maximal deviation from average.
Definition: JQuantile.hh:325
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:483
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 423 of file JQuantile.hh.

424  {
425  double w = 0.0;
426 
427  for (T i = __begin; i != __end; ++i) {
428 
429  w += i->second;
430 
431  if (w >= W) {
432  return i->first;
433  }
434  }
435 
436  THROW(JNoValue, "Invalid weight " << W);
437  }
data_type w[N+1][M+1]
Definition: JPolint.hh:741
#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 60 of file JQuantile.hh.

61  {
62  sum = 0.0;
63  rms = 0.0;
64  tot = 0.0;
65  num = 0;
66  min = std::numeric_limits<double>::max();
67  max = std::numeric_limits<double>::lowest();
68 
69  buffer.clear();
70  }
long long int num
Definition: JQuantile.hh:78
std::multimap< double, double > buffer
Definition: JQuantile.hh:80
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
template<class JFirst_t, class JSecond_t = JNullType>
JFirst_t& JMATH::JMath< JFirst_t, JSecond_t >::mul ( const JSecond_t &  object)
inlineinherited

Multiply with object.

Parameters
objectobject
Returns
result object

Definition at line 357 of file JMath.hh.

358  {
359  return static_cast<JFirst_t&>(*this) = JCalculator<JFirst_t>::calculator.mul(static_cast<const JFirst_t&>(*this), object);
360  }
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 408 of file JQuantile.hh.

409  {
410  return quantile.print(out, getLongprint(out));
411  }
std::ostream & print(std::ostream &out, bool lpr=true) const
Print quantile.
Definition: JQuantile.hh:379
bool getLongprint(std::ostream &out)
Get long print option.
Definition: JManip.hh:120

Member Data Documentation

double JTOOLS::JQuantile_t::sum
protectedinherited

Definition at line 73 of file JQuantile.hh.

double JTOOLS::JQuantile_t::rms
protectedinherited

Definition at line 74 of file JQuantile.hh.

double JTOOLS::JQuantile_t::tot
protectedinherited

Definition at line 75 of file JQuantile.hh.

double JTOOLS::JQuantile_t::min
protectedinherited

Definition at line 76 of file JQuantile.hh.

double JTOOLS::JQuantile_t::max
protectedinherited

Definition at line 77 of file JQuantile.hh.

long long int JTOOLS::JQuantile_t::num
protectedinherited

Definition at line 78 of file JQuantile.hh.

bool JTOOLS::JQuantile_t::quantiles
protectedinherited

Definition at line 79 of file JQuantile.hh.

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

Definition at line 80 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: