RDKit Installation

Conda 를 이용한 rdkit 설치.#

RDKIT을 콘다를 이용하지 않고, 설치하는 방법은 매우 어렵다. (lib 문제로 설치가 어렵다.)

마음 편하게 anaconda3를 이용해 설치를 하자.

Anaconda3 설치 방법#

CentOS 7.7 에서 진행했다.

bash Anaconda3-2019.10-Linux-x86_64.sh로 설치를 시작한다.

conda init을 하지 않으면 venv 생성이 어렵다. 해주는 것이 좋다.

문제는 하게 되면 기본으로 anaconda3 환경을 사용하게 된다.
이것이 싫다면 conda config --set auto_activate_base false 해주자.

conda create -n rdkit_venv python=3.7을 이용해 rdkit 설치를 위한 가상환경을 만든다.

생성 후에 conda activate rdkit_venvrdkit_venv를 활성화 해주자.

conda install -c rdkit rdkit로 rdkit을 설치. # rdkit 채널은 python version 3.7 이 최대이다.
conda install -c conda-forge rdkit로 rdkit을 설치.

끝.

PS. anconda3/envs/rdkit_venv dir를 복사하여 그대로 사용할 수 있다. 다른 OS상에서는 약간의 문제가 발생한다.

SmilesMolSupplier#

rdkit.Chem.SmilesMolSupplier((object)arg1, (str)data[, (str)delimiter=' '[, (int)smilesColumn=0[, (int)nameColumn=1[, (bool)titleLine=True[, (bool)sanitize=True]]]]])

파일에 저장되어 있는 SMILES을 input으로 받아 mol type으로 저장하며, delimiter, smiles, name Column을 변수로 받는다.

변수?? 의미 다시 한번 찾아보기

>>> suppl = SmilesMolSupplier('in.smi')
>>> for mol in suppl:
...    mol.GetNumAtoms()

RWMol#

class rdkit.Chem.rdchem.RWMol((object)arg1, (Mol)arg2) → None :

Bases: rdkit.Chem.rdchem.Mol

The RW molecule class (read/write)

This class is a more-performant version of the EditableMolecule class in that it is a ‘live’ molecule and shares the interface from the Mol class. All changes are performed without the need to create a copy of the molecule using GetMol() (this is still available, however).

n.b. Eventually this class may become a direct replacement for EditableMol

Construct from a Mol

  • AddAtom((RWMol)arg1, (Atom)atom) → int :

    add an atom, returns the index of the newly added atom

  • AddBond((RWMol)arg1, (int)beginAtomIdx, (int)endAtomIdx[, (BondType)order=rdkit.Chem.rdchem.BondType.UNSPECIFIED]) → int :

    add a bond, returns the new number of bonds

  • GetMol((RWMol)arg1) → Mol :

    Returns a Mol (a normal molecule)

  • RemoveAtom((RWMol)arg1, (int)arg2) → None :

    Remove the specified atom from the molecule

  • RemoveBond((RWMol)arg1, (int)arg2, (int)arg3) → None :

    Remove the specified bond from the molecule

  • ReplaceAtom((RWMol)arg1, (int)index, (Atom)newAtom[, (bool)updateLabel=False[, (bool)preserveProps=False]]) → None :

    replaces the specified atom with the provided one If updateLabel is True, the new atom becomes the active atom If preserveProps is True preserve keep the existing props unless explicit set on the new atom

  • ReplaceBond((RWMol)arg1, (int)index, (Bond)newBond[, (bool)preserveProps=False]) → None :

    replaces the specified bond with the provided one. If preserveProps is True preserve keep the existing props unless explicit set on the new bond

  • SetStereoGroups((RWMol)arg1, (list)stereo_groups) → None :

    Set the stereo groups

MolToSmiles#

rdkit.Chem.rdmolfiles.MolToSmiles((Mol)mol[, (bool)isomericSmiles=True[, (bool)kekuleSmiles=False[, (int)rootedAtAtom=-1[, (bool)canonical=True[, (bool)allBondsExplicit=False[, (bool)allHsExplicit=False[, (bool)doRandom=False]]]]]]]) → str

Kekulize#

If you’d like to have the Kekule form of the SMILES, first Kekulize the molecule, then use the “kekuleSmiles” option:

>>> Chem.Kekulize(m)
>>> Chem.MolToSmiles(m, kekuleSmiles=True)
'C[C@H](O)C1=CC=CC=C1'

Rdkit Fingerprint 저장하기.#

To Binary#

mol = Chem.MolFromSmiles('<SMILES>')

fp = FingerprintMols.FingerprintMol(mol)

bfp = fp.ToBinary()

tmp = DataStructs.ExplicitBitVect(bfp)

fp == tmp  # Ture

Save FP#

with open('test0.list', 'wb') as f:
    for i in q:
        f.write(i+b',') # b'\n' 은 다음 FP에 영향을 주기 때문에 read 시 그 다음 FP가 변형 됨.

w = []
with open('test0.list', 'rb') as f:
    e = f.read()

e.split(b',')

configuration#

Disable log#

rdBase.DisableLog('rdApp.*')