]> git.donarmstrong.com Git - biopieces.git/commitdiff
added SAM.pm
authormartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Mon, 28 Sep 2009 16:35:07 +0000 (16:35 +0000)
committermartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Mon, 28 Sep 2009 16:35:07 +0000 (16:35 +0000)
git-svn-id: http://biopieces.googlecode.com/svn/trunk@686 74ccb610-7750-0410-82ae-013aeee3265d

code_perl/Maasha/SAM.pm [new file with mode: 0644]

diff --git a/code_perl/Maasha/SAM.pm b/code_perl/Maasha/SAM.pm
new file mode 100644 (file)
index 0000000..c900867
--- /dev/null
@@ -0,0 +1,127 @@
+package Maasha::SAM;
+
+# Copyright (C) 2009 Martin A. Hansen.
+
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+
+# 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.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# http://www.gnu.org/copyleft/gpl.html
+
+
+# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DESCRIPTION <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+
+# Routines to handle SAM and BAM format.
+# http://samtools.sourceforge.net/
+
+
+# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+
+use warnings;
+use strict;
+use Maasha::Common;
+use Data::Dumper;
+
+use vars qw ( @ISA @EXPORT );
+
+@ISA = qw( Exporter );
+
+use constant {
+    QNAME => 0,
+    FLAG  => 1,
+    RNAME => 2,
+    POS   => 3,
+    MAPQ  => 4,
+    CIGAR => 5,
+    MRNM  => 6,
+    MPOS  => 7,
+    ISIZE => 8,
+    SEQ   => 9,
+    QUAL  => 10,
+    TAG   => 11,
+    VTYPE => 12,
+    VALUE => 13,
+};
+
+
+# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+
+sub get_entry
+{
+    # Martin A. Hansen, September 2009.
+
+    # Parses a SAM entry from a given file handle.
+
+    my ( $fh,   # file handle
+       ) = @_;
+
+    # Returns a list.
+
+    my ( $line, @fields );
+
+    while ( $line = <$fh> )
+    {
+        chomp $line;
+
+        next if substr( $line, 0, 1 ) eq '@';
+
+        @fields = split "\t", $line;
+
+        return wantarray ? @fields : \@fields;
+    }
+
+    return;
+}
+
+
+sub sam2biopiece
+{
+    # Martin A. Hansen, September 2009.
+
+    # Converts a SAM entry to a Biopiece record.
+
+    my ( $entry,   # SAM entry
+       ) = @_;
+    
+    # Returns a hashref.
+
+    my ( $record );
+
+    $record->{ 'REC_TYPE' } = 'SAM';
+    $record->{ 'Q_ID' }     = $entry->[ QNAME ];
+    $record->{ 'FLAG' }     = $entry->[ FLAG ];
+    $record->{ 'S_ID' }     = $entry->[ RNAME ];
+    $record->{ 'S_BEG' }    = $entry->[ POS ];
+    $record->{ 'MAPQ' }     = $entry->[ MAPQ ];
+    $record->{ 'CIGAR' }    = $entry->[ CIGAR ];
+    $record->{ 'MRNM' }     = $entry->[ MRNM ];
+    $record->{ 'S_BEG2' }   = $entry->[ MPOS ];
+    $record->{ 'ISIZE' }    = $entry->[ ISIZE ];
+    $record->{ 'SEQ' }      = $entry->[ SEQ ];
+    $record->{ 'SCORES' }   = $entry->[ QUAL ];
+
+    $record->{ 'S_BEG' } -= 1 if $record->{ 'S_BEG' }  != 0;
+    $record->{ 'S_BEG' } -= 1 if $record->{ 'S_BEG2' } != 0;
+
+    return wantarray ? %{ $record } : $record;
+}
+
+
+
+
+# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+1;