[Bio] / FigKernelPackages / FigFam.pm Repository:
ViewVC logotype

Diff of /FigKernelPackages/FigFam.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.7, Tue Apr 4 17:07:49 2006 UTC revision 1.8, Wed Apr 12 13:10:38 2006 UTC
# Line 41  Line 41 
41  sub new {  sub new {
42      my($class,$fig,$fam_id,$fam_data) = @_;      my($class,$fig,$fam_id,$fam_data) = @_;
43    
44      ($fam_id =~ /^FIG\d{3}(\d{3})$/) || die "$fam_id is not a valid FIG family ID";      ($fam_id =~ /^FIG\d{3}(\d{3})$/) || confess "$fam_id is not a valid FIG family ID";
45    
46      my $yyy = $1;      my $yyy = $1;
47      my $fam = {};      my $fam = {};
# Line 163  Line 163 
163    
164      if (! -s "$dir/bounds")      if (! -s "$dir/bounds")
165      {      {
166            print STDERR " building bounds for $fam_id\n";
167          open(BOUNDS,">$dir/bounds")    || die "could not open $dir/bounds";          open(BOUNDS,">$dir/bounds")    || die "could not open $dir/bounds";
168          open(SIMS,"<$dir/bounds.sims") || die "could not open $dir/bounds.sims";          open(SIMS,"<$dir/bounds.sims") || die "could not open $dir/bounds.sims";
169    
# Line 187  Line 188 
188                      else                      else
189                      {                      {
190                          $func2 = $sim->[3];                          $func2 = $sim->[3];
191                          if (! &ok_func($fig,$func,$func2,$id2))                          if (! &ok_func($fig,$func,$func2,$id2,$fam))
192                          {                          {
193                              $bad = $id2;                              $bad = $id2;
194                              $bad_sc = $sim->[2];                              $bad_sc = $sim->[2];
# Line 305  Line 306 
306  }  }
307    
308  sub ok_func {  sub ok_func {
309      my($fig,$func,$func2,$id2) = @_;      my($fig,$func,$func2,$id2,$fam) = @_;
310    
311      my $i;      my $i;
312      if (&SameFunc::same_func($func,$func2)) { return 1 }      if (&loose_same_func($func,$func2) || ($func eq $fig->function_of($id2))) { return 1 }
313      if (! &FIG::hypo($func2))               { return 0 }  #
314      return 1;      my $funcI;
315        if (defined($funcI = $fam->{ignorable_func}->{"$id2\t$func"}))
316        {
317            return $funcI;
318        }
319    
320      my @sims = $fig->sims($id2,5,1.0e-30,"fig");      my @sims = $fig->sims($id2,5,1.0e-30,"fig");
321      my $func3;      my($func3);
322      for ($i=0; ($i < @sims) && (defined($func3 = $fig->function_of($sims[$i]->id2))) &&      for ($i=0; ($i < @sims) && (defined($func3 = $fig->function_of($sims[$i]->id2))) &&
323                 (&FIG::hypo($func3) || &SameFunc::same_func($func,$func3)); $i++) {}                 (&FIG::hypo($func3) || &SameFunc::same_func($func,$func3)); $i++) {}
324      return ($i == @sims);      if ($i == @sims) { print STDERR "make assignment: $id2\t$func\n" }
325    
326        $fam->{ignorable_func}->{"$id2\t$func"} = ($i == @sims);
327    
328        return $fam->{ignorable_func}->{"$id2\t$func"}
329    }
330    
331    sub member {
332        my($x,$yL) = @_;
333        my $i;
334    
335        for ($i=0; ($i < @$yL) && ($yL->[$i] ne $x); $i++) {}
336        return ($i < @$yL);
337    }
338    
339    sub loose_same_func {
340        my($f1,$f2) = @_;
341    
342        if (&SameFunc::same_func($f1,$f2)) { return 1 }
343        my @s1 = split(/\s*[;\/@]\s*/,$f1);
344        my @s2 = split(/\s*[;\/@]\s*/,$f2);
345        if ((@s1 == 1) && (@s2 > 1) && &member($s1[0],\@s2))
346        {
347            return 1;
348        }
349        elsif ((@s2 == 1) && (@s1 > 1) && &member($s2[0],\@s1))
350        {
351            return 1;
352        }
353        else
354        {
355            return 0;
356  }  }
357    }
358    
359    
360    
361  sub representatives {  sub representatives {
362      my($self) = @_;      my($self) = @_;
# Line 329  Line 368 
368  sub should_be_member {  sub should_be_member {
369      my($self,$seq) = @_;      my($self,$seq) = @_;
370    
371        my $fig = $self->{fig};
372      my $dir = $self->{dir};      my $dir = $self->{dir};
373      open(TMP,">$FIG_Config::temp/tmp$$.fasta")      open(TMP,">$FIG_Config::temp/tmp$$.fasta")
374          || die "could not open $FIG_Config::temp/tmp$$.fasta";          || die "could not open $FIG_Config::temp/tmp$$.fasta";
# Line 346  Line 386 
386      my $yes = 0;      my $yes = 0;
387      my $no  = 0;      my $no  = 0;
388    
389        my $ln1 = length($seq);
390    
391      while (defined($_ = <BLAST>))      while (defined($_ = <BLAST>))
392      {      {
393          if ($ENV{'DEBUG'}) { print STDERR $_ }          if ($ENV{'DEBUG'}) { print STDERR $_ }
394          chop;          chop;
395          my $sim = [split(/\t/,$_)];          my $sim = [split(/\t/,$_)];
396          my $peg = $sim->[1];          my $peg = $sim->[1];
397            next if (($_ = $ENV{'IGNORE'}) && (&FIG::genome_of($peg) eq $_)); # for debugging
398    
399          my $sc = $sim->[10];          my $sc = $sim->[10];
400          my $bit_score = $sim->[11];          my $bit_score = $sim->[11];
401          if ((! $seen{$peg}) && ($sc <= 1.0e-10))  
402            my $matched1 = abs($sim->[7] - $sim->[6]) + 1;
403            my $matched2 = abs($sim->[9] - $sim->[8]) + 1;
404            my $ln2 = $self->{peg_lengths}->{$peg};
405    
406            if ((! $seen{$peg}) && ($sc <= 1.0e-10) &&
407                (($matched1 / $ln1) >= 0.7) &&
408                (($matched2 / $ln2) >= 0.7))
409          {          {
410              $seen{$peg} = 1;              $seen{$peg} = 1;
411              push @$sim, $query_ln, $self->{peg_lengths}->{$peg};              push @$sim, $query_ln, $self->{peg_lengths}->{$peg};
# Line 365  Line 416 
416              {              {
417                  if (($bit_score > $bounds->[1]) && ((! $bounds->[2]) || $bounds->[3] < $bit_score))                  if (($bit_score > $bounds->[1]) && ((! $bounds->[2]) || $bounds->[3] < $bit_score))
418                  {                  {
419                      if ($ENV{'DEBUG'}) { print STDERR "    yes\n" }                      if ($ENV{'DEBUG'}) { print STDERR "    yes - $peg\n" }
420                      $yes++;                      $yes++;
421                  }                  }
422                  else                  else
423                  {                  {
424                      if ($ENV{'DEBUG'}) { print STDERR "    no\n" }                      my $bad_func = $bounds->[2] ? $fig->function_of($bounds->[2]) : "";
425                        if ($ENV{'DEBUG'}) { print STDERR "    no - $peg ",join(",",@$bounds)," $bad_func\n" }
426                      $no++;                      $no++;
427                  }                  }
428              }              }
429          }          }
430      }      }
431      $should_be = ($yes > $no);      $should_be = ($yes > 1) && ((0.25 * $yes) >= $no);
432      if ($ENV{'DEBUG'}) { print STDERR "        should_be = $should_be\n" }      if ($ENV{'DEBUG'}) { print STDERR "        should_be = $should_be   yes=$yes no=$no\n" }
433      return ($should_be,$sims);      return ($should_be,$sims);
434  }  }
435    

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3