///|
/// Bio.Pairwise2 module example - Flexible pairwise sequence alignment.
///
/// Run: moon run examples/pairwise2_demo/main.mbt
fn main {
println("=== Bio.Pairwise2 Module Demo ===")
println("")
// Global alignment (identical sequences)
println("=== Global Alignment (Identical Sequences) ===")
let r1 = @bio.pairwise_globalxx("ACGT", "ACGT", 2.0, -1.0, -5.0, -0.5)
println("Alignment: \{r1.get_aligned_seq1()} vs \{r1.get_aligned_seq2()}")
println("Score: \{r1.get_score()}")
println("Mode: \{r1.get_mode()}")
println("")
// Global alignment (with gaps)
println("=== Global Alignment (With Gaps) ===")
let r2 = @bio.pairwise_globalxx("ACGT", "ACG", 2.0, -1.0, -5.0, -0.5)
println("Alignment: \{r2.get_aligned_seq1()} vs \{r2.get_aligned_seq2()}")
println("Score: \{r2.get_score()}")
println("")
// Local alignment (identical sequences)
println("=== Local Alignment (Identical Sequences) ===")
let r3 = @bio.pairwise_localxx("ACGTACGT", "ACGTACGT", 2.0, -1.0, -5.0, -0.5)
println("Alignment: \{r3.get_aligned_seq1()} vs \{r3.get_aligned_seq2()}")
println("Score: \{r3.get_score()}")
println("")
// Local alignment (substring)
println("=== Local Alignment (Substring) ===")
let r4 = @bio.pairwise_localxx("XXXACGTXXX", "ACGT", 2.0, -1.0, -5.0, -0.5)
println("Alignment: \{r4.get_aligned_seq1()} vs \{r4.get_aligned_seq2()}")
println("Score: \{r4.get_score()}")
println("")
// Local alignment (no match)
println("=== Local Alignment (No Match) ===")
let r5 = @bio.pairwise_localxx("AAAA", "TTTT", 2.0, -1.0, -5.0, -0.5)
println("Score: \{r5.get_score()}")
println("Found match: \{r5.get_score() > 0.0}")
println("")
// Convenience functions
println("=== Convenience: Global Alignment ===")
let r6 = @bio.pairwise_global("ACGT", "ACGT")
println("Alignment: \{r6.get_aligned_seq1()} vs \{r6.get_aligned_seq2()}")
println("Score: \{r6.get_score()}")
println("")
println("=== Convenience: Local Alignment ===")
let r7 = @bio.pairwise_local("ACGTACGT", "ACGT")
println("Alignment: \{r7.get_aligned_seq1()} vs \{r7.get_aligned_seq2()}")
println("Score: \{r7.get_score()}")
println("")
// Scoring functions
println("=== Simple Scoring Function ===")
let scorer = @bio.simple_score(2.0, -1.0)
println("Match(A,A): \{scorer("A", "A")}")
println("Mismatch(A,T): \{scorer("A", "T")}")
println("Case insensitive(A,a): \{scorer("A", "a")}")
println("")
println("=== Identity Scoring Function ===")
let identity = @bio.identity_score()
println("Match(A,A): \{identity("A", "A")}")
println("Mismatch(A,T): \{identity("A", "T")}")
println("")
// DNA matrix
println("=== DNA Scoring Matrix ===")
let dna_mat = @bio.dna_matrix(2.0, -1.0)
println("Matrix size: \{dna_mat.length()}")
println("AA score: \{dna_mat.get("AA").unwrap()}")
println("AT score: \{dna_mat.get("AT").unwrap()}")
println("")
// Matrix-based scoring
println("=== Matrix-Based Scoring ===")
let mat_scorer = @bio.matrix_score(dna_mat, 0.0)
println("Match(A,A): \{mat_scorer("A", "A")}")
println("Mismatch(A,T): \{mat_scorer("A", "T")}")
println("Unknown(X,X): \{mat_scorer("X", "X")}")
println("")
// GlobalMS alignment
println("=== GlobalMS Alignment ===")
let r8 = @bio.pairwise_globalms("ACGT", "ACGT", dna_mat, -5.0, -0.5)
println("Alignment: \{r8.get_aligned_seq1()} vs \{r8.get_aligned_seq2()}")
println("Score: \{r8.get_score()}")
println("Mode: \{r8.get_mode()}")
println("")
// LocalMS alignment
println("=== LocalMS Alignment ===")
let r9 = @bio.pairwise_localms("XXXACGTXXX", "ACGT", dna_mat, -5.0, -0.5)
println("Alignment: \{r9.get_aligned_seq1()} vs \{r9.get_aligned_seq2()}")
println("Score: \{r9.get_score()}")
println("Mode: \{r9.get_mode()}")
println("")
// Alignment summary
println("=== Alignment Summary ===")
let summary = @bio.alignment_summary(r1)
println(summary)
// Formatted alignment
println("=== Formatted Alignment ===")
let formatted = r1.format_alignment(60)
println(formatted)
println("=== Done ===")
}