@Override public int convertSourceCoordinateToLocalCoordinate(int sourceCoordinate) { List<Exon> exons = BioObjectUtil.createSortedFeatureListByLocation(getExons()); int localCoordinate = -1; if (exons.size() == 0) { return super.convertSourceCoordinateToLocalCoordinate(sourceCoordinate); } int currentCoordinate = 0; for (Exon exon : exons) { if (exon.getFeatureLocation().getFmin() <= sourceCoordinate && exon.getFeatureLocation().getFmax() >= sourceCoordinate) { if (getFeatureLocation().getStrand() == -1) { localCoordinate = currentCoordinate + (exon.getFeatureLocation().getFmax() - sourceCoordinate) - 1; } else { localCoordinate = currentCoordinate + (sourceCoordinate - exon.getFeatureLocation().getFmin()); } } currentCoordinate += exon.getLength(); } return localCoordinate; }
@Override public int convertLocalCoordinateToSourceCoordinate(int localCoordinate) { List<Exon> exons = BioObjectUtil.createSortedFeatureListByLocation(getExons()); int sourceCoordinate = -1; if (exons.size() == 0) { return super.convertLocalCoordinateToSourceCoordinate(localCoordinate); } int currentLength = 0; int currentCoordinate = localCoordinate; for (Exon exon : exons) { int exonLength = exon.getLength(); if (currentLength + exonLength >= localCoordinate) { if (getFeatureLocation().getStrand() == -1) { sourceCoordinate = exon.getFeatureLocation().getFmax() - currentCoordinate - 1; } else { sourceCoordinate = exon.getFeatureLocation().getFmin() + currentCoordinate; } break; } currentLength += exonLength; currentCoordinate -= exonLength; } return sourceCoordinate; }