MCPcopy Index your code
hub / github.com/SingleRust/SingleRust / normalize_dispersions

Function normalize_dispersions

src/memory/processing/hvg/mod.rs:355–382  ·  view source on GitHub ↗

Normalize dispersions by subtracting expected values and dividing by standard deviation. This creates z-scores for dispersion values, allowing identification of genes with unusually high variability relative to genes with similar expression levels. ## Parameters `log_dispersions` - Log-transformed dispersion values `bin_indices` - Bin assignment for each gene `bin_means` - Expected dispersion fo

(
    log_dispersions: &[f64],
    bin_indices: &[usize],
    bin_means: &[f64],
    bin_stds: &[f64],
)

Source from the content-addressed store, hash-verified

353///
354/// Higher values indicate genes that are more variable than expected.
355fn normalize_dispersions(
356 log_dispersions: &[f64],
357 bin_indices: &[usize],
358 bin_means: &[f64],
359 bin_stds: &[f64],
360) -> anyhow::Result<Vec<f64>> {
361 let mut normalized_dispersions = vec![0.0; log_dispersions.len()];
362
363 for (i, &disp) in log_dispersions.iter().enumerate() {
364 let bin_idx = bin_indices[i];
365
366 if bin_idx >= bin_means.len() {
367 normalized_dispersions[i] = f64::NAN;
368 continue;
369 }
370
371 let mean = bin_means[bin_idx];
372 let std = bin_stds[bin_idx];
373
374 if disp.is_nan() || mean.is_nan() || std.is_nan() || std == 0.0 {
375 normalized_dispersions[i] = f64::NAN;
376 } else {
377 normalized_dispersions[i] = (disp - mean) / std;
378 }
379 }
380
381 Ok(normalized_dispersions)
382}
383
384/// Select highly variable genes based on dispersion scores and expression filters.
385///

Callers 1

compute_seurat_hvgFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected