Preskoči na sadržaj

Python modul RDKit

RDKit je otvorena programska biblioteka za računalnu kemiju. Omogućava vizualizaciju molekula, izračun molekulskih opisnika (engl. molecular descriptors), modeliranje i manipulaciju kemijskim reakcijama te mnoge druge funkcionalnosti. U nastavku ćemo djelomično pratiti odjeljak Getting Started with the RDKit in Python, koji je dio službene dokumentacije RDKita i može poslužiti kao dopuna ovim materijalima.

Za razumijevanje zadataka potrebno je osnovno poznavanje programskog jezika Python i pojmova iz kemoinformatike. Zadatke ćemo rješavati unutar okruženja Google Colab, koje nudi mogućnost pokretanja Jupyterovih bilježnica.

U Google Colabu, Python kod se unosi kroz Python ćelije, a u tekstualnim ćelijama primjenjuje se jezik Markdown. O jeziku Markdown već smo raspravljali u temi Suradnički uređivač teksta HackMD i jezik Markdown.

Naredbe u Linux terminalu zapisuju se u bilježnicu dodavanjem znaka ! ispred same naredbe. Na ovaj način, možemo instalirati RDKit korištenjem naredbe:

!pip install rdkit

U programskom jeziku Python, napisat ćemo programsku skriptu za crtanje spojeva koristeći njihov zapis u formatu SMILES. U nastavku je isječak programskog koda koji koristi module Chem i Draw za crtanje molekule:

from rdkit import Chem
from rdkit.Chem import Draw

molekula = Chem.MolFromSmiles('CCCC')
Draw.MolToImage(molekula)

Zadatak

U Python programskom jeziku nacrtajte sljedeće kemijske spojeve: aceton, benzen i aspirin.

Želimo li nacrtati dvije molekule jednu do druge, morat ćemo kreirati SMILES listu u kojoj ćemo pohraniti SMILES zapis molekula. Zatim ćemo pomoću petlje for kreirati slike molekula. To možemo postići na sljedeći način:

from rdkit import Chem
from rdkit.Chem import Draw

smiles_list = ['CC(=O)C', 'C1=CC=CC=C1']
m_list = []

for smiles in smiles_list:
  m = Chem.MolFromSmiles(smiles)
  m_list.append(m)

Draw.MolsToGridImage(m_list, molsPerRow=2)

Zadatak

  1. Nacrtajte četiri aminokiseline glicin, fenilalanin, histidin i cistein tako da se nalaze na istoj slici poredane jedna ispod druge.
  2. Prilagodite prethodni zadatak tako da imate dva retka, svaki s dvije slike molekula.

Ispis SMILES zapisa

Tip objekta pohranjenog u varijabli molekula možemo provjeriti funkcijom type().

from rdkit import Chem
from rdkit.Chem import Draw

molekula = Chem.MolFromSmiles('CCCC')
type(molekula)
rdkit.Chem.rdchem.Mol

rdkit.Chem.rdchem.Mol je klasa koja predstavlja molekulu u RDKitu. Ova klasa ima različite metode i atribute koji omogućuju pristup raznim informacijama o molekuli, uključujući atomske podatke, veze između atoma i druge relevantne podatke o molekularnoj strukturi.

Želimo li pretvoriti objekt molekula u znakovni niz u formatu SMILES, napisat ćemo sljedeće:

from rdkit import Chem
from rdkit.Chem import Draw

molekula = Chem.MolFromSmiles('CCCC')
smiles = Chem.MolToSmiles(molekula)

Ako provjerimo kojeg je tipa objekt smiles vidjet ćemo da je u zapisu <class 'str'>, dakle niz znakova. Ispišimo na ekran objekt smiles da dobijemo SMILES zapis molekule:

from rdkit import Chem
from rdkit.Chem import Draw

molekula = Chem.MolFromSmiles('CCCC')
smiles = Chem.MolToSmiles(molekula)
print(smiles)
CCCC

Molekulski opisnici

Molekulski opisnici su kvantitativne reprezentacije određenih karakteristika molekula. Omogućavaju konverziju kompleksnih molekularnih struktura u numeričke podatke, čime se olakšava analiza i modeliranje.

Iz modula Chem ćemo uvesti pripadni modul Descriptors za pristup molekulskim opisnicima. Primjer ispod koristi nekoliko različitih opisnika:

  • MolWt izračunava molarnu masu (engl. molecular weight),
  • HeavyAtomCount broji atome (oni koji nisu vodik) u molekuli,
  • NumValenceElectrons računa ukupan broj valentnih elektrona u molekuli.
from rdkit import Chem
from rdkit.Chem import Descriptors

# Definira molekulu iz SMILES zapisa
molekula = Chem.MolFromSmiles('CCCC')

# Izračun i ispis opisnika
molarna_masa = Descriptors.MolWt(molekula)
broj_atoma_u_molekuli = Descriptors.HeavyAtomCount(molekula)
valentni_elektroni = Descriptors.NumValenceElectrons(molekula)

print("Molarna masa:", molarna_masa, "g/mol")
print("Broj atoma u molekuli:", broj_atoma_u_molekuli)
print("Broj valentnih elektrona:", valentni_elektroni)

Zadatak

Nacrtajte mravlju kiselinu (metanska kiselina) te ispišite na ekran molarnu masu i broj atoma u molekuli te broj valentnih elektrona.

Pohrana slikovne datoteke

Slike generiranih molekula mogu se pohraniti na dva načina:

from rdkit import Chem
from rdkit.Chem import Draw

smiles = 'C(=O)O'
molekula = Chem.MolFromSmiles(smiles)
Draw.MolToFile(molekula, "slika1.png", size=(500,500))
from rdkit import Chem
from rdkit.Chem import Draw

smiles = 'C(=O)O'
molekula = Chem.MolFromSmiles(smiles)
slika = Draw.MolToImage(molekula)
slika.save("slika2.png", size=(500,500))

Zadatak

Nacrtajte molekulu djelatne tvari lijeka naziva diklofenak. Pronađite o kojoj je djelatnoj tvari riječ i njezin popularni naziv. Sliku molekule, veličine 600x400 točaka, pohranite tako da se na samoj slici ispod nacrtane molekule nalazi i naziv lijeka. Koristite argument legend za ispis naziva lijeka ispod slike.

Author: Matea Turalija