From 8988c1df91a500aba03dc00ecbe1b00b174ab438 Mon Sep 17 00:00:00 2001 From: Marina Ganeva <m.ganeva@fz-juelich.de> Date: Mon, 2 Dec 2013 13:48:30 +0100 Subject: [PATCH] IsGISAXS01 functional test is done. --- Core/StandardSamples/SimulationRegistry.cpp | 3 ++ Core/StandardSamples/StandardSimulations.cpp | 18 +++++++ Core/StandardSamples/StandardSimulations.h | 2 +- .../TestCore/IsGISAXS01/IsGISAXS01.cpp | 52 +++++++------------ .../TestCore/IsGISAXS01/IsGISAXS01.h | 13 +++-- .../PolarizedDWBAZeroMag.h | 1 - 6 files changed, 51 insertions(+), 38 deletions(-) diff --git a/Core/StandardSamples/SimulationRegistry.cpp b/Core/StandardSamples/SimulationRegistry.cpp index 37776b8a9b6..bf0a5341782 100644 --- a/Core/StandardSamples/SimulationRegistry.cpp +++ b/Core/StandardSamples/SimulationRegistry.cpp @@ -6,6 +6,9 @@ SimulationRegistry::SimulationRegistry() { + registerItem( + "isgisaxs01", StandardSimulations::IsGISAXS01, + "Mixture of cylinders and prisms without interference"); registerItem( "mesocrystal01", StandardSimulations::MesoCrystal01, diff --git a/Core/StandardSamples/StandardSimulations.cpp b/Core/StandardSamples/StandardSimulations.cpp index 5e7e5f2304a..ab7a2c5e977 100644 --- a/Core/StandardSamples/StandardSimulations.cpp +++ b/Core/StandardSamples/StandardSimulations.cpp @@ -4,6 +4,24 @@ #include "ResolutionFunction2DSimple.h" #include "Units.h" +Simulation *StandardSimulations::IsGISAXS01() +{ + SampleBuilderFactory factory; + ISampleBuilder *builder = factory.createBuilder("isgisaxs01"); + + Simulation *result = new Simulation(); + + result->setDetectorParameters( + 100,-1.0*Units::degree, 1.0*Units::degree, 100, + 0.0*Units::degree, 2.0*Units::degree, true); + result->setBeamParameters( + 1.0*Units::angstrom, 0.2*Units::degree, 0.0*Units::degree); + + result->setSampleBuilder( builder ); + + return result; +} + Simulation *StandardSimulations::MesoCrystal01() { SampleBuilderFactory factory; diff --git a/Core/StandardSamples/StandardSimulations.h b/Core/StandardSamples/StandardSimulations.h index 4061e77b03d..d535a17e940 100644 --- a/Core/StandardSamples/StandardSimulations.h +++ b/Core/StandardSamples/StandardSimulations.h @@ -8,7 +8,7 @@ class Simulation; namespace StandardSimulations{ - +Simulation *IsGISAXS01(); Simulation *MesoCrystal01(); Simulation *PolarizedDWBAZeroMag(); diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.cpp index ccf009565d6..25c5ee9b583 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.cpp +++ b/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.cpp @@ -5,6 +5,7 @@ #include "Utils.h" #include "Units.h" #include "MathFunctions.h" +#include "SimulationRegistry.h" #include <iostream> #include <cmath> @@ -13,44 +14,34 @@ FunctionalTests::IsGISAXS01::IsGISAXS01() : m_name("IsGISAXS01") , m_description("Mixture of cylinders and prisms without interference") , m_result(0) + , m_reference(0) { } -void FunctionalTests::IsGISAXS01::run() +void FunctionalTests::IsGISAXS01::run(const std::string &path_to_data) { - SampleBuilderFactory factory; - ISample *sample = factory.createSample("isgisaxs01"); - Simulation simulation; - simulation.setDetectorParameters( - 100,-1.0*Units::degree, 1.0*Units::degree, 100, - 0.0*Units::degree, 2.0*Units::degree, true); - simulation.setBeamParameters( - 1.0*Units::angstrom, 0.2*Units::degree, 0.0*Units::degree); + SimulationRegistry sim_registry; + Simulation *simulation = sim_registry.createSimulation("isgisaxs01"); - // Run simulation - simulation.setSample(*sample); - simulation.runSimulation(); + // loading reference data + std::string filename = path_to_data + "isgisaxs01_reference.ima.gz"; + m_reference = OutputDataIOFactory::readIntensityData(filename); - // Copy results - m_result = simulation.getIntensityData(); + simulation->runSimulation(); - delete sample; + m_result = simulation->getIntensityData(); + delete simulation; } -int FunctionalTests::IsGISAXS01::analyseResults(const std::string &path_to_data) +int FunctionalTests::IsGISAXS01::analyseResults() { const double threshold(2e-10); - // Retrieve reference data. - std::string filename = path_to_data + "isgisaxs01_reference.ima.gz"; - OutputData<double > *reference = - OutputDataIOFactory::readIntensityData(filename); - // Calculating average relative difference. - *m_result -= *reference; - *m_result /= *reference; + *m_result -= *m_reference; + *m_result /= *m_reference; double diff(0); for(OutputData<double>::const_iterator it = @@ -60,15 +51,12 @@ int FunctionalTests::IsGISAXS01::analyseResults(const std::string &path_to_data) diff /= m_result->getAllocatedSize(); // Assess result. - bool status_ok(true); - if( diff > threshold || MathFunctions::isnan(diff) ) status_ok=false; - + bool status_ok(true); + if( diff > threshold || std::isnan(diff)) status_ok=false; + std::cout << " diff " << diff << std::endl; std::cout << m_name << " " << m_description << " " << - (status_ok ? "[OK]" : "[FAILED]") << std::endl; - - delete reference; - + (status_ok ? "[OK]" : "[FAILED]") << std::endl; return (status_ok ? 0 : 1); } @@ -83,7 +71,7 @@ std::string GetPathToData(int argc, char **argv) int main(int argc, char **argv) { FunctionalTests::IsGISAXS01 test; - test.run(); - return test.analyseResults(GetPathToData(argc,argv)); + test.run(GetPathToData(argc, argv)); + return test.analyseResults(); } #endif diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.h b/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.h index cae1dbcea35..5d3a5b07a93 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.h +++ b/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.h @@ -1,23 +1,28 @@ #ifndef FUNCTIONALTESTS_ISGISAXS01_H #define FUNCTIONALTESTS_ISGISAXS01_H +#include "ISampleBuilder.h" #include <string> #include "OutputData.h" +class ISample; +class Simulation; + namespace FunctionalTests { class IsGISAXS01 { public: IsGISAXS01(); - ~IsGISAXS01() { delete m_result; } - void run(); - int analyseResults(const std::string &path_to_data = std::string()); - const OutputData<double> *getOutputData() { return m_result;} + ~IsGISAXS01() { delete m_result; delete m_reference; } + void run(const std::string &path_to_data = std::string()); + int analyseResults(); +// const OutputData<double> *getOutputData() { return m_result;} private: std::string m_name; std::string m_description; OutputData<double> *m_result; + OutputData<double> *m_reference; }; } diff --git a/Tests/FunctionalTests/TestCore/PolarizedDWBAZeroMag/PolarizedDWBAZeroMag.h b/Tests/FunctionalTests/TestCore/PolarizedDWBAZeroMag/PolarizedDWBAZeroMag.h index c3bda9aac6e..20e3499eb1a 100644 --- a/Tests/FunctionalTests/TestCore/PolarizedDWBAZeroMag/PolarizedDWBAZeroMag.h +++ b/Tests/FunctionalTests/TestCore/PolarizedDWBAZeroMag/PolarizedDWBAZeroMag.h @@ -8,7 +8,6 @@ class ISample; class Simulation; -#include "OutputData.h" namespace FunctionalTests { -- GitLab