Beispiel #1
0
  /**
   * 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;
  }
Beispiel #2
0
  /**
   * 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);
  }
Beispiel #3
0
  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));
  }
Beispiel #4
0
 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);
 }
Beispiel #5
0
  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;
  }
Beispiel #6
0
  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;
  }
Beispiel #7
0
  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);
  }