Skip to content

Suitable reflector lists #50

@hakonanes

Description

@hakonanes

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)

pats_all_cal_ref2

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:

  1. Get all reflectors with a minimum interplanar spacing d
  2. Exclude kinematically forbidden reflectors (not implemented for hexagonal yet)
  3. 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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions