tstDiscreteSpectrum.cpp

./Core/dc/tests/tstDiscreteSpectrum.cpp

#include <cmath>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <istream>
#include <sstream>
#include <string>
#include <vector>
#include "Nemesis/gtest/nemesis_gtest.hh"
#include "Nemesis/harness/DBC.hh"
using namespace Origen;
{
ds.add_line( 0.3, 1.0 );
ds.add_line( 0.1, 0.9 );
ds.add_line( 1.0, 0.8 );
Vec_Dbl energies = ds.energies();
EXPECT_VEC_SOFT_EQ( Vec_Dbl( {1.0, 0.3, 0.1} ), energies );
// check line searches
EXPECT_FLOAT_EQ( 1.0, ds.search( 0.3 ) );
EXPECT_FLOAT_EQ( 0.9, ds.search( 0.1 ) );
EXPECT_FLOAT_EQ( 0.8, ds.search( 1.0 ) );
// least to greatest ordering
EXPECT_EQ( 1.0, ds.energy_at( 0 ) );
EXPECT_EQ( 0.3, ds.energy_at( 1 ) );
EXPECT_EQ( 0.1, ds.energy_at( 2 ) );
// check not found
EXPECT_EQ( BAD_DOUBLE, ds.search( 0.2 ) );
}
{
ds.add_line( 1.0, 0.9 );
ds.add_line( 0.3, 0.8 );
ds.add_line( 0.1, 0.7 );
Vec_Dbl intensity( 4, 0.0 );
ds.bin( {0.5, 0.4, 0.2, 0.05, 0.01}, &intensity );
EXPECT_VEC_SOFT_EQ( Vec_Dbl( {0.0, 0.8, 0.7, 0.0} ), intensity );
if( 0 )
std::cout << Spectrum::print_bins( {0.5, 0.4, 0.2, 0.05, 0.01},
intensity );
intensity.clear();
intensity.resize( 1, 0.0 );
ds.bin( {1.10, 1.05}, &intensity );
EXPECT_VEC_SOFT_EQ( Vec_Dbl( {0.0} ), intensity );
intensity.clear();
intensity.resize( 1, 0.0 );
ds.bin( {1.05, 0.95}, &intensity, 1.3 );
EXPECT_VEC_SOFT_EQ( Vec_Dbl( {1.3 * 0.9} ), intensity );
// check that intensity accumulates a running total
ds.bin( {1.05, 0.01}, &intensity, 0.5 );
double ref = 1.3 * .9 + 0.5 * ( .9 + .8 + .7 );
EXPECT_VEC_SOFT_EQ( Vec_Dbl( {ref} ), intensity );
// clear and check
intensity.clear();
intensity.resize( 1, 0.0 );
Vec_Dbl e( {1.05, 0.01} );
ds.bin( e, &intensity );
EXPECT_VEC_SOFT_EQ( Vec_Dbl( {.9 + .8 + .7} ), intensity );
if( 0 ) std::cout << Spectrum::print_bins( e, intensity );
}