UNPKG

biojs-vis-pdbviewer

Version:

A BioJS 2.0 component to view protein structures

158 lines (156 loc) 8.7 kB
Clazz.declarePackage ("JSV.export"); Clazz.load (["JSV.api.JSVExporter"], "JSV.export.JDXExporter", ["JU.DF", "$.PT", "JSV.common.Coordinate", "$.ExportType", "JSV.export.JDXCompressor", "JSV.source.JDXReader"], function () { c$ = Clazz.decorateAsClass (function () { this.out = null; this.type = null; this.spectrum = null; this.vwr = null; Clazz.instantialize (this, arguments); }, JSV["export"], "JDXExporter", null, JSV.api.JSVExporter); Clazz.makeConstructor (c$, function () { }); Clazz.overrideMethod (c$, "exportTheSpectrum", function (viewer, type, out, spectrum, startIndex, endIndex, pd, asBase64) { this.out = out; this.type = type; this.spectrum = spectrum; this.vwr = viewer; this.toStringAux (startIndex, endIndex); out.closeChannel (); return "OK " + out.getByteCount () + " bytes"; }, "JSV.common.JSViewer,JSV.common.ExportType,JU.OC,JSV.common.Spectrum,~N,~N,JSV.common.PanelData,~B"); Clazz.defineMethod (c$, "toStringAux", function (startIndex, endIndex) { var newXYCoords = this.spectrum.getXYCoords (); var tabDataSet = ""; var tmpDataClass = "XYDATA"; if (this.spectrum.isHZtoPPM ()) { var xyCoords = newXYCoords; newXYCoords = new Array (xyCoords.length); for (var i = 0; i < xyCoords.length; i++) newXYCoords[i] = xyCoords[i].copy (); JSV.common.Coordinate.applyScale (newXYCoords, this.spectrum.getObservedFreq (), 1); }var xCompFactor = this.spectrum.getXFactor (); var isIntegerX = JSV["export"].JDXExporter.areIntegers (newXYCoords, startIndex, endIndex, 1.0, true); if (!isIntegerX && !JSV["export"].JDXExporter.areIntegers (newXYCoords, startIndex, endIndex, xCompFactor, true)) xCompFactor = 1; var minY = JSV.common.Coordinate.getMinY (newXYCoords, startIndex, endIndex); var maxY = JSV.common.Coordinate.getMaxY (newXYCoords, startIndex, endIndex); var yCompFactor = this.spectrum.getYFactor (); switch (this.type) { case JSV.common.ExportType.XY: yCompFactor = 1; tmpDataClass = (this.spectrum.isContinuous () ? "XYDATA" : "XYPOINTS"); break; case JSV.common.ExportType.PAC: yCompFactor = 1; break; default: var isIntegerY = JSV["export"].JDXExporter.areIntegers (newXYCoords, startIndex, endIndex, 1.0, false); if (!isIntegerY && !JSV["export"].JDXExporter.areIntegers (newXYCoords, startIndex, endIndex, yCompFactor, false)) { yCompFactor = (maxY - minY) / 1000000.0; }break; } var step = 1; if (this.spectrum.isExportXAxisLeftToRight () != (this.spectrum.getFirstX () < this.spectrum.getLastX ())) { var t = startIndex; startIndex = endIndex; endIndex = t; step = -1; }switch (this.type) { case JSV.common.ExportType.DIF: case JSV.common.ExportType.DIFDUP: tabDataSet = JSV["export"].JDXCompressor.compressDIF (newXYCoords, startIndex, endIndex, step, xCompFactor, yCompFactor, this.type === JSV.common.ExportType.DIFDUP); break; case JSV.common.ExportType.FIX: tabDataSet = JSV["export"].JDXCompressor.compressFIX (newXYCoords, startIndex, endIndex, step, xCompFactor, yCompFactor); break; case JSV.common.ExportType.PAC: tabDataSet = JSV["export"].JDXCompressor.compressPAC (newXYCoords, startIndex, endIndex, step, xCompFactor, yCompFactor); break; case JSV.common.ExportType.SQZ: tabDataSet = JSV["export"].JDXCompressor.compressSQZ (newXYCoords, startIndex, endIndex, step, xCompFactor, yCompFactor); break; case JSV.common.ExportType.XY: tabDataSet = JSV["export"].JDXCompressor.getXYList (newXYCoords, startIndex, endIndex, step); break; default: break; } var varList = JSV.source.JDXReader.getVarList (tmpDataClass); this.getHeaderString (tmpDataClass, minY, maxY, xCompFactor, yCompFactor, startIndex, endIndex); this.out.append ("##" + tmpDataClass + "= " + varList + JSV["export"].JDXExporter.newLine); this.out.append (tabDataSet); this.out.append ("##END="); }, "~N,~N"); Clazz.defineMethod (c$, "getHeaderString", function (tmpDataClass, minY, maxY, tmpXFactor, tmpYFactor, startIndex, endIndex) { this.out.append ("##TITLE= ").append (this.spectrum.getTitle ()).append (JSV["export"].JDXExporter.newLine); this.out.append ("##JCAMP-DX= 5.01").append (JSV["export"].JDXExporter.newLine); this.out.append ("##DATA TYPE= ").append (this.spectrum.getDataType ()).append (JSV["export"].JDXExporter.newLine); this.out.append ("##DATA CLASS= ").append (tmpDataClass).append (JSV["export"].JDXExporter.newLine); this.out.append ("##ORIGIN= ").append (this.spectrum.getOrigin ()).append (JSV["export"].JDXExporter.newLine); this.out.append ("##OWNER= ").append (this.spectrum.getOwner ()).append (JSV["export"].JDXExporter.newLine); var d = this.spectrum.getDate (); var longdate = ""; var currentTime = this.vwr.apiPlatform.getDateFormat (null); if (this.spectrum.getLongDate ().equals ("") || d.length != 8) { longdate = currentTime + " $$ export date from JSpecView"; } else if (d.length == 8) { longdate = (d.charAt (0) < '5' ? "20" : "19") + d + " " + this.spectrum.getTime (); } else { longdate = this.spectrum.getLongDate (); }this.out.append ("##LONGDATE= ").append (longdate).append (JSV["export"].JDXExporter.newLine); var headerTable = this.spectrum.getHeaderTable (); for (var i = 0; i < headerTable.size (); i++) { var entry = headerTable.get (i); var label = entry[0]; var dataSet = entry[1]; var nl = (dataSet.startsWith ("<") && dataSet.contains ("</") ? JSV["export"].JDXExporter.newLine : ""); this.out.append (label).append ("= ").append (nl).append (dataSet).append (JSV["export"].JDXExporter.newLine); } var observedFreq = this.spectrum.getObservedFreq (); if (!this.spectrum.is1D ()) this.out.append ("##NUM DIM= ").append ("" + this.spectrum.numDim).append (JSV["export"].JDXExporter.newLine); if (observedFreq != 1.7976931348623157E308) this.out.append ("##.OBSERVE FREQUENCY= ").append ("" + observedFreq).append (JSV["export"].JDXExporter.newLine); if (this.spectrum.observedNucl !== "") this.out.append ("##.OBSERVE NUCLEUS= ").append (this.spectrum.observedNucl).append (JSV["export"].JDXExporter.newLine); this.out.append ("##XUNITS= ").append (this.spectrum.isHZtoPPM () ? "HZ" : this.spectrum.getXUnits ()).append (JSV["export"].JDXExporter.newLine); this.out.append ("##YUNITS= ").append (this.spectrum.getYUnits ()).append (JSV["export"].JDXExporter.newLine); this.out.append ("##XFACTOR= ").append (JSV["export"].JDXExporter.fixExponentInt (tmpXFactor)).append (JSV["export"].JDXExporter.newLine); this.out.append ("##YFACTOR= ").append (JSV["export"].JDXExporter.fixExponentInt (tmpYFactor)).append (JSV["export"].JDXExporter.newLine); var f = (this.spectrum.isHZtoPPM () ? observedFreq : 1); var xyCoords = this.spectrum.getXYCoords (); this.out.append ("##FIRSTX= ").append (JSV["export"].JDXExporter.fixExponentInt (xyCoords[startIndex].getXVal () * f)).append (JSV["export"].JDXExporter.newLine); this.out.append ("##FIRSTY= ").append (JSV["export"].JDXExporter.fixExponentInt (xyCoords[startIndex].getYVal ())).append (JSV["export"].JDXExporter.newLine); this.out.append ("##LASTX= ").append (JSV["export"].JDXExporter.fixExponentInt (xyCoords[endIndex].getXVal () * f)).append (JSV["export"].JDXExporter.newLine); this.out.append ("##NPOINTS= ").append ("" + (Math.abs (endIndex - startIndex) + 1)).append (JSV["export"].JDXExporter.newLine); this.out.append ("##MINY= ").append (JSV["export"].JDXExporter.fixExponentInt (minY)).append (JSV["export"].JDXExporter.newLine); this.out.append ("##MAXY= ").append (JSV["export"].JDXExporter.fixExponentInt (maxY)).append (JSV["export"].JDXExporter.newLine); }, "~S,~N,~N,~N,~N,~N,~N"); c$.areIntegers = Clazz.defineMethod (c$, "areIntegers", function (xyCoords, startIndex, endIndex, factor, isX) { for (var i = startIndex; i <= endIndex; i++) { var x = (isX ? xyCoords[i].getXVal () : xyCoords[i].getYVal ()) / factor; if (JSV["export"].JDXExporter.isAlmostInteger (x)) return false; } return true; }, "~A,~N,~N,~N,~B"); c$.isAlmostInteger = Clazz.defineMethod (c$, "isAlmostInteger", function (x) { return (x != 0 && Math.abs (x - Math.floor (x)) / x > 1e-8); }, "~N"); c$.fixExponentInt = Clazz.defineMethod (c$, "fixExponentInt", function (x) { return (x == Math.floor (x) ? String.valueOf (Clazz.doubleToInt (x)) : JU.PT.rep (JSV["export"].JDXExporter.fixExponent (x), "E+00", "")); }, "~N"); c$.fixExponent = Clazz.defineMethod (c$, "fixExponent", function (x) { var s = JU.DF.formatDecimalDbl (x, -7); var pt = s.indexOf ("E"); if (pt < 0) { return s; }if (s.length == pt + 3) s = s.substring (0, pt + 2) + "0" + s.substring (pt + 2); return s; }, "~N"); c$.newLine = c$.prototype.newLine = System.getProperty ("line.separator"); Clazz.defineStatics (c$, "FACTOR_DIVISOR", 1000000); });