| |
Utility functions for phred quality strings.
| ( ns cljam.io.sam.util.quality
( :import [ java.nio Buffer ByteBuffer CharBuffer ] ) )
|
|
Converts fastq-char to phred-byte.
| ( definline fastq-char->phred-byte
[ ch ]
` ( byte ( - ( int ~ ch ) 33 ) ) )
|
|
Converts phred-byte to fastq-char.
| ( definline phred-byte->fastq-char
[ b ]
` ( unchecked-char ( unchecked-add ( Math/min 93 ( Math/max ( long ~ b ) 0 ) ) 33 ) ) )
|
|
Converts fastq quality string to phred bytes.
| ( defn fastq->phred
^ bytes [ ^ String fastq ]
( let [ b ( .getBytes fastq )
in-bb ( ByteBuffer/wrap b )
out-bb ( ByteBuffer/allocate ( alength b ) ) ]
( while ( .hasRemaining in-bb )
( .put out-bb ( fastq-char->phred-byte ( .get in-bb ) ) ) )
( .array out-bb ) ) )
|
|
Converts phred bytes or a byte to fastq quality string or char.
| ( defmulti phred->fastq
class )
|
|
Converts phred bytes to fastq quality string.
| ( defn phred-bytes->fastq
[ ^ bytes b ]
( when-not ( nil? b )
( let [ bb ( ByteBuffer/wrap b )
cb ( CharBuffer/allocate ( alength b ) ) ]
( loop [ ]
( when ( .hasRemaining bb )
( .put cb ( phred-byte->fastq-char ( .get bb ) ) )
( recur ) ) )
( .flip ^ Buffer cb )
( .toString cb ) ) ) )
|
|
| ( defmethod phred->fastq ( class ( byte-array nil ) )
[ ^ bytes b ]
( phred-bytes->fastq b ) )
|
|
| ( def ^ :private ^ :const max-phred-score 93 )
|
|
| ( defmethod phred->fastq Integer
[ n ]
{ :pre [ ( <= 0 n max-phred-score ) ] }
( phred-byte->fastq-char n ) )
|
|
| |