incorrect colour-by-sequence when gaps are present in alignment sequence and pdb...
authorjprocter <Jim Procter>
Tue, 18 Dec 2007 13:20:18 +0000 (13:20 +0000)
committerjprocter <Jim Procter>
Tue, 18 Dec 2007 13:20:18 +0000 (13:20 +0000)
src/jalview/appletgui/AppletJmol.java
src/jalview/gui/AppJmol.java

index 26fc708..1202c68 100644 (file)
@@ -502,15 +502,22 @@ public class AppletJmol extends EmbmenuFrame
     int lastPos = -1;
     for (int s = 0; s < sequence.length; s++)
     {
-      for (int m = 0; m < mapping.length; m++)
+      for (int sp,m = 0; m < mapping.length; m++)
       {
         if (mapping[m].getSequence() == sequence[s]
-            && ap.av.alignment.findIndex(sequence[s]) > -1)
+            && (sp=ap.av.alignment.findIndex(sequence[s])) > -1)
         {
-          for (int r = 0; r < sequence[s].getLength(); r++)
+          SequenceI asp = ap.av.alignment.getSequenceAt(sp);
+          for (int r = 0; r < asp.getLength(); r++)
           {
+            // no mapping to gaps in sequence
+            if (jalview.util.Comparison.isGap(asp.getCharAt(r)))
+            {
+              continue;
+            }
             int pos = mapping[m].getPDBResNum(
-                sequence[s].findPosition(r));
+                    asp.findPosition(r));
+
 
             if (pos < 1 || pos == lastPos)
               continue;
index 7269e1d..f340457 100644 (file)
@@ -649,27 +649,33 @@ public synchronized void addSequence(SequenceI [] seq)
     StringBuffer command = new StringBuffer();
 
     int lastPos = -1;
-    for (int s = 0; s < sequence.length; s++)
+    for (int sp,s = 0; s < sequence.length; s++)
     {
       for (int m = 0; m < mapping.length; m++)
       {
         if (mapping[m].getSequence() == sequence[s]
-            && ap.av.alignment.findIndex(sequence[s])>-1)
+            && (sp=ap.av.alignment.findIndex(sequence[s]))>-1)
         {
-          for (int r = 0; r < sequence[s].getLength(); r++)
+          SequenceI asp = ap.av.alignment.getSequenceAt(sp);
+          for (int r = 0; r < asp.getLength(); r++)
           {
+            // No mapping to gaps in sequence.
+            if (jalview.util.Comparison.isGap(asp.getCharAt(r)))
+            {
+              continue;
+            }
             int pos = mapping[m].getPDBResNum(
-                sequence[s].findPosition(r));
+                    asp.findPosition(r));
 
             if (pos < 1 || pos==lastPos)
               continue;
 
             lastPos = pos;
 
-            Color col = sr.getResidueBoxColour(sequence[s], r);
+            Color col = sr.getResidueBoxColour(asp, r);
 
             if (showFeatures)
-              col = fr.findFeatureColour(col, sequence[s], r);
+              col = fr.findFeatureColour(col, asp, r);
 
             if (command.toString().endsWith(":" + mapping[m].getChain()+
                                             ";color["