Package org.jmol.util

Class Tensor


  • public class Tensor
    extends Object
    Author:
    Bob Hanson hansonr@stolaf.edu 6/30/2013, Simone Sturniolo
    • Field Detail

      • ADP_FACTOR

        private static final float ADP_FACTOR
      • MAGNETIC_SUSCEPTIBILITY_FACTOR

        private static final float MAGNETIC_SUSCEPTIBILITY_FACTOR
        See Also:
        Constant Field Values
      • CHEMICAL_SHIFT_ANISOTROPY_FACTOR

        private static final float CHEMICAL_SHIFT_ANISOTROPY_FACTOR
        See Also:
        Constant Field Values
      • iType

        public int iType
      • asymMatrix

        public double[][] asymMatrix
      • symMatrix

        public double[][] symMatrix
      • eigenVectors

        public javajs.util.V3[] eigenVectors
      • eigenValues

        public float[] eigenValues
      • parBorU

        public float[] parBorU
      • altType

        public String altType
      • isIsotropic

        public boolean isIsotropic
      • forThermalEllipsoid

        public boolean forThermalEllipsoid
      • eigenSignMask

        public int eigenSignMask
      • typeFactor

        private float typeFactor
      • sortIso

        private boolean sortIso
      • modelIndex

        public int modelIndex
      • atomIndex1

        public int atomIndex1
      • atomIndex2

        public int atomIndex2
      • isModulated

        public boolean isModulated
      • isUnmodulated

        public boolean isUnmodulated
    • Constructor Detail

      • Tensor

        public Tensor()
        Although this constructor is public, to be a valid tensor, one must invoke one of the "setFrom" methods. These had been static, but it turns out when that is the case, then JavaScript versions cannot be modularized to omit this class along with Eigen. So the general full constructor would look something like: new Tensor().setFrom...(....)
    • Method Detail

      • getType

        private static int getType​(String type)
      • getInfoIndex

        private static int getInfoIndex​(String infoType)
      • isFloatInfo

        public static boolean isFloatInfo​(String infoType)
      • getInfo

        public Object getInfo​(String infoType)
        returns an object of the specified type, including "eigenvalues", "eigenvectors", "asymmetric", "symmetric", "trace", "indices", and "type"
        Parameters:
        infoType -
        Returns:
        Object or null
      • isotropy

        public float isotropy()
        isotropy = average of eigenvalues
        Returns:
        isotropy
      • span

        public float span()
        width of the signal; |e2 - e0|
        Returns:
        unitless; ≥ 0
      • skew

        public float skew()
        a measure of asymmetry.
        Returns:
        range [-1, 1]
      • anisotropy

        public float anisotropy()
        anisotropy = directed distance from (center of two closest) to (the furthest)
        Returns:
        unitless number
      • reducedAnisotropy

        public float reducedAnisotropy()
        reduced anisotropy = largest difference from isotropy (may be negative)
        Returns:
        unitless number
      • asymmetry

        public float asymmetry()
        asymmetry = deviation from a symmetric tensor
        Returns:
        range [0,1]
      • copyTensor

        public Tensor copyTensor()
      • setFromAsymmetricTensor

        public Tensor setFromAsymmetricTensor​(double[][] asymmetricTensor,
                                              String type,
                                              String id)
        Standard constructor for QM tensors
        Parameters:
        asymmetricTensor -
        type -
        id -
        Returns:
        this
      • setFromEigenVectors

        public Tensor setFromEigenVectors​(javajs.util.T3[] eigenVectors,
                                          float[] eigenValues,
                                          String type,
                                          String id,
                                          Tensor t)
        Standard constructor for charge and iso.
        Parameters:
        eigenVectors -
        eigenValues -
        type -
        id -
        t -
        Returns:
        this
      • setFromAxes

        public Tensor setFromAxes​(javajs.util.V3[] axes)
        Standard constructor for ellipsoids based on axes
        Parameters:
        axes -
        Returns:
        Tensor
      • setFromThermalEquation

        public Tensor setFromThermalEquation​(double[] coefs,
                                             String id)
        standard constructor for thermal ellipsoids convention beta (see http://www.iucr.org/iucr-top/comm/cnom/adp/finrepone/finrepone.html)
        Parameters:
        coefs -
        id -
        Returns:
        this
      • setType

        public Tensor setType​(String type)
        Note that type may be null here to skip type initialization and allow later setting of type; this should be used with care.
        Parameters:
        type -
        Returns:
        "this" for convenience only
      • getFactoredValue

        public float getFactoredValue​(int i)
        Returns a factored eigenvalue; thermal ellipsoids use sqrt(abs(eigenvalue)) for ellipsoid axes; others use just use abs(eigenvalue); all cases get factored by typeFactor
        Parameters:
        i -
        Returns:
        factored eigenvalue
      • setAtomIndexes

        public void setAtomIndexes​(int index1,
                                   int index2)
      • isSelected

        public boolean isSelected​(javajs.util.BS bsSelected,
                                  int iAtom)
      • newTensorType

        private void newTensorType​(javajs.util.V3[] vectors,
                                   float[] values,
                                   String type,
                                   String id)
        common processing of eigenvectors.
        Parameters:
        vectors -
        values -
        type -
        id -
      • processType

        private void processType()
        Sets typeFactor, altType, isIsotropic, forThermalEllipsoid; type "iso" changed to "" here.
      • sortAndNormalize

        private void sortAndNormalize()
        The expression: |sigma_3 - sigma_iso| ≥ |sigma_1 - sigma_iso| ≥ |sigma_2 - sigma_iso| simply sorts the values from largest to smallest or smallest to largest, depending upon the direction of the asymmetry, always setting the last value to be the farthest from the mean. We use a simpler form here: |sigma_3 - sigma_1| ≥ |sigma_3 - sigma_2| ≥ |sigma_2 - sigma_1| which amounts to the same thing and is prettier. (Think about it!)
      • isEquiv

        public boolean isEquiv​(Tensor t)