示例#1
0
def make_crash_dataset(movie_dataset, example_dataset):
    dataset_crash = ffa.Dataset(like=example_dataset)
    keys = movie_dataset.get_movie_keys(behavior='landing', crash=True)
    
    for key in keys:
        movie = movie_dataset.movies[key]
        trajec = movie.trajec
        trajec.behavior = movie.behavior
        trajec.key = key
        fa.calc_frame_of_landing(trajec)
        fa.normalize_dist_to_stim_r(trajec)    
        d = np.max(np.max(trajec.dist_to_stim_r_normed, 0.08))
        trajec.frames = np.arange(fa.get_frame_at_distance(trajec, d), trajec.frame_of_landing).tolist()    
        fa.prep_trajectory(trajec)
    
        dataset_crash.trajecs.setdefault(key, trajec)
        
    fa.prep_dataset(dataset_crash)
    
    return dataset_crash
示例#2
0
def make_behavior_dataset(dataset,
                          filename='dataset_nopost_landing',
                          behavior='landing'):

    REQUIRED_LENGTH = 30
    REQUIRED_DIST = 0.1

    new_dataset = ffa.Dataset(like=dataset)
    if type(behavior) is not list:
        behavior = [behavior]
    for k, trajec in dataset.trajecs.items():
        trajec.key = k
        if trajec.behavior in behavior:

            calc_frame_of_landing(trajec)
            fa.normalize_dist_to_stim_r(trajec)
            saccade_analysis.calc_saccades2(trajec)

            if trajec.behavior == 'landing':
                if trajec.dist_to_stim_r_normed[0] >= REQUIRED_DIST:
                    #if np.max(trajec.positions[:,2]) < 0 and np.min(trajec.positions[:,2]) > -0.15:
                    if np.min(trajec.positions[:, 2]) > -0.15:
                        trajec.frames = np.arange(
                            fa.get_frame_at_distance(trajec, REQUIRED_DIST),
                            trajec.frame_of_landing).tolist()
                        if trajec.frame_of_landing > REQUIRED_LENGTH:
                            if np.max(trajec.positions[trajec.frames, 2]
                                      ) < 0.15:  # no real altitude check
                                #classify(trajec, dfar=REQUIRED_DIST, dnear=0.005)
                                new_dataset.trajecs.setdefault(k, trajec)

                                first_frame = 0
                                trajec.frames_below_post = np.arange(
                                    first_frame,
                                    trajec.frame_of_landing + 1).tolist()

            elif trajec.behavior == 'flyby':
                frame_nearest_to_post = np.argmin(trajec.dist_to_stim_r)
                print k
                if frame_nearest_to_post > 10 and np.max(
                        trajec.dist_to_stim_r[0:frame_nearest_to_post]
                ) > REQUIRED_DIST:
                    if np.min(trajec.positions[:, 2]) > -0.15:
                        if trajec.dist_to_stim_r[frame_nearest_to_post] < 0.1:
                            fs = np.arange(frame_nearest_to_post,
                                           len(trajec.speed)).tolist()
                            try:
                                last_frame = get_frame_at_distance(
                                    trajec, REQUIRED_DIST, frames=fs)
                            except:
                                last_frame = len(trajec.speed) - 1
                            first_frame = fa.get_frame_at_distance(
                                trajec,
                                REQUIRED_DIST,
                                frames=np.arange(
                                    0, frame_nearest_to_post).tolist())

                            trajec.frames = np.arange(first_frame,
                                                      last_frame).tolist()

                            # get frame at 8cm away, prior to nearest approach
                            frame_nearest_to_post = np.argmin(
                                trajec.dist_to_stim_r)
                            trajec.frame_nearest_to_post = frame_nearest_to_post
                            frames = np.arange(0,
                                               frame_nearest_to_post).tolist()
                            trajec.frames_of_flyby = frames
                            frame_at_distance = fa.get_frame_at_distance(
                                trajec, 0.08, singleframe=True, frames=frames)

                            last_frame = np.min([
                                frame_nearest_to_post + 20,
                                len(trajec.speed) - 1
                            ])

                            sacs = [s[0] for s in trajec.sac_ranges]
                            sac_sgns = np.array(sacs) - frame_at_distance
                            sac_negs = np.where(sac_sgns < 0)[0]
                            if len(sac_negs) > 0:
                                sac_neg = sac_negs[0]
                            else:
                                sac_neg = 0
                            first_frame = sac_neg + 1

                            try:
                                trajec.frames_of_flyby = np.arange(
                                    first_frame, last_frame).tolist()
                                new_dataset.trajecs.setdefault(k, trajec)
                            except:
                                print 'ignored key: ', k, first_frame, last_frame

                            new_dataset.trajecs.setdefault(k, trajec)

    fa.save(new_dataset, filename)

    return new_dataset
def make_behavior_dataset(dataset, filename='dataset_nopost_landing', behavior='landing'):

    REQUIRED_LENGTH = 30
    REQUIRED_DIST = 0.1

    new_dataset = ffa.Dataset(like=dataset)
    if type(behavior) is not list:
        behavior = [behavior]
    for k,trajec in dataset.trajecs.items():
        trajec.key = k
        if trajec.behavior in behavior:
            
            calc_frame_of_landing(trajec)
            fa.normalize_dist_to_stim_r(trajec)
            saccade_analysis.calc_saccades2(trajec)
            
            if trajec.behavior == 'landing':
                if trajec.dist_to_stim_r_normed[0] >= REQUIRED_DIST:
                    #if np.max(trajec.positions[:,2]) < 0 and np.min(trajec.positions[:,2]) > -0.15:
                    if np.min(trajec.positions[:,2]) > -0.15:
                        trajec.frames = np.arange(fa.get_frame_at_distance(trajec, REQUIRED_DIST), trajec.frame_of_landing).tolist()
                        if trajec.frame_of_landing > REQUIRED_LENGTH:
                            if np.max(trajec.positions[trajec.frames,2]) < 0.15: # no real altitude check
                                #classify(trajec, dfar=REQUIRED_DIST, dnear=0.005)
                                new_dataset.trajecs.setdefault(k, trajec)
                                
                                first_frame = 0
                                trajec.frames_below_post = np.arange(first_frame, trajec.frame_of_landing+1).tolist()

            elif trajec.behavior == 'flyby':
                frame_nearest_to_post = np.argmin(trajec.dist_to_stim_r)
                print k
                if frame_nearest_to_post > 10 and np.max(trajec.dist_to_stim_r[0:frame_nearest_to_post]) > REQUIRED_DIST:
                    if np.min(trajec.positions[:,2]) > -0.15:
                        if trajec.dist_to_stim_r[frame_nearest_to_post] < 0.1:
                            fs = np.arange(frame_nearest_to_post,len(trajec.speed)).tolist()
                            try:
                                last_frame = get_frame_at_distance(trajec, REQUIRED_DIST, frames=fs)
                            except:
                                last_frame = len(trajec.speed)-1
                            first_frame = fa.get_frame_at_distance(trajec, REQUIRED_DIST, frames=np.arange(0,frame_nearest_to_post).tolist())
                            
                            trajec.frames = np.arange(first_frame, last_frame).tolist()
                            
                            # get frame at 8cm away, prior to nearest approach
                            frame_nearest_to_post = np.argmin(trajec.dist_to_stim_r)
                            trajec.frame_nearest_to_post = frame_nearest_to_post
                            frames = np.arange(0, frame_nearest_to_post).tolist()
                            trajec.frames_of_flyby = frames
                            frame_at_distance = fa.get_frame_at_distance(trajec, 0.08, singleframe=True, frames=frames)
                            
                            last_frame = np.min( [frame_nearest_to_post+20, len(trajec.speed)-1]) 
                            
                            sacs = [s[0] for s in trajec.sac_ranges]
                            sac_sgns = np.array(sacs) - frame_at_distance
                            sac_negs = np.where(sac_sgns<0)[0]
                            if len(sac_negs) > 0:
                                sac_neg = sac_negs[0]
                            else:
                                sac_neg = 0
                            first_frame = sac_neg + 1
                            
                            try:
                                trajec.frames_of_flyby = np.arange(first_frame, last_frame).tolist()
                                new_dataset.trajecs.setdefault(k, trajec)
                            except:
                                print 'ignored key: ', k, first_frame, last_frame
                            
                            new_dataset.trajecs.setdefault(k, trajec)
                            
            
    fa.save(new_dataset, filename)

    return new_dataset