*/
public class AlignmentSorter
{
+ /**
+ * todo: refactor searches to follow a basic pattern:
+ * (search property, last search state, current sort direction)
+ */
static boolean sortIdAscending = true;
static int lastGroupHash = 0;
* last Annotation Label used by sortByScore
*/
private static String lastSortByScore;
-
+ private static boolean sortByScoreAscending = true;
/**
* compact representation of last arguments to SortByFeatureScore
*/
private static String lastSortByFeatureScore;
+ private static boolean sortByFeatureScoreAscending = true;
private static boolean sortLengthAscending;
private static SequenceI[] vectorSubsetToArray(Vector tmp, Vector mask)
{
Vector seqs = new Vector();
- int i;
+ int i,idx;
boolean[] tmask = new boolean[mask.size()];
for (i = 0; i < mask.size(); i++)
for (i = 0; i < tmp.size(); i++)
{
Object sq = tmp.elementAt(i);
-
- if (mask.contains(sq) && tmask[mask.indexOf(sq)])
+ idx = mask.indexOf(sq);
+ if (idx>-1 && tmask[idx])
{
- tmask[mask.indexOf(sq)] = false;
+ tmask[idx] = false;
seqs.addElement(sq);
}
}
boolean ignoreScore=method!=FEATURE_SCORE;
StringBuffer scoreLabel = new StringBuffer();
scoreLabel.append(start+stop+method);
- // This doesn't work yet - we'd like to have a canonical ordering that can be preserved from call to call
+ // This doesn't quite work yet - we'd like to have a canonical ordering that can be preserved from call to call
for (int i=0;featureLabels!=null && i<featureLabels.length; i++)
{
scoreLabel.append(featureLabels[i]==null ? "null" : featureLabels[i]);
{
if (!hasScore[i])
{
- scores[i] = (max + i);
+ scores[i] = (max + 1+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]);
+ // System.err.println("Sorting on Score: seq "+seqs[i].getName()+ " Feats: "+nf+" Score : "+scores[i]);
}
}
}
{
double nf;
scores[i] = (0.05+fr*i)+(nf=((feats[i]==null) ? 0.0 :1.0*((SequenceFeature[]) feats[i]).length));
- System.err.println("Sorting on Density: seq "+seqs[i].getName()+ " Feats: "+nf+" Score : "+scores[i]);
+ // System.err.println("Sorting on Density: seq "+seqs[i].getName()+ " Feats: "+nf+" Score : "+scores[i]);
}
jalview.util.QuickSort.sort(scores, seqs);
}
throw new Error("Not yet implemented.");
}
}
- if (lastSortByFeatureScore ==null || scoreLabel.equals(lastSortByFeatureScore))
+ if (lastSortByFeatureScore ==null || !scoreLabel.toString().equals(lastSortByFeatureScore))
{
+ sortByFeatureScoreAscending = true;
+ } else {
+ sortByFeatureScoreAscending = !sortByFeatureScoreAscending;
+ }
+ if (sortByFeatureScoreAscending) {
setOrder(alignment, seqs);
}
else
- {
+ {
setReverseOrder(alignment, seqs);
}
lastSortByFeatureScore = scoreLabel.toString();