{
// Adjust input view for gaps
// propagate insertions into profile
- alcsel = propagateInsertions(profileseq, al, input);
+ alcsel = ColumnSelection.propagateInsertions(profileseq, al, input);
}
}
}
}
}
- /**
- * Add gaps into the sequences aligned to profileseq under the given
- * AlignmentView
- *
- * @param profileseq
- * @param al
- * @param input
- */
- private ColumnSelection propagateInsertions(SequenceI profileseq,
- Alignment al, AlignmentView input)
- {
- char gc = al.getGapCharacter();
- Object[] alandcolsel = input.getAlignmentAndColumnSelection(gc);
- ColumnSelection nview = (ColumnSelection) alandcolsel[1];
- SequenceI origseq;
- nview.pruneDeletions(ShiftList
- .parseMap((origseq = ((SequenceI[]) alandcolsel[0])[0])
- .gapMap())); // recover original prediction sequence's
- // mapping to view.
- int[] viscontigs = nview.getVisibleContigs(0, profileseq.getLength());
- int spos = 0;
- int offset = 0;
- // input.pruneDeletions(ShiftList.parseMap(((SequenceI[])
- // alandcolsel[0])[0].gapMap()))
- // add profile to visible contigs
- for (int v = 0; v < viscontigs.length; v += 2)
- {
- if (viscontigs[v] > spos)
- {
- StringBuffer sb = new StringBuffer();
- for (int s = 0, ns = viscontigs[v] - spos; s < ns; s++)
- {
- sb.append(gc);
- }
- for (int s = 0, ns = al.getHeight(); s < ns; s++)
- {
- SequenceI sqobj = al.getSequenceAt(s);
- if (sqobj != profileseq)
- {
- String sq = al.getSequenceAt(s).getSequenceAsString();
- if (sq.length() <= spos + offset)
- {
- // pad sequence
- int diff = spos + offset - sq.length() - 1;
- if (diff > 0)
- {
- // pad gaps
- sq = sq + sb;
- while ((diff = spos + offset - sq.length() - 1) > 0)
- {
- sq = sq
- + ((diff >= sb.length()) ? sb.toString() : sb
- .substring(0, diff));
- }
- }
- sq += sb.toString();
- }
- else
- {
- al.getSequenceAt(s).setSequence(
- sq.substring(0, spos + offset) + sb.toString()
- + sq.substring(spos + offset));
- }
- }
- }
- // offset+=sb.length();
- }
- spos = viscontigs[v + 1] + 1;
- }
- if ((offset + spos) < profileseq.getLength())
- {
- StringBuffer sb = new StringBuffer();
- for (int s = 0, ns = profileseq.getLength() - spos - offset; s < ns; s++)
- {
- sb.append(gc);
- }
- for (int s = 1, ns = al.getHeight(); s < ns; s++)
- {
- String sq = al.getSequenceAt(s).getSequenceAsString();
- // pad sequence
- int diff = origseq.getLength() - sq.length();
- while (diff > 0)
- {
- sq = sq
- + ((diff >= sb.length()) ? sb.toString() : sb
- .substring(0, diff));
- diff = origseq.getLength() - sq.length();
- }
- }
- }
- return nview;
- }
public JPredJob(Hashtable SequenceInfo, SequenceI seq, int[] delMap)
{