Skip to content
Snippets Groups Projects
Commit 50ec8ad5 authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

Merge remote-tracking branch 'upstream/release-1.11.0' into release-1.11.0

parents 651732de 450f14e8
No related branches found
No related tags found
No related merge requests found
...@@ -13,11 +13,9 @@ ...@@ -13,11 +13,9 @@
// ************************************************************************** // // ************************************************************************** //
#include "ModelPath.h" #include "ModelPath.h"
#include "InstrumentItems.h"
#include "JobItem.h" #include "JobItem.h"
#include "RectangularDetectorItem.h"
#include "SessionModel.h" #include "SessionModel.h"
#include "SphericalDetectorItem.h"
QString ModelPath::getPathFromIndex(const QModelIndex& index) QString ModelPath::getPathFromIndex(const QModelIndex& index)
{ {
...@@ -85,40 +83,6 @@ bool ModelPath::isValidItem(SessionModel* model, SessionItem* item, const QModel ...@@ -85,40 +83,6 @@ bool ModelPath::isValidItem(SessionModel* model, SessionItem* item, const QModel
return false; return false;
} }
//! Returns true when we know how to translate ParameterItem link to domain name.
bool ModelPath::isTranslatable(const SessionItem* item, const QString& par_name)
{
Q_UNUSED(item);
QStringList non_translatable_names{Constants::DistributionSigmaFactor};
if (par_name.contains(Constants::SphericalDetectorType)) {
QStringList excluded_names{SphericalDetectorItem::P_PHI_AXIS,
SphericalDetectorItem::P_ALPHA_AXIS};
for (auto name : excluded_names) {
if (par_name.contains(name))
return false;
}
}
if (par_name.contains(Constants::RectangularDetectorType)) {
QStringList excluded_names{
RectangularDetectorItem::P_X_AXIS, RectangularDetectorItem::P_Y_AXIS,
RectangularDetectorItem::P_ALIGNMENT, RectangularDetectorItem::P_NORMAL,
RectangularDetectorItem::P_DIRECTION, RectangularDetectorItem::P_U0,
RectangularDetectorItem::P_V0, RectangularDetectorItem::P_DBEAM_U0,
RectangularDetectorItem::P_DBEAM_V0, RectangularDetectorItem::P_DISTANCE,
};
for (auto name : excluded_names) {
if (par_name.contains(name))
return false;
}
}
for (auto name : non_translatable_names) {
if (par_name.contains(name))
return false;
}
return true;
}
//! Returns ancestor of given modelType for given item. //! Returns ancestor of given modelType for given item.
//! For example, returns corresponding jobItem owning ParameterItem via ParameterContainer. //! For example, returns corresponding jobItem owning ParameterItem via ParameterContainer.
......
...@@ -34,8 +34,6 @@ BA_CORE_API_ SessionItem* getItemFromPath(const QString& relPath, const SessionI ...@@ -34,8 +34,6 @@ BA_CORE_API_ SessionItem* getItemFromPath(const QString& relPath, const SessionI
BA_CORE_API_ bool isValidItem(SessionModel* model, SessionItem* item, const QModelIndex& parent); BA_CORE_API_ bool isValidItem(SessionModel* model, SessionItem* item, const QModelIndex& parent);
BA_CORE_API_ bool isTranslatable(const SessionItem* item, const QString& par_name);
BA_CORE_API_ const SessionItem* ancestor(const SessionItem* item, const QString& requiredModelType); BA_CORE_API_ const SessionItem* ancestor(const SessionItem* item, const QString& requiredModelType);
BA_CORE_API_ QString itemPathTranslation(const SessionItem& item, const SessionItem* topItem = 0); BA_CORE_API_ QString itemPathTranslation(const SessionItem& item, const SessionItem* topItem = 0);
......
...@@ -13,9 +13,17 @@ ...@@ -13,9 +13,17 @@
// ************************************************************************** // // ************************************************************************** //
#include "ParameterTreeItems.h" #include "ParameterTreeItems.h"
#include "DistributionItems.h"
#include "FitParameterHelper.h"
#include "InstrumentItems.h"
#include "ModelPath.h" #include "ModelPath.h"
#include "RectangularDetectorItem.h"
#include "SessionModel.h" #include "SessionModel.h"
#include "FitParameterHelper.h" #include "SphericalDetectorItem.h"
namespace {
bool containsNames(const QString& text, const QStringList& names);
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
...@@ -77,9 +85,55 @@ void ParameterItem::restoreFromBackup() ...@@ -77,9 +85,55 @@ void ParameterItem::restoreFromBackup()
bool ParameterItem::isFittable() const bool ParameterItem::isFittable() const
{ {
const SessionItem *jobItem = ModelPath::ancestor(this, Constants::JobItemType); static const QVector<QPair<QStringList, QStringList>> black_list {
Q_ASSERT(jobItem); {// global scope
return ModelPath::isTranslatable(jobItem, FitParameterHelper::getParameterItemPath(this)); {QString()},
{Constants::DistributionSigmaFactor}
},
{// instrument scope
{
Constants::GISASInstrumentType,
Constants::OffSpecInstrumentType,
Constants::SpecularInstrumentType
},
{// distribution types
Constants::DistributionGateType, Constants::DistributionLorentzType,
Constants::DistributionGaussianType, Constants::DistributionLogNormalType,
Constants::DistributionCosineType, Constants::DistributionTrapezoidType,
// axes
SphericalDetectorItem::P_PHI_AXIS, SphericalDetectorItem::P_ALPHA_AXIS,
RectangularDetectorItem::P_X_AXIS, RectangularDetectorItem::P_Y_AXIS,
OffSpecInstrumentItem::P_ALPHA_AXIS,
// rectangular detector positioning
RectangularDetectorItem::P_ALIGNMENT, RectangularDetectorItem::P_NORMAL,
RectangularDetectorItem::P_DIRECTION, RectangularDetectorItem::P_U0,
RectangularDetectorItem::P_V0, RectangularDetectorItem::P_DBEAM_U0,
RectangularDetectorItem::P_DBEAM_V0, RectangularDetectorItem::P_DISTANCE,
// Detector resolution
Constants::ResolutionFunction2DGaussianType
}
}
};
Q_ASSERT(ModelPath::ancestor(this, Constants::JobItemType));
const QString& par_path = FitParameterHelper::getParameterItemPath(this);
for (const auto& item : black_list) {
if (item.first.size() == 1 && item.first[0].isNull()) { // checking global scope
if (containsNames(par_path, item.second))
return false;
} else { // checking everything else
if (containsNames(par_path, item.first) && containsNames(par_path, item.second))
return false;
}
}
return true;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
...@@ -91,3 +145,13 @@ ParameterContainerItem::ParameterContainerItem() ...@@ -91,3 +145,13 @@ ParameterContainerItem::ParameterContainerItem()
registerTag(T_CHILDREN, 0, -1, QStringList() << Constants::ParameterLabelType); registerTag(T_CHILDREN, 0, -1, QStringList() << Constants::ParameterLabelType);
setDefaultTag(T_CHILDREN); setDefaultTag(T_CHILDREN);
} }
namespace {
bool containsNames(const QString& text, const QStringList& names)
{
for (const auto& name : names)
if (text.contains(name))
return true;
return false;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment