GrainData Class

The GrainData class loads the grain data output files, either grains.out or grains.npz. The intent of the class is to simplify post-processing by making it easy to load and save the grain data files and providing commonly used data attributes.

Loading and Saving

You can load the newer grains.npz file using the load method, or you can load the grains.out file directly using the from_grains_out method. For example:

from hexrd.fitgrains import GrainData

# Load an npz file.
gd = GrainData.load("graindata.npz")

# Or load the standard `grains.out` file.
gd = GrainData.from_grains_out("grains.out")

You can also write a new .npz file or a .out file.

gd.save("new-grains.npz")
gd.write_grains_out("new-grains.out")

Working With Grain Data

After loading data you have access to the following attributes. Notice that the shape of orientation arrays (expmap, rotation_matrices, quaterions) is different from core hexrd and more pythonic in that each orientation occupies a contiguous section of memory.

num_grains

the number of grains

id

array(num_grains), grain ID in original output file

completeness

array(num_grains), completeness value for each grain

chisq

array(num_grains), goodness of fit values

expmap

array(num_grains, 3), exponential map parameters for orientations

centroid

array(num_grains), 3, grain centroid values

inv_Vs

array(num_grains, 6), inverse of symmetric left stretch tensor

ln_Vs

array(num_grains, 6), matrix logarithm of symmetric left stretch tensor

rotation_matrices

array(num_grains, 3), rotation matrices for orientations

quaternions

array(num_grains, 4), unit quaternions for orientations

strain

array(num_grains, 6), convenience function for ln_Vs

You are also able to select a subset of grains based on completeness or goodness of fit using the select() method. It returns a new GrainData instance with all arrays filtered by the selected IDs. Note that the new id attribute shows the original IDs and will no longer be contiguous. Here is an example of usage:

# Select grains at 80% completeness or better.
gd_new = gd.select(min_completeness=0.8)

# Select grains with chi-squared at most 0.5.
gd_new = gd.select(max_chisq=0.5)

# Or both.
gd_new = gd.select(min_completeness=0.8, max_chisq=0.5)