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)