Я пытаюсь использовать функцию replaseSubstructs () для объединения двух улыбок, заменив атом углерода (C) в первой молукуле второй молекулой. Однако, независимо от того, какой C_OPTIONS я выбираю, RDKIT всегда заменяет первый или последний атом C, и индексы атомов также, кажется, также перетасовывают.from rdkit import Chem
def combine_smile(smile1, smile2, c_options=1):
mol1 = Chem.MolFromSmiles(smile1) mol2 = Chem.MolFromSmiles(smile2)
if mol1 is None or mol2 is None:
raise ValueError("One or both SMILES strings are invalid.")
index_mol1 = mol_with_atom_index(mol1)
combined_mol = Chem.ReplaceSubstructs(index_mol1, Chem.MolFromSmarts("[CH3]"), mol2)[c_options]
combined_smiles = Chem.MolToSmiles(combined_mol)
print(combined_smiles)
def mol_with_atom_index( mol ):
atoms = mol.GetNumAtoms() for idx in range( atoms ): mol.GetAtomWithIdx( idx ).SetProp( 'molAtomMapNumber', str( mol.GetAtomWithIdx( idx ).GetIdx() ) )
return mol
if name == "main":
mol1_smiles = "CC(C)(C)Cl"
mol2_smiles = "CN(C)C"
combine_smile(mol1_smiles, mol2_smiles)
< /code>
output: < /p>
CN(C)C[C:1]([CH3:2])([CH3:3])[Cl:4] # for c_options=0
CN(C)C[C:1]([CH3:0])([CH3:3])[Cl:4] # for c_options=1
CN(C)C[C:1]([CH3:0])([CH3:2])[Cl:4] # for c_options=2
< /code>
желаемый вывод: < /p>
CN(C)C[C:1]([CH3:2])([CH3:3])[Cl:4] # for c_options=0
[CH3:0][C:1](CN(C)C)([CH3:3])[Cl:4] # for c_options=1
[CH3:0][C:1]([CH3:2])(CN(C)C)[Cl:4] # for c_options=2
Подробнее здесь: https://stackoverflow.com/questions/797 ... ast-c-atom
Почему заменяет subsubstructs () всегда заменяет последний атом C? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Java `
.replace` не заменяет разрывы строк, а ` .replaceAll` заменяет. Почему? [закрыто]
Anonymous » » в форуме JAVA - 0 Ответы
- 59 Просмотры
-
Последнее сообщение Anonymous
-