Merge branch 'JAL-1164_disorderforselection' into Release_2_8_Branch
authorJim Procter <jprocter@compbio.dundee.ac.uk>
Fri, 11 Oct 2013 16:22:59 +0000 (17:22 +0100)
committerJim Procter <jprocter@compbio.dundee.ac.uk>
Fri, 11 Oct 2013 16:22:59 +0000 (17:22 +0100)
src/jalview/api/AlignViewportI.java
src/jalview/datamodel/Alignment.java
src/jalview/datamodel/SequenceCollectionI.java
src/jalview/datamodel/SequenceGroup.java
src/jalview/datamodel/SequenceI.java
src/jalview/viewmodel/AlignmentViewport.java
src/jalview/ws/jws2/AADisorderClient.java
src/jalview/ws/jws2/JabawsAlignCalcWorker.java

index f42293d..15e5f1d 100644 (file)
  */
 package jalview.api;
 
+import java.awt.Color;
 import java.util.Hashtable;
 import java.util.Map;
 
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
+import jalview.datamodel.AlignmentView;
+import jalview.datamodel.CigarArray;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.SequenceCollectionI;
+import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.schemes.ColourSchemeI;
 
@@ -155,4 +159,23 @@ public interface AlignViewportI
   void updateGroupAnnotationSettings(boolean applyGlobalSettings,
           boolean preserveNewGroupSettings);
 
+
+  SequenceGroup getSelectionGroup();
+
+  SequenceI[] getSequenceSelection();
+
+
+  CigarArray getViewAsCigars(boolean selectedRegionOnly);
+
+  AlignmentView getAlignmentView(boolean selectedOnly);
+
+  AlignmentView getAlignmentView(boolean selectedOnly, boolean markGroups);
+
+  String[] getViewAsString(boolean selectedRegionOnly);
+
+  void setSelectionGroup(SequenceGroup sg);
+
+  char getGapCharacter();
+
+
 }
index 7b545c4..70663aa 100755 (executable)
@@ -1488,4 +1488,13 @@ public class Alignment implements AlignmentI
      hasRNAStructure = true;
    }
  }
+ @Override
+public int getEndRes()
+{
+  return getWidth()-1;
+}@Override
+public int getStartRes()
+{
+  return 0;
+}
 }
index c5cee01..f0d7284 100644 (file)
@@ -29,4 +29,16 @@ public interface SequenceCollectionI
 
   int getWidth();
 
+  /** 
+  * @return the first column included in this collection. Runs from 0<=i<N_cols
+  */
+  int getStartRes();
+  
+
+  /**
+   * 
+   * @return the last column in this collection. Runs from 0<=i<N_cols
+   */
+  int getEndRes();
+
 }
index 65dc13f..0bd7266 100755 (executable)
@@ -612,9 +612,9 @@ public class SequenceGroup implements AnnotatedCollectionI
   }
 
   /**
-   * DOCUMENT ME!
    * 
-   * @return DOCUMENT ME!
+   * 
+   * @return the first column selected by this group. Runs from 0<=i<N_cols
    */
   public int getStartRes()
   {
@@ -622,9 +622,8 @@ public class SequenceGroup implements AnnotatedCollectionI
   }
 
   /**
-   * DOCUMENT ME!
    * 
-   * @return DOCUMENT ME!
+   * @return the groups last selected column. Runs from 0<=i<N_cols
    */
   public int getEndRes()
   {
index aded6e8..5f9b049 100755 (executable)
@@ -97,21 +97,21 @@ public interface SequenceI
   public String getSequenceAsString();
 
   /**
-   * get a range on the seuqence as a string
+   * get a range on the sequence as a string
    * 
    * @param start
-   *          DOCUMENT ME!
+   *          position relative to start of sequence including gaps (from 0)
    * @param end
-   *          DOCUMENT ME!
+   *          position relative to start of sequence including gaps (from 0)
    * 
-   * @return DOCUMENT ME!
+   * @return String containing all gap and symbols in specified range
    */
   public String getSequenceAsString(int start, int end);
 
   /**
-   * DOCUMENT ME!
+   * Get the sequence as a character array
    * 
-   * @return DOCUMENT ME!
+   * @return seqeunce and any gaps
    */
   public char[] getSequence();
 
index d65486d..dca968e 100644 (file)
@@ -41,6 +41,7 @@ import jalview.workers.ConsensusThread;
 import jalview.workers.StrucConsensusThread;
 
 import java.util.ArrayList;
+import java.util.BitSet;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
@@ -594,6 +595,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return null or the currently selected sequence region
    */
+  @Override
   public SequenceGroup getSelectionGroup()
   {
     return selectionGroup;
@@ -606,6 +608,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    *          - group holding references to sequences in this alignment view
    * 
    */
+  @Override
   public void setSelectionGroup(SequenceGroup sg)
   {
     selectionGroup = sg;
@@ -1054,6 +1057,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return array of references to sequence objects
    */
+  @Override
   public SequenceI[] getSequenceSelection()
   {
     SequenceI[] sequences = null;
@@ -1076,6 +1080,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return String[]
    */
+  @Override
   public jalview.datamodel.CigarArray getViewAsCigars(
           boolean selectedRegionOnly)
   {
@@ -1092,6 +1097,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    *          boolean true to just return the selected view
    * @return AlignmentView
    */
+  @Override
   public jalview.datamodel.AlignmentView getAlignmentView(
           boolean selectedOnly)
   {
@@ -1110,6 +1116,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    *          is true)
    * @return AlignmentView
    */
+  @Override
   public jalview.datamodel.AlignmentView getAlignmentView(
           boolean selectedOnly, boolean markGroups)
   {
@@ -1125,6 +1132,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return String[]
    */
+  @Override
   public String[] getViewAsString(boolean selectedRegionOnly)
   {
     String[] selection = null;
@@ -1406,7 +1414,7 @@ public abstract class AlignmentViewport implements AlignViewportI
     int charHeight = getCharHeight();
     if (aa != null)
     {
-      boolean graphgrp[] = null;
+      BitSet graphgrp = new BitSet();
       for (int i = 0; i < aa.length; i++)
       {
         if (aa[i] == null)
@@ -1420,17 +1428,13 @@ public abstract class AlignmentViewport implements AlignViewportI
         }
         if (aa[i].graphGroup > -1)
         {
-          if (graphgrp == null)
-          {
-            graphgrp = new boolean[aa.length];
-          }
-          if (graphgrp[aa[i].graphGroup])
+          if (graphgrp.get(aa[i].graphGroup))
           {
             continue;
           }
           else
           {
-            graphgrp[aa[i].graphGroup] = true;
+            graphgrp.set(aa[i].graphGroup);
           }
         }
         aa[i].height = 0;
index 3c19dc5..96635c9 100644 (file)
@@ -181,7 +181,7 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
       {
         boolean sameGroup = false;
         SequenceI dseq, aseq, seq = seqNames.get(seqId);
-        int base = seq.getStart() - 1;
+        int base = seq.findPosition(start)-1;
         aseq = seq;
         while ((dseq = seq).getDatasetSequence() != null)
         {
index 720e76a..926256d 100644 (file)
@@ -23,6 +23,7 @@ import jalview.api.AlignViewportI;
 import jalview.api.AlignmentViewPanel;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
+import jalview.datamodel.AnnotatedCollectionI;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
@@ -149,7 +150,7 @@ public abstract class JabawsAlignCalcWorker extends AlignCalcWorker
         return;
       }
       List<compbio.data.sequence.FastaSequence> seqs = getInputSequences(alignViewport
-              .getAlignment());
+              .getAlignment(), bySequence ? alignViewport.getSelectionGroup() : null);
 
       if (seqs == null)
       {
@@ -379,8 +380,10 @@ public abstract class JabawsAlignCalcWorker extends AlignCalcWorker
   boolean[] gapMap;
 
   int realw;
+  
+  int start,end;
 
-  public List<FastaSequence> getInputSequences(AlignmentI alignment)
+  public List<FastaSequence> getInputSequences(AlignmentI alignment, AnnotatedCollectionI inputSeqs)
   {
     if (alignment == null || alignment.getWidth() <= 0
             || alignment.getSequences() == null
@@ -390,6 +393,11 @@ public abstract class JabawsAlignCalcWorker extends AlignCalcWorker
     {
       return null;
     }
+    if (inputSeqs==null || inputSeqs.getWidth()<=0 || inputSeqs.getSequences()==null || inputSeqs.getSequences().size()<1)
+    {
+      inputSeqs = alignment;
+    }
+    
     List<compbio.data.sequence.FastaSequence> seqs = new ArrayList<compbio.data.sequence.FastaSequence>();
 
     int minlen = 10;
@@ -399,9 +407,12 @@ public abstract class JabawsAlignCalcWorker extends AlignCalcWorker
       seqNames = new HashMap<String, SequenceI>();
     }
     gapMap = new boolean[0];
-    for (SequenceI sq : ((List<SequenceI>) alignment.getSequences()))
+    start=inputSeqs.getStartRes();
+    end=inputSeqs.getEndRes();
+    
+    for (SequenceI sq : (List<SequenceI>) inputSeqs.getSequences())
     {
-      if (sq.getEnd() - sq.getStart() > minlen - 1)
+      if (sq.findPosition(end+1) -sq.findPosition(start+1) > minlen - 1)
       {
         String newname = SeqsetUtils.unique_name(seqs.size() + 1);
         // make new input sequence with or without gaps
@@ -433,7 +444,7 @@ public abstract class JabawsAlignCalcWorker extends AlignCalcWorker
         {
           seqs.add(seq = new compbio.data.sequence.FastaSequence(newname,
                   AlignSeq.extractGaps(jalview.util.Comparison.GapChars,
-                          sq.getSequenceAsString())));
+                          sq.getSequenceAsString(start,end+1))));
         }
         if (seq.getSequence().length() > ln)
         {