examples/alphashapes/alphashapes.py
author Dmitriy Morozov <dmitriy@mrzv.org>
Mon Jul 25 23:21:29 2011 -0700 (10 months ago)
branchdev
changeset 244 66235db8d8b7
parent 131d9e050258358
permissions -rw-r--r--
Added cohomology/candidates counter to i/t/cohomology-persistence.hpp
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])