文章目錄
- 1.rxn文件創(chuàng)建反應(yīng)
- 2.保護(hù)目標(biāo)原子
在化學(xué)反應(yīng)中保護(hù)原子
本文是化學(xué)反應(yīng)的進(jìn)階操作,關(guān)于使用rdkit進(jìn)行化學(xué)反應(yīng)的操作可以參考這篇文章。有時(shí)在使用rxn文件時(shí),很難準(zhǔn)確表達(dá)或全面考慮到每個(gè)細(xì)節(jié),導(dǎo)致不需要的原子發(fā)生反應(yīng),并產(chǎn)生副產(chǎn)物。而rdkit也提供了保護(hù)原子的操作,避免不需要的原子參與到反應(yīng)中。還是以形成酰胺鍵為例。
1.rxn文件創(chuàng)建反應(yīng)
- 通過(guò)rxn文件創(chuàng)建一個(gè)反應(yīng)模式:ReactionFromRxnFile()
- 檢查一下該反應(yīng):ReactionToImage()
>>> import os
>>> from rdkit import Chem
>>> from rdkit.Chem import AllChem as Chem
>>> from rdkit import RDConfig
>>> rxn_file = os.path.join(RDConfig.RDDocsDir, 'Book\data\AmideBond.rxn')
>>> rxn = Chem.ReactionFromRxnFile(rxn_file)
>>> Chem.Draw.ReactionToImage(rxn, subImgSize=(300, 100))

1
在這個(gè)反應(yīng)中,氮原子只要連有氫原子,就可以發(fā)生反應(yīng)。當(dāng)使用一個(gè)已經(jīng)含有酰胺鍵的化合物作為反應(yīng)物時(shí),同樣也可以發(fā)生反應(yīng)。
- 設(shè)置反應(yīng)物acid和base
- 按照模式進(jìn)行反應(yīng):rxn.RunReactants()
- 對(duì)反應(yīng)物進(jìn)行核對(duì):SanitizeMol()
>>> acid = Chem.MolFromSmiles('CC(=O)O')
>>> base = Chem.MolFromSmiles('CC(=O)NCCN')
>>> ps = rxn.RunReactants((acid,base))
>>> [Chem.SanitizeMol(x[0]) for x in ps]
>>> Chem.Draw.MolsToGridImage([x[0] for x in ps], molsPerRow=2, subImgSize=(300, 300))

2
2.保護(hù)目標(biāo)原子
如果不想讓酰胺氮原子發(fā)生反應(yīng),可以將它保護(hù)起來(lái)
- 將要保護(hù)的基團(tuán)轉(zhuǎn)成SMARTS,記錄在amidep中
- 在反應(yīng)物中查找所有符合amidep的子結(jié)構(gòu)
- 遍歷每個(gè)符合的子結(jié)構(gòu),設(shè)置屬性,鍵為"_protected",值隨意
>>> amidep = Chem.MolFromSmarts('[N;$(NC=[O,S])]')
>>> for match in base.GetSubstructMatches(amidep):
>>> base.GetAtomWithIdx(match[0]).SetProp('_protected', '1')
- 再進(jìn)行反應(yīng),被保護(hù)的基團(tuán)就不會(huì)發(fā)生反應(yīng)了
>>> ps = rxn.RunReactants((acid,base))
>>> print(len(ps))
>>> Chem.MolToSmiles(ps[0][0])
1
'CC(=O)NCCNC(C)=O'