Clazz.declarePackage("J.adapter.readers.xtal");
Clazz.load(["J.adapter.smarter.AtomSetCollectionReader"], "J.adapter.readers.xtal.AbinitReader", null, function(){
var c$ = Clazz.decorateAsClass(function(){
this.znucl = null;
this.inputOnly = false;
this.nAtom = 0;
this.nType = 0;
this.typeArray = null;
this.cellLattice = null;
Clazz.instantialize(this, arguments);}, J.adapter.readers.xtal, "AbinitReader", J.adapter.smarter.AtomSetCollectionReader);
Clazz.overrideMethod(c$, "initializeReader", 
function(){
this.setSpaceGroupName("P1");
this.doApplySymmetry = true;
this.setFractionalCoordinates(false);
this.inputOnly = this.checkFilterKey("INPUT");
});
Clazz.overrideMethod(c$, "checkLine", 
function(){
if (this.line.contains("natom")) {
this.readNoatom();
} else if (this.line.contains("ntypat") || this.line.contains("ntype")) {
this.readNotypes();
} else if (this.line.contains("typat") || this.line.contains("type")) {
this.readTypesequence();
} else if (this.line.contains("Pseudopotential")) {
this.readAtomSpecies();
} else if (this.line.contains("Symmetries :")) {
this.readSpaceGroup();
} else if (this.line.contains("Real(R)+Recip(G)")) {
this.readIntiallattice();
if (this.inputOnly) this.continuing = false;
} else if (this.line.contains("xcart")) {
this.readAtoms();
}return true;
});
Clazz.defineMethod(c$, "readNoatom", 
function(){
var tokens = this.getTokens();
if (tokens.length <= 2) this.nAtom = this.parseIntStr(tokens[1]);
});
Clazz.defineMethod(c$, "readNotypes", 
function(){
var tokens = this.getTokens();
if (tokens.length <= 2) this.nType = this.parseIntStr(tokens[1]);
});
Clazz.defineMethod(c$, "readTypesequence", 
function(){
this.fillFloatArray(this.line.substring(12), 0, this.typeArray =  Clazz.newFloatArray (this.nAtom, 0));
});
Clazz.defineMethod(c$, "readAtomSpecies", 
function(){
this.znucl =  Clazz.newFloatArray (this.nType, 0);
for (var i = 0; i < this.nType; i++) {
this.discardLinesUntilContains("zion");
var tokens = this.getTokens();
this.znucl[i] = this.parseFloatStr(tokens[tokens[0] === "-" ? 1 : 0]);
}
});
Clazz.defineMethod(c$, "readSpaceGroup", 
function(){
});
Clazz.defineMethod(c$, "readIntiallattice", 
function(){
var f = 0;
this.cellLattice =  Clazz.newFloatArray (9, 0);
for (var i = 0; i < 9; i++) {
if (i % 3 == 0) {
this.line = this.rd().substring(6);
f = this.parseFloatStr(this.line);
}this.cellLattice[i] = f * 0.5291772;
f = this.parseFloat();
}
this.applySymmetry();
});
Clazz.defineMethod(c$, "applySymmetry", 
function(){
if (this.cellLattice == null) return;
this.setSpaceGroupName("P1");
for (var i = 0; i < 3; i++) this.addExplicitLatticeVector(i, this.cellLattice, i * 3);

var atoms = this.asc.atoms;
var i0 = this.asc.getAtomSetAtomIndex(this.asc.iSet);
if (!this.iHaveFractionalCoordinates) for (var i = this.asc.ac; --i >= i0; ) this.setAtomCoord(atoms[i]);

this.applySymmetryAndSetTrajectory();
});
Clazz.defineMethod(c$, "readAtoms", 
function(){
this.asc.newAtomSet();
this.iHaveFractionalCoordinates = false;
var i0 = this.asc.ac;
this.line = this.line.substring(12);
while (this.line != null && !this.line.contains("x")) {
var atom = this.asc.addNewAtom();
this.setAtomCoordScaled(atom, this.getTokens(), 0, 0.5291772);
this.rd();
}
this.discardLinesUntilContains("z");
if (this.znucl == null) this.fillFloatArray(this.line.substring(12), 0, this.znucl =  Clazz.newFloatArray (this.nType, 0));
var atoms = this.asc.atoms;
for (var i = 0; i < this.nAtom; i++) atoms[i + i0].elementNumber = Clazz.floatToShort(this.znucl[Clazz.floatToInt(this.typeArray[i]) - 1]);

this.applySymmetry();
});
});
;//5.0.1-v7 Mon Aug 17 10:07:10 MDT 2026
