///|
/// GenomeInfoDb Demo - Genome information management.
fn main {
println("=== GenomeInfoDb Demo ===\n")
println("1. Loading pre-built hg38 genome...")
let hg38 = @src.genome_hg38()
println(" \{@src.GenomeInfoDb::summary(hg38)}")
println("\n2. Getting chromosome information...")
let names = @src.GenomeInfoDb::seqnames(hg38)
println(" Total chromosomes: \{names.length()}")
println(" First 5: \{names[0:5].to_owned().join(", ")}")
match @src.GenomeInfoDb::seqLength(hg38, "chr1") {
Some(len) => println(" chr1 length: \{len} bp")
None => println(" chr1 not found")
}
println("\n3. Checking circular chromosomes...")
match @src.GenomeInfoDb::is_circular(hg38, "chrM") {
Some(c) => println(" chrM is circular: \{c}")
None => println(" chrM not found")
}
match @src.GenomeInfoDb::is_circular(hg38, "chr1") {
Some(c) => println(" chr1 is circular: \{c}")
None => println(" chr1 not found")
}
println("\n4. Getting centromere positions...")
match @src.GenomeInfoDb::centromere(hg38, "chr1") {
Some(c) => println(" chr1 centromere: \{c.start}-\{c.end}")
None => println(" chr1 centromere not found")
}
println("\n5. Getting chromosomal arms...")
let arm1 = @src.GenomeInfoDb::get_arm(hg38, "chr1", 1000000)
let arm2 = @src.GenomeInfoDb::get_arm(hg38, "chr1", 200000000)
let arm3 = @src.GenomeInfoDb::get_arm(hg38, "chr1", 123000000)
println(" chr1:1,000,000 -> arm \{arm1}")
println(" chr1:200,000,000 -> arm \{arm2}")
println(" chr1:123,000,000 -> arm \{arm3}")
println("\n6. Comparing genome builds...")
let hg19 = @src.genome_hg19()
let mm10 = @src.genome_mm10()
match @src.GenomeInfoDb::seqLength(hg38, "chr1") {
Some(l38) =>
match @src.GenomeInfoDb::seqLength(hg19, "chr1") {
Some(l19) => println(" hg38 chr1: \{l38} bp, hg19 chr1: \{l19} bp")
None => println(" hg19 chr1 not found")
}
None => println(" hg38 chr1 not found")
}
match @src.GenomeInfoDb::seqLength(mm10, "chr1") {
Some(l) => println(" mm10 chr1: \{l} bp")
None => println(" mm10 chr1 not found")
}
println("\n7. Looking up organism from build...")
println(" hg38 -> \{@src.organism_from_build("hg38")}")
println(" mm10 -> \{@src.organism_from_build("mm10")}")
println(" dm6 -> \{@src.organism_from_build("dm6")}")
println("\n8. Filtering chromosomes...")
let chr1_like = @src.GenomeInfoDb::filter_chromosomes(hg38, "chr1")
println(" Chromosomes matching 'chr1': \{chr1_like.join(", ")}")
println("\n9. Building custom genome...")
let custom = @src.GenomeInfoDb::new(
genome_build="custom",
organism="Test organism",
)
.add_chrom("chr1", 5000000)
.add_chrom("chr2", 4000000)
.add_chrom("chrM", 16000, is_circular=true)
println(" \{@src.GenomeInfoDb::summary(custom)}")
println("\n10. Supported genome builds...")
let builds = @src.supported_genome_builds()
println(" \{builds.join(", ")}")
println("\n=== GenomeInfoDb Demo Complete ===")
}