* @param childcount - exon count
* @return
*/
private GlyphI glyphifyExons(
SeqSymmetry mrna2genome, MutableSeqSymmetry annot2genome, int childcount) {
GlyphI tGlyph = new LineContainerGlyph();
seqmap.setDataModel(tGlyph, mrna2genome);
SeqSpan tSpan = annot2genome.getSpan(vseq);
tGlyph.setCoords(tSpan.getMin(), 0, tSpan.getLength(), 20);
tGlyph.setColor(col_ts);
for (int i = 0; i < childcount; i++) {
SeqSymmetry exon2genome = annot2genome.getChild(i);
SeqSpan gSpan = exon2genome.getSpan(vseq);
GlyphI cglyph = new OutlineRectGlyph();
seqmap.setDataModel(cglyph, exon2genome);
// can't give this a type and therefore signal
// to the selection logic that this is first class selectable
// object
// so let's put it in a list
exonList.add(exon2genome);
cglyph.setColor(col_ts);
cglyph.setCoords(gSpan.getMin(), 0, gSpan.getLength(), 20);
exonGlyphs.add(cglyph);
tGlyph.addChild(cglyph);
// testing display of "exon segments" for transcripts that have
// base inserts relative to the genomic sequence
// haven't dealt with display of base deletions in transcript relative to genomic yet
// if exon is segmented by inserts, then it will have children
// that specify this segmentation
for (int seg_index = 0; seg_index < exon2genome.getChildCount(); seg_index++) {
SeqSymmetry eseg2genome = exon2genome.getChild(seg_index);
SeqSpan seg_gspan = eseg2genome.getSpan(vseq);
if (seg_gspan.getLength() == 0) {
// only mark the inserts (those whose genomic extent is zero
GlyphI segGlyph = new OutlineRectGlyph();
segGlyph.setColor(col_bg);
segGlyph.setCoords(seg_gspan.getMin(), 0, seg_gspan.getLength(), 25);
tGlyph.addChild(segGlyph);
}
}
}
return tGlyph;
}