X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequence.java;h=a0a858a8dd408f7845db84ae69ce183cd50d1b18;hb=51bbc79eee43d019f9fcb14b7aa6e0a0c2c99f76;hp=16cf4b8ecf93b462e19558eae3192e5d292e73e4;hpb=290e789d9c307fec3987c2fc2b470774b58dd874;p=jalview.git diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index 16cf4b8..a0a858a 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -18,9 +18,9 @@ */ package jalview.datamodel; -import java.awt.*; import java.util.*; +import jalview.analysis.AlignSeq; /** @@ -33,11 +33,10 @@ public class Sequence implements SequenceI { SequenceI datasetSequence; String name; - private String sequence; + private char [] sequence; String description; int start; int end; - Color color = Color.white; Vector pdbIds; String vamsasId; DBRefEntry[] dbrefs; @@ -49,10 +48,6 @@ public class Sequence implements SequenceI /** DOCUMENT ME!! */ public SequenceFeature[] sequenceFeatures; - /** This array holds hidden sequences - * of which this sequence is the representitive member of a group - */ - SequenceGroup hiddenSequences; /** * Creates a new Sequence object. @@ -65,12 +60,20 @@ public class Sequence implements SequenceI public Sequence(String name, String sequence, int start, int end) { this.name = name; - this.sequence = sequence; + this.sequence = sequence.toCharArray(); this.start = start; this.end = end; - parseId(); + checkValidRange(); + } + public Sequence(String name, char [] sequence, int start, int end) + { + this.name = name; + this.sequence = sequence; + this.start = start; + this.end = end; + parseId(); checkValidRange(); } @@ -97,11 +100,9 @@ public class Sequence implements SequenceI if (end < 1) { int endRes = 0; - char ch; - for (int j = 0; j < sequence.length(); j++) + for (int j = 0; j < sequence.length; j++) { - ch = sequence.charAt(j); - if (!jalview.util.Comparison.isGap( (ch))) + if (!jalview.util.Comparison.isGap( sequence[j] )) { endRes++; } @@ -134,9 +135,14 @@ public class Sequence implements SequenceI */ public Sequence(SequenceI seq) { - this(seq.getName(), seq.getSequence(), seq.getStart(), seq.getEnd()); + this(seq.getName(), + seq.getSequence(), + seq.getStart(), + seq.getEnd()); + description = seq.getDescription(); } + /** * DOCUMENT ME! * @@ -169,6 +175,44 @@ public class Sequence implements SequenceI sequenceFeatures = temp; } + public void deleteFeature(SequenceFeature sf) + { + if(sequenceFeatures==null) + return; + + int index=0; + for (index = 0; index < sequenceFeatures.length; index++) + { + if (sequenceFeatures[index].equals(sf)) + { + break; + } + } + + + if(index==sequenceFeatures.length) + return; + + int sfLength = sequenceFeatures.length; + if(sfLength<2) + { + sequenceFeatures = null; + } + else + { + SequenceFeature[] temp = new SequenceFeature[sfLength-1]; + System.arraycopy(sequenceFeatures, 0, temp, 0, index); + + if(index= sequence.length()) + if (start >= sequence.length) { - return ""; + return new char[0]; } - if (end >= sequence.length()) + if (end >= sequence.length) { - end = sequence.length(); + end = sequence.length; } - return this.sequence.substring(start, end); + char [] reply = new char[end-start]; + System.arraycopy(sequence, start, reply, 0, end-start); + + return reply; } + /** * make a new Sequence object from start to end (including gaps) over this seqeunce * @param start int @@ -349,14 +404,18 @@ public class Sequence implements SequenceI { if (start < 0) start = 0; - String seq = getSequence(start, end); - if (seq == "") + char [] seq = getSequence(start, end); + if (seq.length == 0) return null; int nstart = findPosition(start); int nend = findPosition(end) - 1; // JBPNote - this is an incomplete copy. SequenceI nseq = new Sequence(this.getName(), seq, nstart, nend); - nseq.setDatasetSequence(getDatasetSequence()); + nseq.setDescription(description); + if (datasetSequence!=null) + nseq.setDatasetSequence(datasetSequence); + else + nseq.setDatasetSequence(this); return nseq; } @@ -369,9 +428,9 @@ public class Sequence implements SequenceI */ public char getCharAt(int i) { - if (i < sequence.length()) + if (i < sequence.length) { - return sequence.charAt(i); + return sequence[i]; } else { @@ -412,9 +471,9 @@ public class Sequence implements SequenceI int j = start; int i = 0; - while ( (i < sequence.length()) && (j <= end) && (j <= pos)) + while ( (i < sequence.length) && (j <= end) && (j <= pos)) { - if (!jalview.util.Comparison.isGap(sequence.charAt(i))) + if (!jalview.util.Comparison.isGap(sequence[i])) { j++; } @@ -443,10 +502,10 @@ public class Sequence implements SequenceI { int j = 0; int pos = start; - int seqlen = sequence.length(); + int seqlen = sequence.length; while ( (j < i) && (j < seqlen)) { - if (!jalview.util.Comparison.isGap( (sequence.charAt(j)))) + if (!jalview.util.Comparison.isGap( sequence[j] )) { pos++; } @@ -465,14 +524,14 @@ public class Sequence implements SequenceI public int[] gapMap() { String seq = jalview.analysis.AlignSeq.extractGaps(jalview.util.Comparison. - GapChars, sequence); + GapChars, new String(sequence)); int[] map = new int[seq.length()]; int j = 0; int p = 0; - while (j < sequence.length()) + while (j < sequence.length) { - if (!jalview.util.Comparison.isGap(sequence.charAt(j))) + if (!jalview.util.Comparison.isGap(sequence[j])) { map[p++] = j; } @@ -487,40 +546,54 @@ public class Sequence implements SequenceI * DOCUMENT ME! * * @param i DOCUMENT ME! - */ - public void deleteCharAt(int i) - { - if (i >= sequence.length()) - { - return; - } - - sequence = sequence.substring(0, i) + sequence.substring(i + 1); - } - - /** - * DOCUMENT ME! - * - * @param i DOCUMENT ME! * @param j DOCUMENT ME! */ public void deleteChars(int i, int j) { - if (i >= sequence.length()) + if (i >= sequence.length) { return; } - if (j >= sequence.length()) + char [] tmp; + + if (j >= sequence.length) { - sequence = sequence.substring(0, i); + tmp = new char[i]; + System.arraycopy(sequence,0,tmp,0,i); } else { - sequence = sequence.substring(0, i) + sequence.substring(j); + tmp = new char[sequence.length-j+i]; + System.arraycopy(sequence,0,tmp,0,i); + System.arraycopy(sequence,j,tmp,i,sequence.length-j); } + + if (this.datasetSequence != null) + { + for (int s = i; s < j; s++) + { + if (jalview.schemes.ResidueProperties.aaIndex[sequence[s]] != 23) + { + + Sequence ds = new Sequence(name, + AlignSeq.extractGaps( + jalview.util.Comparison.GapChars, + this.getSequenceAsString() + ), + start, + end); + ds.setDescription(description); + } + break; + } + } + + sequence = tmp; + } + /** * DOCUMENT ME! * @@ -530,27 +603,32 @@ public class Sequence implements SequenceI */ public void insertCharAt(int i, int length, char c) { - StringBuffer tmp; + char [] tmp = new char[sequence.length+length]; - if (i >= sequence.length()) + if (i >= sequence.length) { - tmp = new StringBuffer(sequence); + System.arraycopy(sequence, 0, tmp, 0, sequence.length); + i = sequence.length; } else - tmp = new StringBuffer(sequence.substring(0, i)); + { + System.arraycopy(sequence, 0, tmp, 0, i); + } + + int index = i; while (length > 0) { - tmp.append(c); + tmp[ index++ ] = c; length--; } - if (i < sequence.length()) + if (i < sequence.length) { - tmp.append(sequence.substring(i)); + System.arraycopy(sequence, i, tmp, index, sequence.length-i ); } - sequence = tmp.toString(); + sequence = tmp; } public void insertCharAt(int i, char c) @@ -558,26 +636,6 @@ public class Sequence implements SequenceI insertCharAt(i, 1, c); } - /** - * DOCUMENT ME! - * - * @param c DOCUMENT ME! - */ - public void setColor(Color c) - { - this.color = c; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public Color getColor() - { - return color; - } - public String getVamsasId() { return vamsasId; @@ -603,9 +661,18 @@ public class Sequence implements SequenceI if (dbrefs == null) dbrefs = new DBRefEntry[0]; - DBRefEntry[] temp = new DBRefEntry[dbrefs.length + 1]; - System.arraycopy(dbrefs, 0, temp, 0, dbrefs.length); + int i, iSize = dbrefs.length; + + for(i=0; i