@@ -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 )):
0 commit comments