import pandas as pd from IPython import embed import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import make_axes_locatable def get_feeder_risk(feeder_position, separation_y, dark_center_y, light_risk=1): x_limits = np.array([0, 1.24]) y_limits = np.array([0, 0.81]) min_wall_dist_x = min(np.abs(feeder_position[0] - x_limits)) min_wall_dist_y = min(np.abs(feeder_position[1] - y_limits)) risk_x = 1/(max(x_limits)/2) * min_wall_dist_x risk_y = 1/(max(y_limits)/2) * min_wall_dist_y total_risk = min(risk_x, risk_y) top_or_bottom = "top" if feeder_position[1] <= separation_y else "bottom" darkside = "top" if dark_center_y < separation_y else "bottom" is_position_on_the_bright_side = top_or_bottom != darkside if is_position_on_the_bright_side: total_risk = total_risk + light_risk return np.round(total_risk, 3) def plot_risk_surface(): x_range = np.arange(0.0, 1.24, .05) y_range = np.arange(0.0, .82, .05) risk_matrix = np.zeros((len(x_range), len(y_range))) for i, x in enumerate(x_range): for j, y in enumerate(y_range): risk_matrix[i, j] = get_feeder_risk([x, y], 0.40, dark_center_y=0.17) im = plt.imshow(risk_matrix.T, origin='upper') plt.xticks(np.arange(0, len(x_range), 5), np.arange(0, len(x_range), 5)*0.05) plt.yticks(np.arange(0, len(y_range), 5), np.arange(0, len(y_range), 5)*0.05) plt.xlabel("width [m]") plt.ylabel("height [m]") divider = make_axes_locatable(plt.gca()) cax = divider.append_axes("right", size="5%", pad=0.1) cbar = plt.colorbar(im, cax=cax) cbar.set_label("risk") plt.gcf().set_size_inches(5, 3.) plt.gcf().subplots_adjust(right=0.875, top=0.975, bottom=0.10) plt.savefig("risk_surface.pdf") plt.close() if __name__ == "__main__": # plot_risk_surface() setup_cfg_ext = pd.read_csv("../data/setup_configurations_ext.csv", sep=";", index_col=0) feeder_pos = pd.read_csv("../data/feeder_positions.csv", sep=",", index_col=0) configs = [] final_config = {"video", "subject", "date", "day", "temperature", "conductivity", "separation_line", "dark_center", "dark", "feeder_1_pos", "feeder_1_risk", } videos = setup_cfg_ext.video.values for v in videos: print(v) row = setup_cfg_ext[setup_cfg_ext.video == v] subject = row.subject.values[0] day = row.day.values[0] date = row.date.values[0] sep = row.seperation_line.values[0] sep = np.array(list(map(float, sep.strip()[1:-1].split(",")))) dc = row.dark_center.values[0] dc = np.array(list(map(float, dc.strip()[1:-1].split(",")))) dark = row.dark.values[0] pos_row = feeder_pos[feeder_pos.day == day] temp = pos_row.temperature.values[0] cond = pos_row.conductivity.values[0] config = {"day": day, "video": v, "subject": subject, "date": date, "temperature": temp, "conductivity": cond, "separation_line": sep, "dark_center": dc, "dark":dark} for feeder_number in range(1, 9): pos = pos_row["feeder_pos_%i" % feeder_number].values[0] pos = np.array(list(map(float, pos[1:-1].split()))) risk = get_feeder_risk(pos, sep[1], dark_center_y=dc[1]) if v == "2020.12.02_lepto40.mp4" or v == "2020.12.02_lepto43.mp4": # beide verkehrt herum gelabled config["feeder_pos_%i" % (feeder_number)] = pos config["feeder_risk_%i" % (feeder_number)] = risk else: config["feeder_pos_%i" % (9 - feeder_number)] = pos config["feeder_risk_%i" % (9 - feeder_number)] = risk configs.append(config) df = pd.DataFrame(configs) df.to_csv("../data/setup_configuration.csv", sep=";") embed() exit()