+ if (sq.hashCode() != ((int[]) seqNums.elementAt(i))[0])\r
+ {\r
+ int j;\r
+ int len;\r
+ seqNumsChanged = true;\r
+ sq = ((SequenceI) sequences.elementAt(i)).getSequence();\r
+ len = sq.length();\r
+\r
+ if (maxLength < len)\r
+ {\r
+ maxLength = len;\r
+ }\r
+\r
+ sqnum = new int[len + 1]; // better to always make a new array - sequence can change its length\r
+ sqnum[0] = sq.hashCode();\r
+\r
+ for (j = 1; j <= len; j++)\r
+ {\r
+ sqnum[j] = ((Integer) jalview.schemes.ResidueProperties.aaHash.get(new String(\r
+ sq.substring(j - 1, j)))).intValue(); // yuk\r
+ }\r
+\r
+ seqNums.setElementAt(sqnum, i);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ // JBPNote INFO level debug\r
+ System.err.println(\r
+ "ERROR: calcSeqNum called with out of range sequence index for Alignment\n");\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Calculates the conservation values for given set of sequences\r
+ */\r
+ public void calculate()\r
+ {\r
+ for (int i = start; i <= end; i++)\r
+ {\r
+ Hashtable resultHash = null;\r
+ Hashtable residueHash = null;\r
+\r
+ resultHash = new Hashtable();\r
+ residueHash = new Hashtable();\r
+\r
+ for (int j = 0; j < sequences.size(); j++)\r
+ {\r
+ // JBPNote - have to make sure elements of the sequences vector\r
+ // are tested like this everywhere...\r
+ if (sequences.elementAt(j) instanceof Sequence)\r
+ {\r
+ Sequence s = (Sequence) sequences.elementAt(j);\r
+\r
+ if (s.getLength() > i)\r
+ {\r
+ String res = s.getSequence().substring(i, i + 1);\r
+\r
+ if (residueHash.containsKey(res))\r
+ {\r
+ int count = ((Integer) residueHash.get(res)).intValue();\r
+ count++;\r
+ residueHash.put(res, new Integer(count));\r
+ }\r
+ else\r
+ {\r
+ residueHash.put(res, new Integer(1));\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if (residueHash.containsKey("-"))\r
+ {\r
+ int count = ((Integer) residueHash.get("-")).intValue();\r
+ count++;\r
+ residueHash.put("-", new Integer(count));\r
+ }\r
+ else\r
+ {\r
+ residueHash.put("-", new Integer(1));\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ //What is the count threshold to count the residues in residueHash()\r
+ int thresh = (threshold * (sequences.size())) / 100;\r
+\r
+ //loop over all the found residues\r
+ Enumeration e = residueHash.keys();\r
+\r
+ while (e.hasMoreElements())\r
+ {\r
+ String res = (String) e.nextElement();\r
+\r
+ if (((Integer) residueHash.get(res)).intValue() > thresh)\r
+ {\r
+ //Now loop over the properties\r
+ Enumeration e2 = propHash.keys();\r
+\r
+ while (e2.hasMoreElements())\r
+ {\r
+ String type = (String) e2.nextElement();\r
+ Hashtable ht = (Hashtable) propHash.get(type);\r
+\r
+ //Have we ticked this before?\r
+ if (!resultHash.containsKey(type))\r
+ {\r
+ if (ht.containsKey(res))\r
+ {\r
+ resultHash.put(type, ht.get(res));\r
+ }\r
+ else\r
+ {\r
+ resultHash.put(type, ht.get("-"));\r
+ }\r
+ }\r
+ else if (((Integer) resultHash.get(type)).equals(\r
+ (Integer) ht.get(res)) == false)\r
+ {\r
+ resultHash.put(type, new Integer(-1));\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ total.addElement(resultHash);\r
+ }\r
+ }\r