diff --git a/src/gui/icons/modules/Analyse.svg b/src/gui/icons/modules/Analyse.svg
deleted file mode 100644
index cc52b1aa9e..0000000000
--- a/src/gui/icons/modules/Analyse.svg
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/calculateAngle.svg b/src/gui/icons/nodes/calculateAngle.svg
deleted file mode 100644
index 3aae9beffc..0000000000
--- a/src/gui/icons/nodes/calculateAngle.svg
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/calculateAxisAngle.svg b/src/gui/icons/nodes/calculateAxisAngle.svg
deleted file mode 100644
index 3cd54cff0f..0000000000
--- a/src/gui/icons/nodes/calculateAxisAngle.svg
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/calculateDistance.svg b/src/gui/icons/nodes/calculateDistance.svg
deleted file mode 100644
index 7ae7f92b98..0000000000
--- a/src/gui/icons/nodes/calculateDistance.svg
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/calculateExpression.svg b/src/gui/icons/nodes/calculateExpression.svg
deleted file mode 100644
index e2f1294d90..0000000000
--- a/src/gui/icons/nodes/calculateExpression.svg
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/calculateVector.svg b/src/gui/icons/nodes/calculateVector.svg
deleted file mode 100644
index a64e59bd95..0000000000
--- a/src/gui/icons/nodes/calculateVector.svg
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/collect1D.svg b/src/gui/icons/nodes/collect1D.svg
deleted file mode 100644
index 3764d3ce01..0000000000
--- a/src/gui/icons/nodes/collect1D.svg
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/collect2D.svg b/src/gui/icons/nodes/collect2D.svg
deleted file mode 100644
index 3a82d081d7..0000000000
--- a/src/gui/icons/nodes/collect2D.svg
+++ /dev/null
@@ -1,250 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/collect3D.svg b/src/gui/icons/nodes/collect3D.svg
deleted file mode 100644
index 05eb4b9163..0000000000
--- a/src/gui/icons/nodes/collect3D.svg
+++ /dev/null
@@ -1,212 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/fit1D.svg b/src/gui/icons/nodes/fit1D.svg
deleted file mode 100644
index d715b89262..0000000000
--- a/src/gui/icons/nodes/fit1D.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
diff --git a/src/gui/icons/nodes/integerCollect1D.svg b/src/gui/icons/nodes/integerCollect1D.svg
deleted file mode 100644
index 3764d3ce01..0000000000
--- a/src/gui/icons/nodes/integerCollect1D.svg
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/integrate1D.svg b/src/gui/icons/nodes/integrate1D.svg
deleted file mode 100644
index d3f3a7a080..0000000000
--- a/src/gui/icons/nodes/integrate1D.svg
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/operateDivide.svg b/src/gui/icons/nodes/operateDivide.svg
deleted file mode 100644
index d4fe487492..0000000000
--- a/src/gui/icons/nodes/operateDivide.svg
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/operateExpression.svg b/src/gui/icons/nodes/operateExpression.svg
deleted file mode 100644
index e4ae38950d..0000000000
--- a/src/gui/icons/nodes/operateExpression.svg
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/operateGridNormalise.svg b/src/gui/icons/nodes/operateGridNormalise.svg
deleted file mode 100644
index d715b89262..0000000000
--- a/src/gui/icons/nodes/operateGridNormalise.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
diff --git a/src/gui/icons/nodes/operateMultiply.svg b/src/gui/icons/nodes/operateMultiply.svg
deleted file mode 100644
index 278affd81f..0000000000
--- a/src/gui/icons/nodes/operateMultiply.svg
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/operateNormalise.svg b/src/gui/icons/nodes/operateNormalise.svg
deleted file mode 100644
index 24689563cc..0000000000
--- a/src/gui/icons/nodes/operateNormalise.svg
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/operateNumberDensityNormalise.svg b/src/gui/icons/nodes/operateNumberDensityNormalise.svg
deleted file mode 100644
index 1f4a529843..0000000000
--- a/src/gui/icons/nodes/operateNumberDensityNormalise.svg
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/operateSitePopulationNormalise.svg b/src/gui/icons/nodes/operateSitePopulationNormalise.svg
deleted file mode 100644
index b9a5f75d9a..0000000000
--- a/src/gui/icons/nodes/operateSitePopulationNormalise.svg
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/operateSphericalShellNormalise.svg b/src/gui/icons/nodes/operateSphericalShellNormalise.svg
deleted file mode 100644
index 090e45ea27..0000000000
--- a/src/gui/icons/nodes/operateSphericalShellNormalise.svg
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/process1D.svg b/src/gui/icons/nodes/process1D.svg
deleted file mode 100644
index 6ca18423ac..0000000000
--- a/src/gui/icons/nodes/process1D.svg
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/process2D.svg b/src/gui/icons/nodes/process2D.svg
deleted file mode 100644
index c2c2661cb6..0000000000
--- a/src/gui/icons/nodes/process2D.svg
+++ /dev/null
@@ -1,260 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/process3D.svg b/src/gui/icons/nodes/process3D.svg
deleted file mode 100644
index 0bf491f0bb..0000000000
--- a/src/gui/icons/nodes/process3D.svg
+++ /dev/null
@@ -1,219 +0,0 @@
-
-
diff --git a/src/gui/icons/nodes/sum1D.svg b/src/gui/icons/nodes/sum1D.svg
deleted file mode 100644
index 7aca7dfc6f..0000000000
--- a/src/gui/icons/nodes/sum1D.svg
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
diff --git a/src/gui/main.qrc b/src/gui/main.qrc
index 553a86cbf8..5ce912bcd5 100644
--- a/src/gui/main.qrc
+++ b/src/gui/main.qrc
@@ -6,42 +6,18 @@
icons/nodes/restraintPotential.svg
icons/nodes/cylindricalGlobalPotential.svg
icons/nodes/box.svg
- icons/nodes/calculateAngle.svg
- icons/nodes/calculateAxisAngle.svg
- icons/nodes/calculateDistance.svg
- icons/nodes/calculateExpression.svg
- icons/nodes/calculateVector.svg
- icons/nodes/collect1D.svg
- icons/nodes/integerCollect1D.svg
icons/nodes/customRegion.svg
- icons/nodes/collect2D.svg
- icons/nodes/collect3D.svg
icons/nodes/coordinateSets.svg
icons/nodes/addPair.svg
icons/nodes/cylindricalRegion.svg
icons/nodes/copy.svg
- icons/nodes/fit1D.svg
icons/nodes/generalRegion.svg
- icons/nodes/integrate1D.svg
- icons/nodes/operateDivide.svg
- icons/nodes/operateExpression.svg
- icons/nodes/operateGridNormalise.svg
- icons/nodes/operateMultiply.svg
- icons/nodes/operateNormalise.svg
- icons/nodes/operateNumberDensityNormalise.svg
- icons/nodes/operateSitePopulationNormalise.svg
- icons/nodes/operateSphericalShellNormalise.svg
icons/nodes/parameters.svg
icons/nodes/pick.svg
icons/nodes/pickProximity.svg
icons/nodes/pickRegion.svg
- icons/nodes/process1D.svg
- icons/nodes/process2D.svg
- icons/nodes/process3D.svg
- icons/nodes/ifValueInRange.svg
icons/nodes/remove.svg
icons/nodes/select.svg
- icons/nodes/sum1D.svg
icons/nodes/transmute.svg
icons/nodes/temperature.svg
icons/nodes/sizeFactor.svg
@@ -76,7 +52,6 @@
icons/modules/SiteRDF.svg
icons/modules/SDF.svg
icons/modules/MolShake.svg
- icons/modules/Analyse.svg
icons/modules/Forces.svg
icons/modules/Benchmark.svg
icons/modules/EPSR.svg
diff --git a/src/gui/nodeControlWidget.h b/src/gui/nodeControlWidget.h
index 134e1a27ce..3e8d269a98 100644
--- a/src/gui/nodeControlWidget.h
+++ b/src/gui/nodeControlWidget.h
@@ -5,7 +5,6 @@
#include "base/lock.h"
#include "gui/ui_nodeControlWidget.h"
-#include "procedure/nodes/nodeReference.h"
// Forward Declarations
class Dissolve;
diff --git a/src/keywords/node.h b/src/keywords/node.h
index 58d7f7184f..f4f768e7b5 100644
--- a/src/keywords/node.h
+++ b/src/keywords/node.h
@@ -12,12 +12,8 @@
class NodeKeywordBase : public NodeKeywordUnderlay, public KeywordBase
{
public:
- NodeKeywordBase(ProcedureNode *parentNode, ProcedureNode::NodeType nodeType, bool onlyInScope)
- : NodeKeywordUnderlay(parentNode, nodeType, onlyInScope), KeywordBase(typeid(this))
- {
- }
- NodeKeywordBase(ProcedureNode *parentNode, ProcedureNode::NodeClass nodeClass, bool onlyInScope)
- : NodeKeywordUnderlay(parentNode, nodeClass, onlyInScope), KeywordBase(typeid(this))
+ NodeKeywordBase(ProcedureNode *parentNode, const ProcedureNode::NodeTypeVector &allowedNodeTypes, bool onlyInScope)
+ : NodeKeywordUnderlay(parentNode, allowedNodeTypes, onlyInScope), KeywordBase(typeid(this))
{
}
~NodeKeywordBase() override = default;
@@ -46,12 +42,9 @@ class NodeKeywordBase : public NodeKeywordUnderlay, public KeywordBase
template class NodeKeyword : public NodeKeywordBase
{
public:
- NodeKeyword(std::shared_ptr &data, ProcedureNode *parentNode, ProcedureNode::NodeType nodeType, bool onlyInScope)
- : NodeKeywordBase(parentNode, nodeType, onlyInScope), data_(data)
- {
- }
- NodeKeyword(std::shared_ptr &data, ProcedureNode *parentNode, ProcedureNode::NodeClass nodeClass, bool onlyInScope)
- : NodeKeywordBase(parentNode, nodeClass, onlyInScope), data_(data)
+ NodeKeyword(std::shared_ptr &data, ProcedureNode *parentNode,
+ const ProcedureNode::NodeTypeVector &allowedNodeTypes, bool onlyInScope)
+ : NodeKeywordBase(parentNode, allowedNodeTypes, onlyInScope), data_(data)
{
}
~NodeKeyword() override = default;
diff --git a/src/keywords/nodeAndInteger.h b/src/keywords/nodeAndInteger.h
index 130b81d6f6..dccb31c82c 100644
--- a/src/keywords/nodeAndInteger.h
+++ b/src/keywords/nodeAndInteger.h
@@ -13,12 +13,9 @@
class NodeAndIntegerKeywordBase : public NodeKeywordUnderlay, public KeywordBase
{
public:
- NodeAndIntegerKeywordBase(ProcedureNode *parentNode, ProcedureNode::NodeType nodeType, bool onlyInScope)
- : NodeKeywordUnderlay(parentNode, nodeType, onlyInScope), KeywordBase(typeid(this))
- {
- }
- NodeAndIntegerKeywordBase(ProcedureNode *parentNode, ProcedureNode::NodeClass nodeClass, bool onlyInScope)
- : NodeKeywordUnderlay(parentNode, nodeClass, onlyInScope), KeywordBase(typeid(this))
+ NodeAndIntegerKeywordBase(ProcedureNode *parentNode, const ProcedureNode::NodeTypeVector &allowedNodeTypes,
+ bool onlyInScope)
+ : NodeKeywordUnderlay(parentNode, allowedNodeTypes, onlyInScope), KeywordBase(typeid(this))
{
}
~NodeAndIntegerKeywordBase() override = default;
@@ -67,13 +64,8 @@ template class NodeAndIntegerKeyword : public NodeAndIntegerKeywordBas
{
public:
NodeAndIntegerKeyword(std::pair, int> &data, ProcedureNode *parentNode,
- ProcedureNode::NodeType nodeType, bool onlyInScope)
- : NodeAndIntegerKeywordBase(parentNode, nodeType, onlyInScope), data_(data)
- {
- }
- NodeAndIntegerKeyword(std::pair, int> &data, ProcedureNode *parentNode,
- ProcedureNode::NodeClass nodeClass, bool onlyInScope)
- : NodeAndIntegerKeywordBase(parentNode, nodeClass, onlyInScope), data_(data)
+ const ProcedureNode::NodeTypeVector &allowedNodeTypes, bool onlyInScope)
+ : NodeAndIntegerKeywordBase(parentNode, allowedNodeTypes, onlyInScope), data_(data)
{
}
~NodeAndIntegerKeyword() override = default;
diff --git a/src/keywords/nodeUnderlay.cpp b/src/keywords/nodeUnderlay.cpp
index 1aa4d12faa..0afb36e9df 100644
--- a/src/keywords/nodeUnderlay.cpp
+++ b/src/keywords/nodeUnderlay.cpp
@@ -3,14 +3,11 @@
#include "keywords/nodeUnderlay.h"
#include "procedure/procedure.h"
+#include "templates/algorithms.h"
-NodeKeywordUnderlay::NodeKeywordUnderlay(ProcedureNode *parentNode, ProcedureNode::NodeType nodeType, bool onlyInScope)
- : parentNode_(parentNode), nodeType_(nodeType), onlyInScope_(onlyInScope)
-{
-}
-
-NodeKeywordUnderlay::NodeKeywordUnderlay(ProcedureNode *parentNode, ProcedureNode::NodeClass nodeClass, bool onlyInScope)
- : parentNode_(parentNode), nodeClass_(nodeClass), onlyInScope_(onlyInScope)
+NodeKeywordUnderlay::NodeKeywordUnderlay(ProcedureNode *parentNode, const ProcedureNode::NodeTypeVector &allowedNodeTypes,
+ bool onlyInScope)
+ : parentNode_(parentNode), allowedNodeTypes_(allowedNodeTypes), onlyInScope_(onlyInScope)
{
}
@@ -21,11 +18,8 @@ NodeKeywordUnderlay::NodeKeywordUnderlay(ProcedureNode *parentNode, ProcedureNod
// Parent ProcedureNode
NodeRef NodeKeywordUnderlay::parentNode() const { return parentNode_; }
-// Return optional target node type to allow
-std::optional NodeKeywordUnderlay::nodeType() const { return nodeType_; }
-
-// Return optional target node class to allow
-std::optional NodeKeywordUnderlay::nodeClass() const { return nodeClass_; }
+// Return optional target node types to allow
+const ProcedureNode::NodeTypeVector &NodeKeywordUnderlay::allowedNodeTypes() const { return allowedNodeTypes_; }
// Return whether to accept nodes within scope only
bool NodeKeywordUnderlay::onlyInScope() const { return onlyInScope_; }
@@ -34,7 +28,7 @@ bool NodeKeywordUnderlay::onlyInScope() const { return onlyInScope_; }
std::vector NodeKeywordUnderlay::allowedNodes() const
{
assert(parentNode_);
- return parentNode_->getNodes(onlyInScope_, nodeType_, nodeClass_);
+ return parentNode_->getNodes(onlyInScope_, allowedNodeTypes_);
}
// Find the named node, obeying scope
@@ -44,25 +38,21 @@ ConstNodeRef NodeKeywordUnderlay::findNode(std::string_view name) const
return parentNode_->getNode(name, onlyInScope_);
}
-// Return whether the node has valid class or type
+// Return whether the node has valid type
bool NodeKeywordUnderlay::validNode(const ProcedureNode *node, std::string_view keywordName) const
{
// A null node is valid
if (!node)
return true;
- // Check class (if specified) then type (if specified)
- if (nodeClass_ && node->nodeClass() != nodeClass_.value())
- return Messenger::error("Node '{}' is of class {}, but the {} keyword requires a node of class {}.\n", node->name(),
- ProcedureNode::nodeClasses().keyword(node->nodeClass()), keywordName,
- ProcedureNode::nodeClasses().keyword(nodeClass_.value()));
-
- if (nodeType_ && node->type() != nodeType_.value())
- return Messenger::error("Node '{}' is of type {}, but the {} keyword requires a node of type {}.\n", node->name(),
+ if (!allowedNodeTypes_.empty() &&
+ std::find(allowedNodeTypes_.begin(), allowedNodeTypes_.end(), node->type()) == allowedNodeTypes_.end())
+ return Messenger::error("Node '{}' is of type {}, but the {} keyword requires: {}.\n", node->name(),
ProcedureNode::nodeTypes().keyword(node->type()), keywordName,
- ProcedureNode::nodeTypes().keyword(nodeType_.value()));
+ joinStrings(allowedNodeTypes_, ", ",
+ [](const auto nodeType) { return ProcedureNode::nodeTypes().keyword(nodeType); }));
- if (!parentNode_->getNode(node->name(), onlyInScope_, {}, nodeType_, nodeClass_))
+ if (!parentNode_->getNode(node->name(), onlyInScope_, {}, allowedNodeTypes_))
return Messenger::error("Node '{}' does not exist (in scope), so the {} keyword cannot reference it.\n", node->name(),
keywordName);
diff --git a/src/keywords/nodeUnderlay.h b/src/keywords/nodeUnderlay.h
index 76fae919f7..c21db36ec1 100644
--- a/src/keywords/nodeUnderlay.h
+++ b/src/keywords/nodeUnderlay.h
@@ -9,8 +9,7 @@
class NodeKeywordUnderlay
{
public:
- NodeKeywordUnderlay(ProcedureNode *parentNode, ProcedureNode::NodeType nodeType, bool onlyInScope);
- NodeKeywordUnderlay(ProcedureNode *parentNode, ProcedureNode::NodeClass nodeClass, bool onlyInScope);
+ NodeKeywordUnderlay(ProcedureNode *parentNode, const ProcedureNode::NodeTypeVector &allowedNodeTypes, bool onlyInScope);
virtual ~NodeKeywordUnderlay() = default;
/*
@@ -19,27 +18,23 @@ class NodeKeywordUnderlay
protected:
// Parent ProcedureNode
NodeRef parentNode_;
- // Optional target node type to allow
- std::optional nodeType_;
- // Optional target node class to allow
- std::optional nodeClass_;
+ // Optional target node types to allow
+ ProcedureNode::NodeTypeVector allowedNodeTypes_;
// Whether to accept nodes within scope only
bool onlyInScope_;
public:
// Return parent ProcedureNode
NodeRef parentNode() const;
- // Return optional target node type to allow
- std::optional nodeType() const;
- // Return optional target node class to allow
- std::optional nodeClass() const;
+ // Return optional target nodes type to allow
+ const ProcedureNode::NodeTypeVector &allowedNodeTypes() const;
// Return whether to accept nodes within scope only
bool onlyInScope() const;
// Return vector of possible nodes allowed based on class and type definitions
std::vector allowedNodes() const;
// Find the named node, obeying scope
ConstNodeRef findNode(std::string_view name) const;
- // Return whether the supplied node has valid class or type
+ // Return whether the supplied node has valid type
bool validNode(const ProcedureNode *node, std::string_view keywordName) const;
// Validate current data, returning false if invalid data had to be pruned
virtual bool validate() = 0;
diff --git a/src/keywords/nodeVector.h b/src/keywords/nodeVector.h
index 22daa438c3..5a86c1cfa4 100644
--- a/src/keywords/nodeVector.h
+++ b/src/keywords/nodeVector.h
@@ -13,12 +13,8 @@
class NodeVectorKeywordBase : public NodeKeywordUnderlay, public KeywordBase
{
public:
- NodeVectorKeywordBase(ProcedureNode *parentNode, ProcedureNode::NodeType nodeType, bool onlyInScope)
- : NodeKeywordUnderlay(parentNode, nodeType, onlyInScope), KeywordBase(typeid(this))
- {
- }
- NodeVectorKeywordBase(ProcedureNode *parentNode, ProcedureNode::NodeClass nodeClass, bool onlyInScope)
- : NodeKeywordUnderlay(parentNode, nodeClass, onlyInScope), KeywordBase(typeid(this))
+ NodeVectorKeywordBase(ProcedureNode *parentNode, const ProcedureNode::NodeTypeVector &allowedNodeTypes, bool onlyInScope)
+ : NodeKeywordUnderlay(parentNode, allowedNodeTypes, onlyInScope), KeywordBase(typeid(this))
{
}
~NodeVectorKeywordBase() override = default;
@@ -52,12 +48,9 @@ class NodeVectorKeywordBase : public NodeKeywordUnderlay, public KeywordBase
template class NodeVectorKeyword : public NodeVectorKeywordBase
{
public:
- NodeVectorKeyword(ConstNodeVector &data, ProcedureNode *parentNode, ProcedureNode::NodeType nodeType, bool onlyInScope)
- : NodeVectorKeywordBase(parentNode, nodeType, onlyInScope), data_(data)
- {
- }
- NodeVectorKeyword(ConstNodeVector &data, ProcedureNode *parentNode, ProcedureNode::NodeClass nodeClass, bool onlyInScope)
- : NodeVectorKeywordBase(parentNode, nodeType, onlyInScope), data_(data)
+ NodeVectorKeyword(ConstNodeVector &data, ProcedureNode *parentNode,
+ const ProcedureNode::NodeTypeVector &allowedNodeTypes, bool onlyInScope)
+ : NodeVectorKeywordBase(parentNode, allowedNodeTypes, onlyInScope), data_(data)
{
}
~NodeVectorKeyword() override = default;
@@ -193,12 +186,5 @@ template class NodeVectorKeyword : public NodeVectorKeywordBase
*/
protected:
// Prune any references to the supplied ProcedureNode in the contained data
- void removeReferencesTo(NodeRef node) override
- {
- // Check the node type
- if (node->type() != nodeType())
- return;
-
- data_.erase(std::remove(data_.begin(), data_.end(), node), data_.end());
- }
+ void removeReferencesTo(NodeRef node) override { data_.erase(std::remove(data_.begin(), data_.end(), node), data_.end()); }
};
diff --git a/src/keywords/store.cpp b/src/keywords/store.cpp
index 9a664c2810..4a3c316a84 100644
--- a/src/keywords/store.cpp
+++ b/src/keywords/store.cpp
@@ -21,7 +21,6 @@
#include "keywords/vec3Double.h"
#include "keywords/vec3Integer.h"
#include "keywords/vec3NodeValue.h"
-#include "procedure/nodes/collect1D.h"
#include "procedure/nodes/regionBase.h"
#include "procedure/nodes/select.h"
@@ -186,19 +185,11 @@ bool KeywordStore::set(std::string_view name, const int value)
{
return getKeyword(name, find(name))->setData(value);
}
-bool KeywordStore::set(std::string_view name, const std::shared_ptr value)
-{
- return getKeyword>(name, find(name))->setData(value);
-}
bool KeywordStore::set(std::string_view name, const std::vector value)
{
getKeyword(name, find(name))->data() = value;
return true;
}
-bool KeywordStore::set(std::string_view name, const std::vector> value)
-{
- return getKeyword>(name, find(name))->setData(value);
-}
bool KeywordStore::set(std::string_view name, const std::shared_ptr value)
{
return getKeyword>(name, find(name))->setData(value);
diff --git a/src/keywords/store.h b/src/keywords/store.h
index f185b35211..689267449d 100644
--- a/src/keywords/store.h
+++ b/src/keywords/store.h
@@ -15,7 +15,6 @@
#include
class SelectProcedureNode;
-class Collect1DProcedureNode;
class RegionProcedureNodeBase;
class SQModule;
class RDFModule;
@@ -174,9 +173,7 @@ class KeywordStore
bool set(std::string_view name, const Vec3 value);
bool set(std::string_view name, const Vec3 value);
bool set(std::string_view name, const Range value);
- bool set(std::string_view name, const std::shared_ptr value);
bool set(std::string_view name, const std::vector value);
- bool set(std::string_view name, const std::vector> value);
bool set(std::string_view name, const std::shared_ptr value);
bool set(std::string_view name, const std::shared_ptr value);
bool set(std::string_view name, const ConstNodeVector value);
diff --git a/src/module/module.cpp b/src/module/module.cpp
index e00db51689..51256a455f 100644
--- a/src/module/module.cpp
+++ b/src/module/module.cpp
@@ -15,7 +15,6 @@ namespace ModuleTypes
{
// ENumerated Options for ModuleTypes
EnumOptions moduleTypes_("ModuleType", {{ModuleTypes::Accumulate, "Accumulate"},
- {ModuleTypes::Analyse, "Analyse"},
{ModuleTypes::Angle, "Angle"},
{ModuleTypes::AtomShake, "AtomShake"},
{ModuleTypes::AvgMol, "AvgMol"},
diff --git a/src/module/types.h b/src/module/types.h
index 7d2d550512..5dfed308b0 100644
--- a/src/module/types.h
+++ b/src/module/types.h
@@ -9,7 +9,6 @@ namespace ModuleTypes
enum ModuleType
{
Accumulate,
- Analyse,
Angle,
AtomShake,
AvgMol,
diff --git a/src/modules/analyse/CMakeLists.txt b/src/modules/analyse/CMakeLists.txt
deleted file mode 100644
index 4cb90b46c1..0000000000
--- a/src/modules/analyse/CMakeLists.txt
+++ /dev/null
@@ -1 +0,0 @@
-dissolve_add_module(analyse.h analyse)
diff --git a/src/modules/analyse/analyse.cpp b/src/modules/analyse/analyse.cpp
deleted file mode 100644
index 2f409773a3..0000000000
--- a/src/modules/analyse/analyse.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "modules/analyse/analyse.h"
-#include "keywords/configuration.h"
-#include "keywords/procedure.h"
-
-AnalyseModule::AnalyseModule() : Module(ModuleTypes::Analyse), analyser_(ProcedureNode::AnalysisContext, "Analyser")
-{
- keywords_.addTarget("Configuration", "Set target configuration for the module", targetConfiguration_)
- ->setEditSignals({KeywordBase::ClearModuleData, KeywordBase::RecreateRenderables});
-
- keywords_.addHidden("Analyser", "Analysis procedure to run", analyser_);
-}
-
-// Return the analyser
-Procedure &AnalyseModule::analyser() { return analyser_; }
diff --git a/src/modules/analyse/analyse.h b/src/modules/analyse/analyse.h
deleted file mode 100644
index 8e7ebcf8aa..0000000000
--- a/src/modules/analyse/analyse.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "module/module.h"
-#include "procedure/procedure.h"
-
-// Analyse Module
-class AnalyseModule : public Module
-{
- public:
- AnalyseModule();
- ~AnalyseModule() override = default;
-
- /*
- * Definition
- */
- private:
- // Target configuration
- Configuration *targetConfiguration_{nullptr};
- // Analysis procedure to be run
- Procedure analyser_;
-
- public:
- // Return the analyser
- Procedure &analyser();
-
- /*
- * Processing
- */
- private:
- // Run main processing
- Module::ExecutionResult process(ModuleContext &moduleContext) override;
-};
diff --git a/src/modules/analyse/gui/CMakeLists.txt b/src/modules/analyse/gui/CMakeLists.txt
deleted file mode 100644
index d521c6d819..0000000000
--- a/src/modules/analyse/gui/CMakeLists.txt
+++ /dev/null
@@ -1 +0,0 @@
-dissolve_add_module_gui(analyse)
diff --git a/src/modules/analyse/gui/analyseWidget.h b/src/modules/analyse/gui/analyseWidget.h
deleted file mode 100644
index a58372a81a..0000000000
--- a/src/modules/analyse/gui/analyseWidget.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "modules/analyse/gui/ui_analyseWidget.h"
-#include "modules/widget.h"
-
-// Forward Declarations
-class AnalyseModule;
-class Dissolve;
-
-// Module Widget
-class AnalyseModuleWidget : public ModuleWidget
-{
- // All Qt declarations derived from QObject must include this macro
- Q_OBJECT
-
- public:
- AnalyseModuleWidget(QWidget *parent, AnalyseModule *module, Dissolve &dissolve);
- ~AnalyseModuleWidget() override = default;
-
- private:
- // Associated Module
- AnalyseModule *module_;
-
- /*
- * UI
- */
- private:
- // Main form declaration
- Ui::AnalyseModuleWidget ui_;
-};
diff --git a/src/modules/analyse/gui/analyseWidget.ui b/src/modules/analyse/gui/analyseWidget.ui
deleted file mode 100644
index b376976aeb..0000000000
--- a/src/modules/analyse/gui/analyseWidget.ui
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
- AnalyseModuleWidget
-
-
-
- 0
- 0
- 473
- 395
-
-
-
-
- 0
- 0
-
-
-
-
- 8
-
-
-
- AnalyseModule Controls
-
-
-
- 4
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
-
diff --git a/src/modules/analyse/gui/analyseWidgetFuncs.cpp b/src/modules/analyse/gui/analyseWidgetFuncs.cpp
deleted file mode 100644
index 864edb7540..0000000000
--- a/src/modules/analyse/gui/analyseWidgetFuncs.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "main/dissolve.h"
-#include "modules/analyse/analyse.h"
-#include "modules/analyse/gui/analyseWidget.h"
-
-AnalyseModuleWidget::AnalyseModuleWidget(QWidget *parent, AnalyseModule *module, Dissolve &dissolve)
- : ModuleWidget(parent, dissolve), module_(module)
-{
- // Set up user interface
- ui_.setupUi(this);
-
- refreshing_ = false;
-}
diff --git a/src/modules/analyse/process.cpp b/src/modules/analyse/process.cpp
deleted file mode 100644
index 31b43189fd..0000000000
--- a/src/modules/analyse/process.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "base/sysFunc.h"
-#include "main/dissolve.h"
-#include "module/context.h"
-#include "modules/analyse/analyse.h"
-
-// Run main processing
-Module::ExecutionResult AnalyseModule::process(ModuleContext &moduleContext)
-{
- // Execute the analysis
- if (!analyser_.execute({moduleContext.dissolve(), targetConfiguration_, name()}))
- {
- Messenger::error("Analysis ExecutionResult::Failed.\n");
- return ExecutionResult::Failed;
- }
-
- return ExecutionResult::Success;
-}
diff --git a/src/modules/modifierOSites/modifierOSites.cpp b/src/modules/modifierOSites/modifierOSites.cpp
index 5d724068ec..6405c730ed 100644
--- a/src/modules/modifierOSites/modifierOSites.cpp
+++ b/src/modules/modifierOSites/modifierOSites.cpp
@@ -8,12 +8,6 @@
#include "keywords/range.h"
#include "keywords/speciesSiteVector.h"
#include "keywords/vec3Double.h"
-#include "procedure/nodes/calculateExpression.h"
-#include "procedure/nodes/ifValueInRange.h"
-#include "procedure/nodes/integerCollect1D.h"
-#include "procedure/nodes/iterateData1D.h"
-#include "procedure/nodes/operateNormalise.h"
-#include "procedure/nodes/process1D.h"
#include "procedure/nodes/select.h"
ModifierOSitesModule::ModifierOSitesModule() : Module(ModuleTypes::ModifierOSites)
diff --git a/src/modules/qSpecies/qSpecies.cpp b/src/modules/qSpecies/qSpecies.cpp
index 34f469c343..30f134dbda 100644
--- a/src/modules/qSpecies/qSpecies.cpp
+++ b/src/modules/qSpecies/qSpecies.cpp
@@ -8,12 +8,6 @@
#include "keywords/range.h"
#include "keywords/speciesSiteVector.h"
#include "keywords/vec3Double.h"
-#include "procedure/nodes/calculateExpression.h"
-#include "procedure/nodes/ifValueInRange.h"
-#include "procedure/nodes/integerCollect1D.h"
-#include "procedure/nodes/iterateData1D.h"
-#include "procedure/nodes/operateNormalise.h"
-#include "procedure/nodes/process1D.h"
#include "procedure/nodes/select.h"
QSpeciesModule::QSpeciesModule() : Module(ModuleTypes::QSpecies)
diff --git a/src/modules/registry.cpp b/src/modules/registry.cpp
index f4b613530b..4e1dc0faf5 100644
--- a/src/modules/registry.cpp
+++ b/src/modules/registry.cpp
@@ -3,7 +3,6 @@
#include "modules/registry.h"
#include "modules/accumulate/accumulate.h"
-#include "modules/analyse/analyse.h"
#include "modules/angle/angle.h"
#include "modules/atomShake/atomShake.h"
#include "modules/avgMol/avgMol.h"
@@ -43,7 +42,6 @@ ModuleRegistry::ModuleRegistry()
{
registerProducer(ModuleTypes::Accumulate, "Accumulate partials data to form an average",
"Correlation Functions");
- registerProducer(ModuleTypes::Analyse, "Perform custom analysis of one or more Configurations", "Analysis");
registerProducer(ModuleTypes::Angle, "Calculate distance/angle maps", "Analysis");
registerProducer(ModuleTypes::AtomShake, "Perform atomic Monte Carlo on all atoms", "Evolution");
registerProducer(ModuleTypes::AvgMol,
diff --git a/src/modules/widgetProducer.cpp b/src/modules/widgetProducer.cpp
index 941756f004..5f2a17a1ae 100644
--- a/src/modules/widgetProducer.cpp
+++ b/src/modules/widgetProducer.cpp
@@ -4,8 +4,6 @@
#include "modules/widgetProducer.h"
#include "modules/accumulate/accumulate.h"
#include "modules/accumulate/gui/accumulateWidget.h"
-#include "modules/analyse/analyse.h"
-#include "modules/analyse/gui/analyseWidget.h"
#include "modules/angle/angle.h"
#include "modules/angle/gui/angleWidget.h"
#include "modules/atomShake/atomShake.h"
@@ -63,7 +61,6 @@
ModuleWidgetProducer::ModuleWidgetProducer()
{
registerProducer();
- registerProducer();
registerProducer();
registerProducer();
registerProducer();
diff --git a/src/procedure/nodes/CMakeLists.txt b/src/procedure/nodes/CMakeLists.txt
index bc1162e242..dfb95538c1 100644
--- a/src/procedure/nodes/CMakeLists.txt
+++ b/src/procedure/nodes/CMakeLists.txt
@@ -3,15 +3,6 @@ add_library(
add.cpp
addPair.cpp
box.cpp
- calculateAngle.cpp
- calculateAxisAngle.cpp
- calculateBase.cpp
- calculateDistance.cpp
- calculateExpression.cpp
- calculateVector.cpp
- collect1D.cpp
- collect2D.cpp
- collect3D.cpp
context.cpp
coordinateSets.cpp
copy.cpp
@@ -19,31 +10,14 @@ add_library(
cylindricalGlobalPotential.cpp
cylindricalRegion.cpp
generalRegion.cpp
- ifValueInRange.cpp
importCoordinates.cpp
- integerCollect1D.cpp
- integrate1D.cpp
- iterateData1D.cpp
iterateSelection.cpp
node.cpp
- nodeReference.cpp
- operateBase.cpp
- operateDivide.cpp
- operateExpression.cpp
- operateGridNormalise.cpp
- operateMultiply.cpp
- operateNormalise.cpp
- operateNumberDensityNormalise.cpp
- operateSitePopulationNormalise.cpp
- operateSphericalShellNormalise.cpp
parameters.cpp
pick.cpp
pickBase.cpp
pickProximity.cpp
pickRegion.cpp
- process1D.cpp
- process2D.cpp
- process3D.cpp
regionBase.cpp
regionalGlobalPotential.cpp
registry.cpp
@@ -55,21 +29,11 @@ add_library(
sequence.cpp
sphericalGlobalPotential.cpp
sizeFactor.cpp
- sum1D.cpp
temperature.cpp
transmute.cpp
add.h
addPair.h
box.h
- calculateAngle.h
- calculateAxisAngle.h
- calculateBase.h
- calculateDistance.h
- calculateExpression.h
- calculateVector.h
- collect1D.h
- collect2D.h
- collect3D.h
context.h
coordinateSets.h
copy.h
@@ -77,31 +41,14 @@ add_library(
cylindricalGlobalPotential.h
cylindricalRegion.h
generalRegion.h
- ifValueInRange.h
importCoordinates.h
- integerCollect1D.h
- integrate1D.h
- iterateData1D.h
iterateSelection.h
node.h
- nodeReference.h
- operateBase.h
- operateDivide.h
- operateExpression.h
- operateGridNormalise.h
- operateMultiply.h
- operateNormalise.h
- operateNumberDensityNormalise.h
- operateSitePopulationNormalise.h
- operateSphericalShellNormalise.h
parameters.h
pick.h
pickBase.h
pickProximity.h
pickRegion.h
- process1D.h
- process2D.h
- process3D.h
regionBase.h
regionalGlobalPotential.h
registry.h
@@ -113,7 +60,6 @@ add_library(
sequence.h
sphericalGlobalPotential.h
sizeFactor.h
- sum1D.h
temperature.h
transmute.h
)
diff --git a/src/procedure/nodes/add.cpp b/src/procedure/nodes/add.cpp
index 6b5709fdb7..454348c311 100644
--- a/src/procedure/nodes/add.cpp
+++ b/src/procedure/nodes/add.cpp
@@ -5,7 +5,6 @@
#include "base/randomBuffer.h"
#include "classes/box.h"
#include "classes/configuration.h"
-#include "classes/coreData.h"
#include "classes/species.h"
#include "keywords/bool.h"
#include "keywords/node.h"
@@ -13,7 +12,6 @@
#include "keywords/nodeValueEnumOptions.h"
#include "keywords/species.h"
#include "procedure/nodes/coordinateSets.h"
-#include "procedure/nodes/generalRegion.h"
#include "procedure/nodes/regionBase.h"
AddProcedureNode::AddProcedureNode(const Species *sp, const NodeValue &population, const NodeValue &density,
@@ -38,7 +36,7 @@ void AddProcedureNode::setUpKeywords()
keywords_.setOrganisation("Options", "Target");
keywords_.add("Species", "Target species to add", species_);
keywords_.add>("CoordinateSets", "Target coordinate sets to add", coordinateSets_,
- this, ProcedureNode::NodeType::CoordinateSets, true);
+ this, NodeTypeVector{NodeType::CoordinateSets}, true);
keywords_.add("Population", "Population of the target species to add", population_, this);
keywords_.add>("Density", "Density at which to add the target species",
density_, this, Units::densityUnits());
@@ -53,8 +51,9 @@ void AddProcedureNode::setUpKeywords()
keywords_.setOrganisation("Options", "Target");
keywords_.add>(
"Positioning", "Positioning type for individual molecules", positioningType_, positioningTypes());
- keywords_.add>("Region", "Region into which to add the species", region_, this,
- ProcedureNode::NodeClass::Region, true);
+ keywords_.add>(
+ "Region", "Region into which to add the species", region_, this,
+ NodeTypeVector{NodeType::CustomRegion, NodeType::CylindricalRegion, NodeType::GeneralRegion}, true);
keywords_.add("Rotate", "Whether to randomly rotate molecules on insertion", rotate_);
}
diff --git a/src/procedure/nodes/addPair.cpp b/src/procedure/nodes/addPair.cpp
index 69bfc1dd6e..8024dc2558 100644
--- a/src/procedure/nodes/addPair.cpp
+++ b/src/procedure/nodes/addPair.cpp
@@ -42,8 +42,9 @@ void AddPairProcedureNode::setUpKeywords()
keywords_.setOrganisation("Options", "Target");
keywords_.add>(
"Positioning", "Positioning type for individual molecules", positioningType_, positioningTypes());
- keywords_.add>("Region", "Region into which to add the species", region_, this,
- ProcedureNode::NodeClass::Region, true);
+ keywords_.add>(
+ "Region", "Region into which to add the species", region_, this,
+ NodeTypeVector{NodeType::CustomRegion, NodeType::CylindricalRegion, NodeType::GeneralRegion}, true);
keywords_.add("Rotate", "Whether to randomly rotate molecules on insertion", rotate_);
}
diff --git a/src/procedure/nodes/calculateAngle.cpp b/src/procedure/nodes/calculateAngle.cpp
deleted file mode 100644
index 858dc24c4c..0000000000
--- a/src/procedure/nodes/calculateAngle.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/calculateAngle.h"
-#include "classes/box.h"
-#include "classes/configuration.h"
-#include "classes/species.h"
-#include "keywords/bool.h"
-#include "procedure/nodes/select.h"
-
-CalculateAngleProcedureNode::CalculateAngleProcedureNode(std::shared_ptr site0,
- std::shared_ptr site1,
- std::shared_ptr site2)
- : CalculateProcedureNodeBase(ProcedureNode::NodeType::CalculateAngle, site0, site1, site2)
-{
- keywords_.setOrganisation("Options", "Sites");
- keywords_.add>("I", "Site that represents 'i' in the angle i-j-k", sites_[0], this,
- ProcedureNode::NodeType::Select, true);
- keywords_.add>("J", "Site that represents 'j' in the angle i-j-k", sites_[1], this,
- ProcedureNode::NodeType::Select, true);
- keywords_.add>("K", "Site that represents 'k' in the angle i-j-k", sites_[2], this,
- ProcedureNode::NodeType::Select, true);
-
- keywords_.setOrganisation("Options", "Control");
- keywords_.add(
- "Symmetric", "Whether to consider angles as symmetric about 90, mapping all angles to the range 0 - 90", symmetric_);
-}
-
-/*
- * Observable Target
- */
-
-// Return number of sites required to calculate observable
-int CalculateAngleProcedureNode::nSitesRequired() const { return 3; }
-
-// Return dimensionality of calculated observable
-int CalculateAngleProcedureNode::dimensionality() const { return 1; }
-
-/*
- * Execute
- */
-
-// Execute node
-bool CalculateAngleProcedureNode::execute(const ProcedureContext &procedureContext)
-{
- assert(sites_[0] && sites_[0]->currentSite());
- assert(sites_[1] && sites_[1]->currentSite());
- assert(sites_[2] && sites_[2]->currentSite());
-
- // Determine the value of the observable
- value_.x = procedureContext.configuration()->box()->angleInDegrees(sites_[0]->currentSite()->get().origin(),
- sites_[1]->currentSite()->get().origin(),
- sites_[2]->currentSite()->get().origin());
-
- if (symmetric_ && value_.x > 90.0)
- value_.x = 180.0 - value_.x;
-
- return true;
-}
diff --git a/src/procedure/nodes/calculateAngle.h b/src/procedure/nodes/calculateAngle.h
deleted file mode 100644
index 25ad486943..0000000000
--- a/src/procedure/nodes/calculateAngle.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "procedure/nodes/calculateBase.h"
-
-// Forward Declarations
-class SelectProcedureNode;
-
-// Calculate Angle Node
-class CalculateAngleProcedureNode : public CalculateProcedureNodeBase
-{
- public:
- CalculateAngleProcedureNode(std::shared_ptr site0 = nullptr,
- std::shared_ptr site1 = nullptr,
- std::shared_ptr site2 = nullptr);
- ~CalculateAngleProcedureNode() override = default;
-
- /*
- * Data
- */
- private:
- // Whether the angle should be considered symmetric about 90 (i.e. 0 == 180)
- bool symmetric_{false};
-
- /*
- * Observable Target (implements virtuals in CalculateProcedureNodeBase)
- */
- public:
- // Return number of sites required to calculate observable
- int nSitesRequired() const override;
- // Return dimensionality of calculated observable
- int dimensionality() const override;
-
- /*
- * Execute
- */
- public:
- // Execute node
- bool execute(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/calculateAxisAngle.cpp b/src/procedure/nodes/calculateAxisAngle.cpp
deleted file mode 100644
index 250477010f..0000000000
--- a/src/procedure/nodes/calculateAxisAngle.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/calculateAxisAngle.h"
-#include "base/lineParser.h"
-#include "base/sysFunc.h"
-#include "classes/box.h"
-#include "classes/configuration.h"
-#include "classes/species.h"
-#include "expression/variable.h"
-#include "keywords/bool.h"
-#include "keywords/enumOptions.h"
-#include "procedure/nodes/select.h"
-
-CalculateAxisAngleProcedureNode::CalculateAxisAngleProcedureNode(std::shared_ptr site0,
- OrientedSite::SiteAxis axis0,
- std::shared_ptr site1,
- OrientedSite::SiteAxis axis1)
- : CalculateProcedureNodeBase(ProcedureNode::NodeType::CalculateAxisAngle, site0, site1), axes_{axis0, axis1}
-{
- keywords_.setOrganisation("Options", "Sites");
- keywords_.add>("I", "Site that contains the first set of axes", sites_[0], this,
- ProcedureNode::NodeType::Select, true);
- keywords_.add>("J", "Site that contains the second set of axes", sites_[1], this,
- ProcedureNode::NodeType::Select, true);
- keywords_.add>("AxisI", "Axis to use from site I", axes_[0],
- OrientedSite::siteAxis());
- keywords_.add>("AxisJ", "Axis to use from site J", axes_[1],
- OrientedSite::siteAxis());
-
- keywords_.setOrganisation("Options", "Control");
- keywords_.add(
- "Symmetric", "Whether to consider angles as symmetric about 90, mapping all angles to the range 0 - 90", symmetric_);
-
- // Create parameters
- angleParameter_ = addParameter("theta");
-}
-
-/*
- * Data
- */
-
-// Return axis specified
-OrientedSite::SiteAxis &CalculateAxisAngleProcedureNode::axis(int n)
-{
- assert(n >= 0 && n < 2);
- return axes_[n];
-}
-
-/*
- * Observable Target
- */
-
-// Return number of sites required to calculate observable
-int CalculateAxisAngleProcedureNode::nSitesRequired() const { return 2; }
-
-// Return dimensionality of calculated observable
-int CalculateAxisAngleProcedureNode::dimensionality() const { return 1; }
-
-/*
- * Execute
- */
-
-// Prepare any necessary data, ready for execution
-bool CalculateAxisAngleProcedureNode::prepare(const ProcedureContext &procedureContext)
-{
- // Call the base class function
- if (!CalculateProcedureNodeBase::prepare(procedureContext))
- return false;
-
- return true;
-}
-
-// Execute node
-bool CalculateAxisAngleProcedureNode::execute(const ProcedureContext &procedureContext)
-{
- assert(sites_[0] && sites_[0]->currentSite());
- assert(sites_[1] && sites_[1]->currentSite());
-
- value_.x = Box::angleInDegrees(sites_[0]->currentSite()->get().axes().columnAsVec3(axes_[0]),
- sites_[1]->currentSite()->get().axes().columnAsVec3(axes_[1]));
-
- if (symmetric_ && value_.x > 90.0)
- value_.x = 180.0 - value_.x;
-
- angleParameter_->setValue(value_.x);
-
- return true;
-}
diff --git a/src/procedure/nodes/calculateAxisAngle.h b/src/procedure/nodes/calculateAxisAngle.h
deleted file mode 100644
index 69db206eaf..0000000000
--- a/src/procedure/nodes/calculateAxisAngle.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "classes/site.h"
-#include "procedure/nodes/calculateBase.h"
-
-// Forward Declarations
-class SelectProcedureNode;
-
-// Calculate AxisAngle Node
-class CalculateAxisAngleProcedureNode : public CalculateProcedureNodeBase
-{
- public:
- CalculateAxisAngleProcedureNode(std::shared_ptr site0 = nullptr,
- OrientedSite::SiteAxis axis0 = OrientedSite::XAxis,
- std::shared_ptr site1 = nullptr,
- OrientedSite::SiteAxis axis1 = OrientedSite::XAxis);
- ~CalculateAxisAngleProcedureNode() override = default;
-
- /*
- * Parameters
- */
- private:
- // Pointers to individual parameters
- std::shared_ptr angleParameter_;
-
- /*
- * Data
- */
- private:
- // Axes to use for sites
- OrientedSite::SiteAxis axes_[2];
- // Whether the angle should be considered symmetric about 90 (i.e. 0 == 180)
- bool symmetric_{false};
-
- public:
- // Return axis specified
- OrientedSite::SiteAxis &axis(int n);
-
- /*
- * Observable Target (implements virtuals in CalculateProcedureNodeBase)
- */
- public:
- // Return number of sites required to calculate observable
- int nSitesRequired() const override;
- // Return dimensionality of calculated observable
- int dimensionality() const override;
-
- /*
- * Execute
- */
- public:
- // Prepare any necessary data, ready for execution
- bool prepare(const ProcedureContext &procedureContext) override;
- // Execute node
- bool execute(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/calculateBase.cpp b/src/procedure/nodes/calculateBase.cpp
deleted file mode 100644
index 69a122f1a8..0000000000
--- a/src/procedure/nodes/calculateBase.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/calculateBase.h"
-#include "base/lineParser.h"
-#include "base/sysFunc.h"
-#include "procedure/nodes/select.h"
-
-CalculateProcedureNodeBase::CalculateProcedureNodeBase(ProcedureNode::NodeType nodeType,
- std::shared_ptr site0,
- std::shared_ptr site1,
- std::shared_ptr site2,
- std::shared_ptr site3)
- : ProcedureNode(nodeType, {ProcedureNode::AnalysisContext}, ProcedureNode::NodeClass::Calculate),
- sites_{site0, site1, site2, site3}, value_{0.0, 0.0, 0.0}
-{
-}
-
-/*
- * Observable Target
- */
-
-// Return last calculated value of observable
-double CalculateProcedureNodeBase::value(int id) const { return value_.get(id); }
-
-// Return last calculated value of observable
-Vec3 CalculateProcedureNodeBase::values() const { return value_; }
-
-/*
- * Execute
- */
-
-// Prepare any necessary data, ready for execution
-bool CalculateProcedureNodeBase::prepare(const ProcedureContext &procedureContext)
-{
- // Check that the sites have been properly defined
- for (auto n = 0; n < nSitesRequired(); ++n)
- if (!sites_[n])
- return Messenger::error("Observable site {} is not set.\n", n);
-
- return true;
-}
diff --git a/src/procedure/nodes/calculateBase.h b/src/procedure/nodes/calculateBase.h
deleted file mode 100644
index ae2b70726a..0000000000
--- a/src/procedure/nodes/calculateBase.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "keywords/node.h"
-#include "procedure/nodes/node.h"
-#include
-
-// Forward Declarations
-class SelectProcedureNode;
-
-// Calculate Node Base
-class CalculateProcedureNodeBase : public ProcedureNode
-{
- public:
- CalculateProcedureNodeBase(ProcedureNode::NodeType nodeType, std::shared_ptr site0 = nullptr,
- std::shared_ptr site1 = nullptr,
- std::shared_ptr site2 = nullptr,
- std::shared_ptr site3 = nullptr);
- ~CalculateProcedureNodeBase() override = default;
-
- /*
- * Observable Target
- */
- protected:
- // Sites (SelectProcedureNodes) to use for calculation of observable (retrieved from keywords)
- std::array, 4> sites_;
- // Last calculate value(s) of observable (as Vec3)
- Vec3 value_;
-
- public:
- // Return last calculated value of observable
- double value(int id) const;
- // Return last calculated value as vector
- Vec3 values() const;
- // Return number of sites required to calculate observable
- virtual int nSitesRequired() const = 0;
- // Return dimensionality of calculated observable
- virtual int dimensionality() const = 0;
-
- /*
- * Execute
- */
- public:
- // Prepare any necessary data, ready for execution
- bool prepare(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/calculateDistance.cpp b/src/procedure/nodes/calculateDistance.cpp
deleted file mode 100644
index fa2adda72c..0000000000
--- a/src/procedure/nodes/calculateDistance.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/calculateDistance.h"
-#include "base/lineParser.h"
-#include "base/sysFunc.h"
-#include "classes/box.h"
-#include "classes/configuration.h"
-#include "classes/species.h"
-#include "procedure/nodes/select.h"
-
-CalculateDistanceProcedureNode::CalculateDistanceProcedureNode(std::shared_ptr site0,
- std::shared_ptr site1)
- : CalculateProcedureNodeBase(ProcedureNode::NodeType::CalculateDistance, site0, site1)
-{
- keywords_.setOrganisation("Options", "Sites");
- keywords_.add>("I", "Site that represents 'i' in the distance i-j", sites_[0], this,
- ProcedureNode::NodeType::Select, true);
- keywords_.add>("J", "Site that represents 'j' in the distance i-j", sites_[1], this,
- ProcedureNode::NodeType::Select, true);
-}
-
-/*
- * Observable Target
- */
-
-// Return number of sites required to calculate observable
-int CalculateDistanceProcedureNode::nSitesRequired() const { return 2; }
-
-// Return dimensionality of calculated observable
-int CalculateDistanceProcedureNode::dimensionality() const { return 1; }
-
-/*
- * Execute
- */
-
-// Execute node
-bool CalculateDistanceProcedureNode::execute(const ProcedureContext &procedureContext)
-{
- assert(sites_[0] && sites_[0]->currentSite());
- assert(sites_[1] && sites_[1]->currentSite());
-
- // Determine the value of the observable
- value_.x = procedureContext.configuration()->box()->minimumDistance(sites_[0]->currentSite()->get().origin(),
- sites_[1]->currentSite()->get().origin());
-
- return true;
-}
diff --git a/src/procedure/nodes/calculateDistance.h b/src/procedure/nodes/calculateDistance.h
deleted file mode 100644
index a043b8eb11..0000000000
--- a/src/procedure/nodes/calculateDistance.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "procedure/nodes/calculateBase.h"
-
-// Forward Declarations
-class SelectProcedureNode;
-
-// Calculate Distance Node
-class CalculateDistanceProcedureNode : public CalculateProcedureNodeBase
-{
- public:
- CalculateDistanceProcedureNode(std::shared_ptr site0 = nullptr,
- std::shared_ptr site1 = nullptr);
- ~CalculateDistanceProcedureNode() override = default;
-
- /*
- * Observable Target (implements virtuals in CalculateProcedureNodeBase)
- */
- public:
- // Return number of sites required to calculate observable
- int nSitesRequired() const override;
- // Return dimensionality of calculated observable
- int dimensionality() const override;
-
- /*
- * Execute
- */
- public:
- // Execute node
- bool execute(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/calculateExpression.cpp b/src/procedure/nodes/calculateExpression.cpp
deleted file mode 100644
index 2c7929ef29..0000000000
--- a/src/procedure/nodes/calculateExpression.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/calculateExpression.h"
-#include "base/lineParser.h"
-#include "base/sysFunc.h"
-#include "classes/box.h"
-#include "classes/configuration.h"
-#include "classes/species.h"
-#include "keywords/nodeValue.h"
-#include "procedure/nodes/select.h"
-
-CalculateExpressionProcedureNode::CalculateExpressionProcedureNode()
- : CalculateProcedureNodeBase(ProcedureNode::NodeType::CalculateExpression)
-{
- keywords_.add("Expression", "Expression to evaluate", expression_, this);
-}
-
-/*
- * Observable Target
- */
-
-// Set expression to evaluate
-bool CalculateExpressionProcedureNode::setExpression(std::string_view expression)
-{
- auto vars = getParameters();
-
- return expression_.set(expression, vars);
-}
-
-// Return number of sites required to calculate observable
-int CalculateExpressionProcedureNode::nSitesRequired() const { return 0; }
-
-// Return dimensionality of calculated observable
-int CalculateExpressionProcedureNode::dimensionality() const { return 1; }
-
-/*
- * Execute
- */
-
-// Execute node
-bool CalculateExpressionProcedureNode::execute(const ProcedureContext &procedureContext)
-{
- value_.x = expression_.asDouble();
- return true;
-}
diff --git a/src/procedure/nodes/calculateExpression.h b/src/procedure/nodes/calculateExpression.h
deleted file mode 100644
index 9656d55a62..0000000000
--- a/src/procedure/nodes/calculateExpression.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "procedure/nodeValue.h"
-#include "procedure/nodes/calculateBase.h"
-
-// Calculate Expression
-class CalculateExpressionProcedureNode : public CalculateProcedureNodeBase
-{
- public:
- CalculateExpressionProcedureNode();
- ~CalculateExpressionProcedureNode() override = default;
-
- /*
- * Observable Target (implements virtuals in CalculateProcedureNodeBase)
- */
- private:
- // Expression to evaluate
- NodeValue expression_;
-
- public:
- // Set expression to evaluate
- bool setExpression(std::string_view expression);
-
- public:
- // Return number of sites required to calculate observable
- int nSitesRequired() const override;
- // Return dimensionality of calculated observable
- int dimensionality() const override;
-
- /*
- * Execute
- */
- public:
- // Execute node
- bool execute(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/calculateVector.cpp b/src/procedure/nodes/calculateVector.cpp
deleted file mode 100644
index aba6022695..0000000000
--- a/src/procedure/nodes/calculateVector.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/calculateVector.h"
-#include "base/lineParser.h"
-#include "base/sysFunc.h"
-#include "classes/box.h"
-#include "classes/configuration.h"
-#include "classes/species.h"
-#include "keywords/bool.h"
-#include "procedure/nodes/select.h"
-
-CalculateVectorProcedureNode::CalculateVectorProcedureNode(std::shared_ptr site0,
- std::shared_ptr site1, bool rotateIntoFrame)
- : CalculateProcedureNodeBase(ProcedureNode::NodeType::CalculateVector, site0, site1), rotateIntoFrame_(rotateIntoFrame)
-{
- keywords_.setOrganisation("Options", "Sites");
- keywords_.add>("I", "Site that represents 'i' in the vector i->j", sites_[0], this,
- ProcedureNode::NodeType::Select, true);
- keywords_.add>("J", "Site that represents 'j' in the vector i->j", sites_[1], this,
- ProcedureNode::NodeType::Select, true);
-
- keywords_.setOrganisation("Options", "Control");
- keywords_.add("RotateIntoFrame", "Whether to rotate the calculated vector into the local frame defined on 'I'",
- rotateIntoFrame_);
-}
-
-/*
- * Observable Target
- */
-
-// Return number of sites required to calculate observable
-int CalculateVectorProcedureNode::nSitesRequired() const { return 2; }
-
-// Return dimensionality of calculated observable
-int CalculateVectorProcedureNode::dimensionality() const { return 3; }
-
-/*
- * Execute
- */
-
-// Prepare any necessary data, ready for execution
-bool CalculateVectorProcedureNode::prepare(const ProcedureContext &procedureContext)
-{
- // Call the base class function
- if (!CalculateProcedureNodeBase::prepare(procedureContext))
- return false;
-
- return true;
-}
-
-// Execute node
-bool CalculateVectorProcedureNode::execute(const ProcedureContext &procedureContext)
-{
- assert(sites_[0] && sites_[0]->currentSite());
- assert(sites_[1] && sites_[1]->currentSite());
-
- // Determine the value of the observable
- value_ = procedureContext.configuration()->box()->minimumVector(sites_[0]->currentSite()->get().origin(),
- sites_[1]->currentSite()->get().origin());
-
- // Rotate the vector into the local frame defined on the first site?
- if (rotateIntoFrame_)
- value_ = sites_[0]->currentSite()->get().axes().transposeMultiply(value_);
-
- return true;
-}
diff --git a/src/procedure/nodes/calculateVector.h b/src/procedure/nodes/calculateVector.h
deleted file mode 100644
index ce6471ea66..0000000000
--- a/src/procedure/nodes/calculateVector.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "procedure/nodes/calculateBase.h"
-
-// Forward Declarations
-class SelectProcedureNode;
-
-// Calculate Vector Node
-class CalculateVectorProcedureNode : public CalculateProcedureNodeBase
-{
- public:
- CalculateVectorProcedureNode(std::shared_ptr site0 = nullptr,
- std::shared_ptr site1 = nullptr, bool rotateIntoFrame = false);
- ~CalculateVectorProcedureNode() override = default;
-
- /*
- * Data
- */
- private:
- // Whether to rotate into the frame of the first site
- bool rotateIntoFrame_;
-
- /*
- * Observable Target (implements virtuals in CalculateProcedureNodeBase)
- */
- public:
- // Return number of sites required to calculate observable
- int nSitesRequired() const override;
- // Return dimensionality of calculated observable
- int dimensionality() const override;
-
- /*
- * Execute
- */
- public:
- // Prepare any necessary data, ready for execution
- bool prepare(const ProcedureContext &procedureContext) override;
- // Execute node
- bool execute(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/collect1D.cpp b/src/procedure/nodes/collect1D.cpp
deleted file mode 100644
index 0b92c95a24..0000000000
--- a/src/procedure/nodes/collect1D.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/collect1D.h"
-#include "base/lineParser.h"
-#include "base/sysFunc.h"
-#include "classes/configuration.h"
-#include "keywords/nodeAndInteger.h"
-#include "keywords/nodeBranch.h"
-#include "keywords/vec3Double.h"
-#include "math/data1D.h"
-#include "procedure/nodes/calculateBase.h"
-#include "procedure/nodes/sequence.h"
-
-Collect1DProcedureNode::Collect1DProcedureNode(std::shared_ptr observable,
- ProcedureNode::NodeContext subCollectContext, double rMin, double rMax,
- double binWidth)
- : ProcedureNode(ProcedureNode::NodeType::Collect1D, {ProcedureNode::AnalysisContext}),
- xObservable_{observable, 0}, rangeX_{rMin, rMax, binWidth}, subCollectBranch_(subCollectContext, *this, "SubCollect")
-{
- keywords_.setOrganisation("Options", "Quantity / Range");
- keywords_.add>(
- "QuantityX", "Calculated observable to collect", xObservable_, this, ProcedureNode::NodeClass::Calculate, true);
- keywords_.add("RangeX", "Range and binwidth of the x-axis of the histogram", rangeX_,
- Vec3(0.0, 0.0, 1.0e-5), std::nullopt, Vec3Labels::MinMaxBinwidthlabels);
-
- keywords_.addHidden("SubCollect", "Branch which runs if the target quantity was binned successfully",
- subCollectBranch_);
-}
-
-/*
- * Data
- */
-
-// Return current data
-Data1D Collect1DProcedureNode::data() const
-{
- assert(histogram_);
-
- return histogram_->get().data();
-}
-
-// Return accumulated data
-const Data1D &Collect1DProcedureNode::accumulatedData() const
-{
- assert(histogram_);
-
- return histogram_->get().accumulatedData();
-}
-
-/*
- * Branches
- */
-
-// Return the branch from this node (if it has one)
-OptionalReferenceWrapper Collect1DProcedureNode::branch() { return subCollectBranch_; }
-
-/*
- * Execute
- */
-
-// Prepare any necessary data, ready for execution
-bool Collect1DProcedureNode::prepare(const ProcedureContext &procedureContext)
-{
- // Construct our data name, and search for it in the supplied list
- std::string dataName = fmt::format("{}_{}_Bins", name(), procedureContext.configuration()->niceName());
- auto [target, status] = procedureContext.processingModuleData().realiseIf(
- dataName, procedureContext.processingModuleDataPrefix(), GenericItem::InRestartFileFlag);
- if (status == GenericItem::ItemStatus::Created)
- {
- Messenger::printVerbose("One-dimensional histogram data for '{}' was not in the target list, so it will now be "
- "initialised...\n",
- name());
- target.initialise(rangeX_.x, rangeX_.y, rangeX_.z);
- }
-
- // Zero the current bins, ready for the new pass
- target.zeroBins();
-
- // Store a reference to the data
- histogram_ = target;
-
- // Check target observable
- if (!xObservable_.first)
- return Messenger::error("No valid x quantity set in '{}'.\n", name());
-
- // Prepare any branches
- if (!subCollectBranch_.prepare(procedureContext))
- return false;
-
- return true;
-}
-
-// Execute node
-bool Collect1DProcedureNode::execute(const ProcedureContext &procedureContext)
-{
- auto [observable, index] = xObservable_;
-
- assert(observable && histogram_);
-
- // Bin the current value of the observable, and execute sub-collection branch on success
- if (histogram_->get().bin(observable->value(index)))
- return subCollectBranch_.execute(procedureContext);
-
- return true;
-}
-
-// Finalise any necessary data after execution
-bool Collect1DProcedureNode::finalise(const ProcedureContext &procedureContext)
-{
- assert(histogram_);
-
- // Accumulate the current binned data
- histogram_->get().accumulate();
-
- // Finalise any branches
- if (!subCollectBranch_.finalise(procedureContext))
- return false;
-
- return true;
-}
diff --git a/src/procedure/nodes/collect1D.h b/src/procedure/nodes/collect1D.h
deleted file mode 100644
index d8fb183893..0000000000
--- a/src/procedure/nodes/collect1D.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "math/histogram1D.h"
-#include "procedure/nodes/node.h"
-#include "procedure/nodes/sequence.h"
-
-// Forward Declarations
-class CalculateProcedureNodeBase;
-class LineParser;
-
-// Procedure Node - Collect1D
-class Collect1DProcedureNode : public ProcedureNode
-{
- public:
- Collect1DProcedureNode(std::shared_ptr observable = nullptr,
- ProcedureNode::NodeContext subCollectContext = ProcedureNode::AnalysisContext, double rMin = 0.0,
- double rMax = 10.0, double binWidth = 0.05);
- ~Collect1DProcedureNode() override = default;
-
- /*
- * Data
- */
- private:
- // Observable (and associated index thereof) to bin along x
- std::pair, int> xObservable_{nullptr, 0};
- // Histogram in which to accumulate data
- OptionalReferenceWrapper histogram_;
- // Range and binwidth of the histogram for QuantityX
- Vec3 rangeX_{0.0, 10.0, 0.05};
-
- public:
- // Return current data
- Data1D data() const;
- // Return accumulated data
- const Data1D &accumulatedData() const;
-
- /*
- * Branches
- */
- private:
- // Branch for subcollection, run if the target quantity is successfully binned
- ProcedureNodeSequence subCollectBranch_;
-
- public:
- // Return the branch from this node (if it has one)
- OptionalReferenceWrapper branch() override;
-
- /*
- * Execute
- */
- public:
- // Prepare any necessary data, ready for execution
- bool prepare(const ProcedureContext &procedureContext) override;
- // Execute node
- bool execute(const ProcedureContext &procedureContext) override;
- // Finalise any necessary data after execution
- bool finalise(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/collect2D.cpp b/src/procedure/nodes/collect2D.cpp
deleted file mode 100644
index 3854414d5e..0000000000
--- a/src/procedure/nodes/collect2D.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/collect2D.h"
-#include "classes/configuration.h"
-#include "keywords/nodeAndInteger.h"
-#include "keywords/nodeBranch.h"
-#include "keywords/vec3Double.h"
-#include "math/data2D.h"
-#include "procedure/nodes/calculateBase.h"
-#include "procedure/nodes/sequence.h"
-
-Collect2DProcedureNode::Collect2DProcedureNode(std::shared_ptr xObservable,
- std::shared_ptr yObservable,
- ProcedureNode::NodeContext subCollectContext, double xMin, double xMax,
- double xBinWidth, double yMin, double yMax, double yBinWidth)
- : ProcedureNode(ProcedureNode::NodeType::Collect2D, {ProcedureNode::AnalysisContext}), xObservable_{xObservable, 0},
- yObservable_{yObservable, 0}, rangeX_{xMin, xMax, xBinWidth}, rangeY_{yMin, yMax, yBinWidth},
- subCollectBranch_(subCollectContext, *this, "SubCollect")
-{
- keywords_.setOrganisation("Options", "Quantities / Ranges");
- keywords_.add>("QuantityX", "Calculated observable to collect for x axis",
- xObservable_, this, ProcedureNode::NodeClass::Calculate,
- true);
- keywords_.add>("QuantityY", "Calculated observable to collect for y axis",
- yObservable_, this, ProcedureNode::NodeClass::Calculate,
- true);
- keywords_.add("RangeX", "Range and binwidth of the x-axis of the histogram", rangeX_,
- Vec3(0.0, 0.0, 1.0e-5), std::nullopt, Vec3Labels::MinMaxBinwidthlabels);
- keywords_.add("RangeY", "Range and binwidth of the y-axis of the histogram", rangeY_,
- Vec3(0.0, 0.0, 1.0e-5), std::nullopt, Vec3Labels::MinMaxBinwidthlabels);
-
- keywords_.addHidden("SubCollect", "Branch which runs if the target quantities were binned successfully",
- subCollectBranch_);
-}
-
-/*
- * Data
- */
-
-// Return accumulated data
-const Data2D &Collect2DProcedureNode::accumulatedData() const
-{
- assert(histogram_);
-
- return histogram_->get().accumulatedData();
-}
-
-/*
- * Branches
- */
-
-// Return the branch from this node (if it has one)
-OptionalReferenceWrapper Collect2DProcedureNode::branch() { return subCollectBranch_; }
-
-/*
- * Execute
- */
-
-// Prepare any necessary data, ready for execution
-bool Collect2DProcedureNode::prepare(const ProcedureContext &procedureContext)
-{
- // Construct our data name, and search for it in the supplied list
- std::string dataName = fmt::format("{}_{}_Bins", name(), procedureContext.configuration()->niceName());
- auto [target, status] = procedureContext.processingModuleData().realiseIf(
- dataName, procedureContext.processingModuleDataPrefix(), GenericItem::InRestartFileFlag);
- if (status == GenericItem::ItemStatus::Created)
- {
- Messenger::printVerbose("Two-dimensional histogram data for '{}' was not in the target list, so it will now be "
- "initialised...\n",
- name());
- target.initialise(rangeX_.x, rangeX_.y, rangeX_.z, rangeY_.x, rangeY_.y, rangeY_.z);
- }
-
- // Zero the current bins, ready for the new pass
- target.zeroBins();
-
- // Store a reference to the data
- histogram_ = target;
-
- // Check target observables
- if (!xObservable_.first)
- return Messenger::error("No valid x quantity set in '{}'.\n", name());
- if (!yObservable_.first)
- return Messenger::error("No valid y quantity set in '{}'.\n", name());
-
- // Prepare any branches
- if (!subCollectBranch_.prepare(procedureContext))
- return false;
-
- return true;
-}
-
-// Execute node
-bool Collect2DProcedureNode::execute(const ProcedureContext &procedureContext)
-{
- auto [xObs, xIndex] = xObservable_;
- auto [yObs, yIndex] = yObservable_;
-
- assert(xObs && yObs && histogram_);
-
- // Bin the current value of the observable
- if (histogram_->get().bin(xObs->value(xIndex), yObs->value(yIndex)))
- return subCollectBranch_.execute(procedureContext);
-
- return true;
-}
-
-// Finalise any necessary data after execution
-bool Collect2DProcedureNode::finalise(const ProcedureContext &procedureContext)
-{
- assert(histogram_);
-
- // Accumulate the current binned data
- histogram_->get().accumulate();
-
- // Finalise any branches
- if (!subCollectBranch_.finalise(procedureContext))
- return false;
-
- return true;
-}
diff --git a/src/procedure/nodes/collect2D.h b/src/procedure/nodes/collect2D.h
deleted file mode 100644
index aacbed322b..0000000000
--- a/src/procedure/nodes/collect2D.h
+++ /dev/null
@@ -1,65 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "math/histogram2D.h"
-#include "procedure/nodes/node.h"
-#include "procedure/nodes/sequence.h"
-
-// Forward Declarations
-class CalculateProcedureNodeBase;
-class LineParser;
-
-// Procedure Node - Collect2D
-class Collect2DProcedureNode : public ProcedureNode
-{
- public:
- explicit Collect2DProcedureNode(std::shared_ptr xObservable = nullptr,
- std::shared_ptr yObservable = nullptr,
- ProcedureNode::NodeContext subCollectContext = ProcedureNode::AnalysisContext,
- double xMin = 0.0, double xMax = 10.0, double xBinWidth = 0.05, double yMin = 0.0,
- double yMax = 10.0, double yBinWidth = 0.05);
- ~Collect2DProcedureNode() override = default;
-
- /*
- * Data
- */
- private:
- // Observable (and associated index thereof) to bin along x
- std::pair, int> xObservable_{nullptr, 0};
- // Observable (and associated index thereof) to bin along y
- std::pair, int> yObservable_{nullptr, 0};
- // Histogram in which to accumulate data
- OptionalReferenceWrapper histogram_;
- // Range and binwidth of the histogram for QuantityX
- Vec3 rangeX_{0.0, 10.0, 0.05};
- // Range and binwidth of the histogram for QuantityY
- Vec3 rangeY_{0.0, 10.0, 0.05};
-
- public:
- // Return accumulated data
- const Data2D &accumulatedData() const;
-
- /*
- * Branches
- */
- private:
- // Branch for subcollection, run if the target quantity is successfully binned
- ProcedureNodeSequence subCollectBranch_;
-
- public:
- // Return the branch from this node (if it has one)
- OptionalReferenceWrapper branch() override;
-
- /*
- * Execute
- */
- public:
- // Prepare any necessary data, ready for execution
- bool prepare(const ProcedureContext &procedureContext) override;
- // Execute node
- bool execute(const ProcedureContext &procedureContext) override;
- // Finalise any necessary data after execution
- bool finalise(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/collect3D.cpp b/src/procedure/nodes/collect3D.cpp
deleted file mode 100644
index ac3f538a2c..0000000000
--- a/src/procedure/nodes/collect3D.cpp
+++ /dev/null
@@ -1,161 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/collect3D.h"
-#include "base/lineParser.h"
-#include "base/sysFunc.h"
-#include "classes/configuration.h"
-#include "keywords/nodeAndInteger.h"
-#include "keywords/nodeBranch.h"
-#include "keywords/vec3Double.h"
-#include "math/data3D.h"
-#include "procedure/nodes/calculateBase.h"
-#include "procedure/nodes/sequence.h"
-
-Collect3DProcedureNode::Collect3DProcedureNode(std::shared_ptr xObservable,
- std::shared_ptr yObservable,
- std::shared_ptr zObservable,
- ProcedureNode::NodeContext subCollectContext, Vec3 xMinMaxBin,
- Vec3 yMinMaxBin, Vec3 zMinMaxBin)
- : ProcedureNode(ProcedureNode::NodeType::Collect3D, {ProcedureNode::AnalysisContext}), xObservable_{xObservable, 0},
- yObservable_{yObservable, 0}, zObservable_{zObservable, 0}, rangeX_{xMinMaxBin}, rangeY_{yMinMaxBin}, rangeZ_{zMinMaxBin},
- subCollectBranch_(subCollectContext, *this, "SubCollect")
-{
- keywords_.setOrganisation("Options", "Quantities / Ranges");
- keywords_.add>("QuantityX", "Calculated observable to collect for x axis",
- xObservable_, this, ProcedureNode::NodeClass::Calculate,
- true);
- keywords_.add>("QuantityY", "Calculated observable to collect for y axis",
- yObservable_, this, ProcedureNode::NodeClass::Calculate,
- true);
- keywords_.add>("QuantityZ", "Calculated observable to collect for z axis",
- zObservable_, this, ProcedureNode::NodeClass::Calculate,
- true);
- keywords_.add("RangeX", "Range and binwidth of the x-axis of the histogram", rangeX_,
- Vec3(-1.0e6, -1.0e6, 1.0e-5), std::nullopt, Vec3Labels::MinMaxBinwidthlabels);
- keywords_.add("RangeY", "Range and binwidth of the y-axis of the histogram", rangeY_,
- Vec3(-1.0e6, -1.0e6, 1.0e-5), std::nullopt, Vec3Labels::MinMaxBinwidthlabels);
- keywords_.add("RangeZ", "Range and binwidth of the z-axis of the histogram", rangeZ_,
- Vec3(-1.0e6, -1.0e6, 1.0e-5), std::nullopt, Vec3Labels::MinMaxBinwidthlabels);
-
- keywords_.addHidden("SubCollect", "Branch which runs if the target quantities were binned successfully",
- subCollectBranch_);
-}
-Collect3DProcedureNode::Collect3DProcedureNode(std::shared_ptr xyzObservable,
- ProcedureNode::NodeContext subCollectContext, Vec3 xMinMaxBin,
- Vec3 yMinMaxBin, Vec3 zMinMaxBin)
- : ProcedureNode(ProcedureNode::NodeType::Collect3D, {ProcedureNode::AnalysisContext}), xObservable_{xyzObservable, 0},
- yObservable_{xyzObservable, 1},
- zObservable_{xyzObservable, 2}, rangeX_{xMinMaxBin}, rangeY_{yMinMaxBin}, rangeZ_{zMinMaxBin},
- subCollectBranch_(subCollectContext, *this, "SubCollect")
-{
- keywords_.setOrganisation("Options", "Quantities / Ranges");
- keywords_.add>("QuantityX", "Calculated observable to collect for x axis",
- xObservable_, this, ProcedureNode::NodeClass::Calculate,
- true);
- keywords_.add>("QuantityY", "Calculated observable to collect for y axis",
- yObservable_, this, ProcedureNode::NodeClass::Calculate,
- true);
- keywords_.add>("QuantityZ", "Calculated observable to collect for z axis",
- zObservable_, this, ProcedureNode::NodeClass::Calculate,
- true);
- keywords_.add("RangeX", "Range and binwidth of the x-axis of the histogram", rangeX_,
- Vec3(-1.0e6, -1.0e6, 1.0e-5), std::nullopt, Vec3Labels::MinMaxBinwidthlabels);
- keywords_.add("RangeY", "Range and binwidth of the y-axis of the histogram", rangeY_,
- Vec3(-1.0e6, -1.0e6, 1.0e-5), std::nullopt, Vec3Labels::MinMaxBinwidthlabels);
- keywords_.add("RangeZ", "Range and binwidth of the z-axis of the histogram", rangeZ_,
- Vec3(-1.0e6, -1.0e6, 1.0e-5), std::nullopt, Vec3Labels::MinMaxBinwidthlabels);
-
- keywords_.addHidden("SubCollect", "Branch which runs if the target quantities were binned successfully",
- subCollectBranch_);
-}
-
-/*
- * Data
- */
-
-// Return accumulated data
-const Data3D &Collect3DProcedureNode::accumulatedData() const
-{
- assert(histogram_);
-
- return histogram_->get().accumulatedData();
-}
-
-/*
- * Branches
- */
-
-// Return the branch from this node (if it has one)
-OptionalReferenceWrapper Collect3DProcedureNode::branch() { return subCollectBranch_; }
-
-/*
- * Execute
- */
-
-// Prepare any necessary data, ready for execution
-bool Collect3DProcedureNode::prepare(const ProcedureContext &procedureContext)
-{
- // Construct our data name, and search for it in the supplied list
- std::string dataName = fmt::format("{}_{}_Bins", name(), procedureContext.configuration()->niceName());
- auto [target, status] = procedureContext.processingModuleData().realiseIf(
- dataName, procedureContext.processingModuleDataPrefix(), GenericItem::InRestartFileFlag);
- if (status == GenericItem::ItemStatus::Created)
- {
- Messenger::printVerbose("Three-dimensional histogram data for '{}' was not in the target list, so it will now "
- "be initialised...\n",
- name());
- target.initialise(rangeX_.x, rangeX_.y, rangeX_.z, rangeY_.x, rangeY_.y, rangeY_.z, rangeZ_.x, rangeZ_.y, rangeZ_.z);
- }
-
- // Zero the current bins, ready for the new pass
- target.zeroBins();
-
- // Store a reference to the data
- histogram_ = target;
-
- // Check target observables
- if (!xObservable_.first)
- return Messenger::error("No valid x quantity set in '{}'.\n", name());
- if (!yObservable_.first)
- return Messenger::error("No valid y quantity set in '{}'.\n", name());
- if (!zObservable_.first)
- return Messenger::error("No valid z quantity set in '{}'.\n", name());
-
- // Prepare any branches
- if (!subCollectBranch_.prepare(procedureContext))
- return false;
-
- return true;
-}
-
-// Execute node
-bool Collect3DProcedureNode::execute(const ProcedureContext &procedureContext)
-{
- auto [xObs, xIndex] = xObservable_;
- auto [yObs, yIndex] = yObservable_;
- auto [zObs, zIndex] = zObservable_;
-
- assert(xObs && yObs && zObs && histogram_);
-
- // Bin the current value of the observable
- if (histogram_->get().bin(xObs->value(xIndex), yObs->value(yIndex), zObs->value(zIndex)))
- return subCollectBranch_.execute(procedureContext);
-
- return true;
-}
-
-// Finalise any necessary data after execution
-bool Collect3DProcedureNode::finalise(const ProcedureContext &procedureContext)
-{
- assert(histogram_);
-
- // Accumulate the current binned data
- histogram_->get().accumulate();
-
- // Finalise any branches
- if (!subCollectBranch_.finalise(procedureContext))
- return false;
-
- return true;
-}
diff --git a/src/procedure/nodes/collect3D.h b/src/procedure/nodes/collect3D.h
deleted file mode 100644
index 7e8804967c..0000000000
--- a/src/procedure/nodes/collect3D.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "math/histogram3D.h"
-#include "procedure/nodes/node.h"
-#include "procedure/nodes/sequence.h"
-
-// Forward Declarations
-class CalculateProcedureNodeBase;
-class LineParser;
-
-// Procedure Node - Collect3D
-class Collect3DProcedureNode : public ProcedureNode
-{
- public:
- explicit Collect3DProcedureNode(std::shared_ptr xObservable = nullptr,
- std::shared_ptr yObservable = nullptr,
- std::shared_ptr zObservable = nullptr,
- ProcedureNode::NodeContext subCollectContext = ProcedureNode::AnalysisContext,
- Vec3 xMinMaxBin = {0.0, 10.0, 0.05}, Vec3 yMinMaxBin = {0.0, 10.0, 0.05},
- Vec3 zMinMaxBin = {0.0, 10.0, 0.05});
- explicit Collect3DProcedureNode(std::shared_ptr xyzObservable,
- ProcedureNode::NodeContext subCollectContext = ProcedureNode::AnalysisContext,
- Vec3 xMinMaxBin = {0.0, 10.0, 0.05}, Vec3 yMinMaxBin = {0.0, 10.0, 0.05},
- Vec3 zMinMaxBin = {0.0, 10.0, 0.05});
- ~Collect3DProcedureNode() override = default;
-
- /*
- * Data
- */
- private:
- // Observable (and associated index thereof) to bin along x
- std::pair, int> xObservable_{nullptr, 0};
- // Observable (and associated index thereof) to bin along y
- std::pair, int> yObservable_{nullptr, 0};
- // Observable (and associated index thereof) to bin along z
- std::pair, int> zObservable_{nullptr, 0};
- // Histogram in which to accumulate data
- OptionalReferenceWrapper histogram_;
- // Range and binwidth of the histogram for QuantityX
- Vec3 rangeX_{0.0, 10.0, 0.05};
- // Range and binwidth of the histogram for QuantityY
- Vec3 rangeY_{0.0, 10.0, 0.05};
- // Range and binwidth of the histogram for QuantityZ
- Vec3 rangeZ_{0.0, 10.0, 0.05};
-
- public:
- // Return accumulated data
- const Data3D &accumulatedData() const;
-
- /*
- * Branches
- */
- private:
- // Branch for subcollection, run if the target quantity is successfully binned
- ProcedureNodeSequence subCollectBranch_;
-
- public:
- // Return the branch from this node (if it has one)
- OptionalReferenceWrapper branch() override;
-
- /*
- * Execute
- */
- public:
- // Prepare any necessary data, ready for execution
- bool prepare(const ProcedureContext &procedureContext) override;
- // Execute node
- bool execute(const ProcedureContext &procedureContext) override;
- // Finalise any necessary data after execution
- bool finalise(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/ifValueInRange.cpp b/src/procedure/nodes/ifValueInRange.cpp
deleted file mode 100644
index 332ecbdf33..0000000000
--- a/src/procedure/nodes/ifValueInRange.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/ifValueInRange.h"
-#include "expression/variable.h"
-#include "keywords/node.h"
-#include "keywords/nodeBranch.h"
-#include "keywords/nodeValue.h"
-#include "keywords/range.h"
-#include "procedure/nodes/sequence.h"
-#include
-
-IfValueInRangeProcedureNode::IfValueInRangeProcedureNode()
- : ProcedureNode(ProcedureNode::NodeType::IfValueInRange, {NodeContext::AnyContext}),
- thenBranch_(NodeContext::InheritContext, *this, "Then")
-{
- keywords_.setOrganisation("Options", "Condition");
- keywords_.add("Value", "Value expression to test", value_, this);
- keywords_.add("ValidRange", "Valid acceptance range for value", valueRange_,
- Vec3Labels::MinMaxBinwidthlabels);
-
- keywords_.addHidden("Then", "Branch to run on valid value", thenBranch_);
-}
-
-/*
- * Identity
- */
-
-// Return whether a name for the node must be provided
-bool IfValueInRangeProcedureNode::mustBeNamed() const { return false; }
-
-/*
- * Branch
- */
-
-// Return the branch from this node (if it has one)
-OptionalReferenceWrapper IfValueInRangeProcedureNode::branch() { return thenBranch_; }
-
-/*
- * Execute
- */
-
-// Prepare any necessary data, ready for execution
-bool IfValueInRangeProcedureNode::prepare(const ProcedureContext &procedureContext)
-{
- return thenBranch_.prepare(procedureContext);
-}
-
-// Execute node
-bool IfValueInRangeProcedureNode::execute(const ProcedureContext &procedureContext)
-{
- // Evaluate and check
- if (valueRange_.contains(value_.asDouble()))
- return thenBranch_.execute(procedureContext);
-
- return true;
-}
-
-// Finalise any necessary data after execution
-bool IfValueInRangeProcedureNode::finalise(const ProcedureContext &procedureContext)
-{
- return thenBranch_.finalise(procedureContext);
-}
diff --git a/src/procedure/nodes/ifValueInRange.h b/src/procedure/nodes/ifValueInRange.h
deleted file mode 100644
index 6965c7d651..0000000000
--- a/src/procedure/nodes/ifValueInRange.h
+++ /dev/null
@@ -1,62 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "math/range.h"
-#include "procedure/nodes/node.h"
-#include "procedure/nodes/sequence.h"
-#include
-#include
-
-// IfValueInRange Node
-class IfValueInRangeProcedureNode : public ProcedureNode
-{
- public:
- explicit IfValueInRangeProcedureNode();
-
- /*
- * Identity
- */
- public:
- // Return whether a name for the node must be provided
- bool mustBeNamed() const override;
-
- /*
- * Parameters
- */
- private:
- // Pointers to individual parameters
- std::shared_ptr currentValueParameter_;
-
- /*
- * Value & Acceptable Range
- */
- private:
- // Value that we are testing
- NodeValue value_;
- // Range of acceptable values
- Range valueRange_{0.0, 5.0};
-
- /*
- * Branch
- */
- private:
- // Branch for Then
- ProcedureNodeSequence thenBranch_;
-
- public:
- // Return the branch from this node (if it has one)
- OptionalReferenceWrapper branch() override;
-
- /*
- * Execute
- */
- public:
- // Prepare any necessary data, ready for execution
- bool prepare(const ProcedureContext &procedureContext) override;
- // Execute node
- bool execute(const ProcedureContext &procedureContext) override;
- // Finalise any necessary data after execution
- bool finalise(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/integerCollect1D.cpp b/src/procedure/nodes/integerCollect1D.cpp
deleted file mode 100644
index b1e2218fbd..0000000000
--- a/src/procedure/nodes/integerCollect1D.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/integerCollect1D.h"
-#include "base/lineParser.h"
-#include "base/sysFunc.h"
-#include "classes/configuration.h"
-#include "keywords/nodeAndInteger.h"
-#include "keywords/nodeBranch.h"
-#include "keywords/optionalInt.h"
-#include "math/data1D.h"
-#include "procedure/nodes/calculateBase.h"
-#include "procedure/nodes/sequence.h"
-
-IntegerCollect1DProcedureNode::IntegerCollect1DProcedureNode(std::shared_ptr observable,
- ProcedureNode::NodeContext subCollectContext)
- : ProcedureNode(ProcedureNode::NodeType::IntegerCollect1D, {ProcedureNode::AnalysisContext}), xObservable_{observable, 0},
- subCollectBranch_(subCollectContext, *this, "SubCollect")
-{
- keywords_.setOrganisation("Options", "Quantity / Range");
- keywords_.add>(
- "QuantityX", "Calculated observable to collect", xObservable_, this, ProcedureNode::NodeClass::Calculate, true);
- keywords_.add("Minimum", "Minimum allowed bin value for the histogram", minimum_, 0, std::nullopt,
- 1, "No Limit");
- keywords_.add("Maximum", "Maximum allowed bin value for the histogram", maximum_, 0, std::nullopt,
- 1, "No Limit");
- keywords_.addHidden("SubCollect", "Branch which runs if the target quantity was binned successfully",
- subCollectBranch_);
-}
-
-/*
- * Data
- */
-
-// Return current data
-Data1D IntegerCollect1DProcedureNode::data() const
-{
- assert(histogram_);
-
- return histogram_->get().data();
-}
-
-// Return accumulated data
-const Data1D &IntegerCollect1DProcedureNode::accumulatedData() const
-{
- assert(histogram_);
-
- return histogram_->get().accumulatedData();
-}
-
-/*
- * Branches
- */
-
-// Return the branch from this node (if it has one)
-OptionalReferenceWrapper IntegerCollect1DProcedureNode::branch() { return subCollectBranch_; }
-
-/*
- * Execute
- */
-
-// Prepare any necessary data, ready for execution
-bool IntegerCollect1DProcedureNode::prepare(const ProcedureContext &procedureContext)
-{
- // Construct our data name, and search for it in the supplied list
- std::string dataName = fmt::format("{}_{}_Bins", name(), procedureContext.configuration()->niceName());
- auto [target, status] = procedureContext.processingModuleData().realiseIf(
- dataName, procedureContext.processingModuleDataPrefix(), GenericItem::InRestartFileFlag);
- if (status == GenericItem::ItemStatus::Created)
- {
- Messenger::printVerbose("One-dimensional histogram data for '{}' was not in the target list, so it will now be "
- "initialised...\n",
- name());
- target.initialise(minimum_, maximum_);
- }
-
- // Zero the current bins, ready for the new pass
- target.zeroBins();
-
- // Store a reference to the data
- histogram_ = target;
-
- // Check target observable
- if (!xObservable_.first)
- return Messenger::error("No valid x quantity set in '{}'.\n", name());
-
- // Prepare any branches
- if (!subCollectBranch_.prepare(procedureContext))
- return false;
-
- return true;
-}
-
-// Execute node
-bool IntegerCollect1DProcedureNode::execute(const ProcedureContext &procedureContext)
-{
- auto [observable, index] = xObservable_;
-
- assert(observable && histogram_);
-
- // Bin the current value of the observable, and execute sub-collection branch on success
- if (histogram_->get().bin(observable->value(index)))
- return subCollectBranch_.execute(procedureContext);
-
- return true;
-}
-
-// Finalise any necessary data after execution
-bool IntegerCollect1DProcedureNode::finalise(const ProcedureContext &procedureContext)
-{
- assert(histogram_);
-
- // Accumulate the current binned data
- histogram_->get().accumulate();
-
- // Finalise any branches
- if (!subCollectBranch_.finalise(procedureContext))
- return false;
-
- return true;
-}
diff --git a/src/procedure/nodes/integerCollect1D.h b/src/procedure/nodes/integerCollect1D.h
deleted file mode 100644
index 04ad28bf50..0000000000
--- a/src/procedure/nodes/integerCollect1D.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "math/integerHistogram1D.h"
-#include "procedure/nodes/node.h"
-#include "procedure/nodes/sequence.h"
-
-// Forward Declarations
-class CalculateProcedureNodeBase;
-class LineParser;
-
-// Procedure Node - Collect1D
-class IntegerCollect1DProcedureNode : public ProcedureNode
-{
- public:
- IntegerCollect1DProcedureNode(std::shared_ptr observable = nullptr,
- ProcedureNode::NodeContext subCollectContext = ProcedureNode::AnalysisContext);
- ~IntegerCollect1DProcedureNode() override = default;
-
- /*
- * Data
- */
- private:
- // Observable (and associated index thereof) to bin along x
- std::pair, int> xObservable_{nullptr, 0};
- // Histogram in which to accumulate data
- OptionalReferenceWrapper histogram_;
- // Range of the histogram for QuantityX
- std::optional minimum_;
- std::optional maximum_;
-
- public:
- // Return current data
- Data1D data() const;
- // Return accumulated data
- const Data1D &accumulatedData() const;
-
- /*
- * Branches
- */
- private:
- // Branch for subcollection, run if the target quantity is successfully binned
- ProcedureNodeSequence subCollectBranch_;
-
- public:
- // Return the branch from this node (if it has one)
- OptionalReferenceWrapper branch() override;
-
- /*
- * Execute
- */
- public:
- // Prepare any necessary data, ready for execution
- bool prepare(const ProcedureContext &procedureContext) override;
- // Execute node
- bool execute(const ProcedureContext &procedureContext) override;
- // Finalise any necessary data after execution
- bool finalise(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/integrate1D.cpp b/src/procedure/nodes/integrate1D.cpp
deleted file mode 100644
index f3d87de735..0000000000
--- a/src/procedure/nodes/integrate1D.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/integrate1D.h"
-#include "classes/box.h"
-#include "classes/configuration.h"
-#include "io/export/data1D.h"
-#include "keywords/range.h"
-#include "math/integrator.h"
-#include "modules/analyse/analyse.h"
-#include "procedure/nodes/operateBase.h"
-#include "procedure/nodes/process1D.h"
-
-Integrate1DProcedureNode::Integrate1DProcedureNode(std::shared_ptr target)
- : ProcedureNode(ProcedureNode::NodeType::Integrate1D, {ProcedureNode::AnalysisContext}), sourceData_(target)
-{
- keywords_.setOrganisation("Options", "Target");
- keywords_.add>("SourceData", "Process1D node containing the data to integrate",
- sourceData_, this, ProcedureNode::NodeType::Process1D, false);
-
- keywords_.setOrganisation("Options", "Ranges");
- keywords_.add("RangeA", "X range for first integration region", range_[0], Vec3Labels::MinMaxDeltaLabels);
- keywords_.add("RangeB", "X range for second integration region", range_[1], Vec3Labels::MinMaxDeltaLabels);
- keywords_.add("RangeC", "X range for third integration region", range_[2], Vec3Labels::MinMaxDeltaLabels);
-}
-
-/*
- * Data
- */
-
-// Return calculated integral
-const SampledDouble &Integrate1DProcedureNode::integral(int index) const { return integral_[index]; }
-
-/*
- * Execute
- */
-
-// Prepare any necessary data, ready for execution
-bool Integrate1DProcedureNode::prepare(const ProcedureContext &procedureContext)
-{
- if (!sourceData_)
- return Messenger::error("No source Process1D node set in '{}'.\n", name());
-
- return true;
-}
-
-// Finalise any necessary data after execution
-bool Integrate1DProcedureNode::finalise(const ProcedureContext &procedureContext)
-{
- // Calculate integrals
- integral_[0] += Integrator::trapezoid(sourceData_->processedData(), range_[0]);
- integral_[1] += Integrator::trapezoid(sourceData_->processedData(), range_[1]);
- integral_[2] += Integrator::trapezoid(sourceData_->processedData(), range_[2]);
-
- // Print info
- Messenger::print("Integrate1D - Range A: {:e} +/- {:e} over {:e} < x < {:e}.\n", integral_[0].value(), integral_[0].stDev(),
- range_[0].minimum(), range_[0].maximum());
- Messenger::print("Integrate1D - Range B: {:e} +/- {:e} over {:e} < x < {:e}.\n", integral_[1].value(), integral_[1].stDev(),
- range_[1].minimum(), range_[1].maximum());
- Messenger::print("Integrate1D - Range C: {:e} +/- {:e} over {:e} < x < {:e}.\n", integral_[2].value(), integral_[2].stDev(),
- range_[2].minimum(), range_[2].maximum());
-
- return true;
-}
diff --git a/src/procedure/nodes/integrate1D.h b/src/procedure/nodes/integrate1D.h
deleted file mode 100644
index af345ce890..0000000000
--- a/src/procedure/nodes/integrate1D.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "math/range.h"
-#include "math/sampledDouble.h"
-#include "procedure/nodes/node.h"
-
-// Forward Declarations
-class Process1DProcedureNode;
-class LineParser;
-
-// Procedure Node - Integrate1D
-class Integrate1DProcedureNode : public ProcedureNode
-{
- public:
- Integrate1DProcedureNode(std::shared_ptr target = nullptr);
- ~Integrate1DProcedureNode() override = default;
-
- /*
- * Data
- */
- private:
- // Process1D node that we are targetting
- std::shared_ptr sourceData_;
- // Ranges for integration regions
- Range range_[3] = {{0.0, 3.0}, {3.0, 6.0}, {6.0, 9.0}};
- // Calculated integral (stored in processing data list)
- SampledDouble integral_[3];
-
- public:
- // Return calculated integral specified
- const SampledDouble &integral(int index) const;
-
- /*
- * Execute
- */
- public:
- // Prepare any necessary data, ready for execution
- bool prepare(const ProcedureContext &procedureContext) override;
- // Finalise any necessary data after execution
- bool finalise(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/iterateData1D.cpp b/src/procedure/nodes/iterateData1D.cpp
deleted file mode 100644
index c3cd30f4a3..0000000000
--- a/src/procedure/nodes/iterateData1D.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#include "procedure/nodes/iterateData1D.h"
-#include "classes/configuration.h"
-#include "expression/variable.h"
-#include "io/export/data1D.h"
-#include "keywords/bool.h"
-#include "keywords/fileAndFormat.h"
-#include "keywords/nodeBranch.h"
-#include "keywords/stdString.h"
-#include "math/integrator.h"
-#include "modules/analyse/analyse.h"
-#include "procedure/nodes/collect1D.h"
-#include "procedure/nodes/integerCollect1D.h"
-#include "procedure/nodes/operateBase.h"
-
-IterateData1DProcedureNode::IterateData1DProcedureNode(std::shared_ptr target,
- ProcedureNode::NodeContext forEachContext)
- : ProcedureNode(ProcedureNode::NodeType::IterateData1D, {ProcedureNode::AnalysisContext}), sourceData_(target),
- forEachBranch_(forEachContext, *this, "ForEach")
-{
- setUpKeywords();
-}
-
-IterateData1DProcedureNode::IterateData1DProcedureNode(std::shared_ptr intTarget,
- ProcedureNode::NodeContext forEachContext)
- : ProcedureNode(ProcedureNode::NodeType::IterateData1D, {ProcedureNode::AnalysisContext}), sourceIntegerData_(intTarget),
- forEachBranch_(forEachContext, *this, "ForEach")
-{
- setUpKeywords();
-}
-
-// Set up keywords for node
-void IterateData1DProcedureNode::setUpKeywords()
-{
- keywords_.setOrganisation("Options", "Source");
- keywords_.add>("SourceData", "Collect1D node containing the histogram data to process",
- sourceData_, this, ProcedureNode::NodeType::Collect1D, false);
- keywords_.add>(
- "SourceIntegerData", "IntegerCollect1D node containing the histogram data to process", sourceIntegerData_, this,
- ProcedureNode::NodeType::IntegerCollect1D, false);
- keywords_.addHidden("ForEach", "Branch to run on each site selected", forEachBranch_);
-
- xParameter_ = addParameter("x");
- valueParameter_ = addParameter("value");
-}
-
-/*
- * Branch
- */
-// Return the branch from this node (if it has one)
-OptionalReferenceWrapper IterateData1DProcedureNode::branch() { return forEachBranch_; }
-
-/*
- * Execute
- */
-
-// Prepare any necessary data, ready for execution
-bool IterateData1DProcedureNode::prepare(const ProcedureContext &procedureContext)
-{
- if (sourceData_ && sourceIntegerData_)
- {
- return Messenger::error("Specify either SourceData or SourceIntegerData, not both.\n");
- }
- else if (sourceData_ || sourceIntegerData_)
- {
- return forEachBranch_.prepare(procedureContext);
- }
- else
- return Messenger::error("No source data node set in '{}'.\n", name());
-}
-
-bool IterateData1DProcedureNode::execute(const ProcedureContext &procedureContext)
-{
- // If a ForEach branch has been defined, process it for each of our sites in turn. Otherwise, we're done.
- if (!forEachBranch_.empty())
- {
- // Retrieve / realise the normalised data from the supplied list
- auto &data = procedureContext.processingModuleData().realise(fmt::format("Process1D//{}", name()),
- procedureContext.processingModuleDataPrefix(),
- GenericItem::InRestartFileFlag);
- data.setTag(name());
-
- // Copy the averaged data from the associated Process1D node
- if (instantaneous_)
- data = sourceData_ ? sourceData_->data() : sourceIntegerData_->data();
- else
- data = sourceData_ ? sourceData_->accumulatedData() : sourceIntegerData_->accumulatedData();
-
- for (const auto &&[x, value] : zip(data.xAxis(), data.values()))
- {
- xParameter_->setValue(x);
- valueParameter_->setValue(value);
-
- // If the branch fails at any point, return failure here. Otherwise, continue the loop
- if (!forEachBranch_.execute(procedureContext))
- return false;
- }
- }
- return true;
-}
-
-// Finalise any necessary data after execution
-bool IterateData1DProcedureNode::finalise(const ProcedureContext &procedureContext)
-{
- return forEachBranch_.finalise(procedureContext);
-}
diff --git a/src/procedure/nodes/iterateData1D.h b/src/procedure/nodes/iterateData1D.h
deleted file mode 100644
index 4256cf433b..0000000000
--- a/src/procedure/nodes/iterateData1D.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Copyright (c) 2024 Team Dissolve and contributors
-
-#pragma once
-
-#include "io/export/data1D.h"
-#include "procedure/nodes/node.h"
-#include "procedure/nodes/sequence.h"
-
-// Forward Declarations
-class Collect1DProcedureNode;
-class Data1D;
-class IntegerCollect1DProcedureNode;
-class LineParser;
-
-// Procedure Node - IterateData1D
-class IterateData1DProcedureNode : public ProcedureNode
-{
- public:
- IterateData1DProcedureNode(std::shared_ptr target = nullptr,
- ProcedureNode::NodeContext forEachContext = ProcedureNode::NodeContext::AnalysisContext);
- IterateData1DProcedureNode(std::shared_ptr intTarget,
- ProcedureNode::NodeContext forEachContext = ProcedureNode::NodeContext::AnalysisContext);
- ~IterateData1DProcedureNode() override = default;
-
- private:
- // Set up keywords for node
- void setUpKeywords();
-
- /*
- * Data
- */
- private:
- // Whether to use instantaneous data rather than accumulated data
- bool instantaneous_{true};
- // Collect1D node that we are processing
- std::shared_ptr sourceData_;
- std::shared_ptr sourceIntegerData_;
-
- /*
- * Parameters
- */
- private:
- // Pointers to individual parameters
- std::shared_ptr xParameter_, valueParameter_;
-
- /*
- * Branch
- */
- private:
- // Branch for ForEach
- ProcedureNodeSequence forEachBranch_;
-
- public:
- // Return the branch from this node (if it has one)
- OptionalReferenceWrapper branch() override;
-
- /*
- * Execute
- */
- public:
- // Prepare any necessary data, ready for execution
- bool prepare(const ProcedureContext &procedureContext) override;
- // Execute Node
- bool execute(const ProcedureContext &procedureContect) override;
- // Finalise any necessary data after execution
- bool finalise(const ProcedureContext &procedureContext) override;
-};
diff --git a/src/procedure/nodes/iterateSelection.cpp b/src/procedure/nodes/iterateSelection.cpp
index bc5aca5a76..b5f5c8dc9c 100644
--- a/src/procedure/nodes/iterateSelection.cpp
+++ b/src/procedure/nodes/iterateSelection.cpp
@@ -23,7 +23,7 @@ IterateSelectionProcedureNode::IterateSelectionProcedureNode(ProcedureNode::Node
{
// Keywords
keywords_.add>("Selection", "Target selection to iterate over", selection_, this,
- ProcedureNode::NodeType::Select, true);
+ NodeTypeVector{NodeType::Select}, true);
nSelectedParameter_ = addParameter("nSelected");
siteIndexParameter_ = addParameter("siteIndex");
diff --git a/src/procedure/nodes/node.cpp b/src/procedure/nodes/node.cpp
index 36fc92caf3..ff1568af60 100644
--- a/src/procedure/nodes/node.cpp
+++ b/src/procedure/nodes/node.cpp
@@ -2,7 +2,6 @@
// Copyright (c) 2024 Team Dissolve and contributors
#include "procedure/nodes/node.h"
-
#include "base/lineParser.h"
#include "base/messenger.h"
#include "base/sysFunc.h"
@@ -13,15 +12,6 @@
#include
#include
-// Return enum option info for NodeClass
-EnumOptions ProcedureNode::nodeClasses()
-{
- return EnumOptions("NodeClass", {{ProcedureNode::NodeClass::None, "None"},
- {ProcedureNode::NodeClass::Calculate, "Calculate"},
- {ProcedureNode::NodeClass::Operate, "Operate"},
- {ProcedureNode::NodeClass::Region, "Region"}});
-}
-
// Return enum option info for NodeType
EnumOptions ProcedureNode::nodeTypes()
{
@@ -29,14 +19,6 @@ EnumOptions ProcedureNode::nodeTypes()
"NodeType", {{ProcedureNode::NodeType::Add, "Add"},
{ProcedureNode::NodeType::AddPair, "AddPair"},
{ProcedureNode::NodeType::Box, "Box"},
- {ProcedureNode::NodeType::CalculateAngle, "CalculateAngle"},
- {ProcedureNode::NodeType::CalculateAxisAngle, "CalculateAxisAngle"},
- {ProcedureNode::NodeType::CalculateDistance, "CalculateDistance"},
- {ProcedureNode::NodeType::CalculateExpression, "CalculateExpression"},
- {ProcedureNode::NodeType::CalculateVector, "CalculateVector"},
- {ProcedureNode::NodeType::Collect1D, "Collect1D"},
- {ProcedureNode::NodeType::Collect2D, "Collect2D"},
- {ProcedureNode::NodeType::Collect3D, "Collect3D"},
{ProcedureNode::NodeType::CoordinateSets, "CoordinateSets"},
{ProcedureNode::NodeType::Copy, "Copy"},
{ProcedureNode::NodeType::CustomRegion, "CustomRegion"},
@@ -45,26 +27,11 @@ EnumOptions ProcedureNode::nodeTypes()
{ProcedureNode::NodeType::DynamicSite, "DynamicSite"},
{ProcedureNode::NodeType::GeneralRegion, "GeneralRegion"},
{ProcedureNode::NodeType::ImportCoordinates, "ImportCoordinates"},
- {ProcedureNode::NodeType::IntegerCollect1D, "IntegerCollect1D"},
{ProcedureNode::NodeType::IterateSelection, "IterateSelection"},
- {ProcedureNode::NodeType::IfValueInRange, "IfValueInRange"},
- {ProcedureNode::NodeType::Integrate1D, "Integrate1D"},
- {ProcedureNode::NodeType::IterateData1D, "IterateData1D"},
- {ProcedureNode::NodeType::OperateDivide, "OperateDivide"},
- {ProcedureNode::NodeType::OperateExpression, "OperateExpression"},
- {ProcedureNode::NodeType::OperateGridNormalise, "OperateGridNormalise"},
- {ProcedureNode::NodeType::OperateMultiply, "OperateMultiply"},
- {ProcedureNode::NodeType::OperateNormalise, "OperateNormalise"},
- {ProcedureNode::NodeType::OperateNumberDensityNormalise, "OperateNumberDensityNormalise"},
- {ProcedureNode::NodeType::OperateSitePopulationNormalise, "OperateSitePopulationNormalise"},
- {ProcedureNode::NodeType::OperateSphericalShellNormalise, "OperateSphericalShellNormalise"},
{ProcedureNode::NodeType::Parameters, "Parameters"},
{ProcedureNode::NodeType::Pick, "Pick"},
{ProcedureNode::NodeType::PickProximity, "PickProximity"},
{ProcedureNode::NodeType::PickRegion, "PickRegion"},
- {ProcedureNode::NodeType::Process1D, "Process1D"},
- {ProcedureNode::NodeType::Process2D, "Process2D"},
- {ProcedureNode::NodeType::Process3D, "Process3D"},
{ProcedureNode::NodeType::RegionalGlobalPotential, "RegionalGlobalPotential"},
{ProcedureNode::NodeType::Remove, "Remove"},
{ProcedureNode::NodeType::RestraintPotential, "RestraintPotential"},
@@ -74,7 +41,6 @@ EnumOptions ProcedureNode::nodeTypes()
{ProcedureNode::NodeType::Sequence, "Sequence"},
{ProcedureNode::NodeType::SphericalGlobalPotential, "SphericalGlobalPotential"},
{ProcedureNode::NodeType::SizeFactor, "SizeFactor"},
- {ProcedureNode::NodeType::Sum1D, "Sum1D"},
{ProcedureNode::NodeType::Temperature, "Temperature"},
{ProcedureNode::NodeType::Transmute, "Transmute"}});
}
@@ -99,9 +65,8 @@ EnumOptions ProcedureNode::nodeContexts()
{ProcedureNode::InheritContext, "Inherit"}});
}
-ProcedureNode::ProcedureNode(ProcedureNode::NodeType nodeType, std::vector relevantContexts,
- ProcedureNode::NodeClass classType)
- : type_(nodeType), relevantContexts_(std::move(relevantContexts)), class_(classType)
+ProcedureNode::ProcedureNode(ProcedureNode::NodeType nodeType, std::vector relevantContexts)
+ : type_(nodeType), relevantContexts_(std::move(relevantContexts))
{
}
@@ -129,9 +94,6 @@ bool ProcedureNode::isContextRelevant(NodeContext targetContext) const
return std::find(relevantContexts_.begin(), relevantContexts_.end(), targetContext) != relevantContexts_.end();
}
-// Return whether the node is of the specified class
-ProcedureNode::NodeClass ProcedureNode::nodeClass() const { return class_; }
-
// Return whether a name for the node must be provided
bool ProcedureNode::mustBeNamed() const { return true; }
@@ -185,33 +147,31 @@ ProcedureNode::NodeContext ProcedureNode::scopeContext() const
// Return named node, optionally matching the type / class given, in or out of scope
ConstNodeRef ProcedureNode::getNode(std::string_view name, bool onlyInScope, ConstNodeRef excludeNode,
- std::optional optNodeType,
- std::optional optNodeClass) const
+ const NodeTypeVector &allowedNodeTypes) const
{
if (!scope_)
return nullptr;
const auto &scope = (*scope_).get();
- return onlyInScope ? scope.nodeInScope(shared_from_this(), name, excludeNode, optNodeType, optNodeClass)
- : scope.nodeExists(name, excludeNode, optNodeType, optNodeClass);
+ return onlyInScope ? scope.nodeInScope(shared_from_this(), name, excludeNode, allowedNodeTypes)
+ : scope.nodeExists(name, excludeNode, allowedNodeTypes);
}
// Return nodes, optionally matching the type / class given, in or out of scope
-std::vector ProcedureNode::getNodes(bool onlyInScope, std::optional optNodeType,
- std::optional optNodeClass) const
+std::vector ProcedureNode::getNodes(bool onlyInScope, const NodeTypeVector &allowedNodeTypes) const
{
if (!scope_)
return {};
if (onlyInScope)
- return (*scope_).get().nodesInScope(shared_from_this(), optNodeType, optNodeClass);
+ return (*scope_).get().nodesInScope(shared_from_this(), allowedNodeTypes);
// Find the topmost (root) scope and search from there.
auto optScope = scope_;
while (optScope->get().owner() && optScope->get().owner()->get().scope())
optScope = optScope->get().owner()->get().scope();
- return optScope->get().nodes(optNodeType, optNodeClass);
+ return optScope->get().nodes(allowedNodeTypes);
}
// Return the named parameter, in or out of scope
diff --git a/src/procedure/nodes/node.h b/src/procedure/nodes/node.h
index e1fc3be924..74979752b4 100644
--- a/src/procedure/nodes/node.h
+++ b/src/procedure/nodes/node.h
@@ -24,31 +24,12 @@ class Site;
class ProcedureNode : public std::enable_shared_from_this, public Serialisable
{
public:
- // Node Classes
- enum class NodeClass
- {
- None,
- Calculate,
- Operate,
- Pick,
- Region
- };
- // Return enum option info for NodeClass
- static EnumOptions nodeClasses();
// Node Types
enum class NodeType
{
Add,
AddPair,
Box,
- CalculateAngle,
- CalculateAxisAngle,
- CalculateDistance,
- CalculateExpression,
- CalculateVector,
- Collect1D,
- Collect2D,
- Collect3D,
CoordinateSets,
Copy,
CustomRegion,
@@ -57,26 +38,11 @@ class ProcedureNode : public std::enable_shared_from_this