From 1639669325f7c91e63ad2ee08cb60402ef6f557f Mon Sep 17 00:00:00 2001 From: Matthias Puchner <github@mpuchner.de> Date: Tue, 13 Apr 2021 12:19:46 +0200 Subject: [PATCH] remove ParticleDistribution and related classes from GUI --- GUI/coregui/Models/DomainObjectBuilder.cpp | 33 +- GUI/coregui/Models/GUIDomainSampleVisitor.cpp | 12 +- GUI/coregui/Models/GUIExamplesFactory.cpp | 142 ++++---- GUI/coregui/Models/ItemCatalog.cpp | 3 - .../Models/ParticleDistributionItem.cpp | 223 ------------- GUI/coregui/Models/ParticleDistributionItem.h | 50 --- GUI/coregui/Models/SampleValidator.cpp | 12 - GUI/coregui/Models/SampleValidator.h | 1 - GUI/coregui/Models/SessionItemUtils.cpp | 1 - GUI/coregui/Models/TransformFromDomain.cpp | 24 -- GUI/coregui/Models/TransformFromDomain.h | 2 - GUI/coregui/Models/TransformToDomain.cpp | 9 - GUI/coregui/Models/TransformToDomain.h | 1 - .../MaterialEditor/MaterialItemUtils.cpp | 2 - .../RealSpaceWidgets/RealSpaceBuilder.cpp | 11 - .../RealSpaceBuilderUtils.cpp | 50 --- .../RealSpaceMesoCrystalUtils.cpp | 1 - .../Views/SampleDesigner/DesignerHelper.cpp | 3 +- .../ParticleDistributionView.cpp | 37 --- .../SampleDesigner/ParticleDistributionView.h | 32 -- .../SampleDesigner/SampleViewFactory.cpp | 4 - GUI/coregui/Views/widgetbox/widgetbox.xml | 8 - Tests/UnitTests/GUI/TestMapperCases.cpp | 10 - Tests/UnitTests/GUI/TestParticleCoreShell.cpp | 24 -- .../GUI/TestParticleDistributionItem.cpp | 306 ------------------ Tests/UnitTests/GUI/TestParticleItem.cpp | 20 -- 26 files changed, 76 insertions(+), 945 deletions(-) delete mode 100644 GUI/coregui/Models/ParticleDistributionItem.cpp delete mode 100644 GUI/coregui/Models/ParticleDistributionItem.h delete mode 100644 GUI/coregui/Views/SampleDesigner/ParticleDistributionView.cpp delete mode 100644 GUI/coregui/Views/SampleDesigner/ParticleDistributionView.h delete mode 100644 Tests/UnitTests/GUI/TestParticleDistributionItem.cpp diff --git a/GUI/coregui/Models/DomainObjectBuilder.cpp b/GUI/coregui/Models/DomainObjectBuilder.cpp index 059d7ac0179..c9ff0fd72de 100644 --- a/GUI/coregui/Models/DomainObjectBuilder.cpp +++ b/GUI/coregui/Models/DomainObjectBuilder.cpp @@ -22,7 +22,6 @@ #include "GUI/coregui/Models/InstrumentItems.h" #include "GUI/coregui/Models/InterferenceFunctionItems.h" #include "GUI/coregui/Models/LayerItem.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Models/ParticleLayoutItem.h" #include "GUI/coregui/Models/SpecularBeamInclinationItem.h" #include "GUI/coregui/Models/TransformToDomain.h" @@ -73,35 +72,9 @@ std::unique_ptr<ParticleLayout> DomainObjectBuilder::buildParticleLayout(const S P_layout->addParticle(*P_particle); continue; } - if (children[i]->modelType() == "ParticleDistribution") { - auto prop = children[i] - ->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) - .value<ComboProperty>(); - QString par_name = prop.getValue(); - if (par_name == ParticleDistributionItem::NO_SELECTION) { - auto grandchildren = children[i]->getItems(); - if (grandchildren.empty()) { - continue; - } - if (grandchildren.size() > 1) { - throw GUIHelpers::Error("DomainObjectBuilder::buildParticleLayout()" - " -> Error! Too many particles defined" - " in ParticleDistribution"); - } - auto P_particle = TransformToDomain::createIParticle(*grandchildren[0]); - if (P_particle) { - P_layout->addParticle(*P_particle); - } - } else { - auto P_part_distr = TransformToDomain::createParticleDistribution(*children[i]); - if (P_part_distr) { - P_layout->addParticle(*P_part_distr); - } - } - } else { - throw GUIHelpers::Error("DomainObjectBuilder::buildParticleLayout()" - " -> Error! Not implemented"); - } + + throw GUIHelpers::Error("DomainObjectBuilder::buildParticleLayout()" + " -> Error! Not implemented"); } QVector<SessionItem*> interferences = item.getItems(ParticleLayoutItem::T_INTERFERENCE); for (int i = 0; i < interferences.size(); i++) { diff --git a/GUI/coregui/Models/GUIDomainSampleVisitor.cpp b/GUI/coregui/Models/GUIDomainSampleVisitor.cpp index 7e5b309bc67..8ed1d92f13b 100644 --- a/GUI/coregui/Models/GUIDomainSampleVisitor.cpp +++ b/GUI/coregui/Models/GUIDomainSampleVisitor.cpp @@ -22,7 +22,6 @@ #include "GUI/coregui/Models/MesoCrystalItem.h" #include "GUI/coregui/Models/MultiLayerItem.h" #include "GUI/coregui/Models/ParticleCoreShellItem.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Models/ParticleItem.h" #include "GUI/coregui/Models/ParticleLayoutItem.h" #include "GUI/coregui/Models/RotationItems.h" @@ -141,15 +140,8 @@ void GUIDomainSampleVisitor::visit(const Particle* sample) void GUIDomainSampleVisitor::visit(const ParticleDistribution* sample) { - SessionItem* layout_item = m_levelToParentItem[depth() - 1]; - ASSERT(layout_item); - auto particle_distribution_item = - m_sampleModel->insertItem<ParticleDistributionItem>(layout_item); - - TransformFromDomain::setParticleDistributionItem(particle_distribution_item, *sample); - - m_levelToParentItem[depth()] = particle_distribution_item; - m_itemToSample[particle_distribution_item] = sample; + throw std::runtime_error("ParticleDistribution is not present in GUI any more. Visit/Transformation not possible."); + // #baRemoveParticleDistribution + This method has to be removed, when ParticleDistribution is removed also in domain/core } void GUIDomainSampleVisitor::visit(const ParticleCoreShell* sample) diff --git a/GUI/coregui/Models/GUIExamplesFactory.cpp b/GUI/coregui/Models/GUIExamplesFactory.cpp index fb2d727ac95..c328cefb80e 100644 --- a/GUI/coregui/Models/GUIExamplesFactory.cpp +++ b/GUI/coregui/Models/GUIExamplesFactory.cpp @@ -1,72 +1,70 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file GUI/coregui/Models/GUIExamplesFactory.cpp -//! @brief Implements class GUIExamplesFactory -//! -//! @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 "GUI/coregui/Models/GUIExamplesFactory.h" -#include "GUI/coregui/Models/GUIObjectBuilder.h" -#include "Sample/Multilayer/MultiLayer.h" -#include "Sample/StandardSamples/SampleBuilderFactory.h" -#include <memory> - -//! Defines correspondence between example name and real name of simulation from SimulationFactory -QMap<QString, QString> init_NameToRegistry() -{ - QMap<QString, QString> result; - result["example01"] = "CylindersAndPrismsBuilder"; - result["example02"] = "RadialParaCrystalBuilder"; - result["example03"] = "HexParaCrystalBuilder"; - result["example04"] = "CoreShellParticleBuilder"; - result["example05"] = "MultiLayerWithRoughnessBuilder"; - result["example06"] = "SquareLattice2DBuilder"; - result["example07"] = "RotatedPyramidsBuilder"; - result["example08"] = "CylindersWithSizeDistributionBuilder"; - result["example09"] = "ParticleCompositionBuilder"; - result["example10"] = "MesoCrystalBuilder"; - - // temporary for testing - // result["example09"] = "MultipleLayoutBuilder"; - // result["example09"] = "TwoTypesCylindersDistributionBuilder"; - // result["example09"] = "RectParaCrystalBuilder"; - // result["example09"] = "SizeDistributionLMAModelBuilder"; - // result["example09"] = "CylindersInSSCABuilder"; - // result["example09"] = "TransformBoxBuilder"; - // result["example09"] = "BoxCompositionRotateZandYBuilder"; - // result["example09"] = "CoreShellBoxRotateZandYBuilder"; - // result["example09"] = "BoxStackCompositionBuilder"; - // result["example09"] = "CylindersWithSizeDistributionBuilder"; - // result["example09"] = "LargeCylindersInDWBABuilder"; - // result["example09"] = "SlicedCompositionBuilder"; - // result["example09"] = "RotatedPyramidsDistributionBuilder"; - // result["example09"] = "SpheresWithLimitsDistributionBuilder"; - // result["example09"] = "ConesWithLimitsDistributionBuilder"; - return result; -} - -QMap<QString, QString> GUIExamplesFactory::m_name_to_registry = init_NameToRegistry(); - -bool GUIExamplesFactory::isValidExampleName(const QString& name) -{ - return m_name_to_registry.contains(name); -} - -//! Populate sample model with -SessionItem* GUIExamplesFactory::createSampleItems(const QString& name, SampleModel* sampleModel, - MaterialModel* materialModel) -{ - QString exampleName = m_name_to_registry[name]; - - SampleBuilderFactory factory; - const std::unique_ptr<MultiLayer> sample(factory.createSampleByName(exampleName.toStdString())); - - return GUIObjectBuilder::populateSampleModel(sampleModel, materialModel, *sample.get(), name); -} +// ************************************************************************************************ +// +// BornAgain: simulate and fit reflection and scattering +// +//! @file GUI/coregui/Models/GUIExamplesFactory.cpp +//! @brief Implements class GUIExamplesFactory +//! +//! @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 "GUI/coregui/Models/GUIExamplesFactory.h" +#include "GUI/coregui/Models/GUIObjectBuilder.h" +#include "Sample/Multilayer/MultiLayer.h" +#include "Sample/StandardSamples/SampleBuilderFactory.h" +#include <memory> + +//! Defines correspondence between example name and real name of simulation from SimulationFactory +QMap<QString, QString> init_NameToRegistry() +{ + QMap<QString, QString> result; + result["example01"] = "CylindersAndPrismsBuilder"; + result["example02"] = "RadialParaCrystalBuilder"; + result["example03"] = "HexParaCrystalBuilder"; + result["example04"] = "CoreShellParticleBuilder"; + result["example05"] = "MultiLayerWithRoughnessBuilder"; + result["example06"] = "SquareLattice2DBuilder"; + result["example07"] = "RotatedPyramidsBuilder"; + result["example09"] = "ParticleCompositionBuilder"; + result["example10"] = "MesoCrystalBuilder"; + + // temporary for testing + // result["example09"] = "MultipleLayoutBuilder"; + // result["example09"] = "TwoTypesCylindersDistributionBuilder"; + // result["example09"] = "RectParaCrystalBuilder"; + // result["example09"] = "SizeDistributionLMAModelBuilder"; + // result["example09"] = "CylindersInSSCABuilder"; + // result["example09"] = "TransformBoxBuilder"; + // result["example09"] = "BoxCompositionRotateZandYBuilder"; + // result["example09"] = "CoreShellBoxRotateZandYBuilder"; + // result["example09"] = "BoxStackCompositionBuilder"; + // result["example09"] = "LargeCylindersInDWBABuilder"; + // result["example09"] = "SlicedCompositionBuilder"; + // result["example09"] = "RotatedPyramidsDistributionBuilder"; + // result["example09"] = "SpheresWithLimitsDistributionBuilder"; + // result["example09"] = "ConesWithLimitsDistributionBuilder"; + return result; +} + +QMap<QString, QString> GUIExamplesFactory::m_name_to_registry = init_NameToRegistry(); + +bool GUIExamplesFactory::isValidExampleName(const QString& name) +{ + return m_name_to_registry.contains(name); +} + +//! Populate sample model with +SessionItem* GUIExamplesFactory::createSampleItems(const QString& name, SampleModel* sampleModel, + MaterialModel* materialModel) +{ + QString exampleName = m_name_to_registry[name]; + + SampleBuilderFactory factory; + const std::unique_ptr<MultiLayer> sample(factory.createSampleByName(exampleName.toStdString())); + + return GUIObjectBuilder::populateSampleModel(sampleModel, materialModel, *sample.get(), name); +} diff --git a/GUI/coregui/Models/ItemCatalog.cpp b/GUI/coregui/Models/ItemCatalog.cpp index 96e0cbc2460..91829079be1 100644 --- a/GUI/coregui/Models/ItemCatalog.cpp +++ b/GUI/coregui/Models/ItemCatalog.cpp @@ -43,7 +43,6 @@ #include "GUI/coregui/Models/ParameterTreeItems.h" #include "GUI/coregui/Models/ParticleCompositionItem.h" #include "GUI/coregui/Models/ParticleCoreShellItem.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Models/ParticleItem.h" #include "GUI/coregui/Models/ParticleLayoutItem.h" #include "GUI/coregui/Models/PointwiseAxisItem.h" @@ -71,7 +70,6 @@ ItemCatalog::ItemCatalog() add("Rotation", create_new<TransformationItem>); add("ParticleCoreShell", create_new<ParticleCoreShellItem>); add("ParticleComposition", create_new<ParticleCompositionItem>); - add("ParticleDistribution", create_new<ParticleDistributionItem>); add("MesoCrystal", create_new<MesoCrystalItem>); add("Interference1DLattice", create_new<InterferenceFunction1DLatticeItem>); add("Interference2DLattice", create_new<InterferenceFunction2DLatticeItem>); @@ -258,7 +256,6 @@ QStringList ItemCatalog::validTopItemTypes() "ParticleCoreShell", "ParticleComposition", "MesoCrystal", - "ParticleDistribution", "Rotation", "Interference1DLattice", "Interference2DLattice", diff --git a/GUI/coregui/Models/ParticleDistributionItem.cpp b/GUI/coregui/Models/ParticleDistributionItem.cpp deleted file mode 100644 index 176c154a10a..00000000000 --- a/GUI/coregui/Models/ParticleDistributionItem.cpp +++ /dev/null @@ -1,223 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file GUI/coregui/Models/ParticleDistributionItem.cpp -//! @brief Implements class ParticleDistributionItem -//! -//! @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 "GUI/coregui/Models/ParticleDistributionItem.h" -#include "Base/Const/Units.h" -#include "GUI/coregui/Models/ComboProperty.h" -#include "GUI/coregui/Models/DistributionItems.h" -#include "GUI/coregui/Models/ParameterTreeUtils.h" -#include "GUI/coregui/Models/ParticleItem.h" -#include "GUI/coregui/Models/RealLimitsItems.h" -#include "GUI/coregui/Models/TransformFromDomain.h" -#include "GUI/coregui/Models/TransformToDomain.h" -#include "GUI/coregui/utils/GUIHelpers.h" -#include "Param/Varia/ParameterUtils.h" - -namespace { -const QString abundance_tooltip = "Proportion of this type of particles normalized to the \n" - "total number of particles in the layout"; -} - -const QString ParticleDistributionItem::P_DISTRIBUTED_PARAMETER = "Distributed parameter"; -const QString ParticleDistributionItem::P_LINKED_PARAMETER = "Linked parameter"; -const QString ParticleDistributionItem::P_DISTRIBUTION = "Distribution"; -const QString ParticleDistributionItem::NO_SELECTION = "None"; -const QString ParticleDistributionItem::T_PARTICLES = "Particle Tag"; - -ParticleDistributionItem::ParticleDistributionItem() : SessionGraphicsItem("ParticleDistribution") -{ - setToolTip("Collection of particles obtained via parametric distribution " - "of particle prototype"); - - addProperty(ParticleItem::P_ABUNDANCE, 1.0) - ->setLimits(RealLimits::limited(0.0, 1.0)) - .setDecimals(3) - .setToolTip(abundance_tooltip); - - addGroupProperty(P_DISTRIBUTION, "Distribution group") - ->setToolTip("Distribution to apply to the specified parameter"); - - registerTag(T_PARTICLES, 0, 1, - QStringList() << "Particle" - << "ParticleCoreShell" - << "ParticleComposition" - << "MesoCrystal"); - setDefaultTag(T_PARTICLES); - - ComboProperty par_prop; - addProperty(P_DISTRIBUTED_PARAMETER, par_prop.variant())->setToolTip("Parameter to distribute"); - - addProperty(P_LINKED_PARAMETER, par_prop.variant()) - ->setToolTip("Linked parameter") - .setEditorType("MultiSelectionComboEditor"); - - updateMainParameterList(); - - mapper()->setOnAnyChildChange([this](SessionItem* item) { - // prevent infinit loop when item changes its own properties - if (item && item->modelType() == "Property" && item->parent() == this) - return; - updateMainParameterList(); - }); - - mapper()->setOnPropertyChange([this](const QString& name) { - if (name == P_DISTRIBUTED_PARAMETER) - updateLinkedParameterList(); - }); -} - -std::unique_ptr<ParticleDistribution> ParticleDistributionItem::createParticleDistribution() const -{ - if (children().empty()) - return nullptr; - std::unique_ptr<IParticle> P_particle = TransformToDomain::createIParticle(*getItem()); - if (!P_particle) - throw GUIHelpers::Error("DomainObjectBuilder::buildParticleDistribution()" - " -> Error! No correct particle defined"); - auto& distr_item = groupItem<DistributionItem>(ParticleDistributionItem::P_DISTRIBUTION); - - std::string domain_par = domainMainParameter(); - - double scale = ParameterUtils::isAngleRelated(domain_par) ? Units::deg : 1.0; - auto P_distribution = distr_item.createDistribution(scale); - - RealLimits limits = RealLimits::limitless(); - if (distr_item.isTag(DistributionItem::P_LIMITS)) { - auto& limitsItem = distr_item.groupItem<RealLimitsItem>(DistributionItem::P_LIMITS); - limits = limitsItem.createRealLimits(scale); - } - - int nbr_samples = distr_item.getItemValue(DistributionItem::P_NUMBER_OF_SAMPLES).toInt(); - double sigma_factor = distr_item.isTag(DistributionItem::P_SIGMA_FACTOR) - ? distr_item.getItemValue(DistributionItem::P_SIGMA_FACTOR).toDouble() - : 0.0; - ParameterDistribution par_distr(domain_par, *P_distribution, static_cast<size_t>(nbr_samples), - sigma_factor, limits); - - for (auto name : domainLinkedParameters()) - par_distr.linkParameter(name); - - auto result = std::make_unique<ParticleDistribution>(*P_particle, par_distr); - double abundance = getItemValue(ParticleItem::P_ABUNDANCE).toDouble(); - result->setAbundance(abundance); - return result; -} - -void ParticleDistributionItem::setDomainCacheNames(const QString& name, const QStringList& linked) -{ - m_domain_cache_name = name; - m_linked_names = linked; -} - -void ParticleDistributionItem::updateMainParameterList() -{ - if (!isTag(P_DISTRIBUTED_PARAMETER)) - return; - - QString currentValue = getItemValue(P_DISTRIBUTED_PARAMETER).value<ComboProperty>().getValue(); - - if (!m_domain_cache_name.isEmpty() && childParticle()) { - QString guiName = translateParameterNameToGUI(m_domain_cache_name); - if (!guiName.isEmpty()) { // might be empty because item was not fully constructed yet - currentValue = guiName; - m_domain_cache_name.clear(); - } - } - - QStringList par_names = QStringList() << NO_SELECTION << childParameterNames(); - ComboProperty newProp = ComboProperty::fromList(par_names, NO_SELECTION); - - if (newProp.getValues().contains(currentValue)) - newProp.setValue(currentValue); - - setItemValue(P_DISTRIBUTED_PARAMETER, newProp.variant()); -} - -void ParticleDistributionItem::updateLinkedParameterList() -{ - if (!isTag(P_LINKED_PARAMETER) || !isTag(P_DISTRIBUTED_PARAMETER)) - return; - - QString mainValue = getItemValue(P_DISTRIBUTED_PARAMETER).value<ComboProperty>().getValue(); - - QStringList par_names = childParameterNames(); - par_names.removeAll(mainValue); - - ComboProperty linkedProp = getItemValue(P_LINKED_PARAMETER).value<ComboProperty>(); - QStringList currentValues = linkedProp.selectedValues(); - - if (!m_linked_names.isEmpty() && childParticle()) { - QStringList domainValues; - for (auto par : m_linked_names) { - QString guiName = translateParameterNameToGUI(par); - if (!guiName.isEmpty()) - domainValues.append(guiName); - } - if (!domainValues.isEmpty()) { - currentValues = domainValues; - m_linked_names.clear(); - } - } - - ComboProperty newProp = ComboProperty::fromList(par_names); - for (auto name : currentValues) - newProp.setSelected(name, true); - - setItemValue(P_LINKED_PARAMETER, newProp.variant()); -} - -QStringList ParticleDistributionItem::childParameterNames() const -{ - if (auto child = childParticle()) { - auto result = ParameterTreeUtils::parameterTreeNames(child); - result.removeAll(ParticleItem::P_ABUNDANCE); - return result; - } - - return {}; -} - -QString ParticleDistributionItem::translateParameterNameToGUI(const QString& domainName) -{ - if (auto child = childParticle()) - return ParameterTreeUtils::domainNameToParameterName(domainName, child); - return {}; -} - -const SessionItem* ParticleDistributionItem::childParticle() const -{ - if (getItems(T_PARTICLES).empty()) - return nullptr; - - ASSERT(getItems(T_PARTICLES).size() == 1); - return getItems(T_PARTICLES).front(); -} - -std::string ParticleDistributionItem::domainMainParameter() const -{ - auto par_name = getItemValue(P_DISTRIBUTED_PARAMETER).value<ComboProperty>().getValue(); - return ParameterTreeUtils::parameterNameToDomainName(par_name, childParticle()).toStdString(); -} - -std::vector<std::string> ParticleDistributionItem::domainLinkedParameters() const -{ - std::vector<std::string> result; - auto linked_names = getItemValue(P_LINKED_PARAMETER).value<ComboProperty>().selectedValues(); - for (auto name : linked_names) { - auto translated = ParameterTreeUtils::parameterNameToDomainName(name, childParticle()); - if (!translated.isEmpty()) - result.push_back(translated.toStdString()); - } - return result; -} diff --git a/GUI/coregui/Models/ParticleDistributionItem.h b/GUI/coregui/Models/ParticleDistributionItem.h deleted file mode 100644 index d538da68a2f..00000000000 --- a/GUI/coregui/Models/ParticleDistributionItem.h +++ /dev/null @@ -1,50 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file GUI/coregui/Models/ParticleDistributionItem.h -//! @brief Defines class ParticleDistributionItem -//! -//! @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) -// -// ************************************************************************************************ - -#ifndef BORNAGAIN_GUI_COREGUI_MODELS_PARTICLEDISTRIBUTIONITEM_H -#define BORNAGAIN_GUI_COREGUI_MODELS_PARTICLEDISTRIBUTIONITEM_H - -#include "GUI/coregui/Models/SessionGraphicsItem.h" -#include "Sample/Particle/ParticleDistribution.h" -#include <string> -#include <vector> - -class BA_CORE_API_ ParticleDistributionItem : public SessionGraphicsItem { -public: - static const QString P_DISTRIBUTED_PARAMETER; - static const QString P_LINKED_PARAMETER; - static const QString P_DISTRIBUTION; - static const QString NO_SELECTION; - static const QString T_PARTICLES; - ParticleDistributionItem(); - - std::unique_ptr<ParticleDistribution> createParticleDistribution() const; - - void setDomainCacheNames(const QString& name, const QStringList& linked); - -private: - void updateMainParameterList(); - void updateLinkedParameterList(); - QStringList childParameterNames() const; - QString translateParameterNameToGUI(const QString& domainName); - const SessionItem* childParticle() const; - - std::string domainMainParameter() const; - std::vector<std::string> domainLinkedParameters() const; - - QString m_domain_cache_name; - QStringList m_linked_names; -}; - -#endif // BORNAGAIN_GUI_COREGUI_MODELS_PARTICLEDISTRIBUTIONITEM_H diff --git a/GUI/coregui/Models/SampleValidator.cpp b/GUI/coregui/Models/SampleValidator.cpp index e5c328d0c64..bfe3fa4b9d2 100644 --- a/GUI/coregui/Models/SampleValidator.cpp +++ b/GUI/coregui/Models/SampleValidator.cpp @@ -17,7 +17,6 @@ #include "GUI/coregui/Models/MultiLayerItem.h" #include "GUI/coregui/Models/ParticleCompositionItem.h" #include "GUI/coregui/Models/ParticleCoreShellItem.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Models/ParticleLayoutItem.h" SampleValidator::SampleValidator() : m_valid_sample(true) {} @@ -51,8 +50,6 @@ void SampleValidator::validateItem(const SessionItem* item) diagnosis = validateParticleCoreShellItem(item); } else if (item->modelType() == "ParticleComposition") { diagnosis = validateParticleCompositionItem(item); - } else if (item->modelType() == "ParticleDistribution") { - diagnosis = validateParticleDistributionItem(item); } if (!diagnosis.isEmpty()) { m_valid_sample = false; @@ -109,15 +106,6 @@ QString SampleValidator::validateParticleCompositionItem(const SessionItem* item return result; } -QString SampleValidator::validateParticleDistributionItem(const SessionItem* item) -{ - QString result; - if (item->getItems(ParticleDistributionItem::T_PARTICLES).isEmpty()) - result = "ParticleDistribution doesn't have any particle."; - - return result; -} - bool SampleValidator::isValidMultiLayer(const MultiLayerItem* multilayer) { initValidator(); diff --git a/GUI/coregui/Models/SampleValidator.h b/GUI/coregui/Models/SampleValidator.h index 5c9ebe8db81..589a1d75768 100644 --- a/GUI/coregui/Models/SampleValidator.h +++ b/GUI/coregui/Models/SampleValidator.h @@ -39,7 +39,6 @@ private: QString validateParticleLayoutItem(const SessionItem* item); QString validateParticleCoreShellItem(const SessionItem* item); QString validateParticleCompositionItem(const SessionItem* item); - QString validateParticleDistributionItem(const SessionItem* item); bool m_valid_sample; QString m_validation_message; diff --git a/GUI/coregui/Models/SessionItemUtils.cpp b/GUI/coregui/Models/SessionItemUtils.cpp index 44a4b3411f4..ddbe86bb757 100644 --- a/GUI/coregui/Models/SessionItemUtils.cpp +++ b/GUI/coregui/Models/SessionItemUtils.cpp @@ -34,7 +34,6 @@ QStringList parents_with_abundance() { return QStringList() << "ParticleCoreShell" << "ParticleComposition" - << "ParticleDistribution" << "MesoCrystal"; } diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp index fbd3dbb7775..8684ac9b963 100644 --- a/GUI/coregui/Models/TransformFromDomain.cpp +++ b/GUI/coregui/Models/TransformFromDomain.cpp @@ -44,7 +44,6 @@ #include "GUI/coregui/Models/LayerItem.h" #include "GUI/coregui/Models/LayerRoughnessItems.h" #include "GUI/coregui/Models/MaskItems.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Models/ParticleItem.h" #include "GUI/coregui/Models/RectangularDetectorItem.h" #include "GUI/coregui/Models/ResolutionFunctionItems.h" @@ -199,29 +198,6 @@ void TransformFromDomain::setRoughnessItem(SessionItem* item, const LayerRoughne sample.getLatteralCorrLength()); } -//! Initialization of ParticleDistributionItem -void TransformFromDomain::setParticleDistributionItem(SessionItem* item, - const ParticleDistribution& sample) -{ - ParticleDistributionItem* distItem = dynamic_cast<ParticleDistributionItem*>(item); - ASSERT(distItem); - - distItem->setItemValue(ParticleItem::P_ABUNDANCE, sample.abundance()); - - ParameterDistribution par_distr = sample.parameterDistribution(); - QString main_distr_par_name = QString::fromStdString(par_distr.getMainParameterName()); - QStringList linked_pars = GUIHelpers::fromStdStrings(par_distr.getLinkedParameterNames()); - - distItem->setDomainCacheNames(main_distr_par_name, linked_pars); - - double unit_factor(1.0); - if (sample.mainUnits() == "rad") - unit_factor = 1. / Units::deg; - - QString group_name = ParticleDistributionItem::P_DISTRIBUTION; - setDistribution(distItem, par_distr, group_name, unit_factor); -} - //! Returns true if given roughness is non-zero roughness bool TransformFromDomain::isValidRoughness(const LayerRoughness* roughness) { diff --git a/GUI/coregui/Models/TransformFromDomain.h b/GUI/coregui/Models/TransformFromDomain.h index 0459e025366..1f2f8a10870 100644 --- a/GUI/coregui/Models/TransformFromDomain.h +++ b/GUI/coregui/Models/TransformFromDomain.h @@ -68,8 +68,6 @@ void setLayerItem(SessionItem* layer_item, const Layer* layer, const LayerInterf void setRoughnessItem(SessionItem* item, const LayerRoughness& sample); -void setParticleDistributionItem(SessionItem* item, const ParticleDistribution& sample); - bool isValidRoughness(const LayerRoughness* roughness); void setGISASBeamItem(BeamItem* beam_item, const GISASSimulation& simulation); diff --git a/GUI/coregui/Models/TransformToDomain.cpp b/GUI/coregui/Models/TransformToDomain.cpp index 727bcb8c302..1b8aa5f54ed 100644 --- a/GUI/coregui/Models/TransformToDomain.cpp +++ b/GUI/coregui/Models/TransformToDomain.cpp @@ -33,7 +33,6 @@ #include "GUI/coregui/Models/MultiLayerItem.h" #include "GUI/coregui/Models/ParticleCompositionItem.h" #include "GUI/coregui/Models/ParticleCoreShellItem.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Models/ParticleItem.h" #include "GUI/coregui/Models/ParticleLayoutItem.h" #include "GUI/coregui/Models/RectangularDetectorItem.h" @@ -135,14 +134,6 @@ std::unique_ptr<IParticle> TransformToDomain::createIParticle(const SessionItem& return P_particle; } -std::unique_ptr<ParticleDistribution> -TransformToDomain::createParticleDistribution(const SessionItem& item) -{ - auto& particle_distribution = static_cast<const ParticleDistributionItem&>(item); - auto P_part_distr = particle_distribution.createParticleDistribution(); - return P_part_distr; -} - //! adds DistributionParameters to the ISimulation void TransformToDomain::addDistributionParametersToSimulation(const SessionItem& beam_item, GISASSimulation& simulation) diff --git a/GUI/coregui/Models/TransformToDomain.h b/GUI/coregui/Models/TransformToDomain.h index 4be2ec678b1..be3b3400198 100644 --- a/GUI/coregui/Models/TransformToDomain.h +++ b/GUI/coregui/Models/TransformToDomain.h @@ -40,7 +40,6 @@ std::unique_ptr<IParticle> createIParticle(const SessionItem& item); std::unique_ptr<Layer> createLayer(const SessionItem& item); std::unique_ptr<LayerRoughness> createLayerRoughness(const SessionItem& item); std::unique_ptr<MultiLayer> createMultiLayer(const SessionItem& item); -std::unique_ptr<ParticleDistribution> createParticleDistribution(const SessionItem& item); std::unique_ptr<ParticleLayout> createParticleLayout(const SessionItem& item); void addDistributionParametersToSimulation(const SessionItem& beam_item, diff --git a/GUI/coregui/Views/MaterialEditor/MaterialItemUtils.cpp b/GUI/coregui/Views/MaterialEditor/MaterialItemUtils.cpp index c2902c2331d..bfd2524af72 100644 --- a/GUI/coregui/Views/MaterialEditor/MaterialItemUtils.cpp +++ b/GUI/coregui/Views/MaterialEditor/MaterialItemUtils.cpp @@ -21,7 +21,6 @@ #include "GUI/coregui/Models/MesoCrystalItem.h" #include "GUI/coregui/Models/ParticleCompositionItem.h" #include "GUI/coregui/Models/ParticleCoreShellItem.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Models/ParticleItem.h" #include "GUI/coregui/Models/ParticleLayoutItem.h" #include "GUI/coregui/Views/MaterialEditor/MaterialEditorDialog.h" @@ -38,7 +37,6 @@ std::map<QString, QString> get_tag_map() { std::map<QString, QString> result = { {"ParticleComposition", ParticleCompositionItem::T_PARTICLES}, - {"ParticleDistribution", ParticleDistributionItem::T_PARTICLES}, {"ParticleLayout", ParticleLayoutItem::T_PARTICLES}, {"MesoCrystal", MesoCrystalItem::T_BASIS_PARTICLE}}; return result; diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceBuilder.cpp b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceBuilder.cpp index 07d2472f90f..c269d1a80a6 100644 --- a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceBuilder.cpp +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceBuilder.cpp @@ -21,7 +21,6 @@ #include "GUI/coregui/Models/MultiLayerItem.h" #include "GUI/coregui/Models/ParticleCompositionItem.h" #include "GUI/coregui/Models/ParticleCoreShellItem.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Models/ParticleItem.h" #include "GUI/coregui/Models/ParticleLayoutItem.h" #include "GUI/coregui/Models/VectorItem.h" @@ -71,9 +70,6 @@ void RealSpaceBuilder::populate(RealSpaceModel* model, const SessionItem& item, else if (item.modelType() == "ParticleCoreShell") populateParticleFromParticleItem(model, item); - else if (item.modelType() == "ParticleDistribution") - populateParticleFromParticleItem(model, item); - else if (item.modelType() == "MesoCrystal") populateParticleFromParticleItem(model, item); } @@ -158,13 +154,6 @@ void RealSpaceBuilder::populateParticleFromParticleItem(RealSpaceModel* model, auto particleComposition = particleCompositionItem->createParticleComposition(); particle3DContainer = RealSpaceBuilderUtils::particleComposition3DContainer(*particleComposition); - } else if (particleItem.modelType() == "ParticleDistribution") { - auto particleDistributionItem = - dynamic_cast<const ParticleDistributionItem*>(&particleItem); - // If there is no particle to populate inside ParticleDistributionItem - if (!particleDistributionItem->getItem(ParticleDistributionItem::T_PARTICLES)) - return; - // show nothing when ParticleDistributionItem is selected } else if (particleItem.modelType() == "MesoCrystal") { auto mesoCrystalItem = dynamic_cast<const MesoCrystalItem*>(&particleItem); // If there is no particle to populate inside MesoCrystalItem diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp index a85e8d4ad4e..638db6f3bab 100644 --- a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp @@ -23,7 +23,6 @@ #include "GUI/coregui/Models/MultiLayerItem.h" #include "GUI/coregui/Models/ParticleCompositionItem.h" #include "GUI/coregui/Models/ParticleCoreShellItem.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Models/ParticleItem.h" #include "GUI/coregui/Models/ParticleLayoutItem.h" #include "GUI/coregui/Models/RotationItems.h" @@ -248,21 +247,6 @@ RealSpaceBuilderUtils::particle3DContainerVector(const SessionItem& layoutItem, auto particleComposition = particleCompositionItem->createParticleComposition(); particle3DContainer = particleComposition3DContainer(*particleComposition, total_abundance, origin); - } else if (particleItem->modelType() == "ParticleDistribution") { - auto particleDistributionItem = - dynamic_cast<const ParticleDistributionItem*>(particleItem); - // If there is no particle to populate inside ParticleDistributionItem - if (!particleDistributionItem->getItem(ParticleDistributionItem::T_PARTICLES)) - continue; - auto particleDistribution = particleDistributionItem->createParticleDistribution(); - std::vector<Particle3DContainer> pd_ContainerVector = - particleDistribution3DContainer(*particleDistribution, total_abundance, origin); - for (size_t i = 0; i < pd_ContainerVector.size(); ++i) { - cumulative_abundance += pd_ContainerVector[i].cumulativeAbundance(); - pd_ContainerVector[i].setCumulativeAbundance(cumulative_abundance); - particle3DContainer_vector.emplace_back(std::move(pd_ContainerVector[i])); - } - continue; } else if (particleItem->modelType() == "MesoCrystal") { auto mesoCrystalItem = dynamic_cast<const MesoCrystalItem*>(particleItem); // If there is no particle to populate inside MesoCrystalItem @@ -379,40 +363,6 @@ Particle3DContainer RealSpaceBuilderUtils::particleComposition3DContainer( return particleComposition3DContainer; } -std::vector<Particle3DContainer> RealSpaceBuilderUtils::particleDistribution3DContainer( - const ParticleDistribution& particleDistribution, double total_abundance, - const QVector3D& origin) -{ - auto pd_vector = particleDistribution.generateParticles(); - - std::vector<Particle3DContainer> particleDistribution3DContainer_vector; - - for (auto pd_particle : pd_vector) { - Particle3DContainer particle3DContainer; - if (dynamic_cast<const ParticleComposition*>(pd_particle)) { - auto particleComposition = dynamic_cast<const ParticleComposition*>(pd_particle); - particle3DContainer = - particleComposition3DContainer(*particleComposition, total_abundance, origin); - } else if (dynamic_cast<const ParticleCoreShell*>(pd_particle)) { - auto particleCoreShell = dynamic_cast<const ParticleCoreShell*>(pd_particle); - particle3DContainer = - particleCoreShell3DContainer(*particleCoreShell, total_abundance, origin); - } else if (dynamic_cast<const MesoCrystal*>(pd_particle)) { - // TODO: Implement method to populate MesoCrystal from CORE and NOT from MesoCrystalItem - // as it is done currently in RealSpaceBuilderUtils::mesoCrystal3DContainer - std::ostringstream ostr; - ostr << "Sorry, MesoCrystal inside ParticleDistribution not yet implemented"; - ostr << "\n\nStay tuned!"; - throw std::runtime_error(ostr.str()); - } else { - auto particle = dynamic_cast<const Particle*>(pd_particle); - particle3DContainer = singleParticle3DContainer(*particle, total_abundance, origin); - } - particleDistribution3DContainer_vector.emplace_back(std::move(particle3DContainer)); - } - return particleDistribution3DContainer_vector; -} - Particle3DContainer RealSpaceBuilderUtils::mesoCrystal3DContainer(const MesoCrystalItem& mesoCrystalItem, double total_abundance, const QVector3D& origin) diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceMesoCrystalUtils.cpp b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceMesoCrystalUtils.cpp index ae719eae22d..7357b3db188 100644 --- a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceMesoCrystalUtils.cpp +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceMesoCrystalUtils.cpp @@ -18,7 +18,6 @@ #include "GUI/coregui/Models/MesoCrystalItem.h" #include "GUI/coregui/Models/ParticleCompositionItem.h" #include "GUI/coregui/Models/ParticleCoreShellItem.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Views/RealSpaceWidgets/Particle3DContainer.h" #include "GUI/coregui/Views/RealSpaceWidgets/RealSpaceBuilderUtils.h" #include "GUI/coregui/Views/RealSpaceWidgets/TransformTo3D.h" diff --git a/GUI/coregui/Views/SampleDesigner/DesignerHelper.cpp b/GUI/coregui/Views/SampleDesigner/DesignerHelper.cpp index 7994a1d5b66..dd9bccdb8ec 100644 --- a/GUI/coregui/Views/SampleDesigner/DesignerHelper.cpp +++ b/GUI/coregui/Views/SampleDesigner/DesignerHelper.cpp @@ -164,8 +164,7 @@ QRectF DesignerHelper::getDefaultBoundingRect(const QString& name) return getParticleLayoutBoundingRect(); } else if (name == "Rotation") { return getTransformationBoundingRect(); - } else if (name.startsWith("FormFactor") || name == "Particle" || name == "ParticleCoreShell" - || name == "ParticleDistribution") { + } else if (name.startsWith("FormFactor") || name == "Particle" || name == "ParticleCoreShell") { return getParticleBoundingRect(); } else if (name.startsWith("Interference")) { return getInterferenceFunctionBoundingRect(); diff --git a/GUI/coregui/Views/SampleDesigner/ParticleDistributionView.cpp b/GUI/coregui/Views/SampleDesigner/ParticleDistributionView.cpp deleted file mode 100644 index ad0a88f38b2..00000000000 --- a/GUI/coregui/Views/SampleDesigner/ParticleDistributionView.cpp +++ /dev/null @@ -1,37 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file GUI/coregui/Views/SampleDesigner/ParticleDistributionView.cpp -//! @brief Implements class ParticleDistributionView -//! -//! @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 "GUI/coregui/Views/SampleDesigner/ParticleDistributionView.h" -#include "GUI/coregui/Models/SessionItem.h" -#include "GUI/coregui/Views/SampleDesigner/DesignerHelper.h" -#include "GUI/coregui/utils/StyleUtils.h" - -ParticleDistributionView::ParticleDistributionView(QGraphicsItem* parent) : ConnectableView(parent) -{ - setName("ParticleDistribution"); - setColor(DesignerHelper::getDefaultParticleColor()); - setRectangle(DesignerHelper::getDefaultBoundingRect("ParticleDistribution")); - addPort("out", NodeEditorPort::OUTPUT, NodeEditorPort::FORM_FACTOR) - ->setToolTip("Connect to the ParticleLayout"); - addPort("particle", NodeEditorPort::INPUT, NodeEditorPort::FORM_FACTOR) - ->setToolTip("Connect particle to this port. It will be a prototype \n" - "for parametric distribution."); - - m_label_vspace = StyleUtils::SizeOfLetterM().height() * 3.0; -} - -void ParticleDistributionView::addView(IView* childView, int /* row */) -{ - connectInputPort(dynamic_cast<ConnectableView*>(childView), 0); -} diff --git a/GUI/coregui/Views/SampleDesigner/ParticleDistributionView.h b/GUI/coregui/Views/SampleDesigner/ParticleDistributionView.h deleted file mode 100644 index 65c1bf738a5..00000000000 --- a/GUI/coregui/Views/SampleDesigner/ParticleDistributionView.h +++ /dev/null @@ -1,32 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file GUI/coregui/Views/SampleDesigner/ParticleDistributionView.h -//! @brief Defines class ParticleDistributionView -//! -//! @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) -// -// ************************************************************************************************ - -#ifndef BORNAGAIN_GUI_COREGUI_VIEWS_SAMPLEDESIGNER_PARTICLEDISTRIBUTIONVIEW_H -#define BORNAGAIN_GUI_COREGUI_VIEWS_SAMPLEDESIGNER_PARTICLEDISTRIBUTIONVIEW_H - -#include "GUI/coregui/Views/SampleDesigner/ConnectableView.h" - -//! Class representing view of distributed particle item -class ParticleDistributionView : public ConnectableView { - Q_OBJECT - -public: - ParticleDistributionView(QGraphicsItem* parent = 0); - - int type() const { return ViewTypes::PARTICLE; } - - void addView(IView* childView, int row = 0); -}; - -#endif // BORNAGAIN_GUI_COREGUI_VIEWS_SAMPLEDESIGNER_PARTICLEDISTRIBUTIONVIEW_H diff --git a/GUI/coregui/Views/SampleDesigner/SampleViewFactory.cpp b/GUI/coregui/Views/SampleDesigner/SampleViewFactory.cpp index 88bc84ae98a..cf5d3243ab3 100644 --- a/GUI/coregui/Views/SampleDesigner/SampleViewFactory.cpp +++ b/GUI/coregui/Views/SampleDesigner/SampleViewFactory.cpp @@ -19,7 +19,6 @@ #include "GUI/coregui/Views/SampleDesigner/MultiLayerView.h" #include "GUI/coregui/Views/SampleDesigner/ParticleCompositionView.h" #include "GUI/coregui/Views/SampleDesigner/ParticleCoreShellView.h" -#include "GUI/coregui/Views/SampleDesigner/ParticleDistributionView.h" #include "GUI/coregui/Views/SampleDesigner/ParticleLayoutView.h" #include "GUI/coregui/Views/SampleDesigner/ParticleView.h" #include "GUI/coregui/Views/SampleDesigner/TransformationView.h" @@ -33,7 +32,6 @@ QStringList SampleViewFactory::m_valid_item_names = QStringList() << "ParticleCoreShell" << "ParticleComposition" << "MesoCrystal" - << "ParticleDistribution" << "Interference1DLattice" << "Interference2DLattice" << "Interference2DParaCrystal" @@ -68,8 +66,6 @@ IView* SampleViewFactory::createSampleView(const QString& name) return new ParticleCompositionView(); } else if (name == "MesoCrystal") { return new MesoCrystalView(); - } else if (name == "ParticleDistribution") { - return new ParticleDistributionView(); } else if (name == "Interference1DLattice") { return new InterferenceFunction1DLatticeView(); } else if (name == "Interference2DLattice") { diff --git a/GUI/coregui/Views/widgetbox/widgetbox.xml b/GUI/coregui/Views/widgetbox/widgetbox.xml index 547a765f26d..75ee6a016a0 100644 --- a/GUI/coregui/Views/widgetbox/widgetbox.xml +++ b/GUI/coregui/Views/widgetbox/widgetbox.xml @@ -432,14 +432,6 @@ </widget> </categoryentry> - <categoryentry name="Cylinders with size distribution" icon="images/sample_layers2.png"> - <widget class="example08"> - <property name="objectName"> - <string notr="true">somestring</string> - </property> - </widget> - </categoryentry> - <categoryentry name="Hexagonal lattice with basis" icon="images/sample_layers2.png"> <widget class="example09"> <property name="objectName"> diff --git a/Tests/UnitTests/GUI/TestMapperCases.cpp b/Tests/UnitTests/GUI/TestMapperCases.cpp index 520e2b4e4f4..8b089283e4b 100644 --- a/Tests/UnitTests/GUI/TestMapperCases.cpp +++ b/Tests/UnitTests/GUI/TestMapperCases.cpp @@ -3,7 +3,6 @@ #include "GUI/coregui/Models/LayerItem.h" #include "GUI/coregui/Models/MultiLayerItem.h" #include "GUI/coregui/Models/ParticleCompositionItem.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Models/ParticleItem.h" #include "GUI/coregui/Models/ParticleLayoutItem.h" #include "GUI/coregui/Models/SampleModel.h" @@ -27,15 +26,6 @@ TEST_F(TestMapperCases, test_ParticeleCompositionUpdate) // composition added to layout should have abundance enabled auto compositionFree = model.insertItem<ParticleCompositionItem>(layout); EXPECT_TRUE(compositionFree->getItem(ParticleItem::P_ABUNDANCE)->isEnabled()); - - // composition added to distribution should have abundance disabled - auto distribution = model.insertItem<ParticleDistributionItem>(layout); - auto composition = model.insertItem<ParticleCompositionItem>(distribution); - EXPECT_FALSE(composition->getItem(ParticleItem::P_ABUNDANCE)->isEnabled()); - - auto taken = distribution->takeRow(ParentRow(*composition)); - EXPECT_TRUE(taken->getItem(ParticleItem::P_ABUNDANCE)->isEnabled()); - delete taken; } TEST_F(TestMapperCases, test_SimulationOptionsComputationToggle) diff --git a/Tests/UnitTests/GUI/TestParticleCoreShell.cpp b/Tests/UnitTests/GUI/TestParticleCoreShell.cpp index 621fd20d33f..c9eb1e3cf01 100644 --- a/Tests/UnitTests/GUI/TestParticleCoreShell.cpp +++ b/Tests/UnitTests/GUI/TestParticleCoreShell.cpp @@ -94,30 +94,6 @@ TEST_F(TestParticleCoreShell, test_propertyAppearance) delete shell; } -//! Checking that abundance gets disabled in particle distribution context. - -TEST_F(TestParticleCoreShell, test_distributionContext) -{ - SampleModel model; - - // coreshell particle - auto coreshell = model.insertItem<ParticleCoreShellItem>(); - coreshell->setItemValue(ParticleItem::P_ABUNDANCE, 0.2); - EXPECT_TRUE(coreshell->getItem(ParticleItem::P_ABUNDANCE)->isEnabled()); - EXPECT_EQ(coreshell->getItemValue(ParticleItem::P_ABUNDANCE).toDouble(), 0.2); - - // create distribution, adding coreshell to it - auto distribution = model.insertItem<ParticleDistributionItem>(); - model.moveItem(coreshell, distribution, -1, ParticleDistributionItem::T_PARTICLES); - // checking abundance has switched to defaults - EXPECT_FALSE(coreshell->getItem(ParticleItem::P_ABUNDANCE)->isEnabled()); - EXPECT_EQ(coreshell->getItemValue(ParticleItem::P_ABUNDANCE).toDouble(), 1.0); - - // removing coreshell - distribution->takeRow(ParentRow(*coreshell)); - EXPECT_TRUE(coreshell->getItem(ParticleItem::P_ABUNDANCE)->isEnabled()); - delete coreshell; -} //! Checking that abundance gets disabled in particle composition context. diff --git a/Tests/UnitTests/GUI/TestParticleDistributionItem.cpp b/Tests/UnitTests/GUI/TestParticleDistributionItem.cpp deleted file mode 100644 index 87d7f58c46f..00000000000 --- a/Tests/UnitTests/GUI/TestParticleDistributionItem.cpp +++ /dev/null @@ -1,306 +0,0 @@ -#include "GUI/coregui/Models/ComboProperty.h" -#include "GUI/coregui/Models/DistributionItems.h" -#include "GUI/coregui/Models/MaterialModel.h" -#include "GUI/coregui/Models/ParticleDistributionItem.h" -#include "GUI/coregui/Models/ParticleItem.h" -#include "GUI/coregui/Models/RealLimitsItems.h" -#include "GUI/coregui/Models/SampleModel.h" -#include "GUI/coregui/Models/TransformFromDomain.h" -#include "GUI/coregui/Views/MaterialEditor/MaterialEditor.h" -#include "Param/Distrib/Distributions.h" -#include "Sample/HardParticle/HardParticles.h" -#include "Sample/Material/MaterialFactoryFuncs.h" -#include "Sample/Particle/Particle.h" -#include "Tests/GTestWrapper/google_test.h" -#include <QXmlStreamWriter> - -namespace { -const QStringList expectedCylinderParams = {"None", - "Particle/Cylinder/Radius", - "Particle/Cylinder/Height", - "Particle/Position Offset/X", - "Particle/Position Offset/Y", - "Particle/Position Offset/Z"}; - -const QStringList expectedBoxParams = {"None", - "Particle/Box/Length", - "Particle/Box/Width", - "Particle/Box/Height", - "Particle/Position Offset/X", - "Particle/Position Offset/Y", - "Particle/Position Offset/Z"}; -} // namespace - -class TestParticleDistributionItem : public ::testing::Test { -}; - -TEST_F(TestParticleDistributionItem, test_InitialState) -{ - SampleModel model; - auto distItem = model.insertItem<ParticleDistributionItem>(); - - EXPECT_EQ(distItem->displayName(), "ParticleDistribution"); - EXPECT_EQ(distItem->displayName(), distItem->itemName()); - - // xpos, ypos, P_ABUNDANCE, P_DISTRIBUTION, P_DISTRIBUTED_PARAMETER - EXPECT_EQ(distItem->children().size(), 6); - - EXPECT_EQ(distItem->defaultTag(), ParticleDistributionItem::T_PARTICLES); - - EXPECT_EQ(distItem->acceptableDefaultItemTypes(), QVector<QString>() << "Particle" - << "ParticleCoreShell" - << "ParticleComposition" - << "MesoCrystal"); - - // main parameter - ComboProperty prop = distItem->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) - .value<ComboProperty>(); - EXPECT_EQ(prop.getValues(), QStringList() << ParticleDistributionItem::NO_SELECTION); - EXPECT_EQ(prop.getValue(), ParticleDistributionItem::NO_SELECTION); - - // linked parameter - prop = - distItem->getItemValue(ParticleDistributionItem::P_LINKED_PARAMETER).value<ComboProperty>(); - EXPECT_EQ(prop.getValues(), QStringList()); - EXPECT_EQ(prop.getValue(), ""); -} - -TEST_F(TestParticleDistributionItem, test_AddParticle) -{ - SampleModel model; - auto dist = model.insertItem<ParticleDistributionItem>(); - - // adding default particle and checking list of available parameters - auto particle = model.insertItem<ParticleItem>(dist); - - EXPECT_EQ(dist->getItems().size(), 1); - - ComboProperty prop = dist->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) - .value<ComboProperty>(); - - EXPECT_EQ(prop.getValues(), expectedCylinderParams); - EXPECT_EQ(prop.getValue(), ParticleDistributionItem::NO_SELECTION); - - // linked parameter - prop = dist->getItemValue(ParticleDistributionItem::P_LINKED_PARAMETER).value<ComboProperty>(); - - QStringList expectedLinked = expectedCylinderParams; - expectedLinked.removeAll(ParticleDistributionItem::NO_SELECTION); - EXPECT_EQ(prop.getValues(), expectedLinked); - EXPECT_EQ(prop.getValue(), ""); - - // changing form factor of the particle - particle->setGroupProperty(ParticleItem::P_FORM_FACTOR, "Box"); - - prop = dist->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) - .value<ComboProperty>(); - - EXPECT_EQ(prop.getValues(), expectedBoxParams); - EXPECT_EQ(prop.getValue(), ParticleDistributionItem::NO_SELECTION); - - // cheking linked - prop = dist->getItemValue(ParticleDistributionItem::P_LINKED_PARAMETER).value<ComboProperty>(); - - expectedLinked = expectedBoxParams; - expectedLinked.removeAll(ParticleDistributionItem::NO_SELECTION); - EXPECT_EQ(prop.getValues(), expectedLinked); - EXPECT_EQ(prop.getValue(), ""); - EXPECT_EQ(prop.selectedValues(), QStringList()); -} - -//! Values available for linking should depend on main parameter. - -TEST_F(TestParticleDistributionItem, test_MainLinkedCorrelation) -{ - SampleModel model; - auto dist = model.insertItem<ParticleDistributionItem>(); - model.insertItem<ParticleItem>(dist); - - ComboProperty mainCombo = dist->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) - .value<ComboProperty>(); - - EXPECT_EQ(mainCombo.getValues(), expectedCylinderParams); - EXPECT_EQ(mainCombo.getValue(), ParticleDistributionItem::NO_SELECTION); - - // linked parameter - ComboProperty linkedCombo = - dist->getItemValue(ParticleDistributionItem::P_LINKED_PARAMETER).value<ComboProperty>(); - - QStringList expectedLinked = expectedCylinderParams; - expectedLinked.removeAll(ParticleDistributionItem::NO_SELECTION); - EXPECT_EQ(linkedCombo.getValues(), expectedLinked); - EXPECT_EQ(linkedCombo.getValue(), ""); - EXPECT_EQ(linkedCombo.selectedValues(), QStringList()); - - // selecting main parameter - QString mainPar("Particle/Cylinder/Radius"); - mainCombo.setValue(mainPar); - dist->setItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER, mainCombo.variant()); - - // linked parameter shouldn't have main parameter in the list - expectedLinked = expectedCylinderParams; - expectedLinked.removeAll(ParticleDistributionItem::NO_SELECTION); - expectedLinked.removeAll(mainPar); - - linkedCombo = - dist->getItemValue(ParticleDistributionItem::P_LINKED_PARAMETER).value<ComboProperty>(); - EXPECT_EQ(linkedCombo.getValues(), expectedLinked); - EXPECT_EQ(linkedCombo.getValue(), ""); - EXPECT_EQ(linkedCombo.selectedValues(), QStringList()); - - // --- Scenario 2 - - // selecting linked parameter - linkedCombo.setSelected("Particle/Cylinder/Height"); - dist->setItemValue(ParticleDistributionItem::P_LINKED_PARAMETER, linkedCombo.variant()); - - // selecting another main parameter - mainPar = "Particle/Position Offset/X"; - mainCombo.setValue(mainPar); - dist->setItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER, mainCombo.variant()); - - // checking linked - linkedCombo = - dist->getItemValue(ParticleDistributionItem::P_LINKED_PARAMETER).value<ComboProperty>(); - expectedLinked = expectedCylinderParams; - expectedLinked.removeAll(ParticleDistributionItem::NO_SELECTION); - expectedLinked.removeAll(mainPar); - - EXPECT_EQ(linkedCombo.getValues(), expectedLinked); - EXPECT_EQ(linkedCombo.getValue(), "Particle/Cylinder/Height"); - EXPECT_EQ(linkedCombo.selectedValues(), QStringList("Particle/Cylinder/Height")); -} - -TEST_F(TestParticleDistributionItem, test_FromDomain) -{ - const std::string pattern("/Particle/Cylinder/Radius"); - - // creating domain distribution - FormFactorCylinder cylinder(1.0, 2.0); - Particle particle(HomogeneousMaterial("Particle", 6e-4, 2e-8), cylinder); - DistributionGaussian gauss(1.0, 0.1); - ParameterDistribution par_distr(pattern, gauss, 100, 3.0); - - ParticleDistribution particle_collection(particle, par_distr); - - // creating GUI distribution - SampleModel model; - auto distItem = model.insertItem<ParticleDistributionItem>(); - auto particleItem = model.insertItem<ParticleItem>(distItem); - - particleItem->setGroupProperty(ParticleItem::P_FORM_FACTOR, "AnisoPyramid"); - - // Sets it from domain - TransformFromDomain::setParticleDistributionItem(distItem, particle_collection); - - ComboProperty prop = distItem->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) - .value<ComboProperty>(); - - EXPECT_EQ(prop.getValue(), ParticleDistributionItem::NO_SELECTION); - - // changing particle type and check that distribution picked up domain name - particleItem->setGroupProperty(ParticleItem::P_FORM_FACTOR, "Cylinder"); - prop = distItem->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) - .value<ComboProperty>(); - - EXPECT_EQ(prop.getValue(), "Particle/Cylinder/Radius"); -} - -//! Constructing from domain distribution with linked parameter defined - -TEST_F(TestParticleDistributionItem, test_FromDomainLinked) -{ - const std::string pattern("/Particle/Cylinder/Radius"); - const std::string linked("/Particle/Cylinder/Height"); - - // creating domain distribution - FormFactorCylinder cylinder(1.0, 2.0); - Particle particle(HomogeneousMaterial("Particle", 6e-4, 2e-8), cylinder); - DistributionGaussian gauss(1.0, 0.1); - ParameterDistribution par_distr(pattern, gauss, 100, 3.0); - par_distr.linkParameter(linked); - - ParticleDistribution particle_collection(particle, par_distr); - - // creating GUI distribution - SampleModel model; - auto distItem = model.insertItem<ParticleDistributionItem>(); - auto particleItem = model.insertItem<ParticleItem>(distItem); - - particleItem->setGroupProperty(ParticleItem::P_FORM_FACTOR, "AnisoPyramid"); - - // Sets it from domain - TransformFromDomain::setParticleDistributionItem(distItem, particle_collection); - - ComboProperty prop = distItem->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) - .value<ComboProperty>(); - EXPECT_EQ(prop.getValue(), ParticleDistributionItem::NO_SELECTION); - - ComboProperty linkedProp = - distItem->getItemValue(ParticleDistributionItem::P_LINKED_PARAMETER).value<ComboProperty>(); - EXPECT_EQ(linkedProp.getValue(), ""); - - // changing particle type and check that distribution picked up domain name - particleItem->setGroupProperty(ParticleItem::P_FORM_FACTOR, "Cylinder"); - - prop = distItem->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) - .value<ComboProperty>(); - EXPECT_EQ(prop.getValue(), "Particle/Cylinder/Radius"); - - linkedProp = - distItem->getItemValue(ParticleDistributionItem::P_LINKED_PARAMETER).value<ComboProperty>(); - QStringList expectedLinked = QStringList() << "Particle/Cylinder/Height"; - EXPECT_EQ(linkedProp.selectedValues(), expectedLinked); - EXPECT_EQ(linkedProp.getValue(), expectedLinked.at(0)); -} - -TEST_F(TestParticleDistributionItem, test_FromDomainWithLimits) -{ - const std::string pattern("/Particle/Cylinder/Radius"); - - // creating domain distribution - FormFactorCylinder cylinder(1.0, 2.0); - Particle particle(HomogeneousMaterial("Particle", 6e-4, 2e-8), cylinder); - DistributionGaussian gauss(1.0, 0.1); - - RealLimits domainLimits = RealLimits::limited(1.0, 2.0); - ParameterDistribution par_distr(pattern, gauss, 100, 3.0, domainLimits); - - ParticleDistribution particle_collection(particle, par_distr); - - // creating GUI distribution - SampleModel model; - auto partDistItem = model.insertItem<ParticleDistributionItem>(); - model.insertItem<ParticleItem>(partDistItem); - - // Sets it from domain - TransformFromDomain::setParticleDistributionItem(partDistItem, particle_collection); - - SessionItem* distItem = partDistItem->getGroupItem(ParticleDistributionItem::P_DISTRIBUTION); - ASSERT(distItem); - RealLimitsItem* limitsItem = - dynamic_cast<RealLimitsItem*>(distItem->getGroupItem(DistributionItem::P_LIMITS)); - ASSERT(limitsItem); - - EXPECT_EQ(limitsItem->createRealLimits(), domainLimits); -} - -TEST_F(TestParticleDistributionItem, test_Clone) -{ - std::unique_ptr<MaterialModel> P_materialModel(new MaterialModel()); - - SampleModel model1; - auto dist = model1.insertItem<ParticleDistributionItem>(); - model1.insertItem<ParticleItem>(dist); - - QString buffer1; - QXmlStreamWriter writer1(&buffer1); - model1.writeTo(&writer1); - - std::unique_ptr<SampleModel> model2(model1.createCopy()); - QString buffer2; - QXmlStreamWriter writer2(&buffer2); - model2->writeTo(&writer2); - - EXPECT_EQ(buffer1, buffer2); -} diff --git a/Tests/UnitTests/GUI/TestParticleItem.cpp b/Tests/UnitTests/GUI/TestParticleItem.cpp index bc4a0302f27..b3a31e8dcb4 100644 --- a/Tests/UnitTests/GUI/TestParticleItem.cpp +++ b/Tests/UnitTests/GUI/TestParticleItem.cpp @@ -46,23 +46,3 @@ TEST_F(TestParticleItem, test_compositionContext) EXPECT_TRUE(particle->getItem(ParticleItem::P_ABUNDANCE)->isEnabled()); delete particle; } - -TEST_F(TestParticleItem, test_distributionContext) -{ - SampleModel model; - auto particle = model.insertItem<ParticleItem>(); - particle->setItemValue(ParticleItem::P_ABUNDANCE, 0.2); - EXPECT_TRUE(particle->getItem(ParticleItem::P_ABUNDANCE)->isEnabled()); - EXPECT_EQ(particle->getItemValue(ParticleItem::P_ABUNDANCE).toDouble(), 0.2); - - // adding particle to distribution, checking that abundance is default - auto distribution = model.insertItem<ParticleDistributionItem>(); - model.moveItem(particle, distribution, -1, ParticleDistributionItem::T_PARTICLES); - EXPECT_FALSE(particle->getItem(ParticleItem::P_ABUNDANCE)->isEnabled()); - EXPECT_EQ(particle->getItemValue(ParticleItem::P_ABUNDANCE).toDouble(), 1.0); - - // removing particle, checking that abundance is enabled again - distribution->takeRow(ParentRow(*particle)); - EXPECT_TRUE(particle->getItem(ParticleItem::P_ABUNDANCE)->isEnabled()); - delete particle; -} -- GitLab