BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
IdentityRotation Class Reference

Description

The identity rotation, which leaves everything in place.

Definition at line 57 of file Rotations.h.

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

Public Member Functions

 IdentityRotation ()
 
void checkNodeArgs () const
 Raises exception if a parameter value is invalid. More...
 
std::string className () const final
 Returns the class name, to be hard-coded in each leaf class that inherits from INode. More...
 
IdentityRotationclone () const override
 
IdentityRotationcreateInverse () const override
 Returns a new IRotation object that is the current object's inverse. More...
 
bool isIdentity () const override
 Returns true if rotation matrix is identity matrix (no rotations) More...
 
virtual std::vector< const INode * > nodeChildren () const
 Returns all children. More...
 
std::vector< const INode * > nodeOffspring () const
 Returns all descendants. More...
 
virtual std::vector< ParaMetaparDefs () const
 Returns the parameter definitions, to be hard-coded in each leaf class. More...
 
RotMatrix rotMatrix () const override
 Returns transformation. More...
 
virtual void transferToCPP ()
 Used for Python overriding of clone (see swig/tweaks.py) More...
 
R3 transformed (const R3 &v) const
 
bool zInvariant () const
 

Static Public Member Functions

static IRotationcreateRotation (const RotMatrix &transform)
 

Protected Attributes

std::vector< double > m_P
 

Constructor & Destructor Documentation

◆ IdentityRotation()

IdentityRotation::IdentityRotation ( )

Definition at line 71 of file Rotations.cpp.

72  : IRotation({})
73 {
74 }
IRotation(const std::vector< double > &PValues)
Definition: Rotations.cpp:23

Referenced by clone(), and createInverse().

Member Function Documentation

◆ checkNodeArgs()

void INode::checkNodeArgs ( ) const
inherited

Raises exception if a parameter value is invalid.

Definition at line 27 of file INode.cpp.

28 {
29  size_t nP = m_P.size();
30  if (parDefs().size() != nP) {
31  std::cerr << "BUG in class " << className() << std::endl;
32  std::cerr << "#m_P = " << nP << std::endl;
33  std::cerr << "#PDf = " << parDefs().size() << std::endl;
34  for (const ParaMeta& pm : parDefs())
35  std::cerr << " PDf: " << pm.name << std::endl;
36  ASSERT(0);
37  }
38  ASSERT(parDefs().size() == nP);
39  for (size_t i = 0; i < nP; ++i) {
40  const ParaMeta pm = parDefs()[i];
41 
43  if (pm.vMin == -INF) {
44  ASSERT(pm.vMax == +INF);
45  // nothing to do
46  } else if (pm.vMax == +INF) {
47  ASSERT(pm.vMin == 0);
48  limits = RealLimits::nonnegative();
49  } else {
50  limits = RealLimits::limited(pm.vMin, pm.vMax);
51  }
52  limits.check(pm.name, m_P[i]);
53  }
54 }
#define ASSERT(condition)
Definition: Assert.h:45
const double INF
Definition: INode.h:26
virtual std::vector< ParaMeta > parDefs() const
Returns the parameter definitions, to be hard-coded in each leaf class.
Definition: INode.h:51
std::vector< double > m_P
Definition: INode.h:63
virtual std::string className() const =0
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
Limits for a real fit parameter.
Definition: RealLimits.h:24
static RealLimits limitless()
Creates an object without bounds (default)
Definition: RealLimits.cpp:139
void check(const std::string &name, double value) const
Throws if value is outside limits. Parameter 'name' is for exception message.
Definition: RealLimits.cpp:170
static RealLimits nonnegative()
Creates an object which can have only positive values with 0. included.
Definition: RealLimits.cpp:124
static RealLimits limited(double left_bound_value, double right_bound_value)
Creates an object bounded from the left and right.
Definition: RealLimits.cpp:134
Metadata of one model parameter.
Definition: INode.h:29
double vMin
Definition: INode.h:33
double vMax
Definition: INode.h:34
std::string name
Definition: INode.h:30

References ASSERT, RealLimits::check(), INode::className(), INF, RealLimits::limited(), RealLimits::limitless(), INode::m_P, ParaMeta::name, RealLimits::nonnegative(), INode::parDefs(), ParaMeta::vMax, and ParaMeta::vMin.

Referenced by BarGauss::BarGauss(), BarLorentz::BarLorentz(), Bipyramid4::Bipyramid4(), Box::Box(), CantellatedCube::CantellatedCube(), Cone::Cone(), ConstantBackground::ConstantBackground(), CosineRippleBox::CosineRippleBox(), CosineRippleGauss::CosineRippleGauss(), CosineRippleLorentz::CosineRippleLorentz(), Cylinder::Cylinder(), DistributionCosine::DistributionCosine(), DistributionGate::DistributionGate(), DistributionGaussian::DistributionGaussian(), DistributionLogNormal::DistributionLogNormal(), DistributionLorentz::DistributionLorentz(), DistributionTrapezoid::DistributionTrapezoid(), Dodecahedron::Dodecahedron(), EllipsoidalCylinder::EllipsoidalCylinder(), FootprintGauss::FootprintGauss(), FootprintSquare::FootprintSquare(), FuzzySphere::FuzzySphere(), GaussSphere::GaussSphere(), HemiEllipsoid::HemiEllipsoid(), HollowSphere::HollowSphere(), HorizontalCylinder::HorizontalCylinder(), Icosahedron::Icosahedron(), LongBoxGauss::LongBoxGauss(), LongBoxLorentz::LongBoxLorentz(), PlatonicOctahedron::PlatonicOctahedron(), PlatonicTetrahedron::PlatonicTetrahedron(), Prism3::Prism3(), Prism6::Prism6(), Profile1DCauchy::Profile1DCauchy(), Profile1DCosine::Profile1DCosine(), Profile1DGate::Profile1DGate(), Profile1DGauss::Profile1DGauss(), Profile1DTriangle::Profile1DTriangle(), Profile1DVoigt::Profile1DVoigt(), Profile2DCauchy::Profile2DCauchy(), Profile2DCone::Profile2DCone(), Profile2DGate::Profile2DGate(), Profile2DGauss::Profile2DGauss(), Profile2DVoigt::Profile2DVoigt(), Pyramid2::Pyramid2(), Pyramid3::Pyramid3(), Pyramid4::Pyramid4(), Pyramid6::Pyramid6(), RotationEuler::RotationEuler(), RotationX::RotationX(), RotationY::RotationY(), RotationZ::RotationZ(), SawtoothRippleBox::SawtoothRippleBox(), SawtoothRippleGauss::SawtoothRippleGauss(), SawtoothRippleLorentz::SawtoothRippleLorentz(), Sphere::Sphere(), Spheroid::Spheroid(), TruncatedCube::TruncatedCube(), TruncatedSphere::TruncatedSphere(), and TruncatedSpheroid::TruncatedSpheroid().

Here is the call graph for this function:

◆ className()

std::string IdentityRotation::className ( ) const
inlinefinalvirtual

Returns the class name, to be hard-coded in each leaf class that inherits from INode.

Implements INode.

Definition at line 63 of file Rotations.h.

63 { return "IdentityRotation"; }

◆ clone()

IdentityRotation* IdentityRotation::clone ( ) const
inlineoverridevirtual

Implements IRotation.

Definition at line 62 of file Rotations.h.

62 { return new IdentityRotation(); }

References IdentityRotation().

Here is the call graph for this function:

◆ createInverse()

IdentityRotation* IdentityRotation::createInverse ( ) const
inlineoverridevirtual

Returns a new IRotation object that is the current object's inverse.

Implements IRotation.

Definition at line 65 of file Rotations.h.

65 { return new IdentityRotation(); }

References IdentityRotation().

Here is the call graph for this function:

◆ createRotation()

IRotation * IRotation::createRotation ( const RotMatrix transform)
staticinherited

Definition at line 28 of file Rotations.cpp.

29 {
30  if (matrix.isIdentity())
31  return new IdentityRotation;
32  if (std::optional<double> angle = matrix.angleAroundCoordAxis(0))
33  return new RotationX(angle.value());
34  if (std::optional<double> angle = matrix.angleAroundCoordAxis(1))
35  return new RotationY(angle.value());
36  if (std::optional<double> angle = matrix.angleAroundCoordAxis(2))
37  return new RotationZ(angle.value());
38  auto angles = matrix.zxzEulerAngles();
39  return new RotationEuler(angles[0], angles[1], angles[2]);
40 }
The identity rotation, which leaves everything in place.
Definition: Rotations.h:58
A sequence of rotations about the z-x'-z'' axes.
Definition: Rotations.h:146
A rotation about the x axis.
Definition: Rotations.h:74
A rotation about the y axis.
Definition: Rotations.h:98
A rotation about the z axis.
Definition: Rotations.h:122

References RotMatrix::angleAroundCoordAxis(), RotMatrix::isIdentity(), and RotMatrix::zxzEulerAngles().

Referenced by ReParticle::bottomZ(), RotationEuler::createInverse(), createProduct(), and ReParticle::topZ().

Here is the call graph for this function:

◆ isIdentity()

bool IdentityRotation::isIdentity ( ) const
inlineoverridevirtual

Returns true if rotation matrix is identity matrix (no rotations)

Reimplemented from IRotation.

Definition at line 69 of file Rotations.h.

69 { return true; }

◆ nodeChildren()

◆ nodeOffspring()

std::vector< const INode * > INode::nodeOffspring ( ) const
inherited

Returns all descendants.

Definition at line 61 of file INode.cpp.

62 {
63  std::vector<const INode*> result;
64  result.push_back(this);
65  for (const auto* child : nodeChildren()) {
66  for (const auto* p : child->nodeOffspring())
67  result.push_back(p);
68  }
69  return result;
70 }
virtual std::vector< const INode * > nodeChildren() const
Returns all children.
Definition: INode.cpp:56

References INode::nodeChildren().

Here is the call graph for this function:

◆ parDefs()

virtual std::vector<ParaMeta> INode::parDefs ( ) const
inlinevirtualinherited

Returns the parameter definitions, to be hard-coded in each leaf class.

Reimplemented in ConstantBackground, GaussSphere, FuzzySphere, RotationEuler, RotationZ, RotationY, RotationX, Crystal, Layer, HexagonalLattice2D, SquareLattice2D, BasicLattice2D, LayerRoughness, TruncatedSpheroid, TruncatedSphere, TruncatedCube, Spheroid, Sphere, SawtoothRippleLorentz, SawtoothRippleGauss, SawtoothRippleBox, Pyramid6, Pyramid4, Pyramid3, Pyramid2, Prism6, Prism3, PlatonicTetrahedron, PlatonicOctahedron, LongBoxLorentz, LongBoxGauss, Icosahedron, HorizontalCylinder, HollowSphere, HemiEllipsoid, EllipsoidalCylinder, Dodecahedron, Cylinder, CosineRippleLorentz, CosineRippleGauss, CosineRippleBox, Cone, CantellatedCube, Box, Bipyramid4, BarLorentz, BarGauss, Profile2DVoigt, Profile2DCone, Profile2DGate, Profile2DGauss, Profile2DCauchy, Profile1DVoigt, Profile1DCosine, Profile1DTriangle, Profile1DGate, Profile1DGauss, Profile1DCauchy, MisesGaussPeakShape, MisesFisherGaussPeakShape, LorentzFisherPeakShape, GaussFisherPeakShape, IsotropicLorentzPeakShape, IsotropicGaussPeakShape, ParticleLayout, InterferenceTwin, InterferenceRadialParaCrystal, InterferenceHardDisk, Interference2DSuperLattice, Interference2DParaCrystal, Interference1DLattice, DistributionTrapezoid, DistributionCosine, DistributionLogNormal, DistributionGaussian, DistributionLorentz, DistributionGate, ResolutionFunction2DGaussian, PolFilter, FootprintSquare, and FootprintGauss.

Definition at line 51 of file INode.h.

51 { return {}; }

Referenced by INode::checkNodeArgs(), and IFormFactor::pythonConstructor().

◆ rotMatrix()

RotMatrix IdentityRotation::rotMatrix ( ) const
overridevirtual

Returns transformation.

Implements IRotation.

Definition at line 76 of file Rotations.cpp.

77 {
78  return {};
79 }

◆ transferToCPP()

virtual void ICloneable::transferToCPP ( )
inlinevirtualinherited

Used for Python overriding of clone (see swig/tweaks.py)

Definition at line 32 of file ICloneable.h.

◆ transformed()

R3 IRotation::transformed ( const R3 &  v) const
inherited

Definition at line 42 of file Rotations.cpp.

43 {
44  return rotMatrix().transformed(v);
45 }
virtual RotMatrix rotMatrix() const =0
Returns transformation.
T transformed(const T &v) const
Return transformed vector v.
Definition: RotMatrix.cpp:76

References IRotation::rotMatrix(), and RotMatrix::transformed().

Referenced by ReParticle::bottomZ(), Sphere::bottomZ(), IParticle::rotate(), ReParticle::topZ(), and Sphere::topZ().

Here is the call graph for this function:

◆ zInvariant()

bool IRotation::zInvariant ( ) const
inherited

Definition at line 52 of file Rotations.cpp.

53 {
54  return rotMatrix().isZRotation();
55 }
bool isZRotation() const
Definition: RotMatrix.cpp:126

References RotMatrix::isZRotation(), and IRotation::rotMatrix().

Referenced by IFormFactor::canSliceAnalytically().

Here is the call graph for this function:

Member Data Documentation

◆ m_P


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