summaryrefslogtreecommitdiff
path: root/matching/include/bifiltration.h
diff options
context:
space:
mode:
Diffstat (limited to 'matching/include/bifiltration.h')
-rw-r--r--matching/include/bifiltration.h72
1 files changed, 28 insertions, 44 deletions
diff --git a/matching/include/bifiltration.h b/matching/include/bifiltration.h
index f505ed9..4dd8662 100644
--- a/matching/include/bifiltration.h
+++ b/matching/include/bifiltration.h
@@ -3,19 +3,30 @@
#include <string>
#include <ostream>
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <cassert>
#include "common_util.h"
#include "box.h"
#include "simplex.h"
#include "dual_point.h"
+#include "phat/boundary_matrix.h"
+#include "phat/compute_persistence_pairs.h"
+
+#include "spdlog/spdlog.h"
+#include "spdlog/fmt/fmt.h"
+#include "spdlog/fmt/ostr.h"
+
+#include "common_util.h"
namespace md {
+ template<class Real>
class Bifiltration {
public:
- using Diagram = std::vector<std::pair<Real, Real>>;
- using Box = md::Box;
- using SimplexVector = std::vector<Simplex>;
+ using SimplexVector = std::vector<Simplex<Real>>;
Bifiltration() = default;
@@ -36,7 +47,7 @@ namespace md {
init();
}
- Diagram weighted_slice_diagram(const DualPoint& line, int dim) const;
+ Diagram<Real> weighted_slice_diagram(const DualPoint<Real>& line, int dim) const;
SimplexVector simplices() const { return simplices_; }
@@ -48,14 +59,12 @@ namespace md {
Real minimal_coordinate() const;
// return box that contains positions of all simplices
- Box bounding_box() const;
+ Box<Real> bounding_box() const;
void sanity_check() const;
int maximal_dim() const { return maximal_dim_; }
- friend std::ostream& operator<<(std::ostream& os, const Bifiltration& bif);
-
Real max_x() const;
Real max_y() const;
@@ -64,7 +73,7 @@ namespace md {
Real min_y() const;
- void add_simplex(Index _id, Point birth, int _dim, const Column& _bdry);
+ void add_simplex(Index _id, Point<Real> birth, int _dim, const Column& _bdry);
void save(const std::string& filename, BifiltrationFormat format = BifiltrationFormat::rivet); // save to file
@@ -72,11 +81,8 @@ namespace md {
private:
SimplexVector simplices_;
- // axes names, for rivet bifiltration format only
- std::string parameter_1_name_ {"axis_1"};
- std::string parameter_2_name_ {"axis_2"};
- Box bounding_box_;
+ Box<Real> bounding_box_;
int maximal_dim_ {-1};
void init();
@@ -97,13 +103,15 @@ namespace md {
};
- std::ostream& operator<<(std::ostream& os, const Bifiltration& bif);
+ template<class Real>
+ std::ostream& operator<<(std::ostream& os, const Bifiltration<Real>& bif);
+ template<class Real>
class BifiltrationProxy {
public:
- BifiltrationProxy(const Bifiltration& bif, int dim = 0);
+ BifiltrationProxy(const Bifiltration<Real>& bif, int dim = 0);
// return critical values of simplices that are important for current dimension (dim and dim+1)
- PointVec positions() const;
+ PointVec<Real> positions() const;
// set current dimension
int set_dim(int new_dim);
@@ -111,46 +119,22 @@ namespace md {
int maximal_dim() const;
void translate(Real a);
Real minimal_coordinate() const;
- Box bounding_box() const;
+ Box<Real> bounding_box() const;
Real max_x() const;
Real max_y() const;
Real min_x() const;
Real min_y() const;
- Diagram weighted_slice_diagram(const DualPoint& slice) const;
+ Diagram<Real> weighted_slice_diagram(const DualPoint<Real>& slice) const;
private:
int dim_ { 0 };
- mutable PointVec cached_positions_;
- Bifiltration bif_;
+ mutable PointVec<Real> cached_positions_;
+ Bifiltration<Real> bif_;
void cache_positions() const;
};
}
-
+#include "bifiltration.hpp"
#endif //MATCHING_DISTANCE_BIFILTRATION_H
-
-//// The value type of OutputIterator is Simplex_in_2D_filtration
-//template<typename OutputIterator>
-//void read_input(std::string filename, OutputIterator out)
-//{
-// std::ifstream ifstr;
-// ifstr.open(filename.c_str());
-// long n;
-// ifstr >> n; // number of simplices is the first number in file
-//
-// Index k; // used in loop
-// for (int i = 0; i < n; i++) {
-// Simplex_in_2D_filtration next;
-// next.index = i;
-// ifstr >> next.dim >> next.pos.x >> next.pos.y;
-// if (next.dim > 0) {
-// for (int j = 0; j <= next.dim; j++) {
-// ifstr >> k;
-// next.bd.push_back(k);
-// }
-// }
-// *out++ = next;
-// }
-//}