ReacMap的原子映射功能,是将反应物中的每个原子与产物中的原子一一对应,即回答:反应物中的每个原子最终在产物中的位置如何?ReactMap中的“最佳原子映射”,是指所需键变化(反应物中的键断裂和产物中的键形成)数量最少的映射方案。
例如上图,水解反应的最佳原子映射:(请注意,甲基组被映射为一个单元以降低图形复杂性),红色键表示反应物中所需的键断裂,绿色键表示产物中所需的键形成。2 个键形成,2 个键断裂,因此此映射的“成本”为 4。
这种方式每输入一个命令就回车一次,行首的编号就增大1。实际上就是把方式1中的内容,一行一行的运行。脚本的理解如下:
这时候大家可能有个疑问,反应物分子中,每个编号对应什么原子?产物分子中,每个编号对应什么原子?那么我们可以接下来执行命令:
可以用浏览器打开这两个文件,分别是反应物原子编号情况和产物原子编号情况。反应物:
产物:
import scm.reactmap as rm # we'll keep a list of all reactions we want to map # and then pass this list to rm.Map reactions = [] reactant = rm.Molecule(smiles="CCC[Br].[OH1-]") product = rm.Molecule(smiles="[Br-].CCCO") reactions.append( rm.Reaction(reactant=reactant, product=product, name="SN2") ) reactant = rm.Molecule(atoms=['H','O','O','H'], bonds=[(0,1),(1,2),(2,3)]) product = rm.Molecule(atoms=['H','O','O','H'], bonds=[(0,1),(2,3)]) reactions.append( rm.Reaction(reactant = reactant, product = product, name = "homolytic cleavage") ) reactant = rm.Molecule(smiles='C=C.[H][H]') product = rm.Molecule(smiles='CC') reactions.append( rm.Reaction(reactant = reactant, product = product, name = "hydrogenation") ) rm.Map(reactions) for r in reactions: print("Reaction {} had a cost of {}".format(r.name,r.cost))
这里定义了3个反应,然后分别打印三个反应的“成本”。
Molecule的子变量:https://www.scm.com/doc/reactmap/_generated/scm.reactmap.Molecule.html 例如: 因为reactant = rm.Molecule(….),所以reactant.atoms实际上就是rm.Molecule.atoms
Reaction的子变量:https://www.scm.com/doc/reactmap/_generated/scm.reactmap.Reaction.html
Settings的子变量:https://www.scm.com/doc/reactmap/_generated/scm.reactmap.Settings.html
RMLogger的子变量:https://www.scm.com/doc/reactmap/_generated/scm.reactmap.RMLogger.html
heuristics的子变量:https://www.scm.com/doc/reactmap/_generated/scm.reactmap.heuristics.html