if (i>-1 && i<sequences.size()) {\r
sq = ((SequenceI)sequences.elementAt(i)).getSequence();\r
if (seqNums.size()<=i) {\r
- seqNums.add(new int[sq.length()+1]);\r
+ seqNums.addElement(new int[sq.length()+1]);\r
}\r
if (sq.hashCode()!=((int[])seqNums.elementAt(i))[0])\r
{\r
sqnum[j] = ( (Integer) jalview.schemes.ResidueProperties.aaHash.get(new\r
String(sq.substring(j - 1, j)))).intValue(); // yuk\r
}\r
- seqNums.set(i, sqnum);\r
+ seqNums.setElementAt(sqnum, i);\r
}\r
} else {\r
// JBPNote INFO level debug\r
- System.out.println("calcSeqNum called with out of range sequence index for Alignment\n");\r
+ System.err.println("ERROR: calcSeqNum called with out of range sequence index for Alignment\n");\r
}\r
}\r
Vector total = new Vector();\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
Sequence s = (Sequence)sequences.elementAt(j);\r
\r
}\r
}\r
}\r
+\r
total.addElement(resultHash);\r
}\r
}\r
}\r
return count;\r
}\r
+ /***\r
+ * countConsNGaps\r
+ * returns gap count in int[0], and conserved residue count in int[1]\r
+ */\r
+ public int[] countConsNGaps(int j)\r
+ {\r
+ int count = 0;\r
+ int cons=0;\r
+ int nres = 0;\r
+ int[] r = new int[2];\r
+ char f='$';\r
+ for (int i = 0; i < sequences.size();i++)\r
+ {\r
+ if( j >= ((Sequence)sequences.elementAt(i)).getSequence().length())\r
+ { count++;\r
+ continue;}\r
+\r
+ char c = ((Sequence)sequences.elementAt(i)).getSequence().charAt(j);\r
+ if (jalview.util.Comparison.isGap((c)))\r
+ count++;\r
+ else {\r
+ nres++;\r
+ if (nres==1) {\r
+ f = c;\r
+ cons++;\r
+ } else\r
+ if (f == c) {\r
+ cons++;\r
+ }\r
+ }\r
+ }\r
+ r[0] = (nres==cons) ? 1 : 0;\r
+ r[1] = count;\r
+\r
+\r
+ return r;\r
+ }\r
\r
public void verdict(boolean consflag, float percentageGaps) {\r
String consString = "";\r
\r
for (int i=start; i <= end; i++) {\r
- int totGaps = countGaps(i);\r
+ int[] gapcons = countConsNGaps(i);\r
+ boolean cons = (gapcons[0]==1) ? true : false;\r
+ int totGaps = gapcons[1];\r
float pgaps = (float)totGaps*100/(float)sequences.size();\r
-\r
+ // System.out.println("percentage gaps = "+pgaps+"\n");\r
if (percentageGaps > pgaps)\r
{\r
Hashtable resultHash = (Hashtable)total.elementAt(i-start);\r
}\r
\r
if (count < 10)\r
- consString = consString + String.valueOf(count);\r
+ consString = consString + String.valueOf(count);// Conserved props!=Identity\r
else\r
- consString = consString + "*";\r
+ consString = consString + ((gapcons[0]==1) ? "*" : "+");\r
\r
}\r
else\r
for (int i = 1; i < sqnum.length; i++) {\r
cons2[i-1][sqnum[i]]++;\r
}\r
+ for (int i=sqnum.length-1; i<maxLength; i++) {\r
+ cons2[i][23]++; // gap count\r
+ }\r
j++;\r
}\r
\r
int[] lengths = new int[size];\r
\r
for (int l = 0; l < size; l++)\r
- lengths[l] = ((int[]) seqNums.get(l)).length;\r
+ lengths[l] = ((int[]) seqNums.elementAt(l)).length-1;\r
\r
for (int j=start; j <= end; j++) {\r
double bigtot = 0;\r
x[ii] += (double)cons2[j][i2] * BLOSUM62[ii][i2]+4;\r
}\r
} catch (Exception e) {\r
- System.out.println("Exception : " + e);\r
+ System.err.println("Exception during quality calculation.");\r
+ e.printStackTrace();\r
}\r
//System.out.println("X " + ii + " " + x[ii]);\r
x[ii] /= (size);\r
double tot = 0;\r
double[] xx = new double[24];\r
int seqNum =\r
- ((j+1)<lengths[size])\r
- ? ((int[]) seqNums.get(k))[j+1]\r
+ (j<lengths[k])\r
+ ? ((int[]) seqNums.elementAt(k))[j+1]\r
: 23; // Sequence, or gap at the end\r
\r
// This is a loop over r\r
try {\r
sr = (double)BLOSUM62[i][seqNum]+4;\r
} catch (Exception e) {\r
- System.out.println("Exception in sr " + e);\r
+ System.out.println("Exception in sr: " + e);\r
+ e.printStackTrace();\r
}\r
//Calculate X with another loop over residues\r
\r