def set_cell_models_folder(cell_models_folder): """Set default cell_models folder.""" info, config = get_default_config() if os.path.isdir(cell_models_folder): info['cell_models_folder'] = os.path.abspath(cell_models_folder) with open(join(config, 'mearec.conf'), 'w') as f: yaml.dump(info, f) print('Set default cell_models_folder to: ', cell_models_folder) else: print(cell_models_folder, ' is not a folder!')
def set_recordings_params(recordings_params): """Set default recordings parameter file.""" info, config = get_default_config() recordings_params = Path(recordings_params).absolute() if recordings_params.is_file() and recordings_params.suffix in ['.yaml', '.yml']: info['recording_params'] = str(recordings_params) with open(Path(config) / 'mearec.conf', 'w') as f: yaml.dump(info, f) print('Set default recordings_params to: ', recordings_params) else: print(recordings_params, ' is not a yaml!')
def set_templates_params(templates_params): """Set default templates parameter file.""" info, config = get_default_config() templates_params = Path(templates_params).absolute() if templates_params.is_file() and templates_params.suffix in ['.yaml', '.yml']: info['templates_params'] = str(templates_params) with open(Path(config) / 'mearec.conf', 'w') as f: yaml.dump(info, f) print('Set default templates_params to: ', templates_params) else: print(templates_params, ' is not a yaml!')
def set_cell_models_folder(cell_models_folder): """Set default cell_models folder.""" info, config = get_default_config() cell_models_folder = Path(cell_models_folder) if cell_models_folder.is_dir(): info['cell_models_folder'] = str(cell_models_folder.absolute()) with open(Path(config) / 'mearec.conf', 'w') as f: yaml.dump(info, f) print('Set default cell_models_folder to: ', cell_models_folder) else: print(cell_models_folder, ' is not a folder!')
def set_recordings_params(recordings_params): """Set default recordings parameter file.""" info, config = get_default_config() recordings_params = os.path.abspath(recordings_params) if os.path.isfile(recordings_params) and ( recordings_params.endswith('yaml') or recordings_params.endswith('yml')): info['recordings_params'] = recordings_params with open(join(config, 'mearec.conf'), 'w') as f: yaml.dump(info, f) print('Set default recordings_params to: ', recordings_params) else: print(recordings_params, ' is not a yaml!')
def set_templates_params(templates_params): """Set default templates parameter file.""" info, config = get_default_config() templates_params = os.path.abspath(templates_params) if os.path.isfile(templates_params) and (templates_params.endswith('yaml') or templates_params.endswith('yml')): info['templates_params'] = templates_params with open(join(config, 'mearec.conf'), 'w') as f: yaml.dump(info, f) print('Set default templates_params to: ', templates_params) else: print(templates_params, ' is not a yaml!')
def set_recordings_folder(recordings_folder, create): """Set default recordings output folder.""" info, config = get_default_config() recordings_folder = Path(recordings_folder).absolute() if recordings_folder.is_dir(): info['recordings_folder'] = str(recordings_folder) with open(Path(config) / 'mearec.conf', 'w') as f: yaml.dump(info, f) print('Set default recordings_folder to: ', recordings_folder) elif create: os.makedirs(str(recordings_folder)) info['recordings_folder'] = str(recordings_folder) with open(Path(config) / 'mearec.conf', 'w') as f: yaml.dump(info, f) print('Set default recordings_folder to: ', recordings_folder) else: print(recordings_folder, ' is not a folder!')
def set_recordings_folder(recordings_folder, create): """Set default recordings output folder.""" info, config = get_default_config() recordings_folder = os.path.abspath(recordings_folder) if os.path.isdir(recordings_folder): info['recordings_folder'] = recordings_folder with open(join(config, 'mearec.conf'), 'w') as f: yaml.dump(info, f) print('Set default recordings_folder to: ', recordings_folder) elif create: os.makedirs(recordings_folder) info['recordings_folder'] = recordings_folder with open(join(config, 'mearec.conf'), 'w') as f: yaml.dump(info, f) print('Set default recordings_folder to: ', recordings_folder) else: print(recordings_folder, ' is not a folder!')
def set_templates_folder(templates_folder, create): """Set default templates output folder.""" info, config = get_default_config() templates_folder = os.path.abspath(templates_folder) if os.path.isdir(templates_folder): info['templates_folder'] = templates_folder with open(join(config, 'mearec.conf'), 'w') as f: yaml.dump(info, f) print('Set default templates_folder to: ', templates_folder) elif create: os.makedirs(templates_folder) info['templates_folder'] = templates_folder with open(join(config, 'mearec.conf'), 'w') as f: yaml.dump(info, f) print('Set default templates_folder to: ', templates_folder) else: print(templates_folder, ' is not a folder!')
def gen_templates(params, **kwargs): """Generates TEMPLATES with biophysical simulation.""" info, config_folder = get_default_config() if params is None: with open(info['templates_params'], 'r') as pf: if use_loader: params_dict = yaml.load(pf, Loader=yaml.FullLoader) else: params_dict = yaml.load(pf) else: with open(params, 'r') as pf: if use_loader: params_dict = yaml.load(pf, Loader=yaml.FullLoader) else: params_dict = yaml.load(pf) if kwargs['default'] is True: pprint.pprint(params_dict) mu.return_mea() return if kwargs['cellfolder'] is not None: model_folder = kwargs['cellfolder'] else: model_folder = info['cell_models_folder'] params_dict['cell_models_folder'] = model_folder if kwargs['seed'] is not None: seed = kwargs['seed'] else: seed = np.random.randint(1, 10000) params_dict['seed'] = seed if kwargs['folder'] is not None: templates_folder = kwargs['folder'] params_dict['templates_folder'] = Path(kwargs['folder']) else: templates_folder = Path(info['templates_folder']) intraonly = kwargs['intraonly'] if kwargs['rot'] is not None: params_dict['rot'] = kwargs['rot'] if kwargs['n'] is not None: params_dict['n'] = kwargs['n'] if kwargs['dt'] is not None: params_dict['dt'] = kwargs['dt'] if kwargs['ncontacts'] is not None: params_dict['ncontacts'] = kwargs['ncontacts'] if kwargs['overhang'] is not None: params_dict['overhang'] = kwargs['overhang'] if kwargs['xlim'] is not None and len(kwargs['xlim']) == 2: params_dict['xlim'] = kwargs['xlim'] if kwargs['ylim'] is not None and len(kwargs['ylim']) == 2: params_dict['ylim'] = kwargs['ylim'] if kwargs['zlim'] is not None and len(kwargs['zlim']) == 2: params_dict['zlim'] = kwargs['zlim'] if kwargs['min_amp'] is not None: params_dict['min_amp'] = kwargs['min_amp'] if kwargs['drifting']: params_dict['drifting'] = True elif 'drifting' not in params_dict.keys(): params_dict['drifting'] = False if kwargs['min_drift'] is not None: params_dict['min_drift'] = kwargs['min_drift'] if kwargs['max_drift'] is not None: params_dict['max_drift'] = kwargs['max_drift'] if kwargs['drift_steps'] is not None: params_dict['drift_steps'] = kwargs['drift_steps'] if kwargs['drift_xlim'] is not None and len(kwargs['drift_xlim']) == 2: params_dict['drift_xlim'] = kwargs['drift_xlim'] if kwargs['drift_ylim'] is not None and len(kwargs['drift_ylim']) == 2: params_dict['drift_ylim'] = kwargs['drift_ylim'] if kwargs['drift_zlim'] is not None and len(kwargs['drift_zlim']) == 2: params_dict['drift_zlim'] = kwargs['drift_zlim'] if kwargs['probe'] is not None: if kwargs['probe'] in mu.return_mea_list(): params_dict['probe'] = kwargs['probe'] else: print("The probe ", kwargs['probe'], " is not listead as a MEAutility probe.") return if kwargs['no_parallel']: parallel = False else: parallel = True if kwargs['njobs'] is not None: njobs = kwargs['njobs'] else: njobs = None recompile = kwargs['recompile'] verbose = kwargs['verbose'] params_dict['templates_folder'] = str(templates_folder) tempgen = gt.gen_templates(cell_models_folder=model_folder, params=params_dict, templates_tmp_folder=str(templates_folder), intraonly=intraonly, n_jobs=njobs, recompile=recompile, parallel=parallel, verbose=verbose) # Merge simulated data and cleanup if not intraonly: rot = params_dict['rot'] n = params_dict['n'] probe = params_dict['probe'] if kwargs['fname'] is None: if params_dict['drifting']: fname = f'templates_{n}_{probe}_drift_{time.strftime("%d-%m-%Y_%H-%M")}.h5' else: fname = f'templates_{n}_{probe}_{time.strftime("%d-%m-%Y_%H-%M")}.h5' else: fname = kwargs['fname'] save_fname = str(templates_folder / rot / fname) save_template_generator(tempgen, save_fname, verbose=True)
def default_config(): """Print default configurations.""" info, config = get_default_config(print_version=True) pprint.pprint(info)
def gen_recordings(params, **kwargs): """Generates RECORDINGS from TEMPLATES.""" # Retrieve default_params file info, config_folder = get_default_config() if params is None: with open(info['recordings_params'], 'r') as pf: if use_loader: params_dict = yaml.load(pf, Loader=yaml.FullLoader) else: params_dict = yaml.load(pf) else: with open(params, 'r') as pf: if use_loader: params_dict = yaml.load(pf, Loader=yaml.FullLoader) else: params_dict = yaml.load(pf) if kwargs['default'] is True: pprint.pprint(params_dict) return templates_folder = Path(kwargs['templates']) if kwargs['folder'] is not None: params_dict['recordings'].update({'recordings_folder': kwargs['folder']}) else: params_dict['recordings'].update({'recordings_folder': info['recordings_folder']}) recordings_folder = params_dict['recordings']['recordings_folder'] if kwargs['templates'] is None: print('Provide eap templates path') return else: if templates_folder.is_dir() or templates_folder.suffix in ['.h5', '.hdf5']: params_dict['templates'].update({'templates': kwargs['templates']}) else: print(kwargs['templates']) raise AttributeError("'templates' is not a folder") if kwargs['n_exc'] is not None: params_dict['spiketrains']['n_exc'] = kwargs['n_exc'] if kwargs['n_inh'] is not None: params_dict['spiketrains']['n_inh'] = kwargs['n_inh'] if kwargs['f_exc'] is not None: params_dict['spiketrains']['f_exc'] = kwargs['f_exc'] if kwargs['f_inh'] is not None: params_dict['spiketrains']['f_inh'] = kwargs['f_inh'] if kwargs['st_exc'] is not None: params_dict['spiketrains']['st_exc'] = kwargs['st_exc'] if kwargs['st_inh'] is not None: params_dict['spiketrains']['st_inh'] = kwargs['st_inh'] if kwargs['min_rate'] is not None: params_dict['spiketrains']['min_rate'] = kwargs['min_rate'] if kwargs['ref_per'] is not None: params_dict['spiketrains']['ref_per'] = kwargs['ref_per'] if kwargs['process'] is not None: params_dict['spiketrains']['process'] = kwargs['process'] if kwargs['min_rate'] is not None: params_dict['spiketrains']['min_rate'] = kwargs['min_rate'] if kwargs['duration'] is not None: params_dict['spiketrains']['duration'] = kwargs['duration'] if kwargs['tstart'] is not None: params_dict['spiketrains']['t_start'] = kwargs['t_start'] if kwargs['min_dist'] is not None: params_dict['templates']['min_dist'] = kwargs['min_dist'] if kwargs['min_amp'] is not None: params_dict['templates']['min_amp'] = kwargs['min_amp'] if kwargs['max_amp'] is not None: params_dict['templates']['max_amp'] = kwargs['max_amp'] if kwargs['overlap_thresh'] is not None: params_dict['templates']['overlap_threshold'] = kwargs['overlap_thresh'] if kwargs['noise_lev'] is not None: params_dict['recordings']['noise_level'] = kwargs['noise_lev'] if kwargs['modulation'] is not None: params_dict['recordings']['modulation'] = kwargs['modulation'] if kwargs['chunk_duration'] is not None: params_dict['recordings']['chunk_duration'] = kwargs['chunk_duration'] if kwargs['filter']: params_dict['recordings']['filter'] = True else: params_dict['recordings']['filter'] = False if kwargs['filt_cutoff'] is not None: if isinstance(kwargs['filt_cutoff'], tuple): kwargs['filt_cutoff'] = list(kwargs['filt_cutoff']) params_dict['recordings']['filter_cutoff'] = kwargs['filt_cutoff'] if kwargs['filt_order'] is not None: params_dict['recordings']['filt_order'] = kwargs['filt_order'] if kwargs['fs'] is not None: params_dict['recordings']['fs'] = kwargs['fs'] else: params_dict['recordings']['fs'] = None if kwargs['sync_rate'] is not None: params_dict['recordings']['sync_rate'] = kwargs['sync_rate'] else: params_dict['recordings']['sync_rate'] = None if kwargs['sync_jitt'] is not None: params_dict['recordings']['sync_jitt'] = kwargs['sync_jitt'] else: params_dict['recordings']['sync_jitt'] = 1 if kwargs['noise_seed'] is not None: params_dict['seeds']['noise'] = kwargs['noise_seed'] if kwargs['temp_seed'] is not None: params_dict['seeds']['templates'] = kwargs['temp_seed'] if kwargs['st_seed'] is not None: params_dict['seeds']['spiketrains'] = kwargs['st_seed'] if kwargs['conv_seed'] is not None: params_dict['seeds']['convolution'] = kwargs['conv_seed'] if kwargs['overlap']: params_dict['recordings']['overlap'] = True elif 'overlap' not in params_dict['recordings'].keys(): params_dict['recordings']['overlap'] = False if kwargs['extract_wf']: params_dict['recordings']['extract_wf'] = True elif 'extract_wf' not in params_dict['recordings'].keys(): params_dict['recordings']['extract_wf'] = False if kwargs['half_dist'] is not None: params_dict['recordings']['half_dist'] = kwargs['half_dist'] if kwargs['color_noise']: params_dict['recordings']['noise_color'] = True elif 'noise_color' not in params_dict['recordings'].keys(): params_dict['recordings']['noise_color'] = False if kwargs['color_peak'] is not None: params_dict['recordings']['color_peak'] = kwargs['color_peak'] if kwargs['color_q'] is not None: params_dict['recordings']['color_q'] = kwargs['color_q'] if kwargs['random_noise_floor'] is not None: params_dict['recordings']['random_noise_floor'] = kwargs['random_noise_floor'] if kwargs['bursting']: params_dict['recordings']['bursting'] = True elif 'bursting' not in params_dict['recordings'].keys(): params_dict['recordings']['bursting'] = False if kwargs['shape_mod']: params_dict['recordings']['shape_mod'] = True elif 'shape_mod' not in params_dict['recordings'].keys(): params_dict['recordings']['shape_mod'] = False if kwargs['drifting']: params_dict['recordings']['drifting'] = True elif 'drifting' not in params_dict['recordings'].keys(): params_dict['recordings']['drifting'] = False if kwargs['preferred_dir'] is not None and len(kwargs['preferred_dir']) == 3: params_dict['recordings']['preferred_dir'] = kwargs['preferred_dir'] if kwargs['angle_tol']: params_dict['recordings']['angle_tol'] = kwargs['angle_tol'] if kwargs['drift_velocity']: params_dict['recordings']['drift_velocity'] = kwargs['drift_velocity'] if kwargs['t_start_drift']: params_dict['recordings']['t_start_drift'] = kwargs['t_start_drift'] if kwargs['verbose']: verbose = 2 else: verbose = kwargs['verbose'] if kwargs['njobs'] is not None: njobs = kwargs['njobs'] else: njobs = None recgen = gt.gen_recordings(templates=kwargs['templates'], params=params_dict, verbose=verbose, n_jobs=njobs) info = recgen.info n_neurons = info['recordings']['n_neurons'] electrode_name = info['electrodes']['electrode_name'] duration = info['recordings']['duration'] noise_level = info['recordings']['noise_level'] if kwargs['fname'] is None: if kwargs['drifting']: fname = f'recordings_{n_neurons}cells_{electrode_name}_{duration}_{np.round(noise_level, 2)}uV_' \ f'drift_{time.strftime("%d-%m-%Y_%H-%M")}.h5' else: fname = f'recordings_{n_neurons}cells_{electrode_name}_{duration}_{np.round(noise_level, 2)}uV_' \ f'{time.strftime("%d-%m-%Y_%H-%M")}.h5' else: fname = kwargs['fname'] if recordings_folder is not None: recordings_folder = Path(recordings_folder) if not recordings_folder.is_dir(): os.makedirs(str(recordings_folder)) rec_path = str(recordings_folder / fname) save_recording_generator(recgen, rec_path, verbose=True)
def default_config(): """Print default configurations.""" info, config = get_default_config() pprint.pprint(info)
def gen_recordings(params, **kwargs): """Generates RECORDINGS from TEMPLATES.""" # Retrieve default_params file info, config_folder = get_default_config() if params is None: with open(info['recordings_params'], 'r') as pf: if use_loader: params_dict = yaml.load(pf, Loader=yaml.FullLoader) else: params_dict = yaml.load(pf) else: with open(params, 'r') as pf: if use_loader: params_dict = yaml.load(pf, Loader=yaml.FullLoader) else: params_dict = yaml.load(pf) if kwargs['default'] is True: pprint.pprint(params_dict) return if kwargs['folder'] is not None: params_dict['recordings'].update( {'recordings_folder': kwargs['folder']}) else: params_dict['recordings'].update( {'recordings_folder': info['recordings_folder']}) recordings_folder = params_dict['recordings']['recordings_folder'] if kwargs['templates'] is None: print('Provide eap templates path') return else: if os.path.isdir(kwargs['templates']) or kwargs['templates'].endswith('h5') \ or kwargs['templates'].endswith('hdf5'): params_dict['templates'].update({'templates': kwargs['templates']}) else: print(kwargs['templates']) raise AttributeError("'templates' is not a folder") if kwargs['n_exc'] is not None: params_dict['spiketrains']['n_exc'] = kwargs['n_exc'] if kwargs['n_inh'] is not None: params_dict['spiketrains']['n_inh'] = kwargs['n_inh'] if kwargs['f_exc'] is not None: params_dict['spiketrains']['f_exc'] = kwargs['f_exc'] if kwargs['f_inh'] is not None: params_dict['spiketrains']['f_inh'] = kwargs['f_inh'] if kwargs['st_exc'] is not None: params_dict['spiketrains']['st_exc'] = kwargs['st_exc'] if kwargs['st_inh'] is not None: params_dict['spiketrains']['st_inh'] = kwargs['st_inh'] if kwargs['min_rate'] is not None: params_dict['spiketrains']['min_rate'] = kwargs['min_rate'] if kwargs['ref_per'] is not None: params_dict['spiketrains']['ref_per'] = kwargs['ref_per'] if kwargs['process'] is not None: params_dict['spiketrains']['process'] = kwargs['process'] if kwargs['min_rate'] is not None: params_dict['spiketrains']['min_rate'] = kwargs['min_rate'] if kwargs['duration'] is not None: params_dict['spiketrains']['duration'] = kwargs['duration'] if kwargs['tstart'] is not None: params_dict['spiketrains']['t_start'] = kwargs['t_start'] if kwargs['st_seed'] is not None: params_dict['spiketrains']['seed'] = kwargs['st_seed'] if kwargs['min_dist'] is not None: params_dict['templates']['min_dist'] = kwargs['min_dist'] if kwargs['min_amp'] is not None: params_dict['templates']['min_amp'] = kwargs['min_amp'] if kwargs['max_amp'] is not None: params_dict['templates']['max_amp'] = kwargs['max_amp'] if kwargs['temp_seed'] is not None: params_dict['templates']['seed'] = kwargs['temp_seed'] if kwargs['overlap_thresh'] is not None: params_dict['templates']['overlap_threshold'] = kwargs[ 'overlap_thresh'] if kwargs['noise_lev'] is not None: params_dict['recordings']['noise_level'] = kwargs['noise_lev'] if kwargs['modulation'] is not None: params_dict['recordings']['modulation'] = kwargs['modulation'] if kwargs['chunk_noise'] is not None: params_dict['recordings']['chunk_noise_duration'] = kwargs[ 'chunk_noise'] if kwargs['chunk_filt'] is not None: params_dict['recordings']['chunk_filter_duration'] = kwargs[ 'chunk_filt'] if kwargs['filter']: params_dict['recordings']['filter'] = True else: params_dict['recordings']['filter'] = False if kwargs['filt_cutoff'] is not None: if isinstance(kwargs['filt_cutoff'], tuple): kwargs['filt_cutoff'] = list(kwargs['filt_cutoff']) params_dict['recordings']['filter_cutoff'] = kwargs['filt_cutoff'] if kwargs['filt_order'] is not None: params_dict['recordings']['filt_order'] = kwargs['filt_order'] if kwargs['fs'] is not None: params_dict['recordings']['fs'] = kwargs['fs'] else: params_dict['recordings']['fs'] = None if kwargs['sync_rate'] is not None: params_dict['recordings']['sync_rate'] = kwargs['sync_rate'] else: params_dict['recordings']['sync_rate'] = None if kwargs['sync_jitt'] is not None: params_dict['recordings']['sync_jitt'] = kwargs['sync_jitt'] else: params_dict['recordings']['sync_jitt'] = 1 if kwargs['noise_seed'] is not None: params_dict['recordings']['seed'] = kwargs['noise_seed'] if kwargs['overlap']: params_dict['recordings']['overlap'] = True elif 'overlap' not in params_dict['recordings'].keys(): params_dict['recordings']['overlap'] = False if kwargs['extract_wf']: params_dict['recordings']['extract_wf'] = True elif 'extract_wf' not in params_dict['recordings'].keys(): params_dict['recordings']['extract_wf'] = False if kwargs['half_dist'] is not None: params_dict['recordings']['half_dist'] = kwargs['half_dist'] if kwargs['color_noise']: params_dict['recordings']['noise_color'] = True elif 'noise_color' not in params_dict['recordings'].keys(): params_dict['recordings']['noise_color'] = False if kwargs['color_peak'] is not None: params_dict['recordings']['color_peak'] = kwargs['color_peak'] if kwargs['color_q'] is not None: params_dict['recordings']['color_q'] = kwargs['color_q'] if kwargs['random_noise_floor'] is not None: params_dict['recordings']['random_noise_floor'] = kwargs[ 'random_noise_floor'] if kwargs['bursting']: params_dict['recordings']['bursting'] = True elif 'bursting' not in params_dict['recordings'].keys(): params_dict['recordings']['bursting'] = False if kwargs['shape_mod']: params_dict['recordings']['shape_mod'] = True elif 'shape_mod' not in params_dict['recordings'].keys(): params_dict['recordings']['shape_mod'] = False if kwargs['drifting']: params_dict['recordings']['drifting'] = True elif 'drifting' not in params_dict['recordings'].keys(): params_dict['recordings']['drifting'] = False if kwargs['preferred_dir'] is not None and len( kwargs['preferred_dir']) == 3: params_dict['recordings']['preferred_dir'] = kwargs['preferred_dir'] if kwargs['angle_tol']: params_dict['recordings']['angle_tol'] = kwargs['angle_tol'] if kwargs['drift_velocity']: params_dict['recordings']['drift_velocity'] = kwargs['drift_velocity'] if kwargs['t_start_drift']: params_dict['recordings']['t_start_drift'] = kwargs['t_start_drift'] verbose = kwargs['verbose'] recgen = gt.gen_recordings(templates=kwargs['templates'], params=params_dict, verbose=verbose) info = recgen.info n_neurons = info['recordings']['n_neurons'] electrode_name = info['electrodes']['electrode_name'] duration = info['recordings']['duration'] noise_level = info['recordings']['noise_level'] if kwargs['fname'] is None: if kwargs['drifting']: fname = 'recordings_%dcells_%s_%s_%.1fuV_drift_%s.h5' % ( n_neurons, electrode_name, duration, noise_level, time.strftime("%d-%m-%Y_%H-%M")) else: fname = 'recordings_%dcells_%s_%s_%.1fuV_%s.h5' % ( n_neurons, electrode_name, duration, noise_level, time.strftime("%d-%m-%Y_%H-%M")) else: fname = kwargs['fname'] if recordings_folder is not None: if not os.path.isdir(recordings_folder): os.makedirs(recordings_folder) rec_path = join(recordings_folder, fname) save_recording_generator(recgen, rec_path)