private List<List<Double>> getPairedCutPoints(List<Double> otherPoints, double digestionRate) {
		List<Double> thisPairedCutPoints = new ArrayList<Double>();
		List<Double> otherPairedCutPoints = new ArrayList<Double>();
		List<Double> thisCuts = (flipped ? cutsFlipped : cuts);
		
		// Calculate all of the pairwise distances
		double[][] dist = new double[thisCuts.size()][otherPoints.size()];
		for(int i = 0; i < thisCuts.size(); i++){
			for(int j = 0; j < otherPoints.size(); j++){
				dist[i][j] = Math.abs(thisCuts.get(i) - otherPoints.get(j));
			}
		}
		
		int valuesToCompare = (int)(Math.max(thisCuts.size(), otherPoints.size()) * digestionRate);
		valuesToCompare = Math.min(valuesToCompare, Math.min(thisCuts.size(), otherPoints.size()));
		
		Set<Integer> pairedThis = new HashSet<Integer>();
		Set<Integer> pairedOther = new HashSet<Integer>();
		for (int k = 0; k < valuesToCompare; k++) {
			double minDist = Double.MAX_VALUE;
			int minI = -1;
			int minJ = -1;
			for (int i = 0; i < thisCuts.size(); i++) {
				for (int j = 0; j < otherPoints.size(); j++) {
					if (!(pairedThis.contains(i) || pairedOther.contains(j))) {
						if (dist[i][j] < minDist) {
							minDist = dist[i][j];
							minI = i;
							minJ = j;
						}
					}
				}
			}
			thisPairedCutPoints.add(thisCuts.get(minI));
			otherPairedCutPoints.add(otherPoints.get(minJ));
			pairedThis.add(minI);
			pairedOther.add(minJ);
		}
		Collections.sort(thisPairedCutPoints);
		Collections.sort(otherPairedCutPoints);
		
		List<List<Double>> pairedVectors = new ArrayList<List<Double>>();
		pairedVectors.add(thisPairedCutPoints);
		pairedVectors.add(otherPairedCutPoints);
		return pairedVectors;
	}