personality/boldness/code/merge_configs.py

93 lines
3.8 KiB
Python

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()