[Bioperl-l] Issues on Bio::Tools::Primer3->next_primer

Roy Chaudhuri roy.chaudhuri at gmail.com
Tue Jul 29 13:51:37 EDT 2008

Hi John.

There is a bug in there, sorry for misunderstanding your earlier post 
(although for future reference it is helpful if you can include a 
minimal runnable script that illustrates the problem). 
Bio::Tools::Run::Primer3 assumes the existence of a wrapped Bio::Seq 
object, which it copies to the returned Bio::Tools::Primer3 object. If 
you specify your sequence by means of add_target(SEQUENCE=>$seq), rather 
than by providing a Bio::Seq object, then the wrapped Bio::Seq object is 
undefined, leading to an error since next_primer checks for its existence.

I've noted the bug in Bugzilla. I tried to upload a patch for 
Bio::Tools::Run::Primer3 but there seems to be a problem with the system 
(reported to support at open-bio.org). The patch (probably mangled by 
e-mail line wrapping) is:

 >               elsif (uc($key) eq "SEQUENCE") {
 >                   # Add seqobject if not present, since it is checked 
for by Bio::Tools::Primer3->next_primer()
$self->{'seqobject'}=Bio::Seq->new(-seq=>$args{$key}) if not 
 >               }

Dr. Roy Chaudhuri
Department of Veterinary Medicine
University of Cambridge, U.K.

John M.C. Ma wrote:
> Hi Roy,
> Maybe I wasn't clear with my script fragment, I used Bioperl to run 
> Primer3. The following is as much Primer3-related as I can get:
> use Bio::Tools::Run::Primer3;
> use Bio::Tools::Primer3;
> [snips other use declarations and Ensembl scripts]
> my $primer3_handle=Bio::Tools::Run::Primer3->new(-path=>'[Primer3 path]');
> /*%gene_info is a hash that stores sequence information*/
> $primer3_handle->add_targets('SEQUENCE'=>$gene_info{src_seq},
> 'PRIMER_SEQUENCE_ID'=>$gene_info{name},
> 'TARGET'=>$gene_info{exon_boundaries},
> [snips other options] )
> my $primer3_results=$primer3_handle->run();
> $primer_test=$primer3_results->next_primer;
> On Tue, Jul 29, 2008 at 5:26 AM, Roy Chaudhuri <roy.chaudhuri at gmail.com 
> <mailto:roy.chaudhuri at gmail.com>> wrote:
>     Hi John,
>     I'm not sure if you want to run Primer3 using BioPerl, or just use
>     BioPerl to parse an existing Primer3 output file.
>     For the former you need to specify a target using the -seq argument
>     when you create your Bio::Tools::Run::Primer3 object (the argument
>     value should be a Bio::Seq object). It's also possible to add the
>     sequence between the new() and run() methods using add_targets(),
>     but you snipped out that section so I can't tell if you did that and
>     there is some other problem. The run() method does not seem to check
>     if a target sequence is present, hence you only get an error when
>     you call next_primer() on the returned Bio::Tools::Primer3 object.
>     If you just want to parse an existing Primer3 output file then you
>     need to use Bio::Tools::Primer3, specifying the path to the ouput
>     file using the -file argument to new(). The documentation to
>     Bio::Tools::Run::Primer3:
>     http://search.cpan.org/~sendu/bioperl-run/Bio/Tools/Run/Primer3.pm#new()
>     <http://search.cpan.org/%7Esendu/bioperl-run/Bio/Tools/Run/Primer3.pm#new%28%29>
>     suggests that you can also provide a -file argument in that module,
>     but there doesn't seem to be any evidence of that in the code.
>     Hope this helps.
>     Roy.
>     --
>     Dr. Roy Chaudhuri
>     Department of Veterinary Medicine
>     University of Cambridge, U.K.
>         I am trying a generic script to parse outputs for Primer3
>         results from
>         Bio::Tools::Run::Primer3:
>         use Bio::Tools::Run::Primer3;
>         use Bio::Tools::Primer3;
>         use Bio::Seq::PrimedSeq;
>         [...]
>         my $primer3_handle=Bio::Tools::Run::Primer3->new(-path=>'foobar');
>         [...]
>         my $primer3_results=$primer3_handle->run();
>         my $primer_test=$primer3_results->next_primer;
>         [...]
>         Which is similar to what was on the docs, but when Perl gives
>         the following
>         error at running next_primer:
>         ------------- EXCEPTION: Bio::Root::Exception -------------
>         MSG: No target sequence
>         STACK: Error::throw
>         STACK: Bio::Root::Root::throw
>         /usr/lib/perl5/site_perl/5.10.0/Bio/Root/Root.pm:359
>         STACK: Bio::Tools::Primer3::next_primer
>         /usr/lib/perl5/site_perl/5.10.0/Bio/Tools/Primer3.pm:306
>         STACK: /home/johnma/workspace/NCBI-test/NCBI-test.pl:208
>         -----------------------------------------------------------
>         Whereas line 208 is the line that contained the next_primer.
>         I tried to access the results manually by primer_results() and
>         hard-calling
>         fields, but the output of primer_results() is a hash and not
>         very convenient
>         for further processing. Is there a way that I can go back to
>         next_primer...?
>         Cheers,
>         John
>         _______________________________________________
>         Bioperl-l mailing list
>         Bioperl-l at lists.open-bio.org <mailto:Bioperl-l at lists.open-bio.org>
>         http://lists.open-bio.org/mailman/listinfo/bioperl-l

More information about the Bioperl-l mailing list