开源不易,感谢支持
FCS文件解析帮助类,目前支持DataType为I、F、D 的3.2版本,Mode为L的3.1、3.0版本的FCS文件。3.2版本没有Mode关键字,默认是List存储。详细信息请查看文档
使用代码:
IEnumerable<FCS> fcslist = FCS.Factory.ReadFile(@"C:\test.fcs");//读取文件中全部数据集
FCS firstDataset = FCS.Factory.ReadFileOneDataset(@"C:\test.fcs");//读取文件中第一个数据集
firstDataset.CalculationCompensation();//计算补偿后的刻度值数据
firstDataset.ClearMeasurementCompensationScaleValues();//清除补偿后得刻度值数据
FCS.Factory.SaveToFCS(@"C:\test1.fcs",fcslist.ToArray());//保存数据集到文件
IFCS:主要输出对象
属性 |
含义 |
类型 |
说明 |
TextSegment |
文本段和补充文本段 |
Dictionary< string, string > |
文本段和补充文本段混合在一起,不受FCS文件的文本段长度限制 |
Measurements |
通道参数集合 |
IList< Measurement > |
Measurement是通道类,记录着通道的数据、参数等 |
ByteOrder |
字节序 |
ByteOrder |
$BYTEORD |
CellsType |
测量对象类型 |
string |
血液、唾液 $CELLS |
Comment |
说明注释 |
string |
$COM |
FlowCytometerType |
仪器名称 |
string |
$CYT |
FlowCytometerSerialNumber |
流式细胞仪的序列号 |
string |
$CYTSN |
DataType |
数据类型 |
DataType |
$DATATYPE |
InvestigatorName |
实验发起人姓名 |
string |
$EXP |
DataFileName |
包含数据集的数据文件的名称 |
string |
不包含路径。$FIL |
Institution |
机构或实验室名称 |
string |
$INST |
Lost |
由于计算机忙于其他任务⽽丢失的事件数 |
uing |
$LOST |
NextData |
下一个数据集偏移位置 |
long |
$NEXTDATA |
Operator |
仪器操作人员名称 |
string |
$OP |
MeasurementCount |
通道数量 |
int |
$PAR |
ProjectName |
实验项目名称 |
string |
$PROJ |
SpecimenLabel |
样本标识 |
string |
$SMNO |
SpecimenSource |
样本来源 |
string |
$SRC |
System |
系统名称 |
string |
$SYS |
TimeStep |
时间步伐,Time参数使用 |
float? |
$TIMESTEP |
TotalNumber |
事件总数 |
int |
$TOT |
Threshold |
阈值 |
Threshold |
$TR |
CreateNewMeasurement() |
创建新的Measurement通道参数对象 |
IMeasurement |
|
CalculationCompensation() |
计算补偿后数据 |
void |
|
ClearMeasurementCompensationScaleValues() |
清除通道参数的补偿刻度值数据 |
void |
|
FCS30:继承自IFCS
属性 |
含义 |
类型 |
说明 |
AnalysisSegment |
分析段数据 |
Dictionary< string, string > |
|
BeginTime |
采集开始时间 |
string |
$BTIM |
EndTime |
采集结束时间 |
string |
$ETIM |
Date |
采集日期 |
string |
$DATE |
Compensation |
补偿 |
Compensation |
$COMP |
FCS31:继承自IFCS
属性 |
含义 |
类型 |
说明 |
AnalysisSegment |
分析段数据 |
Dictionary< string, string > |
|
BeginTime |
采集开始时间 |
string |
$BTIM |
EndTime |
采集结束时间 |
string |
$ETIM |
Date |
采集日期 |
string |
$DATE |
LastModificationDateTime |
最后修改时间戳 |
string |
$LAST_MODIFIED |
LastModificationUserName |
最后修改人姓名 |
string |
$LAST_MODIFIER |
Originality |
文件原创性 |
Originality |
$ORIGINALITY |
PlateID |
孔板的唯⼀标识符 |
string |
$PLATEID |
PlateName |
孔板的名称 |
string |
$PLATENAME |
Spillover |
溢出 |
Spillover |
$SPILLOVER |
SampleVolume |
使用的样本体积/nL |
float |
$VOL |
WellID |
孔盘上的位置 |
string |
$WELLID |
FCS32:继承自IFCS
属性 |
含义 |
类型 |
说明 |
AnalysisData |
分析端数据字节数组 |
byte[] |
可能是xml,键值对,json,二进制文件等 |
BeginDateTime |
采集开始时间 |
DateTime |
$BEGINDATETIME |
EndDateTime |
采集结束时间 |
DateTime |
$ENDDATETIME |
CarrierID |
载体ID标识,孔盘标识 |
string |
$CARRIERID |
CarrierType |
载体类型,孔盘类型 |
string |
$CARRIERTYPE |
FlowRate |
液流速度 |
string |
$FLOWRATE |
LastModificationDateTime |
最后修改时间戳 |
string |
$LAST_MODIFIED |
LastModificationUserName |
最后修改人姓名 |
string |
$LAST_MODIFIER |
LocationID |
载体上的位置,孔盘上的位置 |
string |
$LOCATIONID |
Originality |
文件原创性 |
Originality |
$ORIGINALITY |
Spillover |
溢出 |
Spillover |
$SPILLOVER |
UnstainedCenters |
未染⾊细胞或粒⼦群的平均背景和⾃发荧光 |
UnstainedCenters |
$UNSTAINEDCENTERS |
UnstainedInfo |
描述细胞或粒⼦源、⻔控、类型⽤于获取 $UNSTAINEDCENTERS 向量的统计量 |
string |
$UNSTAINEDINFO |
SampleVolume |
使用的样本体积/nL |
float |
$VOL |
IMeasurement:通道参数
属性 |
含义 |
类型 |
说明 |
Name |
名称 |
string |
通道名称 |
BitNumber |
数据位数 |
uint |
只支持能被8整除的数,DataType=F时为固定32,DataType=D时为固定64 |
ByteNumber |
BitNumber/8 |
int |
位数转字节数 |
Amplification |
放大类型 |
Amplification |
DataType为D/F时,Amplification固定为 0,0 |
Range |
最大值 |
ulong |
参数值的区间。只用于DataType=I,因为F和D情况下,会超出这个范围 |
SuggestedVisualizationScale |
建议可视化范围 |
SuggestedVisualizationScale |
FCS3.1中新增的可选属性 |
OpticalFilter |
光学滤波器名称 |
string |
|
Gain |
增益 |
double |
3.2版本只能应用于DataType=I,DataType为F、D时,该值固定为1。3.1、3.0版本不受限制 |
Wavelength |
激发波长 |
string |
|
Power |
激发功率 |
uint |
|
LongName |
全称 |
string |
|
Detector |
探测器类型 |
string |
|
Voltage |
探测器电压 |
double |
|
ChannelValues |
该通道的通道值数据集合 |
IList |
内部值可能是double、float、ulong、uint、ushort、byte |
CompensationScaleValues |
补偿后的刻度值-需要计算PnE对数放大,PnG线性放大,COMP补偿或Spillover溢出 |
List< double > |
|
AddOneValue(byte[] bytes, DataType dataType, ByteOrder byteOrd) |
向数据集中添加一个数据 |
void |
第一个参数为要添加的数据(字节数组形式),DataType=I时,执行范围(PnR)过滤(v%PnR) |
BitMask(T v) |
范围过滤(v%PnR) |
T |
DataType=F、D时不过滤 |
AmplificationCalculation(double value) |
PnE对数放大计算 |
double |
3.1、3.2只用于DataType=I |
GainCalculation(double value) |
PnG线性放大计算(value / PnG) |
double |
3.2版本只用于DataType=I |
GetScaleValue(int index, DataType dataType) |
获取刻度值,PnE,PnG计算后的值 |
double |
|
Measurement30:继承自IMeasurement
属性 |
含义 |
类型 |
说明 |
LightCollectedPercent |
检测器为 FCS 测量编号 n 收集的光量,表⽰为荧光物体发出的光的百分⽐ |
int? |
$PnP |
Measurement31:继承自IMeasurement
属性 |
含义 |
类型 |
说明 |
Calibration |
校准 |
Calibration |
$PnCALIBRATION |
SuggestedVisualizationScale |
建议可视化比例 |
SuggestedVisualizationScale |
$PnD |
LightCollectedPercent |
检测器为 FCS 测量编号 n 收集的光量,表⽰为荧光物体发出的光的百分⽐ |
int? |
$PnP |
CalibrationCalculation(double value) |
计算校准 $PnCALIBRATION |
double |
value*Slope+Intercept 乘以斜率加上偏移 |
Measurement32:继承自IMeasurement
属性 |
含义 |
类型 |
说明 |
Analyte |
目标分子或过程 |
string |
$PnANALYTE |
Calibration |
校准 |
Calibration |
$PnCALIBRATION |
SuggestedVisualizationScale |
建议可视化比例 |
SuggestedVisualizationScale |
$PnD |
DataType |
该通道数据类型 |
DataType |
3.2版本新增,区别默认数据类型。$PnDataType |
DetectorName |
探测器名称 |
string |
$PnDET |
Feature |
特征 |
Feature |
$PnFEATURE |
Dye |
染料(荧光色素)或同位素 |
string |
$PnTAG |
Type |
测量类型 |
MeasurementType |
$PnTYPE |
CalibrationCalculation(double value) |
计算校准 $PnCALIBRATION |
double |
value*Slope+Intercept 乘以斜率加上偏移 |
Amplification:放大类型参数 PnE
公式:v=10^(PowerNumber * xc /(PnR)) ZeroValue
| 属性 | 含义 | 类型 | 说明 |
| --- | --- | --- | --- |
| PowerNumber | 10的次方数 | double | |
| ZeroValue | 0对应的转换值 | double | |
ByteOrder 数据字节排序方式 $BYTEORD
属性 |
含义 |
Unknown |
未知 |
LittleEndian |
低位在前 |
BigEndian |
高位在前 |
Calibration 校准 $PnCALIBRATION
属性 |
含义 |
类型 |
说明 |
Slope |
斜率 |
float |
|
Intercept |
校准偏移 |
float |
|
Name |
单位的名称 |
string |
|
Compensation 补偿 3.0:$COMP
属性 |
含义 |
类型 |
说明 |
Coefficients |
补偿值集合 |
float[][] |
|
DataType 数据格式 $DATATYPE
属性 |
含义 |
Unknown |
未知 |
I |
整数 |
F |
单精度浮点 |
D |
双精度浮点 |
Feature 参数特征枚举 $PnFEATURE
属性 |
含义 |
Unknown |
未知 |
Area |
面积 |
Width |
宽度 |
Height |
高度 |
MeasurementType 参数类型枚举 $PnTYPE
属性 |
含义 |
Unknown |
未知 |
ForwardScatter |
前向散射 |
SideScatter |
侧散射 |
RawFluorescence |
原始荧光 |
UnmixedFluorescence |
非混合荧光 |
Mass |
质量 |
Time |
时间 |
ElectronicVolume |
电量 |
Classification |
分类 |
Index |
索引 |
Mode 存储模式 $MODE
Originality 数据文件的原始性 $ORIGINALITY
属性 |
含义 |
Unknown |
未知 |
Original |
原始数据,仪器生成 |
NonDataModified |
数据段未修改 |
Appended |
只向数据段追加数据 |
DataModified |
修改过的 |
Spillover 溢出 3.1,3.2:$SPILLOVER
属性 |
含义 |
类型 |
说明 |
MeasurementNames |
参数名称集合,需要与PnN相同 |
string[] |
|
Coefficients |
补偿值集合 |
float[][] |
|
SuggestedVisualizationScale:推荐的可视化范围 $PnD
属性 |
含义 |
类型 |
说明 |
Type |
类型 |
SuggestedVisualizationScaleType |
Linear/Logarithmic |
Min |
最小值 |
double |
|
Max |
最大值 |
double |
|
Threshold:阈值 $TR
属性 |
含义 |
类型 |
说明 |
MeasurementName |
阈值通道名称 |
string |
|
ThresholdValue |
阈值 |
float |
|
UnstainedCenters:未染⾊中⼼ $UNSTAINEDCENTERS
属性 |
含义 |
类型 |
说明 |
Values |
|
Dictionary< string, float > |
|
其它
FCS文件格式说明文档可在此下载 Github、Gitee;
FCS文件可在此下载 flowrepository
更新日志
3.0.1
1、修复$TIMESTEP参数计算bug
3.0.0
1、更好的支持FCS3.2版本
2、标准协议中定义的内容以属性形式呈现和设置
3、重构优化部分代码
4、修复一些BUG
5、完善补偿和刻度计算功能
2.0.3
1、修复数据段过大时无法保存bug
2、文件覆盖保存前,先清空文件流
3、FCS3.0的补偿值关键字和格式调整
2.0.2
1、规范属性名称
2、Measurement类实现INotifyPropertyChanged接口
2.0.1
1、添加通道值转刻度值方法
2、数据解析时,实例化数组时设置数组的Capacity属性
3、TOT属性类型更改为int
2.0.0
1、更改输出对象FCS,输出对象无关文件信息(版本、段起止位置等)
2、添加3.2版本的支持
3、添加保存功能
4、修复一些bug
1.0.0
1、添加读取和解析文件功能