Skip to content
Snippets Groups Projects
Commit 7038a1d2 authored by Dan Staines's avatar Dan Staines
Browse files

added hdescription to protein_feature

parent 6607f485
No related branches found
No related tags found
No related merge requests found
......@@ -83,13 +83,13 @@ sub fetch_all_by_translation_id {
my @features;
my $analysis_adaptor = $self->db()->get_AnalysisAdaptor();
my $sth = $self->prepare("SELECT protein_feature_id, p.seq_start, p.seq_end, p.analysis_id, " . " p.score, p.perc_ident, p.evalue, p.hit_start, p.hit_end, " . " p.hit_name, x.display_label, i.interpro_ac " . "FROM protein_feature p " . "LEFT JOIN interpro AS i ON p.hit_name = i.id " . "LEFT JOIN xref AS x ON x.dbprimary_acc = i.interpro_ac " . "WHERE p.translation_id = ?");
my $sth = $self->prepare("SELECT protein_feature_id, p.seq_start, p.seq_end, p.analysis_id, " . " p.score, p.perc_ident, p.evalue, p.hit_start, p.hit_end, " . " p.hit_name, p.hit_description, x.display_label, i.interpro_ac " . "FROM protein_feature p " . "LEFT JOIN interpro AS i ON p.hit_name = i.id " . "LEFT JOIN xref AS x ON x.dbprimary_acc = i.interpro_ac " . "WHERE p.translation_id = ?");
$sth->bind_param(1, $translation_id, SQL_INTEGER);
$sth->execute();
while (my $row = $sth->fetchrow_arrayref) {
my ($dbID, $start, $end, $analysisid, $score, $perc_id, $evalue, $hstart, $hend, $hid, $desc, $interpro_ac) = @$row;
my ($dbID, $start, $end, $analysisid, $score, $perc_id, $evalue, $hstart, $hend, $hid, $hdesc, $desc, $interpro_ac) = @$row;
my $analysis = $analysis_adaptor->fetch_by_dbID($analysisid);
......@@ -97,20 +97,21 @@ sub fetch_all_by_translation_id {
warning("Analysis with dbID=$analysisid does not exist\n" . "but is referenced by ProteinFeature $dbID");
}
my $feat = Bio::EnsEMBL::ProteinFeature->new(-DBID => $dbID,
-ADAPTOR => $self,
-SEQNAME => $translation_id,
-START => $start,
-END => $end,
-ANALYSIS => $analysis,
-PERCENT_ID => $perc_id,
-P_VALUE => $evalue,
-SCORE => $score,
-HSTART => $hstart,
-HEND => $hend,
-HSEQNAME => $hid,
-IDESC => $desc,
-INTERPRO_AC => $interpro_ac);
my $feat = Bio::EnsEMBL::ProteinFeature->new(-DBID => $dbID,
-ADAPTOR => $self,
-SEQNAME => $translation_id,
-START => $start,
-END => $end,
-ANALYSIS => $analysis,
-PERCENT_ID => $perc_id,
-P_VALUE => $evalue,
-SCORE => $score,
-HSTART => $hstart,
-HEND => $hend,
-HSEQNAME => $hid,
-HDESCRIPTION => $hdesc,
-IDESC => $desc,
-INTERPRO_AC => $interpro_ac);
push(@features, $feat);
} ## end while (my $row = $sth->fetchrow_arrayref)
......@@ -205,23 +206,23 @@ sub store {
if (!defined($analysis)) {
throw("Feature doesn't have analysis. Can't write to database");
}
if (!$analysis->is_stored($db)) {
$db->get_AnalysisAdaptor->store($analysis);
}
my $sth = $self->prepare("INSERT INTO protein_feature " . " SET translation_id = ?, " . " seq_start = ?, " . " seq_end = ?, " . " analysis_id = ?, " . " hit_start = ?, " . " hit_end = ?, " . " hit_name = ?, " . " score = ?, " . " perc_ident = ?, " . " evalue = ?");
my $sth = $self->prepare("INSERT INTO protein_feature " . " SET translation_id = ?, " . " seq_start = ?, " . " seq_end = ?, " . " analysis_id = ?, " . " hit_start = ?, " . " hit_end = ?, " . " hit_name = ?, " . " hit_description = ?, " . " score = ?, " . " perc_ident = ?, " . " evalue = ?");
$sth->bind_param(1, $translation_id, SQL_INTEGER);
$sth->bind_param(2, $feature->start, SQL_INTEGER);
$sth->bind_param(3, $feature->end, SQL_INTEGER);
$sth->bind_param(4, $analysis->dbID, SQL_INTEGER);
$sth->bind_param(5, $feature->hstart, SQL_INTEGER);
$sth->bind_param(6, $feature->hend, SQL_INTEGER);
$sth->bind_param(7, $feature->hseqname, SQL_VARCHAR);
$sth->bind_param(8, $feature->score, SQL_DOUBLE);
$sth->bind_param(9, $feature->percent_id, SQL_FLOAT);
$sth->bind_param(10, $feature->p_value, SQL_DOUBLE);
$sth->bind_param(1, $translation_id, SQL_INTEGER);
$sth->bind_param(2, $feature->start, SQL_INTEGER);
$sth->bind_param(3, $feature->end, SQL_INTEGER);
$sth->bind_param(4, $analysis->dbID, SQL_INTEGER);
$sth->bind_param(5, $feature->hstart, SQL_INTEGER);
$sth->bind_param(6, $feature->hend, SQL_INTEGER);
$sth->bind_param(7, $feature->hseqname, SQL_VARCHAR);
$sth->bind_param(8, $feature->hdescription, SQL_LONGVARCHAR);
$sth->bind_param(9, $feature->score, SQL_DOUBLE);
$sth->bind_param(10, $feature->percent_id, SQL_FLOAT);
$sth->bind_param(11, $feature->p_value, SQL_DOUBLE);
$sth->execute();
......@@ -274,7 +275,7 @@ sub save {
my $db = $self->db();
my $analysis_adaptor = $db->get_AnalysisAdaptor();
my $sql = qq{INSERT INTO $tablename (translation_id, seq_start, seq_end, hit_start, hit_end, hit_name, analysis_id, score, evalue, perc_ident, external_data) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)};
my $sql = qq{INSERT INTO $tablename (translation_id, seq_start, seq_end, hit_start, hit_end, hit_name, hdescription, analysis_id, score, evalue, perc_ident, external_data) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)};
my $sth = $self->prepare($sql);
......@@ -309,11 +310,12 @@ sub save {
$sth->bind_param(4, $hstart, SQL_INTEGER);
$sth->bind_param(5, $hend, SQL_INTEGER);
$sth->bind_param(6, $feat->hseqname, SQL_VARCHAR);
$sth->bind_param(7, $feat->analysis->dbID, SQL_INTEGER);
$sth->bind_param(8, $feat->score, SQL_DOUBLE);
$sth->bind_param(9, $feat->p_value, SQL_DOUBLE);
$sth->bind_param(10, $feat->percent_id, SQL_FLOAT);
$sth->bind_param(11, $extra_data, SQL_LONGVARCHAR);
$sth->bind_param(7, $feat->hdescription, SQL_LONGVARCHAR);
$sth->bind_param(8, $feat->analysis->dbID, SQL_INTEGER);
$sth->bind_param(9, $feat->score, SQL_DOUBLE);
$sth->bind_param(10, $feat->p_value, SQL_DOUBLE);
$sth->bind_param(11, $feat->percent_id, SQL_FLOAT);
$sth->bind_param(12, $extra_data, SQL_LONGVARCHAR);
$sth->execute();
$original->dbID($sth->{'mysql_insertid'});
......
......@@ -10,6 +10,7 @@
http://www.ensembl.org/info/about/code_licence.html
=head1 CONTACT
Please email comments or questions to the public Ensembl
developers list at <dev@ensembl.org>.
......@@ -126,7 +127,7 @@ sub new {
my $self = $class->SUPER::new(@_);
my ($hstart, $hend, $hstrand, $percent_id, $score, $species, $hspecies, $p_value, $hseqname, $f1, $f2, $coverage, $hcoverage, $group_id, $level_id, $external_db_id, $extra_data, $external_db_name, $external_display_db_name) = rearrange(['HSTART', 'HEND', 'HSTRAND', 'PERCENT_ID', 'SCORE', 'SPECIES', 'HSPECIES', 'P_VALUE', 'HSEQNAME', 'FEATURE1', 'FEATURE2', 'COVERAGE', 'HCOVERAGE', 'GROUP_ID', 'LEVEL_ID', 'EXTERNAL_DB_ID', 'EXTRA_DATA', 'DBNAME', 'DB_DISPLAY_NAME'], @_);
my ($hstart, $hend, $hstrand, $percent_id, $score, $species, $hspecies, $p_value, $hseqname, $f1, $f2, $coverage, $hcoverage, $group_id, $level_id, $external_db_id, $extra_data, $external_db_name, $external_display_db_name, $hdescription) = rearrange(['HSTART', 'HEND', 'HSTRAND', 'PERCENT_ID', 'SCORE', 'SPECIES', 'HSPECIES', 'P_VALUE', 'HSEQNAME', 'FEATURE1', 'FEATURE2', 'COVERAGE', 'HCOVERAGE', 'GROUP_ID', 'LEVEL_ID', 'EXTERNAL_DB_ID', 'EXTRA_DATA', 'DBNAME', 'DB_DISPLAY_NAME', 'HDESCRIPTION'], @_);
if (defined($hstart) && defined($hend) && ($hend < $hstart)) {
throw('HSTART must be less than or equal to HEND');
......@@ -153,7 +154,7 @@ sub new {
$self->{'extra_data'} = $extra_data;
$self->{'dbname'} = $external_db_name;
$self->{'db_display_name'} = $external_display_db_name;
$self->{'hdescription'} = $hdescription;
#
# Feature1 and Feature2 arg handling for backwards compatibility
#
......@@ -583,6 +584,24 @@ sub p_value {
return $self->{'p_value'};
}
=head2 hdescription
Arg [1] : String (optional)
Example : $des = $fp->hdescription()
Description: Getter Setter for optional description of this feature
Returntype : String
Exceptions : none
Caller : general
Status : Stable
=cut
sub hdescription {
my $self = shift;
$self->{'hdescription'} = shift if (@_);
return $self->{'hdescription'};
}
=head2 display_id
Arg [1] : none
......@@ -768,11 +787,12 @@ sub invert {
$slice = $self->hslice;
}
my $hstart = $self->{'hstart'};
my $hend = $self->{'hend'};
my $hstrand = $self->{'hstrand'};
my $hspecies = $self->{'hspecies'};
my $hseqname = $self->{'hseqname'};
my $hstart = $self->{'hstart'};
my $hend = $self->{'hend'};
my $hstrand = $self->{'hstrand'};
my $hspecies = $self->{'hspecies'};
my $hseqname = $self->{'hseqname'};
my $hdescription = $self->{'hdescription'};
my $start = $self->{'start'};
my $end = $self->{'end'};
......@@ -792,6 +812,8 @@ sub invert {
$self->{'hseqname'} = $seqname;
$self->{'hspecies'} = $species;
$self->{'hdescription'} = $hdescription;
$self->{'hslice'} = $self->slice;
$self->{'slice'} = $slice;
} ## end sub invert
......
use strict;
use warnings;
BEGIN {
$| = 1;
use Test;
plan tests => 17;
BEGIN { $| = 1;
use Test;
plan tests => 17;
}
use Bio::EnsEMBL::Test::TestUtils;
......@@ -12,41 +12,48 @@ use Bio::EnsEMBL::Test::TestUtils;
use Bio::EnsEMBL::ProteinFeature;
use Bio::EnsEMBL::Analysis;
our $verbose = 0; #turn on or off debug statements
our $verbose = 0; #turn on or off debug statements
#
# Test new and getters
#
my $start = 10;
my $end = 100;
my $hstart = 1;
my $hend = 90;
my $hstrand = 1;
my $hseqname = 'RF1231';
my $start = 10;
my $end = 100;
my $hstart = 1;
my $hend = 90;
my $hstrand = 1;
my $hseqname = 'RF1231';
my $percent_id = 90.8;
my $p_value = '1.52';
my $score = 50;
my $species = 'Homo_sapiens';
my $hspecies = 'Mus_musculus';
my $p_value = '1.52';
my $score = 50;
my $species = 'Homo_sapiens';
my $hspecies = 'Mus_musculus';
my $hdes = "Hit description";
my $idesc = 'interpro description';
my $idesc = 'interpro description';
my $interpro_ac = 'interpro accession';
my $analysis = Bio::EnsEMBL::Analysis->new(-LOGIC_NAME => 'test');
my $f = Bio::EnsEMBL::ProteinFeature->new(-START => $start,
-END => $end,
-ANALYSIS => $analysis,
-HSTART => $hstart,
-HEND => $hend,
-HSEQNAME => $hseqname,
-PERCENT_ID => $percent_id,
-P_VALUE => $p_value,
-SCORE => $score,
-SPECIES => $species,
-HSPECIES => $hspecies,
-IDESC => $idesc,
-INTERPRO_AC => $interpro_ac);
my $f = Bio::EnsEMBL::ProteinFeature->new
(-START => $start,
-END => $end,
-ANALYSIS => $analysis,
-HSTART => $hstart,
-HEND => $hend,
-HSEQNAME => $hseqname,
-PERCENT_ID => $percent_id,
-P_VALUE => $p_value,
-SCORE => $score,
-SPECIES => $species,
-HSPECIES => $hspecies,
-HDESCRIPTION=> $hdes,
-IDESC => $idesc,
-INTERPRO_AC => $interpro_ac);
ok($f && $f->isa('Bio::EnsEMBL::ProteinFeature'));
......@@ -55,15 +62,16 @@ ok($f->end == $end);
ok($f->analysis == $analysis);
ok($f->hstart == $hstart);
ok($f->hend == $hend);
ok($f->hend == $hend);
ok($f->hseqname eq $hseqname);
ok($f->percent_id == $percent_id);
ok($f->p_value == $p_value);
ok($f->score == $score);
ok($f->species eq $species);
ok($f->species eq $species);
ok($f->hspecies eq $hspecies);
ok($f->hdescription eq $hdes);
ok($f->idesc eq $idesc);
ok($f->idesc eq $idesc);
ok($f->interpro_ac eq $interpro_ac);
# check that the strand is 0
......@@ -72,6 +80,9 @@ ok($f->strand == 0);
#
# Test setters
#
ok(test_getter_setter($f, 'idesc', 'interpro desc1'));
ok(test_getter_setter($f, 'interpro_ac', 'interpro ac1'));
ok(test_getter_setter($f, 'idesc', 'interpro desc1'));
ok(test_getter_setter($f, 'interpro_ac', 'interpro ac1'));
......@@ -38,3 +38,49 @@ sub print_features {
}
}
}
# test adding and retrieving a new feature
my $start = 10;
my $end = 100;
my $hstart = 1;
my $hend = 90;
my $hstrand = 1;
my $hseqname = 'RF1231';
my $percent_id = 90.8;
my $p_value = '1.52';
my $score = 50;
my $species = 'Homo_sapiens';
my $hspecies = 'Mus_musculus';
my $hdes = "Hit description";
my $idesc = 'interpro description';
my $interpro_ac = 'interpro accession';
my $analysis = Bio::EnsEMBL::Analysis->new(-LOGIC_NAME => 'test');
my $f = Bio::EnsEMBL::ProteinFeature->new
(-START => $start,
-END => $end,
-ANALYSIS => $analysis,
-HSTART => $hstart,
-HEND => $hend,
-HSEQNAME => $hseqname,
-PERCENT_ID => $percent_id,
-P_VALUE => $p_value,
-SCORE => $score,
-SPECIES => $species,
-HSPECIES => $hspecies,
-HDESCRIPTION=> $hdes,
-IDESC => $idesc,
-INTERPRO_AC => $interpro_ac);
$pfa->store($f,21724);
my $pfs = $pfa->fetch_all_by_translation_id(21724);
ok(@$pfs == 16);
my @pfs = grep{$_->hdescription() eq $hdes} @$pfs;
ok(scalar @pfs > 0);
# patch_69_70_e.sql
#
# Title: Add hit_description to protein_feature
#
# Description: Column allowing an optional description to be added to a protein_feature
ALTER TABLE protein_feature ADD COLUMN hit_description TEXT;
# Patch identifier
INSERT INTO meta (species_id, meta_key, meta_value)
VALUES (NULL, 'patch', 'patch_69_70_e.sql|protein_feature_hit_description');
......@@ -1594,6 +1594,7 @@ CREATE TABLE protein_align_feature (
@column hit_start Alignment hit start position.
@column hit_end Alignment hit end position.
@column hit_name Alignment hit name.
@column hit_description Optional description of the hit.
@column analysis_id Foreign key references to the @link analysis table.
@column score Alignment score.
@column evalue Alignment E-value.
......@@ -1614,6 +1615,7 @@ CREATE TABLE protein_feature (
hit_start INT(10) NOT NULL,
hit_end INT(10) NOT NULL,
hit_name VARCHAR(40) NOT NULL,
hit_description TEXT,
analysis_id SMALLINT UNSIGNED NOT NULL,
score DOUBLE,
evalue DOUBLE,
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment