X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FAlignment.java;h=afe70328877239ab9a727083384405a44644bb14;hb=1dabf099b7c77fb0a80039f72cef34669df9b2e1;hp=1312e224498b9d54115c43c5e0cecc8d0906321d;hpb=506d60f0e188723ddc91c26824b41ac7034df3fe;p=jalview.git diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index 1312e22..afe7032 100755 --- a/src/jalview/datamodel/Alignment.java +++ b/src/jalview/datamodel/Alignment.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) - * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) + * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -25,6 +25,10 @@ import jalview.analysis.*; /** * Data structure to hold and manipulate a multiple sequence alignment */ +/** + * @author JimP + * + */ public class Alignment implements AlignmentI { protected Alignment dataset; @@ -352,6 +356,14 @@ public class Alignment implements AlignmentI { if (groups.contains(g)) { + if (annotations!=null && annotations.length>0) + { + if (g.hasAnnotationRows()) + { // remove any annotation references. + deleteAnnotation(g.getConsensus());// todo - create=false flag so we don't create another object unnecessarily + deleteAnnotation(g.getConservationRow()); + } + } groups.removeElement(g); } } @@ -442,7 +454,11 @@ public class Alignment implements AlignmentI } - /** */ + /* + * (non-Javadoc) + * + * @see jalview.datamodel.AlignmentI#findIndex(jalview.datamodel.SequenceI) + */ public int findIndex(SequenceI s) { int i = 0; @@ -460,6 +476,26 @@ public class Alignment implements AlignmentI return -1; } + /* + * (non-Javadoc) + * + * @see jalview.datamodel.AlignmentI#findIndex(jalview.datamodel.SearchResults) + */ + public int findIndex(SearchResults results) + { + int i = 0; + + while (i < sequences.size()) + { + if (results.involvesSequence(getSequenceAt(i))) + { + return i; + } + i++; + } + return -1; + } + /** * DOCUMENT ME! * @@ -582,14 +618,19 @@ public class Alignment implements AlignmentI return swap; } - /** - * DOCUMENT ME! - * - * @param aa - * DOCUMENT ME! + /* (non-Javadoc) + * @see jalview.datamodel.AlignmentI#addAnnotation(jalview.datamodel.AlignmentAnnotation) */ public void addAnnotation(AlignmentAnnotation aa) { + addAnnotation(aa, -1); + } + + /* (non-Javadoc) + * @see jalview.datamodel.AlignmentI#addAnnotation(jalview.datamodel.AlignmentAnnotation, int) + */ + public void addAnnotation(AlignmentAnnotation aa, int pos) + { int aSize = 1; if (annotations != null) { @@ -597,16 +638,24 @@ public class Alignment implements AlignmentI } AlignmentAnnotation[] temp = new AlignmentAnnotation[aSize]; - - temp[aSize - 1] = aa; - int i = 0; - + if (pos==-1 || pos>=aSize) { + temp[aSize - 1] = aa; + } else { + temp[pos] = aa; + } if (aSize > 1) { - for (i = 0; i < (aSize - 1); i++) + int p=0; + for (i = 0; i < (aSize-1); i++,p++) { - temp[i] = annotations[i]; + if (p==pos) + { + p++; + } + if (pmaxLength) + { + maxLength = j-ends[i*2]; + } + } + } + } + } + + maxLength++; + // now edit the flanking gaps to justify to either left or right + int cLength,extent,diff; + for (int i = 0; i < sequences.size(); i++) + { + current = getSequenceAt(i); + + cLength = 1+ends[i*2+1]-ends[i*2]; + diff = maxLength-cLength; // number of gaps to indent + extent = current.getLength(); + if (right) + { + // right justify + if (extent>ends[i*2+1]) + { + current.deleteChars(ends[i*2+1]+1, extent); + modified = true; + } + if (ends[i*2]>diff) + { + current.deleteChars(0, ends[i*2]-diff); + modified = true; + } else { + if (ends[i*2]0) + { + current.deleteChars(0, ends[i*2]); + modified = true; + ends[i*2+1]-=ends[i*2]; + extent-=ends[i*2]; + } + if (extent>maxLength) + { + current.deleteChars(maxLength+1, extent); + modified = true; + } else { + if (extent