1 # BioPerl module for Bio::SeqIO::nexml
3 # Please direct questions and support issues to <bioperl-l@bioperl.org>
5 # Cared for by Chase Miller <chmille4@gmail.com>
7 # Copyright Chase Miller
9 # You may distribute this module under the same terms as perl itself
11 # May, 2009 Largely written by Chase Miller
13 # POD documentation - main docs before the code
17 Bio::SeqIO::nexml - NeXML sequence input/output stream
21 Do not use this module directly. Use it via the Bio::SeqIO class.
25 This object can transform Bio::Seq objects to and from NeXML format.
26 For more information on the NeXML standard, visit L<http://www.nexml.org>.
32 User feedback is an integral part of the evolution of this and other
33 Bioperl modules. Send your comments and suggestions preferably to one
34 of the Bioperl mailing lists. Your participation is much appreciated.
36 bioperl-l@bioperl.org - General discussion
37 http://bioperl.org/wiki/Mailing_lists - About the mailing lists
41 Please direct usage questions or support issues to the mailing list:
43 I<bioperl-l@bioperl.org>
45 rather than to the module maintainer directly. Many experienced and
46 reponsive experts will be able look at the problem and quickly
47 address it. Please include a thorough description of the problem
48 with code and data examples if at all possible.
52 Report bugs to the Bioperl bug tracking system to help us keep track
53 the bugs and their resolution. Bug reports can be submitted via the
56 https://redmine.open-bio.org/projects/bioperl/
58 =head1 AUTHORS - Chase Miller
60 Email: chmille4@gmail.com
64 Mark Jensen, maj@fortinbras.us
65 Rutger Vos, rutgeraldo@gmail.com
69 The rest of the documentation details each of the object
70 methods. Internal methods are usually preceded with a _
74 # Let the code begin...
76 package Bio
::SeqIO
::nexml
;
82 use Bio
::Seq
::SeqFactory
;
83 use Bio
::Nexml
::Factory
;
84 use Bio
::Phylo
::IO qw
(parse unparse
);
86 use base
qw(Bio::SeqIO);
90 $self->SUPER::_initialize
(@args);
91 $self->{_doc
} = undef;
97 Usage : $seq = $stream->next_seq()
98 Function: returns the next sequence in the stream
99 Returns : L<Bio::Seq> object
106 unless ( $self->{'_parsed'} ) {
107 #use a parse function to load all the sequence objects found in the nexml file at once
110 return $self->{'_seqs'}->[ $self->{'_seqiter'}++ ];
116 Usage : $seqio->rewind
117 Function: Resets the stream
126 $self->{'_seqiter'} = 0;
133 Function: Returns the biophylo nexml document object
134 Returns : Bio::Phylo::Project
135 Args : none or Bio::Phylo::Project object
140 my ($obj,$value) = @_;
141 if( defined $value) {
142 $obj->{'_doc'} = $value;
144 return $obj->{'_doc'};
149 my $fac = Bio
::Nexml
::Factory
->new();
151 $self->{'_parsed'} = 1;
152 $self->{'_seqiter'} = 0;
154 $self->doc(Bio
::Phylo
::IO
->parse(
155 '-file' => $self->{'_file'},
156 '-format' => 'nexml',
162 $self->{'_seqs'} = $fac->create_bperl_seq($self);
165 unless(@
{ $self->{'_seqs'} } == 0)
167 # self->debug("no seqs in $self->{_file}");
177 Usage : $stream->write_seq(@seq)
178 Function: Writes the $seq object into the stream
179 Returns : 1 for success and 0 for error
180 Args : Array of 1 or more L<Bio::PrimarySeqI> objects
186 my ($self, $bp_seq) = @_;
188 my $fac = Bio
::Nexml
::Factory
->new();
189 my $taxa = $fac->create_bphylo_taxa($bp_seq);
190 my ($seq) = $fac->create_bphylo_seq($bp_seq, $taxa);
192 my $matrix = Bio
::Phylo
::Factory
->create_matrix('-type' => $seq->get_type());
193 $matrix->insert($seq);
194 $matrix->set_taxa($taxa);
197 my $feat = ($bp_seq->get_SeqFeatures())[0];
198 $matrix->set_name($feat->get_tag_values('matrix_label'));
200 $self->doc(Bio
::Phylo
::Factory
->create_project());
202 $self->doc->insert($matrix);
204 my $ret = $self->_print($self->doc->to_xml());