MTEX Changelog

MTEX 5.2.0 9/2019

Speed Improvements

Support for hexagonal EBSD grids

The function gridify now works also for EBSD data measured on a hexagonal grid. As a consequence denoising and GND computation for those data is also on the way.

Plastic Deformations

MTEX 5.2. introduces a bunch of new tensor classes to make modelling of plastic deformations more straight forward.

The relationships between those tensors are explained in the section plastic deformations.

Spherical Bingham Distribution

Nativ support for spherical Bingham distributions, including the abbility to fit them to directional distributions.

Tensor Visualisation

Improved methods for the vizualisation of ellastic properties, see Seismic demo

Improved Figure Layout

Misc Changes

ebsd{id}
grains{id}
scatter(v,'numbered') % plot vectors with numbers
scatter(v,'MarkerFaceColor','none') % plot vectors with colored empty marks

MTEX 5.1.0 04/2018

Dislocation systems

Starting with version 5.1 MTEX introduces a class representing dislocation systems. Dislocation systems may be lists of edge or screw dislocations and are either defined by its burgers and line vectors

cs = crystalSymmetry('432')
b = Miller(1,1,0,cs,'uvw')
l = Miller(1,-1,-2,cs,'uvw')
dS = dislocationSystem(b,l)

by a family of slipsystems

sS = slipSystem.fcc(cs)
dS = dislocationSystem(sS)

or as the family of predefined dominant dislocation systems by

dS = dislocationSystem.fcc(cs)

More information how to calculate with dislocation systems can be found here.

Geometrically neccesary dislocations

The newly introduced dislocation systems play an important role when computing geometrically neccesary dislocations from EBSD data. The workflow is illustrate the script GND_demo and consists of the following steps:

  1. define the dominant dislocation systems
  2. transform the dislocation systems into specimen coordinates for each pixel of the EBSD map
  3. compute the curvature tensor for each pixel in the EBSD map
  4. fit the dislocation systems to the curvature tensors.
  5. compute the total energy in each pixel

Tensor arithmetics

dyad, trace, det, mean, diag, eye, sym

Birefringence

MTEX 5.1 includes some basic methods to analyze and simulate optically isotropic materials. This includes the computation of the optical axis, birefringence and spectral transmission. The new features are demonstrated in BirefringenceDemo.

Color Keys

In MTEX 5.1 the color keys used for coloring EBSD have been a bit reorganised.

Spherical functions

Misc

MTEX 5.0.0 03/2018

Replace all executables by two mex files

In MTEX many functionalities are based on the non equispaced fast Fourier transform (NFFT). Until now this dependency was kept under the hood, or more precisely, hidden in external executable files which often caused troubles on MAC systems. Starting with MTEX 5.0. all the executables have been replaced by two mex files provided by the NFFT package. This change (hopefully) comes with the following advantages

Spherical functions

Many functions in MTEX compute directional dependent properties, e.g. pole figures, inverse pole figures, wave velocities, density distribution of misorientation axis or boundary normals. Until now those functions took as an input an of vector of directions and gave as an output a corresponding vector of function values, e.g. the command

pfi = calcPDF(odf,Miller(1,0,0,odf.CS),r)

returns for a list of specimen directions r the corresponding list of pole figure intensities pfi for the ODF odf. Starting with MTEX 5.0 it is possible to ommit the list of specimen directions r or replace it by an empty list []. In this case the command

pdf = calcPDF(odf,Miller(1,0,0,odf.CS))

returns a spherical function pdf also called pole density function. One can evaluate this spherical function using the command eval at the list of specimen directions r to obtain the pole figure intensities

pfi = pdf.eval(r)

However, there are many more operations that can be performed on spherical functions:

% compute with spherical functions as with ordinary numbers
pdf3 = 5 * pdf1 + 3 * pdf2
pdf = max(pdf,0) % repace of negative entries by 0
pdf = abs(pdf) % take the absolute value
sum(pdf) % the integral of the pole figure
sum(pdf.^2) % the integral of the pole figure squares - also called pole figure index
% plotting
plot(pdf)
plot3(pdf) % plot in 3d
% detect maximum value
[value,pos] = max(pdf)
% compute the eigen values and eigen vectors
[e,v] = eig(pdf)

For a complete list of functions read here.

Symmetry aware spherical functions

Since most of the directional dependent properties obey additional symmetry properties the class S2FunHarmonic has been extended to symmetry in the S2FunHarmonicSym class.

Multivariate spherical functions, vector fields and spherical axis fields

In some cases it is useful that a spherical function gives not only one value for a certain direction but several values. This is equivalent to have concatenate several univariate spherical function to one multivariate function. This can be accomplished by

S2Fmulti = [S2F1,S2F2,S2F3]

which gives a spherical function with 3 values per direction. More information how to work multivariate functions can be found here.

If we interpret the 3 values of S2Fmulti as , , and, coordinate of a 3 dimensional vector, the function S2Fmulti can essentially be seen as a spherical vector field associating to each direction a three dimensional vector. The most important example of such a vector field is the gradient of a spherical function:

g = S2F1.grad

The resulting variable g is of type S2VectorField. A complete list of functions available for vector fields can be found here.

Another example for vector fields are polarisation directions pp, ps1, ps2 as computed by

[vp,vs1,vs2,pp,ps1,ps2] = velocity(C)

The main difference is, that polarisation directions are antipodal, i.e. one can not distinguish between the polarisation direction d and -d. In MTEX we call vector fields with antipodal values are represented by variables of type AxisField.

Scalar tensor properties are returned as spherical functions

Any scalar or vectorial property of a tensor is not returned as a spherical function or spherical vector field. Examples are the velocity properties mentioned above, Youngs modulus, shear modulus, Poisson ration etc. In particular, plotting those directional dependend quantities is as simple as

plot(C.YoungsModulus)

This makes the old syntax

plot(C,'plotType','YoungsModulus')

obsolete. It is not supported anymore.

Crystal shapes

MTEX 5.0 introduces a new class crystalShape. This class allows to plot 3-dimensional representations of crystals on top of EBSD maps, pole figures and ODF sections. The syntax is as follows

% define the crystal symmetry
cs = loadCIF('quartz');
% define the faces of the crystal
m = Miller({1,0,-1,0},cs);  % hexagonal prism
r = Miller({1,0,-1,1},cs);  % positive rhomboedron, usally bigger then z
z = Miller({0,1,-1,1},cs);  % negative rhomboedron
s2 = Miller({1,1,-2,1},cs); % right tridiagonal bipyramid
x2 = Miller({5,1,-6,1},cs); % right positive Trapezohedron
N = [m,r,z,s2,x2];
% define the crystal shape
habitus = 1.2; % determines the overal shape
extension = [1,1.2,1]; % determines the extension of the crystal in x,y,z direction
cS = crystalShape(N,habitus,extension);
plot(cS)
plot(x,y,cS)
plot(grains,cS)
plot(ebsd,cS)
plotPDF(ori,ori*cS)

ODF component analysis

MTEX 5.0 allows for decomposing ODF into components using the command calcComponents. In its simplest form

[mods,weights] = calcComponents(odf)

returns a list of modal orientaions mods and a list of weights which sum up to one. A more advanced call is

[modes, weights,centerId] = calcComponents(odf,'seed',oriList)

which returns in centerId also for each orientation from oriList to which component it belongs.

Clustering of orientations

The ODF component analysis is used as the new default algorithm in calcCluster for orientations. The idea is to compute an ODF out of the orientations and call calcComponents with

[center,~,centerId] = calcComponents(odf,'seed',ori)

Then center are the clusters center and centerId gives for each orientation to which cluster it belongs. Substantional in this method is the choise of the kernel halfwidth used for ODF computation. This can be adjusted by

[c,center] = calcCluster(ori,'halfwidth',2.5*degree)

New tensor classes

With MTEX 5.0 we start introducing specific tensor classes. So far we included the following classes

more tensors are supposed to be included in the future. The central advantage is that tensor specific behaviour and functions can now better be implemented and documented, e.g., that the inverse of the compliance tensor is the stiffness tensor and vice versa. For user the important change is that e.g. the stiffness tensor is now defined by

C = stiffnessTensor(M,cs)

instead of the depreciated syntax

C = tensor(M,cs,'name','ellastic stiffness','unit','GPA')

Improved spherical plotting

In MTEX 4.X it was not possible to display the upper and lower hemisphere in pole figure plots, inverse pole figure plots or ODF section plots. This was a server restriction as for certain symmetries both hemispheres do not have to coincide. In MTEX 5.0 this restriction has been overcome. MTEX automatically detects whether the upper and lower hemisphere are symmetrically equivalent and decides whether both hemispheres needs to be plotted. As in the previous version of MTEX this can be controlled by the options upper, lower and complete.

As a consequence the behaviour of MTEX figures have changed slightly. By default MTEX now always plots into the last axis. In order to annotate orintations or directions to all axes in a figure use the new option add2all.

plotIPDF(SantaFe,[xvector,yvector+zvector])
[~,ori] = max(SantaFe)
plot(ori,'add2all')

We also introduced two new functions plotSection and quiverSection to visualize spherical functions restricted to a plane. As an exaple one can now plot the slowness surfaceses of wave velocities in the plane perpendicular to Y with

plotSection(1./vp,vector3d.Y)

see here for more information.

Other new functions

MTEX 4.5.2 11/2017

This is mainly a bug fix release

orientation relation ships

gT = GreningerTrojano(csAlpha,csGamma)
ori_childs = ori_parent * inv(gT.variants)
ori_parents = ori_child * gT.parents

MTEX 4.5.1 08/2017

This is mainly a bug fix release

MTEX 4.5 03/2017

3d orientation plots

MTEX 4.5 supports plotting of orientations, fibres, and ODFs in 3d in various projections like

Misorientations

orientation.Bain(cs)
orientation.KurdjumovSachs(cs)
orientation.NishiyamaWassermann(cs)
orientation.Pitch(cs)

Grain Reconstruction

New option to handle non convex other shapes of EBSD data sets

calcGrains(ebsd,'boundary','tight')

Tensors

New functions diag, trace,

EBSD

Rotating, flipping of EBSD data is now done with respect to the center of the map. Previously all these opertions where done relatively to the point (0,0). Use

rotate(ebsd,180*degree,'center',[0,0])

to get back the behavior of previous versions.

Colorbar

MTEXColorbar allows now to have a title next to it. Use

mtexColorbar('Title','this is a title')

Bug Fix This release contains several important bug fixes compare to MTEX 4.4.

MTEX 4.4 01/2017

Slip Systems

MTEX 4.4 introduces support for slip systems. Slip systems are defined by a plane normal and a slip direction

sSFCC = slipSystem(Miller(0,1,-1,cs,'uvw'),Miller(1,1,1,cs,'hkl'));

Slip systems are instrumental for computating the following properties

Fibres

MTEX 4.4 adds support for fibres in orientation space. As an example the alpha fibre in cubic materials can be defined in the following ways

cs = crystalSymmetry('m-3m')
f  = fibre.alpha(cs)
f = fibre(Miller(1,0,0,cs),vector3d.X)
ori1 = orientation('Miller',[0 0 1],[1 1 0],cs);
ori2 = orientation('Miller',[1 1 1],[1 1 0],cs);
f = fibre(ori1,ori2)
f = fibre.fit([ori1,ori2,mean(ori1,ori2)])

All commands that took a pair of directions to specify a fibre, e.g., fibreODF, fibreVolume, plotFibre have been rewritten to accept a fibre as a single input argument. I.e. a fibre ODF is now defined by

odf = fibreODF(fibre.alpha(cs))

Up to now the following functions are implemented for fibres

  oR = fundamentalRegion(cs,cs)
  f = fibre(oR.V(1),oR.V(2))
  plot(oR)
  hold on
  plot(fibre,'color','r','linewidth',2)
  hold off
angle(f,ori)

Ignore Symmetry

Many functions support now the flag noSymmetry. Among them are angle, axis, dot, cunion.

Clustering of orientations

The new command cluster allows to cluster a given set of orientations into a given number of clusters.

% generate orientation clustered around 5 centers
cs = crystalSymmetry('m-3m');
center = orientation.rand(5,cs);
odf = unimodalODF(center,'halfwidth',5*degree)
ori = odf.calcOrientations(3000);
% find the clusters and its centers
[c,centerRec] = cluster(ori,'numCluster',5);
% visualize result
oR = fundamentalRegion(cs);
plot(oR)
hold on
plot(ori.project2FundamentalRegion,c)
caxis([1,5])
plot(center.project2FundamentalRegion,'MarkerSize',10,'MarkerFaceColor','k','MarkerEdgeColor','k')
plot(centerRec.project2FundamentalRegion,'MarkerSize',10,'MarkerFaceColor','r','MarkerEdgeColor','k')
hold off

MTEX 4.3.2 07/2016

Alignment of Miller plots

You can now specify the alignment of the crystal a-axis or b-axis in Miller plots by

plota2north, plota2east, plota2south, plota2west
plotb2north, plotb2east, plotb2south, plotb2west

This might also be specify in mtex_settings.m mtex_settings.

MTEX 4.3 - 03/2016

Alignment of Miller plots

Starting with MTEX 4.3 plots with respect to the crystal coordinate system, i.e., inverse pole figure plots, misorientation axis plot, ipf keys, are always aligned such that the b-axis points towards east. This follows the convention given in the International Table of Crystallography. The alignment can be adjusted using the option xAxisAlignment

plot(Miller(1,0,0,cs),'xAxisAlignment',30*degree)

Plotting vector fields at grain centers or grain boundaries

There are three new commands

that allow visualizing directions for EBSD data, grains and at grain boundaries. The input argument dir should be a list of vector3d and may represent e.g. slip directions, polarization direction, etc.

EBSD data in raster format

Until MTEX 4.2 EBSD data have been always considered as a one-dimensional list of data, i.e., the often present structure of a regular grid was completely ignored. Starting with MTEX 4.3 EBSD data can be converted in a regular grid by

ebsd = ebsd.gridify

Missing data are represented as NaN in the regular representation. Gridified EBSD data may be addressed analogously like matrixes, i.e.,

ebsd(100,200)

will give pixel 100 in the y-direction and 200 in the x-direction. Analogously.

ebsd(50:100,:)

will give the stripe if pixels with y coordinate between 50 and 100.

Orientation gradients and GND

Gridified EBSD data allows also to compute orientation gradients by

ebsd.gradientX
ebsd.gradientY

as well as an estimate of the geometrically necessary dislocation density (GND) using the command calcGND

ebsd.calcGND

Auxilary new functionality

MTEX 4.2 - 11/2015

MTEX 4.2 introduces basic functionality for triple junction analysis in grain maps.

Triple points

Triple points are automatically computed during grain reconstruction and can be accessed by

grains.triplePoints
grains.boundary.triplePoints

More details on how to work with triple points can be found here.

large EBSD data sets

Analyzing large EBSD data sets may be quite annoying due to memory consumption and slow plotting. As a work around MTEX includes a new function reduce which allows reducing the data set to each n-th pixel, i.e.,

ebsd_small = reduce(ebsd,2)

contains only 25 percent of the data of the original data set. This functionality is assumed to be used for experimenting around with the data set and setting up a proper analysis script. The final analysis should, if possible, be done with the entire data set.

New option to ignore symmetry

When computing the angle between crystal directions, the misorientation angle between orientations and the misorientation axis symmetry can be ignored with the flag noSymmetry

angle(Miller(1,0,0,cs),Miller(0,1,0,cs),'noSymmetry')
angle(mori,'noSymmetry')
axis(mori,'noSymmetry')

Axis distributions in specimen coordinates

In order to plot axis distributions in specimen coordinates, you can now do

[ori1,ori2] = calcMisorientation(ebsd('phaseName'))
plotAxisDistribution(ori1,ori2,'contourf')

or

ori = ebsd(grains.boundary('indexed').ebsdId).orientations
plotAxisDistribution(ori(:,1),ori(:,2),'contourf')

New option to work around Matlab opengl bug

In mtex_settings.m mtex_settings there is a new option that may help to work around the Matlab opengl bug. Switching it of may give nicer graphics.

setMTEXpref('openglBug',true)

CSL misorientations

The function CSL requires now as a mandatory argument the crystal symmetry of the phase, i.e.

CSL(3,crystalSymmetry('m-3m'))

Grain boundaries

Grain boundaries segments have a new option midPoint which may be used for attaching a vector displaying the misorientation axis or some other direction.

More ODF sections

Along with the old syntax, there is now a new syntax that allows for more fine control of the ODF sections.

oS = phi2Sections(odf.CS,odf.SS)
oS.phi2 = [ 10*degree, 30*degree, 90*degree ];
plot(odf,oS)

Ordering of crystal symmetries

One can now check whether a crystal symmetry cs1 is a subgroup of crystal symmetry cs2 by

cs1 <= cs2

Further, the largest proper subgroup of some crystal symmetry cs is now accessible by

cs.properSubGroup

MTEX 4.1 - 09/2015

MTEX 4.1 introduces new possibilities to the analysis of misorientations. For the first time, it covers all geometric aspects of misorientations between arbitrary crystal symmetries. Furthermore, MTEX 4.1 introduces filters to smooth EBSD data.

Smoothing of EBSD Data

Smoothing of EBSD data might be necessary if the orientation data are corrupted by noise which influences the estimation of orientation dependent properties like KAM or GND. The general syntax for smoothing EBSD data is

ebsd = smooth(ebsd)

This applies the spline filter to the orientation data. Beside the spline filter, many other filters are available. A general discussion on this topic can be found here. To make use of a different than the dafault filter use the syntax

F = medianFilter
F.numNeighbours = 2 % this way options for the filter can be set
ebsd = smooth(ebsd,F)

The command smooth can also be used to fill not indexed measurement points. This behavior is enabled by the option fill

ebsd = smooth(ebsd,F,'fill')

Support for antipodal symmetry for misorientations

When working with boundary misorientations between the same phase one can not distinguish between a misorientation mori and its inverse |inv(mori). Starting with MTEX 4.1 this symmetry is supported for misorientations and misorientation distribution functions.

mori = inv(ori1) * ori2;
mori.antipodal = true;
mdf = calcMDF(odf1,odf2,'antipodal')

Antipodal symmetry effects the asymmetric region in orientation space as described below, as well as the distance between misorientations. Boundary misorientations between the same phase have set the flag antipodal by default.

Asymmetric regions in orientation space

MTEX 4.1 has now full support of asymmetric regions in orientation space. For any combination of crystal symmetries they can be defined by

oR = fundamentalRegion(cs1,cs2)

and visualized by

plot(oR)

One can check, whether an orientation is within the fundamental region by

oR.checkInside(ori)

similarly as for a sphericalRegion. The fundamental region with antipodal symmetry is defined by.

oR = fundamentalRegion(cs1,cs2,'antipodal')

For a fixed rotational angle omega, the intersection of the fundamental region with the sphere with radius omega gives the fundamental sector for the corresponding rotational axes. The axis sector can be computed by

sR = oR.axisSector(omega)

Axis and angle distributions

Thanks to the implementation of the asymmetric region plotAxisDistribution and plotAngleDistribution works in MTEX 4.1 for any combination of crystal symmetries.

The following syntax is obsolete

plotAxisDistribution(grains.boundary('phase1','phase2'))
plotAngleDistribution(grains.boundary('phase1','phase2'))
plotAngleDistribution(ebsd)

As replacement use the more verbose syntax

plotAxisDistribution(grains.boundary('phase1','phase2').misorientation)
plotAngleDistribution(grains.boundary('phase1','phase2').misorientation)
mori = calcMisorientation(ebsd('phase1'),ebsd('phase2'))
plotAngleDistribution(mori)
plotAxisDistribution(mori)

Rotational axis in specimen coordinates

It is now possible to compute the misorientation axis between two orientations in specimen coordinate system. This is done by

axis(ori1,ori2)

To do so with random misorientations from an EBSD data set do

[ori1,ori2] = calcMisorientation(ebsd('phase1'),ebsd('phase2'))
plot(axis(ori1,ori2))

Axis angle plots

(Mis)Orientation, ODFs, and MDFs can now be plotted in axis angles sections. Those plots respect the fundamental sector depending on the misorientation angle and for all combinations of crystal symmetries. The angle sections are scaled such that they represent the corresponding volume in orientation space. This can be switch off as described below

plotSection(mori,'axisAngle',55*degree)
plotSection(mdf,'axisAngle',(15:10:55)*degree)
plotSection(mdf,'axisAngle',(15:10:55)*degree,'volumeScaling',false)
plotSection(mdf,'axisAngle',(15:10:55)*degree,'antipodal')

Replace plotODF by a plotSection

In most cases, you can replace plotODF by a|plot|. Only for misorientations, the default plot is scattered.

More default settings for EBSD maps and pole figure plots

setMTEXpref('showMicronBar','off')
setMTEXpref('showCoordinates','off')
pfAnnotations = @(varargin) text([vector3d.X,vector3d.Y],{'RD','ND'},...
 'BackgroundColor','w','tag','axesLabels',varargin{:});
setMTEXpref('pfAnnotations',pfAnnotations);

Other improvements since MTEX 4.0.0

During the minor revisions of MTEX also several minor improvements have been added which are summarized below

hostGrain.checkInside(grainList)
plot(odf,pf.h,'superposition',pf.c)
[~,mP] = plot(ebsd)
mP.micronBar.visible = 'off'
plot(xvector,'label','RD','textAboveMarker')
a = axis(o1,o2)  % misorientation axis with respect to sample coordinate system
a = axis(inv(o2)*o1)  % misorientation axis with respect to crystal coordinate system
[x,y] = grains.boundary.intersect(xy1,xy2);
plotAngleDsitribution(mori,'percent')
plot(pf,'minmax')
ebsd_prof = ebsd.spatialProfile(ebsd,some_line)
h = Miller({1,0,0},{1,1,1},{2,3,4},CS,'uvw')
gB.segmentLength % length of the corresponding connected segment
gB.isTwinning(mori,threshold) % check boundary for twinning
cs.Aaxis
cs.AaxisRec

MTEX 4.0.0 - 10/2014

MTEX 4 is a complete rewrite of the internal class system which was required to keep MTEX compatible with upcoming Matlab releases. Note that MTEX 3.5 will not work on Matlab versions later than 2014a. As a positive side effect, the syntax has been made more consistent and powerful. On the bad side MTEX 3.5. code will need some adaption to run on MTEX 4. There are two general principles to consider

Use dot indexing instead of getting and setting methods

The syntax

h = get(m,'h')
m = set(m,'h',h+1)

is obsolete. set and get methods are not longer supported by any MTEX class. Instead use dot indexing

h = m.h
m.h = h + 1

Note, that this syntax can be nested, i.e., one can write

ebsd('Forsterite').orientations.angle

to get the rotational angle of all Forsterite orientations, or,

cs.axes(1).x

to get the x coordinate of the first crystallographic coordinate axis - the a-axis. As a nice bonus, you can now use TAB completion to cycle through all possible properties and methods of a class.

Use camelCaseCommands instead of under_score_commands

Formerly, MTEX used different naming conventions for functions. Starting with MTEX 4.0 all function names consisting of several words, have the first word spelled with lowercase letters and the consecutive words starting with a capital letter. Most notable changes are * plotPDF * plotIPDF * plotODF * calcError

Grain boundaries are now directly accessible

MTEX 4.0 introduces a new type of variables called grainBoundary which allows to represent arbitrary grain boundaries and to work with them as with grains. The following lines give some examples. Much more is possible.

% select boundary from specific grains
grains.boundary
% select boundary by phase transistion
gB = grains.boundary('Forstarite','Enstatite')
% select boundary by misorientation angle
gB(gB.misorientation.angle>100*degree)
% compute misorientation angle distribution for specific grain boundaries
plotAngleDistribution(gB)

Plotting EBSD, grain, grainBoundary data has different syntax

The syntax of the plot commands has made more consistent throughout MTEX. It is now

plot(obj,data)

where obj is the object to be plotted, i.e., EBSD data, grains, grain boundaries, spherical vectors, pole figures, etc., and the data are either pure numbers or RGB values describing the color. Examples are

% plot MAD values of EBSD data
plot(ebsd,ebsd.mad)
% colorize grains according to area
plot(grains,grains.area)
% colorize grain boundary according to misorientation angle
gB = grains.boundary('Forsterite','Enstatite')
plot(gB,gB.misorientation.angle)

Colorization according to phase or phase transition is the new default when calling plot without data argument, i.e., the following results in a phase plot

plot(ebsd)

In order to colorize ebsd data according to orientations, one has first to define an orientationMapping by

oM = ipdfHSVOrientationMapping(ebsd('Forsterite'))

Then one can use the command oM.orientation2color to compute RGB values for the orientations

plot(ebsd('Forsterite'),oM.orientation2color(ebsd('Forsterite').orientations))

The orientation mapping can be visualized by

plot(oM)

EBSD data are always spatially indexed

Starting with MTEX 4.0 EBSD data alway have to have x and y coordinates. EBSD data without spatial coordinates are imported simply as orientations. As a consequence, all orientation related functionalities of EBSD data have been moved to orientations, i.e., you can not do anymore

plotpdf(ebsd('Fo'),Miller(1,0,0,CS))
calcODF(ebsd('Fo'))
volume((ebsd('Fo'))

But instead you have to explicitely state that you operate on the orientations, i.e.

plotpdf(ebsd('Fo').orientations,Miller(1,0,0,ebsd('Fo').CS))
calcODF(ebsd('Fo').orientations)
volume((ebsd('Fo').orientations)

This makes it more easy to apply the same functions to misorientations to grain mean orientations grains.meanOrientation, ebsd misorientation to mean mean |ebsd.mis2mean or boundary misorientations grains.boundary.misorientation

Different syntax for reconstructing grains from EBSD data

In MTEX 3.5 the command

grains = calcGrains(ebsd)

duplicates the ebsd data into the grain variable allowing to access the EBSD data belonging to a specific grain by

get(grains(1),'EBSD')

In MTEX 4.0 the command calcGrains returns as an additional output the list of grainIds that is associated with the EBSD data. When storing these grainIds directly inside the EBSD data, i.e., by

[grains,ebsd.grainId] calcGrains(ebsd)

one can access the EBSD data belonging to a specific grain by the command

ebsd(grains(1))

MTEX 4.0 distinguishes between crystal and specimen symmetry

In MTEX 4.0 two new variable types specimenSymmetry and crystalSymmetry have been introduced to distinguish clearly between these two types of symmetry. Calling

cs = symmetry('m-3m')
ss = symmetry('triclinic')

is not allowed anymore! Please use instead

cs = crystalSymmetry('m-3m','mineral','phaseName')
ss = specimenSymmetry('triclinic')

Pole figure indexing is now analogously to EBSD data

You can now index pole figure data by conditions in the same manner as EBSD data. E.g. the condition

condition = pf.r.theta < 80 * degree

is an index to all pole figure data with a polar angle smaller than 80 degree. To restrict the pole figure variable pf to the data write

pf_restrcited = pf(condition)

In the same manner, we can also remove all negative intensities

condition = pf.intensities < 0
pf(condition) = []

In order to address individuell pole figures within a array of pole figures pf use the syntax

pf('111')

or

pf(Miller(1,1,1,cs))

The old syntax

pf(1)

for accessing the first pole figure will not work anymore as it now refers to the first pole figure measurement. The direct replacement for the above command is

pf({1})

MTEX 4.0 supports all 32 point groups

In MTEX 4.0 it is for the first time possible to calculate with reflections and inversions. As a consequence, all 32 point groups are supported. This is particularly important when working with piezoelectric tensors and symmetries like 4mm. Moreover, MTEX distinguishes between the point groups 112, 121, 112 up to -3m1 and -31m.

Care should be taken, when using non-Laue groups for pole figure or EBSD data.

Support for three-digit notation for Miller indices of trigonal symmetries

MTEX 4.0 understands now uvw and UVTW notation for trigonal symmetries. The following two commands define the same crystallographic direction, namely the a1-axis

Miller(1,0,0,crystalSymmetry('-3m'),'uvw')
Miller(2,-1,-1,0,crystalSymmetry('-3m'),'UVTW')

Improved graphics

MTEX can now display colorbars next to pole figure, tensor or ODF plots and offers much more powerfull options to customize the plots with titles, legends, etc.

Functionality that has been (temporarily) removed

This can be seen as a todo list.

MTEX 3.5.0 - 12/2013

Misorientation colorcoding

plotBoundary(grains('Fo'),'property','misorientation','colorcoding','patala')

Fast multiscale clustering (FMC) method for grain reconstruction

grains = calcGrains(ebsd,'FMC')

Misc changes

get(grains,'id')
poly = [ [x1,y1];[x2,y2];[xn,yn];[x1,y1] ]
grains = calcGrains(ebsd,'boundary',poly)
poly = selectPolygon

Bug fixes

MTEX 3.4.2 - 06/2013

bugfix release

MTEX 3.4.1 - 04/2013

bugfix release

MTEX 3.4.0 - 03/2013

New plotting engine

MTEX 3.4 features a completely rewritten plotting engine. New features include

plotzOutOfPlane, plotzIntoPlane
ax = subplot(2,2,1)
plot(ax,xvector)
plotpdf(ebsd,Miller(1,0,0),'contourf')

Colormap handling

mtexColorMap red2blue

ODF

[modes, values] = calcModes(odf,n)

EBSD data

% convert spatial coordinates to Euler angle coordinate system
loadEBSD('filename','convertSpatial2EulerReferenceFrame')
% convert Euler angles to spatial coordinate system
loadEBSD('filename','convertEuler2SpatialReferenceFrame')
CS = symmetry('cubic','mineral','Mg','color','red')
inpolygon(ebsd,[xmin ymin xmax ymax])

Tensors

R = SchmidTensor(m,n)
[tauMax,mActive,nActive,tau,ind] = calcShearStress(stressTensor,m,n,'symmetrise')
% extract entry 1,1,1,1 in tensor notation
C{1,1,1,1}
% extract entry 1,1 in Voigt notation
C{1,1}
% extract the first tensor
C(1)

Import / Export

export(ori,'fname')
v = loadVector3d('fname','ColumnNames',{'x','y','z'})
v = loadVector3d('fname','ColumnNames',{'latitude','longitude'})

General

setpref('mtex','propertyName','propertyValue')

has been replaced by

setMTEXpref('propertyName','propertyValue')

MTEX 3.3.2 - 01/2013

bugfix release

MTEX 3.3.1 - 07/2012

bugfix release

MTEX 3.3.0 - 06/2012

Grains: change of internal representation

Reimplementation of the whole grain part:

get(grains,'EBSD')

EBSD

The behavior of the 'ignorePhase' changed. Now it is called in general 'not indexed' and the not indexed data is imported generally. If the crystal symmetry of an EBSD phase is set to a string value, it will be treated as not indexed. e.g. mark the first phase as 'not indexed'

CS = {'not indexed',...
      symmetry('cubic','mineral','Fe'),...
      symmetry('cubic','mineral','Mg')};

By default, calcGrains does also use the 'not Indexed' phase.

Other

MTEX 3.2.3 - 03/2012

bugfix release

MTEX 3.2.1 - 11/2011

New Features

Bug Fixes

MTEX 3.2 - 05/2011

3d EBSD Analysis

This release for the first time supports 3d EBSD data. In particular, MTEX is now able to

Misorientation Analysis

New Syntax for EBSD and grain variables

EBSD and grain variables can now be indexed by phase, region or grain / ebsd variables. Let us assume we have a two phase ebsd variable containing 'Fe' and 'Mg' then can restrict our dataset to the Fe - phase only by writing

ebsd('Fe')

The same works with grains and also with more than one phase. Please have a look into the documentation for information how to index ebsd and grain variables.

Accordingly the following syntax is now depreciated.

calcODF(ebsd,'phase',2)

It should be replaced by

calcODF(ebsd('Fe'))

Other Enhangments

MTEX 3.1 - 03/2011

Tensor Arithmetics This release introduces tensor analysis into MTEX, this includes

Other Enhancements

MTEX 3.0 - 10/2010

Crystal Geometry

This release contains a completely redesigned crystal geometry engine which is thought to be much more intuitive and flexible. In particular, it introduces two new classes rotation and orientation which make it much easier to work with crystal orientations. Resulting features are

Other Enhancements

MTEX 2.0 - 10/2009

Grain Analysis for EBSD Data

MTEX is now able to partition spatial EBSD data into grains. This allows for the computation of various grain characteristics, as well as the computation and visualization of the grain boundaries and neighborhood relationships. Main features are:

Visualization Improvements

General Improvements

Incompatible Changes to Previous Versions

MTEX 1.2 - 05/2009

Improved EBSD import

Improved EBSD plotting

General Improvements

Incompatible Changes to Previous Versions

MTEX 1.1 - 12/2008

Improved Import Wizzard

Improved Pole Figure Analysis

Improved EBSD Data Support

Improved Plotting

Bug Fixes

MTEX 1.0 - 06/2008

New Installer Including Binaries for Windows, Linux, and Max OSX

New ODF Class

New Interfaces

Improved Plotting

Incompatible Changes With Previous Releases

Improved Documentation

MTEX comes now with over 500 help pages explaining the mathematical concepts, the philosophy behind MTEX and the syntax and usage of all 300 functions available in MTEX. Furthermore, you find numerous examples and tutorials on ODF estimation, data import, calculation of texture characteristics, ODF and pole figure plotting, etc.

Bug Fixes

MTEX 0.4 - 04/2008

Speed Improvements

New Support of EBSD Data Analysis

New Functions

Incompatible Changes With Previous Releases

MTEX 0.3 - 10/2007

MTEX 0.2 - 07/2007

MTEX 0.1 - 03/2007