Simpatico  v1.10
Average.h
1 #ifndef UTIL_AVERAGE_H
2 #define UTIL_AVERAGE_H
3 
4 /*
5 * Util Package - C++ Utilities for Scientific Computation
6 *
7 * Copyright 2010 - 2017, The Regents of the University of Minnesota
8 * Distributed under the terms of the GNU General Public License.
9 */
10 
11 #include <util/global.h>
12 #include <util/accumulators/AverageStage.h> // base class
13 #include <util/param/ParamComposite.h> // base class
14 
15 #include <vector>
16 
17 namespace Util
18 {
19 
43  class Average : public AverageStage, public ParamComposite
44  {
45 
46  public:
47 
53  Average(int blockFactor = 2);
54 
58  virtual ~Average();
59 
67  void readParameters(std::istream& in);
68 
81 
87  virtual void loadParameters(Serializable::IArchive &ar);
88 
94  virtual void save(Serializable::OArchive &ar);
95 
102  template <class Archive>
103  void serialize(Archive& ar, const unsigned int version);
104 
108  void clear();
109 
115  void sample(double value);
116 
123  void sample(double value, std::ostream& out);
124 
143  void output(std::ostream& out) const;
144 
148  double blockingError() const;
149 
155  int nSamplePerBlock() const;
156 
162  int iBlock() const;
163 
169  bool isBlockComplete() const;
170 
171  /*
172  * Get current block average value.
173  *
174  * \throw Exception if block is empty, or blocking disabled.
175  */
176  double blockAverage() const;
177 
178  private:
179 
185  virtual void registerDescendant(AverageStage* descendantPtr);
186 
188  std::vector<AverageStage*> descendants_;
189 
191  double blockSum_;
192 
194  int iBlock_;
195 
197  int nSamplePerBlock_;
198 
200  Average(const Average& other);
201 
203  Average& operator = (const Average& other);
204 
205  };
206 
207  // Inline method definitions
208 
209  #if 0
210  /*
211  * Add a sampled value to the ensemble, and output block averages.
212  */
213  inline void Average::sample(double value, std::ostream& out)
214  { sample(value, &out); }
215  #endif
216 
217  /*
218  * Get nSamplePerBlock, number of samples per block average.
219  */
220  inline int Average::nSamplePerBlock() const
221  { return nSamplePerBlock_; }
222 
223  /*
224  * Get iBlock, number of samples in current block average.
225  */
226  inline int Average::iBlock() const
227  { return iBlock_; }
228 
229  /*
230  * Is the current block average complete?
231  */
232  inline bool Average::isBlockComplete() const
233  {
234  return (iBlock_ && (iBlock_ == nSamplePerBlock_));
235  }
236 
237  /*
238  * Get current block average.
239  */
240  inline double Average::blockAverage() const
241  {
242  if (iBlock_ == 0) {
243  UTIL_THROW("Attempt to get block average with no data");
244  }
245  return blockSum_/double(iBlock_);
246  }
247 
248  /*
249  * Serialize this Average.
250  */
251  template <class Archive>
252  void Average::serialize(Archive& ar, const unsigned int version)
253  {
254  AverageStage::serialize(ar, version);
255  ar & blockSum_;
256  ar & iBlock_;
257  ar & nSamplePerBlock_;
258  }
259 
260 }
261 #endif
void clear()
Clear all accumulators, set to empty initial state.
Definition: Average.cpp:42
bool isBlockComplete() const
Is the current block average complete?
Definition: Average.h:232
virtual void loadParameters(Serializable::IArchive &ar)
Load internal state from an archive.
Definition: Average.cpp:74
void serialize(Archive &ar, const unsigned int version)
Add a sampled value to the ensemble.
Definition: AverageStage.h:252
Calculates the average and variance of a sampled property.
Definition: Average.h:43
void serialize(Archive &ar, const unsigned int version)
Serialize this Average to or from an archive.
Definition: Average.h:252
File containing preprocessor macros for error handling.
double blockingError() const
Return estimated error on average from blocking analysis.
Definition: Average.cpp:133
Saving / output archive for binary ostream.
int iBlock() const
Get number of samples in current block average.
Definition: Average.h:226
#define UTIL_THROW(msg)
Macro for throwing an Exception, reporting function, file and line number.
Definition: global.h:51
Average(int blockFactor=2)
Constructor.
Definition: Average.cpp:20
void readParameters(std::istream &in)
Read parameter nSamplePerBlock from file and initialize.
Definition: Average.cpp:52
Utility classes for scientific computation.
Definition: accumulators.mod:1
virtual ~Average()
Destructor.
Definition: Average.cpp:36
void output(std::ostream &out) const
Output final statistical properties to file.
Definition: Average.cpp:178
void setNSamplePerBlock(int nSamplePerBlock)
Set nSamplePerBlock.
Definition: Average.cpp:63
Saving archive for binary istream.
void sample(double value)
Add a sampled value to the ensemble.
Definition: Average.cpp:94
Evaluate average with hierarchical blocking error analysis.
Definition: AverageStage.h:66
int nSamplePerBlock() const
Get number of samples per block average.
Definition: Average.h:220
virtual void save(Serializable::OArchive &ar)
Save internal state to an archive.
Definition: Average.cpp:88
An object that can read multiple parameters from file.