X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FAlignmentSorter.java;h=b7cfbbdb3f1f29b8042e9ca11b1971ea2b0c5389;hb=0616883e9c584c0f8600cfec79d9bf50cde337a4;hp=b84eeaf2d690ece19e1e0e898e411ea19c27dd1a;hpb=b81d4d7d46ea8b1c89df086fb847baab6b69d427;p=jalview.git diff --git a/src/jalview/analysis/AlignmentSorter.java b/src/jalview/analysis/AlignmentSorter.java index b84eeaf..b7cfbbd 100755 --- a/src/jalview/analysis/AlignmentSorter.java +++ b/src/jalview/analysis/AlignmentSorter.java @@ -1,19 +1,22 @@ /* - * 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 + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) + * Copyright (C) 2014 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; @@ -146,11 +149,15 @@ public class AlignmentSorter } // NOTE: DO NOT USE align.setSequenceAt() here - it will NOT work - for (int i = 0; i < len; i++) + List asq; + synchronized (asq = align.getSequences()) { - // SequenceI tmp = seqs[i]; - align.getSequences().setElementAt(seqs[nSeq - i - 1], i); - align.getSequences().setElementAt(seqs[i], nSeq - i - 1); + for (int i = 0; i < len; i++) + { + // SequenceI tmp = seqs[i]; + asq.set(i, seqs[nSeq - i - 1]); + asq.set(nSeq - i - 1, seqs[i]); + } } } @@ -178,24 +185,26 @@ public class AlignmentSorter public static void setOrder(AlignmentI align, SequenceI[] seqs) { // NOTE: DO NOT USE align.setSequenceAt() here - it will NOT work - Vector algn = align.getSequences(); - Vector tmp = new Vector(); - - for (int i = 0; i < seqs.length; i++) + List algn; + synchronized (algn = align.getSequences()) { - if (algn.contains(seqs[i])) + List tmp = new ArrayList(); + + for (int i = 0; i < seqs.length; i++) { - tmp.addElement(seqs[i]); + if (algn.contains(seqs[i])) + { + tmp.add(seqs[i]); + } } - } - algn.removeAllElements(); - // User may have hidden seqs, then clicked undo or redo - for (int i = 0; i < tmp.size(); i++) - { - algn.addElement(tmp.elementAt(i)); + algn.clear(); + // User may have hidden seqs, then clicked undo or redo + for (int i = 0; i < tmp.size(); i++) + { + algn.add(tmp.get(i)); + } } - } /** @@ -247,7 +256,7 @@ public class AlignmentSorter for (int i = 0; i < nSeq; i++) { seqs[i] = align.getSequenceAt(i); - length[i] = (float) (seqs[i].getEnd() - seqs[i].getStart()); + length[i] = (seqs[i].getEnd() - seqs[i].getStart()); } QuickSort.sort(length, seqs); @@ -290,7 +299,7 @@ public class AlignmentSorter // SORTS GROUPS BY SIZE // //////////////////// - for (SequenceGroup sg:align.getGroups()) + for (SequenceGroup sg : align.getGroups()) { for (int j = 0; j < groups.size(); j++) { @@ -357,18 +366,20 @@ public class AlignmentSorter } /** - * DOCUMENT ME! + * Select sequences in order from tmp that is present in mask, and any + * remaining seqeunces in mask not in tmp * * @param tmp - * DOCUMENT ME! + * thread safe collection of sequences * @param mask - * DOCUMENT ME! + * thread safe collection of sequences * - * @return DOCUMENT ME! + * @return intersect(tmp,mask)+intersect(complement(tmp),mask) */ - private static SequenceI[] vectorSubsetToArray(Vector tmp, Vector mask) + private static SequenceI[] vectorSubsetToArray(List tmp, + List mask) { - Vector seqs = new Vector(); + ArrayList seqs = new ArrayList(); int i, idx; boolean[] tmask = new boolean[mask.size()]; @@ -379,12 +390,12 @@ public class AlignmentSorter for (i = 0; i < tmp.size(); i++) { - Object sq = tmp.elementAt(i); + SequenceI sq = tmp.get(i); idx = mask.indexOf(sq); if (idx > -1 && tmask[idx]) { tmask[idx] = false; - seqs.addElement(sq); + seqs.add(sq); } } @@ -392,11 +403,11 @@ public class AlignmentSorter { if (tmask[i]) { - seqs.addElement(mask.elementAt(i)); + seqs.add(mask.get(i)); } } - return vectorToArray(seqs); + return seqs.toArray(new SequenceI[seqs.size()]); } /** @@ -461,8 +472,12 @@ public class AlignmentSorter if (tmp.size() != nSeq) { - System.err.println("WARNING: tmp.size()=" + tmp.size() + " != nseq=" - + nSeq + " in getOrderByTree - tree contains sequences not in alignment"); + System.err + .println("WARNING: tmp.size()=" + + tmp.size() + + " != nseq=" + + nSeq + + " in getOrderByTree - tree contains sequences not in alignment"); } } @@ -542,7 +557,7 @@ public class AlignmentSorter * @return DOCUMENT ME! */ private static Vector _sortByTree(SequenceNode node, Vector tmp, - Vector seqset) + List seqset) { if (node == null) { @@ -558,9 +573,11 @@ public class AlignmentSorter { if (node.element() instanceof SequenceI) { - if (!tmp.contains(node.element())) // && (seqset==null || seqset.size()==0 || seqset.contains(tmp))) + if (!tmp.contains(node.element())) // && (seqset==null || + // seqset.size()==0 || + // seqset.contains(tmp))) { - tmp.addElement((SequenceI) node.element()); + tmp.addElement(node.element()); } } } @@ -740,8 +757,7 @@ public class AlignmentSorter if (method != FEATURE_SCORE && method != FEATURE_LABEL && method != FEATURE_DENSITY) { - throw new Error( - "Implementation Error - sortByFeature method must be one of FEATURE_SCORE, FEATURE_LABEL or FEATURE_DENSITY."); + throw new Error(MessageManager.getString("error.implementation_error_sortbyfeature")); } boolean ignoreScore = method != FEATURE_SCORE; StringBuffer scoreLabel = new StringBuffer(); @@ -921,7 +937,7 @@ public class AlignmentSorter { if (method == FEATURE_LABEL) { - throw new Error("Not yet implemented."); + throw new Error(MessageManager.getString("error.not_yet_implemented")); } } if (lastSortByFeatureScore == null