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
def raw_pursuits_pdf(ci=[1], is_control=True):
    #ci = [3]
    #is_control = True
    txt = 'free' if is_control else 'tp'
    pdf_out = PdfPages('/tmp/raw_pursuits'+str(ci)+'_'+txt+'.pdf')
    
    data, segs = get_pooled(ci)
    data, segs = filter_by_treatment(data, segs, is_control)

    #print 'segs: ' + str(len(segs))
    
    grp, segs = zip(*segs)
    groups = np.rec.fromrecords(grp, names='session_id,lap')
    data = data[ data['g_direction_q'] > 0.4 ]

    for (sid, lap), d in groupby_multiple(data, ('session_id', 'lap')):
        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]

        plt.figure()
        
        ax1 = plt.subplot(211)
        plt.title(str(sid) + ', ' + str(lap))
        plt.plot(d['dist'], d['scenecam_x'], ',k')
        for s in seg:
            plt.plot([s.t0, s.t1], [s.d0[0], s.d1[0]], '-r')
        plt.ylim([-10,50])
        plt.ylabel('horiz.gaze (deg)')
        
        ax2 = plt.subplot(212, sharex=ax1)
        plt.plot(d['dist'], d['scenecam_y'], ',k')
        for s in seg:
            plt.plot([s.t0, s.t1], [s.d0[1], s.d1[1]], '-r')
        plt.ylim([-15,15])
        plt.ylabel('vert.gaze (deg)')
        plt.xlabel('ts')
        pdf_out.savefig()
        plt.close()

    pdf_out.close()
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