package utils.nexus; import java.util.ArrayList; import org.apache.log4j.Logger; public class TranslatedAminoAcidPositions { private static final Logger logger = Logger.getLogger(TranslatedAminoAcidPositions.class); private CodonRanges codonRanges; private int readingFrame = 1; public TranslatedAminoAcidPositions(CodonRanges positionsArray, int readingFrame) { this.codonRanges = positionsArray; this.readingFrame = readingFrame; } private CodonPos getTranslatedAminoAcidPositionsAt(int x){ CodonPos pos = null; if(isFullCodingCodonStartingAt(x)){ pos = new CodonPos(x, x + 2, true); } else if(isFullCodingCodonStartingAt(x + 1)){ // noncoding orphan pos = new CodonPos(x, x, false); } else if(isFullCodingCodonStartingAt(x + 2)){ // noncoding orphan pos = new CodonPos(x, x + 1, false); } else{ // noncoding triplet pos = new CodonPos(x, x + 2, false); } return pos; } public boolean isFullCodingCodonStartingAt(int x) { boolean isFullCodon = false; if(getReadingFrame() == 1){ if(getPositionsArray().getPosVal(x) == 1 && getPositionsArray().getPosVal(x+1) == 2 && getPositionsArray().getPosVal(x+2) == 3){ isFullCodon = true; } } if(getReadingFrame() == 2){ if(getPositionsArray().getPosVal(x) == 2 && getPositionsArray().getPosVal(x+1) == 3 && getPositionsArray().getPosVal(x+2) == 1){ isFullCodon = true; } } if(getReadingFrame() == 3){ if(getPositionsArray().getPosVal(x) == 3 && getPositionsArray().getPosVal(x+1) == 1 && getPositionsArray().getPosVal(x+2) == 2){ isFullCodon = true; } } return isFullCodon; } private int getReadingFrame() { return readingFrame; } private CodonRanges getPositionsArray() { return codonRanges; } public CodonPos getCodonAtNucleotidePos(int pos) { return getTranslatedAminoAcidPositionsAt(pos); } public int getAAPosAtNucleotidePos(int pos){ int aaPos = getPositionsArray().aaPosFromNucPos(pos, readingFrame); // logger.info("pos=" + pos + " aaPos=" + aaPos); return aaPos; } public CodonPos getCodonAtTranslatedPos(int pos) { int nucPos = getPositionsArray().nucPosFromAAPos(pos, readingFrame); // logger.info("nucPos" + nucPos + " searchAAPos=" + pos + " readingFrame=" + readingFrame); CodonPos codpos = getCodonAtNucleotidePos(nucPos); // logger.info("codpos.start" + codpos.startPos + " codpos.end" + codpos.endPos + " codPos.isorf" + codpos.isOrfan()); return getCodonAtNucleotidePos(nucPos); } }