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 85 86 87 88 89 90
|
#!/usr/bin/perl
use strict;
use warnings;
my ($beta,$label) = @ARGV;
defined($label) or die "USAGE: $0 beta label < observeOutput\n";
my $label2 = "site $label time";
my $flag = 0;
my @value;
my $maxSite = 0;
my $counter = -1;
while (<STDIN>) {
if (!$flag && /\Q$label2/) {
$flag = 1;
$counter++;
next;
}
next if (!$flag);
if (/^DOFS=/) {
$flag = 0;
next;
}
my @temp = split;
if (scalar(@temp) != 3) {
next;
}
if (!isNumeric($temp[2]) || $temp[2] != $beta) {
next;
}
$value[$counter][$temp[0]]=$temp[1];
$maxSite = $temp[0] if ($temp[0] > $maxSite);
}
print "#$0: Found $counter vectors, maxSite=$maxSite\n";
for (my $i = 0; $i < $counter; ++$i) {
print "$i ";
my $missing = 0;
my $sum = 0;
my $missingSite;
for (my $site = 0; $site <= $maxSite; ++$site) {
my $x = $value[$i][$site];
if (!defined($x)) {
$x = "-100";
$missingSite = $site;
$missing++;
} else {
$sum += $x;
}
print "$x ";
}
if ($missing == 0) {
print " $sum \n";
next;
}
if ($missing == 1 && $i > 0) {
my $iPrev = $i - 1;
my $x = $value[$iPrev][$missingSite];
if (!defined($x)) {
print "UNDEF\n";
next;
}
$sum += $x;
print " $sum \n";
next;
}
print " UNDEF\n";
}
sub isNumeric
{
my ($x) = @_;
return 1 if ($x =~ /^[\d\.e\-+]+$/);
return 0;
}
|