forked from chafey/cornerstoneDemo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdicomParser.min.js
2 lines (2 loc) · 14.7 KB
/
dicomParser.min.js
1
2
/*! dicomParser - v0.3.0 - 2014-04-18 | (c) 2014 Chris Hafey | https://github.com/chafey/dicomParser */
!function(a,b){"function"==typeof define&&define.amd?define([],b):(void 0===dicomParser&&(dicomParser={}),dicomParser=b())}(this,function(){function a(a){function b(){h.seek(128);var a=h.readFixedString(4);if("DICM"!==a)throw"dicomParser.parseDicom: DICM prefix not found at location 132"}function c(){b();var a=dicomParser.readDicomElementExplicit(h),c=dicomParser.readUint32(h.byteArray,a.dataOffset),d=h.position+c,e=dicomParser.parseDicomDataSetExplicit(h,d);return e[a.tag]=a,e}function d(a){if(void 0===a.elements.x00020010)throw"dicomParser.parseDicom: missing required meta header attribute 0002,0010";var b=a.elements.x00020010,c=dicomParser.readFixedString(h.byteArray,b.dataOffset,b.length);if("1.2.840.10008.1.2"===c)return!1;if("1.2.840.10008.1.2.2"===c)throw"dicomParser.parseDicom: explicit big endian transfer syntax not supported";return!0}function e(a,b){for(var c in a.elements)a.elements.hasOwnProperty(c)&&(b.elements[c]=a.elements[c]);return b}function f(a){var b=d(a);return b?dicomParser.parseDicomDataSetExplicit(h):dicomParser.parseDicomDataSetImplicit(h)}function g(){var a=c(),b=f(a);return b.warnings=h.warnings,e(a,b)}if(void 0===a)throw"dicomParser.parseDicom: missing required parameter 'byteArray'";var h=new dicomParser.LittleEndianByteStream(a);return g()}return void 0===dicomParser?{parseDicom:a}:(dicomParser.parseDicom=a,dicomParser)});var dicomParser=function(a){"use strict";return void 0===a&&(a={}),a.readUint16=function(a,b){if(0>b)throw"dicomParser.readUint16: position cannot be less than 0";if(b+2>a.length)throw"dicomParser.readUint16: attempt to read past end of buffer";return a[b]+256*a[b+1]},a.readInt16=function(a,b){if(0>b)throw"dicomParser.readInt16: position cannot be less than 0";if(b+2>a.length)throw"dicomParser.readInt16: attempt to read past end of buffer";var c=a[b]+(a[b+1]<<8);return 32768&c&&(c=c-65535-1),c},a.readUint32=function(a,b){if(0>b)throw"dicomParser.readUint32: position cannot be less than 0";if(b+4>a.length)throw"dicomParser.readUint32: attempt to read past end of buffer";var c=a[b]+256*a[b+1]+256*a[b+2]*256+256*a[b+3]*256*256;return c},a.readInt32=function(a,b){if(0>b)throw"dicomParser.readInt32: position cannot be less than 0";if(b+4>a.length)throw"dicomParser.readInt32: attempt to read past end of buffer";var c=a[b]+(a[b+1]<<8)+(a[b+2]<<16)+(a[b+3]<<24);return c},a.readFloat=function(a,b){if(0>b)throw"dicomParser.readFloat: position cannot be less than 0";if(b+4>a.length)throw"dicomParser.readFloat: attempt to read past end of buffer";var c=new Uint8Array(4);c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3];var d=new Float32Array(c.buffer);return d[0]},a.readDouble=function(a,b){if(0>b)throw"dicomParser.readDouble: position cannot be less than 0";if(b+8>a.length)throw"dicomParser.readDouble: attempt to read past end of buffer";var c=new Uint8Array(8);c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3],c[4]=a[4],c[5]=a[5],c[6]=a[6],c[7]=a[7];var d=new Float64Array(c.buffer);return d[0]},a.readFixedString=function(a,b,c){if(0>c)throw"readFixedString - length cannot be less than 0";if(b+c>a.length)throw"dicomParser.readFixedString: attempt to read past end of buffer";for(var d="",e=0;c>e;e++){var f=a[b+e];if(0===f)return b+=c,d;d+=String.fromCharCode(f)}return d},a}(dicomParser),dicomParser=function(a){"use strict";return void 0===a&&(a={}),a.DataSet=function(a,b){this.byteArray=a,this.elements=b},a.DataSet.prototype.uint16=function(b,c){var d=this.elements[b];return c=void 0!==c?c:0,d&&0!==d.length?a.readUint16(this.byteArray,d.dataOffset+2*c):void 0},a.DataSet.prototype.int16=function(b,c){var d=this.elements[b];return c=void 0!==c?c:0,d&&0!==d.length?a.readInt16(this.byteArray,d.dataOffset+2*c):void 0},a.DataSet.prototype.uint32=function(b,c){var d=this.elements[b];return c=void 0!==c?c:0,d&&0!==d.length?a.readUint32(this.byteArray,d.dataOffset+4*c):void 0},a.DataSet.prototype.int32=function(b,c){var d=this.elements[b];return c=void 0!==c?c:0,d&&0!==d.length?a.readInt32(this.byteArray,d.dataOffset+4*c):void 0},a.DataSet.prototype.float=function(b,c){var d=this.elements[b];return c=void 0!==c?c:0,d&&0!==d.length?a.readFloat(this.byteArray,d.dataOffset+4*c):void 0},a.DataSet.prototype.double=function(b,c){var d=this.elements[b];return c=void 0!==c?c:0,d&&0!==d.length?a.readDouble(this.byteArray,d.dataOffset+8*c):void 0},a.DataSet.prototype.numStringValues=function(b){var c=this.elements[b];if(c&&c.length>0){var d=a.readFixedString(this.byteArray,c.dataOffset,c.length),e=d.match(/\\/g);return null===e?1:e.length+1}return void 0},a.DataSet.prototype.string=function(b,c){var d=this.elements[b];if(d&&d.length>0){var e=a.readFixedString(this.byteArray,d.dataOffset,d.length);if(c>=0){var f=e.split("\\");return f[c].trim()}return e.trim()}return void 0},a.DataSet.prototype.text=function(b,c){var d=this.elements[b];if(d&&d.length>0){var e=a.readFixedString(this.byteArray,d.dataOffset,d.length);if(c>=0){var f=e.split("\\");return f[c].replace(/ +$/,"")}return e.replace(/ +$/,"")}return void 0},a.DataSet.prototype.floatString=function(a,b){var c=this.elements[a];if(c&&c.length>0){b=void 0!==b?b:0;var d=this.string(a,b);if(void 0!==d)return parseFloat(d)}return void 0},a.DataSet.prototype.intString=function(a,b){var c=this.elements[a];if(c&&c.length>0){b=void 0!==b?b:0;var d=this.string(a,b);if(void 0!==d)return parseInt(d)}return void 0},a.DataSet.prototype.date=function(a){var b=this.string(a);if(b&&8===b.length){var c=parseInt(b.substring(0,4),10),d=parseInt(b.substring(4,6),10),e=parseInt(b.substring(6,8),10);return new Date(c,d-1,e)}return void 0},a.DataSet.prototype.time=function(a){var b=this.string(a);if(b&&b.length>=2){var c=parseInt(b.substring(0,2),10),d=b.length>=4?parseInt(b.substring(2,4),10):0,e=b.length>=6?parseInt(b.substring(4,6),10):0,f=b.length>=8?parseInt(b.substring(7,13),10):0;return{hours:c,minutes:d,seconds:e,fractionalSeconds:f}}return void 0},a.DataSet.prototype.personName=function(a,b){var c=this.string(a,b);if(c){var d=c.split("^");return{familyName:d[0],givenName:d[1],middleName:d[2],prefix:d[3],suffix:d[4]}}return void 0},a}(dicomParser),dicomParser=function(a){"use strict";return void 0===a&&(a={}),a.findItemDelimitationItemAndSetElementLength=function(a,b){if(void 0===a)throw"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'";for(var c=8,d=a.byteArray.length-c;a.position<=d;){var e=a.readUint16();if(65534===e){var f=a.readUint16();if(57357===f){var g=a.readUint32();return 0!==g&&a.warnings("encountered non zero length following item delimeter at position"+a.position-4+" while reading element of undefined length with tag ' + element.tag"),void(b.length=a.position-b.dataOffset)}}}b.length=a.byteArray.length-b.dataOffset,a.seek(a.byteArray.length-a.position)},a}(dicomParser),dicomParser=function(a){"use strict";return void 0===a&&(a={}),a.LittleEndianByteStream=function(a,b){if(void 0===a)throw"dicomParser.LittleEndianByteStream: missing required parameter 'byteArray'";if(a instanceof Uint8Array==!1)throw"dicomParser.LittleEndianByteStream: parameter byteArray is not of type Uint8Array";if(0>b)throw"dicomParser.LittleEndianByteStream: parameter 'position' cannot be less than 0";if(b>=a.length)throw"dicomParser.LittleEndianByteStream: parameter 'position' cannot be greater than or equal to 'byteArray' length";this.byteArray=a,this.position=b?b:0,this.warnings=[]},a.LittleEndianByteStream.prototype.seek=function(a){if(this.position+a<0)throw"cannot seek to position < 0";this.position+=a},a.LittleEndianByteStream.prototype.readByteStream=function(b){if(this.position+b>this.byteArray.length)throw"readByteStream - buffer overread";var c=new Uint8Array(this.byteArray.buffer,this.position,b);return this.position+=b,new a.LittleEndianByteStream(c)},a.LittleEndianByteStream.prototype.readUint16=function(){var b=a.readUint16(this.byteArray,this.position);return this.position+=2,b},a.LittleEndianByteStream.prototype.readUint32=function(){var b=a.readUint32(this.byteArray,this.position);return this.position+=4,b},a.LittleEndianByteStream.prototype.readFixedString=function(b){var c=a.readFixedString(this.byteArray,this.position,b);return this.position+=b,c},a}(dicomParser),dicomParser=function(a){"use strict";return void 0===a&&(a={}),a.parseDicomDataSetExplicit=function(b,c){if(c=void 0===c?b.byteArray.length:c,void 0===b)throw"dicomParser.parseDicomDataSetExplicit: missing required parameter 'byteStream'";if(c<b.position||c>b.byteArray.length)throw"dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxPosition'";for(var d={};b.position<c;){var e=a.readDicomElementExplicit(b);d[e.tag]=e}return new a.DataSet(b.byteArray,d)},a.parseDicomDataSetImplicit=function(b,c){if(c=void 0===c?b.byteArray.length:c,void 0===b)throw"dicomParser.parseDicomDataSetImplicit: missing required parameter 'byteStream'";if(c<b.position||c>b.byteArray.length)throw"dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'";for(var d={};b.position<c;){var e=a.readDicomElementImplicit(b);d[e.tag]=e}return new a.DataSet(b.byteArray,d)},a}(dicomParser),dicomParser=function(a){"use strict";function b(a){return"OB"===a||"OW"===a||"SQ"===a||"OF"===a||"UT"===a||"UN"===a?4:2}return void 0===a&&(a={}),a.readDicomElementExplicit=function(c){if(void 0===c)throw"dicomParser.readDicomElementExplicit: missing required parameter 'byteStream'";var d={tag:a.readTag(c),vr:c.readFixedString(2)},e=b(d.vr);return 2===e?(d.length=c.readUint16(),d.dataOffset=c.position):(c.seek(2),d.length=c.readUint32(),d.dataOffset=c.position),4294967295===d.length&&(d.hadUndefinedLength=!0),"SQ"===d.vr?(a.readSequenceItemsExplicit(c,d),d):4294967295===d.length?(a.findItemDelimitationItemAndSetElementLength(c,d),d):(c.seek(d.length),d)},a}(dicomParser),dicomParser=function(a){"use strict";return void 0===a&&(a={}),a.readDicomElementImplicit=function(b){if(void 0===b)throw"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'";var c={tag:a.readTag(b),length:b.readUint32(),dataOffset:b.position};4294967295===c.length&&(c.hadUndefinedLength=!0);var d=a.readTag(b);return b.seek(-4),"xfffee000"===d?(a.readSequenceItemsImplicit(b,c),c.length=b.byteArray.length-c.dataOffset,c):4294967295===c.length?(a.findItemDelimitationItemAndSetElementLength(b,c),c):(b.seek(c.length),c)},a}(dicomParser),dicomParser=function(a){"use strict";function b(b,c,d,e){if(e>=d.length)throw"readFrame: parameter frame refers to frame not in frameOffsets";var f=d[e];b.position=c+f;var g=b.byteArray.length;e<d.length-1&&(g=d[e+1]);for(var h=[],i=0;b.position<g;){var j=a.readSequenceItem(b);if("xfffee0dd"===j.tag)break;h.push(j),i+=j.length,b.seek(j.length)}if(1===h.length)return new Uint8Array(b.byteArray.buffer,h[0].dataOffset,h[0].length);for(var k=new Uint8Array(i),l=0,m=0;m<h.length;m++)for(var n=h[m].dataOffset,o=0;o<h[m].length;o++)k[l++]=b.byteArray[n++];return k}return void 0===a&&(a={}),a.readEncapsulatedPixelData=function(c,d){if(void 0===c)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'dataSet'";if(void 0===d)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'frame'";var e=c.elements.x7fe00010;if(void 0===e)throw"dicomParser.readEncapsulatedPixelData: pixel data element x7fe00010 not present";var f=new a.LittleEndianByteStream(c.byteArray);f.seek(e.dataOffset);var g=a.readSequenceItem(f);if("xfffee000"!==g.tag)throw"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000";var h=g.length/4;if(d>h-1)throw"dicomParser.readEncapsulatedPixelData: parameter frame exceeds number of frames in basic offset table";for(var i=[],j=0;h>j;j++){var k=f.readUint32();i.push(k)}var l=f.position,m=b(f,l,i,d);return m},a}(dicomParser),dicomParser=function(a){"use strict";function b(b){for(var c={};b.position<b.byteArray.length;){var d=a.readDicomElementExplicit(b);if(c[d.tag]=d,"xfffee00d"===d.tag)return new a.DataSet(b.byteArray,c)}return b.warnings.push("eof encountered before finding sequence delimitation item while reading sequence item of undefined length"),new a.DataSet(b.byteArray,c)}function c(c){var d=a.readSequenceItem(c);return 4294967295===d.length?(d.hadUndefinedLength=!0,d.dataSet=b(c),d.length=c.position-d.dataOffset):d.dataSet=a.parseDicomDataSetExplicit(c,c.position+d.length),d}function d(a,b){for(;a.position<a.byteArray.length;){var d=c(a);if(b.items.push(d),"xfffee0dd"===d.tag)return void(b.length=a.position-b.dataOffset)}a.warnings.push("eof encountered before finding sequence delimitation item in sequence element of undefined length with tag "+b.tag),b.length=a.byteArray.length-b.dataOffset}function e(a,b){for(var d=b.dataOffset+b.length;a.position<d;){var e=c(a);b.items.push(e)}}return void 0===a&&(a={}),a.readSequenceItemsExplicit=function(a,b){if(void 0===a)throw"dicomParser.readSequenceItemsExplicit: missing required parameter 'byteStream'";if(void 0===b)throw"dicomParser.readSequenceItemsExplicit: missing required parameter 'element'";b.items=[],4294967295===b.length?d(a,b):e(a,b)},a}(dicomParser),dicomParser=function(a){"use strict";function b(b){for(var c={};b.position<b.byteArray.length;){var d=a.readDicomElementImplicit(b);if(c[d.tag]=d,"xfffee00d"===d.tag)return new a.DataSet(b.byteArray,c)}return b.warnings.push("eof encountered before finding sequence item delimeter in sequence item of undefined length"),new a.DataSet(b.byteArray,c)}function c(c){var d=a.readSequenceItem(c);return 4294967295===d.length?(d.hadUndefinedLength=!0,d.dataSet=b(c),d.length=c.position-d.dataOffset):d.dataSet=a.parseDicomDataSetImplicit(c,c.position+d.length),d}function d(a,b){for(;a.position<a.byteArray.length;){var d=c(a);if(b.items.push(d),"xfffee0dd"===d.tag)return void(b.length=a.position-b.dataOffset)}a.warnings.push("eof encountered before finding sequence delimitation item in sequence of undefined length"),b.length=a.byteArray.length-b.dataOffset}function e(a,b){for(var d=b.dataOffset+b.length;a.position<d;){var e=c(a);b.items.push(e)}}return void 0===a&&(a={}),a.readSequenceItemsImplicit=function(a,b){if(void 0===a)throw"dicomParser.readSequenceItemsImplicit: missing required parameter 'byteStream'";if(void 0===b)throw"dicomParser.readSequenceItemsImplicit: missing required parameter 'element'";b.items=[],4294967295===b.length?d(a,b):e(a,b)},a}(dicomParser),dicomParser=function(a){"use strict";return void 0===a&&(a={}),a.readSequenceItem=function(b){if(void 0===b)throw"dicomParser.readSequenceItem: missing required parameter 'byteStream'";var c={tag:a.readTag(b),length:b.readUint32(),dataOffset:b.position};return c},a}(dicomParser),dicomParser=function(a){"use strict";return void 0===a&&(a={}),a.readTag=function(a){if(void 0===a)throw"dicomParser.readTag: missing required parameter 'byteStream'";var b=256*a.readUint16()*256,c=a.readUint16(),d="x"+("00000000"+(b+c).toString(16)).substr(-8);return d},a}(dicomParser);