The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Bio::ViennaNGS::FeatureIO - Versatile I/O interface for Bio::ViennaNGS feature annotation classes

SYNOPSIS

  use Bio::ViennaNGS::FeatureIO;

  # initialize a FeatureIO object from a Bed6 file
  my $data_bed = Bio::ViennaNGS::FeatureIO->new(
                                               file => "file.bed6",
                                               filetype => 'Bed6',
                                               instanceOf => 'Feature',
                                               base => 0,
                                              );

  # initialize a FeatureIO object from a Bed12 file
  my $data_bed = Bio::ViennaNGS::FeatureIO->new(
                                               file => "file.bed12",
                                               filetype => 'Bed12',
                                               instanceOf => 'Bed',
                                               base => 0,
                                              );

  # initialize a FeatureIO object from a bedGraph file
  my $obj = Bio::ViennaNGS::FeatureIO->new(file       => "file.bg",
                                           filetype   => "BedGraph",
                                           instanceOf => "BedGraph",
                                           base => 0,
                                          );

DESCRIPTION

This module provides an object-oriented interface for easy input/output operations on common feature annotation file formats. It is - by design - a very generic module that stores all annotation data within the $self->data ArrayRef. $self->filetype specifies the file type to be processed. Currently parsing of Bed6, Bed12 and bedGraph files is supported. $self->instanceOf determines the object type of elements held in the $self->data ArrayRef(s).

In case of parsing Bed6 data, $self->instanceOf can either be Feature, FeatureChain or FeatureChainBlock. While the first causes $self->data to hold an ArrayRef to individual Bio::ViennaNGS::Feature objects, the second triggers creation of individual Bio::ViennaNGS::FeatureChain objects (each containing exactly one feature interval, corresponding to individual Bed6 entries). A FeatureChainBlock value to the $self->instanceOf causes $self->data to hold an ArrayRef to a combined Bio::ViennaNGS::FeatureChain containing an entire block of features. In the context of Bed annotation this corresponds to a single Bed12 line (e.g. gene/transcript) that contains all individual Bed6 features (e.g. exons). Evidently, this only makes sense if all Bed6 features originate from the same chromosome and strand.

In case of parsing Bed12 data, currently only Bed is supported for $self->instanceOf, causing $self->data to hold an ArrayRef to Bio::ViennaNGS::Bed (aka Bed12) features. This will be adjusted to Bio::ViennaNGS::FeatureChain in the future.

In case of pasring bedGraph data, $self->instanceOf is ignored and $self->data holds an ArrayRef to individual Bio::ViennaNGS::BedGraph objects.

Bio::ViennaNGS::FeatureIO implements the Bio::ViennaNGS::FeatureBase role, i.e. it is aware of 0-based (default) or 1-based features (aka BED intervals).

METHODS

parse_bedgraph_file
parse_bed6_file.
parse_bed12_file

These methods are used for object construction and should not be called directly.

DEPENDENCIES

Bio::ViennaNGS::Bed
Bio::ViennaNGS::Feature
Bio::ViennaNGS::FeatureChain
Bio::ViennaNGS::BedGraphEntry
File::Slurp
Carp

AUTHORS

Michael T. Wolfinger <michael@wolfinger.eu>

COPYRIGHT AND LICENSE

Copyright (C) 2014-2018 Michael T. Wolfinger <michael@wolfinger.eu>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.0 or, at your option, any later version of Perl 5 you may have available.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.