PhotometryData
This class is used to handle, manipulate, and analyze large trial-wise photometry datasets. Has functionality for filtering, plotting, averaging, and analyzing trials.
Example Usage
Reading and writing
Filtering, averaging, and plotting
filtered = trials.filter_rows(
trials.obs['trial_label'] != 'NoResponse',
)
avg = filtered.collapse(
group_on=['trial_label'],
metrics={'std' : np.std},
data_cols=['event', 'AUC'],
count_col='n_trials',
)
avg.plot_all(
label_with=['trial_label', 'n_trials'],
err_layer='std',
)
Recentering
recentered = trials.window(
centers = trials.obs['event'],
bounds = (-2, 5),
event_cols=['event', 'lever1', 'lever2', 'loud_noise']
)
Area under curve
Export to flat formats
Handle and analyze trial-wise photometry time-series data.
Initialize a PhotometryData object from an AnnData object.
Parameters:
-
adata(AnnData) –AnnData object containing time-series data.
Source code in pyFiberPhotometry/core/PhotometeryData.py
from_arrays(obs, data, time_points, layers=None, metadata=None)
classmethod
Construct PhotometryData from arrays and observation metadata.
Parameters:
-
obs(DataFrame) –Per-trial observation metadata.
-
data(ndarray) –Time-series data of shape (n_trials, n_time).
-
time_points(ndarray) –Time axis of shape (n_time,).
-
layers(dict[str, ndarray] | None, default:None) –Optional named layers matching the shape of
data. Defaults toNone. -
metadata(dict[str, Any] | None, default:None) –Optional unstructured metadata stored in
.uns. Defaults toNone.
Returns:
-
PhotometryData(Self) –Constructed photometry data object.
Source code in pyFiberPhotometry/core/PhotometeryData.py
read_h5ad(path)
classmethod
Read a PhotometryData object from an .h5ad file.
Parameters:
-
path(str) –Path to the
.h5adfile.
Returns:
-
PhotometryData(Self) –Loaded
PhotometryDatainstance.
Source code in pyFiberPhotometry/core/PhotometeryData.py
read_zarr(path)
classmethod
Read a PhotometryData object from zarr storage.
Parameters:
-
path(str) –Path to the zarr storage.
Returns:
-
PhotometryData(Self) –Loaded
PhotometryDatainstance.
Source code in pyFiberPhotometry/core/PhotometeryData.py
write_h5ad(path)
Write the underlying AnnData to an .h5ad file.
Parameters:
-
path(str) –Path to the output
.h5adfile.
Returns:
-
None–None
write_zarr(path)
Write the underlying AnnData to zarr storage.
Parameters:
-
path(str) –Path to the output zarr storage.
Returns:
-
None–None
append_on_disk_h5ad(path, join='inner', merge='same', uns_merge='first')
Append this object's data to an existing .h5ad file on disk.
Creates the file if it does not already exist.
Parameters:
-
path(str) –Path to the target
.h5adfile. -
join(str, default:'inner') –How to align values when concatenating. Defaults to
'inner'. -
merge(str, default:'same') –How elements not aligned to the concatenated axis are selected. Defaults to
'same'. -
uns_merge(str, default:'first') –How the elements of
.unsare selected. Defaults to'first'.
Returns:
-
None–None
Source code in pyFiberPhotometry/core/PhotometeryData.py
downsample(factor)
Downsample the time dimension of the dataset.
Parameters:
-
factor(int) –Downsampling factor applied along the time axis.
Returns:
-
PhotometryData(Self) –New downsampled photometry data object.
Source code in pyFiberPhotometry/core/PhotometeryData.py
combine_obj(to_append, inplace=False, join='inner', merge='same', uns_merge='same')
Concatenate this object with one or more PhotometryData objects.
Parameters:
-
to_append(PhotometryData | list[PhotometryData]) –Object(s) to append.
-
inplace(bool, default:False) –Whether to modify the original object or return a new merged one. Defaults to
False. -
join(str, default:'inner') –How to align values when concatenating. If
"outer", the union of the other axis is taken. If"inner", the intersection. Defaults to'inner'. -
merge(str, default:'same') –How elements not aligned to the axis being concatenated along are selected. Currently implemented strategies include: None: No elements are kept. 'same': Elements that are the same in each of the objects. 'unique': Elements for which there is only one possible value. 'first': The first element seen at each from each position. 'only': Elements that show up in only one of the objects. Defaults to
'same'. -
uns_merge(str, default:'same') –How the elements of
.unsare selected. Uses the same set of strategies as themergeargument, except applied recursively. Defaults to'same'.
Returns:
-
None | Self–None | PhotometryData: Combined
PhotometryDataorNonedepending oninplace.
Source code in pyFiberPhotometry/core/PhotometeryData.py
collapse(group_on, method=np.nanmean, metrics={'std': np.std}, data_cols=[], collapse_cols=None, count_col='n')
Collapse trials by grouping obs and aggregating data.
Parameters:
-
group_on(list[str] | None) –Columns in
obsused to define groups. IfNoneor[], the data is fully collapsed. -
method(Callable, default:nanmean) –Aggregation function for the main
Xmatrix. Defaults tonp.nanmean. -
metrics(dict[str, Callable], default:{'std': std}) –Additional named aggregation functions stored as layers. Defaults to
{'std': np.std}. -
data_cols(list[str], default:[]) –Observation columns to aggregate with each method.
-
collapse_cols(list[str] | None, default:None) –Optional columns to collapse to lists. Defaults to
None. -
count_col(str | None, default:'n') –Optional column name to store group counts. If
None, nocount_colis made. Defaults to'n'.
Returns:
-
PhotometryData(Self) –Collapsed photometry data object. Metrics are also applied to
data_colswith the metric key appended to column name (ex:'trial_std').
Source code in pyFiberPhotometry/core/PhotometeryData.py
window(centers, bounds, freq=None, series=None, event_cols=None)
Return a new PhotometryData object with windowed time series.
Parameters:
-
centers(ndarray | float) –Specified centers of the windows.
-
bounds(tuple[float, float]) –Lower and upper bounds of the windows relative to centers.
-
freq(float | None, default:None) –Frequency of
series. IfNone,self.freqis used. Defaults toNone. -
series(ndarray | None, default:None) –Time-like sorted series that windows will be calculated in. If
None,self.tsis used. Defaults toNone. -
event_cols(list[str] | None, default:None) –Columns of
self.adata.obsto re-center tocenters. Defaults toNone.
Returns:
-
PhotometryData(Self) –Windowed photometry data object.
Source code in pyFiberPhotometry/core/PhotometeryData.py
area_under_curve(centers=None, bounds=None, transformation=None)
Calculate the area under the curve.
Optionally calculate the area only on specific windows.
Parameters:
-
centers(ndarray | float, default:None) –Specified centers of the windows in the same units. If
Nonethe area under the whole curve is calculated. Default isNone. -
bounds(tuple[float, float], default:None) –Lower and upper bounds of the windows relative to centers. If
Nonethe area under the whole curve is calculated. Default isNone. -
transformation(Callable | None, default:None) –If not
None, a transformation to apply to the singal before taking the area. Shoule always return an array of the same shape and size. Default isNone.
Returns np.ndarray: an array of areas of length n_trials
Source code in pyFiberPhotometry/core/PhotometeryData.py
get_layer(key)
Get a layer from the underlying AnnData object.
Parameters:
-
key(str) –Layer name.
Returns:
-
ndarray–np.ndarray: Requested layer data.
Source code in pyFiberPhotometry/core/PhotometeryData.py
filter_rows(mask, inplace=False)
Filter rows (trials) using a boolean mask.
Parameters:
-
mask(ndarray) –Boolean array of length n_trials.
-
inplace(bool, default:False) –If
True, modify in place. IfFalse, return a new object. Defaults toFalse.
Returns:
-
None | Self–None | PhotometryData: New filtered object if
inplaceisFalse, elseNone.
Source code in pyFiberPhotometry/core/PhotometeryData.py
add_obs_columns(add_from, keys=None)
Add columns to obs from a dictionary.
Parameters:
-
add_from(dict[str, Any]) –Mapping from column names to values.
-
keys(list[str] | None, default:None) –Keys from
add_fromto add. Defaults to all keys.
Returns:
-
None–None
Source code in pyFiberPhotometry/core/PhotometeryData.py
add_metadata(add_from, keys=None)
Add entries to the .uns metadata dictionary.
Parameters:
-
add_from(dict[str, Any]) –Mapping from keys to metadata values.
-
keys(list[str] | None, default:None) –Keys from
add_fromto add. Defaults to all keys.
Returns:
-
None–None
Source code in pyFiberPhotometry/core/PhotometeryData.py
drop_obs_columns(to_drop)
Drop observation columns from obs.
Parameters:
-
to_drop(list[str]) –Column names to drop.
Returns:
-
None–None
Source code in pyFiberPhotometry/core/PhotometeryData.py
get_text_value_counts(col)
Get a string summary of value counts for a column in obs.
Parameters:
-
col(str) –Column name in
obs.
Returns:
-
str(str) –Comma-separated summary of value counts.
Source code in pyFiberPhotometry/core/PhotometeryData.py
trials_to_long_df(layer=None, err_layer=None, obs_cols=None, downsample=10)
Translate trial data to long DataFrame format.
Mostly useful for graphing.
Parameters:
-
layer(str | None, default:None) –Which layer to export. If
None,self.Xis used. Defaults toNone. -
err_layer(str | None, default:None) –Which layer, if any, to add as an error column. Defaults to
None. -
obs_cols(list[str] | None, default:None) –Which columns from
obsto include. Defaults toNone. -
downsample(int | None, default:10) –How much to downsample the time series data, if at all. Defaults to 10.
Returns:
-
DataFrame–pd.DataFrame: DataFrame containing
trial_id, selectedobs_cols,time_idx, signal values, time, anderr_layerin long format.
Source code in pyFiberPhotometry/core/PhotometeryData.py
trials_to_wide_df(layer=None, obs_cols=None, signal_prefix='photometry', downsample=10)
Translate trial data to wide DataFrame format.
Mostly useful for exporting to analysis.FMM module.
Parameters:
-
layer(str | None, default:None) –Which layer to export. If
None,self.Xis used. Defaults toNone. -
obs_cols(list[str] | None, default:None) –Which columns from
obsto include. Defaults toNone, which includes all. -
downsample(int | optional, default:10) –How much to downsample the time series data, if at all. Defaults to
10.
Returns:
-
DataFrame–pd.DataFrame: DataFrame containing
obs_colsand signal timepoints -
DataFrame–in columns
signal_prefix.1 ...signal_prefix.n_times.
Source code in pyFiberPhotometry/core/PhotometeryData.py
plot_line(i, ax=None, label_with=None, err_layer=None, plt_kwargs={})
Plot a single trial time series with an optional error band.
Parameters:
-
i(int) –Trial index to plot.
-
ax(Axes | None, default:None) –Axis to plot on. Creates a new one if
None. Defaults toNone. -
label_with(list[str] | None, default:None) –obscolumns used to build the legend label. Defaults toNone. -
err_layer(str | None, default:None) –Optional layer name providing per-timepoint error. Defaults to
None. -
plt_kwargs(dict, default:{}) –Additional keyword arguments passed to
plt.plot. Defaults to{}.
Returns:
-
None–None
Source code in pyFiberPhotometry/core/PhotometeryData.py
plot_set(subset, ax=None, title=None, label_with=None, err_layer=None, plt_kwargs={})
Plot a set of trials given a boolean or index subset.
Parameters:
-
subset(list[bool | int]) –Boolean mask or indices selecting trials.
-
ax(Axes, default:None) –Axis to plot on. Creates a new one if
None. Defaults toNone. -
title(str, default:None) –Optional title for the axis. Defaults to
None. -
label_with(list[str], default:None) –obscolumns used to build legend labels. Defaults toNone. -
err_layer(str, default:None) –Optional layer name providing per-timepoint error. Defaults to
None. -
plt_kwargs(dict, default:{}) –Additional keyword arguments passed to
plot_line. Defaults to{}.
Returns:
-
None–None
Source code in pyFiberPhotometry/core/PhotometeryData.py
plot_groups(group_on, label_with=None, err_layer=None, save_dir=None, save_ext='.png', save_dpi=140, plt_kwargs={}, ax=None)
Plot trials grouped by observation columns.
Parameters:
-
group_on(list[str]) –Obs columns used to define groups.
-
label_with(list[str] | None, default:None) –obscolumns used to build legend labels. Defaults toNone. -
err_layer(str | None, default:None) –Optional layer name providing per-timepoint error. Defaults to
None. -
save_dir(str | None, default:None) –Optional output directory to save figures to. Defaults to
None. -
save_ext(str, default:'.png') –File extension used when saving images. Defaults to
'.png'. -
save_dpi(int, default:140) –DPI used when saving images. Defaults to
140. -
plt_kwargs(dict, default:{}) –Additional keyword arguments passed to
plot_set. Defaults to{}. -
ax(optional, default:None) –Axis to plot on. Defaults to
None.
Returns:
-
None–None
Source code in pyFiberPhotometry/core/PhotometeryData.py
plot_all(label_with=None, err_layer=None, plt_kwargs={}, ax=None)
Plot all trials.
Parameters:
-
label_with(list[str] | None, default:None) –obscolumns used to build legend labels. Defaults toNone. -
err_layer(str | None, default:None) –Optional layer name providing per-timepoint error. Defaults to
None. -
plt_kwargs(dict, default:{}) –Additional keyword arguments passed to
plot_set. Defaults to{}. -
ax(optional, default:None) –Axis to plot on. Defaults to
None.
Returns:
-
None–None