///|
/// COMPASS module demo - profile-profile alignment output parser.
///
/// COMPASS (Comparison of Multiple Protein Alignments with Assessment of
/// Statistical Significance) is a tool for profile-profile alignment.
///
/// Run: moon run examples/compass_demo
fn main {
println("=== COMPASS Module Demo ===")
println("Profile-profile alignment output parser")
println("Reference: Sadreyev RI et al. (2003) Protein Sci 12(10):2262-72")
println("")
// ------------------------------------------------------------------
// 1. Generate and parse sample COMPASS output
// ------------------------------------------------------------------
println("=== 1. Generate and parse sample COMPASS output ===")
let text = @bio.compass_sample_data()
let records = @bio.parse_compass(text)
println("Parsed " + records.length().to_string() + " COMPASS records")
println("")
// ------------------------------------------------------------------
// 2. Display version information
// ------------------------------------------------------------------
println("=== 2. Version information ===")
let version = @bio.compass_version(text)
println("COMPASS version: " + version)
println("")
// ------------------------------------------------------------------
// 3. Display all parsed records
// ------------------------------------------------------------------
println("=== 3. Parsed records ===")
for r in records {
println("Query: " + r.query_name())
println(" Template: " + r.template_name())
println(
" Sequences: query=" +
r.query_n_seqs().to_string() +
" template=" +
r.template_n_seqs().to_string(),
)
println(
" Columns: query=" +
r.query_n_cols().to_string() +
" template=" +
r.template_n_cols().to_string(),
)
println(" Smith-Waterman score: " + r.sw_score().to_string())
println(" E-value: " + r.e_value().to_string())
println(
" Percentage identity: " + r.percentage_identity().to_string() + "%",
)
println(
" Query range: " +
r.query_start().to_string() +
"-" +
r.query_end().to_string(),
)
println(
" Template range: " +
r.template_start().to_string() +
"-" +
r.template_end().to_string(),
)
println(" Aligned query: " + r.aligned_query())
println(" Consensus: " + r.consensus_line())
println(" Aligned template: " + r.aligned_template())
println(
" Alignment length: " + @bio.compass_alignment_length(r).to_string(),
)
println("")
}
// ------------------------------------------------------------------
// 4. Filter records by E-value
// ------------------------------------------------------------------
println("=== 4. Filter by E-value <= 1e-06 ===")
let significant = @bio.compass_filter_by_evalue(records, 1.0e-06)
println(
"Found " + significant.length().to_string() + " significant alignment(s):",
)
for r in significant {
println(
" " +
r.query_name() +
" vs " +
r.template_name() +
" (E=" +
r.e_value().to_string() +
")",
)
}
println("")
// ------------------------------------------------------------------
// 5. Filter records by percentage identity
// ------------------------------------------------------------------
println("=== 5. Filter by identity >= 20.0% ===")
let high_identity = @bio.compass_filter_by_identity(records, 20.0)
println(
"Found " +
high_identity.length().to_string() +
" alignment(s) with identity >= 20%:",
)
for r in high_identity {
println(
" " +
r.query_name() +
" vs " +
r.template_name() +
" (identity=" +
r.percentage_identity().to_string() +
"%)",
)
}
println("")
// ------------------------------------------------------------------
// 6. Generate summary
// ------------------------------------------------------------------
println("=== 6. Full summary ===")
println(@bio.compass_summary(records))
println("=== Demo complete ===")
}