///|
fn main {
println("=== GO Enrichment Analysis Demo ===")
let gene_list = ["GeneA", "GeneB", "GeneC", "GeneD", "GeneE"]
let go_term1 = @bio.GOTerm::new("GO:0005515", "protein binding", "BP", [
"GeneA", "GeneB", "GeneD", "GeneF", "GeneG",
])
let go_term2 = @bio.GOTerm::new("GO:0008150", "biological process", "BP", [
"GeneH", "GeneI", "GeneJ",
])
let go_term3 = @bio.GOTerm::new("GO:0005623", "cell", "CC", [
"GeneA", "GeneC", "GeneK",
])
let go_term4 = @bio.GOTerm::new("GO:0003674", "molecular_function", "MF", [
"GeneB", "GeneE", "GeneL", "GeneM",
])
let go_terms = [go_term1, go_term2, go_term3, go_term4]
let results = @bio.go_enrich(gene_list, go_terms, 100)
println("\nEnrichment Results:")
println("===================")
let mut i = 0
while i < results.length() {
let r = results[i]
println("\nGO ID: " + r.go_id)
println("Term: " + r.term_name)
println("Namespace: " + r.namespace_)
println("P-value: " + r.p_value.to_string())
println("Adjusted P-value: " + r.adjusted_p_value.to_string())
println("Odds Ratio: " + r.odds_ratio.to_string())
println("Gene Ratio: " + r.gene_ratio)
println("Background Ratio: " + r.bg_ratio)
println("Count: " + r.count.to_string())
i = i + 1
}
let filtered = @bio.filter_enrichment(results, 0.1, 2)
println("\nFiltered Results (padj < 0.1, count >= 2):")
println("==========================================")
i = 0
while i < filtered.length() {
let r = filtered[i]
println(
r.go_id +
" - " +
r.term_name +
" (padj=" +
r.adjusted_p_value.to_string() +
")",
)
i = i + 1
}
let bp_terms = @bio.go_terms_by_namespace(go_terms, "BP")
println("\nBP terms: " + bp_terms.length().to_string())
println("\n=== Demo Complete ===")
}