@cornerstonejs/dicom-image-loader 2.0.0-beta.29 → 2.0.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js +1 -1
- package/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js.map +1 -1
- package/dist/esm/imageLoader/colorSpaceConverters/convertPALETTECOLOR.d.ts +1 -1
- package/dist/esm/imageLoader/colorSpaceConverters/convertPALETTECOLOR.js +2 -2
- package/dist/esm/imageLoader/createImage.js +10 -11
- package/dist/esm/imageLoader/decodeImageFrame.js +2 -2
- package/dist/esm/imageLoader/getImageFrame.js +2 -3
- package/dist/esm/imageLoader/index.d.ts +3 -8
- package/dist/esm/imageLoader/index.js +3 -5
- package/dist/esm/imageLoader/init.d.ts +3 -0
- package/dist/esm/imageLoader/init.js +23 -0
- package/dist/esm/imageLoader/internal/streamRequest.js +3 -2
- package/dist/esm/imageLoader/internal/xhrRequest.js +3 -4
- package/dist/esm/imageLoader/isColorConversionRequired.js +2 -2
- package/dist/esm/imageLoader/registerLoaders.d.ts +1 -1
- package/dist/esm/imageLoader/registerLoaders.js +3 -4
- package/dist/esm/imageLoader/wadors/loadImage.d.ts +2 -2
- package/dist/esm/imageLoader/wadors/loadImage.js +5 -6
- package/dist/esm/imageLoader/wadors/metaData/metaDataProvider.d.ts +1 -1
- package/dist/esm/imageLoader/wadors/metaData/metaDataProvider.js +4 -4
- package/dist/esm/imageLoader/wadors/register.d.ts +1 -1
- package/dist/esm/imageLoader/wadors/register.js +4 -3
- package/dist/esm/imageLoader/wadouri/dataSetCacheManager.js +5 -6
- package/dist/esm/imageLoader/wadouri/dataset-from-partial-content.js +1 -2
- package/dist/esm/imageLoader/wadouri/getEncapsulatedImageFrame.js +4 -6
- package/dist/esm/imageLoader/wadouri/metaData/metaDataProvider.js +3 -3
- package/dist/esm/imageLoader/wadouri/register.d.ts +1 -2
- package/dist/esm/imageLoader/wadouri/register.js +6 -5
- package/dist/esm/index.d.ts +3 -8
- package/dist/esm/index.js +3 -5
- package/dist/esm/types/LoaderOptions.d.ts +0 -2
- package/package.json +3 -2
- package/dist/esm/externalModules.d.ts +0 -5
- package/dist/esm/externalModules.js +0 -41
- package/dist/esm/imageLoader/configure.d.ts +0 -3
- package/dist/esm/imageLoader/configure.js +0 -13
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@cornerstonejs/core"),require("dicom-parser")):"function"==typeof define&&define.amd?define("cornerstoneDICOMImageLoader",["@cornerstonejs/core","dicom-parser"],t):"object"==typeof exports?exports.cornerstoneDICOMImageLoader=t(require("@cornerstonejs/core"),require("dicom-parser")):e.cornerstoneDICOMImageLoader=t(e["@cornerstonejs/core"],e.dicomParser)}(this,((e,t)=>(()=>{"use strict";var n={464:t=>{t.exports=e},713:e=>{e.exports=t}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var a=r[e]={exports:{}};return n[e](a,a.exports,o),a.exports}o.m=n,o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.u=e=>e+".min.js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var t=o.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&!e;)e=n[r--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),o.b=document.baseURI||self.location.href;var a={};return(()=>{function e(e,t,n){if(void 0===e)throw new Error("decodeRGB: rgbBuffer must be defined");if(e.length%3!=0)throw new Error(`decodeRGB: rgbBuffer length ${e.length} must be divisible by 3`);const r=e.length/3;let o=0,a=0;if(n)for(let n=0;n<r;n++)t[a++]=e[o++],t[a++]=e[o++],t[a++]=e[o++],t[a++]=255;else t.set(e)}function t(e,t,n){if(void 0===e)throw new Error("decodeRGB: rgbBuffer must be defined");if(e.length%3!=0)throw new Error(`decodeRGB: rgbBuffer length ${e.length} must be divisible by 3`);const r=e.length/3;let o=0,a=0,i=r,s=2*r;if(n)for(let n=0;n<r;n++)t[o++]=e[a++],t[o++]=e[i++],t[o++]=e[s++],t[o++]=255;else for(let n=0;n<r;n++)t[o++]=e[a++],t[o++]=e[i++],t[o++]=e[s++]}function n(e,t,n){if(void 0===e)throw new Error("convertYBRFullByPixel: ybrBuffer must be defined");if(e.length%3!=0)throw new Error(`convertYBRFullByPixel: ybrBuffer length ${e.length} must be divisible by 3`);const r=e.length/3;let o=0,a=0;if(n)for(let n=0;n<r;n++){const n=e[o++],r=e[o++],i=e[o++];t[a++]=n+1.402*(i-128),t[a++]=n-.34414*(r-128)-.71414*(i-128),t[a++]=n+1.772*(r-128),t[a++]=255}else for(let n=0;n<r;n++){const n=e[o++],r=e[o++],i=e[o++];t[a++]=n+1.402*(i-128),t[a++]=n-.34414*(r-128)-.71414*(i-128),t[a++]=n+1.772*(r-128)}}function r(e,t,n){if(void 0===e)throw new Error("convertYBRFullByPlane: ybrBuffer must be defined");if(e.length%3!=0)throw new Error(`convertYBRFullByPlane: ybrBuffer length ${e.length} must be divisible by 3`);const r=e.length/3;let o=0,a=0,i=r,s=2*r;if(n)for(let n=0;n<r;n++){const n=e[a++],r=e[i++],l=e[s++];t[o++]=n+1.402*(l-128),t[o++]=n-.34414*(r-128)-.71414*(l-128),t[o++]=n+1.772*(r-128),t[o++]=255}else for(let n=0;n<r;n++){const n=e[a++],r=e[i++],l=e[s++];t[o++]=n+1.402*(l-128),t[o++]=n-.34414*(r-128)-.71414*(l-128),t[o++]=n+1.772*(r-128)}}o.r(a),o.d(a,{configure:()=>ft,convertColorSpace:()=>he,convertPALETTECOLOR:()=>h,convertRGBColorByPixel:()=>e,convertRGBColorByPlane:()=>t,convertYBRFullByPixel:()=>n,convertYBRFullByPlane:()=>r,createImage:()=>Te,decodeJPEGBaseline8BitColor:()=>ye,default:()=>mt,external:()=>m,getImageFrame:()=>we,getMinMax:()=>ge,getPixelData:()=>tt,internal:()=>B,isColorImage:()=>Se,isJPEGBaseline8BitColor:()=>dt,wadors:()=>ct,wadouri:()=>Oe});let i,s,l={open(e,t){e.open("get",t,!0)},beforeSend(){},beforeProcessing:e=>Promise.resolve(e.response),imageCreated(){},strict:!1};function c(e){l=Object.assign(l,e)}function u(){return l}const f=()=>new Worker(new URL(o.p+o.u(918),o.b),{type:void 0}),d={set cornerstone(e){i=e;const t=u();d.cornerstone.getWebWorkerManager().registerWorker("dicomImageLoader",f,{maxWorkerInstances:t.maxWebWorkers||1})},get cornerstone(){if(!i&&(i=window&&window.cornerstone,!i))throw new Error("cornerstoneDICOMImageLoader requires a copy of Cornerstone to work properly. Please add cornerstoneDICOMImageLoader.external.cornerstone = cornerstone; to your application.");return i},set dicomParser(e){s=e},get dicomParser(){if(!s){if(!window||!window.dicomParser)throw new Error("cornerstoneDICOMImageLoader requires a copy of dicomParser to work properly. Please add cornerstoneDICOMImageLoader.external.dicomParser = dicomParser; to your application.");s=window.dicomParser}return s}},m=d;function g(e,t){const n=e.length,r=new Uint8ClampedArray(n);for(let o=0;o<n;++o)r[o]=e[o]>>t;return r}function p(e,t,n){const r=e[`${t}PaletteColorLookupTableData`];if(r)return Promise.resolve(r);const o=m.cornerstone.metaData.get("imagePixelModule",e.imageId);return o&&"function"==typeof o.then?o.then((e=>e?e[`${t}PaletteColorLookupTableData`]:n)):Promise.resolve(o?o[`${t}PaletteColorLookupTableData`]:n)}function h(e,t,n){const r=e.columns*e.rows,o=e.pixelData;Promise.all([p(e,"red",null),p(e,"green",null),p(e,"blue",null)]).then((([a,i,s])=>{if(!a||!i||!s)throw new Error("The image does not have a complete color palette. R, G, and B palette data are required.");const l=a.length;let c=0,u=0;const f=e.redPaletteColorLookupTableDescriptor[1],d=8===e.redPaletteColorLookupTableDescriptor[2]?0:8,m=g(a,d),p=g(i,d),h=g(s,d);if(n)for(let e=0;e<r;++e){let e=o[c++];e<f?e=0:e>f+l-1?e=l-1:e-=f,t[u++]=m[e],t[u++]=p[e],t[u++]=h[e],t[u++]=255}else for(let e=0;e<r;++e){let e=o[c++];e<f?e=0:e>f+l-1?e=l-1:e-=f,t[u++]=m[e],t[u++]=p[e],t[u++]=h[e]}}))}function x(e,t){if(e.elements[t]&&6===e.elements[t].length)return[e.uint16(t,0),e.uint16(t,1),e.uint16(t,2)]}function y(e,t,n){const r=[],o=e.elements[t];for(let a=0;a<n[0];a++)16===n[2]?r[a]=e.uint16(t,a):r[a]=e.byteArray[a+o.dataOffset];return r}const b=function(e){const t={samplesPerPixel:e.uint16("x00280002"),photometricInterpretation:e.string("x00280004"),rows:e.uint16("x00280010"),columns:e.uint16("x00280011"),bitsAllocated:e.uint16("x00280100"),bitsStored:e.uint16("x00280101"),highBit:e.uint16("x00280102"),pixelRepresentation:e.uint16("x00280103"),planarConfiguration:e.uint16("x00280006"),pixelAspectRatio:e.string("x00280034")};return function(e,t){0===e.uint16("x00280103")?(t.smallestPixelValue=e.uint16("x00280106"),t.largestPixelValue=e.uint16("x00280107")):(t.smallestPixelValue=e.int16("x00280106"),t.largestPixelValue=e.int16("x00280107"))}(e,t),"PALETTE COLOR"===t.photometricInterpretation&&e.elements.x00281101&&function(e,t){t.redPaletteColorLookupTableDescriptor=x(e,"x00281101"),t.greenPaletteColorLookupTableDescriptor=x(e,"x00281102"),t.bluePaletteColorLookupTableDescriptor=x(e,"x00281103"),0===t.redPaletteColorLookupTableDescriptor[0]&&(t.redPaletteColorLookupTableDescriptor[0]=65536,t.greenPaletteColorLookupTableDescriptor[0]=65536,t.bluePaletteColorLookupTableDescriptor[0]=65536);const n=t.redPaletteColorLookupTableDescriptor[0],r=e.elements.x00281201.length===n?8:16;t.redPaletteColorLookupTableDescriptor[2]!==r&&(t.redPaletteColorLookupTableDescriptor[2]=r,t.greenPaletteColorLookupTableDescriptor[2]=r,t.bluePaletteColorLookupTableDescriptor[2]=r),t.redPaletteColorLookupTableData=y(e,"x00281201",t.redPaletteColorLookupTableDescriptor),t.greenPaletteColorLookupTableData=y(e,"x00281202",t.greenPaletteColorLookupTableDescriptor),t.bluePaletteColorLookupTableData=y(e,"x00281203",t.bluePaletteColorLookupTableDescriptor)}(e,t),t};function P(e,t){let n=t.uint16("x00283002",0);0===n&&(n=65535);let r=0;r=0===e?t.uint16("x00283002",1):t.int16("x00283002",1);const o={id:"1",firstValueMapped:r,numBitsPerEntry:t.uint16("x00283002",2),lut:[]};for(let r=0;r<n;r++)o.lut[r]=0===e?t.uint16("x00283006",r):t.int16("x00283006",r);return o}const w=function(e,t){if(!t||!t.items||!t.items.length)return;const n=[];for(let r=0;r<t.items.length;r++){const o=P(e,t.items[r].dataSet);o&&n.push(o)}return n};const S=function(e){const t=e.string("x00080016");if("1.2.840.10008.5.1.4.1.1.2"===t||"1.2.840.10008.5.1.4.1.1.2.1"===t)return 1;const n=e.floatString("x00281052"),r=e.floatString("x00281053");if(void 0!==n&&void 0!==r){const t=function(e){const t=e.uint16("x00280103"),n=e.uint16("x00280101");return 0===t?0:-1<<n-1}(e);return t*r+n<0?1:0}return e.elements.x00283000&&e.elements.x00283000.length>0?0:e.uint16("x00280103")};const D=function(e,t,n){const r=[],o=e.string(t);if(!o)return;const a=o.split("\\");if(!(n&&a.length<n)){for(let e=0;e<a.length;e++)r.push(parseFloat(a[e]));return r}};const I=function(e){const t=e.indexOf(":");let n=e.substring(t+1);const r=n.indexOf("frame=");let o;if(-1!==r){const e=n.substring(r+6);o=parseInt(e,10),n=n.substring(0,r-1)}return{scheme:e.substring(0,t),url:n,frame:o,pixelDataFrame:void 0!==o?o-1:void 0}};const T=function(e,t,n={},r={}){const{cornerstone:o}=m,a=u(),i=e=>{if("function"==typeof a.errorInterceptor){const t=new Error("request failed");t.request=e,t.response=e.response,t.status=e.status,a.errorInterceptor(t)}},s=new XMLHttpRequest,l=new Promise(((l,c)=>{a.open(s,e,n,r);const u=a.beforeSend(s,t,n,r);s.responseType="arraybuffer";const f=Object.assign({},n,u);Object.keys(f).forEach((function(t){null!==f[t]&&("Accept"===t&&-1!==e.indexOf("accept=")||s.setRequestHeader(t,f[t]))})),r.deferred={resolve:l,reject:c},r.url=e,r.imageId=t,s.onloadstart=function(n){a.onloadstart&&a.onloadstart(n,r);const i={url:e,imageId:t};o.triggerEvent(o.events,"cornerstoneimageloadstart",i)},s.onloadend=function(n){a.onloadend&&a.onloadend(n,r);const i={url:e,imageId:t};o.triggerEvent(o.events,"cornerstoneimageloadend",i)},s.onreadystatechange=function(e){a.onreadystatechange?a.onreadystatechange(e,r):4===s.readyState&&(200===s.status||206===s.status?a.beforeProcessing(s).then(l).catch((()=>{i(s),c(s)})):(i(s),c(s)))},s.onprogress=function(e){const t=e.loaded;let n,o;e.lengthComputable&&(n=e.total,o=Math.round(t/n*100)),a.onprogress&&a.onprogress(e,r)},s.onerror=function(){i(s),c(s)},s.onabort=function(){i(s),c(s)},s.send()}));return l.xhr=s,l};var L=o(464);function C(e,t,n){if(n+e.length>t.length)return!1;let r=n;for(let n=0;n<e.length;n++)if(e[n]!==t[r++])return!1;return!0}const A=function(e,t,n){n=n||0;const r=function(e){const t=new Uint8Array(e.length);for(let n=0,r=e.length;n<r;n++)t[n]=e.charCodeAt(n);return t}(t);for(let t=n;t<e.length;t++)if(r[0]===e[t]&&C(r,e,t))return t;return-1},{ImageQualityStatus:E}=L.Enums;function v(e,t,n){n||={};const r=new Uint8Array(t),o=!!n?.isPartial;if(-1===e.indexOf("multipart"))return{contentType:e,imageQualityStatus:o?E.SUBRESOLUTION:E.FULL_RESOLUTION,pixelData:r};let{tokenIndex:a,responseHeaders:i,boundary:s,multipartContentType:l}=n;if(a||=A(r,"\r\n\r\n"),-1===a)throw new Error("invalid response - no multipart mime header");if(!s){const e=function(e,t,n){t=t||0,n=n||e.length-t;let r="";for(let o=t;o<t+n;o++)r+=String.fromCharCode(e[o]);return r}(r,0,a);if(i=e.split("\r\n"),s=function(e){for(let t=0;t<e.length;t++)if("--"===e[t].substr(0,2))return e[t]}(i),!s)throw new Error("invalid response - no boundary marker")}const c=a+4,u=A(r,s,c);if(-1===u&&!o)throw new Error("invalid response - terminating boundary not found");return l||=function(e){for(let t=0;t<e.length;t++)if("Content-Type:"===e[t].substr(0,13))return e[t].substr(13).trim()}(i),n.tokenIndex=a,n.boundary=s,n.responseHeaders=i,n.multipartContentType=l,n.isPartial=-1===u,{contentType:l,extractDone:!o||-1!==u,tokenIndex:a,responseHeaders:i,boundary:s,multipartContentType:l,pixelData:t.slice(c,u-2)}}const{ImageQualityStatus:O}=L.Enums;function M(e,t=!0){return t?e.imageQualityStatus??O.FULL_RESOLUTION:O.SUBRESOLUTION}const{ProgressiveIterator:F}=L.utilities;function R(e,t,n={},r={}){const o=u(),{retrieveOptions:a={},streamingData:i={}}=r,s=a.minChunkSize||131072,l=new F("streamRequest");return l.generate((async(r,l)=>{const c=Object.assign({},n);Object.keys(c).forEach((function(t){null===c[t]&&(c[t]=void 0),"Accept"===t&&-1!==e.indexOf("accept=")&&(c[t]=void 0)}));try{const o=await fetch(e,{headers:n,signal:void 0});if(200!==o.status)throw new Error(`Couldn't retrieve ${e} got status ${o.status}`);const l=o.body.getReader(),c=o.headers,u=c.get("content-type"),f=Number(c.get("Content-Length"));let d=!1,m=i.encodedData,g=i.lastSize||0;for(i.isPartial=!0;!d;){const{done:n,value:o}=await l.read();if(m=U(m,o),!m){if(d)throw new Error(`Done but no image frame available ${t}`);continue}if(d=n||m.byteLength===f,!d&&m.length<g+s)continue;g=m.length,i.isPartial=!n;const c=v(u,m,i),p=M(a,d),h={url:e,imageId:t,...c,percentComplete:n?100:100*c.pixelData?.length/f,imageQualityStatus:p,done:d};r.add(h,d)}}catch(e){(()=>{if("function"==typeof o.errorInterceptor){const e=new Error("request failed");o.errorInterceptor(e)}})(),console.error(e),l(e)}})),l.getNextPromise()}function U(e,t){if(!e)return t;if(!t)return e;const n=new Uint8Array(e.length+t.length);return n.set(e,0),n.set(t,e.length),n}const B={xhrRequest:T,streamRequest:R,setOptions:c,getOptions:u};function N(e){const{dicomParser:t}=m;let n,r=t.parseDicom(e,{untilTag:"x7fe00010"});r.elements.x7fe00010||console.warn("Pixel data not found!");try{n=t.parseDicom(e)}catch(e){console.error(e),console.log("pixel data dataset:",e.dataSet),n=e.dataSet}return r.elements.x7fe00010=n.elements.x7fe00010,r=function(e){const t=e.elements.x7fe00010.fragments,n=e.byteArray.length;for(const e of t){const{position:t,length:r}=e;r>n-t&&(console.log(`Truncated fragment, changing fragment length from ${e.length} to ${n-t}`),e.length=n-t)}return e}(r),r}async function k(e,t,n){const r=N(e),{uri:o,imageId:a,fileTotalLength:i}=n;return r.fetchMore=async function(s){const l=Object.assign({uri:o,imageId:a,fetchedLength:e.length,lengthToFetch:i-e.length},s),{fetchedLength:c,lengthToFetch:u}=l,{arrayBuffer:f}=await t(o,a,{byteRange:`${c}-${c+u}`}),d=new Uint8Array(f),m=new Uint8Array(r.byteArray.length+d.length);return m.set(r.byteArray),m.set(d,r.byteArray.length),k(m,t,n)},r}function _(e,t,n){const r={};(t?Object.values(t.items[0].dataSet.elements):[]).map((e=>r[e.tag]=e));const o={};return(e?Object.values(e.items[n-1].dataSet.elements):[]).map((e=>o[e.tag]=e)),{shared:r,perFrame:o}}function V(e){if(!e)return;const{elements:t,...n}=e,{x52009230:r,x52009229:o,...a}=t;return{NumberOfFrames:e.intString("x00280008"),PerFrameFunctionalGroupsSequence:r,SharedFunctionalGroupsSequence:o,otherElements:a,otherAttributtes:n}}let $={};function j(e){if($[e])return $[e]}function G(e){if(!e)return!1;const t=e.intString("x00280008");return t&&t>1}const q={_get:j,generateMultiframeWADOURIs:function(e){const t=[],n=j(e);if(G(n)){const r=n.intString("x00280008");for(let n=1;n<=r;n++)t.push(`${e}&frame=${n}`)}else t.push(e);return t},retrieveMultiframeDataset:function(e){const t=function(e){return e.indexOf("&frame=")}(e),n=-1===t?e:e.slice(0,t),r=parseInt(e.slice(t+7),10)||1;let o;return o=$[n]?$[n].dataSet:void 0,{dataSet:o,frame:r}},isMultiframeDataset:function(e){return G(j(e))}};let Y=0,W={};function X(){return{cacheSizeInBytes:Y,numberOfDataSetsCached:Object.keys($).length}}const z={isLoaded:function(e){return void 0!==$[e]},load:function(e,t=T,n){const{cornerstone:r,dicomParser:o}=m;if($[e])return new Promise((t=>{$[e].cacheCount++,t($[e].dataSet)}));if(W[e])return W[e].cacheCount++,W[e];const a=t(e,n),i=new Promise(((s,l)=>{a.then((async function(a){const c={isPartialContent:!1,fileTotalLength:null};if(!(a instanceof ArrayBuffer)){if(!a.arrayBuffer)return l(new Error("If not returning ArrayBuffer, must return object with `arrayBuffer` parameter"));c.isPartialContent=a.flags.isPartialContent,c.fileTotalLength=a.flags.fileTotalLength,a=a.arrayBuffer}const u=new Uint8Array(a);let f;try{f=c.isPartialContent?await k(u,t,{uri:e,imageId:n,fileTotalLength:c.fileTotalLength}):o.parseDicom(u)}catch(e){return l(e)}$[e]={dataSet:f,cacheCount:i.cacheCount},Y+=f.byteArray.length,s(f),r.triggerEvent(r.events,"datasetscachechanged",{uri:e,action:"loaded",cacheInfo:X()})}),l).then((()=>{delete W[e]}),(()=>{delete W[e]}))}));return i.cacheCount=1,W[e]=i,i},unload:function(e){const{cornerstone:t}=m;$[e]&&($[e].cacheCount--,0===$[e].cacheCount&&(Y-=$[e].dataSet.byteArray.length,delete $[e],t.triggerEvent(t.events,"datasetscachechanged",{uri:e,action:"unloaded",cacheInfo:X()})))},getInfo:X,purge:function(){$={},W={},Y=0},get:function(e){let t;if(e.includes("&frame=")){const{frame:n,dataSet:r}=q.retrieveMultiframeDataset(e);t=function(e,t){if(!t)return;const{NumberOfFrames:n,PerFrameFunctionalGroupsSequence:r,SharedFunctionalGroupsSequence:o,otherElements:a}=V(t);if(r||n>1){const{shared:n,perFrame:i}=_(r,o,e),s={elements:{...a,...n,...i}},l=Object.create(t);return Object.assign(l,s)}return t}(n,r)}else $[e]&&(t=$[e].dataSet);return t},update:function(e,t){const n=$[e];n?(Y-=n.dataSet.byteArray.length,n.dataSet=t,Y+=t.byteArray.length,m.cornerstone.triggerEvent(m.cornerstone.events,"datasetscachechanged",{uri:e,action:"updated",cacheInfo:X()})):console.error(`No loaded dataSet for uri ${e}`)}};function H(e){return"RECON TOMO"===e||"RECON GATED TOMO"===e}function Q(e,t){const n=e.string("x00080008");if(n){const e=n.split("\\");if(e.length>t)return e[t]}}function J(e){let t=D(e,"x00200037",6);return!t&&e.elements.x00209116&&(t=D(e.elements.x00209116.items[0].dataSet,"x00200037",6)),t||(t=function(e){let t;const n=e.string("x00080060");if(n?.includes("NM")){const n=Q(e,2);n&&H(n)&&e.elements.x00540022&&(t=D(e.elements.x00540022.items[0].dataSet,"x00200037",6))}return t}(e)),t}function K(e){let t=D(e,"x00200032",3);return!t&&e.elements.x00209113&&(t=D(e.elements.x00209113.items[0].dataSet,"x00200032",3)),t||(t=function(e){let t;const n=e.string("x00080060");if(n?.includes("NM")){const n=Q(e,2);n&&H(n)&&e.elements.x00540022&&(t=D(e.elements.x00540022.items[0].dataSet,"x00200032",3))}return t}(e)),t}function Z(e){let t=D(e,"x00280030",2);return!t&&e.elements.x00289110&&(t=D(e.elements.x00289110.items[0].dataSet,"x00280030",2)),t}function ee(e){let t;return e.elements.x00180050?t=e.floatString("x00180050"):e.elements.x00289110&&e.elements.x00289110.items.length&&e.elements.x00289110.items[0].dataSet.elements.x00180050&&(t=e.elements.x00289110.items[0].dataSet.floatString("x00180050")),t}function te(e,t,n){const r={};for(const o of n)try{const n=t(o,e);if(n){const e={};for(const t in n)if(t in n){e[ne(t)]=n[t]}Object.assign(r,e)}}catch(e){console.error(`Error retrieving ${o} data:`,e)}return r}const ne=e=>e.charAt(0).toUpperCase()+e.slice(1),re=["multiframeModule","generalSeriesModule","patientStudyModule","imagePlaneModule","nmMultiframeGeometryModule","imagePixelModule","modalityLutModule","voiLutModule","sopCommonModule","petIsotopeModule","overlayPlaneModule","transferSyntax","petSeriesModule","petImageModule"];function oe(e){const t=e.elements.x00186011;if(!t||!t.items)return[];return t.items.map((e=>{const t=e.dataSet.double("x0018602c"),n=e.dataSet.double("x0018602e"),r=e.dataSet.uint16("x00186024"),o=e.dataSet.uint16("x00186026");return{regionLocationMinY0:e.dataSet.uint16("x0018601a"),regionLocationMaxY1:e.dataSet.uint16("x0018601e"),regionLocationMinX0:e.dataSet.uint16("x00186018"),regionLocationMaxX1:e.dataSet.uint16("x0018601c"),referencePixelX0:e.dataSet.int32("x00186020")||null,referencePixelY0:e.dataSet.int32("x00186022")||null,physicalDeltaX:t,physicalDeltaY:n,physicalUnitsXDirection:r,physicalUnitsYDirection:o,referencePhysicalPixelValueY:e.dataSet.uint16("x0018602a"),referencePhysicalPixelValueX:e.dataSet.uint16("x00186028"),regionSpatialFormat:e.dataSet.uint16("x00186012"),regionDataType:e.dataSet.uint16("x00186014"),regionFlags:e.dataSet.uint16("x00186016"),transducerFrequency:e.dataSet.uint16("x00186030")}}))}const ae=function e(t,n){const{MetadataModules:r}=m.cornerstone.Enums,{dicomParser:o}=m;if(Array.isArray(n))return;const a=I(n);if(t===r.MULTIFRAME){const e=q.retrieveMultiframeDataset(a.url);if(!e.dataSet)return;const t=function(e,t){if(!e)return;const{NumberOfFrames:n,PerFrameFunctionalGroupsSequence:r,SharedFunctionalGroupsSequence:o}=V(e);if(r||n>1){const{shared:e,perFrame:a}=_(r,o,t);return{NumberOfFrames:n,PerFrameFunctionalInformation:a,SharedFunctionalInformation:e}}return{NumberOfFrames:n}}(e.dataSet,e.frame);return t}let i=a.url;a.frame&&(i=`${i}&frame=${a.frame}`);const s=z.get(i);if(s){if(t===r.GENERAL_STUDY)return{studyDescription:s.string("x00081030"),studyDate:o.parseDA(s.string("x00080020")),studyTime:o.parseTM(s.string("x00080030")||""),accessionNumber:s.string("x00080050")};if(t===r.GENERAL_SERIES)return{modality:s.string("x00080060"),seriesInstanceUID:s.string("x0020000e"),seriesNumber:s.intString("x00200011"),studyInstanceUID:s.string("x0020000d"),seriesDate:o.parseDA(s.string("x00080021")),seriesTime:o.parseTM(s.string("x00080031")||""),acquisitionDate:o.parseDA(s.string("x00080022")),acquisitionTime:o.parseTM(s.string("x00080032")||"")};if(t===r.GENERAL_IMAGE)return{sopInstanceUID:s.string("x00080018"),instanceNumber:s.intString("x00200013"),lossyImageCompression:s.string("x00282110"),lossyImageCompressionRatio:s.floatString("x00282112"),lossyImageCompressionMethod:s.string("x00282114")};if(t===r.PATIENT)return{patientID:s.string("x00100020"),patientName:s.string("x00100010")};if(t===r.PATIENT_STUDY)return{patientAge:s.intString("x00101010"),patientSize:s.floatString("x00101020"),patientSex:s.string("x00100040"),patientWeight:s.floatString("x00101030")};if(t===r.NM_MULTIFRAME_GEOMETRY){const e=s.string("x00080060"),t=Q(s,2);return{modality:e,imageType:s.string("x00080008"),imageSubType:t,imageOrientationPatient:J(s),imagePositionPatient:K(s),sliceThickness:ee(s),pixelSpacing:Z(s),numberOfFrames:s.uint16("x00280008"),isNMReconstructable:H(t)&&e.includes("NM")}}if(t===r.IMAGE_PLANE){const e=J(s),t=K(s),n=Z(s),r=ee(s);let o=null,a=null;n&&(a=n[0],o=n[1]);let i=null,l=null;return e&&(i=[parseFloat(e[0]),parseFloat(e[1]),parseFloat(e[2])],l=[parseFloat(e[3]),parseFloat(e[4]),parseFloat(e[5])]),{frameOfReferenceUID:s.string("x00200052"),rows:s.uint16("x00280010"),columns:s.uint16("x00280011"),imageOrientationPatient:e,rowCosines:i,columnCosines:l,imagePositionPatient:t,sliceThickness:r,sliceLocation:s.floatString("x00201041"),pixelSpacing:n,rowPixelSpacing:a,columnPixelSpacing:o}}if(t===r.CINE)return{frameTime:s.floatString("x00181063")};if(t===r.IMAGE_PIXEL)return b(s);if(t===r.VOI_LUT){const e=S(s);return{windowCenter:D(s,"x00281050",1),windowWidth:D(s,"x00281051",1),voiLUTSequence:w(e,s.elements.x00283010)}}if(t===r.MODALITY_LUT)return{rescaleIntercept:s.floatString("x00281052"),rescaleSlope:s.floatString("x00281053"),rescaleType:s.string("x00281054"),modalityLUTSequence:w(s.uint16("x00280103"),s.elements.x00283000)};if(t===r.SOP_COMMON)return{sopClassUID:s.string("x00080016"),sopInstanceUID:s.string("x00080018")};if(t===r.PET_ISOTOPE){const e=s.elements.x00540016;if(void 0===e)return;const t=e.items[0].dataSet;return{radiopharmaceuticalInfo:{radiopharmaceuticalStartTime:o.parseTM(t.string("x00181072")||""),radionuclideTotalDose:t.floatString("x00181074"),radionuclideHalfLife:t.floatString("x00181075")}}}if(t===r.OVERLAY_PLANE)return function(e){const t=[];for(let n=0;n<=30;n+=2){let r=`x60${n.toString(16)}`;4===r.length&&(r=`x600${n.toString(16)}`);const o=e.elements[`${r}3000`];if(!o)continue;const a=[];for(let t=0;t<o.length;t++)for(let n=0;n<8;n++){const r=e.byteArray[o.dataOffset+t];a[8*t+n]=r>>n&1}t.push({rows:e.uint16(`${r}0010`),columns:e.uint16(`${r}0011`),type:e.string(`${r}0040`),x:e.int16(`${r}0050`,1)-1,y:e.int16(`${r}0050`,0)-1,pixelData:a,description:e.string(`${r}0022`),label:e.string(`${r}1500`),roiArea:e.string(`${r}1301`),roiMean:e.string(`${r}1302`),roiStandardDeviation:e.string(`${r}1303`)})}return{overlays:t}}(s);if("transferSyntax"===t){let e;try{e=s.string("x00020010")}catch(e){}return{transferSyntaxUID:e}}if(t===r.PET_SERIES)return{correctedImage:s.string("x00280051"),units:s.string("x00541001"),decayCorrection:s.string("x00541102")};if(t===r.PET_IMAGE)return{frameReferenceTime:s.floatString(s.string("x00541300")||""),actualFrameDuration:s.intString(s.string("x00181242"))};if(t===r.ULTRASOUND_ENHANCED_REGION)return oe(s);if(t===r.CALIBRATION){if("US"===s.string("x00080060")){return{sequenceOfUltrasoundRegions:oe(s)}}}return"instance"===t?te(n,e,re):void 0}};let ie=[];const se={add:function(e){return"dicomfile:"+(ie.push(e)-1)},get:function(e){return ie[e]},remove:function(e){ie[e]=void 0},purge:function(){ie=[]}};var le=o(713);function ce(e,t){const{dicomParser:n}=m;if(e.elements.x7fe00010&&e.elements.x7fe00010.basicOffsetTable.length)return n.readEncapsulatedImageFrame(e,e.elements.x7fe00010,t);if(function(e){return e.intString("x00280008")!==e.elements.x7fe00010.fragments.length}(e)){const r=n.createJPEGBasicOffsetTable(e,e.elements.x7fe00010);return n.readEncapsulatedImageFrame(e,e.elements.x7fe00010,t,r)}const r=e.elements.x7fe00010.fragments,o=new le.ByteStream(e.byteArrayParser,e.byteArray,e.elements.x7fe00010.dataOffset),a=(0,le.readSequenceItem)(o);if("xfffee000"!==a.tag)throw"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000";o.seek(a.length);const i=o.position;if(t+1>r.length)throw"dicomParser.readEncapsulatedPixelData: frame exceeds number of fragments";const s=i+r[t].offset+8,l=r[t].length;return new Uint8Array(o.byteArray.buffer.slice(o.byteArray.byteOffset+s,o.byteArray.byteOffset+s+l))}function ue(e,t){return e&1<<t}const fe=function(e,t,n){const r=new Uint8Array(n);for(let o=0;o<n;o++){const n=e[Math.floor(o/8)+t],a=o%8;r[o]=ue(n,a)?1:0}return r};const de=function(e,t){const n=e.elements.x7fe00010||e.elements.x7fe00008,r=e.uint16("x00280100"),o=e.uint16("x00280010"),a=e.uint16("x00280011");let i=e.uint16("x00280002");"YBR_FULL_422"===e.string("x00280004")&&(i=2,console.warn("Using SamplesPerPixel of 2 for YBR_FULL_422 photometric interpretation.\n See http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.7.6.3.html for more information."));const s=n.dataOffset,l=o*a*i;let c;if(8===r){if(c=s+t*l,c>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer.slice(c,c+l))}if(16===r){if(c=s+t*l*2,c>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer.slice(c,c+2*l))}if(1===r){if(c=s+t*l*.125,c>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return fe(e.byteArray,c,l)}if(32===r){if(c=s+t*l*4,c>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer.slice(c,c+4*l))}throw new Error("unsupported pixel format")};const me=function(e){const t=I(e),n=parseInt(t.url,10),r=se.get(n);return new Promise(((e,t)=>{const n=new FileReader;n.onload=t=>{const n=t.target.result;e(n)},n.onerror=t,n.readAsArrayBuffer(r)}))};const ge=function(e){let t,n=e[0],r=e[0];const o=e.length;for(let a=1;a<o;a++)t=e[a],n=Math.min(n,t),r=Math.max(r,t);return{min:n,max:r}};function pe(n,r,o){0===n.planarConfiguration?e(n.pixelData,r,o):t(n.pixelData,r,o)}function he(e,t,o){if("RGB"===e.photometricInterpretation)pe(e,t,o);else if("YBR_RCT"===e.photometricInterpretation)pe(e,t,o);else if("YBR_ICT"===e.photometricInterpretation)pe(e,t,o);else if("PALETTE COLOR"===e.photometricInterpretation)h(e,t,o);else if("YBR_FULL_422"===e.photometricInterpretation)!function(e,t,n){if(void 0===e)throw new Error("convertYBRFull422ByPixel: ybrBuffer must be defined");if(e.length%2!=0)throw new Error(`convertYBRFull422ByPixel: ybrBuffer length ${e.length} must be divisible by 2`);const r=e.length/2;let o=0,a=0;if(n)for(let n=0;n<r;n+=2){const n=e[o++],r=e[o++],i=e[o++],s=e[o++];t[a++]=n+1.402*(s-128),t[a++]=n-.34414*(i-128)-.71414*(s-128),t[a++]=n+1.772*(i-128),t[a++]=255,t[a++]=r+1.402*(s-128),t[a++]=r-.34414*(i-128)-.71414*(s-128),t[a++]=r+1.772*(i-128),t[a++]=255}else for(let n=0;n<r;n+=2){const n=e[o++],r=e[o++],i=e[o++],s=e[o++];t[a++]=n+1.402*(s-128),t[a++]=n-.34414*(i-128)-.71414*(s-128),t[a++]=n+1.772*(i-128),t[a++]=r+1.402*(s-128),t[a++]=r-.34414*(i-128)-.71414*(s-128),t[a++]=r+1.772*(i-128)}}(e.pixelData,t,o);else{if("YBR_FULL"!==e.photometricInterpretation)throw new Error(`No color space conversion for photometric interpretation ${e.photometricInterpretation}`);!function(e,t,o){0===e.planarConfiguration?n(e.pixelData,t,o):r(e.pixelData,t,o)}(e,t,o)}}function xe(e){return function(e){let t;try{return decodeURIComponent(escape(e))}catch(n){if(t=n,t instanceof URIError)return e;throw t}}(String.fromCharCode.apply(null,Array.prototype.slice.apply(new Uint8Array(e))))}const ye=function(e,t,n){const r=(new Date).getTime(),o=new Blob([t],{type:"image/jpeg"});return new Promise(((t,a)=>{const i=new FileReader;void 0===i.readAsBinaryString?i.readAsArrayBuffer(o):i.readAsBinaryString(o),i.onload=function(){const o=new Image;o.onload=function(){n.height=o.height,n.width=o.width,e.rows=o.height,e.columns=o.width;const a=n.getContext("2d");a.drawImage(this,0,0);const i=a.getImageData(0,0,o.width,o.height),s=(new Date).getTime();e.pixelData=new Uint8Array(i.data.buffer),e.imageData=i,e.decodeTimeInMS=s-r;const l=ge(e.pixelData);e.smallestPixelValue=l.min,e.largestPixelValue=l.max,e.pixelDataLength=e.pixelData.length,t(e)},o.onerror=function(e){a(e)},void 0===i.readAsBinaryString?o.src=`data:image/jpeg;base64,${window.btoa(xe(i.result))}`:o.src=`data:image/jpeg;base64,${window.btoa(i.result)}`},i.onerror=e=>{a(e)}}))};function be(e,t,n,r,o){const a={...r};delete a.loader,delete a.streamingData;const i=m.cornerstone.getWebWorkerManager(),s=a.priority||void 0;a.transferPixelData&&n.buffer;return i.executeTask("dicomImageLoader","decodeTask",{imageFrame:e,transferSyntax:t,pixelData:n,options:a,decodeConfig:o},{priority:s,requestType:a?.requestType})}const Pe=function(e,t,n,r,o={},a){switch(t){case"1.2.840.10008.1.2":case"1.2.840.10008.1.2.1":case"1.2.840.10008.1.2.2":case"1.2.840.10008.1.2.1.99":case"1.2.840.10008.1.2.5":case"1.2.840.10008.1.2.4.51":case"1.2.840.10008.1.2.4.57":case"1.2.840.10008.1.2.4.70":case"1.2.840.10008.1.2.4.80":case"1.2.840.10008.1.2.4.81":case"1.2.840.10008.1.2.4.90":case"1.2.840.10008.1.2.4.91":case"3.2.840.10008.1.2.4.96":case"1.2.840.10008.1.2.4.201":case"1.2.840.10008.1.2.4.202":case"1.2.840.10008.1.2.4.203":return be(e,t,n,o,a);case"1.2.840.10008.1.2.4.50":return 8!==e.bitsAllocated||3!==e.samplesPerPixel&&4!==e.samplesPerPixel?be(e,t,n,o,a):ye(e,n,r)}return Promise.reject(new Error(`No decoder for transfer syntax ${t}`))};const we=function(e){const{cornerstone:t}=m,n=t.metaData.get("imagePixelModule",e);return{samplesPerPixel:n.samplesPerPixel,photometricInterpretation:n.photometricInterpretation,planarConfiguration:n.planarConfiguration,rows:n.rows,columns:n.columns,bitsAllocated:n.bitsAllocated,bitsStored:n.bitsStored,pixelRepresentation:n.pixelRepresentation,smallestPixelValue:n.smallestPixelValue,largestPixelValue:n.largestPixelValue,redPaletteColorLookupTableDescriptor:n.redPaletteColorLookupTableDescriptor,greenPaletteColorLookupTableDescriptor:n.greenPaletteColorLookupTableDescriptor,bluePaletteColorLookupTableDescriptor:n.bluePaletteColorLookupTableDescriptor,redPaletteColorLookupTableData:n.redPaletteColorLookupTableData,greenPaletteColorLookupTableData:n.greenPaletteColorLookupTableData,bluePaletteColorLookupTableData:n.bluePaletteColorLookupTableData,pixelData:void 0,imageId:e}};function Se(e){return"RGB"===e||"PALETTE COLOR"===e||"YBR_FULL"===e||"YBR_FULL_422"===e||"YBR_PARTIAL_422"===e||"YBR_PARTIAL_420"===e||"YBR_RCT"===e||"YBR_ICT"===e}let De="";function Ie(e){const t=function(e,t){let n;return Number.isInteger(e)&&Number.isInteger(t)&&(e>=0?t<=255?n=Uint8Array:t<=65535&&(n=Uint16Array):e>=-128&&t<=127?n=Int8Array:e>=-32768&&t<=32767&&(n=Int16Array)),n||Float32Array}(e.smallestPixelValue,e.largestPixelValue);if(!t)throw new Error("Could not apply a typed array to the pixel data");{const n=new t(e.pixelData);e.pixelData=n}}const Te=function(e,t,n,r={}){const o=r.useRGBA;if(r.preScale={enabled:!r.preScale||void 0===r.preScale.enabled||r.preScale.enabled},!t?.length)return Promise.reject(new Error("The pixel data is missing"));const{cornerstone:a}=m,{MetadataModules:i}=a.Enums,s=document.createElement("canvas"),l=we(e);if(l.decodeLevel=r.decodeLevel,r.allowFloatRendering=a.canRenderFloatTextures(),r.preScale.enabled){const t=function(e,t){const n=e.get("modalityLutModule",t)||{},r=e.get("generalSeriesModule",t)||{},{modality:o}=r,a={rescaleSlope:n.rescaleSlope,rescaleIntercept:n.rescaleIntercept,modality:o},i=e.get("scalingModule",t)||{};return{...a,..."PT"===o&&{suvbw:i.suvbw}}}(a.metaData,e);t&&(r.preScale={...r.preScale,scalingParameters:t})}const{decodeConfig:c}=u();Object.keys(l).forEach((e=>{("function"==typeof l[e]||l[e]instanceof Promise)&&delete l[e]}));const f=Pe(l,n,t,s,r,c),d=Se(l.photometricInterpretation);return new Promise(((t,n)=>{f.then((function(n){let l=!1;if(r.targetBuffer&&r.targetBuffer.type&&!d){const{arrayBuffer:e,type:t,offset:o=0,length:a}=r.targetBuffer,i=n.pixelDataLength,s=o,c=null!=a?a:i-s,u={Uint8Array,Uint16Array,Int16Array,Float32Array};if(c!==n.pixelDataLength)throw new Error(`target array for image does not have the same length (${c}) as the decoded image length (${n.pixelDataLength}).`);const f=u[t],d=e?new f(e,s,c):new f(n.pixelData);if(c!==n.pixelDataLength)throw new Error("target array for image does not have the same length as the decoded image length.");n.pixelData=d,l=!0}l||Ie(n);const c=a.metaData.get(i.IMAGE_PLANE,e)||{},u=a.metaData.get(i.VOI_LUT,e)||{},f=a.metaData.get(i.MODALITY_LUT,e)||{},g=a.metaData.get(i.SOP_COMMON,e)||{},p=a.metaData.get(i.CALIBRATION,e)||{},{rows:h,columns:x}=n;if(d){if(function(e){if(void 0===e)return!1;const{rows:t,columns:n,photometricInterpretation:r,pixelDataLength:o}=e;return o!==4*n*t&&(r.endsWith("420")?o===(3*Math.ceil(n/2)+Math.floor(n/2))*t:r.endsWith("422")?o===(3*Math.ceil(n/2)+Math.floor(n/2))*Math.ceil(t/2)+Math.floor(t/2)*n:"RGB"!==r)}(n)){s.height=n.rows,s.width=n.columns;let e=s.getContext("2d").createImageData(n.columns,n.rows);o||(e={...e,data:new Uint8ClampedArray(3*n.columns*n.rows)}),he(n,e.data,o),n.imageData=e,n.pixelData=e.data,n.pixelDataLength=e.data.length}else if(!o&&n.pixelDataLength===4*h*x){const e=new Uint8Array(n.pixelData.length/4*3);n.pixelData=function(e,t){const n=e.length/4;let r=0,o=0;for(let a=0;a<n;a++)t[o++]=e[r++],t[o++]=e[r++],t[o++]=e[r++],r++;return t}(n.pixelData,e),n.pixelDataLength=n.pixelData.length}const e=ge(n.pixelData);n.smallestPixelValue=e.min,n.largestPixelValue=e.max}const y=m.cornerstone.utilities.VoxelManager.createImageVoxelManager({scalarData:n.pixelData,width:n.columns,height:n.rows,numberOfComponents:n.samplesPerPixel}),b={imageId:e,dataType:n.pixelData.constructor.name,color:d,calibration:p,columnPixelSpacing:c.columnPixelSpacing,columns:n.columns,height:n.rows,preScale:n.preScale,intercept:f.rescaleIntercept?f.rescaleIntercept:0,slope:f.rescaleSlope?f.rescaleSlope:1,invert:"MONOCHROME1"===n.photometricInterpretation,minPixelValue:n.smallestPixelValue,maxPixelValue:n.largestPixelValue,rowPixelSpacing:c.rowPixelSpacing,rows:n.rows,sizeInBytes:n.pixelData.byteLength,width:n.columns,windowCenter:u.windowCenter?u.windowCenter[0]:void 0,windowWidth:u.windowWidth?u.windowWidth[0]:void 0,voiLUTFunction:u.voiLUTFunction?u.voiLUTFunction:void 0,decodeTimeInMS:n.decodeTimeInMS,floatPixelData:void 0,imageFrame:n,voxelManager:y,rgba:d&&o,getPixelData:()=>n.pixelData,getCanvas:void 0,numberOfComponents:n.samplesPerPixel};var P;if(b.color&&(b.getCanvas=function(){if(De===e)return s;const t=b.columns,r=b.rows;s.height=r,s.width=t;const o=s.getContext("2d"),a=o.createImageData(t,r),i=n.pixelData;if(i.length===t*r*4)for(let e=0;e<i.length;e++)a.data[e]=i[e];else if(i.length===t*r*3){let e=0;for(let t=0;t<i.length;t+=3)a.data[e++]=i[t],a.data[e++]=i[t+1],a.data[e++]=i[t+2],a.data[e++]=255}return n.pixelData=a.data,n.pixelDataLength=a.data.length,n.imageData=a,o.putImageData(n.imageData,0,0),De=e,s}),f.modalityLUTSequence&&f.modalityLUTSequence.length>0&&("1.2.840.10008.5.1.4.1.1.12.1"!==(P=g.sopClassUID)&&"1.2.840.10008.5.1.4.1.1.12.2.1"!==P)&&(b.modalityLUT=f.modalityLUTSequence[0]),u.voiLUTSequence&&u.voiLUTSequence.length>0&&(b.voiLUT=u.voiLUTSequence[0]),b.color&&(b.windowWidth=256,b.windowCenter=128),void 0===b.windowCenter||void 0===b.windowWidth){const e=b.imageFrame.smallestPixelValue,t=b.imageFrame.largestPixelValue;b.windowWidth=t-e,b.windowCenter=(t+e)/2}t(b)}),n)}))};const Le=function(e,t=0){const n=e.elements.x7fe00010||e.elements.x7fe00008;return n?n.encapsulatedPixelData?ce(e,t):de(e,t):null};function Ce(e,t,n=0,r,o,a){const i=(new Date).getTime(),s={cancelFn:void 0,promise:void 0};return s.promise=new Promise(((l,c)=>{e.then((e=>{const u=Le(e,n),f=e.string("x00020010"),d=(new Date).getTime(),m=Te(t,u,f,o);!function(e,t){e.decache=function(){const e=I(t);z.unload(e.url)}}(s,t),m.then((t=>{t.data=e,t.sharedCacheKey=r;const n=(new Date).getTime();t.loadTimeInMS=d-i,t.totalTimeInMS=n-i,void 0!==a&&void 0!==a.imageDoneCallback&&a.imageDoneCallback(t),l(t)}),(function(t){c({error:t,dataSet:e})}))}),(function(e){c({error:e})}))})),s}function Ae(e){return"dicomweb"===e||"wadouri"===e?T:"dicomfile"===e?me:void 0}function Ee(e,t={}){const n=I(e);delete(t=Object.assign({},t)).loader;const r=Ae(n.scheme);if(z.isLoaded(n.url)){return function(e,t,n=0,r,o){const a=(new Date).getTime();return{promise:new Promise(((i,s)=>{const l=(new Date).getTime();let c;try{const r=Le(e,n),a=e.string("x00020010");c=Te(t,r,a,o)}catch(t){return void s({error:t,dataSet:e})}c.then((t=>{t.data=e,t.sharedCacheKey=r;const n=(new Date).getTime();t.loadTimeInMS=l-a,t.totalTimeInMS=n-a,i(t)}),s)})),cancelFn:void 0}}(z.get(n.url,r,e),e,n.pixelDataFrame,n.url,t)}return Ce(z.load(n.url,r,e),e,n.frame,n.url,t)}function ve(e){e.registerImageLoader("dicomweb",Ee),e.registerImageLoader("wadouri",Ee),e.registerImageLoader("dicomfile",Ee),e.metaData.addProvider(ae)}const Oe={metaData:{getImagePixelModule:b,getLUTs:w,getModalityLUTOutputPixelRepresentation:S,getNumberValues:D,metaDataProvider:ae},dataSetCacheManager:z,fileManager:se,getEncapsulatedImageFrame:ce,getUncompressedImageFrame:de,loadFileRequest:me,loadImageFromPromise:Ce,getLoaderForScheme:Ae,loadImage:Ee,parseImageId:I,unpackBinaryFrame:fe,register:ve};const Me=function(e,t,n){return t=t||0,e&&e.Value?Array.isArray(e.Value)&&e.Value.length<=t?n:e.Value[t]:n};const Fe=function(e,t,n){const r=Me(e,t,n);if(void 0!==r)return parseFloat(String(r))};const Re=function(e,t){const n=Me(e,t);if(void 0!==n)return parseFloat(n)};const Ue=function(e,t){if(!e)return;if(!e.Value)return;if(!Array.isArray(e.Value))return;if(t&&e.Value.length<t)return;const n=[];for(let t=0;t<e.Value.length;t++)n.push(parseFloat(e.Value[t]));return n};function Be(e){const t=e.indexOf(":");return e.substring(t+1)}function Ne(e,t=!0){return e&&e.Value?e.Value[0]&&t?e.Value[0]:e.Value:e}function ke(e,t,n){return{shared:(t?Object.values(t[0]):[]).map((e=>e[0])).filter((e=>void 0!==e&&"object"==typeof e)),perFrame:(e?Object.values(e[n-1]):[]).map((e=>e.Value[0])).filter((e=>void 0!==e&&"object"==typeof e))}}function _e(e){let{52009230:t,52009229:n,"00280008":r,...o}=e;return t=Ne(t,!1),n=Ne(n,!1),r=Ne(r),{PerFrameFunctionalGroupsSequence:t,SharedFunctionalGroupsSequence:n,NumberOfFrames:r,rest:o}}let Ve=[],$e={};function je(e){const t=e.indexOf("/frames/")+8,n=e.slice(0,t),r=parseInt(e.slice(t),10);return{metadata:Ve[`${n}1`],frame:r}}function Ge(e){const t=Me(e["00280008"]);return t&&t>1}const qe={add:function(e,t){const n=Be(e);Object.defineProperty(t,"isMultiframe",{value:Ge(t),enumerable:!1}),Ve[n]=t},get:function(e){const t=Be(e),n=Ve[t];if(n&&!n?.isMultiframe)return n;const r=$e[t];if(r)return r;const o=je(t);if(!o||!o.metadata)return;const{metadata:a,frame:i}=o;if(a){const e=function(e,t){const{PerFrameFunctionalGroupsSequence:n,SharedFunctionalGroupsSequence:r,NumberOfFrames:o,rest:a}=_e(t);if(n||o>1){const{shared:i,perFrame:s}=ke(n,r,e),l=Object.assign(t,{frameNumber:e});return[...i,...s].forEach((e=>{Object.entries(e).forEach((([e,t])=>{l[e]=t}))})),Object.assign(a,{"00280008":o},l)}return t}(i,a);return $e[t]=e,e}},remove:function(e){const t=Be(e);Ve[t]=void 0,$e[t]=void 0},purge:function(){Ve=[],$e={}}};function Ye(e){return Me(e["00080060"]).includes("NM")}function We(e,t){const n=Ne(e["00080008"],!1);if(n)return n[t]}function Xe(e){let t=Ue(e["00200037"],6);return!t&&Ye(e)&&(t=function(e){let t;const n=We(e,2);if(n&&H(n)){const n=Ne(e["00540022"]);n&&(t=Ue(n["00200037"],6))}return t}(e)),t}function ze(e){let t=Ue(e["00200032"],3);return!t&&Ye(e)&&(t=function(e){let t;const n=We(e,2);if(n&&H(n)){const n=Ne(e["00540022"]);n&&(t=Ue(n["00200032"],3))}return t}(e)),t}function He(e,t){const n=Ue(e[t]);return n?n[0]:null}const Qe=function(e){return e?.Value?.length?Array.isArray(e.Value)?e.Value:"object"==typeof e.Value?(console.warn("Warning: Value should be an array, but an object was found. Encapsulating the object in an array."),[e.Value]):[]:[]};function Je(e){const t=Qe(e["00186011"]);if(!t||!t.length)return null;return t.map((e=>{const t=He(e,"0018602C"),n=He(e,"0018602E"),r=He(e,"00186024"),o=He(e,"00186026");return{regionLocationMinY0:He(e,"0018601A"),regionLocationMaxY1:He(e,"0018601E"),regionLocationMinX0:He(e,"00186018"),regionLocationMaxX1:He(e,"0018601C"),referencePixelX0:He(e,"00186020"),referencePixelY0:He(e,"00186022"),physicalDeltaX:t,physicalDeltaY:n,physicalUnitsXDirection:r,physicalUnitsYDirection:o,referencePhysicalPixelValueY:He(e,"0018602A"),referencePhysicalPixelValueX:He(e,"00186028"),regionSpatialFormat:He(e,"00186012"),regionDataType:He(e,"00186014"),regionFlags:He(e,"00186016"),transducerFrequency:He(e,"00186030")}}))}function Ke(e,t){return{transferSyntaxUID:Me(t["00020010"])||Me(t["00083002"])}}const Ze=function e(t,n){const{MetadataModules:r}=m.cornerstone.Enums,{dicomParser:o}=m;if(t===r.MULTIFRAME){const{metadata:e,frame:t}=function(e){return je(Be(e))}(n);if(!e)return;const{PerFrameFunctionalGroupsSequence:r,SharedFunctionalGroupsSequence:o,NumberOfFrames:a}=_e(e);if(r||a>1){const{shared:e,perFrame:n}=ke(r,o,t);return{NumberOfFrames:a,PerFrameFunctionalInformation:n,SharedFunctionalInformation:e}}return{NumberOfFrames:a}}const a=qe.get(n);if(a){if(t===r.GENERAL_STUDY)return{studyDescription:Me(a["00081030"]),studyDate:o.parseDA(Me(a["00080020"])),studyTime:o.parseTM(Me(a["00080030"],0,"")),accessionNumber:Me(a["00080050"])};if(t===r.GENERAL_SERIES)return{modality:Me(a["00080060"]),seriesInstanceUID:Me(a["0020000E"]),seriesNumber:Re(a["00200011"]),studyInstanceUID:Me(a["0020000D"]),seriesDate:o.parseDA(Me(a["00080021"])),seriesTime:o.parseTM(Me(a["00080031"],0,"")),acquisitionDate:o.parseDA(Me(a["00080022"])),acquisitionTime:o.parseTM(Me(a["00080032"],0,""))};if(t===r.GENERAL_IMAGE)return{sopInstanceUID:Me(a["00080018"]),instanceNumber:Re(a["00200013"]),lossyImageCompression:Me(a["00282110"]),lossyImageCompressionRatio:Re(a["00282112"]),lossyImageCompressionMethod:Me(a["00282114"])};if(t===r.PATIENT)return{patientID:Me(a["00100020"]),patientName:Me(a["00100010"])};if(t===r.PATIENT_STUDY)return{patientAge:Re(a["00101010"]),patientSize:Re(a["00101020"]),patientSex:Me(a["00100040"]),patientWeight:Re(a["00101030"])};if(t===r.NM_MULTIFRAME_GEOMETRY){const e=Me(a["00080060"]),t=We(a,2);return{modality:e,imageType:Me(a["00080008"]),imageSubType:t,imageOrientationPatient:Xe(a),imagePositionPatient:ze(a),sliceThickness:Re(a["00180050"]),spacingBetweenSlices:Re(a["00180088"]),pixelSpacing:Ue(a["00280030"],2),numberOfFrames:Re(a["00280008"]),isNMReconstructable:H(t)&&e.includes("NM")}}if(t===r.IMAGE_PLANE){let e=Xe(a),t=ze(a);const n=Ue(a["00280030"],2);let r=null,o=null,i=null,s=null,l=!1;return n?(o=n[0],r=n[1]):(l=!0,o=1,r=1),e?(i=[parseFloat(e[0]),parseFloat(e[1]),parseFloat(e[2])],s=[parseFloat(e[3]),parseFloat(e[4]),parseFloat(e[5])]):(i=[0,1,0],s=[0,0,-1],l=!0,e=[...i,...s]),t||(t=[0,0,0],l=!0),{frameOfReferenceUID:Me(a["00200052"]),rows:Re(a["00280010"]),columns:Re(a["00280011"]),imageOrientationPatient:e,rowCosines:i,columnCosines:s,imagePositionPatient:t,sliceThickness:Re(a["00180050"]),sliceLocation:Re(a["00201041"]),pixelSpacing:n,rowPixelSpacing:o,columnPixelSpacing:r,usingDefaultValues:l}}if(t===r.ULTRASOUND_ENHANCED_REGION)return Je(a);if(t===r.CALIBRATION){if("US"===Me(a["00080060"])){return{sequenceOfUltrasoundRegions:Je(a)}}}if(t===r.IMAGE_URL)return function(e,t){const{transferSyntaxUID:n}=Ke(e,t),r=m.cornerstone.utilities.isVideoTransferSyntax(n),o=e.substring(7),a=o.replace("/frames/","/thumbnail/");let i=o.replace("/frames/","/rendered/");r&&(i=i.replace("/rendered/1","/rendered"));return{isVideo:r,rendered:i,thumbnail:a}}(n,a);if(t===r.CINE)return function(e,t){const n=Me(t["00180040"]);return{cineRate:n,numberOfFrames:Re(t["00280008"])}}(0,a);if(t===r.IMAGE_PIXEL)return{samplesPerPixel:Re(a["00280002"]),photometricInterpretation:Me(a["00280004"]),rows:Re(a["00280010"]),columns:Re(a["00280011"]),bitsAllocated:Re(a["00280100"]),bitsStored:Re(a["00280101"]),highBit:Me(a["00280102"]),pixelRepresentation:Re(a["00280103"]),planarConfiguration:Re(a["00280006"]),pixelAspectRatio:Me(a["00280034"]),smallestPixelValue:Re(a["00280106"]),largestPixelValue:Re(a["00280107"]),redPaletteColorLookupTableDescriptor:Ue(a["00281101"]),greenPaletteColorLookupTableDescriptor:Ue(a["00281102"]),bluePaletteColorLookupTableDescriptor:Ue(a["00281103"]),redPaletteColorLookupTableData:Ue(a["00281201"]),greenPaletteColorLookupTableData:Ue(a["00281202"]),bluePaletteColorLookupTableData:Ue(a["00281203"])};if(t===r.VOI_LUT)return{windowCenter:Ue(a["00281050"],1),windowWidth:Ue(a["00281051"],1)};if(t===r.MODALITY_LUT)return{rescaleIntercept:Re(a["00281052"]),rescaleSlope:Re(a["00281053"]),rescaleType:Me(a["00281054"])};if(t===r.SOP_COMMON)return{sopClassUID:Me(a["00080016"]),sopInstanceUID:Me(a["00080018"])};if(t===r.PET_ISOTOPE){const e=Me(a["00540016"]);if(void 0===e)return;return{radiopharmaceuticalInfo:{radiopharmaceuticalStartTime:o.parseTM(Me(e["00181072"],0,"")),radiopharmaceuticalStartDateTime:Me(e["00181078"],0,""),radionuclideTotalDose:Re(e["00181074"]),radionuclideHalfLife:Re(e["00181075"])}}}return t===r.OVERLAY_PLANE?function(e){const t=[];for(let n=0;n<=30;n+=2){let r=`x60${n.toString(16)}`;4===r.length&&(r=`x600${n.toString(16)}`);const o=Me(e[`${r}3000`]);if(!o)continue;const a=[];for(let t=0;t<o.length;t++)for(let n=0;n<8;n++){const r=e.Value[o.dataOffset+t];a[8*t+n]=r>>n&1}t.push({rows:Re(e[`${r}0010`]),columns:Re(e[`${r}0011`]),type:Me(e[`${r}0040`]),x:Re(e[`${r}0050`],1)-1,y:Re(e[`${r}0050`],0)-1,pixelData:a,description:Me(e[`${r}0022`]),label:Me(e[`${r}1500`]),roiArea:Me(e[`${r}1301`]),roiMean:Me(e[`${r}1302`]),roiStandardDeviation:Me(e[`${r}1303`])})}return{overlays:t}}(a):"transferSyntax"===t?Ke(n,a):t===r.PET_SERIES?{correctedImage:Me(a["00280051"]),units:Me(a["00541001"]),decayCorrection:Me(a["00541102"])}:t===r.PET_IMAGE?{frameReferenceTime:Re(a["00541300"]),actualFrameDuration:Re(a["00181242"])}:"instance"===t?te(n,e,re):void 0}};function et(e,t,n={},r={}){const o=u(),{retrieveOptions:a={},streamingData:i}=r,s=i.chunkSize||function(e,t,n){const r=t[n];if("function"!=typeof r)return r;const o=qe.get(e);return r(o,e)}(t,a,"chunkSize")||65536,l=new Promise((async(t,r)=>{const l=Object.assign({},n);Object.keys(l).forEach((function(e){null!==l[e]&&void 0!==l[e]||delete l[e]}));try{i.encodedData||(i.chunkSize=s,i.rangesFetched=0);const n=function(e,t){const{totalBytes:n,encodedData:r,chunkSize:o=65536}=e,{rangeIndex:a=0}=t;if(!(-1!==a||n&&r))return[0,""];if(-1===a||r?.byteLength>n-o)return[r?.byteLength||0,""];return[r?.byteLength||0,o*(a+1)-1]}(i,a),{encodedData:r,responseHeaders:o}=await async function(e,t,n,r){n&&(t=Object.assign(t,{Range:`bytes=${n[0]}-${n[1]}`}));let{encodedData:o}=r;if(n[1]&&o?.byteLength>n[1])return r;const a=await fetch(e,{headers:t,signal:void 0}),i=await a.arrayBuffer(),s=new Uint8Array(i),{status:l}=a;let c;o?(c=new Uint8Array(o.length+s.length),c.set(o,0),c.set(s,o.length),r.rangesFetched=1):(c=new Uint8Array(s.length),c.set(s,0),r.rangesFetched++);r.encodedData=o=c,r.responseHeaders=a.headers;const u=a.headers.get("Content-Range");u?r.totalBytes=Number(u.split("/")[1]):206===l&&n?""===n[1]||o?.length<n[1]?r.totalBytes=o.byteLength:r.totalBytes=Number.MAX_SAFE_INTEGER:r.totalBytes=o?.byteLength;return r}(e,l,n,i),c=o.get("content-type"),{totalBytes:u}=i,f=u===r.byteLength,d=v(c,r,{isPartial:!0}),m=M(a,f||d.extractDone);t({...d,imageQualityStatus:m,percentComplete:d.extractDone?100:100*s/u})}catch(e){(e=>{if("function"==typeof o.errorInterceptor){const e=new Error("request failed");o.errorInterceptor(e)}else console.warn("rangeRequest:Caught",e)})(e),console.error(e),r(e)}}));return l}const tt=function(e,t,n="application/octet-stream",r){const{streamingData:o,retrieveOptions:a={}}=r||{},i={Accept:n};let s=a.urlArguments?`${e}${-1===e.indexOf("?")?"?":"&"}${a.urlArguments}`:e;if(a.framesPath&&(s=s.replace("/frames/",a.framesPath)),o?.url!==s&&(r.streamingData={url:s}),void 0!==a.rangeIndex)return et(s,t,i,r);if(a.streaming)return R(s,t,i,r);const l=T(s,t,i),{xhr:c}=l;return l.then((function(e){const t=v(c.getResponseHeader("Content-Type")||"application/octet-stream",new Uint8Array(e));return t.imageQualityStatus=M(a,!0),t}))},{ProgressiveIterator:nt}=L.utilities,{ImageQualityStatus:rt}=L.Enums,ot=new Set(["3.2.840.10008.1.2.4.96","1.2.840.10008.1.2.4.202","1.2.840.10008.1.2.4.203"]);function at(e){const t="1.2.840.10008.1.2";if(!e)return t;const n=e.split(";"),r={};n.forEach((e=>{const t=e.split("=");if(2!==t.length)return;const n=t[1].trim().replace(/"/g,"");r[t[0].trim()]=n}));const o={"image/jpeg":"1.2.840.10008.1.2.4.50","image/x-dicom-rle":"1.2.840.10008.1.2.5","image/x-jls":"1.2.840.10008.1.2.4.80","image/jls":"1.2.840.10008.1.2.4.80","image/jll":"1.2.840.10008.1.2.4.70","image/jp2":"1.2.840.10008.1.2.4.90","image/jpx":"1.2.840.10008.1.2.4.92","image/jphc":"3.2.840.10008.1.2.4.96","image/jxl":"1.2.840.10008.1.2.4.140"};return r["transfer-syntax"]?r["transfer-syntax"]:e&&!Object.keys(r).length&&o[e]?o[e]:r.type&&o[r.type]?o[r.type]:o[e]?o[e]:t}function it(e,t=4){const n=e/100-.02;return n>1/4?Math.min(t,0):n>1/16?Math.min(t,1):n>1/64?Math.min(t,2):Math.min(t,3)}const st=function(e,t={}){const n=m.cornerstone.imageRetrievalPoolManager,r=(new Date).getTime(),o=new nt("decompress"),a=t.requestType||"interaction",i=t.additionalDetails||{imageId:e},s=void 0===t.priority?5:t.priority,l=t.addToBeginning||!1,c=e.substring(7);return n.addRequest(async function(e,n,a){o.generate((async o=>{const i=nt.as(tt(e,n,a,t));let s=10;for await(const e of i){const{pixelData:a,imageQualityStatus:i=rt.FULL_RESOLUTION,percentComplete:l,done:c=!0,extractDone:u=!0}=e,f=at(e.contentType);if(!u&&!ot.has(f))continue;const d=e.decodeLevel??(i===rt.FULL_RESOLUTION?0:it(l,t.retrieveOptions?.decodeLevel));if(c||!(s<=d))try{const e={...t,decodeLevel:d},l=await Te(n,a,f,e),u=(new Date).getTime();l.loadTimeInMS=u-r,l.transferSyntaxUID=f,l.imageQualityStatus=i,o.add(l,c),s=d}catch(e){if(u)throw console.warn("Couldn't decode",e),e}}}))}.bind(this,c,e,"multipart/related; type=application/octet-stream; transfer-syntax=*"),a,i,s,l),{promise:o.getDonePromise(),cancelFn:void 0}};function lt(e){e.registerImageLoader("wadors",st),e.metaData.addProvider(Ze)}const ct={metaData:{getNumberString:Fe,getNumberValue:Re,getNumberValues:Ue,getValue:Me,metaDataProvider:Ze},findIndexOfString:A,getPixelData:tt,loadImage:st,metaDataManager:qe,register:lt};console.debug("dicom loader: link: init: 3DA675F2-86A1-41A1-9E15-A7019E085C0F");const ut=function(e){lt(e),ve(e)};const ft=function(e){if(!e.cornerstone||!e.dicomParser)throw new Error("cornerstoneWADOImageLoader.configure: Options object must contain the cornerstone and dicomParser packages.");c(e),m.cornerstone=e.cornerstone,m.dicomParser=e.dicomParser,ut(e.cornerstone)};const dt=function(e,t){if(t=t||e.transferSyntax,8===e.bitsAllocated&&"1.2.840.10008.1.2.4.50"===t&&(3===e.samplesPerPixel||4===e.samplesPerPixel))return!0},mt={convertRGBColorByPixel:e,convertRGBColorByPlane:t,convertYBRFullByPixel:n,convertYBRFullByPlane:r,convertPALETTECOLOR:h,wadouri:Oe,wadors:ct,configure:ft,convertColorSpace:he,createImage:Te,decodeJPEGBaseline8BitColor:ye,getImageFrame:we,getPixelData:tt,getMinMax:ge,isColorImage:Se,isJPEGBaseline8BitColor:dt,internal:B,external:m}})(),a})()));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@cornerstonejs/core"),require("dicom-parser")):"function"==typeof define&&define.amd?define("cornerstoneDICOMImageLoader",["@cornerstonejs/core","dicom-parser"],t):"object"==typeof exports?exports.cornerstoneDICOMImageLoader=t(require("@cornerstonejs/core"),require("dicom-parser")):e.cornerstoneDICOMImageLoader=t(e["@cornerstonejs/core"],e.dicomParser)}(this,((e,t)=>(()=>{"use strict";var n={464:t=>{t.exports=e},713:e=>{e.exports=t}},r={};function a(e){var t=r[e];if(void 0!==t)return t.exports;var o=r[e]={exports:{}};return n[e](o,o.exports,a),o.exports}a.m=n,a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.u=e=>e+".min.js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;a.g.importScripts&&(e=a.g.location+"");var t=a.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&!e;)e=n[r--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e})(),a.b=document.baseURI||self.location.href;var o={};return(()=>{function e(e,t,n){if(void 0===e)throw new Error("decodeRGB: rgbBuffer must be defined");if(e.length%3!=0)throw new Error(`decodeRGB: rgbBuffer length ${e.length} must be divisible by 3`);const r=e.length/3;let a=0,o=0;if(n)for(let n=0;n<r;n++)t[o++]=e[a++],t[o++]=e[a++],t[o++]=e[a++],t[o++]=255;else t.set(e)}function t(e,t,n){if(void 0===e)throw new Error("decodeRGB: rgbBuffer must be defined");if(e.length%3!=0)throw new Error(`decodeRGB: rgbBuffer length ${e.length} must be divisible by 3`);const r=e.length/3;let a=0,o=0,i=r,s=2*r;if(n)for(let n=0;n<r;n++)t[a++]=e[o++],t[a++]=e[i++],t[a++]=e[s++],t[a++]=255;else for(let n=0;n<r;n++)t[a++]=e[o++],t[a++]=e[i++],t[a++]=e[s++]}function n(e,t,n){if(void 0===e)throw new Error("convertYBRFullByPixel: ybrBuffer must be defined");if(e.length%3!=0)throw new Error(`convertYBRFullByPixel: ybrBuffer length ${e.length} must be divisible by 3`);const r=e.length/3;let a=0,o=0;if(n)for(let n=0;n<r;n++){const n=e[a++],r=e[a++],i=e[a++];t[o++]=n+1.402*(i-128),t[o++]=n-.34414*(r-128)-.71414*(i-128),t[o++]=n+1.772*(r-128),t[o++]=255}else for(let n=0;n<r;n++){const n=e[a++],r=e[a++],i=e[a++];t[o++]=n+1.402*(i-128),t[o++]=n-.34414*(r-128)-.71414*(i-128),t[o++]=n+1.772*(r-128)}}function r(e,t,n){if(void 0===e)throw new Error("convertYBRFullByPlane: ybrBuffer must be defined");if(e.length%3!=0)throw new Error(`convertYBRFullByPlane: ybrBuffer length ${e.length} must be divisible by 3`);const r=e.length/3;let a=0,o=0,i=r,s=2*r;if(n)for(let n=0;n<r;n++){const n=e[o++],r=e[i++],l=e[s++];t[a++]=n+1.402*(l-128),t[a++]=n-.34414*(r-128)-.71414*(l-128),t[a++]=n+1.772*(r-128),t[a++]=255}else for(let n=0;n<r;n++){const n=e[o++],r=e[i++],l=e[s++];t[a++]=n+1.402*(l-128),t[a++]=n-.34414*(r-128)-.71414*(l-128),t[a++]=n+1.772*(r-128)}}a.r(o),a.d(o,{convertColorSpace:()=>fe,convertPALETTECOLOR:()=>c,convertRGBColorByPixel:()=>e,convertRGBColorByPlane:()=>t,convertYBRFullByPixel:()=>n,convertYBRFullByPlane:()=>r,createImage:()=>Pe,decodeJPEGBaseline8BitColor:()=>ge,default:()=>ct,getImageFrame:()=>he,getMinMax:()=>ce,getPixelData:()=>Qe,init:()=>st,internal:()=>M,isColorImage:()=>xe,isJPEGBaseline8BitColor:()=>lt,wadors:()=>at,wadouri:()=>Le});var i=a(464);function s(e,t){const n=e.length,r=new Uint8ClampedArray(n);for(let a=0;a<n;++a)r[a]=e[a]>>t;return r}function l(e,t,n){const r=e[`${t}PaletteColorLookupTableData`];if(r)return Promise.resolve(r);const a=i.metaData.get("imagePixelModule",e.imageId);return a&&"function"==typeof a.then?a.then((e=>e?e[`${t}PaletteColorLookupTableData`]:n)):Promise.resolve(a?a[`${t}PaletteColorLookupTableData`]:n)}function c(e,t,n){const r=e.columns*e.rows,a=e.pixelData;Promise.all([l(e,"red",null),l(e,"green",null),l(e,"blue",null)]).then((([o,i,l])=>{if(!o||!i||!l)throw new Error("The image does not have a complete color palette. R, G, and B palette data are required.");const c=o.length;let u=0,f=0;const d=e.redPaletteColorLookupTableDescriptor[1],g=8===e.redPaletteColorLookupTableDescriptor[2]?0:8,m=s(o,g),p=s(i,g),h=s(l,g);if(n)for(let e=0;e<r;++e){let e=a[u++];e<d?e=0:e>d+c-1?e=c-1:e-=d,t[f++]=m[e],t[f++]=p[e],t[f++]=h[e],t[f++]=255}else for(let e=0;e<r;++e){let e=a[u++];e<d?e=0:e>d+c-1?e=c-1:e-=d,t[f++]=m[e],t[f++]=p[e],t[f++]=h[e]}}))}function u(e,t){if(e.elements[t]&&6===e.elements[t].length)return[e.uint16(t,0),e.uint16(t,1),e.uint16(t,2)]}function f(e,t,n){const r=[],a=e.elements[t];for(let o=0;o<n[0];o++)16===n[2]?r[o]=e.uint16(t,o):r[o]=e.byteArray[o+a.dataOffset];return r}const d=function(e){const t={samplesPerPixel:e.uint16("x00280002"),photometricInterpretation:e.string("x00280004"),rows:e.uint16("x00280010"),columns:e.uint16("x00280011"),bitsAllocated:e.uint16("x00280100"),bitsStored:e.uint16("x00280101"),highBit:e.uint16("x00280102"),pixelRepresentation:e.uint16("x00280103"),planarConfiguration:e.uint16("x00280006"),pixelAspectRatio:e.string("x00280034")};return function(e,t){0===e.uint16("x00280103")?(t.smallestPixelValue=e.uint16("x00280106"),t.largestPixelValue=e.uint16("x00280107")):(t.smallestPixelValue=e.int16("x00280106"),t.largestPixelValue=e.int16("x00280107"))}(e,t),"PALETTE COLOR"===t.photometricInterpretation&&e.elements.x00281101&&function(e,t){t.redPaletteColorLookupTableDescriptor=u(e,"x00281101"),t.greenPaletteColorLookupTableDescriptor=u(e,"x00281102"),t.bluePaletteColorLookupTableDescriptor=u(e,"x00281103"),0===t.redPaletteColorLookupTableDescriptor[0]&&(t.redPaletteColorLookupTableDescriptor[0]=65536,t.greenPaletteColorLookupTableDescriptor[0]=65536,t.bluePaletteColorLookupTableDescriptor[0]=65536);const n=t.redPaletteColorLookupTableDescriptor[0],r=e.elements.x00281201.length===n?8:16;t.redPaletteColorLookupTableDescriptor[2]!==r&&(t.redPaletteColorLookupTableDescriptor[2]=r,t.greenPaletteColorLookupTableDescriptor[2]=r,t.bluePaletteColorLookupTableDescriptor[2]=r),t.redPaletteColorLookupTableData=f(e,"x00281201",t.redPaletteColorLookupTableDescriptor),t.greenPaletteColorLookupTableData=f(e,"x00281202",t.greenPaletteColorLookupTableDescriptor),t.bluePaletteColorLookupTableData=f(e,"x00281203",t.bluePaletteColorLookupTableDescriptor)}(e,t),t};function g(e,t){let n=t.uint16("x00283002",0);0===n&&(n=65535);let r=0;r=0===e?t.uint16("x00283002",1):t.int16("x00283002",1);const a={id:"1",firstValueMapped:r,numBitsPerEntry:t.uint16("x00283002",2),lut:[]};for(let r=0;r<n;r++)a.lut[r]=0===e?t.uint16("x00283006",r):t.int16("x00283006",r);return a}const m=function(e,t){if(!t||!t.items||!t.items.length)return;const n=[];for(let r=0;r<t.items.length;r++){const a=g(e,t.items[r].dataSet);a&&n.push(a)}return n};const p=function(e){const t=e.string("x00080016");if("1.2.840.10008.5.1.4.1.1.2"===t||"1.2.840.10008.5.1.4.1.1.2.1"===t)return 1;const n=e.floatString("x00281052"),r=e.floatString("x00281053");if(void 0!==n&&void 0!==r){const t=function(e){const t=e.uint16("x00280103"),n=e.uint16("x00280101");return 0===t?0:-1<<n-1}(e);return t*r+n<0?1:0}return e.elements.x00283000&&e.elements.x00283000.length>0?0:e.uint16("x00280103")};const h=function(e,t,n){const r=[],a=e.string(t);if(!a)return;const o=a.split("\\");if(!(n&&o.length<n)){for(let e=0;e<o.length;e++)r.push(parseFloat(o[e]));return r}};var x=a(713);const y=function(e){const t=e.indexOf(":");let n=e.substring(t+1);const r=n.indexOf("frame=");let a;if(-1!==r){const e=n.substring(r+6);a=parseInt(e,10),n=n.substring(0,r-1)}return{scheme:e.substring(0,t),url:n,frame:a,pixelDataFrame:void 0!==a?a-1:void 0}};let b={open(e,t){e.open("get",t,!0)},beforeSend(){},beforeProcessing:e=>Promise.resolve(e.response),imageCreated(){},strict:!1};function P(e){b=Object.assign(b,e)}function S(){return b}const D=function(e,t,n={},r={}){const a=S(),o=e=>{if("function"==typeof a.errorInterceptor){const t=new Error("request failed");t.request=e,t.response=e.response,t.status=e.status,a.errorInterceptor(t)}},s=new XMLHttpRequest,l=new Promise(((l,c)=>{a.open(s,e,n,r);const u=a.beforeSend(s,t,n,r);s.responseType="arraybuffer";const f=Object.assign({},n,u);Object.keys(f).forEach((function(t){null!==f[t]&&("Accept"===t&&-1!==e.indexOf("accept=")||s.setRequestHeader(t,f[t]))})),r.deferred={resolve:l,reject:c},r.url=e,r.imageId=t,s.onloadstart=function(n){a.onloadstart&&a.onloadstart(n,r);const o={url:e,imageId:t};(0,i.triggerEvent)(i.eventTarget,"cornerstoneimageloadstart",o)},s.onloadend=function(n){a.onloadend&&a.onloadend(n,r);const o={url:e,imageId:t};(0,i.triggerEvent)(i.eventTarget,"cornerstoneimageloadend",o)},s.onreadystatechange=function(e){a.onreadystatechange?a.onreadystatechange(e,r):4===s.readyState&&(200===s.status||206===s.status?a.beforeProcessing(s).then(l).catch((()=>{o(s),c(s)})):(o(s),c(s)))},s.onprogress=function(e){const t=e.loaded;let n,o;e.lengthComputable&&(n=e.total,o=Math.round(t/n*100)),a.onprogress&&a.onprogress(e,r)},s.onerror=function(){o(s),c(s)},s.onabort=function(){o(s),c(s)},s.send()}));return l.xhr=s,l};function w(e,t,n){if(n+e.length>t.length)return!1;let r=n;for(let n=0;n<e.length;n++)if(e[n]!==t[r++])return!1;return!0}const T=function(e,t,n){n=n||0;const r=function(e){const t=new Uint8Array(e.length);for(let n=0,r=e.length;n<r;n++)t[n]=e.charCodeAt(n);return t}(t);for(let t=n;t<e.length;t++)if(r[0]===e[t]&&w(r,e,t))return t;return-1},{ImageQualityStatus:I}=i.Enums;function L(e,t,n){n||={};const r=new Uint8Array(t),a=!!n?.isPartial;if(-1===e.indexOf("multipart"))return{contentType:e,imageQualityStatus:a?I.SUBRESOLUTION:I.FULL_RESOLUTION,pixelData:r};let{tokenIndex:o,responseHeaders:i,boundary:s,multipartContentType:l}=n;if(o||=T(r,"\r\n\r\n"),-1===o)throw new Error("invalid response - no multipart mime header");if(!s){const e=function(e,t,n){t=t||0,n=n||e.length-t;let r="";for(let a=t;a<t+n;a++)r+=String.fromCharCode(e[a]);return r}(r,0,o);if(i=e.split("\r\n"),s=function(e){for(let t=0;t<e.length;t++)if("--"===e[t].substr(0,2))return e[t]}(i),!s)throw new Error("invalid response - no boundary marker")}const c=o+4,u=T(r,s,c);if(-1===u&&!a)throw new Error("invalid response - terminating boundary not found");return l||=function(e){for(let t=0;t<e.length;t++)if("Content-Type:"===e[t].substr(0,13))return e[t].substr(13).trim()}(i),n.tokenIndex=o,n.boundary=s,n.responseHeaders=i,n.multipartContentType=l,n.isPartial=-1===u,{contentType:l,extractDone:!a||-1!==u,tokenIndex:o,responseHeaders:i,boundary:s,multipartContentType:l,pixelData:t.slice(c,u-2)}}const{ImageQualityStatus:C}=i.Enums;function v(e,t=!0){return t?e.imageQualityStatus??C.FULL_RESOLUTION:C.SUBRESOLUTION}const{ProgressiveIterator:E}=i.utilities;function A(e,t,n={},r={}){const a=S(),{retrieveOptions:o={},streamingData:i={}}=r,s=o.minChunkSize||131072,l=new E("streamRequest");return l.generate((async(r,l)=>{const c=a.beforeSend?.(null,e,n,{}),u=Object.assign({},n,c);Object.keys(u).forEach((function(t){null===u[t]&&(u[t]=void 0),"Accept"===t&&-1!==e.indexOf("accept=")&&(u[t]=void 0)}));try{const n=await fetch(e,{headers:u,signal:void 0});if(200!==n.status)throw new Error(`Couldn't retrieve ${e} got status ${n.status}`);const a=n.body.getReader(),l=n.headers,c=l.get("content-type"),f=Number(l.get("Content-Length"));let d=!1,g=i.encodedData,m=i.lastSize||0;for(i.isPartial=!0;!d;){const{done:n,value:l}=await a.read();if(g=O(g,l),!g){if(d)throw new Error(`Done but no image frame available ${t}`);continue}if(d=n||g.byteLength===f,!d&&g.length<m+s)continue;m=g.length,i.isPartial=!n;const u=L(c,g,i),p=v(o,d),h={url:e,imageId:t,...u,percentComplete:n?100:100*u.pixelData?.length/f,imageQualityStatus:p,done:d};r.add(h,d)}}catch(e){(()=>{if("function"==typeof a.errorInterceptor){const e=new Error("request failed");a.errorInterceptor(e)}})(),console.error(e),l(e)}})),l.getNextPromise()}function O(e,t){if(!e)return t;if(!t)return e;const n=new Uint8Array(e.length+t.length);return n.set(e,0),n.set(t,e.length),n}const M={xhrRequest:D,streamRequest:A,setOptions:P,getOptions:S};function F(e){let t,n=x.parseDicom(e,{untilTag:"x7fe00010"});n.elements.x7fe00010||console.warn("Pixel data not found!");try{t=x.parseDicom(e)}catch(e){console.error(e),console.log("pixel data dataset:",e.dataSet),t=e.dataSet}return n.elements.x7fe00010=t.elements.x7fe00010,n=function(e){const t=e.elements.x7fe00010.fragments,n=e.byteArray.length;for(const e of t){const{position:t,length:r}=e;r>n-t&&(console.log(`Truncated fragment, changing fragment length from ${e.length} to ${n-t}`),e.length=n-t)}return e}(n),n}async function R(e,t,n){const r=F(e),{uri:a,imageId:o,fileTotalLength:i}=n;return r.fetchMore=async function(s){const l=Object.assign({uri:a,imageId:o,fetchedLength:e.length,lengthToFetch:i-e.length},s),{fetchedLength:c,lengthToFetch:u}=l,{arrayBuffer:f}=await t(a,o,{byteRange:`${c}-${c+u}`}),d=new Uint8Array(f),g=new Uint8Array(r.byteArray.length+d.length);return g.set(r.byteArray),g.set(d,r.byteArray.length),R(g,t,n)},r}function U(e,t,n){const r={};(t?Object.values(t.items[0].dataSet.elements):[]).map((e=>r[e.tag]=e));const a={};return(e?Object.values(e.items[n-1].dataSet.elements):[]).map((e=>a[e.tag]=e)),{shared:r,perFrame:a}}function B(e){if(!e)return;const{elements:t,...n}=e,{x52009230:r,x52009229:a,...o}=t;return{NumberOfFrames:e.intString("x00280008"),PerFrameFunctionalGroupsSequence:r,SharedFunctionalGroupsSequence:a,otherElements:o,otherAttributtes:n}}let N={};function k(e){if(N[e])return N[e]}function _(e){if(!e)return!1;const t=e.intString("x00280008");return t&&t>1}const V={_get:k,generateMultiframeWADOURIs:function(e){const t=[],n=k(e);if(_(n)){const r=n.intString("x00280008");for(let n=1;n<=r;n++)t.push(`${e}&frame=${n}`)}else t.push(e);return t},retrieveMultiframeDataset:function(e){const t=function(e){return e.indexOf("&frame=")}(e),n=-1===t?e:e.slice(0,t),r=parseInt(e.slice(t+7),10)||1;let a;return a=N[n]?N[n].dataSet:void 0,{dataSet:a,frame:r}},isMultiframeDataset:function(e){return _(k(e))}};let $=0,j={};function G(){return{cacheSizeInBytes:$,numberOfDataSetsCached:Object.keys(N).length}}const q={isLoaded:function(e){return void 0!==N[e]},load:function(e,t=D,n){if(N[e])return new Promise((t=>{N[e].cacheCount++,t(N[e].dataSet)}));if(j[e])return j[e].cacheCount++,j[e];const r=t(e,n),a=new Promise(((o,s)=>{r.then((async function(r){const l={isPartialContent:!1,fileTotalLength:null};if(!(r instanceof ArrayBuffer)){if(!r.arrayBuffer)return s(new Error("If not returning ArrayBuffer, must return object with `arrayBuffer` parameter"));l.isPartialContent=r.flags.isPartialContent,l.fileTotalLength=r.flags.fileTotalLength,r=r.arrayBuffer}const c=new Uint8Array(r);let u;try{u=l.isPartialContent?await R(c,t,{uri:e,imageId:n,fileTotalLength:l.fileTotalLength}):x.parseDicom(c)}catch(e){return s(e)}N[e]={dataSet:u,cacheCount:a.cacheCount},$+=u.byteArray.length,o(u),(0,i.triggerEvent)(i.eventTarget,"datasetscachechanged",{uri:e,action:"loaded",cacheInfo:G()})}),s).then((()=>{delete j[e]}),(()=>{delete j[e]}))}));return a.cacheCount=1,j[e]=a,a},unload:function(e){N[e]&&(N[e].cacheCount--,0===N[e].cacheCount&&($-=N[e].dataSet.byteArray.length,delete N[e],(0,i.triggerEvent)(i.eventTarget,"datasetscachechanged",{uri:e,action:"unloaded",cacheInfo:G()})))},getInfo:G,purge:function(){N={},j={},$=0},get:function(e){let t;if(e.includes("&frame=")){const{frame:n,dataSet:r}=V.retrieveMultiframeDataset(e);t=function(e,t){if(!t)return;const{NumberOfFrames:n,PerFrameFunctionalGroupsSequence:r,SharedFunctionalGroupsSequence:a,otherElements:o}=B(t);if(r||n>1){const{shared:n,perFrame:i}=U(r,a,e),s={elements:{...o,...n,...i}},l=Object.create(t);return Object.assign(l,s)}return t}(n,r)}else N[e]&&(t=N[e].dataSet);return t},update:function(e,t){const n=N[e];n?($-=n.dataSet.byteArray.length,n.dataSet=t,$+=t.byteArray.length,(0,i.triggerEvent)(i.eventTarget,"datasetscachechanged",{uri:e,action:"updated",cacheInfo:G()})):console.error(`No loaded dataSet for uri ${e}`)}};function Y(e){return"RECON TOMO"===e||"RECON GATED TOMO"===e}function W(e,t){const n=e.string("x00080008");if(n){const e=n.split("\\");if(e.length>t)return e[t]}}function X(e){let t=h(e,"x00200037",6);return!t&&e.elements.x00209116&&(t=h(e.elements.x00209116.items[0].dataSet,"x00200037",6)),t||(t=function(e){let t;const n=e.string("x00080060");if(n?.includes("NM")){const n=W(e,2);n&&Y(n)&&e.elements.x00540022&&(t=h(e.elements.x00540022.items[0].dataSet,"x00200037",6))}return t}(e)),t}function z(e){let t=h(e,"x00200032",3);return!t&&e.elements.x00209113&&(t=h(e.elements.x00209113.items[0].dataSet,"x00200032",3)),t||(t=function(e){let t;const n=e.string("x00080060");if(n?.includes("NM")){const n=W(e,2);n&&Y(n)&&e.elements.x00540022&&(t=h(e.elements.x00540022.items[0].dataSet,"x00200032",3))}return t}(e)),t}function H(e){let t=h(e,"x00280030",2);return!t&&e.elements.x00289110&&(t=h(e.elements.x00289110.items[0].dataSet,"x00280030",2)),t}function Q(e){let t;return e.elements.x00180050?t=e.floatString("x00180050"):e.elements.x00289110&&e.elements.x00289110.items.length&&e.elements.x00289110.items[0].dataSet.elements.x00180050&&(t=e.elements.x00289110.items[0].dataSet.floatString("x00180050")),t}function J(e,t,n){const r={};for(const a of n)try{const n=t(a,e);if(n){const e={};for(const t in n)if(t in n){e[K(t)]=n[t]}Object.assign(r,e)}}catch(e){console.error(`Error retrieving ${a} data:`,e)}return r}const K=e=>e.charAt(0).toUpperCase()+e.slice(1),Z=["multiframeModule","generalSeriesModule","patientStudyModule","imagePlaneModule","nmMultiframeGeometryModule","imagePixelModule","modalityLutModule","voiLutModule","sopCommonModule","petIsotopeModule","overlayPlaneModule","transferSyntax","petSeriesModule","petImageModule"];function ee(e){const t=e.elements.x00186011;if(!t||!t.items)return[];return t.items.map((e=>{const t=e.dataSet.double("x0018602c"),n=e.dataSet.double("x0018602e"),r=e.dataSet.uint16("x00186024"),a=e.dataSet.uint16("x00186026");return{regionLocationMinY0:e.dataSet.uint16("x0018601a"),regionLocationMaxY1:e.dataSet.uint16("x0018601e"),regionLocationMinX0:e.dataSet.uint16("x00186018"),regionLocationMaxX1:e.dataSet.uint16("x0018601c"),referencePixelX0:e.dataSet.int32("x00186020")||null,referencePixelY0:e.dataSet.int32("x00186022")||null,physicalDeltaX:t,physicalDeltaY:n,physicalUnitsXDirection:r,physicalUnitsYDirection:a,referencePhysicalPixelValueY:e.dataSet.uint16("x0018602a"),referencePhysicalPixelValueX:e.dataSet.uint16("x00186028"),regionSpatialFormat:e.dataSet.uint16("x00186012"),regionDataType:e.dataSet.uint16("x00186014"),regionFlags:e.dataSet.uint16("x00186016"),transducerFrequency:e.dataSet.uint16("x00186030")}}))}const te=function e(t,n){const{MetadataModules:r}=i.Enums;if(Array.isArray(n))return;const a=y(n);if(t===r.MULTIFRAME){const e=V.retrieveMultiframeDataset(a.url);if(!e.dataSet)return;const t=function(e,t){if(!e)return;const{NumberOfFrames:n,PerFrameFunctionalGroupsSequence:r,SharedFunctionalGroupsSequence:a}=B(e);if(r||n>1){const{shared:e,perFrame:o}=U(r,a,t);return{NumberOfFrames:n,PerFrameFunctionalInformation:o,SharedFunctionalInformation:e}}return{NumberOfFrames:n}}(e.dataSet,e.frame);return t}let o=a.url;a.frame&&(o=`${o}&frame=${a.frame}`);const s=q.get(o);if(s){if(t===r.GENERAL_STUDY)return{studyDescription:s.string("x00081030"),studyDate:x.parseDA(s.string("x00080020")),studyTime:x.parseTM(s.string("x00080030")||""),accessionNumber:s.string("x00080050")};if(t===r.GENERAL_SERIES)return{modality:s.string("x00080060"),seriesInstanceUID:s.string("x0020000e"),seriesNumber:s.intString("x00200011"),studyInstanceUID:s.string("x0020000d"),seriesDate:x.parseDA(s.string("x00080021")),seriesTime:x.parseTM(s.string("x00080031")||""),acquisitionDate:x.parseDA(s.string("x00080022")),acquisitionTime:x.parseTM(s.string("x00080032")||"")};if(t===r.GENERAL_IMAGE)return{sopInstanceUID:s.string("x00080018"),instanceNumber:s.intString("x00200013"),lossyImageCompression:s.string("x00282110"),lossyImageCompressionRatio:s.floatString("x00282112"),lossyImageCompressionMethod:s.string("x00282114")};if(t===r.PATIENT)return{patientID:s.string("x00100020"),patientName:s.string("x00100010")};if(t===r.PATIENT_STUDY)return{patientAge:s.intString("x00101010"),patientSize:s.floatString("x00101020"),patientSex:s.string("x00100040"),patientWeight:s.floatString("x00101030")};if(t===r.NM_MULTIFRAME_GEOMETRY){const e=s.string("x00080060"),t=W(s,2);return{modality:e,imageType:s.string("x00080008"),imageSubType:t,imageOrientationPatient:X(s),imagePositionPatient:z(s),sliceThickness:Q(s),pixelSpacing:H(s),numberOfFrames:s.uint16("x00280008"),isNMReconstructable:Y(t)&&e.includes("NM")}}if(t===r.IMAGE_PLANE){const e=X(s),t=z(s),n=H(s),r=Q(s);let a=null,o=null;n&&(o=n[0],a=n[1]);let i=null,l=null;return e&&(i=[parseFloat(e[0]),parseFloat(e[1]),parseFloat(e[2])],l=[parseFloat(e[3]),parseFloat(e[4]),parseFloat(e[5])]),{frameOfReferenceUID:s.string("x00200052"),rows:s.uint16("x00280010"),columns:s.uint16("x00280011"),imageOrientationPatient:e,rowCosines:i,columnCosines:l,imagePositionPatient:t,sliceThickness:r,sliceLocation:s.floatString("x00201041"),pixelSpacing:n,rowPixelSpacing:o,columnPixelSpacing:a}}if(t===r.CINE)return{frameTime:s.floatString("x00181063")};if(t===r.IMAGE_PIXEL)return d(s);if(t===r.VOI_LUT){const e=p(s);return{windowCenter:h(s,"x00281050",1),windowWidth:h(s,"x00281051",1),voiLUTSequence:m(e,s.elements.x00283010)}}if(t===r.MODALITY_LUT)return{rescaleIntercept:s.floatString("x00281052"),rescaleSlope:s.floatString("x00281053"),rescaleType:s.string("x00281054"),modalityLUTSequence:m(s.uint16("x00280103"),s.elements.x00283000)};if(t===r.SOP_COMMON)return{sopClassUID:s.string("x00080016"),sopInstanceUID:s.string("x00080018")};if(t===r.PET_ISOTOPE){const e=s.elements.x00540016;if(void 0===e)return;const t=e.items[0].dataSet;return{radiopharmaceuticalInfo:{radiopharmaceuticalStartTime:x.parseTM(t.string("x00181072")||""),radionuclideTotalDose:t.floatString("x00181074"),radionuclideHalfLife:t.floatString("x00181075")}}}if(t===r.OVERLAY_PLANE)return function(e){const t=[];for(let n=0;n<=30;n+=2){let r=`x60${n.toString(16)}`;4===r.length&&(r=`x600${n.toString(16)}`);const a=e.elements[`${r}3000`];if(!a)continue;const o=[];for(let t=0;t<a.length;t++)for(let n=0;n<8;n++){const r=e.byteArray[a.dataOffset+t];o[8*t+n]=r>>n&1}t.push({rows:e.uint16(`${r}0010`),columns:e.uint16(`${r}0011`),type:e.string(`${r}0040`),x:e.int16(`${r}0050`,1)-1,y:e.int16(`${r}0050`,0)-1,pixelData:o,description:e.string(`${r}0022`),label:e.string(`${r}1500`),roiArea:e.string(`${r}1301`),roiMean:e.string(`${r}1302`),roiStandardDeviation:e.string(`${r}1303`)})}return{overlays:t}}(s);if("transferSyntax"===t){let e;try{e=s.string("x00020010")}catch(e){}return{transferSyntaxUID:e}}if(t===r.PET_SERIES)return{correctedImage:s.string("x00280051"),units:s.string("x00541001"),decayCorrection:s.string("x00541102")};if(t===r.PET_IMAGE)return{frameReferenceTime:s.floatString(s.string("x00541300")||""),actualFrameDuration:s.intString(s.string("x00181242"))};if(t===r.ULTRASOUND_ENHANCED_REGION)return ee(s);if(t===r.CALIBRATION){if("US"===s.string("x00080060")){return{sequenceOfUltrasoundRegions:ee(s)}}}return"instance"===t?J(n,e,Z):void 0}};let ne=[];const re={add:function(e){return"dicomfile:"+(ne.push(e)-1)},get:function(e){return ne[e]},remove:function(e){ne[e]=void 0},purge:function(){ne=[]}};function ae(e,t){if(e.elements.x7fe00010&&e.elements.x7fe00010.basicOffsetTable.length)return(0,x.readEncapsulatedImageFrame)(e,e.elements.x7fe00010,t);if(function(e){return e.intString("x00280008")!==e.elements.x7fe00010.fragments.length}(e)){const n=(0,x.createJPEGBasicOffsetTable)(e,e.elements.x7fe00010);return(0,x.readEncapsulatedImageFrame)(e,e.elements.x7fe00010,t,n)}const n=e.elements.x7fe00010.fragments,r=new x.ByteStream(e.byteArrayParser,e.byteArray,e.elements.x7fe00010.dataOffset),a=(0,x.readSequenceItem)(r);if("xfffee000"!==a.tag)throw"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000";r.seek(a.length);const o=r.position;if(t+1>n.length)throw"dicomParser.readEncapsulatedPixelData: frame exceeds number of fragments";const i=o+n[t].offset+8,s=n[t].length;return new Uint8Array(r.byteArray.buffer.slice(r.byteArray.byteOffset+i,r.byteArray.byteOffset+i+s))}function oe(e,t){return e&1<<t}const ie=function(e,t,n){const r=new Uint8Array(n);for(let a=0;a<n;a++){const n=e[Math.floor(a/8)+t],o=a%8;r[a]=oe(n,o)?1:0}return r};const se=function(e,t){const n=e.elements.x7fe00010||e.elements.x7fe00008,r=e.uint16("x00280100"),a=e.uint16("x00280010"),o=e.uint16("x00280011");let i=e.uint16("x00280002");"YBR_FULL_422"===e.string("x00280004")&&(i=2,console.warn("Using SamplesPerPixel of 2 for YBR_FULL_422 photometric interpretation.\n See http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.7.6.3.html for more information."));const s=n.dataOffset,l=a*o*i;let c;if(8===r){if(c=s+t*l,c>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer.slice(c,c+l))}if(16===r){if(c=s+t*l*2,c>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer.slice(c,c+2*l))}if(1===r){if(c=s+t*l*.125,c>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return ie(e.byteArray,c,l)}if(32===r){if(c=s+t*l*4,c>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer.slice(c,c+4*l))}throw new Error("unsupported pixel format")};const le=function(e){const t=y(e),n=parseInt(t.url,10),r=re.get(n);return new Promise(((e,t)=>{const n=new FileReader;n.onload=t=>{const n=t.target.result;e(n)},n.onerror=t,n.readAsArrayBuffer(r)}))};const ce=function(e){let t,n=e[0],r=e[0];const a=e.length;for(let o=1;o<a;o++)t=e[o],n=Math.min(n,t),r=Math.max(r,t);return{min:n,max:r}};function ue(n,r,a){0===n.planarConfiguration?e(n.pixelData,r,a):t(n.pixelData,r,a)}function fe(e,t,a){if("RGB"===e.photometricInterpretation)ue(e,t,a);else if("YBR_RCT"===e.photometricInterpretation)ue(e,t,a);else if("YBR_ICT"===e.photometricInterpretation)ue(e,t,a);else if("PALETTE COLOR"===e.photometricInterpretation)c(e,t,a);else if("YBR_FULL_422"===e.photometricInterpretation)!function(e,t,n){if(void 0===e)throw new Error("convertYBRFull422ByPixel: ybrBuffer must be defined");if(e.length%2!=0)throw new Error(`convertYBRFull422ByPixel: ybrBuffer length ${e.length} must be divisible by 2`);const r=e.length/2;let a=0,o=0;if(n)for(let n=0;n<r;n+=2){const n=e[a++],r=e[a++],i=e[a++],s=e[a++];t[o++]=n+1.402*(s-128),t[o++]=n-.34414*(i-128)-.71414*(s-128),t[o++]=n+1.772*(i-128),t[o++]=255,t[o++]=r+1.402*(s-128),t[o++]=r-.34414*(i-128)-.71414*(s-128),t[o++]=r+1.772*(i-128),t[o++]=255}else for(let n=0;n<r;n+=2){const n=e[a++],r=e[a++],i=e[a++],s=e[a++];t[o++]=n+1.402*(s-128),t[o++]=n-.34414*(i-128)-.71414*(s-128),t[o++]=n+1.772*(i-128),t[o++]=r+1.402*(s-128),t[o++]=r-.34414*(i-128)-.71414*(s-128),t[o++]=r+1.772*(i-128)}}(e.pixelData,t,a);else{if("YBR_FULL"!==e.photometricInterpretation)throw new Error(`No color space conversion for photometric interpretation ${e.photometricInterpretation}`);!function(e,t,a){0===e.planarConfiguration?n(e.pixelData,t,a):r(e.pixelData,t,a)}(e,t,a)}}function de(e){return function(e){let t;try{return decodeURIComponent(escape(e))}catch(n){if(t=n,t instanceof URIError)return e;throw t}}(String.fromCharCode.apply(null,Array.prototype.slice.apply(new Uint8Array(e))))}const ge=function(e,t,n){const r=(new Date).getTime(),a=new Blob([t],{type:"image/jpeg"});return new Promise(((t,o)=>{const i=new FileReader;void 0===i.readAsBinaryString?i.readAsArrayBuffer(a):i.readAsBinaryString(a),i.onload=function(){const a=new Image;a.onload=function(){n.height=a.height,n.width=a.width,e.rows=a.height,e.columns=a.width;const o=n.getContext("2d");o.drawImage(this,0,0);const i=o.getImageData(0,0,a.width,a.height),s=(new Date).getTime();e.pixelData=new Uint8Array(i.data.buffer),e.imageData=i,e.decodeTimeInMS=s-r;const l=ce(e.pixelData);e.smallestPixelValue=l.min,e.largestPixelValue=l.max,e.pixelDataLength=e.pixelData.length,t(e)},a.onerror=function(e){o(e)},void 0===i.readAsBinaryString?a.src=`data:image/jpeg;base64,${window.btoa(de(i.result))}`:a.src=`data:image/jpeg;base64,${window.btoa(i.result)}`},i.onerror=e=>{o(e)}}))};function me(e,t,n,r,a){const o={...r};delete o.loader,delete o.streamingData;const s=(0,i.getWebWorkerManager)(),l=o.priority||void 0;o.transferPixelData&&n.buffer;return s.executeTask("dicomImageLoader","decodeTask",{imageFrame:e,transferSyntax:t,pixelData:n,options:o,decodeConfig:a},{priority:l,requestType:o?.requestType})}const pe=function(e,t,n,r,a={},o){switch(t){case"1.2.840.10008.1.2":case"1.2.840.10008.1.2.1":case"1.2.840.10008.1.2.2":case"1.2.840.10008.1.2.1.99":case"1.2.840.10008.1.2.5":case"1.2.840.10008.1.2.4.51":case"1.2.840.10008.1.2.4.57":case"1.2.840.10008.1.2.4.70":case"1.2.840.10008.1.2.4.80":case"1.2.840.10008.1.2.4.81":case"1.2.840.10008.1.2.4.90":case"1.2.840.10008.1.2.4.91":case"3.2.840.10008.1.2.4.96":case"1.2.840.10008.1.2.4.201":case"1.2.840.10008.1.2.4.202":case"1.2.840.10008.1.2.4.203":return me(e,t,n,a,o);case"1.2.840.10008.1.2.4.50":return 8!==e.bitsAllocated||3!==e.samplesPerPixel&&4!==e.samplesPerPixel?me(e,t,n,a,o):ge(e,n,r)}return Promise.reject(new Error(`No decoder for transfer syntax ${t}`))};const he=function(e){const t=i.metaData.get("imagePixelModule",e);return{samplesPerPixel:t.samplesPerPixel,photometricInterpretation:t.photometricInterpretation,planarConfiguration:t.planarConfiguration,rows:t.rows,columns:t.columns,bitsAllocated:t.bitsAllocated,bitsStored:t.bitsStored,pixelRepresentation:t.pixelRepresentation,smallestPixelValue:t.smallestPixelValue,largestPixelValue:t.largestPixelValue,redPaletteColorLookupTableDescriptor:t.redPaletteColorLookupTableDescriptor,greenPaletteColorLookupTableDescriptor:t.greenPaletteColorLookupTableDescriptor,bluePaletteColorLookupTableDescriptor:t.bluePaletteColorLookupTableDescriptor,redPaletteColorLookupTableData:t.redPaletteColorLookupTableData,greenPaletteColorLookupTableData:t.greenPaletteColorLookupTableData,bluePaletteColorLookupTableData:t.bluePaletteColorLookupTableData,pixelData:void 0,imageId:e}};function xe(e){return"RGB"===e||"PALETTE COLOR"===e||"YBR_FULL"===e||"YBR_FULL_422"===e||"YBR_PARTIAL_422"===e||"YBR_PARTIAL_420"===e||"YBR_RCT"===e||"YBR_ICT"===e}let ye="";function be(e){const t=function(e,t){let n;return Number.isInteger(e)&&Number.isInteger(t)&&(e>=0?t<=255?n=Uint8Array:t<=65535&&(n=Uint16Array):e>=-128&&t<=127?n=Int8Array:e>=-32768&&t<=32767&&(n=Int16Array)),n||Float32Array}(e.smallestPixelValue,e.largestPixelValue);if(!t)throw new Error("Could not apply a typed array to the pixel data");{const n=new t(e.pixelData);e.pixelData=n}}const Pe=function(e,t,n,r={}){const a=r.useRGBA;if(r.preScale={enabled:!r.preScale||void 0===r.preScale.enabled||r.preScale.enabled},!t?.length)return Promise.reject(new Error("The pixel data is missing"));const{MetadataModules:o}=i.Enums,s=document.createElement("canvas"),l=he(e);if(l.decodeLevel=r.decodeLevel,r.allowFloatRendering=(0,i.canRenderFloatTextures)(),r.preScale.enabled){const t=function(e,t){const n=e.get("modalityLutModule",t)||{},r=e.get("generalSeriesModule",t)||{},{modality:a}=r,o={rescaleSlope:n.rescaleSlope,rescaleIntercept:n.rescaleIntercept,modality:a},i=e.get("scalingModule",t)||{};return{...o,..."PT"===a&&{suvbw:i.suvbw}}}(i.metaData,e);t&&(r.preScale={...r.preScale,scalingParameters:t})}const{decodeConfig:c}=S();Object.keys(l).forEach((e=>{("function"==typeof l[e]||l[e]instanceof Promise)&&delete l[e]}));const u=pe(l,n,t,s,r,c),f=xe(l.photometricInterpretation);return new Promise(((t,n)=>{u.then((function(n){let l=!1;if(r.targetBuffer&&r.targetBuffer.type&&!f){const{arrayBuffer:e,type:t,offset:a=0,length:o}=r.targetBuffer,i=n.pixelDataLength,s=a,c=null!=o?o:i-s,u={Uint8Array,Uint16Array,Int16Array,Float32Array};if(c!==n.pixelDataLength)throw new Error(`target array for image does not have the same length (${c}) as the decoded image length (${n.pixelDataLength}).`);const f=u[t],d=e?new f(e,s,c):new f(n.pixelData);if(c!==n.pixelDataLength)throw new Error("target array for image does not have the same length as the decoded image length.");n.pixelData=d,l=!0}l||be(n);const c=i.metaData.get(o.IMAGE_PLANE,e)||{},u=i.metaData.get(o.VOI_LUT,e)||{},d=i.metaData.get(o.MODALITY_LUT,e)||{},g=i.metaData.get(o.SOP_COMMON,e)||{},m=i.metaData.get(o.CALIBRATION,e)||{},{rows:p,columns:h}=n;if(f){if(function(e){if(void 0===e)return!1;const{rows:t,columns:n,photometricInterpretation:r,pixelDataLength:a,planarConfiguration:o}=e;return a!==4*n*t&&(r.endsWith("420")?a===(3*Math.ceil(n/2)+Math.floor(n/2))*t:r.endsWith("422")?a===(3*Math.ceil(n/2)+Math.floor(n/2))*Math.ceil(t/2)+Math.floor(t/2)*n:"RGB"!==r||1===o)}(n)){s.height=n.rows,s.width=n.columns;let e=s.getContext("2d").createImageData(n.columns,n.rows);a||(e={...e,data:new Uint8ClampedArray(3*n.columns*n.rows)}),fe(n,e.data,a),n.imageData=e,n.pixelData=e.data,n.pixelDataLength=e.data.length}else if(!a&&n.pixelDataLength===4*p*h){const e=new Uint8Array(n.pixelData.length/4*3);n.pixelData=function(e,t){const n=e.length/4;let r=0,a=0;for(let o=0;o<n;o++)t[a++]=e[r++],t[a++]=e[r++],t[a++]=e[r++],r++;return t}(n.pixelData,e),n.pixelDataLength=n.pixelData.length}const e=ce(n.pixelData);n.smallestPixelValue=e.min,n.largestPixelValue=e.max}const x=i.utilities.VoxelManager.createImageVoxelManager({scalarData:n.pixelData,width:n.columns,height:n.rows,numberOfComponents:n.samplesPerPixel}),y={imageId:e,dataType:n.pixelData.constructor.name,color:f,calibration:m,columnPixelSpacing:c.columnPixelSpacing,columns:n.columns,height:n.rows,preScale:n.preScale,intercept:d.rescaleIntercept?d.rescaleIntercept:0,slope:d.rescaleSlope?d.rescaleSlope:1,invert:"MONOCHROME1"===n.photometricInterpretation,minPixelValue:n.smallestPixelValue,maxPixelValue:n.largestPixelValue,rowPixelSpacing:c.rowPixelSpacing,rows:n.rows,sizeInBytes:n.pixelData.byteLength,width:n.columns,windowCenter:u.windowCenter?u.windowCenter[0]:void 0,windowWidth:u.windowWidth?u.windowWidth[0]:void 0,voiLUTFunction:u.voiLUTFunction?u.voiLUTFunction:void 0,decodeTimeInMS:n.decodeTimeInMS,floatPixelData:void 0,imageFrame:n,voxelManager:x,rgba:f&&a,getPixelData:()=>n.pixelData,getCanvas:void 0,numberOfComponents:n.samplesPerPixel};var b;if(y.color&&(y.getCanvas=function(){if(ye===e)return s;const t=y.columns,r=y.rows;s.height=r,s.width=t;const a=s.getContext("2d"),o=a.createImageData(t,r),i=n.pixelData;if(i.length===t*r*4)for(let e=0;e<i.length;e++)o.data[e]=i[e];else if(i.length===t*r*3){let e=0;for(let t=0;t<i.length;t+=3)o.data[e++]=i[t],o.data[e++]=i[t+1],o.data[e++]=i[t+2],o.data[e++]=255}return n.pixelData=o.data,n.pixelDataLength=o.data.length,n.imageData=o,a.putImageData(n.imageData,0,0),ye=e,s}),d.modalityLUTSequence&&d.modalityLUTSequence.length>0&&("1.2.840.10008.5.1.4.1.1.12.1"!==(b=g.sopClassUID)&&"1.2.840.10008.5.1.4.1.1.12.2.1"!==b)&&(y.modalityLUT=d.modalityLUTSequence[0]),u.voiLUTSequence&&u.voiLUTSequence.length>0&&(y.voiLUT=u.voiLUTSequence[0]),y.color&&(y.windowWidth=256,y.windowCenter=128),void 0===y.windowCenter||void 0===y.windowWidth){const e=y.imageFrame.smallestPixelValue,t=y.imageFrame.largestPixelValue;y.windowWidth=t-e,y.windowCenter=(t+e)/2}t(y)}),n)}))};const Se=function(e,t=0){const n=e.elements.x7fe00010||e.elements.x7fe00008;return n?n.encapsulatedPixelData?ae(e,t):se(e,t):null};function De(e,t,n=0,r,a,o){const i=(new Date).getTime(),s={cancelFn:void 0,promise:void 0};return s.promise=new Promise(((l,c)=>{e.then((e=>{const u=Se(e,n),f=e.string("x00020010"),d=(new Date).getTime(),g=Pe(t,u,f,a);!function(e,t){e.decache=function(){const e=y(t);q.unload(e.url)}}(s,t),g.then((t=>{t.data=e,t.sharedCacheKey=r;const n=(new Date).getTime();t.loadTimeInMS=d-i,t.totalTimeInMS=n-i,void 0!==o&&void 0!==o.imageDoneCallback&&o.imageDoneCallback(t),l(t)}),(function(t){c({error:t,dataSet:e})}))}),(function(e){c({error:e})}))})),s}function we(e){return"dicomweb"===e||"wadouri"===e?D:"dicomfile"===e?le:void 0}function Te(e,t={}){const n=y(e);delete(t=Object.assign({},t)).loader;const r=we(n.scheme);if(q.isLoaded(n.url)){return function(e,t,n=0,r,a){const o=(new Date).getTime();return{promise:new Promise(((i,s)=>{const l=(new Date).getTime();let c;try{const r=Se(e,n),o=e.string("x00020010");c=Pe(t,r,o,a)}catch(t){return void s({error:t,dataSet:e})}c.then((t=>{t.data=e,t.sharedCacheKey=r;const n=(new Date).getTime();t.loadTimeInMS=l-o,t.totalTimeInMS=n-o,i(t)}),s)})),cancelFn:void 0}}(q.get(n.url,r,e),e,n.pixelDataFrame,n.url,t)}return De(q.load(n.url,r,e),e,n.frame,n.url,t)}function Ie(){(0,i.registerImageLoader)("dicomweb",Te),(0,i.registerImageLoader)("wadouri",Te),(0,i.registerImageLoader)("dicomfile",Te),i.metaData.addProvider(te)}const Le={metaData:{getImagePixelModule:d,getLUTs:m,getModalityLUTOutputPixelRepresentation:p,getNumberValues:h,metaDataProvider:te},dataSetCacheManager:q,fileManager:re,getEncapsulatedImageFrame:ae,getUncompressedImageFrame:se,loadFileRequest:le,loadImageFromPromise:De,getLoaderForScheme:we,loadImage:Te,parseImageId:y,unpackBinaryFrame:ie,register:Ie};const Ce=function(e,t,n){return t=t||0,e&&e.Value?Array.isArray(e.Value)&&e.Value.length<=t?n:e.Value[t]:n};const ve=function(e,t,n){const r=Ce(e,t,n);if(void 0!==r)return parseFloat(String(r))};const Ee=function(e,t){const n=Ce(e,t);if(void 0!==n)return parseFloat(n)};const Ae=function(e,t){if(!e)return;if(!e.Value)return;if(!Array.isArray(e.Value))return;if(t&&e.Value.length<t)return;const n=[];for(let t=0;t<e.Value.length;t++)n.push(parseFloat(e.Value[t]));return n};function Oe(e){const t=e.indexOf(":");return e.substring(t+1)}function Me(e,t=!0){return e&&e.Value?e.Value[0]&&t?e.Value[0]:e.Value:e}function Fe(e,t,n){return{shared:(t?Object.values(t[0]):[]).map((e=>e[0])).filter((e=>void 0!==e&&"object"==typeof e)),perFrame:(e?Object.values(e[n-1]):[]).map((e=>e.Value[0])).filter((e=>void 0!==e&&"object"==typeof e))}}function Re(e){let{52009230:t,52009229:n,"00280008":r,...a}=e;return t=Me(t,!1),n=Me(n,!1),r=Me(r),{PerFrameFunctionalGroupsSequence:t,SharedFunctionalGroupsSequence:n,NumberOfFrames:r,rest:a}}let Ue=[],Be={};function Ne(e){const t=e.indexOf("/frames/")+8,n=e.slice(0,t),r=parseInt(e.slice(t),10);return{metadata:Ue[`${n}1`],frame:r}}function ke(e){const t=Ce(e["00280008"]);return t&&t>1}const _e={add:function(e,t){const n=Oe(e);Object.defineProperty(t,"isMultiframe",{value:ke(t),enumerable:!1}),Ue[n]=t},get:function(e){const t=Oe(e),n=Ue[t];if(n&&!n?.isMultiframe)return n;const r=Be[t];if(r)return r;const a=Ne(t);if(!a||!a.metadata)return;const{metadata:o,frame:i}=a;if(o){const e=function(e,t){const{PerFrameFunctionalGroupsSequence:n,SharedFunctionalGroupsSequence:r,NumberOfFrames:a,rest:o}=Re(t);if(n||a>1){const{shared:i,perFrame:s}=Fe(n,r,e),l=Object.assign(t,{frameNumber:e});return[...i,...s].forEach((e=>{Object.entries(e).forEach((([e,t])=>{l[e]=t}))})),Object.assign(o,{"00280008":a},l)}return t}(i,o);return Be[t]=e,e}},remove:function(e){const t=Oe(e);Ue[t]=void 0,Be[t]=void 0},purge:function(){Ue=[],Be={}}};function Ve(e){return Ce(e["00080060"]).includes("NM")}function $e(e,t){const n=Me(e["00080008"],!1);if(n)return n[t]}function je(e){let t=Ae(e["00200037"],6);return!t&&Ve(e)&&(t=function(e){let t;const n=$e(e,2);if(n&&Y(n)){const n=Me(e["00540022"]);n&&(t=Ae(n["00200037"],6))}return t}(e)),t}function Ge(e){let t=Ae(e["00200032"],3);return!t&&Ve(e)&&(t=function(e){let t;const n=$e(e,2);if(n&&Y(n)){const n=Me(e["00540022"]);n&&(t=Ae(n["00200032"],3))}return t}(e)),t}function qe(e,t){const n=Ae(e[t]);return n?n[0]:null}const Ye=function(e){return e?.Value?.length?Array.isArray(e.Value)?e.Value:"object"==typeof e.Value?(console.warn("Warning: Value should be an array, but an object was found. Encapsulating the object in an array."),[e.Value]):[]:[]};function We(e){const t=Ye(e["00186011"]);if(!t||!t.length)return null;return t.map((e=>{const t=qe(e,"0018602C"),n=qe(e,"0018602E"),r=qe(e,"00186024"),a=qe(e,"00186026");return{regionLocationMinY0:qe(e,"0018601A"),regionLocationMaxY1:qe(e,"0018601E"),regionLocationMinX0:qe(e,"00186018"),regionLocationMaxX1:qe(e,"0018601C"),referencePixelX0:qe(e,"00186020"),referencePixelY0:qe(e,"00186022"),physicalDeltaX:t,physicalDeltaY:n,physicalUnitsXDirection:r,physicalUnitsYDirection:a,referencePhysicalPixelValueY:qe(e,"0018602A"),referencePhysicalPixelValueX:qe(e,"00186028"),regionSpatialFormat:qe(e,"00186012"),regionDataType:qe(e,"00186014"),regionFlags:qe(e,"00186016"),transducerFrequency:qe(e,"00186030")}}))}function Xe(e,t){return{transferSyntaxUID:Ce(t["00020010"])||Ce(t["00083002"])}}const ze=function e(t,n){const{MetadataModules:r}=i.Enums;if(t===r.MULTIFRAME){const{metadata:e,frame:t}=function(e){return Ne(Oe(e))}(n);if(!e)return;const{PerFrameFunctionalGroupsSequence:r,SharedFunctionalGroupsSequence:a,NumberOfFrames:o}=Re(e);if(r||o>1){const{shared:e,perFrame:n}=Fe(r,a,t);return{NumberOfFrames:o,PerFrameFunctionalInformation:n,SharedFunctionalInformation:e}}return{NumberOfFrames:o}}const a=_e.get(n);if(a){if(t===r.GENERAL_STUDY)return{studyDescription:Ce(a["00081030"]),studyDate:x.parseDA(Ce(a["00080020"])),studyTime:x.parseTM(Ce(a["00080030"],0,"")),accessionNumber:Ce(a["00080050"])};if(t===r.GENERAL_SERIES)return{modality:Ce(a["00080060"]),seriesInstanceUID:Ce(a["0020000E"]),seriesNumber:Ee(a["00200011"]),studyInstanceUID:Ce(a["0020000D"]),seriesDate:x.parseDA(Ce(a["00080021"])),seriesTime:x.parseTM(Ce(a["00080031"],0,"")),acquisitionDate:x.parseDA(Ce(a["00080022"])),acquisitionTime:x.parseTM(Ce(a["00080032"],0,""))};if(t===r.GENERAL_IMAGE)return{sopInstanceUID:Ce(a["00080018"]),instanceNumber:Ee(a["00200013"]),lossyImageCompression:Ce(a["00282110"]),lossyImageCompressionRatio:Ee(a["00282112"]),lossyImageCompressionMethod:Ce(a["00282114"])};if(t===r.PATIENT)return{patientID:Ce(a["00100020"]),patientName:Ce(a["00100010"])};if(t===r.PATIENT_STUDY)return{patientAge:Ee(a["00101010"]),patientSize:Ee(a["00101020"]),patientSex:Ce(a["00100040"]),patientWeight:Ee(a["00101030"])};if(t===r.NM_MULTIFRAME_GEOMETRY){const e=Ce(a["00080060"]),t=$e(a,2);return{modality:e,imageType:Ce(a["00080008"]),imageSubType:t,imageOrientationPatient:je(a),imagePositionPatient:Ge(a),sliceThickness:Ee(a["00180050"]),spacingBetweenSlices:Ee(a["00180088"]),pixelSpacing:Ae(a["00280030"],2),numberOfFrames:Ee(a["00280008"]),isNMReconstructable:Y(t)&&e.includes("NM")}}if(t===r.IMAGE_PLANE){let e=je(a),t=Ge(a);const n=Ae(a["00280030"],2);let r=null,o=null,i=null,s=null,l=!1;return n?(o=n[0],r=n[1]):(l=!0,o=1,r=1),e?(i=[parseFloat(e[0]),parseFloat(e[1]),parseFloat(e[2])],s=[parseFloat(e[3]),parseFloat(e[4]),parseFloat(e[5])]):(i=[0,1,0],s=[0,0,-1],l=!0,e=[...i,...s]),t||(t=[0,0,0],l=!0),{frameOfReferenceUID:Ce(a["00200052"]),rows:Ee(a["00280010"]),columns:Ee(a["00280011"]),imageOrientationPatient:e,rowCosines:i,columnCosines:s,imagePositionPatient:t,sliceThickness:Ee(a["00180050"]),sliceLocation:Ee(a["00201041"]),pixelSpacing:n,rowPixelSpacing:o,columnPixelSpacing:r,usingDefaultValues:l}}if(t===r.ULTRASOUND_ENHANCED_REGION)return We(a);if(t===r.CALIBRATION){if("US"===Ce(a["00080060"])){return{sequenceOfUltrasoundRegions:We(a)}}}if(t===r.IMAGE_URL)return function(e,t){const{transferSyntaxUID:n}=Xe(e,t),r=i.utilities.isVideoTransferSyntax(n),a=e.substring(7),o=a.replace("/frames/","/thumbnail/");let s=a.replace("/frames/","/rendered/");r&&(s=s.replace("/rendered/1","/rendered"));return{isVideo:r,rendered:s,thumbnail:o}}(n,a);if(t===r.CINE)return function(e,t){const n=Ce(t["00180040"]);return{cineRate:n,numberOfFrames:Ee(t["00280008"])}}(0,a);if(t===r.IMAGE_PIXEL)return{samplesPerPixel:Ee(a["00280002"]),photometricInterpretation:Ce(a["00280004"]),rows:Ee(a["00280010"]),columns:Ee(a["00280011"]),bitsAllocated:Ee(a["00280100"]),bitsStored:Ee(a["00280101"]),highBit:Ce(a["00280102"]),pixelRepresentation:Ee(a["00280103"]),planarConfiguration:Ee(a["00280006"]),pixelAspectRatio:Ce(a["00280034"]),smallestPixelValue:Ee(a["00280106"]),largestPixelValue:Ee(a["00280107"]),redPaletteColorLookupTableDescriptor:Ae(a["00281101"]),greenPaletteColorLookupTableDescriptor:Ae(a["00281102"]),bluePaletteColorLookupTableDescriptor:Ae(a["00281103"]),redPaletteColorLookupTableData:Ae(a["00281201"]),greenPaletteColorLookupTableData:Ae(a["00281202"]),bluePaletteColorLookupTableData:Ae(a["00281203"])};if(t===r.VOI_LUT)return{windowCenter:Ae(a["00281050"],1),windowWidth:Ae(a["00281051"],1)};if(t===r.MODALITY_LUT)return{rescaleIntercept:Ee(a["00281052"]),rescaleSlope:Ee(a["00281053"]),rescaleType:Ce(a["00281054"])};if(t===r.SOP_COMMON)return{sopClassUID:Ce(a["00080016"]),sopInstanceUID:Ce(a["00080018"])};if(t===r.PET_ISOTOPE){const e=Ce(a["00540016"]);if(void 0===e)return;return{radiopharmaceuticalInfo:{radiopharmaceuticalStartTime:x.parseTM(Ce(e["00181072"],0,"")),radiopharmaceuticalStartDateTime:Ce(e["00181078"],0,""),radionuclideTotalDose:Ee(e["00181074"]),radionuclideHalfLife:Ee(e["00181075"])}}}return t===r.OVERLAY_PLANE?function(e){const t=[];for(let n=0;n<=30;n+=2){let r=`x60${n.toString(16)}`;4===r.length&&(r=`x600${n.toString(16)}`);const a=Ce(e[`${r}3000`]);if(!a)continue;const o=[];for(let t=0;t<a.length;t++)for(let n=0;n<8;n++){const r=e.Value[a.dataOffset+t];o[8*t+n]=r>>n&1}t.push({rows:Ee(e[`${r}0010`]),columns:Ee(e[`${r}0011`]),type:Ce(e[`${r}0040`]),x:Ee(e[`${r}0050`],1)-1,y:Ee(e[`${r}0050`],0)-1,pixelData:o,description:Ce(e[`${r}0022`]),label:Ce(e[`${r}1500`]),roiArea:Ce(e[`${r}1301`]),roiMean:Ce(e[`${r}1302`]),roiStandardDeviation:Ce(e[`${r}1303`])})}return{overlays:t}}(a):"transferSyntax"===t?Xe(n,a):t===r.PET_SERIES?{correctedImage:Ce(a["00280051"]),units:Ce(a["00541001"]),decayCorrection:Ce(a["00541102"])}:t===r.PET_IMAGE?{frameReferenceTime:Ee(a["00541300"]),actualFrameDuration:Ee(a["00181242"])}:"instance"===t?J(n,e,Z):void 0}};function He(e,t,n={},r={}){const a=S(),{retrieveOptions:o={},streamingData:i}=r,s=i.chunkSize||function(e,t,n){const r=t[n];if("function"!=typeof r)return r;const a=_e.get(e);return r(a,e)}(t,o,"chunkSize")||65536,l=new Promise((async(t,r)=>{const l=Object.assign({},n);Object.keys(l).forEach((function(e){null!==l[e]&&void 0!==l[e]||delete l[e]}));try{i.encodedData||(i.chunkSize=s,i.rangesFetched=0);const n=function(e,t){const{totalBytes:n,encodedData:r,chunkSize:a=65536}=e,{rangeIndex:o=0}=t;if(!(-1!==o||n&&r))return[0,""];if(-1===o||r?.byteLength>n-a)return[r?.byteLength||0,""];return[r?.byteLength||0,a*(o+1)-1]}(i,o),{encodedData:r,responseHeaders:a}=await async function(e,t,n,r){n&&(t=Object.assign(t,{Range:`bytes=${n[0]}-${n[1]}`}));let{encodedData:a}=r;if(n[1]&&a?.byteLength>n[1])return r;const o=await fetch(e,{headers:t,signal:void 0}),i=await o.arrayBuffer(),s=new Uint8Array(i),{status:l}=o;let c;a?(c=new Uint8Array(a.length+s.length),c.set(a,0),c.set(s,a.length),r.rangesFetched=1):(c=new Uint8Array(s.length),c.set(s,0),r.rangesFetched++);r.encodedData=a=c,r.responseHeaders=o.headers;const u=o.headers.get("Content-Range");u?r.totalBytes=Number(u.split("/")[1]):206===l&&n?""===n[1]||a?.length<n[1]?r.totalBytes=a.byteLength:r.totalBytes=Number.MAX_SAFE_INTEGER:r.totalBytes=a?.byteLength;return r}(e,l,n,i),c=a.get("content-type"),{totalBytes:u}=i,f=u===r.byteLength,d=L(c,r,{isPartial:!0}),g=v(o,f||d.extractDone);t({...d,imageQualityStatus:g,percentComplete:d.extractDone?100:100*s/u})}catch(e){(e=>{if("function"==typeof a.errorInterceptor){const e=new Error("request failed");a.errorInterceptor(e)}else console.warn("rangeRequest:Caught",e)})(e),console.error(e),r(e)}}));return l}const Qe=function(e,t,n="application/octet-stream",r){const{streamingData:a,retrieveOptions:o={}}=r||{},i={Accept:n};let s=o.urlArguments?`${e}${-1===e.indexOf("?")?"?":"&"}${o.urlArguments}`:e;if(o.framesPath&&(s=s.replace("/frames/",o.framesPath)),a?.url!==s&&(r.streamingData={url:s}),void 0!==o.rangeIndex)return He(s,t,i,r);if(o.streaming)return A(s,t,i,r);const l=D(s,t,i),{xhr:c}=l;return l.then((function(e){const t=L(c.getResponseHeader("Content-Type")||"application/octet-stream",new Uint8Array(e));return t.imageQualityStatus=v(o,!0),t}))},{ProgressiveIterator:Je}=i.utilities,{ImageQualityStatus:Ke}=i.Enums,Ze=new Set(["3.2.840.10008.1.2.4.96","1.2.840.10008.1.2.4.202","1.2.840.10008.1.2.4.203"]);function et(e){const t="1.2.840.10008.1.2";if(!e)return t;const n=e.split(";"),r={};n.forEach((e=>{const t=e.split("=");if(2!==t.length)return;const n=t[1].trim().replace(/"/g,"");r[t[0].trim()]=n}));const a={"image/jpeg":"1.2.840.10008.1.2.4.50","image/x-dicom-rle":"1.2.840.10008.1.2.5","image/x-jls":"1.2.840.10008.1.2.4.80","image/jls":"1.2.840.10008.1.2.4.80","image/jll":"1.2.840.10008.1.2.4.70","image/jp2":"1.2.840.10008.1.2.4.90","image/jpx":"1.2.840.10008.1.2.4.92","image/jphc":"3.2.840.10008.1.2.4.96","image/jxl":"1.2.840.10008.1.2.4.140"};return r["transfer-syntax"]?r["transfer-syntax"]:e&&!Object.keys(r).length&&a[e]?a[e]:r.type&&a[r.type]?a[r.type]:a[e]?a[e]:t}function tt(e,t=4){const n=e/100-.02;return n>1/4?Math.min(t,0):n>1/16?Math.min(t,1):n>1/64?Math.min(t,2):Math.min(t,3)}const nt=function(e,t={}){const n=i.imageRetrievalPoolManager,r=(new Date).getTime(),a=new Je("decompress"),o=t.requestType||i.Enums.RequestType.INTERACTION,s=t.additionalDetails||{imageId:e},l=void 0===t.priority?5:t.priority,c=e.substring(7);return n.addRequest(async function(e,n,o){a.generate((async a=>{const i=Je.as(Qe(e,n,o,t));let s=10;for await(const e of i){const{pixelData:o,imageQualityStatus:i=Ke.FULL_RESOLUTION,percentComplete:l,done:c=!0,extractDone:u=!0}=e,f=et(e.contentType);if(!u&&!Ze.has(f))continue;const d=e.decodeLevel??(i===Ke.FULL_RESOLUTION?0:tt(l,t.retrieveOptions?.decodeLevel));if(c||!(s<=d))try{const e={...t,decodeLevel:d},l=await Pe(n,o,f,e),u=(new Date).getTime();l.loadTimeInMS=u-r,l.transferSyntaxUID=f,l.imageQualityStatus=i,a.add(l,c),s=d}catch(e){if(u)throw console.warn("Couldn't decode",e),e}}}))}.bind(this,c,e,"multipart/related; type=application/octet-stream; transfer-syntax=*"),o,s,l),{promise:a.getDonePromise(),cancelFn:void 0}};function rt(){(0,i.registerImageLoader)("wadors",nt),i.metaData.addProvider(ze)}const at={metaData:{getNumberString:ve,getNumberValue:Ee,getNumberValues:Ae,getValue:Ce,metaDataProvider:ze},findIndexOfString:T,getPixelData:Qe,loadImage:nt,metaDataManager:_e,register:rt};const ot=function(){rt(),Ie()},it=()=>new Worker(new URL(a.p+a.u(918),a.b),{type:void 0});const st=function(e){P(e),ot();const t=(0,i.getWebWorkerManager)(),n=e?.maxWebWorkers||function(){if("undefined"!=typeof navigator&&navigator.hardwareConcurrency)return Math.max(1,Math.floor(navigator.hardwareConcurrency/2));return 1}();t.registerWorker("dicomImageLoader",it,{maxWorkerInstances:n})};const lt=function(e,t){if(t=t||e.transferSyntax,8===e.bitsAllocated&&"1.2.840.10008.1.2.4.50"===t&&(3===e.samplesPerPixel||4===e.samplesPerPixel))return!0},ct={convertRGBColorByPixel:e,convertRGBColorByPlane:t,convertYBRFullByPixel:n,convertYBRFullByPlane:r,convertPALETTECOLOR:c,wadouri:Le,wadors:at,init:st,convertColorSpace:fe,createImage:Pe,decodeJPEGBaseline8BitColor:ge,getImageFrame:he,getPixelData:Qe,getMinMax:ce,isColorImage:xe,isJPEGBaseline8BitColor:lt,internal:M}})(),o})()));
|
|
2
2
|
//# sourceMappingURL=cornerstoneDICOMImageLoader.min.js.map
|