Index: BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java
===================================================================
--- BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 45)
+++ BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 47)
@@ -17,5 +17,6 @@
     int limit;
     int th;
-    double cut;
+    double concut;
+    double divcut;
         
     public class LinkAndPath{
@@ -45,5 +46,6 @@
         limit = 1000;
         th = 0;
-        cut = 2.0;
+        concut = 2.0;
+        divcut = 2.0;
     }
     
@@ -61,5 +63,13 @@
     
     public Path[] getPaths(OWLQueryBuilderImpl qb, int mode, boolean countLink){
-        List<List<ClassLink>> paths = searchPaths(qb, mode, countLink);
+        List<List<ClassLink>> paths = null;
+        if ( mode <= 1){
+            paths = searchPaths(qb, mode, countLink);
+        }else if ( mode == 2 ){
+            paths = searchPathsWithCut(qb);            
+        }else{
+            System.err.println("Mode is not correct");
+            return null;
+        }
         Path[] patharray = new Path[paths.size()];
         ListIterator<List<ClassLink>> pit = paths.listIterator();
@@ -86,5 +96,5 @@
     private List<List<ClassLink>> searchPaths(OWLQueryBuilderImpl qb, int mode, boolean countLinks){
         List<List<ClassLink>> paths = new ArrayList<>();
-        ClassLink crrLink = new ClassLink(null,startClass,Direction.both,0);
+        ClassLink crrLink = new ClassLink(null,startClass,Direction.both,0,0,0);
         List<LinkAndPath> lp = new LinkedList<>();
         lp.add(new LinkAndPath(crrLink, new LinkedList<ClassLink>()));
@@ -125,5 +135,5 @@
     private List<List<ClassLink>> searchPathsWithCut(OWLQueryBuilderImpl qb){
         List<List<ClassLink>> paths = new ArrayList<>();
-        ClassLink crrLink = new ClassLink(null,startClass,Direction.both,0);
+        ClassLink crrLink = new ClassLink(null,startClass,Direction.both,0,0,0);
         List<LinkAndPath> lp = new LinkedList<>();
         lp.add(new LinkAndPath(crrLink, new LinkedList<ClassLink>()));
@@ -144,9 +154,18 @@
                       }
                       boolean con = false;
-                      double cont = 1.0;
-                      if ( cont > th ){ // shrink
+                      boolean div = false;
+                      double conv = getValueForConvergence(classLinks[j].getNumOfOriginInstances(), 
+                                                           classLinks[j].getNumOfLinkedInstances(),
+                                                           classLinks[j].getNumOfLinks());
+                      double divv = getValueForDivergence(classLinks[j].getNumOfOriginInstances(), 
+                                                           classLinks[j].getNumOfLinkedInstances(),
+                                                           classLinks[j].getNumOfLinks());
+                      if ( conv > concut ){ // converge
                           con = true;
                       }
-                      if ( crrlp.converge == true && con == false ){ // converge & 縲diverge
+                      if ( divv > divcut ){
+                          div = true;
+                      }
+                      if ( crrlp.converge == true && div == true ){ // converge & 縲diverge
                           continue; // cut
                       }
@@ -161,4 +180,11 @@
         return paths;  
     }
+    
+    private double getValueForConvergence(int numOfOriginInstances, int numOfLinkedInstances, int numOfLinks){
+        return (double) numOfLinks / (double) numOfLinkedInstances ;
+    }
 
+    private double getValueForDivergence(int numOfOriginInstances, int numOfLinkedInstances, int numOfLinks){
+        return (double) numOfLinks / (double) numOfOriginInstances ;        
+    }
 }
