summaryrefslogtreecommitdiff
path: root/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp
diff options
context:
space:
mode:
authorpdlotko <pdlotko@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2017-04-12 13:07:58 +0000
committerpdlotko <pdlotko@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2017-04-12 13:07:58 +0000
commit8f4c961a93fe928d06c7776a9e8f5ecd00fab9ca (patch)
tree0222aa7a5db950b15e7b1adf9f75cec2204c55fa /src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp
parente729d07cc53e4b6a189ebbfbfe4eb5db5449fbe0 (diff)
a few more correction. First of all, bottleneck distance is added (although there is something strange in the results, FG has been pinged about this). Second of all, all the programs in utylites should now read general files (and dimension of persistence to be read is one of the parameteds of files). This still need to be tested and will be tested soon.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/gudhi_stat@2339 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: e60d14f07db223646597230d7f0bd78dd090bc0b
Diffstat (limited to 'src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp')
-rw-r--r--src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp b/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp
new file mode 100644
index 00000000..09c6cc22
--- /dev/null
+++ b/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp
@@ -0,0 +1,100 @@
+/* This file is part of the Gudhi Library. The Gudhi library
+ * (Geometric Understanding in Higher Dimensions) is a generic C++
+ * library for computational topology.
+ *
+ * Author(s): Pawel Dlotko
+ *
+ * Copyright (C) 2015 INRIA (France)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+
+#include <gudhi/reader_utils.h>
+#include <gudhi/persistence_representations/Persistence_intervals.h>
+
+#include <iostream>
+
+
+
+using namespace Gudhi;
+using namespace Gudhi::Gudhi_stat;
+
+
+int main( int argc , char** argv )
+{
+ std::cout << "This program compute a plot of persistence Betti numbers. The input parameter is a file with persistence intervals. \n";
+ std::cout << "The second optional parameter of a program is the dimension of the persistence that is to be used. If your file contains only birth-death pairs, you can skip this parameter\n";
+ if ( argc < 2 )
+ {
+ std::cout << "To run this program, please provide the name of a file with persistence diagram and number of dominant intervals you would like to get \n";
+ return 1;
+ }
+ unsigned dimension = std::numeric_limits<unsigned>::max();
+ int dim = -1;
+ if ( argc > 2 )
+ {
+ dim = atoi( argv[2] );
+ }
+ if ( (dim != -1) && (dim >= 0) )
+ {
+ dimension = (unsigned)dim;
+ }
+
+
+ std::stringstream gnuplot_script;
+ gnuplot_script << argv[1] << "_Gnuplot_script";
+ std::ofstream out;
+ out.open( gnuplot_script.str().c_str() );
+
+ Persistence_intervals p( argv[1] , dimension );
+ std::vector< std::pair< double , size_t > > pbns = p.compute_persistent_betti_numbers();
+
+ //set up the ranges so that we see the image well.
+ double xRangeBegin = pbns[0].first;
+ double xRangeEnd = pbns[ pbns.size()-1 ].first;
+ double yRangeBegin = 0;
+ double yRangeEnd = 0;
+ for ( size_t i = 0 ; i != pbns.size() ; ++i )
+ {
+ if ( pbns[i].second > yRangeEnd )yRangeEnd = pbns[i].second;
+ }
+ xRangeBegin -= (xRangeEnd -xRangeBegin)/100.0;
+ xRangeEnd += (xRangeEnd -xRangeBegin)/100.0;
+ yRangeEnd += yRangeEnd/100;
+
+
+ out << "set xrange [" << xRangeBegin << " : " << xRangeEnd << "]" << std::endl;
+ out << "set yrange [" << yRangeBegin << " : " << yRangeEnd << "]" << std::endl;
+ out << "plot '-' using 1:2 notitle with lp " << std::endl;
+ double previous_y = 0;
+ for ( size_t i = 0 ; i != pbns.size() ; ++i )
+ {
+ out << pbns[i].first << " " << previous_y << std::endl;
+ out << pbns[i].first << " " << pbns[i].second << std::endl;
+ previous_y = pbns[i].second;
+ }
+ out << std::endl;
+ out.close();
+
+ //for ( size_t i = 0 ; i != pbns.size() ; ++i )
+ //{
+ // std::cout << pbns[i].first << " " << pbns[i].second << std::endl;
+ //}
+
+ std::cout << "To vizualize, open gnuplot and type: load \'" << gnuplot_script.str().c_str() << "\'" << std::endl;
+
+ return 0;
+}