Package org.jmol.adapter.smarter
Class XtalSymmetry
- java.lang.Object
-
- org.jmol.adapter.smarter.XtalSymmetry
-
public class XtalSymmetry extends java.lang.ObjectA class used by AtomSetCollection for building the symmetry of a model and generating new atoms based on that symmetry.
-
-
Field Summary
Fields Modifier and Type Field Description private AtomSetCollectionReaderacrprivate booleanapplySymmetryToBondsprivate AtomSetCollectionascprivate SymmetryInterfacebaseSymmetryprivate float[]baseUnitCellprivate intbondCount0private javajs.util.SBbondsFoundprivate booleancentroidPackedprivate booleancheckAllprivate booleandoCentroidUnitCellprivate booleandoNormalizeprivate booleandoPackUnitCellprivate java.lang.StringfilterSymopprivate intfirstAtomprivate int[]latticeCellsprivate booleanlatticeOnlyprivate intlatticeOpprivate javajs.util.P3imaxXYZprivate javajs.util.P3maxXYZ0private javajs.util.P3iminXYZprivate javajs.util.P3minXYZ0private javajs.util.M3mTempprivate intndimsprivate intnoSymmetryCountprivate intnVibprivate floatpackingErrorprivate static intPARTICLE_CHAINprivate static intPARTICLE_NONEprivate static intPARTICLE_SYMOPprivate javajs.util.P3ptOffsetprivate javajs.util.P3ptTempprivate floatrmaxxrange minima and maxima -- also usedf for cartesians comparisonsprivate floatrmaxyrange minima and maxima -- also usedf for cartesians comparisonsprivate floatrmaxzrange minima and maxima -- also usedf for cartesians comparisonsprivate floatrminxrange minima and maxima -- also usedf for cartesians comparisonsprivate floatrminyrange minima and maxima -- also usedf for cartesians comparisonsprivate floatrminzrange minima and maxima -- also usedf for cartesians comparisonsprivate SymmetryInterfacesym2SymmetryInterfacesymmetryprivate floatsymmetryRangeprivate javajs.util.Lst<float[]>trajectoryUnitCellsprivate float[]unitCellParamsprivate javajs.util.V3[]unitCellTranslations
-
Constructor Summary
Constructors Constructor Description XtalSymmetry()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description TensoraddRotatedTensor(Atom a, Tensor t, int iSym, boolean reset, SymmetryInterface symmetry)(package private) intaddSpaceGroupOperation(java.lang.String xyz, boolean andSetLattice)private voidadjustRangeMinMax(javajs.util.T3[] oabc)private voidapplyAllSymmetry(MSInterface ms, javajs.util.BS bsAtoms)voidapplySymmetryBio(java.util.Map<java.lang.String,java.lang.Object> thisBiomolecule, boolean applySymmetryToBonds, java.lang.String filter)(package private) SymmetryInterfaceapplySymmetryFromReader(SymmetryInterface readerSymmetry)private voidapplySymmetryLattice()private voidduplicateAtomProperties(int nTimes)private voidfinalizeSymmetry(SymmetryInterface symmetry)voidfinalizeUnitCell(javajs.util.P3 ptSupercell)Ensure that ModelLoader sets up the supercell unit cell.SymmetryInterfacegetBaseSymmetry()Get the symmetry that was in place prior to any supercell businessjavajs.util.T3getOverallSpan()SymmetryInterfacegetSymmetry()booleanisWithinCell(int ndims, javajs.util.P3 pt, float minX, float maxX, float minY, float maxY, float minZ, float maxZ, float slop)private voidreset()voidscaleFractionalVibs()magCIF files have moments expressed as Bohr magnetons along the cryrstallographic axes.XtalSymmetryset(AtomSetCollectionReader reader)private voidsetAtomSetSpaceGroupName(java.lang.String spaceGroupName)private voidsetLatticeCells()voidsetLatticeParameter(int latt)private voidsetMinMax(int dim, int kcode, int maxX, int maxY, int maxZ)voidsetSpaceGroupFrom(SymmetryInterface readerSymmetry)intsetSpinVectors()(package private) SymmetryInterfacesetSymmetry(SymmetryInterface symmetry)private voidsetSymmetryMinMax(javajs.util.P3 c)private voidsetSymmetryOps()private voidsetSymmetryRange(float factor)(package private) voidsetTensors()voidsetTimeReversal(int op, int timeRev)private voidsetUnitCell(float[] info, javajs.util.M3 matUnitCellOrientation, javajs.util.P3 unitCellOffset)private intsymmetryAddAtoms(int transX, int transY, int transZ, int baseCount, int pt, int iCellOpPt, javajs.util.P3[] cartesians, MSInterface ms, javajs.util.BS excludedOps, int[] atomMap)private voidtrimToUnitCell(int iAtomFirst)private javajs.util.BSupdateBSAtoms()Update asc.bsAtoms to include all atoms, or at least all atoms that are still viable from the reader.
-
-
-
Field Detail
-
PARTICLE_NONE
private static final int PARTICLE_NONE
- See Also:
- Constant Field Values
-
PARTICLE_CHAIN
private static final int PARTICLE_CHAIN
- See Also:
- Constant Field Values
-
PARTICLE_SYMOP
private static final int PARTICLE_SYMOP
- See Also:
- Constant Field Values
-
acr
private AtomSetCollectionReader acr
-
asc
private AtomSetCollection asc
-
baseSymmetry
private SymmetryInterface baseSymmetry
-
sym2
private SymmetryInterface sym2
-
applySymmetryToBonds
private boolean applySymmetryToBonds
-
centroidPacked
private boolean centroidPacked
-
doCentroidUnitCell
private boolean doCentroidUnitCell
-
doNormalize
private boolean doNormalize
-
doPackUnitCell
private boolean doPackUnitCell
-
latticeOnly
private boolean latticeOnly
-
trajectoryUnitCells
private javajs.util.Lst<float[]> trajectoryUnitCells
-
unitCellParams
private float[] unitCellParams
-
baseUnitCell
private float[] baseUnitCell
-
latticeCells
private int[] latticeCells
-
unitCellTranslations
private javajs.util.V3[] unitCellTranslations
-
symmetryRange
private float symmetryRange
-
packingError
private float packingError
-
filterSymop
private java.lang.String filterSymop
-
bondsFound
private javajs.util.SB bondsFound
-
ndims
private int ndims
-
firstAtom
private int firstAtom
-
latticeOp
private int latticeOp
-
noSymmetryCount
private int noSymmetryCount
-
nVib
private int nVib
-
ptTemp
private javajs.util.P3 ptTemp
-
mTemp
private javajs.util.M3 mTemp
-
rminx
private float rminx
range minima and maxima -- also usedf for cartesians comparisons
-
rminy
private float rminy
range minima and maxima -- also usedf for cartesians comparisons
-
rminz
private float rminz
range minima and maxima -- also usedf for cartesians comparisons
-
rmaxx
private float rmaxx
range minima and maxima -- also usedf for cartesians comparisons
-
rmaxy
private float rmaxy
range minima and maxima -- also usedf for cartesians comparisons
-
rmaxz
private float rmaxz
range minima and maxima -- also usedf for cartesians comparisons
-
ptOffset
private final javajs.util.P3 ptOffset
-
minXYZ
private javajs.util.P3i minXYZ
-
maxXYZ
private javajs.util.P3i maxXYZ
-
minXYZ0
private javajs.util.P3 minXYZ0
-
maxXYZ0
private javajs.util.P3 maxXYZ0
-
checkAll
private boolean checkAll
-
bondCount0
private int bondCount0
-
symmetry
public SymmetryInterface symmetry
-
-
Method Detail
-
set
public XtalSymmetry set(AtomSetCollectionReader reader)
-
getSymmetry
public SymmetryInterface getSymmetry()
-
setSymmetry
SymmetryInterface setSymmetry(SymmetryInterface symmetry)
-
setSymmetryRange
private void setSymmetryRange(float factor)
-
setLatticeCells
private void setLatticeCells()
-
setUnitCell
private void setUnitCell(float[] info, javajs.util.M3 matUnitCellOrientation, javajs.util.P3 unitCellOffset)
-
addSpaceGroupOperation
int addSpaceGroupOperation(java.lang.String xyz, boolean andSetLattice)
-
setLatticeParameter
public void setLatticeParameter(int latt)
-
applySymmetryFromReader
SymmetryInterface applySymmetryFromReader(SymmetryInterface readerSymmetry) throws java.lang.Exception
- Throws:
java.lang.Exception
-
setSpaceGroupFrom
public void setSpaceGroupFrom(SymmetryInterface readerSymmetry)
-
setAtomSetSpaceGroupName
private void setAtomSetSpaceGroupName(java.lang.String spaceGroupName)
-
applySymmetryLattice
private void applySymmetryLattice() throws java.lang.Exception- Throws:
java.lang.Exception
-
setMinMax
private void setMinMax(int dim, int kcode, int maxX, int maxY, int maxZ)
-
trimToUnitCell
private void trimToUnitCell(int iAtomFirst)
-
updateBSAtoms
private javajs.util.BS updateBSAtoms()
Update asc.bsAtoms to include all atoms, or at least all atoms that are still viable from the reader.- Returns:
- updated BS
-
adjustRangeMinMax
private void adjustRangeMinMax(javajs.util.T3[] oabc)
-
setSymmetryMinMax
private void setSymmetryMinMax(javajs.util.P3 c)
-
isWithinCell
public boolean isWithinCell(int ndims, javajs.util.P3 pt, float minX, float maxX, float minY, float maxY, float minZ, float maxZ, float slop)
-
applyAllSymmetry
private void applyAllSymmetry(MSInterface ms, javajs.util.BS bsAtoms) throws java.lang.Exception
- Parameters:
ms- modulated structure interfacebsAtoms- relating to supercells- Throws:
java.lang.Exception
-
symmetryAddAtoms
private int symmetryAddAtoms(int transX, int transY, int transZ, int baseCount, int pt, int iCellOpPt, javajs.util.P3[] cartesians, MSInterface ms, javajs.util.BS excludedOps, int[] atomMap) throws java.lang.Exception- Throws:
java.lang.Exception
-
duplicateAtomProperties
private void duplicateAtomProperties(int nTimes)
-
finalizeSymmetry
private void finalizeSymmetry(SymmetryInterface symmetry)
-
setSymmetryOps
private void setSymmetryOps()
-
getOverallSpan
public javajs.util.T3 getOverallSpan()
-
applySymmetryBio
public void applySymmetryBio(java.util.Map<java.lang.String,java.lang.Object> thisBiomolecule, boolean applySymmetryToBonds, java.lang.String filter)
-
reset
private void reset()
-
addRotatedTensor
public Tensor addRotatedTensor(Atom a, Tensor t, int iSym, boolean reset, SymmetryInterface symmetry)
-
setTensors
void setTensors()
-
setTimeReversal
public void setTimeReversal(int op, int timeRev)
-
setSpinVectors
public int setSpinVectors()
-
scaleFractionalVibs
public void scaleFractionalVibs()
magCIF files have moments expressed as Bohr magnetons along the cryrstallographic axes. These have to be "fractionalized" in order to be properly handled by symmetry operations, then, in the end, turned into Cartesians. It is not clear to me at all how this would be handled if there are subsystems. This method must be run PRIOR to applying symmetry and thus prior to creation of modulation sets.
-
getBaseSymmetry
public SymmetryInterface getBaseSymmetry()
Get the symmetry that was in place prior to any supercell business- Returns:
- base symmetry
-
finalizeUnitCell
public void finalizeUnitCell(javajs.util.P3 ptSupercell)
Ensure that ModelLoader sets up the supercell unit cell.- Parameters:
ptSupercell-
-
-