///|
fn main {
println("=== ShortRead Demo ===")
let sequences = [
"ACGTACGTAGCTAGCTAGATCGGAAGAGC", "ACGTACGTAGCTAGCTAGATCGGAAGAGC", "GGGGCCCCAAAATTTTGGGGCCCCAAAA",
"ACGTNNNNAGCTAGCTAGATCGGAAGAGC", "TTTTCCCCGGGGAAAATTTTCCCCGGGG",
]
let qualities = [
"IIIIIIIIIIIIIIIIIIIIIIIIIIII", "IIIIIIIIIIIIIIIIIIIIIIIIIIII", "IIIIIIIIIIIIIIIIIIIIIIIIIIII",
"IIIIIIII########IIIIIIIIIIII", "IIIIIIIIIIIIIIIIIIIIIIIIIIII",
]
println("\n1. Quality Assessment Summary:")
let stats = @src.qa_summary(sequences, qualities)
println(stats.to_string())
println("\n2. Per-base quality (first 10 cycles):")
let mut i = 0
while i < 10 && i < stats.quality_by_cycle.length() {
println(
" Cycle " +
(i + 1).to_string() +
": " +
stats.quality_by_cycle[i].to_string(),
)
i = i + 1
}
println("\n3. Trim tail (quality threshold 20):")
let seq = "ACGTACGT##"
let qual = "IIIIIIII##"
let (trimmed_seq, _trimmed_qual) = @src.trim_tail(seq, qual, 20)
println(" Original: " + seq + " (" + seq.length().to_string() + "bp)")
println(
" Trimmed: " +
trimmed_seq +
" (" +
trimmed_seq.length().to_string() +
"bp)",
)
println("\n4. Trim leading (quality threshold 20):")
let seq2 = "##ACGTACGT"
let qual2 = "##IIIIIIII"
let (trimmed_seq2, _trimmed_qual2) = @src.trim_leading(seq2, qual2, 20)
println(" Original: " + seq2 + " (" + seq2.length().to_string() + "bp)")
println(
" Trimmed: " +
trimmed_seq2 +
" (" +
trimmed_seq2.length().to_string() +
"bp)",
)
println("\n5. Trim adapter (AGATCGGAAGAGC):")
let adapter = "AGATCGGAAGAGC"
let (trimmed_adapter, _) = @src.trim_adapter(
sequences[0],
qualities[0],
adapter,
0,
)
println(
" Original: " +
sequences[0] +
" (" +
sequences[0].length().to_string() +
"bp)",
)
println(
" Trimmed: " +
trimmed_adapter +
" (" +
trimmed_adapter.length().to_string() +
"bp)",
)
println("\n6. Filter reads (min quality 30, min length 20, max N 2):")
let (filtered_seqs, _filtered_quals) = @src.filter_reads(
sequences, qualities, 30.0, 20, 2,
)
println(" Input reads: " + sequences.length().to_string())
println(" Filtered reads: " + filtered_seqs.length().to_string())
println("\n7. FastQC Report:")
let report = @src.generate_fastqc_report(sequences, qualities)
println(report.to_string())
println("\nShortRead demo completed!")
}