Package org.jmol.symmetry
Class SymmetryOperation
- java.lang.Object
-
- javajs.util.M34
-
- javajs.util.M4
-
- org.jmol.symmetry.SymmetryOperation
-
public class SymmetryOperation extends javajs.util.M4
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static javajs.util.P3
atomTest
private javajs.util.V3
centering
(package private) int
divisor
private static int
DIVISOR_MASK
private static int
DIVISOR_OFFSET
private boolean
doNormalize
"normalization" is the process of adjusting symmetry operator definitions such that the center of geometry of a molecule is within the 555 unit cell for each operation.private java.util.Hashtable<java.lang.String,java.lang.Object>
info
(package private) boolean
isBio
(package private) boolean
isCenteringOp
(package private) boolean
isFinalized
(package private) static java.lang.String[]
labelsXn
(package private) static java.lang.String[]
labelsXnSub
(package private) static java.lang.String[]
labelsXYZ
(package private) float[]
linearRotTrans
A linear array for the matrix.private float
magOp
(package private) int
modDim
private java.lang.String[]
myLabels
(package private) int
number
private int
opId
(package private) javajs.util.Matrix
rsvs
rsvs is the superspace group rotation-translation matrix.(package private) javajs.util.Matrix
sigma
(package private) java.lang.String
subsystemCode
(package private) int
timeReversal
private static java.lang.String[]
twelfths
private boolean
unCentered
(package private) java.lang.String
xyz
(package private) java.lang.String
xyzCanonical
(package private) java.lang.String
xyzOriginal
-
Constructor Summary
Constructors Constructor Description SymmetryOperation(SymmetryOperation op, int id, boolean doNormalize)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) static float
approxF(float f)
private static javajs.util.M4
div12(javajs.util.M4 op, int divisor)
(package private) void
doFinalize()
(package private) java.lang.String
dumpInfo()
(package private) static java.lang.String
dumpSeitz(javajs.util.M4 s, boolean isCanonical)
private static java.lang.String
fc(float x)
private java.lang.String
fc2(float f)
Get string version of fraction when divisor == 0(package private) static java.lang.String
fcoord(javajs.util.T3 p)
Get string version of fractionjava.lang.String
fcoord2(javajs.util.T3 p)
private static double
finalizeD(double m, int divisor)
private static float
finalizeF(float m, int divisor)
(package private) java.lang.String
fixMagneticXYZ(javajs.util.M4 m, java.lang.String xyz, boolean addMag)
(package private) javajs.util.V3
getCentering()
assumption here is that these are in order of sets, as in ITAjava.util.Map<java.lang.String,java.lang.Object>
getInfo()
static javajs.util.Lst<javajs.util.P3>
getLatticeCentering(SymmetryOperation[] ops)
(package private) float
getMagneticOp()
Magnetic spin is a pseudo (or "axial") vector.(package private) static java.lang.String
getMatrixFromString(SymmetryOperation op, java.lang.String xyz, float[] linearRotTrans, boolean allowScaling)
Convert the Jones-Faithful notation "x, -z+1/2, y" or "x1, x3-1/2, x2, x5+1/2, -x6+1/2, x7..." to a linear array Also allows a-b,-5a-5b,-c;0,0,0 formatstatic javajs.util.M4
getMatrixFromXYZ(java.lang.String xyz)
(package private) java.lang.String
getXyz(boolean normalized)
static java.lang.String
getXYZFromMatrix(javajs.util.M4 mat, boolean is12ths, boolean allPositive, boolean halfOrLess)
(package private) static java.lang.String
getXYZFromRsVs(javajs.util.Matrix rs, javajs.util.Matrix vs, boolean is12ths)
java.lang.String
getxyzTrans(javajs.util.P3 t)
static void
normalizeOperationToCentroid(int dim, javajs.util.M4 m, javajs.util.P3[] atoms, int atomIndex, int count)
Adjust the translation for this operator so that it moves the center of mass of the full set of atoms into the cell.private static float
normalizeTwelfths(float iValue, int divisor, boolean doNormalize)
private static java.lang.String
plusMinus(java.lang.String strT, float x, java.lang.String sx)
(package private) static java.lang.String
replaceXn(java.lang.String xyz, int n)
(package private) javajs.util.V3[]
rotateAxes(javajs.util.V3[] vectors, UnitCell unitcell, javajs.util.P3 ptTemp, javajs.util.M3 mTemp)
private static int
setDivisor(java.lang.String xyz)
Sets the divisor to 0 for n/9 or n/mm(package private) boolean
setFromMatrix(float[] offset, boolean isReverse)
private void
setGamma(boolean isReverse)
private void
setMatrix(boolean isReverse)
(package private) boolean
setMatrixFromXYZ(java.lang.String xyz, int modDim, boolean allowScaling)
private void
setModDim(int dim)
(package private) void
setSigma(java.lang.String subsystemCode, javajs.util.Matrix sigma)
(package private) void
setTimeReversal(int magRev)
set the time reversal, and indicate internally in xyz as appended ",m" or ",-m"private static int
toDivisor(float numer, int denom)
java.lang.String
toString()
Returns a string that contains the values of this Matrix4f.(package private) static java.lang.String
twelfthsOf(float n12ths)
private static java.lang.String
xyzFraction12(float n12ths, int denom, boolean allPositive, boolean halfOrLess)
-
Methods inherited from class javajs.util.M4
add, determinant4, equals, getColumn, getElement, getRotationScale, getRow, getTranslation, hashCode, invert, mul, mul2, newA16, newM4, newMV, rotTrans, rotTrans2, round, scale, setA, setAsXYRotation, setAsXZRotation, setAsYZRotation, setColumn4, setColumnA, setElement, setIdentity, setM4, setMV, setRotationScale, setRowA, setToAA, setToM3, setTranslation, setZero, sub, transform, transform2, transpose
-
-
-
-
Field Detail
-
xyzOriginal
java.lang.String xyzOriginal
-
xyzCanonical
java.lang.String xyzCanonical
-
xyz
java.lang.String xyz
-
doNormalize
private boolean doNormalize
"normalization" is the process of adjusting symmetry operator definitions such that the center of geometry of a molecule is within the 555 unit cell for each operation. It is carried out when "packed" is NOT issued and the lattice is given as {i j k} or when the lattice is given as {nnn mmm 1}
-
isFinalized
boolean isFinalized
-
opId
private int opId
-
centering
private javajs.util.V3 centering
-
myLabels
private java.lang.String[] myLabels
-
modDim
int modDim
-
linearRotTrans
float[] linearRotTrans
A linear array for the matrix. Note that the last value in this array may indicate 120 to indicate that the integer divisor should be 120, not 12.
-
rsvs
javajs.util.Matrix rsvs
rsvs is the superspace group rotation-translation matrix. It is a (3 + modDim + 1) x (3 + modDim + 1) matrix from which we can extract all necessary parts; so 4x4 = 16, 5x5 = 25, 6x6 = 36, 7x7 = 49[ [(3+modDim)*x + 1] [(3+modDim)*x + 1] [ Gamma_R [0x0] | Gamma_S [(3+modDim)*x + 1] == [0x0] Gamma_e | Gamma_d ... [0] [0] | 1 ] [0 0 0 0 0... 1] ]
-
isBio
boolean isBio
-
sigma
javajs.util.Matrix sigma
-
number
int number
-
subsystemCode
java.lang.String subsystemCode
-
timeReversal
int timeReversal
-
unCentered
private boolean unCentered
-
isCenteringOp
boolean isCenteringOp
-
magOp
private float magOp
-
divisor
int divisor
-
DIVISOR_MASK
private static final int DIVISOR_MASK
- See Also:
- Constant Field Values
-
DIVISOR_OFFSET
private static final int DIVISOR_OFFSET
- See Also:
- Constant Field Values
-
twelfths
private static final java.lang.String[] twelfths
-
labelsXYZ
static final java.lang.String[] labelsXYZ
-
labelsXn
static final java.lang.String[] labelsXn
-
labelsXnSub
static final java.lang.String[] labelsXnSub
-
info
private java.util.Hashtable<java.lang.String,java.lang.Object> info
-
atomTest
static javajs.util.P3 atomTest
-
-
Constructor Detail
-
SymmetryOperation
SymmetryOperation(SymmetryOperation op, int id, boolean doNormalize)
- Parameters:
op
- operation to clone or nullid
- opId for this operation; ignored if cloningdoNormalize
-
-
-
Method Detail
-
setSigma
void setSigma(java.lang.String subsystemCode, javajs.util.Matrix sigma)
-
setGamma
private void setGamma(boolean isReverse)
-
doFinalize
void doFinalize()
-
div12
private static javajs.util.M4 div12(javajs.util.M4 op, int divisor)
-
finalizeF
private static float finalizeF(float m, int divisor)
-
finalizeD
private static double finalizeD(double m, int divisor)
-
getXyz
java.lang.String getXyz(boolean normalized)
-
getxyzTrans
public java.lang.String getxyzTrans(javajs.util.P3 t)
-
dumpInfo
java.lang.String dumpInfo()
-
dumpSeitz
static final java.lang.String dumpSeitz(javajs.util.M4 s, boolean isCanonical)
-
setMatrixFromXYZ
boolean setMatrixFromXYZ(java.lang.String xyz, int modDim, boolean allowScaling)
-
setDivisor
private static int setDivisor(java.lang.String xyz)
Sets the divisor to 0 for n/9 or n/mm- Parameters:
xyz
-- Returns:
- 0 or 12
-
setModDim
private void setModDim(int dim)
-
setMatrix
private void setMatrix(boolean isReverse)
-
setFromMatrix
boolean setFromMatrix(float[] offset, boolean isReverse)
-
getMatrixFromXYZ
public static javajs.util.M4 getMatrixFromXYZ(java.lang.String xyz)
-
getMatrixFromString
static java.lang.String getMatrixFromString(SymmetryOperation op, java.lang.String xyz, float[] linearRotTrans, boolean allowScaling)
Convert the Jones-Faithful notation "x, -z+1/2, y" or "x1, x3-1/2, x2, x5+1/2, -x6+1/2, x7..." to a linear array Also allows a-b,-5a-5b,-c;0,0,0 format- Parameters:
op
-xyz
-linearRotTrans
-allowScaling
-- Returns:
- canonized Jones-Faithful string
-
replaceXn
static java.lang.String replaceXn(java.lang.String xyz, int n)
-
toDivisor
private static final int toDivisor(float numer, int denom)
-
xyzFraction12
private static final java.lang.String xyzFraction12(float n12ths, int denom, boolean allPositive, boolean halfOrLess)
-
twelfthsOf
static final java.lang.String twelfthsOf(float n12ths)
-
plusMinus
private static java.lang.String plusMinus(java.lang.String strT, float x, java.lang.String sx)
-
normalizeTwelfths
private static float normalizeTwelfths(float iValue, int divisor, boolean doNormalize)
-
getXYZFromMatrix
public static final java.lang.String getXYZFromMatrix(javajs.util.M4 mat, boolean is12ths, boolean allPositive, boolean halfOrLess)
-
rotateAxes
javajs.util.V3[] rotateAxes(javajs.util.V3[] vectors, UnitCell unitcell, javajs.util.P3 ptTemp, javajs.util.M3 mTemp)
-
fcoord2
public java.lang.String fcoord2(javajs.util.T3 p)
-
fc2
private java.lang.String fc2(float f)
Get string version of fraction when divisor == 0- Parameters:
f
-- Returns:
- "1/2" for example
-
fcoord
static java.lang.String fcoord(javajs.util.T3 p)
Get string version of fraction- Parameters:
p
-- Returns:
- "1/2" for example
-
fc
private static java.lang.String fc(float x)
-
approxF
static float approxF(float f)
-
getXYZFromRsVs
static java.lang.String getXYZFromRsVs(javajs.util.Matrix rs, javajs.util.Matrix vs, boolean is12ths)
-
toString
public java.lang.String toString()
Description copied from class:javajs.util.M4
Returns a string that contains the values of this Matrix4f.- Overrides:
toString
in classjavajs.util.M4
- Returns:
- the String representation
-
getMagneticOp
float getMagneticOp()
Magnetic spin is a pseudo (or "axial") vector. This means that it acts as a rotation, not a vector. When a rotation about x is passed through the mirror plane xz, it is reversed; when it is passed through the mirror plane yz, it is not reversed -- exactly opposite what you would imagine from a standard "polar" vector. For example, a vector perpendicular to a plane of symmetry (det=-1) will be flipped (m=1), while a vector parallel to that plane will not be flipped (m=-1) In addition, magnetic spin operations have a flag m=1 or m=-1 (m or -m) that indicates how the vector quantity changes with symmetry. This is called "time reversal" and stored here as timeReversal. To apply, timeReversal must be multiplied by the 3x3 determinant, which is always 1 (standard rotation) or -1 (rotation-inversion). This we store as magOp. See https://en.wikipedia.org/wiki/Pseudovector- Returns:
- +1, -1, or 0
-
setTimeReversal
void setTimeReversal(int magRev)
set the time reversal, and indicate internally in xyz as appended ",m" or ",-m"- Parameters:
magRev
-
-
getCentering
javajs.util.V3 getCentering()
assumption here is that these are in order of sets, as in ITA- Returns:
- centering
-
fixMagneticXYZ
java.lang.String fixMagneticXYZ(javajs.util.M4 m, java.lang.String xyz, boolean addMag)
-
getInfo
public java.util.Map<java.lang.String,java.lang.Object> getInfo()
-
normalizeOperationToCentroid
public static void normalizeOperationToCentroid(int dim, javajs.util.M4 m, javajs.util.P3[] atoms, int atomIndex, int count)
Adjust the translation for this operator so that it moves the center of mass of the full set of atoms into the cell.- Parameters:
dim
-m
-atoms
-atomIndex
- first indexcount
- number of atoms
-
getLatticeCentering
public static javajs.util.Lst<javajs.util.P3> getLatticeCentering(SymmetryOperation[] ops)
-
-