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

Diff of /FigKernelPackages/FIG.pm

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

revision 1.654, Thu Feb 7 21:52:29 2008 UTC revision 1.655, Mon Feb 11 16:53:43 2008 UTC
# Line 31  Line 31 
31    
32  use FileLocking;  use FileLocking;
33  use DB_File;  use DB_File;
34    use FF;
35    
36  use Fcntl qw/:flock/;  # import LOCK_* constants  use Fcntl qw/:flock/;  # import LOCK_* constants
37    
# Line 10342  Line 10343 
10343      my($sim,$partition,%hits);      my($sim,$partition,%hits);
10344    
10345      if (! $figfams_data) { $figfams_data = "$FIG_Config::data/FigfamsData" }      if (! $figfams_data) { $figfams_data = "$FIG_Config::data/FigfamsData" }
10346      my %reps_hash;      my $reps_db = "$figfams_data/repdb";
     my $reps_hash_tie = tie %reps_hash, 'DB_File', "$figfams_data/partition_reps.db", O_RDWR, 0666, $DB_HASH;  
     $reps_hash_tie || die "tie failed";  
10347    
     my $reps_db = "$figfams_data/partition_reps.fasta";  
     if (! $reps_db) { $reps_db = "$FIG_Config::data/FigfamsData/partitions_rep.fasta" }  
10348      (-s $reps_db) || return ();      (-s $reps_db) || return ();
10349    
10350      my @index = &blastit('query',$seq,$reps_db,1.0e-3);      my @index1 = &blastit('query',$seq,$reps_db,1.0e-5);
10351      my %partitions;      my %indexH;
10352      foreach my $rep (map { $_->id2 } @index)      foreach $_ (@index1)
10353      {      {
10354          foreach $partition (split(/\t/,$reps_hash{$rep}))          my $id2 = $_->id2;
10355            if ($id2 =~ /^(FIG\d{6})/)
10356          {          {
10357              $partitions{$partition} = 1;              my $nbsc = $_->nbsc;
10358                if ((! $indexH{$id2}) || ($indexH{$id2} < $nbsc))
10359                {
10360                    $indexH{$id2} = $nbsc;
10361                }
10362          }          }
10363      }      }
10364      foreach $partition (keys(%partitions))      my @index = sort {$indexH{$b} <=> $indexH{$a} } keys(%indexH);
10365        if (@index > 20) { $#index = 19 }
10366    
10367    #   print STDERR "index contains ",scalar @index, " entries\n";
10368        my %hits;
10369        foreach my $id2 (@index)
10370      {      {
10371          my $part_db = &partition_db($figfams_data,$partition);          if ($id2 =~ /^(FIG\d{6})/)
         my @hits = &blastit('query',$seq,$part_db,1.0e-5,$blast_parms);  
         foreach my $sim (@hits)  
10372          {          {
10373              next if ($min_nbsc && ($sim->nbsc < $min_nbsc));              my $fam_id = $1;
10374    #           print STDERR "\ttrying $fam_id\n";
10375              $sim->[0] = $id;              my $fam_dir = &FF::fam_dir($figfams_data,$fam_id);
10376              my $id2 = $sim->id2;              if ((-s "$fam_dir/blast.partition") && open(PARTITION,"<$fam_dir/blast.partition"))
10377              my $nbsc = $sim->nbsc;              {
10378              if ((! $hits{$id2}) || ($hits{$id2}->nbsc < $sim->nbsc))                  if (($_ = <PARTITION>) && ($_ =~ /^(\d+)/))
10379                    {
10380                        my $partition = $1;
10381                        my $partitionF = "$figfams_data/Partitions/" . ($partition % 1000) . "/$partition/fasta";
10382                        foreach $sim (&blastit('query',$seq,$partitionF,1.0e-3))
10383                        {
10384                            if ($sim->nbsc >= $min_nbsc)
10385              {              {
10386                  $hits{$id2} = $sim;                              my $hit = $sim->id2;
10387                                if ((! $hits{$hit}) || ($sim->nbsc > $hits{$hit}->nbsc))
10388                                {
10389                                    $sim->[0] = $id;
10390                                    $hits{$hit} = $sim;
10391                                }
10392                            }
10393                        }
10394              }              }
10395          }          }
10396      }      }
     return sort { $b->nbsc <=> $a->nbsc } map { $hits{$_} } keys(%hits);  
10397  }  }
10398    
10399  sub partition_db {      return sort { $b->nbsc <=> $a->nbsc } map { $hits{$_} } keys(%hits);
     my($ff,$partition) = @_;  
   
     my $mod = $partition % 1000;  
     return "$ff/Partitions/$mod/$partition/fasta";  
10400  }  }
10401    
10402  sub blastit {  sub blastit {

Legend:
Removed from v.1.654  
changed lines
  Added in v.1.655

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3