private static void marginalizeIncrementalResults(List<IncrementalResult> results) {
   double totalMass = 0.0d;
   for (IncrementalResult r : results) {
     totalMass += r.prob;
   }
   for (IncrementalResult r : results) {
     r.prob /= totalMass;
   }
 }
 private List<IncrementalResult> getIncrementalResults(
     List<Pt> input, double beta, double lambda, double kappa, double e_sigma) {
   List<IncrementalResult> results = new ArrayList<IncrementalResult>();
   List<Pt> unkPts = deepCopyPts(input);
   normalize(unkPts);
   for (Pattern pattern : patterns) {
     IncrementalResult result = getIncrementalResult(unkPts, pattern, beta, lambda, e_sigma);
     List<Pt> lastSegmentPts = pattern.segments.get(pattern.segments.size() - 1);
     double completeProb =
         getLikelihoodOfMatch(
             resample(unkPts, lastSegmentPts.size()),
             lastSegmentPts,
             e_sigma,
             e_sigma / beta,
             lambda);
     double x = 1 - completeProb;
     result.prob *= (1 + kappa * Math.exp(-x * x));
     results.add(result);
   }
   marginalizeIncrementalResults(results);
   return results;
 }