def check_map(orig_map, outlier_indicator, min_rpm_pos, max_rpm_pos, min_tps_pos, max_tps_pos): for rpm in mapmod.RPM_POS: for tps in mapmod.TPS_POS: if min_rpm_pos <= rpm <= max_rpm_pos and min_tps_pos <= tps <= max_tps_pos: # don't check map outside of this range current_val = orig_map[(rpm, tps)] adjacent_vals = mapmod.get_adjacent_values_ex(orig_map, tps, rpm, min_rpm_pos, max_rpm_pos, min_tps_pos, max_tps_pos) adjacent_average = sum(adjacent_vals) / len(adjacent_vals) if current_val > adjacent_average + outlier_indicator or current_val + outlier_indicator < adjacent_average: print "Outlier -> RPM: %5d, TPS: %3d, VAL: %3d, AVG: %3d" % (mapmod.RPM[rpm], mapmod.TPS[tps], current_val, adjacent_average)
def smooth_map(original_map, weight, iterations, min_rpm_pos, max_rpm_pos, min_tps_pos, max_tps_pos): orig_map = original_map.copy() new_map = {} for i in range(0, iterations): for rpm in mapmod.RPM_POS: for tps in mapmod.TPS_POS: if min_rpm_pos <= rpm <= max_rpm_pos and min_tps_pos <= tps <= max_tps_pos: # don't change map outside of this range new_map[(rpm, tps)] = smooth_map_value(orig_map[(rpm, tps)], mapmod.get_adjacent_values_ex(orig_map, tps, rpm, min_rpm_pos, max_rpm_pos, min_tps_pos, max_tps_pos), weight) else: new_map[(rpm, tps)] = orig_map[(rpm, tps)] orig_map = new_map.copy() return new_map