Skip to content

Commit ee6d2d9

Browse files
Merge pull request #5 from AllenNeuralDynamics/detached_local_branch
Detached local branch got lost, adding it back in.
2 parents 7be868c + 1ec6baf commit ee6d2d9

2 files changed

Lines changed: 28 additions & 22 deletions

File tree

src/rachel_analysis_utils/analysis_utils.py

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ def get_RPE_by_avg_signal_fit(data, avg_signal_col):
2323
slope = np.nan
2424
return (x_fit, y_fit, slope)
2525

26-
output_col_name = lambda channel, data_column, alignment_event: f"avg_{data_column}_{channel[:3]}_{alignment_event.split("_in_")[0]}"
26+
output_col_name = lambda channel, data_column, alignment_event: f"avg_{data_column}_{channel.split('_dff')[0]}_{alignment_event.split('_in_')[0]}"
2727

28-
def add_AUC_and_rpe_slope(nwbs_by_week, parameters, data_column = 'data_z_norm',
28+
def add_AUC_and_rpe_slope(nwbs_by_week, all_channels, save_dfs, data_column = 'data_z_norm',
2929
alignment_event = 'choice_time_in_session',offsets = [0.33,1]):
3030
"""
3131
Enrich NWB weeks with average signal windows and compute RPE slopes per session for each channel.
@@ -36,11 +36,7 @@ def add_AUC_and_rpe_slope(nwbs_by_week, parameters, data_column = 'data_z_norm',
3636
# Enrich each week with average signals for every channel
3737
for nwb_week in nwbs_by_week:
3838
nwb_week_enriched = copy.deepcopy(nwb_week)
39-
for channel in list(parameters["channels"].keys()):
40-
# build the channel name used for processing (append preprocessing suffix if present)
41-
if parameters.get('preprocessing', 'raw') != 'raw':
42-
channel = channel + '_' + parameters['preprocessing']
43-
39+
for channel in all_channels:
4440
avg_signal_col = output_col_name(channel, data_column, alignment_event)
4541

4642
nwb_week_enriched = trial_metrics.get_average_signal_window_multi(
@@ -58,13 +54,11 @@ def add_AUC_and_rpe_slope(nwbs_by_week, parameters, data_column = 'data_z_norm',
5854
rpe_rows = []
5955
subject_id = str(nwbs_by_week_enriched[0][0]).split(' ')[1].split('_')[0]
6056

61-
for ch in list(parameters["channels"].keys()):
62-
channel = ch
63-
if parameters.get('preprocessing', 'raw') != 'raw':
64-
channel = channel + '_' + parameters['preprocessing']
57+
for channel in all_channels:
6558

6659
avg_signal_col = output_col_name(channel, data_column, alignment_event)
67-
60+
if avg_signal_col not in df_trials_all.columns:
61+
continue
6862

6963
for ses_idx in sorted(df_trials_all['ses_idx'].unique()):
7064
data = df_trials_all[df_trials_all['ses_idx'] == ses_idx]
@@ -86,7 +80,7 @@ def add_AUC_and_rpe_slope(nwbs_by_week, parameters, data_column = 'data_z_norm',
8680

8781

8882

89-
if parameters.get("save_dfs", False) == True:
83+
if save_dfs == True:
9084
combined_rpe_slope.to_csv(f"/results/data/{subject_id}/rpe_slope.csv")
9185

9286
return nwbs_by_week_enriched, combined_rpe_slope
@@ -236,7 +230,9 @@ def add_sliding_window_corr(
236230
else:
237231
raise ValueError("Input 'nwb' must have a 'df_fip' attribute or be a DataFrame with fip data.")
238232

239-
233+
if signal1name not in df_fip.event.unique() or signal2name not in df_fip.event.unique():
234+
print("One or both signals not found in df_fip events. Skipping correlation.")
235+
return nwb
240236
# Select and pivot the two signals directly (align by timestamp)
241237
df_sel = (
242238
df_fip.loc[df_fip['event'].isin([signal1name, signal2name]),
@@ -295,7 +291,7 @@ def add_sliding_window_corr(
295291
r = r_full.to_numpy(dtype=float)[centers]
296292

297293
df_corr = pd.DataFrame({'data_z':r, 'timestamps':t_centers})
298-
df_corr['event'] = f'{signal1name[:3]}:{signal2name[:3]}_pearsonR'
294+
df_corr['event'] = f'{signal1name.split('_dff')[0]}:{signal2name.split('_dff')[0]}_pearsonR'
299295

300296
# If the entire correlation vector is NaN, nothing to merge — return unchanged.
301297
if np.all(np.isnan(r)):

src/rachel_analysis_utils/nwb_utils.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ def load(cls, session_folder, load_fip = False):
482482

483483
return obj
484484

485-
def save_nwb_list(nwb_list, plot_loc, df_sess=None):
485+
def save_nwb_list(flat_dummy_nwbs, plot_loc, df_sess=None):
486486
"""
487487
Save a list or list-of-lists of dummy_nwb objects.
488488
@@ -494,12 +494,6 @@ def save_nwb_list(nwb_list, plot_loc, df_sess=None):
494494
<attr>.parquet
495495
"""
496496

497-
# flatten list or list-of-lists
498-
flat_dummy_nwbs = [
499-
nwb
500-
for item in nwb_list
501-
for nwb in (item if isinstance(item, list) else [item])
502-
]
503497

504498
subject_ids = set()
505499

@@ -633,6 +627,22 @@ def get_date_and_week_interval(df, start_date):
633627
week_interval_series = ((date_series - start_date).dt.days // 7) + 1
634628
return week_interval_series
635629

630+
def split_nwbs_by_week(nwbs_all):
631+
nwbs_by_week = []
632+
nwb_week_i = []
633+
curr_week = 1
634+
for nwb in nwbs_all:
635+
week_interval = nwb.df_trials.week_interval.unique()[0]
636+
if week_interval == curr_week:
637+
nwb_week_i.append(nwb)
638+
else:
639+
nwbs_by_week.append(nwb_week_i)
640+
nwb_week_i = [nwb]
641+
curr_week = week_interval
642+
nwbs_by_week.append(nwb_week_i)
643+
644+
return nwbs_by_week
645+
636646
def get_dummy_nwbs_by_week(df_sess,df_trials, df_events, df_fip):
637647
start_date = pd.to_datetime(df_sess['session_date'].min())
638648

0 commit comments

Comments
 (0)