basic implementation of profile display and todos
[jalview.git] / src / jalview / analysis / Dna.java
index 8bf8962..5ff6751 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)\r
- * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)\r
+ * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
  * \r
  * This program is free software; you can redistribute it and/or\r
  * modify it under the terms of the GNU General Public License\r
@@ -364,14 +364,44 @@ public class Dna
   {\r
     // Have a look at all the codon positions for annotation and put the first\r
     // one found into the translated annotation pos.\r
+    int contrib=0;\r
+    Annotation annot = null;\r
     for (int p = 0; p < 3; p++)\r
     {\r
       if (annotations[is[p]] != null)\r
       {\r
-        return new Annotation(annotations[is[p]]);\r
+        if (annot==null) {\r
+          annot = new Annotation(annotations[is[p]]);\r
+          contrib = 1;\r
+        } else {\r
+          // merge with last\r
+          Annotation cpy = new Annotation(annotations[is[p]]);\r
+          if (annot.colour==null)\r
+          {\r
+            annot.colour = cpy.colour;\r
+          }\r
+          if (annot.description==null || annot.description.length()==0)\r
+          {\r
+            annot.description = cpy.description;\r
+          }\r
+          if (annot.displayCharacter==null)\r
+          {\r
+            annot.displayCharacter = cpy.displayCharacter;\r
+          }\r
+          if (annot.secondaryStructure==0)\r
+          {\r
+            annot.secondaryStructure = cpy.secondaryStructure;\r
+          }\r
+          annot.value+=cpy.value;\r
+          contrib++;\r
+        }\r
       }\r
     }\r
-    return null;\r
+    if (contrib>1)\r
+    {\r
+      annot.value/=(float)contrib;\r
+    }\r
+    return annot;\r
   }\r
 \r
   /**\r
@@ -515,11 +545,14 @@ public class Dna
           codons.codons[aspos] = new int[]\r
           { cdp[0], cdp[1], cdp[2] };\r
         }\r
-        aspos++;\r
         if (aspos >= codons.aaWidth)\r
         {\r
-          codons.aaWidth = aspos + 1;\r
+          // update maximum alignment width \r
+          // (we can do this without calling checkCodonFrameWidth because it was already done above)\r
+          codons.setAaWidth(aspos);\r
         }\r
+        // ready for next translated reading frame alignment position (if any)\r
+        aspos++;\r
       }\r
     }\r
     if (resSize > 0)\r