BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ItemCatalog.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Models/ItemCatalog.cpp
6 //! @brief Implements class ItemCatalog
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 
64 
66 {
67  add("MultiLayer", create_new<MultiLayerItem>);
68  add("Layer", create_new<LayerItem>);
69  add("ParticleLayout", create_new<ParticleLayoutItem>);
70  add("Particle", create_new<ParticleItem>);
71  add("Rotation", create_new<TransformationItem>);
72  add("ParticleCoreShell", create_new<ParticleCoreShellItem>);
73  add("ParticleComposition", create_new<ParticleCompositionItem>);
74  add("ParticleDistribution", create_new<ParticleDistributionItem>);
75  add("MesoCrystal", create_new<MesoCrystalItem>);
76  add("Interference1DLattice", create_new<InterferenceFunction1DLatticeItem>);
77  add("Interference2DLattice", create_new<InterferenceFunction2DLatticeItem>);
78  add("Interference2DParaCrystal", create_new<InterferenceFunction2DParaCrystalItem>);
79  add("InterferenceFinite2DLattice", create_new<InterferenceFunctionFinite2DLatticeItem>);
80  add("InterferenceHardDisk", create_new<InterferenceFunctionHardDiskItem>);
81  add("InterferenceRadialParaCrystal", create_new<InterferenceFunctionRadialParaCrystalItem>);
82  add("GISASInstrument", create_new<GISASInstrumentItem>);
83  add("OffSpecularInstrument", create_new<OffSpecularInstrumentItem>);
84  add("SpecularInstrument", create_new<SpecularInstrumentItem>);
85  add("GISASBeam", create_new<GISASBeamItem>);
86  add("SpecularBeam", create_new<SpecularBeamItem>);
87  add("NoBackground", create_new<BackgroundNoneItem>);
88  add("ConstantBackground", create_new<ConstantBackgroundItem>);
89  add("PoissonNoiseBackground", create_new<PoissonNoiseBackgroundItem>);
90  add("NoFootprint", create_new<FootprintNoneItem>);
91  add("GaussianFootrpint", create_new<FootprintGaussianItem>);
92  add("SquareFootprint", create_new<FootprintSquareItem>);
93  add("Vector", create_new<VectorItem>);
94  add("Property", create_new<PropertyItem>);
95 
96  add("AnisoPyramid", create_new<AnisoPyramidItem>);
97  add("BarGauss", create_new<BarGaussItem>);
98  add("BarLorentz", create_new<BarLorentzItem>);
99  add("Box", create_new<BoxItem>);
100  add("Cone", create_new<ConeItem>);
101  add("Cone6", create_new<Cone6Item>);
102  add("Cuboctahedron", create_new<CuboctahedronItem>);
103  add("Dodecahedron", create_new<DodecahedronItem>);
104  add("Dot", create_new<DotItem>);
105  add("Cylinder", create_new<CylinderItem>);
106  add("EllipsoidalCylinder", create_new<EllipsoidalCylinderItem>);
107  add("FullSphere", create_new<FullSphereItem>);
108  add("FullSpheroid", create_new<FullSpheroidItem>);
109  add("HemiEllipsoid", create_new<HemiEllipsoidItem>);
110  add("Icosahedron", create_new<IcosahedronItem>);
111  add("Prism3", create_new<Prism3Item>);
112  add("Prism6", create_new<Prism6Item>);
113  add("Pyramid", create_new<PyramidItem>);
114  add("CosineRippleBox", create_new<CosineRippleBoxItem>);
115  add("CosineRippleGauss", create_new<CosineRippleGaussItem>);
116  add("CosineRippleLorentz", create_new<CosineRippleLorentzItem>);
117  add("SawtoothRippleBox", create_new<SawtoothRippleBoxItem>);
118  add("SawtoothRippleGauss", create_new<SawtoothRippleGaussItem>);
119  add("SawtoothRippleLorentz", create_new<SawtoothRippleLorentzItem>);
120  add("Tetrahedron", create_new<TetrahedronItem>);
121  add("TruncatedCube", create_new<TruncatedCubeItem>);
122  add("TruncatedSphere", create_new<TruncatedSphereItem>);
123  add("TruncatedSpheroid", create_new<TruncatedSpheroidItem>);
124 
125  add("XRotation", create_new<XRotationItem>);
126  add("YRotation", create_new<YRotationItem>);
127  add("ZRotation", create_new<ZRotationItem>);
128  add("EulerRotation", create_new<EulerRotationItem>);
129 
130  add("LayerBasicRoughness", create_new<LayerBasicRoughnessItem>);
131  add("LayerZeroRoughness", create_new<LayerZeroRoughnessItem>);
132 
133  add("SphericalDetector", create_new<SphericalDetectorItem>);
134  add("RectangularDetector", create_new<RectangularDetectorItem>);
135 
136  add("DistributionNone", create_new<DistributionNoneItem>);
137  add("DistributionGate", create_new<DistributionGateItem>);
138  add("DistributionLorentz", create_new<DistributionLorentzItem>);
139  add("DistributionGaussian", create_new<DistributionGaussianItem>);
140  add("DistributionLogNormal", create_new<DistributionLogNormalItem>);
141  add("DistributionCosine", create_new<DistributionCosineItem>);
142  add("DistributionTrapezoid", create_new<DistributionTrapezoidItem>);
143 
144  add("FTDistribution1DCauchy", create_new<FTDistribution1DCauchyItem>);
145  add("FTDistribution1DGauss", create_new<FTDistribution1DGaussItem>);
146  add("FTDistribution1DGate", create_new<FTDistribution1DGateItem>);
147  add("FTDistribution1DTriangle", create_new<FTDistribution1DTriangleItem>);
148  add("FTDistribution1DCosine", create_new<FTDistribution1DCosineItem>);
149  add("FTDistribution1DVoigt", create_new<FTDistribution1DVoigtItem>);
150 
151  add("FTDistribution2DCauchy", create_new<FTDistribution2DCauchyItem>);
152  add("FTDistribution2DGauss", create_new<FTDistribution2DGaussItem>);
153  add("FTDistribution2DGate", create_new<FTDistribution2DGateItem>);
154  add("FTDistribution2DCone", create_new<FTDistribution2DConeItem>);
155  add("FTDistribution2DVoigt", create_new<FTDistribution2DVoigtItem>);
156 
157  add("FTDecayFunction1DCauchy", create_new<FTDecayFunction1DCauchyItem>);
158  add("FTDecayFunction1DGauss", create_new<FTDecayFunction1DGaussItem>);
159  add("FTDecayFunction1DTriangle", create_new<FTDecayFunction1DTriangleItem>);
160  add("FTDecayFunction1DVoigt", create_new<FTDecayFunction1DVoigtItem>);
161 
162  add("FTDecayFunction2DCauchy", create_new<FTDecayFunction2DCauchyItem>);
163  add("FTDecayFunction2DGauss", create_new<FTDecayFunction2DGaussItem>);
164  add("FTDecayFunction2DVoigt", create_new<FTDecayFunction2DVoigtItem>);
165 
166  add("BasicLattice2D", create_new<BasicLattice2DItem>);
167  add("SquareLattice2D", create_new<SquareLattice2DItem>);
168  add("HexagonalLattice2D", create_new<HexagonalLattice2DItem>);
169 
170  add("Material", create_new<MaterialItem>);
171  add("MaterialContainer", create_new<MaterialItemContainer>);
172 
173  add("MaterialRefractiveData", create_new<MaterialRefractiveDataItem>);
174  add("MaterialSLDData", create_new<MaterialSLDDataItem>);
175 
176  add("JobItem", create_new<JobItem>);
177 
178  add("IntensityData", create_new<IntensityDataItem>);
179  add("SpecularData", create_new<SpecularDataItem>);
180  add("Data1DViewItem", create_new<Data1DViewItem>);
181  add("DataPropertyContainer", create_new<DataPropertyContainer>);
182  add("DataItem1DProperties", create_new<Data1DProperties>);
183 
184  add("BasicAxis", create_new<BasicAxisItem>);
185  add("PointwiseAxis", create_new<PointwiseAxisItem>);
186  add("AmplitudeAxis", create_new<AmplitudeAxisItem>);
187 
188  add("BeamWavelength", create_new<BeamWavelengthItem>);
189  add("BeamAzimuthalAngle", create_new<BeamAzimuthalAngleItem>);
190  add("BeamInclinationAngle", create_new<BeamInclinationAngleItem>);
191  add("SpecularBeamInclinationAxis", create_new<SpecularBeamInclinationItem>);
192  add("SpecularBeamWavelength", create_new<SpecularBeamWavelengthItem>);
193 
194  add("ResolutionFunctionNone", create_new<ResolutionFunctionNoneItem>);
195  add("ResolutionFunction2DGaussian", create_new<ResolutionFunction2DGaussianItem>);
196 
197  add("MaskContainer", create_new<MaskContainerItem>);
198  add("RectangleMask", create_new<RectangleItem>);
199  add("PolygonPoint", create_new<PolygonPointItem>);
200  add("PolygonMask", create_new<PolygonItem>);
201  add("VerticalLineMask", create_new<VerticalLineItem>);
202  add("HorizontalLineMask", create_new<HorizontalLineItem>);
203  add("EllipseMask", create_new<EllipseItem>);
204  add("MaskAllMask", create_new<MaskAllItem>);
205 
206  add("RegionOfInterest", create_new<RegionOfInterestItem>);
207 
208  add("GroupProperty", create_new<GroupItem>);
209 
210  add("Parameter Container", create_new<ParameterContainerItem>);
211  add("Parameter Label", create_new<ParameterLabelItem>);
212  add("Parameter", create_new<ParameterItem>);
213 
214  add("FitParameterContainer", create_new<FitParameterContainerItem>);
215  add("FitParameter", create_new<FitParameterItem>);
216  add("FitParameterLink", create_new<FitParameterLinkItem>);
217  add("FitSuite", create_new<FitSuiteItem>);
218 
219  add("SimulationOptions", create_new<SimulationOptionsItem>);
220 
221  add("RealData", create_new<RealDataItem>);
222 
223  add("MinimizerContainer", create_new<MinimizerContainerItem>);
224  add("Minuit2", create_new<MinuitMinimizerItem>);
225  add("GSLMultiMin", create_new<GSLMultiMinimizerItem>);
226  add("Genetic", create_new<GeneticMinimizerItem>);
227  add("GSLSimAn", create_new<SimAnMinimizerItem>);
228  add("GSLLMA", create_new<GSLLMAMinimizerItem>);
229  add("Test", create_new<TestMinimizerItem>);
230 
231  add("RealLimitsLimitless", create_new<LimitlessItem>);
232  add("RealLimitsPositive", create_new<PositiveItem>);
233  add("RealLimitsNonnegative", create_new<NonnegativeItem>);
234  add("RealLimitsLowerLimited", create_new<LowerLimitedItem>);
235  add("RealLimitsUpperLimited", create_new<UpperLimitedItem>);
236  add("RealLimitsLimited", create_new<LimitedItem>);
237 
238  add("ProjectionContainer", create_new<ProjectionContainerItem>);
239 
240  add("DepthProbeInstrument", create_new<DepthProbeInstrumentItem>);
241 }
242 
243 std::unique_ptr<SessionItem> ItemCatalog::createItemPtr(const QString& modelType) const
244 {
245  if (!m_data.contains(modelType))
246  throw GUIHelpers::Error("ItemFactory::createItem() -> Error: Model name does not exist: "
247  + modelType);
248 
249  return m_data.createItemPtr(modelType);
250 }
251 
253 {
254  return {"MultiLayer",
255  "Layer",
256  "ParticleLayout",
257  "Particle",
258  "ParticleCoreShell",
259  "ParticleComposition",
260  "MesoCrystal",
261  "ParticleDistribution",
262  "Rotation",
263  "Interference1DLattice",
264  "Interference2DLattice",
265  "Interference2DParaCrystal",
266  "InterferenceFinite2DLattice",
267  "InterferenceHardDisk",
268  "InterferenceRadialParaCrystal"};
269 }
270 
271 void ItemCatalog::add(const QString& modelType, std::function<SessionItem*()> f)
272 {
273  m_data.registerItem(modelType, f);
274 }
Defines BackgroundItem classes.
Defines class BeamAngleItems.
Defines class BeamWavelengthItem.
Defines class Data1DViewItem.
Defines class DataProperties and its descendants.
Defines class DataPropertyContainer.
Defines DepthProbeInstrumentItem class.
Defines FTDecayFunction1DItem classes.
Defines FTDistribution1DItem's classes.
Defines FitParameterItems family of classes.
Defines class FitSuiteItem.
Declares FootprintItem classes.
Defines FormFactorItems classes.
Defines class GUIHelpers functions.
Defines class GroupItem.
Defines class IntensityDataItem.
Defines InterferenceFunctionItems's classes.
Defines class ItemCatalog.
Defines class JobItem.
Defines classes Lattice2DItems.
Defines class LayerItem.
Defines classes LayerRoughnessItems.
Defines MaskItems classes.
Defines MaterialDataItems classes.
Defines class MaterialItemContainer.
Defines class MaterialItem.
Defines class MesoCrystalItem.
Defines MinimizerItem class.
Defines class MultiLayerItem.
Defines classes for ParameterTreeItems.
Defines class ParticleCompositionItem.
Defines class ParticleCoreShellItem.
Defines class ParticleDistributionItem.
Defines class ParticleItem.
Defines class ParticleLayoutItem.
Defines pointwise axis item.
Defines items related to projections over color map.
Defines class PropertyItem.
Defines class RealDataItem.
Defines RealLimitsItems's classes.
Defines class RectangularDetectorItem.
Defines family of ResolutionFunctionItem.
Defines class RotationItems.
Defines class SimulationOptionsItem.
Declares the class SpecularBeamInclinationItem.
Defines class SpecularDataItem.
Defines class SphericalDetectorItem.
Defines class TransformationItem.
Defines class VectorItem.
bool registerItem(const Key &item_key, CreateItemCallback CreateFn)
Registers object's creation function.
Definition: IFactory.h:53
bool contains(const Key &item_key) const
Definition: IFactory.h:59
std::unique_ptr< AbstractProduct > createItemPtr(const Key &item_key) const
Definition: IFactory.h:46
static QStringList validTopItemTypes()
void add(const QString &modelType, std::function< SessionItem *()> f)
std::unique_ptr< SessionItem > createItemPtr(const QString &modelType) const
IFactory< QString, SessionItem > m_data
Definition: ItemCatalog.h:37