Package org.jmol.util
Class Tensor
- java.lang.Object
-
- org.jmol.util.Tensor
-
public class Tensor extends java.lang.Object- Author:
- Bob Hanson hansonr@stolaf.edu 6/30/2013, Simone Sturniolo
-
-
Field Summary
Fields Modifier and Type Field Description private static floatADP_FACTORjava.lang.StringaltTypedouble[][]asymMatrixintatomIndex1intatomIndex2inteigenSignMaskfloat[]eigenValuesjavajs.util.V3[]eigenVectorsbooleanforThermalEllipsoidjava.lang.Stringidprivate static java.lang.StringinfoListprivate static floatINTERACTION_FACTORbooleanisIsotropicbooleanisModulatedbooleanisUnmodulatedintiTypeprivate static java.lang.StringKNOWN_TYPESprivate static floatMAGNETIC_SUSCEPTIBILITY_FACTORintmodelIndexfloat[]parBorUprivate booleansortIsodouble[][]symMatrixprivate static EigenSorttSortjava.lang.Stringtypestatic intTYPE_ADPstatic intTYPE_CHARGEstatic intTYPE_EFGstatic intTYPE_ISCstatic intTYPE_ISOstatic intTYPE_MSstatic intTYPE_OTHERstatic intTYPE_QUADRUPOLEstatic intTYPE_TLS_Rstatic intTYPE_TLS_Uprivate floattypeFactor
-
Constructor Summary
Constructors Constructor Description Tensor()Although this constructor is public, to be a valid tensor, one must invoke one of the "setFrom" methods.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description floatanisotropy()anisotropy = directed distance from (center of two closest) to (the furthest)floatasymmetry()asymmetry = deviation from a symmetric tensorTensorcopyTensor()private static java.util.Comparator<? super java.lang.Object[]>getEigenSort()floatgetFactoredValue(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 typeFactorjava.lang.ObjectgetInfo(java.lang.String infoType)returns an object of the specified type, including "eigenvalues", "eigenvectors", "asymmetric", "symmetric", "trace", "indices", and "type"private static intgetInfoIndex(java.lang.String infoType)private static intgetType(java.lang.String type)booleanisEquiv(Tensor t)static booleanisFloatInfo(java.lang.String infoType)floatisotropy()isotropy = average of eigenvaluesbooleanisSelected(BS bsSelected, int iAtom)private voidnewTensorType(javajs.util.V3[] vectors, float[] values, java.lang.String type, java.lang.String id)common processing of eigenvectors.private voidprocessType()Sets typeFactor, altType, isIsotropic, forThermalEllipsoid; type "iso" changed to "" here.floatreducedAnisotropy()reduced anisotropy = largest difference from isotropy (may be negative)voidsetAtomIndexes(int index1, int index2)TensorsetFromAsymmetricTensor(double[][] asymmetricTensor, java.lang.String type, java.lang.String id)Standard constructor for QM tensorsTensorsetFromAxes(javajs.util.V3[] axes)Standard constructor for ellipsoids based on axesTensorsetFromEigenVectors(javajs.util.V3[] eigenVectors, float[] eigenValues, java.lang.String type, java.lang.String id, Tensor t)Standard constructor for charge and iso.TensorsetFromThermalEquation(double[] coefs, java.lang.String id)standard constructor for thermal ellipsoids convention beta (see http://www.iucr.org/iucr-top/comm/cnom/adp/finrepone/finrepone.html)TensorsetType(java.lang.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.floatskew()a measure of asymmetry.private voidsortAndNormalize()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.floatspan()width of the signal; |e2 - e0|java.lang.StringtoString()
-
-
-
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
-
INTERACTION_FACTOR
private static final float INTERACTION_FACTOR
- See Also:
- Constant Field Values
-
tSort
private static EigenSort tSort
-
id
public java.lang.String id
-
type
public java.lang.String type
-
iType
public int iType
-
KNOWN_TYPES
private static final java.lang.String KNOWN_TYPES
- See Also:
- Constant Field Values
-
TYPE_OTHER
public static final int TYPE_OTHER
- See Also:
- Constant Field Values
-
TYPE_ISO
public static final int TYPE_ISO
- See Also:
- Constant Field Values
-
TYPE_ADP
public static final int TYPE_ADP
- See Also:
- Constant Field Values
-
TYPE_TLS_U
public static final int TYPE_TLS_U
- See Also:
- Constant Field Values
-
TYPE_TLS_R
public static final int TYPE_TLS_R
- See Also:
- Constant Field Values
-
TYPE_MS
public static final int TYPE_MS
- See Also:
- Constant Field Values
-
TYPE_EFG
public static final int TYPE_EFG
- See Also:
- Constant Field Values
-
TYPE_ISC
public static final int TYPE_ISC
- See Also:
- Constant Field Values
-
TYPE_CHARGE
public static final int TYPE_CHARGE
- See Also:
- Constant Field Values
-
TYPE_QUADRUPOLE
public static final int TYPE_QUADRUPOLE
- See Also:
- Constant Field Values
-
asymMatrix
public double[][] asymMatrix
-
symMatrix
public double[][] symMatrix
-
eigenVectors
public javajs.util.V3[] eigenVectors
-
eigenValues
public float[] eigenValues
-
parBorU
public float[] parBorU
-
altType
public java.lang.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
-
infoList
private static final java.lang.String infoList
- See Also:
- Constant Field Values
-
-
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(java.lang.String type)
-
getInfoIndex
private static int getInfoIndex(java.lang.String infoType)
-
isFloatInfo
public static boolean isFloatInfo(java.lang.String infoType)
-
getInfo
public java.lang.Object getInfo(java.lang.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, java.lang.String type, java.lang.String id)
Standard constructor for QM tensors- Parameters:
asymmetricTensor-type-id-- Returns:
- this
-
setFromEigenVectors
public Tensor setFromEigenVectors(javajs.util.V3[] eigenVectors, float[] eigenValues, java.lang.String type, java.lang.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, java.lang.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(java.lang.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(BS bsSelected, int iAtom)
-
newTensorType
private void newTensorType(javajs.util.V3[] vectors, float[] values, java.lang.String type, java.lang.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)
-
getEigenSort
private static java.util.Comparator<? super java.lang.Object[]> getEigenSort()
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-