
在上期我们已经介绍了docker的安装和基本使用命令,这期为大家介绍下如何在实战中使用docker,我们以CFM-ID为demo。
一、什么是CFM-ID
CFM-ID 提供了一种准确有效地识别由电喷雾串联质谱 (ESI-MS/MS) 生成的光谱中的代谢物的方法。该工具通过使用机器学习方法预先训练好的模型,来估计特定化合物结构MS/MS碎裂事件的概率(峰强度)并预测在给定化学结构中最可能生成的碎片,从而生成化合物分子的预测质谱图。除了软件,也提供了便捷的web服务,网址为 http://cfmid4.wishartlab.com/。
二、CFM-ID 能做什么
1.谱图预测
, 给定化学结构,生成以 SMILES 或 InChI 格式提供的输入结构的低/10V、中/20V 和高/40V 能量 ESI-MS/MS 光谱。
2.碎片峰注释
, 在给定已知化学结构的情况下对一组光谱中的峰进行注释。
3.化合物鉴定
, 利用给定的候选化合物,生成预测质谱图并与待鉴定的光谱进行相似性打分,返回候选结构的预测排名。
三、CFM-ID 安装
$ docker pull wishartlab/cfmid
查看镜像:
$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/wishartlab/cfmid latest 952f16b4e1ca 3 weeks ago 446 MB
四、CFM-ID常用功能
1. cfm-predict
根据训练好的机器学习模型对化合物在ESI-MS/MS不同能量下产生的二级谱图预测。使用命令如下:
$ cfm-predict <smiles_or_inchi_or_file> <prob_thresh> <param_file> <config_file> <annotate_fragments> <output_file_or_dir> <apply_postproc> <suppress_exceptions>
参数:
<smiles_or_inchi_or_file>
<prob_thresh> (可选)在碎片图生成期间修剪不太可能碎片的概率(默认为 0.001)
<param_file> 经过训练的 cfm 模型的参数的文件
<config_file> cfm模型的配置参数文件
<annotate_fragments> 是否在输出光谱中包含碎片信息(0 = NO (DEFAULT),1 = YES)
<output_file_or_dir>
<apply_postproc>(可选) 是否对预测光谱进行后处理以获取前 80% 的能量(至少 5 个峰)或最高的 30 个峰(以先到者为准)(0 = 关闭,1 = 开启(默认))。如果关闭,只要将上面的 prob_thresh 参数设置为 0.0,就会为输入分子的每个可能片段输出一个峰值。
<suppress_exceptions>(optional) 抑制大多数异常,以便程序即使无法产生结果也能正常返回(0 = OFF(默认),1 = ON)
使用docker容器预测化合物分子的质谱图:
化合物分子“CC(C)N1C(=O)C2C(CCN2S(C)(=O)=O)N(Cc2cccc(F)c2)C1=O”
$ sh -c "cd /cfmid/public/; cfm-predict 'CC(C)N1C(=O)C2C(CCN2S(C)(=O)=O)N(Cc2cccc(F)c2)C1=O' 0.001 /trained_models_cfmid4.0/[M+H]+/param_output.log /trained_models_cfmid4.0/[M+H]+/param_config.txt 0 out_predict"# 输出的正离子下的预测光谱# In-silico ESI-MS/MS [M+H]+ Spectra# PREDICTED BY CFM-ID 4.4.3# ID=NullId# SMILES=CC(C)NCC(O)COC1=CC=C(CCOCC2CC2)C=C1# InChiKey=NWIUTZDMDHAVTP-UHFFFAOYSA-N# Formula=C18H29NO3# PMass=308.22202energy0236.16451 15.82 140 48 (10.737 0.17615)308.22202 100.00 0 162 164 161 160 156 (62.153 4.9184 1.81 0.04945 0.039056 0.017308)energy145.03349 8.92 84 (1.6496)55.05423 51.90 97 149 150 (5.6065 2.4275 1.5599)71.04914 12.51 137 93 139 (1.7768 0.34754 0.18911)72.08078 15.86 32 (2.9323)73.06479 19.03 46 136 138 (1.6754 1.6148 0.22815)74.06004 13.99 7 (2.5861)98.09643 22.96 43 (4.2444)99.08044 9.23 27 127 126 (1.5133 0.13078 0.061409)116.10699 23.88 82 119 (2.9213 1.4923)134.11756 6.11 114 (1.1288)151.07536 5.14 57 76 (0.88935 0.060275)181.08592 17.19 29 (3.1772)205.12231 5.21 5 62 (0.86689 0.09605)210.11247 6.46 10 (1.1941)219.13796 8.41 26 (1.5542)222.14886 6.97 133 (1.2888)231.13796 9.75 15 (1.8023)235.13287 5.65 30 (1.0436)236.16451 15.99 48 140 (2.2299 0.72674)237.14852 5.33 25 (0.98514)248.16451 14.02 4 (2.5908)249.14852 5.21 3 (0.96345)254.17507 8.09 152 (1.4946)266.17507 18.14 2 154 (2.0104 1.3436)290.21146 12.31 41 (2.2762)308.22202 100.00 0 162 164 161 160 156 (14.035 2.2678 1.4414 0.42124 0.20547 0.11453)energy230.03383 15.29 34 (2.2531)41.03858 5.08 35 (0.7488)43.05423 21.44 12 (3.1603)44.04948 6.51 22 (0.96019)45.03349 6.95 84 (1.0237)55.05423 27.15 150 97 149 (1.9289 1.5755 0.4975)56.04948 79.64 33 37 (10.916 0.82256)58.06513 100.00 39 20 (10.007 4.7324)60.04439 6.17 65 (0.90955)70.06513 9.24 31 (1.3613)71.04914 5.56 93 137 139 (0.74785 0.04043 0.030605)72.08078 77.69 32 (11.451)74.06004 16.33 7 (2.4068)90.05495 11.06 111 (1.6298)91.05423 7.29 91 (1.0749)98.09643 5.80 43 (0.85518)100.11208 9.33 44 (1.3749)105.06988 9.17 94 (1.3517)116.10699 7.30 119 82 (0.97613 0.10008)121.06479 18.57 72 98 53 (1.4342 1.0234 0.27908)123.08044 7.58 99 73 54 (0.58862 0.48718 0.042096)133.06479 4.98 61 106 (0.41864 0.31521)135.08044 30.15 55 100 (2.7559 1.6877)137.09609 6.91 56 101 (0.81946 0.19854)165.12739 9.94 157 (1.4651)173.09609 5.48 16 (0.80826)231.13796 9.03 15 (1.3307)233.15361 4.78 14 (0.70508)308.22202 13.85 160 161 162 164 156 0 (1.0368 0.33692 0.25621 0.21837 0.1932 9.2061e-05)0 308.2220202401 CC(C)[NH2+]CC(O)COc1ccc(CCOCC2CC2)cc11 292.1907201121 C#C[NH+]=C=C(O)COC1CCC(CCOCC2CC2)CC12 266.1750700481 [NH+]#CC(=O)COC1CCC(CCOCC2CC2)CC13 249.1485209521 C=C([OH2+])COC1=CC=C(C=COCC2CC2)CC14 248.1645053641 [NH+]#CC#COC1CCC(CCOCC2CC2)CC15 205.1223062041 C[OH+]C1=CC=C(C#COCC2CC2)CC16 193.1223062041 [OH+]=C1C=CC(=CCOCC2CC2)CC17 74.0600402961 CC(O)C=[NH2+]8 76.0756903601 CC(O)C[NH3+]9 175.1117415201 C(#CC1=CC=CCC1)[OH+]CC1CC110 210.1124697921 [NH+]#CC(=O)COC1=CCC(CCO)CC111 264.1594199841 [NH+]#CC(=O)COC1=CCC(CCOCC2CC2)CC112 43.0542266441 CC=[CH3+]13 251.1641710161 C=C([OH2+])COC1=CC=C(CCOCC2CC2)CC114 233.1536063321 C#CC[OH+]C1=CC=C(CCOCC2CC2)CC115 231.1379562681 C#CC[OH+]C1=CC=C(C=COCC2CC2)CC116 173.0960914561 C(#CC1=CC=CCC1)[OH+]C=C1CC117 179.1066561401 C=CC1=CC=C(OCC(=C)[OH2+])CC118 195.1015707601 C=C([OH2+])COC1=CC=C(C=CO)CC119 197.1172208241 C=C([OH2+])COC1=CC=C(CCO)CC120 58.0651256761 C=C(C)[NH3+]21 60.0807757401 CC(C)[NH3+]22 44.0494756121 C=C[NH3+]23 241.1798210801 [OH+]=CCOC1CCC(CCOCC2CC2)CC124 239.1641710161 [OH+]=C=COC1CCC(CCOCC2CC2)CC125 237.1485209521 [OH+]=C=COC1=CCC(CCOCC2CC2)CC126 219.1379562681 C#C[OH+]C1=CC=C(CCOCC2CC2)CC127 99.0804413921 C=C[OH+]CC1CC128 165.0910060761 CCC1=CC=C(OC=C=[OH+])CC129 181.0859206961 OCCC1=CC=C(OC=C=[OH+])CC130 235.1328708881 [OH+]=C=COC1=CC=C(CCOCC2CC2)CC131 70.0651256761 C=[NH+]C(=C)C32 72.0807757401 C=C(C)[NH2+]C33 56.0494756121 C#C[NH2+]C34 30.0338255481 C=[NH2+]35 41.0385765801 [CH2+]#CC36 45.0698767081 CC[CH4+]37 56.0494756121 [CH+]=C(C)N38 74.0964258041 C[NH2+]C(C)C39 58.0651256761 C=C[NH2+]C40 32.0494756121 C[NH3+]41 290.2114555561 C=C(C)[NH+]=C=C=COC1CCC(CCOCC2CC2)CC142 246.1488553001 [NH+]#CC#COC1=CCC(CCOCC2CC2)CC143 98.0964258041 C=C(C)[NH+]=CCC44 100.1120758681 C=C(C)[NH2+]CCC45 177.1273915841 C1=CCCC(C=C[OH+]CC2CC2)=C146 73.0647913281 [OH2+]CC1CC147 218.1539406801 C=C(C)[NH+]=C=C=COC1=CCC(CC)CC148 236.1645053641 C=C(C)[NH+]=C=C=COC1CCC(CCO)CC149 213.1849064601 C[OH+]C1CCC(CCOCC2CC2)CC150 211.1692563961 C[OH+]C1=CCC(CCOCC2CC2)CC151 209.1536063321 C[OH+]C1=CC=C(CCOCC2CC2)CC152 207.1379562681 C[OH+]C1=CC=C(C=COCC2CC2)CC153 121.0647913281 C=[O+]C1=CC=C(C)C=C154 123.0804413921 C[OH+]C1=CC=C(C)C=C155 135.0804413921 C#CC1=CC=C([OH+]C)CC156 137.0960914561 C=CC1=CC=C([OH+]C)CC157 151.0753560121 C[OH+]C1=CC=C(C#CO)CC158 153.0910060761 C[OH+]C1=CC=C(C=CO)CC159 165.0910060761 COC#CC1=CC=C([OH+]C)CC160 207.1379562681 C=C=C(C#COCC1CC1)CCC[OH+]C Intermediate Fragment61 133.0647913281 C#CC1=CC=C([OH+]C)C=C162 205.1223062041 C=C=C(C#COC=C1CC1)CCC[OH+]C Intermediate Fragment63 100.0756903601 C=C(C)[NH+]=CCO64 102.0913404241 C=C(C)[NH2+]CCO65 60.0443902321 [NH2+]=CCO66 84.0807757401 C=C(C)[NH+]=CC67 104.1069904881 CC(C)[NH2+]CCO68 86.0964258041 C=C(C)[NH2+]CC69 197.1536063321 [OH+]=C1CCC(CCOCC2CC2)CC170 195.1379562681 [OH+]=C1C=CC(CCOCC2CC2)CC171 109.0647913281 C=C1C=CC(=[OH+])CC172 121.0647913281 C=C=C1C=CC(=[OH+])CC173 123.0804413921 CC=C1C=CC(=[OH+])CC174 137.0597059481 OC=C=C1C=CC(=[OH+])CC175 139.0753560121 OCC=C1C=CC(=[OH+])CC176 151.0753560121 COC=C=C1C=CC(=[OH+])CC177 191.1066561401 [OH+]=C1C=CC(=C=COCC2CC2)CC178 110.0600402961 [CH+]=C(C)N=C=C(C)O79 112.0756903601 C=C(C)[NH+]=C=C(C)O80 114.0913404241 C=C(C)[NH+]=CC(C)O81 96.0807757401 C=C(C)[NH+]=C=CC82 116.1069904881 C=C(C)[NH2+]CC(C)O83 72.0443902321 CC(O)C#[NH+]84 45.0334912001 CC=[OH+]85 118.1226405521 CC(O)C[NH2+]C(C)C86 102.0913404241 C=C[NH2+]CC(C)O87 183.1743417761 C1CCC(CC[OH+]CC2CC2)CC188 181.1586917121 C1=CCC(CC[OH+]CC2CC2)CC189 179.1430416481 C1=CCCC(CC[OH+]CC2CC2)=C190 79.0542266441 C1=CC=[CH2+]C=C191 91.0542266441 [CH2+]C1=CC=CC=C192 93.0698767081 [CH4+]C1=CC=CC=C193 71.0491412641 [OH+]=CC1CC194 105.0698767081 C#[CH+]C1=CC=CCC195 107.0855267721 C=[CH2+]C1=CC=CCC196 109.1011768361 C[CH3+]C1=CC=CCC197 55.0542266441 [CH3+]=C1CC198 121.0647913281 [OH2+]C#CC1=CC=CCC199 123.0804413921 [OH2+]C=CC1=CC=CCC1100 135.0804413921 C[OH+]C#CC1=CC=CCC1101 137.0960914561 C[OH+]C=CC1=CC=CCC1102 177.1273915841 CCC=C=C=C=CC[OH+]CC1CC1 Intermediate Fragment103 175.1117415201 CCC#CC#CC=C[OH+]CC1CC1104 103.0542266441 C#[CH+]C1=CC=CC=C1105 119.0491412641 [OH2+]C#CC1=CC=CC=C1106 133.0647913281 C[OH+]C#CC1=CC=CC=C1107 128.0706049801 C=C(C)[NH+]=C=C(O)CO108 130.0862550441 C=C(C)[NH+]=CC(O)CO109 112.0756903601 C=C(C)[NH+]=C=CCO110 132.1019051081 C=C(C)[NH2+]CC(O)CO111 90.0549549161 [NH2+]=CC(O)CO112 73.0284058201 C=C([OH2+])C=O113 114.0913404241 C=C(C)[NH+]=CCCO114 134.1175551721 CC(C)[NH2+]CC(O)CO115 118.0862550441 C=C[NH2+]CC(O)CO116 92.0706049801 [NH3+]CC(O)CO117 75.0440558841 C=C([OH2+])CO118 61.0284058201 OCC=[OH+]119 116.1069904881 C=C(C)[NH2+]CCCO120 101.0960914561 CC[OH+]CC1CC1121 59.0491412641 C=C[OH+]C122 83.0491412641 C[OH+]C=C1C=C1123 57.0698767081 [CH4+]C1CC1124 53.0385765801 [CH3+]=C1C=C1125 57.0334912001 C#C[OH+]C126 99.0804413921 C#C[OH+]CC(C)C Intermediate Fragment127 99.0804413921 C#C[OH+]CCCC Intermediate Fragment128 97.0647913281 C#C[OH+]CC1CC1129 208.1332052361 C=C(C)[NH+]=C=C(O)COC1=CCCCC1130 210.1488553001 C=C(C)[NH+]=C=C(O)COC1CCCCC1131 87.0804413921 C[OH+]CC1CC1132 85.0647913281 C[OH+]C=C1CC1133 222.1488553001 C=C(C)[NH+]=C=C(O)COC1=CCC(C)CC1134 204.1382906161 C=C(C)[NH+]=C=C=COC1=CCC(C)CC1135 31.0178411361 C=[OH+]136 73.0647913281 CCCC=[OH+] Intermediate Fragment137 71.0491412641 CCC=C=[OH+]138 73.0647913281 CC(C)C=[OH+] Intermediate Fragment139 71.0491412641 CC(C)=C=[OH+]140 236.1645053641 C=C(C)[NH+]=C=C(O)COC1=CCC(CC)CC1141 194.1175551721 CCC1CC=C(OCC(=O)C#[NH+])CC1142 177.0910060761 C#CC1=CC=C(OCC(=C)[OH2+])CC1143 119.0491412641 C=C=C1C=CC(=[OH+])C=C1144 238.1801554281 C=C(C)[NH+]=C=C(O)COC1CCC(CC)CC1145 220.1695907441 C=C(C)[NH+]=C=C=COC1CCC(CC)CC1146 240.1958054921 C=C(C)[NH+]=CC(O)COC1CCC(CC)CC1147 242.2114555561 C=C(C)[NH2+]CC(O)COC1CCC(CC)CC1148 57.0698767081 CC(C)=[CH3+] Intermediate Fragment149 55.0542266441 [CH+]=C(C)C150 55.0542266441 [CH2+]#CCC Intermediate Fragment151 252.1594199841 C=C(C)[NH+]=C=C(O)COC1=CCC(CCO)CC1152 254.1750700481 C=C(C)[NH+]=C=C(O)COC1CCC(CCO)CC1153 256.1907201121 C=C(C)[NH+]=CC(O)COC1CCC(CCO)CC1154 266.1750700481 C=C(C)[NH+]=C=C(O)COC1=CCC(CCOC)CC1155 268.1907201121 C=C(C)[NH+]=C=C(O)COC1CCC(CCOC)CC1156 308.2220202401 C=C(C)[NH+]=C=C(O)COC=CCC(CC)CCOCC1CC1 Intermediate Fragment157 165.1273915841 C#CC(=CC[OH+]CC1CC1)CC158 278.1750700481 C=C(C)[NH+]=C=C(O)COC#CCCCCOCC1CC1159 280.1907201121 C=C(C)[NH+]=C=C(O)COC=CCCCCOCC1CC1160 308.2220202401 C=C(C)[NH+]=C=C(O)COC(C)=CCC(C)CCOCC1CC1 Intermediate Fragment161 308.2220202401 C=C(C)[NH+]=C=C(O)COC(=CCCCCOCC1CC1)CC Intermediate Fragment162 308.2220202401 C=C(C)[NH+]=C=C(O)COC1=CCC(CCOCCCC)CC1 Intermediate Fragment163 278.1750700481 C=C(C)[NH+]=C=C(O)COC1=CC=C(CCOCC)CC1164 308.2220202401 C=C(C)[NH+]=C=C(O)COC1=CCC(CCOCC(C)C)CC1 Intermediate Fragment165 306.2063701761 C=C(C)[NH+]=C=C(O)COC1=CCC(CCOCC2CC2)CC1
2.cfm-id
给定要输入谱图(鉴定的质谱图)和候选smiles (or inchi) 列表,cfm-id 计算每个候选的预测频谱并将其与输入谱图进行比较。
使用命令如下:
$ cfm-id <spectrum_file> <id> <candidate_file> <num_highest> <ppm_mass_tol> <abs_mass_tol> <prob_thresh> <param_file> <config_file> <score_type> <apply_postprocessing> <output_file> <output_msp_or_mgf>
参数:
<spectrum_file> 要鉴定的谱图,这可以是一个 .msp 文件,其中所需的光谱列在相应的 id 下(next arg);或者它可以是单个文件,其中包含由换行分隔的峰值“质量 强度”列表,“低”、“中”和“高”线开始不同能级的光谱,或“能量0”、“能量1”,等等。如果只有一个输入光谱,您可以将其输入到与模型中最匹配的能级,或者将其复制到所有三种能量(如果不确定,建议使用后者)
<id> 用于从 msp文件 检索输入谱图的id
<candidate_file> 候选化合物的输入列表(行分隔的“id smiles_or_inchi”对)
<num_highest > (可选)要返回的(排名)候选化合物的数量或返回全部为 -1(如果未给出,则按排名顺序返回全部)。
<ppm_mass_tol> 可选)在点积比较中匹配峰时使用的质量容差(以 ppm 为单位) - 将使用更高的 ppm 和 abs 容差(如果未给出默认值,则为 10ppm)
<abs_mass_tol> (optional) 在点积比较中匹配峰时使用的 abs Da 质量容差,如果未给出默认值为 0.01Da,将使用更高的 ppm 和 abs 容差
<prob_thresh>(可选)修剪不太可能的碎片的概率(默认为 0.001)
<param_file> 已训练 cfm 模型的参数所在的文件名,(如果未给出,则假定 param_output.log 在当前目录中)
<config_file> cfm 模型的配置参数所在的文件名(如果没有给出,假定当前目录中的 param_config.txt)
<score_type> (可选)比较光谱时使用的评分函数类型。选项:Jaccard(默认)、DotProduct
<apply_postprocessing>(可选)是否对预测光谱进行后处理以获取前 80% 的能量(至少 5 个峰)或最高 30 个峰(以先到者为准)(0 = 关闭(EI-MS 的默认值),1 = ON(ESI-MS/MS 的默认值))
<output_file>(可选)要写入的输出光谱文件的文件名(如果未给出,则打印到标准输出)
<output_msp_or_mgf>(可选)用于记录预测候选光谱的输出 msp 或 mgf 文件的文件名(如果未给出,则不保存预测光谱)
使用案例
鉴定某个未知代谢物光谱,存放在RSM00686p.txt,候选化合物列表文件candidates.txt:
$ head /root/cfmid/mail/RSM00686p.txtenergy051.62073 0.654.81861 0.755.05450 4.856.96492 1.057.03381 0.657.07004 3.461.67873 0.567.05432 6.469.03358 2.2$ head root/cfmid/mail/candidates.txtSDB078289 CCCCC/C=C/C/C=C/C/C=C/C[C@@]1(OC)C=CC(=O)O1SDB037492 O=C1CC[C@]2([C@H](C1)CC[C@@H]1[C@@H]2CC[C@]2([C@H]1CCC(=O)O2)C)CSDB040073 O=C1CC[C@]2(C(=C1)CC[C@@H]1[C@@H]2[C@@H](O)C[C@]2([C@H]1CC[C@@H]2O)C)C
# Run cfm-id in a docker container
从结果可以看出,第一个化合物得分最高,最有可能是推定的化合物。
$ docker run --rm=true -v $(pwd):/cfmid/public/ -i wishartlab/cfmid:latest sh -c "cd cfmid/public; cfm-id ./RSM00686p.txt AN_ID ./candidates.txt -1 10 0.001 0.001 ./param_output.log ./param_config.txt DotProduct 1 output"# view output1 0.42380687 SDB040073 O=C1CC[C@]2(C(=C1)CC[C@@H]1[C@@H]2[C@@H](O)C[C@]2([C@H]1CC[C@@H]2O)C)C2 0.38744719 SDB037492 O=C1CC[C@]2([C@H](C1)CC[C@@H]1[C@@H]2CC[C@]2([C@H]1CCC(=O)O2)C)C3 0.38244764 SDB078289 CCCCC/C=C/C/C=C/C/C=C/C[C@@]1(OC)C=CC(=O)O
五、其他功能
1.cfm-id-precomputed
给定一个输入光谱和一组候选光谱,cfm-id-precomputed 将候选光谱与输入光谱进行比较。它根据候选人的匹配程度返回候选人的排名。频谱预测是使用预先训练的 CFM 模型完成的。
2.cfm-annotate
注释给定已知分子的一组光谱中的峰。它计算所提供分子的完整碎片图,然后在 CFM 模型中执行推理以确定可能发生的简化图。然后为光谱中的每个峰分配该图中具有相应质量的任何片段的 ID,并按从最有可能到最不可能的顺序列出这些片段。
3.cfm-train
cfm-train 使用输入分子列表及其相应光谱来训练 CFM 模型的参数
4.fraggraph-gen
fraggraph-gen 为输入分子生成完整的碎片图或可行碎片列表。它系统地打破分子内的键并检查有效的结果片段。
如何使用请读者自行参考https://sourceforge.net/p/cfm-id/wiki/Home/。
感兴趣的还可以阅读原文,查看研究论文。
END
点赞👍关注





