/**
* Locate the first and last position visible for this sequence. if seq isn't
* visible then return the position of the left and right of the hidden
- * boundary region
+ * boundary region, and the corresponding alignment column indices for the
+ * extent of the sequence
*
* @param seq
- * @return int[] { visible start, visible end, first seqpos, last seqpos }
+ * @return int[] { visible start, visible end, first seqpos, last seqpos,
+ * alignment index for seq start, alignment index for seq end }
*/
public int[] locateVisibleBoundsOfSequence(SequenceI seq)
{
if (hiddenColumns == null || hiddenColumns.size() == 0)
{
- return new int[] { seq.findIndex(fpos) - 1, seq.findIndex(lpos) - 1,
- fpos,
- lpos };
+ int ifpos = seq.findIndex(fpos) - 1, ilpos = seq.findIndex(lpos) - 1;
+ return new int[] { ifpos, ilpos, fpos, lpos, ifpos, ilpos };
}
// Simply walk along the sequence whilst watching for hidden column
List<int[]> regions = getHiddenColumns();
int spos = fpos, lastvispos = -1, rcount = 0, hideStart = seq
.getLength(), hideEnd = -1;
- int visPrev = 0, visNext = 0;
+ int visPrev = 0, visNext = 0, firstP = -1, lastP = -1;
boolean foundStart = false;
for (int p = 0, pLen = seq.getLength(); spos <= seq.getEnd()
&& p < pLen; p++)
{
if (!Comparison.isGap(seq.getCharAt(p)))
{
+ // keep track of first/last column
+ // containing sequence data regardless of visibility
+ if (firstP == -1)
+ {
+ firstP = p;
+ }
+ lastP = p;
// update hidden region start/end
while (hideEnd < p && rcount < regions.size())
{
if (foundStart)
{
return new int[] { findColumnPosition(start),
- findColumnPosition(lastvispos), fpos, lpos };
+ findColumnPosition(lastvispos), fpos, lpos, firstP, lastP };
}
// otherwise, sequence was completely hidden
- return new int[] { visPrev, visNext, 0, 0 };
+ return new int[] { visPrev, visNext, 0, 0, firstP, lastP };
}
/**
int scalestartx = (startx / 10) * 10;
SequenceI refSeq = av.getAlignment().getSeqrep();
- int refSp = 0, refEp = -1;
+ int refSp = 0, refEp = -1, refStart = 0, refEnd = -1, refStartI = 0, refEndI = -1;
if (refSeq != null)
{
// find bounds and set origin appopriately
refSp = refbounds[0];
refEp = refbounds[1];
+ refStart = refbounds[2];
+ refEnd = refbounds[3];
+ refStartI = refbounds[4];
+ refEndI = refbounds[5];
scalestartx = refSp + ((scalestartx - refSp) / 10) * 10;
}
// TODO show bounds if position is a gap
// - ie L--R -> "1L|2R" for
// marker
- if (iadj < refSp)
+ if (iadj < refStartI)
{
- string = String.valueOf(iadj - refSp);
+ string = String.valueOf(iadj - refStartI);
}
- else if (iadj > refEp)
+ else if (iadj > refEndI)
{
- string = "+" + String.valueOf(iadj - refEp);
+ string = "+" + String.valueOf(iadj - refEndI);
}
else
{
assertEquals(
Arrays.toString(new int[] { seq.findIndex(seq.getStart()) - 1,
seq.findIndex(seq.getEnd()) - 1, seq.getStart(),
- seq.getEnd() }),
+ seq.getEnd(), seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1 }),
Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
// hidden column on gap after end of sequence - should not affect bounds
assertEquals(
Arrays.toString(new int[] { seq.findIndex(seq.getStart()) - 1,
seq.findIndex(seq.getEnd()) - 1, seq.getStart(),
- seq.getEnd() }),
+ seq.getEnd(), seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1 }),
Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
cs.revealAllHiddenColumns();
assertEquals(
Arrays.toString(new int[] { seq.findIndex(seq.getStart()) - 2,
seq.findIndex(seq.getEnd()) - 2, seq.getStart(),
- seq.getEnd() }),
+ seq.getEnd(), seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1 }),
Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
cs.revealAllHiddenColumns();
cs.hideColumns(6, 11);
assertEquals("-D",
cs.getVisibleSequenceStrings(0, 5, new SequenceI[] { seq })[0]);
- assertEquals(Arrays.toString(new int[] { 1, 1, 3, 3 }),
+ assertEquals(
+ Arrays.toString(new int[] { 1, 1, 3, 3,
+ seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1 }),
Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
cs.revealAllHiddenColumns();
// hide whole sequence - should just get location of hidden region
// containing sequence
cs.hideColumns(1, 11);
- assertEquals(Arrays.toString(new int[] { 0, 1, 0, 0 }),
+ assertEquals(
+ Arrays.toString(new int[] { 0, 1, 0, 0,
+ seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1 }),
Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
}