Updates to EBSD dictionary indexing and refinement in this PR allow for a navigation mask to be passed to those methods to only index or refine the patterns/orientations/projection centers (PCs) of interest.
The masking depends on the orix crystal map's is_in_data attribute array, which keeps track of points which are in the data. Whenever a crystal map is returned, the masked out points are entered as False in this array. If a crystal map with some points not in the data is passed to the refinement methods, only the points in the data are refined.
This functionality enables hybrid indexing (as sought by @IMBalENce in https://github.com/pyxem/kikuchipy/issues/458#issuecomment-953407008), in which only bad points from Hough indexing can easily be singled out and dictionary indexed using a boolean mask. To merge the good Hough indexed points and the dictionary indexed points, both need to be refined in order to obtain smooth misorientations and get the same score so these can be compared when merging.
The function for merging single phase crystal maps also allows navigation mask(s).
A tutorial showing this workflow on a small dataset of very noisy recrystallized Ni patterns is part of this PR.
Other changes:
Navigation shape of patterns are flattened internally in order to allow navigation masking. This led to a slight speed-up in both dictionary indexing and refinement in most cases in the documentation.
Number of objective function evaluations per pattern are returned from refinement methods. This information can be useful when optimizing refinement methods further.
Navigation masks allow a route for refining multi phase maps in that one can get a single phase view of the multi phase map and refine only this, do this for all phase and subsequently merge. This workflow is basically what is sought in #411. Closes #411.
Navigation masks is the only improvement listed in #422 which I consider necessary. Closes #422.
I anticipate that these changes are the final ones before releasing version 0.8.
Description of the change
Updates to EBSD dictionary indexing and refinement in this PR allow for a navigation mask to be passed to those methods to only index or refine the patterns/orientations/projection centers (PCs) of interest.
The masking depends on the orix crystal map's
is_in_data
attribute array, which keeps track of points which are in the data. Whenever a crystal map is returned, the masked out points are entered asFalse
in this array. If a crystal map with some points not in the data is passed to the refinement methods, only the points in the data are refined.This functionality enables hybrid indexing (as sought by @IMBalENce in https://github.com/pyxem/kikuchipy/issues/458#issuecomment-953407008), in which only bad points from Hough indexing can easily be singled out and dictionary indexed using a boolean mask. To merge the good Hough indexed points and the dictionary indexed points, both need to be refined in order to obtain smooth misorientations and get the same score so these can be compared when merging.
The function for merging single phase crystal maps also allows navigation mask(s).
A tutorial showing this workflow on a small dataset of very noisy recrystallized Ni patterns is part of this PR.
Other changes:
Navigation masks allow a route for refining multi phase maps in that one can get a single phase view of the multi phase map and refine only this, do this for all phase and subsequently merge. This workflow is basically what is sought in #411. Closes #411.
Navigation masks is the only improvement listed in #422 which I consider necessary. Closes #422.
I anticipate that these changes are the final ones before releasing version 0.8.
Progress of the PR
Minimal example of the bug fix or new feature
See hybrid indexing tutorial in this PR: https://kikuchipy--593.org.readthedocs.build/en/593/tutorials/hybrid_indexing.html.
For reviewers
__init__.py
.CHANGELOG.rst
.release.py
,.zenodo.json
and.all-contributorsrc
with the table regenerated.