[Bioperl-l] looks like a Bio::SeqIO error

Hilmar Lapp hlapp at gmx.net
Fri May 15 18:58:38 UTC 2009


I think you're running up against an OS limit on the number of open  
files, or the number of files in a directory. You can check (and  
change) your limits with ulimit.

The largefasta modules is designed for reading in and handling large  
(like, really large - whole-chromosome scale) sequences which, if all  
held in memory, would exhaust the memory either immediately or pretty  
quickly. So it stores them in temporary files. Most unix systems will  
limit the number of files you can have open at any one time.

If your sequences in that file aren't huge, largefasta isn't the  
module you want to use - just use the fasta parser, or if you need  
random access to sequences in the file (do you?) then Bio::DB::Fasta.  
Writing sequences to temporary files is a waste of time if they fit  
into memory just fine.

The odd thing is that you actually run up to the limit. Normally the  
temporary files should be closed and deleted when the sequence objects  
go out of scope (I think - should verify in the code of course ...) ,  
so the fact that they don't lets me suspect that the code snippet that  
you presented isn't all that there is to it - are you storing the  
sequences somewhere in a variable, such as in an array or a hash table?

	-hilmar

On May 15, 2009, at 9:05 AM, fungazid wrote:

>
> Hello,
>
> I hope this is the right address for bioperl programming issues.  
> Bioperl
> saves me a lot of time (not to re-invent the wheel), but there are  
> some
> extremely irritating problems (I would change the code myself if I  
> knew
> how).
>
> I am trying to read a file (~20MB) containing multiple fasta  
> sequences:
>> a
> AGTAGTGAGTGCGCTGA.........
>> b
> GCGCTGAAGTAGTGAGT.......
>> c
> AGTAGTGAGTGCGCTGA.........
>> d...........
>
> with the following lines:
>
> my $seqin = Bio::SeqIO->new('-format'=>'largefasta','-file'=>$file1);
>
> LOOP1: while ( my $seqobj1 = $seqin->next_seq())
>
> {
> ......
> my $seq=$seqobj1->subseq(1,$seqobj1->length);
> .......
> }
>
>
> This works right for the first ~30000 contig sequences but then the
> following message appears:
>
> Error in tempdir() using /tmp/XXXXXXXXXX: Could not create directory
> /tmp/6eS92VzVjm: Too many links at /usr/share/perl5/Bio/Root/IO.pm  
> line 744
> DESTROY() mysql_insert obj
> destroying HANDLE
>
> What to do ??? (this is only one of some different Bioperl related  
> bugs that
> I'm experiencing)
>
>
>
>
> -- 
> View this message in context: http://www.nabble.com/looks-like-a-Bio%3A%3ASeqIO-error-tp23559474p23559474.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

-- 
===========================================================
: Hilmar Lapp  -:-  Durham, NC  -:-  hlapp at gmx dot net :
===========================================================






More information about the Bioperl-l mailing list