X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FAlignment.java;h=86d2c0e4e2ca02264b95132d26eedef5618ecb8a;hb=cd1ded4a9a6f3478f3b704c9c97fd323ac5dbdd7;hp=abc7cf6983bedac4887d188cf163f4c3fbfd1343;hpb=a021dd7b53a19b1805821385fa7beb1fc08df3f1;p=jalview.git diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index abc7cf6..86d2c0e 100755 --- a/src/jalview/datamodel/Alignment.java +++ b/src/jalview/datamodel/Alignment.java @@ -11,8 +11,8 @@ public class Alignment implements AlignmentI protected Vector sequences; protected Vector groups = new Vector(); - public Hashtable[] cons; - protected char gapCharacter = '-'; + protected ArrayList superGroup = new ArrayList(); + protected char gapCharacter = '-'; /** Make an alignment from an array of Sequences. * @@ -40,14 +40,11 @@ public class Alignment implements AlignmentI } /** Adds a sequence to the alignment. Recalculates maxLength and size. - * Should put the new sequence in a sequence group!!! * * @param snew */ public void addSequence(SequenceI snew) { sequences.addElement(snew); - - ((SequenceGroup)groups.lastElement()).addSequence(snew); } public void addSequence(SequenceI[] seq) { @@ -57,8 +54,7 @@ public class Alignment implements AlignmentI } /** Adds a sequence to the alignment. Recalculates maxLength and size. - * Should put the new sequence in a sequence group!!! - * + * * @param snew */ public void setSequenceAt(int i,SequenceI snew) { @@ -66,8 +62,6 @@ public class Alignment implements AlignmentI deleteSequence(oldseq); sequences.setElementAt(snew,i); - - ((SequenceGroup)groups.lastElement()).addSequence(snew); } public Vector getGroups() { @@ -113,7 +107,7 @@ public class Alignment implements AlignmentI if (current.getLength() > i) { /* MC Should move this to a method somewhere */ - if (current.getCharAt(i)!='-' && current.getCharAt(i)!='.' && current.getCharAt(i)!=' ') + if ( !jalview.util.Comparison.isGap(current.getCharAt(i))) delete = false; } @@ -218,35 +212,34 @@ public class Alignment implements AlignmentI public Vector removeRedundancy(float threshold, Vector sel) { Vector del = new Vector(); - for (int i=1; i < sel.size(); i++) { - for (int j = 0; j < i; j++) { + for (int i = 1; i < sel.size(); i++) + { + for (int j = 0; j < i; j++) + { // Only do the comparison if either have not been deleted - if (!del.contains((SequenceI)sel.elementAt(i)) || - !del.contains((SequenceI)sel.elementAt(j))) { + if (!del.contains( (SequenceI) sel.elementAt(i)) || + !del.contains( (SequenceI) sel.elementAt(j))) + { - float pid = Comparison.compare((SequenceI)sel.elementAt(j), - (SequenceI)sel.elementAt(i)); + float pid = Comparison.compare( (SequenceI) sel.elementAt(j), + (SequenceI) sel.elementAt(i)); - if (pid >= threshold) { + if (pid >= threshold) + { // Delete the shortest one - if (((SequenceI)sel.elementAt(j)).getSequence().length() > - ((SequenceI)sel.elementAt(i)).getSequence().length()) { + if ( ( (SequenceI) sel.elementAt(j)).getSequence().length() > + ( (SequenceI) sel.elementAt(i)).getSequence().length()) del.addElement(sel.elementAt(i)); - System.out.println("Deleting sequence " + ((SequenceI)sel.elementAt(i)).getName()); - } else { + else del.addElement(sel.elementAt(i)); - System.out.println("Deleting sequence " + ((SequenceI)sel.elementAt(i)).getName()); - } } } } } // Now delete the sequences - for (int i=0; i < del.size(); i++) { - System.out.println("Deleting sequence " + ((SequenceI)del.elementAt(i)).getName()); + for (int i=0; i < del.size(); i++) deleteSequence((SequenceI)del.elementAt(i)); - } return del; } @@ -320,6 +313,25 @@ public class Alignment implements AlignmentI } return null; + } + + public SequenceGroup [] findAllGroups(SequenceI s) + { + + ArrayList temp = new ArrayList(); + + for (int i = 0; i < this.groups.size();i++) + { + SequenceGroup sg = (SequenceGroup)groups.elementAt(i); + + if (sg.sequences.contains(s)) + temp.add(sg); + } + + SequenceGroup [] ret = new SequenceGroup[temp.size()]; + temp.toArray( ret ); + + return ret; } /** */ @@ -340,16 +352,45 @@ public class Alignment implements AlignmentI } } + public void addSuperGroup(SuperGroup sg) + { + superGroup.add(sg); + } + + public void removeSuperGroup(SuperGroup sg) + { + superGroup.remove(sg); + } + + public SuperGroup getSuperGroup(SequenceGroup sg) + { + for (int i = 0; i < this.superGroup.size(); i++) + { + SuperGroup temp = (SuperGroup) superGroup.get(i); + if (temp.sequenceGroups.contains(sg)) + return temp; + } + return null; + } + /** */ public void addGroup(SequenceGroup sg) { - groups.addElement(sg); + if(!groups.contains(sg)) + groups.addElement(sg); } - /** */ - public SequenceGroup addGroup() { - SequenceGroup sg = new SequenceGroup(); - groups.addElement(sg); - return sg; + public void deleteAllGroups() + { + groups.clear(); + superGroup.clear(); + int i=0; + while (i < sequences.size()) { + SequenceI s = getSequenceAt(i); + s.setColor(java.awt.Color.white); + i++; + } + + } /** */ @@ -386,12 +427,14 @@ public class Alignment implements AlignmentI } /** */ - public int findIndex(SequenceI s) { + public int findIndex(SequenceI s) + { int i=0; - while (i < sequences.size()) { - if (s == getSequenceAt(i)) { + while (i < sequences.size()) + { + if (s == getSequenceAt(i)) return i; - } + i++; } return -1; @@ -451,6 +494,17 @@ public class Alignment implements AlignmentI { return AAFrequency.calculate(sequences, 0, getWidth()); } + + public boolean isAligned() + { + int width = getWidth(); + for (int i = 0; i < sequences.size(); i++) + if (getSequenceAt(i).getLength() != width) + return false; + + return true; + + } }