///|
/// HSExposure demo.
///
/// Run: moon run examples/hs_exposure_demo/main.mbt
fn main {
println("=== HSExposure Demo ===\n")
println("1. Create PDB atoms:")
let ca = @bio.PDBAtom::new("CA", 0.0, 0.0, 0.0)
let cb = @bio.PDBAtom::new("CB", 1.5, 0.0, 0.0)
let n = @bio.PDBAtom::new("N", 0.0, 1.5, 0.0)
println(" CA: \{ca.name} (\{ca.x}, \{ca.y}, \{ca.z})")
println(" CB: \{cb.name} (\{cb.x}, \{cb.y}, \{cb.z})")
println(" N: \{n.name} (\{n.x}, \{n.y}, \{n.z})")
println("\n2. Prepare all CA atoms:")
let all_ca : Array[@bio.PDBAtom] = Array(capacity=0)
all_ca.push(ca)
all_ca.push(@bio.PDBAtom::new("CA2", 5.0, 0.0, 0.0))
all_ca.push(@bio.PDBAtom::new("CA3", 0.0, 5.0, 0.0))
all_ca.push(@bio.PDBAtom::new("CA4", 0.0, 0.0, 5.0))
all_ca.push(@bio.PDBAtom::new("CA5", 3.0, 3.0, 0.0))
println(" Total CA atoms: \{all_ca.length()}")
println("\n3. Calculate HSE:")
let result = @bio.calculate_hse(ca, cb, n, all_ca)
println(" Residue: \{result.residue_name}")
println(" HSE up: \{result.hse_up}")
println(" HSE down: \{result.hse_down}")
println(" HSE total: \{result.hse_total}")
println("\n4. Classify exposure:")
let classification = @bio.classify_exposure(result.hse_total)
println(" Classification: \{classification}")
println("\n5. Example atoms:")
let example_atoms = @bio.create_example_atoms()
println(" Example atoms count: \{example_atoms.length()}")
println("\n=== Demo Complete ===")
}