# Scan Function v3.0.2Latest

# 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 控制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 AC2X_freq_start AC2X 频率起始值
21 AC2X_freq_end AC2X 频率终止值
22 AC2X_amp_start AC2X 幅度起始值
23 AC2X_amp_end AC2X 幅度终止值
24 AC2Y_freq_start AC2Y 频率起始值
25 AC2Y_freq_end AC2Y 频率终止值
26 AC2Y_amp_start AC2Y 幅度起始值
27 AC2Y_amp_end AC2Y 幅度终止值
28 Gate1_start Gate1 起始值
29 Gate1_end Gate1 终止值
30 Gate2_start Gate2 起始值
31 Gate2_end Gate2 终止值
32 Gate3_start Gate3 起始值
33 Gate3_end Gate3 终止值
34 Trap1_start Trap1 起始值
35 Trap1_end Trap1 终止值
36 Trap2_start Trap2 起始值
37 Trap2_end Trap2 终止值
38 Spray_amp_start Spray 幅值起始值
39 Spray_amp_end Spray 幅值终止值
40 Dynode_amp_start Dynode 幅值起始值
41 Dynode_amp_end Dynode 幅值终止值
42 Detector_amp_start Detector 幅值起始值
43 Detector_amp_end Detector 幅值终止值
44 SWIFT1_switch SWITF1 使能,1:打开;0:关闭
45 SWIFT1_loc SWITF1 存储位置,0,1,...
46 SWIFT1_amp SWITF1 幅度
47 SWIFT2_switch SWITF2 使能,1:打开;0:关闭
48 SWIFT2_loc SWITF2 存储位置,0,1,...
49 SWIFT2_amp SWITF2 幅度
50 Trigger1 控制开关2(24V)
51 Trigger2 控制开关3(24V)
52 Trigger3 控制电源开关7(3.3V)
53 Trigger4 控制开关 TRIGGER_OUT1 (3.3V)

# Segment

Segment 由一系列信号组成,通过控制各个信号的状态以完成特定的功能,如进行扫描,补气等。每个 segment 由 Segment Generator 根据 method parameters 和前一个 segment 生成。

# 单阱 segment

# injection 部分

No. Name Description
1 inj_init 初始化信号
2 inj_dapi1 打开 DAPI 进样
3 inj_dapi2 打开 DAPI 进样
4 inj_dapi MS2_Multi_Inj 模式下,打开 DAPI 进样
5 inj_post1 进样,并合理分配进样量
6 inj_post2 进样,并合理分配进样量
7 inj_post MS2_Multi_Inj 模式下,满进样量进样
8 inj_end 控制 gate 变化,结束进样
9 inj_cool 进样后离子冷却

# isolation 部分

No. Name Description
1 iso_delay 控制 isolation 时的气压
2 iso_set_rf 设置isolation时的RF强度
3 pre_iso 用于施加第一次 swift 信号,执行 pre_iso
4 iso_cool 用于间隔第一次 iso 和 第二次 iso
5 iso 用于施加第二次 swift 信号,执行 iso
6 iso_end isolation结束时恢复RF的强度

# cid 部分

No. Name Description
1 gas cid前补气
2 cid_delay MSn 模式下控制 CID 时的气压
cid_delay_calib MS2_Pressure_Calib模式下控制 CID 时的气压
cid_delay_dda MS2_DDA 模式下控制 CID 时的气压
3 cid_set_rf 设置CID 时的 RF 强度
4 cid 执行MSn模式下的CID
cid_slim 执行MS2_Pressure_Calib模式下的CID
cid_dda 执行 MS2_DDA 模式下的CID
5 cid_end CID结束时恢复RF的强度

# scan 部分

No. Name Description
1 scan_delay 控制MS2~MS5模式下scan时的气压
scan_delay_ms1 控制 MS1 模式下 scan 时的气压
scan_delay_calib 控制 MS2_Pressure_Calib模式下scan时的气压
scan_delay_dda 控制 MS2_DDA 模式下 scan 时的气压
2 scan_kv_on 开启检测器高压电源,启动气压和高压保护
3 scan_cem_on 开启检测器高压光耦开关
4 scan_set_rf 设置 scan 起始的 RF 强度
5 scan 执行扫描

# 通用 segment

No. Name Description
1 cool 用于间隔不同的离子操作,离子冷却
2 reset 重置所有信号

# 双阱 segment

在双阱中,由于离子在阱1/阱2中是两套不同的信号设置,故将双阱信号segment细分为阱1/阱2。下文中,如无特殊说明,后缀q1均表示阱1,q2均表示阱2。

# injection 部分

No. Name Description
1 inj_init_q1(q2) 双阱模式下进行信号初始化,阱1(阱2)进样
2 inj_dapi1_q1(q2) 双阱模式下,打开DAPI进样,阱1(阱2)进样
3 inj_dapi2_q1(q2) 双阱模式下,打开DAPI进样,阱1(阱2)进样
4 inj_post1_q1(q2) 双阱模式下,进样,并合理分配进样量,阱1(阱2)进样
5 inj_post2_q1(q2) 双阱模式下,进样,并合理分配进样量,阱1(阱2)进样
6 inj_end_q1(q2) 控制 gate 变化,结束进样,阱1(阱2)进样
7 inj_cool_q1(q2) 进样后离子冷却,阱1(阱2)进样

# isolation 部分

No. Name Description
1 iso_delay_q1(q2) 控制isolation时的气压,阱1(阱2)iso
2 iso_set_rf_q1(q2) 设置isolation时的 RF 强度,阱1(阱2)iso
3 pre_iso_q1(q2) 用于施加第一次 swift 信号执行 pre_iso,阱1(阱2)iso
4 iso_cool_q1(q2) 用于间隔第一次 iso 和 第二次 iso,阱1(阱2)iso
5 iso_q1(q2) 用于施加第二次 swift 信号执行 iso,阱1(阱2)iso
6 iso_end_q1(q2) isolation结束时恢复 RF 强度,阱1(阱2)iso

# cid 部分

No. Name Description
1 gas_q1(q2) 补气
2 cid_delay_q1(q2) MS2~MS5模式下控制 CID 时的气压,阱1(阱2)CID
cid_delay_calib_q1(q2) MS2_Pressure_Calib模式下控制 CID 时的气压,阱1(阱2)CID
3 cid_set_rf_q1(q2) 设置CID时的 RF 强度,阱1(阱2)CID
4 cid_q1(q2) 执行CID,阱1(阱2)CID,阱1(阱2)CID
cid_slim_q1(q2) 执行MS2_Pressure_Calib模式下的CID,阱1(阱2)CID
5 cid_end_q1(q2) CID结束时恢复RF强度,阱1(阱2)CID

# msae 部分

msae 功能仅供双阱使用。

No. Name Description
1 gas_q1(q2) 补气
2 msae_delay_q1(q2) 控制MSAE时的气压,阱1(阱2)MSAE
3 msae_set_rf_q1(q2) 设置MSAE时的RF强度,阱1(阱2)MSAE
4 msae_q1(q2) 执行MSAE,阱1(阱2)MSAE
5 msae_end_q1(q2) MSAE结束时恢复RF强度,阱1(阱2)MSAE

# scan 部分

No. Name Description
1 scan_delay_q1(q2) 双阱模式下,控制 scan 时的气压,阱1(阱2)scan
2 scan_kv_on_q1(q2) 双阱模式下,开启检测器高压电源,启动气压和高压保护,阱1(阱2)scan
3 scan_cem_on_q1(q2) 双阱模式下,开启检测器高压光耦开关,阱1(阱2)scan
4 scan_set_rf_q1(q2) 双阱模式下,设置scan时的 起始RF强度,阱1(阱2)scan
5 scan_q1(q2) 双阱模式下,执行扫描,阱1(阱2)scan

# 通用 segment

No. Name Description
1 cool_q1(q2) 用于间隔不同的离子操作,阱1(阱2)离子冷却
2 reset 重置所有信号

# 模块化 segment

No. Name Description
1 inj_section_q1(q2) 进样序列,阱1(阱2)进样
2 msae_section_q1(q2) msae序列,阱1(阱2)msae
3 isolation_section_q1(q2) isolation序列,阱1(阱2)iso
4 IT_CID_section_q1(q2) ion trap CID序列,阱1(阱2)CID
5 scan_section_q1(q2) scan序列,阱1(阱2)scan
# inj_section_q1(q2)
  1. inj_init_q1(q2)——初始化信号,阱1(阱2)进样

  2. inj_dapi1_q1(q2)——开启DAPI,阱1(阱2)进样

  3. inj_dapi2_q1(q2)——开启DAPI,阱1(阱2)进样

  4. inj_post1_q1(q2)——进样量控制,阱1(阱2)进样

  5. inj_post2_q1(q2)——进样量控制,阱1(阱2)进样

  6. inj_end_q1(q2)——进样结束,阱1(阱2)进样

  7. Inj_cool_q1(q2)——离子冷却,阱1(阱2)进样

# msae_section_q1(q2)
  1. gas_q1(q2)——补气,阱1(阱2)补气

  2. msae_delay_q1(q2)——msae气压控制,阱1(阱2)msae

  3. msae_set_rf_q1(q2)——msae RF电压设置,阱1(阱2)msae

  4. msae_q1(q2)——离子传输,阱1(阱2)msae

  5. mase_end_q1(q2)——msae结束时恢复RF强度,阱1(阱2)msae

# isolation_section_q1(q2)
  1. iso_delay_q1(q2)——isolation气压控制,阱1(阱2)iso

  2. iso_set_rf_q1(q2)——设置isolation时的 RF 强度,阱1(阱2)iso

  3. pre_iso_q1(q2)——宽坑isolation,阱1(阱2)iso

  4. iso_cool_q1(q2)——离子冷却,阱1(阱2)iso

  5. iso_q1(q2)——窄坑isolation,阱1(阱2)iso

  6. iso_end_q1(q2)——isolation结束时恢复RF强度,阱1(阱2)iso

# IT_CID_section_q1(q2)
  1. gas_q1(q2)——补气,阱1(阱2)补气

  2. cid_delay_q1(q2)——CID气压控制,阱1(阱2)CID

  3. cid_set_rf_q1(q2)——设置CID时的 RF 强度,阱1(阱2)CID

  4. cid_q1(q2)——离子碎裂,阱1(阱2)CID

  5. cid_end_q1(q2)——CID结束时恢复RF强度,阱1(阱2)CID

# scan_section_q1(q2)
  1. scan_delay_q1(q2)——scan气压控制,阱1(阱2)scan

  2. scan_kv_on_q1(q2)——启动气压和高压保护

  3. scan_cem_on_q1(q2)——scan cem开启,阱1(阱2)scan

  4. scan_set_rf_q1(q2)——设置扫描起始质量,阱1(阱2)scan

  5. scan_q1(q2)——扫描,阱1(阱2)scan

  6. reset——信号重置

# Parameters

# Static Parameters

用于配置仪器中不易变动的参数。

Name Default Unit Description
_version 版本号
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 Counting 阈值
dda_cid_time 400 ms MS2_DDA 模式下 CID 时外加 AC 的时长
gas_time 20 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_multi_sum_time 70 ms 多次进样时,DAPI 打开与进样的总时长
inj_post_sum_time 60 ms 进样时序中非开 DAPI 时长
inj_pre_time 100 ms 方程预扫的时间
inj_cool_time 1000 ms 进样结束离子冷却的时间
pre_iso_swift1_loc 0 默认宽 notch 存在 loc 0
iso_swift1_loc 1 默认窄 notch 存在 loc 1
pre_iso_swift2_loc 15 默认宽 notch 存在 loc 15
iso_swift2_loc 16 默认窄 notch 存在 loc 16
method_parameters_default method_parameters 默认值
min_segment_time 1 ms Segment 最小时间,用于保护
msae_time 100 ms Msae的时间
neg_2kv_default 0 V 负2K高压电零伏时的电压值
neg_2kv_ovp_voltage -1800 V 负2K高压保护时的电压值
neg_5kv_default 0 V 负5K高压电零伏时的电压值
neg_5kv_ovp_voltage -4800 V 负5K高压保护时的电压值
pos_5kv_default 0 V 正5K高压电零伏时的电压值
neg_5kv_ovp_voltage 4800 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_ac_secular_freq_n 1 Scan时使用的谐振点索引 0:第1谐振点 1:第2谐振点
scan_kv_on_time 200 ms 开启检测器高压电源,启动气压和高压保护
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_parameters Swift参数默认值
trap1_default 0 V 第一个阱直流电势零伏时的电压值
trap2_default 0 V 第二个阱直流电势零伏时的电压值
vacuum_opp_pressure_exp -2 气压保护阈值

# Instrument Parameters

用于配置仪器中经常使用或易变动的参数。

# calibration parameters

Name Default Min Max Unit Description
_version 版本号
cid_delay 450 100 800 ms 控制 CID 时的气压
cid_delay_ms3 450 100 800 ms 控制 CID 时的气压
cid_delay_ms4 450 100 800 ms 控制 CID 时的气压
cid_delay_ms5 450 100 800 ms 控制 CID 时的气压
cps_merge_threshold 5000 -4e9 4e9 cps 合并阈值
dda_cid_amp 1.4 0 10 V MS2_DDA 模式下 CID 时外加 ac 的电压值
dda_ms2_inj_size_ratio 1 1 1.2 MS2_DDA 模式下,MS2进样量与MS1进样量的比例关系
inj_gate1 -2 -40 40 V 进样环节 gate1 的电压
inj_gate2 -2 -40 40 V 进样环节 gate2 的电压
inj_lmco_mz 50 50 150 Th 自动计算 inj_lmco_mz
inj_lmco_mz_q1 50 50 150 Th 自动计算 inj_lmco_mz
inj_lmco_mz_q2 50 50 150 Th 自动计算 inj_lmco_mz
inj_lmco_q 0.825 0.65 0.908 进样时阱内最小离子的 q 值
inj_trap1 -8 -45 45 V 进样环节阱1直流偏置的电压
inj_trap2 -8 -45 45 V 进样环节阱2直流偏置的电压
iso_amp f(mz) 2.99 44.3873 V mz 与 iso_amp 的转换关系,根据质量自动计算 SWIFT 强度
iso_delay 1500 600 2000 ms 控制 isolation 时的气压
iso_delay_msn 800 300 2000 ms 控制 isolation 时的气压,供 MS2-MS5 使用
iso_delay_multi 800 600 1500 ms 控制 isolation 时的气压,供多次进样使用
iso_mz_width f(mz) 0 0.9 Th 根据mz自动计算iso 时的坑宽
pre_iso_amp f(mz) 0 16 V 根据质量自动计算SWIFT强度
pre_iso_mz_width f(mz) 0 10 Th 根据mz自动计算pre_iso 时的坑宽
q_to_pre_iso_amp_ratio f(q) 0.25 1 q与pre_iso_amp_ratio 的转换关系
msae_delay 50 0 3000 ms msae气压控制
rf1_freq 1025 800 1200 kHz 仪器 RF1 的固定谐振频率
rf2_freq 1025 800 1200 kHz 仪器 RF2 的固定谐振频率
scan_profiles 出谱及校准参数
scan_delay 400 400 2000 ms 控制 scan 时的气压
scan_detector -1300 -1500 -1000 V 正模式检测环节负2K高压给检测器供电所需的电压值
scan_dynode -4500 -4500 -4500 V 正模式检测时负5K(打拿极)电压值

# scan_profiles

scan_params 出谱参数

Name Default Min Max Unit Description
scan_ac1_amp "c0": 0.568965474 "c1": 0.002620691 0 10 V scan 时ac1 强度与质量轴质量数的转换关系
scan_ac2_amp "c0": 0.568965474 "c1": 0.002620691 0 10 V scan 时ac1 强度与质量轴质量数的转换关系
scan_gate2 2 -40 40 V scan时对应 gate2 的电压值
scan_gate3 2 -40 40 V scan时对应 gate3 的电压值
scan_trap1 "c0": 0.103448421, "c1": -0.012068968 -40 40 V scan 时 trap1 直流电势与质量数的转换关系
scan_trap2 "c0": 0.103448421, "c1": -0.012068968 -40 40 V scan 时 trap2 直流电势与质量数的转换关系

spec_params 校准参数

spec_params_q1 表示阱1的校准参数,spec_params_q2 表示阱2的校准参数.

Name Default Min Max Unit Description
calib_mass_start 50 50 1500 Th 校准起始质量
calib_mass_end 1000 50 1500 Th 校准终止质量
calib_mass_shift_max 首次校准时160 校准通过后10 0 160 Th 校准时,质量轴最大偏移量
calib_timestamp 2021-11-08T13:00:00 校准时间戳
down_sample 1 1 10 降采样
mass_calib 折线校准 质量轴校准,dac 到 q**mz*的映射关系
mass_compensation "c0": 0, "c1": 0, “c2": 0 质量轴校准补偿,dac 到 q**mz*的映射关系
mass_compensation_enabled 0 0 1 是否启用质量轴补偿

# 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_q1等
polarity pos pos neg 喷雾极性
average 1 1 32 spectrum average
spray_voltage 2000 0 5000 V 喷雾电压
inj_size 40 1 80 进样量
inj_lmco_mz_q1 50 20 400 Th 进样时阱1最小离子的mz值inj_lmco_mz
inj_lmco_mz_q2 50 20 400 Th 进样时阱2最小离子的mz值
scan_q 0.75 0.65 0.908 scan 时离子的q值
scan_speed 1 1 20 Th/ms 扫描速度
scan_mass_start 50 50 2000 Th 扫描起始质量
scan_mass_end 1000 100 2000 Th 扫描终止质量

# msn_params

用于配置 MS2~MS5 及 MS1_ISO 的相关参数。

Name Default Min Max Unit
iso_mz 100 50 2000 Th
precursor_mz 100 50 2000 Th
cid_q 0.25 0.01 0.908
iso_q 0.75 0.01 0.908
pre_iso_amp 10 0 30 V
cid_amp 2.5 0 30 V
iso_amp 3.5 0 30 V

# dual_trap_params

用于配置 msae 的相关参数,支持多母离子。

Name Default Min Max Unit
precursor_mz 100 50 2000 Th
msae_q 0.5 0.01 0.908
msae_gate2 2 -40 40 V
msae_trap1 -1 -40 40 V
msae_trap2 -1 -40 40 V
msae_amp 0.6 0 10 V

# Scan Method

# 单阱 Scan Method

# 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. inj_init
  2. inj_dapi1
  3. inj_dapi2
  4. inj_post1
  5. inj_post2
  6. inj_end
  7. inj_cool
  8. scan_delay_ms1
  9. scan_set_rf
  10. scan_cem_on
  11. scan
  12. 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. inj_init
  2. inj_dapi1
  3. inj_dapi2
  4. inj_post1
  5. inj_post2
  6. inj_end
  7. inj_cool
  8. iso_delay
  9. iso_set_rf
  10. pre_iso
  11. iso_cool
  12. iso
  13. iso_end
  14. scan_set_rf
  15. scan_cem_on
  16. scan
  17. reset

# MSn

串级质谱分析。

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. inj_init
  2. inj_dapi1
  3. inj_dapi2
  4. inj_post1
  5. inj_post2
  6. inj_end
  7. inj_cool
  8. msn_sub_sequence *
  9. scan_delay
  10. scan_set_rf
  11. scan_cem_on
  12. scan
  13. reset

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

Value = len(msn_params)
1

# msn_sub_sequence

Parameters

No. Name Default Min Max Unit
1 iso_mz 100 50 1500 Th
2 precursor_mz 100 50 1500 Th
3 pre_iso_amp 10 V
4 iso_amp 3.5 V
5 cid_amp 2.5 V

Segments

  1. iso_delay
  2. iso_set_rf
  3. pre_iso
  4. iso_cool
  5. iso
  6. iso_end
  7. gas
  8. cid_delay
  9. cid_set_rf
  10. cid
  11. 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. inj_init
  2. inj_dapi1
  3. inj_dapi2
  4. inj_post1
  5. inj_post2
  6. inj_end
  7. inj_cool
  8. iso_delay
  9. iso_set_rf
  10. pre_iso
  11. iso_cool
  12. iso
  13. iso_end
  14. gas
  15. cid_delay_calib
  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. inj_init
  2. inj_dapi1
  3. inj_dapi2
  4. inj_post1
  5. inj_post2
  6. inj_end
  7. inj_cool
  8. iso_delay
  9. iso_set_rf
  10. pre_iso
  11. iso_cool
  12. iso
  13. iso_end
  14. gas
  15. cid_delay_calib
  16. cid_set_rf
  17. cid_slim
  18. cid_end
  19. scan_delay_calib
  20. scan_set_rf
  21. scan_cem_on
  22. scan
  23. reset

# MS2_Multi_Inj

多次进样串联质谱分析

Parameters

No. Name Default Min Max Unit
1 polarity pos pos neg
2 spray_voltage V
3 inj_dapi_time 10 1 20 ms
4 inj_times 2 1 15
5 inj_lmco_mz 50 Th
6 cid_q
7 scan_mass_start 50 Th
8 scan_mass_end 1000 Th
9 msn_params

Segments

  1. inj_init
  2. inj_dapi
  3. inj_post
  4. multi_inj_section
  5. inj_end
  6. inj_cool
  7. iso_delay
  8. iso_set_rf
  9. pre_iso
  10. iso_cool
  11. iso
  12. iso_end
  13. gas
  14. cid_delay
  15. cid_set_rf
  16. cid
  17. cid_end
  18. scan_delay
  19. scan_set_rf
  20. scan_kv_on
  21. scan_cem_on
  22. scan_set_rf
  23. scan
  24. reset

# multi_inj_section

多次进样序列。

由 MS2_Multi_Inj 生成的方程中,multi_inj_section 出现的次数为 inj_times - 1。

  1. inj_end_multi
  2. inj_cool
  3. iso_delay_multi
  4. iso_set_rf
  5. pre_iso
  6. iso_cool
  7. iso
  8. iso_end
  9. inj_dapi
  10. inj_post

# 双阱 Scan Method

# MS1_q1

离子阱1全谱扫描模式。

Method Parameters

No. Name Default Min Max Unit
1 polarity pos pos neg
2 spray_voltage 2000 0 5000 V
3 inj_size 35 1 80
4 inj_lmco_mz_q1 50 20 400 Th
5 inj_lmco_mz_q2 50 20 400 Th
6 scan_q 0.75 0.65 0.908 Th
7 scan_speed 1 1 20 Th
8 scan_mass_start 50 50 2000 Th
9 scan_mass_end 1000 50 2000 Th

Segments

  1. inj_init_q1
  2. inj_dapi1_q1
  3. inj_dapi2_q1
  4. inj_post1_q1
  5. inj_post2_q1
  6. inj_end_q1
  7. inj_cool_q1
  8. scan_delay_q1
  9. scan_kv_on_q1
  10. scan_cem_on_q1
  11. scan_set_rf_q1
  12. scan_q1
  13. reset

Instrument Parameters

Name Default Min Max Unit Description
inj_gate1 -2 -40 40 V 进样环节 gate1 的电压
inj_trap1 -8 -40 40 V 进样环节阱1直流偏置的电压
inj_lmco_q 0.825 0.65 0.908 进样时阱内最小离子的 q 值
scan_delay 600 400 2000 ms 控制 scan 时的气压
scan_ac1_amp 0.5-1.5 0 10 V scan 时 ac1 强度与质量轴质量数的转换关系,自动匹配scan_speed
scan_gate2 2 -40 40 V scan 时对应 gate2 的电压值
scan_gate3 2 -40 40 V scan 时对应 gate3 的电压值
scan_trap1 -1~-10 -40 40 V scan 时 trap1 直流电势与质量数的转换关系
scan_trap2 0 -40 40 V scan 时 trap2 直流电势与质量数的转换关系

# MS1_q2

离子阱2全谱扫描模式。

Method Parameters

No. Name Default Min Max Unit
1 polarity pos pos neg
2 spray_voltage 2000 0 5000 V
3 inj_size 35 1 80
4 inj_lmco_mz_q1 50 20 400 Th
5 inj_lmco_mz_q2 50 20 400 Th
6 scan_q 0.75 0.65 0.908 Th
7 scan_speed 1 1 20 Th
8 scan_mass_start 50 50 2000 Th
9 scan_mass_end 1000 50 2000 Th

Segments

  1. inj_init_q2
  2. inj_dapi1_q2
  3. inj_dapi2_q2
  4. inj_post1_q2
  5. inj_post2_q2
  6. inj_end_q2
  7. inj_cool_q2
  8. scan_delay_q2
  9. scan_kv_on_q2
  10. scan_cem_on_q2
  11. scan_set_rf_q2
  12. scan_q2
  13. reset

Instrument Parameters

Name Default Min Max Unit Description
inj_gate1 -2 -40 40 V 进样环节 gate1 的电压
inj_gate2 -2 -40 40 V 进样环节 gate2 的电压
inj_trap1 -8 -40 40 V 进样环节阱1直流偏置的电压
inj_trap2 -8 -40 40 V 进样环节阱2直流偏置的电压
inj_lmco_q 0.825 0.65 0.908 进样时阱内最小离子的 q 值
scan_delay 600 400 2000 ms 控制 scan 时的气压
scan_ac2_amp 0.5~1.5 0 10 V scan 时 ac2强度与质量轴质量数的转换关系,自动匹配scan_speed
scan_gate3 2 -40 40 V scan 时对应 gate3 的电压值
scan_trap2 -1~-10 -40 40 V scan 时 trap2 直流电势与质量数的转换关系

# MSn_q1

离子阱1串级质谱分析

Method Parameters

No. Name Default Min Max Unit
1 polarity pos pos neg
2 spray_voltage 2000 0 5000 V
3 inj_size 35 1 80
4 inj_lmco_mz_q1 50 20 400 Th
5 inj_lmco_mz_q2 50 20 400 Th
6 scan_q 0.75 0.65 0.908 Th
7 scan_speed 1 1 20 Th
8 scan_mass_start 50 50 2000 Th
9 scan_mass_end 1000 50 2000 Th
msn_params
10 iso_mz 100 50 2000 Th
11 precursor_mz 100 50 2000 Th
12 pre_iso_amp 10 0 30 V
13 cid_amp 2.5 0 30 V
14 iso_amp 3.5 0 30 V
15 cid_q 0.25 0.01 0.908

Segments

  1. inj_init_q1
  2. inj_dapi1_q1
  3. inj_dapi2_q1
  4. inj_post1_q1
  5. inj_post2_q1
  6. inj_end_q1
  7. inj_cool_q1
  8. iso_delay_q1
  9. iso_set_rf_q1
  10. pre_iso_q1
  11. cool_q1
  12. iso_q1
  13. iso_end_q1
  14. gas_q1
  15. cid_delay_q1
  16. cid_set_rf_q1
  17. cid_q1
  18. cid_end_q1
  19. scan_delay_q1
  20. scan_kv_on_q1
  21. scan_cem_on_q1
  22. scan_set_rf_q1
  23. scan_q1
  24. reset

Instrument Parameters

Name Default Min Max Unit Description
inj_gate1 -2 -40 40 V 进样环节 gate1 的电压
inj_trap1 -8 -40 40 V 进样环节阱1直流偏置的电压
inj_lmco_q 0.825 0.65 0.908 进样时阱内最小离子的 q 值
trap_q 0.3 0.01 0.908 trap 时离子的q值
iso_q 0.75 0.01 0.908 mz 与 iso_amp 的转换关系,根据质量自动计算 SWIFT 强度
iso_delay 1500 600 2000 ms 控制 isolation 时的气压
cid_delay 450 100 800 ms 控制 CID 时的气压
scan_delay 600 400 2000 ms 控制 scan 时的气压
scan_ac1_amp 0.5-1.5 0 10 V scan 时 ac1 强度与质量轴质量数的转换关系,自动匹配scan_speed
scan_gate2 2 -40 40 V scan 时对应 gate2 的电压值
scan_gate3 2 -40 40 V scan 时对应 gate3 的电压值
scan_trap1 -1~-10 -40 40 V scan 时 trap1 直流电势与质量数的转换关系
scan_trap2 -1~-10 -40 40 V scan 时 trap2 直流电势与质量数的转换关系

# MSn_q2

离子阱2串级质谱分析

Method Parameters

No. Name Default Min Max Unit
1 polarity pos pos neg
2 spray_voltage 2000 0 5000 V
3 inj_size 35 1 80
4 inj_lmco_mz_q1 50 20 400 Th
5 inj_lmco_mz_q2 50 20 400 Th
6 scan_q 0.75 0.65 0.908 Th
7 scan_speed 1 1 20 Th
8 scan_mass_start 50 50 2000 Th
9 scan_mass_end 1000 50 2000 Th
msn_params
10 iso_mz 100 50 2000 Th
11 precursor_mz 100 50 2000 Th
12 pre_iso_amp 10 0 30 V
13 cid_amp 2.5 0 30 V
14 iso_amp 3.5 0 30 V
15 cid_q 0.25 0.01 0.908

Segments

  1. inj_init_q2
  2. inj_dapi1_q2
  3. inj_dapi2_q2
  4. inj_post1_q2
  5. inj_post2_q2
  6. inj_end_q2
  7. cool_q2
  8. iso_delay_q2
  9. iso_set_rf_q2
  10. pre_iso_q2
  11. cool_q2
  12. iso_q2
  13. iso_end_q2
  14. gas_q2
  15. cid_delay_q2
  16. cid_set_rf_q2
  17. cid_q2
  18. cid_end_q2
  19. scan_delay_q2
  20. scan_kv_on_q2
  21. scan_cem_on_q2
  22. scan_set_rf_q2
  23. scan_q2
  24. reset

Instrument Parameters

Name Default Min Max Unit Description
inj_gate1 -2 -40 40 V 进样环节 gate1 的电压
inj_gate2 -2 -40 40 V 进样环节 gate2 的电压
inj_trap1 -8 -40 40 V 进样环节阱1直流偏置的电压
inj_trap2 -8 -40 40 V 进样环节阱2直流偏置的电压
inj_lmco_q 0.825 0.65 0.908 进样时阱内最小离子的 q 值
trap_q 0.75 0.01 0.908 trap 时离子的q值
iso_q 0.75 0.01 0.908 mz 与 iso_amp 的转换关系,根据质量自动计算 SWIFT 强度
iso_delay 1500 600 2000 ms 控制 isolation 时的气压
cid_delay 450 100 800 ms 控制 CID 时的气压
scan_delay 600 400 2000 ms 控制 scan 时的气压
scan_ac2_amp 0.5-1.5 0 10 V scan 时 ac2 强度与质量轴质量数的转换关系,自动匹配scan_speed
scan_gate3 2 -40 40 V scan 时对应 gate3 的电压值
scan_trap2 0 -40 40 V scan 时 trap2 直流电势与质量数的转换关系

# MSAE_q1

选择性离子传输 阱1-阱2

Method Parameters

No. Name Default Min Max Unit
1 polarity pos pos neg
2 spray_voltage 2000 0 5000 V
3 inj_size 35 1 80
4 inj_lmco_mz_q1 50 20 400 Th
5 inj_lmco_mz_q2 50 20 400 Th
6 scan_q 0.75 0.65 0.908 Th
7 scan_speed 1 1 20 Th
8 scan_mass_start 50 50 2000 Th
9 scan_mass_end 1000 50 2000 Th
dual_trap_params
10 precursor_mz 100 50 2000 Th
11 msae_q 0.5 0.01 0.908
12 msae_amp 0.6 0 10 V
12 msae_gate2 1 -40 40 V
13 msae _trap1 -1 -40 40 V
14 msae _trap2 -1 -40 40 V

Segments

  1. inj_init_q1
  2. inj_dapi1_q1
  3. inj_dapi2_q1
  4. inj_post1_q1
  5. inj_post2_q1
  6. inj_end_q1
  7. inj_cool_q1
  8. gas_q1
  9. msae_delay_q1
  10. msae_set_rf_q1
  11. msae_q1
  12. msae_end_q1
  13. scan_delay_q2
  14. scan_kv_on_q2
  15. scan_cem_on_q2
  16. scan_set_rf_q2
  17. scan_q2
  18. reset

Instrument Parameters

Name Default Min Max Unit Description
inj_gate1 -2 -40 40 V 进样环节 gate1 的电压
inj_trap1 -8 -40 40 V 进样环节阱1直流偏置的电压
inj_lmco_q 0.825 0.65 0.908 进样时阱内最小离子的 q 值
msae_delay 50 0 3000 ms msae气压控制
msae_time 100 0 3000 ms msae时长
trap_q 0.3 0.01 0.908 trap 时离子的q值
scan_delay 600 400 2000 ms 控制 scan 时的气压
scan_ac2_amp 0.5-1.5 0 10 V scan 时 ac2 强度与质量轴质量数的转换关系,自动匹配scan_speed
scan_gate3 2 -40 40 V scan 时对应 gate3 的电压值
scan_trap2 -1~-10 -40 40 V scan 时 trap2 直流电势与质量数的转换关系

# MSAE_q2

选择性离子传输 阱2-阱1

Method Parameters

No. Name Default Min Max Unit
1 polarity pos pos neg
2 spray_voltage 2000 0 5000 V
3 inj_size 35 1 80
4 inj_lmco_mz_q1 50 20 400 Th
5 inj_lmco_mz_q2 50 20 400 Th
6 scan_q 0.75 0.65 0.908 Th
7 scan_speed 1 1 20 Th
8 scan_mass_start 50 50 2000 Th
9 scan_mass_end 1000 50 2000 Th
dual_trap_params
10 precursor_mz 100 50 2000 Th
11 msae_q 0.5 0.01 0.908
12 msae_amp 0.6 0 10 V
12 msae_gate2 1 -40 40 V
13 msae _trap1 -1 -40 40 V
14 msae _trap2 -1 -40 40 V

Segments

  1. inj_init_q2
  2. inj_dapi1_q2
  3. inj_dapi2_q2
  4. inj_post1_q2
  5. inj_post2_q2
  6. inj_end_q2
  7. cool_q2
  8. gas_q2
  9. msae_delay_q2
  10. msae_set_rf_q2
  11. msae_q2
  12. msae_end_q2
  13. scan_delay_q1
  14. scan_kv_on_q1
  15. scan_cem_on_q1
  16. scan_set_rf_q1
  17. scan_q1
  18. reset

Instrument Parameters

Name Default Min Max Unit Description
inj_gate1 -2 -40 40 V 进样环节 gate1 的电压
inj_trap1 -8 -40 40 V 进样环节阱1直流偏置的电压
inj_gate2 -2 -40 40 V 进样环节 gate2 的电压
inj_trap2 -8 -40 40 V 进样环节阱2直流偏置的电压
inj_lmco_q 0.825 0.65 0.908 进样时阱内最小离子的 q 值
msae_delay 50 0 3000 ms msae气压控制
msae_time 100 0 3000 ms msae时长
trap_q 0.3 0.01 0.908 trap 时离子的q值
scan_delay 600 400 2000 ms 控制 scan 时的气压
scan_ac1_amp 0.5-1.5 0 10 V scan 时 ac1 强度与质量轴质量数的转换关系,自动匹配scan_speed
scan_gate2 2 -40 40 V scan 时对应 gate2 的电压值
scan_gate3 2 -40 40 V scan 时对应 gate3 的电压值
scan_trap1 -1~-10 -40 40 V scan 时 trap1 直流电势与质量数的转换关系
scan_trap2 -1~-10 -40 40 V scan 时 trap2 直流电势与质量数的转换关系

# MS2_BT_q1

离子阱1-2的串级质谱分析

Method Parameters

No. Name Default Min Max Unit
1 polarity pos pos neg
2 spray_voltage 2000 0 5000 V
3 inj_size 35 1 80
4 inj_lmco_mz_q1 50 20 400 Th
5 inj_lmco_mz_q2 50 20 400 Th
6 scan_q 0.75 0.65 0.908 Th
7 scan_speed 1 1 20 Th
8 scan_mass_start 50 50 2000 Th
9 scan_mass_end 1000 50 2000 Th
dual_trap_params
10 precursor_mz 100 50 2000 Th
11 msae_q 0.5 0.01 0.9
12 msae_gate2 2 -40 40 V
13 msae_trap1 0 -40 40 V
14 msae_trap2 -30 -40 40 V
15 msae_amp 0.6 0 10 V

Segments

  1. inj_init_q1
  2. inj_dapi1_q1
  3. inj_dapi2_q1
  4. inj_post1_q1
  5. inj_post2_q1
  6. inj_end_q1
  7. inj_cool_q1
  8. gas_q1
  9. msae_delay_q1
  10. msae_set_rf_q1
  11. msae_q1
  12. msae_end_q1
  13. scan_delay_q2
  14. scan_kv_on_q2
  15. scan_cem_on_q2
  16. scan_set_rf_q2
  17. scan_q2
  18. reset

Instrument Parameters

Name Default Min Max Unit Description
inj_gate1 -2 -40 40 V 进样环节 gate1 的电压
inj_trap1 -8 -40 40 V 进样环节阱1直流偏置的电压
inj_lmco_q 0.825 0.65 0.908 进样时阱内最小离子的 q 值
msae_delay 50 0 3000 ms msae气压控制
msae_time 100 0 3000 ms msae时长
trap_q 0.3 0.01 0.908 trap 时离子的q值
scan_delay 600 400 2000 ms 控制 scan 时的气压
scan_ac2_amp 0.5-1.5 0 10 V scan 时 ac2 强度与质量轴质量数的转换关系,自动匹配scan_speed
scan_gate3 2 -40 40 V scan 时对应 Gate3 的电压值
scan_trap2 -1~-10 -40 40 V scan 时 trap2 直流电势与质量数的转换关系

# MS3_BT_q1

离子阱1-2-1的串级质谱分析

Method Parameters

No. Name Default Min Max Unit
1 polarity pos pos neg
2 spray_voltage 2000 0 5000 V
3 inj_size 35 1 80
4 inj_lmco_mz_q1 50 20 400 Th
5 inj_lmco_mz_q2 50 20 400 Th
6 scan_q 0.75 0.65 0.908 Th
7 scan_speed 1 1 20 Th
8 scan_mass_start 50 50 2000 Th
9 scan_mass_end 1000 50 2000 Th
dual_trap_params
10 precursor_mz 100 50 2000 Th
11 msae_q 0.5 0.01 0.908
12 msae_gate2 2 -40 40 V
13 msae_trap1 -30 -40 40 V
14 msae_trap2 -30 -40 40 V
15 msae_amp 0.6 0 10 V

Segments

  1. inj_init_q1
  2. inj_dapi1_q1
  3. inj_dapi2_q1
  4. inj_post1_q1
  5. inj_post2_q1
  6. inj_end_q1
  7. inj_cool_q1
  8. gas_q1
  9. msae_delay_q1
  10. msae_set_rf_q1
  11. msae_q1
  12. msae_end_q1
  13. gas_q2
  14. msae_delay_q2
  15. msae_set_rf_q2
  16. msae_q2
  17. msae_end_q2
  18. scan_delay_q1
  19. scan_kv_on_q1
  20. scan_cem_on_q1
  21. scan_set_rf_q1
  22. scan_q1
  23. reset

Instrument Parameters

Name Default Min Max Unit Description
inj_gate1 -2 -40 40 V 进样环节 gate1 的电压
inj_trap1 -8 -40 40 V 进样环节阱1直流偏置的电压
inj_gate2 -2 -40 40 V 进样环节 gate2 的电压
inj_trap2 -8 -40 40 V 进样环节阱2直流偏置的电压
inj_lmco_q 0.825 0.65 0.908 进样时阱1最小离子的 q 值
msae_delay 50 0 3000 ms msae气压控制
msae_time 100 0 3000 ms msae时长
trap_q 0.3 0.01 0.908 trap 时离子的q值
scan_delay 600 400 2000 ms 控制 scan 时的气压
scan_ac1_amp 0.5-1.5 0 10 V scan 时 ac2 强度与质量轴质量数的转换关系,自动匹配scan_speed
scan_gate2 2 -40 40 V scan 时对应 gate2 的电压值
scan_gate3 2 -40 40 V scan 时对应 gate3 的电压值
scan_trap1 -1~-10 -40 40 V scan 时 trap1 直流电势与质量数的转换关系
scan_trap2 -1~-10 -40 40 V scan 时 trap2 直流电势与质量数的转换关系

# 附录

# 1. 阱1出谱涉及的signal

No. Name Description
1 Q1_mz_start RF1 起始质量值
2 Q1_mz_end RF1 起始质量值
3 Q1_q_start RF1 起始q值
4 Q1_q_end RF1 终止q值
5 AC1_freq_start AC1 频率起始值
6 AC1_freq_end AC1 频率终止值
7 AC1_amp_start AC1 幅度起始值
8 AC1_amp_end AC1 幅度终止值
11 Gate2_start Gate2 起始值
12 Gate2_end Gate2 终止值
13 Gate3_start Gate3 起始值
14 Gate3_end Gate3 终止值
15 Trap1_start Trap1 起始值
16 Trap1_end Trap1 终止值
17 Trap2_start Trap2 起始值
18 Trap2_end Trap2 终止值

# 2. 阱2出谱涉及的signal

No. Name Description
1 Q2_mz_start RF2 起始质量值
2 Q2_mz_end RF2 起始质量值
3 Q2_q_start RF2 起始q值
4 Q2_q_end RF2 终止q值
5 AC2X_freq_start AC2 频率起始值
6 AC2X_freq_end AC2 频率终止值
7 AC2X_amp_start AC2 幅度起始值
8 AC2X_amp_end AC2 幅度终止值
9 Gate3_start Gate3 起始值
10 Gate3_end Gate3 终止值
11 Trap2_start Trap2 起始值
12 Trap2_end Trap2 终止值

# 3. 单阱 segment 详解

# inj_init

初始化信号

Time            = max(min_segment_time, inj_pre_time);
Source          = switch_on;
Gate1_Start     = (polarity == "POS") ? inj_gate1 : -inj_gate1;
Gate1_End       = Gate1_Start;
Gate2_Start     = (polarity == "POS") ? gate2_block : -gate2_block;
Gate2_End       = Gate2_Start;
Gate3_Start     = gate3_default;
Gate3_End       = Gate3_End;
Trap1_Start     = trap1_default;
Trap1_End       = Trap1_Start;
Trap2_Start     = (polarity == "POS") ? inj_trap2 : -inj_trap2;
Trap2_End       = Trap2_Start;
Spray_Amp_Start = getSprayVoltage();
Spray_Amp_End   = Spray_Amp_Start;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# inj_dapi1

打开 DAPI 进样

if (inj_size <= inj_post_sum_time || inj_size >= inj_post_sum_time + inj_DAPI_sum_time) {
    Time = max(min_segment_time, inj_DAPI_sum_time * 0.5);
} else {
    Time = max(min_segment_time, inj_post_sum_time + inj_DAPI_sum_time - inj_size);
}
DAPI = switch_on;
if (inj_size >= inj_post_sum_time + inj_DAPI_sum_time) {
    Q2_mz_Start = min(inj_lmco_mz, inj_lmco_mz_max);
    Q2_mz_End   = Q2_mz_Start;
    Q2_q_Start  = inj_lmco_q;
    Q2_q_End    = Q2_q_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12

# inj_dapi2

打开 DAPI 进样

if (inj_size <= inj_post_sum_time || inj_size >= inj_post_sum_time + inj_DAPI_sum_time) {
    Time = max(min_segment_time, inj_DAPI_sum_time * 0.5);
} else {
    Time = max(min_segment_time, inj_size - inj_post_sum_time);
}

if (inj_size > inj_post_sum_time &&
    inj_size < inj_post_sum_time + inj_DAPI_sum_time) {
    Q2_mz_Start = min(inj_lmco_mz, inj_lmco_mz_max);
    Q2_mz_End   = Q2_mz_Start;
    Q2_q_Start  = inj_lmco_q;
    Q2_q_End    = Q2_q_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# inj_dapi

MS2_Multi_Inj 模式下,打开 DAPI 进样

Time        = max(min_segment_time, inj_dapi_time);
DAPI        = switch_on;
Source      = switch_on;
Gate1_Start = gate1_default;
Gate1_End   = Gate1_Start;
Trap2_Start = (polarity == "POS") ? inj_trap2 : -inj_trap2;
Trap2_End   = Trap2_Start;

if (prev->Q2_mz_End == 0) {  // injection for the first time
    Q2_mz_Start = min(inj_lmco_mz, inj_lmco_mz_max);
    Q2_mz_End   = Q2_mz_Start;
    Q2_q_Start  = inj_lmco_q;
    Q2_q_End    = Q2_q_Start;
} else {
    if (inj_lmco_mz_max * inj_lmco_q < iso_mz * trap_q) {
      Q2_mz_End = inj_lmco_mz_max;
      Q2_q_End  = inj_lmco_q;
    } else {
      Q2_mz_End = iso_mz;
      Q2_q_End  = trap_q;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# inj_post1

进样,并合理分配进样量

if (inj_size >= inj_post_sum_time) {
    Time = max(min_segment_time, inj_post_sum_time * 0.5);
} else {
    Time = max(min_segment_time, inj_post_sum_time - inj_size);
}
DAPI = switch_off;
if (inj_size == inj_post_sum_time) {
    Q2_mz_Start = min(inj_lmco_mz, inj_lmco_mz_max);
    Q2_mz_End   = Q2_mz_Start;
    Q2_q_Start  = inj_lmco_q;
    Q2_q_End    = Q2_q_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12

# inj_post2

进样,并合理分配进样量

if (inj_size >= inj_post_sum_time) {
    Time = max(min_segment_time, inj_post_sum_time * 0.5);
} else {
    Time = max(min_segment_time, inj_size);
}

if (inj_size < inj_post_sum_time) {
    Q2_mz_Start = min(inj_lmco_mz, inj_lmco_mz_max);
    Q2_mz_End   = Q2_mz_Start;
    Q2_q_Start  = inj_lmco_q;
    Q2_q_End    = Q2_q_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12

# inj_post

MS2_Multi_Inj 模式下,满进样量进样

Time = max(min_segment_time, inj_multi_sum_time - inj_dapi_time);
DAPI = switch_off;
1
2

# inj_end

控制 gate 变化,关闭进样

Time            = min_segment_time;
Source          = switch_off;
Gate1_Start     = (polarity == "POS") ? gate1_block : -gate1_block;
Gate1_End       = Gate1_Start;
Spray_Amp_Start = pos_5kv_default;
Spray_Amp_End   = Spray_Amp_Start;
Trap2_End       = trap2_default;
1
2
3
4
5
6
7

# inj_end_multi

控制 gate 变化,关闭进样,保持高压

Time        = min_segment_time;
Source      = switch_off;
Gate1_Start = (polarity == "POS") ? gate1_block :  - gate1_block;
Gate1_End   = Gate1_Start;
Trap2_End   = trap2_default;
1
2
3
4
5

# inj_cool

进样后离子冷却

Time = max(min_segment_time, cool_time);
if (iso_mz > 0) {
    if (inj_lmco_mz_max * inj_lmco_q < iso_mz * trap_q) {
        Q2_mz_End = inj_lmco_mz_max;
        Q2_q_End  = inj_lmco_q;
    } else {
        Q2_mz_End = iso_mz;
        Q2_q_End  = trap_q;
    }
}

SWIFT2     = switch_off;
SWIFT2_Loc = swift2_loc_default;
SWIFT2_Amp = swift2_amp_default;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# inj_cool_multi

进样后离子冷却

Time   = max(min_segment_time, cool_time);
Source = switch_on;
if (iso_mz > 0) {
    if (inj_lmco_mz_max * inj_lmco_q < iso_mz * trap_q) {
        Q2_mz_End = inj_lmco_mz_max;
        Q2_q_End  = inj_lmco_q;
    } else {
        Q2_mz_End = iso_mz;
        Q2_q_End  = trap_q;
    }
}
Trap2_Start = (polarity == "POS") ? inj_trap2 : -inj_trap2;
Trap2_End   = Trap2_Start;
1
2
3
4
5
6
7
8
9
10
11
12
13

# iso_delay

控制 isolation 时的气压

if (msn_index == 0) {
    Time = max(min_segment_time, iso_delay);
} else {
    Time = max(min_segment_time, iso_delay_msn);
}
1
2
3
4
5

# iso_delay_multi

控制 MS2_Multi_Inj 模式下 isolation 时的气压

Time = max(min_segment_time, iso_delay_multi);
1

# iso_set_rf

设置 isolation 时的 RF 强度

Time      = max(min_segment_time, cool_time);
Q2_mz_End = get_iso_mz(msn_index);
Q2_q_End  = pre_iso_q;
1
2
3

# pre_iso

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

Time       = max(min_segment_time, get_pre_iso_swift_time(msn_index));
SWIFT2     = get_pre_iso_amp(msn_index) > 0 ? switch_on : switch_off;
SWIFT2_Loc = pre_iso_swift2_loc + msn_index * 2;
SWIFT2_Amp = get_pre_iso_amp(msn_index);
1
2
3
4

# iso_cool

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

Time       = max(min_segment_time, cool_time);
SWIFT2     = switch_off;
SWIFT2_Loc = swift2_loc_default;
SWIFT2_Amp = swift2_amp_default;
Q2_q_End   = iso_q;
1
2
3
4
5

# iso

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

Time       = max(min_segment_time, get_iso_swift_time(msn_index));
SWIFT2     = get_iso_amp(msn_index) > 0 ? switch_on : switch_off;
SWIFT2_Loc = iso_swift2_loc + msn_index * 2;
SWIFT2_Amp = get_iso_amp(msn_index);
1
2
3
4

# iso_end

isolation结束时恢复RF的强度

Time = max(min_segment_time, cool_time);
if (inj_lmco_mz_max * inj_lmco_q < iso_mz * trap_q) {
    Q2_mz_End = inj_lmco_mz_max;
    Q2_q_End  = inj_lmco_q;
} else {
    Q2_mz_End = iso_mz;
    Q2_q_End  = trap_q;
}

SWIFT2     = switch_off;
SWIFT2_Loc = swift2_loc_default;
SWIFT2_Amp = swift2_amp_default;
1
2
3
4
5
6
7
8
9
10
11
12

# gas

打开 DAPI 补气

Time = max(min_segment_time, gas_time);
if (gas_via_dapi == 1) {
    DAPI = switch_on;
}
1
2
3
4

# cid_delay

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

Time = max(min_segment_time, cid_delay_list[msn_index] - cid_time_extension_l);
DAPI = switch_off;
1
2

# cid_delay_calib

MS2_Pressure_Calib 模式下控制 CID 时的气压

Time = max(min_segment_time, cid_delay);
DAPI = switch_off;
1
2

# cid_delay_dda

MS2_DDA 模式下控制 CID 时的气压

Time = max(min_segment_time, cid_delay);
DAPI = switch_off;
1
2

# cid_set_rf

设置 CID 时的 RF 强度

Time = max(min_segment_time, cool_time);
Q2_mz_End = get_precursor_mz(msn_index);
Q2_q_End  = cid_q;
1
2
3

# cid

执行CID

Time = max(min_segment_time, cid_time + cid_time_extension_l + cid_time_extension_r);
if (get_cid_amp(msn_index) > 0) {
    AC2X_FRE_Start = QToFreq::Instance().calculate(cid_q, rf2_freq);
    AC2X_FRE_End   = AC2X_FRE_Start;
}
AC2X_AMP_Start = get_cid_amp(msn_index);
AC2X_AMP_End   = AC2X_AMP_Start;
1
2
3
4
5
6
7

# cid_slim

MS2_Pressure_Calib 模式下执行 CID

Time         = max(min_segment_time, cid_time);
double cid_q = cid_q;
if (get_cid_amp(msn_index) > 0) {
    AC2X_FRE_Start = QToFreq::Instance().calculate(cid_q, rf2_freq);
    AC2X_FRE_End   = AC2X_FRE_Start;
}
AC2X_AMP_Start = get_cid_amp(msn_index);
AC2X_AMP_End   = AC2X_AMP_Start;
1
2
3
4
5
6
7
8

# cid_dda

执行 MS2_DDA 模式下的 CID

Time           = max(min_segment_time, dda_cid_time);
double cid_q   = cid_q;
AC2X_FRE_Start = QToFreq::Instance().calculate(cid_q, rf2_freq);
AC2X_FRE_End   = AC2X_FRE_Start;
AC2X_AMP_Start = get_cid_amp(msn_index);
AC2X_AMP_End   = AC2X_AMP_Start;
1
2
3
4
5
6

# cid_end

结束 CID

Time           = min_segment_time;
AC2X_FRE_Start = ac2_freq_default;
AC2X_FRE_End   = AC2X_FRE_Start;
AC2X_AMP_Start = ac2_amp_default;
AC2X_AMP_End   = AC2X_AMP_Start;

// set Q2_mz_End and Q2_q_End for next iso_mz
if (inj_lmco_mz_max * inj_lmco_q < iso_mz_next * trap_q) {
  Q2_mz_End = inj_lmco_mz_max;
  Q2_q_End  = inj_lmco_q;
} else {
  Q2_mz_End = iso_mz_next;
  Q2_q_End  = trap_q;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# scan_delay

控制 scan 时的气压

Time = scan_delay - cid_time_extension_r
1

# scan_delay_ms1

控制 MS1 模式下 scan 时的气压

Time = iso_delay
1

# scan_delay_calib

控制 MS2_Pressure_Calib 模式下 scan 时的气压

Time           = max(min_segment_time, scan_delay);
AC2X_FRE_Start = ac2_freq_default;
AC2X_FRE_End   = AC2X_FRE_Start;
AC2X_AMP_Start = ac2_amp_default;
AC2X_AMP_End   = AC2X_AMP_Start;
1
2
3
4
5

# scan_delay_dda

控制 MS2_DDA 模式下 scan 时的气压

Time           = max(min_segment_time, scan_delay + cid_time - dda_cid_time);
AC2X_FRE_Start = ac2_freq_default;
AC2X_FRE_End   = AC2X_FRE_Start;
AC2X_AMP_Start = ac2_amp_default;
AC2X_AMP_End   = AC2X_AMP_Start;
1
2
3
4
5

# scan_kv_on

开启检测器高压电源,启动气压和高压保护

Time               = max(min_segment_time, scan_kv_on_time);
Dynode_Amp_Start   = scan_dynode;
Dynode_Amp_End     = Dynode_Amp_Start;
Detector_Amp_Start = scan_detector;
Detector_Amp_End   = Detector_Amp_Start;
1
2
3
4
5

# scan_cem_on

开启检测器光耦开关

Time     = max(min_segment_time, scan_cem_on_time);
Detector = switch_on;
Q2_mz_End = scan_mass_start;
Q2_q_End  = 0.908;
Data = round(adc_freq / scan_speed / pt_per_th / 1000);

1
2
3
4
5
6

# scan_set_rf

计算 scan 时的 RF 强度

Time      = max(min_segment_time, cool_time);
Q2_mz_End = scan_mass_start;
Q2_q_End  = scan_q;
if (1 == scan_ac_secular_freq_n) {
    AC2X_FRE_Start = rf2_freq - QToFreq::Instance().calculate(scan_q, rf2_freq);
    AC2X_FRE_End = AC2X_FRE_Start;
    
    AC2Y_FRE_Start = rf2_freq - QToFreq::Instance().calculate(scan_q, rf2_freq);
    AC2Y_FRE_End = AC2Y_FRE_Start;
} else {
    AC2X_FRE_Start = QToFreq::Instance().calculate(scan_q, rf2_freq);
    AC2X_FRE_End   = AC2X_FRE_Start;
    
    AC2Y_FRE_Start = QToFreq::Instance().calculate(scan_q, rf2_freq);
    AC2Y_FRE_End = AC2Y_FRE_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# scan

执行谱图扫描

Time = max(min_segment_time, (scan_mass_end - scan_mass_start) / scan_speed);

Spec_Loc       = spec_loc_default;
Q2_mz_End      = scan_mass_end;
AC2X_AMP_Start = scan_mass_start * scan_ac2_amp.coefs.c1 + scan_ac2_amp.coefs.c0;
AC2X_AMP_End   = scan_mass_end * scan_ac2_amp.coefs.c1 + scan_ac2_amp.coefs.c0;
AC2Y_AMP_Start = scan_mass_start * scan_ac2_amp.coefs.c1 + scan_ac2_amp.coefs.c0;
AC2Y_AMP_End   = scan_mass_end * scan_ac2_amp.coefs.c1 + scan_ac2_amp.coefs.c0;
    
Gate2_Start    = (polarity == "POS") ? scan_gate2 :  - scan_gate2;
Gate2_End      = Gate2_Start;
Trap2_Start    = (polarity == "POS") ? scan_mass_start * scan_trap2.coefs.c1 + scan_trap2.coefs.c0 :  - scan_mass_start * scan_trap2.coefs.c1 - scan_trap2.coefs.c0;
Trap2_End      = (polarity == "POS") ? scan_mass_end * scan_trap2.coefs.c1 + scan_trap2.coefs.c0 :  - scan_mass_end * scan_trap2.coefs.c1 - scan_trap2.coefs.c0;

1
2
3
4
5
6
7
8
9
10
11
12
13
14

# cool

用于间隔不同的离子操作

Time = max(min_segment_time, cool_time);
1

# reset

重置所有信号

Time = max(min_segment_time, scan_post_time);
1

# 4. 双阱 segment 详解

# inj_init_q1(q2)

初始化信号

Time   = max(min_segment_time, inj_pre_time);
Source = switch_on;

if (polarity == "POS")
  Gate1_Start = inj_gate1;
else
  Gate1_Start = -inj_gate1;
Gate1_End = Gate1_Start;

if (polarity == "POS")
  Gate3_Start = gate3_block;
else
  Gate3_Start = -gate3_block;
Gate3_End = Gate3_Start;

if ("q1" == scan_loc) {
  Gate2_Start = (polarity == "POS") ? gate2_block : -gate2_block;
  Gate2_End   = Gate2_Start;

  Trap1_Start = (polarity == "POS") ? inj_trap1 : -inj_trap1;
  Trap1_End   = Trap1_Start;
} else {
  Gate2_Start = (polarity == "POS") ? inj_gate2 : -inj_gate2;
  Gate2_End   = Gate2_Start;

  Trap2_Start = (polarity == "POS") ? inj_trap2 : -inj_trap2;
  Trap2_End   = Trap2_Start;
}

if (polarity == "POS")
  Spray_Amp_Start = spray_voltage;
else
  Spray_Amp_Start = -spray_voltage;
Spray_Amp_End = Spray_Amp_Start;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# inj_dapi1_q1(q2)

打开DAPI进样

if (inj_size <= inj_post_sum_time || inj_size >= inj_post_sum_time + inj_DAPI_sum_time) {
  Time = max(min_segment_time, inj_DAPI_sum_time * 0.5);
} else {
  Time = max(min_segment_time, inj_post_sum_time + inj_DAPI_sum_time - inj_size);
}

DAPI = switch_on;

if (inj_size >= inj_post_sum_time + inj_DAPI_sum_time) {
  Q1_mz_Start = min(inj_lmco_mz_q1, inj_lmco_mz_max);
  Q1_mz_End   = Q1_mz_Start;
  Q1_q_Start  = inj_lmco_q;
  Q1_q_End    = Q1_q_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# inj_dapi2_q1(q2)

打开DAPI进样

if (inj_size <= inj_post_sum_time ||
    inj_size >= inj_post_sum_time + inj_DAPI_sum_time) {
  Time = max(min_segment_time, inj_DAPI_sum_time * 0.5);
} else {
  Time = max(min_segment_time, inj_size - inj_post_sum_time);
}

if (inj_size > inj_post_sum_time && inj_size < inj_post_sum_time + inj_DAPI_sum_time) {
  Q1_mz_Start = min(inj_lmco_mz_q1, inj_lmco_mz_max);
  Q1_mz_End   = Q1_mz_Start;
  Q1_q_Start  = inj_lmco_q;
  Q1_q_End    = Q1_q_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# inj_post1_q1(q2)

进样,并合理分配进样量

if (inj_size >= inj_post_sum_time) {
  Time = max(min_segment_time, inj_post_sum_time * 0.5);
} else {
  Time = max(min_segment_time, inj_post_sum_time - inj_size);
}

DAPI = switch_off;

if (inj_size == inj_post_sum_time) {
  Q1_mz_Start = min(inj_lmco_mz_q1, inj_lmco_mz_max);
  Q1_mz_End   = Q1_mz_Start;
  Q1_q_Start  = inj_lmco_q;
  Q1_q_End    = Q1_q_Start;

  if ("q2" == scan_loc) {
    Q2_mz_Start = min(inj_lmco_mz_q2, inj_lmco_mz_max);
    Q2_mz_End   = Q2_mz_Start;
    Q2_q_Start  = inj_lmco_q;
    Q2_q_End    = Q2_q_Start;
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# inj_post2_q1(q2)

进样,并合理分配进样量

if (inj_size >= inj_post_sum_time) {
  Time = max(min_segment_time, inj_post_sum_time * 0.5);
} else {
  Time = max(min_segment_time, inj_size);
}

if (inj_size < inj_post_sum_time) {
  Q1_mz_Start = min(inj_lmco_mz_q1, inj_lmco_mz_max);
  Q1_mz_End   = Q1_mz_Start;
  Q1_q_Start  = inj_lmco_q;
  Q1_q_End    = Q1_q_Start;

  if (PmsEnum::TrapLoc::q2 == scan_loc) {
    Q2_mz_Start = min(inj_lmco_mz_q2, inj_lmco_mz_max);
    Q2_mz_End   = Q2_mz_Start;
    Q2_q_Start  = inj_lmco_q;
    Q2_q_End    = Q2_q_Start;
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# inj_end_q1(q2)

控制 gate 变化,结束进样

Time            = max(min_segment_time, cool_time);
Source          = switch_off;
Gate1_End       = (polarity == "POS") ? gate1_block : -gate1_block;
Gate2_End       = (polarity == "POS") ? gate2_block : -gate2_block;
Gate3_End       = (polarity == "POS") ? gate3_block : -gate3_block;
Trap1_End       = trap1_default;
Trap2_End       = trap2_default;
Spray_Amp_Start = pos_5kv_default;
Spray_Amp_End   = Spray_Amp_Start;
1
2
3
4
5
6
7
8
9

# inj_cool_q1(q2)

进样后离子冷却

Time = max(min_segment_time, inj_cool_time);
// only used by ms2+ or msae
if (iso_mz > 0) {
    if ("q1" == scan_loc) {
      if (inj_lmco_mz_max * inj_lmco_q < iso_mz * trap_q) {
        Q1_mz_End = inj_lmco_mz_max;
        Q1_q_End  = inj_lmco_q;
      } else {
        Q1_mz_End = iso_mz;
        Q1_q_End  = trap_q;
      }
    } else {
      Q1_mz_End = q1_mz_default;
      Q1_q_End  = q1_q_default;

      if (inj_lmco_mz_max * inj_lmco_q < iso_mz * trap_q) {
        Q2_mz_End = inj_lmco_mz_max;
        Q2_q_End  = inj_lmco_q;
      } else {
        Q2_mz_End = iso_mz;
        Q2_q_End  = trap_q;
      }
    }
}

SWIFT1     = switch_off;
SWIFT1_Loc = swift1_loc_default;
SWIFT1_Amp = swift1_amp_default;
SWIFT2     = switch_off;
SWIFT2_Loc = swift2_loc_default;
SWIFT2_Amp = swift2_amp_default;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# msae_delay_q1(q2)

控制MSAE时的气压

Time = max(min_segment_time, msae_delay);
DAPI = switch_off;
1
2

# msae_set_rf_q1(q2)

设置MSAE时的RF强度

Time = max(min_segment_time, cool_time);
Gate2_End = (polarity =="POS") ? msae_gate2 : -msae_gate2;
if ("q1" == target_ion_loc) {
    Q1_mz_End = get_msae_precursor_mz(msn_index, precursor_index);
    Q1_q_End  = msae_q;

    Q2_mz_Start = min(inj_lmco_mz_q2, inj_lmco_mz_max);
    Q2_mz_End   = Q2_mz_Start;
    Q2_q_Start  = inj_lmco_q;
    Q2_q_End    = Q2_q_Start;
} else {
    Q2_mz_End = get_msae_precursor_mz(msn_index, precursor_index);
    Q2_q_End  = msae_q;

    Q1_mz_Start = min(inj_lmco_mz_q1, inj_lmco_mz_max);
    Q1_mz_End   = Q1_mz_Start;
    Q1_q_Start  = inj_lmco_q;
    Q1_q_End    = Q1_q_Start;
}

Trap1_End = (polarity =="POS") ? msae_trap1 : -msae_trap1;
Trap2_End = (polarity =="POS") ? msae_trap2 : -msae_trap2;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# msae_q1(q2)

执行 MSAE

Time = max(min_segment_time, msae_time);

if ("q1" == target_ion_loc) {
    AC1_FRE_Start = QToFreq::Instance().calculate(msae_q, rf1_freq);
    AC1_FRE_End   = AC1_FRE_Start;
    AC1_AMP_Start = msae_amp;
    AC1_AMP_End   = AC1_AMP_Start;
} else {
    AC2X_FRE_Start = QToFreq::Instance().calculate(msae_q, rf2_freq);
    AC2X_FRE_End   = AC2X_FRE_Start;
    AC2X_AMP_Start = msae_amp;
    AC2X_AMP_End   = AC2X_AMP_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# mase_end_q1(q2)

MSAE结束时恢复RF强度

Time      = max(min_segment_time, cool_time);
Q1_mz_End = min(inj_lmco_mz_q1, inj_lmco_mz_max);
Q1_q_End  = inj_lmco_q;
Q2_mz_End = min(inj_lmco_mz_q2, inj_lmco_mz_max);
Q2_q_End  = inj_lmco_q;

AC1_FRE_Start = ac1_freq_default;
AC1_FRE_End   = AC1_FRE_Start;
AC1_AMP_Start = ac1_amp_default;
AC1_AMP_End   = AC1_AMP_Start;

AC2X_FRE_Start = ac2_freq_default;
AC2X_FRE_End   = AC2X_FRE_Start;
AC2X_AMP_Start = ac2_amp_default;
AC2X_AMP_End   = AC2X_AMP_Start;

Gate2_End = (polarity =="POS") ? gate2_block : -gate2_block;

Trap1_End = trap1_default;
Trap2_End = trap2_default;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# iso_delay_q1(q2)

控制isolation时的气压

Time = max(min_segment_time, iso_delay_msn);
1

# iso_set_rf_q1(q2)

设置isolation时的 RF 强度

Time = max(min_segment_time, cool_time);
if ("q1" == scan_loc) {
    Q1_mz_End = get_iso_mz(msn_index);
    Q1_q_End  = pre_iso_q;
} else {
    Q2_mz_End = get_iso_mz(msn_index);
    Q2_q_End  = pre_iso_q;
}
1
2
3
4
5
6
7
8

# pre_iso_q1(q2)

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

Time = max(min_segment_time, get_pre_iso_swift_time(msn_index));
if ("q1" == scan_loc) {
    SWIFT1     = get_pre_iso_amp(msn_index) > 0 ? switch_on : switch_off;
    SWIFT1_Loc = pre_iso_swift1_loc + msn_index * 2;
    SWIFT1_Amp = get_pre_iso_amp(msn_index);
} else {
    SWIFT2     = get_pre_iso_amp(msn_index) > 0 ? switch_on : switch_off;
    SWIFT2_Loc = pre_iso_swift2_loc + msn_index * 2;
    SWIFT2_Amp = get_pre_iso_amp(msn_index);
}
1
2
3
4
5
6
7
8
9
10

# iso_cool_q1(q2)

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

Time = max(min_segment_time, cool_time);
if ("q1" == scan_loc) {
    SWIFT1     = switch_off;
    SWIFT1_Loc = swift1_loc_default;
    SWIFT1_Amp = swift1_amp_default;
    Q1_q_End   = iso_q;
} else {
    SWIFT2     = switch_off;
    SWIFT2_Loc = swift2_loc_default;
    SWIFT2_Amp = swift2_amp_default;
    Q2_q_End   = iso_q;
}
1
2
3
4
5
6
7
8
9
10
11
12

# iso_q1(q2)

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

Time = max(min_segment_time, get_iso_swift_time(msn_index));
if ("q1" == scan_loc) {
    SWIFT1     = get_iso_amp(msn_index) > 0 ? switch_on : switch_off;
    SWIFT1_Loc = iso_swift1_loc + msn_index * 2;
    SWIFT1_Amp = get_iso_amp(msn_index);
} else {
    SWIFT2     = get_iso_amp(msn_index) > 0 ? switch_on : switch_off;
    SWIFT2_Loc = iso_swift2_loc + msn_index * 2;
    SWIFT2_Amp = get_iso_amp(msn_index);
}
1
2
3
4
5
6
7
8
9
10

# iso_end_q1(q2)

isolation结束时恢复 RF 强度

Time = max(min_segment_time, cool_time);
if ("q1" == scan_loc) {
    if (inj_lmco_mz_max * inj_lmco_q < iso_mz * trap_q) {
        Q1_mz_End = inj_lmco_mz_max;
        Q1_q_End  = inj_lmco_q;
    } else {
        Q1_mz_End = iso_mz;
        Q1_q_End  = trap_q;
    }

    SWIFT1     = switch_off;
    SWIFT1_Loc = swift1_loc_default;
    SWIFT1_Amp = swift1_amp_default;
} else {
    if (inj_lmco_mz_max * inj_lmco_q < iso_mz * trap_q) {
        Q2_mz_End = inj_lmco_mz_max;
        Q2_q_End  = inj_lmco_q;
    } else {
        Q2_mz_End = iso_mz;
        Q2_q_End  = trap_q;
    }

    SWIFT2     = switch_off;
    SWIFT2_Loc = swift2_loc_default;
    SWIFT2_Amp = swift2_amp_default;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# gas_q1(q2)

补气

Time = max(min_segment_time, gas_time);
if (hardware_config.gas_via_dapi == 1) {
    DAPI = switch_on;
}

const auto& scan_loc = get_target_ion_loc();
if ("q1" == scan_loc) {
    Q2_mz_Start = q2_mz_default;
    Q2_mz_End   = Q2_mz_Start;
    Q2_q_Start  = q2_q_default;
    Q2_q_End    = Q2_q_Start;
} else {
    Q1_mz_Start = q1_mz_default;
    Q1_mz_End   = Q1_mz_Start;
    Q1_q_Start  = q1_q_default;
    Q1_q_End    = Q1_q_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# cid_delay_q1(q2)

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

Time = max(min_segment_time, cid_delay_list[msn_index] - cid_time_extension_l);
DAPI = switch_off;
1
2

# cid_delay_calib_q1(q2)

MS2_Pressure_Calib 模式下控制 CID 时的气压

Time = max(min_segment_time, cid_delay);
DAPI = switch_off;
1
2

# cid_set_rf_q1(q2)

设置CID时的 RF 强度

Time = max(min_segment_time, cool_time);
if ("q1" == scan_loc) {
    Q1_mz_End = get_precursor_mz(msn_index);
    Q1_q_End  = cid_q;
} else {
    Q2_mz_End = get_precursor_mz(msn_index);
    Q2_q_End  = cid_q;
}
1
2
3
4
5
6
7
8

# cid_q1(q2)

执行CID

Time = max(min_segment_time, cid_time + cid_time_extension_l + cid_time_extension_r);
if ("q1" == scan_loc) {
    if (get_cid_amp(msn_index) > 0) {
        AC1_FRE_Start = QToFreq::Instance().calculate(cid_q, rf1_freq);
        AC1_FRE_End   = AC1_FRE_Start;
    }
    AC1_AMP_Start = get_cid_amp(msn_index);
    AC1_AMP_End   = AC1_AMP_Start;
} else {
    if (get_cid_amp(msn_index) > 0) {
        AC2X_FRE_Start = QToFreq::Instance().calculate(cid_q, rf2_freq);
        AC2X_FRE_End   = AC2X_FRE_Start;
    }
    AC2X_AMP_Start = get_cid_amp(msn_index);
    AC2X_AMP_End   = AC2X_AMP_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# cid_slim_q1(q2)

执行MS2_Pressure_Calib模式下的CID

Time = max(min_segment_time, cid_time);
if ("q1" == scan_loc) {
    if (get_cid_amp(msn_index) > 0) {
        AC1_FRE_Start = QToFreq::Instance().calculate(cid_q, rf1_freq);
        AC1_FRE_End   = AC1_FRE_Start;
    }
    AC1_AMP_Start = get_cid_amp(msn_index);
    AC1_AMP_End   = AC1_AMP_Start;
} else {
    if (get_cid_amp(msn_index) > 0) {
        AC2X_FRE_Start = QToFreq::Instance().calculate(cid_q, rf2_freq);
        AC2X_FRE_End   = AC2X_FRE_Start;
    }
    AC2X_AMP_Start = get_cid_amp(msn_index);
    AC2X_AMP_End   = AC2X_AMP_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# cid_end_q1(q2)

CID结束时恢复RF强度

Time = max(min_segment_time, cool_time);
if ("q1" == scan_loc) {
    // set Q1_mz_End and Q1_q_End for next iso_mz
    if (iso_mz_next > 0) {
      if (inj_lmco_mz_max * inj_lmco_q < iso_mz_next * trap_q) {
        Q1_mz_End = inj_lmco_mz_max;
        Q1_q_End  = inj_lmco_q;
      } else {
        Q1_mz_End = iso_mz_next;
        Q1_q_End  = trap_q;
      }
    }

    AC1_FRE_Start = ac1_freq_default;
    AC1_FRE_End   = AC1_FRE_Start;
    AC1_AMP_Start = ac1_amp_default;
    AC1_AMP_End   = AC1_AMP_Start;
} else {
	// set Q2_mz_End and Q2_q_End for next iso_mz
    if (iso_mz_next > 0) {
      if (inj_lmco_mz_max * inj_lmco_q < iso_mz_next * trap_q) {
        Q2_mz_End = inj_lmco_mz_max;
        Q2_q_End  = inj_lmco_q;
      } else {
        Q2_mz_End = iso_mz_next;
        Q2_q_End  = trap_q;
      }
    }

    AC2X_FRE_Start = ac2_freq_default;
    AC2X_FRE_End   = AC2X_FRE_Start;
    AC2X_AMP_Start = ac2_amp_default;
    AC2X_AMP_End   = AC2X_AMP_Start;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# scan_delay_q1(q2)

控制 scan 时的气压

Time = max(min_segment_time, scan_delay);
if ("q1" == scan_loc) {
    Q2_mz_Start = q2_mz_default;
    Q2_mz_End   = Q2_mz_Start;
    Q2_q_Start  = q2_q_default;
    Q2_q_End    = Q2_q_Start;
}
1
2
3
4
5
6
7

# scan_kv_on_q1(q2)

开启检测器高压电源,启动气压和高压保护

Time               = max(min_segment_time, scan_kv_on_time);
Dynode_Amp_Start   = scan_dynode;
Dynode_Amp_End     = Dynode_Amp_Start;
Detector_Amp_Start = scan_detector;
Detector_Amp_End   = Detector_Amp_Start;
1
2
3
4
5

# scan_cem_on_q1(q2)

开启检测器高压光耦开关

  Time     = max(min_segment_time, scan_cem_on_time);
  Detector = switch_on;

  if ("q1" == scan_loc) {
    Q1_mz_End = scan_mass_start;
    Q1_q_End  = 0.908;
  } else {
    Q2_mz_End = scan_mass_start;
    Q2_q_End  = 0.908;
  }

  Data = round(adc_freq / scan_speed / pt_per_th / 1000);
1
2
3
4
5
6
7
8
9
10
11
12

# scan_set_rf_q1(q2)

设置scan时的 起始RF强度

Time = max(min_segment_time, cool_time);
if ("q1" == scan_loc) {
    Q1_mz_End = scan_mass_start;
    Q1_q_End  = scan_q;

    Q2_mz_Start = min(inj_lmco_mz_q2, inj_lmco_mz_max);
    Q2_mz_End   = Q2_mz_Start;
    Q2_q_Start  = inj_lmco_q;
    Q2_q_End    = Q2_q_Start;

    if (1 == scan_ac_secular_freq_n) {
        AC1_FRE_Start = rf1_freq - QToFreq::Instance().calculate(scan_q, rf1_freq);
        AC1_FRE_End = AC1_FRE_Start;
    } else {
        AC1_FRE_Start = QToFreq::Instance().calculate(scan_q, rf1_freq);
        AC1_FRE_End   = AC1_FRE_Start;
    }

} else {
    Q2_mz_End = scan_mass_start;
    Q2_q_End  = scan_q;

    if (1 == scan_ac_secular_freq_n) {
        AC2X_FRE_Start = rf2_freq - QToFreq::Instance().calculate(scan_q, rf2_freq);
        AC2X_FRE_End = AC2X_FRE_Start;
    } else {
        AC2X_FRE_Start = QToFreq::Instance().calculate(scan_q, rf2_freq);
        AC2X_FRE_End   = AC2X_FRE_Start;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# scan_q1(q2)

执行扫描,阱1(阱2)scan

  Time = max(min_segment_time, (scan_mass_end - scan_mass_start) / scan_speed);
  if ("q1" == scan_loc) {
    Q1_mz_End = scan_mass_end;

    AC1_AMP_Start = scan_mass_start * scan_ac1_amp.coefs.c1 + scan_ac1_amp.coefs.c0;
    AC1_AMP_End   = scan_mass_end * scan_ac1_amp.coefs.c1 + scan_ac1_amp.coefs.c0;

    Gate2_Start = (polarity == "POS") ? scan_gate2 : -scan_gate2;
    Gate2_End   = Gate2_Start;

    Gate3_Start = gate3_default;
    Gate3_End   = Gate3_Start;

    Trap1_Start = (polarity == "POS") ? scan_mass_start * scan_trap1.coefs.c1 + scan_trap1.coefs.c0 : -scan_mass_start * scan_trap1.coefs.c1 - scan_trap1.coefs.c0;
    Trap1_End   = (polarity == "POS") ? scan_mass_end * scan_trap1.coefs.c1 + scan_trap1.coefs.c0 : -scan_mass_end * scan_trap1.coefs.c1 - scan_trap1.coefs.c0;
  } else {
    Q2_mz_End = scan_mass_end;

    AC2X_AMP_Start = scan_mass_start * scan_ac2_amp.coefs.c1 + scan_ac2_amp.coefs.c0;
    AC2X_AMP_End   = scan_mass_end * scan_ac2_amp.coefs.c1 + scan_ac2_amp.coefs.c0;
    Gate3_Start    = (polarity == "POS") ? scan_gate3 : -scan_gate3;
    Gate3_End      = Gate3_Start;
    Trap2_Start    = (polarity == "POS") ? scan_mass_start * scan_trap2.coefs.c1 + scan_trap2.coefs.c0 : -scan_mass_start * scan_trap2.coefs.c1 - scan_trap2.coefs.c0;
    Trap2_End      = (polarity == "POS") ? scan_mass_end * scan_trap2.coefs.c1 + scan_trap2.coefs.c0 : -scan_mass_end * scan_trap2.coefs.c1 - scan_trap2.coefs.c0;
  }
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

# reset

重置所有信号

# 5. 进样量保护

以下进样量保护代码需要在参数进入 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

# 6. 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的同名信号


# 7. 数据长度计算

spectrum_size = adc_freq / data * time / 1000
1

# Changelog

changelog

# Old Versions

  1. Scan Function v3.0.0
  2. Scan Function v2.0.0
  3. Scan Function v1.3.3