All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.ext.dataoverlay.EdgeGenQuality Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.ext.dataoverlay;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * A helper class for generic grid data edge updater
 *
 * @author Katja Danilova
 */
class EdgeGenQuality {

  private final Map> gridDataVariableValues;

  /**
   * Constructor
   */
  EdgeGenQuality() {
    gridDataVariableValues = new HashMap<>();
  }

  /**
   * Adds a property value for given time
   *
   * @param time          time
   * @param propertyValue propertyValue
   */
  void addPropertyValueSample(int time, E propertyValue) {
    List existing = gridDataVariableValues.get(time);
    if (existing == null) {
      gridDataVariableValues.put(time, List.of(propertyValue));
    } else {
      List updated = new ArrayList<>(existing.size() + 1);
      updated.addAll(existing);
      updated.add(existing.size(), propertyValue);
      gridDataVariableValues.put(time, updated);
    }
  }

  /**
   * Returns property value average for given time
   *
   * @param time time
   * @return property value
   */
  float getPropertyValue(int time) {
    return getAverage(getPropertyValuesInTime(time));
  }

  /**
   * Returns property value averages for given times
   *
   * @param times times
   * @return pollutantValues
   */
  float[] getPropertyValueAverage(int times) {
    float[] result = new float[times];

    for (int time = 0; time < times; time++) {
      result[time] = getPropertyValue(time);
    }

    return result;
  }

  /**
   * Returns average for values
   *
   * @param values values
   * @return average values
   */
  private float getAverage(List values) {
    if (values == null) {
      return 0;
    }

    return calculateAverage(values);
  }

  /**
   * Calculates average float value for list of values
   *
   * @param values list of values
   * @return average value for the list
   */
  private float calculateAverage(List values) {
    int len = values.size();
    if (values.get(0) instanceof Integer) {
      Integer total = 0;

      for (E value : values) {
        total += (Integer) value;
      }
      return (float) total / len;
    } else if (values.get(0) instanceof Float) {
      float sum = 0f;

      for (E value : values) {
        sum += (Float) value;
      }

      return sum / len;
    } else if (values.get(0) instanceof Double) {
      double sum = 0;

      for (E value : values) {
        sum += (double) value;
      }
      return (float) sum / len;
    } else if (values.get(0) instanceof Long) {
      Long total = 0L;

      for (E value : values) {
        total += (Long) value;
      }
      return (float) total / len;
    } else {
      throw new UnsupportedOperationException("Unrecognizable format of " + values.get(0));
    }
  }

  /**
   * Returns array of property indices in time
   *
   * @param time time
   * @return array of property values
   */
  private List getPropertyValuesInTime(int time) {
    return gridDataVariableValues.get(time);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy