Index: /BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java
===================================================================
--- /BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 53)
+++ /BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 67)
@@ -9,5 +9,8 @@
  * @author atsuko
  */
-import java.util.*;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
 public class OWLClassGraph extends LabeledMultiDigraph{
@@ -21,7 +24,9 @@
         
     public class LinkAndPath{
+        String originalClassURI; // originalClasssURI -classLink.propertyURI-> classLink.linkedClassURL
         ClassLink classLink;
         List<ClassLink> path;
         boolean converge;
+        
         public LinkAndPath(ClassLink classLink, List<ClassLink> path){
            this.classLink = classLink;
@@ -30,7 +35,8 @@
         }
         
-        public LinkAndPath(ClassLink classLink, List<ClassLink> path, boolean converge){
+        public LinkAndPath(ClassLink classLink, List<ClassLink> path, String orinalClassURI, boolean converge){
            this.classLink = classLink;
            this.path = path;
+           this.originalClassURI = originalClassURI;
            this.converge = converge;
         }
@@ -50,4 +56,5 @@
     }
     
+    /*
     public void generateGraph(List<List<ClassLink>> paths){
         ListIterator<List<ClassLink>> pit = paths.listIterator();
@@ -61,4 +68,5 @@
         }
     }
+   */
     
     public Path[] getPaths(OWLQueryBuilderImpl qb, int mode, boolean countLink){
@@ -67,5 +75,5 @@
             paths = searchPaths(qb, mode, countLink);
         }else if ( mode == 2 ){
-            paths = searchPathsWithCut(qb);            
+            paths = searchPathsWithCut(qb);        
         }else{
             System.err.println("Mode is not correct");
@@ -154,4 +162,8 @@
                           continue;
                       }
+                      if (classLinks[j].getNumOfLinks() <= th ){
+                          continue; //cut by the number of instances
+                      }
+                      // Divergence & Convergence Decision
                       boolean con = false;
                       boolean div = false;
@@ -163,7 +175,14 @@
                       }
                       if ( crrlp.converge == true && div == true ){ // converge & 縲diverge
-                          continue; // cut
-                      }
-                      nextlp.add(new LinkAndPath(classLinks[j], crrpath, con));
+                          continue; // cut by the differences of entropies
+                      }
+                      // crr & next are the same arcs
+                      if ( crrlp.classLink.getPropertyURI().equals(classLinks[j].getPropertyURI()) &&
+                           crrlp.classLink.getDirection() != classLinks[j].getDirection() &&
+                           crrlp.originalClassURI.equals( classLinks[j].getLinkedClassURI()) ){
+                          continue;
+                      }
+                      
+                      nextlp.add(new LinkAndPath(classLinks[j], crrpath, crrlp.classLink.getLinkedClassURI(), con));
                   }
               }
