MoleculeModify[mol,"mod"]
给出对分子 mol 应用修改 "mod" 后得到的分子或分子列表.
MoleculeModify[mol,{"mod",specs}]
给出对分子 mol 应用带有额外指定 specs 的修改 "mod" 后得到的分子或分子列表.
MoleculeModify["mod"]
表示 MoleculeModify 的算符形式,可应用于分子.
MoleculeModify
MoleculeModify[mol,"mod"]
给出对分子 mol 应用修改 "mod" 后得到的分子或分子列表.
MoleculeModify[mol,{"mod",specs}]
给出对分子 mol 应用带有额外指定 specs 的修改 "mod" 后得到的分子或分子列表.
MoleculeModify["mod"]
表示 MoleculeModify 的算符形式,可应用于分子.
更多信息和选项
- 修改分子的原子列表的操作:
-
{"AddAtom",atom} 添加不相连的原子 {"AddAtom",{atom1,atom2,…}} 添加一系列原子 {"DeleteAtom",a} 删除索引为 a 的原子 {"DeleteAtom",{a1,a2,…}} 删除列出的原子 {"ReplaceAtom",aatom} 将索引为 a 的原子替换为 atom {"ReplaceAtom",{a1atom1,…}} 用 atomi 替换原子 ai - atom 应为以下形式:
-
"sym" 原子符号为 "sym"(如 "C"、"Cl")的原子 Entity["Element",element] 给定元素的原子 Entity["Isotope",isotope] 指定同位素的原子 Atom["sym","prop"val,…] 具有指定属性的原子 - "AddAtom" 将添加一个不相连的原子,与分子的其余部分之间没有键. 如果要添加一个新的原子和键,请使用 "AddBond".
- "DeleteAtom" 将删除该原子的所有键.
- 当去除或替换一个原子时,可以调整显式氢原子的数量以保持合理的化合价. 断开的氢原子将会被删除. 如果想禁用此行为,请使用选项 ValenceErrorHandlingFalse.
- 按正常方式将隐式氢原子放入添加的原子中. 如果想禁用隐式氢原子,在新原子指定中使用 "HydrogenCount"None.
- 修改原子属性的操作有:
-
{"SetFormalCharge",aval} 将索引为 a 的原子的形式电荷设为 val {"SetMassNumber",aval} 将索引为 a 的原子的质量数设为 val {"SetUnpairedElectronCount",aval} 为给定原子设置游离电子数 - 如果想改变多个原子的属性,可使用规则列表 {a1val1,a2val2,…}.
- 修改分子的键列表的操作:
-
{"AddBond",{a1,a2}} 在索引为 a1 和 a2 的原子间添加单键 {"AddBond",Bond[{a1,a2},"type"]} 在给定原子间添加给定类型的键 {"AddBond",Bond[{a1,atom},type]} 索引为 a1 的原子和由 atom 表示的新原子之间的键 {"DeleteBond",{a1,a2}} 移除给定索引的原子间的键 {"SetBondType",{a1,a2}"type"} 设置索引为 a1 和 a2 的原子间的键的类型 -
"SetAromaticity" 将局部单键和双键转换为芳香键 "Kekulize" 将芳香键转换为局部单键和双键 {"RenumberAtoms",{a1,a2,…}} 对原子列表重新排序,使得索引为 ai 的原子出现在原子列表中的位置 i {"SetMetaInformation",meta} 将分子的 MetaInformation 设为 meta,给定应为一个关联或键-值对 "MakeHydrogensExplicit" 将隐式氢原子转换为显式氢原子 "MakeHydrogensImplicit" 当从正常价态规则可以推断出氢原子的存在时,去除显式氢原子 - 关于分子的三维排列的信息(与三维几何结构无关)被保存在 StereochemistryElements 选项值中. 以下操作将改变 立体元素:
-
"AssignStereochemistryFromCoordinates" 根据 3D 坐标分配四面体和双键立体化学元素 "RemoveStereochemistry" 删除任何已定义的立体化学信息 - 如果要修改原子或键的已定义的立体化学信息,请使用以下操作:
-
{"SetAtomChirality",aval} 设置原子的手性值为 "R" 或 "S" {"SetBondStereo",{a1,a2}val} 将键的立体值设为 "E" 或 "Z" - 修改原子或键的立体结构将影响按要求生成的 3D 坐标. 如果分子已经包含有 3D 坐标,在修改立体化学信息时会将其丢弃.
-
{"DeleteSubstructure",patt} 删除分子中所有 patt 的出现位置 {"ReplaceSubstructure",pattrepl} 将所有的 patt 替换为 repl {"ReplaceSubstructure",pattrepl,attchmts} 用 repl 替换 patt,只有指定的附着点 {"ReplaceSubstructureList",pattrepl} 将所有的 patt 替换为 repl,并返回一个列表 - 此处,repl 应为 Molecule 对象或 SMILES 字符串,patt 可为以下形式:
-
MoleculePattern[…] 有效的分子模式对象 {a1,a2,…} 构成相连子结构的原子索引列表 {{a1,a2,…},{b1,b2,…},…} 原子索引列表组成的列表,将每个原子索引列表替换为 repl - attchmts 应为规则列表 {p1r1,…},从模式原子的索引到要替换的原子的索引. 如果没有提供附着点,则匹配模式和替换中的第一个和最后一个原子.
- 在二维或三维空间绘制分子时,分别从 AtomCoordinates 和 AtomDiagramCoordinates 选项值中获取坐标. 如果分子表达式中没有出现坐标,则自动生成坐标.
- 以下操作将预先自动计算坐标,并返回含有该坐标的 Molecule 对象:
-
"ComputeAtomCoordinates" 自动计算分子的三维坐标 {"ComputeAtomCoordinates",opts} 使用选项 opts 计算原子的坐标 {"GenerateConformers",n} 用不同的种子计算三维坐标 n 次,返回一系列分子 "ComputeAtomDiagramCoordinates" 计算二维坐标 - "ComputeAtomCoordinates" 将使所有隐式氢变为显式氢以便嵌入分子.
- "ComputeAtomCoordinates" 接受以下选项:
-
"Canonicalize" True 是否规范化坐标 "EnergyMinimize" True 是否在坐标上运行力场最小化 RandomSeeding 1234 怎样对随机性进行播种 - 默认情况下,"GenerateConformers" 将返回未被最小化的异象体.
- "ComputeAtomDiagramCoordinates" 将使与碳相连的氢变为隐式氢,使与杂原子相连的氢变为显式氢,以便与 MoleculePlot 的默认输出匹配. 通过使用 {"ComputeAtomDiagramCoordinates",IncludeHydrogensTrue} 可包含所有原子.
- 如果要修改单个原子的坐标,可使用:
-
{"SetAtomPosition",a{x,y,z}} 设置指定原子的位置 - 如果要规范化原子的坐标而不改变内部的几何结果,请使用:
-
"CanonicalizeAtomCoordinates" 将分子的质心平移到原点,并使主轴与直角坐标轴对齐 - 要翻转特定原子周围的局部几何结构,请使用:
-
{"InvertAroundAtom",a} 翻转索引为
的原子周围的几何结构{"InvertAroundAtom",{a1,a2,…}} 翻转多个原子周围的几何结构 - 四面体原子通过交换两个最小的可移动配体实现构型翻转. 三角锥形原子通过移动最小的可移动配体实现翻转.可移动原子要么不在环中,要么位于同一环内. 被移动原子的坐标通过二重旋转进行变换,因此分子中所有其他的立体中心保持不变.
- 对于普通的几何转换,可使用:
-
{"TransformAtomCoordinates",tfun} 对坐标应用转换函数 tfun - 此处,tfun 应为 TransformationFunction 对象,如 TranslationTransform、ReflectionTransform 等,或操作并返回 QuantityArray 对象的任意函数.
- 以下操作将修改内部坐标:
-
{"SetBondLength", {a1,a2}val} 设置指定原子之间的键长 {"SetBondAngle", {a1,a2,a3}val} 设置指定原子之间的角度 {"SetTorsionAngle",{a1,a2,a3,a4}val} 设置四个连续的由化学键联接的原子的扭转角 - 这些操作也支持长度列表或角度变化,如 {{a1,a2}val1,…}.
- 此处,val 应为 Quantity 对象或数字. 如果是数字,则假定单位为 "Angstroms" 或 "AngularDegrees".
- 对于 "SetBondLength",原子 a1 和 a2 必须成键,且它们之间的键不应成环. 与原子 a2 相连的所有原子都将被移除.
- 对于 "SetBondAngle",原子 {a1,a2} 和 {a2,a3} 应成键,且这两个键都不应成环. 与原子 a3 相连的所有原子都将被移除.
- 对于 "SetTorsionAngle",原子 {a1,a2}、{a2,a3} 和 {a3,a4} 应成键,且键 {a2,a3} 不应成环. 与原子 a4 相连的所有原子都将被移除.
- 如果要最小化相对于 MMFF 力场的坐标,请使用:
-
"EnergyMinimizeAtomCoordinates" 最小化总力场能量 {"EnergyMinimizeAtomCoordinates",ff} 用力场 ff("UFF"、"MMFF94" 或 "MMFF94s" 之一最小化能量) {"EnergyMinimizeAtomCoordinates",constraints} 在给定的力场约束条件下将能量最小化 - constraints 应为一系列键、角度或扭转角限制条件,可采用以下形式:
-
{a1,a2}d 指定两个原子间的距离 {a1,a2,a3}θ 指定三个原子间的角度 {a1,a2,a3,a4}θ 指定四个原子间的扭转角 <|…|> 一个关联,其键为 "Atoms"、"Value" 和 "ForceConstant"
对原子进行修改
对键进行修改
普通修改
对立体化学信息进行修改
子结构的删除与替换
生成坐标
对几何结构进行修改
范例
打开所有单元 关闭所有单元基本范例 (4)
MoleculeModify[Molecule["propane"], {"AddAtom", "C"}]MoleculeModify[%, {"AddBond", Bond[{2, 12}]}]ToEntity[%]m = Molecule["hexane"]MoleculeModify[m, {"AddBond", Bond[{1, 6}, "Single"]}]m = Molecule["cyclohexane"]MoleculeModify[m, {"DeleteBond", Bond[{4, 3}, "Single"]}]nitro = MoleculePattern["[#7](~[#8])~[#8]"];MoleculeModify[Molecule["trinitrotoluene"], {"ReplaceSubstructure", nitro -> "C"}]用 "ReplaceSubstructureList" 一次更换一个硝基:
MoleculeModify[Molecule["trinitrotoluene"], {"ReplaceSubstructureList", nitro -> "C"}]范围 (41)
"AddAtom" (1)
MoleculeModify[Molecule[{Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"],
Atom["C"], Atom["C"], Atom["H"], Atom["H"], Atom["H"], Atom["H"], Atom["H"], Atom["H"],
Atom["Cl"], Atom["Cl"]}, {Bond[{1, 2}, "Aromatic"], Bond ... romatic"], Bond[{10, 5}, "Aromatic"],
Bond[{3, 11}, "Single"], Bond[{4, 12}, "Single"], Bond[{6, 13}, "Single"],
Bond[{7, 14}, "Single"], Bond[{8, 15}, "Single"], Bond[{9, 16}, "Single"],
Bond[{17, 1}, "Single"], Bond[{18, 2}, "Single"]}], {"AddAtom", "Fe"}]MoleculeModify[Molecule[{Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"],
Atom["C"], Atom["C"], Atom["H"], Atom["H"], Atom["H"], Atom["H"], Atom["H"], Atom["H"],
Atom["Cl"], Atom["Cl"]}, {Bond[{1, 2}, "Aromatic"], Bond ... romatic"], Bond[{10, 5}, "Aromatic"],
Bond[{3, 11}, "Single"], Bond[{4, 12}, "Single"], Bond[{6, 13}, "Single"],
Bond[{7, 14}, "Single"], Bond[{8, 15}, "Single"], Bond[{9, 16}, "Single"],
Bond[{17, 1}, "Single"], Bond[{18, 2}, "Single"]}], {"AddAtom", {"Na+", "Cl-"}}]"AddBond" (1)
"AssignStereochemistryFromCoordinates" (1)
用分子的 3D 坐标来推断立体化学结构. 首先用原子、键和坐标创建一个分子,但没有定义立体化学信息:
m = Molecule[IconizedObject[«atom list»], IconizedObject[«bond list»], AtomCoordinates -> QuantityArray[StructuredArray`StructuredData[{47, 3},
{{{2.4265, -1.6857, -1.6031}, {3.9689, 0.2041, 0.0446}, {2.2747, 1.303, 2.1955},
{-1.0178, -1.3778, 0.9927}, {-4.3652, -2.3641, 0.1309}, {-2.5758, -3.9668, 1.4015},
{1.3208, -1.9591 ... 692, 0.7349, 1.5371}, {0.7256, 1.4585, -2.1836}, {-3.2418, 4.7619, -0.8261},
{-1.913, 5.208, -1.8817}, {2.3128, -3.6443, -2.7289}, {4.2015, 1.6396, -1.6863},
{1.5146, 3.3749, 1.7047}, {0.4457, 1.1452, 3.5146}}, "Angstroms", {{1}, {2}}}]]]m2 = MoleculeModify[m, "AssignStereochemistryFromCoordinates"]m2["StereochemistryElements"]//Dataset"CanonicalizeAtomCoordinates" (1)
从 "XYZ" 文件导入一个结构,并规范化三维坐标:
m = Import["ExampleData/caffeine.xyz"]MoleculeValue[m, {"CenterOfMass", "PrincipalAxes"}]"CanonicalizeAtomCoordinates" 将平移分子,将质心移动到原点,然后旋转以使主轴与直角坐标轴对齐:
m2 = MoleculeModify[m, "CanonicalizeAtomCoordinates"];
MoleculeValue[m2, {"CenterOfMass", "PrincipalAxes"}]"ComputeAtomCoordinates" (2)
当使用诸如 SMILES 字符串或名称之类的标识符创建分子时,不会立即计算坐标:
m = Molecule["FCCN1CCC(CC1)COc1ccc(cc1)C#N"];
Options[m]用 "ComputeAtomCoordinates" 计算坐标并将其保存在分子表达式中:
m2 = MoleculeModify[m, "ComputeAtomCoordinates"];
Options[m2]使用 RandomSeeding 选项生成不同的分子构象:
{m1, m2, m3} = MoleculeModify[Molecule["4-[[1-(2-fluoroethyl)piperidin-4-yl]methoxy]benzonitrile"], {"ComputeAtomCoordinates", RandomSeeding -> #}]& /@ {1, 12, 23};MoleculePlot3D /@ {m1, m2, m3}MoleculeValue[{m1, m2, m3}, "MMFFEnergy"]"ComputeAtomDiagramCoordinates" (2)
当用 MoleculePlot 在二维空间可视化分子时,默认情况下,将与碳原子相连的氢原子隐藏起来. 默认情况下,在辛醇中只显示羟基氢:
MoleculePlot[Molecule["2-octanol"]]"ComputeAtomDiagramCoordinates" 将移除那些未显示的氢,将显示出来的变为显式氢:
mol = MoleculeModify[Molecule["2-octanol"], "ComputeAtomDiagramCoordinates"]Options[mol]AtomList[mol, "H", "AtomIndex", IncludeHydrogens -> "ExplicitOnly"]coords = mol["AtomDiagramCoordinates", IncludeHydrogens -> "ExplicitOnly"];Show[Graphics[{Yellow, Disk[#, .2]& /@ coords}], MoleculePlot[mol]]计算原子结构图中的坐标,绘制三个图,显示默认氢原子,所有氢原子或不显示氢原子:
highlightCoordinates[option_] := Module[{mol}, mol = MoleculeModify[Molecule["2-octanol"], {"ComputeAtomDiagramCoordinates", IncludeHydrogens -> option}];
Show[
Graphics[{Yellow, Disk[#, .2]& /@ mol["AtomDiagramCoordinates", IncludeHydrogens -> "ExplicitOnly"]}], MoleculePlot[mol, IncludeHydrogens -> option]]
]GraphicsColumn[highlightCoordinates /@ {Automatic, True, False}]"DeleteAtom" (2)
m = Molecule["2-hexanol"]AtomList[m, "O", "AtomIndex"]MoleculeModify[m, {"DeleteAtom", %}]找出匹配的 Entity:
ToEntity[%]删除原子时,与其相连的所有氢也将被去除,用隐式氢填充重原子上未填充的化合价. 通过 ValenceErrorHandling->False 可禁用此行为,留下未配对的电子:
MoleculeModify[Molecule@"CCCP[C@@H]1C[C@@H]1C", {"DeleteAtom", 4}, ValenceErrorHandling -> #]& /@ {True, False}MoleculePlot /@ %"DeleteBond" (2)
m = Molecule["diphenylamine"]BondList[m, Bond[{"N", "C"}]]MoleculeModify[m, {"DeleteBond", First@%}]MoleculePlot@%MoleculeModify[Molecule[{"C", "C", "C", "N", "C", "C", "C", "N", "O", "S", "O"},
{Bond[{4, 5}, "Single"], Bond[{5, 3}, "Aromatic"], Bond[{3, 2}, "Aromatic"],
Bond[{2, 1}, "Aromatic"], Bond[{1, 7}, "Aromatic"], Bond[{7, 6}, "Aromatic"],
Bond[{1, 10}, "Single"], Bond[{10, 9}, "Double"], Bond[{10, 11}, "Double"],
Bond[{10, 8}, "Single"], Bond[{6, 5}, "Aromatic"]}, {}], {"DeleteBond", {7, 6}}]"DeleteSubstructure" (1)
MoleculePlot[mol = Molecule[{"C", "C", "C", "N", "C", "C", "C", "N", "O", "S", "O"},
{Bond[{4, 5}, "Single"], Bond[{5, 3}, "Aromatic"], Bond[{3, 2}, "Aromatic"],
Bond[{2, 1}, "Aromatic"], Bond[{1, 7}, "Aromatic"], Bond[{7, 6}, "Aromatic"],
Bond[{1, 10}, "Single"], Bond[{10, 9}, "Double"], Bond[{10, 11}, "Double"],
Bond[{10, 8}, "Single"], Bond[{6, 5}, "Aromatic"]}, {}]]MoleculeModify[mol, {"DeleteSubstructure", MoleculePattern["[NH2]"]}]MoleculePlot[%]"EnergyMinimizeAtomCoordinates" (1)
从 "XYZ" 文件中导入结构并使用 MMFF 力场最小化能量:
m = Import["ExampleData/caffeine.xyz"]m2 = MoleculeModify[m, "EnergyMinimizeAtomCoordinates"]MoleculeValue[{m, m2}, "MMFFEnergy"]Show[
MoleculePlot3D[m, ColorRules -> {_ -> Directive[Opacity[0.4], Gray]}], MoleculePlot3D[m2]
]"GenerateConformers" (1)
通常希望给出分子的一组构象,例如,对较大部分的能量分布进行采样. 为环己烷生成 100 个构象:
mols = MoleculeModify[Molecule["cyclohexane"], {"GenerateConformers", 100}];Histogram[MoleculeValue[mols, "MMFFEnergy"], PlotTheme -> "Detailed"]mols2 = MoleculeModify["EnergyMinimizeAtomCoordinates"] /@ mols;
Histogram[MoleculeValue[mols2, "MMFFEnergy"], PlotTheme -> "Detailed"]这样的分组对应于所谓的 "chair" 和 "twist-boat" 构象,分别为势能曲面的全局和局部最小值. 从每一组中选取一个构象,在三维空间进行绘制:
twistBoat = SelectFirst[mols2, #["MMFFEnergy"] > Quantity[0, "KilocaloriesThermochemical"/"Moles"]&];
chair = SelectFirst[mols2, #["MMFFEnergy"] < Quantity[0, "KilocaloriesThermochemical"/"Moles"]&];GraphicsRow[MoleculePlot3D[#, ViewPoint -> Left, PlotTheme -> "Tubes"]& /@ {chair, twistBoat}, ImageSize -> 500]"InvertAroundAtom" (3)
mol = Molecule["R-sec-butanol"];
MoleculePlot3D[%, IconizedObject[«viewOptions»]]invMol = MoleculeModify[mol, {"InvertAroundAtom", 3}];
MoleculePlot3D[%, IconizedObject[«viewOptions»]]MoleculeValue[{mol, invMol}, {"AtomChirality", 3}]也可对环中的原子进行翻转. 翻转顺式环己烷-1,3-二醇中的一个甲醇基原子:
mol = Molecule["cis-cyclohexan-1,3-diol"];
MoleculePlot3D[%, {2}, IconizedObject[«viewOptions»]]invMol = MoleculeModify[mol, {"InvertAroundAtom", 2}];
MoleculePlot3D[%, {2}, IconizedObject[«viewOptions»]]MoleculeValue[{mol, invMol}, {"AtomChirality", 2}]MoleculeValue[{mol, invMol}, {"AtomChirality", 6}]minusMenthol = Molecule["O[C@H]1[C@H](C(C)C)CC[C@@H](C)C1"];
MoleculePlot3D[%, {{2, 9}}, IconizedObject[«viewOptions»]]将原子 2(带有羟基)和原子 9(带有甲基)翻转,以生成 (+)-新异薄荷醇:
plusNeoisomenthol = MoleculeModify[minusMenthol, {"InvertAroundAtom", {2, 9}}];
MoleculePlot3D[%, {{2, 9}}, IconizedObject[«viewOptions»]]MoleculeValue[minusMenthol, {"AtomChirality", {2, 3, 9}}]MoleculeValue[plusNeoisomenthol, {"AtomChirality", {2, 3, 9}}]"Kekulize" (1)
"MakeHydrogensImplicit" (1)
mol = Molecule["cholesterol"]mol["ElementCounts", IncludeHydrogens -> "ExplicitOnly"]mol2 = MoleculeModify[mol, "MakeHydrogensImplicit"]mol2["ElementCounts", IncludeHydrogens -> "ExplicitOnly"]"RemoveStereochemistry" (1)
mol = Molecule["L-threonine"]AtomList[mol, Atom["AtomChirality" -> Except[None]], {"AtomIndex", "AtomChirality"}]mol2 = MoleculeModify[mol, "RemoveStereochemistry"]AtomList[mol2, Atom["AtomChirality" -> Except[None]], {"AtomIndex", "AtomChirality"}]"RenumberAtoms" (1)
"ReplaceAtom" (1)
"ReplaceSubstructure" (1)
estradiol = Molecule["C[C@]12CC[C@@H]3c4ccc(cc4CC[C@H]3[C@@H]1CC[C@@H]2O)O"]estrone = MoleculeModify[estradiol, {"ReplaceSubstructure", MoleculePattern["CO"] -> "C=O"}]MoleculePlot /@ {estradiol, estrone}"ReplaceSubstructureList" (1)
"SetAromaticity" (1)
m = Molecule[{Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["H"], Atom["H"],
Atom["H"], Atom["H"], Atom["H"], Atom["H"]}, {Bond[{1, 2}, "Double"], Bond[{2, 3}, "Single"],
Bond[{3, 4}, "Double"], Bond[{4, 5}, "Single"], Bond[{5, 6}, "Double"], Bond[{6, 1}, "Single"],
Bond[{1, 7}, "Single"], Bond[{2, 8}, "Single"], Bond[{3, 9}, "Single"], Bond[{4, 10}, "Single"],
Bond[{5, 11}, "Single"], Bond[{6, 12}, "Single"]}, IncludeAromaticBonds -> False];BondList[m, Bond[{"C", "C"}]]m2 = MoleculeModify[m, "SetAromaticity"]BondList[m2, Bond[{"C", "C"}]]"SetAtomChirality" (1)
glucose = Molecule["D-glucose"]AtomList[glucose, Atom["AtomChirality" -> Except[None]], {"AtomIndex", "AtomChirality"}]mannose = MoleculeModify[glucose, {"SetAtomChirality", 3 -> "S"}]AtomList[mannose, Atom["AtomChirality" -> Except[None]], {"AtomIndex", "AtomChirality"}]MoleculePlot3D[#, Style[3, Blue], ImageSize -> Small]& /@ {glucose, mannose}//Row"SetAtomPosition" (1)
"SetBondAngle" (3)
m = Molecule["acetone"]MoleculeModify[m, {"SetBondAngle", {1, 2, 4} -> Quantity[120, "AngularDegrees"]}]%[{"BondAngle", {1, 2, 4}}]MoleculeModify[m, {"SetBondAngle", {{1, 2, 4} -> Quantity[(3*Pi)/4, "Radians"], {1, 2, 3} -> Quantity[106., "AngularDegrees"]}}]%[{"BondAngle", {{1, 2, 4}, {1, 2, 3}}}]MoleculeModify[Molecule[{Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["N"], Atom["C"], Atom["O"], Atom["C"],
Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["H"],
Atom["H"], Atom["H"], Atom["H"], Atom["H"], Atom["H"], A ... "], Bond[{13, 34}, "Single"], Bond[{13, 35}, "Single"],
Bond[{13, 36}, "Single"], Bond[{14, 37}, "Single"], Bond[{14, 38}, "Single"],
Bond[{14, 39}, "Single"], Bond[{15, 40}, "Single"], Bond[{15, 41}, "Single"],
Bond[{15, 42}, "Single"]}], {"SetBondAngle", {9, 6, 7} -> Quantity[103, "AngularDegrees"]}]MoleculeModify[Molecule["benzene"], {"SetBondAngle", {1, 2, 3} -> Quantity[115, "AngularDegrees"]}]"SetBondLength" (1)
mol = Molecule["chloroform"]mol[{"BondLength", {2, 5}}]MoleculeModify[mol, {"SetBondLength", {2, 5} -> Quantity[1.3, "Angstroms"]}]%[{"BondLength", {2, 5}}]MoleculeModify[mol, {"SetBondLength", {1, 3} -> Quantity[1.3, "Angstroms"]}]"SetBondStereo" (1)
"SetBondType" (1)
"SetFormalCharge" (1)
"SetMassNumber" (1)
通过将质量数设置为 13,用 13C 标记甲羟戊酸内酯的 C-2:
mvl = Molecule["(4R)-4-hydroxy-4-methyloxan-2-one"]MoleculeModify[mvl, {"SetMassNumber", 9 -> 13}]用 AtomList 找到标记的碳:
AtomList[%, Atom["MassNumber" -> 13], "AtomIndex"]通过将质量数设置为 2,用氘标记甲羟戊酸内酯的 5-pro-S 氢:
labeledH = MoleculeModify[mvl, {"SetMassNumber", 19 -> 2}]MoleculePlot3D[labeledH, Atom["MassNumber" -> 2]]"SetMetaInformation" (1)
通常,实验室对样品和笔记本使用复合编号系统,化学家在撰写内部报告、研究论文和专利时会使用这些标识号. 可使用分子的元信息来存储此类数据.
mol = MoleculeModify[Molecule[{Atom["O"], Atom["C"], Atom["C"], Atom["C"], Atom["O"], Atom["C"], Atom["C"], Atom["O"],
Atom["C"], Atom["C"], Atom["C"], Atom["O"], Atom["C"], Atom["C"], Atom["C"], Atom["C"],
Atom["Cl"], Atom["C"], Atom["O"], Atom["C"], Atom["C"], ... r" -> 6,
"Direction" -> "Counterclockwise", "FiducialAtom" -> 5, "Ligands" -> {7, 14, 2}],
Association["StereoType" -> "Tetrahedral", "ChiralCenter" -> 14, "Direction" -> "Clockwise",
"FiducialAtom" -> 13, "Ligands" -> {15, 6, 31}]}], {"SetMetaInformation", <|"C-number" -> "123456-789"|>}]mol["MetaInformation"]mol = MoleculeModify[mol, {"SetMetaInformation", <|"SpecificRotation" -> {Quantity[364, "AngularDegrees"], "@ 20°C, sat. CHCl3"}|>}]mol["MetaInformation"]MoleculeModify[mol, {"SetMetaInformation", <||>}]%["MetaInformation"]"SetTorsionAngle" (1)
mol = Molecule["OCCC=O", IncludeHydrogens -> True];mol2 = MoleculeModify[mol, {"SetTorsionAngle", {{6, 1, 2, 3} -> 60, {1, 2, 3, 4} -> -60, {2, 3, 4, 5} -> 60}}];MoleculeValue[{mol, mol2}, {"TorsionAngle", {{6, 1, 2, 3}, {1, 2, 3, 4}, {2, 3, 4, 5}}}]MoleculePlot3D /@ {mol, mol2}"SetUnpairedElectronCount" (1)
"TransformAtomCoordinates" (2)
m1 = Molecule["(2S)-3-hydroxy-2-[[(2S)-pyrrolidine-2-carbonyl]amino]propanoic acid"];m2 = MoleculeModify[m1, {"TransformAtomCoordinates", TranslationTransform[{Quantity[10, "Angstroms"], Quantity[10, "Angstroms"], Quantity[10, "Angstroms"]}]}]Show[MoleculePlot3D[#]& /@ {m1, m2}]用 ReflectionTransform 创建分子的对映异构体:
m = Molecule["(2S)-3-phenyl-2-[(2-phenylacetyl)amino]propanoic acid"]AtomList[m, Atom["AtomChirality" -> Except[None]], {"AtomIndex", "AtomChirality"}]m2 = MoleculeModify[m, {"TransformAtomCoordinates", ReflectionTransform[{0, 0, 1}, {0, 0, 4}]}]AtomList[m2, Atom["AtomChirality" -> Except[None]], {"AtomIndex", "AtomChirality"}]Show[MoleculePlot3D /@ {m, m2}, ViewPoint -> Front]推广和延伸 (4)
"InvertAtom" (4)
mol = Molecule[{"C", "N", "C", "C", "C", Atom["C", "HydrogenCount" -> 1], "Cl", "C"},
{Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{2, 5}, "Single"],
Bond[{5, 6}, "Single"], Bond[{6, 7}, "Single"], Bond[{6, 8}, "Single"]},
{StereochemistryElements -> {Association["StereoType" -> "Tetrahedral", "ChiralCenter" -> 6,
"Direction" -> "Counterclockwise"]}}];
MoleculePlot3D[%, IconizedObject[«viewOptions»]]invMol = MoleculeModify[mol, {"InvertAroundAtom", 2}];
MoleculePlot3D[%, IconizedObject[«viewOptions»]]MoleculeValue[{mol, invMol}, {"OutOfPlaneAngle", {1, 2, 3, 5}}]MoleculeValue[{mol, invMol}, {"AtomChirality", 6}]mol = Molecule[{"C", Atom["C", "HydrogenCount" -> 1], "O", "C", "C", "C", "C",
Atom["C", "HydrogenCount" -> 1], "Cl", "C", "C"}, {Bond[{1, 2}, "Single"],
Bond[{2, 3}, "Single"], Bond[{2, 4}, "Single"], Bond[{4, 5}, "Single"], Bond[{5, 6}, "Single"] ... "Direction" -> "Clockwise"], Association["StereoType" -> "Tetrahedral", "ChiralCenter" -> 2,
"Direction" -> "Counterclockwise"], Association["StereoType" -> "Tetrahedral",
"ChiralCenter" -> 8, "Direction" -> "Counterclockwise"]}}];
MoleculePlot3D[%, {1}, IconizedObject[«viewOptions»]]invMol = MoleculeModify[mol, {"InvertAroundAtom", 1}];
MoleculePlot3D[%, {1}, IconizedObject[«viewOptions»]]MoleculeValue[{mol, invMol}, {"AtomChirality", 1}]MoleculeValue[{mol, invMol}, {"AtomChirality", {2, 8}}]mol = Molecule[{"C", "C", "C", "C", "C", "C", Atom["C", "HydrogenCount" -> 1], "C", "C", "C", "C"},
{Bond[{1, 2}, "Single"], Bond[{1, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{4, 5}, "Single"],
Bond[{5, 6}, "Single"], Bond[{6, 7}, "Single"], Bond ... gle"]}, {StereochemistryElements ->
{Association["StereoType" -> "Tetrahedral", "ChiralCenter" -> 1,
"Direction" -> "Counterclockwise"], Association["StereoType" -> "Tetrahedral",
"ChiralCenter" -> 7, "Direction" -> "Clockwise"]}}];
MoleculePlot3D[%, {1}, IconizedObject[«viewOptions»]]invMol = MoleculeModify[mol, {"InvertAroundAtom", 1}];
MoleculePlot3D[%, {1}, IconizedObject[«viewOptions»]]MoleculeValue[{mol, invMol}, {"AtomChirality", 1}]mol = Molecule[{"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"], Bond[{5, 9}, "Single"],
Bond[{9, 10}, "Single"], Bond[{10, 11}, "Single"], Bond[{8, 1}, "Single"],
Bond[{11, 1}, "Single"]}, {}];
MoleculePlot3D[%, {1}, IconizedObject[«viewOptions»]]invMol = MoleculeModify[mol, {"InvertAroundAtom", 1}];
MoleculePlot3D[%, {1}, IconizedObject[«viewOptions»]]应用 (1)
"InvertAroundAtom" (1)
alphaDglucose = Molecule["alpha-D-glucose"];
MoleculePlot3D[%, IconizedObject[«viewOptions»]]betaDglucose = MoleculeModify[alphaDglucose, {"InvertAroundAtom", 5}];
MoleculePlot3D[%, IconizedObject[«viewOptions»]](AssociationThread[Range[#["AtomCount"]], MoleculeValue[#, "AtomChirality"]]//DeleteCases[None])& /@ {alphaDglucose, betaDglucose}可能存在的问题 (4)
"InvertAroundAtom" (4)
mol = Molecule[{"C", "C", "C", "C", "C", Atom["C", "HydrogenCount" -> 1], "C", "C", "C"},
{Bond[{1, 2}, "Single"], Bond[{1, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{4, 5}, "Single"],
Bond[{5, 6}, "Single"], Bond[{6, 7}, "Single"], Bond[{7, 8}, " ... ingle"]},
{StereochemistryElements -> {Association["StereoType" -> "Tetrahedral", "ChiralCenter" -> 1,
"Direction" -> "Counterclockwise"], Association["StereoType" -> "Tetrahedral",
"ChiralCenter" -> 6, "Direction" -> "Clockwise"]}}];
MoleculePlot3D[%, {1}]MoleculeModify[mol, {"InvertAroundAtom", 1}]MoleculeModify[Molecule[{"C", "C", "C", "C", "C", Atom["C", "HydrogenCount" -> 1], "C", "C", "C"},
{Bond[{1, 2}, "Single"], Bond[{1, 3}, "Single"], Bond[{3, 4}, "Single"], Bond[{4, 5}, "Single"],
Bond[{5, 6}, "Single"], Bond[{6, 7}, "Single"], Bond[{7, 8}, " ... ingle"]},
{StereochemistryElements -> {Association["StereoType" -> "Tetrahedral", "ChiralCenter" -> 1,
"Direction" -> "Counterclockwise"], Association["StereoType" -> "Tetrahedral",
"ChiralCenter" -> 6, "Direction" -> "Clockwise"]}}], {"InvertAroundAtom", 1}]mol = Molecule[{"C", "C", "O", "C", "C", "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[{5, 1}, "Single"], Bond[{7, 1}, "Single"]}, {}];
MoleculePlot3D[%, {1}, IconizedObject[«viewOptions»]]MoleculeModify[mol, {"InvertAroundAtom", 1}]mol = Molecule[{"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"], Bond[{5, 9}, "Single"],
Bond[{9, 10}, "Single"], Bond[{10, 11}, "Single"], Bond[{5, 1}, "Single"],
Bond[{8, 1}, "Single"], Bond[{11, 1}, "Single"]}, {}];
MoleculePlot3D[%, {1}, PlotTheme -> "Tubes", IncludeHydrogens -> None, IconizedObject[«viewOptions»]]MoleculeModify[mol, {"InvertAroundAtom", 1}]mol = Molecule[{"C", "C", "C", "C", "C", "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[{2, 6}, "Single"], Bond[{6, 7}, "Single"], Bo ... e"],
Bond[{1, 13}, "Single"], Bond[{13, 14}, "Single"], Bond[{14, 15}, "Single"],
Bond[{15, 16}, "Single"], Bond[{16, 17}, "Single"], Bond[{9, 1}, "Single"],
Bond[{17, 1}, "Single"], Bond[{13, 5}, "Single"], Bond[{17, 12}, "Single"]}, {}];
MoleculePlot3D[%, {1}, PlotTheme -> "Tubes", IncludeHydrogens -> None]MoleculeModify[mol, {"InvertAroundAtom", 1}]mol = Molecule[{"P", "C", "C", "C", "C", "O", "C", "C", "F", "F", "F", "C", "C", "N", "C", "C", "C", "C",
"Cl"}, {Bond[{1, 2}, "Single"], Bond[{2, 3}, "Single"], Bond[{2, 4}, "Single"],
Bond[{2, 5}, "Single"], Bond[{1, 6}, "Single"], Bond[{6, 7}, " ... "],
Bond[{7, 12}, "Single"], Bond[{12, 13}, "Single"], Bond[{1, 14}, "Single"],
Bond[{14, 15}, "Single"], Bond[{15, 16}, "Single"], Bond[{14, 17}, "Single"],
Bond[{17, 18}, "Single"], Bond[{1, 19}, "Single"], Bond[{13, 1}, "Single"]}, {}];
MoleculePlot3D[%, PlotTheme -> "Tubes", IncludeHydrogens -> None, IconizedObject[«viewOptions»]]MoleculeModify[mol, {"InvertAroundAtom", 1}]巧妙范例 (1)
对 MMFF 力场应用距离约束条件以找到满足两个原子之间给定距离的构象. 首先,创建基础分子:
m = Molecule[{Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"],
Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["C"],
Atom["C"], Atom["C"], Atom["C"], Atom["C"], Atom["O"], A ... r" -> 33,
"Direction" -> "Clockwise", "FiducialAtom" -> 32, "Ligands" -> {34, 35, 107}],
Association["StereoType" -> "Tetrahedral", "ChiralCenter" -> 38, "Direction" -> "Clockwise",
"FiducialAtom" -> 37, "Ligands" -> {39, 40, 117}]}];dmat = m["DistanceMatrix"]{a1, a2} = FirstPosition[Normal[dmat], Max[dmat]]默认构象中两个原子的间距为 32 埃 (ångström):
dmat[[a1, a2]]MoleculePlot3D[m, {Style[a1, Blue], Style[a2, Red]}]用 "EnergyMinimizeAtomCoordinates" 找到这些原子间的距离满足特定条件的新构象:
mod = MoleculeModify[m, {"EnergyMinimizeAtomCoordinates", {a1, a2} -> #}]& /@ {Quantity[5, "Angstroms"], Quantity[10, "Angstroms"], Quantity[20, "Angstroms"], Quantity[40, "Angstroms"]}MoleculeValue[mod, {{"InteratomicDistance", {a1, a2}}, "MMFFEnergy"}]MoleculePlot3D /@ mod相关指南
-
▪
- 分子结构与计算 ▪
- 物理和化学:数据和计算
文本
Wolfram Research (2019),MoleculeModify,Wolfram 语言函数,https://reference.wolfram.com/language/ref/MoleculeModify.html (更新于 2026 年).
CMS
Wolfram 语言. 2019. "MoleculeModify." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2026. https://reference.wolfram.com/language/ref/MoleculeModify.html.
APA
Wolfram 语言. (2019). MoleculeModify. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/MoleculeModify.html 年
BibTeX
@misc{reference.wolfram_2026_moleculemodify, author="Wolfram Research", title="{MoleculeModify}", year="2026", howpublished="\url{https://reference.wolfram.com/language/ref/MoleculeModify.html}", note=[Accessed: 03-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_moleculemodify, organization={Wolfram Research}, title={MoleculeModify}, year={2026}, url={https://reference.wolfram.com/language/ref/MoleculeModify.html}, note=[Accessed: 03-November-2026]}