package PGF::Newbler::PairNewblerReads; =head1 NAME PGF::Newbler::PairNewblerReads - pair reads from Newbler assembly. =head1 SYNOPSIS use PGF::Newbler::PairNewblerReads; my $objPairReads = PGF::Newbler::PairNewblerReads->new(); $objPairReads->addread("FE898RP06GYE5O_right.pr148"); $objPairReads->addread("FE898RP06GYE5O_left.pr148"); $objPairReads->addread("FE898RP06GYE5O_left.pr150"); my @readpairs = $obj->getReadPair("FE898RP06GYE5O_right.pr148"); # @readpairs contain: # [0] = FE898RP06GYE5O_left.pr148 # [1] = FE898RP06GYE5O_left.pr150 =head1 DESCRIPTION This module allows you to pair up Newbler reads whereby the pairing is based on _left or _right word in the read name. =head1 AUTHOR(s) Stephan Trong =head1 HISTORY =over =item * Stephan Trong 10/13/2008 Creation =back =cut #============================================================================# use strict; use Carp; use Carp qw(cluck); my $VERSION = 1.00; sub new { my ($class) = @_; my $self={}; bless $self, $class; return $self; } sub addRead { my $self = shift; my $readname = shift; if ( my $clonename = _getCloneName($readname) ) { push @{$self->{_clone}{$clonename}}, $readname; } else { $self->{_unpaired}{$readname} = 1; } } sub _getCloneName { my $readname = shift; my $clonename = ''; if ( $readname =~ /^([^\_]+)\_[left|right]/ ) { $clonename = $1; } return $clonename; } sub getReadPair { my $self = shift; my $readname = shift; my $clonename = _getCloneName($readname); my @readpairs = (); if ( $clonename && $readname =~ /\_(left|right)/ ) { my $dir = $1 eq 'left' ? 'right':'left'; @readpairs = grep /\_$dir/, @{$self->{_clone}{$clonename}}; } if ( wantarray ) { return @readpairs; } elsif ( @readpairs ) { return $readpairs[0]; } else { return ''; } } #============================================================================# 1;