[Bioperl-l] Newbie question on Bio::SeqIO

Roy Chaudhuri roy.chaudhuri at gmail.com
Thu Jan 27 13:20:03 UTC 2011


Hi James,

It's important to not confuse sequence objects with sequence strings. If 
you try to print out a sequence object, you will get something like 
Bio::PrimarySeq=HASH(0x9c8e20). But you can call methods like revcom on 
sequence objects - if you try to do that with a sequence string you get 
an error.

The subseq method:
$seq_obj->subseq(160,180)
returns a plain text string of the sequence. If you want a sequence 
object that you can call additional methods on, you need to use a 
different method, called trunc, which returns a sequence object:
$seq_obj->trunc(160,180)

To get a sequence string from a sequence object, use the seq method:
$seq_obj->seq

So to get the reverse complement of your subsequence as a string you 
would do:
my $trunc=$seq_obj->trunc(160,180);
my $revcom=$trunc->revcom;
my $rev_output=$revcom->seq;

Or you can combine them all into one line:
my $rev_output=$seq_obj->trunc(160,180)->revcom->seq;

Hope this helps.
Roy.

On 27/01/2011 13:02, James Platt wrote:
> I tried this already I got a different error:
>
> Unrecognized character \xE2 in column 21 at ./biotester.pl line 18.
>
> I then copied your script in and it worked, then I had my script and
> that identical and mine still didn't work. Not sure why it was
> happening.
>
> So I  have my sequence now and I'm trying to reverese complement it:
>
> $output1 = $seq_obj->subseq(160,180); print "$output1\n";
> $rev_output1 = revcom( $output1 ); print "$rev_output1\n";
>
> I get this output:
>
> ATTATAAAAAACTTTTAATTT Bio::PrimarySeq=HASH(0x9c8e20)
>
> I also try it in an object orientated manner:
>
> $rev_output1 = $output1->revcom;
>
> ATTATAAAAAACTTTTAATTT Can't locate object method "revcom" via package
> "ATTATAAAAAACTTTTAATTT" (perhaps you forgot to load
> "ATTATAAAAAACTTTTAATTT"?) at biotester.pl line 24,<GEN0>  line 1.
>
> I've been following instructions at
> http://www.bioperl.org/wiki/HOWTO:Beginners
>
> Thanks again!
>
> James
>
>
> On 26 Jan 2011, at 22:15, Yifei Huang wrote:
>
>> subseq is not a member function in SeqIO class. You need to use
>> next_seq function in SeqIO class to read a sequence and then fetch
>> a subsequence, which might be something like this.
>>
>>
>> #!/usr/bin/perl use Bio::Perl; use Bio::SeqIO;
>>
>>
>> my $seqio_obj = Bio::SeqIO->new(-file =>  "dna.fa", -format =>
>> 'Fasta'); my $seq_obj = $seqio_obj->next_seq(); my $output =
>> $seq_obj->subseq(1,20); print "$output\n";
>>
>> On Wed, Jan 26, 2011 at 5:05 PM, JayPea<plattj at cardiff.ac.uk>
>> wrote:
>>
>> Hi all.
>>
>> I recently installed bioperl on my mac (OSX 10.6.6) using fink. And
>> have been playing around trying to get some really simple things to
>> work. SO what I'm trying to do is just grab 20bases of the fasta
>> file then print them out.
>>
>> This is my script:
>>
>> #!/usr/bin/perl use Bio::Perl; use Bio::SeqIO;
>>
>>
>> my $seqio_obj = Bio::SeqIO->new(-file =>  "dna.fa", -format =>
>> 'Fasta'); my $output = $seqio_obj->subseq(1,20); print
>> "$output\n";
>>
>> fasta file:
>>
>>> chr1 D_discoideum_Ax4_May_2005 4923596 bp DDB0232428
>> NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
>> NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNTATAGTTACTATTGTAAATC
>> GATAGATAACTTAATTTCATTAATATTATACATAGTAACATTATAAAAAACTTTTAATTT
>> TTATTTGGGAATTTCAAATTGCTCATTTGGGAAAATTTTTAACTAAGAAAAAATTCAAAA
>>
>> I get this error:
>>
>> Can't locate object method "subseq" via package "Bio::SeqIO::fasta"
>> at ./biotester.pl line 16.
>>
>> Thanks for any help!
>>
>> James -- View this message in context:
>> http://old.nabble.com/Newbie-question-on-Bio%3A%3ASeqIO-tp30768204p30768204.html
>>
>>
Sent from the Perl - Bioperl-L mailing list archive at Nabble.com.
>>
>> _______________________________________________ Bioperl-l mailing
>> list Bioperl-l at lists.open-bio.org
>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>
>>
>>
>> -- Yifei Huang Department of Biology McMaster University
>
>
> _______________________________________________ Bioperl-l mailing
> list Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l




More information about the Bioperl-l mailing list