analysis.h
Go to the documentation of this file.
1 /*
2  @copyright Russell Standish 2000-2013
3  @author Russell Standish
4  This file is part of EcoLab
5 
6  Open source licensed under the MIT license. See LICENSE for details.
7 */
8 
12 #ifndef ANALYSIS_H
13 #define ANALYSIS_H
14 #include "arrays.h"
15 #include "graph.h"
16 #include "TCL_obj_stl.h"
17 #include <vector>
18 #include <string>
19 #include <algorithm>
20 
21 namespace ecolab
22 {
23 
26  {
27  public:
28  static int size;
29  static std::vector<std::string> table;
30  const char * operator[](int i){return table[i%size].c_str();}
31  palette_class();
32  };
33 
35  struct Stats: public array_ns::array<float>
36  {
37  double sum, sumsq;
38  float max, min;
39  Stats(): sum(0), sumsq(0), max(-std::numeric_limits<float>::max()),
40  min(std::numeric_limits<float>::max()) {}
41  void clear() {
42  resize(0); sum=sumsq=0;
43  max=-std::numeric_limits<float>::max();
44  min=std::numeric_limits<float>::max();
45  }
46  double av() {return sum/size();}
47  double median() {
48  std::nth_element(begin(),begin()+size()/2,end());
49  return *(begin()+size()/2);
50  }
52  double stddev() {double d=sumsq - sum*sum/size();
53  if (d<0) return 0; // deal with roundoff error
54  else return sqrt( d/size());}
55 
57  Stats& operator<<=(float x);
59  Stats& operator<<=(const array_ns::array<float>& x);
61  Stats& operator<<=(const array_ns::array<double>& x)
62  {operator<<=(array_ns::array<float>(x)); return *this;}
63 
65  void add_data(TCL_args args) {
67  args>>t;
68  operator<<=(t);
69  }
70  bool operator<(const Stats& x) const
71  {return std::lexicographical_compare(begin(),end(),x.begin(),x.end());}
72  };
73 
74  template<class charT, class Traits>
75  std::basic_ostream<charT,Traits>& operator<<
76  (std::basic_ostream<charT,Traits>& o, const Stats& x)
77  {return o<<static_cast<const array_ns::array<float>&>(x);}
78 
80  struct HistoStats: public Stats
81  {
82  unsigned nbins;
83  bool logbins;
84  float logmin;
85  HistoStats(): nbins(100), logbins(false) {}
86  array_ns::array<double> histogram();
88 
93  double loglikelihood(TCL_args args);
99  array_ns::array<double> fitPowerLaw(TCL_args);
100 
102  double fitExponential() {return av();}
103 
105  array_ns::array<double> fitNormal() {
106  return array_ns::array<double>()<<av()<<stddev();
107  }
108 
110  array_ns::array<double> fitLogNormal();
111  };
112 
113  struct NetworkFromTimeSeries: public std::vector<Stats>
114  {
118  std::vector<unsigned> n;
122  void constructNet();
124  std::vector<int> columnIdx;
126  void loadData(const char* filename);
127  };
128 }
129 #include "analysis.cd"
130 
131 #ifdef BLT
132 #include "analysisBLT.h"
133 #endif
134 #ifdef CAIRO
135 #include "analysisCairo.h"
136 #endif
137 #endif
Definition: arrays.h:79
unsigned nbins
number of bins
Definition: analysis.h:82
Definition: graph.h:537
Histogramming tool.
Definition: analysis.h:80
void add_data(TCL_args args)
TCL access - append an array of data.
Definition: analysis.h:65
float min
max and min value
Definition: analysis.h:38
dynamic array class
elementary statistics
Definition: analysis.h:35
TCL_obj support for STL containers.
A class for accessing the palette TCL variable, which is a list of colours.
Definition: analysis.h:25
double sumsq
Definition: analysis.h:37
bool logbins
bin logarithmically
Definition: analysis.h:83
double stddev()
standard deviation
Definition: analysis.h:52
float logmin
log of minimum postive data element. Set in reread.
Definition: analysis.h:84
Represent arguments to TCL commands.
Definition: TCL_obj_base.h:138
EcoLab graph library.
Miscellaneous BLT based utilities.
Definition: analysis.h:113
double av()
average
Definition: analysis.h:46
_OPENMP
Definition: accessor.h:16