Hi Andreas, I don't have a good SMARTS pattern available for this but here is a function that should return bridgehead idx and not include non bridgehead fused ring atoms:
``` def return_bridgeheads_idx(mol): bh_list=[] intersections=[] sssr_idx = [set(x) for x in list(Chem.GetSymmSSSR(mol))] for i,ring1 in enumerate(sssr_idx): for j,ring2 in enumerate(sssr_idx): if i>j: intersections+=[ring1.intersection(ring2)] for iidx in intersections: if len(iidx)>2: #condition for bridgehead for idx in iidx: neighbors = [a.GetIdx() for a in mol.GetAtomWithIdx(idx).GetNeighbors()] bh_list+=[idx for nidx in neighbors if nidx not in iidx] return tuple(set(bh_list)) ``` Here are 6 test molecules: ``` mol1 = Chem.MolFromSmiles("C1CC2CCC1C2") mol2 = Chem.MolFromSmiles("C1CC2C1C1CCC2C1") mol3 = Chem.MolFromSmiles("N1(CC2)CCC2CC1") mol4 = Chem.MolFromSmiles("C1CCC12CCCCC2") mol5 = Chem.MolFromSmiles("C1CC2C1CCCCC2") mol6 = Chem.MolFromSmiles("C1CCC(C(CCC3)C23)C12") for mol in [mol1,mol2,mol3,mol4,mol5,mol6]: print(return_bridgeheads_idx(mol)) ``` giving the expected answer: (2, 5) (4, 7) (0, 5) () () () hope this is helpful! best wishes wim On Sat, Dec 3, 2022 at 8:34 AM Andreas Luttens <andreas.lutt...@gmail.com> wrote: > Dear users, > > I am trying to identify bridgehead atoms in multi-looped ring systems. The > issue I have is that it can be sometimes difficult to distinguish these > atoms from ring-fusion atoms. The pattern I used (see below) looks for > atoms that are part of three rings but cannot be bonded to an atom that > also fits this description, in order to avoid ring-fusion atoms. The code > works, except for cases where bridgehead atoms are bonded to a ring-fusion > atom. > > *PASS:* > pattern = Chem.MolFromSmarts("[$([x3]);!$([x3][x3])]") > rdkit_mol = Chem.MolFromSmiles("C1CC2CCC1C2") > print(rdkit_mol.GetSubstructMatches(pattern)) > >>>((2,),(5,)) > > *FAIL:* > pattern = Chem.MolFromSmarts("[$([x3]);!$([x3][x3])]") > rdkit_mol = Chem.MolFromSmiles("C1CC2C1C1CCC2C1") > print(rdkit_mol.GetSubstructMatches(pattern)) > >>>() > > Any hint on what alternative pattern I could use to isolate true > bridgeheads would be greatly appreciated. Maybe other strategies are more > suitable to find these atoms? > > Thanks in advance! > > Best regards, > Andreas > _______________________________________________ > Rdkit-discuss mailing list > Rdkit-discuss@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/rdkit-discuss >
_______________________________________________ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss