Bio-EnsEMBL
view release on metacpan or search on metacpan
lib/Bio/EnsEMBL/DBSQL/DnaAlignFeatureAdaptor.pm view on Meta::CPAN
perc_ident, external_db_id, hcoverage, align_type)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" # 16 arguments, external_data removed and align_type added
);
FEATURE:
foreach my $feat (@feats) {
if ( !ref $feat || !$feat->isa("Bio::EnsEMBL::DnaDnaAlignFeature") )
{
throw("feature must be a Bio::EnsEMBL::DnaDnaAlignFeature, not a [". ref($feat). "]." );
}
if ( $feat->is_stored($db) ) {
warning( "DnaDnaAlignFeature [".$feat->dbID()."] is already stored in this database." );
next FEATURE;
}
my $hstart = $feat->hstart();
my $hend = $feat->hend();
my $hstrand = $feat->hstrand();
$self->_check_start_end_strand( $hstart, $hend, $hstrand, $feat->hslice );
my $cigar_string = $feat->cigar_string();
if ( !$cigar_string ) {
$cigar_string = $feat->length() . 'M';
warning( "DnaDnaAlignFeature does not define a cigar_string.\n"
. "Assuming ungapped block with cigar_line=$cigar_string ." );
}
my $align_type = $feat->align_type();
my $hseqname = $feat->hseqname();
if ( !$hseqname ) {
throw("DnaDnaAlignFeature must define an hseqname.");
}
if ( !defined( $feat->analysis ) ) {
throw(
"An analysis must be attached to the features to be stored.");
}
#store the analysis if it has not been stored yet
if ( !$feat->analysis->is_stored($db) ) {
$analysis_adaptor->store( $feat->analysis() );
}
my $original = $feat;
my $seq_region_id;
( $feat, $seq_region_id ) = $self->_pre_store($feat);
$sth->bind_param( 1, $seq_region_id, SQL_INTEGER );
$sth->bind_param( 2, $feat->start, SQL_INTEGER );
$sth->bind_param( 3, $feat->end, SQL_INTEGER );
$sth->bind_param( 4, $feat->strand, SQL_TINYINT );
$sth->bind_param( 5, $hstart, SQL_INTEGER );
$sth->bind_param( 6, $hend, SQL_INTEGER );
$sth->bind_param( 7, $hstrand, SQL_TINYINT );
$sth->bind_param( 8, $hseqname, SQL_VARCHAR );
$sth->bind_param( 9, $cigar_string, SQL_LONGVARCHAR );
$sth->bind_param( 10, $feat->analysis->dbID, SQL_INTEGER );
$sth->bind_param( 11, $feat->score, SQL_DOUBLE );
$sth->bind_param( 12, $feat->p_value, SQL_DOUBLE );
$sth->bind_param( 13, $feat->percent_id, SQL_FLOAT );
$sth->bind_param( 14, $feat->external_db_id, SQL_INTEGER );
$sth->bind_param( 15, $feat->hcoverage, SQL_DOUBLE );
$sth->bind_param( 16, $feat->align_type, SQL_VARCHAR);
$sth->execute();
my $dbId = $self->last_insert_id("${tablename}_id", undef, $tablename);
# store attributes if there are any
my $attr_adaptor = $db->get_AttributeAdaptor();
$attr_adaptor->store_on_DnaDnaAlignFeature($dbId, $feat->get_all_Attributes);
$original->dbID( $dbId );
$original->adaptor($self);
} ## end foreach my $feat (@feats)
$sth->finish();
} ## end sub store
=head2 remove
Arg [1] : A feature $feature
Example : $feature_adaptor->remove($feature);
Description: This removes a feature from the database. The table the
feature is removed from is defined by the abstract method
_tablename, and the primary key of the table is assumed
to be _tablename() . '_id'. The feature argument must
be an object implementing the dbID method, and for the
feature to be removed from the database a dbID value must
be returned.
Returntype : none
Exceptions : thrown if $feature arg does not implement dbID(), or if
$feature->dbID is not a true value
Caller : general
Status : Stable
=cut
sub remove {
my ($self, $feature) = @_;
if(!$feature || !ref($feature) || !$feature->isa('Bio::EnsEMBL::Feature')) {
throw('Feature argument is required');
}
if(!$feature->is_stored($self->db)) {
throw("This feature is not stored in this database");
}
my @tabs = $self->_tables;
my ($table) = @{$tabs[0]};
my $sth = $self->prepare("DELETE FROM $table WHERE ${table}_id = ?");
$sth->bind_param(1,$feature->dbID,SQL_INTEGER);
$sth->execute();
# remove the attributes associated with this feature
my $attrib_adaptor = $self->db->get_AttributeAdaptor;
$attrib_adaptor->remove_from_DnaDnaAlignFeature($feature);
lib/Bio/EnsEMBL/DBSQL/DnaAlignFeatureAdaptor.pm view on Meta::CPAN
$end += $seq_region_len;
$start += $seq_region_len if $seq_region_end > $dest_slice_start;
} elsif ($seq_region_start <= $dest_slice_end) {
# do nothing
} elsif ($seq_region_end >= $dest_slice_start) {
$start += $seq_region_len;
$end += $seq_region_len;
} elsif ($seq_region_end <= $dest_slice_end) {
$end += $seq_region_len if $end < 0;
} elsif ($seq_region_start > $seq_region_end) {
$end += $seq_region_len;
}
} else {
if ($seq_region_start <= $dest_slice_end and $seq_region_end >= $dest_slice_start) {
# do nothing
} elsif ($seq_region_start > $seq_region_end) {
if ($seq_region_start <= $dest_slice_end) {
$start -= $seq_region_len;
} elsif ($seq_region_end >= $dest_slice_start) {
$end += $seq_region_len;
}
}
}
}
$seq_region_start = $start;
$seq_region_end = $end;
$seq_region_strand *= -1;
} ## end else [ if ( $dest_slice_strand...)]
# Throw away features off the end of the requested slice or on
# different seq_region.
if ($seq_region_end < 1
|| $seq_region_start > $dest_slice_length
|| ($dest_slice_sr_id != $seq_region_id)) {
next FEATURE;
}
$slice = $dest_slice;
}
# Finally, create the new DnaAlignFeature.
push( @features,
$self->_create_feature_fast(
'Bio::EnsEMBL::DnaDnaAlignFeature', {
'slice' => $slice,
'start' => $seq_region_start,
'end' => $seq_region_end,
'strand' => $seq_region_strand,
'hseqname' => $hit_name,
'hstart' => $hit_start,
'hend' => $hit_end,
'hstrand' => $hit_strand,
'score' => $score,
'p_value' => $evalue,
'percent_id' => $perc_ident,
'cigar_string' => $cigar_line,
'analysis' => $analysis,
'adaptor' => $self,
'dbID' => $dna_align_feature_id,
'external_db_id' => $external_db_id,
'hcoverage' => $hcoverage,
'align_type' => $align_type,
'dbname' => $external_db_name,
'db_display_name' => $external_display_db_name
} ) );
} ## end while ( $sth->fetch() )
return \@features;
} ## end sub _objs_from_sth
=head2 list_dbIDs
Arg [1] : none
Example : @feature_ids = @{$dna_align_feature_adaptor->list_dbIDs()};
Description: Gets an array of internal ids for all dna align 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
=cut
sub list_dbIDs {
my ($self, $ordered) = @_;
return $self->_list_dbIDs("dna_align_feature",undef, $ordered);
}
1;
( run in 2.858 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )