| dmitriy@131 | 1 | # Computes the persistence diagram of the alpha shapes in both 2D and 3D |
| dmitriy@131 | 2 | # (decided dynamically based on the input file) |
| dmitriy@131 | 3 | |
| dmitriy@131 | 4 | from dionysus import Filtration, StaticPersistence, data_dim_cmp, vertex_cmp, \ |
| dmitriy@131 | 5 | fill_alpha3D_complex, fill_alpha2D_complex, points_file |
| dmitriy@131 | 6 | from sys import argv, exit |
| dmitriy@131 | 7 | from math import sqrt |
| dmitriy@131 | 8 | |
| dmitriy@131 | 9 | |
| dmitriy@131 | 10 | if len(argv) < 2: |
| dmitriy@131 | 11 | print "Usage: %s POINTS" % argv[0] |
| dmitriy@131 | 12 | exit() |
| dmitriy@131 | 13 | |
| dmitriy@131 | 14 | points = [p for p in points_file(argv[1])] |
| dmitriy@181 | 15 | f = Filtration() |
| dmitriy@131 | 16 | if len(points[0]) == 2: # 2D |
| dmitriy@181 | 17 | fill_alpha2D_complex(points, f) |
| dmitriy@131 | 18 | elif len(points[1]) == 3: # 3D |
| dmitriy@181 | 19 | fill_alpha3D_complex(points, f) |
| dmitriy@131 | 20 | |
| dmitriy@181 | 21 | print "Total number of simplices:", len(f) |
| dmitriy@131 | 22 | |
| dmitriy@181 | 23 | f.sort(data_dim_cmp) |
| dmitriy@131 | 24 | print "Filtration initialized" |
| dmitriy@131 | 25 | |
| dmitriy@131 | 26 | p = StaticPersistence(f) |
| dmitriy@131 | 27 | print "StaticPersistence initialized" |
| dmitriy@131 | 28 | |
| dmitriy@131 | 29 | p.pair_simplices() |
| dmitriy@131 | 30 | print "Simplices paired" |
| dmitriy@131 | 31 | |
| dmitriy@131 | 32 | print "Outputting persistence diagram" |
| dmitriy@181 | 33 | smap = p.make_simplex_map(f) |
| dmitriy@131 | 34 | for i in p: |
| dmitriy@131 | 35 | if i.sign(): |
| dmitriy@181 | 36 | b = smap[i] |
| dmitriy@181 | 37 | if i.unpaired(): |
| dmitriy@181 | 38 | print b.dimension(), sqrt(b.data[0]), "inf" |
| dmitriy@131 | 39 | continue |
| dmitriy@131 | 40 | |
| dmitriy@181 | 41 | d = smap[i.pair()] |
| dmitriy@181 | 42 | print b.dimension(), sqrt(b.data[0]), sqrt(d.data[0]) |