def save_results(fldr_name, f_name, data_array, save_plots=False): """ Saves figure. Basename should be the model name without voxel or angle info appended. """ data_io.save_array(fldr_name, f_name, data_array) if save_plots: render_results.save_heatmap(fldr_name, f_name, data_array, label="% collisions with walls")
def save_results(data_array, result_folder, save_basename, plot=False, plot_options=None): """ Save (and plot) results as appropriate """ plot_options = plot_options or {} data_io.save_array(result_folder, save_basename, data_array) if plot: render_results.save_heatmap(result_folder, save_basename, data_array, **plot_options)
def main(settings): """ Determine the best pose of the manikin for each position and orientation. """ basename = "{}_{}" # Get one matrix per pose, representing the best possible fit of that pose at a given point # in the vehicle walkability_by_pose_name = {manikin_name: load_fit_of_pose_in_vehicle( basename.format(settings["run_id"], manikin_name), settings) for manikin_name in settings["manikin_poses"]} # TODO: number of best pose may be superfluous. Can probably disable saving this info. best_pose_number_by_point = score_from_list(walkability_by_pose_name, settings["manikin_poses"], settings, score_key='num', orientation="overall") best_score_by_point = score_from_list(walkability_by_pose_name, settings["manikin_poses"], settings, score_key='score', orientation="overall") best_pose_for_orientation = {} best_score_for_orientation = {} for ang in settings["manikin_orientations"]: best_pose_for_orientation[str(ang)] = score_from_list(walkability_by_pose_name, settings["manikin_poses"], settings, score_key='num', orientation=ang) best_score_for_orientation[str(ang)] = score_from_list(walkability_by_pose_name, settings["manikin_poses"], settings, score_key='score', orientation=ang) # Save results result_folder = "results/{}/{}".format(settings["run_id"], settings["voxel_size"]) saved_file_basename = "{}_vox{}_best_scores".format( settings["run_id"], settings["voxel_size"]) save_results(best_score_by_point, result_folder, saved_file_basename, plot=settings["show_2d"], plot_options={"label": "Walkability scores", "tick_labels": sorted([v['score'] for k, v in settings["manikin_poses"].items()])}) saved_file_basename = "{}_vox{}_best_poses".format( settings["run_id"], settings["voxel_size"]) save_results(best_pose_number_by_point, result_folder, saved_file_basename, plot=settings["show_2d"], plot_options={"label": "Best pose at point", "tick_labels": sorted([v['num'] for k, v in settings["manikin_poses"].items()])}) # Also save the best scores per orientation data_io.save_multi_array(result_folder, "{}_vox{}_best_poses_by_orientation".format(settings["run_id"], settings["voxel_size"]), best_pose_for_orientation) data_io.save_multi_array(result_folder, "{}_vox{}_best_scores_by_orientation".format(settings["run_id"], settings["voxel_size"]), best_score_for_orientation) if settings["show_2d"]: # After saving score data to one big npz file, make the individual plots to match for ang in settings["manikin_orientations"]: saved_file_basename = "{}_vox{}_best_scores_ang{}".format(settings["run_id"], settings["voxel_size"], ang) render_results.save_heatmap(result_folder, saved_file_basename, best_score_for_orientation[str(ang)], label="Best score for orientation {}".format(ang), tick_labels=sorted([v['score'] for k, v in settings["manikin_poses"].items()]))