summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--matching/include/bifiltration.h4
-rw-r--r--matching/include/common_defs.h1
-rw-r--r--matching/src/bifiltration.cpp40
-rw-r--r--matching/src/main.cpp22
-rw-r--r--matching/src/simplex.cpp1
-rw-r--r--matching/src/tests/prism_1.bif1
-rw-r--r--matching/src/tests/prism_2.bif1
-rw-r--r--matching/src/tests/test_matching_distance.cpp4
8 files changed, 53 insertions, 21 deletions
diff --git a/matching/include/bifiltration.h b/matching/include/bifiltration.h
index bdb7a4e..f505ed9 100644
--- a/matching/include/bifiltration.h
+++ b/matching/include/bifiltration.h
@@ -27,9 +27,7 @@ namespace md {
Bifiltration& operator=(Bifiltration&& other) = default;
- Bifiltration(const std::string& fname,
- BifiltrationFormat input_format = BifiltrationFormat::rivet); // read from file
-
+ Bifiltration(const std::string& fname); // read from file
template<class Iter>
Bifiltration(Iter begin, Iter end)
diff --git a/matching/include/common_defs.h b/matching/include/common_defs.h
index 4a71615..3f3d937 100644
--- a/matching/include/common_defs.h
+++ b/matching/include/common_defs.h
@@ -7,5 +7,4 @@
//#define MD_DO_CHECKS
//#define MD_DO_FULL_CHECK
-
#endif //MATCHING_DISTANCE_DEF_DEBUG_H
diff --git a/matching/src/bifiltration.cpp b/matching/src/bifiltration.cpp
index 676b0cc..4131e6b 100644
--- a/matching/src/bifiltration.cpp
+++ b/matching/src/bifiltration.cpp
@@ -29,7 +29,7 @@ namespace md {
bounding_box_ = Box(lower_left, upper_right);
}
- Bifiltration::Bifiltration(const std::string& fname, BifiltrationFormat input_format)
+ Bifiltration::Bifiltration(const std::string& fname )
{
std::ifstream ifstr {fname.c_str()};
if (!ifstr.good()) {
@@ -38,6 +38,23 @@ namespace md {
throw std::runtime_error(error_message);
}
+ BifiltrationFormat input_format;
+
+ std::string s;
+
+ while(ignore_line(s)) {
+ std::getline(ifstr, s);
+ }
+
+ if (s == "bifiltration") {
+ input_format = BifiltrationFormat::rivet;
+ } else if (s == "bifiltration_phat_like") {
+ input_format = BifiltrationFormat::phat_like;
+ } else {
+ std::cerr << "Unknown format: '" << s << "' in file " << fname << std::endl;
+ throw std::runtime_error("unknown bifiltration format");
+ }
+
switch(input_format) {
case BifiltrationFormat::rivet :
rivet_format_reader(ifstr);
@@ -46,22 +63,27 @@ namespace md {
phat_like_format_reader(ifstr);
break;
}
+
+ ifstr.close();
+
init();
}
void Bifiltration::rivet_format_reader(std::ifstream& ifstr)
{
std::string s;
- std::getline(ifstr, s);
- assert(s == std::string("bifiltration"));
+ // read axes names
std::getline(ifstr, parameter_1_name_);
std::getline(ifstr, parameter_2_name_);
Index index = 0;
while(std::getline(ifstr, s)) {
- if (not ignore_line(s))
+ if (!ignore_line(s)) {
simplices_.emplace_back(index++, s, BifiltrationFormat::rivet);
+ }
}
+
+
}
void Bifiltration::phat_like_format_reader(std::ifstream& ifstr)
@@ -70,11 +92,17 @@ namespace md {
// read stream line by line; do not use >> operator
std::string s;
std::getline(ifstr, s);
+
+ // first line contains number of simplices
long n_simplices = std::stol(s);
- for(Index index = 0; index < n_simplices; index++) {
+ // all other lines represent a simplex
+ Index index = 0;
+ while(index < n_simplices) {
std::getline(ifstr, s);
- simplices_.emplace_back(index, s, BifiltrationFormat::phat_like);
+ if (!ignore_line(s)) {
+ simplices_.emplace_back(index++, s, BifiltrationFormat::phat_like);
+ }
}
spd::debug("Read {} simplices from file", n_simplices);
}
diff --git a/matching/src/main.cpp b/matching/src/main.cpp
index 7e74475..f1472be 100644
--- a/matching/src/main.cpp
+++ b/matching/src/main.cpp
@@ -22,9 +22,9 @@ using namespace md;
namespace fs = std::experimental::filesystem;
+#ifdef PRINT_HEAT_MAP
void print_heat_map(const md::HeatMaps& hms, std::string fname, const CalculationParams& params)
{
-#ifdef PRINT_HEAT_MAP
spd::debug("Entered print_heat_map");
std::set<Real> mu_vals, lambda_vals;
auto hm_iter = hms.end();
@@ -130,23 +130,25 @@ void print_heat_map(const md::HeatMaps& hms, std::string fname, const Calculatio
ofs.close();
spd::debug("Exit print_heat_map");
-#endif
}
+#endif
int main(int argc, char** argv)
{
spdlog::set_level(spdlog::level::info);
- //spdlog::set_pattern("[%L] %v");
using opts::Option;
using opts::PosOption;
opts::Options ops;
bool help = false;
- bool heatmap_only = false;
bool no_stop_asap = false;
CalculationParams params;
+#ifdef PRINT_HEAT_MAP
+ bool heatmap_only = false;
+#endif
+
std::string bounds_list_str = "local_combined";
std::string traverse_list_str = "BFS";
@@ -176,13 +178,13 @@ int main(int argc, char** argv)
auto bounds_list = split_by_delim(bounds_list_str, ',');
auto traverse_list = split_by_delim(traverse_list_str, ',');
- Bifiltration bif_a(fname_a, BifiltrationFormat::phat_like);
- Bifiltration bif_b(fname_b, BifiltrationFormat::phat_like);
+ Bifiltration bif_a(fname_a);
+ Bifiltration bif_b(fname_b);
bif_a.sanity_check();
bif_b.sanity_check();
- spd::info("Read bifiltrations {} {}", fname_a, fname_b);
+ spd::debug("Read bifiltrations {} {}", fname_a, fname_b);
std::vector<BoundStrategy> bound_strategies;
std::vector<TraverseStrategy> traverse_strategies;
@@ -195,13 +197,15 @@ int main(int argc, char** argv)
traverse_strategies.push_back(ts_from_string(s));
}
+
+#ifdef EXPERIMENTAL_TIMING
+
for(auto bs : bound_strategies) {
for(auto ts : traverse_strategies) {
spd::info("Will test combination {} {}", bs, ts);
}
}
-#ifdef EXPERIMENTAL_TIMING
struct ExperimentResult {
CalculationParams params {CalculationParams()};
int n_hera_calls {0};
@@ -360,6 +364,8 @@ int main(int argc, char** argv)
params.bound_strategy = bound_strategies.back();
params.traverse_strategy = traverse_strategies.back();
+ spd::debug("Will use {} bound, {} traverse strategy", params.bound_strategy, params.traverse_strategy);
+
Real dist = matching_distance(bif_a, bif_b, params);
std::cout << dist << std::endl;
#endif
diff --git a/matching/src/simplex.cpp b/matching/src/simplex.cpp
index b490db0..6b53680 100644
--- a/matching/src/simplex.cpp
+++ b/matching/src/simplex.cpp
@@ -62,7 +62,6 @@ namespace md {
void Simplex::init_rivet(std::string s)
{
-// throw std::runtime_error("Not implemented");
auto delim_pos = s.find_first_of(";");
assert(delim_pos > 0);
std::string vertices_str = s.substr(0, delim_pos);
diff --git a/matching/src/tests/prism_1.bif b/matching/src/tests/prism_1.bif
index 416c40c..b37e807 100644
--- a/matching/src/tests/prism_1.bif
+++ b/matching/src/tests/prism_1.bif
@@ -1,3 +1,4 @@
+bifiltration_phat_like
26
0 0 0
0 0 0
diff --git a/matching/src/tests/prism_2.bif b/matching/src/tests/prism_2.bif
index e11faa9..49885e6 100644
--- a/matching/src/tests/prism_2.bif
+++ b/matching/src/tests/prism_2.bif
@@ -1,3 +1,4 @@
+bifiltration_phat_like
27
0 0 0
0 0 0
diff --git a/matching/src/tests/test_matching_distance.cpp b/matching/src/tests/test_matching_distance.cpp
index 7cd71b2..df9345e 100644
--- a/matching/src/tests/test_matching_distance.cpp
+++ b/matching/src/tests/test_matching_distance.cpp
@@ -115,8 +115,8 @@ TEST_CASE("Bifiltrations from file", "[matching_distance][small_example][lesnick
fname_a = "../src/tests/prism_1.bif";
fname_b = "../src/tests/prism_2.bif";
- Bifiltration bif_a(fname_a, BifiltrationFormat::phat_like);
- Bifiltration bif_b(fname_b, BifiltrationFormat::phat_like);
+ Bifiltration bif_a(fname_a);
+ Bifiltration bif_b(fname_b);
CalculationParams params;