///|
/// isoelectric_point demo - Protein isoelectric point (pI) calculation.
/// Inspired by Biopython Bio.SeqUtils.IsoelectricPoint.
fn main {
println("=== isoelectric_point Demo: Protein pI Calculation ===")
println("")
// Step 1: Single amino acids
println("--- Step 1: Single Amino Acids ---")
let a_pi = @src.mt_isoelectric_point("A")
println("Alanine (A): pI = " + a_pi.to_string())
let d_pi = @src.mt_isoelectric_point("D")
println("Aspartic acid (D): pI = " + d_pi.to_string())
let k_pi = @src.mt_isoelectric_point("K")
println("Lysine (K): pI = " + k_pi.to_string())
println("")
// Step 2: Charge at different pH
println("--- Step 2: Charge vs pH ---")
let seq = "DEKR"
let ph_values = [2.0, 4.0, 6.0, 7.0, 8.0, 10.0, 12.0]
let mut i = 0
while i < ph_values.length() {
let charge = @src.mt_charge_at_ph_public(seq, ph_values[i])
println(
" pH " + ph_values[i].to_string() + ": charge = " + charge.to_string(),
)
i = i + 1
}
println("")
// Step 3: Acidic vs basic proteins
println("--- Step 3: Acidic vs Basic Proteins ---")
let acidic = "DDD"
let basic = "KKK"
let mixed = "DEKR"
println("Acidic (DDD): pI = " + @src.mt_isoelectric_point(acidic).to_string())
println("Basic (KKK): pI = " + @src.mt_isoelectric_point(basic).to_string())
println("Mixed (DEKR): pI = " + @src.mt_isoelectric_point(mixed).to_string())
println("")
// Step 4: Example protein
println("--- Step 4: Example Protein ---")
let example = @src.mt_example_protein()
println("Sequence: " + example)
let pi = @src.mt_isoelectric_point(example)
println("pI = " + pi.to_string())
println("")
// Step 5: Histidine special case
println("--- Step 5: Histidine (pKa ~ 6.0) ---")
let h_seq = "H"
let h_charge_low = @src.mt_charge_at_ph_public(h_seq, 5.0)
let h_charge_high = @src.mt_charge_at_ph_public(h_seq, 7.0)
println("Charge at pH 5.0: " + h_charge_low.to_string() + " (protonated)")
println("Charge at pH 7.0: " + h_charge_high.to_string() + " (deprotonated)")
println("")
println("=== isoelectric_point Demo Complete ===")
}