From f42ce0fa681ae2f32cb63c534e11495c344a2080 Mon Sep 17 00:00:00 2001 From: Marina Ganeva <m.ganeva@fz-juelich.de> Date: Tue, 3 Dec 2013 09:41:54 +0100 Subject: [PATCH] IsGISAXS04 functional test is done. --- Core/StandardSamples/SimulationRegistry.cpp | 10 ++- Core/StandardSamples/StandardSimulations.cpp | 35 +++++++++ Core/StandardSamples/StandardSimulations.h | 3 +- Tests/FunctionalTests/TestCore/CMakeLists.txt | 3 +- .../TestCore/IsGISAXS03BA/IsGISAXS03BA.h | 4 +- .../IsGISAXS03BAsize/IsGISAXS03BAsize.h | 4 +- .../TestCore/IsGISAXS03DWBA/IsGISAXS03DWBA.h | 4 +- .../IsGISAXS041DDL/IsGISAXS041DDL.cpp | 78 +++++++++++++++++++ .../TestCore/IsGISAXS041DDL/IsGISAXS041DDL.h | 27 +++++++ .../IsGISAXS042DDL/IsGISAXS042DDL.cpp | 78 +++++++++++++++++++ .../TestCore/IsGISAXS042DDL/IsGISAXS042DDL.h | 27 +++++++ 11 files changed, 264 insertions(+), 9 deletions(-) create mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS041DDL/IsGISAXS041DDL.cpp create mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS041DDL/IsGISAXS041DDL.h create mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS042DDL/IsGISAXS042DDL.cpp create mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS042DDL/IsGISAXS042DDL.h diff --git a/Core/StandardSamples/SimulationRegistry.cpp b/Core/StandardSamples/SimulationRegistry.cpp index 1e8737f61f8..64cbf35ff49 100644 --- a/Core/StandardSamples/SimulationRegistry.cpp +++ b/Core/StandardSamples/SimulationRegistry.cpp @@ -24,7 +24,15 @@ SimulationRegistry::SimulationRegistry() registerItem( "isgisaxs03_basize", StandardSimulations::IsGISAXS03BAsize, - "Cylinder formfactor in BA size"); + "Cylinder formfactor in BA with size distribution"); + + registerItem( + "isgisaxs04_1DDL", StandardSimulations::IsGISAXS041DDL, + "IsGISAXS04 example, 1DDL structure factor"); + + registerItem( + "isgisaxs04_2DDL", StandardSimulations::IsGISAXS042DDL, + "IsGISAXS04 example, 2DDL structure factor"); registerItem( "mesocrystal01", StandardSimulations::MesoCrystal01, diff --git a/Core/StandardSamples/StandardSimulations.cpp b/Core/StandardSamples/StandardSimulations.cpp index b4fdcc85c97..b649f5417c4 100644 --- a/Core/StandardSamples/StandardSimulations.cpp +++ b/Core/StandardSamples/StandardSimulations.cpp @@ -94,6 +94,41 @@ Simulation *StandardSimulations::IsGISAXS03BAsize() return result; } +Simulation *StandardSimulations::IsGISAXS041DDL() +{ + SampleBuilderFactory factory; + ISampleBuilder *builder = factory.createBuilder("isgisaxs04_1DDL"); + + Simulation *result = new Simulation(); + + result->setDetectorParameters(100, 0.0*Units::degree, 2.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::IsGISAXS042DDL() +{ + SampleBuilderFactory factory; + ISampleBuilder *builder = factory.createBuilder("isgisaxs04_2DDL"); + + Simulation *result = new Simulation(); + + result->setDetectorParameters(100, 0.0*Units::degree, 2.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 bb9902fa081..a2b8626d2bb 100644 --- a/Core/StandardSamples/StandardSimulations.h +++ b/Core/StandardSamples/StandardSimulations.h @@ -13,7 +13,8 @@ Simulation *IsGISAXS02(); Simulation *IsGISAXS03BA(); Simulation *IsGISAXS03DWBA(); Simulation *IsGISAXS03BAsize(); -//Simulation *IsGISAXS04(); +Simulation *IsGISAXS041DDL(); +Simulation *IsGISAXS042DDL(); //Simulation *IsGISAXS06(); //Simulation *IsGISAXS07(); //Simulation *IsGISAXS08(); diff --git a/Tests/FunctionalTests/TestCore/CMakeLists.txt b/Tests/FunctionalTests/TestCore/CMakeLists.txt index 30f97f760b0..d09e64b6f24 100644 --- a/Tests/FunctionalTests/TestCore/CMakeLists.txt +++ b/Tests/FunctionalTests/TestCore/CMakeLists.txt @@ -10,7 +10,8 @@ set(list_of_tests "IsGISAXS03BA" "IsGISAXS03DWBA" "IsGISAXS03BAsize" - "IsGISAXS04" + "IsGISAXS041DDL" + "IsGISAXS042DDL" "IsGISAXS06" "IsGISAXS07" "IsGISAXS08" diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS03BA/IsGISAXS03BA.h b/Tests/FunctionalTests/TestCore/IsGISAXS03BA/IsGISAXS03BA.h index 454df91317d..cc3d143cad9 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS03BA/IsGISAXS03BA.h +++ b/Tests/FunctionalTests/TestCore/IsGISAXS03BA/IsGISAXS03BA.h @@ -1,5 +1,5 @@ -#ifndef FUNCTIONALTESTS_ISGISAXS03_H -#define FUNCTIONALTESTS_ISGISAXS03_H +#ifndef FUNCTIONALTESTS_ISGISAXS03BA_H +#define FUNCTIONALTESTS_ISGISAXS03BA_H #include "ISampleBuilder.h" #include <string> diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS03BAsize/IsGISAXS03BAsize.h b/Tests/FunctionalTests/TestCore/IsGISAXS03BAsize/IsGISAXS03BAsize.h index 0b7502a54a8..d2502f806bb 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS03BAsize/IsGISAXS03BAsize.h +++ b/Tests/FunctionalTests/TestCore/IsGISAXS03BAsize/IsGISAXS03BAsize.h @@ -1,5 +1,5 @@ -#ifndef FUNCTIONALTESTS_ISGISAXS03_H -#define FUNCTIONALTESTS_ISGISAXS03_H +#ifndef FUNCTIONALTESTS_ISGISAXS03BAsize_H +#define FUNCTIONALTESTS_ISGISAXS03BAsize_H #include "ISampleBuilder.h" #include <string> diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS03DWBA/IsGISAXS03DWBA.h b/Tests/FunctionalTests/TestCore/IsGISAXS03DWBA/IsGISAXS03DWBA.h index 9ecd61e7604..9de6f0c4359 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS03DWBA/IsGISAXS03DWBA.h +++ b/Tests/FunctionalTests/TestCore/IsGISAXS03DWBA/IsGISAXS03DWBA.h @@ -1,5 +1,5 @@ -#ifndef FUNCTIONALTESTS_ISGISAXS03_H -#define FUNCTIONALTESTS_ISGISAXS03_H +#ifndef FUNCTIONALTESTS_ISGISAXS03DWBA_H +#define FUNCTIONALTESTS_ISGISAXS03DWBA_H #include "ISampleBuilder.h" #include <string> diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS041DDL/IsGISAXS041DDL.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS041DDL/IsGISAXS041DDL.cpp new file mode 100644 index 00000000000..a73abde9b89 --- /dev/null +++ b/Tests/FunctionalTests/TestCore/IsGISAXS041DDL/IsGISAXS041DDL.cpp @@ -0,0 +1,78 @@ +#include "IsGISAXS041DDL.h" +#include "OutputDataIOFactory.h" +#include "SampleBuilderFactory.h" +#include "Simulation.h" +#include "Units.h" +#include "Utils.h" +#include "MathFunctions.h" +#include "SimulationRegistry.h" +#include <iostream> +#include <cmath> +#include <gsl/gsl_errno.h> + +FunctionalTests::IsGISAXS041DDL::IsGISAXS041DDL() + : m_name("IsGISAXS041DDL") + , m_description("1D Paracrystal") + , m_result(0) + , m_reference(0) +{ } + + +void FunctionalTests::IsGISAXS041DDL::run(const std::string &path_to_data) +{ + + SimulationRegistry sim_registry; + Simulation *simulation = sim_registry.createSimulation("isgisaxs04_1DDL"); + + // loading reference data + std::string filename = path_to_data + "isgisaxs04_reference_1DDL.ima.gz"; + m_reference = OutputDataIOFactory::readIntensityData(filename); + + simulation->runSimulation(); + + m_result = simulation->getIntensityData(); + delete simulation; +} + + +int FunctionalTests::IsGISAXS041DDL::analyseResults() +{ + const double threshold(2e-10); + + // Calculating average relative difference. + *m_result -= *m_reference; + *m_result /= *m_reference; + + double diff(0); + for(OutputData<double>::const_iterator it = + m_result->begin(); it!=m_result->end(); ++it) { + diff+= std::fabs(*it); + } + diff /= m_result->getAllocatedSize(); + + // Assess result. + 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; + return (status_ok ? 0 : 1); +} + + +#ifdef STANDALONE +std::string GetPathToData(int argc, char **argv) +{ + if(argc == 2) return argv[1]; + return Utils::FileSystem::GetPathToData("../../../ReferenceData/BornAgain/", argv[0]); +} + +int main(int argc, char **argv) +{ + FunctionalTests::IsGISAXS041DDL test; + test.run(GetPathToData(argc, argv)); + return test.analyseResults(); +} +#endif + diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS041DDL/IsGISAXS041DDL.h b/Tests/FunctionalTests/TestCore/IsGISAXS041DDL/IsGISAXS041DDL.h new file mode 100644 index 00000000000..39c7c439488 --- /dev/null +++ b/Tests/FunctionalTests/TestCore/IsGISAXS041DDL/IsGISAXS041DDL.h @@ -0,0 +1,27 @@ +#ifndef FUNCTIONALTESTS_ISGISAXS041DDL_H +#define FUNCTIONALTESTS_ISGISAXS041DDL_H + +#include "ISampleBuilder.h" +#include <string> +#include "OutputData.h" + +namespace FunctionalTests { + +class IsGISAXS041DDL +{ + public: + IsGISAXS041DDL(); + ~IsGISAXS041DDL() { 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; +}; + +} + +#endif diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS042DDL/IsGISAXS042DDL.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS042DDL/IsGISAXS042DDL.cpp new file mode 100644 index 00000000000..8e4c8689884 --- /dev/null +++ b/Tests/FunctionalTests/TestCore/IsGISAXS042DDL/IsGISAXS042DDL.cpp @@ -0,0 +1,78 @@ +#include "IsGISAXS042DDL.h" +#include "OutputDataIOFactory.h" +#include "SampleBuilderFactory.h" +#include "Simulation.h" +#include "Units.h" +#include "Utils.h" +#include "MathFunctions.h" +#include "SimulationRegistry.h" +#include <iostream> +#include <cmath> +#include <gsl/gsl_errno.h> + +FunctionalTests::IsGISAXS042DDL::IsGISAXS042DDL() + : m_name("IsGISAXS042DDL") + , m_description("2D Paracrystal") + , m_result(0) + , m_reference(0) +{ } + + +void FunctionalTests::IsGISAXS042DDL::run(const std::string &path_to_data) +{ + + SimulationRegistry sim_registry; + Simulation *simulation = sim_registry.createSimulation("isgisaxs04_2DDL"); + + // loading reference data + std::string filename = path_to_data + "isgisaxs04_reference_2DDLh.ima.gz"; + m_reference = OutputDataIOFactory::readIntensityData(filename); + + simulation->runSimulation(); + + m_result = simulation->getIntensityData(); + delete simulation; +} + + +int FunctionalTests::IsGISAXS042DDL::analyseResults() +{ + const double threshold(2e-10); + + // Calculating average relative difference. + *m_result -= *m_reference; + *m_result /= *m_reference; + + double diff(0); + for(OutputData<double>::const_iterator it = + m_result->begin(); it!=m_result->end(); ++it) { + diff+= std::fabs(*it); + } + diff /= m_result->getAllocatedSize(); + + // Assess result. + 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; + return (status_ok ? 0 : 1); +} + + +#ifdef STANDALONE +std::string GetPathToData(int argc, char **argv) +{ + if(argc == 2) return argv[1]; + return Utils::FileSystem::GetPathToData("../../../ReferenceData/BornAgain/", argv[0]); +} + +int main(int argc, char **argv) +{ + FunctionalTests::IsGISAXS042DDL test; + test.run(GetPathToData(argc, argv)); + return test.analyseResults(); +} +#endif + diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS042DDL/IsGISAXS042DDL.h b/Tests/FunctionalTests/TestCore/IsGISAXS042DDL/IsGISAXS042DDL.h new file mode 100644 index 00000000000..8c0ca2594e9 --- /dev/null +++ b/Tests/FunctionalTests/TestCore/IsGISAXS042DDL/IsGISAXS042DDL.h @@ -0,0 +1,27 @@ +#ifndef FUNCTIONALTESTS_ISGISAXS042DDL_H +#define FUNCTIONALTESTS_ISGISAXS042DDL_H + +#include "ISampleBuilder.h" +#include <string> +#include "OutputData.h" + +namespace FunctionalTests { + +class IsGISAXS042DDL +{ + public: + IsGISAXS042DDL(); + ~IsGISAXS042DDL() { 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; +}; + +} + +#endif -- GitLab