From 8e2a54a3e69671efb1c3e61e4685577983dbdc20 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Mon, 9 Dec 2013 14:33:35 +0100 Subject: [PATCH] IsGISAXS08 test cleanup --- App/.lssrc | 18 - App/inc/StandardSamples.h | 4 +- App/inc/TestIsGISAXS8.h | 46 - App/src/ApplicationTestFactory.cpp | 11 - App/src/SampleFactory.cpp | 4 +- App/src/StandardSamples.cpp | 274 +---- App/src/StandardSamples.cpp.autosave | 1072 ----------------- App/src/TestIsGISAXS8.cpp | 61 - .../FunctionalTestRegistry.cpp | 8 + Core/StandardSamples/IsGISAXS08Builder.cpp | 8 +- Core/StandardSamples/IsGISAXS08Builder.h | 8 +- Core/StandardSamples/SampleBuilderFactory.cpp | 12 +- Core/StandardSamples/SimulationRegistry.cpp | 9 +- Core/StandardSamples/StandardSimulations.cpp | 8 +- Core/StandardSamples/StandardSimulations.h | 4 +- Tests/FunctionalTests/TestCore/CMakeLists.txt | 4 +- .../TestCore/IsGISAXS08/IsGISAXS08.cpp | 180 --- .../TestCore/IsGISAXS08/IsGISAXS08.h | 38 - .../TestCore/IsGISAXS08/IsGISAXS08.pro | 15 - .../IsGISAXS082DDL/IsGISAXS082DDL.cpp | 70 -- .../TestCore/IsGISAXS082DDL/IsGISAXS082DDL.h | 27 - .../IsGISAXS082DDL2/IsGISAXS082DDL2.cpp | 70 -- .../IsGISAXS082DDL2/IsGISAXS082DDL2.h | 27 - .../TestCore/IsGISAXS08a/IsGISAXS082DDL.cpp | 8 + .../TestCore/IsGISAXS08b/IsGISAXS082DDL2.cpp | 9 + 25 files changed, 116 insertions(+), 1879 deletions(-) delete mode 100644 App/.lssrc delete mode 100644 App/inc/TestIsGISAXS8.h delete mode 100644 App/src/StandardSamples.cpp.autosave delete mode 100644 App/src/TestIsGISAXS8.cpp delete mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp delete mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.h delete mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.pro delete mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS082DDL/IsGISAXS082DDL.cpp delete mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS082DDL/IsGISAXS082DDL.h delete mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS082DDL2/IsGISAXS082DDL2.cpp delete mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS082DDL2/IsGISAXS082DDL2.h create mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS08a/IsGISAXS082DDL.cpp create mode 100644 Tests/FunctionalTests/TestCore/IsGISAXS08b/IsGISAXS082DDL2.cpp diff --git a/App/.lssrc b/App/.lssrc deleted file mode 100644 index 311ff95b612..00000000000 --- a/App/.lssrc +++ /dev/null @@ -1,18 +0,0 @@ -# -*- mode: python -*- - -# Include file for program lssrc. -# Returns user-written source files. - -import glob, re - -def source_files(root): - fnames = [] - # get all files with right extension from pwd - fnames += sorted( glob.glob( root+"inc/*.h" ) ) - fnames += sorted( glob.glob( root+"src/*.cpp" ) ) - # remove files known to be machine generated - out = list(fnames) - for f in fnames: - if re.search( r'\.pypp\.', f ): - out.remove( f ) - return out diff --git a/App/inc/StandardSamples.h b/App/inc/StandardSamples.h index 9a55b2a1653..d7464860837 100644 --- a/App/inc/StandardSamples.h +++ b/App/inc/StandardSamples.h @@ -33,8 +33,8 @@ ISample *MultilayerOffspecTestcase2b(); ISample *MultilayerSpecularMagneticTestCase(); ISample *PolarizedDWBATestCase(); -ISample *IsGISAXS8_2DDL_lattice(); -ISample *IsGISAXS8_2DDL_lattice2(); +//ISample *IsGISAXS8_2DDL_lattice(); +//ISample *IsGISAXS8_2DDL_lattice2(); ISample *IsGISAXS10_CylindersParacrystal1D(); ISample *IsGISAXS11_CoreShellParticles(); diff --git a/App/inc/TestIsGISAXS8.h b/App/inc/TestIsGISAXS8.h deleted file mode 100644 index d40a8e46f4b..00000000000 --- a/App/inc/TestIsGISAXS8.h +++ /dev/null @@ -1,46 +0,0 @@ -// ************************************************************************** // -// -// BornAgain: simulate and fit scattering at grazing incidence -// -//! @file App/inc/TestIsGISAXS8.h -//! @brief Defines class TestIsGISAXS8. -// -//! 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 TESTISGISAXS8_H_ -#define TESTISGISAXS8_H_ - -#include "IApplicationTest.h" - -//! IsGISAXS ex#8: Cylinder with interference 2DDL_lattice. - -class TestIsGISAXS8 : public IApplicationTest -{ -public: - TestIsGISAXS8(); - virtual ~TestIsGISAXS8(){} - - 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 /* TESTISGISAXS8_H_ */ - - diff --git a/App/src/ApplicationTestFactory.cpp b/App/src/ApplicationTestFactory.cpp index 329f9b842ee..169b10eec3d 100644 --- a/App/src/ApplicationTestFactory.cpp +++ b/App/src/ApplicationTestFactory.cpp @@ -33,7 +33,6 @@ #include "TestIsGISAXS14.h" #include "TestIsGISAXS15.h" #include "TestIsGISAXS5.h" -#include "TestIsGISAXS8.h" #include "TestIsGISAXS9.h" #include "TestMesoCrystal1.h" #include "TestMesoCrystal2.h" @@ -165,16 +164,6 @@ void RegisterApplicationTests(ApplicationTestFactory *p_test_factory) IFactoryCreateFunction<TestIsGISAXS5, IApplicationTest>, "functional test: isgisaxs ex-5 (fit with paracrystal 1d structure " "factor)"); -// p_test_factory->registerItem( -// "isgisaxs07", -// IFactoryCreateFunction<TestIsGISAXS7, IApplicationTest>, -// "functional test: isgisaxs ex-7 (particle mixture from morphology " -// "file)"); - p_test_factory->registerItem( - "isgisaxs08", - IFactoryCreateFunction<TestIsGISAXS8, IApplicationTest>, - "functional test: isgisaxs ex-8 (paracrystal lattice structure " - "factors)"); p_test_factory->registerItem( "isgisaxs09", IFactoryCreateFunction<TestIsGISAXS9, IApplicationTest>, diff --git a/App/src/SampleFactory.cpp b/App/src/SampleFactory.cpp index 943cf615352..95a1e1e95c9 100644 --- a/App/src/SampleFactory.cpp +++ b/App/src/SampleFactory.cpp @@ -51,8 +51,8 @@ SampleFactory::SampleFactory() StandardSamples::MultilayerSpecularMagneticTestCase); // IsGISAXS8 example: cylinders on top of substrate with paracrystal lattice structure - registerItem("IsGISAXS8_2DDL_lattice", StandardSamples::IsGISAXS8_2DDL_lattice); - registerItem("IsGISAXS8_2DDL_lattice2", StandardSamples::IsGISAXS8_2DDL_lattice2); +// registerItem("IsGISAXS8_2DDL_lattice", StandardSamples::IsGISAXS8_2DDL_lattice); +// registerItem("IsGISAXS8_2DDL_lattice2", StandardSamples::IsGISAXS8_2DDL_lattice2); // IsGISAXS10 example: cylinders with interference diff --git a/App/src/StandardSamples.cpp b/App/src/StandardSamples.cpp index 5b98b3f2486..7d5abcb6154 100644 --- a/App/src/StandardSamples.cpp +++ b/App/src/StandardSamples.cpp @@ -254,200 +254,83 @@ ISample *StandardSamples::MultilayerOffspecTestcase2b() return mySample; } -// IsGISAXS ex#7: Particle mixture from morphology file. -//ISample *StandardSamples::IsGISAXS7_morphology() + +// IsGISAXS ex#8a: 2D paracrystal lattice. + +//ISample *StandardSamples::IsGISAXS8_2DDL_lattice() //{ // MultiLayer *p_multi_layer = new MultiLayer(); -// const IMaterial *particle_material = -// MaterialManager::getHomogeneousMaterial("Particle", 6e-4, 2e-8); +// 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", 0., 0.); +// 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); -// ParticleDecoration particle_decoration; - -// // add particle number 1: -// FormFactorBox ff1(1.0*Units::nanometer, -// 1.0*Units::nanometer, -// 1.0*Units::nanometer); -// kvector_t pos1(0.0*Units::nanometer, 0.0*Units::nanometer, 0.0); -// PositionParticleInfo particle_info1 -// (new Particle(particle_material, ff1), pos1, 0.5); -// particle_decoration.addParticleInfo(particle_info1); -// // add particle number 2: -// FormFactorBox ff2(1.0*Units::nanometer, -// 2.0*Units::nanometer, -// 1.0*Units::nanometer); -// kvector_t pos2(5.0*Units::nanometer, -// 5.0*Units::nanometer, -// 0.0); -// Geometry::RotateZ_3D m2(10*Units::degree); -// PositionParticleInfo particle_info2 -// (new Particle(particle_material, ff2, m2), pos2, 0.5); -// particle_decoration.addParticleInfo(particle_info2); -// // add particle number 3: -// FormFactorBox ff3(1.0*Units::nanometer, -// 3.0*Units::nanometer, -// 1.0*Units::nanometer); -// kvector_t pos3(-5.0*Units::nanometer, -// -5.0*Units::nanometer, -// 0.0); -// Geometry::RotateZ_3D m3(20*Units::degree); -// PositionParticleInfo particle_info3 -// (new Particle(particle_material, ff3, m3), pos3, 0.5); -// particle_decoration.addParticleInfo(particle_info3); -// // add particle number 4: -// FormFactorBox ff4(1.0*Units::nanometer, -// 4.0*Units::nanometer, -// 1.0*Units::nanometer); -// kvector_t pos4(5.0*Units::nanometer, -// -5.0*Units::nanometer, -// 0.0); -// Geometry::RotateZ_3D m4(30*Units::degree); -// PositionParticleInfo particle_info4 -// (new Particle(particle_material, ff4, m4), pos4, 0.5); -// particle_decoration.addParticleInfo(particle_info4); -// // add particle number 5: -// FormFactorBox ff5(1.0*Units::nanometer, -// 5.0*Units::nanometer, -// 1.0*Units::nanometer); -// kvector_t pos5(-5.0*Units::nanometer, -// 5.0*Units::nanometer, -// 0.0); -// Geometry::RotateZ_3D m5(40*Units::degree); -// PositionParticleInfo particle_info5 -// (new Particle(particle_material, ff5, m5), pos5, 0.5); -// particle_decoration.addParticleInfo(particle_info5); -// // add particle number 6: -// FormFactorBox ff6(1.0*Units::nanometer, -// 1.0*Units::nanometer, -// 1.0*Units::nanometer); -// kvector_t pos6(0.0*Units::nanometer, -// 0.0*Units::nanometer, -// 0.0); -// Geometry::RotateZ_3D m6(50*Units::degree); -// PositionParticleInfo particle_info6 -// (new Particle(particle_material, ff6, m6), pos6, 0.5); -// particle_decoration.addParticleInfo(particle_info6); -// // add particle number 7: -// FormFactorBox ff7(1.0*Units::nanometer, -// 2.0*Units::nanometer, -// 1.0*Units::nanometer); -// kvector_t pos7(5.0*Units::nanometer, 5.0*Units::nanometer, 0.0); -// Geometry::RotateZ_3D m7(60*Units::degree); -// PositionParticleInfo particle_info7 -// (new Particle(particle_material, ff7, m7), pos7, 0.5); -// particle_decoration.addParticleInfo(particle_info7); -// // add particle number 8: -// FormFactorBox ff8(1.0*Units::nanometer, -// 3.0*Units::nanometer, -// 1.0*Units::nanometer); -// kvector_t pos8(-5.0*Units::nanometer, -5.0*Units::nanometer, 0.0); -// Geometry::RotateZ_3D m8(70*Units::degree); -// PositionParticleInfo particle_info8 -// (new Particle(particle_material, ff8, m8), pos8, 0.5); -// particle_decoration.addParticleInfo(particle_info8); -// // add particle number 9: -// FormFactorBox ff9(1.0*Units::nanometer, -// 4.0*Units::nanometer, -// 1.0*Units::nanometer); -// kvector_t pos9(5.0*Units::nanometer, -5.0*Units::nanometer, 0.0); -// Geometry::RotateZ_3D m9(80*Units::degree); -// PositionParticleInfo particle_info9 -// (new Particle(particle_material, ff9, m9), pos9, 0.5); -// particle_decoration.addParticleInfo(particle_info9); -// // add particle number 10: -// FormFactorBox ff10(1.0*Units::nanometer, -// 5.0*Units::nanometer, -// 1.0*Units::nanometer); -// kvector_t pos10(-5.0*Units::nanometer, 5.0*Units::nanometer, 0.0); -// Geometry::RotateZ_3D m10(90*Units::degree); -// PositionParticleInfo particle_info10 -// (new Particle(particle_material, ff10, m10), pos10, 0.5); -// particle_decoration.addParticleInfo(particle_info10); +// Layer substrate_layer; +// substrate_layer.setMaterial(p_substrate_material); +// InterferenceFunction2DParaCrystal *p_interference_function = +// new InterferenceFunction2DParaCrystal +// (10.0*Units::nanometer, 10.0*Units::nanometer, M_PI/2.0, 0.0, 0.0); +// p_interference_function->setDomainSizes +// (20.0*Units::micrometer, 20.0*Units::micrometer); +// FTDistribution2DCauchy pdf1(0.5*Units::nanometer, 2.0*Units::nanometer); +// FTDistribution2DCauchy pdf2(0.5*Units::nanometer, 2.0*Units::nanometer); +// p_interference_function->setProbabilityDistributions(pdf1, pdf2); +// ParticleDecoration particle_decoration +// (new Particle(particle_material, new FormFactorCylinder +// (5*Units::nanometer, 5*Units::nanometer))); +// 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; //} -// IsGISAXS ex#8a: 2D paracrystal lattice. +////! IsGISAXS ex#8b: 2D paracrystal lattice with isotropic pdfs. -ISample *StandardSamples::IsGISAXS8_2DDL_lattice() -{ - 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); - InterferenceFunction2DParaCrystal *p_interference_function = - new InterferenceFunction2DParaCrystal - (10.0*Units::nanometer, 10.0*Units::nanometer, M_PI/2.0, 0.0, 0.0); - p_interference_function->setDomainSizes - (20.0*Units::micrometer, 20.0*Units::micrometer); - FTDistribution2DCauchy pdf1(0.5*Units::nanometer, 2.0*Units::nanometer); - FTDistribution2DCauchy pdf2(0.5*Units::nanometer, 2.0*Units::nanometer); - p_interference_function->setProbabilityDistributions(pdf1, pdf2); - ParticleDecoration particle_decoration - (new Particle(particle_material, new FormFactorCylinder - (5*Units::nanometer, 5*Units::nanometer))); - 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; -} - -//! IsGISAXS ex#8b: 2D paracrystal lattice with isotropic pdfs. - -ISample *StandardSamples::IsGISAXS8_2DDL_lattice2() -{ - 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); - InterferenceFunction2DParaCrystal *p_interference_function = - new InterferenceFunction2DParaCrystal - (10.0*Units::nanometer, 10.0*Units::nanometer, M_PI/2.0, 0.0, 0.0); - p_interference_function->setDomainSizes - (20.0*Units::micrometer, 20.0*Units::micrometer); - FTDistribution2DCauchy pdf1(0.5*Units::nanometer, 0.5*Units::nanometer); - FTDistribution2DCauchy pdf2(0.5*Units::nanometer, 0.5*Units::nanometer); - p_interference_function->setProbabilityDistributions(pdf1, pdf2); - ParticleDecoration particle_decoration - (new Particle(particle_material, new FormFactorCylinder - (5*Units::nanometer, 5*Units::nanometer))); - particle_decoration.addInterferenceFunction(p_interference_function); +//ISample *StandardSamples::IsGISAXS8_2DDL_lattice2() +//{ +// 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); +// InterferenceFunction2DParaCrystal *p_interference_function = +// new InterferenceFunction2DParaCrystal +// (10.0*Units::nanometer, 10.0*Units::nanometer, M_PI/2.0, 0.0, 0.0); +// p_interference_function->setDomainSizes +// (20.0*Units::micrometer, 20.0*Units::micrometer); +// FTDistribution2DCauchy pdf1(0.5*Units::nanometer, 0.5*Units::nanometer); +// FTDistribution2DCauchy pdf2(0.5*Units::nanometer, 0.5*Units::nanometer); +// p_interference_function->setProbabilityDistributions(pdf1, pdf2); +// ParticleDecoration particle_decoration +// (new Particle(particle_material, new FormFactorCylinder +// (5*Units::nanometer, 5*Units::nanometer))); +// particle_decoration.addInterferenceFunction(p_interference_function); - air_layer.setDecoration(particle_decoration); +// air_layer.setDecoration(particle_decoration); - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; -} +// p_multi_layer->addLayer(air_layer); +// p_multi_layer->addLayer(substrate_layer); +// return p_multi_layer; +//} ISample *StandardSamples::IsGISAXS10_CylindersParacrystal1D() { @@ -1187,38 +1070,3 @@ ISample *StandardSamples::PolarizedDWBATestCase() return mySample; } -//ISample *StandardSamples::PolarizedDWBAZeroMagTestCase() -//{ - // MultiLayer *multi_layer = new MultiLayer(); -// -// kvector_t magnetic_field(0.0, 0.0, 0.0); - // const IMaterial *p_air_material = -// MaterialManager::getHomogeneousMaterial("Air", 0.0, 0.0); - // const IMaterial *p_substrate_material = -// MaterialManager::getHomogeneousMaterial("Substrate", 6e-6, 2e-8); -// Layer air_layer; -// air_layer.setMaterial(p_air_material); -// Layer substrate_layer; -// substrate_layer.setMaterial(p_substrate_material); -// const IMaterial *particle_material = -// MaterialManager::getHomogeneousMagneticMaterial( -// "Particle", 6e-4, 2e-8, magnetic_field); -// -// ParticleDecoration particle_decoration( -// new Particle(particle_material, - // new FormFactorCylinder(5*Units::nanometer, - // 5*Units::nanometer))); -// -// particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); -// -// air_layer.setDecoration(particle_decoration); -// -// multi_layer->addLayer(air_layer); -// multi_layer->addLayer(substrate_layer); -// -// return multi_layer; -//} - - - - diff --git a/App/src/StandardSamples.cpp.autosave b/App/src/StandardSamples.cpp.autosave deleted file mode 100644 index 3cc8bc21f24..00000000000 --- a/App/src/StandardSamples.cpp.autosave +++ /dev/null @@ -1,1072 +0,0 @@ -// ************************************************************************** // -// -// BornAgain: simulate and fit scattering at grazing incidence -// -//! @file App/src/StandardSamples.cpp -//! @brief Implements class StandardSamples. -// -//! 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 "StandardSamples.h" -#include "MultiLayer.h" -#include "MaterialManager.h" -#include "Units.h" -#include "Particle.h" -#include "FormFactors.h" -#include "ParticleDecoration.h" -#include "InterferenceFunctionNone.h" -#include "Lattice.h" -#include "LatticeBasis.h" -#include "Crystal.h" -#include "MesoCrystal.h" -#include "InterferenceFunctions.h" -#include "StochasticGaussian.h" -#include "Rotate3D.h" - -#include "Numeric.h" -#include "MathFunctions.h" -#include "ParticleBuilder.h" -#include "StochasticSampledParameter.h" -#include "ParticleCoreShell.h" - -#include "Particle.h" -#include "PositionParticleInfo.h" - -//! 10 nm of ambience on top of substrate. - -ISample *StandardSamples::AirOnSubstrate() -{ - const IMaterial *mAmbience = - MaterialManager::getHomogeneousMaterial - ("ambience",complex_t(1.0, 0.0) ); - const IMaterial *mSubstrate = - MaterialManager::getHomogeneousMaterial - ("substrate", complex_t(1.0-15e-6, 0) ); - - MultiLayer *mySample = new MultiLayer; - - Layer lAmbience; - lAmbience.setMaterial(mAmbience, 0); - mySample->addLayer(lAmbience); - - Layer lAir; - lAir.setMaterial(mAmbience, 10*Units::nanometer); - mySample->addLayer(lAir); - - Layer lSubstrate; - lSubstrate.setMaterial(mSubstrate,0); - mySample->addLayer(lSubstrate); - - return mySample; -} - -//! 10 nm of substrate on top of substrate. - -ISample *StandardSamples::SubstrateOnSubstrate() -{ - const IMaterial *mAmbience = - MaterialManager::getHomogeneousMaterial - ("ambience",complex_t(1.0, 0.0) ); - const IMaterial *mSubstrate = - MaterialManager::getHomogeneousMaterial - ("substrate", complex_t(1.0-15e-6, 0) ); - - MultiLayer *mySample = new MultiLayer; - - Layer lAmbience; - lAmbience.setMaterial(mAmbience, 0); - mySample->addLayer(lAmbience); - - Layer likeSubstrate; - likeSubstrate.setMaterial(mSubstrate, 10*Units::nanometer); - mySample->addLayer(likeSubstrate); - - Layer lSubstrate; - lSubstrate.setMaterial(mSubstrate,0); - mySample->addLayer(lSubstrate); - - return mySample; -} - -//! Simple multilayer. - -ISample *StandardSamples::SimpleMultilayer() -{ - const IMaterial *mAmbience = - MaterialManager::getHomogeneousMaterial("ambience", - complex_t(1.0, 0.0) ); - const IMaterial *mAg1 = - MaterialManager::getHomogeneousMaterial("ag1", - complex_t(1.0-5e-6, 0.0) ); - const IMaterial *mCr1 = - MaterialManager::getHomogeneousMaterial("cr1", - complex_t(1.0-10e-6, 0.0) ); - const IMaterial *mSubstrate = - MaterialManager::getHomogeneousMaterial("substrate2", - complex_t(1.0-15e-6, 0.0) ); - - Layer lAmbience; - lAmbience.setMaterial(mAmbience, 0); - - Layer lAg1; - lAg1.setMaterial(mAg1, 150.0*Units::nanometer); - - Layer lCr1; - lCr1.setMaterial(mCr1, 120.0*Units::nanometer); - - Layer lSubstrate; - lSubstrate.setMaterial(mSubstrate, 0); - - MultiLayer *mySample = new MultiLayer; - - // adding layers - mySample->addLayer(lAmbience); - - LayerRoughness roughness; - roughness.setSigma(0.0*Units::nanometer); - roughness.setHurstParameter(0.3); - roughness.setLatteralCorrLength(5000*Units::nanometer); - - const unsigned nrepetitions = 2; - for(unsigned i=0; i<nrepetitions; ++i) { - mySample->addLayerWithTopRoughness(lAg1, roughness); - mySample->addLayerWithTopRoughness(lCr1, roughness); - } - mySample->addLayerWithTopRoughness(lSubstrate, roughness); - return mySample; -} - -//! Multilayer offspecular testcase - -ISample *StandardSamples::MultilayerOffspecTestcase1a() -{ - const IMaterial *mAmbience = - MaterialManager::getHomogeneousMaterial - ("ambience", complex_t(1.0, 0.0) ); - const IMaterial *mPartA = - MaterialManager::getHomogeneousMaterial - ("PartA", complex_t(1.0-5e-6, 0.0) ); - const IMaterial *mPartB = - MaterialManager::getHomogeneousMaterial - ("PartB", complex_t(1.0-10e-6, 0.0) ); - const IMaterial *mSubstrate = - MaterialManager::getHomogeneousMaterial - ("substrate", complex_t(1.0-15e-6, 0.0) ); - - Layer lAmbience; - lAmbience.setMaterial(mAmbience, 0); - - Layer lPartA; - lPartA.setMaterial(mPartA, 5.0*Units::nanometer); - - Layer lPartB; - lPartB.setMaterial(mPartB, 10.0*Units::nanometer); - - Layer lSubstrate; - lSubstrate.setMaterial(mSubstrate, 0); - - LayerRoughness roughness; - roughness.setSigma(1.0*Units::nanometer); - roughness.setHurstParameter(0.3); - roughness.setLatteralCorrLength(500*Units::nanometer); - - MultiLayer *mySample = new MultiLayer; - - // adding layers - mySample->addLayer(lAmbience); - - const unsigned nrepetitions = 10; - for(unsigned i=0; i<nrepetitions; ++i) { - mySample->addLayerWithTopRoughness(lPartA, roughness); - mySample->addLayerWithTopRoughness(lPartB, roughness); - } - - mySample->addLayerWithTopRoughness(lSubstrate, roughness); - - //mySample->setCrossCorrLength(1e-10); - - return mySample; -} - -//! Multilayer offspecular tescase. - -ISample *StandardSamples::MultilayerOffspecTestcase1b() -{ - MultiLayer *myOrigSample = - dynamic_cast<MultiLayer *> - (StandardSamples::MultilayerOffspecTestcase1a()); - MultiLayer *mySample = myOrigSample->clone(); - delete myOrigSample; - mySample->setCrossCorrLength(1e10); - return mySample; -} - -//! Multilayer offspecular testcase. - -ISample *StandardSamples::MultilayerOffspecTestcase2a() -{ - const IMaterial *mAmbience = - MaterialManager::getHomogeneousMaterial - ("ambience",complex_t(1.0, 0.0) ); - const IMaterial *mSubstrate = - MaterialManager::getHomogeneousMaterial - ("substrate", complex_t(1.0-15e-6, 0) ); - - MultiLayer *mySample = new MultiLayer; - - Layer lAmbience; - lAmbience.setMaterial(mAmbience, 0); - mySample->addLayer(lAmbience); - - LayerRoughness roughness; - roughness.setSigma(0.5*Units::nanometer); - roughness.setHurstParameter(0.3); - roughness.setLatteralCorrLength(500.*Units::nanometer); - - Layer lAir; - lAir.setMaterial(mAmbience, 10*Units::nanometer); - mySample->addLayerWithTopRoughness(lAir, roughness); - - Layer lSubstrate; - lSubstrate.setMaterial(mSubstrate,0); - mySample->addLayerWithTopRoughness(lSubstrate, roughness); - - return mySample; -} - -//! Multilayer offspecular testcase. - -ISample *StandardSamples::MultilayerOffspecTestcase2b() -{ - MultiLayer *myOrigSample = - dynamic_cast<MultiLayer *> - (StandardSamples::MultilayerOffspecTestcase2a()); - MultiLayer *mySample = myOrigSample->clone(); - delete myOrigSample; - // changing thickness of middle layer - mySample->setLayerThickness(1, 0.01*Units::nanometer); - return mySample; -} - - - -// IsGISAXS ex#8a: 2D paracrystal lattice. - -ISample *StandardSamples::IsGISAXS8_2DDL_lattice() -{ - 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); - InterferenceFunction2DParaCrystal *p_interference_function = - new InterferenceFunction2DParaCrystal - (10.0*Units::nanometer, 10.0*Units::nanometer, M_PI/2.0, 0.0, 0.0); - p_interference_function->setDomainSizes - (20.0*Units::micrometer, 20.0*Units::micrometer); - FTDistribution2DCauchy pdf1(0.5*Units::nanometer, 2.0*Units::nanometer); - FTDistribution2DCauchy pdf2(0.5*Units::nanometer, 2.0*Units::nanometer); - p_interference_function->setProbabilityDistributions(pdf1, pdf2); - ParticleDecoration particle_decoration - (new Particle(particle_material, new FormFactorCylinder - (5*Units::nanometer, 5*Units::nanometer))); - 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; -} - -//! IsGISAXS ex#8b: 2D paracrystal lattice with isotropic pdfs. - -ISample *StandardSamples::IsGISAXS8_2DDL_lattice2() -{ - 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); - InterferenceFunction2DParaCrystal *p_interference_function = - new InterferenceFunction2DParaCrystal - (10.0*Units::nanometer, 10.0*Units::nanometer, M_PI/2.0, 0.0, 0.0); - p_interference_function->setDomainSizes - (20.0*Units::micrometer, 20.0*Units::micrometer); - FTDistribution2DCauchy pdf1(0.5*Units::nanometer, 0.5*Units::nanometer); - FTDistribution2DCauchy pdf2(0.5*Units::nanometer, 0.5*Units::nanometer); - p_interference_function->setProbabilityDistributions(pdf1, pdf2); - ParticleDecoration particle_decoration - (new Particle(particle_material, new FormFactorCylinder - (5*Units::nanometer, 5*Units::nanometer))); - 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; -} - -ISample *StandardSamples::IsGISAXS10_CylindersParacrystal1D() -{ - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-5e-6, 2e-8); - complex_t n_particle(1.0-5e-5, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air10", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate10", 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); - IInterferenceFunction *p_interference_function = - new InterferenceFunction1DParaCrystal - (20.0*Units::nanometer,7*Units::nanometer, 1e7*Units::nanometer); - ParticleDecoration particle_decoration - (new Particle(particle_material, new FormFactorCylinder - (5*Units::nanometer, 5*Units::nanometer))); - particle_decoration.addInterferenceFunction(p_interference_function); - // particle_decoration.setTotalParticleSurfaceDensity(1.0/(20.0*Units::nanometer*20.0*Units::nanometer)); - - air_layer.setDecoration(particle_decoration); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(substrate_layer); - return p_multi_layer; -} - -// IsGISAXS ex#11: Core-shell parallelepiped islands. - -ISample *StandardSamples::IsGISAXS11_CoreShellParticles() -{ - 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 *core_material = - MaterialManager::getHomogeneousMaterial("Core", n_particle_core); - const IMaterial *shell_material = - MaterialManager::getHomogeneousMaterial("Shell", 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; -} - -//! IsGISAXS ex#14: Layered sphere on graded interface. - -ISample *StandardSamples::IsGISAXS14_LayeredSpheresOnGradedInterface() -{ - 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-5, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air10", n_air); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate10", 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); - IInterferenceFunction *p_interference_function = - new InterferenceFunction1DParaCrystal - (15.0*Units::nanometer,5*Units::nanometer, 1e7*Units::nanometer); - ParticleDecoration particle_decoration - (new Particle(particle_material, new FormFactorSphere - (5*Units::nanometer, 5.*2.0*Units::nanometer))); - 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; -} - -//! 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; - -} - -//! 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; -} - -//! Multilayer specular magnetic testcase - -ISample *StandardSamples::MultilayerSpecularMagneticTestCase() -{ - const IMaterial *mAmbience = - MaterialManager::getHomogeneousMaterial - ("ambience", 0.0, 0.0 ); - kvector_t magnetic_field(0.0, 1.0, 0.0); - const IMaterial *mPartA = - MaterialManager::getHomogeneousMagneticMaterial - ("PartA", 5e-6, 0.0, magnetic_field); - const IMaterial *mPartB = - MaterialManager::getHomogeneousMagneticMaterial - ("PartB", 8e-6, 0.0, -magnetic_field ); - const IMaterial *mSubstrate = - MaterialManager::getHomogeneousMaterial - ("substrate", 15e-6, 0.0 ); - - Layer lAmbience; - lAmbience.setMaterial(mAmbience, 0); - - Layer lPartA; - lPartA.setMaterial(mPartA, 5.0*Units::nanometer); - - Layer lPartB; - lPartB.setMaterial(mPartB, 5.0*Units::nanometer); - - Layer lSubstrate; - lSubstrate.setMaterial(mSubstrate, 0); - - MultiLayer *mySample = new MultiLayer; - - // adding layers - mySample->addLayer(lAmbience); - - const unsigned nrepetitions = 10; - for(unsigned i=0; i<nrepetitions; ++i) { - mySample->addLayer(lPartA); - mySample->addLayer(lPartB); - } - - mySample->addLayer(lSubstrate); - - return mySample; -} - -//! Polarized DWBA test case - -ISample *StandardSamples::PolarizedDWBATestCase() -{ - const IMaterial *mAmbience = - MaterialManager::getHomogeneousMaterial - ("ambience", 0.0, 0.0 ); - kvector_t magnetic_field(0.0, 1.0, 0.0); - const IMaterial *mPart = - MaterialManager::getHomogeneousMagneticMaterial - ("particle", 5e-6, 0.0, magnetic_field); -// const IMaterial *mPart = -// MaterialManager::getHomogeneousMaterial -// ("particle", 5e-6, 0.0); - const IMaterial *mSubstrate = - MaterialManager::getHomogeneousMaterial - ("substrate", 15e-6, 0.0 ); - - Layer lAmbience; - lAmbience.setMaterial(mAmbience, 0); - - Layer lSubstrate; - lSubstrate.setMaterial(mSubstrate, 0); - - ParticleDecoration particle_decoration; - - particle_decoration.addParticle( - new Particle(mPart, - new FormFactorCylinder( - 5.0*Units::nanometer, - 5.0*Units::nanometer) - )); - particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - - //LayerDecorator air_layer_decorator(air_layer, particle_decoration); - lAmbience.setDecoration(particle_decoration); - - MultiLayer *mySample = new MultiLayer; - - // adding layers - mySample->addLayer(lAmbience); - - mySample->addLayer(lSubstrate); - - return mySample; -} - diff --git a/App/src/TestIsGISAXS8.cpp b/App/src/TestIsGISAXS8.cpp deleted file mode 100644 index 2ad842f9329..00000000000 --- a/App/src/TestIsGISAXS8.cpp +++ /dev/null @@ -1,61 +0,0 @@ -// ************************************************************************** // -// -// BornAgain: simulate and fit scattering at grazing incidence -// -//! @file App/src/TestIsGISAXS8.cpp -//! @brief Implements class TestIsGISAXS8. -// -//! 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 "TestIsGISAXS8.h" -#include "IsGISAXS08.h" -#include "IsGISAXSTools.h" -#include "OutputDataIOFactory.h" -#include "Utils.h" - -#include <fstream> - - -TestIsGISAXS8::TestIsGISAXS8() : IApplicationTest("TestIsGISAXS8") -{ - setOutputPath(Utils::FileSystem::GetPathToData("../Tests/ReferenceData/IsGISAXS/ex-8/" )); -} - - -void TestIsGISAXS8::execute() -{ - FunctionalTests::IsGISAXS08 test; - - test.run2DDL(); - OutputDataIOFactory::writeIntensityData(*test.getOutputData(FunctionalTests::IsGISAXS08::kTest_2DDL), "this_2DDL_lattice.ima"); - - test.run2DDL2(); - OutputDataIOFactory::writeIntensityData(*test.getOutputData(FunctionalTests::IsGISAXS08::kTest_2DDL2), "this_2DDL_lattice2.ima"); -} - - -void TestIsGISAXS8::finalise() -{ - std::vector< CompareStruct > tocompare; - tocompare.push_back( CompareStruct(getOutputPath()+"isgi_2DDL_lattice.ima.gz", "this_2DDL_lattice.ima", "Cylinder 2DDL lattice") ); - tocompare.push_back( CompareStruct(getOutputPath()+"isgi_2DDL_lattice2.ima.gz", "this_2DDL_lattice2.ima", "Cylinder 2DDL lattice with isotropic pdfs") ); - - for(size_t i=0; i<tocompare.size(); ++i) { - OutputData<double> *isgi_data = OutputDataIOFactory::readIntensityData(tocompare[i].isginame); - OutputData<double> *our_data = OutputDataIOFactory::readIntensityData(tocompare[i].thisname); - - IsGISAXSTools::drawOutputDataComparisonResults(*our_data, *isgi_data, tocompare[i].descr, tocompare[i].descr); - - delete isgi_data; - delete our_data; - } -} - - - diff --git a/Core/StandardSamples/FunctionalTestRegistry.cpp b/Core/StandardSamples/FunctionalTestRegistry.cpp index 6b324dd8db2..fca3d15e978 100644 --- a/Core/StandardSamples/FunctionalTestRegistry.cpp +++ b/Core/StandardSamples/FunctionalTestRegistry.cpp @@ -51,6 +51,14 @@ FunctionalTestRegistry::Catalogue::Catalogue() "Mixture of different particles a la IsGISAXS morphology file", "isgisaxs07_reference.ima.gz", 2e-10); + add("isgisaxs08a", + "2DDL paracrystal lattice", + "isgisaxs08_reference_2DDL_lattice.ima.gz", 2e-10); + add("isgisaxs08b", + "2D paracrystal lattice with isotropic pdfs", + "isgisaxs08_reference_2DDL_lattice2.ima.gz", 2e-10); + + } diff --git a/Core/StandardSamples/IsGISAXS08Builder.cpp b/Core/StandardSamples/IsGISAXS08Builder.cpp index 75e462ea8ec..b7f564398aa 100644 --- a/Core/StandardSamples/IsGISAXS08Builder.cpp +++ b/Core/StandardSamples/IsGISAXS08Builder.cpp @@ -7,11 +7,11 @@ #include "Units.h" #include "ParticleBuilder.h" -IsGISAXS08Para1DBuilder::IsGISAXS08Para1DBuilder() +IsGISAXS08ABuilder::IsGISAXS08ABuilder() { } -ISample *IsGISAXS08Para1DBuilder::buildSample() const +ISample *IsGISAXS08ABuilder::buildSample() const { MultiLayer *multi_layer = new MultiLayer(); @@ -52,12 +52,12 @@ ISample *IsGISAXS08Para1DBuilder::buildSample() const // ----------------------------------------------------------------------------- // -IsGISAXS08Para2DBuilder::IsGISAXS08Para2DBuilder() +IsGISAXS08BBuilder::IsGISAXS08BBuilder() { } // IsGISAXS8 functional test: 2D paracrystal lattice with isotropic pdfs -ISample *IsGISAXS08Para2DBuilder::buildSample() const +ISample *IsGISAXS08BBuilder::buildSample() const { MultiLayer *multi_layer = new MultiLayer(); diff --git a/Core/StandardSamples/IsGISAXS08Builder.h b/Core/StandardSamples/IsGISAXS08Builder.h index cf45c17cb2c..1917f22441c 100644 --- a/Core/StandardSamples/IsGISAXS08Builder.h +++ b/Core/StandardSamples/IsGISAXS08Builder.h @@ -5,20 +5,20 @@ //! The IsGISAXS08Builder class to build sample: 2D paracrystal lattice //! (IsGISAXS example #8) -class IsGISAXS08Para1DBuilder : public ISampleBuilder +class IsGISAXS08ABuilder : public ISampleBuilder { public: - IsGISAXS08Para1DBuilder(); + IsGISAXS08ABuilder(); ISample *buildSample() const; }; //! The IsGISAXS08Builder class to build sample: 2D paracrystal lattice //! with isotropic pdfs (IsGISAXS example #8) -class IsGISAXS08Para2DBuilder : public ISampleBuilder +class IsGISAXS08BBuilder : public ISampleBuilder { public: - IsGISAXS08Para2DBuilder(); + IsGISAXS08BBuilder(); ISample *buildSample() const; }; diff --git a/Core/StandardSamples/SampleBuilderFactory.cpp b/Core/StandardSamples/SampleBuilderFactory.cpp index e7004c5d3db..6e820a75e5e 100644 --- a/Core/StandardSamples/SampleBuilderFactory.cpp +++ b/Core/StandardSamples/SampleBuilderFactory.cpp @@ -71,14 +71,14 @@ SampleBuilderFactory::SampleBuilderFactory() "Mixture of different particles a la IsGISAXS morphology file"); registerItem( - "isgisaxs08_2DDL", - IFactoryCreateFunction<IsGISAXS08Para1DBuilder, ISampleBuilder>, - "IsGISAXS08 example, 2DDL lattice"); + "isgisaxs08a", + IFactoryCreateFunction<IsGISAXS08ABuilder, ISampleBuilder>, + "2DDL paracrystal lattice"); registerItem( - "isgisaxs08_2DDL2", - IFactoryCreateFunction<IsGISAXS08Para2DBuilder, ISampleBuilder>, - "IsGISAXS08 example, 2D paracrystal lattice with isotropic pdfs"); + "isgisaxs08b", + IFactoryCreateFunction<IsGISAXS08BBuilder, ISampleBuilder>, + "2D paracrystal lattice with isotropic pdfs"); registerItem( "isgisaxs09", diff --git a/Core/StandardSamples/SimulationRegistry.cpp b/Core/StandardSamples/SimulationRegistry.cpp index 8b7f7b693e1..090f81cea6d 100644 --- a/Core/StandardSamples/SimulationRegistry.cpp +++ b/Core/StandardSamples/SimulationRegistry.cpp @@ -50,12 +50,11 @@ SimulationRegistry::SimulationRegistry() registerItem( - "isgisaxs08_2DDL", StandardSimulations::IsGISAXS082DDL, - "IsGISAXS08 example, 2DDL lattice"); - + "isgisaxs08a", StandardSimulations::IsGISAXS08a, + "2DDL paracrystal lattice"); registerItem( - "isgisaxs08_2DDL2", StandardSimulations::IsGISAXS082DDL2, - "IsGISAXS08 example, 2DDL lattice with isotropic pdfs"); + "isgisaxs08b", StandardSimulations::IsGISAXS08b, + "2DDL paracrystal lattice with isotropic pdfs"); registerItem( "isgisaxs09", StandardSimulations::IsGISAXS09, diff --git a/Core/StandardSamples/StandardSimulations.cpp b/Core/StandardSamples/StandardSimulations.cpp index 8df3771c130..404995d0b31 100644 --- a/Core/StandardSamples/StandardSimulations.cpp +++ b/Core/StandardSamples/StandardSimulations.cpp @@ -241,10 +241,10 @@ Simulation *StandardSimulations::IsGISAXS07() return result; } -Simulation *StandardSimulations::IsGISAXS082DDL() +Simulation *StandardSimulations::IsGISAXS08a() { SampleBuilderFactory factory; - ISampleBuilder *builder = factory.createBuilder("isgisaxs08_2DDL"); + ISampleBuilder *builder = factory.createBuilder("isgisaxs08a"); Simulation *result = new Simulation(); @@ -258,10 +258,10 @@ Simulation *StandardSimulations::IsGISAXS082DDL() return result; } -Simulation *StandardSimulations::IsGISAXS082DDL2() +Simulation *StandardSimulations::IsGISAXS08b() { SampleBuilderFactory factory; - ISampleBuilder *builder = factory.createBuilder("isgisaxs08_2DDL2"); + ISampleBuilder *builder = factory.createBuilder("isgisaxs08b"); Simulation *result = new Simulation(); diff --git a/Core/StandardSamples/StandardSimulations.h b/Core/StandardSamples/StandardSimulations.h index 74dcbc02ca7..07f24506289 100644 --- a/Core/StandardSamples/StandardSimulations.h +++ b/Core/StandardSamples/StandardSimulations.h @@ -20,8 +20,8 @@ Simulation *IsGISAXS06L2(); Simulation *IsGISAXS06L3(); Simulation *IsGISAXS06L4(); Simulation *IsGISAXS07(); -Simulation *IsGISAXS082DDL(); -Simulation *IsGISAXS082DDL2(); +Simulation *IsGISAXS08a(); +Simulation *IsGISAXS08b(); Simulation *IsGISAXS09(); Simulation *IsGISAXS09R(); Simulation *IsGISAXS10(); diff --git a/Tests/FunctionalTests/TestCore/CMakeLists.txt b/Tests/FunctionalTests/TestCore/CMakeLists.txt index dcedbe9f7b3..8318f95b69f 100644 --- a/Tests/FunctionalTests/TestCore/CMakeLists.txt +++ b/Tests/FunctionalTests/TestCore/CMakeLists.txt @@ -17,8 +17,8 @@ set(list_of_tests "IsGISAXS06L3" "IsGISAXS06L4" "IsGISAXS07" - "IsGISAXS082DDL" - "IsGISAXS082DDL2" + "IsGISAXS08a" + "IsGISAXS08b" "IsGISAXS09P" "IsGISAXS09R" "IsGISAXS10" diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp deleted file mode 100644 index fac2f70a457..00000000000 --- a/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp +++ /dev/null @@ -1,180 +0,0 @@ -#include "IsGISAXS08.h" -#include "MultiLayer.h" -#include "ParticleDecoration.h" -#include "ParticleBuilder.h" -#include "InterferenceFunction2DParaCrystal.h" -#include "FormFactorCylinder.h" -#include "Simulation.h" -#include "Units.h" -#include "MaterialManager.h" -#include "OutputDataIOFactory.h" -#include "Utils.h" -#include "MathFunctions.h" - -#include <iostream> -#include <cmath> - -FunctionalTests::IsGISAXS08::IsGISAXS08() - : m_name("IsGISAXS08") - , m_description("2DDL paracrystal") -{ - m_results.resize(kNumberOfTests, 0); -} - - -FunctionalTests::IsGISAXS08::~IsGISAXS08() -{ - for(results_t::iterator it = m_results.begin(); it!=m_results.end(); ++it) delete (*it); -} - - -// IsGISAXS8 functional test: 2DDL lattice -void FunctionalTests::IsGISAXS08::run2DDL() -{ - // building sample - MultiLayer multi_layer; - complex_t n_particle(1.0-6e-4, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", 0.0, 0.0); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", 6e-6, 2e-8); - 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); - - InterferenceFunction2DParaCrystal *p_interference_function = - new InterferenceFunction2DParaCrystal(10.0*Units::nanometer, - 10.0*Units::nanometer, M_PI/2.0, 0.0, 0.0); - p_interference_function->setDomainSizes(20.0*Units::micrometer, - 20.0*Units::micrometer); - FTDistribution2DCauchy pdf1(0.5*Units::nanometer, 2.0*Units::nanometer); - FTDistribution2DCauchy pdf2(0.5*Units::nanometer, 2.0*Units::nanometer); - p_interference_function->setProbabilityDistributions(pdf1, pdf2); - ParticleDecoration particle_decoration( new Particle(particle_material, - new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer))); - particle_decoration.addInterferenceFunction(p_interference_function); - - air_layer.setDecoration(particle_decoration); - - multi_layer.addLayer(air_layer); - multi_layer.addLayer(substrate_layer); - - // building simulation - Simulation simulation; - simulation.setDetectorParameters(100, 0.0*Units::degree, 2.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); - simulation.setSample(multi_layer); - - // running simulation and copying data - simulation.runSimulation(); - m_results[kTest_2DDL] = simulation.getIntensityData(); -} - - -// IsGISAXS8 functional test: 2D paracrystal lattice with isotropic pdfs -void FunctionalTests::IsGISAXS08::run2DDL2() -{ - // building sample - MultiLayer multi_layer; - complex_t n_particle(1.0-6e-4, 2e-8); - const IMaterial *p_air_material = - MaterialManager::getHomogeneousMaterial("Air", 0.0, 0.0); - const IMaterial *p_substrate_material = - MaterialManager::getHomogeneousMaterial("Substrate", 6e-6, 2e-8); - 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); - - InterferenceFunction2DParaCrystal *p_interference_function = - new InterferenceFunction2DParaCrystal(10.0*Units::nanometer, - 10.0*Units::nanometer, M_PI/2.0, 0.0, 0.0); - p_interference_function->setDomainSizes(20.0*Units::micrometer, - 20.0*Units::micrometer); - FTDistribution2DCauchy pdf1(0.5*Units::nanometer, 0.5*Units::nanometer); - FTDistribution2DCauchy pdf2(0.5*Units::nanometer, 0.5*Units::nanometer); - p_interference_function->setProbabilityDistributions(pdf1, pdf2); - ParticleDecoration particle_decoration( new Particle(particle_material, - new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer))); - particle_decoration.addInterferenceFunction(p_interference_function); - - air_layer.setDecoration(particle_decoration); - - multi_layer.addLayer(air_layer); - multi_layer.addLayer(substrate_layer); - - // building simulation - Simulation simulation; - simulation.setDetectorParameters(100, 0.0*Units::degree, 2.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); - - // running simulation and copying data - simulation.setSample(multi_layer); - simulation.runSimulation(); - m_results[kTest_2DDL2] = simulation.getIntensityData(); -} - - -int FunctionalTests::IsGISAXS08::analyseResults(const std::string &path_to_data) -{ - const double threshold(2e-10); - const char *reference_files[kNumberOfTests] = { - "isgisaxs08_reference_2DDL_lattice.ima.gz", - "isgisaxs08_reference_2DDL_lattice2.ima.gz"}; - bool status_ok(true); - - // retrieving reference data and generated examples - for(size_t i_test=0; i_test<kNumberOfTests; ++i_test) { - OutputData<double> *reference = OutputDataIOFactory::readIntensityData( - path_to_data + reference_files[i_test]); - OutputData<double> *result = m_results[i_test]; - - // calculating average relative difference - *result -= *reference; - *result /= *reference; - delete reference; - - double diff(0); - for(OutputData<double>::const_iterator it=result->begin(); - it!=result->end(); ++it) { - diff+= std::fabs(*it); - } - diff /= result->getAllocatedSize(); - if( diff > threshold || MathFunctions::isnan(diff)) 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]); -} - -int main(int argc, char **argv) -{ - FunctionalTests::IsGISAXS08 test; - test.run2DDL(); - test.run2DDL2(); - return test.analyseResults(GetPathToData(argc, argv)); -} -#endif - - - diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.h b/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.h deleted file mode 100644 index 0a85dc3b52c..00000000000 --- a/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef FUNCTIONALTESTS_ISGISAXS08_H -#define FUNCTIONALTESTS_ISGISAXS08_H - - -#include <string> -#include "OutputData.h" - -class MultiLayer; -class Simulation; - -namespace FunctionalTests { - -class IsGISAXS08 -{ - public: - typedef std::vector<OutputData<double> *> results_t; - enum keys_results { kTest_2DDL, kTest_2DDL2, kNumberOfTests }; - - IsGISAXS08(); - ~IsGISAXS08(); - - void run2DDL(), run2DDL2(); - int analyseResults(const std::string &path_to_data = std::string()); - - const OutputData<double> *getOutputData(size_t ntest=0) { return m_results.at(ntest); } - - private: - std::string m_name; - std::string m_description; - results_t m_results; -}; - - -} - - - -#endif diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.pro b/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.pro deleted file mode 100644 index f74c0e41ca8..00000000000 --- a/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.pro +++ /dev/null @@ -1,15 +0,0 @@ -TEMPLATE = app -CONFIG += console -CONFIG -= qt app_bundle -QT -= core gui - -include($$PWD/../../../../shared.pri) -DEFINES += STANDALONE - -INCLUDEPATH *= $$EIGEN_INCLUDE_DIR -INCLUDEPATH *= $$BOOST_INCLUDE_DIR -INCLUDEPATH += $$BornAgainCore_INCLUDE_DIR -LIBS += $$BOOST_LIBRARY $$BornAgainCore_LIBRARY - -SOURCES += IsGISAXS08.cpp -HEADERS += IsGISAXS08.h diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS082DDL/IsGISAXS082DDL.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS082DDL/IsGISAXS082DDL.cpp deleted file mode 100644 index 83ae4af2831..00000000000 --- a/Tests/FunctionalTests/TestCore/IsGISAXS082DDL/IsGISAXS082DDL.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "IsGISAXS082DDL.h" -#include "OutputDataIOFactory.h" -#include "SampleBuilderFactory.h" -#include "Simulation.h" -#include "Units.h" -#include "Utils.h" -#include "MathFunctions.h" -#include "SimulationRegistry.h" -#include "OutputDataFunctions.h" -#include <iostream> -#include <cmath> - -FunctionalTests::IsGISAXS082DDL::IsGISAXS082DDL() - : m_name("IsGISAXS082DDL") - , m_description("2D Paracrystal lattice") - , m_result(0) - , m_reference(0) -{ } - - -void FunctionalTests::IsGISAXS082DDL::run(const std::string &path_to_data) -{ - - SimulationRegistry sim_registry; - Simulation *simulation = sim_registry.createSimulation("isgisaxs08_2DDL"); - - // loading reference data - std::string filename = path_to_data + "isgisaxs08_reference_2DDL_lattice.ima.gz"; - m_reference = OutputDataIOFactory::readIntensityData(filename); - - simulation->runSimulation(); - - m_result = simulation->getIntensityData(); - delete simulation; -} - - -int FunctionalTests::IsGISAXS082DDL::analyseResults() -{ - const double threshold(2e-10); - - // Calculating average relative difference. - double diff = OutputDataFunctions::GetDifference(*m_result,*m_reference); - - // Assess result. - 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::IsGISAXS082DDL test; - test.run(GetPathToData(argc, argv)); - return test.analyseResults(); -} -#endif - diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS082DDL/IsGISAXS082DDL.h b/Tests/FunctionalTests/TestCore/IsGISAXS082DDL/IsGISAXS082DDL.h deleted file mode 100644 index 08bf175357f..00000000000 --- a/Tests/FunctionalTests/TestCore/IsGISAXS082DDL/IsGISAXS082DDL.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef FUNCTIONALTESTS_ISGISAXS082DDL_H -#define FUNCTIONALTESTS_ISGISAXS082DDL_H - -#include "ISampleBuilder.h" -#include <string> -#include "OutputData.h" - -namespace FunctionalTests { - -class IsGISAXS082DDL -{ - public: - IsGISAXS082DDL(); - ~IsGISAXS082DDL() { 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/IsGISAXS082DDL2/IsGISAXS082DDL2.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS082DDL2/IsGISAXS082DDL2.cpp deleted file mode 100644 index f9128facbb7..00000000000 --- a/Tests/FunctionalTests/TestCore/IsGISAXS082DDL2/IsGISAXS082DDL2.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "IsGISAXS082DDL2.h" -#include "OutputDataIOFactory.h" -#include "SampleBuilderFactory.h" -#include "Simulation.h" -#include "Units.h" -#include "Utils.h" -#include "MathFunctions.h" -#include "SimulationRegistry.h" -#include "OutputDataFunctions.h" -#include <iostream> -#include <cmath> - -FunctionalTests::IsGISAXS082DDL2::IsGISAXS082DDL2() - : m_name("IsGISAXS042DDL") - , m_description("2D Paracrystal lattice with isotropic pdfs") - , m_result(0) - , m_reference(0) -{ } - - -void FunctionalTests::IsGISAXS082DDL2::run(const std::string &path_to_data) -{ - - SimulationRegistry sim_registry; - Simulation *simulation = sim_registry.createSimulation("isgisaxs08_2DDL2"); - - // loading reference data - std::string filename = path_to_data + "isgisaxs08_reference_2DDL_lattice2.ima.gz"; - m_reference = OutputDataIOFactory::readIntensityData(filename); - - simulation->runSimulation(); - - m_result = simulation->getIntensityData(); - delete simulation; -} - - -int FunctionalTests::IsGISAXS082DDL2::analyseResults() -{ - const double threshold(2e-10); - - // Calculating average relative difference. - double diff = OutputDataFunctions::GetDifference(*m_result,*m_reference); - - // Assess result. - 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::IsGISAXS082DDL2 test; - test.run(GetPathToData(argc, argv)); - return test.analyseResults(); -} -#endif - diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS082DDL2/IsGISAXS082DDL2.h b/Tests/FunctionalTests/TestCore/IsGISAXS082DDL2/IsGISAXS082DDL2.h deleted file mode 100644 index 60f5aa73607..00000000000 --- a/Tests/FunctionalTests/TestCore/IsGISAXS082DDL2/IsGISAXS082DDL2.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef FUNCTIONALTESTS_ISGISAXS082DDL2_H -#define FUNCTIONALTESTS_ISGISAXS082DDL2_H - -#include "ISampleBuilder.h" -#include <string> -#include "OutputData.h" - -namespace FunctionalTests { - -class IsGISAXS082DDL2 -{ - public: - IsGISAXS082DDL2(); - ~IsGISAXS082DDL2() { 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/IsGISAXS08a/IsGISAXS082DDL.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS08a/IsGISAXS082DDL.cpp new file mode 100644 index 00000000000..ddfad81922c --- /dev/null +++ b/Tests/FunctionalTests/TestCore/IsGISAXS08a/IsGISAXS082DDL.cpp @@ -0,0 +1,8 @@ +#include "FunctionalTestRegistry.h" +#include "FileSystem.h" + +int main(int argc, char **argv) +{ + if(argc == 2) Utils::FileSystem::SetReferenceDataDir(argv[1]); + return FUNCTIONAL_TEST("isgisaxs08a"); +} diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS08b/IsGISAXS082DDL2.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS08b/IsGISAXS082DDL2.cpp new file mode 100644 index 00000000000..0ebbaec0d9e --- /dev/null +++ b/Tests/FunctionalTests/TestCore/IsGISAXS08b/IsGISAXS082DDL2.cpp @@ -0,0 +1,9 @@ +#include "FunctionalTestRegistry.h" +#include "FileSystem.h" + +int main(int argc, char **argv) +{ + if(argc == 2) Utils::FileSystem::SetReferenceDataDir(argv[1]); + return FUNCTIONAL_TEST("isgisaxs08b"); +} + -- GitLab