///|
/// Bio.PDB.PSEA Demo - Protein secondary structure prediction from CA coordinates.
/// Inspired by Biopython's Bio.PDB.PSEA module.
fn main {
println("=== Bio.PDB.PSEA Demo ===")
// 1. Helix example
println("")
println("1. Predict secondary structure for an alpha-helix-like chain:")
let helix_atoms = @bio.psea_create_example_helix()
println(" CA atoms: " + helix_atoms.length().to_string())
let helix_result = @bio.psea_run(helix_atoms)
println(" SS string: " + helix_result.psea_ss_string())
println(" " + helix_result.psea_summary())
// 2. Strand example
println("")
println("2. Predict secondary structure for a beta-strand-like chain:")
let strand_atoms = @bio.psea_create_example_strand()
println(" CA atoms: " + strand_atoms.length().to_string())
let strand_result = @bio.psea_run(strand_atoms)
println(" SS string: " + strand_result.psea_ss_string())
println(" " + strand_result.psea_summary())
// 3. Mixed example
println("")
println("3. Predict secondary structure for a mixed chain:")
let mixed_atoms = @bio.psea_create_example_mixed()
println(" CA atoms: " + mixed_atoms.length().to_string())
let mixed_result = @bio.psea_run(mixed_atoms)
println(" SS string: " + mixed_result.psea_ss_string())
println(" " + mixed_result.psea_summary())
// 4. Geometry analysis
println("")
println("4. Geometric analysis of helix chain:")
let geom = @bio.psea_compute_geometry(helix_atoms)
println(" CA-CA distances: " + geom.ca_distances.length().to_string())
println(" Bond angles: " + geom.bond_angles.length().to_string())
println(" Dihedral angles: " + geom.dihedral_angles.length().to_string())
if geom.dihedral_angles.length() > 0 {
println(
" First dihedral angle: " +
geom.dihedral_angles[0].to_string() +
" degrees",
)
}
// 5. Per-residue details
println("")
println("5. Per-residue details (first 6 residues of helix chain):")
let mut i = 0
while i < 6 && i < helix_result.psea_n_residues() {
let res_num = helix_result.psea_get_res_num(i)
let res_name = helix_result.psea_get_res_name(i)
let ss = helix_result.psea_get_ss(i)
let conf = helix_result.psea_get_confidence(i)
println(
" Residue " +
res_num.to_string() +
" (" +
res_name +
"): SS=" +
ss +
", confidence=" +
conf.to_string(),
)
i = i + 1
}
// 6. Three-to-eight state conversion
println("")
println("6. Convert 3-state to 8-state (DSSP-like) assignment:")
let ss3 = ["C", "C", "H", "H", "H", "H", "H", "C", "E", "E", "E", "C"]
let mut ss3_str = ""
let mut idx = 0
while idx < ss3.length() {
ss3_str = ss3_str + ss3[idx]
idx = idx + 1
}
let ss8 = @bio.psea_three_to_eight_state(ss3)
let mut ss8_str = ""
let mut j = 0
while j < ss8.length() {
ss8_str = ss8_str + ss8[j]
j = j + 1
}
println(" 3-state: " + ss3_str)
println(" 8-state: " + ss8_str)
println("")
println("=== Bio.PDB.PSEA Demo Completed ===")
}