X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fanalysis%2FConservation.java;h=6957b5cb0e3f6ba119dc7c08e18a1a866fe0008d;hb=e9aa1cee679000405c5549829ee08e1c08b2ffd5;hp=b557c5a42a496de8fb2be208da193d91fd0d4e12;hpb=153dd62dc91da13ae732600e6ea55ddbe15eab39;p=jalview.git diff --git a/src/jalview/analysis/Conservation.java b/src/jalview/analysis/Conservation.java index b557c5a..6957b5c 100755 --- a/src/jalview/analysis/Conservation.java +++ b/src/jalview/analysis/Conservation.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) + * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle * * This file is part of Jalview. * @@ -85,9 +85,8 @@ public class Conservation * end residue position */ public Conservation(String name, Hashtable propHash, int threshold, - Vector sequences, int start, int end) + List sequences, int start, int end) { - this.name = name; this.propHash = propHash; this.threshold = threshold; @@ -100,15 +99,21 @@ public class Conservation int s, sSize = sequences.size(); SequenceI[] sarray = new SequenceI[sSize]; this.sequences = sarray; - + try { for (s = 0; s < sSize; s++) { - sarray[s] = (SequenceI) sequences.elementAt(s); + sarray[s] = (SequenceI) sequences.get(s); if (sarray[s].getLength() > maxLength) { maxLength = sarray[s].getLength(); } } + } catch (ArrayIndexOutOfBoundsException ex) + { + // bail - another thread has modified the sequence array, so the current calculation is probably invalid. + this.sequences=new SequenceI[0]; + maxLength=0; + } } /** @@ -271,7 +276,9 @@ public class Conservation } } - total[i - start] = resultHash; + if (total.length>0) { + total[i - start] = resultHash; + } } } @@ -687,4 +694,42 @@ public class Conservation } } } + + /** + * construct and call the calculation methods on a new Conservation object + * @param name - name of conservation + * @param consHash - hash table of properties for each amino acid (normally ResidueProperties.propHash) + * @param threshold - minimum number of conserved residues needed to indicate conservation (typically 3) + * @param seqs + * @param start first column in calculation window + * @param end last column in calculation window + * @param posOrNeg positive (true) or negative (false) conservation + * @param consPercGaps percentage of gaps tolerated in column + * @param calcQuality flag indicating if alignment quality should be calculated + * @return Conservation object ready for use in visualization + */ + public static Conservation calculateConservation(String name, + Hashtable consHash, int threshold, List seqs, int start, int end, boolean posOrNeg, int consPercGaps, boolean calcQuality) + { + Conservation cons = new Conservation(name, consHash, threshold, seqs, start,end); + return calculateConservation(cons, posOrNeg, consPercGaps, calcQuality); + } + /** + * @param b positive (true) or negative (false) conservation + * @param consPercGaps percentage of gaps tolerated in column + * @param calcQuality flag indicating if alignment quality should be calculated + * @return Conservation object ready for use in visualization + */ + public static Conservation calculateConservation(Conservation cons, boolean b, int consPercGaps, boolean calcQuality) + { + cons.calculate(); + cons.verdict(b, consPercGaps); + + if (calcQuality) + { + cons.findQuality(); + } + + return cons; + } }