Source code for data_treat.make_report

import numpy as np
from string import Template
from gui.gui_utils import popupmsg
import glob
import platform
import os


[docs]def load_data(fileName, trajectory, cam_top, cam_left): """Load existing data from file :param fileName: name of the file to load :param trajectory: Experiment object to initialize :param cam_top, cam_left: top and left camera object to initialize """ fichier = open(fileName) str_data = fichier.read() fichier.close() category = str_data.split("===") test_params = category[1].split('\n') fps = float(test_params[3].split(':')[1]) sample = test_params[5].split(':')[1] shot = test_params[6].split(':')[1] pressure = float(test_params[7].split(':')[1]) trajectory.set_exp_params(shot, sample, pressure, fileName) traj = category[3].split('\n') t = [] X = [] Y = [] Z = [] yerr = [] for elem in traj[2:]: if (len(elem.split()) > 4): if (len(elem.split()) == 4): ti, xi, yi, zi = elem.split() elif (len(elem.split()) == 5): ti, xi, yi, zi, yerri = elem.split() yerr.append(float(yerri)) t.append(float(ti)) X.append(float(xi)) Y.append(float(yi)) Z.append(float(zi)) if len(yerr) == 0: trajectory.set_trajectory(np.array(t), np.array(X), np.array(Y), np.array(Z)) else: trajectory.set_trajectory(np.array(t), np.array(X), np.array(Y), np.array(Z), yerr=np.array(yerr)) cam_top_string = category[5].split("=")[1].split('Top camera\n')[1] cam_top.load_from_string(cam_top_string) cam_top.framerate = fps cam_left_string = category[6].split("=")[1].split('Left camera\n')[1] cam_left.load_from_string(cam_left_string) cam_left.framerate = fps listpic = glob.glob("data_treat/*.png") for elem in listpic: if "Reproj_error.png" in elem: delete_pic("data_treat/Reproj_error.png")
def delete_pic(pic_path): if platform.system() == 'Windows': pic_path = pic_path.replace('/', '\\') os.system('del '+pic_path) elif platform.system() == 'Linux': os.system('rm -rf '+pic_path) else: popupmsg("Unknown OS, I cannot save the pictures. You may find them in the data_treat folder directly...")
[docs]def data_save(traj_3d, cam_top, cam_left): """Save experiment data after 3D trajectory reconstruction :param traj_3d: experiment object to save :param cam_top, cam_left: top and left camera object to save :return: 1 if success """ lenX = traj_3d.X.shape[0] out_str = '' for i in range(0, lenX): out_str += '\n{:.04E} {:.04E} {:.04E} {:.04E}'.format(traj_3d.t[i], traj_3d.X[i], traj_3d.Y[i], traj_3d.Z[i]) if not(traj_3d.yerr is None): out_str += ' {:.04E}'.format(traj_3d.yerr[i]) out_str += "\n\n=== Calibration data\n" out_str += "==== Top camera\n" + cam_top.write_cam_data() out_str += "==== Left camera\n" + cam_left.write_cam_data() fichier = open(traj_3d.save_dir, 'a') fichier.write(out_str) fichier.close() return 1
[docs]def make_report(traj_3d, cam_top, cam_left, template): """Generates a report of the post-processed values as well as the parameters used to extract the trajectory. Also saves the trajectory. :param traj_3d: Experiment object :param cam_top,cam_left: camera objects used for the trajectory determination :param template: name of the template to use for the report """ if traj_3d.save_dir == '': popupmsg('Empty file name') return 0 vi_norm = np.sqrt(traj_3d.vinit[0] ** 2 + traj_3d.vinit[1] ** 2 + traj_3d.vinit[2] ** 2) vo_norm = np.sqrt(traj_3d.vend[0] ** 2 + traj_3d.vend[1] ** 2 + traj_3d.vend[2] ** 2) dimp = traj_3d.yerr[traj_3d.impact_i] make_template_file(template, traj_3d.save_dir, [traj_3d.save_dir, cam_top.firstPic, cam_top.framerate, cam_top.res, traj_3d.sample, traj_3d.shot, traj_3d.pressure, traj_3d.alpha, traj_3d.vinit[0], traj_3d.vinit[1], traj_3d.vinit[2], vi_norm, traj_3d.vend[0], traj_3d.vend[1], traj_3d.vend[2], vo_norm, traj_3d.impact_pos[0], traj_3d.impact_pos[1], traj_3d.impact_pos[2], dimp], ['testName', 'picName', 'fps', 'res', 'sample', 'shot', 'pressure', 'angle', 'VX', 'VY', 'VZ', 'ViNorm', 'VXAfter', 'VYAfter', 'VZAfter', 'VoNorm', 'X', 'Y', 'Z', 'dimp']) data_save(traj_3d, cam_top, cam_left)
[docs]def make_template_file(template, sortie, H, var_names): """Create a file from a given template file :param template: template file name :param sortie: output file name :param H: variable values :param var_names: variable names """ len_vars = len(H) to_rmv = [] for i in range(0, len_vars): if type(H[i]) == float or type(H[i]) == np.float64: H[i] = '{:.04f}'.format(H[i]) for elem in to_rmv: var_names.remove(elem) len_vars = len(H) fichier = open(template,'r'); contenu = fichier.read(); modif_dic = {} for i in range(0, len_vars): modif_dic[var_names[i]] = H[i] contenu_modif = Template(contenu).safe_substitute(modif_dic); fichier.close(); fichier = open(sortie,'w'); fichier.write(contenu_modif); fichier.close();