export_quant_digest/
export_quant_digest.rs1use anyhow::{ensure, Result};
4use std::io::Write;
5use uno_core::{DigestConfig, PeptideDb};
6fn main() -> Result<()> {
7 let args: Vec<_> = std::env::args().skip(1).collect();
8 ensure!(
9 args.len() == 3,
10 "usage: export_quant_digest FASTA DIGEST_CONFIG_JSON OUTPUT_TSV"
11 );
12 let mut config: DigestConfig = serde_json::from_str(&std::fs::read_to_string(&args[1])?)?;
13 config.generate_decoys = false;
14 let db = PeptideDb::build(&args[0], &config)?;
15 let mut peptides: Vec<_> = db.peptides.iter().filter(|p| !p.decoy).collect();
16 peptides.sort_by(|a, b| {
17 a.sequence
18 .cmp(&b.sequence)
19 .then_with(|| a.mass.total_cmp(&b.mass))
20 });
21 let file = std::fs::OpenOptions::new()
22 .write(true)
23 .create_new(true)
24 .open(&args[2])?;
25 let mut out = std::io::BufWriter::new(file);
26 writeln!(out, "sequence\tmass\tproteins")?;
27 for p in &peptides {
28 let mut proteins: Vec<_> = p.proteins.iter().map(|x| x.as_ref()).collect();
29 proteins.sort();
30 proteins.dedup();
31 writeln!(out, "{}\t{}\t{}", p.sequence, p.mass, proteins.join(";"))?;
32 }
33 out.flush()?;
34 eprintln!("{} target peptide entries", peptides.len());
35 Ok(())
36}