That seems to be it - SWIG was burying what was what into a collection of Vect objects, so I got confused. It seems to work now.
On Thu, 29 Nov 2018 at 16:34, Paolo Tosco <paolo.tosco.m...@gmail.com> wrote: > Hi James, > > I think the problem here is that you are interpreting the index pairs in > each match returned by getSubstructMatches() as if they were the atom > indices that form a bond. Instead, each pair corresponds to a > (queryAtomIdx, molAtomIdx) pair, and has nothing to do with bonds: > > > http://rdkit.org/docs/cppapi/namespaceRDKit.html#a254b4d13317dfb319a09a8c2c8fbd435 > > Furthermore, your molecule only has implicit hydrogen atoms, so you > should not expect any bonds involving H unless you add explicit hydrogen > atoms. > > HTH, cheers > p. > > On 11/29/18 12:01, James Wallace wrote: > > I'm trying to use the Java wrapper to do a basic molecule > > fragmentation, greedily matching against anything that fits the SMARTS > > "[*;R]-;!@[*]" (effectively any regular bond that isn't part of a ring > > system) > > > > As a test case, I'm using a structure with a few obvious bonds that > > can be broken, namely (in SMILES) > > OC1CCC2CCC(OCCCCC3CCC(C4CCCC(Cl)C4Cl)CC3)CC2C1 . > > As the Java Wrapper uses some slightly unusual functions for the > > regular runtimes, I have included a toy example: > > > > Set<String> output = new HashSet<String>(); > > > > RWMol mol2 = RWMol.MolFromSmiles(input, 0, true); > > ROMol patt = RWMol.MolFromSmarts("[*;R]-;!@[*]"); > > > > Match_Vect_Vect matches = > mol2.getSubstructMatches(patt); > > > > for (int i = 0; i < matches.size(); i++) > > { > > Match_Vect match = matches.get(i); > > for (int j = 0; j < match.size(); j++) > > { > > //lazy cloning > > RWMol mol_to_manipulate = > > RWMol.MolFromSmiles(input, 0, true); > > Int_Pair pair = match.get(j); > > > > // Find bond and remove > > > > mol_to_manipulate.removeBond(pair.getFirst(), pair.getSecond()); > > > > System.out.println(mol_to_manipulate.MolToSmiles()); > > mol_to_manipulate.canonicalizeMol(); > > String[] temp = > > mol_to_manipulate.MolToSmiles().split("\\."); > > > > for (String tmp : temp) > > { > > if (tmp.length() > 1) > > { > > if (!tmp.equals(input)) > > { > > output.add(tmp); > > } > > } > > } > > } > > } > > > > return output; > > } > > > > When I run the selection on this molecule, I see the bond between atom > > 0 and 1 (the terminal OH) from both directions (0,1 and 1,0). However, > > as the iteration continues, the matches seem to no longer relate to > > meaningful bonds (0,7 , 1,8 , 0, 13 , 1,12 , 0,16 ,1,17 etc), and an > > attempt to remove them doesn't work as there is no bond to link them. > > Am I making some mistake in my handling of the query, or is there > > something going on with the matches (I'm making sure to load in a new > > molecule each time for the bond removal, but I'm struggling to see how > > the mapping follows). > > > > > > _______________________________________________ > > 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