revised code…

I posed python snippet yesterday, but it has bug.
I revised the code.
Following code include some filters.
1. avoid “nnn”
2. ratio of aromatic nitrogen must be thres.(default 0.4).
This code is very slow.
I want to improve the speed.

import copy, re
import sys
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import Fragments


def dance_atom( mol ):
    res = []
    aro_idxs = [ atom.GetIdx() for atom in mol.GetAromaticAtoms() if atom.GetDegree() < 3 ]
    for atm_num in [6, 7, 8, 16]:
        for idx in aro_idxs:
            cp_mol = copy.deepcopy( mol )
            cp_mol.GetAtomWithIdx(idx).SetAtomicNum( atm_num )
            p = Chem.MolFromSmarts("nnn")
            if cp_mol.HasSubstructMatch( p ) != True:
                try:
                    smi = Chem.MolToSmiles( cp_mol)
                    smi.replace("[sH]", "s")
                    cp_mol = Chem.MolFromSmiles( smi )
                    Chem.SanitizeMol(cp_mol)
                    res.append( cp_mol )
                except:
                    pass
    return res

def recursive_dance(mols, check = set([]), thres = 0.4):
    before_n = len(check)
    print before_n
    for mol in mols:
        danced_mols = dance_atom( mol )
        for mol_conv in danced_mols:
            aro_n = Fragments.fr_Ar_N( mol )
            aro_a = len( mol.GetAromaticAtoms() )
            ratio = float(aro_n) / float(aro_a)
            if ratio < thres:
                smi = Chem.MolToSmiles(mol_conv )
                check.add( smi )
    after_n = len(check)
    print before_n, after_n
    if before_n < after_n:
        mols = [ Chem.MolFromSmiles(mol) for mol in check ]
        recursive_dance( mols,  check=check )
    return [ Chem.MolFromSmiles(smi) for smi in check ]
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中