return map;
}
- /**
- * DOCUMENT ME!
- *
- * @param i DOCUMENT ME!
- * @param j DOCUMENT ME!
+ /* (non-Javadoc)
+ * @see jalview.datamodel.SequenceI#deleteChars(int, int)
*/
public void deleteChars(int i, int j)
{
+ int newstart=start,newend=end;
if (i >= sequence.length)
{
return;
System.arraycopy(sequence,0,tmp,0,i);
System.arraycopy(sequence,j,tmp,i,sequence.length-j);
}
-
- if (this.datasetSequence != null)
+ boolean createNewDs=false;
+ for (int s = i; s < j; s++)
{
- for (int s = i; s < j; s++)
+ if (jalview.schemes.ResidueProperties.aaIndex[sequence[s]] != 23)
{
- if (jalview.schemes.ResidueProperties.aaIndex[sequence[s]] != 23)
+ if (createNewDs)
{
-
- Sequence ds = new Sequence(name,
- AlignSeq.extractGaps(
- jalview.util.Comparison.GapChars,
- this.getSequenceAsString()
- ),
- start,
- end);
- ds.setDescription(description);
+ newend--;
+ } else {
+ int sindex = findIndex(start)-1;
+ if (sindex==s)
+ {
+ // delete characters including start of sequence
+ newstart = findPosition(j);
+ break; // don't need to search for any more residue characters.
+ } else {
+ // delete characters after start.
+ int eindex = findIndex(end)-1;
+ if (eindex<j)
+ {
+ // delete characters at end of sequence
+ newend = findPosition(i-1);
+ break; // don't need to search for any more residue characters.
+ } else {
+ createNewDs=true;
+ newend--; // decrease end position by one for the deleted residue and search further
+ }
+ }
}
- break;
}
}
-
+ // deletion occured in the middle of the sequence
+ if (createNewDs && this.datasetSequence != null)
+ {
+ // construct a new sequence
+ Sequence ds = new Sequence(datasetSequence);
+ // TODO: remove any non-inheritable properties ?
+ // TODO: create a sequence mapping (since there is a relation here ?)
+ ds.deleteChars(i, j);
+ datasetSequence = ds;
+ }
+ start = newstart;
+ end = newend;
sequence = tmp;
-
}
SequenceI ds = seq;
ds.setSequence(AlignSeq.extractGaps(jalview.util.Comparison.GapChars, new String(sequence)));
setDatasetSequence(ds);
+ ds.setSequenceFeatures(getSequenceFeatures());
seq = this; // and return this sequence as the derived sequence.
}
}