Skip to main content

Crate peacoqc_rs

Crate peacoqc_rs 

Source
Expand description

PeacoQC quality control algorithms for flow cytometry

This crate implements all PeacoQC algorithms and provides a trait-based interface that works with any FCS data structure.

§Quick Start

use peacoqc_rs::{PeacoQCConfig, PeacoQCData, QCMode, peacoqc};

// Assuming you have an FCS struct that implements PeacoQCData
let config = PeacoQCConfig {
    channels: vec!["FL1-A".to_string(), "FL2-A".to_string()],
    determine_good_cells: QCMode::All,
    ..Default::default()
};

let result = peacoqc(&fcs, &config)?;
println!("Removed {:.2}% of events", result.percentage_removed);

§Integration Example

Here’s a complete example of integrating PeacoQC into an application:

use peacoqc_rs::{PeacoQCConfig, PeacoQCData, QCMode, peacoqc, remove_margins, remove_doublets};
use flow_fcs::Fcs; // If using flow-fcs crate
use std::time::Instant;

// Load FCS file (example using flow-fcs)
let mut fcs = Fcs::open("data.fcs")?;
let n_events_initial = fcs.n_events();

// Step 1: Remove margin events (optional)
let margin_config = peacoqc_rs::MarginConfig {
    channels: fcs.channel_names(),
    ..Default::default()
};
let margin_result = remove_margins(&fcs, &margin_config)?;
if margin_result.percentage_removed > 0.0 {
    fcs = fcs.filter(&margin_result.mask)?;
}

// Step 2: Remove doublets (optional)
let doublet_config = peacoqc_rs::DoubletConfig::default();
let doublet_result = remove_doublets(&fcs, &doublet_config)?;
if doublet_result.percentage_removed > 0.0 {
    fcs = fcs.filter(&doublet_result.mask)?;
}

// Step 3: Run PeacoQC
let start_time = Instant::now();
let channels = fcs.get_fluorescence_channels(); // Auto-detect channels
let config = PeacoQCConfig {
    channels,
    determine_good_cells: QCMode::All,
    mad: 6.0,
    it_limit: 0.6,
    consecutive_bins: 5,
    ..Default::default()
};

let peacoqc_result = peacoqc(&fcs, &config)?;

// Step 4: Apply filter
let clean_fcs = fcs.filter(&peacoqc_result.good_cells)?;
let n_events_final = clean_fcs.n_events();

println!("Events: {} → {} ({:.2}% removed)",
    n_events_initial,
    n_events_final,
    peacoqc_result.percentage_removed);
println!("Processing time: {:.2}s", start_time.elapsed().as_secs_f64());

See examples/basic_usage.rs and examples/tauri_command.rs for more complete examples.

Re-exports§

pub use error::PeacoQCError;
pub use error::Result;
pub use qc::DoubletConfig;
pub use qc::DoubletResult;
pub use qc::MarginConfig;
pub use qc::MarginResult;
pub use qc::PeacoQCConfig;
pub use qc::PeacoQCResult;
pub use qc::QCExportFormat;
pub use qc::QCExportOptions;
pub use qc::QCMode;
pub use qc::QCPlotConfig;
pub use qc::create_qc_plots;
pub use qc::export_csv_boolean;
pub use qc::export_csv_numeric;
pub use qc::export_json_metadata;
pub use qc::peacoqc;
pub use qc::peacoqc;
pub use qc::remove_doublets;
pub use qc::remove_margins;

Modules§

error
fcs
gpu
GPU acceleration for computationally intensive operations
qc
stats

Traits§

FcsFilter
Extension trait for FCS data structures to add filtering capabilities
PeacoQCData
Trait for data structures that can be used with PeacoQC

Functions§

preprocess_fcs
Apply preprocessing steps (compensation and transformation) to FCS data