More work on AAConWS not finished yet!
[jabaws.git] / datamodel / compbio / data / sequence / SequenceUtil.java
index 149e0e0..5946e78 100644 (file)
@@ -31,6 +31,8 @@ import java.util.logging.Level;
 import java.util.regex.Matcher;\r
 import java.util.regex.Pattern;\r
 \r
+import compbio.conservation.Method;\r
+\r
 /**\r
  * Utility class for operations on sequences\r
  * \r
@@ -421,9 +423,9 @@ public final class SequenceUtil {
                        String singleSeq = scan.next();\r
                        Scanner scansingle = new Scanner(singleSeq);\r
                        StringBuffer seqbuffer = new StringBuffer();\r
-                       List<Float> coils = new ArrayList<Float>();\r
-                       List<Float> rem = new ArrayList<Float>();\r
-                       List<Float> hotloops = new ArrayList<Float>();\r
+                       ArrayList<Float> coils = new ArrayList<Float>();\r
+                       ArrayList<Float> rem = new ArrayList<Float>();\r
+                       ArrayList<Float> hotloops = new ArrayList<Float>();\r
 \r
                        MultiAnnotatedSequence<DisemblResultAnnot> disemblRes = new MultiAnnotatedSequence<DisemblResultAnnot>(\r
                                        DisemblResultAnnot.class);\r
@@ -450,4 +452,41 @@ public final class SequenceUtil {
                return results;\r
        }\r
 \r
+       /**\r
+        * Read AACon result with no alignment files. This method leaves incoming\r
+        * the InputStream results open!\r
+        * \r
+        * @param results\r
+        *            output file of AAConservation\r
+        * @return {@link MultiAnnotatedSequence}\r
+        */\r
+       public static MultiAnnotatedSequence<Method> readResults(InputStream results) {\r
+               if (results == null) {\r
+                       throw new NullPointerException(\r
+                                       "InputStream with results must be provided");\r
+               }\r
+               MultiAnnotatedSequence<Method> annotations = new MultiAnnotatedSequence<Method>(\r
+                               Method.class);\r
+               Scanner sc = new Scanner(results);\r
+               sc.useDelimiter("#");\r
+               while (sc.hasNext()) {\r
+                       String line = sc.next();\r
+                       int spacePos = line.indexOf(" ");\r
+                       assert spacePos > 0 : "Space is expected as delimited between method "\r
+                                       + "name and values!";\r
+                       String methodLine = line.substring(0, spacePos);\r
+                       Method method = Method.getMethod(methodLine);\r
+                       assert method != null : "Method " + methodLine\r
+                                       + " is not recognized! ";\r
+                       Scanner valuesScanner = new Scanner(line.substring(spacePos));\r
+                       ArrayList<Float> values = new ArrayList<Float>();\r
+                       while (valuesScanner.hasNextDouble()) {\r
+                               Double value = valuesScanner.nextDouble();\r
+                               values.add(value.floatValue());\r
+                       }\r
+                       annotations.addAnnotation(method, values);\r
+               }\r
+               return annotations;\r
+       }\r
+\r
 }\r