text: Clazz.declarePackage ("J.adapter.readers.xtal");
  Clazz.load (["J.adapter.smarter.AtomSetCollectionReader"], "J.adapter.readers.xtal.VaspPoscarReader", ["java.lang.Float", "JU.Lst", "$.M3", "$.PT", "$.SB", "J.api.JmolAdapter", "JU.Parser"], function () {
  c$ = Clazz.decorateAsClass (function () {
  this.atomLabels = null;
  this.haveAtomLabels = true;
  this.atomsLabeledInline = false;
  this.scaleFac = 0;
  this.ac = 0;
  this.title = null;
  this.quiet = false;
  this.defaultLabels = null;
  this.elementLabel = null;
  this.radiusPt = -2147483648;
  this.elementPt = -2147483648;
  Clazz.instantialize (this, arguments);
  }, J.adapter.readers.xtal, "VaspPoscarReader", J.adapter.smarter.AtomSetCollectionReader);
  Clazz.overrideMethod (c$, "initializeReader", 
  function () {
  this.readStructure (null);
  this.continuing = false;
  });
  Clazz.defineMethod (c$, "readStructure", 
  function (titleMsg) {
  this.title = this.rd ().trim ();
  this.readUnitCellVectors ();
  this.readMolecularFormula ();
  this.readCoordinates ();
  this.asc.setAtomSetName (this.title + (titleMsg == null ? "" : "[" + titleMsg + "]"));
  }, "~S");
  Clazz.overrideMethod (c$, "finalizeSubclassReader", 
  function () {
  if (!this.haveAtomLabels && !this.atomsLabeledInline) this.appendLoadNote ("VASP POSCAR reader using pseudo atoms Al B C Db...");
  this.finalizeReaderASCR ();
  });
  Clazz.defineMethod (c$, "readUnitCellVectors", 
  function () {
  this.setSpaceGroupName ("P1");
  this.setFractionalCoordinates (true);
  this.scaleFac = this.parseFloatStr (this.rdline ().trim ());
  var isVolume = (this.scaleFac < 0);
  if (isVolume) this.scaleFac = Math.pow (-this.scaleFac, 0.3333333333333333);
  var unitCellData =  Clazz.newFloatArray (9, 0);
  var s = this.rdline () + " " + this.rdline () + " " + this.rdline ();
  JU.Parser.parseStringInfestedFloatArray (s, null, unitCellData);
  if (isVolume) {
  var m = JU.M3.newA9 (unitCellData);
  this.scaleFac /= m.determinant3 ();
  }if (this.scaleFac != 1) for (var i = 0; i < unitCellData.length; i++) unitCellData[i] *= this.scaleFac;
  
  this.addPrimitiveLatticeVector (0, unitCellData, 0);
  this.addPrimitiveLatticeVector (1, unitCellData, 3);
  this.addPrimitiveLatticeVector (2, unitCellData, 6);
  });
  Clazz.defineMethod (c$, "readMolecularFormula", 
  function () {
  if (this.elementLabel == null) this.elementLabel = JU.PT.getTokens (this.discardLinesUntilNonBlank ());
  var elementCounts;
  if (JU.PT.parseInt (this.elementLabel[0]) == -2147483648) {
  this.atomsLabeledInline = false;
  elementCounts = JU.PT.getTokens (this.rdline ());
  while (this.line != null && (elementCounts.length == 0 || this.parseIntStr (elementCounts[0]) == -2147483648)) elementCounts = JU.PT.getTokens (this.rdline ());
  
  } else {
  elementCounts = this.elementLabel;
  this.elementLabel = JU.PT.split (this.title, " ");
  if (this.elementLabel.length != elementCounts.length || this.elementLabel[0].length > 2) {
  this.elementLabel = JU.PT.split ("Al B C Db Eu F Ga Hf I K Li Mn N O P Ru S Te U V W Xe Yb Zn", " ");
  this.haveAtomLabels = false;
  }}var labels = this.elementLabel;
  var mf =  new JU.SB ();
  this.atomLabels =  new JU.Lst ();
  this.ac = 0;
  for (var i = 0; i < elementCounts.length; i++) {
  var n = Integer.parseInt (elementCounts[i]);
  this.ac += n;
  var label = labels[i];
  mf.append (" ").append (label).appendI (n);
  for (var j = n; --j >= 0; ) this.atomLabels.addLast (label);
  
  }
  var s = mf.toString ();
  if (!this.quiet) this.appendLoadNote (this.ac + " atoms identified for" + s);
  this.asc.newAtomSet ();
  this.asc.setAtomSetName (s);
  });
  Clazz.defineMethod (c$, "readCoordinates", 
  function () {
  var isSelective = this.discardLinesUntilNonBlank ().toLowerCase ().contains ("selective");
  if (isSelective) this.rd ();
  var isCartesian = (this.line.toLowerCase ().contains ("cartesian"));
  if (isCartesian) this.setFractionalCoordinates (false);
  for (var i = 0; i < this.ac; i++) {
  var radius = NaN;
  var tokens = JU.PT.getTokens (this.rdline ());
  if (this.radiusPt == -2147483648) {
  for (var j = tokens.length; --j > 2; ) if (tokens[j].equals ("radius")) {
  this.radiusPt = j + 1;
  } else if (this.getElement (tokens[j]) != null) {
  this.elementPt = j;
  this.atomsLabeledInline = true;
  }
  }if (this.radiusPt >= 0) radius = this.parseFloatStr (tokens[this.radiusPt]);
  var label = (this.atomsLabeledInline ? tokens[this.elementPt] : this.atomLabels.get (i));
  if (isCartesian) for (var j = 0; j < 3; j++) tokens[j] = "" + this.parseFloatStr (tokens[j]) * this.scaleFac;
  
  var atom = this.addAtomXYZSymName (tokens, 0, null, label);
  if (!Float.isNaN (radius)) atom.radius = radius * this.scaleFac;
  if (this.asc.bsAtoms != null) this.asc.bsAtoms.set (atom.index);
  }
  });
  Clazz.defineMethod (c$, "getElement", 
  function (token) {
  var s = null;
  switch (token.length) {
  default:
  s = (token.length > 2 ? token.substring (0, 2) : null);
  if (s != null && J.api.JmolAdapter.getElementNumber (s) >= 0) return s;
  case 1:
  if (J.api.JmolAdapter.getElementNumber (s = token.substring (0)) >= 0) return s;
  case 0:
  return null;
  }
  }, "~S");
  Clazz.defineMethod (c$, "rdline", 
  function () {
  this.rd ();
  if (this.line != null && this.line.startsWith ("[")) this.line = this.line.substring (this.line.indexOf ("]") + 1).trim ();
  return this.line;
  });
  });
  