Program: 16261
Project: 16261
Buggy source:
/** 
 * Get the chromosome position mapped onto the mRNA CDS transcript position (needs to be divided by 3 to get protein coordinate)
 * @param exonStarts
 * @param exonEnds
 * @param cdsStart
 * @param cdsEnd
 * @return
 */
public static int getCDSPosForward(int chromPos,List<Integer> exonStarts,List<Integer> exonEnds,int cdsStart,int cdsEnd){
  boolean inCoding=false;
  int codingLength=0;
  logger.debug("String_Node_Str" + chromPos);
  int lengthExons=0;
  for (int i=0; i < exonStarts.size(); i++) {
    int start=exonStarts.get(i);
    int end=exonEnds.get(i);
    lengthExons+=end - start;
    logger.debug("String_Node_Str" + (start + 1) + "String_Node_Str"+ end+ "String_Node_Str"+ (end - start)+ "String_Node_Str"+ format(chromPos));
    if (start + 1 <= cdsStart + 1 && end >= cdsStart + 1) {
      if (end >= chromPos) {
        int tmp=chromPos - cdsStart - 1;
        logger.debug("String_Node_Str" + codingLength + "String_Node_Str"+ tmp);
        logger.debug("String_Node_Str" + chromPos + "String_Node_Str"+ format(start)+ "String_Node_Str"+ format(tmp)+ "String_Node_Str"+ cdsStart+ "String_Node_Str"+ codingLength);
        return codingLength + tmp;
      }
      inCoding=true;
      codingLength+=(end - cdsStart);
      logger.debug("String_Node_Str" + format(start) + "String_Node_Str"+ (cdsStart));
      logger.debug("String_Node_Str" + format(cdsStart + 1) + "String_Node_Str"+ format(end)+ "String_Node_Str"+ format(end - cdsStart)+ "String_Node_Str"+ codingLength+ "String_Node_Str"+ (codingLength % 3));
    }
 else     if (start <= cdsEnd && end >= cdsEnd) {
      inCoding=false;
      if (cdsEnd >= chromPos && (start + 1 <= chromPos)) {
        int tmp=chromPos - start - 1;
        logger.debug("String_Node_Str" + i + "String_Node_Str"+ chromPos+ "String_Node_Str"+ format(start + 1)+ "String_Node_Str"+ format(tmp)+ "String_Node_Str"+ cdsStart+ "String_Node_Str"+ codingLength);
        return codingLength + tmp;
      }
      codingLength+=(cdsEnd - start);
      logger.debug("String_Node_Str" + format(start + 1) + "String_Node_Str"+ format(cdsEnd)+ "String_Node_Str"+ format(cdsEnd - start + 1)+ "String_Node_Str"+ codingLength+ "String_Node_Str"+ (codingLength % 3));
      logger.debug("String_Node_Str" + format(cdsEnd + 1) + "String_Node_Str"+ format(end));
    }
 else     if (inCoding) {
      if (end >= chromPos && (start + 1 <= chromPos)) {
        int tmp=chromPos - start - 1;
        logger.debug(codingLength + "String_Node_Str" + tmp);
        logger.debug("String_Node_Str" + (i + 1) + "String_Node_Str"+ format(chromPos)+ "String_Node_Str"+ format(start + 1)+ "String_Node_Str"+ format(tmp)+ "String_Node_Str"+ cdsStart+ "String_Node_Str"+ codingLength);
        return codingLength + tmp;
      }
      codingLength+=(end - start);
      logger.debug("String_Node_Str" + format(start) + "String_Node_Str"+ format(end)+ "String_Node_Str"+ format(end - start)+ "String_Node_Str"+ codingLength+ "String_Node_Str"+ (codingLength % 3));
    }
  }
  return -1;
}

Fixed version (ground truth):
/** 
 * Get the chromosome position mapped onto the mRNA CDS transcript position (needs to be divided by 3 to get protein coordinate)
 * @param exonStarts
 * @param exonEnds
 * @param cdsStart
 * @param cdsEnd
 * @return
 */
public static int getCDSPosForward(int chromPos,List<Integer> exonStarts,List<Integer> exonEnds,int cdsStart,int cdsEnd){
  boolean inCoding=false;
  int codingLength=0;
  logger.debug("String_Node_Str" + chromPos);
  if (chromPos < cdsStart + 1) {
    logger.debug(chromPos + "String_Node_Str" + cdsStart+ 1);
    return -1;
  }
  if (chromPos > cdsEnd + 1) {
    logger.debug(chromPos + "String_Node_Str" + cdsEnd+ 1);
    return -1;
  }
  int lengthExons=0;
  for (int i=0; i < exonStarts.size(); i++) {
    int start=exonStarts.get(i);
    int end=exonEnds.get(i);
    lengthExons+=end - start;
    logger.debug("String_Node_Str" + (start + 1) + "String_Node_Str"+ end+ "String_Node_Str"+ (end - start)+ "String_Node_Str"+ format(chromPos));
    if (start + 1 <= cdsStart + 1 && end >= cdsStart + 1) {
      if (end >= chromPos) {
        int tmp=chromPos - cdsStart - 1;
        logger.debug("String_Node_Str" + codingLength + "String_Node_Str"+ tmp);
        logger.debug("String_Node_Str" + chromPos + "String_Node_Str"+ format(start)+ "String_Node_Str"+ format(tmp)+ "String_Node_Str"+ cdsStart+ "String_Node_Str"+ codingLength);
        return codingLength + tmp;
      }
      inCoding=true;
      codingLength+=(end - cdsStart);
      logger.debug("String_Node_Str" + format(start) + "String_Node_Str"+ (cdsStart));
      logger.debug("String_Node_Str" + format(cdsStart + 1) + "String_Node_Str"+ format(end)+ "String_Node_Str"+ format(end - cdsStart)+ "String_Node_Str"+ codingLength+ "String_Node_Str"+ (codingLength % 3));
    }
 else     if (start <= cdsEnd && end >= cdsEnd) {
      inCoding=false;
      if (cdsEnd >= chromPos && (start + 1 <= chromPos)) {
        int tmp=chromPos - start - 1;
        logger.debug("String_Node_Str" + i + "String_Node_Str"+ chromPos+ "String_Node_Str"+ format(start + 1)+ "String_Node_Str"+ format(tmp)+ "String_Node_Str"+ cdsStart+ "String_Node_Str"+ codingLength);
        return codingLength + tmp;
      }
      codingLength+=(cdsEnd - start);
      logger.debug("String_Node_Str" + format(start + 1) + "String_Node_Str"+ format(cdsEnd)+ "String_Node_Str"+ format(cdsEnd - start + 1)+ "String_Node_Str"+ codingLength+ "String_Node_Str"+ (codingLength % 3));
      logger.debug("String_Node_Str" + format(cdsEnd + 1) + "String_Node_Str"+ format(end));
    }
 else     if (inCoding) {
      if (end >= chromPos && (start + 1 <= chromPos)) {
        int tmp=chromPos - start - 1;
        logger.debug(codingLength + "String_Node_Str" + tmp);
        logger.debug("String_Node_Str" + (i + 1) + "String_Node_Str"+ format(chromPos)+ "String_Node_Str"+ format(start + 1)+ "String_Node_Str"+ format(tmp)+ "String_Node_Str"+ cdsStart+ "String_Node_Str"+ codingLength);
        return codingLength + tmp;
      }
      codingLength+=(end - start);
      logger.debug("String_Node_Str" + format(start) + "String_Node_Str"+ format(end)+ "String_Node_Str"+ format(end - start)+ "String_Node_Str"+ codingLength+ "String_Node_Str"+ (codingLength % 3));
    }
  }
  logger.debug("String_Node_Str" + lengthExons);
  return -1;
}