#!/usr/bin/perl -w
# Filter to only select CRITICA hits with the best SD if possible for each ORF

$matrix=$p=$ibonus=$sdbonus=$sstart=0;

(@ARGV==1) || die ("usage: best-sd critica-output\n");

while(<>) {
  ($name,$p,$matrix,$start,$end,$comp,$di,$ibonus,$sdbonus,$sstart,$sdseq)
   =split(" ");
  $orfkey=$name." ".$end;
  if (!defined($bestslen{$orfkey})) {
    $bestslen{$orfkey}=0;
    $bestscore{$orfkey}=0;
  }
  $slen=length($sdseq);
  if ($start<4) {
    $slen=5;
  } 
  if ($slen==0) {$slen=1;}
  if ($slen>=$bestslen{$orfkey}) {
    if (($slen>$bestslen{$orfkey}) || ($comp+$di>$bestscore{$orfkey})) {
      $bestslen{$orfkey}=$slen;
      $bestline{$orfkey}=$_;
      $bestscore{$orfkey}=$comp+$di;
    }
  }
}

foreach $orfkey (sort(keys %bestline)) {
  print $bestline{$orfkey};
}
