Clazz.declarePackage ("JSV.common"); Clazz.load (["java.lang.Enum", "JSV.common.MeasurementData", "$.IntegralComparator"], "JSV.common.IntegralData", ["java.lang.Double", "java.util.Collections", "$.StringTokenizer", "JU.AU", "$.BS", "$.DF", "$.Lst", "$.PT", "JSV.common.Annotation", "$.Coordinate", "$.Integral", "$.ScriptToken"], function () { c$ = Clazz.decorateAsClass (function () { this.percentMinY = 0; this.percentOffset = 0; this.intRange = 0; this.normalizationFactor = 1; this.percentRange = 0; this.offset = 0; this.integralTotal = 0; this.haveRegions = false; this.xyCoords = null; Clazz.instantialize (this, arguments); }, JSV.common, "IntegralData", JSV.common.MeasurementData); Clazz.defineMethod (c$, "getPercentMinimumY", function () { return this.percentMinY; }); Clazz.defineMethod (c$, "getPercentOffset", function () { return this.percentOffset; }); Clazz.defineMethod (c$, "getIntegralFactor", function () { return this.intRange; }); Clazz.makeConstructor (c$, function (integralMinY, integralOffset, integralRange, spec) { Clazz.superConstructor (this, JSV.common.IntegralData, [JSV.common.Annotation.AType.Integration, spec]); this.percentMinY = integralMinY; this.percentOffset = integralOffset; this.percentRange = integralRange; this.calculateIntegral (); }, "~N,~N,~N,JSV.common.Spectrum"); Clazz.makeConstructor (c$, function (spec, p) { Clazz.superConstructor (this, JSV.common.IntegralData, [JSV.common.Annotation.AType.Integration, spec]); if (p == null) { this.autoIntegrate (); return; }this.percentOffset = p.integralOffset; this.percentRange = p.integralRange; this.calculateIntegral (); }, "JSV.common.Spectrum,JSV.common.Parameters"); Clazz.defineMethod (c$, "update", function (parameters) { this.update (parameters.integralMinY, parameters.integralOffset, parameters.integralRange); }, "JSV.common.Parameters"); Clazz.defineMethod (c$, "update", function (integralMinY, integralOffset, integralRange) { var percentRange0 = this.percentRange; if (integralRange <= 0 || integralRange == this.percentRange && integralOffset == this.percentOffset) return; this.percentOffset = integralOffset; this.percentRange = integralRange; this.checkRange (); var intRangeNew = integralRange / 100 / this.integralTotal; var offsetNew = integralOffset / 100; for (var i = 0; i < this.xyCoords.length; i++) { var y = this.xyCoords[i].getYVal (); y = (y - this.offset) / this.intRange; this.xyCoords[i].setYVal (y * intRangeNew + offsetNew); } if (this.normalizationFactor != 1) this.normalizationFactor *= percentRange0 / integralRange; if (this.haveRegions) { for (var i = this.size (); --i >= 0; ) { var ir = this.get (i); var y1 = this.getYValueAt (ir.getXVal ()); var y2 = this.getYValueAt (ir.getXVal2 ()); ir.setYVal (y1); ir.setYVal2 (y2); ir.setValue (Math.abs (y2 - y1) * 100 * this.normalizationFactor); } }this.intRange = intRangeNew; this.offset = offsetNew; }, "~N,~N,~N"); Clazz.defineMethod (c$, "getYValueAt", function (x) { return JSV.common.Coordinate.getYValueAt (this.xyCoords, x); }, "~N"); Clazz.defineMethod (c$, "addIntegralRegion", function (x1, x2) { if (Double.isNaN (x1)) { this.haveRegions = false; this.clear (); return null; }if (Double.isNaN (x2)) { return this.splitIntegral (x1); }if (x1 == x2) return null; if (x1 < x2) { this.clear (x1, x2); return null; }var y1 = this.getYValueAt (x1); var y2 = this.getYValueAt (x2); this.haveRegions = true; var $in = new JSV.common.Integral ().setInt (x1, y1, this.spec, Math.abs (y2 - y1) * 100 * this.normalizationFactor, x2, y2); this.clear (x1, x2); this.addLast ($in); java.util.Collections.sort (this, JSV.common.IntegralData.c); return $in; }, "~N,~N"); Clazz.defineMethod (c$, "splitIntegral", function (x) { var i = this.find (x); if (i < 0) return null; var integral = this.removeItemAt (i); var x0 = integral.getXVal (); var x2 = integral.getXVal2 (); this.addIntegralRegion (x0, x); return this.addIntegralRegion (x, x2); }, "~N"); Clazz.overrideMethod (c$, "setSpecShift", function (dx) { JSV.common.Coordinate.shiftX (this.xyCoords, dx); for (var i = this.size (); --i >= 1; ) { this.get (i).addSpecShift (dx); } }, "~N"); Clazz.defineMethod (c$, "addMarks", function (ppms) { ppms = JU.PT.rep (" " + ppms, ",", " "); ppms = JU.PT.rep (ppms, " -", " #"); ppms = JU.PT.rep (ppms, "--", "-#"); ppms = ppms.$replace ('-', '^'); ppms = ppms.$replace ('#', '-'); var tokens = JSV.common.ScriptToken.getTokens (ppms); for (var i = 0; i < tokens.size (); i++) { try { var s = tokens.get (i); var norm = 0; var pt = s.indexOf ('^'); if (pt < 0) continue; var pt2 = s.indexOf (':'); if (pt2 > pt) { norm = Double.$valueOf (s.substring (pt2 + 1).trim ()).doubleValue (); s = s.substring (0, pt2).trim (); }var x2 = Double.$valueOf (s.substring (0, pt).trim ()).doubleValue (); var x1 = Double.$valueOf (s.substring (pt + 1).trim ()).doubleValue (); if (x1 == 0 && x2 == 0) this.clear (); if (x1 == x2) continue; var m = this.addIntegralRegion (Math.max (x1, x2), Math.min (x1, x2)); if (m != null && norm > 0) this.setSelectedIntegral (m, norm); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { continue; } else { throw e; } } } }, "~S"); Clazz.defineMethod (c$, "calculateIntegral", function () { var specXyCoords = this.spec.getXYCoords (); this.xyCoords = new Array (specXyCoords.length); this.integralTotal = 0; this.checkRange (); var minY = 1E100; for (var i = 0; i < specXyCoords.length; i++) { var y = specXyCoords[i].getYVal (); if (y < minY && y >= 0) minY = y; } var minI = 1E100; var maxI = -1.0E100; for (var i = 0; i < specXyCoords.length; i++) { var y = specXyCoords[i].getYVal (); this.integralTotal += (y - minY); if (this.integralTotal < minI) minI = this.integralTotal; if (this.integralTotal > maxI) maxI = this.integralTotal; } this.integralTotal = maxI - minI; this.intRange = (this.percentRange / 100) / this.integralTotal; this.offset = (this.percentOffset / 100); var integral = 0; for (var i = specXyCoords.length; --i >= 0; ) { var y = specXyCoords[i].getYVal (); integral += (y - minY); this.xyCoords[i] = new JSV.common.Coordinate ().set (specXyCoords[i].getXVal (), integral * this.intRange + this.offset); } return this.xyCoords; }); Clazz.defineMethod (c$, "checkRange", function () { this.percentOffset = Math.max (5, this.percentOffset); this.percentRange = Math.max (10, this.percentRange); }); c$.getIntegrationRatiosFromString = Clazz.defineMethod (c$, "getIntegrationRatiosFromString", function (spec, key_values) { var ratios = new JU.Lst (); var allParamTokens = new java.util.StringTokenizer (key_values, ","); while (allParamTokens.hasMoreTokens ()) { var token = allParamTokens.nextToken (); var eachParam = new java.util.StringTokenizer (token, ":"); var ratio = new JSV.common.Annotation ().setA (Double.parseDouble (eachParam.nextToken ()), 0.0, spec, eachParam.nextToken (), true, false, 0, 0); ratios.addLast (ratio); } return ratios; }, "JSV.common.Spectrum,~S"); Clazz.defineMethod (c$, "getXYCoords", function () { return this.xyCoords; }); Clazz.defineMethod (c$, "getPercentYValueAt", function (x) { return this.getYValueAt (x) * 100; }, "~N"); Clazz.defineMethod (c$, "dispose", function () { this.spec = null; this.xyCoords = null; }); Clazz.defineMethod (c$, "setSelectedIntegral", function (integral, val) { var val0 = integral.getValue (); var factor = (val <= 0 ? 1 / this.normalizationFactor : val / val0); this.factorAllIntegrals (factor, val <= 0); }, "JSV.common.Measurement,~N"); Clazz.defineMethod (c$, "factorAllIntegrals", function (factor, isReset) { for (var i = 0; i < this.size (); i++) { var m = this.get (i); m.setValue (factor * m.getValue ()); } this.normalizationFactor = (isReset ? 1 : this.normalizationFactor * factor); }, "~N,~B"); Clazz.defineMethod (c$, "remove", function (i) { return this.removeItemAt (i); }, "~N"); Clazz.defineMethod (c$, "getBitSet", function () { var bs = JU.BS.newN (this.xyCoords.length); if (this.size () == 0) { bs.setBits (0, this.xyCoords.length); return bs; }for (var i = this.size (); --i >= 0; ) { var m = this.get (i); var x1 = JSV.common.Coordinate.getNearestIndexForX (this.xyCoords, m.getXVal ()); var x2 = JSV.common.Coordinate.getNearestIndexForX (this.xyCoords, m.getXVal2 ()); bs.setBits (Math.min (x1, x2), Math.max (x1, x2)); } return bs; }); Clazz.overrideMethod (c$, "getMeasurementListArray", function (units) { var data = new Array (this.size ()); for (var pt = 0, i = this.size (); --i >= 0; ) data[pt++] = Clazz.newArray (-1, ["" + pt, JU.DF.formatDecimalDbl (this.get (i).getXVal (), 2), JU.DF.formatDecimalDbl (this.get (i).getXVal2 (), 2), this.get (i).text]); return data; }, "~S"); Clazz.overrideMethod (c$, "getMeasurementListArrayReal", function (units) { var data = JU.AU.newDouble2 (this.size ()); for (var pt = 0, i = this.size (); --i >= 0; pt++) data[pt] = Clazz.newDoubleArray (-1, [this.get (i).getXVal (), this.get (i).getXVal2 (), this.get (i).getValue ()]); return data; }, "~S"); Clazz.overrideMethod (c$, "getDataHeader", function () { return JSV.common.IntegralData.$HEADER; }); Clazz.defineMethod (c$, "shiftY", function (yOld, yNew, yPixel0, yPixels) { var pt = Clazz.doubleToInt (100.0 * (yPixel0 + yPixels - yNew) / yPixels); if (yOld < 0) pt -= this.percentOffset; if (yOld < 0) { this.update (0, this.percentOffset, pt); } else { this.update (0, pt, this.percentRange); }}, "~N,~N,~N,~N"); Clazz.defineMethod (c$, "autoIntegrate", function () { if (this.xyCoords == null) this.calculateIntegral (); if (this.xyCoords.length == 0) return; this.clear (); var iStart = -1; var cutoff = 0.0001; var nCount = 0; var nMin = 20; var y0 = this.xyCoords[this.xyCoords.length - 1].getYVal (); for (var i = this.xyCoords.length - 1; --i >= 0; ) { var y = this.xyCoords[i].getYVal (); nCount++; if ((y - y0) < cutoff && iStart < 0) { if (y < y0) { y0 = y; nCount = 0; }continue; }if (iStart < 0) { iStart = i + Math.min (nCount, nMin); y0 = y; nCount = 0; continue; }if ((y - y0) < cutoff) { if (nCount == 1) y0 = y; if (nCount >= nMin) { this.addIntegralRegion (this.xyCoords[iStart].getXVal (), this.xyCoords[i].getXVal ()); iStart = -1; y0 = y; nCount = 0; }} else { nCount = 0; y0 = y; }} if (this.spec.nH > 0) this.factorAllIntegrals (this.spec.nH / this.percentRange, false); }); Clazz.defineMethod (c$, "getInfo", function (info) { info.put ("offset", Double.$valueOf (this.myParams.integralOffset)); info.put ("range", Double.$valueOf (this.myParams.integralRange)); info.put ("normalizationFactor", Double.$valueOf (this.normalizationFactor)); info.put ("integralTotal", Double.$valueOf (this.integralTotal)); Clazz.superCall (this, JSV.common.IntegralData, "getInfo", [info]); }, "java.util.Map"); Clazz.defineMethod (c$, "setMinimumIntegral", function (val) { for (var i = this.size (); --i >= 0; ) if (this.get (i).getValue () < val) this.removeItemAt (i); }, "~N"); Clazz.pu$h(self.c$); c$ = Clazz.declareType (JSV.common.IntegralData, "IntMode", Enum); c$.getMode = Clazz.defineMethod (c$, "getMode", function (a) { for (var mode, $mode = 0, $$mode = JSV.common.IntegralData.IntMode.values (); $mode < $$mode.length && ((mode = $$mode[$mode]) || true); $mode++) if (a.startsWith (mode.name ())) return mode; return JSV.common.IntegralData.IntMode.NA; }, "~S"); Clazz.defineEnumConstant (c$, "OFF", 0, []); Clazz.defineEnumConstant (c$, "ON", 1, []); Clazz.defineEnumConstant (c$, "TOGGLE", 2, []); Clazz.defineEnumConstant (c$, "AUTO", 3, []); Clazz.defineEnumConstant (c$, "LIST", 4, []); Clazz.defineEnumConstant (c$, "MARK", 5, []); Clazz.defineEnumConstant (c$, "MIN", 6, []); Clazz.defineEnumConstant (c$, "UPDATE", 7, []); Clazz.defineEnumConstant (c$, "CLEAR", 8, []); Clazz.defineEnumConstant (c$, "NA", 9, []); c$ = Clazz.p0p (); Clazz.defineStatics (c$, "DEFAULT_OFFSET", 30, "DEFAULT_RANGE", 50, "DEFAULT_MINY", 0.1); c$.c = c$.prototype.c = new JSV.common.IntegralComparator (); c$.$HEADER = c$.prototype.$HEADER = Clazz.newArray (-1, ["peak", "start/ppm", "end/ppm", "value"]); });