def ScaleData(data, old_min, old_max, new_min, new_max):
  """Scale the input data so that the range old_min-old_max maps to
  new_min-new_max.
  """
  def ScalePoint(x):
    if x is None:
      return None
    return scale * x + translate

  if old_min == old_max:
    scale = 1
  else:
    scale = (new_max - new_min) / float(old_max - old_min)
  translate = new_min - scale * old_min
  return list(map(ScalePoint, data))