[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.441, Wed Feb 15 08:43:43 2006 UTC revision 1.442, Wed Feb 15 22:12:26 2006 UTC
# Line 781  Line 781 
781      #      #
782    
783      flock(TMP, LOCK_EX) or die "Cannot lock $sim_q\n";      flock(TMP, LOCK_EX) or die "Cannot lock $sim_q\n";
784        seek(TMP, 0, 2);
785    
786      foreach $fid (@$fids) {      foreach $fid (@$fids) {
787          print TMP "$fid\n";          print TMP "$fid\n";
# Line 845  Line 846 
846      copy("$sim_q", "$req_dir/q") or confess "Copy $sim_q $req_dir/q failed: $!";      copy("$sim_q", "$req_dir/q") or confess "Copy $sim_q $req_dir/q failed: $!";
847      copy("$sim_q", "$user_req_dir/q") or confess "Copy $sim_q $user_req_dir/q failed: $!";      copy("$sim_q", "$user_req_dir/q") or confess "Copy $sim_q $user_req_dir/q failed: $!";
848    
849        #
850        # Copy the contents of the sim queue to the "expected import" queue;
851        # this is a list of pegs for which we expect sims to be computed and installed
852        # at some point.
853        #
854        # We also lock on the pending queue file.
855        #
856    
857        if (not(open(SQ, "<$sim_q")))
858        {
859            warn "Cannot open $sim_q for reading: $!\n";
860        }
861        else
862        {
863            if (open(AW, ">>$FIG_Config::global/pending_similarities"))
864            {
865                flock(AW, LOCK_EX);
866                seek(AW, 0, 2);
867    
868                while (<SQ>)
869                {
870                    print AW @_;
871                }
872                close(AW);
873            }
874            else
875            {
876                warn "Could not open $FIG_Config::global/pending_similarities: $!\n";
877            }
878            close(SQ);
879        }
880    
881      my($buf);      my($buf);
882      while (1) {      while (1) {
883          my $n = read($nr_read_fh, $buf, 4096);          my $n = read($nr_read_fh, $buf, 4096);
# Line 6996  Line 7029 
7029      return $rc;      return $rc;
7030  }  }
7031    
7032    sub insert_dynamic_sims_file {
7033        my($self,$sims_file) = @_;
7034        my($sim);
7035        my $rdbH = $self->db_handle;
7036    
7037        if (! $rdbH->table_exists('dynamic_sims'))
7038        {
7039            $rdbH->create_table( tbl => 'dynamic_sims',
7040                                 flds => 'id1 varchar(32),id2 varchar(32), iden float, ali_ln integer, mismatches float,' .
7041                                         'gap_openings float, b1 integer, e1 integer, b2 integer, e2 integer, ' .
7042                                         'psc float, bit_sc float, ln1 integer, ln2 integer');
7043        }
7044    
7045        #
7046        # If we're using postgres we can optimize by opening a pipe
7047        # to a COPY table FROM STDIN
7048        #
7049        if ($rdbH->{_dbms} eq "Pg")
7050        {
7051            print STDERR "Using pg optimized insert\n";
7052            $rdbH->drop_index( tbl => 'dynamic_sims', idx => 'dynamic_sims_idx_id1');
7053            $rdbH->drop_index( tbl => 'dynamic_sims', idx => 'dynamic_sims_idx_id2');
7054            my $rc= $self->insert_dynamic_sims_pg($sims_file);
7055            $rdbH->create_index( tbl => 'dynamic_sims', idx => 'dynamic_sims_idx_id1', flds => 'id1');
7056            $rdbH->create_index( tbl => 'dynamic_sims', idx => 'dynamic_sims_idx_id2', flds => 'id2');
7057            return $rc;
7058        }
7059    
7060        my $rc = 1;
7061    
7062        my $sth = $rdbH->{_dbh}->prepare(
7063                          qq(INSERT INTO dynamic_sims
7064                             (id1,id2,iden,ali_ln,mismatches,gap_openings,b1,e1,b2,e2,psc,bit_sc,ln1,ln2)
7065                             VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)));
7066    
7067    
7068        if (!open(SIMS, "<$sims_file"))
7069        {
7070            warn "Cannot open $sims_file: $!\n";
7071            return 0;
7072        }
7073    
7074        while (<SIMS>)
7075        {
7076            chomp;
7077            my($id1,$id2,$iden,$ali_ln,$mismatches,$gap_openings,$b1,$e1,$b2,$e2,$psc,$bit_sc,$ln1,$ln2) = split(/\t/);
7078    
7079            if (!$sth->execute($id1,$id2,$iden,$ali_ln,$mismatches,$gap_openings,$b1,$e1,$b2,$e2,$psc,$bit_sc,$ln1,$ln2))
7080            {
7081                warn "SQL error: " . $rdbH->{_dbh}->errstr;
7082                return 0;
7083            }
7084            if (!$sth->execute($id2,$id1,$iden,$ali_ln,$mismatches,$gap_openings,$b2,$e2,$b1,$e1,$psc,$bit_sc,$ln2,$ln1))
7085            {
7086                warn "SQL error: " . $rdbH->{_dbh}->errstr;
7087                return 0;
7088            }
7089        }
7090        return $rc;
7091    }
7092    
7093    sub insert_dynamic_sims_pg {
7094        my($self,$sims_file) = @_;
7095        my($sim);
7096        my $rdbH = $self->db_handle;
7097        my $db = $rdbH->{_dbh};
7098    
7099        $db->do("copy dynamic_sims from stdin");
7100    
7101        open(S, "<$sims_file") or die "Cannot open sims $sims_file: $!\n";
7102    
7103        my $num_per_copy = 5000;
7104        my $count = 0;
7105        while (<S>)
7106        {
7107            chomp;
7108            my($id1,$id2,$iden,$ali_ln,$mismatches,$gap_openings,$b1,$e1,$b2,$e2,$psc,$bit_sc,$ln1,$ln2) = split(/\t/);
7109    
7110            $db->func(join("\t", $id1,$id2,$iden,$ali_ln,$mismatches,
7111                           $gap_openings,$b1,$e1,$b2,$e2,$psc,$bit_sc,$ln1,$ln2) . "\n", 'putline');
7112            $db->func(join("\t", $id2,$id1,$iden,$ali_ln,$mismatches,
7113                           $gap_openings,$b2,$e2,$b1,$e1,$psc,$bit_sc,$ln2,$ln1) . "\n", 'putline');
7114    
7115            if ($count++ >= $num_per_copy)
7116            {
7117                $db->func("\\.\n", 'putline');
7118                $db->func("endcopy");
7119                print "Write $.\n";
7120                $db->do("copy dynamic_sims from stdin");
7121                $count = 0;
7122            }
7123        }
7124        close(S);
7125        $db->func("\\.\n", 'putline');
7126        $db->func("endcopy");
7127    }
7128    
7129    
7130  sub read_block {  sub read_block {
7131      shift if UNIVERSAL::isa($_[0],__PACKAGE__);      shift if UNIVERSAL::isa($_[0],__PACKAGE__);
7132      my($fh,$seek,$ln) = @_;      my($fh,$seek,$ln) = @_;

Legend:
Removed from v.1.441  
changed lines
  Added in v.1.442

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3