///|
/// Proteomics demo - protein digestion, mass calculation, and isotope pattern analysis.
///|
fn main {
println("=== Proteomics Demo ===\n")
let protein_seq = "PEPTIDEKTESTKRPGGLLGRLKDEQMFWYVN"
println("Protein sequence: " + protein_seq)
println("Length: " + protein_seq.length().to_string())
println("\n=== Available Enzymes ===")
let enzymes = @bio.proteomics_available_enzymes()
println("Supported enzymes (" + enzymes.length().to_string() + "):")
let mut i = 0
while i < enzymes.length() {
println(" - " + enzymes[i])
i = i + 1
}
println("\n=== Trypsin Digestion ===")
let trypsin_result = @bio.proteomics_digest(protein_seq, "trypsin")
println("Number of peptides: " + trypsin_result.num_peptides.to_string())
println("Protein mass (avg): " + trypsin_result.protein_mass.to_string())
let mut p = 0
while p < trypsin_result.peptides.length() {
let pep = trypsin_result.peptides[p]
println(
" Peptide " +
(p + 1).to_string() +
": " +
pep.peptide_sequence +
" (mono: " +
pep.monoisotopic_mass.to_string() +
", avg: " +
pep.average_mass.to_string() +
")",
)
p = p + 1
}
println("\n=== Trypsin Digestion with Missed Cleavages (1) ===")
let mc_result = @bio.proteomics_trypsin_digest(protein_seq, 1)
println(
"Number of peptides with 1 missed cleavage: " +
mc_result.num_peptides.to_string(),
)
println("\n=== Chymotrypsin Digestion ===")
let chymo_result = @bio.proteomics_digest(protein_seq, "chymotrypsin")
println("Number of peptides: " + chymo_result.num_peptides.to_string())
p = 0
while p < chymo_result.peptides.length() {
let pep = chymo_result.peptides[p]
println(" " + pep.peptide_sequence)
p = p + 1
}
println("\n=== Cysteine Mass Calculation ===")
let mono_mass = @bio.proteomics_calculate_mass("C", true)
let avg_mass = @bio.proteomics_calculate_mass("C", false)
println("Cysteine monoisotopic mass: " + mono_mass.to_string())
println("Cysteine average mass: " + avg_mass.to_string())
println("\n=== Isotope Pattern for 'GGR' (charge 2) ===")
let pattern = @bio.proteomics_isotope_pattern("GGR", 2)
println("Charge: " + pattern.charge.to_string())
let mut i2 = 0
while i2 < pattern.masses.length() {
println(
" Peak " +
i2.to_string() +
": m/z = " +
pattern.masses[i2].to_string() +
", abundance = " +
pattern.abundances[i2].to_string(),
)
i2 = i2 + 1
}
println("\n=== Fragment Ions for 'PEPT' (charge 1) ===")
let frags = @bio.proteomics_fragment_ions("PEPT", 1)
println("Number of fragment ions: " + frags.length().to_string())
let mut f = 0
while f < frags.length() {
let frag = frags[f]
println(
" " +
frag.peptide_sequence +
": mono = " +
frag.monoisotopic_mass.to_string() +
", avg = " +
frag.average_mass.to_string(),
)
f = f + 1
}
println("\n=== Select Enzyme ===")
let trypsin = @bio.proteomics_select_enzyme("trypsin")
match trypsin {
Some(agent) => {
println("Enzyme: " + agent.name)
println("Cleavage specificities:")
let mut s = 0
while s < agent.cleavage_sites.length() {
let site = agent.cleavage_sites[s]
println(" - " + site.residue)
s = s + 1
}
}
None => println("Enzyme not found")
}
println("\n=== Complete Proteomics Demo ===")
}