if( minmc > 0.1 )
if( minmc > 0.2 )
  private void buildAreaTree( ONode dstTreeNode, AreaNode atNode, ONode baseDoc ) {    HashSet candidates = new HashSet();    Vector bestCandidates = new Vector();    double bestCount = 0;    findCandidates( candidates, dstTreeNode, baseDoc ); // candidates in baseDoc    if( candidates.isEmpty() ) {      // No exact candidates, try fuzzy search      double minmc = fuzzyFindCandidates( candidates, dstTreeNode, baseDoc, 1e+99 ); // candidates in baseDoc// FUZZY CAND SEARCH -- currently disabled...//      System.out.println("!!!!: No exact candidate (minmc =" +minmc+")for " + dstTreeNode.toString());     if( minmc > 0.1 )// ||// (dstTreeNode instanceof ElementNode && ((ElementNode) dstTreeNode).name.equalsIgnoreCase("path") ) )        candidates.clear(); // All candidates bad      else {        Set c2= candidates;        candidates = new HashSet();        for( Iterator i2=c2.iterator();i2.hasNext();) {          Candidate c = (Candidate) i2.next();          if( c.mc <= 2*minmc ) {            candidates.add(c.node);            System.out.println("!!!!: Fuzzy candidate (mc="+ c.mc + "):" + c.node.toString());          }        }      }    }    for( Iterator i = candidates.iterator(); i.hasNext(); ) {      ONode candidate = (ONode) i.next();      double thisCount = dfsExactMatch( dstTreeNode, candidate , false, 0, null, null );      if( thisCount == bestCount )        bestCandidates.add( candidate );      else if( thisCount > bestCount ) {        bestCount = thisCount;        bestCandidates.clear();        bestCandidates.add( candidate );      }    }    // Now we should have 0 to n candidate nodes in bestCandidates, all matching exactly    // bestCount nodes    // PROBLEM!!!! Matches may not be isomorphic, how should this be solved??//    System.out.println("bestCandidates are:" + bestCandidates.toString() );    Vector stopNodes = null;    if( bestCandidates.size() > 1 ) {      // Ambiguities - we need to find out which one is the best...      System.out.println("Solving ambiguities for " + dstTreeNode.toString() );      MatchNumbers[] cands = new MatchNumbers[ bestCandidates.size() ];      for( int i=0;i<bestCandidates.size();i++) {        AreaNode senitel = new AreaNode(  dstTreeNode );        dfsExactMatch( dstTreeNode, (ONode) bestCandidates.elementAt(i),false,0,null,senitel.bottomNodes );        cands[i]=getMatchNumbers( senitel, senitel.getNode(), (ONode) bestCandidates.elementAt(i) , false);      }      // Sort so that best candidate is in ix 0      Arrays.sort(cands);      bestCandidates.clear();      if( bestCount == 1 && cands[0].nums[0] > 0.1 )        System.out.println("No candidate was very good, leaving unmatched" );      else        bestCandidates.add(cands[0].node);    }    if( bestCandidates.size() > 0 ) {      stopNodes = new Vector();      atNode.matchCount=bestCount; // Just for info purposes, not used      for( int i=0;i<bestCandidates.size();i++)        atNode.addCandidate((ONode) bestCandidates.elementAt(i));      dfsExactMatch( dstTreeNode, (ONode) bestCandidates.elementAt(0), false, 0, stopNodes, atNode.bottomNodes );      // KLUDGE!!! Add mappings for unambigious areas at this point, they're needed when running      // resolveambiguities      if( bestCandidates.size() == 1)          dfsExactMatch( dstTreeNode, (ONode) bestCandidates.elementAt(0), true, 0, null, null );    } else {      // No matching node in baseDoc      if( dstTreeNode instanceof ElementNode )        stopNodes = ((ElementNode) dstTreeNode).children;    }    if( stopNodes != null ) {      //System.out.println("stopNodes are:" +stopNodes.toString() );      for( int i=0;i<stopNodes.size();i++) {        AreaNode atChild = new AreaNode((ONode) stopNodes.elementAt(i));        atNode.addChild( atChild );        buildAreaTree( (ONode) stopNodes.elementAt(i), atChild, baseDoc );      }    } else      ;//System.out.println("stopNodes are: (null)" );  }