日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【RDKit】Python化学包RDkit的教程

發布時間:2023/12/31 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【RDKit】Python化学包RDkit的教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python化學包RDkit的教程

  • 官方地址
  • 教程
    • 讀取文件
    • 對分子進行操作
      • 訪問單個原子
      • 訪問化學鍵
      • 化學特征提取

官方地址

http://www.rdkit.org/
本文不再給出安裝方法,讀者可自行網上搜索。

教程

說明:如果某一行有注釋,則該注釋表示該行的輸出

讀取文件

RDKit能讀取各種各樣的化學結構文件,類和方法主要在rdkit.Chem.rdmolfiles這個模塊下,因此需要先導入包

from rdkit import Chem

以sdf文件為例,官方給出了4種等價的讀取方法,這些方法返回一個或多個rdkit.Chem.rdchem.Mol對象(http://www.rdkit.org/docs/source/rdkit.Chem.rdmolfiles.html#rdkit.Chem.rdmolfiles.SDMolSupplier)

suppl = Chem.SDMolSupplier('in.sdf') mol = suppl[0] print(mol.GetNumAtoms()) # 9

奇怪,原子數怎么只有9個?輸出所有原子之后發現氫原子被省略了,因此如果你不希望省略氫原子,按照以下方式讀取

suppl = Chem.SDMolSupplier('in.sdf', removeHs=False) mol = suppl[0] print(mol.GetNumAtoms()) # 23

對分子進行操作

訪問單個原子

如果要訪問單個原子,可以通過GetAtomWithIndex()獲得原子對象rdkit.Chem.rdchem.Atom,以第一個原子碳原子為例,獲取它的標簽、價電子、原子元素周期編號

atom = mol.GetAtomWithIdx(0) print(atom.GetSymbol()) # C print(atom.GetExplicitValence()) # 4 print(atom.GetAtomicNum()) # 6

如果要訪問所有原子,可以通過GetAtoms()方法遍歷

for atom in mol.GetAtoms():print(atom.GetSymbol())

獲取所有原子坐標,該方法返回一個numpy數組

mol.GetConformers()[0].GetPositions() # return a numpy array

其他可能用到的屬性

atom.GetHybridization() # 返回雜化類型 atom.GetIsAromatic () # 該原子是否在芳香烴內 atom.GetTotalNumHs() # 與該原子連接的氫原子個數 atom.GetNeighbors() # 返回該原子的所有鄰居原子,以元祖的形式返回

有關原子的請其他方法點擊這里

訪問化學鍵

通過GetBondBetweenAtoms()可以返回一個化學鍵的對象rdkit.Chem.rdchem.Bond,這個方法的輸入參數是兩個原子在數組中的編號,如果化學鍵不存在,則返回None

bond1 = mol.GetBondBetweenAtoms(0,1) bond2 = mol.GetBondBetweenAtoms(0,2) print(bond1) # <rdkit.Chem.rdchem.Bond object at 0x000000000084D850> print(bond2) # None

獲得化學鍵的類型

print(bond1.GetBondType()) # rdkit.Chem.rdchem.BondType.SINGLE

化學鍵的鍵長我暫時沒有找到相應的方法,但是可以根據原子的坐標手動計算。

化學特征提取

重新打開一個Python文件進行操作。
對于有些原子的特征,其在原子層面上無法判斷化學特征,因此需要在分子層面上進行提取。例如化學中的donor和acceptor概念(具體是什么意思我也不知道,沒有化學背景,但知道有這些類別就行,并且這些類別是原子的特征)
首先導入包,然后設定特征的參考文件,并實例化一個特征工廠。

from rdkit import Chem from rdkit.Chem import ChemicalFeatures from rdkit import RDConfig import os fdefName = os.path.join(RDConfig.RDDataDir,'BaseFeatures.fdef') factory = ChemicalFeatures.BuildFeatureFactory(fdefName)

默認情況下對任何化合物都不需要改動上面的代碼。
利用MolFromSmiles方法讀取分子。Smiles(Simplified molecular-input line-entry system)是一種描述分子的字符串描述符,和高中學過的分子結構式差不多。更多關于Smiles的信息可以參見百度百科或維基百科

m = Chem.MolFromSmiles('OCc1ccccc1CN') feats = factory.GetFeaturesForMol(m) len(feats) # 8

這里分子為OCc1ccccc1CN,我們最終生成了8個特征,每個特征的提取方法如下所示

feats[0].GetFamily() # 'Donor' feats[0].GetType() # 'SingleAtomDonor' feats[0].GetAtomIds() # (0,) feats[4].GetFamily() # 'Aromatic' feats[4].GetAtomIds() # (2, 3, 4, 5, 6, 7)

更多關于特征方法請參閱這里

總結

以上是生活随笔為你收集整理的【RDKit】Python化学包RDkit的教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。