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§
Traits§
- FcsFilter
- Extension trait for FCS data structures to add filtering capabilities
- PeacoQC
Data - Trait for data structures that can be used with PeacoQC
Functions§
- preprocess_
fcs - Apply preprocessing steps (compensation and transformation) to FCS data