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.'
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. '