Using ROI’s#

xrd-image-util also provides ROI’s to retrieve information from subsections of a 3D dataset. Currently, the only ROI class available is xiu.roi.RectROI. The general workflow for an ROI goes as follows:

  1. Creating the ROI

  2. Setting coordinate bounds for the ROI

  3. Setting the output calculations for the ROI

  4. Applying the ROI to a 3D dataset

  5. Retreiving the output data and coordinates

A useful characteristic of xrd-image-util’s ROI’s is that they are data-independent, meaning that you can apply the same ROI to a series of 3D images. Here is a simple example of creating a rectangular ROI, applying it to a set of Scan objects, and storing the output:

# Getting a list of scans to analyze
catalog = xiu.Catalog("test-catalog")
scans = catalog.get_scans([68, 69, 70])

# Instantiating the rectangular ROI
roi = xiu.roi.RectROI()

# Bounding the region
roi.set_bounds(
    bounds={
        "H": (-1, -0.9),
        "K": (None, None),
        "L": [3.4, 3.45]
    }
)

# Setting the output value
# In this example, the data is being averaged across all 'K' values.
# The output arrays will be 2D with axis labels 'H' and 'L'.
roi.set_calculation(output="average", dims=["K"])

scan_data = []
for scan in scans:

    # Gridding scan image data
    scan.grid_data((50, 50, 50))

    # Applying ROI to scan
    roi.apply_to_scan(scan=scan, data_type="gridded")

    # Adding output to list
    scan_data.append(roi.get_output())

print([s["data"].shape for s in scan_data])
# Output: [(21, 21), (21, 21), (21, 21)]