Newer
Older
#ifndef HISTOGRAM1DTEST_H
#define HISTOGRAM1DTEST_H
#include "Histogram1D.h"
#include "Exceptions.h"
#include "gtest/gtest.h"
class Histogram1DTest : public ::testing::Test
{
protected:
Histogram1DTest(){}
virtual ~Histogram1DTest(){}
};
TEST_F(Histogram1DTest, FixedBinConstructor)
{
Histogram1D hist(5, 0.0, 5.0);
EXPECT_EQ(size_t(1), hist.getRank());
EXPECT_EQ(size_t(5), hist.getTotalNumberOfBins());
EXPECT_EQ(0.0, hist.getXmin());
EXPECT_EQ(5.0, hist.getXmax());
EXPECT_EQ(std::string("x-axis"), hist.getXaxis()->getName());
EXPECT_THROW(hist.getYaxis(), LogicErrorException);
for(size_t index=0; index<hist.getTotalNumberOfBins(); ++index) {
EXPECT_EQ(index, hist.getGlobalBin(index));
EXPECT_EQ(int(index), hist.getXaxisIndex(index));
}
}
TEST_F(Histogram1DTest, FixedBinDefaultContent)
{
Histogram1D hist(5, 0.0, 5.0);
// bin centers
Van Herck, Walter
committed
std::vector<double> bin_centers = {0.5, 1.5, 2.5, 3.5, 4.5};
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
std::vector<double> centers = hist.getBinCenters();
for(size_t index=0; index < bin_centers.size(); ++index) {
EXPECT_EQ(centers[index], bin_centers[index]);
EXPECT_EQ(hist.getXaxisValue(index), bin_centers[index]);
EXPECT_EQ(hist.getXaxis()->getBinCenter(index), bin_centers[index]);
}
// default bin values
std::vector<double> values = hist.getBinValues();
for(size_t index=0; index < bin_centers.size(); ++index) {
EXPECT_EQ(hist.getBinContent(index), 0.0);
EXPECT_EQ(values[index], 0.0);
}
// default bin errors
std::vector<double> errors = hist.getBinErrors();
for(size_t index=0; index < bin_centers.size(); ++index) {
EXPECT_EQ(hist.getBinError(index), 0.0);
EXPECT_EQ(errors[index], 0.0);
}
// default bin entries
for(size_t index=0; index < bin_centers.size(); ++index) {
EXPECT_EQ(hist.getBinNumberOfEntries(index), 0);
}
}
TEST_F(Histogram1DTest, FixedBinFill)
{
Histogram1D hist(5, 0.0, 5.0);
// filling two different bins
hist.fill(0.5, 88.0);
hist.fill(4.5, 99.0);
EXPECT_EQ(hist.getBinContent(0), 88.0);
EXPECT_EQ(hist.getBinNumberOfEntries(0), 1);
EXPECT_EQ(hist.getBinError(0), 0.0);
EXPECT_EQ(hist.getBinContent(4), 99.0);
EXPECT_EQ(hist.getBinNumberOfEntries(4), 1);
EXPECT_EQ(hist.getBinError(4), 0.0);
Van Herck, Walter
committed
std::vector<double> values = {88.0, 0.0, 0.0, 0.0, 99.0};
for(size_t index=0; index<hist.getTotalNumberOfBins(); ++index) {
EXPECT_EQ(hist.getBinValues()[index], values[index]);
EXPECT_EQ(hist.getBinErrors()[index], 0.0);
}
// resetting histograms
hist.reset();
EXPECT_EQ(hist.getBinContent(0), 0.0);
EXPECT_EQ(hist.getBinNumberOfEntries(0), 0);
EXPECT_EQ(hist.getBinError(0), 0.0);
EXPECT_EQ(hist.getBinContent(4), 0.0);
EXPECT_EQ(hist.getBinNumberOfEntries(4), 0);
EXPECT_EQ(hist.getBinError(4), 0.0);
// another fill
const double xvalue(1.5);
const int xbin = 1;
hist.fill(xvalue, 3.0);
EXPECT_EQ(2, hist.getBinNumberOfEntries(xbin));
EXPECT_EQ(4.0, hist.getBinContent(xbin));
EXPECT_EQ(2.0, hist.getBinAverage(xbin));
EXPECT_EQ(1.0, hist.getBinError(xbin));
// another fill
hist.reset();
hist.fill(xvalue, 1.0);
hist.fill(xvalue, 2.0);
hist.fill(xvalue, 3.0);
EXPECT_EQ(3, hist.getBinNumberOfEntries(xbin));
EXPECT_EQ(6.0, hist.getBinContent(xbin));
EXPECT_EQ(2.0, hist.getBinAverage(xbin));
EXPECT_EQ(2.0/3.0, hist.getBinError(xbin)*hist.getBinError(xbin));
// -1.0 -0.5 0.5 1.0 2.0 X
TEST_F(Histogram1DTest, crop)
{
Van Herck, Walter
committed
std::vector<double> xedges = {-1.0, -0.5, 0.5, 1.0, 2.0};
std::vector<double> xvalues = {-0.75, 0.0, 0.75, 1.5};
Histogram1D hist(4, xedges);
for(size_t i=0; i<xvalues.size(); ++i) {
hist.fill(xvalues[i], i*10);
}
std::unique_ptr<Histogram1D > crop(hist.crop(-0.49, 0.99));
EXPECT_EQ(-0.5, crop->getXmin());
EXPECT_EQ(1.0, crop->getXmax());
EXPECT_EQ(10.0, crop->getBinContent(0));
EXPECT_EQ(20.0, crop->getBinContent(1));
}
TEST_F(Histogram1DTest, CreateHistogram)
{
OutputData<double> data;
data.addAxis("x-axis", 10, 0.0, 10.0);
for(size_t i=0; i<data.getAllocatedSize(); ++i) {
data[i] = double(i);
}
std::unique_ptr<IHistogram> hist(IHistogram::createHistogram(data));
EXPECT_EQ(size_t(1), hist->getRank());
EXPECT_EQ(data.getAllocatedSize(), hist->getNbinsX());
EXPECT_EQ(data.getAxis(0)->getMin(), hist->getXmin());
EXPECT_EQ(data.getAxis(0)->getMax(), hist->getXmax());
for(size_t i=0; i<hist->getTotalNumberOfBins(); ++i) {
EXPECT_EQ(data[i], hist->getBinContent(i));
EXPECT_EQ(data[i], hist->getBinAverage(i));
EXPECT_EQ(1, hist->getBinNumberOfEntries(i));
EXPECT_EQ(0.0, hist->getBinError(i));
}
}
TEST_F(Histogram1DTest, CreateOutputData)
{
Histogram1D hist(10, -5.0, 5.0);
for(size_t i=0; i<hist.getNbinsX(); ++i) {
hist.fill(hist.getXaxisValue(i), 1.0);
hist.fill(hist.getXaxisValue(i), 3.0);
}
std::unique_ptr<OutputData<double> > data(hist.createOutputData(IHistogram::DataType::INTEGRAL));
EXPECT_EQ(size_t(1), data->getRank());
EXPECT_EQ(data->getAllocatedSize(), hist.getNbinsX());
EXPECT_EQ(data->getAxis(0)->getMin(), hist.getXmin());
EXPECT_EQ(data->getAxis(0)->getMax(), hist.getXmax());
for(size_t i=0; i<data->getAllocatedSize(); ++i) {
EXPECT_EQ(4.0, (*data)[i]);
}
data.reset(hist.createOutputData(IHistogram::DataType::AVERAGE));
for(size_t i=0; i<data->getAllocatedSize(); ++i) {
EXPECT_EQ(2.0, (*data)[i]);
}
data.reset(hist.createOutputData(IHistogram::DataType::STANDARD_ERROR));
for(size_t i=0; i<data->getAllocatedSize(); ++i) {
EXPECT_EQ(1.0, (*data)[i]);
}
data.reset(hist.createOutputData(IHistogram::DataType::NENTRIES));
for(size_t i=0; i<data->getAllocatedSize(); ++i) {
EXPECT_EQ(2.0, (*data)[i]);
}
}
TEST_F(Histogram1DTest, GetMaximumGetMinimum)
{
Histogram1D hist(10, -5.0, 5.0);
hist.fill(-4.5, 10.);
EXPECT_EQ(10.0, hist.getMaximum());
EXPECT_EQ(size_t(0), hist.getMaximumBinIndex());
EXPECT_EQ(0.0, hist.getMinimum());
EXPECT_EQ(size_t(1), hist.getMinimumBinIndex());
hist.fill(-3.5, 20.0);
EXPECT_EQ(20.0, hist.getMaximum());
EXPECT_EQ(size_t(1), hist.getMaximumBinIndex());
}
TEST_F(Histogram1DTest, Scale)
{
Histogram1D hist(10, -5.0, 5.0);
for(size_t i=0; i<hist.getTotalNumberOfBins(); ++i) {
hist.fill(-4.5+i, 1.0);
}
hist.scale(10.0);
for(size_t i=0; i<hist.getTotalNumberOfBins(); ++i) {
EXPECT_EQ(10.0, hist.getBinContent(i));
}
}
TEST_F(Histogram1DTest, Integral)
{
Histogram1D hist(10, -5.0, 5.0);
for(size_t i=0; i<hist.getTotalNumberOfBins(); ++i) {
hist.fill(-4.5+i, 1.0);
}
EXPECT_EQ(10.0, hist.integral());
}
TEST_F(Histogram1DTest, Addition)
{
Histogram1D hist1(10, -5.0, 5.0);
for(size_t i=0; i<hist1.getTotalNumberOfBins(); ++i) {
hist1.fill(-4.5+i, 1.0);
}
Histogram1D hist2(10, -5.0, 5.0);
for(size_t i=0; i<hist2.getTotalNumberOfBins(); ++i) {
hist2.fill(-4.5+i, 2.0);
}
hist1 += hist2;
for(size_t i=0; i<hist1.getTotalNumberOfBins(); ++i) {
EXPECT_EQ(3.0, hist1.getBinContent(i));
}
}