Clazz.declarePackage ("JSV.common"); Clazz.load (null, "JSV.common.ScaleData", ["java.lang.Double", "JSV.common.Coordinate"], function () { c$ = Clazz.decorateAsClass (function () { this.initMinYOnScale = 0; this.initMaxYOnScale = 0; this.initMinY = 0; this.initMaxY = 0; this.startDataPointIndex = 0; this.endDataPointIndex = 0; this.pointCount = 0; this.minX = 0; this.maxX = 0; this.firstX = NaN; this.minXOnScale = 0; this.maxXOnScale = 0; this.specShift = 0; this.precision = null; this.exportPrecision = null; this.steps = null; this.minorTickCounts = null; this.minYOnScale = 0; this.maxYOnScale = 0; this.minY = 0; this.maxY = 0; this.isShiftZoomedY = false; this.spectrumScaleFactor = 1; this.spectrumYRef = 0; this.userYFactor = 1; this.firstY = 0; this.minY2D = 0; this.maxY2D = 0; this.xFactorForScale = 0; this.yFactorForScale = 0; Clazz.instantialize (this, arguments); }, JSV.common, "ScaleData"); Clazz.prepareFields (c$, function () { this.precision = Clazz.newIntArray (2, 0); this.exportPrecision = Clazz.newIntArray (2, 0); this.steps = Clazz.newDoubleArray (2, 0); this.minorTickCounts = Clazz.newIntArray (2, 0); }); Clazz.makeConstructor (c$, function () { }); Clazz.makeConstructor (c$, function (iStart, iEnd) { this.startDataPointIndex = iStart; this.endDataPointIndex = iEnd; this.pointCount = this.endDataPointIndex - this.startDataPointIndex + 1; }, "~N,~N"); Clazz.makeConstructor (c$, function (coords, start, end, isContinuous, isInverted) { this.minX = JSV.common.Coordinate.getMinX (coords, start, end); this.maxX = JSV.common.Coordinate.getMaxX (coords, start, end); this.minY = JSV.common.Coordinate.getMinY (coords, start, end); if (this.minY > 0 && !isContinuous) this.minY = 0; this.maxY = JSV.common.Coordinate.getMaxY (coords, start, end); this.setScale (isContinuous, isInverted); }, "~A,~N,~N,~B,~B"); Clazz.defineMethod (c$, "setScale", function (isContinuous, isInverted) { this.setXScale (); if (!isContinuous) this.maxXOnScale += this.steps[0] / 2; this.setYScale (this.minY, this.maxY, true, isInverted); }, "~B,~B"); Clazz.defineMethod (c$, "setXScale", function () { var xStep = this.setScaleParams (this.minX, this.maxX, 0); this.firstX = Math.floor (this.minX / xStep) * xStep; if (Math.abs ((this.minX - this.firstX) / xStep) > 0.0001) this.firstX += xStep; this.minXOnScale = this.minX; this.maxXOnScale = this.maxX; }); Clazz.defineMethod (c$, "isYZeroOnScale", function () { return (this.minYOnScale < this.spectrumYRef && this.maxYOnScale > this.spectrumYRef); }); Clazz.defineMethod (c$, "setYScale", function (minY, maxY, setScaleMinMax, isInverted) { if (minY == 0 && maxY == 0) maxY = 1; if (this.isShiftZoomedY) { minY = this.minYOnScale; maxY = this.maxYOnScale; }var yStep = this.setScaleParams (minY, maxY, 1); var dy = (isInverted ? yStep / 2 : yStep / 4); var dy2 = (isInverted ? yStep / 4 : yStep / 2); if (!this.isShiftZoomedY) { this.minYOnScale = (minY == 0 ? 0 : setScaleMinMax ? dy * Math.floor (minY / dy) : minY); this.maxYOnScale = (setScaleMinMax ? dy2 * Math.ceil (maxY * 1.05 / dy2) : maxY); }this.firstY = (minY == 0 ? 0 : Math.floor (minY / dy) * dy); if (this.minYOnScale < 0 && this.maxYOnScale > 0) { this.firstY = 0; while (this.firstY - yStep > this.minYOnScale) this.firstY -= yStep; } else if (this.minYOnScale != 0 && Math.abs ((minY - this.firstY) / dy) > 0.0001) { this.firstY += dy; }if (setScaleMinMax) { this.initMinYOnScale = this.minYOnScale; this.initMaxYOnScale = this.maxYOnScale; this.initMinY = minY; this.initMaxY = maxY; }}, "~N,~N,~B,~B"); Clazz.defineMethod (c$, "scale2D", function (f) { var dy = this.maxY - this.minY; if (f == 1) { this.maxY = this.initMaxY; this.minY = this.initMinY; return; }this.maxY = this.minY + dy / f; }, "~N"); Clazz.defineMethod (c$, "setXRange", function (x1, x2) { this.minX = x1; this.maxX = x2; this.setXScale (); }, "~N,~N"); c$.getXRange = Clazz.defineMethod (c$, "getXRange", function (i, xyCoords, initX, finalX, iStart, iEnd, startIndices, endIndices) { var index = 0; var ptCount = 0; for (index = iStart; index <= iEnd; index++) { var x = xyCoords[index].getXVal (); if (x >= initX) { startIndices[i] = index; break; }} for (; index <= iEnd; index++) { var x = xyCoords[index].getXVal (); ptCount++; if (x >= finalX) { break; }} endIndices[i] = index - 1; return ptCount; }, "~N,~A,~N,~N,~N,~N,~A,~A"); Clazz.defineMethod (c$, "setScaleParams", function (min, max, i) { var dx = (max == min ? 1 : Math.abs (max - min) / 14); var log = Math.log10 (Math.abs (dx)); var exp = Clazz.doubleToInt (Math.floor (log)); this.exportPrecision[i] = exp; this.precision[i] = (exp <= 0 ? Math.min (8, 1 - exp) : exp > 3 ? -2 : 0); var j = 0; var dec = Math.pow (10, log - exp); while (dec > JSV.common.ScaleData.NTICKS[j]) { j++; } this.steps[i] = Math.pow (10, exp) * JSV.common.ScaleData.NTICKS[j]; log = Math.log10 (Math.abs (this.steps[i] * 1.0001e5)); var mantissa = log - Math.floor (log); var n = 0; for (j = 0; j < JSV.common.ScaleData.NTICKS.length; j++) if (Math.abs (mantissa - JSV.common.ScaleData.LOGTICKS[j]) < 0.001) { n = JSV.common.ScaleData.NTICKS[j]; break; } this.minorTickCounts[i] = n; return this.steps[i]; }, "~N,~N,~N"); Clazz.defineMethod (c$, "isInRangeX", function (x) { return (x >= this.minX && x <= this.maxX); }, "~N"); Clazz.defineMethod (c$, "addSpecShift", function (dx) { this.specShift += dx; this.minX += dx; this.maxX += dx; this.minXOnScale += dx; this.maxXOnScale += dx; this.firstX += dx; }, "~N"); Clazz.defineMethod (c$, "getInfo", function (info) { info.put ("specShift", Double.$valueOf (this.specShift)); info.put ("minX", Double.$valueOf (this.minX)); info.put ("maxX", Double.$valueOf (this.maxX)); info.put ("minXOnScale", Double.$valueOf (this.minXOnScale)); info.put ("maxXOnScale", Double.$valueOf (this.maxXOnScale)); info.put ("minY", Double.$valueOf (this.minY)); info.put ("maxY", Double.$valueOf (this.maxY)); info.put ("minYOnScale", Double.$valueOf (this.minYOnScale)); info.put ("maxYOnScale", Double.$valueOf (this.maxYOnScale)); info.put ("minorTickCountX", Integer.$valueOf (this.minorTickCounts[0])); info.put ("xStep", Double.$valueOf (this.steps[0])); return info; }, "java.util.Map"); Clazz.defineMethod (c$, "setMinMax", function (minX, maxX, minY, maxY) { this.minX = minX; this.maxX = maxX; this.minY = minY; this.maxY = maxY; }, "~N,~N,~N,~N"); Clazz.defineMethod (c$, "toX", function (xPixel, xPixel1, drawXAxisLeftToRight) { return this.toXScaled (xPixel, xPixel1, drawXAxisLeftToRight, this.xFactorForScale); }, "~N,~N,~B"); Clazz.defineMethod (c$, "toX0", function (xPixel, xPixel0, xPixel1, drawXAxisLeftToRight) { return this.toXScaled (xPixel, xPixel1, drawXAxisLeftToRight, (this.maxXOnScale - this.minXOnScale) / (xPixel1 - xPixel0)); }, "~N,~N,~N,~B"); Clazz.defineMethod (c$, "toXScaled", function (xPixel, xPixel1, drawXAxisLeftToRight, factor) { return (drawXAxisLeftToRight ? this.maxXOnScale - (xPixel1 - xPixel) * factor : this.minXOnScale + (xPixel1 - xPixel) * factor); }, "~N,~N,~B,~N"); Clazz.defineMethod (c$, "toPixelX", function (dx, xPixel0, xPixel1, drawXAxisLeftToRight) { return this.toPixelXScaled (dx, xPixel0, xPixel1, drawXAxisLeftToRight, this.xFactorForScale); }, "~N,~N,~N,~B"); Clazz.defineMethod (c$, "toPixelX0", function (dx, xPixel0, xPixel1, drawXAxisLeftToRight) { return this.toPixelXScaled (dx, xPixel0, xPixel1, drawXAxisLeftToRight, (this.maxXOnScale - this.minXOnScale) / (xPixel1 - xPixel0)); }, "~N,~N,~N,~B"); Clazz.defineMethod (c$, "toPixelXScaled", function (dx, xPixel0, xPixel1, drawXAxisLeftToRight, factor) { var x = Clazz.doubleToInt ((dx - this.minXOnScale) / factor); return (drawXAxisLeftToRight ? xPixel0 + x : xPixel1 - x); }, "~N,~N,~N,~B,~N"); Clazz.defineMethod (c$, "toY", function (yPixel, yPixel0) { return this.maxYOnScale + (yPixel0 - yPixel) * this.yFactorForScale; }, "~N,~N"); Clazz.defineMethod (c$, "toY0", function (yPixel, yPixel0, yPixel1) { var factor = (this.maxYOnScale - this.minYOnScale) / (yPixel1 - yPixel0); var y = this.maxYOnScale + (yPixel0 - yPixel) * factor; return Math.max (this.minYOnScale, Math.min (y, this.maxYOnScale)); }, "~N,~N,~N"); Clazz.defineMethod (c$, "toPixelY", function (yVal, yPixel1) { return (Double.isNaN (yVal) ? -2147483648 : yPixel1 - Clazz.doubleToInt (((yVal - this.spectrumYRef) * this.userYFactor + this.spectrumYRef - this.minYOnScale) / this.yFactorForScale)); }, "~N,~N"); Clazz.defineMethod (c$, "toPixelY0", function (y, yPixel0, yPixel1) { var factor = (this.maxYOnScale - this.minYOnScale) / (yPixel1 - yPixel0); return Clazz.doubleToInt (yPixel0 + (this.maxYOnScale - y) / factor); }, "~N,~N,~N"); Clazz.defineMethod (c$, "setXYScale", function (xPixels, yPixels, isInverted) { var yRef = this.spectrumYRef; var f = this.spectrumScaleFactor; var useInit = (f != 1 || this.isShiftZoomedY); var minY = (useInit ? this.initMinYOnScale : this.minY); var maxY = (useInit ? this.initMaxYOnScale : this.maxY); if (useInit && yRef < minY) yRef = minY; if (useInit && yRef > maxY) yRef = maxY; this.setYScale ((minY - yRef) / f + yRef, (maxY - yRef) / f + yRef, f == 1, isInverted); this.xFactorForScale = (this.maxXOnScale - this.minXOnScale) / (xPixels - 1); this.yFactorForScale = (this.maxYOnScale - this.minYOnScale) / (yPixels - 1); }, "~N,~N,~B"); c$.copyScaleFactors = Clazz.defineMethod (c$, "copyScaleFactors", function (sdFrom, sdTo) { for (var i = 0; i < sdFrom.length; i++) { sdTo[i].spectrumScaleFactor = sdFrom[i].spectrumScaleFactor; sdTo[i].spectrumYRef = sdFrom[i].spectrumYRef; sdTo[i].userYFactor = sdFrom[i].userYFactor; sdTo[i].specShift = sdFrom[i].specShift; sdTo[i].isShiftZoomedY = sdFrom[i].isShiftZoomedY; } }, "~A,~A"); c$.copyYScales = Clazz.defineMethod (c$, "copyYScales", function (sdFrom, sdTo) { for (var i = 0; i < sdFrom.length; i++) { sdTo[i].initMinYOnScale = sdFrom[i].initMinYOnScale; sdTo[i].initMaxYOnScale = sdFrom[i].initMaxYOnScale; sdTo[i].minY = sdFrom[i].minY; sdTo[i].maxY = sdFrom[i].maxY; if (sdFrom[i].isShiftZoomedY) { sdTo[i].isShiftZoomedY = true; sdTo[i].minYOnScale = sdFrom[i].minYOnScale; sdTo[i].maxYOnScale = sdFrom[i].maxYOnScale; }} }, "~A,~A"); c$.setDataPointIndices = Clazz.defineMethod (c$, "setDataPointIndices", function (graphsTemp, initX, finalX, minPoints, startIndices, endIndices) { var nSpectraOK = 0; var nSpectra = graphsTemp.size (); for (var i = 0; i < nSpectra; i++) { var xyCoords = graphsTemp.get (i).getXYCoords (); if (JSV.common.ScaleData.getXRange (i, xyCoords, initX, finalX, 0, xyCoords.length - 1, startIndices, endIndices) >= minPoints) nSpectraOK++; } return (nSpectraOK == nSpectra); }, "JU.Lst,~N,~N,~N,~A,~A"); c$.fixScale = Clazz.defineMethod (c$, "fixScale", function (map) { if (map.isEmpty ()) return; while (true) { for (var entry, $entry = map.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) { var s = entry.getValue (); var pt = s.indexOf ("E"); if (pt >= 0) s = s.substring (0, pt); if (s.indexOf (".") < 0) return; if (!s.endsWith ("0") && !s.endsWith (".")) return; } for (var entry, $entry = map.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) { var s = entry.getValue (); var pt = s.indexOf ("E"); if (pt >= 0) entry.setValue (s.substring (0, pt - 1) + s.substring (pt)); else entry.setValue (s.substring (0, s.length - 1)); } } }, "java.util.Map"); Clazz.defineMethod (c$, "scaleBy", function (f) { if (this.isShiftZoomedY) { var center = (this.isYZeroOnScale () ? this.spectrumYRef : (this.minYOnScale + this.maxYOnScale) / 2); this.minYOnScale = center - (center - this.minYOnScale) / f; this.maxYOnScale = center - (center - this.maxYOnScale) / f; } else { this.spectrumScaleFactor *= f; }}, "~N"); Clazz.defineStatics (c$, "NTICKS", Clazz.newIntArray (-1, [2, 5, 10, 10])); c$.LOGTICKS = c$.prototype.LOGTICKS = Clazz.newDoubleArray (-1, [Math.log10 (2), Math.log10 (5), 0, 1]); });