text: Clazz.declarePackage ("JSV.source");
  Clazz.load (["JSV.source.JDXHeader"], "JSV.source.JDXDataObject", ["java.lang.Character", "$.Double", "JU.DF", "$.PT", "JSV.common.Annotation", "$.Coordinate", "$.Integral", "JSV.exception.JSVException", "JU.Logger"], function () {
  c$ = Clazz.decorateAsClass (function () {
  this.filePath = null;
  this.filePathForwardSlash = null;
  this.isSimulation = false;
  this.sourceID = "";
  this.blockID = 0;
  this.fileFirstX = 1.7976931348623157E308;
  this.fileLastX = 1.7976931348623157E308;
  this.nPointsFile = -1;
  this.xFactor = 1.7976931348623157E308;
  this.yFactor = 1.7976931348623157E308;
  this.varName = "";
  this.xUnits = "";
  this.yUnits = "";
  this.xLabel = null;
  this.yLabel = null;
  this.nH = 0;
  this.observedNucl = "";
  this.observedFreq = 1.7976931348623157E308;
  this.parent = null;
  this.offset = 1.7976931348623157E308;
  this.shiftRefType = -1;
  this.dataPointNum = -1;
  this.numDim = 1;
  this.nucleusX = null;
  this.nucleusY = "?";
  this.freq2dX = NaN;
  this.freq2dY = NaN;
  this.y2D = NaN;
  this.y2DUnits = "";
  this.$isHZtoPPM = false;
  this.xIncreases = true;
  this.continuous = false;
  this.xyCoords = null;
  this.minX = NaN;
  this.minY = NaN;
  this.maxX = NaN;
  this.maxY = NaN;
  this.deltaX = NaN;
  this.normalizationFactor = 1;
  Clazz.instantialize (this, arguments);
  }, JSV.source, "JDXDataObject", JSV.source.JDXHeader);
  Clazz.defineMethod (c$, "setFilePath", 
  function (filePath) {
  if (filePath != null) this.filePathForwardSlash = (this.filePath = filePath.trim ()).$replace ('\\', '/');
  }, "~S");
  Clazz.defineMethod (c$, "getFilePath", 
  function () {
  return this.filePath;
  });
  Clazz.defineMethod (c$, "getFilePathForwardSlash", 
  function () {
  return this.filePathForwardSlash;
  });
  Clazz.defineMethod (c$, "setBlockID", 
  function (id) {
  this.blockID = id;
  }, "~N");
  Clazz.defineMethod (c$, "isImaginary", 
  function () {
  return this.varName.contains ("IMAG");
  });
  Clazz.defineMethod (c$, "setXFactor", 
  function (xFactor) {
  this.xFactor = xFactor;
  }, "~N");
  Clazz.defineMethod (c$, "getXFactor", 
  function () {
  return this.xFactor;
  });
  Clazz.defineMethod (c$, "setYFactor", 
  function (yFactor) {
  this.yFactor = yFactor;
  }, "~N");
  Clazz.defineMethod (c$, "getYFactor", 
  function () {
  return this.yFactor;
  });
  Clazz.defineMethod (c$, "checkRequiredTokens", 
  function () {
  var err = (this.fileFirstX == 1.7976931348623157E308 ? "##FIRSTX" : this.fileLastX == 1.7976931348623157E308 ? "##LASTX" : this.nPointsFile == -1 ? "##NPOINTS" : this.xFactor == 1.7976931348623157E308 ? "##XFACTOR" : this.yFactor == 1.7976931348623157E308 ? "##YFACTOR" : null);
  if (err != null) throw  new JSV.exception.JSVException ("Error Reading Data Set: " + err + " not found");
  });
  Clazz.defineMethod (c$, "setXUnits", 
  function (xUnits) {
  this.xUnits = xUnits;
  }, "~S");
  Clazz.defineMethod (c$, "getXUnits", 
  function () {
  return this.xUnits;
  });
  Clazz.defineMethod (c$, "setYUnits", 
  function (yUnits) {
  if (yUnits.equals ("PPM")) yUnits = "ARBITRARY UNITS";
  this.yUnits = yUnits;
  }, "~S");
  Clazz.defineMethod (c$, "getYUnits", 
  function () {
  return this.yUnits;
  });
  Clazz.defineMethod (c$, "setXLabel", 
  function (value) {
  this.xLabel = value;
  }, "~S");
  Clazz.defineMethod (c$, "setYLabel", 
  function (value) {
  this.yLabel = value;
  }, "~S");
  Clazz.defineMethod (c$, "setObservedNucleus", 
  function (value) {
  this.observedNucl = value;
  if (this.numDim == 1) this.parent.nucleusX = this.nucleusX = this.fixNucleus (value);
  }, "~S");
  Clazz.defineMethod (c$, "setObservedFreq", 
  function (observedFreq) {
  this.observedFreq = observedFreq;
  }, "~N");
  Clazz.defineMethod (c$, "getObservedFreq", 
  function () {
  return this.observedFreq;
  });
  Clazz.defineMethod (c$, "is1D", 
  function () {
  return this.numDim == 1;
  });
  Clazz.defineMethod (c$, "setY2D", 
  function (d) {
  this.y2D = d;
  }, "~N");
  Clazz.defineMethod (c$, "getY2D", 
  function () {
  return this.y2D;
  });
  Clazz.defineMethod (c$, "setY2DUnits", 
  function (units) {
  this.y2DUnits = units;
  }, "~S");
  Clazz.defineMethod (c$, "getY2DPPM", 
  function () {
  var d = this.y2D;
  if (this.y2DUnits.equals ("HZ")) d /= this.freq2dY;
  return d;
  });
  Clazz.defineMethod (c$, "setNucleusAndFreq", 
  function (nuc, isX) {
  nuc = this.fixNucleus (nuc);
  if (isX) this.nucleusX = nuc;
   else this.nucleusY = nuc;
  var freq;
  if (this.observedNucl.indexOf (nuc) >= 0) {
  freq = this.observedFreq;
  } else {
  var g1 = JSV.source.JDXDataObject.getGyroMagneticRatio (this.observedNucl);
  var g2 = JSV.source.JDXDataObject.getGyroMagneticRatio (nuc);
  freq = this.observedFreq * g2 / g1;
  }if (isX) this.freq2dX = freq;
   else this.freq2dY = freq;
  JU.Logger.info ("Freq for " + nuc + " = " + freq);
  }, "~S,~B");
  Clazz.defineMethod (c$, "fixNucleus", 
   function (nuc) {
  return JU.PT.rep (JU.PT.trim (nuc, "[]^<>"), "NUC_", "");
  }, "~S");
  c$.getGyroMagneticRatio = Clazz.defineMethod (c$, "getGyroMagneticRatio", 
   function (nuc) {
  var pt = 0;
  while (pt < nuc.length && !Character.isDigit (nuc.charAt (pt))) pt++;
  
  pt = JU.PT.parseInt (nuc.substring (pt));
  var i = 0;
  for (; i < JSV.source.JDXDataObject.gyroData.length; i += 2) if (JSV.source.JDXDataObject.gyroData[i] >= pt) break;
  
  return (JSV.source.JDXDataObject.gyroData[i] == pt ? JSV.source.JDXDataObject.gyroData[i + 1] : NaN);
  }, "~S");
  Clazz.defineMethod (c$, "isTransmittance", 
  function () {
  var s = this.yUnits.toLowerCase ();
  return (s.equals ("transmittance") || s.contains ("trans") || s.equals ("t"));
  });
  Clazz.defineMethod (c$, "isAbsorbance", 
  function () {
  var s = this.yUnits.toLowerCase ();
  return (s.equals ("absorbance") || s.contains ("abs") || s.equals ("a"));
  });
  Clazz.defineMethod (c$, "canSaveAsJDX", 
  function () {
  return this.getDataClass ().equals ("XYDATA");
  });
  Clazz.defineMethod (c$, "canIntegrate", 
  function () {
  return (this.continuous && (this.isHNMR () || this.isGC ()) && this.is1D ());
  });
  Clazz.defineMethod (c$, "isAutoOverlayFromJmolClick", 
  function () {
  return (this.isGC ());
  });
  Clazz.defineMethod (c$, "isGC", 
  function () {
  return this.dataType.startsWith ("GC") || this.dataType.startsWith ("GAS");
  });
  Clazz.defineMethod (c$, "isMS", 
  function () {
  return this.dataType.startsWith ("MASS") || this.dataType.startsWith ("MS");
  });
  Clazz.defineMethod (c$, "isStackable", 
  function () {
  return !this.isMS ();
  });
  Clazz.defineMethod (c$, "isScalable", 
  function () {
  return true;
  });
  Clazz.defineMethod (c$, "getYRef", 
  function () {
  return (!this.isTransmittance () ? 0.0 : JSV.common.Coordinate.getMaxY (this.xyCoords, 0, this.xyCoords.length) < 2 ? 1.0 : 100.0);
  });
  Clazz.defineMethod (c$, "isInverted", 
  function () {
  return this.isTransmittance ();
  });
  Clazz.defineMethod (c$, "canConvertTransAbs", 
  function () {
  return (this.continuous && (this.yUnits.toLowerCase ().contains ("abs")) || this.yUnits.toLowerCase ().contains ("trans"));
  });
  Clazz.defineMethod (c$, "canShowSolutionColor", 
  function () {
  return (this.isContinuous () && this.canConvertTransAbs () && (this.xUnits.toLowerCase ().contains ("nanometer") || this.xUnits.equalsIgnoreCase ("nm")) && this.getFirstX () < 401 && this.getLastX () > 699 && this.xyCoords.length >= 30);
  });
  Clazz.defineMethod (c$, "isHZtoPPM", 
  function () {
  return this.$isHZtoPPM;
  });
  Clazz.defineMethod (c$, "setHZtoPPM", 
  function (val) {
  this.$isHZtoPPM = val;
  }, "~B");
  Clazz.defineMethod (c$, "setIncreasing", 
  function (val) {
  this.xIncreases = val;
  }, "~B");
  Clazz.defineMethod (c$, "isXIncreasing", 
  function () {
  return this.xIncreases;
  });
  Clazz.defineMethod (c$, "shouldDisplayXAxisIncreasing", 
  function () {
  var dt = this.dataType.toUpperCase ();
  var xu = this.xUnits.toUpperCase ();
  if (dt.contains ("NMR") && !(dt.contains ("FID"))) {
  return false;
  } else if (dt.contains ("LINK") && xu.contains ("CM")) {
  return false;
  } else if (dt.startsWith ("IR") || dt.contains ("INFRA") && xu.contains ("CM")) {
  return false;
  } else if (dt.contains ("RAMAN") && xu.contains ("CM")) {
  return false;
  } else if (dt.contains ("VIS") && xu.contains ("NANOMETERS")) {
  return true;
  }return this.xIncreases;
  });
  Clazz.defineMethod (c$, "setContinuous", 
  function (val) {
  this.continuous = val;
  }, "~B");
  Clazz.defineMethod (c$, "isContinuous", 
  function () {
  return this.continuous;
  });
  Clazz.defineMethod (c$, "getHeaderRowDataAsArray", 
  function () {
  var n = 8;
  if (this.observedFreq != 1.7976931348623157E308) n++;
  if (this.observedNucl !== "") n++;
  var rowData = this.getHeaderRowDataAsArray (true, n);
  var i = rowData.length - n;
  if (this.observedFreq != 1.7976931348623157E308) rowData[i++] =  Clazz.newArray (-1, ["##.OBSERVE FREQUENCY", "" + this.observedFreq]);
  if (this.observedNucl !== "") rowData[i++] =  Clazz.newArray (-1, ["##.OBSERVE NUCLEUS", this.observedNucl]);
  rowData[i++] =  Clazz.newArray (-1, ["##XUNITS", this.$isHZtoPPM ? "HZ" : this.xUnits]);
  rowData[i++] =  Clazz.newArray (-1, ["##YUNITS", this.yUnits]);
  var x = (this.xIncreases ? this.getFirstX () : this.getLastX ());
  rowData[i++] =  Clazz.newArray (-1, ["##FIRSTX", String.valueOf (this.isHZtoPPM () ? x * this.observedFreq : x)]);
  x = (this.xIncreases ? this.getLastX () : this.getFirstX ());
  rowData[i++] =  Clazz.newArray (-1, ["##FIRSTY", String.valueOf (this.xIncreases ? this.getFirstY () : this.getLastY ())]);
  rowData[i++] =  Clazz.newArray (-1, ["##LASTX", String.valueOf (this.isHZtoPPM () ? x * this.observedFreq : x)]);
  rowData[i++] =  Clazz.newArray (-1, ["##XFACTOR", String.valueOf (this.getXFactor ())]);
  rowData[i++] =  Clazz.newArray (-1, ["##YFACTOR", String.valueOf (this.getYFactor ())]);
  rowData[i++] =  Clazz.newArray (-1, ["##NPOINTS", String.valueOf (this.xyCoords.length)]);
  return rowData;
  });
  Clazz.defineMethod (c$, "getDefaultUnitPrecision", 
  function () {
  return 2;
  });
  Clazz.defineMethod (c$, "setMeasurementText", 
  function (m) {
  var dx = m.getValue ();
  if (Double.isNaN (dx)) return "";
  var precision = 1;
  var units = "";
  if (this.isNMR ()) {
  if (this.numDim == 1) {
  var isIntegral = (Clazz.instanceOf (m, JSV.common.Integral));
  if (this.isHNMR () || isIntegral) {
  if (!isIntegral) {
  dx *= this.observedFreq;
  units = " Hz";
  }} else {
  units = " ppm";
  precision = 2;
  }} else {
  return "";
  }}return (dx < 0.1 ? "" : JU.DF.formatDecimalDbl (dx, precision) + units);
  }, "JSV.common.Measurement");
  Clazz.defineMethod (c$, "isNMR", 
  function () {
  return (this.dataType.toUpperCase ().indexOf ("NMR") >= 0);
  });
  Clazz.defineMethod (c$, "isHNMR", 
  function () {
  return (this.isNMR () && this.observedNucl.toUpperCase ().indexOf ("H") >= 0);
  });
  Clazz.defineMethod (c$, "setXYCoords", 
  function (coords) {
  this.xyCoords = coords;
  }, "~A");
  Clazz.defineMethod (c$, "invertYAxis", 
  function () {
  for (var i = this.xyCoords.length; --i >= 0; ) {
  this.xyCoords[i].setYVal (-this.xyCoords[i].getYVal ());
  }
  var d = this.minY;
  this.minY = -this.maxY;
  this.maxY = -d;
  return this;
  });
  Clazz.defineMethod (c$, "getFirstX", 
  function () {
  return this.xyCoords[0].getXVal ();
  });
  Clazz.defineMethod (c$, "getFirstY", 
  function () {
  return this.xyCoords[0].getYVal ();
  });
  Clazz.defineMethod (c$, "getLastX", 
  function () {
  return this.xyCoords[this.xyCoords.length - 1].getXVal ();
  });
  Clazz.defineMethod (c$, "getLastY", 
  function () {
  return this.xyCoords[this.xyCoords.length - 1].getYVal ();
  });
  Clazz.defineMethod (c$, "getMinX", 
  function () {
  return (Double.isNaN (this.minX) ? (this.minX = JSV.common.Coordinate.getMinX (this.xyCoords, 0, this.xyCoords.length)) : this.minX);
  });
  Clazz.defineMethod (c$, "getMinY", 
  function () {
  return (Double.isNaN (this.minY) ? (this.minY = JSV.common.Coordinate.getMinY (this.xyCoords, 0, this.xyCoords.length)) : this.minY);
  });
  Clazz.defineMethod (c$, "getMaxX", 
  function () {
  return (Double.isNaN (this.maxX) ? (this.maxX = JSV.common.Coordinate.getMaxX (this.xyCoords, 0, this.xyCoords.length)) : this.maxX);
  });
  Clazz.defineMethod (c$, "getMaxY", 
  function () {
  return (Double.isNaN (this.maxY) ? (this.maxY = JSV.common.Coordinate.getMaxY (this.xyCoords, 0, this.xyCoords.length)) : this.maxY);
  });
  Clazz.defineMethod (c$, "doNormalize", 
  function (max) {
  if (!this.isNMR () || !this.is1D ()) return;
  this.normalizationFactor = max / this.getMaxY ();
  this.maxY = NaN;
  JSV.common.Coordinate.applyScale (this.xyCoords, 1, this.normalizationFactor);
  JU.Logger.info ("Y values have been scaled by a factor of " + this.normalizationFactor);
  }, "~N");
  Clazz.defineMethod (c$, "getDeltaX", 
  function () {
  return (Double.isNaN (this.deltaX) ? (this.deltaX = JSV.common.Coordinate.deltaX (this.getLastX (), this.getFirstX (), this.xyCoords.length)) : this.deltaX);
  });
  Clazz.defineMethod (c$, "copyTo", 
  function (newObj) {
  newObj.setTitle (this.title);
  newObj.setJcampdx (this.jcampdx);
  newObj.setOrigin (this.origin);
  newObj.setOwner (this.owner);
  newObj.setDataClass (this.dataClass);
  newObj.setDataType (this.dataType);
  newObj.setHeaderTable (this.headerTable);
  newObj.setXFactor (this.xFactor);
  newObj.setYFactor (this.yFactor);
  newObj.setXUnits (this.xUnits);
  newObj.setYUnits (this.yUnits);
  newObj.setXLabel (this.xLabel);
  newObj.setYLabel (this.yLabel);
  newObj.setXYCoords (this.xyCoords);
  newObj.setContinuous (this.continuous);
  newObj.setIncreasing (this.xIncreases);
  newObj.observedFreq = this.observedFreq;
  newObj.observedNucl = this.observedNucl;
  newObj.offset = this.offset;
  newObj.dataPointNum = this.dataPointNum;
  newObj.shiftRefType = this.shiftRefType;
  newObj.$isHZtoPPM = this.$isHZtoPPM;
  newObj.numDim = this.numDim;
  newObj.nucleusX = this.nucleusX;
  newObj.nucleusY = this.nucleusY;
  newObj.freq2dX = this.freq2dX;
  newObj.freq2dY = this.freq2dY;
  newObj.setFilePath (this.filePath);
  newObj.nH = this.nH;
  }, "JSV.source.JDXDataObject");
  Clazz.defineMethod (c$, "getTypeLabel", 
  function () {
  return (this.isNMR () ? this.nucleusX + "NMR" : this.dataType);
  });
  Clazz.defineMethod (c$, "getDefaultAnnotationInfo", 
  function (type) {
  var s1;
  var s2;
  var isNMR = this.isNMR ();
  switch (type) {
  case JSV.common.Annotation.AType.Integration:
  return  Clazz.newArray (-1, [null,  Clazz.newIntArray (-1, [1]), null]);
  case JSV.common.Annotation.AType.Measurements:
  s1 = (isNMR ?  Clazz.newArray (-1, ["Hz", "ppm"]) :  Clazz.newArray (-1, [""]));
  s2 = (this.isHNMR () ?  Clazz.newIntArray (-1, [1, 4]) :  Clazz.newIntArray (-1, [1, 3]));
  return  Clazz.newArray (-1, [s1, s2, Integer.$valueOf (0)]);
  case JSV.common.Annotation.AType.PeakList:
  s1 = (isNMR ?  Clazz.newArray (-1, ["Hz", "ppm"]) :  Clazz.newArray (-1, [""]));
  s2 = (this.isHNMR () ?  Clazz.newIntArray (-1, [1, 2]) :  Clazz.newIntArray (-1, [1, 1]));
  return  Clazz.newArray (-1, [s1, s2, Integer.$valueOf (isNMR ? 1 : 0)]);
  case JSV.common.Annotation.AType.NONE:
  case JSV.common.Annotation.AType.OverlayLegend:
  break;
  case JSV.common.Annotation.AType.Views:
  break;
  }
  return null;
  }, "JSV.common.Annotation.AType");
  Clazz.defineMethod (c$, "getPeakListArray", 
  function (m, last, maxY) {
  var x = m.getXVal ();
  var y = m.getYVal ();
  if (this.isNMR ()) y /= maxY;
  var dx = Math.abs (x - last[0]);
  last[0] = x;
  var ddx = dx + last[1];
  last[1] = dx;
  var dddx = ddx + last[2];
  last[2] = ddx;
  if (this.isNMR ()) {
  return  Clazz.newDoubleArray (-1, [x, y, x * this.observedFreq, (dx * this.observedFreq > 20 ? 0 : dx * this.observedFreq), (ddx * this.observedFreq > 20 ? 0 : ddx * this.observedFreq), (dddx * this.observedFreq > 20 ? 0 : dddx * this.observedFreq)]);
  }return  Clazz.newDoubleArray (-1, [x, y]);
  }, "JSV.common.Measurement,~A,~N");
  Clazz.defineStatics (c$,
  "ERROR", 1.7976931348623157E308,
  "SCALE_NONE", 0,
  "SCALE_TOP", 1,
  "SCALE_BOTTOM", 2,
  "SCALE_TOP_BOTTOM", 3,
  "gyroData",  Clazz.newDoubleArray (-1, [1, 42.5774806, 2, 6.53590131, 3, 45.4148, 3, 32.436, 6, 6.2661, 7, 16.5483, 9, 5.9842, 10, 4.5752, 11, 13.663, 13, 10.70839657, 14, 3.07770646, 15, 4.31726570, 17, 5.7742, 19, 40.07757016, 21, 3.3631, 23, 11.26952167, 25, 2.6083, 27, 11.1031, 29, 8.4655, 31, 17.25144090, 33, 3.2717, 35, 4.1765, 37, 3.4765, 37, 5.819, 39, 3.46, 39, 1.9893, 40, 2.4737, 41, 1.0919, 43, 2.8688, 45, 10.3591, 47, 2.4041, 49, 2.4048, 50, 4.2505, 51, 11.2133, 53, 2.4115, 55, 10.5763, 57, 1.3816, 59, 10.077, 61, 3.8114, 63, 11.2982, 65, 12.103, 67, 2.6694, 69, 10.2478, 71, 13.0208, 73, 1.4897, 75, 7.315, 77, 8.1571, 79, 10.7042, 81, 11.5384, 83, 1.6442, 85, 4.1254, 87, 13.9811, 87, 1.8525, 89, 2.0949, 91, 3.9748, 93, 10.4523, 95, 2.7874, 97, 2.8463, 99, 9.6294, 99, 1.9553, 101, 2.1916, 103, 1.3477, 105, 1.957, 107, 1.7331, 109, 1.9924, 111, 9.0692, 113, 9.4871, 113, 9.3655, 115, 9.3856, 115, 14.0077, 117, 15.261, 119, 15.966, 121, 10.2551, 123, 5.5532, 123, 11.2349, 125, 13.5454, 127, 8.5778, 129, 11.8604, 131, 3.5159, 133, 5.6234, 135, 4.2582, 137, 4.7634, 138, 5.6615, 139, 6.0612, 137, 4.88, 139, 5.39, 141, 2.37, 141, 13.0359, 143, 2.319, 145, 1.429, 143, 11.59, 147, 5.62, 147, 1.7748, 149, 14631, 151, 10.5856, 153, 4.6745, 155, 1.312, 157, 1.72, 159, 10.23, 161, 1.4654, 163, 2.0508, 165, 9.0883, 167, 1.2281, 169, 3.531, 171, 7.5261, 173, 2.073, 175, 4.8626, 176, 3.451, 177, 1.7282, 179, 1.0856, 180, 4.087, 181, 5.1627, 183, 1.7957, 185, 9.7176, 187, 9.817, 187, 0.9856, 189, 3.3536, 191, 0.7658, 191, 0.8319, 195, 9.2922, 197, 0.7406, 199, 7.7123, 201, 2.8469, 203, 24.7316, 205, 24.9749, 207, 9.034, 209, 6.963, 209, 11.7, 211, 9.16, 223, 5.95, 223, 1.3746, 225, 11.187, 227, 5.6, 229, 1.4, 231, 10.2, 235, 0.83, 237, 9.57, 239, 3.09, 243, 4.6, 1E100]));
  });
  