def tierpsy_trajectories_summary( fname, time_windows, time_units, only_abs_ventral=False, selected_feat=None, is_manual_index=False, delta_time=1/3): """ Calculate the trajectory summaries for a given file fname, within a given time window (units of start time and end time are in frame numbers). """ fps = read_fps(fname) data_in = read_data(fname, time_windows, time_units, fps, is_manual_index) if data_in is None: return [pd.DataFrame() for iwin in range(len(time_windows))] timeseries_data, blob_features = data_in is_fov_tosplit = was_fov_split(timeseries_data[0]) # is_fov_tosplit = False if is_fov_tosplit: fovsplitter = FOVMultiWellsSplitter(fname) good_wells_df = fovsplitter.wells[['well_name','is_good_well']].copy() # print(good_wells_df) # initialize list of summaries for all time windows all_summaries_list = [] # loop over time windows for iwin,window in enumerate(time_windows): if timeseries_data[iwin].empty: all_summary = pd.DataFrame([]) else: # initialize list of trajectory summaries for given time window all_summary = [] # loop over worm indexes (individual trajectories) for w_ind, w_ts_data in timeseries_data[iwin].groupby('worm_index'): w_blobs = blob_features[iwin].loc[w_ts_data.index] w_ts_data = w_ts_data.reset_index(drop=True) w_blobs = w_blobs.reset_index(drop=True) worm_feats = get_summary_stats( w_ts_data, fps, w_blobs, delta_time, only_abs_ventral=only_abs_ventral, selected_feat=selected_feat ) # returns empty dataframe when w_ts_data is empty worm_feats = pd.DataFrame(worm_feats).T worm_feats = add_trajectory_info(worm_feats, w_ind, w_ts_data, fps) all_summary.append(worm_feats) # concatenate all trajectories in given time window into one dataframe all_summary = pd.concat(all_summary, ignore_index=True, sort=False) # attach whether the wells was good or bad if is_fov_tosplit: # but only do this if we have wells all_summary = all_summary.merge(good_wells_df, on='well_name', how='left') # add dataframe to the list of summaries for all time windows all_summaries_list.append(all_summary) return all_summaries_list
def tierpsy_trajectories_summary(fname, time_windows, time_units, is_manual_index=False, delta_time=1 / 3): """ Calculate the trajectory summaries for a given file fname, within a given time window (units of start time and end time are in frame numbers). """ fps = read_fps(fname) data_in = read_data(fname, time_windows, time_units, fps, is_manual_index) if data_in is None: return [pd.DataFrame() for iwin in range(len(time_windows))] timeseries_data, blob_features = data_in # initialize list of summaries for all time windows all_summaries_list = [] # loop over time windows for iwin, window in enumerate(time_windows): if timeseries_data[iwin].empty: all_summary = pd.DataFrame([]) else: # initialize list of trajectory summaries for given time window all_summary = [] # loop over worm indexes (individual trajectories) for w_ind, w_ts_data in timeseries_data[iwin].groupby( 'worm_index'): w_blobs = blob_features[iwin].loc[w_ts_data.index] w_ts_data = w_ts_data.reset_index(drop=True) w_blobs = w_blobs.reset_index(drop=True) worm_feats = get_summary_stats( w_ts_data, fps, w_blobs, delta_time ) # returns empty dataframe when w_ts_data is empty worm_feats = pd.DataFrame(worm_feats).T worm_feats = add_trajectory_info(worm_feats, w_ind, w_ts_data, fps) all_summary.append(worm_feats) # concatenate all trajectories in given time window into one dataframe all_summary = pd.concat(all_summary, ignore_index=True, sort=False) # add dataframe to the list of summaries for all time windows all_summaries_list.append(all_summary) return all_summaries_list
def tierpsy_trajectories_summary(fname, is_manual_index=False, delta_time=1 / 3): fps = read_fps(fname) data_in = read_data(fname, is_manual_index) if data_in is None: return timeseries_data, blob_features = data_in all_summary = [] for w_ind, w_ts_data in timeseries_data.groupby('worm_index'): w_blobs = blob_features.loc[w_ts_data.index] w_ts_data = w_ts_data.reset_index(drop=True) w_blobs = w_blobs.reset_index(drop=True) worm_feats = get_summary_stats(w_ts_data, fps, w_blobs, delta_time) worm_feats = pd.DataFrame(worm_feats).T worm_feats = add_trajectory_info(worm_feats, w_ind, w_ts_data, fps) all_summary.append(worm_feats) all_summary = pd.concat(all_summary, ignore_index=True) return all_summary
def ow_trajectories_summary(fname): fps = read_fps(fname) with pd.HDFStore(fname, 'r') as fid: features_timeseries = fid['/features_timeseries'] all_summary = [] valid_order = None wStats = WormStats() for w_ind, w_ts_data in features_timeseries.groupby('worm_index'): ll = ['worm_{}'.format(int(w_ind))] all_feats = read_feat_events(fname, ll) for cc in w_ts_data: all_feats[cc] = w_ts_data[cc].values exp_feats = wStats.getWormStats(all_feats, np.nanmean) exp_feats = pd.DataFrame(exp_feats) if valid_order is None: #only calculate this the first time... valid_order = [x for x in exp_feats.columns if x not in wStats.extra_fields] #remove uncalculated indexes from wStats exp_feats = exp_feats.loc[:, valid_order] assert not 'worm_index' in exp_feats exp_feats = add_trajectory_info(exp_feats, w_ind, w_ts_data, fps) all_summary.append(exp_feats) all_summary = pd.concat(all_summary, ignore_index=True) return all_summary