add partial button fix to annotation and statistics output
[jalview.git] / src / jalview / datamodel / SequenceGroup.java
index 8c29ca5..39ee2cb 100755 (executable)
@@ -51,6 +51,8 @@ public class SequenceGroup implements AnnotatedCollectionI
 
   boolean colourText = false;
 
+  HiddenMarkovModel hmm;
+
   /**
    * True if the group is defined as a group on the alignment, false if it is
    * just a selection.
@@ -100,6 +102,8 @@ public class SequenceGroup implements AnnotatedCollectionI
    */
   private boolean ignoreGapsInConsensus = true;
 
+  private boolean ignoreBelowBackground = true;
+
   /**
    * consensus calculation property
    */
@@ -110,13 +114,31 @@ public class SequenceGroup implements AnnotatedCollectionI
    */
   private boolean normaliseSequenceLogo;
 
-  /**
-   * @return the includeAllConsSymbols
+  /*
+   * visibility of rows or represented rows covered by group
    */
-  public boolean isShowSequenceLogo()
-  {
-    return showSequenceLogo;
-  }
+  private boolean hidereps = false;
+
+  /*
+   * visibility of columns intersecting this group
+   */
+  private boolean hidecols = false;
+
+  AlignmentAnnotation consensus = null;
+
+  AlignmentAnnotation conservation = null;
+
+  AlignmentAnnotation informationContent = null;
+
+  private boolean showConsensusHistogram;
+
+  private AnnotatedCollectionI context;
+
+  private boolean showHMMSequenceLogo;
+
+  private boolean normaliseHMMSequenceLogo;
+
+  private boolean showInformationHistogram;
 
   /**
    * Creates a new SequenceGroup object.
@@ -178,13 +200,20 @@ public class SequenceGroup implements AnnotatedCollectionI
       colourText = seqsel.colourText;
       startRes = seqsel.startRes;
       endRes = seqsel.endRes;
-      cs = seqsel.cs;
+      cs = new ResidueShader(seqsel.getColourScheme());
       if (seqsel.description != null)
       {
         description = new String(seqsel.description);
       }
       hidecols = seqsel.hidecols;
       hidereps = seqsel.hidereps;
+      showNonconserved = seqsel.showNonconserved;
+      showSequenceLogo = seqsel.showSequenceLogo;
+      normaliseSequenceLogo = seqsel.normaliseSequenceLogo;
+      showConsensusHistogram = seqsel.showConsensusHistogram;
+      showHMMSequenceLogo = seqsel.showHMMSequenceLogo;
+      normaliseHMMSequenceLogo = seqsel.normaliseHMMSequenceLogo;
+      showInformationHistogram = seqsel.showInformationHistogram;
       idColour = seqsel.idColour;
       outlineColour = seqsel.outlineColour;
       seqrep = seqsel.seqrep;
@@ -193,6 +222,7 @@ public class SequenceGroup implements AnnotatedCollectionI
       thresholdTextColour = seqsel.thresholdTextColour;
       width = seqsel.width;
       ignoreGapsInConsensus = seqsel.ignoreGapsInConsensus;
+      ignoreBelowBackground = seqsel.ignoreBelowBackground;
       if (seqsel.conserve != null)
       {
         recalcConservation(); // safer than
@@ -201,6 +231,11 @@ public class SequenceGroup implements AnnotatedCollectionI
     }
   }
 
+  public boolean isShowSequenceLogo()
+  {
+    return showSequenceLogo;
+  }
+
   public SequenceI[] getSelectionAsNewSequences(AlignmentI align)
   {
     int iSize = sequences.size();
@@ -529,7 +564,8 @@ public class SequenceGroup implements AnnotatedCollectionI
    */
   public boolean recalcConservation(boolean defer)
   {
-    if (cs == null && consensus == null && conservation == null)
+    if (cs == null && consensus == null && conservation == null
+            && informationContent == null)
     {
       return false;
     }
@@ -540,6 +576,12 @@ public class SequenceGroup implements AnnotatedCollectionI
     {
       ProfilesI cnsns = AAFrequency.calculate(sequences, startRes,
               endRes + 1, showSequenceLogo);
+      if (informationContent != null)
+      {
+        // _updateInformationRow(cnsns, sequences.size()); TODO don't know what
+        // to do here
+        upd = true;
+      }
       if (consensus != null)
       {
         _updateConsensusRow(cnsns, sequences.size());
@@ -635,6 +677,30 @@ public class SequenceGroup implements AnnotatedCollectionI
     // ignoreGapsInConsensusCalculation);
   }
 
+  private void _updateInformationRow(ProfilesI cnsns, long nseq)
+  {
+    if (consensus == null)
+    {
+      getConsensus();
+    }
+    consensus.label = "Consensus for " + getName();
+    consensus.description = "Percent Identity";
+    consensusData = cnsns;
+    // preserve width if already set
+    int aWidth = (consensus.annotations != null)
+            ? (endRes < consensus.annotations.length
+                    ? consensus.annotations.length : endRes + 1)
+            : endRes + 1;
+    consensus.annotations = null;
+    consensus.annotations = new Annotation[aWidth]; // should be alignment width
+
+    AAFrequency.completeConsensus(consensus, cnsns, startRes, endRes + 1,
+            ignoreGapsInConsensus, showSequenceLogo, nseq); // TODO: setting
+                                                            // container
+    // for
+    // ignoreGapsInConsensusCalculation);
+  }
+
   /**
    * @param s
    *          sequence to either add or remove from group
@@ -957,11 +1023,6 @@ public class SequenceGroup implements AnnotatedCollectionI
   }
 
   /**
-   * visibility of rows or represented rows covered by group
-   */
-  private boolean hidereps = false;
-
-  /**
    * set visibility of sequences covered by (if no sequence representative is
    * defined) or represented by this group.
    * 
@@ -983,11 +1044,6 @@ public class SequenceGroup implements AnnotatedCollectionI
   }
 
   /**
-   * visibility of columns intersecting this group
-   */
-  private boolean hidecols = false;
-
-  /**
    * set intended visibility of columns covered by this group
    * 
    * @param visibility
@@ -1049,13 +1105,6 @@ public class SequenceGroup implements AnnotatedCollectionI
     this.showNonconserved = displayNonconserved;
   }
 
-  AlignmentAnnotation consensus = null, conservation = null;
-
-  /**
-   * flag indicating if consensus histogram should be rendered
-   */
-  private boolean showConsensusHistogram;
-
   /**
    * set this alignmentAnnotation object as the one used to render consensus
    * annotation
@@ -1185,6 +1234,20 @@ public class SequenceGroup implements AnnotatedCollectionI
     return ignoreGapsInConsensus;
   }
 
+  public void setIgnoreBelowBackground(boolean state)
+  {
+    if (this.ignoreBelowBackground != state)
+    {
+      ignoreBelowBackground = state;
+    }
+    ignoreBelowBackground = state;
+  }
+
+  public boolean getIgnoreBelowBackground()
+  {
+    return true;
+  }
+
   /**
    * @param showSequenceLogo
    *          indicates if a sequence logo is shown for consensus annotation
@@ -1346,8 +1409,6 @@ public class SequenceGroup implements AnnotatedCollectionI
     }
   }
 
-  private AnnotatedCollectionI context;
-
   /**
    * Sets the alignment or group context for this group, and whether it is
    * defined as a group
@@ -1457,4 +1518,44 @@ public class SequenceGroup implements AnnotatedCollectionI
   {
     return (startRes <= apos && endRes >= apos) && sequences.contains(seq);
   }
+
+  public boolean isShowInformationHistogram()
+  {
+    return showInformationHistogram;
+  }
+
+  public void setShowInformationHistogram(boolean state)
+  {
+    if (showInformationHistogram != state && informationContent != null)
+    {
+      this.showInformationHistogram = state;
+      // recalcConservation(); TODO don't know what to do here next
+    }
+    this.showInformationHistogram = state;
+
+  }
+
+  public boolean isShowHMMSequenceLogo()
+  {
+    // TODO Auto-generated method stub
+    return showHMMSequenceLogo;
+  }
+
+  public void setshowHMMSequenceLogo(boolean state)
+  {
+    showHMMSequenceLogo = state;
+
+  }
+
+  public boolean isNormaliseHMMSequenceLogo()
+  {
+    // TODO Auto-generated method stub
+    return normaliseHMMSequenceLogo;
+  }
+
+  public void setNormaliseHMMSequenceLogo(boolean state)
+  {
+    normaliseSequenceLogo = state;
+  }
+
 }