BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
particles.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/ba3d/model/particles.h
6 //! @brief Defines Particle class
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 
15 #ifndef BORNAGAIN_GUI_BA3D_MODEL_PARTICLES_H
16 #define BORNAGAIN_GUI_BA3D_MODEL_PARTICLES_H
17 
18 #include "GUI/ba3d/model/object.h"
19 
20 namespace RealSpace {
21 namespace Particles {
22 
23 enum class EShape {
24  None,
25  FullSphere,
27  Cylinder,
30  Cone,
34  Prism6,
35  Cone6,
36  Pyramid,
38  Prism3,
41  BarGauss,
42  BarLorentz,
43  Box,
45  Dot,
53 };
54 
55 QString const& name(EShape);
56 
57 //------------------------------------------------------------------------------
58 
59 class Particle : public Object {
60 protected:
62  Vector3D turn; // turn before scale
63  Vector3D scale; // geometries are of 1-size (box 1x1x1, sphere D=1), need scaling
64  Vector3D offset; // geometries centered around origin; particles stand on z=0 plane
65  Vector3D rotate, translate; // remembered
66 
67  void set();
68 
69 public:
70  static EShape const firstKind = EShape::None;
72 
74  void fancy(Vector3D rotate, float r);
75 
77  void addTranslation(Vector3D translate_);
78  void addExtrinsicRotation(Vector3D rotateExtrinsic);
79 };
80 
81 //------------------------------------------------------------------------------
82 // follow BornAgain manual, chapter 11, Particle form factors
83 
84 class FullSphere : public Particle {
85 public:
86  FullSphere(float R);
87 };
88 
89 class FullSpheroid : public Particle {
90 public:
91  FullSpheroid(float R, float H);
92 };
93 
94 class Cylinder : public Particle {
95 public:
96  Cylinder(float R, float H);
97 };
98 
99 class TruncatedSphere : public Particle {
100 public:
101  TruncatedSphere(float R, float H, float deltaH = 0.0f);
102 };
103 
104 class TruncatedSpheroid : public Particle {
105 public:
106  TruncatedSpheroid(float R, float H, float fp, float deltaH = 0.0f);
107 };
108 
109 class Cone : public Particle {
110 public:
111  Cone(float R, float H, float alpha);
112 };
113 
114 class Icosahedron : public Particle {
115 public:
116  Icosahedron(float L);
117 };
118 
119 class Dodecahedron : public Particle {
120 public:
121  Dodecahedron(float L);
122 };
123 
124 class Dot : public Particle {
125 public:
126  Dot();
127 };
128 
129 class TruncatedCube : public Particle {
130 public:
131  TruncatedCube(float L, float t);
132 };
133 
134 class Prism6 : public Particle {
135 public:
136  Prism6(float R, float H);
137 };
138 
139 class Cone6 : public Particle {
140 public:
141  Cone6(float R, float H, float alpha);
142 };
143 
144 class Pyramid : public Particle {
145 public:
146  Pyramid(float L, float H, float alpha);
147 };
148 
149 class Cuboctahedron : public Particle {
150 public:
151  Cuboctahedron(float L, float H, float rH, float alpha);
152 };
153 
154 class Prism3 : public Particle {
155 public:
156  Prism3(float L, float H);
157 };
158 
159 class Tetrahedron : public Particle {
160 public:
161  Tetrahedron(float L, float H, float alpha);
162 };
163 
165 public:
166  EllipsoidalCylinder(float Ra, float Rb, float H);
167 };
168 
169 class BarGauss : public Particle {
170 public:
171  BarGauss(float L, float W, float H);
172 };
173 
174 class BarLorentz : public Particle {
175 public:
176  BarLorentz(float L, float W, float H);
177 };
178 
179 class Box : public Particle {
180 public:
181  Box(float L, float W, float H);
182 };
183 
184 class HemiEllipsoid : public Particle {
185 public:
186  HemiEllipsoid(float Ra, float Rb, float H);
187 };
188 
189 class CosineRippleBox : public Particle {
190 public:
191  CosineRippleBox(float L, float W, float H);
192 };
193 
194 class CosineRippleGauss : public Particle {
195 public:
196  CosineRippleGauss(float L, float W, float H);
197 };
198 
200 public:
201  CosineRippleLorentz(float L, float W, float H);
202 };
203 
204 class SawtoothRippleBox : public Particle {
205 public:
206  SawtoothRippleBox(float L, float W, float H);
207 };
208 
210 public:
211  SawtoothRippleGauss(float L, float W, float H);
212 };
213 
215 public:
216  SawtoothRippleLorentz(float L, float W, float H);
217 };
218 
219 class SawtoothRipple : public Particle {
220 public:
221  SawtoothRipple(float L, float W, float H, float asymmetry);
222 };
223 
224 class AnisoPyramid : public Particle {
225 public:
226  AnisoPyramid(float L, float W, float H, float alpha);
227 };
228 } // namespace Particles
229 } // namespace RealSpace
230 #endif // BORNAGAIN_GUI_BA3D_MODEL_PARTICLES_H
AnisoPyramid(float L, float W, float H, float alpha)
Definition: particles.cpp:104
BarGauss(float L, float W, float H)
Definition: particles.cpp:115
BarLorentz(float L, float W, float H)
Definition: particles.cpp:124
Box(float L, float W, float H)
Definition: particles.cpp:133
Cone6(float R, float H, float alpha)
Definition: particles.cpp:151
Cone(float R, float H, float alpha)
Definition: particles.cpp:142
CosineRippleBox(float L, float W, float H)
Definition: particles.cpp:264
CosineRippleGauss(float L, float W, float H)
Definition: particles.cpp:273
CosineRippleLorentz(float L, float W, float H)
Definition: particles.cpp:283
Cuboctahedron(float L, float H, float rH, float alpha)
Definition: particles.cpp:160
Cylinder(float R, float H)
Definition: particles.cpp:169
EllipsoidalCylinder(float Ra, float Rb, float H)
Definition: particles.cpp:194
HemiEllipsoid(float Ra, float Rb, float H)
Definition: particles.cpp:219
void addTransform(Vector3D rotate, Vector3D translate)
Definition: particles.cpp:78
void addExtrinsicRotation(Vector3D rotateExtrinsic)
Definition: particles.cpp:89
void addTranslation(Vector3D translate_)
Definition: particles.cpp:84
static EShape const lastKind
Definition: particles.h:71
void fancy(Vector3D rotate, float r)
Definition: particles.cpp:73
void transform(Vector3D rotate, Vector3D translate)
Definition: particles.cpp:68
Particle(GeometricID::Key)
Definition: particles.cpp:61
static EShape const firstKind
Definition: particles.h:70
Prism3(float L, float H)
Definition: particles.cpp:236
Prism6(float R, float H)
Definition: particles.cpp:245
Pyramid(float L, float H, float alpha)
Definition: particles.cpp:253
SawtoothRippleBox(float L, float W, float H)
Definition: particles.cpp:293
SawtoothRippleGauss(float L, float W, float H)
Definition: particles.cpp:303
SawtoothRippleLorentz(float L, float W, float H)
Definition: particles.cpp:313
SawtoothRipple(float L, float W, float H, float asymmetry)
Tetrahedron(float L, float H, float alpha)
Definition: particles.cpp:323
TruncatedSphere(float R, float H, float deltaH=0.0f)
Definition: particles.cpp:341
TruncatedSpheroid(float R, float H, float fp, float deltaH=0.0f)
Definition: particles.cpp:350
QString const & name(EShape k)
Definition: particles.cpp:21
Defines Object class.