import org.openscience.cdk.DefaultChemObjectBuilder import org.openscience.cdk.smiles.SmilesParser import org.openscience.cdk.smiles.smarts.SMARTSQueryTool import org.openscience.cdk.exception.CDKException import org.openscience.cdk.fingerprint.FingerprinterTool import org.openscience.cdk.fingerprint.ExtendedFingerprinter ExtendedFingerprinter fingerprinter = new ExtendedFingerprinter(); int i = 0; SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); def resultSMARTS = [:], resultFP = [:] def queries = ["c1ccccc1C(N)C(O)=O", "CC(C)OCC(C)=C","Nc1ccc(CC)cc1","O=c1[nH]c(=O)c2ccccc12","O=C4C=C3CCC2C1CCCC1CCC2C3CC4","CC2(C)CN1C(=O)C(N)C1S2","OC1CCCCOCC1"] def queryMols = queries.collect {sp.parseSmiles(it)} def queryFPs = queryMols.collect {fingerprinter.getFingerprint(it)} queries.each {String query-> resultSMARTS[query] = [] resultFP[query] = [] } new File("junk.smi").eachLine {String line -> queries.eachWithIndex {String query, int index -> SMARTSQueryTool sqt = new SMARTSQueryTool(query) try { def targetMol = sp.parseSmiles(line) if (sqt.matches(targetMol)) { resultSMARTS[query].add line } if (FingerprinterTool.isSubset(fingerprinter.getFingerprint(targetMol), queryFPs.get(index))) { resultFP[query].add line } } catch (CDKException e) { e.printStackTrace() } } println i++ } queries.each{String query-> println "Result for "+query println resultSMARTS[query].size() + " structure got by SMARTS" println(resultFP[query].size() + " structure got by fingerprint with" + (resultSMARTS[query] - resultFP[query]).size() + " missing, and " + (resultFP[query] - resultSMARTS[query]).size() + " extra") }