[Biopython] Getting the sequence for a SeqFeature
Peter
biopython at maubp.freeserve.co.uk
Fri Nov 6 07:47:42 EST 2009
On Fri, Nov 6, 2009 at 12:22 PM, Peter <biopython at maubp.freeserve.co.uk> wrote:
> Hi all,
>
> I am planing to add a new method to the SeqFeature object, but
> would like a little feedback first. This email is really just the
> background - I'll write up a few examples later to try and make
> this a bit clearer...
OK, here is a non-trivial example - the first CDS feature in the
GenBank file NC_000932.gb (included as a Biopython unit test),
which is a three part join on the reverse strand. In this case, the
GenBank file includes the protein translation for the CDS features
so we can use it to check our results.
We can parse this GenBank file into a SeqRecord with:
from Bio import SeqIO
record = SeqIO.read(open("../biopython/Tests/GenBank/NC_000932.gb"), "gb")
Let's have a look at the first CDS feature (index 2):
f = record.features[2]
print f.type, f.location, f.strand, f.location_operator
for sub_f in f.sub_features :
print " - ", sub_f.location, sub_f.strand
table = f.qualifiers.get("transl_table",[1])[0] # List of one int
print "Table", table
Giving:
CDS [97998:69724] -1 join
- [97998:98024] -1
- [98561:98793] -1
- [69610:69724] -1
Table 11
Looking at the raw GenBank file, this feature has location string:
complement(join(97999..98024,98562..98793,69611..69724))
i.e. To get the sequence you need to do this (note zero based
Python counting as in the output above):
print (record.seq[97998:98024] + record.seq[98561:98793] +
record.seq[69610:69724]).reverse_complement()
And then translate it using NCBI genetic code table 11,
print "Manual translation:"
print (record.seq[97998:98024] + record.seq[98561:98793] +
record.seq[69610:69724]).reverse_complement().translate(table=11,
cds=True)
print "Given translation:"
print f.qualifiers["translation"][0] # List of one string
print "Biopython translation (with proposed code):"
print f.extract(record.seq).translate(table, cds=True)
And the output, together with the provided translation in the
feature annotation, and the shortcut with the new code I am
proposing to include in Biopython:
Manual translation:
MPTIKQLIRNTRQPIRNVTKSPALRGCPQRRGTCTRVYTITPKKPNSALRKVARVRLTSGFEITAYIPGIGHNLQEHSVVLVRGGRVKDLPGVRYHIVRGTLDAVGVKDRQQGRSKYGVKKPK
Given translation:
MPTIKQLIRNTRQPIRNVTKSPALRGCPQRRGTCTRVYTITPKKPNSALRKVARVRLTSGFEITAYIPGIGHNLQEHSVVLVRGGRVKDLPGVRYHIVRGTLDAVGVKDRQQGRSKYGVKKPK
Biopython translation:
MPTIKQLIRNTRQPIRNVTKSPALRGCPQRRGTCTRVYTITPKKPNSALRKVARVRLTSGFEITAYIPGIGHNLQEHSVVLVRGGRVKDLPGVRYHIVRGTLDAVGVKDRQQGRSKYGVKKPK
The point of all this was with the proposed new extract method,
you just need:
feature_seq = f.extract(record.seq)
instead of:
feature_seq = (record.seq[97998:98024] + record.seq[98561:98793] +
record.seq[69610:69724]).reverse_complement()
which is in itself a slight simplification since you'd need to get the
those coordinates from the sub features, worry about strands, etc.
Peter
More information about the Biopython
mailing list