///|
/// MSstats module example - Protein significance analysis for mass spectrometry.
///
/// Run: moon run examples/msstats_demo
fn main {
println("=== MSstats Module Demo ===")
println("Protein Significance Analysis for Mass Spectrometry Data")
println("")
// Generate sample data
println("=== Sample MS Data ===")
let features = @bio.msstats_sample_data()
println("Total features: \{features.length()}")
let mut n_ctrl = 0
let mut n_trt = 0
let mut i = 0
while i < features.length() {
if features[i].group == "Ctrl" {
n_ctrl = n_ctrl + 1
} else {
n_trt = n_trt + 1
}
i = i + 1
}
println(" Control features: \{n_ctrl}")
println(" Treatment features: \{n_trt}")
println("")
// Data processing
println("=== Data Processing (Median Normalization) ===")
let processed = @bio.ms_data_process(
features,
normalization=@bio.ms_norm_median(),
)
println("Processed features: \{processed.length()}")
println(" First feature intensity (log2): \{processed[0].intensity}")
println("")
// Summarization
println("=== Protein Summarization (Tukey) ===")
let summarized = @bio.ms_summarize(processed, method_=@bio.ms_summary_tukey())
println("Protein-level results: \{summarized.length()}")
let mut j = 0
while j < summarized.length() {
println(
" \{summarized[j].protein} [\{summarized[j].group}]: log2_abundance=\{summarized[j].log2_abundance}",
)
j = j + 1
}
println("")
// Group comparison
println("=== Group Comparison ===")
let results = @bio.ms_group_comparison(
summarized,
fdr_threshold=0.1,
log2fc_threshold=0.5,
)
println(results.summary())
println("")
// Top proteins
println("=== Top 5 Proteins ===")
let top = results.get_top_proteins(5)
let mut k = 0
while k < top.length() {
let r = top[k]
println(
" \{r.protein}: log2FC=\{r.log2fc}, p_val=\{r.p_val}, p_adj=\{r.p_adj}, sig=\{r.significant}",
)
k = k + 1
}
println("")
// Sample size calculation
println("=== Sample Size Design ===")
let ss = @bio.ms_design_sample_size(results.results, desired_power=0.8)
println(" Desired power: \{ss.desired_power}")
println(" Required samples: \{ss.n_samples}")
println(" Detectable proteins: \{ss.n_proteins_detectable}")
println(" Effect size (delta): \{ss.delta}")
println("")
// Normalization methods comparison
println("=== Normalization Methods ===")
let norm_none = @bio.ms_data_process(
features,
normalization=@bio.ms_norm_none(),
)
let norm_med = @bio.ms_data_process(
features,
normalization=@bio.ms_norm_median(),
)
let norm_qu = @bio.ms_data_process(
features,
normalization=@bio.ms_norm_quantile(),
)
println("None: first intensity=\{norm_none[0].intensity}")
println("Median: first intensity=\{norm_med[0].intensity}")
println("Quantile: first intensity=\{norm_qu[0].intensity}")
}