-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathafile_check
More file actions
executable file
·85 lines (79 loc) · 2.21 KB
/
afile_check
File metadata and controls
executable file
·85 lines (79 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/opt/maths/bin/perl
use strict;
use warnings;
use lib 'lib';
use Type;
use Seq::Db;
sub MBI { return Math::GMP->new(@_) }
my $zero = MBI(0);
my $typename = 'o';
while (@ARGV && $ARGV[0] =~ /^-/) {
my $arg = shift @ARGV;
last if $arg eq '--';
($typename = $arg || shift(@ARGV)), next if $arg =~ s{^-y}{};
die "Unknown option '$arg'\n";
}
$| = 1;
my $type = Type->new($typename);
my $db = Seq::Db->new($type, 0);
while (<>) {
chomp;
next if /^#\s*(?=[^L\s])/;
if (/^#/) {
my($n, $gn, $range) = m{
^\# \s+ L\((\d+)\) \s+ (?:
= \s+ (\d+)
|
in \s+ range \s+ (\d+\.\.\d+)
)$}x
or do { warn "parse fail: $_\n"; next };
my $true = $n * 2;
my $g = $db->resultset('TauG')->find({ n => $true })
or do { warn "no TauG entry for n=$true\n"; next };
my $agn = $g->maxg;
my $known = ($g->complete) ? $agn : knowng($g);
if ($known == $agn) {
next if defined($gn) && $gn == $agn;
warn "-$_\n+# L($n) = $agn\n";
next;
}
my $arange = "$known..$agn";
next if defined($range) && $range eq $arange;
warn "-$_\n+# L($n) in range $arange\n";
next;
}
my($n, $k, $sign, $v, $tail, $unknown) = m{
^T\( (\d+),(\d+) \) \s+ (?:
(?: (<=) \s+ )? (\d+) (.*)
|
(unknown)
)$
}x or do { warn "parse fail: $_\n"; next };
$v = MBI($v) if defined $v;
my $true = $n * 2;
my $g = $db->resultset('TauG')->find({ n => $true });
my $f = $db->resultset('TauF')->find({ n => $true, k => $k });
my $av = $f ? $f->f : undef;
if ($f && $f->complete) {
next if defined($v) && $v == $av && !$sign;
warn "-$_\n+T($n,$k) $av\n";
next;
}
if ($av) {
next if defined($v) && $v == $av && $sign eq '<=';
warn "-$_\n+T($n,$k) <= $av\n";
next;
}
next if $unknown;
warn "-$_\n+T($n,$k) unknown\n";
}
exit 0;
sub knowng {
my($g) = @_;
my $max = 0;
for my $f (@{ $g->fall($db) }) {
next if $f->k <= $max;
$max = $f->k if $f->f; # whether or not $f->complete
}
return $max;
}