$record->{ 'ISIZE' } = $entry->[ ISIZE ];
$record->{ 'SEQ' } = $entry->[ SEQ ];
$record->{ 'SCORES' } = $entry->[ QUAL ];
+ $record->{ 'SCORES' } =~ s/(.)/chr( ( ord( $1 ) - 33 ) + 64 )/ge; # convert phred-33 to phred-64 scores
$record->{ 'SCORE' } = sprintf( "%.2f", Maasha::Fastq::phred_str_mean( $entry->[ QUAL ] ) );
$record->{ 'S_BEG' } -= 1 if $record->{ 'S_BEG' } != 0;
$record->{ 'Q_SEQ_UNMAPPED' } = $record->{ 'FLAG' } & 0x0004;
$record->{ 'MATE_UNMAPPED' } = $record->{ 'FLAG' } & 0x0008;
- if ( $record->{ 'FLAG' } & 0x0010 ) {
- $record->{ 'STRAND' } = '+';
- } else {
+ if ( $record->{ 'FLAG' } & 0x0010 ) { # 0 for forward, 1 for reverse
$record->{ 'STRAND' } = '-';
+ } else {
+ $record->{ 'STRAND' } = '+';
}
$record->{ 'MATE_STRAND' } = $record->{ 'FLAG' } & 0x0020;
$record->{ 'READ_FAIL' } = $record->{ 'FLAG' } & 0x0200;
$record->{ 'READ_BAD' } = $record->{ 'FLAG' } & 0x0400;
+ if ( $record->{ 'READ_PAIRED' } ) {
+ $record->{ 'BLOCK_COUNT' } = 2;
+ } else {
+ $record->{ 'BLOCK_COUNT' } = 1;
+ }
# extra fields - (hate hate hate SAM!!!)
# Returns a string.
- my ( $offset, $len, $op, $i, $nt, $nt2, @align, $aln_str );
+ my ( $offset, $len, $op, $i, $nt, $nt2, @nts, $insertions, @align, $aln_str );
- $offset = 0;
+ $offset = 0;
+ $insertions = 0;
while ( length( $cigar ) > 0 )
{
while ( $nm > 0 )
{
- if ( $md =~ s/^(\d+)// )
+ if ( $md =~ s/^(\d+)// ) # match
{
$offset += $1;
}
- elsif ( $md =~ s/^(\w)// )
+ elsif( $md =~ s/^\^([ATCGN]+)// ) # insertions
{
- $nt = $1;
+ @nts = split //, $1;
- $nt2 = substr $seq, $offset, 1;
+ foreach $nt ( @nts )
+ {
+ $nt2 = substr $seq, $offset, 1;
- push @align, [ $offset, "$nt>$nt2" ];
+ push @align, [ $offset, "$nt2>-" ];
+
+ $offset++;
- $offset++;
+ $insertions++;
- $nm--;
+ $nm--;
+ }
}
- elsif( $md =~ s/^\^// )
+ elsif ( $md =~ s/^([ATCGN]+)// ) # mismatch
{
- $nt = substr $seq, $offset, 1;
+ @nts = split //, $1;
- push @align, [ $offset, "$nt>-" ];
-
- $offset++;
+ foreach $nt ( @nts )
+ {
+ $nt2 = substr $seq, $offset - $insertions, 1;
- $nm--;
+ push @align, [ $offset, "$nt>$nt2" ];
+
+ $offset++;
+
+ $nm--;
+ }
}
else
{
}
}
-
$aln_str = "";
@align = sort { $a->[ 0 ] <=> $b->[ 0 ] } @align;