JAL-975 - ensure sequences are padded with gaps before submission
authorjprocter <jprocter@compbio.dundee.ac.uk>
Mon, 14 Nov 2011 14:14:25 +0000 (14:14 +0000)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Mon, 14 Nov 2011 14:14:25 +0000 (14:14 +0000)
src/jalview/ws/jws2/JabawsAlignCalcWorker.java

index f47767c..a11cc35 100644 (file)
@@ -304,7 +304,7 @@ public abstract class JabawsAlignCalcWorker extends AlignCalcWorker
 
     if (alignment == null || alignment.getWidth() <= 0
             || alignment.getSequences() == null
-            || (alignedSeqs && !alignment.isAligned())
+//             || (alignedSeqs && !alignment.isAligned() && !submitGaps)
             || alignment.isNucleotide() ? !nucleotidesAllowed
             : !proteinAllowed)
     {
@@ -313,6 +313,7 @@ public abstract class JabawsAlignCalcWorker extends AlignCalcWorker
     List<compbio.data.sequence.FastaSequence> seqs = new ArrayList<compbio.data.sequence.FastaSequence>();
 
     int minlen = 10;
+    int ln=-1;
     if (bySequence)
     {
       seqNames = new HashMap<String, SequenceI>();
@@ -328,11 +329,37 @@ public abstract class JabawsAlignCalcWorker extends AlignCalcWorker
         {
           seqNames.put(newname, sq);
         }
-        seqs.add(new compbio.data.sequence.FastaSequence(newname,
+        FastaSequence seq;
+        seqs.add(seq=new compbio.data.sequence.FastaSequence(newname,
                 (submitGaps) ? sq.getSequenceAsString() : AlignSeq
                         .extractGaps(jalview.util.Comparison.GapChars,
                                 sq.getSequenceAsString())));
+        if (seq.getSequence().length()>ln)
+        {
+          ln = seq.getSequence().length();
+        }
+      }
+    }
+    if (alignedSeqs && submitGaps)
+    {
+      // try real hard to return something submittable
+      // TODO: some of AAcons measures need a minimum of two or three amino acids at each position, and aacons doesn't gracefully degrade.
+      for (int p=0; p<seqs.size();p++)
+      {
+        FastaSequence sq=seqs.get(p);
+        int l=sq.getSequence().length();
+        if (l<ln)
+        {
+          char[] padded=new char[ln];
+          System.arraycopy(sq.getSequence().toCharArray(),0,padded,0,sq.getSequence().length());
+          while (l<ln)
+          {
+            padded[l++]='-';
+          }
+          seqs.set(p, new compbio.data.sequence.FastaSequence(sq.getId(), new String(padded)));
+        }
       }
+      
     }
     return seqs;
   }