package Seeder::Index; use 5.006; use warnings; use strict; use Seeder qw(:all); use Carp; use base qw(Exporter); our @EXPORT; our %EXPORT_TAGS = ( 'all' => [ qw( new get_index ) ] ); our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); =head1 NAME Seeder::Index - Index object =head1 VERSION Version 0.01 =cut our $VERSION = '0.01'; =head1 DESCRIPTION This module provides the get_index method. =head1 SYNOPSIS use Seeder::Index; my $index = Seeder::Index->new( seed_width => "6", out_file => "6.index", ); $index -> get_index; =head1 EXPORT None by default =head1 FUNCTIONS =head2 new Title : new Usage : my $index = Seeder::Index->new(%args); Function: constructor for the Seeder::Index object Returns : new Seeder::Index object Args : seed_width # Seed width out_file # Output file =cut sub new { my ( $class, %args ) = @_; my $self; $self->{seed_width} = defined $args{seed_width} ? $args{seed_width} : croak "Please define a seed width!"; $self->{out_file} = defined $args{out_file} ? $args{out_file} : croak "Please define an output file!"; bless( $self, $class ); return $self; } =head2 get_index Title : get_background Usage : $background -> get_background; Function: coordination of the collection of index values Args : none =cut sub get_index { my $self = shift; $self->generate_oligo; $self->lookup_coord; $self->_generate_index; $self->_output_index; } =head2 _generate_index Title : _generate_index Usage : $self->_generate_index; Function: generate an index of neighbors for Hamming distances in the range from 0 to 3 Returns : reference to a 2D array of indices Args : none =cut sub _generate_index { my $self = shift; my @index; for my $oligo_indice ( 0 .. $#{ $self->{oligo_ref} } ) { my @indices; my $generated = $self->generate_hd_index( \@{ $self->{oligo_ref}->[$oligo_indice] } ); for my $depth ( 0 .. 3 ) { push @indices, ( sort { $a <=> $b } @$generated[ $self->{from_ref}->[ $self->{seed_width} - 1 ][$depth] .. $self->{to_ref}->[ $self->{seed_width} - 1 ][$depth] ] ); } push @index, [@indices]; } $self->{index_ref} = \@index; return \@index; } =head2 _output_index Title : _output_index Usage : $self->_output_index; Function: writes index to output file Args : none =cut sub _output_index { my $self = shift; open( OUT, ">>$self->{out_file}" ) or croak "Cannot open $self->{out_file}\n"; for my $oligo_indice ( 0 .. $#{ $self->{index_ref} } ) { print( OUT "@{$self->{index_ref}->[$oligo_indice]}\n" ); } close OUT; } =head1 AUTHOR François Fauteux, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or at L. 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 Seeder You can also look for information at: =over 4 =item * RT: CPAN's request tracker L =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * Search CPAN L =back =head1 ACKNOWLEDGEMENTS This algorithm was developed by François Fauteux, Mathieu Blanchette and Martina Strömvik. We thank the Perl Monks for their support. =head1 COPYRIGHT & LICENSE Copyright 2008 François Fauteux, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; # End of Seeder::Index