Skip to content

Topic/ebsdlib v3 updates#1615

Open
imikejackson wants to merge 8 commits into
BlueQuartzSoftware:developfrom
imikejackson:topic/ebsdlib_v3_updates
Open

Topic/ebsdlib v3 updates#1615
imikejackson wants to merge 8 commits into
BlueQuartzSoftware:developfrom
imikejackson:topic/ebsdlib_v3_updates

Conversation

@imikejackson
Copy link
Copy Markdown
Contributor

A collection of misc updates that goes along with EbsdLib 3.0 changes.

This will require a matching EbsdLib 3.0 release to correctly compile.

imikejackson and others added 8 commits May 6, 2026 13:36
Adds a "Color Key" ChoicesParameter to ComputeIPFColorsFilter and
ComputeFaceIPFColoringFilter so pipelines can select between the
three EbsdLib IPF coloring schemes per filter invocation:

  0 = TSL              (EDAX/OIM Analysis default -- preserved as default)
  1 = PUCM             (Patala perceptually-uniform color map)
  2 = Nolze-Hielscher  (MTEX HSV-style coloring)

The choice index is mapped to ebsdlib::ColorKeyKind in executeImpl and
threaded through the algorithm's InputValues struct + Impl-class
constructor to the generateIPFColor(... kind) call site. Each LaueOps
subclass already owns its own per-class TSL/PUCM/NH singletons
sized to its rotation point group / fundamental sector, so no
per-pixel allocation is added.

parametersVersion is bumped to 2 on both filters.

Also fixes WritePoleFigure.cpp's templated `createIntensityPoleFigures`
which previously called the 4-arg generateSphereCoordsFromEulers; the
new EbsdLib API requires an explicit HexConvention. Passing
config.hexConvention threads the existing PoleFigureConfiguration_t
field down to the LaueOps call.

Tests:
  - Existing TSL-regression tests stay green (default kind = TSL
    preserves byte-for-byte exemplar match).
  - New "ColorKey choice reaches algorithm" plumbing test per filter:
    runs the filter three times with k_ColorKey_Key = 0/1/2 into
    uniquely-named output arrays and asserts non-TSL kinds produce a
    different output than TSL. Catches any future off-by-one in the
    executeImpl switch without duplicating EbsdLib's per-Laue-class
    color correctness coverage.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pole-figure positions and corner labels for hex/trig phases differ by
a 30° rotation about the c-axis between the two Cartesian basis
conventions in EbsdLib (X||a vs X||a*). Pre-this-commit, the filter
silently used PoleFigureConfiguration_t's default (X||a*) -- pipelines
operating on EDAX/TSL/OIM Analysis data had no way to pick the convention
that matches their input stack.

Adds a "Hex/Trig Cartesian Basis Convention" ChoicesParameter:
  0 = X parallel to a (EDAX/TSL/OIM Analysis -- new default)
  1 = X parallel to a* (MTEX / Oxford / AZtec)

Default is X||a because every released DREAM.3D / DREAM3DNX / SIMPL /
SIMPLNX file stores hex/trig EulerAngles in this form by codebase
guarantee (see ebsdlib::HexConvention doc comment in EbsdLibConstants.h).
Cubic, tetragonal, orthorhombic, monoclinic, and triclinic phases ignore
the parameter -- existing all-cubic test fixtures are unaffected by the
default flip.

The choice index is mapped to ebsdlib::HexConvention in executeImpl
and threaded through WritePoleFigureInputValues to
PoleFigureConfiguration_t::hexConvention, which the EbsdLib generateSphereCoordsFromEulers
call already honors.

parametersVersion bumps to 2.

Tests:
  - New "HexConvention choice reaches algorithm" plumbing test: runs the
    filter twice on the cubic exemplar with k_HexConvention_Key = 0 and
    = 1, captures the intensity arrays, and asserts they're identical
    (cubic is convention-invariant). Catches parameter wiring failures
    without depending on hex/trig exemplar data.

Note: The 4 existing WritePoleFigureFilter-{Discrete,Color}[-Masked]
exemplar-pixel-compare tests fail with mismatches at byte index 972772
of the rendered image. Those failures predate this commit (verified by
stashing the filter changes; same 4 tests fail at the same byte). The
PoleFigure_Exemplars_v5.tar.gz baseline appears to have drifted from
the current EbsdLib pole figure rendering output -- regenerating the
exemplar as _v6 is the right fix and is out of scope here.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant