Бывают ли случаи, когда мой код RDKit для выявления атомов-плацдармов и нарушений правила Бредта может дать сбой?Python

Программы на Python
Ответить
Anonymous
 Бывают ли случаи, когда мой код RDKit для выявления атомов-плацдармов и нарушений правила Бредта может дать сбой?

Сообщение Anonymous »

Я использую RDKit для идентификации атомов-мостиков (Атом углерода-мостика — это атом углерода, который является общим как минимум для двух колец. Атом водорода, присоединенный к углероду-мостику, можно назвать в качестве плацдарма водорода) в бициклических соединениях и проверьте наличие нарушений правила Бредта. Мой код работает в большинстве случаев, которые я тестировал, но я хочу понять, есть ли определенные крайние случаи или сценарии, в которых мой подход может потерпеть неудачу.
Вот код, который я использую:< /p>

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

from rdkit import Chem
def check_bredts_rule(molecule):
ring_info = molecule.GetRingInfo()
atom_rings = ring_info.AtomRings()

atom_ring_counts = {atom.GetIdx(): 0 for atom in molecule.GetAtoms()}
for ring in atom_rings:
for atom_idx in ring:
atom_ring_counts[atom_idx] += 1

bridgehead_atoms = [atom_idx for atom_idx, count in atom_ring_counts.items() if count > 1]

for atom_idx in bridgehead_atoms:
atom = molecule.GetAtomWithIdx(atom_idx)
is_part_of_alkene = any(
bond.GetBondType() == Chem.BondType.DOUBLE
and bond.GetBeginAtomIdx() == atom_idx
and bond.GetEndAtom().GetSymbol() == "C"
for bond in atom.GetBonds()
)
if not is_part_of_alkene:
continue

ring_sizes = [len(ring) for ring in atom_rings if atom_idx in ring]

if all(size < 8 for size in ring_sizes):
return 'violate'

return 'no violate'
mol1 = Chem.MolFromSmiles('C1C[C@H]2C[C@@H]1C=C2') #Бицикло[2.2.1]гепт-2-ен НАРУШЕНИЯ НЕТ
mol2 = Chem.MolFromSmiles('C1CC2C1CC=C2') #Бицикло[3.2.0]гепт-2-ен NO НАРУШЕНИЕ
mol3 = Chem.MolFromSmiles('CC1=C2CC[C@@]2([C@H]3CC(C[C@H]3C1)(C)C)C') #Delta(6) -протоиллуден НАРУШИТЬ
моль4 = Chem.MolFromSmiles('CC1=C2C[C@](C[C@H]2CC3=COC(=C13)C(=O)O)(C)CO') #Цугиколин A НАРУШАЕТ
mol5 = Chem.MolFromSmiles('C[C@@H]1CC[C@@H]2CC3=C(CC[C@]13C2(C)C)C') #Cyperene VIOLATE
mol6 = Chem.MolFromSmiles( 'O=C1C2CCCCC1CC2') #Бицикло(4.2.1)нонан-9-он Нарушений нет
mol7 = Chem.MolFromSmiles('O=C1CCC2CC1CCC2=O') # Бицикло(3.3.1)нонан-2,6-дион без нарушений
mol8 = Chem.MolFromSmiles('O=C1C2CC3CC1CC(C2)C3=O') #2,6-Адамантандион нарушений нет
mol9= Chem.MolFromSmiles('C1CC2CCC1=C2') #violate

Подробнее здесь: https://stackoverflow.com/questions/792 ... and-bredts
Ответить

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

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

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

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

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