Jpp - the software that should make you happy
 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

Auxiliary data structure for running average, standard deviation and quantiles. More...

#include <JQuantile.hh>

Inheritance diagram for JTOOLS::JQuantile:
JLANG::JTitle JMATH::JMath< JFirst_t, JSecond_t >

Public Member Functions

 JQuantile (const JTitle &title="", const bool quantiles=false)
 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...
 
void reset ()
 Reset. More...
 
JQuantileadd (const JQuantile &Q)
 Add quantile. More...
 
void put (const double x, const double w=1.0)
 Put value. 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 getMin () const
 Get minimum. More...
 
double getMax () const
 Get maximum. More...
 
double getMean () const
 Get mean value. 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...
 
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

bool quantiles
 
double mean
 
double sigma
 
double total
 
long long int count
 
double xmin
 
double xmax
 
std::multimap< double, double > buffer
 
std::string title
 

Friends

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

Detailed Description

Auxiliary data structure for running average, standard deviation and quantiles.

See Knuth TAOCP vol 2, 3rd edition, page 232.
This class acts as a zero-dimensional histogram.
Note that if a weight is used, it should strictly be positive.

Definition at line 43 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 53 of file JQuantile.hh.

54  :
55  JTitle(title),
57  {
58  reset();
59  }
void reset()
Reset.
Definition: JQuantile.hh:87
JTitle()
Default constructor.
Definition: JTitle.hh:24
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 71 of file JQuantile.hh.

74  :
75  JTitle(title),
77  {
78  reset();
79 
80  put(buffer, w);
81  }
data_type w[N+1][M+1]
Definition: JPolint.hh:741
void reset()
Reset.
Definition: JQuantile.hh:87
std::multimap< double, double > buffer
Definition: JQuantile.hh:375
JTitle()
Default constructor.
Definition: JTitle.hh:24
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:129
std::string title
Definition: JTitle.hh:73

Member Function Documentation

void JTOOLS::JQuantile::reset ( )
inline

Reset.

Definition at line 87 of file JQuantile.hh.

88  {
89  mean = 0.0;
90  sigma = 0.0;
91  total = 0.0;
92  count = 0;
93  xmin = std::numeric_limits<double>::max();
94  xmax = std::numeric_limits<double>::lowest();
95 
96  buffer.clear();
97  }
long long int count
Definition: JQuantile.hh:372
std::multimap< double, double > buffer
Definition: JQuantile.hh:375
JQuantile& JTOOLS::JQuantile::add ( const JQuantile Q)
inline

Add quantile.

Parameters
Qquantile
Returns
this quantile

Definition at line 106 of file JQuantile.hh.

107  {
108  mean += Q.mean;
109  sigma += Q.sigma;
110  total += Q.total;
111  count += Q.count;
112  xmin = std::min(xmin, Q.xmin);
113  xmax = std::max(xmax, Q.xmax);
114 
115  if (quantiles) {
116  std::copy(Q.buffer.begin(), Q.buffer.end(), std::inserter(buffer, buffer.end()));
117  }
118 
119  return *this;
120  }
long long int count
Definition: JQuantile.hh:372
std::multimap< double, double > buffer
Definition: JQuantile.hh:375
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 129 of file JQuantile.hh.

130  {
131  total += w;
132  count += 1;
133 
134  if (count == 1) {
135 
136  mean = x;
137  sigma = 0.0;
138 
139  } else {
140 
141  const double new_mean = mean + w * (x - mean) / total;
142  const double new_sigma = sigma + w * (x - mean) * (x - new_mean);
143 
144  // set up for next iteration
145 
146  mean = new_mean;
147  sigma = new_sigma;
148  }
149 
150  xmin = std::min(xmin, x);
151  xmax = std::max(xmax, x);
152 
153  if (quantiles) {
154  buffer.insert(std::make_pair(x,w));
155  }
156  }
data_type w[N+1][M+1]
Definition: JPolint.hh:741
long long int count
Definition: JQuantile.hh:372
std::multimap< double, double > buffer
Definition: JQuantile.hh:375
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 166 of file JQuantile.hh.

168  {
169  for (typename array_type<JElement_t, JAllocator_t>::const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
170  put(*i, w);
171  }
172  }
data_type w[N+1][M+1]
Definition: JPolint.hh:741
std::multimap< double, double > buffer
Definition: JQuantile.hh:375
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:129
long long int JTOOLS::JQuantile::getCount ( ) const
inline

Get total count.

Returns
count

Definition at line 180 of file JQuantile.hh.

181  {
182  return count;
183  }
long long int count
Definition: JQuantile.hh:372
double JTOOLS::JQuantile::getTotal ( ) const
inline

Get total weight.

Returns
weight

Definition at line 191 of file JQuantile.hh.

192  {
193  return total;
194  }
double JTOOLS::JQuantile::getMin ( ) const
inline

Get minimum.

Returns
minimum

Definition at line 202 of file JQuantile.hh.

203  {
204  return xmin;
205  }
double JTOOLS::JQuantile::getMax ( ) const
inline

Get maximum.

Returns
maximum

Definition at line 213 of file JQuantile.hh.

214  {
215  return xmax;
216  }
double JTOOLS::JQuantile::getMean ( ) const
inline

Get mean value.

Returns
mean value

Definition at line 224 of file JQuantile.hh.

225  {
226  if (count != 0.0)
227  return mean;
228  else
229  THROW(JDivisionByZero, "JQuantile::getMean()");
230  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
long long int count
Definition: JQuantile.hh:372
double JTOOLS::JQuantile::getSTDev ( ) const
inline

Get standard deviation.

Returns
standard deviation

Definition at line 238 of file JQuantile.hh.

239  {
240  if (count > 1)
241  return sqrt(count * sigma/(total * (count - 1)));
242  else
243  THROW(JDivisionByZero, "JQuantile::getSTDev()");
244  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
long long int count
Definition: JQuantile.hh:372
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 253 of file JQuantile.hh.

254  {
255  if (relative)
256  return std::max(getMax() - getMean(), getMean() - getMin());
257  else
258  return getMax() - getMin();
259  }
double getMax() const
Get maximum.
Definition: JQuantile.hh:213
double getMean() const
Get mean value.
Definition: JQuantile.hh:224
double getMin() const
Get minimum.
Definition: JQuantile.hh:202
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 268 of file JQuantile.hh.

269  {
270  return getCount() > 1 && getSTDev() < precision * getMean();
271  }
double getSTDev() const
Get standard deviation.
Definition: JQuantile.hh:238
double getMean() const
Get mean value.
Definition: JQuantile.hh:224
long long int getCount() const
Get total count.
Definition: JQuantile.hh:180
double JTOOLS::JQuantile::getQuantile ( const double  Q,
const bool  reverse = false 
) const
inline

Get quantile.

Parameters
Qquantile
reversereverse
Returns
value

Definition at line 281 of file JQuantile.hh.

282  {
283  if (quantiles) {
284 
285  double W = 0.0;
286 
287  for (std::map<double, double>::const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
288  W += i->second;
289  }
290 
291  if (reverse)
292  return getQuantile(buffer.rbegin(), buffer.rend(), Q*W);
293  else
294  return getQuantile(buffer. begin(), buffer. end(), Q*W);
295  }
296 
297  THROW(JNoValue, "Option 'quantiles' at JQuantile() incompatible with method getQuantile().");
298  }
Q(UTCMax_s-UTCMin_s)-livetime_s
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
double getQuantile(const double Q, const bool reverse=false) const
Get quantile.
Definition: JQuantile.hh:281
std::multimap< double, double > buffer
Definition: JQuantile.hh:375
std::ostream& JTOOLS::JQuantile::print ( std::ostream &  out,
bool  lpr = true 
) const
inline

Print quantile.

Parameters
outoutput stream
lprlong print

Definition at line 307 of file JQuantile.hh.

308  {
309  using namespace std;
310 
311  const int nc = getTitle().size();
312 
313  if (lpr) {
314  out << setw(nc) << left << " " << ' '
315  << setw(10) << left << " mean" << ' '
316  << setw(10) << left << " STD" << ' '
317  << setw(10) << left << " deviation" << endl;
318  }
319 
320  out << setw(nc) << left << getTitle() << ' '
321  << SCIENTIFIC(10,2) << getMean() << ' '
322  << SCIENTIFIC(10,2) << getSTDev() << ' '
323  << SCIENTIFIC(10,2) << getDeviation(false) << endl;
324 
325  return out;
326  }
double getSTDev() const
Get standard deviation.
Definition: JQuantile.hh:238
const std::string & getTitle() const
Get title.
Definition: JTitle.hh:55
double getMean() const
Get mean value.
Definition: JQuantile.hh:224
double getDeviation(const bool relative=true) const
Get maximal deviation from average.
Definition: JQuantile.hh:253
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:484
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 351 of file JQuantile.hh.

352  {
353  double w = 0.0;
354 
355  for (T i = __begin; i != __end; ++i) {
356 
357  w += i->second;
358 
359  if (w >= W) {
360  return i->first;
361  }
362  }
363 
364  THROW(JNoValue, "Invalid weight " << W);
365  }
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
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 336 of file JQuantile.hh.

337  {
338  return quantile.print(out, getLongprint(out));
339  }
std::ostream & print(std::ostream &out, bool lpr=true) const
Print quantile.
Definition: JQuantile.hh:307
bool getLongprint(std::ostream &out)
Get long print option.
Definition: JManip.hh:121

Member Data Documentation

bool JTOOLS::JQuantile::quantiles
protected

Definition at line 368 of file JQuantile.hh.

double JTOOLS::JQuantile::mean
protected

Definition at line 369 of file JQuantile.hh.

double JTOOLS::JQuantile::sigma
protected

Definition at line 370 of file JQuantile.hh.

double JTOOLS::JQuantile::total
protected

Definition at line 371 of file JQuantile.hh.

long long int JTOOLS::JQuantile::count
protected

Definition at line 372 of file JQuantile.hh.

double JTOOLS::JQuantile::xmin
protected

Definition at line 373 of file JQuantile.hh.

double JTOOLS::JQuantile::xmax
protected

Definition at line 374 of file JQuantile.hh.

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

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