BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SampleBuilderFactory.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Sample/StandardSamples/SampleBuilderFactory.cpp
6 //! @brief Implement class SampleBuilderFactory.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************** //
14 
48 
50 {
51  registerItem("CylindersAndPrismsBuilder", create_new<CylindersAndPrismsBuilder>);
52 
53  registerItem("TwoTypesCylindersDistributionBuilder",
54  create_new<TwoTypesCylindersDistributionBuilder>);
55 
56  registerItem("CylindersInBABuilder", create_new<CylindersInBABuilder>);
57  registerItem("CylindersInDWBABuilder", create_new<CylindersInDWBABuilder>);
58  registerItem("LargeCylindersInDWBABuilder", create_new<LargeCylindersInDWBABuilder>);
59 
60  registerItem("CylindersWithSizeDistributionBuilder",
61  create_new<CylindersWithSizeDistributionBuilder>);
62 
63  registerItem("RadialParaCrystalBuilder", create_new<RadialParaCrystalBuilder>);
64 
65  registerItem("HardDiskBuilder", create_new<HardDiskBuilder>);
66 
67  registerItem("Basic2DParaCrystalBuilder", create_new<Basic2DParaCrystalBuilder>);
68 
69  registerItem("HexParaCrystalBuilder", create_new<HexParaCrystalBuilder>);
70 
71  registerItem("Lattice1DBuilder", create_new<Lattice1DBuilder>);
72 
73  registerItem("RectParaCrystalBuilder", create_new<RectParaCrystalBuilder>);
74 
75  registerItem("Basic2DLatticeBuilder", create_new<Basic2DLatticeBuilder>);
76 
77  registerItem("SquareLatticeBuilder", create_new<SquareLatticeBuilder>);
78 
79  registerItem("CenteredSquareLatticeBuilder", create_new<CenteredSquareLatticeBuilder>);
80 
81  registerItem("RotatedSquareLatticeBuilder", create_new<RotatedSquareLatticeBuilder>);
82 
83  registerItem("FiniteSquareLatticeBuilder", create_new<FiniteSquareLatticeBuilder>);
84 
85  registerItem("SuperLatticeBuilder", create_new<SuperLatticeBuilder>);
86 
87  registerItem("CustomMorphologyBuilder", create_new<CustomMorphologyBuilder>);
88 
89  registerItem("RotatedPyramidsBuilder", create_new<RotatedPyramidsBuilder>);
90 
91  registerItem("CoreShellParticleBuilder", create_new<CoreShellParticleBuilder>);
92 
93  registerItem("CoreShellBoxRotateZandYBuilder", create_new<CoreShellBoxRotateZandYBuilder>);
94 
95  registerItem("SizeDistributionDAModelBuilder", create_new<SizeDistributionDAModelBuilder>);
96 
97  registerItem("SizeDistributionLMAModelBuilder", create_new<SizeDistributionLMAModelBuilder>);
98 
99  registerItem("SizeDistributionSSCAModelBuilder", create_new<SizeDistributionSSCAModelBuilder>);
100 
101  registerItem("CylindersInSSCABuilder", create_new<CylindersInSSCABuilder>);
102 
103  registerItem("MesoCrystalBuilder", create_new<MesoCrystalBuilder>);
104 
105  registerItem("MagneticParticleZeroFieldBuilder", create_new<MagneticParticleZeroFieldBuilder>);
106 
107  registerItem("MagneticCylindersBuilder", create_new<MagneticCylindersBuilder>);
108 
109  registerItem("MagneticSubstrateZeroFieldBuilder",
110  create_new<MagneticSubstrateZeroFieldBuilder>);
111 
112  registerItem("SimpleMagneticLayerBuilder", create_new<SimpleMagneticLayerBuilder>);
113 
114  registerItem("SimpleMagneticRotationBuilder", create_new<SimpleMagneticRotationBuilder>);
115 
116  registerItem("MagneticLayerBuilder", create_new<MagneticLayerBuilder>);
117 
118  registerItem("FeNiBilayerBuilder", create_new<FeNiBilayerBuilder>);
119 
120  registerItem("FeNiBilayerTanhBuilder", create_new<FeNiBilayerTanhBuilder>);
121 
122  registerItem("FeNiBilayerNCBuilder", create_new<FeNiBilayerNCBuilder>);
123 
124  registerItem("FeNiBilayerSpinFlipBuilder", create_new<FeNiBilayerSpinFlipBuilder>);
125 
126  registerItem("FeNiBilayerSpinFlipTanhBuilder", create_new<FeNiBilayerSpinFlipTanhBuilder>);
127 
128  registerItem("FeNiBilayerSpinFlipNCBuilder", create_new<FeNiBilayerSpinFlipNCBuilder>);
129 
130  registerItem("MagneticRotationBuilder", create_new<MagneticRotationBuilder>);
131 
132  registerItem("MagneticSpheresBuilder", create_new<MagneticSpheresBuilder>);
133 
134  registerItem("MultiLayerWithRoughnessBuilder", create_new<MultiLayerWithRoughnessBuilder>);
135 
136  registerItem("MultiLayerWithNCRoughnessBuilder", create_new<MultiLayerWithNCRoughnessBuilder>);
137 
138  registerItem("TwoLayerRoughnessBuilder", create_new<TwoLayerRoughnessBuilder>);
139 
140  registerItem("MultipleLayoutBuilder", create_new<MultipleLayoutBuilder>);
141 
142  registerItem("TriangularRippleBuilder", create_new<TriangularRippleBuilder>);
143 
144  registerItem("AsymRippleBuilder", create_new<AsymRippleBuilder>);
145 
146  registerItem("CosineRippleBuilder", create_new<CosineRippleBuilder>);
147 
148  registerItem("ParticleCompositionBuilder", create_new<ParticleCompositionBuilder>);
149 
150  registerItem("BoxCompositionRotateXBuilder", create_new<BoxCompositionRotateXBuilder>);
151 
152  registerItem("BoxCompositionRotateYBuilder", create_new<BoxCompositionRotateYBuilder>);
153 
154  registerItem("BoxCompositionRotateZBuilder", create_new<BoxCompositionRotateZBuilder>);
155 
156  registerItem("BoxCompositionRotateZandYBuilder", create_new<BoxCompositionRotateZandYBuilder>);
157 
158  registerItem("BoxStackCompositionBuilder", create_new<BoxStackCompositionBuilder>);
159 
160  registerItem("ParticleInVacuumBuilder", create_new<ParticleInVacuumBuilder>);
161 
162  registerItem("TransformBoxBuilder", create_new<TransformBoxBuilder>);
163 
164  registerItem("LayersWithAbsorptionBuilder", create_new<LayersWithAbsorptionBuilder>);
165 
166  registerItem("LayersWithAbsorptionBySLDBuilder", create_new<LayersWithAbsorptionBySLDBuilder>);
167 
168  registerItem("BoxesSquareLatticeBuilder", create_new<BoxesSquareLatticeBuilder>);
169 
170  registerItem("RotatedCylindersBuilder", create_new<RotatedCylindersBuilder>);
171 
172  registerItem("SlicedCompositionBuilder", create_new<SlicedCompositionBuilder>);
173 
174  registerItem("RotatedPyramidsDistributionBuilder",
175  create_new<RotatedPyramidsDistributionBuilder>);
176 
177  registerItem("SpheresWithLimitsDistributionBuilder",
178  create_new<SpheresWithLimitsDistributionBuilder>);
179 
180  registerItem("ConesWithLimitsDistributionBuilder",
181  create_new<ConesWithLimitsDistributionBuilder>);
182 
183  registerItem("LinkedBoxDistributionBuilder", create_new<LinkedBoxDistributionBuilder>);
184 
185  registerItem("HomogeneousMultilayerBuilder", create_new<HomogeneousMultilayerBuilder>);
186 
187  registerItem("PlainMultiLayerBySLDBuilder", create_new<PlainMultiLayerBySLDBuilder>);
188 
189  registerItem("ResonatorBuilder", create_new<ResonatorBuilder>);
190 
191  registerItem("SlicedCylindersBuilder", create_new<SlicedCylindersBuilder>);
192 
193  registerItem("SLDSlicedCylindersBuilder", create_new<SLDSlicedCylindersBuilder>);
194 
195  registerItem("AveragedSlicedCylindersBuilder", create_new<AveragedSlicedCylindersBuilder>);
196 
197  registerItem("ThickAbsorptiveSampleBuilder", create_new<ThickAbsorptiveSampleBuilder>);
198 }
199 
200 //! Retrieves a SampleBuilder from the registry, does the build, and returns the result.
201 
203 {
204  return createItemPtr(name)->buildSample();
205 }
Defines classes of BoxCompositionBuilder family.
Defines class BoxesSquareLatticeBuilder.
Defines class CoreShellParticleBuilder.
Defines class CustomMorphologyBuilder.
Defines class CylindersAndPrismsBuilder.
Defines classes of CylindersBuilder family.
Defines various sample builder classes to test polarized specular computations.
Defines class HomogeneousMultilayerBuilder.
Defines class Lattice1DBuilder.
Defines class LayersWithAbsorptionBuilder.
Defines class LayersWithAbsorptionBySLDBuilder.
Defines class to build samples with magnetic layers.
Defines class to build magnetic samples.
Defines class MesoCrystalBuilder.
Defines class MultiLayerWithNCRoughnessBuilder.
Defines class MultipleLayoutBuilder.
Defines classes of ParaCrystalBuilder family.
Defines class ParticleCompositionBuilder.
Defines classes of with different types of particle distributions.
Defines class ParticleInVacuumBuilder.
Defines classes of PercusYevickBuilder family.
Declares the class PlainMultiLayerBySLDBuilder.
Defines ResonatorBuilder class.
Defines classes to build various ripples.
Defines class RotatedPyramidsBuilder.
Defines class SampleBuilderFactory.
Defines various sample builder classes to test DA, LMA, SSCA approximations.
Defines classes to build various particles crossing interfaces.
Defines classes for testing slicing machinery.
Defines class to build thick highly-absorptive sample with roughness.
Defines classes to build samples with different transformations.
Defines class IsGISAXS06Builder.
Defines class TwoLayerRoughnessBuilder.
bool registerItem(const std::string &item_key, CreateItemCallback CreateFn)
Registers object's creation function.
Definition: IFactory.h:53
std::unique_ptr< ISampleBuilder > createItemPtr(const std::string &item_key) const
Definition: IFactory.h:46
Our sample model: a stack of layers one below the other.
Definition: MultiLayer.h:42
MultiLayer * createSampleByName(const std::string &name)
Retrieves a SampleBuilder from the registry, does the build, and returns the result.