Ejemplo n.º 1
0
def yaw_variation(is_control=True):
    
    ci = [1,3]
    #is_control = False
    
    data, segs = get_pooled(ci)
    data, segs = filter_by_treatment(data, segs, is_control)
    
    smeans = []    
    for sid, d in groupby(data, 'session_id'):
        yaw = toyota_yaw_rate_in_degrees(d['c_yaw'])
        mean = np.mean(yaw)
        std = np.std(yaw)
        print sid, mean, std
        smeans.append((sid, mean))
    #mean = np.mean(smeans)
    #std = np.std(smeans)
    #print 'mean: ' + str(mean) + ' std: ' + str(std)
    return smeans
Ejemplo n.º 2
0
def get_pooled_data(cis, is_control):
    arr_desc = [('sid', int), ('bend', int), ('yaw', float), ('speed', float)]
    table = np.array([], dtype=arr_desc)
    
    #cis = [1,2,3]
    for ci in cis:
        data = get_angled_range_data2(CORNERING[ci][0], CORNERING[ci][1])
        segs = get_pursuit_fits(CORNERING[ci][0], CORNERING[ci][1])
        
        data, segs = filter_by_treatment(data, segs, is_control)
        
        data.sort(order=['session_id', 'ts'])
        grp, segs = zip(*segs)
        groups = np.rec.fromrecords(grp, names='session_id,lap')

        for (sid, lap), d in groupby_multiple(data, ('session_id', 'lap')):
            #if (np.sum(d['g_direction_q'] < 0.2) > 0.25*(len(d))): continue
            seg = [segs[k] for k in np.flatnonzero((groups.session_id == sid) & 
                                                   (groups.lap == lap))]
            if (len(seg) == 0): continue
            seg = np.hstack(seg).view(np.recarray)
            seg = seg[seg.n > 12]
            
            lap_dpoints = []
            for s in seg:
                dt = s.t1 - s.t0
                if dt == 0: continue
                gspeed = -((s.d1[0]-s.d0[0]) / dt)
                slice = d[(d['ts'] >= s.t0) &
                          (d['ts'] <= s.t1)]
                ym = np.mean(toyota_yaw_rate_in_degrees(slice['c_yaw']))
                lap_dpoints.append((ym, gspeed))
            
            lap_dpoints = np.array(lap_dpoints)
            
            if (len(lap_dpoints > 0)):
                yaw = np.mean(lap_dpoints[:,0])
                speed = np.median(lap_dpoints[:,1])
                arr = np.array([(sid,ci,yaw,speed)], dtype=arr_desc)
                table = np.append(table, arr)
    return table
Ejemplo n.º 3
0
def pursuit_vs_yaw(range):
    groups, data, grp, segs = get_pursuits_and_data_by_range(range)
    pdf_out = PdfPages('/tmp/pursuit_vs_yaw.pdf')
    
    bin_size = 0.5
    
    means = []
    slopes = []
    noises = []
    for sid, d in groupby(data, 'session_id'):

        seg = [segs[i] for i in np.flatnonzero(groups.session_id == sid)]
        seg = np.hstack(seg).view(np.recarray)
        #seg = seg[(seg.t1 - seg.t0) > 0.2] # take out saccades
        seg = seg[seg.n > 12]
        
        # filter outliers from gaze landings
        values = np.vstack((seg.d0[:,0], seg.d0[:,1]))
        fkde = gaussian_kde(values)
        x, y = np.mgrid[np.min(values[0]):np.max(values[0]):bin_size, 
                        np.min(values[1]):np.max(values[1]):bin_size]
        grid = np.vstack((x.ravel(), y.ravel()))
        z = fkde(grid)
        reshaped = z.reshape(x.shape)
        medianhdr = histogram_hdr(z, bin_size**2, 0.8)
        seg = [s for s in seg if fkde((s.d0[0], s.d0[1])) > medianhdr]
        seg = np.hstack(seg).view(np.recarray)
        
        # mean yaw within each pursuit
        withinPursuitYaw = []
        for s in seg:
            slice = d[(d['ts'] >= s['t0']) &
                      (d['ts'] <= s['t1'])]
            ym = np.mean(toyota_yaw_rate_in_degrees(slice['c_yaw']))
            withinPursuitYaw.append(ym)
        withinPursuitYaw = np.array(withinPursuitYaw)
        
        dt = seg.t1 - seg.t0
        valid = dt > 0
        dt = dt[valid]
        gspeeds = -((seg.d1[:,0] - seg.d0[:,0]) / dt)
        noise = withinPursuitYaw / 2 - gspeeds
        
        plt.figure()
        # raw scatter
        fit = np.polyfit(withinPursuitYaw, gspeeds, 1)
        rng = np.linspace(10, 20, len(withinPursuitYaw))
        rline = np.polyval(fit, rng)
        model = np.poly1d([0.5, 0])
        plt.subplot(221)
        plt.plot(withinPursuitYaw, gspeeds, '.k', alpha=0.2)
        plt.plot(rng, rline, '-b')
        plt.plot([10,20], [np.polyval(model, 10), np.polyval(model, 20)], '-g')
        plt.ylim(-50,50)
        plt.xlim(5,25)
        plt.xlabel('mean yaw deg/s')
        plt.ylabel('gaze speed deg/s')
        plt.annotate('spearman r: %f' % scipy.stats.spearmanr(withinPursuitYaw, gspeeds)[0], (10,-10))
        plt.annotate('slope: %f' % fit[0], (10,-20))
        plt.title(sid)
        
        # noise kde + pdf
        plt.subplot(222)
        kde = gaussian_kde(noise)
        rng = np.linspace(np.min(noise), np.max(noise), len(noise))
        plt.plot(rng, kde(rng), '-b', label='kde')
        plt.plot(rng, scipy.stats.norm.pdf(rng, loc=np.mean(noise), scale=np.std(noise)), '-r', label='pdf')
        plt.hist(noise, bins=30, normed=True, color='green')
        plt.xlabel('mean yaw / 2 - gaze speed')
        plt.legend(loc='upper right')
        
        # pursuit landings scatter & density map
        plt.subplot(223)
        plt.contour(x,y,reshaped, [medianhdr])
        plt.plot(seg.d0[:,0], seg.d0[:,1], ',k')
        plt.xlim(-60,60)
        plt.ylim(-20,20)
        
        pdf_out.savefig()
        plt.close()
        
        print '%i \nspearman r: %f' % (sid, scipy.stats.spearmanr(withinPursuitYaw, gspeeds)[0])
        
        # how many fixations are from right to left (74-90 degrees)
        #validspeed = gspeeds < 0
        #print '%f of fixations from right to left' % (1.0 * len(gspeeds[validspeed]) / len(gspeeds))
    
        print 'mean of yaws / gaze speeds %f' % (np.mean(gspeeds / withinPursuitYaw))#, scipy.stats.mode(np.around(withinPursuitYaw / gspeeds, 1))[0])
        print 'mean of mean yaw / 2 - gaze speed: %f' % (np.mean(withinPursuitYaw / 2 - gspeeds))
        print 'noise shapiro-wilk w: %f p: %f' % scipy.stats.shapiro(noise)
        #print 'median hdr %f' % medianhdr
        
        #print 'mean of yaws: %f' % np.mean(withinPursuitYaw)
        #print 'mean of gspeeds: %f' % np.mean(gspeeds)
        
        means.append((np.mean(withinPursuitYaw), np.mean(gspeeds)))
        slopes.append(fit)
        noises.append(noise)

    pdf_out.close()
    return (means, slopes, noises)
Ejemplo n.º 4
0
def pursuit_yaw_means():
    
    pdf_out = PdfPages('/tmp/pursuit_vs_yaw_pooled.pdf')
    
    cis = [1,2,3]
    all_data = []
    all_segs = []
    for ci in cis:
        data = get_angled_range_data2(CORNERING[ci][0], CORNERING[ci][1])
        segs = get_pursuit_fits(CORNERING[ci][0], CORNERING[ci][1])
        all_data.append(data)
        all_segs.append(segs)
    data = np.hstack(all_data)
    segs = np.vstack(all_segs)
    data.sort(order=['session_id', 'ts'])
    
    grp, segs = zip(*segs)
    groups = np.rec.fromrecords(grp, names='session_id,lap')
    
    all_dpoints = []
    xrange = [12,18]
    for sid, i in groupby_i(data, 'session_id'):
        d = data[i]
        print sid
        seg = [segs[k] for k in np.flatnonzero(groups.session_id == sid)]
        seg = np.hstack(seg).view(np.recarray)
        seg = seg[seg.n > 12]
        
        dpoints = []
        for s in seg:
            dt = s.t1 - s.t0
            if dt == 0: continue
            gspeed = -((s.d1[0]-s.d0[0]) / dt)
            slice = d[(d['ts'] >= s.t0) &
                      (d['ts'] <= s.t1)]
            ym = np.mean(toyota_yaw_rate_in_degrees(slice['c_yaw']))
            naksu_x = pxx2heading(slice['naksu_x'])
            naksu_mean = (naksu_x[1] - naksu_x[0]) / dt
            dpoints.append((ym, gspeed, naksu_mean))
        
        all_dpoints.append(dpoints)
        dpoints = np.array(dpoints)
        print scipy.stats.pearsonr(dpoints[:,0], dpoints[:,1])
        plt.figure()
        plt.title(sid)
        plt.hist(dpoints[:,0], bins=50)
        #plt.xlim(xrange)
        pdf_out.savefig()
        plt.close()
    
    all_dpoints = np.array(all_dpoints)
    means = np.array([np.median(x,0) for x in all_dpoints])
    ymeans = means[:,0]
    gmeans = means[:,1]
    nmeans = means[:,2]
    
    #from utils import fitLine
    #fitLine(ymeans,gmeans)
    
    fit = np.polyfit(ymeans, gmeans, 1)
    lsr = np.poly1d(fit)
    model = np.poly1d([0.5, 0])
    
    plt.figure()
    plt.plot(ymeans,gmeans,'.k')
    plt.plot(xrange, lsr(xrange), '-b')
    plt.plot(xrange, model(xrange), '-g')
    plt.xlabel('mean yaw rate (deg/s)')
    plt.ylabel('mean gaze speed (deg/s)')
    pdf_out.savefig()
    plt.close()
    
    nfit = np.polyfit(ymeans, nmeans, 1)
    nlsr = np.poly1d(nfit)
    plt.figure()
    plt.plot(ymeans,nmeans,'.k')
    plt.plot(xrange, nlsr(xrange), '-b')
    plt.xlabel('mean yaw rate (deg/s)')
    plt.ylabel('mean change in horizontal TP coordinate during pursuit (deg/s)')
    pdf_out.savefig()
    plt.close()
    
    pdf_out.close()
    
    print '\nspearman r: %f, p %f' % scipy.stats.spearmanr(ymeans, gmeans)
    print 'pearson r: %f, p %f' % scipy.stats.pearsonr(ymeans,gmeans)
    print 'least-squares fit: %f %f' % (fit[0], fit[1])
    print 'yaw/TP location least-squares fit: %f %f' % (nfit[0], nfit[1])