# Scan Function v2.0.0

注意

此文档已过时,推荐阅读 最新版本

# Introduction

Scan Function(即扫描方程)是连接上层应用与底层硬件之间的桥梁,负责将上层应用发出的指令翻译成硬件可以理解的信号,从而驱动仪器完成特定功能,如进行样品扫描,获取谱图数据等。

从结构上来说,Scan Function 是由一系列 signal 和 segment 组成的二维矩阵。其中,矩阵的每一行表示一路控制信号,每一列表示一个 segment,矩阵的元素值则表示信号的当前状态。下图展示了 method type 为 MS1 的 Base方程结构。

scanfunciton_ms1

下文对相关内容进行了详细阐述,主要包括:

# 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)
    
    1
  • Source

    Value = switch_on
    
    1
  • Gate1_start

    if polarity == 'POS':
        Value = inj_gate1
    else:
        Value = -inj_gate1
    
    1
    2
    3
    4
  • Gate1_end

    Value = Gate1_start
    
    1
  • Gate2_start

    if polarity == 'POS':
        Value = gate2_block
    else:
        Value = -gate2_block
    
    1
    2
    3
    4
  • Gate2_end

    Value = Gate2_start
    
    1
  • Gate3_Start

    Value = gate3_default
    
    1
  • Gate3_end

    Value = Gate3_start
    
    1
  • Trap1_start

    Value = trap1_default
    
    1
  • Trap1_end

    Value = Trap1_start
    
    1
  • Trap2_start

    if polarity == 'POS':
        Value = inj_trap2
    else:
        Value = -inj_trap2
    
    1
    2
    3
    4
  • Trap2_end

    Value = Trap2_start
    
    1
  • Spray_amp_start

    if polarity == 'POS':
        Value = spray_voltage
    else:
        Value = -spray_voltage
    
    1
    2
    3
    4
  • Spray_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
    4
  • DAPI

    Value = switch_on
    
    1
  • Q2_mz_start

    if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ):
        Value = inj_lmco_mz
    
    1
    2
  • Q2_mz_end

    Value = Q2_mz_start
    
    1
  • Q2_q_start

    if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ):
        Value = inj_lmco_q
    
    1
    2
  • Q2_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
    4
  • Q2_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
    2
  • Q2_mz_end

    Value = Q2_mz_start
    
    1
  • Q2_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
    2
  • Q2_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
    4
  • DAPI

    Value = switch_off
    
    1
  • Q2_mz_start

    if inj_size == inj_post_sum_time:
        Value = min(inj_lmco_mz, inj_lmco_mz_max)
    
    1
    2
  • Q2_mz_end

    Value = Q2_mz_start
    
    1
  • Q2_q_start

    if inj_size == inj_post_sum_time:
        Value = inj_lmco_q
    
    1
    2
  • Q2_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
    4
  • Q2_mz_start

    if inj_size < inj_post_sum_time:
        Value = min(inj_lmco_mz, inj_lmco_mz_max)
    
    1
    2
  • Q2_mz_end

    Value = Q2_mz_start
    
    1
  • Q2_q_start

    if inj_size < inj_post_sum_time:
        Value = inj_lmco_q
    
    1
    2
  • Q2_q_end

    Value = Q2_q_start
    
    1

# inj_end

控制 gate 变化,关闭进样

  • Time

    Value = min_segment_time
    
    1
  • Source

    Value = switch_off
    
    1
  • Gate1_start

    if polarity == 'POS':
        Value = gate1_block
    else:
        Value = -gate1_block
    
    1
    2
    3
    4
  • Gate1_end

    Value = Gate1_start
    
    1
  • Spray_amp_start

    Value = pos_5kv_default
    
    1
  • Spray_amp_end

    Value = Spray_amp_start
    
    1
  • Trap2_end

    Value = trap2_default
    
    1

# iso_start

初始化 iso

  • Time

    Value = cool_time
    
    1
  • Q2_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
    4
  • Q2_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
    4
  • SWIFT2_switch

    Value = switch_off
    
    1
  • SWIFT2_loc

    Value = swift2_loc_default
    
    1
  • SWIFT2_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
    
    1
  • Q2_mz_end

    Value = precursor_mz
    
    1
  • Q2_q_end

    Value = iso_q
    
    1

# iso_rough

用于施加第一次 swift 信号执行 pre_iso

  • Time

    Value = iso_swift_time
    
    1
  • SWIFT2_switch

    if pre_iso_amp > 0:
    	Value = switch_on
    else:
        Value = switch_off
    
    1
    2
    3
    4
  • SWIFT2_loc

    Value = iso1_swift2_loc + msn_params_index
    
    1
  • SWIFT2_amp

    Value = pre_iso_amp
    
    1

# iso_cool

用于间隔第一次 iso 和 第二次 iso

  • Time

    Value = cool_time
    
    1
  • SWIFT2_switch

    Value = switch_off
    
    1
  • SWIFT2_loc

    Value = swift2_loc_default
    
    1
  • SWIFT2_amp

    Value = swift2_amp_default
    
    1

# iso

用于施加第二次 swift 信号执行 iso

  • Time

    Value = iso_swift_time
    
    1
  • SWIFT2_switch

    if iso_amp > 0:
    	Value = switch_on
    else:
        Value = switch_off
    
    1
    2
    3
    4
  • SWIFT2_loc

    Value = iso2_swift2_loc + msn_params_index
    
    1
  • SWIFT2_amp

    Value = iso_amp
    
    1

# iso_null

MSAE 模式下,施加 swift 信号执行 iso

  • Time

    Value = iso_swift_time
    
    1

# iso_end

设置补气 RF,关闭 isolation

  • Time

    Value = cool_time
    
    1
  • Q2_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
    4
  • Q2_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
    4
  • SWIFT2_switch

    Value = switch_off
    
    1
  • SWIFT2_loc

    Value = swift2_loc_default
    
    1
  • SWIFT2_amp

    Value = swift2_amp_default
    
    1

# gas

打开 DAPI 补气

  • Time

    Value = gas_time
    
    1
  • DAPI

    if gas_via_dapi == 1:
        Value = switch_on
    
    1
    2

# cid_delay

MS2~MS5 模式下控制 CID 时的气压

  • Time

    Value = cid_delay - cid_time_extension_l
    
    1
  • DAPI

    Value = switch_off
    
    1

# cid_delay_full

MS2_DDA, MS2_Pressure_Calib, MS2_RF_Calib 模式下控制 CID 时的气压

  • Time

    Value = cid_delay
    
    1
  • DAPI

    Value = switch_off
    
    1

# cid_set_rf

设置 CID 时的 RF 强度

  • Time

    Value = cool_time
    
    1
  • Q2_mz_end

    Value = precursor_mz 
    
    1
  • Q2_q_end

    Value = cid_q 
    
    1

# cid_set_rf_calib_rf

MS2_RF_Calib 模式下设置 CID 时的 RF 强度

  • Time

    Value = cool_time
    
    1
  • Q2_mz_end

    Value = precursor_mz_cid 
    
    1
  • Q2_q_end

    Value = cid_q 
    
    1

# cid

执行CID

  • Time

    Value = cid_time + cid_time_extension_l + cid_time_extnesion_r
    
    1
  • AC2_freq_start

    if cid_amp > 0:
        Value = q_to_freq(cid_q, rf2_freq)
    
    1
    2
  • AC2_freq_end

    Value = AC2_freq_start
    
    1
  • AC2_amp_start

    Value = cid_amp
    
    1
  • AC2_amp_end

    Value = AC2_amp_start
    
    1

# cid_slim

MS2_Pressure_Calib 及 MS2_RF_Calib 模式下执行 CID

  • Time

    Value = cid_time
    
    1
  • AC2_freq_start

    if cid_amp > 0:
        Value = q_to_freq(cid_q, rf2_freq)
    
    1
    2
  • AC2_freq_end

    Value = AC2_freq_start
    
    1
  • AC2_amp_start

    Value = cid_amp
    
    1
  • AC2_amp_end

    Value = AC2_amp_start
    
    1

# cid_dda

执行 MS2_DDA 模式下的 CID

  • Time

    Value = dda_cid_time
    
    1
  • AC2_freq_start

    if cid_amp > 0:
        Value = q_to_freq(cid_q, rf2_freq)
    
    1
    2
  • AC2_freq_end

    Value = AC2_freq_start
    
    1
  • AC2_amp_start

    Value = dda_cid_amp
    
    1
  • AC2_amp_end

    Value = AC2_amp_start
    
    1

# cid_end

结束 CID

  • Time

    Value = min_segment_time
    
    1
  • AC2_freq_start

    Value = ac2_freq_default
    
    1
  • AC2_freq_end

    Value = AC2_freq_start
    
    1
  • AC2_amp_start

    Value = ac2_amp_default
    
    1
  • AC2_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
    
    1
  • AC2_freq_start

    Value = ac2_freq_default
    
    1
  • AC2_freq_end

    Value = AC2_freq_start
    
    1
  • AC2_amp_start

    Value = ac2_amp_default
    
    1
  • AC2_amp_end

    Value = AC2_amp_start
    
    1

# scan_delay_dda

控制 MS2_DDA 模式下 scan 时的气压

  • Time

    Value = scan_delay + cid_time + dda_cid_time
    
    1
  • AC2_freq_start

    Value = ac2_freq_default
    
    1
  • AC2_freq_end

    Value = AC2_freq_start
    
    1
  • AC2_amp_start

    Value = ac2_amp_default
    
    1
  • AC2_amp_end

    Value = AC2_amp_start
    
    1

# scan_set_rf

计算 scan 时的 RF 强度

  • Time

    Value = cool_time
    
    1
  • Q2_mz_end

    Value = scan_mass_start
    
    1
  • Q2_q_end

    Value = scan_q
    
    1

# scan_cem_on

开启检测器光耦开关

  • Time

    Value = scan_cem_on_time
    
    1
  • Data

    Value = adc_freq / scan_speed / pt_per_th / 1000
    
    1
  • Detector

    Value = switch_on
    
    1
  • AC2_freq_start

    Value = q_to_freq(scan_q, rf2_freq)
    
    1
  • Dynode_amp_start

    Value = scan_dynode
    
    1
  • Dynode_amp_end

    Value = Dynode_amp_start
    
    1
  • Detector_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
    
    1
  • spec_loc

    Value = spec_loc_default
    
    1
  • Q2_mz_end

    Value = scan_mass_end
    
    1
  • AC2_amp_start

    Value = scan_mass_start * scan_ac_amp_c1 + scan_ac_amp_c0
    
    1
  • AC2_amp_end

    Value = scan_mass_end * scan_ac_amp_c1 + scan_ac_amp_c0
    
    1
  • Gate2_start

    Value = scan_gate2
    
    1
  • Gate2_end

    Value = Gate2_start
    
    1
  • Trap2_start

    Value = scan_mass_start * scan_trap2.coefs.c1 + scan_trap2.coefs.c0
    
    1
  • Trap2_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
    
    1
  • DAPI

    Value = switch_on
    
    1

# dual_init_q1

双阱模式下进行信号初始化

  • Time

    Value = inj_pre_time
    
    1
  • Source

    Value = switch_on
    
    1
  • Gate1_start

    if polarity == 'POS':
        Value = inj_gate1
    else:
        Value = -inj_gate1
    
    1
    2
    3
    4
  • Gate1_end

    Value = Gate1_start
    
    1
  • Gate2_start

    if polarity == 'POS':
        Value = gate2_block
    else:
        Value = -gate2_block
    
    1
    2
    3
    4
  • Gate2_end

    Value = Gate2_start
    
    1
  • Gate3_start

    Value = gate3_default
    
    1
  • Gate3_end

    Value = Gate3_start
    
    1
  • Trap1_start

    if polarity == 'POS':
        Value = inj_trap1
    else:    
        Value = -inj_trap1
    
    1
    2
    3
    4
  • Trap1_end

    Value = Trap1_start
    
    1
  • Spray_amp_start

    Value = spray_voltage
    
    1
  • Spray_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
    4
  • DAPI

    Value = switch_on
    
    1
  • Q1_mz_start

    if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ):
        Value = inj_lmco_mz
    
    1
    2
  • Q1_mz_end

    Value = Q1_mz_start
    
    1
  • Q1_q_start

    if inj_size >= ( inj_post_sum_time + inj_DAPI_sum_time ):
        Value = inj_lmco_q
    
    1
    2
  • Q1_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
    4
  • Q1_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
    2
  • Q1_mz_end

    Value = Q1_mz_start
    
    1
  • Q1_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
    2
  • Q1_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
    4
  • DAPI

    Value = switch_off
    
    1
  • Q1_mz_start

    if inj_size == inj_post_sum_time:
        Value = min(inj_lmco_mz, inj_lmco_mz_max)
    
    1
    2
  • Q1_mz_end

    Value = Q1_mz_start
    
    1
  • Q1_q_start

    if inj_size == inj_post_sum_time:
        Value = inj_lmco_q
    
    1
    2
  • Q1_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
    4
  • Q1_mz_start

    if inj_size < inj_post_sum_time:
        Value = min(inj_lmco_mz, inj_lmco_mz_max)
    
    1
    2
  • Q1_mz_end

    Value = Q1_mz_start
    
    1
  • Q1_q_start

    if inj_size < inj_post_sum_time:
        Value = inj_lmco_q
    
    1
    2
  • Q1_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
    
    1
  • Detector

    Value = switch_on
    
    1
  • Dynode_amp_start

    Value = scan_dynode
    
    1
  • Dynode_amp_end

    Value = Dynode_amp_start
    
    1
  • Detector_amp_start

    Value = scan_detector
    
    1
  • Detector_amp_end

    Value = Detector_amp_start
    
    1

# dual_scan_set_rf(Array)

双阱模式下,设置扫描时的 RF 值

  • Time

    Value = cool_time
    
    1
  • Q2_mz_end

    Value = scan_mass_start
    
    1
  • Q2_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
    
    1
  • spec_loc

    Value = msae_params_index + 1
    
    1
  • Q2_mz_end

    Value = scan_mass_end
    
    1
  • AC2_FRE_start

    Value = q_to_freq(scan_q, rf2_freq)
    
    1
  • AC2_FRE_end

    Value = AC2_FRE_start
    
    1
  • AC2_amp_start

    Value = scan_mass_start * scan_ac_amp_c1 + scan_ac_amp_c0
    
    1
  • AC2_amp_end

    Value = scan_mass_end * scan_ac_amp_c1 + scan_ac_amp_c0
    
    1
  • Gate3_start

    Value = scan_gate3
    
    1
  • Gate3_end

    Value = Gate3_start
    
    1
  • Trap2_start

    Value = scan_mass_start * scan_trap2.coefs.c1 + scan_trap2.coefs.c0
    
    1
  • Trap2_ end

    Value = scan_mass_end * scan_trap2.coefs.c1 + scan_trap2.coefs.c0
    
    1

# msae_inj_end

MSAE 模式下,控制 gate 变化,结束进样

  • Time

    Value = cool_time
    
    1
  • Source

    Value = switch_off
    
    1
  • Gate1_end

    if polarity == 'POS':
        Value = gate1_block
    else:
        Value = -gate1_block
    
    1
    2
    3
    4
  • Spray_amp_start

    Value = pos_5kv_default
    
    1
  • Spray_amp_end

    Value = Spray_amp_start
    
    1
  • Trap1_end

    Value = trap1_default
    
    1

# msae_iso_delay

用于msae模式下控制 isolation 时的气压

  • Time

    Value = iso_delay
    
    1

# msae_delay

MSAE 模式下,控制气压

  • Time

    Value = msae_delay_time
    
    1
  • DAPI

    Value = switch_off
    
    1

# msae_set_rf

MSAE 模式下,设置扫描时的 RF 值

  • Time

    Value = cool_time
    
    1
  • Q1_mz_end

    Value = msae_mz
    
    1
  • Q1_q_end

    Value = msae_q1_q
    
    1
  • Q2_mz_end

    Value = msae_mz
    
    1
  • Q2_q_end

    Value = msae_q2_q
    
    1
  • Gate2_end

    Value = msae_gate2
    
    1
  • Gate3_end

    Value = gate3_block
    
    1
  • Trap2_end

    Value = msae_trap2
    
    1

# msae(Array)

执行 msae

  • Time

    Value = msae_time
    
    1
  • AC1_freq_start

    Value = q_to_freq(msae_q1_q, rf1_freq)
    
    1
  • AC1_freq_end

    Value = AC1_freq_start
    
    1
  • AC1_amp_start

    Value = msae_ac1_amp
    
    1
  • AC1_amp_end

    Value = AC1_amp_start
    
    1

# msae_set_rf_2

MSAE 模式下,设置扫描时的 RF 值

  • Time

    Value = cool_time
    
    1
  • Q1_mz_end

    Value = inj_lmco_mz
    
    1
  • Q1_q_end

    Value = inj_lmco_q
    
    1
  • Q2_mz_end

    Value = inj_lmco_mz
    
    1
  • Q2_q_end

    Value = inj_lmco_q
    
    1
  • AC1_fre_start

    Value = ac1_freq_default
    
    1
  • AC1_fre_end

    Value = AC1_fre_start
    
    1
  • AC1_amp_start

    Value = ac1_amp_default
    
    1
  • AC1_amp_end

    Value = AC1_amp_start
    
    1
  • Gate2_end

    Value = msae_gate2
    
    1
  • Trap2_end

    Value = msae_trap2
    
    1

# msae_reset

MSAE 模式下重置所有信号

  • Time

    Value = cool_time
    
    1
  • Detector

    Value = switch_off
    
    1
  • Data

    Value = switch_off
    
    1
  • Spec_loc

    Value = 0
    
    1
  • Q2_mz_start

    Value = q2_mz_default
    
    1
  • Q2_mz_end

    Value = Q2_mz_start
    
    1
  • Q2_q_start

    Value = q2_q_default
    
    1
  • Q2_q_end

    Value = Q2_q_start
    
    1
  • AC2_freq_start

    Value = ac2_freq_default
    
    1
  • AC2_freq_end

    Value = AC2_freq_start
    
    1
  • AC2_amp_start

    Value = ac2_amp_default
    
    1
  • AC2_amp_end

    Value = AC2_amp_start
    
    1
  • Gate3_Start

    Value = gate3_default
    
    1
  • Gate3_end

    Value = Gate3_Start
    
    1
  • Trap2_start

    Value = trap2_default
    
    1
  • Trap2_end

    Value = Trap2_start
    
    1
  • Dynode_amp_start

    Value = neg_5kv_default
    
    1
  • Dynode_amp_end

    Value = Dynode_amp_start
    
    1
  • Detector_amp_start

    Value = neg_2kv_default
    
    1
  • Detector_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

  1. init
  2. inj_dapi1
  3. inj_dapi2
  4. inj_post1
  5. inj_post2
  6. inj_end
  7. scan_delay_ms1
  8. scan_set_rf
  9. scan_cem_on
  10. scan
  11. 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

  1. init
  2. inj_dapi1
  3. inj_dapi2
  4. inj_post1
  5. inj_post2
  6. inj_end
  7. iso_start
  8. iso_delay
  9. iso_set_rf
  10. iso_rough
  11. iso_cool
  12. iso
  13. iso_end
  14. scan_set_rf
  15. scan_cem_on
  16. scan
  17. 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

  1. init
  2. inj_dapi1
  3. inj_dapi2
  4. inj_post1
  5. inj_post2
  6. inj_end
  7. msn_sub_sequence *
  8. scan_delay
  9. scan_set_rf
  10. scan_cem_on
  11. scan
  12. reset

* 备注:
根据 msn_params 配置,方程中可能包含多个 msn_sub_sequence 子序列,其个数为:

Value = len(msn_params)
1

# 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
  1. iso_start
  2. iso_delay
  3. iso_set_rf
  4. iso_rough
  5. iso_cool
  6. iso
  7. iso_end
  8. gas
  9. cid_delay
  10. cid_set_rf
  11. cid
  12. cid_end

# 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

  1. init
  2. inj_dapi1
  3. inj_dapi2
  4. inj_post1
  5. inj_post2
  6. inj_end
  7. iso_start
  8. iso_delay
  9. iso_set_rf
  10. iso_rough
  11. iso_cool
  12. iso
  13. iso_end
  14. gas
  15. cid_delay_full
  16. cid_set_rf
  17. cid_dda
  18. cid_end
  19. scan_delay_dda
  20. scan_set_rf
  21. scan_cem_on
  22. scan
  23. 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

  1. init
  2. inj_dapi1
  3. inj_dapi2
  4. inj_post1
  5. inj_post2
  6. inj_end
  7. iso_start
  8. iso_delay
  9. iso_set_rf
  10. iso_rough
  11. iso_cool
  12. iso
  13. iso_end
  14. gas
  15. cid_delay_full
  16. cid_set_rf
  17. cid_slim
  18. cid_end
  19. scan_delay_full
  20. scan_set_rf
  21. scan_cem_on
  22. scan
  23. 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

  1. init
  2. inj_dapi1
  3. inj_dapi2
  4. inj_post1
  5. inj_post2
  6. inj_end
  7. iso_start
  8. iso_delay
  9. iso_set_rf
  10. iso_rough
  11. iso_cool
  12. iso
  13. iso_end
  14. gas
  15. cid_delay_full
  16. cid_set_rf
  17. cid_slim
  18. cid_end
  19. scan_delay_full
  20. cid_set_rf_calib_rf
  21. scan_cem_on
  22. scan
  23. reset

# DAPI_Open

供关机流程使用。

# Parameters

No. Name Default Min Max Unit
1 dapi_open_time 15 0 50 ms

# Segments

  1. init_default
  2. dapi_open
  3. reset

# 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

  1. dual_init_q1
  2. dual_inj_dapi1
  3. dual_inj_dapi2
  4. dual_inj_post1
  5. dual_inj_post2
  6. msae_inj_end
  7. msae_iso_delay
  8. cool
  9. iso_null
  10. cool
  11. iso_null
  12. cool
  13. msae_sub_sequence *
  14. reset

* 备注:
根据 msae_params 配置,方程中可能包含多个 msae_sub_sequence 子序列,其个数为:

Value = len(msae_params)
1

# 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
  1. gas
  2. msae_delay
  3. msae_set_rf
  4. msae
  5. msae_set_rf_2
  6. dual_scan_delay
  7. dual_scan_cem_on
  8. dual_scan_set_rf
  9. dual_q2_scan
  10. 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
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

# 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
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

其余所有信号若为Empty,则值等于前一个segment的同名信号


# 数据长度计算

spectrum_size = adc_freq / data * time / 1000
1

# Change Log

  1. 2023.10.13, upgrade version to 2.0.0
  2. 2023.05.17, update segments to support msn_subsequence

# Other Versions

  1. 2022.12.01 - v1.3.3