diff --git a/Core/StandardSamples/ParticleCompositionBuilder.cpp b/Core/StandardSamples/ParticleCompositionBuilder.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8c26c2417580d1ea4f19e0fe63f747d4825e349a --- /dev/null +++ b/Core/StandardSamples/ParticleCompositionBuilder.cpp @@ -0,0 +1,57 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file StandardSamples/ParticleCompositionBuilder.cpp +//! @brief Implements class ParticleCompositionBuilder. +//! +//! @homepage http://www.bornagainproject.org +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2015 +//! @authors Scientific Computing Group at MLZ Garching +//! @authors C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke +// +// ************************************************************************** // + +#include "ParticleCompositionBuilder.h" +#include "FormFactorPyramid.h" +#include "InterferenceFunctionNone.h" +#include "Materials.h" +#include "MultiLayer.h" +#include "ParticleLayout.h" +#include "Units.h" + + +// ---------------------------------------------------------------------------- +// Pyramids on top of substrate +// ---------------------------------------------------------------------------- +ParticleCompositionBuilder::ParticleCompositionBuilder() +{ +} + + +ISample *ParticleCompositionBuilder::buildSample() const +{ + MultiLayer *multi_layer = new MultiLayer(); + + HomogeneousMaterial air_material("Air", 0.0, 0.0); + HomogeneousMaterial substrate_material("Substrate", 6e-6, 2e-8); + HomogeneousMaterial particle_material("Particle", 6e-4, 2e-8); + + Layer air_layer(air_material); + Layer substrate_layer(substrate_material); + + FormFactorPyramid ff_pyramid(1.0, 1.0, 0.12); + + Particle particle(particle_material, ff_pyramid); + ParticleLayout particle_layout(particle); + + particle_layout.addInterferenceFunction(new InterferenceFunctionNone()); + + air_layer.addLayout(particle_layout); + + multi_layer->addLayer(air_layer); + multi_layer->addLayer(substrate_layer); + + return multi_layer; +} diff --git a/Core/StandardSamples/ParticleCompositionBuilder.h b/Core/StandardSamples/ParticleCompositionBuilder.h new file mode 100644 index 0000000000000000000000000000000000000000..ea2a37989108c13269c634060573895998bfdc7a --- /dev/null +++ b/Core/StandardSamples/ParticleCompositionBuilder.h @@ -0,0 +1,33 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file StandardSamples/ParticleCompositionBuilder.h +//! @brief Defines class ParticleCompositionBuilder. +//! +//! @homepage http://www.bornagainproject.org +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2015 +//! @authors Scientific Computing Group at MLZ Garching +//! @authors C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke +// +// ************************************************************************** // + +#ifndef PARTICLECOMPOSITIONBUILDER_H +#define PARTICLECOMPOSITIONBUILDER_H + +#include "ISampleBuilder.h" + +//! @class ParticleCompositionBuilder +//! @ingroup standard_samples +//! @brief Builds sample: two layers of spheres at hex lattice + +class BA_CORE_API_ ParticleCompositionBuilder : public ISampleBuilder +{ +public: + ParticleCompositionBuilder(); + ISample *buildSample() const; + +}; + +#endif // PARTICLECOMPOSITIONBUILDER_H diff --git a/Core/StandardSamples/SampleBuilderFactory.cpp b/Core/StandardSamples/SampleBuilderFactory.cpp index f72bc2c21bcbb52df97777bcbe8c13bf7474a752..0a9d317ff6b6c98af6803f079e574bacbfe299f4 100644 --- a/Core/StandardSamples/SampleBuilderFactory.cpp +++ b/Core/StandardSamples/SampleBuilderFactory.cpp @@ -29,6 +29,7 @@ #include "MultipleLayoutBuilder.h" #include "PolarizedDWBAMagCylindersBuilder.h" #include "LayerRoughnessBuilder.h" +#include "ParticleCompositionBuilder.h" #include "Ripple2Builder.h" #include "Ripple1Builder.h" @@ -157,6 +158,11 @@ SampleBuilderFactory::SampleBuilderFactory() IFactoryCreateFunction<Ripple1Builder, ISampleBuilder>, "cosine ripple within the 1D-paracrystal model"); + registerItem( + "ParticleComposition", + IFactoryCreateFunction<ParticleCompositionBuilder, ISampleBuilder>, + "Composition of particles to represent two layers of spheres in hex lattice"); + } diff --git a/Core/StandardSamples/SimulationRegistry.cpp b/Core/StandardSamples/SimulationRegistry.cpp index 8f13334bfdde2e469374856c969363f36d95fad5..69d805d828d0aac255ce1da4e382625f43697bbc 100644 --- a/Core/StandardSamples/SimulationRegistry.cpp +++ b/Core/StandardSamples/SimulationRegistry.cpp @@ -154,6 +154,11 @@ SimulationRegistry::SimulationRegistry() registerItem( "part_distribution", StandardSimulations::ParticleDistribution, "Cylinders with size distribution"); + + registerItem( + "gui_ParticleComposition", StandardSimulations::gui_ParticleComposition, + "GUI: Composition of particles to represent two layers of spheres in hex lattice"); + } diff --git a/Core/StandardSamples/StandardSimulations.cpp b/Core/StandardSamples/StandardSimulations.cpp index 66dd0fdf49c8307d8a439610eeabdbb0b8d2d42b..3baad3e3653f58f92cec17eb4ac7110131abc6e9 100644 --- a/Core/StandardSamples/StandardSimulations.cpp +++ b/Core/StandardSamples/StandardSimulations.cpp @@ -658,7 +658,6 @@ Simulation *StandardSimulations::DetectorResolution() return result; } - Simulation *StandardSimulations::ParticleDistribution() { SampleBuilderFactory factory; @@ -676,3 +675,22 @@ Simulation *StandardSimulations::ParticleDistribution() return result; } + +Simulation *StandardSimulations::gui_ParticleComposition() +{ + SampleBuilderFactory factory; + SampleBuilder_t builder = factory.createBuilder("ParticleComposition"); + + Simulation *result = new Simulation(); + + result->setDetectorParameters(100, -1.0*Units::degree, 1.0*Units::degree, + 100, 0.0*Units::degree, 1.0*Units::degree); + result->setBeamParameters(1.0*Units::angstrom, 0.2*Units::degree, + 0.0*Units::degree); + + + result->setSampleBuilder( builder ); + + return result; +} + diff --git a/Core/StandardSamples/StandardSimulations.h b/Core/StandardSamples/StandardSimulations.h index 2be7ed5a7395daa6c3e982ff4565a8df6d7b6ef7..d0fe4219ddee1b0fede48e12a7e9b8b2afdd8dad 100644 --- a/Core/StandardSamples/StandardSimulations.h +++ b/Core/StandardSamples/StandardSimulations.h @@ -59,6 +59,7 @@ Simulation *gui_MultipleLayouts(); Simulation *BeamDivergence(); Simulation *DetectorResolution(); Simulation *ParticleDistribution(); +Simulation *gui_ParticleComposition(); } diff --git a/GUI/coregui/Models/GUIExamplesFactory.cpp b/GUI/coregui/Models/GUIExamplesFactory.cpp index f43068d0907d69c9d323157d0635107e704cf6c9..cf6e91773a0455743413484cff3dec7c5139fd0c 100644 --- a/GUI/coregui/Models/GUIExamplesFactory.cpp +++ b/GUI/coregui/Models/GUIExamplesFactory.cpp @@ -36,6 +36,7 @@ QMap<QString, QString > init_NameToRegistry() result["example06"] = "gui_Interference2DSquareLattice"; result["example07"] = "gui_RotatedPyramids"; result["example08"] = "part_distribution"; + result["example09"] = "gui_ParticleComposition"; // temporary for testing // result["example08"] = "beam_divergence"; // result["example08"] = "detector_resolution"; diff --git a/GUI/coregui/Views/widgetbox/widgetbox.xml b/GUI/coregui/Views/widgetbox/widgetbox.xml index 8406e7e5c7cc5f1c43c17d419cbf3f2cc8c95dd9..fe50416416fac5d97863b3a66e28765fd464ca17 100644 --- a/GUI/coregui/Views/widgetbox/widgetbox.xml +++ b/GUI/coregui/Views/widgetbox/widgetbox.xml @@ -324,6 +324,14 @@ </widget> </categoryentry> + <categoryentry name="Hexagonal latice with basis" icon="images/sample_layers2.png"> + <widget class="example09"> + <property name="objectName"> + <string notr="true">somestring</string> + </property> + </widget> + </categoryentry> + </category> diff --git a/GUI/coregui/mainwindow/tooltips.xml b/GUI/coregui/mainwindow/tooltips.xml index af1a236bf8a678aff274c7bbeffc39ceee4708de..b8f6c2365f557dc59e3da593169ac4d7d85c0075 100644 --- a/GUI/coregui/mainwindow/tooltips.xml +++ b/GUI/coregui/mainwindow/tooltips.xml @@ -571,6 +571,14 @@ </property> </category> + <category name="example09"> + <property name="Title"> + <tooltip>Hexagonal lattice with basis to represent two layers of spheres</tooltip> + </property> + <property name="Description"> + <tooltip>Some lengthy description here if necessary</tooltip> + </property> + </category> </context>