JAL-2418 source formatting
[jalview.git] / src / jalview / io / TCoffeeScoreFile.java
index ac5f8d6..fc0c913 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.io;
 
 import jalview.analysis.SequenceIdMatcher;
@@ -7,23 +27,20 @@ import jalview.datamodel.Annotation;
 import jalview.datamodel.SequenceI;
 
 import java.awt.Color;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
 import java.io.IOException;
-import java.io.Reader;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
- * A file parse for T-Coffee score ascii format. This file contains the
- * alignment consensus for each resude in any sequence.
+ * A file parser for T-Coffee score ascii format. This file contains the
+ * alignment consensus for each residue in any sequence.
  * <p>
- * This file is procuded by <code>t_coffee</code> providing the option
+ * This file is produced by <code>t_coffee</code> providing the option
  * <code>-output=score_ascii </code> to the program command line
  * 
  * An example file is the following
@@ -75,16 +92,25 @@ import java.util.Map;
 public class TCoffeeScoreFile extends AlignFile
 {
 
-  public TCoffeeScoreFile(String inFile, String type) throws IOException
-  {
-    super(inFile, type);
+  /**
+   * TCOFFEE score colourscheme
+   */
+  static final Color[] colors = { new Color(102, 102, 255), // 0: lilac #6666FF
+      new Color(0, 255, 0), // 1: green #00FF00
+      new Color(102, 255, 0), // 2: lime green #66FF00
+      new Color(204, 255, 0), // 3: greeny yellow #CCFF00
+      new Color(255, 255, 0), // 4: yellow #FFFF00
+      new Color(255, 204, 0), // 5: orange #FFCC00
+      new Color(255, 153, 0), // 6: deep orange #FF9900
+      new Color(255, 102, 0), // 7: ochre #FF6600
+      new Color(255, 51, 0), // 8: red #FF3300
+      new Color(255, 34, 0) // 9: redder #FF2000
+  };
 
-  }
+  public final static String TCOFFEE_SCORE = "TCoffeeScore";
 
-  public TCoffeeScoreFile(FileParse source) throws IOException
-  {
-    super(source);
-  }
+  static Pattern SCORES_WITH_RESIDUE_NUMS = Pattern
+          .compile("^\\d+\\s([^\\s]+)\\s+\\d+$");
 
   /** The {@link Header} structure holder */
   Header header;
@@ -97,6 +123,18 @@ public class TCoffeeScoreFile extends AlignFile
 
   Integer fWidth;
 
+  public TCoffeeScoreFile(String inFile, DataSourceType fileSourceType)
+          throws IOException
+  {
+    super(inFile, fileSourceType);
+
+  }
+
+  public TCoffeeScoreFile(FileParse source) throws IOException
+  {
+    super(source);
+  }
+
   /**
    * Parse the provided reader for the T-Coffee scores file format
    * 
@@ -126,7 +164,7 @@ public class TCoffeeScoreFile extends AlignFile
 
   /**
    * @return The 'width' of the score matrix i.e. the number of columns. Since
-   *         teh score value are supposd to be calculated for an 'aligned' MSA,
+   *         the score value are supposed to be calculated for an 'aligned' MSA,
    *         all the entries have to have the same width.
    */
   public int getWidth()
@@ -144,8 +182,9 @@ public class TCoffeeScoreFile extends AlignFile
    */
   public String getScoresFor(String id)
   {
-    return scores != null && scores.containsKey(id) ? scores.get(id)
-            .toString() : "";
+    return scores != null && scores.containsKey(id)
+            ? scores.get(id).toString()
+            : "";
   }
 
   /**
@@ -197,6 +236,7 @@ public class TCoffeeScoreFile extends AlignFile
     return result;
   }
 
+  @Override
   public void parse() throws IOException
   {
     /*
@@ -235,9 +275,9 @@ public class TCoffeeScoreFile extends AlignFile
         if (scoreStringBuilder == null)
         {
           error = true;
-          errormessage = String
-                  .format("Invalid T-Coffee score file: Sequence ID '%s' is not declared in header section",
-                          entry.getKey());
+          errormessage = String.format(
+                  "Invalid T-Coffee score file: Sequence ID '%s' is not declared in header section",
+                  entry.getKey());
           return;
         }
 
@@ -440,6 +480,12 @@ public class TCoffeeScoreFile extends AlignFile
       String id = line.substring(0, p).trim();
       String val = line.substring(p + 1).trim();
 
+      Matcher m = SCORES_WITH_RESIDUE_NUMS.matcher(val);
+      if (m.matches())
+      {
+        val = m.group(1);
+      }
+
       result.items.put(id, val);
 
     } while ((line = reader.nextLine()) != null);
@@ -498,24 +544,6 @@ public class TCoffeeScoreFile extends AlignFile
   }
 
   /**
-   * TCOFFEE score colourscheme
-   */
-  static final Color[] colors =
-  { new Color(102, 102, 255), // #6666FF
-      new Color(0, 255, 0), // #00FF00
-      new Color(102, 255, 0), // #66FF00
-      new Color(204, 255, 0), // #CCFF00
-      new Color(255, 255, 0), // #FFFF00
-      new Color(255, 204, 0), // #FFCC00
-      new Color(255, 153, 0), // #FF9900
-      new Color(255, 102, 0), // #FF6600
-      new Color(255, 51, 0), // #FF3300
-      new Color(255, 34, 0) // #FF2000
-  };
-
-  public final static String TCOFFEE_SCORE = "TCoffeeScore";
-
-  /**
    * generate annotation for this TCoffee score set on the given alignment
    * 
    * @param al
@@ -528,7 +556,11 @@ public class TCoffeeScoreFile extends AlignFile
   {
     if (al.getHeight() != getHeight() || al.getWidth() != getWidth())
     {
-      warningMessage = "Alignment shape does not match T-Coffee score file shape.";
+      String info = String.format(
+              "align w: %s, h: %s; score: w: %s; h: %s ", al.getWidth(),
+              al.getHeight(), getWidth(), getHeight());
+      warningMessage = "Alignment shape does not match T-Coffee score file shape -- "
+              + info;
       return false;
     }
     boolean added = false;
@@ -553,9 +585,9 @@ public class TCoffeeScoreFile extends AlignFile
       i++;
       if (s == null && i != scores.size() && !id.getKey().equals("cons"))
       {
-        System.err.println("No "
-                + (matchids ? "match " : " sequences left ")
-                + " for TCoffee score set : " + id.getKey());
+        System.err
+                .println("No " + (matchids ? "match " : " sequences left ")
+                        + " for TCoffee score set : " + id.getKey());
         continue;
       }
       int jSize = al.getWidth() < srow.length ? al.getWidth() : srow.length;
@@ -568,16 +600,16 @@ public class TCoffeeScoreFile extends AlignFile
           annotations[j] = null;
           if (val > 0)
           {
-            System.err
-                    .println("Warning: non-zero value for positional T-COFFEE score for gap at "
+            System.err.println(
+                    "Warning: non-zero value for positional T-COFFEE score for gap at "
                             + j + " in sequence " + s.getName());
           }
         }
         else
         {
           annotations[j] = new Annotation(s == null ? "" + val : null,
-                  s == null ? "" + val : null, '\0', val * 1f, val >= 0
-                          && val < colors.length ? colors[val]
+                  s == null ? "" + val : null, '\0', val * 1f,
+                  val >= 0 && val < colors.length ? colors[val]
                           : Color.white);
         }
       }
@@ -615,7 +647,7 @@ public class TCoffeeScoreFile extends AlignFile
   }
 
   @Override
-  public String print()
+  public String print(SequenceI[] sqs, boolean jvsuffix)
   {
     // TODO Auto-generated method stub
     return "Not valid.";