Skip to content

Commit 755df2c

Browse files
fixed bug in enriching
1 parent 80b2186 commit 755df2c

1 file changed

Lines changed: 23 additions & 20 deletions

File tree

src/rachel_analysis_utils/enrich_df_sess.py

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -69,27 +69,30 @@ def add_all_slopes_to_df_sess(df_sess, df_slope, slope_type,
6969
new_col_name=f'{channel.split("dff")[0]}{slope_col_names[slope_col]}')
7070
return df_sess_slope
7171

72-
def enrich_df_sess_from_nwbs(nwb_list, df_sess, extractor_func, new_col_name):
72+
def enrich_df_sess_from_nwbs(nwb_list, df_sess, extractor_dict: dict[str, callable]):
7373
"""
7474
Call extractor_func for each nwb in nwb_list and merge results into df_sess.
75-
extractor_func may return:
76-
- (session_date, value)
77-
- dict {session_date: value}
78-
- pandas.Series indexed by session_date
79-
- scalar (in which case the function will try to obtain session_date from the nwb)
75+
extractor_func returns a scalar value.
8076
The merged column will be named new_col_name.
8177
Returns a new dataframe (does not modify inputs).
8278
"""
8379
rows = []
8480
for nwb in nwb_list:
85-
res = extractor_func(nwb)
81+
extracted_res = {}
82+
for new_col_name, extractor_func in extractor_dict.items():
83+
res = extractor_func(nwb)
84+
extracted_res[new_col_name] = res
85+
8686
session_date = nwb.session_id.split('_')[1]
87-
rows.append({'session_date': str(session_date) if session_date is not None else None, new_col_name: res})
87+
subject_id = nwb.session_id.split('_')[0]
88+
rows.append({'session_date': str(session_date) if session_date is not None else None,
89+
'subject_id': int(subject_id) if subject_id is not None else None,
90+
**extracted_res})
8891

8992
df_new = pd.DataFrame(rows).dropna(subset=['session_date'])
9093

9194
# align column name for merge
92-
merged = df_sess.merge(df_new, on='session_date', how='left')
95+
merged = df_sess.merge(df_new, on=['subject_id', 'session_date'], how='left')
9396
return merged
9497

9598
# a bunch of extractor functions
@@ -149,18 +152,18 @@ def enrich_df_sess_with_all_getters(nwb_list, df_sess):
149152
150153
This function does not modify the inputs; it returns an enriched copy.
151154
"""
152-
enrichments = [
153-
('max_side_bias', get_max_side_bias),
154-
('mean_side_bias', get_mean_side_bias),
155-
('baited_rate', get_baited_rate),
156-
('left_choice_rate', get_left_choice_rate),
157-
('ignore_choice_rate', get_ignore_choice_rate),
158-
('left_right_diff', get_left_right_diff),
159-
('left_right_abs_diff', get_left_right_abs_diff),
160-
]
155+
enrichments = {
156+
'max_side_bias': get_max_side_bias,
157+
'mean_side_bias': get_mean_side_bias,
158+
'baited_rate': get_baited_rate,
159+
'left_choice_rate': get_left_choice_rate,
160+
'ignore_choice_rate': get_ignore_choice_rate,
161+
'left_right_diff': get_left_right_diff,
162+
'left_right_abs_diff': get_left_right_abs_diff,
163+
}
161164

162165
df_out = df_sess.copy()
163-
for col_name, extractor in enrichments:
164-
df_out = enrich_df_sess_from_nwbs(nwb_list, df_out, extractor, col_name)
166+
167+
df_out = enrich_df_sess_from_nwbs(nwb_list, df_out, enrichments)
165168

166169
return df_out

0 commit comments

Comments
 (0)