Clazz.declarePackage ("J.adapter.readers.quantum");
Clazz.load (["J.adapter.smarter.AtomSetCollectionReader", "java.util.Hashtable", "JU.Lst", "J.quantum.QS"], "J.adapter.readers.quantum.BasisFunctionReader", ["java.util.Arrays", "JU.PT", "JU.Logger"], function () {
c$ = Clazz.decorateAsClass (function () {
this.shells = null;
this.moData = null;
this.orbitals = null;
this.nOrbitals = 0;
this.ignoreMOs = false;
this.alphaBeta = "";
this.dfCoefMaps = null;
this.filterTokens = null;
this.filterIsNot = false;
this.spin = null;
if (!Clazz.isClassDefined ("J.adapter.readers.quantum.BasisFunctionReader.MOEnergySorter")) {
J.adapter.readers.quantum.BasisFunctionReader.$BasisFunctionReader$MOEnergySorter$ ();
}
this.orbitalMaps = null;
this.highLEnabled = null;
this.nCoef = 0;
Clazz.instantialize (this, arguments);
}, J.adapter.readers.quantum, "BasisFunctionReader", J.adapter.smarter.AtomSetCollectionReader);
Clazz.prepareFields (c$, function () {
this.moData =  new java.util.Hashtable ();
this.orbitals =  new JU.Lst ();
this.orbitalMaps =  new java.util.Hashtable ();
this.highLEnabled =  Clazz.newIntArray (J.quantum.QS.idSpherical.length, 0);
});
Clazz.defineMethod (c$, "filterMO", 
function () {
var isHeader = (this.line.indexOf ('\n') == 0);
if (!isHeader && !this.doReadMolecularOrbitals) return false;
var isOK = true;
this.line += " " + this.alphaBeta;
var ucline = this.line.toUpperCase ();
if (this.filter != null) {
var nOK = 0;
if (this.filterTokens == null) {
this.filterIsNot = (this.filter.indexOf ("!") >= 0);
this.filterTokens = JU.PT.getTokens (this.filter.$replace ('!', ' ').$replace (',', ' ').$replace (';', ' '));
}for (var i = 0; i < this.filterTokens.length; i++) if (ucline.indexOf (this.filterTokens[i]) >= 0) {
if (!this.filterIsNot) {
nOK = this.filterTokens.length;
break;
}} else if (this.filterIsNot) {
nOK++;
}
isOK = (nOK == this.filterTokens.length);
if (!isHeader) JU.Logger.info ("filter MOs: " + isOK + " for \"" + this.line + "\"");
}this.spin = (ucline.indexOf ("ALPHA") >= 0 ? "alpha" : ucline.indexOf ("BETA") >= 0 ? "beta" : null);
return isOK;
});
Clazz.defineMethod (c$, "setMO", 
function (mo) {
if (this.dfCoefMaps != null) mo.put ("dfCoefMaps", this.dfCoefMaps);
this.orbitals.addLast (mo);
mo.put ("index", Integer.$valueOf (this.orbitals.size ()));
if (this.spin != null) mo.put ("spin", this.spin);
this.moData.put ("highLEnabled", this.highLEnabled);
}, "java.util.Map");
Clazz.defineMethod (c$, "getDFMap", 
function (shell, fileList, shellType, jmolList, minLength) {
this.orbitalMaps.put (shell, fileList);
this.moData.put ("orbitalMaps", this.orbitalMaps);
this.enableShell (shellType);
if (fileList.equals (jmolList)) return true;
this.getDfCoefMaps ();
var isOK = J.quantum.QS.createDFMap (this.dfCoefMaps[shellType], fileList, jmolList, minLength);
if (!isOK) JU.Logger.error ("Disabling orbitals of type " + shellType + " -- Cannot read orbital order for: " + fileList + "\n expecting: " + jmolList);
return isOK;
}, "~S,~S,~N,~S,~N");
Clazz.defineMethod (c$, "enableShell", 
function (shellType) {
this.highLEnabled[shellType] = 1;
}, "~N");
Clazz.defineMethod (c$, "getDfCoefMaps", 
function () {
return (this.dfCoefMaps == null ? (this.dfCoefMaps = J.quantum.QS.getNewDfCoefMap ()) : this.dfCoefMaps);
});
c$.canonicalizeQuantumSubshellTag = Clazz.defineMethod (c$, "canonicalizeQuantumSubshellTag", 
function (tag) {
var firstChar = tag.charAt (0);
if (firstChar == 'X' || firstChar == 'Y' || firstChar == 'Z') {
var sorted = tag.toCharArray ();
java.util.Arrays.sort (sorted);
return  String.instantialize (sorted);
}return tag;
}, "~S");
Clazz.defineMethod (c$, "fixSlaterTypes", 
function (typeOld, typeNew) {
if (this.shells == null) return 0;
this.nCoef = 0;
for (var i = this.shells.size (); --i >= 0; ) {
var slater = this.shells.get (i);
if (slater[1] == typeOld) slater[1] = typeNew;
var m = this.getDfCoefMaps ()[slater[1]].length;
this.nCoef += m;
}
return this.nCoef;
}, "~N,~N");
c$.getQuantumShellTagIDSpherical = Clazz.defineMethod (c$, "getQuantumShellTagIDSpherical", 
function (tag) {
return J.quantum.QS.getQuantumShellTagIDSpherical (tag);
}, "~S");
c$.getQuantumShellTagID = Clazz.defineMethod (c$, "getQuantumShellTagID", 
function (tag) {
return J.quantum.QS.getQuantumShellTagID (tag);
}, "~S");
c$.getQuantumShellTag = Clazz.defineMethod (c$, "getQuantumShellTag", 
function (id) {
return J.quantum.QS.getQuantumShellTag (id);
}, "~N");
Clazz.overrideMethod (c$, "discardPreviousAtoms", 
function () {
this.asc.discardPreviousAtoms ();
this.moData.remove ("mos");
this.orbitals.clear ();
});
Clazz.defineMethod (c$, "clearOrbitals", 
function () {
this.orbitals =  new JU.Lst ();
this.moData =  new java.util.Hashtable ();
this.alphaBeta = "";
});
c$.$BasisFunctionReader$MOEnergySorter$ = function () {
Clazz.pu$h(self.c$);
c$ = Clazz.decorateAsClass (function () {
Clazz.prepareCallback (this, arguments);
Clazz.instantialize (this, arguments);
}, J.adapter.readers.quantum.BasisFunctionReader, "MOEnergySorter", null, java.util.Comparator);
Clazz.overrideMethod (c$, "compare", 
function (a, b) {
var c = ((a).get ("energy")).floatValue ();
var d = ((b).get ("energy")).floatValue ();
return (c < d ? -1 : c > d ? 1 : 0);
}, "~O,~O");
c$ = Clazz.p0p ();
};
});
