-
Notifications
You must be signed in to change notification settings - Fork 12
Description
Hi @drowenhorst-nrl!
We just released kikuchipy v0.9.0 compatible with PyEBSDIndex v0.2.0. So far, the new particle swarm optimization works like a charm.
This is more of a question than an issue. It relates to how users of PyEBSDIndex should find suitable reflector lists for indexing. My suggestion is to use the diffsims and orix libraries, specifically the ReciprocalLatticeVector class, which needs a Phase instance. At least for the moment.
So, I've tested multi-phase indexing with three phases in the list:
- Aluminium (Laue class m-3m, blue)
- Alpha-Al(Fe,Mn)Si (m-3, green)
- Pi-Al8FeMg3Si6 (-6m2, purple)
It also works like a charm!
But, only after I specified my own reflector lists or polefamilies. I found the following reflectors to correctly differentiate between the phases above and provide plausible indexing:
- Aluminium: the default ones, {111}, {200}, {220}, {311}
- Pi-Al8FeMg3Si6: {2-12}, {004}, {002}, {4-20}, {2-20}, {200}
- Alpha-Al(Fe,Mn)Si: {600}, {523}, {530}, {835}, {10 0 0}
These reflectors were found automatically using ReciprocalLatticeVector. I've found the approach quite robust and to give results comparable to EMsoft's building of reflector lists (which makes sense since it is based on that implementation). The procedure is simple:
- Get all reflectors with a minimum interplanar spacing d
- Exclude kinematically forbidden reflectors (not implemented for hexagonal yet)
- Exclude reflectors with a kinematical structure factor lower than a certain fraction of the maximum structure factor
Minimal syntax (CIF file: pi_al8femg3si6.cif.txt):
from diffsims.crystallography import ReciprocalLatticeVector
from orix.crystal_map import Phase
phase = Phase.from_cif("pi_al8femg3si6.cif")
ref = ReciprocalLatticeVector.from_min_dspacing(phase, 1)
ref.calculate_structure_factor() # Parametrizations from Lobato and van Dyck (2014) or International Tables for Crystallography
F = abs(ref.structure_factor)
ref2 = ref[F > 0.48 * F.max()]Do you have any thoughts on how users should find suitable reflector lists? Do you think linking to a relevant tutorial in kikuchipy's docs (say, this one) would be a good temporary solution until something is included in PyEBSDIndex itself?
