Как изменить цвет выделения с помощью MolsToGridImage в RDKit с помощью Python?Python

Программы на Python
Ответить
Anonymous
 Как изменить цвет выделения с помощью MolsToGridImage в RDKit с помощью Python?

Сообщение Anonymous »

Инструмент RDKit для химинформатики включает в себя кулинарную книгу RDKit с примерами кода для ряда приложений. Один из них — выделить различия между двумя молекулами, используя fMCS для сопоставления сходств, а затем отмечая те остатки, которые не являются общими.
Этот пример работает хорошо, код находится здесь
Мне нужно изменить цвет выделения, но я не могу заставить его работать. Судя по приведенной выше ссылке на код, я уже пробовал:

Код: Выделить всё

from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem.Draw import rdMolDraw2D
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import rdFMCS
from rdkit.Chem.Draw import rdDepictor
rdDepictor.SetPreferCoordGen(True)
IPythonConsole.drawOptions.minFontSize=20
IPythonConsole.drawOptions.setHighlightColour=(0,1,0)
from collections import defaultdict
Это не имело никакого эффекта, изображение было нарисовано с подсветкой по умолчанию.

Код: Выделить всё

d2g = Draw.MolsToGridImage([mol1, mol2])
opts = d2g.drawOptions()
opts.setHighlightColour = (0,1,0)
d2g([mol1, mol2],highlightAtomLists=[target_atm1, target_atm2])
Это вызывает ошибку.

AttributeError: объект «Изображение» не имеет атрибута «drawOptions»
Потом я заставил его работать с этим:

Код: Выделить всё

from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem.Draw import rdMolDraw2D
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import rdFMCS
from rdkit.Chem.Draw import rdDepictor
rdDepictor.SetPreferCoordGen(True)
IPythonConsole.drawOptions.minFontSize=20
from collections import defaultdict

mol1 = Chem.MolFromSmiles('FC1=CC=C2C(=C1)C=NN2')
mol2 = Chem.MolFromSmiles('CCC1=C2NN=CC2=CC(Cl)=C1')

from PIL import Image
from io import BytesIO
def show_mol(d2d,mol,legend='',highlightAtoms=[]):
d2d.DrawMolecule(mol,legend=legend, highlightAtoms=highlightAtoms)
d2d.FinishDrawing()
bio = BytesIO(d2d.GetDrawingText())
return Image.open(bio)
def show_images(imgs,buffer=5):
height = 0
width = 0
for img in imgs:
height = max(height,img.height)
width += img.width
width += buffer*(len(imgs)-1)
res = Image.new("RGBA",(width,height))
x = 0
for img in imgs:
res.paste(img,(x,0))
x += img.width + buffer
return res

mcs = rdFMCS.FindMCS([mol1,mol2])
mcs_mol = Chem.MolFromSmarts(mcs.smartsString)
match1 = mol1.GetSubstructMatch(mcs_mol)
target_atm1 = []
for atom in mol1.GetAtoms():
if atom.GetIdx() not in match1:
target_atm1.append(atom.GetIdx())
match2 = mol2.GetSubstructMatch(mcs_mol)
target_atm2 = []
for atom in mol2.GetAtoms():
if atom.GetIdx() not in match2:
target_atm2.append(atom.GetIdx())

img1 = []
d2dx = Draw.MolDraw2DCairo(350,300)
doptsx = d2dx.drawOptions()
doptsx.setHighlightColour((1,0.84,0,.5))
img1.append(show_mol(d2dx,mol1,highlightAtoms=target_atm1))
d2dx = Draw.MolDraw2DCairo(350,300)
doptsx = d2dx.drawOptions()
doptsx.setHighlightColour((1,0.84,0,.5))
img1.append(show_mol(d2dx,mol2, highlightAtoms=target_atm2))
pic = show_images(img1)
pic.save('hallo.png')
pic
Проблемы заключаются в следующем: 1) мне нужен вывод в формате svg и 2) если молекулы имеют разный размер или используется альтернативная конфигурация SMILE, только MolsToGrid размещает их правильно рядом в пределах одних и тех же границ подпанели. Поэтому мне нужно использовать MolsToGrid для изображений качества научной публикации.
Я полноценный Python n00b, использую Jupyter lab на ПК с Windows 11.

Python 3.8.18 (по умолчанию, 11 сентября 2023 г., 13:39:12) [MSC v.1916 64 бит
(AMD64)] :: Anaconda, Inc. на win32


Подробнее здесь: https://stackoverflow.com/questions/790 ... ing-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»