///|
fn main {
println("=== motifbreakR Demo ===")
let pwm = @src.motifbreakr_sample_gata1_pwm()
let seq = @src.motifbreakr_sample_sequence()
let variants = @src.motifbreakr_sample_variants()
let sequences = {
let m : Map[String, String] = Map([])
m.set("chr1", seq)
m
}
println("\n1. Sequence: " + seq)
println(" Variants: " + variants.length().to_string())
for v in variants {
println(
" " +
v.name +
": " +
v.chrom +
":" +
v.position.to_string() +
" " +
v.ref_allele +
">" +
v.alt_allele,
)
}
println("\n2. Motif break analysis")
let results = @src.motif_break(variants, [("GATA1", pwm)], sequences)
for r in results {
let effect_str = match r.effect {
@src.MotifbreakrEffect::Gain => "GAIN"
@src.MotifbreakrEffect::Loss => "LOSS"
@src.MotifbreakrEffect::Neutral => "NEUTRAL"
}
println(
" " +
r.variant_name +
" vs " +
r.motif_name +
": ref=" +
r.ref_score.to_string() +
", alt=" +
r.alt_score.to_string() +
", delta=" +
r.delta.to_string() +
" -> " +
effect_str,
)
}
println("\n3. Significant effects (non-neutral)")
let sig = @src.motifbreakr_significant(results)
println(" " + sig.length().to_string() + " significant variant-motif pairs")
println("\n4. Sorted by |delta| (most disruptive first)")
let sorted = @src.motifbreakr_sort_by_delta(results)
for r in sorted {
let abs_d = if r.delta < 0.0 { 0.0 - r.delta } else { r.delta }
println(" " + r.variant_name + ": |delta|=" + abs_d.to_string())
}
}