Source code for ess.isissans.visualization
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2024 Scipp contributors (https://github.com/scipp)
"""
Plotting functions for ISIS data.
"""
import warnings
from typing import Any
import scipp as sc
[docs]
def plot_flat_detector_xy(
da: sc.DataArray, pixels_per_tube: int = 512, **kwargs: Any
) -> Any:
"""
Plot a 2-D view of data from a single flat detector bank.
This is an alternative to the `scn.instrument_view` function, avoiding the 3-D
rendering of the instrument. The exact X and Y coordinates of the pixels are
used for the 2-D plot.
There are currently no checks that the data array is actually from a single
detector bank, or that it is flat. The caller is responsible for ensuring this.
Parameters
----------
da:
The data array to plot. Must have a 'position' coord and a single dimension.
pixels_per_tube:
The number of pixels per tube. Defaults to 512.
kwargs:
Additional arguments passed to `sc.plot`.
"""
if da.bins is not None:
da = da.hist()
da.coords['x'] = da.coords['position'].fields.x.copy()
da.coords['y'] = da.coords['position'].fields.y.copy()
folded = da.fold(da.dim, sizes={'y': -1, 'x': pixels_per_tube})
y = folded.coords['y']
if sc.all(y.min('x') == y.max('x')):
folded.coords['y'] = y.min('x')
else:
raise ValueError(
'Cannot plot 2-D instrument view of data array with non-constant '
'y coordinate along tubes. Use scippneutron.instrument_view instead.'
)
plot_kwargs = {'aspect': 'equal'}
plot_kwargs.update(kwargs)
with warnings.catch_warnings():
warnings.simplefilter("ignore", category=RuntimeWarning)
out = folded.plot(**plot_kwargs)
return out