30 ASSERT(dat.size() == ref.size());
32 for (
size_t i = 0; i < dat.size(); ++i)
42 std::vector<double> out(dat.
size());
43 for (
size_t i = 0; i < dat.
size(); ++i)
53 throw std::runtime_error(
"Error in DiffUtil::meanRelativeDifference: "
54 "different number of elements");
57 double sum_of_diff = 0.0;
58 for (
size_t i = 0; i < dat.
size(); ++i)
60 return sum_of_diff / dat.
size();
65 const std::vector<double>& ref,
const double threshold)
67 if (*std::min_element(dat.begin(), dat.end()) == 0
68 && *std::max_element(dat.begin(), dat.end()) == 0) {
69 std::cerr <<
"FAILED: simulated data set is empty" << std::endl;
75 if (diff > threshold) {
76 std::cerr <<
"FAILED: relative deviation of dat from ref is " << diff
77 <<
", above given threshold " << threshold << std::endl;
81 std::cerr <<
"- OK: relative deviation of dat from ref is " << diff
82 <<
", within given threshold " << threshold << std::endl;
84 std::cout <<
"- OK: dat = ref\n";
Defines the macro ASSERT.
#define ASSERT(condition)
Defines structs Bin1D, Bin1DCVector.
Defines and implements templated class Datafield.
Defines namespace DataUtils.
Defines class FixedBinAxis.
Defines and implements templated class Frame.
Defines constants and "almost equal" in namespace Numeric.
Defines class SimulationResult.
Stores radiation power per bin.
double valAt(size_t i) const
bool hasSameShape(const Datafield &other) const
Returns true if objects a) have same dimensions b) bin boundaries of axes coincide.
size_t size() const
Returns total size of data buffer (product of bin number in every dimension).
const Frame & frame() const
std::vector< IAxis * > cloned_axes() const
Returns cloned axes.
Wrapper around Datafield that also provides unit conversions.
Datafield * relativeDifferenceField(const Datafield &dat, const Datafield &ref)
Returns Datafield representing relative difference of two histograms.
double meanRelVecDiff(const std::vector< double > &dat, const std::vector< double > &ref)
Returns relative difference between two data sets sum(dat[i] - ref[i])/ref[i]).
bool checkRelativeDifference(const std::vector< double > &dat, const std::vector< double > &ref, double threshold)
Returns true is relative difference is below threshold; prints informative output.
double meanRelativeDifference(const SimulationResult &dat, const SimulationResult &ref)
Returns sum of relative differences between each pair of elements: (a, b) -> 2*abs(a - b)/(a + b) ( a...
double relativeDifference(double a, double b)
Returns the safe relative difference, which is 2(|a-b|)/(|a|+|b|) except in special cases.