File: CustomMorphologyBuilder.cpp

package info (click to toggle)
bornagain 23.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 103,936 kB
  • sloc: cpp: 423,131; python: 40,997; javascript: 11,167; awk: 630; sh: 318; ruby: 173; xml: 130; makefile: 51; ansic: 24
file content (118 lines) | stat: -rw-r--r-- 3,714 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//  ************************************************************************************************
//
//  BornAgain: simulate and fit reflection and scattering
//
//! @file      Sample/StandardSample/CustomMorphologyBuilder.cpp
//! @brief     Implements class CustomMorphologyBuilder.
//!
//! @homepage  http://www.bornagainproject.org
//! @license   GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
//  ************************************************************************************************

#include "Sample/StandardSample/CustomMorphologyBuilder.h"
#include "Base/Const/Units.h"
#include "Sample/Aggregate/ParticleLayout.h"
#include "Sample/HardParticle/Polyhedra.h"
#include "Sample/Multilayer/Layer.h"
#include "Sample/Multilayer/Sample.h"
#include "Sample/Particle/Particle.h"
#include "Sample/Scattering/Rotations.h"
#include "Sample/StandardSample/ReferenceMaterials.h"

using Units::deg;

Sample* ExemplarySamples::createCustomMorphology()
{
    Material mat_vacuum = refMat::Vacuum;
    Material mat_particle = refMat::Particle;

    Layer vacuum_layer(mat_vacuum);
    ParticleLayout particle_layout;

    // add particle number 1:
    Box ff1(2.0, 2.0, 1.0);
    R3 pos1(0.0, 0.0, 0.0);
    Particle p1(mat_particle, ff1);
    p1.translate(pos1);
    particle_layout.addParticle(p1, 0.5);
    // add particle number 2:
    Box ff2(2.0, 4.0, 1.0);
    R3 pos2(5.0, 5.0, 0.0);
    RotationZ m2(10 * deg);
    Particle p2(mat_particle, ff2);
    p2.rotate(m2);
    p2.translate(pos2);
    particle_layout.addParticle(p2, 0.5);
    // add particle number 3:
    Box ff3(2.0, 6.0, 1.0);
    R3 pos3(-5.0, -5.0, 0.0);
    RotationZ m3(20 * deg);
    Particle p3(mat_particle, ff3);
    p3.rotate(m3);
    p3.translate(pos3);
    particle_layout.addParticle(p3, 0.5);
    // add particle number 4:
    Box ff4(2.0, 8.0, 1.0);
    R3 pos4(5.0, -5.0, 0.0);
    RotationZ m4(30 * deg);
    Particle p4(mat_particle, ff4);
    p4.rotate(m4);
    p4.translate(pos4);
    particle_layout.addParticle(p4, 0.5);
    // add particle number 5:
    Box ff5(2.0, 10.0, 1.0);
    R3 pos5(-5.0, 5.0, 0.0);
    RotationZ m5(40 * deg);
    Particle p5(mat_particle, ff5);
    p5.rotate(m5);
    p5.translate(pos5);
    particle_layout.addParticle(p5, 0.5);
    // add particle number 6:
    Box ff6(2.0, 2.0, 1.0);
    R3 pos6(0.0, 0.0, 0.0);
    RotationZ m6(50 * deg);
    Particle p6(mat_particle, ff6);
    p6.rotate(m6);
    p6.translate(pos6);
    particle_layout.addParticle(p6, 0.5);
    // add particle number 7:
    Box ff7(2.0, 4.0, 1.0);
    R3 pos7(5.0, 5.0, 0.0);
    RotationZ m7(60 * deg);
    Particle p7(mat_particle, ff7);
    p7.rotate(m7);
    p7.translate(pos7);
    particle_layout.addParticle(p7, 0.5);
    // add particle number 8:
    Box ff8(2.0, 6.0, 1.0);
    R3 pos8(-5.0, -5.0, 0.0);
    RotationZ m8(70 * deg);
    Particle p8(mat_particle, ff8);
    p8.rotate(m8);
    p8.translate(pos8);
    particle_layout.addParticle(p8, 0.5);
    // add particle number 9:
    Box ff9(2.0, 8.0, 1.0);
    R3 pos9(5.0, -5.0, 0.0);
    RotationZ m9(80 * deg);
    Particle p9(mat_particle, ff9);
    p9.rotate(m9);
    p9.translate(pos9);
    particle_layout.addParticle(p9, 0.5);
    // add particle number 10:
    Box ff10(2.0, 10.0, 1.0);
    R3 pos10(-5.0, 5.0, 0.0);
    RotationZ m10(90 * deg);
    Particle p10(mat_particle, ff10);
    p10.rotate(m10);
    p10.translate(pos10);
    particle_layout.addParticle(p10, 0.5);
    vacuum_layer.addLayout(particle_layout);

    auto* sample = new Sample;
    sample->addLayer(vacuum_layer);
    return sample;
}