| Clazz.declarePackage ("JS"); | |
| Clazz.load (null, "JS.HallInfo", ["JU.P3i", "$.SB", "JS.HallRotationTerm", "$.HallTranslation", "JU.Logger"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.hallSymbol = null; | |
| this.primitiveHallSymbol = null; | |
| this.latticeCode = '\0'; | |
| this.latticeExtension = null; | |
| this.isCentrosymmetric = false; | |
| this.nRotations = 0; | |
| this.rotationTerms = null; | |
| this.vector12ths = null; | |
| this.vectorCode = null; | |
| Clazz.instantialize (this, arguments); | |
| }, JS, "HallInfo"); | |
| Clazz.prepareFields (c$, function () { | |
| this.rotationTerms = new Array (16); | |
| }); | |
| Clazz.makeConstructor (c$, | |
| function (hallSymbol) { | |
| try { | |
| var str = this.hallSymbol = hallSymbol.trim (); | |
| str = this.extractLatticeInfo (str); | |
| if (JS.HallTranslation.getLatticeIndex (this.latticeCode) == 0) return; | |
| this.latticeExtension = JS.HallTranslation.getLatticeExtension (this.latticeCode, this.isCentrosymmetric); | |
| str = this.extractVectorInfo (str) + this.latticeExtension; | |
| if (JU.Logger.debugging) JU.Logger.debug ("Hallinfo: " + hallSymbol + " " + str); | |
| var prevOrder = 0; | |
| var prevAxisType = '\u0000'; | |
| this.primitiveHallSymbol = "P"; | |
| while (str.length > 0 && this.nRotations < 16) { | |
| str = this.extractRotationInfo (str, prevOrder, prevAxisType); | |
| var r = this.rotationTerms[this.nRotations - 1]; | |
| prevOrder = r.order; | |
| prevAxisType = r.axisType; | |
| this.primitiveHallSymbol += " " + r.primitiveCode; | |
| } | |
| this.primitiveHallSymbol += this.vectorCode; | |
| } catch (e) { | |
| if (Clazz.exceptionOf (e, Exception)) { | |
| JU.Logger.error ("Invalid Hall symbol " + e); | |
| this.nRotations = 0; | |
| } else { | |
| throw e; | |
| } | |
| } | |
| }, "~S"); | |
| Clazz.defineMethod (c$, "dumpInfo", | |
| function () { | |
| var sb = new JU.SB (); | |
| sb.append ("\nHall symbol: ").append (this.hallSymbol).append ("\nprimitive Hall symbol: ").append (this.primitiveHallSymbol).append ("\nlattice type: ").append (this.getLatticeDesignation ()); | |
| for (var i = 0; i < this.nRotations; i++) { | |
| sb.append ("\n\nrotation term ").appendI (i + 1).append (this.rotationTerms[i].dumpInfo (this.vectorCode)); | |
| } | |
| return sb.toString (); | |
| }); | |
| Clazz.defineMethod (c$, "getLatticeDesignation", | |
| function () { | |
| return JS.HallTranslation.getLatticeDesignation2 (this.latticeCode, this.isCentrosymmetric); | |
| }); | |
| Clazz.defineMethod (c$, "extractLatticeInfo", | |
| function (name) { | |
| var i = name.indexOf (" "); | |
| if (i < 0) return ""; | |
| var term = name.substring (0, i).toUpperCase (); | |
| this.latticeCode = term.charAt (0); | |
| if (this.latticeCode == '-') { | |
| this.isCentrosymmetric = true; | |
| this.latticeCode = term.charAt (1); | |
| }return name.substring (i + 1).trim (); | |
| }, "~S"); | |
| Clazz.defineMethod (c$, "extractVectorInfo", | |
| function (name) { | |
| this.vector12ths = new JU.P3i (); | |
| this.vectorCode = ""; | |
| var i = name.indexOf ("("); | |
| var j = name.indexOf (")", i); | |
| if (i > 0 && j > i) { | |
| var term = name.substring (i + 1, j); | |
| this.vectorCode = " (" + term + ")"; | |
| name = name.substring (0, i).trim (); | |
| i = term.indexOf (" "); | |
| if (i >= 0) { | |
| this.vector12ths.x = Integer.parseInt (term.substring (0, i)); | |
| term = term.substring (i + 1).trim (); | |
| i = term.indexOf (" "); | |
| if (i >= 0) { | |
| this.vector12ths.y = Integer.parseInt (term.substring (0, i)); | |
| term = term.substring (i + 1).trim (); | |
| }}this.vector12ths.z = Integer.parseInt (term); | |
| }return name; | |
| }, "~S"); | |
| Clazz.defineMethod (c$, "extractRotationInfo", | |
| function (name, prevOrder, prevAxisType) { | |
| var i = name.indexOf (" "); | |
| var code; | |
| if (i >= 0) { | |
| code = name.substring (0, i); | |
| name = name.substring (i + 1).trim (); | |
| } else { | |
| code = name; | |
| name = ""; | |
| }this.rotationTerms[this.nRotations] = new JS.HallRotationTerm (this, code, prevOrder, prevAxisType); | |
| this.nRotations++; | |
| return name; | |
| }, "~S,~N,~S"); | |
| }); | |