Re: [Rdkit-discuss] Check If Atom Is in Two Small Rings
Awesome! Thank you all so much!!! Here is my implementation of the function for reference: def passed_NA2SR(mol): #no atom shared by two small rings rings = mol.GetRingInfo().AtomRings() small_rings = [] for ring in rings: if len(ring) < 5: small_rings.append(ring) small_ring_atoms = [] for small_ring in small_rings: for ring_atom in small_ring: if ring_atom in small_ring_atoms: return False else: small_ring_atoms.append(ring_atom) return True -- Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot___ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
Re: [Rdkit-discuss] Check If Atom Is in Two Small Rings
Peter, quite correct. To do that, you'll need to do operations on the rings themselves: >>> m = Chem.MolFromSmiles("C1CC12CCC2") >>> list(m.GetRingInfo().AtomRings()) [(0, 1, 2), (3, 4, 5, 2)] And set operations are probably your friend >>> m = Chem.MolFromSmiles("C1CCC12CCC2") >>> list(m.GetRingInfo().AtomRings()) [(0, 3, 2, 1), (4, 5, 6, 3)] # get all 4 membered rings >>> rings = [set(r) for r in m.GetRingInfo().AtomRings() if len(r) == 4] # from the first ring, see if there are any intersections >>> s = rings[0] >>> for r in rings[1:]: ... p = s.intersection(r) ... if p: print p ... set([3]) Cheers, Brian On Tue, Apr 11, 2017 at 4:19 PM, Peter S. Shenkin wrote: > But Brian's solution won't help Jonathan find atoms that are in two > three-membered or two four-membered rings, which I thought Jonathan also > wanted, based on the wording of the original query. > > -P. > > On Tue, Apr 11, 2017 at 4:12 PM, Curt Fischer > wrote: > >> Brian's solution is obviously better (shorter, uses less functions) than >> mine. (Although mine assumes that you want atoms that are part of >> _exactly_ two rings, not atoms that are part of _at least_ two rings as >> Brian's does. Probably Brian's solution is what you want but worth noting.) >> >> CF >> >> On Tue, Apr 11, 2017 at 1:03 PM, Brian Kelley >> wrote: >> >>> You are so close! >>> >>> >>> from rdkit import Chem >>> >>> >>> m = Chem.MolFromSmiles("C1CC12CCC2") >>> >>> >>> for atom in m.GetAtoms(): >>> >>> ... if atom.IsInRingSize(3) and atom.IsInRingSize(4): print >>> atom.GetIdx() >>> >>> ... >>> >>> 2 >>> >>> >>> >>> >>> Cheers, >>> Brian >>> >>> On Tue, Apr 11, 2017 at 1:38 PM, Jonathan Saboury >>> wrote: >>> Hello All, I'm trying to make a function to check if a mol has an atom that is part of two small rings (3 or 4 atoms). Using GetRingInfo()/NumAtomRings() I can find out how many ring systems each atom is in, but not the details of the rings. atom.IsInRingSize(size) returns a bool so I couldn't use that. I'm using the python api. Any suggestions? Thanks! - Jonathan -- Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot ___ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss >>> >>> >>> -- >>> Check out the vibrant tech community on one of the world's most >>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>> ___ >>> Rdkit-discuss mailing list >>> Rdkit-discuss@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss >>> >>> >> >> >> -- >> Check out the vibrant tech community on one of the world's most >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >> ___ >> Rdkit-discuss mailing list >> Rdkit-discuss@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss >> >> > -- Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot___ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
Re: [Rdkit-discuss] Check If Atom Is in Two Small Rings
But Brian's solution won't help Jonathan find atoms that are in two three-membered or two four-membered rings, which I thought Jonathan also wanted, based on the wording of the original query. -P. On Tue, Apr 11, 2017 at 4:12 PM, Curt Fischer wrote: > Brian's solution is obviously better (shorter, uses less functions) than > mine. (Although mine assumes that you want atoms that are part of > _exactly_ two rings, not atoms that are part of _at least_ two rings as > Brian's does. Probably Brian's solution is what you want but worth noting.) > > CF > > On Tue, Apr 11, 2017 at 1:03 PM, Brian Kelley > wrote: > >> You are so close! >> >> >>> from rdkit import Chem >> >> >>> m = Chem.MolFromSmiles("C1CC12CCC2") >> >> >>> for atom in m.GetAtoms(): >> >> ... if atom.IsInRingSize(3) and atom.IsInRingSize(4): print >> atom.GetIdx() >> >> ... >> >> 2 >> >> >>> >> >> Cheers, >> Brian >> >> On Tue, Apr 11, 2017 at 1:38 PM, Jonathan Saboury >> wrote: >> >>> Hello All, >>> >>> I'm trying to make a function to check if a mol has an atom that is part >>> of two small rings (3 or 4 atoms). Using GetRingInfo()/NumAtomRings() I can >>> find out how many ring systems each atom is in, but not the details of the >>> rings. atom.IsInRingSize(size) returns a bool so I couldn't use that. I'm >>> using the python api. >>> >>> Any suggestions? Thanks! >>> >>> - Jonathan >>> >>> >>> -- >>> Check out the vibrant tech community on one of the world's most >>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>> ___ >>> Rdkit-discuss mailing list >>> Rdkit-discuss@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss >>> >>> >> >> >> -- >> Check out the vibrant tech community on one of the world's most >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >> ___ >> Rdkit-discuss mailing list >> Rdkit-discuss@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss >> >> > > > -- > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > ___ > Rdkit-discuss mailing list > Rdkit-discuss@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/rdkit-discuss > > -- Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot___ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
Re: [Rdkit-discuss] Check If Atom Is in Two Small Rings
Brian's solution is obviously better (shorter, uses less functions) than mine. (Although mine assumes that you want atoms that are part of _exactly_ two rings, not atoms that are part of _at least_ two rings as Brian's does. Probably Brian's solution is what you want but worth noting.) CF On Tue, Apr 11, 2017 at 1:03 PM, Brian Kelley wrote: > You are so close! > > >>> from rdkit import Chem > > >>> m = Chem.MolFromSmiles("C1CC12CCC2") > > >>> for atom in m.GetAtoms(): > > ... if atom.IsInRingSize(3) and atom.IsInRingSize(4): print atom.GetIdx() > > ... > > 2 > > >>> > > Cheers, > Brian > > On Tue, Apr 11, 2017 at 1:38 PM, Jonathan Saboury > wrote: > >> Hello All, >> >> I'm trying to make a function to check if a mol has an atom that is part >> of two small rings (3 or 4 atoms). Using GetRingInfo()/NumAtomRings() I can >> find out how many ring systems each atom is in, but not the details of the >> rings. atom.IsInRingSize(size) returns a bool so I couldn't use that. I'm >> using the python api. >> >> Any suggestions? Thanks! >> >> - Jonathan >> >> >> -- >> Check out the vibrant tech community on one of the world's most >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >> ___ >> Rdkit-discuss mailing list >> Rdkit-discuss@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss >> >> > > > -- > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > ___ > Rdkit-discuss mailing list > Rdkit-discuss@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/rdkit-discuss > > -- Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot___ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
Re: [Rdkit-discuss] Check If Atom Is in Two Small Rings
You are so close! >>> from rdkit import Chem >>> m = Chem.MolFromSmiles("C1CC12CCC2") >>> for atom in m.GetAtoms(): ... if atom.IsInRingSize(3) and atom.IsInRingSize(4): print atom.GetIdx() ... 2 >>> Cheers, Brian On Tue, Apr 11, 2017 at 1:38 PM, Jonathan Saboury wrote: > Hello All, > > I'm trying to make a function to check if a mol has an atom that is part > of two small rings (3 or 4 atoms). Using GetRingInfo()/NumAtomRings() I can > find out how many ring systems each atom is in, but not the details of the > rings. atom.IsInRingSize(size) returns a bool so I couldn't use that. I'm > using the python api. > > Any suggestions? Thanks! > > - Jonathan > > > -- > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > ___ > Rdkit-discuss mailing list > Rdkit-discuss@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/rdkit-discuss > > -- Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot___ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss