25 const QString decay_function_tag =
"Decay Function";
33 QString::fromStdString(
"PositionVariance");
39 ->
setToolTip(
"Variance of the position in each dimension (nm^2)");
58 setToolTip(
"Interference function of a 1D lattice");
61 ->
setToolTip(
"Rotation of lattice with respect to x-axis of reference \n"
62 "frame (beam direction) in degrees ");
64 ->
setToolTip(
"One-dimensional decay function (finite size effects)");
67 std::unique_ptr<IInterferenceFunction>
70 auto result = std::make_unique<InterferenceFunction1DLattice>(
75 result->setDecayFunction(*pdfItem->createFTDecayFunction());
77 return std::unique_ptr<IInterferenceFunction>(result.release());
89 setToolTip(
"Interference function of a 2D lattice");
92 ->
setToolTip(
"Two-dimensional decay function (finite size effects)");
94 ->
setToolTip(
"Enables/disables averaging over the lattice rotation angle.");
102 if (
item->modelType() ==
"GroupProperty"
104 update_rotation_availability();
109 std::unique_ptr<IInterferenceFunction>
113 std::unique_ptr<InterferenceFunction2DLattice> result(
117 result->setDecayFunction(*pdfItem.createFTDecayFunction());
121 return std::unique_ptr<IInterferenceFunction>(result.release());
127 if (p_lattice_item) {
136 QString::fromStdString(
"DampingLength");
138 QString::fromStdString(
"DomainSize1");
140 QString::fromStdString(
"DomainSize2");
148 setToolTip(
"Interference function of a two-dimensional paracrystal");
156 ->
setToolTip(
"Enables/disables averaging over the lattice rotation angle.");
159 ->
setToolTip(
"The damping (coherence) length of the paracrystal in nanometers");
162 ->
setToolTip(
"Size of the coherent domain along the first basis vector in nanometers");
164 ->
setToolTip(
"Size of the coherent domain along the second basis vector in nanometers");
166 ->
setToolTip(
"Probability distribution in first lattice direction");
168 ->
setToolTip(
"Probability distribution in second lattice direction");
177 if (
item->modelType() ==
"GroupProperty"
179 update_rotation_availability();
189 std::unique_ptr<IInterferenceFunction>
194 std::unique_ptr<InterferenceFunction2DParaCrystal> result(
204 result->setProbabilityDistributions(*pdf1Item.createFTDistribution(),
205 *pdf2Item.createFTDistribution());
208 return std::unique_ptr<IInterferenceFunction>(result.release());
216 if (p_lattice_item) {
227 if (!group1 || !group2)
253 setToolTip(
"Interference function of a finite 2D lattice");
257 ->
setToolTip(
"Enables/disables averaging over the lattice rotation angle.");
267 if (
item->modelType() ==
"GroupProperty"
269 update_rotation_availability();
274 std::unique_ptr<IInterferenceFunction>
280 std::unique_ptr<InterferenceFunctionFinite2DLattice> result(
286 return std::unique_ptr<IInterferenceFunction>(result.release());
292 if (p_lattice_item) {
302 QString::fromStdString(
"TotalParticleDensity");
307 setToolTip(
"Interference function for hard disk Percus-Yevick");
312 std::unique_ptr<IInterferenceFunction>
315 auto result = std::make_unique<InterferenceFunctionHardDisk>(
318 return std::unique_ptr<IInterferenceFunction>(result.release());
324 QString::fromStdString(
"PeakDistance");
326 QString::fromStdString(
"DampingLength");
328 QString::fromStdString(
"DomainSize");
330 QString::fromStdString(
"SizeSpaceCoupling");
336 setToolTip(
"Interference function of a radial paracrystal");
338 ->
setToolTip(
"Average distance to the next neighbor in nanometers");
340 ->
setToolTip(
"The damping (coherence) length of the paracrystal "
343 ->
setToolTip(
"Size of coherence domain along the lattice main axis "
346 ->
setToolTip(
"Size spacing coupling parameter of the Size Spacing "
347 "Correlation Approximation");
351 std::unique_ptr<IInterferenceFunction>
354 auto result = std::make_unique<InterferenceFunctionRadialParaCrystal>(
359 auto& pdfItem = groupItem<FTDistribution1DItem>(
P_PDF);
360 result->setProbabilityDistribution(*pdfItem.createFTDistribution());
362 return std::unique_ptr<IInterferenceFunction>(result.release());
Defines FTDecayFunction1DItem classes.
Defines FTDistribution1DItem's classes.
Defines InterferenceFunctionItems's classes.
Includes all interference function definitions.
Defines classes Lattice2DItems.
Defines ModelPath namespace.
Defines some unit conversion factors and other constants in namespace Units.
SessionItem * currentItem() const
static const QString T_ITEMS
Abstract base class of interference functions.
void setPositionVariance(double var)
Sets the variance of the position for the calculation of the DW factor It is defined as the variance ...
static const QString P_DECAY_FUNCTION
std::unique_ptr< IInterferenceFunction > createInterferenceFunction() const
InterferenceFunction1DLatticeItem()
static const QString P_LENGTH
static const QString P_ROTATION_ANGLE
InterferenceFunction2DLatticeItem()
std::unique_ptr< IInterferenceFunction > createInterferenceFunction() const
static const QString P_XI_INTEGRATION
static const QString P_LATTICE_TYPE
static const QString P_DECAY_FUNCTION
void update_rotation_availability()
Interference function of a 2D lattice.
static const QString P_PDF1
std::unique_ptr< IInterferenceFunction > createInterferenceFunction() const
void update_rotation_availability()
Sets rotation property of the lattice enabled/disabled depending on integration flag.
InterferenceFunction2DParaCrystalItem()
static const QString P_XI_INTEGRATION
static const QString P_DOMAIN_SIZE2
void update_distribution_displaynames()
static const QString P_PDF2
static const QString P_DAMPING_LENGTH
static const QString P_DOMAIN_SIZE1
Interference function of a 2D paracrystal.
void update_rotation_availability()
static const QString P_XI_INTEGRATION
static const QString P_DOMAIN_SIZE_1
std::unique_ptr< IInterferenceFunction > createInterferenceFunction() const
InterferenceFunctionFinite2DLatticeItem()
static const QString P_DOMAIN_SIZE_2
Interference function of a finite 2D lattice.
std::unique_ptr< IInterferenceFunction > createInterferenceFunction() const
InterferenceFunctionHardDiskItem()
static const QString P_DENSITY
static const QString P_RADIUS
static const QString P_POSITION_VARIANCE
void setPositionVariance(IInterferenceFunction *p_iff) const
virtual ~InterferenceFunctionItem()
InterferenceFunctionItem(const QString &modelType)
static const QString P_KAPPA
static const QString P_PEAK_DISTANCE
std::unique_ptr< IInterferenceFunction > createInterferenceFunction() const
InterferenceFunctionRadialParaCrystalItem()
static const QString P_DOMAIN_SIZE
static const QString P_PDF
static const QString P_DAMPING_LENGTH
static const QString P_LATTICE_ROTATION_ANGLE
void setOnChildPropertyChange(std::function< void(SessionItem *, QString)> f, const void *caller=0)
Calls back on child property change, report childItem and property name.
void setOnPropertyChange(std::function< void(QString)> f, const void *caller=0)
bool isTag(const QString &name) const
Returns true if tag is available.
SessionItem * addProperty(const QString &name, const QVariant &variant)
Add new property item and register new tag.
SessionItem * getGroupItem(const QString &groupName) const
Access subitem of group item.
QVariant getItemValue(const QString &tag) const
Directly access value of item under given tag.
void setDisplayName(const QString &display_name)
Set display name.
SessionItem * addGroupProperty(const QString &groupTag, const QString &groupType)
Creates new group item and register new tag, returns GroupItem.
ModelMapper * mapper()
Returns the current model mapper of this item. Creates new one if necessary.
T * item(const QString &tag) const
SessionItem & setToolTip(const QString &tooltip)
QString modelType() const
Get model type.
void setEnabled(bool enabled)
SessionItem * getItem(const QString &tag="", int row=0) const
Returns item in given row of given tag.
QString const & name(EShape k)
double deg2rad(double angle)
static constexpr double micrometer
static constexpr double nm