[](https://crates.io/crates/pdbrust)
[](https://docs.rs/pdbrust)
[](https://github.com/hfooladi/pdbrust/actions/workflows/rust.yml)
[](https://opensource.org/licenses/MIT)
# PDBRust
A fast Rust library for parsing and analyzing PDB and mmCIF protein structure files.
## Installation
```toml
[dependencies]
pdbrust = "0.2"
```
With optional features:
```toml
[dependencies]
pdbrust = { version = "0.2", features = ["filter", "descriptors", "rcsb"] }
```
## Quick Start
```rust
use pdbrust::{parse_pdb_file, PdbStructure};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let structure = parse_pdb_file("protein.pdb")?;
println!("Atoms: {}", structure.atoms.len());
println!("Chains: {:?}", structure.get_chain_ids());
Ok(())
}
```
## Features
| `filter` | Filter atoms, extract chains, remove ligands, clean structures |
| `descriptors` | Radius of gyration, amino acid composition, geometric metrics |
| `quality` | Structure quality assessment (altlocs, missing residues, etc.) |
| `summary` | Combined quality + descriptors in one call |
| `rcsb` | Search and download structures from RCSB PDB |
## Examples
### Filter and Clean Structures
```rust
use pdbrust::parse_pdb_file;
let structure = parse_pdb_file("protein.pdb")?;
// Extract CA coordinates
let ca_coords = structure.get_ca_coords(None);
// Chain operations with fluent API
let chain_a = structure
.remove_ligands()
.keep_only_chain("A")
.keep_only_ca();
```
### Compute Structural Descriptors
```rust
let structure = parse_pdb_file("protein.pdb")?;
let rg = structure.radius_of_gyration();
let max_dist = structure.max_ca_distance();
let composition = structure.aa_composition();
// Or get everything at once
let descriptors = structure.structure_descriptors();
```
### Download from RCSB PDB
```rust
use pdbrust::rcsb::{download_structure, rcsb_search, SearchQuery, FileFormat};
// Download a structure
let structure = download_structure("1UBQ", FileFormat::Pdb)?;
// Search RCSB
let query = SearchQuery::new()
.with_text("kinase")
.with_organism("Homo sapiens")
.with_resolution_max(2.0);
let results = rcsb_search(&query, 10)?;
```
## Performance
Benchmarks against equivalent Python code show **40-260x speedups** for in-memory operations:
| Parsing | 2-3x |
| get_ca_coords | 240x |
| max_ca_distance | 260x |
| radius_of_gyration | 100x |
## Documentation
- [API Documentation](https://docs.rs/pdbrust)
- [Examples](examples/)
## License
MIT