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

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

Сообщение Anonymous »

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

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

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-ен НЕТ НАРУШЕНИЙ
  • моль3 = Chem.MolFromSmiles('CC1=C2CC[C@@]2([C@H]3CC(C[C@H]3C1)(C)C)C') #Delta(6)-протоиллуден VIOLATE< /strong>
  • mol4 = 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 НАРУШЕНИЕ
  • 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-Адамантандион нет
    нарушений
    < /p>
  • mol9 = Chem.MolFromSmiles('C1CC2CCC1=C2') #нарушать


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

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

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

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

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

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