From e33cdacd2ac2836504375c538574a0f1cafec7e3 Mon Sep 17 00:00:00 2001 From: jprocter Date: Wed, 26 Jul 2006 13:32:37 +0000 Subject: [PATCH] Implemented CIGAR representation of an Alignment view for passing to analysis'. --- src/jalview/analysis/NJTree.java | 81 +- src/jalview/appletgui/TreePanel.java | 2 +- src/jalview/datamodel/Alignment.java | 1607 ++++++++++++++-------------- src/jalview/datamodel/AlignmentI.java | 6 +- src/jalview/datamodel/ColumnSelection.java | 915 ++++++++-------- src/jalview/gui/AlignViewport.java | 81 ++ src/jalview/gui/TreePanel.java | 46 +- src/jalview/jbgui/GTreePanel.java | 2 +- 8 files changed, 1459 insertions(+), 1281 deletions(-) diff --git a/src/jalview/analysis/NJTree.java b/src/jalview/analysis/NJTree.java index 423e235..98916e3 100755 --- a/src/jalview/analysis/NJTree.java +++ b/src/jalview/analysis/NJTree.java @@ -42,7 +42,7 @@ public class NJTree //SequenceData is a string representation of what the user //sees. The display may contain hidden columns. - String [] sequenceString; + CigarArray seqData=null; int[] done; int noseqs; @@ -69,18 +69,42 @@ public class NJTree private boolean hasRootDistance = true; + /** + * Create a new NJTree object with leaves associated with sequences in seqs, + * and original alignment data represented by Cigar strings. + * @param seqs SequenceI[] + * @param odata Cigar[] + * @param treefile NewickFile + */ + public NJTree(SequenceI[] seqs, CigarArray odata, NewickFile treefile) { + this(seqs, treefile); + if (odata!=null) + seqData = odata; + /* + sequenceString = new String[odata.length]; + char gapChar = jalview.util.Comparison.GapChars.charAt(0); + for (int i = 0; i < odata.length; i++) + { + SequenceI oseq_aligned = odata[i].getSeq(gapChar); + sequenceString[i] = oseq_aligned.getSequence(); + } */ + } /** - * Creates a new NJTree object. + * Creates a new NJTree object from a tree from an external source * - * @param seqs DOCUMENT ME! - * @param treefile DOCUMENT ME! + * @param seqs SequenceI which should be associated with leafs of treefile + * @param treefile A parsed tree */ public NJTree(SequenceI[] seqs, NewickFile treefile) { this.sequence = seqs; top = treefile.getTree(); + /** + * There is no dependent alignment to be recovered from an + * imported tree. + * if (sequenceString == null) { sequenceString = new String[seqs.length]; @@ -89,7 +113,7 @@ public class NJTree sequenceString[i] = seqs[i].getSequence(); } } - + */ hasDistances = treefile.HasDistances(); hasBootstrap = treefile.HasBootstrap(); @@ -143,7 +167,7 @@ public class NJTree * @param end DOCUMENT ME! */ public NJTree(SequenceI[] sequence, - String [] sequenceString, + CigarArray seqData, String type, String pwtype, int start, int end) @@ -152,18 +176,17 @@ public class NJTree this.node = new Vector(); this.type = type; this.pwtype = pwtype; - - if (sequenceString == null) - { - this.sequenceString = new String[sequence.length]; + if (seqData!=null) { + this.seqData = seqData; + } else { + SeqCigar[] seqs = new SeqCigar[sequence.length]; for(int i=0; i width) - { - width = seqs[i].getLength(); - } - } - - int startCol = -1, endCol = -1; - boolean delete = true; - for (int i = 0; i < width; i++) - { - delete = true; - - for (j = 0; j < jSize; j++) - { - if (seqs[j].getLength() > i) - { - if (!jalview.util.Comparison.isGap(seqs[j].getCharAt(i))) - { - if(delete) - endCol = i; - - delete = false; - break; - } - } - - } - - if(delete && startCol==-1) - { - startCol = i; - } - - - if (!delete && startCol > -1) - { - deleteColumns(seqs, startCol, endCol); - width -= (endCol - startCol); - i -= (endCol - startCol); - startCol = -1; - endCol = -1; - } - } - - if (delete && startCol > -1) - { - deleteColumns(seqs, startCol, endCol); - } - - } - - /** Removes a range of columns (start to end inclusive). - * - * @param seqs Sequences to remove columns from - * @param start Start column in the alignment - * @param end End column in the alignment - */ - public void deleteColumns(SequenceI [] seqs, int start, int end) - { - for(int i=0; iseqs[j].getLength()) - { - sequences.removeElement(seqs[j]); - j--; - jSize--; - } - else - { - seqs[j].setStart(newstart); - seqs[j].setSequence(seqs[j].getSequence().substring(i)); - } - } - } - - /** - * DOCUMENT ME! - * - * @param i DOCUMENT ME! - */ - public void trimRight(int i) - { - SequenceI[] seqs = getVisibleAndRepresentedSeqs(); - int j, jSize = seqs.length; - for (j = 0; j < jSize; j++) - { - int newend = seqs[j].findPosition(i); - - seqs[j].setEnd(newend); - if(seqs[j].getLength()>i) - seqs[j].setSequence(seqs[j].getSequence().substring(0, i + 1)); - } - } - - /** - * DOCUMENT ME! - * - * @param s DOCUMENT ME! - */ - public void deleteSequence(SequenceI s) - { - for (int i = 0; i < getHeight(); i++) - { - if (getSequenceAt(i) == s) - { - deleteSequence(i); - } - } - } - - /** - * DOCUMENT ME! - * - * @param i DOCUMENT ME! - */ - public void deleteSequence(int i) - { - sequences.removeElementAt(i); - } - - - /** */ - public SequenceGroup findGroup(SequenceI s) - { - for (int i = 0; i < this.groups.size(); i++) - { - SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - - if (sg.getSequences(false).contains(s)) - { - return sg; - } - } - - return null; - } - - /** - * DOCUMENT ME! - * - * @param s DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public SequenceGroup[] findAllGroups(SequenceI s) - { - Vector temp = new Vector(); - - int gSize = groups.size(); - for (int i = 0; i < gSize; i++) - { - SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - if(sg==null || sg.getSequences(false)==null) - { - this.deleteGroup(sg); - gSize--; - continue; - } - - if (sg.getSequences(false).contains(s)) - { - temp.addElement(sg); - } - } - - SequenceGroup[] ret = new SequenceGroup[temp.size()]; - - for (int i = 0; i < temp.size(); i++) - { - ret[i] = (SequenceGroup) temp.elementAt(i); - } - - return ret; - } - - - - /** */ - public void addGroup(SequenceGroup sg) - { - if (!groups.contains(sg)) - { - groups.addElement(sg); - } - } - - /** - * DOCUMENT ME! - */ - public void deleteAllGroups() - { - groups.removeAllElements(); - - int i = 0; - - while (i < sequences.size()) - { - SequenceI s = getSequenceAt(i); - s.setColor(java.awt.Color.white); - i++; - } - } - - /** */ - public void deleteGroup(SequenceGroup g) - { - if (groups.contains(g)) - { - groups.removeElement(g); - } - } - - /** */ - public SequenceI findName(String name) - { - int i = 0; - - while (i < sequences.size()) - { - if (getSequenceAt(i).getName().equals(name)) - { - return getSequenceAt(i); - } - - i++; - } - - return null; - } - - - /** */ - public int findIndex(SequenceI s) - { - int i = 0; - - while (i < sequences.size()) - { - if (s == getSequenceAt(i)) - { - return i; - } - - i++; - } - - return -1; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getHeight() - { - return sequences.size(); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getWidth() - { - int maxLength = -1; - - for (int i = 0; i < sequences.size(); i++) - { - if (getSequenceAt(i).getLength() > maxLength) - { - maxLength = getSequenceAt(i).getLength(); - } - } - - return maxLength; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getMaxIdLength() - { - int max = 0; - int i = 0; - - while (i < sequences.size()) - { - SequenceI seq = getSequenceAt(i); - String tmp = seq.getName() + "/" + seq.getStart() + "-" + - seq.getEnd(); - - if (tmp.length() > max) - { - max = tmp.length(); - } - - i++; - } - - return max; - } - - /** - * DOCUMENT ME! - * - * @param gc DOCUMENT ME! - */ - public void setGapCharacter(char gc) - { - gapCharacter = gc; - - for (int i = 0; i < sequences.size(); i++) - { - Sequence seq = (Sequence) sequences.elementAt(i); - seq.setSequence( seq.getSequence().replace('.', gc) ); - seq.setSequence( seq.getSequence().replace('-', gc) ); - seq.setSequence( seq.getSequence().replace(' ', gc) ); - } - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public char getGapCharacter() - { - return gapCharacter; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public Vector getAAFrequency() - { - return AAFrequency.calculate(sequences, 0, getWidth()); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public boolean isAligned() - { - int width = getWidth(); - - for (int i = 0; i < sequences.size(); i++) - { - if (getSequenceAt(i).getLength() != width) - { - return false; - } - } - - return true; - } - - /** - * DOCUMENT ME! - * - * @param aa DOCUMENT ME! - */ - public void deleteAnnotation(AlignmentAnnotation aa) - { - int aSize = 1; - - if (annotations != null) - { - aSize = annotations.length; - } - - AlignmentAnnotation[] temp = new AlignmentAnnotation[aSize - 1]; - - int tIndex = 0; - - for (int i = 0; i < aSize; i++) - { - if (annotations[i] == aa) - { - continue; - } - - temp[tIndex] = annotations[i]; - tIndex++; - } - - annotations = temp; - } - - - public void adjustSequenceAnnotations() - { - if(annotations!=null) - { - for (int a = 0; a < annotations.length; a++) - { - if (annotations[a].sequenceRef != null) - { - annotations[a].adjustForAlignment(); - } - } - } - } - - /** - * DOCUMENT ME! - * - * @param aa DOCUMENT ME! - */ - public void addAnnotation(AlignmentAnnotation aa) - { - int aSize = 1; - if (annotations != null) - { - aSize = annotations.length + 1; - } - - AlignmentAnnotation[] temp = new AlignmentAnnotation[aSize]; - - temp[aSize-1] = aa; - - int i = 0; - - if (aSize > 1) - { - for (i = 0; i < (aSize-1); i++) - { - temp[i] = annotations[i]; - } - } - - annotations = temp; - } - - public void setAnnotationIndex(AlignmentAnnotation aa, int index) - { - if(aa==null || annotations==null || annotations.length-1 maxLength; j--) - { - if (j > maxLength && !jalview.util.Comparison.isGap( - current.getCharAt(j))) - { - maxLength = j; - break; - } - } - } - - maxLength++; - - for (int i = 0; i < sequences.size(); - i++) - { - current = getSequenceAt(i); - - if (current.getLength() < maxLength) - { - current.insertCharAt(maxLength - 1, gapCharacter); - modified=true; - } - else if(current.getLength() > maxLength) - { - current.deleteChars(maxLength, current.getLength()); - } - } - return modified; - } - - public HiddenSequences getHiddenSequences() - { - return hiddenSequences; - } - - SequenceI [] getVisibleAndRepresentedSeqs() - { - if(hiddenSequences==null || hiddenSequences.getSize()<1) - return getSequencesArray(); - - Vector seqs = new Vector(); - SequenceI seq; - SequenceGroup hidden; - for (int i = 0; i < sequences.size(); i++) - { - seq = (SequenceI) sequences.elementAt(i); - seqs.addElement(seq); - hidden = seq.getHiddenSequences(); - if(hidden!=null) - { - for(int j=0; j