From 080f776d69c2bfb233de0021959acda04ad980ae Mon Sep 17 00:00:00 2001 From: ntk73 Date: Tue, 23 Feb 2016 15:29:44 +0200 Subject: [PATCH] Implemented handling of ring closures --- .../fingerprint/CircularFingerprinter.java | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/descriptor/fingerprint/src/main/java/org/openscience/cdk/fingerprint/CircularFingerprinter.java b/descriptor/fingerprint/src/main/java/org/openscience/cdk/fingerprint/CircularFingerprinter.java index 9c1bd56c317..921dfca8adc 100644 --- a/descriptor/fingerprint/src/main/java/org/openscience/cdk/fingerprint/CircularFingerprinter.java +++ b/descriptor/fingerprint/src/main/java/org/openscience/cdk/fingerprint/CircularFingerprinter.java @@ -545,20 +545,6 @@ public String getFPSmarts(FP fp, IAtomContainer molecule) if (n == 0) return null; - /* - //This is temporary code - if (n==1) - { - StringBuffer sb = new StringBuffer(); - sb.append(getAtomSmarts(molecule, fp.atoms[0])); - - //Handle "external" neighbors if needed - //TODO - - return sb.toString(); - } - */ - curFP = fp; curFPMolecule = molecule; @@ -575,7 +561,7 @@ public String getFPSmarts(FP fp, IAtomContainer molecule) traversedAtoms.add(node.atom); nodes.put(node.atom, node); - return nodeToString(fp.atoms[0]); + return nodeToString(fp.atoms[0]); //traverse recursively all atoms } @@ -621,8 +607,15 @@ String nodeToString(int atom) } else { - // Handle ring closure: adding indexes to both atoms - //TODO + // Handle ring closure: adding indexes to both atoms + + if (!ringClosures.contains(neighborBo)) { + ringClosures.add(neighborBo); + String ind = ((curIndex > 9) ? "%" : "") + curIndex; + addIndexToAtom(bondToString1(bondOrder[neighborBo]) + ind, atom); + addIndexToAtom(ind, neighborAt); + curIndex++; + } } } @@ -630,7 +623,8 @@ String nodeToString(int atom) sb.append(getAtomSmarts(curFPMolecule, atom)); // Add indexes - //TODO + if (atomIndexes.containsKey(atom)) + sb.append(atomIndexes.get(atom)); // Add branches if (branches.size() == 0) @@ -643,6 +637,17 @@ String nodeToString(int atom) return sb.toString(); } + void addIndexToAtom(String ind, int atom) + { + if (atomIndexes.containsKey(atom)) { + String old_ind = atomIndexes.get(atom); + atomIndexes.remove(atom); + atomIndexes.put(atom, old_ind + ind); + } + else + atomIndexes.put(atom, ind); + } + private String bondToString1(int boOrder) {