Esempio n. 1
0
def get_spikes(session,area,unit,trial):
    if dowarn(): print 'NOTE UNIT  IS 1 INDEXED FOR MATLAB COMPATIBILITY CONVENTIONS'
    if dowarn(): print 'NOTE TRIAL IS 1 INDEXED FOR MATLAB COMPATIBILITY CONVENTIONS'
    if dowarn(): print 'NOTE EVENT IS 1 INDEXED FOR MATLAB COMPATIBILITY CONVENTIONS'
    assert trial>0
    ByTrialSpikesMS = cgid.data_loader.metaloadvariable(session,area,ByTrialSpikesMS)
    return ByTrialSpikesMS[unit-1,trial-1]
Esempio n. 2
0
def get_trial_event(session, area, trial, event):
    if dowarn():
        print("TRIAL IS 1 INDEXED FOR MATLAB COMPATIBILITY")
    if dowarn():
        print("EVENT IS 1 INDEXED FOR MATLAB COMPATIBILITY")
    assert trial > 0
    debug(trial, event)
    return metaloadvariable(session, area, "eventsByTrial")[trial - 1, event - 1]
Esempio n. 3
0
def get_spikes_event(session,area,unit,trial,event,start,stop):
    if dowarn(): print 'NOTE UNIT  IS 1 INDEXED FOR MATLAB COMPATIBILITY CONVENTIONS'
    if dowarn(): print 'NOTE TRIAL IS 1 INDEXED FOR MATLAB COMPATIBILITY CONVENTIONS'
    if dowarn(): print 'NOTE EVENT IS 1 INDEXED FOR MATLAB COMPATIBILITY CONVENTIONS'
    assert trial>0
    ByTrialSpikesMS = cgid.data_loader.metaloadvariable(session,area,'ByTrialSpikesMS')
    spikems = ByTrialSpikesMS[unit-1,trial-1]
    te      = cgid.data_loader.get_trial_event(session,area,trial,event)
    start  += te
    stop   += te
    if len(spikems)==0: return np.array(spikems)
    spikems = spikems[spikems>=start]
    spikems = spikems[spikems<stop]
    return np.unique(np.array(spikems)-start)
Esempio n. 4
0
def get_available_channels(session, area):
    """
    Gets the list of channels that are available for a sessiona and area
    """
    if dowarn():
        print("CHANNEL IS 1 INDEXED FOR MATLAB COMPATIBILITY")
    return find(metaloadvariable(session, area, "availableChannels")[:, 0]) + 1
Esempio n. 5
0
def get_good_channels(session, area, keepBad=False, rule="liberal"):
    if dowarn():
        print("CHANNEL IS 1 INDEXED FOR MATLAB COMPATIBILITY")
    warn("CALLING SEMANTICS CHANGE")
    good = get_available_channels(session, area)
    if not keepBad:
        for bad in get_bad_channels(session, area, rule=rule):
            good = np.delete(good, find(good == bad))
    return good
Esempio n. 6
0
def get_spikes_session(session,area,unit,Fs=1000):
    '''
    spikeTimes:
	    1xNUNITS cell array of spike times in seconds. These are raw spike times
	    for the whole session and have not been segmented into individual trials.
	'''
    if dowarn(): print 'NOTE UNIT  IS 1 INDEXED FOR MATLAB COMPATIBILITY CONVENTIONS'
    spikeTimes = cgid.data_loader.metaloadvariable(session,area,'spikeTimes')
    return int32(spikeTimes[0,unit-1][:,0]*Fs)
Esempio n. 7
0
def get_valid_trials(session, area=None):
    if dowarn():
        print("TRIAL IS 1 INDEXED FOR MATLAB COMPATIBILITY")
    if area is None:
        trials = set(find(metaloadvariable(session, "M1", "eventsByTrial")[:, 0]) + 1)
        trials &= set(find(metaloadvariable(session, "PMv", "eventsByTrial")[:, 0]) + 1)
        trials &= set(find(metaloadvariable(session, "PMd", "eventsByTrial")[:, 0]) + 1)
        return np.array(list(trials))
    else:
        return np.array(find(1 == metaloadvariable(session, area, "eventsByTrial")[:, 0]))
Esempio n. 8
0
def metaloaddata(session, area):
    """
    Loads a matfile from the provided path, caching it in the global dict
    "matfilecache" using path as the lookup key.

    Parameters
    ----------
    path : string
        unique absolute path to matfile to be loaded
    """
    global cgid_matfilecache
    path = archive_name(session, area)
    if path in cgid_matfilecache:
        return cgid_matfilecache[path]
    print("caching", path)
    if dowarn():
        print("loading data...")
    data = loadmat(path)
    cgid_matfilecache[path] = data
    if dowarn():
        print("loaded")
    return data
Esempio n. 9
0
def get_data(session, area, trial, event, start, stop, lowf, highf, params):
    """
    Need to abstract loading on neural data from the CGID arrays -- this is
    getting too complicated.

    Interface
    request:
        session
        area
        trial
        reference event
        start time offset
        stop time offset
        filter start frequency
        filter stop frequency
        filter parameter codes
    returns:
        times: len nt trial times in ms for the data relative to reference marker
        xys:   nelectrode-x-2 x,y positions of electrodes in array map space
        data:  a nt-x-nelectrode filtered neural data snippit
    To do this, we will need to
    -- identify and locate relevant data archive
    -- import data archive
    -- locate relevant trial, possibly in the raw LFP if we need to use padding
    -- perform requested filtering on all channels
    -- generate time and space bases
    -- extract and pack data

    Note: trial, event, start, stop are using the matlab convention, 1-index

    Extracting the cortical locations of the electrodes is very very very
    tricky. We will use the same coordinate system as in the videos, where Y is
    the distance from ventral to dorsal along central sulcus from M1 array in
    mm. and X is the distance from caudal to rostral from M1 implant in mm
    """
    """
    #Test code
    session = 'RUS120521'
    area    = 'PMv'
    trial   = 10
    event   = 6
    start   = -1000
    stop    = 0
    lowf    = 15
    highf   = 30
    params  = 0
    times,xys,data = get_data(session,area,trial,event,start,stop,lowf,highf,params)
    """
    if dowarn():
        print("TRIAL IS 1 INDEXED FOR MATLAB COMPATIBILITY")
    print("loading data..."),
    availableChannels = metaloadvariable(session, area, "availableChannels")
    eventsByTrial = metaloadvariable(session, area, "eventsByTrial")
    print("done")
    trialEvents = eventsByTrial[trial - 1]
    trialStart = trialEvents[3]
    eventCode = trialEvents[event - 1]
    dataStart = eventCode + trialStart + start
    dataStop = eventCode + trialStart + stop
    # extracting and filtering the data is the easy part
    times = arange(start, stop)
    data = []
    for ch in get_good_channels(session, area):
        clipped = get_analytic_lfp(session, area, ch, trial, (event, start, stop), lowf, highf, Fs=1000)
        data.append(clipped)
    # compile the list of spatial locations
    box, positions = getElectrodePositions(session, area)
    xys = arr([positions[ch] for ch in sorted(list(positions.keys()))])
    return times, xys, np.array(data).T, squeeze(availableChannels)