///|
/// Demo for cage module: CAGE data TSS analysis.
fn main {
println("=== CAGE Demo: TSS Identification & Clustering ===")
println("")
// Example 1: Create CTSS data
println("--- Step 1: CTSS Data ---")
let ctss = [
@src.CageCtss::new("chr1", 1000, "+", 50),
@src.CageCtss::new("chr1", 1001, "+", 30),
@src.CageCtss::new("chr1", 1002, "+", 20),
@src.CageCtss::new("chr1", 1005, "+", 15),
@src.CageCtss::new("chr1", 1010, "+", 10),
@src.CageCtss::new("chr1", 2000, "-", 40),
@src.CageCtss::new("chr1", 2001, "-", 35),
]
let sample = @src.CageSample::new("sample1", ctss)
println(
"Sample: " +
sample.sample_id +
", total tags=" +
sample.total_tags.to_string(),
)
println("")
// Example 2: Create CAGEset
println("--- Step 2: CAGEset ---")
let cs0 = @src.cage_new("my_cage")
let cs = @src.cage_add_sample(cs0, sample)
println(
"CAGEset: " + cs.name + ", samples=" + @src.cage_n_samples(cs).to_string(),
)
println("")
// Example 3: TPM normalization
println("--- Step 3: TPM Normalization ---")
let norm = @src.cage_normalize_tpm(cs)
println("Normalization: " + norm.normalization)
let s1 = norm.samples[0]
println(" CTSS 1000+: normalized=" + s1.ctss[0].normalized.to_string())
println("")
// Example 4: CTSS clustering
println("--- Step 4: CTSS Clustering ---")
let clusters = @src.cage_cluster(norm, max_dist=10, min_tags=2)
println("Clusters found: " + clusters.length().to_string())
for i in 0.. 0 {
let (chr, pos, strand, log2fc, _total) = diff[0]
println(
" " +
chr +
":" +
pos.to_string() +
" " +
strand +
" log2FC=" +
log2fc.to_string(),
)
}
println("")
// Example 8: TSS annotation
println("--- Step 8: TSS Annotation ---")
let genes = [("GENE1", 1000, "+", "chr1"), ("GENE2", 2000, "-", "chr1")]
let ann = @src.cage_annotate_tss(clusters, genes)
println("Annotations: " + ann.length().to_string())
for i in 0.. " +
a.gene_symbol +
" (" +
a.feature +
")",
)
}
println("")
println("=== CAGE Demo Complete ===")
}