/** * If no isomorphism is found the result is empty vector * * @param container * @return */ public List<List<IAtom>> getAllIsomorphismMappings(IAtomContainer container) { if (query == null) return null; target = container; FlagStoreIsomorphismNode = true; isomorphismNodes.clear(); List<List<IAtom>> result = new ArrayList<List<IAtom>>(); if (query.getAtomCount() == 1) { SMARTSAtom qa = (SMARTSAtom) query.getAtom(0); for (int i = 0; i < target.getAtomCount(); i++) { if (qa.matches(target.getAtom(i))) { List<IAtom> v = new ArrayList<IAtom>(); v.add(target.getAtom(i)); result.add(v); } } return result; } TopLayer.setAtomTopLayers(target, TopLayer.TLProp); executeSequence(false); if (isomorphismFound) { // Getting the data from the all stored Nodes for (int k = 0; k < isomorphismNodes.size(); k++) { Node node = isomorphismNodes.get(k); List<IAtom> v = new ArrayList<IAtom>(); for (int i = 0; i < node.atoms.length; i++) v.add(node.atoms[i]); result.add(v); } } return result; }
/** * This function returns null if no isomorphism is found * * @param container * @return */ public List<IAtom> getIsomorphismMapping(IAtomContainer container) { if (query == null) return null; target = container; FlagStoreIsomorphismNode = true; isomorphismNodes.clear(); if (query.getAtomCount() == 1) { SMARTSAtom qa = (SMARTSAtom) query.getAtom(0); for (int i = 0; i < target.getAtomCount(); i++) { if (qa.matches(target.getAtom(i))) { List<IAtom> v = new ArrayList<IAtom>(); v.add(target.getAtom(i)); return (v); } } return null; } TopLayer.setAtomTopLayers(target, TopLayer.TLProp); executeSequence(true); if (isomorphismFound) { // Getting the data from the Node Node node = isomorphismNodes.get(0); List<IAtom> v = new ArrayList<IAtom>(); for (int i = 0; i < node.atoms.length; i++) v.add(node.atoms[i]); return (v); } else return (null); }
public void printDebugInfo() { System.out.println("Query Atoms Topological Layers"); for (int i = 0; i < query.getAtomCount(); i++) System.out.println("" + i + " " + query.getAtom(i).getProperty(TopLayer.TLProp).toString()); System.out.println(); System.out.println("Query Sequence"); for (int i = 0; i < sequence.size(); i++) System.out.println(sequence.get(i).toString(query)); }
boolean singleAtomIsomorphism() { SMARTSAtom qa = (SMARTSAtom) query.getAtom(0); isomorphismFound = false; for (int i = 0; i < target.getAtomCount(); i++) { if (qa.matches(target.getAtom(i))) { isomorphismFound = true; break; } } return (isomorphismFound); }
private boolean checkQuery(IQueryAtomContainer query) { if (!(query instanceof PharmacophoreQuery)) return false; HashMap<String, String> map = new HashMap<String, String>(); for (int i = 0; i < query.getAtomCount(); i++) { IQueryAtom atom = (IQueryAtom) query.getAtom(i); if (!(atom instanceof PharmacophoreQueryAtom)) return false; PharmacophoreQueryAtom pqatom = (PharmacophoreQueryAtom) atom; String label = pqatom.getSymbol(); String smarts = pqatom.getSmarts(); if (!map.containsKey(label)) map.put(label, smarts); else { if (!map.get(label).equals(smarts)) return false; } } return true; }
public boolean checkIsomorphismAtPosition(IAtomContainer container, int atomNum) { if ((atomNum < 0) || (atomNum >= container.getAtomCount())) return false; target = container; FlagStoreIsomorphismNode = false; isomorphismNodes.clear(); if (query.getAtomCount() == 1) { SMARTSAtom qa = (SMARTSAtom) query.getAtom(0); return qa.matches(target.getAtom(atomNum)); } TopLayer.setAtomTopLayers(target, TopLayer.TLProp); executeSequenceAtPos(atomNum); if (isomorphismFound) return true; return false; }
public List<Integer> getIsomorphismPositions(IAtomContainer container) { target = container; FlagStoreIsomorphismNode = false; isomorphismNodes.clear(); List<Integer> v = new ArrayList<Integer>(); if (query.getAtomCount() == 1) { SMARTSAtom qa = (SMARTSAtom) query.getAtom(0); for (int i = 0; i < target.getAtomCount(); i++) { if (qa.matches(target.getAtom(i))) v.add(new Integer(i)); } return (v); } TopLayer.setAtomTopLayers(target, TopLayer.TLProp); for (int i = 0; i < target.getAtomCount(); i++) { executeSequenceAtPos(i); if (isomorphismFound) v.add(new Integer(i)); } return (v); }