Re: Bio::DB::Fasta problem: unable to fetch all sequences via get_PrimarySeq_stream
Helene RIMBERT <[email protected]> Tue, 15 Nov 2016 11:15:29 +0100
| Newsgroups | gmane.comp.lang.perl.bio.general |
|---|---|
| Message-ID | <[email protected]> |
Dear Chris, thank you for your quick replies :)! I am having a look at the link you mentioned right now! I attached some script and the fasta exemple! Just for the information: perl --version: This is perl 5, version 22, subversion 1 (v5.22.1) & BioPerl: 1.6.924-3 Thanks again for your answer! Best regards, Helene Le 14/11/2016 à 18:31, Fields, Christopher J a écrit : > > We would probably need a list of IDs, but this has happened before a > few times. In some cases it’s an issue of line ending mismatches, > which can be normalized using a tool like dos2unix. However if you > have IDs that could be evaluated as False the issue is trickier and > not so easy to fix, primarily because the returned value is > stringified to the display ID (which is one reason I hate object > stringification). > > For example, the following would likely short-circuit without showing > sequence IDs, as having a seq ID of ‘0’ (note this does not include > the description, which is separate) will evaluate as False and kill > the while loop: > > >0 desc1 > > ATATATGTGC > > >1 desc2 > > CGCGCCGCGC > > The issue, the problems with a fix, and a workaround are described > here: https://github.com/bioperl/bioperl-live/issues/170 > > chris > > *From: *Bioperl-l > <[email protected]> on > behalf of Helene RIMBERT <[email protected]> > *Date: *Monday, November 14, 2016 at 10:16 AM > *To: *"[email protected]" <[email protected]> > *Subject: *[Bioperl-l] Bio::DB::Fasta problem: unable to fetch all > sequences via get_PrimarySeq_stream > > Dear BioPerl developers, > > I come with a question regarding the get_PrimarySeq_stream ! > > I am using the Bio::DB:Fasta module to access my fasta sequences and i > am facing some problem with the get_PrimarySeq_stream(). > When i check the content of the db object, all the sequences are > indexed (i mean that i can see all the sequences ids in the offsets hash). > > I then use the get_PrimarySeq_stream to loop over all my sequences, > but only 1 sequence is retrieved from the stream object. > I tried to look for some explanations, and the only thing i could find > is that it seems that my seq_ids are considered as undef. during the > while($dbstream->next_seq()) statement when reaching > IndexedBase.pm line 1116 > > I tried to loop over all sequence ids using my @seq_ids = > $self->{fastaObj}->get_all_primary_ids; and it works very well. > > I don't understand why the stream object does not retrieve all the > sequences whereas get_all_primary_ids does! > Is there something wrong with my input FASTA (my ids are very long...) > or am i missing something? > > I am really interested in finding out why i am not able to use > get_PrimarySeq_stream ! > > Many thanks in advance :) > > Regards, > > Helene > > #---------------------------------- > # here is the part of code that causes problem: > # initialize db::fasta object > $self->{fastaObj} = Bio::DB::Fasta->new("test2.fna", -reindex => 1); > > # create stream object > my $seq_stream = $self->{fastaObj}->get_PrimarySeq_stream(); > $self->{nbSeqFetchedInStream}=0; > > # loop over all seq in BioDBFasta obj using stream obj. > while ($self->{seq} = $seq_stream->next_seq()){ > #foreach my $seq_id (@seq_ids){ > #$self->{seq} = $self->{fastaObj}->get_Seq_by_id($seq_id); # to > use with foreach loop > > print (" New sequence: ", Dumper $self->{seq}); > $self->{nbSeqFetchedInStream}++; > } > print (" Fetched sequences in _PrimarySeq_stream: > $self->{nbSeqFetchedInStream}"); > #---------------------------------- > > > > > -- > > *--> Nouvelle adresse e-mail: [email protected] > <mailto:[email protected]> <--* > > Hélène RIMBERT > Bioinformatic Engineer > [email protected] <mailto:[email protected]> > UMR 1095 INRA/UBP – Site de Crouel > Tèl. : +33 (0)4 73 62 43 49 > 5 chemin de beaulieu > 63039 Clermont-Ferrand Cedex 2 > France > https://www6.ara.inra.fr/umr1095_eng/ > <https://urldefense.proofpoint.com/v2/url?u=https-3A__www6.ara.inra.fr_umr1095-5Feng_&d=DQMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=fbHa8Njtvh9VmSnzJxiEUTW9NWDwMMwQAzhgZDO41GQ&m=iAuK-qAsrrjM_h3E9YA-ujqtTSn1yoLk7cNZJ6SUYjE&s=5CzTn2cwr47V7x_FBW4PWVEZ_mB6nyuGjo1LgBYcG7U&e=> -- *--> Nouvelle adresse e-mail: [email protected] <--* Hélène RIMBERT Bioinformatic Engineer [email protected] UMR 1095 INRA/UBP – Site de Crouel Tèl. : +33 (0)4 73 62 43 49 5 chemin de beaulieu 63039 Clermont-Ferrand Cedex 2 France https://www6.ara.inra.fr/umr1095_eng/ _______________________________________________ Bioperl-l mailing list [email protected] http://mailman.open-bio.org/mailman/listinfo/bioperl-l
test.fna
(text/plain, 822 B)
>scaffold8141_chunk_0_EXONERATE_BLASTX_RefProtMethForWheatPipe_12682_15840_LOC_Os02g53200.2_Match_0025 . ATGTGTTTGGTTGCAGACGCGGGCACCGTGGGCGTGAACTGGGGGCGGGTGGCGAACGAC CTGCCCAGCCCGGCGGCGGTGGTGCAGCTGCTCAAGCAGCACGGCATCGCGCAGGTCAAG >scaffold8141_chunk_0_EXONERATE_BLASTX_RefProtMethForWheatPipe_19160_19327_Bradi2g26810.1.p_Match_0006 . ATGAGTGATGGAGGTCAAAACAGGAAGGCCATTGCTTCAGTTATGATGCTTGTCTCATGG AAAATCTAAAAGGACCGCAACGCAAGAATTTTTCGCAACACTGCTGCTCTGACCTCCATT >scaffold8141_chunk_0_SIMsearch_CAT01_19443_24928_gene_0002 . ATGCGGACAAGCGCGGCCACGTCGTCGCCACGGGATGGCGGCTCCGGGGCTCTGACCCCC GCCCAGGGCGACATGGGGAGCGGCGGCGCCAGGCGGCATTTCTTCCCGCTCACCAGCTTG >scaffold8141_chunk_0_SIMsearch_CAT01_28795_35559_gene_0001 . ATGTCGCGCCGCGGCCGCGAGGAGGAGGAGGAGGAGGAGGAGTTCGAGGAGGTAGAGGAG GAGGAGGAGGCCGACGAGTCGGAGGTGGAGGAGGAGCAGGTGGAGGAGAGGGGCGGCAAG
bugged.pl
(application/x-perl, 1.5 KB)
#!/usr/bin/perl
##-------------------------------------------
## Included modules
##-------------------------------------------
## Basic Perl modules
use strict;
use warnings;
use diagnostics;
## BioPerl modules
use Bio::DB::Fasta;
## Debug
use Data::Dumper;
&main();
sub main {
##-------------------------------------------
# INTRODUCTION
##-------------------------------------------
my $self={};
bless $self;
##-------------------------------------------
# Input fasta management
##-------------------------------------------
print(" Now opening FASTA file test.fna");
$self->{fastaObj} = Bio::DB::Fasta->new("test.fna", -reindex => 1);
my @seq_ids = $self->{fastaObj}->get_all_ids;
print(" ids from get_all_ids: ", Dumper @seq_ids, "\n");
print(" Dumper de BioDBFAsta obj: ", Dumper $self->{fastaObj}, "\n");
# initialize sequence stream obj
my $seq_stream = $self->{fastaObj}->get_PrimarySeq_stream();
#my $seq_stream = $seqObj->get_PrimarySeq_stream();
print(" Dumper de seq_stream", Dumper $seq_stream, "\n");
$self->{nbSeqFetchedInStream}=0;
# loop over all seq in BioDBFasta obj using stream
while (defined($self->{seq} = $seq_stream->next_seq())){
#foreach my $seq_id (@seq_ids){
#$self->{seq} = $self->{fastaObj}->get_Seq_by_id($seq_id); # to use with foreach loop
print(" New sequence: ", Dumper $self->{seq}, "\n");
$self->{nbSeqFetchedInStream}++;
}
print(" Fetched sequences with _PrimarySeq_stream: $self->{nbSeqFetchedInStream}\n");
}