Clazz.declarePackage ("JSV.source"); Clazz.load (["JSV.source.XMLReader"], "JSV.source.CMLReader", ["java.lang.Double", "java.util.Vector", "JU.PT", "JSV.source.JDXSource"], function () { c$ = Clazz.decorateAsClass (function () { this.specfound = false; this.Ydelim = ""; this.peakData = null; Clazz.instantialize (this, arguments); }, JSV.source, "CMLReader", JSV.source.XMLReader); Clazz.makeConstructor (c$, function () { Clazz.superConstructor (this, JSV.source.CMLReader, []); }); Clazz.overrideMethod (c$, "getXML", function (br) { try { this.source = new JSV.source.JDXSource (0, this.filePath); this.getSimpleXmlReader (br); this.processXML (4, 10); if (!this.checkPointCount ()) return null; this.populateVariables (); } catch (pe) { if (Clazz.exceptionOf (pe, Exception)) { System.err.println ("Error: " + pe); } else { throw pe; } } this.processErrors ("CML"); try { br.close (); } catch (e1) { if (Clazz.exceptionOf (e1, java.io.IOException)) { } else { throw e1; } } return this.source; }, "java.io.BufferedReader"); Clazz.overrideMethod (c$, "processTag", function (tagId) { switch (tagId) { case 4: this.processSpectrum (); return false; case 9: this.processSpectrumData (); return true; case 10: this.processPeaks (); return false; case 8: this.processSample (); return true; case 5: this.processMetadataList (); return true; case 6: this.processConditionList (); return true; case 7: this.processParameterList (); return true; case 12: this.processPeakList (); return true; default: System.out.println ("CMLSource not processing tag " + JSV.source.XMLReader.tagNames[tagId]); return false; } }, "~N"); Clazz.overrideMethod (c$, "processEndTag", function (tagId) { }, "~N"); Clazz.defineMethod (c$, "processSpectrum", function () { if (this.attrList.contains ("title")) this.title = this.parser.getAttrValue ("title"); else if (this.attrList.contains ("id")) this.title = this.parser.getAttrValue ("id"); if (this.attrList.contains ("type")) this.techname = this.parser.getAttrValue ("type").toUpperCase () + " SPECTRUM"; }); Clazz.defineMethod (c$, "processMetadataList", function () { if (this.tagName.equals ("metadata")) { this.tagName = this.parser.getAttrValueLC ("name"); if (this.tagName.contains (":origin")) { if (this.attrList.contains ("content")) this.origin = this.parser.getAttrValue ("content"); else this.origin = this.parser.thisValue (); } else if (this.tagName.contains (":owner")) { if (this.attrList.contains ("content")) this.owner = this.parser.getAttrValue ("content"); else this.owner = this.parser.thisValue (); } else if (this.tagName.contains ("observenucleus")) { if (this.attrList.contains ("content")) this.obNucleus = this.parser.getAttrValue ("content"); else this.obNucleus = this.parser.thisValue (); }}}); Clazz.defineMethod (c$, "processParameterList", function () { if (this.tagName.equals ("parameter")) { var title = this.parser.getAttrValueLC ("title"); if (title.equals ("nmr.observe frequency")) { this.StrObFreq = this.parser.qualifiedValue (); this.obFreq = Double.parseDouble (this.StrObFreq); } else if (title.equals ("nmr.observe nucleus")) { this.obNucleus = this.parser.getAttrValue ("value"); } else if (title.equals ("spectrometer/data system")) { this.modelType = this.parser.getAttrValue ("value"); } else if (title.equals ("resolution")) { this.resolution = this.parser.qualifiedValue (); }}}); Clazz.defineMethod (c$, "processConditionList", function () { if (this.tagName.equals ("scalar")) { var dictRef = this.parser.getAttrValueLC ("dictRef"); if (dictRef.contains (":field")) { this.StrObFreq = this.parser.thisValue (); if (this.StrObFreq.charCodeAt (0) > 47 && this.StrObFreq.charCodeAt (0) < 58) this.obFreq = Double.parseDouble (this.StrObFreq); }}}); Clazz.defineMethod (c$, "processSample", function () { if (this.tagName.equals ("formula")) { if (this.attrList.contains ("concise")) this.molForm = this.parser.getAttrValue ("concise"); else if (this.attrList.contains ("inline")) this.molForm = this.parser.getAttrValue ("inline"); } else if (this.tagName.equals ("name")) { this.casName = this.parser.thisValue (); }}); Clazz.defineMethod (c$, "processSpectrumData", function () { if (this.tagName.equals ("xaxis")) { if (this.attrList.contains ("multipliertodata")) this.xFactor = Double.parseDouble (this.parser.getAttrValue ("multiplierToData")); this.parser.nextTag (); this.tagName = this.parser.getTagName (); this.attrList = this.parser.getAttributeList (); if (this.tagName.equals ("array")) { this.xUnits = JSV.source.CMLReader.checkUnits (this.parser.getAttrValue ("units")); this.npoints = Integer.parseInt (this.parser.getAttrValue ("size")); this.xaxisData = Clazz.newDoubleArray (this.npoints, 0); if (this.attrList.contains ("start")) { this.firstX = Double.parseDouble (this.parser.getAttrValue ("start")); this.lastX = Double.parseDouble (this.parser.getAttrValue ("end")); this.deltaX = (this.lastX - this.firstX) / (this.npoints - 1); this.increasing = this.deltaX > 0 ? true : false; this.continuous = true; for (var j = 0; j < this.npoints; j++) this.xaxisData[j] = this.firstX + (this.deltaX * j); } else { var posDelim = 0; var jj = -1; var tempX = ""; this.Ydelim = " "; this.attrList = this.parser.getCharacters ().$replace ('\n', ' ').$replace ('\r', ' ').trim (); do { jj++; posDelim = this.attrList.indexOf (this.Ydelim); tempX = this.attrList.substring (0, posDelim); this.xaxisData[jj] = Double.parseDouble (tempX) * this.xFactor; this.attrList = this.attrList.substring (posDelim + 1, this.attrList.length).trim (); posDelim = this.attrList.indexOf (this.Ydelim); while (posDelim > 0) { jj++; tempX = this.attrList.substring (0, posDelim); this.xaxisData[jj] = Double.parseDouble (tempX) * this.xFactor; this.attrList = this.attrList.substring (posDelim + 1, this.attrList.length).trim (); posDelim = this.attrList.indexOf (this.Ydelim); } if (jj < this.npoints - 1) { jj++; this.xaxisData[jj] = Double.parseDouble (this.attrList) * this.xFactor; }} while (jj < this.npoints - 1); this.firstX = this.xaxisData[0]; this.lastX = this.xaxisData[this.npoints - 1]; this.continuous = true; }}} else if (this.tagName.equals ("yaxis")) { if (this.attrList.contains ("multipliertodata")) this.yFactor = Double.parseDouble (this.parser.getAttrValue ("multiplierToData")); this.parser.nextTag (); this.tagName = this.parser.getTagName (); this.attrList = this.parser.getAttributeList (); if (this.tagName.equals ("array")) { this.yUnits = JSV.source.CMLReader.checkUnits (this.parser.getAttrValue ("units")); var npointsY = Integer.$valueOf (this.parser.getAttrValue ("size")); if (this.npoints != npointsY.intValue ()) System.err.println ("npoints variation between X and Y arrays"); this.yaxisData = Clazz.newDoubleArray (this.npoints, 0); this.Ydelim = this.parser.getAttrValue ("delimeter"); if (this.Ydelim.equals ("")) this.Ydelim = " "; var posDelim = 0; var jj = -1; var tempY = ""; this.attrList = this.parser.getCharacters ().$replace ('\n', ' ').$replace ('\r', ' ').trim (); do { jj++; posDelim = this.attrList.indexOf (this.Ydelim); tempY = this.attrList.substring (0, posDelim); this.yaxisData[jj] = Double.parseDouble (tempY) * this.yFactor; this.attrList = this.attrList.substring (posDelim + 1, this.attrList.length).trim (); posDelim = this.attrList.indexOf (this.Ydelim); while (posDelim > 0) { jj++; tempY = this.attrList.substring (0, posDelim); this.yaxisData[jj] = Double.parseDouble (tempY) * this.yFactor; this.attrList = this.attrList.substring (posDelim + 1, this.attrList.length).trim (); posDelim = this.attrList.indexOf (this.Ydelim); } if (jj < this.npoints - 1) { jj++; this.yaxisData[jj] = Double.parseDouble (this.attrList) * this.yFactor; }} while (jj < this.npoints - 1); }this.firstY = this.yaxisData[0]; this.specfound = true; }}); Clazz.defineMethod (c$, "processPeaks", function () { if (this.specfound) return; this.peakData = new java.util.Vector (); this.process (12, true); this.npoints = this.peakData.size (); this.xaxisData = Clazz.newDoubleArray (this.npoints, 0); this.yaxisData = Clazz.newDoubleArray (this.npoints, 0); for (var i = 0; i < this.npoints; i++) { var xy = this.peakData.get (i); this.xaxisData[i] = xy[0]; this.yaxisData[i] = xy[1]; } this.peakData = null; this.firstX = this.xaxisData[0]; this.lastX = this.xaxisData[this.npoints - 1]; this.firstY = this.yaxisData[0]; this.increasing = (this.lastX > this.firstX); this.continuous = false; }); Clazz.defineMethod (c$, "processPeakList", function () { if (this.tagName.equals ("peak")) { if (this.attrList.contains ("xvalue")) { var xy = Clazz.newDoubleArray (2, 0); xy[1] = 50; xy[0] = Double.parseDouble (this.parser.getAttrValue ("xValue")); if (this.attrList.contains ("xunits")) this.xUnits = JSV.source.CMLReader.checkUnits (this.parser.getAttrValue ("xUnits")); if (this.attrList.contains ("yvalue")) xy[1] = Double.parseDouble (this.parser.getAttrValue ("yValue")); if (this.attrList.contains ("yunits")) this.yUnits = JSV.source.CMLReader.checkUnits (this.parser.getAttrValue ("yUnits")); if (this.attrList.contains ("atomrefs")) xy[1] = 49 * JU.PT.getTokens (this.parser.getAttrValue ("atomRefs")).length; this.peakData.add (xy); }}}); c$.checkUnits = Clazz.defineMethod (c$, "checkUnits", function (units) { units = units.substring (units.indexOf (":") + 1).toUpperCase (); return (units.equals ("RELABUNDANCE") ? "RELATIVE ABUNDANCE" : units.contains ("ARBITRARY") ? "ARBITRARY UNITS" : units.equals ("MOVERZ") ? "M/Z" : units.equals ("CM-1") ? "1/CM" : units.equals ("NM") ? "NANOMETERS" : units); }, "~S"); });