Bio-RNA-BarMap

 view release on metacpan or  search on metacpan

lib/Bio/RNA/BarMap/Mapping/MinMappingEntry.pm  view on Meta::CPAN

# Bio/RNA/BarMap/Mapping/MinMappingEntry.pm

package Bio::RNA::BarMap::Mapping::MinMappingEntry;
our $VERSION = '0.04';

use 5.012;
use warnings;

use Moose;
use namespace::autoclean;

use Scalar::Util qw( weaken );

use Bio::RNA::BarMap::Mapping::Type;
use Bio::RNA::BarMap::Mapping::Set;


has 'index' => (is => 'ro', required => 1);

has 'to_type' => (
    is => 'rw',
    isa => 'Bio::RNA::BarMap::Mapping::Type',
);

# Ensure object is cleaned after use => use weak refs
has '_from'  => (
    is       => 'ro',
    init_arg => undef,      # use add_from() method to add elements
    default  => sub { Bio::RNA::BarMap::Mapping::Set->new },
);

has 'to' => (
    is          => 'rw',
    weak_ref    => 1,
    predicate   => 'has_to',
    isa         => __PACKAGE__,             # another entry
);

# Always use this method to add 'from' minima. This ensures the refs
# are weakened and no memory leaks arise.
sub add_from {
    my ($self, @from) = @_;
    weaken $_ foreach @from;                # turn into weak references
    $self->_from->insert(@from);
}

sub get_from {
    my ($self) = @_;
    my @from = $self->_from->elements;
    return @from;
}

__PACKAGE__->meta->make_immutable;

1;          # End of Bio::RNA::BarMap::Mapping::MinMappingEntry


__END__

=pod

=encoding UTF-8

=head1 NAME

Bio::RNA::BarMap::Mapping::MinMappingEntry - Store I<BarMap> mappings of a
single minimum.

=head1 SYNOPSIS

    use v5.12;              # for 'say()' and '//' a.k.a. logical defined-or
    use Bio::RNA::BarMap;

    my $entry = Bio::RNA::BarMap::Mapping::MinMappingEntry->new(
        index   => 3,               # of minimum of this entry
        to      => $to_min,         # the mininimum this one is mapped to
    );

    # Query the entry.
    if ($entry->has_to) {           # maps to something
        say 'This minimum maps ',
            $entry->$to_type->is_exact ? 'exactly' : 'approximately',
            ' to minimum ', $entry->to->index;
    }

    $entry->add_from($from_min_1, $from_min_2);     # add mins mapping to self
    say "Minima mapped to this minimum:",
    join q{, }, map {$_->index $entry->get_from();


=head1 DESCRIPTION

Internal class used to store the mapping of a single minimum. Both the forward
direction ("target minimum", C<to()>) and the reverse direction ("source
minima", C<get_from()>) are provided. While the target minimum is unique, but
not necessarily defined (cf. C<has_to()>), there may be zero to many source
minima, and so these are stored in a set internally. Use C<add_from()> to add
to this set.

=head1 METHODS

=head2 Bio::RNA::BarMap::Mapping::MinMappingEntry->new(arg_name => $arg_val, ...)

Constructor of the mapping entry class.

=over

=item Supported arguments:

=over

=item index

Required. Index of the minimum described by this entry.

=item to

Optional. Reference to mapping entry object describing the minimum that this
minimum is mapped to.

=back

=item Non-argument:

=over

=item from

To add source minima (i. e. minima that are mapped to this minimum), use the
method C<add_from()> instead.

=back

=back

=head2 $entry->index

Index of the minimum this entry is representing.

=head2 $entry->to_type

Type of the "to" mapping, either exact or approximate. Object of type
L<Bio::RNA::BarMap::Mapping::Type>.

=head2 $entry->to

Returns the entry this minimum is being mapped to. May be C<undef>.

=head2 $entry->to($to_min_entry)

Sets the C<to> attribute to point to C<$to_min_entry>.

=head2 $entry->add_from(@from_entries)

Adds entries to the set of source minima, i. e. those that are mapped to this
minimum. This method makes sure that the stored references are properly
weakened and no memory leaks arise.

=head2 $entry->get_from

Returns the entries of minima that are mapped to this minimum, as stored in
the source minima set.

=head1 AUTHOR

Felix Kuehnl, C<< <felix at bioinf.uni-leipzig.de> >>


=head1 BUGS

Please report any bugs or feature requests by raising an issue at
L<https://github.com/xileF1337/Bio-RNA-BarMap/issues>.

You can also do so by mailing to C<bug-bio-rna-barmap at rt.cpan.org>,
or through the web interface at
L<https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Bio-RNA-BarMap>.  I will be
notified, and then you'll automatically be notified of progress on your bug as
I make changes.


=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Bio::RNA::BarMap


You can also look for information at the official BarMap website:

L<https://www.tbi.univie.ac.at/RNA/bar_map/>


=over 4

=item * Github: the official repository

L<https://github.com/xileF1337/Bio-RNA-BarMap>

=item * RT: CPAN's request tracker (report bugs here)

L<https://rt.cpan.org/NoAuth/Bugs.html?Dist=Bio-RNA-BarMap>

=item * AnnoCPAN: Annotated CPAN documentation

L<http://annocpan.org/dist/Bio-RNA-BarMap>

=item * CPAN Ratings

L<https://cpanratings.perl.org/d/Bio-RNA-BarMap>

=item * Search CPAN

L<https://metacpan.org/release/Bio-RNA-BarMap>

=back




( run in 2.540 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )