pub struct TwoBitSequence { /* private fields */ }Expand description
A DNA sequence stored in 2-bit packed representation.
Each byte holds 4 bases. The encoding is:
- A = 0b00
- C = 0b01
- G = 0b10
- T = 0b11
Bases are packed from the most significant bits: the first base occupies bits 7..6, the second bits 5..4, and so on.
Implementations§
Source§impl TwoBitSequence
impl TwoBitSequence
Sourcepub fn encode(seq: &[u8]) -> Result<Self>
pub fn encode(seq: &[u8]) -> Result<Self>
Encode an ASCII DNA sequence into 2-bit packed representation.
Only unambiguous bases (A, C, G, T) are supported. Case-insensitive.
§Errors
Returns CyaneaError::InvalidInput if any base is not A, C, G, or T.
§Example
use cyanea_seq::twobit::TwoBitSequence;
let seq = TwoBitSequence::encode(b"ACGT").unwrap();
assert_eq!(seq.len(), 4);
assert_eq!(seq.decode(), b"ACGT");Sourcepub fn decode(&self) -> Vec<u8> ⓘ
pub fn decode(&self) -> Vec<u8> ⓘ
Decode back to ASCII DNA bytes.
Always produces uppercase A, C, G, T.
Sourcepub fn get(&self, index: usize) -> Option<u8>
pub fn get(&self, index: usize) -> Option<u8>
Get the base at a specific position.
Returns None if index >= len.
Sourcepub fn kmer(&self, pos: usize, k: usize) -> Option<u64>
pub fn kmer(&self, pos: usize, k: usize) -> Option<u64>
Extract a k-mer starting at pos as an integer encoding.
Each base occupies 2 bits in the returned u64, with the first base
in the most significant position. Maximum k is 32 (64 bits / 2 bits per base).
Returns None if pos + k > len or k > 32 or k == 0.
Sourcepub fn complement(&self) -> Self
pub fn complement(&self) -> Self
Compute the bitwise complement (A<->T, C<->G).
In 2-bit encoding, complement is a simple XOR with 0b11:
- A (00) -> T (11)
- C (01) -> G (10)
- G (10) -> C (01)
- T (11) -> A (00)
Trait Implementations§
Source§impl Clone for TwoBitSequence
impl Clone for TwoBitSequence
Source§fn clone(&self) -> TwoBitSequence
fn clone(&self) -> TwoBitSequence
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more