conservation thread refactored from AlignViewport
[jalview.git] / src / jalview / gui / ConservationThread.java
diff --git a/src/jalview/gui/ConservationThread.java b/src/jalview/gui/ConservationThread.java
new file mode 100644 (file)
index 0000000..4fc1103
--- /dev/null
@@ -0,0 +1,84 @@
+/**
+ * 
+ */
+package jalview.gui;
+
+import jalview.analysis.Conservation;
+import jalview.datamodel.Annotation;
+
+import java.awt.Color;
+
+class ConservationThread extends Thread
+{
+  /**
+   * 
+   */
+  private AlignViewport alignViewport;
+  AlignmentPanel ap;
+
+  public ConservationThread(AlignViewport alignViewport, AlignmentPanel ap)
+  {
+    this.alignViewport = alignViewport;
+    this.ap = ap;
+  }
+
+  public void run()
+  {
+    try
+    {
+      this.alignViewport.updatingConservation = true;
+
+      while (AlignViewport.UPDATING_CONSERVATION)
+      {
+        try
+        {
+          if (ap != null)
+          {
+            ap.paintAlignment(false);
+          }
+          Thread.sleep(200);
+        } catch (Exception ex)
+        {
+          ex.printStackTrace();
+        }
+      }
+
+      AlignViewport.UPDATING_CONSERVATION = true;
+
+      int alWidth = this.alignViewport.alignment.getWidth();
+      if (alWidth < 0)
+      {
+        return;
+      }
+
+      Conservation cons = new jalview.analysis.Conservation("All",
+              jalview.schemes.ResidueProperties.propHash, 3, this.alignViewport.alignment
+                      .getSequences(), 0, alWidth - 1);
+
+      cons.calculate();
+      cons.verdict(false, this.alignViewport.ConsPercGaps);
+
+      if (this.alignViewport.quality != null)
+      {
+        cons.findQuality();
+      }
+      cons.completeAnnotations(alignViewport.conservation,alignViewport.quality, alWidth);
+    } catch (OutOfMemoryError error)
+    {
+      new OOMWarning("calculating conservation", error);
+
+      this.alignViewport.conservation = null;
+      this.alignViewport.quality = null;
+
+    }
+
+    AlignViewport.UPDATING_CONSERVATION = false;
+    this.alignViewport.updatingConservation = false;
+
+    if (ap != null)
+    {
+      ap.paintAlignment(true);
+    }
+
+  }
+}
\ No newline at end of file