/** * Get component to be rendered, if pos outside of current range getFeatureAtPosition and reset * currentRange, if feature is non null and not an instance of FeatureSetI then its an exon, and * set isExon flag */ public Component getBaseRendererComponent(char base, int pos, int tier, SequenceI seq) { init(base, pos, tier, seq); hatchColor = null; if (((BaseEditorPanel) baseEditor).getShowHitZones()) { Vector hitZones = ((BaseEditorPanel) baseEditor).hitZones; for (int hitIndex = 0; hitIndex < hitZones.size(); hitIndex++) { int[] hitZone = (int[]) hitZones.elementAt(hitIndex); if (pos >= hitZone[0] && pos < hitZone[1]) { hatchColor = Color.yellow; break; } } } currentFeature = baseEditor.getFeatureAtPosition(pos, tier); double[] range = establishRange(currentFeature, pos, tier, false); if (range[1] != currentRange[1] || range[0] != currentRange[0]) { currentRange[0] = range[0]; currentRange[1] = range[1]; currentFeatureSet = baseEditor.getFeatureSetAtPosition(pos, tier); range = establishRange(currentFeatureSet, pos, tier, true); transcriptRange[0] = range[0]; transcriptRange[1] = range[1]; if (currentFeature != null) { // This decides the index into the color array, transcripts // can have different colors for their features transcriptColorIndex = (baseEditor.getRangeIndex(tier, (int) currentRange[0], (int) currentRange[1])) % transcriptColorList.length; exonColorIndex = (baseEditor.getExonRangeIndex(tier, (int) currentRange[0], (int) currentRange[1])) % transcriptColorList[transcriptColorIndex].length; } if (currentFeature == null) { isExon = false; isIntron = false; // } else if (currentFeature.canHaveChildren()) { } else if (currentFeature.hasKids()) { // 1 level annots can but dont isExon = false; isIntron = true; } else { isExon = true; isIntron = false; } } return this; }
/** * Gets all the annotations in a particular feature set * * @param featureSet * @return */ public static Set<SeqFeatureI> getAnnotations(SeqFeatureI featureSet) { HashSet<SeqFeatureI> result = new HashSet<SeqFeatureI>(); if (featureSet.isTranscript()) { if (featureSet.isContainedByRefSeq()) // only add if its fully in range result.add(featureSet); } else if (featureSet.isAnnotTop() && !featureSet.hasKids()) { // only add if its fully in range if (featureSet.isContainedByRefSeq()) result.add(featureSet); } else { for (int i = 0, size = featureSet.getFeatures().size(); i < size; i++) { SeqFeatureI feature = featureSet.getFeatureAt(i); if (feature.canHaveChildren()) { result.addAll(getAnnotations(feature)); } } } return result; }