Added scripts to create this dataset

This commit is contained in:
Antonia 2024-04-22 16:50:46 +02:00
parent 9c636c1de3
commit e98ea582a7
4 changed files with 154 additions and 0 deletions

34
scripts/README.md Normal file
View file

@ -0,0 +1,34 @@
## Scripts to filter out unique minimal triangulaitons
These scripts dig through directories to find triangulations, take the
minimal ones, remove duplicates, and then export them, sorted by PL-type.
### Prerequisites
- Polymake
- PostgreSQL
### How to use:
Create the database tables
```
CREATE TABLE triangulations (signature varchar, f_vector varchar, vertices integer, path varchar);
CREATE TABLE minimal_triangulations (signature varchar, f_vector varchar, vertices integer, path varchar);
```
Populate the triangulations table
```
find ~ -name *.poly -not -path "*comb_iso_classes*" -not -path "*flat*" | parallel --progress ./triangulation_bookkeeping.pl {}
```
Populate the minimal triangulations (by vertices) table by finding the
minimum triangulation for each signature
```
INSERT INTO minimal_triangulations SELECT DISTINCT ON (signature) * FROM triangulations ORDER BY signature, vertices
```
Remove combinatorially isomorphic triangulations by running `triangulation_bookkeeping_minimal.pl`, and output sorted by type using `triangulation_bookkeeping_output.pl`

View file

@ -0,0 +1,28 @@
#!/usr/local/bin/polymake --script
# Initialize table with triangulations
use application "topaz";
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect("dbi:Pg:dbname=researchdata_test", '', '', {AutoCommit => 0});
my $sth = $dbh->prepare("INSERT INTO triangulations VALUES (?, ?, ?, ?);");
my $path = shift;
$path =~ m,([^/]+)\.poly$,;
my $regdesc = $1;
my $q=load_data("$path");
my $vert = @{$q->F_VECTOR}[0];
$sth->execute($regdesc, "@{$q->F_VECTOR}", $vert, $path);
$dbh->commit;
# after this run INSERT INTO minimal_triangulations SELECT DISTINCT ON (signature) * FROM triangulations ORDER BY signature, vertices ; to get a table of minimal triangulations of each complex

View file

@ -0,0 +1,45 @@
#!/usr/local/bin/polymake --script
### removes duplicate (combinatorially isomorphic) triangulations
use application "topaz";
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect("dbi:Pg:dbname=researchdata_test", '', '', {AutoCommit => 0});
my $vst = $dbh->prepare("SELECT DISTINCT(vertices) FROM minimal_triangulations");
my $pst = $dbh->prepare("SELECT path FROM minimal_triangulations WHERE vertices = (?)");
my $pathdel = $dbh->prepare("DELETE FROM minimal_triangulations WHERE path = (?)");
$vst->execute();
while (my @data = $vst->fetchrow_array) {
my $vert = shift @data;
print("$vert\n");
my %complexes = ();
$pst->execute($vert);
while (my @data = $pst->fetchrow_array ) {
my $path = shift @data;
$complexes{$path} = load_data("$path");
}
my @ck = keys %complexes;
foreach (keys %complexes) {
my $c = shift @ck;
foreach (@ck) {
if (defined $complexes{$_} and defined $complexes{$c} and isomorphic($complexes{$c}, $complexes{$_})) {
print "$c $_ \n";
$pathdel->execute($_);
delete($complexes{$_});
}
}
}
}
$dbh->commit;

View file

@ -0,0 +1,47 @@
#!/usr/local/bin/polymake --script
### Outputs minimal triangulations into sorted directories
use application "topaz";
use strict;
use warnings;
use DBI;
use File::Copy;
my $dbh = DBI->connect("dbi:Pg:dbname=researchdata_test", '', '', {AutoCommit => 0});
my $types = $dbh->prepare("SELECT DISTINCT(type) FROM complexes;"); ## select the types
my $paths = $dbh->prepare("SELECT signature,vertices,path FROM minimal_triangulations WHERE signature IN (SELECT signature FROM complexes WHERE type = (?));");
my $outdir = "minimal_triangulations";
if (! -d $outdir ) {
mkdir $outdir
}
$types->execute;
while (my @data = $types->fetchrow_array) {
my $type = shift @data;
if (not $type eq "") {
print "$type\n";
$paths->execute($type);
if (! -d "$outdir/$type" ) {
mkdir "$outdir/$type";
}
while (my @p = $paths->fetchrow_array) {
my $sig = shift @p;
my $vert = shift @p;
if (! -d "$outdir/$type/$vert" ) {
mkdir "$outdir/$type/$vert";
}
my $path = shift @p;
copy($path,"$outdir/$type/$vert/$sig.poly");
}
}
}
$dbh->commit;