MoleculeMaximumCommonSubstructure[{mol1,mol2,…}]
返回一个可以表示输入分子的最大公共子结构的分子模式.
MoleculeMaximumCommonSubstructure[{mol1,mol2,…},params]
使用 params 计算原子和键之间的等价.
MoleculeMaximumCommonSubstructure
MoleculeMaximumCommonSubstructure[{mol1,mol2,…}]
返回一个可以表示输入分子的最大公共子结构的分子模式.
MoleculeMaximumCommonSubstructure[{mol1,mol2,…},params]
使用 params 计算原子和键之间的等价.
更多信息和选项
- MoleculeMaximumCommonSubstructure 尝试找到所有分子中存在的最大公共子结构 (MCS).
- MoleculeMaximumCommonSubstructure 返回 MoleculePattern 对象,可用于如 MoleculePlot、MoleculePlot3D、MoleculeContainsQ 和 FindMoleculeSubstructure 这样的函数.
- 当比较子结构时,params 可以决定原子和键之间的等价,它可以是 Automatic、None 或匹配参数的一个列表 {param1,param2,…}. parami 的可能值包括:
-
"AtomicNumber" 用相同的原子数匹配原子 "Valence" 匹配原子价 "FormalCharge" 匹配原子形式电荷 "AtomChirality" 匹配原子手性 (R) 或 (S) "RingAtomQ" 仅用环原子匹配其他环原子 "BondType" 匹配键类型 "BondStereo" 匹配立体双键 (E) 或 (Z) "RingBondQ" 仅用环键匹配其他环键 "CompleteRings" 仅匹配完全环 - Automatic 的默认值等价于 {"AtomicNumber","BondType"}.
- 使用选项设置 TimeConstraintt 时,MoleculeMaximumCommonSubstructure 在返回迄今为止找到的最大公共子结构之前等待 t 秒.
范例
打开所有单元 关闭所有单元基本范例 (3)
MoleculeMaximumCommonSubstructure[{Molecule["adenosine"], Molecule["adenosine triphosphate"], Molecule["1,2-dichloropurine"]}]GraphicsRow[MoleculePlot[#, %, ImageSize -> Small]& /@ {Molecule["adenosine"], Molecule["adenosine triphosphate"], Molecule["1,2-dichloropurine"]}]MoleculeMaximumCommonSubstructure[{Molecule[{"C", "C", "C", "C", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{1, 5}, "Single"],
Bond[{1, 6}, "Single"], Bond[{1, 7}, "Single"], Bond[{2, 8}, "Single"], Bond[{2, 9}, "Single"],
Bond[{3, 10}, "Single"], Bond[{3, 11}, "Single"], Bond[{4, 12}, "Single"],
Bond[{4, 13}, "Single"], Bond[{4, 14}, "Single"]}, {}], Molecule[{"C", "C", "N", "C", "H", "H", "H", "H", "H", "H", "H", "H", "H"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{1, 5}, "Single"],
Bond[{1, 6}, "Single"], Bond[{1, 7}, "Single"], Bond[{2, 8}, "Single"], Bond[{2, 9}, "Single"],
Bond[{3, 10}, "Single"], Bond[{4, 11}, "Single"], Bond[{4, 12}, "Single"],
Bond[{4, 13}, "Single"]}, {}]}]通过将匹配参数的条件放松,即不去看原子数,该结构的尺寸会增加:
MoleculeMaximumCommonSubstructure[{Molecule[{"C", "C", "C", "C", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{1, 5}, "Single"],
Bond[{1, 6}, "Single"], Bond[{1, 7}, "Single"], Bond[{2, 8}, "Single"], Bond[{2, 9}, "Single"],
Bond[{3, 10}, "Single"], Bond[{3, 11}, "Single"], Bond[{4, 12}, "Single"],
Bond[{4, 13}, "Single"], Bond[{4, 14}, "Single"]}, {}], Molecule[{"C", "C", "N", "C", "H", "H", "H", "H", "H", "H", "H", "H", "H"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{1, 5}, "Single"],
Bond[{1, 6}, "Single"], Bond[{1, 7}, "Single"], Bond[{2, 8}, "Single"], Bond[{2, 9}, "Single"],
Bond[{3, 10}, "Single"], Bond[{4, 11}, "Single"], Bond[{4, 12}, "Single"],
Bond[{4, 13}, "Single"]}, {}]}, None]mols = Molecule /@ {"Cn1c(=O)c(-c2c(Cl)cccc2Cl)cc2cnc(Nc3cccc(O)c3)nc21", "Cn1c(=O)c(-c2c(Cl)cccc2Cl)cc2cnc(Nc3ccc(F)cc3)nc21", "Cn1c(=O)c(-c2c(Cl)cccc2Cl)cc2cnc(Nc3ccc(OC4OC(CO)C(O)C(O)C4O)cc3)nc21", "Cn1c(=O)c(-c2c(Cl)cccc2Cl)cc2cnc(Nc3ccc(NC(=O)CCl)cc3)nc21", "Cn1c2nc(Nc3ccc(NC(=O)CCN)cc3)ncc2cc(-c2c(Cl)cccc2Cl)c1=O", "Cn1c(=O)c(-c2c(Cl)cccc2Cl)cc2cnc(Nc3cccc(COCC(O)CO)c3)nc21", "Cn1c(=O)c(-c2c(Cl)cccc2Cl)cc2cnc(Nc3ccc(O)cc3)nc21", "CC(=O)Nc1ccc(Nc2ncc3cc(-c4c(Cl)cccc4Cl)c(=O)n(C)c3n2)cc1", "Cn1c2nc(Nc3ccc(N)cc3)ncc2cc(-c2c(Cl)cccc2Cl)c1=O"};mcs = MoleculeMaximumCommonSubstructure[mols]GraphicsGrid[Partition[MoleculePlot[#, mcs, ImageSize -> Small]& /@ mols, 3]]范围 (7)
默认情况下,原子必须有相同的原子数来匹配,所以氧原子和碳原子不匹配:
MoleculeMaximumCommonSubstructure[
{Molecule[{"C", "C", "C", "C", "O", "C", "C", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H",
"H", "H", "H"}, {Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{3, 4}, "Single"],
Bond[{4, 5}, "Single"], Bond[{5, 6}, "Single"], Bond[ ... ingle"], Bond[{3, 13}, "Single"], Bond[{3, 14}, "Single"],
Bond[{4, 15}, "Single"], Bond[{4, 16}, "Single"], Bond[{6, 17}, "Single"],
Bond[{6, 18}, "Single"], Bond[{7, 19}, "Single"], Bond[{7, 20}, "Single"],
Bond[{7, 21}, "Single"]}, {}], Molecule[{"C", "C", "C", "C", "C", "C", "C", "C", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H",
"H", "H", "H", "H", "H", "H", "H", "H"}, {Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"],
Bond[{3, 4}, "Single"], Bond[{4, 5}, "Single"], Bond ... ingle"],
Bond[{5, 18}, "Single"], Bond[{5, 19}, "Single"], Bond[{6, 20}, "Single"],
Bond[{6, 21}, "Single"], Bond[{7, 22}, "Single"], Bond[{7, 23}, "Single"],
Bond[{8, 24}, "Single"], Bond[{8, 25}, "Single"], Bond[{8, 26}, "Single"]}, {}]}]MoleculeMaximumCommonSubstructure[
{Molecule["butyl pentyl ether"], Molecule["octane"]}, None]在比较原子的时候,默认情况下不考虑形式电荷,所以两性分子和甘氨酸的规范形式是匹配的:
MoleculeMaximumCommonSubstructure[
{Molecule["NCC(=O)O"], Molecule["[NH3+]CC(=O)[O-]"]}]将 "FormalCharge" 和原子以及键类型包含进去会使得模式的条件更加严苛:
MoleculeMaximumCommonSubstructure[
{Molecule["NCC(=O)O"], Molecule["[NH3+]CC(=O)[O-]"]}, {Automatic, "FormalCharge"}]将 "Valence" 条件包括进去可控制三价磷和五价磷是否匹配:
MoleculeMaximumCommonSubstructure[{Molecule[{"N", "P", "O", "C", "C", "C", "C", "C", "C"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{4, 5}, "Aromatic"],
Bond[{5, 6}, "Aromatic"], Bond[{6, 7}, "Aromatic"], Bond[{7, 8}, "Aromatic"],
Bond[{8, 9}, "Aromatic"], Bond[{9, 4}, "Aromatic"]}, {}], Molecule[{"N", "P", "O", "O", "C", "C", "C", "C", "C", "C", "N"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Double"], Bond[{2, 4}, "Single"], Bond[{4, 5}, "Single"],
Bond[{5, 6}, "Aromatic"], Bond[{6, 7}, "Aromatic"], Bond[{7, 8}, "Aromatic"],
Bond[{8, 9}, "Aromatic"], Bond[{9, 10}, "Aromatic"], Bond[{2, 11}, "Single"],
Bond[{10, 5}, "Aromatic"]}, {}]}, #]& /@ {Automatic, {Automatic, "Valence"}}MoleculeMaximumCommonSubstructure[{Molecule[{"C", "C", "C", "C", "O", "C", "C", "O", "C", "C"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{4, 5}, "Single"],
Bond[{4, 6}, "Single"], Bond[{6, 7}, "Single"], Bond[{7, 8}, "Single"], Bond[{8, 9}, "Single"],
Bond[{9, 10}, "Single"], Bond[{7, 1}, "Single"]}, {}], Molecule[{"O", "C", "C", "C", "O", "C", "C"}, {Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"],
Bond[{3, 4}, "Single"], Bond[{4, 5}, "Single"], Bond[{5, 6}, "Single"], Bond[{6, 7}, "Single"]},
{}]}]MoleculeMaximumCommonSubstructure[{Molecule[{"C", "C", "C", "C", "O", "C", "C", "O", "C", "C"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{4, 5}, "Single"],
Bond[{4, 6}, "Single"], Bond[{6, 7}, "Single"], Bond[{7, 8}, "Single"], Bond[{8, 9}, "Single"],
Bond[{9, 10}, "Single"], Bond[{7, 1}, "Single"]}, {}], Molecule[{"O", "C", "C", "C", "O", "C", "C"}, {Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"],
Bond[{3, 4}, "Single"], Bond[{4, 5}, "Single"], Bond[{5, 6}, "Single"], Bond[{6, 7}, "Single"]},
{}]}, "RingAtomQ"]MoleculeMaximumCommonSubstructure[{Molecule[{"C", "C", "F", "C", "C", "C", "C", "C", "Cl", "C", "C", "C"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{2, 4}, "Single"], Bond[{4, 5}, "Single"],
Bond[{5, 6}, "Single"], Bond[{6, 7}, "Single"], Bond[{7, 8}, "Single"], Bond[{8, 9}, "Single"],
Bond[{8, 10}, "Single"], Bond[{10, 11}, "Single"], Bond[{5, 12}, "Single"],
Bond[{12, 1}, "Single"], Bond[{11, 6}, "Single"]}, {}], Molecule[{"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{4, 5}, "Single"],
Bond[{5, 6}, "Single"], Bond[{6, 7}, "Single"], Bond[{7, 8}, "Single"], Bon ... 03002121448516846},
{-0.02039156198501587, 0.769090805053711}, {0.4682856750488281, 1.639783172607422},
{3.1709222412109375, 1.6325144958496094}, {2.4757041931152344, 0.04856730461120606},
{3.2771063232421875, 0.6410812377929688}}}]}]当使用 "RingBondQ" 时,由于连接键成为第二个分子中更大环的一部分,所以该连接键不再匹配:
MoleculeMaximumCommonSubstructure[{Molecule[{"C", "C", "F", "C", "C", "C", "C", "C", "Cl", "C", "C", "C"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{2, 4}, "Single"], Bond[{4, 5}, "Single"],
Bond[{5, 6}, "Single"], Bond[{6, 7}, "Single"], Bond[{7, 8}, "Single"], Bond[{8, 9}, "Single"],
Bond[{8, 10}, "Single"], Bond[{10, 11}, "Single"], Bond[{5, 12}, "Single"],
Bond[{12, 1}, "Single"], Bond[{11, 6}, "Single"]}, {}], Molecule[{"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{4, 5}, "Single"],
Bond[{5, 6}, "Single"], Bond[{6, 7}, "Single"], Bond[{7, 8}, "Single"], Bon ... 03002121448516846},
{-0.02039156198501587, 0.769090805053711}, {0.4682856750488281, 1.639783172607422},
{3.1709222412109375, 1.6325144958496094}, {2.4757041931152344, 0.04856730461120606},
{3.2771063232421875, 0.6410812377929688}}}]}, "RingBondQ"]MoleculeMaximumCommonSubstructure[{Molecule["l-alanine"], Molecule["d-alanine"]}, #]& /@ {Automatic, {Automatic, "AtomChirality"}}mols = Molecule /@ {"c1cc2ccccc2s1", "c1cc2ccccc2o1"}
MoleculePlot[#, MoleculeMaximumCommonSubstructure[mols]]& /@ mols使用 "CompleteRings" 参数可指定仅允许完整环的匹配:
MoleculePlot[#, MoleculeMaximumCommonSubstructure[mols, {Automatic, "CompleteRings"}]]& /@ mols选项 (1)
TimeConstraint (1)
{m1, m2} = {Molecule[{"O", "C", "C", "O", "C", "O", "C", "O", Atom["C", "HydrogenCount" -> 1], "C",
Atom["C", "HydrogenCount" -> 1], "C", "C", "C", Atom["C", "HydrogenCount" -> 1], "O", "C",
Atom["C", "HydrogenCount" -> 1], "C", "C", "C", "C", "C", "C", ... Direction" -> "Counterclockwise"],
Association["StereoType" -> "Tetrahedral", "ChiralCenter" -> 18, "Direction" -> "Clockwise"],
Association["StereoType" -> "Tetrahedral", "ChiralCenter" -> 22,
"Direction" -> "Counterclockwise"]}}], Molecule[{"C", "C", "C", "C", "C", "C", "C", "C", "C", Atom["C", "HydrogenCount" -> 1], "O", "C",
"C", "C", "C", "O", "C", "O", "C", "C", Atom["C", "HydrogenCount" -> 1], "C", "C", "C", "O",
Atom["C", "HydrogenCount" -> 1], "C", "C", "O", "C" ... irection" -> "Clockwise"],
Association["StereoType" -> "Tetrahedral", "ChiralCenter" -> 21,
"Direction" -> "Counterclockwise"], Association["StereoType" -> "Tetrahedral",
"ChiralCenter" -> 26, "Direction" -> "Counterclockwise"]}}]};
MoleculeMaximumCommonSubstructure[{m1, m2}]//AbsoluteTimingMoleculeMaximumCommonSubstructure[{m1, m2}, TimeConstraint -> 1]应用 (2)
mp = MoleculeMaximumCommonSubstructure[{Entity["Chemical", "Pethidine"], Entity["Chemical", "Methadone"], Entity["Chemical", "Pentazocine"], Entity["Chemical", "Propoxyphene"]}]MoleculePlot[Entity["Chemical", "Morphine"], Style[mp, RGBColor[1., 0.8117647058823529, 0.2823529411764706]]]定义一个函数,根据 MCS 中键的数量计算两个分子之间的相似度:
mcsSimilarity[mol1_, mol2_] := With[{mcs = MoleculeMaximumCommonSubstructure[{mol1, mol2}, TimeConstraint -> 1], bc = BondCount[#, IncludeHydrogens -> None]&}, bc[mcs] / (bc[mol1] + bc[mol2] - bc[mcs])]
mcsSimilarity[mol1_][mol2_] := mcsSimilarity[mol1, mol2]mcsSimilarity[Molecule["benzene"], Molecule["phenol"]]TakeLargestBy[Molecule /@ IconizedObject[«200 random SMILES strings»], mcsSimilarity[Molecule[{"F", "C", "C", "C", "C", "C", "C", "S", "O", "O", "N", "C", "C", "C", "C", "C", "N",
"N"}, {Bond[{1, 2}, "Single"], Bond[{2, 3}, "Aromatic"], Bond[{3, 4}, "Aromatic"],
Bond[{4, 5}, "Aromatic"], Bond[{5, 6}, "Aromatic"], Bond[{6, 7}, ... 12}, "Single"], Bond[{12, 13}, "Aromatic"], Bond[{13, 14}, "Aromatic"],
Bond[{14, 15}, "Aromatic"], Bond[{15, 16}, "Aromatic"], Bond[{16, 17}, "Aromatic"],
Bond[{16, 18}, "Single"], Bond[{7, 2}, "Aromatic"], Bond[{17, 12}, "Aromatic"]}, {}]], 3]相关指南
-
▪
- 分子结构与计算
文本
Wolfram Research (2021),MoleculeMaximumCommonSubstructure,Wolfram 语言函数,https://reference.wolfram.com/language/ref/MoleculeMaximumCommonSubstructure.html.
CMS
Wolfram 语言. 2021. "MoleculeMaximumCommonSubstructure." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/MoleculeMaximumCommonSubstructure.html.
APA
Wolfram 语言. (2021). MoleculeMaximumCommonSubstructure. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/MoleculeMaximumCommonSubstructure.html 年
BibTeX
@misc{reference.wolfram_2026_moleculemaximumcommonsubstructure, author="Wolfram Research", title="{MoleculeMaximumCommonSubstructure}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/MoleculeMaximumCommonSubstructure.html}", note=[Accessed: 17-July-2026]}
BibLaTeX
@online{reference.wolfram_2026_moleculemaximumcommonsubstructure, organization={Wolfram Research}, title={MoleculeMaximumCommonSubstructure}, year={2021}, url={https://reference.wolfram.com/language/ref/MoleculeMaximumCommonSubstructure.html}, note=[Accessed: 17-July-2026]}