Пример #1
0
def do(action, args, p):
    """
    Manage tasks.

    """
    print("ACTION*:   " + str(action))
    print("ARGS*:     " + str(args))

    #-------------------------------------------------------------------------------------
    # Trials
    #-------------------------------------------------------------------------------------

    if action == 'trials':
        run_trials(p, args)

    #-------------------------------------------------------------------------------------
    # Psychometric function
    #-------------------------------------------------------------------------------------

    elif action == 'psychometric':
        threshold = False
        if 'threshold' in args:
            threshold = True

        fig = Figure()
        plot = fig.add()

        #---------------------------------------------------------------------------------
        # Plot
        #---------------------------------------------------------------------------------

        trialsfile = get_trialsfile(p)
        psychometric_function(trialsfile, plot, threshold=threshold)

        plot.xlabel(r'Percent coherence toward $T_\text{in}$')
        plot.ylabel(r'Percent $T_\text{in}$')

        #---------------------------------------------------------------------------------

        fig.save(path=p['figspath'], name=p['name'] + '_' + action)
        fig.close()

    #-------------------------------------------------------------------------------------
    # Sort
    #-------------------------------------------------------------------------------------

    elif action == 'sort_stim_onset':
        sort_trials_stim_onset(get_trialsfile(p), get_sortedfile_stim_onset(p))

    elif action == 'sort_response':
        sort_trials_response(get_trialsfile(p), get_sortedfile_response(p))

    #-------------------------------------------------------------------------------------
    # Plot single-unit activity aligned to stimulus onset
    #-------------------------------------------------------------------------------------

    elif action == 'units_stim_onset':
        from glob import glob

        # Remove existing files
        filenames = glob(join(p['figspath'], p['name'] + '_stim_onset_unit*'))
        for filename in filenames:
            os.remove(filename)
            print("Removed {}".format(filename))

        # Load sorted trials
        sortedfile = get_sortedfile_stim_onset(p)
        with open(sortedfile) as f:
            t, sorted_trials = pickle.load(f)

        for i in xrange(p['model'].N):
            # Check if the unit does anything
            active = False
            for r in sorted_trials.values():
                if is_active(r[i]):
                    active = True
                    break
            if not active:
                continue

            fig = Figure()
            plot = fig.add()

            #-----------------------------------------------------------------------------
            # Plot
            #-----------------------------------------------------------------------------

            plot_unit(i, sortedfile, plot)

            plot.xlabel('Time (ms)')
            plot.ylabel('Firing rate (a.u.)')

            props = {
                'prop': {
                    'size': 8
                },
                'handletextpad': 1.02,
                'labelspacing': 0.6
            }
            plot.legend(bbox_to_anchor=(0.18, 1), **props)

            #-----------------------------------------------------------------------------

            fig.save(path=p['figspath'],
                     name=p['name'] + '_stim_onset_unit{:03d}'.format(i))
            fig.close()

    #-------------------------------------------------------------------------------------
    # Plot single-unit activity aligned to response
    #-------------------------------------------------------------------------------------

    elif action == 'units_response':
        from glob import glob

        # Remove existing files
        filenames = glob(join(p['figspath'], p['name'] + '_response_unit*'))
        for filename in filenames:
            os.remove(filename)
            print("Removed {}".format(filename))

        # Load sorted trials
        sortedfile = get_sortedfile_response(p)
        with open(sortedfile) as f:
            t, sorted_trials = pickle.load(f)

        for i in xrange(p['model'].N):
            # Check if the unit does anything
            active = False
            for r in sorted_trials.values():
                if is_active(r[i]):
                    active = True
                    break
            if not active:
                continue

            fig = Figure()
            plot = fig.add()

            #-----------------------------------------------------------------------------
            # Plot
            #-----------------------------------------------------------------------------

            plot_unit(i, sortedfile, plot)

            plot.xlabel('Time (ms)')
            plot.ylabel('Firing rate (a.u.)')

            props = {
                'prop': {
                    'size': 8
                },
                'handletextpad': 1.02,
                'labelspacing': 0.6
            }
            plot.legend(bbox_to_anchor=(0.18, 1), **props)

            #-----------------------------------------------------------------------------

            fig.save(path=p['figspath'],
                     name=p['name'] + '_response_unit_{:03d}'.format(i))
            fig.close()

    #-------------------------------------------------------------------------------------
    # Selectivity
    #-------------------------------------------------------------------------------------

    elif action == 'selectivity':
        # Model
        m = p['model']

        trialsfile = get_trialsfile(p)
        dprime = get_choice_selectivity(trialsfile)

        def get_first(x, p):
            return x[:int(p * len(x))]

        psig = 0.25
        units = np.arange(len(dprime))
        try:
            idx = np.argsort(abs(dprime[m.EXC]))[::-1]
            exc = get_first(units[m.EXC][idx], psig)

            idx = np.argsort(abs(dprime[m.INH]))[::-1]
            inh = get_first(units[m.INH][idx], psig)

            idx = np.argsort(dprime[exc])[::-1]
            units_exc = list(exc[idx])

            idx = np.argsort(dprime[inh])[::-1]
            units_inh = list(units[inh][idx])

            units = units_exc + units_inh
            dprime = dprime[units]
        except AttributeError:
            idx = np.argsort(abs(dprime))[::-1]
            all = get_first(units[idx], psig)

            idx = np.argsort(dprime[all])[::-1]
            units = list(units[all][idx])
            dprime = dprime[units]

        # Save d'
        filename = get_dprimefile(p)
        np.savetxt(filename, dprime)
        print("[ {}.do ] d\' saved to {}".format(THIS, filename))

        # Save selectivity
        filename = get_selectivityfile(p)
        np.savetxt(filename, units, fmt='%d')
        print("[ {}.do ] Choice selectivity saved to {}".format(
            THIS, filename))

    #-------------------------------------------------------------------------------------

    else:
        print("[ {}.do ] Unrecognized action.".format(THIS))
Пример #2
0
n_validation = 100

if __name__ == '__main__':
    from pycog import RNN
    from pycog.figtools import Figure

    rnn = RNN('work/data/multi_sequence8mod/multi_sequence8mod.pkl', {
        'dt': 0.5,
        'var_rec': 0.01**2,
        'var_in': np.array([0.003**2])
    })
    trial_args = {}
    info = rnn.run(inputs=(generate_trial, trial_args), seed=7423)

    fig = Figure()
    plot = fig.add()

    colors = [
        'red', 'green', 'yellow', 'orange', 'purple', 'cyan', 'magenta', 'pink'
    ]

    plot.plot(rnn.t / tau, rnn.u[0], color=Figure.colors('blue'))
    for i in range(Nout):
        plot.plot(rnn.t / tau,
                  rnn.z[i],
                  color=Figure.colors(colors[int(i / NoutSplit)]))

    Nexc = int(N * 0.8)
    plot.plot(rnn.t / tau,
              rnn.r[:Nexc].mean(axis=0),
Пример #3
0
trial_func = m.generate_trial
trial_args = {
    'name':   'test',
    'catch':  False,
    'coh':    16,
    'in_out': 1
    }
info = rnn.run(inputs=(trial_func, trial_args), seed=10)

colors = ['orange', 'purple']

DT = 15

# Inputs
for i, clr in enumerate(colors):
    fig  = Figure(w=2, h=1)
    plot = fig.add(None, 'none')

    plot.plot(rnn.t[::DT], rnn.u[i][::DT], color=Figure.colors(clr), lw=1)
    plot.ylim(0, 1.5)

    fig.save(path=figspath, name='fig1a_input{}'.format(i+1))
    fig.close()

# Outputs
for i, clr in enumerate(colors):
    fig  = Figure(w=2, h=1)
    plot = fig.add(None, 'none')

    plot.plot(rnn.t[::DT], rnn.z[i][::DT], color=Figure.colors(clr), lw=1)
    plot.ylim(0, 1.5)
Пример #4
0
import numpy as np

from pycog.figtools import Figure

w = 174 / 25.4
r = 0.6
h = r * w
fig = Figure(w=w, h=h)

w = 0.4
h = 0.18
x0 = 0.07
y0 = 0.72
dx = 1.23 * w
dy = 1.25 * h
plots = {
    'SL-f': fig.add([x0, y0, w, h]),
    'SL-s': fig.add([x0, y0 - dy, w, h]),
    'SL-e': fig.add([x0, y0 - 2 * dy, w, h], 'none'),
    'SL-o': fig.add([x0, y0 - 3 * dy, w, h]),
    'RL-f': fig.add([x0 + dx, y0, w, h]),
    'RL-s': fig.add([x0 + dx, y0 - dy, w, h]),
    'RL-e': fig.add([x0 + dx, y0 - 2 * dy, w, h], 'none'),
    'RL-o': fig.add([x0 + dx, y0 - 3 * dy, w, h], 'none')
}

x0 = 0.01
x1 = x0 + dx
y0 = 0.95
plotlabels = {'A': (x0, y0), 'B': (x1, y0)}
fig.plotlabels(plotlabels, fontsize=12.5)
Пример #5
0
def do(action, args, p):
    """
    Manage tasks.

    """
    print("ACTION*:   " + str(action))
    print("ARGS*:     " + str(args))

    #-------------------------------------------------------------------------------------
    # Trials
    #-------------------------------------------------------------------------------------

    if action == 'trials':
        run_trials(p, args)

    #-------------------------------------------------------------------------------------
    # Psychometric function
    #-------------------------------------------------------------------------------------

    elif action == 'psychometric':
        fig = Figure()
        plot = fig.add()

        #---------------------------------------------------------------------------------
        # Plot
        #---------------------------------------------------------------------------------

        trialsfile = get_trialsfile(p)
        psychometric_function(trialsfile, plot)

        plot.xlabel('$f_1$ (Hz)')
        plot.ylabel('$f_2$ (Hz)')

        #---------------------------------------------------------------------------------

        fig.save(path=p['figspath'], name=p['name'] + '_' + action)
        fig.close()

    #-------------------------------------------------------------------------------------
    # Sort
    #-------------------------------------------------------------------------------------

    elif action == 'sort':
        sort_trials(get_trialsfile(p), get_sortedfile(p))

    #-------------------------------------------------------------------------------------
    # Plot single-unit activity aligned to stimulus onset
    #-------------------------------------------------------------------------------------

    elif action == 'units':
        from glob import glob

        # Remove existing files
        print("[ {}.do ]".format(THIS))
        filenames = glob('{}_unit*'.format(join(p['figspath'], p['name'])))
        for filename in filenames:
            os.remove(filename)
            print("  Removed {}".format(filename))

        # Load sorted trials
        sortedfile = get_sortedfile(p)
        with open(sortedfile) as f:
            t, sorted_trials = pickle.load(f)

        # Colormap
        cmap = mpl.cm.jet
        norm = mpl.colors.Normalize(vmin=p['model'].fmin, vmax=p['model'].fmax)
        smap = mpl.cm.ScalarMappable(norm, cmap)

        for i in xrange(p['model'].N):
            # Check if the unit does anything
            active = False
            for condition_averaged in sorted_trials.values():
                if is_active(condition_averaged[i]):
                    active = True
                    break
            if not active:
                continue

            fig = Figure()
            plot = fig.add()

            #-----------------------------------------------------------------------------
            # Plot
            #-----------------------------------------------------------------------------

            plot_unit(i, sortedfile, plot, smap)

            plot.xlabel('Time (ms)')
            plot.ylabel('Firing rate (a.u.)')

            props = {
                'prop': {
                    'size': 8
                },
                'handletextpad': 1.02,
                'labelspacing': 0.6
            }
            plot.legend(bbox_to_anchor=(0.18, 1), **props)

            #-----------------------------------------------------------------------------

            fig.save(path=p['figspath'],
                     name=p['name'] + '_unit{:03d}'.format(i))
            fig.close()

    #-------------------------------------------------------------------------------------

    else:
        print("[ {}.do ] Unrecognized action '{}'.".format(THIS, action))
Пример #6
0
def do(action, args, p):
    print("ACTION*:   " + str(action))
    print("ARGS*:     " + str(args))

    #-------------------------------------------------------------------------------------
    # Trials
    #-------------------------------------------------------------------------------------

    if action == 'trials':
        run_trials(p, args)

    #-------------------------------------------------------------------------------------
    # Psychometric function
    #-------------------------------------------------------------------------------------

    elif action == 'psychometric':
        #---------------------------------------------------------------------------------
        # Figure setup
        #---------------------------------------------------------------------------------

        w = 6.5
        h = 3
        fig = Figure(w=w,
                     h=h,
                     axislabelsize=7.5,
                     labelpadx=6,
                     labelpady=7.5,
                     thickness=0.6,
                     ticksize=3,
                     ticklabelsize=6.5,
                     ticklabelpad=2)

        w = 0.39
        h = 0.7

        L = 0.09
        R = L + w + 0.1
        y = 0.2

        plots = {'m': fig.add([L, y, w, h]), 'c': fig.add([R, y, w, h])}

        #---------------------------------------------------------------------------------
        # Labels
        #---------------------------------------------------------------------------------

        plot = plots['m']
        plot.xlabel('Motion coherence (\%)')
        plot.ylabel('Choice to right (\%)')

        plot = plots['c']
        plot.xlabel('Color coherence (\%)')
        plot.ylabel('Choice to green (\%)')

        #---------------------------------------------------------------------------------
        # Plot
        #---------------------------------------------------------------------------------

        trialsfile = get_trialsfile(p)
        psychometric_function(trialsfile, plots)

        # Legend
        prop = {
            'prop': {
                'size': 7
            },
            'handlelength': 1.2,
            'handletextpad': 1.1,
            'labelspacing': 0.5
        }
        plots['m'].legend(bbox_to_anchor=(0.41, 1), **prop)

        #---------------------------------------------------------------------------------

        fig.save(path=p['figspath'], name=p['name'] + '_' + action)
        fig.close()

    #-------------------------------------------------------------------------------------
    # Sort
    #-------------------------------------------------------------------------------------

    elif action == 'sort':
        trialsfile = get_trialsfile(p)
        sortedfile = get_sortedfile(p)
        sort_trials(trialsfile, sortedfile)

    #-------------------------------------------------------------------------------------
    # Plot single-unit activity
    #-------------------------------------------------------------------------------------

    elif action == 'units':
        from glob import glob

        # Remove existing files
        print("[ {}.do ]".format(THIS))
        filenames = glob('{}_unit*'.format(join(p['figspath'], p['name'])))
        for filename in filenames:
            os.remove(filename)
            print("  Removed {}".format(filename))

        trialsfile = get_trialsfile(p)
        sortedfile = get_sortedfile(p)

        units = get_active_units(trialsfile)
        for unit in units:
            #-----------------------------------------------------------------------------
            # Figure setup
            #-----------------------------------------------------------------------------

            w = 2.5
            h = 6
            fig = Figure(w=w,
                         h=h,
                         axislabelsize=7.5,
                         labelpadx=6,
                         labelpady=7.5,
                         thickness=0.6,
                         ticksize=3,
                         ticklabelsize=6.5,
                         ticklabelpad=2)

            w = 0.55
            x0 = 0.3

            h = 0.17
            dy = h + 0.06
            y0 = 0.77
            y1 = y0 - dy
            y2 = y1 - dy
            y3 = y2 - dy

            plots = {
                'choice': fig.add([x0, y0, w, h]),
                'motion_choice': fig.add([x0, y1, w, h]),
                'colour_choice': fig.add([x0, y2, w, h]),
                'context_choice': fig.add([x0, y3, w, h])
            }

            #-----------------------------------------------------------------------------
            # Plot
            #-----------------------------------------------------------------------------

            plot_unit(unit, sortedfile, plots, sortby_fontsize=7)
            plots['context_choice'].xlabel('Time (ms)')

            #-----------------------------------------------------------------------------

            fig.save(path=p['figspath'],
                     name=p['name'] + '_unit{:03d}'.format(unit))
            fig.close()
        print("[ {}.do ] {} units processed.".format(THIS, len(units)))

    #-------------------------------------------------------------------------------------
    # Regress
    #-------------------------------------------------------------------------------------

    elif action == 'regress':
        trialsfile = get_trialsfile(p)
        sortedfile = get_sortedfile(p)
        betafile = get_betafile(p)
        regress(trialsfile, sortedfile, betafile)

    #-------------------------------------------------------------------------------------
    elif action == 'inactivation':

        # load Weight value info
        import cPickle as pickle
        n_ne = 120

        try:
            w_inact_bin = int(args[1])
        except:
            w_inact_bin = 10

        try:
            w_inact_dep = int(args[2])
        except:
            w_inact_dep = int(n_ne / w_inact_bin)

        fn = 'C:\\Users\\sasak\\OneDrive\\workspace\\pycog\\examples\\work\\data\\mante\\mante_init.pkl'
        with open(fn, 'rb') as f:
            data = pickle.load(f)
        Wrec_init = data['best']['params'][1]

        fn = 'C:\\Users\\sasak\\OneDrive\\workspace\\pycog\\examples\\work\\data\\mante\\mante.pkl'
        with open(fn, 'rb') as f:
            data = pickle.load(f)
        Wrec_last = data['best']['params'][1]

        Wrec_diff = Wrec_init - Wrec_last
        Wee_diff = Wrec_diff[:n_ne, :n_ne]

        run_trials_inact(p, None, args)  # full condition

        # sort descending order
        Neu_rec_diff = np.mean(np.abs(Wee_diff), axis=1)
        sorted_id = np.argsort(Neu_rec_diff)[::-1]

        for i in xrange(w_inact_dep):
            id_inact = sorted_id[:(i + 1) * w_inact_bin]
            run_trials_inact(p, id_inact, args)

        # sort ascending order
        Neu_rec_diff = np.mean(np.abs(Wee_diff), axis=1)
        sorted_id = np.argsort(Neu_rec_diff)

        for i in xrange(w_inact_dep):
            id_inact = sorted_id[:(i + 1) * w_inact_bin]
            run_trials_inact(p, id_inact, args)

        # shuffled order
        rng = np.random.RandomState(p['seed'])
        #rng = np.random.RandomState(data['params']['seed'])
        sorted_id = range(n_ne)
        rng.shuffle(sorted_id)

        for i in xrange(w_inact_dep):
            id_inact = sorted_id[:(i + 1) * w_inact_bin]
            run_trials_inact(p, id_inact, args)
    #-------------------------------------------------------------------------------------

    else:
        print("[ {}.do ] Unrecognized action.".format(THIS))
Пример #7
0
def do(action, args, p):
    """
    Manage tasks.

    """
    print("ACTION*:   " + str(action))
    print("ARGS*:     " + str(args))

    #-------------------------------------------------------------------------------------
    # Trials
    #-------------------------------------------------------------------------------------

    if action == 'trials':
        run_trials(p, args)

    #-------------------------------------------------------------------------------------
    # Sort
    #-------------------------------------------------------------------------------------

    elif action == 'sort_stim_onset':

        sort_trials(get_trialsfile(p), get_sortedfile_stim_onset(p))

    #-------------------------------------------------------------------------------------
    # activate state
    #-------------------------------------------------------------------------------------

    # TODO plot multiple units in the same figure
    # TODO replace units name with real neurons

    elif action == 'activatestate':

        # Model
        m = p['model']

        # Intensity
        try:
            intensity = float(args[0])
        except:
            intensity = 1

        # Plot unit
        try:
            unit = int(args[1])
            if unit == -1:
                unit = None
        except:
            unit = None

        # Create RNN
        if 'init' in args:
            print("* Initial network.")
            base, ext = os.path.splitext(p['savefile'])
            savefile_init = base + '_init' + ext
            rnn = RNN(savefile_init, {'dt': p['dt']}, verbose=True)
        else:
            rnn = RNN(p['savefile'], {'dt': p['dt']}, verbose=True)

        trial_func = p['model'].generate_trial
        trial_args = {
            'name': 'test',
            'catch': False,
            'intensity': intensity,
        }
        info = rnn.run(inputs=(trial_func, trial_args), seed=p['seed'])

        # Summary
        mean = np.mean(rnn.z)
        std = np.std(rnn.z)
        print("Intensity: {:.6f}".format(intensity))
        print("Mean output: {:.6f}".format(mean))
        print("Std. output: {:.6f}".format(std))

        # Figure setup
        x = 0.12
        y = 0.12
        w = 0.80
        h = 0.80
        dashes = [3.5, 1.5]

        t_forward = 1e-3 * np.array(info['epochs']['forward'])
        t_stimulus = 1e-3 * np.array(info['epochs']['stimulus'])
        t_reversal = 1e-3 * np.array(info['epochs']['reversal'])

        fig = Figure(w=4,
                     h=3,
                     axislabelsize=7,
                     labelpadx=5,
                     labelpady=5,
                     thickness=0.6,
                     ticksize=3,
                     ticklabelsize=6,
                     ticklabelpad=2)
        plots = {
            'in': fig.add([x, y + 0.72 * h, w, 0.3 * h]),
            'out': fig.add([x, y, w, 0.65 * h]),
        }

        plot = plots['in']
        plot.ylabel('Input', labelpad=7, fontsize=6.5)

        plot = plots['out']
        plot.xlabel('Time (sec)', labelpad=6.5)
        plot.ylabel('Output', labelpad=7, fontsize=6.5)

        # -----------------------------------------------------------------------------------------
        # Input
        # -----------------------------------------------------------------------------------------

        plot = plots['in']
        plot.axis_off('bottom')

        plot.plot(1e-3 * rnn.t, rnn.u[0], color=Figure.colors('red'), lw=0.5)
        plot.lim('y', rnn.u[0])
        plot.xlim(1e-3 * rnn.t[0], 1e-3 * rnn.t[-1])

        # -----------------------------------------------------------------------------------------
        # Output
        # -----------------------------------------------------------------------------------------

        plot = plots['out']

        # Outputs
        colors = [Figure.colors('orange'), Figure.colors('blue')]
        if unit is None:
            plot.plot(1e-3 * rnn.t,
                      rnn.z[0],
                      color=colors[0],
                      label='Forward module')
            plot.plot(1e-3 * rnn.t,
                      rnn.z[1],
                      color=colors[1],
                      label='Reversal module')
            plot.lim('y', np.ravel(rnn.z), lower=0)
        else:
            plot.plot(1e-3 * rnn.t,
                      rnn.r[unit],
                      color=colors[1],
                      label='unit ' + str(unit))
            plot.lim('y', np.ravel(rnn.r[unit]))

        plot.xlim(1e-3 * rnn.t[0], 1e-3 * rnn.t[-1])

        # Legend
        props = {'prop': {'size': 7}}
        plot.legend(bbox_to_anchor=(1.1, 1.6), **props)

        plot.vline(t_forward[-1],
                   color='0.2',
                   linestyle='--',
                   lw=1,
                   dashes=dashes)
        plot.vline(t_reversal[0],
                   color='0.2',
                   linestyle='--',
                   lw=1,
                   dashes=dashes)

        # Epochs
        plot.text(np.mean(t_forward),
                  plot.get_ylim()[1],
                  'forward',
                  ha='center',
                  va='center',
                  fontsize=7)
        plot.text(np.mean(t_stimulus),
                  plot.get_ylim()[1],
                  'stimulus',
                  ha='center',
                  va='center',
                  fontsize=7)
        plot.text(np.mean(t_reversal),
                  plot.get_ylim()[1],
                  'reversal',
                  ha='center',
                  va='center',
                  fontsize=7)

        if 'init' in args:
            savename = p['name'] + '_' + action + '_init'
        else:
            savename = p['name'] + '_' + action

        if unit is not None:
            savename += '_unit_' + str(unit)

        fig.save(path=p['figspath'], name=savename)
        fig.close()

    # -------------------------------------------------------------------------------------
    # Plot single-unit activity aligned to stimulus onset
    # -------------------------------------------------------------------------------------

    elif action == 'units_stim_onset':
        from glob import glob

        try:
            lower_bon = float(args[0])
        except:
            lower_bon = None

        try:
            higher_bon = float(args[1])
        except:
            higher_bon = None

        # Remove existing files
        unitpath = join(p['figspath'], 'units')
        filenames = glob(join(unitpath, p['name'] + '_stim_onset_unit*'))
        for filename in filenames:
            os.remove(filename)
            print("Removed {}".format(filename))

        # Load sorted trials
        sortedfile = get_sortedfile_stim_onset(p)
        with open(sortedfile) as f:
            t, sorted_trials = pickle.load(f)

        rnn = RNN(p['savefile'], {'dt': p['dt']}, verbose=True)
        trial_func = p['model'].generate_trial
        trial_args = {
            'name': 'test',
            'catch': False,
        }
        info = rnn.run(inputs=(trial_func, trial_args), seed=p['seed'])

        t_stimulus = np.array(info['epochs']['stimulus'])
        stimulus_d = t_stimulus[1] - t_stimulus[0]

        for i in xrange(p['model'].N):
            # Check if the unit does anything
            # active = False
            # for r in sorted_trials.values():
            #     if is_active(r[i]):
            #         active = True
            #         break
            # if not active:
            #     continue

            dashes = [3.5, 1.5]

            fig = Figure()
            plot = fig.add()

            # -----------------------------------------------------------------------------
            # Plot
            # -----------------------------------------------------------------------------

            plot_unit(i, sortedfile, plot, tmin=lower_bon, tmax=higher_bon)

            plot.xlabel('Time (ms)')
            plot.ylabel('Firing rate (a.u.)')

            props = {
                'prop': {
                    'size': 8
                },
                'handletextpad': 1.02,
                'labelspacing': 0.6
            }
            plot.legend(bbox_to_anchor=(0.18, 1), **props)

            plot.vline(0, color='0.2', linestyle='--', lw=1, dashes=dashes)
            plot.vline(stimulus_d,
                       color='0.2',
                       linestyle='--',
                       lw=1,
                       dashes=dashes)

            # Epochs
            plot.text(-np.mean((0, stimulus_d)),
                      plot.get_ylim()[1],
                      'forward',
                      ha='center',
                      va='center',
                      fontsize=7)
            plot.text(np.mean((0, stimulus_d)),
                      plot.get_ylim()[1],
                      'stimulus',
                      ha='center',
                      va='center',
                      fontsize=7)
            plot.text(3 * np.mean((0, stimulus_d)),
                      plot.get_ylim()[1],
                      'reversal',
                      ha='center',
                      va='center',
                      fontsize=7)

            # -----------------------------------------------------------------------------

            fig.save(path=unitpath,
                     name=p['name'] + '_stim_onset_unit{:03d}'.format(i))
            fig.close()

    #-------------------------------------------------------------------------------------
    # Selectivity
    #-------------------------------------------------------------------------------------

    elif action == 'selectivity':

        try:
            lower = float(args[0])
        except:
            lower = None

        try:
            higher = float(args[1])
        except:
            higher = None

        # Model
        m = p['model']

        trialsfile = get_trialsfile(p)
        dprime = get_choice_selectivity(trialsfile,
                                        lower_bon=lower,
                                        higher_bon=higher)

        def get_first(x, p):
            return x[:int(p * len(x))]

        psig = 0.25
        units = np.arange(len(dprime))
        try:
            idx = np.argsort(abs(dprime[m.EXC]))[::-1]
            exc = get_first(units[m.EXC][idx], psig)

            idx = np.argsort(abs(dprime[m.INH]))[::-1]
            inh = get_first(units[m.INH][idx], psig)

            idx = np.argsort(dprime[exc])[::-1]
            units_exc = list(exc[idx])

            idx = np.argsort(dprime[inh])[::-1]
            units_inh = list(units[inh][idx])

            units = units_exc + units_inh
            dprime = dprime[units]
        except AttributeError:
            idx = np.argsort(abs(dprime))[::-1]
            all = get_first(units[idx], psig)

            idx = np.argsort(dprime[all])[::-1]
            units = list(units[all][idx])
            dprime = dprime[units]

        # Save d'
        filename = get_dprimefile(p)
        np.savetxt(filename, dprime)
        print("[ {}.do ] d\' saved to {}".format(THIS, filename))

        # Save selectivity
        filename = get_selectivityfile(p)
        np.savetxt(filename, units, fmt='%d')
        print("[ {}.do ] Choice selectivity saved to {}".format(
            THIS, filename))

    #-------------------------------------------------------------------------------------

    else:
        print("[ {}.do ] Unrecognized action.".format(THIS))
Пример #8
0
def plot_trial(trial_info, trial, figspath, name):
    U, Z, A, R, M, init, states_0, perf = trial_info
    U = U[:,0,:]
    Z = Z[:,0,:]
    A = A[:,0,:]
    R = R[:,0]
    M = M[:,0]
    t = int(np.sum(M))

    w = 0.65
    h = 0.18
    x = 0.17
    dy = h + 0.05
    y0 = 0.08
    y1 = y0 + dy
    y2 = y1 + dy
    y3 = y2 + dy

    fig   = Figure(h=6)
    plots = {'observables': fig.add([x, y3, w, h]),
             'policy':      fig.add([x, y2, w, h]),
             'actions':     fig.add([x, y1, w, h]),
             'rewards':     fig.add([x, y0, w, h])}

    time        = trial['time']
    dt          = time[1] - time[0]
    act_time    = time[:t]
    obs_time    = time[:t-1] + dt
    reward_time = act_time + dt
    xlim        = (0, max(time))

    #-------------------------------------------------------------------------------------
    # Observables
    #-------------------------------------------------------------------------------------

    plot = plots['observables']
    plot.plot(obs_time, U[:t-1,0], 'o', ms=5, mew=0, mfc=Figure.colors('blue'))
    plot.plot(obs_time, U[:t-1,0], lw=1.25, color=Figure.colors('blue'),   label='Keydown')
    plot.plot(obs_time, U[:t-1,1], 'o', ms=5, mew=0, mfc=Figure.colors('orange'))
    plot.plot(obs_time, U[:t-1,1], lw=1.25, color=Figure.colors('orange'), label=r'$f_\text{pos}$')
    plot.plot(obs_time, U[:t-1,2], 'o', ms=5, mew=0, mfc=Figure.colors('purple'))
    plot.plot(obs_time, U[:t-1,2], lw=1.25, color=Figure.colors('purple'), label=r'$f_\text{neg}$')
    plot.xlim(*xlim)
    plot.ylim(0, 1)
    plot.ylabel('Observables')

    if trial['gt_lt'] == '>':
        f1, f2 = trial['fpair']
    else:
        f2, f1 = trial['fpair']
    plot.text_upper_right(str((f1, f2)))

    #coh = trial['left_right']*trial['coh']
    #if coh < 0:
    #    color = Figure.colors('orange')
    #elif coh > 0:
    #    color = Figure.colors('purple')
    #else:
    #    color = Figure.colors('k')
    #plot.text_upper_right('Coh = {:.1f}\%'.format(coh), color=color)

    props = {'prop': {'size': 7}, 'handlelength': 1.2,
             'handletextpad': 1.2, 'labelspacing': 0.8}
    plot.legend(bbox_to_anchor=(1.2, 0.8), **props)

    #-------------------------------------------------------------------------------------
    # Policy
    #-------------------------------------------------------------------------------------

    plot = plots['policy']
    plot.plot(act_time, Z[:t,0], 'o', ms=5, mew=0, mfc=Figure.colors('blue'))
    plot.plot(act_time, Z[:t,0], lw=1.25, color=Figure.colors('blue'),
              label='Keydown')
    plot.plot(act_time, Z[:t,1], 'o', ms=5, mew=0, mfc=Figure.colors('orange'))
    plot.plot(act_time, Z[:t,1], lw=1.25, color=Figure.colors('orange'),
              label='$f_1 > f_2$')
    plot.plot(act_time, Z[:t,2], 'o', ms=5, mew=0, mfc=Figure.colors('purple'))
    plot.plot(act_time, Z[:t,2], lw=1.25, color=Figure.colors('purple'),
              label='$f_1 < f_2$')
    plot.xlim(*xlim)
    plot.ylim(0, 1)
    plot.ylabel('Action probabilities')

    props = {'prop': {'size': 7}, 'handlelength': 1.2,
             'handletextpad': 1.2, 'labelspacing': 0.8}
    plot.legend(bbox_to_anchor=(1.27, 0.8), **props)

    #-------------------------------------------------------------------------------------
    # Actions
    #-------------------------------------------------------------------------------------

    plot = plots['actions']
    actions = [np.argmax(a) for a in A[:t]]
    plot.plot(act_time, actions, 'o', ms=5, mew=0, mfc=Figure.colors('red'))
    plot.plot(act_time, actions, lw=1.25, color=Figure.colors('red'))
    plot.xlim(*xlim)
    plot.ylim(0, 2)
    plot.yticks([0, 1, 2])
    plot.yticklabels(['Keydown', '$f_1 > f_2$', '$f_1 < f_2$'])
    plot.ylabel('Action')

    #-------------------------------------------------------------------------------------
    # Rewards
    #-------------------------------------------------------------------------------------

    plot = plots['rewards']
    plot.plot(reward_time, R[:t], 'o', ms=5, mew=0, mfc=Figure.colors('red'))
    plot.plot(reward_time, R[:t], lw=1.25, color=Figure.colors('red'))
    plot.xlim(*xlim)
    plot.ylim(R_TERMINATE, R_CORRECT)
    plot.xlabel('Time (ms)')
    plot.ylabel('Reward')

    #-------------------------------------------------------------------------------------

    fig.save(path=figspath, name=name)
    fig.close()
Пример #9
0
def do(action, args, p):
    """
    Manage tasks.

    """
    print("ACTION*:   " + str(action))
    print("ARGS*:     " + str(args))

    #-------------------------------------------------------------------------------------
    # Trials
    #-------------------------------------------------------------------------------------

    if action == 'trials':
        run_trials(p, args)

    #-------------------------------------------------------------------------------------
    # Psychometric function
    #-------------------------------------------------------------------------------------

    elif action == 'psychometric':
        fig = Figure()
        plot = fig.add()

        #---------------------------------------------------------------------------------
        # Plot
        #---------------------------------------------------------------------------------

        trialsfile = get_trialsfile(p)
        psychometric_function(trialsfile, plot)

        plot.xlabel(r'Rate (events/sec)')
        plot.ylabel(r'Percent high')

        #---------------------------------------------------------------------------------

        fig.save(path=p['figspath'], name=p['name'] + '_' + action)
        fig.close()

    #-------------------------------------------------------------------------------------
    # Sort
    #-------------------------------------------------------------------------------------

    elif action == 'sort':
        trialsfile = get_trialsfile(p)
        sortedfile = get_sortedfile(p)
        sort_trials(trialsfile, sortedfile)

    #-------------------------------------------------------------------------------------
    # Plot single-unit activity
    #-------------------------------------------------------------------------------------

    elif action == 'units':
        from glob import glob

        # Remove existing files
        print("[ {}.do ]".format(THIS))
        filenames = glob('{}_unit*'.format(join(p['figspath'], p['name'])))
        for filename in filenames:
            os.remove(filename)
            print("  Removed {}".format(filename))

        # Load sorted trials
        sortedfile = get_sortedfile(p)
        with open(sortedfile) as f:
            t, sorted_trials = pickle.load(f)

        for i in xrange(p['model'].N):
            # Check if the unit does anything
            active = False
            for r in sorted_trials.values():
                if is_active(r[i]):
                    active = True
                    break
            if not active:
                continue

            fig = Figure()
            plot = fig.add()

            #---------------------------------------------------------------------------------
            # Plot
            #---------------------------------------------------------------------------------

            plot_unit(i, sortedfile, plot)

            plot.xlabel('Time (ms)')
            plot.ylabel('Firing rate (a.u.)')

            #---------------------------------------------------------------------------------

            fig.save(path=p['figspath'],
                     name=p['name'] + '_unit{:03d}'.format(i))
            fig.close()

    #-------------------------------------------------------------------------------------

    else:
        print("[ {}.do ] Unrecognized action.".format(THIS))
Пример #10
0
betafile = join(base, 'examples', 'work', 'data', 'mante', 'mante_beta.pkl')

units = [16, 17, 64, 74]

#=========================================================================================
# Figure setup
#=========================================================================================

w = 7.5
h = 6.7
r = w / h
fig = Figure(w=w,
             h=h,
             axislabelsize=6.5,
             labelpadx=5,
             labelpady=5,
             thickness=0.6,
             ticksize=3,
             ticklabelsize=6,
             ticklabelpad=2,
             format=paper.format)

#-----------------------------------------------------------------------------------------
# Psychometric functions
#-----------------------------------------------------------------------------------------

w_psy = 0.16
dx_psy = w_psy + 0.07
x_psy = 0.08

h_psy = 0.15
dy_psy = h_psy + 0.07
Пример #11
0
def do(action, args, p):
    print("ACTION*:   " + str(action))
    print("ARGS*:     " + str(args))

    #-------------------------------------------------------------------------------------
    # Trials
    #-------------------------------------------------------------------------------------

    if action == 'trials':
        run_trials(p, args)

    #-------------------------------------------------------------------------------------
    # Psychometric function
    #-------------------------------------------------------------------------------------

    elif action == 'psychometric':
        #---------------------------------------------------------------------------------
        # Figure setup
        #---------------------------------------------------------------------------------

        w = 6.5
        h = 3
        fig = Figure(w=w,
                     h=h,
                     axislabelsize=7.5,
                     labelpadx=6,
                     labelpady=7.5,
                     thickness=0.6,
                     ticksize=3,
                     ticklabelsize=6.5,
                     ticklabelpad=2)

        w = 0.39
        h = 0.7

        L = 0.09
        R = L + w + 0.1
        y = 0.2

        plots = {'m': fig.add([L, y, w, h]), 'c': fig.add([R, y, w, h])}

        #---------------------------------------------------------------------------------
        # Labels
        #---------------------------------------------------------------------------------

        plot = plots['m']
        plot.xlabel('Motion coherence (\%)')
        plot.ylabel('Choice to right (\%)')

        plot = plots['c']
        plot.xlabel('Color coherence (\%)')
        plot.ylabel('Choice to green (\%)')

        #---------------------------------------------------------------------------------
        # Plot
        #---------------------------------------------------------------------------------

        trialsfile = get_trialsfile(p)
        psychometric_function(trialsfile, plots)

        # Legend
        prop = {
            'prop': {
                'size': 7
            },
            'handlelength': 1.2,
            'handletextpad': 1.1,
            'labelspacing': 0.5
        }
        plots['m'].legend(bbox_to_anchor=(0.41, 1), **prop)

        #---------------------------------------------------------------------------------

        fig.save(path=p['figspath'], name=p['name'] + '_' + action)
        fig.close()

    #-------------------------------------------------------------------------------------
    # Sort
    #-------------------------------------------------------------------------------------

    elif action == 'sort':
        trialsfile = get_trialsfile(p)
        sortedfile = get_sortedfile(p)
        sort_trials(trialsfile, sortedfile)

    #-------------------------------------------------------------------------------------
    # Plot single-unit activity
    #-------------------------------------------------------------------------------------

    elif action == 'units':
        from glob import glob

        # Remove existing files
        print("[ {}.do ]".format(THIS))
        filenames = glob('{}_unit*'.format(join(p['figspath'], p['name'])))
        for filename in filenames:
            os.remove(filename)
            print("  Removed {}".format(filename))

        trialsfile = get_trialsfile(p)
        sortedfile = get_sortedfile(p)

        units = get_active_units(trialsfile)
        for unit in units:
            #-----------------------------------------------------------------------------
            # Figure setup
            #-----------------------------------------------------------------------------

            w = 2.5
            h = 6
            fig = Figure(w=w,
                         h=h,
                         axislabelsize=7.5,
                         labelpadx=6,
                         labelpady=7.5,
                         thickness=0.6,
                         ticksize=3,
                         ticklabelsize=6.5,
                         ticklabelpad=2)

            w = 0.55
            x0 = 0.3

            h = 0.17
            dy = h + 0.06
            y0 = 0.77
            y1 = y0 - dy
            y2 = y1 - dy
            y3 = y2 - dy

            plots = {
                'choice': fig.add([x0, y0, w, h]),
                'motion_choice': fig.add([x0, y1, w, h]),
                'colour_choice': fig.add([x0, y2, w, h]),
                'context_choice': fig.add([x0, y3, w, h])
            }

            #-----------------------------------------------------------------------------
            # Plot
            #-----------------------------------------------------------------------------

            plot_unit(unit, sortedfile, plots, sortby_fontsize=7)
            plots['context_choice'].xlabel('Time (ms)')

            #-----------------------------------------------------------------------------

            fig.save(path=p['figspath'],
                     name=p['name'] + '_unit{:03d}'.format(unit))
            fig.close()
        print("[ {}.do ] {} units processed.".format(THIS, len(units)))

    #-------------------------------------------------------------------------------------
    # Regress
    #-------------------------------------------------------------------------------------

    elif action == 'regress':
        trialsfile = get_trialsfile(p)
        sortedfile = get_sortedfile(p)
        betafile = get_betafile(p)
        regress(trialsfile, sortedfile, betafile)

    #-------------------------------------------------------------------------------------

    else:
        print("[ {}.do ] Unrecognized action.".format(THIS))
Пример #12
0
          ('rdm_fixed', '3C: Decision-making (Dale, fixed)'),
          ('mante', '4:  Context-dependent int.'),
          ('mante_areas', '5B: Context-dependent int. (areas)'),
          ('multisensory', '6:  Multisensory int.'),
          ('romo', '7:  Parametric working memory'), ('lee', '8:  Lee')]
labels = list('ABCDEFGHIJ')

#=========================================================================================
# Figure setup
#=========================================================================================

fig = Figure(w=3.8,
             h=6.75,
             axislabelsize=6.5,
             labelpadx=4,
             labelpady=3,
             thickness=0.6,
             ticksize=3,
             ticklabelsize=6,
             ticklabelpad=2,
             format=paper.format)

ncols = 2
nrows = 5

w = 0.36
dx = w + 0.12
x0 = 0.12
xall = x0 + dx * np.arange(ncols)

h = 0.13
y0 = 0.82
Пример #13
0
    }

# Color map
cmap = mpl.cm.jet
norm = mpl.colors.Normalize(vmin=m.fmin, vmax=m.fmax)
smap = mpl.cm.ScalarMappable(norm, cmap)        #To plot frequencies as different colors

#=========================================================================================
# Figure setup
#=========================================================================================

w   = 6.3               #width, height, and the ratio
h   = 4
r   = w/h
fig = Figure(w=w, h=h, axislabelsize=7, labelpadx=5, labelpady=5.5,      #initiate figure
             thickness=0.6, ticksize=3, ticklabelsize=6, ticklabelpad=2,
             format=paper.format)

#-----------------------------------------------------------------------------------------
# Inputs
#-----------------------------------------------------------------------------------------

w  = 0.25
dx = w + 0.04
x0 = 0.09

h  = 0.165
dy = h + 0.045
y0 = 0.78
y1 = y0 - dy