Package org.jmol.adapter.readers.cif
Class MSRdr
java.lang.Object
org.jmol.adapter.readers.cif.MSRdr
- All Implemented Interfaces:
MSInterface
- Direct Known Subclasses:
MSCifParser
generalized modulated structure reader class for CIF and Jana
-- includes Fourier, Crenel, Sawtooth; displacement, occupancy, and Uij
-- handles up to 6 modulation wave vectors
-- commensurate and incommensurate, including composites
-- not handling _cell_commen_t_section_1
- Author:
- Bob Hanson hansonr@stolaf.edu
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate int
private String
private Atom[]
protected int
protected AtomSetCollectionReader
private boolean
private javajs.util.M3
private static final String
private boolean
private boolean
private Map
<String, javajs.util.Lst<Modulation>> private int
protected boolean
private javajs.util.Lst
<String> private javajs.util.P3
private javajs.util.P3
protected boolean
protected String
private String
(package private) boolean
not usedprivate int
private boolean
protected int
private boolean
private javajs.util.Matrix[]
private boolean
private int
private javajs.util.T3
private String
private boolean
private int
private double[]
private javajs.util.P3[]
private javajs.util.Matrix
private SymmetryInterface
private SymmetryInterface
private static final String
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate void
addAtomModulation
(String atomName, char axis, char type, double[] params, String utens, double[] qcoefs) Create a list of modulations for each atom type (atom name).boolean
addLatticeVector
(javajs.util.Lst<float[]> lattvecs, String data) void
addModulation
(Map<String, double[]> map, String id, double[] pt, int iModel) Types include O (occupation) D (displacement) U (anisotropy) M (magnetic moment) _coefs_ indicates this is a wave descriptionvoid
addSubsystem
(String code, javajs.util.Matrix w) private void
private int
approxInt
(float fn) private double[]
calculateQCoefs
(double[] p) determine simple linear combination assuming simple -3 to 3 no more than two dimensions.private String
Filter keys only for this model.private void
expandMinMax
(javajs.util.P3 pt, SymmetryInterface sym, javajs.util.P3 minXYZ, javajs.util.P3 maxXYZ) void
Create a script that will run to turn modulation on and to display only atoms with modulated occupancy >= 0.5.private void
fixDoubleA
(double[] pt) private void
private javajs.util.P3
getAtomSymmetry
(Atom a, SymmetryInterface defaultSymmetry) When applying symmetry, this method allows us to use a set of symmetry operators unique to this particular atom -- or in this case, to its subsystem.private SymmetryInterface
private javajs.util.Matrix[]
getMatrices
(Atom a) double[]
Modulation data keys are keyed by model number as well as type using [at]n, where n is the model number, starting with 0.char
getModType
(String key) double[]
(package private) javajs.util.Matrix
getSigma()
private Subsystem
getSubsystem
(Atom a) private SymmetryInterface
getSymmetry
(Atom a) getSymmetryFromCode
(String code) int
initialize
(AtomSetCollectionReader r, int modDim) private void
initModForStructure
(int iModel) private void
modulateAtom
(Atom a) The displacement will be set as the atom vibration vector; the string buffer will be appended with the t value for a given unit cell.void
setMinMax0
(javajs.util.P3 minXYZ, javajs.util.P3 maxXYZ) protected void
setModDim
(int ndim) void
setModulation
(boolean isPost, SymmetryInterface symmetry) Both the Jana reader and the CIF reader will call this to set the modulation for a given model.private void
setModulationForStructure
(int iModel, boolean isPost) Called when structure creation is complete and all modulation data has been collected.private void
setSubsystem
(String code, Subsystem system) private void
private javajs.util.P3
toP3
(double[] x) private void
-
Field Details
-
cr
-
modDim
protected int modDim -
modAxes
-
modAverage
protected boolean modAverage -
isCommensurate
protected boolean isCommensurate -
commensurateSection1
protected int commensurateSection1 -
modPack
private boolean modPack -
modVib
private boolean modVib -
modType
-
modCell
-
modDebug
private boolean modDebug -
modSelected
private int modSelected -
modLast
private boolean modLast -
sigma
private javajs.util.Matrix sigma -
htModulation
-
htAtomMods
-
iopLast
private int iopLast -
gammaE
private javajs.util.M3 gammaE -
nOps
private int nOps -
haveOccupancy
private boolean haveOccupancy -
atoms
-
ac
private int ac -
haveAtomMods
private boolean haveAtomMods -
modCoord
boolean modCoordnot used -
finalized
private boolean finalized -
symmetry
-
supercellSymmetry
-
legendres
-
atModel
-
modMatrices
private javajs.util.Matrix[] modMatrices -
qlist100
private double[] qlist100 -
generic
- See Also:
-
qs
private javajs.util.P3[] qs -
modCount
private int modCount -
modTUV
private javajs.util.T3 modTUV -
U_LIST
- See Also:
-
htSubsystems
-
minXYZ0
private javajs.util.P3 minXYZ0 -
maxXYZ0
private javajs.util.P3 maxXYZ0
-
-
Constructor Details
-
MSRdr
public MSRdr()
-
-
Method Details
-
getSigma
javajs.util.Matrix getSigma() -
initialize
- Specified by:
initialize
in interfaceMSInterface
- Throws:
Exception
-
setSubsystemOptions
private void setSubsystemOptions() -
setModDim
protected void setModDim(int ndim) -
addModulation
Types include O (occupation) D (displacement) U (anisotropy) M (magnetic moment) _coefs_ indicates this is a wave description- Specified by:
addModulation
in interfaceMSInterface
- Parameters:
map
-id
-pt
-iModel
-
-
setModulation
Both the Jana reader and the CIF reader will call this to set the modulation for a given model.- Specified by:
setModulation
in interfaceMSInterface
- Throws:
Exception
-
finalizeModulation
public void finalizeModulation()Create a script that will run to turn modulation on and to display only atoms with modulated occupancy >= 0.5.- Specified by:
finalizeModulation
in interfaceMSInterface
-
checkKey
Filter keys only for this model.- Parameters:
key
-checkQ
-- Returns:
- trimmed key without model part or null
-
getMod
Modulation data keys are keyed by model number as well as type using [at]n, where n is the model number, starting with 0.- Specified by:
getMod
in interfaceMSInterface
- Parameters:
key
-- Returns:
- modulation data
-
getModulationMap
- Specified by:
getModulationMap
in interfaceMSInterface
-
setModulationForStructure
Called when structure creation is complete and all modulation data has been collected.- Parameters:
iModel
-isPost
-- Throws:
Exception
-
initModForStructure
- Throws:
Exception
-
fixLegendre
private void fixLegendre() -
fixDoubleA
private void fixDoubleA(double[] pt) -
getQCoefs
- Specified by:
getQCoefs
in interfaceMSInterface
-
getModType
- Specified by:
getModType
in interfaceMSInterface
-
calculateQCoefs
private double[] calculateQCoefs(double[] p) determine simple linear combination assuming simple -3 to 3 no more than two dimensions.- Parameters:
p
-- Returns:
- {i j k}
-
approxInt
private int approxInt(float fn) -
toP3
private javajs.util.P3 toP3(double[] x) -
addAtomModulation
private void addAtomModulation(String atomName, char axis, char type, double[] params, String utens, double[] qcoefs) Create a list of modulations for each atom type (atom name).- Parameters:
atomName
-axis
-type
-params
-utens
-qcoefs
-
-
addSubsystem
- Specified by:
addSubsystem
in interfaceMSInterface
-
addUStr
-
modulateAtom
The displacement will be set as the atom vibration vector; the string buffer will be appended with the t value for a given unit cell. Modulation generally involves x4 = q.r + t. Here we arbitrarily set t = modT = 0, but modT could be a FILTER option MODT=n. There would need to be one modT per dimension or modU, modV.- Parameters:
a
-
-
getAtomR0
-
getAtomSymmetry
When applying symmetry, this method allows us to use a set of symmetry operators unique to this particular atom -- or in this case, to its subsystem.- Specified by:
getAtomSymmetry
in interfaceMSInterface
-
setSubsystem
-
getMatrices
-
getSymmetry
-
getSubsystem
-
setMinMax0
public void setMinMax0(javajs.util.P3 minXYZ, javajs.util.P3 maxXYZ) - Specified by:
setMinMax0
in interfaceMSInterface
-
expandMinMax
private void expandMinMax(javajs.util.P3 pt, SymmetryInterface sym, javajs.util.P3 minXYZ, javajs.util.P3 maxXYZ) -
trimAtomSet
private void trimAtomSet() -
getDefaultUnitCell
-
getSymmetryFromCode
- Specified by:
getSymmetryFromCode
in interfaceMSInterface
-
addLatticeVector
- Specified by:
addLatticeVector
in interfaceMSInterface
- Throws:
Exception
-