private void findCDSSplitLocations(){
		//There are no split locations if there is only one/zero CDS
		if(CDS.size() < 2){
			return;
		}

		//Forward strand
		//The CDS are in nucleic acid lengths, but the code needs the lengths in amino acids, so each length must be divided by 3.
		
		//Get the first CDS split location
		exonSplitLocations.add(((double)(CDS.get(0).getLength()) + 1) / 3);
		
		//Add in two-last cds split locations.
		for(int i = 1; i < CDS.size() - 1; i++){
			exonSplitLocations.add((((double)(CDS.get(i).getLength()) + 1) / 3) + exonSplitLocations.get(i - 1));
			
		}

	
		if(strand == Definitions.genomicStrandNEGATIVE){

			//The reverse strand calculates the split locations backwards because the protein is formed backwards.
			double finalLocation = ((double)CDS.get(CDS.size() - 1).getLength() + 1)/3 + exonSplitLocations.get(CDS.size() - 1 - 1);
			
			//Reverse the values based on the length
			//Work backwards to populate the split temp list.
			ArrayList<Double> temp = new ArrayList<Double>();
			for(Double val: exonSplitLocations){
				temp.add(finalLocation - val);
			}

			exonSplitLocations = temp;

			//Reverse the split locations so they are ascending relative to the start of the protein.
			Collections.sort(exonSplitLocations);
		}//Reverse

	
		
		//Error check to ensure each location has the exact value that it needs.  Rounding with doubles can be funny.
		ArrayList<Double> tempAdjust = new ArrayList<Double>();
		for(int i = 0; i < exonSplitLocations.size() ; i++){
			
			 //Deal with truncated numbers becuase comp does not recognize 69.999999999999 = 70
			double val = exonSplitLocations.get(i).doubleValue();
			 int floor = (int)val;
			 int ceiling = floor + 1;
		     double  minValue = floor + .9;
		 
		     if(val < ceiling && val >= minValue ){
		    	 val = ceiling;
		     }else{
		    	 if(val < (int)val + .1){
		    		 val = (int)val;
		    	 }
		     }
			tempAdjust.add(val);
		}
		
		exonSplitLocations = tempAdjust;

	}