Вот код, который я использую:
Вот код, который я использую:
Вот код, который я использую:
р>
Код: Выделить всё
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
Мобильная версия