def prepare_for_extraction(op, input_file_name_list, dimensions): """ Prepares for extraction by filling out necessary ops parameters. Removes dependence on other modules. Creates pre_registered binary file. """ # Set appropriate ops parameters op['Lx'], op['Ly'] = dimensions op['nframes'] = 500 // op['nplanes'] // op['nchannels'] op['frames_per_file'] = 500 // op['nplanes'] // op['nchannels'] op['xrange'], op['yrange'] = [[2, 402], [2, 358]] ops = [] for plane in range(op['nplanes']): curr_op = op.copy() plane_dir = utils.get_plane_dir(op, plane) bin_path = utils.write_data_to_binary( str(plane_dir.joinpath('data.bin')), str(input_file_name_list[plane][0])) curr_op['meanImg'] = np.reshape( np.load(str(input_file_name_list[plane][0])), (-1, op['Ly'], op['Lx'])).mean(axis=0) curr_op['reg_file'] = bin_path if plane == 1: # Second plane result has different crop. curr_op['xrange'], curr_op['yrange'] = [[1, 403], [1, 359]] if curr_op['nchannels'] == 2: bin2_path = utils.write_data_to_binary( str(plane_dir.joinpath('data_chan2.bin')), str(input_file_name_list[plane][1])) curr_op['reg_file_chan2'] = bin2_path curr_op['save_path'] = plane_dir curr_op['ops_path'] = plane_dir.joinpath('ops.npy') ops.append(curr_op) return ops
def prepare_for_detection(op, input_file_name_list, dimensions): """ Prepares for detection by filling out necessary ops parameters. Removes dependence on other modules. Creates pre_registered binary file. """ # Set appropriate ops parameters op.update({ 'Lx': dimensions[0], 'Ly': dimensions[1], 'nframes': 500 // op['nplanes'] // op['nchannels'], 'frames_per_file': 500 // op['nplanes'] // op['nchannels'], 'xrange': [2, 402], 'yrange': [2, 358], }) ops = [] for plane in range(op['nplanes']): curr_op = op.copy() plane_dir = utils.get_plane_dir(save_path0=op['save_path0'], plane=plane) bin_path = str(plane_dir.joinpath('data.bin')) BinaryFile.convert_numpy_file_to_suite2p_binary(str(input_file_name_list[plane][0]), bin_path) curr_op['meanImg'] = np.reshape( np.load(str(input_file_name_list[plane][0])), (-1, op['Ly'], op['Lx']) ).mean(axis=0) curr_op['reg_file'] = bin_path if plane == 1: # Second plane result has different crop. curr_op['xrange'] = [1, 403] curr_op['yrange'] = [1, 359] if curr_op['nchannels'] == 2: bin2_path = str(plane_dir.joinpath('data_chan2.bin')) BinaryFile.convert_numpy_file_to_suite2p_binary(str(input_file_name_list[plane][1]), bin2_path) curr_op['reg_file_chan2'] = bin2_path curr_op['save_path'] = plane_dir curr_op['ops_path'] = plane_dir.joinpath('ops.npy') ops.append(curr_op) return ops
def extract_wrapper(ops): for plane in range(ops[0]['nplanes']): curr_op = ops[plane] plane_dir = utils.get_plane_dir(curr_op, plane) extract_input = np.load(curr_op['data_path'][0].joinpath( 'detection', 'detect_output_{0}p{1}c{2}.npy'.format(curr_op['nplanes'], curr_op['nchannels'], plane)), allow_pickle=True)[()] extraction.extract(curr_op, extract_input['cell_pix'], extract_input['cell_masks'], extract_input['neuropil_masks'], extract_input['stat']) F = np.load(plane_dir.joinpath('F.npy')) Fneu = np.load(plane_dir.joinpath('Fneu.npy')) dF = F - curr_op['neucoeff'] * Fneu dF = extraction.preprocess( F=dF, baseline=curr_op['baseline'], win_baseline=curr_op['win_baseline'], sig_baseline=curr_op['sig_baseline'], fs=curr_op['fs'], prctile_baseline=curr_op['prctile_baseline']) spks = extraction.oasis(F=dF, batch_size=curr_op['batch_size'], tau=curr_op['tau'], fs=curr_op['fs']) np.save(plane_dir.joinpath('spks.npy'), spks)