BornAgain  1.19.79
Simulate and fit neutron and x-ray scattering at grazing incidence
BeamInclinationAngleItem Class Reference

Description

Definition at line 33 of file BeamAngleItems.h.

Inheritance diagram for BeamInclinationAngleItem:
[legend]
Collaboration diagram for BeamInclinationAngleItem:
[legend]

Public Member Functions

 BeamInclinationAngleItem ()
 
DistributionItemdistribution () const
 
SelectionDescriptor< DistributionItem * > distributionSelection () const
 
std::unique_ptr< ParameterDistribution > getParameterDistributionForName (ParameterDistribution::WhichParameter which) const
 
double inclinationAngle () const
 
virtual double meanValue () const
 
void resetToValue (double value)
 
double scaleFactor () const override
 
void serialize (Streamer &s) override
 
void setDistribution (DistributionItem *d)
 
template<typename T >
T * setDistributionType ()
 

Protected Member Functions

virtual std::unique_ptr< IDistribution1D > createDistribution1D () const
 

Protected Attributes

SelectionProperty< DistributionItem * > m_distribution
 

Static Private Member Functions

static void initDistribution (DistributionItem *newDistribution, const DistributionItem *currentDistribution)
 

Constructor & Destructor Documentation

◆ BeamInclinationAngleItem()

BeamInclinationAngleItem::BeamInclinationAngleItem ( )

Definition at line 67 of file BeamAngleItems.cpp.

68 {
70  "Distribution", "", "distribution", DistributionItemCatalog::types(), initDistribution);
71 }
SelectionProperty< DistributionItem * > m_distribution
static void initDistribution(DistributionItem *newDistribution, const DistributionItem *currentDistribution)
static QVector< Type > types()
Available types of items.
void initWithInitializer(const QString &label, const QString &tooltip, const QString &persistentTag, std::function< void(T newItem, const T oldItem)> initializer)
Initialize by means of a catalog class and an initializer function.

References initDistribution(), SelectionProperty< T >::initWithInitializer(), BeamDistributionItem::m_distribution, and DistributionItemCatalog::types().

Here is the call graph for this function:

Member Function Documentation

◆ createDistribution1D()

std::unique_ptr< IDistribution1D > BeamDistributionItem::createDistribution1D ( ) const
protectedvirtualinherited

Definition at line 75 of file BeamDistributionItem.cpp.

76 {
78 }
DistributionItem * distribution() const
virtual double scaleFactor() const
virtual std::unique_ptr< IDistribution1D > createDistribution(double scale=1.0) const =0

References DistributionItem::createDistribution(), BeamDistributionItem::distribution(), and BeamDistributionItem::scaleFactor().

Referenced by BeamDistributionItem::getParameterDistributionForName(), and BeamDistributionItem::meanValue().

Here is the call graph for this function:

◆ distribution()

DistributionItem * BeamDistributionItem::distribution ( ) const
inherited

◆ distributionSelection()

SelectionDescriptor< DistributionItem * > BeamDistributionItem::distributionSelection ( ) const
inherited

◆ getParameterDistributionForName()

std::unique_ptr< ParameterDistribution > BeamDistributionItem::getParameterDistributionForName ( ParameterDistribution::WhichParameter  which) const
inherited

Definition at line 22 of file BeamDistributionItem.cpp.

24 {
25  if (const auto* d = distribution()) {
26  auto distribution1D = createDistribution1D();
27 
28  if (distribution1D) {
29  const auto nbrOfSamples = d->numberOfSamples();
30  const double sigmaFactor = d->hasSigmaFactor() ? d->sigmaFactor() : 0.0;
31  const auto limits = d->limits().scaledLimits(scaleFactor());
32 
33  return std::make_unique<ParameterDistribution>(which, *distribution1D, nbrOfSamples,
34  sigmaFactor, limits);
35  }
36  }
37  return {};
38 }
virtual std::unique_ptr< IDistribution1D > createDistribution1D() const

References BeamDistributionItem::createDistribution1D(), BeamDistributionItem::distribution(), and BeamDistributionItem::scaleFactor().

Here is the call graph for this function:

◆ inclinationAngle()

double BeamInclinationAngleItem::inclinationAngle ( ) const

Definition at line 85 of file BeamAngleItems.cpp.

86 {
88 }
virtual double meanValue() const

References BeamDistributionItem::meanValue().

Here is the call graph for this function:

◆ initDistribution()

void BeamInclinationAngleItem::initDistribution ( DistributionItem newDistribution,
const DistributionItem currentDistribution 
)
staticprivate

Definition at line 95 of file BeamAngleItems.cpp.

97 {
98  newDistribution->setLimits(RealLimits::limited(-90.0, 90.0));
99  newDistribution->setUnit(Unit::degree);
100 
101  double meanVal = 0.2;
102  if (auto* cd = dynamic_cast<const SymmetricResolutionItem*>(currentDistribution))
103  meanVal = cd->mean();
104 
105  if (auto* nd = dynamic_cast<SymmetricResolutionItem*>(newDistribution)) {
106  nd->setMean(meanVal);
107  nd->setMeanDecimals(3);
108  }
109 
110  newDistribution->initDistribution(meanVal);
111 }
@ degree
virtual void setLimits(const RealLimits &limits)
virtual void initDistribution(double)
virtual void setUnit(const variant< QString, Unit > &unit)=0
Set the unit of the distributed value.

References degree, DistributionItem::initDistribution(), DistributionItem::setLimits(), and DistributionItem::setUnit().

Referenced by BeamInclinationAngleItem().

Here is the call graph for this function:

◆ meanValue()

double BeamDistributionItem::meanValue ( ) const
virtualinherited

Definition at line 40 of file BeamDistributionItem.cpp.

41 {
42  std::unique_ptr<IDistribution1D> domainDistr = createDistribution1D();
43  if (domainDistr)
44  return domainDistr->mean() / scaleFactor();
45  return dynamic_cast<SymmetricResolutionItem*>(distribution())->mean();
46 }

References BeamDistributionItem::createDistribution1D(), BeamDistributionItem::distribution(), and BeamDistributionItem::scaleFactor().

Referenced by BeamAzimuthalAngleItem::azimuthalAngle(), inclinationAngle(), and BeamWavelengthItem::wavelength().

Here is the call graph for this function:

◆ resetToValue()

void BeamDistributionItem::resetToValue ( double  value)
inherited

Definition at line 48 of file BeamDistributionItem.cpp.

49 {
50  auto* d = new DistributionNoneItem();
51  d->setMean(value);
53 }
void set(T t, bool callInitializer=false)
Directly set the new item.

References BeamDistributionItem::m_distribution, and SelectionProperty< T >::set().

Here is the call graph for this function:

◆ scaleFactor()

double BeamInclinationAngleItem::scaleFactor ( ) const
overridevirtual

Reimplemented from BeamDistributionItem.

Definition at line 90 of file BeamAngleItems.cpp.

91 {
92  return Units::deg;
93 }

◆ serialize()

void BeamInclinationAngleItem::serialize ( Streamer s)
overridevirtual

Implements BeamDistributionItem.

Definition at line 74 of file BeamAngleItems.cpp.

75 {
76  s.assertVersion(0);
77  Serialize::rwSelected<DistributionItemCatalog>(s, m_distribution);
78 
79  if (s.xmlReader()) {
80  m_distribution->setLimits(RealLimits::limited(-90.0, 90.0));
82  }
83 }
QXmlStreamReader * xmlReader()
Returns stream reader or nullptr.
Definition: Streamer.h:48
void assertVersion(unsigned expectedVersion) const
As reader, throws DeserializationException unless the expected version is read. As writer,...
Definition: Streamer.cpp:26

References Streamer::assertVersion(), degree, BeamDistributionItem::m_distribution, DistributionItem::setLimits(), DistributionItem::setUnit(), and Streamer::xmlReader().

Here is the call graph for this function:

◆ setDistribution()

void BeamDistributionItem::setDistribution ( DistributionItem d)
inherited

Definition at line 70 of file BeamDistributionItem.cpp.

71 {
73 }

References BeamDistributionItem::m_distribution, and SelectionProperty< T >::set().

Here is the call graph for this function:

◆ setDistributionType()

template<typename T >
T * BeamDistributionItem::setDistributionType
inherited

Definition at line 52 of file BeamDistributionItem.h.

53 {
54  m_distribution.set<T>();
55  return dynamic_cast<T*>(m_distribution.get());
56 }

References SelectionProperty< T >::get(), BeamDistributionItem::m_distribution, and SelectionProperty< T >::set().

Here is the call graph for this function:

Member Data Documentation

◆ m_distribution


The documentation for this class was generated from the following files: