From 1e3b36c951307c862b3f6ccc2a517446f5d56f1d Mon Sep 17 00:00:00 2001 From: Walter Van Herck <w.van.herck@fz-juelich.de> Date: Mon, 5 Nov 2012 17:10:34 +0100 Subject: [PATCH] Added ChiSquaredFrequency (with dummy implementation) --- Core/Algorithms/inc/ChiSquaredFrequency.h | 32 ++++++++++++++ Core/Algorithms/src/ChiSquaredFrequency.cpp | 49 +++++++++++++++++++++ Core/Core.pro | 2 + 3 files changed, 83 insertions(+) create mode 100644 Core/Algorithms/inc/ChiSquaredFrequency.h create mode 100644 Core/Algorithms/src/ChiSquaredFrequency.cpp diff --git a/Core/Algorithms/inc/ChiSquaredFrequency.h b/Core/Algorithms/inc/ChiSquaredFrequency.h new file mode 100644 index 00000000000..877dd77ee1b --- /dev/null +++ b/Core/Algorithms/inc/ChiSquaredFrequency.h @@ -0,0 +1,32 @@ +#ifndef CHISQUAREDFREQUENCY_H_ +#define CHISQUAREDFREQUENCY_H_ +// ******************************************************************** +// * The BornAgain project * +// * Simulation of neutron and x-ray scattering at grazing incidence * +// * * +// * LICENSE AND DISCLAIMER * +// * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris * +// * eget quam orci. Quisque porta varius dui, quis posuere nibh * +// * mollis quis. Mauris commodo rhoncus porttitor. * +// ******************************************************************** +//! @file ChiSquaredFrequency.h +//! @brief Definition of ChiSquaredFrequency class +//! @author Scientific Computing Group at FRM II +//! @date Nov 5, 2012 + +#include "IChiSquaredModule.h" + +class ChiSquaredFrequency : public IChiSquaredModule +{ +public: + ChiSquaredFrequency(const OutputData<double> &real_data); + virtual ~ChiSquaredFrequency(); + + virtual double calculateChiSquared(const OutputData<double> *p_simulation_data=0); + + //! return output data which contains chi^2 values + virtual OutputData<double > *createChi2DifferenceMap() const; +}; + + +#endif /* CHISQUAREDFREQUENCY_H_ */ diff --git a/Core/Algorithms/src/ChiSquaredFrequency.cpp b/Core/Algorithms/src/ChiSquaredFrequency.cpp new file mode 100644 index 00000000000..9a04212884f --- /dev/null +++ b/Core/Algorithms/src/ChiSquaredFrequency.cpp @@ -0,0 +1,49 @@ +#include "ChiSquaredFrequency.h" + +ChiSquaredFrequency::ChiSquaredFrequency(const OutputData<double>& real_data) +: IChiSquaredModule(real_data) +{ +} + +ChiSquaredFrequency::~ChiSquaredFrequency() +{ +} + +double ChiSquaredFrequency::calculateChiSquared( + const OutputData<double>* p_simulation_data) +{ + if (p_simulation_data!=0) { + setSimulationData(*p_simulation_data); + } + if (mp_simulation_data==0) { + throw LogicErrorException("No simulation data present for calculating chi squared."); + } + double result = 0.0; + size_t data_size = mp_real_data->getAllocatedSize(); + initWeights(); + OutputData<double> *p_difference = createChi2DifferenceMap(); + mp_weights->resetIndex(); + p_difference->resetIndex(); + while(p_difference->hasNext()) { + result += p_difference->next()*mp_weights->next(); + } + delete p_difference; + m_chi2_value = result/data_size; + return m_chi2_value;} + +OutputData<double>* ChiSquaredFrequency::createChi2DifferenceMap() const +{ + OutputData<double > *p_difference = mp_simulation_data->clone(); + p_difference->setAllTo(0.0); + + mp_simulation_data->resetIndex(); + mp_real_data->resetIndex(); + p_difference->resetIndex(); + while (mp_real_data->hasNext()) { + double value_simu = mp_simulation_data->next(); + double value_real = mp_real_data->next(); + double squared_difference = mp_squared_function->calculateSquaredDifference(value_real, value_simu); + p_difference->next() = squared_difference; + } + + return p_difference;} diff --git a/Core/Core.pro b/Core/Core.pro index 3fbc0073f47..47fab78f04c 100644 --- a/Core/Core.pro +++ b/Core/Core.pro @@ -18,6 +18,7 @@ QMAKE_EXTENSION_SHLIB = so # ----------------------------------------------------------------------------- SOURCES += \ Algorithms/src/Beam.cpp \ + Algorithms/src/ChiSquaredFrequency.cpp \ Algorithms/src/ChiSquaredModule.cpp \ Algorithms/src/ConvolutionDetectorResolution.cpp \ Algorithms/src/DecouplingApproximationStrategy.cpp \ @@ -120,6 +121,7 @@ SOURCES += \ HEADERS += \ Algorithms/inc/Beam.h \ + Algorithms/inc/ChiSquaredFrequency.h \ Algorithms/inc/ChiSquaredModule.h \ Algorithms/inc/ConvolutionDetectorResolution.h \ Algorithms/inc/DecouplingApproximationStrategy.h \ -- GitLab