X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FConservation.java;h=1aa29e0f85885efa9223338770df8ec4154ac5c1;hb=e309b8d9bd62fb304fdd612c7385e76027d2f2d7;hp=04914fc181863d11a7e7cf4e744de6c52c1464ae;hpb=be415b56e8ce1bc00f5004c64793ce5d0cb17be8;p=jalview.git diff --git a/src/jalview/analysis/Conservation.java b/src/jalview/analysis/Conservation.java index 04914fc..1aa29e0 100755 --- a/src/jalview/analysis/Conservation.java +++ b/src/jalview/analysis/Conservation.java @@ -1,19 +1,22 @@ /* - * 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-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.analysis; @@ -68,6 +71,8 @@ public class Conservation int[][] cons2; + private String[] consSymbs; + /** * Creates a new Conservation object. * @@ -85,7 +90,7 @@ 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; @@ -99,20 +104,22 @@ public class Conservation int s, sSize = sequences.size(); SequenceI[] sarray = new SequenceI[sSize]; this.sequences = sarray; - try { - for (s = 0; s < sSize; s++) + try { - sarray[s] = (SequenceI) sequences.elementAt(s); - if (sarray[s].getLength() > maxLength) + for (s = 0; s < sSize; s++) { - maxLength = sarray[s].getLength(); + 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; + // bail - another thread has modified the sequence array, so the current + // calculation is probably invalid. + this.sequences = new SequenceI[0]; + maxLength = 0; } } @@ -276,7 +283,8 @@ public class Conservation } } - if (total.length>0) { + if (total.length > 0) + { total[i - start] = resultHash; } } @@ -360,17 +368,17 @@ public class Conservation { consString.append('-'); } - + consSymbs = new String[end-start+1]; for (int i = start; i <= end; i++) { gapcons = countConsNGaps(i); totGaps = gapcons[1]; pgaps = ((float) totGaps * 100) / (float) sequences.length; - + consSymbs[i-start]=new String(); + if (percentageGaps > pgaps) { resultHash = total[i - start]; - // Now find the verdict count = 0; enumeration = resultHash.keys(); @@ -379,12 +387,12 @@ public class Conservation { type = (String) enumeration.nextElement(); result = (Integer) resultHash.get(type); - // Do we want to count +ve conservation or +ve and -ve cons.? if (consflag) { if (result.intValue() == 1) { + consSymbs[i-start] = type+" "+consSymbs[i-start]; count++; } } @@ -392,6 +400,14 @@ public class Conservation { if (result.intValue() != -1) { + { + if (result.intValue()==0) { + consSymbs[i-start] = consSymbs[i-start]+ " !"+type; + } else { + consSymbs[i-start] = type+" "+consSymbs[i-start]; + } + } + count++; } } @@ -677,7 +693,7 @@ public class Conservation float vprop = value - min; vprop /= max; conservation.annotations[i] = new Annotation(String.valueOf(c), - String.valueOf(value), ' ', value, new Color(minR + consSymbs[i-start], ' ', value, new Color(minR + (maxR * vprop), minG + (maxG * vprop), minB + (maxB * vprop))); @@ -694,4 +710,61 @@ 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; + } }