///|
/// Genome Diagram Demo - Demonstrates genome diagram creation and SVG generation.
fn main {
println("=== Genome Diagram Demo ===")
let diagram = @bio.gd_create_diagram("Example Genome", 0, 5000)
println(
"Created diagram: name=" +
diagram.name() +
", length=" +
@bio.gd_diagram_length(diagram).to_string(),
)
let diagram = @bio.gd_add_track(diagram, "Genes")
let diagram = @bio.gd_add_track(diagram, "Exons")
let diagram = @bio.gd_add_track(diagram, "Regulatory")
println("Track count: " + @bio.gd_track_count(diagram).to_string())
let diagram = @bio.gd_add_feature(
diagram,
100,
600,
"+",
"BRCA1",
@bio.gd_arrow_shape(),
)
let diagram = @bio.gd_add_feature(
diagram,
800,
1400,
"-",
"TP53",
@bio.gd_arrow_shape(),
)
let diagram = @bio.gd_add_feature(
diagram,
1600,
1800,
"+",
"Promoter1",
@bio.gd_diamond_shape(),
)
let diagram = @bio.gd_add_feature(
diagram,
2000,
2800,
"+",
"EGFR",
@bio.gd_arrow_shape(),
)
let diagram = @bio.gd_add_feature(
diagram,
3000,
3200,
"-",
"Enhancer1",
@bio.gd_terminators_shape(),
)
let diagram = @bio.gd_add_feature(
diagram,
3500,
4200,
"+",
"MYC",
@bio.gd_crossed_arrow_shape(),
)
let diagram = @bio.gd_add_feature(
diagram,
4400,
4900,
"-",
"KRAS",
@bio.gd_arrow_shape(),
)
println(
"Diagram feature count: " + @bio.gd_feature_count(diagram).to_string(),
)
let diagram = @bio.gd_add_track_feature(
diagram, "Genes", 100, 600, "+", "BRCA1_gene",
)
let diagram = @bio.gd_add_track_feature(
diagram, "Genes", 800, 1400, "-", "TP53_gene",
)
let diagram = @bio.gd_add_track_feature(
diagram, "Genes", 2000, 2800, "+", "EGFR_gene",
)
let diagram = @bio.gd_add_track_feature(
diagram, "Exons", 150, 300, "+", "Exon1",
)
let diagram = @bio.gd_add_track_feature(
diagram, "Exons", 350, 500, "+", "Exon2",
)
let diagram = @bio.gd_add_track_feature(
diagram, "Exons", 850, 1000, "-", "Exon3",
)
let diagram = @bio.gd_add_track_feature(
diagram, "Exons", 1100, 1300, "-", "Exon4",
)
let diagram = @bio.gd_add_track_feature(
diagram, "Regulatory", 1600, 1800, "+", "Promoter1",
)
let diagram = @bio.gd_add_track_feature(
diagram, "Regulatory", 3000, 3200, "-", "Enhancer1",
)
println(
"Total feature count (including tracks): " +
@bio.gd_feature_count(diagram).to_string(),
)
let overlapping = @bio.gd_find_overlapping_features(diagram, 500, 900)
println(
"Features overlapping [500, 900]: " + overlapping.length().to_string(),
)
for feat in overlapping {
println(
" - " +
feat.label() +
" [" +
feat.start().to_string() +
", " +
feat.end().to_string() +
"] " +
feat.strand(),
)
}
let style = @bio.DiagramStyle::new(scale=2.0, color_scheme="default")
let diagram = @bio.gd_set_style(diagram, style)
let diagram = @bio.gd_label_features(diagram, 200)
let svg = @bio.gd_to_svg_string(diagram, 900, 500)
println("SVG output length: " + svg.length().to_string())
println("SVG preview (first 200 chars):")
if svg.length() > 200 {
println(svg[0:200].to_owned())
} else {
println(svg)
}
println("")
println("=== Diagram Statistics ===")
println("Name: " + diagram.name())
println(
"Range: [" +
diagram.start().to_string() +
", " +
diagram.end().to_string() +
"]",
)
println("Length: " + @bio.gd_diagram_length(diagram).to_string())
println("Tracks: " + @bio.gd_track_count(diagram).to_string())
println("Total features: " + @bio.gd_feature_count(diagram).to_string())
let gene_features = @bio.gd_get_features(diagram, "Genes")
println("Gene track features: " + gene_features.length().to_string())
for feat in gene_features {
println(
" - " +
feat.label() +
" [" +
feat.start().to_string() +
", " +
feat.end().to_string() +
"]",
)
}
println("")
println("Demo completed successfully!")
}