12.35. Merge Twins
Group (Subgroup)
Reconstruction (Grouping)
Description
This Filter groups neighboring Features (grains) that share a twin relationship into a single parent grain. Twins are sub-grains of a parent grain that share a highly specific crystallographic relationship, and for many downstream analyses – morphology, size distributions, neighbor statistics – it is useful to treat a grain and its twin variants as one entity rather than as separate grains.
Only the FCC Σ3 twin relationship is detected by this filter.
What is a Twin?
A twin is a region within a grain whose crystal lattice is a mirror image of the surrounding parent grain across a specific plane, called the twin plane. Mechanically, the twinned region is still part of the same grain structure; crystallographically, it has a different – but highly specific – orientation.
The most common twin in FCC metals (copper, nickel, aluminum, austenitic stainless steels, superalloys such as IN100 and Inconel) is the Σ3 twin. Two grains are in a Σ3 twin relationship when they are related by a 60° rotation about the <111> crystal direction. This is often called an annealing twin because it frequently forms during recrystallization.
The “Σ3” notation comes from Coincidence Site Lattice (CSL) theory: Σ is the reciprocal density of lattice sites shared between the two crystals, and Σ3 means 1 out of every 3 atomic sites line up exactly across the boundary.
Why Merge Twins?
After segmentation (for example with the Segment Features (Misorientation) filter), each twin variant is identified as its own separate Feature because it has a distinct average orientation from its parent. This is correct from a pure orientation standpoint, but can mislead morphological and statistical analyses:
A grain with three twin bands will be counted as four separate grains, inflating the apparent grain count.
Grain-size distributions will be skewed smaller because twin variants are smaller than the parent.
Neighbor statistics will count twin-to-parent boundaries as regular grain boundaries.
Merging twin variants back into a single parent grain produces a post-twin grain structure that more closely reflects what a metallurgist would call a “grain” under an optical microscope, and is usually the correct input for morphological statistics.
How This Filter Works
The filter uses a burn-style grouping algorithm operating on the Feature level (not the Cell level):
A Feature that has not yet been assigned a parent is selected as the starting point and given a new Parent Id.
For each of its contiguous neighbors (provided by the input Contiguous Neighbor List), the filter computes the misorientation between the two features using their average quaternions.
If the misorientation axis is within the Axis Tolerance of
<111>and the misorientation angle is within the Angle Tolerance of 60°, the neighbor is in a Σ3 twin relationship with the current feature and is assigned the same Parent Id.The grouping then extends recursively through the newly added neighbor’s own neighbors, so that a chain of twins-of-twins is absorbed into one parent.
When no more features can be added to the current parent group, a new unassigned feature is picked and the process repeats until every eligible feature has a Parent Id.
Parameter Guidance
Axis Tolerance (degrees): How far the misorientation rotation axis can deviate from the ideal
<111>direction and still be accepted as a twin. Default is 3°. Typical values range from 1° to 5°. Tighter tolerance = fewer false positives but may miss slightly distorted real twins.Angle Tolerance (degrees): How far the misorientation rotation angle can deviate from the ideal 60° and still be accepted as a twin. Default is 2°. Typical values range from 1° to 3°.
Both tolerances are in degrees. A tolerance of 3°/2° accepts a neighbor as a twin if its misorientation falls within roughly 58°-62° about an axis within 3° of <111>.
Required Input Sources
This filter requires that several prior operations have already been run:
Cell Feature Ids – produced by a segmentation filter (e.g., Segment Features (Misorientation)).
Contiguous Neighbor List – produced by Compute Feature Neighbors.
Feature Phases – produced by Compute Feature Phases.
Average Quaternions – produced by Compute Average Orientations.
Crystal Structures – the ensemble-level array describing each phase’s Laue class.
Limitations
Cubic-High (m3m) only. The filter only evaluates twin relationships for phases with the m3m Laue class (FCC and BCC cubic materials). Phases with other symmetries are skipped with a warning; their features remain ungrouped. Only FCC materials actually exhibit Σ3 annealing twins in practice.
Σ3 only. Other CSL boundaries (Σ5, Σ7, Σ9, etc.) are not detected.
Requires well-computed average orientations. The twin detection is only as accurate as the input Average Quaternions. If twin variants were segmented together with the parent (too-loose segmentation tolerance), the average orientation will be wrong and this filter will not reliably detect twins.
Random Number Seed Parameters
Parameter Name |
Parameter Type |
Parameter Notes |
Description |
|---|---|---|---|
Use Seed for Random Generation |
Bool |
When true the user will be able to put in a seed for random generation |
|
Seed Value |
Scalar Value |
UInt64 |
The seed fed into the random generator |
Stored Seed Value Array Name |
DataObjectName |
Name of array holding the seed value |
Input Parameter(s)
Parameter Name |
Parameter Type |
Parameter Notes |
Description |
|---|---|---|---|
Axis Tolerance (Degrees) |
Scalar Value |
Float32 |
Tolerance allowed when comparing the axis part of the axis-angle representation of the misorientation |
Angle Tolerance (Degrees) |
Scalar Value |
Float32 |
Tolerance allowed when comparing the angle part of the axis-angle representation of the misorientation |
Input Cell Data
Parameter Name |
Parameter Type |
Parameter Notes |
Description |
|---|---|---|---|
Cell Feature Ids |
Array Selection |
Allowed Types: int32 Comp. Shape: 1 |
Specifies to which feature each cell belongs. |
Input Feature Data
Parameter Name |
Parameter Type |
Parameter Notes |
Description |
|---|---|---|---|
Contiguous Neighbor List |
NeighborListSelection |
List of contiguous neighbors for each Feature. |
|
Phases |
Array Selection |
Allowed Types: int32 Comp. Shape: 1 |
Specifies to which Ensemble each cell belongs |
Average Quaternions |
Array Selection |
Allowed Types: float32 Comp. Shape: 4 |
Specifies the average orientation of each Feature in quaternion representation |
Input Ensemble Data
Parameter Name |
Parameter Type |
Parameter Notes |
Description |
|---|---|---|---|
Crystal Structures |
Array Selection |
Allowed Types: uint32 Comp. Shape: 1 |
Enumeration representing the crystal structure for each Ensemble |
Output Element Data
Parameter Name |
Parameter Type |
Parameter Notes |
Description |
|---|---|---|---|
Parent Ids |
DataObjectName |
The name of the array specifying to which parent each cell belongs |
|
Randomize Parent Ids |
Bool |
Specifies if parent IDs should be randomized during calculations |
Output Feature Data
Parameter Name |
Parameter Type |
Parameter Notes |
Description |
|---|---|---|---|
Feature Attribute Matrix |
DataObjectName |
The name of the created cell feature attribute matrix |
|
Parent Ids |
DataObjectName |
The name of the array specifying to which parent each Feature belongs |
|
Active |
DataObjectName |
The name of the array specifying if the Feature is still in the sample (true if the Feature is in the sample and false if it is not). At the end of the Filter, all Features will be Active |
Example Pipelines
(02) Small IN100 Full Reconstruction
License & Copyright
Please see the description file distributed with this Plugin
DREAM3D-NX Help
If you need help, need to file a bug report or want to request a new feature, please head over to the DREAM3DNX-Issues GitHub site where the community of DREAM3D-NX users can help answer your questions.