///|
/// RUVSeq Demo
fn main {
println("=== RUVSeq Demo ===")
println("\n1. Create Demo Data:")
println("====================")
let data = @bio.create_demo_data()
println("Genes: " + data.genes.length().to_string())
println("Samples: " + data.samples.length().to_string())
println("Batches: " + data.batch.length().to_string())
let mut i = 0
while i < data.samples.length() {
println(" " + data.samples[i] + " (" + data.batch[i] + ")")
i = i + 1
}
println("\n2. Raw Counts (GeneA):")
println("======================")
let gene_a_idx = data.get_gene_index("GeneA")
if gene_a_idx is Some(_) {
let counts = data.counts[gene_a_idx.unwrap()]
let mut line = ""
i = 0
while i < counts.length() {
line = line + counts[i].to_string() + "\t"
i = i + 1
}
println(line)
}
println("\n3. Normalize Data:")
println("==================")
let normalized_data = data.normalize()
println("Normalized: " + normalized_data.normalized.to_string())
if gene_a_idx is Some(_) {
let counts = normalized_data.counts[gene_a_idx.unwrap()]
let mut line = ""
i = 0
while i < counts.length() {
let s = counts[i].to_string()
let len = if s.length() < 6 { s.length() } else { 6 }
line = line + s[0:len].to_owned() + "\t"
i = i + 1
}
println(line)
}
println("\n4. Log2 Transform:")
println("==================")
let log_data = data.log2_transform()
if gene_a_idx is Some(_) {
let counts = log_data.counts[gene_a_idx.unwrap()]
let mut line = ""
i = 0
while i < counts.length() {
let s = counts[i].to_string()
let len = if s.length() < 5 { s.length() } else { 5 }
line = line + s[0:len].to_owned() + "\t"
i = i + 1
}
println(line)
}
println("\n5. RUVg (Using Control Genes):")
println("===============================")
let controls = ["Control1", "Control2", "Control3"]
let ruvg_factors = @bio.ruvg(data, controls, 1)
println("Number of factors: " + ruvg_factors.k.to_string())
println("Factor values:")
let factors = ruvg_factors.factors[0]
let mut line = ""
i = 0
while i < factors.length() {
let s = factors[i].to_string()
let len = if s.length() < 8 { s.length() } else { 8 }
line = line + s[0:len].to_owned() + "\t"
i = i + 1
}
println(line)
println("\n6. RUVs (Using All Genes):")
println("==========================")
let ruvs_factors = @bio.ruvs(data, 1)
println("Number of factors: " + ruvs_factors.k.to_string())
println("Factor values:")
let factors2 = ruvs_factors.factors[0]
let mut line2 = ""
i = 0
while i < factors2.length() {
let s = factors2[i].to_string()
let len = if s.length() < 8 { s.length() } else { 8 }
line2 = line2 + s[0:len].to_owned() + "\t"
i = i + 1
}
println(line2)
println("\n7. Remove Batch Effect:")
println("=======================")
let corrected = @bio.remove_batch_effect(data, ruvg_factors)
println("Corrected data genes: " + corrected.genes.length().to_string())
println("Corrected data samples: " + corrected.samples.length().to_string())
let corr_gene_a_idx = corrected.get_gene_index("GeneA")
if corr_gene_a_idx is Some(_) {
let corr_counts = corrected.counts[corr_gene_a_idx.unwrap()]
let mut line3 = ""
i = 0
while i < corr_counts.length() {
let s = corr_counts[i].to_string()
let len = if s.length() < 6 { s.length() } else { 6 }
line3 = line3 + s[0:len].to_owned() + "\t"
i = i + 1
}
println(line3)
}
println("\n=== Demo Complete ===")
}