aboutsummaryrefslogtreecommitdiff
path: root/manipulationhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'manipulationhandler.cpp')
-rw-r--r--manipulationhandler.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/manipulationhandler.cpp b/manipulationhandler.cpp
new file mode 100644
index 0000000..bb0e043
--- /dev/null
+++ b/manipulationhandler.cpp
@@ -0,0 +1,53 @@
+#include "manipulationhandler.h"
+
+#include <algorithm>
+#include <iostream>
+#include <numeric>
+
+#include "mp.h"
+#include "numericrange.h"
+
+ManipulationHandler::ManipulationHandler(const arma::mat &X,
+ const arma::uvec &cpIndices)
+ : m_X(X)
+ , m_Y(X.n_rows, 2)
+ , m_cpIndices(cpIndices)
+ , m_rpIndices(X.n_rows - cpIndices.n_elem)
+ , m_technique(TECHNIQUE_LAMP)
+{
+ NumericRange<unsigned long long> range(0, m_X.n_rows);
+ std::set_symmetric_difference(range.cbegin(), range.cend(),
+ m_cpIndices.cbegin(), m_cpIndices.cend(), m_rpIndices.begin());
+}
+
+void ManipulationHandler::setTechnique(ManipulationHandler::Technique technique)
+{
+ if (m_technique == technique)
+ return;
+
+ m_technique = technique;
+}
+
+void ManipulationHandler::setCP(const arma::mat &Ys)
+{
+ switch (m_technique) {
+ case TECHNIQUE_PLMP:
+ mp::plmp(m_X, m_cpIndices, Ys, m_Y);
+ break;
+ case TECHNIQUE_LSP:
+ // TODO
+ // mp::lsp(m_X, m_cpIndices, Ys, m_Y);
+ break;
+ case TECHNIQUE_LAMP:
+ mp::lamp(m_X, m_cpIndices, Ys, m_Y);
+ break;
+ case TECHNIQUE_PEKALSKA:
+ // TODO
+ // mp::pekalska(m_X, m_cpIndices, Ys, m_Y);
+ break;
+ }
+
+ emit cpChanged(m_Y.rows(m_cpIndices));
+ emit rpChanged(m_Y.rows(m_rpIndices));
+ emit mapChanged(m_Y);
+}