Example #1
0
def main():
    warnings.simplefilter('once')

    if len(sys.argv) < 3:
        print 'mergy.py [options] <mwk> <nev/plx>'
        print 'Aligns and merges mwk and nev/plx files.'
        print
        print 'Options:'
        print '   --nowav                       - do not include waveform data (recommended)'
        print '   --filter_inf=<.inf prefix>    - reject any spikes not in the inf files'
        print '   --cluster=<.inf/.clu prefix>  - apply clustering information'
        print '   --cluster_all=<.clu prefix 1,.clu prefix 2,...>'
        print '                                 - use other clustering info (in this superset)'
        return

    args, opts = parse_opts_adapter(sys.argv[1:], 2)
    fn_mwk, fn_nev = args[:2]

    # -- parse options
    if 'nowav' in opts:
        print 'merge: no waveform processing'
        proc_wav = False
    else:
        print 'merge: including waveform data'
        proc_wav = True

    callback_reject = None
    if 'filter_inf' in opts:
        inf_prefix = opts['filter_inf']
        print 'merge: spike rejection based on', inf_prefix
        reject_inf.prefix = inf_prefix
        callback_reject = reject_inf

    callback_cluster = None
    if 'cluster' in opts:
        prefixes = opts['cluster'].split(CLU_SEP)
        if len(prefixes) != 2:
            prefix = prefixes[0]
            print 'merge: clustering based on', prefix
            cluster.prefix_inf = prefix
            cluster.prefix_clu = prefix
        else:
            print 'merge: clustering based on', prefixes
            cluster.prefix_inf = prefixes[0]
            cluster.prefix_clu = prefixes[1]
        
        if 'cluster_all' in opts:
            clu_all = prep_files(opts['cluster_all'], sep=CLU_SEP, extchk=False)
            print 'merge: using other info', clu_all
            cluster.prefix_clu_all = clu_all
        callback_cluster = cluster

    code_sent = 'wordout_var'
    if 'code_sent' in opts:
        code_sent = opts['code_sent']
        print 'merge: code_sent =', code_sent

    code_recv = 'wordSent'
    if 'code_recv' in opts:
        code_recv = opts['code_recv']
        print 'merge: code_recv =', code_recv

    adj_reject = None
    amp_reject = None
    if 'adj_reject' in opts:
        adj_reject = float(opts['adj_reject'])
        amp_reject = set_new_threshold_rng
        print 'merge: amplitude rejection multiplier =', adj_reject

    _force_timetransf = None
    if 'force_timetransf' in opts:
        a, b, delay = [float(e) for e in opts['force_timetransf'].split(',')]
        _force_timetransf = {}
        _force_timetransf['C'] = [a, b]
        _force_timetransf['delay'] = delay
        print 'merge: time transformation =', _force_timetransf

    # -- execute
    m = Merge(fn_mwk, fn_nev)
    if m.merge(proc_wav=proc_wav, code_sent=code_sent, code_recv=code_recv, \
            adj_reject=adj_reject, amp_reject=amp_reject, \
            callback_reject=callback_reject, callback_cluster=callback_cluster, \
            _force_timetransf=_force_timetransf):
        print 'merge: merged successfully.'
Example #2
0
def main():
    if len(sys.argv) < 3:
        print 'collect_PS_firing.py [options] <mwk> <output> ' \
                '[override delay in us] [number of electrodes]'
        print 'Collects spike timing around visual stimuli'
        print
        print 'Options:'
        print '   --wav=<.nev file name>  - collects waveform for spike' \
                ' sorting with the .nev file.'
        print '   --extinfo               - collects extra stimuli info' \
                'rmation in addition to the names'
        print '   --c_success=<code name> - code name for "success" signal'
        print '   --proc_cluster          - process extra spike sorting info' \
                'rmation'
        print '   --max_cluster=#         - maximum number of clusters per' \
                ' channel'
        return

    args, opts = parse_opts_adapter(sys.argv[1:], 4)
    fn_mwk = args[0]
    fn_out = args[1]
    fn_nev = None

    # -- parsing extra arguments (mainly for backward compatibility)
    if len(args) >= 3:
        override_delay_us = long(args[2])
        if override_delay_us < 0:
            override_delay_us = None
        print '* Delay override:', override_delay_us
    else:
        override_delay_us = None

    if len(args) >= 4:
        override_elecs = range(1, int(args[3]) + 1)
        print '* Active electrodes override: [%d..%d]' % \
                (min(override_elecs), max(override_elecs))
    else:
        override_elecs = DEFAULT_ELECS

    # -- handle "opts"
    mode = 'firrate'

    if 'wav' in opts:
        mode = 'wav'
        fn_nev = opts['wav']
        print '* Collecting waveforms for later spike sorting with', fn_nev

    extinfo = False
    if 'extinfo' in opts:
        extinfo = True
        print '* Collecting extra information of the stimuli'

    if 'c_success' in opts:
        c_success = opts['c_success']
        print '* c_success:', c_success
    else:
        c_success = C_SUCCESS

    if 't_success' in opts:
        t_success = int(opts['t_success'])
        print '* t_success:', t_success
    else:
        t_success = T_SUCCESS

    proc_cluster = PROC_CLUSTER
    if 'proc_cluster' in opts or 'proc_spksorting' in opts:
        print '* Collecting spike sorting information'
        proc_cluster = True

    max_clus = MAX_CLUS
    if 'max_cluster' in opts:
        max_clus = int(opts['max_cluster'])
        print '* Maximum number of clusters per channel:', max_clus

    t_start0 = T_START
    if 't_start' in opts:
        t_start0 = int(opts['t_start'])
        print '* t_start =', t_start0

    t_stop0 = T_STOP
    if 't_stop' in opts:
        t_stop0 = int(opts['t_stop'])
        print '* t_stop =', t_stop0

    reject_sloppy = REJECT_SLOPPY
    if 'reject_sloppy' in opts:
        reject_sloppy = True
        print '* Rejecting sloppy stimuli'

    exclude_img = None
    if 'exclude_img' in opts:
        exclude_img = opts['exclude_img'].split(',')
        print '* Exclude unwanted images:', exclude_img

    movie_begin_fname = None
    if 'movie_begin_fname' in opts:
        movie_begin_fname = opts['movie_begin_fname']
        print '* movie_begin_fname:', movie_begin_fname

    ign_unregistered = False
    if 'ign_unregistered' in opts:
        ign_unregistered = True
        print '* Ignore unregistered keys'

    ch_shift = None
    if 'ch_shift' in opts:
        ch_shift = opts['ch_shift']
        print '* Shifting based on this rule:', ch_shift

    # -- go go go
    kwargs = {'override_delay_us': override_delay_us,
            'override_elecs': override_elecs,
            'extinfo': extinfo, 'c_success': c_success,
            't_success_lim': t_success,
            'proc_cluster': proc_cluster, 'max_clus': max_clus,
            't_start0': t_start0, 't_stop0': t_stop0,
            'reject_sloppy': reject_sloppy,
            'exclude_img': exclude_img,
            'movie_begin_fname': movie_begin_fname,
            'ign_unregistered': ign_unregistered,
            'ch_shift': CH_SHIFT[ch_shift]
            }
    if mode == 'firrate':
        get_firrate(fn_mwk, fn_out, **kwargs)
    elif mode == 'wav':
        get_waveform(fn_mwk, fn_nev, fn_out, **kwargs)
    else:
        raise ValueError('Invalid mode')

    print 'Done.                                '