/** * Returns Maximum Common Fragment between Query and Target as SMILES * * @return * @throws CloneNotSupportedException * @throws CDKException */ public synchronized String getCommonFragmentAsSMILES() throws CloneNotSupportedException, CDKException { SmilesGenerator aromatic = new SmilesGenerator(SmiFlavor.Unique | SmiFlavor.AtomAtomMap); return aromatic.create(getCommonFragment()); }
/** * {@inheritDoc} */ @Override public synchronized double getTanimotoSimilarity() { int decimalPlaces = 4; double rAtomCount; double pAtomCount; double tanimotoAtom = 0.0; if (getMappingCount() > 0) { AtomAtomMapping firstAtomMCS = getMCSList().iterator().next(); if (!firstAtomMCS.isEmpty()) { rAtomCount = (double) this.getMCSList().iterator().next().getQuery().getAtomCount(); pAtomCount = (double) this.getMCSList().iterator().next().getTarget().getAtomCount(); double matchCount = (double) firstAtomMCS.getCount(); tanimotoAtom = (matchCount) / (rAtomCount + pAtomCount - matchCount); BigDecimal tan = new BigDecimal(tanimotoAtom); tan = tan.setScale(decimalPlaces, BigDecimal.ROUND_HALF_UP); tanimotoAtom = tan.doubleValue(); } } return tanimotoAtom; }
@Override public int hashCode() { int hash = 7; hash = 67 * hash + (this.getQuery() != null ? this.getQuery().hashCode() : 0); hash = 67 * hash + (this.getTarget() != null ? this.getTarget().hashCode() : 0); hash = 67 * hash + (this.mapping != null ? this.getMappingsByAtoms().hashCode() : 0); hash = 67 * hash + (this.mappingIndex != null ? this.getMappingsByIndex().hashCode() : 0); return hash; }
private static Map<Integer, Integer> getIndexMapping(AtomAtomMapping aam) { return aam.isEmpty() ? new TreeMap<>() : aam.getMappingsByIndex(); } }
private static Map<Integer, Integer> getIndexMapping(AtomAtomMapping aam) { Map<IAtom, IAtom> mappings = aam.getMappingsByAtoms(); Map<Integer, Integer> mapping = new TreeMap<>(); mappings.keySet().stream().forEach((keys) -> { mapping.put(aam.getQueryIndex(keys), aam.getTargetIndex(mappings.get(keys))); }); return mapping; } }
private synchronized void setVFMappings(List<AtomAtomMapping> mappingsVF2) { int counter = 0; for (AtomAtomMapping solution : mappingsVF2) { AtomAtomMapping atomatomMapping = new AtomAtomMapping(getQuery(), getTarget()); if (solution.getCount() > vfMappingSize) { this.vfMappingSize = solution.getCount(); counter = 0; } for (Map.Entry<IAtom, IAtom> mapping : solution.getMappingsByAtoms().entrySet()) { IAtom qAtom; IAtom tAtom; qAtom = mapping.getKey(); tAtom = mapping.getValue(); if (qAtom != null && tAtom != null) { atomatomMapping.put(qAtom, tAtom); } else { try { throw new CDKException("Atom index pointing to NULL"); } catch (CDKException ex) { Logger.error(Level.SEVERE, null, ex); } } } if (!atomatomMapping.isEmpty() && !hasMap(atomatomMapping, getMCSList()) && atomatomMapping.getCount() == vfMappingSize) { getMCSList().add(counter, atomatomMapping); counter++; } } }
chosen.stream().map((mapping) -> { Map<Integer, Integer> map = new TreeMap<>(); map.putAll(mapping.getMappingsByIndex()); return map; }).forEach((map) -> { if (atomMCSMap.getCount() > solutionSize) { solutionSize = atomMCSMap.getCount(); allAtomMCS.clear(); counter = 0; if (!atomMCSMap.isEmpty() && atomMCSMap.getCount() == solutionSize) { allAtomMCS.add(counter, atomMCSMap); counter++; if (!allLocalAtomAtomMapping.isEmpty()) { for (AtomAtomMapping atomMCSMap : allLocalAtomAtomMapping) { if (atomMCSMap.getCount() > solSize) { solSize = atomMCSMap.getCount(); allAtomMCS.clear(); counter = 0; if (!atomMCSMap.isEmpty() && atomMCSMap.getCount() == solSize) { allAtomMCS.add(counter, atomMCSMap); counter++;
private synchronized void setAllAtomMapping() { int counter = 0; for (Map<Integer, Integer> final_solution : allMCS) { AtomAtomMapping atomMappings = new AtomAtomMapping(source, target); for (Integer indexI : final_solution.keySet()) { IAtom sourceAtom = source.getAtom(indexI); IAtom targetAtom = target.getAtom(final_solution.get(indexI)); if (sourceAtom != null && targetAtom != null) { atomMappings.put(sourceAtom, targetAtom); } } if (!allAtomMCS.contains(atomMappings)) { if (!atomMappings.isEmpty()) { allAtomMCS.add(counter, atomMappings); counter += 1; } } } }
IAtomContainer ac = getQuery().clone(); List<IAtom> uniqueAtoms = Collections.synchronizedList(new ArrayList<>()); for (IAtom atom : getQuery().atoms()) { if (!mapping.containsKey(atom)) { uniqueAtoms.add(ac.getAtom(getQueryIndex(atom))); IAtom atom1 = mapping.get(bondQ.getBegin()); IAtom atom2 = mapping.get(bondQ.getEnd()); IBond bondT = getTarget().getBond(atom1, atom2); if (bondT == null) { removeUncommonBonds.add(bondQ);
try { IReaction reaction = DefaultChemObjectBuilder.getInstance().newInstance(IReaction.class); reaction.addReactant(getQuery().clone(), 1.0); reaction.addProduct(getTarget().clone(), 1.0); IAtom refAtom = getQuery().getAtom(ac.indexOf(a)); if (mapping.containsKey(refAtom)) { a.setProperty(ATOM_ATOM_MAPPING, counter); a.setFlag(MAPPED, true); IAtom mappedAtom = mapping.get(refAtom); int mappedAtomIndex = getTarget().indexOf(mappedAtom); IAtom b = reaction.getProducts().getAtomContainer(0).getAtom(mappedAtomIndex); b.setProperty(ATOM_ATOM_MAPPING, counter); int keyIndex = getQuery().indexOf(firstAtom) + 1; int valueIndex = getTarget().indexOf(mapping.get(firstAtom)) + 1; s.append(keyIndex).append(":").append(valueIndex).append("|"); }); s.append(", MCS: ").append(getCommonFragmentAsSMILES()); } catch (CDKException ex) { Logger.getLogger(AtomAtomMapping.class.getName()).log(Level.SEVERE, null, ex);
private synchronized Map<IBond, IBond> makeBondMapsOfAtomMaps(IAtomContainer ac1, IAtomContainer ac2, AtomAtomMapping mappings) { Map<IBond, IBond> bondbondMappingMap = new HashMap<>(); mappings.getMappingsByAtoms().entrySet().forEach((Map.Entry<IAtom, IAtom> map1) -> { mappings.getMappingsByAtoms().entrySet().stream().filter((map2) -> (map1.getKey() != map2.getKey())).forEachOrdered((map2) -> { IBond bond1 = ac1.getBond(map1.getKey(), map2.getKey()); IBond bond2 = ac2.getBond(map1.getValue(), map2.getValue()); if (bond1 != null && bond2 != null && !bondbondMappingMap.containsKey(bond1)) { bondbondMappingMap.put(bond1, bond2); } }); }); // System.out.println("Mol Map size:" + bondbondMappingMap.size()); return bondbondMappingMap; }
/** * Returns common mapped fragment in the target molecule. * * @return common mapped fragment in the target molecule * @throws CloneNotSupportedException */ public synchronized IAtomContainer getMapCommonFragmentOnTarget() throws CloneNotSupportedException { IAtomContainer ac = getTarget().clone(); List<IAtom> uniqueAtoms = Collections.synchronizedList(new ArrayList<>()); for (IAtom atom : getTarget().atoms()) { if (!mapping.containsValue(atom)) { uniqueAtoms.add(ac.getAtom(getTargetIndex(atom))); } } uniqueAtoms.stream().forEach((atom) -> { ac.removeAtom(atom); }); return ac; }
synchronized void printMatch(BaseMapping isomorphism) { int overlap = isomorphism.getFirstAtomMapping().isEmpty() ? 0 : isomorphism.getFirstAtomMapping().getCount(); try { System.out.println("Q: " + isomorphism.getQuery().getID() + " T: " + isomorphism.getTarget().getID() + " atoms: " + isomorphism.getQuery().getAtomCount() + " atoms: " + isomorphism.getTarget().getAtomCount() + " overlaps: " + overlap + " mcs " + isomorphism.getFirstAtomMapping().getCommonFragmentAsSMILES()); } catch (CloneNotSupportedException | CDKException ex) { LOGGER.error(Level.SEVERE, "Print MCS ", ex.getMessage()); } }
/** * {@inheritDoc} * */ private boolean findSubgraph() { if (DEBUG) { System.out.println("=======findSubgraph======="); } if (DEBUG) { System.out.println("Calling searchVFCDKMapping"); } boolean subgraph = searchVFCDKMapping(); // System.out.println("mappings " + subgraph); if (!allAtomMCSCopy.isEmpty() && allAtomMCSCopy.iterator().next().getCount() == source.getAtomCount()) { allAtomMCS.addAll(allAtomMCSCopy); allMCS.addAll(allMCSCopy); } return !allAtomMCS.isEmpty() && allAtomMCS.iterator().next().getCount() == source.getAtomCount(); }
synchronized MCSSolution copyOldSolutionToNew(int queryPosition, int targetPosition, IAtomContainer compound1, IAtomContainer compound2, MCSSolution oldSolution) { AtomAtomMapping atomAtomMapping = oldSolution.getAtomAtomMapping(); Map<Integer, Integer> mappingsByIndex = atomAtomMapping.getMappingsByIndex(); AtomAtomMapping atomAtomMappingNew = new AtomAtomMapping(compound1, compound2); mappingsByIndex.entrySet().forEach((m) -> { atomAtomMappingNew.put(compound1.getAtom(m.getKey()), compound2.getAtom(m.getValue())); }); MCSSolution mcsSolution = new MCSSolution(queryPosition, targetPosition, compound1, compound2, atomAtomMappingNew); mcsSolution.setEnergy(oldSolution.getEnergy()); mcsSolution.setFragmentSize(oldSolution.getFragmentSize()); mcsSolution.setStereoScore(oldSolution.getStereoScore()); return mcsSolution; }
/** * Returns atom index of the given atom in the query molecule * * @param atom * @return */ public synchronized int getQueryIndex(IAtom atom) { return getQuery().getAtomNumber(atom); }
/** * Returns common mapped fragment in the query molecule. * * @return common mapped fragment in the query molecule * @throws CloneNotSupportedException */ public synchronized IAtomContainer getMapCommonFragmentOnQuery() throws CloneNotSupportedException { IAtomContainer ac = getQuery().clone(); List<IAtom> uniqueAtoms = Collections.synchronizedList(new ArrayList<IAtom>()); for (IAtom atom : getQuery().atoms()) { if (!mapping.containsKey(atom)) { uniqueAtoms.add(ac.getAtom(getQueryIndex(atom))); } } uniqueAtoms.stream().forEach((atom) -> { ac.removeAtomAndConnectedElectronContainers(atom); }); return ac; }
int final_solution_size = final_solution.getCount(); out.println("Final mapping Nr. " + ++count_final_sol + " Size:" + final_solution_size); final_solution.getMappingsByAtoms().entrySet().forEach((mapping) -> { IAtom eAtom = mapping.getKey(); IAtom pAtom = mapping.getValue();
jTextArea1.append("Number of overlaps = " + comparison.getFirstAtomMapping().getCount() + NEW_LINE); jTextArea1.append("Overlap = " + comparison.getFirstAtomMapping().getCommonFragmentAsSMILES() + NEW_LINE); jTextArea1.setCaretPosition(jTextArea1.getDocument().getLength()); JLabel l3 = new JLabel("Overlap: " + comparison.getFirstAtomMapping().getCommonFragmentAsSMILES(), SwingConstants.CENTER); panels.add(jPanel, gbc); if (comparison.getFirstAtomMapping().getCount() > 0) { panels.add(new JLabel(new ImageIcon(generateImage(queryMolecule, targetMolecule, comparison)))); } else {