From cd4e04931a2ab43cdb0709a794a974962794cf62 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Mon, 9 Dec 2013 16:33:08 +0100 Subject: [PATCH] MesoCrystal01 test cleanup --- App/CMakeLists.txt | 17 +- App/inc/StandardSamples.h | 28 +- App/inc/TestIsGISAXS15.h | 49 - App/src/ApplicationTestFactory.cpp | 6 - App/src/SampleFactory.cpp | 28 +- App/src/StandardSamples.cpp | 1080 ++++++++--------- App/src/TestFunctionalTests.cpp | 3 +- App/src/TestIsGISAXS15.cpp | 55 - App/src/TestMesoCrystal1.cpp | 6 +- App/src/TestMiscellaneous.cpp | 2 +- .../FunctionalTestRegistry.cpp | 22 +- Core/StandardSamples/FunctionalTestRegistry.h | 4 +- Core/StandardSamples/IFunctionalTest.cpp | 28 +- Core/StandardSamples/IFunctionalTest.h | 13 +- Core/StandardSamples/MesoCrystal01Builder.cpp | 2 +- Core/StandardSamples/SampleBuilderFactory.cpp | 3 +- Core/StandardSamples/SimulationRegistry.cpp | 4 +- Core/StandardSamples/StandardSimulations.cpp | 8 + .../{IsGISAXS082DDL.cpp => IsGISAXS08a.cpp} | 0 .../{IsGISAXS082DDL2.cpp => IsGISAXS08b.cpp} | 0 .../{IsGISAXS09P.cpp => IsGISAXS09a.cpp} | 0 .../{IsGISAXS09R.cpp => IsGISAXS09b.cpp} | 0 .../TestCore/IsGISAXS15/IsGISAXS15.cpp | 75 +- .../TestCore/IsGISAXS15/IsGISAXS15.h | 31 - .../TestCore/MesoCrystal1/MesoCrystal1.cpp | 80 +- .../TestCore/MesoCrystal1/MesoCrystal1.h | 38 - 26 files changed, 656 insertions(+), 926 deletions(-) delete mode 100644 App/inc/TestIsGISAXS15.h delete mode 100644 App/src/TestIsGISAXS15.cpp rename Tests/FunctionalTests/TestCore/IsGISAXS08a/{IsGISAXS082DDL.cpp => IsGISAXS08a.cpp} (100%) rename Tests/FunctionalTests/TestCore/IsGISAXS08b/{IsGISAXS082DDL2.cpp => IsGISAXS08b.cpp} (100%) rename Tests/FunctionalTests/TestCore/IsGISAXS09a/{IsGISAXS09P.cpp => IsGISAXS09a.cpp} (100%) rename Tests/FunctionalTests/TestCore/IsGISAXS09b/{IsGISAXS09R.cpp => IsGISAXS09b.cpp} (100%) delete mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.h delete mode 100644 Tests/FunctionalTests/TestCore/MesoCrystal1/MesoCrystal1.h diff --git a/App/CMakeLists.txt b/App/CMakeLists.txt index 5114d9ebace..af0093f55ac 100644 --- a/App/CMakeLists.txt +++ b/App/CMakeLists.txt @@ -7,23 +7,16 @@ cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) set(executable_name App) # source files -file(GLOB source_files - "src/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/../Tests/FunctionalTests/TestCore/IsGISAXS15/*.cpp" -) +file(GLOB source_files "src/*.cpp") # to get rid from files generated via qmake compilation -list(REMOVE_ITEM source_files ${CMAKE_CURRENT_SOURCE_DIR}/src/AppDict.cpp) +#list(REMOVE_ITEM source_files ${CMAKE_CURRENT_SOURCE_DIR}/src/AppDict.cpp) # include files -file(GLOB include_files - "inc/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/../Tests/FunctionalTests/TestCore/IsGISAXS15/*.h" -) +file(GLOB include_files "inc/*.h") include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/inc - ${CMAKE_CURRENT_SOURCE_DIR}/../Tests/FunctionalTests/TestCore/IsGISAXS15 ) if(MSVC) @@ -32,7 +25,7 @@ if(MSVC) endif() # data files are required by App for comparison -execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Tests/ReferenceData/IsGISAXS ${CMAKE_BINARY_DIR}/Tests/ReferenceData/IsGISAXS) +#execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Tests/ReferenceData/IsGISAXS ${CMAKE_BINARY_DIR}/Tests/ReferenceData/IsGISAXS) # dictionaries ROOT_GENERATE_DICTIONARY(AppDict inc/DrawHelper.h inc/TreeEventStructure.h LINKDEF AppLinkDef.h) @@ -56,7 +49,7 @@ target_link_libraries(${executable_name} # --- Installation --- install (TARGETS ${executable_name} DESTINATION ${destination_bin} COMPONENT Applications) -install (DIRECTORY ${CMAKE_SOURCE_DIR}/Tests/ReferenceData/IsGISAXS DESTINATION Tests/ReferenceData COMPONENT Applications) +#install (DIRECTORY ${CMAKE_SOURCE_DIR}/Tests/ReferenceData/IsGISAXS DESTINATION Tests/ReferenceData COMPONENT Applications) # system libraries: ROOT installation if(WIN32) diff --git a/App/inc/StandardSamples.h b/App/inc/StandardSamples.h index fc1d311e603..ff1d93dbc4a 100644 --- a/App/inc/StandardSamples.h +++ b/App/inc/StandardSamples.h @@ -32,20 +32,20 @@ ISample *MultilayerOffspecTestcase2a(); ISample *MultilayerOffspecTestcase2b(); ISample *MultilayerSpecularMagneticTestCase(); ISample *PolarizedDWBATestCase(); -ISample *IsGISAXS15_SSCA(); -ISample *MesoCrystal1(); -ISample *MesoCrystal2(); -ISample *FormFactor_Box(); -ISample *FormFactor_Cone(); -ISample *FormFactor_Sphere(); -ISample *FormFactor_Ellipsoid(); -ISample *FormFactor_FullSpheroid(); -ISample *FormFactor_HemiSpheroid(); -ISample *FormFactor_Parallelpiped(); -ISample *FormFactor_Cylinder(); -ISample *FormFactor_Pyramid(); -ISample *FormFactor_FullSphere(); -ISample *FormFactor_Prism3(); +//ISample *IsGISAXS15_SSCA(); +//ISample *MesoCrystal1(); +//ISample *MesoCrystal2(); +//ISample *FormFactor_Box(); +//ISample *FormFactor_Cone(); +//ISample *FormFactor_Sphere(); +//ISample *FormFactor_Ellipsoid(); +//ISample *FormFactor_FullSpheroid(); +//ISample *FormFactor_HemiSpheroid(); +//ISample *FormFactor_Parallelpiped(); +//ISample *FormFactor_Cylinder(); +//ISample *FormFactor_Pyramid(); +//ISample *FormFactor_FullSphere(); +//ISample *FormFactor_Prism3(); } #endif // STANDARDSAMPLES_H diff --git a/App/inc/TestIsGISAXS15.h b/App/inc/TestIsGISAXS15.h deleted file mode 100644 index 2a810ce78f9..00000000000 --- a/App/inc/TestIsGISAXS15.h +++ /dev/null @@ -1,49 +0,0 @@ -// ************************************************************************** // -// -// BornAgain: simulate and fit scattering at grazing incidence -// -//! @file App/inc/TestIsGISAXS15.h -//! @brief Defines class TestIsGISAXS15. -// -//! Homepage: apps.jcns.fz-juelich.de/BornAgain -//! License: GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2013 -//! @authors Scientific Computing Group at MLZ Garching -//! @authors C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke -// -// ************************************************************************** // - -#ifndef TESTISGISAXS15_H_ -#define TESTISGISAXS15_H_ - -#include "IApplicationTest.h" - -//! IsGISAXS ex#15: Size-Spacing Correlation Approximation. - -class TestIsGISAXS15 : public IApplicationTest -{ -public: - TestIsGISAXS15(); - virtual ~TestIsGISAXS15(){} - - virtual void execute(); - virtual void finalise(); -private: - // structure to hold info over several compare cases - struct CompareStruct - { - CompareStruct(std::string _isginame, - std::string _thisname, - std::string _descr) - : isginame(_isginame), thisname(_thisname), descr(_descr){} - std::string isginame; - std::string thisname; - std::string descr; - }; - - std::string m_data_path; -}; - -#endif /* TESTISGISAXS15_H_ */ - - diff --git a/App/src/ApplicationTestFactory.cpp b/App/src/ApplicationTestFactory.cpp index 62ab481f717..c546239146d 100644 --- a/App/src/ApplicationTestFactory.cpp +++ b/App/src/ApplicationTestFactory.cpp @@ -27,7 +27,6 @@ #include "TestFumiliLMA.h" #include "TestIsGISAXS12.h" #include "TestIsGISAXS13.h" -#include "TestIsGISAXS15.h" #include "TestIsGISAXS5.h" #include "TestMesoCrystal1.h" #include "TestMesoCrystal2.h" @@ -167,11 +166,6 @@ void RegisterApplicationTests(ApplicationTestFactory *p_test_factory) "isgisaxs13", IFactoryCreateFunction<TestIsGISAXS13, IApplicationTest>, "functional test: isgisaxs ex-13 (simulated annealing fit)"); - p_test_factory->registerItem( - "isgisaxs15", - IFactoryCreateFunction<TestIsGISAXS15, IApplicationTest>, - "functional test: isgisaxs ex-15 (size-spacing correlation " - "approximation)"); p_test_factory->registerItem( "convolution", IFactoryCreateFunction<TestConvolution, IApplicationTest>, diff --git a/App/src/SampleFactory.cpp b/App/src/SampleFactory.cpp index d8677bf404b..cb87348f79c 100644 --- a/App/src/SampleFactory.cpp +++ b/App/src/SampleFactory.cpp @@ -51,23 +51,23 @@ SampleFactory::SampleFactory() StandardSamples::MultilayerSpecularMagneticTestCase); // IsGISAXS15 example: Size-Spacing Correlation Approximation - registerItem("IsGISAXS15_SSCA", StandardSamples::IsGISAXS15_SSCA); +// registerItem("IsGISAXS15_SSCA", StandardSamples::IsGISAXS15_SSCA); // mesocrystal's - registerItem("MesoCrystal1", StandardSamples::MesoCrystal1); - registerItem("MesoCrystal2", StandardSamples::MesoCrystal2); +// registerItem("MesoCrystal1", StandardSamples::MesoCrystal1); +// registerItem("MesoCrystal2", StandardSamples::MesoCrystal2); - registerItem("FormFactor_Box", StandardSamples::FormFactor_Box); - registerItem("FormFactor_Cone", StandardSamples::FormFactor_Cone); - registerItem("FormFactor_Sphere", StandardSamples::FormFactor_Sphere); - registerItem("FormFactor_Ellipsoid", StandardSamples::FormFactor_Ellipsoid); - registerItem("FormFactor_FullSpheroid", StandardSamples::FormFactor_FullSpheroid); - registerItem("FormFactor_HemiSpheroid", StandardSamples::FormFactor_HemiSpheroid); - registerItem("FormFactor_Parallelepiped", StandardSamples::FormFactor_Parallelpiped); - registerItem("FormFactor_Cylinder", StandardSamples::FormFactor_Cylinder); - registerItem("FormFactor_Pyramid", StandardSamples::FormFactor_Pyramid); - registerItem("FormFactor_FullSphere", StandardSamples::FormFactor_FullSphere); - registerItem("FormFactor_Prism3", StandardSamples::FormFactor_Prism3); +// registerItem("FormFactor_Box", StandardSamples::FormFactor_Box); +// registerItem("FormFactor_Cone", StandardSamples::FormFactor_Cone); +// registerItem("FormFactor_Sphere", StandardSamples::FormFactor_Sphere); +// registerItem("FormFactor_Ellipsoid", StandardSamples::FormFactor_Ellipsoid); +// registerItem("FormFactor_FullSpheroid", StandardSamples::FormFactor_FullSpheroid); +// registerItem("FormFactor_HemiSpheroid", StandardSamples::FormFactor_HemiSpheroid); +// registerItem("FormFactor_Parallelepiped", StandardSamples::FormFactor_Parallelpiped); +// registerItem("FormFactor_Cylinder", StandardSamples::FormFactor_Cylinder); +// registerItem("FormFactor_Pyramid", StandardSamples::FormFactor_Pyramid); +// registerItem("FormFactor_FullSphere", StandardSamples::FormFactor_FullSphere); +// registerItem("FormFactor_Prism3", StandardSamples::FormFactor_Prism3); } diff --git a/App/src/StandardSamples.cpp b/App/src/StandardSamples.cpp index a49b1154989..bd5dfb1b7c0 100644 --- a/App/src/StandardSamples.cpp +++ b/App/src/StandardSamples.cpp @@ -257,549 +257,549 @@ ISample *StandardSamples::MultilayerOffspecTestcase2b() //! IsGISAXS ex#15: Size-spacing correlation approximation. -ISample *StandardSamples::IsGISAXS15_SSCA() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_particle(1.0-6e-4, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", n_air); - const IMaterial *particle_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle); - Layer air_layer; - air_layer.setMaterial(p_air_material); - InterferenceFunction1DParaCrystal *p_interference_function = - new InterferenceFunction1DParaCrystal - (15.0*Units::nanometer,5*Units::nanometer, 1e3*Units::nanometer); - p_interference_function->setKappa(4.02698); - ParticleDecoration particle_decoration; - Particle particle_prototype(particle_material, new FormFactorCylinder - (5.0*Units::nanometer, 5.0*Units::nanometer)); - StochasticDoubleGaussian sg(5.0*Units::nanometer, 1.25*Units::nanometer); - StochasticSampledParameter stochastic_radius(sg,30, 2); - ParticleBuilder particle_builder; - particle_builder.setPrototype - (particle_prototype, "/Particle/FormFactorCylinder/radius", - stochastic_radius); - particle_builder.plantParticles(particle_decoration); - - // Set height of each particle to its radius (H/R fixed) - ParameterPool *p_parameters = particle_decoration.createParameterTree(); - int nbr_replacements = - p_parameters->fixRatioBetweenParameters("height", "radius", 1.0); - std::cout << "Number of replacements: " << nbr_replacements << std::endl; - - particle_decoration.addInterferenceFunction(p_interference_function); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - return p_multi_layer; -} - -//! First mesocrystal test. - -ISample *StandardSamples::MesoCrystal1() -{ - // create mesocrystal - double nanoparticle_radius = 6.1*Units::nanometer; - Lattice lat = Lattice::createTrigonalLattice( - nanoparticle_radius*2.0, nanoparticle_radius*2.0*2.3); - kvector_t bas_a = lat.getBasisVectorA(); - kvector_t bas_b = lat.getBasisVectorB(); - kvector_t bas_c = lat.getBasisVectorC(); - complex_t n_particle(1.0-1.5e-5, 1.3e-6); - const IMaterial *particle_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle); - - Particle particle(particle_material, - new FormFactorFullSphere(nanoparticle_radius)); - kvector_t position_0 = kvector_t(0.0, 0.0, 0.0); - kvector_t position_1 = 1.0/3.0*(2.0*bas_a + bas_b + bas_c); - kvector_t position_2 = 1.0/3.0*(bas_a + 2.0*bas_b + 2.0*bas_c); - std::vector<kvector_t> pos_vector; - pos_vector.push_back(position_0); - pos_vector.push_back(position_1); - pos_vector.push_back(position_2); - LatticeBasis basis(particle, pos_vector); - Crystal npc(basis, lat); - - MesoCrystal meso(npc.clone(), new FormFactorCylinder - (0.2*Units::micrometer, 300*Units::nanometer)); - MesoCrystal meso2(npc.clone(), new FormFactorPyramid - (0.2*Units::micrometer, - 300*Units::nanometer, - 84*Units::degree)); - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-3.5e-6, 7.8e-8); - - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air2", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate2", n_substrate); - Layer air_layer; - air_layer.setMaterial(p_air_material); - Layer substrate_layer; - substrate_layer.setMaterial(p_substrate_material); - IInterferenceFunction *p_interference_function = - new InterferenceFunction1DParaCrystal - (800.0*Units::nanometer, 50*Units::nanometer, 1e7*Units::nanometer); - ParticleDecoration particle_decoration; - particle_decoration.addParticle(meso.clone(), 0.0, 0.5); - particle_decoration.addParticle(meso2.clone(), 0.0, 0.5); - particle_decoration.addInterferenceFunction(p_interference_function); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; - -} - -//! Second mesocrystal test: Mesocrystal from TestMesocrystal to play with. - -ISample *StandardSamples::MesoCrystal2() -{ - double meso_radius = 300*Units::nanometer; - double surface_filling_ratio = 0.25; - double surface_density = surface_filling_ratio/M_PI/meso_radius/meso_radius; - complex_t n_particle(1.0-1.55e-5, 1.37e-6); - complex_t avg_n_squared_meso = 0.7886*n_particle*n_particle + 0.2114; - complex_t n_avg = std::sqrt(surface_filling_ratio*avg_n_squared_meso + - 1.0 - surface_filling_ratio); - complex_t n_particle_adapted = - std::sqrt(n_avg*n_avg + n_particle*n_particle - 1.0); - - const IMaterial *particle_adapted_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle_adapted); - - - FormFactorCylinder ff_meso(0.2*Units::micrometer, meso_radius); - - // Create multilayer - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-7.57e-6, 1.73e-7); - - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", n_air); - const IMaterial *p_average_layer_material = - MaterialManager::getHomogeneousMaterial("Averagelayer", n_avg); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); - Layer air_layer; - air_layer.setMaterial(p_air_material); - Layer avg_layer; - avg_layer.setMaterial(p_average_layer_material); - avg_layer.setThickness(0.2*Units::micrometer); - Layer substrate_layer; - substrate_layer.setMaterial(p_substrate_material); - IInterferenceFunction *p_interference_function = - new InterferenceFunctionNone(); - ParticleDecoration particle_decoration; - double nanoparticle_radius = 5.4*Units::nanometer; - const IFormFactor* p_meso_form_factor =& ff_meso; - Lattice lat = Lattice::createTrigonalLattice - (nanoparticle_radius*2.0, nanoparticle_radius*2.0*2.3); - kvector_t bas_a = lat.getBasisVectorA(); - kvector_t bas_b = lat.getBasisVectorB(); - kvector_t bas_c = lat.getBasisVectorC(); - Particle particle(particle_adapted_material, - new FormFactorFullSphere(nanoparticle_radius)); - kvector_t position_0 = kvector_t(0.0, 0.0, 0.0); - kvector_t position_1 = 1.0/3.0*(2.0*bas_a + bas_b + bas_c); - kvector_t position_2 = 1.0/3.0*(bas_a + 2.0*bas_b + 2.0*bas_c); - std::vector<kvector_t> pos_vector; - pos_vector.push_back(position_0); - pos_vector.push_back(position_1); - pos_vector.push_back(position_2); - LatticeBasis basis(particle, pos_vector); - Crystal npc(basis, lat); - MesoCrystal *meso_crystal = - new MesoCrystal(npc.clone(), p_meso_form_factor->clone()); - particle_decoration.addParticle(meso_crystal, 0.2*Units::micrometer); - particle_decoration.setTotalParticleSurfaceDensity(surface_density); - particle_decoration.addInterferenceFunction(p_interference_function); - - avg_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(avg_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; - -} +//ISample *StandardSamples::IsGISAXS15_SSCA() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_particle(1.0-6e-4, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air", n_air); +// const IMaterial *particle_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle); +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// InterferenceFunction1DParaCrystal *p_interference_function = +// new InterferenceFunction1DParaCrystal +// (15.0*Units::nanometer,5*Units::nanometer, 1e3*Units::nanometer); +// p_interference_function->setKappa(4.02698); +// ParticleDecoration particle_decoration; +// Particle particle_prototype(particle_material, new FormFactorCylinder +// (5.0*Units::nanometer, 5.0*Units::nanometer)); +// StochasticDoubleGaussian sg(5.0*Units::nanometer, 1.25*Units::nanometer); +// StochasticSampledParameter stochastic_radius(sg,30, 2); +// ParticleBuilder particle_builder; +// particle_builder.setPrototype +// (particle_prototype, "/Particle/FormFactorCylinder/radius", +// stochastic_radius); +// particle_builder.plantParticles(particle_decoration); + +// // Set height of each particle to its radius (H/R fixed) +// ParameterPool *p_parameters = particle_decoration.createParameterTree(); +// int nbr_replacements = +// p_parameters->fixRatioBetweenParameters("height", "radius", 1.0); +// std::cout << "Number of replacements: " << nbr_replacements << std::endl; + +// particle_decoration.addInterferenceFunction(p_interference_function); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// return p_multi_layer; +//} + +////! First mesocrystal test. + +//ISample *StandardSamples::MesoCrystal1() +//{ +// // create mesocrystal +// double nanoparticle_radius = 6.1*Units::nanometer; +// Lattice lat = Lattice::createTrigonalLattice( +// nanoparticle_radius*2.0, nanoparticle_radius*2.0*2.3); +// kvector_t bas_a = lat.getBasisVectorA(); +// kvector_t bas_b = lat.getBasisVectorB(); +// kvector_t bas_c = lat.getBasisVectorC(); +// complex_t n_particle(1.0-1.5e-5, 1.3e-6); +// const IMaterial *particle_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle); + +// Particle particle(particle_material, +// new FormFactorFullSphere(nanoparticle_radius)); +// kvector_t position_0 = kvector_t(0.0, 0.0, 0.0); +// kvector_t position_1 = 1.0/3.0*(2.0*bas_a + bas_b + bas_c); +// kvector_t position_2 = 1.0/3.0*(bas_a + 2.0*bas_b + 2.0*bas_c); +// std::vector<kvector_t> pos_vector; +// pos_vector.push_back(position_0); +// pos_vector.push_back(position_1); +// pos_vector.push_back(position_2); +// LatticeBasis basis(particle, pos_vector); +// Crystal npc(basis, lat); + +// MesoCrystal meso(npc.clone(), new FormFactorCylinder +// (0.2*Units::micrometer, 300*Units::nanometer)); +// MesoCrystal meso2(npc.clone(), new FormFactorPyramid +// (0.2*Units::micrometer, +// 300*Units::nanometer, +// 84*Units::degree)); +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_substrate(1.0-3.5e-6, 7.8e-8); + +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air2", n_air); +// const IMaterial *p_substrate_material = +// MaterialManager::getHomogeneousMaterial("Substrate2", n_substrate); +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// IInterferenceFunction *p_interference_function = +// new InterferenceFunction1DParaCrystal +// (800.0*Units::nanometer, 50*Units::nanometer, 1e7*Units::nanometer); +// ParticleDecoration particle_decoration; +// particle_decoration.addParticle(meso.clone(), 0.0, 0.5); +// particle_decoration.addParticle(meso2.clone(), 0.0, 0.5); +// particle_decoration.addInterferenceFunction(p_interference_function); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; + +//} + +////! Second mesocrystal test: Mesocrystal from TestMesocrystal to play with. + +//ISample *StandardSamples::MesoCrystal2() +//{ +// double meso_radius = 300*Units::nanometer; +// double surface_filling_ratio = 0.25; +// double surface_density = surface_filling_ratio/M_PI/meso_radius/meso_radius; +// complex_t n_particle(1.0-1.55e-5, 1.37e-6); +// complex_t avg_n_squared_meso = 0.7886*n_particle*n_particle + 0.2114; +// complex_t n_avg = std::sqrt(surface_filling_ratio*avg_n_squared_meso + +// 1.0 - surface_filling_ratio); +// complex_t n_particle_adapted = +// std::sqrt(n_avg*n_avg + n_particle*n_particle - 1.0); + +// const IMaterial *particle_adapted_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle_adapted); + + +// FormFactorCylinder ff_meso(0.2*Units::micrometer, meso_radius); + +// // Create multilayer +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_substrate(1.0-7.57e-6, 1.73e-7); + +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air", n_air); +// const IMaterial *p_average_layer_material = +// MaterialManager::getHomogeneousMaterial("Averagelayer", n_avg); +// const IMaterial *p_substrate_material = +// MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Layer avg_layer; +// avg_layer.setMaterial(p_average_layer_material); +// avg_layer.setThickness(0.2*Units::micrometer); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// IInterferenceFunction *p_interference_function = +// new InterferenceFunctionNone(); +// ParticleDecoration particle_decoration; +// double nanoparticle_radius = 5.4*Units::nanometer; +// const IFormFactor* p_meso_form_factor =& ff_meso; +// Lattice lat = Lattice::createTrigonalLattice +// (nanoparticle_radius*2.0, nanoparticle_radius*2.0*2.3); +// kvector_t bas_a = lat.getBasisVectorA(); +// kvector_t bas_b = lat.getBasisVectorB(); +// kvector_t bas_c = lat.getBasisVectorC(); +// Particle particle(particle_adapted_material, +// new FormFactorFullSphere(nanoparticle_radius)); +// kvector_t position_0 = kvector_t(0.0, 0.0, 0.0); +// kvector_t position_1 = 1.0/3.0*(2.0*bas_a + bas_b + bas_c); +// kvector_t position_2 = 1.0/3.0*(bas_a + 2.0*bas_b + 2.0*bas_c); +// std::vector<kvector_t> pos_vector; +// pos_vector.push_back(position_0); +// pos_vector.push_back(position_1); +// pos_vector.push_back(position_2); +// LatticeBasis basis(particle, pos_vector); +// Crystal npc(basis, lat); +// MesoCrystal *meso_crystal = +// new MesoCrystal(npc.clone(), p_meso_form_factor->clone()); +// particle_decoration.addParticle(meso_crystal, 0.2*Units::micrometer); +// particle_decoration.setTotalParticleSurfaceDensity(surface_density); +// particle_decoration.addInterferenceFunction(p_interference_function); + +// avg_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(avg_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; + +//} //! Functional test: Formfactor of a box. -ISample *StandardSamples::FormFactor_Box() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-6e-6, 2e-8); - complex_t n_particle(1.0-6e-4, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); - const IMaterial *particle_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle); - - Layer air_layer; - air_layer.setMaterial(p_air_material); - Layer substrate_layer; - substrate_layer.setMaterial(p_substrate_material); - ParticleDecoration particle_decoration - (new Particle(particle_material, - new FormFactorBox(5*Units::nanometer, - 5*Units::nanometer, - 5*Units::nanometer))); - particle_decoration.addInterferenceFunction - (new InterferenceFunctionNone()); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; -} - -//! Functional test: Formfactor of a cone. - -ISample *StandardSamples::FormFactor_Cone() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-6e-6, 2e-8); - complex_t n_particle(1.0-6e-4, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); - const IMaterial *particle_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle); - Layer air_layer; - air_layer.setMaterial(p_air_material); - Layer substrate_layer; - substrate_layer.setMaterial(p_substrate_material); - ParticleDecoration particle_decoration - (new Particle(particle_material, - new FormFactorCone(5*Units::nanometer, - 5*Units::nanometer, - Units::deg2rad(54.73 )))); - particle_decoration.addInterferenceFunction - (new InterferenceFunctionNone()); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; -} - -//! Functional test: Formfactor of a sphere. - -ISample *StandardSamples::FormFactor_Sphere() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-6e-6, 2e-8); - complex_t n_particle(1.0-6e-4, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); - const IMaterial *particle_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle); - - Layer air_layer; - air_layer.setMaterial(p_air_material); - Layer substrate_layer; - substrate_layer.setMaterial(p_substrate_material); - ParticleDecoration particle_decoration - (new Particle(particle_material, - new FormFactorSphere(5*Units::nanometer, - 5*Units::nanometer))); - particle_decoration.addInterferenceFunction -(new InterferenceFunctionNone()); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; -} - -// Functional test: Formfactor of an ellipsoid. - -ISample *StandardSamples::FormFactor_Ellipsoid() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-6e-6, 2e-8); - complex_t n_particle(1.0-6e-4, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); - const IMaterial *particle_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle); - Layer air_layer; - air_layer.setMaterial(p_air_material); - Layer substrate_layer; - substrate_layer.setMaterial(p_substrate_material); - ParticleDecoration particle_decoration - (new Particle(particle_material, - new FormFactorEllipsoid(5*Units::nanometer, - 5*Units::nanometer, - 5*Units::nanometer, - Units::deg2rad(54.73 )))); - particle_decoration.addInterferenceFunction - (new InterferenceFunctionNone()); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; -} - -//! Functional test: Formfactor of a full spheroid. - -ISample *StandardSamples::FormFactor_FullSpheroid() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-6e-5, 2e-8); - complex_t n_particle(1.0-6e-4, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); - const IMaterial *particle_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle); - Layer air_layer; - air_layer.setMaterial(p_air_material); - Layer substrate_layer; - substrate_layer.setMaterial(p_substrate_material); - ParticleDecoration particle_decoration - (new Particle(particle_material, - new FormFactorFullSpheroid(5*Units::nanometer, - 7*Units::nanometer ))); - particle_decoration.addInterferenceFunction - (new InterferenceFunctionNone()); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; -} - -//! Functional test: Formfactor of a hemi spheroid. - -ISample *StandardSamples::FormFactor_HemiSpheroid() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-6e-7, 2e-8); - complex_t n_particle(1.0-6e-5, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); - const IMaterial *particle_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle); - - Layer air_layer; - air_layer.setMaterial(p_air_material); - Layer substrate_layer; - substrate_layer.setMaterial(p_substrate_material); - ParticleDecoration particle_decoration - (new Particle(particle_material, - new FormFactorHemiSpheroid(5*Units::nanometer, - 4*Units::nanometer, - 2*Units::nanometer))); - particle_decoration.addInterferenceFunction - (new InterferenceFunctionNone()); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; -} - -//! Functional test: Formfactor of a parallelepiped. - -ISample *StandardSamples::FormFactor_Parallelpiped() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_particle_shell(1.0-1e-4, 2e-8); - complex_t n_particle_core(1.0-6e-5, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air11", n_air); - - const IMaterial *shell_material = - MaterialManager::getHomogeneousMaterial("Shell", n_particle_shell); - const IMaterial *core_material = - MaterialManager::getHomogeneousMaterial("Core", n_particle_core); - - Layer air_layer; - air_layer.setMaterial(p_air_material); - Particle shell_particle(shell_material, - new FormFactorParallelepiped(8*Units::nanometer, - 8*Units::nanometer)); - Particle core_particle(core_material, - new FormFactorParallelepiped(7*Units::nanometer, - 6*Units::nanometer)); - kvector_t core_position(0.0, 0.0, 0.0); - ParticleCoreShell particle(shell_particle, core_particle, core_position); - ParticleDecoration particle_decoration(particle.clone()); - particle_decoration.addInterferenceFunction - (new InterferenceFunctionNone()); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - return p_multi_layer; -} - -//! Functional test: Formfactor of a cylinder. - -ISample *StandardSamples::FormFactor_Cylinder() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_particle_shell(1.0-1e-4, 2e-8); - complex_t n_particle_core(1.0-6e-5, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air11", n_air); - const IMaterial *shell_material = - MaterialManager::getHomogeneousMaterial("Shell", n_particle_shell); - const IMaterial *core_material = - MaterialManager::getHomogeneousMaterial("Core", n_particle_core); - - Layer air_layer; - air_layer.setMaterial(p_air_material); - Particle shell_particle(shell_material, - new FormFactorCylinder(8*Units::nanometer, - 8*Units::nanometer)); - Particle core_particle(core_material, - new FormFactorCylinder(7*Units::nanometer, - 6*Units::nanometer)); - kvector_t core_position(0.0, 0.0, 0.0); - ParticleCoreShell particle(shell_particle, core_particle, core_position); - ParticleDecoration particle_decoration(particle.clone()); - particle_decoration.addInterferenceFunction - (new InterferenceFunctionNone()); - - air_layer.setDecoration(particle_decoration); - - - p_multi_layer->addLayer(air_layer); - return p_multi_layer; -} - -//! Functional test: Formfactor of a pyramid. - -ISample *StandardSamples::FormFactor_Pyramid() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-6e-6, 2e-8); - complex_t n_particle(1.0-6e-4, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); - const IMaterial *particle_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle); - - Layer air_layer; - air_layer.setMaterial(p_air_material); - Layer substrate_layer; - substrate_layer.setMaterial(p_substrate_material); - ParticleDecoration particle_decoration - (new Particle(particle_material, - new FormFactorPyramid(5*Units::nanometer, - 5*Units::nanometer, - Units::deg2rad(54.73 ) ) ) ); - particle_decoration.addInterferenceFunction - (new InterferenceFunctionNone()); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; -} - -//! Functional test: Formfactor of Prism3. - -ISample *StandardSamples::FormFactor_Prism3() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-7e-6, 2e-8); - complex_t n_particle(1.0-8e-4, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); - const IMaterial *particle_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle); - Layer air_layer; - air_layer.setMaterial(p_air_material); - Layer substrate_layer; - substrate_layer.setMaterial(p_substrate_material); - ParticleDecoration particle_decoration - (new Particle(particle_material, - new FormFactorPrism3(5*Units::nanometer, - 5*Units::nanometer))); - particle_decoration.addInterferenceFunction - (new InterferenceFunctionNone()); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; -} - -//! Functional test: Formfactor of a full sphere. - -ISample *StandardSamples::FormFactor_FullSphere() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-6e-6, 2e-8); - complex_t n_particle(1.0-6e-4, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); - const IMaterial *particle_material = - MaterialManager::getHomogeneousMaterial("Particle", n_particle); - Layer air_layer; - air_layer.setMaterial(p_air_material); - Layer substrate_layer; - substrate_layer.setMaterial(p_substrate_material); - ParticleDecoration particle_decoration - (new Particle(particle_material, - new FormFactorFullSphere(5*Units::nanometer ) ) ); - particle_decoration.addInterferenceFunction - (new InterferenceFunctionNone()); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; -} +//ISample *StandardSamples::FormFactor_Box() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_substrate(1.0-6e-6, 2e-8); +// complex_t n_particle(1.0-6e-4, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air", n_air); +// const IMaterial *p_substrate_material = +// MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); +// const IMaterial *particle_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle); + +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// ParticleDecoration particle_decoration +// (new Particle(particle_material, +// new FormFactorBox(5*Units::nanometer, +// 5*Units::nanometer, +// 5*Units::nanometer))); +// particle_decoration.addInterferenceFunction +// (new InterferenceFunctionNone()); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; +//} + +////! Functional test: Formfactor of a cone. + +//ISample *StandardSamples::FormFactor_Cone() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_substrate(1.0-6e-6, 2e-8); +// complex_t n_particle(1.0-6e-4, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air", n_air); +// const IMaterial *p_substrate_material = +// MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); +// const IMaterial *particle_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle); +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// ParticleDecoration particle_decoration +// (new Particle(particle_material, +// new FormFactorCone(5*Units::nanometer, +// 5*Units::nanometer, +// Units::deg2rad(54.73 )))); +// particle_decoration.addInterferenceFunction +// (new InterferenceFunctionNone()); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; +//} + +////! Functional test: Formfactor of a sphere. + +//ISample *StandardSamples::FormFactor_Sphere() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_substrate(1.0-6e-6, 2e-8); +// complex_t n_particle(1.0-6e-4, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air", n_air); +// const IMaterial *p_substrate_material = +// MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); +// const IMaterial *particle_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle); + +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// ParticleDecoration particle_decoration +// (new Particle(particle_material, +// new FormFactorSphere(5*Units::nanometer, +// 5*Units::nanometer))); +// particle_decoration.addInterferenceFunction +//(new InterferenceFunctionNone()); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; +//} + +//// Functional test: Formfactor of an ellipsoid. + +//ISample *StandardSamples::FormFactor_Ellipsoid() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_substrate(1.0-6e-6, 2e-8); +// complex_t n_particle(1.0-6e-4, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air", n_air); +// const IMaterial *p_substrate_material = +// MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); +// const IMaterial *particle_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle); +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// ParticleDecoration particle_decoration +// (new Particle(particle_material, +// new FormFactorEllipsoid(5*Units::nanometer, +// 5*Units::nanometer, +// 5*Units::nanometer, +// Units::deg2rad(54.73 )))); +// particle_decoration.addInterferenceFunction +// (new InterferenceFunctionNone()); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; +//} + +////! Functional test: Formfactor of a full spheroid. + +//ISample *StandardSamples::FormFactor_FullSpheroid() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_substrate(1.0-6e-5, 2e-8); +// complex_t n_particle(1.0-6e-4, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air", n_air); +// const IMaterial *p_substrate_material = +// MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); +// const IMaterial *particle_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle); +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// ParticleDecoration particle_decoration +// (new Particle(particle_material, +// new FormFactorFullSpheroid(5*Units::nanometer, +// 7*Units::nanometer ))); +// particle_decoration.addInterferenceFunction +// (new InterferenceFunctionNone()); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; +//} + +////! Functional test: Formfactor of a hemi spheroid. + +//ISample *StandardSamples::FormFactor_HemiSpheroid() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_substrate(1.0-6e-7, 2e-8); +// complex_t n_particle(1.0-6e-5, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air", n_air); +// const IMaterial *p_substrate_material = +// MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); +// const IMaterial *particle_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle); + +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// ParticleDecoration particle_decoration +// (new Particle(particle_material, +// new FormFactorHemiSpheroid(5*Units::nanometer, +// 4*Units::nanometer, +// 2*Units::nanometer))); +// particle_decoration.addInterferenceFunction +// (new InterferenceFunctionNone()); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; +//} + +////! Functional test: Formfactor of a parallelepiped. + +//ISample *StandardSamples::FormFactor_Parallelpiped() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_particle_shell(1.0-1e-4, 2e-8); +// complex_t n_particle_core(1.0-6e-5, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air11", n_air); + +// const IMaterial *shell_material = +// MaterialManager::getHomogeneousMaterial("Shell", n_particle_shell); +// const IMaterial *core_material = +// MaterialManager::getHomogeneousMaterial("Core", n_particle_core); + +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Particle shell_particle(shell_material, +// new FormFactorParallelepiped(8*Units::nanometer, +// 8*Units::nanometer)); +// Particle core_particle(core_material, +// new FormFactorParallelepiped(7*Units::nanometer, +// 6*Units::nanometer)); +// kvector_t core_position(0.0, 0.0, 0.0); +// ParticleCoreShell particle(shell_particle, core_particle, core_position); +// ParticleDecoration particle_decoration(particle.clone()); +// particle_decoration.addInterferenceFunction +// (new InterferenceFunctionNone()); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// return p_multi_layer; +//} + +////! Functional test: Formfactor of a cylinder. + +//ISample *StandardSamples::FormFactor_Cylinder() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_particle_shell(1.0-1e-4, 2e-8); +// complex_t n_particle_core(1.0-6e-5, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air11", n_air); +// const IMaterial *shell_material = +// MaterialManager::getHomogeneousMaterial("Shell", n_particle_shell); +// const IMaterial *core_material = +// MaterialManager::getHomogeneousMaterial("Core", n_particle_core); + +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Particle shell_particle(shell_material, +// new FormFactorCylinder(8*Units::nanometer, +// 8*Units::nanometer)); +// Particle core_particle(core_material, +// new FormFactorCylinder(7*Units::nanometer, +// 6*Units::nanometer)); +// kvector_t core_position(0.0, 0.0, 0.0); +// ParticleCoreShell particle(shell_particle, core_particle, core_position); +// ParticleDecoration particle_decoration(particle.clone()); +// particle_decoration.addInterferenceFunction +// (new InterferenceFunctionNone()); + +// air_layer.setDecoration(particle_decoration); + + +// p_multi_layer->addLayer(air_layer); +// return p_multi_layer; +//} + +////! Functional test: Formfactor of a pyramid. + +//ISample *StandardSamples::FormFactor_Pyramid() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_substrate(1.0-6e-6, 2e-8); +// complex_t n_particle(1.0-6e-4, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air", n_air); +// const IMaterial *p_substrate_material = +// MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); +// const IMaterial *particle_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle); + +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// ParticleDecoration particle_decoration +// (new Particle(particle_material, +// new FormFactorPyramid(5*Units::nanometer, +// 5*Units::nanometer, +// Units::deg2rad(54.73 ) ) ) ); +// particle_decoration.addInterferenceFunction +// (new InterferenceFunctionNone()); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; +//} + +////! Functional test: Formfactor of Prism3. + +//ISample *StandardSamples::FormFactor_Prism3() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_substrate(1.0-7e-6, 2e-8); +// complex_t n_particle(1.0-8e-4, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air", n_air); +// const IMaterial *p_substrate_material = +// MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); +// const IMaterial *particle_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle); +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// ParticleDecoration particle_decoration +// (new Particle(particle_material, +// new FormFactorPrism3(5*Units::nanometer, +// 5*Units::nanometer))); +// particle_decoration.addInterferenceFunction +// (new InterferenceFunctionNone()); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; +//} + +////! Functional test: Formfactor of a full sphere. + +//ISample *StandardSamples::FormFactor_FullSphere() +//{ +// MultiLayer *p_multi_layer = new MultiLayer(); +// complex_t n_air(1.0, 0.0); +// complex_t n_substrate(1.0-6e-6, 2e-8); +// complex_t n_particle(1.0-6e-4, 2e-8); +// const IMaterial *p_air_material = +// MaterialManager::getHomogeneousMaterial("Air", n_air); +// const IMaterial *p_substrate_material = +// MaterialManager::getHomogeneousMaterial("Substrate", n_substrate); +// const IMaterial *particle_material = +// MaterialManager::getHomogeneousMaterial("Particle", n_particle); +// Layer air_layer; +// air_layer.setMaterial(p_air_material); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// ParticleDecoration particle_decoration +// (new Particle(particle_material, +// new FormFactorFullSphere(5*Units::nanometer ) ) ); +// particle_decoration.addInterferenceFunction +// (new InterferenceFunctionNone()); + +// air_layer.setDecoration(particle_decoration); + +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; +//} //! Multilayer specular magnetic testcase diff --git a/App/src/TestFunctionalTests.cpp b/App/src/TestFunctionalTests.cpp index fe14446dbaa..1654bedaa37 100644 --- a/App/src/TestFunctionalTests.cpp +++ b/App/src/TestFunctionalTests.cpp @@ -11,7 +11,8 @@ void TestFunctionalTests::execute() if(!readTestNames()) return; for(size_t i=0; i<m_testNames.size(); ++i) { - FunctionalTest_t test = m_testRegistry.runTest(m_testNames[i]); + FunctionalTest_t test = m_testRegistry.getTest(m_testNames[i]); + test->runTest(); IsGISAXSTools::drawOutputDataComparisonResults( *test->getResult(), *test->getReference(), test->getName(), test->getDescription()); diff --git a/App/src/TestIsGISAXS15.cpp b/App/src/TestIsGISAXS15.cpp deleted file mode 100644 index 07558e053a2..00000000000 --- a/App/src/TestIsGISAXS15.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// ************************************************************************** // -// -// BornAgain: simulate and fit scattering at grazing incidence -// -//! @file App/src/TestIsGISAXS15.cpp -//! @brief Implements class TestIsGISAXS15. -// -//! Homepage: apps.jcns.fz-juelich.de/BornAgain -//! License: GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2013 -//! @authors Scientific Computing Group at MLZ Garching -//! @authors C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke -// -// ************************************************************************** // - -#include "TestIsGISAXS15.h" -#include "IsGISAXS15.h" -#include "IsGISAXSTools.h" -#include "OutputDataIOFactory.h" -#include "Utils.h" - -#include <fstream> - - -TestIsGISAXS15::TestIsGISAXS15() : IApplicationTest("TestIsGISAXS15") -{ - setOutputPath(Utils::FileSystem::GetPathToData("../Tests/ReferenceData/IsGISAXS/ex-15/" )); -} - - -void TestIsGISAXS15::execute() -{ - FunctionalTests::IsGISAXS15 test; - test.run(); - - OutputDataIOFactory::writeIntensityData(*test.getOutputData(), "this_SSCA.ima"); -} - - -void TestIsGISAXS15::finalise() -{ - std::string isgi_file(getOutputPath()+"isgi_SSCA.ima"); - std::string this_file("this_SSCA.ima"); - - OutputData<double> *isgi_data = OutputDataIOFactory::readIntensityData(isgi_file); - OutputData<double> *our_data = OutputDataIOFactory::readIntensityData(this_file); - - IsGISAXSTools::drawOutputDataComparisonResults(*our_data, *isgi_data, "TestIsGISAXS15_c1", "SSCA Cylinders"); - - delete isgi_data; - delete our_data; -} - - - diff --git a/App/src/TestMesoCrystal1.cpp b/App/src/TestMesoCrystal1.cpp index 170ff808d43..4257a84c0dc 100644 --- a/App/src/TestMesoCrystal1.cpp +++ b/App/src/TestMesoCrystal1.cpp @@ -30,9 +30,8 @@ void TestMesoCrystal1::execute() // loading reference data //std::string filename = Utils::FileSystem::GetPathToData("../Tests/ReferenceData/BornAgain/")+ "mesocrystal1b_reference.txt.gz"; //std::string filename = "dev-tools/tmp-examples/MesoCrystals/ex02_fitspheres/004_230_P144_im_full_phitheta.txt.gz"; - std::string filename = Utils::FileSystem::GetPathToData("../Tests/ReferenceData/BornAgain/")+ "mesocrystal1_reference_v2_nphi180.txt.gz"; + std::string filename = Utils::FileSystem::GetReferenceDataDir()+ "mesocrystal1_reference_v2_nphi180.txt.gz"; //std::string filename = Utils::FileSystem::GetPathToData("../Tests/ReferenceData/BornAgain/")+ "mesocrystal1_reference_v2_nphi2.txt.gz"; - //std::string filename = "mac_test_mesocrystal.txt"; OutputData<double> *reference = OutputDataIOFactory::readIntensityData(filename); @@ -41,8 +40,7 @@ void TestMesoCrystal1::execute() // setting detector axis as in reference data simulation->setDetectorParameters(*reference); - //simulation->getSampleBuilder()->setMatchedParametersValue("*/nphi_rotations", 2.); - + simulation->getSampleBuilder()->setParameterValue("nphi_rotations", 180.); simulation->runSimulation(); simulation->normalize(); diff --git a/App/src/TestMiscellaneous.cpp b/App/src/TestMiscellaneous.cpp index bb2c8e60eee..71243db1f90 100644 --- a/App/src/TestMiscellaneous.cpp +++ b/App/src/TestMiscellaneous.cpp @@ -74,7 +74,7 @@ void TestMiscellaneous::test_FunctionalTestRegistry() FunctionalTestRegistry tests; tests.printCatalogue(); - tests.runTest("isgisaxs01"); + tests.getTest("isgisaxs01"); std::cout << Utils::FileSystem::GetReferenceDataDir() << std::endl; } diff --git a/Core/StandardSamples/FunctionalTestRegistry.cpp b/Core/StandardSamples/FunctionalTestRegistry.cpp index 42ec584b7fd..e79fd532a91 100644 --- a/Core/StandardSamples/FunctionalTestRegistry.cpp +++ b/Core/StandardSamples/FunctionalTestRegistry.cpp @@ -73,6 +73,14 @@ FunctionalTestRegistry::Catalogue::Catalogue() "Core shell nanoparticles", "isgisaxs11_reference.ima.gz", 2e-10); + add("isgisaxs15", + "Size spacing correlation approximation", + "isgisaxs15_reference.ima.gz", 2e-10); + + add("mesocrystal01", + "Mesocrystals of cylindrical shape composed by spherical nanoparticles", + "mesocrystal1_reference_v2_nphi2.txt.gz", 1e-10); + } @@ -128,18 +136,26 @@ bool FunctionalTestRegistry::isRegisteredName(const std::string &name) } -FunctionalTest_t FunctionalTestRegistry::runTest(const std::string &name) +FunctionalTest_t FunctionalTestRegistry::getTest(const std::string &name) { FunctionalTest_t test(new FunctionalTest(m_catalogue.getInfo(name))); - test->runTest(); return test; } +//FunctionalTest_t FunctionalTestRegistry::runTest(const std::string &name) +//{ +// FunctionalTest_t test(new FunctionalTest(m_catalogue.getInfo(name))); +// test->runTest(); +// return test; +//} + + int FUNCTIONAL_TEST(const std::string &name) { FunctionalTestRegistry registry; - FunctionalTest_t test = registry.runTest(name); + FunctionalTest_t test = registry.getTest(name); + test->runTest(); return test->analyseResults(); } diff --git a/Core/StandardSamples/FunctionalTestRegistry.h b/Core/StandardSamples/FunctionalTestRegistry.h index 763a2694dba..68d37f7c760 100644 --- a/Core/StandardSamples/FunctionalTestRegistry.h +++ b/Core/StandardSamples/FunctionalTestRegistry.h @@ -24,7 +24,9 @@ public: void printCatalogue() { m_catalogue.print(); } - FunctionalTest_t runTest(const std::string &name); + FunctionalTest_t getTest(const std::string &name); + + //FunctionalTest_t runTest(const std::string &name); bool isRegisteredName(const std::string &name); diff --git a/Core/StandardSamples/IFunctionalTest.cpp b/Core/StandardSamples/IFunctionalTest.cpp index 09917b62957..9530840e2fe 100644 --- a/Core/StandardSamples/IFunctionalTest.cpp +++ b/Core/StandardSamples/IFunctionalTest.cpp @@ -5,24 +5,38 @@ #include "FileSystem.h" -void FunctionalTest::runTest() +FunctionalTest::FunctionalTest(const FunctionalTestInfo &info) + : m_info(info), + m_simulation(0), + m_reference(0) { SimulationRegistry sim_registry; - Simulation *simulation = sim_registry.createSimulation(getName()); + m_simulation = sim_registry.createSimulation(getName()); std::string filename = Utils::FileSystem::GetReferenceDataDir() + m_info.m_reference_file; m_reference = OutputDataIOFactory::readIntensityData(filename); +} + + +FunctionalTest::~FunctionalTest() +{ + delete m_simulation; + delete m_reference; +} + - simulation->runSimulation(); - m_result = simulation->getIntensityData(); - delete simulation; +void FunctionalTest::runTest() +{ + m_simulation->runSimulation(); } + int FunctionalTest::analyseResults() { - assert(m_result); + assert(m_simulation); +// assert(m_result); assert(m_reference); - double diff = OutputDataFunctions::GetDifference(*m_result,*m_reference); + double diff = OutputDataFunctions::GetDifference(*getResult(),*m_reference); std::cout << getName() << " " << getDescription() << " " << diff << " " << (diff>m_info.m_threshold ? "[FAILED]" : "[OK]") << std::endl; diff --git a/Core/StandardSamples/IFunctionalTest.h b/Core/StandardSamples/IFunctionalTest.h index c0192e21e57..4dd550812a5 100644 --- a/Core/StandardSamples/IFunctionalTest.h +++ b/Core/StandardSamples/IFunctionalTest.h @@ -2,10 +2,11 @@ #define _IFUNCTIONALTEST_H -#include "OutputData.h" +#include "Simulation.h" #include <boost/shared_ptr.hpp> #include <string> + class IFunctionalTest { public: @@ -40,10 +41,12 @@ class FunctionalTest : public IFunctionalTest { public: enum TestResult { SUCCESS, FAILED}; - FunctionalTest(const FunctionalTestInfo &info) : m_info(info), m_result(0), m_reference(0) {} - ~FunctionalTest() { delete m_result; delete m_reference; } - const OutputData<double> *getResult() const { return m_result; } + FunctionalTest(const FunctionalTestInfo &info); + ~FunctionalTest(); + + Simulation *getSimulation() { return m_simulation; } + const OutputData<double> *getResult() const { return m_simulation->getOutputData(); } const OutputData<double> *getReference() const { return m_reference; } std::string getName() const { return m_info.m_name; } std::string getDescription() const { return m_info.m_description; } @@ -52,7 +55,7 @@ public: private: FunctionalTestInfo m_info; - OutputData<double> *m_result; + Simulation *m_simulation; OutputData<double> *m_reference; }; diff --git a/Core/StandardSamples/MesoCrystal01Builder.cpp b/Core/StandardSamples/MesoCrystal01Builder.cpp index 0606a782f45..50ea1b84f43 100644 --- a/Core/StandardSamples/MesoCrystal01Builder.cpp +++ b/Core/StandardSamples/MesoCrystal01Builder.cpp @@ -24,7 +24,7 @@ MesoCrystal01Builder::MesoCrystal01Builder() , m_sigma_lattice_length_a(1.1601e+00*Units::nanometer) , m_surface_filling_ratio(1.7286e-01) , m_roughness(2.8746e+01*Units::nanometer) - , m_nphi_rotations(180) + , m_nphi_rotations(2) { init_parameters(); } diff --git a/Core/StandardSamples/SampleBuilderFactory.cpp b/Core/StandardSamples/SampleBuilderFactory.cpp index c0b2ddc3ec6..20fedfeb847 100644 --- a/Core/StandardSamples/SampleBuilderFactory.cpp +++ b/Core/StandardSamples/SampleBuilderFactory.cpp @@ -107,7 +107,8 @@ SampleBuilderFactory::SampleBuilderFactory() registerItem( "mesocrystal01", IFactoryCreateFunction<MesoCrystal01Builder, ISampleBuilder>, - "mesocrystals of cylindrical shape composed by spherical nanoparticles"); + "Mesocrystals of cylindrical shape composed by spherical nanoparticles"); + registerItem( "PolarizedDWBAZeroMag", IFactoryCreateFunction<PolarizedDWBAZeroMagBuilder, ISampleBuilder>, diff --git a/Core/StandardSamples/SimulationRegistry.cpp b/Core/StandardSamples/SimulationRegistry.cpp index 3ff1476d59a..1eccd25178a 100644 --- a/Core/StandardSamples/SimulationRegistry.cpp +++ b/Core/StandardSamples/SimulationRegistry.cpp @@ -72,11 +72,11 @@ SimulationRegistry::SimulationRegistry() registerItem( "isgisaxs15", StandardSimulations::IsGISAXS15, - "IsGISAXS15 example, Size spacing correlation approximation"); + "Size spacing correlation approximation"); registerItem( "mesocrystal01", StandardSimulations::MesoCrystal01, - "mesocrystals of cylindrical shape composed by spherical nanoparticles"); + "Mesocrystals of cylindrical shape composed by spherical nanoparticles"); registerItem( "PolarizedDWBAZeroMag", StandardSimulations::PolarizedDWBAZeroMag, diff --git a/Core/StandardSamples/StandardSimulations.cpp b/Core/StandardSamples/StandardSimulations.cpp index f07a7060bac..00c95799238 100644 --- a/Core/StandardSamples/StandardSimulations.cpp +++ b/Core/StandardSamples/StandardSimulations.cpp @@ -3,6 +3,8 @@ #include "Simulation.h" #include "ResolutionFunction2DSimple.h" #include "Units.h" +#include "FileSystem.h" +#include "OutputDataIOFactory.h" Simulation *StandardSimulations::IsGISAXS01() { @@ -373,6 +375,12 @@ Simulation *StandardSimulations::MesoCrystal01() Simulation *result = new Simulation(); result->setBeamParameters(1.77*Units::angstrom, 0.4*Units::degree, 0.0*Units::degree); result->setBeamIntensity(5.0090e+12); + + std::string filename = Utils::FileSystem::GetReferenceDataDir() + "mesocrystal1_reference_v2_nphi2.txt.gz"; + OutputData<double> *reference = OutputDataIOFactory::readIntensityData(filename); + result->setDetectorParameters(*reference); + delete reference; + // result->setDetectorResolutionFunction( // new ResolutionFunction2DSimple(0.0002, 0.0002)); diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS08a/IsGISAXS082DDL.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS08a/IsGISAXS08a.cpp similarity index 100% rename from Tests/FunctionalTests/TestCore/IsGISAXS08a/IsGISAXS082DDL.cpp rename to Tests/FunctionalTests/TestCore/IsGISAXS08a/IsGISAXS08a.cpp diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS08b/IsGISAXS082DDL2.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS08b/IsGISAXS08b.cpp similarity index 100% rename from Tests/FunctionalTests/TestCore/IsGISAXS08b/IsGISAXS082DDL2.cpp rename to Tests/FunctionalTests/TestCore/IsGISAXS08b/IsGISAXS08b.cpp diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS09a/IsGISAXS09P.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS09a/IsGISAXS09a.cpp similarity index 100% rename from Tests/FunctionalTests/TestCore/IsGISAXS09a/IsGISAXS09P.cpp rename to Tests/FunctionalTests/TestCore/IsGISAXS09a/IsGISAXS09a.cpp diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS09b/IsGISAXS09R.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS09b/IsGISAXS09b.cpp similarity index 100% rename from Tests/FunctionalTests/TestCore/IsGISAXS09b/IsGISAXS09R.cpp rename to Tests/FunctionalTests/TestCore/IsGISAXS09b/IsGISAXS09b.cpp diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp index fbbb1008c54..0a9943137a8 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp +++ b/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp @@ -1,75 +1,8 @@ -#include "IsGISAXS15.h" -#include "MultiLayer.h" -#include "ParticleDecoration.h" -#include "ParticleBuilder.h" -#include "InterferenceFunction1DParaCrystal.h" -#include "FormFactorCylinder.h" -#include "Simulation.h" -#include "Units.h" -#include "MaterialManager.h" -#include "StochasticGaussian.h" -#include "StochasticSampledParameter.h" -#include "OutputDataIOFactory.h" -#include "Utils.h" -#include "MathFunctions.h" -#include "SimulationRegistry.h" -#include "OutputDataFunctions.h" -#include <iostream> -#include <cmath> - - -FunctionalTests::IsGISAXS15::IsGISAXS15() - : m_name("IsGISAXS15") - , m_description("Size spacing correlation approximation") - , m_result(0) - , m_reference(0) -{ } - - -void FunctionalTests::IsGISAXS15::run(const std::string &path_to_data) -{ - SimulationRegistry sim_registry; - Simulation *simulation = sim_registry.createSimulation("isgisaxs15"); - - // loading reference data - std::string filename = path_to_data + "isgisaxs15_reference.ima.gz"; - m_reference = OutputDataIOFactory::readIntensityData(filename); - - simulation->runSimulation(); - - m_result = simulation->getIntensityData(); - delete simulation; -} - - -int FunctionalTests::IsGISAXS15::analyseResults() -{ - const double threshold(2e-10); - - // calculating average relative difference - double diff = OutputDataFunctions::GetDifference(*m_result,*m_reference); - - bool status_ok(true); - if( diff > threshold ) status_ok=false; - - 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]); -} +#include "FunctionalTestRegistry.h" +#include "FileSystem.h" int main(int argc, char **argv) { - FunctionalTests::IsGISAXS15 test; - test.run(GetPathToData(argc, argv)); - return test.analyseResults(); + if(argc == 2) Utils::FileSystem::SetReferenceDataDir(argv[1]); + return FUNCTIONAL_TEST("isgisaxs15"); } -#endif - diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.h b/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.h deleted file mode 100644 index a91e1104ce0..00000000000 --- a/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef FUNCTIONALTESTS_ISGISAXS15_H -#define FUNCTIONALTESTS_ISGISAXS15_H - -#include "ISampleBuilder.h" -#include <string> -#include "OutputData.h" - - -namespace FunctionalTests { - -class IsGISAXS15 -{ -public : - IsGISAXS15(); - ~IsGISAXS15() { 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/MesoCrystal1/MesoCrystal1.cpp b/Tests/FunctionalTests/TestCore/MesoCrystal1/MesoCrystal1.cpp index 9119717bca1..3284193a401 100644 --- a/Tests/FunctionalTests/TestCore/MesoCrystal1/MesoCrystal1.cpp +++ b/Tests/FunctionalTests/TestCore/MesoCrystal1/MesoCrystal1.cpp @@ -1,76 +1,16 @@ -#include "MesoCrystal1.h" -#include "Simulation.h" -#include "ResolutionFunction2DSimple.h" -#include "OutputDataIOFactory.h" -#include "Utils.h" -#include "Units.h" -#include "Types.h" +#include "FunctionalTestRegistry.h" +#include "FileSystem.h" #include "SimulationRegistry.h" -#include "OutputDataFunctions.h" - -using namespace FunctionalTests; - - - -MesoCrystal1::MesoCrystal1() -: m_name("MesoCrystal1") -, m_description("Meso crystal simulation") -, m_result(0) -, m_reference(0) -{ } - - -void MesoCrystal1::MesoCrystal1::run(const std::string &path_to_data) -{ - SimulationRegistry sim_registry; - Simulation *simulation = sim_registry.createSimulation("mesocrystal01"); - simulation->getSampleBuilder()->setParameterValue("nphi_rotations", 2.); - - // loading reference data - std::string filename = path_to_data + "mesocrystal1_reference_v2_nphi2.txt.gz"; - m_reference = OutputDataIOFactory::readIntensityData(filename); - - // setting detector axis as in reference data - simulation->setDetectorParameters(*m_reference); - - simulation->runSimulation(); - simulation->normalize(); - - m_result = simulation->getIntensityData(); - delete simulation; -} - - -int MesoCrystal1::analyseResults() -{ - const double threshold(1e-10); - - // calculating average relative difference - double diff = OutputDataFunctions::GetDifference(*m_result,*m_reference); - - bool status_ok(true); - if( diff > threshold ) 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::MesoCrystal1 test; - test.run(GetPathToData(argc, argv)); - return test.analyseResults(); + if(argc == 2) Utils::FileSystem::SetReferenceDataDir(argv[1]); + + FunctionalTestRegistry registry; + FunctionalTest_t test = registry.getTest("mesocrystal01"); + test->runTest(); + test->getSimulation()->normalize(); + return test->analyseResults(); + //return FUNCTIONAL_TEST("mesocrystal01"); } -#endif diff --git a/Tests/FunctionalTests/TestCore/MesoCrystal1/MesoCrystal1.h b/Tests/FunctionalTests/TestCore/MesoCrystal1/MesoCrystal1.h deleted file mode 100644 index 61f89d51d0e..00000000000 --- a/Tests/FunctionalTests/TestCore/MesoCrystal1/MesoCrystal1.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef _TESTMESOCRYSTAL1_H -#define _TESTMESOCRYSTAL1_H - -#include "ISampleBuilder.h" -#include "OutputData.h" -#include <string> -#include <vector> - -class ISample; -class Simulation; -#include "OutputData.h" - - -namespace FunctionalTests { - -//! functional test: mesocrystal simulation - -class MesoCrystal1 -{ -public: - MesoCrystal1(); - ~MesoCrystal1() { delete m_result; delete m_reference;} - - //! run fitting - void run(const std::string &path_to_data = std::string()); - int analyseResults(); - -private: - std::string m_name; - std::string m_description; - OutputData<double> *m_result; - OutputData<double> *m_reference; -}; - -} - - -#endif -- GitLab