BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SampleValidator Class Reference

Validates SampleModel for MultiLayerItem suitable for simulation. More...

Public Member Functions

 SampleValidator ()
 
QString getValidationMessage () const
 
bool isValidMultiLayer (const MultiLayerItem *multilayer)
 

Private Member Functions

void initValidator ()
 
void iterateItems (const SessionItem *parentItem)
 
void validateItem (const SessionItem *item)
 
QString validateMultiLayerItem (const SessionItem *item)
 
QString validateParticleCompositionItem (const SessionItem *item)
 
QString validateParticleCoreShellItem (const SessionItem *item)
 
QString validateParticleDistributionItem (const SessionItem *item)
 
QString validateParticleLayoutItem (const SessionItem *item)
 

Private Attributes

bool m_valid_sample
 
QString m_validation_message
 

Detailed Description

Validates SampleModel for MultiLayerItem suitable for simulation.

Definition at line 24 of file SampleValidator.h.

Constructor & Destructor Documentation

◆ SampleValidator()

SampleValidator::SampleValidator ( )

Definition at line 23 of file SampleValidator.cpp.

23 : m_valid_sample(true) {}

Member Function Documentation

◆ getValidationMessage()

QString SampleValidator::getValidationMessage ( ) const
inline

Definition at line 30 of file SampleValidator.h.

30 { return m_validation_message; }
QString m_validation_message

References m_validation_message.

Referenced by SimulationSetupAssistant::checkMultiLayerItem().

◆ initValidator()

void SampleValidator::initValidator ( )
private

Definition at line 25 of file SampleValidator.cpp.

26 {
27  m_validation_message.clear();
28  m_valid_sample = true;
29 }

References m_valid_sample, and m_validation_message.

Referenced by isValidMultiLayer().

◆ isValidMultiLayer()

bool SampleValidator::isValidMultiLayer ( const MultiLayerItem multilayer)

Definition at line 121 of file SampleValidator.cpp.

122 {
123  initValidator();
124 
125  validateItem(multilayer);
126  iterateItems(multilayer);
127 
128  if (!m_valid_sample) {
130  "Can't setup DWBA simulation for given MultiLayer.\n" + m_validation_message;
131  }
132  return m_valid_sample;
133 }
void validateItem(const SessionItem *item)
void iterateItems(const SessionItem *parentItem)

References initValidator(), iterateItems(), m_valid_sample, m_validation_message, and validateItem().

Referenced by SimulationSetupAssistant::checkMultiLayerItem().

Here is the call graph for this function:

◆ iterateItems()

void SampleValidator::iterateItems ( const SessionItem parentItem)
private

Definition at line 31 of file SampleValidator.cpp.

32 {
33  for (const SessionItem* child : parentItem->children()) {
34  validateItem(child);
35  iterateItems(child);
36  }
37 }
QVector< SessionItem * > children() const
Returns vector of all children.

References SessionItem::children(), iterateItems(), and validateItem().

Referenced by isValidMultiLayer(), and iterateItems().

Here is the call graph for this function:

◆ validateItem()

void SampleValidator::validateItem ( const SessionItem item)
private

Definition at line 39 of file SampleValidator.cpp.

40 {
41  if (!item)
42  return;
43 
44  QString diagnosis;
45 
46  if (item->modelType() == "MultiLayer") {
47  diagnosis = validateMultiLayerItem(item);
48  } else if (item->modelType() == "ParticleLayout") {
49  diagnosis = validateParticleLayoutItem(item);
50  } else if (item->modelType() == "ParticleCoreShell") {
51  diagnosis = validateParticleCoreShellItem(item);
52  } else if (item->modelType() == "ParticleComposition") {
53  diagnosis = validateParticleCompositionItem(item);
54  } else if (item->modelType() == "ParticleDistribution") {
55  diagnosis = validateParticleDistributionItem(item);
56  }
57  if (!diagnosis.isEmpty()) {
58  m_valid_sample = false;
59  m_validation_message += QString("* ") + diagnosis + "\n";
60  }
61 }
QString validateMultiLayerItem(const SessionItem *item)
QString validateParticleCoreShellItem(const SessionItem *item)
QString validateParticleDistributionItem(const SessionItem *item)
QString validateParticleLayoutItem(const SessionItem *item)
QString validateParticleCompositionItem(const SessionItem *item)
QString modelType() const
Get model type.

References m_valid_sample, m_validation_message, SessionItem::modelType(), validateMultiLayerItem(), validateParticleCompositionItem(), validateParticleCoreShellItem(), validateParticleDistributionItem(), and validateParticleLayoutItem().

Referenced by isValidMultiLayer(), and iterateItems().

Here is the call graph for this function:

◆ validateMultiLayerItem()

QString SampleValidator::validateMultiLayerItem ( const SessionItem item)
private

Definition at line 63 of file SampleValidator.cpp.

64 {
65  QString result;
66 
67  QVector<SessionItem*> layers = item->getItems(MultiLayerItem::T_LAYERS);
68 
69  if (layers.isEmpty()) {
70  result = "MultiLayer should contain at least one layer.";
71  } else if (layers.size() == 1) {
72  if (layers.front()->getItems(LayerItem::T_LAYOUTS).isEmpty()) {
73  result = "The single layer in your MultiLayer should contain ParticleLayout.";
74  }
75  }
76  return result;
77 }
static const QString T_LAYOUTS
Definition: LayerItem.h:26
static const QString T_LAYERS
QVector< SessionItem * > getItems(const QString &tag="") const
Returns vector of all items of given tag.

References SessionItem::getItems(), MultiLayerItem::T_LAYERS, and LayerItem::T_LAYOUTS.

Referenced by validateItem().

Here is the call graph for this function:

◆ validateParticleCompositionItem()

QString SampleValidator::validateParticleCompositionItem ( const SessionItem item)
private

Definition at line 103 of file SampleValidator.cpp.

104 {
105  QString result;
106  if (item->getItems(ParticleCompositionItem::T_PARTICLES).isEmpty())
107  result = "ParticleComposition doesn't have any particles.";
108 
109  return result;
110 }
static const QString T_PARTICLES

References SessionItem::getItems(), and ParticleCompositionItem::T_PARTICLES.

Referenced by validateItem().

Here is the call graph for this function:

◆ validateParticleCoreShellItem()

QString SampleValidator::validateParticleCoreShellItem ( const SessionItem item)
private

Definition at line 90 of file SampleValidator.cpp.

91 {
92  QString result;
93 
96 
97  if (core == nullptr || shell == nullptr)
98  result = "ParticleCoreShell doesn't have either core or shell defined.";
99 
100  return result;
101 }
static const QString T_CORE
static const QString T_SHELL
SessionItem * getItem(const QString &tag="", int row=0) const
Returns item in given row of given tag.

References SessionItem::getItem(), ParticleCoreShellItem::T_CORE, and ParticleCoreShellItem::T_SHELL.

Referenced by validateItem().

Here is the call graph for this function:

◆ validateParticleDistributionItem()

QString SampleValidator::validateParticleDistributionItem ( const SessionItem item)
private

Definition at line 112 of file SampleValidator.cpp.

113 {
114  QString result;
115  if (item->getItems(ParticleDistributionItem::T_PARTICLES).isEmpty())
116  result = "ParticleDistribution doesn't have any particle.";
117 
118  return result;
119 }
static const QString T_PARTICLES

References SessionItem::getItems(), and ParticleDistributionItem::T_PARTICLES.

Referenced by validateItem().

Here is the call graph for this function:

◆ validateParticleLayoutItem()

QString SampleValidator::validateParticleLayoutItem ( const SessionItem item)
private

Definition at line 79 of file SampleValidator.cpp.

80 {
81  QString result;
82 
83  QVector<SessionItem*> particles = item->getItems(ParticleLayoutItem::T_PARTICLES);
84  if (particles.isEmpty())
85  result = "ParticleLayout doesn't contain any particles.";
86 
87  return result;
88 }
static const QString T_PARTICLES

References SessionItem::getItems(), and ParticleLayoutItem::T_PARTICLES.

Referenced by validateItem().

Here is the call graph for this function:

Member Data Documentation

◆ m_valid_sample

bool SampleValidator::m_valid_sample
private

Definition at line 44 of file SampleValidator.h.

Referenced by initValidator(), isValidMultiLayer(), and validateItem().

◆ m_validation_message

QString SampleValidator::m_validation_message
private

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