#flow #fcs #cytometry

fcs_rs

操作和分析流式细胞术标准(FCS)文件的基本工具

1个不稳定版本

0.1.0 2024年5月19日

140数据库实现

MIT 许可证

250KB
694

Rust CI

模块概述: 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   │
│ ------------       ┆   ┆ ---------      │
│ f64f64f64f64       ┆   ┆ f64f64f64      │
╞═══════════╪══════════╪══════════╪═══════════╪═══╪══════════╪══════════╪══════════╡
│ 545719.0423142.0390864.094.0      ┆ … ┆ 200.05.0-50.0    │
│ 126.0212991.0317041.015310.0   ┆ … ┆ 626392.0388875.0-16.0    │
│ 121.094.099.0688422.0  ┆ … ┆ 496565.0314649.0251.0    │
│ 11877.093.05129.0465353.0  ┆ … ┆ 125.0-58.0617030.0 │
│ …         ┆ …        ┆ …        ┆ …         ┆ … ┆ …        ┆ …        ┆ …        │
│ 115.022.0147.0599985.0  ┆ … ┆ 208766.0321130.06696.0   │
│ 4672.050664.0135.0543467.0  ┆ … ┆ 36.087.0397669.0 │
│ 437883.0750.03382.0136.0     ┆ … ┆ 10998.089.0204834.0 │
│ 357261.0628195.0427706.0124.0     ┆ … ┆ 11286.01770.0123.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     │
│ ------------       ┆   ┆ ------       │
│ f64f64f64f64       ┆   ┆ f64f64       │
╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╡
│ 22.5333546.10911421.7056290.346574  ┆ … ┆ 22.692057.378071  │
│ 22.1146975.8477666.45447522.523151 ┆ … ┆ 21.31913523.476587 │
│ 5.97263815.80852214.13020222.09955  ┆ … ┆ 5.86912623.012064 │
│ 13.86645723.92726815.367728 ┆ NaN       ┆ … ┆ 5.8477666.438551  │
│ …         ┆ …         ┆ …         ┆ …         ┆ … ┆ …         ┆ …         │
│ 6.76256711.1676.76256722.140327 ┆ … ┆ 2.98839121.279063 │
│ 6.59235922.74084713.8242925.714589  ┆ … ┆ 18.4470663.957715  │
│ 13.0335721.45610723.6434955.759973  ┆ … ┆ 10.02129315.392062 │
│ 22.7135075.84776623.07145911.738598 ┆ … ┆ 23.48233615.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