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

Draft of multiple-sample support in MultiLayerBuilder

parent 3a7d17cf
No related branches found
No related tags found
No related merge requests found
......@@ -44,6 +44,9 @@ public:
// Without duplication below PythonBindings doesn't work for shared_ptr<IMultiLayerBuilder>
virtual void onChange() {}
virtual MultiLayer* createSample(size_t index=0) { (void)index; return buildSample(); }
virtual size_t size() { return 1;}
};
#endif // IMULTILAYERBUILDER_H
......@@ -24,6 +24,7 @@
#include "ParticleLayout.h"
#include "RealParameter.h"
#include "Units.h"
#include "SubtestRegistry.h"
MultiLayer* LayersWithAbsorptionBuilder::buildSample() const
{
......@@ -60,3 +61,30 @@ MultiLayer* LayersWithAbsorptionBuilder::buildSample() const
multi_layer->addLayer(substrate);
return multi_layer;
}
MultiLayer* LayersWithAbsorptionBuilder::createSample(size_t index)
{
if(index >= size())
throw std::runtime_error("ParticleInTheAirBuilder::createSample() -> Error. "
"Sample index is out of range.");
auto ff_names = ff_registry().keys();
m_subtest_item = ff_registry().getItem(ff_names[index]);
setName(ff_names[index]);
return buildSample();
}
size_t LayersWithAbsorptionBuilder::size()
{
static size_t result = ff_registry().keys().size();
return result;
}
SubtestRegistryFormFactor& LayersWithAbsorptionBuilder::ff_registry()
{
static SubtestRegistryFormFactor result = SubtestRegistryFormFactor();
return result;
}
......@@ -17,6 +17,7 @@
#define LAYERSWITHABSORPTIONBUILDER_H
#include "IMultiLayerBuilder.h"
class SubtestRegistryFormFactor;
//! The LayersWithAbsorptionBuilder class generates a multilayer with 3 layers with
//! absorption (refractive index has imaginary part).
......@@ -31,6 +32,12 @@ public:
LayersWithAbsorptionBuilder() {}
virtual ~LayersWithAbsorptionBuilder() {}
virtual MultiLayer* buildSample() const;
MultiLayer* createSample(size_t index=0);
size_t size();
private:
SubtestRegistryFormFactor& ff_registry();
};
#endif // LAYERSWITHABSORPTIONBUILDER_H
......@@ -24,6 +24,7 @@
#include "ParticleLayout.h"
#include "RealParameter.h"
#include "Units.h"
#include "SubtestRegistry.h"
RadialParaCrystalBuilder::RadialParaCrystalBuilder()
: m_corr_peak_distance(20.0*Units::nanometer)
......@@ -129,6 +130,32 @@ MultiLayer* Basic2DParaCrystalBuilder::buildSample() const
return multi_layer;
}
MultiLayer* Basic2DParaCrystalBuilder::createSample(size_t index)
{
if(index >= size())
throw std::runtime_error("Basic2DParaCrystalBuilder::createSample() -> Error. "
"Sample index is out of range.");
auto names = pdf_registry().keys();
m_subtest_item = pdf_registry().getItem(names[index]);
setName(names[index]);
return buildSample();
}
size_t Basic2DParaCrystalBuilder::size()
{
static size_t result = pdf_registry().keys().size();
return result;
}
SubtestRegistryFTDistribution2D& Basic2DParaCrystalBuilder::pdf_registry()
{
static SubtestRegistryFTDistribution2D result = SubtestRegistryFTDistribution2D();
return result;
}
// -----------------------------------------------------------------------------
......
......@@ -21,6 +21,7 @@
class IFTDistribution2D;
class ISample;
class SubtestRegistryFTDistribution2D;
//! @ingroup standard_samples
//! Builds sample: cylinders with 1DDL structure factor (IsGISAXS example #4).
......@@ -52,7 +53,12 @@ public:
Basic2DParaCrystalBuilder();
virtual ~Basic2DParaCrystalBuilder();
virtual MultiLayer* buildSample() const;
MultiLayer* createSample(size_t index=0);
size_t size();
private:
SubtestRegistryFTDistribution2D& pdf_registry();
std::unique_ptr<IFTDistribution2D> m_pdf1;
std::unique_ptr<IFTDistribution2D> m_pdf2;
};
......
......@@ -21,6 +21,7 @@
#include "Particle.h"
#include "ParticleLayout.h"
#include "RealParameter.h"
#include "SubtestRegistry.h"
MultiLayer* ParticleInTheAirBuilder::buildSample() const
{
......@@ -43,3 +44,29 @@ MultiLayer* ParticleInTheAirBuilder::buildSample() const
return result;
}
MultiLayer* ParticleInTheAirBuilder::createSample(size_t index)
{
if(index >= size())
throw std::runtime_error("ParticleInTheAirBuilder::createSample() -> Error. "
"Sample index is out of range.");
auto ff_names = ff_registry().keys();
m_subtest_item = ff_registry().getItem(ff_names[index]);
setName(ff_names[index]);
return buildSample();
}
size_t ParticleInTheAirBuilder::size()
{
static size_t result = ff_registry().keys().size();
return result;
}
SubtestRegistryFormFactor& ParticleInTheAirBuilder::ff_registry()
{
static SubtestRegistryFormFactor result = SubtestRegistryFormFactor();
return result;
}
......@@ -18,6 +18,8 @@
#include "IMultiLayerBuilder.h"
class SubtestRegistryFormFactor;
//! The ParticleInTheAirBuilder class generates a multilayer with single air layer
//! populated with particles of certain types.
//! Requires IComponentService which generates form factors, used for bulk form factors testing.
......@@ -29,6 +31,12 @@ public:
ParticleInTheAirBuilder() {}
virtual ~ParticleInTheAirBuilder() {}
virtual MultiLayer* buildSample() const;
MultiLayer* createSample(size_t index=0);
size_t size();
private:
SubtestRegistryFormFactor& ff_registry();
};
#endif // PARTICLEINTHEAIRBUILDER_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment