# 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_on1Gate1_start
if polarity == 'POS': Value = inj_gate1 else: Value = -inj_gate11
2
3
4Gate1_end
Value = Gate1_start1Gate2_start
if polarity == 'POS': Value = gate2_block else: Value = -gate2_block1
2
3
4Gate2_end
Value = Gate2_start1Gate3_Start
Value = gate3_default1Gate3_end
Value = Gate3_start1Trap1_start
Value = trap1_default1Trap1_end
Value = Trap1_start1Trap2_start
if polarity == 'POS': Value = inj_trap2 else: Value = -inj_trap21
2
3
4Trap2_end
Value = Trap2_start1Spray_amp_start
if polarity == 'POS': Value = spray_voltage else: Value = -spray_voltage1
2
3
4Spray_amp_end
Value = Spray_amp_start1
# 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_size1
2
3
4DAPI
Value = switch_on1Q2_mz_start
if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ): Value = inj_lmco_mz1
2Q2_mz_end
Value = Q2_mz_start1Q2_q_start
if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ): Value = inj_lmco_q1
2Q2_q_end
Value = Q2_q_start1
# 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_time1
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_mz1
2Q2_mz_end
Value = Q2_mz_start1Q2_q_start
if inj_size > inj_post_sum_time and inj_size < ( inj_post_sum_time + inj_DAPI_sum_time ): Value= inj_lmco_q1
2Q2_q_end
Value = Q2_q_start1
# inj_post1
进样,并合理分配进样量
Time
if inj_size >= inj_post_sum_time: Value = inj_post_sum_time * 0.5 else: Value = inj_post_sum_time - inj_size1
2
3
4DAPI
Value = switch_off1Q2_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_start1Q2_q_start
if inj_size == inj_post_sum_time: Value = inj_lmco_q1
2Q2_q_end
Value = Q2_q_start1
# inj_post2
进样,并合理分配进样量
Time
if inj_size >= inj_post_sum_time: Value = inj_post_sum_time * 0.5 else: Value = inj_size1
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_start1Q2_q_start
if inj_size < inj_post_sum_time: Value = inj_lmco_q1
2Q2_q_end
Value = Q2_q_start1
# inj_end
控制 gate 变化,关闭进样
Time
Value = min_segment_time1Source
Value = switch_off1Gate1_start
if polarity == 'POS': Value = gate1_block else: Value = -gate1_block1
2
3
4Gate1_end
Value = Gate1_start1Spray_amp_start
Value = pos_5kv_default1Spray_amp_end
Value = Spray_amp_start1Trap2_end
Value = trap2_default1
# iso_start
初始化 iso
Time
Value = cool_time1Q2_mz_end
if inj_lmco_mz_max * inj_lmco_q < precursor_mz * trap_q: Value = inj_lmco_mz_max else: Value = precursor_mz1
2
3
4Q2_q_end
if inj_lmco_mz_max * inj_lmco_q < precursor_mz * trap_q: Value = inj_lmco_q else: Value = trap_q1
2
3
4SWIFT2_switch
Value = switch_off1SWIFT2_loc
Value = swift2_loc_default1SWIFT2_amp
Value = swift2_amp_default1
# iso_delay
控制 isolation 时的气压
Time
# do iso to the first time if msn_params_index == 0: Value = iso_delay else: Value = iso_delay_msn1
2
3
4
5
# iso_set_rf
设置 isolation 时的 RF 强度
Time
Value = cool_time1Q2_mz_end
Value = precursor_mz1Q2_q_end
Value = iso_q1
# iso_rough
用于施加第一次 swift 信号执行 pre_iso
Time
Value = iso_swift_time1SWIFT2_switch
if pre_iso_amp > 0: Value = switch_on else: Value = switch_off1
2
3
4SWIFT2_loc
Value = iso1_swift2_loc + msn_params_index1SWIFT2_amp
Value = pre_iso_amp1
# iso_cool
用于间隔第一次 iso 和 第二次 iso
Time
Value = cool_time1SWIFT2_switch
Value = switch_off1SWIFT2_loc
Value = swift2_loc_default1SWIFT2_amp
Value = swift2_amp_default1
# iso
用于施加第二次 swift 信号执行 iso
Time
Value = iso_swift_time1SWIFT2_switch
if iso_amp > 0: Value = switch_on else: Value = switch_off1
2
3
4SWIFT2_loc
Value = iso2_swift2_loc + msn_params_index1SWIFT2_amp
Value = iso_amp1
# iso_null
MSAE 模式下,施加 swift 信号执行 iso
Time
Value = iso_swift_time1
# iso_end
设置补气 RF,关闭 isolation
Time
Value = cool_time1Q2_mz_end
if inj_lmco_mz_max * inj_lmco_q < precursor_mz * trap_q: Value = inj_lmco_mz_max else: Value = precursor_mz1
2
3
4Q2_q_end
if inj_lmco_mz_max * inj_lmco_q < precursor_mz * trap_q: Value = inj_lmco_q else: Value = trap_q1
2
3
4SWIFT2_switch
Value = switch_off1SWIFT2_loc
Value = swift2_loc_default1SWIFT2_amp
Value = swift2_amp_default1
# gas
打开 DAPI 补气
Time
Value = gas_time1DAPI
if gas_via_dapi == 1: Value = switch_on1
2
# cid_delay
MS2~MS5 模式下控制 CID 时的气压
Time
Value = cid_delay - cid_time_extension_l1DAPI
Value = switch_off1
# cid_delay_full
MS2_DDA, MS2_Pressure_Calib, MS2_RF_Calib 模式下控制 CID 时的气压
Time
Value = cid_delay1DAPI
Value = switch_off1
# cid_set_rf
设置 CID 时的 RF 强度
Time
Value = cool_time1Q2_mz_end
Value = precursor_mz1Q2_q_end
Value = cid_q1
# cid_set_rf_calib_rf
MS2_RF_Calib 模式下设置 CID 时的 RF 强度
Time
Value = cool_time1Q2_mz_end
Value = precursor_mz_cid1Q2_q_end
Value = cid_q1
# cid
执行CID
Time
Value = cid_time + cid_time_extension_l + cid_time_extnesion_r1AC2_freq_start
if cid_amp > 0: Value = q_to_freq(cid_q, rf2_freq)1
2AC2_freq_end
Value = AC2_freq_start1AC2_amp_start
Value = cid_amp1AC2_amp_end
Value = AC2_amp_start1
# cid_slim
MS2_Pressure_Calib 及 MS2_RF_Calib 模式下执行 CID
Time
Value = cid_time1AC2_freq_start
if cid_amp > 0: Value = q_to_freq(cid_q, rf2_freq)1
2AC2_freq_end
Value = AC2_freq_start1AC2_amp_start
Value = cid_amp1AC2_amp_end
Value = AC2_amp_start1
# cid_dda
执行 MS2_DDA 模式下的 CID
Time
Value = dda_cid_time1AC2_freq_start
if cid_amp > 0: Value = q_to_freq(cid_q, rf2_freq)1
2AC2_freq_end
Value = AC2_freq_start1AC2_amp_start
Value = dda_cid_amp1AC2_amp_end
Value = AC2_amp_start1
# cid_end
结束 CID
Time
Value = min_segment_time1AC2_freq_start
Value = ac2_freq_default1AC2_freq_end
Value = AC2_freq_start1AC2_amp_start
Value = ac2_amp_default1AC2_amp_end
Value = AC2_amp_start1
# scan_delay
控制 scan 时的气压
Time
Value = scan_delay - cid_time_extension_r1
# scan_delay_ms1
控制 MS1 模式下 scan 时的气压
Time
Value = iso_delay1
# scan_delay_full
控制 MS2_Pressure_Calib 及 MS2_RF_Calib模式下 scan 时的气压
Time
Value = scan_delay1AC2_freq_start
Value = ac2_freq_default1AC2_freq_end
Value = AC2_freq_start1AC2_amp_start
Value = ac2_amp_default1AC2_amp_end
Value = AC2_amp_start1
# scan_delay_dda
控制 MS2_DDA 模式下 scan 时的气压
Time
Value = scan_delay + cid_time + dda_cid_time1AC2_freq_start
Value = ac2_freq_default1AC2_freq_end
Value = AC2_freq_start1AC2_amp_start
Value = ac2_amp_default1AC2_amp_end
Value = AC2_amp_start1
# scan_set_rf
计算 scan 时的 RF 强度
Time
Value = cool_time1Q2_mz_end
Value = scan_mass_start1Q2_q_end
Value = scan_q1
# scan_cem_on
开启检测器光耦开关
Time
Value = scan_cem_on_time1Data
Value = adc_freq / scan_speed / pt_per_th / 10001Detector
Value = switch_on1AC2_freq_start
Value = q_to_freq(scan_q, rf2_freq)1Dynode_amp_start
Value = scan_dynode1Dynode_amp_end
Value = Dynode_amp_start1Detector_amp_start
Value = scan_detector1
Detector_amp_end
Value = Detector_amp_start1
# scan
扫描
Time
Value = (scan_mass_end - scan_mass_start) / scan_speed1spec_loc
Value = spec_loc_default1Q2_mz_end
Value = scan_mass_end1AC2_amp_start
Value = scan_mass_start * scan_ac_amp_c1 + scan_ac_amp_c01AC2_amp_end
Value = scan_mass_end * scan_ac_amp_c1 + scan_ac_amp_c01Gate2_start
Value = scan_gate21Gate2_end
Value = Gate2_start1Trap2_start
Value = scan_mass_start * scan_trap2.coefs.c1 + scan_trap2.coefs.c01Trap2_end
Value = scan_mass_end * scan_trap2.coefs.c1 + scan_trap2.coefs.c01
# reset
重置所有信号
Time
Value = scan_post_time1
# cool
用于间隔不同的离子操作
Time
Value = cool_time1
# dapi_open
DAPI_OPEN 模式下打开 DAPI
Time
Value = dapi_open_time1DAPI
Value = switch_on1
# dual_init_q1
双阱模式下进行信号初始化
Time
Value = inj_pre_time1Source
Value = switch_on1Gate1_start
if polarity == 'POS': Value = inj_gate1 else: Value = -inj_gate11
2
3
4Gate1_end
Value = Gate1_start1Gate2_start
if polarity == 'POS': Value = gate2_block else: Value = -gate2_block1
2
3
4Gate2_end
Value = Gate2_start1Gate3_start
Value = gate3_default1Gate3_end
Value = Gate3_start1Trap1_start
if polarity == 'POS': Value = inj_trap1 else: Value = -inj_trap11
2
3
4Trap1_end
Value = Trap1_start1Spray_amp_start
Value = spray_voltage1Spray_amp_end
Value = Spray_amp_start1
# 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_size1
2
3
4DAPI
Value = switch_on1Q1_mz_start
if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ): Value = inj_lmco_mz1
2Q1_mz_end
Value = Q1_mz_start1Q1_q_start
if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ): Value = inj_lmco_q1
2Q1_q_end
Value = Q1_q_start1
# 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_time1
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_mz1
2Q1_mz_end
Value = Q1_mz_start1Q1_q_start
if inj_size > inj_post_sum_time and inj_size < ( inj_post_sum_time + inj_DAPI_sum_time ): Value= inj_lmco_q1
2Q1_q_end
Value = Q1_q_start1
# 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_size1
2
3
4DAPI
Value = switch_off1Q1_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_start1Q1_q_start
if inj_size == inj_post_sum_time: Value = inj_lmco_q1
2Q1_q_end
Value = Q1_q_start1
# dual_inj_post2
双阱模式下,进样,并合理分配进样量
Time
if inj_size >= inj_post_sum_time: Value = inj_post_sum_time * 0.5 else: Value = inj_size1
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_start1Q1_q_start
if inj_size < inj_post_sum_time: Value = inj_lmco_q1
2Q1_q_end
Value = Q1_q_start1
# dual_scan_delay
双阱模式下,控制scan时的气压
Time
Value = cid_time + cid_delay + scan_delay - cool_time - msae_delay_time - msae_time1
# dual_scan_cem_on
双阱模式下,开启检测器光耦开关
Time
Value = scan_cem_on_time1Detector
Value = switch_on1Dynode_amp_start
Value = scan_dynode1Dynode_amp_end
Value = Dynode_amp_start1Detector_amp_start
Value = scan_detector1
Detector_amp_end
Value = Detector_amp_start1
# dual_scan_set_rf(Array)
双阱模式下,设置扫描时的 RF 值
Time
Value = cool_time1Q2_mz_end
Value = scan_mass_start1Q2_q_end
Value = scan_q1
Data
Value = adc_freq / scan_speed / pt_per_th / 10001
# dual_q2_scan(Array)
MSAE 模式下执行 scan
Time
Value = (scan_mass_end - scan_mass_start) / scan_speed1spec_loc
Value = msae_params_index + 11Q2_mz_end
Value = scan_mass_end1AC2_FRE_start
Value = q_to_freq(scan_q, rf2_freq)1AC2_FRE_end
Value = AC2_FRE_start1AC2_amp_start
Value = scan_mass_start * scan_ac_amp_c1 + scan_ac_amp_c01AC2_amp_end
Value = scan_mass_end * scan_ac_amp_c1 + scan_ac_amp_c01Gate3_start
Value = scan_gate31Gate3_end
Value = Gate3_start1Trap2_start
Value = scan_mass_start * scan_trap2.coefs.c1 + scan_trap2.coefs.c01Trap2_ end
Value = scan_mass_end * scan_trap2.coefs.c1 + scan_trap2.coefs.c01
# msae_inj_end
MSAE 模式下,控制 gate 变化,结束进样
Time
Value = cool_time1Source
Value = switch_off1Gate1_end
if polarity == 'POS': Value = gate1_block else: Value = -gate1_block1
2
3
4Spray_amp_start
Value = pos_5kv_default1Spray_amp_end
Value = Spray_amp_start1Trap1_end
Value = trap1_default1
# msae_iso_delay
用于msae模式下控制 isolation 时的气压
Time
Value = iso_delay1
# msae_delay
MSAE 模式下,控制气压
Time
Value = msae_delay_time1DAPI
Value = switch_off1
# msae_set_rf
MSAE 模式下,设置扫描时的 RF 值
Time
Value = cool_time1Q1_mz_end
Value = msae_mz1Q1_q_end
Value = msae_q1_q1Q2_mz_end
Value = msae_mz1Q2_q_end
Value = msae_q2_q1
Gate2_end
Value = msae_gate21Gate3_end
Value = gate3_block1Trap2_end
Value = msae_trap21
# msae(Array)
执行 msae
Time
Value = msae_time1AC1_freq_start
Value = q_to_freq(msae_q1_q, rf1_freq)1AC1_freq_end
Value = AC1_freq_start1AC1_amp_start
Value = msae_ac1_amp1AC1_amp_end
Value = AC1_amp_start1
# msae_set_rf_2
MSAE 模式下,设置扫描时的 RF 值
Time
Value = cool_time1Q1_mz_end
Value = inj_lmco_mz1Q1_q_end
Value = inj_lmco_q1Q2_mz_end
Value = inj_lmco_mz1Q2_q_end
Value = inj_lmco_q1
AC1_fre_start
Value = ac1_freq_default1AC1_fre_end
Value = AC1_fre_start1AC1_amp_start
Value = ac1_amp_default1AC1_amp_end
Value = AC1_amp_start1Gate2_end
Value = msae_gate21Trap2_end
Value = msae_trap21
# msae_reset
MSAE 模式下重置所有信号
Time
Value = cool_time1Detector
Value = switch_off1Data
Value = switch_off1Spec_loc
Value = 01Q2_mz_start
Value = q2_mz_default1Q2_mz_end
Value = Q2_mz_start1Q2_q_start
Value = q2_q_default1Q2_q_end
Value = Q2_q_start1AC2_freq_start
Value = ac2_freq_default1AC2_freq_end
Value = AC2_freq_start1AC2_amp_start
Value = ac2_amp_default1AC2_amp_end
Value = AC2_amp_start1Gate3_Start
Value = gate3_default1Gate3_end
Value = Gate3_Start1Trap2_start
Value = trap2_default1Trap2_end
Value = Trap2_start1Dynode_amp_start
Value = neg_5kv_default1Dynode_amp_end
Value = Dynode_amp_start1Detector_amp_start
Value = neg_2kv_default1Detector_amp_end
Value = Detector_amp_start1
# 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