This project implements the algorithms described in the following paper:
Computing Minimal Persistent Cycles: Polynomial and Hard Cases
by Tamal K. Dey, Tao Hou, and Sayan Mandal which appears on the conference SODA20'.
This project is developed by Sayan Mandal and Tao Hou under the Jyamiti group at the Ohio State University. For more information about our group, please visit Professor Tamal K. Dey's page.
The implemented algorithms compute minimum persistent 2-cycles for designated (finite/infinite) intervals from a volume data, where the volume data is given in the 'perseus' format. In a nutshell, a .perseus file specifies the scalar value of each voxel in the volume, where each voxel is treated as a 3-dimensional cell in the cubical complex formed by the volume. For more information on the perseus format, please visit The Perseus Project or GUDHI.
Note that a cubical complex from a volume data does not produce infinite intervals. Our implemention of the infinite interval algorithm takes a finite interval as input and computes the minimum 2-cycle born at the birth index.
This project contains two independent executables, i.e., pers2cyc_fin and pers2cyc_inf, for finite and infinite intervals respectively. While having different building dependencies, both softwares are built by CMake with the following commands:
cd pers2cyc_fin [or] pers2cyc_inf
mkdir build
cd build
cmake ../src
make
Both softwares are developed and tested under MacOS. Since the C++ codes and CMake files are somewhat cross-platform, the codes should be able to compile and run on Linux (or possibly Windows) if the dependencies are installed correctly. Most building issues can be resolved by inspecting (or changing) the 'CMakeLists.txt' files. For problems about the softwares, please contact the author of each one listed at the end.
pers2cyc_fin has the following dependencies:
pers2cyc_inf has the following dependencies:
where Eigen and GUDHI are header files only and Boost and CGAL need the prebuilt binaries.
We provide a sample perseus file 'sphere_50_50_50.perseus' where only one interval will be produced. The minimal 2-cycle produced for the interval is a uniformly shaped 2-shpere.
To produce cycles for the top 10 longest finite intervals:
./pers2cyc_fin -i ../../sphere_50_50_50.perseus -n 10
This outputs a folder named "sphere_50_50_50.perseusloops/" which stores 2-cycles of the top 10 intervals in .off format.
To print help information:
./pers2cyc_fin -h
To produce cycles for the top 10 longest (finite) intervals:
./pers2cyc_inf -i 10 ../../sphere_50_50_50.perseus
To produce cycles for the 5th longest (finite) interval and the 9 intervals following it:
./pers2cyc_inf -i 5,10 ../../sphere_50_50_50.perseus
All cycles (.off files) will be written to the current folder of execution and cycle files will be named by the input .perseus file, the sorting criterion of the intervals, and the index of the interval. By default, the intervals are sorted by the difference of the scalar values on the corresponding paired simplices. To sort the intervals by the difference of the filtration indices of the paired simplices, use the option '--idx'.
To print help information:
./pers2cyc_inf -h
There is a script 'vol2perseus.py' written in python3 which can convert a raw volume file to a perseus file. The input can be edited in the script.
- pers2cyc_fin: Sayan Mandal, sayan.mndl90 at gmail.com
- pers2cyc_inf: Tao Hou, taohou01 at gmail.com
THIS SOFTWARE IS PROVIDED "AS-IS". THERE IS NO WARRANTY OF ANY KIND. NEITHER THE AUTHORS NOR THE OHIO STATE UNIVERSITY WILL BE LIABLE FOR ANY DAMAGES OF ANY KIND, EVEN IF ADVISED OF SUCH POSSIBILITY.
This software was developed (and is copyrighted by) the Jyamiti group at The Ohio State University. Please do not redistribute this software. This program is for academic research use only. This software uses the Boost library, Gudhi library, CGAL library and Eigen library which are covered under their own licenses.