pub struct ScoreConfig {Show 28 fields
pub matrix_joint_agreement: bool,
pub matrix_joint_cell_quality: bool,
pub matrix_joint_cell_counts: bool,
pub matrix_joint_cell_q: bool,
pub matrix_joint_alternative_groups: bool,
pub diagnostic_peptides_path: Option<String>,
pub matrix_recurrence: bool,
pub top_k: usize,
pub n_folds: usize,
pub calibration_fdr: f64,
pub bootstrap_rounds: usize,
pub iterations: usize,
pub max_depth: u32,
pub shrinkage: f32,
pub max_train_rows: usize,
pub seed_min_runs_frac: f64,
pub seed: u64,
pub rt_seed: Option<u64>,
pub cv_seed: Option<u64>,
pub classifier_seed: Option<u64>,
pub mass_anchor_ppm: f64,
pub discriminant: String,
pub ondata_rt: bool,
pub ondata_rt_lambda: f64,
pub ondata_rt_finetune: bool,
pub mass_anchor: bool,
pub rt_calibrated: bool,
pub ml_rescore: bool,
}Fields§
§matrix_joint_agreement: boolJoint-input ablation: use candidate-specific observations but disable cross-run agreement descriptors in the discriminant.
matrix_joint_cell_quality: boolExperimental row-level MBR/extraction-q descriptors in joint searches.
matrix_joint_cell_counts: boolKeep fill-count descriptors when cell-quality scoring is enabled.
matrix_joint_cell_q: boolKeep q-derived descriptors when cell-quality scoring is enabled.
matrix_joint_alternative_groups: boolLet coherent alternate matrix rows preserve a peptide during competition.
diagnostic_peptides_path: Option<String>Optional diagnostic export from the selected calibration only.
matrix_recurrence: boolAblate only run-recurrence classifier columns; preserve quantities and rows.
top_k: usizeKeep this many best-mass-error targets and decoys per feature. This caps the candidate set the discriminant sees, so setting it too low silently drops real peptides before RT can rescue them. Entrapment (human+yeast on single-run HeLa) showed 25 identified only ~half of what the search honestly supports: 25→105 IDs, 50→208, 100→275, all at ~1% entrapment FDP. 50 is the default (≈2× IDs over 25 at negligible cost); raise toward 100 for maximum depth at a runtime cost.
n_folds: usize§calibration_fdr: f64FDR used to select the provisional set for RT calibration.
bootstrap_rounds: usizeNumber of re-score rounds after the first calibration.
iterations: usize§max_depth: u32§shrinkage: f32§max_train_rows: usizeCap on training rows per fold-model (0 = no cap). Bounds training time.
seed_min_runs_frac: f64Seed features must appear in at least this fraction of samples. Lower for many-sample designs (e.g. dose-response) where a peptide need not be in every run; the RANSAC seed tolerates the extra contamination.
seed: u64Fallback seed for scoring’s random components. 0 = the shipped default
streams (see crate::seed_mix). uno --seed sets this value; explicit
rt_seed, cv_seed, or classifier_seed values take precedence.
rt_seed: Option<u64>Override only RANSAC RT-calibration pair sampling. None uses seed.
cv_seed: Option<u64>Override only cross-validation fold assignment. None uses seed.
classifier_seed: Option<u64>Override classifier row/column sampling and LightGBM hyperparameter
search. Applies to both Sequoia and LightGBM. None uses seed.
mass_anchor_ppm: f64Mass tolerance (ppm) the mass-anchor bootstrap starts at, and the ceiling it
tightens toward as it recalibrates the per-run mass shift + sigma. Default 10
(Orbitrap). For lower-accuracy instruments (e.g. timsTOF) set this wider —
e.g. 20 — plus [matching] ppm_tolerance = 20; the anchor then seeds wide and
tightens to single-digit ppm once the mass error is recalibrated on-data.
discriminant: StringDiscriminant: “deviation” (robust orthogonal RT+IM consistency, ms1searchpy style — default) or “gbdt” (semi-supervised boosted trees). On the MS1-only/saturated-mass regime the gbdt washes out the weak RT+IM signal, so the deviation score is the default.
ondata_rt: boolRefit the RT predictor on this run’s observed RTs (ridge on composition features) using the confident set, each iteration. The DirectMS1 trick: the frozen DeepLC model only rank-correlates ~0.3 on an unseen gradient, but a model fit to the data makes RT a strong discriminator. Default on.
ondata_rt_lambda: f64Ridge penalty for the on-data RT fit.
ondata_rt_finetune: boolFine-tune mode for the on-data RT fit (requires ondata_rt and an MLP RT
model). Instead of fitting a fresh ridge on raw composition features (a
weak linear model that discards the pretrained representation), refit the
readout over the MLP’s frozen penultimate embedding — keeping its learned
nonlinear RT structure while adapting offset/scale/shape to this run.
mass_anchor: boolBootstrap the RT calibration from MASS-ONLY protein identifications (ms1searchpy stage-1) instead of the per-peptide RANSAC seed. On dense single-run data the per-peptide seed is ~99% contaminated; confident proteins (mass multiplicity) give far cleaner RT anchors.
rt_calibrated: boolThe RT library is already calibrated to this run’s RT (e.g. DeepLC
calibrate_preds). uno then uses rt_diff = obs - pred directly and does
NOT apply its own calibration on top (which would double-calibrate and
distort the predictions).
ml_rescore: boolCV-gbdt PFM peptide-quality ranking, fed through a 10-step cumulative
qpred-bin ensemble protein score (ms1searchpy -ml 1 + final_iteration).
VALIDATED (2026-07-07, PXD015669 human+yeast entrapment, native biosaur2
features with isoerror/isoerror2/rt_width): 223 real/4 yeast (deviation
alone) -> 251 real/1 yeast with this on — deeper AND more honest. The
per-PFM classifier itself still barely separates decoys from dim-real
peptides on uno’s pure-Rust gbdt (dim_mean ~= DECOY_mean); the gain comes
from the ENSEMBLE STRUCTURE (10 cumulative thresholds, averaged, like
ms1searchpy’s final_iteration), not classifier quality. When a feature
file lacks the quality columns it correctly no-ops (guarded by a strict
better-than-baseline check).
ON by default (see ScoreConfig::default), and active in every benchmark
reported in the manuscript. It costs a re-run of the protein engine per
inclusion band, so it trades latency for depth. Set false for the plain
deviation path.
Implementations§
Source§impl ScoreConfig
impl ScoreConfig
pub fn effective_rt_seed(&self) -> u64
pub fn effective_cv_seed(&self) -> u64
pub fn effective_classifier_seed(&self) -> u64
Trait Implementations§
Source§impl Clone for ScoreConfig
impl Clone for ScoreConfig
Source§impl Debug for ScoreConfig
impl Debug for ScoreConfig
Source§impl Default for ScoreConfig
impl Default for ScoreConfig
Source§impl<'de> Deserialize<'de> for ScoreConfigwhere
ScoreConfig: Default,
impl<'de> Deserialize<'de> for ScoreConfigwhere
ScoreConfig: Default,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for ScoreConfig
impl RefUnwindSafe for ScoreConfig
impl Send for ScoreConfig
impl Sync for ScoreConfig
impl Unpin for ScoreConfig
impl UnsafeUnpin for ScoreConfig
impl UnwindSafe for ScoreConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.