Loading: getting your data into PyHyperScattering#

PyHyperScattering organizes raw scattering images into xarray objects. Image reading is handled by subclasses of FileLoader. The key method defined in FileLoader.py is loadFileSeries which converts a folder of detector files into a single DataArray.

The simplified signature is:

def loadFileSeries(self, basepath, dims, coords={}, file_filter=None,
                   md_filter={}, quiet=True, output_qxy=False,
                   dest_qx=None, dest_qy=None, output_raw=False,
                   image_slice=None):

It walks a directory, loads each file with loadSingleImage and stacks frames along the requested dimensions. Metadata keys listed in md_filter must be present for a frame to be included. The returned DataArray always contains pix_x and pix_y axes together with any additional dimensions discovered from metadata or coords.

Once an array is created you can write it to disk using the fileio accessor defined in FileIO.py. This accessor provides convenience methods such as savePickle and saveNetCDF:

loaded = loader.loadFileSeries(my_path, dims=["energy"])
loaded.fileio.saveNetCDF("run.nc")

The same accessor can also export to NeXus or Zarr formats while taking care to sanitize attributes for serialization.

For curve fitting the package offers a fit accessor implemented in Fitting.py. The apply method stacks all dimensions except the chosen fit axis, applies a user supplied function with progress bars, and returns the results as another xarray object:

result = data.fit.apply(PyHyperScattering.Fitting.fit_lorentz_bg)

This design keeps reduction and analysis steps in the familiar xarray workflow while hiding repetitive boilerplate.