# Calibration 分析流程

# Calibration Analysis 流程v3.8.0/v3.10.1Latest

说明

示例来源:下述所有示例说明的数据来源为《PCS校准检测盒》CPC-0001。
参数来源:Database (DB)、calibration.json、static.json、instrument.json、common.json
参数来源格式说明:

  • 数据库.表.列名:例如 DB.cartridge.analysis_type_id,表示该参数是获取自数据库Database中Cartridge表对应的 analysis_type_id 列。
  • 数据库.表:例如 DB. analysis_type,表示该参数是获取自数据库 Database 中 Analysis_type 表。
  • Cartridge Info.spray_voltag_pos|neg :竖线 “|”,表示 “或”

# 一、校准流程初始化

# 1 读取编码并初始化分析流程

环节概述:将试剂盒插入进样口后,设备自动读取当前试剂盒绑定的编码 (Cartridge Code)。点击一键检测后,在数据库中查询所对应的分析类型,并初始化对应的分析流程。
参数来源:试剂盒RFID绑定的编号、DB.cartridge.analysis_type_id、DB.analysis_type

示例说明

内容 对应值
试剂盒RFID绑定的编码 CPC-0001
cartridge.analysis_type_id 2
analysis_type Calibration

# 2 获取试剂盒信息 (Cartridge_Info)

环节概述
通过试剂盒绑定编码 (Cartridge Code),在数据库中查询对应的试剂盒信息 (Cartridge Info)

参数来源
试剂盒绑定编码、DB.cartridge、DB.analysis_type.name

参数说明
参见MOS Doc / Guide / 方法参数配置指南

示例说明

{
    "cartridge_code": "CPC-0001",
    "name_cn": "正模式PCS校准",
    "name_en": "正模式PCS校准",
    "description_cn": "正模式PCS校准盒",
    "description_en": "正模式PCS校准盒",
    "pre_spray_time": 500,
    "spray_voltage_pos": 4500,
    "spray_voltage_neg": 3500,
    "binding_params": {
      "tags": [],
      "compounds": [],
      "compounds_intstd": [],
      "compounds_black_list":[],
      "target_list":[]
    },
    "children": {},
    "evaluation_params": {},
    "acquisition_params": [],
    "extra_params": {},
    "scan_mode_list": [
      "normal",
      "high_quality"
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 3 创建校准项目列表 (analysis_list_)

环节概述

  • 根据当前仪器的检测设置中选定的扫描模式和试剂盒支持的扫描模式,重新调整scan_mode_list。
  • 创建本次校准流程需要执行的校准项目,便于后续执行流程的时候遍历。
    参数来源
    质量校准:试剂盒配置及仪器屏幕/设置/检测设置/校准模式
    气压校准:仪器屏幕/设置/检测设置/气压校准开关

示例说明
["normal","high_quality","pressure"]

# 二、执行校准流程

# (一) 质量轴及增益校准

# 1 获取分析参数analysis_params

环节概述
根据当前校准的项目获取对应参数。

参数来源
calibration.json/parameters/mass_calibration

示例说明

//参数来源:calibration.json/parameters/mass_calibration

{"mass_calibration": {
            "algorithms": {
                "peak_matching_gain": {
                    "isotope_list_list": [
                        [
                            74.0964,
                            75.0998,
                            76.1028
                        ],
                        [
                            130.1596,
                            131.1624,
                            132.1659
                        ],
                        [
                            242.284,
                            243.2876,
                            244.2909,
                            245.295
                        ],
                        [
                            354.409,
                            355.4128,
                            356.4161,
                            357.42
                        ],
                        [
                            455.2904,
                            456.2938,
                            457.2971,
                            458.3,
                            459.3025
                        ],
                        [
                            466.535,
                            467.538,
                            468.5413,
                            469.5452,
                            470.5486
                        ],
                        [
                            578.6598,
                            579.6632,
                            580.6665,
                            581.6705,
                            582.6739
                        ],
                        [
                            690.785,
                            691.7884,
                            692.7917,
                            693.7951,
                            694.7991
                        ]
                    ],
                    "isotope_list_list_neg_desc": "calculate gain with hard code top 8 peaks",
                    "isotope_list_list_neg": [],
                    "ms1_mz_tol": 0.5,
                    "peak_matched_cnt_min": 0,
                    "threshold": 0.001
                },
                "peak_matching_mass": {
                    "ms1_mz_rel_tol": 0.015,
                    "ms1_mz_tol": 1,
                    "peaks_missing_cnt_max": 2,
                    "peak_checking_list": [
                        455.29
                    ],
                    "peak_checking_list_neg": []
                },
                "peak_picking_gain": {
                    "distance_th": 0.5,
                    "max_count": 100000,
                    "min_intensity_abs": 0.001,
                    "min_intensity_rel": 0,
                    "top_count": 100000
                },
                "peak_picking_mass": {
                    "distance_th": 5,
                    "max_count": 1000,
                    "min_intensity_abs": 8000.0,
                    "min_intensity_rel": 0,
                    "top_count": 30
                }
            },
            "calib_mode_list": [
                {
                    "_scan_mode": "normal",
                    "std_peak_list": [
                        74.096,
                        130.159,
                        242.284,
                        354.409,
                        466.535,
                        578.66,
                        690.785
                    ],
                    "sub_params": [
                        {
                            "method": {
                                "method_type": "MS1",
                                "scan_mass_end": 1000,
                                "scan_mass_start": 50
                            },
                            "std_peak_1": 242.284,
                            "std_peak_2": 466.535,
                            "target_tic_max": 12000,
                            "target_tic_min": 3000
                        }
                    ]
                },
                {
                    "_scan_mode": "high_mass",
                    "std_peak_list": [
                        74.096,
                        130.159,
                        242.284,
                        354.409,
                        466.535,
                        578.66,
                        690.785,
                        922.01,
                        1022.004,
                        1121.998,
                        1221.991,
                        1321.985,
                        1421.978
                    ],
                    "sub_params": [
                        {
                            "desc": "only calculate_detector_gain in this range",
                            "method": {
                                "method_type": "MS1",
                                "scan_mass_end": 800,
                                "scan_mass_start": 50
                            },
                            "std_peak_1": 242.284,
                            "std_peak_2": 466.535,
                            "target_tic_max": 12000,
                            "target_tic_min": 3000
                        },
                        {
                            "method": {
                                "method_type": "MS1",
                                "scan_mass_end": 1500,
                                "scan_mass_start": 800
                            },
                            "std_peak_1": 922.01,
                            "std_peak_2": 1321.985,
                            "target_tic_max": 12000,
                            "target_tic_min": 3000
                        }
                    ]
                },
                {
                    "_scan_mode": "high_quality",
                    "std_peak_list": [
                        74.096,
                        130.159,
                        242.284,
                        354.409,
                        466.535,
                        578.66,
                        690.785
                    ],
                    "sub_params": [
                        {
                            "method": {
                                "method_type": "MS1",
                                "scan_mass_end": 1000,
                                "scan_mass_start": 50
                            },
                            "std_peak_1": 242.284,
                            "std_peak_2": 466.535,
                            "target_tic_max": 12000,
                            "target_tic_min": 3000
                        }
                    ]
                },
                {
                    "_scan_mode": "customized",
                    "std_peak_list": [
                        74.096,
                        130.159,
                        242.284,
                        354.409,
                        466.535,
                        578.66,
                        690.785
                    ],
                    "sub_params": [
                        {
                            "method": {
                                "method_type": "MS1",
                                "scan_mass_end": 1000,
                                "scan_mass_start": 50
                            },
                            "std_peak_1": 242.284,
                            "std_peak_2": 466.535,
                            "target_tic_max": 12000,
                            "target_tic_min": 3000
                        }
                    ]
                }
            ],
            "detector_gain": {
                "inj_size_ratio_p2n": 1.05,
                "range":[1e5, 5e7]
            },
            "enabled": 1,
            "mass_axis": {
                "cycle": 3,
                "delta_mz_max": 0.5,
                "dre": {
                    "max_times": 10,
                    "method": {
                        "average": 1,
                        "delay": 0,
                        "inj_lmco_mz": 50
                    },
                    "min_step_size": 0.01,
                    "retry_enabled": 1,
                    "spray_validation": {
                        "invalid_times_max": 2,
                        "valid_tic_min": 100
                    },
                    "update_inj_size": 1,
                    "window_lifespan_max": 5,
                    "window_size_extension": 0.5,
                    "window_size_min": 0.1
                },
                "dre_enabled_per_cycle": 1,
                "inherited_matched_peaks_enabled": 1,
                "inj_size_history": [
                    [
                        30
                    ],
                    [
                        30
                    ],
                    [
                        30
                    ]
                ],
                "inj_size_window": 10,
                "cycle_interval": 0,
                "spec_average": 0
            }
        }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251

# 2 整合当前校准项目的校准参数calib_params

环节概述
根据当前校准项目,获取对应参数;根据质量扫描范围调整LMCO和标准峰列表;设置系统极性为POS

参数来源
calibration.json/parameters/mass_calibration、common.json/method_parameters_default、common.json/scan_mode_list、instrument.json/calibration

示例说明

{"calib_params":
{
    "method":{
        "average": 1,                   //参数来源:common.json/method_parameters_default
        "cid_q": 0.25,                  //参数来源:common.json/method_parameters_default
        "iso_q": 0.75,                  //参数来源:common.json/method_parameters_default
        "pre_iso_q": 0.75,              //参数来源:common.json/method_parameters_default
        "pt_per_th": 100,               //参数来源:common.json/method_parameters_default
        "scan_mass_end": 1000,          //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/scan_mode = normal/sub_params/method
        "scan_mass_start": 50,          //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/scan_mode = normal/sub_params/method
        "scan_q": 0.75,                 //参数来源:common.json/method_parameters_default|common.json/scan_mode_list/method/normal|high_quality|high_mass
        "scan_speed": 1|1.0|0.5|0.5,    //参数来源:common.json/method_parameters_default|common.json/scan_mode_list/method/normal|high_quality|high_mass
        "trap_q": 0.3,                  //参数来源:common.json/method_parameters_default
        "method_type": "MS1"            //参数来源:代码设置
    },
    "scan_mode": "normal",              //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/_scan_mode
    "sub_calib_params_list":[{
        "method": {
            "method_type": "MS1",       //参数来源:代码设置
            "scan_mass_end": 1000,      //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/scan_mode = normal/sub_params/method
            "scan_mass_start": 50,      //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/scan_mode = normal/sub_params/method
            "scan_mode": "normal",      //参数来源:Cartridge Info/scan_mode_list
            "scan_q": 0.75,             //参数来源:common.json/scan_mode_list/method/normal|high_quality|high_mass
            "scan_speed": 1,            //参数来源:common.json/scan_mode_list/method/normal|high_quality|high_mass
            "inj_lmco_mz": 50           //参数来源:代码计算
        },
        "std_peak_1": 242.284,          //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params
        "std_peak_2": 466.535,          //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params
        "target_tic_max": 12000,        //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params
        "target_tic_min": 3000,         //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params
        "std_peak_list":[74.096,130.159,242.284,354.409,466.535,578.66,690.785]
    }]
}}

//以下参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params
// normal、high_qulity 只有1个sub_params,high_mass 有2个sub_params
// normal、high_qulity
{"sub_calib_params_list":[
    {
        "method": {
            "method_type": "MS1",                   //参数来源:代码设置
            "scan_mass_end": 1000,                  //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params/method
            "scan_mass_start": 50,                  //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params/method
            "scan_mode": "normal|high_quality",     //参数来源:Cartridge Info/scan_mode_list
            "scan_q": 0.75,                         //参数来源:common.json/scan_mode_list/method/normal|high_quality
            "scan_speed": 1.0|0.5,                  //参数来源:common.json/scan_mode_list/method/normal|high_quality
            "inj_lmco_mz": 50                       //参数来源:代码计算
        },
        "std_peak_1": 242.284,
        "std_peak_2": 466.535,
        "target_tic_max": 12000,
        "target_tic_min": 3000,
        "std_peak_list":[74.096,130.159,242.284,354.409,466.535,578.66,690.785]
    }
]}

// high_mass
{"sub_calib_params_list":[
    {
        "method": {
            "method_type": "MS1",       //参数来源:代码设置
            "scan_mass_end": 800,       //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params/method
            "scan_mass_start": 50,      //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params/method
            "scan_mode": "high_mass",   //参数来源:Cartridge Info/scan_mode_list
            "scan_q": 0.75,             //参数来源:common.json/scan_mode_list/method/high_mass
            "scan_speed": 0.5,          //参数来源:common.json/scan_mode_list/method/high_mass
            "inj_lmco_mz": 50           //参数来源:代码计算
        },
        "std_peak_1": 242.284,
        "std_peak_2": 466.535,
        "target_tic_max": 12000,
        "target_tic_min": 3000,
        "std_peak_list":[74.096,130.159,242.284,354.409,466.535,578.66,690.785]
    },
    {
        "method": {
            "method_type": "MS1",       //参数来源:代码设置
            "scan_mass_end": 1500,      //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params/method
            "scan_mass_start": 800,     //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params/method
            "scan_mode": "high_mass",   //参数来源:Cartridge Info/scan_mode_list
            "scan_q": 0.75,             //参数来源:common.json/scan_mode_list/method/high_mass
            "scan_speed": 0.5,          //参数来源:common.json/scan_mode_list/method/high_mass
            "inj_lmco_mz": 150          //参数来源:代码计算
        },
        "std_peak_1": 922.01,
        "std_peak_2": 1321.985,
        "target_tic_max": 12000,
        "target_tic_min": 3000,
        "std_peak_list":[922.01,1022.004,1121.998,1221.991,1321.985,1421.978]
    }
]}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92

LMCO (inj_lmco_mz) 设置:
质量扫描起始值m/z在50-300之间,LMCO设置为50;起始值m/z在300-1000之间,LMCO设置为150。

标准峰列表(std_peaks_list) 设置:
根据当前扫描模式对应的质量范围,获取对应范围内的标准峰值列表。

# 3 质量轴校准 (3轮校准)

质量轴校准共3轮。每轮的流程分别为分段DRE及谱图寻峰 => 分段质量轴校准 => 参数更新。最后一轮参数更新后,进行标准峰连续性核查和校验峰核查。

# 3.1 执行DRE流程
# 3.1.1 DRE参数整合

环节概述
根据当前校准的扫描模式进行DRE参数的整合,用于执行DRE扫描流程。若扫描模式中存在多段质量范围时,则分段进行DRE。

参数说明

进样量相关参数设置:

  • 校准进样量初始值(inj_size_init) :首轮参数为校准进样量历史的中位数,第二、三轮的进样量为上一轮DRE最佳进样量。
  • 校准进样量上限(inj_size_max) :上次校准进样量 + inj_size_window,该参数介于20-60之间,若计算值大于60时,取60作为上限。
  • 校准进样量下限(inj_size_min) :上次校准进样量 - inj_size_window,该参数介于20-60之间,若计算值小于20时,取20作为下限。
  • 参数来源:calibration.json/parameters/mass_calibration/mass_axis/inj_size_window = 10。其他参数参见MOS Doc / Guide / 方法参数配置指南

示例说明

//参数来源:calibration.json/parameters/mass_calibration/mass_axis
{
    "cycle": 3,
    "delta_mz_max": 0.5,
    "dre": {
        "max_times": 10,
        "method": {
            "average": 1,               //参数来源:calibration.json/parameters/mass_calibration/mass_axis/dre
            "delay": 0,                 //参数来源:calibration.json/parameters/mass_calibration/mass_axis/dre
            "method_type": "MS1",       //参数来源:代码设置
            "scan_mass_end": 1000,      //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/scan_mode = normal/sub_params/method
            "scan_mass_start": 50,      //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/scan_mode = normal/sub_params/method
            "scan_mode": "normal",      //参数来源:Cartridge Info/scan_mode_list
            "scan_q": 0.75,             //参数来源:common.json/scan_mode_list/method/normal|high_quality|high_mass
            "scan_speed": 1,            //参数来源:common.json/scan_mode_list/method/normal|high_quality|high_mass
            "inj_lmco_mz": 50,          //参数来源:代码计算
            "spray_voltage":4500        //参数来源:Cartridge Info/spray_voltage_pos|neg
        },
        "min_step_size": 0.01,
        "retry_enabled": 1,
        "spray_validation": {
            "invalid_times_max": 2,
            "valid_tic_min": 100
        },
        "update_inj_size": 0,           //参数来源:第一、二轮为0,第三轮为1。只有最后一轮的进样量会记录到进样量历史列表中
        "window_lifespan_max": 5,
        "window_size_extension": 0.5,
        "window_size_min": 0.1,
        "target_tic_max": 12000,        //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params
        "target_tic_min": 3000,         //参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params
        "inj_size_init":30,             //参数来源:calibration.json/parameters/mass_calibration/mass_axis/inj_size_history 根据进样量历史取中位数
        "inj_size_max":50,              //参数来源:代码计算
        "inj_size_min":20               //参数来源:代码计算
    },
    "dre_enabled_per_cycle": 1,
    "inherited_matched_peaks_enabled": 1,
    "inj_size_history": [[30],[30],[30]],
    "inj_size_window": 10,
    "cycle_interval": 0,
    "spec_average": 0
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 3.1.2 执行DRE扫描流程
# 3.1.3 判断DRE返回的结果状态

环节概述:判断DRE流程的结果状态
判断结果

  • DRE结果失败,停止校准流程;
  • DRE结果成功,继续执行后续流程。
# 3.1.4 DRE谱图寻峰

示例说明

//以下参数来源:calibration.json/parameters/mass_calibration/algorithms/peak_picking_mass
"peak_picking_mass": {
    "distance_th": 5,
    "max_count": 1000,
    "min_intensity_abs": 8000.0,
    "min_intensity_rel": 0,
    "top_count": 30
}
1
2
3
4
5
6
7
8
# 3.1.5 获取相关参数并计算m/z

示例说明

//以下参数来源:calibration.json/parameters/mass_calibration/calib_mode_list/scan_mode = normal|high_quality|high_mass /sub_params/method
{
    "normal":{"scan_mass_end": 1000,"scan_mass_start": 50},
    "high_quality":{"scan_mass_end": 1000,"scan_mass_start": 50},
    "high_mass":[{"scan_mass_end": 800,"scan_mass_start": 50},{"scan_mass_end": 1500,"scan_mass_start": 800}]
}

//以下参数来源:common.json/method_parameters_default
"pt_per_th": 100,

//以下参数来源:common.json/scan_mode_list/method/normal|high_quality|high_mass
"scan_q": 0.75,

//以下参数来源:instrument.json/parameters/scan_profiles/"scan_mode": "normal"/spec_params/mass_calib
{
    "mode": "piecewise_linear_keep_slope",
    "mode_desc": "linear, poly_2, piecewise_linear, piecewise_linear_keep_slope, staircase",
    "r2": 1,
    "x": [2597.031538,4591.257077,8585.040308,12574.20234,16559.45412,20542.57305,24513.96123],
    "x_desc": "dac",
    "y": [55.57275,97.61925,181.71375,265.8075,349.90125,433.995,518.0895],
    "y_desc": "mz*q"
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 3.2 质量轴分段校准
# 3.2.1 首段质量轴校准

1) 标准峰表准备(std_peaks)

环节概述
根据每个标准峰的m/z转换为position、dac。同时计算标准主峰的位置(std_peak_1_position、std_peak_2_position)和标准峰位置偏差(std_peak_position_delta = calib_mass_shift_max * pt_per_th)

参数来源

  • 主峰:calibration.json/parameters/mass_calibration/calib_mode_list/sub_params/std_peak_1& std_peak_2
  • calib_mass_shift_max:instrument.json/parameters/scan_profiles,不同scan_mode对应spec_params.calib_mass_shift_max,出厂默认为160 (质量数),在第一轮轴校准完成后,直接将该参数设置为10(质量数)
  • pt_per_th:common.json/method_parameters_default

示例说明

"std_peaks":[
    {"index":1,"position":"计算值","dac":"计算值","intensity":0,"mz":74.096},
    {"index":2,"position":"计算值","dac":"计算值","intensity":0,"mz":130.159},
    {"index":3,"position":"计算值","dac":"计算值","intensity":0,"mz":242.284},
    {"index":4,"position":"计算值","dac":"计算值","intensity":0,"mz":354.409},
    {"index":5,"position":"计算值","dac":"计算值","intensity":0,"mz":466.535},
    {"index":6,"position":"计算值","dac":"计算值","intensity":0,"mz":578.66},
    {"index":7,"position":"计算值","dac":"计算值","intensity":0,"mz":690.785}
]
1
2
3
4
5
6
7
8
9

2) 实测峰表准备(peaks)
环节概述

  • 调整实测峰表中数据的顺序。峰表默认按照峰强度降序排列,需要根据position调整为升序排列。
  • 判断实测峰表中的峰数量是否不小于最小匹配峰数量(min_fit_number = 2,代码默认)。
    判断结果:
  • 峰表中实测峰数量 < 2,流程停止并报错CalibMassAxisPeakNumberError(5021)
  • 峰表中实测峰数量 ≥ 2,继续执行后续流程

3) 线性拟合

环节概述

  • 遍历实测峰表,将实测峰表中的峰位置两两组合(peak_1_position,peak_2_position),计算峰位置偏差。
  • 筛选符合条件的组合,进行线性拟合 (x为实测峰position,y为标准主峰理论m/z)。
  • 将实测峰表中每个峰的position代入曲线计算对应的m/z,同时计算与理论m/z的偏差值。
  • 从峰强度角度,判断当前峰位置组合的拟合曲线是否满足条件。

过程:
a. 计算峰位置偏差

  • 𝛥 peak_1_position = | std_peak_1_position - peak_1_position | 实测值与理论值的偏差
  • 𝛥 peak_2_position = | std_peak_2_position - peak_2_position | 实测值与理论值的偏差
  • 𝛥 position - 𝛥 std_position = abs ( | peak_1_position - peak_2_position | - | std_peak_1_position - std_peak_2_position | ) 实测值两点间距与理论值两点间距的偏差
    以上任意一个偏差值大于标准峰位置偏差值(16000,1000),则跳过当前峰组合。
    b. 将 (peak_1_position, std_peak_1_mz) 和 ( peak_2_position, std_peak_2_mz) 进行线性拟合,计算斜率(slope)和截距(intercept),从而得到线性拟合公式。
    c. 遍历标准峰表,获取当前标准峰的m/z (cur_std_mz)。同时遍历实测峰表,将每个实测峰的position带入公式,计算出对应的m/z (cur_mz)。计算𝛥mz = | cur_mz - cur_std_mz |并判断
  • 条件1:当cur_std_mz ≤ std_peak_1_mz,且 𝛥mz < 质量匹配容差(mass_match_tol = 1)或根据mass_match_rel_tol调整的相对容差( |cur_std_mz - std_peak_1_mz| × 0.015)的最大值
  • 条件2:当cur_std_mz 介于 std_peak_1_mz和 std_peak_2_mz之间,且 𝛥mz < 质量匹配容差(mass_match_tol = 1)
  • 条件3:当cur_std_mz ≥ std_peak_2_mz,且 𝛥mz < 质量匹配容差(mass_match_tol = 1)或根据mass_match_rel_tol调整的相对容差( |cur_std_mz - std_peak_2_mz| × 0.015) 的最大值
    满足上述任一条件,即认为当前实测峰与当前标准峰匹配,记录到匹配峰组合列表中(matched_peak_pair_list)。如果当前标准峰已匹配到其他实测峰,则根据两个实测峰的峰强度,选择最大强度的峰作为匹配峰。

示例说明

//以下参数来源:calibration.json/parameters/mass_calibration/algorithms/peak_matching_mass
"peak_matching_mass": 
{
    "ms1_mz_rel_tol": 0.015,
    "ms1_mz_tol": 1,
    "peaks_missing_cnt_max": 2,
    "peak_checking_list": [455.29],
    "peak_checking_list_neg": []
}
1
2
3
4
5
6
7
8
9

d. 遍历匹配峰组合列表(matched_peak_pair_list),过滤实测峰强度低于最低峰强阈值,统计剩余峰数量。
过程:

  • 在实测峰表中筛选强度排序第9位的实测峰,将其峰强度作为最低峰强度阈值。 (根据标准峰的数量(std_peaks) + 2 ,默认有7个标准峰)
  • 在实测峰位置匹配成功后,验证所有实测峰的峰强度是否大于最低峰强度阈值。
  • 最低峰强阈值:
    • 实测峰数量 ≥ 最少保留峰数量,选择最后一个保留峰的强度作为最低峰强阈值;
    • 实测峰数量 < 最少保留峰数量,选择最后一个实测峰的强度作为最低峰强阈值。

判断条件:

  • 若剩余峰数量 < 2(代码固定值),忽略本次拟合结果,直接进行下一组峰的拟合;
  • 若剩余峰数量 ≥ 2(代码固定值),则将当前峰组合(peak, std_peak)及拟合参数信息(fit_num、c0(截距)、c1(斜率)、r2)记录到线性拟合数据列表(liner_fit_data_list)中,继续下一组峰的拟合。

4) 确定最佳拟合结果并验证
环节概述:
a. 根据匹配峰数量(fit_num)由大到小顺序,将各个线性拟合结果排序,选择匹配峰数量最多的作为最佳拟合结果。如果同时存在数量的情况,取R2最大的作为最佳拟合结果。
b. 判断最佳拟合结果是否存在
存在,则继续执行流程;若不存在,则流程停止并报错CalibMassAxisNoBestLinearFitError(5022)
c. 判断最佳拟合结果的匹配峰数量是否大于最小匹配峰数量(min_fit_number)
匹配数量 ≥ 2,则继续执行流程;若匹配数量 < 2,则流程停止并报错CalibMassAxisFitNumberError (5023)
d. 峰位置检查
判断依据:遍历最佳拟合数据的每组峰对,计算实测峰位置和标准峰位置的偏差( |peak.position - std_peak.position| ),与标准峰位置偏差值(std_peak_position_delta, 16000 | 1000) 进行比较。
判断结果:
若偏差较大,则流程停止并报错CalibMassAxisPeakPositionError (5024)
若偏差在范围内,将最佳拟合数据的所有峰对保存到结果中,并继续执行后续流程。
示例说明
详细数据形式可在mrz中查看,详细位置为Analysis/result/mass_axis_calib_result/ 0|1|2 / mass_axis_calib_data/ matched_peaks (0、1、2分别为第1、2、3轮轴校准)

5) 缺失峰组合的继承(仅第2和第3轮的首段质量轴校准执行)
判断依据
当继承功能开启,且本轮匹配峰组合的数量小于标准峰数量,同时上轮的匹配峰组合数量不为0。
判断结果

  • 若不能同时满足上述3个条件,则不继承缺失的峰组合。
  • 若同时满足上述3个条件,则从上一轮的峰组合中选择本轮缺失峰组合进行补充(上一轮缺失,本轮同样缺失的无法继承)。

6) 更新参数
更新与校准相关的谱图参数和calib_mass_shift_max (出厂默认参数为160,仅在首次校准的首轮生效,后续均为10。)
示例说明:

"spec_params":{
    "calib_mass_end": 1000,
    "calib_mass_shift_max": 10,
    "calib_mass_start": 50,
    "calib_mode": "normal",
    "calib_timestamp": "2021-11-08T13:00:00",
    "mass_calib": {
        "mode": "piecewise_linear_keep_slope",
        "r2": 1,
        "x": [2597.031538,4591.257077,8585.040308,12574.20234,16559.45412,20542.57305,24513.96123],
        "x_desc": "dac",
        "y": [55.57275,97.61925,181.71375,265.8075,349.90125,433.995,518.0895],
        "y_desc": "mz*q"
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 3.2.2 其他段质量轴校准
  1. 实测峰筛选
    环节概述
    当扫描模式为high_mass时,需要执行本环节。将每个实测峰与理论标准峰进行比较,筛选与理论标准峰最接近的实测峰。
    筛选条件
    计算实测峰m/z与理论标准峰m/z差值的绝对值,小于等于calib_mass_shift_max(此时参数值为10) * 2。
    将符合条件的理论峰和实测峰作为一个组合;若存在多个实测峰与理论峰接近时,按照实测峰强度,保留最大峰强的实测峰。
    示例说明
{
    "matched_peaks": [
        {
            "peak":{"index":1,"position":"实际值","dac":"实际值","intensity":"实际值","mz":"实际值"},
            "std_peak":{"index":1,"position":0,"dac":0,"intensity":0,"mz":922.01}
        },
        {
            "peak":{"index":2,"position":"实际值","dac":"实际值","intensity":"实际值","mz":"实际值"},
            "std_peak":{"index":2,"position":0,"dac":0,"intensity":0,"mz":1022.004}
        },
        {
            "peak":{"index":3,"position":"实际值","dac":"实际值","intensity":"实际值","mz":"实际值"},
            "std_peak":{"index":3,"position":0,"dac":0,"intensity":0,"mz":1121.998}
        },
        {
            "peak":{"index":4,"position":"实际值","dac":"实际值","intensity":"实际值","mz":"实际值"},
            "std_peak":{"index":4,"position":0,"dac":0,"intensity":0,"mz":1221.991}
        },
        {
            "peak":{"index":5,"position":"实际值","dac":"实际值","intensity":"实际值","mz":"实际值"},
            "std_peak":{"index":5,"position":0,"dac":0,"intensity":0,"mz":1321.985}
        },
        {
            "peak":{"index":6,"position":"实际值","dac":"实际值","intensity":"实际值","mz":"实际值"},
            "std_peak":{"index":6,"position":0,"dac":0,"intensity":0,"mz":1421.978}
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 3.3 质量轴校准验证

1) 连续峰丢失核查
环节概述:
当最后一轮质量轴校准的参数更新完成后,判断是否有连续标准峰丢失的情况。

参数来源:
calibration.json/parameters/mass_calibration/algorithms/peak_matching_mass/peaks_missing_cnt_max = 2

判断条件:
遍历所有标准峰(calib_params/std_peak_list),查看当前标准峰是否在匹配峰组合中。记录连续缺失的峰数量。
当连续缺失2个及以上标准峰,则本次校准失败,流程停止。

2) 校验峰核查
环节概述:
利用一个不参与线性拟合的标准峰455.29作为校验峰,计算理论与实测m/z的偏差,用以验证校准结果的有效性。

参数来源:
calibration.json/parameters/mass_calibration/algorithms/peak_matching_mass/peak_checking_list

判断条件:
遍历DRE谱图中寻找校验峰的实测m/z值,并计算偏差(理论值-实测值)。

判断结果:

  • 若m/z偏差 > 0.5,则流程停止并报错CalibMassAxisDeltaMassError(5025)
  • 若m/z偏差 ≤ 0.5,则质量轴校准完成,进行检测器增益的校准。

# 4 检测器增益校准

# 4.1 正模式增益校准
# 4.1.1 DRE谱图寻峰

环节概述
使用第三轮首段质量轴校准采集的DRE谱图再次寻峰

参数来源:calibration.json/parameters/mass_calibration/algorithms/peak_picking_gain

示例说明

//参数来源:calibration.json/parameters/mass_calibration
{
    "peak_picking_gain": 
    {
        "distance_th": 0.5,
        "max_count": 100000,
        "min_intensity_abs": 0.001,
        "min_intensity_rel": 0,
        "top_count": 100000
    }
}
1
2
3
4
5
6
7
8
9
10
11
# 4.1.2 创建同位素峰表

环节概述
遍历isotope_list_list的每个同位素峰m/z,并补充峰强度(intensity = 1),记录在同位素峰表中。

参数来源
calibration.json/parameters/mass_calibration/algorithms/ peak_matching_gain

示例说明

//参数来源:calibration.json/parameters/mass_calibration/algorithms
{
    "isotope_list_list": [
        [74.0964,75.0998,76.1028],
        [130.1596,131.1624,132.1659],
        [242.284,243.2876,244.2909,245.295],
        [354.409,355.4128,356.4161,357.42],
        [455.2904,456.2938,457.2971,458.3,459.3025],
        [466.535,467.538,468.5413,469.5452,470.5486],
        [578.6598,579.6632,580.6665,581.6705,582.6739],
        [690.785,691.7884,692.7917,693.7951,694.7991]
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
# 4.1.3 同位素峰匹配

环节概述
使用上述同位素峰表,在DRE谱图中进行峰匹配,并记录到匹配列表中(matched_peaks)

参数来源
calibration.json/parameters/mass_calibration/algorithms/ peak_matching_gain

示例说明

//参数来源:calibration.json/parameters/mass_calibration/algorithms
"peak_matching_gain": {
    "isotope_list_list_neg_desc": "calculate gain with hard code top 8 peaks",
    "isotope_list_list_neg": [],
    "ms1_mz_tol": 0.5,
    "peak_matched_cnt_min": 0,
    "threshold": 0.001,
    "isotope_list_list": [
        [74.0964,75.0998,76.1028],
        [130.1596,131.1624,132.1659],
        [242.284,243.2876,244.2909,245.295],
        [354.409,355.4128,356.4161,357.42],
        [455.2904,456.2938,457.2971,458.3,459.3025],
        [466.535,467.538,468.5413,469.5452,470.5486],
        [578.6598,579.6632,580.6665,581.6705,582.6739],
        [690.785,691.7884,692.7917,693.7951,694.7991]
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 4.1.4 获取实测谱图的analog_data和counting_data
# 4.1.5 计算analog_area和counting_area

1). 遍历匹配列表中每个峰,获取对应的peak_position和peak_mz
2). 在counting_data中查找该峰的左右边界(idx_left_edge和idx_right_edge)
idx_left_edge 从峰位置开始向左搜索,直到找到m/z < (peak_mz - ms1_mz_tol) 或者counting_data不再递增的点。
idx_right_edge 从峰位置开始向右搜索,直到找到m/z > (peak_mz + ms1_mz_tol) 或者counting_data不再递减的点。
3). 根据峰的左右边界,计算每个峰的analog_area和counting_area并分别记录到analog_area_list和counting_area_list中

# 4.1.6 计算每个峰的gain
  • 遍历counting_area_list,带入公式计算
    • gain = q / 1.6e-19 / counting_area
    • q = analog_area × current_per_pt × second_ per_pt
    • current_per_pt = adc_vref_range / 65536.0 / pre_amp1_gain / pre_amp2_gain
    • second_ per_pt = 1.0 / pt_per_th / scan_speed / 1000.0
      参数来源
      adc_vref_range = 2.5 static.json/parameters
      pre_amp1_gain = 20000 static.json/parameters
      pre_amp2_gain = 10 static.json/parameters
      pt_per_th = 100 common.json/method_parameters_default
      scan_speed = 1 | 0.5 common.json/scan_mode_list/method/normal|high_quality|high_mass
# 4.1.7 计算均值

环节概述
将每个峰的gain相加,计算gain_mean和标准差gain_psd。将gain_mean记录到detector_gain_history中。

示例说明
详细数据形式可在mrz中查看,详细位置为Analysis/result/detector_gain_results/ 0|1 (0、1分别为正模式和负模式)

# 4.1.8 计算历史平均gain

环节概述
根据detector_gain_history,去掉最大值和最小值,剩余的gain求均值,作为最终正模式的gain。

参数来源
instrument.json/parameters/detector/detector_gain_history

# 4.2 负模式增益校准
# 4.2.1 参数整合

环节概述
负模式的增益校准需要在负模式下采集一张谱图

参数来源

  • method_params 谱图采集的参数与正模式下谱图采集参数相同,其中部分参数需要变更,如下:
    • polarity NEG
    • spray_voltage 3500 数据库中试剂盒信息
    • inj_size 第三轮DRE最佳进样量 × 1.05 (analysis_params_.inj_size_ratio_n2p)
# 4.2.2 谱图采集

环节概述
使用上述参数,在NEG下采集一张MS1谱图

# 4.2.3 谱图寻峰

参数来源
calibration.json/parameters/mass_calibration/algorithms/peak_picking_gain

示例说明

//参数来源:calibration.json/parameters/mass_calibration
"peak_picking_gain": 
{
    "distance_th": 0.5,
    "max_count": 100000,
    "min_intensity_abs": 0.001,
    "min_intensity_rel": 0,
    "top_count": 100000
}
1
2
3
4
5
6
7
8
9
# 4.2.4 创建同位素峰表

环节概述
将上述实测峰表按照强度进行降序排序,按顺序生成一个同位素列表(包含当前峰的m/z、m/z +1、m/z +2、m/z +3)。最大生成8个同位素列表

# 4.2.5 执行检测器增益校准的计算

环节概述
负模式检测器增益校准的计算与正模式流程相同。

# 5 新参数保存

环节概述
将校准后的质量轴和检测器增益的参数保存到本地对应文件中。

相关参数

  • instrument.json/parameters/spec_params
    • calib_timestamp
    • calib_mass_shift_max = 10
    • mass_calib.x mass_calib.y
  • instrument.json/parameters/spec_params
    • detector_gain 将本次正负模式的gain校准分别写入对应位置
    • detector_gain_history 将本次正负模式的gain校准分别写入对应的gain校准历史中
  • calibration.json
    • inj_size_history 将本次第三轮DRE的最佳进样量写入进样量历史中

# (二) 气压校准

# 1 获取分析参数analysis_params_

环节概述:
根据当前校准的项目获取对应参数。
参数来源:
calibration.json/parameters/pressure_calibration
示例说明:

//参数来源:calibration.json/parameters/pressure_calibration
{
    "area_mz_tol": 0.7,
    "average": 1,
    "calib_mode": 2,
    "cid_amp_pos": 3.18588,
    "delay_step_size": 64,
    "dre": {
        "dre_mode": "TIC",
        "dual_point_mode": 0,
        "max_times": 10,
        "method": {
            "average": 1,
            "delay": 0,
            "inj_lmco_mz": -1,
            "method_type": "MS1_ISO"
        },
        "min_step_size": 0.01,
        "notch_enabled": 1,
        "notch_mz_list": [
            455.29
        ],
        "target_tic": 2000,
        "target_tic_max": 3500,
        "target_tic_min": 500,
        "update_inj_size": 1,
        "window_lifespan_max": 5,
        "window_size_extension": 0.5,
        "window_size_min": 0.1
    },
    "enabled": 0,
    "frag_list_pos": [
        165.5,
        303
    ],
    "height_find_peaks_tol": 0.5,
    "inj_size_history": [
        30
    ],
    "inj_size_window": 10,
    "interval": 500,
    "max_scan_cnt": 30,
    "ratio_h": [
        0.15,
        0.15,
        0.15,
        0.15
    ],
    "ratio_l": [
        0.05,
        0.05,
        0.05,
        0.05
    ],
    "std_mz_pos": 455.29,
    "stuck_threshold": 0.5
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

# 2 执行DRE流程

# 2.1 DRE参数整合**

环节概述
获取分析参数中的DRE参数,根据当前极性获取对应喷雾电压。根据上次进样量历史记录设置本次初始进样量。

参数来源
DB.cartridge、calibration.json

参数说明
参见MOS Doc / Guide / 方法参数配置指南

进样量相关参数设置:

  • 上次校准进样量列表(lastest_inj_size_list) :根据进样量历史记录(pressure_calibration/inj_size_history),排序后取中位数
  • 上次校准进样量上限(latest_inj_size_max_) :上次校准进样量 + 10 (pressure_calibration/inj_size_window = 10) 该参数介于20-60之间,若计算值大于60时,取60作为上限。
  • 上次校准进样量下限(latest_inj_size_min_) :上次校准进样量 - 10 (pressure_calibration/inj_size_window = 10) 该参数介于20-60之间,若计算值小于20时,取20作为下限。

示例说明:

{
    "dre": 
    {
        "dre_mode": "TIC",
        "dual_point_mode": 0,
        "max_times": 10,
        "method": {
            "average": 1,
            "delay": 0,
            "inj_lmco_mz": -1,
            "method_type": "MS1_ISO"
        },
        "min_step_size": 0.01,
        "notch_enabled": 1,
        "notch_mz_list": [
            455.29
        ],
        "target_tic": 2000,
        "target_tic_max": 3500,
        "target_tic_min": 500,
        "update_inj_size": 1,
        "window_lifespan_max": 5,
        "window_size_extension": 0.5,
        "window_size_min": 0.1
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 2.2 执行DRE扫描流程

环节概述
执行MS1的DRE流程

# 2.3 根据DRE结果状态判定流程

环节概述
判断DRE流程的结果状态

判断结果

  • 当DRE流程未找到最佳谱图时,流程结束并提示“进样失败,请重试”;
  • 当DRE流程找到最佳谱图时,流程继续。

# 3 执行气压校准扫描流程

# 3.1 参数整合

环节概述
获取DRE最佳谱图的采集参数,根据当前的方法类型(MS2_Pressure_Calib) 整合对应参数。此流程最大循环执行30次(max_scan_cnt=30)

示例说明:

//以下参数来源:代码默认
"method_type": "MS2_Pressure_Calib"
"polarity": "POS",

//以下参数来源:DB.cartridge
"spray_voltage": 4500,

//以下参数来源:DRE的结果
"inj_size": "DRE结果"

//以下参数来源:calibration.json/parameters/pressure_calibration
//采集两张图 分别是ms1_iso和ms2,ms1_iso时cid_amp为0
"msn_params": [{"cid_amp":[0,3.18588]"precursor_mz":455.29}],
"average": 1,
"delay":0,

//以下参数来源当前的校准模式:
// 若仅选择normal校准模式,则此处参数为common.json/scan_mode_list中normal对应的参数;
// 若选择了normal、high_quality,则此处为high_quality,同理为high_mass的参数
"scan_mass_end": 1000,
"scan_mass_start": 50,
"scan_speed": 1,
"scan_q": 0.75,

//以下参数来源:common.json/method_parameters_default
"iso_q": 0.75,
"pre_iso_q": 0.75,
"pt_per_th": 100,
"trap_q": 0.3,
"cid_q": 0.25

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 3.2 执行数据采集

环节概述
针对precursor_mz = 455.29,先将cid_amp设置为0,执行MS1_ISO扫描流程;再将cid_amp设置为3.18588,执行MS2扫描流程。

判断结果
当任意扫描流程失败,或者扫描成功但无法获取到当前扫描的气压数据时,判定本次循环失败,重新开始新一轮扫描。当2个扫描流程成功并且均获取到气压数据,则继续下一环节。

# 3.3 峰面积计算

环节概述
对本轮扫描所得的MS1_ISO和MS2谱图寻峰、计算质量数,同时计算两张图中precursor_mz = 455.29的峰面积,并计算比值(ratio = area_ms2 / area_iso)

示例说明

//以下参数来源:calibration.json/parameters/mass_calibration/algorithms
"peak_picking_mass": {
    "distance_th": 5,
    "max_count": 1000,
    "min_intensity_abs": 8000.0,
    "min_intensity_rel": 0,
    "top_count": 30
}

//以下参数来源:calibration.json/parameters/pressure_calibration
"area_mz_tol": 0.7

1
2
3
4
5
6
7
8
9
10
11
12
# 3.4 比值评估

环节概述
判断计算所得ratio是否在0.05-0.15范围内

判断结果
ratio不在范围内,判定本次循环失败,重新调整cid_delay,开始新一轮扫描。循环次数已经达到最大次数,判定校准失败。ratio在范围内,则继续下一环节。

# 3.5 计算本次校准的scan_delay_new

环节概述

  • a. 计算total_delay = scan_delay_old + cid_delay_old
  • b. 根据total_delay和cid_delay_new,计算scan_delay_new = total_delay - cid_delay_new

参数来源
scan_delay_old 和 cid_delay_old来自于 instrument.json/parameters/calibration/ scan_delay和cid_delay

# 3.6 delay判定

环节概述
判断本次校准的scan_delay和cid_delay是否均在范围内

判断结果
若cid_delay在100-800范围外,判定校准失败;若scan_delay在100-2000范围外,判定校准失败;若scan_delay + cid_delay 小于800,判定校准失败。除上述三个条件外,其他情况判定校准成功。

# 4 新参数保存

环节概述
将校准后的scan_delay和cid_delay保存到本地对应文件中。

相关参数
instrument.json/parameters/calibration/ scan_delay和cid_delay

# 三、结果文件输出

  1. 前台界面确认校准结果
  2. 生成report.json (用于提升 STD 查询报告效率的索引,reports.json -> report.json)、MRZ 文件 (核心文件)、PDF 文件 (用于打印) 和 PNG 文件 (用于 STD 点击报告的展示)
  3. 分析流程结束,进行下一个检测

# 早期版本

  1. Calibration V3.4.1