X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FGrouping.java;h=e4c9cea07c0843b0add0edcd62e20c94e72de747;hb=47168f025aefdaa044802bd5f8f510ffe43a4808;hp=bba668db9e68a827b95320c8a99b887513ac6942;hpb=87deef0fa44f3aa7d7d86ac7241a9d8c93b2408f;p=jalview.git
diff --git a/src/jalview/analysis/Grouping.java b/src/jalview/analysis/Grouping.java
index bba668d..e4c9cea 100644
--- a/src/jalview/analysis/Grouping.java
+++ b/src/jalview/analysis/Grouping.java
@@ -1,51 +1,76 @@
+/*
+ * 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.
+ *
+ * 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 .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.analysis;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
-import java.util.Enumeration;
import java.util.Hashtable;
+import java.util.List;
import java.util.Vector;
/**
- * various methods for defining groups on an alignment based on some other properties
+ * various methods for defining groups on an alignment based on some other
+ * properties
+ *
* @author JimP
- *
+ *
*/
public class Grouping
{
/**
- * Divide the given sequences based on the equivalence of their corresponding selectedChars string. If exgroups is provided, existing groups will be subdivided.
+ * Divide the given sequences based on the equivalence of their corresponding
+ * selectedChars string. If exgroups is provided, existing groups will be
+ * subdivided.
+ *
* @param sequences
* @param selectedChars
- * @param exgroups
+ * @param list
* @return
*/
- public static SequenceGroup[] makeGroupsFrom(SequenceI[] sequences, String[] selectedChars, Vector exgroups)
+ public static SequenceGroup[] makeGroupsFrom(SequenceI[] sequences,
+ String[] selectedChars, List list)
{
- // TODO: determine how to get/recover input data for group generation
+ // TODO: determine how to get/recover input data for group generation
Hashtable gps = new Hashtable();
- int width = 0,i;
+ int width = 0, i;
Hashtable pgroup = new Hashtable();
- if (exgroups!=null)
+ if (list != null)
{
- SequenceGroup sg;
- for (Enumeration g=exgroups.elements(); g.hasMoreElements(); )
+ for (SequenceGroup sg : list)
{
- sg = (SequenceGroup) g.nextElement();
- for (Enumeration sq = sg.getSequences(null).elements(); sq.hasMoreElements(); )
- pgroup.put(sq.nextElement().toString(), sg);
+ for (SequenceI sq : sg.getSequences(null))
+ {
+ pgroup.put(sq.toString(), sg);
+ }
}
}
for (i = 0; i < sequences.length; i++)
{
String schar = selectedChars[i];
- SequenceGroup pgp = (SequenceGroup) pgroup.get(((Object) sequences[i]).toString());
- if (pgp!=null)
+ SequenceGroup pgp = (SequenceGroup) pgroup
+ .get(((Object) sequences[i]).toString());
+ if (pgp != null)
{
- schar = pgp.getName()+":"+schar;
+ schar = pgp.getName() + ":" + schar;
}
Vector svec = (Vector) gps.get(schar);
if (svec == null)
@@ -53,7 +78,7 @@ public class Grouping
svec = new Vector();
gps.put(schar, svec);
}
- if (width sstop)
- ||
- // or ignore based on selection criteria
- (featureLabels != null && !AlignmentSorter.containsIgnoreCase(sf[f].type, featureLabels))
- || (groupLabels != null
- // problem here: we cannot eliminate null feature group features
- && (sf[f].getFeatureGroup() != null
- && !AlignmentSorter.containsIgnoreCase(sf[f].getFeatureGroup(), groupLabels))))
- {
- // forget about this feature
- sf[f] = null;
- n--;
- } else {
- // or, also take a look at the scores if necessary.
- if (!ignoreScore && sf[f].getScore()!=Float.NaN)
- {
- if (seqScores[i]==0)
- {
- hasScores++;
- }
- seqScores[i]++;
- hasScore[i] = true;
- scores[i] += sf[f].getScore(); // take the first instance of this
- // score.
- }
- }
- }
- SequenceFeature[] fs;
- feats[i] = fs = new SequenceFeature[n];
- if (n>0)
- {
- n=0;
- for (int f=0;f scores[i])
- {
- min = scores[i];
- }
- }
- }
- }
-
- if (method==FEATURE_SCORE)
- {
- if (hasScores == 0)
- {
- return; // do nothing - no scores present to sort by.
- }
- // pad score matrix
- if (hasScores < seqs.length)
- {
- for (int i = 0; i < seqs.length; i++)
- {
- if (!hasScore[i])
- {
- scores[i] = (max + i);
- } else {
- int nf=(feats[i]==null) ? 0 :((SequenceFeature[]) feats[i]).length;
- System.err.println("Sorting on Score: seq "+seqs[i].getName()+ " Feats: "+nf+" Score : "+scores[i]);
- }
- }
- }
-
- jalview.util.QuickSort.sort(scores, seqs);
- }
- else
- if (method==FEATURE_DENSITY)
- {
-
- // break ties between equivalent numbers for adjacent sequences by adding 1/Nseq*i on the original order
- double fr = 0.9/(1.0*seqs.length);
- for (int i=0;i sstop) || // or ignore based on
+ * selection criteria (featureLabels != null &&
+ * !AlignmentSorter.containsIgnoreCase(sf[f].type, featureLabels)) ||
+ * (groupLabels != null // problem here: we cannot eliminate null feature
+ * group features && (sf[f].getFeatureGroup() != null &&
+ * !AlignmentSorter.containsIgnoreCase(sf[f].getFeatureGroup(),
+ * groupLabels)))) { // forget about this feature sf[f] = null; n--; } else
+ * { // or, also take a look at the scores if necessary. if (!ignoreScore &&
+ * sf[f].getScore()!=Float.NaN) { if (seqScores[i]==0) { hasScores++; }
+ * seqScores[i]++; hasScore[i] = true; scores[i] += sf[f].getScore(); //
+ * take the first instance of this // score. } } } SequenceFeature[] fs;
+ * feats[i] = fs = new SequenceFeature[n]; if (n>0) { n=0; for (int
+ * f=0;f scores[i]) {
+ * min = scores[i]; } } } }
+ *
+ * if (method==FEATURE_SCORE) { if (hasScores == 0) { return; // do nothing
+ * - no scores present to sort by. } // pad score matrix if (hasScores <
+ * seqs.length) { for (int i = 0; i < seqs.length; i++) { if (!hasScore[i])
+ * { scores[i] = (max + i); } else { int nf=(feats[i]==null) ? 0
+ * :((SequenceFeature[]) feats[i]).length;
+ * System.err.println("Sorting on Score: seq "+seqs[i].getName()+
+ * " Feats: "+nf+" Score : "+scores[i]); } } }
+ *
+ * jalview.util.QuickSort.sort(scores, seqs); } else if
+ * (method==FEATURE_DENSITY) {
+ *
+ * // break ties between equivalent numbers for adjacent sequences by adding
+ * 1/Nseq*i on the original order double fr = 0.9/(1.0*seqs.length); for
+ * (int i=0;i