Bio::SeqIO
swiss
Summary
Bio::SeqIO::swiss - Swissprot sequence input/output stream
Package variables
No package variables defined.
Included modules
Inherit
Synopsis
It is probably best not to use this object directly, but
rather go through the SeqIO handler system. Go:
$stream = Bio::SeqIO->new(-file => $filename, -format => 'swiss');
while ( my $seq = $stream->next_seq() ) {
# do something with $seq
}
Description
This object can transform Bio::Seq objects to and from swissprot flat
file databases.
There is alot of flexibility here about how to dump things which I need
to document fully.
_show_dna()
(output only) shows the dna or not
_post_sort()
(output only) provides a sorting func which is applied to the FTHelpers
before printing
_id_generation_func()
This is function which is called as
print "ID ", $func($seq), "\n";
To generate the ID line. If it is not there, it generates a sensible ID
line using a number of tools.
Methods
Methods description
Title : next_seq
Usage : $seq = $stream->next_seq()
Function: returns the next sequence in the stream
Returns : Bio::Seq object
Args : |
Title : write_seq
Usage : $stream->write_seq($seq)
Function: writes the $seq object (must be seq) to the stream
Returns : 1 for success and 0 for error
Args : Bio::Seq |
Title : _generateCRCTable
Usage :
Function:
Example :
Returns :
Args : |
Title : _crc32
Usage :
Function:
Example :
Returns :
Args : |
Title : _crc64
Usage :
Function:
Example :
Returns :
Args : |
Title : _print_swissprot_FTHelper
Usage :
Function:
Example :
Returns :
Args : |
Title : _read_swissprot_References
Usage :
Function: Reads references from swissprot format. Internal function really
Example :
Returns :
Args : |
Title : _read_swissprot_Species
Usage :
Function: Reads the swissprot Organism species and classification
lines.
Example :
Returns : A Bio::Species object
Args : |
Title : _read_FTHelper_swissprot
Usage : _read_FTHelper_swissprot(\$buffer)
Function: reads the next FT key line
Example :
Returns : Bio::SeqIO::FTHelper object
Args : filehandle and reference to a scalar |
Title : _write_line_swissprot
Usage :
Function: internal function
Example :
Returns :
Args : |
Title : _write_line_swissprot_regex
Usage :
Function: internal function for writing lines of specified
length, with different first and the next line
left hand headers and split at specific points in the
text
Example :
Returns : nothing
Args : file handle, first header, second header, text-line, regex for line breaks, total line length |
Title : _post_sort
Usage : $obj->_post_sort($newval)
Function:
Returns : value of _post_sort
Args : newvalue (optional) |
Title : _show_dna
Usage : $obj->_show_dna($newval)
Function:
Returns : value of _show_dna
Args : newvalue (optional) |
Title : _id_generation_func
Usage : $obj->_id_generation_func($newval)
Function:
Returns : value of _id_generation_func
Args : newvalue (optional) |
Title : _ac_generation_func
Usage : $obj->_ac_generation_func($newval)
Function:
Returns : value of _ac_generation_func
Args : newvalue (optional) |
Title : _sv_generation_func
Usage : $obj->_sv_generation_func($newval)
Function:
Returns : value of _sv_generation_func
Args : newvalue (optional) |
Title : _kw_generation_func
Usage : $obj->_kw_generation_func($newval)
Function:
Returns : value of _kw_generation_func
Args : newvalue (optional) |
Methods code
sub _initialize
{ my($self,@args) = @_;
$self->SUPER::_initialize(@args);
$self->{'_func_ftunit_hash'} = {};
$self->_show_dna(1);
} |
sub next_seq
{ my ($self,@args) = @_;
my ($pseq,$c,$line,$name,$desc,$acc,$seqc,$mol,$div,
$date,$comment,@date_arr, @sec);
my ($keywords,$acc_string);
my $seq = Bio::Seq::RichSeq->new(-verbose =>$self->verbose());
$line = $self->_readline;
if( !defined $line) {
return undef; }
if( $line =~ /^\s+$/ ) {
while( defined ($line = $self->_readline) ) {
$line =~ /\S/ && last;
}
}
if( !defined $line ) {
return undef; }
$line =~ /^ID\s+([^\s_]+)(_([^\s_]+))?\s+([^\s;]+);\s+([^\s;]+);/
|| $self->throw("swissprot stream with no ID. Not swissprot in my book");
if( $3 ) {
$name = "$1$2";
$seq->division($3);
} else {
$name = $1;
$seq->division('UNK');
}
$seq->primary_id($1);
$seq->alphabet('protein');
$seq->display_id($name);
my $buffer = $line;
BEFORE_FEATURE_TABLE :
until( !defined ($buffer) ) {
$_ = $buffer;
last if /^FT/;
last if /^SQ/;
if (/^DE\s+(\S.*\S)/) {
$desc .= $desc ? " $1" : $1;
}
elsif(/^GN\s+([^\.]+)/) {
s/[\. ]*$//; if (/^GN\s+(.*)/) {
foreach my $gn (split(/ OR /,$1)) {
my $sim = Bio::Annotation::SimpleValue->new();
$sim->value($gn);
$seq->annotation->add_Annotation('gene_name',$sim);
}
}
}
elsif( /^AC\s+(.+)/) {
$acc_string .= $acc_string ? " $1" : $1;
}
elsif( /^SV\s+(\S+);?/ ) {
my $sv = $1;
$sv =~ s/\;//;
$seq->seq_version($sv);
}
elsif( /^DT\s+(.*)/ ) {
my $date = $1;
$date =~ s/\;//;
$date =~ s/\s+$//;
$seq->add_date($date);
}
elsif (/^O[SCG]/) {
my $species = $self->_read_swissprot_Species(\$buffer);
$seq->species( $species );
next;
}
elsif (/^R/) {
my $refs = $self->_read_swissprot_References(\$buffer);
foreach my $r (@$refs) {
$seq->annotation->add_Annotation('reference',$r);
}
next;
}
elsif (/^CC\s{3}(.*)/) {
$comment .= $1;
$comment .= "\n";
while (defined ($buffer = $self->_readline)) {
if ($buffer =~ /^CC\s{3}(.*)/) {
$comment .= $1;
$comment .= "\n";
}
else {
last;
}
}
my $commobj = Bio::Annotation::Comment->new();
$commobj->text($comment);
$seq->annotation->add_Annotation('comment',$commobj);
$comment = "";
next;
}
elsif (/^DR\s+(\S+)\;\s+(\S+)\;\s+(\S+)[\;\.](.*)$/) {
my $dblinkobj = Bio::Annotation::DBLink->new();
$dblinkobj->database($1);
$dblinkobj->primary_id($2);
$dblinkobj->optional_id($3);
my $comment = $4;
if(length($comment) > 0) {
if( $comment =~ /^\s*(\S+)\./ ) {
$dblinkobj->comment($1);
} else {
$dblinkobj->comment($comment);
}
}
$seq->annotation->add_Annotation('dblink',$dblinkobj);
}
elsif( /^KW\s+(.*)$/ ) {
$keywords .= $keywords ? " $1" : $1;
}
$buffer = $self->_readline;
}
$buffer = $_;
FEATURE_TABLE :
while (defined ($buffer) && ($buffer =~ /^FT/)) {
my $ftunit = $self->_read_FTHelper_swissprot(\$buffer);
if($ftunit) {
$ftunit->_generic_seqfeature($seq, "SwissProt");
} else {
$self->warn("failed to parse feature table line for seq " .
$seq->display_id());
}
}
if( $buffer !~ /^SQ/ ) {
while( defined($_ = $self->_readline) ) {
/^SQ/ && last;
}
}
$seqc = "";
while( defined ($_ = $self->_readline) ) {
/^\/\// && last;
$_ = uc($_);
s/[^A-Za-z]//g;
$seqc .= $_;
}
$seq->seq($seqc);
$seq->desc($desc);
$seq->keywords($keywords);
$acc_string =~ s/\;\s*/ /g;
( $acc, @sec ) = split " ",$acc_string;
$seq->accession_number($acc);
foreach my $s (@sec) {
$seq->add_secondary_accession($s);
}
return $seq;} |
sub write_seq
{ my ($self,$seq) = @_;
if( !defined $seq ) {
$self->throw("Attempting to write with no seq!");
}
if( ! ref $seq || ! $seq->isa('Bio::SeqI') ) {
$self->warn(" $seq is not a SeqI compliant module. Attempting to dump, but may fail!");
}
my $i;
my $str = $seq->seq;
my $mol;
my $div;
my $len = $seq->length();
if ( !$seq->can('division') || ! defined ($div = $seq->division()) ) {
$div = 'UNK';
}
if( ! $seq->can('alphabet') || ! defined ($mol = $seq->alphabet) ) {
$mol = 'XXX';
}
my $temp_line;
if( $self->_id_generation_func ) {
$temp_line = &{$self->_id_generation_func}($seq);
} else {
$mol =~ s/protein/PRT/;
$temp_line = sprintf ("%10s STANDARD; %3s; %d AA.",
$seq->display_id(), $mol, $len);
}
$self->_print( "ID $temp_line\n");
local($^W) = 0;
if( $self->_ac_generation_func ) {
$temp_line = &{$self->_ac_generation_func}($seq);
$self->_print( "AC $temp_line\n");
} else {
if ($seq->can('accession_number') ) {
$self->_print("AC ",$seq->accession_number,";");
if ($seq->can('get_secondary_accessions') ) {
foreach my $sacc ($seq->get_secondary_accessions) {
$self->_print(" ",$sacc,";");
}
$self->_print("\n");
}
else {
$self->_print("\n");
}
}
}
if( $seq->can('get_dates') ) {
foreach my $dt ( $seq->get_dates() ) {
$self->_write_line_swissprot_regex("DT ","DT ",
$dt,"\\s\+\|\$",80);
}
}
$self->_write_line_swissprot_regex("DE ","DE ",$seq->desc(),"\\s\+\|\$",80);
if ($seq->annotation->can('get_Annotations') &&
(my @genes = $seq->annotation->get_Annotations('gene_name') ) ) {
$self->_print("GN ",join(' OR ', map { $_->value } @genes),".\n");
}
if ($seq->can('species') && (my $spec = $seq->species)) {
my($species, @class) = $spec->classification();
my $genus = $class[0];
my $OS = "$genus $species";
if (my $ssp = $spec->sub_species) {
$OS .= " $ssp";
}
if (my $common = $spec->common_name) {
$OS .= " ($common).";
}
if ($class[$#class] =~ /viruses/i) { $OS = $spec->common_name; unshift @class, $species;
}
$self->_print( "OS $OS\n");
my $OC = join('; ', reverse(@class)) .'.';
$self->_write_line_swissprot_regex("OC ","OC ",$OC,"\;\|\$ ",80);
if ($spec->organelle) {
$self->_write_line_swissprot_regex("OG ","OG ",$spec->organelle,"\;\|\$ ",80);
}
if ($spec->ncbi_taxid) {
$self->_print("OX NCBI_TaxID=".$spec->ncbi_taxid.";\n");
}
}
my $t = 1;
foreach my $ref ( $seq->annotation->get_Annotations('reference') ) {
$self->_print( "RN [$t]\n");
if ($ref->rp) {
$self->_write_line_swissprot_regex("RP ","RP ",$ref->rp,
"\\s\+\|\$",80);
}
if ($ref->comment) {
$self->_write_line_swissprot_regex("RC ","RC ",$ref->comment,
"\\s\+\|\$",80);
}
if ($ref->medline) {
if ($ref->pubmed) {
$self->_write_line_swissprot_regex("RX ","RX ",
"MEDLINE=".$ref->medline.
"; PubMed=".$ref->pubmed.";",
"\\s\+\|\$",80);
} else {
$self->_write_line_swissprot_regex("RX MEDLINE; ","RX MEDLINE; ",
$ref->medline.".","\\s\+\|\$",80);
}
}
my $author = $ref->authors .';' if($ref->authors);
my $title = $ref->title .';' if( $ref->title);
$self->_write_line_swissprot_regex("RA ","RA ",$author,"\\s\+\|\$",80);
$self->_write_line_swissprot_regex("RT ","RT ",$title,"\\s\+\|\$",80);
$self->_write_line_swissprot_regex("RL ","RL ",$ref->location,"\\s\+\|\$",80);
$t++;
}
foreach my $comment ( $seq->annotation->get_Annotations('comment') ) {
foreach my $cline (split ("\n", $comment->text)) {
while (length $cline > 74) {
$self->_print("CC ",(substr $cline,0,74),"\n");
$cline = substr $cline,74;
}
$self->_print("CC ",$cline,"\n");
}
}
foreach my $dblink ( $seq->annotation->get_Annotations('dblink') )
{
if (defined($dblink->comment)&&($dblink->comment)) {
$self->_print("DR ",$dblink->database,"; ",$dblink->primary_id,"; ",
$dblink->optional_id,"; ",$dblink->comment,".\n");
} elsif($dblink->optional_id) {
$self->_print("DR ",$dblink->database,"; ",$dblink->primary_id,"; ",
$dblink->optional_id,".\n");
}
else {
$self->_print("DR ",$dblink->database,"; ",$dblink->primary_id,"; ",
"-.\n");
}
}
if( $self->_kw_generation_func ) {
$temp_line = &{$self->_kw_generation_func}($seq);
$self->_print( "KW $temp_line\n");
} else {
if( $seq->can('keywords') ) {
$self->_write_line_swissprot_regex("KW ","KW ",
$seq->keywords,"\\s\+\|\$",80);
}
}
my @feats = $seq->top_SeqFeatures;
if ($feats[0]) {
if( defined $self->_post_sort ) {
my $post_sort_func = $self->_post_sort();
my @fth;
my @feats = $seq->top_SeqFeatures;
foreach my $sf ( $seq->top_SeqFeatures ) {
push(@fth,Bio::SeqIO::FTHelper::from_SeqFeature($sf,$seq));
}
@fth = sort { &$post_sort_func($a,$b) } @fth;
foreach my $fth ( @fth ) {
$self->_print_swissprot_FTHelper($fth);
}
} else {
foreach my $sf ( $seq->top_SeqFeatures ) {
my @fth = Bio::SeqIO::FTHelper::from_SeqFeature($sf,$seq);
foreach my $fth ( @fth ) {
if( ! $fth->isa('Bio::SeqIO::FTHelper') ) {
$sf->throw("Cannot process FTHelper... $fth");
}
$self->_print_swissprot_FTHelper($fth);
}
}
}
if( $self->_show_dna() == 0 ) {
return;
}
}
my $mw = ${Bio::Tools::SeqStats->get_mol_wt($seq->primary_seq)}[0];
my $crc64 = $self->_crc64(\$str);
$self->_print( sprintf("SQ SEQUENCE %4d AA; %d MW; %16s CRC64;\n",
$len,$mw,$crc64));
$self->_print( " ");
my $linepos;
for ($i = 0; $i < length($str); $i += 10) {
$self->_print( substr($str,$i,10), " ");
$linepos += 11;
if( ($i+10)%60 == 0 && (($i+10) < length($str))) {
$self->_print( "\n ");
}
}
$self->_print( "\n//\n");
return 1;} |
sub _generateCRCTable
{ my $poly = 0xEDB88320;
my ($self) = shift;
$self->{'_crcTable'} = [];
foreach my $i (0..255) {
my $crc = $i;
for (my $j=8; $j > 0; $j--) {
if ($crc & 1) {
$crc = ($crc >> 1) ^ $poly;
}
else {
$crc >>= 1;
}
}
${$self->{'_crcTable'}}[$i] = $crc;
} } |
sub _crc32
{ my( $self, $str ) = @_;
$self->throw("Argument to crc32() must be ref to scalar")
unless ref($str) eq 'SCALAR';
$self->_generateCRCTable() unless exists $self->{'_crcTable'};
my $len = length($$str);
my $crc = 0xFFFFFFFF;
for (my $i = 0; $i < $len; $i++) {
my $int = ord uc substr $$str, $i, 1;
$crc = (($crc >> 8) & 0x00FFFFFF) ^
${$self->{'_crcTable'}}[ ($crc ^ $int) & 0xFF ];
}
return $crc;} |
sub _crc64
{ my ($self, $sequence) = @_;
my $POLY64REVh = 0xd8000000;
my @CRCTableh = 256;
my @CRCTablel = 256;
my $initialized;
my $seq = $$sequence;
my $crcl = 0;
my $crch = 0;
if (!$initialized) {
$initialized = 1;
for (my $i=0; $i<256; $i++) {
my $partl = $i;
my $parth = 0;
for (my $j=0; $j<8; $j++) {
my $rflag = $partl & 1;
$partl >>= 1;
$partl |= (1 << 31) if $parth & 1;
$parth >>= 1;
$parth ^= $POLY64REVh if $rflag;
}
$CRCTableh[$i] = $parth;
$CRCTablel[$i] = $partl;
}
}
foreach (split '', $seq) {
my $shr = ($crch & 0xFF) << 24 my $temp1h = $crch >> 8; my $temp1l = ($crcl >> 8) | $shr; my $tableindex = ($crcl ^ (unpack "C", $_)) & 0xFF; $crch = $temp1h ^ $CRCTableh[$tableindex]; $crcl = $temp1l ^ $CRCTablel[$tableindex]; } my $crc64 = sprintf("%08X%08X", $crch, $crcl); return $crc64;
} |
sub _print_swissprot_FTHelper
{ my ($self,$fth,$always_quote) = @_;
$always_quote ||= 0;
my ($start,$end) = ('?', '?');
if( ! ref $fth || ! $fth->isa('Bio::SeqIO::FTHelper') ) {
$fth->warn("$fth is not a FTHelper class. ".
"Attempting to print, but there could be tears!");
}
if( $fth->loc =~ /(\?|\d+)?\.\.(\?|\d+)?/ ) {
$start = $1 if defined $1;
$end = $2 if defined $2;
} else {
$start = $end = $fth->loc;
}
my $desc = "";
$desc = @{$fth->field->{"description"}}[0]."."
if exists $fth->field->{"description"};
$self->_write_line_swissprot_regex(sprintf("FT %-8s %6s %6s ",
substr($fth->key,0,8),
$start,$end),
"FT ",
$desc,'\s+|$',80);} |
sub _read_swissprot_References
{ my ($self,$buffer) = @_;
my (@refs);
my ($b1, $b2, $rp, $title, $loc, $au, $med, $com, $pubmed);
if ($$buffer !~ /^RP/) {
$$buffer = $self->_readline;
}
if( !defined $$buffer ) { return undef; }
if( $$buffer =~ /^RP/ ) {
if ($$buffer =~ /^RP (SEQUENCE OF (\d+)-(\d+).*)/) {
$rp=$1;
$b1=$2;
$b2=$3;
}
elsif ($$buffer =~ /^RP (.*)/) {
$rp=$1;
}
}
while( defined ($_ = $self->_readline) ) {
/^RN/ && last; /^[^R]/ && last; /^RX MEDLINE;\s+(\d+)/ && do {$med=$1};
/^RX MEDLINE=(\d+);\s+PubMed=(\d+);/ && do {$med=$1;$pubmed=$2};
/^RA (.*)/ && do { $au .= $au ? " $1" : $1; next;};
/^RT (.*)/ && do { $title .= $title ? " $1" : $1; next;};
/^RL (.*)/ && do { $loc .= $loc ? " $1" : $1; next;};
/^RC (.*)/ && do { $com .= $com ? " $1" : $1; next;};
}
my $ref = new Bio::Annotation::Reference;
$au =~ s/;\s*$//g;
if( defined $title ) {
$title =~ s/;\s*$//g;
}
$ref->start($b1);
$ref->end($b2);
$ref->authors($au);
$ref->title($title);
$ref->location($loc);
$ref->medline($med);
$ref->pubmed($pubmed) if (defined $pubmed);
$ref->comment($com);
$ref->rp($rp);
push(@refs,$ref);
$$buffer = $_;
return\@ refs;} |
sub _read_swissprot_Species
{ my( $self, $buffer ) = @_;
my $org;
$_ = $$buffer;
my( $sub_species, $species, $genus, $common, @class, $osline, $ncbi_taxid );
while (defined( $_ ||= $self->_readline )) {
if (/^OS\s+((\S+)(?:\s+([^\(]\S*))?(?:\s+([^\(]\S*))?(?:\s+\((.*)\))?.*)/) {
$osline = $1;
$genus = $2;
if ($3) {
$species = $3;
$species =~ s/\.$//;
} else {
$species = "sp.";
}
$sub_species = $4 if $4;
$common = $5 if $5;
}
elsif (s/^OC\s+//) {
push(@class, split /[\;\.]\s*/);
if ($class[0] =~ /viruses/i) { $common = $osline; }
}
elsif (/^OG\s+(.*)/) {
$org = $1;
}
elsif (/^OX\s+(.*)\;/) {
my $taxstring = $1;
if ($taxstring =~ /NCBI_TaxID=(.*)/) {
$ncbi_taxid = $1;
}
else {
$self->throw("$taxstring doesn't look like NCBI_TaxID");
}
}
else {
last;
}
$_ = undef; }
$$buffer = $_;
return if $genus =~ /^(Unknown|None)$/i;
if ($class[0] !~ /viruses/i) { if ($class[$#class] eq $genus) {
push( @class, $species );
} else {
push( @class, $genus, $species );
}
}
@class = reverse @class;
my $make = Bio::Species->new();
$make->classification( @class );
$make->common_name( $common ) if $common;
$make->sub_species( $sub_species ) if $sub_species;
$make->organelle ( $org ) if $org;
$make->ncbi_taxid ( $ncbi_taxid ) if $ncbi_taxid;
return $make;} |
sub _read_FTHelper_swissprot
{ my ($self,$buffer) = @_;
my ($key, $loc, $desc, );
if ($$buffer =~ /^FT (\w+)\s+([\d\?\<]+)\s+([\d\?\>]+)\s*(.*)$/) {
$key = $1;
my $loc1 = $2;
my $loc2 = $3;
$loc = "$loc1..$loc2";
if($4 && (length($4) > 0)) {
$desc = $4;
chomp($desc);
} else {
$desc = "";
}
while (defined($_ = $self->_readline) && /^FT\s{20,}(\S.*)$/) {
$desc .= $1;
chomp($desc);
}
$desc =~ s/\.$//;
} else {
$self->warn("No feature key in putative feature table line: $_");
return;
}
$$buffer = $_;
my $out = new Bio::SeqIO::FTHelper(-verbose => $self->verbose());
$out->key($key);
$out->loc($loc);
if($desc && (length($desc) > 0)) {
$out->field->{"description"} ||= [];
push(@{$out->field->{"description"}}, $desc);
}
return $out; } |
sub _write_line_swissprot
{ my ($self,$pre1,$pre2,$line,$length) = @_;
$length || die "Miscalled write_line_swissprot without length. Programming error!";
my $subl = $length - length $pre2;
my $linel = length $line;
my $i;
my $sub = substr($line,0,$length - length $pre1);
$self->_print( "$pre1$sub\n");
for($i= ($length - length $pre1);$i < $linel;) {
$sub = substr($line,$i,($subl));
$self->_print( "$pre2$sub\n");
$i += $subl;
}} |
sub _write_line_swissprot_regex
{ my ($self,$pre1,$pre2,$line,$regex,$length) = @_;
$length || die "Miscalled write_line_swissprot without length. Programming error!";
if( length $pre1 != length $pre2 ) {
print STDERR "len 1 is ", length $pre1, " len 2 is ", length $pre2, "\n";
die "Programming error - cannot called write_line_swissprot_regex with different length\n pre1 ($pre1) and\n pre2 ($pre2) tags!";
}
my $subl = $length - (length $pre1) -1 ;
my @lines;
while($line =~ m/(.{1,$subl})($regex)/g) {
push(@lines, $1.$2);
}
my $s = shift @lines;
$self->_print( "$pre1$s\n");
foreach my $s ( @lines ) {
$self->_print( "$pre2$s\n");
} } |
sub _post_sort
{ my $obj = shift;
if( @_ ) {
my $value = shift;
$obj->{'_post_sort'} = $value;
}
return $obj->{'_post_sort'};} |
sub _show_dna
{ my $obj = shift;
if( @_ ) {
my $value = shift;
$obj->{'_show_dna'} = $value;
}
return $obj->{'_show_dna'};} |
sub _id_generation_func
{ my $obj = shift;
if( @_ ) {
my $value = shift;
$obj->{'_id_generation_func'} = $value;
}
return $obj->{'_id_generation_func'};} |
sub _ac_generation_func
{ my $obj = shift;
if( @_ ) {
my $value = shift;
$obj->{'_ac_generation_func'} = $value;
}
return $obj->{'_ac_generation_func'};} |
sub _sv_generation_func
{ my $obj = shift;
if( @_ ) {
my $value = shift;
$obj->{'_sv_generation_func'} = $value;
}
return $obj->{'_sv_generation_func'};} |
sub _kw_generation_func
{ my $obj = shift;
if( @_ ) {
my $value = shift;
$obj->{'_kw_generation_func'} = $value;
}
return $obj->{'_kw_generation_func'};} |
General documentation
User feedback is an integral part of the evolution of this
and other Bioperl modules. Send your comments and suggestions preferably
to one of the Bioperl mailing lists.
Your participation is much appreciated.
bioperl-l@bioperl.org - General discussion
http://bio.perl.org/MailList.html - About the mailing lists
Report bugs to the Bioperl bug tracking system to help us keep track
the bugs and their resolution.
Bug reports can be submitted via email or the web:
bioperl-bugs@bio.perl.org
http://bio.perl.org/bioperl-bugs/
The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
Title : _filehandle
Usage : $obj->_filehandle($newval)
Function:
Example :
Returns : value of _filehandle
Args : newvalue (optional)