///|
/// diffcyt module demo - Differential discovery in high-dimensional cytometry.
///
/// Demonstrates FlowSOM clustering, differential abundance (DA) testing,
/// and differential state (DS) testing on simulated CyTOF data.
///
/// Reference: Weber LM & Robinson MD (2016) diffcyt. Nat Methods 17:792.
/// Run: moon run examples/diffcyt_demo
fn main {
println("=== diffcyt Module Demo ===")
println("Differential discovery in high-dimensional cytometry")
println("Reference: Bioconductor diffcyt")
println("")
// ------------------------------------------------------------------
// 1. Load sample data
// ------------------------------------------------------------------
println("=== 1. Load Sample Data ===")
let cells = @bio.diffcyt_sample_data()
println("Total cells: " + cells.length().to_string())
let samples = @bio.diffcyt_unique_samples(cells)
let conditions = @bio.diffcyt_unique_conditions(cells)
println("Samples: " + samples.length().to_string())
println("Conditions: " + repr(conditions))
println("Markers: " + cells[0].n_markers().to_string())
println("")
// ------------------------------------------------------------------
// 2. Cluster cells (FlowSOM)
// ------------------------------------------------------------------
println("=== 2. Cluster Cells (FlowSOM) ===")
let n_clusters = 5
let _codebooks = @bio.diffcyt_cluster_cells(cells, n_clusters, 10)
println("Number of clusters: " + n_clusters.to_string())
// Count cells per cluster.
let cluster_counts = Array::make(n_clusters, 0)
for cell in cells {
cluster_counts[cell.cluster_id()] = cluster_counts[cell.cluster_id()] + 1
}
for i in 0..