[Bioperl-l] Passing/Storing "Bio::SeqIO" object to a function

Chris Fields cjfields at illinois.edu
Thu Jun 24 17:19:21 UTC 2010


The error message is pretty straightforward.  What are you passing into write_seq?  Is it a simple hash-ref (maybe via next_dataset)?  write_seq() only supports Bio::Seq::Quality.

chris

On Jun 24, 2010, at 12:03 PM, Abhishek Pratap wrote:

> After a bit more error checking, I was able to resolve the previous error
> 
> Resolved Error : Can't call method "write_seq" on an undefined value
> at  /home/apratap/dev/eclipse_workspace/Illumina/demultiplex_GA_data.pl
> line 139, <GEN12> line 5.
> This happened due to null value returned by one of the hash.
> 
> However I am hitting a new issue.
> New Error : Can't call method "isa" on unblessed reference at
> /local/projects/grc/devel/packages/bioperl-live/Bio/SeqIO/fastq.pm line 126,
> <GEN12> line 49
> 
> 
> -A
> 
> 
> 
> On Thu, Jun 24, 2010 at 12:55 PM, Abhishek Pratap <abhishek.vit at gmail.com>wrote:
> 
>> Hi Chris
>> 
>> Thanks for joining this conversation. I dont think max limit of file
>> handles is a problem. I am opening about 12 in this case.
>> 
>> [apratap at grima]$ ulimit -n
>> 4096
>> 
>> -A
>> 
>> 
>> On Thu, Jun 24, 2010 at 12:52 PM, Chris Fields <cjfields at illinois.edu>wrote:
>> 
>>> Are you sure you haven't hit the max limit for open filehandles for your
>>> OS?  Attempting to open a filehandle when you exceed this limit simply
>>> returns undef, which might explain the error.  On my Mac:
>>> 
>>> cjfields4:~ cjfields$ ulimit -n
>>> 256
>>> 
>>> On my ubuntu box:
>>> 
>>> cjfields at pyrimidine:~$ ulimit -n
>>> 1024
>>> 
>>> I think Windows used to be much less, not sure now.  You might not be able
>>> to reset this on some systems.
>>> 
>>> chris
>>> 
>>> On Jun 24, 2010, at 11:26 AM, Abhishek Pratap wrote:
>>> 
>>>> Sure. Here is the full subroutine where I am opening the file handle and
>>>> storing them
>>>> 
>>>> Thanks for your help,
>>>> -A
>>>> 
>>>> sub createBins {
>>>> my $SUB ='createBins';
>>>> my $PWD = `pwd`;
>>>> my $outpath = shift @_;
>>>> my $lane = shift @_ ;
>>>> 
>>>> foreach my $bin (keys %{ $indexes->{$lane} })
>>>> {
>>>> my $sample_name = $indexes->{$lane}->{$bin}->{'sample'};
>>>> my $path="$outpath".'/'."$sample_name";
>>>> mkpath( $path, { verbose => 1, mode => 0711 });
>>>> my $out = Bio::SeqIO->new(-format=>'fastq-illumina', -file =>
>>>> ">$outpath/$sample_name/$fastQFile");
>>>> $bins{$bin}=$out;
>>>> }
>>>> }
>>>> 
>>>> 
>>>> On Thu, Jun 24, 2010 at 12:22 PM, Warren W. Kretzschmar <
>>> wkretzsch at gmail.com
>>>>> wrote:
>>>> 
>>>>> Where are you getting the filehandles from? That is, How are you
>>>>> opening them? Can you show me the code?
>>>>> 
>>>>> Warren
>>>>> 
>>>>> On Thu, Jun 24, 2010 at 12:19 PM, Abhishek Pratap
>>>>> <abhishek.vit at gmail.com> wrote:
>>>>>> Dear Warren
>>>>>> Thanks for your quick reply.  I am doing something very close to what
>>> you
>>>>>> have suggested but I see errors which might be due to some silly
>>> mistake
>>>>> I
>>>>>> am making. The difference is instead of array I am using a hash to
>>> help
>>>>> me
>>>>>> extract file names by key value later.
>>>>>> I am writing data like this.
>>>>>> my $file_handle = $bins{$bin_name};
>>>>>> $file_handle->write_seq($data);
>>>>>> Gives me an error
>>>>>> Can't call method "write_seq" on an undefined value at
>>>>>> /home/apratap/dev/eclipse_workspace/Illumina/demultiplex_GA_data.pl
>>> line
>>>>>> 139, <GEN12> line 5.
>>>>>> -Abhi
>>>>>> On Thu, Jun 24, 2010 at 11:24 AM, Warren W. Kretzschmar
>>>>>> <wkretzsch at gmail.com> wrote:
>>>>>>> 
>>>>>>> Hi,
>>>>>>> My understanding is that you are using a SeqIO object in order to
>>>>>>> create correctly parsed output files.
>>>>>>> 
>>>>>>> In that case for each SeqIO object, open it like this:
>>>>>>> 
>>>>>>> for (0..9){
>>>>>>> $file = "my_file_$_";
>>>>>>> push @outseqIOs, Bio::SeqIO->new(-file   => ">$file", -format =>
>>> $format
>>>>>>> );
>>>>>>> }
>>>>>>> 
>>>>>>> simply make $file correspond to the file (or bin) you want to put
>>> your
>>>>>>> data into.
>>>>>>> 
>>>>>>> then pass @outseqIOs to your other subroutine and once you've created
>>>>>>> a seq object, write it to the bin you want it to go to (in this case
>>>>>>> file number "7"):
>>>>>>> 
>>>>>>> $outseqIOs[7]->write_seq($seq);
>>>>>>> 
>>>>>>> I haven't tested the code, but that's the kind of thing I think
>>> you're
>>>>>>> looking for. For more info, look at the howto:
>>>>>>> http://www.bioperl.org/wiki/HOWTO:SeqIO
>>>>>>> 
>>>>>>> Warren
>>>>>>> 
>>>>>>> On Thu, Jun 24, 2010 at 10:20 AM, Abhishek Pratap
>>>>>>> <abhishek.vit at gmail.com> wrote:
>>>>>>>> Hi All
>>>>>>>> 
>>>>>>>> I may be hitting a problem which probably hints at my grip of the
>>>>>>>> language.
>>>>>>>> I am trying to store Bio::SeqIO object in a hash. I have creates
>>>>> couple
>>>>>>>> of
>>>>>>>> Bio::SeqIO objects in a method and storing them as a hash reference.
>>>>> The
>>>>>>>> goal is to use them in another subroutine for writing out data to
>>> each
>>>>>>>> file.
>>>>>>>> The script is trying to bin data into different files.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Any idea how I could achieve creating file handles  thru
>>> "Bio::SeqIO"
>>>>>>>> object
>>>>>>>> in one routine and pass them to another for writing.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Thanks!
>>>>>>>> -Abhi
>>>>>>>> 
>>>>>>>> foreach my $bin (keys %{ $indexes->{$lane} })
>>>>>>>> {
>>>>>>>> my $sample_name = $indexes->{$lane}->{$bin}->{'sample'};
>>>>>>>> my $path="$outpath".'/'."$sample_name";
>>>>>>>> mkpath( $path, { verbose => 1, mode => 0711 });
>>>>>>>>      my $out = Bio::SeqIO->new(-format=>'fastq-illumina', -file =>
>>>>>>>> ">$outpath/$sample_name/$fastQFile");
>>>>>>>> $indexes->{$lane}->{$bin}->{'file_handle'}=$out;
>>>>>>>> }
>>>>>>>> }
>>>>>>>> _______________________________________________
>>>>>>>> Bioperl-l mailing list
>>>>>>>> Bioperl-l at lists.open-bio.org
>>>>>>>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>> _______________________________________________
>>>> Bioperl-l mailing list
>>>> Bioperl-l at lists.open-bio.org
>>>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>> 
>>> 
>> 
> _______________________________________________
> 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