BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SampleBuilderNode.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Sample/SampleBuilderEngine/SampleBuilderNode.cpp
6 //! @brief Implements class SampleBuilderNode.
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 
16 #include "Base/Utils/Assert.h"
20 #include <stdexcept>
21 
22 namespace {
23 const std::string& default_name = "SampleBuilderNode";
24 }
25 
27 {
28  setName(default_name);
29 }
30 
32  : INode(), m_sample_builder(other.m_sample_builder)
33 {
34  setName(other.getName());
35 }
36 
38 {
39  if (this != &other) {
41  setName(other.getName());
42  }
43  return *this;
44 }
45 
46 //! Sets sample builder and borrows its parameters.
47 
48 void SampleBuilderNode::setSBN(const std::shared_ptr<ISampleBuilder>& sample_builder)
49 {
50  if (!sample_builder)
51  throw std::runtime_error("SampleContainer::setSampleBuilder() -> Error. "
52  "Attempt to set null sample builder.");
53 
54  m_sample_builder = sample_builder;
55  setName(m_sample_builder->getName());
57 }
58 
59 //! Resets to initial state by removing builder and its borrowed parameters.
60 
62 {
63  setName(default_name);
64  parameterPool()->clear();
65  m_sample_builder.reset();
66 }
67 
68 //! Creates a multilayer using sample builder.
69 
70 std::unique_ptr<MultiLayer> SampleBuilderNode::createMultiLayer()
71 {
73  return std::unique_ptr<MultiLayer>(m_sample_builder->buildSample());
74 }
75 
76 //! Returns current sample builder.
77 
78 std::shared_ptr<ISampleBuilder> SampleBuilderNode::builder() const
79 {
80  return m_sample_builder;
81 }
82 
83 //! Returns true if sample builder is set.
84 
85 SampleBuilderNode::operator bool() const
86 {
87  return (bool)m_sample_builder;
88 }
89 
90 //! Fill local parameter pool with parameters from sample builder.
91 
93 {
94  parameterPool()->clear();
95 
96  if (!m_sample_builder)
97  return;
98 
99  m_sample_builder->parameterPool()->copyToExternalPool("", parameterPool());
100 }
Defines the macro ASSERT.
#define ASSERT(condition)
Definition: Assert.h:31
Defines interface ISampleBuilder.
Defines class MultiLayer.
Defines class ParameterPool.
Defines class SampleBuilderNode.
Base class for tree-like structures containing parameterized objects.
Definition: INode.h:49
const std::string & getName() const
ParameterPool * parameterPool() const
Returns pointer to the parameter pool.
void setName(const std::string &name)
void clear()
Clears the parameter map.
Wraps an ISampleBuilder, and puts it in an INode tree.
void setSBN(const std::shared_ptr< ISampleBuilder > &sample_builder)
Sets sample builder and borrows its parameters.
std::shared_ptr< ISampleBuilder > builder() const
Returns current sample builder.
void borrow_builder_parameters()
Fill local parameter pool with parameters from sample builder.
std::shared_ptr< ISampleBuilder > m_sample_builder
SampleBuilderNode & operator=(const SampleBuilderNode &other)
void reset()
Resets to initial state by removing builder and its borrowed parameters.
std::unique_ptr< MultiLayer > createMultiLayer()
Creates a multilayer using sample builder.