def test_save_tables(self): df = pd.DataFrame({"a": [1, 2, 3, 4], "b": [5, 6, 7, 8]}) path = os.path.join(IO_UTILS_DATA, "table.xlsx") io_utils.save_tables(path, [df]) df2 = pd.read_excel(path, engine="openpyxl") assert np.all(df == df2)
def __save_quant_data__(self, dirpath: str): """Save quantitative data and 2D visualizations of femoral cartilage. Check which quantitative values (T2, T1rho, etc) are defined for femoral cartilage and analyze these 1. Save 2D total, superficial, and deep visualization maps. 2. Save {'medial', 'lateral'}, {'anterior', 'central', 'posterior'}, {'deep', 'superficial'} data to excel file Args: dirpath (str): Directory path to tissue data. """ q_names = [] dfs = [] for quant_val in QuantitativeValueType: if quant_val.name not in self.quant_vals.keys(): continue q_names.append(quant_val.name) q_val = self.quant_vals[quant_val.name] dfs.append(q_val[1]) q_name_dirpath = io_utils.mkdirs( os.path.join(dirpath, quant_val.name.lower())) for q_map_data in q_val[0]: filepath = os.path.join(q_name_dirpath, q_map_data['filename']) xlabel = 'Slice' ylabel = 'Angle (binned)' title = q_map_data['title'] data_map = q_map_data['data'] plt.clf() upper_bound = BOUNDS[quant_val] if preferences.visualization_use_vmax: # Hard bounds - clipping plt.imshow(data_map, cmap='jet', vmin=0.0, vmax=BOUNDS[quant_val]) else: # Try to use a soft bounds if np.sum(data_map <= upper_bound) == 0: plt.imshow(data_map, cmap='jet', vmin=0.0, vmax=BOUNDS[quant_val]) else: warnings.warn( '%s: Pixel value exceeded upper bound (%0.1f). Using normalized scale.' % (quant_val.name, upper_bound)) plt.imshow(data_map, cmap='jet') plt.xlabel(xlabel) plt.ylabel(ylabel) plt.title(title) clb = plt.colorbar() clb.ax.set_title('(ms)') plt.savefig(filepath) # Save data raw_data_filepath = os.path.join( q_name_dirpath, 'raw_data', q_map_data['raw_data_filename']) io_utils.save_pik(raw_data_filepath, data_map) if len(dfs) > 0: io_utils.save_tables(os.path.join(dirpath, 'data.xlsx'), dfs, q_names)
def __save_quant_data__(self, dirpath): """Save quantitative data and 2D visualizations of patellar cartilage Check which quantitative values (T2, T1rho, etc) are defined for patellar cartilage and analyze these: 1. Save 2D total, superficial, and deep visualization maps 2. Save {'medial', 'lateral'}, {'anterior', 'posterior'}, {'superior', 'inferior', 'total'} data to excel file :param dirpath: base filepath to save data """ q_names = [] dfs = [] for quant_val in QuantitativeValueType: if quant_val.name not in self.quant_vals.keys(): continue q_names.append(quant_val.name) q_val = self.quant_vals[quant_val.name] dfs.append(q_val[1]) q_name_dirpath = io_utils.mkdirs( os.path.join(dirpath, quant_val.name.lower())) for q_map_data in q_val[0]: filepath = os.path.join(q_name_dirpath, q_map_data["filename"]) xlabel = "" ylabel = "" title = q_map_data["title"] data_map = q_map_data["data"] axs_bounds = self.__get_axis_bounds__(data_map, leave_buffer=True) plt.clf() upper_bound = BOUNDS[quant_val] if preferences.visualization_use_vmax: # Hard bounds - clipping plt.imshow(data_map, cmap="jet", vmin=0.0, vmax=BOUNDS[quant_val]) else: # Try to use a soft bounds if np.sum(data_map <= upper_bound) == 0: plt.imshow(data_map, cmap="jet", vmin=0.0, vmax=BOUNDS[quant_val]) else: warnings.warn( "%s: Pixel value exceeded upper bound (%0.1f). Using normalized scale." % (quant_val.name, upper_bound)) plt.imshow(data_map, cmap="jet") plt.xlabel(xlabel) plt.ylabel(ylabel) plt.title(title) plt.ylim(axs_bounds[0]) plt.gca().invert_yaxis() plt.xlim(axs_bounds[1]) # plt.axis('tight') clb = plt.colorbar() clb.ax.set_ylabel("(ms)") plt.savefig(filepath) # Save data raw_data_filepath = os.path.join( q_name_dirpath, "raw_data", q_map_data["raw_data_filename"]) io_utils.save_pik(raw_data_filepath, data_map) if len(dfs) > 0: io_utils.save_tables(os.path.join(dirpath, "data.xlsx"), dfs, q_names)