From: jprocter Date: Fri, 19 Dec 2008 15:33:39 +0000 (+0000) Subject: left and right justify method X-Git-Tag: Release_2_5~372 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=482e093c4670a813c9eec254990178b209e32dbc;p=jalview.git left and right justify method --- diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index c74be73..64b79b7 100755 --- a/src/jalview/datamodel/Alignment.java +++ b/src/jalview/datamodel/Alignment.java @@ -794,6 +794,98 @@ public class Alignment implements AlignmentI } return modified; } + /** + * Justify the sequences to the left or right by deleting and inserting gaps before the initial residue or after the terminal residue + * @param right true if alignment padded to right, false to justify to left + * @return true if alignment was changed + */ + public boolean justify(boolean right) + { + boolean modified = false; + + // Remove excess gaps from the end of alignment + int maxLength = -1; + int ends[] = new int[sequences.size()*2]; + SequenceI current; + for (int i = 0; i < sequences.size(); i++) + { + current = getSequenceAt(i); + // This should really be a sequence method + ends[i*2] = current.findIndex(current.getStart()); + ends[i*2+1] = current.findIndex(current.getStart()+current.getLength()); + boolean hitres=false; + for (int j = 0,rs=0,ssiz=current.getLength(); jmaxLength) + { + 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