Skip to content

Instantly share code, notes, and snippets.

@johnmay
Created December 20, 2016 15:12
Show Gist options
  • Save johnmay/cd02b5e5d45dbd955a30f9e4f9d4bc39 to your computer and use it in GitHub Desktop.
Save johnmay/cd02b5e5d45dbd955a30f9e4f9d4bc39 to your computer and use it in GitHub Desktop.
Access part of a molecule
private static IAtomContainer getChains(IAtomContainer mol) {
IAtomContainer result = mol.getBuilder().newInstance(IAtomContainer.class);
for (IAtom atom : mol.atoms())
atom.setFlag(CDKConstants.VISITED, false);
for (IBond bond : mol.bonds()) {
if (!bond.isInRing()) {
IAtom beg = bond.getAtom(0);
IAtom end = bond.getAtom(1);
if (!beg.getFlag(CDKConstants.VISITED)) {
result.addAtom(beg);
beg.setFlag(CDKConstants.VISITED, true);
}
if (!end.getFlag(CDKConstants.VISITED)) {
result.addAtom(end);
end.setFlag(CDKConstants.VISITED, true);
}
result.addBond(bond);
}
}
return result;
}
public static void main(String[] args) throws CDKException {
String smi = "COC1=C(O)C=C2C=CC=C(C3=CC(COC(=O)C4=CC5=C(NC=C5)C=C4)=CC(=C3)C(O)=O)C2=C1";
IChemObjectBuilder bldr = SilentChemObjectBuilder.getInstance();
SmilesParser smipar = new SmilesParser(bldr);
SmilesGenerator smigen = new SmilesGenerator(SmiFlavor.Isomeric);
IAtomContainer mol = smipar.parseSmiles(smi);
Cycles.markRingAtomsAndBonds(mol);
MurckoFragmenter fragmenter = new MurckoFragmenter();
fragmenter.generateFragments(mol);
for (IAtomContainer frag : fragmenter.getFrameworksAsContainers()) {
String fragSmi = smigen.create(frag);
String chainSmi = smigen.create(getChains(frag));
System.err.println(fragSmi + " " + chainSmi);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment