73 private RealAccumulator {
75 void add(RealType val)
override { RealAccumulator::add(val); }
78 void add(
const std::vector<RealType>&)
override {
79 accumulatorFunctionCallMismatch();
81 void add(
const Vector3d&)
override { accumulatorFunctionCallMismatch(); }
82 void add(
const potVec&)
override { accumulatorFunctionCallMismatch(); }
83 void add(
const Mat3x3d&)
override { accumulatorFunctionCallMismatch(); }
85 void writeData(std::ostream& stream,
const std::string& errorMessage,
86 DataHandling dataHandling)
const override {
88 std::size_t count = RealAccumulator::getCount();
90 switch (dataHandling) {
91 case DataHandling::Average:
92 dat = RealAccumulator::getAverage();
94 case DataHandling::Last:
95 dat = RealAccumulator::getLastValue();
97 case DataHandling::Max:
98 dat = RealAccumulator::getMax();
100 case DataHandling::Min:
101 dat = RealAccumulator::getMin();
103 case DataHandling::Total:
104 dat = RealAccumulator::getTotal();
110 if (std::isinf(dat) || std::isnan(dat)) {
111 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
112 errorMessage.c_str());
113 painCave.isFatal = 1;
119 stream <<
"\t" << dat;
123 void writeErrorBars(std::ostream& stream,
const std::string& errorMessage,
124 ErrorHandling errorHandling)
const override {
126 std::size_t count = RealAccumulator::getCount();
128 switch (errorHandling) {
129 case ErrorHandling::CI95:
130 err = RealAccumulator::get95percentConfidenceInterval();
132 case ErrorHandling::StdDev:
133 err = RealAccumulator::getStdDev();
135 case ErrorHandling::Variance:
136 err = RealAccumulator::getVariance();
142 if (count == 0 && errorHandling == ErrorHandling::CI95) {
145 if (std::isinf(err) || std::isnan(err)) {
146 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
147 errorMessage.c_str());
148 painCave.isFatal = 1;
154 stream <<
"\t" << err;
159 std::type_index getType()
const override {
return typeid(RealType); }
161 std::size_t getCount()
const override {
162 return RealAccumulator::getCount();
169 private StdVectorAccumulator {
171 void add(
const std::vector<RealType>& val)
override {
172 StdVectorAccumulator::add(val);
176 void add(RealType val)
override { accumulatorFunctionCallMismatch(); }
177 void add(
const Vector3d&)
override { accumulatorFunctionCallMismatch(); }
178 void add(
const potVec&)
override { accumulatorFunctionCallMismatch(); }
179 void add(
const Mat3x3d&)
override { accumulatorFunctionCallMismatch(); }
181 void writeData(std::ostream& stream,
const std::string& errorMessage,
182 DataHandling dataHandling)
const override {
183 std::vector<RealType> dat;
184 std::size_t count = StdVectorAccumulator::getCount();
186 switch (dataHandling) {
187 case DataHandling::Average:
188 dat = StdVectorAccumulator::getAverage();
190 case DataHandling::Last:
191 dat = StdVectorAccumulator::getLastValue();
193 case DataHandling::Total:
194 dat = StdVectorAccumulator::getTotal();
196 case DataHandling::Max:
197 case DataHandling::Min:
198 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
199 "Max and Min functions are not defined for a "
200 "std::vector Accumulator.");
201 painCave.isFatal = 1;
208 for (
int i = 0; i < StdVectorAccumulator::getAverage().size(); i++) {
209 if (std::isinf(dat[i]) || std::isnan(dat[i])) {
210 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
211 errorMessage.c_str());
212 painCave.isFatal = 1;
218 stream <<
'\t' << dat[i];
223 void writeErrorBars(std::ostream& stream,
const std::string& errorMessage,
224 ErrorHandling errorHandling)
const override {
225 std::vector<RealType> err;
226 std::size_t count = StdVectorAccumulator::getCount();
228 switch (errorHandling) {
229 case ErrorHandling::CI95:
230 err = StdVectorAccumulator::get95percentConfidenceInterval();
232 case ErrorHandling::StdDev:
233 err = StdVectorAccumulator::getStdDev();
235 case ErrorHandling::Variance:
236 err = StdVectorAccumulator::getVariance();
242 for (
int i = 0; i < StdVectorAccumulator::getAverage().size(); i++) {
243 if (count == 0 && errorHandling == ErrorHandling::CI95) {
246 if (std::isinf(err[i]) || std::isnan(err[i])) {
247 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
248 errorMessage.c_str());
249 painCave.isFatal = 1;
255 stream <<
"\t" << err[i];
261 std::type_index getType()
const override {
262 return typeid(std::vector<RealType>);
265 std::size_t getCount()
const override {
266 std::size_t count = StdVectorAccumulator::getCount();
275 private Vector3dAccumulator {
277 void add(
const Vector3d& val)
override { Vector3dAccumulator::add(val); }
280 void add(RealType val)
override { accumulatorFunctionCallMismatch(); }
281 void add(
const std::vector<RealType>&)
override {
282 accumulatorFunctionCallMismatch();
284 void add(
const potVec&)
override { accumulatorFunctionCallMismatch(); }
285 void add(
const Mat3x3d&)
override { accumulatorFunctionCallMismatch(); }
287 void writeData(std::ostream& stream,
const std::string& errorMessage,
288 DataHandling dataHandling)
const override {
290 std::size_t count = Vector3dAccumulator::getCount();
292 switch (dataHandling) {
293 case DataHandling::Average:
294 dat = Vector3dAccumulator::getAverage();
296 case DataHandling::Last:
297 dat = Vector3dAccumulator::getLastValue();
299 case DataHandling::Total:
300 dat = Vector3dAccumulator::getTotal();
302 case DataHandling::Max:
303 case DataHandling::Min:
304 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
305 "Max and Min functions are not defined for a "
306 "std::vector Accumulator.");
307 painCave.isFatal = 1;
314 for (
int i = 0; i < Vector3dAccumulator::getAverage().size(); i++) {
315 if (std::isinf(dat[i]) || std::isnan(dat[i])) {
316 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
317 errorMessage.c_str());
318 painCave.isFatal = 1;
324 stream <<
"\t" << dat[i];
329 void writeErrorBars(std::ostream& stream,
const std::string& errorMessage,
330 ErrorHandling errorHandling)
const override {
332 std::size_t count = Vector3dAccumulator::getCount();
334 switch (errorHandling) {
335 case ErrorHandling::CI95:
336 err = Vector3dAccumulator::get95percentConfidenceInterval();
338 case ErrorHandling::StdDev:
339 err = Vector3dAccumulator::getStdDev();
341 case ErrorHandling::Variance:
342 err = Vector3dAccumulator::getVariance();
348 for (
int i = 0; i < Vector3dAccumulator::getAverage().size(); i++) {
349 if (count == 0 && errorHandling == ErrorHandling::CI95) {
352 if (std::isinf(err[i]) || std::isnan(err[i])) {
353 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
354 errorMessage.c_str());
355 painCave.isFatal = 1;
361 stream <<
"\t" << err[i];
367 std::type_index getType()
const override {
return typeid(Vector3d); }
369 std::size_t getCount()
const override {
370 return Vector3dAccumulator::getCount();
377 private PotVecAccumulator {
379 void add(
const potVec& val)
override { PotVecAccumulator::add(val); }
382 void add(RealType val)
override { accumulatorFunctionCallMismatch(); }
383 void add(
const std::vector<RealType>&)
override {
384 accumulatorFunctionCallMismatch();
386 void add(
const Vector3d&)
override { accumulatorFunctionCallMismatch(); }
387 void add(
const Mat3x3d&)
override { accumulatorFunctionCallMismatch(); }
389 void writeData(std::ostream& stream,
const std::string& errorMessage,
390 DataHandling dataHandling)
const override {
392 std::size_t count = PotVecAccumulator::getCount();
394 switch (dataHandling) {
395 case DataHandling::Average:
396 dat = PotVecAccumulator::getAverage();
398 case DataHandling::Last:
399 dat = PotVecAccumulator::getLastValue();
401 case DataHandling::Total:
402 dat = PotVecAccumulator::getTotal();
404 case DataHandling::Max:
405 case DataHandling::Min:
406 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
407 "Max and Min functions are not defined for a "
408 "std::vector Accumulator.");
409 painCave.isFatal = 1;
416 for (
int i = 0; i < PotVecAccumulator::getAverage().size(); i++) {
417 if (std::isinf(dat[i]) || std::isnan(dat[i])) {
418 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
419 errorMessage.c_str());
420 painCave.isFatal = 1;
426 stream <<
"\t" << dat[i];
431 void writeErrorBars(std::ostream& stream,
const std::string& errorMessage,
432 ErrorHandling errorHandling)
const override {
434 std::size_t count = PotVecAccumulator::getCount();
436 switch (errorHandling) {
437 case ErrorHandling::CI95:
438 err = PotVecAccumulator::get95percentConfidenceInterval();
440 case ErrorHandling::StdDev:
441 err = PotVecAccumulator::getStdDev();
443 case ErrorHandling::Variance:
444 err = PotVecAccumulator::getVariance();
450 for (
int i = 0; i < PotVecAccumulator::getAverage().size(); i++) {
451 if (count == 0 && errorHandling == ErrorHandling::CI95) {
454 if (std::isinf(err[i]) || std::isnan(err[i])) {
455 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
456 errorMessage.c_str());
457 painCave.isFatal = 1;
463 stream <<
"\t" << err[i];
469 std::type_index getType()
const override {
return typeid(potVec); }
471 std::size_t getCount()
const override {
472 return PotVecAccumulator::getCount();
479 private Mat3x3dAccumulator {
481 void add(
const Mat3x3d& val)
override { Mat3x3dAccumulator::add(val); }
484 void add(RealType val)
override { accumulatorFunctionCallMismatch(); }
485 void add(
const std::vector<RealType>&)
override {
486 accumulatorFunctionCallMismatch();
488 void add(
const Vector3d&)
override { accumulatorFunctionCallMismatch(); }
489 void add(
const potVec&)
override { accumulatorFunctionCallMismatch(); }
491 void writeData(std::ostream& stream,
const std::string& errorMessage,
492 DataHandling dataHandling)
const override {
494 std::size_t count = Mat3x3dAccumulator::getCount();
496 switch (dataHandling) {
497 case DataHandling::Average:
498 dat = Mat3x3dAccumulator::getAverage();
500 case DataHandling::Last:
501 dat = Mat3x3dAccumulator::getLastValue();
503 case DataHandling::Total:
504 dat = Mat3x3dAccumulator::getTotal();
506 case DataHandling::Max:
507 case DataHandling::Min:
508 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
509 "Max and Min functions are not defined for a "
510 "std::vector Accumulator.");
511 painCave.isFatal = 1;
518 for (
unsigned int i = 0; i < 3; i++) {
519 for (
unsigned int j = 0; j < 3; j++) {
520 if (std::isinf(dat(i, j)) || std::isnan(dat(i, j))) {
521 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
522 errorMessage.c_str());
523 painCave.isFatal = 1;
529 stream <<
"\t" << dat(i, j);
535 void writeErrorBars(std::ostream& stream,
const std::string& errorMessage,
536 ErrorHandling errorHandling)
const override {
538 std::size_t count = Mat3x3dAccumulator::getCount();
540 switch (errorHandling) {
541 case ErrorHandling::CI95:
542 err = Mat3x3dAccumulator::get95percentConfidenceInterval();
544 case ErrorHandling::StdDev:
545 err = Mat3x3dAccumulator::getStdDev();
547 case ErrorHandling::Variance:
548 err = Mat3x3dAccumulator::getVariance();
554 for (
unsigned int i = 0; i < 3; i++) {
555 for (
unsigned int j = 0; j < 3; j++) {
556 if (count == 0 && errorHandling == ErrorHandling::CI95) {
559 if (std::isinf(err(i, j)) || std::isnan(err(i, j))) {
560 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
"%s",
561 errorMessage.c_str());
562 painCave.isFatal = 1;
568 stream <<
"\t" << err(i, j);
575 std::type_index getType()
const override {
return typeid(Mat3x3d); }
577 std::size_t getCount()
const override {
578 return Mat3x3dAccumulator::getCount();