def plot_multiple_contours_session_wise(selected_rows, version = None , corr_array = None, pnr_array = None): ''' Plots different versions of contour images that change the initialization parameters for source extraction. The idea is to see the impact of different seed selection in the final source extraction result. :param selected_rows: all analysis state selected :param version: array containing the version numbers of source extraction that will be plotted :param corr_array: array of the same length of version and pnr_array containing the min_corr values for those versions :param pnr_array: array of the same length of version and corr_array containing the min_pnr values for those versions :return: figure ''' states_df = db.open_analysis_states_database() figure, axes = plt.subplots(len(corr_array), len(pnr_array), figsize=(15, 15)) color = ['w','b','r','m','c'] for row in range(len(selected_rows)): mouse_row = selected_rows.iloc[row] index = mouse_row.name output = eval(mouse_row.loc['source_extraction_output']) corr_path = output['meta']['corr']['main'] cn_filter = np.load(db.get_file(corr_path)) for ii in range(corr_array.shape[0]): for jj in range(pnr_array.shape[0]): axes[ii, jj].imshow(cn_filter) new_row = db.select(states_df, 'component_evaluation', mouse=index[0], session=index[1], trial=index[2], is_rest=index[3], cropping_v=index[5], motion_correction_v=index[6], source_extraction_v=version[ii * len(pnr_array) + jj]) new_row = new_row.iloc[0] output = eval(new_row.loc['source_extraction_output']) cnm_file_path = output['main'] cnm = load_CNMF(db.get_file(cnm_file_path)) coordinates = cm.utils.visualization.get_contours(cnm.estimates.A, np.shape(cn_filter), 0.2, 'max') for c in coordinates: v = c['coordinates'] c['bbox'] = [np.floor(np.nanmin(v[:, 1])), np.ceil(np.nanmax(v[:, 1])), np.floor(np.nanmin(v[:, 0])), np.ceil(np.nanmax(v[:, 0]))] axes[ii, jj].plot(*v.T, c = color[row]) axes[ii, jj].set_title('min_corr = ' + f'{round(corr_array[ii],2)}') axes[ii, jj].set_ylabel('min_pnr = ' + f'{round(pnr_array[jj],2)}') fig_dir = 'data/interim/source_extraction/session_wise/meta/figures/contours/' fig_name = fig_dir + db.create_file_name(3, new_row.name)+'_corr_min' + f'{round(corr_array[0],1)}'+ '_pnr_min'+f'{round(pnr_array[0],1)}' + '_all.png' figure.savefig(fig_name) return figure
import src.data_base_manipulation as db from src.steps.decoding import run_decoder as main_decoding from src.steps.cropping import run_cropper as main_cropping from src.steps.equalizer import run_equalizer as main_equalizing from src.steps.cropping import cropping_interval, cropping_segmentation from src.analysis.figures import plot_movie_frame from src.steps.motion_correction import run_motion_correction as main_motion_correction from src.steps.alignment2 import run_alignmnet as main_alignment from src.steps.source_extraction import run_source_extraction as main_source_extraction from src.steps.component_evaluation import run_component_evaluation as main_component_evaluation # Paths analysis_states_database_path = os.environ[ 'PROJECT_DIR'] + 'references/analysis/calcium_imaging_data_base_server_new.xlsx' backup_path = os.environ['PROJECT_DIR'] + 'references/analysis/backup/' states_df = db.open_analysis_states_database( path=analysis_states_database_path) mouse_number = 56165 sessions = [1, 2, 4] init_trial = 1 end_trial = 22 is_rest = None # Select first data selected_rows = db.select(states_df, 'decoding', mouse=mouse_number, is_rest=is_rest, decoding_v=1) mouse_row = selected_rows.iloc[0] #mouse_row = main_decoding(mouse_row)
from src.steps.motion_correction import run_motion_correction as main_motion_correction from src.steps.source_extraction import run_source_extraction as main_source_extraction from src.steps.component_evaluation import run_component_evaluation as main_component_evaluation import src.analysis_files_manipulation as fm import src.analysis.metrics as metrics from caiman.source_extraction.cnmf.cnmf import load_CNMF #%% Paths analysis_states_database_path = 'references/analysis/analysis_states_database.xlsx' backup_path = 'references/analysis/backup/' #parameters_path = 'references/analysis/parameters_database.xlsx' ## Open thw data base with all data states_df = db.open_analysis_states_database() #%% DECODING # Select all the data corresponding to a particular mouse. Ex: 56165. selected_rows = db.select(states_df,'decoding',56165) mouse_row = selected_rows.iloc[0] mouse_row = main_decoding(mouse_row) states_df = db.append_to_or_merge_with_states_df(states_df, mouse_row) db.save_analysis_states_database(states_df, analysis_states_database_path, backup_path) #%% CROPPING # Select the rows for cropping selected_rows = db.select(states_df,'cropping',56165)