Scan Selection#

When creating an Hdf5Source, the selection parameter controls which scans are loaded from the HDF5 file. You can specify scans in several ways — from a simple number to flexible text-based expressions.

In all examples below, selection is the value passed as the second argument to Hdf5Source:

from daxs.sources import Hdf5Source

source = Hdf5Source(
    filename="data.h5",
    selection=selection, # see below
    data_mappings={"x": ".1/...", "signal": ".1/..."},
)

Specifying individual scans#

Pass a single scan number, or a list of scan numbers:

selection = 42          # load only scan 42
selection = [1, 5, 7]   # load scans 1, 5, and 7

You can also use a NumPy array of integers:

import numpy as np
selection = np.arange(1, 11)   # scans 1 through 10

Using a range#

To load a consecutive sequence of scans, write start-end:

selection = "1-50"   # loads scans 1, 2, 3, ..., 50

The range is inclusive on both ends. You can also take every n-th scan by appending :n:

selection = "1-50:2"   # every other scan: 1, 3, 5, ..., 49
selection = "1-50:3"   # every third scan: 1, 4, 7, ..., 49

Loading all scans#

Use the keyword "all" to load every scan present in the file:

selection = "all"

Selecting by scan title#

Each scan stored in the file has a short text label called a title (for example "ascan sy 0 1 100 1"). You can select scans by writing part of the title as the selection string:

selection = "ascan"       # all scans whose title contains "ascan"
selection = "loopscan"    # all scans whose title contains "loopscan"

The match is case-insensitive. To take every n-th match, append :n:

selection = "ascan:3"    # every third scan among those titled "ascan"

Excluding scans#

Add NOT followed by a title fragment or range to remove unwanted scans from the selection:

# All scans 1-100, but skip those titled "dark":
selection = "1-100 NOT dark"

# All "loopscan" scans except those also labeled "reference":
selection = "loopscan NOT reference"

Combining selections#

Use AND to add more scans to the current selection:

# Scans 1-20 together with scans 50-70:
selection = "1-20 AND 50-70"

# All "ascan" scans plus all "loopscan" scans:
selection = "ascan AND loopscan"

AND and NOT can be combined freely in a single expression:

selection = "1-200 NOT dark NOT reference"

Note

Exclusions always take priority. If a scan would be both included and excluded, it is excluded. The final list is always sorted in ascending order.

API reference#

See Hdf5Source, and in particular the selection parameter, for the full specification.