[Bioperl-l] fasta2gff_landmark ...
Dan Bolser
dan.bolser at gmail.com
Wed May 13 13:01:27 EDT 2009
Hi,
I am trying to create a script to write one 'GFF landmark' line for
each entry in a fasta file. I'm doing this so that the landmarks show
up in GBrowse (along with my attached similarity 'features').
In a nutshell, I was told to add lines like:
C08HBa0216M19.1 . contig 1 <length> . . .
ID=C08HBa0216M19.1;Name=C08HBa0216M19.1
to the GFF so that GBrowse would pick up the features which have
C08HBa0216M19.1 as their 'landmark'. This seems to be working great
for the sequences where I added this line manually, but now I want to
write a script to automatically generate these GFF landmarks from a
fasta file.
So far I have a script that looks like this:
<source lang="perl">
#!/usr/bin/perl -w
use strict;
use Bio::SeqIO;
use Bio::SeqFeature::Generic;
use Bio::FeatureIO;
[snip]
my $gffIO =
new Bio::FeatureIO( -format => 'GFF',
-version => 3
);
## Now read in the fasta file to create the landmarks
my $seqIO =
new Bio::SeqIO( -file => $finished_bacs_repeatmasked,
-format => 'fasta'
);
## Begwin
while(my $seq = $seqIO->next_seq){
## Create a new generic feature to hold the properties of the
## sequence;
my $name = $seq->id;
my $leng = $seq->length;
my $accn;
next unless $accn = $finished{$name};
my $f =
new Bio::SeqFeature::Generic( -seq_id => $name,
-primary => "SGN",
-source => "genomic_clone",
-start => 1,
-end => $leng,
-tag => { ID => $name,
Name => $name,
Dbxref => "GB:$accn",
Ontology_term => "SO:0000040"
}
);
print $gffIO->write_feature($f);
exit;
}
</source>
The script gives me the following error:
Use of uninitialized value in pattern match (m//) at
~/perl5/lib/perl5/Bio/FeatureIO/gff.pm line 107, <FB> line 688.
------------- EXCEPTION: Bio::Root::Exception -------------
MSG: only Bio::SeqFeature::Annotated objects are writeable
STACK: Error::throw
STACK: Bio::Root::Root::throw ~/perl5/lib/perl5/Bio/Root/Root.pm:368
STACK: Bio::FeatureIO::gff::write_feature
~/perl5/lib/perl5/Bio/FeatureIO/gff.pm:272
STACK: ./fasta2gff_landmarks.plx:72
-----------------------------------------------------------
With all due respect to:
* http://www.bioperl.org/wiki/GFF_Refactor and
* http://www.bioperl.org/wiki/GFF_code_audit
I'm a bit stuck.
Any quick fix in the meantime? I realise that using a feature object
is overkill here, but I wanted to learn the 'BioPerl way' of doing
things. Should I drop that approach until the code audit and
refactorization is over, or is this the kind of use-case that can help
with that process?
Thanks for any pointers,
Dan.
P.S. Thanks also to the friendly people on
irc://ircfreenode.net/#bioperl and
irc://irc.freenode.net/#bioinformatics who helped me get this script
together as it is.
More information about the Bioperl-l
mailing list