Newer
Older
#ifndef REBINHISTOGRAM_TEST_H_
#define REBINHISTOGRAM_TEST_H_
#include <cxxtest/TestSuite.h>
#include <vector>
#include "MantidKernel/VectorHelper.h"
/// @author Laurent C Chapon, ISIS Facility, Rutherford Appleton Laboratory
/// 13/03/2009
/// This is testing the validity of the rebinHistogram function in vectorHelper Class
class RebinHistogramTest : public CxxTest::TestSuite
{
Russell Taylor
committed
public:
/// Create a new X vector where the steps are half the size of the old one.
/// Perform rebin and check the values
/// Y data should now contains half the intensity
/// E data should contains the
/// Perform another rebin in the opposite direction and check that the data are identical to initial values
void TestRebinSmallerSteps()
{
Russell Taylor
committed
// Size of vectors
size_t size1=12, size2=23;
Russell Taylor
committed
std::vector<double> xin(size1);
std::vector<double> yin(size1-1);
std::vector<double> ein(size1-1);
std::vector<double> xout(size2);
std::vector<double> yout(size2-1);
std::vector<double> eout(size2-1);
for (std::size_t i=0;i<size1-1;i++)
{
xin[i]=(double)(i);
yin[i]=1.0;
ein[i]=1.0;
}
xin[size1-1]=static_cast<double>(size1-1);
Russell Taylor
committed
for (std::size_t i=0;i<size2;i++)
xout[i]=0.5*static_cast<double>(i);
Russell Taylor
committed
Mantid::Kernel::VectorHelper::rebinHistogram(xin,yin,ein,xout,yout,eout,false);
for (std::size_t i=0;i<size2-1;i++)
{
TS_ASSERT_DELTA(yout[i],0.5,1e-7);
TS_ASSERT_DELTA(eout[i],1.0/sqrt(2.0),1e-7);
}
std::vector<double> returnX(xin), returnY(size1-1), returnE(size1-1);
Mantid::Kernel::VectorHelper::rebinHistogram(xout,yout,eout,returnX,returnY,returnE,false);
for (std::size_t i=0;i<size1-1;i++)
{
TS_ASSERT_DELTA(returnY[i],yin[i],1e-7);
TS_ASSERT_DELTA(returnE[i],ein[i],1e-7);
}
}
};
#endif //REBINHISTOGRAM_TEST_H_/