+ frame = new Frame();\r
+ frame.add(this);\r
+ jalview.bin.JalviewLite.addFrame(frame, "Redundancy threshold selection",\r
+ 400, 100);\r
+\r
+ frame.addWindowListener(this);\r
+\r
+ Thread worker = new Thread(this);\r
+ worker.start();\r
+ }\r
+ /**\r
+ * This is a copy of remove redundancy in jalivew.datamodel.Alignment\r
+ * except we dont want to remove redundancy, just calculate once\r
+ * so we can use the slider to dynamically hide redundant sequences\r
+ *\r
+ * @param threshold DOCUMENT ME!\r
+ * @param sel DOCUMENT ME!\r
+ *\r
+ * @return DOCUMENT ME!\r
+ */\r
+ public void run()\r
+ {\r
+ label.setText("Calculating....");\r
+\r
+ slider.setVisible(false);\r
+ applyButton.setEnabled(false);\r
+ valueField.setVisible(false);\r
+\r
+ validate();\r
+\r
+ String[] omitHidden = null;\r
+\r
+ SequenceGroup sg = ap.av.getSelectionGroup();\r
+ int height;\r
+\r
+ originalColours = new Hashtable();\r
+ int start, end;\r
+\r
+ if ( (sg != null) && (sg.getSize(false) >= 1))\r
+ {\r
+ originalSequences = sg.getSequencesInOrder(ap.av.alignment);\r
+ start = sg.getStartRes();\r
+ end = sg.getEndRes();\r
+ }\r
+ else\r
+ {\r
+ originalSequences = ap.av.alignment.getSequencesArray();\r
+ start = 0;\r
+ end = ap.av.alignment.getWidth();\r
+ }\r
+\r
+ height = originalSequences.length;\r
+\r
+ redundancy = new float[height];\r
+ for (int i = 0; i < height; i++)\r
+ {\r
+ redundancy[i] = 0f;\r
+ }\r
+\r
+ // if (ap.av.hasHiddenColumns)\r
+ {\r
+ // omitHidden = ap.av.getSelectionAsString();\r
+ }\r
+\r
+\r
+ // long start = System.currentTimeMillis();\r
+\r
+ float pid;\r
+ String seqi, seqj;\r
+ for (int i = 0; i < height; i++)\r
+ {\r
+ originalColours.put(originalSequences[i],\r
+ originalSequences[i].getColor());\r
+\r
+ for (int j = 0; j < i; j++)\r
+ {\r
+ if(i==j)\r
+ continue;\r
+\r
+ if(omitHidden==null)\r
+ {\r
+ seqi = originalSequences[i].getSequence(start, end);\r
+ seqj = originalSequences[j].getSequence(start, end);\r
+ }\r
+ else\r
+ {\r
+ seqi = omitHidden[i];\r
+ seqj = omitHidden[j];\r
+ }\r