93 lines
3.8 KiB
Python
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() |