# Scan Function v2.0.0
注意
此文档已过时,推荐阅读 最新版本
# Introduction
Scan Function(即扫描方程)是连接上层应用与底层硬件之间的桥梁,负责将上层应用发出的指令翻译成硬件可以理解的信号,从而驱动仪器完成特定功能,如进行样品扫描,获取谱图数据等。
从结构上来说,Scan Function 是由一系列 signal 和 segment 组成的二维矩阵。其中,矩阵的每一行表示一路控制信号,每一列表示一个 segment,矩阵的元素值则表示信号的当前状态。下图展示了 method type 为 MS1 的 Base方程结构。
下文对相关内容进行了详细阐述,主要包括:
# Signal
Signal 用于对底层硬件进行控制,如打开离子源,关闭检测器等。
Base方程中包含的信号及其释义:
No. | Name | Description |
---|---|---|
1 | Time | segment 的持续时间 |
2 | Active | segment 是否激活 1:激活;0:不激活 |
3 | DAPI | 控制开关1(24V)1:打开;0:关闭 |
4 | Source | 控制离子源开关 1:打开;0:关闭 |
5 | Detector | 控制检测器开关 1:打开;0:关闭 |
6 | Data | Data = adc_freq / scan_speed / pt_per_th / 1000 |
7 | Spec_Loc | 质谱存储位置, 0,1, … |
8 | Q1_mz_start | RF1 起始质量值 |
9 | Q1_mz_end | RF1 起始质量值 |
10 | Q1_q_start | RF1 起始q值 |
11 | Q1_q_end | RF1 终止q值 |
12 | Q2_mz_start | RF2 起始质量值 |
13 | Q2_mz_end | RF2 起始质量值 |
14 | Q2_q_start | RF2 起始q值 |
15 | Q2_q_end | RF2 终止q值 |
16 | AC1_freq_start | AC1 频率起始值 |
17 | AC1_freq_end | AC1 频率终止值 |
18 | AC1_amp_start | AC1 幅度起始值 |
19 | AC1_amp_end | AC1 幅度终止值 |
20 | AC2_freq_start | AC2 频率起始值 |
21 | AC2_freq_end | AC2 频率终止值 |
22 | AC2_amp_start | AC2 幅度起始值 |
23 | AC2_amp_end | AC2 幅度终止值 |
24 | Gate1_start | Gate1 起始值 |
25 | Gate1_end | Gate1 终止值 |
26 | Gate2_start | Gate2 起始值 |
27 | Gate2_end | Gate2 终止值 |
28 | Gate3_start | Gate3 起始值 |
29 | Gate3_end | Gate3 终止值 |
30 | Trap1_start | Trap1 起始值 |
31 | Trap1_end | Trap1 终止值 |
32 | Trap2_start | Trap2 起始值 |
33 | Trap2_end | Trap2 终止值 |
34 | Spray_amp_start | Spray 幅度起始值 |
35 | Spray_amp_end | Spray 幅度终止值 |
36 | Dynode_amp_start | Dynode 幅度起始值 |
37 | Dynode_amp_end | Dynode 幅度终止值 |
38 | Detector_amp_start | Detector 幅度起始值 |
39 | Detector_amp_end | Detector 幅度终止值 |
40 | SWIFT1_switch | SWITF1 使能,1:打开;0:关闭 |
41 | SWIFT1_loc | SWITF1 存储位置,0,1,... |
42 | SWIFT1_amp | SWITF1 幅度 |
43 | SWIFT2_switch | SWITF2 使能,1:打开;0:关闭 |
44 | SWIFT2_loc | SWITF2 存储位置,0,1,... |
45 | SWIFT2_amp | SWITF2 幅度 |
46 | Trigger1 | 控制开关2(24V) |
47 | Trigger2 | 控制开关3(24V) |
48 | Trigger3 | 控制电源开关7(3.3V) |
49 | Trigger4 | 控制开关 TRIGGER_OUT1 (3.3V) |
# Segment
Segment 由一系列信号组成,通过控制各个信号的状态以完成特定的功能,如进行扫描,补气等。每个 segment 由 Segment Generator 根据 method parameters 和前一个 segment 生成。
Segment 汇总表:
No. | Name | Description |
---|---|---|
1 | init | 初始化信号 |
2 | init_default | DAPI_OPEN 模式下,初始化信号 |
3 | inj_dapi1 | 打开 DAPI 进样 |
4 | inj_dapi2 | 打开 DAPI 进样 |
5 | inj_post1 | 进样,并合理分配进样量 |
6 | inj_post2 | 进样,并合理分配进样量 |
7 | inj_end | 控制 gate 变化,关闭进样 |
8 | iso_start | 初始化 iso |
9 | iso_delay | 控制 isolation 时的气压 |
10 | iso_set_rf | 计算 isolation 时的 RF 强度 |
11 | iso_rough | 用于施加第一次 swift 信号执行 pre_iso |
12 | iso_cool | 用于间隔第一次 iso 和 第二次 iso |
13 | iso | 用于施加第二次 swift 信号执行 iso |
14 | iso_null | MSAE 模式下施加 swift 信号执行 iso |
15 | iso_end | 设置补气 RF,关闭 isolation |
16 | gas | 打开 DAPI 补气 |
17 | cid_delay | MS2~MS5 模式下控制 CID 时的气压 |
18 | cid_delay_full | MS2_DDA, MS2_Pressure_Calib, MS2_RF_Calib 模式下控制 CID 时的气压 |
19 | cid_set_rf | 计算 CID 时的 RF 强度 |
20 | cid_set_rf_calib_rf | MS2_RF_Calib 模式下计算 CID 时的 RF 强度 |
21 | cid | 执行CID |
22 | cid_slim | MS2_Pressure_Calib 及 MS2_RF_Calib 模式下执行 CID |
23 | cid_dda | 执行 MS2_DDA 模式下的CID |
24 | cid_end | 结束 CID |
25 | scan_delay | 控制scan时的气压 |
26 | scan_delay_ms1 | 控制 MS1 模式下 scan 时的气压 |
27 | scan_delay_full | 控制 MS2_Pressure_Calib 及 MS2_RF_Calib scan 时的气压 |
28 | scan_delay_dda | 控制 MS2_DDA 模式下 scan 时的气压 |
29 | scan_set_rf | 设置 scan 时的 RF 强度 |
30 | scan_cem_on | 开启检测器光耦开关 |
31 | scan | 扫描 |
32 | reset | 重置所有信号 |
33 | cool | 用于间隔不同的离子操作 |
34 | dapi_open | DAPI_OPEN 模式下打开 DAPI |
35 | dual_init_q1 | 双阱模式下进行信号初始化 |
36 | dual_inj_dapi1 | 双阱模式下,打开DAPI进样 |
37 | dual_inj_dapi2 | 双阱模式下,打开DAPI进样 |
38 | dual_inj_post1 | 双阱模式下,进样,并合理分配进样量 |
39 | dual_inj_post2 | 双阱模式下,进样,并合理分配进样量 |
40 | dual_scan_delay | 双阱模式下,控制 scan 时的气压 |
41 | dual_scan_cem_on | 双阱模式下,开启检测器光耦开关 |
42 | dual_scan_set_rf | 双阱模式下,设置扫描时的 RF 值 |
43 | dual_q2_scan | 双阱模式下,进行扫描 |
44 | msae_inj_end | MSAE 模式下,控制 gate 变化,结束进样 |
45 | msae_iso_delay | MSAE 模式下,控制 isolation 时的气压 |
46 | msae_delay | MSAE 模式下,控制气压 |
47 | msae_set_rf | MSAE 模式下,设置扫描时的 RF 值 |
48 | msae | 执行 msae |
49 | msae_set_rf_2 | MSAE 模式下,设置扫描时的 RF 值 |
50 | msae_reset | MSAE 模式下,重置所有信号 |
51 | msn_sub_sequence | sub sequences |
52 | msae_sub_sequence | sub sequences |
# init
初始化信号
Time
Value = max(min_segment_time, inj_pre_time)
1Source
Value = switch_on
1Gate1_start
if polarity == 'POS': Value = inj_gate1 else: Value = -inj_gate1
1
2
3
4Gate1_end
Value = Gate1_start
1Gate2_start
if polarity == 'POS': Value = gate2_block else: Value = -gate2_block
1
2
3
4Gate2_end
Value = Gate2_start
1Gate3_Start
Value = gate3_default
1Gate3_end
Value = Gate3_start
1Trap1_start
Value = trap1_default
1Trap1_end
Value = Trap1_start
1Trap2_start
if polarity == 'POS': Value = inj_trap2 else: Value = -inj_trap2
1
2
3
4Trap2_end
Value = Trap2_start
1Spray_amp_start
if polarity == 'POS': Value = spray_voltage else: Value = -spray_voltage
1
2
3
4Spray_amp_end
Value = Spray_amp_start
1
# init_default
DAPI_OPEN 模式下,初始化信号
Time
Value = max(min_segment_time, cool_time)
1
# inj_dapi1
打开 DAPI 进样
Time
if inj_size <= inj_post_sum_time or inj_size >= (inj_post_sum_time + inj_DAPI_sum_time): Value = inj_DAPI_sum_time * 0.5 else: Value = inj_post_sum_time + inj_DAPI_sum_time - inj_size
1
2
3
4DAPI
Value = switch_on
1Q2_mz_start
if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ): Value = inj_lmco_mz
1
2Q2_mz_end
Value = Q2_mz_start
1Q2_q_start
if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ): Value = inj_lmco_q
1
2Q2_q_end
Value = Q2_q_start
1
# inj_dapi2
打开 DAPI 进样
Time
if inj_size <= inj_post_sum_time or inj_size >= (inj_post_sum_time + inj_DAPI_sum_time): Value = inj_DAPI_sum_time * 0.5 else: Value = inj_size - inj_post_sum_time
1
2
3
4Q2_mz_start
if inj_size > inj_post_sum_time and inj_size < ( inj_post_sum_time + inj_DAPI_sum_time): Value= inj_lmco_mz
1
2Q2_mz_end
Value = Q2_mz_start
1Q2_q_start
if inj_size > inj_post_sum_time and inj_size < ( inj_post_sum_time + inj_DAPI_sum_time ): Value= inj_lmco_q
1
2Q2_q_end
Value = Q2_q_start
1
# inj_post1
进样,并合理分配进样量
Time
if inj_size >= inj_post_sum_time: Value = inj_post_sum_time * 0.5 else: Value = inj_post_sum_time - inj_size
1
2
3
4DAPI
Value = switch_off
1Q2_mz_start
if inj_size == inj_post_sum_time: Value = min(inj_lmco_mz, inj_lmco_mz_max)
1
2Q2_mz_end
Value = Q2_mz_start
1Q2_q_start
if inj_size == inj_post_sum_time: Value = inj_lmco_q
1
2Q2_q_end
Value = Q2_q_start
1
# inj_post2
进样,并合理分配进样量
Time
if inj_size >= inj_post_sum_time: Value = inj_post_sum_time * 0.5 else: Value = inj_size
1
2
3
4Q2_mz_start
if inj_size < inj_post_sum_time: Value = min(inj_lmco_mz, inj_lmco_mz_max)
1
2Q2_mz_end
Value = Q2_mz_start
1Q2_q_start
if inj_size < inj_post_sum_time: Value = inj_lmco_q
1
2Q2_q_end
Value = Q2_q_start
1
# inj_end
控制 gate 变化,关闭进样
Time
Value = min_segment_time
1Source
Value = switch_off
1Gate1_start
if polarity == 'POS': Value = gate1_block else: Value = -gate1_block
1
2
3
4Gate1_end
Value = Gate1_start
1Spray_amp_start
Value = pos_5kv_default
1Spray_amp_end
Value = Spray_amp_start
1Trap2_end
Value = trap2_default
1
# iso_start
初始化 iso
Time
Value = cool_time
1Q2_mz_end
if inj_lmco_mz_max * inj_lmco_q < precursor_mz * trap_q: Value = inj_lmco_mz_max else: Value = precursor_mz
1
2
3
4Q2_q_end
if inj_lmco_mz_max * inj_lmco_q < precursor_mz * trap_q: Value = inj_lmco_q else: Value = trap_q
1
2
3
4SWIFT2_switch
Value = switch_off
1SWIFT2_loc
Value = swift2_loc_default
1SWIFT2_amp
Value = swift2_amp_default
1
# iso_delay
控制 isolation 时的气压
Time
# do iso to the first time if msn_params_index == 0: Value = iso_delay else: Value = iso_delay_msn
1
2
3
4
5
# iso_set_rf
设置 isolation 时的 RF 强度
Time
Value = cool_time
1Q2_mz_end
Value = precursor_mz
1Q2_q_end
Value = iso_q
1
# iso_rough
用于施加第一次 swift 信号执行 pre_iso
Time
Value = iso_swift_time
1SWIFT2_switch
if pre_iso_amp > 0: Value = switch_on else: Value = switch_off
1
2
3
4SWIFT2_loc
Value = iso1_swift2_loc + msn_params_index
1SWIFT2_amp
Value = pre_iso_amp
1
# iso_cool
用于间隔第一次 iso 和 第二次 iso
Time
Value = cool_time
1SWIFT2_switch
Value = switch_off
1SWIFT2_loc
Value = swift2_loc_default
1SWIFT2_amp
Value = swift2_amp_default
1
# iso
用于施加第二次 swift 信号执行 iso
Time
Value = iso_swift_time
1SWIFT2_switch
if iso_amp > 0: Value = switch_on else: Value = switch_off
1
2
3
4SWIFT2_loc
Value = iso2_swift2_loc + msn_params_index
1SWIFT2_amp
Value = iso_amp
1
# iso_null
MSAE 模式下,施加 swift 信号执行 iso
Time
Value = iso_swift_time
1
# iso_end
设置补气 RF,关闭 isolation
Time
Value = cool_time
1Q2_mz_end
if inj_lmco_mz_max * inj_lmco_q < precursor_mz * trap_q: Value = inj_lmco_mz_max else: Value = precursor_mz
1
2
3
4Q2_q_end
if inj_lmco_mz_max * inj_lmco_q < precursor_mz * trap_q: Value = inj_lmco_q else: Value = trap_q
1
2
3
4SWIFT2_switch
Value = switch_off
1SWIFT2_loc
Value = swift2_loc_default
1SWIFT2_amp
Value = swift2_amp_default
1
# gas
打开 DAPI 补气
Time
Value = gas_time
1DAPI
if gas_via_dapi == 1: Value = switch_on
1
2
# cid_delay
MS2~MS5 模式下控制 CID 时的气压
Time
Value = cid_delay - cid_time_extension_l
1DAPI
Value = switch_off
1
# cid_delay_full
MS2_DDA, MS2_Pressure_Calib, MS2_RF_Calib 模式下控制 CID 时的气压
Time
Value = cid_delay
1DAPI
Value = switch_off
1
# cid_set_rf
设置 CID 时的 RF 强度
Time
Value = cool_time
1Q2_mz_end
Value = precursor_mz
1Q2_q_end
Value = cid_q
1
# cid_set_rf_calib_rf
MS2_RF_Calib 模式下设置 CID 时的 RF 强度
Time
Value = cool_time
1Q2_mz_end
Value = precursor_mz_cid
1Q2_q_end
Value = cid_q
1
# cid
执行CID
Time
Value = cid_time + cid_time_extension_l + cid_time_extnesion_r
1AC2_freq_start
if cid_amp > 0: Value = q_to_freq(cid_q, rf2_freq)
1
2AC2_freq_end
Value = AC2_freq_start
1AC2_amp_start
Value = cid_amp
1AC2_amp_end
Value = AC2_amp_start
1
# cid_slim
MS2_Pressure_Calib 及 MS2_RF_Calib 模式下执行 CID
Time
Value = cid_time
1AC2_freq_start
if cid_amp > 0: Value = q_to_freq(cid_q, rf2_freq)
1
2AC2_freq_end
Value = AC2_freq_start
1AC2_amp_start
Value = cid_amp
1AC2_amp_end
Value = AC2_amp_start
1
# cid_dda
执行 MS2_DDA 模式下的 CID
Time
Value = dda_cid_time
1AC2_freq_start
if cid_amp > 0: Value = q_to_freq(cid_q, rf2_freq)
1
2AC2_freq_end
Value = AC2_freq_start
1AC2_amp_start
Value = dda_cid_amp
1AC2_amp_end
Value = AC2_amp_start
1
# cid_end
结束 CID
Time
Value = min_segment_time
1AC2_freq_start
Value = ac2_freq_default
1AC2_freq_end
Value = AC2_freq_start
1AC2_amp_start
Value = ac2_amp_default
1AC2_amp_end
Value = AC2_amp_start
1
# scan_delay
控制 scan 时的气压
Time
Value = scan_delay - cid_time_extension_r
1
# scan_delay_ms1
控制 MS1 模式下 scan 时的气压
Time
Value = iso_delay
1
# scan_delay_full
控制 MS2_Pressure_Calib 及 MS2_RF_Calib模式下 scan 时的气压
Time
Value = scan_delay
1AC2_freq_start
Value = ac2_freq_default
1AC2_freq_end
Value = AC2_freq_start
1AC2_amp_start
Value = ac2_amp_default
1AC2_amp_end
Value = AC2_amp_start
1
# scan_delay_dda
控制 MS2_DDA 模式下 scan 时的气压
Time
Value = scan_delay + cid_time + dda_cid_time
1AC2_freq_start
Value = ac2_freq_default
1AC2_freq_end
Value = AC2_freq_start
1AC2_amp_start
Value = ac2_amp_default
1AC2_amp_end
Value = AC2_amp_start
1
# scan_set_rf
计算 scan 时的 RF 强度
Time
Value = cool_time
1Q2_mz_end
Value = scan_mass_start
1Q2_q_end
Value = scan_q
1
# scan_cem_on
开启检测器光耦开关
Time
Value = scan_cem_on_time
1Data
Value = adc_freq / scan_speed / pt_per_th / 1000
1Detector
Value = switch_on
1AC2_freq_start
Value = q_to_freq(scan_q, rf2_freq)
1Dynode_amp_start
Value = scan_dynode
1Dynode_amp_end
Value = Dynode_amp_start
1Detector_amp_start
Value = scan_detector
1
Detector_amp_end
Value = Detector_amp_start
1
# scan
扫描
Time
Value = (scan_mass_end - scan_mass_start) / scan_speed
1spec_loc
Value = spec_loc_default
1Q2_mz_end
Value = scan_mass_end
1AC2_amp_start
Value = scan_mass_start * scan_ac_amp_c1 + scan_ac_amp_c0
1AC2_amp_end
Value = scan_mass_end * scan_ac_amp_c1 + scan_ac_amp_c0
1Gate2_start
Value = scan_gate2
1Gate2_end
Value = Gate2_start
1Trap2_start
Value = scan_mass_start * scan_trap2.coefs.c1 + scan_trap2.coefs.c0
1Trap2_end
Value = scan_mass_end * scan_trap2.coefs.c1 + scan_trap2.coefs.c0
1
# reset
重置所有信号
Time
Value = scan_post_time
1
# cool
用于间隔不同的离子操作
Time
Value = cool_time
1
# dapi_open
DAPI_OPEN 模式下打开 DAPI
Time
Value = dapi_open_time
1DAPI
Value = switch_on
1
# dual_init_q1
双阱模式下进行信号初始化
Time
Value = inj_pre_time
1Source
Value = switch_on
1Gate1_start
if polarity == 'POS': Value = inj_gate1 else: Value = -inj_gate1
1
2
3
4Gate1_end
Value = Gate1_start
1Gate2_start
if polarity == 'POS': Value = gate2_block else: Value = -gate2_block
1
2
3
4Gate2_end
Value = Gate2_start
1Gate3_start
Value = gate3_default
1Gate3_end
Value = Gate3_start
1Trap1_start
if polarity == 'POS': Value = inj_trap1 else: Value = -inj_trap1
1
2
3
4Trap1_end
Value = Trap1_start
1Spray_amp_start
Value = spray_voltage
1Spray_amp_end
Value = Spray_amp_start
1
# dual_inj_dapi1
双阱模式下,打开DAPI进样
Time
if inj_size <= inj_post_sum_time or inj_size >= (inj_post_sum_time + inj_DAPI_sum_time): Value = inj_DAPI_sum_time * 0.5 else: Value = inj_post_sum_time + inj_DAPI_sum_time - inj_size
1
2
3
4DAPI
Value = switch_on
1Q1_mz_start
if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ): Value = inj_lmco_mz
1
2Q1_mz_end
Value = Q1_mz_start
1Q1_q_start
if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ): Value = inj_lmco_q
1
2Q1_q_end
Value = Q1_q_start
1
# dual_inj_dapi2
双阱模式下,打开 DAPI 进样
Time
if inj_size <= inj_post_sum_time or inj_size >= (inj_post_sum_time + inj_DAPI_sum_time): Value = inj_DAPI_sum_time * 0.5 else: Value = inj_size - inj_post_sum_time
1
2
3
4Q1_mz_start
if inj_size > inj_post_sum_time and inj_size < ( inj_post_sum_time + inj_DAPI_sum_time): Value = inj_lmco_mz
1
2Q1_mz_end
Value = Q1_mz_start
1Q1_q_start
if inj_size > inj_post_sum_time and inj_size < ( inj_post_sum_time + inj_DAPI_sum_time ): Value= inj_lmco_q
1
2Q1_q_end
Value = Q1_q_start
1
# dual_inj_post1
双阱模式下,进样,并合理分配进样量
Time
if inj_size >= inj_post_sum_time: Value = inj_post_sum_time * 0.5 else: Value = inj_post_sum_time - inj_size
1
2
3
4DAPI
Value = switch_off
1Q1_mz_start
if inj_size == inj_post_sum_time: Value = min(inj_lmco_mz, inj_lmco_mz_max)
1
2Q1_mz_end
Value = Q1_mz_start
1Q1_q_start
if inj_size == inj_post_sum_time: Value = inj_lmco_q
1
2Q1_q_end
Value = Q1_q_start
1
# dual_inj_post2
双阱模式下,进样,并合理分配进样量
Time
if inj_size >= inj_post_sum_time: Value = inj_post_sum_time * 0.5 else: Value = inj_size
1
2
3
4Q1_mz_start
if inj_size < inj_post_sum_time: Value = min(inj_lmco_mz, inj_lmco_mz_max)
1
2Q1_mz_end
Value = Q1_mz_start
1Q1_q_start
if inj_size < inj_post_sum_time: Value = inj_lmco_q
1
2Q1_q_end
Value = Q1_q_start
1
# dual_scan_delay
双阱模式下,控制scan时的气压
Time
Value = cid_time + cid_delay + scan_delay - cool_time - msae_delay_time - msae_time
1
# dual_scan_cem_on
双阱模式下,开启检测器光耦开关
Time
Value = scan_cem_on_time
1Detector
Value = switch_on
1Dynode_amp_start
Value = scan_dynode
1Dynode_amp_end
Value = Dynode_amp_start
1Detector_amp_start
Value = scan_detector
1
Detector_amp_end
Value = Detector_amp_start
1
# dual_scan_set_rf(Array)
双阱模式下,设置扫描时的 RF 值
Time
Value = cool_time
1Q2_mz_end
Value = scan_mass_start
1Q2_q_end
Value = scan_q
1
Data
Value = adc_freq / scan_speed / pt_per_th / 1000
1
# dual_q2_scan(Array)
MSAE 模式下执行 scan
Time
Value = (scan_mass_end - scan_mass_start) / scan_speed
1spec_loc
Value = msae_params_index + 1
1Q2_mz_end
Value = scan_mass_end
1AC2_FRE_start
Value = q_to_freq(scan_q, rf2_freq)
1AC2_FRE_end
Value = AC2_FRE_start
1AC2_amp_start
Value = scan_mass_start * scan_ac_amp_c1 + scan_ac_amp_c0
1AC2_amp_end
Value = scan_mass_end * scan_ac_amp_c1 + scan_ac_amp_c0
1Gate3_start
Value = scan_gate3
1Gate3_end
Value = Gate3_start
1Trap2_start
Value = scan_mass_start * scan_trap2.coefs.c1 + scan_trap2.coefs.c0
1Trap2_ end
Value = scan_mass_end * scan_trap2.coefs.c1 + scan_trap2.coefs.c0
1
# msae_inj_end
MSAE 模式下,控制 gate 变化,结束进样
Time
Value = cool_time
1Source
Value = switch_off
1Gate1_end
if polarity == 'POS': Value = gate1_block else: Value = -gate1_block
1
2
3
4Spray_amp_start
Value = pos_5kv_default
1Spray_amp_end
Value = Spray_amp_start
1Trap1_end
Value = trap1_default
1
# msae_iso_delay
用于msae模式下控制 isolation 时的气压
Time
Value = iso_delay
1
# msae_delay
MSAE 模式下,控制气压
Time
Value = msae_delay_time
1DAPI
Value = switch_off
1
# msae_set_rf
MSAE 模式下,设置扫描时的 RF 值
Time
Value = cool_time
1Q1_mz_end
Value = msae_mz
1Q1_q_end
Value = msae_q1_q
1Q2_mz_end
Value = msae_mz
1Q2_q_end
Value = msae_q2_q
1
Gate2_end
Value = msae_gate2
1Gate3_end
Value = gate3_block
1Trap2_end
Value = msae_trap2
1
# msae(Array)
执行 msae
Time
Value = msae_time
1AC1_freq_start
Value = q_to_freq(msae_q1_q, rf1_freq)
1AC1_freq_end
Value = AC1_freq_start
1AC1_amp_start
Value = msae_ac1_amp
1AC1_amp_end
Value = AC1_amp_start
1
# msae_set_rf_2
MSAE 模式下,设置扫描时的 RF 值
Time
Value = cool_time
1Q1_mz_end
Value = inj_lmco_mz
1Q1_q_end
Value = inj_lmco_q
1Q2_mz_end
Value = inj_lmco_mz
1Q2_q_end
Value = inj_lmco_q
1
AC1_fre_start
Value = ac1_freq_default
1AC1_fre_end
Value = AC1_fre_start
1AC1_amp_start
Value = ac1_amp_default
1AC1_amp_end
Value = AC1_amp_start
1Gate2_end
Value = msae_gate2
1Trap2_end
Value = msae_trap2
1
# msae_reset
MSAE 模式下重置所有信号
Time
Value = cool_time
1Detector
Value = switch_off
1Data
Value = switch_off
1Spec_loc
Value = 0
1Q2_mz_start
Value = q2_mz_default
1Q2_mz_end
Value = Q2_mz_start
1Q2_q_start
Value = q2_q_default
1Q2_q_end
Value = Q2_q_start
1AC2_freq_start
Value = ac2_freq_default
1AC2_freq_end
Value = AC2_freq_start
1AC2_amp_start
Value = ac2_amp_default
1AC2_amp_end
Value = AC2_amp_start
1Gate3_Start
Value = gate3_default
1Gate3_end
Value = Gate3_Start
1Trap2_start
Value = trap2_default
1Trap2_end
Value = Trap2_start
1Dynode_amp_start
Value = neg_5kv_default
1Dynode_amp_end
Value = Dynode_amp_start
1Detector_amp_start
Value = neg_2kv_default
1Detector_amp_end
Value = Detector_amp_start
1
# Parameters
# Static Parameters
用于配置仪器中不易变动的参数。
Name | Default | Unit | Description |
---|---|---|---|
_version | 3.2.1 | 版本号 | |
ac1_amp_default | 0 | V | AC1 不工作时的强度 |
ac1_freq_default | 0 | kHz | AC1 不工作时的频率 |
ac2_amp_default | 0 | V | AC2 不工作时的强度 |
ac2_freq_default | 0 | kHz | AC2 不工作时的频率 |
adc_freq | 1000000 | Hz | 主 ADC 采样速率 |
adc_vref_range | 2.5 | ADC(模数转换器)的参考电压范围 | |
cid_time | 30 | ms | CID 时外加 AC 的时长 |
cid_time_extension_l | 10 | ms | 扩充气压容忍度,左侧 |
cid_time_extension_r | 50 | ms | 扩充气压容忍度,右侧 |
cool_time | 10 | ms | 重要的离子操作之间的冷却间隔时长 |
counting_threshold_dac | 4369 | V | Counting 阈值 |
dda_cid_time | 400 | ms | MS2_DDA 模式下 CID 时外加 AC 的时长 |
gas_time | 15 | ms | 为实现 CID 补气,DAPI 再次打开的时长 |
gate1_block | 22 | V | Gate1 能够挡住离子无法穿过的电压值 |
gate1_default | 0 | V | Gate1 默认值,设为0V |
gate2_block | 22 | V | Gate2 能够挡住离子无法穿过的电压值 |
gate2_default | 0 | V | Gate2 默认值,设为0V |
gate3_block | 22 | V | Gate3 能够挡住离子无法穿过的电压值 |
gate3_default | 0 | V | Gate3 默认值,设为0V |
inj_DAPI_sum_time | 20 | ms | 进样 DAPI 打开的总时长 |
inj_lmco_mz_max | 150 | Th | 最大的 inj_lmco_mz |
inj_post_sum_time | 60 | ms | 进样时序中非开 DAPI 时长 |
inj_pre_time | 100 | ms | 方程预扫的时间 |
iso1_swift2_loc | 0 | 默认宽 notch 存在 loc 0 | |
iso2_swift2_loc | 1 | 默认窄 notch 存在 loc 1 | |
iso_swift_time | 41.94304 | ms | Isolation 时 swift 的时长 |
method_parameters_default | method_parameters 默认值 | ||
min_segment_time | 1 | ms | Segment 最小时间,用于保护 |
neg_2kv_default | 0 | V | 负2K高压电零伏时的电压值 |
neg_5kv_default | 0 | V | 负5K高压电零伏时的电压值 |
pos_5kv_default | 0 | V | 正5K高压电零伏时的电压值 |
pre_amp1_gain | 20000 | 前置放大器1的增益控制参数 | |
pre_amp2_gain | 10 | 前置放大器2的增益控制参数 | |
q1_mz_default | 0 | RF1 不工作时质量值 | |
q1_q_default | 0 | RF1 不工作时q值 | |
q2_mz_default | 0 | RF2 不工作时质量值 | |
q2_q_default | 0 | RF2 不工作时 q 值 | |
rf1_default | 0 | Th | RF1 不工作时的强度 |
rf2_default | 0 | Th | RF2 不工作时的强度 |
scan_cem_on_time | 120 | ms | Scan 之前预先打开检测器、打拿极 |
scan_post_time | 50 | ms | Scan function 结束的缓冲时间 |
spec_loc_default | 1 | 谱的默认存储位置 | |
swift1_amp_default | 0 | 默认值 | |
swift1_loc_default | 0 | 默认值 | |
swift2_amp_default | 0 | 默认值 | |
swift2_loc_default | 0 | 默认值 | |
swift_bwn | 500 | 用于平滑swift波形 | |
swift_bww | 8000 | 用于平滑swift波形 | |
switch_off | 0 | 二进制开关量:关 | |
switch_on | 1 | 二进制开关量:开 | |
trap1_default | 0 | V | 第一个阱直流电势零伏时的电压值 |
trap2_default | 0 | V | 第一个阱直流电势零伏时的电压值 |
# Instrument Parameters
用于配置仪器中经常使用或易变动的参数。
# calibration parameters
Name | Default | Min | Max | Unit | Description |
---|---|---|---|---|---|
_version | 3.2.1 | 版本号 | |||
cid_delay | 450 | 100 | 1050 | ms | 控制 CID 时的气压 |
cid_delay_ms3 | 450 | 100 | 1050 | ms | 控制 CID 时的气压 |
cid_delay_ms4 | 450 | 100 | 1050 | ms | 控制 CID 时的气压 |
cid_delay_ms5 | 450 | 100 | 1050 | ms | 控制 CID 时的气压 |
cps_merge_threshold | 5000 | cps 合并阈值 | |||
dda_cid_amp | 1.4 | V | MS2_DDA 模式下 CID 时外加 AC 的电压值 | ||
inj_gate1 | -2 | V | 进样环节 gate1 的电压 | ||
inj_lmco_mz | 50 | 50 | 150 | Th | 自动计算 inj_lmco_mz |
inj_lmco_q | 0.825 | 进样时最小离子的 q 值,默认等于 scan_q | |||
inj_trap1 | -8 | V | 进样环节阱1直流偏置的电压 | ||
inj_trap2 | -8 | V | 进样环节阱2直流偏置的电压 | ||
iso_amp | mz 与 iso_amp 的转换关系,根据质量自动计算 SWIFT 强度 | ||||
iso_delay | 1500 | ms | 控制 isolation 时的气压 | ||
iso_delay_msn | 800 | ms | 控制 isolation 时的气压,供 MS2-MS5 使用 | ||
iso_swift_amp_mz_max | 691 | Th | 计算 SWIFT 强度时的 mz 阈值,超过该值后,SWIFT 强度将保持 | ||
pre_iso_amp | 根据质量自动计算SWIFT强度 | ||||
rf1_freq | 0 | 0 | 0 | kHz | 仪器 RF1 的固定谐振频率 |
rf2_freq | 1025 | kHz | 仪器 RF2 的固定谐振频率 | ||
scan_ac_amp_list | scan 时 AC 强度与质量轴质量数的转换关系,自动匹配scan_speed | ||||
scan_delay | 600 | ms | 控制 scan 时的气压 | ||
scan_detector | -1300 | V | 正模式检测环节负2K高压给检测器供电所需的电压值 | ||
scan_dynode | -4500 | V | 正模式检测时负5K(打拿极)电压值 | ||
scan_gate2 | 2 | V | MSAE 离子扫出时对应 Gate2 的电压值 | ||
scan_gate3 | 5 | V | MSAE 离子扫出时对应 Gate3 的电压值 | ||
scan_trap2 | scan 时 Trap 直流电势与质量数的转换关系 |
# hardware_config
Name | Default | Description |
---|---|---|
gas_via_dapi | 1 | 是否通过 dapi 补气 |
trigger1_segments | [] | 配置打开 trigger1 的 segments |
trigger2_segments | [] | 配置打开 trigger2 的 segments |
trigger3_segments | [] | 配置打开 trigger3 的 segments |
trigger4_segments | [] | 配置打开 trigger4 的 segments |
# Method Parameters
用于配置应用程序中频繁使用的扫描参数。
Name | Default | Min | Max | Unit | Description |
---|---|---|---|---|---|
method_type | 方法类型,MS1,MS1_ISO等 | ||||
polarity | pos | pos | neg | 电压极性 | |
average | 1 | 1 | 32 | spectrum average | |
spray_voltage | 2000 | 0 | 5000 | V | 喷雾电压 |
inj_size | 40 | 1 | 80 | 进样量 | |
dapi_open_time | 15 | 0 | 50 | ms | 设置打开 DAPI 的持续时间 |
inj_lmco_mz | 50 | 20 | 400 | Th | 进样时最小离子的mz值 |
precursor_mz_cid | 400 | 50 | 2000 | Th | CID 时母离子的mz值 |
cid_q | 0.25 | 0.01 | 0.9 | CID 时离子的q值 | |
iso_q | 0.75 | 0.01 | 0.9 | isolation 时离子的q值 | |
trap_q | 0.3 | 0.01 | 0.9 | trap 时离子的q值 | |
scan_q | 0.825 | 0.01 | 0.9 | scan 时离子的q值 | |
scan_mass_start | 50 | 20 | 2000 | Th | 扫描起始质量 |
scan_mass_end | 1000 | 100 | 2000 | Th | 扫描终止质量 |
scan_speed | 1 | 1 | 20 | Th/ms | 扫描速度 |
# msn_params
Name | Default | Min | Max | Unit |
---|---|---|---|---|
precursor_mz | 100 | 50 | 2000 | Th |
pre_iso_amp | 0 | 0 | 30 | V |
cid_amp | 0 | 0 | 30 | V |
iso_amp | 0 | 0 | 30 | V |
# msae_params
Name | Default | Min | Max | Unit |
---|---|---|---|---|
msae_delay_time | 900 | ms | ||
msae_mz | 461 | Th | ||
msae_q1_q | 0.5 | |||
msae_q2_q | 0.5 | |||
msae_gate2 | 2 | V | ||
msae_trap2 | -1 | V | ||
msae_time | 100 | ms | ||
msae_ac1_amp | 0.6 | V | ||
msae_scan_mass_start | 50 | Th | ||
msae_scan_mass_end | 1000 | Th |
# Method Type
# MS1
全扫描模式。
# Parameters
No. | Name | Default | Min | Max | Unit |
---|---|---|---|---|---|
1 | polarity | pos | pos | neg | |
2 | spray_voltage | V | |||
3 | inj_size | 20 | 60 | ||
4 | inj_lmco_mz | 50 | Th | ||
5 | scan_mass_start | 50 | Th | ||
6 | scan_mass_end | 1000 | Th |
# Segments
- init
- inj_dapi1
- inj_dapi2
- inj_post1
- inj_post2
- inj_end
- scan_delay_ms1
- scan_set_rf
- scan_cem_on
- scan
- reset
# MS1_ISO
单离子监测模式。
# Parameters
No. | Name | Default | Min | Max | Unit |
---|---|---|---|---|---|
1 | polarity | pos | pos | neg | |
2 | spray_voltage | V | |||
3 | inj_size | 20 | 60 | ||
4 | inj_lmco_mz | 50 | Th | ||
5 | iso1_swift2_amp | V | |||
6 | iso2_swift2_amp | V | |||
7 | scan_mass_start | 50 | Th | ||
8 | scan_mass_end | 1000 | Th | ||
9 | msn_params |
# Segments
- init
- inj_dapi1
- inj_dapi2
- inj_post1
- inj_post2
- inj_end
- iso_start
- iso_delay
- iso_set_rf
- iso_rough
- iso_cool
- iso
- iso_end
- scan_set_rf
- scan_cem_on
- scan
- reset
MS2~MS5
子离子扫描模式。
# Parameters
No. | Name | Default | Min | Max | Unit |
---|---|---|---|---|---|
1 | polarity | pos | pos | neg | |
2 | spray_voltage | V | |||
3 | inj_size | 20 | 60 | ||
4 | inj_lmco_mz | 50 | Th | ||
5 | cid_q | ||||
6 | scan_mass_start | 50 | Th | ||
7 | scan_mass_end | 1000 | Th | ||
8 | msn_params |
# Segments
- init
- inj_dapi1
- inj_dapi2
- inj_post1
- inj_post2
- inj_end
- msn_sub_sequence *
- scan_delay
- scan_set_rf
- scan_cem_on
- scan
- reset
* 备注:
根据 msn_params 配置,方程中可能包含多个 msn_sub_sequence 子序列,其个数为:
Value = len(msn_params)
# msn_sub_sequence
# Parameters
No. | Name | Default | Min | Max | Unit |
---|---|---|---|---|---|
1 | precursor_mz | 0 | 50 | 1000 | Th |
2 | pre_iso_amp | 0 | V | ||
3 | iso_amp | 0 | V | ||
4 | cid_amp | 0 | V |
# Segments
# MS2_DDA
DDA子离子扫描模式。
# Parameters
No. | Name | Default | Min | Max | Unit |
---|---|---|---|---|---|
1 | polarity | pos | pos | neg | |
2 | spray_voltage | V | |||
3 | inj_size | 20 | 60 | ||
4 | inj_lmco_mz | 50 | Th | ||
5 | cid_q | ||||
6 | scan_mass_start | 50 | Th | ||
7 | scan_mass_end | 1000 | Th | ||
8 | msn_params |
# Segments
- init
- inj_dapi1
- inj_dapi2
- inj_post1
- inj_post2
- inj_end
- iso_start
- iso_delay
- iso_set_rf
- iso_rough
- iso_cool
- iso
- iso_end
- gas
- cid_delay_full
- cid_set_rf
- cid_dda
- cid_end
- scan_delay_dda
- scan_set_rf
- scan_cem_on
- scan
- reset
# MS2_Pressure_Calib
气压校准专用的子离子扫描模式。
# Parameters
No. | Name | Default | Min | Max | Unit |
---|---|---|---|---|---|
1 | polarity | pos | pos | neg | |
2 | spray_voltage | V | |||
3 | inj_size | 20 | 60 | ||
4 | inj_lmco_mz | 50 | Th | ||
5 | cid_q | ||||
6 | scan_mass_start | 50 | Th | ||
7 | scan_mass_end | 1000 | Th | ||
8 | msn_params |
# Segments
- init
- inj_dapi1
- inj_dapi2
- inj_post1
- inj_post2
- inj_end
- iso_start
- iso_delay
- iso_set_rf
- iso_rough
- iso_cool
- iso
- iso_end
- gas
- cid_delay_full
- cid_set_rf
- cid_slim
- cid_end
- scan_delay_full
- scan_set_rf
- scan_cem_on
- scan
- reset
# MS2_RF_Calib
RF校准专用的子离子扫描模式。
# Parameters
No. | Name | Default | Min | Max | Unit |
---|---|---|---|---|---|
1 | polarity | pos | pos | neg | |
2 | spray_voltage | V | |||
3 | inj_size | 20 | 60 | ||
4 | inj_lmco_mz | 50 | Th | ||
5 | cid_q | ||||
6 | scan_mass_start | 50 | Th | ||
7 | scan_mass_end | 1000 | Th | ||
8 | msn_params |
# Segments
- init
- inj_dapi1
- inj_dapi2
- inj_post1
- inj_post2
- inj_end
- iso_start
- iso_delay
- iso_set_rf
- iso_rough
- iso_cool
- iso
- iso_end
- gas
- cid_delay_full
- cid_set_rf
- cid_slim
- cid_end
- scan_delay_full
- cid_set_rf_calib_rf
- scan_cem_on
- scan
- reset
# DAPI_Open
供关机流程使用。
# Parameters
No. | Name | Default | Min | Max | Unit |
---|---|---|---|---|---|
1 | dapi_open_time | 15 | 0 | 50 | ms |
# Segments
# MSAE
单离子轴向质量选择性传输模式。
# Parameters
No. | Name | Default | Min | Max | Unit |
---|---|---|---|---|---|
1 | polarity | pos | pos | neg | |
2 | spray_voltage | V | |||
3 | inj_size | 20 | 80 | ||
4 | inj_lmco_mz | 100 | Th | ||
5 | msae_params |
# Segments
- dual_init_q1
- dual_inj_dapi1
- dual_inj_dapi2
- dual_inj_post1
- dual_inj_post2
- msae_inj_end
- msae_iso_delay
- cool
- iso_null
- cool
- iso_null
- cool
- msae_sub_sequence *
- reset
* 备注:
根据 msae_params 配置,方程中可能包含多个 msae_sub_sequence 子序列,其个数为:
Value = len(msae_params)
# msae_sub_sequence
# Parameters
No. | Name | Default | Min | Max | Unit |
---|---|---|---|---|---|
1 | msae_delay_time | 900 | ms | ||
2 | msae_mz | 455 | V | ||
3 | msae_q1_q | 0.5 | |||
4 | msae_q2_q | 0.5 | |||
5 | msae_gate2 | 2 | V | ||
6 | msae_trap2 | -1 | V | ||
7 | msae_time | 100 | Ms | ||
8 | msae_ac1_amp | 0.6 | V | ||
9 | msae_scan_mass_start | 50 | Th | ||
10 | msae_scan_mass_end | 1000 | Th |
# Segments
- gas
- msae_delay
- msae_set_rf
- msae
- msae_set_rf_2
- dual_scan_delay
- dual_scan_cem_on
- dual_scan_set_rf
- dual_q2_scan
- msae_reset
# FAQ
# 进样量保护
以下进样量保护代码需要在参数进入 Scan Function Generator(SFG)之前执行,即修订 analysis 传入的 inj_size 参数。
def adjust_inj_size(inj_size, inj_post_sum_time, inj_DAPI_sum_time, min_segment_time):
# protect the minimum segment time
# handle the DRE and other inj_size tuning problem
# 59.78 - 59.89
if inj_post_sum_time - min_segment_time < inj_size and inj_size < inj_post_sum_time - min_segment_time / 2:
inj_size = inj_post_sum_time - min_segment_time
# 59.89 - 60.11
elif inj_post_sum_time - min_segment_time / 2 <= inj_size and inj_size <= inj_post_sum_time + min_segment_time / 2:
inj_size = inj_post_sum_time
# 60.11 - 60.22
elif inj_post_sum_time + min_segment_time / 2 < inj_size and inj_size < inj_post_sum_time + min_segment_time:
inj_size = inj_post_sum_time + min_segment_time
# 79.78 - 79.89
elif inj_post_sum_time + inj_DAPI_sum_time - min_segment_time < inj_size and inj_size < inj_post_sum_time + inj_DAPI_sum_time - min_segment_time / 2:
inj_size = inj_post_sum_time + inj_DAPI_sum_time - min_segment_time
# 79.89 - 80
elif inj_size >= inj_post_sum_time + inj_DAPI_sum_time - min_segment_time / 2:
inj_size = inj_post_sum_time + inj_DAPI_sum_time
return inj_size
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Empty处理方法
下列信号若为Empty,则按同列的指定信号处理
Q1_mz_end = Q1_mz_start
Q1_q_end = Q1_q_start
Q2_mz_end = Q2_mz_start
Q2_q_end = Q2_q_start
AC1_freq_end = AC1_freq_start
AC1_amp_end = AC1_amp_start
AC2_freq_end = AC2_freq_start
AC2_amp_end = AC2_amp_start
Gate1_End = Gate1_Start
Gate2_End = Gate2_Start
Gate3_End = Gate3_Start
Trap1_end = Trap1_start
Trap2_end = Trap2_start
Spray_amp_End = Spray_amp_Start
Dynode_amp_End = Dynode_amp_Start
Detector_amp_End = Detector_amp_Start
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
下列信号若为Empty,则按前列的同名End信号处理
Q1_mz_start
Q1_q_start
Q2_mz_start
Q2_q_start
AC1_freq_start
AC1_amp_start
AC2_freq_start
AC2_amp_start
Gate1_Start
Gate2_Start
Gate3_Start
Trap1_start
Trap2_start
Spray_amp_Start
Dynode_amp_Start
Detector_amp_Start
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
其余所有信号若为Empty,则值等于前一个segment的同名信号
# 数据长度计算
spectrum_size = adc_freq / data * time / 1000
# Change Log
- 2023.10.13, upgrade version to 2.0.0
- 2023.05.17, update segments to support msn_subsequence