Bio::EnsEMBL::DBSQL
PredictionTranscriptAdaptor
Toolbar
Summary
Bio::EnsEMBL::DBSQL::PredictionTranscriptAdaptor -
Performs database interaction related to PredictionTranscripts
Package variables
No package variables defined.
Included modules
Inherit
Synopsis
# get a prediction transcript adaptor from the database
$pta = $database_adaptor->get_PredictionTranscriptAdaptor();
# get a slice on a region of chromosome 1
$sa = $database_adaptor->get_SliceAdaptor();
$slice = $sa->fetch_by_region( 'chromosome', 'x', 100000, 200000 );
# get all the prediction transcripts from the slice region
$prediction_transcripts = @{ $pta->fetch_all_by_Slice($slice) };
Description
No description!
Methods
Methods description
Arg [1] : DBI:st $sth An executed DBI statement handle Arg [2] : (optional) Bio::EnsEMBL::Mapper $mapper An mapper to be used to convert contig coordinates to assembly coordinates. Arg [3] : (optional) Bio::EnsEMBL::Slice $slice A slice to map the prediction transcript to. Example : $p_transcripts = $self->_objs_from_sth($sth); Description: Creates a list of Prediction transcripts from an executed DBI statement handle. The columns retrieved via the statement handle must be in the same order as the columns defined by the _columns method. If the slice argument is provided then the the prediction transcripts will be in returned in the coordinate system of the $slice argument. Otherwise the prediction transcripts will be returned in the RawContig coordinate system. Returntype : reference to a list of Bio::EnsEMBL::PredictionTranscripts Exceptions : none Caller : superclass generic_fetch Status : Stable |
Arg [1] : Bio::EnsEMBL::Slice $slice The slice to fetch transcripts on. Arg [3] : (optional) boolean $load_exons if true, exons will be loaded immediately rather than lazy loaded later. Example : $transcripts = $ Description: Overrides superclass method to optionally load exons immediately rather than lazy-loading them later. This is more efficient when there are a lot of transcripts whose exons are going to be used. Returntype : reference to list of transcripts Exceptions : thrown if exon cannot be placed on transcript slice Caller : Slice::get_all_Transcripts Status : Stable |
Arg [1] : string $stable_id The stable id of the transcript to retrieve Example : $trans = $trans_adptr->fetch_by_stable_id('GENSCAN00000001234'); Description: Retrieves a prediction transcript via its display_label. This method is called fetch_by_stable_id for polymorphism with the TranscriptAdaptor. Prediction transcript display_labels are not necessarily stable in that the same identifier may be reused for a completely different prediction transcript in a subsequent database release. Returntype : Bio::EnsEMBL::PredictionTranscript Caller : general Status : Stable |
Arg [1] : none Example : @feature_ids = @{$prediction_transcript_adaptor->list_dbIDs()}; Description: Gets an array of internal ids for all prediction transcript features in the current db Arg[1] : <optional> int. not 0 for the ids to be sorted by the seq_region. Returntype : list of ints Exceptions : none Caller : ? Status : Stable |
Arg [1] : Bio::EnsEMBL::PredictionTranscript $pt Example : $prediction_transcript_adaptor->remove($pt); Description: removes given prediction transcript $pt from database. Returntype : none Exceptions : throws if argument not a Bio::EnsEMBL::PredictionTranscript Caller : general Status : Stable |
Arg [1] : list of Bio::EnsEMBL::PredictionTranscript @pre_transcripts Example : $prediction_transcript_adaptor->store(@pre_transcripts); Description: Stores a list of given prediction transcripts in database. Puts dbID and Adaptor into each object stored object. Returntype : none Exceptions : on wrong argument type Caller : general Status : Stable |
Methods code
sub _columns
{ my $self = shift;
return qw( pt.prediction_transcript_id
pt.seq_region_id
pt.seq_region_start
pt.seq_region_end
pt.seq_region_strand
pt.analysis_id
pt.display_label); } |
sub _objs_from_sth
{ my ($self, $sth, $mapper, $dest_slice) = @_;
my $sa = $self->db()->get_SliceAdaptor();
my $aa = $self->db()->get_AnalysisAdaptor();
my @ptranscripts;
my %analysis_hash;
my %slice_hash;
my %sr_name_hash;
my %sr_cs_hash;
my ($prediction_transcript_id,
$seq_region_id,
$seq_region_start,
$seq_region_end,
$seq_region_strand,
$analysis_id,
$display_label);
$sth->bind_columns(\$prediction_transcript_id,\$
seq_region_id,\$
seq_region_start,\$
seq_region_end,\$
seq_region_strand,\$
analysis_id,\$
display_label);
my $asm_cs;
my $cmp_cs;
my $asm_cs_vers;
my $asm_cs_name;
my $cmp_cs_vers;
my $cmp_cs_name;
if($mapper) {
$asm_cs = $mapper->assembled_CoordSystem();
$cmp_cs = $mapper->component_CoordSystem();
$asm_cs_name = $asm_cs->name();
$asm_cs_vers = $asm_cs->version();
$cmp_cs_name = $cmp_cs->name();
$cmp_cs_vers = $cmp_cs->version();
}
my $dest_slice_start;
my $dest_slice_end;
my $dest_slice_strand;
my $dest_slice_length;
my $dest_slice_sr_name;
my $dest_slice_sr_id;
if($dest_slice) {
$dest_slice_start = $dest_slice->start();
$dest_slice_end = $dest_slice->end();
$dest_slice_strand = $dest_slice->strand();
$dest_slice_length = $dest_slice->length();
$dest_slice_sr_name = $dest_slice->seq_region_name();
$dest_slice_sr_id = $dest_slice->get_seq_region_id();
}
FEATURE: while($sth->fetch()) {
my $analysis = $analysis_hash{$analysis_id} ||=
$aa->fetch_by_dbID($analysis_id);
$seq_region_id = $self->get_seq_region_id_internal($seq_region_id);
my $slice = $slice_hash{"ID:".$seq_region_id};
if(!$slice) {
$slice = $sa->fetch_by_seq_region_id($seq_region_id);
$slice_hash{"ID:".$seq_region_id} = $slice;
$sr_name_hash{$seq_region_id} = $slice->seq_region_name();
$sr_cs_hash{$seq_region_id} = $slice->coord_system();
}
my $sr_name = $sr_name_hash{$seq_region_id};
my $sr_cs = $sr_cs_hash{$seq_region_id};
if($mapper) {
($seq_region_id,$seq_region_start,$seq_region_end,$seq_region_strand) =
$mapper->fastmap($sr_name, $seq_region_start, $seq_region_end,
$seq_region_strand, $sr_cs);
next FEATURE if(!defined($seq_region_id));
$slice = $slice_hash{"ID:".$seq_region_id} ||=
$sa->fetch_by_seq_region_id($seq_region_id);
}
if($dest_slice) {
if($dest_slice_start != 1 || $dest_slice_strand != 1) {
if($dest_slice_strand == 1) {
$seq_region_start = $seq_region_start - $dest_slice_start + 1;
$seq_region_end = $seq_region_end - $dest_slice_start + 1;
} else {
my $tmp_seq_region_start = $seq_region_start;
$seq_region_start = $dest_slice_end - $seq_region_end + 1;
$seq_region_end = $dest_slice_end - $tmp_seq_region_start + 1;
$seq_region_strand *= -1;
}
}
if($seq_region_end < 1 || $seq_region_start > $dest_slice_length ||
( $dest_slice_sr_id ne $seq_region_id )) {
next FEATURE;
}
$slice = $dest_slice;
}
push( @ptranscripts,
$self->_create_feature('Bio::EnsEMBL::PredictionTranscript', {
'-start' => $seq_region_start,
'-end' => $seq_region_end,
'-strand' => $seq_region_strand,
'-adaptor' => $self,
'-slice' => $slice,
'-analysis' => $analysis,
'-dbID' => $prediction_transcript_id,
'-display_label' => $display_label
} ) );
}
return\@ ptranscripts; } |
sub _tables
{ my $self = shift;
return ['prediction_transcript', 'pt'];
}
} |
sub fetch_all_by_Slice
{ my $self = shift;
my $slice = shift;
my $logic_name = shift;
my $load_exons = shift;
my $transcripts = $self->SUPER::fetch_all_by_Slice($slice,$logic_name);
if(!$load_exons || @$transcripts < 2) {
return $transcripts;
}
my ($min_start, $max_end);
foreach my $tr (@$transcripts) {
if(!defined($min_start) || $tr->start() < $min_start) {
$min_start = $tr->start();
}
if(!defined($max_end) || $tr->end() > $max_end) {
$max_end = $tr->end();
}
}
my $ext_slice;
if($min_start >= $slice->start() && $max_end <= $slice->end()) {
$ext_slice = $slice;
} else {
my $sa = $self->db()->get_SliceAdaptor();
$ext_slice = $sa->fetch_by_region
($slice->coord_system->name(), $slice->seq_region_name(),
$min_start,$max_end, $slice->strand(), $slice->coord_system->version());
}
my %tr_hash = map {$_->dbID => $_} @$transcripts;
my $tr_id_str = '(' . join(',', keys %tr_hash) . ')';
my $sth = $self->prepare
("SELECT prediction_transcript_id, prediction_exon_id, exon_rank " .
"FROM prediction_exon " .
"WHERE prediction_transcript_id IN $tr_id_str");
$sth->execute();
my ($ex_id, $tr_id, $rank);
$sth->bind_columns(\$tr_id,\$ ex_id,\$ rank);
my %ex_tr_hash;
while($sth->fetch()) {
$ex_tr_hash{$ex_id} ||= [];
push @{$ex_tr_hash{$ex_id}}, [$tr_hash{$tr_id}, $rank];
}
$sth->finish();
my $ea = $self->db()->get_PredictionExonAdaptor();
my $exons = $ea->fetch_all_by_Slice($ext_slice);
foreach my $ex (@$exons) {
$ex = $ex->transfer($slice) if($slice != $ext_slice);
if(!$ex) {
throw("Unexpected. PredictionExon could not be transfered onto " .
"PredictionTranscript slice.");
}
foreach my $row (@{$ex_tr_hash{$ex->dbID()}}) {
my ($tr, $rank) = @$row;
$tr->add_Exon($ex, $rank);
}
}
return $transcripts; } |
sub fetch_by_stable_id
{ my $self = shift;
my $stable_id = shift;
throw('Stable_id argument expected') if(!$stable_id);
my $syn = $self->_tables()->[1];
$self->bind_param_generic_fetch($stable_id,SQL_VARCHAR);
my $pts = $self->generic_fetch("$syn.display_label = ?");
return (@$pts) ? $pts->[0] : undef; } |
sub list_dbIDs
{ my ($self, $ordered) = @_;
return $self->_list_dbIDs("prediction_transcript", undef, $ordered);
}
1; } |
sub remove
{ my $self = shift;
my $pre_trans = shift;
if(!ref($pre_trans)||!$pre_trans->isa('Bio::EnsEMBL::PredictionTranscript')){
throw('Expected PredictionTranscript argument.');
}
if(!$pre_trans->is_stored($self->db())) {
warning('PredictionTranscript is not stored in this DB - not removing.');
return;
}
my $pexon_adaptor = $self->db()->get_PredictionExonAdaptor();
foreach my $pexon (@{$pre_trans->get_all_Exons}) {
$pexon_adaptor->remove($pexon);
}
my $sth = $self->prepare( "DELETE FROM prediction_transcript
WHERE prediction_transcript_id = ?" );
$sth->bind_param(1,$pre_trans->dbID,SQL_INTEGER);
$sth->execute();
$pre_trans->dbID(undef);
$pre_trans->adaptor(undef); } |
sub store
{ my ( $self, @pre_transcripts ) = @_;
my $ptstore_sth = $self->prepare
(qq{INSERT INTO prediction_transcript (seq_region_id, seq_region_start,
seq_region_end, seq_region_strand,
analysis_id, display_label)
VALUES( ?, ?, ?, ?, ?, ?)});
my $ptupdate_sth = $self->prepare
(qq{UPDATE prediction_transcript SET display_label = ?
WHERE prediction_transcript_id = ?});
my $db = $self->db();
my $analysis_adaptor = $db->get_AnalysisAdaptor();
my $pexon_adaptor = $db->get_PredictionExonAdaptor();
FEATURE: foreach my $pt (@pre_transcripts) {
if(!ref($pt) || !$pt->isa('Bio::EnsEMBL::PredictionTranscript')) {
throw('Expected PredictionTranscript argument not [' . ref($pt).']');
}
if($pt->is_stored($db)) {
warning('Not storing already stored prediction transcript '. $pt->dbID);
next FEATURE;
}
my $analysis = $pt->analysis();
if(!$analysis) {
throw('Prediction transcript must have analysis to be stored.');
}
if(!$analysis->is_stored($db)) {
$analysis_adaptor->store($analysis);
}
$pt->recalculate_coordinates();
my $original = $pt;
my $seq_region_id;
($pt, $seq_region_id) = $self->_pre_store($pt);
$ptstore_sth->bind_param(1,$seq_region_id,SQL_INTEGER);
$ptstore_sth->bind_param(2,$pt->start,SQL_INTEGER);
$ptstore_sth->bind_param(3,$pt->end,SQL_INTEGER);
$ptstore_sth->bind_param(4,$pt->strand,SQL_TINYINT);
$ptstore_sth->bind_param(5,$analysis->dbID,SQL_INTEGER);
$ptstore_sth->bind_param(6,$pt->display_label,SQL_VARCHAR);
$ptstore_sth->execute();
my $pt_id = $ptstore_sth->{'mysql_insertid'};
$original->dbID($pt_id);
$original->adaptor($self);
my $rank = 1;
foreach my $pexon (@{$original->get_all_Exons}) {
$pexon_adaptor->store($pexon, $pt_id, $rank++);
}
if(!defined($pt->display_label())) {
my $zeros = '0' x (11 - length($pt_id));
my $display_label = uc($analysis->logic_name()) . $zeros . $pt_id;
$ptupdate_sth->bind_param(1,$display_label,SQL_VARCHAR);
$ptupdate_sth->bind_param(2,$pt_id,SQL_INTEGER);
$ptupdate_sth->execute();
$original->display_label($display_label);
}
} } |
General documentation
Copyright (c) 1999-2009 The European Bioinformatics Institute and
Genome Research Limited. All rights reserved.
This software is distributed under a modified Apache license.
For license details, please see
/info/about/code_licence.html