X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequence.java;h=2303d5d46fbc4de8a4f116899f1261f6210166a4;hb=7157dfd20efd2e1db47db1ac12e879eb51c67b92;hp=ff7ec3221119d2fdc8acadaea878815471d4eae3;hpb=55c2e38285277f647543cc936f2fc80a9c4d0359;p=jalview.git diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index ff7ec32..2303d5d 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -1,26 +1,26 @@ /* -* Jalview - A Sequence Alignment Editor and Viewer -* Copyright (C) 2006 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 -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -*/ + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2007 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 + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ package jalview.datamodel; - import java.util.*; +import jalview.analysis.*; /** * DOCUMENT ME! @@ -28,11 +28,12 @@ import java.util.*; * @author $author$ * @version $Revision$ */ -public class Sequence implements SequenceI +public class Sequence + implements SequenceI { SequenceI datasetSequence; String name; - private char [] sequence; + private char[] sequence; String description; int start; int end; @@ -47,11 +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. * @@ -70,7 +66,7 @@ public class Sequence implements SequenceI checkValidRange(); } - public Sequence(String name, char [] sequence, int start, int end) + public Sequence(String name, char[] sequence, int start, int end) { this.name = name; this.sequence = sequence; @@ -105,7 +101,7 @@ public class Sequence implements SequenceI int endRes = 0; for (int j = 0; j < sequence.length; j++) { - if (!jalview.util.Comparison.isGap( sequence[j] )) + if (!jalview.util.Comparison.isGap(sequence[j])) { endRes++; } @@ -145,7 +141,6 @@ public class Sequence implements SequenceI description = seq.getDescription(); } - /** * DOCUMENT ME! * @@ -180,10 +175,12 @@ public class Sequence implements SequenceI public void deleteFeature(SequenceFeature sf) { - if(sequenceFeatures==null) + if (sequenceFeatures == null) + { return; + } - int index=0; + int index = 0; for (index = 0; index < sequenceFeatures.length; index++) { if (sequenceFeatures[index].equals(sf)) @@ -192,25 +189,28 @@ public class Sequence implements SequenceI } } - - if(index==sequenceFeatures.length) + if (index == sequenceFeatures.length) + { return; + } int sfLength = sequenceFeatures.length; - if(sfLength<2) + if (sfLength < 2) { sequenceFeatures = null; } else { - SequenceFeature[] temp = new SequenceFeature[sfLength-1]; + SequenceFeature[] temp = new SequenceFeature[sfLength - 1]; System.arraycopy(sequenceFeatures, 0, temp, 0, index); - if(index= sequence.length) @@ -390,13 +390,12 @@ public class Sequence implements SequenceI end = sequence.length; } - char [] reply = new char[end-start]; - System.arraycopy(sequence, start, reply, 0, end-start); + 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 @@ -406,16 +405,27 @@ public class Sequence implements SequenceI public SequenceI getSubSequence(int start, int end) { if (start < 0) + { start = 0; - char [] seq = getSequence(start, end); + } + 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.setDescription(description); - nseq.setDatasetSequence(getDatasetSequence()); + if (datasetSequence != null) + { + nseq.setDatasetSequence(datasetSequence); + } + else + { + nseq.setDatasetSequence(this); + } return nseq; } @@ -505,7 +515,7 @@ public class Sequence implements SequenceI int seqlen = sequence.length; while ( (j < i) && (j < seqlen)) { - if (!jalview.util.Comparison.isGap( sequence[j] )) + if (!jalview.util.Comparison.isGap(sequence[j])) { pos++; } @@ -555,21 +565,42 @@ public class Sequence implements SequenceI return; } - char [] tmp; + char[] tmp; if (j >= sequence.length) { tmp = new char[i]; - System.arraycopy(sequence,0,tmp,0,i); + System.arraycopy(sequence, 0, tmp, 0, i); } else { - tmp = new char[sequence.length-j+i]; - System.arraycopy(sequence,0,tmp,0,i); - System.arraycopy(sequence,j,tmp,i,sequence.length-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; + } /** @@ -581,7 +612,7 @@ public class Sequence implements SequenceI */ public void insertCharAt(int i, int length, char c) { - char [] tmp = new char[sequence.length+length]; + char[] tmp = new char[sequence.length + length]; if (i >= sequence.length) { @@ -589,21 +620,20 @@ public class Sequence implements SequenceI i = sequence.length; } else - { + { System.arraycopy(sequence, 0, tmp, 0, i); - } - + } int index = i; while (length > 0) { - tmp[ index++ ] = c; + tmp[index++] = c; length--; } if (i < sequence.length) { - System.arraycopy(sequence, i, tmp, index, sequence.length-i ); + System.arraycopy(sequence, i, tmp, index, sequence.length - i); } sequence = tmp; @@ -637,17 +667,21 @@ public class Sequence implements SequenceI public void addDBRef(DBRefEntry entry) { if (dbrefs == null) + { dbrefs = new DBRefEntry[0]; + } int i, iSize = dbrefs.length; - for(i=0; i