RDKit|搜索子結(jié)構(gòu)時對側(cè)鏈進行條件限制

目錄

  • 一吆玖、簡單子結(jié)構(gòu)搜索
    • 1.初始化
    • 2.獲取所有匹配的結(jié)構(gòu)
    • 3.查看匹配的結(jié)構(gòu)
  • 二桨醋、帶條件的子結(jié)構(gòu)搜索
    • 1.定義條件
    • 2.對側(cè)鏈設(shè)置條件
    • 3.使用條件進行篩選
    • 4.其他條件舉例

一袜硫、簡單子結(jié)構(gòu)搜索

1. 初始化

  • m表示待搜索的原始分子
  • p表示帶側(cè)鏈的四元環(huán)結(jié)構(gòu)
>>> from rdkit import Chem
>>> from rdkit.Chem import Draw
>>> m = Chem.MolFromSmiles('C2NCC2CC1C(CCCC)C(OCCCC)C1c2ccccc2')
>>> p = Chem.MolFromSmarts('C1CCC1*')

2. 獲取所有匹配的結(jié)構(gòu)

  • 獲取所有子結(jié)構(gòu):GetSubstructMatches()
    返回值是原分子中與子結(jié)構(gòu)匹配的原子索引箭阶。本例中一共返回4個結(jié)果
>>> matches = m.GetSubstructMatches(p)
>>> matches
((5, 6, 11, 17, 18), (5, 17, 11, 6, 7), (6, 5, 17, 11, 12), (6, 11, 17, 5, 4))

3. 查看匹配的結(jié)構(gòu)

  • 直接展示圖片:MolToImage(m, highlightAtoms)
    通過highlightAtoms傳入匹配的子結(jié)構(gòu)
>>> Draw.MolToImage(m, highlightAtoms=matches[0])
  • 搜索結(jié)果之一


    簡單搜索

二挤安、帶條件的子結(jié)構(gòu)搜索

2020.03版本以后谚殊,rdkit提供了一個可選功能,用于檢查并篩選出符合條件的子結(jié)構(gòu)蛤铜。使用的時候 把這段代碼粘過去嫩絮,按流程操作 就好了。條件可以在matchers中定義围肥,符合matchers中指定條件的子結(jié)構(gòu)才會被返回剿干。

1. 定義條件

  • 假設(shè)要尋找一個側(cè)鏈都帶芳香性的子結(jié)構(gòu)
    只需要修改matchers字典,向matchers中添加一個鍵值對穆刻,鍵為"all_aromatic"怨愤,值為判斷每個原子的芳香性。
>>> class SidechainChecker(object):
>>>     # 在這里添加條件
>>>     matchers = {'all_carbon':lambda at: at.GetAtomicNum() == 6,
>>>                 'all_aromatic':lambda at: at.GetIsAromatic()}
>>>     
>>>     def __init__(self, query, pName='queryType'):
>>>         # atom: [(idx, prop), ()]
>>>         self._atsToExamin = [(x.GetIdx(), x.GetProp(pName)) for x in query.GetAtoms() if x.HasProp(pName)]
>>>         self._pName = pName
>>>         
>>>     def __call__(self, mol, vect):
>>>         seen = [0] * mol.GetNumAtoms()
>>>         for idx in vect:
>>>             seen[idx] = 1
>>>         for idx, qtyp in self._atsToExamin:
>>>             midx = vect[idx]
>>>             stack = [midx]
>>>             atom = mol.GetAtomWithIdx(midx)
>>>             stack = [atom]
>>>             while stack:
>>>                 atom = stack.pop(0)
>>>                 if not self.matchers[qtyp](atom):
>>>                     return False
>>>                 seen[atom.GetIdx()] = 1
>>>                 for nbr in atom.GetNeighbors():
>>>                     if not seen[nbr.GetIdx()]:
>>>                         stack.append(nbr)
>>>         return True

2. 對側(cè)鏈設(shè)置條件

  • 給原子設(shè)置屬性:SetProp(key, values)
    key:屬性名
    values:屬性值
    注:p中第五個原子(索引為4)蛹批,即"*"撰洗,表示與p連接的側(cè)鏈篮愉。
  • 這里需要側(cè)鏈帶有芳香性的子結(jié)構(gòu)
>>> atom = p.GetAtomWithIdx(4)
>>> atom.SetProp("queryType", "all_aromatic")
  • 查看所有屬性:GetPropNames()
  • 查看屬性值:GetProp(key)
>>> print(list(atom.GetPropNames()))
>>> atom.GetProp('queryType')
['queryType']
'all_aromatic'

3. 使用條件進行篩選

  • 返回側(cè)鏈都帶有芳香性的子結(jié)構(gòu),同樣要 粘過去按流程操作
  • 再用GetSubstructMatches()搜索
>>> params = Chem.SubstructMatchParameters()
>>> checker = SidechainChecker(p)
>>> params.setExtraFinalCheck(checker)
>>> matches = m.GetSubstructMatches(p, params)
>>> matches
((5, 6, 11, 17, 18),)
  • 現(xiàn)在只剩一個結(jié)果了差导,查看一下试躏,匹配的側(cè)鏈為一個芳香環(huán)
>>> Draw.MolToImage(m, highlightAtoms=matches[0])
帶條件的搜索

4. 其他條件舉例

  • 返回側(cè)鏈只含有碳的子結(jié)構(gòu),重新設(shè)置屬性:SetProp("queryType", "all_carbon")
    注:all_carbon需要提前在matchers中定義好
>>> atom = p.GetAtomWithIdx(4)
>>> atom.SetProp("queryType", "all_carbon")
>>> params = Chem.SubstructMatchParameters()
>>> checker = SidechainChecker(p)
>>> params.setExtraFinalCheck(checker)
>>> matches = m.GetSubstructMatches(p, params)
>>> matches
((5, 6, 11, 17, 18), (5, 17, 11, 6, 7))

本文參考自rdkit官方文檔设褐。
代碼及源文件在這里颠蕴。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市助析,隨后出現(xiàn)的幾起案子犀被,更是在濱河造成了極大的恐慌,老刑警劉巖外冀,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寡键,死亡現(xiàn)場離奇詭異,居然都是意外死亡雪隧,警方通過查閱死者的電腦和手機西轩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脑沿,“玉大人藕畔,你說我怎么就攤上這事∽矗” “怎么了注服?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長措近。 經(jīng)常有香客問我祠汇,道長,這世上最難降的妖魔是什么熄诡? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮诗力,結(jié)果婚禮上凰浮,老公的妹妹穿的比我還像新娘。我一直安慰自己苇本,他們只是感情好袜茧,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瓣窄,像睡著了一般笛厦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俺夕,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天裳凸,我揣著相機與錄音贱鄙,去河邊找鬼。 笑死姨谷,一個胖子當(dāng)著我的面吹牛逗宁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梦湘,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼瞎颗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捌议?” 一聲冷哼從身側(cè)響起哼拔,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓣颅,沒想到半個月后倦逐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡弄捕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年僻孝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片守谓。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡穿铆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斋荞,到底是詐尸還是另有隱情荞雏,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布平酿,位于F島的核電站凤优,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蜈彼。R本人自食惡果不足惜筑辨,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幸逆。 院中可真熱鬧棍辕,春花似錦、人聲如沸还绘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拍顷。三九已至抚太,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尿贫。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工电媳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帅霜。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓匆背,卻偏偏與公主長得像,于是被迫代替她去往敵國和親身冀。 傳聞我的和親對象是個殘疾皇子钝尸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • SMILES SMILES是簡化分子線性輸入的方法(Simplified molecular input line...
    愛折騰的大懶豬閱讀 6,240評論 0 2
  • 作為一個很有上進心的女人珍促,我也想在這短暫的一生里做成一點事,只為了讓這個世界因為我的存在變得更加美好一點點剩愧≈硇穑看到這...
    大美的打字機閱讀 364評論 0 0
  • 所謂創(chuàng)業(yè)穴翩,就是把你的想法拿到市場上去檢驗。成功了锦积,會收獲財富芒帕;失敗了,會收獲經(jīng)驗丰介。不論成功或者失敗背蟆,都是一種成長。...
    冷劍書生閱讀 252評論 0 1
  • 沉重話題之前垛叨,先來點輕松的內(nèi)容吧。 我記得有一部電影柜某,《南方英雄》嗽元。有個美國人帶著一只寵物兔子,去了蘇格蘭一個民風(fēng)...
    Graceland閱讀 9,170評論 39 4
  • 如果那夜你不牽起我的手 我便不會心若枯木 死氣沉沉 如果那日你不許我一世諾言 我便不會化作霰雪鳥 今生唯你相伴 是...
    鐘漠閱讀 160評論 0 0