///|
fn main {
println("=== Biopython Shared-reference Alignment Demo ===")
println("\n1. Adapt an existing pairwise alignment")
let pairwise = @src.pairaligner_align("ACGT", "ACT")
let pairwise_input = @src.shared_reference_input_from_pairwise(
pairwise,
reference_name="reference",
reference_description="shared DNA template",
query_name="pairwise_read",
query_description="one deletion",
) catch {
_ => abort("failed to adapt pairwise alignment")
}
println(" reference: " + pairwise_input.aligned_reference)
println(" query: " + pairwise_input.queries[0].aligned_sequence)
println("\n2. Build a multi-query alignment with an insertion")
let inserted = @src.shared_reference_sequence(
"inserted_read",
"ACGGT",
description="one insertion",
) catch {
_ => abort("failed to build inserted query")
}
let deleted = @src.shared_reference_sequence(
"deleted_read",
"A---T",
description="three deletions",
) catch {
_ => abort("failed to build deleted query")
}
let multiple_input = @src.shared_reference_input(
"ACGT",
"ACG-T",
[inserted, deleted],
reference_name="reference",
reference_description="shared DNA template",
) catch {
_ => abort("failed to build multi-query input")
}
println("\n3. Synchronize reference-boundary insertion slots")
let alignment = @src.alignments_with_same_reference([
pairwise_input, multiple_input,
]) catch {
_ => abort("failed to merge shared-reference alignments")
}
println(" " + alignment.summary())
println(" insertion widths: " + repr(alignment.insertion_widths))
for index in 0.. reference: " +
repr(alignment.query_to_reference(1, 3)),
)
println(
" inserted_read query position 4 -> reference: " +
repr(alignment.query_to_reference(1, 4)),
)
println(
" reference position 3 -> inserted_read query: " +
repr(alignment.reference_to_query(1, 3)),
)
println("\n5. Inspect alignment statistics")
for index in 0.. abort("failed to convert merged alignment")
}
println(
" MSA dimensions: " +
msa.num_records().to_string() +
" x " +
msa.get_alignment_length().to_string(),
)
println(alignment.to_fasta())
println("=== Demo Complete ===")
}