Пример #1
0
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!')
Пример #2
0
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!')
Пример #3
0
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!')
Пример #4
0
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!')
Пример #5
0
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!')
Пример #6
0
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!')
Пример #7
0
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!')
Пример #8
0
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!')
Пример #9
0
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!')
Пример #10
0
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)
Пример #11
0
def default_config():
    """Print default configurations."""
    info, config = get_default_config(print_version=True)
    pprint.pprint(info)
Пример #12
0
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)
Пример #13
0
def default_config():
    """Print default configurations."""
    info, config = get_default_config()
    pprint.pprint(info)
Пример #14
0
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)