Skip to main content

Orientation, rotation, quaternion, and crystal symmetry handling in Python.

Project description

Travis Coveralls pypi_version doi

orix is an open-source python library for analysing orientations and crystal symmetry.

The package defines objects and functions for the analysis of orientations represented as quaternions or 3D rotation vectors accounting for crystal symmetry. Functionality buils primarily on top of numpy and matplotlib and heavily inspired by the MATLAB package MTEX.

If analysis using orix forms a part of published work please cite the github repository.

orix (this version) is released under the GPL v3 license.

Getting started

The use of orix should feel familiar to the use of numpy, but rather than cells of numbers, the cells contain single 3d objects, such as vectors or quaternions. They can all be created using tuples, lists, numpy arrays, or other numpy-compatible iterables, and will raise an error if constructed with the incorrect number of dimensions. Basic examples are given below.

Vectors

Vectors are 3d objects representing positions or directions with “magnitude”. They can be added and subtracted with integers, floats, or other vectors (provided the data are of compatible shapes) and have several further unique operations.

>>> import numpy as np
>>> from orix.vector import Vector3d
>>> v = Vector3d((1, 1, -1))
>>> w_array = np.array([[[1, 0, 0], [0, 0, -1]], [[1, 1, 0], [-1, 0, -1]]])
>>> w = Vector3d(w_array)
>>> v + w
# Vector3d (2, 2)
# [[[ 2  1 -1]
#   [ 1  1 -2]]
#
#  [[ 2  2 -1]
#   [ 0  1 -2]]]
>>> v.dot(w)
# array([[1, 1],
#        [2, 0]])
>>> v.cross(w)
# Vector3d (2, 2)
# [[[ 0 -1 -1]
#   [-1  1  0]]
#
#  [[ 1 -1  0]
#   [-1  2  1]]]
>>> v.unit
# Vector3d (1,)
# [[ 0.5774  0.5774 -0.5774]]
>>> w[0]
# Vector3d (2,)
# [[ 1  0  0]
#   [ 0  0 -1]]
>>> w[:, 0]
# Vector3d (2,)
# [[1 0 0]
#  [1 1 0]]

Quaternions

Quaternions are four-dimensional data structures. Unit quaternions are often used for representing rotations in 3d. Quaternion multiplication is defined and can be applied to either other quaternions or vectors.

>>> from orix.quaternion.rotation import Rotation
>>> p = Rotation([0.5, 0.5, 0.5, 0.5])
>>> q = Rotation([0, 1, 0, 0])
>>> p.axis
# Vector3d (1,)
# [[0.5774 0.5774 0.5774]]
>>> p.angle
# array([2.0943951])
>>> p * q
# Rotation (1,)
# [[-0.5  0.5  0.5 -0.5]]
>>> p * ~p # (unit rotation)
# Rotation (1,)
# [[1. 0. 0. 0.]]
>>> p.to_euler() # (Euler angles in the Bunge convention)
# array([[1.57079633, 1.57079633, 0.        ]])

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

orix-0.1.1.tar.gz (47.3 kB view hashes)

Uploaded Source

Built Distribution

orix-0.1.1-py3-none-any.whl (63.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page