| Clazz.declarePackage ("JS"); | |
| Clazz.load (["JU.M4"], "JS.HallRotationTerm", ["JU.SB", "JS.HallRotation", "$.HallTranslation", "$.SymmetryOperation", "JU.Logger"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.inputCode = null; | |
| this.primitiveCode = null; | |
| this.lookupCode = null; | |
| this.translationString = null; | |
| this.rotation = null; | |
| this.translation = null; | |
| this.seitzMatrix12ths = null; | |
| this.isImproper = false; | |
| this.order = 0; | |
| this.axisType = '\0'; | |
| this.diagonalReferenceAxis = '\0'; | |
| this.allPositive = true; | |
| Clazz.instantialize (this, arguments); | |
| }, JS, "HallRotationTerm"); | |
| Clazz.prepareFields (c$, function () { | |
| this.seitzMatrix12ths = new JU.M4 (); | |
| }); | |
| Clazz.makeConstructor (c$, | |
| function (hallInfo, code, prevOrder, prevAxisType) { | |
| this.inputCode = code; | |
| code += " "; | |
| if (code.charAt (0) == '-') { | |
| this.isImproper = true; | |
| code = code.substring (1); | |
| }this.primitiveCode = ""; | |
| this.order = code.charCodeAt (0) - 48; | |
| this.diagonalReferenceAxis = '\0'; | |
| this.axisType = '\0'; | |
| var ptr = 2; | |
| var c; | |
| switch (c = code.charAt (1)) { | |
| case 'x': | |
| case 'y': | |
| case 'z': | |
| switch (code.charAt (2)) { | |
| case '\'': | |
| case '"': | |
| this.diagonalReferenceAxis = c; | |
| c = code.charAt (2); | |
| ptr++; | |
| } | |
| case '*': | |
| this.axisType = c; | |
| break; | |
| case '\'': | |
| case '"': | |
| this.axisType = c; | |
| switch (code.charAt (2)) { | |
| case 'x': | |
| case 'y': | |
| case 'z': | |
| this.diagonalReferenceAxis = code.charAt (2); | |
| ptr++; | |
| break; | |
| default: | |
| this.diagonalReferenceAxis = prevAxisType; | |
| } | |
| break; | |
| default: | |
| this.axisType = (this.order == 1 ? '_' : hallInfo.nRotations == 0 ? 'z' : hallInfo.nRotations == 2 ? '*' : prevOrder == 2 || prevOrder == 4 ? 'x' : '\''); | |
| code = code.substring (0, 1) + this.axisType + code.substring (1); | |
| } | |
| this.primitiveCode += (this.axisType == '_' ? "1" : code.substring (0, 2)); | |
| if (this.diagonalReferenceAxis != '\0') { | |
| code = code.substring (0, 1) + this.diagonalReferenceAxis + this.axisType + code.substring (ptr); | |
| this.primitiveCode += this.diagonalReferenceAxis; | |
| ptr = 3; | |
| }this.lookupCode = code.substring (0, ptr); | |
| this.rotation = JS.HallRotation.lookup (this.lookupCode); | |
| if (this.rotation == null) { | |
| JU.Logger.error ("Rotation lookup could not find " + this.inputCode + " ? " + this.lookupCode); | |
| return; | |
| }this.translation = new JS.HallTranslation ('\0', null); | |
| this.translationString = ""; | |
| var len = code.length; | |
| for (var i = ptr; i < len; i++) { | |
| var translationCode = code.charAt (i); | |
| var t = JS.HallTranslation.getHallTranslation (translationCode, this.order); | |
| if (t != null) { | |
| this.translationString += "" + t.translationCode; | |
| this.translation.rotationShift12ths += t.rotationShift12ths; | |
| this.translation.vectorShift12ths.add (t.vectorShift12ths); | |
| }} | |
| this.primitiveCode = (this.isImproper ? "-" : "") + this.primitiveCode + this.translationString; | |
| this.seitzMatrix12ths.setM4 (this.isImproper ? this.rotation.seitzMatrixInv : this.rotation.seitzMatrix); | |
| this.seitzMatrix12ths.m03 = this.translation.vectorShift12ths.x; | |
| this.seitzMatrix12ths.m13 = this.translation.vectorShift12ths.y; | |
| this.seitzMatrix12ths.m23 = this.translation.vectorShift12ths.z; | |
| switch (this.axisType) { | |
| case 'x': | |
| this.seitzMatrix12ths.m03 += this.translation.rotationShift12ths; | |
| break; | |
| case 'y': | |
| this.seitzMatrix12ths.m13 += this.translation.rotationShift12ths; | |
| break; | |
| case 'z': | |
| this.seitzMatrix12ths.m23 += this.translation.rotationShift12ths; | |
| break; | |
| } | |
| if (hallInfo.vectorCode.length > 0) { | |
| var m1 = JU.M4.newM4 (null); | |
| var m2 = JU.M4.newM4 (null); | |
| var v = hallInfo.vector12ths; | |
| m1.m03 = v.x; | |
| m1.m13 = v.y; | |
| m1.m23 = v.z; | |
| m2.m03 = -v.x; | |
| m2.m13 = -v.y; | |
| m2.m23 = -v.z; | |
| this.seitzMatrix12ths.mul2 (m1, this.seitzMatrix12ths); | |
| this.seitzMatrix12ths.mul (m2); | |
| }if (JU.Logger.debugging) { | |
| JU.Logger.debug ("code = " + code + "; primitive code =" + this.primitiveCode + "\n Seitz Matrix(12ths):" + this.seitzMatrix12ths); | |
| }}, "JS.HallInfo,~S,~N,~S"); | |
| Clazz.defineMethod (c$, "dumpInfo", | |
| function (vectorCode) { | |
| var sb = new JU.SB (); | |
| sb.append ("\ninput code: ").append (this.inputCode).append ("; primitive code: ").append (this.primitiveCode).append ("\norder: ").appendI (this.order).append (this.isImproper ? " (improper axis)" : ""); | |
| if (this.axisType != '_') { | |
| sb.append ("; axisType: ").appendC (this.axisType); | |
| if (this.diagonalReferenceAxis != '\0') sb.appendC (this.diagonalReferenceAxis); | |
| }if (this.translationString.length > 0) sb.append ("; translation: ").append (this.translationString); | |
| if (vectorCode.length > 0) sb.append ("; vector offset: ").append (vectorCode); | |
| if (this.rotation != null) sb.append ("\noperator: ").append (this.getXYZ (this.allPositive)).append ("\nSeitz matrix:\n").append (JS.SymmetryOperation.dumpSeitz (this.seitzMatrix12ths, false)); | |
| return sb.toString (); | |
| }, "~S"); | |
| Clazz.defineMethod (c$, "getXYZ", | |
| function (allPositive) { | |
| return JS.SymmetryOperation.getXYZFromMatrix (this.seitzMatrix12ths, true, allPositive, true); | |
| }, "~B"); | |
| }); | |