protein

Structural Biology in Rust

Example

Let's read a protein structure from a PDB file and draw a Ramachandran plot!

``rust use csv::Writer; // the cratecsvis required if you want to output csv use protein::{ io::pdb::Parser, // the PDB parser that parses PDB file into aStructure analysis::ModelAnalysis //Structurealone only stores data. // Functions for analysing theStructure` are provided by separate traits }; use std::fs;

fn main() { let data = fs::read("assets/4f7i.pdb").unwrap(); let (_, structure) = Parser::parse(&data).unwrap(); let (phis, psis) = structure.models[0].ramachandran(); // the .ramachandran() function is provided by the ModelAnalysis trait

let mut wtr = Writer::from_path("examples/ramachandran.csv").unwrap();
wtr.write_record(&["phi", "psi"]).unwrap();
for (&phi, &psi) in phis.iter().zip(psis.iter()) {
    wtr.write_record(&[phi.to_string(), psi.to_string()])
        .unwrap()
}
wtr.flush().unwrap();

}

```

This will produce a csv file containing two columns representing phi and psi angles. Then we can read the csv file in R and plot it (unfortunately I am not of any graphing libraries in Rust):

ramachandran plot

You can directly run the above example using cargo run:

bash cargo run --example ramachandran