1个不稳定版本
0.1.0 | 2024年5月19日 |
---|
140 在 数据库实现
250KB
694 行
模块概述: fcs_rs
fcs_rs
模块提供了一套基本的工具,用于操作和分析流式细胞术标准(FCS)文件。它包括读取FCS文件、提取元数据和处理数据段的方法,同时优雅地处理各种潜在错误。
支持FCS版本FCS3.0和FCS3.1。
主要功能
- 文件处理:以结构化和高效的方式打开和读取FCS文件。
- 元数据提取:从FCS文件中提取和验证元数据,确保所有所需信息可用。
- 数据处理:解析FCS文件中的数据段并将它们转换为可用的格式,如数据框。
- 错误处理:全面错误处理以处理文件操作期间可能出现的各种问题。
模块
fcs_rs
模块被分为几个子模块,每个子模块都专注于FCS文件处理的特定方面
- data:包含处理FCS文件数据段的结构和函数,包括解析和转换操作。
- header:包括读取和验证FCS文件头段的函数。
- text:提供读取和验证FCS文件文本段的函数。
错误处理
FcsError
枚举定义了在处理FCS文件时可能发生的各种错误,包括I/O错误、无效头、不支持的版本、元数据问题、缺少必需的关键字和无效的数据段。
使用示例
打开FCS文件
要打开FCS文件,请使用 FcsFile::open
方法
use fcs_rs::FcsFile;
let fcs_file = FcsFile::open("path/to/file.fcs")?;
读取FCS文件
读取FCS文件并提取元数据和数据段
use fcs_rs::{FcsFile, FcsError};
let fcs_file = FcsFile::open("path/to/file.fcs")?;
// Read the FCS file and return metadata and parameter data in a `FlowSample` struct
let fcs_data = fcs_file.read()?;
println!("{:?}", fcs_data.data); // Prints FCS data in a dataframe
shape: (5_555, 10)
┌───────────┬──────────┬──────────┬───────────┬───┬──────────┬──────────┬──────────┐
│ SSC-SSC-H ┆ FSC-H ┆ FSC-A ┆ SSC-SSC-W ┆ … ┆ APC-A ┆ Time ┆ FITC-A │
│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- │
│ f64 ┆ f64 ┆ f64 ┆ f64 ┆ ┆ f64 ┆ f64 ┆ f64 │
╞═══════════╪══════════╪══════════╪═══════════╪═══╪══════════╪══════════╪══════════╡
│ 545719.0 ┆ 423142.0 ┆ 390864.0 ┆ 94.0 ┆ … ┆ 200.0 ┆ 5.0 ┆ -50.0 │
│ 126.0 ┆ 212991.0 ┆ 317041.0 ┆ 15310.0 ┆ … ┆ 626392.0 ┆ 388875.0 ┆ -16.0 │
│ 121.0 ┆ 94.0 ┆ 99.0 ┆ 688422.0 ┆ … ┆ 496565.0 ┆ 314649.0 ┆ 251.0 │
│ 11877.0 ┆ 93.0 ┆ 5129.0 ┆ 465353.0 ┆ … ┆ 125.0 ┆ -58.0 ┆ 617030.0 │
│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
│ 115.0 ┆ 22.0 ┆ 147.0 ┆ 599985.0 ┆ … ┆ 208766.0 ┆ 321130.0 ┆ 6696.0 │
│ 4672.0 ┆ 50664.0 ┆ 135.0 ┆ 543467.0 ┆ … ┆ 36.0 ┆ 87.0 ┆ 397669.0 │
│ 437883.0 ┆ 750.0 ┆ 3382.0 ┆ 136.0 ┆ … ┆ 10998.0 ┆ 89.0 ┆ 204834.0 │
│ 357261.0 ┆ 628195.0 ┆ 427706.0 ┆ 124.0 ┆ … ┆ 11286.0 ┆ 1770.0 ┆ 123.0 │
└───────────┴──────────┴──────────┴───────────┴───┴──────────┴──────────┴──────────┘
查看有关样本的信息。
use fcs_rs::{FcsFile, FcsError};
let fcs_file = FcsFile::open("path/to/file.fcs")?;
let fcs_data = fcs_file.read()?;
println!("{}", fcs_data); // Prints sample information
FlowSample:
Machine: 1234567 Attune NxT Acoustic Focusing Cytometer (Lasers: BRVY)
Begin Time:
End Time:
Date:
File: file.fcs
Volume run: 250000
Labels:
Time (Time)
FSC-A (FSC-A)
SSC-A (SSC-A)
BL1-A (CMV-GFP-FITC-A)
BL3-A (CD11c-PerCP-Cy5.5-A)
YL4-A (--PE-Cy7-A)
YL2-A (TNF alpha ICS-PE-Texas Red-A)
YL1-A (CD123-R-PE-A)
RL1-A (IFN alpha ICS-APC-A)
RL2-A (CD45RA-Alexa Fluor 700-A)
RL3-A (CD45-APC-Cy7-A)
VL4-A (--Qdot 700-A)
VL3-A (--Qdot 605-A)
VL2-A (Live-Dead-Fixable Aqua-A)
VL1-A (CD69-Pacific Blue-A)
FSC-H (FSC-H)
SSC-H (SSC-H)
FSC-W (FSC-W)
SSC-W (SSC-W)
对FCS数据进行Arcsinh变换
读取FCS文件并提取元数据和数据段
use fcs_rs::{FcsFile, FcsError};
let fcs_file = FcsFile::open("path/to/file.fcs")?;
let fcs_data = fcs_file.read()?;
// Get the column names
let column_names = flow_sample.get_dataframe_columns();
// Perform arcsinh transformation of data with scaling factor of 5.0
flow_sample.arcsinh_transform(5.0, &column_names)?;
println!("{:?}", fcs_data.data); // Prints transformed FCS data
shape: (5_555, 10)
┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┐
│ FSC-A ┆ FSC-W ┆ SSC-SSC-A ┆ Time ┆ … ┆ FSC-H ┆ APC-A │
│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- │
│ f64 ┆ f64 ┆ f64 ┆ f64 ┆ ┆ f64 ┆ f64 │
╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╡
│ 22.533354 ┆ 6.109114 ┆ 21.705629 ┆ 0.346574 ┆ … ┆ 22.69205 ┆ 7.378071 │
│ 22.114697 ┆ 5.847766 ┆ 6.454475 ┆ 22.523151 ┆ … ┆ 21.319135 ┆ 23.476587 │
│ 5.972638 ┆ 15.808522 ┆ 14.130202 ┆ 22.09955 ┆ … ┆ 5.869126 ┆ 23.012064 │
│ 13.866457 ┆ 23.927268 ┆ 15.367728 ┆ NaN ┆ … ┆ 5.847766 ┆ 6.438551 │
│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
│ 6.762567 ┆ 11.167 ┆ 6.762567 ┆ 22.140327 ┆ … ┆ 2.988391 ┆ 21.279063 │
│ 6.592359 ┆ 22.740847 ┆ 13.824292 ┆ 5.714589 ┆ … ┆ 18.447066 ┆ 3.957715 │
│ 13.03357 ┆ 21.456107 ┆ 23.643495 ┆ 5.759973 ┆ … ┆ 10.021293 ┆ 15.392062 │
│ 22.713507 ┆ 5.847766 ┆ 23.071459 ┆ 11.738598 ┆ … ┆ 23.482336 ┆ 15.443761 │
└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┘
创建数据框
从列标题和对应的数据向量创建数据框
use fcs_rs::data::create_dataframe;
use polars::prelude::*;
let column_titles = vec!["APC-A".to_string(), "FSC-W".to_string()];
let data = vec![vec![1.0, 2.0, 3.0], vec![4.0, 5.0, 6.0]];
let df = create_dataframe(&column_titles, &data)?;
println!("{:?}", df);
结论
fcs_rs
模块为处理FCS文件提供了一个强大的框架。用户可以轻松高效地处理流式细胞术数据。
依赖关系
~20–33MB
~502K SLoC