Be more verbose in interpret_{reduc., pers.}()
[libstick.git] / include / libstick-0.1 / persistence.h
index ea7369331bab105ba1e9903c9b5a69d611439bd8..b9fc080ee589c951f9a16a0e354dcc774888028e 100644 (file)
@@ -117,7 +117,7 @@ class persistence {
                 //if (c % 100 == 0)
                 //std::cout << "c = " << c << " (" << (100.0*float(c)/rbm.width()) << " %)" << std::endl;
                 // Reduce as long as we need to reduce
-                while (rbm.get_column(c).size() > 0) {
+                while (!rbm.get_column(c).isempty()) {
                     // (r, c) is the lowest one of col
                     const IT r = rbm.get_column(c).back();
                     // This column contains its lowest one on the same row
@@ -137,7 +137,7 @@ class persistence {
                 }
 
                 // A lowest one remained, recall it
-                if (rbm.get_column(c).size() > 0) {
+                if (!rbm.get_column(c).isempty()) {
                     const IT r = rbm.get_column(c).back();
                     assert(lowestones[r] == 0);
                     assert(r < c);
@@ -200,11 +200,11 @@ class persistence {
                         break;
                 }
 
-                os << "(value: " << order.get_simplex(c).value << ")" << std::endl;
+                os << " \t\tvalue: " << order.get_simplex(c).value << std::endl;
                 os << "  boundary: " << bm.get_column(c) << std::endl;
 
                 typename boolean_colmatrix<IT>::column_type col = rbm.get_column(c);
-                if (col.size() == 0) {
+                if (col.isempty()) {
                     os << "  \033[1;32mbirth\033[0;m of a cycle: " << tm.get_column(c) << std::endl;
                 } else {
                     os << "  \033[1;31mdeath\033[0;m of a cycle: " << rbm.get_column(c) << std::endl;
@@ -240,7 +240,7 @@ class persistence {
 
             for (unsigned c=0; c < lowestones.size(); ++c) {
                 // A cycle was born
-                if (rbm.get_column(c).size() == 0) {
+                if (rbm.get_column(c).isempty()) {
                     const int dim = order.get_simplex(c).dim;
 
                     // Create a diagram point
@@ -265,7 +265,7 @@ class persistence {
             // or not be, tertium non datur.
             for (unsigned c=0; c < lowestones.size(); ++c) {
                 // A class died with c
-                if (rbm.get_column(c).size() != 0)
+                if (!rbm.get_column(c).isempty())
                     assert(c == 0 || deaths.count(c) > 0);
                 else
                     assert(births.count(c) > 0);
@@ -280,13 +280,20 @@ class persistence {
             for (int d=-1; d <= MAXDIM; ++d) {
                 os << "Dimension " << d << std::endl;
                 const diagram &dia = get_persistence_diagram(d);
+
                 for (unsigned i=0; i < dia.births.size(); ++i) {
+                    const IT birth = dia.births[i].birth;
+                    const IT death = dia.births[i].death;
+
                     os << "  ";
-                    if (dia.births[i].death > 0)
-                        os << dia.births[i].birth << "\033[1;31m -> " << dia.births[i].death;
-                    else
-                        os << "\033[1;32m" << dia.births[i].birth;
-                    os << "\033[0;m" << std::endl;
+                    if (death > 0) {
+                        const scomplex& c = get_order().get_complex();
+                        const VT pers = c.simplices[death].value - c.simplices[birth].value;
+                        os << birth << "\033[1;31m -> " << death << "\033[0;m" << " \tpers: " << pers;
+                    } else {
+                        os << "\033[1;32m" << birth << "\033[0;m" << " \t\t[essential]";
+                    }
+                    os << std::endl;
                 }
             }
         }