Skip to content
Snippets Groups Projects
Commit 7d765dc9 authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

ParticleCompositionBuilder to have new functional test

parent 00985326
No related branches found
No related tags found
No related merge requests found
// ************************************************************************** //
//
// 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;
}
// ************************************************************************** //
//
// 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
......@@ -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");
}
......
......@@ -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");
}
......
......@@ -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;
}
......@@ -59,6 +59,7 @@ Simulation *gui_MultipleLayouts();
Simulation *BeamDivergence();
Simulation *DetectorResolution();
Simulation *ParticleDistribution();
Simulation *gui_ParticleComposition();
}
......
......@@ -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";
......
......@@ -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>
......
......@@ -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>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment