Index: BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java
===================================================================
--- BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 154)
+++ BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 174)
@@ -9,8 +9,8 @@
  * @author atsuko
  */
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
+import java.util.*;
+//import java.util.LinkedList;
+//import java.util.List;
+//import java.util.ListIterator;
 
 public class OWLClassGraph extends LabeledMultiDigraph{
@@ -20,6 +20,5 @@
     int limit;
     int th;
-    double concut;
-    double divcut;
+    int prunecut;
         
     public class LinkAndPath{
@@ -27,17 +26,17 @@
         ClassLink classLink;
         List<ClassLink> path;
-        boolean converge;
+        //boolean converge;
         
         public LinkAndPath(ClassLink classLink, List<ClassLink> path){
            this.classLink = classLink;
            this.path = path;
-           this.converge = false;
-        }
-        
-        public LinkAndPath(ClassLink classLink, List<ClassLink> path, String originalClassURI, boolean converge){
+           //this.converge = false;
+        }
+        
+        public LinkAndPath(ClassLink classLink, List<ClassLink> path, String originalClassURI){
            this.classLink = classLink;
            this.path = path;
            this.originalClassURI = originalClassURI;
-           this.converge = converge;
+           //this.converge = converge;
         }
     }
@@ -51,21 +50,18 @@
         nsteps = 3;
         limit = 1000;
-        //th = 0;
-        //concut = 2.0;
-        //divcut = - 2.0;
+        prunecut = 100;
     }
 
     public Path[] getPaths(RDFSchemaAnalyzer rdfsa, boolean countLink){
         List<List<ClassLink>> paths = null;
-        paths = searchPaths(rdfsa, countLink);            
-        Path[] patharray = new Path[paths.size()];
+        paths = searchPaths(rdfsa, countLink);
+        NavigableSet<Path> sortedpath = new TreeSet<Path>();
         ListIterator<List<ClassLink>> pit = paths.listIterator();
-        int i = 0;
         while ( pit.hasNext() ){
-            patharray[i] = new Path();
-            patharray[i].setStartClass(startClass);
-            List<ClassLink> path = pit.next();
-            patharray[i].setClassLinks(path);
-            ListIterator<ClassLink> cit = path.listIterator();
+            Path path = new Path();
+            path.setStartClass(startClass);
+            List<ClassLink> crrpath = pit.next();
+            path.setClassLinks(crrpath);
+            ListIterator<ClassLink> cit = crrpath.listIterator();
             int min = Integer.MAX_VALUE;
             while ( cit.hasNext() ){
@@ -75,5 +71,12 @@
                 }
             }
-            patharray[i].setWidth(min);
+            path.setWidth(min);
+            sortedpath.add(path);
+        }
+        Path[] patharray = new Path[paths.size()];
+        Iterator<Path> pait = sortedpath.descendingIterator();
+        int i = 0;
+        while ( pait.hasNext() ){
+            patharray[i] = pait.next();
             i++;
         }
@@ -84,5 +87,5 @@
         List<List<ClassLink>> paths = new ArrayList<>();
         List<LinkAndPath> lp = new LinkedList<>();
-        lp.add(new LinkAndPath(new ClassLink("",startClass,null,Direction.both,0,0,0,0,0,false,false), new LinkedList<ClassLink>(), "", false));
+        lp.add(new LinkAndPath(new ClassLink("",startClass,null,Direction.both,0,0,0,0,0,false,false), new LinkedList<ClassLink>(), ""));
         try{
           for ( int i = 0; i < nsteps; i++ ){
@@ -91,6 +94,12 @@
               while ( lit.hasNext() ){
                   LinkAndPath crrlp = lit.next();
+                  /*if ( crrlp.classLink.getLinkedClassURI().equals("http://www.biopax.org/release/biopax-level3.owl#Pathway") ){
+                      System.out.println("here!");
+                  }*/
                   ClassLink[] classLinks = rdfsa.getNextClass(null, crrlp.classLink.getLinkedClassURI(), limit, countLinks);
                   for ( int j = 0 ; j < classLinks.length; j++ ){
+                      /*if ( classLinks[j].getLinkedClassURI().endsWith("http://www.biopax.org/release/biopax-level3.owl#BiochemicalReaction") ){
+                          ClassLink cltmp = classLinks[j];
+                      }*/
                       List<ClassLink> crrpath = new LinkedList<>(crrlp.path);
                       crrpath.add(classLinks[j]);
@@ -107,9 +116,18 @@
                            crrlp.classLink.getDirection() != classLinks[j].getDirection() &&
                            crrlp.originalClassURI.equals( classLinks[j].getLinkedClassURI()) ){
+                              System.out.println("P1");
                               continue;
                           }
-                      }
-                      
-                      nextlp.add(new LinkAndPath(classLinks[j], crrpath, crrlp.classLink.getLinkedClassURI(), false));
+                          if ( checkPruning(crrlp.classLink, classLinks[j]) ){
+                              System.out.println("P2");
+                              continue;
+                          }
+                      }
+                      /*
+                      if ( classLinks[j].getDirection() != Direction.reverse ){
+                         System.out.println("here b"); 
+                      }*/
+
+                      nextlp.add(new LinkAndPath(classLinks[j], crrpath, crrlp.classLink.getLinkedClassURI()));
                   }
               }
@@ -178,6 +196,17 @@
 */
     
-/*    
-    private boolean decideConvergence(ClassLink classLink){
+      private boolean checkPruning(ClassLink classLink1, ClassLink classLink2){
+          // true -> prune link2, false -> add link2
+          int noi1 = classLink1.getNumOfOriginInstances();
+          int nli1 = classLink1.getNumOfLinkedInstances();
+          int noi2 = classLink2.getNumOfOriginInstances();
+          int nli2 = classLink2.getNumOfLinkedInstances();
+          if ( noi1 == 0 || nli1 == 0 || noi2 == 0 || nli2 == 0 ){
+              return true;
+          }
+          return ( noi1 / nli1 > prunecut && nli2 / noi2 > prunecut );
+      }
+    
+/*    private boolean decideConvergence(ClassLink classLink){
         double con = getValueForConvergence(classLink.getNumOfOriginInstances(), 
                                               classLink.getNumOfLinkedInstances(),
@@ -209,3 +238,4 @@
     }
     */
+    
 }
