25003 lines
1.6 MiB
25003 lines
1.6 MiB
(function (global, factory) {
|
||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.dcmjs = {}));
|
||
})(this, (function (exports) { 'use strict';
|
||
|
||
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
||
|
||
function getDefaultExportFromCjs (x) {
|
||
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
||
}
|
||
|
||
var lib = {exports: {}};
|
||
|
||
/*
|
||
Copyright © 2018 Andrew Powell
|
||
|
||
This Source Code Form is subject to the terms of the Mozilla Public
|
||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||
|
||
The above copyright notice and this permission notice shall be
|
||
included in all copies or substantial portions of this Source Code Form.
|
||
*/
|
||
|
||
const noop = () => {};
|
||
const levels = Symbol('log-levels');
|
||
const instance = Symbol('log-instance');
|
||
|
||
var MethodFactory_1 = class MethodFactory {
|
||
constructor(logger) {
|
||
this[instance] = logger;
|
||
this[levels] = {
|
||
TRACE: 0,
|
||
DEBUG: 1,
|
||
INFO: 2,
|
||
WARN: 3,
|
||
ERROR: 4,
|
||
SILENT: 5
|
||
};
|
||
}
|
||
|
||
get levels() {
|
||
return this[levels];
|
||
}
|
||
|
||
get logger() {
|
||
return this[instance];
|
||
}
|
||
|
||
set logger(logger) {
|
||
this[instance] = logger;
|
||
}
|
||
|
||
get methods() {
|
||
return Object.keys(this.levels)
|
||
.map((key) => key.toLowerCase())
|
||
.filter((key) => key !== 'silent');
|
||
}
|
||
|
||
// eslint-disable-next-line class-methods-use-this
|
||
bindMethod(obj, methodName) {
|
||
const method = obj[methodName];
|
||
if (typeof method.bind === 'function') {
|
||
return method.bind(obj);
|
||
}
|
||
|
||
try {
|
||
return Function.prototype.bind.call(method, obj);
|
||
} catch (e) {
|
||
// Missing bind shim or IE8 + Modernizr, fallback to wrapping
|
||
return function result() {
|
||
// eslint-disable-next-line prefer-rest-params
|
||
return Function.prototype.apply.apply(method, [obj, arguments]);
|
||
};
|
||
}
|
||
}
|
||
|
||
distillLevel(level) {
|
||
let result = level;
|
||
|
||
if (typeof result === 'string' && typeof this.levels[result.toUpperCase()] !== 'undefined') {
|
||
result = this.levels[result.toUpperCase()];
|
||
}
|
||
|
||
if (this.levelValid(result)) {
|
||
return result;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
levelValid(level) {
|
||
if (typeof level === 'number' && level >= 0 && level <= this.levels.SILENT) {
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Build the best logging method possible for this env
|
||
* Wherever possible we want to bind, not wrap, to preserve stack traces.
|
||
* Since we're targeting modern browsers, there's no need to wait for the
|
||
* console to become available.
|
||
*/
|
||
// eslint-disable-next-line class-methods-use-this
|
||
make(methodName) {
|
||
if (methodName === 'debug') {
|
||
// eslint-disable-next-line no-param-reassign
|
||
methodName = 'log';
|
||
}
|
||
|
||
/* eslint-disable no-console */
|
||
if (typeof console[methodName] !== 'undefined') {
|
||
return this.bindMethod(console, methodName);
|
||
} else if (typeof console.log !== 'undefined') {
|
||
return this.bindMethod(console, 'log');
|
||
}
|
||
|
||
/* eslint-enable no-console */
|
||
return noop;
|
||
}
|
||
|
||
replaceMethods(logLevel) {
|
||
const level = this.distillLevel(logLevel);
|
||
|
||
if (level == null) {
|
||
throw new Error(`loglevelnext: replaceMethods() called with invalid level: ${logLevel}`);
|
||
}
|
||
|
||
if (!this.logger || this.logger.type !== 'LogLevel') {
|
||
throw new TypeError(
|
||
'loglevelnext: Logger is undefined or invalid. Please specify a valid Logger instance.'
|
||
);
|
||
}
|
||
|
||
this.methods.forEach((methodName) => {
|
||
const { [methodName.toUpperCase()]: methodLevel } = this.levels;
|
||
|
||
this.logger[methodName] = methodLevel < level ? noop : this.make(methodName);
|
||
});
|
||
|
||
// Define log.log as an alias for log.debug
|
||
this.logger.log = this.logger.debug;
|
||
}
|
||
};
|
||
|
||
/*
|
||
Copyright © 2018 Andrew Powell
|
||
|
||
This Source Code Form is subject to the terms of the Mozilla Public
|
||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||
|
||
The above copyright notice and this permission notice shall be
|
||
included in all copies or substantial portions of this Source Code Form.
|
||
*/
|
||
|
||
const MethodFactory$1 = MethodFactory_1;
|
||
|
||
const defaults$1 = {
|
||
level: (opts) => `[${opts.level}]`,
|
||
name: (opts) => opts.logger.name,
|
||
template: '{{time}} {{level}} ',
|
||
time: () => new Date().toTimeString().split(' ')[0]
|
||
};
|
||
|
||
var PrefixFactory_1 = class PrefixFactory extends MethodFactory$1 {
|
||
constructor(logger, options) {
|
||
super(logger);
|
||
this.options = Object.assign({}, defaults$1, options);
|
||
}
|
||
|
||
interpolate(level) {
|
||
return this.options.template.replace(/{{([^{}]*)}}/g, (stache, prop) => {
|
||
const fn = this.options[prop];
|
||
|
||
if (fn) {
|
||
return fn({ level, logger: this.logger });
|
||
}
|
||
|
||
return stache;
|
||
});
|
||
}
|
||
|
||
make(methodName) {
|
||
const og = super.make(methodName);
|
||
|
||
return (...args) => {
|
||
const output = this.interpolate(methodName);
|
||
const [first] = args;
|
||
|
||
if (typeof first === 'string') {
|
||
// eslint-disable-next-line no-param-reassign
|
||
args[0] = output + first;
|
||
} else {
|
||
args.unshift(output);
|
||
}
|
||
|
||
og(...args);
|
||
};
|
||
}
|
||
};
|
||
|
||
/*
|
||
Copyright © 2018 Andrew Powell
|
||
|
||
This Source Code Form is subject to the terms of the Mozilla Public
|
||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||
|
||
The above copyright notice and this permission notice shall be
|
||
included in all copies or substantial portions of this Source Code Form.
|
||
*/
|
||
|
||
const PrefixFactory = PrefixFactory_1;
|
||
|
||
const MethodFactory = MethodFactory_1;
|
||
|
||
const defaults = {
|
||
factory: null,
|
||
level: 'warn',
|
||
name: +new Date(),
|
||
prefix: null
|
||
};
|
||
|
||
var LogLevel_1 = class LogLevel {
|
||
constructor(options) {
|
||
// implement for some _very_ loose type checking. avoids getting into a
|
||
// circular require between MethodFactory and LogLevel
|
||
this.type = 'LogLevel';
|
||
this.options = Object.assign({}, defaults, options);
|
||
this.methodFactory = options.factory;
|
||
|
||
if (!this.methodFactory) {
|
||
const factory = options.prefix
|
||
? new PrefixFactory(this, options.prefix)
|
||
: new MethodFactory(this);
|
||
this.methodFactory = factory;
|
||
}
|
||
|
||
if (!this.methodFactory.logger) {
|
||
this.methodFactory.logger = this;
|
||
}
|
||
|
||
this.name = options.name || '<unknown>';
|
||
|
||
// this.level is a setter, do this after setting up the factory
|
||
this.level = this.options.level;
|
||
}
|
||
|
||
get factory() {
|
||
return this.methodFactory;
|
||
}
|
||
|
||
set factory(factory) {
|
||
// eslint-disable-next-line no-param-reassign
|
||
factory.logger = this;
|
||
this.methodFactory = factory;
|
||
this.methodFactory.replaceMethods(this.level);
|
||
}
|
||
|
||
disable() {
|
||
this.level = this.levels.SILENT;
|
||
}
|
||
|
||
enable() {
|
||
this.level = this.levels.TRACE;
|
||
}
|
||
|
||
get level() {
|
||
return this.currentLevel;
|
||
}
|
||
|
||
set level(logLevel) {
|
||
const level = this.methodFactory.distillLevel(logLevel);
|
||
|
||
if (level === false || level == null) {
|
||
throw new RangeError(`loglevelnext: setLevel() called with invalid level: ${logLevel}`);
|
||
}
|
||
|
||
this.currentLevel = level;
|
||
this.methodFactory.replaceMethods(level);
|
||
|
||
if (typeof console === 'undefined' && level < this.levels.SILENT) {
|
||
// eslint-disable-next-line no-console
|
||
console.warn('loglevelnext: console is undefined. The log will produce no output.');
|
||
}
|
||
}
|
||
|
||
get levels() {
|
||
// eslint-disable-line class-methods-use-this
|
||
return this.methodFactory.levels;
|
||
}
|
||
};
|
||
|
||
/*
|
||
Copyright © 2018 Andrew Powell
|
||
|
||
This Source Code Form is subject to the terms of the Mozilla Public
|
||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||
|
||
The above copyright notice and this permission notice shall be
|
||
included in all copies or substantial portions of this Source Code Form.
|
||
*/
|
||
|
||
(function (module) {
|
||
const LogLevel = LogLevel_1;
|
||
const MethodFactory = MethodFactory_1;
|
||
const PrefixFactory = PrefixFactory_1;
|
||
|
||
const factories = Symbol('log-factories');
|
||
|
||
class DefaultLogger extends LogLevel {
|
||
constructor() {
|
||
super({ name: 'default' });
|
||
|
||
this.cache = { default: this };
|
||
this[factories] = { MethodFactory, PrefixFactory };
|
||
}
|
||
|
||
get factories() {
|
||
return this[factories];
|
||
}
|
||
|
||
get loggers() {
|
||
return this.cache;
|
||
}
|
||
|
||
create(opts) {
|
||
let options;
|
||
|
||
if (typeof opts === 'string') {
|
||
options = { name: opts };
|
||
} else {
|
||
options = Object.assign({}, opts);
|
||
}
|
||
|
||
if (!options.id) {
|
||
options.id = options.name;
|
||
}
|
||
|
||
const { name, id } = options;
|
||
const defaults = { level: this.level };
|
||
|
||
if (typeof name !== 'string' || !name || !name.length) {
|
||
throw new TypeError('You must supply a name when creating a logger.');
|
||
}
|
||
|
||
let logger = this.cache[id];
|
||
if (!logger) {
|
||
logger = new LogLevel(Object.assign({}, defaults, options));
|
||
this.cache[id] = logger;
|
||
}
|
||
return logger;
|
||
}
|
||
}
|
||
|
||
module.exports = new DefaultLogger();
|
||
|
||
// TypeScript fix
|
||
module.exports.default = module.exports;
|
||
} (lib));
|
||
|
||
var libExports = lib.exports;
|
||
var loglevelnext = /*@__PURE__*/getDefaultExportFromCjs(libExports);
|
||
|
||
var log = loglevelnext.create("dcmjs");
|
||
/**
|
||
* A validation log shows issues with data validation, and not internal issues itself.
|
||
* This is validation.dcmjs to group the validation issues into a single validation set to allow
|
||
* turning validation on/off.
|
||
*/
|
||
|
||
var validationLog = loglevelnext.create("validation.dcmjs");
|
||
|
||
/* eslint no-bitwise: 0 */
|
||
var BitArray = {
|
||
getBytesForBinaryFrame: getBytesForBinaryFrame,
|
||
pack: pack,
|
||
unpack: unpack
|
||
};
|
||
|
||
function getBytesForBinaryFrame(numPixels) {
|
||
// Check whether the 1-bit pixels exactly fit into bytes
|
||
var remainder = numPixels % 8; // Number of bytes that work on an exact fit
|
||
|
||
var bytesRequired = Math.floor(numPixels / 8); // Add one byte if we have a remainder
|
||
|
||
if (remainder > 0) {
|
||
bytesRequired++;
|
||
}
|
||
|
||
return bytesRequired;
|
||
}
|
||
|
||
function pack(pixelData) {
|
||
var numPixels = pixelData.length;
|
||
log.debug("numPixels: " + numPixels);
|
||
var length = getBytesForBinaryFrame(numPixels); //log.log('getBytesForBinaryFrame: ' + length);
|
||
|
||
var bitPixelData = new Uint8Array(length);
|
||
var bytePos = 0;
|
||
|
||
for (var i = 0; i < numPixels; i++) {
|
||
// Compute byte position
|
||
bytePos = Math.floor(i / 8);
|
||
var pixValue = pixelData[i] !== 0; //log.log('i: ' + i);
|
||
//log.log('pixValue: ' + pixValue);
|
||
//log.log('bytePos: ' + bytePos);
|
||
|
||
var bitPixelValue = pixValue << i % 8; //log.log('current bitPixelData: ' + bitPixelData[bytePos]);
|
||
//log.log('this bitPixelValue: ' + bitPixelValue);
|
||
|
||
bitPixelData[bytePos] |= bitPixelValue; //log.log('new bitPixelValue: ' + bitPixelData[bytePos]);
|
||
}
|
||
|
||
return bitPixelData;
|
||
} // convert a packed bitwise pixel array into a byte-per-pixel
|
||
// array with 255 corresponding to each set bit in the bit array
|
||
|
||
|
||
function unpack(bitPixelArray) {
|
||
var bitArray = new Uint8Array(bitPixelArray);
|
||
var byteArray = new Uint8Array(8 * bitArray.length);
|
||
|
||
for (var byteIndex = 0; byteIndex < byteArray.length; byteIndex++) {
|
||
var bitIndex = byteIndex % 8;
|
||
var bitByteIndex = Math.floor(byteIndex / 8);
|
||
byteArray[byteIndex] = 255 * ((bitArray[bitByteIndex] & 1 << bitIndex) >> bitIndex);
|
||
}
|
||
|
||
return byteArray;
|
||
}
|
||
|
||
function ownKeys(object, enumerableOnly) {
|
||
var keys = Object.keys(object);
|
||
|
||
if (Object.getOwnPropertySymbols) {
|
||
var symbols = Object.getOwnPropertySymbols(object);
|
||
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||
})), keys.push.apply(keys, symbols);
|
||
}
|
||
|
||
return keys;
|
||
}
|
||
|
||
function _objectSpread2(target) {
|
||
for (var i = 1; i < arguments.length; i++) {
|
||
var source = null != arguments[i] ? arguments[i] : {};
|
||
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
||
_defineProperty(target, key, source[key]);
|
||
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||
});
|
||
}
|
||
|
||
return target;
|
||
}
|
||
|
||
function _typeof(obj) {
|
||
"@babel/helpers - typeof";
|
||
|
||
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
||
return typeof obj;
|
||
} : function (obj) {
|
||
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
||
}, _typeof(obj);
|
||
}
|
||
|
||
function _classCallCheck(instance, Constructor) {
|
||
if (!(instance instanceof Constructor)) {
|
||
throw new TypeError("Cannot call a class as a function");
|
||
}
|
||
}
|
||
|
||
function _defineProperties(target, props) {
|
||
for (var i = 0; i < props.length; i++) {
|
||
var descriptor = props[i];
|
||
descriptor.enumerable = descriptor.enumerable || false;
|
||
descriptor.configurable = true;
|
||
if ("value" in descriptor) descriptor.writable = true;
|
||
Object.defineProperty(target, descriptor.key, descriptor);
|
||
}
|
||
}
|
||
|
||
function _createClass(Constructor, protoProps, staticProps) {
|
||
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
||
if (staticProps) _defineProperties(Constructor, staticProps);
|
||
Object.defineProperty(Constructor, "prototype", {
|
||
writable: false
|
||
});
|
||
return Constructor;
|
||
}
|
||
|
||
function _defineProperty(obj, key, value) {
|
||
if (key in obj) {
|
||
Object.defineProperty(obj, key, {
|
||
value: value,
|
||
enumerable: true,
|
||
configurable: true,
|
||
writable: true
|
||
});
|
||
} else {
|
||
obj[key] = value;
|
||
}
|
||
|
||
return obj;
|
||
}
|
||
|
||
function _inherits(subClass, superClass) {
|
||
if (typeof superClass !== "function" && superClass !== null) {
|
||
throw new TypeError("Super expression must either be null or a function");
|
||
}
|
||
|
||
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
||
constructor: {
|
||
value: subClass,
|
||
writable: true,
|
||
configurable: true
|
||
}
|
||
});
|
||
Object.defineProperty(subClass, "prototype", {
|
||
writable: false
|
||
});
|
||
if (superClass) _setPrototypeOf(subClass, superClass);
|
||
}
|
||
|
||
function _getPrototypeOf(o) {
|
||
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
|
||
return o.__proto__ || Object.getPrototypeOf(o);
|
||
};
|
||
return _getPrototypeOf(o);
|
||
}
|
||
|
||
function _setPrototypeOf(o, p) {
|
||
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
||
o.__proto__ = p;
|
||
return o;
|
||
};
|
||
|
||
return _setPrototypeOf(o, p);
|
||
}
|
||
|
||
function _isNativeReflectConstruct() {
|
||
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
|
||
if (Reflect.construct.sham) return false;
|
||
if (typeof Proxy === "function") return true;
|
||
|
||
try {
|
||
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
||
return true;
|
||
} catch (e) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function _construct(Parent, args, Class) {
|
||
if (_isNativeReflectConstruct()) {
|
||
_construct = Reflect.construct;
|
||
} else {
|
||
_construct = function _construct(Parent, args, Class) {
|
||
var a = [null];
|
||
a.push.apply(a, args);
|
||
var Constructor = Function.bind.apply(Parent, a);
|
||
var instance = new Constructor();
|
||
if (Class) _setPrototypeOf(instance, Class.prototype);
|
||
return instance;
|
||
};
|
||
}
|
||
|
||
return _construct.apply(null, arguments);
|
||
}
|
||
|
||
function _isNativeFunction(fn) {
|
||
return Function.toString.call(fn).indexOf("[native code]") !== -1;
|
||
}
|
||
|
||
function _wrapNativeSuper(Class) {
|
||
var _cache = typeof Map === "function" ? new Map() : undefined;
|
||
|
||
_wrapNativeSuper = function _wrapNativeSuper(Class) {
|
||
if (Class === null || !_isNativeFunction(Class)) return Class;
|
||
|
||
if (typeof Class !== "function") {
|
||
throw new TypeError("Super expression must either be null or a function");
|
||
}
|
||
|
||
if (typeof _cache !== "undefined") {
|
||
if (_cache.has(Class)) return _cache.get(Class);
|
||
|
||
_cache.set(Class, Wrapper);
|
||
}
|
||
|
||
function Wrapper() {
|
||
return _construct(Class, arguments, _getPrototypeOf(this).constructor);
|
||
}
|
||
|
||
Wrapper.prototype = Object.create(Class.prototype, {
|
||
constructor: {
|
||
value: Wrapper,
|
||
enumerable: false,
|
||
writable: true,
|
||
configurable: true
|
||
}
|
||
});
|
||
return _setPrototypeOf(Wrapper, Class);
|
||
};
|
||
|
||
return _wrapNativeSuper(Class);
|
||
}
|
||
|
||
function _assertThisInitialized(self) {
|
||
if (self === void 0) {
|
||
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
||
}
|
||
|
||
return self;
|
||
}
|
||
|
||
function _possibleConstructorReturn(self, call) {
|
||
if (call && (typeof call === "object" || typeof call === "function")) {
|
||
return call;
|
||
} else if (call !== void 0) {
|
||
throw new TypeError("Derived constructors may only return object or undefined");
|
||
}
|
||
|
||
return _assertThisInitialized(self);
|
||
}
|
||
|
||
function _createSuper(Derived) {
|
||
var hasNativeReflectConstruct = _isNativeReflectConstruct();
|
||
|
||
return function _createSuperInternal() {
|
||
var Super = _getPrototypeOf(Derived),
|
||
result;
|
||
|
||
if (hasNativeReflectConstruct) {
|
||
var NewTarget = _getPrototypeOf(this).constructor;
|
||
|
||
result = Reflect.construct(Super, arguments, NewTarget);
|
||
} else {
|
||
result = Super.apply(this, arguments);
|
||
}
|
||
|
||
return _possibleConstructorReturn(this, result);
|
||
};
|
||
}
|
||
|
||
function _superPropBase(object, property) {
|
||
while (!Object.prototype.hasOwnProperty.call(object, property)) {
|
||
object = _getPrototypeOf(object);
|
||
if (object === null) break;
|
||
}
|
||
|
||
return object;
|
||
}
|
||
|
||
function _get() {
|
||
if (typeof Reflect !== "undefined" && Reflect.get) {
|
||
_get = Reflect.get;
|
||
} else {
|
||
_get = function _get(target, property, receiver) {
|
||
var base = _superPropBase(target, property);
|
||
|
||
if (!base) return;
|
||
var desc = Object.getOwnPropertyDescriptor(base, property);
|
||
|
||
if (desc.get) {
|
||
return desc.get.call(arguments.length < 3 ? target : receiver);
|
||
}
|
||
|
||
return desc.value;
|
||
};
|
||
}
|
||
|
||
return _get.apply(this, arguments);
|
||
}
|
||
|
||
function _slicedToArray(arr, i) {
|
||
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
||
}
|
||
|
||
function _toConsumableArray(arr) {
|
||
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
||
}
|
||
|
||
function _arrayWithoutHoles(arr) {
|
||
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
||
}
|
||
|
||
function _arrayWithHoles(arr) {
|
||
if (Array.isArray(arr)) return arr;
|
||
}
|
||
|
||
function _iterableToArray(iter) {
|
||
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
||
}
|
||
|
||
function _iterableToArrayLimit(arr, i) {
|
||
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
||
|
||
if (_i == null) return;
|
||
var _arr = [];
|
||
var _n = true;
|
||
var _d = false;
|
||
|
||
var _s, _e;
|
||
|
||
try {
|
||
for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
|
||
_arr.push(_s.value);
|
||
|
||
if (i && _arr.length === i) break;
|
||
}
|
||
} catch (err) {
|
||
_d = true;
|
||
_e = err;
|
||
} finally {
|
||
try {
|
||
if (!_n && _i["return"] != null) _i["return"]();
|
||
} finally {
|
||
if (_d) throw _e;
|
||
}
|
||
}
|
||
|
||
return _arr;
|
||
}
|
||
|
||
function _unsupportedIterableToArray(o, minLen) {
|
||
if (!o) return;
|
||
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
||
var n = Object.prototype.toString.call(o).slice(8, -1);
|
||
if (n === "Object" && o.constructor) n = o.constructor.name;
|
||
if (n === "Map" || n === "Set") return Array.from(o);
|
||
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
||
}
|
||
|
||
function _arrayLikeToArray(arr, len) {
|
||
if (len == null || len > arr.length) len = arr.length;
|
||
|
||
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
||
|
||
return arr2;
|
||
}
|
||
|
||
function _nonIterableSpread() {
|
||
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||
}
|
||
|
||
function _nonIterableRest() {
|
||
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||
}
|
||
|
||
function _createForOfIteratorHelper(o, allowArrayLike) {
|
||
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
||
|
||
if (!it) {
|
||
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
||
if (it) o = it;
|
||
var i = 0;
|
||
|
||
var F = function () {};
|
||
|
||
return {
|
||
s: F,
|
||
n: function () {
|
||
if (i >= o.length) return {
|
||
done: true
|
||
};
|
||
return {
|
||
done: false,
|
||
value: o[i++]
|
||
};
|
||
},
|
||
e: function (e) {
|
||
throw e;
|
||
},
|
||
f: F
|
||
};
|
||
}
|
||
|
||
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||
}
|
||
|
||
var normalCompletion = true,
|
||
didErr = false,
|
||
err;
|
||
return {
|
||
s: function () {
|
||
it = it.call(o);
|
||
},
|
||
n: function () {
|
||
var step = it.next();
|
||
normalCompletion = step.done;
|
||
return step;
|
||
},
|
||
e: function (e) {
|
||
didErr = true;
|
||
err = e;
|
||
},
|
||
f: function () {
|
||
try {
|
||
if (!normalCompletion && it.return != null) it.return();
|
||
} finally {
|
||
if (didErr) throw err;
|
||
}
|
||
}
|
||
};
|
||
}
|
||
|
||
/*! pako 2.0.4 https://github.com/nodeca/pako @license (MIT AND Zlib) */
|
||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
||
//
|
||
// This software is provided 'as-is', without any express or implied
|
||
// warranty. In no event will the authors be held liable for any damages
|
||
// arising from the use of this software.
|
||
//
|
||
// Permission is granted to anyone to use this software for any purpose,
|
||
// including commercial applications, and to alter it and redistribute it
|
||
// freely, subject to the following restrictions:
|
||
//
|
||
// 1. The origin of this software must not be misrepresented; you must not
|
||
// claim that you wrote the original software. If you use this software
|
||
// in a product, an acknowledgment in the product documentation would be
|
||
// appreciated but is not required.
|
||
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
// misrepresented as being the original software.
|
||
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
||
/* eslint-disable space-unary-ops */
|
||
|
||
/* Public constants ==========================================================*/
|
||
/* ===========================================================================*/
|
||
|
||
|
||
//const Z_FILTERED = 1;
|
||
//const Z_HUFFMAN_ONLY = 2;
|
||
//const Z_RLE = 3;
|
||
const Z_FIXED$1 = 4;
|
||
//const Z_DEFAULT_STRATEGY = 0;
|
||
|
||
/* Possible values of the data_type field (though see inflate()) */
|
||
const Z_BINARY = 0;
|
||
const Z_TEXT = 1;
|
||
//const Z_ASCII = 1; // = Z_TEXT
|
||
const Z_UNKNOWN$1 = 2;
|
||
|
||
/*============================================================================*/
|
||
|
||
|
||
function zero$1(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }
|
||
|
||
// From zutil.h
|
||
|
||
const STORED_BLOCK = 0;
|
||
const STATIC_TREES = 1;
|
||
const DYN_TREES = 2;
|
||
/* The three kinds of block type */
|
||
|
||
const MIN_MATCH$1 = 3;
|
||
const MAX_MATCH$1 = 258;
|
||
/* The minimum and maximum match lengths */
|
||
|
||
// From deflate.h
|
||
/* ===========================================================================
|
||
* Internal compression state.
|
||
*/
|
||
|
||
const LENGTH_CODES$1 = 29;
|
||
/* number of length codes, not counting the special END_BLOCK code */
|
||
|
||
const LITERALS$1 = 256;
|
||
/* number of literal bytes 0..255 */
|
||
|
||
const L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1;
|
||
/* number of Literal or Length codes, including the END_BLOCK code */
|
||
|
||
const D_CODES$1 = 30;
|
||
/* number of distance codes */
|
||
|
||
const BL_CODES$1 = 19;
|
||
/* number of codes used to transfer the bit lengths */
|
||
|
||
const HEAP_SIZE$1 = 2 * L_CODES$1 + 1;
|
||
/* maximum heap size */
|
||
|
||
const MAX_BITS$1 = 15;
|
||
/* All codes must not exceed MAX_BITS bits */
|
||
|
||
const Buf_size = 16;
|
||
/* size of bit buffer in bi_buf */
|
||
|
||
|
||
/* ===========================================================================
|
||
* Constants
|
||
*/
|
||
|
||
const MAX_BL_BITS = 7;
|
||
/* Bit length codes must not exceed MAX_BL_BITS bits */
|
||
|
||
const END_BLOCK = 256;
|
||
/* end of block literal code */
|
||
|
||
const REP_3_6 = 16;
|
||
/* repeat previous bit length 3-6 times (2 bits of repeat count) */
|
||
|
||
const REPZ_3_10 = 17;
|
||
/* repeat a zero length 3-10 times (3 bits of repeat count) */
|
||
|
||
const REPZ_11_138 = 18;
|
||
/* repeat a zero length 11-138 times (7 bits of repeat count) */
|
||
|
||
/* eslint-disable comma-spacing,array-bracket-spacing */
|
||
const extra_lbits = /* extra bits for each length code */
|
||
new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);
|
||
|
||
const extra_dbits = /* extra bits for each distance code */
|
||
new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);
|
||
|
||
const extra_blbits = /* extra bits for each bit length code */
|
||
new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);
|
||
|
||
const bl_order =
|
||
new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);
|
||
/* eslint-enable comma-spacing,array-bracket-spacing */
|
||
|
||
/* The lengths of the bit length codes are sent in order of decreasing
|
||
* probability, to avoid transmitting the lengths for unused bit length codes.
|
||
*/
|
||
|
||
/* ===========================================================================
|
||
* Local data. These are initialized only once.
|
||
*/
|
||
|
||
// We pre-fill arrays with 0 to avoid uninitialized gaps
|
||
|
||
const DIST_CODE_LEN = 512; /* see definition of array dist_code below */
|
||
|
||
// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1
|
||
const static_ltree = new Array((L_CODES$1 + 2) * 2);
|
||
zero$1(static_ltree);
|
||
/* The static literal tree. Since the bit lengths are imposed, there is no
|
||
* need for the L_CODES extra codes used during heap construction. However
|
||
* The codes 286 and 287 are needed to build a canonical tree (see _tr_init
|
||
* below).
|
||
*/
|
||
|
||
const static_dtree = new Array(D_CODES$1 * 2);
|
||
zero$1(static_dtree);
|
||
/* The static distance tree. (Actually a trivial tree since all codes use
|
||
* 5 bits.)
|
||
*/
|
||
|
||
const _dist_code = new Array(DIST_CODE_LEN);
|
||
zero$1(_dist_code);
|
||
/* Distance codes. The first 256 values correspond to the distances
|
||
* 3 .. 258, the last 256 values correspond to the top 8 bits of
|
||
* the 15 bit distances.
|
||
*/
|
||
|
||
const _length_code = new Array(MAX_MATCH$1 - MIN_MATCH$1 + 1);
|
||
zero$1(_length_code);
|
||
/* length code for each normalized match length (0 == MIN_MATCH) */
|
||
|
||
const base_length = new Array(LENGTH_CODES$1);
|
||
zero$1(base_length);
|
||
/* First normalized length for each code (0 = MIN_MATCH) */
|
||
|
||
const base_dist = new Array(D_CODES$1);
|
||
zero$1(base_dist);
|
||
/* First normalized distance for each code (0 = distance of 1) */
|
||
|
||
|
||
function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
|
||
|
||
this.static_tree = static_tree; /* static tree or NULL */
|
||
this.extra_bits = extra_bits; /* extra bits for each code or NULL */
|
||
this.extra_base = extra_base; /* base index for extra_bits */
|
||
this.elems = elems; /* max number of elements in the tree */
|
||
this.max_length = max_length; /* max bit length for the codes */
|
||
|
||
// show if `static_tree` has data or dummy - needed for monomorphic objects
|
||
this.has_stree = static_tree && static_tree.length;
|
||
}
|
||
|
||
|
||
let static_l_desc;
|
||
let static_d_desc;
|
||
let static_bl_desc;
|
||
|
||
|
||
function TreeDesc(dyn_tree, stat_desc) {
|
||
this.dyn_tree = dyn_tree; /* the dynamic tree */
|
||
this.max_code = 0; /* largest code with non zero frequency */
|
||
this.stat_desc = stat_desc; /* the corresponding static tree */
|
||
}
|
||
|
||
|
||
|
||
const d_code = (dist) => {
|
||
|
||
return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Output a short LSB first on the stream.
|
||
* IN assertion: there is enough room in pendingBuf.
|
||
*/
|
||
const put_short = (s, w) => {
|
||
// put_byte(s, (uch)((w) & 0xff));
|
||
// put_byte(s, (uch)((ush)(w) >> 8));
|
||
s.pending_buf[s.pending++] = (w) & 0xff;
|
||
s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Send a value on a given number of bits.
|
||
* IN assertion: length <= 16 and value fits in length bits.
|
||
*/
|
||
const send_bits = (s, value, length) => {
|
||
|
||
if (s.bi_valid > (Buf_size - length)) {
|
||
s.bi_buf |= (value << s.bi_valid) & 0xffff;
|
||
put_short(s, s.bi_buf);
|
||
s.bi_buf = value >> (Buf_size - s.bi_valid);
|
||
s.bi_valid += length - Buf_size;
|
||
} else {
|
||
s.bi_buf |= (value << s.bi_valid) & 0xffff;
|
||
s.bi_valid += length;
|
||
}
|
||
};
|
||
|
||
|
||
const send_code = (s, c, tree) => {
|
||
|
||
send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Reverse the first len bits of a code, using straightforward code (a faster
|
||
* method would use a table)
|
||
* IN assertion: 1 <= len <= 15
|
||
*/
|
||
const bi_reverse = (code, len) => {
|
||
|
||
let res = 0;
|
||
do {
|
||
res |= code & 1;
|
||
code >>>= 1;
|
||
res <<= 1;
|
||
} while (--len > 0);
|
||
return res >>> 1;
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Flush the bit buffer, keeping at most 7 bits in it.
|
||
*/
|
||
const bi_flush = (s) => {
|
||
|
||
if (s.bi_valid === 16) {
|
||
put_short(s, s.bi_buf);
|
||
s.bi_buf = 0;
|
||
s.bi_valid = 0;
|
||
|
||
} else if (s.bi_valid >= 8) {
|
||
s.pending_buf[s.pending++] = s.bi_buf & 0xff;
|
||
s.bi_buf >>= 8;
|
||
s.bi_valid -= 8;
|
||
}
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Compute the optimal bit lengths for a tree and update the total bit length
|
||
* for the current block.
|
||
* IN assertion: the fields freq and dad are set, heap[heap_max] and
|
||
* above are the tree nodes sorted by increasing frequency.
|
||
* OUT assertions: the field len is set to the optimal bit length, the
|
||
* array bl_count contains the frequencies for each bit length.
|
||
* The length opt_len is updated; static_len is also updated if stree is
|
||
* not null.
|
||
*/
|
||
const gen_bitlen = (s, desc) =>
|
||
// deflate_state *s;
|
||
// tree_desc *desc; /* the tree descriptor */
|
||
{
|
||
const tree = desc.dyn_tree;
|
||
const max_code = desc.max_code;
|
||
const stree = desc.stat_desc.static_tree;
|
||
const has_stree = desc.stat_desc.has_stree;
|
||
const extra = desc.stat_desc.extra_bits;
|
||
const base = desc.stat_desc.extra_base;
|
||
const max_length = desc.stat_desc.max_length;
|
||
let h; /* heap index */
|
||
let n, m; /* iterate over the tree elements */
|
||
let bits; /* bit length */
|
||
let xbits; /* extra bits */
|
||
let f; /* frequency */
|
||
let overflow = 0; /* number of elements with bit length too large */
|
||
|
||
for (bits = 0; bits <= MAX_BITS$1; bits++) {
|
||
s.bl_count[bits] = 0;
|
||
}
|
||
|
||
/* In a first pass, compute the optimal bit lengths (which may
|
||
* overflow in the case of the bit length tree).
|
||
*/
|
||
tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */
|
||
|
||
for (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {
|
||
n = s.heap[h];
|
||
bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
|
||
if (bits > max_length) {
|
||
bits = max_length;
|
||
overflow++;
|
||
}
|
||
tree[n * 2 + 1]/*.Len*/ = bits;
|
||
/* We overwrite tree[n].Dad which is no longer needed */
|
||
|
||
if (n > max_code) { continue; } /* not a leaf node */
|
||
|
||
s.bl_count[bits]++;
|
||
xbits = 0;
|
||
if (n >= base) {
|
||
xbits = extra[n - base];
|
||
}
|
||
f = tree[n * 2]/*.Freq*/;
|
||
s.opt_len += f * (bits + xbits);
|
||
if (has_stree) {
|
||
s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);
|
||
}
|
||
}
|
||
if (overflow === 0) { return; }
|
||
|
||
// Trace((stderr,"\nbit length overflow\n"));
|
||
/* This happens for example on obj2 and pic of the Calgary corpus */
|
||
|
||
/* Find the first bit length which could increase: */
|
||
do {
|
||
bits = max_length - 1;
|
||
while (s.bl_count[bits] === 0) { bits--; }
|
||
s.bl_count[bits]--; /* move one leaf down the tree */
|
||
s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */
|
||
s.bl_count[max_length]--;
|
||
/* The brother of the overflow item also moves one step up,
|
||
* but this does not affect bl_count[max_length]
|
||
*/
|
||
overflow -= 2;
|
||
} while (overflow > 0);
|
||
|
||
/* Now recompute all bit lengths, scanning in increasing frequency.
|
||
* h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
|
||
* lengths instead of fixing only the wrong ones. This idea is taken
|
||
* from 'ar' written by Haruhiko Okumura.)
|
||
*/
|
||
for (bits = max_length; bits !== 0; bits--) {
|
||
n = s.bl_count[bits];
|
||
while (n !== 0) {
|
||
m = s.heap[--h];
|
||
if (m > max_code) { continue; }
|
||
if (tree[m * 2 + 1]/*.Len*/ !== bits) {
|
||
// Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
|
||
s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;
|
||
tree[m * 2 + 1]/*.Len*/ = bits;
|
||
}
|
||
n--;
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Generate the codes for a given tree and bit counts (which need not be
|
||
* optimal).
|
||
* IN assertion: the array bl_count contains the bit length statistics for
|
||
* the given tree and the field len is set for all tree elements.
|
||
* OUT assertion: the field code is set for all tree elements of non
|
||
* zero code length.
|
||
*/
|
||
const gen_codes = (tree, max_code, bl_count) =>
|
||
// ct_data *tree; /* the tree to decorate */
|
||
// int max_code; /* largest code with non zero frequency */
|
||
// ushf *bl_count; /* number of codes at each bit length */
|
||
{
|
||
const next_code = new Array(MAX_BITS$1 + 1); /* next code value for each bit length */
|
||
let code = 0; /* running code value */
|
||
let bits; /* bit index */
|
||
let n; /* code index */
|
||
|
||
/* The distribution counts are first used to generate the code values
|
||
* without bit reversal.
|
||
*/
|
||
for (bits = 1; bits <= MAX_BITS$1; bits++) {
|
||
next_code[bits] = code = (code + bl_count[bits - 1]) << 1;
|
||
}
|
||
/* Check that the bit counts in bl_count are consistent. The last code
|
||
* must be all ones.
|
||
*/
|
||
//Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
|
||
// "inconsistent bit counts");
|
||
//Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
|
||
|
||
for (n = 0; n <= max_code; n++) {
|
||
let len = tree[n * 2 + 1]/*.Len*/;
|
||
if (len === 0) { continue; }
|
||
/* Now reverse the bits */
|
||
tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);
|
||
|
||
//Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
|
||
// n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
|
||
}
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Initialize the various 'constant' tables.
|
||
*/
|
||
const tr_static_init = () => {
|
||
|
||
let n; /* iterates over tree elements */
|
||
let bits; /* bit counter */
|
||
let length; /* length value */
|
||
let code; /* code value */
|
||
let dist; /* distance index */
|
||
const bl_count = new Array(MAX_BITS$1 + 1);
|
||
/* number of codes at each bit length for an optimal tree */
|
||
|
||
// do check in _tr_init()
|
||
//if (static_init_done) return;
|
||
|
||
/* For some embedded targets, global variables are not initialized: */
|
||
/*#ifdef NO_INIT_GLOBAL_POINTERS
|
||
static_l_desc.static_tree = static_ltree;
|
||
static_l_desc.extra_bits = extra_lbits;
|
||
static_d_desc.static_tree = static_dtree;
|
||
static_d_desc.extra_bits = extra_dbits;
|
||
static_bl_desc.extra_bits = extra_blbits;
|
||
#endif*/
|
||
|
||
/* Initialize the mapping length (0..255) -> length code (0..28) */
|
||
length = 0;
|
||
for (code = 0; code < LENGTH_CODES$1 - 1; code++) {
|
||
base_length[code] = length;
|
||
for (n = 0; n < (1 << extra_lbits[code]); n++) {
|
||
_length_code[length++] = code;
|
||
}
|
||
}
|
||
//Assert (length == 256, "tr_static_init: length != 256");
|
||
/* Note that the length 255 (match length 258) can be represented
|
||
* in two different ways: code 284 + 5 bits or code 285, so we
|
||
* overwrite length_code[255] to use the best encoding:
|
||
*/
|
||
_length_code[length - 1] = code;
|
||
|
||
/* Initialize the mapping dist (0..32K) -> dist code (0..29) */
|
||
dist = 0;
|
||
for (code = 0; code < 16; code++) {
|
||
base_dist[code] = dist;
|
||
for (n = 0; n < (1 << extra_dbits[code]); n++) {
|
||
_dist_code[dist++] = code;
|
||
}
|
||
}
|
||
//Assert (dist == 256, "tr_static_init: dist != 256");
|
||
dist >>= 7; /* from now on, all distances are divided by 128 */
|
||
for (; code < D_CODES$1; code++) {
|
||
base_dist[code] = dist << 7;
|
||
for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {
|
||
_dist_code[256 + dist++] = code;
|
||
}
|
||
}
|
||
//Assert (dist == 256, "tr_static_init: 256+dist != 512");
|
||
|
||
/* Construct the codes of the static literal tree */
|
||
for (bits = 0; bits <= MAX_BITS$1; bits++) {
|
||
bl_count[bits] = 0;
|
||
}
|
||
|
||
n = 0;
|
||
while (n <= 143) {
|
||
static_ltree[n * 2 + 1]/*.Len*/ = 8;
|
||
n++;
|
||
bl_count[8]++;
|
||
}
|
||
while (n <= 255) {
|
||
static_ltree[n * 2 + 1]/*.Len*/ = 9;
|
||
n++;
|
||
bl_count[9]++;
|
||
}
|
||
while (n <= 279) {
|
||
static_ltree[n * 2 + 1]/*.Len*/ = 7;
|
||
n++;
|
||
bl_count[7]++;
|
||
}
|
||
while (n <= 287) {
|
||
static_ltree[n * 2 + 1]/*.Len*/ = 8;
|
||
n++;
|
||
bl_count[8]++;
|
||
}
|
||
/* Codes 286 and 287 do not exist, but we must include them in the
|
||
* tree construction to get a canonical Huffman tree (longest code
|
||
* all ones)
|
||
*/
|
||
gen_codes(static_ltree, L_CODES$1 + 1, bl_count);
|
||
|
||
/* The static distance tree is trivial: */
|
||
for (n = 0; n < D_CODES$1; n++) {
|
||
static_dtree[n * 2 + 1]/*.Len*/ = 5;
|
||
static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);
|
||
}
|
||
|
||
// Now data ready and we can init static trees
|
||
static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS$1 + 1, L_CODES$1, MAX_BITS$1);
|
||
static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES$1, MAX_BITS$1);
|
||
static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES$1, MAX_BL_BITS);
|
||
|
||
//static_init_done = true;
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Initialize a new block.
|
||
*/
|
||
const init_block = (s) => {
|
||
|
||
let n; /* iterates over tree elements */
|
||
|
||
/* Initialize the trees. */
|
||
for (n = 0; n < L_CODES$1; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }
|
||
for (n = 0; n < D_CODES$1; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }
|
||
for (n = 0; n < BL_CODES$1; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }
|
||
|
||
s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;
|
||
s.opt_len = s.static_len = 0;
|
||
s.last_lit = s.matches = 0;
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Flush the bit buffer and align the output on a byte boundary
|
||
*/
|
||
const bi_windup = (s) =>
|
||
{
|
||
if (s.bi_valid > 8) {
|
||
put_short(s, s.bi_buf);
|
||
} else if (s.bi_valid > 0) {
|
||
//put_byte(s, (Byte)s->bi_buf);
|
||
s.pending_buf[s.pending++] = s.bi_buf;
|
||
}
|
||
s.bi_buf = 0;
|
||
s.bi_valid = 0;
|
||
};
|
||
|
||
/* ===========================================================================
|
||
* Copy a stored block, storing first the length and its
|
||
* one's complement if requested.
|
||
*/
|
||
const copy_block = (s, buf, len, header) =>
|
||
//DeflateState *s;
|
||
//charf *buf; /* the input data */
|
||
//unsigned len; /* its length */
|
||
//int header; /* true if block header must be written */
|
||
{
|
||
bi_windup(s); /* align on byte boundary */
|
||
|
||
if (header) {
|
||
put_short(s, len);
|
||
put_short(s, ~len);
|
||
}
|
||
// while (len--) {
|
||
// put_byte(s, *buf++);
|
||
// }
|
||
s.pending_buf.set(s.window.subarray(buf, buf + len), s.pending);
|
||
s.pending += len;
|
||
};
|
||
|
||
/* ===========================================================================
|
||
* Compares to subtrees, using the tree depth as tie breaker when
|
||
* the subtrees have equal frequency. This minimizes the worst case length.
|
||
*/
|
||
const smaller = (tree, n, m, depth) => {
|
||
|
||
const _n2 = n * 2;
|
||
const _m2 = m * 2;
|
||
return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
|
||
(tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
|
||
};
|
||
|
||
/* ===========================================================================
|
||
* Restore the heap property by moving down the tree starting at node k,
|
||
* exchanging a node with the smallest of its two sons if necessary, stopping
|
||
* when the heap property is re-established (each father smaller than its
|
||
* two sons).
|
||
*/
|
||
const pqdownheap = (s, tree, k) =>
|
||
// deflate_state *s;
|
||
// ct_data *tree; /* the tree to restore */
|
||
// int k; /* node to move down */
|
||
{
|
||
const v = s.heap[k];
|
||
let j = k << 1; /* left son of k */
|
||
while (j <= s.heap_len) {
|
||
/* Set j to the smallest of the two sons: */
|
||
if (j < s.heap_len &&
|
||
smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
|
||
j++;
|
||
}
|
||
/* Exit if v is smaller than both sons */
|
||
if (smaller(tree, v, s.heap[j], s.depth)) { break; }
|
||
|
||
/* Exchange v with the smallest son */
|
||
s.heap[k] = s.heap[j];
|
||
k = j;
|
||
|
||
/* And continue down the tree, setting j to the left son of k */
|
||
j <<= 1;
|
||
}
|
||
s.heap[k] = v;
|
||
};
|
||
|
||
|
||
// inlined manually
|
||
// const SMALLEST = 1;
|
||
|
||
/* ===========================================================================
|
||
* Send the block data compressed using the given Huffman trees
|
||
*/
|
||
const compress_block = (s, ltree, dtree) =>
|
||
// deflate_state *s;
|
||
// const ct_data *ltree; /* literal tree */
|
||
// const ct_data *dtree; /* distance tree */
|
||
{
|
||
let dist; /* distance of matched string */
|
||
let lc; /* match length or unmatched char (if dist == 0) */
|
||
let lx = 0; /* running index in l_buf */
|
||
let code; /* the code to send */
|
||
let extra; /* number of extra bits to send */
|
||
|
||
if (s.last_lit !== 0) {
|
||
do {
|
||
dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);
|
||
lc = s.pending_buf[s.l_buf + lx];
|
||
lx++;
|
||
|
||
if (dist === 0) {
|
||
send_code(s, lc, ltree); /* send a literal byte */
|
||
//Tracecv(isgraph(lc), (stderr," '%c' ", lc));
|
||
} else {
|
||
/* Here, lc is the match length - MIN_MATCH */
|
||
code = _length_code[lc];
|
||
send_code(s, code + LITERALS$1 + 1, ltree); /* send the length code */
|
||
extra = extra_lbits[code];
|
||
if (extra !== 0) {
|
||
lc -= base_length[code];
|
||
send_bits(s, lc, extra); /* send the extra length bits */
|
||
}
|
||
dist--; /* dist is now the match distance - 1 */
|
||
code = d_code(dist);
|
||
//Assert (code < D_CODES, "bad d_code");
|
||
|
||
send_code(s, code, dtree); /* send the distance code */
|
||
extra = extra_dbits[code];
|
||
if (extra !== 0) {
|
||
dist -= base_dist[code];
|
||
send_bits(s, dist, extra); /* send the extra distance bits */
|
||
}
|
||
} /* literal or match pair ? */
|
||
|
||
/* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
|
||
//Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
|
||
// "pendingBuf overflow");
|
||
|
||
} while (lx < s.last_lit);
|
||
}
|
||
|
||
send_code(s, END_BLOCK, ltree);
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Construct one Huffman tree and assigns the code bit strings and lengths.
|
||
* Update the total bit length for the current block.
|
||
* IN assertion: the field freq is set for all tree elements.
|
||
* OUT assertions: the fields len and code are set to the optimal bit length
|
||
* and corresponding code. The length opt_len is updated; static_len is
|
||
* also updated if stree is not null. The field max_code is set.
|
||
*/
|
||
const build_tree = (s, desc) =>
|
||
// deflate_state *s;
|
||
// tree_desc *desc; /* the tree descriptor */
|
||
{
|
||
const tree = desc.dyn_tree;
|
||
const stree = desc.stat_desc.static_tree;
|
||
const has_stree = desc.stat_desc.has_stree;
|
||
const elems = desc.stat_desc.elems;
|
||
let n, m; /* iterate over heap elements */
|
||
let max_code = -1; /* largest code with non zero frequency */
|
||
let node; /* new node being created */
|
||
|
||
/* Construct the initial heap, with least frequent element in
|
||
* heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
|
||
* heap[0] is not used.
|
||
*/
|
||
s.heap_len = 0;
|
||
s.heap_max = HEAP_SIZE$1;
|
||
|
||
for (n = 0; n < elems; n++) {
|
||
if (tree[n * 2]/*.Freq*/ !== 0) {
|
||
s.heap[++s.heap_len] = max_code = n;
|
||
s.depth[n] = 0;
|
||
|
||
} else {
|
||
tree[n * 2 + 1]/*.Len*/ = 0;
|
||
}
|
||
}
|
||
|
||
/* The pkzip format requires that at least one distance code exists,
|
||
* and that at least one bit should be sent even if there is only one
|
||
* possible code. So to avoid special checks later on we force at least
|
||
* two codes of non zero frequency.
|
||
*/
|
||
while (s.heap_len < 2) {
|
||
node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
|
||
tree[node * 2]/*.Freq*/ = 1;
|
||
s.depth[node] = 0;
|
||
s.opt_len--;
|
||
|
||
if (has_stree) {
|
||
s.static_len -= stree[node * 2 + 1]/*.Len*/;
|
||
}
|
||
/* node is 0 or 1 so it does not have extra bits */
|
||
}
|
||
desc.max_code = max_code;
|
||
|
||
/* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
|
||
* establish sub-heaps of increasing lengths:
|
||
*/
|
||
for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }
|
||
|
||
/* Construct the Huffman tree by repeatedly combining the least two
|
||
* frequent nodes.
|
||
*/
|
||
node = elems; /* next internal node of the tree */
|
||
do {
|
||
//pqremove(s, tree, n); /* n = node of least frequency */
|
||
/*** pqremove ***/
|
||
n = s.heap[1/*SMALLEST*/];
|
||
s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
|
||
pqdownheap(s, tree, 1/*SMALLEST*/);
|
||
/***/
|
||
|
||
m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */
|
||
|
||
s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
|
||
s.heap[--s.heap_max] = m;
|
||
|
||
/* Create a new node father of n and m */
|
||
tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
|
||
s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
|
||
tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;
|
||
|
||
/* and insert the new node in the heap */
|
||
s.heap[1/*SMALLEST*/] = node++;
|
||
pqdownheap(s, tree, 1/*SMALLEST*/);
|
||
|
||
} while (s.heap_len >= 2);
|
||
|
||
s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];
|
||
|
||
/* At this point, the fields freq and dad are set. We can now
|
||
* generate the bit lengths.
|
||
*/
|
||
gen_bitlen(s, desc);
|
||
|
||
/* The field len is now set, we can generate the bit codes */
|
||
gen_codes(tree, max_code, s.bl_count);
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Scan a literal or distance tree to determine the frequencies of the codes
|
||
* in the bit length tree.
|
||
*/
|
||
const scan_tree = (s, tree, max_code) =>
|
||
// deflate_state *s;
|
||
// ct_data *tree; /* the tree to be scanned */
|
||
// int max_code; /* and its largest code of non zero frequency */
|
||
{
|
||
let n; /* iterates over all tree elements */
|
||
let prevlen = -1; /* last emitted length */
|
||
let curlen; /* length of current code */
|
||
|
||
let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
|
||
|
||
let count = 0; /* repeat count of the current code */
|
||
let max_count = 7; /* max repeat count */
|
||
let min_count = 4; /* min repeat count */
|
||
|
||
if (nextlen === 0) {
|
||
max_count = 138;
|
||
min_count = 3;
|
||
}
|
||
tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */
|
||
|
||
for (n = 0; n <= max_code; n++) {
|
||
curlen = nextlen;
|
||
nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
|
||
|
||
if (++count < max_count && curlen === nextlen) {
|
||
continue;
|
||
|
||
} else if (count < min_count) {
|
||
s.bl_tree[curlen * 2]/*.Freq*/ += count;
|
||
|
||
} else if (curlen !== 0) {
|
||
|
||
if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
|
||
s.bl_tree[REP_3_6 * 2]/*.Freq*/++;
|
||
|
||
} else if (count <= 10) {
|
||
s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;
|
||
|
||
} else {
|
||
s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;
|
||
}
|
||
|
||
count = 0;
|
||
prevlen = curlen;
|
||
|
||
if (nextlen === 0) {
|
||
max_count = 138;
|
||
min_count = 3;
|
||
|
||
} else if (curlen === nextlen) {
|
||
max_count = 6;
|
||
min_count = 3;
|
||
|
||
} else {
|
||
max_count = 7;
|
||
min_count = 4;
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Send a literal or distance tree in compressed form, using the codes in
|
||
* bl_tree.
|
||
*/
|
||
const send_tree = (s, tree, max_code) =>
|
||
// deflate_state *s;
|
||
// ct_data *tree; /* the tree to be scanned */
|
||
// int max_code; /* and its largest code of non zero frequency */
|
||
{
|
||
let n; /* iterates over all tree elements */
|
||
let prevlen = -1; /* last emitted length */
|
||
let curlen; /* length of current code */
|
||
|
||
let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
|
||
|
||
let count = 0; /* repeat count of the current code */
|
||
let max_count = 7; /* max repeat count */
|
||
let min_count = 4; /* min repeat count */
|
||
|
||
/* tree[max_code+1].Len = -1; */ /* guard already set */
|
||
if (nextlen === 0) {
|
||
max_count = 138;
|
||
min_count = 3;
|
||
}
|
||
|
||
for (n = 0; n <= max_code; n++) {
|
||
curlen = nextlen;
|
||
nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
|
||
|
||
if (++count < max_count && curlen === nextlen) {
|
||
continue;
|
||
|
||
} else if (count < min_count) {
|
||
do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);
|
||
|
||
} else if (curlen !== 0) {
|
||
if (curlen !== prevlen) {
|
||
send_code(s, curlen, s.bl_tree);
|
||
count--;
|
||
}
|
||
//Assert(count >= 3 && count <= 6, " 3_6?");
|
||
send_code(s, REP_3_6, s.bl_tree);
|
||
send_bits(s, count - 3, 2);
|
||
|
||
} else if (count <= 10) {
|
||
send_code(s, REPZ_3_10, s.bl_tree);
|
||
send_bits(s, count - 3, 3);
|
||
|
||
} else {
|
||
send_code(s, REPZ_11_138, s.bl_tree);
|
||
send_bits(s, count - 11, 7);
|
||
}
|
||
|
||
count = 0;
|
||
prevlen = curlen;
|
||
if (nextlen === 0) {
|
||
max_count = 138;
|
||
min_count = 3;
|
||
|
||
} else if (curlen === nextlen) {
|
||
max_count = 6;
|
||
min_count = 3;
|
||
|
||
} else {
|
||
max_count = 7;
|
||
min_count = 4;
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Construct the Huffman tree for the bit lengths and return the index in
|
||
* bl_order of the last bit length code to send.
|
||
*/
|
||
const build_bl_tree = (s) => {
|
||
|
||
let max_blindex; /* index of last bit length code of non zero freq */
|
||
|
||
/* Determine the bit length frequencies for literal and distance trees */
|
||
scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
|
||
scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
|
||
|
||
/* Build the bit length tree: */
|
||
build_tree(s, s.bl_desc);
|
||
/* opt_len now includes the length of the tree representations, except
|
||
* the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
|
||
*/
|
||
|
||
/* Determine the number of bit length codes to send. The pkzip format
|
||
* requires that at least 4 bit length codes be sent. (appnote.txt says
|
||
* 3 but the actual value used is 4.)
|
||
*/
|
||
for (max_blindex = BL_CODES$1 - 1; max_blindex >= 3; max_blindex--) {
|
||
if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {
|
||
break;
|
||
}
|
||
}
|
||
/* Update opt_len to include the bit length tree and counts */
|
||
s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
|
||
//Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
|
||
// s->opt_len, s->static_len));
|
||
|
||
return max_blindex;
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Send the header for a block using dynamic Huffman trees: the counts, the
|
||
* lengths of the bit length codes, the literal tree and the distance tree.
|
||
* IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
|
||
*/
|
||
const send_all_trees = (s, lcodes, dcodes, blcodes) =>
|
||
// deflate_state *s;
|
||
// int lcodes, dcodes, blcodes; /* number of codes for each tree */
|
||
{
|
||
let rank; /* index in bl_order */
|
||
|
||
//Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
|
||
//Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
|
||
// "too many codes");
|
||
//Tracev((stderr, "\nbl counts: "));
|
||
send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */
|
||
send_bits(s, dcodes - 1, 5);
|
||
send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */
|
||
for (rank = 0; rank < blcodes; rank++) {
|
||
//Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
|
||
send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);
|
||
}
|
||
//Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
|
||
|
||
send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */
|
||
//Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
|
||
|
||
send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */
|
||
//Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Check if the data type is TEXT or BINARY, using the following algorithm:
|
||
* - TEXT if the two conditions below are satisfied:
|
||
* a) There are no non-portable control characters belonging to the
|
||
* "black list" (0..6, 14..25, 28..31).
|
||
* b) There is at least one printable character belonging to the
|
||
* "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
|
||
* - BINARY otherwise.
|
||
* - The following partially-portable control characters form a
|
||
* "gray list" that is ignored in this detection algorithm:
|
||
* (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
|
||
* IN assertion: the fields Freq of dyn_ltree are set.
|
||
*/
|
||
const detect_data_type = (s) => {
|
||
/* black_mask is the bit mask of black-listed bytes
|
||
* set bits 0..6, 14..25, and 28..31
|
||
* 0xf3ffc07f = binary 11110011111111111100000001111111
|
||
*/
|
||
let black_mask = 0xf3ffc07f;
|
||
let n;
|
||
|
||
/* Check for non-textual ("black-listed") bytes. */
|
||
for (n = 0; n <= 31; n++, black_mask >>>= 1) {
|
||
if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {
|
||
return Z_BINARY;
|
||
}
|
||
}
|
||
|
||
/* Check for textual ("white-listed") bytes. */
|
||
if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
|
||
s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
|
||
return Z_TEXT;
|
||
}
|
||
for (n = 32; n < LITERALS$1; n++) {
|
||
if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
|
||
return Z_TEXT;
|
||
}
|
||
}
|
||
|
||
/* There are no "black-listed" or "white-listed" bytes:
|
||
* this stream either is empty or has tolerated ("gray-listed") bytes only.
|
||
*/
|
||
return Z_BINARY;
|
||
};
|
||
|
||
|
||
let static_init_done = false;
|
||
|
||
/* ===========================================================================
|
||
* Initialize the tree data structures for a new zlib stream.
|
||
*/
|
||
const _tr_init$1 = (s) =>
|
||
{
|
||
|
||
if (!static_init_done) {
|
||
tr_static_init();
|
||
static_init_done = true;
|
||
}
|
||
|
||
s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);
|
||
s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);
|
||
s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
|
||
|
||
s.bi_buf = 0;
|
||
s.bi_valid = 0;
|
||
|
||
/* Initialize the first block of the first file: */
|
||
init_block(s);
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Send a stored block
|
||
*/
|
||
const _tr_stored_block$1 = (s, buf, stored_len, last) =>
|
||
//DeflateState *s;
|
||
//charf *buf; /* input block */
|
||
//ulg stored_len; /* length of input block */
|
||
//int last; /* one if this is the last block for a file */
|
||
{
|
||
send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */
|
||
copy_block(s, buf, stored_len, true); /* with header */
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Send one empty static block to give enough lookahead for inflate.
|
||
* This takes 10 bits, of which 7 may remain in the bit buffer.
|
||
*/
|
||
const _tr_align$1 = (s) => {
|
||
send_bits(s, STATIC_TREES << 1, 3);
|
||
send_code(s, END_BLOCK, static_ltree);
|
||
bi_flush(s);
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Determine the best encoding for the current block: dynamic trees, static
|
||
* trees or store, and output the encoded block to the zip file.
|
||
*/
|
||
const _tr_flush_block$1 = (s, buf, stored_len, last) =>
|
||
//DeflateState *s;
|
||
//charf *buf; /* input block, or NULL if too old */
|
||
//ulg stored_len; /* length of input block */
|
||
//int last; /* one if this is the last block for a file */
|
||
{
|
||
let opt_lenb, static_lenb; /* opt_len and static_len in bytes */
|
||
let max_blindex = 0; /* index of last bit length code of non zero freq */
|
||
|
||
/* Build the Huffman trees unless a stored block is forced */
|
||
if (s.level > 0) {
|
||
|
||
/* Check if the file is binary or text */
|
||
if (s.strm.data_type === Z_UNKNOWN$1) {
|
||
s.strm.data_type = detect_data_type(s);
|
||
}
|
||
|
||
/* Construct the literal and distance trees */
|
||
build_tree(s, s.l_desc);
|
||
// Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
|
||
// s->static_len));
|
||
|
||
build_tree(s, s.d_desc);
|
||
// Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
|
||
// s->static_len));
|
||
/* At this point, opt_len and static_len are the total bit lengths of
|
||
* the compressed block data, excluding the tree representations.
|
||
*/
|
||
|
||
/* Build the bit length tree for the above two trees, and get the index
|
||
* in bl_order of the last bit length code to send.
|
||
*/
|
||
max_blindex = build_bl_tree(s);
|
||
|
||
/* Determine the best encoding. Compute the block lengths in bytes. */
|
||
opt_lenb = (s.opt_len + 3 + 7) >>> 3;
|
||
static_lenb = (s.static_len + 3 + 7) >>> 3;
|
||
|
||
// Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
|
||
// opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
|
||
// s->last_lit));
|
||
|
||
if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }
|
||
|
||
} else {
|
||
// Assert(buf != (char*)0, "lost buf");
|
||
opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
|
||
}
|
||
|
||
if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {
|
||
/* 4: two words for the lengths */
|
||
|
||
/* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
|
||
* Otherwise we can't have processed more than WSIZE input bytes since
|
||
* the last block flush, because compression would have been
|
||
* successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
|
||
* transform a block into a stored block.
|
||
*/
|
||
_tr_stored_block$1(s, buf, stored_len, last);
|
||
|
||
} else if (s.strategy === Z_FIXED$1 || static_lenb === opt_lenb) {
|
||
|
||
send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
|
||
compress_block(s, static_ltree, static_dtree);
|
||
|
||
} else {
|
||
send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
|
||
send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
|
||
compress_block(s, s.dyn_ltree, s.dyn_dtree);
|
||
}
|
||
// Assert (s->compressed_len == s->bits_sent, "bad compressed size");
|
||
/* The above check is made mod 2^32, for files larger than 512 MB
|
||
* and uLong implemented on 32 bits.
|
||
*/
|
||
init_block(s);
|
||
|
||
if (last) {
|
||
bi_windup(s);
|
||
}
|
||
// Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
|
||
// s->compressed_len-7*last));
|
||
};
|
||
|
||
/* ===========================================================================
|
||
* Save the match info and tally the frequency counts. Return true if
|
||
* the current block must be flushed.
|
||
*/
|
||
const _tr_tally$1 = (s, dist, lc) =>
|
||
// deflate_state *s;
|
||
// unsigned dist; /* distance of matched string */
|
||
// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
|
||
{
|
||
//let out_length, in_length, dcode;
|
||
|
||
s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;
|
||
s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
|
||
|
||
s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
|
||
s.last_lit++;
|
||
|
||
if (dist === 0) {
|
||
/* lc is the unmatched char */
|
||
s.dyn_ltree[lc * 2]/*.Freq*/++;
|
||
} else {
|
||
s.matches++;
|
||
/* Here, lc is the match length - MIN_MATCH */
|
||
dist--; /* dist = match distance - 1 */
|
||
//Assert((ush)dist < (ush)MAX_DIST(s) &&
|
||
// (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
|
||
// (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
|
||
|
||
s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]/*.Freq*/++;
|
||
s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
|
||
}
|
||
|
||
// (!) This block is disabled in zlib defaults,
|
||
// don't enable it for binary compatibility
|
||
|
||
//#ifdef TRUNCATE_BLOCK
|
||
// /* Try to guess if it is profitable to stop the current block here */
|
||
// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
|
||
// /* Compute an upper bound for the compressed length */
|
||
// out_length = s.last_lit*8;
|
||
// in_length = s.strstart - s.block_start;
|
||
//
|
||
// for (dcode = 0; dcode < D_CODES; dcode++) {
|
||
// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
|
||
// }
|
||
// out_length >>>= 3;
|
||
// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
|
||
// // s->last_lit, in_length, out_length,
|
||
// // 100L - out_length*100L/in_length));
|
||
// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
|
||
// return true;
|
||
// }
|
||
// }
|
||
//#endif
|
||
|
||
return (s.last_lit === s.lit_bufsize - 1);
|
||
/* We avoid equality with lit_bufsize because of wraparound at 64K
|
||
* on 16 bit machines and because stored blocks are restricted to
|
||
* 64K-1 bytes.
|
||
*/
|
||
};
|
||
|
||
var _tr_init_1 = _tr_init$1;
|
||
var _tr_stored_block_1 = _tr_stored_block$1;
|
||
var _tr_flush_block_1 = _tr_flush_block$1;
|
||
var _tr_tally_1 = _tr_tally$1;
|
||
var _tr_align_1 = _tr_align$1;
|
||
|
||
var trees = {
|
||
_tr_init: _tr_init_1,
|
||
_tr_stored_block: _tr_stored_block_1,
|
||
_tr_flush_block: _tr_flush_block_1,
|
||
_tr_tally: _tr_tally_1,
|
||
_tr_align: _tr_align_1
|
||
};
|
||
|
||
// Note: adler32 takes 12% for level 0 and 2% for level 6.
|
||
// It isn't worth it to make additional optimizations as in original.
|
||
// Small size is preferable.
|
||
|
||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
||
//
|
||
// This software is provided 'as-is', without any express or implied
|
||
// warranty. In no event will the authors be held liable for any damages
|
||
// arising from the use of this software.
|
||
//
|
||
// Permission is granted to anyone to use this software for any purpose,
|
||
// including commercial applications, and to alter it and redistribute it
|
||
// freely, subject to the following restrictions:
|
||
//
|
||
// 1. The origin of this software must not be misrepresented; you must not
|
||
// claim that you wrote the original software. If you use this software
|
||
// in a product, an acknowledgment in the product documentation would be
|
||
// appreciated but is not required.
|
||
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
// misrepresented as being the original software.
|
||
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
||
const adler32 = (adler, buf, len, pos) => {
|
||
let s1 = (adler & 0xffff) |0,
|
||
s2 = ((adler >>> 16) & 0xffff) |0,
|
||
n = 0;
|
||
|
||
while (len !== 0) {
|
||
// Set limit ~ twice less than 5552, to keep
|
||
// s2 in 31-bits, because we force signed ints.
|
||
// in other case %= will fail.
|
||
n = len > 2000 ? 2000 : len;
|
||
len -= n;
|
||
|
||
do {
|
||
s1 = (s1 + buf[pos++]) |0;
|
||
s2 = (s2 + s1) |0;
|
||
} while (--n);
|
||
|
||
s1 %= 65521;
|
||
s2 %= 65521;
|
||
}
|
||
|
||
return (s1 | (s2 << 16)) |0;
|
||
};
|
||
|
||
|
||
var adler32_1 = adler32;
|
||
|
||
// Note: we can't get significant speed boost here.
|
||
// So write code to minimize size - no pregenerated tables
|
||
// and array tools dependencies.
|
||
|
||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
||
//
|
||
// This software is provided 'as-is', without any express or implied
|
||
// warranty. In no event will the authors be held liable for any damages
|
||
// arising from the use of this software.
|
||
//
|
||
// Permission is granted to anyone to use this software for any purpose,
|
||
// including commercial applications, and to alter it and redistribute it
|
||
// freely, subject to the following restrictions:
|
||
//
|
||
// 1. The origin of this software must not be misrepresented; you must not
|
||
// claim that you wrote the original software. If you use this software
|
||
// in a product, an acknowledgment in the product documentation would be
|
||
// appreciated but is not required.
|
||
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
// misrepresented as being the original software.
|
||
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
||
// Use ordinary array, since untyped makes no boost here
|
||
const makeTable = () => {
|
||
let c, table = [];
|
||
|
||
for (var n = 0; n < 256; n++) {
|
||
c = n;
|
||
for (var k = 0; k < 8; k++) {
|
||
c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
|
||
}
|
||
table[n] = c;
|
||
}
|
||
|
||
return table;
|
||
};
|
||
|
||
// Create table on load. Just 255 signed longs. Not a problem.
|
||
const crcTable = new Uint32Array(makeTable());
|
||
|
||
|
||
const crc32 = (crc, buf, len, pos) => {
|
||
const t = crcTable;
|
||
const end = pos + len;
|
||
|
||
crc ^= -1;
|
||
|
||
for (let i = pos; i < end; i++) {
|
||
crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
|
||
}
|
||
|
||
return (crc ^ (-1)); // >>> 0;
|
||
};
|
||
|
||
|
||
var crc32_1 = crc32;
|
||
|
||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
||
//
|
||
// This software is provided 'as-is', without any express or implied
|
||
// warranty. In no event will the authors be held liable for any damages
|
||
// arising from the use of this software.
|
||
//
|
||
// Permission is granted to anyone to use this software for any purpose,
|
||
// including commercial applications, and to alter it and redistribute it
|
||
// freely, subject to the following restrictions:
|
||
//
|
||
// 1. The origin of this software must not be misrepresented; you must not
|
||
// claim that you wrote the original software. If you use this software
|
||
// in a product, an acknowledgment in the product documentation would be
|
||
// appreciated but is not required.
|
||
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
// misrepresented as being the original software.
|
||
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
||
var messages = {
|
||
2: 'need dictionary', /* Z_NEED_DICT 2 */
|
||
1: 'stream end', /* Z_STREAM_END 1 */
|
||
0: '', /* Z_OK 0 */
|
||
'-1': 'file error', /* Z_ERRNO (-1) */
|
||
'-2': 'stream error', /* Z_STREAM_ERROR (-2) */
|
||
'-3': 'data error', /* Z_DATA_ERROR (-3) */
|
||
'-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */
|
||
'-5': 'buffer error', /* Z_BUF_ERROR (-5) */
|
||
'-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
|
||
};
|
||
|
||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
||
//
|
||
// This software is provided 'as-is', without any express or implied
|
||
// warranty. In no event will the authors be held liable for any damages
|
||
// arising from the use of this software.
|
||
//
|
||
// Permission is granted to anyone to use this software for any purpose,
|
||
// including commercial applications, and to alter it and redistribute it
|
||
// freely, subject to the following restrictions:
|
||
//
|
||
// 1. The origin of this software must not be misrepresented; you must not
|
||
// claim that you wrote the original software. If you use this software
|
||
// in a product, an acknowledgment in the product documentation would be
|
||
// appreciated but is not required.
|
||
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
// misrepresented as being the original software.
|
||
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
||
var constants$2 = {
|
||
|
||
/* Allowed flush values; see deflate() and inflate() below for details */
|
||
Z_NO_FLUSH: 0,
|
||
Z_PARTIAL_FLUSH: 1,
|
||
Z_SYNC_FLUSH: 2,
|
||
Z_FULL_FLUSH: 3,
|
||
Z_FINISH: 4,
|
||
Z_BLOCK: 5,
|
||
Z_TREES: 6,
|
||
|
||
/* Return codes for the compression/decompression functions. Negative values
|
||
* are errors, positive values are used for special but normal events.
|
||
*/
|
||
Z_OK: 0,
|
||
Z_STREAM_END: 1,
|
||
Z_NEED_DICT: 2,
|
||
Z_ERRNO: -1,
|
||
Z_STREAM_ERROR: -2,
|
||
Z_DATA_ERROR: -3,
|
||
Z_MEM_ERROR: -4,
|
||
Z_BUF_ERROR: -5,
|
||
//Z_VERSION_ERROR: -6,
|
||
|
||
/* compression levels */
|
||
Z_NO_COMPRESSION: 0,
|
||
Z_BEST_SPEED: 1,
|
||
Z_BEST_COMPRESSION: 9,
|
||
Z_DEFAULT_COMPRESSION: -1,
|
||
|
||
|
||
Z_FILTERED: 1,
|
||
Z_HUFFMAN_ONLY: 2,
|
||
Z_RLE: 3,
|
||
Z_FIXED: 4,
|
||
Z_DEFAULT_STRATEGY: 0,
|
||
|
||
/* Possible values of the data_type field (though see inflate()) */
|
||
Z_BINARY: 0,
|
||
Z_TEXT: 1,
|
||
//Z_ASCII: 1, // = Z_TEXT (deprecated)
|
||
Z_UNKNOWN: 2,
|
||
|
||
/* The deflate compression method */
|
||
Z_DEFLATED: 8
|
||
//Z_NULL: null // Use -1 or null inline, depending on var type
|
||
};
|
||
|
||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
||
//
|
||
// This software is provided 'as-is', without any express or implied
|
||
// warranty. In no event will the authors be held liable for any damages
|
||
// arising from the use of this software.
|
||
//
|
||
// Permission is granted to anyone to use this software for any purpose,
|
||
// including commercial applications, and to alter it and redistribute it
|
||
// freely, subject to the following restrictions:
|
||
//
|
||
// 1. The origin of this software must not be misrepresented; you must not
|
||
// claim that you wrote the original software. If you use this software
|
||
// in a product, an acknowledgment in the product documentation would be
|
||
// appreciated but is not required.
|
||
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
// misrepresented as being the original software.
|
||
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
||
const { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = trees;
|
||
|
||
|
||
|
||
|
||
/* Public constants ==========================================================*/
|
||
/* ===========================================================================*/
|
||
|
||
const {
|
||
Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1,
|
||
Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$1,
|
||
Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1,
|
||
Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1,
|
||
Z_UNKNOWN,
|
||
Z_DEFLATED: Z_DEFLATED$2
|
||
} = constants$2;
|
||
|
||
/*============================================================================*/
|
||
|
||
|
||
const MAX_MEM_LEVEL = 9;
|
||
/* Maximum value for memLevel in deflateInit2 */
|
||
const MAX_WBITS$1 = 15;
|
||
/* 32K LZ77 window */
|
||
const DEF_MEM_LEVEL = 8;
|
||
|
||
|
||
const LENGTH_CODES = 29;
|
||
/* number of length codes, not counting the special END_BLOCK code */
|
||
const LITERALS = 256;
|
||
/* number of literal bytes 0..255 */
|
||
const L_CODES = LITERALS + 1 + LENGTH_CODES;
|
||
/* number of Literal or Length codes, including the END_BLOCK code */
|
||
const D_CODES = 30;
|
||
/* number of distance codes */
|
||
const BL_CODES = 19;
|
||
/* number of codes used to transfer the bit lengths */
|
||
const HEAP_SIZE = 2 * L_CODES + 1;
|
||
/* maximum heap size */
|
||
const MAX_BITS = 15;
|
||
/* All codes must not exceed MAX_BITS bits */
|
||
|
||
const MIN_MATCH = 3;
|
||
const MAX_MATCH = 258;
|
||
const MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
|
||
|
||
const PRESET_DICT = 0x20;
|
||
|
||
const INIT_STATE = 42;
|
||
const EXTRA_STATE = 69;
|
||
const NAME_STATE = 73;
|
||
const COMMENT_STATE = 91;
|
||
const HCRC_STATE = 103;
|
||
const BUSY_STATE = 113;
|
||
const FINISH_STATE = 666;
|
||
|
||
const BS_NEED_MORE = 1; /* block not completed, need more input or more output */
|
||
const BS_BLOCK_DONE = 2; /* block flush performed */
|
||
const BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
|
||
const BS_FINISH_DONE = 4; /* finish done, accept no more input or output */
|
||
|
||
const OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
|
||
|
||
const err = (strm, errorCode) => {
|
||
strm.msg = messages[errorCode];
|
||
return errorCode;
|
||
};
|
||
|
||
const rank = (f) => {
|
||
return ((f) << 1) - ((f) > 4 ? 9 : 0);
|
||
};
|
||
|
||
const zero$2 = (buf) => {
|
||
let len = buf.length; while (--len >= 0) { buf[len] = 0; }
|
||
};
|
||
|
||
|
||
/* eslint-disable new-cap */
|
||
let HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;
|
||
// This hash causes less collisions, https://github.com/nodeca/pako/issues/135
|
||
// But breaks binary compatibility
|
||
//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;
|
||
let HASH = HASH_ZLIB;
|
||
|
||
/* =========================================================================
|
||
* Flush as much pending output as possible. All deflate() output goes
|
||
* through this function so some applications may wish to modify it
|
||
* to avoid allocating a large strm->output buffer and copying into it.
|
||
* (See also read_buf()).
|
||
*/
|
||
const flush_pending = (strm) => {
|
||
const s = strm.state;
|
||
|
||
//_tr_flush_bits(s);
|
||
let len = s.pending;
|
||
if (len > strm.avail_out) {
|
||
len = strm.avail_out;
|
||
}
|
||
if (len === 0) { return; }
|
||
|
||
strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);
|
||
strm.next_out += len;
|
||
s.pending_out += len;
|
||
strm.total_out += len;
|
||
strm.avail_out -= len;
|
||
s.pending -= len;
|
||
if (s.pending === 0) {
|
||
s.pending_out = 0;
|
||
}
|
||
};
|
||
|
||
|
||
const flush_block_only = (s, last) => {
|
||
_tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
|
||
s.block_start = s.strstart;
|
||
flush_pending(s.strm);
|
||
};
|
||
|
||
|
||
const put_byte = (s, b) => {
|
||
s.pending_buf[s.pending++] = b;
|
||
};
|
||
|
||
|
||
/* =========================================================================
|
||
* Put a short in the pending buffer. The 16-bit value is put in MSB order.
|
||
* IN assertion: the stream state is correct and there is enough room in
|
||
* pending_buf.
|
||
*/
|
||
const putShortMSB = (s, b) => {
|
||
|
||
// put_byte(s, (Byte)(b >> 8));
|
||
// put_byte(s, (Byte)(b & 0xff));
|
||
s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
|
||
s.pending_buf[s.pending++] = b & 0xff;
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Read a new buffer from the current input stream, update the adler32
|
||
* and total number of bytes read. All deflate() input goes through
|
||
* this function so some applications may wish to modify it to avoid
|
||
* allocating a large strm->input buffer and copying from it.
|
||
* (See also flush_pending()).
|
||
*/
|
||
const read_buf = (strm, buf, start, size) => {
|
||
|
||
let len = strm.avail_in;
|
||
|
||
if (len > size) { len = size; }
|
||
if (len === 0) { return 0; }
|
||
|
||
strm.avail_in -= len;
|
||
|
||
// zmemcpy(buf, strm->next_in, len);
|
||
buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);
|
||
if (strm.state.wrap === 1) {
|
||
strm.adler = adler32_1(strm.adler, buf, len, start);
|
||
}
|
||
|
||
else if (strm.state.wrap === 2) {
|
||
strm.adler = crc32_1(strm.adler, buf, len, start);
|
||
}
|
||
|
||
strm.next_in += len;
|
||
strm.total_in += len;
|
||
|
||
return len;
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Set match_start to the longest match starting at the given string and
|
||
* return its length. Matches shorter or equal to prev_length are discarded,
|
||
* in which case the result is equal to prev_length and match_start is
|
||
* garbage.
|
||
* IN assertions: cur_match is the head of the hash chain for the current
|
||
* string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
|
||
* OUT assertion: the match length is not greater than s->lookahead.
|
||
*/
|
||
const longest_match = (s, cur_match) => {
|
||
|
||
let chain_length = s.max_chain_length; /* max hash chain length */
|
||
let scan = s.strstart; /* current string */
|
||
let match; /* matched string */
|
||
let len; /* length of current match */
|
||
let best_len = s.prev_length; /* best match length so far */
|
||
let nice_match = s.nice_match; /* stop if match long enough */
|
||
const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
|
||
s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;
|
||
|
||
const _win = s.window; // shortcut
|
||
|
||
const wmask = s.w_mask;
|
||
const prev = s.prev;
|
||
|
||
/* Stop when cur_match becomes <= limit. To simplify the code,
|
||
* we prevent matches with the string of window index 0.
|
||
*/
|
||
|
||
const strend = s.strstart + MAX_MATCH;
|
||
let scan_end1 = _win[scan + best_len - 1];
|
||
let scan_end = _win[scan + best_len];
|
||
|
||
/* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
|
||
* It is easy to get rid of this optimization if necessary.
|
||
*/
|
||
// Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
|
||
|
||
/* Do not waste too much time if we already have a good match: */
|
||
if (s.prev_length >= s.good_match) {
|
||
chain_length >>= 2;
|
||
}
|
||
/* Do not look for matches beyond the end of the input. This is necessary
|
||
* to make deflate deterministic.
|
||
*/
|
||
if (nice_match > s.lookahead) { nice_match = s.lookahead; }
|
||
|
||
// Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
|
||
|
||
do {
|
||
// Assert(cur_match < s->strstart, "no future");
|
||
match = cur_match;
|
||
|
||
/* Skip to next match if the match length cannot increase
|
||
* or if the match length is less than 2. Note that the checks below
|
||
* for insufficient lookahead only occur occasionally for performance
|
||
* reasons. Therefore uninitialized memory will be accessed, and
|
||
* conditional jumps will be made that depend on those values.
|
||
* However the length of the match is limited to the lookahead, so
|
||
* the output of deflate is not affected by the uninitialized values.
|
||
*/
|
||
|
||
if (_win[match + best_len] !== scan_end ||
|
||
_win[match + best_len - 1] !== scan_end1 ||
|
||
_win[match] !== _win[scan] ||
|
||
_win[++match] !== _win[scan + 1]) {
|
||
continue;
|
||
}
|
||
|
||
/* The check at best_len-1 can be removed because it will be made
|
||
* again later. (This heuristic is not always a win.)
|
||
* It is not necessary to compare scan[2] and match[2] since they
|
||
* are always equal when the other bytes match, given that
|
||
* the hash keys are equal and that HASH_BITS >= 8.
|
||
*/
|
||
scan += 2;
|
||
match++;
|
||
// Assert(*scan == *match, "match[2]?");
|
||
|
||
/* We check for insufficient lookahead only every 8th comparison;
|
||
* the 256th check will be made at strstart+258.
|
||
*/
|
||
do {
|
||
/*jshint noempty:false*/
|
||
} while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
|
||
_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
|
||
_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
|
||
_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
|
||
scan < strend);
|
||
|
||
// Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
|
||
|
||
len = MAX_MATCH - (strend - scan);
|
||
scan = strend - MAX_MATCH;
|
||
|
||
if (len > best_len) {
|
||
s.match_start = cur_match;
|
||
best_len = len;
|
||
if (len >= nice_match) {
|
||
break;
|
||
}
|
||
scan_end1 = _win[scan + best_len - 1];
|
||
scan_end = _win[scan + best_len];
|
||
}
|
||
} while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
|
||
|
||
if (best_len <= s.lookahead) {
|
||
return best_len;
|
||
}
|
||
return s.lookahead;
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* Fill the window when the lookahead becomes insufficient.
|
||
* Updates strstart and lookahead.
|
||
*
|
||
* IN assertion: lookahead < MIN_LOOKAHEAD
|
||
* OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
|
||
* At least one byte has been read, or avail_in == 0; reads are
|
||
* performed for at least two bytes (required for the zip translate_eol
|
||
* option -- not supported here).
|
||
*/
|
||
const fill_window = (s) => {
|
||
|
||
const _w_size = s.w_size;
|
||
let p, n, m, more, str;
|
||
|
||
//Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
|
||
|
||
do {
|
||
more = s.window_size - s.lookahead - s.strstart;
|
||
|
||
// JS ints have 32 bit, block below not needed
|
||
/* Deal with !@#$% 64K limit: */
|
||
//if (sizeof(int) <= 2) {
|
||
// if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
|
||
// more = wsize;
|
||
//
|
||
// } else if (more == (unsigned)(-1)) {
|
||
// /* Very unlikely, but possible on 16 bit machine if
|
||
// * strstart == 0 && lookahead == 1 (input done a byte at time)
|
||
// */
|
||
// more--;
|
||
// }
|
||
//}
|
||
|
||
|
||
/* If the window is almost full and there is insufficient lookahead,
|
||
* move the upper half to the lower one to make room in the upper half.
|
||
*/
|
||
if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
|
||
|
||
s.window.set(s.window.subarray(_w_size, _w_size + _w_size), 0);
|
||
s.match_start -= _w_size;
|
||
s.strstart -= _w_size;
|
||
/* we now have strstart >= MAX_DIST */
|
||
s.block_start -= _w_size;
|
||
|
||
/* Slide the hash table (could be avoided with 32 bit values
|
||
at the expense of memory usage). We slide even when level == 0
|
||
to keep the hash table consistent if we switch back to level > 0
|
||
later. (Using level 0 permanently is not an optimal usage of
|
||
zlib, so we don't care about this pathological case.)
|
||
*/
|
||
|
||
n = s.hash_size;
|
||
p = n;
|
||
|
||
do {
|
||
m = s.head[--p];
|
||
s.head[p] = (m >= _w_size ? m - _w_size : 0);
|
||
} while (--n);
|
||
|
||
n = _w_size;
|
||
p = n;
|
||
|
||
do {
|
||
m = s.prev[--p];
|
||
s.prev[p] = (m >= _w_size ? m - _w_size : 0);
|
||
/* If n is not on any hash chain, prev[n] is garbage but
|
||
* its value will never be used.
|
||
*/
|
||
} while (--n);
|
||
|
||
more += _w_size;
|
||
}
|
||
if (s.strm.avail_in === 0) {
|
||
break;
|
||
}
|
||
|
||
/* If there was no sliding:
|
||
* strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
|
||
* more == window_size - lookahead - strstart
|
||
* => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
|
||
* => more >= window_size - 2*WSIZE + 2
|
||
* In the BIG_MEM or MMAP case (not yet supported),
|
||
* window_size == input_size + MIN_LOOKAHEAD &&
|
||
* strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
|
||
* Otherwise, window_size == 2*WSIZE so more >= 2.
|
||
* If there was sliding, more >= WSIZE. So in all cases, more >= 2.
|
||
*/
|
||
//Assert(more >= 2, "more < 2");
|
||
n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
|
||
s.lookahead += n;
|
||
|
||
/* Initialize the hash value now that we have some input: */
|
||
if (s.lookahead + s.insert >= MIN_MATCH) {
|
||
str = s.strstart - s.insert;
|
||
s.ins_h = s.window[str];
|
||
|
||
/* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
|
||
s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);
|
||
//#if MIN_MATCH != 3
|
||
// Call update_hash() MIN_MATCH-3 more times
|
||
//#endif
|
||
while (s.insert) {
|
||
/* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
|
||
s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);
|
||
|
||
s.prev[str & s.w_mask] = s.head[s.ins_h];
|
||
s.head[s.ins_h] = str;
|
||
str++;
|
||
s.insert--;
|
||
if (s.lookahead + s.insert < MIN_MATCH) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
/* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
|
||
* but this is not important since only literal bytes will be emitted.
|
||
*/
|
||
|
||
} while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
|
||
|
||
/* If the WIN_INIT bytes after the end of the current data have never been
|
||
* written, then zero those bytes in order to avoid memory check reports of
|
||
* the use of uninitialized (or uninitialised as Julian writes) bytes by
|
||
* the longest match routines. Update the high water mark for the next
|
||
* time through here. WIN_INIT is set to MAX_MATCH since the longest match
|
||
* routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
|
||
*/
|
||
// if (s.high_water < s.window_size) {
|
||
// const curr = s.strstart + s.lookahead;
|
||
// let init = 0;
|
||
//
|
||
// if (s.high_water < curr) {
|
||
// /* Previous high water mark below current data -- zero WIN_INIT
|
||
// * bytes or up to end of window, whichever is less.
|
||
// */
|
||
// init = s.window_size - curr;
|
||
// if (init > WIN_INIT)
|
||
// init = WIN_INIT;
|
||
// zmemzero(s->window + curr, (unsigned)init);
|
||
// s->high_water = curr + init;
|
||
// }
|
||
// else if (s->high_water < (ulg)curr + WIN_INIT) {
|
||
// /* High water mark at or above current data, but below current data
|
||
// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
|
||
// * to end of window, whichever is less.
|
||
// */
|
||
// init = (ulg)curr + WIN_INIT - s->high_water;
|
||
// if (init > s->window_size - s->high_water)
|
||
// init = s->window_size - s->high_water;
|
||
// zmemzero(s->window + s->high_water, (unsigned)init);
|
||
// s->high_water += init;
|
||
// }
|
||
// }
|
||
//
|
||
// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
|
||
// "not enough room for search");
|
||
};
|
||
|
||
/* ===========================================================================
|
||
* Copy without compression as much as possible from the input stream, return
|
||
* the current block state.
|
||
* This function does not insert new strings in the dictionary since
|
||
* uncompressible data is probably not useful. This function is used
|
||
* only for the level=0 compression option.
|
||
* NOTE: this function should be optimized to avoid extra copying from
|
||
* window to pending_buf.
|
||
*/
|
||
const deflate_stored = (s, flush) => {
|
||
|
||
/* Stored blocks are limited to 0xffff bytes, pending_buf is limited
|
||
* to pending_buf_size, and each stored block has a 5 byte header:
|
||
*/
|
||
let max_block_size = 0xffff;
|
||
|
||
if (max_block_size > s.pending_buf_size - 5) {
|
||
max_block_size = s.pending_buf_size - 5;
|
||
}
|
||
|
||
/* Copy as much as possible from input to output: */
|
||
for (;;) {
|
||
/* Fill the window as much as possible: */
|
||
if (s.lookahead <= 1) {
|
||
|
||
//Assert(s->strstart < s->w_size+MAX_DIST(s) ||
|
||
// s->block_start >= (long)s->w_size, "slide too late");
|
||
// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
|
||
// s.block_start >= s.w_size)) {
|
||
// throw new Error("slide too late");
|
||
// }
|
||
|
||
fill_window(s);
|
||
if (s.lookahead === 0 && flush === Z_NO_FLUSH$2) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
|
||
if (s.lookahead === 0) {
|
||
break;
|
||
}
|
||
/* flush the current block */
|
||
}
|
||
//Assert(s->block_start >= 0L, "block gone");
|
||
// if (s.block_start < 0) throw new Error("block gone");
|
||
|
||
s.strstart += s.lookahead;
|
||
s.lookahead = 0;
|
||
|
||
/* Emit a stored block if pending_buf will be full: */
|
||
const max_start = s.block_start + max_block_size;
|
||
|
||
if (s.strstart === 0 || s.strstart >= max_start) {
|
||
/* strstart == 0 is possible when wraparound on 16-bit machine */
|
||
s.lookahead = s.strstart - max_start;
|
||
s.strstart = max_start;
|
||
/*** FLUSH_BLOCK(s, 0); ***/
|
||
flush_block_only(s, false);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
/***/
|
||
|
||
|
||
}
|
||
/* Flush if we may have to slide, otherwise block_start may become
|
||
* negative and the data will be gone:
|
||
*/
|
||
if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
|
||
/*** FLUSH_BLOCK(s, 0); ***/
|
||
flush_block_only(s, false);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
/***/
|
||
}
|
||
}
|
||
|
||
s.insert = 0;
|
||
|
||
if (flush === Z_FINISH$3) {
|
||
/*** FLUSH_BLOCK(s, 1); ***/
|
||
flush_block_only(s, true);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_FINISH_STARTED;
|
||
}
|
||
/***/
|
||
return BS_FINISH_DONE;
|
||
}
|
||
|
||
if (s.strstart > s.block_start) {
|
||
/*** FLUSH_BLOCK(s, 0); ***/
|
||
flush_block_only(s, false);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
/***/
|
||
}
|
||
|
||
return BS_NEED_MORE;
|
||
};
|
||
|
||
/* ===========================================================================
|
||
* Compress as much as possible from the input stream, return the current
|
||
* block state.
|
||
* This function does not perform lazy evaluation of matches and inserts
|
||
* new strings in the dictionary only for unmatched strings or for short
|
||
* matches. It is used only for the fast compression options.
|
||
*/
|
||
const deflate_fast = (s, flush) => {
|
||
|
||
let hash_head; /* head of the hash chain */
|
||
let bflush; /* set if current block must be flushed */
|
||
|
||
for (;;) {
|
||
/* Make sure that we always have enough lookahead, except
|
||
* at the end of the input file. We need MAX_MATCH bytes
|
||
* for the next match, plus MIN_MATCH bytes to insert the
|
||
* string following the next match.
|
||
*/
|
||
if (s.lookahead < MIN_LOOKAHEAD) {
|
||
fill_window(s);
|
||
if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
if (s.lookahead === 0) {
|
||
break; /* flush the current block */
|
||
}
|
||
}
|
||
|
||
/* Insert the string window[strstart .. strstart+2] in the
|
||
* dictionary, and set hash_head to the head of the hash chain:
|
||
*/
|
||
hash_head = 0/*NIL*/;
|
||
if (s.lookahead >= MIN_MATCH) {
|
||
/*** INSERT_STRING(s, s.strstart, hash_head); ***/
|
||
s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);
|
||
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
|
||
s.head[s.ins_h] = s.strstart;
|
||
/***/
|
||
}
|
||
|
||
/* Find the longest match, discarding those <= prev_length.
|
||
* At this point we have always match_length < MIN_MATCH
|
||
*/
|
||
if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
|
||
/* To simplify the code, we prevent matches with the string
|
||
* of window index 0 (in particular we have to avoid a match
|
||
* of the string with itself at the start of the input file).
|
||
*/
|
||
s.match_length = longest_match(s, hash_head);
|
||
/* longest_match() sets match_start */
|
||
}
|
||
if (s.match_length >= MIN_MATCH) {
|
||
// check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
|
||
|
||
/*** _tr_tally_dist(s, s.strstart - s.match_start,
|
||
s.match_length - MIN_MATCH, bflush); ***/
|
||
bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
|
||
|
||
s.lookahead -= s.match_length;
|
||
|
||
/* Insert new strings in the hash table only if the match length
|
||
* is not too large. This saves time but degrades compression.
|
||
*/
|
||
if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
|
||
s.match_length--; /* string at strstart already in table */
|
||
do {
|
||
s.strstart++;
|
||
/*** INSERT_STRING(s, s.strstart, hash_head); ***/
|
||
s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);
|
||
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
|
||
s.head[s.ins_h] = s.strstart;
|
||
/***/
|
||
/* strstart never exceeds WSIZE-MAX_MATCH, so there are
|
||
* always MIN_MATCH bytes ahead.
|
||
*/
|
||
} while (--s.match_length !== 0);
|
||
s.strstart++;
|
||
} else
|
||
{
|
||
s.strstart += s.match_length;
|
||
s.match_length = 0;
|
||
s.ins_h = s.window[s.strstart];
|
||
/* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
|
||
s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);
|
||
|
||
//#if MIN_MATCH != 3
|
||
// Call UPDATE_HASH() MIN_MATCH-3 more times
|
||
//#endif
|
||
/* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
|
||
* matter since it will be recomputed at next deflate call.
|
||
*/
|
||
}
|
||
} else {
|
||
/* No match, output a literal byte */
|
||
//Tracevv((stderr,"%c", s.window[s.strstart]));
|
||
/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
|
||
bflush = _tr_tally(s, 0, s.window[s.strstart]);
|
||
|
||
s.lookahead--;
|
||
s.strstart++;
|
||
}
|
||
if (bflush) {
|
||
/*** FLUSH_BLOCK(s, 0); ***/
|
||
flush_block_only(s, false);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
/***/
|
||
}
|
||
}
|
||
s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);
|
||
if (flush === Z_FINISH$3) {
|
||
/*** FLUSH_BLOCK(s, 1); ***/
|
||
flush_block_only(s, true);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_FINISH_STARTED;
|
||
}
|
||
/***/
|
||
return BS_FINISH_DONE;
|
||
}
|
||
if (s.last_lit) {
|
||
/*** FLUSH_BLOCK(s, 0); ***/
|
||
flush_block_only(s, false);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
/***/
|
||
}
|
||
return BS_BLOCK_DONE;
|
||
};
|
||
|
||
/* ===========================================================================
|
||
* Same as above, but achieves better compression. We use a lazy
|
||
* evaluation for matches: a match is finally adopted only if there is
|
||
* no better match at the next window position.
|
||
*/
|
||
const deflate_slow = (s, flush) => {
|
||
|
||
let hash_head; /* head of hash chain */
|
||
let bflush; /* set if current block must be flushed */
|
||
|
||
let max_insert;
|
||
|
||
/* Process the input block. */
|
||
for (;;) {
|
||
/* Make sure that we always have enough lookahead, except
|
||
* at the end of the input file. We need MAX_MATCH bytes
|
||
* for the next match, plus MIN_MATCH bytes to insert the
|
||
* string following the next match.
|
||
*/
|
||
if (s.lookahead < MIN_LOOKAHEAD) {
|
||
fill_window(s);
|
||
if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
if (s.lookahead === 0) { break; } /* flush the current block */
|
||
}
|
||
|
||
/* Insert the string window[strstart .. strstart+2] in the
|
||
* dictionary, and set hash_head to the head of the hash chain:
|
||
*/
|
||
hash_head = 0/*NIL*/;
|
||
if (s.lookahead >= MIN_MATCH) {
|
||
/*** INSERT_STRING(s, s.strstart, hash_head); ***/
|
||
s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);
|
||
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
|
||
s.head[s.ins_h] = s.strstart;
|
||
/***/
|
||
}
|
||
|
||
/* Find the longest match, discarding those <= prev_length.
|
||
*/
|
||
s.prev_length = s.match_length;
|
||
s.prev_match = s.match_start;
|
||
s.match_length = MIN_MATCH - 1;
|
||
|
||
if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
|
||
s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
|
||
/* To simplify the code, we prevent matches with the string
|
||
* of window index 0 (in particular we have to avoid a match
|
||
* of the string with itself at the start of the input file).
|
||
*/
|
||
s.match_length = longest_match(s, hash_head);
|
||
/* longest_match() sets match_start */
|
||
|
||
if (s.match_length <= 5 &&
|
||
(s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {
|
||
|
||
/* If prev_match is also MIN_MATCH, match_start is garbage
|
||
* but we will ignore the current match anyway.
|
||
*/
|
||
s.match_length = MIN_MATCH - 1;
|
||
}
|
||
}
|
||
/* If there was a match at the previous step and the current
|
||
* match is not better, output the previous match:
|
||
*/
|
||
if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
|
||
max_insert = s.strstart + s.lookahead - MIN_MATCH;
|
||
/* Do not insert strings in hash table beyond this. */
|
||
|
||
//check_match(s, s.strstart-1, s.prev_match, s.prev_length);
|
||
|
||
/***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
|
||
s.prev_length - MIN_MATCH, bflush);***/
|
||
bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
|
||
/* Insert in hash table all strings up to the end of the match.
|
||
* strstart-1 and strstart are already inserted. If there is not
|
||
* enough lookahead, the last two strings are not inserted in
|
||
* the hash table.
|
||
*/
|
||
s.lookahead -= s.prev_length - 1;
|
||
s.prev_length -= 2;
|
||
do {
|
||
if (++s.strstart <= max_insert) {
|
||
/*** INSERT_STRING(s, s.strstart, hash_head); ***/
|
||
s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);
|
||
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
|
||
s.head[s.ins_h] = s.strstart;
|
||
/***/
|
||
}
|
||
} while (--s.prev_length !== 0);
|
||
s.match_available = 0;
|
||
s.match_length = MIN_MATCH - 1;
|
||
s.strstart++;
|
||
|
||
if (bflush) {
|
||
/*** FLUSH_BLOCK(s, 0); ***/
|
||
flush_block_only(s, false);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
/***/
|
||
}
|
||
|
||
} else if (s.match_available) {
|
||
/* If there was no match at the previous position, output a
|
||
* single literal. If there was a match but the current match
|
||
* is longer, truncate the previous match to a single literal.
|
||
*/
|
||
//Tracevv((stderr,"%c", s->window[s->strstart-1]));
|
||
/*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
|
||
bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);
|
||
|
||
if (bflush) {
|
||
/*** FLUSH_BLOCK_ONLY(s, 0) ***/
|
||
flush_block_only(s, false);
|
||
/***/
|
||
}
|
||
s.strstart++;
|
||
s.lookahead--;
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
} else {
|
||
/* There is no previous match to compare with, wait for
|
||
* the next step to decide.
|
||
*/
|
||
s.match_available = 1;
|
||
s.strstart++;
|
||
s.lookahead--;
|
||
}
|
||
}
|
||
//Assert (flush != Z_NO_FLUSH, "no flush?");
|
||
if (s.match_available) {
|
||
//Tracevv((stderr,"%c", s->window[s->strstart-1]));
|
||
/*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
|
||
bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);
|
||
|
||
s.match_available = 0;
|
||
}
|
||
s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
|
||
if (flush === Z_FINISH$3) {
|
||
/*** FLUSH_BLOCK(s, 1); ***/
|
||
flush_block_only(s, true);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_FINISH_STARTED;
|
||
}
|
||
/***/
|
||
return BS_FINISH_DONE;
|
||
}
|
||
if (s.last_lit) {
|
||
/*** FLUSH_BLOCK(s, 0); ***/
|
||
flush_block_only(s, false);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
/***/
|
||
}
|
||
|
||
return BS_BLOCK_DONE;
|
||
};
|
||
|
||
|
||
/* ===========================================================================
|
||
* For Z_RLE, simply look for runs of bytes, generate matches only of distance
|
||
* one. Do not maintain a hash table. (It will be regenerated if this run of
|
||
* deflate switches away from Z_RLE.)
|
||
*/
|
||
const deflate_rle = (s, flush) => {
|
||
|
||
let bflush; /* set if current block must be flushed */
|
||
let prev; /* byte at distance one to match */
|
||
let scan, strend; /* scan goes up to strend for length of run */
|
||
|
||
const _win = s.window;
|
||
|
||
for (;;) {
|
||
/* Make sure that we always have enough lookahead, except
|
||
* at the end of the input file. We need MAX_MATCH bytes
|
||
* for the longest run, plus one for the unrolled loop.
|
||
*/
|
||
if (s.lookahead <= MAX_MATCH) {
|
||
fill_window(s);
|
||
if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH$2) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
if (s.lookahead === 0) { break; } /* flush the current block */
|
||
}
|
||
|
||
/* See how many times the previous byte repeats */
|
||
s.match_length = 0;
|
||
if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
|
||
scan = s.strstart - 1;
|
||
prev = _win[scan];
|
||
if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
|
||
strend = s.strstart + MAX_MATCH;
|
||
do {
|
||
/*jshint noempty:false*/
|
||
} while (prev === _win[++scan] && prev === _win[++scan] &&
|
||
prev === _win[++scan] && prev === _win[++scan] &&
|
||
prev === _win[++scan] && prev === _win[++scan] &&
|
||
prev === _win[++scan] && prev === _win[++scan] &&
|
||
scan < strend);
|
||
s.match_length = MAX_MATCH - (strend - scan);
|
||
if (s.match_length > s.lookahead) {
|
||
s.match_length = s.lookahead;
|
||
}
|
||
}
|
||
//Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
|
||
}
|
||
|
||
/* Emit match if have run of MIN_MATCH or longer, else emit literal */
|
||
if (s.match_length >= MIN_MATCH) {
|
||
//check_match(s, s.strstart, s.strstart - 1, s.match_length);
|
||
|
||
/*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
|
||
bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);
|
||
|
||
s.lookahead -= s.match_length;
|
||
s.strstart += s.match_length;
|
||
s.match_length = 0;
|
||
} else {
|
||
/* No match, output a literal byte */
|
||
//Tracevv((stderr,"%c", s->window[s->strstart]));
|
||
/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
|
||
bflush = _tr_tally(s, 0, s.window[s.strstart]);
|
||
|
||
s.lookahead--;
|
||
s.strstart++;
|
||
}
|
||
if (bflush) {
|
||
/*** FLUSH_BLOCK(s, 0); ***/
|
||
flush_block_only(s, false);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
/***/
|
||
}
|
||
}
|
||
s.insert = 0;
|
||
if (flush === Z_FINISH$3) {
|
||
/*** FLUSH_BLOCK(s, 1); ***/
|
||
flush_block_only(s, true);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_FINISH_STARTED;
|
||
}
|
||
/***/
|
||
return BS_FINISH_DONE;
|
||
}
|
||
if (s.last_lit) {
|
||
/*** FLUSH_BLOCK(s, 0); ***/
|
||
flush_block_only(s, false);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
/***/
|
||
}
|
||
return BS_BLOCK_DONE;
|
||
};
|
||
|
||
/* ===========================================================================
|
||
* For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
|
||
* (It will be regenerated if this run of deflate switches away from Huffman.)
|
||
*/
|
||
const deflate_huff = (s, flush) => {
|
||
|
||
let bflush; /* set if current block must be flushed */
|
||
|
||
for (;;) {
|
||
/* Make sure that we have a literal to write. */
|
||
if (s.lookahead === 0) {
|
||
fill_window(s);
|
||
if (s.lookahead === 0) {
|
||
if (flush === Z_NO_FLUSH$2) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
break; /* flush the current block */
|
||
}
|
||
}
|
||
|
||
/* Output a literal byte */
|
||
s.match_length = 0;
|
||
//Tracevv((stderr,"%c", s->window[s->strstart]));
|
||
/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
|
||
bflush = _tr_tally(s, 0, s.window[s.strstart]);
|
||
s.lookahead--;
|
||
s.strstart++;
|
||
if (bflush) {
|
||
/*** FLUSH_BLOCK(s, 0); ***/
|
||
flush_block_only(s, false);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
/***/
|
||
}
|
||
}
|
||
s.insert = 0;
|
||
if (flush === Z_FINISH$3) {
|
||
/*** FLUSH_BLOCK(s, 1); ***/
|
||
flush_block_only(s, true);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_FINISH_STARTED;
|
||
}
|
||
/***/
|
||
return BS_FINISH_DONE;
|
||
}
|
||
if (s.last_lit) {
|
||
/*** FLUSH_BLOCK(s, 0); ***/
|
||
flush_block_only(s, false);
|
||
if (s.strm.avail_out === 0) {
|
||
return BS_NEED_MORE;
|
||
}
|
||
/***/
|
||
}
|
||
return BS_BLOCK_DONE;
|
||
};
|
||
|
||
/* Values for max_lazy_match, good_match and max_chain_length, depending on
|
||
* the desired pack level (0..9). The values given below have been tuned to
|
||
* exclude worst case performance for pathological files. Better values may be
|
||
* found for specific files.
|
||
*/
|
||
function Config(good_length, max_lazy, nice_length, max_chain, func) {
|
||
|
||
this.good_length = good_length;
|
||
this.max_lazy = max_lazy;
|
||
this.nice_length = nice_length;
|
||
this.max_chain = max_chain;
|
||
this.func = func;
|
||
}
|
||
|
||
const configuration_table = [
|
||
/* good lazy nice chain */
|
||
new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */
|
||
new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */
|
||
new Config(4, 5, 16, 8, deflate_fast), /* 2 */
|
||
new Config(4, 6, 32, 32, deflate_fast), /* 3 */
|
||
|
||
new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */
|
||
new Config(8, 16, 32, 32, deflate_slow), /* 5 */
|
||
new Config(8, 16, 128, 128, deflate_slow), /* 6 */
|
||
new Config(8, 32, 128, 256, deflate_slow), /* 7 */
|
||
new Config(32, 128, 258, 1024, deflate_slow), /* 8 */
|
||
new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */
|
||
];
|
||
|
||
|
||
/* ===========================================================================
|
||
* Initialize the "longest match" routines for a new zlib stream
|
||
*/
|
||
const lm_init = (s) => {
|
||
|
||
s.window_size = 2 * s.w_size;
|
||
|
||
/*** CLEAR_HASH(s); ***/
|
||
zero$2(s.head); // Fill with NIL (= 0);
|
||
|
||
/* Set the default configuration parameters:
|
||
*/
|
||
s.max_lazy_match = configuration_table[s.level].max_lazy;
|
||
s.good_match = configuration_table[s.level].good_length;
|
||
s.nice_match = configuration_table[s.level].nice_length;
|
||
s.max_chain_length = configuration_table[s.level].max_chain;
|
||
|
||
s.strstart = 0;
|
||
s.block_start = 0;
|
||
s.lookahead = 0;
|
||
s.insert = 0;
|
||
s.match_length = s.prev_length = MIN_MATCH - 1;
|
||
s.match_available = 0;
|
||
s.ins_h = 0;
|
||
};
|
||
|
||
|
||
function DeflateState() {
|
||
this.strm = null; /* pointer back to this zlib stream */
|
||
this.status = 0; /* as the name implies */
|
||
this.pending_buf = null; /* output still pending */
|
||
this.pending_buf_size = 0; /* size of pending_buf */
|
||
this.pending_out = 0; /* next pending byte to output to the stream */
|
||
this.pending = 0; /* nb of bytes in the pending buffer */
|
||
this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
|
||
this.gzhead = null; /* gzip header information to write */
|
||
this.gzindex = 0; /* where in extra, name, or comment */
|
||
this.method = Z_DEFLATED$2; /* can only be DEFLATED */
|
||
this.last_flush = -1; /* value of flush param for previous deflate call */
|
||
|
||
this.w_size = 0; /* LZ77 window size (32K by default) */
|
||
this.w_bits = 0; /* log2(w_size) (8..16) */
|
||
this.w_mask = 0; /* w_size - 1 */
|
||
|
||
this.window = null;
|
||
/* Sliding window. Input bytes are read into the second half of the window,
|
||
* and move to the first half later to keep a dictionary of at least wSize
|
||
* bytes. With this organization, matches are limited to a distance of
|
||
* wSize-MAX_MATCH bytes, but this ensures that IO is always
|
||
* performed with a length multiple of the block size.
|
||
*/
|
||
|
||
this.window_size = 0;
|
||
/* Actual size of window: 2*wSize, except when the user input buffer
|
||
* is directly used as sliding window.
|
||
*/
|
||
|
||
this.prev = null;
|
||
/* Link to older string with same hash index. To limit the size of this
|
||
* array to 64K, this link is maintained only for the last 32K strings.
|
||
* An index in this array is thus a window index modulo 32K.
|
||
*/
|
||
|
||
this.head = null; /* Heads of the hash chains or NIL. */
|
||
|
||
this.ins_h = 0; /* hash index of string to be inserted */
|
||
this.hash_size = 0; /* number of elements in hash table */
|
||
this.hash_bits = 0; /* log2(hash_size) */
|
||
this.hash_mask = 0; /* hash_size-1 */
|
||
|
||
this.hash_shift = 0;
|
||
/* Number of bits by which ins_h must be shifted at each input
|
||
* step. It must be such that after MIN_MATCH steps, the oldest
|
||
* byte no longer takes part in the hash key, that is:
|
||
* hash_shift * MIN_MATCH >= hash_bits
|
||
*/
|
||
|
||
this.block_start = 0;
|
||
/* Window position at the beginning of the current output block. Gets
|
||
* negative when the window is moved backwards.
|
||
*/
|
||
|
||
this.match_length = 0; /* length of best match */
|
||
this.prev_match = 0; /* previous match */
|
||
this.match_available = 0; /* set if previous match exists */
|
||
this.strstart = 0; /* start of string to insert */
|
||
this.match_start = 0; /* start of matching string */
|
||
this.lookahead = 0; /* number of valid bytes ahead in window */
|
||
|
||
this.prev_length = 0;
|
||
/* Length of the best match at previous step. Matches not greater than this
|
||
* are discarded. This is used in the lazy match evaluation.
|
||
*/
|
||
|
||
this.max_chain_length = 0;
|
||
/* To speed up deflation, hash chains are never searched beyond this
|
||
* length. A higher limit improves compression ratio but degrades the
|
||
* speed.
|
||
*/
|
||
|
||
this.max_lazy_match = 0;
|
||
/* Attempt to find a better match only when the current match is strictly
|
||
* smaller than this value. This mechanism is used only for compression
|
||
* levels >= 4.
|
||
*/
|
||
// That's alias to max_lazy_match, don't use directly
|
||
//this.max_insert_length = 0;
|
||
/* Insert new strings in the hash table only if the match length is not
|
||
* greater than this length. This saves time but degrades compression.
|
||
* max_insert_length is used only for compression levels <= 3.
|
||
*/
|
||
|
||
this.level = 0; /* compression level (1..9) */
|
||
this.strategy = 0; /* favor or force Huffman coding*/
|
||
|
||
this.good_match = 0;
|
||
/* Use a faster search when the previous match is longer than this */
|
||
|
||
this.nice_match = 0; /* Stop searching when current match exceeds this */
|
||
|
||
/* used by trees.c: */
|
||
|
||
/* Didn't use ct_data typedef below to suppress compiler warning */
|
||
|
||
// struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
|
||
// struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
|
||
// struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
|
||
|
||
// Use flat array of DOUBLE size, with interleaved fata,
|
||
// because JS does not support effective
|
||
this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);
|
||
this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);
|
||
this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);
|
||
zero$2(this.dyn_ltree);
|
||
zero$2(this.dyn_dtree);
|
||
zero$2(this.bl_tree);
|
||
|
||
this.l_desc = null; /* desc. for literal tree */
|
||
this.d_desc = null; /* desc. for distance tree */
|
||
this.bl_desc = null; /* desc. for bit length tree */
|
||
|
||
//ush bl_count[MAX_BITS+1];
|
||
this.bl_count = new Uint16Array(MAX_BITS + 1);
|
||
/* number of codes at each bit length for an optimal tree */
|
||
|
||
//int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
|
||
this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */
|
||
zero$2(this.heap);
|
||
|
||
this.heap_len = 0; /* number of elements in the heap */
|
||
this.heap_max = 0; /* element of largest frequency */
|
||
/* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
|
||
* The same heap array is used to build all trees.
|
||
*/
|
||
|
||
this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];
|
||
zero$2(this.depth);
|
||
/* Depth of each subtree used as tie breaker for trees of equal frequency
|
||
*/
|
||
|
||
this.l_buf = 0; /* buffer index for literals or lengths */
|
||
|
||
this.lit_bufsize = 0;
|
||
/* Size of match buffer for literals/lengths. There are 4 reasons for
|
||
* limiting lit_bufsize to 64K:
|
||
* - frequencies can be kept in 16 bit counters
|
||
* - if compression is not successful for the first block, all input
|
||
* data is still in the window so we can still emit a stored block even
|
||
* when input comes from standard input. (This can also be done for
|
||
* all blocks if lit_bufsize is not greater than 32K.)
|
||
* - if compression is not successful for a file smaller than 64K, we can
|
||
* even emit a stored file instead of a stored block (saving 5 bytes).
|
||
* This is applicable only for zip (not gzip or zlib).
|
||
* - creating new Huffman trees less frequently may not provide fast
|
||
* adaptation to changes in the input data statistics. (Take for
|
||
* example a binary file with poorly compressible code followed by
|
||
* a highly compressible string table.) Smaller buffer sizes give
|
||
* fast adaptation but have of course the overhead of transmitting
|
||
* trees more frequently.
|
||
* - I can't count above 4
|
||
*/
|
||
|
||
this.last_lit = 0; /* running index in l_buf */
|
||
|
||
this.d_buf = 0;
|
||
/* Buffer index for distances. To simplify the code, d_buf and l_buf have
|
||
* the same number of elements. To use different lengths, an extra flag
|
||
* array would be necessary.
|
||
*/
|
||
|
||
this.opt_len = 0; /* bit length of current block with optimal trees */
|
||
this.static_len = 0; /* bit length of current block with static trees */
|
||
this.matches = 0; /* number of string matches in current block */
|
||
this.insert = 0; /* bytes at end of window left to insert */
|
||
|
||
|
||
this.bi_buf = 0;
|
||
/* Output buffer. bits are inserted starting at the bottom (least
|
||
* significant bits).
|
||
*/
|
||
this.bi_valid = 0;
|
||
/* Number of valid bits in bi_buf. All bits above the last valid bit
|
||
* are always zero.
|
||
*/
|
||
|
||
// Used for window memory init. We safely ignore it for JS. That makes
|
||
// sense only for pointers and memory check tools.
|
||
//this.high_water = 0;
|
||
/* High water mark offset in window for initialized bytes -- bytes above
|
||
* this are set to zero in order to avoid memory check warnings when
|
||
* longest match routines access bytes past the input. This is then
|
||
* updated to the new high water mark.
|
||
*/
|
||
}
|
||
|
||
|
||
const deflateResetKeep = (strm) => {
|
||
|
||
if (!strm || !strm.state) {
|
||
return err(strm, Z_STREAM_ERROR$2);
|
||
}
|
||
|
||
strm.total_in = strm.total_out = 0;
|
||
strm.data_type = Z_UNKNOWN;
|
||
|
||
const s = strm.state;
|
||
s.pending = 0;
|
||
s.pending_out = 0;
|
||
|
||
if (s.wrap < 0) {
|
||
s.wrap = -s.wrap;
|
||
/* was made negative by deflate(..., Z_FINISH); */
|
||
}
|
||
s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
|
||
strm.adler = (s.wrap === 2) ?
|
||
0 // crc32(0, Z_NULL, 0)
|
||
:
|
||
1; // adler32(0, Z_NULL, 0)
|
||
s.last_flush = Z_NO_FLUSH$2;
|
||
_tr_init(s);
|
||
return Z_OK$3;
|
||
};
|
||
|
||
|
||
const deflateReset = (strm) => {
|
||
|
||
const ret = deflateResetKeep(strm);
|
||
if (ret === Z_OK$3) {
|
||
lm_init(strm.state);
|
||
}
|
||
return ret;
|
||
};
|
||
|
||
|
||
const deflateSetHeader = (strm, head) => {
|
||
|
||
if (!strm || !strm.state) { return Z_STREAM_ERROR$2; }
|
||
if (strm.state.wrap !== 2) { return Z_STREAM_ERROR$2; }
|
||
strm.state.gzhead = head;
|
||
return Z_OK$3;
|
||
};
|
||
|
||
|
||
const deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {
|
||
|
||
if (!strm) { // === Z_NULL
|
||
return Z_STREAM_ERROR$2;
|
||
}
|
||
let wrap = 1;
|
||
|
||
if (level === Z_DEFAULT_COMPRESSION$1) {
|
||
level = 6;
|
||
}
|
||
|
||
if (windowBits < 0) { /* suppress zlib wrapper */
|
||
wrap = 0;
|
||
windowBits = -windowBits;
|
||
}
|
||
|
||
else if (windowBits > 15) {
|
||
wrap = 2; /* write gzip wrapper instead */
|
||
windowBits -= 16;
|
||
}
|
||
|
||
|
||
if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED$2 ||
|
||
windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
|
||
strategy < 0 || strategy > Z_FIXED) {
|
||
return err(strm, Z_STREAM_ERROR$2);
|
||
}
|
||
|
||
|
||
if (windowBits === 8) {
|
||
windowBits = 9;
|
||
}
|
||
/* until 256-byte window bug fixed */
|
||
|
||
const s = new DeflateState();
|
||
|
||
strm.state = s;
|
||
s.strm = strm;
|
||
|
||
s.wrap = wrap;
|
||
s.gzhead = null;
|
||
s.w_bits = windowBits;
|
||
s.w_size = 1 << s.w_bits;
|
||
s.w_mask = s.w_size - 1;
|
||
|
||
s.hash_bits = memLevel + 7;
|
||
s.hash_size = 1 << s.hash_bits;
|
||
s.hash_mask = s.hash_size - 1;
|
||
s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
|
||
|
||
s.window = new Uint8Array(s.w_size * 2);
|
||
s.head = new Uint16Array(s.hash_size);
|
||
s.prev = new Uint16Array(s.w_size);
|
||
|
||
// Don't need mem init magic for JS.
|
||
//s.high_water = 0; /* nothing written to s->window yet */
|
||
|
||
s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
|
||
|
||
s.pending_buf_size = s.lit_bufsize * 4;
|
||
|
||
//overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
|
||
//s->pending_buf = (uchf *) overlay;
|
||
s.pending_buf = new Uint8Array(s.pending_buf_size);
|
||
|
||
// It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)
|
||
//s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
|
||
s.d_buf = 1 * s.lit_bufsize;
|
||
|
||
//s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
|
||
s.l_buf = (1 + 2) * s.lit_bufsize;
|
||
|
||
s.level = level;
|
||
s.strategy = strategy;
|
||
s.method = method;
|
||
|
||
return deflateReset(strm);
|
||
};
|
||
|
||
const deflateInit = (strm, level) => {
|
||
|
||
return deflateInit2(strm, level, Z_DEFLATED$2, MAX_WBITS$1, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY$1);
|
||
};
|
||
|
||
|
||
const deflate$2 = (strm, flush) => {
|
||
|
||
let beg, val; // for gzip header write only
|
||
|
||
if (!strm || !strm.state ||
|
||
flush > Z_BLOCK$1 || flush < 0) {
|
||
return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;
|
||
}
|
||
|
||
const s = strm.state;
|
||
|
||
if (!strm.output ||
|
||
(!strm.input && strm.avail_in !== 0) ||
|
||
(s.status === FINISH_STATE && flush !== Z_FINISH$3)) {
|
||
return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR$1 : Z_STREAM_ERROR$2);
|
||
}
|
||
|
||
s.strm = strm; /* just in case */
|
||
const old_flush = s.last_flush;
|
||
s.last_flush = flush;
|
||
|
||
/* Write the header */
|
||
if (s.status === INIT_STATE) {
|
||
|
||
if (s.wrap === 2) { // GZIP header
|
||
strm.adler = 0; //crc32(0L, Z_NULL, 0);
|
||
put_byte(s, 31);
|
||
put_byte(s, 139);
|
||
put_byte(s, 8);
|
||
if (!s.gzhead) { // s->gzhead == Z_NULL
|
||
put_byte(s, 0);
|
||
put_byte(s, 0);
|
||
put_byte(s, 0);
|
||
put_byte(s, 0);
|
||
put_byte(s, 0);
|
||
put_byte(s, s.level === 9 ? 2 :
|
||
(s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
|
||
4 : 0));
|
||
put_byte(s, OS_CODE);
|
||
s.status = BUSY_STATE;
|
||
}
|
||
else {
|
||
put_byte(s, (s.gzhead.text ? 1 : 0) +
|
||
(s.gzhead.hcrc ? 2 : 0) +
|
||
(!s.gzhead.extra ? 0 : 4) +
|
||
(!s.gzhead.name ? 0 : 8) +
|
||
(!s.gzhead.comment ? 0 : 16)
|
||
);
|
||
put_byte(s, s.gzhead.time & 0xff);
|
||
put_byte(s, (s.gzhead.time >> 8) & 0xff);
|
||
put_byte(s, (s.gzhead.time >> 16) & 0xff);
|
||
put_byte(s, (s.gzhead.time >> 24) & 0xff);
|
||
put_byte(s, s.level === 9 ? 2 :
|
||
(s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
|
||
4 : 0));
|
||
put_byte(s, s.gzhead.os & 0xff);
|
||
if (s.gzhead.extra && s.gzhead.extra.length) {
|
||
put_byte(s, s.gzhead.extra.length & 0xff);
|
||
put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
|
||
}
|
||
if (s.gzhead.hcrc) {
|
||
strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);
|
||
}
|
||
s.gzindex = 0;
|
||
s.status = EXTRA_STATE;
|
||
}
|
||
}
|
||
else // DEFLATE header
|
||
{
|
||
let header = (Z_DEFLATED$2 + ((s.w_bits - 8) << 4)) << 8;
|
||
let level_flags = -1;
|
||
|
||
if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
|
||
level_flags = 0;
|
||
} else if (s.level < 6) {
|
||
level_flags = 1;
|
||
} else if (s.level === 6) {
|
||
level_flags = 2;
|
||
} else {
|
||
level_flags = 3;
|
||
}
|
||
header |= (level_flags << 6);
|
||
if (s.strstart !== 0) { header |= PRESET_DICT; }
|
||
header += 31 - (header % 31);
|
||
|
||
s.status = BUSY_STATE;
|
||
putShortMSB(s, header);
|
||
|
||
/* Save the adler32 of the preset dictionary: */
|
||
if (s.strstart !== 0) {
|
||
putShortMSB(s, strm.adler >>> 16);
|
||
putShortMSB(s, strm.adler & 0xffff);
|
||
}
|
||
strm.adler = 1; // adler32(0L, Z_NULL, 0);
|
||
}
|
||
}
|
||
|
||
//#ifdef GZIP
|
||
if (s.status === EXTRA_STATE) {
|
||
if (s.gzhead.extra/* != Z_NULL*/) {
|
||
beg = s.pending; /* start of bytes to update crc */
|
||
|
||
while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
|
||
if (s.pending === s.pending_buf_size) {
|
||
if (s.gzhead.hcrc && s.pending > beg) {
|
||
strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
|
||
}
|
||
flush_pending(strm);
|
||
beg = s.pending;
|
||
if (s.pending === s.pending_buf_size) {
|
||
break;
|
||
}
|
||
}
|
||
put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
|
||
s.gzindex++;
|
||
}
|
||
if (s.gzhead.hcrc && s.pending > beg) {
|
||
strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
|
||
}
|
||
if (s.gzindex === s.gzhead.extra.length) {
|
||
s.gzindex = 0;
|
||
s.status = NAME_STATE;
|
||
}
|
||
}
|
||
else {
|
||
s.status = NAME_STATE;
|
||
}
|
||
}
|
||
if (s.status === NAME_STATE) {
|
||
if (s.gzhead.name/* != Z_NULL*/) {
|
||
beg = s.pending; /* start of bytes to update crc */
|
||
//int val;
|
||
|
||
do {
|
||
if (s.pending === s.pending_buf_size) {
|
||
if (s.gzhead.hcrc && s.pending > beg) {
|
||
strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
|
||
}
|
||
flush_pending(strm);
|
||
beg = s.pending;
|
||
if (s.pending === s.pending_buf_size) {
|
||
val = 1;
|
||
break;
|
||
}
|
||
}
|
||
// JS specific: little magic to add zero terminator to end of string
|
||
if (s.gzindex < s.gzhead.name.length) {
|
||
val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
|
||
} else {
|
||
val = 0;
|
||
}
|
||
put_byte(s, val);
|
||
} while (val !== 0);
|
||
|
||
if (s.gzhead.hcrc && s.pending > beg) {
|
||
strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
|
||
}
|
||
if (val === 0) {
|
||
s.gzindex = 0;
|
||
s.status = COMMENT_STATE;
|
||
}
|
||
}
|
||
else {
|
||
s.status = COMMENT_STATE;
|
||
}
|
||
}
|
||
if (s.status === COMMENT_STATE) {
|
||
if (s.gzhead.comment/* != Z_NULL*/) {
|
||
beg = s.pending; /* start of bytes to update crc */
|
||
//int val;
|
||
|
||
do {
|
||
if (s.pending === s.pending_buf_size) {
|
||
if (s.gzhead.hcrc && s.pending > beg) {
|
||
strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
|
||
}
|
||
flush_pending(strm);
|
||
beg = s.pending;
|
||
if (s.pending === s.pending_buf_size) {
|
||
val = 1;
|
||
break;
|
||
}
|
||
}
|
||
// JS specific: little magic to add zero terminator to end of string
|
||
if (s.gzindex < s.gzhead.comment.length) {
|
||
val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
|
||
} else {
|
||
val = 0;
|
||
}
|
||
put_byte(s, val);
|
||
} while (val !== 0);
|
||
|
||
if (s.gzhead.hcrc && s.pending > beg) {
|
||
strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
|
||
}
|
||
if (val === 0) {
|
||
s.status = HCRC_STATE;
|
||
}
|
||
}
|
||
else {
|
||
s.status = HCRC_STATE;
|
||
}
|
||
}
|
||
if (s.status === HCRC_STATE) {
|
||
if (s.gzhead.hcrc) {
|
||
if (s.pending + 2 > s.pending_buf_size) {
|
||
flush_pending(strm);
|
||
}
|
||
if (s.pending + 2 <= s.pending_buf_size) {
|
||
put_byte(s, strm.adler & 0xff);
|
||
put_byte(s, (strm.adler >> 8) & 0xff);
|
||
strm.adler = 0; //crc32(0L, Z_NULL, 0);
|
||
s.status = BUSY_STATE;
|
||
}
|
||
}
|
||
else {
|
||
s.status = BUSY_STATE;
|
||
}
|
||
}
|
||
//#endif
|
||
|
||
/* Flush as much pending output as possible */
|
||
if (s.pending !== 0) {
|
||
flush_pending(strm);
|
||
if (strm.avail_out === 0) {
|
||
/* Since avail_out is 0, deflate will be called again with
|
||
* more output space, but possibly with both pending and
|
||
* avail_in equal to zero. There won't be anything to do,
|
||
* but this is not an error situation so make sure we
|
||
* return OK instead of BUF_ERROR at next call of deflate:
|
||
*/
|
||
s.last_flush = -1;
|
||
return Z_OK$3;
|
||
}
|
||
|
||
/* Make sure there is something to do and avoid duplicate consecutive
|
||
* flushes. For repeated and useless calls with Z_FINISH, we keep
|
||
* returning Z_STREAM_END instead of Z_BUF_ERROR.
|
||
*/
|
||
} else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
|
||
flush !== Z_FINISH$3) {
|
||
return err(strm, Z_BUF_ERROR$1);
|
||
}
|
||
|
||
/* User must not provide more input after the first FINISH: */
|
||
if (s.status === FINISH_STATE && strm.avail_in !== 0) {
|
||
return err(strm, Z_BUF_ERROR$1);
|
||
}
|
||
|
||
/* Start a new block or continue the current one.
|
||
*/
|
||
if (strm.avail_in !== 0 || s.lookahead !== 0 ||
|
||
(flush !== Z_NO_FLUSH$2 && s.status !== FINISH_STATE)) {
|
||
let bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
|
||
(s.strategy === Z_RLE ? deflate_rle(s, flush) :
|
||
configuration_table[s.level].func(s, flush));
|
||
|
||
if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
|
||
s.status = FINISH_STATE;
|
||
}
|
||
if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
|
||
if (strm.avail_out === 0) {
|
||
s.last_flush = -1;
|
||
/* avoid BUF_ERROR next call, see above */
|
||
}
|
||
return Z_OK$3;
|
||
/* If flush != Z_NO_FLUSH && avail_out == 0, the next call
|
||
* of deflate should use the same flush parameter to make sure
|
||
* that the flush is complete. So we don't have to output an
|
||
* empty block here, this will be done at next call. This also
|
||
* ensures that for a very small output buffer, we emit at most
|
||
* one empty block.
|
||
*/
|
||
}
|
||
if (bstate === BS_BLOCK_DONE) {
|
||
if (flush === Z_PARTIAL_FLUSH) {
|
||
_tr_align(s);
|
||
}
|
||
else if (flush !== Z_BLOCK$1) { /* FULL_FLUSH or SYNC_FLUSH */
|
||
|
||
_tr_stored_block(s, 0, 0, false);
|
||
/* For a full flush, this empty block will be recognized
|
||
* as a special marker by inflate_sync().
|
||
*/
|
||
if (flush === Z_FULL_FLUSH$1) {
|
||
/*** CLEAR_HASH(s); ***/ /* forget history */
|
||
zero$2(s.head); // Fill with NIL (= 0);
|
||
|
||
if (s.lookahead === 0) {
|
||
s.strstart = 0;
|
||
s.block_start = 0;
|
||
s.insert = 0;
|
||
}
|
||
}
|
||
}
|
||
flush_pending(strm);
|
||
if (strm.avail_out === 0) {
|
||
s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
|
||
return Z_OK$3;
|
||
}
|
||
}
|
||
}
|
||
//Assert(strm->avail_out > 0, "bug2");
|
||
//if (strm.avail_out <= 0) { throw new Error("bug2");}
|
||
|
||
if (flush !== Z_FINISH$3) { return Z_OK$3; }
|
||
if (s.wrap <= 0) { return Z_STREAM_END$3; }
|
||
|
||
/* Write the trailer */
|
||
if (s.wrap === 2) {
|
||
put_byte(s, strm.adler & 0xff);
|
||
put_byte(s, (strm.adler >> 8) & 0xff);
|
||
put_byte(s, (strm.adler >> 16) & 0xff);
|
||
put_byte(s, (strm.adler >> 24) & 0xff);
|
||
put_byte(s, strm.total_in & 0xff);
|
||
put_byte(s, (strm.total_in >> 8) & 0xff);
|
||
put_byte(s, (strm.total_in >> 16) & 0xff);
|
||
put_byte(s, (strm.total_in >> 24) & 0xff);
|
||
}
|
||
else
|
||
{
|
||
putShortMSB(s, strm.adler >>> 16);
|
||
putShortMSB(s, strm.adler & 0xffff);
|
||
}
|
||
|
||
flush_pending(strm);
|
||
/* If avail_out is zero, the application will call deflate again
|
||
* to flush the rest.
|
||
*/
|
||
if (s.wrap > 0) { s.wrap = -s.wrap; }
|
||
/* write the trailer only once! */
|
||
return s.pending !== 0 ? Z_OK$3 : Z_STREAM_END$3;
|
||
};
|
||
|
||
|
||
const deflateEnd = (strm) => {
|
||
|
||
if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
|
||
return Z_STREAM_ERROR$2;
|
||
}
|
||
|
||
const status = strm.state.status;
|
||
if (status !== INIT_STATE &&
|
||
status !== EXTRA_STATE &&
|
||
status !== NAME_STATE &&
|
||
status !== COMMENT_STATE &&
|
||
status !== HCRC_STATE &&
|
||
status !== BUSY_STATE &&
|
||
status !== FINISH_STATE
|
||
) {
|
||
return err(strm, Z_STREAM_ERROR$2);
|
||
}
|
||
|
||
strm.state = null;
|
||
|
||
return status === BUSY_STATE ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;
|
||
};
|
||
|
||
|
||
/* =========================================================================
|
||
* Initializes the compression dictionary from the given byte
|
||
* sequence without producing any compressed output.
|
||
*/
|
||
const deflateSetDictionary = (strm, dictionary) => {
|
||
|
||
let dictLength = dictionary.length;
|
||
|
||
if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
|
||
return Z_STREAM_ERROR$2;
|
||
}
|
||
|
||
const s = strm.state;
|
||
const wrap = s.wrap;
|
||
|
||
if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {
|
||
return Z_STREAM_ERROR$2;
|
||
}
|
||
|
||
/* when using zlib wrappers, compute Adler-32 for provided dictionary */
|
||
if (wrap === 1) {
|
||
/* adler32(strm->adler, dictionary, dictLength); */
|
||
strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);
|
||
}
|
||
|
||
s.wrap = 0; /* avoid computing Adler-32 in read_buf */
|
||
|
||
/* if dictionary would fill window, just replace the history */
|
||
if (dictLength >= s.w_size) {
|
||
if (wrap === 0) { /* already empty otherwise */
|
||
/*** CLEAR_HASH(s); ***/
|
||
zero$2(s.head); // Fill with NIL (= 0);
|
||
s.strstart = 0;
|
||
s.block_start = 0;
|
||
s.insert = 0;
|
||
}
|
||
/* use the tail */
|
||
// dictionary = dictionary.slice(dictLength - s.w_size);
|
||
let tmpDict = new Uint8Array(s.w_size);
|
||
tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);
|
||
dictionary = tmpDict;
|
||
dictLength = s.w_size;
|
||
}
|
||
/* insert dictionary into window and hash */
|
||
const avail = strm.avail_in;
|
||
const next = strm.next_in;
|
||
const input = strm.input;
|
||
strm.avail_in = dictLength;
|
||
strm.next_in = 0;
|
||
strm.input = dictionary;
|
||
fill_window(s);
|
||
while (s.lookahead >= MIN_MATCH) {
|
||
let str = s.strstart;
|
||
let n = s.lookahead - (MIN_MATCH - 1);
|
||
do {
|
||
/* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
|
||
s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);
|
||
|
||
s.prev[str & s.w_mask] = s.head[s.ins_h];
|
||
|
||
s.head[s.ins_h] = str;
|
||
str++;
|
||
} while (--n);
|
||
s.strstart = str;
|
||
s.lookahead = MIN_MATCH - 1;
|
||
fill_window(s);
|
||
}
|
||
s.strstart += s.lookahead;
|
||
s.block_start = s.strstart;
|
||
s.insert = s.lookahead;
|
||
s.lookahead = 0;
|
||
s.match_length = s.prev_length = MIN_MATCH - 1;
|
||
s.match_available = 0;
|
||
strm.next_in = next;
|
||
strm.input = input;
|
||
strm.avail_in = avail;
|
||
s.wrap = wrap;
|
||
return Z_OK$3;
|
||
};
|
||
|
||
|
||
var deflateInit_1 = deflateInit;
|
||
var deflateInit2_1 = deflateInit2;
|
||
var deflateReset_1 = deflateReset;
|
||
var deflateResetKeep_1 = deflateResetKeep;
|
||
var deflateSetHeader_1 = deflateSetHeader;
|
||
var deflate_2$1 = deflate$2;
|
||
var deflateEnd_1 = deflateEnd;
|
||
var deflateSetDictionary_1 = deflateSetDictionary;
|
||
var deflateInfo = 'pako deflate (from Nodeca project)';
|
||
|
||
/* Not implemented
|
||
module.exports.deflateBound = deflateBound;
|
||
module.exports.deflateCopy = deflateCopy;
|
||
module.exports.deflateParams = deflateParams;
|
||
module.exports.deflatePending = deflatePending;
|
||
module.exports.deflatePrime = deflatePrime;
|
||
module.exports.deflateTune = deflateTune;
|
||
*/
|
||
|
||
var deflate_1$2 = {
|
||
deflateInit: deflateInit_1,
|
||
deflateInit2: deflateInit2_1,
|
||
deflateReset: deflateReset_1,
|
||
deflateResetKeep: deflateResetKeep_1,
|
||
deflateSetHeader: deflateSetHeader_1,
|
||
deflate: deflate_2$1,
|
||
deflateEnd: deflateEnd_1,
|
||
deflateSetDictionary: deflateSetDictionary_1,
|
||
deflateInfo: deflateInfo
|
||
};
|
||
|
||
const _has = (obj, key) => {
|
||
return Object.prototype.hasOwnProperty.call(obj, key);
|
||
};
|
||
|
||
var assign = function (obj /*from1, from2, from3, ...*/) {
|
||
const sources = Array.prototype.slice.call(arguments, 1);
|
||
while (sources.length) {
|
||
const source = sources.shift();
|
||
if (!source) { continue; }
|
||
|
||
if (typeof source !== 'object') {
|
||
throw new TypeError(source + 'must be non-object');
|
||
}
|
||
|
||
for (const p in source) {
|
||
if (_has(source, p)) {
|
||
obj[p] = source[p];
|
||
}
|
||
}
|
||
}
|
||
|
||
return obj;
|
||
};
|
||
|
||
|
||
// Join array of chunks to single array.
|
||
var flattenChunks = (chunks) => {
|
||
// calculate data length
|
||
let len = 0;
|
||
|
||
for (let i = 0, l = chunks.length; i < l; i++) {
|
||
len += chunks[i].length;
|
||
}
|
||
|
||
// join chunks
|
||
const result = new Uint8Array(len);
|
||
|
||
for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {
|
||
let chunk = chunks[i];
|
||
result.set(chunk, pos);
|
||
pos += chunk.length;
|
||
}
|
||
|
||
return result;
|
||
};
|
||
|
||
var common = {
|
||
assign: assign,
|
||
flattenChunks: flattenChunks
|
||
};
|
||
|
||
// String encode/decode helpers
|
||
|
||
|
||
// Quick check if we can use fast array to bin string conversion
|
||
//
|
||
// - apply(Array) can fail on Android 2.2
|
||
// - apply(Uint8Array) can fail on iOS 5.1 Safari
|
||
//
|
||
let STR_APPLY_UIA_OK = true;
|
||
|
||
try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }
|
||
|
||
|
||
// Table with utf8 lengths (calculated by first byte of sequence)
|
||
// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
|
||
// because max possible codepoint is 0x10ffff
|
||
const _utf8len = new Uint8Array(256);
|
||
for (let q = 0; q < 256; q++) {
|
||
_utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);
|
||
}
|
||
_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start
|
||
|
||
|
||
// convert string to array (typed, when possible)
|
||
var string2buf = (str) => {
|
||
if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {
|
||
return new TextEncoder().encode(str);
|
||
}
|
||
|
||
let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;
|
||
|
||
// count binary size
|
||
for (m_pos = 0; m_pos < str_len; m_pos++) {
|
||
c = str.charCodeAt(m_pos);
|
||
if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
|
||
c2 = str.charCodeAt(m_pos + 1);
|
||
if ((c2 & 0xfc00) === 0xdc00) {
|
||
c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
|
||
m_pos++;
|
||
}
|
||
}
|
||
buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
|
||
}
|
||
|
||
// allocate buffer
|
||
buf = new Uint8Array(buf_len);
|
||
|
||
// convert
|
||
for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
|
||
c = str.charCodeAt(m_pos);
|
||
if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
|
||
c2 = str.charCodeAt(m_pos + 1);
|
||
if ((c2 & 0xfc00) === 0xdc00) {
|
||
c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
|
||
m_pos++;
|
||
}
|
||
}
|
||
if (c < 0x80) {
|
||
/* one byte */
|
||
buf[i++] = c;
|
||
} else if (c < 0x800) {
|
||
/* two bytes */
|
||
buf[i++] = 0xC0 | (c >>> 6);
|
||
buf[i++] = 0x80 | (c & 0x3f);
|
||
} else if (c < 0x10000) {
|
||
/* three bytes */
|
||
buf[i++] = 0xE0 | (c >>> 12);
|
||
buf[i++] = 0x80 | (c >>> 6 & 0x3f);
|
||
buf[i++] = 0x80 | (c & 0x3f);
|
||
} else {
|
||
/* four bytes */
|
||
buf[i++] = 0xf0 | (c >>> 18);
|
||
buf[i++] = 0x80 | (c >>> 12 & 0x3f);
|
||
buf[i++] = 0x80 | (c >>> 6 & 0x3f);
|
||
buf[i++] = 0x80 | (c & 0x3f);
|
||
}
|
||
}
|
||
|
||
return buf;
|
||
};
|
||
|
||
// Helper
|
||
const buf2binstring = (buf, len) => {
|
||
// On Chrome, the arguments in a function call that are allowed is `65534`.
|
||
// If the length of the buffer is smaller than that, we can use this optimization,
|
||
// otherwise we will take a slower path.
|
||
if (len < 65534) {
|
||
if (buf.subarray && STR_APPLY_UIA_OK) {
|
||
return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));
|
||
}
|
||
}
|
||
|
||
let result = '';
|
||
for (let i = 0; i < len; i++) {
|
||
result += String.fromCharCode(buf[i]);
|
||
}
|
||
return result;
|
||
};
|
||
|
||
|
||
// convert array to string
|
||
var buf2string = (buf, max) => {
|
||
const len = max || buf.length;
|
||
|
||
if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {
|
||
return new TextDecoder().decode(buf.subarray(0, max));
|
||
}
|
||
|
||
let i, out;
|
||
|
||
// Reserve max possible length (2 words per char)
|
||
// NB: by unknown reasons, Array is significantly faster for
|
||
// String.fromCharCode.apply than Uint16Array.
|
||
const utf16buf = new Array(len * 2);
|
||
|
||
for (out = 0, i = 0; i < len;) {
|
||
let c = buf[i++];
|
||
// quick process ascii
|
||
if (c < 0x80) { utf16buf[out++] = c; continue; }
|
||
|
||
let c_len = _utf8len[c];
|
||
// skip 5 & 6 byte codes
|
||
if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }
|
||
|
||
// apply mask on first byte
|
||
c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
|
||
// join the rest
|
||
while (c_len > 1 && i < len) {
|
||
c = (c << 6) | (buf[i++] & 0x3f);
|
||
c_len--;
|
||
}
|
||
|
||
// terminated by end of string?
|
||
if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }
|
||
|
||
if (c < 0x10000) {
|
||
utf16buf[out++] = c;
|
||
} else {
|
||
c -= 0x10000;
|
||
utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
|
||
utf16buf[out++] = 0xdc00 | (c & 0x3ff);
|
||
}
|
||
}
|
||
|
||
return buf2binstring(utf16buf, out);
|
||
};
|
||
|
||
|
||
// Calculate max possible position in utf8 buffer,
|
||
// that will not break sequence. If that's not possible
|
||
// - (very small limits) return max size as is.
|
||
//
|
||
// buf[] - utf8 bytes array
|
||
// max - length limit (mandatory);
|
||
var utf8border = (buf, max) => {
|
||
|
||
max = max || buf.length;
|
||
if (max > buf.length) { max = buf.length; }
|
||
|
||
// go back from last position, until start of sequence found
|
||
let pos = max - 1;
|
||
while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }
|
||
|
||
// Very small and broken sequence,
|
||
// return max, because we should return something anyway.
|
||
if (pos < 0) { return max; }
|
||
|
||
// If we came to start of buffer - that means buffer is too small,
|
||
// return max too.
|
||
if (pos === 0) { return max; }
|
||
|
||
return (pos + _utf8len[buf[pos]] > max) ? pos : max;
|
||
};
|
||
|
||
var strings = {
|
||
string2buf: string2buf,
|
||
buf2string: buf2string,
|
||
utf8border: utf8border
|
||
};
|
||
|
||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
||
//
|
||
// This software is provided 'as-is', without any express or implied
|
||
// warranty. In no event will the authors be held liable for any damages
|
||
// arising from the use of this software.
|
||
//
|
||
// Permission is granted to anyone to use this software for any purpose,
|
||
// including commercial applications, and to alter it and redistribute it
|
||
// freely, subject to the following restrictions:
|
||
//
|
||
// 1. The origin of this software must not be misrepresented; you must not
|
||
// claim that you wrote the original software. If you use this software
|
||
// in a product, an acknowledgment in the product documentation would be
|
||
// appreciated but is not required.
|
||
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
// misrepresented as being the original software.
|
||
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
||
function ZStream() {
|
||
/* next input byte */
|
||
this.input = null; // JS specific, because we have no pointers
|
||
this.next_in = 0;
|
||
/* number of bytes available at input */
|
||
this.avail_in = 0;
|
||
/* total number of input bytes read so far */
|
||
this.total_in = 0;
|
||
/* next output byte should be put there */
|
||
this.output = null; // JS specific, because we have no pointers
|
||
this.next_out = 0;
|
||
/* remaining free space at output */
|
||
this.avail_out = 0;
|
||
/* total number of bytes output so far */
|
||
this.total_out = 0;
|
||
/* last error message, NULL if no error */
|
||
this.msg = ''/*Z_NULL*/;
|
||
/* not visible by applications */
|
||
this.state = null;
|
||
/* best guess about the data type: binary or text */
|
||
this.data_type = 2/*Z_UNKNOWN*/;
|
||
/* adler32 value of the uncompressed data */
|
||
this.adler = 0;
|
||
}
|
||
|
||
var zstream = ZStream;
|
||
|
||
const toString$1 = Object.prototype.toString;
|
||
|
||
/* Public constants ==========================================================*/
|
||
/* ===========================================================================*/
|
||
|
||
const {
|
||
Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2,
|
||
Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2,
|
||
Z_DEFAULT_COMPRESSION,
|
||
Z_DEFAULT_STRATEGY,
|
||
Z_DEFLATED: Z_DEFLATED$1
|
||
} = constants$2;
|
||
|
||
/* ===========================================================================*/
|
||
|
||
|
||
/**
|
||
* class Deflate
|
||
*
|
||
* Generic JS-style wrapper for zlib calls. If you don't need
|
||
* streaming behaviour - use more simple functions: [[deflate]],
|
||
* [[deflateRaw]] and [[gzip]].
|
||
**/
|
||
|
||
/* internal
|
||
* Deflate.chunks -> Array
|
||
*
|
||
* Chunks of output data, if [[Deflate#onData]] not overridden.
|
||
**/
|
||
|
||
/**
|
||
* Deflate.result -> Uint8Array
|
||
*
|
||
* Compressed result, generated by default [[Deflate#onData]]
|
||
* and [[Deflate#onEnd]] handlers. Filled after you push last chunk
|
||
* (call [[Deflate#push]] with `Z_FINISH` / `true` param).
|
||
**/
|
||
|
||
/**
|
||
* Deflate.err -> Number
|
||
*
|
||
* Error code after deflate finished. 0 (Z_OK) on success.
|
||
* You will not need it in real life, because deflate errors
|
||
* are possible only on wrong options or bad `onData` / `onEnd`
|
||
* custom handlers.
|
||
**/
|
||
|
||
/**
|
||
* Deflate.msg -> String
|
||
*
|
||
* Error message, if [[Deflate.err]] != 0
|
||
**/
|
||
|
||
|
||
/**
|
||
* new Deflate(options)
|
||
* - options (Object): zlib deflate options.
|
||
*
|
||
* Creates new deflator instance with specified params. Throws exception
|
||
* on bad params. Supported options:
|
||
*
|
||
* - `level`
|
||
* - `windowBits`
|
||
* - `memLevel`
|
||
* - `strategy`
|
||
* - `dictionary`
|
||
*
|
||
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
|
||
* for more information on these.
|
||
*
|
||
* Additional options, for internal needs:
|
||
*
|
||
* - `chunkSize` - size of generated data chunks (16K by default)
|
||
* - `raw` (Boolean) - do raw deflate
|
||
* - `gzip` (Boolean) - create gzip wrapper
|
||
* - `header` (Object) - custom header for gzip
|
||
* - `text` (Boolean) - true if compressed data believed to be text
|
||
* - `time` (Number) - modification time, unix timestamp
|
||
* - `os` (Number) - operation system code
|
||
* - `extra` (Array) - array of bytes with extra data (max 65536)
|
||
* - `name` (String) - file name (binary string)
|
||
* - `comment` (String) - comment (binary string)
|
||
* - `hcrc` (Boolean) - true if header crc should be added
|
||
*
|
||
* ##### Example:
|
||
*
|
||
* ```javascript
|
||
* const pako = require('pako')
|
||
* , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])
|
||
* , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);
|
||
*
|
||
* const deflate = new pako.Deflate({ level: 3});
|
||
*
|
||
* deflate.push(chunk1, false);
|
||
* deflate.push(chunk2, true); // true -> last chunk
|
||
*
|
||
* if (deflate.err) { throw new Error(deflate.err); }
|
||
*
|
||
* console.log(deflate.result);
|
||
* ```
|
||
**/
|
||
function Deflate$1(options) {
|
||
this.options = common.assign({
|
||
level: Z_DEFAULT_COMPRESSION,
|
||
method: Z_DEFLATED$1,
|
||
chunkSize: 16384,
|
||
windowBits: 15,
|
||
memLevel: 8,
|
||
strategy: Z_DEFAULT_STRATEGY
|
||
}, options || {});
|
||
|
||
let opt = this.options;
|
||
|
||
if (opt.raw && (opt.windowBits > 0)) {
|
||
opt.windowBits = -opt.windowBits;
|
||
}
|
||
|
||
else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {
|
||
opt.windowBits += 16;
|
||
}
|
||
|
||
this.err = 0; // error code, if happens (0 = Z_OK)
|
||
this.msg = ''; // error message
|
||
this.ended = false; // used to avoid multiple onEnd() calls
|
||
this.chunks = []; // chunks of compressed data
|
||
|
||
this.strm = new zstream();
|
||
this.strm.avail_out = 0;
|
||
|
||
let status = deflate_1$2.deflateInit2(
|
||
this.strm,
|
||
opt.level,
|
||
opt.method,
|
||
opt.windowBits,
|
||
opt.memLevel,
|
||
opt.strategy
|
||
);
|
||
|
||
if (status !== Z_OK$2) {
|
||
throw new Error(messages[status]);
|
||
}
|
||
|
||
if (opt.header) {
|
||
deflate_1$2.deflateSetHeader(this.strm, opt.header);
|
||
}
|
||
|
||
if (opt.dictionary) {
|
||
let dict;
|
||
// Convert data if needed
|
||
if (typeof opt.dictionary === 'string') {
|
||
// If we need to compress text, change encoding to utf8.
|
||
dict = strings.string2buf(opt.dictionary);
|
||
} else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {
|
||
dict = new Uint8Array(opt.dictionary);
|
||
} else {
|
||
dict = opt.dictionary;
|
||
}
|
||
|
||
status = deflate_1$2.deflateSetDictionary(this.strm, dict);
|
||
|
||
if (status !== Z_OK$2) {
|
||
throw new Error(messages[status]);
|
||
}
|
||
|
||
this._dict_set = true;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Deflate#push(data[, flush_mode]) -> Boolean
|
||
* - data (Uint8Array|ArrayBuffer|String): input data. Strings will be
|
||
* converted to utf8 byte sequence.
|
||
* - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
|
||
* See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.
|
||
*
|
||
* Sends input data to deflate pipe, generating [[Deflate#onData]] calls with
|
||
* new compressed chunks. Returns `true` on success. The last data block must
|
||
* have `flush_mode` Z_FINISH (or `true`). That will flush internal pending
|
||
* buffers and call [[Deflate#onEnd]].
|
||
*
|
||
* On fail call [[Deflate#onEnd]] with error code and return false.
|
||
*
|
||
* ##### Example
|
||
*
|
||
* ```javascript
|
||
* push(chunk, false); // push one of data chunks
|
||
* ...
|
||
* push(chunk, true); // push last chunk
|
||
* ```
|
||
**/
|
||
Deflate$1.prototype.push = function (data, flush_mode) {
|
||
const strm = this.strm;
|
||
const chunkSize = this.options.chunkSize;
|
||
let status, _flush_mode;
|
||
|
||
if (this.ended) { return false; }
|
||
|
||
if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;
|
||
else _flush_mode = flush_mode === true ? Z_FINISH$2 : Z_NO_FLUSH$1;
|
||
|
||
// Convert data if needed
|
||
if (typeof data === 'string') {
|
||
// If we need to compress text, change encoding to utf8.
|
||
strm.input = strings.string2buf(data);
|
||
} else if (toString$1.call(data) === '[object ArrayBuffer]') {
|
||
strm.input = new Uint8Array(data);
|
||
} else {
|
||
strm.input = data;
|
||
}
|
||
|
||
strm.next_in = 0;
|
||
strm.avail_in = strm.input.length;
|
||
|
||
for (;;) {
|
||
if (strm.avail_out === 0) {
|
||
strm.output = new Uint8Array(chunkSize);
|
||
strm.next_out = 0;
|
||
strm.avail_out = chunkSize;
|
||
}
|
||
|
||
// Make sure avail_out > 6 to avoid repeating markers
|
||
if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {
|
||
this.onData(strm.output.subarray(0, strm.next_out));
|
||
strm.avail_out = 0;
|
||
continue;
|
||
}
|
||
|
||
status = deflate_1$2.deflate(strm, _flush_mode);
|
||
|
||
// Ended => flush and finish
|
||
if (status === Z_STREAM_END$2) {
|
||
if (strm.next_out > 0) {
|
||
this.onData(strm.output.subarray(0, strm.next_out));
|
||
}
|
||
status = deflate_1$2.deflateEnd(this.strm);
|
||
this.onEnd(status);
|
||
this.ended = true;
|
||
return status === Z_OK$2;
|
||
}
|
||
|
||
// Flush if out buffer full
|
||
if (strm.avail_out === 0) {
|
||
this.onData(strm.output);
|
||
continue;
|
||
}
|
||
|
||
// Flush if requested and has data
|
||
if (_flush_mode > 0 && strm.next_out > 0) {
|
||
this.onData(strm.output.subarray(0, strm.next_out));
|
||
strm.avail_out = 0;
|
||
continue;
|
||
}
|
||
|
||
if (strm.avail_in === 0) break;
|
||
}
|
||
|
||
return true;
|
||
};
|
||
|
||
|
||
/**
|
||
* Deflate#onData(chunk) -> Void
|
||
* - chunk (Uint8Array): output data.
|
||
*
|
||
* By default, stores data blocks in `chunks[]` property and glue
|
||
* those in `onEnd`. Override this handler, if you need another behaviour.
|
||
**/
|
||
Deflate$1.prototype.onData = function (chunk) {
|
||
this.chunks.push(chunk);
|
||
};
|
||
|
||
|
||
/**
|
||
* Deflate#onEnd(status) -> Void
|
||
* - status (Number): deflate status. 0 (Z_OK) on success,
|
||
* other if not.
|
||
*
|
||
* Called once after you tell deflate that the input stream is
|
||
* complete (Z_FINISH). By default - join collected chunks,
|
||
* free memory and fill `results` / `err` properties.
|
||
**/
|
||
Deflate$1.prototype.onEnd = function (status) {
|
||
// On success - join
|
||
if (status === Z_OK$2) {
|
||
this.result = common.flattenChunks(this.chunks);
|
||
}
|
||
this.chunks = [];
|
||
this.err = status;
|
||
this.msg = this.strm.msg;
|
||
};
|
||
|
||
|
||
/**
|
||
* deflate(data[, options]) -> Uint8Array
|
||
* - data (Uint8Array|String): input data to compress.
|
||
* - options (Object): zlib deflate options.
|
||
*
|
||
* Compress `data` with deflate algorithm and `options`.
|
||
*
|
||
* Supported options are:
|
||
*
|
||
* - level
|
||
* - windowBits
|
||
* - memLevel
|
||
* - strategy
|
||
* - dictionary
|
||
*
|
||
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
|
||
* for more information on these.
|
||
*
|
||
* Sugar (options):
|
||
*
|
||
* - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
|
||
* negative windowBits implicitly.
|
||
*
|
||
* ##### Example:
|
||
*
|
||
* ```javascript
|
||
* const pako = require('pako')
|
||
* const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);
|
||
*
|
||
* console.log(pako.deflate(data));
|
||
* ```
|
||
**/
|
||
function deflate$1(input, options) {
|
||
const deflator = new Deflate$1(options);
|
||
|
||
deflator.push(input, true);
|
||
|
||
// That will never happens, if you don't cheat with options :)
|
||
if (deflator.err) { throw deflator.msg || messages[deflator.err]; }
|
||
|
||
return deflator.result;
|
||
}
|
||
|
||
|
||
/**
|
||
* deflateRaw(data[, options]) -> Uint8Array
|
||
* - data (Uint8Array|String): input data to compress.
|
||
* - options (Object): zlib deflate options.
|
||
*
|
||
* The same as [[deflate]], but creates raw data, without wrapper
|
||
* (header and adler32 crc).
|
||
**/
|
||
function deflateRaw$1(input, options) {
|
||
options = options || {};
|
||
options.raw = true;
|
||
return deflate$1(input, options);
|
||
}
|
||
|
||
|
||
/**
|
||
* gzip(data[, options]) -> Uint8Array
|
||
* - data (Uint8Array|String): input data to compress.
|
||
* - options (Object): zlib deflate options.
|
||
*
|
||
* The same as [[deflate]], but create gzip wrapper instead of
|
||
* deflate one.
|
||
**/
|
||
function gzip$1(input, options) {
|
||
options = options || {};
|
||
options.gzip = true;
|
||
return deflate$1(input, options);
|
||
}
|
||
|
||
|
||
var Deflate_1$1 = Deflate$1;
|
||
var deflate_2 = deflate$1;
|
||
var deflateRaw_1$1 = deflateRaw$1;
|
||
var gzip_1$1 = gzip$1;
|
||
var constants$1 = constants$2;
|
||
|
||
var deflate_1$1 = {
|
||
Deflate: Deflate_1$1,
|
||
deflate: deflate_2,
|
||
deflateRaw: deflateRaw_1$1,
|
||
gzip: gzip_1$1,
|
||
constants: constants$1
|
||
};
|
||
|
||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
||
//
|
||
// This software is provided 'as-is', without any express or implied
|
||
// warranty. In no event will the authors be held liable for any damages
|
||
// arising from the use of this software.
|
||
//
|
||
// Permission is granted to anyone to use this software for any purpose,
|
||
// including commercial applications, and to alter it and redistribute it
|
||
// freely, subject to the following restrictions:
|
||
//
|
||
// 1. The origin of this software must not be misrepresented; you must not
|
||
// claim that you wrote the original software. If you use this software
|
||
// in a product, an acknowledgment in the product documentation would be
|
||
// appreciated but is not required.
|
||
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
// misrepresented as being the original software.
|
||
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
||
// See state defs from inflate.js
|
||
const BAD$1 = 30; /* got a data error -- remain here until reset */
|
||
const TYPE$1 = 12; /* i: waiting for type bits, including last-flag bit */
|
||
|
||
/*
|
||
Decode literal, length, and distance codes and write out the resulting
|
||
literal and match bytes until either not enough input or output is
|
||
available, an end-of-block is encountered, or a data error is encountered.
|
||
When large enough input and output buffers are supplied to inflate(), for
|
||
example, a 16K input buffer and a 64K output buffer, more than 95% of the
|
||
inflate execution time is spent in this routine.
|
||
|
||
Entry assumptions:
|
||
|
||
state.mode === LEN
|
||
strm.avail_in >= 6
|
||
strm.avail_out >= 258
|
||
start >= strm.avail_out
|
||
state.bits < 8
|
||
|
||
On return, state.mode is one of:
|
||
|
||
LEN -- ran out of enough output space or enough available input
|
||
TYPE -- reached end of block code, inflate() to interpret next block
|
||
BAD -- error in block data
|
||
|
||
Notes:
|
||
|
||
- The maximum input bits used by a length/distance pair is 15 bits for the
|
||
length code, 5 bits for the length extra, 15 bits for the distance code,
|
||
and 13 bits for the distance extra. This totals 48 bits, or six bytes.
|
||
Therefore if strm.avail_in >= 6, then there is enough input to avoid
|
||
checking for available input while decoding.
|
||
|
||
- The maximum bytes that a single length/distance pair can output is 258
|
||
bytes, which is the maximum length that can be coded. inflate_fast()
|
||
requires strm.avail_out >= 258 for each loop to avoid checking for
|
||
output space.
|
||
*/
|
||
var inffast = function inflate_fast(strm, start) {
|
||
let _in; /* local strm.input */
|
||
let last; /* have enough input while in < last */
|
||
let _out; /* local strm.output */
|
||
let beg; /* inflate()'s initial strm.output */
|
||
let end; /* while out < end, enough space available */
|
||
//#ifdef INFLATE_STRICT
|
||
let dmax; /* maximum distance from zlib header */
|
||
//#endif
|
||
let wsize; /* window size or zero if not using window */
|
||
let whave; /* valid bytes in the window */
|
||
let wnext; /* window write index */
|
||
// Use `s_window` instead `window`, avoid conflict with instrumentation tools
|
||
let s_window; /* allocated sliding window, if wsize != 0 */
|
||
let hold; /* local strm.hold */
|
||
let bits; /* local strm.bits */
|
||
let lcode; /* local strm.lencode */
|
||
let dcode; /* local strm.distcode */
|
||
let lmask; /* mask for first level of length codes */
|
||
let dmask; /* mask for first level of distance codes */
|
||
let here; /* retrieved table entry */
|
||
let op; /* code bits, operation, extra bits, or */
|
||
/* window position, window bytes to copy */
|
||
let len; /* match length, unused bytes */
|
||
let dist; /* match distance */
|
||
let from; /* where to copy match from */
|
||
let from_source;
|
||
|
||
|
||
let input, output; // JS specific, because we have no pointers
|
||
|
||
/* copy state to local variables */
|
||
const state = strm.state;
|
||
//here = state.here;
|
||
_in = strm.next_in;
|
||
input = strm.input;
|
||
last = _in + (strm.avail_in - 5);
|
||
_out = strm.next_out;
|
||
output = strm.output;
|
||
beg = _out - (start - strm.avail_out);
|
||
end = _out + (strm.avail_out - 257);
|
||
//#ifdef INFLATE_STRICT
|
||
dmax = state.dmax;
|
||
//#endif
|
||
wsize = state.wsize;
|
||
whave = state.whave;
|
||
wnext = state.wnext;
|
||
s_window = state.window;
|
||
hold = state.hold;
|
||
bits = state.bits;
|
||
lcode = state.lencode;
|
||
dcode = state.distcode;
|
||
lmask = (1 << state.lenbits) - 1;
|
||
dmask = (1 << state.distbits) - 1;
|
||
|
||
|
||
/* decode literals and length/distances until end-of-block or not enough
|
||
input data or output space */
|
||
|
||
top:
|
||
do {
|
||
if (bits < 15) {
|
||
hold += input[_in++] << bits;
|
||
bits += 8;
|
||
hold += input[_in++] << bits;
|
||
bits += 8;
|
||
}
|
||
|
||
here = lcode[hold & lmask];
|
||
|
||
dolen:
|
||
for (;;) { // Goto emulation
|
||
op = here >>> 24/*here.bits*/;
|
||
hold >>>= op;
|
||
bits -= op;
|
||
op = (here >>> 16) & 0xff/*here.op*/;
|
||
if (op === 0) { /* literal */
|
||
//Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
|
||
// "inflate: literal '%c'\n" :
|
||
// "inflate: literal 0x%02x\n", here.val));
|
||
output[_out++] = here & 0xffff/*here.val*/;
|
||
}
|
||
else if (op & 16) { /* length base */
|
||
len = here & 0xffff/*here.val*/;
|
||
op &= 15; /* number of extra bits */
|
||
if (op) {
|
||
if (bits < op) {
|
||
hold += input[_in++] << bits;
|
||
bits += 8;
|
||
}
|
||
len += hold & ((1 << op) - 1);
|
||
hold >>>= op;
|
||
bits -= op;
|
||
}
|
||
//Tracevv((stderr, "inflate: length %u\n", len));
|
||
if (bits < 15) {
|
||
hold += input[_in++] << bits;
|
||
bits += 8;
|
||
hold += input[_in++] << bits;
|
||
bits += 8;
|
||
}
|
||
here = dcode[hold & dmask];
|
||
|
||
dodist:
|
||
for (;;) { // goto emulation
|
||
op = here >>> 24/*here.bits*/;
|
||
hold >>>= op;
|
||
bits -= op;
|
||
op = (here >>> 16) & 0xff/*here.op*/;
|
||
|
||
if (op & 16) { /* distance base */
|
||
dist = here & 0xffff/*here.val*/;
|
||
op &= 15; /* number of extra bits */
|
||
if (bits < op) {
|
||
hold += input[_in++] << bits;
|
||
bits += 8;
|
||
if (bits < op) {
|
||
hold += input[_in++] << bits;
|
||
bits += 8;
|
||
}
|
||
}
|
||
dist += hold & ((1 << op) - 1);
|
||
//#ifdef INFLATE_STRICT
|
||
if (dist > dmax) {
|
||
strm.msg = 'invalid distance too far back';
|
||
state.mode = BAD$1;
|
||
break top;
|
||
}
|
||
//#endif
|
||
hold >>>= op;
|
||
bits -= op;
|
||
//Tracevv((stderr, "inflate: distance %u\n", dist));
|
||
op = _out - beg; /* max distance in output */
|
||
if (dist > op) { /* see if copy from window */
|
||
op = dist - op; /* distance back in window */
|
||
if (op > whave) {
|
||
if (state.sane) {
|
||
strm.msg = 'invalid distance too far back';
|
||
state.mode = BAD$1;
|
||
break top;
|
||
}
|
||
|
||
// (!) This block is disabled in zlib defaults,
|
||
// don't enable it for binary compatibility
|
||
//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
|
||
// if (len <= op - whave) {
|
||
// do {
|
||
// output[_out++] = 0;
|
||
// } while (--len);
|
||
// continue top;
|
||
// }
|
||
// len -= op - whave;
|
||
// do {
|
||
// output[_out++] = 0;
|
||
// } while (--op > whave);
|
||
// if (op === 0) {
|
||
// from = _out - dist;
|
||
// do {
|
||
// output[_out++] = output[from++];
|
||
// } while (--len);
|
||
// continue top;
|
||
// }
|
||
//#endif
|
||
}
|
||
from = 0; // window index
|
||
from_source = s_window;
|
||
if (wnext === 0) { /* very common case */
|
||
from += wsize - op;
|
||
if (op < len) { /* some from window */
|
||
len -= op;
|
||
do {
|
||
output[_out++] = s_window[from++];
|
||
} while (--op);
|
||
from = _out - dist; /* rest from output */
|
||
from_source = output;
|
||
}
|
||
}
|
||
else if (wnext < op) { /* wrap around window */
|
||
from += wsize + wnext - op;
|
||
op -= wnext;
|
||
if (op < len) { /* some from end of window */
|
||
len -= op;
|
||
do {
|
||
output[_out++] = s_window[from++];
|
||
} while (--op);
|
||
from = 0;
|
||
if (wnext < len) { /* some from start of window */
|
||
op = wnext;
|
||
len -= op;
|
||
do {
|
||
output[_out++] = s_window[from++];
|
||
} while (--op);
|
||
from = _out - dist; /* rest from output */
|
||
from_source = output;
|
||
}
|
||
}
|
||
}
|
||
else { /* contiguous in window */
|
||
from += wnext - op;
|
||
if (op < len) { /* some from window */
|
||
len -= op;
|
||
do {
|
||
output[_out++] = s_window[from++];
|
||
} while (--op);
|
||
from = _out - dist; /* rest from output */
|
||
from_source = output;
|
||
}
|
||
}
|
||
while (len > 2) {
|
||
output[_out++] = from_source[from++];
|
||
output[_out++] = from_source[from++];
|
||
output[_out++] = from_source[from++];
|
||
len -= 3;
|
||
}
|
||
if (len) {
|
||
output[_out++] = from_source[from++];
|
||
if (len > 1) {
|
||
output[_out++] = from_source[from++];
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
from = _out - dist; /* copy direct from output */
|
||
do { /* minimum length is three */
|
||
output[_out++] = output[from++];
|
||
output[_out++] = output[from++];
|
||
output[_out++] = output[from++];
|
||
len -= 3;
|
||
} while (len > 2);
|
||
if (len) {
|
||
output[_out++] = output[from++];
|
||
if (len > 1) {
|
||
output[_out++] = output[from++];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if ((op & 64) === 0) { /* 2nd level distance code */
|
||
here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
|
||
continue dodist;
|
||
}
|
||
else {
|
||
strm.msg = 'invalid distance code';
|
||
state.mode = BAD$1;
|
||
break top;
|
||
}
|
||
|
||
break; // need to emulate goto via "continue"
|
||
}
|
||
}
|
||
else if ((op & 64) === 0) { /* 2nd level length code */
|
||
here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
|
||
continue dolen;
|
||
}
|
||
else if (op & 32) { /* end-of-block */
|
||
//Tracevv((stderr, "inflate: end of block\n"));
|
||
state.mode = TYPE$1;
|
||
break top;
|
||
}
|
||
else {
|
||
strm.msg = 'invalid literal/length code';
|
||
state.mode = BAD$1;
|
||
break top;
|
||
}
|
||
|
||
break; // need to emulate goto via "continue"
|
||
}
|
||
} while (_in < last && _out < end);
|
||
|
||
/* return unused bytes (on entry, bits < 8, so in won't go too far back) */
|
||
len = bits >> 3;
|
||
_in -= len;
|
||
bits -= len << 3;
|
||
hold &= (1 << bits) - 1;
|
||
|
||
/* update state and return */
|
||
strm.next_in = _in;
|
||
strm.next_out = _out;
|
||
strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
|
||
strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
|
||
state.hold = hold;
|
||
state.bits = bits;
|
||
return;
|
||
};
|
||
|
||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
||
//
|
||
// This software is provided 'as-is', without any express or implied
|
||
// warranty. In no event will the authors be held liable for any damages
|
||
// arising from the use of this software.
|
||
//
|
||
// Permission is granted to anyone to use this software for any purpose,
|
||
// including commercial applications, and to alter it and redistribute it
|
||
// freely, subject to the following restrictions:
|
||
//
|
||
// 1. The origin of this software must not be misrepresented; you must not
|
||
// claim that you wrote the original software. If you use this software
|
||
// in a product, an acknowledgment in the product documentation would be
|
||
// appreciated but is not required.
|
||
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
// misrepresented as being the original software.
|
||
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
||
const MAXBITS = 15;
|
||
const ENOUGH_LENS$1 = 852;
|
||
const ENOUGH_DISTS$1 = 592;
|
||
//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
|
||
|
||
const CODES$1 = 0;
|
||
const LENS$1 = 1;
|
||
const DISTS$1 = 2;
|
||
|
||
const lbase = new Uint16Array([ /* Length codes 257..285 base */
|
||
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
|
||
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
|
||
]);
|
||
|
||
const lext = new Uint8Array([ /* Length codes 257..285 extra */
|
||
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
|
||
19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
|
||
]);
|
||
|
||
const dbase = new Uint16Array([ /* Distance codes 0..29 base */
|
||
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
|
||
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
|
||
8193, 12289, 16385, 24577, 0, 0
|
||
]);
|
||
|
||
const dext = new Uint8Array([ /* Distance codes 0..29 extra */
|
||
16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
|
||
23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
|
||
28, 28, 29, 29, 64, 64
|
||
]);
|
||
|
||
const inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>
|
||
{
|
||
const bits = opts.bits;
|
||
//here = opts.here; /* table entry for duplication */
|
||
|
||
let len = 0; /* a code's length in bits */
|
||
let sym = 0; /* index of code symbols */
|
||
let min = 0, max = 0; /* minimum and maximum code lengths */
|
||
let root = 0; /* number of index bits for root table */
|
||
let curr = 0; /* number of index bits for current table */
|
||
let drop = 0; /* code bits to drop for sub-table */
|
||
let left = 0; /* number of prefix codes available */
|
||
let used = 0; /* code entries in table used */
|
||
let huff = 0; /* Huffman code */
|
||
let incr; /* for incrementing code, index */
|
||
let fill; /* index for replicating entries */
|
||
let low; /* low bits for current root entry */
|
||
let mask; /* mask for low root bits */
|
||
let next; /* next available space in table */
|
||
let base = null; /* base value table to use */
|
||
let base_index = 0;
|
||
// let shoextra; /* extra bits table to use */
|
||
let end; /* use base and extra for symbol > end */
|
||
const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */
|
||
const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */
|
||
let extra = null;
|
||
let extra_index = 0;
|
||
|
||
let here_bits, here_op, here_val;
|
||
|
||
/*
|
||
Process a set of code lengths to create a canonical Huffman code. The
|
||
code lengths are lens[0..codes-1]. Each length corresponds to the
|
||
symbols 0..codes-1. The Huffman code is generated by first sorting the
|
||
symbols by length from short to long, and retaining the symbol order
|
||
for codes with equal lengths. Then the code starts with all zero bits
|
||
for the first code of the shortest length, and the codes are integer
|
||
increments for the same length, and zeros are appended as the length
|
||
increases. For the deflate format, these bits are stored backwards
|
||
from their more natural integer increment ordering, and so when the
|
||
decoding tables are built in the large loop below, the integer codes
|
||
are incremented backwards.
|
||
|
||
This routine assumes, but does not check, that all of the entries in
|
||
lens[] are in the range 0..MAXBITS. The caller must assure this.
|
||
1..MAXBITS is interpreted as that code length. zero means that that
|
||
symbol does not occur in this code.
|
||
|
||
The codes are sorted by computing a count of codes for each length,
|
||
creating from that a table of starting indices for each length in the
|
||
sorted table, and then entering the symbols in order in the sorted
|
||
table. The sorted table is work[], with that space being provided by
|
||
the caller.
|
||
|
||
The length counts are used for other purposes as well, i.e. finding
|
||
the minimum and maximum length codes, determining if there are any
|
||
codes at all, checking for a valid set of lengths, and looking ahead
|
||
at length counts to determine sub-table sizes when building the
|
||
decoding tables.
|
||
*/
|
||
|
||
/* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
|
||
for (len = 0; len <= MAXBITS; len++) {
|
||
count[len] = 0;
|
||
}
|
||
for (sym = 0; sym < codes; sym++) {
|
||
count[lens[lens_index + sym]]++;
|
||
}
|
||
|
||
/* bound code lengths, force root to be within code lengths */
|
||
root = bits;
|
||
for (max = MAXBITS; max >= 1; max--) {
|
||
if (count[max] !== 0) { break; }
|
||
}
|
||
if (root > max) {
|
||
root = max;
|
||
}
|
||
if (max === 0) { /* no symbols to code at all */
|
||
//table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */
|
||
//table.bits[opts.table_index] = 1; //here.bits = (var char)1;
|
||
//table.val[opts.table_index++] = 0; //here.val = (var short)0;
|
||
table[table_index++] = (1 << 24) | (64 << 16) | 0;
|
||
|
||
|
||
//table.op[opts.table_index] = 64;
|
||
//table.bits[opts.table_index] = 1;
|
||
//table.val[opts.table_index++] = 0;
|
||
table[table_index++] = (1 << 24) | (64 << 16) | 0;
|
||
|
||
opts.bits = 1;
|
||
return 0; /* no symbols, but wait for decoding to report error */
|
||
}
|
||
for (min = 1; min < max; min++) {
|
||
if (count[min] !== 0) { break; }
|
||
}
|
||
if (root < min) {
|
||
root = min;
|
||
}
|
||
|
||
/* check for an over-subscribed or incomplete set of lengths */
|
||
left = 1;
|
||
for (len = 1; len <= MAXBITS; len++) {
|
||
left <<= 1;
|
||
left -= count[len];
|
||
if (left < 0) {
|
||
return -1;
|
||
} /* over-subscribed */
|
||
}
|
||
if (left > 0 && (type === CODES$1 || max !== 1)) {
|
||
return -1; /* incomplete set */
|
||
}
|
||
|
||
/* generate offsets into symbol table for each length for sorting */
|
||
offs[1] = 0;
|
||
for (len = 1; len < MAXBITS; len++) {
|
||
offs[len + 1] = offs[len] + count[len];
|
||
}
|
||
|
||
/* sort symbols by length, by symbol order within each length */
|
||
for (sym = 0; sym < codes; sym++) {
|
||
if (lens[lens_index + sym] !== 0) {
|
||
work[offs[lens[lens_index + sym]]++] = sym;
|
||
}
|
||
}
|
||
|
||
/*
|
||
Create and fill in decoding tables. In this loop, the table being
|
||
filled is at next and has curr index bits. The code being used is huff
|
||
with length len. That code is converted to an index by dropping drop
|
||
bits off of the bottom. For codes where len is less than drop + curr,
|
||
those top drop + curr - len bits are incremented through all values to
|
||
fill the table with replicated entries.
|
||
|
||
root is the number of index bits for the root table. When len exceeds
|
||
root, sub-tables are created pointed to by the root entry with an index
|
||
of the low root bits of huff. This is saved in low to check for when a
|
||
new sub-table should be started. drop is zero when the root table is
|
||
being filled, and drop is root when sub-tables are being filled.
|
||
|
||
When a new sub-table is needed, it is necessary to look ahead in the
|
||
code lengths to determine what size sub-table is needed. The length
|
||
counts are used for this, and so count[] is decremented as codes are
|
||
entered in the tables.
|
||
|
||
used keeps track of how many table entries have been allocated from the
|
||
provided *table space. It is checked for LENS and DIST tables against
|
||
the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
|
||
the initial root table size constants. See the comments in inftrees.h
|
||
for more information.
|
||
|
||
sym increments through all symbols, and the loop terminates when
|
||
all codes of length max, i.e. all codes, have been processed. This
|
||
routine permits incomplete codes, so another loop after this one fills
|
||
in the rest of the decoding tables with invalid code markers.
|
||
*/
|
||
|
||
/* set up for code type */
|
||
// poor man optimization - use if-else instead of switch,
|
||
// to avoid deopts in old v8
|
||
if (type === CODES$1) {
|
||
base = extra = work; /* dummy value--not used */
|
||
end = 19;
|
||
|
||
} else if (type === LENS$1) {
|
||
base = lbase;
|
||
base_index -= 257;
|
||
extra = lext;
|
||
extra_index -= 257;
|
||
end = 256;
|
||
|
||
} else { /* DISTS */
|
||
base = dbase;
|
||
extra = dext;
|
||
end = -1;
|
||
}
|
||
|
||
/* initialize opts for loop */
|
||
huff = 0; /* starting code */
|
||
sym = 0; /* starting code symbol */
|
||
len = min; /* starting code length */
|
||
next = table_index; /* current table to fill in */
|
||
curr = root; /* current table index bits */
|
||
drop = 0; /* current bits to drop from code for index */
|
||
low = -1; /* trigger new sub-table when len > root */
|
||
used = 1 << root; /* use root table entries */
|
||
mask = used - 1; /* mask for comparing low */
|
||
|
||
/* check available table space */
|
||
if ((type === LENS$1 && used > ENOUGH_LENS$1) ||
|
||
(type === DISTS$1 && used > ENOUGH_DISTS$1)) {
|
||
return 1;
|
||
}
|
||
|
||
/* process all codes and make table entries */
|
||
for (;;) {
|
||
/* create table entry */
|
||
here_bits = len - drop;
|
||
if (work[sym] < end) {
|
||
here_op = 0;
|
||
here_val = work[sym];
|
||
}
|
||
else if (work[sym] > end) {
|
||
here_op = extra[extra_index + work[sym]];
|
||
here_val = base[base_index + work[sym]];
|
||
}
|
||
else {
|
||
here_op = 32 + 64; /* end of block */
|
||
here_val = 0;
|
||
}
|
||
|
||
/* replicate for those indices with low len bits equal to huff */
|
||
incr = 1 << (len - drop);
|
||
fill = 1 << curr;
|
||
min = fill; /* save offset to next table */
|
||
do {
|
||
fill -= incr;
|
||
table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
|
||
} while (fill !== 0);
|
||
|
||
/* backwards increment the len-bit code huff */
|
||
incr = 1 << (len - 1);
|
||
while (huff & incr) {
|
||
incr >>= 1;
|
||
}
|
||
if (incr !== 0) {
|
||
huff &= incr - 1;
|
||
huff += incr;
|
||
} else {
|
||
huff = 0;
|
||
}
|
||
|
||
/* go to next symbol, update count, len */
|
||
sym++;
|
||
if (--count[len] === 0) {
|
||
if (len === max) { break; }
|
||
len = lens[lens_index + work[sym]];
|
||
}
|
||
|
||
/* create new sub-table if needed */
|
||
if (len > root && (huff & mask) !== low) {
|
||
/* if first time, transition to sub-tables */
|
||
if (drop === 0) {
|
||
drop = root;
|
||
}
|
||
|
||
/* increment past last table */
|
||
next += min; /* here min is 1 << curr */
|
||
|
||
/* determine length of next table */
|
||
curr = len - drop;
|
||
left = 1 << curr;
|
||
while (curr + drop < max) {
|
||
left -= count[curr + drop];
|
||
if (left <= 0) { break; }
|
||
curr++;
|
||
left <<= 1;
|
||
}
|
||
|
||
/* check for enough space */
|
||
used += 1 << curr;
|
||
if ((type === LENS$1 && used > ENOUGH_LENS$1) ||
|
||
(type === DISTS$1 && used > ENOUGH_DISTS$1)) {
|
||
return 1;
|
||
}
|
||
|
||
/* point entry in root table to sub-table */
|
||
low = huff & mask;
|
||
/*table.op[low] = curr;
|
||
table.bits[low] = root;
|
||
table.val[low] = next - opts.table_index;*/
|
||
table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
|
||
}
|
||
}
|
||
|
||
/* fill in remaining table entry if code is incomplete (guaranteed to have
|
||
at most one remaining entry, since if the code is incomplete, the
|
||
maximum code length that was allowed to get this far is one bit) */
|
||
if (huff !== 0) {
|
||
//table.op[next + huff] = 64; /* invalid code marker */
|
||
//table.bits[next + huff] = len - drop;
|
||
//table.val[next + huff] = 0;
|
||
table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
|
||
}
|
||
|
||
/* set return parameters */
|
||
//opts.table_index += used;
|
||
opts.bits = root;
|
||
return 0;
|
||
};
|
||
|
||
|
||
var inftrees = inflate_table;
|
||
|
||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
||
//
|
||
// This software is provided 'as-is', without any express or implied
|
||
// warranty. In no event will the authors be held liable for any damages
|
||
// arising from the use of this software.
|
||
//
|
||
// Permission is granted to anyone to use this software for any purpose,
|
||
// including commercial applications, and to alter it and redistribute it
|
||
// freely, subject to the following restrictions:
|
||
//
|
||
// 1. The origin of this software must not be misrepresented; you must not
|
||
// claim that you wrote the original software. If you use this software
|
||
// in a product, an acknowledgment in the product documentation would be
|
||
// appreciated but is not required.
|
||
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
// misrepresented as being the original software.
|
||
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const CODES = 0;
|
||
const LENS = 1;
|
||
const DISTS = 2;
|
||
|
||
/* Public constants ==========================================================*/
|
||
/* ===========================================================================*/
|
||
|
||
const {
|
||
Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES,
|
||
Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR,
|
||
Z_DEFLATED
|
||
} = constants$2;
|
||
|
||
|
||
/* STATES ====================================================================*/
|
||
/* ===========================================================================*/
|
||
|
||
|
||
const HEAD = 1; /* i: waiting for magic header */
|
||
const FLAGS = 2; /* i: waiting for method and flags (gzip) */
|
||
const TIME = 3; /* i: waiting for modification time (gzip) */
|
||
const OS = 4; /* i: waiting for extra flags and operating system (gzip) */
|
||
const EXLEN = 5; /* i: waiting for extra length (gzip) */
|
||
const EXTRA = 6; /* i: waiting for extra bytes (gzip) */
|
||
const NAME = 7; /* i: waiting for end of file name (gzip) */
|
||
const COMMENT = 8; /* i: waiting for end of comment (gzip) */
|
||
const HCRC = 9; /* i: waiting for header crc (gzip) */
|
||
const DICTID = 10; /* i: waiting for dictionary check value */
|
||
const DICT = 11; /* waiting for inflateSetDictionary() call */
|
||
const TYPE = 12; /* i: waiting for type bits, including last-flag bit */
|
||
const TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */
|
||
const STORED = 14; /* i: waiting for stored size (length and complement) */
|
||
const COPY_ = 15; /* i/o: same as COPY below, but only first time in */
|
||
const COPY = 16; /* i/o: waiting for input or output to copy stored block */
|
||
const TABLE = 17; /* i: waiting for dynamic block table lengths */
|
||
const LENLENS = 18; /* i: waiting for code length code lengths */
|
||
const CODELENS = 19; /* i: waiting for length/lit and distance code lengths */
|
||
const LEN_ = 20; /* i: same as LEN below, but only first time in */
|
||
const LEN = 21; /* i: waiting for length/lit/eob code */
|
||
const LENEXT = 22; /* i: waiting for length extra bits */
|
||
const DIST = 23; /* i: waiting for distance code */
|
||
const DISTEXT = 24; /* i: waiting for distance extra bits */
|
||
const MATCH = 25; /* o: waiting for output space to copy string */
|
||
const LIT = 26; /* o: waiting for output space to write literal */
|
||
const CHECK = 27; /* i: waiting for 32-bit check value */
|
||
const LENGTH$2 = 28; /* i: waiting for 32-bit length (gzip) */
|
||
const DONE = 29; /* finished check, done -- remain here until reset */
|
||
const BAD = 30; /* got a data error -- remain here until reset */
|
||
const MEM = 31; /* got an inflate() memory error -- remain here until reset */
|
||
const SYNC = 32; /* looking for synchronization bytes to restart inflate() */
|
||
|
||
/* ===========================================================================*/
|
||
|
||
|
||
|
||
const ENOUGH_LENS = 852;
|
||
const ENOUGH_DISTS = 592;
|
||
//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
|
||
|
||
const MAX_WBITS = 15;
|
||
/* 32K LZ77 window */
|
||
const DEF_WBITS = MAX_WBITS;
|
||
|
||
|
||
const zswap32 = (q) => {
|
||
|
||
return (((q >>> 24) & 0xff) +
|
||
((q >>> 8) & 0xff00) +
|
||
((q & 0xff00) << 8) +
|
||
((q & 0xff) << 24));
|
||
};
|
||
|
||
|
||
function InflateState() {
|
||
this.mode = 0; /* current inflate mode */
|
||
this.last = false; /* true if processing last block */
|
||
this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
|
||
this.havedict = false; /* true if dictionary provided */
|
||
this.flags = 0; /* gzip header method and flags (0 if zlib) */
|
||
this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */
|
||
this.check = 0; /* protected copy of check value */
|
||
this.total = 0; /* protected copy of output count */
|
||
// TODO: may be {}
|
||
this.head = null; /* where to save gzip header information */
|
||
|
||
/* sliding window */
|
||
this.wbits = 0; /* log base 2 of requested window size */
|
||
this.wsize = 0; /* window size or zero if not using window */
|
||
this.whave = 0; /* valid bytes in the window */
|
||
this.wnext = 0; /* window write index */
|
||
this.window = null; /* allocated sliding window, if needed */
|
||
|
||
/* bit accumulator */
|
||
this.hold = 0; /* input bit accumulator */
|
||
this.bits = 0; /* number of bits in "in" */
|
||
|
||
/* for string and stored block copying */
|
||
this.length = 0; /* literal or length of data to copy */
|
||
this.offset = 0; /* distance back to copy string from */
|
||
|
||
/* for table and code decoding */
|
||
this.extra = 0; /* extra bits needed */
|
||
|
||
/* fixed and dynamic code tables */
|
||
this.lencode = null; /* starting table for length/literal codes */
|
||
this.distcode = null; /* starting table for distance codes */
|
||
this.lenbits = 0; /* index bits for lencode */
|
||
this.distbits = 0; /* index bits for distcode */
|
||
|
||
/* dynamic table building */
|
||
this.ncode = 0; /* number of code length code lengths */
|
||
this.nlen = 0; /* number of length code lengths */
|
||
this.ndist = 0; /* number of distance code lengths */
|
||
this.have = 0; /* number of code lengths in lens[] */
|
||
this.next = null; /* next available space in codes[] */
|
||
|
||
this.lens = new Uint16Array(320); /* temporary storage for code lengths */
|
||
this.work = new Uint16Array(288); /* work area for code table building */
|
||
|
||
/*
|
||
because we don't have pointers in js, we use lencode and distcode directly
|
||
as buffers so we don't need codes
|
||
*/
|
||
//this.codes = new Int32Array(ENOUGH); /* space for code tables */
|
||
this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */
|
||
this.distdyn = null; /* dynamic table for distance codes (JS specific) */
|
||
this.sane = 0; /* if false, allow invalid distance too far */
|
||
this.back = 0; /* bits back of last unprocessed length/lit */
|
||
this.was = 0; /* initial length of match */
|
||
}
|
||
|
||
|
||
const inflateResetKeep = (strm) => {
|
||
|
||
if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }
|
||
const state = strm.state;
|
||
strm.total_in = strm.total_out = state.total = 0;
|
||
strm.msg = ''; /*Z_NULL*/
|
||
if (state.wrap) { /* to support ill-conceived Java test suite */
|
||
strm.adler = state.wrap & 1;
|
||
}
|
||
state.mode = HEAD;
|
||
state.last = 0;
|
||
state.havedict = 0;
|
||
state.dmax = 32768;
|
||
state.head = null/*Z_NULL*/;
|
||
state.hold = 0;
|
||
state.bits = 0;
|
||
//state.lencode = state.distcode = state.next = state.codes;
|
||
state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);
|
||
state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);
|
||
|
||
state.sane = 1;
|
||
state.back = -1;
|
||
//Tracev((stderr, "inflate: reset\n"));
|
||
return Z_OK$1;
|
||
};
|
||
|
||
|
||
const inflateReset = (strm) => {
|
||
|
||
if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }
|
||
const state = strm.state;
|
||
state.wsize = 0;
|
||
state.whave = 0;
|
||
state.wnext = 0;
|
||
return inflateResetKeep(strm);
|
||
|
||
};
|
||
|
||
|
||
const inflateReset2 = (strm, windowBits) => {
|
||
let wrap;
|
||
|
||
/* get the state */
|
||
if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }
|
||
const state = strm.state;
|
||
|
||
/* extract wrap request from windowBits parameter */
|
||
if (windowBits < 0) {
|
||
wrap = 0;
|
||
windowBits = -windowBits;
|
||
}
|
||
else {
|
||
wrap = (windowBits >> 4) + 1;
|
||
if (windowBits < 48) {
|
||
windowBits &= 15;
|
||
}
|
||
}
|
||
|
||
/* set number of window bits, free window if different */
|
||
if (windowBits && (windowBits < 8 || windowBits > 15)) {
|
||
return Z_STREAM_ERROR$1;
|
||
}
|
||
if (state.window !== null && state.wbits !== windowBits) {
|
||
state.window = null;
|
||
}
|
||
|
||
/* update state and reset the rest of it */
|
||
state.wrap = wrap;
|
||
state.wbits = windowBits;
|
||
return inflateReset(strm);
|
||
};
|
||
|
||
|
||
const inflateInit2 = (strm, windowBits) => {
|
||
|
||
if (!strm) { return Z_STREAM_ERROR$1; }
|
||
//strm.msg = Z_NULL; /* in case we return an error */
|
||
|
||
const state = new InflateState();
|
||
|
||
//if (state === Z_NULL) return Z_MEM_ERROR;
|
||
//Tracev((stderr, "inflate: allocated\n"));
|
||
strm.state = state;
|
||
state.window = null/*Z_NULL*/;
|
||
const ret = inflateReset2(strm, windowBits);
|
||
if (ret !== Z_OK$1) {
|
||
strm.state = null/*Z_NULL*/;
|
||
}
|
||
return ret;
|
||
};
|
||
|
||
|
||
const inflateInit = (strm) => {
|
||
|
||
return inflateInit2(strm, DEF_WBITS);
|
||
};
|
||
|
||
|
||
/*
|
||
Return state with length and distance decoding tables and index sizes set to
|
||
fixed code decoding. Normally this returns fixed tables from inffixed.h.
|
||
If BUILDFIXED is defined, then instead this routine builds the tables the
|
||
first time it's called, and returns those tables the first time and
|
||
thereafter. This reduces the size of the code by about 2K bytes, in
|
||
exchange for a little execution time. However, BUILDFIXED should not be
|
||
used for threaded applications, since the rewriting of the tables and virgin
|
||
may not be thread-safe.
|
||
*/
|
||
let virgin = true;
|
||
|
||
let lenfix, distfix; // We have no pointers in JS, so keep tables separate
|
||
|
||
|
||
const fixedtables = (state) => {
|
||
|
||
/* build fixed huffman tables if first call (may not be thread safe) */
|
||
if (virgin) {
|
||
lenfix = new Int32Array(512);
|
||
distfix = new Int32Array(32);
|
||
|
||
/* literal/length table */
|
||
let sym = 0;
|
||
while (sym < 144) { state.lens[sym++] = 8; }
|
||
while (sym < 256) { state.lens[sym++] = 9; }
|
||
while (sym < 280) { state.lens[sym++] = 7; }
|
||
while (sym < 288) { state.lens[sym++] = 8; }
|
||
|
||
inftrees(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });
|
||
|
||
/* distance table */
|
||
sym = 0;
|
||
while (sym < 32) { state.lens[sym++] = 5; }
|
||
|
||
inftrees(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });
|
||
|
||
/* do this just once */
|
||
virgin = false;
|
||
}
|
||
|
||
state.lencode = lenfix;
|
||
state.lenbits = 9;
|
||
state.distcode = distfix;
|
||
state.distbits = 5;
|
||
};
|
||
|
||
|
||
/*
|
||
Update the window with the last wsize (normally 32K) bytes written before
|
||
returning. If window does not exist yet, create it. This is only called
|
||
when a window is already in use, or when output has been written during this
|
||
inflate call, but the end of the deflate stream has not been reached yet.
|
||
It is also called to create a window for dictionary data when a dictionary
|
||
is loaded.
|
||
|
||
Providing output buffers larger than 32K to inflate() should provide a speed
|
||
advantage, since only the last 32K of output is copied to the sliding window
|
||
upon return from inflate(), and since all distances after the first 32K of
|
||
output will fall in the output data, making match copies simpler and faster.
|
||
The advantage may be dependent on the size of the processor's data caches.
|
||
*/
|
||
const updatewindow = (strm, src, end, copy) => {
|
||
|
||
let dist;
|
||
const state = strm.state;
|
||
|
||
/* if it hasn't been done already, allocate space for the window */
|
||
if (state.window === null) {
|
||
state.wsize = 1 << state.wbits;
|
||
state.wnext = 0;
|
||
state.whave = 0;
|
||
|
||
state.window = new Uint8Array(state.wsize);
|
||
}
|
||
|
||
/* copy state->wsize or less output bytes into the circular window */
|
||
if (copy >= state.wsize) {
|
||
state.window.set(src.subarray(end - state.wsize, end), 0);
|
||
state.wnext = 0;
|
||
state.whave = state.wsize;
|
||
}
|
||
else {
|
||
dist = state.wsize - state.wnext;
|
||
if (dist > copy) {
|
||
dist = copy;
|
||
}
|
||
//zmemcpy(state->window + state->wnext, end - copy, dist);
|
||
state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);
|
||
copy -= dist;
|
||
if (copy) {
|
||
//zmemcpy(state->window, end - copy, copy);
|
||
state.window.set(src.subarray(end - copy, end), 0);
|
||
state.wnext = copy;
|
||
state.whave = state.wsize;
|
||
}
|
||
else {
|
||
state.wnext += dist;
|
||
if (state.wnext === state.wsize) { state.wnext = 0; }
|
||
if (state.whave < state.wsize) { state.whave += dist; }
|
||
}
|
||
}
|
||
return 0;
|
||
};
|
||
|
||
|
||
const inflate$2 = (strm, flush) => {
|
||
|
||
let state;
|
||
let input, output; // input/output buffers
|
||
let next; /* next input INDEX */
|
||
let put; /* next output INDEX */
|
||
let have, left; /* available input and output */
|
||
let hold; /* bit buffer */
|
||
let bits; /* bits in bit buffer */
|
||
let _in, _out; /* save starting available input and output */
|
||
let copy; /* number of stored or match bytes to copy */
|
||
let from; /* where to copy match bytes from */
|
||
let from_source;
|
||
let here = 0; /* current decoding table entry */
|
||
let here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
|
||
//let last; /* parent table entry */
|
||
let last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
|
||
let len; /* length to copy for repeats, bits to drop */
|
||
let ret; /* return code */
|
||
const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */
|
||
let opts;
|
||
|
||
let n; // temporary variable for NEED_BITS
|
||
|
||
const order = /* permutation of code lengths */
|
||
new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);
|
||
|
||
|
||
if (!strm || !strm.state || !strm.output ||
|
||
(!strm.input && strm.avail_in !== 0)) {
|
||
return Z_STREAM_ERROR$1;
|
||
}
|
||
|
||
state = strm.state;
|
||
if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */
|
||
|
||
|
||
//--- LOAD() ---
|
||
put = strm.next_out;
|
||
output = strm.output;
|
||
left = strm.avail_out;
|
||
next = strm.next_in;
|
||
input = strm.input;
|
||
have = strm.avail_in;
|
||
hold = state.hold;
|
||
bits = state.bits;
|
||
//---
|
||
|
||
_in = have;
|
||
_out = left;
|
||
ret = Z_OK$1;
|
||
|
||
inf_leave: // goto emulation
|
||
for (;;) {
|
||
switch (state.mode) {
|
||
case HEAD:
|
||
if (state.wrap === 0) {
|
||
state.mode = TYPEDO;
|
||
break;
|
||
}
|
||
//=== NEEDBITS(16);
|
||
while (bits < 16) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */
|
||
state.check = 0/*crc32(0L, Z_NULL, 0)*/;
|
||
//=== CRC2(state.check, hold);
|
||
hbuf[0] = hold & 0xff;
|
||
hbuf[1] = (hold >>> 8) & 0xff;
|
||
state.check = crc32_1(state.check, hbuf, 2, 0);
|
||
//===//
|
||
|
||
//=== INITBITS();
|
||
hold = 0;
|
||
bits = 0;
|
||
//===//
|
||
state.mode = FLAGS;
|
||
break;
|
||
}
|
||
state.flags = 0; /* expect zlib header */
|
||
if (state.head) {
|
||
state.head.done = false;
|
||
}
|
||
if (!(state.wrap & 1) || /* check if zlib header allowed */
|
||
(((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
|
||
strm.msg = 'incorrect header check';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
|
||
strm.msg = 'unknown compression method';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
//--- DROPBITS(4) ---//
|
||
hold >>>= 4;
|
||
bits -= 4;
|
||
//---//
|
||
len = (hold & 0x0f)/*BITS(4)*/ + 8;
|
||
if (state.wbits === 0) {
|
||
state.wbits = len;
|
||
}
|
||
else if (len > state.wbits) {
|
||
strm.msg = 'invalid window size';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
|
||
// !!! pako patch. Force use `options.windowBits` if passed.
|
||
// Required to always use max window size by default.
|
||
state.dmax = 1 << state.wbits;
|
||
//state.dmax = 1 << len;
|
||
|
||
//Tracev((stderr, "inflate: zlib header ok\n"));
|
||
strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
|
||
state.mode = hold & 0x200 ? DICTID : TYPE;
|
||
//=== INITBITS();
|
||
hold = 0;
|
||
bits = 0;
|
||
//===//
|
||
break;
|
||
case FLAGS:
|
||
//=== NEEDBITS(16); */
|
||
while (bits < 16) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
state.flags = hold;
|
||
if ((state.flags & 0xff) !== Z_DEFLATED) {
|
||
strm.msg = 'unknown compression method';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
if (state.flags & 0xe000) {
|
||
strm.msg = 'unknown header flags set';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
if (state.head) {
|
||
state.head.text = ((hold >> 8) & 1);
|
||
}
|
||
if (state.flags & 0x0200) {
|
||
//=== CRC2(state.check, hold);
|
||
hbuf[0] = hold & 0xff;
|
||
hbuf[1] = (hold >>> 8) & 0xff;
|
||
state.check = crc32_1(state.check, hbuf, 2, 0);
|
||
//===//
|
||
}
|
||
//=== INITBITS();
|
||
hold = 0;
|
||
bits = 0;
|
||
//===//
|
||
state.mode = TIME;
|
||
/* falls through */
|
||
case TIME:
|
||
//=== NEEDBITS(32); */
|
||
while (bits < 32) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
if (state.head) {
|
||
state.head.time = hold;
|
||
}
|
||
if (state.flags & 0x0200) {
|
||
//=== CRC4(state.check, hold)
|
||
hbuf[0] = hold & 0xff;
|
||
hbuf[1] = (hold >>> 8) & 0xff;
|
||
hbuf[2] = (hold >>> 16) & 0xff;
|
||
hbuf[3] = (hold >>> 24) & 0xff;
|
||
state.check = crc32_1(state.check, hbuf, 4, 0);
|
||
//===
|
||
}
|
||
//=== INITBITS();
|
||
hold = 0;
|
||
bits = 0;
|
||
//===//
|
||
state.mode = OS;
|
||
/* falls through */
|
||
case OS:
|
||
//=== NEEDBITS(16); */
|
||
while (bits < 16) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
if (state.head) {
|
||
state.head.xflags = (hold & 0xff);
|
||
state.head.os = (hold >> 8);
|
||
}
|
||
if (state.flags & 0x0200) {
|
||
//=== CRC2(state.check, hold);
|
||
hbuf[0] = hold & 0xff;
|
||
hbuf[1] = (hold >>> 8) & 0xff;
|
||
state.check = crc32_1(state.check, hbuf, 2, 0);
|
||
//===//
|
||
}
|
||
//=== INITBITS();
|
||
hold = 0;
|
||
bits = 0;
|
||
//===//
|
||
state.mode = EXLEN;
|
||
/* falls through */
|
||
case EXLEN:
|
||
if (state.flags & 0x0400) {
|
||
//=== NEEDBITS(16); */
|
||
while (bits < 16) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
state.length = hold;
|
||
if (state.head) {
|
||
state.head.extra_len = hold;
|
||
}
|
||
if (state.flags & 0x0200) {
|
||
//=== CRC2(state.check, hold);
|
||
hbuf[0] = hold & 0xff;
|
||
hbuf[1] = (hold >>> 8) & 0xff;
|
||
state.check = crc32_1(state.check, hbuf, 2, 0);
|
||
//===//
|
||
}
|
||
//=== INITBITS();
|
||
hold = 0;
|
||
bits = 0;
|
||
//===//
|
||
}
|
||
else if (state.head) {
|
||
state.head.extra = null/*Z_NULL*/;
|
||
}
|
||
state.mode = EXTRA;
|
||
/* falls through */
|
||
case EXTRA:
|
||
if (state.flags & 0x0400) {
|
||
copy = state.length;
|
||
if (copy > have) { copy = have; }
|
||
if (copy) {
|
||
if (state.head) {
|
||
len = state.head.extra_len - state.length;
|
||
if (!state.head.extra) {
|
||
// Use untyped array for more convenient processing later
|
||
state.head.extra = new Uint8Array(state.head.extra_len);
|
||
}
|
||
state.head.extra.set(
|
||
input.subarray(
|
||
next,
|
||
// extra field is limited to 65536 bytes
|
||
// - no need for additional size check
|
||
next + copy
|
||
),
|
||
/*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
|
||
len
|
||
);
|
||
//zmemcpy(state.head.extra + len, next,
|
||
// len + copy > state.head.extra_max ?
|
||
// state.head.extra_max - len : copy);
|
||
}
|
||
if (state.flags & 0x0200) {
|
||
state.check = crc32_1(state.check, input, copy, next);
|
||
}
|
||
have -= copy;
|
||
next += copy;
|
||
state.length -= copy;
|
||
}
|
||
if (state.length) { break inf_leave; }
|
||
}
|
||
state.length = 0;
|
||
state.mode = NAME;
|
||
/* falls through */
|
||
case NAME:
|
||
if (state.flags & 0x0800) {
|
||
if (have === 0) { break inf_leave; }
|
||
copy = 0;
|
||
do {
|
||
// TODO: 2 or 1 bytes?
|
||
len = input[next + copy++];
|
||
/* use constant limit because in js we should not preallocate memory */
|
||
if (state.head && len &&
|
||
(state.length < 65536 /*state.head.name_max*/)) {
|
||
state.head.name += String.fromCharCode(len);
|
||
}
|
||
} while (len && copy < have);
|
||
|
||
if (state.flags & 0x0200) {
|
||
state.check = crc32_1(state.check, input, copy, next);
|
||
}
|
||
have -= copy;
|
||
next += copy;
|
||
if (len) { break inf_leave; }
|
||
}
|
||
else if (state.head) {
|
||
state.head.name = null;
|
||
}
|
||
state.length = 0;
|
||
state.mode = COMMENT;
|
||
/* falls through */
|
||
case COMMENT:
|
||
if (state.flags & 0x1000) {
|
||
if (have === 0) { break inf_leave; }
|
||
copy = 0;
|
||
do {
|
||
len = input[next + copy++];
|
||
/* use constant limit because in js we should not preallocate memory */
|
||
if (state.head && len &&
|
||
(state.length < 65536 /*state.head.comm_max*/)) {
|
||
state.head.comment += String.fromCharCode(len);
|
||
}
|
||
} while (len && copy < have);
|
||
if (state.flags & 0x0200) {
|
||
state.check = crc32_1(state.check, input, copy, next);
|
||
}
|
||
have -= copy;
|
||
next += copy;
|
||
if (len) { break inf_leave; }
|
||
}
|
||
else if (state.head) {
|
||
state.head.comment = null;
|
||
}
|
||
state.mode = HCRC;
|
||
/* falls through */
|
||
case HCRC:
|
||
if (state.flags & 0x0200) {
|
||
//=== NEEDBITS(16); */
|
||
while (bits < 16) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
if (hold !== (state.check & 0xffff)) {
|
||
strm.msg = 'header crc mismatch';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
//=== INITBITS();
|
||
hold = 0;
|
||
bits = 0;
|
||
//===//
|
||
}
|
||
if (state.head) {
|
||
state.head.hcrc = ((state.flags >> 9) & 1);
|
||
state.head.done = true;
|
||
}
|
||
strm.adler = state.check = 0;
|
||
state.mode = TYPE;
|
||
break;
|
||
case DICTID:
|
||
//=== NEEDBITS(32); */
|
||
while (bits < 32) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
strm.adler = state.check = zswap32(hold);
|
||
//=== INITBITS();
|
||
hold = 0;
|
||
bits = 0;
|
||
//===//
|
||
state.mode = DICT;
|
||
/* falls through */
|
||
case DICT:
|
||
if (state.havedict === 0) {
|
||
//--- RESTORE() ---
|
||
strm.next_out = put;
|
||
strm.avail_out = left;
|
||
strm.next_in = next;
|
||
strm.avail_in = have;
|
||
state.hold = hold;
|
||
state.bits = bits;
|
||
//---
|
||
return Z_NEED_DICT$1;
|
||
}
|
||
strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
|
||
state.mode = TYPE;
|
||
/* falls through */
|
||
case TYPE:
|
||
if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
|
||
/* falls through */
|
||
case TYPEDO:
|
||
if (state.last) {
|
||
//--- BYTEBITS() ---//
|
||
hold >>>= bits & 7;
|
||
bits -= bits & 7;
|
||
//---//
|
||
state.mode = CHECK;
|
||
break;
|
||
}
|
||
//=== NEEDBITS(3); */
|
||
while (bits < 3) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
state.last = (hold & 0x01)/*BITS(1)*/;
|
||
//--- DROPBITS(1) ---//
|
||
hold >>>= 1;
|
||
bits -= 1;
|
||
//---//
|
||
|
||
switch ((hold & 0x03)/*BITS(2)*/) {
|
||
case 0: /* stored block */
|
||
//Tracev((stderr, "inflate: stored block%s\n",
|
||
// state.last ? " (last)" : ""));
|
||
state.mode = STORED;
|
||
break;
|
||
case 1: /* fixed block */
|
||
fixedtables(state);
|
||
//Tracev((stderr, "inflate: fixed codes block%s\n",
|
||
// state.last ? " (last)" : ""));
|
||
state.mode = LEN_; /* decode codes */
|
||
if (flush === Z_TREES) {
|
||
//--- DROPBITS(2) ---//
|
||
hold >>>= 2;
|
||
bits -= 2;
|
||
//---//
|
||
break inf_leave;
|
||
}
|
||
break;
|
||
case 2: /* dynamic block */
|
||
//Tracev((stderr, "inflate: dynamic codes block%s\n",
|
||
// state.last ? " (last)" : ""));
|
||
state.mode = TABLE;
|
||
break;
|
||
case 3:
|
||
strm.msg = 'invalid block type';
|
||
state.mode = BAD;
|
||
}
|
||
//--- DROPBITS(2) ---//
|
||
hold >>>= 2;
|
||
bits -= 2;
|
||
//---//
|
||
break;
|
||
case STORED:
|
||
//--- BYTEBITS() ---// /* go to byte boundary */
|
||
hold >>>= bits & 7;
|
||
bits -= bits & 7;
|
||
//---//
|
||
//=== NEEDBITS(32); */
|
||
while (bits < 32) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
|
||
strm.msg = 'invalid stored block lengths';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
state.length = hold & 0xffff;
|
||
//Tracev((stderr, "inflate: stored length %u\n",
|
||
// state.length));
|
||
//=== INITBITS();
|
||
hold = 0;
|
||
bits = 0;
|
||
//===//
|
||
state.mode = COPY_;
|
||
if (flush === Z_TREES) { break inf_leave; }
|
||
/* falls through */
|
||
case COPY_:
|
||
state.mode = COPY;
|
||
/* falls through */
|
||
case COPY:
|
||
copy = state.length;
|
||
if (copy) {
|
||
if (copy > have) { copy = have; }
|
||
if (copy > left) { copy = left; }
|
||
if (copy === 0) { break inf_leave; }
|
||
//--- zmemcpy(put, next, copy); ---
|
||
output.set(input.subarray(next, next + copy), put);
|
||
//---//
|
||
have -= copy;
|
||
next += copy;
|
||
left -= copy;
|
||
put += copy;
|
||
state.length -= copy;
|
||
break;
|
||
}
|
||
//Tracev((stderr, "inflate: stored end\n"));
|
||
state.mode = TYPE;
|
||
break;
|
||
case TABLE:
|
||
//=== NEEDBITS(14); */
|
||
while (bits < 14) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
|
||
//--- DROPBITS(5) ---//
|
||
hold >>>= 5;
|
||
bits -= 5;
|
||
//---//
|
||
state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
|
||
//--- DROPBITS(5) ---//
|
||
hold >>>= 5;
|
||
bits -= 5;
|
||
//---//
|
||
state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
|
||
//--- DROPBITS(4) ---//
|
||
hold >>>= 4;
|
||
bits -= 4;
|
||
//---//
|
||
//#ifndef PKZIP_BUG_WORKAROUND
|
||
if (state.nlen > 286 || state.ndist > 30) {
|
||
strm.msg = 'too many length or distance symbols';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
//#endif
|
||
//Tracev((stderr, "inflate: table sizes ok\n"));
|
||
state.have = 0;
|
||
state.mode = LENLENS;
|
||
/* falls through */
|
||
case LENLENS:
|
||
while (state.have < state.ncode) {
|
||
//=== NEEDBITS(3);
|
||
while (bits < 3) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
|
||
//--- DROPBITS(3) ---//
|
||
hold >>>= 3;
|
||
bits -= 3;
|
||
//---//
|
||
}
|
||
while (state.have < 19) {
|
||
state.lens[order[state.have++]] = 0;
|
||
}
|
||
// We have separate tables & no pointers. 2 commented lines below not needed.
|
||
//state.next = state.codes;
|
||
//state.lencode = state.next;
|
||
// Switch to use dynamic table
|
||
state.lencode = state.lendyn;
|
||
state.lenbits = 7;
|
||
|
||
opts = { bits: state.lenbits };
|
||
ret = inftrees(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
|
||
state.lenbits = opts.bits;
|
||
|
||
if (ret) {
|
||
strm.msg = 'invalid code lengths set';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
//Tracev((stderr, "inflate: code lengths ok\n"));
|
||
state.have = 0;
|
||
state.mode = CODELENS;
|
||
/* falls through */
|
||
case CODELENS:
|
||
while (state.have < state.nlen + state.ndist) {
|
||
for (;;) {
|
||
here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
|
||
here_bits = here >>> 24;
|
||
here_op = (here >>> 16) & 0xff;
|
||
here_val = here & 0xffff;
|
||
|
||
if ((here_bits) <= bits) { break; }
|
||
//--- PULLBYTE() ---//
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
//---//
|
||
}
|
||
if (here_val < 16) {
|
||
//--- DROPBITS(here.bits) ---//
|
||
hold >>>= here_bits;
|
||
bits -= here_bits;
|
||
//---//
|
||
state.lens[state.have++] = here_val;
|
||
}
|
||
else {
|
||
if (here_val === 16) {
|
||
//=== NEEDBITS(here.bits + 2);
|
||
n = here_bits + 2;
|
||
while (bits < n) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
//--- DROPBITS(here.bits) ---//
|
||
hold >>>= here_bits;
|
||
bits -= here_bits;
|
||
//---//
|
||
if (state.have === 0) {
|
||
strm.msg = 'invalid bit length repeat';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
len = state.lens[state.have - 1];
|
||
copy = 3 + (hold & 0x03);//BITS(2);
|
||
//--- DROPBITS(2) ---//
|
||
hold >>>= 2;
|
||
bits -= 2;
|
||
//---//
|
||
}
|
||
else if (here_val === 17) {
|
||
//=== NEEDBITS(here.bits + 3);
|
||
n = here_bits + 3;
|
||
while (bits < n) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
//--- DROPBITS(here.bits) ---//
|
||
hold >>>= here_bits;
|
||
bits -= here_bits;
|
||
//---//
|
||
len = 0;
|
||
copy = 3 + (hold & 0x07);//BITS(3);
|
||
//--- DROPBITS(3) ---//
|
||
hold >>>= 3;
|
||
bits -= 3;
|
||
//---//
|
||
}
|
||
else {
|
||
//=== NEEDBITS(here.bits + 7);
|
||
n = here_bits + 7;
|
||
while (bits < n) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
//--- DROPBITS(here.bits) ---//
|
||
hold >>>= here_bits;
|
||
bits -= here_bits;
|
||
//---//
|
||
len = 0;
|
||
copy = 11 + (hold & 0x7f);//BITS(7);
|
||
//--- DROPBITS(7) ---//
|
||
hold >>>= 7;
|
||
bits -= 7;
|
||
//---//
|
||
}
|
||
if (state.have + copy > state.nlen + state.ndist) {
|
||
strm.msg = 'invalid bit length repeat';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
while (copy--) {
|
||
state.lens[state.have++] = len;
|
||
}
|
||
}
|
||
}
|
||
|
||
/* handle error breaks in while */
|
||
if (state.mode === BAD) { break; }
|
||
|
||
/* check for end-of-block code (better have one) */
|
||
if (state.lens[256] === 0) {
|
||
strm.msg = 'invalid code -- missing end-of-block';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
|
||
/* build code tables -- note: do not change the lenbits or distbits
|
||
values here (9 and 6) without reading the comments in inftrees.h
|
||
concerning the ENOUGH constants, which depend on those values */
|
||
state.lenbits = 9;
|
||
|
||
opts = { bits: state.lenbits };
|
||
ret = inftrees(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
|
||
// We have separate tables & no pointers. 2 commented lines below not needed.
|
||
// state.next_index = opts.table_index;
|
||
state.lenbits = opts.bits;
|
||
// state.lencode = state.next;
|
||
|
||
if (ret) {
|
||
strm.msg = 'invalid literal/lengths set';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
|
||
state.distbits = 6;
|
||
//state.distcode.copy(state.codes);
|
||
// Switch to use dynamic table
|
||
state.distcode = state.distdyn;
|
||
opts = { bits: state.distbits };
|
||
ret = inftrees(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
|
||
// We have separate tables & no pointers. 2 commented lines below not needed.
|
||
// state.next_index = opts.table_index;
|
||
state.distbits = opts.bits;
|
||
// state.distcode = state.next;
|
||
|
||
if (ret) {
|
||
strm.msg = 'invalid distances set';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
//Tracev((stderr, 'inflate: codes ok\n'));
|
||
state.mode = LEN_;
|
||
if (flush === Z_TREES) { break inf_leave; }
|
||
/* falls through */
|
||
case LEN_:
|
||
state.mode = LEN;
|
||
/* falls through */
|
||
case LEN:
|
||
if (have >= 6 && left >= 258) {
|
||
//--- RESTORE() ---
|
||
strm.next_out = put;
|
||
strm.avail_out = left;
|
||
strm.next_in = next;
|
||
strm.avail_in = have;
|
||
state.hold = hold;
|
||
state.bits = bits;
|
||
//---
|
||
inffast(strm, _out);
|
||
//--- LOAD() ---
|
||
put = strm.next_out;
|
||
output = strm.output;
|
||
left = strm.avail_out;
|
||
next = strm.next_in;
|
||
input = strm.input;
|
||
have = strm.avail_in;
|
||
hold = state.hold;
|
||
bits = state.bits;
|
||
//---
|
||
|
||
if (state.mode === TYPE) {
|
||
state.back = -1;
|
||
}
|
||
break;
|
||
}
|
||
state.back = 0;
|
||
for (;;) {
|
||
here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/
|
||
here_bits = here >>> 24;
|
||
here_op = (here >>> 16) & 0xff;
|
||
here_val = here & 0xffff;
|
||
|
||
if (here_bits <= bits) { break; }
|
||
//--- PULLBYTE() ---//
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
//---//
|
||
}
|
||
if (here_op && (here_op & 0xf0) === 0) {
|
||
last_bits = here_bits;
|
||
last_op = here_op;
|
||
last_val = here_val;
|
||
for (;;) {
|
||
here = state.lencode[last_val +
|
||
((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
|
||
here_bits = here >>> 24;
|
||
here_op = (here >>> 16) & 0xff;
|
||
here_val = here & 0xffff;
|
||
|
||
if ((last_bits + here_bits) <= bits) { break; }
|
||
//--- PULLBYTE() ---//
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
//---//
|
||
}
|
||
//--- DROPBITS(last.bits) ---//
|
||
hold >>>= last_bits;
|
||
bits -= last_bits;
|
||
//---//
|
||
state.back += last_bits;
|
||
}
|
||
//--- DROPBITS(here.bits) ---//
|
||
hold >>>= here_bits;
|
||
bits -= here_bits;
|
||
//---//
|
||
state.back += here_bits;
|
||
state.length = here_val;
|
||
if (here_op === 0) {
|
||
//Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
|
||
// "inflate: literal '%c'\n" :
|
||
// "inflate: literal 0x%02x\n", here.val));
|
||
state.mode = LIT;
|
||
break;
|
||
}
|
||
if (here_op & 32) {
|
||
//Tracevv((stderr, "inflate: end of block\n"));
|
||
state.back = -1;
|
||
state.mode = TYPE;
|
||
break;
|
||
}
|
||
if (here_op & 64) {
|
||
strm.msg = 'invalid literal/length code';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
state.extra = here_op & 15;
|
||
state.mode = LENEXT;
|
||
/* falls through */
|
||
case LENEXT:
|
||
if (state.extra) {
|
||
//=== NEEDBITS(state.extra);
|
||
n = state.extra;
|
||
while (bits < n) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
|
||
//--- DROPBITS(state.extra) ---//
|
||
hold >>>= state.extra;
|
||
bits -= state.extra;
|
||
//---//
|
||
state.back += state.extra;
|
||
}
|
||
//Tracevv((stderr, "inflate: length %u\n", state.length));
|
||
state.was = state.length;
|
||
state.mode = DIST;
|
||
/* falls through */
|
||
case DIST:
|
||
for (;;) {
|
||
here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/
|
||
here_bits = here >>> 24;
|
||
here_op = (here >>> 16) & 0xff;
|
||
here_val = here & 0xffff;
|
||
|
||
if ((here_bits) <= bits) { break; }
|
||
//--- PULLBYTE() ---//
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
//---//
|
||
}
|
||
if ((here_op & 0xf0) === 0) {
|
||
last_bits = here_bits;
|
||
last_op = here_op;
|
||
last_val = here_val;
|
||
for (;;) {
|
||
here = state.distcode[last_val +
|
||
((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
|
||
here_bits = here >>> 24;
|
||
here_op = (here >>> 16) & 0xff;
|
||
here_val = here & 0xffff;
|
||
|
||
if ((last_bits + here_bits) <= bits) { break; }
|
||
//--- PULLBYTE() ---//
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
//---//
|
||
}
|
||
//--- DROPBITS(last.bits) ---//
|
||
hold >>>= last_bits;
|
||
bits -= last_bits;
|
||
//---//
|
||
state.back += last_bits;
|
||
}
|
||
//--- DROPBITS(here.bits) ---//
|
||
hold >>>= here_bits;
|
||
bits -= here_bits;
|
||
//---//
|
||
state.back += here_bits;
|
||
if (here_op & 64) {
|
||
strm.msg = 'invalid distance code';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
state.offset = here_val;
|
||
state.extra = (here_op) & 15;
|
||
state.mode = DISTEXT;
|
||
/* falls through */
|
||
case DISTEXT:
|
||
if (state.extra) {
|
||
//=== NEEDBITS(state.extra);
|
||
n = state.extra;
|
||
while (bits < n) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
|
||
//--- DROPBITS(state.extra) ---//
|
||
hold >>>= state.extra;
|
||
bits -= state.extra;
|
||
//---//
|
||
state.back += state.extra;
|
||
}
|
||
//#ifdef INFLATE_STRICT
|
||
if (state.offset > state.dmax) {
|
||
strm.msg = 'invalid distance too far back';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
//#endif
|
||
//Tracevv((stderr, "inflate: distance %u\n", state.offset));
|
||
state.mode = MATCH;
|
||
/* falls through */
|
||
case MATCH:
|
||
if (left === 0) { break inf_leave; }
|
||
copy = _out - left;
|
||
if (state.offset > copy) { /* copy from window */
|
||
copy = state.offset - copy;
|
||
if (copy > state.whave) {
|
||
if (state.sane) {
|
||
strm.msg = 'invalid distance too far back';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
// (!) This block is disabled in zlib defaults,
|
||
// don't enable it for binary compatibility
|
||
//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
|
||
// Trace((stderr, "inflate.c too far\n"));
|
||
// copy -= state.whave;
|
||
// if (copy > state.length) { copy = state.length; }
|
||
// if (copy > left) { copy = left; }
|
||
// left -= copy;
|
||
// state.length -= copy;
|
||
// do {
|
||
// output[put++] = 0;
|
||
// } while (--copy);
|
||
// if (state.length === 0) { state.mode = LEN; }
|
||
// break;
|
||
//#endif
|
||
}
|
||
if (copy > state.wnext) {
|
||
copy -= state.wnext;
|
||
from = state.wsize - copy;
|
||
}
|
||
else {
|
||
from = state.wnext - copy;
|
||
}
|
||
if (copy > state.length) { copy = state.length; }
|
||
from_source = state.window;
|
||
}
|
||
else { /* copy from output */
|
||
from_source = output;
|
||
from = put - state.offset;
|
||
copy = state.length;
|
||
}
|
||
if (copy > left) { copy = left; }
|
||
left -= copy;
|
||
state.length -= copy;
|
||
do {
|
||
output[put++] = from_source[from++];
|
||
} while (--copy);
|
||
if (state.length === 0) { state.mode = LEN; }
|
||
break;
|
||
case LIT:
|
||
if (left === 0) { break inf_leave; }
|
||
output[put++] = state.length;
|
||
left--;
|
||
state.mode = LEN;
|
||
break;
|
||
case CHECK:
|
||
if (state.wrap) {
|
||
//=== NEEDBITS(32);
|
||
while (bits < 32) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
// Use '|' instead of '+' to make sure that result is signed
|
||
hold |= input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
_out -= left;
|
||
strm.total_out += _out;
|
||
state.total += _out;
|
||
if (_out) {
|
||
strm.adler = state.check =
|
||
/*UPDATE(state.check, put - _out, _out);*/
|
||
(state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out));
|
||
|
||
}
|
||
_out = left;
|
||
// NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
|
||
if ((state.flags ? hold : zswap32(hold)) !== state.check) {
|
||
strm.msg = 'incorrect data check';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
//=== INITBITS();
|
||
hold = 0;
|
||
bits = 0;
|
||
//===//
|
||
//Tracev((stderr, "inflate: check matches trailer\n"));
|
||
}
|
||
state.mode = LENGTH$2;
|
||
/* falls through */
|
||
case LENGTH$2:
|
||
if (state.wrap && state.flags) {
|
||
//=== NEEDBITS(32);
|
||
while (bits < 32) {
|
||
if (have === 0) { break inf_leave; }
|
||
have--;
|
||
hold += input[next++] << bits;
|
||
bits += 8;
|
||
}
|
||
//===//
|
||
if (hold !== (state.total & 0xffffffff)) {
|
||
strm.msg = 'incorrect length check';
|
||
state.mode = BAD;
|
||
break;
|
||
}
|
||
//=== INITBITS();
|
||
hold = 0;
|
||
bits = 0;
|
||
//===//
|
||
//Tracev((stderr, "inflate: length matches trailer\n"));
|
||
}
|
||
state.mode = DONE;
|
||
/* falls through */
|
||
case DONE:
|
||
ret = Z_STREAM_END$1;
|
||
break inf_leave;
|
||
case BAD:
|
||
ret = Z_DATA_ERROR$1;
|
||
break inf_leave;
|
||
case MEM:
|
||
return Z_MEM_ERROR$1;
|
||
case SYNC:
|
||
/* falls through */
|
||
default:
|
||
return Z_STREAM_ERROR$1;
|
||
}
|
||
}
|
||
|
||
// inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
|
||
|
||
/*
|
||
Return from inflate(), updating the total counts and the check value.
|
||
If there was no progress during the inflate() call, return a buffer
|
||
error. Call updatewindow() to create and/or update the window state.
|
||
Note: a memory error from inflate() is non-recoverable.
|
||
*/
|
||
|
||
//--- RESTORE() ---
|
||
strm.next_out = put;
|
||
strm.avail_out = left;
|
||
strm.next_in = next;
|
||
strm.avail_in = have;
|
||
state.hold = hold;
|
||
state.bits = bits;
|
||
//---
|
||
|
||
if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
|
||
(state.mode < CHECK || flush !== Z_FINISH$1))) {
|
||
if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;
|
||
}
|
||
_in -= strm.avail_in;
|
||
_out -= strm.avail_out;
|
||
strm.total_in += _in;
|
||
strm.total_out += _out;
|
||
state.total += _out;
|
||
if (state.wrap && _out) {
|
||
strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
|
||
(state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out));
|
||
}
|
||
strm.data_type = state.bits + (state.last ? 64 : 0) +
|
||
(state.mode === TYPE ? 128 : 0) +
|
||
(state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
|
||
if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {
|
||
ret = Z_BUF_ERROR;
|
||
}
|
||
return ret;
|
||
};
|
||
|
||
|
||
const inflateEnd = (strm) => {
|
||
|
||
if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
|
||
return Z_STREAM_ERROR$1;
|
||
}
|
||
|
||
let state = strm.state;
|
||
if (state.window) {
|
||
state.window = null;
|
||
}
|
||
strm.state = null;
|
||
return Z_OK$1;
|
||
};
|
||
|
||
|
||
const inflateGetHeader = (strm, head) => {
|
||
|
||
/* check state */
|
||
if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }
|
||
const state = strm.state;
|
||
if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }
|
||
|
||
/* save header structure */
|
||
state.head = head;
|
||
head.done = false;
|
||
return Z_OK$1;
|
||
};
|
||
|
||
|
||
const inflateSetDictionary = (strm, dictionary) => {
|
||
const dictLength = dictionary.length;
|
||
|
||
let state;
|
||
let dictid;
|
||
let ret;
|
||
|
||
/* check state */
|
||
if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR$1; }
|
||
state = strm.state;
|
||
|
||
if (state.wrap !== 0 && state.mode !== DICT) {
|
||
return Z_STREAM_ERROR$1;
|
||
}
|
||
|
||
/* check for correct dictionary identifier */
|
||
if (state.mode === DICT) {
|
||
dictid = 1; /* adler32(0, null, 0)*/
|
||
/* dictid = adler32(dictid, dictionary, dictLength); */
|
||
dictid = adler32_1(dictid, dictionary, dictLength, 0);
|
||
if (dictid !== state.check) {
|
||
return Z_DATA_ERROR$1;
|
||
}
|
||
}
|
||
/* copy dictionary to window using updatewindow(), which will amend the
|
||
existing dictionary if appropriate */
|
||
ret = updatewindow(strm, dictionary, dictLength, dictLength);
|
||
if (ret) {
|
||
state.mode = MEM;
|
||
return Z_MEM_ERROR$1;
|
||
}
|
||
state.havedict = 1;
|
||
// Tracev((stderr, "inflate: dictionary set\n"));
|
||
return Z_OK$1;
|
||
};
|
||
|
||
|
||
var inflateReset_1 = inflateReset;
|
||
var inflateReset2_1 = inflateReset2;
|
||
var inflateResetKeep_1 = inflateResetKeep;
|
||
var inflateInit_1 = inflateInit;
|
||
var inflateInit2_1 = inflateInit2;
|
||
var inflate_2$1 = inflate$2;
|
||
var inflateEnd_1 = inflateEnd;
|
||
var inflateGetHeader_1 = inflateGetHeader;
|
||
var inflateSetDictionary_1 = inflateSetDictionary;
|
||
var inflateInfo = 'pako inflate (from Nodeca project)';
|
||
|
||
/* Not implemented
|
||
module.exports.inflateCopy = inflateCopy;
|
||
module.exports.inflateGetDictionary = inflateGetDictionary;
|
||
module.exports.inflateMark = inflateMark;
|
||
module.exports.inflatePrime = inflatePrime;
|
||
module.exports.inflateSync = inflateSync;
|
||
module.exports.inflateSyncPoint = inflateSyncPoint;
|
||
module.exports.inflateUndermine = inflateUndermine;
|
||
*/
|
||
|
||
var inflate_1$2 = {
|
||
inflateReset: inflateReset_1,
|
||
inflateReset2: inflateReset2_1,
|
||
inflateResetKeep: inflateResetKeep_1,
|
||
inflateInit: inflateInit_1,
|
||
inflateInit2: inflateInit2_1,
|
||
inflate: inflate_2$1,
|
||
inflateEnd: inflateEnd_1,
|
||
inflateGetHeader: inflateGetHeader_1,
|
||
inflateSetDictionary: inflateSetDictionary_1,
|
||
inflateInfo: inflateInfo
|
||
};
|
||
|
||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
||
//
|
||
// This software is provided 'as-is', without any express or implied
|
||
// warranty. In no event will the authors be held liable for any damages
|
||
// arising from the use of this software.
|
||
//
|
||
// Permission is granted to anyone to use this software for any purpose,
|
||
// including commercial applications, and to alter it and redistribute it
|
||
// freely, subject to the following restrictions:
|
||
//
|
||
// 1. The origin of this software must not be misrepresented; you must not
|
||
// claim that you wrote the original software. If you use this software
|
||
// in a product, an acknowledgment in the product documentation would be
|
||
// appreciated but is not required.
|
||
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
// misrepresented as being the original software.
|
||
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
||
function GZheader() {
|
||
/* true if compressed data believed to be text */
|
||
this.text = 0;
|
||
/* modification time */
|
||
this.time = 0;
|
||
/* extra flags (not used when writing a gzip file) */
|
||
this.xflags = 0;
|
||
/* operating system */
|
||
this.os = 0;
|
||
/* pointer to extra field or Z_NULL if none */
|
||
this.extra = null;
|
||
/* extra field length (valid if extra != Z_NULL) */
|
||
this.extra_len = 0; // Actually, we don't need it in JS,
|
||
// but leave for few code modifications
|
||
|
||
//
|
||
// Setup limits is not necessary because in js we should not preallocate memory
|
||
// for inflate use constant limit in 65536 bytes
|
||
//
|
||
|
||
/* space at extra (only when reading header) */
|
||
// this.extra_max = 0;
|
||
/* pointer to zero-terminated file name or Z_NULL */
|
||
this.name = '';
|
||
/* space at name (only when reading header) */
|
||
// this.name_max = 0;
|
||
/* pointer to zero-terminated comment or Z_NULL */
|
||
this.comment = '';
|
||
/* space at comment (only when reading header) */
|
||
// this.comm_max = 0;
|
||
/* true if there was or will be a header crc */
|
||
this.hcrc = 0;
|
||
/* true when done reading gzip header (not used when writing a gzip file) */
|
||
this.done = false;
|
||
}
|
||
|
||
var gzheader = GZheader;
|
||
|
||
const toString = Object.prototype.toString;
|
||
|
||
/* Public constants ==========================================================*/
|
||
/* ===========================================================================*/
|
||
|
||
const {
|
||
Z_NO_FLUSH, Z_FINISH,
|
||
Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR
|
||
} = constants$2;
|
||
|
||
/* ===========================================================================*/
|
||
|
||
|
||
/**
|
||
* class Inflate
|
||
*
|
||
* Generic JS-style wrapper for zlib calls. If you don't need
|
||
* streaming behaviour - use more simple functions: [[inflate]]
|
||
* and [[inflateRaw]].
|
||
**/
|
||
|
||
/* internal
|
||
* inflate.chunks -> Array
|
||
*
|
||
* Chunks of output data, if [[Inflate#onData]] not overridden.
|
||
**/
|
||
|
||
/**
|
||
* Inflate.result -> Uint8Array|String
|
||
*
|
||
* Uncompressed result, generated by default [[Inflate#onData]]
|
||
* and [[Inflate#onEnd]] handlers. Filled after you push last chunk
|
||
* (call [[Inflate#push]] with `Z_FINISH` / `true` param).
|
||
**/
|
||
|
||
/**
|
||
* Inflate.err -> Number
|
||
*
|
||
* Error code after inflate finished. 0 (Z_OK) on success.
|
||
* Should be checked if broken data possible.
|
||
**/
|
||
|
||
/**
|
||
* Inflate.msg -> String
|
||
*
|
||
* Error message, if [[Inflate.err]] != 0
|
||
**/
|
||
|
||
|
||
/**
|
||
* new Inflate(options)
|
||
* - options (Object): zlib inflate options.
|
||
*
|
||
* Creates new inflator instance with specified params. Throws exception
|
||
* on bad params. Supported options:
|
||
*
|
||
* - `windowBits`
|
||
* - `dictionary`
|
||
*
|
||
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
|
||
* for more information on these.
|
||
*
|
||
* Additional options, for internal needs:
|
||
*
|
||
* - `chunkSize` - size of generated data chunks (16K by default)
|
||
* - `raw` (Boolean) - do raw inflate
|
||
* - `to` (String) - if equal to 'string', then result will be converted
|
||
* from utf8 to utf16 (javascript) string. When string output requested,
|
||
* chunk length can differ from `chunkSize`, depending on content.
|
||
*
|
||
* By default, when no options set, autodetect deflate/gzip data format via
|
||
* wrapper header.
|
||
*
|
||
* ##### Example:
|
||
*
|
||
* ```javascript
|
||
* const pako = require('pako')
|
||
* const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])
|
||
* const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);
|
||
*
|
||
* const inflate = new pako.Inflate({ level: 3});
|
||
*
|
||
* inflate.push(chunk1, false);
|
||
* inflate.push(chunk2, true); // true -> last chunk
|
||
*
|
||
* if (inflate.err) { throw new Error(inflate.err); }
|
||
*
|
||
* console.log(inflate.result);
|
||
* ```
|
||
**/
|
||
function Inflate$1(options) {
|
||
this.options = common.assign({
|
||
chunkSize: 1024 * 64,
|
||
windowBits: 15,
|
||
to: ''
|
||
}, options || {});
|
||
|
||
const opt = this.options;
|
||
|
||
// Force window size for `raw` data, if not set directly,
|
||
// because we have no header for autodetect.
|
||
if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {
|
||
opt.windowBits = -opt.windowBits;
|
||
if (opt.windowBits === 0) { opt.windowBits = -15; }
|
||
}
|
||
|
||
// If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
|
||
if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&
|
||
!(options && options.windowBits)) {
|
||
opt.windowBits += 32;
|
||
}
|
||
|
||
// Gzip header has no info about windows size, we can do autodetect only
|
||
// for deflate. So, if window size not set, force it to max when gzip possible
|
||
if ((opt.windowBits > 15) && (opt.windowBits < 48)) {
|
||
// bit 3 (16) -> gzipped data
|
||
// bit 4 (32) -> autodetect gzip/deflate
|
||
if ((opt.windowBits & 15) === 0) {
|
||
opt.windowBits |= 15;
|
||
}
|
||
}
|
||
|
||
this.err = 0; // error code, if happens (0 = Z_OK)
|
||
this.msg = ''; // error message
|
||
this.ended = false; // used to avoid multiple onEnd() calls
|
||
this.chunks = []; // chunks of compressed data
|
||
|
||
this.strm = new zstream();
|
||
this.strm.avail_out = 0;
|
||
|
||
let status = inflate_1$2.inflateInit2(
|
||
this.strm,
|
||
opt.windowBits
|
||
);
|
||
|
||
if (status !== Z_OK) {
|
||
throw new Error(messages[status]);
|
||
}
|
||
|
||
this.header = new gzheader();
|
||
|
||
inflate_1$2.inflateGetHeader(this.strm, this.header);
|
||
|
||
// Setup dictionary
|
||
if (opt.dictionary) {
|
||
// Convert data if needed
|
||
if (typeof opt.dictionary === 'string') {
|
||
opt.dictionary = strings.string2buf(opt.dictionary);
|
||
} else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {
|
||
opt.dictionary = new Uint8Array(opt.dictionary);
|
||
}
|
||
if (opt.raw) { //In raw mode we need to set the dictionary early
|
||
status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);
|
||
if (status !== Z_OK) {
|
||
throw new Error(messages[status]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Inflate#push(data[, flush_mode]) -> Boolean
|
||
* - data (Uint8Array|ArrayBuffer): input data
|
||
* - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE
|
||
* flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,
|
||
* `true` means Z_FINISH.
|
||
*
|
||
* Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
|
||
* new output chunks. Returns `true` on success. If end of stream detected,
|
||
* [[Inflate#onEnd]] will be called.
|
||
*
|
||
* `flush_mode` is not needed for normal operation, because end of stream
|
||
* detected automatically. You may try to use it for advanced things, but
|
||
* this functionality was not tested.
|
||
*
|
||
* On fail call [[Inflate#onEnd]] with error code and return false.
|
||
*
|
||
* ##### Example
|
||
*
|
||
* ```javascript
|
||
* push(chunk, false); // push one of data chunks
|
||
* ...
|
||
* push(chunk, true); // push last chunk
|
||
* ```
|
||
**/
|
||
Inflate$1.prototype.push = function (data, flush_mode) {
|
||
const strm = this.strm;
|
||
const chunkSize = this.options.chunkSize;
|
||
const dictionary = this.options.dictionary;
|
||
let status, _flush_mode, last_avail_out;
|
||
|
||
if (this.ended) return false;
|
||
|
||
if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;
|
||
else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;
|
||
|
||
// Convert data if needed
|
||
if (toString.call(data) === '[object ArrayBuffer]') {
|
||
strm.input = new Uint8Array(data);
|
||
} else {
|
||
strm.input = data;
|
||
}
|
||
|
||
strm.next_in = 0;
|
||
strm.avail_in = strm.input.length;
|
||
|
||
for (;;) {
|
||
if (strm.avail_out === 0) {
|
||
strm.output = new Uint8Array(chunkSize);
|
||
strm.next_out = 0;
|
||
strm.avail_out = chunkSize;
|
||
}
|
||
|
||
status = inflate_1$2.inflate(strm, _flush_mode);
|
||
|
||
if (status === Z_NEED_DICT && dictionary) {
|
||
status = inflate_1$2.inflateSetDictionary(strm, dictionary);
|
||
|
||
if (status === Z_OK) {
|
||
status = inflate_1$2.inflate(strm, _flush_mode);
|
||
} else if (status === Z_DATA_ERROR) {
|
||
// Replace code with more verbose
|
||
status = Z_NEED_DICT;
|
||
}
|
||
}
|
||
|
||
// Skip snyc markers if more data follows and not raw mode
|
||
while (strm.avail_in > 0 &&
|
||
status === Z_STREAM_END &&
|
||
strm.state.wrap > 0 &&
|
||
data[strm.next_in] !== 0)
|
||
{
|
||
inflate_1$2.inflateReset(strm);
|
||
status = inflate_1$2.inflate(strm, _flush_mode);
|
||
}
|
||
|
||
switch (status) {
|
||
case Z_STREAM_ERROR:
|
||
case Z_DATA_ERROR:
|
||
case Z_NEED_DICT:
|
||
case Z_MEM_ERROR:
|
||
this.onEnd(status);
|
||
this.ended = true;
|
||
return false;
|
||
}
|
||
|
||
// Remember real `avail_out` value, because we may patch out buffer content
|
||
// to align utf8 strings boundaries.
|
||
last_avail_out = strm.avail_out;
|
||
|
||
if (strm.next_out) {
|
||
if (strm.avail_out === 0 || status === Z_STREAM_END) {
|
||
|
||
if (this.options.to === 'string') {
|
||
|
||
let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);
|
||
|
||
let tail = strm.next_out - next_out_utf8;
|
||
let utf8str = strings.buf2string(strm.output, next_out_utf8);
|
||
|
||
// move tail & realign counters
|
||
strm.next_out = tail;
|
||
strm.avail_out = chunkSize - tail;
|
||
if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);
|
||
|
||
this.onData(utf8str);
|
||
|
||
} else {
|
||
this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));
|
||
}
|
||
}
|
||
}
|
||
|
||
// Must repeat iteration if out buffer is full
|
||
if (status === Z_OK && last_avail_out === 0) continue;
|
||
|
||
// Finalize if end of stream reached.
|
||
if (status === Z_STREAM_END) {
|
||
status = inflate_1$2.inflateEnd(this.strm);
|
||
this.onEnd(status);
|
||
this.ended = true;
|
||
return true;
|
||
}
|
||
|
||
if (strm.avail_in === 0) break;
|
||
}
|
||
|
||
return true;
|
||
};
|
||
|
||
|
||
/**
|
||
* Inflate#onData(chunk) -> Void
|
||
* - chunk (Uint8Array|String): output data. When string output requested,
|
||
* each chunk will be string.
|
||
*
|
||
* By default, stores data blocks in `chunks[]` property and glue
|
||
* those in `onEnd`. Override this handler, if you need another behaviour.
|
||
**/
|
||
Inflate$1.prototype.onData = function (chunk) {
|
||
this.chunks.push(chunk);
|
||
};
|
||
|
||
|
||
/**
|
||
* Inflate#onEnd(status) -> Void
|
||
* - status (Number): inflate status. 0 (Z_OK) on success,
|
||
* other if not.
|
||
*
|
||
* Called either after you tell inflate that the input stream is
|
||
* complete (Z_FINISH). By default - join collected chunks,
|
||
* free memory and fill `results` / `err` properties.
|
||
**/
|
||
Inflate$1.prototype.onEnd = function (status) {
|
||
// On success - join
|
||
if (status === Z_OK) {
|
||
if (this.options.to === 'string') {
|
||
this.result = this.chunks.join('');
|
||
} else {
|
||
this.result = common.flattenChunks(this.chunks);
|
||
}
|
||
}
|
||
this.chunks = [];
|
||
this.err = status;
|
||
this.msg = this.strm.msg;
|
||
};
|
||
|
||
|
||
/**
|
||
* inflate(data[, options]) -> Uint8Array|String
|
||
* - data (Uint8Array): input data to decompress.
|
||
* - options (Object): zlib inflate options.
|
||
*
|
||
* Decompress `data` with inflate/ungzip and `options`. Autodetect
|
||
* format via wrapper header by default. That's why we don't provide
|
||
* separate `ungzip` method.
|
||
*
|
||
* Supported options are:
|
||
*
|
||
* - windowBits
|
||
*
|
||
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
|
||
* for more information.
|
||
*
|
||
* Sugar (options):
|
||
*
|
||
* - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
|
||
* negative windowBits implicitly.
|
||
* - `to` (String) - if equal to 'string', then result will be converted
|
||
* from utf8 to utf16 (javascript) string. When string output requested,
|
||
* chunk length can differ from `chunkSize`, depending on content.
|
||
*
|
||
*
|
||
* ##### Example:
|
||
*
|
||
* ```javascript
|
||
* const pako = require('pako');
|
||
* const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));
|
||
* let output;
|
||
*
|
||
* try {
|
||
* output = pako.inflate(input);
|
||
* } catch (err) {
|
||
* console.log(err);
|
||
* }
|
||
* ```
|
||
**/
|
||
function inflate$1(input, options) {
|
||
const inflator = new Inflate$1(options);
|
||
|
||
inflator.push(input);
|
||
|
||
// That will never happens, if you don't cheat with options :)
|
||
if (inflator.err) throw inflator.msg || messages[inflator.err];
|
||
|
||
return inflator.result;
|
||
}
|
||
|
||
|
||
/**
|
||
* inflateRaw(data[, options]) -> Uint8Array|String
|
||
* - data (Uint8Array): input data to decompress.
|
||
* - options (Object): zlib inflate options.
|
||
*
|
||
* The same as [[inflate]], but creates raw data, without wrapper
|
||
* (header and adler32 crc).
|
||
**/
|
||
function inflateRaw$1(input, options) {
|
||
options = options || {};
|
||
options.raw = true;
|
||
return inflate$1(input, options);
|
||
}
|
||
|
||
|
||
/**
|
||
* ungzip(data[, options]) -> Uint8Array|String
|
||
* - data (Uint8Array): input data to decompress.
|
||
* - options (Object): zlib inflate options.
|
||
*
|
||
* Just shortcut to [[inflate]], because it autodetects format
|
||
* by header.content. Done for convenience.
|
||
**/
|
||
|
||
|
||
var Inflate_1$1 = Inflate$1;
|
||
var inflate_2 = inflate$1;
|
||
var inflateRaw_1$1 = inflateRaw$1;
|
||
var ungzip$1 = inflate$1;
|
||
var constants = constants$2;
|
||
|
||
var inflate_1$1 = {
|
||
Inflate: Inflate_1$1,
|
||
inflate: inflate_2,
|
||
inflateRaw: inflateRaw_1$1,
|
||
ungzip: ungzip$1,
|
||
constants: constants
|
||
};
|
||
|
||
const { Deflate, deflate, deflateRaw, gzip } = deflate_1$1;
|
||
|
||
const { Inflate, inflate, inflateRaw, ungzip } = inflate_1$1;
|
||
|
||
|
||
|
||
var Deflate_1 = Deflate;
|
||
var deflate_1 = deflate;
|
||
var deflateRaw_1 = deflateRaw;
|
||
var gzip_1 = gzip;
|
||
var Inflate_1 = Inflate;
|
||
var inflate_1 = inflate;
|
||
var inflateRaw_1 = inflateRaw;
|
||
var ungzip_1 = ungzip;
|
||
var constants_1 = constants$2;
|
||
|
||
var pako = {
|
||
Deflate: Deflate_1,
|
||
deflate: deflate_1,
|
||
deflateRaw: deflateRaw_1,
|
||
gzip: gzip_1,
|
||
Inflate: Inflate_1,
|
||
inflate: inflate_1,
|
||
inflateRaw: inflateRaw_1,
|
||
ungzip: ungzip_1,
|
||
constants: constants_1
|
||
};
|
||
|
||
function toInt(val) {
|
||
if (isNaN(val)) {
|
||
throw new Error("Not a number: " + val);
|
||
} else if (typeof val == "string") {
|
||
return parseInt(val);
|
||
} else return val;
|
||
}
|
||
|
||
function toFloat(val) {
|
||
if (typeof val == "string") {
|
||
return parseFloat(val);
|
||
} else return val;
|
||
}
|
||
|
||
var BufferStream = /*#__PURE__*/function () {
|
||
function BufferStream(sizeOrBuffer, littleEndian) {
|
||
_classCallCheck(this, BufferStream);
|
||
|
||
this.buffer = typeof sizeOrBuffer == "number" ? new ArrayBuffer(sizeOrBuffer) : sizeOrBuffer;
|
||
|
||
if (!this.buffer) {
|
||
this.buffer = new ArrayBuffer(0);
|
||
}
|
||
|
||
this.view = new DataView(this.buffer);
|
||
this.offset = 0;
|
||
this.isLittleEndian = littleEndian || false;
|
||
this.size = 0;
|
||
this.encoder = new TextEncoder("utf-8");
|
||
}
|
||
|
||
_createClass(BufferStream, [{
|
||
key: "setEndian",
|
||
value: function setEndian(isLittle) {
|
||
this.isLittleEndian = isLittle;
|
||
}
|
||
}, {
|
||
key: "writeUint8",
|
||
value: function writeUint8(value) {
|
||
this.checkSize(1);
|
||
this.view.setUint8(this.offset, toInt(value));
|
||
return this.increment(1);
|
||
}
|
||
}, {
|
||
key: "writeUint8Repeat",
|
||
value: function writeUint8Repeat(value, count) {
|
||
var v = toInt(value);
|
||
this.checkSize(count);
|
||
|
||
for (var i = 0; i < count; i++) {
|
||
this.view.setUint8(this.offset + i, v);
|
||
}
|
||
|
||
return this.increment(count);
|
||
}
|
||
}, {
|
||
key: "writeInt8",
|
||
value: function writeInt8(value) {
|
||
this.checkSize(1);
|
||
this.view.setInt8(this.offset, toInt(value));
|
||
return this.increment(1);
|
||
}
|
||
}, {
|
||
key: "writeUint16",
|
||
value: function writeUint16(value) {
|
||
this.checkSize(2);
|
||
this.view.setUint16(this.offset, toInt(value), this.isLittleEndian);
|
||
return this.increment(2);
|
||
}
|
||
}, {
|
||
key: "writeTwoUint16s",
|
||
value: function writeTwoUint16s(value) {
|
||
this.checkSize(4);
|
||
var first = value >> 16;
|
||
var second = value & 0xffff;
|
||
this.view.setUint16(this.offset, toInt(first), this.isLittleEndian);
|
||
this.view.setUint16(this.offset + 2, toInt(second), this.isLittleEndian);
|
||
return this.increment(4);
|
||
}
|
||
}, {
|
||
key: "writeInt16",
|
||
value: function writeInt16(value) {
|
||
this.checkSize(2);
|
||
this.view.setInt16(this.offset, toInt(value), this.isLittleEndian);
|
||
return this.increment(2);
|
||
}
|
||
}, {
|
||
key: "writeUint32",
|
||
value: function writeUint32(value) {
|
||
this.checkSize(4);
|
||
this.view.setUint32(this.offset, toInt(value), this.isLittleEndian);
|
||
return this.increment(4);
|
||
}
|
||
}, {
|
||
key: "writeInt32",
|
||
value: function writeInt32(value) {
|
||
this.checkSize(4);
|
||
this.view.setInt32(this.offset, toInt(value), this.isLittleEndian);
|
||
return this.increment(4);
|
||
}
|
||
}, {
|
||
key: "writeFloat",
|
||
value: function writeFloat(value) {
|
||
this.checkSize(4);
|
||
this.view.setFloat32(this.offset, toFloat(value), this.isLittleEndian);
|
||
return this.increment(4);
|
||
}
|
||
}, {
|
||
key: "writeDouble",
|
||
value: function writeDouble(value) {
|
||
this.checkSize(8);
|
||
this.view.setFloat64(this.offset, toFloat(value), this.isLittleEndian);
|
||
return this.increment(8);
|
||
}
|
||
}, {
|
||
key: "writeUTF8String",
|
||
value: function writeUTF8String(value) {
|
||
var encodedString = this.encoder.encode(value);
|
||
this.checkSize(encodedString.byteLength);
|
||
new Uint8Array(this.buffer).set(encodedString, this.offset);
|
||
return this.increment(encodedString.byteLength);
|
||
}
|
||
}, {
|
||
key: "writeAsciiString",
|
||
value: function writeAsciiString(value) {
|
||
value = value || "";
|
||
var len = value.length;
|
||
this.checkSize(len);
|
||
var startOffset = this.offset;
|
||
|
||
for (var i = 0; i < len; i++) {
|
||
var charcode = value.charCodeAt(i);
|
||
this.view.setUint8(startOffset + i, charcode);
|
||
}
|
||
|
||
return this.increment(len);
|
||
}
|
||
}, {
|
||
key: "readUint32",
|
||
value: function readUint32() {
|
||
var val = this.view.getUint32(this.offset, this.isLittleEndian);
|
||
this.increment(4);
|
||
return val;
|
||
}
|
||
}, {
|
||
key: "readUint16",
|
||
value: function readUint16() {
|
||
var val = this.view.getUint16(this.offset, this.isLittleEndian);
|
||
this.increment(2);
|
||
return val;
|
||
}
|
||
}, {
|
||
key: "readUint8",
|
||
value: function readUint8() {
|
||
var val = this.view.getUint8(this.offset);
|
||
this.increment(1);
|
||
return val;
|
||
}
|
||
}, {
|
||
key: "peekUint8",
|
||
value: function peekUint8(offset) {
|
||
return this.view.getUint8(this.offset + offset);
|
||
}
|
||
}, {
|
||
key: "readUint8Array",
|
||
value: function readUint8Array(length) {
|
||
var arr = new Uint8Array(this.buffer, this.offset, length);
|
||
this.increment(length);
|
||
return arr;
|
||
}
|
||
}, {
|
||
key: "readUint16Array",
|
||
value: function readUint16Array(length) {
|
||
var sixlen = length / 2,
|
||
arr = new Uint16Array(sixlen),
|
||
i = 0;
|
||
|
||
while (i++ < sixlen) {
|
||
arr[i] = this.view.getUint16(this.offset, this.isLittleEndian);
|
||
this.offset += 2;
|
||
}
|
||
|
||
return arr;
|
||
}
|
||
}, {
|
||
key: "readInt16",
|
||
value: function readInt16() {
|
||
var val = this.view.getInt16(this.offset, this.isLittleEndian);
|
||
this.increment(2);
|
||
return val;
|
||
}
|
||
}, {
|
||
key: "readInt32",
|
||
value: function readInt32() {
|
||
var val = this.view.getInt32(this.offset, this.isLittleEndian);
|
||
this.increment(4);
|
||
return val;
|
||
}
|
||
}, {
|
||
key: "readFloat",
|
||
value: function readFloat() {
|
||
var val = this.view.getFloat32(this.offset, this.isLittleEndian);
|
||
this.increment(4);
|
||
return val;
|
||
}
|
||
}, {
|
||
key: "readDouble",
|
||
value: function readDouble() {
|
||
var val = this.view.getFloat64(this.offset, this.isLittleEndian);
|
||
this.increment(8);
|
||
return val;
|
||
}
|
||
}, {
|
||
key: "readAsciiString",
|
||
value: function readAsciiString(length) {
|
||
var result = "";
|
||
var start = this.offset;
|
||
var end = this.offset + length;
|
||
|
||
if (end >= this.buffer.byteLength) {
|
||
end = this.buffer.byteLength;
|
||
}
|
||
|
||
for (var i = start; i < end; ++i) {
|
||
result += String.fromCharCode(this.view.getUint8(i));
|
||
}
|
||
|
||
this.increment(end - start);
|
||
return result;
|
||
}
|
||
}, {
|
||
key: "readVR",
|
||
value: function readVR() {
|
||
var vr = String.fromCharCode(this.view.getUint8(this.offset)) + String.fromCharCode(this.view.getUint8(this.offset + 1));
|
||
this.increment(2);
|
||
return vr;
|
||
}
|
||
}, {
|
||
key: "readEncodedString",
|
||
value: function readEncodedString(length) {
|
||
if (this.offset + length >= this.buffer.byteLength) {
|
||
length = this.buffer.byteLength - this.offset;
|
||
}
|
||
|
||
var view = new DataView(this.buffer, this.offset, length);
|
||
var result = this.decoder.decode(view);
|
||
this.increment(length);
|
||
return result;
|
||
}
|
||
}, {
|
||
key: "readHex",
|
||
value: function readHex(length) {
|
||
var hexString = "";
|
||
|
||
for (var i = 0; i < length; i++) {
|
||
hexString += this.readUint8().toString(16);
|
||
}
|
||
|
||
return hexString;
|
||
}
|
||
}, {
|
||
key: "checkSize",
|
||
value: function checkSize(step) {
|
||
if (this.offset + step > this.buffer.byteLength) {
|
||
//throw new Error("Writing exceeded the size of buffer");
|
||
//
|
||
// Resize the buffer.
|
||
// The idea is that when it is necessary to increase the buffer size,
|
||
// there will likely be more bytes which need to be written to the
|
||
// buffer in the future. Buffer allocation is costly.
|
||
// So we increase the buffer size right now
|
||
// by a larger amount than necessary, to reserve space for later
|
||
// writes which then can be done much faster. The current size of
|
||
// the buffer is the best estimate of the scale by which the size
|
||
// should increase.
|
||
// So approximately doubling the size of the buffer
|
||
// (while ensuring it fits the new data) is a simple but effective strategy.
|
||
var dstSize = this.offset + step + this.buffer.byteLength;
|
||
var dst = new ArrayBuffer(dstSize);
|
||
new Uint8Array(dst).set(new Uint8Array(this.buffer));
|
||
this.buffer = dst;
|
||
this.view = new DataView(this.buffer);
|
||
}
|
||
}
|
||
}, {
|
||
key: "concat",
|
||
value: function concat(stream) {
|
||
var available = this.buffer.byteLength - this.offset;
|
||
|
||
if (stream.size > available) {
|
||
var newbuf = new ArrayBuffer(this.offset + stream.size);
|
||
var int8 = new Uint8Array(newbuf);
|
||
int8.set(new Uint8Array(this.getBuffer(0, this.offset)));
|
||
int8.set(new Uint8Array(stream.getBuffer(0, stream.size)), this.offset);
|
||
this.buffer = newbuf;
|
||
this.view = new DataView(this.buffer);
|
||
} else {
|
||
var _int = new Uint8Array(this.buffer);
|
||
|
||
_int.set(new Uint8Array(stream.getBuffer(0, stream.size)), this.offset);
|
||
}
|
||
|
||
this.offset += stream.size;
|
||
this.size = this.offset;
|
||
return this.buffer.byteLength;
|
||
}
|
||
}, {
|
||
key: "increment",
|
||
value: function increment(step) {
|
||
this.offset += step;
|
||
|
||
if (this.offset > this.size) {
|
||
this.size = this.offset;
|
||
}
|
||
|
||
return step;
|
||
}
|
||
}, {
|
||
key: "getBuffer",
|
||
value: function getBuffer(start, end) {
|
||
if (!start && !end) {
|
||
start = 0;
|
||
end = this.size;
|
||
}
|
||
|
||
return this.buffer.slice(start, end);
|
||
}
|
||
}, {
|
||
key: "more",
|
||
value: function more(length) {
|
||
if (this.offset + length > this.endOffset) {
|
||
throw new Error("Request more than currently allocated buffer");
|
||
}
|
||
|
||
var newBuf = new ReadBufferStream(this.buffer, null, {
|
||
start: this.offset,
|
||
stop: this.offset + length
|
||
});
|
||
this.increment(length);
|
||
return newBuf;
|
||
}
|
||
}, {
|
||
key: "reset",
|
||
value: function reset() {
|
||
this.offset = 0;
|
||
return this;
|
||
}
|
||
}, {
|
||
key: "end",
|
||
value: function end() {
|
||
return this.offset >= this.buffer.byteLength;
|
||
}
|
||
}, {
|
||
key: "toEnd",
|
||
value: function toEnd() {
|
||
this.offset = this.buffer.byteLength;
|
||
}
|
||
}]);
|
||
|
||
return BufferStream;
|
||
}();
|
||
|
||
var ReadBufferStream = /*#__PURE__*/function (_BufferStream) {
|
||
_inherits(ReadBufferStream, _BufferStream);
|
||
|
||
var _super = _createSuper(ReadBufferStream);
|
||
|
||
function ReadBufferStream(buffer, littleEndian) {
|
||
var _this;
|
||
|
||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
||
start: null,
|
||
stop: null,
|
||
noCopy: false
|
||
};
|
||
|
||
_classCallCheck(this, ReadBufferStream);
|
||
|
||
_this = _super.call(this, buffer, littleEndian);
|
||
_this.offset = options.start || 0;
|
||
_this.size = options.stop || _this.buffer.byteLength;
|
||
_this.noCopy = options.noCopy;
|
||
_this.startOffset = _this.offset;
|
||
_this.endOffset = _this.size;
|
||
_this.decoder = new TextDecoder("latin1");
|
||
return _this;
|
||
}
|
||
|
||
_createClass(ReadBufferStream, [{
|
||
key: "setDecoder",
|
||
value: function setDecoder(decoder) {
|
||
this.decoder = decoder;
|
||
}
|
||
}, {
|
||
key: "getBuffer",
|
||
value: function getBuffer(start, end) {
|
||
if (this.noCopy) {
|
||
return new Uint8Array(this.buffer, start, end - start);
|
||
}
|
||
|
||
if (!start && !end) {
|
||
start = 0;
|
||
end = this.size;
|
||
}
|
||
|
||
return this.buffer.slice(start, end);
|
||
}
|
||
}, {
|
||
key: "reset",
|
||
value: function reset() {
|
||
this.offset = this.startOffset;
|
||
return this;
|
||
}
|
||
}, {
|
||
key: "end",
|
||
value: function end() {
|
||
return this.offset >= this.endOffset;
|
||
}
|
||
}, {
|
||
key: "toEnd",
|
||
value: function toEnd() {
|
||
this.offset = this.endOffset;
|
||
}
|
||
}, {
|
||
key: "writeUint8",
|
||
value: function writeUint8(value) {
|
||
throw new Error(value, "writeUint8 not implemented");
|
||
}
|
||
}, {
|
||
key: "writeUint8Repeat",
|
||
value: function writeUint8Repeat(value, count) {
|
||
throw new Error(value, "writeUint8Repeat not implemented");
|
||
}
|
||
}, {
|
||
key: "writeInt8",
|
||
value: function writeInt8(value) {
|
||
throw new Error(value, "writeInt8 not implemented");
|
||
}
|
||
}, {
|
||
key: "writeUint16",
|
||
value: function writeUint16(value) {
|
||
throw new Error(value, "writeUint16 not implemented");
|
||
}
|
||
}, {
|
||
key: "writeTwoUint16s",
|
||
value: function writeTwoUint16s(value) {
|
||
throw new Error(value, "writeTwoUint16s not implemented");
|
||
}
|
||
}, {
|
||
key: "writeInt16",
|
||
value: function writeInt16(value) {
|
||
throw new Error(value, "writeInt16 not implemented");
|
||
}
|
||
}, {
|
||
key: "writeUint32",
|
||
value: function writeUint32(value) {
|
||
throw new Error(value, "writeUint32 not implemented");
|
||
}
|
||
}, {
|
||
key: "writeInt32",
|
||
value: function writeInt32(value) {
|
||
throw new Error(value, "writeInt32 not implemented");
|
||
}
|
||
}, {
|
||
key: "writeFloat",
|
||
value: function writeFloat(value) {
|
||
throw new Error(value, "writeFloat not implemented");
|
||
}
|
||
}, {
|
||
key: "writeDouble",
|
||
value: function writeDouble(value) {
|
||
throw new Error(value, "writeDouble not implemented");
|
||
}
|
||
}, {
|
||
key: "writeAsciiString",
|
||
value: function writeAsciiString(value) {
|
||
throw new Error(value, "writeAsciiString not implemented");
|
||
}
|
||
}, {
|
||
key: "writeUTF8String",
|
||
value: function writeUTF8String(value) {
|
||
throw new Error(value, "writeUTF8String not implemented");
|
||
}
|
||
}, {
|
||
key: "checkSize",
|
||
value: function checkSize(step) {
|
||
throw new Error(step, "checkSize not implemented");
|
||
}
|
||
}, {
|
||
key: "concat",
|
||
value: function concat(stream) {
|
||
throw new Error(stream, "concat not implemented");
|
||
}
|
||
}]);
|
||
|
||
return ReadBufferStream;
|
||
}(BufferStream);
|
||
|
||
var DeflatedReadBufferStream = /*#__PURE__*/function (_ReadBufferStream) {
|
||
_inherits(DeflatedReadBufferStream, _ReadBufferStream);
|
||
|
||
var _super2 = _createSuper(DeflatedReadBufferStream);
|
||
|
||
function DeflatedReadBufferStream(stream, options) {
|
||
_classCallCheck(this, DeflatedReadBufferStream);
|
||
|
||
var inflatedBuffer = pako.inflateRaw(stream.getBuffer(stream.offset, stream.size));
|
||
return _super2.call(this, inflatedBuffer.buffer, stream.littleEndian, options);
|
||
}
|
||
|
||
return _createClass(DeflatedReadBufferStream);
|
||
}(ReadBufferStream);
|
||
|
||
var WriteBufferStream = /*#__PURE__*/function (_BufferStream2) {
|
||
_inherits(WriteBufferStream, _BufferStream2);
|
||
|
||
var _super3 = _createSuper(WriteBufferStream);
|
||
|
||
function WriteBufferStream(buffer, littleEndian) {
|
||
var _this2;
|
||
|
||
_classCallCheck(this, WriteBufferStream);
|
||
|
||
_this2 = _super3.call(this, buffer, littleEndian);
|
||
_this2.size = 0;
|
||
return _this2;
|
||
}
|
||
|
||
return _createClass(WriteBufferStream);
|
||
}(BufferStream);
|
||
|
||
// TransferSyntaxUIDs
|
||
var IMPLICIT_LITTLE_ENDIAN = "1.2.840.10008.1.2";
|
||
var EXPLICIT_LITTLE_ENDIAN$1 = "1.2.840.10008.1.2.1";
|
||
var DEFLATED_EXPLICIT_LITTLE_ENDIAN = "1.2.840.10008.1.2.1.99";
|
||
var EXPLICIT_BIG_ENDIAN = "1.2.840.10008.1.2.2"; // Data Element Length
|
||
|
||
var dictionary={"(0000,0000)":{tag:"(0000,0000)",vr:"UL",name:"CommandGroupLength",vm:"1",version:"DICOM"},"(0000,0002)":{tag:"(0000,0002)",vr:"UI",name:"AffectedSOPClassUID",vm:"1",version:"DICOM"},"(0000,0003)":{tag:"(0000,0003)",vr:"UI",name:"RequestedSOPClassUID",vm:"1",version:"DICOM"},"(0000,0100)":{tag:"(0000,0100)",vr:"US",name:"CommandField",vm:"1",version:"DICOM"},"(0000,0110)":{tag:"(0000,0110)",vr:"US",name:"MessageID",vm:"1",version:"DICOM"},"(0000,0120)":{tag:"(0000,0120)",vr:"US",name:"MessageIDBeingRespondedTo",vm:"1",version:"DICOM"},"(0000,0600)":{tag:"(0000,0600)",vr:"AE",name:"MoveDestination",vm:"1",version:"DICOM"},"(0000,0700)":{tag:"(0000,0700)",vr:"US",name:"Priority",vm:"1",version:"DICOM"},"(0000,0800)":{tag:"(0000,0800)",vr:"US",name:"CommandDataSetType",vm:"1",version:"DICOM"},"(0000,0900)":{tag:"(0000,0900)",vr:"US",name:"Status",vm:"1",version:"DICOM"},"(0000,0901)":{tag:"(0000,0901)",vr:"AT",name:"OffendingElement",vm:"1-n",version:"DICOM"},"(0000,0902)":{tag:"(0000,0902)",vr:"LO",name:"ErrorComment",vm:"1",version:"DICOM"},"(0000,0903)":{tag:"(0000,0903)",vr:"US",name:"ErrorID",vm:"1",version:"DICOM"},"(0000,1000)":{tag:"(0000,1000)",vr:"UI",name:"AffectedSOPInstanceUID",vm:"1",version:"DICOM"},"(0000,1001)":{tag:"(0000,1001)",vr:"UI",name:"RequestedSOPInstanceUID",vm:"1",version:"DICOM"},"(0000,1002)":{tag:"(0000,1002)",vr:"US",name:"EventTypeID",vm:"1",version:"DICOM"},"(0000,1005)":{tag:"(0000,1005)",vr:"AT",name:"AttributeIdentifierList",vm:"1-n",version:"DICOM"},"(0000,1008)":{tag:"(0000,1008)",vr:"US",name:"ActionTypeID",vm:"1",version:"DICOM"},"(0000,1020)":{tag:"(0000,1020)",vr:"US",name:"NumberOfRemainingSuboperations",vm:"1",version:"DICOM"},"(0000,1021)":{tag:"(0000,1021)",vr:"US",name:"NumberOfCompletedSuboperations",vm:"1",version:"DICOM"},"(0000,1022)":{tag:"(0000,1022)",vr:"US",name:"NumberOfFailedSuboperations",vm:"1",version:"DICOM"},"(0000,1023)":{tag:"(0000,1023)",vr:"US",name:"NumberOfWarningSuboperations",vm:"1",version:"DICOM"},"(0000,1030)":{tag:"(0000,1030)",vr:"AE",name:"MoveOriginatorApplicationEntityTitle",vm:"1",version:"DICOM"},"(0000,1031)":{tag:"(0000,1031)",vr:"US",name:"MoveOriginatorMessageID",vm:"1",version:"DICOM"},"(0002,0000)":{tag:"(0002,0000)",vr:"UL",name:"FileMetaInformationGroupLength",vm:"1",version:"DICOM"},"(0002,0001)":{tag:"(0002,0001)",vr:"OB",name:"FileMetaInformationVersion",vm:"1",version:"DICOM"},"(0002,0002)":{tag:"(0002,0002)",vr:"UI",name:"MediaStorageSOPClassUID",vm:"1",version:"DICOM"},"(0002,0003)":{tag:"(0002,0003)",vr:"UI",name:"MediaStorageSOPInstanceUID",vm:"1",version:"DICOM"},"(0002,0010)":{tag:"(0002,0010)",vr:"UI",name:"TransferSyntaxUID",vm:"1",version:"DICOM"},"(0002,0012)":{tag:"(0002,0012)",vr:"UI",name:"ImplementationClassUID",vm:"1",version:"DICOM"},"(0002,0013)":{tag:"(0002,0013)",vr:"SH",name:"ImplementationVersionName",vm:"1",version:"DICOM"},"(0002,0016)":{tag:"(0002,0016)",vr:"AE",name:"SourceApplicationEntityTitle",vm:"1",version:"DICOM"},"(0002,0017)":{tag:"(0002,0017)",vr:"AE",name:"SendingApplicationEntityTitle",vm:"1",version:"DICOM"},"(0002,0018)":{tag:"(0002,0018)",vr:"AE",name:"ReceivingApplicationEntityTitle",vm:"1",version:"DICOM"},"(0002,0100)":{tag:"(0002,0100)",vr:"UI",name:"PrivateInformationCreatorUID",vm:"1",version:"DICOM"},"(0002,0102)":{tag:"(0002,0102)",vr:"OB",name:"PrivateInformation",vm:"1",version:"DICOM"},"(0004,1130)":{tag:"(0004,1130)",vr:"CS",name:"FileSetID",vm:"1",version:"DICOM"},"(0004,1141)":{tag:"(0004,1141)",vr:"CS",name:"FileSetDescriptorFileID",vm:"1-8",version:"DICOM"},"(0004,1142)":{tag:"(0004,1142)",vr:"CS",name:"SpecificCharacterSetOfFileSetDescriptorFile",vm:"1",version:"DICOM"},"(0004,1200)":{tag:"(0004,1200)",vr:"up",name:"OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity",vm:"1",version:"DICOM"},"(0004,1202)":{tag:"(0004,1202)",vr:"up",name:"OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity",vm:"1",version:"DICOM"},"(0004,1212)":{tag:"(0004,1212)",vr:"US",name:"FileSetConsistencyFlag",vm:"1",version:"DICOM"},"(0004,1220)":{tag:"(0004,1220)",vr:"SQ",name:"DirectoryRecordSequence",vm:"1",version:"DICOM"},"(0004,1400)":{tag:"(0004,1400)",vr:"up",name:"OffsetOfTheNextDirectoryRecord",vm:"1",version:"DICOM"},"(0004,1410)":{tag:"(0004,1410)",vr:"US",name:"RecordInUseFlag",vm:"1",version:"DICOM"},"(0004,1420)":{tag:"(0004,1420)",vr:"up",name:"OffsetOfReferencedLowerLevelDirectoryEntity",vm:"1",version:"DICOM"},"(0004,1430)":{tag:"(0004,1430)",vr:"CS",name:"DirectoryRecordType",vm:"1",version:"DICOM"},"(0004,1432)":{tag:"(0004,1432)",vr:"UI",name:"PrivateRecordUID",vm:"1",version:"DICOM"},"(0004,1500)":{tag:"(0004,1500)",vr:"CS",name:"ReferencedFileID",vm:"1-8",version:"DICOM"},"(0004,1510)":{tag:"(0004,1510)",vr:"UI",name:"ReferencedSOPClassUIDInFile",vm:"1",version:"DICOM"},"(0004,1511)":{tag:"(0004,1511)",vr:"UI",name:"ReferencedSOPInstanceUIDInFile",vm:"1",version:"DICOM"},"(0004,1512)":{tag:"(0004,1512)",vr:"UI",name:"ReferencedTransferSyntaxUIDInFile",vm:"1",version:"DICOM"},"(0004,151A)":{tag:"(0004,151A)",vr:"UI",name:"ReferencedRelatedGeneralSOPClassUIDInFile",vm:"1-n",version:"DICOM"},"(0008,0005)":{tag:"(0008,0005)",vr:"CS",name:"SpecificCharacterSet",vm:"1-n",version:"DICOM"},"(0008,0006)":{tag:"(0008,0006)",vr:"SQ",name:"LanguageCodeSequence",vm:"1",version:"DICOM"},"(0008,0008)":{tag:"(0008,0008)",vr:"CS",name:"ImageType",vm:"2-n",version:"DICOM"},"(0008,0012)":{tag:"(0008,0012)",vr:"DA",name:"InstanceCreationDate",vm:"1",version:"DICOM"},"(0008,0013)":{tag:"(0008,0013)",vr:"TM",name:"InstanceCreationTime",vm:"1",version:"DICOM"},"(0008,0014)":{tag:"(0008,0014)",vr:"UI",name:"InstanceCreatorUID",vm:"1",version:"DICOM"},"(0008,0015)":{tag:"(0008,0015)",vr:"DT",name:"InstanceCoercionDateTime",vm:"1",version:"DICOM"},"(0008,0016)":{tag:"(0008,0016)",vr:"UI",name:"SOPClassUID",vm:"1",version:"DICOM"},"(0008,0018)":{tag:"(0008,0018)",vr:"UI",name:"SOPInstanceUID",vm:"1",version:"DICOM"},"(0008,001A)":{tag:"(0008,001A)",vr:"UI",name:"RelatedGeneralSOPClassUID",vm:"1-n",version:"DICOM"},"(0008,001B)":{tag:"(0008,001B)",vr:"UI",name:"OriginalSpecializedSOPClassUID",vm:"1",version:"DICOM"},"(0008,0020)":{tag:"(0008,0020)",vr:"DA",name:"StudyDate",vm:"1",version:"DICOM"},"(0008,0021)":{tag:"(0008,0021)",vr:"DA",name:"SeriesDate",vm:"1",version:"DICOM"},"(0008,0022)":{tag:"(0008,0022)",vr:"DA",name:"AcquisitionDate",vm:"1",version:"DICOM"},"(0008,0023)":{tag:"(0008,0023)",vr:"DA",name:"ContentDate",vm:"1",version:"DICOM"},"(0008,002A)":{tag:"(0008,002A)",vr:"DT",name:"AcquisitionDateTime",vm:"1",version:"DICOM"},"(0008,0030)":{tag:"(0008,0030)",vr:"TM",name:"StudyTime",vm:"1",version:"DICOM"},"(0008,0031)":{tag:"(0008,0031)",vr:"TM",name:"SeriesTime",vm:"1",version:"DICOM"},"(0008,0032)":{tag:"(0008,0032)",vr:"TM",name:"AcquisitionTime",vm:"1",version:"DICOM"},"(0008,0033)":{tag:"(0008,0033)",vr:"TM",name:"ContentTime",vm:"1",version:"DICOM"},"(0008,0050)":{tag:"(0008,0050)",vr:"SH",name:"AccessionNumber",vm:"1",version:"DICOM"},"(0008,0051)":{tag:"(0008,0051)",vr:"SQ",name:"IssuerOfAccessionNumberSequence",vm:"1",version:"DICOM"},"(0008,0052)":{tag:"(0008,0052)",vr:"CS",name:"QueryRetrieveLevel",vm:"1",version:"DICOM"},"(0008,0053)":{tag:"(0008,0053)",vr:"CS",name:"QueryRetrieveView",vm:"1",version:"DICOM"},"(0008,0054)":{tag:"(0008,0054)",vr:"AE",name:"RetrieveAETitle",vm:"1-n",version:"DICOM"},"(0008,0055)":{tag:"(0008,0055)",vr:"AE",name:"StationAETitle",vm:"1",version:"DICOM"},"(0008,0056)":{tag:"(0008,0056)",vr:"CS",name:"InstanceAvailability",vm:"1",version:"DICOM"},"(0008,0058)":{tag:"(0008,0058)",vr:"UI",name:"FailedSOPInstanceUIDList",vm:"1-n",version:"DICOM"},"(0008,0060)":{tag:"(0008,0060)",vr:"CS",name:"Modality",vm:"1",version:"DICOM"},"(0008,0061)":{tag:"(0008,0061)",vr:"CS",name:"ModalitiesInStudy",vm:"1-n",version:"DICOM"},"(0008,0062)":{tag:"(0008,0062)",vr:"UI",name:"SOPClassesInStudy",vm:"1-n",version:"DICOM"},"(0008,0063)":{tag:"(0008,0063)",vr:"SQ",name:"AnatomicRegionsInStudyCodeSequence",vm:"1",version:"DICOM"},"(0008,0064)":{tag:"(0008,0064)",vr:"CS",name:"ConversionType",vm:"1",version:"DICOM"},"(0008,0068)":{tag:"(0008,0068)",vr:"CS",name:"PresentationIntentType",vm:"1",version:"DICOM"},"(0008,0070)":{tag:"(0008,0070)",vr:"LO",name:"Manufacturer",vm:"1",version:"DICOM"},"(0008,0080)":{tag:"(0008,0080)",vr:"LO",name:"InstitutionName",vm:"1",version:"DICOM"},"(0008,0081)":{tag:"(0008,0081)",vr:"ST",name:"InstitutionAddress",vm:"1",version:"DICOM"},"(0008,0082)":{tag:"(0008,0082)",vr:"SQ",name:"InstitutionCodeSequence",vm:"1",version:"DICOM"},"(0008,0090)":{tag:"(0008,0090)",vr:"PN",name:"ReferringPhysicianName",vm:"1",version:"DICOM"},"(0008,0092)":{tag:"(0008,0092)",vr:"ST",name:"ReferringPhysicianAddress",vm:"1",version:"DICOM"},"(0008,0094)":{tag:"(0008,0094)",vr:"SH",name:"ReferringPhysicianTelephoneNumbers",vm:"1-n",version:"DICOM"},"(0008,0096)":{tag:"(0008,0096)",vr:"SQ",name:"ReferringPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0008,009C)":{tag:"(0008,009C)",vr:"PN",name:"ConsultingPhysicianName",vm:"1-n",version:"DICOM"},"(0008,009D)":{tag:"(0008,009D)",vr:"SQ",name:"ConsultingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0100)":{tag:"(0008,0100)",vr:"SH",name:"CodeValue",vm:"1",version:"DICOM"},"(0008,0101)":{tag:"(0008,0101)",vr:"LO",name:"ExtendedCodeValue",vm:"1",version:"DICOM/DICOS"},"(0008,0102)":{tag:"(0008,0102)",vr:"SH",name:"CodingSchemeDesignator",vm:"1",version:"DICOM"},"(0008,0103)":{tag:"(0008,0103)",vr:"SH",name:"CodingSchemeVersion",vm:"1",version:"DICOM"},"(0008,0104)":{tag:"(0008,0104)",vr:"LO",name:"CodeMeaning",vm:"1",version:"DICOM"},"(0008,0105)":{tag:"(0008,0105)",vr:"CS",name:"MappingResource",vm:"1",version:"DICOM"},"(0008,0106)":{tag:"(0008,0106)",vr:"DT",name:"ContextGroupVersion",vm:"1",version:"DICOM"},"(0008,0107)":{tag:"(0008,0107)",vr:"DT",name:"ContextGroupLocalVersion",vm:"1",version:"DICOM"},"(0008,0108)":{tag:"(0008,0108)",vr:"LT",name:"ExtendedCodeMeaning",vm:"1",version:"DICOM/DICOS"},"(0008,0109)":{tag:"(0008,0109)",vr:"SQ",name:"CodingSchemeResourcesSequence",vm:"1",version:"DICOM"},"(0008,010A)":{tag:"(0008,010A)",vr:"CS",name:"CodingSchemeURLType",vm:"1",version:"DICOM"},"(0008,010B)":{tag:"(0008,010B)",vr:"CS",name:"ContextGroupExtensionFlag",vm:"1",version:"DICOM"},"(0008,010C)":{tag:"(0008,010C)",vr:"UI",name:"CodingSchemeUID",vm:"1",version:"DICOM"},"(0008,010D)":{tag:"(0008,010D)",vr:"UI",name:"ContextGroupExtensionCreatorUID",vm:"1",version:"DICOM"},"(0008,010E)":{tag:"(0008,010E)",vr:"UR",name:"CodingSchemeURL",vm:"1",version:"DICOM"},"(0008,010F)":{tag:"(0008,010F)",vr:"CS",name:"ContextIdentifier",vm:"1",version:"DICOM"},"(0008,0110)":{tag:"(0008,0110)",vr:"SQ",name:"CodingSchemeIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0112)":{tag:"(0008,0112)",vr:"LO",name:"CodingSchemeRegistry",vm:"1",version:"DICOM"},"(0008,0114)":{tag:"(0008,0114)",vr:"ST",name:"CodingSchemeExternalID",vm:"1",version:"DICOM"},"(0008,0115)":{tag:"(0008,0115)",vr:"ST",name:"CodingSchemeName",vm:"1",version:"DICOM"},"(0008,0116)":{tag:"(0008,0116)",vr:"ST",name:"CodingSchemeResponsibleOrganization",vm:"1",version:"DICOM"},"(0008,0117)":{tag:"(0008,0117)",vr:"UI",name:"ContextUID",vm:"1",version:"DICOM"},"(0008,0118)":{tag:"(0008,0118)",vr:"UI",name:"MappingResourceUID",vm:"1",version:"DICOM"},"(0008,0119)":{tag:"(0008,0119)",vr:"UC",name:"LongCodeValue",vm:"1",version:"DICOM"},"(0008,0120)":{tag:"(0008,0120)",vr:"UR",name:"URNCodeValue",vm:"1",version:"DICOM"},"(0008,0121)":{tag:"(0008,0121)",vr:"SQ",name:"EquivalentCodeSequence",vm:"1",version:"DICOM"},"(0008,0122)":{tag:"(0008,0122)",vr:"LO",name:"MappingResourceName",vm:"1",version:"DICOM"},"(0008,0123)":{tag:"(0008,0123)",vr:"SQ",name:"ContextGroupIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0124)":{tag:"(0008,0124)",vr:"SQ",name:"MappingResourceIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0201)":{tag:"(0008,0201)",vr:"SH",name:"TimezoneOffsetFromUTC",vm:"1",version:"DICOM"},"(0008,0220)":{tag:"(0008,0220)",vr:"SQ",name:"ResponsibleGroupCodeSequence",vm:"1",version:"DICOM"},"(0008,0221)":{tag:"(0008,0221)",vr:"CS",name:"EquipmentModality",vm:"1",version:"DICOM"},"(0008,0222)":{tag:"(0008,0222)",vr:"LO",name:"ManufacturerRelatedModelGroup",vm:"1",version:"DICOM"},"(0008,0300)":{tag:"(0008,0300)",vr:"SQ",name:"PrivateDataElementCharacteristicsSequence",vm:"1",version:"DICOM"},"(0008,0301)":{tag:"(0008,0301)",vr:"US",name:"PrivateGroupReference",vm:"1",version:"DICOM"},"(0008,0302)":{tag:"(0008,0302)",vr:"LO",name:"PrivateCreatorReference",vm:"1",version:"DICOM"},"(0008,0303)":{tag:"(0008,0303)",vr:"CS",name:"BlockIdentifyingInformationStatus",vm:"1",version:"DICOM"},"(0008,0304)":{tag:"(0008,0304)",vr:"US",name:"NonidentifyingPrivateElements",vm:"1-n",version:"DICOM"},"(0008,0305)":{tag:"(0008,0305)",vr:"SQ",name:"DeidentificationActionSequence",vm:"1",version:"DICOM"},"(0008,0306)":{tag:"(0008,0306)",vr:"US",name:"IdentifyingPrivateElements",vm:"1-n",version:"DICOM"},"(0008,0307)":{tag:"(0008,0307)",vr:"CS",name:"DeidentificationAction",vm:"1",version:"DICOM"},"(0008,0308)":{tag:"(0008,0308)",vr:"US",name:"PrivateDataElement",vm:"1",version:"DICOM"},"(0008,0309)":{tag:"(0008,0309)",vr:"UL",name:"PrivateDataElementValueMultiplicity",vm:"1-3",version:"DICOM"},"(0008,030A)":{tag:"(0008,030A)",vr:"CS",name:"PrivateDataElementValueRepresentation",vm:"1",version:"DICOM"},"(0008,030B)":{tag:"(0008,030B)",vr:"UL",name:"PrivateDataElementNumberOfItems",vm:"1-2",version:"DICOM"},"(0008,030C)":{tag:"(0008,030C)",vr:"UC",name:"PrivateDataElementName",vm:"1",version:"DICOM"},"(0008,030D)":{tag:"(0008,030D)",vr:"UC",name:"PrivateDataElementKeyword",vm:"1",version:"DICOM"},"(0008,030E)":{tag:"(0008,030E)",vr:"UT",name:"PrivateDataElementDescription",vm:"1",version:"DICOM"},"(0008,030F)":{tag:"(0008,030F)",vr:"UT",name:"PrivateDataElementEncoding",vm:"1",version:"DICOM"},"(0008,0310)":{tag:"(0008,0310)",vr:"SQ",name:"PrivateDataElementDefinitionSequence",vm:"1",version:"DICOM"},"(0008,1010)":{tag:"(0008,1010)",vr:"SH",name:"StationName",vm:"1",version:"DICOM"},"(0008,1030)":{tag:"(0008,1030)",vr:"LO",name:"StudyDescription",vm:"1",version:"DICOM"},"(0008,1032)":{tag:"(0008,1032)",vr:"SQ",name:"ProcedureCodeSequence",vm:"1",version:"DICOM"},"(0008,103E)":{tag:"(0008,103E)",vr:"LO",name:"SeriesDescription",vm:"1",version:"DICOM"},"(0008,103F)":{tag:"(0008,103F)",vr:"SQ",name:"SeriesDescriptionCodeSequence",vm:"1",version:"DICOM"},"(0008,1040)":{tag:"(0008,1040)",vr:"LO",name:"InstitutionalDepartmentName",vm:"1",version:"DICOM"},"(0008,1041)":{tag:"(0008,1041)",vr:"SQ",name:"InstitutionalDepartmentTypeCodeSequence",vm:"1",version:"DICOM"},"(0008,1048)":{tag:"(0008,1048)",vr:"PN",name:"PhysiciansOfRecord",vm:"1-n",version:"DICOM"},"(0008,1049)":{tag:"(0008,1049)",vr:"SQ",name:"PhysiciansOfRecordIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1050)":{tag:"(0008,1050)",vr:"PN",name:"PerformingPhysicianName",vm:"1-n",version:"DICOM"},"(0008,1052)":{tag:"(0008,1052)",vr:"SQ",name:"PerformingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1060)":{tag:"(0008,1060)",vr:"PN",name:"NameOfPhysiciansReadingStudy",vm:"1-n",version:"DICOM"},"(0008,1062)":{tag:"(0008,1062)",vr:"SQ",name:"PhysiciansReadingStudyIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1070)":{tag:"(0008,1070)",vr:"PN",name:"OperatorsName",vm:"1-n",version:"DICOM"},"(0008,1072)":{tag:"(0008,1072)",vr:"SQ",name:"OperatorIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1080)":{tag:"(0008,1080)",vr:"LO",name:"AdmittingDiagnosesDescription",vm:"1-n",version:"DICOM"},"(0008,1084)":{tag:"(0008,1084)",vr:"SQ",name:"AdmittingDiagnosesCodeSequence",vm:"1",version:"DICOM"},"(0008,1090)":{tag:"(0008,1090)",vr:"LO",name:"ManufacturerModelName",vm:"1",version:"DICOM"},"(0008,1110)":{tag:"(0008,1110)",vr:"SQ",name:"ReferencedStudySequence",vm:"1",version:"DICOM"},"(0008,1111)":{tag:"(0008,1111)",vr:"SQ",name:"ReferencedPerformedProcedureStepSequence",vm:"1",version:"DICOM"},"(0008,1115)":{tag:"(0008,1115)",vr:"SQ",name:"ReferencedSeriesSequence",vm:"1",version:"DICOM"},"(0008,1120)":{tag:"(0008,1120)",vr:"SQ",name:"ReferencedPatientSequence",vm:"1",version:"DICOM"},"(0008,1125)":{tag:"(0008,1125)",vr:"SQ",name:"ReferencedVisitSequence",vm:"1",version:"DICOM"},"(0008,1134)":{tag:"(0008,1134)",vr:"SQ",name:"ReferencedStereometricInstanceSequence",vm:"1",version:"DICOM"},"(0008,113A)":{tag:"(0008,113A)",vr:"SQ",name:"ReferencedWaveformSequence",vm:"1",version:"DICOM"},"(0008,1140)":{tag:"(0008,1140)",vr:"SQ",name:"ReferencedImageSequence",vm:"1",version:"DICOM"},"(0008,114A)":{tag:"(0008,114A)",vr:"SQ",name:"ReferencedInstanceSequence",vm:"1",version:"DICOM"},"(0008,114B)":{tag:"(0008,114B)",vr:"SQ",name:"ReferencedRealWorldValueMappingInstanceSequence",vm:"1",version:"DICOM"},"(0008,1150)":{tag:"(0008,1150)",vr:"UI",name:"ReferencedSOPClassUID",vm:"1",version:"DICOM"},"(0008,1155)":{tag:"(0008,1155)",vr:"UI",name:"ReferencedSOPInstanceUID",vm:"1",version:"DICOM"},"(0008,1156)":{tag:"(0008,1156)",vr:"SQ",name:"DefinitionSourceSequence",vm:"1",version:"DICOM"},"(0008,115A)":{tag:"(0008,115A)",vr:"UI",name:"SOPClassesSupported",vm:"1-n",version:"DICOM"},"(0008,1160)":{tag:"(0008,1160)",vr:"IS",name:"ReferencedFrameNumber",vm:"1-n",version:"DICOM"},"(0008,1161)":{tag:"(0008,1161)",vr:"UL",name:"SimpleFrameList",vm:"1-n",version:"DICOM"},"(0008,1162)":{tag:"(0008,1162)",vr:"UL",name:"CalculatedFrameList",vm:"3-3n",version:"DICOM"},"(0008,1163)":{tag:"(0008,1163)",vr:"FD",name:"TimeRange",vm:"2",version:"DICOM"},"(0008,1164)":{tag:"(0008,1164)",vr:"SQ",name:"FrameExtractionSequence",vm:"1",version:"DICOM"},"(0008,1167)":{tag:"(0008,1167)",vr:"UI",name:"MultiFrameSourceSOPInstanceUID",vm:"1",version:"DICOM"},"(0008,1190)":{tag:"(0008,1190)",vr:"UR",name:"RetrieveURL",vm:"1",version:"DICOM"},"(0008,1195)":{tag:"(0008,1195)",vr:"UI",name:"TransactionUID",vm:"1",version:"DICOM"},"(0008,1196)":{tag:"(0008,1196)",vr:"US",name:"WarningReason",vm:"1",version:"DICOM"},"(0008,1197)":{tag:"(0008,1197)",vr:"US",name:"FailureReason",vm:"1",version:"DICOM"},"(0008,1198)":{tag:"(0008,1198)",vr:"SQ",name:"FailedSOPSequence",vm:"1",version:"DICOM"},"(0008,1199)":{tag:"(0008,1199)",vr:"SQ",name:"ReferencedSOPSequence",vm:"1",version:"DICOM"},"(0008,119A)":{tag:"(0008,119A)",vr:"SQ",name:"OtherFailuresSequence",vm:"1",version:"DICOM"},"(0008,1200)":{tag:"(0008,1200)",vr:"SQ",name:"StudiesContainingOtherReferencedInstancesSequence",vm:"1",version:"DICOM"},"(0008,1250)":{tag:"(0008,1250)",vr:"SQ",name:"RelatedSeriesSequence",vm:"1",version:"DICOM"},"(0008,2111)":{tag:"(0008,2111)",vr:"ST",name:"DerivationDescription",vm:"1",version:"DICOM"},"(0008,2112)":{tag:"(0008,2112)",vr:"SQ",name:"SourceImageSequence",vm:"1",version:"DICOM"},"(0008,2120)":{tag:"(0008,2120)",vr:"SH",name:"StageName",vm:"1",version:"DICOM"},"(0008,2122)":{tag:"(0008,2122)",vr:"IS",name:"StageNumber",vm:"1",version:"DICOM"},"(0008,2124)":{tag:"(0008,2124)",vr:"IS",name:"NumberOfStages",vm:"1",version:"DICOM"},"(0008,2127)":{tag:"(0008,2127)",vr:"SH",name:"ViewName",vm:"1",version:"DICOM"},"(0008,2128)":{tag:"(0008,2128)",vr:"IS",name:"ViewNumber",vm:"1",version:"DICOM"},"(0008,2129)":{tag:"(0008,2129)",vr:"IS",name:"NumberOfEventTimers",vm:"1",version:"DICOM"},"(0008,212A)":{tag:"(0008,212A)",vr:"IS",name:"NumberOfViewsInStage",vm:"1",version:"DICOM"},"(0008,2130)":{tag:"(0008,2130)",vr:"DS",name:"EventElapsedTimes",vm:"1-n",version:"DICOM"},"(0008,2132)":{tag:"(0008,2132)",vr:"LO",name:"EventTimerNames",vm:"1-n",version:"DICOM"},"(0008,2133)":{tag:"(0008,2133)",vr:"SQ",name:"EventTimerSequence",vm:"1",version:"DICOM"},"(0008,2134)":{tag:"(0008,2134)",vr:"FD",name:"EventTimeOffset",vm:"1",version:"DICOM"},"(0008,2135)":{tag:"(0008,2135)",vr:"SQ",name:"EventCodeSequence",vm:"1",version:"DICOM"},"(0008,2142)":{tag:"(0008,2142)",vr:"IS",name:"StartTrim",vm:"1",version:"DICOM"},"(0008,2143)":{tag:"(0008,2143)",vr:"IS",name:"StopTrim",vm:"1",version:"DICOM"},"(0008,2144)":{tag:"(0008,2144)",vr:"IS",name:"RecommendedDisplayFrameRate",vm:"1",version:"DICOM"},"(0008,2218)":{tag:"(0008,2218)",vr:"SQ",name:"AnatomicRegionSequence",vm:"1",version:"DICOM"},"(0008,2220)":{tag:"(0008,2220)",vr:"SQ",name:"AnatomicRegionModifierSequence",vm:"1",version:"DICOM"},"(0008,2228)":{tag:"(0008,2228)",vr:"SQ",name:"PrimaryAnatomicStructureSequence",vm:"1",version:"DICOM"},"(0008,2229)":{tag:"(0008,2229)",vr:"SQ",name:"AnatomicStructureSpaceOrRegionSequence",vm:"1",version:"DICOM"},"(0008,2230)":{tag:"(0008,2230)",vr:"SQ",name:"PrimaryAnatomicStructureModifierSequence",vm:"1",version:"DICOM"},"(0008,3001)":{tag:"(0008,3001)",vr:"SQ",name:"AlternateRepresentationSequence",vm:"1",version:"DICOM"},"(0008,3002)":{tag:"(0008,3002)",vr:"UI",name:"AvailableTransferSyntaxUID",vm:"1-n",version:"DICOM"},"(0008,3010)":{tag:"(0008,3010)",vr:"UI",name:"IrradiationEventUID",vm:"1-n",version:"DICOM"},"(0008,3011)":{tag:"(0008,3011)",vr:"SQ",name:"SourceIrradiationEventSequence",vm:"1",version:"DICOM"},"(0008,3012)":{tag:"(0008,3012)",vr:"UI",name:"RadiopharmaceuticalAdministrationEventUID",vm:"1",version:"DICOM"},"(0008,9007)":{tag:"(0008,9007)",vr:"CS",name:"FrameType",vm:"4",version:"DICOM"},"(0008,9092)":{tag:"(0008,9092)",vr:"SQ",name:"ReferencedImageEvidenceSequence",vm:"1",version:"DICOM"},"(0008,9121)":{tag:"(0008,9121)",vr:"SQ",name:"ReferencedRawDataSequence",vm:"1",version:"DICOM"},"(0008,9123)":{tag:"(0008,9123)",vr:"UI",name:"CreatorVersionUID",vm:"1",version:"DICOM"},"(0008,9124)":{tag:"(0008,9124)",vr:"SQ",name:"DerivationImageSequence",vm:"1",version:"DICOM"},"(0008,9154)":{tag:"(0008,9154)",vr:"SQ",name:"SourceImageEvidenceSequence",vm:"1",version:"DICOM"},"(0008,9205)":{tag:"(0008,9205)",vr:"CS",name:"PixelPresentation",vm:"1",version:"DICOM"},"(0008,9206)":{tag:"(0008,9206)",vr:"CS",name:"VolumetricProperties",vm:"1",version:"DICOM"},"(0008,9207)":{tag:"(0008,9207)",vr:"CS",name:"VolumeBasedCalculationTechnique",vm:"1",version:"DICOM"},"(0008,9208)":{tag:"(0008,9208)",vr:"CS",name:"ComplexImageComponent",vm:"1",version:"DICOM"},"(0008,9209)":{tag:"(0008,9209)",vr:"CS",name:"AcquisitionContrast",vm:"1",version:"DICOM"},"(0008,9215)":{tag:"(0008,9215)",vr:"SQ",name:"DerivationCodeSequence",vm:"1",version:"DICOM"},"(0008,9237)":{tag:"(0008,9237)",vr:"SQ",name:"ReferencedPresentationStateSequence",vm:"1",version:"DICOM"},"(0008,9410)":{tag:"(0008,9410)",vr:"SQ",name:"ReferencedOtherPlaneSequence",vm:"1",version:"DICOM"},"(0008,9458)":{tag:"(0008,9458)",vr:"SQ",name:"FrameDisplaySequence",vm:"1",version:"DICOM"},"(0008,9459)":{tag:"(0008,9459)",vr:"FL",name:"RecommendedDisplayFrameRateInFloat",vm:"1",version:"DICOM"},"(0008,9460)":{tag:"(0008,9460)",vr:"CS",name:"SkipFrameRangeFlag",vm:"1",version:"DICOM"},"(0010,0010)":{tag:"(0010,0010)",vr:"PN",name:"PatientName",vm:"1",version:"DICOM"},"(0010,0020)":{tag:"(0010,0020)",vr:"LO",name:"PatientID",vm:"1",version:"DICOM"},"(0010,0021)":{tag:"(0010,0021)",vr:"LO",name:"IssuerOfPatientID",vm:"1",version:"DICOM"},"(0010,0022)":{tag:"(0010,0022)",vr:"CS",name:"TypeOfPatientID",vm:"1",version:"DICOM"},"(0010,0024)":{tag:"(0010,0024)",vr:"SQ",name:"IssuerOfPatientIDQualifiersSequence",vm:"1",version:"DICOM"},"(0010,0026)":{tag:"(0010,0026)",vr:"SQ",name:"SourcePatientGroupIdentificationSequence",vm:"1",version:"DICOM"},"(0010,0027)":{tag:"(0010,0027)",vr:"SQ",name:"GroupOfPatientsIdentificationSequence",vm:"1",version:"DICOM"},"(0010,0028)":{tag:"(0010,0028)",vr:"US",name:"SubjectRelativePositionInImage",vm:"3",version:"DICOM"},"(0010,0030)":{tag:"(0010,0030)",vr:"DA",name:"PatientBirthDate",vm:"1",version:"DICOM"},"(0010,0032)":{tag:"(0010,0032)",vr:"TM",name:"PatientBirthTime",vm:"1",version:"DICOM"},"(0010,0033)":{tag:"(0010,0033)",vr:"LO",name:"PatientBirthDateInAlternativeCalendar",vm:"1",version:"DICOM"},"(0010,0034)":{tag:"(0010,0034)",vr:"LO",name:"PatientDeathDateInAlternativeCalendar",vm:"1",version:"DICOM"},"(0010,0035)":{tag:"(0010,0035)",vr:"CS",name:"PatientAlternativeCalendar",vm:"1",version:"DICOM"},"(0010,0040)":{tag:"(0010,0040)",vr:"CS",name:"PatientSex",vm:"1",version:"DICOM"},"(0010,0050)":{tag:"(0010,0050)",vr:"SQ",name:"PatientInsurancePlanCodeSequence",vm:"1",version:"DICOM"},"(0010,0101)":{tag:"(0010,0101)",vr:"SQ",name:"PatientPrimaryLanguageCodeSequence",vm:"1",version:"DICOM"},"(0010,0102)":{tag:"(0010,0102)",vr:"SQ",name:"PatientPrimaryLanguageModifierCodeSequence",vm:"1",version:"DICOM"},"(0010,0200)":{tag:"(0010,0200)",vr:"CS",name:"QualityControlSubject",vm:"1",version:"DICOM"},"(0010,0201)":{tag:"(0010,0201)",vr:"SQ",name:"QualityControlSubjectTypeCodeSequence",vm:"1",version:"DICOM"},"(0010,0212)":{tag:"(0010,0212)",vr:"UC",name:"StrainDescription",vm:"1",version:"DICOM"},"(0010,0213)":{tag:"(0010,0213)",vr:"LO",name:"StrainNomenclature",vm:"1",version:"DICOM"},"(0010,0214)":{tag:"(0010,0214)",vr:"LO",name:"StrainStockNumber",vm:"1",version:"DICOM"},"(0010,0215)":{tag:"(0010,0215)",vr:"SQ",name:"StrainSourceRegistryCodeSequence",vm:"1",version:"DICOM"},"(0010,0216)":{tag:"(0010,0216)",vr:"SQ",name:"StrainStockSequence",vm:"1",version:"DICOM"},"(0010,0217)":{tag:"(0010,0217)",vr:"LO",name:"StrainSource",vm:"1",version:"DICOM"},"(0010,0218)":{tag:"(0010,0218)",vr:"UT",name:"StrainAdditionalInformation",vm:"1",version:"DICOM"},"(0010,0219)":{tag:"(0010,0219)",vr:"SQ",name:"StrainCodeSequence",vm:"1",version:"DICOM"},"(0010,0221)":{tag:"(0010,0221)",vr:"SQ",name:"GeneticModificationsSequence",vm:"1",version:"DICOM"},"(0010,0222)":{tag:"(0010,0222)",vr:"UC",name:"GeneticModificationsDescription",vm:"1",version:"DICOM"},"(0010,0223)":{tag:"(0010,0223)",vr:"LO",name:"GeneticModificationsNomenclature",vm:"1",version:"DICOM"},"(0010,0229)":{tag:"(0010,0229)",vr:"SQ",name:"GeneticModificationsCodeSequence",vm:"1",version:"DICOM"},"(0010,1000)":{tag:"(0010,1000)",vr:"LO",name:"OtherPatientIDs",vm:"1-n",version:"DICOM"},"(0010,1001)":{tag:"(0010,1001)",vr:"PN",name:"OtherPatientNames",vm:"1-n",version:"DICOM"},"(0010,1002)":{tag:"(0010,1002)",vr:"SQ",name:"OtherPatientIDsSequence",vm:"1",version:"DICOM"},"(0010,1005)":{tag:"(0010,1005)",vr:"PN",name:"PatientBirthName",vm:"1",version:"DICOM"},"(0010,1010)":{tag:"(0010,1010)",vr:"AS",name:"PatientAge",vm:"1",version:"DICOM"},"(0010,1020)":{tag:"(0010,1020)",vr:"DS",name:"PatientSize",vm:"1",version:"DICOM"},"(0010,1021)":{tag:"(0010,1021)",vr:"SQ",name:"PatientSizeCodeSequence",vm:"1",version:"DICOM"},"(0010,1022)":{tag:"(0010,1022)",vr:"DS",name:"PatientBodyMassIndex",vm:"1",version:"DICOM"},"(0010,1023)":{tag:"(0010,1023)",vr:"DS",name:"MeasuredAPDimension",vm:"1",version:"DICOM"},"(0010,1024)":{tag:"(0010,1024)",vr:"DS",name:"MeasuredLateralDimension",vm:"1",version:"DICOM"},"(0010,1030)":{tag:"(0010,1030)",vr:"DS",name:"PatientWeight",vm:"1",version:"DICOM"},"(0010,1040)":{tag:"(0010,1040)",vr:"LO",name:"PatientAddress",vm:"1",version:"DICOM"},"(0010,1060)":{tag:"(0010,1060)",vr:"PN",name:"PatientMotherBirthName",vm:"1",version:"DICOM"},"(0010,1080)":{tag:"(0010,1080)",vr:"LO",name:"MilitaryRank",vm:"1",version:"DICOM"},"(0010,1081)":{tag:"(0010,1081)",vr:"LO",name:"BranchOfService",vm:"1",version:"DICOM"},"(0010,1090)":{tag:"(0010,1090)",vr:"LO",name:"MedicalRecordLocator",vm:"1",version:"DICOM"},"(0010,1100)":{tag:"(0010,1100)",vr:"SQ",name:"ReferencedPatientPhotoSequence",vm:"1",version:"DICOM"},"(0010,2000)":{tag:"(0010,2000)",vr:"LO",name:"MedicalAlerts",vm:"1-n",version:"DICOM"},"(0010,2110)":{tag:"(0010,2110)",vr:"LO",name:"Allergies",vm:"1-n",version:"DICOM"},"(0010,2150)":{tag:"(0010,2150)",vr:"LO",name:"CountryOfResidence",vm:"1",version:"DICOM"},"(0010,2152)":{tag:"(0010,2152)",vr:"LO",name:"RegionOfResidence",vm:"1",version:"DICOM"},"(0010,2154)":{tag:"(0010,2154)",vr:"SH",name:"PatientTelephoneNumbers",vm:"1-n",version:"DICOM"},"(0010,2155)":{tag:"(0010,2155)",vr:"LT",name:"PatientTelecomInformation",vm:"1",version:"DICOM"},"(0010,2160)":{tag:"(0010,2160)",vr:"SH",name:"EthnicGroup",vm:"1",version:"DICOM"},"(0010,2180)":{tag:"(0010,2180)",vr:"SH",name:"Occupation",vm:"1",version:"DICOM"},"(0010,21A0)":{tag:"(0010,21A0)",vr:"CS",name:"SmokingStatus",vm:"1",version:"DICOM"},"(0010,21B0)":{tag:"(0010,21B0)",vr:"LT",name:"AdditionalPatientHistory",vm:"1",version:"DICOM"},"(0010,21C0)":{tag:"(0010,21C0)",vr:"US",name:"PregnancyStatus",vm:"1",version:"DICOM"},"(0010,21D0)":{tag:"(0010,21D0)",vr:"DA",name:"LastMenstrualDate",vm:"1",version:"DICOM"},"(0010,21F0)":{tag:"(0010,21F0)",vr:"LO",name:"PatientReligiousPreference",vm:"1",version:"DICOM"},"(0010,2201)":{tag:"(0010,2201)",vr:"LO",name:"PatientSpeciesDescription",vm:"1",version:"DICOM"},"(0010,2202)":{tag:"(0010,2202)",vr:"SQ",name:"PatientSpeciesCodeSequence",vm:"1",version:"DICOM"},"(0010,2203)":{tag:"(0010,2203)",vr:"CS",name:"PatientSexNeutered",vm:"1",version:"DICOM"},"(0010,2210)":{tag:"(0010,2210)",vr:"CS",name:"AnatomicalOrientationType",vm:"1",version:"DICOM"},"(0010,2292)":{tag:"(0010,2292)",vr:"LO",name:"PatientBreedDescription",vm:"1",version:"DICOM"},"(0010,2293)":{tag:"(0010,2293)",vr:"SQ",name:"PatientBreedCodeSequence",vm:"1",version:"DICOM"},"(0010,2294)":{tag:"(0010,2294)",vr:"SQ",name:"BreedRegistrationSequence",vm:"1",version:"DICOM"},"(0010,2295)":{tag:"(0010,2295)",vr:"LO",name:"BreedRegistrationNumber",vm:"1",version:"DICOM"},"(0010,2296)":{tag:"(0010,2296)",vr:"SQ",name:"BreedRegistryCodeSequence",vm:"1",version:"DICOM"},"(0010,2297)":{tag:"(0010,2297)",vr:"PN",name:"ResponsiblePerson",vm:"1",version:"DICOM"},"(0010,2298)":{tag:"(0010,2298)",vr:"CS",name:"ResponsiblePersonRole",vm:"1",version:"DICOM"},"(0010,2299)":{tag:"(0010,2299)",vr:"LO",name:"ResponsibleOrganization",vm:"1",version:"DICOM"},"(0010,4000)":{tag:"(0010,4000)",vr:"LT",name:"PatientComments",vm:"1",version:"DICOM"},"(0010,9431)":{tag:"(0010,9431)",vr:"FL",name:"ExaminedBodyThickness",vm:"1",version:"DICOM"},"(0012,0010)":{tag:"(0012,0010)",vr:"LO",name:"ClinicalTrialSponsorName",vm:"1",version:"DICOM"},"(0012,0020)":{tag:"(0012,0020)",vr:"LO",name:"ClinicalTrialProtocolID",vm:"1",version:"DICOM"},"(0012,0021)":{tag:"(0012,0021)",vr:"LO",name:"ClinicalTrialProtocolName",vm:"1",version:"DICOM"},"(0012,0030)":{tag:"(0012,0030)",vr:"LO",name:"ClinicalTrialSiteID",vm:"1",version:"DICOM"},"(0012,0031)":{tag:"(0012,0031)",vr:"LO",name:"ClinicalTrialSiteName",vm:"1",version:"DICOM"},"(0012,0040)":{tag:"(0012,0040)",vr:"LO",name:"ClinicalTrialSubjectID",vm:"1",version:"DICOM"},"(0012,0042)":{tag:"(0012,0042)",vr:"LO",name:"ClinicalTrialSubjectReadingID",vm:"1",version:"DICOM"},"(0012,0050)":{tag:"(0012,0050)",vr:"LO",name:"ClinicalTrialTimePointID",vm:"1",version:"DICOM"},"(0012,0051)":{tag:"(0012,0051)",vr:"ST",name:"ClinicalTrialTimePointDescription",vm:"1",version:"DICOM"},"(0012,0052)":{tag:"(0012,0052)",vr:"FD",name:"LongitudinalTemporalOffsetFromEvent",vm:"1",version:"DICOM"},"(0012,0053)":{tag:"(0012,0053)",vr:"CS",name:"LongitudinalTemporalEventType",vm:"1",version:"DICOM"},"(0012,0060)":{tag:"(0012,0060)",vr:"LO",name:"ClinicalTrialCoordinatingCenterName",vm:"1",version:"DICOM"},"(0012,0062)":{tag:"(0012,0062)",vr:"CS",name:"PatientIdentityRemoved",vm:"1",version:"DICOM"},"(0012,0063)":{tag:"(0012,0063)",vr:"LO",name:"DeidentificationMethod",vm:"1-n",version:"DICOM"},"(0012,0064)":{tag:"(0012,0064)",vr:"SQ",name:"DeidentificationMethodCodeSequence",vm:"1",version:"DICOM"},"(0012,0071)":{tag:"(0012,0071)",vr:"LO",name:"ClinicalTrialSeriesID",vm:"1",version:"DICOM"},"(0012,0072)":{tag:"(0012,0072)",vr:"LO",name:"ClinicalTrialSeriesDescription",vm:"1",version:"DICOM"},"(0012,0081)":{tag:"(0012,0081)",vr:"LO",name:"ClinicalTrialProtocolEthicsCommitteeName",vm:"1",version:"DICOM"},"(0012,0082)":{tag:"(0012,0082)",vr:"LO",name:"ClinicalTrialProtocolEthicsCommitteeApprovalNumber",vm:"1",version:"DICOM"},"(0012,0083)":{tag:"(0012,0083)",vr:"SQ",name:"ConsentForClinicalTrialUseSequence",vm:"1",version:"DICOM"},"(0012,0084)":{tag:"(0012,0084)",vr:"CS",name:"DistributionType",vm:"1",version:"DICOM"},"(0012,0085)":{tag:"(0012,0085)",vr:"CS",name:"ConsentForDistributionFlag",vm:"1",version:"DICOM"},"(0014,0025)":{tag:"(0014,0025)",vr:"ST",name:"ComponentManufacturingProcedure",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0028)":{tag:"(0014,0028)",vr:"ST",name:"ComponentManufacturer",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0030)":{tag:"(0014,0030)",vr:"DS",name:"MaterialThickness",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0032)":{tag:"(0014,0032)",vr:"DS",name:"MaterialPipeDiameter",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0034)":{tag:"(0014,0034)",vr:"DS",name:"MaterialIsolationDiameter",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0042)":{tag:"(0014,0042)",vr:"ST",name:"MaterialGrade",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0044)":{tag:"(0014,0044)",vr:"ST",name:"MaterialPropertiesDescription",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0046)":{tag:"(0014,0046)",vr:"LT",name:"MaterialNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,0050)":{tag:"(0014,0050)",vr:"CS",name:"ComponentShape",vm:"1",version:"DICOM/DICONDE"},"(0014,0052)":{tag:"(0014,0052)",vr:"CS",name:"CurvatureType",vm:"1",version:"DICOM/DICONDE"},"(0014,0054)":{tag:"(0014,0054)",vr:"DS",name:"OuterDiameter",vm:"1",version:"DICOM/DICONDE"},"(0014,0056)":{tag:"(0014,0056)",vr:"DS",name:"InnerDiameter",vm:"1",version:"DICOM/DICONDE"},"(0014,1010)":{tag:"(0014,1010)",vr:"ST",name:"ActualEnvironmentalConditions",vm:"1",version:"DICOM/DICONDE"},"(0014,1020)":{tag:"(0014,1020)",vr:"DA",name:"ExpiryDate",vm:"1",version:"DICOM/DICONDE"},"(0014,1040)":{tag:"(0014,1040)",vr:"ST",name:"EnvironmentalConditions",vm:"1",version:"DICOM/DICONDE"},"(0014,2002)":{tag:"(0014,2002)",vr:"SQ",name:"EvaluatorSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2004)":{tag:"(0014,2004)",vr:"IS",name:"EvaluatorNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,2006)":{tag:"(0014,2006)",vr:"PN",name:"EvaluatorName",vm:"1",version:"DICOM/DICONDE"},"(0014,2008)":{tag:"(0014,2008)",vr:"IS",name:"EvaluationAttempt",vm:"1",version:"DICOM/DICONDE"},"(0014,2012)":{tag:"(0014,2012)",vr:"SQ",name:"IndicationSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2014)":{tag:"(0014,2014)",vr:"IS",name:"IndicationNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,2016)":{tag:"(0014,2016)",vr:"SH",name:"IndicationLabel",vm:"1",version:"DICOM/DICONDE"},"(0014,2018)":{tag:"(0014,2018)",vr:"ST",name:"IndicationDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,201A)":{tag:"(0014,201A)",vr:"CS",name:"IndicationType",vm:"1-n",version:"DICOM/DICONDE"},"(0014,201C)":{tag:"(0014,201C)",vr:"CS",name:"IndicationDisposition",vm:"1",version:"DICOM/DICONDE"},"(0014,201E)":{tag:"(0014,201E)",vr:"SQ",name:"IndicationROISequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2030)":{tag:"(0014,2030)",vr:"SQ",name:"IndicationPhysicalPropertySequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2032)":{tag:"(0014,2032)",vr:"SH",name:"PropertyLabel",vm:"1",version:"DICOM/DICONDE"},"(0014,2202)":{tag:"(0014,2202)",vr:"IS",name:"CoordinateSystemNumberOfAxes",vm:"1",version:"DICOM/DICONDE"},"(0014,2204)":{tag:"(0014,2204)",vr:"SQ",name:"CoordinateSystemAxesSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2206)":{tag:"(0014,2206)",vr:"ST",name:"CoordinateSystemAxisDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,2208)":{tag:"(0014,2208)",vr:"CS",name:"CoordinateSystemDataSetMapping",vm:"1",version:"DICOM/DICONDE"},"(0014,220A)":{tag:"(0014,220A)",vr:"IS",name:"CoordinateSystemAxisNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,220C)":{tag:"(0014,220C)",vr:"CS",name:"CoordinateSystemAxisType",vm:"1",version:"DICOM/DICONDE"},"(0014,220E)":{tag:"(0014,220E)",vr:"CS",name:"CoordinateSystemAxisUnits",vm:"1",version:"DICOM/DICONDE"},"(0014,2210)":{tag:"(0014,2210)",vr:"OB",name:"CoordinateSystemAxisValues",vm:"1",version:"DICOM/DICONDE"},"(0014,2220)":{tag:"(0014,2220)",vr:"SQ",name:"CoordinateSystemTransformSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2222)":{tag:"(0014,2222)",vr:"ST",name:"TransformDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,2224)":{tag:"(0014,2224)",vr:"IS",name:"TransformNumberOfAxes",vm:"1",version:"DICOM/DICONDE"},"(0014,2226)":{tag:"(0014,2226)",vr:"IS",name:"TransformOrderOfAxes",vm:"1-n",version:"DICOM/DICONDE"},"(0014,2228)":{tag:"(0014,2228)",vr:"CS",name:"TransformedAxisUnits",vm:"1",version:"DICOM/DICONDE"},"(0014,222A)":{tag:"(0014,222A)",vr:"DS",name:"CoordinateSystemTransformRotationAndScaleMatrix",vm:"1-n",version:"DICOM/DICONDE"},"(0014,222C)":{tag:"(0014,222C)",vr:"DS",name:"CoordinateSystemTransformTranslationMatrix",vm:"1-n",version:"DICOM/DICONDE"},"(0014,3011)":{tag:"(0014,3011)",vr:"DS",name:"InternalDetectorFrameTime",vm:"1",version:"DICOM/DICONDE"},"(0014,3012)":{tag:"(0014,3012)",vr:"DS",name:"NumberOfFramesIntegrated",vm:"1",version:"DICOM/DICONDE"},"(0014,3020)":{tag:"(0014,3020)",vr:"SQ",name:"DetectorTemperatureSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,3022)":{tag:"(0014,3022)",vr:"ST",name:"SensorName",vm:"1",version:"DICOM/DICONDE"},"(0014,3024)":{tag:"(0014,3024)",vr:"DS",name:"HorizontalOffsetOfSensor",vm:"1",version:"DICOM/DICONDE"},"(0014,3026)":{tag:"(0014,3026)",vr:"DS",name:"VerticalOffsetOfSensor",vm:"1",version:"DICOM/DICONDE"},"(0014,3028)":{tag:"(0014,3028)",vr:"DS",name:"SensorTemperature",vm:"1",version:"DICOM/DICONDE"},"(0014,3040)":{tag:"(0014,3040)",vr:"SQ",name:"DarkCurrentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,3050)":{tag:"(0014,3050)",vr:"ox",name:"DarkCurrentCounts",vm:"1",version:"DICOM/DICONDE"},"(0014,3060)":{tag:"(0014,3060)",vr:"SQ",name:"GainCorrectionReferenceSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,3070)":{tag:"(0014,3070)",vr:"ox",name:"AirCounts",vm:"1",version:"DICOM/DICONDE"},"(0014,3071)":{tag:"(0014,3071)",vr:"DS",name:"KVUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3072)":{tag:"(0014,3072)",vr:"DS",name:"MAUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3073)":{tag:"(0014,3073)",vr:"DS",name:"NumberOfFramesUsedForIntegration",vm:"1",version:"DICOM/DICONDE"},"(0014,3074)":{tag:"(0014,3074)",vr:"LO",name:"FilterMaterialUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3075)":{tag:"(0014,3075)",vr:"DS",name:"FilterThicknessUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3076)":{tag:"(0014,3076)",vr:"DA",name:"DateOfGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3077)":{tag:"(0014,3077)",vr:"TM",name:"TimeOfGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3080)":{tag:"(0014,3080)",vr:"OB",name:"BadPixelImage",vm:"1",version:"DICOM/DICONDE"},"(0014,3099)":{tag:"(0014,3099)",vr:"LT",name:"CalibrationNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4002)":{tag:"(0014,4002)",vr:"SQ",name:"PulserEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4004)":{tag:"(0014,4004)",vr:"CS",name:"PulserType",vm:"1",version:"DICOM/DICONDE"},"(0014,4006)":{tag:"(0014,4006)",vr:"LT",name:"PulserNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4008)":{tag:"(0014,4008)",vr:"SQ",name:"ReceiverEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,400A)":{tag:"(0014,400A)",vr:"CS",name:"AmplifierType",vm:"1",version:"DICOM/DICONDE"},"(0014,400C)":{tag:"(0014,400C)",vr:"LT",name:"ReceiverNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,400E)":{tag:"(0014,400E)",vr:"SQ",name:"PreAmplifierEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,400F)":{tag:"(0014,400F)",vr:"LT",name:"PreAmplifierNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4010)":{tag:"(0014,4010)",vr:"SQ",name:"TransmitTransducerSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4011)":{tag:"(0014,4011)",vr:"SQ",name:"ReceiveTransducerSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4012)":{tag:"(0014,4012)",vr:"US",name:"NumberOfElements",vm:"1",version:"DICOM/DICONDE"},"(0014,4013)":{tag:"(0014,4013)",vr:"CS",name:"ElementShape",vm:"1",version:"DICOM/DICONDE"},"(0014,4014)":{tag:"(0014,4014)",vr:"DS",name:"ElementDimensionA",vm:"1",version:"DICOM/DICONDE"},"(0014,4015)":{tag:"(0014,4015)",vr:"DS",name:"ElementDimensionB",vm:"1",version:"DICOM/DICONDE"},"(0014,4016)":{tag:"(0014,4016)",vr:"DS",name:"ElementPitchA",vm:"1",version:"DICOM/DICONDE"},"(0014,4017)":{tag:"(0014,4017)",vr:"DS",name:"MeasuredBeamDimensionA",vm:"1",version:"DICOM/DICONDE"},"(0014,4018)":{tag:"(0014,4018)",vr:"DS",name:"MeasuredBeamDimensionB",vm:"1",version:"DICOM/DICONDE"},"(0014,4019)":{tag:"(0014,4019)",vr:"DS",name:"LocationOfMeasuredBeamDiameter",vm:"1",version:"DICOM/DICONDE"},"(0014,401A)":{tag:"(0014,401A)",vr:"DS",name:"NominalFrequency",vm:"1",version:"DICOM/DICONDE"},"(0014,401B)":{tag:"(0014,401B)",vr:"DS",name:"MeasuredCenterFrequency",vm:"1",version:"DICOM/DICONDE"},"(0014,401C)":{tag:"(0014,401C)",vr:"DS",name:"MeasuredBandwidth",vm:"1",version:"DICOM/DICONDE"},"(0014,401D)":{tag:"(0014,401D)",vr:"DS",name:"ElementPitchB",vm:"1",version:"DICOM/DICONDE"},"(0014,4020)":{tag:"(0014,4020)",vr:"SQ",name:"PulserSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4022)":{tag:"(0014,4022)",vr:"DS",name:"PulseWidth",vm:"1",version:"DICOM/DICONDE"},"(0014,4024)":{tag:"(0014,4024)",vr:"DS",name:"ExcitationFrequency",vm:"1",version:"DICOM/DICONDE"},"(0014,4026)":{tag:"(0014,4026)",vr:"CS",name:"ModulationType",vm:"1",version:"DICOM/DICONDE"},"(0014,4028)":{tag:"(0014,4028)",vr:"DS",name:"Damping",vm:"1",version:"DICOM/DICONDE"},"(0014,4030)":{tag:"(0014,4030)",vr:"SQ",name:"ReceiverSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4031)":{tag:"(0014,4031)",vr:"DS",name:"AcquiredSoundpathLength",vm:"1",version:"DICOM/DICONDE"},"(0014,4032)":{tag:"(0014,4032)",vr:"CS",name:"AcquisitionCompressionType",vm:"1",version:"DICOM/DICONDE"},"(0014,4033)":{tag:"(0014,4033)",vr:"IS",name:"AcquisitionSampleSize",vm:"1",version:"DICOM/DICONDE"},"(0014,4034)":{tag:"(0014,4034)",vr:"DS",name:"RectifierSmoothing",vm:"1",version:"DICOM/DICONDE"},"(0014,4035)":{tag:"(0014,4035)",vr:"SQ",name:"DACSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4036)":{tag:"(0014,4036)",vr:"CS",name:"DACType",vm:"1",version:"DICOM/DICONDE"},"(0014,4038)":{tag:"(0014,4038)",vr:"DS",name:"DACGainPoints",vm:"1-n",version:"DICOM/DICONDE"},"(0014,403A)":{tag:"(0014,403A)",vr:"DS",name:"DACTimePoints",vm:"1-n",version:"DICOM/DICONDE"},"(0014,403C)":{tag:"(0014,403C)",vr:"DS",name:"DACAmplitude",vm:"1-n",version:"DICOM/DICONDE"},"(0014,4040)":{tag:"(0014,4040)",vr:"SQ",name:"PreAmplifierSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4050)":{tag:"(0014,4050)",vr:"SQ",name:"TransmitTransducerSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4051)":{tag:"(0014,4051)",vr:"SQ",name:"ReceiveTransducerSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4052)":{tag:"(0014,4052)",vr:"DS",name:"IncidentAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,4054)":{tag:"(0014,4054)",vr:"ST",name:"CouplingTechnique",vm:"1",version:"DICOM/DICONDE"},"(0014,4056)":{tag:"(0014,4056)",vr:"ST",name:"CouplingMedium",vm:"1",version:"DICOM/DICONDE"},"(0014,4057)":{tag:"(0014,4057)",vr:"DS",name:"CouplingVelocity",vm:"1",version:"DICOM/DICONDE"},"(0014,4058)":{tag:"(0014,4058)",vr:"DS",name:"ProbeCenterLocationX",vm:"1",version:"DICOM/DICONDE"},"(0014,4059)":{tag:"(0014,4059)",vr:"DS",name:"ProbeCenterLocationZ",vm:"1",version:"DICOM/DICONDE"},"(0014,405A)":{tag:"(0014,405A)",vr:"DS",name:"SoundPathLength",vm:"1",version:"DICOM/DICONDE"},"(0014,405C)":{tag:"(0014,405C)",vr:"ST",name:"DelayLawIdentifier",vm:"1",version:"DICOM/DICONDE"},"(0014,4060)":{tag:"(0014,4060)",vr:"SQ",name:"GateSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4062)":{tag:"(0014,4062)",vr:"DS",name:"GateThreshold",vm:"1",version:"DICOM/DICONDE"},"(0014,4064)":{tag:"(0014,4064)",vr:"DS",name:"VelocityOfSound",vm:"1",version:"DICOM/DICONDE"},"(0014,4070)":{tag:"(0014,4070)",vr:"SQ",name:"CalibrationSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4072)":{tag:"(0014,4072)",vr:"ST",name:"CalibrationProcedure",vm:"1",version:"DICOM/DICONDE"},"(0014,4074)":{tag:"(0014,4074)",vr:"SH",name:"ProcedureVersion",vm:"1",version:"DICOM/DICONDE"},"(0014,4076)":{tag:"(0014,4076)",vr:"DA",name:"ProcedureCreationDate",vm:"1",version:"DICOM/DICONDE"},"(0014,4078)":{tag:"(0014,4078)",vr:"DA",name:"ProcedureExpirationDate",vm:"1",version:"DICOM/DICONDE"},"(0014,407A)":{tag:"(0014,407A)",vr:"DA",name:"ProcedureLastModifiedDate",vm:"1",version:"DICOM/DICONDE"},"(0014,407C)":{tag:"(0014,407C)",vr:"TM",name:"CalibrationTime",vm:"1-n",version:"DICOM/DICONDE"},"(0014,407E)":{tag:"(0014,407E)",vr:"DA",name:"CalibrationDate",vm:"1-n",version:"DICOM/DICONDE"},"(0014,4080)":{tag:"(0014,4080)",vr:"SQ",name:"ProbeDriveEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4081)":{tag:"(0014,4081)",vr:"CS",name:"DriveType",vm:"1",version:"DICOM/DICONDE"},"(0014,4082)":{tag:"(0014,4082)",vr:"LT",name:"ProbeDriveNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4083)":{tag:"(0014,4083)",vr:"SQ",name:"DriveProbeSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4084)":{tag:"(0014,4084)",vr:"DS",name:"ProbeInductance",vm:"1",version:"DICOM/DICONDE"},"(0014,4085)":{tag:"(0014,4085)",vr:"DS",name:"ProbeResistance",vm:"1",version:"DICOM/DICONDE"},"(0014,4086)":{tag:"(0014,4086)",vr:"SQ",name:"ReceiveProbeSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4087)":{tag:"(0014,4087)",vr:"SQ",name:"ProbeDriveSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4088)":{tag:"(0014,4088)",vr:"DS",name:"BridgeResistors",vm:"1",version:"DICOM/DICONDE"},"(0014,4089)":{tag:"(0014,4089)",vr:"DS",name:"ProbeOrientationAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,408B)":{tag:"(0014,408B)",vr:"DS",name:"UserSelectedGainY",vm:"1",version:"DICOM/DICONDE"},"(0014,408C)":{tag:"(0014,408C)",vr:"DS",name:"UserSelectedPhase",vm:"1",version:"DICOM/DICONDE"},"(0014,408D)":{tag:"(0014,408D)",vr:"DS",name:"UserSelectedOffsetX",vm:"1",version:"DICOM/DICONDE"},"(0014,408E)":{tag:"(0014,408E)",vr:"DS",name:"UserSelectedOffsetY",vm:"1",version:"DICOM/DICONDE"},"(0014,4091)":{tag:"(0014,4091)",vr:"SQ",name:"ChannelSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4092)":{tag:"(0014,4092)",vr:"DS",name:"ChannelThreshold",vm:"1",version:"DICOM/DICONDE"},"(0014,409A)":{tag:"(0014,409A)",vr:"SQ",name:"ScannerSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,409B)":{tag:"(0014,409B)",vr:"ST",name:"ScanProcedure",vm:"1",version:"DICOM/DICONDE"},"(0014,409C)":{tag:"(0014,409C)",vr:"DS",name:"TranslationRateX",vm:"1",version:"DICOM/DICONDE"},"(0014,409D)":{tag:"(0014,409D)",vr:"DS",name:"TranslationRateY",vm:"1",version:"DICOM/DICONDE"},"(0014,409F)":{tag:"(0014,409F)",vr:"DS",name:"ChannelOverlap",vm:"1",version:"DICOM/DICONDE"},"(0014,40A0)":{tag:"(0014,40A0)",vr:"LO",name:"ImageQualityIndicatorType",vm:"1",version:"DICOM/DICONDE"},"(0014,40A1)":{tag:"(0014,40A1)",vr:"LO",name:"ImageQualityIndicatorMaterial",vm:"1",version:"DICOM/DICONDE"},"(0014,40A2)":{tag:"(0014,40A2)",vr:"LO",name:"ImageQualityIndicatorSize",vm:"1",version:"DICOM/DICONDE"},"(0014,5002)":{tag:"(0014,5002)",vr:"IS",name:"LINACEnergy",vm:"1",version:"DICOM/DICONDE"},"(0014,5004)":{tag:"(0014,5004)",vr:"IS",name:"LINACOutput",vm:"1",version:"DICOM/DICONDE"},"(0014,5100)":{tag:"(0014,5100)",vr:"US",name:"ActiveAperture",vm:"1",version:"DICOM/DICONDE"},"(0014,5101)":{tag:"(0014,5101)",vr:"DS",name:"TotalAperture",vm:"1",version:"DICOM/DICONDE"},"(0014,5102)":{tag:"(0014,5102)",vr:"DS",name:"ApertureElevation",vm:"1",version:"DICOM/DICONDE"},"(0014,5103)":{tag:"(0014,5103)",vr:"DS",name:"MainLobeAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5104)":{tag:"(0014,5104)",vr:"DS",name:"MainRoofAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5105)":{tag:"(0014,5105)",vr:"CS",name:"ConnectorType",vm:"1",version:"DICOM/DICONDE"},"(0014,5106)":{tag:"(0014,5106)",vr:"SH",name:"WedgeModelNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,5107)":{tag:"(0014,5107)",vr:"DS",name:"WedgeAngleFloat",vm:"1",version:"DICOM/DICONDE"},"(0014,5108)":{tag:"(0014,5108)",vr:"DS",name:"WedgeRoofAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5109)":{tag:"(0014,5109)",vr:"CS",name:"WedgeElement1Position",vm:"1",version:"DICOM/DICONDE"},"(0014,510A)":{tag:"(0014,510A)",vr:"DS",name:"WedgeMaterialVelocity",vm:"1",version:"DICOM/DICONDE"},"(0014,510B)":{tag:"(0014,510B)",vr:"SH",name:"WedgeMaterial",vm:"1",version:"DICOM/DICONDE"},"(0014,510C)":{tag:"(0014,510C)",vr:"DS",name:"WedgeOffsetZ",vm:"1",version:"DICOM/DICONDE"},"(0014,510D)":{tag:"(0014,510D)",vr:"DS",name:"WedgeOriginOffsetX",vm:"1",version:"DICOM/DICONDE"},"(0014,510E)":{tag:"(0014,510E)",vr:"DS",name:"WedgeTimeDelay",vm:"1",version:"DICOM/DICONDE"},"(0014,510F)":{tag:"(0014,510F)",vr:"SH",name:"WedgeName",vm:"1",version:"DICOM/DICONDE"},"(0014,5110)":{tag:"(0014,5110)",vr:"SH",name:"WedgeManufacturerName",vm:"1",version:"DICOM/DICONDE"},"(0014,5111)":{tag:"(0014,5111)",vr:"LO",name:"WedgeDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,5112)":{tag:"(0014,5112)",vr:"DS",name:"NominalBeamAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5113)":{tag:"(0014,5113)",vr:"DS",name:"WedgeOffsetX",vm:"1",version:"DICOM/DICONDE"},"(0014,5114)":{tag:"(0014,5114)",vr:"DS",name:"WedgeOffsetY",vm:"1",version:"DICOM/DICONDE"},"(0014,5115)":{tag:"(0014,5115)",vr:"DS",name:"WedgeTotalLength",vm:"1",version:"DICOM/DICONDE"},"(0014,5116)":{tag:"(0014,5116)",vr:"DS",name:"WedgeInContactLength",vm:"1",version:"DICOM/DICONDE"},"(0014,5117)":{tag:"(0014,5117)",vr:"DS",name:"WedgeFrontGap",vm:"1",version:"DICOM/DICONDE"},"(0014,5118)":{tag:"(0014,5118)",vr:"DS",name:"WedgeTotalHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,5119)":{tag:"(0014,5119)",vr:"DS",name:"WedgeFrontHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,511A)":{tag:"(0014,511A)",vr:"DS",name:"WedgeRearHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,511B)":{tag:"(0014,511B)",vr:"DS",name:"WedgeTotalWidth",vm:"1",version:"DICOM/DICONDE"},"(0014,511C)":{tag:"(0014,511C)",vr:"DS",name:"WedgeInContactWidth",vm:"1",version:"DICOM/DICONDE"},"(0014,511D)":{tag:"(0014,511D)",vr:"DS",name:"WedgeChamferHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,511E)":{tag:"(0014,511E)",vr:"CS",name:"WedgeCurve",vm:"1",version:"DICOM/DICONDE"},"(0014,511F)":{tag:"(0014,511F)",vr:"DS",name:"RadiusAlongWedge",vm:"1",version:"DICOM/DICONDE"},"(0012,0086)":{tag:"(0012,0086)",vr:"DA",name:"EthicsCommitteeApprovalEffectivenessStartDate",vm:"1",version:"DICOM"},"(0012,0087)":{tag:"(0012,0087)",vr:"DA",name:"EthicsCommitteeApprovalEffectivenessEndDate",vm:"1",version:"DICOM"},"(0014,0100)":{tag:"(0014,0100)",vr:"LO",name:"ComponentWelderIDs",vm:"1-n",version:"DICOM"},"(0014,0101)":{tag:"(0014,0101)",vr:"CS",name:"SecondaryApprovalStatus",vm:"1",version:"DICOM"},"(0014,0102)":{tag:"(0014,0102)",vr:"DA",name:"SecondaryReviewDate",vm:"1",version:"DICOM"},"(0014,0103)":{tag:"(0014,0103)",vr:"TM",name:"SecondaryReviewTime",vm:"1",version:"DICOM"},"(0014,0104)":{tag:"(0014,0104)",vr:"PN",name:"SecondaryReviewerName",vm:"1",version:"DICOM"},"(0014,0105)":{tag:"(0014,0105)",vr:"ST",name:"RepairID",vm:"1",version:"DICOM"},"(0014,0106)":{tag:"(0014,0106)",vr:"SQ",name:"MultipleComponentApprovalSequence",vm:"1",version:"DICOM"},"(0014,0107)":{tag:"(0014,0107)",vr:"CS",name:"OtherApprovalStatus",vm:"1-n",version:"DICOM"},"(0014,0108)":{tag:"(0014,0108)",vr:"CS",name:"OtherSecondaryApprovalStatus",vm:"1-n",version:"DICOM"},"(0016,0001)":{tag:"(0016,0001)",vr:"DS",name:"WhitePoint",vm:"1",version:"DICOM"},"(0016,0002)":{tag:"(0016,0002)",vr:"DS",name:"PrimaryChromaticities",vm:"3",version:"DICOM"},"(0016,0003)":{tag:"(0016,0003)",vr:"UT",name:"BatteryLevel",vm:"1",version:"DICOM"},"(0016,0004)":{tag:"(0016,0004)",vr:"DS",name:"ExposureTimeInSeconds",vm:"1",version:"DICOM"},"(0016,0005)":{tag:"(0016,0005)",vr:"DS",name:"FNumber",vm:"1",version:"DICOM"},"(0016,0006)":{tag:"(0016,0006)",vr:"IS",name:"OECFRows",vm:"1",version:"DICOM"},"(0016,0007)":{tag:"(0016,0007)",vr:"IS",name:"OECFColumns",vm:"1",version:"DICOM"},"(0016,0008)":{tag:"(0016,0008)",vr:"UC",name:"OECFColumnNames",vm:"1-n",version:"DICOM"},"(0016,0009)":{tag:"(0016,0009)",vr:"DS",name:"OECFValues",vm:"1-n",version:"DICOM"},"(0016,000A)":{tag:"(0016,000A)",vr:"IS",name:"SpatialFrequencyResponseRows",vm:"1",version:"DICOM"},"(0016,000B)":{tag:"(0016,000B)",vr:"IS",name:"SpatialFrequencyResponseColumns",vm:"1",version:"DICOM"},"(0016,000C)":{tag:"(0016,000C)",vr:"UC",name:"SpatialFrequencyResponseColumnNames",vm:"1-n",version:"DICOM"},"(0016,000D)":{tag:"(0016,000D)",vr:"DS",name:"SpatialFrequencyResponseValues",vm:"1-n",version:"DICOM"},"(0016,000E)":{tag:"(0016,000E)",vr:"IS",name:"ColorFilterArrayPatternRows",vm:"1",version:"DICOM"},"(0016,000F)":{tag:"(0016,000F)",vr:"IS",name:"ColorFilterArrayPatternColumns",vm:"1",version:"DICOM"},"(0016,0010)":{tag:"(0016,0010)",vr:"DS",name:"ColorFilterArrayPatternValues",vm:"1-n",version:"DICOM"},"(0016,0011)":{tag:"(0016,0011)",vr:"US",name:"FlashFiringStatus",vm:"1",version:"DICOM"},"(0016,0012)":{tag:"(0016,0012)",vr:"US",name:"FlashReturnStatus",vm:"1",version:"DICOM"},"(0016,0013)":{tag:"(0016,0013)",vr:"US",name:"FlashMode",vm:"1",version:"DICOM"},"(0016,0014)":{tag:"(0016,0014)",vr:"US",name:"FlashFunctionPresent",vm:"1",version:"DICOM"},"(0016,0015)":{tag:"(0016,0015)",vr:"US",name:"FlashRedEyeMode",vm:"1",version:"DICOM"},"(0016,0016)":{tag:"(0016,0016)",vr:"US",name:"ExposureProgram",vm:"1",version:"DICOM"},"(0016,0017)":{tag:"(0016,0017)",vr:"UT",name:"SpectralSensitivity",vm:"1",version:"DICOM"},"(0016,0018)":{tag:"(0016,0018)",vr:"IS",name:"PhotographicSensitivity",vm:"1",version:"DICOM"},"(0016,0019)":{tag:"(0016,0019)",vr:"IS",name:"SelfTimerMode",vm:"1",version:"DICOM"},"(0016,001A)":{tag:"(0016,001A)",vr:"US",name:"SensitivityType",vm:"1",version:"DICOM"},"(0016,001B)":{tag:"(0016,001B)",vr:"IS",name:"StandardOutputSensitivity",vm:"1",version:"DICOM"},"(0016,001C)":{tag:"(0016,001C)",vr:"IS",name:"RecommendedExposureIndex",vm:"1",version:"DICOM"},"(0016,001D)":{tag:"(0016,001D)",vr:"IS",name:"ISOSpeed",vm:"1",version:"DICOM"},"(0016,001E)":{tag:"(0016,001E)",vr:"IS",name:"ISOSpeedLatitudeyyy",vm:"1",version:"DICOM"},"(0016,001F)":{tag:"(0016,001F)",vr:"IS",name:"ISOSpeedLatitudezzz",vm:"1",version:"DICOM"},"(0016,0020)":{tag:"(0016,0020)",vr:"UT",name:"EXIFVersion",vm:"1",version:"DICOM"},"(0016,0021)":{tag:"(0016,0021)",vr:"DS",name:"ShutterSpeedValue",vm:"1",version:"DICOM"},"(0016,0022)":{tag:"(0016,0022)",vr:"DS",name:"ApertureValue",vm:"1",version:"DICOM"},"(0016,0023)":{tag:"(0016,0023)",vr:"DS",name:"BrightnessValue",vm:"1",version:"DICOM"},"(0016,0024)":{tag:"(0016,0024)",vr:"DS",name:"ExposureBiasValue",vm:"1",version:"DICOM"},"(0016,0025)":{tag:"(0016,0025)",vr:"DS",name:"MaxApertureValue",vm:"1",version:"DICOM"},"(0016,0026)":{tag:"(0016,0026)",vr:"DS",name:"SubjectDistance",vm:"1",version:"DICOM"},"(0016,0027)":{tag:"(0016,0027)",vr:"US",name:"MeteringMode",vm:"1",version:"DICOM"},"(0016,0028)":{tag:"(0016,0028)",vr:"US",name:"LightSource",vm:"1",version:"DICOM"},"(0016,0029)":{tag:"(0016,0029)",vr:"DS",name:"FocalLength",vm:"1",version:"DICOM"},"(0016,002A)":{tag:"(0016,002A)",vr:"IS",name:"SubjectArea",vm:"2-4",version:"DICOM"},"(0016,002B)":{tag:"(0016,002B)",vr:"OB",name:"MakerNote",vm:"1",version:"DICOM"},"(0016,0030)":{tag:"(0016,0030)",vr:"DS",name:"Temperature",vm:"1",version:"DICOM"},"(0016,0031)":{tag:"(0016,0031)",vr:"DS",name:"Humidity",vm:"1",version:"DICOM"},"(0016,0032)":{tag:"(0016,0032)",vr:"DS",name:"Pressure",vm:"1",version:"DICOM"},"(0016,0033)":{tag:"(0016,0033)",vr:"DS",name:"WaterDepth",vm:"1",version:"DICOM"},"(0016,0034)":{tag:"(0016,0034)",vr:"DS",name:"Acceleration",vm:"1",version:"DICOM"},"(0016,0035)":{tag:"(0016,0035)",vr:"DS",name:"CameraElevationAngle",vm:"1",version:"DICOM"},"(0016,0036)":{tag:"(0016,0036)",vr:"DS",name:"FlashEnergy",vm:"1-2",version:"DICOM"},"(0016,0037)":{tag:"(0016,0037)",vr:"IS",name:"SubjectLocation",vm:"2",version:"DICOM"},"(0016,0038)":{tag:"(0016,0038)",vr:"DS",name:"PhotographicExposureIndex",vm:"1",version:"DICOM"},"(0016,0039)":{tag:"(0016,0039)",vr:"US",name:"SensingMethod",vm:"1",version:"DICOM"},"(0016,003A)":{tag:"(0016,003A)",vr:"US",name:"FileSource",vm:"1",version:"DICOM"},"(0016,003B)":{tag:"(0016,003B)",vr:"US",name:"SceneType",vm:"1",version:"DICOM"},"(0016,0041)":{tag:"(0016,0041)",vr:"US",name:"CustomRendered",vm:"1",version:"DICOM"},"(0016,0042)":{tag:"(0016,0042)",vr:"US",name:"ExposureMode",vm:"1",version:"DICOM"},"(0016,0043)":{tag:"(0016,0043)",vr:"US",name:"WhiteBalance",vm:"1",version:"DICOM"},"(0016,0044)":{tag:"(0016,0044)",vr:"DS",name:"DigitalZoomRatio",vm:"1",version:"DICOM"},"(0016,0045)":{tag:"(0016,0045)",vr:"IS",name:"FocalLengthIn35mmFilm",vm:"1",version:"DICOM"},"(0016,0046)":{tag:"(0016,0046)",vr:"US",name:"SceneCaptureType",vm:"1",version:"DICOM"},"(0016,0047)":{tag:"(0016,0047)",vr:"US",name:"GainControl",vm:"1",version:"DICOM"},"(0016,0048)":{tag:"(0016,0048)",vr:"US",name:"Contrast",vm:"1",version:"DICOM"},"(0016,0049)":{tag:"(0016,0049)",vr:"US",name:"Saturation",vm:"1",version:"DICOM"},"(0016,004A)":{tag:"(0016,004A)",vr:"US",name:"Sharpness",vm:"1",version:"DICOM"},"(0016,004B)":{tag:"(0016,004B)",vr:"OB",name:"DeviceSettingDescription",vm:"1",version:"DICOM"},"(0016,004C)":{tag:"(0016,004C)",vr:"US",name:"SubjectDistanceRange",vm:"1",version:"DICOM"},"(0016,004D)":{tag:"(0016,004D)",vr:"UT",name:"CameraOwnerName",vm:"1",version:"DICOM"},"(0016,004E)":{tag:"(0016,004E)",vr:"DS",name:"LensSpecification",vm:"4",version:"DICOM"},"(0016,004F)":{tag:"(0016,004F)",vr:"UT",name:"LensMake",vm:"1",version:"DICOM"},"(0016,0050)":{tag:"(0016,0050)",vr:"UT",name:"LensModel",vm:"1",version:"DICOM"},"(0016,0051)":{tag:"(0016,0051)",vr:"UT",name:"LensSerialNumber",vm:"1",version:"DICOM"},"(0016,0061)":{tag:"(0016,0061)",vr:"CS",name:"InteroperabilityIndex",vm:"1",version:"DICOM"},"(0016,0062)":{tag:"(0016,0062)",vr:"OB",name:"InteroperabilityVersion",vm:"1",version:"DICOM"},"(0016,0070)":{tag:"(0016,0070)",vr:"OB",name:"GPSVersionID",vm:"1",version:"DICOM"},"(0016,0071)":{tag:"(0016,0071)",vr:"CS",name:"GPSLatitudeRef",vm:"1",version:"DICOM"},"(0016,0072)":{tag:"(0016,0072)",vr:"DS",name:"GPSLatitude",vm:"3",version:"DICOM"},"(0016,0073)":{tag:"(0016,0073)",vr:"CS",name:"GPSLongitudeRef",vm:"1",version:"DICOM"},"(0016,0074)":{tag:"(0016,0074)",vr:"DS",name:"GPSLongitude",vm:"3",version:"DICOM"},"(0016,0075)":{tag:"(0016,0075)",vr:"US",name:"GPSAltitudeRef",vm:"1",version:"DICOM"},"(0016,0076)":{tag:"(0016,0076)",vr:"DS",name:"GPSAltitude",vm:"1",version:"DICOM"},"(0016,0077)":{tag:"(0016,0077)",vr:"DT",name:"GPSTimeStamp",vm:"1",version:"DICOM"},"(0016,0078)":{tag:"(0016,0078)",vr:"UT",name:"GPSSatellites",vm:"1",version:"DICOM"},"(0016,0079)":{tag:"(0016,0079)",vr:"CS",name:"GPSStatus",vm:"1",version:"DICOM"},"(0016,007A)":{tag:"(0016,007A)",vr:"CS",name:"GPSMeasureMode",vm:"1",version:"DICOM"},"(0016,007B)":{tag:"(0016,007B)",vr:"DS",name:"GPSDOP",vm:"1",version:"DICOM"},"(0016,007C)":{tag:"(0016,007C)",vr:"CS",name:"GPSSpeedRef",vm:"1",version:"DICOM"},"(0016,007D)":{tag:"(0016,007D)",vr:"DS",name:"GPSSpeed",vm:"1",version:"DICOM"},"(0016,007E)":{tag:"(0016,007E)",vr:"CS",name:"GPSTrackRef",vm:"1",version:"DICOM"},"(0016,007F)":{tag:"(0016,007F)",vr:"DS",name:"GPSTrack",vm:"1",version:"DICOM"},"(0016,0080)":{tag:"(0016,0080)",vr:"CS",name:"GPSImgDirectionRef",vm:"1",version:"DICOM"},"(0016,0081)":{tag:"(0016,0081)",vr:"DS",name:"GPSImgDirection",vm:"1",version:"DICOM"},"(0016,0082)":{tag:"(0016,0082)",vr:"UT",name:"GPSMapDatum",vm:"1",version:"DICOM"},"(0016,0083)":{tag:"(0016,0083)",vr:"CS",name:"GPSDestLatitudeRef",vm:"1",version:"DICOM"},"(0016,0084)":{tag:"(0016,0084)",vr:"DS",name:"GPSDestLatitude",vm:"3",version:"DICOM"},"(0016,0085)":{tag:"(0016,0085)",vr:"CS",name:"GPSDestLongitudeRef",vm:"1",version:"DICOM"},"(0016,0086)":{tag:"(0016,0086)",vr:"DS",name:"GPSDestLongitude",vm:"3",version:"DICOM"},"(0016,0087)":{tag:"(0016,0087)",vr:"CS",name:"GPSDestBearingRef",vm:"1",version:"DICOM"},"(0016,0088)":{tag:"(0016,0088)",vr:"DS",name:"GPSDestBearing",vm:"1",version:"DICOM"},"(0016,0089)":{tag:"(0016,0089)",vr:"CS",name:"GPSDestDistanceRef",vm:"1",version:"DICOM"},"(0016,008A)":{tag:"(0016,008A)",vr:"DS",name:"GPSDestDistance",vm:"1",version:"DICOM"},"(0016,008B)":{tag:"(0016,008B)",vr:"OB",name:"GPSProcessingMethod",vm:"1",version:"DICOM"},"(0016,008C)":{tag:"(0016,008C)",vr:"OB",name:"GPSAreaInformation",vm:"1",version:"DICOM"},"(0016,008D)":{tag:"(0016,008D)",vr:"DT",name:"GPSDateStamp",vm:"1",version:"DICOM"},"(0016,008E)":{tag:"(0016,008E)",vr:"IS",name:"GPSDifferential",vm:"1",version:"DICOM"},"(0016,1001)":{tag:"(0016,1001)",vr:"CS",name:"LightSourcePolarization",vm:"1",version:"DICOM"},"(0016,1002)":{tag:"(0016,1002)",vr:"DS",name:"EmitterColorTemperature",vm:"1",version:"DICOM"},"(0016,1003)":{tag:"(0016,1003)",vr:"CS",name:"ContactMethod",vm:"1",version:"DICOM"},"(0016,1004)":{tag:"(0016,1004)",vr:"CS",name:"ImmersionMedia",vm:"1-n",version:"DICOM"},"(0016,1005)":{tag:"(0016,1005)",vr:"DS",name:"OpticalMagnificationFactor",vm:"1",version:"DICOM"},"(0018,0010)":{tag:"(0018,0010)",vr:"LO",name:"ContrastBolusAgent",vm:"1",version:"DICOM"},"(0018,0012)":{tag:"(0018,0012)",vr:"SQ",name:"ContrastBolusAgentSequence",vm:"1",version:"DICOM"},"(0018,0013)":{tag:"(0018,0013)",vr:"FL",name:"ContrastBolusT1Relaxivity",vm:"1",version:"DICOM"},"(0018,0014)":{tag:"(0018,0014)",vr:"SQ",name:"ContrastBolusAdministrationRouteSequence",vm:"1",version:"DICOM"},"(0018,0015)":{tag:"(0018,0015)",vr:"CS",name:"BodyPartExamined",vm:"1",version:"DICOM"},"(0018,0020)":{tag:"(0018,0020)",vr:"CS",name:"ScanningSequence",vm:"1-n",version:"DICOM"},"(0018,0021)":{tag:"(0018,0021)",vr:"CS",name:"SequenceVariant",vm:"1-n",version:"DICOM"},"(0018,0022)":{tag:"(0018,0022)",vr:"CS",name:"ScanOptions",vm:"1-n",version:"DICOM"},"(0018,0023)":{tag:"(0018,0023)",vr:"CS",name:"MRAcquisitionType",vm:"1",version:"DICOM"},"(0018,0024)":{tag:"(0018,0024)",vr:"SH",name:"SequenceName",vm:"1",version:"DICOM"},"(0018,0025)":{tag:"(0018,0025)",vr:"CS",name:"AngioFlag",vm:"1",version:"DICOM"},"(0018,0026)":{tag:"(0018,0026)",vr:"SQ",name:"InterventionDrugInformationSequence",vm:"1",version:"DICOM"},"(0018,0027)":{tag:"(0018,0027)",vr:"TM",name:"InterventionDrugStopTime",vm:"1",version:"DICOM"},"(0018,0028)":{tag:"(0018,0028)",vr:"DS",name:"InterventionDrugDose",vm:"1",version:"DICOM"},"(0018,0029)":{tag:"(0018,0029)",vr:"SQ",name:"InterventionDrugCodeSequence",vm:"1",version:"DICOM"},"(0018,002A)":{tag:"(0018,002A)",vr:"SQ",name:"AdditionalDrugSequence",vm:"1",version:"DICOM"},"(0018,0031)":{tag:"(0018,0031)",vr:"LO",name:"Radiopharmaceutical",vm:"1",version:"DICOM"},"(0018,0034)":{tag:"(0018,0034)",vr:"LO",name:"InterventionDrugName",vm:"1",version:"DICOM"},"(0018,0035)":{tag:"(0018,0035)",vr:"TM",name:"InterventionDrugStartTime",vm:"1",version:"DICOM"},"(0018,0036)":{tag:"(0018,0036)",vr:"SQ",name:"InterventionSequence",vm:"1",version:"DICOM"},"(0018,0038)":{tag:"(0018,0038)",vr:"CS",name:"InterventionStatus",vm:"1",version:"DICOM"},"(0018,003A)":{tag:"(0018,003A)",vr:"ST",name:"InterventionDescription",vm:"1",version:"DICOM"},"(0018,0040)":{tag:"(0018,0040)",vr:"IS",name:"CineRate",vm:"1",version:"DICOM"},"(0018,0042)":{tag:"(0018,0042)",vr:"CS",name:"InitialCineRunState",vm:"1",version:"DICOM"},"(0018,0050)":{tag:"(0018,0050)",vr:"DS",name:"SliceThickness",vm:"1",version:"DICOM"},"(0018,0060)":{tag:"(0018,0060)",vr:"DS",name:"KVP",vm:"1",version:"DICOM"},"(0018,0070)":{tag:"(0018,0070)",vr:"IS",name:"CountsAccumulated",vm:"1",version:"DICOM"},"(0018,0071)":{tag:"(0018,0071)",vr:"CS",name:"AcquisitionTerminationCondition",vm:"1",version:"DICOM"},"(0018,0072)":{tag:"(0018,0072)",vr:"DS",name:"EffectiveDuration",vm:"1",version:"DICOM"},"(0018,0073)":{tag:"(0018,0073)",vr:"CS",name:"AcquisitionStartCondition",vm:"1",version:"DICOM"},"(0018,0074)":{tag:"(0018,0074)",vr:"IS",name:"AcquisitionStartConditionData",vm:"1",version:"DICOM"},"(0018,0075)":{tag:"(0018,0075)",vr:"IS",name:"AcquisitionTerminationConditionData",vm:"1",version:"DICOM"},"(0018,0080)":{tag:"(0018,0080)",vr:"DS",name:"RepetitionTime",vm:"1",version:"DICOM"},"(0018,0081)":{tag:"(0018,0081)",vr:"DS",name:"EchoTime",vm:"1",version:"DICOM"},"(0018,0082)":{tag:"(0018,0082)",vr:"DS",name:"InversionTime",vm:"1",version:"DICOM"},"(0018,0083)":{tag:"(0018,0083)",vr:"DS",name:"NumberOfAverages",vm:"1",version:"DICOM"},"(0018,0084)":{tag:"(0018,0084)",vr:"DS",name:"ImagingFrequency",vm:"1",version:"DICOM"},"(0018,0085)":{tag:"(0018,0085)",vr:"SH",name:"ImagedNucleus",vm:"1",version:"DICOM"},"(0018,0086)":{tag:"(0018,0086)",vr:"IS",name:"EchoNumbers",vm:"1-n",version:"DICOM"},"(0018,0087)":{tag:"(0018,0087)",vr:"DS",name:"MagneticFieldStrength",vm:"1",version:"DICOM"},"(0018,0088)":{tag:"(0018,0088)",vr:"DS",name:"SpacingBetweenSlices",vm:"1",version:"DICOM"},"(0018,0089)":{tag:"(0018,0089)",vr:"IS",name:"NumberOfPhaseEncodingSteps",vm:"1",version:"DICOM"},"(0018,0090)":{tag:"(0018,0090)",vr:"DS",name:"DataCollectionDiameter",vm:"1",version:"DICOM"},"(0018,0091)":{tag:"(0018,0091)",vr:"IS",name:"EchoTrainLength",vm:"1",version:"DICOM"},"(0018,0093)":{tag:"(0018,0093)",vr:"DS",name:"PercentSampling",vm:"1",version:"DICOM"},"(0018,0094)":{tag:"(0018,0094)",vr:"DS",name:"PercentPhaseFieldOfView",vm:"1",version:"DICOM"},"(0018,0095)":{tag:"(0018,0095)",vr:"DS",name:"PixelBandwidth",vm:"1",version:"DICOM"},"(0018,1000)":{tag:"(0018,1000)",vr:"LO",name:"DeviceSerialNumber",vm:"1",version:"DICOM"},"(0018,1002)":{tag:"(0018,1002)",vr:"UI",name:"DeviceUID",vm:"1",version:"DICOM"},"(0018,1003)":{tag:"(0018,1003)",vr:"LO",name:"DeviceID",vm:"1",version:"DICOM"},"(0018,1004)":{tag:"(0018,1004)",vr:"LO",name:"PlateID",vm:"1",version:"DICOM"},"(0018,1005)":{tag:"(0018,1005)",vr:"LO",name:"GeneratorID",vm:"1",version:"DICOM"},"(0018,1006)":{tag:"(0018,1006)",vr:"LO",name:"GridID",vm:"1",version:"DICOM"},"(0018,1007)":{tag:"(0018,1007)",vr:"LO",name:"CassetteID",vm:"1",version:"DICOM"},"(0018,1008)":{tag:"(0018,1008)",vr:"LO",name:"GantryID",vm:"1",version:"DICOM"},"(0018,1009)":{tag:"(0018,1009)",vr:"UT",name:"UniqueDeviceIdentifier",vm:"1",version:"DICOM"},"(0018,100A)":{tag:"(0018,100A)",vr:"SQ",name:"UDISequence",vm:"1",version:"DICOM"},"(0018,100B)":{tag:"(0018,100B)",vr:"UI",name:"ManufacturerDeviceClassUID",vm:"1-n",version:"DICOM"},"(0018,1010)":{tag:"(0018,1010)",vr:"LO",name:"SecondaryCaptureDeviceID",vm:"1",version:"DICOM"},"(0018,1012)":{tag:"(0018,1012)",vr:"DA",name:"DateOfSecondaryCapture",vm:"1",version:"DICOM"},"(0018,1014)":{tag:"(0018,1014)",vr:"TM",name:"TimeOfSecondaryCapture",vm:"1",version:"DICOM"},"(0018,1016)":{tag:"(0018,1016)",vr:"LO",name:"SecondaryCaptureDeviceManufacturer",vm:"1",version:"DICOM"},"(0018,1018)":{tag:"(0018,1018)",vr:"LO",name:"SecondaryCaptureDeviceManufacturerModelName",vm:"1",version:"DICOM"},"(0018,1019)":{tag:"(0018,1019)",vr:"LO",name:"SecondaryCaptureDeviceSoftwareVersions",vm:"1-n",version:"DICOM"},"(0018,1020)":{tag:"(0018,1020)",vr:"LO",name:"SoftwareVersions",vm:"1-n",version:"DICOM"},"(0018,1022)":{tag:"(0018,1022)",vr:"SH",name:"VideoImageFormatAcquired",vm:"1",version:"DICOM"},"(0018,1023)":{tag:"(0018,1023)",vr:"LO",name:"DigitalImageFormatAcquired",vm:"1",version:"DICOM"},"(0018,1030)":{tag:"(0018,1030)",vr:"LO",name:"ProtocolName",vm:"1",version:"DICOM"},"(0018,1040)":{tag:"(0018,1040)",vr:"LO",name:"ContrastBolusRoute",vm:"1",version:"DICOM"},"(0018,1041)":{tag:"(0018,1041)",vr:"DS",name:"ContrastBolusVolume",vm:"1",version:"DICOM"},"(0018,1042)":{tag:"(0018,1042)",vr:"TM",name:"ContrastBolusStartTime",vm:"1",version:"DICOM"},"(0018,1043)":{tag:"(0018,1043)",vr:"TM",name:"ContrastBolusStopTime",vm:"1",version:"DICOM"},"(0018,1044)":{tag:"(0018,1044)",vr:"DS",name:"ContrastBolusTotalDose",vm:"1",version:"DICOM"},"(0018,1045)":{tag:"(0018,1045)",vr:"IS",name:"SyringeCounts",vm:"1",version:"DICOM"},"(0018,1046)":{tag:"(0018,1046)",vr:"DS",name:"ContrastFlowRate",vm:"1-n",version:"DICOM"},"(0018,1047)":{tag:"(0018,1047)",vr:"DS",name:"ContrastFlowDuration",vm:"1-n",version:"DICOM"},"(0018,1048)":{tag:"(0018,1048)",vr:"CS",name:"ContrastBolusIngredient",vm:"1",version:"DICOM"},"(0018,1049)":{tag:"(0018,1049)",vr:"DS",name:"ContrastBolusIngredientConcentration",vm:"1",version:"DICOM"},"(0018,1050)":{tag:"(0018,1050)",vr:"DS",name:"SpatialResolution",vm:"1",version:"DICOM"},"(0018,1060)":{tag:"(0018,1060)",vr:"DS",name:"TriggerTime",vm:"1",version:"DICOM"},"(0018,1061)":{tag:"(0018,1061)",vr:"LO",name:"TriggerSourceOrType",vm:"1",version:"DICOM"},"(0018,1062)":{tag:"(0018,1062)",vr:"IS",name:"NominalInterval",vm:"1",version:"DICOM"},"(0018,1063)":{tag:"(0018,1063)",vr:"DS",name:"FrameTime",vm:"1",version:"DICOM"},"(0018,1064)":{tag:"(0018,1064)",vr:"LO",name:"CardiacFramingType",vm:"1",version:"DICOM"},"(0018,1065)":{tag:"(0018,1065)",vr:"DS",name:"FrameTimeVector",vm:"1-n",version:"DICOM"},"(0018,1066)":{tag:"(0018,1066)",vr:"DS",name:"FrameDelay",vm:"1",version:"DICOM"},"(0018,1067)":{tag:"(0018,1067)",vr:"DS",name:"ImageTriggerDelay",vm:"1",version:"DICOM"},"(0018,1068)":{tag:"(0018,1068)",vr:"DS",name:"MultiplexGroupTimeOffset",vm:"1",version:"DICOM"},"(0018,1069)":{tag:"(0018,1069)",vr:"DS",name:"TriggerTimeOffset",vm:"1",version:"DICOM"},"(0018,106A)":{tag:"(0018,106A)",vr:"CS",name:"SynchronizationTrigger",vm:"1",version:"DICOM"},"(0018,106C)":{tag:"(0018,106C)",vr:"US",name:"SynchronizationChannel",vm:"2",version:"DICOM"},"(0018,106E)":{tag:"(0018,106E)",vr:"UL",name:"TriggerSamplePosition",vm:"1",version:"DICOM"},"(0018,1070)":{tag:"(0018,1070)",vr:"LO",name:"RadiopharmaceuticalRoute",vm:"1",version:"DICOM"},"(0018,1071)":{tag:"(0018,1071)",vr:"DS",name:"RadiopharmaceuticalVolume",vm:"1",version:"DICOM"},"(0018,1072)":{tag:"(0018,1072)",vr:"TM",name:"RadiopharmaceuticalStartTime",vm:"1",version:"DICOM"},"(0018,1073)":{tag:"(0018,1073)",vr:"TM",name:"RadiopharmaceuticalStopTime",vm:"1",version:"DICOM"},"(0018,1074)":{tag:"(0018,1074)",vr:"DS",name:"RadionuclideTotalDose",vm:"1",version:"DICOM"},"(0018,1075)":{tag:"(0018,1075)",vr:"DS",name:"RadionuclideHalfLife",vm:"1",version:"DICOM"},"(0018,1076)":{tag:"(0018,1076)",vr:"DS",name:"RadionuclidePositronFraction",vm:"1",version:"DICOM"},"(0018,1077)":{tag:"(0018,1077)",vr:"DS",name:"RadiopharmaceuticalSpecificActivity",vm:"1",version:"DICOM"},"(0018,1078)":{tag:"(0018,1078)",vr:"DT",name:"RadiopharmaceuticalStartDateTime",vm:"1",version:"DICOM"},"(0018,1079)":{tag:"(0018,1079)",vr:"DT",name:"RadiopharmaceuticalStopDateTime",vm:"1",version:"DICOM"},"(0018,1080)":{tag:"(0018,1080)",vr:"CS",name:"BeatRejectionFlag",vm:"1",version:"DICOM"},"(0018,1081)":{tag:"(0018,1081)",vr:"IS",name:"LowRRValue",vm:"1",version:"DICOM"},"(0018,1082)":{tag:"(0018,1082)",vr:"IS",name:"HighRRValue",vm:"1",version:"DICOM"},"(0018,1083)":{tag:"(0018,1083)",vr:"IS",name:"IntervalsAcquired",vm:"1",version:"DICOM"},"(0018,1084)":{tag:"(0018,1084)",vr:"IS",name:"IntervalsRejected",vm:"1",version:"DICOM"},"(0018,1085)":{tag:"(0018,1085)",vr:"LO",name:"PVCRejection",vm:"1",version:"DICOM"},"(0018,1086)":{tag:"(0018,1086)",vr:"IS",name:"SkipBeats",vm:"1",version:"DICOM"},"(0018,1088)":{tag:"(0018,1088)",vr:"IS",name:"HeartRate",vm:"1",version:"DICOM"},"(0018,1090)":{tag:"(0018,1090)",vr:"IS",name:"CardiacNumberOfImages",vm:"1",version:"DICOM"},"(0018,1094)":{tag:"(0018,1094)",vr:"IS",name:"TriggerWindow",vm:"1",version:"DICOM"},"(0018,1100)":{tag:"(0018,1100)",vr:"DS",name:"ReconstructionDiameter",vm:"1",version:"DICOM"},"(0018,1110)":{tag:"(0018,1110)",vr:"DS",name:"DistanceSourceToDetector",vm:"1",version:"DICOM"},"(0018,1111)":{tag:"(0018,1111)",vr:"DS",name:"DistanceSourceToPatient",vm:"1",version:"DICOM"},"(0018,1114)":{tag:"(0018,1114)",vr:"DS",name:"EstimatedRadiographicMagnificationFactor",vm:"1",version:"DICOM"},"(0018,1120)":{tag:"(0018,1120)",vr:"DS",name:"GantryDetectorTilt",vm:"1",version:"DICOM"},"(0018,1121)":{tag:"(0018,1121)",vr:"DS",name:"GantryDetectorSlew",vm:"1",version:"DICOM"},"(0018,1130)":{tag:"(0018,1130)",vr:"DS",name:"TableHeight",vm:"1",version:"DICOM"},"(0018,1131)":{tag:"(0018,1131)",vr:"DS",name:"TableTraverse",vm:"1",version:"DICOM"},"(0018,1134)":{tag:"(0018,1134)",vr:"CS",name:"TableMotion",vm:"1",version:"DICOM"},"(0018,1135)":{tag:"(0018,1135)",vr:"DS",name:"TableVerticalIncrement",vm:"1-n",version:"DICOM"},"(0018,1136)":{tag:"(0018,1136)",vr:"DS",name:"TableLateralIncrement",vm:"1-n",version:"DICOM"},"(0018,1137)":{tag:"(0018,1137)",vr:"DS",name:"TableLongitudinalIncrement",vm:"1-n",version:"DICOM"},"(0018,1138)":{tag:"(0018,1138)",vr:"DS",name:"TableAngle",vm:"1",version:"DICOM"},"(0018,113A)":{tag:"(0018,113A)",vr:"CS",name:"TableType",vm:"1",version:"DICOM"},"(0018,1140)":{tag:"(0018,1140)",vr:"CS",name:"RotationDirection",vm:"1",version:"DICOM"},"(0018,1142)":{tag:"(0018,1142)",vr:"DS",name:"RadialPosition",vm:"1-n",version:"DICOM"},"(0018,1143)":{tag:"(0018,1143)",vr:"DS",name:"ScanArc",vm:"1",version:"DICOM"},"(0018,1144)":{tag:"(0018,1144)",vr:"DS",name:"AngularStep",vm:"1",version:"DICOM"},"(0018,1145)":{tag:"(0018,1145)",vr:"DS",name:"CenterOfRotationOffset",vm:"1",version:"DICOM"},"(0018,1147)":{tag:"(0018,1147)",vr:"CS",name:"FieldOfViewShape",vm:"1",version:"DICOM"},"(0018,1149)":{tag:"(0018,1149)",vr:"IS",name:"FieldOfViewDimensions",vm:"1-2",version:"DICOM"},"(0018,1150)":{tag:"(0018,1150)",vr:"IS",name:"ExposureTime",vm:"1",version:"DICOM"},"(0018,1151)":{tag:"(0018,1151)",vr:"IS",name:"XRayTubeCurrent",vm:"1",version:"DICOM"},"(0018,1152)":{tag:"(0018,1152)",vr:"IS",name:"Exposure",vm:"1",version:"DICOM"},"(0018,1153)":{tag:"(0018,1153)",vr:"IS",name:"ExposureInuAs",vm:"1",version:"DICOM"},"(0018,1154)":{tag:"(0018,1154)",vr:"DS",name:"AveragePulseWidth",vm:"1",version:"DICOM"},"(0018,1155)":{tag:"(0018,1155)",vr:"CS",name:"RadiationSetting",vm:"1",version:"DICOM"},"(0018,1156)":{tag:"(0018,1156)",vr:"CS",name:"RectificationType",vm:"1",version:"DICOM"},"(0018,115A)":{tag:"(0018,115A)",vr:"CS",name:"RadiationMode",vm:"1",version:"DICOM"},"(0018,115E)":{tag:"(0018,115E)",vr:"DS",name:"ImageAndFluoroscopyAreaDoseProduct",vm:"1",version:"DICOM"},"(0018,1160)":{tag:"(0018,1160)",vr:"SH",name:"FilterType",vm:"1",version:"DICOM"},"(0018,1161)":{tag:"(0018,1161)",vr:"LO",name:"TypeOfFilters",vm:"1-n",version:"DICOM"},"(0018,1162)":{tag:"(0018,1162)",vr:"DS",name:"IntensifierSize",vm:"1",version:"DICOM"},"(0018,1164)":{tag:"(0018,1164)",vr:"DS",name:"ImagerPixelSpacing",vm:"2",version:"DICOM"},"(0018,1166)":{tag:"(0018,1166)",vr:"CS",name:"Grid",vm:"1-n",version:"DICOM"},"(0018,1170)":{tag:"(0018,1170)",vr:"IS",name:"GeneratorPower",vm:"1",version:"DICOM"},"(0018,1180)":{tag:"(0018,1180)",vr:"SH",name:"CollimatorGridName",vm:"1",version:"DICOM"},"(0018,1181)":{tag:"(0018,1181)",vr:"CS",name:"CollimatorType",vm:"1",version:"DICOM"},"(0018,1182)":{tag:"(0018,1182)",vr:"IS",name:"FocalDistance",vm:"1-2",version:"DICOM"},"(0018,1183)":{tag:"(0018,1183)",vr:"DS",name:"XFocusCenter",vm:"1-2",version:"DICOM"},"(0018,1184)":{tag:"(0018,1184)",vr:"DS",name:"YFocusCenter",vm:"1-2",version:"DICOM"},"(0018,1190)":{tag:"(0018,1190)",vr:"DS",name:"FocalSpots",vm:"1-n",version:"DICOM"},"(0018,1191)":{tag:"(0018,1191)",vr:"CS",name:"AnodeTargetMaterial",vm:"1",version:"DICOM"},"(0018,11A0)":{tag:"(0018,11A0)",vr:"DS",name:"BodyPartThickness",vm:"1",version:"DICOM"},"(0018,11A2)":{tag:"(0018,11A2)",vr:"DS",name:"CompressionForce",vm:"1",version:"DICOM"},"(0018,11A3)":{tag:"(0018,11A3)",vr:"DS",name:"CompressionPressure",vm:"1",version:"DICOM"},"(0018,11A4)":{tag:"(0018,11A4)",vr:"LO",name:"PaddleDescription",vm:"1",version:"DICOM"},"(0018,11A5)":{tag:"(0018,11A5)",vr:"DS",name:"CompressionContactArea",vm:"1",version:"DICOM"},"(0018,11B0)":{tag:"(0018,11B0)",vr:"LO",name:"AcquisitionMode",vm:"1",version:"DICOM"},"(0018,11B1)":{tag:"(0018,11B1)",vr:"LO",name:"DoseModeName",vm:"1",version:"DICOM"},"(0018,11B2)":{tag:"(0018,11B2)",vr:"CS",name:"AcquiredSubtractionMaskFlag",vm:"1",version:"DICOM"},"(0018,11B3)":{tag:"(0018,11B3)",vr:"CS",name:"FluoroscopyPersistenceFlag",vm:"1",version:"DICOM"},"(0018,11B4)":{tag:"(0018,11B4)",vr:"CS",name:"FluoroscopyLastImageHoldPersistenceFlag",vm:"1",version:"DICOM"},"(0018,11B5)":{tag:"(0018,11B5)",vr:"IS",name:"UpperLimitNumberOfPersistentFluoroscopyFrames",vm:"1",version:"DICOM"},"(0018,11B6)":{tag:"(0018,11B6)",vr:"CS",name:"ContrastBolusAutoInjectionTriggerFlag",vm:"1",version:"DICOM"},"(0018,11B7)":{tag:"(0018,11B7)",vr:"FD",name:"ContrastBolusInjectionDelay",vm:"1",version:"DICOM"},"(0018,11B8)":{tag:"(0018,11B8)",vr:"SQ",name:"XAAcquisitionPhaseDetailsSequence",vm:"1",version:"DICOM"},"(0018,11B9)":{tag:"(0018,11B9)",vr:"FD",name:"XAAcquisitionFrameRate",vm:"1",version:"DICOM"},"(0018,11BA)":{tag:"(0018,11BA)",vr:"SQ",name:"XAPlaneDetailsSequence",vm:"1",version:"DICOM"},"(0018,11BB)":{tag:"(0018,11BB)",vr:"LO",name:"AcquisitionFieldOfViewLabel",vm:"1",version:"DICOM"},"(0018,11BC)":{tag:"(0018,11BC)",vr:"SQ",name:"XRayFilterDetailsSequence",vm:"1",version:"DICOM"},"(0018,11BD)":{tag:"(0018,11BD)",vr:"FD",name:"XAAcquisitionDuration",vm:"1",version:"DICOM"},"(0018,11BE)":{tag:"(0018,11BE)",vr:"CS",name:"ReconstructionPipelineType",vm:"1",version:"DICOM"},"(0018,11BF)":{tag:"(0018,11BF)",vr:"SQ",name:"ImageFilterDetailsSequence",vm:"1",version:"DICOM"},"(0018,11C0)":{tag:"(0018,11C0)",vr:"CS",name:"AppliedMaskSubtractionFlag",vm:"1",version:"DICOM"},"(0018,11C1)":{tag:"(0018,11C1)",vr:"SQ",name:"RequestedSeriesDescriptionCodeSequence",vm:"1",version:"DICOM"},"(0018,1200)":{tag:"(0018,1200)",vr:"DA",name:"DateOfLastCalibration",vm:"1-n",version:"DICOM"},"(0018,1201)":{tag:"(0018,1201)",vr:"TM",name:"TimeOfLastCalibration",vm:"1-n",version:"DICOM"},"(0018,1202)":{tag:"(0018,1202)",vr:"DT",name:"DateTimeOfLastCalibration",vm:"1",version:"DICOM"},"(0018,1210)":{tag:"(0018,1210)",vr:"SH",name:"ConvolutionKernel",vm:"1-n",version:"DICOM"},"(0018,1242)":{tag:"(0018,1242)",vr:"IS",name:"ActualFrameDuration",vm:"1",version:"DICOM"},"(0018,1243)":{tag:"(0018,1243)",vr:"IS",name:"CountRate",vm:"1",version:"DICOM"},"(0018,1244)":{tag:"(0018,1244)",vr:"US",name:"PreferredPlaybackSequencing",vm:"1",version:"DICOM"},"(0018,1250)":{tag:"(0018,1250)",vr:"SH",name:"ReceiveCoilName",vm:"1",version:"DICOM"},"(0018,1251)":{tag:"(0018,1251)",vr:"SH",name:"TransmitCoilName",vm:"1",version:"DICOM"},"(0018,1260)":{tag:"(0018,1260)",vr:"SH",name:"PlateType",vm:"1",version:"DICOM"},"(0018,1261)":{tag:"(0018,1261)",vr:"LO",name:"PhosphorType",vm:"1",version:"DICOM"},"(0018,1271)":{tag:"(0018,1271)",vr:"FD",name:"WaterEquivalentDiameter",vm:"1",version:"DICOM"},"(0018,1272)":{tag:"(0018,1272)",vr:"SQ",name:"WaterEquivalentDiameterCalculationMethodCodeSequence",vm:"1",version:"DICOM"},"(0018,1300)":{tag:"(0018,1300)",vr:"DS",name:"ScanVelocity",vm:"1",version:"DICOM"},"(0018,1301)":{tag:"(0018,1301)",vr:"CS",name:"WholeBodyTechnique",vm:"1-n",version:"DICOM"},"(0018,1302)":{tag:"(0018,1302)",vr:"IS",name:"ScanLength",vm:"1",version:"DICOM"},"(0018,1310)":{tag:"(0018,1310)",vr:"US",name:"AcquisitionMatrix",vm:"4",version:"DICOM"},"(0018,1312)":{tag:"(0018,1312)",vr:"CS",name:"InPlanePhaseEncodingDirection",vm:"1",version:"DICOM"},"(0018,1314)":{tag:"(0018,1314)",vr:"DS",name:"FlipAngle",vm:"1",version:"DICOM"},"(0018,1315)":{tag:"(0018,1315)",vr:"CS",name:"VariableFlipAngleFlag",vm:"1",version:"DICOM"},"(0018,1316)":{tag:"(0018,1316)",vr:"DS",name:"SAR",vm:"1",version:"DICOM"},"(0018,1318)":{tag:"(0018,1318)",vr:"DS",name:"dBdt",vm:"1",version:"DICOM"},"(0018,1400)":{tag:"(0018,1400)",vr:"LO",name:"AcquisitionDeviceProcessingDescription",vm:"1",version:"DICOM"},"(0018,1401)":{tag:"(0018,1401)",vr:"LO",name:"AcquisitionDeviceProcessingCode",vm:"1",version:"DICOM"},"(0018,1402)":{tag:"(0018,1402)",vr:"CS",name:"CassetteOrientation",vm:"1",version:"DICOM"},"(0018,1403)":{tag:"(0018,1403)",vr:"CS",name:"CassetteSize",vm:"1",version:"DICOM"},"(0018,1404)":{tag:"(0018,1404)",vr:"US",name:"ExposuresOnPlate",vm:"1",version:"DICOM"},"(0018,1405)":{tag:"(0018,1405)",vr:"IS",name:"RelativeXRayExposure",vm:"1",version:"DICOM"},"(0018,1411)":{tag:"(0018,1411)",vr:"DS",name:"ExposureIndex",vm:"1",version:"DICOM"},"(0018,1412)":{tag:"(0018,1412)",vr:"DS",name:"TargetExposureIndex",vm:"1",version:"DICOM"},"(0018,1413)":{tag:"(0018,1413)",vr:"DS",name:"DeviationIndex",vm:"1",version:"DICOM"},"(0018,1450)":{tag:"(0018,1450)",vr:"DS",name:"ColumnAngulation",vm:"1",version:"DICOM"},"(0018,1460)":{tag:"(0018,1460)",vr:"DS",name:"TomoLayerHeight",vm:"1",version:"DICOM"},"(0018,1470)":{tag:"(0018,1470)",vr:"DS",name:"TomoAngle",vm:"1",version:"DICOM"},"(0018,1480)":{tag:"(0018,1480)",vr:"DS",name:"TomoTime",vm:"1",version:"DICOM"},"(0018,1490)":{tag:"(0018,1490)",vr:"CS",name:"TomoType",vm:"1",version:"DICOM"},"(0018,1491)":{tag:"(0018,1491)",vr:"CS",name:"TomoClass",vm:"1",version:"DICOM"},"(0018,1495)":{tag:"(0018,1495)",vr:"IS",name:"NumberOfTomosynthesisSourceImages",vm:"1",version:"DICOM"},"(0018,1500)":{tag:"(0018,1500)",vr:"CS",name:"PositionerMotion",vm:"1",version:"DICOM"},"(0018,1508)":{tag:"(0018,1508)",vr:"CS",name:"PositionerType",vm:"1",version:"DICOM"},"(0018,1510)":{tag:"(0018,1510)",vr:"DS",name:"PositionerPrimaryAngle",vm:"1",version:"DICOM"},"(0018,1511)":{tag:"(0018,1511)",vr:"DS",name:"PositionerSecondaryAngle",vm:"1",version:"DICOM"},"(0018,1520)":{tag:"(0018,1520)",vr:"DS",name:"PositionerPrimaryAngleIncrement",vm:"1-n",version:"DICOM"},"(0018,1521)":{tag:"(0018,1521)",vr:"DS",name:"PositionerSecondaryAngleIncrement",vm:"1-n",version:"DICOM"},"(0018,1530)":{tag:"(0018,1530)",vr:"DS",name:"DetectorPrimaryAngle",vm:"1",version:"DICOM"},"(0018,1531)":{tag:"(0018,1531)",vr:"DS",name:"DetectorSecondaryAngle",vm:"1",version:"DICOM"},"(0018,1600)":{tag:"(0018,1600)",vr:"CS",name:"ShutterShape",vm:"1-3",version:"DICOM"},"(0018,1602)":{tag:"(0018,1602)",vr:"IS",name:"ShutterLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,1604)":{tag:"(0018,1604)",vr:"IS",name:"ShutterRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,1606)":{tag:"(0018,1606)",vr:"IS",name:"ShutterUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1608)":{tag:"(0018,1608)",vr:"IS",name:"ShutterLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1610)":{tag:"(0018,1610)",vr:"IS",name:"CenterOfCircularShutter",vm:"2",version:"DICOM"},"(0018,1612)":{tag:"(0018,1612)",vr:"IS",name:"RadiusOfCircularShutter",vm:"1",version:"DICOM"},"(0018,1620)":{tag:"(0018,1620)",vr:"IS",name:"VerticesOfThePolygonalShutter",vm:"2-2n",version:"DICOM"},"(0018,1622)":{tag:"(0018,1622)",vr:"US",name:"ShutterPresentationValue",vm:"1",version:"DICOM"},"(0018,1623)":{tag:"(0018,1623)",vr:"US",name:"ShutterOverlayGroup",vm:"1",version:"DICOM"},"(0018,1624)":{tag:"(0018,1624)",vr:"US",name:"ShutterPresentationColorCIELabValue",vm:"3",version:"DICOM"},"(0018,1630)":{tag:"(0018,1630)",vr:"CS",name:"OutlineShapeType",vm:"1",version:"DICOM"},"(0018,1631)":{tag:"(0018,1631)",vr:"FD",name:"OutlineLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,1632)":{tag:"(0018,1632)",vr:"FD",name:"OutlineRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,1633)":{tag:"(0018,1633)",vr:"FD",name:"OutlineUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1634)":{tag:"(0018,1634)",vr:"FD",name:"OutlineLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1635)":{tag:"(0018,1635)",vr:"FD",name:"CenterOfCircularOutline",vm:"2",version:"DICOM"},"(0018,1636)":{tag:"(0018,1636)",vr:"FD",name:"DiameterOfCircularOutline",vm:"1",version:"DICOM"},"(0018,1637)":{tag:"(0018,1637)",vr:"UL",name:"NumberOfPolygonalVertices",vm:"1",version:"DICOM"},"(0018,1638)":{tag:"(0018,1638)",vr:"OF",name:"VerticesOfThePolygonalOutline",vm:"1",version:"DICOM"},"(0018,1700)":{tag:"(0018,1700)",vr:"CS",name:"CollimatorShape",vm:"1-3",version:"DICOM"},"(0018,1702)":{tag:"(0018,1702)",vr:"IS",name:"CollimatorLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,1704)":{tag:"(0018,1704)",vr:"IS",name:"CollimatorRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,1706)":{tag:"(0018,1706)",vr:"IS",name:"CollimatorUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1708)":{tag:"(0018,1708)",vr:"IS",name:"CollimatorLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1710)":{tag:"(0018,1710)",vr:"IS",name:"CenterOfCircularCollimator",vm:"2",version:"DICOM"},"(0018,1712)":{tag:"(0018,1712)",vr:"IS",name:"RadiusOfCircularCollimator",vm:"1",version:"DICOM"},"(0018,1720)":{tag:"(0018,1720)",vr:"IS",name:"VerticesOfThePolygonalCollimator",vm:"2-2n",version:"DICOM"},"(0018,1800)":{tag:"(0018,1800)",vr:"CS",name:"AcquisitionTimeSynchronized",vm:"1",version:"DICOM"},"(0018,1801)":{tag:"(0018,1801)",vr:"SH",name:"TimeSource",vm:"1",version:"DICOM"},"(0018,1802)":{tag:"(0018,1802)",vr:"CS",name:"TimeDistributionProtocol",vm:"1",version:"DICOM"},"(0018,1803)":{tag:"(0018,1803)",vr:"LO",name:"NTPSourceAddress",vm:"1",version:"DICOM"},"(0018,2001)":{tag:"(0018,2001)",vr:"IS",name:"PageNumberVector",vm:"1-n",version:"DICOM"},"(0018,2002)":{tag:"(0018,2002)",vr:"SH",name:"FrameLabelVector",vm:"1-n",version:"DICOM"},"(0018,2003)":{tag:"(0018,2003)",vr:"DS",name:"FramePrimaryAngleVector",vm:"1-n",version:"DICOM"},"(0018,2004)":{tag:"(0018,2004)",vr:"DS",name:"FrameSecondaryAngleVector",vm:"1-n",version:"DICOM"},"(0018,2005)":{tag:"(0018,2005)",vr:"DS",name:"SliceLocationVector",vm:"1-n",version:"DICOM"},"(0018,2006)":{tag:"(0018,2006)",vr:"SH",name:"DisplayWindowLabelVector",vm:"1-n",version:"DICOM"},"(0018,2010)":{tag:"(0018,2010)",vr:"DS",name:"NominalScannedPixelSpacing",vm:"2",version:"DICOM"},"(0018,2020)":{tag:"(0018,2020)",vr:"CS",name:"DigitizingDeviceTransportDirection",vm:"1",version:"DICOM"},"(0018,2030)":{tag:"(0018,2030)",vr:"DS",name:"RotationOfScannedFilm",vm:"1",version:"DICOM"},"(0018,2041)":{tag:"(0018,2041)",vr:"SQ",name:"BiopsyTargetSequence",vm:"1",version:"DICOM"},"(0018,2042)":{tag:"(0018,2042)",vr:"UI",name:"TargetUID",vm:"1",version:"DICOM"},"(0018,2043)":{tag:"(0018,2043)",vr:"FL",name:"LocalizingCursorPosition",vm:"2",version:"DICOM"},"(0018,2044)":{tag:"(0018,2044)",vr:"FL",name:"CalculatedTargetPosition",vm:"3",version:"DICOM"},"(0018,2045)":{tag:"(0018,2045)",vr:"SH",name:"TargetLabel",vm:"1",version:"DICOM"},"(0018,2046)":{tag:"(0018,2046)",vr:"FL",name:"DisplayedZValue",vm:"1",version:"DICOM"},"(0018,3100)":{tag:"(0018,3100)",vr:"CS",name:"IVUSAcquisition",vm:"1",version:"DICOM"},"(0018,3101)":{tag:"(0018,3101)",vr:"DS",name:"IVUSPullbackRate",vm:"1",version:"DICOM"},"(0018,3102)":{tag:"(0018,3102)",vr:"DS",name:"IVUSGatedRate",vm:"1",version:"DICOM"},"(0018,3103)":{tag:"(0018,3103)",vr:"IS",name:"IVUSPullbackStartFrameNumber",vm:"1",version:"DICOM"},"(0018,3104)":{tag:"(0018,3104)",vr:"IS",name:"IVUSPullbackStopFrameNumber",vm:"1",version:"DICOM"},"(0018,3105)":{tag:"(0018,3105)",vr:"IS",name:"LesionNumber",vm:"1-n",version:"DICOM"},"(0018,5000)":{tag:"(0018,5000)",vr:"SH",name:"OutputPower",vm:"1-n",version:"DICOM"},"(0018,5010)":{tag:"(0018,5010)",vr:"LO",name:"TransducerData",vm:"1-n",version:"DICOM"},"(0018,5011)":{tag:"(0018,5011)",vr:"SQ",name:"TransducerIdentificationSequence",vm:"1",version:"DICOM"},"(0018,5012)":{tag:"(0018,5012)",vr:"DS",name:"FocusDepth",vm:"1",version:"DICOM"},"(0018,5020)":{tag:"(0018,5020)",vr:"LO",name:"ProcessingFunction",vm:"1",version:"DICOM"},"(0018,5022)":{tag:"(0018,5022)",vr:"DS",name:"MechanicalIndex",vm:"1",version:"DICOM"},"(0018,5024)":{tag:"(0018,5024)",vr:"DS",name:"BoneThermalIndex",vm:"1",version:"DICOM"},"(0018,5026)":{tag:"(0018,5026)",vr:"DS",name:"CranialThermalIndex",vm:"1",version:"DICOM"},"(0018,5027)":{tag:"(0018,5027)",vr:"DS",name:"SoftTissueThermalIndex",vm:"1",version:"DICOM"},"(0018,5028)":{tag:"(0018,5028)",vr:"DS",name:"SoftTissueFocusThermalIndex",vm:"1",version:"DICOM"},"(0018,5029)":{tag:"(0018,5029)",vr:"DS",name:"SoftTissueSurfaceThermalIndex",vm:"1",version:"DICOM"},"(0018,5050)":{tag:"(0018,5050)",vr:"IS",name:"DepthOfScanField",vm:"1",version:"DICOM"},"(0018,5100)":{tag:"(0018,5100)",vr:"CS",name:"PatientPosition",vm:"1",version:"DICOM"},"(0018,5101)":{tag:"(0018,5101)",vr:"CS",name:"ViewPosition",vm:"1",version:"DICOM"},"(0018,5104)":{tag:"(0018,5104)",vr:"SQ",name:"ProjectionEponymousNameCodeSequence",vm:"1",version:"DICOM"},"(0018,6000)":{tag:"(0018,6000)",vr:"DS",name:"Sensitivity",vm:"1",version:"DICOM"},"(0018,6011)":{tag:"(0018,6011)",vr:"SQ",name:"SequenceOfUltrasoundRegions",vm:"1",version:"DICOM"},"(0018,6012)":{tag:"(0018,6012)",vr:"US",name:"RegionSpatialFormat",vm:"1",version:"DICOM"},"(0018,6014)":{tag:"(0018,6014)",vr:"US",name:"RegionDataType",vm:"1",version:"DICOM"},"(0018,6016)":{tag:"(0018,6016)",vr:"UL",name:"RegionFlags",vm:"1",version:"DICOM"},"(0018,6018)":{tag:"(0018,6018)",vr:"UL",name:"RegionLocationMinX0",vm:"1",version:"DICOM"},"(0018,601A)":{tag:"(0018,601A)",vr:"UL",name:"RegionLocationMinY0",vm:"1",version:"DICOM"},"(0018,601C)":{tag:"(0018,601C)",vr:"UL",name:"RegionLocationMaxX1",vm:"1",version:"DICOM"},"(0018,601E)":{tag:"(0018,601E)",vr:"UL",name:"RegionLocationMaxY1",vm:"1",version:"DICOM"},"(0018,6020)":{tag:"(0018,6020)",vr:"SL",name:"ReferencePixelX0",vm:"1",version:"DICOM"},"(0018,6022)":{tag:"(0018,6022)",vr:"SL",name:"ReferencePixelY0",vm:"1",version:"DICOM"},"(0018,6024)":{tag:"(0018,6024)",vr:"US",name:"PhysicalUnitsXDirection",vm:"1",version:"DICOM"},"(0018,6026)":{tag:"(0018,6026)",vr:"US",name:"PhysicalUnitsYDirection",vm:"1",version:"DICOM"},"(0018,6028)":{tag:"(0018,6028)",vr:"FD",name:"ReferencePixelPhysicalValueX",vm:"1",version:"DICOM"},"(0018,602A)":{tag:"(0018,602A)",vr:"FD",name:"ReferencePixelPhysicalValueY",vm:"1",version:"DICOM"},"(0018,602C)":{tag:"(0018,602C)",vr:"FD",name:"PhysicalDeltaX",vm:"1",version:"DICOM"},"(0018,602E)":{tag:"(0018,602E)",vr:"FD",name:"PhysicalDeltaY",vm:"1",version:"DICOM"},"(0018,6030)":{tag:"(0018,6030)",vr:"UL",name:"TransducerFrequency",vm:"1",version:"DICOM"},"(0018,6031)":{tag:"(0018,6031)",vr:"CS",name:"TransducerType",vm:"1",version:"DICOM"},"(0018,6032)":{tag:"(0018,6032)",vr:"UL",name:"PulseRepetitionFrequency",vm:"1",version:"DICOM"},"(0018,6034)":{tag:"(0018,6034)",vr:"FD",name:"DopplerCorrectionAngle",vm:"1",version:"DICOM"},"(0018,6036)":{tag:"(0018,6036)",vr:"FD",name:"SteeringAngle",vm:"1",version:"DICOM"},"(0018,6039)":{tag:"(0018,6039)",vr:"SL",name:"DopplerSampleVolumeXPosition",vm:"1",version:"DICOM"},"(0018,603B)":{tag:"(0018,603B)",vr:"SL",name:"DopplerSampleVolumeYPosition",vm:"1",version:"DICOM"},"(0018,603D)":{tag:"(0018,603D)",vr:"SL",name:"TMLinePositionX0",vm:"1",version:"DICOM"},"(0018,603F)":{tag:"(0018,603F)",vr:"SL",name:"TMLinePositionY0",vm:"1",version:"DICOM"},"(0018,6041)":{tag:"(0018,6041)",vr:"SL",name:"TMLinePositionX1",vm:"1",version:"DICOM"},"(0018,6043)":{tag:"(0018,6043)",vr:"SL",name:"TMLinePositionY1",vm:"1",version:"DICOM"},"(0018,6044)":{tag:"(0018,6044)",vr:"US",name:"PixelComponentOrganization",vm:"1",version:"DICOM"},"(0018,6046)":{tag:"(0018,6046)",vr:"UL",name:"PixelComponentMask",vm:"1",version:"DICOM"},"(0018,6048)":{tag:"(0018,6048)",vr:"UL",name:"PixelComponentRangeStart",vm:"1",version:"DICOM"},"(0018,604A)":{tag:"(0018,604A)",vr:"UL",name:"PixelComponentRangeStop",vm:"1",version:"DICOM"},"(0018,604C)":{tag:"(0018,604C)",vr:"US",name:"PixelComponentPhysicalUnits",vm:"1",version:"DICOM"},"(0018,604E)":{tag:"(0018,604E)",vr:"US",name:"PixelComponentDataType",vm:"1",version:"DICOM"},"(0018,6050)":{tag:"(0018,6050)",vr:"UL",name:"NumberOfTableBreakPoints",vm:"1",version:"DICOM"},"(0018,6052)":{tag:"(0018,6052)",vr:"UL",name:"TableOfXBreakPoints",vm:"1-n",version:"DICOM"},"(0018,6054)":{tag:"(0018,6054)",vr:"FD",name:"TableOfYBreakPoints",vm:"1-n",version:"DICOM"},"(0018,6056)":{tag:"(0018,6056)",vr:"UL",name:"NumberOfTableEntries",vm:"1",version:"DICOM"},"(0018,6058)":{tag:"(0018,6058)",vr:"UL",name:"TableOfPixelValues",vm:"1-n",version:"DICOM"},"(0018,605A)":{tag:"(0018,605A)",vr:"FL",name:"TableOfParameterValues",vm:"1-n",version:"DICOM"},"(0018,6060)":{tag:"(0018,6060)",vr:"FL",name:"RWaveTimeVector",vm:"1-n",version:"DICOM"},"(0018,6070)":{tag:"(0018,6070)",vr:"US",name:"ActiveImageAreaOverlayGroup",vm:"1",version:"DICOM"},"(0018,7000)":{tag:"(0018,7000)",vr:"CS",name:"DetectorConditionsNominalFlag",vm:"1",version:"DICOM"},"(0018,7001)":{tag:"(0018,7001)",vr:"DS",name:"DetectorTemperature",vm:"1",version:"DICOM"},"(0018,7004)":{tag:"(0018,7004)",vr:"CS",name:"DetectorType",vm:"1",version:"DICOM"},"(0018,7005)":{tag:"(0018,7005)",vr:"CS",name:"DetectorConfiguration",vm:"1",version:"DICOM"},"(0018,7006)":{tag:"(0018,7006)",vr:"LT",name:"DetectorDescription",vm:"1",version:"DICOM"},"(0018,7008)":{tag:"(0018,7008)",vr:"LT",name:"DetectorMode",vm:"1",version:"DICOM"},"(0018,700A)":{tag:"(0018,700A)",vr:"SH",name:"DetectorID",vm:"1",version:"DICOM"},"(0018,700C)":{tag:"(0018,700C)",vr:"DA",name:"DateOfLastDetectorCalibration",vm:"1",version:"DICOM"},"(0018,700E)":{tag:"(0018,700E)",vr:"TM",name:"TimeOfLastDetectorCalibration",vm:"1",version:"DICOM"},"(0018,7010)":{tag:"(0018,7010)",vr:"IS",name:"ExposuresOnDetectorSinceLastCalibration",vm:"1",version:"DICOM"},"(0018,7011)":{tag:"(0018,7011)",vr:"IS",name:"ExposuresOnDetectorSinceManufactured",vm:"1",version:"DICOM"},"(0018,7012)":{tag:"(0018,7012)",vr:"DS",name:"DetectorTimeSinceLastExposure",vm:"1",version:"DICOM"},"(0018,7014)":{tag:"(0018,7014)",vr:"DS",name:"DetectorActiveTime",vm:"1",version:"DICOM"},"(0018,7016)":{tag:"(0018,7016)",vr:"DS",name:"DetectorActivationOffsetFromExposure",vm:"1",version:"DICOM"},"(0018,701A)":{tag:"(0018,701A)",vr:"DS",name:"DetectorBinning",vm:"2",version:"DICOM"},"(0018,7020)":{tag:"(0018,7020)",vr:"DS",name:"DetectorElementPhysicalSize",vm:"2",version:"DICOM"},"(0018,7022)":{tag:"(0018,7022)",vr:"DS",name:"DetectorElementSpacing",vm:"2",version:"DICOM"},"(0018,7024)":{tag:"(0018,7024)",vr:"CS",name:"DetectorActiveShape",vm:"1",version:"DICOM"},"(0018,7026)":{tag:"(0018,7026)",vr:"DS",name:"DetectorActiveDimensions",vm:"1-2",version:"DICOM"},"(0018,7028)":{tag:"(0018,7028)",vr:"DS",name:"DetectorActiveOrigin",vm:"2",version:"DICOM"},"(0018,702A)":{tag:"(0018,702A)",vr:"LO",name:"DetectorManufacturerName",vm:"1",version:"DICOM"},"(0018,702B)":{tag:"(0018,702B)",vr:"LO",name:"DetectorManufacturerModelName",vm:"1",version:"DICOM"},"(0018,7030)":{tag:"(0018,7030)",vr:"DS",name:"FieldOfViewOrigin",vm:"2",version:"DICOM"},"(0018,7032)":{tag:"(0018,7032)",vr:"DS",name:"FieldOfViewRotation",vm:"1",version:"DICOM"},"(0018,7034)":{tag:"(0018,7034)",vr:"CS",name:"FieldOfViewHorizontalFlip",vm:"1",version:"DICOM"},"(0018,7036)":{tag:"(0018,7036)",vr:"FL",name:"PixelDataAreaOriginRelativeToFOV",vm:"2",version:"DICOM"},"(0018,7038)":{tag:"(0018,7038)",vr:"FL",name:"PixelDataAreaRotationAngleRelativeToFOV",vm:"1",version:"DICOM"},"(0018,7040)":{tag:"(0018,7040)",vr:"LT",name:"GridAbsorbingMaterial",vm:"1",version:"DICOM"},"(0018,7041)":{tag:"(0018,7041)",vr:"LT",name:"GridSpacingMaterial",vm:"1",version:"DICOM"},"(0018,7042)":{tag:"(0018,7042)",vr:"DS",name:"GridThickness",vm:"1",version:"DICOM"},"(0018,7044)":{tag:"(0018,7044)",vr:"DS",name:"GridPitch",vm:"1",version:"DICOM"},"(0018,7046)":{tag:"(0018,7046)",vr:"IS",name:"GridAspectRatio",vm:"2",version:"DICOM"},"(0018,7048)":{tag:"(0018,7048)",vr:"DS",name:"GridPeriod",vm:"1",version:"DICOM"},"(0018,704C)":{tag:"(0018,704C)",vr:"DS",name:"GridFocalDistance",vm:"1",version:"DICOM"},"(0018,7050)":{tag:"(0018,7050)",vr:"CS",name:"FilterMaterial",vm:"1-n",version:"DICOM"},"(0018,7052)":{tag:"(0018,7052)",vr:"DS",name:"FilterThicknessMinimum",vm:"1-n",version:"DICOM"},"(0018,7054)":{tag:"(0018,7054)",vr:"DS",name:"FilterThicknessMaximum",vm:"1-n",version:"DICOM"},"(0018,7056)":{tag:"(0018,7056)",vr:"FL",name:"FilterBeamPathLengthMinimum",vm:"1-n",version:"DICOM"},"(0018,7058)":{tag:"(0018,7058)",vr:"FL",name:"FilterBeamPathLengthMaximum",vm:"1-n",version:"DICOM"},"(0018,7060)":{tag:"(0018,7060)",vr:"CS",name:"ExposureControlMode",vm:"1",version:"DICOM"},"(0018,7062)":{tag:"(0018,7062)",vr:"LT",name:"ExposureControlModeDescription",vm:"1",version:"DICOM"},"(0018,7064)":{tag:"(0018,7064)",vr:"CS",name:"ExposureStatus",vm:"1",version:"DICOM"},"(0018,7065)":{tag:"(0018,7065)",vr:"DS",name:"PhototimerSetting",vm:"1",version:"DICOM"},"(0018,8150)":{tag:"(0018,8150)",vr:"DS",name:"ExposureTimeInuS",vm:"1",version:"DICOM"},"(0018,8151)":{tag:"(0018,8151)",vr:"DS",name:"XRayTubeCurrentInuA",vm:"1",version:"DICOM"},"(0018,9004)":{tag:"(0018,9004)",vr:"CS",name:"ContentQualification",vm:"1",version:"DICOM"},"(0018,9005)":{tag:"(0018,9005)",vr:"SH",name:"PulseSequenceName",vm:"1",version:"DICOM"},"(0018,9006)":{tag:"(0018,9006)",vr:"SQ",name:"MRImagingModifierSequence",vm:"1",version:"DICOM"},"(0018,9008)":{tag:"(0018,9008)",vr:"CS",name:"EchoPulseSequence",vm:"1",version:"DICOM"},"(0018,9009)":{tag:"(0018,9009)",vr:"CS",name:"InversionRecovery",vm:"1",version:"DICOM"},"(0018,9010)":{tag:"(0018,9010)",vr:"CS",name:"FlowCompensation",vm:"1",version:"DICOM"},"(0018,9011)":{tag:"(0018,9011)",vr:"CS",name:"MultipleSpinEcho",vm:"1",version:"DICOM"},"(0018,9012)":{tag:"(0018,9012)",vr:"CS",name:"MultiPlanarExcitation",vm:"1",version:"DICOM"},"(0018,9014)":{tag:"(0018,9014)",vr:"CS",name:"PhaseContrast",vm:"1",version:"DICOM"},"(0018,9015)":{tag:"(0018,9015)",vr:"CS",name:"TimeOfFlightContrast",vm:"1",version:"DICOM"},"(0018,9016)":{tag:"(0018,9016)",vr:"CS",name:"Spoiling",vm:"1",version:"DICOM"},"(0018,9017)":{tag:"(0018,9017)",vr:"CS",name:"SteadyStatePulseSequence",vm:"1",version:"DICOM"},"(0018,9018)":{tag:"(0018,9018)",vr:"CS",name:"EchoPlanarPulseSequence",vm:"1",version:"DICOM"},"(0018,9019)":{tag:"(0018,9019)",vr:"FD",name:"TagAngleFirstAxis",vm:"1",version:"DICOM"},"(0018,9020)":{tag:"(0018,9020)",vr:"CS",name:"MagnetizationTransfer",vm:"1",version:"DICOM"},"(0018,9021)":{tag:"(0018,9021)",vr:"CS",name:"T2Preparation",vm:"1",version:"DICOM"},"(0018,9022)":{tag:"(0018,9022)",vr:"CS",name:"BloodSignalNulling",vm:"1",version:"DICOM"},"(0018,9024)":{tag:"(0018,9024)",vr:"CS",name:"SaturationRecovery",vm:"1",version:"DICOM"},"(0018,9025)":{tag:"(0018,9025)",vr:"CS",name:"SpectrallySelectedSuppression",vm:"1",version:"DICOM"},"(0018,9026)":{tag:"(0018,9026)",vr:"CS",name:"SpectrallySelectedExcitation",vm:"1",version:"DICOM"},"(0018,9027)":{tag:"(0018,9027)",vr:"CS",name:"SpatialPresaturation",vm:"1",version:"DICOM"},"(0018,9028)":{tag:"(0018,9028)",vr:"CS",name:"Tagging",vm:"1",version:"DICOM"},"(0018,9029)":{tag:"(0018,9029)",vr:"CS",name:"OversamplingPhase",vm:"1",version:"DICOM"},"(0018,9030)":{tag:"(0018,9030)",vr:"FD",name:"TagSpacingFirstDimension",vm:"1",version:"DICOM"},"(0018,9032)":{tag:"(0018,9032)",vr:"CS",name:"GeometryOfKSpaceTraversal",vm:"1",version:"DICOM"},"(0018,9033)":{tag:"(0018,9033)",vr:"CS",name:"SegmentedKSpaceTraversal",vm:"1",version:"DICOM"},"(0018,9034)":{tag:"(0018,9034)",vr:"CS",name:"RectilinearPhaseEncodeReordering",vm:"1",version:"DICOM"},"(0018,9035)":{tag:"(0018,9035)",vr:"FD",name:"TagThickness",vm:"1",version:"DICOM"},"(0018,9036)":{tag:"(0018,9036)",vr:"CS",name:"PartialFourierDirection",vm:"1",version:"DICOM"},"(0018,9037)":{tag:"(0018,9037)",vr:"CS",name:"CardiacSynchronizationTechnique",vm:"1",version:"DICOM"},"(0018,9041)":{tag:"(0018,9041)",vr:"LO",name:"ReceiveCoilManufacturerName",vm:"1",version:"DICOM"},"(0018,9042)":{tag:"(0018,9042)",vr:"SQ",name:"MRReceiveCoilSequence",vm:"1",version:"DICOM"},"(0018,9043)":{tag:"(0018,9043)",vr:"CS",name:"ReceiveCoilType",vm:"1",version:"DICOM"},"(0018,9044)":{tag:"(0018,9044)",vr:"CS",name:"QuadratureReceiveCoil",vm:"1",version:"DICOM"},"(0018,9045)":{tag:"(0018,9045)",vr:"SQ",name:"MultiCoilDefinitionSequence",vm:"1",version:"DICOM"},"(0018,9046)":{tag:"(0018,9046)",vr:"LO",name:"MultiCoilConfiguration",vm:"1",version:"DICOM"},"(0018,9047)":{tag:"(0018,9047)",vr:"SH",name:"MultiCoilElementName",vm:"1",version:"DICOM"},"(0018,9048)":{tag:"(0018,9048)",vr:"CS",name:"MultiCoilElementUsed",vm:"1",version:"DICOM"},"(0018,9049)":{tag:"(0018,9049)",vr:"SQ",name:"MRTransmitCoilSequence",vm:"1",version:"DICOM"},"(0018,9050)":{tag:"(0018,9050)",vr:"LO",name:"TransmitCoilManufacturerName",vm:"1",version:"DICOM"},"(0018,9051)":{tag:"(0018,9051)",vr:"CS",name:"TransmitCoilType",vm:"1",version:"DICOM"},"(0018,9052)":{tag:"(0018,9052)",vr:"FD",name:"SpectralWidth",vm:"1-2",version:"DICOM"},"(0018,9053)":{tag:"(0018,9053)",vr:"FD",name:"ChemicalShiftReference",vm:"1-2",version:"DICOM"},"(0018,9054)":{tag:"(0018,9054)",vr:"CS",name:"VolumeLocalizationTechnique",vm:"1",version:"DICOM"},"(0018,9058)":{tag:"(0018,9058)",vr:"US",name:"MRAcquisitionFrequencyEncodingSteps",vm:"1",version:"DICOM"},"(0018,9059)":{tag:"(0018,9059)",vr:"CS",name:"Decoupling",vm:"1",version:"DICOM"},"(0018,9060)":{tag:"(0018,9060)",vr:"CS",name:"DecoupledNucleus",vm:"1-2",version:"DICOM"},"(0018,9061)":{tag:"(0018,9061)",vr:"FD",name:"DecouplingFrequency",vm:"1-2",version:"DICOM"},"(0018,9062)":{tag:"(0018,9062)",vr:"CS",name:"DecouplingMethod",vm:"1",version:"DICOM"},"(0018,9063)":{tag:"(0018,9063)",vr:"FD",name:"DecouplingChemicalShiftReference",vm:"1-2",version:"DICOM"},"(0018,9064)":{tag:"(0018,9064)",vr:"CS",name:"KSpaceFiltering",vm:"1",version:"DICOM"},"(0018,9065)":{tag:"(0018,9065)",vr:"CS",name:"TimeDomainFiltering",vm:"1-2",version:"DICOM"},"(0018,9066)":{tag:"(0018,9066)",vr:"US",name:"NumberOfZeroFills",vm:"1-2",version:"DICOM"},"(0018,9067)":{tag:"(0018,9067)",vr:"CS",name:"BaselineCorrection",vm:"1",version:"DICOM"},"(0018,9069)":{tag:"(0018,9069)",vr:"FD",name:"ParallelReductionFactorInPlane",vm:"1",version:"DICOM"},"(0018,9070)":{tag:"(0018,9070)",vr:"FD",name:"CardiacRRIntervalSpecified",vm:"1",version:"DICOM"},"(0018,9073)":{tag:"(0018,9073)",vr:"FD",name:"AcquisitionDuration",vm:"1",version:"DICOM"},"(0018,9074)":{tag:"(0018,9074)",vr:"DT",name:"FrameAcquisitionDateTime",vm:"1",version:"DICOM"},"(0018,9075)":{tag:"(0018,9075)",vr:"CS",name:"DiffusionDirectionality",vm:"1",version:"DICOM"},"(0018,9076)":{tag:"(0018,9076)",vr:"SQ",name:"DiffusionGradientDirectionSequence",vm:"1",version:"DICOM"},"(0018,9077)":{tag:"(0018,9077)",vr:"CS",name:"ParallelAcquisition",vm:"1",version:"DICOM"},"(0018,9078)":{tag:"(0018,9078)",vr:"CS",name:"ParallelAcquisitionTechnique",vm:"1",version:"DICOM"},"(0018,9079)":{tag:"(0018,9079)",vr:"FD",name:"InversionTimes",vm:"1-n",version:"DICOM"},"(0018,9080)":{tag:"(0018,9080)",vr:"ST",name:"MetaboliteMapDescription",vm:"1",version:"DICOM"},"(0018,9081)":{tag:"(0018,9081)",vr:"CS",name:"PartialFourier",vm:"1",version:"DICOM"},"(0018,9082)":{tag:"(0018,9082)",vr:"FD",name:"EffectiveEchoTime",vm:"1",version:"DICOM"},"(0018,9083)":{tag:"(0018,9083)",vr:"SQ",name:"MetaboliteMapCodeSequence",vm:"1",version:"DICOM"},"(0018,9084)":{tag:"(0018,9084)",vr:"SQ",name:"ChemicalShiftSequence",vm:"1",version:"DICOM"},"(0018,9085)":{tag:"(0018,9085)",vr:"CS",name:"CardiacSignalSource",vm:"1",version:"DICOM"},"(0018,9087)":{tag:"(0018,9087)",vr:"FD",name:"DiffusionBValue",vm:"1",version:"DICOM"},"(0018,9089)":{tag:"(0018,9089)",vr:"FD",name:"DiffusionGradientOrientation",vm:"3",version:"DICOM"},"(0018,9090)":{tag:"(0018,9090)",vr:"FD",name:"VelocityEncodingDirection",vm:"3",version:"DICOM"},"(0018,9091)":{tag:"(0018,9091)",vr:"FD",name:"VelocityEncodingMinimumValue",vm:"1",version:"DICOM"},"(0018,9092)":{tag:"(0018,9092)",vr:"SQ",name:"VelocityEncodingAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9093)":{tag:"(0018,9093)",vr:"US",name:"NumberOfKSpaceTrajectories",vm:"1",version:"DICOM"},"(0018,9094)":{tag:"(0018,9094)",vr:"CS",name:"CoverageOfKSpace",vm:"1",version:"DICOM"},"(0018,9095)":{tag:"(0018,9095)",vr:"UL",name:"SpectroscopyAcquisitionPhaseRows",vm:"1",version:"DICOM"},"(0018,9098)":{tag:"(0018,9098)",vr:"FD",name:"TransmitterFrequency",vm:"1-2",version:"DICOM"},"(0018,9100)":{tag:"(0018,9100)",vr:"CS",name:"ResonantNucleus",vm:"1-2",version:"DICOM"},"(0018,9101)":{tag:"(0018,9101)",vr:"CS",name:"FrequencyCorrection",vm:"1",version:"DICOM"},"(0018,9103)":{tag:"(0018,9103)",vr:"SQ",name:"MRSpectroscopyFOVGeometrySequence",vm:"1",version:"DICOM"},"(0018,9104)":{tag:"(0018,9104)",vr:"FD",name:"SlabThickness",vm:"1",version:"DICOM"},"(0018,9105)":{tag:"(0018,9105)",vr:"FD",name:"SlabOrientation",vm:"3",version:"DICOM"},"(0018,9106)":{tag:"(0018,9106)",vr:"FD",name:"MidSlabPosition",vm:"3",version:"DICOM"},"(0018,9107)":{tag:"(0018,9107)",vr:"SQ",name:"MRSpatialSaturationSequence",vm:"1",version:"DICOM"},"(0018,9112)":{tag:"(0018,9112)",vr:"SQ",name:"MRTimingAndRelatedParametersSequence",vm:"1",version:"DICOM"},"(0018,9114)":{tag:"(0018,9114)",vr:"SQ",name:"MREchoSequence",vm:"1",version:"DICOM"},"(0018,9115)":{tag:"(0018,9115)",vr:"SQ",name:"MRModifierSequence",vm:"1",version:"DICOM"},"(0018,9117)":{tag:"(0018,9117)",vr:"SQ",name:"MRDiffusionSequence",vm:"1",version:"DICOM"},"(0018,9118)":{tag:"(0018,9118)",vr:"SQ",name:"CardiacSynchronizationSequence",vm:"1",version:"DICOM"},"(0018,9119)":{tag:"(0018,9119)",vr:"SQ",name:"MRAveragesSequence",vm:"1",version:"DICOM"},"(0018,9125)":{tag:"(0018,9125)",vr:"SQ",name:"MRFOVGeometrySequence",vm:"1",version:"DICOM"},"(0018,9126)":{tag:"(0018,9126)",vr:"SQ",name:"VolumeLocalizationSequence",vm:"1",version:"DICOM"},"(0018,9127)":{tag:"(0018,9127)",vr:"UL",name:"SpectroscopyAcquisitionDataColumns",vm:"1",version:"DICOM"},"(0018,9147)":{tag:"(0018,9147)",vr:"CS",name:"DiffusionAnisotropyType",vm:"1",version:"DICOM"},"(0018,9151)":{tag:"(0018,9151)",vr:"DT",name:"FrameReferenceDateTime",vm:"1",version:"DICOM"},"(0018,9152)":{tag:"(0018,9152)",vr:"SQ",name:"MRMetaboliteMapSequence",vm:"1",version:"DICOM"},"(0018,9155)":{tag:"(0018,9155)",vr:"FD",name:"ParallelReductionFactorOutOfPlane",vm:"1",version:"DICOM"},"(0018,9159)":{tag:"(0018,9159)",vr:"UL",name:"SpectroscopyAcquisitionOutOfPlanePhaseSteps",vm:"1",version:"DICOM"},"(0018,9168)":{tag:"(0018,9168)",vr:"FD",name:"ParallelReductionFactorSecondInPlane",vm:"1",version:"DICOM"},"(0018,9169)":{tag:"(0018,9169)",vr:"CS",name:"CardiacBeatRejectionTechnique",vm:"1",version:"DICOM"},"(0018,9170)":{tag:"(0018,9170)",vr:"CS",name:"RespiratoryMotionCompensationTechnique",vm:"1",version:"DICOM"},"(0018,9171)":{tag:"(0018,9171)",vr:"CS",name:"RespiratorySignalSource",vm:"1",version:"DICOM"},"(0018,9172)":{tag:"(0018,9172)",vr:"CS",name:"BulkMotionCompensationTechnique",vm:"1",version:"DICOM"},"(0018,9173)":{tag:"(0018,9173)",vr:"CS",name:"BulkMotionSignalSource",vm:"1",version:"DICOM"},"(0018,9174)":{tag:"(0018,9174)",vr:"CS",name:"ApplicableSafetyStandardAgency",vm:"1",version:"DICOM"},"(0018,9175)":{tag:"(0018,9175)",vr:"LO",name:"ApplicableSafetyStandardDescription",vm:"1",version:"DICOM"},"(0018,9176)":{tag:"(0018,9176)",vr:"SQ",name:"OperatingModeSequence",vm:"1",version:"DICOM"},"(0018,9177)":{tag:"(0018,9177)",vr:"CS",name:"OperatingModeType",vm:"1",version:"DICOM"},"(0018,9178)":{tag:"(0018,9178)",vr:"CS",name:"OperatingMode",vm:"1",version:"DICOM"},"(0018,9179)":{tag:"(0018,9179)",vr:"CS",name:"SpecificAbsorptionRateDefinition",vm:"1",version:"DICOM"},"(0018,9180)":{tag:"(0018,9180)",vr:"CS",name:"GradientOutputType",vm:"1",version:"DICOM"},"(0018,9181)":{tag:"(0018,9181)",vr:"FD",name:"SpecificAbsorptionRateValue",vm:"1",version:"DICOM"},"(0018,9182)":{tag:"(0018,9182)",vr:"FD",name:"GradientOutput",vm:"1",version:"DICOM"},"(0018,9183)":{tag:"(0018,9183)",vr:"CS",name:"FlowCompensationDirection",vm:"1",version:"DICOM"},"(0018,9184)":{tag:"(0018,9184)",vr:"FD",name:"TaggingDelay",vm:"1",version:"DICOM"},"(0018,9185)":{tag:"(0018,9185)",vr:"ST",name:"RespiratoryMotionCompensationTechniqueDescription",vm:"1",version:"DICOM"},"(0018,9186)":{tag:"(0018,9186)",vr:"SH",name:"RespiratorySignalSourceID",vm:"1",version:"DICOM"},"(0018,9197)":{tag:"(0018,9197)",vr:"SQ",name:"MRVelocityEncodingSequence",vm:"1",version:"DICOM"},"(0018,9198)":{tag:"(0018,9198)",vr:"CS",name:"FirstOrderPhaseCorrection",vm:"1",version:"DICOM"},"(0018,9199)":{tag:"(0018,9199)",vr:"CS",name:"WaterReferencedPhaseCorrection",vm:"1",version:"DICOM"},"(0018,9200)":{tag:"(0018,9200)",vr:"CS",name:"MRSpectroscopyAcquisitionType",vm:"1",version:"DICOM"},"(0018,9214)":{tag:"(0018,9214)",vr:"CS",name:"RespiratoryCyclePosition",vm:"1",version:"DICOM"},"(0018,9217)":{tag:"(0018,9217)",vr:"FD",name:"VelocityEncodingMaximumValue",vm:"1",version:"DICOM"},"(0018,9218)":{tag:"(0018,9218)",vr:"FD",name:"TagSpacingSecondDimension",vm:"1",version:"DICOM"},"(0018,9219)":{tag:"(0018,9219)",vr:"SS",name:"TagAngleSecondAxis",vm:"1",version:"DICOM"},"(0018,9220)":{tag:"(0018,9220)",vr:"FD",name:"FrameAcquisitionDuration",vm:"1",version:"DICOM"},"(0018,9226)":{tag:"(0018,9226)",vr:"SQ",name:"MRImageFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9227)":{tag:"(0018,9227)",vr:"SQ",name:"MRSpectroscopyFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9231)":{tag:"(0018,9231)",vr:"US",name:"MRAcquisitionPhaseEncodingStepsInPlane",vm:"1",version:"DICOM"},"(0018,9232)":{tag:"(0018,9232)",vr:"US",name:"MRAcquisitionPhaseEncodingStepsOutOfPlane",vm:"1",version:"DICOM"},"(0018,9234)":{tag:"(0018,9234)",vr:"UL",name:"SpectroscopyAcquisitionPhaseColumns",vm:"1",version:"DICOM"},"(0018,9236)":{tag:"(0018,9236)",vr:"CS",name:"CardiacCyclePosition",vm:"1",version:"DICOM"},"(0018,9239)":{tag:"(0018,9239)",vr:"SQ",name:"SpecificAbsorptionRateSequence",vm:"1",version:"DICOM"},"(0018,9240)":{tag:"(0018,9240)",vr:"US",name:"RFEchoTrainLength",vm:"1",version:"DICOM"},"(0018,9241)":{tag:"(0018,9241)",vr:"US",name:"GradientEchoTrainLength",vm:"1",version:"DICOM"},"(0018,9250)":{tag:"(0018,9250)",vr:"CS",name:"ArterialSpinLabelingContrast",vm:"1",version:"DICOM"},"(0018,9251)":{tag:"(0018,9251)",vr:"SQ",name:"MRArterialSpinLabelingSequence",vm:"1",version:"DICOM"},"(0018,9252)":{tag:"(0018,9252)",vr:"LO",name:"ASLTechniqueDescription",vm:"1",version:"DICOM"},"(0018,9253)":{tag:"(0018,9253)",vr:"US",name:"ASLSlabNumber",vm:"1",version:"DICOM"},"(0018,9254)":{tag:"(0018,9254)",vr:"FD",name:"ASLSlabThickness",vm:"1",version:"DICOM"},"(0018,9255)":{tag:"(0018,9255)",vr:"FD",name:"ASLSlabOrientation",vm:"3",version:"DICOM"},"(0018,9256)":{tag:"(0018,9256)",vr:"FD",name:"ASLMidSlabPosition",vm:"3",version:"DICOM"},"(0018,9257)":{tag:"(0018,9257)",vr:"CS",name:"ASLContext",vm:"1",version:"DICOM"},"(0018,9258)":{tag:"(0018,9258)",vr:"UL",name:"ASLPulseTrainDuration",vm:"1",version:"DICOM"},"(0018,9259)":{tag:"(0018,9259)",vr:"CS",name:"ASLCrusherFlag",vm:"1",version:"DICOM"},"(0018,925A)":{tag:"(0018,925A)",vr:"FD",name:"ASLCrusherFlowLimit",vm:"1",version:"DICOM"},"(0018,925B)":{tag:"(0018,925B)",vr:"LO",name:"ASLCrusherDescription",vm:"1",version:"DICOM"},"(0018,925C)":{tag:"(0018,925C)",vr:"CS",name:"ASLBolusCutoffFlag",vm:"1",version:"DICOM"},"(0018,925D)":{tag:"(0018,925D)",vr:"SQ",name:"ASLBolusCutoffTimingSequence",vm:"1",version:"DICOM"},"(0018,925E)":{tag:"(0018,925E)",vr:"LO",name:"ASLBolusCutoffTechnique",vm:"1",version:"DICOM"},"(0018,925F)":{tag:"(0018,925F)",vr:"UL",name:"ASLBolusCutoffDelayTime",vm:"1",version:"DICOM"},"(0018,9260)":{tag:"(0018,9260)",vr:"SQ",name:"ASLSlabSequence",vm:"1",version:"DICOM"},"(0018,9295)":{tag:"(0018,9295)",vr:"FD",name:"ChemicalShiftMinimumIntegrationLimitInppm",vm:"1",version:"DICOM"},"(0018,9296)":{tag:"(0018,9296)",vr:"FD",name:"ChemicalShiftMaximumIntegrationLimitInppm",vm:"1",version:"DICOM"},"(0018,9297)":{tag:"(0018,9297)",vr:"CS",name:"WaterReferenceAcquisition",vm:"1",version:"DICOM"},"(0018,9298)":{tag:"(0018,9298)",vr:"IS",name:"EchoPeakPosition",vm:"1",version:"DICOM"},"(0018,9301)":{tag:"(0018,9301)",vr:"SQ",name:"CTAcquisitionTypeSequence",vm:"1",version:"DICOM"},"(0018,9302)":{tag:"(0018,9302)",vr:"CS",name:"AcquisitionType",vm:"1",version:"DICOM"},"(0018,9303)":{tag:"(0018,9303)",vr:"FD",name:"TubeAngle",vm:"1",version:"DICOM"},"(0018,9304)":{tag:"(0018,9304)",vr:"SQ",name:"CTAcquisitionDetailsSequence",vm:"1",version:"DICOM"},"(0018,9305)":{tag:"(0018,9305)",vr:"FD",name:"RevolutionTime",vm:"1",version:"DICOM"},"(0018,9306)":{tag:"(0018,9306)",vr:"FD",name:"SingleCollimationWidth",vm:"1",version:"DICOM"},"(0018,9307)":{tag:"(0018,9307)",vr:"FD",name:"TotalCollimationWidth",vm:"1",version:"DICOM"},"(0018,9308)":{tag:"(0018,9308)",vr:"SQ",name:"CTTableDynamicsSequence",vm:"1",version:"DICOM"},"(0018,9309)":{tag:"(0018,9309)",vr:"FD",name:"TableSpeed",vm:"1",version:"DICOM"},"(0018,9310)":{tag:"(0018,9310)",vr:"FD",name:"TableFeedPerRotation",vm:"1",version:"DICOM"},"(0018,9311)":{tag:"(0018,9311)",vr:"FD",name:"SpiralPitchFactor",vm:"1",version:"DICOM"},"(0018,9312)":{tag:"(0018,9312)",vr:"SQ",name:"CTGeometrySequence",vm:"1",version:"DICOM"},"(0018,9313)":{tag:"(0018,9313)",vr:"FD",name:"DataCollectionCenterPatient",vm:"3",version:"DICOM"},"(0018,9314)":{tag:"(0018,9314)",vr:"SQ",name:"CTReconstructionSequence",vm:"1",version:"DICOM"},"(0018,9315)":{tag:"(0018,9315)",vr:"CS",name:"ReconstructionAlgorithm",vm:"1",version:"DICOM"},"(0018,9316)":{tag:"(0018,9316)",vr:"CS",name:"ConvolutionKernelGroup",vm:"1",version:"DICOM"},"(0018,9317)":{tag:"(0018,9317)",vr:"FD",name:"ReconstructionFieldOfView",vm:"2",version:"DICOM"},"(0018,9318)":{tag:"(0018,9318)",vr:"FD",name:"ReconstructionTargetCenterPatient",vm:"3",version:"DICOM"},"(0018,9319)":{tag:"(0018,9319)",vr:"FD",name:"ReconstructionAngle",vm:"1",version:"DICOM"},"(0018,9320)":{tag:"(0018,9320)",vr:"SH",name:"ImageFilter",vm:"1",version:"DICOM"},"(0018,9321)":{tag:"(0018,9321)",vr:"SQ",name:"CTExposureSequence",vm:"1",version:"DICOM"},"(0018,9322)":{tag:"(0018,9322)",vr:"FD",name:"ReconstructionPixelSpacing",vm:"2",version:"DICOM"},"(0018,9323)":{tag:"(0018,9323)",vr:"CS",name:"ExposureModulationType",vm:"1",version:"DICOM"},"(0018,9324)":{tag:"(0018,9324)",vr:"FD",name:"EstimatedDoseSaving",vm:"1",version:"DICOM"},"(0018,9325)":{tag:"(0018,9325)",vr:"SQ",name:"CTXRayDetailsSequence",vm:"1",version:"DICOM"},"(0018,9326)":{tag:"(0018,9326)",vr:"SQ",name:"CTPositionSequence",vm:"1",version:"DICOM"},"(0018,9327)":{tag:"(0018,9327)",vr:"FD",name:"TablePosition",vm:"1",version:"DICOM"},"(0018,9328)":{tag:"(0018,9328)",vr:"FD",name:"ExposureTimeInms",vm:"1",version:"DICOM"},"(0018,9329)":{tag:"(0018,9329)",vr:"SQ",name:"CTImageFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9330)":{tag:"(0018,9330)",vr:"FD",name:"XRayTubeCurrentInmA",vm:"1",version:"DICOM"},"(0018,9332)":{tag:"(0018,9332)",vr:"FD",name:"ExposureInmAs",vm:"1",version:"DICOM"},"(0018,9333)":{tag:"(0018,9333)",vr:"CS",name:"ConstantVolumeFlag",vm:"1",version:"DICOM"},"(0018,9334)":{tag:"(0018,9334)",vr:"CS",name:"FluoroscopyFlag",vm:"1",version:"DICOM"},"(0018,9335)":{tag:"(0018,9335)",vr:"FD",name:"DistanceSourceToDataCollectionCenter",vm:"1",version:"DICOM"},"(0018,9337)":{tag:"(0018,9337)",vr:"US",name:"ContrastBolusAgentNumber",vm:"1",version:"DICOM"},"(0018,9338)":{tag:"(0018,9338)",vr:"SQ",name:"ContrastBolusIngredientCodeSequence",vm:"1",version:"DICOM"},"(0018,9340)":{tag:"(0018,9340)",vr:"SQ",name:"ContrastAdministrationProfileSequence",vm:"1",version:"DICOM"},"(0018,9341)":{tag:"(0018,9341)",vr:"SQ",name:"ContrastBolusUsageSequence",vm:"1",version:"DICOM"},"(0018,9342)":{tag:"(0018,9342)",vr:"CS",name:"ContrastBolusAgentAdministered",vm:"1",version:"DICOM"},"(0018,9343)":{tag:"(0018,9343)",vr:"CS",name:"ContrastBolusAgentDetected",vm:"1",version:"DICOM"},"(0018,9344)":{tag:"(0018,9344)",vr:"CS",name:"ContrastBolusAgentPhase",vm:"1",version:"DICOM"},"(0018,9345)":{tag:"(0018,9345)",vr:"FD",name:"CTDIvol",vm:"1",version:"DICOM"},"(0018,9346)":{tag:"(0018,9346)",vr:"SQ",name:"CTDIPhantomTypeCodeSequence",vm:"1",version:"DICOM"},"(0018,9351)":{tag:"(0018,9351)",vr:"FL",name:"CalciumScoringMassFactorPatient",vm:"1",version:"DICOM"},"(0018,9352)":{tag:"(0018,9352)",vr:"FL",name:"CalciumScoringMassFactorDevice",vm:"3",version:"DICOM"},"(0018,9353)":{tag:"(0018,9353)",vr:"FL",name:"EnergyWeightingFactor",vm:"1",version:"DICOM"},"(0018,9360)":{tag:"(0018,9360)",vr:"SQ",name:"CTAdditionalXRaySourceSequence",vm:"1",version:"DICOM"},"(0018,9361)":{tag:"(0018,9361)",vr:"CS",name:"MultienergyCTAcquisition",vm:"1",version:"DICOM"},"(0018,9362)":{tag:"(0018,9362)",vr:"SQ",name:"MultienergyCTAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9363)":{tag:"(0018,9363)",vr:"SQ",name:"MultienergyCTProcessingSequence",vm:"1",version:"DICOM"},"(0018,9364)":{tag:"(0018,9364)",vr:"SQ",name:"MultienergyCTCharacteristicsSequence",vm:"1",version:"DICOM"},"(0018,9365)":{tag:"(0018,9365)",vr:"SQ",name:"MultienergyCTXRaySourceSequence",vm:"1",version:"DICOM"},"(0018,9366)":{tag:"(0018,9366)",vr:"US",name:"XRaySourceIndex",vm:"1",version:"DICOM"},"(0018,9367)":{tag:"(0018,9367)",vr:"UC",name:"XRaySourceID",vm:"1",version:"DICOM"},"(0018,9368)":{tag:"(0018,9368)",vr:"CS",name:"MultienergySourceTechnique",vm:"1",version:"DICOM"},"(0018,9369)":{tag:"(0018,9369)",vr:"DT",name:"SourceStartDateTime",vm:"1",version:"DICOM"},"(0018,936A)":{tag:"(0018,936A)",vr:"DT",name:"SourceEndDateTime",vm:"1",version:"DICOM"},"(0018,936B)":{tag:"(0018,936B)",vr:"US",name:"SwitchingPhaseNumber",vm:"1",version:"DICOM"},"(0018,936C)":{tag:"(0018,936C)",vr:"DS",name:"SwitchingPhaseNominalDuration",vm:"1",version:"DICOM"},"(0018,936D)":{tag:"(0018,936D)",vr:"DS",name:"SwitchingPhaseTransitionDuration",vm:"1",version:"DICOM"},"(0018,936E)":{tag:"(0018,936E)",vr:"DS",name:"EffectiveBinEnergy",vm:"1",version:"DICOM"},"(0018,936F)":{tag:"(0018,936F)",vr:"SQ",name:"MultienergyCTXRayDetectorSequence",vm:"1",version:"DICOM"},"(0018,9370)":{tag:"(0018,9370)",vr:"US",name:"XRayDetectorIndex",vm:"1",version:"DICOM"},"(0018,9371)":{tag:"(0018,9371)",vr:"UC",name:"XRayDetectorID",vm:"1",version:"DICOM"},"(0018,9372)":{tag:"(0018,9372)",vr:"CS",name:"MultienergyDetectorType",vm:"1",version:"DICOM"},"(0018,9373)":{tag:"(0018,9373)",vr:"ST",name:"XRayDetectorLabel",vm:"1",version:"DICOM"},"(0018,9374)":{tag:"(0018,9374)",vr:"DS",name:"NominalMaxEnergy",vm:"1",version:"DICOM"},"(0018,9375)":{tag:"(0018,9375)",vr:"DS",name:"NominalMinEnergy",vm:"1",version:"DICOM"},"(0018,9376)":{tag:"(0018,9376)",vr:"US",name:"ReferencedXRayDetectorIndex",vm:"1-n",version:"DICOM"},"(0018,9377)":{tag:"(0018,9377)",vr:"US",name:"ReferencedXRaySourceIndex",vm:"1-n",version:"DICOM"},"(0018,9378)":{tag:"(0018,9378)",vr:"US",name:"ReferencedPathIndex",vm:"1-n",version:"DICOM"},"(0018,9379)":{tag:"(0018,9379)",vr:"SQ",name:"MultienergyCTPathSequence",vm:"1",version:"DICOM"},"(0018,937A)":{tag:"(0018,937A)",vr:"US",name:"MultienergyCTPathIndex",vm:"1",version:"DICOM"},"(0018,937B)":{tag:"(0018,937B)",vr:"UT",name:"MultienergyAcquisitionDescription",vm:"1",version:"DICOM"},"(0018,937C)":{tag:"(0018,937C)",vr:"FD",name:"MonoenergeticEnergyEquivalent",vm:"1",version:"DICOM"},"(0018,937D)":{tag:"(0018,937D)",vr:"SQ",name:"MaterialCodeSequence",vm:"1",version:"DICOM"},"(0018,937E)":{tag:"(0018,937E)",vr:"CS",name:"DecompositionMethod",vm:"1",version:"DICOM"},"(0018,937F)":{tag:"(0018,937F)",vr:"UT",name:"DecompositionDescription",vm:"1",version:"DICOM"},"(0018,9380)":{tag:"(0018,9380)",vr:"SQ",name:"DecompositionAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0018,9381)":{tag:"(0018,9381)",vr:"SQ",name:"DecompositionMaterialSequence",vm:"1",version:"DICOM"},"(0018,9382)":{tag:"(0018,9382)",vr:"SQ",name:"MaterialAttenuationSequence",vm:"1",version:"DICOM"},"(0018,9383)":{tag:"(0018,9383)",vr:"DS",name:"PhotonEnergy",vm:"1",version:"DICOM"},"(0018,9384)":{tag:"(0018,9384)",vr:"DS",name:"XRayMassAttenuationCoefficient",vm:"1",version:"DICOM"},"(0018,9401)":{tag:"(0018,9401)",vr:"SQ",name:"ProjectionPixelCalibrationSequence",vm:"1",version:"DICOM"},"(0018,9402)":{tag:"(0018,9402)",vr:"FL",name:"DistanceSourceToIsocenter",vm:"1",version:"DICOM"},"(0018,9403)":{tag:"(0018,9403)",vr:"FL",name:"DistanceObjectToTableTop",vm:"1",version:"DICOM"},"(0018,9404)":{tag:"(0018,9404)",vr:"FL",name:"ObjectPixelSpacingInCenterOfBeam",vm:"2",version:"DICOM"},"(0018,9405)":{tag:"(0018,9405)",vr:"SQ",name:"PositionerPositionSequence",vm:"1",version:"DICOM"},"(0018,9406)":{tag:"(0018,9406)",vr:"SQ",name:"TablePositionSequence",vm:"1",version:"DICOM"},"(0018,9407)":{tag:"(0018,9407)",vr:"SQ",name:"CollimatorShapeSequence",vm:"1",version:"DICOM"},"(0018,9410)":{tag:"(0018,9410)",vr:"CS",name:"PlanesInAcquisition",vm:"1",version:"DICOM"},"(0018,9412)":{tag:"(0018,9412)",vr:"SQ",name:"XAXRFFrameCharacteristicsSequence",vm:"1",version:"DICOM"},"(0018,9417)":{tag:"(0018,9417)",vr:"SQ",name:"FrameAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9420)":{tag:"(0018,9420)",vr:"CS",name:"XRayReceptorType",vm:"1",version:"DICOM"},"(0018,9423)":{tag:"(0018,9423)",vr:"LO",name:"AcquisitionProtocolName",vm:"1",version:"DICOM"},"(0018,9424)":{tag:"(0018,9424)",vr:"LT",name:"AcquisitionProtocolDescription",vm:"1",version:"DICOM"},"(0018,9425)":{tag:"(0018,9425)",vr:"CS",name:"ContrastBolusIngredientOpaque",vm:"1",version:"DICOM"},"(0018,9426)":{tag:"(0018,9426)",vr:"FL",name:"DistanceReceptorPlaneToDetectorHousing",vm:"1",version:"DICOM"},"(0018,9427)":{tag:"(0018,9427)",vr:"CS",name:"IntensifierActiveShape",vm:"1",version:"DICOM"},"(0018,9428)":{tag:"(0018,9428)",vr:"FL",name:"IntensifierActiveDimensions",vm:"1-2",version:"DICOM"},"(0018,9429)":{tag:"(0018,9429)",vr:"FL",name:"PhysicalDetectorSize",vm:"2",version:"DICOM"},"(0018,9430)":{tag:"(0018,9430)",vr:"FL",name:"PositionOfIsocenterProjection",vm:"2",version:"DICOM"},"(0018,9432)":{tag:"(0018,9432)",vr:"SQ",name:"FieldOfViewSequence",vm:"1",version:"DICOM"},"(0018,9433)":{tag:"(0018,9433)",vr:"LO",name:"FieldOfViewDescription",vm:"1",version:"DICOM"},"(0018,9434)":{tag:"(0018,9434)",vr:"SQ",name:"ExposureControlSensingRegionsSequence",vm:"1",version:"DICOM"},"(0018,9435)":{tag:"(0018,9435)",vr:"CS",name:"ExposureControlSensingRegionShape",vm:"1",version:"DICOM"},"(0018,9436)":{tag:"(0018,9436)",vr:"SS",name:"ExposureControlSensingRegionLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,9437)":{tag:"(0018,9437)",vr:"SS",name:"ExposureControlSensingRegionRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,9438)":{tag:"(0018,9438)",vr:"SS",name:"ExposureControlSensingRegionUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,9439)":{tag:"(0018,9439)",vr:"SS",name:"ExposureControlSensingRegionLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,9440)":{tag:"(0018,9440)",vr:"SS",name:"CenterOfCircularExposureControlSensingRegion",vm:"2",version:"DICOM"},"(0018,9441)":{tag:"(0018,9441)",vr:"US",name:"RadiusOfCircularExposureControlSensingRegion",vm:"1",version:"DICOM"},"(0018,9442)":{tag:"(0018,9442)",vr:"SS",name:"VerticesOfThePolygonalExposureControlSensingRegion",vm:"2-n",version:"DICOM"},"(0018,9447)":{tag:"(0018,9447)",vr:"FL",name:"ColumnAngulationPatient",vm:"1",version:"DICOM"},"(0018,9449)":{tag:"(0018,9449)",vr:"FL",name:"BeamAngle",vm:"1",version:"DICOM"},"(0018,9451)":{tag:"(0018,9451)",vr:"SQ",name:"FrameDetectorParametersSequence",vm:"1",version:"DICOM"},"(0018,9452)":{tag:"(0018,9452)",vr:"FL",name:"CalculatedAnatomyThickness",vm:"1",version:"DICOM"},"(0018,9455)":{tag:"(0018,9455)",vr:"SQ",name:"CalibrationSequence",vm:"1",version:"DICOM"},"(0018,9456)":{tag:"(0018,9456)",vr:"SQ",name:"ObjectThicknessSequence",vm:"1",version:"DICOM"},"(0018,9457)":{tag:"(0018,9457)",vr:"CS",name:"PlaneIdentification",vm:"1",version:"DICOM"},"(0018,9461)":{tag:"(0018,9461)",vr:"FL",name:"FieldOfViewDimensionsInFloat",vm:"1-2",version:"DICOM"},"(0018,9462)":{tag:"(0018,9462)",vr:"SQ",name:"IsocenterReferenceSystemSequence",vm:"1",version:"DICOM"},"(0018,9463)":{tag:"(0018,9463)",vr:"FL",name:"PositionerIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9464)":{tag:"(0018,9464)",vr:"FL",name:"PositionerIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9465)":{tag:"(0018,9465)",vr:"FL",name:"PositionerIsocenterDetectorRotationAngle",vm:"1",version:"DICOM"},"(0018,9466)":{tag:"(0018,9466)",vr:"FL",name:"TableXPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9467)":{tag:"(0018,9467)",vr:"FL",name:"TableYPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9468)":{tag:"(0018,9468)",vr:"FL",name:"TableZPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9469)":{tag:"(0018,9469)",vr:"FL",name:"TableHorizontalRotationAngle",vm:"1",version:"DICOM"},"(0018,9470)":{tag:"(0018,9470)",vr:"FL",name:"TableHeadTiltAngle",vm:"1",version:"DICOM"},"(0018,9471)":{tag:"(0018,9471)",vr:"FL",name:"TableCradleTiltAngle",vm:"1",version:"DICOM"},"(0018,9472)":{tag:"(0018,9472)",vr:"SQ",name:"FrameDisplayShutterSequence",vm:"1",version:"DICOM"},"(0018,9473)":{tag:"(0018,9473)",vr:"FL",name:"AcquiredImageAreaDoseProduct",vm:"1",version:"DICOM"},"(0018,9474)":{tag:"(0018,9474)",vr:"CS",name:"CArmPositionerTabletopRelationship",vm:"1",version:"DICOM"},"(0018,9476)":{tag:"(0018,9476)",vr:"SQ",name:"XRayGeometrySequence",vm:"1",version:"DICOM"},"(0018,9477)":{tag:"(0018,9477)",vr:"SQ",name:"IrradiationEventIdentificationSequence",vm:"1",version:"DICOM"},"(0018,9504)":{tag:"(0018,9504)",vr:"SQ",name:"XRay3DFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9506)":{tag:"(0018,9506)",vr:"SQ",name:"ContributingSourcesSequence",vm:"1",version:"DICOM"},"(0018,9507)":{tag:"(0018,9507)",vr:"SQ",name:"XRay3DAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9508)":{tag:"(0018,9508)",vr:"FL",name:"PrimaryPositionerScanArc",vm:"1",version:"DICOM"},"(0018,9509)":{tag:"(0018,9509)",vr:"FL",name:"SecondaryPositionerScanArc",vm:"1",version:"DICOM"},"(0018,9510)":{tag:"(0018,9510)",vr:"FL",name:"PrimaryPositionerScanStartAngle",vm:"1",version:"DICOM"},"(0018,9511)":{tag:"(0018,9511)",vr:"FL",name:"SecondaryPositionerScanStartAngle",vm:"1",version:"DICOM"},"(0018,9514)":{tag:"(0018,9514)",vr:"FL",name:"PrimaryPositionerIncrement",vm:"1",version:"DICOM"},"(0018,9515)":{tag:"(0018,9515)",vr:"FL",name:"SecondaryPositionerIncrement",vm:"1",version:"DICOM"},"(0018,9516)":{tag:"(0018,9516)",vr:"DT",name:"StartAcquisitionDateTime",vm:"1",version:"DICOM"},"(0018,9517)":{tag:"(0018,9517)",vr:"DT",name:"EndAcquisitionDateTime",vm:"1",version:"DICOM"},"(0018,9518)":{tag:"(0018,9518)",vr:"SS",name:"PrimaryPositionerIncrementSign",vm:"1",version:"DICOM"},"(0018,9519)":{tag:"(0018,9519)",vr:"SS",name:"SecondaryPositionerIncrementSign",vm:"1",version:"DICOM"},"(0018,9524)":{tag:"(0018,9524)",vr:"LO",name:"ApplicationName",vm:"1",version:"DICOM"},"(0018,9525)":{tag:"(0018,9525)",vr:"LO",name:"ApplicationVersion",vm:"1",version:"DICOM"},"(0018,9526)":{tag:"(0018,9526)",vr:"LO",name:"ApplicationManufacturer",vm:"1",version:"DICOM"},"(0018,9527)":{tag:"(0018,9527)",vr:"CS",name:"AlgorithmType",vm:"1",version:"DICOM"},"(0018,9528)":{tag:"(0018,9528)",vr:"LO",name:"AlgorithmDescription",vm:"1",version:"DICOM"},"(0018,9530)":{tag:"(0018,9530)",vr:"SQ",name:"XRay3DReconstructionSequence",vm:"1",version:"DICOM"},"(0018,9531)":{tag:"(0018,9531)",vr:"LO",name:"ReconstructionDescription",vm:"1",version:"DICOM"},"(0018,9538)":{tag:"(0018,9538)",vr:"SQ",name:"PerProjectionAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9541)":{tag:"(0018,9541)",vr:"SQ",name:"DetectorPositionSequence",vm:"1",version:"DICOM"},"(0018,9542)":{tag:"(0018,9542)",vr:"SQ",name:"XRayAcquisitionDoseSequence",vm:"1",version:"DICOM"},"(0018,9543)":{tag:"(0018,9543)",vr:"FD",name:"XRaySourceIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9544)":{tag:"(0018,9544)",vr:"FD",name:"XRaySourceIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9545)":{tag:"(0018,9545)",vr:"FD",name:"BreastSupportIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9546)":{tag:"(0018,9546)",vr:"FD",name:"BreastSupportIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9547)":{tag:"(0018,9547)",vr:"FD",name:"BreastSupportXPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9548)":{tag:"(0018,9548)",vr:"FD",name:"BreastSupportYPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9549)":{tag:"(0018,9549)",vr:"FD",name:"BreastSupportZPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9550)":{tag:"(0018,9550)",vr:"FD",name:"DetectorIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9551)":{tag:"(0018,9551)",vr:"FD",name:"DetectorIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9552)":{tag:"(0018,9552)",vr:"FD",name:"DetectorXPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9553)":{tag:"(0018,9553)",vr:"FD",name:"DetectorYPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9554)":{tag:"(0018,9554)",vr:"FD",name:"DetectorZPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9555)":{tag:"(0018,9555)",vr:"SQ",name:"XRayGridSequence",vm:"1",version:"DICOM"},"(0018,9556)":{tag:"(0018,9556)",vr:"SQ",name:"XRayFilterSequence",vm:"1",version:"DICOM"},"(0018,9557)":{tag:"(0018,9557)",vr:"FD",name:"DetectorActiveAreaTLHCPosition",vm:"3",version:"DICOM"},"(0018,9558)":{tag:"(0018,9558)",vr:"FD",name:"DetectorActiveAreaOrientation",vm:"6",version:"DICOM"},"(0018,9559)":{tag:"(0018,9559)",vr:"CS",name:"PositionerPrimaryAngleDirection",vm:"1",version:"DICOM"},"(0018,9601)":{tag:"(0018,9601)",vr:"SQ",name:"DiffusionBMatrixSequence",vm:"1",version:"DICOM"},"(0018,9602)":{tag:"(0018,9602)",vr:"FD",name:"DiffusionBValueXX",vm:"1",version:"DICOM"},"(0018,9603)":{tag:"(0018,9603)",vr:"FD",name:"DiffusionBValueXY",vm:"1",version:"DICOM"},"(0018,9604)":{tag:"(0018,9604)",vr:"FD",name:"DiffusionBValueXZ",vm:"1",version:"DICOM"},"(0018,9605)":{tag:"(0018,9605)",vr:"FD",name:"DiffusionBValueYY",vm:"1",version:"DICOM"},"(0018,9606)":{tag:"(0018,9606)",vr:"FD",name:"DiffusionBValueYZ",vm:"1",version:"DICOM"},"(0018,9607)":{tag:"(0018,9607)",vr:"FD",name:"DiffusionBValueZZ",vm:"1",version:"DICOM"},"(0018,9621)":{tag:"(0018,9621)",vr:"SQ",name:"FunctionalMRSequence",vm:"1",version:"DICOM"},"(0018,9622)":{tag:"(0018,9622)",vr:"CS",name:"FunctionalSettlingPhaseFramesPresent",vm:"1",version:"DICOM"},"(0018,9623)":{tag:"(0018,9623)",vr:"DT",name:"FunctionalSyncPulse",vm:"1",version:"DICOM"},"(0018,9624)":{tag:"(0018,9624)",vr:"CS",name:"SettlingPhaseFrame",vm:"1",version:"DICOM"},"(0018,9701)":{tag:"(0018,9701)",vr:"DT",name:"DecayCorrectionDateTime",vm:"1",version:"DICOM"},"(0018,9715)":{tag:"(0018,9715)",vr:"FD",name:"StartDensityThreshold",vm:"1",version:"DICOM"},"(0018,9716)":{tag:"(0018,9716)",vr:"FD",name:"StartRelativeDensityDifferenceThreshold",vm:"1",version:"DICOM"},"(0018,9717)":{tag:"(0018,9717)",vr:"FD",name:"StartCardiacTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9718)":{tag:"(0018,9718)",vr:"FD",name:"StartRespiratoryTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9719)":{tag:"(0018,9719)",vr:"FD",name:"TerminationCountsThreshold",vm:"1",version:"DICOM"},"(0018,9720)":{tag:"(0018,9720)",vr:"FD",name:"TerminationDensityThreshold",vm:"1",version:"DICOM"},"(0018,9721)":{tag:"(0018,9721)",vr:"FD",name:"TerminationRelativeDensityThreshold",vm:"1",version:"DICOM"},"(0018,9722)":{tag:"(0018,9722)",vr:"FD",name:"TerminationTimeThreshold",vm:"1",version:"DICOM"},"(0018,9723)":{tag:"(0018,9723)",vr:"FD",name:"TerminationCardiacTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9724)":{tag:"(0018,9724)",vr:"FD",name:"TerminationRespiratoryTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9725)":{tag:"(0018,9725)",vr:"CS",name:"DetectorGeometry",vm:"1",version:"DICOM"},"(0018,9726)":{tag:"(0018,9726)",vr:"FD",name:"TransverseDetectorSeparation",vm:"1",version:"DICOM"},"(0018,9727)":{tag:"(0018,9727)",vr:"FD",name:"AxialDetectorDimension",vm:"1",version:"DICOM"},"(0018,9729)":{tag:"(0018,9729)",vr:"US",name:"RadiopharmaceuticalAgentNumber",vm:"1",version:"DICOM"},"(0018,9732)":{tag:"(0018,9732)",vr:"SQ",name:"PETFrameAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9733)":{tag:"(0018,9733)",vr:"SQ",name:"PETDetectorMotionDetailsSequence",vm:"1",version:"DICOM"},"(0018,9734)":{tag:"(0018,9734)",vr:"SQ",name:"PETTableDynamicsSequence",vm:"1",version:"DICOM"},"(0018,9735)":{tag:"(0018,9735)",vr:"SQ",name:"PETPositionSequence",vm:"1",version:"DICOM"},"(0018,9736)":{tag:"(0018,9736)",vr:"SQ",name:"PETFrameCorrectionFactorsSequence",vm:"1",version:"DICOM"},"(0018,9737)":{tag:"(0018,9737)",vr:"SQ",name:"RadiopharmaceuticalUsageSequence",vm:"1",version:"DICOM"},"(0018,9738)":{tag:"(0018,9738)",vr:"CS",name:"AttenuationCorrectionSource",vm:"1",version:"DICOM"},"(0018,9739)":{tag:"(0018,9739)",vr:"US",name:"NumberOfIterations",vm:"1",version:"DICOM"},"(0018,9740)":{tag:"(0018,9740)",vr:"US",name:"NumberOfSubsets",vm:"1",version:"DICOM"},"(0018,9749)":{tag:"(0018,9749)",vr:"SQ",name:"PETReconstructionSequence",vm:"1",version:"DICOM"},"(0018,9751)":{tag:"(0018,9751)",vr:"SQ",name:"PETFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9755)":{tag:"(0018,9755)",vr:"CS",name:"TimeOfFlightInformationUsed",vm:"1",version:"DICOM"},"(0018,9756)":{tag:"(0018,9756)",vr:"CS",name:"ReconstructionType",vm:"1",version:"DICOM"},"(0018,9758)":{tag:"(0018,9758)",vr:"CS",name:"DecayCorrected",vm:"1",version:"DICOM"},"(0018,9759)":{tag:"(0018,9759)",vr:"CS",name:"AttenuationCorrected",vm:"1",version:"DICOM"},"(0018,9760)":{tag:"(0018,9760)",vr:"CS",name:"ScatterCorrected",vm:"1",version:"DICOM"},"(0018,9761)":{tag:"(0018,9761)",vr:"CS",name:"DeadTimeCorrected",vm:"1",version:"DICOM"},"(0018,9762)":{tag:"(0018,9762)",vr:"CS",name:"GantryMotionCorrected",vm:"1",version:"DICOM"},"(0018,9763)":{tag:"(0018,9763)",vr:"CS",name:"PatientMotionCorrected",vm:"1",version:"DICOM"},"(0018,9764)":{tag:"(0018,9764)",vr:"CS",name:"CountLossNormalizationCorrected",vm:"1",version:"DICOM"},"(0018,9765)":{tag:"(0018,9765)",vr:"CS",name:"RandomsCorrected",vm:"1",version:"DICOM"},"(0018,9766)":{tag:"(0018,9766)",vr:"CS",name:"NonUniformRadialSamplingCorrected",vm:"1",version:"DICOM"},"(0018,9767)":{tag:"(0018,9767)",vr:"CS",name:"SensitivityCalibrated",vm:"1",version:"DICOM"},"(0018,9768)":{tag:"(0018,9768)",vr:"CS",name:"DetectorNormalizationCorrection",vm:"1",version:"DICOM"},"(0018,9769)":{tag:"(0018,9769)",vr:"CS",name:"IterativeReconstructionMethod",vm:"1",version:"DICOM"},"(0018,9770)":{tag:"(0018,9770)",vr:"CS",name:"AttenuationCorrectionTemporalRelationship",vm:"1",version:"DICOM"},"(0018,9771)":{tag:"(0018,9771)",vr:"SQ",name:"PatientPhysiologicalStateSequence",vm:"1",version:"DICOM"},"(0018,9772)":{tag:"(0018,9772)",vr:"SQ",name:"PatientPhysiologicalStateCodeSequence",vm:"1",version:"DICOM"},"(0018,9801)":{tag:"(0018,9801)",vr:"FD",name:"DepthsOfFocus",vm:"1-n",version:"DICOM"},"(0018,9803)":{tag:"(0018,9803)",vr:"SQ",name:"ExcludedIntervalsSequence",vm:"1",version:"DICOM"},"(0018,9804)":{tag:"(0018,9804)",vr:"DT",name:"ExclusionStartDateTime",vm:"1",version:"DICOM"},"(0018,9805)":{tag:"(0018,9805)",vr:"FD",name:"ExclusionDuration",vm:"1",version:"DICOM"},"(0018,9806)":{tag:"(0018,9806)",vr:"SQ",name:"USImageDescriptionSequence",vm:"1",version:"DICOM"},"(0018,9807)":{tag:"(0018,9807)",vr:"SQ",name:"ImageDataTypeSequence",vm:"1",version:"DICOM"},"(0018,9808)":{tag:"(0018,9808)",vr:"CS",name:"DataType",vm:"1",version:"DICOM"},"(0018,9809)":{tag:"(0018,9809)",vr:"SQ",name:"TransducerScanPatternCodeSequence",vm:"1",version:"DICOM"},"(0018,980B)":{tag:"(0018,980B)",vr:"CS",name:"AliasedDataType",vm:"1",version:"DICOM"},"(0018,980C)":{tag:"(0018,980C)",vr:"CS",name:"PositionMeasuringDeviceUsed",vm:"1",version:"DICOM"},"(0018,980D)":{tag:"(0018,980D)",vr:"SQ",name:"TransducerGeometryCodeSequence",vm:"1",version:"DICOM"},"(0018,980E)":{tag:"(0018,980E)",vr:"SQ",name:"TransducerBeamSteeringCodeSequence",vm:"1",version:"DICOM"},"(0018,980F)":{tag:"(0018,980F)",vr:"SQ",name:"TransducerApplicationCodeSequence",vm:"1",version:"DICOM"},"(0018,9810)":{tag:"(0018,9810)",vr:"xs",name:"ZeroVelocityPixelValue",vm:"1",version:"DICOM"},"(0018,9900)":{tag:"(0018,9900)",vr:"LO",name:"ReferenceLocationLabel",vm:"1",version:"DICOM"},"(0018,9901)":{tag:"(0018,9901)",vr:"UT",name:"ReferenceLocationDescription",vm:"1",version:"DICOM"},"(0018,9902)":{tag:"(0018,9902)",vr:"SQ",name:"ReferenceBasisCodeSequence",vm:"1",version:"DICOM"},"(0018,9903)":{tag:"(0018,9903)",vr:"SQ",name:"ReferenceGeometryCodeSequence",vm:"1",version:"DICOM"},"(0018,9904)":{tag:"(0018,9904)",vr:"DS",name:"OffsetDistance",vm:"1",version:"DICOM"},"(0018,9905)":{tag:"(0018,9905)",vr:"CS",name:"OffsetDirection",vm:"1",version:"DICOM"},"(0018,9906)":{tag:"(0018,9906)",vr:"SQ",name:"PotentialScheduledProtocolCodeSequence",vm:"1",version:"DICOM"},"(0018,9907)":{tag:"(0018,9907)",vr:"SQ",name:"PotentialRequestedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0018,9908)":{tag:"(0018,9908)",vr:"UC",name:"PotentialReasonsForProcedure",vm:"1-n",version:"DICOM"},"(0018,9909)":{tag:"(0018,9909)",vr:"SQ",name:"PotentialReasonsForProcedureCodeSequence",vm:"1",version:"DICOM"},"(0018,990A)":{tag:"(0018,990A)",vr:"UC",name:"PotentialDiagnosticTasks",vm:"1-n",version:"DICOM"},"(0018,990B)":{tag:"(0018,990B)",vr:"SQ",name:"ContraindicationsCodeSequence",vm:"1",version:"DICOM"},"(0018,990C)":{tag:"(0018,990C)",vr:"SQ",name:"ReferencedDefinedProtocolSequence",vm:"1",version:"DICOM"},"(0018,990D)":{tag:"(0018,990D)",vr:"SQ",name:"ReferencedPerformedProtocolSequence",vm:"1",version:"DICOM"},"(0018,990E)":{tag:"(0018,990E)",vr:"SQ",name:"PredecessorProtocolSequence",vm:"1",version:"DICOM"},"(0018,990F)":{tag:"(0018,990F)",vr:"UT",name:"ProtocolPlanningInformation",vm:"1",version:"DICOM"},"(0018,9910)":{tag:"(0018,9910)",vr:"UT",name:"ProtocolDesignRationale",vm:"1",version:"DICOM"},"(0018,9911)":{tag:"(0018,9911)",vr:"SQ",name:"PatientSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9912)":{tag:"(0018,9912)",vr:"SQ",name:"ModelSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9913)":{tag:"(0018,9913)",vr:"SQ",name:"ParametersSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9914)":{tag:"(0018,9914)",vr:"SQ",name:"InstructionSequence",vm:"1",version:"DICOM"},"(0018,9915)":{tag:"(0018,9915)",vr:"US",name:"InstructionIndex",vm:"1",version:"DICOM"},"(0018,9916)":{tag:"(0018,9916)",vr:"LO",name:"InstructionText",vm:"1",version:"DICOM"},"(0018,9917)":{tag:"(0018,9917)",vr:"UT",name:"InstructionDescription",vm:"1",version:"DICOM"},"(0018,9918)":{tag:"(0018,9918)",vr:"CS",name:"InstructionPerformedFlag",vm:"1",version:"DICOM"},"(0018,9919)":{tag:"(0018,9919)",vr:"DT",name:"InstructionPerformedDateTime",vm:"1",version:"DICOM"},"(0018,991A)":{tag:"(0018,991A)",vr:"UT",name:"InstructionPerformanceComment",vm:"1",version:"DICOM"},"(0018,991B)":{tag:"(0018,991B)",vr:"SQ",name:"PatientPositioningInstructionSequence",vm:"1",version:"DICOM"},"(0018,991C)":{tag:"(0018,991C)",vr:"SQ",name:"PositioningMethodCodeSequence",vm:"1",version:"DICOM"},"(0018,991D)":{tag:"(0018,991D)",vr:"SQ",name:"PositioningLandmarkSequence",vm:"1",version:"DICOM"},"(0018,991E)":{tag:"(0018,991E)",vr:"UI",name:"TargetFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0018,991F)":{tag:"(0018,991F)",vr:"SQ",name:"AcquisitionProtocolElementSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9920)":{tag:"(0018,9920)",vr:"SQ",name:"AcquisitionProtocolElementSequence",vm:"1",version:"DICOM"},"(0018,9921)":{tag:"(0018,9921)",vr:"US",name:"ProtocolElementNumber",vm:"1",version:"DICOM"},"(0018,9922)":{tag:"(0018,9922)",vr:"LO",name:"ProtocolElementName",vm:"1",version:"DICOM"},"(0018,9923)":{tag:"(0018,9923)",vr:"UT",name:"ProtocolElementCharacteristicsSummary",vm:"1",version:"DICOM"},"(0018,9924)":{tag:"(0018,9924)",vr:"UT",name:"ProtocolElementPurpose",vm:"1",version:"DICOM"},"(0018,9930)":{tag:"(0018,9930)",vr:"CS",name:"AcquisitionMotion",vm:"1",version:"DICOM"},"(0018,9931)":{tag:"(0018,9931)",vr:"SQ",name:"AcquisitionStartLocationSequence",vm:"1",version:"DICOM"},"(0018,9932)":{tag:"(0018,9932)",vr:"SQ",name:"AcquisitionEndLocationSequence",vm:"1",version:"DICOM"},"(0018,9933)":{tag:"(0018,9933)",vr:"SQ",name:"ReconstructionProtocolElementSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9934)":{tag:"(0018,9934)",vr:"SQ",name:"ReconstructionProtocolElementSequence",vm:"1",version:"DICOM"},"(0018,9935)":{tag:"(0018,9935)",vr:"SQ",name:"StorageProtocolElementSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9936)":{tag:"(0018,9936)",vr:"SQ",name:"StorageProtocolElementSequence",vm:"1",version:"DICOM"},"(0018,9937)":{tag:"(0018,9937)",vr:"LO",name:"RequestedSeriesDescription",vm:"1",version:"DICOM"},"(0018,9938)":{tag:"(0018,9938)",vr:"US",name:"SourceAcquisitionProtocolElementNumber",vm:"1-n",version:"DICOM"},"(0018,9939)":{tag:"(0018,9939)",vr:"US",name:"SourceAcquisitionBeamNumber",vm:"1-n",version:"DICOM"},"(0018,993A)":{tag:"(0018,993A)",vr:"US",name:"SourceReconstructionProtocolElementNumber",vm:"1-n",version:"DICOM"},"(0018,993B)":{tag:"(0018,993B)",vr:"SQ",name:"ReconstructionStartLocationSequence",vm:"1",version:"DICOM"},"(0018,993C)":{tag:"(0018,993C)",vr:"SQ",name:"ReconstructionEndLocationSequence",vm:"1",version:"DICOM"},"(0018,993D)":{tag:"(0018,993D)",vr:"SQ",name:"ReconstructionAlgorithmSequence",vm:"1",version:"DICOM"},"(0018,993E)":{tag:"(0018,993E)",vr:"SQ",name:"ReconstructionTargetCenterLocationSequence",vm:"1",version:"DICOM"},"(0018,9941)":{tag:"(0018,9941)",vr:"UT",name:"ImageFilterDescription",vm:"1",version:"DICOM"},"(0018,9942)":{tag:"(0018,9942)",vr:"FD",name:"CTDIvolNotificationTrigger",vm:"1",version:"DICOM"},"(0018,9943)":{tag:"(0018,9943)",vr:"FD",name:"DLPNotificationTrigger",vm:"1",version:"DICOM"},"(0018,9944)":{tag:"(0018,9944)",vr:"CS",name:"AutoKVPSelectionType",vm:"1",version:"DICOM"},"(0018,9945)":{tag:"(0018,9945)",vr:"FD",name:"AutoKVPUpperBound",vm:"1",version:"DICOM"},"(0018,9946)":{tag:"(0018,9946)",vr:"FD",name:"AutoKVPLowerBound",vm:"1",version:"DICOM"},"(0018,9947)":{tag:"(0018,9947)",vr:"CS",name:"ProtocolDefinedPatientPosition",vm:"1",version:"DICOM"},"(0018,A001)":{tag:"(0018,A001)",vr:"SQ",name:"ContributingEquipmentSequence",vm:"1",version:"DICOM"},"(0018,A002)":{tag:"(0018,A002)",vr:"DT",name:"ContributionDateTime",vm:"1",version:"DICOM"},"(0018,A003)":{tag:"(0018,A003)",vr:"ST",name:"ContributionDescription",vm:"1",version:"DICOM"},"(0020,000D)":{tag:"(0020,000D)",vr:"UI",name:"StudyInstanceUID",vm:"1",version:"DICOM"},"(0020,000E)":{tag:"(0020,000E)",vr:"UI",name:"SeriesInstanceUID",vm:"1",version:"DICOM"},"(0020,0010)":{tag:"(0020,0010)",vr:"SH",name:"StudyID",vm:"1",version:"DICOM"},"(0020,0011)":{tag:"(0020,0011)",vr:"IS",name:"SeriesNumber",vm:"1",version:"DICOM"},"(0020,0012)":{tag:"(0020,0012)",vr:"IS",name:"AcquisitionNumber",vm:"1",version:"DICOM"},"(0020,0013)":{tag:"(0020,0013)",vr:"IS",name:"InstanceNumber",vm:"1",version:"DICOM"},"(0020,0019)":{tag:"(0020,0019)",vr:"IS",name:"ItemNumber",vm:"1",version:"DICOM"},"(0020,0020)":{tag:"(0020,0020)",vr:"CS",name:"PatientOrientation",vm:"2",version:"DICOM"},"(0020,0032)":{tag:"(0020,0032)",vr:"DS",name:"ImagePositionPatient",vm:"3",version:"DICOM"},"(0020,0037)":{tag:"(0020,0037)",vr:"DS",name:"ImageOrientationPatient",vm:"6",version:"DICOM"},"(0020,0052)":{tag:"(0020,0052)",vr:"UI",name:"FrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,0060)":{tag:"(0020,0060)",vr:"CS",name:"Laterality",vm:"1",version:"DICOM"},"(0020,0062)":{tag:"(0020,0062)",vr:"CS",name:"ImageLaterality",vm:"1",version:"DICOM"},"(0020,0100)":{tag:"(0020,0100)",vr:"IS",name:"TemporalPositionIdentifier",vm:"1",version:"DICOM"},"(0020,0105)":{tag:"(0020,0105)",vr:"IS",name:"NumberOfTemporalPositions",vm:"1",version:"DICOM"},"(0020,0110)":{tag:"(0020,0110)",vr:"DS",name:"TemporalResolution",vm:"1",version:"DICOM"},"(0020,0200)":{tag:"(0020,0200)",vr:"UI",name:"SynchronizationFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,0242)":{tag:"(0020,0242)",vr:"UI",name:"SOPInstanceUIDOfConcatenationSource",vm:"1",version:"DICOM"},"(0020,1002)":{tag:"(0020,1002)",vr:"IS",name:"ImagesInAcquisition",vm:"1",version:"DICOM"},"(0020,103F)":{tag:"(0020,103F)",vr:"LO",name:"TargetPositionReferenceIndicator",vm:"1",version:"DICOM"},"(0020,1040)":{tag:"(0020,1040)",vr:"LO",name:"PositionReferenceIndicator",vm:"1",version:"DICOM"},"(0020,1041)":{tag:"(0020,1041)",vr:"DS",name:"SliceLocation",vm:"1",version:"DICOM"},"(0020,1200)":{tag:"(0020,1200)",vr:"IS",name:"NumberOfPatientRelatedStudies",vm:"1",version:"DICOM"},"(0020,1202)":{tag:"(0020,1202)",vr:"IS",name:"NumberOfPatientRelatedSeries",vm:"1",version:"DICOM"},"(0020,1204)":{tag:"(0020,1204)",vr:"IS",name:"NumberOfPatientRelatedInstances",vm:"1",version:"DICOM"},"(0020,1206)":{tag:"(0020,1206)",vr:"IS",name:"NumberOfStudyRelatedSeries",vm:"1",version:"DICOM"},"(0020,1208)":{tag:"(0020,1208)",vr:"IS",name:"NumberOfStudyRelatedInstances",vm:"1",version:"DICOM"},"(0020,1209)":{tag:"(0020,1209)",vr:"IS",name:"NumberOfSeriesRelatedInstances",vm:"1",version:"DICOM"},"(0020,4000)":{tag:"(0020,4000)",vr:"LT",name:"ImageComments",vm:"1",version:"DICOM"},"(0020,9056)":{tag:"(0020,9056)",vr:"SH",name:"StackID",vm:"1",version:"DICOM"},"(0020,9057)":{tag:"(0020,9057)",vr:"UL",name:"InStackPositionNumber",vm:"1",version:"DICOM"},"(0020,9071)":{tag:"(0020,9071)",vr:"SQ",name:"FrameAnatomySequence",vm:"1",version:"DICOM"},"(0020,9072)":{tag:"(0020,9072)",vr:"CS",name:"FrameLaterality",vm:"1",version:"DICOM"},"(0020,9111)":{tag:"(0020,9111)",vr:"SQ",name:"FrameContentSequence",vm:"1",version:"DICOM"},"(0020,9113)":{tag:"(0020,9113)",vr:"SQ",name:"PlanePositionSequence",vm:"1",version:"DICOM"},"(0020,9116)":{tag:"(0020,9116)",vr:"SQ",name:"PlaneOrientationSequence",vm:"1",version:"DICOM"},"(0020,9128)":{tag:"(0020,9128)",vr:"UL",name:"TemporalPositionIndex",vm:"1",version:"DICOM"},"(0020,9153)":{tag:"(0020,9153)",vr:"FD",name:"NominalCardiacTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9154)":{tag:"(0020,9154)",vr:"FL",name:"NominalCardiacTriggerTimePriorToRPeak",vm:"1",version:"DICOM"},"(0020,9155)":{tag:"(0020,9155)",vr:"FL",name:"ActualCardiacTriggerTimePriorToRPeak",vm:"1",version:"DICOM"},"(0020,9156)":{tag:"(0020,9156)",vr:"US",name:"FrameAcquisitionNumber",vm:"1",version:"DICOM"},"(0020,9157)":{tag:"(0020,9157)",vr:"UL",name:"DimensionIndexValues",vm:"1-n",version:"DICOM"},"(0020,9158)":{tag:"(0020,9158)",vr:"LT",name:"FrameComments",vm:"1",version:"DICOM"},"(0020,9161)":{tag:"(0020,9161)",vr:"UI",name:"ConcatenationUID",vm:"1",version:"DICOM"},"(0020,9162)":{tag:"(0020,9162)",vr:"US",name:"InConcatenationNumber",vm:"1",version:"DICOM"},"(0020,9163)":{tag:"(0020,9163)",vr:"US",name:"InConcatenationTotalNumber",vm:"1",version:"DICOM"},"(0020,9164)":{tag:"(0020,9164)",vr:"UI",name:"DimensionOrganizationUID",vm:"1",version:"DICOM"},"(0020,9165)":{tag:"(0020,9165)",vr:"AT",name:"DimensionIndexPointer",vm:"1",version:"DICOM"},"(0020,9167)":{tag:"(0020,9167)",vr:"AT",name:"FunctionalGroupPointer",vm:"1",version:"DICOM"},"(0020,9170)":{tag:"(0020,9170)",vr:"SQ",name:"UnassignedSharedConvertedAttributesSequence",vm:"1",version:"DICOM"},"(0020,9171)":{tag:"(0020,9171)",vr:"SQ",name:"UnassignedPerFrameConvertedAttributesSequence",vm:"1",version:"DICOM"},"(0020,9172)":{tag:"(0020,9172)",vr:"SQ",name:"ConversionSourceAttributesSequence",vm:"1",version:"DICOM"},"(0020,9213)":{tag:"(0020,9213)",vr:"LO",name:"DimensionIndexPrivateCreator",vm:"1",version:"DICOM"},"(0020,9221)":{tag:"(0020,9221)",vr:"SQ",name:"DimensionOrganizationSequence",vm:"1",version:"DICOM"},"(0020,9222)":{tag:"(0020,9222)",vr:"SQ",name:"DimensionIndexSequence",vm:"1",version:"DICOM"},"(0020,9228)":{tag:"(0020,9228)",vr:"UL",name:"ConcatenationFrameOffsetNumber",vm:"1",version:"DICOM"},"(0020,9238)":{tag:"(0020,9238)",vr:"LO",name:"FunctionalGroupPrivateCreator",vm:"1",version:"DICOM"},"(0020,9241)":{tag:"(0020,9241)",vr:"FL",name:"NominalPercentageOfCardiacPhase",vm:"1",version:"DICOM"},"(0020,9245)":{tag:"(0020,9245)",vr:"FL",name:"NominalPercentageOfRespiratoryPhase",vm:"1",version:"DICOM"},"(0020,9246)":{tag:"(0020,9246)",vr:"FL",name:"StartingRespiratoryAmplitude",vm:"1",version:"DICOM"},"(0020,9247)":{tag:"(0020,9247)",vr:"CS",name:"StartingRespiratoryPhase",vm:"1",version:"DICOM"},"(0020,9248)":{tag:"(0020,9248)",vr:"FL",name:"EndingRespiratoryAmplitude",vm:"1",version:"DICOM"},"(0020,9249)":{tag:"(0020,9249)",vr:"CS",name:"EndingRespiratoryPhase",vm:"1",version:"DICOM"},"(0020,9250)":{tag:"(0020,9250)",vr:"CS",name:"RespiratoryTriggerType",vm:"1",version:"DICOM"},"(0020,9251)":{tag:"(0020,9251)",vr:"FD",name:"RRIntervalTimeNominal",vm:"1",version:"DICOM"},"(0020,9252)":{tag:"(0020,9252)",vr:"FD",name:"ActualCardiacTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9253)":{tag:"(0020,9253)",vr:"SQ",name:"RespiratorySynchronizationSequence",vm:"1",version:"DICOM"},"(0020,9254)":{tag:"(0020,9254)",vr:"FD",name:"RespiratoryIntervalTime",vm:"1",version:"DICOM"},"(0020,9255)":{tag:"(0020,9255)",vr:"FD",name:"NominalRespiratoryTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9256)":{tag:"(0020,9256)",vr:"FD",name:"RespiratoryTriggerDelayThreshold",vm:"1",version:"DICOM"},"(0020,9257)":{tag:"(0020,9257)",vr:"FD",name:"ActualRespiratoryTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9301)":{tag:"(0020,9301)",vr:"FD",name:"ImagePositionVolume",vm:"3",version:"DICOM"},"(0020,9302)":{tag:"(0020,9302)",vr:"FD",name:"ImageOrientationVolume",vm:"6",version:"DICOM"},"(0020,9307)":{tag:"(0020,9307)",vr:"CS",name:"UltrasoundAcquisitionGeometry",vm:"1",version:"DICOM"},"(0020,9308)":{tag:"(0020,9308)",vr:"FD",name:"ApexPosition",vm:"3",version:"DICOM"},"(0020,9309)":{tag:"(0020,9309)",vr:"FD",name:"VolumeToTransducerMappingMatrix",vm:"16",version:"DICOM"},"(0020,930A)":{tag:"(0020,930A)",vr:"FD",name:"VolumeToTableMappingMatrix",vm:"16",version:"DICOM"},"(0020,930B)":{tag:"(0020,930B)",vr:"CS",name:"VolumeToTransducerRelationship",vm:"1",version:"DICOM"},"(0020,930C)":{tag:"(0020,930C)",vr:"CS",name:"PatientFrameOfReferenceSource",vm:"1",version:"DICOM"},"(0020,930D)":{tag:"(0020,930D)",vr:"FD",name:"TemporalPositionTimeOffset",vm:"1",version:"DICOM"},"(0020,930E)":{tag:"(0020,930E)",vr:"SQ",name:"PlanePositionVolumeSequence",vm:"1",version:"DICOM"},"(0020,930F)":{tag:"(0020,930F)",vr:"SQ",name:"PlaneOrientationVolumeSequence",vm:"1",version:"DICOM"},"(0020,9310)":{tag:"(0020,9310)",vr:"SQ",name:"TemporalPositionSequence",vm:"1",version:"DICOM"},"(0020,9311)":{tag:"(0020,9311)",vr:"CS",name:"DimensionOrganizationType",vm:"1",version:"DICOM"},"(0020,9312)":{tag:"(0020,9312)",vr:"UI",name:"VolumeFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,9313)":{tag:"(0020,9313)",vr:"UI",name:"TableFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,9421)":{tag:"(0020,9421)",vr:"LO",name:"DimensionDescriptionLabel",vm:"1",version:"DICOM"},"(0020,9450)":{tag:"(0020,9450)",vr:"SQ",name:"PatientOrientationInFrameSequence",vm:"1",version:"DICOM"},"(0020,9453)":{tag:"(0020,9453)",vr:"LO",name:"FrameLabel",vm:"1",version:"DICOM"},"(0020,9518)":{tag:"(0020,9518)",vr:"US",name:"AcquisitionIndex",vm:"1-n",version:"DICOM"},"(0020,9529)":{tag:"(0020,9529)",vr:"SQ",name:"ContributingSOPInstancesReferenceSequence",vm:"1",version:"DICOM"},"(0020,9536)":{tag:"(0020,9536)",vr:"US",name:"ReconstructionIndex",vm:"1",version:"DICOM"},"(0022,0001)":{tag:"(0022,0001)",vr:"US",name:"LightPathFilterPassThroughWavelength",vm:"1",version:"DICOM"},"(0022,0002)":{tag:"(0022,0002)",vr:"US",name:"LightPathFilterPassBand",vm:"2",version:"DICOM"},"(0022,0003)":{tag:"(0022,0003)",vr:"US",name:"ImagePathFilterPassThroughWavelength",vm:"1",version:"DICOM"},"(0022,0004)":{tag:"(0022,0004)",vr:"US",name:"ImagePathFilterPassBand",vm:"2",version:"DICOM"},"(0022,0005)":{tag:"(0022,0005)",vr:"CS",name:"PatientEyeMovementCommanded",vm:"1",version:"DICOM"},"(0022,0006)":{tag:"(0022,0006)",vr:"SQ",name:"PatientEyeMovementCommandCodeSequence",vm:"1",version:"DICOM"},"(0022,0007)":{tag:"(0022,0007)",vr:"FL",name:"SphericalLensPower",vm:"1",version:"DICOM"},"(0022,0008)":{tag:"(0022,0008)",vr:"FL",name:"CylinderLensPower",vm:"1",version:"DICOM"},"(0022,0009)":{tag:"(0022,0009)",vr:"FL",name:"CylinderAxis",vm:"1",version:"DICOM"},"(0022,000A)":{tag:"(0022,000A)",vr:"FL",name:"EmmetropicMagnification",vm:"1",version:"DICOM"},"(0022,000B)":{tag:"(0022,000B)",vr:"FL",name:"IntraOcularPressure",vm:"1",version:"DICOM"},"(0022,000C)":{tag:"(0022,000C)",vr:"FL",name:"HorizontalFieldOfView",vm:"1",version:"DICOM"},"(0022,000D)":{tag:"(0022,000D)",vr:"CS",name:"PupilDilated",vm:"1",version:"DICOM"},"(0022,000E)":{tag:"(0022,000E)",vr:"FL",name:"DegreeOfDilation",vm:"1",version:"DICOM"},"(0022,0010)":{tag:"(0022,0010)",vr:"FL",name:"StereoBaselineAngle",vm:"1",version:"DICOM"},"(0022,0011)":{tag:"(0022,0011)",vr:"FL",name:"StereoBaselineDisplacement",vm:"1",version:"DICOM"},"(0022,0012)":{tag:"(0022,0012)",vr:"FL",name:"StereoHorizontalPixelOffset",vm:"1",version:"DICOM"},"(0022,0013)":{tag:"(0022,0013)",vr:"FL",name:"StereoVerticalPixelOffset",vm:"1",version:"DICOM"},"(0022,0014)":{tag:"(0022,0014)",vr:"FL",name:"StereoRotation",vm:"1",version:"DICOM"},"(0022,0015)":{tag:"(0022,0015)",vr:"SQ",name:"AcquisitionDeviceTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,0016)":{tag:"(0022,0016)",vr:"SQ",name:"IlluminationTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,0017)":{tag:"(0022,0017)",vr:"SQ",name:"LightPathFilterTypeStackCodeSequence",vm:"1",version:"DICOM"},"(0022,0018)":{tag:"(0022,0018)",vr:"SQ",name:"ImagePathFilterTypeStackCodeSequence",vm:"1",version:"DICOM"},"(0022,0019)":{tag:"(0022,0019)",vr:"SQ",name:"LensesCodeSequence",vm:"1",version:"DICOM"},"(0022,001A)":{tag:"(0022,001A)",vr:"SQ",name:"ChannelDescriptionCodeSequence",vm:"1",version:"DICOM"},"(0022,001B)":{tag:"(0022,001B)",vr:"SQ",name:"RefractiveStateSequence",vm:"1",version:"DICOM"},"(0022,001C)":{tag:"(0022,001C)",vr:"SQ",name:"MydriaticAgentCodeSequence",vm:"1",version:"DICOM"},"(0022,001D)":{tag:"(0022,001D)",vr:"SQ",name:"RelativeImagePositionCodeSequence",vm:"1",version:"DICOM"},"(0022,001E)":{tag:"(0022,001E)",vr:"FL",name:"CameraAngleOfView",vm:"1",version:"DICOM"},"(0022,0020)":{tag:"(0022,0020)",vr:"SQ",name:"StereoPairsSequence",vm:"1",version:"DICOM"},"(0022,0021)":{tag:"(0022,0021)",vr:"SQ",name:"LeftImageSequence",vm:"1",version:"DICOM"},"(0022,0022)":{tag:"(0022,0022)",vr:"SQ",name:"RightImageSequence",vm:"1",version:"DICOM"},"(0022,0028)":{tag:"(0022,0028)",vr:"CS",name:"StereoPairsPresent",vm:"1",version:"DICOM"},"(0022,0030)":{tag:"(0022,0030)",vr:"FL",name:"AxialLengthOfTheEye",vm:"1",version:"DICOM"},"(0022,0031)":{tag:"(0022,0031)",vr:"SQ",name:"OphthalmicFrameLocationSequence",vm:"1",version:"DICOM"},"(0022,0032)":{tag:"(0022,0032)",vr:"FL",name:"ReferenceCoordinates",vm:"2-2n",version:"DICOM"},"(0022,0035)":{tag:"(0022,0035)",vr:"FL",name:"DepthSpatialResolution",vm:"1",version:"DICOM"},"(0022,0036)":{tag:"(0022,0036)",vr:"FL",name:"MaximumDepthDistortion",vm:"1",version:"DICOM"},"(0022,0037)":{tag:"(0022,0037)",vr:"FL",name:"AlongScanSpatialResolution",vm:"1",version:"DICOM"},"(0022,0038)":{tag:"(0022,0038)",vr:"FL",name:"MaximumAlongScanDistortion",vm:"1",version:"DICOM"},"(0022,0039)":{tag:"(0022,0039)",vr:"CS",name:"OphthalmicImageOrientation",vm:"1",version:"DICOM"},"(0022,0041)":{tag:"(0022,0041)",vr:"FL",name:"DepthOfTransverseImage",vm:"1",version:"DICOM"},"(0022,0042)":{tag:"(0022,0042)",vr:"SQ",name:"MydriaticAgentConcentrationUnitsSequence",vm:"1",version:"DICOM"},"(0022,0048)":{tag:"(0022,0048)",vr:"FL",name:"AcrossScanSpatialResolution",vm:"1",version:"DICOM"},"(0022,0049)":{tag:"(0022,0049)",vr:"FL",name:"MaximumAcrossScanDistortion",vm:"1",version:"DICOM"},"(0022,004E)":{tag:"(0022,004E)",vr:"DS",name:"MydriaticAgentConcentration",vm:"1",version:"DICOM"},"(0022,0055)":{tag:"(0022,0055)",vr:"FL",name:"IlluminationWaveLength",vm:"1",version:"DICOM"},"(0022,0056)":{tag:"(0022,0056)",vr:"FL",name:"IlluminationPower",vm:"1",version:"DICOM"},"(0022,0057)":{tag:"(0022,0057)",vr:"FL",name:"IlluminationBandwidth",vm:"1",version:"DICOM"},"(0022,0058)":{tag:"(0022,0058)",vr:"SQ",name:"MydriaticAgentSequence",vm:"1",version:"DICOM"},"(0022,1007)":{tag:"(0022,1007)",vr:"SQ",name:"OphthalmicAxialMeasurementsRightEyeSequence",vm:"1",version:"DICOM"},"(0022,1008)":{tag:"(0022,1008)",vr:"SQ",name:"OphthalmicAxialMeasurementsLeftEyeSequence",vm:"1",version:"DICOM"},"(0022,1009)":{tag:"(0022,1009)",vr:"CS",name:"OphthalmicAxialMeasurementsDeviceType",vm:"1",version:"DICOM"},"(0022,1010)":{tag:"(0022,1010)",vr:"CS",name:"OphthalmicAxialLengthMeasurementsType",vm:"1",version:"DICOM"},"(0022,1012)":{tag:"(0022,1012)",vr:"SQ",name:"OphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1019)":{tag:"(0022,1019)",vr:"FL",name:"OphthalmicAxialLength",vm:"1",version:"DICOM"},"(0022,1024)":{tag:"(0022,1024)",vr:"SQ",name:"LensStatusCodeSequence",vm:"1",version:"DICOM"},"(0022,1025)":{tag:"(0022,1025)",vr:"SQ",name:"VitreousStatusCodeSequence",vm:"1",version:"DICOM"},"(0022,1028)":{tag:"(0022,1028)",vr:"SQ",name:"IOLFormulaCodeSequence",vm:"1",version:"DICOM"},"(0022,1029)":{tag:"(0022,1029)",vr:"LO",name:"IOLFormulaDetail",vm:"1",version:"DICOM"},"(0022,1033)":{tag:"(0022,1033)",vr:"FL",name:"KeratometerIndex",vm:"1",version:"DICOM"},"(0022,1035)":{tag:"(0022,1035)",vr:"SQ",name:"SourceOfOphthalmicAxialLengthCodeSequence",vm:"1",version:"DICOM"},"(0022,1036)":{tag:"(0022,1036)",vr:"SQ",name:"SourceOfCornealSizeDataCodeSequence",vm:"1",version:"DICOM"},"(0022,1037)":{tag:"(0022,1037)",vr:"FL",name:"TargetRefraction",vm:"1",version:"DICOM"},"(0022,1039)":{tag:"(0022,1039)",vr:"CS",name:"RefractiveProcedureOccurred",vm:"1",version:"DICOM"},"(0022,1040)":{tag:"(0022,1040)",vr:"SQ",name:"RefractiveSurgeryTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1044)":{tag:"(0022,1044)",vr:"SQ",name:"OphthalmicUltrasoundMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1045)":{tag:"(0022,1045)",vr:"SQ",name:"SurgicallyInducedAstigmatismSequence",vm:"1",version:"DICOM"},"(0022,1046)":{tag:"(0022,1046)",vr:"CS",name:"TypeOfOpticalCorrection",vm:"1",version:"DICOM"},"(0022,1047)":{tag:"(0022,1047)",vr:"SQ",name:"ToricIOLPowerSequence",vm:"1",version:"DICOM"},"(0022,1048)":{tag:"(0022,1048)",vr:"SQ",name:"PredictedToricErrorSequence",vm:"1",version:"DICOM"},"(0022,1049)":{tag:"(0022,1049)",vr:"CS",name:"PreSelectedForImplantation",vm:"1",version:"DICOM"},"(0022,104A)":{tag:"(0022,104A)",vr:"SQ",name:"ToricIOLPowerForExactEmmetropiaSequence",vm:"1",version:"DICOM"},"(0022,104B)":{tag:"(0022,104B)",vr:"SQ",name:"ToricIOLPowerForExactTargetRefractionSequence",vm:"1",version:"DICOM"},"(0022,1050)":{tag:"(0022,1050)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1053)":{tag:"(0022,1053)",vr:"FL",name:"IOLPower",vm:"1",version:"DICOM"},"(0022,1054)":{tag:"(0022,1054)",vr:"FL",name:"PredictedRefractiveError",vm:"1",version:"DICOM"},"(0022,1059)":{tag:"(0022,1059)",vr:"FL",name:"OphthalmicAxialLengthVelocity",vm:"1",version:"DICOM"},"(0022,1065)":{tag:"(0022,1065)",vr:"LO",name:"LensStatusDescription",vm:"1",version:"DICOM"},"(0022,1066)":{tag:"(0022,1066)",vr:"LO",name:"VitreousStatusDescription",vm:"1",version:"DICOM"},"(0022,1090)":{tag:"(0022,1090)",vr:"SQ",name:"IOLPowerSequence",vm:"1",version:"DICOM"},"(0022,1092)":{tag:"(0022,1092)",vr:"SQ",name:"LensConstantSequence",vm:"1",version:"DICOM"},"(0022,1093)":{tag:"(0022,1093)",vr:"LO",name:"IOLManufacturer",vm:"1",version:"DICOM"},"(0022,1095)":{tag:"(0022,1095)",vr:"LO",name:"ImplantName",vm:"1",version:"DICOM"},"(0022,1096)":{tag:"(0022,1096)",vr:"SQ",name:"KeratometryMeasurementTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1097)":{tag:"(0022,1097)",vr:"LO",name:"ImplantPartNumber",vm:"1",version:"DICOM"},"(0022,1100)":{tag:"(0022,1100)",vr:"SQ",name:"ReferencedOphthalmicAxialMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1101)":{tag:"(0022,1101)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsSegmentNameCodeSequence",vm:"1",version:"DICOM"},"(0022,1103)":{tag:"(0022,1103)",vr:"SQ",name:"RefractiveErrorBeforeRefractiveSurgeryCodeSequence",vm:"1",version:"DICOM"},"(0022,1121)":{tag:"(0022,1121)",vr:"FL",name:"IOLPowerForExactEmmetropia",vm:"1",version:"DICOM"},"(0022,1122)":{tag:"(0022,1122)",vr:"FL",name:"IOLPowerForExactTargetRefraction",vm:"1",version:"DICOM"},"(0022,1125)":{tag:"(0022,1125)",vr:"SQ",name:"AnteriorChamberDepthDefinitionCodeSequence",vm:"1",version:"DICOM"},"(0022,1127)":{tag:"(0022,1127)",vr:"SQ",name:"LensThicknessSequence",vm:"1",version:"DICOM"},"(0022,1128)":{tag:"(0022,1128)",vr:"SQ",name:"AnteriorChamberDepthSequence",vm:"1",version:"DICOM"},"(0022,112A)":{tag:"(0022,112A)",vr:"SQ",name:"CalculationCommentSequence",vm:"1",version:"DICOM"},"(0022,112B)":{tag:"(0022,112B)",vr:"CS",name:"CalculationCommentType",vm:"1",version:"DICOM"},"(0022,112C)":{tag:"(0022,112C)",vr:"LT",name:"CalculationComment",vm:"1",version:"DICOM"},"(0022,1130)":{tag:"(0022,1130)",vr:"FL",name:"LensThickness",vm:"1",version:"DICOM"},"(0022,1131)":{tag:"(0022,1131)",vr:"FL",name:"AnteriorChamberDepth",vm:"1",version:"DICOM"},"(0022,1132)":{tag:"(0022,1132)",vr:"SQ",name:"SourceOfLensThicknessDataCodeSequence",vm:"1",version:"DICOM"},"(0022,1133)":{tag:"(0022,1133)",vr:"SQ",name:"SourceOfAnteriorChamberDepthDataCodeSequence",vm:"1",version:"DICOM"},"(0022,1134)":{tag:"(0022,1134)",vr:"SQ",name:"SourceOfRefractiveMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1135)":{tag:"(0022,1135)",vr:"SQ",name:"SourceOfRefractiveMeasurementsCodeSequence",vm:"1",version:"DICOM"},"(0022,1140)":{tag:"(0022,1140)",vr:"CS",name:"OphthalmicAxialLengthMeasurementModified",vm:"1",version:"DICOM"},"(0022,1150)":{tag:"(0022,1150)",vr:"SQ",name:"OphthalmicAxialLengthDataSourceCodeSequence",vm:"1",version:"DICOM"},"(0022,1155)":{tag:"(0022,1155)",vr:"FL",name:"SignalToNoiseRatio",vm:"1",version:"DICOM"},"(0022,1159)":{tag:"(0022,1159)",vr:"LO",name:"OphthalmicAxialLengthDataSourceDescription",vm:"1",version:"DICOM"},"(0022,1210)":{tag:"(0022,1210)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsTotalLengthSequence",vm:"1",version:"DICOM"},"(0022,1211)":{tag:"(0022,1211)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsSegmentalLengthSequence",vm:"1",version:"DICOM"},"(0022,1212)":{tag:"(0022,1212)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsLengthSummationSequence",vm:"1",version:"DICOM"},"(0022,1220)":{tag:"(0022,1220)",vr:"SQ",name:"UltrasoundOphthalmicAxialLengthMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1225)":{tag:"(0022,1225)",vr:"SQ",name:"OpticalOphthalmicAxialLengthMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1230)":{tag:"(0022,1230)",vr:"SQ",name:"UltrasoundSelectedOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1250)":{tag:"(0022,1250)",vr:"SQ",name:"OphthalmicAxialLengthSelectionMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1255)":{tag:"(0022,1255)",vr:"SQ",name:"OpticalSelectedOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1257)":{tag:"(0022,1257)",vr:"SQ",name:"SelectedSegmentalOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1260)":{tag:"(0022,1260)",vr:"SQ",name:"SelectedTotalOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1262)":{tag:"(0022,1262)",vr:"SQ",name:"OphthalmicAxialLengthQualityMetricSequence",vm:"1",version:"DICOM"},"(0022,1300)":{tag:"(0022,1300)",vr:"SQ",name:"IntraocularLensCalculationsRightEyeSequence",vm:"1",version:"DICOM"},"(0022,1310)":{tag:"(0022,1310)",vr:"SQ",name:"IntraocularLensCalculationsLeftEyeSequence",vm:"1",version:"DICOM"},"(0022,1330)":{tag:"(0022,1330)",vr:"SQ",name:"ReferencedOphthalmicAxialLengthMeasurementQCImageSequence",vm:"1",version:"DICOM"},"(0022,1415)":{tag:"(0022,1415)",vr:"CS",name:"OphthalmicMappingDeviceType",vm:"1",version:"DICOM"},"(0022,1420)":{tag:"(0022,1420)",vr:"SQ",name:"AcquisitionMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1423)":{tag:"(0022,1423)",vr:"SQ",name:"AcquisitionMethodAlgorithmSequence",vm:"1",version:"DICOM"},"(0022,1436)":{tag:"(0022,1436)",vr:"SQ",name:"OphthalmicThicknessMapTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1443)":{tag:"(0022,1443)",vr:"SQ",name:"OphthalmicThicknessMappingNormalsSequence",vm:"1",version:"DICOM"},"(0022,1445)":{tag:"(0022,1445)",vr:"SQ",name:"RetinalThicknessDefinitionCodeSequence",vm:"1",version:"DICOM"},"(0022,1450)":{tag:"(0022,1450)",vr:"SQ",name:"PixelValueMappingToCodedConceptSequence",vm:"1",version:"DICOM"},"(0022,1452)":{tag:"(0022,1452)",vr:"xs",name:"MappedPixelValue",vm:"1",version:"DICOM"},"(0022,1454)":{tag:"(0022,1454)",vr:"LO",name:"PixelValueMappingExplanation",vm:"1",version:"DICOM"},"(0022,1458)":{tag:"(0022,1458)",vr:"SQ",name:"OphthalmicThicknessMapQualityThresholdSequence",vm:"1",version:"DICOM"},"(0022,1460)":{tag:"(0022,1460)",vr:"FL",name:"OphthalmicThicknessMapThresholdQualityRating",vm:"1",version:"DICOM"},"(0022,1463)":{tag:"(0022,1463)",vr:"FL",name:"AnatomicStructureReferencePoint",vm:"2",version:"DICOM"},"(0022,1465)":{tag:"(0022,1465)",vr:"SQ",name:"RegistrationToLocalizerSequence",vm:"1",version:"DICOM"},"(0022,1466)":{tag:"(0022,1466)",vr:"CS",name:"RegisteredLocalizerUnits",vm:"1",version:"DICOM"},"(0022,1467)":{tag:"(0022,1467)",vr:"FL",name:"RegisteredLocalizerTopLeftHandCorner",vm:"2",version:"DICOM"},"(0022,1468)":{tag:"(0022,1468)",vr:"FL",name:"RegisteredLocalizerBottomRightHandCorner",vm:"2",version:"DICOM"},"(0022,1470)":{tag:"(0022,1470)",vr:"SQ",name:"OphthalmicThicknessMapQualityRatingSequence",vm:"1",version:"DICOM"},"(0022,1472)":{tag:"(0022,1472)",vr:"SQ",name:"RelevantOPTAttributesSequence",vm:"1",version:"DICOM"},"(0022,1512)":{tag:"(0022,1512)",vr:"SQ",name:"TransformationMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1513)":{tag:"(0022,1513)",vr:"SQ",name:"TransformationAlgorithmSequence",vm:"1",version:"DICOM"},"(0022,1515)":{tag:"(0022,1515)",vr:"CS",name:"OphthalmicAxialLengthMethod",vm:"1",version:"DICOM"},"(0022,1517)":{tag:"(0022,1517)",vr:"FL",name:"OphthalmicFOV",vm:"1",version:"DICOM"},"(0022,1518)":{tag:"(0022,1518)",vr:"SQ",name:"TwoDimensionalToThreeDimensionalMapSequence",vm:"1",version:"DICOM"},"(0022,1525)":{tag:"(0022,1525)",vr:"SQ",name:"WideFieldOphthalmicPhotographyQualityRatingSequence",vm:"1",version:"DICOM"},"(0022,1526)":{tag:"(0022,1526)",vr:"SQ",name:"WideFieldOphthalmicPhotographyQualityThresholdSequence",vm:"1",version:"DICOM"},"(0022,1527)":{tag:"(0022,1527)",vr:"FL",name:"WideFieldOphthalmicPhotographyThresholdQualityRating",vm:"1",version:"DICOM"},"(0022,1528)":{tag:"(0022,1528)",vr:"FL",name:"XCoordinatesCenterPixelViewAngle",vm:"1",version:"DICOM"},"(0022,1529)":{tag:"(0022,1529)",vr:"FL",name:"YCoordinatesCenterPixelViewAngle",vm:"1",version:"DICOM"},"(0022,1530)":{tag:"(0022,1530)",vr:"UL",name:"NumberOfMapPoints",vm:"1",version:"DICOM"},"(0022,1531)":{tag:"(0022,1531)",vr:"OF",name:"TwoDimensionalToThreeDimensionalMapData",vm:"1",version:"DICOM"},"(0022,1612)":{tag:"(0022,1612)",vr:"SQ",name:"DerivationAlgorithmSequence",vm:"1",version:"DICOM"},"(0022,1615)":{tag:"(0022,1615)",vr:"SQ",name:"OphthalmicImageTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1616)":{tag:"(0022,1616)",vr:"LO",name:"OphthalmicImageTypeDescription",vm:"1",version:"DICOM"},"(0022,1618)":{tag:"(0022,1618)",vr:"SQ",name:"ScanPatternTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1620)":{tag:"(0022,1620)",vr:"SQ",name:"ReferencedSurfaceMeshIdentificationSequence",vm:"1",version:"DICOM"},"(0022,1622)":{tag:"(0022,1622)",vr:"CS",name:"OphthalmicVolumetricPropertiesFlag",vm:"1",version:"DICOM"},"(0022,1624)":{tag:"(0022,1624)",vr:"FL",name:"OphthalmicAnatomicReferencePointXCoordinate",vm:"1",version:"DICOM"},"(0022,1626)":{tag:"(0022,1626)",vr:"FL",name:"OphthalmicAnatomicReferencePointYCoordinate",vm:"1",version:"DICOM"},"(0022,1628)":{tag:"(0022,1628)",vr:"SQ",name:"OphthalmicEnFaceImageQualityRatingSequence",vm:"1",version:"DICOM"},"(0022,1630)":{tag:"(0022,1630)",vr:"DS",name:"QualityThreshold",vm:"1",version:"DICOM"},"(0022,1640)":{tag:"(0022,1640)",vr:"SQ",name:"OCTBscanAnalysisAcquisitionParametersSequence",vm:"1",version:"DICOM"},"(0022,1642)":{tag:"(0022,1642)",vr:"UL",name:"NumberofBscansPerFrame",vm:"1",version:"DICOM"},"(0022,1643)":{tag:"(0022,1643)",vr:"FL",name:"BscanSlabThickness",vm:"1",version:"DICOM"},"(0022,1644)":{tag:"(0022,1644)",vr:"FL",name:"DistanceBetweenBscanSlabs",vm:"1",version:"DICOM"},"(0022,1645)":{tag:"(0022,1645)",vr:"FL",name:"BscanCycleTime",vm:"1",version:"DICOM"},"(0022,1646)":{tag:"(0022,1646)",vr:"FL",name:"BscanCycleTimeVector",vm:"1-n",version:"DICOM"},"(0022,1649)":{tag:"(0022,1649)",vr:"FL",name:"AscanRate",vm:"1",version:"DICOM"},"(0022,1650)":{tag:"(0022,1650)",vr:"FL",name:"BscanRate",vm:"1",version:"DICOM"},"(0022,1658)":{tag:"(0022,1658)",vr:"UL",name:"SurfaceMeshZPixelOffset",vm:"1",version:"DICOM"},"(0024,0010)":{tag:"(0024,0010)",vr:"FL",name:"VisualFieldHorizontalExtent",vm:"1",version:"DICOM"},"(0024,0011)":{tag:"(0024,0011)",vr:"FL",name:"VisualFieldVerticalExtent",vm:"1",version:"DICOM"},"(0024,0012)":{tag:"(0024,0012)",vr:"CS",name:"VisualFieldShape",vm:"1",version:"DICOM"},"(0024,0016)":{tag:"(0024,0016)",vr:"SQ",name:"ScreeningTestModeCodeSequence",vm:"1",version:"DICOM"},"(0024,0018)":{tag:"(0024,0018)",vr:"FL",name:"MaximumStimulusLuminance",vm:"1",version:"DICOM"},"(0024,0020)":{tag:"(0024,0020)",vr:"FL",name:"BackgroundLuminance",vm:"1",version:"DICOM"},"(0024,0021)":{tag:"(0024,0021)",vr:"SQ",name:"StimulusColorCodeSequence",vm:"1",version:"DICOM"},"(0024,0024)":{tag:"(0024,0024)",vr:"SQ",name:"BackgroundIlluminationColorCodeSequence",vm:"1",version:"DICOM"},"(0024,0025)":{tag:"(0024,0025)",vr:"FL",name:"StimulusArea",vm:"1",version:"DICOM"},"(0024,0028)":{tag:"(0024,0028)",vr:"FL",name:"StimulusPresentationTime",vm:"1",version:"DICOM"},"(0024,0032)":{tag:"(0024,0032)",vr:"SQ",name:"FixationSequence",vm:"1",version:"DICOM"},"(0024,0033)":{tag:"(0024,0033)",vr:"SQ",name:"FixationMonitoringCodeSequence",vm:"1",version:"DICOM"},"(0024,0034)":{tag:"(0024,0034)",vr:"SQ",name:"VisualFieldCatchTrialSequence",vm:"1",version:"DICOM"},"(0024,0035)":{tag:"(0024,0035)",vr:"US",name:"FixationCheckedQuantity",vm:"1",version:"DICOM"},"(0024,0036)":{tag:"(0024,0036)",vr:"US",name:"PatientNotProperlyFixatedQuantity",vm:"1",version:"DICOM"},"(0024,0037)":{tag:"(0024,0037)",vr:"CS",name:"PresentedVisualStimuliDataFlag",vm:"1",version:"DICOM"},"(0024,0038)":{tag:"(0024,0038)",vr:"US",name:"NumberOfVisualStimuli",vm:"1",version:"DICOM"},"(0024,0039)":{tag:"(0024,0039)",vr:"CS",name:"ExcessiveFixationLossesDataFlag",vm:"1",version:"DICOM"},"(0024,0040)":{tag:"(0024,0040)",vr:"CS",name:"ExcessiveFixationLosses",vm:"1",version:"DICOM"},"(0024,0042)":{tag:"(0024,0042)",vr:"US",name:"StimuliRetestingQuantity",vm:"1",version:"DICOM"},"(0024,0044)":{tag:"(0024,0044)",vr:"LT",name:"CommentsOnPatientPerformanceOfVisualField",vm:"1",version:"DICOM"},"(0024,0045)":{tag:"(0024,0045)",vr:"CS",name:"FalseNegativesEstimateFlag",vm:"1",version:"DICOM"},"(0024,0046)":{tag:"(0024,0046)",vr:"FL",name:"FalseNegativesEstimate",vm:"1",version:"DICOM"},"(0024,0048)":{tag:"(0024,0048)",vr:"US",name:"NegativeCatchTrialsQuantity",vm:"1",version:"DICOM"},"(0024,0050)":{tag:"(0024,0050)",vr:"US",name:"FalseNegativesQuantity",vm:"1",version:"DICOM"},"(0024,0051)":{tag:"(0024,0051)",vr:"CS",name:"ExcessiveFalseNegativesDataFlag",vm:"1",version:"DICOM"},"(0024,0052)":{tag:"(0024,0052)",vr:"CS",name:"ExcessiveFalseNegatives",vm:"1",version:"DICOM"},"(0024,0053)":{tag:"(0024,0053)",vr:"CS",name:"FalsePositivesEstimateFlag",vm:"1",version:"DICOM"},"(0024,0054)":{tag:"(0024,0054)",vr:"FL",name:"FalsePositivesEstimate",vm:"1",version:"DICOM"},"(0024,0055)":{tag:"(0024,0055)",vr:"CS",name:"CatchTrialsDataFlag",vm:"1",version:"DICOM"},"(0024,0056)":{tag:"(0024,0056)",vr:"US",name:"PositiveCatchTrialsQuantity",vm:"1",version:"DICOM"},"(0024,0057)":{tag:"(0024,0057)",vr:"CS",name:"TestPointNormalsDataFlag",vm:"1",version:"DICOM"},"(0024,0058)":{tag:"(0024,0058)",vr:"SQ",name:"TestPointNormalsSequence",vm:"1",version:"DICOM"},"(0024,0059)":{tag:"(0024,0059)",vr:"CS",name:"GlobalDeviationProbabilityNormalsFlag",vm:"1",version:"DICOM"},"(0024,0060)":{tag:"(0024,0060)",vr:"US",name:"FalsePositivesQuantity",vm:"1",version:"DICOM"},"(0024,0061)":{tag:"(0024,0061)",vr:"CS",name:"ExcessiveFalsePositivesDataFlag",vm:"1",version:"DICOM"},"(0024,0062)":{tag:"(0024,0062)",vr:"CS",name:"ExcessiveFalsePositives",vm:"1",version:"DICOM"},"(0024,0063)":{tag:"(0024,0063)",vr:"CS",name:"VisualFieldTestNormalsFlag",vm:"1",version:"DICOM"},"(0024,0064)":{tag:"(0024,0064)",vr:"SQ",name:"ResultsNormalsSequence",vm:"1",version:"DICOM"},"(0024,0065)":{tag:"(0024,0065)",vr:"SQ",name:"AgeCorrectedSensitivityDeviationAlgorithmSequence",vm:"1",version:"DICOM"},"(0024,0066)":{tag:"(0024,0066)",vr:"FL",name:"GlobalDeviationFromNormal",vm:"1",version:"DICOM"},"(0024,0067)":{tag:"(0024,0067)",vr:"SQ",name:"GeneralizedDefectSensitivityDeviationAlgorithmSequence",vm:"1",version:"DICOM"},"(0024,0068)":{tag:"(0024,0068)",vr:"FL",name:"LocalizedDeviationFromNormal",vm:"1",version:"DICOM"},"(0024,0069)":{tag:"(0024,0069)",vr:"LO",name:"PatientReliabilityIndicator",vm:"1",version:"DICOM"},"(0024,0070)":{tag:"(0024,0070)",vr:"FL",name:"VisualFieldMeanSensitivity",vm:"1",version:"DICOM"},"(0024,0071)":{tag:"(0024,0071)",vr:"FL",name:"GlobalDeviationProbability",vm:"1",version:"DICOM"},"(0024,0072)":{tag:"(0024,0072)",vr:"CS",name:"LocalDeviationProbabilityNormalsFlag",vm:"1",version:"DICOM"},"(0024,0073)":{tag:"(0024,0073)",vr:"FL",name:"LocalizedDeviationProbability",vm:"1",version:"DICOM"},"(0024,0074)":{tag:"(0024,0074)",vr:"CS",name:"ShortTermFluctuationCalculated",vm:"1",version:"DICOM"},"(0024,0075)":{tag:"(0024,0075)",vr:"FL",name:"ShortTermFluctuation",vm:"1",version:"DICOM"},"(0024,0076)":{tag:"(0024,0076)",vr:"CS",name:"ShortTermFluctuationProbabilityCalculated",vm:"1",version:"DICOM"},"(0024,0077)":{tag:"(0024,0077)",vr:"FL",name:"ShortTermFluctuationProbability",vm:"1",version:"DICOM"},"(0024,0078)":{tag:"(0024,0078)",vr:"CS",name:"CorrectedLocalizedDeviationFromNormalCalculated",vm:"1",version:"DICOM"},"(0024,0079)":{tag:"(0024,0079)",vr:"FL",name:"CorrectedLocalizedDeviationFromNormal",vm:"1",version:"DICOM"},"(0024,0080)":{tag:"(0024,0080)",vr:"CS",name:"CorrectedLocalizedDeviationFromNormalProbabilityCalculated",vm:"1",version:"DICOM"},"(0024,0081)":{tag:"(0024,0081)",vr:"FL",name:"CorrectedLocalizedDeviationFromNormalProbability",vm:"1",version:"DICOM"},"(0024,0083)":{tag:"(0024,0083)",vr:"SQ",name:"GlobalDeviationProbabilitySequence",vm:"1",version:"DICOM"},"(0024,0085)":{tag:"(0024,0085)",vr:"SQ",name:"LocalizedDeviationProbabilitySequence",vm:"1",version:"DICOM"},"(0024,0086)":{tag:"(0024,0086)",vr:"CS",name:"FovealSensitivityMeasured",vm:"1",version:"DICOM"},"(0024,0087)":{tag:"(0024,0087)",vr:"FL",name:"FovealSensitivity",vm:"1",version:"DICOM"},"(0024,0088)":{tag:"(0024,0088)",vr:"FL",name:"VisualFieldTestDuration",vm:"1",version:"DICOM"},"(0024,0089)":{tag:"(0024,0089)",vr:"SQ",name:"VisualFieldTestPointSequence",vm:"1",version:"DICOM"},"(0024,0090)":{tag:"(0024,0090)",vr:"FL",name:"VisualFieldTestPointXCoordinate",vm:"1",version:"DICOM"},"(0024,0091)":{tag:"(0024,0091)",vr:"FL",name:"VisualFieldTestPointYCoordinate",vm:"1",version:"DICOM"},"(0024,0092)":{tag:"(0024,0092)",vr:"FL",name:"AgeCorrectedSensitivityDeviationValue",vm:"1",version:"DICOM"},"(0024,0093)":{tag:"(0024,0093)",vr:"CS",name:"StimulusResults",vm:"1",version:"DICOM"},"(0024,0094)":{tag:"(0024,0094)",vr:"FL",name:"SensitivityValue",vm:"1",version:"DICOM"},"(0024,0095)":{tag:"(0024,0095)",vr:"CS",name:"RetestStimulusSeen",vm:"1",version:"DICOM"},"(0024,0096)":{tag:"(0024,0096)",vr:"FL",name:"RetestSensitivityValue",vm:"1",version:"DICOM"},"(0024,0097)":{tag:"(0024,0097)",vr:"SQ",name:"VisualFieldTestPointNormalsSequence",vm:"1",version:"DICOM"},"(0024,0098)":{tag:"(0024,0098)",vr:"FL",name:"QuantifiedDefect",vm:"1",version:"DICOM"},"(0024,0100)":{tag:"(0024,0100)",vr:"FL",name:"AgeCorrectedSensitivityDeviationProbabilityValue",vm:"1",version:"DICOM"},"(0024,0102)":{tag:"(0024,0102)",vr:"CS",name:"GeneralizedDefectCorrectedSensitivityDeviationFlag",vm:"1",version:"DICOM"},"(0024,0103)":{tag:"(0024,0103)",vr:"FL",name:"GeneralizedDefectCorrectedSensitivityDeviationValue",vm:"1",version:"DICOM"},"(0024,0104)":{tag:"(0024,0104)",vr:"FL",name:"GeneralizedDefectCorrectedSensitivityDeviationProbabilityValue",vm:"1",version:"DICOM"},"(0024,0105)":{tag:"(0024,0105)",vr:"FL",name:"MinimumSensitivityValue",vm:"1",version:"DICOM"},"(0024,0106)":{tag:"(0024,0106)",vr:"CS",name:"BlindSpotLocalized",vm:"1",version:"DICOM"},"(0024,0107)":{tag:"(0024,0107)",vr:"FL",name:"BlindSpotXCoordinate",vm:"1",version:"DICOM"},"(0024,0108)":{tag:"(0024,0108)",vr:"FL",name:"BlindSpotYCoordinate",vm:"1",version:"DICOM"},"(0024,0110)":{tag:"(0024,0110)",vr:"SQ",name:"VisualAcuityMeasurementSequence",vm:"1",version:"DICOM"},"(0024,0112)":{tag:"(0024,0112)",vr:"SQ",name:"RefractiveParametersUsedOnPatientSequence",vm:"1",version:"DICOM"},"(0024,0113)":{tag:"(0024,0113)",vr:"CS",name:"MeasurementLaterality",vm:"1",version:"DICOM"},"(0024,0114)":{tag:"(0024,0114)",vr:"SQ",name:"OphthalmicPatientClinicalInformationLeftEyeSequence",vm:"1",version:"DICOM"},"(0024,0115)":{tag:"(0024,0115)",vr:"SQ",name:"OphthalmicPatientClinicalInformationRightEyeSequence",vm:"1",version:"DICOM"},"(0024,0117)":{tag:"(0024,0117)",vr:"CS",name:"FovealPointNormativeDataFlag",vm:"1",version:"DICOM"},"(0024,0118)":{tag:"(0024,0118)",vr:"FL",name:"FovealPointProbabilityValue",vm:"1",version:"DICOM"},"(0024,0120)":{tag:"(0024,0120)",vr:"CS",name:"ScreeningBaselineMeasured",vm:"1",version:"DICOM"},"(0024,0122)":{tag:"(0024,0122)",vr:"SQ",name:"ScreeningBaselineMeasuredSequence",vm:"1",version:"DICOM"},"(0024,0124)":{tag:"(0024,0124)",vr:"CS",name:"ScreeningBaselineType",vm:"1",version:"DICOM"},"(0024,0126)":{tag:"(0024,0126)",vr:"FL",name:"ScreeningBaselineValue",vm:"1",version:"DICOM"},"(0024,0202)":{tag:"(0024,0202)",vr:"LO",name:"AlgorithmSource",vm:"1",version:"DICOM"},"(0024,0306)":{tag:"(0024,0306)",vr:"LO",name:"DataSetName",vm:"1",version:"DICOM"},"(0024,0307)":{tag:"(0024,0307)",vr:"LO",name:"DataSetVersion",vm:"1",version:"DICOM"},"(0024,0308)":{tag:"(0024,0308)",vr:"LO",name:"DataSetSource",vm:"1",version:"DICOM"},"(0024,0309)":{tag:"(0024,0309)",vr:"LO",name:"DataSetDescription",vm:"1",version:"DICOM"},"(0024,0317)":{tag:"(0024,0317)",vr:"SQ",name:"VisualFieldTestReliabilityGlobalIndexSequence",vm:"1",version:"DICOM"},"(0024,0320)":{tag:"(0024,0320)",vr:"SQ",name:"VisualFieldGlobalResultsIndexSequence",vm:"1",version:"DICOM"},"(0024,0325)":{tag:"(0024,0325)",vr:"SQ",name:"DataObservationSequence",vm:"1",version:"DICOM"},"(0024,0338)":{tag:"(0024,0338)",vr:"CS",name:"IndexNormalsFlag",vm:"1",version:"DICOM"},"(0024,0341)":{tag:"(0024,0341)",vr:"FL",name:"IndexProbability",vm:"1",version:"DICOM"},"(0024,0344)":{tag:"(0024,0344)",vr:"SQ",name:"IndexProbabilitySequence",vm:"1",version:"DICOM"},"(0028,0002)":{tag:"(0028,0002)",vr:"US",name:"SamplesPerPixel",vm:"1",version:"DICOM"},"(0028,0003)":{tag:"(0028,0003)",vr:"US",name:"SamplesPerPixelUsed",vm:"1",version:"DICOM"},"(0028,0004)":{tag:"(0028,0004)",vr:"CS",name:"PhotometricInterpretation",vm:"1",version:"DICOM"},"(0028,0006)":{tag:"(0028,0006)",vr:"US",name:"PlanarConfiguration",vm:"1",version:"DICOM"},"(0028,0008)":{tag:"(0028,0008)",vr:"IS",name:"NumberOfFrames",vm:"1",version:"DICOM"},"(0028,0009)":{tag:"(0028,0009)",vr:"AT",name:"FrameIncrementPointer",vm:"1-n",version:"DICOM"},"(0028,000A)":{tag:"(0028,000A)",vr:"AT",name:"FrameDimensionPointer",vm:"1-n",version:"DICOM"},"(0028,0010)":{tag:"(0028,0010)",vr:"US",name:"Rows",vm:"1",version:"DICOM"},"(0028,0011)":{tag:"(0028,0011)",vr:"US",name:"Columns",vm:"1",version:"DICOM"},"(0028,0014)":{tag:"(0028,0014)",vr:"US",name:"UltrasoundColorDataPresent",vm:"1",version:"DICOM"},"(0028,0030)":{tag:"(0028,0030)",vr:"DS",name:"PixelSpacing",vm:"2",version:"DICOM"},"(0028,0031)":{tag:"(0028,0031)",vr:"DS",name:"ZoomFactor",vm:"2",version:"DICOM"},"(0028,0032)":{tag:"(0028,0032)",vr:"DS",name:"ZoomCenter",vm:"2",version:"DICOM"},"(0028,0034)":{tag:"(0028,0034)",vr:"IS",name:"PixelAspectRatio",vm:"2",version:"DICOM"},"(0028,0051)":{tag:"(0028,0051)",vr:"CS",name:"CorrectedImage",vm:"1-n",version:"DICOM"},"(0028,0100)":{tag:"(0028,0100)",vr:"US",name:"BitsAllocated",vm:"1",version:"DICOM"},"(0028,0101)":{tag:"(0028,0101)",vr:"US",name:"BitsStored",vm:"1",version:"DICOM"},"(0028,0102)":{tag:"(0028,0102)",vr:"US",name:"HighBit",vm:"1",version:"DICOM"},"(0028,0103)":{tag:"(0028,0103)",vr:"US",name:"PixelRepresentation",vm:"1",version:"DICOM"},"(0028,0106)":{tag:"(0028,0106)",vr:"xs",name:"SmallestImagePixelValue",vm:"1",version:"DICOM"},"(0028,0107)":{tag:"(0028,0107)",vr:"xs",name:"LargestImagePixelValue",vm:"1",version:"DICOM"},"(0028,0108)":{tag:"(0028,0108)",vr:"xs",name:"SmallestPixelValueInSeries",vm:"1",version:"DICOM"},"(0028,0109)":{tag:"(0028,0109)",vr:"xs",name:"LargestPixelValueInSeries",vm:"1",version:"DICOM"},"(0028,0120)":{tag:"(0028,0120)",vr:"xs",name:"PixelPaddingValue",vm:"1",version:"DICOM"},"(0028,0121)":{tag:"(0028,0121)",vr:"xs",name:"PixelPaddingRangeLimit",vm:"1",version:"DICOM"},"(0028,0122)":{tag:"(0028,0122)",vr:"FL",name:"FloatPixelPaddingValue",vm:"1",version:"DICOM"},"(0028,0123)":{tag:"(0028,0123)",vr:"FD",name:"DoubleFloatPixelPaddingValue",vm:"1",version:"DICOM"},"(0028,0124)":{tag:"(0028,0124)",vr:"FL",name:"FloatPixelPaddingRangeLimit",vm:"1",version:"DICOM"},"(0028,0125)":{tag:"(0028,0125)",vr:"FD",name:"DoubleFloatPixelPaddingRangeLimit",vm:"1",version:"DICOM"},"(0028,0300)":{tag:"(0028,0300)",vr:"CS",name:"QualityControlImage",vm:"1",version:"DICOM"},"(0028,0301)":{tag:"(0028,0301)",vr:"CS",name:"BurnedInAnnotation",vm:"1",version:"DICOM"},"(0028,0302)":{tag:"(0028,0302)",vr:"CS",name:"RecognizableVisualFeatures",vm:"1",version:"DICOM"},"(0028,0303)":{tag:"(0028,0303)",vr:"CS",name:"LongitudinalTemporalInformationModified",vm:"1",version:"DICOM"},"(0028,0304)":{tag:"(0028,0304)",vr:"UI",name:"ReferencedColorPaletteInstanceUID",vm:"1",version:"DICOM"},"(0028,0A02)":{tag:"(0028,0A02)",vr:"CS",name:"PixelSpacingCalibrationType",vm:"1",version:"DICOM"},"(0028,0A04)":{tag:"(0028,0A04)",vr:"LO",name:"PixelSpacingCalibrationDescription",vm:"1",version:"DICOM"},"(0028,1040)":{tag:"(0028,1040)",vr:"CS",name:"PixelIntensityRelationship",vm:"1",version:"DICOM"},"(0028,1041)":{tag:"(0028,1041)",vr:"SS",name:"PixelIntensityRelationshipSign",vm:"1",version:"DICOM"},"(0028,1050)":{tag:"(0028,1050)",vr:"DS",name:"WindowCenter",vm:"1-n",version:"DICOM"},"(0028,1051)":{tag:"(0028,1051)",vr:"DS",name:"WindowWidth",vm:"1-n",version:"DICOM"},"(0028,1052)":{tag:"(0028,1052)",vr:"DS",name:"RescaleIntercept",vm:"1",version:"DICOM"},"(0028,1053)":{tag:"(0028,1053)",vr:"DS",name:"RescaleSlope",vm:"1",version:"DICOM"},"(0028,1054)":{tag:"(0028,1054)",vr:"LO",name:"RescaleType",vm:"1",version:"DICOM"},"(0028,1055)":{tag:"(0028,1055)",vr:"LO",name:"WindowCenterWidthExplanation",vm:"1-n",version:"DICOM"},"(0028,1056)":{tag:"(0028,1056)",vr:"CS",name:"VOILUTFunction",vm:"1",version:"DICOM"},"(0028,1090)":{tag:"(0028,1090)",vr:"CS",name:"RecommendedViewingMode",vm:"1",version:"DICOM"},"(0028,1101)":{tag:"(0028,1101)",vr:"xs",name:"RedPaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1102)":{tag:"(0028,1102)",vr:"xs",name:"GreenPaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1103)":{tag:"(0028,1103)",vr:"xs",name:"BluePaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1104)":{tag:"(0028,1104)",vr:"US",name:"AlphaPaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1199)":{tag:"(0028,1199)",vr:"UI",name:"PaletteColorLookupTableUID",vm:"1",version:"DICOM"},"(0028,1201)":{tag:"(0028,1201)",vr:"OW",name:"RedPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1202)":{tag:"(0028,1202)",vr:"OW",name:"GreenPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1203)":{tag:"(0028,1203)",vr:"OW",name:"BluePaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1204)":{tag:"(0028,1204)",vr:"OW",name:"AlphaPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1221)":{tag:"(0028,1221)",vr:"OW",name:"SegmentedRedPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1222)":{tag:"(0028,1222)",vr:"OW",name:"SegmentedGreenPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1223)":{tag:"(0028,1223)",vr:"OW",name:"SegmentedBluePaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1230)":{tag:"(0028,1230)",vr:"SQ",name:"StoredValueColorRangeSequence",vm:"1",version:"DICOM"},"(0028,1231)":{tag:"(0028,1231)",vr:"FD",name:"MinimumStoredValueMapped",vm:"1",version:"DICOM"},"(0028,1232)":{tag:"(0028,1232)",vr:"FD",name:"MaximumStoredValueMapped",vm:"1",version:"DICOM"},"(0028,1300)":{tag:"(0028,1300)",vr:"CS",name:"BreastImplantPresent",vm:"1",version:"DICOM"},"(0028,1350)":{tag:"(0028,1350)",vr:"CS",name:"PartialView",vm:"1",version:"DICOM"},"(0028,1351)":{tag:"(0028,1351)",vr:"ST",name:"PartialViewDescription",vm:"1",version:"DICOM"},"(0028,1352)":{tag:"(0028,1352)",vr:"SQ",name:"PartialViewCodeSequence",vm:"1",version:"DICOM"},"(0028,135A)":{tag:"(0028,135A)",vr:"CS",name:"SpatialLocationsPreserved",vm:"1",version:"DICOM"},"(0028,1401)":{tag:"(0028,1401)",vr:"SQ",name:"DataFrameAssignmentSequence",vm:"1",version:"DICOM"},"(0028,1402)":{tag:"(0028,1402)",vr:"CS",name:"DataPathAssignment",vm:"1",version:"DICOM"},"(0028,1403)":{tag:"(0028,1403)",vr:"US",name:"BitsMappedToColorLookupTable",vm:"1",version:"DICOM"},"(0028,1404)":{tag:"(0028,1404)",vr:"SQ",name:"BlendingLUT1Sequence",vm:"1",version:"DICOM"},"(0028,1405)":{tag:"(0028,1405)",vr:"CS",name:"BlendingLUT1TransferFunction",vm:"1",version:"DICOM"},"(0028,1406)":{tag:"(0028,1406)",vr:"FD",name:"BlendingWeightConstant",vm:"1",version:"DICOM"},"(0028,1407)":{tag:"(0028,1407)",vr:"US",name:"BlendingLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1408)":{tag:"(0028,1408)",vr:"OW",name:"BlendingLookupTableData",vm:"1",version:"DICOM"},"(0028,140B)":{tag:"(0028,140B)",vr:"SQ",name:"EnhancedPaletteColorLookupTableSequence",vm:"1",version:"DICOM"},"(0028,140C)":{tag:"(0028,140C)",vr:"SQ",name:"BlendingLUT2Sequence",vm:"1",version:"DICOM"},"(0028,140D)":{tag:"(0028,140D)",vr:"CS",name:"BlendingLUT2TransferFunction",vm:"1",version:"DICOM"},"(0028,140E)":{tag:"(0028,140E)",vr:"CS",name:"DataPathID",vm:"1",version:"DICOM"},"(0028,140F)":{tag:"(0028,140F)",vr:"CS",name:"RGBLUTTransferFunction",vm:"1",version:"DICOM"},"(0028,1410)":{tag:"(0028,1410)",vr:"CS",name:"AlphaLUTTransferFunction",vm:"1",version:"DICOM"},"(0028,2000)":{tag:"(0028,2000)",vr:"OB",name:"ICCProfile",vm:"1",version:"DICOM"},"(0028,2110)":{tag:"(0028,2110)",vr:"CS",name:"LossyImageCompression",vm:"1",version:"DICOM"},"(0028,2112)":{tag:"(0028,2112)",vr:"DS",name:"LossyImageCompressionRatio",vm:"1-n",version:"DICOM"},"(0028,2114)":{tag:"(0028,2114)",vr:"CS",name:"LossyImageCompressionMethod",vm:"1-n",version:"DICOM"},"(0028,3000)":{tag:"(0028,3000)",vr:"SQ",name:"ModalityLUTSequence",vm:"1",version:"DICOM"},"(0028,3002)":{tag:"(0028,3002)",vr:"xs",name:"LUTDescriptor",vm:"3",version:"DICOM"},"(0028,3003)":{tag:"(0028,3003)",vr:"LO",name:"LUTExplanation",vm:"1",version:"DICOM"},"(0028,3004)":{tag:"(0028,3004)",vr:"LO",name:"ModalityLUTType",vm:"1",version:"DICOM"},"(0028,3006)":{tag:"(0028,3006)",vr:"lt",name:"LUTData",vm:"1-n",version:"DICOM"},"(0028,3010)":{tag:"(0028,3010)",vr:"SQ",name:"VOILUTSequence",vm:"1",version:"DICOM"},"(0028,3110)":{tag:"(0028,3110)",vr:"SQ",name:"SoftcopyVOILUTSequence",vm:"1",version:"DICOM"},"(0028,6010)":{tag:"(0028,6010)",vr:"US",name:"RepresentativeFrameNumber",vm:"1",version:"DICOM"},"(0028,6020)":{tag:"(0028,6020)",vr:"US",name:"FrameNumbersOfInterest",vm:"1-n",version:"DICOM"},"(0028,6022)":{tag:"(0028,6022)",vr:"LO",name:"FrameOfInterestDescription",vm:"1-n",version:"DICOM"},"(0028,6023)":{tag:"(0028,6023)",vr:"CS",name:"FrameOfInterestType",vm:"1-n",version:"DICOM"},"(0028,6040)":{tag:"(0028,6040)",vr:"US",name:"RWavePointer",vm:"1-n",version:"DICOM"},"(0028,6100)":{tag:"(0028,6100)",vr:"SQ",name:"MaskSubtractionSequence",vm:"1",version:"DICOM"},"(0028,6101)":{tag:"(0028,6101)",vr:"CS",name:"MaskOperation",vm:"1",version:"DICOM"},"(0028,6102)":{tag:"(0028,6102)",vr:"US",name:"ApplicableFrameRange",vm:"2-2n",version:"DICOM"},"(0028,6110)":{tag:"(0028,6110)",vr:"US",name:"MaskFrameNumbers",vm:"1-n",version:"DICOM"},"(0028,6112)":{tag:"(0028,6112)",vr:"US",name:"ContrastFrameAveraging",vm:"1",version:"DICOM"},"(0028,6114)":{tag:"(0028,6114)",vr:"FL",name:"MaskSubPixelShift",vm:"2",version:"DICOM"},"(0028,6120)":{tag:"(0028,6120)",vr:"SS",name:"TIDOffset",vm:"1",version:"DICOM"},"(0028,6190)":{tag:"(0028,6190)",vr:"ST",name:"MaskOperationExplanation",vm:"1",version:"DICOM"},"(0028,7000)":{tag:"(0028,7000)",vr:"SQ",name:"EquipmentAdministratorSequence",vm:"1",version:"DICOM"},"(0028,7001)":{tag:"(0028,7001)",vr:"US",name:"NumberOfDisplaySubsystems",vm:"1",version:"DICOM"},"(0028,7002)":{tag:"(0028,7002)",vr:"US",name:"CurrentConfigurationID",vm:"1",version:"DICOM"},"(0028,7003)":{tag:"(0028,7003)",vr:"US",name:"DisplaySubsystemID",vm:"1",version:"DICOM"},"(0028,7004)":{tag:"(0028,7004)",vr:"SH",name:"DisplaySubsystemName",vm:"1",version:"DICOM"},"(0028,7005)":{tag:"(0028,7005)",vr:"LO",name:"DisplaySubsystemDescription",vm:"1",version:"DICOM"},"(0028,7006)":{tag:"(0028,7006)",vr:"CS",name:"SystemStatus",vm:"1",version:"DICOM"},"(0028,7007)":{tag:"(0028,7007)",vr:"LO",name:"SystemStatusComment",vm:"1",version:"DICOM"},"(0028,7008)":{tag:"(0028,7008)",vr:"SQ",name:"TargetLuminanceCharacteristicsSequence",vm:"1",version:"DICOM"},"(0028,7009)":{tag:"(0028,7009)",vr:"US",name:"LuminanceCharacteristicsID",vm:"1",version:"DICOM"},"(0028,700A)":{tag:"(0028,700A)",vr:"SQ",name:"DisplaySubsystemConfigurationSequence",vm:"1",version:"DICOM"},"(0028,700B)":{tag:"(0028,700B)",vr:"US",name:"ConfigurationID",vm:"1",version:"DICOM"},"(0028,700C)":{tag:"(0028,700C)",vr:"SH",name:"ConfigurationName",vm:"1",version:"DICOM"},"(0028,700D)":{tag:"(0028,700D)",vr:"LO",name:"ConfigurationDescription",vm:"1",version:"DICOM"},"(0028,700E)":{tag:"(0028,700E)",vr:"US",name:"ReferencedTargetLuminanceCharacteristicsID",vm:"1",version:"DICOM"},"(0028,700F)":{tag:"(0028,700F)",vr:"SQ",name:"QAResultsSequence",vm:"1",version:"DICOM"},"(0028,7010)":{tag:"(0028,7010)",vr:"SQ",name:"DisplaySubsystemQAResultsSequence",vm:"1",version:"DICOM"},"(0028,7011)":{tag:"(0028,7011)",vr:"SQ",name:"ConfigurationQAResultsSequence",vm:"1",version:"DICOM"},"(0028,7012)":{tag:"(0028,7012)",vr:"SQ",name:"MeasurementEquipmentSequence",vm:"1",version:"DICOM"},"(0028,7013)":{tag:"(0028,7013)",vr:"CS",name:"MeasurementFunctions",vm:"1-n",version:"DICOM"},"(0028,7014)":{tag:"(0028,7014)",vr:"CS",name:"MeasurementEquipmentType",vm:"1",version:"DICOM"},"(0028,7015)":{tag:"(0028,7015)",vr:"SQ",name:"VisualEvaluationResultSequence",vm:"1",version:"DICOM"},"(0028,7016)":{tag:"(0028,7016)",vr:"SQ",name:"DisplayCalibrationResultSequence",vm:"1",version:"DICOM"},"(0028,7017)":{tag:"(0028,7017)",vr:"US",name:"DDLValue",vm:"1",version:"DICOM"},"(0028,7018)":{tag:"(0028,7018)",vr:"FL",name:"CIExyWhitePoint",vm:"2",version:"DICOM"},"(0028,7019)":{tag:"(0028,7019)",vr:"CS",name:"DisplayFunctionType",vm:"1",version:"DICOM"},"(0028,701A)":{tag:"(0028,701A)",vr:"FL",name:"GammaValue",vm:"1",version:"DICOM"},"(0028,701B)":{tag:"(0028,701B)",vr:"US",name:"NumberOfLuminancePoints",vm:"1",version:"DICOM"},"(0028,701C)":{tag:"(0028,701C)",vr:"SQ",name:"LuminanceResponseSequence",vm:"1",version:"DICOM"},"(0028,701D)":{tag:"(0028,701D)",vr:"FL",name:"TargetMinimumLuminance",vm:"1",version:"DICOM"},"(0028,701E)":{tag:"(0028,701E)",vr:"FL",name:"TargetMaximumLuminance",vm:"1",version:"DICOM"},"(0028,701F)":{tag:"(0028,701F)",vr:"FL",name:"LuminanceValue",vm:"1",version:"DICOM"},"(0028,7020)":{tag:"(0028,7020)",vr:"LO",name:"LuminanceResponseDescription",vm:"1",version:"DICOM"},"(0028,7021)":{tag:"(0028,7021)",vr:"CS",name:"WhitePointFlag",vm:"1",version:"DICOM"},"(0028,7022)":{tag:"(0028,7022)",vr:"SQ",name:"DisplayDeviceTypeCodeSequence",vm:"1",version:"DICOM"},"(0028,7023)":{tag:"(0028,7023)",vr:"SQ",name:"DisplaySubsystemSequence",vm:"1",version:"DICOM"},"(0028,7024)":{tag:"(0028,7024)",vr:"SQ",name:"LuminanceResultSequence",vm:"1",version:"DICOM"},"(0028,7025)":{tag:"(0028,7025)",vr:"CS",name:"AmbientLightValueSource",vm:"1",version:"DICOM"},"(0028,7026)":{tag:"(0028,7026)",vr:"CS",name:"MeasuredCharacteristics",vm:"1-n",version:"DICOM"},"(0028,7027)":{tag:"(0028,7027)",vr:"SQ",name:"LuminanceUniformityResultSequence",vm:"1",version:"DICOM"},"(0028,7028)":{tag:"(0028,7028)",vr:"SQ",name:"VisualEvaluationTestSequence",vm:"1",version:"DICOM"},"(0028,7029)":{tag:"(0028,7029)",vr:"CS",name:"TestResult",vm:"1",version:"DICOM"},"(0028,702A)":{tag:"(0028,702A)",vr:"LO",name:"TestResultComment",vm:"1",version:"DICOM"},"(0028,702B)":{tag:"(0028,702B)",vr:"CS",name:"TestImageValidation",vm:"1",version:"DICOM"},"(0028,702C)":{tag:"(0028,702C)",vr:"SQ",name:"TestPatternCodeSequence",vm:"1",version:"DICOM"},"(0028,702D)":{tag:"(0028,702D)",vr:"SQ",name:"MeasurementPatternCodeSequence",vm:"1",version:"DICOM"},"(0028,702E)":{tag:"(0028,702E)",vr:"SQ",name:"VisualEvaluationMethodCodeSequence",vm:"1",version:"DICOM"},"(0028,7FE0)":{tag:"(0028,7FE0)",vr:"UR",name:"PixelDataProviderURL",vm:"1",version:"DICOM"},"(0028,9001)":{tag:"(0028,9001)",vr:"UL",name:"DataPointRows",vm:"1",version:"DICOM"},"(0028,9002)":{tag:"(0028,9002)",vr:"UL",name:"DataPointColumns",vm:"1",version:"DICOM"},"(0028,9003)":{tag:"(0028,9003)",vr:"CS",name:"SignalDomainColumns",vm:"1",version:"DICOM"},"(0028,9108)":{tag:"(0028,9108)",vr:"CS",name:"DataRepresentation",vm:"1",version:"DICOM"},"(0028,9110)":{tag:"(0028,9110)",vr:"SQ",name:"PixelMeasuresSequence",vm:"1",version:"DICOM"},"(0028,9132)":{tag:"(0028,9132)",vr:"SQ",name:"FrameVOILUTSequence",vm:"1",version:"DICOM"},"(0028,9145)":{tag:"(0028,9145)",vr:"SQ",name:"PixelValueTransformationSequence",vm:"1",version:"DICOM"},"(0028,9235)":{tag:"(0028,9235)",vr:"CS",name:"SignalDomainRows",vm:"1",version:"DICOM"},"(0028,9411)":{tag:"(0028,9411)",vr:"FL",name:"DisplayFilterPercentage",vm:"1",version:"DICOM"},"(0028,9415)":{tag:"(0028,9415)",vr:"SQ",name:"FramePixelShiftSequence",vm:"1",version:"DICOM"},"(0028,9416)":{tag:"(0028,9416)",vr:"US",name:"SubtractionItemID",vm:"1",version:"DICOM"},"(0028,9422)":{tag:"(0028,9422)",vr:"SQ",name:"PixelIntensityRelationshipLUTSequence",vm:"1",version:"DICOM"},"(0028,9443)":{tag:"(0028,9443)",vr:"SQ",name:"FramePixelDataPropertiesSequence",vm:"1",version:"DICOM"},"(0028,9444)":{tag:"(0028,9444)",vr:"CS",name:"GeometricalProperties",vm:"1",version:"DICOM"},"(0028,9445)":{tag:"(0028,9445)",vr:"FL",name:"GeometricMaximumDistortion",vm:"1",version:"DICOM"},"(0028,9446)":{tag:"(0028,9446)",vr:"CS",name:"ImageProcessingApplied",vm:"1-n",version:"DICOM"},"(0028,9454)":{tag:"(0028,9454)",vr:"CS",name:"MaskSelectionMode",vm:"1",version:"DICOM"},"(0028,9474)":{tag:"(0028,9474)",vr:"CS",name:"LUTFunction",vm:"1",version:"DICOM"},"(0028,9478)":{tag:"(0028,9478)",vr:"FL",name:"MaskVisibilityPercentage",vm:"1",version:"DICOM"},"(0028,9501)":{tag:"(0028,9501)",vr:"SQ",name:"PixelShiftSequence",vm:"1",version:"DICOM"},"(0028,9502)":{tag:"(0028,9502)",vr:"SQ",name:"RegionPixelShiftSequence",vm:"1",version:"DICOM"},"(0028,9503)":{tag:"(0028,9503)",vr:"SS",name:"VerticesOfTheRegion",vm:"2-2n",version:"DICOM"},"(0028,9505)":{tag:"(0028,9505)",vr:"SQ",name:"MultiFramePresentationSequence",vm:"1",version:"DICOM"},"(0028,9506)":{tag:"(0028,9506)",vr:"US",name:"PixelShiftFrameRange",vm:"2-2n",version:"DICOM"},"(0028,9507)":{tag:"(0028,9507)",vr:"US",name:"LUTFrameRange",vm:"2-2n",version:"DICOM"},"(0028,9520)":{tag:"(0028,9520)",vr:"DS",name:"ImageToEquipmentMappingMatrix",vm:"16",version:"DICOM"},"(0028,9537)":{tag:"(0028,9537)",vr:"CS",name:"EquipmentCoordinateSystemIdentification",vm:"1",version:"DICOM"},"(0032,1031)":{tag:"(0032,1031)",vr:"SQ",name:"RequestingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0032,1032)":{tag:"(0032,1032)",vr:"PN",name:"RequestingPhysician",vm:"1",version:"DICOM"},"(0032,1033)":{tag:"(0032,1033)",vr:"LO",name:"RequestingService",vm:"1",version:"DICOM"},"(0032,1034)":{tag:"(0032,1034)",vr:"SQ",name:"RequestingServiceCodeSequence",vm:"1",version:"DICOM"},"(0032,1060)":{tag:"(0032,1060)",vr:"LO",name:"RequestedProcedureDescription",vm:"1",version:"DICOM"},"(0032,1064)":{tag:"(0032,1064)",vr:"SQ",name:"RequestedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0032,1066)":{tag:"(0032,1066)",vr:"UT",name:"ReasonForVisit",vm:"1",version:"DICOM"},"(0032,1067)":{tag:"(0032,1067)",vr:"SQ",name:"ReasonForVisitCodeSequence",vm:"1",version:"DICOM"},"(0032,1070)":{tag:"(0032,1070)",vr:"LO",name:"RequestedContrastAgent",vm:"1",version:"DICOM"},"(0034,0001)":{tag:"(0034,0001)",vr:"SQ",name:"FlowIdentifierSequence",vm:"1",version:"DICOM"},"(0034,0002)":{tag:"(0034,0002)",vr:"OB",name:"FlowIdentifier",vm:"1",version:"DICOM"},"(0034,0003)":{tag:"(0034,0003)",vr:"UI",name:"FlowTransferSyntaxUID",vm:"1",version:"DICOM"},"(0034,0004)":{tag:"(0034,0004)",vr:"UL",name:"FlowRTPSamplingRate",vm:"1",version:"DICOM"},"(0034,0005)":{tag:"(0034,0005)",vr:"OB",name:"SourceIdentifier",vm:"1",version:"DICOM"},"(0034,0007)":{tag:"(0034,0007)",vr:"OB",name:"FrameOriginTimestamp",vm:"1",version:"DICOM"},"(0034,0008)":{tag:"(0034,0008)",vr:"CS",name:"IncludesImagingSubject",vm:"1",version:"DICOM"},"(0034,0009)":{tag:"(0034,0009)",vr:"SQ",name:"FrameUsefulnessGroupSequence",vm:"1",version:"DICOM"},"(0034,000A)":{tag:"(0034,000A)",vr:"SQ",name:"RealTimeBulkDataFlowSequence",vm:"1",version:"DICOM"},"(0034,000B)":{tag:"(0034,000B)",vr:"SQ",name:"CameraPositionGroupSequence",vm:"1",version:"DICOM"},"(0034,000C)":{tag:"(0034,000C)",vr:"CS",name:"IncludesInformation",vm:"1",version:"DICOM"},"(0034,000D)":{tag:"(0034,000D)",vr:"SQ",name:"TimeOfFrameGroupSequence",vm:"1",version:"DICOM"},"(0038,0004)":{tag:"(0038,0004)",vr:"SQ",name:"ReferencedPatientAliasSequence",vm:"1",version:"DICOM"},"(0038,0008)":{tag:"(0038,0008)",vr:"CS",name:"VisitStatusID",vm:"1",version:"DICOM"},"(0038,0010)":{tag:"(0038,0010)",vr:"LO",name:"AdmissionID",vm:"1",version:"DICOM"},"(0038,0014)":{tag:"(0038,0014)",vr:"SQ",name:"IssuerOfAdmissionIDSequence",vm:"1",version:"DICOM"},"(0038,0016)":{tag:"(0038,0016)",vr:"LO",name:"RouteOfAdmissions",vm:"1",version:"DICOM"},"(0038,0020)":{tag:"(0038,0020)",vr:"DA",name:"AdmittingDate",vm:"1",version:"DICOM"},"(0038,0021)":{tag:"(0038,0021)",vr:"TM",name:"AdmittingTime",vm:"1",version:"DICOM"},"(0038,0050)":{tag:"(0038,0050)",vr:"LO",name:"SpecialNeeds",vm:"1",version:"DICOM"},"(0038,0060)":{tag:"(0038,0060)",vr:"LO",name:"ServiceEpisodeID",vm:"1",version:"DICOM"},"(0038,0062)":{tag:"(0038,0062)",vr:"LO",name:"ServiceEpisodeDescription",vm:"1",version:"DICOM"},"(0038,0064)":{tag:"(0038,0064)",vr:"SQ",name:"IssuerOfServiceEpisodeIDSequence",vm:"1",version:"DICOM"},"(0038,0100)":{tag:"(0038,0100)",vr:"SQ",name:"PertinentDocumentsSequence",vm:"1",version:"DICOM"},"(0038,0101)":{tag:"(0038,0101)",vr:"SQ",name:"PertinentResourcesSequence",vm:"1",version:"DICOM"},"(0038,0102)":{tag:"(0038,0102)",vr:"LO",name:"ResourceDescription",vm:"1",version:"DICOM"},"(0038,0300)":{tag:"(0038,0300)",vr:"LO",name:"CurrentPatientLocation",vm:"1",version:"DICOM"},"(0038,0400)":{tag:"(0038,0400)",vr:"LO",name:"PatientInstitutionResidence",vm:"1",version:"DICOM"},"(0038,0500)":{tag:"(0038,0500)",vr:"LO",name:"PatientState",vm:"1",version:"DICOM"},"(0038,0502)":{tag:"(0038,0502)",vr:"SQ",name:"PatientClinicalTrialParticipationSequence",vm:"1",version:"DICOM"},"(0038,4000)":{tag:"(0038,4000)",vr:"LT",name:"VisitComments",vm:"1",version:"DICOM"},"(003A,0004)":{tag:"(003A,0004)",vr:"CS",name:"WaveformOriginality",vm:"1",version:"DICOM"},"(003A,0005)":{tag:"(003A,0005)",vr:"US",name:"NumberOfWaveformChannels",vm:"1",version:"DICOM"},"(003A,0010)":{tag:"(003A,0010)",vr:"UL",name:"NumberOfWaveformSamples",vm:"1",version:"DICOM"},"(003A,001A)":{tag:"(003A,001A)",vr:"DS",name:"SamplingFrequency",vm:"1",version:"DICOM"},"(003A,0020)":{tag:"(003A,0020)",vr:"SH",name:"MultiplexGroupLabel",vm:"1",version:"DICOM"},"(003A,0200)":{tag:"(003A,0200)",vr:"SQ",name:"ChannelDefinitionSequence",vm:"1",version:"DICOM"},"(003A,0202)":{tag:"(003A,0202)",vr:"IS",name:"WaveformChannelNumber",vm:"1",version:"DICOM"},"(003A,0203)":{tag:"(003A,0203)",vr:"SH",name:"ChannelLabel",vm:"1",version:"DICOM"},"(003A,0205)":{tag:"(003A,0205)",vr:"CS",name:"ChannelStatus",vm:"1-n",version:"DICOM"},"(003A,0208)":{tag:"(003A,0208)",vr:"SQ",name:"ChannelSourceSequence",vm:"1",version:"DICOM"},"(003A,0209)":{tag:"(003A,0209)",vr:"SQ",name:"ChannelSourceModifiersSequence",vm:"1",version:"DICOM"},"(003A,020A)":{tag:"(003A,020A)",vr:"SQ",name:"SourceWaveformSequence",vm:"1",version:"DICOM"},"(003A,020C)":{tag:"(003A,020C)",vr:"LO",name:"ChannelDerivationDescription",vm:"1",version:"DICOM"},"(003A,0210)":{tag:"(003A,0210)",vr:"DS",name:"ChannelSensitivity",vm:"1",version:"DICOM"},"(003A,0211)":{tag:"(003A,0211)",vr:"SQ",name:"ChannelSensitivityUnitsSequence",vm:"1",version:"DICOM"},"(003A,0212)":{tag:"(003A,0212)",vr:"DS",name:"ChannelSensitivityCorrectionFactor",vm:"1",version:"DICOM"},"(003A,0213)":{tag:"(003A,0213)",vr:"DS",name:"ChannelBaseline",vm:"1",version:"DICOM"},"(003A,0214)":{tag:"(003A,0214)",vr:"DS",name:"ChannelTimeSkew",vm:"1",version:"DICOM"},"(003A,0215)":{tag:"(003A,0215)",vr:"DS",name:"ChannelSampleSkew",vm:"1",version:"DICOM"},"(003A,0218)":{tag:"(003A,0218)",vr:"DS",name:"ChannelOffset",vm:"1",version:"DICOM"},"(003A,021A)":{tag:"(003A,021A)",vr:"US",name:"WaveformBitsStored",vm:"1",version:"DICOM"},"(003A,0220)":{tag:"(003A,0220)",vr:"DS",name:"FilterLowFrequency",vm:"1",version:"DICOM"},"(003A,0221)":{tag:"(003A,0221)",vr:"DS",name:"FilterHighFrequency",vm:"1",version:"DICOM"},"(003A,0222)":{tag:"(003A,0222)",vr:"DS",name:"NotchFilterFrequency",vm:"1",version:"DICOM"},"(003A,0223)":{tag:"(003A,0223)",vr:"DS",name:"NotchFilterBandwidth",vm:"1",version:"DICOM"},"(003A,0230)":{tag:"(003A,0230)",vr:"FL",name:"WaveformDataDisplayScale",vm:"1",version:"DICOM"},"(003A,0231)":{tag:"(003A,0231)",vr:"US",name:"WaveformDisplayBackgroundCIELabValue",vm:"3",version:"DICOM"},"(003A,0240)":{tag:"(003A,0240)",vr:"SQ",name:"WaveformPresentationGroupSequence",vm:"1",version:"DICOM"},"(003A,0241)":{tag:"(003A,0241)",vr:"US",name:"PresentationGroupNumber",vm:"1",version:"DICOM"},"(003A,0242)":{tag:"(003A,0242)",vr:"SQ",name:"ChannelDisplaySequence",vm:"1",version:"DICOM"},"(003A,0244)":{tag:"(003A,0244)",vr:"US",name:"ChannelRecommendedDisplayCIELabValue",vm:"3",version:"DICOM"},"(003A,0245)":{tag:"(003A,0245)",vr:"FL",name:"ChannelPosition",vm:"1",version:"DICOM"},"(003A,0246)":{tag:"(003A,0246)",vr:"CS",name:"DisplayShadingFlag",vm:"1",version:"DICOM"},"(003A,0247)":{tag:"(003A,0247)",vr:"FL",name:"FractionalChannelDisplayScale",vm:"1",version:"DICOM"},"(003A,0248)":{tag:"(003A,0248)",vr:"FL",name:"AbsoluteChannelDisplayScale",vm:"1",version:"DICOM"},"(003A,0300)":{tag:"(003A,0300)",vr:"SQ",name:"MultiplexedAudioChannelsDescriptionCodeSequence",vm:"1",version:"DICOM"},"(003A,0301)":{tag:"(003A,0301)",vr:"IS",name:"ChannelIdentificationCode",vm:"1",version:"DICOM"},"(003A,0302)":{tag:"(003A,0302)",vr:"CS",name:"ChannelMode",vm:"1",version:"DICOM"},"(003A,0310)":{tag:"(003A,0310)",vr:"UI",name:"MultiplexGroupUID",vm:"1",version:"DICOM"},"(003A,0311)":{tag:"(003A,0311)",vr:"DS",name:"PowerlineFrequency",vm:"1",version:"DICOM"},"(003A,0312)":{tag:"(003A,0312)",vr:"SQ",name:"ChannelImpedanceSequence",vm:"1",version:"DICOM"},"(003A,0313)":{tag:"(003A,0313)",vr:"DS",name:"ImpedanceValue",vm:"1",version:"DICOM"},"(003A,0314)":{tag:"(003A,0314)",vr:"DT",name:"ImpedanceMeasurementDateTime",vm:"1",version:"DICOM"},"(003A,0315)":{tag:"(003A,0315)",vr:"DS",name:"ImpedanceMeasurementFrequency",vm:"1",version:"DICOM"},"(003A,0316)":{tag:"(003A,0316)",vr:"CS",name:"ImpedanceMeasurementCurrentType",vm:"1",version:"DICOM"},"(0040,0001)":{tag:"(0040,0001)",vr:"AE",name:"ScheduledStationAETitle",vm:"1-n",version:"DICOM"},"(0040,0002)":{tag:"(0040,0002)",vr:"DA",name:"ScheduledProcedureStepStartDate",vm:"1",version:"DICOM"},"(0040,0003)":{tag:"(0040,0003)",vr:"TM",name:"ScheduledProcedureStepStartTime",vm:"1",version:"DICOM"},"(0040,0004)":{tag:"(0040,0004)",vr:"DA",name:"ScheduledProcedureStepEndDate",vm:"1",version:"DICOM"},"(0040,0005)":{tag:"(0040,0005)",vr:"TM",name:"ScheduledProcedureStepEndTime",vm:"1",version:"DICOM"},"(0040,0006)":{tag:"(0040,0006)",vr:"PN",name:"ScheduledPerformingPhysicianName",vm:"1",version:"DICOM"},"(0040,0007)":{tag:"(0040,0007)",vr:"LO",name:"ScheduledProcedureStepDescription",vm:"1",version:"DICOM"},"(0040,0008)":{tag:"(0040,0008)",vr:"SQ",name:"ScheduledProtocolCodeSequence",vm:"1",version:"DICOM"},"(0040,0009)":{tag:"(0040,0009)",vr:"SH",name:"ScheduledProcedureStepID",vm:"1",version:"DICOM"},"(0040,000A)":{tag:"(0040,000A)",vr:"SQ",name:"StageCodeSequence",vm:"1",version:"DICOM"},"(0040,000B)":{tag:"(0040,000B)",vr:"SQ",name:"ScheduledPerformingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0040,0010)":{tag:"(0040,0010)",vr:"SH",name:"ScheduledStationName",vm:"1-n",version:"DICOM"},"(0040,0011)":{tag:"(0040,0011)",vr:"SH",name:"ScheduledProcedureStepLocation",vm:"1",version:"DICOM"},"(0040,0012)":{tag:"(0040,0012)",vr:"LO",name:"PreMedication",vm:"1",version:"DICOM"},"(0040,0020)":{tag:"(0040,0020)",vr:"CS",name:"ScheduledProcedureStepStatus",vm:"1",version:"DICOM"},"(0040,0026)":{tag:"(0040,0026)",vr:"SQ",name:"OrderPlacerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0027)":{tag:"(0040,0027)",vr:"SQ",name:"OrderFillerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0031)":{tag:"(0040,0031)",vr:"UT",name:"LocalNamespaceEntityID",vm:"1",version:"DICOM"},"(0040,0032)":{tag:"(0040,0032)",vr:"UT",name:"UniversalEntityID",vm:"1",version:"DICOM"},"(0040,0033)":{tag:"(0040,0033)",vr:"CS",name:"UniversalEntityIDType",vm:"1",version:"DICOM"},"(0040,0035)":{tag:"(0040,0035)",vr:"CS",name:"IdentifierTypeCode",vm:"1",version:"DICOM"},"(0040,0036)":{tag:"(0040,0036)",vr:"SQ",name:"AssigningFacilitySequence",vm:"1",version:"DICOM"},"(0040,0039)":{tag:"(0040,0039)",vr:"SQ",name:"AssigningJurisdictionCodeSequence",vm:"1",version:"DICOM"},"(0040,003A)":{tag:"(0040,003A)",vr:"SQ",name:"AssigningAgencyOrDepartmentCodeSequence",vm:"1",version:"DICOM"},"(0040,0100)":{tag:"(0040,0100)",vr:"SQ",name:"ScheduledProcedureStepSequence",vm:"1",version:"DICOM"},"(0040,0220)":{tag:"(0040,0220)",vr:"SQ",name:"ReferencedNonImageCompositeSOPInstanceSequence",vm:"1",version:"DICOM"},"(0040,0241)":{tag:"(0040,0241)",vr:"AE",name:"PerformedStationAETitle",vm:"1",version:"DICOM"},"(0040,0242)":{tag:"(0040,0242)",vr:"SH",name:"PerformedStationName",vm:"1",version:"DICOM"},"(0040,0243)":{tag:"(0040,0243)",vr:"SH",name:"PerformedLocation",vm:"1",version:"DICOM"},"(0040,0244)":{tag:"(0040,0244)",vr:"DA",name:"PerformedProcedureStepStartDate",vm:"1",version:"DICOM"},"(0040,0245)":{tag:"(0040,0245)",vr:"TM",name:"PerformedProcedureStepStartTime",vm:"1",version:"DICOM"},"(0040,0250)":{tag:"(0040,0250)",vr:"DA",name:"PerformedProcedureStepEndDate",vm:"1",version:"DICOM"},"(0040,0251)":{tag:"(0040,0251)",vr:"TM",name:"PerformedProcedureStepEndTime",vm:"1",version:"DICOM"},"(0040,0252)":{tag:"(0040,0252)",vr:"CS",name:"PerformedProcedureStepStatus",vm:"1",version:"DICOM"},"(0040,0253)":{tag:"(0040,0253)",vr:"SH",name:"PerformedProcedureStepID",vm:"1",version:"DICOM"},"(0040,0254)":{tag:"(0040,0254)",vr:"LO",name:"PerformedProcedureStepDescription",vm:"1",version:"DICOM"},"(0040,0255)":{tag:"(0040,0255)",vr:"LO",name:"PerformedProcedureTypeDescription",vm:"1",version:"DICOM"},"(0040,0260)":{tag:"(0040,0260)",vr:"SQ",name:"PerformedProtocolCodeSequence",vm:"1",version:"DICOM"},"(0040,0261)":{tag:"(0040,0261)",vr:"CS",name:"PerformedProtocolType",vm:"1",version:"DICOM"},"(0040,0270)":{tag:"(0040,0270)",vr:"SQ",name:"ScheduledStepAttributesSequence",vm:"1",version:"DICOM"},"(0040,0275)":{tag:"(0040,0275)",vr:"SQ",name:"RequestAttributesSequence",vm:"1",version:"DICOM"},"(0040,0280)":{tag:"(0040,0280)",vr:"ST",name:"CommentsOnThePerformedProcedureStep",vm:"1",version:"DICOM"},"(0040,0281)":{tag:"(0040,0281)",vr:"SQ",name:"PerformedProcedureStepDiscontinuationReasonCodeSequence",vm:"1",version:"DICOM"},"(0040,0293)":{tag:"(0040,0293)",vr:"SQ",name:"QuantitySequence",vm:"1",version:"DICOM"},"(0040,0294)":{tag:"(0040,0294)",vr:"DS",name:"Quantity",vm:"1",version:"DICOM"},"(0040,0295)":{tag:"(0040,0295)",vr:"SQ",name:"MeasuringUnitsSequence",vm:"1",version:"DICOM"},"(0040,0296)":{tag:"(0040,0296)",vr:"SQ",name:"BillingItemSequence",vm:"1",version:"DICOM"},"(0040,0300)":{tag:"(0040,0300)",vr:"US",name:"TotalTimeOfFluoroscopy",vm:"1",version:"DICOM"},"(0040,0301)":{tag:"(0040,0301)",vr:"US",name:"TotalNumberOfExposures",vm:"1",version:"DICOM"},"(0040,0302)":{tag:"(0040,0302)",vr:"US",name:"EntranceDose",vm:"1",version:"DICOM"},"(0040,0303)":{tag:"(0040,0303)",vr:"US",name:"ExposedArea",vm:"1-2",version:"DICOM"},"(0040,0306)":{tag:"(0040,0306)",vr:"DS",name:"DistanceSourceToEntrance",vm:"1",version:"DICOM"},"(0040,030E)":{tag:"(0040,030E)",vr:"SQ",name:"ExposureDoseSequence",vm:"1",version:"DICOM"},"(0040,0310)":{tag:"(0040,0310)",vr:"ST",name:"CommentsOnRadiationDose",vm:"1",version:"DICOM"},"(0040,0312)":{tag:"(0040,0312)",vr:"DS",name:"XRayOutput",vm:"1",version:"DICOM"},"(0040,0314)":{tag:"(0040,0314)",vr:"DS",name:"HalfValueLayer",vm:"1",version:"DICOM"},"(0040,0316)":{tag:"(0040,0316)",vr:"DS",name:"OrganDose",vm:"1",version:"DICOM"},"(0040,0318)":{tag:"(0040,0318)",vr:"CS",name:"OrganExposed",vm:"1",version:"DICOM"},"(0040,0320)":{tag:"(0040,0320)",vr:"SQ",name:"BillingProcedureStepSequence",vm:"1",version:"DICOM"},"(0040,0321)":{tag:"(0040,0321)",vr:"SQ",name:"FilmConsumptionSequence",vm:"1",version:"DICOM"},"(0040,0324)":{tag:"(0040,0324)",vr:"SQ",name:"BillingSuppliesAndDevicesSequence",vm:"1",version:"DICOM"},"(0040,0340)":{tag:"(0040,0340)",vr:"SQ",name:"PerformedSeriesSequence",vm:"1",version:"DICOM"},"(0040,0400)":{tag:"(0040,0400)",vr:"LT",name:"CommentsOnTheScheduledProcedureStep",vm:"1",version:"DICOM"},"(0040,0440)":{tag:"(0040,0440)",vr:"SQ",name:"ProtocolContextSequence",vm:"1",version:"DICOM"},"(0040,0441)":{tag:"(0040,0441)",vr:"SQ",name:"ContentItemModifierSequence",vm:"1",version:"DICOM"},"(0040,0500)":{tag:"(0040,0500)",vr:"SQ",name:"ScheduledSpecimenSequence",vm:"1",version:"DICOM"},"(0040,0512)":{tag:"(0040,0512)",vr:"LO",name:"ContainerIdentifier",vm:"1",version:"DICOM"},"(0040,0513)":{tag:"(0040,0513)",vr:"SQ",name:"IssuerOfTheContainerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0515)":{tag:"(0040,0515)",vr:"SQ",name:"AlternateContainerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0518)":{tag:"(0040,0518)",vr:"SQ",name:"ContainerTypeCodeSequence",vm:"1",version:"DICOM"},"(0040,051A)":{tag:"(0040,051A)",vr:"LO",name:"ContainerDescription",vm:"1",version:"DICOM"},"(0040,0520)":{tag:"(0040,0520)",vr:"SQ",name:"ContainerComponentSequence",vm:"1",version:"DICOM"},"(0040,0551)":{tag:"(0040,0551)",vr:"LO",name:"SpecimenIdentifier",vm:"1",version:"DICOM"},"(0040,0554)":{tag:"(0040,0554)",vr:"UI",name:"SpecimenUID",vm:"1",version:"DICOM"},"(0040,0555)":{tag:"(0040,0555)",vr:"SQ",name:"AcquisitionContextSequence",vm:"1",version:"DICOM"},"(0040,0556)":{tag:"(0040,0556)",vr:"ST",name:"AcquisitionContextDescription",vm:"1",version:"DICOM"},"(0040,0560)":{tag:"(0040,0560)",vr:"SQ",name:"SpecimenDescriptionSequence",vm:"1",version:"DICOM"},"(0040,0562)":{tag:"(0040,0562)",vr:"SQ",name:"IssuerOfTheSpecimenIdentifierSequence",vm:"1",version:"DICOM"},"(0040,059A)":{tag:"(0040,059A)",vr:"SQ",name:"SpecimenTypeCodeSequence",vm:"1",version:"DICOM"},"(0040,0600)":{tag:"(0040,0600)",vr:"LO",name:"SpecimenShortDescription",vm:"1",version:"DICOM"},"(0040,0602)":{tag:"(0040,0602)",vr:"UT",name:"SpecimenDetailedDescription",vm:"1",version:"DICOM"},"(0040,0610)":{tag:"(0040,0610)",vr:"SQ",name:"SpecimenPreparationSequence",vm:"1",version:"DICOM"},"(0040,0612)":{tag:"(0040,0612)",vr:"SQ",name:"SpecimenPreparationStepContentItemSequence",vm:"1",version:"DICOM"},"(0040,0620)":{tag:"(0040,0620)",vr:"SQ",name:"SpecimenLocalizationContentItemSequence",vm:"1",version:"DICOM"},"(0040,0710)":{tag:"(0040,0710)",vr:"SQ",name:"WholeSlideMicroscopyImageFrameTypeSequence",vm:"1",version:"DICOM"},"(0040,071A)":{tag:"(0040,071A)",vr:"SQ",name:"ImageCenterPointCoordinatesSequence",vm:"1",version:"DICOM"},"(0040,072A)":{tag:"(0040,072A)",vr:"DS",name:"XOffsetInSlideCoordinateSystem",vm:"1",version:"DICOM"},"(0040,073A)":{tag:"(0040,073A)",vr:"DS",name:"YOffsetInSlideCoordinateSystem",vm:"1",version:"DICOM"},"(0040,074A)":{tag:"(0040,074A)",vr:"DS",name:"ZOffsetInSlideCoordinateSystem",vm:"1",version:"DICOM"},"(0040,08EA)":{tag:"(0040,08EA)",vr:"SQ",name:"MeasurementUnitsCodeSequence",vm:"1",version:"DICOM"},"(0040,1001)":{tag:"(0040,1001)",vr:"SH",name:"RequestedProcedureID",vm:"1",version:"DICOM"},"(0040,1002)":{tag:"(0040,1002)",vr:"LO",name:"ReasonForTheRequestedProcedure",vm:"1",version:"DICOM"},"(0040,1003)":{tag:"(0040,1003)",vr:"SH",name:"RequestedProcedurePriority",vm:"1",version:"DICOM"},"(0040,1004)":{tag:"(0040,1004)",vr:"LO",name:"PatientTransportArrangements",vm:"1",version:"DICOM"},"(0040,1005)":{tag:"(0040,1005)",vr:"LO",name:"RequestedProcedureLocation",vm:"1",version:"DICOM"},"(0040,1008)":{tag:"(0040,1008)",vr:"LO",name:"ConfidentialityCode",vm:"1",version:"DICOM"},"(0040,1009)":{tag:"(0040,1009)",vr:"SH",name:"ReportingPriority",vm:"1",version:"DICOM"},"(0040,100A)":{tag:"(0040,100A)",vr:"SQ",name:"ReasonForRequestedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0040,1010)":{tag:"(0040,1010)",vr:"PN",name:"NamesOfIntendedRecipientsOfResults",vm:"1-n",version:"DICOM"},"(0040,1011)":{tag:"(0040,1011)",vr:"SQ",name:"IntendedRecipientsOfResultsIdentificationSequence",vm:"1",version:"DICOM"},"(0040,1012)":{tag:"(0040,1012)",vr:"SQ",name:"ReasonForPerformedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0040,1101)":{tag:"(0040,1101)",vr:"SQ",name:"PersonIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0040,1102)":{tag:"(0040,1102)",vr:"ST",name:"PersonAddress",vm:"1",version:"DICOM"},"(0040,1103)":{tag:"(0040,1103)",vr:"LO",name:"PersonTelephoneNumbers",vm:"1-n",version:"DICOM"},"(0040,1104)":{tag:"(0040,1104)",vr:"LT",name:"PersonTelecomInformation",vm:"1",version:"DICOM"},"(0040,1400)":{tag:"(0040,1400)",vr:"LT",name:"RequestedProcedureComments",vm:"1",version:"DICOM"},"(0040,2004)":{tag:"(0040,2004)",vr:"DA",name:"IssueDateOfImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2005)":{tag:"(0040,2005)",vr:"TM",name:"IssueTimeOfImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2008)":{tag:"(0040,2008)",vr:"PN",name:"OrderEnteredBy",vm:"1",version:"DICOM"},"(0040,2009)":{tag:"(0040,2009)",vr:"SH",name:"OrderEntererLocation",vm:"1",version:"DICOM"},"(0040,2010)":{tag:"(0040,2010)",vr:"SH",name:"OrderCallbackPhoneNumber",vm:"1",version:"DICOM"},"(0040,2011)":{tag:"(0040,2011)",vr:"LT",name:"OrderCallbackTelecomInformation",vm:"1",version:"DICOM"},"(0040,2016)":{tag:"(0040,2016)",vr:"LO",name:"PlacerOrderNumberImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2017)":{tag:"(0040,2017)",vr:"LO",name:"FillerOrderNumberImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2400)":{tag:"(0040,2400)",vr:"LT",name:"ImagingServiceRequestComments",vm:"1",version:"DICOM"},"(0040,3001)":{tag:"(0040,3001)",vr:"LO",name:"ConfidentialityConstraintOnPatientDataDescription",vm:"1",version:"DICOM"},"(0040,4005)":{tag:"(0040,4005)",vr:"DT",name:"ScheduledProcedureStepStartDateTime",vm:"1",version:"DICOM"},"(0040,4007)":{tag:"(0040,4007)",vr:"SQ",name:"PerformedProcessingApplicationsCodeSequence",vm:"1",version:"DICOM"},"(0040,4008)":{tag:"(0040,4008)",vr:"DT",name:"ScheduledProcedureStepExpirationDateTime",vm:"1",version:"DICOM"},"(0040,4009)":{tag:"(0040,4009)",vr:"SQ",name:"HumanPerformerCodeSequence",vm:"1",version:"DICOM"},"(0040,4010)":{tag:"(0040,4010)",vr:"DT",name:"ScheduledProcedureStepModificationDateTime",vm:"1",version:"DICOM"},"(0040,4011)":{tag:"(0040,4011)",vr:"DT",name:"ExpectedCompletionDateTime",vm:"1",version:"DICOM"},"(0040,4018)":{tag:"(0040,4018)",vr:"SQ",name:"ScheduledWorkitemCodeSequence",vm:"1",version:"DICOM"},"(0040,4019)":{tag:"(0040,4019)",vr:"SQ",name:"PerformedWorkitemCodeSequence",vm:"1",version:"DICOM"},"(0040,4020)":{tag:"(0040,4020)",vr:"CS",name:"InputAvailabilityFlag",vm:"1",version:"DICOM"},"(0040,4021)":{tag:"(0040,4021)",vr:"SQ",name:"InputInformationSequence",vm:"1",version:"DICOM"},"(0040,4025)":{tag:"(0040,4025)",vr:"SQ",name:"ScheduledStationNameCodeSequence",vm:"1",version:"DICOM"},"(0040,4026)":{tag:"(0040,4026)",vr:"SQ",name:"ScheduledStationClassCodeSequence",vm:"1",version:"DICOM"},"(0040,4027)":{tag:"(0040,4027)",vr:"SQ",name:"ScheduledStationGeographicLocationCodeSequence",vm:"1",version:"DICOM"},"(0040,4028)":{tag:"(0040,4028)",vr:"SQ",name:"PerformedStationNameCodeSequence",vm:"1",version:"DICOM"},"(0040,4029)":{tag:"(0040,4029)",vr:"SQ",name:"PerformedStationClassCodeSequence",vm:"1",version:"DICOM"},"(0040,4030)":{tag:"(0040,4030)",vr:"SQ",name:"PerformedStationGeographicLocationCodeSequence",vm:"1",version:"DICOM"},"(0040,4033)":{tag:"(0040,4033)",vr:"SQ",name:"OutputInformationSequence",vm:"1",version:"DICOM"},"(0040,4034)":{tag:"(0040,4034)",vr:"SQ",name:"ScheduledHumanPerformersSequence",vm:"1",version:"DICOM"},"(0040,4035)":{tag:"(0040,4035)",vr:"SQ",name:"ActualHumanPerformersSequence",vm:"1",version:"DICOM"},"(0040,4036)":{tag:"(0040,4036)",vr:"LO",name:"HumanPerformerOrganization",vm:"1",version:"DICOM"},"(0040,4037)":{tag:"(0040,4037)",vr:"PN",name:"HumanPerformerName",vm:"1",version:"DICOM"},"(0040,4040)":{tag:"(0040,4040)",vr:"CS",name:"RawDataHandling",vm:"1",version:"DICOM"},"(0040,4041)":{tag:"(0040,4041)",vr:"CS",name:"InputReadinessState",vm:"1",version:"DICOM"},"(0040,4050)":{tag:"(0040,4050)",vr:"DT",name:"PerformedProcedureStepStartDateTime",vm:"1",version:"DICOM"},"(0040,4051)":{tag:"(0040,4051)",vr:"DT",name:"PerformedProcedureStepEndDateTime",vm:"1",version:"DICOM"},"(0040,4052)":{tag:"(0040,4052)",vr:"DT",name:"ProcedureStepCancellationDateTime",vm:"1",version:"DICOM"},"(0040,8302)":{tag:"(0040,8302)",vr:"DS",name:"EntranceDoseInmGy",vm:"1",version:"DICOM"},"(0040,8303)":{tag:"(0040,8303)",vr:"CS",name:"EntranceDoseDerivation",vm:"1",version:"DICOM"},"(0040,9092)":{tag:"(0040,9092)",vr:"SQ",name:"ParametricMapFrameTypeSequence",vm:"1",version:"DICOM"},"(0040,9094)":{tag:"(0040,9094)",vr:"SQ",name:"ReferencedImageRealWorldValueMappingSequence",vm:"1",version:"DICOM"},"(0040,9096)":{tag:"(0040,9096)",vr:"SQ",name:"RealWorldValueMappingSequence",vm:"1",version:"DICOM"},"(0040,9098)":{tag:"(0040,9098)",vr:"SQ",name:"PixelValueMappingCodeSequence",vm:"1",version:"DICOM"},"(0040,9210)":{tag:"(0040,9210)",vr:"SH",name:"LUTLabel",vm:"1",version:"DICOM"},"(0040,9211)":{tag:"(0040,9211)",vr:"xs",name:"RealWorldValueLastValueMapped",vm:"1",version:"DICOM"},"(0040,9212)":{tag:"(0040,9212)",vr:"FD",name:"RealWorldValueLUTData",vm:"1-n",version:"DICOM"},"(0040,9216)":{tag:"(0040,9216)",vr:"xs",name:"RealWorldValueFirstValueMapped",vm:"1",version:"DICOM"},"(0040,9220)":{tag:"(0040,9220)",vr:"SQ",name:"QuantityDefinitionSequence",vm:"1",version:"DICOM"},"(0040,9224)":{tag:"(0040,9224)",vr:"FD",name:"RealWorldValueIntercept",vm:"1",version:"DICOM"},"(0040,9225)":{tag:"(0040,9225)",vr:"FD",name:"RealWorldValueSlope",vm:"1",version:"DICOM"},"(0040,A010)":{tag:"(0040,A010)",vr:"CS",name:"RelationshipType",vm:"1",version:"DICOM"},"(0040,A027)":{tag:"(0040,A027)",vr:"LO",name:"VerifyingOrganization",vm:"1",version:"DICOM"},"(0040,A030)":{tag:"(0040,A030)",vr:"DT",name:"VerificationDateTime",vm:"1",version:"DICOM"},"(0040,A032)":{tag:"(0040,A032)",vr:"DT",name:"ObservationDateTime",vm:"1",version:"DICOM"},"(0040,A033)":{tag:"(0040,A033)",vr:"DT",name:"ObservationStartDateTime",vm:"1",version:"DICOM"},"(0040,A040)":{tag:"(0040,A040)",vr:"CS",name:"ValueType",vm:"1",version:"DICOM"},"(0040,A043)":{tag:"(0040,A043)",vr:"SQ",name:"ConceptNameCodeSequence",vm:"1",version:"DICOM"},"(0040,A050)":{tag:"(0040,A050)",vr:"CS",name:"ContinuityOfContent",vm:"1",version:"DICOM"},"(0040,A073)":{tag:"(0040,A073)",vr:"SQ",name:"VerifyingObserverSequence",vm:"1",version:"DICOM"},"(0040,A075)":{tag:"(0040,A075)",vr:"PN",name:"VerifyingObserverName",vm:"1",version:"DICOM"},"(0040,A078)":{tag:"(0040,A078)",vr:"SQ",name:"AuthorObserverSequence",vm:"1",version:"DICOM"},"(0040,A07A)":{tag:"(0040,A07A)",vr:"SQ",name:"ParticipantSequence",vm:"1",version:"DICOM"},"(0040,A07C)":{tag:"(0040,A07C)",vr:"SQ",name:"CustodialOrganizationSequence",vm:"1",version:"DICOM"},"(0040,A080)":{tag:"(0040,A080)",vr:"CS",name:"ParticipationType",vm:"1",version:"DICOM"},"(0040,A082)":{tag:"(0040,A082)",vr:"DT",name:"ParticipationDateTime",vm:"1",version:"DICOM"},"(0040,A084)":{tag:"(0040,A084)",vr:"CS",name:"ObserverType",vm:"1",version:"DICOM"},"(0040,A088)":{tag:"(0040,A088)",vr:"SQ",name:"VerifyingObserverIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0040,A0B0)":{tag:"(0040,A0B0)",vr:"US",name:"ReferencedWaveformChannels",vm:"2-2n",version:"DICOM"},"(0040,A120)":{tag:"(0040,A120)",vr:"DT",name:"DateTime",vm:"1",version:"DICOM"},"(0040,A121)":{tag:"(0040,A121)",vr:"DA",name:"Date",vm:"1",version:"DICOM"},"(0040,A122)":{tag:"(0040,A122)",vr:"TM",name:"Time",vm:"1",version:"DICOM"},"(0040,A123)":{tag:"(0040,A123)",vr:"PN",name:"PersonName",vm:"1",version:"DICOM"},"(0040,A124)":{tag:"(0040,A124)",vr:"UI",name:"UID",vm:"1",version:"DICOM"},"(0040,A130)":{tag:"(0040,A130)",vr:"CS",name:"TemporalRangeType",vm:"1",version:"DICOM"},"(0040,A132)":{tag:"(0040,A132)",vr:"UL",name:"ReferencedSamplePositions",vm:"1-n",version:"DICOM"},"(0040,A136)":{tag:"(0040,A136)",vr:"US",name:"ReferencedFrameNumbers",vm:"1-n",version:"DICOM"},"(0040,A138)":{tag:"(0040,A138)",vr:"DS",name:"ReferencedTimeOffsets",vm:"1-n",version:"DICOM"},"(0040,A13A)":{tag:"(0040,A13A)",vr:"DT",name:"ReferencedDateTime",vm:"1-n",version:"DICOM"},"(0040,A160)":{tag:"(0040,A160)",vr:"UT",name:"TextValue",vm:"1",version:"DICOM"},"(0040,A161)":{tag:"(0040,A161)",vr:"FD",name:"FloatingPointValue",vm:"1-n",version:"DICOM"},"(0040,A162)":{tag:"(0040,A162)",vr:"SL",name:"RationalNumeratorValue",vm:"1-n",version:"DICOM"},"(0040,A163)":{tag:"(0040,A163)",vr:"UL",name:"RationalDenominatorValue",vm:"1-n",version:"DICOM"},"(0040,A168)":{tag:"(0040,A168)",vr:"SQ",name:"ConceptCodeSequence",vm:"1",version:"DICOM"},"(0040,A170)":{tag:"(0040,A170)",vr:"SQ",name:"PurposeOfReferenceCodeSequence",vm:"1",version:"DICOM"},"(0040,A171)":{tag:"(0040,A171)",vr:"UI",name:"ObservationUID",vm:"1",version:"DICOM"},"(0040,A180)":{tag:"(0040,A180)",vr:"US",name:"AnnotationGroupNumber",vm:"1",version:"DICOM"},"(0040,A195)":{tag:"(0040,A195)",vr:"SQ",name:"ModifierCodeSequence",vm:"1",version:"DICOM"},"(0040,A300)":{tag:"(0040,A300)",vr:"SQ",name:"MeasuredValueSequence",vm:"1",version:"DICOM"},"(0040,A301)":{tag:"(0040,A301)",vr:"SQ",name:"NumericValueQualifierCodeSequence",vm:"1",version:"DICOM"},"(0040,A30A)":{tag:"(0040,A30A)",vr:"DS",name:"NumericValue",vm:"1-n",version:"DICOM"},"(0040,A360)":{tag:"(0040,A360)",vr:"SQ",name:"PredecessorDocumentsSequence",vm:"1",version:"DICOM"},"(0040,A370)":{tag:"(0040,A370)",vr:"SQ",name:"ReferencedRequestSequence",vm:"1",version:"DICOM"},"(0040,A372)":{tag:"(0040,A372)",vr:"SQ",name:"PerformedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0040,A375)":{tag:"(0040,A375)",vr:"SQ",name:"CurrentRequestedProcedureEvidenceSequence",vm:"1",version:"DICOM"},"(0040,A385)":{tag:"(0040,A385)",vr:"SQ",name:"PertinentOtherEvidenceSequence",vm:"1",version:"DICOM"},"(0040,A390)":{tag:"(0040,A390)",vr:"SQ",name:"HL7StructuredDocumentReferenceSequence",vm:"1",version:"DICOM"},"(0040,A491)":{tag:"(0040,A491)",vr:"CS",name:"CompletionFlag",vm:"1",version:"DICOM"},"(0040,A492)":{tag:"(0040,A492)",vr:"LO",name:"CompletionFlagDescription",vm:"1",version:"DICOM"},"(0040,A493)":{tag:"(0040,A493)",vr:"CS",name:"VerificationFlag",vm:"1",version:"DICOM"},"(0040,A494)":{tag:"(0040,A494)",vr:"CS",name:"ArchiveRequested",vm:"1",version:"DICOM"},"(0040,A496)":{tag:"(0040,A496)",vr:"CS",name:"PreliminaryFlag",vm:"1",version:"DICOM"},"(0040,A504)":{tag:"(0040,A504)",vr:"SQ",name:"ContentTemplateSequence",vm:"1",version:"DICOM"},"(0040,A525)":{tag:"(0040,A525)",vr:"SQ",name:"IdenticalDocumentsSequence",vm:"1",version:"DICOM"},"(0040,A730)":{tag:"(0040,A730)",vr:"SQ",name:"ContentSequence",vm:"1",version:"DICOM"},"(0040,A801)":{tag:"(0040,A801)",vr:"SQ",name:"TabulatedValuesSequence",vm:"1",version:"DICOM"},"(0040,A802)":{tag:"(0040,A802)",vr:"UL",name:"NumberOfTableRows",vm:"1",version:"DICOM"},"(0040,A803)":{tag:"(0040,A803)",vr:"UL",name:"NumbeOfTableColumns",vm:"1",version:"DICOM"},"(0040,A804)":{tag:"(0040,A804)",vr:"UL",name:"TableRowNumber",vm:"1",version:"DICOM"},"(0040,A805)":{tag:"(0040,A805)",vr:"UL",name:"TableColumnNumber",vm:"1",version:"DICOM"},"(0040,A806)":{tag:"(0040,A806)",vr:"SQ",name:"TableRowDefinitionSequence",vm:"1",version:"DICOM"},"(0040,A807)":{tag:"(0040,A807)",vr:"SQ",name:"TableColumnDefinitionSequence",vm:"1",version:"DICOM"},"(0040,A808)":{tag:"(0040,A808)",vr:"SQ",name:"CellValuesSequence",vm:"1",version:"DICOM"},"(0040,B020)":{tag:"(0040,B020)",vr:"SQ",name:"WaveformAnnotationSequence",vm:"1",version:"DICOM"},"(0040,DB00)":{tag:"(0040,DB00)",vr:"CS",name:"TemplateIdentifier",vm:"1",version:"DICOM"},"(0040,DB73)":{tag:"(0040,DB73)",vr:"UL",name:"ReferencedContentItemIdentifier",vm:"1-n",version:"DICOM"},"(0040,E001)":{tag:"(0040,E001)",vr:"ST",name:"HL7InstanceIdentifier",vm:"1",version:"DICOM"},"(0040,E004)":{tag:"(0040,E004)",vr:"DT",name:"HL7DocumentEffectiveTime",vm:"1",version:"DICOM"},"(0040,E006)":{tag:"(0040,E006)",vr:"SQ",name:"HL7DocumentTypeCodeSequence",vm:"1",version:"DICOM"},"(0040,E008)":{tag:"(0040,E008)",vr:"SQ",name:"DocumentClassCodeSequence",vm:"1",version:"DICOM"},"(0040,E010)":{tag:"(0040,E010)",vr:"UR",name:"RetrieveURI",vm:"1",version:"DICOM"},"(0040,E011)":{tag:"(0040,E011)",vr:"UI",name:"RetrieveLocationUID",vm:"1",version:"DICOM"},"(0040,E020)":{tag:"(0040,E020)",vr:"CS",name:"TypeOfInstances",vm:"1",version:"DICOM"},"(0040,E021)":{tag:"(0040,E021)",vr:"SQ",name:"DICOMRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E022)":{tag:"(0040,E022)",vr:"SQ",name:"DICOMMediaRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E023)":{tag:"(0040,E023)",vr:"SQ",name:"WADORetrievalSequence",vm:"1",version:"DICOM"},"(0040,E024)":{tag:"(0040,E024)",vr:"SQ",name:"XDSRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E025)":{tag:"(0040,E025)",vr:"SQ",name:"WADORSRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E030)":{tag:"(0040,E030)",vr:"UI",name:"RepositoryUniqueID",vm:"1",version:"DICOM"},"(0040,E031)":{tag:"(0040,E031)",vr:"UI",name:"HomeCommunityID",vm:"1",version:"DICOM"},"(0042,0010)":{tag:"(0042,0010)",vr:"ST",name:"DocumentTitle",vm:"1",version:"DICOM"},"(0042,0011)":{tag:"(0042,0011)",vr:"OB",name:"EncapsulatedDocument",vm:"1",version:"DICOM"},"(0042,0012)":{tag:"(0042,0012)",vr:"LO",name:"MIMETypeOfEncapsulatedDocument",vm:"1",version:"DICOM"},"(0042,0013)":{tag:"(0042,0013)",vr:"SQ",name:"SourceInstanceSequence",vm:"1",version:"DICOM"},"(0042,0014)":{tag:"(0042,0014)",vr:"LO",name:"ListOfMIMETypes",vm:"1-n",version:"DICOM"},"(0042,0015)":{tag:"(0042,0015)",vr:"UL",name:"EncapsulatedDocumentLength",vm:"1",version:"DICOM"},"(0044,0001)":{tag:"(0044,0001)",vr:"ST",name:"ProductPackageIdentifier",vm:"1",version:"DICOM"},"(0044,0002)":{tag:"(0044,0002)",vr:"CS",name:"SubstanceAdministrationApproval",vm:"1",version:"DICOM"},"(0044,0003)":{tag:"(0044,0003)",vr:"LT",name:"ApprovalStatusFurtherDescription",vm:"1",version:"DICOM"},"(0044,0004)":{tag:"(0044,0004)",vr:"DT",name:"ApprovalStatusDateTime",vm:"1",version:"DICOM"},"(0044,0007)":{tag:"(0044,0007)",vr:"SQ",name:"ProductTypeCodeSequence",vm:"1",version:"DICOM"},"(0044,0008)":{tag:"(0044,0008)",vr:"LO",name:"ProductName",vm:"1-n",version:"DICOM"},"(0044,0009)":{tag:"(0044,0009)",vr:"LT",name:"ProductDescription",vm:"1",version:"DICOM"},"(0044,000A)":{tag:"(0044,000A)",vr:"LO",name:"ProductLotIdentifier",vm:"1",version:"DICOM"},"(0044,000B)":{tag:"(0044,000B)",vr:"DT",name:"ProductExpirationDateTime",vm:"1",version:"DICOM"},"(0044,0010)":{tag:"(0044,0010)",vr:"DT",name:"SubstanceAdministrationDateTime",vm:"1",version:"DICOM"},"(0044,0011)":{tag:"(0044,0011)",vr:"LO",name:"SubstanceAdministrationNotes",vm:"1",version:"DICOM"},"(0044,0012)":{tag:"(0044,0012)",vr:"LO",name:"SubstanceAdministrationDeviceID",vm:"1",version:"DICOM"},"(0044,0013)":{tag:"(0044,0013)",vr:"SQ",name:"ProductParameterSequence",vm:"1",version:"DICOM"},"(0044,0019)":{tag:"(0044,0019)",vr:"SQ",name:"SubstanceAdministrationParameterSequence",vm:"1",version:"DICOM"},"(0044,0100)":{tag:"(0044,0100)",vr:"SQ",name:"ApprovalSequence",vm:"1",version:"DICOM"},"(0044,0101)":{tag:"(0044,0101)",vr:"SQ",name:"AssertionCodeSequence",vm:"1",version:"DICOM"},"(0044,0102)":{tag:"(0044,0102)",vr:"UI",name:"AssertionUID",vm:"1",version:"DICOM"},"(0044,0103)":{tag:"(0044,0103)",vr:"SQ",name:"AsserterIdentificationSequence",vm:"1",version:"DICOM"},"(0044,0104)":{tag:"(0044,0104)",vr:"DT",name:"AssertionDateTime",vm:"1",version:"DICOM"},"(0044,0105)":{tag:"(0044,0105)",vr:"DT",name:"AssertionExpirationDateTime",vm:"1",version:"DICOM"},"(0044,0106)":{tag:"(0044,0106)",vr:"UT",name:"AssertionComments",vm:"1",version:"DICOM"},"(0044,0107)":{tag:"(0044,0107)",vr:"SQ",name:"RelatedAssertionSequence",vm:"1",version:"DICOM"},"(0044,0108)":{tag:"(0044,0108)",vr:"UI",name:"ReferencedAssertionUID",vm:"1",version:"DICOM"},"(0044,0109)":{tag:"(0044,0109)",vr:"SQ",name:"ApprovalSubjectSequence",vm:"1",version:"DICOM"},"(0044,010A)":{tag:"(0044,010A)",vr:"SQ",name:"OrganizationalRoleCodeSequence",vm:"1",version:"DICOM"},"(0046,0012)":{tag:"(0046,0012)",vr:"LO",name:"LensDescription",vm:"1",version:"DICOM"},"(0046,0014)":{tag:"(0046,0014)",vr:"SQ",name:"RightLensSequence",vm:"1",version:"DICOM"},"(0046,0015)":{tag:"(0046,0015)",vr:"SQ",name:"LeftLensSequence",vm:"1",version:"DICOM"},"(0046,0016)":{tag:"(0046,0016)",vr:"SQ",name:"UnspecifiedLateralityLensSequence",vm:"1",version:"DICOM"},"(0046,0018)":{tag:"(0046,0018)",vr:"SQ",name:"CylinderSequence",vm:"1",version:"DICOM"},"(0046,0028)":{tag:"(0046,0028)",vr:"SQ",name:"PrismSequence",vm:"1",version:"DICOM"},"(0046,0030)":{tag:"(0046,0030)",vr:"FD",name:"HorizontalPrismPower",vm:"1",version:"DICOM"},"(0046,0032)":{tag:"(0046,0032)",vr:"CS",name:"HorizontalPrismBase",vm:"1",version:"DICOM"},"(0046,0034)":{tag:"(0046,0034)",vr:"FD",name:"VerticalPrismPower",vm:"1",version:"DICOM"},"(0046,0036)":{tag:"(0046,0036)",vr:"CS",name:"VerticalPrismBase",vm:"1",version:"DICOM"},"(0046,0038)":{tag:"(0046,0038)",vr:"CS",name:"LensSegmentType",vm:"1",version:"DICOM"},"(0046,0040)":{tag:"(0046,0040)",vr:"FD",name:"OpticalTransmittance",vm:"1",version:"DICOM"},"(0046,0042)":{tag:"(0046,0042)",vr:"FD",name:"ChannelWidth",vm:"1",version:"DICOM"},"(0046,0044)":{tag:"(0046,0044)",vr:"FD",name:"PupilSize",vm:"1",version:"DICOM"},"(0046,0046)":{tag:"(0046,0046)",vr:"FD",name:"CornealSize",vm:"1",version:"DICOM"},"(0046,0047)":{tag:"(0046,0047)",vr:"SQ",name:"CornealSizeSequence",vm:"1",version:"DICOM"},"(0046,0050)":{tag:"(0046,0050)",vr:"SQ",name:"AutorefractionRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0052)":{tag:"(0046,0052)",vr:"SQ",name:"AutorefractionLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0060)":{tag:"(0046,0060)",vr:"FD",name:"DistancePupillaryDistance",vm:"1",version:"DICOM"},"(0046,0062)":{tag:"(0046,0062)",vr:"FD",name:"NearPupillaryDistance",vm:"1",version:"DICOM"},"(0046,0063)":{tag:"(0046,0063)",vr:"FD",name:"IntermediatePupillaryDistance",vm:"1",version:"DICOM"},"(0046,0064)":{tag:"(0046,0064)",vr:"FD",name:"OtherPupillaryDistance",vm:"1",version:"DICOM"},"(0046,0070)":{tag:"(0046,0070)",vr:"SQ",name:"KeratometryRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0071)":{tag:"(0046,0071)",vr:"SQ",name:"KeratometryLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0074)":{tag:"(0046,0074)",vr:"SQ",name:"SteepKeratometricAxisSequence",vm:"1",version:"DICOM"},"(0046,0075)":{tag:"(0046,0075)",vr:"FD",name:"RadiusOfCurvature",vm:"1",version:"DICOM"},"(0046,0076)":{tag:"(0046,0076)",vr:"FD",name:"KeratometricPower",vm:"1",version:"DICOM"},"(0046,0077)":{tag:"(0046,0077)",vr:"FD",name:"KeratometricAxis",vm:"1",version:"DICOM"},"(0046,0080)":{tag:"(0046,0080)",vr:"SQ",name:"FlatKeratometricAxisSequence",vm:"1",version:"DICOM"},"(0046,0092)":{tag:"(0046,0092)",vr:"CS",name:"BackgroundColor",vm:"1",version:"DICOM"},"(0046,0094)":{tag:"(0046,0094)",vr:"CS",name:"Optotype",vm:"1",version:"DICOM"},"(0046,0095)":{tag:"(0046,0095)",vr:"CS",name:"OptotypePresentation",vm:"1",version:"DICOM"},"(0046,0097)":{tag:"(0046,0097)",vr:"SQ",name:"SubjectiveRefractionRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0098)":{tag:"(0046,0098)",vr:"SQ",name:"SubjectiveRefractionLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0100)":{tag:"(0046,0100)",vr:"SQ",name:"AddNearSequence",vm:"1",version:"DICOM"},"(0046,0101)":{tag:"(0046,0101)",vr:"SQ",name:"AddIntermediateSequence",vm:"1",version:"DICOM"},"(0046,0102)":{tag:"(0046,0102)",vr:"SQ",name:"AddOtherSequence",vm:"1",version:"DICOM"},"(0046,0104)":{tag:"(0046,0104)",vr:"FD",name:"AddPower",vm:"1",version:"DICOM"},"(0046,0106)":{tag:"(0046,0106)",vr:"FD",name:"ViewingDistance",vm:"1",version:"DICOM"},"(0046,0110)":{tag:"(0046,0110)",vr:"SQ",name:"CorneaMeasurementsSequence",vm:"1",version:"DICOM"},"(0046,0111)":{tag:"(0046,0111)",vr:"SQ",name:"SourceOfCorneaMeasurementDataCodeSequence",vm:"1",version:"DICOM"},"(0046,0112)":{tag:"(0046,0112)",vr:"SQ",name:"SteepCornealAxisSequence",vm:"1",version:"DICOM"},"(0046,0113)":{tag:"(0046,0113)",vr:"SQ",name:"FlatCornealAxisSequence",vm:"1",version:"DICOM"},"(0046,0114)":{tag:"(0046,0114)",vr:"FD",name:"CornealPower",vm:"1",version:"DICOM"},"(0046,0115)":{tag:"(0046,0115)",vr:"FD",name:"CornealAxis",vm:"1",version:"DICOM"},"(0046,0116)":{tag:"(0046,0116)",vr:"SQ",name:"CorneaMeasurementMethodCodeSequence",vm:"1",version:"DICOM"},"(0046,0117)":{tag:"(0046,0117)",vr:"FL",name:"RefractiveIndexOfCornea",vm:"1",version:"DICOM"},"(0046,0118)":{tag:"(0046,0118)",vr:"FL",name:"RefractiveIndexOfAqueousHumor",vm:"1",version:"DICOM"},"(0046,0121)":{tag:"(0046,0121)",vr:"SQ",name:"VisualAcuityTypeCodeSequence",vm:"1",version:"DICOM"},"(0046,0122)":{tag:"(0046,0122)",vr:"SQ",name:"VisualAcuityRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0123)":{tag:"(0046,0123)",vr:"SQ",name:"VisualAcuityLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0124)":{tag:"(0046,0124)",vr:"SQ",name:"VisualAcuityBothEyesOpenSequence",vm:"1",version:"DICOM"},"(0046,0125)":{tag:"(0046,0125)",vr:"CS",name:"ViewingDistanceType",vm:"1",version:"DICOM"},"(0046,0135)":{tag:"(0046,0135)",vr:"SS",name:"VisualAcuityModifiers",vm:"2",version:"DICOM"},"(0046,0137)":{tag:"(0046,0137)",vr:"FD",name:"DecimalVisualAcuity",vm:"1",version:"DICOM"},"(0046,0139)":{tag:"(0046,0139)",vr:"LO",name:"OptotypeDetailedDefinition",vm:"1",version:"DICOM"},"(0046,0145)":{tag:"(0046,0145)",vr:"SQ",name:"ReferencedRefractiveMeasurementsSequence",vm:"1",version:"DICOM"},"(0046,0146)":{tag:"(0046,0146)",vr:"FD",name:"SpherePower",vm:"1",version:"DICOM"},"(0046,0147)":{tag:"(0046,0147)",vr:"FD",name:"CylinderPower",vm:"1",version:"DICOM"},"(0046,0201)":{tag:"(0046,0201)",vr:"CS",name:"CornealTopographySurface",vm:"1",version:"DICOM"},"(0046,0202)":{tag:"(0046,0202)",vr:"FL",name:"CornealVertexLocation",vm:"2",version:"DICOM"},"(0046,0203)":{tag:"(0046,0203)",vr:"FL",name:"PupilCentroidXCoordinate",vm:"1",version:"DICOM"},"(0046,0204)":{tag:"(0046,0204)",vr:"FL",name:"PupilCentroidYCoordinate",vm:"1",version:"DICOM"},"(0046,0205)":{tag:"(0046,0205)",vr:"FL",name:"EquivalentPupilRadius",vm:"1",version:"DICOM"},"(0046,0207)":{tag:"(0046,0207)",vr:"SQ",name:"CornealTopographyMapTypeCodeSequence",vm:"1",version:"DICOM"},"(0046,0208)":{tag:"(0046,0208)",vr:"IS",name:"VerticesOfTheOutlineOfPupil",vm:"2-2n",version:"DICOM"},"(0046,0210)":{tag:"(0046,0210)",vr:"SQ",name:"CornealTopographyMappingNormalsSequence",vm:"1",version:"DICOM"},"(0046,0211)":{tag:"(0046,0211)",vr:"SQ",name:"MaximumCornealCurvatureSequence",vm:"1",version:"DICOM"},"(0046,0212)":{tag:"(0046,0212)",vr:"FL",name:"MaximumCornealCurvature",vm:"1",version:"DICOM"},"(0046,0213)":{tag:"(0046,0213)",vr:"FL",name:"MaximumCornealCurvatureLocation",vm:"2",version:"DICOM"},"(0046,0215)":{tag:"(0046,0215)",vr:"SQ",name:"MinimumKeratometricSequence",vm:"1",version:"DICOM"},"(0046,0218)":{tag:"(0046,0218)",vr:"SQ",name:"SimulatedKeratometricCylinderSequence",vm:"1",version:"DICOM"},"(0046,0220)":{tag:"(0046,0220)",vr:"FL",name:"AverageCornealPower",vm:"1",version:"DICOM"},"(0046,0224)":{tag:"(0046,0224)",vr:"FL",name:"CornealISValue",vm:"1",version:"DICOM"},"(0046,0227)":{tag:"(0046,0227)",vr:"FL",name:"AnalyzedArea",vm:"1",version:"DICOM"},"(0046,0230)":{tag:"(0046,0230)",vr:"FL",name:"SurfaceRegularityIndex",vm:"1",version:"DICOM"},"(0046,0232)":{tag:"(0046,0232)",vr:"FL",name:"SurfaceAsymmetryIndex",vm:"1",version:"DICOM"},"(0046,0234)":{tag:"(0046,0234)",vr:"FL",name:"CornealEccentricityIndex",vm:"1",version:"DICOM"},"(0046,0236)":{tag:"(0046,0236)",vr:"FL",name:"KeratoconusPredictionIndex",vm:"1",version:"DICOM"},"(0046,0238)":{tag:"(0046,0238)",vr:"FL",name:"DecimalPotentialVisualAcuity",vm:"1",version:"DICOM"},"(0046,0242)":{tag:"(0046,0242)",vr:"CS",name:"CornealTopographyMapQualityEvaluation",vm:"1",version:"DICOM"},"(0046,0244)":{tag:"(0046,0244)",vr:"SQ",name:"SourceImageCornealProcessedDataSequence",vm:"1",version:"DICOM"},"(0046,0247)":{tag:"(0046,0247)",vr:"FL",name:"CornealPointLocation",vm:"3",version:"DICOM"},"(0046,0248)":{tag:"(0046,0248)",vr:"CS",name:"CornealPointEstimated",vm:"1",version:"DICOM"},"(0046,0249)":{tag:"(0046,0249)",vr:"FL",name:"AxialPower",vm:"1",version:"DICOM"},"(0046,0250)":{tag:"(0046,0250)",vr:"FL",name:"TangentialPower",vm:"1",version:"DICOM"},"(0046,0251)":{tag:"(0046,0251)",vr:"FL",name:"RefractivePower",vm:"1",version:"DICOM"},"(0046,0252)":{tag:"(0046,0252)",vr:"FL",name:"RelativeElevation",vm:"1",version:"DICOM"},"(0046,0253)":{tag:"(0046,0253)",vr:"FL",name:"CornealWavefront",vm:"1",version:"DICOM"},"(0048,0001)":{tag:"(0048,0001)",vr:"FL",name:"ImagedVolumeWidth",vm:"1",version:"DICOM"},"(0048,0002)":{tag:"(0048,0002)",vr:"FL",name:"ImagedVolumeHeight",vm:"1",version:"DICOM"},"(0048,0003)":{tag:"(0048,0003)",vr:"FL",name:"ImagedVolumeDepth",vm:"1",version:"DICOM"},"(0048,0006)":{tag:"(0048,0006)",vr:"UL",name:"TotalPixelMatrixColumns",vm:"1",version:"DICOM"},"(0048,0007)":{tag:"(0048,0007)",vr:"UL",name:"TotalPixelMatrixRows",vm:"1",version:"DICOM"},"(0048,0008)":{tag:"(0048,0008)",vr:"SQ",name:"TotalPixelMatrixOriginSequence",vm:"1",version:"DICOM"},"(0048,0010)":{tag:"(0048,0010)",vr:"CS",name:"SpecimenLabelInImage",vm:"1",version:"DICOM"},"(0048,0011)":{tag:"(0048,0011)",vr:"CS",name:"FocusMethod",vm:"1",version:"DICOM"},"(0048,0012)":{tag:"(0048,0012)",vr:"CS",name:"ExtendedDepthOfField",vm:"1",version:"DICOM"},"(0048,0013)":{tag:"(0048,0013)",vr:"US",name:"NumberOfFocalPlanes",vm:"1",version:"DICOM"},"(0048,0014)":{tag:"(0048,0014)",vr:"FL",name:"DistanceBetweenFocalPlanes",vm:"1",version:"DICOM"},"(0048,0015)":{tag:"(0048,0015)",vr:"US",name:"RecommendedAbsentPixelCIELabValue",vm:"3",version:"DICOM"},"(0048,0100)":{tag:"(0048,0100)",vr:"SQ",name:"IlluminatorTypeCodeSequence",vm:"1",version:"DICOM"},"(0048,0102)":{tag:"(0048,0102)",vr:"DS",name:"ImageOrientationSlide",vm:"6",version:"DICOM"},"(0048,0105)":{tag:"(0048,0105)",vr:"SQ",name:"OpticalPathSequence",vm:"1",version:"DICOM"},"(0048,0106)":{tag:"(0048,0106)",vr:"SH",name:"OpticalPathIdentifier",vm:"1",version:"DICOM"},"(0048,0107)":{tag:"(0048,0107)",vr:"ST",name:"OpticalPathDescription",vm:"1",version:"DICOM"},"(0048,0108)":{tag:"(0048,0108)",vr:"SQ",name:"IlluminationColorCodeSequence",vm:"1",version:"DICOM"},"(0048,0110)":{tag:"(0048,0110)",vr:"SQ",name:"SpecimenReferenceSequence",vm:"1",version:"DICOM"},"(0048,0111)":{tag:"(0048,0111)",vr:"DS",name:"CondenserLensPower",vm:"1",version:"DICOM"},"(0048,0112)":{tag:"(0048,0112)",vr:"DS",name:"ObjectiveLensPower",vm:"1",version:"DICOM"},"(0048,0113)":{tag:"(0048,0113)",vr:"DS",name:"ObjectiveLensNumericalAperture",vm:"1",version:"DICOM"},"(0048,0120)":{tag:"(0048,0120)",vr:"SQ",name:"PaletteColorLookupTableSequence",vm:"1",version:"DICOM"},"(0048,0200)":{tag:"(0048,0200)",vr:"SQ",name:"ReferencedImageNavigationSequence",vm:"1",version:"DICOM"},"(0048,0201)":{tag:"(0048,0201)",vr:"US",name:"TopLeftHandCornerOfLocalizerArea",vm:"2",version:"DICOM"},"(0048,0202)":{tag:"(0048,0202)",vr:"US",name:"BottomRightHandCornerOfLocalizerArea",vm:"2",version:"DICOM"},"(0048,0207)":{tag:"(0048,0207)",vr:"SQ",name:"OpticalPathIdentificationSequence",vm:"1",version:"DICOM"},"(0048,021A)":{tag:"(0048,021A)",vr:"SQ",name:"PlanePositionSlideSequence",vm:"1",version:"DICOM"},"(0048,021E)":{tag:"(0048,021E)",vr:"SL",name:"ColumnPositionInTotalImagePixelMatrix",vm:"1",version:"DICOM"},"(0048,021F)":{tag:"(0048,021F)",vr:"SL",name:"RowPositionInTotalImagePixelMatrix",vm:"1",version:"DICOM"},"(0048,0301)":{tag:"(0048,0301)",vr:"CS",name:"PixelOriginInterpretation",vm:"1",version:"DICOM"},"(0048,0302)":{tag:"(0048,0302)",vr:"UL",name:"NumberOfOpticalPaths",vm:"1",version:"DICOM"},"(0048,0303)":{tag:"(0048,0303)",vr:"UL",name:"TotalPixelMatrixFocalPlanes",vm:"1",version:"DICOM"},"(0050,0004)":{tag:"(0050,0004)",vr:"CS",name:"CalibrationImage",vm:"1",version:"DICOM"},"(0050,0010)":{tag:"(0050,0010)",vr:"SQ",name:"DeviceSequence",vm:"1",version:"DICOM"},"(0050,0012)":{tag:"(0050,0012)",vr:"SQ",name:"ContainerComponentTypeCodeSequence",vm:"1",version:"DICOM"},"(0050,0013)":{tag:"(0050,0013)",vr:"FD",name:"ContainerComponentThickness",vm:"1",version:"DICOM"},"(0050,0014)":{tag:"(0050,0014)",vr:"DS",name:"DeviceLength",vm:"1",version:"DICOM"},"(0050,0015)":{tag:"(0050,0015)",vr:"FD",name:"ContainerComponentWidth",vm:"1",version:"DICOM"},"(0050,0016)":{tag:"(0050,0016)",vr:"DS",name:"DeviceDiameter",vm:"1",version:"DICOM"},"(0050,0017)":{tag:"(0050,0017)",vr:"CS",name:"DeviceDiameterUnits",vm:"1",version:"DICOM"},"(0050,0018)":{tag:"(0050,0018)",vr:"DS",name:"DeviceVolume",vm:"1",version:"DICOM"},"(0050,0019)":{tag:"(0050,0019)",vr:"DS",name:"InterMarkerDistance",vm:"1",version:"DICOM"},"(0050,001A)":{tag:"(0050,001A)",vr:"CS",name:"ContainerComponentMaterial",vm:"1",version:"DICOM"},"(0050,001B)":{tag:"(0050,001B)",vr:"LO",name:"ContainerComponentID",vm:"1",version:"DICOM"},"(0050,001C)":{tag:"(0050,001C)",vr:"FD",name:"ContainerComponentLength",vm:"1",version:"DICOM"},"(0050,001D)":{tag:"(0050,001D)",vr:"FD",name:"ContainerComponentDiameter",vm:"1",version:"DICOM"},"(0050,001E)":{tag:"(0050,001E)",vr:"LO",name:"ContainerComponentDescription",vm:"1",version:"DICOM"},"(0050,0020)":{tag:"(0050,0020)",vr:"LO",name:"DeviceDescription",vm:"1",version:"DICOM"},"(0050,0021)":{tag:"(0050,0021)",vr:"ST",name:"LongDeviceDescription",vm:"1",version:"DICOM"},"(0052,0001)":{tag:"(0052,0001)",vr:"FL",name:"ContrastBolusIngredientPercentByVolume",vm:"1",version:"DICOM"},"(0052,0002)":{tag:"(0052,0002)",vr:"FD",name:"OCTFocalDistance",vm:"1",version:"DICOM"},"(0052,0003)":{tag:"(0052,0003)",vr:"FD",name:"BeamSpotSize",vm:"1",version:"DICOM"},"(0052,0004)":{tag:"(0052,0004)",vr:"FD",name:"EffectiveRefractiveIndex",vm:"1",version:"DICOM"},"(0052,0006)":{tag:"(0052,0006)",vr:"CS",name:"OCTAcquisitionDomain",vm:"1",version:"DICOM"},"(0052,0007)":{tag:"(0052,0007)",vr:"FD",name:"OCTOpticalCenterWavelength",vm:"1",version:"DICOM"},"(0052,0008)":{tag:"(0052,0008)",vr:"FD",name:"AxialResolution",vm:"1",version:"DICOM"},"(0052,0009)":{tag:"(0052,0009)",vr:"FD",name:"RangingDepth",vm:"1",version:"DICOM"},"(0052,0011)":{tag:"(0052,0011)",vr:"FD",name:"ALineRate",vm:"1",version:"DICOM"},"(0052,0012)":{tag:"(0052,0012)",vr:"US",name:"ALinesPerFrame",vm:"1",version:"DICOM"},"(0052,0013)":{tag:"(0052,0013)",vr:"FD",name:"CatheterRotationalRate",vm:"1",version:"DICOM"},"(0052,0014)":{tag:"(0052,0014)",vr:"FD",name:"ALinePixelSpacing",vm:"1",version:"DICOM"},"(0052,0016)":{tag:"(0052,0016)",vr:"SQ",name:"ModeOfPercutaneousAccessSequence",vm:"1",version:"DICOM"},"(0052,0025)":{tag:"(0052,0025)",vr:"SQ",name:"IntravascularOCTFrameTypeSequence",vm:"1",version:"DICOM"},"(0052,0026)":{tag:"(0052,0026)",vr:"CS",name:"OCTZOffsetApplied",vm:"1",version:"DICOM"},"(0052,0027)":{tag:"(0052,0027)",vr:"SQ",name:"IntravascularFrameContentSequence",vm:"1",version:"DICOM"},"(0052,0028)":{tag:"(0052,0028)",vr:"FD",name:"IntravascularLongitudinalDistance",vm:"1",version:"DICOM"},"(0052,0029)":{tag:"(0052,0029)",vr:"SQ",name:"IntravascularOCTFrameContentSequence",vm:"1",version:"DICOM"},"(0052,0030)":{tag:"(0052,0030)",vr:"SS",name:"OCTZOffsetCorrection",vm:"1",version:"DICOM"},"(0052,0031)":{tag:"(0052,0031)",vr:"CS",name:"CatheterDirectionOfRotation",vm:"1",version:"DICOM"},"(0052,0033)":{tag:"(0052,0033)",vr:"FD",name:"SeamLineLocation",vm:"1",version:"DICOM"},"(0052,0034)":{tag:"(0052,0034)",vr:"FD",name:"FirstALineLocation",vm:"1",version:"DICOM"},"(0052,0036)":{tag:"(0052,0036)",vr:"US",name:"SeamLineIndex",vm:"1",version:"DICOM"},"(0052,0038)":{tag:"(0052,0038)",vr:"US",name:"NumberOfPaddedALines",vm:"1",version:"DICOM"},"(0052,0039)":{tag:"(0052,0039)",vr:"CS",name:"InterpolationType",vm:"1",version:"DICOM"},"(0052,003A)":{tag:"(0052,003A)",vr:"CS",name:"RefractiveIndexApplied",vm:"1",version:"DICOM"},"(0054,0010)":{tag:"(0054,0010)",vr:"US",name:"EnergyWindowVector",vm:"1-n",version:"DICOM"},"(0054,0011)":{tag:"(0054,0011)",vr:"US",name:"NumberOfEnergyWindows",vm:"1",version:"DICOM"},"(0054,0012)":{tag:"(0054,0012)",vr:"SQ",name:"EnergyWindowInformationSequence",vm:"1",version:"DICOM"},"(0054,0013)":{tag:"(0054,0013)",vr:"SQ",name:"EnergyWindowRangeSequence",vm:"1",version:"DICOM"},"(0054,0014)":{tag:"(0054,0014)",vr:"DS",name:"EnergyWindowLowerLimit",vm:"1",version:"DICOM"},"(0054,0015)":{tag:"(0054,0015)",vr:"DS",name:"EnergyWindowUpperLimit",vm:"1",version:"DICOM"},"(0054,0016)":{tag:"(0054,0016)",vr:"SQ",name:"RadiopharmaceuticalInformationSequence",vm:"1",version:"DICOM"},"(0054,0017)":{tag:"(0054,0017)",vr:"IS",name:"ResidualSyringeCounts",vm:"1",version:"DICOM"},"(0054,0018)":{tag:"(0054,0018)",vr:"SH",name:"EnergyWindowName",vm:"1",version:"DICOM"},"(0054,0020)":{tag:"(0054,0020)",vr:"US",name:"DetectorVector",vm:"1-n",version:"DICOM"},"(0054,0021)":{tag:"(0054,0021)",vr:"US",name:"NumberOfDetectors",vm:"1",version:"DICOM"},"(0054,0022)":{tag:"(0054,0022)",vr:"SQ",name:"DetectorInformationSequence",vm:"1",version:"DICOM"},"(0054,0030)":{tag:"(0054,0030)",vr:"US",name:"PhaseVector",vm:"1-n",version:"DICOM"},"(0054,0031)":{tag:"(0054,0031)",vr:"US",name:"NumberOfPhases",vm:"1",version:"DICOM"},"(0054,0032)":{tag:"(0054,0032)",vr:"SQ",name:"PhaseInformationSequence",vm:"1",version:"DICOM"},"(0054,0033)":{tag:"(0054,0033)",vr:"US",name:"NumberOfFramesInPhase",vm:"1",version:"DICOM"},"(0054,0036)":{tag:"(0054,0036)",vr:"IS",name:"PhaseDelay",vm:"1",version:"DICOM"},"(0054,0038)":{tag:"(0054,0038)",vr:"IS",name:"PauseBetweenFrames",vm:"1",version:"DICOM"},"(0054,0039)":{tag:"(0054,0039)",vr:"CS",name:"PhaseDescription",vm:"1",version:"DICOM"},"(0054,0050)":{tag:"(0054,0050)",vr:"US",name:"RotationVector",vm:"1-n",version:"DICOM"},"(0054,0051)":{tag:"(0054,0051)",vr:"US",name:"NumberOfRotations",vm:"1",version:"DICOM"},"(0054,0052)":{tag:"(0054,0052)",vr:"SQ",name:"RotationInformationSequence",vm:"1",version:"DICOM"},"(0054,0053)":{tag:"(0054,0053)",vr:"US",name:"NumberOfFramesInRotation",vm:"1",version:"DICOM"},"(0054,0060)":{tag:"(0054,0060)",vr:"US",name:"RRIntervalVector",vm:"1-n",version:"DICOM"},"(0054,0061)":{tag:"(0054,0061)",vr:"US",name:"NumberOfRRIntervals",vm:"1",version:"DICOM"},"(0054,0062)":{tag:"(0054,0062)",vr:"SQ",name:"GatedInformationSequence",vm:"1",version:"DICOM"},"(0054,0063)":{tag:"(0054,0063)",vr:"SQ",name:"DataInformationSequence",vm:"1",version:"DICOM"},"(0054,0070)":{tag:"(0054,0070)",vr:"US",name:"TimeSlotVector",vm:"1-n",version:"DICOM"},"(0054,0071)":{tag:"(0054,0071)",vr:"US",name:"NumberOfTimeSlots",vm:"1",version:"DICOM"},"(0054,0072)":{tag:"(0054,0072)",vr:"SQ",name:"TimeSlotInformationSequence",vm:"1",version:"DICOM"},"(0054,0073)":{tag:"(0054,0073)",vr:"DS",name:"TimeSlotTime",vm:"1",version:"DICOM"},"(0054,0080)":{tag:"(0054,0080)",vr:"US",name:"SliceVector",vm:"1-n",version:"DICOM"},"(0054,0081)":{tag:"(0054,0081)",vr:"US",name:"NumberOfSlices",vm:"1",version:"DICOM"},"(0054,0090)":{tag:"(0054,0090)",vr:"US",name:"AngularViewVector",vm:"1-n",version:"DICOM"},"(0054,0100)":{tag:"(0054,0100)",vr:"US",name:"TimeSliceVector",vm:"1-n",version:"DICOM"},"(0054,0101)":{tag:"(0054,0101)",vr:"US",name:"NumberOfTimeSlices",vm:"1",version:"DICOM"},"(0054,0200)":{tag:"(0054,0200)",vr:"DS",name:"StartAngle",vm:"1",version:"DICOM"},"(0054,0202)":{tag:"(0054,0202)",vr:"CS",name:"TypeOfDetectorMotion",vm:"1",version:"DICOM"},"(0054,0210)":{tag:"(0054,0210)",vr:"IS",name:"TriggerVector",vm:"1-n",version:"DICOM"},"(0054,0211)":{tag:"(0054,0211)",vr:"US",name:"NumberOfTriggersInPhase",vm:"1",version:"DICOM"},"(0054,0220)":{tag:"(0054,0220)",vr:"SQ",name:"ViewCodeSequence",vm:"1",version:"DICOM"},"(0054,0222)":{tag:"(0054,0222)",vr:"SQ",name:"ViewModifierCodeSequence",vm:"1",version:"DICOM"},"(0054,0300)":{tag:"(0054,0300)",vr:"SQ",name:"RadionuclideCodeSequence",vm:"1",version:"DICOM"},"(0054,0302)":{tag:"(0054,0302)",vr:"SQ",name:"AdministrationRouteCodeSequence",vm:"1",version:"DICOM"},"(0054,0304)":{tag:"(0054,0304)",vr:"SQ",name:"RadiopharmaceuticalCodeSequence",vm:"1",version:"DICOM"},"(0054,0306)":{tag:"(0054,0306)",vr:"SQ",name:"CalibrationDataSequence",vm:"1",version:"DICOM"},"(0054,0308)":{tag:"(0054,0308)",vr:"US",name:"EnergyWindowNumber",vm:"1",version:"DICOM"},"(0054,0400)":{tag:"(0054,0400)",vr:"SH",name:"ImageID",vm:"1",version:"DICOM"},"(0054,0410)":{tag:"(0054,0410)",vr:"SQ",name:"PatientOrientationCodeSequence",vm:"1",version:"DICOM"},"(0054,0412)":{tag:"(0054,0412)",vr:"SQ",name:"PatientOrientationModifierCodeSequence",vm:"1",version:"DICOM"},"(0054,0414)":{tag:"(0054,0414)",vr:"SQ",name:"PatientGantryRelationshipCodeSequence",vm:"1",version:"DICOM"},"(0054,0500)":{tag:"(0054,0500)",vr:"CS",name:"SliceProgressionDirection",vm:"1",version:"DICOM"},"(0054,0501)":{tag:"(0054,0501)",vr:"CS",name:"ScanProgressionDirection",vm:"1",version:"DICOM"},"(0054,1000)":{tag:"(0054,1000)",vr:"CS",name:"SeriesType",vm:"2",version:"DICOM"},"(0054,1001)":{tag:"(0054,1001)",vr:"CS",name:"Units",vm:"1",version:"DICOM"},"(0054,1002)":{tag:"(0054,1002)",vr:"CS",name:"CountsSource",vm:"1",version:"DICOM"},"(0054,1004)":{tag:"(0054,1004)",vr:"CS",name:"ReprojectionMethod",vm:"1",version:"DICOM"},"(0054,1006)":{tag:"(0054,1006)",vr:"CS",name:"SUVType",vm:"1",version:"DICOM"},"(0054,1100)":{tag:"(0054,1100)",vr:"CS",name:"RandomsCorrectionMethod",vm:"1",version:"DICOM"},"(0054,1101)":{tag:"(0054,1101)",vr:"LO",name:"AttenuationCorrectionMethod",vm:"1",version:"DICOM"},"(0054,1102)":{tag:"(0054,1102)",vr:"CS",name:"DecayCorrection",vm:"1",version:"DICOM"},"(0054,1103)":{tag:"(0054,1103)",vr:"LO",name:"ReconstructionMethod",vm:"1",version:"DICOM"},"(0054,1104)":{tag:"(0054,1104)",vr:"LO",name:"DetectorLinesOfResponseUsed",vm:"1",version:"DICOM"},"(0054,1105)":{tag:"(0054,1105)",vr:"LO",name:"ScatterCorrectionMethod",vm:"1",version:"DICOM"},"(0054,1200)":{tag:"(0054,1200)",vr:"DS",name:"AxialAcceptance",vm:"1",version:"DICOM"},"(0054,1201)":{tag:"(0054,1201)",vr:"IS",name:"AxialMash",vm:"2",version:"DICOM"},"(0054,1202)":{tag:"(0054,1202)",vr:"IS",name:"TransverseMash",vm:"1",version:"DICOM"},"(0054,1203)":{tag:"(0054,1203)",vr:"DS",name:"DetectorElementSize",vm:"2",version:"DICOM"},"(0054,1210)":{tag:"(0054,1210)",vr:"DS",name:"CoincidenceWindowWidth",vm:"1",version:"DICOM"},"(0054,1220)":{tag:"(0054,1220)",vr:"CS",name:"SecondaryCountsType",vm:"1-n",version:"DICOM"},"(0054,1300)":{tag:"(0054,1300)",vr:"DS",name:"FrameReferenceTime",vm:"1",version:"DICOM"},"(0054,1310)":{tag:"(0054,1310)",vr:"IS",name:"PrimaryPromptsCountsAccumulated",vm:"1",version:"DICOM"},"(0054,1311)":{tag:"(0054,1311)",vr:"IS",name:"SecondaryCountsAccumulated",vm:"1-n",version:"DICOM"},"(0054,1320)":{tag:"(0054,1320)",vr:"DS",name:"SliceSensitivityFactor",vm:"1",version:"DICOM"},"(0054,1321)":{tag:"(0054,1321)",vr:"DS",name:"DecayFactor",vm:"1",version:"DICOM"},"(0054,1322)":{tag:"(0054,1322)",vr:"DS",name:"DoseCalibrationFactor",vm:"1",version:"DICOM"},"(0054,1323)":{tag:"(0054,1323)",vr:"DS",name:"ScatterFractionFactor",vm:"1",version:"DICOM"},"(0054,1324)":{tag:"(0054,1324)",vr:"DS",name:"DeadTimeFactor",vm:"1",version:"DICOM"},"(0054,1330)":{tag:"(0054,1330)",vr:"US",name:"ImageIndex",vm:"1",version:"DICOM"},"(0060,3000)":{tag:"(0060,3000)",vr:"SQ",name:"HistogramSequence",vm:"1",version:"DICOM"},"(0060,3002)":{tag:"(0060,3002)",vr:"US",name:"HistogramNumberOfBins",vm:"1",version:"DICOM"},"(0060,3004)":{tag:"(0060,3004)",vr:"xs",name:"HistogramFirstBinValue",vm:"1",version:"DICOM"},"(0060,3006)":{tag:"(0060,3006)",vr:"xs",name:"HistogramLastBinValue",vm:"1",version:"DICOM"},"(0060,3008)":{tag:"(0060,3008)",vr:"US",name:"HistogramBinWidth",vm:"1",version:"DICOM"},"(0060,3010)":{tag:"(0060,3010)",vr:"LO",name:"HistogramExplanation",vm:"1",version:"DICOM"},"(0060,3020)":{tag:"(0060,3020)",vr:"UL",name:"HistogramData",vm:"1-n",version:"DICOM"},"(0062,0001)":{tag:"(0062,0001)",vr:"CS",name:"SegmentationType",vm:"1",version:"DICOM"},"(0062,0002)":{tag:"(0062,0002)",vr:"SQ",name:"SegmentSequence",vm:"1",version:"DICOM"},"(0062,0003)":{tag:"(0062,0003)",vr:"SQ",name:"SegmentedPropertyCategoryCodeSequence",vm:"1",version:"DICOM"},"(0062,0004)":{tag:"(0062,0004)",vr:"US",name:"SegmentNumber",vm:"1",version:"DICOM"},"(0062,0005)":{tag:"(0062,0005)",vr:"LO",name:"SegmentLabel",vm:"1",version:"DICOM"},"(0062,0006)":{tag:"(0062,0006)",vr:"ST",name:"SegmentDescription",vm:"1",version:"DICOM"},"(0062,0007)":{tag:"(0062,0007)",vr:"SQ",name:"SegmentationAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0062,0008)":{tag:"(0062,0008)",vr:"CS",name:"SegmentAlgorithmType",vm:"1",version:"DICOM"},"(0062,0009)":{tag:"(0062,0009)",vr:"LO",name:"SegmentAlgorithmName",vm:"1",version:"DICOM"},"(0062,000A)":{tag:"(0062,000A)",vr:"SQ",name:"SegmentIdentificationSequence",vm:"1",version:"DICOM"},"(0062,000B)":{tag:"(0062,000B)",vr:"US",name:"ReferencedSegmentNumber",vm:"1-n",version:"DICOM"},"(0062,000C)":{tag:"(0062,000C)",vr:"US",name:"RecommendedDisplayGrayscaleValue",vm:"1",version:"DICOM"},"(0062,000D)":{tag:"(0062,000D)",vr:"US",name:"RecommendedDisplayCIELabValue",vm:"3",version:"DICOM"},"(0062,000E)":{tag:"(0062,000E)",vr:"US",name:"MaximumFractionalValue",vm:"1",version:"DICOM"},"(0062,000F)":{tag:"(0062,000F)",vr:"SQ",name:"SegmentedPropertyTypeCodeSequence",vm:"1",version:"DICOM"},"(0062,0010)":{tag:"(0062,0010)",vr:"CS",name:"SegmentationFractionalType",vm:"1",version:"DICOM"},"(0062,0011)":{tag:"(0062,0011)",vr:"SQ",name:"SegmentedPropertyTypeModifierCodeSequence",vm:"1",version:"DICOM"},"(0062,0012)":{tag:"(0062,0012)",vr:"SQ",name:"UsedSegmentsSequence",vm:"1",version:"DICOM"},"(0062,0013)":{tag:"(0062,0013)",vr:"CS",name:"SegmentsOverlap",vm:"1",version:"DICOM"},"(0062,0020)":{tag:"(0062,0020)",vr:"UT",name:"TrackingID",vm:"1",version:"DICOM"},"(0062,0021)":{tag:"(0062,0021)",vr:"UI",name:"TrackingUID",vm:"1",version:"DICOM"},"(0064,0002)":{tag:"(0064,0002)",vr:"SQ",name:"DeformableRegistrationSequence",vm:"1",version:"DICOM"},"(0064,0003)":{tag:"(0064,0003)",vr:"UI",name:"SourceFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0064,0005)":{tag:"(0064,0005)",vr:"SQ",name:"DeformableRegistrationGridSequence",vm:"1",version:"DICOM"},"(0064,0007)":{tag:"(0064,0007)",vr:"UL",name:"GridDimensions",vm:"3",version:"DICOM"},"(0064,0008)":{tag:"(0064,0008)",vr:"FD",name:"GridResolution",vm:"3",version:"DICOM"},"(0064,0009)":{tag:"(0064,0009)",vr:"OF",name:"VectorGridData",vm:"1",version:"DICOM"},"(0064,000F)":{tag:"(0064,000F)",vr:"SQ",name:"PreDeformationMatrixRegistrationSequence",vm:"1",version:"DICOM"},"(0064,0010)":{tag:"(0064,0010)",vr:"SQ",name:"PostDeformationMatrixRegistrationSequence",vm:"1",version:"DICOM"},"(0066,0001)":{tag:"(0066,0001)",vr:"UL",name:"NumberOfSurfaces",vm:"1",version:"DICOM"},"(0066,0002)":{tag:"(0066,0002)",vr:"SQ",name:"SurfaceSequence",vm:"1",version:"DICOM"},"(0066,0003)":{tag:"(0066,0003)",vr:"UL",name:"SurfaceNumber",vm:"1",version:"DICOM"},"(0066,0004)":{tag:"(0066,0004)",vr:"LT",name:"SurfaceComments",vm:"1",version:"DICOM"},"(0066,0009)":{tag:"(0066,0009)",vr:"CS",name:"SurfaceProcessing",vm:"1",version:"DICOM"},"(0066,000A)":{tag:"(0066,000A)",vr:"FL",name:"SurfaceProcessingRatio",vm:"1",version:"DICOM"},"(0066,000B)":{tag:"(0066,000B)",vr:"LO",name:"SurfaceProcessingDescription",vm:"1",version:"DICOM"},"(0066,000C)":{tag:"(0066,000C)",vr:"FL",name:"RecommendedPresentationOpacity",vm:"1",version:"DICOM"},"(0066,000D)":{tag:"(0066,000D)",vr:"CS",name:"RecommendedPresentationType",vm:"1",version:"DICOM"},"(0066,000E)":{tag:"(0066,000E)",vr:"CS",name:"FiniteVolume",vm:"1",version:"DICOM"},"(0066,0010)":{tag:"(0066,0010)",vr:"CS",name:"Manifold",vm:"1",version:"DICOM"},"(0066,0011)":{tag:"(0066,0011)",vr:"SQ",name:"SurfacePointsSequence",vm:"1",version:"DICOM"},"(0066,0012)":{tag:"(0066,0012)",vr:"SQ",name:"SurfacePointsNormalsSequence",vm:"1",version:"DICOM"},"(0066,0013)":{tag:"(0066,0013)",vr:"SQ",name:"SurfaceMeshPrimitivesSequence",vm:"1",version:"DICOM"},"(0066,0015)":{tag:"(0066,0015)",vr:"UL",name:"NumberOfSurfacePoints",vm:"1",version:"DICOM"},"(0066,0016)":{tag:"(0066,0016)",vr:"OF",name:"PointCoordinatesData",vm:"1",version:"DICOM"},"(0066,0017)":{tag:"(0066,0017)",vr:"FL",name:"PointPositionAccuracy",vm:"3",version:"DICOM"},"(0066,0018)":{tag:"(0066,0018)",vr:"FL",name:"MeanPointDistance",vm:"1",version:"DICOM"},"(0066,0019)":{tag:"(0066,0019)",vr:"FL",name:"MaximumPointDistance",vm:"1",version:"DICOM"},"(0066,001A)":{tag:"(0066,001A)",vr:"FL",name:"PointsBoundingBoxCoordinates",vm:"6",version:"DICOM"},"(0066,001B)":{tag:"(0066,001B)",vr:"FL",name:"AxisOfRotation",vm:"3",version:"DICOM"},"(0066,001C)":{tag:"(0066,001C)",vr:"FL",name:"CenterOfRotation",vm:"3",version:"DICOM"},"(0066,001E)":{tag:"(0066,001E)",vr:"UL",name:"NumberOfVectors",vm:"1",version:"DICOM"},"(0066,001F)":{tag:"(0066,001F)",vr:"US",name:"VectorDimensionality",vm:"1",version:"DICOM"},"(0066,0020)":{tag:"(0066,0020)",vr:"FL",name:"VectorAccuracy",vm:"1-n",version:"DICOM"},"(0066,0021)":{tag:"(0066,0021)",vr:"OF",name:"VectorCoordinateData",vm:"1",version:"DICOM"},"(0066,0023)":{tag:"(0066,0023)",vr:"OW",name:"TrianglePointIndexList",vm:"1",version:"DICOM"},"(0066,0024)":{tag:"(0066,0024)",vr:"OW",name:"EdgePointIndexList",vm:"1",version:"DICOM"},"(0066,0025)":{tag:"(0066,0025)",vr:"OW",name:"VertexPointIndexList",vm:"1",version:"DICOM"},"(0066,0026)":{tag:"(0066,0026)",vr:"SQ",name:"TriangleStripSequence",vm:"1",version:"DICOM"},"(0066,0027)":{tag:"(0066,0027)",vr:"SQ",name:"TriangleFanSequence",vm:"1",version:"DICOM"},"(0066,0028)":{tag:"(0066,0028)",vr:"SQ",name:"LineSequence",vm:"1",version:"DICOM"},"(0066,0029)":{tag:"(0066,0029)",vr:"OW",name:"PrimitivePointIndexList",vm:"1",version:"DICOM"},"(0066,002A)":{tag:"(0066,002A)",vr:"UL",name:"SurfaceCount",vm:"1",version:"DICOM"},"(0066,002B)":{tag:"(0066,002B)",vr:"SQ",name:"ReferencedSurfaceSequence",vm:"1",version:"DICOM"},"(0066,002C)":{tag:"(0066,002C)",vr:"UL",name:"ReferencedSurfaceNumber",vm:"1",version:"DICOM"},"(0066,002D)":{tag:"(0066,002D)",vr:"SQ",name:"SegmentSurfaceGenerationAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0066,002E)":{tag:"(0066,002E)",vr:"SQ",name:"SegmentSurfaceSourceInstanceSequence",vm:"1",version:"DICOM"},"(0066,002F)":{tag:"(0066,002F)",vr:"SQ",name:"AlgorithmFamilyCodeSequence",vm:"1",version:"DICOM"},"(0066,0030)":{tag:"(0066,0030)",vr:"SQ",name:"AlgorithmNameCodeSequence",vm:"1",version:"DICOM"},"(0066,0031)":{tag:"(0066,0031)",vr:"LO",name:"AlgorithmVersion",vm:"1",version:"DICOM"},"(0066,0032)":{tag:"(0066,0032)",vr:"LT",name:"AlgorithmParameters",vm:"1",version:"DICOM"},"(0066,0034)":{tag:"(0066,0034)",vr:"SQ",name:"FacetSequence",vm:"1",version:"DICOM"},"(0066,0035)":{tag:"(0066,0035)",vr:"SQ",name:"SurfaceProcessingAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0066,0036)":{tag:"(0066,0036)",vr:"LO",name:"AlgorithmName",vm:"1",version:"DICOM"},"(0066,0037)":{tag:"(0066,0037)",vr:"FL",name:"RecommendedPointRadius",vm:"1",version:"DICOM"},"(0066,0038)":{tag:"(0066,0038)",vr:"FL",name:"RecommendedLineThickness",vm:"1",version:"DICOM"},"(0066,0040)":{tag:"(0066,0040)",vr:"UL",name:"LongPrimitivePointIndexList",vm:"1-n",version:"DICOM"},"(0066,0041)":{tag:"(0066,0041)",vr:"UL",name:"LongTrianglePointIndexList",vm:"3-3n",version:"DICOM"},"(0066,0042)":{tag:"(0066,0042)",vr:"UL",name:"LongEdgePointIndexList",vm:"2-2n",version:"DICOM"},"(0066,0043)":{tag:"(0066,0043)",vr:"UL",name:"LongVertexPointIndexList",vm:"1-n",version:"DICOM"},"(0066,0101)":{tag:"(0066,0101)",vr:"SQ",name:"TrackSetSequence",vm:"1",version:"DICOM"},"(0066,0102)":{tag:"(0066,0102)",vr:"SQ",name:"TrackSequence",vm:"1",version:"DICOM"},"(0066,0103)":{tag:"(0066,0103)",vr:"OW",name:"RecommendedDisplayCIELabValueList",vm:"1",version:"DICOM"},"(0066,0104)":{tag:"(0066,0104)",vr:"SQ",name:"TrackingAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0066,0105)":{tag:"(0066,0105)",vr:"UL",name:"TrackSetNumber",vm:"1",version:"DICOM"},"(0066,0106)":{tag:"(0066,0106)",vr:"LO",name:"TrackSetLabel",vm:"1",version:"DICOM"},"(0066,0107)":{tag:"(0066,0107)",vr:"UT",name:"TrackSetDescription",vm:"1",version:"DICOM"},"(0066,0108)":{tag:"(0066,0108)",vr:"SQ",name:"TrackSetAnatomicalTypeCodeSequence",vm:"1",version:"DICOM"},"(0066,0121)":{tag:"(0066,0121)",vr:"SQ",name:"MeasurementsSequence",vm:"1",version:"DICOM"},"(0066,0124)":{tag:"(0066,0124)",vr:"SQ",name:"TrackSetStatisticsSequence",vm:"1",version:"DICOM"},"(0066,0125)":{tag:"(0066,0125)",vr:"OF",name:"FloatingPointValues",vm:"1",version:"DICOM"},"(0066,0129)":{tag:"(0066,0129)",vr:"OL",name:"TrackPointIndexList",vm:"1",version:"DICOM"},"(0066,0130)":{tag:"(0066,0130)",vr:"SQ",name:"TrackStatisticsSequence",vm:"1",version:"DICOM"},"(0066,0132)":{tag:"(0066,0132)",vr:"SQ",name:"MeasurementValuesSequence",vm:"1",version:"DICOM"},"(0066,0133)":{tag:"(0066,0133)",vr:"SQ",name:"DiffusionAcquisitionCodeSequence",vm:"1",version:"DICOM"},"(0066,0134)":{tag:"(0066,0134)",vr:"SQ",name:"DiffusionModelCodeSequence",vm:"1",version:"DICOM"},"(0068,6210)":{tag:"(0068,6210)",vr:"LO",name:"ImplantSize",vm:"1",version:"DICOM"},"(0068,6221)":{tag:"(0068,6221)",vr:"LO",name:"ImplantTemplateVersion",vm:"1",version:"DICOM"},"(0068,6222)":{tag:"(0068,6222)",vr:"SQ",name:"ReplacedImplantTemplateSequence",vm:"1",version:"DICOM"},"(0068,6223)":{tag:"(0068,6223)",vr:"CS",name:"ImplantType",vm:"1",version:"DICOM"},"(0068,6224)":{tag:"(0068,6224)",vr:"SQ",name:"DerivationImplantTemplateSequence",vm:"1",version:"DICOM"},"(0068,6225)":{tag:"(0068,6225)",vr:"SQ",name:"OriginalImplantTemplateSequence",vm:"1",version:"DICOM"},"(0068,6226)":{tag:"(0068,6226)",vr:"DT",name:"EffectiveDateTime",vm:"1",version:"DICOM"},"(0068,6230)":{tag:"(0068,6230)",vr:"SQ",name:"ImplantTargetAnatomySequence",vm:"1",version:"DICOM"},"(0068,6260)":{tag:"(0068,6260)",vr:"SQ",name:"InformationFromManufacturerSequence",vm:"1",version:"DICOM"},"(0068,6265)":{tag:"(0068,6265)",vr:"SQ",name:"NotificationFromManufacturerSequence",vm:"1",version:"DICOM"},"(0068,6270)":{tag:"(0068,6270)",vr:"DT",name:"InformationIssueDateTime",vm:"1",version:"DICOM"},"(0068,6280)":{tag:"(0068,6280)",vr:"ST",name:"InformationSummary",vm:"1",version:"DICOM"},"(0068,62A0)":{tag:"(0068,62A0)",vr:"SQ",name:"ImplantRegulatoryDisapprovalCodeSequence",vm:"1",version:"DICOM"},"(0068,62A5)":{tag:"(0068,62A5)",vr:"FD",name:"OverallTemplateSpatialTolerance",vm:"1",version:"DICOM"},"(0068,62C0)":{tag:"(0068,62C0)",vr:"SQ",name:"HPGLDocumentSequence",vm:"1",version:"DICOM"},"(0068,62D0)":{tag:"(0068,62D0)",vr:"US",name:"HPGLDocumentID",vm:"1",version:"DICOM"},"(0068,62D5)":{tag:"(0068,62D5)",vr:"LO",name:"HPGLDocumentLabel",vm:"1",version:"DICOM"},"(0068,62E0)":{tag:"(0068,62E0)",vr:"SQ",name:"ViewOrientationCodeSequence",vm:"1",version:"DICOM"},"(0068,62F0)":{tag:"(0068,62F0)",vr:"FD",name:"ViewOrientationModifier",vm:"9",version:"DICOM"},"(0068,62F2)":{tag:"(0068,62F2)",vr:"FD",name:"HPGLDocumentScaling",vm:"1",version:"DICOM"},"(0068,6300)":{tag:"(0068,6300)",vr:"OB",name:"HPGLDocument",vm:"1",version:"DICOM"},"(0068,6310)":{tag:"(0068,6310)",vr:"US",name:"HPGLContourPenNumber",vm:"1",version:"DICOM"},"(0068,6320)":{tag:"(0068,6320)",vr:"SQ",name:"HPGLPenSequence",vm:"1",version:"DICOM"},"(0068,6330)":{tag:"(0068,6330)",vr:"US",name:"HPGLPenNumber",vm:"1",version:"DICOM"},"(0068,6340)":{tag:"(0068,6340)",vr:"LO",name:"HPGLPenLabel",vm:"1",version:"DICOM"},"(0068,6345)":{tag:"(0068,6345)",vr:"ST",name:"HPGLPenDescription",vm:"1",version:"DICOM"},"(0068,6346)":{tag:"(0068,6346)",vr:"FD",name:"RecommendedRotationPoint",vm:"2",version:"DICOM"},"(0068,6347)":{tag:"(0068,6347)",vr:"FD",name:"BoundingRectangle",vm:"4",version:"DICOM"},"(0068,6350)":{tag:"(0068,6350)",vr:"US",name:"ImplantTemplate3DModelSurfaceNumber",vm:"1-n",version:"DICOM"},"(0068,6360)":{tag:"(0068,6360)",vr:"SQ",name:"SurfaceModelDescriptionSequence",vm:"1",version:"DICOM"},"(0068,6380)":{tag:"(0068,6380)",vr:"LO",name:"SurfaceModelLabel",vm:"1",version:"DICOM"},"(0068,6390)":{tag:"(0068,6390)",vr:"FD",name:"SurfaceModelScalingFactor",vm:"1",version:"DICOM"},"(0068,63A0)":{tag:"(0068,63A0)",vr:"SQ",name:"MaterialsCodeSequence",vm:"1",version:"DICOM"},"(0068,63A4)":{tag:"(0068,63A4)",vr:"SQ",name:"CoatingMaterialsCodeSequence",vm:"1",version:"DICOM"},"(0068,63A8)":{tag:"(0068,63A8)",vr:"SQ",name:"ImplantTypeCodeSequence",vm:"1",version:"DICOM"},"(0068,63AC)":{tag:"(0068,63AC)",vr:"SQ",name:"FixationMethodCodeSequence",vm:"1",version:"DICOM"},"(0068,63B0)":{tag:"(0068,63B0)",vr:"SQ",name:"MatingFeatureSetsSequence",vm:"1",version:"DICOM"},"(0068,63C0)":{tag:"(0068,63C0)",vr:"US",name:"MatingFeatureSetID",vm:"1",version:"DICOM"},"(0068,63D0)":{tag:"(0068,63D0)",vr:"LO",name:"MatingFeatureSetLabel",vm:"1",version:"DICOM"},"(0068,63E0)":{tag:"(0068,63E0)",vr:"SQ",name:"MatingFeatureSequence",vm:"1",version:"DICOM"},"(0068,63F0)":{tag:"(0068,63F0)",vr:"US",name:"MatingFeatureID",vm:"1",version:"DICOM"},"(0068,6400)":{tag:"(0068,6400)",vr:"SQ",name:"MatingFeatureDegreeOfFreedomSequence",vm:"1",version:"DICOM"},"(0068,6410)":{tag:"(0068,6410)",vr:"US",name:"DegreeOfFreedomID",vm:"1",version:"DICOM"},"(0068,6420)":{tag:"(0068,6420)",vr:"CS",name:"DegreeOfFreedomType",vm:"1",version:"DICOM"},"(0068,6430)":{tag:"(0068,6430)",vr:"SQ",name:"TwoDMatingFeatureCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,6440)":{tag:"(0068,6440)",vr:"US",name:"ReferencedHPGLDocumentID",vm:"1",version:"DICOM"},"(0068,6450)":{tag:"(0068,6450)",vr:"FD",name:"TwoDMatingPoint",vm:"2",version:"DICOM"},"(0068,6460)":{tag:"(0068,6460)",vr:"FD",name:"TwoDMatingAxes",vm:"4",version:"DICOM"},"(0068,6470)":{tag:"(0068,6470)",vr:"SQ",name:"TwoDDegreeOfFreedomSequence",vm:"1",version:"DICOM"},"(0068,6490)":{tag:"(0068,6490)",vr:"FD",name:"ThreeDDegreeOfFreedomAxis",vm:"3",version:"DICOM"},"(0068,64A0)":{tag:"(0068,64A0)",vr:"FD",name:"RangeOfFreedom",vm:"2",version:"DICOM"},"(0068,64C0)":{tag:"(0068,64C0)",vr:"FD",name:"ThreeDMatingPoint",vm:"3",version:"DICOM"},"(0068,64D0)":{tag:"(0068,64D0)",vr:"FD",name:"ThreeDMatingAxes",vm:"9",version:"DICOM"},"(0068,64F0)":{tag:"(0068,64F0)",vr:"FD",name:"TwoDDegreeOfFreedomAxis",vm:"3",version:"DICOM"},"(0068,6500)":{tag:"(0068,6500)",vr:"SQ",name:"PlanningLandmarkPointSequence",vm:"1",version:"DICOM"},"(0068,6510)":{tag:"(0068,6510)",vr:"SQ",name:"PlanningLandmarkLineSequence",vm:"1",version:"DICOM"},"(0068,6520)":{tag:"(0068,6520)",vr:"SQ",name:"PlanningLandmarkPlaneSequence",vm:"1",version:"DICOM"},"(0068,6530)":{tag:"(0068,6530)",vr:"US",name:"PlanningLandmarkID",vm:"1",version:"DICOM"},"(0068,6540)":{tag:"(0068,6540)",vr:"LO",name:"PlanningLandmarkDescription",vm:"1",version:"DICOM"},"(0068,6545)":{tag:"(0068,6545)",vr:"SQ",name:"PlanningLandmarkIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0068,6550)":{tag:"(0068,6550)",vr:"SQ",name:"TwoDPointCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,6560)":{tag:"(0068,6560)",vr:"FD",name:"TwoDPointCoordinates",vm:"2",version:"DICOM"},"(0068,6590)":{tag:"(0068,6590)",vr:"FD",name:"ThreeDPointCoordinates",vm:"3",version:"DICOM"},"(0068,65A0)":{tag:"(0068,65A0)",vr:"SQ",name:"TwoDLineCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,65B0)":{tag:"(0068,65B0)",vr:"FD",name:"TwoDLineCoordinates",vm:"4",version:"DICOM"},"(0068,65D0)":{tag:"(0068,65D0)",vr:"FD",name:"ThreeDLineCoordinates",vm:"6",version:"DICOM"},"(0068,65E0)":{tag:"(0068,65E0)",vr:"SQ",name:"TwoDPlaneCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,65F0)":{tag:"(0068,65F0)",vr:"FD",name:"TwoDPlaneIntersection",vm:"4",version:"DICOM"},"(0068,6610)":{tag:"(0068,6610)",vr:"FD",name:"ThreeDPlaneOrigin",vm:"3",version:"DICOM"},"(0068,6620)":{tag:"(0068,6620)",vr:"FD",name:"ThreeDPlaneNormal",vm:"3",version:"DICOM"},"(0068,7001)":{tag:"(0068,7001)",vr:"CS",name:"ModelModification",vm:"1",version:"DICOM"},"(0068,7002)":{tag:"(0068,7002)",vr:"CS",name:"ModelMirroring",vm:"1",version:"DICOM"},"(0068,7003)":{tag:"(0068,7003)",vr:"SQ",name:"ModelUsageCodeSequence",vm:"1",version:"DICOM"},"(0068,7004)":{tag:"(0068,7004)",vr:"UI",name:"ModelGroupUID",vm:"1",version:"DICOM"},"(0068,7005)":{tag:"(0068,7005)",vr:"UR",name:"RelativeURIReferenceWithinEncapsulatedDocument",vm:"1",version:"DICOM"},"(0070,0001)":{tag:"(0070,0001)",vr:"SQ",name:"GraphicAnnotationSequence",vm:"1",version:"DICOM"},"(0070,0002)":{tag:"(0070,0002)",vr:"CS",name:"GraphicLayer",vm:"1",version:"DICOM"},"(0070,0003)":{tag:"(0070,0003)",vr:"CS",name:"BoundingBoxAnnotationUnits",vm:"1",version:"DICOM"},"(0070,0004)":{tag:"(0070,0004)",vr:"CS",name:"AnchorPointAnnotationUnits",vm:"1",version:"DICOM"},"(0070,0005)":{tag:"(0070,0005)",vr:"CS",name:"GraphicAnnotationUnits",vm:"1",version:"DICOM"},"(0070,0006)":{tag:"(0070,0006)",vr:"ST",name:"UnformattedTextValue",vm:"1",version:"DICOM"},"(0070,0008)":{tag:"(0070,0008)",vr:"SQ",name:"TextObjectSequence",vm:"1",version:"DICOM"},"(0070,0009)":{tag:"(0070,0009)",vr:"SQ",name:"GraphicObjectSequence",vm:"1",version:"DICOM"},"(0070,0010)":{tag:"(0070,0010)",vr:"FL",name:"BoundingBoxTopLeftHandCorner",vm:"2",version:"DICOM"},"(0070,0011)":{tag:"(0070,0011)",vr:"FL",name:"BoundingBoxBottomRightHandCorner",vm:"2",version:"DICOM"},"(0070,0012)":{tag:"(0070,0012)",vr:"CS",name:"BoundingBoxTextHorizontalJustification",vm:"1",version:"DICOM"},"(0070,0014)":{tag:"(0070,0014)",vr:"FL",name:"AnchorPoint",vm:"2",version:"DICOM"},"(0070,0015)":{tag:"(0070,0015)",vr:"CS",name:"AnchorPointVisibility",vm:"1",version:"DICOM"},"(0070,0020)":{tag:"(0070,0020)",vr:"US",name:"GraphicDimensions",vm:"1",version:"DICOM"},"(0070,0021)":{tag:"(0070,0021)",vr:"US",name:"NumberOfGraphicPoints",vm:"1",version:"DICOM"},"(0070,0022)":{tag:"(0070,0022)",vr:"FL",name:"GraphicData",vm:"2-n",version:"DICOM"},"(0070,0023)":{tag:"(0070,0023)",vr:"CS",name:"GraphicType",vm:"1",version:"DICOM"},"(0070,0024)":{tag:"(0070,0024)",vr:"CS",name:"GraphicFilled",vm:"1",version:"DICOM"},"(0070,0041)":{tag:"(0070,0041)",vr:"CS",name:"ImageHorizontalFlip",vm:"1",version:"DICOM"},"(0070,0042)":{tag:"(0070,0042)",vr:"US",name:"ImageRotation",vm:"1",version:"DICOM"},"(0070,0052)":{tag:"(0070,0052)",vr:"SL",name:"DisplayedAreaTopLeftHandCorner",vm:"2",version:"DICOM"},"(0070,0053)":{tag:"(0070,0053)",vr:"SL",name:"DisplayedAreaBottomRightHandCorner",vm:"2",version:"DICOM"},"(0070,005A)":{tag:"(0070,005A)",vr:"SQ",name:"DisplayedAreaSelectionSequence",vm:"1",version:"DICOM"},"(0070,0060)":{tag:"(0070,0060)",vr:"SQ",name:"GraphicLayerSequence",vm:"1",version:"DICOM"},"(0070,0062)":{tag:"(0070,0062)",vr:"IS",name:"GraphicLayerOrder",vm:"1",version:"DICOM"},"(0070,0066)":{tag:"(0070,0066)",vr:"US",name:"GraphicLayerRecommendedDisplayGrayscaleValue",vm:"1",version:"DICOM"},"(0070,0068)":{tag:"(0070,0068)",vr:"LO",name:"GraphicLayerDescription",vm:"1",version:"DICOM"},"(0070,0080)":{tag:"(0070,0080)",vr:"CS",name:"ContentLabel",vm:"1",version:"DICOM"},"(0070,0081)":{tag:"(0070,0081)",vr:"LO",name:"ContentDescription",vm:"1",version:"DICOM"},"(0070,0082)":{tag:"(0070,0082)",vr:"DA",name:"PresentationCreationDate",vm:"1",version:"DICOM"},"(0070,0083)":{tag:"(0070,0083)",vr:"TM",name:"PresentationCreationTime",vm:"1",version:"DICOM"},"(0070,0084)":{tag:"(0070,0084)",vr:"PN",name:"ContentCreatorName",vm:"1",version:"DICOM"},"(0070,0086)":{tag:"(0070,0086)",vr:"SQ",name:"ContentCreatorIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0070,0087)":{tag:"(0070,0087)",vr:"SQ",name:"AlternateContentDescriptionSequence",vm:"1",version:"DICOM"},"(0070,0100)":{tag:"(0070,0100)",vr:"CS",name:"PresentationSizeMode",vm:"1",version:"DICOM"},"(0070,0101)":{tag:"(0070,0101)",vr:"DS",name:"PresentationPixelSpacing",vm:"2",version:"DICOM"},"(0070,0102)":{tag:"(0070,0102)",vr:"IS",name:"PresentationPixelAspectRatio",vm:"2",version:"DICOM"},"(0070,0103)":{tag:"(0070,0103)",vr:"FL",name:"PresentationPixelMagnificationRatio",vm:"1",version:"DICOM"},"(0070,0207)":{tag:"(0070,0207)",vr:"LO",name:"GraphicGroupLabel",vm:"1",version:"DICOM"},"(0070,0208)":{tag:"(0070,0208)",vr:"ST",name:"GraphicGroupDescription",vm:"1",version:"DICOM"},"(0070,0209)":{tag:"(0070,0209)",vr:"SQ",name:"CompoundGraphicSequence",vm:"1",version:"DICOM"},"(0070,0226)":{tag:"(0070,0226)",vr:"UL",name:"CompoundGraphicInstanceID",vm:"1",version:"DICOM"},"(0070,0227)":{tag:"(0070,0227)",vr:"LO",name:"FontName",vm:"1",version:"DICOM"},"(0070,0228)":{tag:"(0070,0228)",vr:"CS",name:"FontNameType",vm:"1",version:"DICOM"},"(0070,0229)":{tag:"(0070,0229)",vr:"LO",name:"CSSFontName",vm:"1",version:"DICOM"},"(0070,0230)":{tag:"(0070,0230)",vr:"FD",name:"RotationAngle",vm:"1",version:"DICOM"},"(0070,0231)":{tag:"(0070,0231)",vr:"SQ",name:"TextStyleSequence",vm:"1",version:"DICOM"},"(0070,0232)":{tag:"(0070,0232)",vr:"SQ",name:"LineStyleSequence",vm:"1",version:"DICOM"},"(0070,0233)":{tag:"(0070,0233)",vr:"SQ",name:"FillStyleSequence",vm:"1",version:"DICOM"},"(0070,0234)":{tag:"(0070,0234)",vr:"SQ",name:"GraphicGroupSequence",vm:"1",version:"DICOM"},"(0070,0241)":{tag:"(0070,0241)",vr:"US",name:"TextColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0242)":{tag:"(0070,0242)",vr:"CS",name:"HorizontalAlignment",vm:"1",version:"DICOM"},"(0070,0243)":{tag:"(0070,0243)",vr:"CS",name:"VerticalAlignment",vm:"1",version:"DICOM"},"(0070,0244)":{tag:"(0070,0244)",vr:"CS",name:"ShadowStyle",vm:"1",version:"DICOM"},"(0070,0245)":{tag:"(0070,0245)",vr:"FL",name:"ShadowOffsetX",vm:"1",version:"DICOM"},"(0070,0246)":{tag:"(0070,0246)",vr:"FL",name:"ShadowOffsetY",vm:"1",version:"DICOM"},"(0070,0247)":{tag:"(0070,0247)",vr:"US",name:"ShadowColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0248)":{tag:"(0070,0248)",vr:"CS",name:"Underlined",vm:"1",version:"DICOM"},"(0070,0249)":{tag:"(0070,0249)",vr:"CS",name:"Bold",vm:"1",version:"DICOM"},"(0070,0250)":{tag:"(0070,0250)",vr:"CS",name:"Italic",vm:"1",version:"DICOM"},"(0070,0251)":{tag:"(0070,0251)",vr:"US",name:"PatternOnColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0252)":{tag:"(0070,0252)",vr:"US",name:"PatternOffColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0253)":{tag:"(0070,0253)",vr:"FL",name:"LineThickness",vm:"1",version:"DICOM"},"(0070,0254)":{tag:"(0070,0254)",vr:"CS",name:"LineDashingStyle",vm:"1",version:"DICOM"},"(0070,0255)":{tag:"(0070,0255)",vr:"UL",name:"LinePattern",vm:"1",version:"DICOM"},"(0070,0256)":{tag:"(0070,0256)",vr:"OB",name:"FillPattern",vm:"1",version:"DICOM"},"(0070,0257)":{tag:"(0070,0257)",vr:"CS",name:"FillMode",vm:"1",version:"DICOM"},"(0070,0258)":{tag:"(0070,0258)",vr:"FL",name:"ShadowOpacity",vm:"1",version:"DICOM"},"(0070,0261)":{tag:"(0070,0261)",vr:"FL",name:"GapLength",vm:"1",version:"DICOM"},"(0070,0262)":{tag:"(0070,0262)",vr:"FL",name:"DiameterOfVisibility",vm:"1",version:"DICOM"},"(0070,0273)":{tag:"(0070,0273)",vr:"FL",name:"RotationPoint",vm:"2",version:"DICOM"},"(0070,0274)":{tag:"(0070,0274)",vr:"CS",name:"TickAlignment",vm:"1",version:"DICOM"},"(0070,0278)":{tag:"(0070,0278)",vr:"CS",name:"ShowTickLabel",vm:"1",version:"DICOM"},"(0070,0279)":{tag:"(0070,0279)",vr:"CS",name:"TickLabelAlignment",vm:"1",version:"DICOM"},"(0070,0282)":{tag:"(0070,0282)",vr:"CS",name:"CompoundGraphicUnits",vm:"1",version:"DICOM"},"(0070,0284)":{tag:"(0070,0284)",vr:"FL",name:"PatternOnOpacity",vm:"1",version:"DICOM"},"(0070,0285)":{tag:"(0070,0285)",vr:"FL",name:"PatternOffOpacity",vm:"1",version:"DICOM"},"(0070,0287)":{tag:"(0070,0287)",vr:"SQ",name:"MajorTicksSequence",vm:"1",version:"DICOM"},"(0070,0288)":{tag:"(0070,0288)",vr:"FL",name:"TickPosition",vm:"1",version:"DICOM"},"(0070,0289)":{tag:"(0070,0289)",vr:"SH",name:"TickLabel",vm:"1",version:"DICOM"},"(0070,0294)":{tag:"(0070,0294)",vr:"CS",name:"CompoundGraphicType",vm:"1",version:"DICOM"},"(0070,0295)":{tag:"(0070,0295)",vr:"UL",name:"GraphicGroupID",vm:"1",version:"DICOM"},"(0070,0306)":{tag:"(0070,0306)",vr:"CS",name:"ShapeType",vm:"1",version:"DICOM"},"(0070,0308)":{tag:"(0070,0308)",vr:"SQ",name:"RegistrationSequence",vm:"1",version:"DICOM"},"(0070,0309)":{tag:"(0070,0309)",vr:"SQ",name:"MatrixRegistrationSequence",vm:"1",version:"DICOM"},"(0070,030A)":{tag:"(0070,030A)",vr:"SQ",name:"MatrixSequence",vm:"1",version:"DICOM"},"(0070,030B)":{tag:"(0070,030B)",vr:"FD",name:"FrameOfReferenceToDisplayedCoordinateSystemTransformationMatrix",vm:"16",version:"DICOM"},"(0070,030C)":{tag:"(0070,030C)",vr:"CS",name:"FrameOfReferenceTransformationMatrixType",vm:"1",version:"DICOM"},"(0070,030D)":{tag:"(0070,030D)",vr:"SQ",name:"RegistrationTypeCodeSequence",vm:"1",version:"DICOM"},"(0070,030F)":{tag:"(0070,030F)",vr:"ST",name:"FiducialDescription",vm:"1",version:"DICOM"},"(0070,0310)":{tag:"(0070,0310)",vr:"SH",name:"FiducialIdentifier",vm:"1",version:"DICOM"},"(0070,0311)":{tag:"(0070,0311)",vr:"SQ",name:"FiducialIdentifierCodeSequence",vm:"1",version:"DICOM"},"(0070,0312)":{tag:"(0070,0312)",vr:"FD",name:"ContourUncertaintyRadius",vm:"1",version:"DICOM"},"(0070,0314)":{tag:"(0070,0314)",vr:"SQ",name:"UsedFiducialsSequence",vm:"1",version:"DICOM"},"(0070,0318)":{tag:"(0070,0318)",vr:"SQ",name:"GraphicCoordinatesDataSequence",vm:"1",version:"DICOM"},"(0070,031A)":{tag:"(0070,031A)",vr:"UI",name:"FiducialUID",vm:"1",version:"DICOM"},"(0070,031B)":{tag:"(0070,031B)",vr:"UI",name:"ReferencedFiducialUID",vm:"1",version:"DICOM"},"(0070,031C)":{tag:"(0070,031C)",vr:"SQ",name:"FiducialSetSequence",vm:"1",version:"DICOM"},"(0070,031E)":{tag:"(0070,031E)",vr:"SQ",name:"FiducialSequence",vm:"1",version:"DICOM"},"(0070,031F)":{tag:"(0070,031F)",vr:"SQ",name:"FiducialsPropertyCategoryCodeSequence",vm:"1",version:"DICOM"},"(0070,0401)":{tag:"(0070,0401)",vr:"US",name:"GraphicLayerRecommendedDisplayCIELabValue",vm:"3",version:"DICOM"},"(0070,0402)":{tag:"(0070,0402)",vr:"SQ",name:"BlendingSequence",vm:"1",version:"DICOM"},"(0070,0403)":{tag:"(0070,0403)",vr:"FL",name:"RelativeOpacity",vm:"1",version:"DICOM"},"(0070,0404)":{tag:"(0070,0404)",vr:"SQ",name:"ReferencedSpatialRegistrationSequence",vm:"1",version:"DICOM"},"(0070,0405)":{tag:"(0070,0405)",vr:"CS",name:"BlendingPosition",vm:"1",version:"DICOM"},"(0070,1209)":{tag:"(0070,1209)",vr:"UI",name:"VolumetricPresentationInputSetUID",vm:"1",version:"DICOM"},"(0070,120A)":{tag:"(0070,120A)",vr:"SQ",name:"VolumetricPresentationInputSetSequence",vm:"1",version:"DICOM"},"(0070,120B)":{tag:"(0070,120B)",vr:"CS",name:"GlobalCrop",vm:"1",version:"DICOM"},"(0070,120C)":{tag:"(0070,120C)",vr:"US",name:"GlobalCroppingSpecificationIndex",vm:"1-n",version:"DICOM"},"(0070,120D)":{tag:"(0070,120D)",vr:"CS",name:"RenderingMethod",vm:"1",version:"DICOM"},"(0070,1602)":{tag:"(0070,1602)",vr:"CS",name:"RenderProjection",vm:"1",version:"DICOM"},"(0070,1603)":{tag:"(0070,1603)",vr:"FD",name:"ViewpointPosition",vm:"3",version:"DICOM"},"(0070,1604)":{tag:"(0070,1604)",vr:"FD",name:"ViewpointLookAtPoint",vm:"3",version:"DICOM"},"(0070,1605)":{tag:"(0070,1605)",vr:"FD",name:"ViewpointUpDirection",vm:"3",version:"DICOM"},"(0070,1606)":{tag:"(0070,1606)",vr:"FD",name:"RenderFieldOfView",vm:"6",version:"DICOM"},"(0070,1607)":{tag:"(0070,1607)",vr:"FD",name:"SamplingStepSize",vm:"1",version:"DICOM"},"(0070,1701)":{tag:"(0070,1701)",vr:"CS",name:"ShadingStyle",vm:"1",version:"DICOM"},"(0070,1702)":{tag:"(0070,1702)",vr:"FD",name:"AmbientReflectionIntensity",vm:"1",version:"DICOM"},"(0070,1703)":{tag:"(0070,1703)",vr:"FD",name:"LightDirection",vm:"3",version:"DICOM"},"(0070,1704)":{tag:"(0070,1704)",vr:"FD",name:"DiffuseReflectionIntensity",vm:"1",version:"DICOM"},"(0070,1705)":{tag:"(0070,1705)",vr:"FD",name:"SpecularReflectionIntensity",vm:"1",version:"DICOM"},"(0070,1706)":{tag:"(0070,1706)",vr:"FD",name:"Shininess",vm:"1",version:"DICOM"},"(0070,1A06)":{tag:"(0070,1A06)",vr:"FD",name:"SwivelRange",vm:"1",version:"DICOM"},"(0070,1A07)":{tag:"(0070,1A07)",vr:"OD",name:"VolumetricCurveUpDirections",vm:"1",version:"DICOM"},"(0070,1A08)":{tag:"(0070,1A08)",vr:"SQ",name:"VolumeStreamSequence",vm:"1",version:"DICOM"},"(0070,1A09)":{tag:"(0070,1A09)",vr:"LO",name:"RGBATransferFunctionDescription",vm:"1",version:"DICOM"},"(0070,1B01)":{tag:"(0070,1B01)",vr:"SQ",name:"AdvancedBlendingSequence",vm:"1",version:"DICOM"},"(0070,1B02)":{tag:"(0070,1B02)",vr:"US",name:"BlendingInputNumber",vm:"1",version:"DICOM"},"(0070,1B03)":{tag:"(0070,1B03)",vr:"SQ",name:"BlendingDisplayInputSequence",vm:"1",version:"DICOM"},"(0070,1B04)":{tag:"(0070,1B04)",vr:"SQ",name:"BlendingDisplaySequence",vm:"1",version:"DICOM"},"(0070,1B06)":{tag:"(0070,1B06)",vr:"CS",name:"BlendingMode",vm:"1",version:"DICOM"},"(0070,1B07)":{tag:"(0070,1B07)",vr:"CS",name:"TimeSeriesBlending",vm:"1",version:"DICOM"},"(0070,1B08)":{tag:"(0070,1B08)",vr:"CS",name:"GeometryForDisplay",vm:"1",version:"DICOM"},"(0070,1B11)":{tag:"(0070,1B11)",vr:"SQ",name:"ThresholdSequence",vm:"1",version:"DICOM"},"(0070,1B12)":{tag:"(0070,1B12)",vr:"SQ",name:"ThresholdValueSequence",vm:"1",version:"DICOM"},"(0070,1B13)":{tag:"(0070,1B13)",vr:"CS",name:"ThresholdType",vm:"1",version:"DICOM"},"(0070,1B14)":{tag:"(0070,1B14)",vr:"FD",name:"ThresholdValue",vm:"1",version:"DICOM"},"(0072,0002)":{tag:"(0072,0002)",vr:"SH",name:"HangingProtocolName",vm:"1",version:"DICOM"},"(0072,0004)":{tag:"(0072,0004)",vr:"LO",name:"HangingProtocolDescription",vm:"1",version:"DICOM"},"(0072,0006)":{tag:"(0072,0006)",vr:"CS",name:"HangingProtocolLevel",vm:"1",version:"DICOM"},"(0072,0008)":{tag:"(0072,0008)",vr:"LO",name:"HangingProtocolCreator",vm:"1",version:"DICOM"},"(0072,000A)":{tag:"(0072,000A)",vr:"DT",name:"HangingProtocolCreationDateTime",vm:"1",version:"DICOM"},"(0072,000C)":{tag:"(0072,000C)",vr:"SQ",name:"HangingProtocolDefinitionSequence",vm:"1",version:"DICOM"},"(0072,000E)":{tag:"(0072,000E)",vr:"SQ",name:"HangingProtocolUserIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0072,0010)":{tag:"(0072,0010)",vr:"LO",name:"HangingProtocolUserGroupName",vm:"1",version:"DICOM"},"(0072,0012)":{tag:"(0072,0012)",vr:"SQ",name:"SourceHangingProtocolSequence",vm:"1",version:"DICOM"},"(0072,0014)":{tag:"(0072,0014)",vr:"US",name:"NumberOfPriorsReferenced",vm:"1",version:"DICOM"},"(0072,0020)":{tag:"(0072,0020)",vr:"SQ",name:"ImageSetsSequence",vm:"1",version:"DICOM"},"(0072,0022)":{tag:"(0072,0022)",vr:"SQ",name:"ImageSetSelectorSequence",vm:"1",version:"DICOM"},"(0072,0024)":{tag:"(0072,0024)",vr:"CS",name:"ImageSetSelectorUsageFlag",vm:"1",version:"DICOM"},"(0072,0026)":{tag:"(0072,0026)",vr:"AT",name:"SelectorAttribute",vm:"1",version:"DICOM"},"(0072,0028)":{tag:"(0072,0028)",vr:"US",name:"SelectorValueNumber",vm:"1",version:"DICOM"},"(0072,0030)":{tag:"(0072,0030)",vr:"SQ",name:"TimeBasedImageSetsSequence",vm:"1",version:"DICOM"},"(0072,0032)":{tag:"(0072,0032)",vr:"US",name:"ImageSetNumber",vm:"1",version:"DICOM"},"(0072,0034)":{tag:"(0072,0034)",vr:"CS",name:"ImageSetSelectorCategory",vm:"1",version:"DICOM"},"(0072,0038)":{tag:"(0072,0038)",vr:"US",name:"RelativeTime",vm:"2",version:"DICOM"},"(0072,003A)":{tag:"(0072,003A)",vr:"CS",name:"RelativeTimeUnits",vm:"1",version:"DICOM"},"(0072,003C)":{tag:"(0072,003C)",vr:"SS",name:"AbstractPriorValue",vm:"2",version:"DICOM"},"(0072,003E)":{tag:"(0072,003E)",vr:"SQ",name:"AbstractPriorCodeSequence",vm:"1",version:"DICOM"},"(0072,0040)":{tag:"(0072,0040)",vr:"LO",name:"ImageSetLabel",vm:"1",version:"DICOM"},"(0072,0050)":{tag:"(0072,0050)",vr:"CS",name:"SelectorAttributeVR",vm:"1",version:"DICOM"},"(0072,0052)":{tag:"(0072,0052)",vr:"AT",name:"SelectorSequencePointer",vm:"1-n",version:"DICOM"},"(0072,0054)":{tag:"(0072,0054)",vr:"LO",name:"SelectorSequencePointerPrivateCreator",vm:"1-n",version:"DICOM"},"(0072,0056)":{tag:"(0072,0056)",vr:"LO",name:"SelectorAttributePrivateCreator",vm:"1",version:"DICOM"},"(0072,005E)":{tag:"(0072,005E)",vr:"AE",name:"SelectorAEValue",vm:"1-n",version:"DICOM"},"(0072,005F)":{tag:"(0072,005F)",vr:"AS",name:"SelectorASValue",vm:"1-n",version:"DICOM"},"(0072,0060)":{tag:"(0072,0060)",vr:"AT",name:"SelectorATValue",vm:"1-n",version:"DICOM"},"(0072,0061)":{tag:"(0072,0061)",vr:"DA",name:"SelectorDAValue",vm:"1-n",version:"DICOM"},"(0072,0062)":{tag:"(0072,0062)",vr:"CS",name:"SelectorCSValue",vm:"1-n",version:"DICOM"},"(0072,0063)":{tag:"(0072,0063)",vr:"DT",name:"SelectorDTValue",vm:"1-n",version:"DICOM"},"(0072,0064)":{tag:"(0072,0064)",vr:"IS",name:"SelectorISValue",vm:"1-n",version:"DICOM"},"(0072,0065)":{tag:"(0072,0065)",vr:"OB",name:"SelectorOBValue",vm:"1",version:"DICOM"},"(0072,0066)":{tag:"(0072,0066)",vr:"LO",name:"SelectorLOValue",vm:"1-n",version:"DICOM"},"(0072,0067)":{tag:"(0072,0067)",vr:"OF",name:"SelectorOFValue",vm:"1",version:"DICOM"},"(0072,0068)":{tag:"(0072,0068)",vr:"LT",name:"SelectorLTValue",vm:"1",version:"DICOM"},"(0072,0069)":{tag:"(0072,0069)",vr:"OW",name:"SelectorOWValue",vm:"1",version:"DICOM"},"(0072,006A)":{tag:"(0072,006A)",vr:"PN",name:"SelectorPNValue",vm:"1-n",version:"DICOM"},"(0072,006B)":{tag:"(0072,006B)",vr:"TM",name:"SelectorTMValue",vm:"1-n",version:"DICOM"},"(0072,006C)":{tag:"(0072,006C)",vr:"SH",name:"SelectorSHValue",vm:"1-n",version:"DICOM"},"(0072,006D)":{tag:"(0072,006D)",vr:"UN",name:"SelectorUNValue",vm:"1",version:"DICOM"},"(0072,006E)":{tag:"(0072,006E)",vr:"ST",name:"SelectorSTValue",vm:"1",version:"DICOM"},"(0072,006F)":{tag:"(0072,006F)",vr:"UC",name:"SelectorUCValue",vm:"1-n",version:"DICOM"},"(0072,0070)":{tag:"(0072,0070)",vr:"UT",name:"SelectorUTValue",vm:"1",version:"DICOM"},"(0072,0071)":{tag:"(0072,0071)",vr:"UR",name:"SelectorURValue",vm:"1",version:"DICOM"},"(0072,0072)":{tag:"(0072,0072)",vr:"DS",name:"SelectorDSValue",vm:"1-n",version:"DICOM"},"(0072,0073)":{tag:"(0072,0073)",vr:"OD",name:"SelectorODValue",vm:"1",version:"DICOM"},"(0072,0074)":{tag:"(0072,0074)",vr:"FD",name:"SelectorFDValue",vm:"1-n",version:"DICOM"},"(0072,0075)":{tag:"(0072,0075)",vr:"OL",name:"SelectorOLValue",vm:"1",version:"DICOM"},"(0072,0076)":{tag:"(0072,0076)",vr:"FL",name:"SelectorFLValue",vm:"1-n",version:"DICOM"},"(0072,0078)":{tag:"(0072,0078)",vr:"UL",name:"SelectorULValue",vm:"1-n",version:"DICOM"},"(0072,007A)":{tag:"(0072,007A)",vr:"US",name:"SelectorUSValue",vm:"1-n",version:"DICOM"},"(0072,007C)":{tag:"(0072,007C)",vr:"SL",name:"SelectorSLValue",vm:"1-n",version:"DICOM"},"(0072,007E)":{tag:"(0072,007E)",vr:"SS",name:"SelectorSSValue",vm:"1-n",version:"DICOM"},"(0072,007F)":{tag:"(0072,007F)",vr:"UI",name:"SelectorUIValue",vm:"1-n",version:"DICOM"},"(0072,0080)":{tag:"(0072,0080)",vr:"SQ",name:"SelectorCodeSequenceValue",vm:"1",version:"DICOM"},"(0072,0081)":{tag:"(0072,0081)",vr:"OV",name:"SelectorOVValue",vm:"1",version:"DICOM"},"(0072,0082)":{tag:"(0072,0082)",vr:"SV",name:"SelectorSVValue",vm:"1-n",version:"DICOM"},"(0072,0083)":{tag:"(0072,0083)",vr:"UV",name:"SelectorUVValue",vm:"1-n",version:"DICOM"},"(0072,0100)":{tag:"(0072,0100)",vr:"US",name:"NumberOfScreens",vm:"1",version:"DICOM"},"(0072,0102)":{tag:"(0072,0102)",vr:"SQ",name:"NominalScreenDefinitionSequence",vm:"1",version:"DICOM"},"(0072,0104)":{tag:"(0072,0104)",vr:"US",name:"NumberOfVerticalPixels",vm:"1",version:"DICOM"},"(0072,0106)":{tag:"(0072,0106)",vr:"US",name:"NumberOfHorizontalPixels",vm:"1",version:"DICOM"},"(0072,0108)":{tag:"(0072,0108)",vr:"FD",name:"DisplayEnvironmentSpatialPosition",vm:"4",version:"DICOM"},"(0072,010A)":{tag:"(0072,010A)",vr:"US",name:"ScreenMinimumGrayscaleBitDepth",vm:"1",version:"DICOM"},"(0072,010C)":{tag:"(0072,010C)",vr:"US",name:"ScreenMinimumColorBitDepth",vm:"1",version:"DICOM"},"(0072,010E)":{tag:"(0072,010E)",vr:"US",name:"ApplicationMaximumRepaintTime",vm:"1",version:"DICOM"},"(0072,0200)":{tag:"(0072,0200)",vr:"SQ",name:"DisplaySetsSequence",vm:"1",version:"DICOM"},"(0072,0202)":{tag:"(0072,0202)",vr:"US",name:"DisplaySetNumber",vm:"1",version:"DICOM"},"(0072,0203)":{tag:"(0072,0203)",vr:"LO",name:"DisplaySetLabel",vm:"1",version:"DICOM"},"(0072,0204)":{tag:"(0072,0204)",vr:"US",name:"DisplaySetPresentationGroup",vm:"1",version:"DICOM"},"(0072,0206)":{tag:"(0072,0206)",vr:"LO",name:"DisplaySetPresentationGroupDescription",vm:"1",version:"DICOM"},"(0072,0208)":{tag:"(0072,0208)",vr:"CS",name:"PartialDataDisplayHandling",vm:"1",version:"DICOM"},"(0072,0210)":{tag:"(0072,0210)",vr:"SQ",name:"SynchronizedScrollingSequence",vm:"1",version:"DICOM"},"(0072,0212)":{tag:"(0072,0212)",vr:"US",name:"DisplaySetScrollingGroup",vm:"2-n",version:"DICOM"},"(0072,0214)":{tag:"(0072,0214)",vr:"SQ",name:"NavigationIndicatorSequence",vm:"1",version:"DICOM"},"(0072,0216)":{tag:"(0072,0216)",vr:"US",name:"NavigationDisplaySet",vm:"1",version:"DICOM"},"(0072,0218)":{tag:"(0072,0218)",vr:"US",name:"ReferenceDisplaySets",vm:"1-n",version:"DICOM"},"(0072,0300)":{tag:"(0072,0300)",vr:"SQ",name:"ImageBoxesSequence",vm:"1",version:"DICOM"},"(0072,0302)":{tag:"(0072,0302)",vr:"US",name:"ImageBoxNumber",vm:"1",version:"DICOM"},"(0072,0304)":{tag:"(0072,0304)",vr:"CS",name:"ImageBoxLayoutType",vm:"1",version:"DICOM"},"(0072,0306)":{tag:"(0072,0306)",vr:"US",name:"ImageBoxTileHorizontalDimension",vm:"1",version:"DICOM"},"(0072,0308)":{tag:"(0072,0308)",vr:"US",name:"ImageBoxTileVerticalDimension",vm:"1",version:"DICOM"},"(0072,0310)":{tag:"(0072,0310)",vr:"CS",name:"ImageBoxScrollDirection",vm:"1",version:"DICOM"},"(0072,0312)":{tag:"(0072,0312)",vr:"CS",name:"ImageBoxSmallScrollType",vm:"1",version:"DICOM"},"(0072,0314)":{tag:"(0072,0314)",vr:"US",name:"ImageBoxSmallScrollAmount",vm:"1",version:"DICOM"},"(0072,0316)":{tag:"(0072,0316)",vr:"CS",name:"ImageBoxLargeScrollType",vm:"1",version:"DICOM"},"(0072,0318)":{tag:"(0072,0318)",vr:"US",name:"ImageBoxLargeScrollAmount",vm:"1",version:"DICOM"},"(0072,0320)":{tag:"(0072,0320)",vr:"US",name:"ImageBoxOverlapPriority",vm:"1",version:"DICOM"},"(0072,0330)":{tag:"(0072,0330)",vr:"FD",name:"CineRelativeToRealTime",vm:"1",version:"DICOM"},"(0072,0400)":{tag:"(0072,0400)",vr:"SQ",name:"FilterOperationsSequence",vm:"1",version:"DICOM"},"(0072,0402)":{tag:"(0072,0402)",vr:"CS",name:"FilterByCategory",vm:"1",version:"DICOM"},"(0072,0404)":{tag:"(0072,0404)",vr:"CS",name:"FilterByAttributePresence",vm:"1",version:"DICOM"},"(0072,0406)":{tag:"(0072,0406)",vr:"CS",name:"FilterByOperator",vm:"1",version:"DICOM"},"(0072,0420)":{tag:"(0072,0420)",vr:"US",name:"StructuredDisplayBackgroundCIELabValue",vm:"3",version:"DICOM"},"(0072,0421)":{tag:"(0072,0421)",vr:"US",name:"EmptyImageBoxCIELabValue",vm:"3",version:"DICOM"},"(0072,0422)":{tag:"(0072,0422)",vr:"SQ",name:"StructuredDisplayImageBoxSequence",vm:"1",version:"DICOM"},"(0072,0424)":{tag:"(0072,0424)",vr:"SQ",name:"StructuredDisplayTextBoxSequence",vm:"1",version:"DICOM"},"(0072,0427)":{tag:"(0072,0427)",vr:"SQ",name:"ReferencedFirstFrameSequence",vm:"1",version:"DICOM"},"(0072,0430)":{tag:"(0072,0430)",vr:"SQ",name:"ImageBoxSynchronizationSequence",vm:"1",version:"DICOM"},"(0072,0432)":{tag:"(0072,0432)",vr:"US",name:"SynchronizedImageBoxList",vm:"2-n",version:"DICOM"},"(0072,0434)":{tag:"(0072,0434)",vr:"CS",name:"TypeOfSynchronization",vm:"1",version:"DICOM"},"(0072,0500)":{tag:"(0072,0500)",vr:"CS",name:"BlendingOperationType",vm:"1",version:"DICOM"},"(0072,0510)":{tag:"(0072,0510)",vr:"CS",name:"ReformattingOperationType",vm:"1",version:"DICOM"},"(0072,0512)":{tag:"(0072,0512)",vr:"FD",name:"ReformattingThickness",vm:"1",version:"DICOM"},"(0072,0514)":{tag:"(0072,0514)",vr:"FD",name:"ReformattingInterval",vm:"1",version:"DICOM"},"(0072,0516)":{tag:"(0072,0516)",vr:"CS",name:"ReformattingOperationInitialViewDirection",vm:"1",version:"DICOM"},"(0072,0520)":{tag:"(0072,0520)",vr:"CS",name:"ThreeDRenderingType",vm:"1-n",version:"DICOM"},"(0072,0600)":{tag:"(0072,0600)",vr:"SQ",name:"SortingOperationsSequence",vm:"1",version:"DICOM"},"(0072,0602)":{tag:"(0072,0602)",vr:"CS",name:"SortByCategory",vm:"1",version:"DICOM"},"(0072,0604)":{tag:"(0072,0604)",vr:"CS",name:"SortingDirection",vm:"1",version:"DICOM"},"(0072,0700)":{tag:"(0072,0700)",vr:"CS",name:"DisplaySetPatientOrientation",vm:"2",version:"DICOM"},"(0072,0702)":{tag:"(0072,0702)",vr:"CS",name:"VOIType",vm:"1",version:"DICOM"},"(0072,0704)":{tag:"(0072,0704)",vr:"CS",name:"PseudoColorType",vm:"1",version:"DICOM"},"(0072,0705)":{tag:"(0072,0705)",vr:"SQ",name:"PseudoColorPaletteInstanceReferenceSequence",vm:"1",version:"DICOM"},"(0072,0706)":{tag:"(0072,0706)",vr:"CS",name:"ShowGrayscaleInverted",vm:"1",version:"DICOM"},"(0072,0710)":{tag:"(0072,0710)",vr:"CS",name:"ShowImageTrueSizeFlag",vm:"1",version:"DICOM"},"(0072,0712)":{tag:"(0072,0712)",vr:"CS",name:"ShowGraphicAnnotationFlag",vm:"1",version:"DICOM"},"(0072,0714)":{tag:"(0072,0714)",vr:"CS",name:"ShowPatientDemographicsFlag",vm:"1",version:"DICOM"},"(0072,0716)":{tag:"(0072,0716)",vr:"CS",name:"ShowAcquisitionTechniquesFlag",vm:"1",version:"DICOM"},"(0072,0717)":{tag:"(0072,0717)",vr:"CS",name:"DisplaySetHorizontalJustification",vm:"1",version:"DICOM"},"(0072,0718)":{tag:"(0072,0718)",vr:"CS",name:"DisplaySetVerticalJustification",vm:"1",version:"DICOM"},"(0074,0120)":{tag:"(0074,0120)",vr:"FD",name:"ContinuationStartMeterset",vm:"1",version:"DICOM"},"(0074,0121)":{tag:"(0074,0121)",vr:"FD",name:"ContinuationEndMeterset",vm:"1",version:"DICOM"},"(0074,1000)":{tag:"(0074,1000)",vr:"CS",name:"ProcedureStepState",vm:"1",version:"DICOM"},"(0074,1002)":{tag:"(0074,1002)",vr:"SQ",name:"ProcedureStepProgressInformationSequence",vm:"1",version:"DICOM"},"(0074,1004)":{tag:"(0074,1004)",vr:"DS",name:"ProcedureStepProgress",vm:"1",version:"DICOM"},"(0074,1006)":{tag:"(0074,1006)",vr:"ST",name:"ProcedureStepProgressDescription",vm:"1",version:"DICOM"},"(0074,1007)":{tag:"(0074,1007)",vr:"SQ",name:"ProcedureStepProgressParametersSequence",vm:"1",version:"DICOM"},"(0074,1008)":{tag:"(0074,1008)",vr:"SQ",name:"ProcedureStepCommunicationsURISequence",vm:"1",version:"DICOM"},"(0074,100A)":{tag:"(0074,100A)",vr:"UR",name:"ContactURI",vm:"1",version:"DICOM"},"(0074,100C)":{tag:"(0074,100C)",vr:"LO",name:"ContactDisplayName",vm:"1",version:"DICOM"},"(0074,100E)":{tag:"(0074,100E)",vr:"SQ",name:"ProcedureStepDiscontinuationReasonCodeSequence",vm:"1",version:"DICOM"},"(0074,1020)":{tag:"(0074,1020)",vr:"SQ",name:"BeamTaskSequence",vm:"1",version:"DICOM"},"(0074,1022)":{tag:"(0074,1022)",vr:"CS",name:"BeamTaskType",vm:"1",version:"DICOM"},"(0074,1025)":{tag:"(0074,1025)",vr:"CS",name:"AutosequenceFlag",vm:"1",version:"DICOM"},"(0074,1026)":{tag:"(0074,1026)",vr:"FD",name:"TableTopVerticalAdjustedPosition",vm:"1",version:"DICOM"},"(0074,1027)":{tag:"(0074,1027)",vr:"FD",name:"TableTopLongitudinalAdjustedPosition",vm:"1",version:"DICOM"},"(0074,1028)":{tag:"(0074,1028)",vr:"FD",name:"TableTopLateralAdjustedPosition",vm:"1",version:"DICOM"},"(0074,102A)":{tag:"(0074,102A)",vr:"FD",name:"PatientSupportAdjustedAngle",vm:"1",version:"DICOM"},"(0074,102B)":{tag:"(0074,102B)",vr:"FD",name:"TableTopEccentricAdjustedAngle",vm:"1",version:"DICOM"},"(0074,102C)":{tag:"(0074,102C)",vr:"FD",name:"TableTopPitchAdjustedAngle",vm:"1",version:"DICOM"},"(0074,102D)":{tag:"(0074,102D)",vr:"FD",name:"TableTopRollAdjustedAngle",vm:"1",version:"DICOM"},"(0074,1030)":{tag:"(0074,1030)",vr:"SQ",name:"DeliveryVerificationImageSequence",vm:"1",version:"DICOM"},"(0074,1032)":{tag:"(0074,1032)",vr:"CS",name:"VerificationImageTiming",vm:"1",version:"DICOM"},"(0074,1034)":{tag:"(0074,1034)",vr:"CS",name:"DoubleExposureFlag",vm:"1",version:"DICOM"},"(0074,1036)":{tag:"(0074,1036)",vr:"CS",name:"DoubleExposureOrdering",vm:"1",version:"DICOM"},"(0074,1040)":{tag:"(0074,1040)",vr:"SQ",name:"RelatedReferenceRTImageSequence",vm:"1",version:"DICOM"},"(0074,1042)":{tag:"(0074,1042)",vr:"SQ",name:"GeneralMachineVerificationSequence",vm:"1",version:"DICOM"},"(0074,1044)":{tag:"(0074,1044)",vr:"SQ",name:"ConventionalMachineVerificationSequence",vm:"1",version:"DICOM"},"(0074,1046)":{tag:"(0074,1046)",vr:"SQ",name:"IonMachineVerificationSequence",vm:"1",version:"DICOM"},"(0074,1048)":{tag:"(0074,1048)",vr:"SQ",name:"FailedAttributesSequence",vm:"1",version:"DICOM"},"(0074,104A)":{tag:"(0074,104A)",vr:"SQ",name:"OverriddenAttributesSequence",vm:"1",version:"DICOM"},"(0074,104C)":{tag:"(0074,104C)",vr:"SQ",name:"ConventionalControlPointVerificationSequence",vm:"1",version:"DICOM"},"(0074,104E)":{tag:"(0074,104E)",vr:"SQ",name:"IonControlPointVerificationSequence",vm:"1",version:"DICOM"},"(0074,1050)":{tag:"(0074,1050)",vr:"SQ",name:"AttributeOccurrenceSequence",vm:"1",version:"DICOM"},"(0074,1052)":{tag:"(0074,1052)",vr:"AT",name:"AttributeOccurrencePointer",vm:"1",version:"DICOM"},"(0074,1054)":{tag:"(0074,1054)",vr:"UL",name:"AttributeItemSelector",vm:"1",version:"DICOM"},"(0074,1056)":{tag:"(0074,1056)",vr:"LO",name:"AttributeOccurrencePrivateCreator",vm:"1",version:"DICOM"},"(0074,1057)":{tag:"(0074,1057)",vr:"IS",name:"SelectorSequencePointerItems",vm:"1-n",version:"DICOM"},"(0074,1200)":{tag:"(0074,1200)",vr:"CS",name:"ScheduledProcedureStepPriority",vm:"1",version:"DICOM"},"(0074,1202)":{tag:"(0074,1202)",vr:"LO",name:"WorklistLabel",vm:"1",version:"DICOM"},"(0074,1204)":{tag:"(0074,1204)",vr:"LO",name:"ProcedureStepLabel",vm:"1",version:"DICOM"},"(0074,1210)":{tag:"(0074,1210)",vr:"SQ",name:"ScheduledProcessingParametersSequence",vm:"1",version:"DICOM"},"(0074,1212)":{tag:"(0074,1212)",vr:"SQ",name:"PerformedProcessingParametersSequence",vm:"1",version:"DICOM"},"(0074,1216)":{tag:"(0074,1216)",vr:"SQ",name:"UnifiedProcedureStepPerformedProcedureSequence",vm:"1",version:"DICOM"},"(0074,1224)":{tag:"(0074,1224)",vr:"SQ",name:"ReplacedProcedureStepSequence",vm:"1",version:"DICOM"},"(0074,1230)":{tag:"(0074,1230)",vr:"LO",name:"DeletionLock",vm:"1",version:"DICOM"},"(0074,1234)":{tag:"(0074,1234)",vr:"AE",name:"ReceivingAE",vm:"1",version:"DICOM"},"(0074,1236)":{tag:"(0074,1236)",vr:"AE",name:"RequestingAE",vm:"1",version:"DICOM"},"(0074,1238)":{tag:"(0074,1238)",vr:"LT",name:"ReasonForCancellation",vm:"1",version:"DICOM"},"(0074,1242)":{tag:"(0074,1242)",vr:"CS",name:"SCPStatus",vm:"1",version:"DICOM"},"(0074,1244)":{tag:"(0074,1244)",vr:"CS",name:"SubscriptionListStatus",vm:"1",version:"DICOM"},"(0074,1246)":{tag:"(0074,1246)",vr:"CS",name:"UnifiedProcedureStepListStatus",vm:"1",version:"DICOM"},"(0074,1324)":{tag:"(0074,1324)",vr:"UL",name:"BeamOrderIndex",vm:"1",version:"DICOM"},"(0074,1338)":{tag:"(0074,1338)",vr:"FD",name:"DoubleExposureMeterset",vm:"1",version:"DICOM"},"(0074,133A)":{tag:"(0074,133A)",vr:"FD",name:"DoubleExposureFieldDelta",vm:"4",version:"DICOM"},"(0074,1401)":{tag:"(0074,1401)",vr:"SQ",name:"BrachyTaskSequence",vm:"1",version:"DICOM"},"(0074,1402)":{tag:"(0074,1402)",vr:"DS",name:"ContinuationStartTotalReferenceAirKerma",vm:"1",version:"DICOM"},"(0074,1403)":{tag:"(0074,1403)",vr:"DS",name:"ContinuationEndTotalReferenceAirKerma",vm:"1",version:"DICOM"},"(0074,1404)":{tag:"(0074,1404)",vr:"IS",name:"ContinuationPulseNumber",vm:"1",version:"DICOM"},"(0074,1405)":{tag:"(0074,1405)",vr:"SQ",name:"ChannelDeliveryOrderSequence",vm:"1",version:"DICOM"},"(0074,1406)":{tag:"(0074,1406)",vr:"IS",name:"ReferencedChannelNumber",vm:"1",version:"DICOM"},"(0074,1407)":{tag:"(0074,1407)",vr:"DS",name:"StartCumulativeTimeWeight",vm:"1",version:"DICOM"},"(0074,1408)":{tag:"(0074,1408)",vr:"DS",name:"EndCumulativeTimeWeight",vm:"1",version:"DICOM"},"(0074,1409)":{tag:"(0074,1409)",vr:"SQ",name:"OmittedChannelSequence",vm:"1",version:"DICOM"},"(0074,140A)":{tag:"(0074,140A)",vr:"CS",name:"ReasonForChannelOmission",vm:"1",version:"DICOM"},"(0074,140B)":{tag:"(0074,140B)",vr:"LO",name:"ReasonForChannelOmissionDescription",vm:"1",version:"DICOM"},"(0074,140C)":{tag:"(0074,140C)",vr:"IS",name:"ChannelDeliveryOrderIndex",vm:"1",version:"DICOM"},"(0074,140D)":{tag:"(0074,140D)",vr:"SQ",name:"ChannelDeliveryContinuationSequence",vm:"1",version:"DICOM"},"(0074,140E)":{tag:"(0074,140E)",vr:"SQ",name:"OmittedApplicationSetupSequence",vm:"1",version:"DICOM"},"(0076,0001)":{tag:"(0076,0001)",vr:"LO",name:"ImplantAssemblyTemplateName",vm:"1",version:"DICOM"},"(0076,0003)":{tag:"(0076,0003)",vr:"LO",name:"ImplantAssemblyTemplateIssuer",vm:"1",version:"DICOM"},"(0076,0006)":{tag:"(0076,0006)",vr:"LO",name:"ImplantAssemblyTemplateVersion",vm:"1",version:"DICOM"},"(0076,0008)":{tag:"(0076,0008)",vr:"SQ",name:"ReplacedImplantAssemblyTemplateSequence",vm:"1",version:"DICOM"},"(0076,000A)":{tag:"(0076,000A)",vr:"CS",name:"ImplantAssemblyTemplateType",vm:"1",version:"DICOM"},"(0076,000C)":{tag:"(0076,000C)",vr:"SQ",name:"OriginalImplantAssemblyTemplateSequence",vm:"1",version:"DICOM"},"(0076,000E)":{tag:"(0076,000E)",vr:"SQ",name:"DerivationImplantAssemblyTemplateSequence",vm:"1",version:"DICOM"},"(0076,0010)":{tag:"(0076,0010)",vr:"SQ",name:"ImplantAssemblyTemplateTargetAnatomySequence",vm:"1",version:"DICOM"},"(0076,0020)":{tag:"(0076,0020)",vr:"SQ",name:"ProcedureTypeCodeSequence",vm:"1",version:"DICOM"},"(0076,0030)":{tag:"(0076,0030)",vr:"LO",name:"SurgicalTechnique",vm:"1",version:"DICOM"},"(0076,0032)":{tag:"(0076,0032)",vr:"SQ",name:"ComponentTypesSequence",vm:"1",version:"DICOM"},"(0076,0034)":{tag:"(0076,0034)",vr:"CS",name:"ComponentTypeCodeSequence",vm:"1",version:"DICOM"},"(0076,0036)":{tag:"(0076,0036)",vr:"CS",name:"ExclusiveComponentType",vm:"1",version:"DICOM"},"(0076,0038)":{tag:"(0076,0038)",vr:"CS",name:"MandatoryComponentType",vm:"1",version:"DICOM"},"(0076,0040)":{tag:"(0076,0040)",vr:"SQ",name:"ComponentSequence",vm:"1",version:"DICOM"},"(0076,0055)":{tag:"(0076,0055)",vr:"US",name:"ComponentID",vm:"1",version:"DICOM"},"(0076,0060)":{tag:"(0076,0060)",vr:"SQ",name:"ComponentAssemblySequence",vm:"1",version:"DICOM"},"(0076,0070)":{tag:"(0076,0070)",vr:"US",name:"Component1ReferencedID",vm:"1",version:"DICOM"},"(0076,0080)":{tag:"(0076,0080)",vr:"US",name:"Component1ReferencedMatingFeatureSetID",vm:"1",version:"DICOM"},"(0076,0090)":{tag:"(0076,0090)",vr:"US",name:"Component1ReferencedMatingFeatureID",vm:"1",version:"DICOM"},"(0076,00A0)":{tag:"(0076,00A0)",vr:"US",name:"Component2ReferencedID",vm:"1",version:"DICOM"},"(0076,00B0)":{tag:"(0076,00B0)",vr:"US",name:"Component2ReferencedMatingFeatureSetID",vm:"1",version:"DICOM"},"(0076,00C0)":{tag:"(0076,00C0)",vr:"US",name:"Component2ReferencedMatingFeatureID",vm:"1",version:"DICOM"},"(0078,0001)":{tag:"(0078,0001)",vr:"LO",name:"ImplantTemplateGroupName",vm:"1",version:"DICOM"},"(0078,0010)":{tag:"(0078,0010)",vr:"ST",name:"ImplantTemplateGroupDescription",vm:"1",version:"DICOM"},"(0078,0020)":{tag:"(0078,0020)",vr:"LO",name:"ImplantTemplateGroupIssuer",vm:"1",version:"DICOM"},"(0078,0024)":{tag:"(0078,0024)",vr:"LO",name:"ImplantTemplateGroupVersion",vm:"1",version:"DICOM"},"(0078,0026)":{tag:"(0078,0026)",vr:"SQ",name:"ReplacedImplantTemplateGroupSequence",vm:"1",version:"DICOM"},"(0078,0028)":{tag:"(0078,0028)",vr:"SQ",name:"ImplantTemplateGroupTargetAnatomySequence",vm:"1",version:"DICOM"},"(0078,002A)":{tag:"(0078,002A)",vr:"SQ",name:"ImplantTemplateGroupMembersSequence",vm:"1",version:"DICOM"},"(0078,002E)":{tag:"(0078,002E)",vr:"US",name:"ImplantTemplateGroupMemberID",vm:"1",version:"DICOM"},"(0078,0050)":{tag:"(0078,0050)",vr:"FD",name:"ThreeDImplantTemplateGroupMemberMatchingPoint",vm:"3",version:"DICOM"},"(0078,0060)":{tag:"(0078,0060)",vr:"FD",name:"ThreeDImplantTemplateGroupMemberMatchingAxes",vm:"9",version:"DICOM"},"(0078,0070)":{tag:"(0078,0070)",vr:"SQ",name:"ImplantTemplateGroupMemberMatching2DCoordinatesSequence",vm:"1",version:"DICOM"},"(0078,0090)":{tag:"(0078,0090)",vr:"FD",name:"TwoDImplantTemplateGroupMemberMatchingPoint",vm:"2",version:"DICOM"},"(0078,00A0)":{tag:"(0078,00A0)",vr:"FD",name:"TwoDImplantTemplateGroupMemberMatchingAxes",vm:"4",version:"DICOM"},"(0078,00B0)":{tag:"(0078,00B0)",vr:"SQ",name:"ImplantTemplateGroupVariationDimensionSequence",vm:"1",version:"DICOM"},"(0078,00B2)":{tag:"(0078,00B2)",vr:"LO",name:"ImplantTemplateGroupVariationDimensionName",vm:"1",version:"DICOM"},"(0078,00B4)":{tag:"(0078,00B4)",vr:"SQ",name:"ImplantTemplateGroupVariationDimensionRankSequence",vm:"1",version:"DICOM"},"(0078,00B6)":{tag:"(0078,00B6)",vr:"US",name:"ReferencedImplantTemplateGroupMemberID",vm:"1",version:"DICOM"},"(0078,00B8)":{tag:"(0078,00B8)",vr:"US",name:"ImplantTemplateGroupVariationDimensionRank",vm:"1",version:"DICOM"},"(0080,0001)":{tag:"(0080,0001)",vr:"SQ",name:"SurfaceScanAcquisitionTypeCodeSequence",vm:"1",version:"DICOM"},"(0080,0002)":{tag:"(0080,0002)",vr:"SQ",name:"SurfaceScanModeCodeSequence",vm:"1",version:"DICOM"},"(0080,0003)":{tag:"(0080,0003)",vr:"SQ",name:"RegistrationMethodCodeSequence",vm:"1",version:"DICOM"},"(0080,0004)":{tag:"(0080,0004)",vr:"FD",name:"ShotDurationTime",vm:"1",version:"DICOM"},"(0080,0005)":{tag:"(0080,0005)",vr:"FD",name:"ShotOffsetTime",vm:"1",version:"DICOM"},"(0080,0006)":{tag:"(0080,0006)",vr:"US",name:"SurfacePointPresentationValueData",vm:"1-n",version:"DICOM"},"(0080,0007)":{tag:"(0080,0007)",vr:"US",name:"SurfacePointColorCIELabValueData",vm:"3-3n",version:"DICOM"},"(0080,0008)":{tag:"(0080,0008)",vr:"SQ",name:"UVMappingSequence",vm:"1",version:"DICOM"},"(0080,0009)":{tag:"(0080,0009)",vr:"SH",name:"TextureLabel",vm:"1",version:"DICOM"},"(0080,0010)":{tag:"(0080,0010)",vr:"OF",name:"UValueData",vm:"1-n",version:"DICOM"},"(0080,0011)":{tag:"(0080,0011)",vr:"OF",name:"VValueData",vm:"1-n",version:"DICOM"},"(0080,0012)":{tag:"(0080,0012)",vr:"SQ",name:"ReferencedTextureSequence",vm:"1",version:"DICOM"},"(0080,0013)":{tag:"(0080,0013)",vr:"SQ",name:"ReferencedSurfaceDataSequence",vm:"1",version:"DICOM"},"(0082,0001)":{tag:"(0082,0001)",vr:"CS",name:"AssessmentSummary",vm:"1",version:"DICOM"},"(0082,0003)":{tag:"(0082,0003)",vr:"UT",name:"AssessmentSummaryDescription",vm:"1",version:"DICOM"},"(0082,0004)":{tag:"(0082,0004)",vr:"SQ",name:"AssessedSOPInstanceSequence",vm:"1",version:"DICOM"},"(0082,0005)":{tag:"(0082,0005)",vr:"SQ",name:"ReferencedComparisonSOPInstanceSequence",vm:"1",version:"DICOM"},"(0082,0006)":{tag:"(0082,0006)",vr:"UL",name:"NumberOfAssessmentObservations",vm:"1",version:"DICOM"},"(0082,0007)":{tag:"(0082,0007)",vr:"SQ",name:"AssessmentObservationsSequence",vm:"1",version:"DICOM"},"(0082,0008)":{tag:"(0082,0008)",vr:"CS",name:"ObservationSignificance",vm:"1",version:"DICOM"},"(0082,000A)":{tag:"(0082,000A)",vr:"UT",name:"ObservationDescription",vm:"1",version:"DICOM"},"(0082,000C)":{tag:"(0082,000C)",vr:"SQ",name:"StructuredConstraintObservationSequence",vm:"1",version:"DICOM"},"(0082,0010)":{tag:"(0082,0010)",vr:"SQ",name:"AssessedAttributeValueSequence",vm:"1",version:"DICOM"},"(0082,0016)":{tag:"(0082,0016)",vr:"LO",name:"AssessmentSetID",vm:"1",version:"DICOM"},"(0082,0017)":{tag:"(0082,0017)",vr:"SQ",name:"AssessmentRequesterSequence",vm:"1",version:"DICOM"},"(0082,0018)":{tag:"(0082,0018)",vr:"LO",name:"SelectorAttributeName",vm:"1",version:"DICOM"},"(0082,0019)":{tag:"(0082,0019)",vr:"LO",name:"SelectorAttributeKeyword",vm:"1",version:"DICOM"},"(0082,0021)":{tag:"(0082,0021)",vr:"SQ",name:"AssessmentTypeCodeSequence",vm:"1",version:"DICOM"},"(0082,0022)":{tag:"(0082,0022)",vr:"SQ",name:"ObservationBasisCodeSequence",vm:"1",version:"DICOM"},"(0082,0023)":{tag:"(0082,0023)",vr:"LO",name:"AssessmentLabel",vm:"1",version:"DICOM"},"(0082,0032)":{tag:"(0082,0032)",vr:"CS",name:"ConstraintType",vm:"1",version:"DICOM"},"(0082,0033)":{tag:"(0082,0033)",vr:"UT",name:"SpecificationSelectionGuidance",vm:"1",version:"DICOM"},"(0082,0034)":{tag:"(0082,0034)",vr:"SQ",name:"ConstraintValueSequence",vm:"1",version:"DICOM"},"(0082,0035)":{tag:"(0082,0035)",vr:"SQ",name:"RecommendedDefaultValueSequence",vm:"1",version:"DICOM"},"(0082,0036)":{tag:"(0082,0036)",vr:"CS",name:"ConstraintViolationSignificance",vm:"1",version:"DICOM"},"(0082,0037)":{tag:"(0082,0037)",vr:"UT",name:"ConstraintViolationCondition",vm:"1",version:"DICOM"},"(0082,0038)":{tag:"(0082,0038)",vr:"CS",name:"ModifiableConstraintFlag",vm:"1",version:"DICOM"},"(0088,0130)":{tag:"(0088,0130)",vr:"SH",name:"StorageMediaFileSetID",vm:"1",version:"DICOM"},"(0088,0140)":{tag:"(0088,0140)",vr:"UI",name:"StorageMediaFileSetUID",vm:"1",version:"DICOM"},"(0088,0200)":{tag:"(0088,0200)",vr:"SQ",name:"IconImageSequence",vm:"1",version:"DICOM"},"(0100,0410)":{tag:"(0100,0410)",vr:"CS",name:"SOPInstanceStatus",vm:"1",version:"DICOM"},"(0100,0420)":{tag:"(0100,0420)",vr:"DT",name:"SOPAuthorizationDateTime",vm:"1",version:"DICOM"},"(0100,0424)":{tag:"(0100,0424)",vr:"LT",name:"SOPAuthorizationComment",vm:"1",version:"DICOM"},"(0100,0426)":{tag:"(0100,0426)",vr:"LO",name:"AuthorizationEquipmentCertificationNumber",vm:"1",version:"DICOM"},"(0400,0005)":{tag:"(0400,0005)",vr:"US",name:"MACIDNumber",vm:"1",version:"DICOM"},"(0400,0010)":{tag:"(0400,0010)",vr:"UI",name:"MACCalculationTransferSyntaxUID",vm:"1",version:"DICOM"},"(0400,0015)":{tag:"(0400,0015)",vr:"CS",name:"MACAlgorithm",vm:"1",version:"DICOM"},"(0400,0020)":{tag:"(0400,0020)",vr:"AT",name:"DataElementsSigned",vm:"1-n",version:"DICOM"},"(0400,0100)":{tag:"(0400,0100)",vr:"UI",name:"DigitalSignatureUID",vm:"1",version:"DICOM"},"(0400,0105)":{tag:"(0400,0105)",vr:"DT",name:"DigitalSignatureDateTime",vm:"1",version:"DICOM"},"(0400,0110)":{tag:"(0400,0110)",vr:"CS",name:"CertificateType",vm:"1",version:"DICOM"},"(0400,0115)":{tag:"(0400,0115)",vr:"OB",name:"CertificateOfSigner",vm:"1",version:"DICOM"},"(0400,0120)":{tag:"(0400,0120)",vr:"OB",name:"Signature",vm:"1",version:"DICOM"},"(0400,0305)":{tag:"(0400,0305)",vr:"CS",name:"CertifiedTimestampType",vm:"1",version:"DICOM"},"(0400,0310)":{tag:"(0400,0310)",vr:"OB",name:"CertifiedTimestamp",vm:"1",version:"DICOM"},"(0400,0401)":{tag:"(0400,0401)",vr:"SQ",name:"DigitalSignaturePurposeCodeSequence",vm:"1",version:"DICOM"},"(0400,0402)":{tag:"(0400,0402)",vr:"SQ",name:"ReferencedDigitalSignatureSequence",vm:"1",version:"DICOM"},"(0400,0403)":{tag:"(0400,0403)",vr:"SQ",name:"ReferencedSOPInstanceMACSequence",vm:"1",version:"DICOM"},"(0400,0404)":{tag:"(0400,0404)",vr:"OB",name:"MAC",vm:"1",version:"DICOM"},"(0400,0500)":{tag:"(0400,0500)",vr:"SQ",name:"EncryptedAttributesSequence",vm:"1",version:"DICOM"},"(0400,0510)":{tag:"(0400,0510)",vr:"UI",name:"EncryptedContentTransferSyntaxUID",vm:"1",version:"DICOM"},"(0400,0520)":{tag:"(0400,0520)",vr:"OB",name:"EncryptedContent",vm:"1",version:"DICOM"},"(0400,0550)":{tag:"(0400,0550)",vr:"SQ",name:"ModifiedAttributesSequence",vm:"1",version:"DICOM"},"(0400,0551)":{tag:"(0400,0551)",vr:"SQ",name:"NonconformingModifiedAttributesSequence",vm:"1",version:"DICOM"},"(0400,0552)":{tag:"(0400,0552)",vr:"OB",name:"NonconformingDataElementValue",vm:"1",version:"DICOM"},"(0400,0561)":{tag:"(0400,0561)",vr:"SQ",name:"OriginalAttributesSequence",vm:"1",version:"DICOM"},"(0400,0562)":{tag:"(0400,0562)",vr:"DT",name:"AttributeModificationDateTime",vm:"1",version:"DICOM"},"(0400,0563)":{tag:"(0400,0563)",vr:"LO",name:"ModifyingSystem",vm:"1",version:"DICOM"},"(0400,0564)":{tag:"(0400,0564)",vr:"LO",name:"SourceOfPreviousValues",vm:"1",version:"DICOM"},"(0400,0565)":{tag:"(0400,0565)",vr:"CS",name:"ReasonForTheAttributeModification",vm:"1",version:"DICOM"},"(0400,0600)":{tag:"(0400,0600)",vr:"CS",name:"InstanceOriginStatus",vm:"1",version:"DICOM"},"(2000,0010)":{tag:"(2000,0010)",vr:"IS",name:"NumberOfCopies",vm:"1",version:"DICOM"},"(2000,001E)":{tag:"(2000,001E)",vr:"SQ",name:"PrinterConfigurationSequence",vm:"1",version:"DICOM"},"(2000,0020)":{tag:"(2000,0020)",vr:"CS",name:"PrintPriority",vm:"1",version:"DICOM"},"(2000,0030)":{tag:"(2000,0030)",vr:"CS",name:"MediumType",vm:"1",version:"DICOM"},"(2000,0040)":{tag:"(2000,0040)",vr:"CS",name:"FilmDestination",vm:"1",version:"DICOM"},"(2000,0050)":{tag:"(2000,0050)",vr:"LO",name:"FilmSessionLabel",vm:"1",version:"DICOM"},"(2000,0060)":{tag:"(2000,0060)",vr:"IS",name:"MemoryAllocation",vm:"1",version:"DICOM"},"(2000,0061)":{tag:"(2000,0061)",vr:"IS",name:"MaximumMemoryAllocation",vm:"1",version:"DICOM"},"(2000,00A0)":{tag:"(2000,00A0)",vr:"US",name:"MemoryBitDepth",vm:"1",version:"DICOM"},"(2000,00A1)":{tag:"(2000,00A1)",vr:"US",name:"PrintingBitDepth",vm:"1",version:"DICOM"},"(2000,00A2)":{tag:"(2000,00A2)",vr:"SQ",name:"MediaInstalledSequence",vm:"1",version:"DICOM"},"(2000,00A4)":{tag:"(2000,00A4)",vr:"SQ",name:"OtherMediaAvailableSequence",vm:"1",version:"DICOM"},"(2000,00A8)":{tag:"(2000,00A8)",vr:"SQ",name:"SupportedImageDisplayFormatsSequence",vm:"1",version:"DICOM"},"(2000,0500)":{tag:"(2000,0500)",vr:"SQ",name:"ReferencedFilmBoxSequence",vm:"1",version:"DICOM"},"(2010,0010)":{tag:"(2010,0010)",vr:"ST",name:"ImageDisplayFormat",vm:"1",version:"DICOM"},"(2010,0030)":{tag:"(2010,0030)",vr:"CS",name:"AnnotationDisplayFormatID",vm:"1",version:"DICOM"},"(2010,0040)":{tag:"(2010,0040)",vr:"CS",name:"FilmOrientation",vm:"1",version:"DICOM"},"(2010,0050)":{tag:"(2010,0050)",vr:"CS",name:"FilmSizeID",vm:"1",version:"DICOM"},"(2010,0052)":{tag:"(2010,0052)",vr:"CS",name:"PrinterResolutionID",vm:"1",version:"DICOM"},"(2010,0054)":{tag:"(2010,0054)",vr:"CS",name:"DefaultPrinterResolutionID",vm:"1",version:"DICOM"},"(2010,0060)":{tag:"(2010,0060)",vr:"CS",name:"MagnificationType",vm:"1",version:"DICOM"},"(2010,0080)":{tag:"(2010,0080)",vr:"CS",name:"SmoothingType",vm:"1",version:"DICOM"},"(2010,00A6)":{tag:"(2010,00A6)",vr:"CS",name:"DefaultMagnificationType",vm:"1",version:"DICOM"},"(2010,00A7)":{tag:"(2010,00A7)",vr:"CS",name:"OtherMagnificationTypesAvailable",vm:"1-n",version:"DICOM"},"(2010,00A8)":{tag:"(2010,00A8)",vr:"CS",name:"DefaultSmoothingType",vm:"1",version:"DICOM"},"(2010,00A9)":{tag:"(2010,00A9)",vr:"CS",name:"OtherSmoothingTypesAvailable",vm:"1-n",version:"DICOM"},"(2010,0100)":{tag:"(2010,0100)",vr:"CS",name:"BorderDensity",vm:"1",version:"DICOM"},"(2010,0110)":{tag:"(2010,0110)",vr:"CS",name:"EmptyImageDensity",vm:"1",version:"DICOM"},"(2010,0120)":{tag:"(2010,0120)",vr:"US",name:"MinDensity",vm:"1",version:"DICOM"},"(2010,0130)":{tag:"(2010,0130)",vr:"US",name:"MaxDensity",vm:"1",version:"DICOM"},"(2010,0140)":{tag:"(2010,0140)",vr:"CS",name:"Trim",vm:"1",version:"DICOM"},"(2010,0150)":{tag:"(2010,0150)",vr:"ST",name:"ConfigurationInformation",vm:"1",version:"DICOM"},"(2010,0152)":{tag:"(2010,0152)",vr:"LT",name:"ConfigurationInformationDescription",vm:"1",version:"DICOM"},"(2010,0154)":{tag:"(2010,0154)",vr:"IS",name:"MaximumCollatedFilms",vm:"1",version:"DICOM"},"(2010,015E)":{tag:"(2010,015E)",vr:"US",name:"Illumination",vm:"1",version:"DICOM"},"(2010,0160)":{tag:"(2010,0160)",vr:"US",name:"ReflectedAmbientLight",vm:"1",version:"DICOM"},"(2010,0376)":{tag:"(2010,0376)",vr:"DS",name:"PrinterPixelSpacing",vm:"2",version:"DICOM"},"(2010,0500)":{tag:"(2010,0500)",vr:"SQ",name:"ReferencedFilmSessionSequence",vm:"1",version:"DICOM"},"(2010,0510)":{tag:"(2010,0510)",vr:"SQ",name:"ReferencedImageBoxSequence",vm:"1",version:"DICOM"},"(2010,0520)":{tag:"(2010,0520)",vr:"SQ",name:"ReferencedBasicAnnotationBoxSequence",vm:"1",version:"DICOM"},"(2020,0010)":{tag:"(2020,0010)",vr:"US",name:"ImageBoxPosition",vm:"1",version:"DICOM"},"(2020,0020)":{tag:"(2020,0020)",vr:"CS",name:"Polarity",vm:"1",version:"DICOM"},"(2020,0030)":{tag:"(2020,0030)",vr:"DS",name:"RequestedImageSize",vm:"1",version:"DICOM"},"(2020,0040)":{tag:"(2020,0040)",vr:"CS",name:"RequestedDecimateCropBehavior",vm:"1",version:"DICOM"},"(2020,0050)":{tag:"(2020,0050)",vr:"CS",name:"RequestedResolutionID",vm:"1",version:"DICOM"},"(2020,00A0)":{tag:"(2020,00A0)",vr:"CS",name:"RequestedImageSizeFlag",vm:"1",version:"DICOM"},"(2020,00A2)":{tag:"(2020,00A2)",vr:"CS",name:"DecimateCropResult",vm:"1",version:"DICOM"},"(2020,0110)":{tag:"(2020,0110)",vr:"SQ",name:"BasicGrayscaleImageSequence",vm:"1",version:"DICOM"},"(2020,0111)":{tag:"(2020,0111)",vr:"SQ",name:"BasicColorImageSequence",vm:"1",version:"DICOM"},"(2030,0010)":{tag:"(2030,0010)",vr:"US",name:"AnnotationPosition",vm:"1",version:"DICOM"},"(2030,0020)":{tag:"(2030,0020)",vr:"LO",name:"TextString",vm:"1",version:"DICOM"},"(2050,0010)":{tag:"(2050,0010)",vr:"SQ",name:"PresentationLUTSequence",vm:"1",version:"DICOM"},"(2050,0020)":{tag:"(2050,0020)",vr:"CS",name:"PresentationLUTShape",vm:"1",version:"DICOM"},"(2050,0500)":{tag:"(2050,0500)",vr:"SQ",name:"ReferencedPresentationLUTSequence",vm:"1",version:"DICOM"},"(2100,0020)":{tag:"(2100,0020)",vr:"CS",name:"ExecutionStatus",vm:"1",version:"DICOM"},"(2100,0030)":{tag:"(2100,0030)",vr:"CS",name:"ExecutionStatusInfo",vm:"1",version:"DICOM"},"(2100,0040)":{tag:"(2100,0040)",vr:"DA",name:"CreationDate",vm:"1",version:"DICOM"},"(2100,0050)":{tag:"(2100,0050)",vr:"TM",name:"CreationTime",vm:"1",version:"DICOM"},"(2100,0070)":{tag:"(2100,0070)",vr:"AE",name:"Originator",vm:"1",version:"DICOM"},"(2100,0160)":{tag:"(2100,0160)",vr:"SH",name:"OwnerID",vm:"1",version:"DICOM"},"(2100,0170)":{tag:"(2100,0170)",vr:"IS",name:"NumberOfFilms",vm:"1",version:"DICOM"},"(2110,0010)":{tag:"(2110,0010)",vr:"CS",name:"PrinterStatus",vm:"1",version:"DICOM"},"(2110,0020)":{tag:"(2110,0020)",vr:"CS",name:"PrinterStatusInfo",vm:"1",version:"DICOM"},"(2110,0030)":{tag:"(2110,0030)",vr:"LO",name:"PrinterName",vm:"1",version:"DICOM"},"(2200,0001)":{tag:"(2200,0001)",vr:"CS",name:"LabelUsingInformationExtractedFromInstances",vm:"1",version:"DICOM"},"(2200,0002)":{tag:"(2200,0002)",vr:"UT",name:"LabelText",vm:"1",version:"DICOM"},"(2200,0003)":{tag:"(2200,0003)",vr:"CS",name:"LabelStyleSelection",vm:"1",version:"DICOM"},"(2200,0004)":{tag:"(2200,0004)",vr:"LT",name:"MediaDisposition",vm:"1",version:"DICOM"},"(2200,0005)":{tag:"(2200,0005)",vr:"LT",name:"BarcodeValue",vm:"1",version:"DICOM"},"(2200,0006)":{tag:"(2200,0006)",vr:"CS",name:"BarcodeSymbology",vm:"1",version:"DICOM"},"(2200,0007)":{tag:"(2200,0007)",vr:"CS",name:"AllowMediaSplitting",vm:"1",version:"DICOM"},"(2200,0008)":{tag:"(2200,0008)",vr:"CS",name:"IncludeNonDICOMObjects",vm:"1",version:"DICOM"},"(2200,0009)":{tag:"(2200,0009)",vr:"CS",name:"IncludeDisplayApplication",vm:"1",version:"DICOM"},"(2200,000A)":{tag:"(2200,000A)",vr:"CS",name:"PreserveCompositeInstancesAfterMediaCreation",vm:"1",version:"DICOM"},"(2200,000B)":{tag:"(2200,000B)",vr:"US",name:"TotalNumberOfPiecesOfMediaCreated",vm:"1",version:"DICOM"},"(2200,000C)":{tag:"(2200,000C)",vr:"LO",name:"RequestedMediaApplicationProfile",vm:"1",version:"DICOM"},"(2200,000D)":{tag:"(2200,000D)",vr:"SQ",name:"ReferencedStorageMediaSequence",vm:"1",version:"DICOM"},"(2200,000E)":{tag:"(2200,000E)",vr:"AT",name:"FailureAttributes",vm:"1-n",version:"DICOM"},"(2200,000F)":{tag:"(2200,000F)",vr:"CS",name:"AllowLossyCompression",vm:"1",version:"DICOM"},"(2200,0020)":{tag:"(2200,0020)",vr:"CS",name:"RequestPriority",vm:"1",version:"DICOM"},"(3002,0002)":{tag:"(3002,0002)",vr:"SH",name:"RTImageLabel",vm:"1",version:"DICOM"},"(3002,0003)":{tag:"(3002,0003)",vr:"LO",name:"RTImageName",vm:"1",version:"DICOM"},"(3002,0004)":{tag:"(3002,0004)",vr:"ST",name:"RTImageDescription",vm:"1",version:"DICOM"},"(3002,000A)":{tag:"(3002,000A)",vr:"CS",name:"ReportedValuesOrigin",vm:"1",version:"DICOM"},"(3002,000C)":{tag:"(3002,000C)",vr:"CS",name:"RTImagePlane",vm:"1",version:"DICOM"},"(3002,000D)":{tag:"(3002,000D)",vr:"DS",name:"XRayImageReceptorTranslation",vm:"3",version:"DICOM"},"(3002,000E)":{tag:"(3002,000E)",vr:"DS",name:"XRayImageReceptorAngle",vm:"1",version:"DICOM"},"(3002,0010)":{tag:"(3002,0010)",vr:"DS",name:"RTImageOrientation",vm:"6",version:"DICOM"},"(3002,0011)":{tag:"(3002,0011)",vr:"DS",name:"ImagePlanePixelSpacing",vm:"2",version:"DICOM"},"(3002,0012)":{tag:"(3002,0012)",vr:"DS",name:"RTImagePosition",vm:"2",version:"DICOM"},"(3002,0020)":{tag:"(3002,0020)",vr:"SH",name:"RadiationMachineName",vm:"1",version:"DICOM"},"(3002,0022)":{tag:"(3002,0022)",vr:"DS",name:"RadiationMachineSAD",vm:"1",version:"DICOM"},"(3002,0024)":{tag:"(3002,0024)",vr:"DS",name:"RadiationMachineSSD",vm:"1",version:"DICOM"},"(3002,0026)":{tag:"(3002,0026)",vr:"DS",name:"RTImageSID",vm:"1",version:"DICOM"},"(3002,0028)":{tag:"(3002,0028)",vr:"DS",name:"SourceToReferenceObjectDistance",vm:"1",version:"DICOM"},"(3002,0029)":{tag:"(3002,0029)",vr:"IS",name:"FractionNumber",vm:"1",version:"DICOM"},"(3002,0030)":{tag:"(3002,0030)",vr:"SQ",name:"ExposureSequence",vm:"1",version:"DICOM"},"(3002,0032)":{tag:"(3002,0032)",vr:"DS",name:"MetersetExposure",vm:"1",version:"DICOM"},"(3002,0034)":{tag:"(3002,0034)",vr:"DS",name:"DiaphragmPosition",vm:"4",version:"DICOM"},"(3002,0040)":{tag:"(3002,0040)",vr:"SQ",name:"FluenceMapSequence",vm:"1",version:"DICOM"},"(3002,0041)":{tag:"(3002,0041)",vr:"CS",name:"FluenceDataSource",vm:"1",version:"DICOM"},"(3002,0042)":{tag:"(3002,0042)",vr:"DS",name:"FluenceDataScale",vm:"1",version:"DICOM"},"(3002,0050)":{tag:"(3002,0050)",vr:"SQ",name:"PrimaryFluenceModeSequence",vm:"1",version:"DICOM"},"(3002,0051)":{tag:"(3002,0051)",vr:"CS",name:"FluenceMode",vm:"1",version:"DICOM"},"(3002,0052)":{tag:"(3002,0052)",vr:"SH",name:"FluenceModeID",vm:"1",version:"DICOM"},"(3004,0001)":{tag:"(3004,0001)",vr:"CS",name:"DVHType",vm:"1",version:"DICOM"},"(3004,0002)":{tag:"(3004,0002)",vr:"CS",name:"DoseUnits",vm:"1",version:"DICOM"},"(3004,0004)":{tag:"(3004,0004)",vr:"CS",name:"DoseType",vm:"1",version:"DICOM"},"(3004,0005)":{tag:"(3004,0005)",vr:"CS",name:"SpatialTransformOfDose",vm:"1",version:"DICOM"},"(3004,0006)":{tag:"(3004,0006)",vr:"LO",name:"DoseComment",vm:"1",version:"DICOM"},"(3004,0008)":{tag:"(3004,0008)",vr:"DS",name:"NormalizationPoint",vm:"3",version:"DICOM"},"(3004,000A)":{tag:"(3004,000A)",vr:"CS",name:"DoseSummationType",vm:"1",version:"DICOM"},"(3004,000C)":{tag:"(3004,000C)",vr:"DS",name:"GridFrameOffsetVector",vm:"2-n",version:"DICOM"},"(3004,000E)":{tag:"(3004,000E)",vr:"DS",name:"DoseGridScaling",vm:"1",version:"DICOM"},"(3004,0010)":{tag:"(3004,0010)",vr:"SQ",name:"RTDoseROISequence",vm:"1",version:"DICOM"},"(3004,0012)":{tag:"(3004,0012)",vr:"DS",name:"DoseValue",vm:"1",version:"DICOM"},"(3004,0014)":{tag:"(3004,0014)",vr:"CS",name:"TissueHeterogeneityCorrection",vm:"1-3",version:"DICOM"},"(3004,0040)":{tag:"(3004,0040)",vr:"DS",name:"DVHNormalizationPoint",vm:"3",version:"DICOM"},"(3004,0042)":{tag:"(3004,0042)",vr:"DS",name:"DVHNormalizationDoseValue",vm:"1",version:"DICOM"},"(3004,0050)":{tag:"(3004,0050)",vr:"SQ",name:"DVHSequence",vm:"1",version:"DICOM"},"(3004,0052)":{tag:"(3004,0052)",vr:"DS",name:"DVHDoseScaling",vm:"1",version:"DICOM"},"(3004,0054)":{tag:"(3004,0054)",vr:"CS",name:"DVHVolumeUnits",vm:"1",version:"DICOM"},"(3004,0056)":{tag:"(3004,0056)",vr:"IS",name:"DVHNumberOfBins",vm:"1",version:"DICOM"},"(3004,0058)":{tag:"(3004,0058)",vr:"DS",name:"DVHData",vm:"2-2n",version:"DICOM"},"(3004,0060)":{tag:"(3004,0060)",vr:"SQ",name:"DVHReferencedROISequence",vm:"1",version:"DICOM"},"(3004,0062)":{tag:"(3004,0062)",vr:"CS",name:"DVHROIContributionType",vm:"1",version:"DICOM"},"(3004,0070)":{tag:"(3004,0070)",vr:"DS",name:"DVHMinimumDose",vm:"1",version:"DICOM"},"(3004,0072)":{tag:"(3004,0072)",vr:"DS",name:"DVHMaximumDose",vm:"1",version:"DICOM"},"(3004,0074)":{tag:"(3004,0074)",vr:"DS",name:"DVHMeanDose",vm:"1",version:"DICOM"},"(3006,0002)":{tag:"(3006,0002)",vr:"SH",name:"StructureSetLabel",vm:"1",version:"DICOM"},"(3006,0004)":{tag:"(3006,0004)",vr:"LO",name:"StructureSetName",vm:"1",version:"DICOM"},"(3006,0006)":{tag:"(3006,0006)",vr:"ST",name:"StructureSetDescription",vm:"1",version:"DICOM"},"(3006,0008)":{tag:"(3006,0008)",vr:"DA",name:"StructureSetDate",vm:"1",version:"DICOM"},"(3006,0009)":{tag:"(3006,0009)",vr:"TM",name:"StructureSetTime",vm:"1",version:"DICOM"},"(3006,0010)":{tag:"(3006,0010)",vr:"SQ",name:"ReferencedFrameOfReferenceSequence",vm:"1",version:"DICOM"},"(3006,0012)":{tag:"(3006,0012)",vr:"SQ",name:"RTReferencedStudySequence",vm:"1",version:"DICOM"},"(3006,0014)":{tag:"(3006,0014)",vr:"SQ",name:"RTReferencedSeriesSequence",vm:"1",version:"DICOM"},"(3006,0016)":{tag:"(3006,0016)",vr:"SQ",name:"ContourImageSequence",vm:"1",version:"DICOM"},"(3006,0018)":{tag:"(3006,0018)",vr:"SQ",name:"PredecessorStructureSetSequence",vm:"1",version:"DICOM"},"(3006,0020)":{tag:"(3006,0020)",vr:"SQ",name:"StructureSetROISequence",vm:"1",version:"DICOM"},"(3006,0022)":{tag:"(3006,0022)",vr:"IS",name:"ROINumber",vm:"1",version:"DICOM"},"(3006,0024)":{tag:"(3006,0024)",vr:"UI",name:"ReferencedFrameOfReferenceUID",vm:"1",version:"DICOM"},"(3006,0026)":{tag:"(3006,0026)",vr:"LO",name:"ROIName",vm:"1",version:"DICOM"},"(3006,0028)":{tag:"(3006,0028)",vr:"ST",name:"ROIDescription",vm:"1",version:"DICOM"},"(3006,002A)":{tag:"(3006,002A)",vr:"IS",name:"ROIDisplayColor",vm:"3",version:"DICOM"},"(3006,002C)":{tag:"(3006,002C)",vr:"DS",name:"ROIVolume",vm:"1",version:"DICOM"},"(3006,0030)":{tag:"(3006,0030)",vr:"SQ",name:"RTRelatedROISequence",vm:"1",version:"DICOM"},"(3006,0033)":{tag:"(3006,0033)",vr:"CS",name:"RTROIRelationship",vm:"1",version:"DICOM"},"(3006,0036)":{tag:"(3006,0036)",vr:"CS",name:"ROIGenerationAlgorithm",vm:"1",version:"DICOM"},"(3006,0037)":{tag:"(3006,0037)",vr:"SQ",name:"ROIDerivationAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(3006,0038)":{tag:"(3006,0038)",vr:"LO",name:"ROIGenerationDescription",vm:"1",version:"DICOM"},"(3006,0039)":{tag:"(3006,0039)",vr:"SQ",name:"ROIContourSequence",vm:"1",version:"DICOM"},"(3006,0040)":{tag:"(3006,0040)",vr:"SQ",name:"ContourSequence",vm:"1",version:"DICOM"},"(3006,0042)":{tag:"(3006,0042)",vr:"CS",name:"ContourGeometricType",vm:"1",version:"DICOM"},"(3006,0044)":{tag:"(3006,0044)",vr:"DS",name:"ContourSlabThickness",vm:"1",version:"DICOM"},"(3006,0045)":{tag:"(3006,0045)",vr:"DS",name:"ContourOffsetVector",vm:"3",version:"DICOM"},"(3006,0046)":{tag:"(3006,0046)",vr:"IS",name:"NumberOfContourPoints",vm:"1",version:"DICOM"},"(3006,0048)":{tag:"(3006,0048)",vr:"IS",name:"ContourNumber",vm:"1",version:"DICOM"},"(3006,0049)":{tag:"(3006,0049)",vr:"IS",name:"AttachedContours",vm:"1-n",version:"DICOM"},"(3006,004A)":{tag:"(3006,004A)",vr:"SQ",name:"SourcePixelPlanesCharacteristicsSequence",vm:"1",version:"DICOM"},"(3006,0050)":{tag:"(3006,0050)",vr:"DS",name:"ContourData",vm:"3-3n",version:"DICOM"},"(3006,0080)":{tag:"(3006,0080)",vr:"SQ",name:"RTROIObservationsSequence",vm:"1",version:"DICOM"},"(3006,0082)":{tag:"(3006,0082)",vr:"IS",name:"ObservationNumber",vm:"1",version:"DICOM"},"(3006,0084)":{tag:"(3006,0084)",vr:"IS",name:"ReferencedROINumber",vm:"1",version:"DICOM"},"(3006,0085)":{tag:"(3006,0085)",vr:"SH",name:"ROIObservationLabel",vm:"1",version:"DICOM"},"(3006,0086)":{tag:"(3006,0086)",vr:"SQ",name:"RTROIIdentificationCodeSequence",vm:"1",version:"DICOM"},"(3006,0088)":{tag:"(3006,0088)",vr:"ST",name:"ROIObservationDescription",vm:"1",version:"DICOM"},"(3006,00A0)":{tag:"(3006,00A0)",vr:"SQ",name:"RelatedRTROIObservationsSequence",vm:"1",version:"DICOM"},"(3006,00A4)":{tag:"(3006,00A4)",vr:"CS",name:"RTROIInterpretedType",vm:"1",version:"DICOM"},"(3006,00A6)":{tag:"(3006,00A6)",vr:"PN",name:"ROIInterpreter",vm:"1",version:"DICOM"},"(3006,00B0)":{tag:"(3006,00B0)",vr:"SQ",name:"ROIPhysicalPropertiesSequence",vm:"1",version:"DICOM"},"(3006,00B2)":{tag:"(3006,00B2)",vr:"CS",name:"ROIPhysicalProperty",vm:"1",version:"DICOM"},"(3006,00B4)":{tag:"(3006,00B4)",vr:"DS",name:"ROIPhysicalPropertyValue",vm:"1",version:"DICOM"},"(3006,00B6)":{tag:"(3006,00B6)",vr:"SQ",name:"ROIElementalCompositionSequence",vm:"1",version:"DICOM"},"(3006,00B7)":{tag:"(3006,00B7)",vr:"US",name:"ROIElementalCompositionAtomicNumber",vm:"1",version:"DICOM"},"(3006,00B8)":{tag:"(3006,00B8)",vr:"FL",name:"ROIElementalCompositionAtomicMassFraction",vm:"1",version:"DICOM"},"(3006,00B9)":{tag:"(3006,00B9)",vr:"SQ",name:"AdditionalRTROIIdentificationCodeSequence",vm:"1",version:"DICOM"},"(3006,00C6)":{tag:"(3006,00C6)",vr:"DS",name:"FrameOfReferenceTransformationMatrix",vm:"16",version:"DICOM"},"(3006,00C8)":{tag:"(3006,00C8)",vr:"LO",name:"FrameOfReferenceTransformationComment",vm:"1",version:"DICOM"},"(3006,00C9)":{tag:"(3006,00C9)",vr:"SQ",name:"PatientLocationCoordinatesSequence",vm:"1",version:"DICOM"},"(3006,00CA)":{tag:"(3006,00CA)",vr:"SQ",name:"PatientLocationCoordinatesCodeSequence",vm:"1",version:"DICOM"},"(3006,00CB)":{tag:"(3006,00CB)",vr:"SQ",name:"PatientSupportPositionSequence",vm:"1",version:"DICOM"},"(3008,0010)":{tag:"(3008,0010)",vr:"SQ",name:"MeasuredDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0012)":{tag:"(3008,0012)",vr:"ST",name:"MeasuredDoseDescription",vm:"1",version:"DICOM"},"(3008,0014)":{tag:"(3008,0014)",vr:"CS",name:"MeasuredDoseType",vm:"1",version:"DICOM"},"(3008,0016)":{tag:"(3008,0016)",vr:"DS",name:"MeasuredDoseValue",vm:"1",version:"DICOM"},"(3008,0020)":{tag:"(3008,0020)",vr:"SQ",name:"TreatmentSessionBeamSequence",vm:"1",version:"DICOM"},"(3008,0021)":{tag:"(3008,0021)",vr:"SQ",name:"TreatmentSessionIonBeamSequence",vm:"1",version:"DICOM"},"(3008,0022)":{tag:"(3008,0022)",vr:"IS",name:"CurrentFractionNumber",vm:"1",version:"DICOM"},"(3008,0024)":{tag:"(3008,0024)",vr:"DA",name:"TreatmentControlPointDate",vm:"1",version:"DICOM"},"(3008,0025)":{tag:"(3008,0025)",vr:"TM",name:"TreatmentControlPointTime",vm:"1",version:"DICOM"},"(3008,002A)":{tag:"(3008,002A)",vr:"CS",name:"TreatmentTerminationStatus",vm:"1",version:"DICOM"},"(3008,002B)":{tag:"(3008,002B)",vr:"SH",name:"TreatmentTerminationCode",vm:"1",version:"DICOM"},"(3008,002C)":{tag:"(3008,002C)",vr:"CS",name:"TreatmentVerificationStatus",vm:"1",version:"DICOM"},"(3008,0030)":{tag:"(3008,0030)",vr:"SQ",name:"ReferencedTreatmentRecordSequence",vm:"1",version:"DICOM"},"(3008,0032)":{tag:"(3008,0032)",vr:"DS",name:"SpecifiedPrimaryMeterset",vm:"1",version:"DICOM"},"(3008,0033)":{tag:"(3008,0033)",vr:"DS",name:"SpecifiedSecondaryMeterset",vm:"1",version:"DICOM"},"(3008,0036)":{tag:"(3008,0036)",vr:"DS",name:"DeliveredPrimaryMeterset",vm:"1",version:"DICOM"},"(3008,0037)":{tag:"(3008,0037)",vr:"DS",name:"DeliveredSecondaryMeterset",vm:"1",version:"DICOM"},"(3008,003A)":{tag:"(3008,003A)",vr:"DS",name:"SpecifiedTreatmentTime",vm:"1",version:"DICOM"},"(3008,003B)":{tag:"(3008,003B)",vr:"DS",name:"DeliveredTreatmentTime",vm:"1",version:"DICOM"},"(3008,0040)":{tag:"(3008,0040)",vr:"SQ",name:"ControlPointDeliverySequence",vm:"1",version:"DICOM"},"(3008,0041)":{tag:"(3008,0041)",vr:"SQ",name:"IonControlPointDeliverySequence",vm:"1",version:"DICOM"},"(3008,0042)":{tag:"(3008,0042)",vr:"DS",name:"SpecifiedMeterset",vm:"1",version:"DICOM"},"(3008,0044)":{tag:"(3008,0044)",vr:"DS",name:"DeliveredMeterset",vm:"1",version:"DICOM"},"(3008,0045)":{tag:"(3008,0045)",vr:"FL",name:"MetersetRateSet",vm:"1",version:"DICOM"},"(3008,0046)":{tag:"(3008,0046)",vr:"FL",name:"MetersetRateDelivered",vm:"1",version:"DICOM"},"(3008,0047)":{tag:"(3008,0047)",vr:"FL",name:"ScanSpotMetersetsDelivered",vm:"1-n",version:"DICOM"},"(3008,0048)":{tag:"(3008,0048)",vr:"DS",name:"DoseRateDelivered",vm:"1",version:"DICOM"},"(3008,0050)":{tag:"(3008,0050)",vr:"SQ",name:"TreatmentSummaryCalculatedDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0052)":{tag:"(3008,0052)",vr:"DS",name:"CumulativeDoseToDoseReference",vm:"1",version:"DICOM"},"(3008,0054)":{tag:"(3008,0054)",vr:"DA",name:"FirstTreatmentDate",vm:"1",version:"DICOM"},"(3008,0056)":{tag:"(3008,0056)",vr:"DA",name:"MostRecentTreatmentDate",vm:"1",version:"DICOM"},"(3008,005A)":{tag:"(3008,005A)",vr:"IS",name:"NumberOfFractionsDelivered",vm:"1",version:"DICOM"},"(3008,0060)":{tag:"(3008,0060)",vr:"SQ",name:"OverrideSequence",vm:"1",version:"DICOM"},"(3008,0061)":{tag:"(3008,0061)",vr:"AT",name:"ParameterSequencePointer",vm:"1",version:"DICOM"},"(3008,0062)":{tag:"(3008,0062)",vr:"AT",name:"OverrideParameterPointer",vm:"1",version:"DICOM"},"(3008,0063)":{tag:"(3008,0063)",vr:"IS",name:"ParameterItemIndex",vm:"1",version:"DICOM"},"(3008,0064)":{tag:"(3008,0064)",vr:"IS",name:"MeasuredDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,0065)":{tag:"(3008,0065)",vr:"AT",name:"ParameterPointer",vm:"1",version:"DICOM"},"(3008,0066)":{tag:"(3008,0066)",vr:"ST",name:"OverrideReason",vm:"1",version:"DICOM"},"(3008,0067)":{tag:"(3008,0067)",vr:"US",name:"ParameterValueNumber",vm:"1",version:"DICOM"},"(3008,0068)":{tag:"(3008,0068)",vr:"SQ",name:"CorrectedParameterSequence",vm:"1",version:"DICOM"},"(3008,006A)":{tag:"(3008,006A)",vr:"FL",name:"CorrectionValue",vm:"1",version:"DICOM"},"(3008,0070)":{tag:"(3008,0070)",vr:"SQ",name:"CalculatedDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0072)":{tag:"(3008,0072)",vr:"IS",name:"CalculatedDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,0074)":{tag:"(3008,0074)",vr:"ST",name:"CalculatedDoseReferenceDescription",vm:"1",version:"DICOM"},"(3008,0076)":{tag:"(3008,0076)",vr:"DS",name:"CalculatedDoseReferenceDoseValue",vm:"1",version:"DICOM"},"(3008,0078)":{tag:"(3008,0078)",vr:"DS",name:"StartMeterset",vm:"1",version:"DICOM"},"(3008,007A)":{tag:"(3008,007A)",vr:"DS",name:"EndMeterset",vm:"1",version:"DICOM"},"(3008,0080)":{tag:"(3008,0080)",vr:"SQ",name:"ReferencedMeasuredDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0082)":{tag:"(3008,0082)",vr:"IS",name:"ReferencedMeasuredDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,0090)":{tag:"(3008,0090)",vr:"SQ",name:"ReferencedCalculatedDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0092)":{tag:"(3008,0092)",vr:"IS",name:"ReferencedCalculatedDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,00A0)":{tag:"(3008,00A0)",vr:"SQ",name:"BeamLimitingDeviceLeafPairsSequence",vm:"1",version:"DICOM"},"(3008,00B0)":{tag:"(3008,00B0)",vr:"SQ",name:"RecordedWedgeSequence",vm:"1",version:"DICOM"},"(3008,00C0)":{tag:"(3008,00C0)",vr:"SQ",name:"RecordedCompensatorSequence",vm:"1",version:"DICOM"},"(3008,00D0)":{tag:"(3008,00D0)",vr:"SQ",name:"RecordedBlockSequence",vm:"1",version:"DICOM"},"(3008,00E0)":{tag:"(3008,00E0)",vr:"SQ",name:"TreatmentSummaryMeasuredDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,00F0)":{tag:"(3008,00F0)",vr:"SQ",name:"RecordedSnoutSequence",vm:"1",version:"DICOM"},"(3008,00F2)":{tag:"(3008,00F2)",vr:"SQ",name:"RecordedRangeShifterSequence",vm:"1",version:"DICOM"},"(3008,00F4)":{tag:"(3008,00F4)",vr:"SQ",name:"RecordedLateralSpreadingDeviceSequence",vm:"1",version:"DICOM"},"(3008,00F6)":{tag:"(3008,00F6)",vr:"SQ",name:"RecordedRangeModulatorSequence",vm:"1",version:"DICOM"},"(3008,0100)":{tag:"(3008,0100)",vr:"SQ",name:"RecordedSourceSequence",vm:"1",version:"DICOM"},"(3008,0105)":{tag:"(3008,0105)",vr:"LO",name:"SourceSerialNumber",vm:"1",version:"DICOM"},"(3008,0110)":{tag:"(3008,0110)",vr:"SQ",name:"TreatmentSessionApplicationSetupSequence",vm:"1",version:"DICOM"},"(3008,0116)":{tag:"(3008,0116)",vr:"CS",name:"ApplicationSetupCheck",vm:"1",version:"DICOM"},"(3008,0120)":{tag:"(3008,0120)",vr:"SQ",name:"RecordedBrachyAccessoryDeviceSequence",vm:"1",version:"DICOM"},"(3008,0122)":{tag:"(3008,0122)",vr:"IS",name:"ReferencedBrachyAccessoryDeviceNumber",vm:"1",version:"DICOM"},"(3008,0130)":{tag:"(3008,0130)",vr:"SQ",name:"RecordedChannelSequence",vm:"1",version:"DICOM"},"(3008,0132)":{tag:"(3008,0132)",vr:"DS",name:"SpecifiedChannelTotalTime",vm:"1",version:"DICOM"},"(3008,0134)":{tag:"(3008,0134)",vr:"DS",name:"DeliveredChannelTotalTime",vm:"1",version:"DICOM"},"(3008,0136)":{tag:"(3008,0136)",vr:"IS",name:"SpecifiedNumberOfPulses",vm:"1",version:"DICOM"},"(3008,0138)":{tag:"(3008,0138)",vr:"IS",name:"DeliveredNumberOfPulses",vm:"1",version:"DICOM"},"(3008,013A)":{tag:"(3008,013A)",vr:"DS",name:"SpecifiedPulseRepetitionInterval",vm:"1",version:"DICOM"},"(3008,013C)":{tag:"(3008,013C)",vr:"DS",name:"DeliveredPulseRepetitionInterval",vm:"1",version:"DICOM"},"(3008,0140)":{tag:"(3008,0140)",vr:"SQ",name:"RecordedSourceApplicatorSequence",vm:"1",version:"DICOM"},"(3008,0142)":{tag:"(3008,0142)",vr:"IS",name:"ReferencedSourceApplicatorNumber",vm:"1",version:"DICOM"},"(3008,0150)":{tag:"(3008,0150)",vr:"SQ",name:"RecordedChannelShieldSequence",vm:"1",version:"DICOM"},"(3008,0152)":{tag:"(3008,0152)",vr:"IS",name:"ReferencedChannelShieldNumber",vm:"1",version:"DICOM"},"(3008,0160)":{tag:"(3008,0160)",vr:"SQ",name:"BrachyControlPointDeliveredSequence",vm:"1",version:"DICOM"},"(3008,0162)":{tag:"(3008,0162)",vr:"DA",name:"SafePositionExitDate",vm:"1",version:"DICOM"},"(3008,0164)":{tag:"(3008,0164)",vr:"TM",name:"SafePositionExitTime",vm:"1",version:"DICOM"},"(3008,0166)":{tag:"(3008,0166)",vr:"DA",name:"SafePositionReturnDate",vm:"1",version:"DICOM"},"(3008,0168)":{tag:"(3008,0168)",vr:"TM",name:"SafePositionReturnTime",vm:"1",version:"DICOM"},"(3008,0171)":{tag:"(3008,0171)",vr:"SQ",name:"PulseSpecificBrachyControlPointDeliveredSequence",vm:"1",version:"DICOM"},"(3008,0172)":{tag:"(3008,0172)",vr:"US",name:"PulseNumber",vm:"1",version:"DICOM"},"(3008,0173)":{tag:"(3008,0173)",vr:"SQ",name:"BrachyPulseControlPointDeliveredSequence",vm:"1",version:"DICOM"},"(3008,0200)":{tag:"(3008,0200)",vr:"CS",name:"CurrentTreatmentStatus",vm:"1",version:"DICOM"},"(3008,0202)":{tag:"(3008,0202)",vr:"ST",name:"TreatmentStatusComment",vm:"1",version:"DICOM"},"(3008,0220)":{tag:"(3008,0220)",vr:"SQ",name:"FractionGroupSummarySequence",vm:"1",version:"DICOM"},"(3008,0223)":{tag:"(3008,0223)",vr:"IS",name:"ReferencedFractionNumber",vm:"1",version:"DICOM"},"(3008,0224)":{tag:"(3008,0224)",vr:"CS",name:"FractionGroupType",vm:"1",version:"DICOM"},"(3008,0230)":{tag:"(3008,0230)",vr:"CS",name:"BeamStopperPosition",vm:"1",version:"DICOM"},"(3008,0240)":{tag:"(3008,0240)",vr:"SQ",name:"FractionStatusSummarySequence",vm:"1",version:"DICOM"},"(3008,0250)":{tag:"(3008,0250)",vr:"DA",name:"TreatmentDate",vm:"1",version:"DICOM"},"(3008,0251)":{tag:"(3008,0251)",vr:"TM",name:"TreatmentTime",vm:"1",version:"DICOM"},"(300A,0002)":{tag:"(300A,0002)",vr:"SH",name:"RTPlanLabel",vm:"1",version:"DICOM"},"(300A,0003)":{tag:"(300A,0003)",vr:"LO",name:"RTPlanName",vm:"1",version:"DICOM"},"(300A,0004)":{tag:"(300A,0004)",vr:"ST",name:"RTPlanDescription",vm:"1",version:"DICOM"},"(300A,0006)":{tag:"(300A,0006)",vr:"DA",name:"RTPlanDate",vm:"1",version:"DICOM"},"(300A,0007)":{tag:"(300A,0007)",vr:"TM",name:"RTPlanTime",vm:"1",version:"DICOM"},"(300A,0009)":{tag:"(300A,0009)",vr:"LO",name:"TreatmentProtocols",vm:"1-n",version:"DICOM"},"(300A,000A)":{tag:"(300A,000A)",vr:"CS",name:"PlanIntent",vm:"1",version:"DICOM"},"(300A,000B)":{tag:"(300A,000B)",vr:"LO",name:"TreatmentSites",vm:"1-n",version:"DICOM"},"(300A,000C)":{tag:"(300A,000C)",vr:"CS",name:"RTPlanGeometry",vm:"1",version:"DICOM"},"(300A,000E)":{tag:"(300A,000E)",vr:"ST",name:"PrescriptionDescription",vm:"1",version:"DICOM"},"(300A,0010)":{tag:"(300A,0010)",vr:"SQ",name:"DoseReferenceSequence",vm:"1",version:"DICOM"},"(300A,0012)":{tag:"(300A,0012)",vr:"IS",name:"DoseReferenceNumber",vm:"1",version:"DICOM"},"(300A,0013)":{tag:"(300A,0013)",vr:"UI",name:"DoseReferenceUID",vm:"1",version:"DICOM"},"(300A,0014)":{tag:"(300A,0014)",vr:"CS",name:"DoseReferenceStructureType",vm:"1",version:"DICOM"},"(300A,0015)":{tag:"(300A,0015)",vr:"CS",name:"NominalBeamEnergyUnit",vm:"1",version:"DICOM"},"(300A,0016)":{tag:"(300A,0016)",vr:"LO",name:"DoseReferenceDescription",vm:"1",version:"DICOM"},"(300A,0018)":{tag:"(300A,0018)",vr:"DS",name:"DoseReferencePointCoordinates",vm:"3",version:"DICOM"},"(300A,001A)":{tag:"(300A,001A)",vr:"DS",name:"NominalPriorDose",vm:"1",version:"DICOM"},"(300A,0020)":{tag:"(300A,0020)",vr:"CS",name:"DoseReferenceType",vm:"1",version:"DICOM"},"(300A,0021)":{tag:"(300A,0021)",vr:"DS",name:"ConstraintWeight",vm:"1",version:"DICOM"},"(300A,0022)":{tag:"(300A,0022)",vr:"DS",name:"DeliveryWarningDose",vm:"1",version:"DICOM"},"(300A,0023)":{tag:"(300A,0023)",vr:"DS",name:"DeliveryMaximumDose",vm:"1",version:"DICOM"},"(300A,0025)":{tag:"(300A,0025)",vr:"DS",name:"TargetMinimumDose",vm:"1",version:"DICOM"},"(300A,0026)":{tag:"(300A,0026)",vr:"DS",name:"TargetPrescriptionDose",vm:"1",version:"DICOM"},"(300A,0027)":{tag:"(300A,0027)",vr:"DS",name:"TargetMaximumDose",vm:"1",version:"DICOM"},"(300A,0028)":{tag:"(300A,0028)",vr:"DS",name:"TargetUnderdoseVolumeFraction",vm:"1",version:"DICOM"},"(300A,002A)":{tag:"(300A,002A)",vr:"DS",name:"OrganAtRiskFullVolumeDose",vm:"1",version:"DICOM"},"(300A,002B)":{tag:"(300A,002B)",vr:"DS",name:"OrganAtRiskLimitDose",vm:"1",version:"DICOM"},"(300A,002C)":{tag:"(300A,002C)",vr:"DS",name:"OrganAtRiskMaximumDose",vm:"1",version:"DICOM"},"(300A,002D)":{tag:"(300A,002D)",vr:"DS",name:"OrganAtRiskOverdoseVolumeFraction",vm:"1",version:"DICOM"},"(300A,0040)":{tag:"(300A,0040)",vr:"SQ",name:"ToleranceTableSequence",vm:"1",version:"DICOM"},"(300A,0042)":{tag:"(300A,0042)",vr:"IS",name:"ToleranceTableNumber",vm:"1",version:"DICOM"},"(300A,0043)":{tag:"(300A,0043)",vr:"SH",name:"ToleranceTableLabel",vm:"1",version:"DICOM"},"(300A,0044)":{tag:"(300A,0044)",vr:"DS",name:"GantryAngleTolerance",vm:"1",version:"DICOM"},"(300A,0046)":{tag:"(300A,0046)",vr:"DS",name:"BeamLimitingDeviceAngleTolerance",vm:"1",version:"DICOM"},"(300A,0048)":{tag:"(300A,0048)",vr:"SQ",name:"BeamLimitingDeviceToleranceSequence",vm:"1",version:"DICOM"},"(300A,004A)":{tag:"(300A,004A)",vr:"DS",name:"BeamLimitingDevicePositionTolerance",vm:"1",version:"DICOM"},"(300A,004B)":{tag:"(300A,004B)",vr:"FL",name:"SnoutPositionTolerance",vm:"1",version:"DICOM"},"(300A,004C)":{tag:"(300A,004C)",vr:"DS",name:"PatientSupportAngleTolerance",vm:"1",version:"DICOM"},"(300A,004E)":{tag:"(300A,004E)",vr:"DS",name:"TableTopEccentricAngleTolerance",vm:"1",version:"DICOM"},"(300A,004F)":{tag:"(300A,004F)",vr:"FL",name:"TableTopPitchAngleTolerance",vm:"1",version:"DICOM"},"(300A,0050)":{tag:"(300A,0050)",vr:"FL",name:"TableTopRollAngleTolerance",vm:"1",version:"DICOM"},"(300A,0051)":{tag:"(300A,0051)",vr:"DS",name:"TableTopVerticalPositionTolerance",vm:"1",version:"DICOM"},"(300A,0052)":{tag:"(300A,0052)",vr:"DS",name:"TableTopLongitudinalPositionTolerance",vm:"1",version:"DICOM"},"(300A,0053)":{tag:"(300A,0053)",vr:"DS",name:"TableTopLateralPositionTolerance",vm:"1",version:"DICOM"},"(300A,0055)":{tag:"(300A,0055)",vr:"CS",name:"RTPlanRelationship",vm:"1",version:"DICOM"},"(300A,0070)":{tag:"(300A,0070)",vr:"SQ",name:"FractionGroupSequence",vm:"1",version:"DICOM"},"(300A,0071)":{tag:"(300A,0071)",vr:"IS",name:"FractionGroupNumber",vm:"1",version:"DICOM"},"(300A,0072)":{tag:"(300A,0072)",vr:"LO",name:"FractionGroupDescription",vm:"1",version:"DICOM"},"(300A,0078)":{tag:"(300A,0078)",vr:"IS",name:"NumberOfFractionsPlanned",vm:"1",version:"DICOM"},"(300A,0079)":{tag:"(300A,0079)",vr:"IS",name:"NumberOfFractionPatternDigitsPerDay",vm:"1",version:"DICOM"},"(300A,007A)":{tag:"(300A,007A)",vr:"IS",name:"RepeatFractionCycleLength",vm:"1",version:"DICOM"},"(300A,007B)":{tag:"(300A,007B)",vr:"LT",name:"FractionPattern",vm:"1",version:"DICOM"},"(300A,0080)":{tag:"(300A,0080)",vr:"IS",name:"NumberOfBeams",vm:"1",version:"DICOM"},"(300A,0082)":{tag:"(300A,0082)",vr:"DS",name:"BeamDoseSpecificationPoint",vm:"3",version:"DICOM"},"(300A,0083)":{tag:"(300A,0083)",vr:"UI",name:"ReferencedDoseReferenceUID",vm:"1",version:"DICOM"},"(300A,0084)":{tag:"(300A,0084)",vr:"DS",name:"BeamDose",vm:"1",version:"DICOM"},"(300A,0086)":{tag:"(300A,0086)",vr:"DS",name:"BeamMeterset",vm:"1",version:"DICOM"},"(300A,008B)":{tag:"(300A,008B)",vr:"CS",name:"BeamDoseMeaning",vm:"1",version:"DICOM"},"(300A,008C)":{tag:"(300A,008C)",vr:"SQ",name:"BeamDoseVerificationControlPointSequence",vm:"1",version:"DICOM"},"(300A,008D)":{tag:"(300A,008D)",vr:"FL",name:"AverageBeamDosePointDepth",vm:"1",version:"DICOM"},"(300A,008E)":{tag:"(300A,008E)",vr:"FL",name:"AverageBeamDosePointEquivalentDepth",vm:"1",version:"DICOM"},"(300A,008F)":{tag:"(300A,008F)",vr:"FL",name:"AverageBeamDosePointSSD",vm:"1",version:"DICOM"},"(300A,0090)":{tag:"(300A,0090)",vr:"CS",name:"BeamDoseType",vm:"1",version:"DICOM"},"(300A,0091)":{tag:"(300A,0091)",vr:"DS",name:"AlternateBeamDose",vm:"1",version:"DICOM"},"(300A,0092)":{tag:"(300A,0092)",vr:"CS",name:"AlternateBeamDoseType",vm:"1",version:"DICOM"},"(300A,0093)":{tag:"(300A,0093)",vr:"CS",name:"DepthValueAveragingFlag",vm:"1",version:"DICOM"},"(300A,0094)":{tag:"(300A,0094)",vr:"DS",name:"BeamDosePointSourceToExternalContourDistance",vm:"1",version:"DICOM"},"(300A,00A0)":{tag:"(300A,00A0)",vr:"IS",name:"NumberOfBrachyApplicationSetups",vm:"1",version:"DICOM"},"(300A,00A2)":{tag:"(300A,00A2)",vr:"DS",name:"BrachyApplicationSetupDoseSpecificationPoint",vm:"3",version:"DICOM"},"(300A,00A4)":{tag:"(300A,00A4)",vr:"DS",name:"BrachyApplicationSetupDose",vm:"1",version:"DICOM"},"(300A,00B0)":{tag:"(300A,00B0)",vr:"SQ",name:"BeamSequence",vm:"1",version:"DICOM"},"(300A,00B2)":{tag:"(300A,00B2)",vr:"SH",name:"TreatmentMachineName",vm:"1",version:"DICOM"},"(300A,00B3)":{tag:"(300A,00B3)",vr:"CS",name:"PrimaryDosimeterUnit",vm:"1",version:"DICOM"},"(300A,00B4)":{tag:"(300A,00B4)",vr:"DS",name:"SourceAxisDistance",vm:"1",version:"DICOM"},"(300A,00B6)":{tag:"(300A,00B6)",vr:"SQ",name:"BeamLimitingDeviceSequence",vm:"1",version:"DICOM"},"(300A,00B8)":{tag:"(300A,00B8)",vr:"CS",name:"RTBeamLimitingDeviceType",vm:"1",version:"DICOM"},"(300A,00BA)":{tag:"(300A,00BA)",vr:"DS",name:"SourceToBeamLimitingDeviceDistance",vm:"1",version:"DICOM"},"(300A,00BB)":{tag:"(300A,00BB)",vr:"FL",name:"IsocenterToBeamLimitingDeviceDistance",vm:"1",version:"DICOM"},"(300A,00BC)":{tag:"(300A,00BC)",vr:"IS",name:"NumberOfLeafJawPairs",vm:"1",version:"DICOM"},"(300A,00BE)":{tag:"(300A,00BE)",vr:"DS",name:"LeafPositionBoundaries",vm:"3-n",version:"DICOM"},"(300A,00C0)":{tag:"(300A,00C0)",vr:"IS",name:"BeamNumber",vm:"1",version:"DICOM"},"(300A,00C2)":{tag:"(300A,00C2)",vr:"LO",name:"BeamName",vm:"1",version:"DICOM"},"(300A,00C3)":{tag:"(300A,00C3)",vr:"ST",name:"BeamDescription",vm:"1",version:"DICOM"},"(300A,00C4)":{tag:"(300A,00C4)",vr:"CS",name:"BeamType",vm:"1",version:"DICOM"},"(300A,00C5)":{tag:"(300A,00C5)",vr:"FD",name:"BeamDeliveryDurationLimit",vm:"1",version:"DICOM"},"(300A,00C6)":{tag:"(300A,00C6)",vr:"CS",name:"RadiationType",vm:"1",version:"DICOM"},"(300A,00C7)":{tag:"(300A,00C7)",vr:"CS",name:"HighDoseTechniqueType",vm:"1",version:"DICOM"},"(300A,00C8)":{tag:"(300A,00C8)",vr:"IS",name:"ReferenceImageNumber",vm:"1",version:"DICOM"},"(300A,00CA)":{tag:"(300A,00CA)",vr:"SQ",name:"PlannedVerificationImageSequence",vm:"1",version:"DICOM"},"(300A,00CC)":{tag:"(300A,00CC)",vr:"LO",name:"ImagingDeviceSpecificAcquisitionParameters",vm:"1-n",version:"DICOM"},"(300A,00CE)":{tag:"(300A,00CE)",vr:"CS",name:"TreatmentDeliveryType",vm:"1",version:"DICOM"},"(300A,00D0)":{tag:"(300A,00D0)",vr:"IS",name:"NumberOfWedges",vm:"1",version:"DICOM"},"(300A,00D1)":{tag:"(300A,00D1)",vr:"SQ",name:"WedgeSequence",vm:"1",version:"DICOM"},"(300A,00D2)":{tag:"(300A,00D2)",vr:"IS",name:"WedgeNumber",vm:"1",version:"DICOM"},"(300A,00D3)":{tag:"(300A,00D3)",vr:"CS",name:"WedgeType",vm:"1",version:"DICOM"},"(300A,00D4)":{tag:"(300A,00D4)",vr:"SH",name:"WedgeID",vm:"1",version:"DICOM"},"(300A,00D5)":{tag:"(300A,00D5)",vr:"IS",name:"WedgeAngle",vm:"1",version:"DICOM"},"(300A,00D6)":{tag:"(300A,00D6)",vr:"DS",name:"WedgeFactor",vm:"1",version:"DICOM"},"(300A,00D7)":{tag:"(300A,00D7)",vr:"FL",name:"TotalWedgeTrayWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,00D8)":{tag:"(300A,00D8)",vr:"DS",name:"WedgeOrientation",vm:"1",version:"DICOM"},"(300A,00D9)":{tag:"(300A,00D9)",vr:"FL",name:"IsocenterToWedgeTrayDistance",vm:"1",version:"DICOM"},"(300A,00DA)":{tag:"(300A,00DA)",vr:"DS",name:"SourceToWedgeTrayDistance",vm:"1",version:"DICOM"},"(300A,00DB)":{tag:"(300A,00DB)",vr:"FL",name:"WedgeThinEdgePosition",vm:"1",version:"DICOM"},"(300A,00DC)":{tag:"(300A,00DC)",vr:"SH",name:"BolusID",vm:"1",version:"DICOM"},"(300A,00DD)":{tag:"(300A,00DD)",vr:"ST",name:"BolusDescription",vm:"1",version:"DICOM"},"(300A,00DE)":{tag:"(300A,00DE)",vr:"DS",name:"EffectiveWedgeAngle",vm:"1",version:"DICOM"},"(300A,00E0)":{tag:"(300A,00E0)",vr:"IS",name:"NumberOfCompensators",vm:"1",version:"DICOM"},"(300A,00E1)":{tag:"(300A,00E1)",vr:"SH",name:"MaterialID",vm:"1",version:"DICOM"},"(300A,00E2)":{tag:"(300A,00E2)",vr:"DS",name:"TotalCompensatorTrayFactor",vm:"1",version:"DICOM"},"(300A,00E3)":{tag:"(300A,00E3)",vr:"SQ",name:"CompensatorSequence",vm:"1",version:"DICOM"},"(300A,00E4)":{tag:"(300A,00E4)",vr:"IS",name:"CompensatorNumber",vm:"1",version:"DICOM"},"(300A,00E5)":{tag:"(300A,00E5)",vr:"SH",name:"CompensatorID",vm:"1",version:"DICOM"},"(300A,00E6)":{tag:"(300A,00E6)",vr:"DS",name:"SourceToCompensatorTrayDistance",vm:"1",version:"DICOM"},"(300A,00E7)":{tag:"(300A,00E7)",vr:"IS",name:"CompensatorRows",vm:"1",version:"DICOM"},"(300A,00E8)":{tag:"(300A,00E8)",vr:"IS",name:"CompensatorColumns",vm:"1",version:"DICOM"},"(300A,00E9)":{tag:"(300A,00E9)",vr:"DS",name:"CompensatorPixelSpacing",vm:"2",version:"DICOM"},"(300A,00EA)":{tag:"(300A,00EA)",vr:"DS",name:"CompensatorPosition",vm:"2",version:"DICOM"},"(300A,00EB)":{tag:"(300A,00EB)",vr:"DS",name:"CompensatorTransmissionData",vm:"1-n",version:"DICOM"},"(300A,00EC)":{tag:"(300A,00EC)",vr:"DS",name:"CompensatorThicknessData",vm:"1-n",version:"DICOM"},"(300A,00ED)":{tag:"(300A,00ED)",vr:"IS",name:"NumberOfBoli",vm:"1",version:"DICOM"},"(300A,00EE)":{tag:"(300A,00EE)",vr:"CS",name:"CompensatorType",vm:"1",version:"DICOM"},"(300A,00EF)":{tag:"(300A,00EF)",vr:"SH",name:"CompensatorTrayID",vm:"1",version:"DICOM"},"(300A,00F0)":{tag:"(300A,00F0)",vr:"IS",name:"NumberOfBlocks",vm:"1",version:"DICOM"},"(300A,00F2)":{tag:"(300A,00F2)",vr:"DS",name:"TotalBlockTrayFactor",vm:"1",version:"DICOM"},"(300A,00F3)":{tag:"(300A,00F3)",vr:"FL",name:"TotalBlockTrayWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,00F4)":{tag:"(300A,00F4)",vr:"SQ",name:"BlockSequence",vm:"1",version:"DICOM"},"(300A,00F5)":{tag:"(300A,00F5)",vr:"SH",name:"BlockTrayID",vm:"1",version:"DICOM"},"(300A,00F6)":{tag:"(300A,00F6)",vr:"DS",name:"SourceToBlockTrayDistance",vm:"1",version:"DICOM"},"(300A,00F7)":{tag:"(300A,00F7)",vr:"FL",name:"IsocenterToBlockTrayDistance",vm:"1",version:"DICOM"},"(300A,00F8)":{tag:"(300A,00F8)",vr:"CS",name:"BlockType",vm:"1",version:"DICOM"},"(300A,00F9)":{tag:"(300A,00F9)",vr:"LO",name:"AccessoryCode",vm:"1",version:"DICOM"},"(300A,00FA)":{tag:"(300A,00FA)",vr:"CS",name:"BlockDivergence",vm:"1",version:"DICOM"},"(300A,00FB)":{tag:"(300A,00FB)",vr:"CS",name:"BlockMountingPosition",vm:"1",version:"DICOM"},"(300A,00FC)":{tag:"(300A,00FC)",vr:"IS",name:"BlockNumber",vm:"1",version:"DICOM"},"(300A,00FE)":{tag:"(300A,00FE)",vr:"LO",name:"BlockName",vm:"1",version:"DICOM"},"(300A,0100)":{tag:"(300A,0100)",vr:"DS",name:"BlockThickness",vm:"1",version:"DICOM"},"(300A,0102)":{tag:"(300A,0102)",vr:"DS",name:"BlockTransmission",vm:"1",version:"DICOM"},"(300A,0104)":{tag:"(300A,0104)",vr:"IS",name:"BlockNumberOfPoints",vm:"1",version:"DICOM"},"(300A,0106)":{tag:"(300A,0106)",vr:"DS",name:"BlockData",vm:"2-2n",version:"DICOM"},"(300A,0107)":{tag:"(300A,0107)",vr:"SQ",name:"ApplicatorSequence",vm:"1",version:"DICOM"},"(300A,0108)":{tag:"(300A,0108)",vr:"SH",name:"ApplicatorID",vm:"1",version:"DICOM"},"(300A,0109)":{tag:"(300A,0109)",vr:"CS",name:"ApplicatorType",vm:"1",version:"DICOM"},"(300A,010A)":{tag:"(300A,010A)",vr:"LO",name:"ApplicatorDescription",vm:"1",version:"DICOM"},"(300A,010C)":{tag:"(300A,010C)",vr:"DS",name:"CumulativeDoseReferenceCoefficient",vm:"1",version:"DICOM"},"(300A,010E)":{tag:"(300A,010E)",vr:"DS",name:"FinalCumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300A,0110)":{tag:"(300A,0110)",vr:"IS",name:"NumberOfControlPoints",vm:"1",version:"DICOM"},"(300A,0111)":{tag:"(300A,0111)",vr:"SQ",name:"ControlPointSequence",vm:"1",version:"DICOM"},"(300A,0112)":{tag:"(300A,0112)",vr:"IS",name:"ControlPointIndex",vm:"1",version:"DICOM"},"(300A,0114)":{tag:"(300A,0114)",vr:"DS",name:"NominalBeamEnergy",vm:"1",version:"DICOM"},"(300A,0115)":{tag:"(300A,0115)",vr:"DS",name:"DoseRateSet",vm:"1",version:"DICOM"},"(300A,0116)":{tag:"(300A,0116)",vr:"SQ",name:"WedgePositionSequence",vm:"1",version:"DICOM"},"(300A,0118)":{tag:"(300A,0118)",vr:"CS",name:"WedgePosition",vm:"1",version:"DICOM"},"(300A,011A)":{tag:"(300A,011A)",vr:"SQ",name:"BeamLimitingDevicePositionSequence",vm:"1",version:"DICOM"},"(300A,011C)":{tag:"(300A,011C)",vr:"DS",name:"LeafJawPositions",vm:"2-2n",version:"DICOM"},"(300A,011E)":{tag:"(300A,011E)",vr:"DS",name:"GantryAngle",vm:"1",version:"DICOM"},"(300A,011F)":{tag:"(300A,011F)",vr:"CS",name:"GantryRotationDirection",vm:"1",version:"DICOM"},"(300A,0120)":{tag:"(300A,0120)",vr:"DS",name:"BeamLimitingDeviceAngle",vm:"1",version:"DICOM"},"(300A,0121)":{tag:"(300A,0121)",vr:"CS",name:"BeamLimitingDeviceRotationDirection",vm:"1",version:"DICOM"},"(300A,0122)":{tag:"(300A,0122)",vr:"DS",name:"PatientSupportAngle",vm:"1",version:"DICOM"},"(300A,0123)":{tag:"(300A,0123)",vr:"CS",name:"PatientSupportRotationDirection",vm:"1",version:"DICOM"},"(300A,0124)":{tag:"(300A,0124)",vr:"DS",name:"TableTopEccentricAxisDistance",vm:"1",version:"DICOM"},"(300A,0125)":{tag:"(300A,0125)",vr:"DS",name:"TableTopEccentricAngle",vm:"1",version:"DICOM"},"(300A,0126)":{tag:"(300A,0126)",vr:"CS",name:"TableTopEccentricRotationDirection",vm:"1",version:"DICOM"},"(300A,0128)":{tag:"(300A,0128)",vr:"DS",name:"TableTopVerticalPosition",vm:"1",version:"DICOM"},"(300A,0129)":{tag:"(300A,0129)",vr:"DS",name:"TableTopLongitudinalPosition",vm:"1",version:"DICOM"},"(300A,012A)":{tag:"(300A,012A)",vr:"DS",name:"TableTopLateralPosition",vm:"1",version:"DICOM"},"(300A,012C)":{tag:"(300A,012C)",vr:"DS",name:"IsocenterPosition",vm:"3",version:"DICOM"},"(300A,012E)":{tag:"(300A,012E)",vr:"DS",name:"SurfaceEntryPoint",vm:"3",version:"DICOM"},"(300A,0130)":{tag:"(300A,0130)",vr:"DS",name:"SourceToSurfaceDistance",vm:"1",version:"DICOM"},"(300A,0131)":{tag:"(300A,0131)",vr:"FL",name:"AverageBeamDosePointSourceToExternalContourSurfaceDistance",vm:"1",version:"DICOM"},"(300A,0132)":{tag:"(300A,0132)",vr:"FL",name:"SourceToExternalContourDistance",vm:"1",version:"DICOM"},"(300A,0133)":{tag:"(300A,0133)",vr:"FL",name:"ExternalContourEntryPoint",vm:"3",version:"DICOM"},"(300A,0134)":{tag:"(300A,0134)",vr:"DS",name:"CumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300A,0140)":{tag:"(300A,0140)",vr:"FL",name:"TableTopPitchAngle",vm:"1",version:"DICOM"},"(300A,0142)":{tag:"(300A,0142)",vr:"CS",name:"TableTopPitchRotationDirection",vm:"1",version:"DICOM"},"(300A,0144)":{tag:"(300A,0144)",vr:"FL",name:"TableTopRollAngle",vm:"1",version:"DICOM"},"(300A,0146)":{tag:"(300A,0146)",vr:"CS",name:"TableTopRollRotationDirection",vm:"1",version:"DICOM"},"(300A,0148)":{tag:"(300A,0148)",vr:"FL",name:"HeadFixationAngle",vm:"1",version:"DICOM"},"(300A,014A)":{tag:"(300A,014A)",vr:"FL",name:"GantryPitchAngle",vm:"1",version:"DICOM"},"(300A,014C)":{tag:"(300A,014C)",vr:"CS",name:"GantryPitchRotationDirection",vm:"1",version:"DICOM"},"(300A,014E)":{tag:"(300A,014E)",vr:"FL",name:"GantryPitchAngleTolerance",vm:"1",version:"DICOM"},"(300A,0150)":{tag:"(300A,0150)",vr:"CS",name:"FixationEye",vm:"1",version:"DICOM"},"(300A,0151)":{tag:"(300A,0151)",vr:"DS",name:"ChairHeadFramePosition",vm:"1",version:"DICOM"},"(300A,0152)":{tag:"(300A,0152)",vr:"DS",name:"HeadFixationAngleTolerance",vm:"1",version:"DICOM"},"(300A,0153)":{tag:"(300A,0153)",vr:"DS",name:"ChairHeadFramePositionTolerance",vm:"1",version:"DICOM"},"(300A,0154)":{tag:"(300A,0154)",vr:"DS",name:"FixationLightAzimuthalAngleTolerance",vm:"1",version:"DICOM"},"(300A,0155)":{tag:"(300A,0155)",vr:"DS",name:"FixationLightPolarAngleTolerance",vm:"1",version:"DICOM"},"(300A,0180)":{tag:"(300A,0180)",vr:"SQ",name:"PatientSetupSequence",vm:"1",version:"DICOM"},"(300A,0182)":{tag:"(300A,0182)",vr:"IS",name:"PatientSetupNumber",vm:"1",version:"DICOM"},"(300A,0183)":{tag:"(300A,0183)",vr:"LO",name:"PatientSetupLabel",vm:"1",version:"DICOM"},"(300A,0184)":{tag:"(300A,0184)",vr:"LO",name:"PatientAdditionalPosition",vm:"1",version:"DICOM"},"(300A,0190)":{tag:"(300A,0190)",vr:"SQ",name:"FixationDeviceSequence",vm:"1",version:"DICOM"},"(300A,0192)":{tag:"(300A,0192)",vr:"CS",name:"FixationDeviceType",vm:"1",version:"DICOM"},"(300A,0194)":{tag:"(300A,0194)",vr:"SH",name:"FixationDeviceLabel",vm:"1",version:"DICOM"},"(300A,0196)":{tag:"(300A,0196)",vr:"ST",name:"FixationDeviceDescription",vm:"1",version:"DICOM"},"(300A,0198)":{tag:"(300A,0198)",vr:"SH",name:"FixationDevicePosition",vm:"1",version:"DICOM"},"(300A,0199)":{tag:"(300A,0199)",vr:"FL",name:"FixationDevicePitchAngle",vm:"1",version:"DICOM"},"(300A,019A)":{tag:"(300A,019A)",vr:"FL",name:"FixationDeviceRollAngle",vm:"1",version:"DICOM"},"(300A,01A0)":{tag:"(300A,01A0)",vr:"SQ",name:"ShieldingDeviceSequence",vm:"1",version:"DICOM"},"(300A,01A2)":{tag:"(300A,01A2)",vr:"CS",name:"ShieldingDeviceType",vm:"1",version:"DICOM"},"(300A,01A4)":{tag:"(300A,01A4)",vr:"SH",name:"ShieldingDeviceLabel",vm:"1",version:"DICOM"},"(300A,01A6)":{tag:"(300A,01A6)",vr:"ST",name:"ShieldingDeviceDescription",vm:"1",version:"DICOM"},"(300A,01A8)":{tag:"(300A,01A8)",vr:"SH",name:"ShieldingDevicePosition",vm:"1",version:"DICOM"},"(300A,01B0)":{tag:"(300A,01B0)",vr:"CS",name:"SetupTechnique",vm:"1",version:"DICOM"},"(300A,01B2)":{tag:"(300A,01B2)",vr:"ST",name:"SetupTechniqueDescription",vm:"1",version:"DICOM"},"(300A,01B4)":{tag:"(300A,01B4)",vr:"SQ",name:"SetupDeviceSequence",vm:"1",version:"DICOM"},"(300A,01B6)":{tag:"(300A,01B6)",vr:"CS",name:"SetupDeviceType",vm:"1",version:"DICOM"},"(300A,01B8)":{tag:"(300A,01B8)",vr:"SH",name:"SetupDeviceLabel",vm:"1",version:"DICOM"},"(300A,01BA)":{tag:"(300A,01BA)",vr:"ST",name:"SetupDeviceDescription",vm:"1",version:"DICOM"},"(300A,01BC)":{tag:"(300A,01BC)",vr:"DS",name:"SetupDeviceParameter",vm:"1",version:"DICOM"},"(300A,01D0)":{tag:"(300A,01D0)",vr:"ST",name:"SetupReferenceDescription",vm:"1",version:"DICOM"},"(300A,01D2)":{tag:"(300A,01D2)",vr:"DS",name:"TableTopVerticalSetupDisplacement",vm:"1",version:"DICOM"},"(300A,01D4)":{tag:"(300A,01D4)",vr:"DS",name:"TableTopLongitudinalSetupDisplacement",vm:"1",version:"DICOM"},"(300A,01D6)":{tag:"(300A,01D6)",vr:"DS",name:"TableTopLateralSetupDisplacement",vm:"1",version:"DICOM"},"(300A,0200)":{tag:"(300A,0200)",vr:"CS",name:"BrachyTreatmentTechnique",vm:"1",version:"DICOM"},"(300A,0202)":{tag:"(300A,0202)",vr:"CS",name:"BrachyTreatmentType",vm:"1",version:"DICOM"},"(300A,0206)":{tag:"(300A,0206)",vr:"SQ",name:"TreatmentMachineSequence",vm:"1",version:"DICOM"},"(300A,0210)":{tag:"(300A,0210)",vr:"SQ",name:"SourceSequence",vm:"1",version:"DICOM"},"(300A,0212)":{tag:"(300A,0212)",vr:"IS",name:"SourceNumber",vm:"1",version:"DICOM"},"(300A,0214)":{tag:"(300A,0214)",vr:"CS",name:"SourceType",vm:"1",version:"DICOM"},"(300A,0216)":{tag:"(300A,0216)",vr:"LO",name:"SourceManufacturer",vm:"1",version:"DICOM"},"(300A,0218)":{tag:"(300A,0218)",vr:"DS",name:"ActiveSourceDiameter",vm:"1",version:"DICOM"},"(300A,021A)":{tag:"(300A,021A)",vr:"DS",name:"ActiveSourceLength",vm:"1",version:"DICOM"},"(300A,021B)":{tag:"(300A,021B)",vr:"SH",name:"SourceModelID",vm:"1",version:"DICOM"},"(300A,021C)":{tag:"(300A,021C)",vr:"LO",name:"SourceDescription",vm:"1",version:"DICOM"},"(300A,0222)":{tag:"(300A,0222)",vr:"DS",name:"SourceEncapsulationNominalThickness",vm:"1",version:"DICOM"},"(300A,0224)":{tag:"(300A,0224)",vr:"DS",name:"SourceEncapsulationNominalTransmission",vm:"1",version:"DICOM"},"(300A,0226)":{tag:"(300A,0226)",vr:"LO",name:"SourceIsotopeName",vm:"1",version:"DICOM"},"(300A,0228)":{tag:"(300A,0228)",vr:"DS",name:"SourceIsotopeHalfLife",vm:"1",version:"DICOM"},"(300A,0229)":{tag:"(300A,0229)",vr:"CS",name:"SourceStrengthUnits",vm:"1",version:"DICOM"},"(300A,022A)":{tag:"(300A,022A)",vr:"DS",name:"ReferenceAirKermaRate",vm:"1",version:"DICOM"},"(300A,022B)":{tag:"(300A,022B)",vr:"DS",name:"SourceStrength",vm:"1",version:"DICOM"},"(300A,022C)":{tag:"(300A,022C)",vr:"DA",name:"SourceStrengthReferenceDate",vm:"1",version:"DICOM"},"(300A,022E)":{tag:"(300A,022E)",vr:"TM",name:"SourceStrengthReferenceTime",vm:"1",version:"DICOM"},"(300A,0230)":{tag:"(300A,0230)",vr:"SQ",name:"ApplicationSetupSequence",vm:"1",version:"DICOM"},"(300A,0232)":{tag:"(300A,0232)",vr:"CS",name:"ApplicationSetupType",vm:"1",version:"DICOM"},"(300A,0234)":{tag:"(300A,0234)",vr:"IS",name:"ApplicationSetupNumber",vm:"1",version:"DICOM"},"(300A,0236)":{tag:"(300A,0236)",vr:"LO",name:"ApplicationSetupName",vm:"1",version:"DICOM"},"(300A,0238)":{tag:"(300A,0238)",vr:"LO",name:"ApplicationSetupManufacturer",vm:"1",version:"DICOM"},"(300A,0240)":{tag:"(300A,0240)",vr:"IS",name:"TemplateNumber",vm:"1",version:"DICOM"},"(300A,0242)":{tag:"(300A,0242)",vr:"SH",name:"TemplateType",vm:"1",version:"DICOM"},"(300A,0244)":{tag:"(300A,0244)",vr:"LO",name:"TemplateName",vm:"1",version:"DICOM"},"(300A,0250)":{tag:"(300A,0250)",vr:"DS",name:"TotalReferenceAirKerma",vm:"1",version:"DICOM"},"(300A,0260)":{tag:"(300A,0260)",vr:"SQ",name:"BrachyAccessoryDeviceSequence",vm:"1",version:"DICOM"},"(300A,0262)":{tag:"(300A,0262)",vr:"IS",name:"BrachyAccessoryDeviceNumber",vm:"1",version:"DICOM"},"(300A,0263)":{tag:"(300A,0263)",vr:"SH",name:"BrachyAccessoryDeviceID",vm:"1",version:"DICOM"},"(300A,0264)":{tag:"(300A,0264)",vr:"CS",name:"BrachyAccessoryDeviceType",vm:"1",version:"DICOM"},"(300A,0266)":{tag:"(300A,0266)",vr:"LO",name:"BrachyAccessoryDeviceName",vm:"1",version:"DICOM"},"(300A,026A)":{tag:"(300A,026A)",vr:"DS",name:"BrachyAccessoryDeviceNominalThickness",vm:"1",version:"DICOM"},"(300A,026C)":{tag:"(300A,026C)",vr:"DS",name:"BrachyAccessoryDeviceNominalTransmission",vm:"1",version:"DICOM"},"(300A,0271)":{tag:"(300A,0271)",vr:"DS",name:"ChannelEffectiveLength",vm:"1",version:"DICOM"},"(300A,0272)":{tag:"(300A,0272)",vr:"DS",name:"ChannelInnerLength",vm:"1",version:"DICOM"},"(300A,0273)":{tag:"(300A,0273)",vr:"SH",name:"AfterloaderChannelID",vm:"1",version:"DICOM"},"(300A,0274)":{tag:"(300A,0274)",vr:"DS",name:"SourceApplicatorTipLength",vm:"1",version:"DICOM"},"(300A,0280)":{tag:"(300A,0280)",vr:"SQ",name:"ChannelSequence",vm:"1",version:"DICOM"},"(300A,0282)":{tag:"(300A,0282)",vr:"IS",name:"ChannelNumber",vm:"1",version:"DICOM"},"(300A,0284)":{tag:"(300A,0284)",vr:"DS",name:"ChannelLength",vm:"1",version:"DICOM"},"(300A,0286)":{tag:"(300A,0286)",vr:"DS",name:"ChannelTotalTime",vm:"1",version:"DICOM"},"(300A,0288)":{tag:"(300A,0288)",vr:"CS",name:"SourceMovementType",vm:"1",version:"DICOM"},"(300A,028A)":{tag:"(300A,028A)",vr:"IS",name:"NumberOfPulses",vm:"1",version:"DICOM"},"(300A,028C)":{tag:"(300A,028C)",vr:"DS",name:"PulseRepetitionInterval",vm:"1",version:"DICOM"},"(300A,0290)":{tag:"(300A,0290)",vr:"IS",name:"SourceApplicatorNumber",vm:"1",version:"DICOM"},"(300A,0291)":{tag:"(300A,0291)",vr:"SH",name:"SourceApplicatorID",vm:"1",version:"DICOM"},"(300A,0292)":{tag:"(300A,0292)",vr:"CS",name:"SourceApplicatorType",vm:"1",version:"DICOM"},"(300A,0294)":{tag:"(300A,0294)",vr:"LO",name:"SourceApplicatorName",vm:"1",version:"DICOM"},"(300A,0296)":{tag:"(300A,0296)",vr:"DS",name:"SourceApplicatorLength",vm:"1",version:"DICOM"},"(300A,0298)":{tag:"(300A,0298)",vr:"LO",name:"SourceApplicatorManufacturer",vm:"1",version:"DICOM"},"(300A,029C)":{tag:"(300A,029C)",vr:"DS",name:"SourceApplicatorWallNominalThickness",vm:"1",version:"DICOM"},"(300A,029E)":{tag:"(300A,029E)",vr:"DS",name:"SourceApplicatorWallNominalTransmission",vm:"1",version:"DICOM"},"(300A,02A0)":{tag:"(300A,02A0)",vr:"DS",name:"SourceApplicatorStepSize",vm:"1",version:"DICOM"},"(300A,02A2)":{tag:"(300A,02A2)",vr:"IS",name:"TransferTubeNumber",vm:"1",version:"DICOM"},"(300A,02A4)":{tag:"(300A,02A4)",vr:"DS",name:"TransferTubeLength",vm:"1",version:"DICOM"},"(300A,02B0)":{tag:"(300A,02B0)",vr:"SQ",name:"ChannelShieldSequence",vm:"1",version:"DICOM"},"(300A,02B2)":{tag:"(300A,02B2)",vr:"IS",name:"ChannelShieldNumber",vm:"1",version:"DICOM"},"(300A,02B3)":{tag:"(300A,02B3)",vr:"SH",name:"ChannelShieldID",vm:"1",version:"DICOM"},"(300A,02B4)":{tag:"(300A,02B4)",vr:"LO",name:"ChannelShieldName",vm:"1",version:"DICOM"},"(300A,02B8)":{tag:"(300A,02B8)",vr:"DS",name:"ChannelShieldNominalThickness",vm:"1",version:"DICOM"},"(300A,02BA)":{tag:"(300A,02BA)",vr:"DS",name:"ChannelShieldNominalTransmission",vm:"1",version:"DICOM"},"(300A,02C8)":{tag:"(300A,02C8)",vr:"DS",name:"FinalCumulativeTimeWeight",vm:"1",version:"DICOM"},"(300A,02D0)":{tag:"(300A,02D0)",vr:"SQ",name:"BrachyControlPointSequence",vm:"1",version:"DICOM"},"(300A,02D2)":{tag:"(300A,02D2)",vr:"DS",name:"ControlPointRelativePosition",vm:"1",version:"DICOM"},"(300A,02D4)":{tag:"(300A,02D4)",vr:"DS",name:"ControlPoint3DPosition",vm:"3",version:"DICOM"},"(300A,02D6)":{tag:"(300A,02D6)",vr:"DS",name:"CumulativeTimeWeight",vm:"1",version:"DICOM"},"(300A,02E0)":{tag:"(300A,02E0)",vr:"CS",name:"CompensatorDivergence",vm:"1",version:"DICOM"},"(300A,02E1)":{tag:"(300A,02E1)",vr:"CS",name:"CompensatorMountingPosition",vm:"1",version:"DICOM"},"(300A,02E2)":{tag:"(300A,02E2)",vr:"DS",name:"SourceToCompensatorDistance",vm:"1-n",version:"DICOM"},"(300A,02E3)":{tag:"(300A,02E3)",vr:"FL",name:"TotalCompensatorTrayWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,02E4)":{tag:"(300A,02E4)",vr:"FL",name:"IsocenterToCompensatorTrayDistance",vm:"1",version:"DICOM"},"(300A,02E5)":{tag:"(300A,02E5)",vr:"FL",name:"CompensatorColumnOffset",vm:"1",version:"DICOM"},"(300A,02E6)":{tag:"(300A,02E6)",vr:"FL",name:"IsocenterToCompensatorDistances",vm:"1-n",version:"DICOM"},"(300A,02E7)":{tag:"(300A,02E7)",vr:"FL",name:"CompensatorRelativeStoppingPowerRatio",vm:"1",version:"DICOM"},"(300A,02E8)":{tag:"(300A,02E8)",vr:"FL",name:"CompensatorMillingToolDiameter",vm:"1",version:"DICOM"},"(300A,02EA)":{tag:"(300A,02EA)",vr:"SQ",name:"IonRangeCompensatorSequence",vm:"1",version:"DICOM"},"(300A,02EB)":{tag:"(300A,02EB)",vr:"LT",name:"CompensatorDescription",vm:"1",version:"DICOM"},"(300A,0302)":{tag:"(300A,0302)",vr:"IS",name:"RadiationMassNumber",vm:"1",version:"DICOM"},"(300A,0304)":{tag:"(300A,0304)",vr:"IS",name:"RadiationAtomicNumber",vm:"1",version:"DICOM"},"(300A,0306)":{tag:"(300A,0306)",vr:"SS",name:"RadiationChargeState",vm:"1",version:"DICOM"},"(300A,0308)":{tag:"(300A,0308)",vr:"CS",name:"ScanMode",vm:"1",version:"DICOM"},"(300A,0309)":{tag:"(300A,0309)",vr:"CS",name:"ModulatedScanModeType",vm:"1",version:"DICOM"},"(300A,030A)":{tag:"(300A,030A)",vr:"FL",name:"VirtualSourceAxisDistances",vm:"2",version:"DICOM"},"(300A,030C)":{tag:"(300A,030C)",vr:"SQ",name:"SnoutSequence",vm:"1",version:"DICOM"},"(300A,030D)":{tag:"(300A,030D)",vr:"FL",name:"SnoutPosition",vm:"1",version:"DICOM"},"(300A,030F)":{tag:"(300A,030F)",vr:"SH",name:"SnoutID",vm:"1",version:"DICOM"},"(300A,0312)":{tag:"(300A,0312)",vr:"IS",name:"NumberOfRangeShifters",vm:"1",version:"DICOM"},"(300A,0314)":{tag:"(300A,0314)",vr:"SQ",name:"RangeShifterSequence",vm:"1",version:"DICOM"},"(300A,0316)":{tag:"(300A,0316)",vr:"IS",name:"RangeShifterNumber",vm:"1",version:"DICOM"},"(300A,0318)":{tag:"(300A,0318)",vr:"SH",name:"RangeShifterID",vm:"1",version:"DICOM"},"(300A,0320)":{tag:"(300A,0320)",vr:"CS",name:"RangeShifterType",vm:"1",version:"DICOM"},"(300A,0322)":{tag:"(300A,0322)",vr:"LO",name:"RangeShifterDescription",vm:"1",version:"DICOM"},"(300A,0330)":{tag:"(300A,0330)",vr:"IS",name:"NumberOfLateralSpreadingDevices",vm:"1",version:"DICOM"},"(300A,0332)":{tag:"(300A,0332)",vr:"SQ",name:"LateralSpreadingDeviceSequence",vm:"1",version:"DICOM"},"(300A,0334)":{tag:"(300A,0334)",vr:"IS",name:"LateralSpreadingDeviceNumber",vm:"1",version:"DICOM"},"(300A,0336)":{tag:"(300A,0336)",vr:"SH",name:"LateralSpreadingDeviceID",vm:"1",version:"DICOM"},"(300A,0338)":{tag:"(300A,0338)",vr:"CS",name:"LateralSpreadingDeviceType",vm:"1",version:"DICOM"},"(300A,033A)":{tag:"(300A,033A)",vr:"LO",name:"LateralSpreadingDeviceDescription",vm:"1",version:"DICOM"},"(300A,033C)":{tag:"(300A,033C)",vr:"FL",name:"LateralSpreadingDeviceWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,0340)":{tag:"(300A,0340)",vr:"IS",name:"NumberOfRangeModulators",vm:"1",version:"DICOM"},"(300A,0342)":{tag:"(300A,0342)",vr:"SQ",name:"RangeModulatorSequence",vm:"1",version:"DICOM"},"(300A,0344)":{tag:"(300A,0344)",vr:"IS",name:"RangeModulatorNumber",vm:"1",version:"DICOM"},"(300A,0346)":{tag:"(300A,0346)",vr:"SH",name:"RangeModulatorID",vm:"1",version:"DICOM"},"(300A,0348)":{tag:"(300A,0348)",vr:"CS",name:"RangeModulatorType",vm:"1",version:"DICOM"},"(300A,034A)":{tag:"(300A,034A)",vr:"LO",name:"RangeModulatorDescription",vm:"1",version:"DICOM"},"(300A,034C)":{tag:"(300A,034C)",vr:"SH",name:"BeamCurrentModulationID",vm:"1",version:"DICOM"},"(300A,0350)":{tag:"(300A,0350)",vr:"CS",name:"PatientSupportType",vm:"1",version:"DICOM"},"(300A,0352)":{tag:"(300A,0352)",vr:"SH",name:"PatientSupportID",vm:"1",version:"DICOM"},"(300A,0354)":{tag:"(300A,0354)",vr:"LO",name:"PatientSupportAccessoryCode",vm:"1",version:"DICOM"},"(300A,0355)":{tag:"(300A,0355)",vr:"LO",name:"TrayAccessoryCode",vm:"1",version:"DICOM"},"(300A,0356)":{tag:"(300A,0356)",vr:"FL",name:"FixationLightAzimuthalAngle",vm:"1",version:"DICOM"},"(300A,0358)":{tag:"(300A,0358)",vr:"FL",name:"FixationLightPolarAngle",vm:"1",version:"DICOM"},"(300A,035A)":{tag:"(300A,035A)",vr:"FL",name:"MetersetRate",vm:"1",version:"DICOM"},"(300A,0360)":{tag:"(300A,0360)",vr:"SQ",name:"RangeShifterSettingsSequence",vm:"1",version:"DICOM"},"(300A,0362)":{tag:"(300A,0362)",vr:"LO",name:"RangeShifterSetting",vm:"1",version:"DICOM"},"(300A,0364)":{tag:"(300A,0364)",vr:"FL",name:"IsocenterToRangeShifterDistance",vm:"1",version:"DICOM"},"(300A,0366)":{tag:"(300A,0366)",vr:"FL",name:"RangeShifterWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,0370)":{tag:"(300A,0370)",vr:"SQ",name:"LateralSpreadingDeviceSettingsSequence",vm:"1",version:"DICOM"},"(300A,0372)":{tag:"(300A,0372)",vr:"LO",name:"LateralSpreadingDeviceSetting",vm:"1",version:"DICOM"},"(300A,0374)":{tag:"(300A,0374)",vr:"FL",name:"IsocenterToLateralSpreadingDeviceDistance",vm:"1",version:"DICOM"},"(300A,0380)":{tag:"(300A,0380)",vr:"SQ",name:"RangeModulatorSettingsSequence",vm:"1",version:"DICOM"},"(300A,0382)":{tag:"(300A,0382)",vr:"FL",name:"RangeModulatorGatingStartValue",vm:"1",version:"DICOM"},"(300A,0384)":{tag:"(300A,0384)",vr:"FL",name:"RangeModulatorGatingStopValue",vm:"1",version:"DICOM"},"(300A,0386)":{tag:"(300A,0386)",vr:"FL",name:"RangeModulatorGatingStartWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,0388)":{tag:"(300A,0388)",vr:"FL",name:"RangeModulatorGatingStopWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,038A)":{tag:"(300A,038A)",vr:"FL",name:"IsocenterToRangeModulatorDistance",vm:"1",version:"DICOM"},"(300A,038F)":{tag:"(300A,038F)",vr:"FL",name:"ScanSpotTimeOffset",vm:"1-n",version:"DICOM"},"(300A,0390)":{tag:"(300A,0390)",vr:"SH",name:"ScanSpotTuneID",vm:"1",version:"DICOM"},"(300A,0391)":{tag:"(300A,0391)",vr:"IS",name:"ScanSpotPrescribedIndices",vm:"1-n",version:"DICOM"},"(300A,0392)":{tag:"(300A,0392)",vr:"IS",name:"NumberOfScanSpotPositions",vm:"1",version:"DICOM"},"(300A,0393)":{tag:"(300A,0393)",vr:"CS",name:"ScanSpotReordered",vm:"1",version:"DICOM"},"(300A,0394)":{tag:"(300A,0394)",vr:"FL",name:"ScanSpotPositionMap",vm:"1-n",version:"DICOM"},"(300A,0395)":{tag:"(300A,0395)",vr:"CS",name:"ScanSpotReorderingAllowed",vm:"1",version:"DICOM"},"(300A,0396)":{tag:"(300A,0396)",vr:"FL",name:"ScanSpotMetersetWeights",vm:"1-n",version:"DICOM"},"(300A,0398)":{tag:"(300A,0398)",vr:"FL",name:"ScanningSpotSize",vm:"2",version:"DICOM"},"(300A,0399)":{tag:"(300A,0399)",vr:"FL",name:"ScanSpotSizesDelivered",vm:"2-2n",version:"DICOM"},"(300A,039A)":{tag:"(300A,039A)",vr:"IS",name:"NumberOfPaintings",vm:"1",version:"DICOM"},"(300A,03A0)":{tag:"(300A,03A0)",vr:"SQ",name:"IonToleranceTableSequence",vm:"1",version:"DICOM"},"(300A,03A2)":{tag:"(300A,03A2)",vr:"SQ",name:"IonBeamSequence",vm:"1",version:"DICOM"},"(300A,03A4)":{tag:"(300A,03A4)",vr:"SQ",name:"IonBeamLimitingDeviceSequence",vm:"1",version:"DICOM"},"(300A,03A6)":{tag:"(300A,03A6)",vr:"SQ",name:"IonBlockSequence",vm:"1",version:"DICOM"},"(300A,03A8)":{tag:"(300A,03A8)",vr:"SQ",name:"IonControlPointSequence",vm:"1",version:"DICOM"},"(300A,03AA)":{tag:"(300A,03AA)",vr:"SQ",name:"IonWedgeSequence",vm:"1",version:"DICOM"},"(300A,03AC)":{tag:"(300A,03AC)",vr:"SQ",name:"IonWedgePositionSequence",vm:"1",version:"DICOM"},"(300A,0401)":{tag:"(300A,0401)",vr:"SQ",name:"ReferencedSetupImageSequence",vm:"1",version:"DICOM"},"(300A,0402)":{tag:"(300A,0402)",vr:"ST",name:"SetupImageComment",vm:"1",version:"DICOM"},"(300A,0410)":{tag:"(300A,0410)",vr:"SQ",name:"MotionSynchronizationSequence",vm:"1",version:"DICOM"},"(300A,0412)":{tag:"(300A,0412)",vr:"FL",name:"ControlPointOrientation",vm:"3",version:"DICOM"},"(300A,0420)":{tag:"(300A,0420)",vr:"SQ",name:"GeneralAccessorySequence",vm:"1",version:"DICOM"},"(300A,0421)":{tag:"(300A,0421)",vr:"SH",name:"GeneralAccessoryID",vm:"1",version:"DICOM"},"(300A,0422)":{tag:"(300A,0422)",vr:"ST",name:"GeneralAccessoryDescription",vm:"1",version:"DICOM"},"(300A,0423)":{tag:"(300A,0423)",vr:"CS",name:"GeneralAccessoryType",vm:"1",version:"DICOM"},"(300A,0424)":{tag:"(300A,0424)",vr:"IS",name:"GeneralAccessoryNumber",vm:"1",version:"DICOM"},"(300A,0425)":{tag:"(300A,0425)",vr:"FL",name:"SourceToGeneralAccessoryDistance",vm:"1",version:"DICOM"},"(300A,0426)":{tag:"(300A,0426)",vr:"DS",name:"IsocenterToGeneralAccessoryDistance",vm:"1",version:"DICOM"},"(300A,0431)":{tag:"(300A,0431)",vr:"SQ",name:"ApplicatorGeometrySequence",vm:"1",version:"DICOM"},"(300A,0432)":{tag:"(300A,0432)",vr:"CS",name:"ApplicatorApertureShape",vm:"1",version:"DICOM"},"(300A,0433)":{tag:"(300A,0433)",vr:"FL",name:"ApplicatorOpening",vm:"1",version:"DICOM"},"(300A,0434)":{tag:"(300A,0434)",vr:"FL",name:"ApplicatorOpeningX",vm:"1",version:"DICOM"},"(300A,0435)":{tag:"(300A,0435)",vr:"FL",name:"ApplicatorOpeningY",vm:"1",version:"DICOM"},"(300A,0436)":{tag:"(300A,0436)",vr:"FL",name:"SourceToApplicatorMountingPositionDistance",vm:"1",version:"DICOM"},"(300A,0440)":{tag:"(300A,0440)",vr:"IS",name:"NumberOfBlockSlabItems",vm:"1",version:"DICOM"},"(300A,0441)":{tag:"(300A,0441)",vr:"SQ",name:"BlockSlabSequence",vm:"1",version:"DICOM"},"(300A,0442)":{tag:"(300A,0442)",vr:"DS",name:"BlockSlabThickness",vm:"1",version:"DICOM"},"(300A,0443)":{tag:"(300A,0443)",vr:"US",name:"BlockSlabNumber",vm:"1",version:"DICOM"},"(300A,0450)":{tag:"(300A,0450)",vr:"SQ",name:"DeviceMotionControlSequence",vm:"1",version:"DICOM"},"(300A,0451)":{tag:"(300A,0451)",vr:"CS",name:"DeviceMotionExecutionMode",vm:"1",version:"DICOM"},"(300A,0452)":{tag:"(300A,0452)",vr:"CS",name:"DeviceMotionObservationMode",vm:"1",version:"DICOM"},"(300A,0453)":{tag:"(300A,0453)",vr:"SQ",name:"DeviceMotionParameterCodeSequence",vm:"1",version:"DICOM"},"(300A,0501)":{tag:"(300A,0501)",vr:"FL",name:"DistalDepthFraction",vm:"1",version:"DICOM"},"(300A,0502)":{tag:"(300A,0502)",vr:"FL",name:"DistalDepth",vm:"1",version:"DICOM"},"(300A,0503)":{tag:"(300A,0503)",vr:"FL",name:"NominalRangeModulationFractions",vm:"2",version:"DICOM"},"(300A,0504)":{tag:"(300A,0504)",vr:"FL",name:"NominalRangeModulatedRegionDepths",vm:"2",version:"DICOM"},"(300A,0505)":{tag:"(300A,0505)",vr:"SQ",name:"DepthDoseParametersSequence",vm:"1",version:"DICOM"},"(300A,0506)":{tag:"(300A,0506)",vr:"SQ",name:"DeliveredDepthDoseParametersSequence",vm:"1",version:"DICOM"},"(300A,0507)":{tag:"(300A,0507)",vr:"FL",name:"DeliveredDistalDepthFraction",vm:"1",version:"DICOM"},"(300A,0508)":{tag:"(300A,0508)",vr:"FL",name:"DeliveredDistalDepth",vm:"1",version:"DICOM"},"(300A,0509)":{tag:"(300A,0509)",vr:"FL",name:"DeliveredNominalRangeModulationFractions",vm:"2",version:"DICOM"},"(300A,0510)":{tag:"(300A,0510)",vr:"FL",name:"DeliveredNominalRangeModulatedRegionDepths",vm:"2",version:"DICOM"},"(300A,0511)":{tag:"(300A,0511)",vr:"CS",name:"DeliveredReferenceDoseDefinition",vm:"1",version:"DICOM"},"(300A,0512)":{tag:"(300A,0512)",vr:"CS",name:"ReferenceDoseDefinition",vm:"1",version:"DICOM"},"(300A,0600)":{tag:"(300A,0600)",vr:"US",name:"RTControlPointIndex",vm:"1",version:"DICOM"},"(300A,0601)":{tag:"(300A,0601)",vr:"US",name:"RadiationGenerationModeIndex",vm:"1",version:"DICOM"},"(300A,0602)":{tag:"(300A,0602)",vr:"US",name:"ReferencedDefinedDeviceIndex",vm:"1",version:"DICOM"},"(300A,0603)":{tag:"(300A,0603)",vr:"US",name:"RadiationDoseIdentificationIndex",vm:"1",version:"DICOM"},"(300A,0604)":{tag:"(300A,0604)",vr:"US",name:"NumberOfRTControlPoints",vm:"1",version:"DICOM"},"(300A,0605)":{tag:"(300A,0605)",vr:"US",name:"ReferencedRadiationGenerationModeIndex",vm:"1",version:"DICOM"},"(300A,0606)":{tag:"(300A,0606)",vr:"US",name:"TreatmentPositionIndex",vm:"1",version:"DICOM"},"(300A,0607)":{tag:"(300A,0607)",vr:"US",name:"ReferencedDeviceIndex",vm:"1",version:"DICOM"},"(300A,0608)":{tag:"(300A,0608)",vr:"LO",name:"TreatmentPositionGroupLabel",vm:"1",version:"DICOM"},"(300A,0609)":{tag:"(300A,0609)",vr:"UI",name:"TreatmentPositionGroupUID",vm:"1",version:"DICOM"},"(300A,060A)":{tag:"(300A,060A)",vr:"SQ",name:"TreatmentPositionGroupSequence",vm:"1",version:"DICOM"},"(300A,060B)":{tag:"(300A,060B)",vr:"US",name:"ReferencedTreatmentPositionIndex",vm:"1",version:"DICOM"},"(300A,060C)":{tag:"(300A,060C)",vr:"US",name:"ReferencedRadiationDoseIdentificationIndex",vm:"1",version:"DICOM"},"(300A,060D)":{tag:"(300A,060D)",vr:"FD",name:"RTAccessoryHolderWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,060E)":{tag:"(300A,060E)",vr:"US",name:"ReferencedRTAccessoryHolderDeviceIndex",vm:"1",version:"DICOM"},"(300A,060F)":{tag:"(300A,060F)",vr:"CS",name:"RTAccessoryHolderSlotExistenceFlag",vm:"1",version:"DICOM"},"(300A,0610)":{tag:"(300A,0610)",vr:"SQ",name:"RTAccessoryHolderSlotSequence",vm:"1",version:"DICOM"},"(300A,0611)":{tag:"(300A,0611)",vr:"LO",name:"RTAccessoryHolderSlotID",vm:"1",version:"DICOM"},"(300A,0612)":{tag:"(300A,0612)",vr:"FD",name:"RTAccessoryHolderSlotDistance",vm:"1",version:"DICOM"},"(300A,0613)":{tag:"(300A,0613)",vr:"FD",name:"RTAccessorySlotDistance",vm:"1",version:"DICOM"},"(300A,0614)":{tag:"(300A,0614)",vr:"SQ",name:"RTAccessoryHolderDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0615)":{tag:"(300A,0615)",vr:"LO",name:"RTAccessoryDeviceSlotID",vm:"1",version:"DICOM"},"(300A,0616)":{tag:"(300A,0616)",vr:"SQ",name:"RTRadiationSequence",vm:"1",version:"DICOM"},"(300A,0617)":{tag:"(300A,0617)",vr:"SQ",name:"RadiationDoseSequence",vm:"1",version:"DICOM"},"(300A,0618)":{tag:"(300A,0618)",vr:"SQ",name:"RadiationDoseIdentificationSequence",vm:"1",version:"DICOM"},"(300A,0619)":{tag:"(300A,0619)",vr:"LO",name:"RadiationDoseIdentificationLabel",vm:"1",version:"DICOM"},"(300A,061A)":{tag:"(300A,061A)",vr:"CS",name:"ReferenceDoseType",vm:"1",version:"DICOM"},"(300A,061B)":{tag:"(300A,061B)",vr:"CS",name:"PrimaryDoseValueIndicator",vm:"1",version:"DICOM"},"(300A,061C)":{tag:"(300A,061C)",vr:"SQ",name:"DoseValuesSequence",vm:"1",version:"DICOM"},"(300A,061D)":{tag:"(300A,061D)",vr:"CS",name:"DoseValuePurpose",vm:"1-n",version:"DICOM"},"(300A,061E)":{tag:"(300A,061E)",vr:"FD",name:"ReferenceDosePointCoordinates",vm:"3",version:"DICOM"},"(300A,061F)":{tag:"(300A,061F)",vr:"SQ",name:"RadiationDoseValuesParametersSequence",vm:"1",version:"DICOM"},"(300A,0620)":{tag:"(300A,0620)",vr:"SQ",name:"MetersetToDoseMappingSequence",vm:"1",version:"DICOM"},"(300A,0621)":{tag:"(300A,0621)",vr:"SQ",name:"ExpectedInVivoMeasurementValuesSequence",vm:"1",version:"DICOM"},"(300A,0622)":{tag:"(300A,0622)",vr:"US",name:"ExpectedInVivoMeasurementValueIndex",vm:"1",version:"DICOM"},"(300A,0623)":{tag:"(300A,0623)",vr:"LO",name:"RadiationDoseInVivoMeasurementLabel",vm:"1",version:"DICOM"},"(300A,0624)":{tag:"(300A,0624)",vr:"FD",name:"RadiationDoseCentralAxisDisplacement",vm:"2",version:"DICOM"},"(300A,0625)":{tag:"(300A,0625)",vr:"FD",name:"RadiationDoseValue",vm:"1",version:"DICOM"},"(300A,0626)":{tag:"(300A,0626)",vr:"FD",name:"RadiationDoseSourceToSkinDistance",vm:"1",version:"DICOM"},"(300A,0627)":{tag:"(300A,0627)",vr:"FD",name:"RadiationDoseMeasurementPointCoordinates",vm:"3",version:"DICOM"},"(300A,0628)":{tag:"(300A,0628)",vr:"FD",name:"RadiationDoseSourceToExternalContourDistance",vm:"1",version:"DICOM"},"(300A,0629)":{tag:"(300A,0629)",vr:"SQ",name:"RTToleranceSetSequence",vm:"1",version:"DICOM"},"(300A,062A)":{tag:"(300A,062A)",vr:"LO",name:"RTToleranceSetLabel",vm:"1",version:"DICOM"},"(300A,062B)":{tag:"(300A,062B)",vr:"SQ",name:"AttributeToleranceValuesSequence",vm:"1",version:"DICOM"},"(300A,062C)":{tag:"(300A,062C)",vr:"FD",name:"ToleranceValue",vm:"1",version:"DICOM"},"(300A,062D)":{tag:"(300A,062D)",vr:"SQ",name:"PatientSupportPositionToleranceSequence",vm:"1",version:"DICOM"},"(300A,062E)":{tag:"(300A,062E)",vr:"FD",name:"TreatmentTimeLimit",vm:"1",version:"DICOM"},"(300A,062F)":{tag:"(300A,062F)",vr:"SQ",name:"CArmPhotonElectronControlPointSequence",vm:"1",version:"DICOM"},"(300A,0630)":{tag:"(300A,0630)",vr:"SQ",name:"ReferencedRTRadiationSequence",vm:"1",version:"DICOM"},"(300A,0631)":{tag:"(300A,0631)",vr:"SQ",name:"ReferencedRTInstanceSequence",vm:"1",version:"DICOM"},"(300A,0632)":{tag:"(300A,0632)",vr:"SQ",name:"ReferencedRTPatientSetupSequence",vm:"1",version:"DICOM"},"(300A,0634)":{tag:"(300A,0634)",vr:"FD",name:"SourceToPatientSurfaceDistance",vm:"1",version:"DICOM"},"(300A,0635)":{tag:"(300A,0635)",vr:"SQ",name:"TreatmentMachineSpecialModeCodeSequence",vm:"1",version:"DICOM"},"(300A,0636)":{tag:"(300A,0636)",vr:"US",name:"IntendedNumberOfFractions",vm:"1",version:"DICOM"},"(300A,0637)":{tag:"(300A,0637)",vr:"CS",name:"RTRadiationSetIntent",vm:"1",version:"DICOM"},"(300A,0638)":{tag:"(300A,0638)",vr:"CS",name:"RTRadiationPhysicalAndGeometricContentDetailFlag",vm:"1",version:"DICOM"},"(300A,0639)":{tag:"(300A,0639)",vr:"CS",name:"RTRecordFlag",vm:"1",version:"DICOM"},"(300A,063A)":{tag:"(300A,063A)",vr:"SQ",name:"TreatmentDeviceIdentificationSequence",vm:"1",version:"DICOM"},"(300A,063B)":{tag:"(300A,063B)",vr:"SQ",name:"ReferencedRTPhysicianIntentSequence",vm:"1",version:"DICOM"},"(300A,063C)":{tag:"(300A,063C)",vr:"FD",name:"CumulativeMeterset",vm:"1",version:"DICOM"},"(300A,063D)":{tag:"(300A,063D)",vr:"FD",name:"DeliveryRate",vm:"1",version:"DICOM"},"(300A,063E)":{tag:"(300A,063E)",vr:"SQ",name:"DeliveryRateUnitSequence",vm:"1",version:"DICOM"},"(300A,063F)":{tag:"(300A,063F)",vr:"SQ",name:"TreatmentPositionSequence",vm:"1",version:"DICOM"},"(300A,0640)":{tag:"(300A,0640)",vr:"FD",name:"RadiationSourceAxisDistance",vm:"1",version:"DICOM"},"(300A,0641)":{tag:"(300A,0641)",vr:"US",name:"NumberOfRTBeamLimitingDevices",vm:"1",version:"DICOM"},"(300A,0642)":{tag:"(300A,0642)",vr:"FD",name:"RTBeamLimitingDeviceProximalDistance",vm:"1",version:"DICOM"},"(300A,0643)":{tag:"(300A,0643)",vr:"FD",name:"RTBeamLimitingDeviceDistalDistance",vm:"1",version:"DICOM"},"(300A,0644)":{tag:"(300A,0644)",vr:"SQ",name:"ParallelRTBeamDelimiterDeviceOrientationLabelCodeSequence",vm:"1",version:"DICOM"},"(300A,0645)":{tag:"(300A,0645)",vr:"FD",name:"BeamModifierOrientationAngle",vm:"1",version:"DICOM"},"(300A,0646)":{tag:"(300A,0646)",vr:"SQ",name:"FixedRTBeamDelimiterDeviceSequence",vm:"1",version:"DICOM"},"(300A,0647)":{tag:"(300A,0647)",vr:"SQ",name:"ParallelRTBeamDelimiterDeviceSequence",vm:"1",version:"DICOM"},"(300A,0648)":{tag:"(300A,0648)",vr:"US",name:"NumberOfParallelRTBeamDelimiters",vm:"1",version:"DICOM"},"(300A,0649)":{tag:"(300A,0649)",vr:"FD",name:"ParallelRTBeamDelimiterBoundaries",vm:"2-n",version:"DICOM"},"(300A,064A)":{tag:"(300A,064A)",vr:"FD",name:"ParallelRTBeamDelimiterPositions",vm:"2-n",version:"DICOM"},"(300A,064B)":{tag:"(300A,064B)",vr:"FD",name:"RTBeamLimitingDeviceOffset",vm:"2",version:"DICOM"},"(300A,064C)":{tag:"(300A,064C)",vr:"SQ",name:"RTBeamDelimiterGeometrySequence",vm:"1",version:"DICOM"},"(300A,064D)":{tag:"(300A,064D)",vr:"SQ",name:"RTBeamLimitingDeviceDefinitionSequence",vm:"1",version:"DICOM"},"(300A,064E)":{tag:"(300A,064E)",vr:"CS",name:"ParallelRTBeamDelimiterOpeningMode",vm:"1",version:"DICOM"},"(300A,064F)":{tag:"(300A,064F)",vr:"CS",name:"ParallelRTBeamDelimiterLeafMountingSide",vm:"1-n",version:"DICOM"},"(300A,0650)":{tag:"(300A,0650)",vr:"UI",name:"PatientSetupUID",vm:"1",version:"DICOM"},"(300A,0651)":{tag:"(300A,0651)",vr:"SQ",name:"WedgeDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0652)":{tag:"(300A,0652)",vr:"FD",name:"RadiationBeamWedgeAngle",vm:"1",version:"DICOM"},"(300A,0653)":{tag:"(300A,0653)",vr:"FD",name:"RadiationBeamWedgeThinEdgeDistance",vm:"1",version:"DICOM"},"(300A,0654)":{tag:"(300A,0654)",vr:"FD",name:"RadiationBeamEffectiveWedgeAngle",vm:"1",version:"DICOM"},"(300A,0655)":{tag:"(300A,0655)",vr:"US",name:"NumberOfWedgePositions",vm:"1",version:"DICOM"},"(300A,0656)":{tag:"(300A,0656)",vr:"SQ",name:"RTBeamLimitingDeviceOpeningSequence",vm:"1",version:"DICOM"},"(300A,0657)":{tag:"(300A,0657)",vr:"US",name:"NumberOfRTBeamLimitingDeviceOpenings",vm:"1",version:"DICOM"},"(300A,0658)":{tag:"(300A,0658)",vr:"SQ",name:"RadiationDosimeterUnitSequence",vm:"1",version:"DICOM"},"(300A,0659)":{tag:"(300A,0659)",vr:"SQ",name:"RTDeviceDistanceReferenceLocationCodeSequence",vm:"1",version:"DICOM"},"(300A,065A)":{tag:"(300A,065A)",vr:"SQ",name:"RadiationDeviceConfigurationAndCommissioningKeySequence",vm:"1",version:"DICOM"},"(300A,065B)":{tag:"(300A,065B)",vr:"SQ",name:"PatientSupportPositionParameterSequence",vm:"1",version:"DICOM"},"(300A,065C)":{tag:"(300A,065C)",vr:"CS",name:"PatientSupportPositionSpecificationMethod",vm:"1",version:"DICOM"},"(300A,065D)":{tag:"(300A,065D)",vr:"SQ",name:"PatientSupportPositionDeviceParameterSequence",vm:"1",version:"DICOM"},"(300A,065E)":{tag:"(300A,065E)",vr:"US",name:"DeviceOrderIndex",vm:"1",version:"DICOM"},"(300A,065F)":{tag:"(300A,065F)",vr:"US",name:"PatientSupportPositionParameterOrderIndex",vm:"1",version:"DICOM"},"(300A,0660)":{tag:"(300A,0660)",vr:"SQ",name:"PatientSupportPositionDeviceToleranceSequence",vm:"1",version:"DICOM"},"(300A,0661)":{tag:"(300A,0661)",vr:"US",name:"PatientSupportPositionToleranceOrderIndex",vm:"1",version:"DICOM"},"(300A,0662)":{tag:"(300A,0662)",vr:"SQ",name:"CompensatorDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0663)":{tag:"(300A,0663)",vr:"CS",name:"CompensatorMapOrientation",vm:"1",version:"DICOM"},"(300A,0664)":{tag:"(300A,0664)",vr:"OF",name:"CompensatorProximalThicknessMap",vm:"1",version:"DICOM"},"(300A,0665)":{tag:"(300A,0665)",vr:"OF",name:"CompensatorDistalThicknessMap",vm:"1",version:"DICOM"},"(300A,0666)":{tag:"(300A,0666)",vr:"FD",name:"CompensatorBasePlaneOffset",vm:"1",version:"DICOM"},"(300A,0667)":{tag:"(300A,0667)",vr:"SQ",name:"CompensatorShapeFabricationCodeSequence",vm:"1",version:"DICOM"},"(300A,0668)":{tag:"(300A,0668)",vr:"SQ",name:"CompensatorShapeSequence",vm:"1",version:"DICOM"},"(300A,0669)":{tag:"(300A,0669)",vr:"FD",name:"RadiationBeamCompensatorMillingToolDiameter",vm:"1",version:"DICOM"},"(300A,066A)":{tag:"(300A,066A)",vr:"SQ",name:"BlockDefinitionSequence",vm:"1",version:"DICOM"},"(300A,066B)":{tag:"(300A,066B)",vr:"OF",name:"BlockEdgeData",vm:"1",version:"DICOM"},"(300A,066C)":{tag:"(300A,066C)",vr:"CS",name:"BlockOrientation",vm:"1",version:"DICOM"},"(300A,066D)":{tag:"(300A,066D)",vr:"FD",name:"RadiationBeamBlockThickness",vm:"1",version:"DICOM"},"(300A,066E)":{tag:"(300A,066E)",vr:"FD",name:"RadiationBeamBlockSlabThickness",vm:"1",version:"DICOM"},"(300A,066F)":{tag:"(300A,066F)",vr:"SQ",name:"BlockEdgeDataSequence",vm:"1",version:"DICOM"},"(300A,0670)":{tag:"(300A,0670)",vr:"US",name:"NumberOfRTAccessoryHolders",vm:"1",version:"DICOM"},"(300A,0671)":{tag:"(300A,0671)",vr:"SQ",name:"GeneralAccessoryDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0672)":{tag:"(300A,0672)",vr:"US",name:"NumberOfGeneralAccessories",vm:"1",version:"DICOM"},"(300A,0673)":{tag:"(300A,0673)",vr:"SQ",name:"BolusDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0674)":{tag:"(300A,0674)",vr:"US",name:"NumberOfBoluses",vm:"1",version:"DICOM"},"(300A,0675)":{tag:"(300A,0675)",vr:"UI",name:"EquipmentFrameOfReferenceUID",vm:"1",version:"DICOM"},"(300A,0676)":{tag:"(300A,0676)",vr:"ST",name:"EquipmentFrameOfReferenceDescription",vm:"1",version:"DICOM"},"(300A,0677)":{tag:"(300A,0677)",vr:"SQ",name:"EquipmentReferencePointCoordinatesSequence",vm:"1",version:"DICOM"},"(300A,0678)":{tag:"(300A,0678)",vr:"SQ",name:"EquipmentReferencePointCodeSequence",vm:"1",version:"DICOM"},"(300A,0679)":{tag:"(300A,0679)",vr:"FD",name:"RTBeamLimitingDeviceAngle",vm:"1",version:"DICOM"},"(300A,067A)":{tag:"(300A,067A)",vr:"FD",name:"SourceRollAngle",vm:"1",version:"DICOM"},"(300A,067B)":{tag:"(300A,067B)",vr:"SQ",name:"RadiationGenerationModeSequence",vm:"1",version:"DICOM"},"(300A,067C)":{tag:"(300A,067C)",vr:"SH",name:"RadiationGenerationModeLabel",vm:"1",version:"DICOM"},"(300A,067D)":{tag:"(300A,067D)",vr:"ST",name:"RadiationGenerationModeDescription",vm:"1",version:"DICOM"},"(300A,067E)":{tag:"(300A,067E)",vr:"SQ",name:"RadiationGenerationModeMachineCodeSequence",vm:"1",version:"DICOM"},"(300A,067F)":{tag:"(300A,067F)",vr:"SQ",name:"RadiationTypeCodeSequence",vm:"1",version:"DICOM"},"(300A,0680)":{tag:"(300A,0680)",vr:"DS",name:"NominalEnergy",vm:"1",version:"DICOM"},"(300A,0681)":{tag:"(300A,0681)",vr:"DS",name:"MinimumNominalEnergy",vm:"1",version:"DICOM"},"(300A,0682)":{tag:"(300A,0682)",vr:"DS",name:"MaximumNominalEnergy",vm:"1",version:"DICOM"},"(300A,0683)":{tag:"(300A,0683)",vr:"SQ",name:"RadiationFluenceModifierCodeSequence",vm:"1",version:"DICOM"},"(300A,0684)":{tag:"(300A,0684)",vr:"SQ",name:"EnergyUnitCodeSequence",vm:"1",version:"DICOM"},"(300A,0685)":{tag:"(300A,0685)",vr:"US",name:"NumberOfRadiationGenerationModes",vm:"1",version:"DICOM"},"(300A,0686)":{tag:"(300A,0686)",vr:"SQ",name:"PatientSupportDevicesSequence",vm:"1",version:"DICOM"},"(300A,0687)":{tag:"(300A,0687)",vr:"US",name:"NumberOfPatientSupportDevices",vm:"1",version:"DICOM"},"(300A,0688)":{tag:"(300A,0688)",vr:"FD",name:"RTBeamModifierDefinitionDistance",vm:"1",version:"DICOM"},"(300A,0689)":{tag:"(300A,0689)",vr:"SQ",name:"BeamAreaLimitSequence",vm:"1",version:"DICOM"},"(300A,068A)":{tag:"(300A,068A)",vr:"SQ",name:"ReferencedRTPrescriptionSequence",vm:"1",version:"DICOM"},"(300A,0700)":{tag:"(300A,0700)",vr:"UI",name:"TreatmentSessionUID",vm:"1",version:"DICOM"},"(300A,0701)":{tag:"(300A,0701)",vr:"CS",name:"RTRadiationUsage",vm:"1",version:"DICOM"},"(300A,0702)":{tag:"(300A,0702)",vr:"SQ",name:"ReferencedRTRadiationSetSequence",vm:"1",version:"DICOM"},"(300A,0703)":{tag:"(300A,0703)",vr:"SQ",name:"ReferencedRTRadiationRecordSequence",vm:"1",version:"DICOM"},"(300A,0704)":{tag:"(300A,0704)",vr:"US",name:"RTRadiationSetDeliveryNumber",vm:"1",version:"DICOM"},"(300A,0705)":{tag:"(300A,0705)",vr:"US",name:"ClinicalFractionNumber",vm:"1",version:"DICOM"},"(300A,0706)":{tag:"(300A,0706)",vr:"CS",name:"RTTreatmentFractionCompletionStatus",vm:"1",version:"DICOM"},"(300A,0707)":{tag:"(300A,0707)",vr:"CS",name:"RTRadiationSetUsage",vm:"1",version:"DICOM"},"(300A,0708)":{tag:"(300A,0708)",vr:"CS",name:"TreatmentDeliveryContinuationFlag",vm:"1",version:"DICOM"},"(300A,0709)":{tag:"(300A,0709)",vr:"CS",name:"TreatmentRecordContentOrigin",vm:"1",version:"DICOM"},"(300A,0714)":{tag:"(300A,0714)",vr:"CS",name:"RTTreatmentTerminationStatus",vm:"1",version:"DICOM"},"(300A,0715)":{tag:"(300A,0715)",vr:"SQ",name:"RTTreatmentTerminationReasonCodeSequence",vm:"1",version:"DICOM"},"(300A,0716)":{tag:"(300A,0716)",vr:"SQ",name:"MachineSpecificTreatmentTerminationCodeSequence",vm:"1",version:"DICOM"},"(300A,0722)":{tag:"(300A,0722)",vr:"SQ",name:"RTRadiationSalvageRecordControlPointSequence",vm:"1",version:"DICOM"},"(300A,0723)":{tag:"(300A,0723)",vr:"CS",name:"StartingMetersetValueKnownFlag",vm:"1",version:"DICOM"},"(300A,0730)":{tag:"(300A,0730)",vr:"ST",name:"TreatmentTerminationDescription",vm:"1",version:"DICOM"},"(300A,0731)":{tag:"(300A,0731)",vr:"SQ",name:"TreatmentToleranceViolationSequence",vm:"1",version:"DICOM"},"(300A,0732)":{tag:"(300A,0732)",vr:"CS",name:"TreatmentToleranceViolationCategory",vm:"1",version:"DICOM"},"(300A,0733)":{tag:"(300A,0733)",vr:"SQ",name:"TreatmentToleranceViolationAttributeSequence",vm:"1",version:"DICOM"},"(300A,0734)":{tag:"(300A,0734)",vr:"ST",name:"TreatmentToleranceViolationDescription",vm:"1",version:"DICOM"},"(300A,0735)":{tag:"(300A,0735)",vr:"ST",name:"TreatmentToleranceViolationIdentification",vm:"1",version:"DICOM"},"(300A,0736)":{tag:"(300A,0736)",vr:"DT",name:"TreatmentToleranceViolationDateTime",vm:"1",version:"DICOM"},"(300A,073A)":{tag:"(300A,073A)",vr:"DT",name:"RecordedRTControlPointDateTime",vm:"1",version:"DICOM"},"(300A,073B)":{tag:"(300A,073B)",vr:"US",name:"ReferencedRadiationRTControlPointIndex",vm:"1",version:"DICOM"},"(300A,073E)":{tag:"(300A,073E)",vr:"SQ",name:"AlternateValueSequence",vm:"1",version:"DICOM"},"(300A,073F)":{tag:"(300A,073F)",vr:"SQ",name:"ConfirmationSequence",vm:"1",version:"DICOM"},"(300A,0740)":{tag:"(300A,0740)",vr:"SQ",name:"InterlockSequence",vm:"1",version:"DICOM"},"(300A,0741)":{tag:"(300A,0741)",vr:"DT",name:"InterlockDateTime",vm:"1",version:"DICOM"},"(300A,0742)":{tag:"(300A,0742)",vr:"ST",name:"InterlockDescription",vm:"1",version:"DICOM"},"(300A,0743)":{tag:"(300A,0743)",vr:"SQ",name:"InterlockOriginatingDeviceSequence",vm:"1",version:"DICOM"},"(300A,0744)":{tag:"(300A,0744)",vr:"SQ",name:"InterlockCodeSequence",vm:"1",version:"DICOM"},"(300A,0745)":{tag:"(300A,0745)",vr:"SQ",name:"InterlockResolutionCodeSequence",vm:"1",version:"DICOM"},"(300A,0746)":{tag:"(300A,0746)",vr:"SQ",name:"InterlockResolutionUserSequence",vm:"1",version:"DICOM"},"(300A,0760)":{tag:"(300A,0760)",vr:"DT",name:"OverrideDateTime",vm:"1",version:"DICOM"},"(300A,0761)":{tag:"(300A,0761)",vr:"SQ",name:"TreatmentToleranceViolationTypeCodeSequence",vm:"1",version:"DICOM"},"(300A,0762)":{tag:"(300A,0762)",vr:"SQ",name:"TreatmentToleranceViolationCauseCodeSequence",vm:"1",version:"DICOM"},"(300A,0772)":{tag:"(300A,0772)",vr:"SQ",name:"MeasuredMetersetToDoseMappingSequence",vm:"1",version:"DICOM"},"(300A,0773)":{tag:"(300A,0773)",vr:"US",name:"ReferencedExpectedInVivoMeasurementValueIndex",vm:"1",version:"DICOM"},"(300A,0774)":{tag:"(300A,0774)",vr:"SQ",name:"DoseMeasurementDeviceCodeSequence",vm:"1",version:"DICOM"},"(300A,0780)":{tag:"(300A,0780)",vr:"SQ",name:"AdditionalParameterRecordingInstanceSequence",vm:"1",version:"DICOM"},"(300A,0783)":{tag:"(300A,0783)",vr:"ST",name:"InterlockOriginDescription",vm:"1",version:"DICOM"},"(300C,0002)":{tag:"(300C,0002)",vr:"SQ",name:"ReferencedRTPlanSequence",vm:"1",version:"DICOM"},"(300C,0004)":{tag:"(300C,0004)",vr:"SQ",name:"ReferencedBeamSequence",vm:"1",version:"DICOM"},"(300C,0006)":{tag:"(300C,0006)",vr:"IS",name:"ReferencedBeamNumber",vm:"1",version:"DICOM"},"(300C,0007)":{tag:"(300C,0007)",vr:"IS",name:"ReferencedReferenceImageNumber",vm:"1",version:"DICOM"},"(300C,0008)":{tag:"(300C,0008)",vr:"DS",name:"StartCumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300C,0009)":{tag:"(300C,0009)",vr:"DS",name:"EndCumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300C,000A)":{tag:"(300C,000A)",vr:"SQ",name:"ReferencedBrachyApplicationSetupSequence",vm:"1",version:"DICOM"},"(300C,000C)":{tag:"(300C,000C)",vr:"IS",name:"ReferencedBrachyApplicationSetupNumber",vm:"1",version:"DICOM"},"(300C,000E)":{tag:"(300C,000E)",vr:"IS",name:"ReferencedSourceNumber",vm:"1",version:"DICOM"},"(300C,0020)":{tag:"(300C,0020)",vr:"SQ",name:"ReferencedFractionGroupSequence",vm:"1",version:"DICOM"},"(300C,0022)":{tag:"(300C,0022)",vr:"IS",name:"ReferencedFractionGroupNumber",vm:"1",version:"DICOM"},"(300C,0040)":{tag:"(300C,0040)",vr:"SQ",name:"ReferencedVerificationImageSequence",vm:"1",version:"DICOM"},"(300C,0042)":{tag:"(300C,0042)",vr:"SQ",name:"ReferencedReferenceImageSequence",vm:"1",version:"DICOM"},"(300C,0050)":{tag:"(300C,0050)",vr:"SQ",name:"ReferencedDoseReferenceSequence",vm:"1",version:"DICOM"},"(300C,0051)":{tag:"(300C,0051)",vr:"IS",name:"ReferencedDoseReferenceNumber",vm:"1",version:"DICOM"},"(300C,0055)":{tag:"(300C,0055)",vr:"SQ",name:"BrachyReferencedDoseReferenceSequence",vm:"1",version:"DICOM"},"(300C,0060)":{tag:"(300C,0060)",vr:"SQ",name:"ReferencedStructureSetSequence",vm:"1",version:"DICOM"},"(300C,006A)":{tag:"(300C,006A)",vr:"IS",name:"ReferencedPatientSetupNumber",vm:"1",version:"DICOM"},"(300C,0080)":{tag:"(300C,0080)",vr:"SQ",name:"ReferencedDoseSequence",vm:"1",version:"DICOM"},"(300C,00A0)":{tag:"(300C,00A0)",vr:"IS",name:"ReferencedToleranceTableNumber",vm:"1",version:"DICOM"},"(300C,00B0)":{tag:"(300C,00B0)",vr:"SQ",name:"ReferencedBolusSequence",vm:"1",version:"DICOM"},"(300C,00C0)":{tag:"(300C,00C0)",vr:"IS",name:"ReferencedWedgeNumber",vm:"1",version:"DICOM"},"(300C,00D0)":{tag:"(300C,00D0)",vr:"IS",name:"ReferencedCompensatorNumber",vm:"1",version:"DICOM"},"(300C,00E0)":{tag:"(300C,00E0)",vr:"IS",name:"ReferencedBlockNumber",vm:"1",version:"DICOM"},"(300C,00F0)":{tag:"(300C,00F0)",vr:"IS",name:"ReferencedControlPointIndex",vm:"1",version:"DICOM"},"(300C,00F2)":{tag:"(300C,00F2)",vr:"SQ",name:"ReferencedControlPointSequence",vm:"1",version:"DICOM"},"(300C,00F4)":{tag:"(300C,00F4)",vr:"IS",name:"ReferencedStartControlPointIndex",vm:"1",version:"DICOM"},"(300C,00F6)":{tag:"(300C,00F6)",vr:"IS",name:"ReferencedStopControlPointIndex",vm:"1",version:"DICOM"},"(300C,0100)":{tag:"(300C,0100)",vr:"IS",name:"ReferencedRangeShifterNumber",vm:"1",version:"DICOM"},"(300C,0102)":{tag:"(300C,0102)",vr:"IS",name:"ReferencedLateralSpreadingDeviceNumber",vm:"1",version:"DICOM"},"(300C,0104)":{tag:"(300C,0104)",vr:"IS",name:"ReferencedRangeModulatorNumber",vm:"1",version:"DICOM"},"(300C,0111)":{tag:"(300C,0111)",vr:"SQ",name:"OmittedBeamTaskSequence",vm:"1",version:"DICOM"},"(300C,0112)":{tag:"(300C,0112)",vr:"CS",name:"ReasonForOmission",vm:"1",version:"DICOM"},"(300C,0113)":{tag:"(300C,0113)",vr:"LO",name:"ReasonForOmissionDescription",vm:"1",version:"DICOM"},"(300E,0002)":{tag:"(300E,0002)",vr:"CS",name:"ApprovalStatus",vm:"1",version:"DICOM"},"(300E,0004)":{tag:"(300E,0004)",vr:"DA",name:"ReviewDate",vm:"1",version:"DICOM"},"(300E,0005)":{tag:"(300E,0005)",vr:"TM",name:"ReviewTime",vm:"1",version:"DICOM"},"(300E,0008)":{tag:"(300E,0008)",vr:"PN",name:"ReviewerName",vm:"1",version:"DICOM"},"(4010,0001)":{tag:"(4010,0001)",vr:"CS",name:"LowEnergyDetectors",vm:"1",version:"DICOM/DICOS"},"(4010,0002)":{tag:"(4010,0002)",vr:"CS",name:"HighEnergyDetectors",vm:"1",version:"DICOM/DICOS"},"(4010,0004)":{tag:"(4010,0004)",vr:"SQ",name:"DetectorGeometrySequence",vm:"1",version:"DICOM/DICOS"},"(4010,1001)":{tag:"(4010,1001)",vr:"SQ",name:"ThreatROIVoxelSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1004)":{tag:"(4010,1004)",vr:"FL",name:"ThreatROIBase",vm:"3",version:"DICOM/DICOS"},"(4010,1005)":{tag:"(4010,1005)",vr:"FL",name:"ThreatROIExtents",vm:"3",version:"DICOM/DICOS"},"(4010,1006)":{tag:"(4010,1006)",vr:"OB",name:"ThreatROIBitmap",vm:"1",version:"DICOM/DICOS"},"(4010,1007)":{tag:"(4010,1007)",vr:"SH",name:"RouteSegmentID",vm:"1",version:"DICOM/DICOS"},"(4010,1008)":{tag:"(4010,1008)",vr:"CS",name:"GantryType",vm:"1",version:"DICOM/DICOS"},"(4010,1009)":{tag:"(4010,1009)",vr:"CS",name:"OOIOwnerType",vm:"1",version:"DICOM/DICOS"},"(4010,100A)":{tag:"(4010,100A)",vr:"SQ",name:"RouteSegmentSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1010)":{tag:"(4010,1010)",vr:"US",name:"PotentialThreatObjectID",vm:"1",version:"DICOM/DICOS"},"(4010,1011)":{tag:"(4010,1011)",vr:"SQ",name:"ThreatSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1012)":{tag:"(4010,1012)",vr:"CS",name:"ThreatCategory",vm:"1",version:"DICOM/DICOS"},"(4010,1013)":{tag:"(4010,1013)",vr:"LT",name:"ThreatCategoryDescription",vm:"1",version:"DICOM/DICOS"},"(4010,1014)":{tag:"(4010,1014)",vr:"CS",name:"ATDAbilityAssessment",vm:"1",version:"DICOM/DICOS"},"(4010,1015)":{tag:"(4010,1015)",vr:"CS",name:"ATDAssessmentFlag",vm:"1",version:"DICOM/DICOS"},"(4010,1016)":{tag:"(4010,1016)",vr:"FL",name:"ATDAssessmentProbability",vm:"1",version:"DICOM/DICOS"},"(4010,1017)":{tag:"(4010,1017)",vr:"FL",name:"Mass",vm:"1",version:"DICOM/DICOS"},"(4010,1018)":{tag:"(4010,1018)",vr:"FL",name:"Density",vm:"1",version:"DICOM/DICOS"},"(4010,1019)":{tag:"(4010,1019)",vr:"FL",name:"ZEffective",vm:"1",version:"DICOM/DICOS"},"(4010,101A)":{tag:"(4010,101A)",vr:"SH",name:"BoardingPassID",vm:"1",version:"DICOM/DICOS"},"(4010,101B)":{tag:"(4010,101B)",vr:"FL",name:"CenterOfMass",vm:"3",version:"DICOM/DICOS"},"(4010,101C)":{tag:"(4010,101C)",vr:"FL",name:"CenterOfPTO",vm:"3",version:"DICOM/DICOS"},"(4010,101D)":{tag:"(4010,101D)",vr:"FL",name:"BoundingPolygon",vm:"6-n",version:"DICOM/DICOS"},"(4010,101E)":{tag:"(4010,101E)",vr:"SH",name:"RouteSegmentStartLocationID",vm:"1",version:"DICOM/DICOS"},"(4010,101F)":{tag:"(4010,101F)",vr:"SH",name:"RouteSegmentEndLocationID",vm:"1",version:"DICOM/DICOS"},"(4010,1020)":{tag:"(4010,1020)",vr:"CS",name:"RouteSegmentLocationIDType",vm:"1",version:"DICOM/DICOS"},"(4010,1021)":{tag:"(4010,1021)",vr:"CS",name:"AbortReason",vm:"1-n",version:"DICOM/DICOS"},"(4010,1023)":{tag:"(4010,1023)",vr:"FL",name:"VolumeOfPTO",vm:"1",version:"DICOM/DICOS"},"(4010,1024)":{tag:"(4010,1024)",vr:"CS",name:"AbortFlag",vm:"1",version:"DICOM/DICOS"},"(4010,1025)":{tag:"(4010,1025)",vr:"DT",name:"RouteSegmentStartTime",vm:"1",version:"DICOM/DICOS"},"(4010,1026)":{tag:"(4010,1026)",vr:"DT",name:"RouteSegmentEndTime",vm:"1",version:"DICOM/DICOS"},"(4010,1027)":{tag:"(4010,1027)",vr:"CS",name:"TDRType",vm:"1",version:"DICOM/DICOS"},"(4010,1028)":{tag:"(4010,1028)",vr:"CS",name:"InternationalRouteSegment",vm:"1",version:"DICOM/DICOS"},"(4010,1029)":{tag:"(4010,1029)",vr:"LO",name:"ThreatDetectionAlgorithmandVersion",vm:"1-n",version:"DICOM/DICOS"},"(4010,102A)":{tag:"(4010,102A)",vr:"SH",name:"AssignedLocation",vm:"1",version:"DICOM/DICOS"},"(4010,102B)":{tag:"(4010,102B)",vr:"DT",name:"AlarmDecisionTime",vm:"1",version:"DICOM/DICOS"},"(4010,1031)":{tag:"(4010,1031)",vr:"CS",name:"AlarmDecision",vm:"1",version:"DICOM/DICOS"},"(4010,1033)":{tag:"(4010,1033)",vr:"US",name:"NumberOfTotalObjects",vm:"1",version:"DICOM/DICOS"},"(4010,1034)":{tag:"(4010,1034)",vr:"US",name:"NumberOfAlarmObjects",vm:"1",version:"DICOM/DICOS"},"(4010,1037)":{tag:"(4010,1037)",vr:"SQ",name:"PTORepresentationSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1038)":{tag:"(4010,1038)",vr:"SQ",name:"ATDAssessmentSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1039)":{tag:"(4010,1039)",vr:"CS",name:"TIPType",vm:"1",version:"DICOM/DICOS"},"(4010,103A)":{tag:"(4010,103A)",vr:"CS",name:"DICOSVersion",vm:"1",version:"DICOM/DICOS"},"(4010,1041)":{tag:"(4010,1041)",vr:"DT",name:"OOIOwnerCreationTime",vm:"1",version:"DICOM/DICOS"},"(4010,1042)":{tag:"(4010,1042)",vr:"CS",name:"OOIType",vm:"1",version:"DICOM/DICOS"},"(4010,1043)":{tag:"(4010,1043)",vr:"FL",name:"OOISize",vm:"3",version:"DICOM/DICOS"},"(4010,1044)":{tag:"(4010,1044)",vr:"CS",name:"AcquisitionStatus",vm:"1",version:"DICOM/DICOS"},"(4010,1045)":{tag:"(4010,1045)",vr:"SQ",name:"BasisMaterialsCodeSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1046)":{tag:"(4010,1046)",vr:"CS",name:"PhantomType",vm:"1",version:"DICOM/DICOS"},"(4010,1047)":{tag:"(4010,1047)",vr:"SQ",name:"OOIOwnerSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1048)":{tag:"(4010,1048)",vr:"CS",name:"ScanType",vm:"1",version:"DICOM/DICOS"},"(4010,1051)":{tag:"(4010,1051)",vr:"LO",name:"ItineraryID",vm:"1",version:"DICOM/DICOS"},"(4010,1052)":{tag:"(4010,1052)",vr:"SH",name:"ItineraryIDType",vm:"1",version:"DICOM/DICOS"},"(4010,1053)":{tag:"(4010,1053)",vr:"LO",name:"ItineraryIDAssigningAuthority",vm:"1",version:"DICOM/DICOS"},"(4010,1054)":{tag:"(4010,1054)",vr:"SH",name:"RouteID",vm:"1",version:"DICOM/DICOS"},"(4010,1055)":{tag:"(4010,1055)",vr:"SH",name:"RouteIDAssigningAuthority",vm:"1",version:"DICOM/DICOS"},"(4010,1056)":{tag:"(4010,1056)",vr:"CS",name:"InboundArrivalType",vm:"1",version:"DICOM/DICOS"},"(4010,1058)":{tag:"(4010,1058)",vr:"SH",name:"CarrierID",vm:"1",version:"DICOM/DICOS"},"(4010,1059)":{tag:"(4010,1059)",vr:"CS",name:"CarrierIDAssigningAuthority",vm:"1",version:"DICOM/DICOS"},"(4010,1060)":{tag:"(4010,1060)",vr:"FL",name:"SourceOrientation",vm:"3",version:"DICOM/DICOS"},"(4010,1061)":{tag:"(4010,1061)",vr:"FL",name:"SourcePosition",vm:"3",version:"DICOM/DICOS"},"(4010,1062)":{tag:"(4010,1062)",vr:"FL",name:"BeltHeight",vm:"1",version:"DICOM/DICOS"},"(4010,1064)":{tag:"(4010,1064)",vr:"SQ",name:"AlgorithmRoutingCodeSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1067)":{tag:"(4010,1067)",vr:"CS",name:"TransportClassification",vm:"1",version:"DICOM/DICOS"},"(4010,1068)":{tag:"(4010,1068)",vr:"LT",name:"OOITypeDescriptor",vm:"1",version:"DICOM/DICOS"},"(4010,1069)":{tag:"(4010,1069)",vr:"FL",name:"TotalProcessingTime",vm:"1",version:"DICOM/DICOS"},"(4010,106C)":{tag:"(4010,106C)",vr:"OB",name:"DetectorCalibrationData",vm:"1",version:"DICOM/DICOS"},"(4010,106D)":{tag:"(4010,106D)",vr:"CS",name:"AdditionalScreeningPerformed",vm:"1",version:"DICOM/DICOS"},"(4010,106E)":{tag:"(4010,106E)",vr:"CS",name:"AdditionalInspectionSelectionCriteria",vm:"1",version:"DICOM/DICOS"},"(4010,106F)":{tag:"(4010,106F)",vr:"SQ",name:"AdditionalInspectionMethodSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1070)":{tag:"(4010,1070)",vr:"CS",name:"AITDeviceType",vm:"1",version:"DICOM/DICOS"},"(4010,1071)":{tag:"(4010,1071)",vr:"SQ",name:"QRMeasurementsSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1072)":{tag:"(4010,1072)",vr:"SQ",name:"TargetMaterialSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1073)":{tag:"(4010,1073)",vr:"FD",name:"SNRThreshold",vm:"1",version:"DICOM/DICOS"},"(4010,1075)":{tag:"(4010,1075)",vr:"DS",name:"ImageScaleRepresentation",vm:"1",version:"DICOM/DICOS"},"(4010,1076)":{tag:"(4010,1076)",vr:"SQ",name:"ReferencedPTOSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1077)":{tag:"(4010,1077)",vr:"SQ",name:"ReferencedTDRInstanceSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1078)":{tag:"(4010,1078)",vr:"ST",name:"PTOLocationDescription",vm:"1",version:"DICOM/DICOS"},"(4010,1079)":{tag:"(4010,1079)",vr:"SQ",name:"AnomalyLocatorIndicatorSequence",vm:"1",version:"DICOM/DICOS"},"(4010,107A)":{tag:"(4010,107A)",vr:"FL",name:"AnomalyLocatorIndicator",vm:"3",version:"DICOM/DICOS"},"(4010,107B)":{tag:"(4010,107B)",vr:"SQ",name:"PTORegionSequence",vm:"1",version:"DICOM/DICOS"},"(4010,107C)":{tag:"(4010,107C)",vr:"CS",name:"InspectionSelectionCriteria",vm:"1",version:"DICOM/DICOS"},"(4010,107D)":{tag:"(4010,107D)",vr:"SQ",name:"SecondaryInspectionMethodSequence",vm:"1",version:"DICOM/DICOS"},"(4010,107E)":{tag:"(4010,107E)",vr:"DS",name:"PRCSToRCSOrientation",vm:"6",version:"DICOM/DICOS"},"(3010,0001)":{tag:"(3010,0001)",vr:"SQ",name:"RadiobiologicalDoseEffectSequence",vm:"1",version:"DICOM"},"(3010,0002)":{tag:"(3010,0002)",vr:"CS",name:"RadiobiologicalDoseEffectFlag",vm:"1",version:"DICOM"},"(3010,0003)":{tag:"(3010,0003)",vr:"SQ",name:"EffectiveDoseCalculationMethodCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,0004)":{tag:"(3010,0004)",vr:"SQ",name:"EffectiveDoseCalculationMethodCodeSequence",vm:"1",version:"DICOM"},"(3010,0005)":{tag:"(3010,0005)",vr:"LO",name:"EffectiveDoseCalculationMethodDescription",vm:"1",version:"DICOM"},"(3010,0006)":{tag:"(3010,0006)",vr:"UI",name:"ConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,0007)":{tag:"(3010,0007)",vr:"SQ",name:"OriginatingSOPInstanceReferenceSequence",vm:"1",version:"DICOM"},"(3010,0008)":{tag:"(3010,0008)",vr:"SQ",name:"ConceptualVolumeConstituentSequence",vm:"1",version:"DICOM"},"(3010,0009)":{tag:"(3010,0009)",vr:"SQ",name:"EquivalentConceptualVolumeInstanceReferenceSequence",vm:"1",version:"DICOM"},"(3010,000A)":{tag:"(3010,000A)",vr:"SQ",name:"EquivalentConceptualVolumesSequence",vm:"1",version:"DICOM"},"(3010,000B)":{tag:"(3010,000B)",vr:"UI",name:"ReferencedConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,000C)":{tag:"(3010,000C)",vr:"UT",name:"ConceptualVolumeCombinationExpression",vm:"1",version:"DICOM"},"(3010,000D)":{tag:"(3010,000D)",vr:"US",name:"ConceptualVolumeConstituentIndex",vm:"1",version:"DICOM"},"(3010,000E)":{tag:"(3010,000E)",vr:"CS",name:"ConceptualVolumeCombinationFlag",vm:"1",version:"DICOM"},"(3010,000F)":{tag:"(3010,000F)",vr:"ST",name:"ConceptualVolumeCombinationDescription",vm:"1",version:"DICOM"},"(3010,0010)":{tag:"(3010,0010)",vr:"CS",name:"ConceptualVolumeSegmentationDefinedFlag",vm:"1",version:"DICOM"},"(3010,0011)":{tag:"(3010,0011)",vr:"SQ",name:"ConceptualVolumeSegmentationReferenceSequence",vm:"1",version:"DICOM"},"(3010,0012)":{tag:"(3010,0012)",vr:"SQ",name:"ConceptualVolumeConstituentSegmentationReferenceSequence",vm:"1",version:"DICOM"},"(3010,0013)":{tag:"(3010,0013)",vr:"UI",name:"ConstituentConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,0014)":{tag:"(3010,0014)",vr:"SQ",name:"DerivationConceptualVolumeSequence",vm:"1",version:"DICOM"},"(3010,0015)":{tag:"(3010,0015)",vr:"UI",name:"SourceConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,0016)":{tag:"(3010,0016)",vr:"SQ",name:"ConceptualVolumeDerivationAlgorithmSequence",vm:"1",version:"DICOM"},"(3010,0017)":{tag:"(3010,0017)",vr:"ST",name:"ConceptualVolumeDescription",vm:"1",version:"DICOM"},"(3010,0018)":{tag:"(3010,0018)",vr:"SQ",name:"SourceConceptualVolumeSequence",vm:"1",version:"DICOM"},"(3010,0019)":{tag:"(3010,0019)",vr:"SQ",name:"AuthorIdentificationSequence",vm:"1",version:"DICOM"},"(3010,001A)":{tag:"(3010,001A)",vr:"LO",name:"ManufacturerModelVersion",vm:"1",version:"DICOM"},"(3010,001B)":{tag:"(3010,001B)",vr:"UC",name:"DeviceAlternateIdentifier",vm:"1",version:"DICOM"},"(3010,001C)":{tag:"(3010,001C)",vr:"CS",name:"DeviceAlternateIdentifierType",vm:"1",version:"DICOM"},"(3010,001D)":{tag:"(3010,001D)",vr:"LT",name:"DeviceAlternateIdentifierFormat",vm:"1",version:"DICOM"},"(3010,001E)":{tag:"(3010,001E)",vr:"LO",name:"SegmentationCreationTemplateLabel",vm:"1",version:"DICOM"},"(3010,001F)":{tag:"(3010,001F)",vr:"UI",name:"SegmentationTemplateUID",vm:"1",version:"DICOM"},"(3010,0020)":{tag:"(3010,0020)",vr:"US",name:"ReferencedSegmentReferenceIndex",vm:"1",version:"DICOM"},"(3010,0021)":{tag:"(3010,0021)",vr:"SQ",name:"SegmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0022)":{tag:"(3010,0022)",vr:"US",name:"SegmentReferenceIndex",vm:"1",version:"DICOM"},"(3010,0023)":{tag:"(3010,0023)",vr:"SQ",name:"DirectSegmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0024)":{tag:"(3010,0024)",vr:"SQ",name:"CombinationSegmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0025)":{tag:"(3010,0025)",vr:"SQ",name:"ConceptualVolumeSequence",vm:"1",version:"DICOM"},"(3010,0026)":{tag:"(3010,0026)",vr:"SQ",name:"SegmentedRTAccessoryDeviceSequence",vm:"1",version:"DICOM"},"(3010,0027)":{tag:"(3010,0027)",vr:"SQ",name:"SegmentCharacteristicsSequence",vm:"1",version:"DICOM"},"(3010,0028)":{tag:"(3010,0028)",vr:"SQ",name:"RelatedSegmentCharacteristicsSequence",vm:"1",version:"DICOM"},"(3010,0029)":{tag:"(3010,0029)",vr:"US",name:"SegmentCharacteristicsPrecedence",vm:"1",version:"DICOM"},"(3010,002A)":{tag:"(3010,002A)",vr:"SQ",name:"RTSegmentAnnotationSequence",vm:"1",version:"DICOM"},"(3010,002B)":{tag:"(3010,002B)",vr:"SQ",name:"SegmentAnnotationCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,002C)":{tag:"(3010,002C)",vr:"SQ",name:"SegmentAnnotationTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,002D)":{tag:"(3010,002D)",vr:"LO",name:"DeviceLabel",vm:"1",version:"DICOM"},"(3010,002E)":{tag:"(3010,002E)",vr:"SQ",name:"DeviceTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,002F)":{tag:"(3010,002F)",vr:"SQ",name:"SegmentAnnotationTypeModifierCodeSequence",vm:"1",version:"DICOM"},"(3010,0030)":{tag:"(3010,0030)",vr:"SQ",name:"PatientEquipmentRelationshipCodeSequence",vm:"1",version:"DICOM"},"(3010,0031)":{tag:"(3010,0031)",vr:"UI",name:"ReferencedFiducialsUID",vm:"1",version:"DICOM"},"(3010,0032)":{tag:"(3010,0032)",vr:"SQ",name:"PatientTreatmentOrientationSequence",vm:"1",version:"DICOM"},"(3010,0033)":{tag:"(3010,0033)",vr:"SH",name:"UserContentLabel",vm:"1",version:"DICOM"},"(3010,0034)":{tag:"(3010,0034)",vr:"LO",name:"UserContentLongLabel",vm:"1",version:"DICOM"},"(3010,0035)":{tag:"(3010,0035)",vr:"SH",name:"EntityLabel",vm:"1",version:"DICOM"},"(3010,0036)":{tag:"(3010,0036)",vr:"LO",name:"EntityName",vm:"1",version:"DICOM"},"(3010,0037)":{tag:"(3010,0037)",vr:"ST",name:"EntityDescription",vm:"1",version:"DICOM"},"(3010,0038)":{tag:"(3010,0038)",vr:"LO",name:"EntityLongLabel",vm:"1",version:"DICOM"},"(3010,0039)":{tag:"(3010,0039)",vr:"US",name:"DeviceIndex",vm:"1",version:"DICOM"},"(3010,003A)":{tag:"(3010,003A)",vr:"US",name:"RTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,003B)":{tag:"(3010,003B)",vr:"UI",name:"RTTreatmentPhaseUID",vm:"1",version:"DICOM"},"(3010,003C)":{tag:"(3010,003C)",vr:"US",name:"RTPrescriptionIndex",vm:"1",version:"DICOM"},"(3010,003D)":{tag:"(3010,003D)",vr:"US",name:"RTSegmentAnnotationIndex",vm:"1",version:"DICOM"},"(3010,003E)":{tag:"(3010,003E)",vr:"US",name:"BasisRTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,003F)":{tag:"(3010,003F)",vr:"US",name:"RelatedRTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,0040)":{tag:"(3010,0040)",vr:"US",name:"ReferencedRTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,0041)":{tag:"(3010,0041)",vr:"US",name:"ReferencedRTPrescriptionIndex",vm:"1",version:"DICOM"},"(3010,0042)":{tag:"(3010,0042)",vr:"US",name:"ReferencedParentRTPrescriptionIndex",vm:"1",version:"DICOM"},"(3010,0043)":{tag:"(3010,0043)",vr:"ST",name:"ManufacturerDeviceIdentifier",vm:"1",version:"DICOM"},"(3010,0044)":{tag:"(3010,0044)",vr:"SQ",name:"InstanceLevelReferencedPerformedProcedureStepSequence",vm:"1",version:"DICOM"},"(3010,0045)":{tag:"(3010,0045)",vr:"CS",name:"RTTreatmentPhaseIntentPresenceFlag",vm:"1",version:"DICOM"},"(3010,0046)":{tag:"(3010,0046)",vr:"CS",name:"RadiotherapyTreatmentType",vm:"1",version:"DICOM"},"(3010,0047)":{tag:"(3010,0047)",vr:"CS",name:"TeletherapyRadiationType",vm:"1-n",version:"DICOM"},"(3010,0048)":{tag:"(3010,0048)",vr:"CS",name:"BrachytherapySourceType",vm:"1-n",version:"DICOM"},"(3010,0049)":{tag:"(3010,0049)",vr:"SQ",name:"ReferencedRTTreatmentPhaseSequence",vm:"1",version:"DICOM"},"(3010,004A)":{tag:"(3010,004A)",vr:"SQ",name:"ReferencedDirectSegmentInstanceSequence",vm:"1",version:"DICOM"},"(3010,004B)":{tag:"(3010,004B)",vr:"SQ",name:"IntendedRTTreatmentPhaseSequence",vm:"1",version:"DICOM"},"(3010,004C)":{tag:"(3010,004C)",vr:"DA",name:"IntendedPhaseStartDate",vm:"1",version:"DICOM"},"(3010,004D)":{tag:"(3010,004D)",vr:"DA",name:"IntendedPhaseEndDate",vm:"1",version:"DICOM"},"(3010,004E)":{tag:"(3010,004E)",vr:"SQ",name:"RTTreatmentPhaseIntervalSequence",vm:"1",version:"DICOM"},"(3010,004F)":{tag:"(3010,004F)",vr:"CS",name:"TemporalRelationshipIntervalAnchor",vm:"1",version:"DICOM"},"(3010,0050)":{tag:"(3010,0050)",vr:"FD",name:"MinimumNumberOfIntervalDays",vm:"1",version:"DICOM"},"(3010,0051)":{tag:"(3010,0051)",vr:"FD",name:"MaximumNumberOfIntervalDays",vm:"1",version:"DICOM"},"(3010,0052)":{tag:"(3010,0052)",vr:"UI",name:"PertinentSOPClassesInStudy",vm:"1-n",version:"DICOM"},"(3010,0053)":{tag:"(3010,0053)",vr:"UI",name:"PertinentSOPClassesInSeries",vm:"1-n",version:"DICOM"},"(3010,0054)":{tag:"(3010,0054)",vr:"LO",name:"RTPrescriptionLabel",vm:"1",version:"DICOM"},"(3010,0055)":{tag:"(3010,0055)",vr:"SQ",name:"RTPhysicianIntentPredecessorSequence",vm:"1",version:"DICOM"},"(3010,0056)":{tag:"(3010,0056)",vr:"LO",name:"RTTreatmentApproachLabel",vm:"1",version:"DICOM"},"(3010,0057)":{tag:"(3010,0057)",vr:"SQ",name:"RTPhysicianIntentSequence",vm:"1",version:"DICOM"},"(3010,0058)":{tag:"(3010,0058)",vr:"US",name:"RTPhysicianIntentIndex",vm:"1",version:"DICOM"},"(3010,0059)":{tag:"(3010,0059)",vr:"CS",name:"RTTreatmentIntentType",vm:"1",version:"DICOM"},"(3010,005A)":{tag:"(3010,005A)",vr:"UT",name:"RTPhysicianIntentNarrative",vm:"1",version:"DICOM"},"(3010,005B)":{tag:"(3010,005B)",vr:"SQ",name:"RTProtocolCodeSequence",vm:"1",version:"DICOM"},"(3010,005C)":{tag:"(3010,005C)",vr:"ST",name:"ReasonForSuperseding",vm:"1",version:"DICOM"},"(3010,005D)":{tag:"(3010,005D)",vr:"SQ",name:"RTDiagnosisCodeSequence",vm:"1",version:"DICOM"},"(3010,005E)":{tag:"(3010,005E)",vr:"US",name:"ReferencedRTPhysicianIntentIndex",vm:"1",version:"DICOM"},"(3010,005F)":{tag:"(3010,005F)",vr:"SQ",name:"RTPhysicianIntentInputInstanceSequence",vm:"1",version:"DICOM"},"(3010,0060)":{tag:"(3010,0060)",vr:"SQ",name:"RTAnatomicPrescriptionSequence",vm:"1",version:"DICOM"},"(3010,0061)":{tag:"(3010,0061)",vr:"UT",name:"PriorTreatmentDoseDescription",vm:"1",version:"DICOM"},"(3010,0062)":{tag:"(3010,0062)",vr:"SQ",name:"PriorTreatmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0063)":{tag:"(3010,0063)",vr:"CS",name:"DosimetricObjectiveEvaluationScope",vm:"1",version:"DICOM"},"(3010,0064)":{tag:"(3010,0064)",vr:"SQ",name:"TherapeuticRoleCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,0065)":{tag:"(3010,0065)",vr:"SQ",name:"TherapeuticRoleTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,0066)":{tag:"(3010,0066)",vr:"US",name:"ConceptualVolumeOptimizationPrecedence",vm:"1",version:"DICOM"},"(3010,0067)":{tag:"(3010,0067)",vr:"SQ",name:"ConceptualVolumeCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,0068)":{tag:"(3010,0068)",vr:"CS",name:"ConceptualVolumeBlockingConstraint",vm:"1",version:"DICOM"},"(3010,0069)":{tag:"(3010,0069)",vr:"SQ",name:"ConceptualVolumeTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,006A)":{tag:"(3010,006A)",vr:"SQ",name:"ConceptualVolumeTypeModifierCodeSequence",vm:"1",version:"DICOM"},"(3010,006B)":{tag:"(3010,006B)",vr:"SQ",name:"RTPrescriptionSequence",vm:"1",version:"DICOM"},"(3010,006C)":{tag:"(3010,006C)",vr:"SQ",name:"DosimetricObjectiveSequence",vm:"1",version:"DICOM"},"(3010,006D)":{tag:"(3010,006D)",vr:"SQ",name:"DosimetricObjectiveTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,006E)":{tag:"(3010,006E)",vr:"UI",name:"DosimetricObjectiveUID",vm:"1",version:"DICOM"},"(3010,006F)":{tag:"(3010,006F)",vr:"UI",name:"ReferencedDosimetricObjectiveUID",vm:"1",version:"DICOM"},"(3010,0070)":{tag:"(3010,0070)",vr:"SQ",name:"DosimetricObjectiveParameterSequence",vm:"1",version:"DICOM"},"(3010,0071)":{tag:"(3010,0071)",vr:"SQ",name:"ReferencedDosimetricObjectivesSequence",vm:"1",version:"DICOM"},"(3010,0073)":{tag:"(3010,0073)",vr:"CS",name:"AbsoluteDosimetricObjectiveFlag",vm:"1",version:"DICOM"},"(3010,0074)":{tag:"(3010,0074)",vr:"FD",name:"DosimetricObjectiveWeight",vm:"1",version:"DICOM"},"(3010,0075)":{tag:"(3010,0075)",vr:"CS",name:"DosimetricObjectivePurpose",vm:"1",version:"DICOM"},"(3010,0076)":{tag:"(3010,0076)",vr:"SQ",name:"PlanningInputInformationSequence",vm:"1",version:"DICOM"},"(3010,0077)":{tag:"(3010,0077)",vr:"LO",name:"TreatmentSite",vm:"1",version:"DICOM"},"(3010,0078)":{tag:"(3010,0078)",vr:"SQ",name:"TreatmentSiteCodeSequence",vm:"1",version:"DICOM"},"(3010,0079)":{tag:"(3010,0079)",vr:"SQ",name:"FractionPatternSequence",vm:"1",version:"DICOM"},"(3010,007A)":{tag:"(3010,007A)",vr:"UT",name:"TreatmentTechniqueNotes",vm:"1",version:"DICOM"},"(3010,007B)":{tag:"(3010,007B)",vr:"UT",name:"PrescriptionNotes",vm:"1",version:"DICOM"},"(3010,007C)":{tag:"(3010,007C)",vr:"IS",name:"NumberOfIntervalFractions",vm:"1",version:"DICOM"},"(3010,007D)":{tag:"(3010,007D)",vr:"US",name:"NumberOfFractions",vm:"1",version:"DICOM"},"(3010,007E)":{tag:"(3010,007E)",vr:"US",name:"IntendedDeliveryDuration",vm:"1",version:"DICOM"},"(3010,007F)":{tag:"(3010,007F)",vr:"UT",name:"FractionationNotes",vm:"1",version:"DICOM"},"(3010,0080)":{tag:"(3010,0080)",vr:"SQ",name:"RTTreatmentTechniqueCodeSequence",vm:"1",version:"DICOM"},"(3010,0081)":{tag:"(3010,0081)",vr:"SQ",name:"PrescriptionNotesSequence",vm:"1",version:"DICOM"},"(3010,0082)":{tag:"(3010,0082)",vr:"SQ",name:"FractionBasedRelationshipSequence",vm:"1",version:"DICOM"},"(3010,0083)":{tag:"(3010,0083)",vr:"CS",name:"FractionBasedRelationshipIntervalAnchor",vm:"1",version:"DICOM"},"(3010,0084)":{tag:"(3010,0084)",vr:"FD",name:"MinimumHoursBetweenFractions",vm:"1",version:"DICOM"},"(3010,0085)":{tag:"(3010,0085)",vr:"TM",name:"IntendedFractionStartTime",vm:"1-n",version:"DICOM"},"(3010,0086)":{tag:"(3010,0086)",vr:"LT",name:"IntendedStartDayOfWeek",vm:"1",version:"DICOM"},"(3010,0087)":{tag:"(3010,0087)",vr:"SQ",name:"WeekdayFractionPatternSequence",vm:"1",version:"DICOM"},"(3010,0088)":{tag:"(3010,0088)",vr:"SQ",name:"DeliveryTimeStructureCodeSequence",vm:"1",version:"DICOM"},"(3010,0089)":{tag:"(3010,0089)",vr:"SQ",name:"TreatmentSiteModifierCodeSequence",vm:"1",version:"DICOM"},"(3010,0090)":{tag:"(3010,0090)",vr:"CS",name:"RoboticBaseLocationIndicator",vm:"1",version:"DICOM"},"(3010,0091)":{tag:"(3010,0091)",vr:"SQ",name:"RoboticPathNodeSetCodeSequence",vm:"1",version:"DICOM"},"(3010,0092)":{tag:"(3010,0092)",vr:"UL",name:"RoboticNodeIdentifier",vm:"1",version:"DICOM"},"(3010,0093)":{tag:"(3010,0093)",vr:"FD",name:"RTTreatmentSourceCoordinates",vm:"3",version:"DICOM"},"(3010,0094)":{tag:"(3010,0094)",vr:"FD",name:"RadiationSourceCoordinateSystemYawAngle",vm:"1",version:"DICOM"},"(3010,0095)":{tag:"(3010,0095)",vr:"FD",name:"RadiationSourceCoordinateSystemRollAngle",vm:"1",version:"DICOM"},"(3010,0096)":{tag:"(3010,0096)",vr:"FD",name:"RadiationSourceCoordinateSystemPitchAngle",vm:"1",version:"DICOM"},"(3010,0097)":{tag:"(3010,0097)",vr:"SQ",name:"RoboticPathControlPointSequence",vm:"1",version:"DICOM"},"(3010,0098)":{tag:"(3010,0098)",vr:"SQ",name:"TomotherapeuticControlPointSequence",vm:"1",version:"DICOM"},"(3010,0099)":{tag:"(3010,0099)",vr:"FD",name:"TomotherapeuticLeafOpenDurations",vm:"1-n",version:"DICOM"},"(3010,009A)":{tag:"(3010,009A)",vr:"FD",name:"TomotherapeuticLeafInitialClosedDurations",vm:"1-n",version:"DICOM"},"(4FFE,0001)":{tag:"(4FFE,0001)",vr:"SQ",name:"MACParametersSequence",vm:"1",version:"DICOM"},"(5200,9229)":{tag:"(5200,9229)",vr:"SQ",name:"SharedFunctionalGroupsSequence",vm:"1",version:"DICOM"},"(5200,9230)":{tag:"(5200,9230)",vr:"SQ",name:"PerFrameFunctionalGroupsSequence",vm:"1",version:"DICOM"},"(5400,0100)":{tag:"(5400,0100)",vr:"SQ",name:"WaveformSequence",vm:"1",version:"DICOM"},"(5400,0110)":{tag:"(5400,0110)",vr:"ox",name:"ChannelMinimumValue",vm:"1",version:"DICOM"},"(5400,0112)":{tag:"(5400,0112)",vr:"ox",name:"ChannelMaximumValue",vm:"1",version:"DICOM"},"(5400,1004)":{tag:"(5400,1004)",vr:"US",name:"WaveformBitsAllocated",vm:"1",version:"DICOM"},"(5400,1006)":{tag:"(5400,1006)",vr:"CS",name:"WaveformSampleInterpretation",vm:"1",version:"DICOM"},"(5400,100A)":{tag:"(5400,100A)",vr:"ox",name:"WaveformPaddingValue",vm:"1",version:"DICOM"},"(5400,1010)":{tag:"(5400,1010)",vr:"ox",name:"WaveformData",vm:"1",version:"DICOM"},"(5600,0010)":{tag:"(5600,0010)",vr:"OF",name:"FirstOrderPhaseCorrectionAngle",vm:"1",version:"DICOM"},"(5600,0020)":{tag:"(5600,0020)",vr:"OF",name:"SpectroscopyData",vm:"1",version:"DICOM"},"(6000-60FF,0010)":{tag:"(6000-60FF,0010)",vr:"US",name:"OverlayRows",vm:"1",version:"DICOM"},"(6000-60FF,0011)":{tag:"(6000-60FF,0011)",vr:"US",name:"OverlayColumns",vm:"1",version:"DICOM"},"(6000-60FF,0015)":{tag:"(6000-60FF,0015)",vr:"IS",name:"NumberOfFramesInOverlay",vm:"1",version:"DICOM"},"(6000-60FF,0022)":{tag:"(6000-60FF,0022)",vr:"LO",name:"OverlayDescription",vm:"1",version:"DICOM"},"(6000-60FF,0040)":{tag:"(6000-60FF,0040)",vr:"CS",name:"OverlayType",vm:"1",version:"DICOM"},"(6000-60FF,0045)":{tag:"(6000-60FF,0045)",vr:"LO",name:"OverlaySubtype",vm:"1",version:"DICOM"},"(6000-60FF,0050)":{tag:"(6000-60FF,0050)",vr:"SS",name:"OverlayOrigin",vm:"2",version:"DICOM"},"(6000-60FF,0051)":{tag:"(6000-60FF,0051)",vr:"US",name:"ImageFrameOrigin",vm:"1",version:"DICOM"},"(6000-60FF,0100)":{tag:"(6000-60FF,0100)",vr:"US",name:"OverlayBitsAllocated",vm:"1",version:"DICOM"},"(6000-60FF,0102)":{tag:"(6000-60FF,0102)",vr:"US",name:"OverlayBitPosition",vm:"1",version:"DICOM"},"(6000-60FF,1001)":{tag:"(6000-60FF,1001)",vr:"CS",name:"OverlayActivationLayer",vm:"1",version:"DICOM"},"(6000-60FF,1301)":{tag:"(6000-60FF,1301)",vr:"IS",name:"ROIArea",vm:"1",version:"DICOM"},"(6000-60FF,1302)":{tag:"(6000-60FF,1302)",vr:"DS",name:"ROIMean",vm:"1",version:"DICOM"},"(6000-60FF,1303)":{tag:"(6000-60FF,1303)",vr:"DS",name:"ROIStandardDeviation",vm:"1",version:"DICOM"},"(6000-60FF,1500)":{tag:"(6000-60FF,1500)",vr:"LO",name:"OverlayLabel",vm:"1",version:"DICOM"},"(6000-60FF,3000)":{tag:"(6000-60FF,3000)",vr:"ox",name:"OverlayData",vm:"1",version:"DICOM"},"(7FE0,0001)":{tag:"(7FE0,0001)",vr:"OV",name:"ExtendedOffsetTable",vm:"1",version:"DICOM"},"(7FE0,0002)":{tag:"(7FE0,0002)",vr:"OV",name:"ExtendedOffsetTableLengths",vm:"1",version:"DICOM"},"(7FE0,0008)":{tag:"(7FE0,0008)",vr:"OF",name:"FloatPixelData",vm:"1",version:"DICOM"},"(7FE0,0009)":{tag:"(7FE0,0009)",vr:"OD",name:"DoubleFloatPixelData",vm:"1",version:"DICOM"},"(7FE0,0010)":{tag:"(7FE0,0010)",vr:"ox",name:"PixelData",vm:"1",version:"DICOM"},"(FFFA,FFFA)":{tag:"(FFFA,FFFA)",vr:"SQ",name:"DigitalSignaturesSequence",vm:"1",version:"DICOM"},"(FFFC,FFFC)":{tag:"(FFFC,FFFC)",vr:"OB",name:"DataSetTrailingPadding",vm:"1",version:"DICOM"},"(FFFE,E000)":{tag:"(FFFE,E000)",vr:"na",name:"Item",vm:"1",version:"DICOM"},"(FFFE,E00D)":{tag:"(FFFE,E00D)",vr:"na",name:"ItemDelimitationItem",vm:"1",version:"DICOM"},"(FFFE,E0DD)":{tag:"(FFFE,E0DD)",vr:"na",name:"SequenceDelimitationItem",vm:"1",version:"DICOM"},"(0028,1224)":{tag:"(0028,1224)",vr:"OW",name:"SegmentedAlphaPaletteColorLookupTableData",vm:"1",version:"Supplement_156"},"(0070,1101)":{tag:"(0070,1101)",vr:"UI",name:"PresentationDisplayCollectionUID",vm:"1",version:"Supplement_156"},"(0070,1102)":{tag:"(0070,1102)",vr:"UI",name:"PresentationSequenceCollectionUID",vm:"1",version:"Supplement_156"},"(0070,1103)":{tag:"(0070,1103)",vr:"US",name:"PresentationSequencePositionIndex",vm:"1",version:"Supplement_156"},"(0070,1104)":{tag:"(0070,1104)",vr:"SQ",name:"RenderedImageReferenceSequence",vm:"1",version:"Supplement_156"},"(0070,1201)":{tag:"(0070,1201)",vr:"SQ",name:"VolumetricPresentationStateInputSequence",vm:"1",version:"Supplement_156"},"(0070,1202)":{tag:"(0070,1202)",vr:"CS",name:"PresentationInputType",vm:"1",version:"Supplement_156"},"(0070,1203)":{tag:"(0070,1203)",vr:"US",name:"InputSequencePositionIndex",vm:"1",version:"Supplement_156"},"(0070,1204)":{tag:"(0070,1204)",vr:"CS",name:"Crop",vm:"1",version:"Supplement_156"},"(0070,1205)":{tag:"(0070,1205)",vr:"US",name:"CroppingSpecificationIndex",vm:"1-n",version:"Supplement_156"},"(0070,1206)":{tag:"(0070,1206)",vr:"CS",name:"CompositingMethod",vm:"1",version:"Supplement_156"},"(0070,1207)":{tag:"(0070,1207)",vr:"US",name:"VolumetricPresentationInputNumber",vm:"1",version:"Supplement_156"},"(0070,1208)":{tag:"(0070,1208)",vr:"CS",name:"ImageVolumeGeometry",vm:"1",version:"Supplement_156"},"(0070,1301)":{tag:"(0070,1301)",vr:"SQ",name:"VolumeCroppingSequence",vm:"1",version:"Supplement_156"},"(0070,1302)":{tag:"(0070,1302)",vr:"CS",name:"VolumeCroppingMethod",vm:"1",version:"Supplement_156"},"(0070,1303)":{tag:"(0070,1303)",vr:"FD",name:"BoundingBoxCrop",vm:"6",version:"Supplement_156"},"(0070,1304)":{tag:"(0070,1304)",vr:"SQ",name:"ObliqueCroppingPlaneSequence",vm:"1",version:"Supplement_156"},"(0070,1305)":{tag:"(0070,1305)",vr:"FD",name:"ObliqueCroppingPlane",vm:"4",version:"Supplement_156"},"(0070,1306)":{tag:"(0070,1306)",vr:"FD",name:"ObliqueCroppingPlaneNormal",vm:"3",version:"Supplement_156"},"(0070,1309)":{tag:"(0070,1309)",vr:"US",name:"CroppingSpecificationNumber",vm:"1",version:"Supplement_156"},"(0070,1501)":{tag:"(0070,1501)",vr:"CS",name:"MultiPlanarReconstructionStyle",vm:"1",version:"Supplement_156"},"(0070,1502)":{tag:"(0070,1502)",vr:"CS",name:"MPRThicknessType",vm:"1",version:"Supplement_156"},"(0070,1503)":{tag:"(0070,1503)",vr:"FD",name:"MPRSlabThickness",vm:"1",version:"Supplement_156"},"(0070,1505)":{tag:"(0070,1505)",vr:"FD",name:"MPRTopLeftHandCorner",vm:"3",version:"Supplement_156"},"(0070,1507)":{tag:"(0070,1507)",vr:"FD",name:"MPRViewWidthDirection",vm:"3",version:"Supplement_156"},"(0070,1508)":{tag:"(0070,1508)",vr:"FD",name:"MPRViewWidth",vm:"1",version:"Supplement_156"},"(0070,150C)":{tag:"(0070,150C)",vr:"FL",name:"NumberOfVolumetricCurvePoints",vm:"1",version:"Supplement_156"},"(0070,150D)":{tag:"(0070,150D)",vr:"OD",name:"VolumetricCurvePoints",vm:"1",version:"Supplement_156"},"(0070,1511)":{tag:"(0070,1511)",vr:"FD",name:"MPRViewHeightDirection",vm:"3",version:"Supplement_156"},"(0070,1512)":{tag:"(0070,1512)",vr:"FD",name:"MPRViewHeight",vm:"1",version:"Supplement_156"},"(0070,1801)":{tag:"(0070,1801)",vr:"SQ",name:"PresentationStateClassificationComponentSequence",vm:"1",version:"Supplement_156"},"(0070,1802)":{tag:"(0070,1802)",vr:"CS",name:"ComponentType",vm:"1",version:"Supplement_156"},"(0070,1803)":{tag:"(0070,1803)",vr:"SQ",name:"ComponentInputSequence",vm:"1",version:"Supplement_156"},"(0070,1804)":{tag:"(0070,1804)",vr:"US",name:"VolumetricPresentationInputIndex",vm:"1",version:"Supplement_156"},"(0070,1805)":{tag:"(0070,1805)",vr:"SQ",name:"PresentationStateCompositorComponentSequence",vm:"1",version:"Supplement_156"},"(0070,1806)":{tag:"(0070,1806)",vr:"SQ",name:"WeightingTransferFunctionSequence",vm:"1",version:"Supplement_156"},"(0070,1807)":{tag:"(0070,1807)",vr:"US",name:"WeightingLookupTableDescriptor",vm:"3",version:"Supplement_156"},"(0070,1808)":{tag:"(0070,1808)",vr:"OB",name:"WeightingLookupTableData",vm:"1",version:"Supplement_156"},"(0070,1901)":{tag:"(0070,1901)",vr:"SQ",name:"VolumetricAnnotationSequence",vm:"1",version:"Supplement_156"},"(0070,1903)":{tag:"(0070,1903)",vr:"SQ",name:"ReferencedStructuredContextSequence",vm:"1",version:"Supplement_156"},"(0070,1904)":{tag:"(0070,1904)",vr:"UI",name:"ReferencedContentItem",vm:"1",version:"Supplement_156"},"(0070,1905)":{tag:"(0070,1905)",vr:"SQ",name:"VolumetricPresentationInputAnnotationSequence",vm:"1",version:"Supplement_156"},"(0070,1907)":{tag:"(0070,1907)",vr:"CS",name:"AnnotationClipping",vm:"1",version:"Supplement_156"},"(0070,1A01)":{tag:"(0070,1A01)",vr:"CS",name:"PresentationAnimationStyle",vm:"1",version:"Supplement_156"},"(0070,1A03)":{tag:"(0070,1A03)",vr:"FD",name:"RecommendedAnimationRate",vm:"1",version:"Supplement_156"},"(0070,1A04)":{tag:"(0070,1A04)",vr:"SQ",name:"AnimationCurveSequence",vm:"1",version:"Supplement_156"},"(0070,1A05)":{tag:"(0070,1A05)",vr:"FD",name:"AnimationStepSize",vm:"1",version:"Supplement_156"},"(0040,4070)":{tag:"(0040,4070)",vr:"SQ",name:"OutputDestinationSequence",vm:"1",version:"CP_1441"},"(0040,4071)":{tag:"(0040,4071)",vr:"SQ",name:"DICOMStorageSequence",vm:"1",version:"CP_1441"},"(0040,4072)":{tag:"(0040,4072)",vr:"SQ",name:"STOWRSStorageSequence",vm:"1",version:"CP_1441"},"(0040,4073)":{tag:"(0040,4073)",vr:"UR",name:"StorageURL",vm:"1",version:"CP_1441"},"(0040,4074)":{tag:"(0040,4074)",vr:"SQ",name:"XDSStorageSequence",vm:"1",version:"CP_1441"},"(0028,2002)":{tag:"(0028,2002)",vr:"CS",name:"ColorSpace",vm:"1",version:"CP_1454"},"(0040,9213)":{tag:"(0040,9213)",vr:"FD",name:"DoubleFloatRealWorldValueLastValueMapped",vm:"1",version:"CP_1458"},"(0040,9214)":{tag:"(0040,9214)",vr:"FD",name:"DoubleFloatRealWorldValueFirstValueMapped",vm:"1",version:"CP_1458"},"(0018,1320)":{tag:"(0018,1320)",vr:"FL",name:"B1rms",vm:"1",version:"CP_1461"},"(0009-o-FFFF,0000)":{tag:"(0009-o-FFFF,0000)",vr:"UL",name:"PrivateGroupLength",vm:"1",version:"PRIVATE"},"(0009-o-FFFF,0010-u-00FF)":{tag:"(0009-o-FFFF,0010-u-00FF)",vr:"LO",name:"PrivateCreator",vm:"1",version:"PRIVATE"},"(0001-o-0007,0000)":{tag:"(0001-o-0007,0000)",vr:"UL",name:"IllegalGroupLength",vm:"1",version:"ILLEGAL"},"(0001-o-0007,0010-u-00FF)":{tag:"(0001-o-0007,0010-u-00FF)",vr:"LO",name:"IllegalPrivateCreator",vm:"1",version:"ILLEGAL"},"(0000-u-FFFF,0000)":{tag:"(0000-u-FFFF,0000)",vr:"UL",name:"GenericGroupLength",vm:"1",version:"GENERIC"},"(0000,0001)":{tag:"(0000,0001)",vr:"UL",name:"RETIRED_CommandLengthToEnd",vm:"1",version:"DICOM/retired"},"(0000,0010)":{tag:"(0000,0010)",vr:"SH",name:"RETIRED_CommandRecognitionCode",vm:"1",version:"DICOM/retired"},"(0000,0200)":{tag:"(0000,0200)",vr:"AE",name:"RETIRED_Initiator",vm:"1",version:"DICOM/retired"},"(0000,0300)":{tag:"(0000,0300)",vr:"AE",name:"RETIRED_Receiver",vm:"1",version:"DICOM/retired"},"(0000,0400)":{tag:"(0000,0400)",vr:"AE",name:"RETIRED_FindLocation",vm:"1",version:"DICOM/retired"},"(0000,0850)":{tag:"(0000,0850)",vr:"US",name:"RETIRED_NumberOfMatches",vm:"1",version:"DICOM/retired"},"(0000,0860)":{tag:"(0000,0860)",vr:"US",name:"RETIRED_ResponseSequenceNumber",vm:"1",version:"DICOM/retired"},"(0000,4000)":{tag:"(0000,4000)",vr:"LT",name:"RETIRED_DialogReceiver",vm:"1",version:"DICOM/retired"},"(0000,4010)":{tag:"(0000,4010)",vr:"LT",name:"RETIRED_TerminalType",vm:"1",version:"DICOM/retired"},"(0000,5010)":{tag:"(0000,5010)",vr:"SH",name:"RETIRED_MessageSetID",vm:"1",version:"DICOM/retired"},"(0000,5020)":{tag:"(0000,5020)",vr:"SH",name:"RETIRED_EndMessageID",vm:"1",version:"DICOM/retired"},"(0000,5110)":{tag:"(0000,5110)",vr:"LT",name:"RETIRED_DisplayFormat",vm:"1",version:"DICOM/retired"},"(0000,5120)":{tag:"(0000,5120)",vr:"LT",name:"RETIRED_PagePositionID",vm:"1",version:"DICOM/retired"},"(0000,5130)":{tag:"(0000,5130)",vr:"CS",name:"RETIRED_TextFormatID",vm:"1",version:"DICOM/retired"},"(0000,5140)":{tag:"(0000,5140)",vr:"CS",name:"RETIRED_NormalReverse",vm:"1",version:"DICOM/retired"},"(0000,5150)":{tag:"(0000,5150)",vr:"CS",name:"RETIRED_AddGrayScale",vm:"1",version:"DICOM/retired"},"(0000,5160)":{tag:"(0000,5160)",vr:"CS",name:"RETIRED_Borders",vm:"1",version:"DICOM/retired"},"(0000,5170)":{tag:"(0000,5170)",vr:"IS",name:"RETIRED_Copies",vm:"1",version:"DICOM/retired"},"(0000,5180)":{tag:"(0000,5180)",vr:"CS",name:"RETIRED_CommandMagnificationType",vm:"1",version:"DICOM/retired"},"(0000,5190)":{tag:"(0000,5190)",vr:"CS",name:"RETIRED_Erase",vm:"1",version:"DICOM/retired"},"(0000,51A0)":{tag:"(0000,51A0)",vr:"CS",name:"RETIRED_Print",vm:"1",version:"DICOM/retired"},"(0000,51B0)":{tag:"(0000,51B0)",vr:"US",name:"RETIRED_Overlays",vm:"1-n",version:"DICOM/retired"},"(0004,1504)":{tag:"(0004,1504)",vr:"up",name:"RETIRED_MRDRDirectoryRecordOffset",vm:"1",version:"DICOM/retired"},"(0004,1600)":{tag:"(0004,1600)",vr:"UL",name:"RETIRED_NumberOfReferences",vm:"1",version:"DICOM/retired"},"(0008,0001)":{tag:"(0008,0001)",vr:"UL",name:"RETIRED_LengthToEnd",vm:"1",version:"DICOM/retired"},"(0008,0010)":{tag:"(0008,0010)",vr:"SH",name:"RETIRED_RecognitionCode",vm:"1",version:"DICOM/retired"},"(0008,0024)":{tag:"(0008,0024)",vr:"DA",name:"RETIRED_OverlayDate",vm:"1",version:"DICOM/retired"},"(0008,0025)":{tag:"(0008,0025)",vr:"DA",name:"RETIRED_CurveDate",vm:"1",version:"DICOM/retired"},"(0008,0034)":{tag:"(0008,0034)",vr:"TM",name:"RETIRED_OverlayTime",vm:"1",version:"DICOM/retired"},"(0008,0035)":{tag:"(0008,0035)",vr:"TM",name:"RETIRED_CurveTime",vm:"1",version:"DICOM/retired"},"(0008,0040)":{tag:"(0008,0040)",vr:"US",name:"RETIRED_DataSetType",vm:"1",version:"DICOM/retired"},"(0008,0041)":{tag:"(0008,0041)",vr:"LO",name:"RETIRED_DataSetSubtype",vm:"1",version:"DICOM/retired"},"(0008,0042)":{tag:"(0008,0042)",vr:"CS",name:"RETIRED_NuclearMedicineSeriesType",vm:"1",version:"DICOM/retired"},"(0008,1000)":{tag:"(0008,1000)",vr:"AE",name:"RETIRED_NetworkID",vm:"1",version:"DICOM/retired"},"(0008,1100)":{tag:"(0008,1100)",vr:"SQ",name:"RETIRED_ReferencedResultsSequence",vm:"1",version:"DICOM/retired"},"(0008,1130)":{tag:"(0008,1130)",vr:"SQ",name:"RETIRED_ReferencedOverlaySequence",vm:"1",version:"DICOM/retired"},"(0008,1145)":{tag:"(0008,1145)",vr:"SQ",name:"RETIRED_ReferencedCurveSequence",vm:"1",version:"DICOM/retired"},"(0008,2110)":{tag:"(0008,2110)",vr:"CS",name:"RETIRED_LossyImageCompressionRetired",vm:"1",version:"DICOM/retired"},"(0008,2200)":{tag:"(0008,2200)",vr:"CS",name:"RETIRED_TransducerPosition",vm:"1",version:"DICOM/retired"},"(0008,2204)":{tag:"(0008,2204)",vr:"CS",name:"RETIRED_TransducerOrientation",vm:"1",version:"DICOM/retired"},"(0008,2208)":{tag:"(0008,2208)",vr:"CS",name:"RETIRED_AnatomicStructure",vm:"1",version:"DICOM/retired"},"(0008,2240)":{tag:"(0008,2240)",vr:"SQ",name:"RETIRED_TransducerPositionSequence",vm:"1",version:"DICOM/retired"},"(0008,2242)":{tag:"(0008,2242)",vr:"SQ",name:"RETIRED_TransducerPositionModifierSequence",vm:"1",version:"DICOM/retired"},"(0008,2244)":{tag:"(0008,2244)",vr:"SQ",name:"RETIRED_TransducerOrientationSequence",vm:"1",version:"DICOM/retired"},"(0008,2246)":{tag:"(0008,2246)",vr:"SQ",name:"RETIRED_TransducerOrientationModifierSequence",vm:"1",version:"DICOM/retired"},"(0008,2251)":{tag:"(0008,2251)",vr:"SQ",name:"RETIRED_AnatomicStructureSpaceOrRegionCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2253)":{tag:"(0008,2253)",vr:"SQ",name:"RETIRED_AnatomicPortalOfEntranceCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2255)":{tag:"(0008,2255)",vr:"SQ",name:"RETIRED_AnatomicApproachDirectionCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2256)":{tag:"(0008,2256)",vr:"ST",name:"RETIRED_AnatomicPerspectiveDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0008,2257)":{tag:"(0008,2257)",vr:"SQ",name:"RETIRED_AnatomicPerspectiveCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2258)":{tag:"(0008,2258)",vr:"ST",name:"RETIRED_AnatomicLocationOfExaminingInstrumentDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0008,2259)":{tag:"(0008,2259)",vr:"SQ",name:"RETIRED_AnatomicLocationOfExaminingInstrumentCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,225A)":{tag:"(0008,225A)",vr:"SQ",name:"RETIRED_AnatomicStructureSpaceOrRegionModifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,225C)":{tag:"(0008,225C)",vr:"SQ",name:"RETIRED_OnAxisBackgroundAnatomicStructureCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,4000)":{tag:"(0008,4000)",vr:"LT",name:"RETIRED_IdentifyingComments",vm:"1",version:"DICOM/retired"},"(0010,1050)":{tag:"(0010,1050)",vr:"LO",name:"RETIRED_InsurancePlanIdentification",vm:"1-n",version:"DICOM/retired"},"(0014,0023)":{tag:"(0014,0023)",vr:"ST",name:"RETIRED_CADFileFormat",vm:"1-n",version:"DICOM/retired"},"(0014,0024)":{tag:"(0014,0024)",vr:"ST",name:"RETIRED_ComponentReferenceSystem",vm:"1-n",version:"DICOM/retired"},"(0014,0045)":{tag:"(0014,0045)",vr:"ST",name:"RETIRED_MaterialPropertiesFileFormatRetired",vm:"1-n",version:"DICOM/retired"},"(0018,0030)":{tag:"(0018,0030)",vr:"LO",name:"RETIRED_Radionuclide",vm:"1-n",version:"DICOM/retired"},"(0018,0032)":{tag:"(0018,0032)",vr:"DS",name:"RETIRED_EnergyWindowCenterline",vm:"1",version:"DICOM/retired"},"(0018,0033)":{tag:"(0018,0033)",vr:"DS",name:"RETIRED_EnergyWindowTotalWidth",vm:"1-n",version:"DICOM/retired"},"(0018,0037)":{tag:"(0018,0037)",vr:"CS",name:"RETIRED_TherapyType",vm:"1",version:"DICOM/retired"},"(0018,0039)":{tag:"(0018,0039)",vr:"CS",name:"RETIRED_TherapyDescription",vm:"1",version:"DICOM/retired"},"(0018,0061)":{tag:"(0018,0061)",vr:"DS",name:"RETIRED_undefined",vm:"1",version:"DICOM/retired"},"(0018,1011)":{tag:"(0018,1011)",vr:"LO",name:"RETIRED_HardcopyCreationDeviceID",vm:"1",version:"DICOM/retired"},"(0018,1017)":{tag:"(0018,1017)",vr:"LO",name:"RETIRED_HardcopyDeviceManufacturer",vm:"1",version:"DICOM/retired"},"(0018,101A)":{tag:"(0018,101A)",vr:"LO",name:"RETIRED_HardcopyDeviceSoftwareVersion",vm:"1-n",version:"DICOM/retired"},"(0018,101B)":{tag:"(0018,101B)",vr:"LO",name:"RETIRED_HardcopyDeviceManufacturerModelName",vm:"1",version:"DICOM/retired"},"(0018,1141)":{tag:"(0018,1141)",vr:"DS",name:"RETIRED_AngularPosition",vm:"1",version:"DICOM/retired"},"(0018,1146)":{tag:"(0018,1146)",vr:"DS",name:"RETIRED_RotationOffset",vm:"1-n",version:"DICOM/retired"},"(0018,1240)":{tag:"(0018,1240)",vr:"IS",name:"RETIRED_UpperLowerPixelValues",vm:"1-n",version:"DICOM/retired"},"(0018,4000)":{tag:"(0018,4000)",vr:"LT",name:"RETIRED_AcquisitionComments",vm:"1",version:"DICOM/retired"},"(0018,5021)":{tag:"(0018,5021)",vr:"LO",name:"RETIRED_PostprocessingFunction",vm:"1",version:"DICOM/retired"},"(0018,5030)":{tag:"(0018,5030)",vr:"DS",name:"RETIRED_DynamicRange",vm:"1",version:"DICOM/retired"},"(0018,5040)":{tag:"(0018,5040)",vr:"DS",name:"RETIRED_TotalGain",vm:"1",version:"DICOM/retired"},"(0018,5210)":{tag:"(0018,5210)",vr:"DS",name:"RETIRED_ImageTransformationMatrix",vm:"6",version:"DICOM/retired"},"(0018,5212)":{tag:"(0018,5212)",vr:"DS",name:"RETIRED_ImageTranslationVector",vm:"3",version:"DICOM/retired"},"(0018,6038)":{tag:"(0018,6038)",vr:"UL",name:"RETIRED_DopplerSampleVolumeXPositionRetired",vm:"1",version:"DICOM/retired"},"(0018,603A)":{tag:"(0018,603A)",vr:"UL",name:"RETIRED_DopplerSampleVolumeYPositionRetired",vm:"1",version:"DICOM/retired"},"(0018,603C)":{tag:"(0018,603C)",vr:"UL",name:"RETIRED_TMLinePositionX0Retired",vm:"1",version:"DICOM/retired"},"(0018,603E)":{tag:"(0018,603E)",vr:"UL",name:"RETIRED_TMLinePositionY0Retired",vm:"1",version:"DICOM/retired"},"(0018,6040)":{tag:"(0018,6040)",vr:"UL",name:"RETIRED_TMLinePositionX1Retired",vm:"1",version:"DICOM/retired"},"(0018,6042)":{tag:"(0018,6042)",vr:"UL",name:"RETIRED_TMLinePositionY1Retired",vm:"1",version:"DICOM/retired"},"(0018,9096)":{tag:"(0018,9096)",vr:"FD",name:"RETIRED_ParallelReductionFactorInPlaneRetired",vm:"1",version:"DICOM/retired"},"(0018,9166)":{tag:"(0018,9166)",vr:"CS",name:"RETIRED_BulkMotionStatus",vm:"1",version:"DICOM/retired"},"(0018,9195)":{tag:"(0018,9195)",vr:"FD",name:"RETIRED_ChemicalShiftMinimumIntegrationLimitInHz",vm:"1",version:"DICOM/retired"},"(0018,9196)":{tag:"(0018,9196)",vr:"FD",name:"RETIRED_ChemicalShiftMaximumIntegrationLimitInHz",vm:"1",version:"DICOM/retired"},"(0020,0014)":{tag:"(0020,0014)",vr:"IS",name:"RETIRED_IsotopeNumber",vm:"1",version:"DICOM/retired"},"(0020,0015)":{tag:"(0020,0015)",vr:"IS",name:"RETIRED_PhaseNumber",vm:"1",version:"DICOM/retired"},"(0020,0016)":{tag:"(0020,0016)",vr:"IS",name:"RETIRED_IntervalNumber",vm:"1",version:"DICOM/retired"},"(0020,0017)":{tag:"(0020,0017)",vr:"IS",name:"RETIRED_TimeSlotNumber",vm:"1",version:"DICOM/retired"},"(0020,0018)":{tag:"(0020,0018)",vr:"IS",name:"RETIRED_AngleNumber",vm:"1",version:"DICOM/retired"},"(0020,0022)":{tag:"(0020,0022)",vr:"IS",name:"RETIRED_OverlayNumber",vm:"1",version:"DICOM/retired"},"(0020,0024)":{tag:"(0020,0024)",vr:"IS",name:"RETIRED_CurveNumber",vm:"1",version:"DICOM/retired"},"(0020,0026)":{tag:"(0020,0026)",vr:"IS",name:"RETIRED_LUTNumber",vm:"1",version:"DICOM/retired"},"(0020,0030)":{tag:"(0020,0030)",vr:"DS",name:"RETIRED_ImagePosition",vm:"3",version:"DICOM/retired"},"(0020,0035)":{tag:"(0020,0035)",vr:"DS",name:"RETIRED_ImageOrientation",vm:"6",version:"DICOM/retired"},"(0020,0050)":{tag:"(0020,0050)",vr:"DS",name:"RETIRED_Location",vm:"1",version:"DICOM/retired"},"(0020,0070)":{tag:"(0020,0070)",vr:"LO",name:"RETIRED_ImageGeometryType",vm:"1",version:"DICOM/retired"},"(0020,0080)":{tag:"(0020,0080)",vr:"CS",name:"RETIRED_MaskingImage",vm:"1-n",version:"DICOM/retired"},"(0020,00AA)":{tag:"(0020,00AA)",vr:"IS",name:"RETIRED_ReportNumber",vm:"1",version:"DICOM/retired"},"(0020,1000)":{tag:"(0020,1000)",vr:"IS",name:"RETIRED_SeriesInStudy",vm:"1",version:"DICOM/retired"},"(0020,1001)":{tag:"(0020,1001)",vr:"IS",name:"RETIRED_AcquisitionsInSeries",vm:"1",version:"DICOM/retired"},"(0020,1003)":{tag:"(0020,1003)",vr:"IS",name:"RETIRED_ImagesInSeries",vm:"1",version:"DICOM/retired"},"(0020,1004)":{tag:"(0020,1004)",vr:"IS",name:"RETIRED_AcquisitionsInStudy",vm:"1",version:"DICOM/retired"},"(0020,1005)":{tag:"(0020,1005)",vr:"IS",name:"RETIRED_ImagesInStudy",vm:"1",version:"DICOM/retired"},"(0020,1020)":{tag:"(0020,1020)",vr:"LO",name:"RETIRED_Reference",vm:"1-n",version:"DICOM/retired"},"(0020,1070)":{tag:"(0020,1070)",vr:"IS",name:"RETIRED_OtherStudyNumbers",vm:"1-n",version:"DICOM/retired"},"(0020,3100-31FF)":{tag:"(0020,3100-31FF)",vr:"CS",name:"RETIRED_SourceImageIDs",vm:"1-n",version:"DICOM/retired"},"(0020,3401)":{tag:"(0020,3401)",vr:"CS",name:"RETIRED_ModifyingDeviceID",vm:"1",version:"DICOM/retired"},"(0020,3402)":{tag:"(0020,3402)",vr:"CS",name:"RETIRED_ModifiedImageID",vm:"1",version:"DICOM/retired"},"(0020,3403)":{tag:"(0020,3403)",vr:"DA",name:"RETIRED_ModifiedImageDate",vm:"1",version:"DICOM/retired"},"(0020,3404)":{tag:"(0020,3404)",vr:"LO",name:"RETIRED_ModifyingDeviceManufacturer",vm:"1",version:"DICOM/retired"},"(0020,3405)":{tag:"(0020,3405)",vr:"TM",name:"RETIRED_ModifiedImageTime",vm:"1",version:"DICOM/retired"},"(0020,3406)":{tag:"(0020,3406)",vr:"LO",name:"RETIRED_ModifiedImageDescription",vm:"1",version:"DICOM/retired"},"(0020,5000)":{tag:"(0020,5000)",vr:"AT",name:"RETIRED_OriginalImageIdentification",vm:"1-n",version:"DICOM/retired"},"(0020,5002)":{tag:"(0020,5002)",vr:"LO",name:"RETIRED_OriginalImageIdentificationNomenclature",vm:"1-n",version:"DICOM/retired"},"(0022,1094)":{tag:"(0022,1094)",vr:"LO",name:"RETIRED_LensConstantDescription",vm:"1",version:"DICOM/retired"},"(0022,1153)":{tag:"(0022,1153)",vr:"SQ",name:"RETIRED_OphthalmicAxialLengthAcquisitionMethodCodeSequence",vm:"1",version:"DICOM/retired"},"(0022,1265)":{tag:"(0022,1265)",vr:"SQ",name:"RETIRED_OphthalmicAxialLengthQualityMetricTypeCodeSequence",vm:"1",version:"DICOM/retired"},"(0022,1273)":{tag:"(0022,1273)",vr:"LO",name:"RETIRED_OphthalmicAxialLengthQualityMetricTypeDescription",vm:"1",version:"DICOM/retired"},"(0028,0005)":{tag:"(0028,0005)",vr:"US",name:"RETIRED_ImageDimensions",vm:"1",version:"DICOM/retired"},"(0028,0012)":{tag:"(0028,0012)",vr:"US",name:"RETIRED_Planes",vm:"1",version:"DICOM/retired"},"(0028,0040)":{tag:"(0028,0040)",vr:"CS",name:"RETIRED_ImageFormat",vm:"1",version:"DICOM/retired"},"(0028,0050)":{tag:"(0028,0050)",vr:"LO",name:"RETIRED_ManipulatedImage",vm:"1-n",version:"DICOM/retired"},"(0028,005F)":{tag:"(0028,005F)",vr:"LO",name:"RETIRED_CompressionRecognitionCode",vm:"1",version:"DICOM/retired"},"(0028,0060)":{tag:"(0028,0060)",vr:"CS",name:"RETIRED_CompressionCode",vm:"1",version:"DICOM/retired"},"(0028,0061)":{tag:"(0028,0061)",vr:"SH",name:"RETIRED_CompressionOriginator",vm:"1",version:"DICOM/retired"},"(0028,0062)":{tag:"(0028,0062)",vr:"LO",name:"RETIRED_CompressionLabel",vm:"1",version:"DICOM/retired"},"(0028,0063)":{tag:"(0028,0063)",vr:"SH",name:"RETIRED_CompressionDescription",vm:"1",version:"DICOM/retired"},"(0028,0065)":{tag:"(0028,0065)",vr:"CS",name:"RETIRED_CompressionSequence",vm:"1-n",version:"DICOM/retired"},"(0028,0066)":{tag:"(0028,0066)",vr:"AT",name:"RETIRED_CompressionStepPointers",vm:"1-n",version:"DICOM/retired"},"(0028,0068)":{tag:"(0028,0068)",vr:"US",name:"RETIRED_RepeatInterval",vm:"1",version:"DICOM/retired"},"(0028,0069)":{tag:"(0028,0069)",vr:"US",name:"RETIRED_BitsGrouped",vm:"1",version:"DICOM/retired"},"(0028,0070)":{tag:"(0028,0070)",vr:"US",name:"RETIRED_PerimeterTable",vm:"1-n",version:"DICOM/retired"},"(0028,0071)":{tag:"(0028,0071)",vr:"xs",name:"RETIRED_PerimeterValue",vm:"1",version:"DICOM/retired"},"(0028,0080)":{tag:"(0028,0080)",vr:"US",name:"RETIRED_PredictorRows",vm:"1",version:"DICOM/retired"},"(0028,0081)":{tag:"(0028,0081)",vr:"US",name:"RETIRED_PredictorColumns",vm:"1",version:"DICOM/retired"},"(0028,0082)":{tag:"(0028,0082)",vr:"US",name:"RETIRED_PredictorConstants",vm:"1-n",version:"DICOM/retired"},"(0028,0090)":{tag:"(0028,0090)",vr:"CS",name:"RETIRED_BlockedPixels",vm:"1",version:"DICOM/retired"},"(0028,0091)":{tag:"(0028,0091)",vr:"US",name:"RETIRED_BlockRows",vm:"1",version:"DICOM/retired"},"(0028,0092)":{tag:"(0028,0092)",vr:"US",name:"RETIRED_BlockColumns",vm:"1",version:"DICOM/retired"},"(0028,0093)":{tag:"(0028,0093)",vr:"US",name:"RETIRED_RowOverlap",vm:"1",version:"DICOM/retired"},"(0028,0094)":{tag:"(0028,0094)",vr:"US",name:"RETIRED_ColumnOverlap",vm:"1",version:"DICOM/retired"},"(0028,0104)":{tag:"(0028,0104)",vr:"xs",name:"RETIRED_SmallestValidPixelValue",vm:"1",version:"DICOM/retired"},"(0028,0105)":{tag:"(0028,0105)",vr:"xs",name:"RETIRED_LargestValidPixelValue",vm:"1",version:"DICOM/retired"},"(0028,0110)":{tag:"(0028,0110)",vr:"xs",name:"RETIRED_SmallestImagePixelValueInPlane",vm:"1",version:"DICOM/retired"},"(0028,0111)":{tag:"(0028,0111)",vr:"xs",name:"RETIRED_LargestImagePixelValueInPlane",vm:"1",version:"DICOM/retired"},"(0028,0200)":{tag:"(0028,0200)",vr:"US",name:"RETIRED_ImageLocation",vm:"1",version:"DICOM/retired"},"(0028,0400)":{tag:"(0028,0400)",vr:"LO",name:"RETIRED_TransformLabel",vm:"1",version:"DICOM/retired"},"(0028,0401)":{tag:"(0028,0401)",vr:"LO",name:"RETIRED_TransformVersionNumber",vm:"1",version:"DICOM/retired"},"(0028,0402)":{tag:"(0028,0402)",vr:"US",name:"RETIRED_NumberOfTransformSteps",vm:"1",version:"DICOM/retired"},"(0028,0403)":{tag:"(0028,0403)",vr:"LO",name:"RETIRED_SequenceOfCompressedData",vm:"1-n",version:"DICOM/retired"},"(0028,0404)":{tag:"(0028,0404)",vr:"AT",name:"RETIRED_DetailsOfCoefficients",vm:"1-n",version:"DICOM/retired"},"(0028,0410)":{tag:"(0028,0410)",vr:"US",name:"RETIRED_RowsForNthOrderCoefficients",vm:"1",version:"DICOM/retired"},"(0028,0411)":{tag:"(0028,0411)",vr:"US",name:"RETIRED_ColumnsForNthOrderCoefficients",vm:"1",version:"DICOM/retired"},"(0028,0412)":{tag:"(0028,0412)",vr:"LO",name:"RETIRED_CoefficientCoding",vm:"1-n",version:"DICOM/retired"},"(0028,0413)":{tag:"(0028,0413)",vr:"AT",name:"RETIRED_CoefficientCodingPointers",vm:"1-n",version:"DICOM/retired"},"(0028,0700)":{tag:"(0028,0700)",vr:"LO",name:"RETIRED_DCTLabel",vm:"1",version:"DICOM/retired"},"(0028,0701)":{tag:"(0028,0701)",vr:"CS",name:"RETIRED_DataBlockDescription",vm:"1-n",version:"DICOM/retired"},"(0028,0702)":{tag:"(0028,0702)",vr:"AT",name:"RETIRED_DataBlock",vm:"1-n",version:"DICOM/retired"},"(0028,0710)":{tag:"(0028,0710)",vr:"US",name:"RETIRED_NormalizationFactorFormat",vm:"1",version:"DICOM/retired"},"(0028,0720)":{tag:"(0028,0720)",vr:"US",name:"RETIRED_ZonalMapNumberFormat",vm:"1",version:"DICOM/retired"},"(0028,0721)":{tag:"(0028,0721)",vr:"AT",name:"RETIRED_ZonalMapLocation",vm:"1-n",version:"DICOM/retired"},"(0028,0722)":{tag:"(0028,0722)",vr:"US",name:"RETIRED_ZonalMapFormat",vm:"1",version:"DICOM/retired"},"(0028,0730)":{tag:"(0028,0730)",vr:"US",name:"RETIRED_AdaptiveMapFormat",vm:"1",version:"DICOM/retired"},"(0028,0740)":{tag:"(0028,0740)",vr:"US",name:"RETIRED_CodeNumberFormat",vm:"1",version:"DICOM/retired"},"(0028,0800)":{tag:"(0028,0800)",vr:"CS",name:"RETIRED_CodeLabel",vm:"1-n",version:"DICOM/retired"},"(0028,0802)":{tag:"(0028,0802)",vr:"US",name:"RETIRED_NumberOfTables",vm:"1",version:"DICOM/retired"},"(0028,0803)":{tag:"(0028,0803)",vr:"AT",name:"RETIRED_CodeTableLocation",vm:"1-n",version:"DICOM/retired"},"(0028,0804)":{tag:"(0028,0804)",vr:"US",name:"RETIRED_BitsForCodeWord",vm:"1",version:"DICOM/retired"},"(0028,0808)":{tag:"(0028,0808)",vr:"AT",name:"RETIRED_ImageDataLocation",vm:"1-n",version:"DICOM/retired"},"(0028,1080)":{tag:"(0028,1080)",vr:"CS",name:"RETIRED_GrayScale",vm:"1",version:"DICOM/retired"},"(0028,1100)":{tag:"(0028,1100)",vr:"xs",name:"RETIRED_GrayLookupTableDescriptor",vm:"3",version:"DICOM/retired"},"(0028,1111)":{tag:"(0028,1111)",vr:"xs",name:"RETIRED_LargeRedPaletteColorLookupTableDescriptor",vm:"4",version:"DICOM/retired"},"(0028,1112)":{tag:"(0028,1112)",vr:"xs",name:"RETIRED_LargeGreenPaletteColorLookupTableDescriptor",vm:"4",version:"DICOM/retired"},"(0028,1113)":{tag:"(0028,1113)",vr:"xs",name:"RETIRED_LargeBluePaletteColorLookupTableDescriptor",vm:"4",version:"DICOM/retired"},"(0028,1200)":{tag:"(0028,1200)",vr:"lt",name:"RETIRED_GrayLookupTableData",vm:"1-n",version:"DICOM/retired"},"(0028,1211)":{tag:"(0028,1211)",vr:"OW",name:"RETIRED_LargeRedPaletteColorLookupTableData",vm:"1",version:"DICOM/retired"},"(0028,1212)":{tag:"(0028,1212)",vr:"OW",name:"RETIRED_LargeGreenPaletteColorLookupTableData",vm:"1",version:"DICOM/retired"},"(0028,1213)":{tag:"(0028,1213)",vr:"OW",name:"RETIRED_LargeBluePaletteColorLookupTableData",vm:"1",version:"DICOM/retired"},"(0028,1214)":{tag:"(0028,1214)",vr:"UI",name:"RETIRED_LargePaletteColorLookupTableUID",vm:"1",version:"DICOM/retired"},"(0028,4000)":{tag:"(0028,4000)",vr:"LT",name:"RETIRED_ImagePresentationComments",vm:"1",version:"DICOM/retired"},"(0028,5000)":{tag:"(0028,5000)",vr:"SQ",name:"RETIRED_BiPlaneAcquisitionSequence",vm:"1",version:"DICOM/retired"},"(0028,6030)":{tag:"(0028,6030)",vr:"US",name:"RETIRED_MaskPointers",vm:"1-n",version:"DICOM/retired"},"(0028,9099)":{tag:"(0028,9099)",vr:"US",name:"RETIRED_LargestMonochromePixelValue",vm:"1",version:"DICOM/retired"},"(0032,000A)":{tag:"(0032,000A)",vr:"CS",name:"RETIRED_StudyStatusID",vm:"1",version:"DICOM/retired"},"(0032,000C)":{tag:"(0032,000C)",vr:"CS",name:"RETIRED_StudyPriorityID",vm:"1",version:"DICOM/retired"},"(0032,0012)":{tag:"(0032,0012)",vr:"LO",name:"RETIRED_StudyIDIssuer",vm:"1",version:"DICOM/retired"},"(0032,0032)":{tag:"(0032,0032)",vr:"DA",name:"RETIRED_StudyVerifiedDate",vm:"1",version:"DICOM/retired"},"(0032,0033)":{tag:"(0032,0033)",vr:"TM",name:"RETIRED_StudyVerifiedTime",vm:"1",version:"DICOM/retired"},"(0032,0034)":{tag:"(0032,0034)",vr:"DA",name:"RETIRED_StudyReadDate",vm:"1",version:"DICOM/retired"},"(0032,0035)":{tag:"(0032,0035)",vr:"TM",name:"RETIRED_StudyReadTime",vm:"1",version:"DICOM/retired"},"(0032,1000)":{tag:"(0032,1000)",vr:"DA",name:"RETIRED_ScheduledStudyStartDate",vm:"1",version:"DICOM/retired"},"(0032,1001)":{tag:"(0032,1001)",vr:"TM",name:"RETIRED_ScheduledStudyStartTime",vm:"1",version:"DICOM/retired"},"(0032,1010)":{tag:"(0032,1010)",vr:"DA",name:"RETIRED_ScheduledStudyStopDate",vm:"1",version:"DICOM/retired"},"(0032,1011)":{tag:"(0032,1011)",vr:"TM",name:"RETIRED_ScheduledStudyStopTime",vm:"1",version:"DICOM/retired"},"(0032,1020)":{tag:"(0032,1020)",vr:"LO",name:"RETIRED_ScheduledStudyLocation",vm:"1",version:"DICOM/retired"},"(0032,1021)":{tag:"(0032,1021)",vr:"AE",name:"RETIRED_ScheduledStudyLocationAETitle",vm:"1-n",version:"DICOM/retired"},"(0032,1030)":{tag:"(0032,1030)",vr:"LO",name:"RETIRED_ReasonForStudy",vm:"1",version:"DICOM/retired"},"(0032,1040)":{tag:"(0032,1040)",vr:"DA",name:"RETIRED_StudyArrivalDate",vm:"1",version:"DICOM/retired"},"(0032,1041)":{tag:"(0032,1041)",vr:"TM",name:"RETIRED_StudyArrivalTime",vm:"1",version:"DICOM/retired"},"(0032,1050)":{tag:"(0032,1050)",vr:"DA",name:"RETIRED_StudyCompletionDate",vm:"1",version:"DICOM/retired"},"(0032,1051)":{tag:"(0032,1051)",vr:"TM",name:"RETIRED_StudyCompletionTime",vm:"1",version:"DICOM/retired"},"(0032,1055)":{tag:"(0032,1055)",vr:"CS",name:"RETIRED_StudyComponentStatusID",vm:"1",version:"DICOM/retired"},"(0032,4000)":{tag:"(0032,4000)",vr:"LT",name:"RETIRED_StudyComments",vm:"1",version:"DICOM/retired"},"(0038,0011)":{tag:"(0038,0011)",vr:"LO",name:"RETIRED_IssuerOfAdmissionID",vm:"1",version:"DICOM/retired"},"(0038,001A)":{tag:"(0038,001A)",vr:"DA",name:"RETIRED_ScheduledAdmissionDate",vm:"1",version:"DICOM/retired"},"(0038,001B)":{tag:"(0038,001B)",vr:"TM",name:"RETIRED_ScheduledAdmissionTime",vm:"1",version:"DICOM/retired"},"(0038,001C)":{tag:"(0038,001C)",vr:"DA",name:"RETIRED_ScheduledDischargeDate",vm:"1",version:"DICOM/retired"},"(0038,001D)":{tag:"(0038,001D)",vr:"TM",name:"RETIRED_ScheduledDischargeTime",vm:"1",version:"DICOM/retired"},"(0038,001E)":{tag:"(0038,001E)",vr:"LO",name:"RETIRED_ScheduledPatientInstitutionResidence",vm:"1",version:"DICOM/retired"},"(0038,0030)":{tag:"(0038,0030)",vr:"DA",name:"RETIRED_DischargeDate",vm:"1",version:"DICOM/retired"},"(0038,0032)":{tag:"(0038,0032)",vr:"TM",name:"RETIRED_DischargeTime",vm:"1",version:"DICOM/retired"},"(0038,0040)":{tag:"(0038,0040)",vr:"LO",name:"RETIRED_DischargeDiagnosisDescription",vm:"1",version:"DICOM/retired"},"(0038,0044)":{tag:"(0038,0044)",vr:"SQ",name:"RETIRED_DischargeDiagnosisCodeSequence",vm:"1",version:"DICOM/retired"},"(0038,0061)":{tag:"(0038,0061)",vr:"LO",name:"RETIRED_IssuerOfServiceEpisodeID",vm:"1",version:"DICOM/retired"},"(0040,0307)":{tag:"(0040,0307)",vr:"DS",name:"RETIRED_DistanceSourceToSupport",vm:"1",version:"DICOM/retired"},"(0040,0330)":{tag:"(0040,0330)",vr:"SQ",name:"RETIRED_ReferencedProcedureStepSequence",vm:"1",version:"DICOM/retired"},"(0040,050A)":{tag:"(0040,050A)",vr:"LO",name:"RETIRED_SpecimenAccessionNumber",vm:"1",version:"DICOM/retired"},"(0040,0550)":{tag:"(0040,0550)",vr:"SQ",name:"RETIRED_SpecimenSequence",vm:"1",version:"DICOM/retired"},"(0040,0552)":{tag:"(0040,0552)",vr:"SQ",name:"RETIRED_SpecimenDescriptionSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,0553)":{tag:"(0040,0553)",vr:"ST",name:"RETIRED_SpecimenDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,06FA)":{tag:"(0040,06FA)",vr:"LO",name:"RETIRED_SlideIdentifier",vm:"1",version:"DICOM/retired"},"(0040,08D8)":{tag:"(0040,08D8)",vr:"SQ",name:"RETIRED_PixelSpacingSequence",vm:"1",version:"DICOM/retired"},"(0040,08DA)":{tag:"(0040,08DA)",vr:"SQ",name:"RETIRED_CoordinateSystemAxisCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,09F8)":{tag:"(0040,09F8)",vr:"SQ",name:"RETIRED_VitalStainCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,1006)":{tag:"(0040,1006)",vr:"SH",name:"RETIRED_PlacerOrderNumberProcedure",vm:"1",version:"DICOM/retired"},"(0040,1007)":{tag:"(0040,1007)",vr:"SH",name:"RETIRED_FillerOrderNumberProcedure",vm:"1",version:"DICOM/retired"},"(0040,1060)":{tag:"(0040,1060)",vr:"LO",name:"RETIRED_RequestedProcedureDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,2001)":{tag:"(0040,2001)",vr:"LO",name:"RETIRED_ReasonForTheImagingServiceRequest",vm:"1",version:"DICOM/retired"},"(0040,2006)":{tag:"(0040,2006)",vr:"SH",name:"RETIRED_PlacerOrderNumberImagingServiceRequestRetired",vm:"1",version:"DICOM/retired"},"(0040,2007)":{tag:"(0040,2007)",vr:"SH",name:"RETIRED_FillerOrderNumberImagingServiceRequestRetired",vm:"1",version:"DICOM/retired"},"(0040,4001)":{tag:"(0040,4001)",vr:"CS",name:"RETIRED_GeneralPurposeScheduledProcedureStepStatus",vm:"1",version:"DICOM/retired"},"(0040,4002)":{tag:"(0040,4002)",vr:"CS",name:"RETIRED_GeneralPurposePerformedProcedureStepStatus",vm:"1",version:"DICOM/retired"},"(0040,4003)":{tag:"(0040,4003)",vr:"CS",name:"RETIRED_GeneralPurposeScheduledProcedureStepPriority",vm:"1",version:"DICOM/retired"},"(0040,4004)":{tag:"(0040,4004)",vr:"SQ",name:"RETIRED_ScheduledProcessingApplicationsCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,4006)":{tag:"(0040,4006)",vr:"CS",name:"RETIRED_MultipleCopiesFlag",vm:"1",version:"DICOM/retired"},"(0040,4015)":{tag:"(0040,4015)",vr:"SQ",name:"RETIRED_ResultingGeneralPurposePerformedProcedureStepsSequence",vm:"1",version:"DICOM/retired"},"(0040,4016)":{tag:"(0040,4016)",vr:"SQ",name:"RETIRED_ReferencedGeneralPurposeScheduledProcedureStepSequence",vm:"1",version:"DICOM/retired"},"(0040,4022)":{tag:"(0040,4022)",vr:"SQ",name:"RETIRED_RelevantInformationSequence",vm:"1",version:"DICOM/retired"},"(0040,4023)":{tag:"(0040,4023)",vr:"UI",name:"RETIRED_ReferencedGeneralPurposeScheduledProcedureStepTransactionUID",vm:"1",version:"DICOM/retired"},"(0040,4031)":{tag:"(0040,4031)",vr:"SQ",name:"RETIRED_RequestedSubsequentWorkitemCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,4032)":{tag:"(0040,4032)",vr:"SQ",name:"RETIRED_NonDICOMOutputCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,A007)":{tag:"(0040,A007)",vr:"CS",name:"RETIRED_FindingsFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A020)":{tag:"(0040,A020)",vr:"SQ",name:"RETIRED_FindingsSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A021)":{tag:"(0040,A021)",vr:"UI",name:"RETIRED_FindingsGroupUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A022)":{tag:"(0040,A022)",vr:"UI",name:"RETIRED_ReferencedFindingsGroupUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A023)":{tag:"(0040,A023)",vr:"DA",name:"RETIRED_FindingsGroupRecordingDateTrial",vm:"1",version:"DICOM/retired"},"(0040,A024)":{tag:"(0040,A024)",vr:"TM",name:"RETIRED_FindingsGroupRecordingTimeTrial",vm:"1",version:"DICOM/retired"},"(0040,A026)":{tag:"(0040,A026)",vr:"SQ",name:"RETIRED_FindingsSourceCategoryCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A028)":{tag:"(0040,A028)",vr:"SQ",name:"RETIRED_DocumentingOrganizationIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A047)":{tag:"(0040,A047)",vr:"LO",name:"RETIRED_MeasurementPrecisionDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,A057)":{tag:"(0040,A057)",vr:"CS",name:"RETIRED_UrgencyOrPriorityAlertsTrial",vm:"1-n",version:"DICOM/retired"},"(0040,A060)":{tag:"(0040,A060)",vr:"LO",name:"RETIRED_SequencingIndicatorTrial",vm:"1",version:"DICOM/retired"},"(0040,A066)":{tag:"(0040,A066)",vr:"SQ",name:"RETIRED_DocumentIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A067)":{tag:"(0040,A067)",vr:"PN",name:"RETIRED_DocumentAuthorTrial",vm:"1",version:"DICOM/retired"},"(0040,A068)":{tag:"(0040,A068)",vr:"SQ",name:"RETIRED_DocumentAuthorIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A070)":{tag:"(0040,A070)",vr:"SQ",name:"RETIRED_IdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A074)":{tag:"(0040,A074)",vr:"OB",name:"RETIRED_ObjectBinaryIdentifierTrial",vm:"1",version:"DICOM/retired"},"(0040,A076)":{tag:"(0040,A076)",vr:"SQ",name:"RETIRED_DocumentingObserverIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A085)":{tag:"(0040,A085)",vr:"SQ",name:"RETIRED_ProcedureIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A089)":{tag:"(0040,A089)",vr:"OB",name:"RETIRED_ObjectDirectoryBinaryIdentifierTrial",vm:"1",version:"DICOM/retired"},"(0040,A090)":{tag:"(0040,A090)",vr:"SQ",name:"RETIRED_EquivalentCDADocumentSequence",vm:"1",version:"DICOM/retired"},"(0040,A110)":{tag:"(0040,A110)",vr:"DA",name:"RETIRED_DateOfDocumentOrVerbalTransactionTrial",vm:"1",version:"DICOM/retired"},"(0040,A112)":{tag:"(0040,A112)",vr:"TM",name:"RETIRED_TimeOfDocumentCreationOrVerbalTransactionTrial",vm:"1",version:"DICOM/retired"},"(0040,A125)":{tag:"(0040,A125)",vr:"CS",name:"RETIRED_ReportStatusIDTrial",vm:"2",version:"DICOM/retired"},"(0040,A167)":{tag:"(0040,A167)",vr:"SQ",name:"RETIRED_ObservationCategoryCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A16A)":{tag:"(0040,A16A)",vr:"ST",name:"RETIRED_BibliographicCitationTrial",vm:"1",version:"DICOM/retired"},"(0040,A172)":{tag:"(0040,A172)",vr:"UI",name:"RETIRED_ReferencedObservationUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A173)":{tag:"(0040,A173)",vr:"CS",name:"RETIRED_ReferencedObservationClassTrial",vm:"1",version:"DICOM/retired"},"(0040,A174)":{tag:"(0040,A174)",vr:"CS",name:"RETIRED_ReferencedObjectObservationClassTrial",vm:"1",version:"DICOM/retired"},"(0040,A192)":{tag:"(0040,A192)",vr:"DA",name:"RETIRED_ObservationDateTrial",vm:"1",version:"DICOM/retired"},"(0040,A193)":{tag:"(0040,A193)",vr:"TM",name:"RETIRED_ObservationTimeTrial",vm:"1",version:"DICOM/retired"},"(0040,A194)":{tag:"(0040,A194)",vr:"CS",name:"RETIRED_MeasurementAutomationTrial",vm:"1",version:"DICOM/retired"},"(0040,A224)":{tag:"(0040,A224)",vr:"ST",name:"RETIRED_IdentificationDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,A290)":{tag:"(0040,A290)",vr:"CS",name:"RETIRED_CoordinatesSetGeometricTypeTrial",vm:"1",version:"DICOM/retired"},"(0040,A296)":{tag:"(0040,A296)",vr:"SQ",name:"RETIRED_AlgorithmCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A297)":{tag:"(0040,A297)",vr:"ST",name:"RETIRED_AlgorithmDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,A29A)":{tag:"(0040,A29A)",vr:"SL",name:"RETIRED_PixelCoordinatesSetTrial",vm:"2-2n",version:"DICOM/retired"},"(0040,A307)":{tag:"(0040,A307)",vr:"PN",name:"RETIRED_CurrentObserverTrial",vm:"1",version:"DICOM/retired"},"(0040,A313)":{tag:"(0040,A313)",vr:"SQ",name:"RETIRED_ReferencedAccessionSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A33A)":{tag:"(0040,A33A)",vr:"ST",name:"RETIRED_ReportStatusCommentTrial",vm:"1",version:"DICOM/retired"},"(0040,A340)":{tag:"(0040,A340)",vr:"SQ",name:"RETIRED_ProcedureContextSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A352)":{tag:"(0040,A352)",vr:"PN",name:"RETIRED_VerbalSourceTrial",vm:"1",version:"DICOM/retired"},"(0040,A353)":{tag:"(0040,A353)",vr:"ST",name:"RETIRED_AddressTrial",vm:"1",version:"DICOM/retired"},"(0040,A354)":{tag:"(0040,A354)",vr:"LO",name:"RETIRED_TelephoneNumberTrial",vm:"1",version:"DICOM/retired"},"(0040,A358)":{tag:"(0040,A358)",vr:"SQ",name:"RETIRED_VerbalSourceIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A380)":{tag:"(0040,A380)",vr:"SQ",name:"RETIRED_ReportDetailSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A402)":{tag:"(0040,A402)",vr:"UI",name:"RETIRED_ObservationSubjectUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A403)":{tag:"(0040,A403)",vr:"CS",name:"RETIRED_ObservationSubjectClassTrial",vm:"1",version:"DICOM/retired"},"(0040,A404)":{tag:"(0040,A404)",vr:"SQ",name:"RETIRED_ObservationSubjectTypeCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A600)":{tag:"(0040,A600)",vr:"CS",name:"RETIRED_ObservationSubjectContextFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A601)":{tag:"(0040,A601)",vr:"CS",name:"RETIRED_ObserverContextFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A603)":{tag:"(0040,A603)",vr:"CS",name:"RETIRED_ProcedureContextFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A731)":{tag:"(0040,A731)",vr:"SQ",name:"RETIRED_RelationshipSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A732)":{tag:"(0040,A732)",vr:"SQ",name:"RETIRED_RelationshipTypeCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A744)":{tag:"(0040,A744)",vr:"SQ",name:"RETIRED_LanguageCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A992)":{tag:"(0040,A992)",vr:"ST",name:"RETIRED_UniformResourceLocatorTrial",vm:"1",version:"DICOM/retired"},"(0040,DB06)":{tag:"(0040,DB06)",vr:"DT",name:"RETIRED_TemplateVersion",vm:"1",version:"DICOM/retired"},"(0040,DB07)":{tag:"(0040,DB07)",vr:"DT",name:"RETIRED_TemplateLocalVersion",vm:"1",version:"DICOM/retired"},"(0040,DB0B)":{tag:"(0040,DB0B)",vr:"CS",name:"RETIRED_TemplateExtensionFlag",vm:"1",version:"DICOM/retired"},"(0040,DB0C)":{tag:"(0040,DB0C)",vr:"UI",name:"RETIRED_TemplateExtensionOrganizationUID",vm:"1",version:"DICOM/retired"},"(0040,DB0D)":{tag:"(0040,DB0D)",vr:"UI",name:"RETIRED_TemplateExtensionCreatorUID",vm:"1",version:"DICOM/retired"},"(0054,1400)":{tag:"(0054,1400)",vr:"CS",name:"RETIRED_CountsIncluded",vm:"1-n",version:"DICOM/retired"},"(0054,1401)":{tag:"(0054,1401)",vr:"CS",name:"RETIRED_DeadTimeCorrectionFlag",vm:"1",version:"DICOM/retired"},"(0070,0040)":{tag:"(0070,0040)",vr:"IS",name:"RETIRED_ImageRotationRetired",vm:"1",version:"DICOM/retired"},"(0070,0050)":{tag:"(0070,0050)",vr:"US",name:"RETIRED_DisplayedAreaTopLeftHandCornerTrial",vm:"2",version:"DICOM/retired"},"(0070,0051)":{tag:"(0070,0051)",vr:"US",name:"RETIRED_DisplayedAreaBottomRightHandCornerTrial",vm:"2",version:"DICOM/retired"},"(0070,0067)":{tag:"(0070,0067)",vr:"US",name:"RETIRED_GraphicLayerRecommendedDisplayRGBValue",vm:"3",version:"DICOM/retired"},"(0074,1024)":{tag:"(0074,1024)",vr:"IS",name:"RETIRED_BeamOrderIndexTrial",vm:"1",version:"DICOM/retired"},"(0074,1038)":{tag:"(0074,1038)",vr:"DS",name:"RETIRED_DoubleExposureMetersetTrial",vm:"1",version:"DICOM/retired"},"(0074,103A)":{tag:"(0074,103A)",vr:"DS",name:"RETIRED_DoubleExposureFieldDeltaTrial",vm:"4",version:"DICOM/retired"},"(0074,1220)":{tag:"(0074,1220)",vr:"SQ",name:"RETIRED_RelatedProcedureStepSequence",vm:"1",version:"DICOM/retired"},"(0074,1222)":{tag:"(0074,1222)",vr:"LO",name:"RETIRED_ProcedureStepRelationshipType",vm:"1",version:"DICOM/retired"},"(0088,0904)":{tag:"(0088,0904)",vr:"LO",name:"RETIRED_TopicTitle",vm:"1",version:"DICOM/retired"},"(0088,0906)":{tag:"(0088,0906)",vr:"ST",name:"RETIRED_TopicSubject",vm:"1",version:"DICOM/retired"},"(0088,0910)":{tag:"(0088,0910)",vr:"LO",name:"RETIRED_TopicAuthor",vm:"1",version:"DICOM/retired"},"(0088,0912)":{tag:"(0088,0912)",vr:"LO",name:"RETIRED_TopicKeywords",vm:"1-32",version:"DICOM/retired"},"(0400,0315)":{tag:"(0400,0315)",vr:"FL",name:"RETIRED_undefined",vm:"1",version:"DICOM/retired"},"(1000,0010)":{tag:"(1000,0010)",vr:"US",name:"RETIRED_EscapeTriplet",vm:"3",version:"DICOM/retired"},"(1000,0011)":{tag:"(1000,0011)",vr:"US",name:"RETIRED_RunLengthTriplet",vm:"3",version:"DICOM/retired"},"(1000,0012)":{tag:"(1000,0012)",vr:"US",name:"RETIRED_HuffmanTableSize",vm:"1",version:"DICOM/retired"},"(1000,0013)":{tag:"(1000,0013)",vr:"US",name:"RETIRED_HuffmanTableTriplet",vm:"3",version:"DICOM/retired"},"(1000,0014)":{tag:"(1000,0014)",vr:"US",name:"RETIRED_ShiftTableSize",vm:"1",version:"DICOM/retired"},"(1000,0015)":{tag:"(1000,0015)",vr:"US",name:"RETIRED_ShiftTableTriplet",vm:"3",version:"DICOM/retired"},"(1010,0004)":{tag:"(1010,0004)",vr:"US",name:"RETIRED_ZonalMap",vm:"1-n",version:"DICOM/retired"},"(2000,0062)":{tag:"(2000,0062)",vr:"CS",name:"RETIRED_ColorImagePrintingFlag",vm:"1",version:"DICOM/retired"},"(2000,0063)":{tag:"(2000,0063)",vr:"CS",name:"RETIRED_CollationFlag",vm:"1",version:"DICOM/retired"},"(2000,0065)":{tag:"(2000,0065)",vr:"CS",name:"RETIRED_AnnotationFlag",vm:"1",version:"DICOM/retired"},"(2000,0067)":{tag:"(2000,0067)",vr:"CS",name:"RETIRED_ImageOverlayFlag",vm:"1",version:"DICOM/retired"},"(2000,0069)":{tag:"(2000,0069)",vr:"CS",name:"RETIRED_PresentationLUTFlag",vm:"1",version:"DICOM/retired"},"(2000,006A)":{tag:"(2000,006A)",vr:"CS",name:"RETIRED_ImageBoxPresentationLUTFlag",vm:"1",version:"DICOM/retired"},"(2000,0510)":{tag:"(2000,0510)",vr:"SQ",name:"RETIRED_ReferencedStoredPrintSequence",vm:"1",version:"DICOM/retired"},"(2020,0130)":{tag:"(2020,0130)",vr:"SQ",name:"RETIRED_ReferencedImageOverlayBoxSequence",vm:"1",version:"DICOM/retired"},"(2020,0140)":{tag:"(2020,0140)",vr:"SQ",name:"RETIRED_ReferencedVOILUTBoxSequence",vm:"1",version:"DICOM/retired"},"(2040,0010)":{tag:"(2040,0010)",vr:"SQ",name:"RETIRED_ReferencedOverlayPlaneSequence",vm:"1",version:"DICOM/retired"},"(2040,0011)":{tag:"(2040,0011)",vr:"US",name:"RETIRED_ReferencedOverlayPlaneGroups",vm:"1-99",version:"DICOM/retired"},"(2040,0020)":{tag:"(2040,0020)",vr:"SQ",name:"RETIRED_OverlayPixelDataSequence",vm:"1",version:"DICOM/retired"},"(2040,0060)":{tag:"(2040,0060)",vr:"CS",name:"RETIRED_OverlayMagnificationType",vm:"1",version:"DICOM/retired"},"(2040,0070)":{tag:"(2040,0070)",vr:"CS",name:"RETIRED_OverlaySmoothingType",vm:"1",version:"DICOM/retired"},"(2040,0072)":{tag:"(2040,0072)",vr:"CS",name:"RETIRED_OverlayOrImageMagnification",vm:"1",version:"DICOM/retired"},"(2040,0074)":{tag:"(2040,0074)",vr:"US",name:"RETIRED_MagnifyToNumberOfColumns",vm:"1",version:"DICOM/retired"},"(2040,0080)":{tag:"(2040,0080)",vr:"CS",name:"RETIRED_OverlayForegroundDensity",vm:"1",version:"DICOM/retired"},"(2040,0082)":{tag:"(2040,0082)",vr:"CS",name:"RETIRED_OverlayBackgroundDensity",vm:"1",version:"DICOM/retired"},"(2040,0090)":{tag:"(2040,0090)",vr:"CS",name:"RETIRED_OverlayMode",vm:"1",version:"DICOM/retired"},"(2040,0100)":{tag:"(2040,0100)",vr:"CS",name:"RETIRED_ThresholdDensity",vm:"1",version:"DICOM/retired"},"(2040,0500)":{tag:"(2040,0500)",vr:"SQ",name:"RETIRED_ReferencedImageBoxSequenceRetired",vm:"1",version:"DICOM/retired"},"(2100,0010)":{tag:"(2100,0010)",vr:"SH",name:"RETIRED_PrintJobID",vm:"1",version:"DICOM/retired"},"(2100,0140)":{tag:"(2100,0140)",vr:"AE",name:"RETIRED_DestinationAE",vm:"1",version:"DICOM/retired"},"(2100,0500)":{tag:"(2100,0500)",vr:"SQ",name:"RETIRED_ReferencedPrintJobSequencePullStoredPrint",vm:"1",version:"DICOM/retired"},"(2110,0099)":{tag:"(2110,0099)",vr:"SH",name:"RETIRED_PrintQueueID",vm:"1",version:"DICOM/retired"},"(2120,0010)":{tag:"(2120,0010)",vr:"CS",name:"RETIRED_QueueStatus",vm:"1",version:"DICOM/retired"},"(2120,0050)":{tag:"(2120,0050)",vr:"SQ",name:"RETIRED_PrintJobDescriptionSequence",vm:"1",version:"DICOM/retired"},"(2120,0070)":{tag:"(2120,0070)",vr:"SQ",name:"RETIRED_ReferencedPrintJobSequence",vm:"1",version:"DICOM/retired"},"(2130,0010)":{tag:"(2130,0010)",vr:"SQ",name:"RETIRED_PrintManagementCapabilitiesSequence",vm:"1",version:"DICOM/retired"},"(2130,0015)":{tag:"(2130,0015)",vr:"SQ",name:"RETIRED_PrinterCharacteristicsSequence",vm:"1",version:"DICOM/retired"},"(2130,0030)":{tag:"(2130,0030)",vr:"SQ",name:"RETIRED_FilmBoxContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0040)":{tag:"(2130,0040)",vr:"SQ",name:"RETIRED_ImageBoxContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0050)":{tag:"(2130,0050)",vr:"SQ",name:"RETIRED_AnnotationContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0060)":{tag:"(2130,0060)",vr:"SQ",name:"RETIRED_ImageOverlayBoxContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0080)":{tag:"(2130,0080)",vr:"SQ",name:"RETIRED_PresentationLUTContentSequence",vm:"1",version:"DICOM/retired"},"(2130,00A0)":{tag:"(2130,00A0)",vr:"SQ",name:"RETIRED_ProposedStudySequence",vm:"1",version:"DICOM/retired"},"(2130,00C0)":{tag:"(2130,00C0)",vr:"SQ",name:"RETIRED_OriginalImageSequence",vm:"1",version:"DICOM/retired"},"(3006,00C0)":{tag:"(3006,00C0)",vr:"SQ",name:"RETIRED_FrameOfReferenceRelationshipSequence",vm:"1",version:"DICOM/retired"},"(3006,00C2)":{tag:"(3006,00C2)",vr:"UI",name:"RETIRED_RelatedFrameOfReferenceUID",vm:"1",version:"DICOM/retired"},"(3006,00C4)":{tag:"(3006,00C4)",vr:"CS",name:"RETIRED_FrameOfReferenceTransformationType",vm:"1",version:"DICOM/retired"},"(300A,0088)":{tag:"(300A,0088)",vr:"FL",name:"RETIRED_BeamDosePointDepth",vm:"1",version:"DICOM/retired"},"(300A,0089)":{tag:"(300A,0089)",vr:"FL",name:"RETIRED_BeamDosePointEquivalentDepth",vm:"1",version:"DICOM/retired"},"(300A,008A)":{tag:"(300A,008A)",vr:"FL",name:"RETIRED_BeamDosePointSSD",vm:"1",version:"DICOM/retired"},"(300A,0782)":{tag:"(300A,0782)",vr:"US",name:"RETIRED_undefined",vm:"1",version:"DICOM/retired"},"(4000,0010)":{tag:"(4000,0010)",vr:"LT",name:"RETIRED_Arbitrary",vm:"1",version:"DICOM/retired"},"(4000,4000)":{tag:"(4000,4000)",vr:"LT",name:"RETIRED_TextComments",vm:"1",version:"DICOM/retired"},"(4008,0040)":{tag:"(4008,0040)",vr:"SH",name:"RETIRED_ResultsID",vm:"1",version:"DICOM/retired"},"(4008,0042)":{tag:"(4008,0042)",vr:"LO",name:"RETIRED_ResultsIDIssuer",vm:"1",version:"DICOM/retired"},"(4008,0050)":{tag:"(4008,0050)",vr:"SQ",name:"RETIRED_ReferencedInterpretationSequence",vm:"1",version:"DICOM/retired"},"(4008,00FF)":{tag:"(4008,00FF)",vr:"CS",name:"RETIRED_ReportProductionStatusTrial",vm:"1",version:"DICOM/retired"},"(4008,0100)":{tag:"(4008,0100)",vr:"DA",name:"RETIRED_InterpretationRecordedDate",vm:"1",version:"DICOM/retired"},"(4008,0101)":{tag:"(4008,0101)",vr:"TM",name:"RETIRED_InterpretationRecordedTime",vm:"1",version:"DICOM/retired"},"(4008,0102)":{tag:"(4008,0102)",vr:"PN",name:"RETIRED_InterpretationRecorder",vm:"1",version:"DICOM/retired"},"(4008,0103)":{tag:"(4008,0103)",vr:"LO",name:"RETIRED_ReferenceToRecordedSound",vm:"1",version:"DICOM/retired"},"(4008,0108)":{tag:"(4008,0108)",vr:"DA",name:"RETIRED_InterpretationTranscriptionDate",vm:"1",version:"DICOM/retired"},"(4008,0109)":{tag:"(4008,0109)",vr:"TM",name:"RETIRED_InterpretationTranscriptionTime",vm:"1",version:"DICOM/retired"},"(4008,010A)":{tag:"(4008,010A)",vr:"PN",name:"RETIRED_InterpretationTranscriber",vm:"1",version:"DICOM/retired"},"(4008,010B)":{tag:"(4008,010B)",vr:"ST",name:"RETIRED_InterpretationText",vm:"1",version:"DICOM/retired"},"(4008,010C)":{tag:"(4008,010C)",vr:"PN",name:"RETIRED_InterpretationAuthor",vm:"1",version:"DICOM/retired"},"(4008,0111)":{tag:"(4008,0111)",vr:"SQ",name:"RETIRED_InterpretationApproverSequence",vm:"1",version:"DICOM/retired"},"(4008,0112)":{tag:"(4008,0112)",vr:"DA",name:"RETIRED_InterpretationApprovalDate",vm:"1",version:"DICOM/retired"},"(4008,0113)":{tag:"(4008,0113)",vr:"TM",name:"RETIRED_InterpretationApprovalTime",vm:"1",version:"DICOM/retired"},"(4008,0114)":{tag:"(4008,0114)",vr:"PN",name:"RETIRED_PhysicianApprovingInterpretation",vm:"1",version:"DICOM/retired"},"(4008,0115)":{tag:"(4008,0115)",vr:"LT",name:"RETIRED_InterpretationDiagnosisDescription",vm:"1",version:"DICOM/retired"},"(4008,0117)":{tag:"(4008,0117)",vr:"SQ",name:"RETIRED_InterpretationDiagnosisCodeSequence",vm:"1",version:"DICOM/retired"},"(4008,0118)":{tag:"(4008,0118)",vr:"SQ",name:"RETIRED_ResultsDistributionListSequence",vm:"1",version:"DICOM/retired"},"(4008,0119)":{tag:"(4008,0119)",vr:"PN",name:"RETIRED_DistributionName",vm:"1",version:"DICOM/retired"},"(4008,011A)":{tag:"(4008,011A)",vr:"LO",name:"RETIRED_DistributionAddress",vm:"1",version:"DICOM/retired"},"(4008,0200)":{tag:"(4008,0200)",vr:"SH",name:"RETIRED_InterpretationID",vm:"1",version:"DICOM/retired"},"(4008,0202)":{tag:"(4008,0202)",vr:"LO",name:"RETIRED_InterpretationIDIssuer",vm:"1",version:"DICOM/retired"},"(4008,0210)":{tag:"(4008,0210)",vr:"CS",name:"RETIRED_InterpretationTypeID",vm:"1",version:"DICOM/retired"},"(4008,0212)":{tag:"(4008,0212)",vr:"CS",name:"RETIRED_InterpretationStatusID",vm:"1",version:"DICOM/retired"},"(4008,0300)":{tag:"(4008,0300)",vr:"ST",name:"RETIRED_Impressions",vm:"1",version:"DICOM/retired"},"(4008,4000)":{tag:"(4008,4000)",vr:"ST",name:"RETIRED_ResultsComments",vm:"1",version:"DICOM/retired"},"(5000-50FF,0005)":{tag:"(5000-50FF,0005)",vr:"US",name:"RETIRED_CurveDimensions",vm:"1",version:"DICOM/retired"},"(5000-50FF,0010)":{tag:"(5000-50FF,0010)",vr:"US",name:"RETIRED_NumberOfPoints",vm:"1",version:"DICOM/retired"},"(5000-50FF,0020)":{tag:"(5000-50FF,0020)",vr:"CS",name:"RETIRED_TypeOfData",vm:"1",version:"DICOM/retired"},"(5000-50FF,0022)":{tag:"(5000-50FF,0022)",vr:"LO",name:"RETIRED_CurveDescription",vm:"1",version:"DICOM/retired"},"(5000-50FF,0030)":{tag:"(5000-50FF,0030)",vr:"SH",name:"RETIRED_AxisUnits",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0040)":{tag:"(5000-50FF,0040)",vr:"SH",name:"RETIRED_AxisLabels",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0103)":{tag:"(5000-50FF,0103)",vr:"US",name:"RETIRED_DataValueRepresentation",vm:"1",version:"DICOM/retired"},"(5000-50FF,0104)":{tag:"(5000-50FF,0104)",vr:"US",name:"RETIRED_MinimumCoordinateValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0105)":{tag:"(5000-50FF,0105)",vr:"US",name:"RETIRED_MaximumCoordinateValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0106)":{tag:"(5000-50FF,0106)",vr:"SH",name:"RETIRED_CurveRange",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0110)":{tag:"(5000-50FF,0110)",vr:"US",name:"RETIRED_CurveDataDescriptor",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0112)":{tag:"(5000-50FF,0112)",vr:"US",name:"RETIRED_CoordinateStartValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0114)":{tag:"(5000-50FF,0114)",vr:"US",name:"RETIRED_CoordinateStepValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,1001)":{tag:"(5000-50FF,1001)",vr:"CS",name:"RETIRED_CurveActivationLayer",vm:"1",version:"DICOM/retired"},"(5000-50FF,2000)":{tag:"(5000-50FF,2000)",vr:"US",name:"RETIRED_AudioType",vm:"1",version:"DICOM/retired"},"(5000-50FF,2002)":{tag:"(5000-50FF,2002)",vr:"US",name:"RETIRED_AudioSampleFormat",vm:"1",version:"DICOM/retired"},"(5000-50FF,2004)":{tag:"(5000-50FF,2004)",vr:"US",name:"RETIRED_NumberOfChannels",vm:"1",version:"DICOM/retired"},"(5000-50FF,2006)":{tag:"(5000-50FF,2006)",vr:"UL",name:"RETIRED_NumberOfSamples",vm:"1",version:"DICOM/retired"},"(5000-50FF,2008)":{tag:"(5000-50FF,2008)",vr:"UL",name:"RETIRED_SampleRate",vm:"1",version:"DICOM/retired"},"(5000-50FF,200A)":{tag:"(5000-50FF,200A)",vr:"UL",name:"RETIRED_TotalTime",vm:"1",version:"DICOM/retired"},"(5000-50FF,200C)":{tag:"(5000-50FF,200C)",vr:"ox",name:"RETIRED_AudioSampleData",vm:"1",version:"DICOM/retired"},"(5000-50FF,200E)":{tag:"(5000-50FF,200E)",vr:"LT",name:"RETIRED_AudioComments",vm:"1",version:"DICOM/retired"},"(5000-50FF,2500)":{tag:"(5000-50FF,2500)",vr:"LO",name:"RETIRED_CurveLabel",vm:"1",version:"DICOM/retired"},"(5000-50FF,2600)":{tag:"(5000-50FF,2600)",vr:"SQ",name:"RETIRED_CurveReferencedOverlaySequence",vm:"1",version:"DICOM/retired"},"(5000-50FF,2610)":{tag:"(5000-50FF,2610)",vr:"US",name:"RETIRED_CurveReferencedOverlayGroup",vm:"1",version:"DICOM/retired"},"(5000-50FF,3000)":{tag:"(5000-50FF,3000)",vr:"ox",name:"RETIRED_CurveData",vm:"1",version:"DICOM/retired"},"(6000-60FF,0012)":{tag:"(6000-60FF,0012)",vr:"US",name:"RETIRED_OverlayPlanes",vm:"1",version:"DICOM/retired"},"(6000-60FF,0052)":{tag:"(6000-60FF,0052)",vr:"US",name:"RETIRED_OverlayPlaneOrigin",vm:"1",version:"DICOM/retired"},"(6000-60FF,0060)":{tag:"(6000-60FF,0060)",vr:"CS",name:"RETIRED_OverlayCompressionCode",vm:"1",version:"DICOM/retired"},"(6000-60FF,0061)":{tag:"(6000-60FF,0061)",vr:"SH",name:"RETIRED_OverlayCompressionOriginator",vm:"1",version:"DICOM/retired"},"(6000-60FF,0062)":{tag:"(6000-60FF,0062)",vr:"SH",name:"RETIRED_OverlayCompressionLabel",vm:"1",version:"DICOM/retired"},"(6000-60FF,0063)":{tag:"(6000-60FF,0063)",vr:"CS",name:"RETIRED_OverlayCompressionDescription",vm:"1",version:"DICOM/retired"},"(6000-60FF,0066)":{tag:"(6000-60FF,0066)",vr:"AT",name:"RETIRED_OverlayCompressionStepPointers",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,0068)":{tag:"(6000-60FF,0068)",vr:"US",name:"RETIRED_OverlayRepeatInterval",vm:"1",version:"DICOM/retired"},"(6000-60FF,0069)":{tag:"(6000-60FF,0069)",vr:"US",name:"RETIRED_OverlayBitsGrouped",vm:"1",version:"DICOM/retired"},"(6000-60FF,0110)":{tag:"(6000-60FF,0110)",vr:"CS",name:"RETIRED_OverlayFormat",vm:"1",version:"DICOM/retired"},"(6000-60FF,0200)":{tag:"(6000-60FF,0200)",vr:"US",name:"RETIRED_OverlayLocation",vm:"1",version:"DICOM/retired"},"(6000-60FF,0800)":{tag:"(6000-60FF,0800)",vr:"CS",name:"RETIRED_OverlayCodeLabel",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,0802)":{tag:"(6000-60FF,0802)",vr:"US",name:"RETIRED_OverlayNumberOfTables",vm:"1",version:"DICOM/retired"},"(6000-60FF,0803)":{tag:"(6000-60FF,0803)",vr:"AT",name:"RETIRED_OverlayCodeTableLocation",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,0804)":{tag:"(6000-60FF,0804)",vr:"US",name:"RETIRED_OverlayBitsForCodeWord",vm:"1",version:"DICOM/retired"},"(6000-60FF,1100)":{tag:"(6000-60FF,1100)",vr:"US",name:"RETIRED_OverlayDescriptorGray",vm:"1",version:"DICOM/retired"},"(6000-60FF,1101)":{tag:"(6000-60FF,1101)",vr:"US",name:"RETIRED_OverlayDescriptorRed",vm:"1",version:"DICOM/retired"},"(6000-60FF,1102)":{tag:"(6000-60FF,1102)",vr:"US",name:"RETIRED_OverlayDescriptorGreen",vm:"1",version:"DICOM/retired"},"(6000-60FF,1103)":{tag:"(6000-60FF,1103)",vr:"US",name:"RETIRED_OverlayDescriptorBlue",vm:"1",version:"DICOM/retired"},"(6000-60FF,1200)":{tag:"(6000-60FF,1200)",vr:"US",name:"RETIRED_OverlaysGray",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,1201)":{tag:"(6000-60FF,1201)",vr:"US",name:"RETIRED_OverlaysRed",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,1202)":{tag:"(6000-60FF,1202)",vr:"US",name:"RETIRED_OverlaysGreen",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,1203)":{tag:"(6000-60FF,1203)",vr:"US",name:"RETIRED_OverlaysBlue",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,4000)":{tag:"(6000-60FF,4000)",vr:"LT",name:"RETIRED_OverlayComments",vm:"1",version:"DICOM/retired"},"(7FE0,0020)":{tag:"(7FE0,0020)",vr:"OW",name:"RETIRED_CoefficientsSDVN",vm:"1",version:"DICOM/retired"},"(7FE0,0030)":{tag:"(7FE0,0030)",vr:"OW",name:"RETIRED_CoefficientsSDHN",vm:"1",version:"DICOM/retired"},"(7FE0,0040)":{tag:"(7FE0,0040)",vr:"OW",name:"RETIRED_CoefficientsSDDN",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0010)":{tag:"(7F00-7FFF,0010)",vr:"ox",name:"RETIRED_VariablePixelData",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0011)":{tag:"(7F00-7FFF,0011)",vr:"US",name:"RETIRED_VariableNextDataGroup",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0020)":{tag:"(7F00-7FFF,0020)",vr:"OW",name:"RETIRED_VariableCoefficientsSDVN",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0030)":{tag:"(7F00-7FFF,0030)",vr:"OW",name:"RETIRED_VariableCoefficientsSDHN",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0040)":{tag:"(7F00-7FFF,0040)",vr:"OW",name:"RETIRED_VariableCoefficientsSDDN",vm:"1",version:"DICOM/retired"},"":{tag:""},'(0019,"1.2.840.113681",10)':{tag:'(0019,"1.2.840.113681",10)',vr:"ST",name:"CRImageParamsCommon",vm:"1",version:"PrivateTag"},'(0019,"1.2.840.113681",11)':{tag:'(0019,"1.2.840.113681",11)',vr:"ST",name:"CRImageIPParamsSingle",vm:"1",version:"PrivateTag"},'(0019,"1.2.840.113681",12)':{tag:'(0019,"1.2.840.113681",12)',vr:"ST",name:"CRImageIPParamsLeft",vm:"1",version:"PrivateTag"},'(0019,"1.2.840.113681",13)':{tag:'(0019,"1.2.840.113681",13)',vr:"ST",name:"CRImageIPParamsRight",vm:"1",version:"PrivateTag"},'(0087,"1.2.840.113708.794.1.1.2.0",10)':{tag:'(0087,"1.2.840.113708.794.1.1.2.0",10)',vr:"CS",name:"MediaType",vm:"1",version:"PrivateTag"},'(0087,"1.2.840.113708.794.1.1.2.0",20)':{tag:'(0087,"1.2.840.113708.794.1.1.2.0",20)',vr:"CS",name:"MediaLocation",vm:"1",version:"PrivateTag"},'(0087,"1.2.840.113708.794.1.1.2.0",50)':{tag:'(0087,"1.2.840.113708.794.1.1.2.0",50)',vr:"IS",name:"EstimatedRetrieveTime",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",00)':{tag:'(0009,"ACUSON",00)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",01)':{tag:'(0009,"ACUSON",01)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",02)':{tag:'(0009,"ACUSON",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",03)':{tag:'(0009,"ACUSON",03)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",04)':{tag:'(0009,"ACUSON",04)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",05)':{tag:'(0009,"ACUSON",05)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",06)':{tag:'(0009,"ACUSON",06)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",07)':{tag:'(0009,"ACUSON",07)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",08)':{tag:'(0009,"ACUSON",08)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",09)':{tag:'(0009,"ACUSON",09)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0a)':{tag:'(0009,"ACUSON",0a)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0b)':{tag:'(0009,"ACUSON",0b)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0c)':{tag:'(0009,"ACUSON",0c)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0d)':{tag:'(0009,"ACUSON",0d)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0e)':{tag:'(0009,"ACUSON",0e)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0f)':{tag:'(0009,"ACUSON",0f)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",10)':{tag:'(0009,"ACUSON",10)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",11)':{tag:'(0009,"ACUSON",11)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",12)':{tag:'(0009,"ACUSON",12)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",13)':{tag:'(0009,"ACUSON",13)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",14)':{tag:'(0009,"ACUSON",14)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",15)':{tag:'(0009,"ACUSON",15)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0003,"AEGIS_DICOM_2.00",00)':{tag:'(0003,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0005,"AEGIS_DICOM_2.00",00)':{tag:'(0005,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"AEGIS_DICOM_2.00",00)':{tag:'(0009,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"AEGIS_DICOM_2.00",00)':{tag:'(0019,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"AEGIS_DICOM_2.00",00)':{tag:'(0029,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(1369,"AEGIS_DICOM_2.00",00)':{tag:'(1369,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"AGFA",10)':{tag:'(0009,"AGFA",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",11)':{tag:'(0009,"AGFA",11)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",13)':{tag:'(0009,"AGFA",13)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",14)':{tag:'(0009,"AGFA",14)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",15)':{tag:'(0009,"AGFA",15)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0031,"AGFA PACS Archive Mirroring 1.0",00)':{tag:'(0031,"AGFA PACS Archive Mirroring 1.0",00)',vr:"CS",name:"StudyStatus",vm:"1",version:"PrivateTag"},'(0031,"AGFA PACS Archive Mirroring 1.0",01)':{tag:'(0031,"AGFA PACS Archive Mirroring 1.0",01)',vr:"UL",name:"DateTimeVerified",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",10)':{tag:'(0029,"CAMTRONICS IP",10)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",20)':{tag:'(0029,"CAMTRONICS IP",20)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",30)':{tag:'(0029,"CAMTRONICS IP",30)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",40)':{tag:'(0029,"CAMTRONICS IP",40)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",10)':{tag:'(0029,"CAMTRONICS",10)',vr:"LT",name:"Commentline",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",20)':{tag:'(0029,"CAMTRONICS",20)',vr:"DS",name:"EdgeEnhancementCoefficient",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",50)':{tag:'(0029,"CAMTRONICS",50)',vr:"LT",name:"SceneText",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",60)':{tag:'(0029,"CAMTRONICS",60)',vr:"LT",name:"ImageText",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",70)':{tag:'(0029,"CAMTRONICS",70)',vr:"IS",name:"PixelShiftHorizontal",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",80)':{tag:'(0029,"CAMTRONICS",80)',vr:"IS",name:"PixelShiftVertical",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",90)':{tag:'(0029,"CAMTRONICS",90)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"CARDIO-D.R. 1.0",00)':{tag:'(0009,"CARDIO-D.R. 1.0",00)',vr:"UL",name:"FileLocation",vm:"1",version:"PrivateTag"},'(0009,"CARDIO-D.R. 1.0",01)':{tag:'(0009,"CARDIO-D.R. 1.0",01)',vr:"UL",name:"FileSize",vm:"1",version:"PrivateTag"},'(0009,"CARDIO-D.R. 1.0",40)':{tag:'(0009,"CARDIO-D.R. 1.0",40)',vr:"SQ",name:"AlternateImageSequence",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",00)':{tag:'(0019,"CARDIO-D.R. 1.0",00)',vr:"CS",name:"ImageBlankingShape",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",02)':{tag:'(0019,"CARDIO-D.R. 1.0",02)',vr:"IS",name:"ImageBlankingLeftVerticalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",04)':{tag:'(0019,"CARDIO-D.R. 1.0",04)',vr:"IS",name:"ImageBlankingRightVerticalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",06)':{tag:'(0019,"CARDIO-D.R. 1.0",06)',vr:"IS",name:"ImageBlankingUpperHorizontalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",08)':{tag:'(0019,"CARDIO-D.R. 1.0",08)',vr:"IS",name:"ImageBlankingLowerHorizontalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",10)':{tag:'(0019,"CARDIO-D.R. 1.0",10)',vr:"IS",name:"CenterOfCircularImageBlanking",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",12)':{tag:'(0019,"CARDIO-D.R. 1.0",12)',vr:"IS",name:"RadiusOfCircularImageBlanking",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",30)':{tag:'(0019,"CARDIO-D.R. 1.0",30)',vr:"UL",name:"MaximumImageFrameSize",vm:"1",version:"PrivateTag"},'(0021,"CARDIO-D.R. 1.0",13)':{tag:'(0021,"CARDIO-D.R. 1.0",13)',vr:"IS",name:"ImageSequenceNumber",vm:"1",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",00)':{tag:'(0029,"CARDIO-D.R. 1.0",00)',vr:"SQ",name:"EdgeEnhancementSequence",vm:"1",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",01)':{tag:'(0029,"CARDIO-D.R. 1.0",01)',vr:"US",name:"ConvolutionKernelSize",vm:"2",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",02)':{tag:'(0029,"CARDIO-D.R. 1.0",02)',vr:"DS",name:"ConvolutionKernelCoefficients",vm:"1-n",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",03)':{tag:'(0029,"CARDIO-D.R. 1.0",03)',vr:"DS",name:"EdgeEnhancementGain",vm:"1",version:"PrivateTag"},'(0025,"CMR42 CIRCLECVI",1010)':{tag:'(0025,"CMR42 CIRCLECVI",1010)',vr:"LO",name:"WorkspaceID",vm:"1",version:"PrivateTag"},'(0025,"CMR42 CIRCLECVI",1020)':{tag:'(0025,"CMR42 CIRCLECVI",1020)',vr:"LO",name:"WorkspaceTimeString",vm:"1",version:"PrivateTag"},'(0025,"CMR42 CIRCLECVI",1030)':{tag:'(0025,"CMR42 CIRCLECVI",1030)',vr:"OB",name:"WorkspaceStream",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",00)':{tag:'(0009,"DCMTK_ANONYMIZER",00)',vr:"SQ",name:"AnonymizerUIDMap",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",10)':{tag:'(0009,"DCMTK_ANONYMIZER",10)',vr:"UI",name:"AnonymizerUIDKey",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",20)':{tag:'(0009,"DCMTK_ANONYMIZER",20)',vr:"UI",name:"AnonymizerUIDValue",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",30)':{tag:'(0009,"DCMTK_ANONYMIZER",30)',vr:"SQ",name:"AnonymizerPatientIDMap",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",40)':{tag:'(0009,"DCMTK_ANONYMIZER",40)',vr:"LO",name:"AnonymizerPatientIDKey",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",50)':{tag:'(0009,"DCMTK_ANONYMIZER",50)',vr:"LO",name:"AnonymizerPatientIDValue",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",22)':{tag:'(0019,"DIDI TO PCR 1.1",22)',vr:"UN",name:"RouteAET",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",23)':{tag:'(0019,"DIDI TO PCR 1.1",23)',vr:"DS",name:"PCRPrintScale",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",24)':{tag:'(0019,"DIDI TO PCR 1.1",24)',vr:"UN",name:"PCRPrintJobEnd",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",25)':{tag:'(0019,"DIDI TO PCR 1.1",25)',vr:"IS",name:"PCRNoFilmCopies",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",26)':{tag:'(0019,"DIDI TO PCR 1.1",26)',vr:"IS",name:"PCRFilmLayoutPosition",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",27)':{tag:'(0019,"DIDI TO PCR 1.1",27)',vr:"UN",name:"PCRPrintReportName",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",70)':{tag:'(0019,"DIDI TO PCR 1.1",70)',vr:"UN",name:"RADProtocolPrinter",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",71)':{tag:'(0019,"DIDI TO PCR 1.1",71)',vr:"UN",name:"RADProtocolMedium",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",90)':{tag:'(0019,"DIDI TO PCR 1.1",90)',vr:"LO",name:"UnprocessedFlag",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",91)':{tag:'(0019,"DIDI TO PCR 1.1",91)',vr:"UN",name:"KeyValues",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",92)':{tag:'(0019,"DIDI TO PCR 1.1",92)',vr:"UN",name:"DestinationPostprocessingFunction",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A0)':{tag:'(0019,"DIDI TO PCR 1.1",A0)',vr:"UN",name:"Version",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A1)':{tag:'(0019,"DIDI TO PCR 1.1",A1)',vr:"UN",name:"RangingMode",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A2)':{tag:'(0019,"DIDI TO PCR 1.1",A2)',vr:"UN",name:"AbdomenBrightness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A3)':{tag:'(0019,"DIDI TO PCR 1.1",A3)',vr:"UN",name:"FixedBrightness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A4)':{tag:'(0019,"DIDI TO PCR 1.1",A4)',vr:"UN",name:"DetailContrast",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A5)':{tag:'(0019,"DIDI TO PCR 1.1",A5)',vr:"UN",name:"ContrastBalance",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A6)':{tag:'(0019,"DIDI TO PCR 1.1",A6)',vr:"UN",name:"StructureBoost",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A7)':{tag:'(0019,"DIDI TO PCR 1.1",A7)',vr:"UN",name:"StructurePreference",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A8)':{tag:'(0019,"DIDI TO PCR 1.1",A8)',vr:"UN",name:"NoiseRobustness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A9)':{tag:'(0019,"DIDI TO PCR 1.1",A9)',vr:"UN",name:"NoiseDoseLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AA)':{tag:'(0019,"DIDI TO PCR 1.1",AA)',vr:"UN",name:"NoiseDoseStep",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AB)':{tag:'(0019,"DIDI TO PCR 1.1",AB)',vr:"UN",name:"NoiseFrequencyLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AC)':{tag:'(0019,"DIDI TO PCR 1.1",AC)',vr:"UN",name:"WeakContrastLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AD)':{tag:'(0019,"DIDI TO PCR 1.1",AD)',vr:"UN",name:"StrongContrastLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AE)':{tag:'(0019,"DIDI TO PCR 1.1",AE)',vr:"UN",name:"StructureBoostOffset",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AF)':{tag:'(0019,"DIDI TO PCR 1.1",AF)',vr:"UN",name:"SmoothGain",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B0)':{tag:'(0019,"DIDI TO PCR 1.1",B0)',vr:"UN",name:"MeasureField1",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B1)':{tag:'(0019,"DIDI TO PCR 1.1",B1)',vr:"UN",name:"MeasureField2",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B2)':{tag:'(0019,"DIDI TO PCR 1.1",B2)',vr:"UN",name:"KeyPercentile1",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B3)':{tag:'(0019,"DIDI TO PCR 1.1",B3)',vr:"UN",name:"KeyPercentile2",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B4)':{tag:'(0019,"DIDI TO PCR 1.1",B4)',vr:"UN",name:"DensityLUT",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B5)':{tag:'(0019,"DIDI TO PCR 1.1",B5)',vr:"UN",name:"Brightness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B6)':{tag:'(0019,"DIDI TO PCR 1.1",B6)',vr:"UN",name:"Gamma",vm:"1",version:"PrivateTag"},'(0089,"DIDI TO PCR 1.1",10)':{tag:'(0089,"DIDI TO PCR 1.1",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",31)':{tag:'(0029,"DIGISCAN IMAGE",31)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",32)':{tag:'(0029,"DIGISCAN IMAGE",32)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",33)':{tag:'(0029,"DIGISCAN IMAGE",33)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",34)':{tag:'(0029,"DIGISCAN IMAGE",34)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(7001-o-70ff,"DLX_ANNOT_01",04)':{tag:'(7001-o-70ff,"DLX_ANNOT_01",04)',vr:"ST",name:"TextAnnotation",vm:"1",version:"PrivateTag"},'(7001-o-70ff,"DLX_ANNOT_01",05)':{tag:'(7001-o-70ff,"DLX_ANNOT_01",05)',vr:"IS",name:"Box",vm:"2",version:"PrivateTag"},'(7001-o-70ff,"DLX_ANNOT_01",07)':{tag:'(7001-o-70ff,"DLX_ANNOT_01",07)',vr:"IS",name:"ArrowEnd",vm:"2",version:"PrivateTag"},'(0015,"DLX_EXAMS_01",01)':{tag:'(0015,"DLX_EXAMS_01",01)',vr:"DS",name:"StenosisCalibrationRatio",vm:"1",version:"PrivateTag"},'(0015,"DLX_EXAMS_01",02)':{tag:'(0015,"DLX_EXAMS_01",02)',vr:"DS",name:"StenosisMagnification",vm:"1",version:"PrivateTag"},'(0015,"DLX_EXAMS_01",03)':{tag:'(0015,"DLX_EXAMS_01",03)',vr:"DS",name:"CardiacCalibrationRatio",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"DLX_LKUP_01",01)':{tag:'(6001-o-60ff,"DLX_LKUP_01",01)',vr:"US",name:"GrayPaletteColorLookupTableDescriptor",vm:"3",version:"PrivateTag"},'(6001-o-60ff,"DLX_LKUP_01",02)':{tag:'(6001-o-60ff,"DLX_LKUP_01",02)',vr:"US",name:"GrayPaletteColorLookupTableData",vm:"1",version:"PrivateTag"},'(0011,"DLX_PATNT_01",01)':{tag:'(0011,"DLX_PATNT_01",01)',vr:"LT",name:"PatientDOB",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",01)':{tag:'(0019,"DLX_SERIE_01",01)',vr:"DS",name:"AngleValueLArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",02)':{tag:'(0019,"DLX_SERIE_01",02)',vr:"DS",name:"AngleValuePArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",03)':{tag:'(0019,"DLX_SERIE_01",03)',vr:"DS",name:"AngleValueCArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",04)':{tag:'(0019,"DLX_SERIE_01",04)',vr:"CS",name:"AngleLabelLArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",05)':{tag:'(0019,"DLX_SERIE_01",05)',vr:"CS",name:"AngleLabelPArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",06)':{tag:'(0019,"DLX_SERIE_01",06)',vr:"CS",name:"AngleLabelCArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",07)':{tag:'(0019,"DLX_SERIE_01",07)',vr:"ST",name:"ProcedureName",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",08)':{tag:'(0019,"DLX_SERIE_01",08)',vr:"ST",name:"ExamName",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",09)':{tag:'(0019,"DLX_SERIE_01",09)',vr:"SH",name:"PatientSize",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",0a)':{tag:'(0019,"DLX_SERIE_01",0a)',vr:"IS",name:"RecordView",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",10)':{tag:'(0019,"DLX_SERIE_01",10)',vr:"DS",name:"InjectorDelay",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",11)':{tag:'(0019,"DLX_SERIE_01",11)',vr:"CS",name:"AutoInject",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",14)':{tag:'(0019,"DLX_SERIE_01",14)',vr:"IS",name:"AcquisitionMode",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",15)':{tag:'(0019,"DLX_SERIE_01",15)',vr:"CS",name:"CameraRotationEnabled",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",16)':{tag:'(0019,"DLX_SERIE_01",16)',vr:"CS",name:"ReverseSweep",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",17)':{tag:'(0019,"DLX_SERIE_01",17)',vr:"IS",name:"SpatialFilterStrength",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",18)':{tag:'(0019,"DLX_SERIE_01",18)',vr:"IS",name:"ZoomFactor",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",19)':{tag:'(0019,"DLX_SERIE_01",19)',vr:"IS",name:"XZoomCenter",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1a)':{tag:'(0019,"DLX_SERIE_01",1a)',vr:"IS",name:"YZoomCenter",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1b)':{tag:'(0019,"DLX_SERIE_01",1b)',vr:"DS",name:"Focus",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1c)':{tag:'(0019,"DLX_SERIE_01",1c)',vr:"CS",name:"Dose",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1d)':{tag:'(0019,"DLX_SERIE_01",1d)',vr:"IS",name:"SideMark",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1e)':{tag:'(0019,"DLX_SERIE_01",1e)',vr:"IS",name:"PercentageLandscape",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1f)':{tag:'(0019,"DLX_SERIE_01",1f)',vr:"DS",name:"ExposureDuration",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",01)':{tag:'(00E1,"ELSCINT1",01)',vr:"US",name:"DataDictionaryVersion",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",14)':{tag:'(00E1,"ELSCINT1",14)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",22)':{tag:'(00E1,"ELSCINT1",22)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(00E1,"ELSCINT1",23)':{tag:'(00E1,"ELSCINT1",23)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(00E1,"ELSCINT1",24)':{tag:'(00E1,"ELSCINT1",24)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",25)':{tag:'(00E1,"ELSCINT1",25)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",40)':{tag:'(00E1,"ELSCINT1",40)',vr:"SH",name:"OffsetFromCTMRImages",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",00)':{tag:'(0601,"ELSCINT1",00)',vr:"SH",name:"ImplementationVersion",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",20)':{tag:'(0601,"ELSCINT1",20)',vr:"DS",name:"RelativeTablePosition",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",21)':{tag:'(0601,"ELSCINT1",21)',vr:"DS",name:"RelativeTableHeight",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",30)':{tag:'(0601,"ELSCINT1",30)',vr:"SH",name:"SurviewDirection",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",31)':{tag:'(0601,"ELSCINT1",31)',vr:"DS",name:"SurviewLength",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",50)':{tag:'(0601,"ELSCINT1",50)',vr:"SH",name:"ImageViewType",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",70)':{tag:'(0601,"ELSCINT1",70)',vr:"DS",name:"BatchNumber",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",71)':{tag:'(0601,"ELSCINT1",71)',vr:"DS",name:"BatchSize",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",72)':{tag:'(0601,"ELSCINT1",72)',vr:"DS",name:"BatchSliceNumber",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",04)':{tag:'(0009,"FDMS 1.0",04)',vr:"SH",name:"ImageControlUnit",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",05)':{tag:'(0009,"FDMS 1.0",05)',vr:"OW",name:"ImageUID",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",06)':{tag:'(0009,"FDMS 1.0",06)',vr:"OW",name:"RouteImageUID",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",08)':{tag:'(0009,"FDMS 1.0",08)',vr:"UL",name:"ImageDisplayInformationVersionNo",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",09)':{tag:'(0009,"FDMS 1.0",09)',vr:"UL",name:"PatientInformationVersionNo",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",0C)':{tag:'(0009,"FDMS 1.0",0C)',vr:"OW",name:"FilmUID",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",10)':{tag:'(0009,"FDMS 1.0",10)',vr:"CS",name:"ExposureUnitTypeCode",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",80)':{tag:'(0009,"FDMS 1.0",80)',vr:"LO",name:"KanjiHospitalName",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",90)':{tag:'(0009,"FDMS 1.0",90)',vr:"ST",name:"DistributionCode",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",92)':{tag:'(0009,"FDMS 1.0",92)',vr:"SH",name:"KanjiDepartmentName",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",F0)':{tag:'(0009,"FDMS 1.0",F0)',vr:"CS",name:"BlackeningProcessFlag",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",15)':{tag:'(0019,"FDMS 1.0",15)',vr:"LO",name:"KanjiBodyPartForExposure",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",32)':{tag:'(0019,"FDMS 1.0",32)',vr:"LO",name:"KanjiMenuName",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",40)':{tag:'(0019,"FDMS 1.0",40)',vr:"CS",name:"ImageProcessingType",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",50)':{tag:'(0019,"FDMS 1.0",50)',vr:"CS",name:"EDRMode",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",60)':{tag:'(0019,"FDMS 1.0",60)',vr:"SH",name:"RadiographersCode",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",70)':{tag:'(0019,"FDMS 1.0",70)',vr:"IS",name:"SplitExposureFormat",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",71)':{tag:'(0019,"FDMS 1.0",71)',vr:"IS",name:"NoOfSplitExposureFrames",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",80)':{tag:'(0019,"FDMS 1.0",80)',vr:"IS",name:"ReadingPositionSpecification",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",81)':{tag:'(0019,"FDMS 1.0",81)',vr:"IS",name:"ReadingSensitivityCenter",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",90)':{tag:'(0019,"FDMS 1.0",90)',vr:"SH",name:"FilmAnnotationCharacterString1",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",91)':{tag:'(0019,"FDMS 1.0",91)',vr:"SH",name:"FilmAnnotationCharacterString2",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",10)':{tag:'(0021,"FDMS 1.0",10)',vr:"CS",name:"FCRImageID",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",30)':{tag:'(0021,"FDMS 1.0",30)',vr:"CS",name:"SetNo",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",40)':{tag:'(0021,"FDMS 1.0",40)',vr:"IS",name:"ImageNoInTheSet",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",50)':{tag:'(0021,"FDMS 1.0",50)',vr:"CS",name:"PairProcessingInformation",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",80)':{tag:'(0021,"FDMS 1.0",80)',vr:"OB",name:"EquipmentTypeSpecificInformation",vm:"1",version:"PrivateTag"},'(0023,"FDMS 1.0",10)':{tag:'(0023,"FDMS 1.0",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"FDMS 1.0",20)':{tag:'(0023,"FDMS 1.0",20)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"FDMS 1.0",30)':{tag:'(0023,"FDMS 1.0",30)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",10)':{tag:'(0025,"FDMS 1.0",10)',vr:"US",name:"RelativeLightEmissionAmountSk",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",11)':{tag:'(0025,"FDMS 1.0",11)',vr:"US",name:"TermOfCorrectionForEachIPTypeSt",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",12)':{tag:'(0025,"FDMS 1.0",12)',vr:"US",name:"ReadingGainGp",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",13)':{tag:'(0025,"FDMS 1.0",13)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",15)':{tag:'(0025,"FDMS 1.0",15)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",20)':{tag:'(0025,"FDMS 1.0",20)',vr:"US",name:"Unknown",vm:"2",version:"PrivateTag"},'(0025,"FDMS 1.0",21)':{tag:'(0025,"FDMS 1.0",21)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",30)':{tag:'(0025,"FDMS 1.0",30)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",31)':{tag:'(0025,"FDMS 1.0",31)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",32)':{tag:'(0025,"FDMS 1.0",32)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",33)':{tag:'(0025,"FDMS 1.0",33)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",34)':{tag:'(0025,"FDMS 1.0",34)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",40)':{tag:'(0025,"FDMS 1.0",40)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",41)':{tag:'(0025,"FDMS 1.0",41)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",42)':{tag:'(0025,"FDMS 1.0",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",43)':{tag:'(0025,"FDMS 1.0",43)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",50)':{tag:'(0025,"FDMS 1.0",50)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",51)':{tag:'(0025,"FDMS 1.0",51)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",52)':{tag:'(0025,"FDMS 1.0",52)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",53)':{tag:'(0025,"FDMS 1.0",53)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",60)':{tag:'(0025,"FDMS 1.0",60)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",61)':{tag:'(0025,"FDMS 1.0",61)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",62)':{tag:'(0025,"FDMS 1.0",62)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",63)':{tag:'(0025,"FDMS 1.0",63)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",70)':{tag:'(0025,"FDMS 1.0",70)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",71)':{tag:'(0025,"FDMS 1.0",71)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",72)':{tag:'(0025,"FDMS 1.0",72)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",73)':{tag:'(0025,"FDMS 1.0",73)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",74)':{tag:'(0025,"FDMS 1.0",74)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",80)':{tag:'(0025,"FDMS 1.0",80)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",81)':{tag:'(0025,"FDMS 1.0",81)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",82)':{tag:'(0025,"FDMS 1.0",82)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",83)':{tag:'(0025,"FDMS 1.0",83)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",84)':{tag:'(0025,"FDMS 1.0",84)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",90)':{tag:'(0025,"FDMS 1.0",90)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",91)':{tag:'(0025,"FDMS 1.0",91)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",92)':{tag:'(0025,"FDMS 1.0",92)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",93)':{tag:'(0025,"FDMS 1.0",93)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",94)':{tag:'(0025,"FDMS 1.0",94)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",95)':{tag:'(0025,"FDMS 1.0",95)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",96)':{tag:'(0025,"FDMS 1.0",96)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a0)':{tag:'(0025,"FDMS 1.0",a0)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a1)':{tag:'(0025,"FDMS 1.0",a1)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a2)':{tag:'(0025,"FDMS 1.0",a2)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a3)':{tag:'(0025,"FDMS 1.0",a3)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",10)':{tag:'(0027,"FDMS 1.0",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",20)':{tag:'(0027,"FDMS 1.0",20)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",30)':{tag:'(0027,"FDMS 1.0",30)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",40)':{tag:'(0027,"FDMS 1.0",40)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",50)':{tag:'(0027,"FDMS 1.0",50)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",60)':{tag:'(0027,"FDMS 1.0",60)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",70)':{tag:'(0027,"FDMS 1.0",70)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",80)':{tag:'(0027,"FDMS 1.0",80)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",a0)':{tag:'(0027,"FDMS 1.0",a0)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",a1)':{tag:'(0027,"FDMS 1.0",a1)',vr:"CS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0027,"FDMS 1.0",a2)':{tag:'(0027,"FDMS 1.0",a2)',vr:"CS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0027,"FDMS 1.0",a3)':{tag:'(0027,"FDMS 1.0",a3)',vr:"SS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"FDMS 1.0",20)':{tag:'(0029,"FDMS 1.0",20)',vr:"CS",name:"ImageScanningDirection",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",30)':{tag:'(0029,"FDMS 1.0",30)',vr:"CS",name:"ExtendedReadingSizeValue",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",34)':{tag:'(0029,"FDMS 1.0",34)',vr:"US",name:"MagnificationReductionRatio",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",44)':{tag:'(0029,"FDMS 1.0",44)',vr:"CS",name:"LineDensityCode",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",50)':{tag:'(0029,"FDMS 1.0",50)',vr:"CS",name:"DataCompressionCode",vm:"1",version:"PrivateTag"},'(2011,"FDMS 1.0",11)':{tag:'(2011,"FDMS 1.0",11)',vr:"CS",name:"ImagePosition SpecifyingFlag",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",06)':{tag:'(50F1,"FDMS 1.0",06)',vr:"CS",name:"EnergySubtractionParam",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",07)':{tag:'(50F1,"FDMS 1.0",07)',vr:"CS",name:"SubtractionRegistrationResult",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",08)':{tag:'(50F1,"FDMS 1.0",08)',vr:"CS",name:"EnergySubtractionParam2",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",09)':{tag:'(50F1,"FDMS 1.0",09)',vr:"SL",name:"AfinConversionCoefficient",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",10)':{tag:'(50F1,"FDMS 1.0",10)',vr:"CS",name:"FilmOutputFormat",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",20)':{tag:'(50F1,"FDMS 1.0",20)',vr:"CS",name:"ImageProcessingModificationFlag",vm:"1",version:"PrivateTag"},'(0009,"FFP DATA",01)':{tag:'(0009,"FFP DATA",01)',vr:"UN",name:"CRHeaderInformation",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",30)':{tag:'(0019,"GE ??? From Adantage Review CS",30)',vr:"LO",name:"CREDRMode",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",40)':{tag:'(0019,"GE ??? From Adantage Review CS",40)',vr:"LO",name:"CRLatitude",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",50)':{tag:'(0019,"GE ??? From Adantage Review CS",50)',vr:"LO",name:"CRGroupNumber",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",70)':{tag:'(0019,"GE ??? From Adantage Review CS",70)',vr:"LO",name:"CRImageSerialNumber",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",80)':{tag:'(0019,"GE ??? From Adantage Review CS",80)',vr:"LO",name:"CRBarCodeNumber",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",90)':{tag:'(0019,"GE ??? From Adantage Review CS",90)',vr:"LO",name:"CRFilmOutputExposures",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",24)':{tag:'(0009,"GEMS_ACQU_01",24)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",25)':{tag:'(0009,"GEMS_ACQU_01",25)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",3e)':{tag:'(0009,"GEMS_ACQU_01",3e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",3f)':{tag:'(0009,"GEMS_ACQU_01",3f)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",42)':{tag:'(0009,"GEMS_ACQU_01",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",43)':{tag:'(0009,"GEMS_ACQU_01",43)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",f8)':{tag:'(0009,"GEMS_ACQU_01",f8)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",fb)':{tag:'(0009,"GEMS_ACQU_01",fb)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",01)':{tag:'(0019,"GEMS_ACQU_01",01)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",02)':{tag:'(0019,"GEMS_ACQU_01",02)',vr:"SL",name:"NumberOfCellsInDetector",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",03)':{tag:'(0019,"GEMS_ACQU_01",03)',vr:"DS",name:"CellNumberAtTheta",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",04)':{tag:'(0019,"GEMS_ACQU_01",04)',vr:"DS",name:"CellSpacing",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",05)':{tag:'(0019,"GEMS_ACQU_01",05)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",06)':{tag:'(0019,"GEMS_ACQU_01",06)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",0e)':{tag:'(0019,"GEMS_ACQU_01",0e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",0f)':{tag:'(0019,"GEMS_ACQU_01",0f)',vr:"DS",name:"HorizontalFrameOfReference",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",11)':{tag:'(0019,"GEMS_ACQU_01",11)',vr:"SS",name:"SeriesContrast",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",12)':{tag:'(0019,"GEMS_ACQU_01",12)',vr:"SS",name:"LastPseq",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",13)':{tag:'(0019,"GEMS_ACQU_01",13)',vr:"SS",name:"StartNumberForBaseline",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",14)':{tag:'(0019,"GEMS_ACQU_01",14)',vr:"SS",name:"End NumberForBaseline",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",15)':{tag:'(0019,"GEMS_ACQU_01",15)',vr:"SS",name:"StartNumberForEnhancedScans",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",16)':{tag:'(0019,"GEMS_ACQU_01",16)',vr:"SS",name:"EndNumberForEnhancedScans",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",17)':{tag:'(0019,"GEMS_ACQU_01",17)',vr:"SS",name:"SeriesPlane",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",18)':{tag:'(0019,"GEMS_ACQU_01",18)',vr:"LO",name:"FirstScanRAS",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",19)':{tag:'(0019,"GEMS_ACQU_01",19)',vr:"DS",name:"FirstScanLocation",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",1a)':{tag:'(0019,"GEMS_ACQU_01",1a)',vr:"LO",name:"LastScanRAS",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",1b)':{tag:'(0019,"GEMS_ACQU_01",1b)',vr:"DS",name:"LastScanLocation",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",1e)':{tag:'(0019,"GEMS_ACQU_01",1e)',vr:"DS",name:"DisplayFieldOfView",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",20)':{tag:'(0019,"GEMS_ACQU_01",20)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",22)':{tag:'(0019,"GEMS_ACQU_01",22)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",23)':{tag:'(0019,"GEMS_ACQU_01",23)',vr:"DS",name:"TableSpeed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",24)':{tag:'(0019,"GEMS_ACQU_01",24)',vr:"DS",name:"MidScanTime",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",25)':{tag:'(0019,"GEMS_ACQU_01",25)',vr:"SS",name:"MidScanFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",26)':{tag:'(0019,"GEMS_ACQU_01",26)',vr:"SL",name:"DegreesOfAzimuth",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",27)':{tag:'(0019,"GEMS_ACQU_01",27)',vr:"DS",name:"GantryPeriod",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2a)':{tag:'(0019,"GEMS_ACQU_01",2a)',vr:"DS",name:"XrayOnPosition",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2b)':{tag:'(0019,"GEMS_ACQU_01",2b)',vr:"DS",name:"XrayOffPosition",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2c)':{tag:'(0019,"GEMS_ACQU_01",2c)',vr:"SL",name:"NumberOfTriggers",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2d)':{tag:'(0019,"GEMS_ACQU_01",2d)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2e)':{tag:'(0019,"GEMS_ACQU_01",2e)',vr:"DS",name:"AngleOfFirstView",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2f)':{tag:'(0019,"GEMS_ACQU_01",2f)',vr:"DS",name:"TriggerFrequency",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",39)':{tag:'(0019,"GEMS_ACQU_01",39)',vr:"SS",name:"ScanFOVType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3a)':{tag:'(0019,"GEMS_ACQU_01",3a)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3b)':{tag:'(0019,"GEMS_ACQU_01",3b)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3c)':{tag:'(0019,"GEMS_ACQU_01",3c)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3e)':{tag:'(0019,"GEMS_ACQU_01",3e)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3f)':{tag:'(0019,"GEMS_ACQU_01",3f)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",40)':{tag:'(0019,"GEMS_ACQU_01",40)',vr:"SS",name:"StatReconFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",41)':{tag:'(0019,"GEMS_ACQU_01",41)',vr:"SS",name:"ComputeType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",42)':{tag:'(0019,"GEMS_ACQU_01",42)',vr:"SS",name:"SegmentNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",43)':{tag:'(0019,"GEMS_ACQU_01",43)',vr:"SS",name:"TotalSegmentsRequested",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",44)':{tag:'(0019,"GEMS_ACQU_01",44)',vr:"DS",name:"InterscanDelay",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",47)':{tag:'(0019,"GEMS_ACQU_01",47)',vr:"SS",name:"ViewCompressionFactor",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",48)':{tag:'(0019,"GEMS_ACQU_01",48)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",49)':{tag:'(0019,"GEMS_ACQU_01",49)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",4a)':{tag:'(0019,"GEMS_ACQU_01",4a)',vr:"SS",name:"TotalNumberOfRefChannels",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",4b)':{tag:'(0019,"GEMS_ACQU_01",4b)',vr:"SL",name:"DataSizeForScanData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",52)':{tag:'(0019,"GEMS_ACQU_01",52)',vr:"SS",name:"ReconPostProcessingFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",54)':{tag:'(0019,"GEMS_ACQU_01",54)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",57)':{tag:'(0019,"GEMS_ACQU_01",57)',vr:"SS",name:"CTWaterNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",58)':{tag:'(0019,"GEMS_ACQU_01",58)',vr:"SS",name:"CTBoneNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5a)':{tag:'(0019,"GEMS_ACQU_01",5a)',vr:"FL",name:"AcquisitionDuration",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5d)':{tag:'(0019,"GEMS_ACQU_01",5d)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5e)':{tag:'(0019,"GEMS_ACQU_01",5e)',vr:"SL",name:"NumberOfChannels1To512",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5f)':{tag:'(0019,"GEMS_ACQU_01",5f)',vr:"SL",name:"IncrementBetweenChannels",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",60)':{tag:'(0019,"GEMS_ACQU_01",60)',vr:"SL",name:"StartingView",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",61)':{tag:'(0019,"GEMS_ACQU_01",61)',vr:"SL",name:"NumberOfViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",62)':{tag:'(0019,"GEMS_ACQU_01",62)',vr:"SL",name:"IncrementBetweenViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",6a)':{tag:'(0019,"GEMS_ACQU_01",6a)',vr:"SS",name:"DependantOnNumberOfViewsProcessed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",6b)':{tag:'(0019,"GEMS_ACQU_01",6b)',vr:"SS",name:"FieldOfViewInDetectorCells",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",70)':{tag:'(0019,"GEMS_ACQU_01",70)',vr:"SS",name:"ValueOfBackProjectionButton",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",71)':{tag:'(0019,"GEMS_ACQU_01",71)',vr:"SS",name:"SetIfFatqEstimatesWereUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",72)':{tag:'(0019,"GEMS_ACQU_01",72)',vr:"DS",name:"ZChannelAvgOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",73)':{tag:'(0019,"GEMS_ACQU_01",73)',vr:"DS",name:"AvgOfLeftRefChannelsOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",74)':{tag:'(0019,"GEMS_ACQU_01",74)',vr:"DS",name:"MaxLeftChannelOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",75)':{tag:'(0019,"GEMS_ACQU_01",75)',vr:"DS",name:"AvgOfRightRefChannelsOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",76)':{tag:'(0019,"GEMS_ACQU_01",76)',vr:"DS",name:"MaxRightChannelOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",7d)':{tag:'(0019,"GEMS_ACQU_01",7d)',vr:"DS",name:"SecondEcho",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",7e)':{tag:'(0019,"GEMS_ACQU_01",7e)',vr:"SS",name:"NumberOfEchos",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",7f)':{tag:'(0019,"GEMS_ACQU_01",7f)',vr:"DS",name:"TableDelta",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",81)':{tag:'(0019,"GEMS_ACQU_01",81)',vr:"SS",name:"Contiguous",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",82)':{tag:'(0019,"GEMS_ACQU_01",82)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",83)':{tag:'(0019,"GEMS_ACQU_01",83)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",84)':{tag:'(0019,"GEMS_ACQU_01",84)',vr:"DS",name:"PeakSAR",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",85)':{tag:'(0019,"GEMS_ACQU_01",85)',vr:"SS",name:"MonitorSAR",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",86)':{tag:'(0019,"GEMS_ACQU_01",86)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",87)':{tag:'(0019,"GEMS_ACQU_01",87)',vr:"DS",name:"CardiacRepetition Time",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",88)':{tag:'(0019,"GEMS_ACQU_01",88)',vr:"SS",name:"ImagesPerCardiacCycle",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8a)':{tag:'(0019,"GEMS_ACQU_01",8a)',vr:"SS",name:"ActualReceiveGainAnalog",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8b)':{tag:'(0019,"GEMS_ACQU_01",8b)',vr:"SS",name:"ActualReceiveGainDigital",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8d)':{tag:'(0019,"GEMS_ACQU_01",8d)',vr:"DS",name:"DelayAfterTrigger",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8f)':{tag:'(0019,"GEMS_ACQU_01",8f)',vr:"SS",name:"SwapPhaseFrequency",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",90)':{tag:'(0019,"GEMS_ACQU_01",90)',vr:"SS",name:"PauseInterval",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",91)':{tag:'(0019,"GEMS_ACQU_01",91)',vr:"DS",name:"PulseTime",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",92)':{tag:'(0019,"GEMS_ACQU_01",92)',vr:"SL",name:"SliceOffsetOnFrequencyAxis",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",93)':{tag:'(0019,"GEMS_ACQU_01",93)',vr:"DS",name:"CenterFrequency",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",94)':{tag:'(0019,"GEMS_ACQU_01",94)',vr:"SS",name:"TransmitGain",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",95)':{tag:'(0019,"GEMS_ACQU_01",95)',vr:"SS",name:"AnalogReceiverGain",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",96)':{tag:'(0019,"GEMS_ACQU_01",96)',vr:"SS",name:"DigitalReceiverGain",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",97)':{tag:'(0019,"GEMS_ACQU_01",97)',vr:"SL",name:"BitmapDefiningCVs",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",98)':{tag:'(0019,"GEMS_ACQU_01",98)',vr:"SS",name:"CenterFrequencyMethod",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",99)':{tag:'(0019,"GEMS_ACQU_01",99)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9b)':{tag:'(0019,"GEMS_ACQU_01",9b)',vr:"SS",name:"PulseSequenceMode",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9c)':{tag:'(0019,"GEMS_ACQU_01",9c)',vr:"LO",name:"PulseSequenceName",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9d)':{tag:'(0019,"GEMS_ACQU_01",9d)',vr:"DT",name:"PulseSequenceDate",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9e)':{tag:'(0019,"GEMS_ACQU_01",9e)',vr:"LO",name:"InternalPulseSequenceName",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9f)':{tag:'(0019,"GEMS_ACQU_01",9f)',vr:"SS",name:"TransmittingCoil",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a0)':{tag:'(0019,"GEMS_ACQU_01",a0)',vr:"SS",name:"SurfaceCoilType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a1)':{tag:'(0019,"GEMS_ACQU_01",a1)',vr:"SS",name:"ExtremityCoilFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a2)':{tag:'(0019,"GEMS_ACQU_01",a2)',vr:"SL",name:"RawDataRunNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a3)':{tag:'(0019,"GEMS_ACQU_01",a3)',vr:"UL",name:"CalibratedFieldStrength",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a4)':{tag:'(0019,"GEMS_ACQU_01",a4)',vr:"SS",name:"SATFatWaterBone",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a5)':{tag:'(0019,"GEMS_ACQU_01",a5)',vr:"DS",name:"ReceiveBandwidth",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a7)':{tag:'(0019,"GEMS_ACQU_01",a7)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a8)':{tag:'(0019,"GEMS_ACQU_01",a8)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a9)':{tag:'(0019,"GEMS_ACQU_01",a9)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",aa)':{tag:'(0019,"GEMS_ACQU_01",aa)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ab)':{tag:'(0019,"GEMS_ACQU_01",ab)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ac)':{tag:'(0019,"GEMS_ACQU_01",ac)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ad)':{tag:'(0019,"GEMS_ACQU_01",ad)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ae)':{tag:'(0019,"GEMS_ACQU_01",ae)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",af)':{tag:'(0019,"GEMS_ACQU_01",af)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b0)':{tag:'(0019,"GEMS_ACQU_01",b0)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b1)':{tag:'(0019,"GEMS_ACQU_01",b1)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b2)':{tag:'(0019,"GEMS_ACQU_01",b2)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b3)':{tag:'(0019,"GEMS_ACQU_01",b3)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b4)':{tag:'(0019,"GEMS_ACQU_01",b4)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b5)':{tag:'(0019,"GEMS_ACQU_01",b5)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b6)':{tag:'(0019,"GEMS_ACQU_01",b6)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b7)':{tag:'(0019,"GEMS_ACQU_01",b7)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b8)':{tag:'(0019,"GEMS_ACQU_01",b8)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b9)':{tag:'(0019,"GEMS_ACQU_01",b9)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ba)':{tag:'(0019,"GEMS_ACQU_01",ba)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",bb)':{tag:'(0019,"GEMS_ACQU_01",bb)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",bc)':{tag:'(0019,"GEMS_ACQU_01",bc)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",bd)':{tag:'(0019,"GEMS_ACQU_01",bd)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",be)':{tag:'(0019,"GEMS_ACQU_01",be)',vr:"DS",name:"ProjectionAngle",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c0)':{tag:'(0019,"GEMS_ACQU_01",c0)',vr:"SS",name:"SaturationPlanes",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c1)':{tag:'(0019,"GEMS_ACQU_01",c1)',vr:"SS",name:"SurfaceCoilIntensityCorrectionFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c2)':{tag:'(0019,"GEMS_ACQU_01",c2)',vr:"SS",name:"SATLocationR",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c3)':{tag:'(0019,"GEMS_ACQU_01",c3)',vr:"SS",name:"SATLocationL",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c4)':{tag:'(0019,"GEMS_ACQU_01",c4)',vr:"SS",name:"SATLocationA",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c5)':{tag:'(0019,"GEMS_ACQU_01",c5)',vr:"SS",name:"SATLocationP",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c6)':{tag:'(0019,"GEMS_ACQU_01",c6)',vr:"SS",name:"SATLocationH",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c7)':{tag:'(0019,"GEMS_ACQU_01",c7)',vr:"SS",name:"SATLocationF",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c8)':{tag:'(0019,"GEMS_ACQU_01",c8)',vr:"SS",name:"SATThicknessRL",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c9)':{tag:'(0019,"GEMS_ACQU_01",c9)',vr:"SS",name:"SATThicknessAP",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ca)':{tag:'(0019,"GEMS_ACQU_01",ca)',vr:"SS",name:"SATThicknessHF",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cb)':{tag:'(0019,"GEMS_ACQU_01",cb)',vr:"SS",name:"PrescribedFlowAxis",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cc)':{tag:'(0019,"GEMS_ACQU_01",cc)',vr:"SS",name:"VelocityEncoding",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cd)':{tag:'(0019,"GEMS_ACQU_01",cd)',vr:"SS",name:"ThicknessDisclaimer",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ce)':{tag:'(0019,"GEMS_ACQU_01",ce)',vr:"SS",name:"PrescanType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cf)':{tag:'(0019,"GEMS_ACQU_01",cf)',vr:"SS",name:"PrescanStatus",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d0)':{tag:'(0019,"GEMS_ACQU_01",d0)',vr:"SH",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d2)':{tag:'(0019,"GEMS_ACQU_01",d2)',vr:"SS",name:"ProjectionAlgorithm",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d3)':{tag:'(0019,"GEMS_ACQU_01",d3)',vr:"SH",name:"ProjectionAlgorithm",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d4)':{tag:'(0019,"GEMS_ACQU_01",d4)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d5)':{tag:'(0019,"GEMS_ACQU_01",d5)',vr:"SS",name:"FractionalEcho",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d6)':{tag:'(0019,"GEMS_ACQU_01",d6)',vr:"SS",name:"PrepPulse",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d7)':{tag:'(0019,"GEMS_ACQU_01",d7)',vr:"SS",name:"CardiacPhases",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d8)':{tag:'(0019,"GEMS_ACQU_01",d8)',vr:"SS",name:"VariableEchoFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d9)':{tag:'(0019,"GEMS_ACQU_01",d9)',vr:"DS",name:"ConcatenatedSAT",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",da)':{tag:'(0019,"GEMS_ACQU_01",da)',vr:"SS",name:"ReferenceChannelUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",db)':{tag:'(0019,"GEMS_ACQU_01",db)',vr:"DS",name:"BackProjectorCoefficient",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",dc)':{tag:'(0019,"GEMS_ACQU_01",dc)',vr:"SS",name:"PrimarySpeedCorrectionUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",dd)':{tag:'(0019,"GEMS_ACQU_01",dd)',vr:"SS",name:"OverrangeCorrectionUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",de)':{tag:'(0019,"GEMS_ACQU_01",de)',vr:"DS",name:"DynamicZAlphaValue",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",df)':{tag:'(0019,"GEMS_ACQU_01",df)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e0)':{tag:'(0019,"GEMS_ACQU_01",e0)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e1)':{tag:'(0019,"GEMS_ACQU_01",e1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e2)':{tag:'(0019,"GEMS_ACQU_01",e2)',vr:"DS",name:"VelocityEncodeScale",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e3)':{tag:'(0019,"GEMS_ACQU_01",e3)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e4)':{tag:'(0019,"GEMS_ACQU_01",e4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e5)':{tag:'(0019,"GEMS_ACQU_01",e5)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e6)':{tag:'(0019,"GEMS_ACQU_01",e6)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e8)':{tag:'(0019,"GEMS_ACQU_01",e8)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e9)':{tag:'(0019,"GEMS_ACQU_01",e9)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",eb)':{tag:'(0019,"GEMS_ACQU_01",eb)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ec)':{tag:'(0019,"GEMS_ACQU_01",ec)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f0)':{tag:'(0019,"GEMS_ACQU_01",f0)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f1)':{tag:'(0019,"GEMS_ACQU_01",f1)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f2)':{tag:'(0019,"GEMS_ACQU_01",f2)',vr:"SS",name:"FastPhases",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f3)':{tag:'(0019,"GEMS_ACQU_01",f3)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f4)':{tag:'(0019,"GEMS_ACQU_01",f4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f9)':{tag:'(0019,"GEMS_ACQU_01",f9)',vr:"DS",name:"TransmitGain",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",00)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",00)',vr:"LO",name:"CRExposureMenuCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",10)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",10)',vr:"LO",name:"CRExposureMenuString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",20)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",20)',vr:"LO",name:"CREDRMode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",30)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",30)',vr:"LO",name:"CRLatitude",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",40)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",40)',vr:"LO",name:"CRGroupNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",50)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",50)',vr:"US",name:"CRImageSerialNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",60)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",60)',vr:"LO",name:"CRBarCodeNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",70)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",70)',vr:"LO",name:"CRFilmOutputExposure",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",80)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",80)',vr:"LO",name:"CRFilmFormat",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",90)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",90)',vr:"LO",name:"CRSShiftString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",00)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",00)',vr:"US",name:"CRSShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",10)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",10)',vr:"DS",name:"CRCShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",20)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",20)',vr:"DS",name:"CRGT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",30)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",30)',vr:"DS",name:"CRGA",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",40)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",40)',vr:"DS",name:"CRGC",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",50)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",50)',vr:"DS",name:"CRGS",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",60)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",60)',vr:"DS",name:"CRRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",70)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",70)',vr:"DS",name:"CRRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",80)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",80)',vr:"US",name:"CRRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",90)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",90)',vr:"DS",name:"CRDRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",00)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",00)',vr:"DS",name:"CRDRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",10)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",10)',vr:"US",name:"CRDRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",20)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",20)',vr:"DS",name:"CRORE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",30)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",30)',vr:"US",name:"CRORN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",40)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",40)',vr:"US",name:"CRORD",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",50)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",50)',vr:"LO",name:"CRCassetteSize",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",60)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",60)',vr:"LO",name:"CRMachineID",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",70)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",70)',vr:"LO",name:"CRMachineType",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",80)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",80)',vr:"LO",name:"CRTechnicianCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",90)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",90)',vr:"LO",name:"CREnergySubtractionParameters",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",00)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",00)',vr:"LO",name:"CRExposureMenuCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",10)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",10)',vr:"LO",name:"CRExposureMenuString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",20)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",20)',vr:"LO",name:"CREDRMode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",30)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",30)',vr:"LO",name:"CRLatitude",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",40)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",40)',vr:"LO",name:"CRGroupNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",50)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",50)',vr:"US",name:"CRImageSerialNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",60)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",60)',vr:"LO",name:"CRBarCodeNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",70)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",70)',vr:"LO",name:"CRFilmOutputExposure",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",80)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",80)',vr:"LO",name:"CRFilmFormat",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",90)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",90)',vr:"LO",name:"CRSShiftString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",00)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",00)',vr:"US",name:"CRSShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",10)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",10)',vr:"LO",name:"CRCShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",20)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",20)',vr:"LO",name:"CRGT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",30)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",30)',vr:"DS",name:"CRGA",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",40)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",40)',vr:"DS",name:"CRGC",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",50)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",50)',vr:"DS",name:"CRGS",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",60)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",60)',vr:"LO",name:"CRRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",70)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",70)',vr:"DS",name:"CRRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",80)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",80)',vr:"US",name:"CRRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",90)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",90)',vr:"DS",name:"CRDRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",00)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",00)',vr:"DS",name:"CRDRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",10)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",10)',vr:"US",name:"CRDRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",20)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",20)',vr:"DS",name:"CRORE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",30)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",30)',vr:"US",name:"CRORN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",40)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",40)',vr:"US",name:"CRORD",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",50)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",50)',vr:"LO",name:"CRCassetteSize",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",60)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",60)',vr:"LO",name:"CRMachineID",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",70)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",70)',vr:"LO",name:"CRMachineType",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",80)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",80)',vr:"LO",name:"CRTechnicianCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",90)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",90)',vr:"LO",name:"CREnergySubtractionParameters",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",f0)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",f0)',vr:"LO",name:"CRDistributionCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",ff)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",ff)',vr:"US",name:"CRShuttersApplied",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",01)':{tag:'(0047,"GEMS_ADWSoft_3D1",01)',vr:"SQ",name:"Reconstruction Parameters Sequence",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",50)':{tag:'(0047,"GEMS_ADWSoft_3D1",50)',vr:"UL",name:"VolumeVoxelCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",51)':{tag:'(0047,"GEMS_ADWSoft_3D1",51)',vr:"UL",name:"VolumeSegmentCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",53)':{tag:'(0047,"GEMS_ADWSoft_3D1",53)',vr:"US",name:"VolumeSliceSize",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",54)':{tag:'(0047,"GEMS_ADWSoft_3D1",54)',vr:"US",name:"VolumeSliceCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",55)':{tag:'(0047,"GEMS_ADWSoft_3D1",55)',vr:"SL",name:"VolumeThresholdValue",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",57)':{tag:'(0047,"GEMS_ADWSoft_3D1",57)',vr:"DS",name:"VolumeVoxelRatio",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",58)':{tag:'(0047,"GEMS_ADWSoft_3D1",58)',vr:"DS",name:"VolumeVoxelSize",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",59)':{tag:'(0047,"GEMS_ADWSoft_3D1",59)',vr:"US",name:"VolumeZPositionSize",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",60)':{tag:'(0047,"GEMS_ADWSoft_3D1",60)',vr:"DS",name:"VolumeBaseLine",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",61)':{tag:'(0047,"GEMS_ADWSoft_3D1",61)',vr:"DS",name:"VolumeCenterPoint",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",63)':{tag:'(0047,"GEMS_ADWSoft_3D1",63)',vr:"SL",name:"VolumeSkewBase",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",64)':{tag:'(0047,"GEMS_ADWSoft_3D1",64)',vr:"DS",name:"VolumeRegistrationTransformRotationMatrix",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",65)':{tag:'(0047,"GEMS_ADWSoft_3D1",65)',vr:"DS",name:"VolumeRegistrationTransformTranslationVector",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",70)':{tag:'(0047,"GEMS_ADWSoft_3D1",70)',vr:"DS",name:"KVPList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",71)':{tag:'(0047,"GEMS_ADWSoft_3D1",71)',vr:"IS",name:"XRayTubeCurrentList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",72)':{tag:'(0047,"GEMS_ADWSoft_3D1",72)',vr:"IS",name:"ExposureList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",80)':{tag:'(0047,"GEMS_ADWSoft_3D1",80)',vr:"LO",name:"AcquisitionDLXIdentifier",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",85)':{tag:'(0047,"GEMS_ADWSoft_3D1",85)',vr:"SQ",name:"AcquisitionDLX2DSeriesSequence",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",89)':{tag:'(0047,"GEMS_ADWSoft_3D1",89)',vr:"DS",name:"ContrastAgentVolumeList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",8A)':{tag:'(0047,"GEMS_ADWSoft_3D1",8A)',vr:"US",name:"NumberOfInjections",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",8B)':{tag:'(0047,"GEMS_ADWSoft_3D1",8B)',vr:"US",name:"FrameCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",91)':{tag:'(0047,"GEMS_ADWSoft_3D1",91)',vr:"LO",name:"XA3DReconstructionAlgorithmName",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",92)':{tag:'(0047,"GEMS_ADWSoft_3D1",92)',vr:"CS",name:"XA3DReconstructionAlgorithmVersion",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",93)':{tag:'(0047,"GEMS_ADWSoft_3D1",93)',vr:"DA",name:"DLXCalibrationDate",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",94)':{tag:'(0047,"GEMS_ADWSoft_3D1",94)',vr:"TM",name:"DLXCalibrationTime",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",95)':{tag:'(0047,"GEMS_ADWSoft_3D1",95)',vr:"CS",name:"DLXCalibrationStatus",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",96)':{tag:'(0047,"GEMS_ADWSoft_3D1",96)',vr:"IS",name:"UsedFrames",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",98)':{tag:'(0047,"GEMS_ADWSoft_3D1",98)',vr:"US",name:"TransformCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",99)':{tag:'(0047,"GEMS_ADWSoft_3D1",99)',vr:"SQ",name:"TransformSequence",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",9A)':{tag:'(0047,"GEMS_ADWSoft_3D1",9A)',vr:"DS",name:"TransformRotationMatrix",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",9B)':{tag:'(0047,"GEMS_ADWSoft_3D1",9B)',vr:"DS",name:"TransformTranslationVector",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",9C)':{tag:'(0047,"GEMS_ADWSoft_3D1",9C)',vr:"LO",name:"TransformLabel",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B0)':{tag:'(0047,"GEMS_ADWSoft_3D1",B0)',vr:"SQ",name:"WireframeList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B1)':{tag:'(0047,"GEMS_ADWSoft_3D1",B1)',vr:"US",name:"WireframeCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B2)':{tag:'(0047,"GEMS_ADWSoft_3D1",B2)',vr:"US",name:"LocationSystem",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B5)':{tag:'(0047,"GEMS_ADWSoft_3D1",B5)',vr:"LO",name:"WireframeName",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B6)':{tag:'(0047,"GEMS_ADWSoft_3D1",B6)',vr:"LO",name:"WireframeGroupName",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B7)':{tag:'(0047,"GEMS_ADWSoft_3D1",B7)',vr:"LO",name:"WireframeColor",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B8)':{tag:'(0047,"GEMS_ADWSoft_3D1",B8)',vr:"SL",name:"WireframeAttributes",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B9)':{tag:'(0047,"GEMS_ADWSoft_3D1",B9)',vr:"SL",name:"WireframePointCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",BA)':{tag:'(0047,"GEMS_ADWSoft_3D1",BA)',vr:"SL",name:"WireframeTimestamp",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",BB)':{tag:'(0047,"GEMS_ADWSoft_3D1",BB)',vr:"SQ",name:"WireframePointList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",BC)':{tag:'(0047,"GEMS_ADWSoft_3D1",BC)',vr:"DS",name:"WireframePointsCoordinates",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",C0)':{tag:'(0047,"GEMS_ADWSoft_3D1",C0)',vr:"DS",name:"VolumeUpperLeftHighCornerRAS",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",C1)':{tag:'(0047,"GEMS_ADWSoft_3D1",C1)',vr:"DS",name:"VolumeSliceToRASRotationMatrix",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",C2)':{tag:'(0047,"GEMS_ADWSoft_3D1",C2)',vr:"DS",name:"VolumeUpperLeftHighCornerTLOC",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D1)':{tag:'(0047,"GEMS_ADWSoft_3D1",D1)',vr:"OB",name:"VolumeSegmentList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D2)':{tag:'(0047,"GEMS_ADWSoft_3D1",D2)',vr:"OB",name:"VolumeGradientList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D3)':{tag:'(0047,"GEMS_ADWSoft_3D1",D3)',vr:"OB",name:"VolumeDensityList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D4)':{tag:'(0047,"GEMS_ADWSoft_3D1",D4)',vr:"OB",name:"VolumeZPositionList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D5)':{tag:'(0047,"GEMS_ADWSoft_3D1",D5)',vr:"OB",name:"VolumeOriginalIndexList",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",80)':{tag:'(0039,"GEMS_ADWSoft_DPO",80)',vr:"IS",name:"PrivateEntityNumber",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",85)':{tag:'(0039,"GEMS_ADWSoft_DPO",85)',vr:"DA",name:"PrivateEntityDate",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",90)':{tag:'(0039,"GEMS_ADWSoft_DPO",90)',vr:"TM",name:"PrivateEntityTime",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",95)':{tag:'(0039,"GEMS_ADWSoft_DPO",95)',vr:"LO",name:"PrivateEntityLaunchCommand",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",AA)':{tag:'(0039,"GEMS_ADWSoft_DPO",AA)',vr:"CS",name:"PrivateEntityType",vm:"1",version:"PrivateTag"},'(0033,"GEMS_CTHD_01",02)':{tag:'(0033,"GEMS_CTHD_01",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",10)':{tag:'(0037,"GEMS_DRS_1",10)',vr:"LO",name:"ReferringDepartment",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",20)':{tag:'(0037,"GEMS_DRS_1",20)',vr:"US",name:"ScreenNumber",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",40)':{tag:'(0037,"GEMS_DRS_1",40)',vr:"SH",name:"LeftOrientation",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",42)':{tag:'(0037,"GEMS_DRS_1",42)',vr:"SH",name:"RightOrientation",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",50)':{tag:'(0037,"GEMS_DRS_1",50)',vr:"CS",name:"Inversion",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",60)':{tag:'(0037,"GEMS_DRS_1",60)',vr:"US",name:"DSA",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",10)':{tag:'(0009,"GEMS_GENIE_1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",11)':{tag:'(0009,"GEMS_GENIE_1",11)',vr:"SL",name:"StudyFlags",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",12)':{tag:'(0009,"GEMS_GENIE_1",12)',vr:"SL",name:"StudyType",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",1e)':{tag:'(0009,"GEMS_GENIE_1",1e)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",20)':{tag:'(0009,"GEMS_GENIE_1",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",21)':{tag:'(0009,"GEMS_GENIE_1",21)',vr:"SL",name:"SeriesFlags",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",22)':{tag:'(0009,"GEMS_GENIE_1",22)',vr:"SH",name:"UserOrientation",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",23)':{tag:'(0009,"GEMS_GENIE_1",23)',vr:"SL",name:"InitiationType",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",24)':{tag:'(0009,"GEMS_GENIE_1",24)',vr:"SL",name:"InitiationDelay",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",25)':{tag:'(0009,"GEMS_GENIE_1",25)',vr:"SL",name:"InitiationCountRate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",26)':{tag:'(0009,"GEMS_GENIE_1",26)',vr:"SL",name:"NumberEnergySets",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",27)':{tag:'(0009,"GEMS_GENIE_1",27)',vr:"SL",name:"NumberDetectors",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",29)':{tag:'(0009,"GEMS_GENIE_1",29)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2a)':{tag:'(0009,"GEMS_GENIE_1",2a)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2c)':{tag:'(0009,"GEMS_GENIE_1",2c)',vr:"LO",name:"SeriesComments",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2d)':{tag:'(0009,"GEMS_GENIE_1",2d)',vr:"SL",name:"TrackBeatAverage",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2e)':{tag:'(0009,"GEMS_GENIE_1",2e)',vr:"FD",name:"DistancePrescribed",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",30)':{tag:'(0009,"GEMS_GENIE_1",30)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",35)':{tag:'(0009,"GEMS_GENIE_1",35)',vr:"SL",name:"GantryLocusType",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",37)':{tag:'(0009,"GEMS_GENIE_1",37)',vr:"SL",name:"StartingHeartRate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",38)':{tag:'(0009,"GEMS_GENIE_1",38)',vr:"SL",name:"RRWindowWidth",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",39)':{tag:'(0009,"GEMS_GENIE_1",39)',vr:"SL",name:"RRWindowOffset",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",3a)':{tag:'(0009,"GEMS_GENIE_1",3a)',vr:"SL",name:"PercentCycleImaged",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",40)':{tag:'(0009,"GEMS_GENIE_1",40)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",41)':{tag:'(0009,"GEMS_GENIE_1",41)',vr:"SL",name:"PatientFlags",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",42)':{tag:'(0009,"GEMS_GENIE_1",42)',vr:"DA",name:"PatientCreationDate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",43)':{tag:'(0009,"GEMS_GENIE_1",43)',vr:"TM",name:"PatientCreationTime",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0a)':{tag:'(0011,"GEMS_GENIE_1",0a)',vr:"SL",name:"SeriesType",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0b)':{tag:'(0011,"GEMS_GENIE_1",0b)',vr:"SL",name:"EffectiveSeriesDuration",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0c)':{tag:'(0011,"GEMS_GENIE_1",0c)',vr:"SL",name:"NumBeats",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0d)':{tag:'(0011,"GEMS_GENIE_1",0d)',vr:"LO",name:"RadioNuclideName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",10)':{tag:'(0011,"GEMS_GENIE_1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",12)':{tag:'(0011,"GEMS_GENIE_1",12)',vr:"LO",name:"DatasetName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",13)':{tag:'(0011,"GEMS_GENIE_1",13)',vr:"SL",name:"DatasetType",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",15)':{tag:'(0011,"GEMS_GENIE_1",15)',vr:"SL",name:"DetectorNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",16)':{tag:'(0011,"GEMS_GENIE_1",16)',vr:"SL",name:"EnergyNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",17)':{tag:'(0011,"GEMS_GENIE_1",17)',vr:"SL",name:"RRIntervalWindowNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",18)':{tag:'(0011,"GEMS_GENIE_1",18)',vr:"SL",name:"MGBinNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",19)':{tag:'(0011,"GEMS_GENIE_1",19)',vr:"FD",name:"RadiusOfRotation",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1a)':{tag:'(0011,"GEMS_GENIE_1",1a)',vr:"SL",name:"DetectorCountZone",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1b)':{tag:'(0011,"GEMS_GENIE_1",1b)',vr:"SL",name:"NumEnergyWindows",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1c)':{tag:'(0011,"GEMS_GENIE_1",1c)',vr:"SL",name:"EnergyOffset",vm:"4",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1d)':{tag:'(0011,"GEMS_GENIE_1",1d)',vr:"SL",name:"EnergyRange",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1f)':{tag:'(0011,"GEMS_GENIE_1",1f)',vr:"SL",name:"ImageOrientation",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",23)':{tag:'(0011,"GEMS_GENIE_1",23)',vr:"SL",name:"UseFOVMask",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",24)':{tag:'(0011,"GEMS_GENIE_1",24)',vr:"SL",name:"FOVMaskYCutoffAngle",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",25)':{tag:'(0011,"GEMS_GENIE_1",25)',vr:"SL",name:"FOVMaskCutoffAngle",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",26)':{tag:'(0011,"GEMS_GENIE_1",26)',vr:"SL",name:"TableOrientation",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",27)':{tag:'(0011,"GEMS_GENIE_1",27)',vr:"SL",name:"ROITopLeft",vm:"2",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",28)':{tag:'(0011,"GEMS_GENIE_1",28)',vr:"SL",name:"ROIBottomRight",vm:"2",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",30)':{tag:'(0011,"GEMS_GENIE_1",30)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",33)':{tag:'(0011,"GEMS_GENIE_1",33)',vr:"LO",name:"EnergyCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",34)':{tag:'(0011,"GEMS_GENIE_1",34)',vr:"LO",name:"SpatialCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",35)':{tag:'(0011,"GEMS_GENIE_1",35)',vr:"LO",name:"TuningCalibName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",36)':{tag:'(0011,"GEMS_GENIE_1",36)',vr:"LO",name:"UniformityCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",37)':{tag:'(0011,"GEMS_GENIE_1",37)',vr:"LO",name:"AcquisitionSpecificCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",38)':{tag:'(0011,"GEMS_GENIE_1",38)',vr:"SL",name:"ByteOrder",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3a)':{tag:'(0011,"GEMS_GENIE_1",3a)',vr:"SL",name:"PictureFormat",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3b)':{tag:'(0011,"GEMS_GENIE_1",3b)',vr:"FD",name:"PixelScale",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3c)':{tag:'(0011,"GEMS_GENIE_1",3c)',vr:"FD",name:"PixelOffset",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3e)':{tag:'(0011,"GEMS_GENIE_1",3e)',vr:"SL",name:"FOVShape",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3f)':{tag:'(0011,"GEMS_GENIE_1",3f)',vr:"SL",name:"DatasetFlags",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",44)':{tag:'(0011,"GEMS_GENIE_1",44)',vr:"FD",name:"ThresholdCenter",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",45)':{tag:'(0011,"GEMS_GENIE_1",45)',vr:"FD",name:"ThresholdWidth",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",46)':{tag:'(0011,"GEMS_GENIE_1",46)',vr:"SL",name:"InterpolationType",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",55)':{tag:'(0011,"GEMS_GENIE_1",55)',vr:"FD",name:"Period",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",56)':{tag:'(0011,"GEMS_GENIE_1",56)',vr:"FD",name:"ElapsedTime",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",10)':{tag:'(0013,"GEMS_GENIE_1",10)',vr:"FD",name:"DigitalFOV",vm:"2",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",11)':{tag:'(0013,"GEMS_GENIE_1",11)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",12)':{tag:'(0013,"GEMS_GENIE_1",12)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",16)':{tag:'(0013,"GEMS_GENIE_1",16)',vr:"SL",name:"AutoTrackPeak",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",17)':{tag:'(0013,"GEMS_GENIE_1",17)',vr:"SL",name:"AutoTrackWidth",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",18)':{tag:'(0013,"GEMS_GENIE_1",18)',vr:"FD",name:"TransmissionScanTime",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",19)':{tag:'(0013,"GEMS_GENIE_1",19)',vr:"FD",name:"TransmissionMaskWidth",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1a)':{tag:'(0013,"GEMS_GENIE_1",1a)',vr:"FD",name:"CopperAttenuatorThickness",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1c)':{tag:'(0013,"GEMS_GENIE_1",1c)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1d)':{tag:'(0013,"GEMS_GENIE_1",1d)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1e)':{tag:'(0013,"GEMS_GENIE_1",1e)',vr:"FD",name:"TomoViewOffset",vm:"1-n",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",26)':{tag:'(0013,"GEMS_GENIE_1",26)',vr:"LT",name:"StudyComments",vm:"1",version:"PrivateTag"},'(0033,"GEMS_GNHD_01",01)':{tag:'(0033,"GEMS_GNHD_01",01)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0033,"GEMS_GNHD_01",02)':{tag:'(0033,"GEMS_GNHD_01",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",01)':{tag:'(0009,"GEMS_IDEN_01",01)',vr:"LO",name:"FullFidelity",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",02)':{tag:'(0009,"GEMS_IDEN_01",02)',vr:"SH",name:"SuiteId",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",04)':{tag:'(0009,"GEMS_IDEN_01",04)',vr:"SH",name:"ProductId",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",17)':{tag:'(0009,"GEMS_IDEN_01",17)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",1a)':{tag:'(0009,"GEMS_IDEN_01",1a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",20)':{tag:'(0009,"GEMS_IDEN_01",20)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",27)':{tag:'(0009,"GEMS_IDEN_01",27)',vr:"SL",name:"ImageActualDate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",2f)':{tag:'(0009,"GEMS_IDEN_01",2f)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",30)':{tag:'(0009,"GEMS_IDEN_01",30)',vr:"SH",name:"ServiceId",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",31)':{tag:'(0009,"GEMS_IDEN_01",31)',vr:"SH",name:"MobileLocationNumber",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e2)':{tag:'(0009,"GEMS_IDEN_01",e2)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e3)':{tag:'(0009,"GEMS_IDEN_01",e3)',vr:"UI",name:"EquipmentUID",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e6)':{tag:'(0009,"GEMS_IDEN_01",e6)',vr:"SH",name:"GenesisVersionNow",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e7)':{tag:'(0009,"GEMS_IDEN_01",e7)',vr:"UL",name:"ExamRecordChecksum",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e8)':{tag:'(0009,"GEMS_IDEN_01",e8)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e9)':{tag:'(0009,"GEMS_IDEN_01",e9)',vr:"SL",name:"ActualSeriesDataTimeStamp",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",06)':{tag:'(0027,"GEMS_IMAG_01",06)',vr:"SL",name:"ImageArchiveFlag",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",10)':{tag:'(0027,"GEMS_IMAG_01",10)',vr:"SS",name:"ScoutType",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1c)':{tag:'(0027,"GEMS_IMAG_01",1c)',vr:"SL",name:"VmaMamp",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1d)':{tag:'(0027,"GEMS_IMAG_01",1d)',vr:"SS",name:"VmaPhase",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1e)':{tag:'(0027,"GEMS_IMAG_01",1e)',vr:"SL",name:"VmaMod",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1f)':{tag:'(0027,"GEMS_IMAG_01",1f)',vr:"SL",name:"VmaClip",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",20)':{tag:'(0027,"GEMS_IMAG_01",20)',vr:"SS",name:"SmartScanOnOffFlag",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",30)':{tag:'(0027,"GEMS_IMAG_01",30)',vr:"SH",name:"ForeignImageRevision",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",31)':{tag:'(0027,"GEMS_IMAG_01",31)',vr:"SS",name:"ImagingMode",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",32)':{tag:'(0027,"GEMS_IMAG_01",32)',vr:"SS",name:"PulseSequence",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",33)':{tag:'(0027,"GEMS_IMAG_01",33)',vr:"SL",name:"ImagingOptions",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",35)':{tag:'(0027,"GEMS_IMAG_01",35)',vr:"SS",name:"PlaneType",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",36)':{tag:'(0027,"GEMS_IMAG_01",36)',vr:"SL",name:"ObliquePlane",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",40)':{tag:'(0027,"GEMS_IMAG_01",40)',vr:"SH",name:"RASLetterOfImageLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",41)':{tag:'(0027,"GEMS_IMAG_01",41)',vr:"FL",name:"ImageLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",42)':{tag:'(0027,"GEMS_IMAG_01",42)',vr:"FL",name:"CenterRCoordOfPlaneImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",43)':{tag:'(0027,"GEMS_IMAG_01",43)',vr:"FL",name:"CenterACoordOfPlaneImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",44)':{tag:'(0027,"GEMS_IMAG_01",44)',vr:"FL",name:"CenterSCoordOfPlaneImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",45)':{tag:'(0027,"GEMS_IMAG_01",45)',vr:"FL",name:"NormalRCoord",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",46)':{tag:'(0027,"GEMS_IMAG_01",46)',vr:"FL",name:"NormalACoord",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",47)':{tag:'(0027,"GEMS_IMAG_01",47)',vr:"FL",name:"NormalSCoord",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",48)':{tag:'(0027,"GEMS_IMAG_01",48)',vr:"FL",name:"RCoordOfTopRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",49)':{tag:'(0027,"GEMS_IMAG_01",49)',vr:"FL",name:"ACoordOfTopRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4a)':{tag:'(0027,"GEMS_IMAG_01",4a)',vr:"FL",name:"SCoordOfTopRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4b)':{tag:'(0027,"GEMS_IMAG_01",4b)',vr:"FL",name:"RCoordOfBottomRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4c)':{tag:'(0027,"GEMS_IMAG_01",4c)',vr:"FL",name:"ACoordOfBottomRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4d)':{tag:'(0027,"GEMS_IMAG_01",4d)',vr:"FL",name:"SCoordOfBottomRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",50)':{tag:'(0027,"GEMS_IMAG_01",50)',vr:"FL",name:"TableStartLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",51)':{tag:'(0027,"GEMS_IMAG_01",51)',vr:"FL",name:"TableEndLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",52)':{tag:'(0027,"GEMS_IMAG_01",52)',vr:"SH",name:"RASLetterForSideOfImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",53)':{tag:'(0027,"GEMS_IMAG_01",53)',vr:"SH",name:"RASLetterForAnteriorPosterior",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",54)':{tag:'(0027,"GEMS_IMAG_01",54)',vr:"SH",name:"RASLetterForScoutStartLoc",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",55)':{tag:'(0027,"GEMS_IMAG_01",55)',vr:"SH",name:"RASLetterForScoutEndLoc",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",60)':{tag:'(0027,"GEMS_IMAG_01",60)',vr:"FL",name:"ImageDimensionX",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",61)':{tag:'(0027,"GEMS_IMAG_01",61)',vr:"FL",name:"ImageDimensionY",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",62)':{tag:'(0027,"GEMS_IMAG_01",62)',vr:"FL",name:"NumberOfExcitations",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",04)':{tag:'(0029,"GEMS_IMPS_01",04)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",05)':{tag:'(0029,"GEMS_IMPS_01",05)',vr:"DS",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",06)':{tag:'(0029,"GEMS_IMPS_01",06)',vr:"DS",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",07)':{tag:'(0029,"GEMS_IMPS_01",07)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",08)':{tag:'(0029,"GEMS_IMPS_01",08)',vr:"SH",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",09)':{tag:'(0029,"GEMS_IMPS_01",09)',vr:"SH",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",0a)':{tag:'(0029,"GEMS_IMPS_01",0a)',vr:"SS",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",15)':{tag:'(0029,"GEMS_IMPS_01",15)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",16)':{tag:'(0029,"GEMS_IMPS_01",16)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",17)':{tag:'(0029,"GEMS_IMPS_01",17)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",18)':{tag:'(0029,"GEMS_IMPS_01",18)',vr:"SL",name:"UpperRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",1a)':{tag:'(0029,"GEMS_IMPS_01",1a)',vr:"SL",name:"LengthOfTotalHeaderInBytes",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",26)':{tag:'(0029,"GEMS_IMPS_01",26)',vr:"SS",name:"VersionOfHeaderStructure",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",34)':{tag:'(0029,"GEMS_IMPS_01",34)',vr:"SL",name:"AdvantageCompOverflow",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",35)':{tag:'(0029,"GEMS_IMPS_01",35)',vr:"SL",name:"AdvantageCompUnderflow",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",01)':{tag:'(0043,"GEMS_PARM_01",01)',vr:"SS",name:"BitmapOfPrescanOptions",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",02)':{tag:'(0043,"GEMS_PARM_01",02)',vr:"SS",name:"GradientOffsetInX",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",03)':{tag:'(0043,"GEMS_PARM_01",03)',vr:"SS",name:"GradientOffsetInY",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",04)':{tag:'(0043,"GEMS_PARM_01",04)',vr:"SS",name:"GradientOffsetInZ",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",05)':{tag:'(0043,"GEMS_PARM_01",05)',vr:"SS",name:"ImageIsOriginalOrUnoriginal",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",06)':{tag:'(0043,"GEMS_PARM_01",06)',vr:"SS",name:"NumberOfEPIShots",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",07)':{tag:'(0043,"GEMS_PARM_01",07)',vr:"SS",name:"ViewsPerSegment",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",08)':{tag:'(0043,"GEMS_PARM_01",08)',vr:"SS",name:"RespiratoryRateInBPM",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",09)':{tag:'(0043,"GEMS_PARM_01",09)',vr:"SS",name:"RespiratoryTriggerPoint",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0a)':{tag:'(0043,"GEMS_PARM_01",0a)',vr:"SS",name:"TypeOfReceiverUsed",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0b)':{tag:'(0043,"GEMS_PARM_01",0b)',vr:"DS",name:"PeakRateOfChangeOfGradientField",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0c)':{tag:'(0043,"GEMS_PARM_01",0c)',vr:"DS",name:"LimitsInUnitsOfPercent",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0d)':{tag:'(0043,"GEMS_PARM_01",0d)',vr:"DS",name:"PSDEstimatedLimit",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0e)':{tag:'(0043,"GEMS_PARM_01",0e)',vr:"DS",name:"PSDEstimatedLimitInTeslaPerSecond",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0f)':{tag:'(0043,"GEMS_PARM_01",0f)',vr:"DS",name:"SARAvgHead",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",10)':{tag:'(0043,"GEMS_PARM_01",10)',vr:"US",name:"WindowValue",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",11)':{tag:'(0043,"GEMS_PARM_01",11)',vr:"US",name:"TotalInputViews",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",12)':{tag:'(0043,"GEMS_PARM_01",12)',vr:"SS",name:"XrayChain",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",13)':{tag:'(0043,"GEMS_PARM_01",13)',vr:"SS",name:"ReconKernelParameters",vm:"5",version:"PrivateTag"},'(0043,"GEMS_PARM_01",14)':{tag:'(0043,"GEMS_PARM_01",14)',vr:"SS",name:"CalibrationParameters",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",15)':{tag:'(0043,"GEMS_PARM_01",15)',vr:"SS",name:"TotalOutputViews",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",16)':{tag:'(0043,"GEMS_PARM_01",16)',vr:"SS",name:"NumberOfOverranges",vm:"5",version:"PrivateTag"},'(0043,"GEMS_PARM_01",17)':{tag:'(0043,"GEMS_PARM_01",17)',vr:"DS",name:"IBHImageScaleFactors",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",18)':{tag:'(0043,"GEMS_PARM_01",18)',vr:"DS",name:"BBHCoefficients",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",19)':{tag:'(0043,"GEMS_PARM_01",19)',vr:"SS",name:"NumberOfBBHChainsToBlend",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1a)':{tag:'(0043,"GEMS_PARM_01",1a)',vr:"SL",name:"StartingChannelNumber",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1b)':{tag:'(0043,"GEMS_PARM_01",1b)',vr:"SS",name:"PPScanParameters",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1c)':{tag:'(0043,"GEMS_PARM_01",1c)',vr:"SS",name:"GEImageIntegrity",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1d)':{tag:'(0043,"GEMS_PARM_01",1d)',vr:"SS",name:"LevelValue",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1e)':{tag:'(0043,"GEMS_PARM_01",1e)',vr:"DS",name:"DeltaStartTime",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1f)':{tag:'(0043,"GEMS_PARM_01",1f)',vr:"SL",name:"MaxOverrangesInAView",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",20)':{tag:'(0043,"GEMS_PARM_01",20)',vr:"DS",name:"AvgOverrangesAllViews",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",21)':{tag:'(0043,"GEMS_PARM_01",21)',vr:"SS",name:"CorrectedAfterglowTerms",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",25)':{tag:'(0043,"GEMS_PARM_01",25)',vr:"SS",name:"ReferenceChannels",vm:"6",version:"PrivateTag"},'(0043,"GEMS_PARM_01",26)':{tag:'(0043,"GEMS_PARM_01",26)',vr:"US",name:"NoViewsRefChannelsBlocked",vm:"6",version:"PrivateTag"},'(0043,"GEMS_PARM_01",27)':{tag:'(0043,"GEMS_PARM_01",27)',vr:"SH",name:"ScanPitchRatio",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",28)':{tag:'(0043,"GEMS_PARM_01",28)',vr:"OB",name:"UniqueImageIdentifier",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",29)':{tag:'(0043,"GEMS_PARM_01",29)',vr:"OB",name:"HistogramTables",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2a)':{tag:'(0043,"GEMS_PARM_01",2a)',vr:"OB",name:"UserDefinedData",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2b)':{tag:'(0043,"GEMS_PARM_01",2b)',vr:"SS",name:"PrivateScanOptions",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2c)':{tag:'(0043,"GEMS_PARM_01",2c)',vr:"SS",name:"EffectiveEchoSpacing",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2d)':{tag:'(0043,"GEMS_PARM_01",2d)',vr:"SH",name:"StringSlopField1",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2e)':{tag:'(0043,"GEMS_PARM_01",2e)',vr:"SH",name:"StringSlopField2",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2f)':{tag:'(0043,"GEMS_PARM_01",2f)',vr:"SS",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",30)':{tag:'(0043,"GEMS_PARM_01",30)',vr:"SS",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",31)':{tag:'(0043,"GEMS_PARM_01",31)',vr:"DS",name:"RACoordOfTargetReconCentre",vm:"2",version:"PrivateTag"},'(0043,"GEMS_PARM_01",32)':{tag:'(0043,"GEMS_PARM_01",32)',vr:"SS",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",33)':{tag:'(0043,"GEMS_PARM_01",33)',vr:"FL",name:"NegScanSpacing",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",34)':{tag:'(0043,"GEMS_PARM_01",34)',vr:"IS",name:"OffsetFrequency",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",35)':{tag:'(0043,"GEMS_PARM_01",35)',vr:"UL",name:"UserUsageTag",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",36)':{tag:'(0043,"GEMS_PARM_01",36)',vr:"UL",name:"UserFillMapMSW",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",37)':{tag:'(0043,"GEMS_PARM_01",37)',vr:"UL",name:"UserFillMapLSW",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",38)':{tag:'(0043,"GEMS_PARM_01",38)',vr:"FL",name:"User25ToUser48",vm:"24",version:"PrivateTag"},'(0043,"GEMS_PARM_01",39)':{tag:'(0043,"GEMS_PARM_01",39)',vr:"IS",name:"SlopInteger6ToSlopInteger9",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",40)':{tag:'(0043,"GEMS_PARM_01",40)',vr:"FL",name:"TriggerOnPosition",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",41)':{tag:'(0043,"GEMS_PARM_01",41)',vr:"FL",name:"DegreeOfRotation",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",42)':{tag:'(0043,"GEMS_PARM_01",42)',vr:"SL",name:"DASTriggerSource",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",43)':{tag:'(0043,"GEMS_PARM_01",43)',vr:"SL",name:"DASFpaGain",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",44)':{tag:'(0043,"GEMS_PARM_01",44)',vr:"SL",name:"DASOutputSource",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",45)':{tag:'(0043,"GEMS_PARM_01",45)',vr:"SL",name:"DASAdInput",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",46)':{tag:'(0043,"GEMS_PARM_01",46)',vr:"SL",name:"DASCalMode",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",47)':{tag:'(0043,"GEMS_PARM_01",47)',vr:"SL",name:"DASCalFrequency",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",48)':{tag:'(0043,"GEMS_PARM_01",48)',vr:"SL",name:"DASRegXm",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",49)':{tag:'(0043,"GEMS_PARM_01",49)',vr:"SL",name:"DASAutoZero",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4a)':{tag:'(0043,"GEMS_PARM_01",4a)',vr:"SS",name:"StartingChannelOfView",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4b)':{tag:'(0043,"GEMS_PARM_01",4b)',vr:"SL",name:"DASXmPattern",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4c)':{tag:'(0043,"GEMS_PARM_01",4c)',vr:"SS",name:"TGGCTriggerMode",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4d)':{tag:'(0043,"GEMS_PARM_01",4d)',vr:"FL",name:"StartScanToXrayOnDelay",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4e)':{tag:'(0043,"GEMS_PARM_01",4e)',vr:"FL",name:"DurationOfXrayOn",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",60)':{tag:'(0043,"GEMS_PARM_01",60)',vr:"IS",name:"SlopInteger10ToSlopInteger17",vm:"8",version:"PrivateTag"},'(0043,"GEMS_PARM_01",61)':{tag:'(0043,"GEMS_PARM_01",61)',vr:"UI",name:"ScannerStudyEntityUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",62)':{tag:'(0043,"GEMS_PARM_01",62)',vr:"SH",name:"ScannerStudyID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",6f)':{tag:'(0043,"GEMS_PARM_01",6f)',vr:"DS",name:"ScannerTableEntry",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",70)':{tag:'(0043,"GEMS_PARM_01",70)',vr:"LO",name:"ParadigmName",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",71)':{tag:'(0043,"GEMS_PARM_01",71)',vr:"ST",name:"ParadigmDescription",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",72)':{tag:'(0043,"GEMS_PARM_01",72)',vr:"UI",name:"ParadigmUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",73)':{tag:'(0043,"GEMS_PARM_01",73)',vr:"US",name:"ExperimentType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",74)':{tag:'(0043,"GEMS_PARM_01",74)',vr:"US",name:"NumberOfRestVolumes",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",75)':{tag:'(0043,"GEMS_PARM_01",75)',vr:"US",name:"NumberOfActiveVolumes",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",76)':{tag:'(0043,"GEMS_PARM_01",76)',vr:"US",name:"NumberOfDummyScans",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",77)':{tag:'(0043,"GEMS_PARM_01",77)',vr:"SH",name:"ApplicationName",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",78)':{tag:'(0043,"GEMS_PARM_01",78)',vr:"SH",name:"ApplicationVersion",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",79)':{tag:'(0043,"GEMS_PARM_01",79)',vr:"US",name:"SlicesPerVolume",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7a)':{tag:'(0043,"GEMS_PARM_01",7a)',vr:"US",name:"ExpectedTimePoints",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7b)':{tag:'(0043,"GEMS_PARM_01",7b)',vr:"FL",name:"RegressorValues",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7c)':{tag:'(0043,"GEMS_PARM_01",7c)',vr:"FL",name:"DelayAfterSliceGroup",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7d)':{tag:'(0043,"GEMS_PARM_01",7d)',vr:"US",name:"ReconModeFlagWord",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7e)':{tag:'(0043,"GEMS_PARM_01",7e)',vr:"LO",name:"PACCSpecificInformation",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7f)':{tag:'(0043,"GEMS_PARM_01",7f)',vr:"DS",name:"EDWIScaleFactor",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",80)':{tag:'(0043,"GEMS_PARM_01",80)',vr:"LO",name:"CoilIDData",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",81)':{tag:'(0043,"GEMS_PARM_01",81)',vr:"LO",name:"GECoilName",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",82)':{tag:'(0043,"GEMS_PARM_01",82)',vr:"LO",name:"SystemConfigurationInformation",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",83)':{tag:'(0043,"GEMS_PARM_01",83)',vr:"DS",name:"AssetRFactors",vm:"1-2",version:"PrivateTag"},'(0043,"GEMS_PARM_01",84)':{tag:'(0043,"GEMS_PARM_01",84)',vr:"LO",name:"AdditionalAssetData",vm:"5-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",85)':{tag:'(0043,"GEMS_PARM_01",85)',vr:"UT",name:"DebugDataTextFormat",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",86)':{tag:'(0043,"GEMS_PARM_01",86)',vr:"OB",name:"DebugDataBinaryFormat",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",87)':{tag:'(0043,"GEMS_PARM_01",87)',vr:"UT",name:"ScannerSoftwareVersionLongForm",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",88)':{tag:'(0043,"GEMS_PARM_01",88)',vr:"UI",name:"PUREAcquisitionCalibrationSeriesUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",89)':{tag:'(0043,"GEMS_PARM_01",89)',vr:"LO",name:"GoverningBodydBdtAndSARDefinition",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8a)':{tag:'(0043,"GEMS_PARM_01",8a)',vr:"CS",name:"PrivateInPlanePhaseEncodingDirection",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8b)':{tag:'(0043,"GEMS_PARM_01",8b)',vr:"OB",name:"FMRIBinaryDataBlock",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8c)':{tag:'(0043,"GEMS_PARM_01",8c)',vr:"DS",name:"VoxelLocation",vm:"6",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8d)':{tag:'(0043,"GEMS_PARM_01",8d)',vr:"DS",name:"SATBandLocations",vm:"7-7n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8e)':{tag:'(0043,"GEMS_PARM_01",8e)',vr:"DS",name:"SpectroPrescanValues",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8f)':{tag:'(0043,"GEMS_PARM_01",8f)',vr:"DS",name:"SpectroParameters",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",90)':{tag:'(0043,"GEMS_PARM_01",90)',vr:"LO",name:"SARDefinition",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",91)':{tag:'(0043,"GEMS_PARM_01",91)',vr:"DS",name:"SARValue",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",92)':{tag:'(0043,"GEMS_PARM_01",92)',vr:"LO",name:"ImageErrorText",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",93)':{tag:'(0043,"GEMS_PARM_01",93)',vr:"DS",name:"SpectroQuantitationValues",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",94)':{tag:'(0043,"GEMS_PARM_01",94)',vr:"DS",name:"SpectroRatioValues",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",95)':{tag:'(0043,"GEMS_PARM_01",95)',vr:"LO",name:"PrescanReuseString",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",96)':{tag:'(0043,"GEMS_PARM_01",96)',vr:"CS",name:"ContentQualification",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",97)':{tag:'(0043,"GEMS_PARM_01",97)',vr:"LO",name:"ImageFilteringParameters",vm:"9",version:"PrivateTag"},'(0043,"GEMS_PARM_01",98)':{tag:'(0043,"GEMS_PARM_01",98)',vr:"UI",name:"ASSETAcquisitionCalibrationSeriesUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",99)':{tag:'(0043,"GEMS_PARM_01",99)',vr:"LO",name:"ExtendedOptions",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9a)':{tag:'(0043,"GEMS_PARM_01",9a)',vr:"IS",name:"RxStackIdentification",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9b)':{tag:'(0043,"GEMS_PARM_01",9b)',vr:"DS",name:"NPWFactor",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9c)':{tag:'(0043,"GEMS_PARM_01",9c)',vr:"OB",name:"ResearchTag1",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9d)':{tag:'(0043,"GEMS_PARM_01",9d)',vr:"OB",name:"ResearchTag2",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9e)':{tag:'(0043,"GEMS_PARM_01",9e)',vr:"OB",name:"ResearchTag3",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9f)':{tag:'(0043,"GEMS_PARM_01",9f)',vr:"OB",name:"ResearchTag4",vm:"1",version:"PrivateTag"},'(0011,"GEMS_PATI_01",10)':{tag:'(0011,"GEMS_PATI_01",10)',vr:"SS",name:"PatientStatus",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",03)':{tag:'(0021,"GEMS_RELA_01",03)',vr:"SS",name:"SeriesFromWhichPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",05)':{tag:'(0021,"GEMS_RELA_01",05)',vr:"SH",name:"GenesisVersionNow",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",07)':{tag:'(0021,"GEMS_RELA_01",07)',vr:"UL",name:"SeriesRecordChecksum",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",15)':{tag:'(0021,"GEMS_RELA_01",15)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",16)':{tag:'(0021,"GEMS_RELA_01",16)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",18)':{tag:'(0021,"GEMS_RELA_01",18)',vr:"SH",name:"GenesisVersionNow",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",19)':{tag:'(0021,"GEMS_RELA_01",19)',vr:"UL",name:"AcqReconRecordChecksum",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",20)':{tag:'(0021,"GEMS_RELA_01",20)',vr:"DS",name:"TableStartLocation",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",35)':{tag:'(0021,"GEMS_RELA_01",35)',vr:"SS",name:"SeriesFromWhichPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",36)':{tag:'(0021,"GEMS_RELA_01",36)',vr:"SS",name:"ImageFromWhichPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",37)':{tag:'(0021,"GEMS_RELA_01",37)',vr:"SS",name:"ScreenFormat",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",4a)':{tag:'(0021,"GEMS_RELA_01",4a)',vr:"LO",name:"AnatomicalReferenceForScout",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",4e)':{tag:'(0021,"GEMS_RELA_01",4e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",4f)':{tag:'(0021,"GEMS_RELA_01",4f)',vr:"SS",name:"LocationsInAcquisition",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",50)':{tag:'(0021,"GEMS_RELA_01",50)',vr:"SS",name:"GraphicallyPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",51)':{tag:'(0021,"GEMS_RELA_01",51)',vr:"DS",name:"RotationFromSourceXRot",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",52)':{tag:'(0021,"GEMS_RELA_01",52)',vr:"DS",name:"RotationFromSourceYRot",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",53)':{tag:'(0021,"GEMS_RELA_01",53)',vr:"DS",name:"RotationFromSourceZRot",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",54)':{tag:'(0021,"GEMS_RELA_01",54)',vr:"SH",name:"ImagePosition",vm:"3",version:"PrivateTag"},'(0021,"GEMS_RELA_01",55)':{tag:'(0021,"GEMS_RELA_01",55)',vr:"SH",name:"ImageOrientation",vm:"6",version:"PrivateTag"},'(0021,"GEMS_RELA_01",56)':{tag:'(0021,"GEMS_RELA_01",56)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",57)':{tag:'(0021,"GEMS_RELA_01",57)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",58)':{tag:'(0021,"GEMS_RELA_01",58)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",59)':{tag:'(0021,"GEMS_RELA_01",59)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5a)':{tag:'(0021,"GEMS_RELA_01",5a)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5b)':{tag:'(0021,"GEMS_RELA_01",5b)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5c)':{tag:'(0021,"GEMS_RELA_01",5c)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5d)':{tag:'(0021,"GEMS_RELA_01",5d)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5e)':{tag:'(0021,"GEMS_RELA_01",5e)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5f)':{tag:'(0021,"GEMS_RELA_01",5f)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",70)':{tag:'(0021,"GEMS_RELA_01",70)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",71)':{tag:'(0021,"GEMS_RELA_01",71)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",81)':{tag:'(0021,"GEMS_RELA_01",81)',vr:"DS",name:"AutoWindowLevelAlpha",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",82)':{tag:'(0021,"GEMS_RELA_01",82)',vr:"DS",name:"AutoWindowLevelBeta",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",83)':{tag:'(0021,"GEMS_RELA_01",83)',vr:"DS",name:"AutoWindowLevelWindow",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",84)':{tag:'(0021,"GEMS_RELA_01",84)',vr:"DS",name:"AutoWindowLevelLevel",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",90)':{tag:'(0021,"GEMS_RELA_01",90)',vr:"SS",name:"TubeFocalSpotPosition",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",91)':{tag:'(0021,"GEMS_RELA_01",91)',vr:"SS",name:"BiopsyPosition",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",92)':{tag:'(0021,"GEMS_RELA_01",92)',vr:"FL",name:"BiopsyTLocation",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",93)':{tag:'(0021,"GEMS_RELA_01",93)',vr:"FL",name:"BiopsyRefLocation",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",04)':{tag:'(0045,"GEMS_SENO_02",04)',vr:"CS",name:"AES",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",06)':{tag:'(0045,"GEMS_SENO_02",06)',vr:"DS",name:"Angulation",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",09)':{tag:'(0045,"GEMS_SENO_02",09)',vr:"DS",name:"RealMagnificationFactor",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",0b)':{tag:'(0045,"GEMS_SENO_02",0b)',vr:"CS",name:"SenographType",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",0c)':{tag:'(0045,"GEMS_SENO_02",0c)',vr:"DS",name:"IntegrationTime",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",0d)':{tag:'(0045,"GEMS_SENO_02",0d)',vr:"DS",name:"ROIOriginXY",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",11)':{tag:'(0045,"GEMS_SENO_02",11)',vr:"DS",name:"ReceptorSizeCmXY",vm:"2",version:"PrivateTag"},'(0045,"GEMS_SENO_02",12)':{tag:'(0045,"GEMS_SENO_02",12)',vr:"IS",name:"ReceptorSizePixelsXY",vm:"2",version:"PrivateTag"},'(0045,"GEMS_SENO_02",13)':{tag:'(0045,"GEMS_SENO_02",13)',vr:"ST",name:"Screen",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",14)':{tag:'(0045,"GEMS_SENO_02",14)',vr:"DS",name:"PixelPitchMicrons",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",15)':{tag:'(0045,"GEMS_SENO_02",15)',vr:"IS",name:"PixelDepthBits",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",16)':{tag:'(0045,"GEMS_SENO_02",16)',vr:"IS",name:"BinningFactorXY",vm:"2",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1B)':{tag:'(0045,"GEMS_SENO_02",1B)',vr:"CS",name:"ClinicalView",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1D)':{tag:'(0045,"GEMS_SENO_02",1D)',vr:"DS",name:"MeanOfRawGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1E)':{tag:'(0045,"GEMS_SENO_02",1E)',vr:"DS",name:"MeanOfOffsetGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1F)':{tag:'(0045,"GEMS_SENO_02",1F)',vr:"DS",name:"MeanOfCorrectedGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",20)':{tag:'(0045,"GEMS_SENO_02",20)',vr:"DS",name:"MeanOfRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",21)':{tag:'(0045,"GEMS_SENO_02",21)',vr:"DS",name:"MeanOfLogRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",22)':{tag:'(0045,"GEMS_SENO_02",22)',vr:"DS",name:"StandardDeviationOfRawGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",23)':{tag:'(0045,"GEMS_SENO_02",23)',vr:"DS",name:"StandardDeviationOfCorrectedGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",24)':{tag:'(0045,"GEMS_SENO_02",24)',vr:"DS",name:"StandardDeviationOfRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",25)':{tag:'(0045,"GEMS_SENO_02",25)',vr:"DS",name:"StandardDeviationOfLogRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",26)':{tag:'(0045,"GEMS_SENO_02",26)',vr:"OB",name:"MAOBuffer",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",27)':{tag:'(0045,"GEMS_SENO_02",27)',vr:"IS",name:"SetNumber",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",28)':{tag:'(0045,"GEMS_SENO_02",28)',vr:"CS",name:"WindowingType",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",29)':{tag:'(0045,"GEMS_SENO_02",29)',vr:"DS",name:"WindowingParameters",vm:"1-n",version:"PrivateTag"},'(0045,"GEMS_SENO_02",2a)':{tag:'(0045,"GEMS_SENO_02",2a)',vr:"IS",name:"CrosshairCursorXCoordinates",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",2b)':{tag:'(0045,"GEMS_SENO_02",2b)',vr:"IS",name:"CrosshairCursorYCoordinates",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",39)':{tag:'(0045,"GEMS_SENO_02",39)',vr:"US",name:"VignetteRows",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3a)':{tag:'(0045,"GEMS_SENO_02",3a)',vr:"US",name:"VignetteColumns",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3b)':{tag:'(0045,"GEMS_SENO_02",3b)',vr:"US",name:"VignetteBitsAllocated",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3c)':{tag:'(0045,"GEMS_SENO_02",3c)',vr:"US",name:"VignetteBitsStored",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3d)':{tag:'(0045,"GEMS_SENO_02",3d)',vr:"US",name:"VignetteHighBit",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3e)':{tag:'(0045,"GEMS_SENO_02",3e)',vr:"US",name:"VignettePixelRepresentation",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3f)':{tag:'(0045,"GEMS_SENO_02",3f)',vr:"OB",name:"VignettePixelData",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",06)':{tag:'(0025,"GEMS_SERS_01",06)',vr:"SS",name:"LastPulseSequenceUsed",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",07)':{tag:'(0025,"GEMS_SERS_01",07)',vr:"SL",name:"ImagesInSeries",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",10)':{tag:'(0025,"GEMS_SERS_01",10)',vr:"SL",name:"LandmarkCounter",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",11)':{tag:'(0025,"GEMS_SERS_01",11)',vr:"SS",name:"NumberOfAcquisitions",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",14)':{tag:'(0025,"GEMS_SERS_01",14)',vr:"SL",name:"IndicatesNumberOfUpdatesToHeader",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",17)':{tag:'(0025,"GEMS_SERS_01",17)',vr:"SL",name:"SeriesCompleteFlag",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",18)':{tag:'(0025,"GEMS_SERS_01",18)',vr:"SL",name:"NumberOfImagesArchived",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",19)':{tag:'(0025,"GEMS_SERS_01",19)',vr:"SL",name:"LastImageNumberUsed",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",1a)':{tag:'(0025,"GEMS_SERS_01",1a)',vr:"SH",name:"PrimaryReceiverSuiteAndHost",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",01)':{tag:'(0023,"GEMS_STDY_01",01)',vr:"SL",name:"NumberOfSeriesInStudy",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",02)':{tag:'(0023,"GEMS_STDY_01",02)',vr:"SL",name:"NumberOfUnarchivedSeries",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",10)':{tag:'(0023,"GEMS_STDY_01",10)',vr:"SS",name:"ReferenceImageField",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",50)':{tag:'(0023,"GEMS_STDY_01",50)',vr:"SS",name:"SummaryImage",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",70)':{tag:'(0023,"GEMS_STDY_01",70)',vr:"FD",name:"StartTimeSecsInFirstAxial",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",74)':{tag:'(0023,"GEMS_STDY_01",74)',vr:"SL",name:"NumberOfUpdatesToHeader",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",7d)':{tag:'(0023,"GEMS_STDY_01",7d)',vr:"SS",name:"IndicatesIfStudyHasCompleteInfo",vm:"1",version:"PrivateTag"},'(0033,"GEMS_YMHD_01",05)':{tag:'(0033,"GEMS_YMHD_01",05)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0033,"GEMS_YMHD_01",06)':{tag:'(0033,"GEMS_YMHD_01",06)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",39)':{tag:'(0019,"GE_GENESIS_REV3.0",39)',vr:"SS",name:"AxialType",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",8f)':{tag:'(0019,"GE_GENESIS_REV3.0",8f)',vr:"SS",name:"SwapPhaseFrequency",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",9c)':{tag:'(0019,"GE_GENESIS_REV3.0",9c)',vr:"SS",name:"PulseSequenceName",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",9f)':{tag:'(0019,"GE_GENESIS_REV3.0",9f)',vr:"SS",name:"CoilType",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",a4)':{tag:'(0019,"GE_GENESIS_REV3.0",a4)',vr:"SS",name:"SATFatWaterBone",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",c0)':{tag:'(0019,"GE_GENESIS_REV3.0",c0)',vr:"SS",name:"BitmapOfSATSelections",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",c1)':{tag:'(0019,"GE_GENESIS_REV3.0",c1)',vr:"SS",name:"SurfaceCoilIntensityCorrectionFlag",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",cb)':{tag:'(0019,"GE_GENESIS_REV3.0",cb)',vr:"SS",name:"PhaseContrastFlowAxis",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",cc)':{tag:'(0019,"GE_GENESIS_REV3.0",cc)',vr:"SS",name:"PhaseContrastVelocityEncoding",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",d5)':{tag:'(0019,"GE_GENESIS_REV3.0",d5)',vr:"SS",name:"FractionalEcho",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",d8)':{tag:'(0019,"GE_GENESIS_REV3.0",d8)',vr:"SS",name:"VariableEchoFlag",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",d9)':{tag:'(0019,"GE_GENESIS_REV3.0",d9)',vr:"DS",name:"ConcatenatedSat",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",f2)':{tag:'(0019,"GE_GENESIS_REV3.0",f2)',vr:"SS",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0043,"GE_GENESIS_REV3.0",1e)':{tag:'(0043,"GE_GENESIS_REV3.0",1e)',vr:"DS",name:"DeltaStartTime",vm:"1",version:"PrivateTag"},'(0043,"GE_GENESIS_REV3.0",27)':{tag:'(0043,"GE_GENESIS_REV3.0",27)',vr:"SH",name:"ScanPitchRatio",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",01)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",01)',vr:"FD",name:"ImageCompressionFraction",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",02)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",02)',vr:"FD",name:"ImageQuality",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",03)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",03)',vr:"FD",name:"ImageBytesTransferred",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",10)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",10)',vr:"SH",name:"J2cParameterType",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",11)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",11)',vr:"US",name:"J2cPixelRepresentation",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",12)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",12)',vr:"US",name:"J2cBitsAllocated",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",13)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",13)',vr:"US",name:"J2cPixelShiftValue",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",14)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",14)',vr:"US",name:"J2cPlanarConfiguration",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",15)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",15)',vr:"DS",name:"J2cRescaleIntercept",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",20)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",20)',vr:"LO",name:"PixelDataMD5SumPerFrame",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",21)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",21)',vr:"US",name:"HistogramPercentileLabels",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",22)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",22)',vr:"FD",name:"HistogramPercentileValues",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",01)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",01)',vr:"LO",name:"InstitutionCode",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",02)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",02)',vr:"LO",name:"RoutedTransferAE",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",03)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",03)',vr:"LO",name:"SourceAE",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",04)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",04)',vr:"SH",name:"DeferredValidation",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",05)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",05)',vr:"LO",name:"SeriesOwner",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",06)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",06)',vr:"LO",name:"OrderGroupNumber",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",07)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",07)',vr:"SH",name:"StrippedPixelData",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",08)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",08)',vr:"SH",name:"PendingMoveRequest",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",20)':{tag:'(0041,"INTEGRIS 1.0",20)',vr:"FL",name:"AccumulatedFluoroscopyDose",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",30)':{tag:'(0041,"INTEGRIS 1.0",30)',vr:"FL",name:"AccumulatedExposureDose",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",40)':{tag:'(0041,"INTEGRIS 1.0",40)',vr:"FL",name:"TotalDose",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",41)':{tag:'(0041,"INTEGRIS 1.0",41)',vr:"FL",name:"TotalNumberOfFrames",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",50)':{tag:'(0041,"INTEGRIS 1.0",50)',vr:"SQ",name:"ExposureInformationSequence",vm:"1",version:"PrivateTag"},'(0009,"INTEGRIS 1.0",08)':{tag:'(0009,"INTEGRIS 1.0",08)',vr:"CS",name:"ExposureChannel",vm:"1-n",version:"PrivateTag"},'(0009,"INTEGRIS 1.0",32)':{tag:'(0009,"INTEGRIS 1.0",32)',vr:"TM",name:"ExposureStartTime",vm:"1",version:"PrivateTag"},'(0019,"INTEGRIS 1.0",00)':{tag:'(0019,"INTEGRIS 1.0",00)',vr:"LO",name:"APRName",vm:"1",version:"PrivateTag"},'(0019,"INTEGRIS 1.0",40)':{tag:'(0019,"INTEGRIS 1.0",40)',vr:"DS",name:"FrameRate",vm:"1",version:"PrivateTag"},'(0021,"INTEGRIS 1.0",12)':{tag:'(0021,"INTEGRIS 1.0",12)',vr:"IS",name:"ExposureNumber",vm:"1",version:"PrivateTag"},'(0029,"INTEGRIS 1.0",08)':{tag:'(0029,"INTEGRIS 1.0",08)',vr:"IS",name:"NumberOfExposureResults",vm:"1",version:"PrivateTag"},'(0029,"ISG shadow",70)':{tag:'(0029,"ISG shadow",70)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"ISG shadow",80)':{tag:'(0029,"ISG shadow",80)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"ISG shadow",90)':{tag:'(0029,"ISG shadow",90)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ISI",01)':{tag:'(0009,"ISI",01)',vr:"UN",name:"SIENETGeneralPurposeIMGEF",vm:"1",version:"PrivateTag"},'(0009,"MERGE TECHNOLOGIES, INC.",00)':{tag:'(0009,"MERGE TECHNOLOGIES, INC.",00)',vr:"OB",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1010)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1010)',vr:"OB",name:"OriginalMeasuringData",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1012)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1012)',vr:"UL",name:"OriginalMeasuringDataLength",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1020)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1020)',vr:"OB",name:"OriginalMeasuringRawData",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1022)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1022)',vr:"UL",name:"OriginalMeasuringRawDataLength",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",00)':{tag:'(0041,"PAPYRUS 3.0",00)',vr:"LT",name:"PapyrusComments",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",10)':{tag:'(0041,"PAPYRUS 3.0",10)',vr:"SQ",name:"PointerSequence",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",11)':{tag:'(0041,"PAPYRUS 3.0",11)',vr:"UL",name:"ImagePointer",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",12)':{tag:'(0041,"PAPYRUS 3.0",12)',vr:"UL",name:"PixelOffset",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",13)':{tag:'(0041,"PAPYRUS 3.0",13)',vr:"SQ",name:"ImageIdentifierSequence",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",14)':{tag:'(0041,"PAPYRUS 3.0",14)',vr:"SQ",name:"ExternalFileReferenceSequence",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",15)':{tag:'(0041,"PAPYRUS 3.0",15)',vr:"US",name:"NumberOfImages",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",21)':{tag:'(0041,"PAPYRUS 3.0",21)',vr:"UI",name:"ReferencedSOPClassUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",22)':{tag:'(0041,"PAPYRUS 3.0",22)',vr:"UI",name:"ReferencedSOPInstanceUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",31)':{tag:'(0041,"PAPYRUS 3.0",31)',vr:"LT",name:"ReferencedFileName",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",32)':{tag:'(0041,"PAPYRUS 3.0",32)',vr:"LT",name:"ReferencedFilePath",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",41)':{tag:'(0041,"PAPYRUS 3.0",41)',vr:"UI",name:"ReferencedImageSOPClassUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",42)':{tag:'(0041,"PAPYRUS 3.0",42)',vr:"UI",name:"ReferencedImageSOPInstanceUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",50)':{tag:'(0041,"PAPYRUS 3.0",50)',vr:"SQ",name:"ImageSequence",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",00)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",00)',vr:"IS",name:"OverlayID",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",01)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",01)',vr:"LT",name:"LinkedOverlays",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",10)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",10)',vr:"US",name:"OverlayRows",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",11)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",11)',vr:"US",name:"OverlayColumns",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",40)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",40)',vr:"LO",name:"OverlayType",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",50)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",50)',vr:"US",name:"OverlayOrigin",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",60)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",60)',vr:"LO",name:"Editable",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",70)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",70)',vr:"LO",name:"OverlayFont",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",72)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",72)',vr:"LO",name:"OverlayStyle",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",74)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",74)',vr:"US",name:"OverlayFontSize",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",76)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",76)',vr:"LO",name:"OverlayColor",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",78)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",78)',vr:"US",name:"ShadowSize",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",80)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",80)',vr:"LO",name:"FillPattern",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",82)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",82)',vr:"US",name:"OverlayPenSize",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",a0)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",a0)',vr:"LO",name:"Label",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",a2)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",a2)',vr:"LT",name:"PostItText",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",a4)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",a4)',vr:"US",name:"AnchorPoint",vm:"2",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",b0)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",b0)',vr:"LO",name:"ROIType",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",b2)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",b2)',vr:"LT",name:"AttachedAnnotation",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",ba)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",ba)',vr:"US",name:"ContourPoints",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",bc)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",bc)',vr:"US",name:"MaskData",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",c0)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",c0)',vr:"SQ",name:"UINOverlaySequence",vm:"1",version:"PrivateTag"},'(0009,"PAPYRUS",00)':{tag:'(0009,"PAPYRUS",00)',vr:"LT",name:"OriginalFileName",vm:"1",version:"PrivateTag"},'(0009,"PAPYRUS",10)':{tag:'(0009,"PAPYRUS",10)',vr:"LT",name:"OriginalFileLocation",vm:"1",version:"PrivateTag"},'(0009,"PAPYRUS",18)':{tag:'(0009,"PAPYRUS",18)',vr:"LT",name:"DataSetIdentifier",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",00)':{tag:'(0041,"PAPYRUS",00)',vr:"LT",name:"PapyrusComments",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",10)':{tag:'(0041,"PAPYRUS",10)',vr:"US",name:"FolderType",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",11)':{tag:'(0041,"PAPYRUS",11)',vr:"LT",name:"PatientFolderDataSetID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",20)':{tag:'(0041,"PAPYRUS",20)',vr:"LT",name:"FolderName",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",30)':{tag:'(0041,"PAPYRUS",30)',vr:"DA",name:"CreationDate",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",32)':{tag:'(0041,"PAPYRUS",32)',vr:"TM",name:"CreationTime",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",34)':{tag:'(0041,"PAPYRUS",34)',vr:"DA",name:"ModifiedDate",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",36)':{tag:'(0041,"PAPYRUS",36)',vr:"TM",name:"ModifiedTime",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",40)':{tag:'(0041,"PAPYRUS",40)',vr:"LT",name:"OwnerName",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",50)':{tag:'(0041,"PAPYRUS",50)',vr:"LT",name:"FolderStatus",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",60)':{tag:'(0041,"PAPYRUS",60)',vr:"UL",name:"NumberOfImages",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",62)':{tag:'(0041,"PAPYRUS",62)',vr:"UL",name:"NumberOfOther",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",a0)':{tag:'(0041,"PAPYRUS",a0)',vr:"LT",name:"ExternalFolderElementDSID",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",a1)':{tag:'(0041,"PAPYRUS",a1)',vr:"US",name:"ExternalFolderElementDataSetType",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",a2)':{tag:'(0041,"PAPYRUS",a2)',vr:"LT",name:"ExternalFolderElementFileLocation",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",a3)':{tag:'(0041,"PAPYRUS",a3)',vr:"UL",name:"ExternalFolderElementLength",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b0)':{tag:'(0041,"PAPYRUS",b0)',vr:"LT",name:"InternalFolderElementDSID",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b1)':{tag:'(0041,"PAPYRUS",b1)',vr:"US",name:"InternalFolderElementDataSetType",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b2)':{tag:'(0041,"PAPYRUS",b2)',vr:"UL",name:"InternalOffsetToDataSet",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b3)':{tag:'(0041,"PAPYRUS",b3)',vr:"UL",name:"InternalOffsetToImage",vm:"1-n",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",01)':{tag:'(2001,"Philips Imaging DD 001",01)',vr:"FL",name:"ChemicalShift",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",02)':{tag:'(2001,"Philips Imaging DD 001",02)',vr:"IS",name:"ChemicalShiftNumberMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",03)':{tag:'(2001,"Philips Imaging DD 001",03)',vr:"FL",name:"DiffusionBFactor",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",04)':{tag:'(2001,"Philips Imaging DD 001",04)',vr:"CS",name:"DiffusionDirection",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",06)':{tag:'(2001,"Philips Imaging DD 001",06)',vr:"CS",name:"ImageEnhanced",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",07)':{tag:'(2001,"Philips Imaging DD 001",07)',vr:"CS",name:"ImageTypeEDES",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",08)':{tag:'(2001,"Philips Imaging DD 001",08)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",09)':{tag:'(2001,"Philips Imaging DD 001",09)',vr:"FL",name:"ImagePrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0a)':{tag:'(2001,"Philips Imaging DD 001",0a)',vr:"IS",name:"SliceNumberMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0b)':{tag:'(2001,"Philips Imaging DD 001",0b)',vr:"CS",name:"SliceOrientation",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0c)':{tag:'(2001,"Philips Imaging DD 001",0c)',vr:"CS",name:"ArrhythmiaRejection",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0e)':{tag:'(2001,"Philips Imaging DD 001",0e)',vr:"CS",name:"CardiacCycled",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0f)':{tag:'(2001,"Philips Imaging DD 001",0f)',vr:"SS",name:"CardiacGateWidth",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",10)':{tag:'(2001,"Philips Imaging DD 001",10)',vr:"CS",name:"CardiacSync",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",11)':{tag:'(2001,"Philips Imaging DD 001",11)',vr:"FL",name:"DiffusionEchoTime",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",12)':{tag:'(2001,"Philips Imaging DD 001",12)',vr:"CS",name:"DynamicSeries",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",13)':{tag:'(2001,"Philips Imaging DD 001",13)',vr:"SL",name:"EPIFactor",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",14)':{tag:'(2001,"Philips Imaging DD 001",14)',vr:"SL",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",15)':{tag:'(2001,"Philips Imaging DD 001",15)',vr:"SS",name:"NumberOfLocations",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",16)':{tag:'(2001,"Philips Imaging DD 001",16)',vr:"SS",name:"NumberOfPCDirections",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",17)':{tag:'(2001,"Philips Imaging DD 001",17)',vr:"SL",name:"NumberOfPhasesMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",18)':{tag:'(2001,"Philips Imaging DD 001",18)',vr:"SL",name:"NumberOfSlicesMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",19)':{tag:'(2001,"Philips Imaging DD 001",19)',vr:"CS",name:"PartialMatrixScanned",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1a)':{tag:'(2001,"Philips Imaging DD 001",1a)',vr:"FL",name:"PCVelocity",vm:"1-n",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1b)':{tag:'(2001,"Philips Imaging DD 001",1b)',vr:"FL",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1c)':{tag:'(2001,"Philips Imaging DD 001",1c)',vr:"CS",name:"PrepulseType",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1d)':{tag:'(2001,"Philips Imaging DD 001",1d)',vr:"IS",name:"ReconstructionNumberMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1f)':{tag:'(2001,"Philips Imaging DD 001",1f)',vr:"CS",name:"RespirationSync",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",20)':{tag:'(2001,"Philips Imaging DD 001",20)',vr:"LO",name:"ScanningTechnique",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",21)':{tag:'(2001,"Philips Imaging DD 001",21)',vr:"CS",name:"SPIR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",22)':{tag:'(2001,"Philips Imaging DD 001",22)',vr:"FL",name:"WaterFatShift",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",23)':{tag:'(2001,"Philips Imaging DD 001",23)',vr:"DS",name:"FlipAnglePhilips",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",24)':{tag:'(2001,"Philips Imaging DD 001",24)',vr:"CS",name:"SeriesIsInteractive",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",25)':{tag:'(2001,"Philips Imaging DD 001",25)',vr:"SH",name:"EchoTimeDisplayMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",26)':{tag:'(2001,"Philips Imaging DD 001",26)',vr:"CS",name:"PresentationStateSubtractionActive",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",2d)':{tag:'(2001,"Philips Imaging DD 001",2d)',vr:"SS",name:"StackNumberOfSlices",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",32)':{tag:'(2001,"Philips Imaging DD 001",32)',vr:"FL",name:"StackRadialAngle",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",33)':{tag:'(2001,"Philips Imaging DD 001",33)',vr:"CS",name:"StackRadialAxis",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",35)':{tag:'(2001,"Philips Imaging DD 001",35)',vr:"SS",name:"StackSliceNumber",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",36)':{tag:'(2001,"Philips Imaging DD 001",36)',vr:"CS",name:"StackType",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",3f)':{tag:'(2001,"Philips Imaging DD 001",3f)',vr:"CS",name:"ZoomMode",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",58)':{tag:'(2001,"Philips Imaging DD 001",58)',vr:"UL",name:"ContrastTransferTaste",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",5f)':{tag:'(2001,"Philips Imaging DD 001",5f)',vr:"SQ",name:"StackSequence",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",60)':{tag:'(2001,"Philips Imaging DD 001",60)',vr:"SL",name:"NumberOfStacks",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",61)':{tag:'(2001,"Philips Imaging DD 001",61)',vr:"CS",name:"SeriesTransmitted",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",62)':{tag:'(2001,"Philips Imaging DD 001",62)',vr:"CS",name:"SeriesCommitted",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",63)':{tag:'(2001,"Philips Imaging DD 001",63)',vr:"CS",name:"ExaminationSource",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",67)':{tag:'(2001,"Philips Imaging DD 001",67)',vr:"CS",name:"LinearPresentationGLTrafoShapeSub",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",77)':{tag:'(2001,"Philips Imaging DD 001",77)',vr:"CS",name:"GLTrafoType",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",7b)':{tag:'(2001,"Philips Imaging DD 001",7b)',vr:"IS",name:"AcquisitionNumber",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",81)':{tag:'(2001,"Philips Imaging DD 001",81)',vr:"IS",name:"NumberOfDynamicScans",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",9f)':{tag:'(2001,"Philips Imaging DD 001",9f)',vr:"US",name:"PixelProcessingKernelSize",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",a1)':{tag:'(2001,"Philips Imaging DD 001",a1)',vr:"CS",name:"IsRawImage",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",f1)':{tag:'(2001,"Philips Imaging DD 001",f1)',vr:"FL",name:"ProspectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",f2)':{tag:'(2001,"Philips Imaging DD 001",f2)',vr:"FL",name:"RetrospectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",01)':{tag:'(2001,"PHILIPS IMAGING DD 001",01)',vr:"FL",name:"ChemicalShift",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",02)':{tag:'(2001,"PHILIPS IMAGING DD 001",02)',vr:"IS",name:"ChemicalShiftNumberMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",03)':{tag:'(2001,"PHILIPS IMAGING DD 001",03)',vr:"FL",name:"DiffusionBFactor",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",04)':{tag:'(2001,"PHILIPS IMAGING DD 001",04)',vr:"CS",name:"DiffusionDirection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",06)':{tag:'(2001,"PHILIPS IMAGING DD 001",06)',vr:"CS",name:"ImageEnhanced",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",07)':{tag:'(2001,"PHILIPS IMAGING DD 001",07)',vr:"CS",name:"ImageTypeEDES",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",08)':{tag:'(2001,"PHILIPS IMAGING DD 001",08)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",09)':{tag:'(2001,"PHILIPS IMAGING DD 001",09)',vr:"FL",name:"ImagePrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0a)':{tag:'(2001,"PHILIPS IMAGING DD 001",0a)',vr:"IS",name:"SliceNumberMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0b)':{tag:'(2001,"PHILIPS IMAGING DD 001",0b)',vr:"CS",name:"SliceOrientation",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0c)':{tag:'(2001,"PHILIPS IMAGING DD 001",0c)',vr:"CS",name:"ArrhythmiaRejection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0e)':{tag:'(2001,"PHILIPS IMAGING DD 001",0e)',vr:"CS",name:"CardiacCycled",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0f)':{tag:'(2001,"PHILIPS IMAGING DD 001",0f)',vr:"SS",name:"CardiacGateWidth",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",10)':{tag:'(2001,"PHILIPS IMAGING DD 001",10)',vr:"CS",name:"CardiacSync",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",11)':{tag:'(2001,"PHILIPS IMAGING DD 001",11)',vr:"FL",name:"DiffusionEchoTime",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",12)':{tag:'(2001,"PHILIPS IMAGING DD 001",12)',vr:"CS",name:"DynamicSeries",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",13)':{tag:'(2001,"PHILIPS IMAGING DD 001",13)',vr:"SL",name:"EPIFactor",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",14)':{tag:'(2001,"PHILIPS IMAGING DD 001",14)',vr:"SL",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",15)':{tag:'(2001,"PHILIPS IMAGING DD 001",15)',vr:"SS",name:"NumberOfLocations",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",16)':{tag:'(2001,"PHILIPS IMAGING DD 001",16)',vr:"SS",name:"NumberOfPCDirections",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",17)':{tag:'(2001,"PHILIPS IMAGING DD 001",17)',vr:"SL",name:"NumberOfPhasesMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",18)':{tag:'(2001,"PHILIPS IMAGING DD 001",18)',vr:"SL",name:"NumberOfSlicesMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",19)':{tag:'(2001,"PHILIPS IMAGING DD 001",19)',vr:"CS",name:"PartialMatrixScanned",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1a)':{tag:'(2001,"PHILIPS IMAGING DD 001",1a)',vr:"FL",name:"PCVelocity",vm:"1-n",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1b)':{tag:'(2001,"PHILIPS IMAGING DD 001",1b)',vr:"FL",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1c)':{tag:'(2001,"PHILIPS IMAGING DD 001",1c)',vr:"CS",name:"PrepulseType",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1d)':{tag:'(2001,"PHILIPS IMAGING DD 001",1d)',vr:"IS",name:"ReconstructionNumberMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1f)':{tag:'(2001,"PHILIPS IMAGING DD 001",1f)',vr:"CS",name:"RespirationSync",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",20)':{tag:'(2001,"PHILIPS IMAGING DD 001",20)',vr:"LO",name:"ScanningTechnique",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",21)':{tag:'(2001,"PHILIPS IMAGING DD 001",21)',vr:"CS",name:"SPIR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",22)':{tag:'(2001,"PHILIPS IMAGING DD 001",22)',vr:"FL",name:"WaterFatShift",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",23)':{tag:'(2001,"PHILIPS IMAGING DD 001",23)',vr:"DS",name:"FlipAnglePhilips",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",24)':{tag:'(2001,"PHILIPS IMAGING DD 001",24)',vr:"CS",name:"SeriesIsInteractive",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",25)':{tag:'(2001,"PHILIPS IMAGING DD 001",25)',vr:"SH",name:"EchoTimeDisplayMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",26)':{tag:'(2001,"PHILIPS IMAGING DD 001",26)',vr:"CS",name:"PresentationStateSubtractionActive",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",2d)':{tag:'(2001,"PHILIPS IMAGING DD 001",2d)',vr:"SS",name:"StackNumberOfSlices",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",32)':{tag:'(2001,"PHILIPS IMAGING DD 001",32)',vr:"FL",name:"StackRadialAngle",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",33)':{tag:'(2001,"PHILIPS IMAGING DD 001",33)',vr:"CS",name:"StackRadialAxis",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",35)':{tag:'(2001,"PHILIPS IMAGING DD 001",35)',vr:"SS",name:"StackSliceNumber",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",36)':{tag:'(2001,"PHILIPS IMAGING DD 001",36)',vr:"CS",name:"StackType",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",3f)':{tag:'(2001,"PHILIPS IMAGING DD 001",3f)',vr:"CS",name:"ZoomMode",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",58)':{tag:'(2001,"PHILIPS IMAGING DD 001",58)',vr:"UL",name:"ContrastTransferTaste",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",5f)':{tag:'(2001,"PHILIPS IMAGING DD 001",5f)',vr:"SQ",name:"StackSequence",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",60)':{tag:'(2001,"PHILIPS IMAGING DD 001",60)',vr:"SL",name:"NumberOfStacks",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",61)':{tag:'(2001,"PHILIPS IMAGING DD 001",61)',vr:"CS",name:"SeriesTransmitted",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",62)':{tag:'(2001,"PHILIPS IMAGING DD 001",62)',vr:"CS",name:"SeriesCommitted",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",63)':{tag:'(2001,"PHILIPS IMAGING DD 001",63)',vr:"CS",name:"ExaminationSource",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",67)':{tag:'(2001,"PHILIPS IMAGING DD 001",67)',vr:"CS",name:"LinearPresentationGLTrafoShapeSub",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",77)':{tag:'(2001,"PHILIPS IMAGING DD 001",77)',vr:"CS",name:"GLTrafoType",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",7b)':{tag:'(2001,"PHILIPS IMAGING DD 001",7b)',vr:"IS",name:"AcquisitionNumber",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",81)':{tag:'(2001,"PHILIPS IMAGING DD 001",81)',vr:"IS",name:"NumberOfDynamicScans",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",9f)':{tag:'(2001,"PHILIPS IMAGING DD 001",9f)',vr:"US",name:"PixelProcessingKernelSize",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",a1)':{tag:'(2001,"PHILIPS IMAGING DD 001",a1)',vr:"CS",name:"IsRawImage",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",f1)':{tag:'(2001,"PHILIPS IMAGING DD 001",f1)',vr:"FL",name:"ProspectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",f2)':{tag:'(2001,"PHILIPS IMAGING DD 001",f2)',vr:"FL",name:"RetrospectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",05)':{tag:'(2005,"Philips MR Imaging DD 001",05)',vr:"CS",name:"SynergyReconstructionType",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",1e)':{tag:'(2005,"Philips MR Imaging DD 001",1e)',vr:"SH",name:"MIPProtocol",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",1f)':{tag:'(2005,"Philips MR Imaging DD 001",1f)',vr:"SH",name:"MPRProtocol",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",20)':{tag:'(2005,"Philips MR Imaging DD 001",20)',vr:"SL",name:"NumberOfChemicalShifts",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",2d)':{tag:'(2005,"Philips MR Imaging DD 001",2d)',vr:"SS",name:"NumberOfStackSlices",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",83)':{tag:'(2005,"Philips MR Imaging DD 001",83)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",a1)':{tag:'(2005,"Philips MR Imaging DD 001",a1)',vr:"CS",name:"SyncraScanType",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",b0)':{tag:'(2005,"Philips MR Imaging DD 001",b0)',vr:"FL",name:"DiffusionDirectionRL",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",b1)':{tag:'(2005,"Philips MR Imaging DD 001",b1)',vr:"FL",name:"DiffusionDirectionAP",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",b2)':{tag:'(2005,"Philips MR Imaging DD 001",b2)',vr:"FL",name:"DiffusionDirectionFH",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 005",02)':{tag:'(2005,"Philips MR Imaging DD 005",02)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",05)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",05)',vr:"CS",name:"SynergyReconstructionType",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",1e)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",1e)',vr:"SH",name:"MIPProtocol",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",1f)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",1f)',vr:"SH",name:"MPRProtocol",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",20)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",20)',vr:"SL",name:"NumberOfChemicalShifts",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",2d)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",2d)',vr:"SS",name:"NumberOfStackSlices",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",83)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",83)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",a1)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",a1)',vr:"CS",name:"SyncraScanType",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",b0)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",b0)',vr:"FL",name:"DiffusionDirectionRL",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",b1)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",b1)',vr:"FL",name:"DiffusionDirectionAP",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",b2)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",b2)',vr:"FL",name:"DiffusionDirectionFH",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR R5.5/PART",1000)':{tag:'(0019,"PHILIPS MR R5.5/PART",1000)',vr:"DS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR R5.6/PART",1000)':{tag:'(0019,"PHILIPS MR R5.6/PART",1000)',vr:"DS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",01)':{tag:'(0019,"PHILIPS MR SPECTRO;1",01)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",02)':{tag:'(0019,"PHILIPS MR SPECTRO;1",02)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",03)':{tag:'(0019,"PHILIPS MR SPECTRO;1",03)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",04)':{tag:'(0019,"PHILIPS MR SPECTRO;1",04)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",05)':{tag:'(0019,"PHILIPS MR SPECTRO;1",05)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",06)':{tag:'(0019,"PHILIPS MR SPECTRO;1",06)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",07)':{tag:'(0019,"PHILIPS MR SPECTRO;1",07)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",08)':{tag:'(0019,"PHILIPS MR SPECTRO;1",08)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",09)':{tag:'(0019,"PHILIPS MR SPECTRO;1",09)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",10)':{tag:'(0019,"PHILIPS MR SPECTRO;1",10)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",12)':{tag:'(0019,"PHILIPS MR SPECTRO;1",12)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",13)':{tag:'(0019,"PHILIPS MR SPECTRO;1",13)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",14)':{tag:'(0019,"PHILIPS MR SPECTRO;1",14)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",15)':{tag:'(0019,"PHILIPS MR SPECTRO;1",15)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",16)':{tag:'(0019,"PHILIPS MR SPECTRO;1",16)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",17)':{tag:'(0019,"PHILIPS MR SPECTRO;1",17)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",18)':{tag:'(0019,"PHILIPS MR SPECTRO;1",18)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",20)':{tag:'(0019,"PHILIPS MR SPECTRO;1",20)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",21)':{tag:'(0019,"PHILIPS MR SPECTRO;1",21)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",22)':{tag:'(0019,"PHILIPS MR SPECTRO;1",22)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",23)':{tag:'(0019,"PHILIPS MR SPECTRO;1",23)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",24)':{tag:'(0019,"PHILIPS MR SPECTRO;1",24)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",25)':{tag:'(0019,"PHILIPS MR SPECTRO;1",25)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",26)':{tag:'(0019,"PHILIPS MR SPECTRO;1",26)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",27)':{tag:'(0019,"PHILIPS MR SPECTRO;1",27)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",28)':{tag:'(0019,"PHILIPS MR SPECTRO;1",28)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",29)':{tag:'(0019,"PHILIPS MR SPECTRO;1",29)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",31)':{tag:'(0019,"PHILIPS MR SPECTRO;1",31)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",32)':{tag:'(0019,"PHILIPS MR SPECTRO;1",32)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",41)':{tag:'(0019,"PHILIPS MR SPECTRO;1",41)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",42)':{tag:'(0019,"PHILIPS MR SPECTRO;1",42)',vr:"IS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",43)':{tag:'(0019,"PHILIPS MR SPECTRO;1",43)',vr:"IS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",45)':{tag:'(0019,"PHILIPS MR SPECTRO;1",45)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",46)':{tag:'(0019,"PHILIPS MR SPECTRO;1",46)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",47)':{tag:'(0019,"PHILIPS MR SPECTRO;1",47)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",48)':{tag:'(0019,"PHILIPS MR SPECTRO;1",48)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",49)':{tag:'(0019,"PHILIPS MR SPECTRO;1",49)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",50)':{tag:'(0019,"PHILIPS MR SPECTRO;1",50)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",60)':{tag:'(0019,"PHILIPS MR SPECTRO;1",60)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",61)':{tag:'(0019,"PHILIPS MR SPECTRO;1",61)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",70)':{tag:'(0019,"PHILIPS MR SPECTRO;1",70)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",71)':{tag:'(0019,"PHILIPS MR SPECTRO;1",71)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",72)':{tag:'(0019,"PHILIPS MR SPECTRO;1",72)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",73)':{tag:'(0019,"PHILIPS MR SPECTRO;1",73)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",74)':{tag:'(0019,"PHILIPS MR SPECTRO;1",74)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",76)':{tag:'(0019,"PHILIPS MR SPECTRO;1",76)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",77)':{tag:'(0019,"PHILIPS MR SPECTRO;1",77)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",78)':{tag:'(0019,"PHILIPS MR SPECTRO;1",78)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",79)':{tag:'(0019,"PHILIPS MR SPECTRO;1",79)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",80)':{tag:'(0019,"PHILIPS MR SPECTRO;1",80)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"PHILIPS MR",10)':{tag:'(0009,"PHILIPS MR",10)',vr:"LO",name:"SPIRelease",vm:"1",version:"PrivateTag"},'(0009,"PHILIPS MR",12)':{tag:'(0009,"PHILIPS MR",12)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",09)':{tag:'(0019,"PHILIPS MR/LAST",09)',vr:"DS",name:"MainMagneticField",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",0e)':{tag:'(0019,"PHILIPS MR/LAST",0e)',vr:"IS",name:"FlowCompensation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b1)':{tag:'(0019,"PHILIPS MR/LAST",b1)',vr:"IS",name:"MinimumRRInterval",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b2)':{tag:'(0019,"PHILIPS MR/LAST",b2)',vr:"IS",name:"MaximumRRInterval",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b3)':{tag:'(0019,"PHILIPS MR/LAST",b3)',vr:"IS",name:"NumberOfRejections",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b4)':{tag:'(0019,"PHILIPS MR/LAST",b4)',vr:"IS",name:"NumberOfRRIntervals",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b5)':{tag:'(0019,"PHILIPS MR/LAST",b5)',vr:"IS",name:"ArrhythmiaRejection",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",c0)':{tag:'(0019,"PHILIPS MR/LAST",c0)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",c6)':{tag:'(0019,"PHILIPS MR/LAST",c6)',vr:"IS",name:"CycledMultipleSlice",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",ce)':{tag:'(0019,"PHILIPS MR/LAST",ce)',vr:"IS",name:"REST",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",d5)':{tag:'(0019,"PHILIPS MR/LAST",d5)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",d6)':{tag:'(0019,"PHILIPS MR/LAST",d6)',vr:"IS",name:"FourierInterpolation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",d9)':{tag:'(0019,"PHILIPS MR/LAST",d9)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e0)':{tag:'(0019,"PHILIPS MR/LAST",e0)',vr:"IS",name:"Prepulse",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e1)':{tag:'(0019,"PHILIPS MR/LAST",e1)',vr:"DS",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e2)':{tag:'(0019,"PHILIPS MR/LAST",e2)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e3)':{tag:'(0019,"PHILIPS MR/LAST",e3)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f0)':{tag:'(0019,"PHILIPS MR/LAST",f0)',vr:"LT",name:"WSProtocolString1",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f1)':{tag:'(0019,"PHILIPS MR/LAST",f1)',vr:"LT",name:"WSProtocolString2",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f2)':{tag:'(0019,"PHILIPS MR/LAST",f2)',vr:"LT",name:"WSProtocolString3",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f3)':{tag:'(0019,"PHILIPS MR/LAST",f3)',vr:"LT",name:"WSProtocolString4",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",00)':{tag:'(0021,"PHILIPS MR/LAST",00)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",10)':{tag:'(0021,"PHILIPS MR/LAST",10)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",20)':{tag:'(0021,"PHILIPS MR/LAST",20)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",21)':{tag:'(0021,"PHILIPS MR/LAST",21)',vr:"DS",name:"SliceGap",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",22)':{tag:'(0021,"PHILIPS MR/LAST",22)',vr:"DS",name:"StackRadialAngle",vm:"1",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",00)':{tag:'(0027,"PHILIPS MR/LAST",00)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",11)':{tag:'(0027,"PHILIPS MR/LAST",11)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",12)':{tag:'(0027,"PHILIPS MR/LAST",12)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",13)':{tag:'(0027,"PHILIPS MR/LAST",13)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",14)':{tag:'(0027,"PHILIPS MR/LAST",14)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",15)':{tag:'(0027,"PHILIPS MR/LAST",15)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",16)':{tag:'(0027,"PHILIPS MR/LAST",16)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",10)':{tag:'(0029,"PHILIPS MR/LAST",10)',vr:"DS",name:"FPMin",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",20)':{tag:'(0029,"PHILIPS MR/LAST",20)',vr:"DS",name:"FPMax",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",30)':{tag:'(0029,"PHILIPS MR/LAST",30)',vr:"DS",name:"ScaledMinimum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",40)':{tag:'(0029,"PHILIPS MR/LAST",40)',vr:"DS",name:"ScaledMaximum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",50)':{tag:'(0029,"PHILIPS MR/LAST",50)',vr:"DS",name:"WindowMinimum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",60)':{tag:'(0029,"PHILIPS MR/LAST",60)',vr:"DS",name:"WindowMaximum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",61)':{tag:'(0029,"PHILIPS MR/LAST",61)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",70)':{tag:'(0029,"PHILIPS MR/LAST",70)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",71)':{tag:'(0029,"PHILIPS MR/LAST",71)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",72)':{tag:'(0029,"PHILIPS MR/LAST",72)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",80)':{tag:'(0029,"PHILIPS MR/LAST",80)',vr:"IS",name:"ViewCenter",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",81)':{tag:'(0029,"PHILIPS MR/LAST",81)',vr:"IS",name:"ViewSize",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",82)':{tag:'(0029,"PHILIPS MR/LAST",82)',vr:"IS",name:"ViewZoom",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",83)':{tag:'(0029,"PHILIPS MR/LAST",83)',vr:"IS",name:"ViewTransform",vm:"1",version:"PrivateTag"},'(6001,"PHILIPS MR/LAST",00)':{tag:'(6001,"PHILIPS MR/LAST",00)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1000)':{tag:'(0019,"PHILIPS MR/PART",1000)',vr:"DS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1005)':{tag:'(0019,"PHILIPS MR/PART",1005)',vr:"DS",name:"CCAngulation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1006)':{tag:'(0019,"PHILIPS MR/PART",1006)',vr:"DS",name:"APAngulation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1007)':{tag:'(0019,"PHILIPS MR/PART",1007)',vr:"DS",name:"LRAngulation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1008)':{tag:'(0019,"PHILIPS MR/PART",1008)',vr:"IS",name:"PatientPosition",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1009)':{tag:'(0019,"PHILIPS MR/PART",1009)',vr:"IS",name:"PatientOrientation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100a)':{tag:'(0019,"PHILIPS MR/PART",100a)',vr:"IS",name:"SliceOrientation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100b)':{tag:'(0019,"PHILIPS MR/PART",100b)',vr:"DS",name:"LROffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100c)':{tag:'(0019,"PHILIPS MR/PART",100c)',vr:"DS",name:"CCOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100d)':{tag:'(0019,"PHILIPS MR/PART",100d)',vr:"DS",name:"APOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100e)':{tag:'(0019,"PHILIPS MR/PART",100e)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100f)':{tag:'(0019,"PHILIPS MR/PART",100f)',vr:"IS",name:"NumberOfSlices",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1010)':{tag:'(0019,"PHILIPS MR/PART",1010)',vr:"DS",name:"SliceFactor",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1011)':{tag:'(0019,"PHILIPS MR/PART",1011)',vr:"DS",name:"EchoTimes",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1015)':{tag:'(0019,"PHILIPS MR/PART",1015)',vr:"IS",name:"DynamicStudy",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1018)':{tag:'(0019,"PHILIPS MR/PART",1018)',vr:"DS",name:"HeartbeatInterval",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1019)':{tag:'(0019,"PHILIPS MR/PART",1019)',vr:"DS",name:"RepetitionTimeFFE",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",101a)':{tag:'(0019,"PHILIPS MR/PART",101a)',vr:"DS",name:"FFEFlipAngle",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",101b)':{tag:'(0019,"PHILIPS MR/PART",101b)',vr:"IS",name:"NumberOfScans",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1021)':{tag:'(0019,"PHILIPS MR/PART",1021)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1022)':{tag:'(0019,"PHILIPS MR/PART",1022)',vr:"DS",name:"DynamicScanTimeBegin",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1024)':{tag:'(0019,"PHILIPS MR/PART",1024)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1064)':{tag:'(0019,"PHILIPS MR/PART",1064)',vr:"DS",name:"RepetitionTimeSE",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1065)':{tag:'(0019,"PHILIPS MR/PART",1065)',vr:"DS",name:"RepetitionTimeIR",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1069)':{tag:'(0019,"PHILIPS MR/PART",1069)',vr:"IS",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106a)':{tag:'(0019,"PHILIPS MR/PART",106a)',vr:"IS",name:"CardiacFrequency",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106b)':{tag:'(0019,"PHILIPS MR/PART",106b)',vr:"DS",name:"InversionDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106c)':{tag:'(0019,"PHILIPS MR/PART",106c)',vr:"DS",name:"GateDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106d)':{tag:'(0019,"PHILIPS MR/PART",106d)',vr:"DS",name:"GateWidth",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106e)':{tag:'(0019,"PHILIPS MR/PART",106e)',vr:"DS",name:"TriggerDelayTime",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1080)':{tag:'(0019,"PHILIPS MR/PART",1080)',vr:"IS",name:"NumberOfChemicalShifts",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1081)':{tag:'(0019,"PHILIPS MR/PART",1081)',vr:"DS",name:"ChemicalShift",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1084)':{tag:'(0019,"PHILIPS MR/PART",1084)',vr:"IS",name:"NumberOfRows",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1085)':{tag:'(0019,"PHILIPS MR/PART",1085)',vr:"IS",name:"NumberOfSamples",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1094)':{tag:'(0019,"PHILIPS MR/PART",1094)',vr:"LO",name:"MagnetizationTransferContrast",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1095)':{tag:'(0019,"PHILIPS MR/PART",1095)',vr:"LO",name:"SpectralPresaturationWithInversionRecovery",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1096)':{tag:'(0019,"PHILIPS MR/PART",1096)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1097)':{tag:'(0019,"PHILIPS MR/PART",1097)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a0)':{tag:'(0019,"PHILIPS MR/PART",10a0)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a1)':{tag:'(0019,"PHILIPS MR/PART",10a1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a3)':{tag:'(0019,"PHILIPS MR/PART",10a3)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a4)':{tag:'(0019,"PHILIPS MR/PART",10a4)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10c8)':{tag:'(0019,"PHILIPS MR/PART",10c8)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10c9)':{tag:'(0019,"PHILIPS MR/PART",10c9)',vr:"IS",name:"FoldoverDirectionTransverse",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10ca)':{tag:'(0019,"PHILIPS MR/PART",10ca)',vr:"IS",name:"FoldoverDirectionSagittal",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cb)':{tag:'(0019,"PHILIPS MR/PART",10cb)',vr:"IS",name:"FoldoverDirectionCoronal",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cc)':{tag:'(0019,"PHILIPS MR/PART",10cc)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cd)':{tag:'(0019,"PHILIPS MR/PART",10cd)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10ce)':{tag:'(0019,"PHILIPS MR/PART",10ce)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cf)':{tag:'(0019,"PHILIPS MR/PART",10cf)',vr:"IS",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d0)':{tag:'(0019,"PHILIPS MR/PART",10d0)',vr:"IS",name:"ScanResolution",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d2)':{tag:'(0019,"PHILIPS MR/PART",10d2)',vr:"LO",name:"WaterFatShift",vm:"2",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d4)':{tag:'(0019,"PHILIPS MR/PART",10d4)',vr:"IS",name:"ArtifactReduction",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d5)':{tag:'(0019,"PHILIPS MR/PART",10d5)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d6)':{tag:'(0019,"PHILIPS MR/PART",10d6)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d7)':{tag:'(0019,"PHILIPS MR/PART",10d7)',vr:"DS",name:"ScanPercentage",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d8)':{tag:'(0019,"PHILIPS MR/PART",10d8)',vr:"IS",name:"Halfscan",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d9)':{tag:'(0019,"PHILIPS MR/PART",10d9)',vr:"IS",name:"EPIFactor",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10da)':{tag:'(0019,"PHILIPS MR/PART",10da)',vr:"IS",name:"TurboFactor",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10db)':{tag:'(0019,"PHILIPS MR/PART",10db)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10e0)':{tag:'(0019,"PHILIPS MR/PART",10e0)',vr:"IS",name:"PercentageOfScanCompleted",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10e1)':{tag:'(0019,"PHILIPS MR/PART",10e1)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1100)':{tag:'(0019,"PHILIPS MR/PART",1100)',vr:"IS",name:"NumberOfStacks",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1101)':{tag:'(0019,"PHILIPS MR/PART",1101)',vr:"IS",name:"StackType",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1102)':{tag:'(0019,"PHILIPS MR/PART",1102)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",110b)':{tag:'(0019,"PHILIPS MR/PART",110b)',vr:"DS",name:"LROffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",110c)':{tag:'(0019,"PHILIPS MR/PART",110c)',vr:"DS",name:"CCOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",110d)':{tag:'(0019,"PHILIPS MR/PART",110d)',vr:"DS",name:"APOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1145)':{tag:'(0019,"PHILIPS MR/PART",1145)',vr:"IS",name:"ReconstructionResolution",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",11fc)':{tag:'(0019,"PHILIPS MR/PART",11fc)',vr:"IS",name:"ResonanceFrequency",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12c0)':{tag:'(0019,"PHILIPS MR/PART",12c0)',vr:"DS",name:"TriggerDelayTimes",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12e0)':{tag:'(0019,"PHILIPS MR/PART",12e0)',vr:"IS",name:"PrepulseType",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12e1)':{tag:'(0019,"PHILIPS MR/PART",12e1)',vr:"DS",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12e3)':{tag:'(0019,"PHILIPS MR/PART",12e3)',vr:"DS",name:"PhaseContrastVelocity",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1000)':{tag:'(0021,"PHILIPS MR/PART",1000)',vr:"IS",name:"ReconstructionNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1010)':{tag:'(0021,"PHILIPS MR/PART",1010)',vr:"IS",name:"ImageType",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1020)':{tag:'(0021,"PHILIPS MR/PART",1020)',vr:"IS",name:"SliceNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1030)':{tag:'(0021,"PHILIPS MR/PART",1030)',vr:"IS",name:"EchoNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1031)':{tag:'(0021,"PHILIPS MR/PART",1031)',vr:"DS",name:"PatientReferenceID",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1035)':{tag:'(0021,"PHILIPS MR/PART",1035)',vr:"IS",name:"ChemicalShiftNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1040)':{tag:'(0021,"PHILIPS MR/PART",1040)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1050)':{tag:'(0021,"PHILIPS MR/PART",1050)',vr:"IS",name:"DynamicScanNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1060)':{tag:'(0021,"PHILIPS MR/PART",1060)',vr:"IS",name:"NumberOfRowsInObject",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1061)':{tag:'(0021,"PHILIPS MR/PART",1061)',vr:"IS",name:"RowNumber",vm:"1-n",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1062)':{tag:'(0021,"PHILIPS MR/PART",1062)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1100)':{tag:'(0021,"PHILIPS MR/PART",1100)',vr:"DA",name:"ScanDate",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1110)':{tag:'(0021,"PHILIPS MR/PART",1110)',vr:"TM",name:"ScanTime",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1221)':{tag:'(0021,"PHILIPS MR/PART",1221)',vr:"IS",name:"SliceGap",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",00)':{tag:'(0029,"PHILIPS MR/PART",00)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",04)':{tag:'(0029,"PHILIPS MR/PART",04)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",10)':{tag:'(0029,"PHILIPS MR/PART",10)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",11)':{tag:'(0029,"PHILIPS MR/PART",11)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",20)':{tag:'(0029,"PHILIPS MR/PART",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",31)':{tag:'(0029,"PHILIPS MR/PART",31)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",32)':{tag:'(0029,"PHILIPS MR/PART",32)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",c3)':{tag:'(0029,"PHILIPS MR/PART",c3)',vr:"IS",name:"ScanResolution",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",c4)':{tag:'(0029,"PHILIPS MR/PART",c4)',vr:"IS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",d5)':{tag:'(0029,"PHILIPS MR/PART",d5)',vr:"LT",name:"SliceThickness",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS-MR-1",11)':{tag:'(0019,"PHILIPS-MR-1",11)',vr:"IS",name:"ChemicalShiftNumber",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS-MR-1",12)':{tag:'(0019,"PHILIPS-MR-1",12)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS-MR-1",01)':{tag:'(0021,"PHILIPS-MR-1",01)',vr:"IS",name:"ReconstructionNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS-MR-1",02)':{tag:'(0021,"PHILIPS-MR-1",02)',vr:"IS",name:"SliceNumber",vm:"1",version:"PrivateTag"},'(7001,"Picker NM Private Group",01)':{tag:'(7001,"Picker NM Private Group",01)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(7001,"Picker NM Private Group",02)':{tag:'(7001,"Picker NM Private Group",02)',vr:"OB",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",10)':{tag:'(0019,"SIEMENS CM VA0 ACQU",10)',vr:"LT",name:"ParameterFileName",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",11)':{tag:'(0019,"SIEMENS CM VA0 ACQU",11)',vr:"LO",name:"SequenceFileName",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",12)':{tag:'(0019,"SIEMENS CM VA0 ACQU",12)',vr:"LT",name:"SequenceFileOwner",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",13)':{tag:'(0019,"SIEMENS CM VA0 ACQU",13)',vr:"LT",name:"SequenceDescription",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",14)':{tag:'(0019,"SIEMENS CM VA0 ACQU",14)',vr:"LT",name:"EPIFileName",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",00)':{tag:'(0009,"SIEMENS CM VA0 CMS",00)',vr:"DS",name:"NumberOfMeasurements",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",10)':{tag:'(0009,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"StorageMode",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",12)':{tag:'(0009,"SIEMENS CM VA0 CMS",12)',vr:"UL",name:"EvaluationMaskImage",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",26)':{tag:'(0009,"SIEMENS CM VA0 CMS",26)',vr:"DA",name:"LastMoveDate",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",27)':{tag:'(0009,"SIEMENS CM VA0 CMS",27)',vr:"TM",name:"LastMoveTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",0a)':{tag:'(0011,"SIEMENS CM VA0 CMS",0a)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",10)':{tag:'(0011,"SIEMENS CM VA0 CMS",10)',vr:"DA",name:"RegistrationDate",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",11)':{tag:'(0011,"SIEMENS CM VA0 CMS",11)',vr:"TM",name:"RegistrationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",22)':{tag:'(0011,"SIEMENS CM VA0 CMS",22)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",23)':{tag:'(0011,"SIEMENS CM VA0 CMS",23)',vr:"DS",name:"UsedPatientWeight",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",40)':{tag:'(0011,"SIEMENS CM VA0 CMS",40)',vr:"IS",name:"OrganCode",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",00)':{tag:'(0013,"SIEMENS CM VA0 CMS",00)',vr:"LT",name:"ModifyingPhysician",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",10)':{tag:'(0013,"SIEMENS CM VA0 CMS",10)',vr:"DA",name:"ModificationDate",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",12)':{tag:'(0013,"SIEMENS CM VA0 CMS",12)',vr:"TM",name:"ModificationTime",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",20)':{tag:'(0013,"SIEMENS CM VA0 CMS",20)',vr:"LO",name:"PatientName",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",22)':{tag:'(0013,"SIEMENS CM VA0 CMS",22)',vr:"LO",name:"PatientId",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",30)':{tag:'(0013,"SIEMENS CM VA0 CMS",30)',vr:"DA",name:"PatientBirthdate",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",31)':{tag:'(0013,"SIEMENS CM VA0 CMS",31)',vr:"DS",name:"PatientWeight",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",32)':{tag:'(0013,"SIEMENS CM VA0 CMS",32)',vr:"LT",name:"PatientsMaidenName",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",33)':{tag:'(0013,"SIEMENS CM VA0 CMS",33)',vr:"LT",name:"ReferringPhysician",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",34)':{tag:'(0013,"SIEMENS CM VA0 CMS",34)',vr:"LT",name:"AdmittingDiagnosis",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",35)':{tag:'(0013,"SIEMENS CM VA0 CMS",35)',vr:"LO",name:"PatientSex",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",40)':{tag:'(0013,"SIEMENS CM VA0 CMS",40)',vr:"LO",name:"ProcedureDescription",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",42)':{tag:'(0013,"SIEMENS CM VA0 CMS",42)',vr:"LO",name:"RestDirection",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",44)':{tag:'(0013,"SIEMENS CM VA0 CMS",44)',vr:"LO",name:"PatientPosition",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",46)':{tag:'(0013,"SIEMENS CM VA0 CMS",46)',vr:"LT",name:"ViewDirection",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",50)':{tag:'(0013,"SIEMENS CM VA0 CMS",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",51)':{tag:'(0013,"SIEMENS CM VA0 CMS",51)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",52)':{tag:'(0013,"SIEMENS CM VA0 CMS",52)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",53)':{tag:'(0013,"SIEMENS CM VA0 CMS",53)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",54)':{tag:'(0013,"SIEMENS CM VA0 CMS",54)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",55)':{tag:'(0013,"SIEMENS CM VA0 CMS",55)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",56)':{tag:'(0013,"SIEMENS CM VA0 CMS",56)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",10)':{tag:'(0019,"SIEMENS CM VA0 CMS",10)',vr:"DS",name:"NetFrequency",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",20)':{tag:'(0019,"SIEMENS CM VA0 CMS",20)',vr:"LT",name:"MeasurementMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",30)':{tag:'(0019,"SIEMENS CM VA0 CMS",30)',vr:"LT",name:"CalculationMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",50)':{tag:'(0019,"SIEMENS CM VA0 CMS",50)',vr:"IS",name:"NoiseLevel",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",60)':{tag:'(0019,"SIEMENS CM VA0 CMS",60)',vr:"IS",name:"NumberOfDataBytes",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",20)':{tag:'(0021,"SIEMENS CM VA0 CMS",20)',vr:"DS",name:"FoV",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",22)':{tag:'(0021,"SIEMENS CM VA0 CMS",22)',vr:"DS",name:"ImageMagnificationFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",24)':{tag:'(0021,"SIEMENS CM VA0 CMS",24)',vr:"DS",name:"ImageScrollOffset",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",26)':{tag:'(0021,"SIEMENS CM VA0 CMS",26)',vr:"IS",name:"ImagePixelOffset",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",30)':{tag:'(0021,"SIEMENS CM VA0 CMS",30)',vr:"LT",name:"ViewDirection",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",32)':{tag:'(0021,"SIEMENS CM VA0 CMS",32)',vr:"CS",name:"PatientRestDirection",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",60)':{tag:'(0021,"SIEMENS CM VA0 CMS",60)',vr:"DS",name:"ImagePosition",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",61)':{tag:'(0021,"SIEMENS CM VA0 CMS",61)',vr:"DS",name:"ImageNormal",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",63)':{tag:'(0021,"SIEMENS CM VA0 CMS",63)',vr:"DS",name:"ImageDistance",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",65)':{tag:'(0021,"SIEMENS CM VA0 CMS",65)',vr:"US",name:"ImagePositioningHistoryMask",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",6a)':{tag:'(0021,"SIEMENS CM VA0 CMS",6a)',vr:"DS",name:"ImageRow",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",6b)':{tag:'(0021,"SIEMENS CM VA0 CMS",6b)',vr:"DS",name:"ImageColumn",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",70)':{tag:'(0021,"SIEMENS CM VA0 CMS",70)',vr:"LT",name:"PatientOrientationSet1",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",71)':{tag:'(0021,"SIEMENS CM VA0 CMS",71)',vr:"LT",name:"PatientOrientationSet2",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",80)':{tag:'(0021,"SIEMENS CM VA0 CMS",80)',vr:"LT",name:"StudyName",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",82)':{tag:'(0021,"SIEMENS CM VA0 CMS",82)',vr:"LT",name:"StudyType",vm:"3",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",10)':{tag:'(0029,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"WindowStyle",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",11)':{tag:'(0029,"SIEMENS CM VA0 CMS",11)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",13)':{tag:'(0029,"SIEMENS CM VA0 CMS",13)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",20)':{tag:'(0029,"SIEMENS CM VA0 CMS",20)',vr:"LT",name:"PixelQualityCode",vm:"3",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",22)':{tag:'(0029,"SIEMENS CM VA0 CMS",22)',vr:"IS",name:"PixelQualityValue",vm:"3",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",50)':{tag:'(0029,"SIEMENS CM VA0 CMS",50)',vr:"LT",name:"ArchiveCode",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",51)':{tag:'(0029,"SIEMENS CM VA0 CMS",51)',vr:"LT",name:"ExposureCode",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",52)':{tag:'(0029,"SIEMENS CM VA0 CMS",52)',vr:"LT",name:"SortCode",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",53)':{tag:'(0029,"SIEMENS CM VA0 CMS",53)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",60)':{tag:'(0029,"SIEMENS CM VA0 CMS",60)',vr:"LT",name:"Splash",vm:"1",version:"PrivateTag"},'(0051,"SIEMENS CM VA0 CMS",10)':{tag:'(0051,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"ImageText",vm:"1-n",version:"PrivateTag"},'(6021,"SIEMENS CM VA0 CMS",00)':{tag:'(6021,"SIEMENS CM VA0 CMS",00)',vr:"LT",name:"ImageGraphicsFormatCode",vm:"1",version:"PrivateTag"},'(6021,"SIEMENS CM VA0 CMS",10)':{tag:'(6021,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"ImageGraphics",vm:"1",version:"PrivateTag"},'(7fe1,"SIEMENS CM VA0 CMS",00)':{tag:'(7fe1,"SIEMENS CM VA0 CMS",00)',vr:"OB",name:"BinaryData",vm:"1-n",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",10)':{tag:'(0009,"SIEMENS CM VA0 LAB",10)',vr:"LT",name:"GeneratorIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",11)':{tag:'(0009,"SIEMENS CM VA0 LAB",11)',vr:"LT",name:"GantryIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",12)':{tag:'(0009,"SIEMENS CM VA0 LAB",12)',vr:"LT",name:"X-RayTubeIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",13)':{tag:'(0009,"SIEMENS CM VA0 LAB",13)',vr:"LT",name:"DetectorIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",14)':{tag:'(0009,"SIEMENS CM VA0 LAB",14)',vr:"LT",name:"DASIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",15)':{tag:'(0009,"SIEMENS CM VA0 LAB",15)',vr:"LT",name:"SMIIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",16)':{tag:'(0009,"SIEMENS CM VA0 LAB",16)',vr:"LT",name:"CPUIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",20)':{tag:'(0009,"SIEMENS CM VA0 LAB",20)',vr:"LT",name:"HeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",08)':{tag:'(0029,"SIEMENS CSA HEADER",08)',vr:"CS",name:"CSAImageHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",09)':{tag:'(0029,"SIEMENS CSA HEADER",09)',vr:"LO",name:"CSAImageHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",10)':{tag:'(0029,"SIEMENS CSA HEADER",10)',vr:"OB",name:"CSAImageHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",18)':{tag:'(0029,"SIEMENS CSA HEADER",18)',vr:"CS",name:"CSASeriesHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",19)':{tag:'(0029,"SIEMENS CSA HEADER",19)',vr:"LO",name:"CSASeriesHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",20)':{tag:'(0029,"SIEMENS CSA HEADER",20)',vr:"OB",name:"CSASeriesHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA NON-IMAGE",08)':{tag:'(0029,"SIEMENS CSA NON-IMAGE",08)',vr:"CS",name:"CSADataType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA NON-IMAGE",09)':{tag:'(0029,"SIEMENS CSA NON-IMAGE",09)',vr:"LO",name:"CSADataVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA NON-IMAGE",10)':{tag:'(0029,"SIEMENS CSA NON-IMAGE",10)',vr:"OB",name:"CSADataInfo",vm:"1",version:"PrivateTag"},'(7FE1,"SIEMENS CSA NON-IMAGE",10)':{tag:'(7FE1,"SIEMENS CSA NON-IMAGE",10)',vr:"OB",name:"CSAData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",10)':{tag:'(0019,"SIEMENS CT VA0 COAD",10)',vr:"DS",name:"DistanceSourceToSourceSideCollimator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",11)':{tag:'(0019,"SIEMENS CT VA0 COAD",11)',vr:"DS",name:"DistanceSourceToDetectorSideCollimator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",20)':{tag:'(0019,"SIEMENS CT VA0 COAD",20)',vr:"IS",name:"NumberOfPossibleChannels",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",21)':{tag:'(0019,"SIEMENS CT VA0 COAD",21)',vr:"IS",name:"MeanChannelNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",22)':{tag:'(0019,"SIEMENS CT VA0 COAD",22)',vr:"DS",name:"DetectorSpacing",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",23)':{tag:'(0019,"SIEMENS CT VA0 COAD",23)',vr:"DS",name:"DetectorCenter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",24)':{tag:'(0019,"SIEMENS CT VA0 COAD",24)',vr:"DS",name:"ReadingIntegrationTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",50)':{tag:'(0019,"SIEMENS CT VA0 COAD",50)',vr:"DS",name:"DetectorAlignment",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",52)':{tag:'(0019,"SIEMENS CT VA0 COAD",52)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",54)':{tag:'(0019,"SIEMENS CT VA0 COAD",54)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",60)':{tag:'(0019,"SIEMENS CT VA0 COAD",60)',vr:"DS",name:"FocusAlignment",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",65)':{tag:'(0019,"SIEMENS CT VA0 COAD",65)',vr:"UL",name:"FocalSpotDeflectionAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",66)':{tag:'(0019,"SIEMENS CT VA0 COAD",66)',vr:"UL",name:"FocalSpotDeflectionPhase",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",67)':{tag:'(0019,"SIEMENS CT VA0 COAD",67)',vr:"UL",name:"FocalSpotDeflectionOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",70)':{tag:'(0019,"SIEMENS CT VA0 COAD",70)',vr:"DS",name:"WaterScalingFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",71)':{tag:'(0019,"SIEMENS CT VA0 COAD",71)',vr:"DS",name:"InterpolationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",80)':{tag:'(0019,"SIEMENS CT VA0 COAD",80)',vr:"LT",name:"PatientRegion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",82)':{tag:'(0019,"SIEMENS CT VA0 COAD",82)',vr:"LT",name:"PatientPhaseOfLife",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",90)':{tag:'(0019,"SIEMENS CT VA0 COAD",90)',vr:"DS",name:"OsteoOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",92)':{tag:'(0019,"SIEMENS CT VA0 COAD",92)',vr:"DS",name:"OsteoRegressionLineSlope",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",93)':{tag:'(0019,"SIEMENS CT VA0 COAD",93)',vr:"DS",name:"OsteoRegressionLineIntercept",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",94)':{tag:'(0019,"SIEMENS CT VA0 COAD",94)',vr:"DS",name:"OsteoStandardizationCode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",96)':{tag:'(0019,"SIEMENS CT VA0 COAD",96)',vr:"IS",name:"OsteoPhantomNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A3)':{tag:'(0019,"SIEMENS CT VA0 COAD",A3)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A4)':{tag:'(0019,"SIEMENS CT VA0 COAD",A4)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A5)':{tag:'(0019,"SIEMENS CT VA0 COAD",A5)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A6)':{tag:'(0019,"SIEMENS CT VA0 COAD",A6)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A7)':{tag:'(0019,"SIEMENS CT VA0 COAD",A7)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A8)':{tag:'(0019,"SIEMENS CT VA0 COAD",A8)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A9)':{tag:'(0019,"SIEMENS CT VA0 COAD",A9)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AA)':{tag:'(0019,"SIEMENS CT VA0 COAD",AA)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AB)':{tag:'(0019,"SIEMENS CT VA0 COAD",AB)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AC)':{tag:'(0019,"SIEMENS CT VA0 COAD",AC)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AD)':{tag:'(0019,"SIEMENS CT VA0 COAD",AD)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AE)':{tag:'(0019,"SIEMENS CT VA0 COAD",AE)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AF)':{tag:'(0019,"SIEMENS CT VA0 COAD",AF)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",B0)':{tag:'(0019,"SIEMENS CT VA0 COAD",B0)',vr:"DS",name:"FeedPerRotation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",BD)':{tag:'(0019,"SIEMENS CT VA0 COAD",BD)',vr:"IS",name:"PulmoTriggerLevel",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",BE)':{tag:'(0019,"SIEMENS CT VA0 COAD",BE)',vr:"DS",name:"ExpiratoricReserveVolume",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",BF)':{tag:'(0019,"SIEMENS CT VA0 COAD",BF)',vr:"DS",name:"VitalCapacity",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C0)':{tag:'(0019,"SIEMENS CT VA0 COAD",C0)',vr:"DS",name:"PulmoWater",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C1)':{tag:'(0019,"SIEMENS CT VA0 COAD",C1)',vr:"DS",name:"PulmoAir",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C2)':{tag:'(0019,"SIEMENS CT VA0 COAD",C2)',vr:"DA",name:"PulmoDate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C3)':{tag:'(0019,"SIEMENS CT VA0 COAD",C3)',vr:"TM",name:"PulmoTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",10)':{tag:'(0019,"SIEMENS CT VA0 GEN",10)',vr:"DS",name:"SourceSideCollimatorAperture",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",11)':{tag:'(0019,"SIEMENS CT VA0 GEN",11)',vr:"DS",name:"DetectorSideCollimatorAperture",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",20)':{tag:'(0019,"SIEMENS CT VA0 GEN",20)',vr:"DS",name:"ExposureTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",21)':{tag:'(0019,"SIEMENS CT VA0 GEN",21)',vr:"DS",name:"ExposureCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",25)':{tag:'(0019,"SIEMENS CT VA0 GEN",25)',vr:"DS",name:"KVPGeneratorPowerCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",26)':{tag:'(0019,"SIEMENS CT VA0 GEN",26)',vr:"DS",name:"GeneratorVoltage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",40)':{tag:'(0019,"SIEMENS CT VA0 GEN",40)',vr:"UL",name:"MasterControlMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",42)':{tag:'(0019,"SIEMENS CT VA0 GEN",42)',vr:"US",name:"ProcessingMask",vm:"5",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",44)':{tag:'(0019,"SIEMENS CT VA0 GEN",44)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",45)':{tag:'(0019,"SIEMENS CT VA0 GEN",45)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",62)':{tag:'(0019,"SIEMENS CT VA0 GEN",62)',vr:"IS",name:"NumberOfVirtuellChannels",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",70)':{tag:'(0019,"SIEMENS CT VA0 GEN",70)',vr:"IS",name:"NumberOfReadings",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",71)':{tag:'(0019,"SIEMENS CT VA0 GEN",71)',vr:"LT",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",74)':{tag:'(0019,"SIEMENS CT VA0 GEN",74)',vr:"IS",name:"NumberOfProjections",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",75)':{tag:'(0019,"SIEMENS CT VA0 GEN",75)',vr:"IS",name:"NumberOfBytes",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",80)':{tag:'(0019,"SIEMENS CT VA0 GEN",80)',vr:"LT",name:"ReconstructionAlgorithmSet",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",81)':{tag:'(0019,"SIEMENS CT VA0 GEN",81)',vr:"LT",name:"ReconstructionAlgorithmIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",82)':{tag:'(0019,"SIEMENS CT VA0 GEN",82)',vr:"LT",name:"RegenerationSoftwareVersion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",88)':{tag:'(0019,"SIEMENS CT VA0 GEN",88)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",10)':{tag:'(0021,"SIEMENS CT VA0 GEN",10)',vr:"IS",name:"RotationAngle",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",11)':{tag:'(0021,"SIEMENS CT VA0 GEN",11)',vr:"IS",name:"StartAngle",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",20)':{tag:'(0021,"SIEMENS CT VA0 GEN",20)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",30)':{tag:'(0021,"SIEMENS CT VA0 GEN",30)',vr:"IS",name:"TopogramTubePosition",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",32)':{tag:'(0021,"SIEMENS CT VA0 GEN",32)',vr:"DS",name:"LengthOfTopogram",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",34)':{tag:'(0021,"SIEMENS CT VA0 GEN",34)',vr:"DS",name:"TopogramCorrectionFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",36)':{tag:'(0021,"SIEMENS CT VA0 GEN",36)',vr:"DS",name:"MaximumTablePosition",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",40)':{tag:'(0021,"SIEMENS CT VA0 GEN",40)',vr:"IS",name:"TableMoveDirectionCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",45)':{tag:'(0021,"SIEMENS CT VA0 GEN",45)',vr:"IS",name:"VOIStartRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",46)':{tag:'(0021,"SIEMENS CT VA0 GEN",46)',vr:"IS",name:"VOIStopRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",47)':{tag:'(0021,"SIEMENS CT VA0 GEN",47)',vr:"IS",name:"VOIStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",48)':{tag:'(0021,"SIEMENS CT VA0 GEN",48)',vr:"IS",name:"VOIStopColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",49)':{tag:'(0021,"SIEMENS CT VA0 GEN",49)',vr:"IS",name:"VOIStartSlice",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",4a)':{tag:'(0021,"SIEMENS CT VA0 GEN",4a)',vr:"IS",name:"VOIStopSlice",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",50)':{tag:'(0021,"SIEMENS CT VA0 GEN",50)',vr:"IS",name:"VectorStartRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",51)':{tag:'(0021,"SIEMENS CT VA0 GEN",51)',vr:"IS",name:"VectorRowStep",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",52)':{tag:'(0021,"SIEMENS CT VA0 GEN",52)',vr:"IS",name:"VectorStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",53)':{tag:'(0021,"SIEMENS CT VA0 GEN",53)',vr:"IS",name:"VectorColumnStep",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",60)':{tag:'(0021,"SIEMENS CT VA0 GEN",60)',vr:"IS",name:"RangeTypeCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",62)':{tag:'(0021,"SIEMENS CT VA0 GEN",62)',vr:"IS",name:"ReferenceTypeCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",70)':{tag:'(0021,"SIEMENS CT VA0 GEN",70)',vr:"DS",name:"ObjectOrientation",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",72)':{tag:'(0021,"SIEMENS CT VA0 GEN",72)',vr:"DS",name:"LightOrientation",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",75)':{tag:'(0021,"SIEMENS CT VA0 GEN",75)',vr:"DS",name:"LightBrightness",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",76)':{tag:'(0021,"SIEMENS CT VA0 GEN",76)',vr:"DS",name:"LightContrast",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",7a)':{tag:'(0021,"SIEMENS CT VA0 GEN",7a)',vr:"IS",name:"OverlayThreshold",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",7b)':{tag:'(0021,"SIEMENS CT VA0 GEN",7b)',vr:"IS",name:"SurfaceThreshold",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",7c)':{tag:'(0021,"SIEMENS CT VA0 GEN",7c)',vr:"IS",name:"GreyScaleThreshold",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",a0)':{tag:'(0021,"SIEMENS CT VA0 GEN",a0)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",a2)':{tag:'(0021,"SIEMENS CT VA0 GEN",a2)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",a7)':{tag:'(0021,"SIEMENS CT VA0 GEN",a7)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",10)':{tag:'(0009,"SIEMENS CT VA0 IDE",10)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",30)':{tag:'(0009,"SIEMENS CT VA0 IDE",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",31)':{tag:'(0009,"SIEMENS CT VA0 IDE",31)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",32)':{tag:'(0009,"SIEMENS CT VA0 IDE",32)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",34)':{tag:'(0009,"SIEMENS CT VA0 IDE",34)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",40)':{tag:'(0009,"SIEMENS CT VA0 IDE",40)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",42)':{tag:'(0009,"SIEMENS CT VA0 IDE",42)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",50)':{tag:'(0009,"SIEMENS CT VA0 IDE",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",51)':{tag:'(0009,"SIEMENS CT VA0 IDE",51)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 ORI",20)':{tag:'(0009,"SIEMENS CT VA0 ORI",20)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 ORI",30)':{tag:'(0009,"SIEMENS CT VA0 ORI",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(6021,"SIEMENS CT VA0 OST",00)':{tag:'(6021,"SIEMENS CT VA0 OST",00)',vr:"LT",name:"OsteoContourComment",vm:"1",version:"PrivateTag"},'(6021,"SIEMENS CT VA0 OST",10)':{tag:'(6021,"SIEMENS CT VA0 OST",10)',vr:"US",name:"OsteoContourBuffer",vm:"256",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",10)':{tag:'(0021,"SIEMENS CT VA0 RAW",10)',vr:"UL",name:"CreationMask",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",20)':{tag:'(0021,"SIEMENS CT VA0 RAW",20)',vr:"UL",name:"EvaluationMask",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",30)':{tag:'(0021,"SIEMENS CT VA0 RAW",30)',vr:"US",name:"ExtendedProcessingMask",vm:"7",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",40)':{tag:'(0021,"SIEMENS CT VA0 RAW",40)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",41)':{tag:'(0021,"SIEMENS CT VA0 RAW",41)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",42)':{tag:'(0021,"SIEMENS CT VA0 RAW",42)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",43)':{tag:'(0021,"SIEMENS CT VA0 RAW",43)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",44)':{tag:'(0021,"SIEMENS CT VA0 RAW",44)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",50)':{tag:'(0021,"SIEMENS CT VA0 RAW",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS DICOM",10)':{tag:'(0009,"SIEMENS DICOM",10)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS DICOM",12)':{tag:'(0009,"SIEMENS DICOM",12)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",10)':{tag:'(0019,"SIEMENS DLR.01",10)',vr:"LT",name:"MeasurementMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",11)':{tag:'(0019,"SIEMENS DLR.01",11)',vr:"LT",name:"ImageType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",15)':{tag:'(0019,"SIEMENS DLR.01",15)',vr:"LT",name:"SoftwareVersion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",20)':{tag:'(0019,"SIEMENS DLR.01",20)',vr:"LT",name:"MPMCode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",21)':{tag:'(0019,"SIEMENS DLR.01",21)',vr:"LT",name:"Latitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",22)':{tag:'(0019,"SIEMENS DLR.01",22)',vr:"LT",name:"Sensitivity",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",23)':{tag:'(0019,"SIEMENS DLR.01",23)',vr:"LT",name:"EDR",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",24)':{tag:'(0019,"SIEMENS DLR.01",24)',vr:"LT",name:"LFix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",25)':{tag:'(0019,"SIEMENS DLR.01",25)',vr:"LT",name:"SFix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",26)':{tag:'(0019,"SIEMENS DLR.01",26)',vr:"LT",name:"PresetMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",27)':{tag:'(0019,"SIEMENS DLR.01",27)',vr:"LT",name:"Region",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",28)':{tag:'(0019,"SIEMENS DLR.01",28)',vr:"LT",name:"Subregion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",30)':{tag:'(0019,"SIEMENS DLR.01",30)',vr:"LT",name:"Orientation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",31)':{tag:'(0019,"SIEMENS DLR.01",31)',vr:"LT",name:"MarkOnFilm",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",32)':{tag:'(0019,"SIEMENS DLR.01",32)',vr:"LT",name:"RotationOnDRC",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",40)':{tag:'(0019,"SIEMENS DLR.01",40)',vr:"LT",name:"ReaderType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",41)':{tag:'(0019,"SIEMENS DLR.01",41)',vr:"LT",name:"SubModality",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",42)':{tag:'(0019,"SIEMENS DLR.01",42)',vr:"LT",name:"ReaderSerialNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",50)':{tag:'(0019,"SIEMENS DLR.01",50)',vr:"LT",name:"CassetteScale",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",51)':{tag:'(0019,"SIEMENS DLR.01",51)',vr:"LT",name:"CassetteMatrix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",52)':{tag:'(0019,"SIEMENS DLR.01",52)',vr:"LT",name:"CassetteSubmatrix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",53)':{tag:'(0019,"SIEMENS DLR.01",53)',vr:"LT",name:"Barcode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",60)':{tag:'(0019,"SIEMENS DLR.01",60)',vr:"LT",name:"ContrastType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",61)':{tag:'(0019,"SIEMENS DLR.01",61)',vr:"LT",name:"RotationAmount",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",62)':{tag:'(0019,"SIEMENS DLR.01",62)',vr:"LT",name:"RotationCenter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",63)':{tag:'(0019,"SIEMENS DLR.01",63)',vr:"LT",name:"DensityShift",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",64)':{tag:'(0019,"SIEMENS DLR.01",64)',vr:"US",name:"FrequencyRank",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",65)':{tag:'(0019,"SIEMENS DLR.01",65)',vr:"LT",name:"FrequencyEnhancement",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",66)':{tag:'(0019,"SIEMENS DLR.01",66)',vr:"LT",name:"FrequencyType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",67)':{tag:'(0019,"SIEMENS DLR.01",67)',vr:"LT",name:"KernelLength",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",68)':{tag:'(0019,"SIEMENS DLR.01",68)',vr:"UL",name:"KernelMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",69)':{tag:'(0019,"SIEMENS DLR.01",69)',vr:"UL",name:"ConvolutionMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",70)':{tag:'(0019,"SIEMENS DLR.01",70)',vr:"LT",name:"PLASource",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",71)':{tag:'(0019,"SIEMENS DLR.01",71)',vr:"LT",name:"PLADestination",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",75)':{tag:'(0019,"SIEMENS DLR.01",75)',vr:"LT",name:"UIDOriginalImage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",76)':{tag:'(0019,"SIEMENS DLR.01",76)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",80)':{tag:'(0019,"SIEMENS DLR.01",80)',vr:"LT",name:"ReaderHeader",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",90)':{tag:'(0019,"SIEMENS DLR.01",90)',vr:"LT",name:"PLAOfSecondaryDestination",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",a0)':{tag:'(0019,"SIEMENS DLR.01",a0)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",a1)':{tag:'(0019,"SIEMENS DLR.01",a1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",10)':{tag:'(0041,"SIEMENS DLR.01",10)',vr:"US",name:"NumberOfHardcopies",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",20)':{tag:'(0041,"SIEMENS DLR.01",20)',vr:"LT",name:"FilmFormat",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",30)':{tag:'(0041,"SIEMENS DLR.01",30)',vr:"LT",name:"FilmSize",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",31)':{tag:'(0041,"SIEMENS DLR.01",31)',vr:"LT",name:"FullFilmFormat",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",08)':{tag:'(0003,"SIEMENS ISI",08)',vr:"US",name:"ISICommandField",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",11)':{tag:'(0003,"SIEMENS ISI",11)',vr:"US",name:"AttachIDApplicationCode",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",12)':{tag:'(0003,"SIEMENS ISI",12)',vr:"UL",name:"AttachIDMessageCount",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",13)':{tag:'(0003,"SIEMENS ISI",13)',vr:"DA",name:"AttachIDDate",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",14)':{tag:'(0003,"SIEMENS ISI",14)',vr:"TM",name:"AttachIDTime",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",20)':{tag:'(0003,"SIEMENS ISI",20)',vr:"US",name:"MessageType",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",30)':{tag:'(0003,"SIEMENS ISI",30)',vr:"DA",name:"MaxWaitingDate",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",31)':{tag:'(0003,"SIEMENS ISI",31)',vr:"TM",name:"MaxWaitingTime",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS ISI",01)':{tag:'(0009,"SIEMENS ISI",01)',vr:"UN",name:"RISPatientInfoIMGEF",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",03)':{tag:'(0011,"SIEMENS ISI",03)',vr:"LT",name:"PatientUID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",04)':{tag:'(0011,"SIEMENS ISI",04)',vr:"LT",name:"PatientID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",0a)':{tag:'(0011,"SIEMENS ISI",0a)',vr:"LT",name:"CaseID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",22)':{tag:'(0011,"SIEMENS ISI",22)',vr:"LT",name:"RequestID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",23)':{tag:'(0011,"SIEMENS ISI",23)',vr:"LT",name:"ExaminationUID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",a1)':{tag:'(0011,"SIEMENS ISI",a1)',vr:"DA",name:"PatientRegistrationDate",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",a2)':{tag:'(0011,"SIEMENS ISI",a2)',vr:"TM",name:"PatientRegistrationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",b0)':{tag:'(0011,"SIEMENS ISI",b0)',vr:"LT",name:"PatientLastName",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",b2)':{tag:'(0011,"SIEMENS ISI",b2)',vr:"LT",name:"PatientFirstName",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",b4)':{tag:'(0011,"SIEMENS ISI",b4)',vr:"LT",name:"PatientHospitalStatus",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",bc)':{tag:'(0011,"SIEMENS ISI",bc)',vr:"TM",name:"CurrentLocationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",c0)':{tag:'(0011,"SIEMENS ISI",c0)',vr:"LT",name:"PatientInsuranceStatus",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",d0)':{tag:'(0011,"SIEMENS ISI",d0)',vr:"LT",name:"PatientBillingType",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",d2)':{tag:'(0011,"SIEMENS ISI",d2)',vr:"LT",name:"PatientBillingAddress",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",12)':{tag:'(0031,"SIEMENS ISI",12)',vr:"LT",name:"ExaminationReason",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",30)':{tag:'(0031,"SIEMENS ISI",30)',vr:"DA",name:"RequestedDate",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",32)':{tag:'(0031,"SIEMENS ISI",32)',vr:"TM",name:"WorklistRequestStartTime",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",33)':{tag:'(0031,"SIEMENS ISI",33)',vr:"TM",name:"WorklistRequestEndTime",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",4a)':{tag:'(0031,"SIEMENS ISI",4a)',vr:"TM",name:"RequestedTime",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",80)':{tag:'(0031,"SIEMENS ISI",80)',vr:"LT",name:"RequestedLocation",vm:"1",version:"PrivateTag"},'(0055,"SIEMENS ISI",46)':{tag:'(0055,"SIEMENS ISI",46)',vr:"LT",name:"CurrentWard",vm:"1",version:"PrivateTag"},'(0193,"SIEMENS ISI",02)':{tag:'(0193,"SIEMENS ISI",02)',vr:"DS",name:"RISKey",vm:"1",version:"PrivateTag"},'(0307,"SIEMENS ISI",01)':{tag:'(0307,"SIEMENS ISI",01)',vr:"UN",name:"RISWorklistIMGEF",vm:"1",version:"PrivateTag"},'(0309,"SIEMENS ISI",01)':{tag:'(0309,"SIEMENS ISI",01)',vr:"UN",name:"RISReportIMGEF",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",01)':{tag:'(4009,"SIEMENS ISI",01)',vr:"LT",name:"ReportID",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",20)':{tag:'(4009,"SIEMENS ISI",20)',vr:"LT",name:"ReportStatus",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",30)':{tag:'(4009,"SIEMENS ISI",30)',vr:"DA",name:"ReportCreationDate",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",70)':{tag:'(4009,"SIEMENS ISI",70)',vr:"LT",name:"ReportApprovingPhysician",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",e0)':{tag:'(4009,"SIEMENS ISI",e0)',vr:"LT",name:"ReportText",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",e1)':{tag:'(4009,"SIEMENS ISI",e1)',vr:"LT",name:"ReportAuthor",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",e3)':{tag:'(4009,"SIEMENS ISI",e3)',vr:"LT",name:"ReportingRadiologist",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",04)':{tag:'(0029,"SIEMENS MED DISPLAY",04)',vr:"LT",name:"PhotometricInterpretation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",10)':{tag:'(0029,"SIEMENS MED DISPLAY",10)',vr:"US",name:"RowsOfSubmatrix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",11)':{tag:'(0029,"SIEMENS MED DISPLAY",11)',vr:"US",name:"ColumnsOfSubmatrix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",20)':{tag:'(0029,"SIEMENS MED DISPLAY",20)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",21)':{tag:'(0029,"SIEMENS MED DISPLAY",21)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",50)':{tag:'(0029,"SIEMENS MED DISPLAY",50)',vr:"US",name:"OriginOfSubmatrix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",99)':{tag:'(0029,"SIEMENS MED DISPLAY",99)',vr:"LT",name:"ShutterType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",a0)':{tag:'(0029,"SIEMENS MED DISPLAY",a0)',vr:"US",name:"RowsOfRectangularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",a1)':{tag:'(0029,"SIEMENS MED DISPLAY",a1)',vr:"US",name:"ColumnsOfRectangularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",a2)':{tag:'(0029,"SIEMENS MED DISPLAY",a2)',vr:"US",name:"OriginOfRectangularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",b0)':{tag:'(0029,"SIEMENS MED DISPLAY",b0)',vr:"US",name:"RadiusOfCircularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",b2)':{tag:'(0029,"SIEMENS MED DISPLAY",b2)',vr:"US",name:"OriginOfCircularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",c1)':{tag:'(0029,"SIEMENS MED DISPLAY",c1)',vr:"US",name:"ContourOfIrregularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",10)':{tag:'(0029,"SIEMENS MED HG",10)',vr:"US",name:"ListOfGroupNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",15)':{tag:'(0029,"SIEMENS MED HG",15)',vr:"LT",name:"ListOfShadowOwnerCodes",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",20)':{tag:'(0029,"SIEMENS MED HG",20)',vr:"US",name:"ListOfElementNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",30)':{tag:'(0029,"SIEMENS MED HG",30)',vr:"US",name:"ListOfTotalDisplayLength",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",40)':{tag:'(0029,"SIEMENS MED HG",40)',vr:"LT",name:"ListOfDisplayPrefix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",50)':{tag:'(0029,"SIEMENS MED HG",50)',vr:"LT",name:"ListOfDisplayPostfix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",60)':{tag:'(0029,"SIEMENS MED HG",60)',vr:"US",name:"ListOfTextPosition",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",70)':{tag:'(0029,"SIEMENS MED HG",70)',vr:"LT",name:"ListOfTextConcatenation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",10)':{tag:'(0029,"SIEMENS MED MG",10)',vr:"US",name:"ListOfGroupNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",15)':{tag:'(0029,"SIEMENS MED MG",15)',vr:"LT",name:"ListOfShadowOwnerCodes",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",20)':{tag:'(0029,"SIEMENS MED MG",20)',vr:"US",name:"ListOfElementNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",30)':{tag:'(0029,"SIEMENS MED MG",30)',vr:"US",name:"ListOfTotalDisplayLength",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",40)':{tag:'(0029,"SIEMENS MED MG",40)',vr:"LT",name:"ListOfDisplayPrefix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",50)':{tag:'(0029,"SIEMENS MED MG",50)',vr:"LT",name:"ListOfDisplayPostfix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",60)':{tag:'(0029,"SIEMENS MED MG",60)',vr:"US",name:"ListOfTextPosition",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",70)':{tag:'(0029,"SIEMENS MED MG",70)',vr:"LT",name:"ListOfTextConcatenation",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",10)':{tag:'(0009,"SIEMENS MED",10)',vr:"LO",name:"RecognitionCode",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",30)':{tag:'(0009,"SIEMENS MED",30)',vr:"UL",name:"ByteOffsetOfOriginalHeader",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",31)':{tag:'(0009,"SIEMENS MED",31)',vr:"UL",name:"LengthOfOriginalHeader",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",40)':{tag:'(0009,"SIEMENS MED",40)',vr:"UL",name:"ByteOffsetOfPixelmatrix",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",41)':{tag:'(0009,"SIEMENS MED",41)',vr:"UL",name:"LengthOfPixelmatrixInBytes",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",50)':{tag:'(0009,"SIEMENS MED",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",51)':{tag:'(0009,"SIEMENS MED",51)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",f5)':{tag:'(0009,"SIEMENS MED",f5)',vr:"LT",name:"PDMEFIDPlaceholder",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",f6)':{tag:'(0009,"SIEMENS MED",f6)',vr:"LT",name:"PDMDataObjectTypeExtension",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MED",10)':{tag:'(0021,"SIEMENS MED",10)',vr:"DS",name:"Zoom",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MED",11)':{tag:'(0021,"SIEMENS MED",11)',vr:"DS",name:"Target",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS MED",12)':{tag:'(0021,"SIEMENS MED",12)',vr:"IS",name:"TubeAngle",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MED",20)':{tag:'(0021,"SIEMENS MED",20)',vr:"US",name:"ROIMask",vm:"1",version:"PrivateTag"},'(7001,"SIEMENS MED",10)':{tag:'(7001,"SIEMENS MED",10)',vr:"LT",name:"Dummy",vm:"1",version:"PrivateTag"},'(7003,"SIEMENS MED",10)':{tag:'(7003,"SIEMENS MED",10)',vr:"LT",name:"Header",vm:"1",version:"PrivateTag"},'(7005,"SIEMENS MED",10)':{tag:'(7005,"SIEMENS MED",10)',vr:"LT",name:"Dummy",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",08)':{tag:'(0029,"SIEMENS MEDCOM HEADER",08)',vr:"CS",name:"MedComHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",09)':{tag:'(0029,"SIEMENS MEDCOM HEADER",09)',vr:"LO",name:"MedComHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",10)':{tag:'(0029,"SIEMENS MEDCOM HEADER",10)',vr:"OB",name:"MedComHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",20)':{tag:'(0029,"SIEMENS MEDCOM HEADER",20)',vr:"OB",name:"MedComHistoryInformation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",31)':{tag:'(0029,"SIEMENS MEDCOM HEADER",31)',vr:"LO",name:"PMTFInformation1",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",32)':{tag:'(0029,"SIEMENS MEDCOM HEADER",32)',vr:"UL",name:"PMTFInformation2",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",33)':{tag:'(0029,"SIEMENS MEDCOM HEADER",33)',vr:"UL",name:"PMTFInformation3",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",34)':{tag:'(0029,"SIEMENS MEDCOM HEADER",34)',vr:"CS",name:"PMTFInformation4",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",35)':{tag:'(0029,"SIEMENS MEDCOM HEADER",35)',vr:"UL",name:"PMTFInformation5",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",40)':{tag:'(0029,"SIEMENS MEDCOM HEADER",40)',vr:"SQ",name:"ApplicationHeaderSequence",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",41)':{tag:'(0029,"SIEMENS MEDCOM HEADER",41)',vr:"CS",name:"ApplicationHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",42)':{tag:'(0029,"SIEMENS MEDCOM HEADER",42)',vr:"LO",name:"ApplicationHeaderID",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",43)':{tag:'(0029,"SIEMENS MEDCOM HEADER",43)',vr:"LO",name:"ApplicationHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",44)':{tag:'(0029,"SIEMENS MEDCOM HEADER",44)',vr:"OB",name:"ApplicationHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",50)':{tag:'(0029,"SIEMENS MEDCOM HEADER",50)',vr:"LO",name:"WorkflowControlFlags",vm:"8",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",51)':{tag:'(0029,"SIEMENS MEDCOM HEADER",51)',vr:"CS",name:"ArchiveManagementFlagKeepOnline",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",52)':{tag:'(0029,"SIEMENS MEDCOM HEADER",52)',vr:"CS",name:"ArchiveManagementFlagDoNotArchive",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",53)':{tag:'(0029,"SIEMENS MEDCOM HEADER",53)',vr:"CS",name:"ImageLocationStatus",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",54)':{tag:'(0029,"SIEMENS MEDCOM HEADER",54)',vr:"DS",name:"EstimatedRetrieveTime",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",55)':{tag:'(0029,"SIEMENS MEDCOM HEADER",55)',vr:"DS",name:"DataSizeOfRetrievedImages",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",70)':{tag:'(0029,"SIEMENS MEDCOM HEADER",70)',vr:"SQ",name:"SiemensLinkSequence",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",71)':{tag:'(0029,"SIEMENS MEDCOM HEADER",71)',vr:"AT",name:"ReferencedTag",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",72)':{tag:'(0029,"SIEMENS MEDCOM HEADER",72)',vr:"CS",name:"ReferencedTagType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",73)':{tag:'(0029,"SIEMENS MEDCOM HEADER",73)',vr:"UL",name:"ReferencedValueLength",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",74)':{tag:'(0029,"SIEMENS MEDCOM HEADER",74)',vr:"CS",name:"ReferencedObjectDeviceType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",75)':{tag:'(0029,"SIEMENS MEDCOM HEADER",75)',vr:"OB",name:"ReferencedObjectDeviceLocation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",76)':{tag:'(0029,"SIEMENS MEDCOM HEADER",76)',vr:"OB",name:"ReferencedObjectDeviceID",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER2",60)':{tag:'(0029,"SIEMENS MEDCOM HEADER2",60)',vr:"LO",name:"SeriesWorkflowStatus",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM OOG",08)':{tag:'(0029,"SIEMENS MEDCOM OOG",08)',vr:"CS",name:"MEDCOMOOGType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM OOG",09)':{tag:'(0029,"SIEMENS MEDCOM OOG",09)',vr:"LO",name:"MEDCOMOOGVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM OOG",10)':{tag:'(0029,"SIEMENS MEDCOM OOG",10)',vr:"OB",name:"MEDCOMOOGInfo",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",12)':{tag:'(0019,"SIEMENS MR VA0 COAD",12)',vr:"DS",name:"MagneticFieldStrength",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",14)':{tag:'(0019,"SIEMENS MR VA0 COAD",14)',vr:"DS",name:"ADCVoltage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",16)':{tag:'(0019,"SIEMENS MR VA0 COAD",16)',vr:"DS",name:"ADCOffset",vm:"2",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",20)':{tag:'(0019,"SIEMENS MR VA0 COAD",20)',vr:"DS",name:"TransmitterAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",21)':{tag:'(0019,"SIEMENS MR VA0 COAD",21)',vr:"IS",name:"NumberOfTransmitterAmplitudes",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",22)':{tag:'(0019,"SIEMENS MR VA0 COAD",22)',vr:"DS",name:"TransmitterAttenuator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",24)':{tag:'(0019,"SIEMENS MR VA0 COAD",24)',vr:"DS",name:"TransmitterCalibration",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",26)':{tag:'(0019,"SIEMENS MR VA0 COAD",26)',vr:"DS",name:"TransmitterReference",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",50)':{tag:'(0019,"SIEMENS MR VA0 COAD",50)',vr:"DS",name:"ReceiverTotalGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",51)':{tag:'(0019,"SIEMENS MR VA0 COAD",51)',vr:"DS",name:"ReceiverAmplifierGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",52)':{tag:'(0019,"SIEMENS MR VA0 COAD",52)',vr:"DS",name:"ReceiverPreamplifierGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",54)':{tag:'(0019,"SIEMENS MR VA0 COAD",54)',vr:"DS",name:"ReceiverCableAttenuation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",55)':{tag:'(0019,"SIEMENS MR VA0 COAD",55)',vr:"DS",name:"ReceiverReferenceGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",56)':{tag:'(0019,"SIEMENS MR VA0 COAD",56)',vr:"DS",name:"ReceiverFilterFrequency",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",60)':{tag:'(0019,"SIEMENS MR VA0 COAD",60)',vr:"DS",name:"ReconstructionScaleFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",62)':{tag:'(0019,"SIEMENS MR VA0 COAD",62)',vr:"DS",name:"ReferenceScaleFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",70)':{tag:'(0019,"SIEMENS MR VA0 COAD",70)',vr:"DS",name:"PhaseGradientAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",71)':{tag:'(0019,"SIEMENS MR VA0 COAD",71)',vr:"DS",name:"ReadoutGradientAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",72)':{tag:'(0019,"SIEMENS MR VA0 COAD",72)',vr:"DS",name:"SelectionGradientAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",80)':{tag:'(0019,"SIEMENS MR VA0 COAD",80)',vr:"DS",name:"GradientDelayTime",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",82)':{tag:'(0019,"SIEMENS MR VA0 COAD",82)',vr:"DS",name:"TotalGradientDelayTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",90)':{tag:'(0019,"SIEMENS MR VA0 COAD",90)',vr:"LT",name:"SensitivityCorrectionLabel",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",91)':{tag:'(0019,"SIEMENS MR VA0 COAD",91)',vr:"DS",name:"SaturationPhaseEncodingVectorCoronalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",92)':{tag:'(0019,"SIEMENS MR VA0 COAD",92)',vr:"DS",name:"SaturationReadoutVectorCoronalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a0)':{tag:'(0019,"SIEMENS MR VA0 COAD",a0)',vr:"US",name:"RFWatchdogMask",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a1)':{tag:'(0019,"SIEMENS MR VA0 COAD",a1)',vr:"DS",name:"EPIReconstructionSlope",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a2)':{tag:'(0019,"SIEMENS MR VA0 COAD",a2)',vr:"DS",name:"RFPowerErrorIndicator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a5)':{tag:'(0019,"SIEMENS MR VA0 COAD",a5)',vr:"DS",name:"SpecificAbsorptionRateWholeBody",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a6)':{tag:'(0019,"SIEMENS MR VA0 COAD",a6)',vr:"DS",name:"SpecificEnergyDose",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",b0)':{tag:'(0019,"SIEMENS MR VA0 COAD",b0)',vr:"UL",name:"AdjustmentStatusMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c1)':{tag:'(0019,"SIEMENS MR VA0 COAD",c1)',vr:"DS",name:"EPICapacity",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c2)':{tag:'(0019,"SIEMENS MR VA0 COAD",c2)',vr:"DS",name:"EPIInductance",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c3)':{tag:'(0019,"SIEMENS MR VA0 COAD",c3)',vr:"IS",name:"EPISwitchConfigurationCode",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c4)':{tag:'(0019,"SIEMENS MR VA0 COAD",c4)',vr:"IS",name:"EPISwitchHardwareCode",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c5)':{tag:'(0019,"SIEMENS MR VA0 COAD",c5)',vr:"DS",name:"EPISwitchDelayTime",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d1)':{tag:'(0019,"SIEMENS MR VA0 COAD",d1)',vr:"DS",name:"FlowSensitivity",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d2)':{tag:'(0019,"SIEMENS MR VA0 COAD",d2)',vr:"LT",name:"CalculationSubmode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d3)':{tag:'(0019,"SIEMENS MR VA0 COAD",d3)',vr:"DS",name:"FieldOfViewRatio",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d4)':{tag:'(0019,"SIEMENS MR VA0 COAD",d4)',vr:"IS",name:"BaseRawMatrixSize",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d5)':{tag:'(0019,"SIEMENS MR VA0 COAD",d5)',vr:"IS",name:"2DOversamplingLines",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d6)':{tag:'(0019,"SIEMENS MR VA0 COAD",d6)',vr:"IS",name:"3DPhaseOversamplingPartitions",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d7)':{tag:'(0019,"SIEMENS MR VA0 COAD",d7)',vr:"IS",name:"EchoLinePosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d8)':{tag:'(0019,"SIEMENS MR VA0 COAD",d8)',vr:"IS",name:"EchoColumnPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d9)':{tag:'(0019,"SIEMENS MR VA0 COAD",d9)',vr:"IS",name:"LinesPerSegment",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",da)':{tag:'(0019,"SIEMENS MR VA0 COAD",da)',vr:"LT",name:"PhaseCodingDirection",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",10)':{tag:'(0019,"SIEMENS MR VA0 GEN",10)',vr:"DS",name:"TotalMeasurementTimeNominal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",11)':{tag:'(0019,"SIEMENS MR VA0 GEN",11)',vr:"DS",name:"TotalMeasurementTimeCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",12)':{tag:'(0019,"SIEMENS MR VA0 GEN",12)',vr:"DS",name:"StartDelayTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",13)':{tag:'(0019,"SIEMENS MR VA0 GEN",13)',vr:"DS",name:"DwellTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",14)':{tag:'(0019,"SIEMENS MR VA0 GEN",14)',vr:"IS",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",16)':{tag:'(0019,"SIEMENS MR VA0 GEN",16)',vr:"UL",name:"SequenceControlMask",vm:"2",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",18)':{tag:'(0019,"SIEMENS MR VA0 GEN",18)',vr:"UL",name:"MeasurementStatusMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",20)':{tag:'(0019,"SIEMENS MR VA0 GEN",20)',vr:"IS",name:"NumberOfFourierLinesNominal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",21)':{tag:'(0019,"SIEMENS MR VA0 GEN",21)',vr:"IS",name:"NumberOfFourierLinesCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",26)':{tag:'(0019,"SIEMENS MR VA0 GEN",26)',vr:"IS",name:"NumberOfFourierLinesAfterZero",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",28)':{tag:'(0019,"SIEMENS MR VA0 GEN",28)',vr:"IS",name:"FirstMeasuredFourierLine",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",30)':{tag:'(0019,"SIEMENS MR VA0 GEN",30)',vr:"IS",name:"AcquisitionColumns",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",31)':{tag:'(0019,"SIEMENS MR VA0 GEN",31)',vr:"IS",name:"ReconstructionColumns",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",40)':{tag:'(0019,"SIEMENS MR VA0 GEN",40)',vr:"IS",name:"ArrayCoilElementNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",41)':{tag:'(0019,"SIEMENS MR VA0 GEN",41)',vr:"UL",name:"ArrayCoilElementSelectMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",42)':{tag:'(0019,"SIEMENS MR VA0 GEN",42)',vr:"UL",name:"ArrayCoilElementDataMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",43)':{tag:'(0019,"SIEMENS MR VA0 GEN",43)',vr:"IS",name:"ArrayCoilElementToADCConnect",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",44)':{tag:'(0019,"SIEMENS MR VA0 GEN",44)',vr:"DS",name:"ArrayCoilElementNoiseLevel",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",45)':{tag:'(0019,"SIEMENS MR VA0 GEN",45)',vr:"IS",name:"ArrayCoilADCPairNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",46)':{tag:'(0019,"SIEMENS MR VA0 GEN",46)',vr:"UL",name:"ArrayCoilCombinationMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",50)':{tag:'(0019,"SIEMENS MR VA0 GEN",50)',vr:"IS",name:"NumberOfAverages",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",60)':{tag:'(0019,"SIEMENS MR VA0 GEN",60)',vr:"DS",name:"FlipAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",70)':{tag:'(0019,"SIEMENS MR VA0 GEN",70)',vr:"IS",name:"NumberOfPrescans",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",81)':{tag:'(0019,"SIEMENS MR VA0 GEN",81)',vr:"LT",name:"FilterTypeForRawData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",82)':{tag:'(0019,"SIEMENS MR VA0 GEN",82)',vr:"DS",name:"FilterParameterForRawData",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",83)':{tag:'(0019,"SIEMENS MR VA0 GEN",83)',vr:"LT",name:"FilterTypeForImageData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",84)':{tag:'(0019,"SIEMENS MR VA0 GEN",84)',vr:"DS",name:"FilterParameterForImageData",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",85)':{tag:'(0019,"SIEMENS MR VA0 GEN",85)',vr:"LT",name:"FilterTypeForPhaseCorrection",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",86)':{tag:'(0019,"SIEMENS MR VA0 GEN",86)',vr:"DS",name:"FilterParameterForPhaseCorrection",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",87)':{tag:'(0019,"SIEMENS MR VA0 GEN",87)',vr:"LT",name:"NormalizationFilterTypeForImageData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",88)':{tag:'(0019,"SIEMENS MR VA0 GEN",88)',vr:"DS",name:"NormalizationFilterParameterForImageData",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",90)':{tag:'(0019,"SIEMENS MR VA0 GEN",90)',vr:"IS",name:"NumberOfSaturationRegions",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",91)':{tag:'(0019,"SIEMENS MR VA0 GEN",91)',vr:"DS",name:"SaturationPhaseEncodingVectorSagittalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",92)':{tag:'(0019,"SIEMENS MR VA0 GEN",92)',vr:"DS",name:"SaturationReadoutVectorSagittalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",93)':{tag:'(0019,"SIEMENS MR VA0 GEN",93)',vr:"DS",name:"EPIStimulationMonitorMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",94)':{tag:'(0019,"SIEMENS MR VA0 GEN",94)',vr:"DS",name:"ImageRotationAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",96)':{tag:'(0019,"SIEMENS MR VA0 GEN",96)',vr:"UL",name:"CoilIDMask",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",97)':{tag:'(0019,"SIEMENS MR VA0 GEN",97)',vr:"UL",name:"CoilClassMask",vm:"2",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",98)':{tag:'(0019,"SIEMENS MR VA0 GEN",98)',vr:"DS",name:"CoilPosition",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",a0)':{tag:'(0019,"SIEMENS MR VA0 GEN",a0)',vr:"DS",name:"EPIReconstructionPhase",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",a1)':{tag:'(0019,"SIEMENS MR VA0 GEN",a1)',vr:"DS",name:"EPIReconstructionSlope",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",20)':{tag:'(0021,"SIEMENS MR VA0 GEN",20)',vr:"IS",name:"PhaseCorrectionRowsSequence",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",21)':{tag:'(0021,"SIEMENS MR VA0 GEN",21)',vr:"IS",name:"PhaseCorrectionColumnsSequence",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",22)':{tag:'(0021,"SIEMENS MR VA0 GEN",22)',vr:"IS",name:"PhaseCorrectionRowsReconstruction",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",24)':{tag:'(0021,"SIEMENS MR VA0 GEN",24)',vr:"IS",name:"PhaseCorrectionColumnsReconstruction",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",30)':{tag:'(0021,"SIEMENS MR VA0 GEN",30)',vr:"IS",name:"NumberOf3DRawPartitionsNominal",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",31)':{tag:'(0021,"SIEMENS MR VA0 GEN",31)',vr:"IS",name:"NumberOf3DRawPartitionsCurrent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",34)':{tag:'(0021,"SIEMENS MR VA0 GEN",34)',vr:"IS",name:"NumberOf3DImagePartitions",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",36)':{tag:'(0021,"SIEMENS MR VA0 GEN",36)',vr:"IS",name:"Actual3DImagePartitionNumber",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",39)':{tag:'(0021,"SIEMENS MR VA0 GEN",39)',vr:"DS",name:"SlabThickness",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",40)':{tag:'(0021,"SIEMENS MR VA0 GEN",40)',vr:"IS",name:"NumberOfSlicesNominal",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",41)':{tag:'(0021,"SIEMENS MR VA0 GEN",41)',vr:"IS",name:"NumberOfSlicesCurrent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",42)':{tag:'(0021,"SIEMENS MR VA0 GEN",42)',vr:"IS",name:"CurrentSliceNumber",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",43)':{tag:'(0021,"SIEMENS MR VA0 GEN",43)',vr:"IS",name:"CurrentGroupNumber",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",44)':{tag:'(0021,"SIEMENS MR VA0 GEN",44)',vr:"DS",name:"CurrentSliceDistanceFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",45)':{tag:'(0021,"SIEMENS MR VA0 GEN",45)',vr:"IS",name:"MIPStartRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",46)':{tag:'(0021,"SIEMENS MR VA0 GEN",46)',vr:"IS",name:"MIPStopRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",47)':{tag:'(0021,"SIEMENS MR VA0 GEN",47)',vr:"IS",name:"MIPStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",48)':{tag:'(0021,"SIEMENS MR VA0 GEN",48)',vr:"IS",name:"MIPStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",49)':{tag:'(0021,"SIEMENS MR VA0 GEN",49)',vr:"IS",name:"MIPStartSlice Name=",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",4a)':{tag:'(0021,"SIEMENS MR VA0 GEN",4a)',vr:"IS",name:"MIPStartSlice",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",4f)':{tag:'(0021,"SIEMENS MR VA0 GEN",4f)',vr:"LT",name:"OrderofSlices",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",50)':{tag:'(0021,"SIEMENS MR VA0 GEN",50)',vr:"US",name:"SignalMask",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",52)':{tag:'(0021,"SIEMENS MR VA0 GEN",52)',vr:"DS",name:"DelayAfterTrigger",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",53)':{tag:'(0021,"SIEMENS MR VA0 GEN",53)',vr:"IS",name:"RRInterval",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",54)':{tag:'(0021,"SIEMENS MR VA0 GEN",54)',vr:"DS",name:"NumberOfTriggerPulses",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",56)':{tag:'(0021,"SIEMENS MR VA0 GEN",56)',vr:"DS",name:"RepetitionTimeEffective",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",57)':{tag:'(0021,"SIEMENS MR VA0 GEN",57)',vr:"LT",name:"GatePhase",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",58)':{tag:'(0021,"SIEMENS MR VA0 GEN",58)',vr:"DS",name:"GateThreshold",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",59)':{tag:'(0021,"SIEMENS MR VA0 GEN",59)',vr:"DS",name:"GatedRatio",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",60)':{tag:'(0021,"SIEMENS MR VA0 GEN",60)',vr:"IS",name:"NumberOfInterpolatedImages",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",70)':{tag:'(0021,"SIEMENS MR VA0 GEN",70)',vr:"IS",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",72)':{tag:'(0021,"SIEMENS MR VA0 GEN",72)',vr:"DS",name:"SecondEchoTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",73)':{tag:'(0021,"SIEMENS MR VA0 GEN",73)',vr:"DS",name:"SecondRepetitionTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",80)':{tag:'(0021,"SIEMENS MR VA0 GEN",80)',vr:"IS",name:"CardiacCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",91)':{tag:'(0021,"SIEMENS MR VA0 GEN",91)',vr:"DS",name:"SaturationPhaseEncodingVectorTransverseComponent",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",92)':{tag:'(0021,"SIEMENS MR VA0 GEN",92)',vr:"DS",name:"SaturationReadoutVectorTransverseComponent",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",93)':{tag:'(0021,"SIEMENS MR VA0 GEN",93)',vr:"DS",name:"EPIChangeValueOfMagnitude",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",94)':{tag:'(0021,"SIEMENS MR VA0 GEN",94)',vr:"DS",name:"EPIChangeValueOfXComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",95)':{tag:'(0021,"SIEMENS MR VA0 GEN",95)',vr:"DS",name:"EPIChangeValueOfYComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",96)':{tag:'(0021,"SIEMENS MR VA0 GEN",96)',vr:"DS",name:"EPIChangeValueOfZComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",00)':{tag:'(0021,"SIEMENS MR VA0 RAW",00)',vr:"LT",name:"SequenceType",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",01)':{tag:'(0021,"SIEMENS MR VA0 RAW",01)',vr:"IS",name:"VectorSizeOriginal",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",02)':{tag:'(0021,"SIEMENS MR VA0 RAW",02)',vr:"IS",name:"VectorSizeExtended",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",03)':{tag:'(0021,"SIEMENS MR VA0 RAW",03)',vr:"DS",name:"AcquiredSpectralRange",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",04)':{tag:'(0021,"SIEMENS MR VA0 RAW",04)',vr:"DS",name:"VOIPosition",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",05)':{tag:'(0021,"SIEMENS MR VA0 RAW",05)',vr:"DS",name:"VOISize",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",06)':{tag:'(0021,"SIEMENS MR VA0 RAW",06)',vr:"IS",name:"CSIMatrixSizeOriginal",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",07)':{tag:'(0021,"SIEMENS MR VA0 RAW",07)',vr:"IS",name:"CSIMatrixSizeExtended",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",08)':{tag:'(0021,"SIEMENS MR VA0 RAW",08)',vr:"DS",name:"SpatialGridShift",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",09)':{tag:'(0021,"SIEMENS MR VA0 RAW",09)',vr:"DS",name:"SignalLimitsMinimum",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",10)':{tag:'(0021,"SIEMENS MR VA0 RAW",10)',vr:"DS",name:"SignalLimitsMaximum",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",11)':{tag:'(0021,"SIEMENS MR VA0 RAW",11)',vr:"DS",name:"SpecInfoMask",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",12)':{tag:'(0021,"SIEMENS MR VA0 RAW",12)',vr:"DS",name:"EPITimeRateOfChangeOfMagnitude",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",13)':{tag:'(0021,"SIEMENS MR VA0 RAW",13)',vr:"DS",name:"EPITimeRateOfChangeOfXComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",14)':{tag:'(0021,"SIEMENS MR VA0 RAW",14)',vr:"DS",name:"EPITimeRateOfChangeOfYComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",15)':{tag:'(0021,"SIEMENS MR VA0 RAW",15)',vr:"DS",name:"EPITimeRateOfChangeOfZComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",16)':{tag:'(0021,"SIEMENS MR VA0 RAW",16)',vr:"DS",name:"EPITimeRateOfChangeLegalLimit1",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",17)':{tag:'(0021,"SIEMENS MR VA0 RAW",17)',vr:"DS",name:"EPIOperationModeFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",18)':{tag:'(0021,"SIEMENS MR VA0 RAW",18)',vr:"DS",name:"EPIFieldCalculationSafetyFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",19)':{tag:'(0021,"SIEMENS MR VA0 RAW",19)',vr:"DS",name:"EPILegalLimit1OfChangeValue",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",20)':{tag:'(0021,"SIEMENS MR VA0 RAW",20)',vr:"DS",name:"EPILegalLimit2OfChangeValue",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",21)':{tag:'(0021,"SIEMENS MR VA0 RAW",21)',vr:"DS",name:"EPIRiseTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",30)':{tag:'(0021,"SIEMENS MR VA0 RAW",30)',vr:"DS",name:"ArrayCoilADCOffset",vm:"16",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",31)':{tag:'(0021,"SIEMENS MR VA0 RAW",31)',vr:"DS",name:"ArrayCoilPreamplifierGain",vm:"16",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",50)':{tag:'(0021,"SIEMENS MR VA0 RAW",50)',vr:"LT",name:"SaturationType",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",51)':{tag:'(0021,"SIEMENS MR VA0 RAW",51)',vr:"DS",name:"SaturationNormalVector",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",52)':{tag:'(0021,"SIEMENS MR VA0 RAW",52)',vr:"DS",name:"SaturationPositionVector",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",53)':{tag:'(0021,"SIEMENS MR VA0 RAW",53)',vr:"DS",name:"SaturationThickness",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",54)':{tag:'(0021,"SIEMENS MR VA0 RAW",54)',vr:"DS",name:"SaturationWidth",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",55)':{tag:'(0021,"SIEMENS MR VA0 RAW",55)',vr:"DS",name:"SaturationDistance",vm:"6",version:"PrivateTag"},'(7fe3,"SIEMENS NUMARIS II",00)':{tag:'(7fe3,"SIEMENS NUMARIS II",00)',vr:"LT",name:"ImageGraphicsFormatCode",vm:"1",version:"PrivateTag"},'(7fe3,"SIEMENS NUMARIS II",10)':{tag:'(7fe3,"SIEMENS NUMARIS II",10)',vr:"OB",name:"ImageGraphics",vm:"1",version:"PrivateTag"},'(7fe3,"SIEMENS NUMARIS II",20)':{tag:'(7fe3,"SIEMENS NUMARIS II",20)',vr:"OB",name:"ImageGraphicsDummy",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",20)':{tag:'(0011,"SIEMENS RA GEN",20)',vr:"SL",name:"FluoroTimer",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",25)':{tag:'(0011,"SIEMENS RA GEN",25)',vr:"SL",name:"PtopDoseAreaProduct",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",26)':{tag:'(0011,"SIEMENS RA GEN",26)',vr:"SL",name:"PtopTotalSkinDose",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",30)':{tag:'(0011,"SIEMENS RA GEN",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",35)':{tag:'(0011,"SIEMENS RA GEN",35)',vr:"LO",name:"PatientInitialPuckCounter",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",40)':{tag:'(0011,"SIEMENS RA GEN",40)',vr:"SS",name:"SPIDataObjectType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",15)':{tag:'(0019,"SIEMENS RA GEN",15)',vr:"LO",name:"AcquiredPlane",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",1f)':{tag:'(0019,"SIEMENS RA GEN",1f)',vr:"SS",name:"DefaultTableIsoCenterHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",20)':{tag:'(0019,"SIEMENS RA GEN",20)',vr:"SL",name:"SceneFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",22)':{tag:'(0019,"SIEMENS RA GEN",22)',vr:"SL",name:"RefPhotofileFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",24)':{tag:'(0019,"SIEMENS RA GEN",24)',vr:"LO",name:"SceneName",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",26)':{tag:'(0019,"SIEMENS RA GEN",26)',vr:"SS",name:"AcquisitionIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",28)':{tag:'(0019,"SIEMENS RA GEN",28)',vr:"SS",name:"MixedPulseMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",2a)':{tag:'(0019,"SIEMENS RA GEN",2a)',vr:"SS",name:"NoOfPositions",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",2c)':{tag:'(0019,"SIEMENS RA GEN",2c)',vr:"SS",name:"NoOfPhases",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",2e)':{tag:'(0019,"SIEMENS RA GEN",2e)',vr:"SS",name:"FrameRateForPositions",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",30)':{tag:'(0019,"SIEMENS RA GEN",30)',vr:"SS",name:"NoOfFramesForPositions",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",32)':{tag:'(0019,"SIEMENS RA GEN",32)',vr:"SS",name:"SteppingDirection",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",34)':{tag:'(0019,"SIEMENS RA GEN",34)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",36)':{tag:'(0019,"SIEMENS RA GEN",36)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",38)':{tag:'(0019,"SIEMENS RA GEN",38)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",3a)':{tag:'(0019,"SIEMENS RA GEN",3a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",3c)':{tag:'(0019,"SIEMENS RA GEN",3c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",3e)':{tag:'(0019,"SIEMENS RA GEN",3e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",40)':{tag:'(0019,"SIEMENS RA GEN",40)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",42)':{tag:'(0019,"SIEMENS RA GEN",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",44)':{tag:'(0019,"SIEMENS RA GEN",44)',vr:"SS",name:"ImageTransferDelay",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",46)':{tag:'(0019,"SIEMENS RA GEN",46)',vr:"SL",name:"InversFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",48)':{tag:'(0019,"SIEMENS RA GEN",48)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",4a)':{tag:'(0019,"SIEMENS RA GEN",4a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",4c)':{tag:'(0019,"SIEMENS RA GEN",4c)',vr:"SS",name:"BlankingCircleDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",50)':{tag:'(0019,"SIEMENS RA GEN",50)',vr:"SL",name:"StandDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",52)':{tag:'(0019,"SIEMENS RA GEN",52)',vr:"SS",name:"TableTilt",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",54)':{tag:'(0019,"SIEMENS RA GEN",54)',vr:"SS",name:"TableAxisRotation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",56)':{tag:'(0019,"SIEMENS RA GEN",56)',vr:"SS",name:"TableLongitudalPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",58)':{tag:'(0019,"SIEMENS RA GEN",58)',vr:"SS",name:"TableSideOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",5a)':{tag:'(0019,"SIEMENS RA GEN",5a)',vr:"SS",name:"TableIsoCenterHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",5c)':{tag:'(0019,"SIEMENS RA GEN",5c)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",5e)':{tag:'(0019,"SIEMENS RA GEN",5e)',vr:"SL",name:"CollimationDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",60)':{tag:'(0019,"SIEMENS RA GEN",60)',vr:"SL",name:"PeriSequenceNo",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",62)':{tag:'(0019,"SIEMENS RA GEN",62)',vr:"SL",name:"PeriTotalScenes",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",64)':{tag:'(0019,"SIEMENS RA GEN",64)',vr:"SL",name:"PeriOverlapTop",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",66)':{tag:'(0019,"SIEMENS RA GEN",66)',vr:"SL",name:"PeriOverlapBottom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",68)':{tag:'(0019,"SIEMENS RA GEN",68)',vr:"SL",name:"RawImageNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",6a)':{tag:'(0019,"SIEMENS RA GEN",6a)',vr:"SL",name:"XRayDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",70)':{tag:'(0019,"SIEMENS RA GEN",70)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",72)':{tag:'(0019,"SIEMENS RA GEN",72)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",74)':{tag:'(0019,"SIEMENS RA GEN",74)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",76)':{tag:'(0019,"SIEMENS RA GEN",76)',vr:"SL",name:"FillingAverageFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",78)':{tag:'(0019,"SIEMENS RA GEN",78)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",7a)':{tag:'(0019,"SIEMENS RA GEN",7a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",7c)':{tag:'(0019,"SIEMENS RA GEN",7c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",7e)':{tag:'(0019,"SIEMENS RA GEN",7e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",80)':{tag:'(0019,"SIEMENS RA GEN",80)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",82)':{tag:'(0019,"SIEMENS RA GEN",82)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",84)':{tag:'(0019,"SIEMENS RA GEN",84)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",86)':{tag:'(0019,"SIEMENS RA GEN",86)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",88)':{tag:'(0019,"SIEMENS RA GEN",88)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",8a)':{tag:'(0019,"SIEMENS RA GEN",8a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",8c)':{tag:'(0019,"SIEMENS RA GEN",8c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",8e)':{tag:'(0019,"SIEMENS RA GEN",8e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",92)':{tag:'(0019,"SIEMENS RA GEN",92)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",94)':{tag:'(0019,"SIEMENS RA GEN",94)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",96)':{tag:'(0019,"SIEMENS RA GEN",96)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",98)':{tag:'(0019,"SIEMENS RA GEN",98)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",9a)':{tag:'(0019,"SIEMENS RA GEN",9a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",9c)':{tag:'(0019,"SIEMENS RA GEN",9c)',vr:"SL",name:"IntensifierLevelCalibrationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",9e)':{tag:'(0019,"SIEMENS RA GEN",9e)',vr:"SL",name:"NativeReviewFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a2)':{tag:'(0019,"SIEMENS RA GEN",a2)',vr:"SL",name:"SceneNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a4)':{tag:'(0019,"SIEMENS RA GEN",a4)',vr:"SS",name:"AcquisitionMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a5)':{tag:'(0019,"SIEMENS RA GEN",a5)',vr:"SS",name:"AcquisitonFrameRate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a6)':{tag:'(0019,"SIEMENS RA GEN",a6)',vr:"SL",name:"ECGFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a7)':{tag:'(0019,"SIEMENS RA GEN",a7)',vr:"SL",name:"AdditionalSceneData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a8)':{tag:'(0019,"SIEMENS RA GEN",a8)',vr:"SL",name:"FileCopyFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a9)':{tag:'(0019,"SIEMENS RA GEN",a9)',vr:"SL",name:"PhlebovisionFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",aa)':{tag:'(0019,"SIEMENS RA GEN",aa)',vr:"SL",name:"Co2Flag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ab)':{tag:'(0019,"SIEMENS RA GEN",ab)',vr:"SS",name:"MaxSpeed",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ac)':{tag:'(0019,"SIEMENS RA GEN",ac)',vr:"SS",name:"StepWidth",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ad)':{tag:'(0019,"SIEMENS RA GEN",ad)',vr:"SL",name:"DigitalAcquisitionZoom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ff)':{tag:'(0019,"SIEMENS RA GEN",ff)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",15)':{tag:'(0021,"SIEMENS RA GEN",15)',vr:"SS",name:"ImagesInStudy",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",20)':{tag:'(0021,"SIEMENS RA GEN",20)',vr:"SS",name:"ScenesInStudy",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",25)':{tag:'(0021,"SIEMENS RA GEN",25)',vr:"SS",name:"ImagesInPhotofile",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",27)':{tag:'(0021,"SIEMENS RA GEN",27)',vr:"SS",name:"PlaneBImagesExist",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",28)':{tag:'(0021,"SIEMENS RA GEN",28)',vr:"SS",name:"NoOf2MBChunks",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",30)':{tag:'(0021,"SIEMENS RA GEN",30)',vr:"SS",name:"ImagesInAllScenes",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",40)':{tag:'(0021,"SIEMENS RA GEN",40)',vr:"SS",name:"ArchiveSWInternalVersion",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",28)':{tag:'(0011,"SIEMENS RA PLANE A",28)',vr:"SL",name:"FluoroTimerA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",29)':{tag:'(0011,"SIEMENS RA PLANE A",29)',vr:"SL",name:"FluoroSkinDoseA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",2a)':{tag:'(0011,"SIEMENS RA PLANE A",2a)',vr:"SL",name:"TotalSkinDoseA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",2b)':{tag:'(0011,"SIEMENS RA PLANE A",2b)',vr:"SL",name:"FluoroDoseAreaProductA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",2c)':{tag:'(0011,"SIEMENS RA PLANE A",2c)',vr:"SL",name:"TotalDoseAreaProductA",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",15)':{tag:'(0019,"SIEMENS RA PLANE A",15)',vr:"LT",name:"OfflineUID",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",18)':{tag:'(0019,"SIEMENS RA PLANE A",18)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",19)':{tag:'(0019,"SIEMENS RA PLANE A",19)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1a)':{tag:'(0019,"SIEMENS RA PLANE A",1a)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1b)':{tag:'(0019,"SIEMENS RA PLANE A",1b)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1c)':{tag:'(0019,"SIEMENS RA PLANE A",1c)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1d)':{tag:'(0019,"SIEMENS RA PLANE A",1d)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1e)':{tag:'(0019,"SIEMENS RA PLANE A",1e)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1f)':{tag:'(0019,"SIEMENS RA PLANE A",1f)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",20)':{tag:'(0019,"SIEMENS RA PLANE A",20)',vr:"SS",name:"SystemCalibFactorPlaneA",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",22)':{tag:'(0019,"SIEMENS RA PLANE A",22)',vr:"SS",name:"XRayParameterSetNo",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",24)':{tag:'(0019,"SIEMENS RA PLANE A",24)',vr:"SS",name:"XRaySystem",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",26)':{tag:'(0019,"SIEMENS RA PLANE A",26)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",28)':{tag:'(0019,"SIEMENS RA PLANE A",28)',vr:"SS",name:"AcquiredDisplayMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",2a)':{tag:'(0019,"SIEMENS RA PLANE A",2a)',vr:"SS",name:"AcquisitionDelay",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",2c)':{tag:'(0019,"SIEMENS RA PLANE A",2c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",2e)':{tag:'(0019,"SIEMENS RA PLANE A",2e)',vr:"SS",name:"MaxFramesLimit",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",30)':{tag:'(0019,"SIEMENS RA PLANE A",30)',vr:"US",name:"MaximumFrameSizeNIU",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",32)':{tag:'(0019,"SIEMENS RA PLANE A",32)',vr:"SS",name:"SubtractedFilterType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",34)':{tag:'(0019,"SIEMENS RA PLANE A",34)',vr:"SS",name:"FilterFactorNative",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",36)':{tag:'(0019,"SIEMENS RA PLANE A",36)',vr:"SS",name:"AnatomicBackgroundFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",38)':{tag:'(0019,"SIEMENS RA PLANE A",38)',vr:"SS",name:"WindowUpperLimitNative",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",3a)':{tag:'(0019,"SIEMENS RA PLANE A",3a)',vr:"SS",name:"WindowLowerLimitNative",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",3c)':{tag:'(0019,"SIEMENS RA PLANE A",3c)',vr:"SS",name:"WindowBrightnessPhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",3e)':{tag:'(0019,"SIEMENS RA PLANE A",3e)',vr:"SS",name:"WindowBrightnessPhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",40)':{tag:'(0019,"SIEMENS RA PLANE A",40)',vr:"SS",name:"WindowContrastPhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",42)':{tag:'(0019,"SIEMENS RA PLANE A",42)',vr:"SS",name:"WindowContrastPhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",44)':{tag:'(0019,"SIEMENS RA PLANE A",44)',vr:"SS",name:"FilterFactorSub",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",46)':{tag:'(0019,"SIEMENS RA PLANE A",46)',vr:"SS",name:"PeakOpacified",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",48)':{tag:'(0019,"SIEMENS RA PLANE A",48)',vr:"SL",name:"MaskFrame",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",4a)':{tag:'(0019,"SIEMENS RA PLANE A",4a)',vr:"SL",name:"BIHFrame",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",4c)':{tag:'(0019,"SIEMENS RA PLANE A",4c)',vr:"SS",name:"CentBeamAngulationCaudCran",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",4e)':{tag:'(0019,"SIEMENS RA PLANE A",4e)',vr:"SS",name:"CentBeamAngulationLRAnterior",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",50)':{tag:'(0019,"SIEMENS RA PLANE A",50)',vr:"SS",name:"LongitudinalPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",52)':{tag:'(0019,"SIEMENS RA PLANE A",52)',vr:"SS",name:"SideOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",54)':{tag:'(0019,"SIEMENS RA PLANE A",54)',vr:"SS",name:"IsoCenterHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",56)':{tag:'(0019,"SIEMENS RA PLANE A",56)',vr:"SS",name:"ImageTwist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",58)':{tag:'(0019,"SIEMENS RA PLANE A",58)',vr:"SS",name:"SourceImageDistance",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",5a)':{tag:'(0019,"SIEMENS RA PLANE A",5a)',vr:"SS",name:"MechanicalMagnificationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",5c)':{tag:'(0019,"SIEMENS RA PLANE A",5c)',vr:"SL",name:"CalibrationFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",5e)':{tag:'(0019,"SIEMENS RA PLANE A",5e)',vr:"SL",name:"CalibrationAngleCranCaud",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",60)':{tag:'(0019,"SIEMENS RA PLANE A",60)',vr:"SL",name:"CalibrationAngleRAOLAO",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",62)':{tag:'(0019,"SIEMENS RA PLANE A",62)',vr:"SL",name:"CalibrationTableToFloorDist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",64)':{tag:'(0019,"SIEMENS RA PLANE A",64)',vr:"SL",name:"CalibrationIsocenterToFloorDist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",66)':{tag:'(0019,"SIEMENS RA PLANE A",66)',vr:"SL",name:"CalibrationIsocenterToSourceDist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",68)':{tag:'(0019,"SIEMENS RA PLANE A",68)',vr:"SL",name:"CalibrationSourceToII",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",6a)':{tag:'(0019,"SIEMENS RA PLANE A",6a)',vr:"SL",name:"CalibrationIIZoom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",6c)':{tag:'(0019,"SIEMENS RA PLANE A",6c)',vr:"SL",name:"CalibrationIIField",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",6e)':{tag:'(0019,"SIEMENS RA PLANE A",6e)',vr:"SL",name:"CalibrationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",70)':{tag:'(0019,"SIEMENS RA PLANE A",70)',vr:"SL",name:"CalibrationObjectToImageDistance",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",72)':{tag:'(0019,"SIEMENS RA PLANE A",72)',vr:"SL",name:"CalibrationSystemFactor",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",74)':{tag:'(0019,"SIEMENS RA PLANE A",74)',vr:"SL",name:"CalibrationSystemCorrection",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",76)':{tag:'(0019,"SIEMENS RA PLANE A",76)',vr:"SL",name:"CalibrationSystemIIFormats",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",78)':{tag:'(0019,"SIEMENS RA PLANE A",78)',vr:"SL",name:"CalibrationGantryDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",7a)':{tag:'(0019,"SIEMENS RA PLANE A",7a)',vr:"SS",name:"CollimatorSquareBreadth",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",7c)':{tag:'(0019,"SIEMENS RA PLANE A",7c)',vr:"SS",name:"CollimatorSquareHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",7e)':{tag:'(0019,"SIEMENS RA PLANE A",7e)',vr:"SS",name:"CollimatorSquareDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",80)':{tag:'(0019,"SIEMENS RA PLANE A",80)',vr:"SS",name:"CollimaterFingerTurnAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",82)':{tag:'(0019,"SIEMENS RA PLANE A",82)',vr:"SS",name:"CollimaterFingerPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",84)':{tag:'(0019,"SIEMENS RA PLANE A",84)',vr:"SS",name:"CollimaterDiaphragmTurnAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",86)':{tag:'(0019,"SIEMENS RA PLANE A",86)',vr:"SS",name:"CollimaterDiaphragmPosition1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",88)':{tag:'(0019,"SIEMENS RA PLANE A",88)',vr:"SS",name:"CollimaterDiaphragmPosition2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",8a)':{tag:'(0019,"SIEMENS RA PLANE A",8a)',vr:"SS",name:"CollimaterDiaphragmMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",8c)':{tag:'(0019,"SIEMENS RA PLANE A",8c)',vr:"SS",name:"CollimaterBeamLimitBreadth",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",8e)':{tag:'(0019,"SIEMENS RA PLANE A",8e)',vr:"SS",name:"CollimaterBeamLimitHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",90)':{tag:'(0019,"SIEMENS RA PLANE A",90)',vr:"SS",name:"CollimaterBeamLimitDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",92)':{tag:'(0019,"SIEMENS RA PLANE A",92)',vr:"SS",name:"X-RayControlMOde",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",94)':{tag:'(0019,"SIEMENS RA PLANE A",94)',vr:"SS",name:"X-RaySystem",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",96)':{tag:'(0019,"SIEMENS RA PLANE A",96)',vr:"SS",name:"FocalSpot",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",98)':{tag:'(0019,"SIEMENS RA PLANE A",98)',vr:"SS",name:"ExposureControl",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",9a)':{tag:'(0019,"SIEMENS RA PLANE A",9a)',vr:"SL",name:"XRayVoltage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",9c)':{tag:'(0019,"SIEMENS RA PLANE A",9c)',vr:"SL",name:"XRayCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",9e)':{tag:'(0019,"SIEMENS RA PLANE A",9e)',vr:"SL",name:"XRayCurrentTimeProduct",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a0)':{tag:'(0019,"SIEMENS RA PLANE A",a0)',vr:"SL",name:"XRayPulseTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a2)':{tag:'(0019,"SIEMENS RA PLANE A",a2)',vr:"SL",name:"XRaySceneTimeFluoroClock",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a4)':{tag:'(0019,"SIEMENS RA PLANE A",a4)',vr:"SS",name:"MaximumPulseRate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a6)':{tag:'(0019,"SIEMENS RA PLANE A",a6)',vr:"SS",name:"PulsesPerScene",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a8)':{tag:'(0019,"SIEMENS RA PLANE A",a8)',vr:"SL",name:"DoseAreaProductOfScene",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",aa)':{tag:'(0019,"SIEMENS RA PLANE A",aa)',vr:"SS",name:"Dose",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ac)':{tag:'(0019,"SIEMENS RA PLANE A",ac)',vr:"SS",name:"DoseRate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ae)':{tag:'(0019,"SIEMENS RA PLANE A",ae)',vr:"SL",name:"IIToCoverDistance",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b0)':{tag:'(0019,"SIEMENS RA PLANE A",b0)',vr:"SS",name:"LastFramePhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b1)':{tag:'(0019,"SIEMENS RA PLANE A",b1)',vr:"SS",name:"FrameRatePhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b2)':{tag:'(0019,"SIEMENS RA PLANE A",b2)',vr:"SS",name:"LastFramePhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b3)':{tag:'(0019,"SIEMENS RA PLANE A",b3)',vr:"SS",name:"FrameRatePhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b4)':{tag:'(0019,"SIEMENS RA PLANE A",b4)',vr:"SS",name:"LastFramePhase3",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b5)':{tag:'(0019,"SIEMENS RA PLANE A",b5)',vr:"SS",name:"FrameRatePhase3",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b6)':{tag:'(0019,"SIEMENS RA PLANE A",b6)',vr:"SS",name:"LastFramePhase4",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b7)':{tag:'(0019,"SIEMENS RA PLANE A",b7)',vr:"SS",name:"FrameRatePhase4",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b8)':{tag:'(0019,"SIEMENS RA PLANE A",b8)',vr:"SS",name:"GammaOfNativeImage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b9)':{tag:'(0019,"SIEMENS RA PLANE A",b9)',vr:"SS",name:"GammaOfTVSystem",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bb)':{tag:'(0019,"SIEMENS RA PLANE A",bb)',vr:"SL",name:"PixelshiftX",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bc)':{tag:'(0019,"SIEMENS RA PLANE A",bc)',vr:"SL",name:"PixelshiftY",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bd)':{tag:'(0019,"SIEMENS RA PLANE A",bd)',vr:"SL",name:"MaskAverageFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",be)':{tag:'(0019,"SIEMENS RA PLANE A",be)',vr:"SL",name:"BlankingCircleFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bf)':{tag:'(0019,"SIEMENS RA PLANE A",bf)',vr:"SL",name:"CircleRowStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c0)':{tag:'(0019,"SIEMENS RA PLANE A",c0)',vr:"SL",name:"CircleRowEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c1)':{tag:'(0019,"SIEMENS RA PLANE A",c1)',vr:"SL",name:"CircleColumnStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c2)':{tag:'(0019,"SIEMENS RA PLANE A",c2)',vr:"SL",name:"CircleColumnEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c3)':{tag:'(0019,"SIEMENS RA PLANE A",c3)',vr:"SL",name:"CircleDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c4)':{tag:'(0019,"SIEMENS RA PLANE A",c4)',vr:"SL",name:"RectangularCollimaterFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c5)':{tag:'(0019,"SIEMENS RA PLANE A",c5)',vr:"SL",name:"RectangleRowStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c6)':{tag:'(0019,"SIEMENS RA PLANE A",c6)',vr:"SL",name:"RectangleRowEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c7)':{tag:'(0019,"SIEMENS RA PLANE A",c7)',vr:"SL",name:"RectangleColumnStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c8)':{tag:'(0019,"SIEMENS RA PLANE A",c8)',vr:"SL",name:"RectangleColumnEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c9)':{tag:'(0019,"SIEMENS RA PLANE A",c9)',vr:"SL",name:"RectangleAngulation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ca)':{tag:'(0019,"SIEMENS RA PLANE A",ca)',vr:"SL",name:"IrisCollimatorFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cb)':{tag:'(0019,"SIEMENS RA PLANE A",cb)',vr:"SL",name:"IrisRowStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cc)':{tag:'(0019,"SIEMENS RA PLANE A",cc)',vr:"SL",name:"IrisRowEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cd)':{tag:'(0019,"SIEMENS RA PLANE A",cd)',vr:"SL",name:"IrisColumnStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ce)':{tag:'(0019,"SIEMENS RA PLANE A",ce)',vr:"SL",name:"IrisColumnEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cf)':{tag:'(0019,"SIEMENS RA PLANE A",cf)',vr:"SL",name:"IrisAngulation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d1)':{tag:'(0019,"SIEMENS RA PLANE A",d1)',vr:"SS",name:"NumberOfFramesPlane",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d2)':{tag:'(0019,"SIEMENS RA PLANE A",d2)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d3)':{tag:'(0019,"SIEMENS RA PLANE A",d3)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d4)':{tag:'(0019,"SIEMENS RA PLANE A",d4)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d5)':{tag:'(0019,"SIEMENS RA PLANE A",d5)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d6)':{tag:'(0019,"SIEMENS RA PLANE A",d6)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d7)':{tag:'(0019,"SIEMENS RA PLANE A",d7)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d8)':{tag:'(0019,"SIEMENS RA PLANE A",d8)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d9)':{tag:'(0019,"SIEMENS RA PLANE A",d9)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",da)':{tag:'(0019,"SIEMENS RA PLANE A",da)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",db)':{tag:'(0019,"SIEMENS RA PLANE A",db)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",dc)':{tag:'(0019,"SIEMENS RA PLANE A",dc)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",dd)':{tag:'(0019,"SIEMENS RA PLANE A",dd)',vr:"SL",name:"AnatomicBackground",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",de)':{tag:'(0019,"SIEMENS RA PLANE A",de)',vr:"SL",name:"AutoWindowBase",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",df)':{tag:'(0019,"SIEMENS RA PLANE A",df)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",e0)':{tag:'(0019,"SIEMENS RA PLANE A",e0)',vr:"SL",name:"Internal",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",28)':{tag:'(0011,"SIEMENS RA PLANE B",28)',vr:"SL",name:"FluoroTimerB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",29)':{tag:'(0011,"SIEMENS RA PLANE B",29)',vr:"SL",name:"FluoroSkinDoseB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",2a)':{tag:'(0011,"SIEMENS RA PLANE B",2a)',vr:"SL",name:"TotalSkinDoseB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",2b)':{tag:'(0011,"SIEMENS RA PLANE B",2b)',vr:"SL",name:"FluoroDoseAreaProductB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",2c)':{tag:'(0011,"SIEMENS RA PLANE B",2c)',vr:"SL",name:"TotalDoseAreaProductB",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",18)':{tag:'(0019,"SIEMENS RA PLANE B",18)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",19)':{tag:'(0019,"SIEMENS RA PLANE B",19)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1a)':{tag:'(0019,"SIEMENS RA PLANE B",1a)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1b)':{tag:'(0019,"SIEMENS RA PLANE B",1b)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1c)':{tag:'(0019,"SIEMENS RA PLANE B",1c)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1d)':{tag:'(0019,"SIEMENS RA PLANE B",1d)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1e)':{tag:'(0019,"SIEMENS RA PLANE B",1e)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1f)':{tag:'(0019,"SIEMENS RA PLANE B",1f)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",20)':{tag:'(0019,"SIEMENS RA PLANE B",20)',vr:"SL",name:"SystemCalibFactorPlaneB",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",22)':{tag:'(0019,"SIEMENS RA PLANE B",22)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",24)':{tag:'(0019,"SIEMENS RA PLANE B",24)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",26)':{tag:'(0019,"SIEMENS RA PLANE B",26)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",28)':{tag:'(0019,"SIEMENS RA PLANE B",28)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",2a)':{tag:'(0019,"SIEMENS RA PLANE B",2a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",2c)':{tag:'(0019,"SIEMENS RA PLANE B",2c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",2e)':{tag:'(0019,"SIEMENS RA PLANE B",2e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",30)':{tag:'(0019,"SIEMENS RA PLANE B",30)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",32)':{tag:'(0019,"SIEMENS RA PLANE B",32)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",34)':{tag:'(0019,"SIEMENS RA PLANE B",34)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",36)':{tag:'(0019,"SIEMENS RA PLANE B",36)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",38)':{tag:'(0019,"SIEMENS RA PLANE B",38)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",3a)':{tag:'(0019,"SIEMENS RA PLANE B",3a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",3c)':{tag:'(0019,"SIEMENS RA PLANE B",3c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",3e)':{tag:'(0019,"SIEMENS RA PLANE B",3e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",40)':{tag:'(0019,"SIEMENS RA PLANE B",40)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",42)':{tag:'(0019,"SIEMENS RA PLANE B",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",44)':{tag:'(0019,"SIEMENS RA PLANE B",44)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",46)':{tag:'(0019,"SIEMENS RA PLANE B",46)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",48)':{tag:'(0019,"SIEMENS RA PLANE B",48)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",4a)':{tag:'(0019,"SIEMENS RA PLANE B",4a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",4c)':{tag:'(0019,"SIEMENS RA PLANE B",4c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",4e)':{tag:'(0019,"SIEMENS RA PLANE B",4e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",50)':{tag:'(0019,"SIEMENS RA PLANE B",50)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",52)':{tag:'(0019,"SIEMENS RA PLANE B",52)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",54)':{tag:'(0019,"SIEMENS RA PLANE B",54)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",56)':{tag:'(0019,"SIEMENS RA PLANE B",56)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",58)':{tag:'(0019,"SIEMENS RA PLANE B",58)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",5a)':{tag:'(0019,"SIEMENS RA PLANE B",5a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",5c)':{tag:'(0019,"SIEMENS RA PLANE B",5c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",5e)':{tag:'(0019,"SIEMENS RA PLANE B",5e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",60)':{tag:'(0019,"SIEMENS RA PLANE B",60)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",62)':{tag:'(0019,"SIEMENS RA PLANE B",62)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",64)':{tag:'(0019,"SIEMENS RA PLANE B",64)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",66)':{tag:'(0019,"SIEMENS RA PLANE B",66)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",68)':{tag:'(0019,"SIEMENS RA PLANE B",68)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",6a)':{tag:'(0019,"SIEMENS RA PLANE B",6a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",6c)':{tag:'(0019,"SIEMENS RA PLANE B",6c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",6e)':{tag:'(0019,"SIEMENS RA PLANE B",6e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",70)':{tag:'(0019,"SIEMENS RA PLANE B",70)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",72)':{tag:'(0019,"SIEMENS RA PLANE B",72)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",74)':{tag:'(0019,"SIEMENS RA PLANE B",74)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",76)':{tag:'(0019,"SIEMENS RA PLANE B",76)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",78)':{tag:'(0019,"SIEMENS RA PLANE B",78)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",7a)':{tag:'(0019,"SIEMENS RA PLANE B",7a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",7c)':{tag:'(0019,"SIEMENS RA PLANE B",7c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",7e)':{tag:'(0019,"SIEMENS RA PLANE B",7e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",80)':{tag:'(0019,"SIEMENS RA PLANE B",80)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",82)':{tag:'(0019,"SIEMENS RA PLANE B",82)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",84)':{tag:'(0019,"SIEMENS RA PLANE B",84)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",86)':{tag:'(0019,"SIEMENS RA PLANE B",86)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",88)':{tag:'(0019,"SIEMENS RA PLANE B",88)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",8a)':{tag:'(0019,"SIEMENS RA PLANE B",8a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",8c)':{tag:'(0019,"SIEMENS RA PLANE B",8c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",8e)':{tag:'(0019,"SIEMENS RA PLANE B",8e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",90)':{tag:'(0019,"SIEMENS RA PLANE B",90)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",92)':{tag:'(0019,"SIEMENS RA PLANE B",92)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",94)':{tag:'(0019,"SIEMENS RA PLANE B",94)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",96)':{tag:'(0019,"SIEMENS RA PLANE B",96)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",98)':{tag:'(0019,"SIEMENS RA PLANE B",98)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",9a)':{tag:'(0019,"SIEMENS RA PLANE B",9a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",9c)':{tag:'(0019,"SIEMENS RA PLANE B",9c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",9e)':{tag:'(0019,"SIEMENS RA PLANE B",9e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a0)':{tag:'(0019,"SIEMENS RA PLANE B",a0)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a2)':{tag:'(0019,"SIEMENS RA PLANE B",a2)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a4)':{tag:'(0019,"SIEMENS RA PLANE B",a4)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a6)':{tag:'(0019,"SIEMENS RA PLANE B",a6)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a8)':{tag:'(0019,"SIEMENS RA PLANE B",a8)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",aa)':{tag:'(0019,"SIEMENS RA PLANE B",aa)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",ac)':{tag:'(0019,"SIEMENS RA PLANE B",ac)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",10)':{tag:'(0011,"SIEMENS RIS",10)',vr:"LT",name:"PatientUID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",11)':{tag:'(0011,"SIEMENS RIS",11)',vr:"LT",name:"PatientID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",20)':{tag:'(0011,"SIEMENS RIS",20)',vr:"DA",name:"PatientRegistrationDate",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",21)':{tag:'(0011,"SIEMENS RIS",21)',vr:"TM",name:"PatientRegistrationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",30)':{tag:'(0011,"SIEMENS RIS",30)',vr:"LT",name:"PatientnameRIS",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",31)':{tag:'(0011,"SIEMENS RIS",31)',vr:"LT",name:"PatientprenameRIS",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",40)':{tag:'(0011,"SIEMENS RIS",40)',vr:"LT",name:"PatientHospitalStatus",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",41)':{tag:'(0011,"SIEMENS RIS",41)',vr:"LT",name:"MedicalAlerts",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",42)':{tag:'(0011,"SIEMENS RIS",42)',vr:"LT",name:"ContrastAllergies",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS RIS",10)':{tag:'(0031,"SIEMENS RIS",10)',vr:"LT",name:"RequestUID",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS RIS",45)':{tag:'(0031,"SIEMENS RIS",45)',vr:"LT",name:"RequestingPhysician",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS RIS",50)':{tag:'(0031,"SIEMENS RIS",50)',vr:"LT",name:"RequestedPhysician",vm:"1",version:"PrivateTag"},'(0033,"SIEMENS RIS",10)':{tag:'(0033,"SIEMENS RIS",10)',vr:"LT",name:"PatientStudyUID",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",00)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",00)',vr:"US",name:"AcquisitionType",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",01)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",01)',vr:"US",name:"AcquisitionMode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",02)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",02)',vr:"US",name:"FootswitchIndex",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",03)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",03)',vr:"US",name:"AcquisitionRoom",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",04)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",04)',vr:"SL",name:"CurrentTimeProduct",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",05)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",05)',vr:"SL",name:"Dose",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",06)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",06)',vr:"SL",name:"SkinDosePercent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",07)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",07)',vr:"SL",name:"SkinDoseAccumulation",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",08)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",08)',vr:"SL",name:"SkinDoseRate",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0A)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0A)',vr:"UL",name:"CopperFilter",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0B)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0B)',vr:"US",name:"MeasuringField",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0C)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0C)',vr:"SS",name:"PostBlankingCircle",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0D)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0D)',vr:"SS",name:"DynaAngles",vm:"2-2n",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0E)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0E)',vr:"SS",name:"TotalSteps",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0F)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0F)',vr:"SL",name:"DynaXRayInfo",vm:"3-3n",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",10)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",10)',vr:"US",name:"ModalityLUTInputGamma",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",11)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",11)',vr:"US",name:"ModalityLUTOutputGamma",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",12)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",12)',vr:"OB",name:"SH_STPAR",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",13)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",13)',vr:"US",name:"AcquisitionZoom",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",14)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",14)',vr:"SS",name:"DynaAngulationStepWidth",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",15)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",15)',vr:"US",name:"Harmonization",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",16)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",16)',vr:"US",name:"DRSingleFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",17)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",17)',vr:"SL",name:"SourceToIsocenter",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",18)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",18)',vr:"US",name:"PressureData",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",19)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",19)',vr:"SL",name:"ECGIndexArray",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1A)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1A)',vr:"US",name:"FDFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1B)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1B)',vr:"OB",name:"SH_ZOOM",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1C)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1C)',vr:"OB",name:"SH_COLPAR",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1D)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1D)',vr:"US",name:"K_Factor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1E)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1E)',vr:"US",name:"EVE",vm:"8",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1F)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1F)',vr:"SL",name:"TotalSceneTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",20)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",20)',vr:"US",name:"RestoreFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",21)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",21)',vr:"US",name:"StandMovementFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",22)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",22)',vr:"US",name:"FDRows",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",23)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",23)',vr:"US",name:"FDColumns",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",24)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",24)',vr:"US",name:"TableMovementFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",25)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",25)',vr:"LO",name:"OriginalOrganProgramName",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",26)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",26)',vr:"DS",name:"CrispyXPIFilter",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",00)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",00)',vr:"US",name:"ViewNative",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",01)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",01)',vr:"US",name:"OriginalSeriesNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",02)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",02)',vr:"US",name:"OriginalImageNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",03)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",03)',vr:"US",name:"WinCenter",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",04)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",04)',vr:"US",name:"WinWidth",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",05)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",05)',vr:"US",name:"WinBrightness",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",06)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",06)',vr:"US",name:"WinContrast",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",07)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",07)',vr:"US",name:"OriginalFrameNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",08)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",08)',vr:"US",name:"OriginalMaskFrameNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",09)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",09)',vr:"US",name:"Opac",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0A)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0A)',vr:"US",name:"OriginalNumberOfFrames",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0B)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0B)',vr:"DS",name:"OriginalSceneDuration",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0C)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0C)',vr:"LO",name:"IdentifierLOID",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0D)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0D)',vr:"SS",name:"OriginalSceneVFRInfo",vm:"1-n",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0E)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0E)',vr:"SS",name:"OriginalFrameECGPosition",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0F)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0F)',vr:"SS",name:"OriginalECG1stFrameOffset_retired",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",10)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",10)',vr:"SS",name:"ZoomFlag",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",11)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",11)',vr:"US",name:"Flex",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",12)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",12)',vr:"US",name:"NumberOfMaskFrames",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",13)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",13)',vr:"US",name:"NumberOfFillFrames",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",14)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",14)',vr:"US",name:"SeriesNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",15)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",15)',vr:"IS",name:"ImageNumber",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",00)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",00)',vr:"DS",name:"HorizontalCalibrationPixelSize",vm:"2",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",01)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",01)',vr:"DS",name:"VerticalCalibrationPixelSize",vm:"2",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",02)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",02)',vr:"LO",name:"CalibrationObject",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",03)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",03)',vr:"DS",name:"CalibrationObjectSize",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",04)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",04)',vr:"LO",name:"CalibrationMethod",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",05)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",05)',vr:"ST",name:"Filename",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",06)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",06)',vr:"IS",name:"FrameNumber",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",07)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",07)',vr:"IS",name:"CalibrationFactorMultiplicity",vm:"2",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",08)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",08)',vr:"IS",name:"CalibrationTODValue",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",00)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",00)',vr:"US",name:"ReviewMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",01)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",01)',vr:"US",name:"AnatomicalBackgroundPercent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",02)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",02)',vr:"US",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",03)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",03)',vr:"US",name:"ApplyAnatomicalBackground",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",04)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",04)',vr:"SS",name:"PixelShiftArray",vm:"4-4n",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",05)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",05)',vr:"US",name:"Brightness",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",06)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",06)',vr:"US",name:"Contrast",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",07)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",07)',vr:"US",name:"Enabled",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",08)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",08)',vr:"US",name:"NativeEdgeEnhancementPercentGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",09)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",09)',vr:"SS",name:"NativeEdgeEnhancementLUTIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0A)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0A)',vr:"SS",name:"NativeEdgeEnhancementKernelSize",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0B)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0B)',vr:"US",name:"SubtrEdgeEnhancementPercentGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0C)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0C)',vr:"SS",name:"SubtrEdgeEnhancementLUTIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0D)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0D)',vr:"SS",name:"SubtrEdgeEnhancementKernelSize",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0E)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0E)',vr:"US",name:"FadePercent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0F)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0F)',vr:"US",name:"FlippedBeforeLateralityApplied",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",10)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",10)',vr:"US",name:"ApplyFade",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",12)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",12)',vr:"US",name:"Zoom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",13)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",13)',vr:"SS",name:"PanX",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",14)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",14)',vr:"SS",name:"PanY",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",15)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",15)',vr:"SS",name:"NativeEdgeEnhancementAdvPercGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",16)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",16)',vr:"SS",name:"SubtrEdgeEnhancementAdvPercGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",17)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",17)',vr:"US",name:"InvertFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1A)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1A)',vr:"OB",name:"Quant1KOverlay",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1B)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1B)',vr:"US",name:"OriginalResolution",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1C)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1C)',vr:"DS",name:"AutoWindowCenter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1D)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1D)',vr:"DS",name:"AutoWindowWidth",vm:"1",version:"PrivateTag"},'(0009,"SIENET",01)':{tag:'(0009,"SIENET",01)',vr:"US",name:"SIENETCommandField",vm:"1",version:"PrivateTag"},'(0009,"SIENET",14)':{tag:'(0009,"SIENET",14)',vr:"LT",name:"ReceiverPLA",vm:"1",version:"PrivateTag"},'(0009,"SIENET",16)':{tag:'(0009,"SIENET",16)',vr:"US",name:"TransferPriority",vm:"1",version:"PrivateTag"},'(0009,"SIENET",29)':{tag:'(0009,"SIENET",29)',vr:"LT",name:"ActualUser",vm:"1",version:"PrivateTag"},'(0095,"SIENET",01)':{tag:'(0095,"SIENET",01)',vr:"LT",name:"ExaminationFolderID",vm:"1",version:"PrivateTag"},'(0095,"SIENET",04)':{tag:'(0095,"SIENET",04)',vr:"UL",name:"FolderReportedStatus",vm:"1",version:"PrivateTag"},'(0095,"SIENET",05)':{tag:'(0095,"SIENET",05)',vr:"LT",name:"FolderReportingRadiologist",vm:"1",version:"PrivateTag"},'(0095,"SIENET",07)':{tag:'(0095,"SIENET",07)',vr:"LT",name:"SIENETISAPLA",vm:"1",version:"PrivateTag"},'(0099,"SIENET",02)':{tag:'(0099,"SIENET",02)',vr:"UL",name:"DataObjectAttributes",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",10)':{tag:'(0009,"SPI RELEASE 1",10)',vr:"LT",name:"Comments",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",15)':{tag:'(0009,"SPI RELEASE 1",15)',vr:"LO",name:"SPIImageUID",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",40)':{tag:'(0009,"SPI RELEASE 1",40)',vr:"US",name:"DataObjectType",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",41)':{tag:'(0009,"SPI RELEASE 1",41)',vr:"LO",name:"DataObjectSubtype",vm:"1",version:"PrivateTag"},'(0011,"SPI RELEASE 1",10)':{tag:'(0011,"SPI RELEASE 1",10)',vr:"LO",name:"Organ",vm:"1",version:"PrivateTag"},'(0011,"SPI RELEASE 1",15)':{tag:'(0011,"SPI RELEASE 1",15)',vr:"LO",name:"AllergyIndication",vm:"1",version:"PrivateTag"},'(0011,"SPI RELEASE 1",20)':{tag:'(0011,"SPI RELEASE 1",20)',vr:"LO",name:"Pregnancy",vm:"1",version:"PrivateTag"},'(0029,"SPI RELEASE 1",60)':{tag:'(0029,"SPI RELEASE 1",60)',vr:"LT",name:"CompressionAlgorithm",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",10)':{tag:'(0009,"SPI Release 1",10)',vr:"LT",name:"Comments",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",15)':{tag:'(0009,"SPI Release 1",15)',vr:"LO",name:"SPIImageUID",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",40)':{tag:'(0009,"SPI Release 1",40)',vr:"US",name:"DataObjectType",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",41)':{tag:'(0009,"SPI Release 1",41)',vr:"LO",name:"DataObjectSubtype",vm:"1",version:"PrivateTag"},'(0011,"SPI Release 1",10)':{tag:'(0011,"SPI Release 1",10)',vr:"LO",name:"Organ",vm:"1",version:"PrivateTag"},'(0011,"SPI Release 1",15)':{tag:'(0011,"SPI Release 1",15)',vr:"LO",name:"AllergyIndication",vm:"1",version:"PrivateTag"},'(0011,"SPI Release 1",20)':{tag:'(0011,"SPI Release 1",20)',vr:"LO",name:"Pregnancy",vm:"1",version:"PrivateTag"},'(0029,"SPI Release 1",60)':{tag:'(0029,"SPI Release 1",60)',vr:"LT",name:"CompressionAlgorithm",vm:"1",version:"PrivateTag"},'(0009,"SPI",10)':{tag:'(0009,"SPI",10)',vr:"LO",name:"Comments",vm:"1",version:"PrivateTag"},'(0009,"SPI",15)':{tag:'(0009,"SPI",15)',vr:"LO",name:"SPIImageUID",vm:"1",version:"PrivateTag"},'(0009,"SPI",40)':{tag:'(0009,"SPI",40)',vr:"US",name:"DataObjectType",vm:"1",version:"PrivateTag"},'(0009,"SPI",41)':{tag:'(0009,"SPI",41)',vr:"LT",name:"DataObjectSubtype",vm:"1",version:"PrivateTag"},'(0011,"SPI",10)':{tag:'(0011,"SPI",10)',vr:"LT",name:"Organ",vm:"1",version:"PrivateTag"},'(0011,"SPI",15)':{tag:'(0011,"SPI",15)',vr:"LT",name:"AllergyIndication",vm:"1",version:"PrivateTag"},'(0011,"SPI",20)':{tag:'(0011,"SPI",20)',vr:"LT",name:"Pregnancy",vm:"1",version:"PrivateTag"},'(0029,"SPI",60)':{tag:'(0029,"SPI",60)',vr:"LT",name:"CompressionAlgorithm",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",00)':{tag:'(0009,"SPI-P Release 1",00)',vr:"LT",name:"DataObjectRecognitionCode",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",04)':{tag:'(0009,"SPI-P Release 1",04)',vr:"LO",name:"ImageDataConsistence",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",08)':{tag:'(0009,"SPI-P Release 1",08)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",12)':{tag:'(0009,"SPI-P Release 1",12)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",15)':{tag:'(0009,"SPI-P Release 1",15)',vr:"LO",name:"UniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",16)':{tag:'(0009,"SPI-P Release 1",16)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",18)':{tag:'(0009,"SPI-P Release 1",18)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",21)':{tag:'(0009,"SPI-P Release 1",21)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",31)':{tag:'(0009,"SPI-P Release 1",31)',vr:"LT",name:"PACSUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",34)':{tag:'(0009,"SPI-P Release 1",34)',vr:"LT",name:"ClusterUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",38)':{tag:'(0009,"SPI-P Release 1",38)',vr:"LT",name:"SystemUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",39)':{tag:'(0009,"SPI-P Release 1",39)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",51)':{tag:'(0009,"SPI-P Release 1",51)',vr:"LT",name:"StudyUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",61)':{tag:'(0009,"SPI-P Release 1",61)',vr:"LT",name:"SeriesUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",91)':{tag:'(0009,"SPI-P Release 1",91)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f2)':{tag:'(0009,"SPI-P Release 1",f2)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f3)':{tag:'(0009,"SPI-P Release 1",f3)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f4)':{tag:'(0009,"SPI-P Release 1",f4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f5)':{tag:'(0009,"SPI-P Release 1",f5)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f7)':{tag:'(0009,"SPI-P Release 1",f7)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",10)':{tag:'(0011,"SPI-P Release 1",10)',vr:"LT",name:"PatientEntryID",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",21)':{tag:'(0011,"SPI-P Release 1",21)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",22)':{tag:'(0011,"SPI-P Release 1",22)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",31)':{tag:'(0011,"SPI-P Release 1",31)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",32)':{tag:'(0011,"SPI-P Release 1",32)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",00)':{tag:'(0019,"SPI-P Release 1",00)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",01)':{tag:'(0019,"SPI-P Release 1",01)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",02)':{tag:'(0019,"SPI-P Release 1",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",10)':{tag:'(0019,"SPI-P Release 1",10)',vr:"US",name:"MainsFrequency",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",25)':{tag:'(0019,"SPI-P Release 1",25)',vr:"LT",name:"OriginalPixelDataQuality",vm:"1-n",version:"PrivateTag"},'(0019,"SPI-P Release 1",30)':{tag:'(0019,"SPI-P Release 1",30)',vr:"US",name:"ECGTriggering",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",31)':{tag:'(0019,"SPI-P Release 1",31)',vr:"UN",name:"ECG1Offset",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",32)':{tag:'(0019,"SPI-P Release 1",32)',vr:"UN",name:"ECG2Offset1",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",33)':{tag:'(0019,"SPI-P Release 1",33)',vr:"UN",name:"ECG2Offset2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",50)':{tag:'(0019,"SPI-P Release 1",50)',vr:"US",name:"VideoScanMode",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",51)':{tag:'(0019,"SPI-P Release 1",51)',vr:"US",name:"VideoLineRate",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",60)':{tag:'(0019,"SPI-P Release 1",60)',vr:"US",name:"XrayTechnique",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",61)':{tag:'(0019,"SPI-P Release 1",61)',vr:"DS",name:"ImageIdentifierFromat",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",62)':{tag:'(0019,"SPI-P Release 1",62)',vr:"US",name:"IrisDiaphragm",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",63)':{tag:'(0019,"SPI-P Release 1",63)',vr:"CS",name:"Filter",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",64)':{tag:'(0019,"SPI-P Release 1",64)',vr:"CS",name:"CineParallel",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",65)':{tag:'(0019,"SPI-P Release 1",65)',vr:"CS",name:"CineMaster",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",70)':{tag:'(0019,"SPI-P Release 1",70)',vr:"US",name:"ExposureChannel",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",71)':{tag:'(0019,"SPI-P Release 1",71)',vr:"UN",name:"ExposureChannelFirstImage",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",72)':{tag:'(0019,"SPI-P Release 1",72)',vr:"US",name:"ProcessingChannel",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",80)':{tag:'(0019,"SPI-P Release 1",80)',vr:"DS",name:"AcquisitionDelay",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",81)':{tag:'(0019,"SPI-P Release 1",81)',vr:"UN",name:"RelativeImageTime",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",90)':{tag:'(0019,"SPI-P Release 1",90)',vr:"CS",name:"VideoWhiteCompression",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",a0)':{tag:'(0019,"SPI-P Release 1",a0)',vr:"US",name:"Angulation",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",a1)':{tag:'(0019,"SPI-P Release 1",a1)',vr:"US",name:"Rotation",vm:"1",version:"PrivateTag"},'(0021,"SPI-P Release 1",12)':{tag:'(0021,"SPI-P Release 1",12)',vr:"LT",name:"SeriesUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0021,"SPI-P Release 1",14)':{tag:'(0021,"SPI-P Release 1",14)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",00)':{tag:'(0029,"SPI-P Release 1",00)',vr:"DS",name:"Unknown",vm:"4",version:"PrivateTag"},'(0029,"SPI-P Release 1",20)':{tag:'(0029,"SPI-P Release 1",20)',vr:"DS",name:"PixelAspectRatio",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",25)':{tag:'(0029,"SPI-P Release 1",25)',vr:"LO",name:"ProcessedPixelDataQuality",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1",30)':{tag:'(0029,"SPI-P Release 1",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",38)':{tag:'(0029,"SPI-P Release 1",38)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",60)':{tag:'(0029,"SPI-P Release 1",60)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",61)':{tag:'(0029,"SPI-P Release 1",61)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",67)':{tag:'(0029,"SPI-P Release 1",67)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",70)':{tag:'(0029,"SPI-P Release 1",70)',vr:"LT",name:"WindowID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",71)':{tag:'(0029,"SPI-P Release 1",71)',vr:"CS",name:"VideoInvertSubtracted",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",72)':{tag:'(0029,"SPI-P Release 1",72)',vr:"CS",name:"VideoInvertNonsubtracted",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",77)':{tag:'(0029,"SPI-P Release 1",77)',vr:"CS",name:"WindowSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",78)':{tag:'(0029,"SPI-P Release 1",78)',vr:"LT",name:"ECGDisplayPrintingID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",79)':{tag:'(0029,"SPI-P Release 1",79)',vr:"CS",name:"ECGDisplayPrinting",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",7e)':{tag:'(0029,"SPI-P Release 1",7e)',vr:"CS",name:"ECGDisplayPrintingEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",7f)':{tag:'(0029,"SPI-P Release 1",7f)',vr:"CS",name:"ECGDisplayPrintingSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",80)':{tag:'(0029,"SPI-P Release 1",80)',vr:"LT",name:"PhysiologicalDisplayID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",81)':{tag:'(0029,"SPI-P Release 1",81)',vr:"US",name:"PreferredPhysiologicalChannelDisplay",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",8e)':{tag:'(0029,"SPI-P Release 1",8e)',vr:"CS",name:"PhysiologicalDisplayEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",8f)':{tag:'(0029,"SPI-P Release 1",8f)',vr:"CS",name:"PhysiologicalDisplaySelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",c0)':{tag:'(0029,"SPI-P Release 1",c0)',vr:"LT",name:"FunctionalShutterID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",c1)':{tag:'(0029,"SPI-P Release 1",c1)',vr:"US",name:"FieldOfShutter",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",c5)':{tag:'(0029,"SPI-P Release 1",c5)',vr:"LT",name:"FieldOfShutterRectangle",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",ce)':{tag:'(0029,"SPI-P Release 1",ce)',vr:"CS",name:"ShutterEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",cf)':{tag:'(0029,"SPI-P Release 1",cf)',vr:"CS",name:"ShutterSelectStatus",vm:"1",version:"PrivateTag"},'(7FE1,"SPI-P Release 1",10)':{tag:'(7FE1,"SPI-P Release 1",10)',vr:"ox",name:"PixelData",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1;1",c0)':{tag:'(0009,"SPI-P Release 1;1",c0)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1;1",c1)':{tag:'(0009,"SPI-P Release 1;1",c1)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",00)':{tag:'(0019,"SPI-P Release 1;1",00)',vr:"UN",name:"PhysiologicalDataType",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",01)':{tag:'(0019,"SPI-P Release 1;1",01)',vr:"UN",name:"PhysiologicalDataChannelAndKind",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",02)':{tag:'(0019,"SPI-P Release 1;1",02)',vr:"US",name:"SampleBitsAllocated",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",03)':{tag:'(0019,"SPI-P Release 1;1",03)',vr:"US",name:"SampleBitsStored",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",04)':{tag:'(0019,"SPI-P Release 1;1",04)',vr:"US",name:"SampleHighBit",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",05)':{tag:'(0019,"SPI-P Release 1;1",05)',vr:"US",name:"SampleRepresentation",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",06)':{tag:'(0019,"SPI-P Release 1;1",06)',vr:"UN",name:"SmallestSampleValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",07)':{tag:'(0019,"SPI-P Release 1;1",07)',vr:"UN",name:"LargestSampleValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",08)':{tag:'(0019,"SPI-P Release 1;1",08)',vr:"UN",name:"NumberOfSamples",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",09)':{tag:'(0019,"SPI-P Release 1;1",09)',vr:"UN",name:"SampleData",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",0a)':{tag:'(0019,"SPI-P Release 1;1",0a)',vr:"UN",name:"SampleRate",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",10)':{tag:'(0019,"SPI-P Release 1;1",10)',vr:"UN",name:"PhysiologicalDataType2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",11)':{tag:'(0019,"SPI-P Release 1;1",11)',vr:"UN",name:"PhysiologicalDataChannelAndKind2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",12)':{tag:'(0019,"SPI-P Release 1;1",12)',vr:"US",name:"SampleBitsAllocated2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",13)':{tag:'(0019,"SPI-P Release 1;1",13)',vr:"US",name:"SampleBitsStored2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",14)':{tag:'(0019,"SPI-P Release 1;1",14)',vr:"US",name:"SampleHighBit2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",15)':{tag:'(0019,"SPI-P Release 1;1",15)',vr:"US",name:"SampleRepresentation2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",16)':{tag:'(0019,"SPI-P Release 1;1",16)',vr:"UN",name:"SmallestSampleValue2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",17)':{tag:'(0019,"SPI-P Release 1;1",17)',vr:"UN",name:"LargestSampleValue2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",18)':{tag:'(0019,"SPI-P Release 1;1",18)',vr:"UN",name:"NumberOfSamples2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",19)':{tag:'(0019,"SPI-P Release 1;1",19)',vr:"UN",name:"SampleData2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",1a)':{tag:'(0019,"SPI-P Release 1;1",1a)',vr:"UN",name:"SampleRate2",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",00)':{tag:'(0029,"SPI-P Release 1;1",00)',vr:"LT",name:"ZoomID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",01)':{tag:'(0029,"SPI-P Release 1;1",01)',vr:"DS",name:"ZoomRectangle",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",03)':{tag:'(0029,"SPI-P Release 1;1",03)',vr:"DS",name:"ZoomFactor",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",04)':{tag:'(0029,"SPI-P Release 1;1",04)',vr:"US",name:"ZoomFunction",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",0e)':{tag:'(0029,"SPI-P Release 1;1",0e)',vr:"CS",name:"ZoomEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",0f)':{tag:'(0029,"SPI-P Release 1;1",0f)',vr:"CS",name:"ZoomSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",40)':{tag:'(0029,"SPI-P Release 1;1",40)',vr:"LT",name:"MagnifyingGlassID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",41)':{tag:'(0029,"SPI-P Release 1;1",41)',vr:"DS",name:"MagnifyingGlassRectangle",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",43)':{tag:'(0029,"SPI-P Release 1;1",43)',vr:"DS",name:"MagnifyingGlassFactor",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",44)':{tag:'(0029,"SPI-P Release 1;1",44)',vr:"US",name:"MagnifyingGlassFunction",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",4e)':{tag:'(0029,"SPI-P Release 1;1",4e)',vr:"CS",name:"MagnifyingGlassEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",4f)':{tag:'(0029,"SPI-P Release 1;1",4f)',vr:"CS",name:"MagnifyingGlassSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",00)':{tag:'(0029,"SPI-P Release 1;2",00)',vr:"LT",name:"SubtractionMaskID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",04)':{tag:'(0029,"SPI-P Release 1;2",04)',vr:"UN",name:"MaskingFunction",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",0c)':{tag:'(0029,"SPI-P Release 1;2",0c)',vr:"UN",name:"ProprietaryMaskingParameters",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",1e)':{tag:'(0029,"SPI-P Release 1;2",1e)',vr:"CS",name:"SubtractionMaskEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",1f)':{tag:'(0029,"SPI-P Release 1;2",1f)',vr:"CS",name:"SubtractionMaskSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",00)':{tag:'(0029,"SPI-P Release 1;3",00)',vr:"LT",name:"ImageEnhancementID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",01)':{tag:'(0029,"SPI-P Release 1;3",01)',vr:"LT",name:"ImageEnhancement",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",02)':{tag:'(0029,"SPI-P Release 1;3",02)',vr:"LT",name:"ConvolutionID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",03)':{tag:'(0029,"SPI-P Release 1;3",03)',vr:"LT",name:"ConvolutionType",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",04)':{tag:'(0029,"SPI-P Release 1;3",04)',vr:"LT",name:"ConvolutionKernelSizeID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",05)':{tag:'(0029,"SPI-P Release 1;3",05)',vr:"US",name:"ConvolutionKernelSize",vm:"2",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",06)':{tag:'(0029,"SPI-P Release 1;3",06)',vr:"US",name:"ConvolutionKernel",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",0c)':{tag:'(0029,"SPI-P Release 1;3",0c)',vr:"DS",name:"EnhancementGain",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",1e)':{tag:'(0029,"SPI-P Release 1;3",1e)',vr:"CS",name:"ImageEnhancementEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",1f)':{tag:'(0029,"SPI-P Release 1;3",1f)',vr:"CS",name:"ImageEnhancementSelectStatus",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 2;1",18)':{tag:'(0011,"SPI-P Release 2;1",18)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"SPI-P Release 2;1",0d)':{tag:'(0023,"SPI-P Release 2;1",0d)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"SPI-P Release 2;1",0e)':{tag:'(0023,"SPI-P Release 2;1",0e)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",00)':{tag:'(0009,"SPI-P-GV-CT Release 1",00)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",10)':{tag:'(0009,"SPI-P-GV-CT Release 1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",20)':{tag:'(0009,"SPI-P-GV-CT Release 1",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",30)':{tag:'(0009,"SPI-P-GV-CT Release 1",30)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",40)':{tag:'(0009,"SPI-P-GV-CT Release 1",40)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",50)':{tag:'(0009,"SPI-P-GV-CT Release 1",50)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",60)':{tag:'(0009,"SPI-P-GV-CT Release 1",60)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",70)':{tag:'(0009,"SPI-P-GV-CT Release 1",70)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",75)':{tag:'(0009,"SPI-P-GV-CT Release 1",75)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",80)':{tag:'(0009,"SPI-P-GV-CT Release 1",80)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",90)':{tag:'(0009,"SPI-P-GV-CT Release 1",90)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",08)':{tag:'(0019,"SPI-P-GV-CT Release 1",08)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",09)':{tag:'(0019,"SPI-P-GV-CT Release 1",09)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",0a)':{tag:'(0019,"SPI-P-GV-CT Release 1",0a)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",10)':{tag:'(0019,"SPI-P-GV-CT Release 1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",20)':{tag:'(0019,"SPI-P-GV-CT Release 1",20)',vr:"TM",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",50)':{tag:'(0019,"SPI-P-GV-CT Release 1",50)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",60)':{tag:'(0019,"SPI-P-GV-CT Release 1",60)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",61)':{tag:'(0019,"SPI-P-GV-CT Release 1",61)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",63)':{tag:'(0019,"SPI-P-GV-CT Release 1",63)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",64)':{tag:'(0019,"SPI-P-GV-CT Release 1",64)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",65)':{tag:'(0019,"SPI-P-GV-CT Release 1",65)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",70)':{tag:'(0019,"SPI-P-GV-CT Release 1",70)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",80)':{tag:'(0019,"SPI-P-GV-CT Release 1",80)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",81)':{tag:'(0019,"SPI-P-GV-CT Release 1",81)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",90)':{tag:'(0019,"SPI-P-GV-CT Release 1",90)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a0)':{tag:'(0019,"SPI-P-GV-CT Release 1",a0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a1)':{tag:'(0019,"SPI-P-GV-CT Release 1",a1)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a2)':{tag:'(0019,"SPI-P-GV-CT Release 1",a2)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a3)':{tag:'(0019,"SPI-P-GV-CT Release 1",a3)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",b0)':{tag:'(0019,"SPI-P-GV-CT Release 1",b0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",b1)':{tag:'(0019,"SPI-P-GV-CT Release 1",b1)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",20)':{tag:'(0021,"SPI-P-GV-CT Release 1",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",30)':{tag:'(0021,"SPI-P-GV-CT Release 1",30)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",40)':{tag:'(0021,"SPI-P-GV-CT Release 1",40)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",50)':{tag:'(0021,"SPI-P-GV-CT Release 1",50)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",60)':{tag:'(0021,"SPI-P-GV-CT Release 1",60)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",70)':{tag:'(0021,"SPI-P-GV-CT Release 1",70)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",80)':{tag:'(0021,"SPI-P-GV-CT Release 1",80)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",90)':{tag:'(0021,"SPI-P-GV-CT Release 1",90)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a0)':{tag:'(0021,"SPI-P-GV-CT Release 1",a0)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a1)':{tag:'(0021,"SPI-P-GV-CT Release 1",a1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a2)':{tag:'(0021,"SPI-P-GV-CT Release 1",a2)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a3)':{tag:'(0021,"SPI-P-GV-CT Release 1",a3)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a4)':{tag:'(0021,"SPI-P-GV-CT Release 1",a4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",b0)':{tag:'(0021,"SPI-P-GV-CT Release 1",b0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",c0)':{tag:'(0021,"SPI-P-GV-CT Release 1",c0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",10)':{tag:'(0029,"SPI-P-GV-CT Release 1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",30)':{tag:'(0029,"SPI-P-GV-CT Release 1",30)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",31)':{tag:'(0029,"SPI-P-GV-CT Release 1",31)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",32)':{tag:'(0029,"SPI-P-GV-CT Release 1",32)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",33)':{tag:'(0029,"SPI-P-GV-CT Release 1",33)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",80)':{tag:'(0029,"SPI-P-GV-CT Release 1",80)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",90)':{tag:'(0029,"SPI-P-GV-CT Release 1",90)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",d0)':{tag:'(0029,"SPI-P-GV-CT Release 1",d0)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",d1)':{tag:'(0029,"SPI-P-GV-CT Release 1",d1)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-PCR Release 2",30)':{tag:'(0019,"SPI-P-PCR Release 2",30)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private-CWS Release 1",00)':{tag:'(0021,"SPI-P-Private-CWS Release 1",00)',vr:"LT",name:"WindowOfImagesID",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private-CWS Release 1",01)':{tag:'(0021,"SPI-P-Private-CWS Release 1",01)',vr:"CS",name:"WindowOfImagesType",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private-CWS Release 1",02)':{tag:'(0021,"SPI-P-Private-CWS Release 1",02)',vr:"IS",name:"WindowOfImagesScope",vm:"1-n",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",10)':{tag:'(0019,"SPI-P-Private-DCI Release 1",10)',vr:"UN",name:"ECGTimeMapDataBitsAllocated",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",11)':{tag:'(0019,"SPI-P-Private-DCI Release 1",11)',vr:"UN",name:"ECGTimeMapDataBitsStored",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",12)':{tag:'(0019,"SPI-P-Private-DCI Release 1",12)',vr:"UN",name:"ECGTimeMapDataHighBit",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",13)':{tag:'(0019,"SPI-P-Private-DCI Release 1",13)',vr:"UN",name:"ECGTimeMapDataRepresentation",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",14)':{tag:'(0019,"SPI-P-Private-DCI Release 1",14)',vr:"UN",name:"ECGTimeMapDataSmallestDataValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",15)':{tag:'(0019,"SPI-P-Private-DCI Release 1",15)',vr:"UN",name:"ECGTimeMapDataLargestDataValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",16)':{tag:'(0019,"SPI-P-Private-DCI Release 1",16)',vr:"UN",name:"ECGTimeMapDataNumberOfDataValues",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",17)':{tag:'(0019,"SPI-P-Private-DCI Release 1",17)',vr:"UN",name:"ECGTimeMapData",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private_CDS Release 1",40)':{tag:'(0021,"SPI-P-Private_CDS Release 1",40)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_CDS Release 1",00)':{tag:'(0029,"SPI-P-Private_CDS Release 1",00)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private_ICS Release 1",30)':{tag:'(0019,"SPI-P-Private_ICS Release 1",30)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private_ICS Release 1",31)':{tag:'(0019,"SPI-P-Private_ICS Release 1",31)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",08)':{tag:'(0029,"SPI-P-Private_ICS Release 1",08)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",0f)':{tag:'(0029,"SPI-P-Private_ICS Release 1",0f)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",10)':{tag:'(0029,"SPI-P-Private_ICS Release 1",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",1b)':{tag:'(0029,"SPI-P-Private_ICS Release 1",1b)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",1c)':{tag:'(0029,"SPI-P-Private_ICS Release 1",1c)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",21)':{tag:'(0029,"SPI-P-Private_ICS Release 1",21)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",43)':{tag:'(0029,"SPI-P-Private_ICS Release 1",43)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",44)':{tag:'(0029,"SPI-P-Private_ICS Release 1",44)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",4C)':{tag:'(0029,"SPI-P-Private_ICS Release 1",4C)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",67)':{tag:'(0029,"SPI-P-Private_ICS Release 1",67)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",68)':{tag:'(0029,"SPI-P-Private_ICS Release 1",68)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",6A)':{tag:'(0029,"SPI-P-Private_ICS Release 1",6A)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",6B)':{tag:'(0029,"SPI-P-Private_ICS Release 1",6B)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",00)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",00)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",05)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",05)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",06)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",06)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",20)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",20)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",21)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",21)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",CD)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",CD)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",00)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",00)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",01)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",01)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",02)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",02)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",03)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",03)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",04)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",04)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",05)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",05)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C0)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C0)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C1)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C1)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C2)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C2)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C3)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C3)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C4)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C4)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C5)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C5)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;4",02)':{tag:'(0029,"SPI-P-Private_ICS Release 1;4",02)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;4",9A)':{tag:'(0029,"SPI-P-Private_ICS Release 1;4",9A)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;4",E0)':{tag:'(0029,"SPI-P-Private_ICS Release 1;4",E0)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;5",50)':{tag:'(0029,"SPI-P-Private_ICS Release 1;5",50)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;5",55)':{tag:'(0029,"SPI-P-Private_ICS Release 1;5",55)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",10)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",10)',vr:"LT",name:"VideoBeamBoost",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",11)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",11)',vr:"US",name:"ChannelGeneratingVideoSync",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",12)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",12)',vr:"US",name:"VideoGain",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",13)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",13)',vr:"US",name:"VideoOffset",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",20)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",20)',vr:"DS",name:"RTDDataCompressionFactor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",11)':{tag:'(0029,"Silhouette Annot V1.0",11)',vr:"IS",name:"AnnotationName",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",12)':{tag:'(0029,"Silhouette Annot V1.0",12)',vr:"LT",name:"AnnotationFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",13)':{tag:'(0029,"Silhouette Annot V1.0",13)',vr:"LT",name:"AnnotationTextForegroundColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",14)':{tag:'(0029,"Silhouette Annot V1.0",14)',vr:"LT",name:"AnnotationTextBackgroundColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",15)':{tag:'(0029,"Silhouette Annot V1.0",15)',vr:"UL",name:"AnnotationTextBackingMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",16)':{tag:'(0029,"Silhouette Annot V1.0",16)',vr:"UL",name:"AnnotationTextJustification",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",17)':{tag:'(0029,"Silhouette Annot V1.0",17)',vr:"UL",name:"AnnotationTextLocation",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",18)':{tag:'(0029,"Silhouette Annot V1.0",18)',vr:"LT",name:"AnnotationTextString",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",19)':{tag:'(0029,"Silhouette Annot V1.0",19)',vr:"UL",name:"AnnotationTextAttachMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",20)':{tag:'(0029,"Silhouette Annot V1.0",20)',vr:"UL",name:"AnnotationTextCursorMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",21)':{tag:'(0029,"Silhouette Annot V1.0",21)',vr:"UL",name:"AnnotationTextShadowOffsetX",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",22)':{tag:'(0029,"Silhouette Annot V1.0",22)',vr:"UL",name:"AnnotationTextShadowOffsetY",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",23)':{tag:'(0029,"Silhouette Annot V1.0",23)',vr:"LT",name:"AnnotationLineColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",24)':{tag:'(0029,"Silhouette Annot V1.0",24)',vr:"UL",name:"AnnotationLineThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",25)':{tag:'(0029,"Silhouette Annot V1.0",25)',vr:"UL",name:"AnnotationLineType",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",26)':{tag:'(0029,"Silhouette Annot V1.0",26)',vr:"UL",name:"AnnotationLineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",27)':{tag:'(0029,"Silhouette Annot V1.0",27)',vr:"UL",name:"AnnotationLineDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",28)':{tag:'(0029,"Silhouette Annot V1.0",28)',vr:"UL",name:"AnnotationLineAttachMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",29)':{tag:'(0029,"Silhouette Annot V1.0",29)',vr:"UL",name:"AnnotationLinePointCount",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",30)':{tag:'(0029,"Silhouette Annot V1.0",30)',vr:"FD",name:"AnnotationLinePoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",31)':{tag:'(0029,"Silhouette Annot V1.0",31)',vr:"UL",name:"AnnotationLineControlSize",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",32)':{tag:'(0029,"Silhouette Annot V1.0",32)',vr:"LT",name:"AnnotationMarkerColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",33)':{tag:'(0029,"Silhouette Annot V1.0",33)',vr:"UL",name:"AnnotationMarkerType",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",34)':{tag:'(0029,"Silhouette Annot V1.0",34)',vr:"UL",name:"AnnotationMarkerSize",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",35)':{tag:'(0029,"Silhouette Annot V1.0",35)',vr:"FD",name:"AnnotationMarkerLocation",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",36)':{tag:'(0029,"Silhouette Annot V1.0",36)',vr:"UL",name:"AnnotationMarkerAttachMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",37)':{tag:'(0029,"Silhouette Annot V1.0",37)',vr:"LT",name:"AnnotationGeomColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",38)':{tag:'(0029,"Silhouette Annot V1.0",38)',vr:"UL",name:"AnnotationGeomThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",39)':{tag:'(0029,"Silhouette Annot V1.0",39)',vr:"UL",name:"AnnotationGeomLineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",40)':{tag:'(0029,"Silhouette Annot V1.0",40)',vr:"UL",name:"AnnotationGeomDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",41)':{tag:'(0029,"Silhouette Annot V1.0",41)',vr:"UL",name:"AnnotationGeomFillPattern",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",42)':{tag:'(0029,"Silhouette Annot V1.0",42)',vr:"UL",name:"AnnotationInteractivity",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",43)':{tag:'(0029,"Silhouette Annot V1.0",43)',vr:"FD",name:"AnnotationArrowLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",44)':{tag:'(0029,"Silhouette Annot V1.0",44)',vr:"FD",name:"AnnotationArrowAngle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",45)':{tag:'(0029,"Silhouette Annot V1.0",45)',vr:"UL",name:"AnnotationDontSave",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Graphics Export V1.0",00)':{tag:'(0029,"Silhouette Graphics Export V1.0",00)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",11)':{tag:'(0029,"Silhouette Line V1.0",11)',vr:"IS",name:"LineName",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",12)':{tag:'(0029,"Silhouette Line V1.0",12)',vr:"LT",name:"LineNameFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",13)':{tag:'(0029,"Silhouette Line V1.0",13)',vr:"UL",name:"LineNameDisplay",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",14)':{tag:'(0029,"Silhouette Line V1.0",14)',vr:"LT",name:"LineNormalColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",15)':{tag:'(0029,"Silhouette Line V1.0",15)',vr:"UL",name:"LineType",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",16)':{tag:'(0029,"Silhouette Line V1.0",16)',vr:"UL",name:"LineThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",17)':{tag:'(0029,"Silhouette Line V1.0",17)',vr:"UL",name:"LineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",18)':{tag:'(0029,"Silhouette Line V1.0",18)',vr:"UL",name:"LineDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",19)':{tag:'(0029,"Silhouette Line V1.0",19)',vr:"UL",name:"LineInteractivity",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",20)':{tag:'(0029,"Silhouette Line V1.0",20)',vr:"LT",name:"LineMeasurementColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",21)':{tag:'(0029,"Silhouette Line V1.0",21)',vr:"LT",name:"LineMeasurementFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",22)':{tag:'(0029,"Silhouette Line V1.0",22)',vr:"UL",name:"LineMeasurementDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",23)':{tag:'(0029,"Silhouette Line V1.0",23)',vr:"UL",name:"LinePointSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",24)':{tag:'(0029,"Silhouette Line V1.0",24)',vr:"FD",name:"LinePoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",25)':{tag:'(0029,"Silhouette Line V1.0",25)',vr:"UL",name:"LineControlPointSize",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",26)':{tag:'(0029,"Silhouette Line V1.0",26)',vr:"UL",name:"LineControlPointSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",27)':{tag:'(0029,"Silhouette Line V1.0",27)',vr:"FD",name:"LineControlPoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",28)':{tag:'(0029,"Silhouette Line V1.0",28)',vr:"LT",name:"LineLabel",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",29)':{tag:'(0029,"Silhouette Line V1.0",29)',vr:"UL",name:"LineDontSave",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",11)':{tag:'(0029,"Silhouette ROI V1.0",11)',vr:"IS",name:"ROIName",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",12)':{tag:'(0029,"Silhouette ROI V1.0",12)',vr:"LT",name:"ROINameFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",13)':{tag:'(0029,"Silhouette ROI V1.0",13)',vr:"LT",name:"ROINormalColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",14)':{tag:'(0029,"Silhouette ROI V1.0",14)',vr:"UL",name:"ROIFillPattern",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",15)':{tag:'(0029,"Silhouette ROI V1.0",15)',vr:"UL",name:"ROIBpSeg",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",16)':{tag:'(0029,"Silhouette ROI V1.0",16)',vr:"UN",name:"ROIBpSegPairs",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",17)':{tag:'(0029,"Silhouette ROI V1.0",17)',vr:"UL",name:"ROISeedSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",18)':{tag:'(0029,"Silhouette ROI V1.0",18)',vr:"UN",name:"ROISeeds",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",19)':{tag:'(0029,"Silhouette ROI V1.0",19)',vr:"UL",name:"ROILineThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",20)':{tag:'(0029,"Silhouette ROI V1.0",20)',vr:"UL",name:"ROILineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",21)':{tag:'(0029,"Silhouette ROI V1.0",21)',vr:"UL",name:"ROILineDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",22)':{tag:'(0029,"Silhouette ROI V1.0",22)',vr:"UL",name:"ROIInteractivity",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",23)':{tag:'(0029,"Silhouette ROI V1.0",23)',vr:"UL",name:"ROINamePosition",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",24)':{tag:'(0029,"Silhouette ROI V1.0",24)',vr:"UL",name:"ROINameDisplay",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",25)':{tag:'(0029,"Silhouette ROI V1.0",25)',vr:"LT",name:"ROILabel",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",26)':{tag:'(0029,"Silhouette ROI V1.0",26)',vr:"UL",name:"ROIShape",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",27)':{tag:'(0029,"Silhouette ROI V1.0",27)',vr:"FD",name:"ROIShapeTilt",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",28)':{tag:'(0029,"Silhouette ROI V1.0",28)',vr:"UL",name:"ROIShapePointsCount",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",29)':{tag:'(0029,"Silhouette ROI V1.0",29)',vr:"UL",name:"ROIShapePointsSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",30)':{tag:'(0029,"Silhouette ROI V1.0",30)',vr:"FD",name:"ROIShapePoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",31)':{tag:'(0029,"Silhouette ROI V1.0",31)',vr:"UL",name:"ROIShapeControlPointsCount",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",32)':{tag:'(0029,"Silhouette ROI V1.0",32)',vr:"UL",name:"ROIShapeControlPointsSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",33)':{tag:'(0029,"Silhouette ROI V1.0",33)',vr:"FD",name:"ROIShapeControlPoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",34)':{tag:'(0029,"Silhouette ROI V1.0",34)',vr:"UL",name:"ROIDontSave",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Sequence Ids V1.0",41)':{tag:'(0029,"Silhouette Sequence Ids V1.0",41)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Sequence Ids V1.0",42)':{tag:'(0029,"Silhouette Sequence Ids V1.0",42)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Sequence Ids V1.0",43)':{tag:'(0029,"Silhouette Sequence Ids V1.0",43)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",13)':{tag:'(0029,"Silhouette V1.0",13)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",14)':{tag:'(0029,"Silhouette V1.0",14)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",17)':{tag:'(0029,"Silhouette V1.0",17)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",18)':{tag:'(0029,"Silhouette V1.0",18)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",19)':{tag:'(0029,"Silhouette V1.0",19)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1a)':{tag:'(0029,"Silhouette V1.0",1a)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1b)':{tag:'(0029,"Silhouette V1.0",1b)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1c)':{tag:'(0029,"Silhouette V1.0",1c)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1d)':{tag:'(0029,"Silhouette V1.0",1d)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1e)':{tag:'(0029,"Silhouette V1.0",1e)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",21)':{tag:'(0029,"Silhouette V1.0",21)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",22)':{tag:'(0029,"Silhouette V1.0",22)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",23)':{tag:'(0029,"Silhouette V1.0",23)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",24)':{tag:'(0029,"Silhouette V1.0",24)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",25)':{tag:'(0029,"Silhouette V1.0",25)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",27)':{tag:'(0029,"Silhouette V1.0",27)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",28)':{tag:'(0029,"Silhouette V1.0",28)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",29)':{tag:'(0029,"Silhouette V1.0",29)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",30)':{tag:'(0029,"Silhouette V1.0",30)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",52)':{tag:'(0029,"Silhouette V1.0",52)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",53)':{tag:'(0029,"Silhouette V1.0",53)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",54)':{tag:'(0029,"Silhouette V1.0",54)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",55)':{tag:'(0029,"Silhouette V1.0",55)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",56)':{tag:'(0029,"Silhouette V1.0",56)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",57)':{tag:'(0029,"Silhouette V1.0",57)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0135,"SONOWAND AS",10)':{tag:'(0135,"SONOWAND AS",10)',vr:"LO",name:"UltrasoundScannerName",vm:"1",version:"PrivateTag"},'(0135,"SONOWAND AS",11)':{tag:'(0135,"SONOWAND AS",11)',vr:"LO",name:"TransducerSerial",vm:"1",version:"PrivateTag"},'(0135,"SONOWAND AS",12)':{tag:'(0135,"SONOWAND AS",12)',vr:"LO",name:"ProbeApplication",vm:"1",version:"PrivateTag"},'(0017,"SVISION",00)':{tag:'(0017,"SVISION",00)',vr:"LO",name:"ExtendedBodyPart",vm:"1",version:"PrivateTag"},'(0017,"SVISION",10)':{tag:'(0017,"SVISION",10)',vr:"LO",name:"ExtendedViewPosition",vm:"1",version:"PrivateTag"},'(0017,"SVISION",F0)':{tag:'(0017,"SVISION",F0)',vr:"IS",name:"ImagesSOPClass",vm:"1",version:"PrivateTag"},'(0019,"SVISION",00)':{tag:'(0019,"SVISION",00)',vr:"IS",name:"AECField",vm:"1",version:"PrivateTag"},'(0019,"SVISION",01)':{tag:'(0019,"SVISION",01)',vr:"IS",name:"AECFilmScreen",vm:"1",version:"PrivateTag"},'(0019,"SVISION",02)':{tag:'(0019,"SVISION",02)',vr:"IS",name:"AECDensity",vm:"1",version:"PrivateTag"},'(0019,"SVISION",10)':{tag:'(0019,"SVISION",10)',vr:"IS",name:"PatientThickness",vm:"1",version:"PrivateTag"},'(0019,"SVISION",18)':{tag:'(0019,"SVISION",18)',vr:"IS",name:"BeamDistance",vm:"1",version:"PrivateTag"},'(0019,"SVISION",20)':{tag:'(0019,"SVISION",20)',vr:"IS",name:"WorkstationNumber",vm:"1",version:"PrivateTag"},'(0019,"SVISION",28)':{tag:'(0019,"SVISION",28)',vr:"IS",name:"TubeNumber",vm:"1",version:"PrivateTag"},'(0019,"SVISION",30)':{tag:'(0019,"SVISION",30)',vr:"IS",name:"BuckyGrid",vm:"1",version:"PrivateTag"},'(0019,"SVISION",34)':{tag:'(0019,"SVISION",34)',vr:"IS",name:"Focus",vm:"1",version:"PrivateTag"},'(0019,"SVISION",38)':{tag:'(0019,"SVISION",38)',vr:"IS",name:"Child",vm:"1",version:"PrivateTag"},'(0019,"SVISION",40)':{tag:'(0019,"SVISION",40)',vr:"IS",name:"CollimatorDistanceX",vm:"1",version:"PrivateTag"},'(0019,"SVISION",41)':{tag:'(0019,"SVISION",41)',vr:"IS",name:"CollimatorDistanceY",vm:"1",version:"PrivateTag"},'(0019,"SVISION",50)':{tag:'(0019,"SVISION",50)',vr:"IS",name:"CentralBeamHeight",vm:"1",version:"PrivateTag"},'(0019,"SVISION",60)':{tag:'(0019,"SVISION",60)',vr:"IS",name:"BuckyAngle",vm:"1",version:"PrivateTag"},'(0019,"SVISION",68)':{tag:'(0019,"SVISION",68)',vr:"IS",name:"CArmAngle",vm:"1",version:"PrivateTag"},'(0019,"SVISION",69)':{tag:'(0019,"SVISION",69)',vr:"IS",name:"CollimatorAngle",vm:"1",version:"PrivateTag"},'(0019,"SVISION",70)':{tag:'(0019,"SVISION",70)',vr:"IS",name:"FilterNumber",vm:"1",version:"PrivateTag"},'(0019,"SVISION",74)':{tag:'(0019,"SVISION",74)',vr:"LO",name:"FilterMaterial1",vm:"1",version:"PrivateTag"},'(0019,"SVISION",75)':{tag:'(0019,"SVISION",75)',vr:"LO",name:"FilterMaterial2",vm:"1",version:"PrivateTag"},'(0019,"SVISION",78)':{tag:'(0019,"SVISION",78)',vr:"DS",name:"FilterThickness1",vm:"1",version:"PrivateTag"},'(0019,"SVISION",79)':{tag:'(0019,"SVISION",79)',vr:"DS",name:"FilterThickness2",vm:"1",version:"PrivateTag"},'(0019,"SVISION",80)':{tag:'(0019,"SVISION",80)',vr:"IS",name:"BuckyFormat",vm:"1",version:"PrivateTag"},'(0019,"SVISION",81)':{tag:'(0019,"SVISION",81)',vr:"IS",name:"ObjectPosition",vm:"1",version:"PrivateTag"},'(0019,"SVISION",90)':{tag:'(0019,"SVISION",90)',vr:"LO",name:"DeskCommand",vm:"1",version:"PrivateTag"},'(0019,"SVISION",A0)':{tag:'(0019,"SVISION",A0)',vr:"DS",name:"ExtendedExposureTime",vm:"1",version:"PrivateTag"},'(0019,"SVISION",A1)':{tag:'(0019,"SVISION",A1)',vr:"DS",name:"ActualExposureTime",vm:"1",version:"PrivateTag"},'(0019,"SVISION",A8)':{tag:'(0019,"SVISION",A8)',vr:"DS",name:"ExtendedXRayTubeCurrent",vm:"1",version:"PrivateTag"},'(0021,"SVISION",00)':{tag:'(0021,"SVISION",00)',vr:"DS",name:"NoiseReduction",vm:"1",version:"PrivateTag"},'(0021,"SVISION",01)':{tag:'(0021,"SVISION",01)',vr:"DS",name:"ContrastAmplification",vm:"1",version:"PrivateTag"},'(0021,"SVISION",02)':{tag:'(0021,"SVISION",02)',vr:"DS",name:"EdgeContrastBoosting",vm:"1",version:"PrivateTag"},'(0021,"SVISION",03)':{tag:'(0021,"SVISION",03)',vr:"DS",name:"LatitudeReduction",vm:"1",version:"PrivateTag"},'(0021,"SVISION",10)':{tag:'(0021,"SVISION",10)',vr:"LO",name:"FindRangeAlgorithm",vm:"1",version:"PrivateTag"},'(0021,"SVISION",11)':{tag:'(0021,"SVISION",11)',vr:"DS",name:"ThresholdCAlgorithm",vm:"1",version:"PrivateTag"},'(0021,"SVISION",20)':{tag:'(0021,"SVISION",20)',vr:"LO",name:"SensometricCurve",vm:"1",version:"PrivateTag"},'(0021,"SVISION",30)':{tag:'(0021,"SVISION",30)',vr:"DS",name:"LowerWindowOffset",vm:"1",version:"PrivateTag"},'(0021,"SVISION",31)':{tag:'(0021,"SVISION",31)',vr:"DS",name:"UpperWindowOffset",vm:"1",version:"PrivateTag"},'(0021,"SVISION",40)':{tag:'(0021,"SVISION",40)',vr:"DS",name:"MinPrintableDensity",vm:"1",version:"PrivateTag"},'(0021,"SVISION",41)':{tag:'(0021,"SVISION",41)',vr:"DS",name:"MaxPrintableDensity",vm:"1",version:"PrivateTag"},'(0021,"SVISION",90)':{tag:'(0021,"SVISION",90)',vr:"DS",name:"Brightness",vm:"1",version:"PrivateTag"},'(0021,"SVISION",91)':{tag:'(0021,"SVISION",91)',vr:"DS",name:"Contrast",vm:"1",version:"PrivateTag"},'(0021,"SVISION",92)':{tag:'(0021,"SVISION",92)',vr:"DS",name:"ShapeFactor",vm:"1",version:"PrivateTag"},'(0023,"SVISION",00)':{tag:'(0023,"SVISION",00)',vr:"LO",name:"ImageLaterality",vm:"1",version:"PrivateTag"},'(0023,"SVISION",01)':{tag:'(0023,"SVISION",01)',vr:"IS",name:"LetterPosition",vm:"1",version:"PrivateTag"},'(0023,"SVISION",02)':{tag:'(0023,"SVISION",02)',vr:"IS",name:"BurnedInAnnotation",vm:"1",version:"PrivateTag"},'(0023,"SVISION",03)':{tag:'(0023,"SVISION",03)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"SVISION",F0)':{tag:'(0023,"SVISION",F0)',vr:"IS",name:"ImageSOPClass",vm:"1",version:"PrivateTag"},'(0025,"SVISION",00)':{tag:'(0025,"SVISION",00)',vr:"IS",name:"OriginalImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",01)':{tag:'(0025,"SVISION",01)',vr:"IS",name:"NotProcessedImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",02)':{tag:'(0025,"SVISION",02)',vr:"IS",name:"CutOutImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",03)':{tag:'(0025,"SVISION",03)',vr:"IS",name:"DuplicatedImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",04)':{tag:'(0025,"SVISION",04)',vr:"IS",name:"StoredImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",05)':{tag:'(0025,"SVISION",05)',vr:"IS",name:"RetrievedImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",06)':{tag:'(0025,"SVISION",06)',vr:"IS",name:"RemoteImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",07)':{tag:'(0025,"SVISION",07)',vr:"IS",name:"MediaStoredImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",08)':{tag:'(0025,"SVISION",08)',vr:"IS",name:"ImageState",vm:"1",version:"PrivateTag"},'(0025,"SVISION",20)':{tag:'(0025,"SVISION",20)',vr:"LO",name:"SourceImageFile",vm:"1",version:"PrivateTag"},'(0025,"SVISION",21)':{tag:'(0025,"SVISION",21)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"SVISION",00)':{tag:'(0027,"SVISION",00)',vr:"IS",name:"NumberOfSeries",vm:"1",version:"PrivateTag"},'(0027,"SVISION",01)':{tag:'(0027,"SVISION",01)',vr:"IS",name:"NumberOfStudies",vm:"1",version:"PrivateTag"},'(0027,"SVISION",10)':{tag:'(0027,"SVISION",10)',vr:"DT",name:"OldestSeries",vm:"1",version:"PrivateTag"},'(0027,"SVISION",11)':{tag:'(0027,"SVISION",11)',vr:"DT",name:"NewestSeries",vm:"1",version:"PrivateTag"},'(0027,"SVISION",12)':{tag:'(0027,"SVISION",12)',vr:"DT",name:"OldestStudy",vm:"1",version:"PrivateTag"},'(0027,"SVISION",13)':{tag:'(0027,"SVISION",13)',vr:"DT",name:"NewestStudy",vm:"1",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",01)':{tag:'(0009,"TOSHIBA_MEC_1.0",01)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",02)':{tag:'(0009,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",03)':{tag:'(0009,"TOSHIBA_MEC_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",04)':{tag:'(0009,"TOSHIBA_MEC_1.0",04)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0011,"TOSHIBA_MEC_1.0",01)':{tag:'(0011,"TOSHIBA_MEC_1.0",01)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"TOSHIBA_MEC_1.0",02)':{tag:'(0011,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_1.0",01)':{tag:'(0019,"TOSHIBA_MEC_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_1.0",02)':{tag:'(0019,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"TOSHIBA_MEC_1.0",01)':{tag:'(0021,"TOSHIBA_MEC_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"TOSHIBA_MEC_1.0",02)':{tag:'(0021,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"TOSHIBA_MEC_1.0",03)':{tag:'(0021,"TOSHIBA_MEC_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",01)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",02)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",03)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",10)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",10)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",01)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",01)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",02)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",02)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",03)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",04)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",04)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",05)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",05)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",06)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",06)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",07)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",07)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",08)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",08)',vr:"LT",name:"OrientationHeadFeet",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",09)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",09)',vr:"LT",name:"ViewDirection",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0a)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0a)',vr:"LT",name:"OrientationSupineProne",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0b)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0b)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0c)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0d)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0d)',vr:"TM",name:"Time",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0e)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0e)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",01)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",02)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",03)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",03)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",04)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",04)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",05)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",05)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",07)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",07)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",08)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",08)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",09)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",09)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0a)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0a)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0b)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0b)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0c)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0d)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0d)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"}};
|
||
|
||
var handler = {
|
||
/**
|
||
* Get a proxied value from the array or property value
|
||
* Note that the property value get works even if you update the underlying object.
|
||
* Also, return true of proxy.__isProxy in order to distinguish proxies and not double proxy them.
|
||
*/
|
||
get: function get(target, prop) {
|
||
if (prop == "__isProxy") return true;
|
||
if (prop in target) return target[prop];
|
||
return target[0][prop];
|
||
},
|
||
set: function set(obj, prop, value) {
|
||
if (typeof prop === "number") {
|
||
obj[prop] = value;
|
||
} else if (prop in obj) {
|
||
obj[prop] = value;
|
||
} else {
|
||
obj[0][prop] = value;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
};
|
||
/**
|
||
* Add a proxy object for sqZero or the src[0] element if sqZero is unspecified, AND
|
||
* src is an array of length 1.
|
||
*
|
||
* If sqZero isn't passed in, then assume this is a create call on the destination object
|
||
* itself, by:
|
||
* 1. If not an object, return dest
|
||
* 2. If an array of length != 1, return dest
|
||
* 3. If an array, use dest[0] as sqZero
|
||
* 4. Use dest as sqZero
|
||
*
|
||
* @example
|
||
* src = [{a:5,b:'string', c:null}]
|
||
* addAccessors(src)
|
||
* src.c = 'outerChange'
|
||
* src[0].b='innerChange'
|
||
*
|
||
* assert src.a===5
|
||
* assert src[0].c === 'outerChange'
|
||
* assert src.b === 'innerChange'
|
||
*/
|
||
|
||
var addAccessors = function addAccessors(dest, sqZero) {
|
||
if (dest.__isProxy) return dest;
|
||
var itemZero = sqZero;
|
||
|
||
if (itemZero === undefined) {
|
||
if (_typeof(dest) !== "object") return dest;
|
||
if (Array.isArray(dest) && dest.length !== 1) return dest;
|
||
itemZero = Array.isArray(dest) ? dest[0] : dest;
|
||
}
|
||
|
||
var ret = [itemZero];
|
||
return new Proxy(ret, handler);
|
||
};
|
||
|
||
function paddingLeft(paddingValue, string) {
|
||
return String(paddingValue + string).slice(-paddingValue.length);
|
||
}
|
||
|
||
var Tag = /*#__PURE__*/function () {
|
||
function Tag(value) {
|
||
_classCallCheck(this, Tag);
|
||
|
||
this.value = value;
|
||
}
|
||
|
||
_createClass(Tag, [{
|
||
key: "toString",
|
||
value: function toString() {
|
||
return "(" + paddingLeft("0000", this.group().toString(16).toUpperCase()) + "," + paddingLeft("0000", this.element().toString(16).toUpperCase()) + ")";
|
||
}
|
||
}, {
|
||
key: "toCleanString",
|
||
value: function toCleanString() {
|
||
return paddingLeft("0000", this.group().toString(16).toUpperCase()) + paddingLeft("0000", this.element().toString(16).toUpperCase());
|
||
}
|
||
}, {
|
||
key: "is",
|
||
value: function is(t) {
|
||
return this.value == t;
|
||
}
|
||
}, {
|
||
key: "group",
|
||
value: function group() {
|
||
return this.value >>> 16;
|
||
}
|
||
}, {
|
||
key: "element",
|
||
value: function element() {
|
||
return this.value & 0xffff;
|
||
}
|
||
}, {
|
||
key: "isPixelDataTag",
|
||
value: function isPixelDataTag() {
|
||
return this.is(0x7fe00010);
|
||
}
|
||
}, {
|
||
key: "isPrivateCreator",
|
||
value: function isPrivateCreator() {
|
||
var group = this.group();
|
||
var element = this.element();
|
||
return group % 2 === 1 && element < 0x100 && element > 0x00;
|
||
}
|
||
}, {
|
||
key: "write",
|
||
value: function write(stream, vrType, values, syntax, writeOptions) {
|
||
var vr = ValueRepresentation.createByTypeString(vrType),
|
||
useSyntax = DicomMessage._normalizeSyntax(syntax);
|
||
|
||
var implicit = useSyntax == IMPLICIT_LITTLE_ENDIAN ? true : false,
|
||
isLittleEndian = useSyntax == IMPLICIT_LITTLE_ENDIAN || useSyntax == EXPLICIT_LITTLE_ENDIAN$1 ? true : false,
|
||
isEncapsulated = this.isPixelDataTag() && DicomMessage.isEncapsulated(syntax);
|
||
var oldEndian = stream.isLittleEndian;
|
||
stream.setEndian(isLittleEndian);
|
||
stream.writeUint16(this.group());
|
||
stream.writeUint16(this.element());
|
||
var tagStream = new WriteBufferStream(256),
|
||
valueLength;
|
||
tagStream.setEndian(isLittleEndian);
|
||
|
||
if (vrType == "OW" || vrType == "OB" || vrType == "UN") {
|
||
valueLength = vr.writeBytes(tagStream, values, useSyntax, isEncapsulated, writeOptions);
|
||
} else if (vrType == "SQ") {
|
||
valueLength = vr.writeBytes(tagStream, values, useSyntax, writeOptions);
|
||
} else {
|
||
valueLength = vr.writeBytes(tagStream, values, writeOptions);
|
||
}
|
||
|
||
if (vrType == "SQ") {
|
||
valueLength = 0xffffffff;
|
||
}
|
||
|
||
var written = tagStream.size + 4;
|
||
|
||
if (implicit) {
|
||
stream.writeUint32(valueLength);
|
||
written += 4;
|
||
} else {
|
||
if (vr.isExplicit()) {
|
||
stream.writeAsciiString(vr.type);
|
||
stream.writeUint16(0);
|
||
stream.writeUint32(valueLength);
|
||
written += 8;
|
||
} else {
|
||
stream.writeAsciiString(vr.type);
|
||
stream.writeUint16(valueLength);
|
||
written += 4;
|
||
}
|
||
}
|
||
|
||
stream.concat(tagStream);
|
||
stream.setEndian(oldEndian);
|
||
return written;
|
||
}
|
||
}], [{
|
||
key: "fromString",
|
||
value: function fromString(str) {
|
||
var group = parseInt(str.substring(0, 4), 16),
|
||
element = parseInt(str.substring(4), 16);
|
||
return Tag.fromNumbers(group, element);
|
||
}
|
||
}, {
|
||
key: "fromPString",
|
||
value: function fromPString(str) {
|
||
var group = parseInt(str.substring(1, 5), 16),
|
||
element = parseInt(str.substring(6, 10), 16);
|
||
return Tag.fromNumbers(group, element);
|
||
}
|
||
}, {
|
||
key: "fromNumbers",
|
||
value: function fromNumbers(group, element) {
|
||
return new Tag((group << 16 | element) >>> 0);
|
||
}
|
||
}, {
|
||
key: "readTag",
|
||
value: function readTag(stream) {
|
||
var group = stream.readUint16(),
|
||
element = stream.readUint16();
|
||
return Tag.fromNumbers(group, element);
|
||
}
|
||
}]);
|
||
|
||
return Tag;
|
||
}();
|
||
|
||
function rtrim(str) {
|
||
return str.replace(/\s*$/g, "");
|
||
}
|
||
|
||
function toWindows(inputArray, size) {
|
||
return Array.from({
|
||
length: inputArray.length - (size - 1)
|
||
}, //get the appropriate length
|
||
function (_, index) {
|
||
return inputArray.slice(index, index + size);
|
||
} //create the windows
|
||
);
|
||
}
|
||
|
||
var binaryVRs = ["FL", "FD", "SL", "SS", "UL", "US", "AT"],
|
||
explicitVRs = ["OB", "OW", "OF", "SQ", "UC", "UR", "UT", "UN"],
|
||
singleVRs$1 = ["SQ", "OF", "OW", "OB", "UN"];
|
||
|
||
var ValueRepresentation = /*#__PURE__*/function () {
|
||
function ValueRepresentation(type) {
|
||
_classCallCheck(this, ValueRepresentation);
|
||
|
||
this.type = type;
|
||
this.multi = false;
|
||
this._isBinary = binaryVRs.indexOf(this.type) != -1;
|
||
this._allowMultiple = !this._isBinary && singleVRs$1.indexOf(this.type) == -1;
|
||
this._isExplicit = explicitVRs.indexOf(this.type) != -1;
|
||
}
|
||
|
||
_createClass(ValueRepresentation, [{
|
||
key: "isBinary",
|
||
value: function isBinary() {
|
||
return this._isBinary;
|
||
}
|
||
}, {
|
||
key: "allowMultiple",
|
||
value: function allowMultiple() {
|
||
return this._allowMultiple;
|
||
}
|
||
}, {
|
||
key: "isExplicit",
|
||
value: function isExplicit() {
|
||
return this._isExplicit;
|
||
}
|
||
}, {
|
||
key: "read",
|
||
value: function read(stream, length, syntax) {
|
||
if (this.fixed && this.maxLength) {
|
||
if (!length) return this.defaultValue;
|
||
if (this.maxLength != length) log.error("Invalid length for fixed length tag, vr " + this.type + ", length " + this.maxLength + " != " + length);
|
||
}
|
||
|
||
return this.readBytes(stream, length, syntax);
|
||
}
|
||
}, {
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return stream.readAsciiString(length);
|
||
}
|
||
}, {
|
||
key: "readNullPaddedString",
|
||
value: function readNullPaddedString(stream, length) {
|
||
if (!length) return "";
|
||
|
||
if (stream.peekUint8(length - 1) !== 0) {
|
||
return stream.readAsciiString(length);
|
||
} else {
|
||
var val = stream.readAsciiString(length - 1);
|
||
stream.increment(1);
|
||
return val;
|
||
}
|
||
}
|
||
}, {
|
||
key: "write",
|
||
value: function write(stream, type) {
|
||
var args = Array.from(arguments);
|
||
|
||
if (args[2] === null || args[2] === "" || args[2] === undefined) {
|
||
return [stream.writeAsciiString("")];
|
||
} else {
|
||
var written = [],
|
||
valueArgs = args.slice(2),
|
||
func = stream["write" + type];
|
||
|
||
if (Array.isArray(valueArgs[0])) {
|
||
if (valueArgs[0].length < 1) {
|
||
written.push(0);
|
||
} else {
|
||
var self = this;
|
||
valueArgs[0].forEach(function (v, k) {
|
||
if (self.allowMultiple() && k > 0) {
|
||
stream.writeUint8(0x5c);
|
||
}
|
||
|
||
var singularArgs = [v].concat(valueArgs.slice(1));
|
||
var byteCount = func.apply(stream, singularArgs);
|
||
written.push(byteCount);
|
||
});
|
||
}
|
||
} else {
|
||
written.push(func.apply(stream, valueArgs));
|
||
}
|
||
|
||
return written;
|
||
}
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, lengths) {
|
||
var writeOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {
|
||
allowInvalidVRLength: false
|
||
};
|
||
var allowInvalidVRLength = writeOptions.allowInvalidVRLength;
|
||
allowInvalidVRLength = true
|
||
var valid = true,
|
||
valarr = Array.isArray(value) ? value : [value],
|
||
total = 0;
|
||
|
||
for (var i = 0; i < valarr.length; i++) {
|
||
var checkValue = valarr[i],
|
||
checklen = lengths[i],
|
||
isString = false,
|
||
displaylen = checklen;
|
||
|
||
if (checkValue === null || allowInvalidVRLength) {
|
||
valid = true;
|
||
} else if (this.checkLength) {
|
||
valid = this.checkLength(checkValue);
|
||
} else if (this.maxCharLength) {
|
||
var check = this.maxCharLength; //, checklen = checkValue.length;
|
||
|
||
valid = checkValue.length <= check;
|
||
displaylen = checkValue.length;
|
||
isString = true;
|
||
} else if (this.maxLength) {
|
||
valid = checklen <= this.maxLength;
|
||
}
|
||
|
||
if (!valid) {
|
||
var errmsg = "Value exceeds max length, vr: " + this.type + ", value: " + checkValue + ", length: " + displaylen;
|
||
if (isString) log.log(errmsg);else throw new Error(errmsg);
|
||
}
|
||
|
||
total += checklen;
|
||
}
|
||
|
||
if (this.allowMultiple()) {
|
||
total += valarr.length ? valarr.length - 1 : 0;
|
||
} //check for odd
|
||
|
||
|
||
var written = total;
|
||
|
||
if (total & 1) {
|
||
stream.writeUint8(this.padByte);
|
||
written++;
|
||
}
|
||
|
||
return written;
|
||
}
|
||
}], [{
|
||
key: "createByTypeString",
|
||
value: function createByTypeString(type) {
|
||
var vr = VRinstances[type];
|
||
|
||
if (vr === undefined) {
|
||
if (type == "ox") {
|
||
// TODO: determine VR based on context (could be 1 byte pixel data)
|
||
// https://github.com/dgobbi/vtk-dicom/issues/38
|
||
validationLog.error("Invalid vr type", type, "- using OW");
|
||
vr = VRinstances["OW"];
|
||
} else if (type == "xs") {
|
||
validationLog.error("Invalid vr type", type, "- using US");
|
||
vr = VRinstances["US"];
|
||
} else {
|
||
validationLog.error("Invalid vr type", type, "- using UN");
|
||
vr = VRinstances["UN"];
|
||
}
|
||
}
|
||
|
||
return vr;
|
||
}
|
||
}]);
|
||
|
||
return ValueRepresentation;
|
||
}();
|
||
|
||
var AsciiStringRepresentation = /*#__PURE__*/function (_ValueRepresentation) {
|
||
_inherits(AsciiStringRepresentation, _ValueRepresentation);
|
||
|
||
var _super = _createSuper(AsciiStringRepresentation);
|
||
|
||
function AsciiStringRepresentation(type) {
|
||
_classCallCheck(this, AsciiStringRepresentation);
|
||
|
||
return _super.call(this, type);
|
||
}
|
||
|
||
_createClass(AsciiStringRepresentation, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return stream.readAsciiString(length);
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, writeOptions) {
|
||
var written = _get(_getPrototypeOf(AsciiStringRepresentation.prototype), "write", this).call(this, stream, "AsciiString", value);
|
||
|
||
return _get(_getPrototypeOf(AsciiStringRepresentation.prototype), "writeBytes", this).call(this, stream, value, written, writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return AsciiStringRepresentation;
|
||
}(ValueRepresentation);
|
||
|
||
var EncodedStringRepresentation = /*#__PURE__*/function (_ValueRepresentation2) {
|
||
_inherits(EncodedStringRepresentation, _ValueRepresentation2);
|
||
|
||
var _super2 = _createSuper(EncodedStringRepresentation);
|
||
|
||
function EncodedStringRepresentation(type) {
|
||
_classCallCheck(this, EncodedStringRepresentation);
|
||
|
||
return _super2.call(this, type);
|
||
}
|
||
|
||
_createClass(EncodedStringRepresentation, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return stream.readEncodedString(length);
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, writeOptions) {
|
||
var written = _get(_getPrototypeOf(EncodedStringRepresentation.prototype), "write", this).call(this, stream, "UTF8String", value);
|
||
|
||
return _get(_getPrototypeOf(EncodedStringRepresentation.prototype), "writeBytes", this).call(this, stream, value, written, writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return EncodedStringRepresentation;
|
||
}(ValueRepresentation);
|
||
|
||
var BinaryRepresentation = /*#__PURE__*/function (_ValueRepresentation3) {
|
||
_inherits(BinaryRepresentation, _ValueRepresentation3);
|
||
|
||
var _super3 = _createSuper(BinaryRepresentation);
|
||
|
||
function BinaryRepresentation(type) {
|
||
_classCallCheck(this, BinaryRepresentation);
|
||
|
||
return _super3.call(this, type);
|
||
}
|
||
|
||
_createClass(BinaryRepresentation, [{
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, syntax, isEncapsulated) {
|
||
var writeOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
|
||
var i;
|
||
var binaryStream;
|
||
var _writeOptions$fragmen = writeOptions.fragmentMultiframe,
|
||
fragmentMultiframe = _writeOptions$fragmen === void 0 ? true : _writeOptions$fragmen;
|
||
value = value === null || value === undefined ? [] : value;
|
||
|
||
if (isEncapsulated) {
|
||
var fragmentSize = 1024 * 20,
|
||
frames = value.length,
|
||
startOffset = []; // Calculate a total length for storing binary stream
|
||
|
||
var bufferLength = 0;
|
||
|
||
for (i = 0; i < frames; i++) {
|
||
var needsPadding = Boolean(value[i].byteLength & 1);
|
||
bufferLength += value[i].byteLength + (needsPadding ? 1 : 0);
|
||
var _fragmentsLength = 1;
|
||
|
||
if (fragmentMultiframe) {
|
||
_fragmentsLength = Math.ceil(value[i].byteLength / fragmentSize);
|
||
} // 8 bytes per fragment are needed to store 0xffff (2 bytes), 0xe000 (2 bytes), and frageStream size (4 bytes)
|
||
|
||
|
||
bufferLength += _fragmentsLength * 8;
|
||
}
|
||
|
||
binaryStream = new WriteBufferStream(bufferLength, stream.isLittleEndian);
|
||
|
||
for (i = 0; i < frames; i++) {
|
||
var _needsPadding = Boolean(value[i].byteLength & 1);
|
||
|
||
startOffset.push(binaryStream.size);
|
||
var frameBuffer = value[i],
|
||
frameStream = new ReadBufferStream(frameBuffer);
|
||
var fragmentsLength = 1;
|
||
|
||
if (fragmentMultiframe) {
|
||
fragmentsLength = Math.ceil(frameStream.size / fragmentSize);
|
||
}
|
||
|
||
for (var j = 0, fragmentStart = 0; j < fragmentsLength; j++) {
|
||
var isFinalFragment = j === fragmentsLength - 1;
|
||
var fragmentEnd = fragmentStart + frameStream.size;
|
||
|
||
if (fragmentMultiframe) {
|
||
fragmentEnd = fragmentStart + fragmentSize;
|
||
}
|
||
|
||
if (isFinalFragment) {
|
||
fragmentEnd = frameStream.size;
|
||
}
|
||
|
||
var fragStream = new ReadBufferStream(frameStream.getBuffer(fragmentStart, fragmentEnd));
|
||
fragmentStart = fragmentEnd;
|
||
binaryStream.writeUint16(0xfffe);
|
||
binaryStream.writeUint16(0xe000);
|
||
var addPaddingByte = isFinalFragment && _needsPadding;
|
||
binaryStream.writeUint32(fragStream.size + (addPaddingByte ? 1 : 0));
|
||
binaryStream.concat(fragStream);
|
||
|
||
if (addPaddingByte) {
|
||
binaryStream.writeInt8(this.padByte);
|
||
}
|
||
}
|
||
}
|
||
|
||
stream.writeUint16(0xfffe);
|
||
stream.writeUint16(0xe000);
|
||
stream.writeUint32(startOffset.length * 4);
|
||
|
||
for (i = 0; i < startOffset.length; i++) {
|
||
stream.writeUint32(startOffset[i]);
|
||
}
|
||
|
||
stream.concat(binaryStream);
|
||
stream.writeUint16(0xfffe);
|
||
stream.writeUint16(0xe0dd);
|
||
stream.writeUint32(0x0);
|
||
return 0xffffffff;
|
||
} else {
|
||
var binaryData = value[0];
|
||
binaryStream = new ReadBufferStream(binaryData);
|
||
stream.concat(binaryStream);
|
||
return _get(_getPrototypeOf(BinaryRepresentation.prototype), "writeBytes", this).call(this, stream, binaryData, [binaryStream.size], writeOptions);
|
||
}
|
||
}
|
||
}, {
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
if (length == 0xffffffff) {
|
||
var itemTagValue = Tag.readTag(stream),
|
||
frames = [];
|
||
|
||
if (itemTagValue.is(0xfffee000)) {
|
||
var itemLength = stream.readUint32(),
|
||
numOfFrames = 1,
|
||
offsets = [];
|
||
|
||
if (itemLength > 0x0) {
|
||
//has frames
|
||
numOfFrames = itemLength / 4;
|
||
var i = 0;
|
||
|
||
while (i++ < numOfFrames) {
|
||
offsets.push(stream.readUint32());
|
||
}
|
||
} else {
|
||
offsets = [];
|
||
}
|
||
|
||
var SequenceItemTag = 0xfffee000;
|
||
var SequenceDelimiterTag = 0xfffee0dd;
|
||
|
||
var getNextSequenceItemData = function getNextSequenceItemData(stream) {
|
||
var nextTag = Tag.readTag(stream);
|
||
|
||
if (nextTag.is(SequenceItemTag)) {
|
||
var _itemLength = stream.readUint32();
|
||
|
||
var buffer = stream.getBuffer(stream.offset, stream.offset + _itemLength);
|
||
stream.increment(_itemLength);
|
||
return buffer;
|
||
} else if (nextTag.is(SequenceDelimiterTag)) {
|
||
// Read SequenceDelimiterItem value for the SequenceDelimiterTag
|
||
if (stream.readUint32() !== 0) {
|
||
throw Error("SequenceDelimiterItem tag value was not zero");
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
throw Error("Invalid tag in sequence");
|
||
}; // If there is an offset table, use that to loop through pixel data sequence
|
||
|
||
|
||
if (offsets.length > 0) {
|
||
// make offsets relative to the stream, not tag
|
||
offsets = offsets.map(function (e) {
|
||
return e + stream.offset;
|
||
});
|
||
offsets.push(stream.size); // window offsets to an array of [start,stop] locations
|
||
|
||
frames = toWindows(offsets, 2).map(function (range) {
|
||
var fragments = [];
|
||
|
||
var _range = _slicedToArray(range, 2),
|
||
start = _range[0],
|
||
stop = _range[1]; // create a new readable stream based on the range
|
||
|
||
|
||
var rangeStream = new ReadBufferStream(stream.buffer, stream.isLittleEndian, {
|
||
start: start,
|
||
stop: stop,
|
||
noCopy: stream.noCopy
|
||
});
|
||
var frameSize = 0;
|
||
|
||
while (!rangeStream.end()) {
|
||
var buf = getNextSequenceItemData(rangeStream);
|
||
|
||
if (buf === null) {
|
||
break;
|
||
}
|
||
|
||
fragments.push(buf);
|
||
frameSize += buf.byteLength;
|
||
} // Ensure the parent stream's offset is kept up to date
|
||
|
||
|
||
stream.offset = rangeStream.offset; // If there's only one buffer thne just return it directly
|
||
|
||
if (fragments.length === 1) {
|
||
return fragments[0];
|
||
}
|
||
|
||
if (rangeStream.noCopy) {
|
||
// return the fragments for downstream application to process
|
||
return fragments;
|
||
} else {
|
||
// Allocate a final ArrayBuffer and concat all buffers into it
|
||
var mergedFrame = new ArrayBuffer(frameSize);
|
||
var u8Data = new Uint8Array(mergedFrame);
|
||
fragments.reduce(function (offset, buffer) {
|
||
u8Data.set(new Uint8Array(buffer), offset);
|
||
return offset + buffer.byteLength;
|
||
}, 0);
|
||
return mergedFrame;
|
||
}
|
||
});
|
||
} // If no offset table, loop through remainder of stream looking for termination tag
|
||
else {
|
||
while (!stream.end()) {
|
||
var buffer = getNextSequenceItemData(stream);
|
||
|
||
if (buffer === null) {
|
||
break;
|
||
}
|
||
|
||
frames.push(buffer);
|
||
}
|
||
}
|
||
} else {
|
||
throw new Error("Item tag not found after undefined binary length");
|
||
}
|
||
|
||
return frames;
|
||
} else {
|
||
var bytes;
|
||
/*if (this.type == 'OW') {
|
||
bytes = stream.readUint16Array(length);
|
||
} else if (this.type == 'OB') {
|
||
bytes = stream.readUint8Array(length);
|
||
}*/
|
||
|
||
bytes = stream.getBuffer(stream.offset, stream.offset + length);
|
||
stream.increment(length);
|
||
return [bytes];
|
||
}
|
||
}
|
||
}]);
|
||
|
||
return BinaryRepresentation;
|
||
}(ValueRepresentation);
|
||
|
||
var ApplicationEntity = /*#__PURE__*/function (_AsciiStringRepresent) {
|
||
_inherits(ApplicationEntity, _AsciiStringRepresent);
|
||
|
||
var _super4 = _createSuper(ApplicationEntity);
|
||
|
||
function ApplicationEntity() {
|
||
var _this;
|
||
|
||
_classCallCheck(this, ApplicationEntity);
|
||
|
||
_this = _super4.call(this, "AE");
|
||
_this.maxLength = 16;
|
||
_this.padByte = 0x20;
|
||
return _this;
|
||
}
|
||
|
||
_createClass(ApplicationEntity, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return stream.readAsciiString(length).trim();
|
||
}
|
||
}]);
|
||
|
||
return ApplicationEntity;
|
||
}(AsciiStringRepresentation);
|
||
|
||
var CodeString = /*#__PURE__*/function (_AsciiStringRepresent2) {
|
||
_inherits(CodeString, _AsciiStringRepresent2);
|
||
|
||
var _super5 = _createSuper(CodeString);
|
||
|
||
function CodeString() {
|
||
var _this2;
|
||
|
||
_classCallCheck(this, CodeString);
|
||
|
||
_this2 = _super5.call(this, "CS");
|
||
_this2.maxLength = 16;
|
||
_this2.padByte = 0x20;
|
||
return _this2;
|
||
}
|
||
|
||
_createClass(CodeString, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return stream.readAsciiString(length).trim();
|
||
}
|
||
}]);
|
||
|
||
return CodeString;
|
||
}(AsciiStringRepresentation);
|
||
|
||
var AgeString = /*#__PURE__*/function (_AsciiStringRepresent3) {
|
||
_inherits(AgeString, _AsciiStringRepresent3);
|
||
|
||
var _super6 = _createSuper(AgeString);
|
||
|
||
function AgeString() {
|
||
var _this3;
|
||
|
||
_classCallCheck(this, AgeString);
|
||
|
||
_this3 = _super6.call(this, "AS");
|
||
_this3.maxLength = 4;
|
||
_this3.padByte = 0x20;
|
||
_this3.fixed = true;
|
||
_this3.defaultValue = "";
|
||
return _this3;
|
||
}
|
||
|
||
return _createClass(AgeString);
|
||
}(AsciiStringRepresentation);
|
||
|
||
var AttributeTag = /*#__PURE__*/function (_ValueRepresentation4) {
|
||
_inherits(AttributeTag, _ValueRepresentation4);
|
||
|
||
var _super7 = _createSuper(AttributeTag);
|
||
|
||
function AttributeTag() {
|
||
var _this4;
|
||
|
||
_classCallCheck(this, AttributeTag);
|
||
|
||
_this4 = _super7.call(this, "AT");
|
||
_this4.maxLength = 4;
|
||
_this4.valueLength = 4;
|
||
_this4.padByte = 0;
|
||
_this4.fixed = true;
|
||
return _this4;
|
||
}
|
||
|
||
_createClass(AttributeTag, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream) {
|
||
return Tag.readTag(stream).value;
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, writeOptions) {
|
||
return _get(_getPrototypeOf(AttributeTag.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(AttributeTag.prototype), "write", this).call(this, stream, "TwoUint16s", value), writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return AttributeTag;
|
||
}(ValueRepresentation);
|
||
|
||
var DateValue = /*#__PURE__*/function (_AsciiStringRepresent4) {
|
||
_inherits(DateValue, _AsciiStringRepresent4);
|
||
|
||
var _super8 = _createSuper(DateValue);
|
||
|
||
function DateValue(value) {
|
||
var _this5;
|
||
|
||
_classCallCheck(this, DateValue);
|
||
|
||
_this5 = _super8.call(this, "DA", value);
|
||
_this5.maxLength = 18;
|
||
_this5.padByte = 0x20; //this.fixed = true;
|
||
|
||
_this5.defaultValue = "";
|
||
return _this5;
|
||
}
|
||
|
||
return _createClass(DateValue);
|
||
}(AsciiStringRepresentation);
|
||
|
||
var DecimalString = /*#__PURE__*/function (_AsciiStringRepresent5) {
|
||
_inherits(DecimalString, _AsciiStringRepresent5);
|
||
|
||
var _super9 = _createSuper(DecimalString);
|
||
|
||
function DecimalString() {
|
||
var _this6;
|
||
|
||
_classCallCheck(this, DecimalString);
|
||
|
||
_this6 = _super9.call(this, "DS");
|
||
_this6.maxLength = 16;
|
||
_this6.padByte = 0x20;
|
||
return _this6;
|
||
}
|
||
|
||
_createClass(DecimalString, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
var BACKSLASH = String.fromCharCode(0x5c);
|
||
var ds = stream.readAsciiString(length);
|
||
ds = ds.replace(/[^0-9.\\\-+e]/gi, "");
|
||
|
||
if (ds.indexOf(BACKSLASH) !== -1) {
|
||
// handle decimal string with multiplicity
|
||
var dsArray = ds.split(BACKSLASH);
|
||
ds = dsArray.map(function (ds) {
|
||
return ds === "" ? null : Number(ds);
|
||
});
|
||
} else {
|
||
ds = [ds === "" ? null : Number(ds)];
|
||
}
|
||
|
||
return ds;
|
||
}
|
||
}, {
|
||
key: "formatValue",
|
||
value: function formatValue(value) {
|
||
if (value === null) {
|
||
return "";
|
||
}
|
||
|
||
var str = String(value);
|
||
|
||
if (str.length > this.maxLength) {
|
||
return value.toExponential();
|
||
}
|
||
|
||
return str;
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, writeOptions) {
|
||
var _this7 = this;
|
||
|
||
var val = Array.isArray(value) ? value.map(function (ds) {
|
||
return _this7.formatValue(ds);
|
||
}) : [this.formatValue(value)];
|
||
return _get(_getPrototypeOf(DecimalString.prototype), "writeBytes", this).call(this, stream, val, writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return DecimalString;
|
||
}(AsciiStringRepresentation);
|
||
|
||
var DateTime = /*#__PURE__*/function (_AsciiStringRepresent6) {
|
||
_inherits(DateTime, _AsciiStringRepresent6);
|
||
|
||
var _super10 = _createSuper(DateTime);
|
||
|
||
function DateTime() {
|
||
var _this8;
|
||
|
||
_classCallCheck(this, DateTime);
|
||
|
||
_this8 = _super10.call(this, "DT");
|
||
_this8.maxLength = 26;
|
||
_this8.padByte = 0x20;
|
||
return _this8;
|
||
}
|
||
|
||
return _createClass(DateTime);
|
||
}(AsciiStringRepresentation);
|
||
|
||
var FloatingPointSingle = /*#__PURE__*/function (_ValueRepresentation5) {
|
||
_inherits(FloatingPointSingle, _ValueRepresentation5);
|
||
|
||
var _super11 = _createSuper(FloatingPointSingle);
|
||
|
||
function FloatingPointSingle() {
|
||
var _this9;
|
||
|
||
_classCallCheck(this, FloatingPointSingle);
|
||
|
||
_this9 = _super11.call(this, "FL");
|
||
_this9.maxLength = 4;
|
||
_this9.padByte = 0;
|
||
_this9.fixed = true;
|
||
_this9.defaultValue = 0.0;
|
||
return _this9;
|
||
}
|
||
|
||
_createClass(FloatingPointSingle, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream) {
|
||
return Number(stream.readFloat());
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, writeOptions) {
|
||
return _get(_getPrototypeOf(FloatingPointSingle.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(FloatingPointSingle.prototype), "write", this).call(this, stream, "Float", value), writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return FloatingPointSingle;
|
||
}(ValueRepresentation);
|
||
|
||
var FloatingPointDouble = /*#__PURE__*/function (_ValueRepresentation6) {
|
||
_inherits(FloatingPointDouble, _ValueRepresentation6);
|
||
|
||
var _super12 = _createSuper(FloatingPointDouble);
|
||
|
||
function FloatingPointDouble() {
|
||
var _this10;
|
||
|
||
_classCallCheck(this, FloatingPointDouble);
|
||
|
||
_this10 = _super12.call(this, "FD");
|
||
_this10.maxLength = 8;
|
||
_this10.padByte = 0;
|
||
_this10.fixed = true;
|
||
_this10.defaultValue = 0.0;
|
||
return _this10;
|
||
}
|
||
|
||
_createClass(FloatingPointDouble, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream) {
|
||
return Number(stream.readDouble());
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, writeOptions) {
|
||
return _get(_getPrototypeOf(FloatingPointDouble.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(FloatingPointDouble.prototype), "write", this).call(this, stream, "Double", value), writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return FloatingPointDouble;
|
||
}(ValueRepresentation);
|
||
|
||
var IntegerString = /*#__PURE__*/function (_AsciiStringRepresent7) {
|
||
_inherits(IntegerString, _AsciiStringRepresent7);
|
||
|
||
var _super13 = _createSuper(IntegerString);
|
||
|
||
function IntegerString() {
|
||
var _this11;
|
||
|
||
_classCallCheck(this, IntegerString);
|
||
|
||
_this11 = _super13.call(this, "IS");
|
||
_this11.maxLength = 12;
|
||
_this11.padByte = 0x20;
|
||
return _this11;
|
||
}
|
||
|
||
_createClass(IntegerString, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
var BACKSLASH = String.fromCharCode(0x5c);
|
||
var is = stream.readAsciiString(length).trim();
|
||
is = is.replace(/[^0-9.\\\-+e]/gi, "");
|
||
|
||
if (is.indexOf(BACKSLASH) !== -1) {
|
||
// handle integer string with multiplicity
|
||
var integerStringArray = is.split(BACKSLASH);
|
||
is = integerStringArray.map(function (is) {
|
||
return is === "" ? null : Number(is);
|
||
});
|
||
} else {
|
||
is = [is === "" ? null : Number(is)];
|
||
}
|
||
|
||
return is;
|
||
}
|
||
}, {
|
||
key: "formatValue",
|
||
value: function formatValue(value) {
|
||
return value === null ? "" : String(value);
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, writeOptions) {
|
||
var _this12 = this;
|
||
|
||
var val = Array.isArray(value) ? value.map(function (is) {
|
||
return _this12.formatValue(is);
|
||
}) : [this.formatValue(value)];
|
||
return _get(_getPrototypeOf(IntegerString.prototype), "writeBytes", this).call(this, stream, val, writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return IntegerString;
|
||
}(AsciiStringRepresentation);
|
||
|
||
var LongString = /*#__PURE__*/function (_EncodedStringReprese) {
|
||
_inherits(LongString, _EncodedStringReprese);
|
||
|
||
var _super14 = _createSuper(LongString);
|
||
|
||
function LongString() {
|
||
var _this13;
|
||
|
||
_classCallCheck(this, LongString);
|
||
|
||
_this13 = _super14.call(this, "LO");
|
||
_this13.maxCharLength = 64;
|
||
_this13.padByte = 0x20;
|
||
return _this13;
|
||
}
|
||
|
||
_createClass(LongString, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return stream.readEncodedString(length).trim();
|
||
}
|
||
}]);
|
||
|
||
return LongString;
|
||
}(EncodedStringRepresentation);
|
||
|
||
var LongText = /*#__PURE__*/function (_EncodedStringReprese2) {
|
||
_inherits(LongText, _EncodedStringReprese2);
|
||
|
||
var _super15 = _createSuper(LongText);
|
||
|
||
function LongText() {
|
||
var _this14;
|
||
|
||
_classCallCheck(this, LongText);
|
||
|
||
_this14 = _super15.call(this, "LT");
|
||
_this14.maxCharLength = 10240;
|
||
_this14.padByte = 0x20;
|
||
return _this14;
|
||
}
|
||
|
||
_createClass(LongText, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return rtrim(stream.readEncodedString(length));
|
||
}
|
||
}]);
|
||
|
||
return LongText;
|
||
}(EncodedStringRepresentation);
|
||
|
||
var PersonName = /*#__PURE__*/function (_EncodedStringReprese3) {
|
||
_inherits(PersonName, _EncodedStringReprese3);
|
||
|
||
var _super16 = _createSuper(PersonName);
|
||
|
||
function PersonName() {
|
||
var _this15;
|
||
|
||
_classCallCheck(this, PersonName);
|
||
|
||
_this15 = _super16.call(this, "PN");
|
||
_this15.maxLength = null;
|
||
_this15.padByte = 0x20;
|
||
return _this15;
|
||
}
|
||
|
||
_createClass(PersonName, [{
|
||
key: "checkLength",
|
||
value: function checkLength(value) {
|
||
var components = [];
|
||
|
||
if (_typeof(value) === "object" && value !== null) {
|
||
// In DICOM JSON, components are encoded as a mapping (object),
|
||
// where the keys are one or more of the following: "Alphabetic",
|
||
// "Ideographic", "Phonetic".
|
||
// http://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_F.2.2.html
|
||
components = Object.keys(value).forEach(function (key) {
|
||
return value[key];
|
||
});
|
||
} else if (typeof value === "string" || value instanceof String) {
|
||
// In DICOM Part10, components are encoded as a string,
|
||
// where components ("Alphabetic", "Ideographic", "Phonetic")
|
||
// are separated by the "=" delimeter.
|
||
// http://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html
|
||
components = value.split(/\=/);
|
||
}
|
||
|
||
for (var i in components) {
|
||
var cmp = components[i];
|
||
if (cmp.length > 64) return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
}, {
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return rtrim(stream.readEncodedString(length));
|
||
}
|
||
}]);
|
||
|
||
return PersonName;
|
||
}(EncodedStringRepresentation);
|
||
|
||
var ShortString = /*#__PURE__*/function (_EncodedStringReprese4) {
|
||
_inherits(ShortString, _EncodedStringReprese4);
|
||
|
||
var _super17 = _createSuper(ShortString);
|
||
|
||
function ShortString() {
|
||
var _this16;
|
||
|
||
_classCallCheck(this, ShortString);
|
||
|
||
_this16 = _super17.call(this, "SH");
|
||
_this16.maxCharLength = 16;
|
||
_this16.padByte = 0x20;
|
||
return _this16;
|
||
}
|
||
|
||
_createClass(ShortString, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return stream.readEncodedString(length).trim();
|
||
}
|
||
}]);
|
||
|
||
return ShortString;
|
||
}(EncodedStringRepresentation);
|
||
|
||
var SignedLong = /*#__PURE__*/function (_ValueRepresentation7) {
|
||
_inherits(SignedLong, _ValueRepresentation7);
|
||
|
||
var _super18 = _createSuper(SignedLong);
|
||
|
||
function SignedLong() {
|
||
var _this17;
|
||
|
||
_classCallCheck(this, SignedLong);
|
||
|
||
_this17 = _super18.call(this, "SL");
|
||
_this17.maxLength = 4;
|
||
_this17.padByte = 0;
|
||
_this17.fixed = true;
|
||
_this17.defaultValue = 0;
|
||
return _this17;
|
||
}
|
||
|
||
_createClass(SignedLong, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream) {
|
||
return stream.readInt32();
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, writeOptions) {
|
||
return _get(_getPrototypeOf(SignedLong.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(SignedLong.prototype), "write", this).call(this, stream, "Int32", value), writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return SignedLong;
|
||
}(ValueRepresentation);
|
||
|
||
var SequenceOfItems = /*#__PURE__*/function (_ValueRepresentation8) {
|
||
_inherits(SequenceOfItems, _ValueRepresentation8);
|
||
|
||
var _super19 = _createSuper(SequenceOfItems);
|
||
|
||
function SequenceOfItems() {
|
||
var _this18;
|
||
|
||
_classCallCheck(this, SequenceOfItems);
|
||
|
||
_this18 = _super19.call(this, "SQ");
|
||
_this18.maxLength = null;
|
||
_this18.padByte = 0;
|
||
_this18.noMultiple = true;
|
||
return _this18;
|
||
}
|
||
|
||
_createClass(SequenceOfItems, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, sqlength, syntax) {
|
||
if (sqlength == 0x0) {
|
||
return []; //contains no dataset
|
||
} else {
|
||
var undefLength = sqlength == 0xffffffff,
|
||
elements = [],
|
||
read = 0;
|
||
/* eslint-disable-next-line no-constant-condition */
|
||
|
||
while (true) {
|
||
var tag = Tag.readTag(stream),
|
||
length = null;
|
||
read += 4;
|
||
|
||
if (tag.is(0xfffee0dd)) {
|
||
stream.readUint32();
|
||
break;
|
||
} else if (!undefLength && read == sqlength) {
|
||
break;
|
||
} else if (tag.is(0xfffee000)) {
|
||
length = stream.readUint32();
|
||
read += 4;
|
||
var itemStream = null,
|
||
toRead = 0,
|
||
undef = length == 0xffffffff;
|
||
|
||
if (undef) {
|
||
var stack = 0;
|
||
/* eslint-disable-next-line no-constant-condition */
|
||
|
||
while (1) {
|
||
var g = stream.readUint16();
|
||
|
||
if (g == 0xfffe) {
|
||
// some control tag is about to be read
|
||
var ge = stream.readUint16();
|
||
var itemLength = stream.readUint32();
|
||
stream.increment(-4);
|
||
|
||
if (ge == 0xe00d) {
|
||
if (itemLength === 0) {
|
||
// item delimitation tag (0xfffee00d) + item length (0x00000000) has been read
|
||
stack--;
|
||
|
||
if (stack < 0) {
|
||
// if we are outside every stack, then we are finished reading the sequence of items
|
||
stream.increment(4);
|
||
read += 8;
|
||
break;
|
||
} else {
|
||
// otherwise, we were in a nested sequence of items
|
||
toRead += 4;
|
||
}
|
||
} else {
|
||
// anything else has been read
|
||
toRead += 2;
|
||
}
|
||
} else if (ge == 0xe000) {
|
||
// a new item has been found
|
||
toRead += 4;
|
||
|
||
if (itemLength == 0xffffffff) {
|
||
// a new item with undefined length has been found
|
||
stack++;
|
||
}
|
||
} else {
|
||
// some control tag that does not concern sequence of items has been read
|
||
toRead += 2;
|
||
stream.increment(-2);
|
||
}
|
||
} else {
|
||
// anything else has been read
|
||
toRead += 2;
|
||
}
|
||
}
|
||
} else {
|
||
toRead = length;
|
||
}
|
||
|
||
if (toRead) {
|
||
stream.increment(undef ? -toRead - 8 : 0);
|
||
itemStream = stream.more(toRead); //parseElements
|
||
|
||
read += toRead;
|
||
if (undef) stream.increment(8);
|
||
|
||
var items = DicomMessage._read(itemStream, syntax);
|
||
|
||
elements.push(items);
|
||
}
|
||
|
||
if (!undefLength && read == sqlength) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
return elements;
|
||
}
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, syntax, writeOptions) {
|
||
var written = 0;
|
||
|
||
if (value) {
|
||
for (var i = 0; i < value.length; i++) {
|
||
var item = value[i];
|
||
|
||
_get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xfffe);
|
||
|
||
_get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xe000);
|
||
|
||
_get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint32", 0xffffffff);
|
||
|
||
written += DicomMessage.write(item, stream, syntax, writeOptions);
|
||
|
||
_get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xfffe);
|
||
|
||
_get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xe00d);
|
||
|
||
_get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint32", 0x00000000);
|
||
|
||
written += 16;
|
||
}
|
||
}
|
||
|
||
_get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xfffe);
|
||
|
||
_get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xe0dd);
|
||
|
||
_get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint32", 0x00000000);
|
||
|
||
written += 8;
|
||
return _get(_getPrototypeOf(SequenceOfItems.prototype), "writeBytes", this).call(this, stream, value, [written], writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return SequenceOfItems;
|
||
}(ValueRepresentation);
|
||
|
||
var SignedShort = /*#__PURE__*/function (_ValueRepresentation9) {
|
||
_inherits(SignedShort, _ValueRepresentation9);
|
||
|
||
var _super20 = _createSuper(SignedShort);
|
||
|
||
function SignedShort() {
|
||
var _this19;
|
||
|
||
_classCallCheck(this, SignedShort);
|
||
|
||
_this19 = _super20.call(this, "SS");
|
||
_this19.maxLength = 2;
|
||
_this19.valueLength = 2;
|
||
_this19.padByte = 0;
|
||
_this19.fixed = true;
|
||
_this19.defaultValue = 0;
|
||
return _this19;
|
||
}
|
||
|
||
_createClass(SignedShort, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream) {
|
||
return stream.readInt16();
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, writeOptions) {
|
||
return _get(_getPrototypeOf(SignedShort.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(SignedShort.prototype), "write", this).call(this, stream, "Int16", value), writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return SignedShort;
|
||
}(ValueRepresentation);
|
||
|
||
var ShortText = /*#__PURE__*/function (_EncodedStringReprese5) {
|
||
_inherits(ShortText, _EncodedStringReprese5);
|
||
|
||
var _super21 = _createSuper(ShortText);
|
||
|
||
function ShortText() {
|
||
var _this20;
|
||
|
||
_classCallCheck(this, ShortText);
|
||
|
||
_this20 = _super21.call(this, "ST");
|
||
_this20.maxCharLength = 1024;
|
||
_this20.padByte = 0x20;
|
||
return _this20;
|
||
}
|
||
|
||
_createClass(ShortText, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return rtrim(stream.readEncodedString(length));
|
||
}
|
||
}]);
|
||
|
||
return ShortText;
|
||
}(EncodedStringRepresentation);
|
||
|
||
var TimeValue = /*#__PURE__*/function (_AsciiStringRepresent8) {
|
||
_inherits(TimeValue, _AsciiStringRepresent8);
|
||
|
||
var _super22 = _createSuper(TimeValue);
|
||
|
||
function TimeValue() {
|
||
var _this21;
|
||
|
||
_classCallCheck(this, TimeValue);
|
||
|
||
_this21 = _super22.call(this, "TM");
|
||
_this21.maxLength = 14;
|
||
_this21.padByte = 0x20;
|
||
return _this21;
|
||
}
|
||
|
||
_createClass(TimeValue, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return rtrim(stream.readAsciiString(length));
|
||
}
|
||
}]);
|
||
|
||
return TimeValue;
|
||
}(AsciiStringRepresentation);
|
||
|
||
var UnlimitedCharacters = /*#__PURE__*/function (_EncodedStringReprese6) {
|
||
_inherits(UnlimitedCharacters, _EncodedStringReprese6);
|
||
|
||
var _super23 = _createSuper(UnlimitedCharacters);
|
||
|
||
function UnlimitedCharacters() {
|
||
var _this22;
|
||
|
||
_classCallCheck(this, UnlimitedCharacters);
|
||
|
||
_this22 = _super23.call(this, "UC");
|
||
_this22.maxLength = null;
|
||
_this22.multi = true;
|
||
_this22.padByte = 0x20;
|
||
return _this22;
|
||
}
|
||
|
||
_createClass(UnlimitedCharacters, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return rtrim(stream.readEncodedString(length));
|
||
}
|
||
}]);
|
||
|
||
return UnlimitedCharacters;
|
||
}(EncodedStringRepresentation);
|
||
|
||
var UnlimitedText = /*#__PURE__*/function (_EncodedStringReprese7) {
|
||
_inherits(UnlimitedText, _EncodedStringReprese7);
|
||
|
||
var _super24 = _createSuper(UnlimitedText);
|
||
|
||
function UnlimitedText() {
|
||
var _this23;
|
||
|
||
_classCallCheck(this, UnlimitedText);
|
||
|
||
_this23 = _super24.call(this, "UT");
|
||
_this23.maxLength = null;
|
||
_this23.padByte = 0x20;
|
||
return _this23;
|
||
}
|
||
|
||
_createClass(UnlimitedText, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return rtrim(stream.readEncodedString(length));
|
||
}
|
||
}]);
|
||
|
||
return UnlimitedText;
|
||
}(EncodedStringRepresentation);
|
||
|
||
var UnsignedShort = /*#__PURE__*/function (_ValueRepresentation10) {
|
||
_inherits(UnsignedShort, _ValueRepresentation10);
|
||
|
||
var _super25 = _createSuper(UnsignedShort);
|
||
|
||
function UnsignedShort() {
|
||
var _this24;
|
||
|
||
_classCallCheck(this, UnsignedShort);
|
||
|
||
_this24 = _super25.call(this, "US");
|
||
_this24.maxLength = 2;
|
||
_this24.padByte = 0;
|
||
_this24.fixed = true;
|
||
_this24.defaultValue = 0;
|
||
return _this24;
|
||
}
|
||
|
||
_createClass(UnsignedShort, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream) {
|
||
return stream.readUint16();
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, writeOptions) {
|
||
return _get(_getPrototypeOf(UnsignedShort.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(UnsignedShort.prototype), "write", this).call(this, stream, "Uint16", value), writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return UnsignedShort;
|
||
}(ValueRepresentation);
|
||
|
||
var UnsignedLong = /*#__PURE__*/function (_ValueRepresentation11) {
|
||
_inherits(UnsignedLong, _ValueRepresentation11);
|
||
|
||
var _super26 = _createSuper(UnsignedLong);
|
||
|
||
function UnsignedLong() {
|
||
var _this25;
|
||
|
||
_classCallCheck(this, UnsignedLong);
|
||
|
||
_this25 = _super26.call(this, "UL");
|
||
_this25.maxLength = 4;
|
||
_this25.padByte = 0;
|
||
_this25.fixed = true;
|
||
_this25.defaultValue = 0;
|
||
return _this25;
|
||
}
|
||
|
||
_createClass(UnsignedLong, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream) {
|
||
return stream.readUint32();
|
||
}
|
||
}, {
|
||
key: "writeBytes",
|
||
value: function writeBytes(stream, value, writeOptions) {
|
||
return _get(_getPrototypeOf(UnsignedLong.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(UnsignedLong.prototype), "write", this).call(this, stream, "Uint32", value), writeOptions);
|
||
}
|
||
}]);
|
||
|
||
return UnsignedLong;
|
||
}(ValueRepresentation);
|
||
|
||
var UniqueIdentifier = /*#__PURE__*/function (_AsciiStringRepresent9) {
|
||
_inherits(UniqueIdentifier, _AsciiStringRepresent9);
|
||
|
||
var _super27 = _createSuper(UniqueIdentifier);
|
||
|
||
function UniqueIdentifier() {
|
||
var _this26;
|
||
|
||
_classCallCheck(this, UniqueIdentifier);
|
||
|
||
_this26 = _super27.call(this, "UI");
|
||
_this26.maxLength = 64;
|
||
_this26.padByte = 0;
|
||
return _this26;
|
||
}
|
||
|
||
_createClass(UniqueIdentifier, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
var result = this.readNullPaddedString(stream, length);
|
||
var BACKSLASH = String.fromCharCode(0x5c);
|
||
var uidRegExp = /[^0-9.]/g; // Treat backslashes as a delimiter for multiple UIDs, in which case an
|
||
// array of UIDs is returned. This is used by DICOM Q&R to support
|
||
// querying and matching multiple items on a UID field in a single
|
||
// query. For more details see:
|
||
//
|
||
// https://dicom.nema.org/medical/dicom/current/output/chtml/part04/sect_C.2.2.2.2.html
|
||
// https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.4.html
|
||
|
||
if (result.indexOf(BACKSLASH) === -1) {
|
||
return result.replace(uidRegExp, "");
|
||
} else {
|
||
return result.split(BACKSLASH).map(function (uid) {
|
||
return uid.replace(uidRegExp, "");
|
||
});
|
||
}
|
||
}
|
||
}]);
|
||
|
||
return UniqueIdentifier;
|
||
}(AsciiStringRepresentation);
|
||
|
||
var UniversalResource = /*#__PURE__*/function (_AsciiStringRepresent10) {
|
||
_inherits(UniversalResource, _AsciiStringRepresent10);
|
||
|
||
var _super28 = _createSuper(UniversalResource);
|
||
|
||
function UniversalResource() {
|
||
var _this27;
|
||
|
||
_classCallCheck(this, UniversalResource);
|
||
|
||
_this27 = _super28.call(this, "UR");
|
||
_this27.maxLength = null;
|
||
_this27.padByte = 0x20;
|
||
return _this27;
|
||
}
|
||
|
||
_createClass(UniversalResource, [{
|
||
key: "readBytes",
|
||
value: function readBytes(stream, length) {
|
||
return stream.readAsciiString(length);
|
||
}
|
||
}]);
|
||
|
||
return UniversalResource;
|
||
}(AsciiStringRepresentation);
|
||
|
||
var UnknownValue = /*#__PURE__*/function (_BinaryRepresentation) {
|
||
_inherits(UnknownValue, _BinaryRepresentation);
|
||
|
||
var _super29 = _createSuper(UnknownValue);
|
||
|
||
function UnknownValue() {
|
||
var _this28;
|
||
|
||
_classCallCheck(this, UnknownValue);
|
||
|
||
_this28 = _super29.call(this, "UN");
|
||
_this28.maxLength = null;
|
||
_this28.padByte = 0;
|
||
_this28.noMultiple = true;
|
||
return _this28;
|
||
}
|
||
|
||
return _createClass(UnknownValue);
|
||
}(BinaryRepresentation);
|
||
|
||
var OtherWordString = /*#__PURE__*/function (_BinaryRepresentation2) {
|
||
_inherits(OtherWordString, _BinaryRepresentation2);
|
||
|
||
var _super30 = _createSuper(OtherWordString);
|
||
|
||
function OtherWordString() {
|
||
var _this29;
|
||
|
||
_classCallCheck(this, OtherWordString);
|
||
|
||
_this29 = _super30.call(this, "OW");
|
||
_this29.maxLength = null;
|
||
_this29.padByte = 0;
|
||
_this29.noMultiple = true;
|
||
return _this29;
|
||
}
|
||
|
||
return _createClass(OtherWordString);
|
||
}(BinaryRepresentation);
|
||
|
||
var OtherByteString = /*#__PURE__*/function (_BinaryRepresentation3) {
|
||
_inherits(OtherByteString, _BinaryRepresentation3);
|
||
|
||
var _super31 = _createSuper(OtherByteString);
|
||
|
||
function OtherByteString() {
|
||
var _this30;
|
||
|
||
_classCallCheck(this, OtherByteString);
|
||
|
||
_this30 = _super31.call(this, "OB");
|
||
_this30.maxLength = null;
|
||
_this30.padByte = 0;
|
||
_this30.noMultiple = true;
|
||
return _this30;
|
||
}
|
||
|
||
return _createClass(OtherByteString);
|
||
}(BinaryRepresentation);
|
||
|
||
var OtherDoubleString = /*#__PURE__*/function (_BinaryRepresentation4) {
|
||
_inherits(OtherDoubleString, _BinaryRepresentation4);
|
||
|
||
var _super32 = _createSuper(OtherDoubleString);
|
||
|
||
function OtherDoubleString() {
|
||
var _this31;
|
||
|
||
_classCallCheck(this, OtherDoubleString);
|
||
|
||
_this31 = _super32.call(this, "OD");
|
||
_this31.maxLength = null;
|
||
_this31.padByte = 0;
|
||
_this31.noMultiple = true;
|
||
return _this31;
|
||
}
|
||
|
||
return _createClass(OtherDoubleString);
|
||
}(BinaryRepresentation);
|
||
|
||
var OtherFloatString = /*#__PURE__*/function (_BinaryRepresentation5) {
|
||
_inherits(OtherFloatString, _BinaryRepresentation5);
|
||
|
||
var _super33 = _createSuper(OtherFloatString);
|
||
|
||
function OtherFloatString() {
|
||
var _this32;
|
||
|
||
_classCallCheck(this, OtherFloatString);
|
||
|
||
_this32 = _super33.call(this, "OF");
|
||
_this32.maxLength = null;
|
||
_this32.padByte = 0;
|
||
_this32.noMultiple = true;
|
||
return _this32;
|
||
}
|
||
|
||
return _createClass(OtherFloatString);
|
||
}(BinaryRepresentation); // these VR instances are precreate and are reused for each requested vr/tag
|
||
|
||
|
||
var VRinstances = {
|
||
AE: new ApplicationEntity(),
|
||
AS: new AgeString(),
|
||
AT: new AttributeTag(),
|
||
CS: new CodeString(),
|
||
DA: new DateValue(),
|
||
DS: new DecimalString(),
|
||
DT: new DateTime(),
|
||
FL: new FloatingPointSingle(),
|
||
FD: new FloatingPointDouble(),
|
||
IS: new IntegerString(),
|
||
LO: new LongString(),
|
||
LT: new LongText(),
|
||
OB: new OtherByteString(),
|
||
OD: new OtherDoubleString(),
|
||
OF: new OtherFloatString(),
|
||
OW: new OtherWordString(),
|
||
PN: new PersonName(),
|
||
SH: new ShortString(),
|
||
SL: new SignedLong(),
|
||
SQ: new SequenceOfItems(),
|
||
SS: new SignedShort(),
|
||
ST: new ShortText(),
|
||
TM: new TimeValue(),
|
||
UC: new UnlimitedCharacters(),
|
||
UI: new UniqueIdentifier(),
|
||
UL: new UnsignedLong(),
|
||
UN: new UnknownValue(),
|
||
UR: new UniversalResource(),
|
||
US: new UnsignedShort(),
|
||
UT: new UnlimitedText()
|
||
};
|
||
|
||
var DicomMetaDictionary = /*#__PURE__*/function () {
|
||
// intakes a custom dictionary that will be used to parse/denaturalize the dataset
|
||
function DicomMetaDictionary(customDictionary) {
|
||
_classCallCheck(this, DicomMetaDictionary);
|
||
|
||
this.customDictionary = customDictionary;
|
||
this.customNameMap = DicomMetaDictionary._generateCustomNameMap(customDictionary);
|
||
}
|
||
|
||
_createClass(DicomMetaDictionary, [{
|
||
key: "denaturalizeDataset",
|
||
value: // denaturalizes dataset using custom dictionary and nameMap
|
||
function denaturalizeDataset(dataset) {
|
||
return DicomMetaDictionary.denaturalizeDataset(dataset, this.customNameMap);
|
||
}
|
||
}], [{
|
||
key: "punctuateTag",
|
||
value: function punctuateTag(rawTag) {
|
||
if (rawTag.indexOf(",") !== -1) {
|
||
return rawTag;
|
||
}
|
||
|
||
if (rawTag.length === 8 && rawTag === rawTag.match(/[0-9a-fA-F]*/)[0]) {
|
||
var tag = rawTag.toUpperCase();
|
||
return "(" + tag.substring(0, 4) + "," + tag.substring(4, 8) + ")";
|
||
}
|
||
}
|
||
}, {
|
||
key: "unpunctuateTag",
|
||
value: function unpunctuateTag(tag) {
|
||
if (tag.indexOf(",") === -1) {
|
||
return tag;
|
||
}
|
||
|
||
return tag.substring(1, 10).replace(",", "");
|
||
}
|
||
}, {
|
||
key: "parseIntFromTag",
|
||
value: function parseIntFromTag(tag) {
|
||
var integerValue = parseInt("0x" + DicomMetaDictionary.unpunctuateTag(tag));
|
||
return integerValue;
|
||
}
|
||
}, {
|
||
key: "tagAsIntegerFromName",
|
||
value: function tagAsIntegerFromName(name) {
|
||
var item = DicomMetaDictionary.nameMap[name];
|
||
|
||
if (item != undefined) {
|
||
return this.parseIntFromTag(item.tag);
|
||
} else {
|
||
return undefined;
|
||
}
|
||
} // fixes some common errors in VRs
|
||
// TODO: if this gets longer it could go in ValueRepresentation.js
|
||
// or in a dedicated class
|
||
|
||
}, {
|
||
key: "cleanDataset",
|
||
value: function cleanDataset(dataset) {
|
||
var cleanedDataset = {};
|
||
Object.keys(dataset).forEach(function (tag) {
|
||
var data = Object.assign({}, dataset[tag]);
|
||
|
||
if (data.vr == "SQ") {
|
||
var cleanedValues = [];
|
||
Object.keys(data.Value).forEach(function (index) {
|
||
cleanedValues.push(DicomMetaDictionary.cleanDataset(data.Value[index]));
|
||
});
|
||
data.Value = cleanedValues;
|
||
} else {
|
||
// remove null characters from strings
|
||
data.Value = Object.keys(data.Value).map(function (index) {
|
||
var item = data.Value[index];
|
||
|
||
if (item.constructor.name == "String") {
|
||
return item.replace(/\0/, "");
|
||
}
|
||
|
||
return item;
|
||
});
|
||
}
|
||
|
||
cleanedDataset[tag] = data;
|
||
});
|
||
return cleanedDataset;
|
||
} // unlike naturalizeDataset, this only
|
||
// changes the names of the member variables
|
||
// but leaves the values intact
|
||
|
||
}, {
|
||
key: "namifyDataset",
|
||
value: function namifyDataset(dataset) {
|
||
var namedDataset = {};
|
||
Object.keys(dataset).forEach(function (tag) {
|
||
var data = Object.assign({}, dataset[tag]);
|
||
|
||
if (data.vr == "SQ") {
|
||
var namedValues = [];
|
||
Object.keys(data.Value).forEach(function (index) {
|
||
namedValues.push(DicomMetaDictionary.namifyDataset(data.Value[index]));
|
||
});
|
||
data.Value = namedValues;
|
||
}
|
||
|
||
var punctuatedTag = DicomMetaDictionary.punctuateTag(tag);
|
||
var entry = DicomMetaDictionary.dictionary[punctuatedTag];
|
||
var name = tag;
|
||
|
||
if (entry) {
|
||
name = entry.name;
|
||
}
|
||
|
||
namedDataset[name] = data;
|
||
});
|
||
return namedDataset;
|
||
}
|
||
/** converts from DICOM JSON Model dataset to a natural dataset
|
||
* - sequences become lists
|
||
* - single element lists are replaced by their first element,
|
||
* with single element lists remaining lists, but being a
|
||
* proxy for the child values, see addAccessors for examples
|
||
* - object member names are dictionary, not group/element tag
|
||
*/
|
||
|
||
}, {
|
||
key: "naturalizeDataset",
|
||
value: function naturalizeDataset(dataset) {
|
||
var naturalDataset = {
|
||
_vrMap: {}
|
||
};
|
||
Object.keys(dataset).forEach(function (tag) {
|
||
var data = dataset[tag];
|
||
var punctuatedTag = DicomMetaDictionary.punctuateTag(tag);
|
||
var entry = DicomMetaDictionary.dictionary[punctuatedTag];
|
||
var naturalName = tag;
|
||
|
||
if (entry) {
|
||
naturalName = entry.name;
|
||
|
||
if (entry.vr == "ox") {
|
||
// when the vr is data-dependent, keep track of the original type
|
||
naturalDataset._vrMap[naturalName] = data.vr;
|
||
}
|
||
}
|
||
|
||
if (data.Value === undefined) {
|
||
// In the case of type 2, add this tag but explictly set it null to indicate its empty.
|
||
naturalDataset[naturalName] = null;
|
||
|
||
if (data.InlineBinary) {
|
||
naturalDataset[naturalName] = {
|
||
InlineBinary: data.InlineBinary
|
||
};
|
||
} else if (data.BulkDataURI) {
|
||
naturalDataset[naturalName] = {
|
||
BulkDataURI: data.BulkDataURI
|
||
};
|
||
}
|
||
} else {
|
||
if (data.vr === "SQ") {
|
||
// convert sequence to list of values
|
||
var naturalValues = [];
|
||
Object.keys(data.Value).forEach(function (index) {
|
||
naturalValues.push(DicomMetaDictionary.naturalizeDataset(data.Value[index]));
|
||
});
|
||
naturalDataset[naturalName] = naturalValues;
|
||
} else {
|
||
naturalDataset[naturalName] = data.Value;
|
||
}
|
||
|
||
if (naturalDataset[naturalName].length === 1) {
|
||
var sqZero = naturalDataset[naturalName][0];
|
||
|
||
if (sqZero && _typeof(sqZero) === "object" && !sqZero.length) {
|
||
naturalDataset[naturalName] = addAccessors(naturalDataset[naturalName], sqZero);
|
||
} else {
|
||
naturalDataset[naturalName] = sqZero;
|
||
}
|
||
}
|
||
}
|
||
});
|
||
return naturalDataset;
|
||
}
|
||
}, {
|
||
key: "denaturalizeValue",
|
||
value: function denaturalizeValue(naturalValue) {
|
||
var value = naturalValue;
|
||
|
||
if (!Array.isArray(value)) {
|
||
value = [value];
|
||
} else {
|
||
var thereIsUndefinedValues = naturalValue.some(function (item) {
|
||
return item === undefined;
|
||
});
|
||
|
||
if (thereIsUndefinedValues) {
|
||
throw new Error("There are undefined values at the array naturalValue in DicomMetaDictionary.denaturalizeValue");
|
||
}
|
||
}
|
||
|
||
value = value.map(function (entry) {
|
||
return entry.constructor.name == "Number" ? String(entry) : entry;
|
||
});
|
||
return value;
|
||
} // keep the static function to support previous calls to the class
|
||
|
||
}, {
|
||
key: "denaturalizeDataset",
|
||
value: function denaturalizeDataset(dataset) {
|
||
var nameMap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DicomMetaDictionary.nameMap;
|
||
var unnaturalDataset = {};
|
||
Object.keys(dataset).forEach(function (naturalName) {
|
||
// check if it's a sequence
|
||
var name = naturalName;
|
||
var entry = nameMap[name];
|
||
|
||
if (entry) {
|
||
var dataValue = dataset[naturalName];
|
||
|
||
if (dataValue === undefined) {
|
||
// handle the case where it was deleted from the object but is in keys
|
||
return;
|
||
} // process this one entry
|
||
|
||
|
||
var dataItem = {
|
||
vr: entry.vr,
|
||
Value: dataset[naturalName]
|
||
};
|
||
|
||
if (dataValue !== null) {
|
||
if (entry.vr == "ox") {
|
||
if (dataset._vrMap && dataset._vrMap[naturalName]) {
|
||
dataItem.vr = dataset._vrMap[naturalName];
|
||
} else {
|
||
log.error("No value representation given for", naturalName);
|
||
}
|
||
}
|
||
|
||
dataItem.Value = DicomMetaDictionary.denaturalizeValue(dataItem.Value);
|
||
|
||
if (entry.vr == "SQ") {
|
||
var unnaturalValues = [];
|
||
|
||
for (var datasetIndex = 0; datasetIndex < dataItem.Value.length; datasetIndex++) {
|
||
var nestedDataset = dataItem.Value[datasetIndex];
|
||
unnaturalValues.push(DicomMetaDictionary.denaturalizeDataset(nestedDataset, nameMap));
|
||
}
|
||
|
||
dataItem.Value = unnaturalValues;
|
||
}
|
||
|
||
var vr = ValueRepresentation.createByTypeString(dataItem.vr);
|
||
|
||
if (!vr.isBinary() && vr.maxLength) {
|
||
dataItem.Value = dataItem.Value.map(function (value) {
|
||
if (value.length > vr.maxLength) {
|
||
log.warn("Truncating value ".concat(value, " of ").concat(naturalName, " because it is longer than ").concat(vr.maxLength));
|
||
return value.slice(0, vr.maxLength);
|
||
} else {
|
||
return value;
|
||
}
|
||
});
|
||
}
|
||
}
|
||
|
||
var tag = DicomMetaDictionary.unpunctuateTag(entry.tag);
|
||
unnaturalDataset[tag] = dataItem;
|
||
} else {
|
||
var validMetaNames = ["_vrMap", "_meta"];
|
||
|
||
if (validMetaNames.indexOf(name) == -1) {
|
||
log.warn("Unknown name in dataset", name, ":", dataset[name]);
|
||
}
|
||
}
|
||
});
|
||
return unnaturalDataset;
|
||
}
|
||
}, {
|
||
key: "uid",
|
||
value: function uid() {
|
||
var uid = "2.25." + Math.floor(1 + Math.random() * 9);
|
||
|
||
for (var index = 0; index < 38; index++) {
|
||
uid = uid + Math.floor(Math.random() * 10);
|
||
}
|
||
|
||
return uid;
|
||
} // date and time in UTC
|
||
|
||
}, {
|
||
key: "date",
|
||
value: function date() {
|
||
var now = new Date();
|
||
return now.toISOString().replace(/-/g, "").slice(0, 8);
|
||
}
|
||
}, {
|
||
key: "time",
|
||
value: function time() {
|
||
var now = new Date();
|
||
return now.toISOString().replace(/:/g, "").slice(11, 17);
|
||
}
|
||
}, {
|
||
key: "dateTime",
|
||
value: function dateTime() {
|
||
// "2017-07-07T16:09:18.079Z" -> "20170707160918.079"
|
||
var now = new Date();
|
||
return now.toISOString().replace(/[:\-TZ]/g, "");
|
||
}
|
||
}, {
|
||
key: "_generateNameMap",
|
||
value: function _generateNameMap() {
|
||
DicomMetaDictionary.nameMap = {};
|
||
Object.keys(DicomMetaDictionary.dictionary).forEach(function (tag) {
|
||
var dict = DicomMetaDictionary.dictionary[tag];
|
||
|
||
if (dict.version != "PrivateTag") {
|
||
DicomMetaDictionary.nameMap[dict.name] = dict;
|
||
}
|
||
});
|
||
}
|
||
}, {
|
||
key: "_generateCustomNameMap",
|
||
value: function _generateCustomNameMap(dictionary) {
|
||
var nameMap = {};
|
||
Object.keys(dictionary).forEach(function (tag) {
|
||
var dict = dictionary[tag];
|
||
|
||
if (dict.version != "PrivateTag") {
|
||
nameMap[dict.name] = dict;
|
||
}
|
||
});
|
||
return nameMap;
|
||
}
|
||
}, {
|
||
key: "_generateUIDMap",
|
||
value: function _generateUIDMap() {
|
||
DicomMetaDictionary.sopClassUIDsByName = {};
|
||
Object.keys(DicomMetaDictionary.sopClassNamesByUID).forEach(function (uid) {
|
||
var name = DicomMetaDictionary.sopClassNamesByUID[uid];
|
||
DicomMetaDictionary.sopClassUIDsByName[name] = uid;
|
||
});
|
||
}
|
||
}]);
|
||
|
||
return DicomMetaDictionary;
|
||
}(); // Subset of those listed at:
|
||
// http://dicom.nema.org/medical/dicom/current/output/html/part04.html#sect_B.5
|
||
|
||
|
||
DicomMetaDictionary.sopClassNamesByUID = {
|
||
"1.2.840.10008.5.1.4.1.1.2": "CTImage",
|
||
"1.2.840.10008.5.1.4.1.1.2.1": "EnhancedCTImage",
|
||
"1.2.840.10008.5.1.4.1.1.2.2": "LegacyConvertedEnhancedCTImage",
|
||
"1.2.840.10008.5.1.4.1.1.3.1": "USMultiframeImage",
|
||
"1.2.840.10008.5.1.4.1.1.4": "MRImage",
|
||
"1.2.840.10008.5.1.4.1.1.4.1": "EnhancedMRImage",
|
||
"1.2.840.10008.5.1.4.1.1.4.2": "MRSpectroscopy",
|
||
"1.2.840.10008.5.1.4.1.1.4.3": "EnhancedMRColorImage",
|
||
"1.2.840.10008.5.1.4.1.1.4.4": "LegacyConvertedEnhancedMRImage",
|
||
"1.2.840.10008.5.1.4.1.1.6.1": "USImage",
|
||
"1.2.840.10008.5.1.4.1.1.6.2": "EnhancedUSVolume",
|
||
"1.2.840.10008.5.1.4.1.1.7": "SecondaryCaptureImage",
|
||
"1.2.840.10008.5.1.4.1.1.30": "ParametricMapStorage",
|
||
"1.2.840.10008.5.1.4.1.1.66": "RawData",
|
||
"1.2.840.10008.5.1.4.1.1.66.1": "SpatialRegistration",
|
||
"1.2.840.10008.5.1.4.1.1.66.2": "SpatialFiducials",
|
||
"1.2.840.10008.5.1.4.1.1.66.3": "DeformableSpatialRegistration",
|
||
"1.2.840.10008.5.1.4.1.1.66.4": "Segmentation",
|
||
"1.2.840.10008.5.1.4.1.1.67": "RealWorldValueMapping",
|
||
"1.2.840.10008.5.1.4.1.1.88.11": "BasicTextSR",
|
||
"1.2.840.10008.5.1.4.1.1.88.22": "EnhancedSR",
|
||
"1.2.840.10008.5.1.4.1.1.88.33": "ComprehensiveSR",
|
||
"1.2.840.10008.5.1.4.1.1.128": "PETImage",
|
||
"1.2.840.10008.5.1.4.1.1.130": "EnhancedPETImage",
|
||
"1.2.840.10008.5.1.4.1.1.128.1": "LegacyConvertedEnhancedPETImage"
|
||
};
|
||
DicomMetaDictionary.dictionary = dictionary;
|
||
|
||
DicomMetaDictionary._generateNameMap();
|
||
|
||
DicomMetaDictionary._generateUIDMap();
|
||
|
||
var singleVRs = ["SQ", "OF", "OW", "OB", "UN", "LT"];
|
||
var encodingMapping = {
|
||
"": "iso-8859-1",
|
||
"iso-ir-6": "iso-8859-1",
|
||
"iso-ir-13": "shift-jis",
|
||
"iso-ir-100": "latin1",
|
||
"iso-ir-101": "iso-8859-2",
|
||
"iso-ir-109": "iso-8859-3",
|
||
"iso-ir-110": "iso-8859-4",
|
||
"iso-ir-126": "iso-ir-126",
|
||
"iso-ir-127": "iso-ir-127",
|
||
"iso-ir-138": "iso-ir-138",
|
||
"iso-ir-144": "iso-ir-144",
|
||
"iso-ir-148": "iso-ir-148",
|
||
"iso-ir-166": "tis-620",
|
||
"iso-2022-ir-6": "iso-8859-1",
|
||
"iso-2022-ir-13": "shift-jis",
|
||
"iso-2022-ir-87": "iso-2022-jp",
|
||
"iso-2022-ir-100": "latin1",
|
||
"iso-2022-ir-101": "iso-8859-2",
|
||
"iso-2022-ir-109": "iso-8859-3",
|
||
"iso-2022-ir-110": "iso-8859-4",
|
||
"iso-2022-ir-126": "iso-ir-126",
|
||
"iso-2022-ir-127": "iso-ir-127",
|
||
"iso-2022-ir-138": "iso-ir-138",
|
||
"iso-2022-ir-144": "iso-ir-144",
|
||
"iso-2022-ir-148": "iso-ir-148",
|
||
"iso-2022-ir-149": "euc-kr",
|
||
"iso-2022-ir-159": "iso-2022-jp",
|
||
"iso-2022-ir-166": "tis-620",
|
||
"iso-2022-ir-58": "iso-ir-58",
|
||
"iso-ir-192": "utf-8",
|
||
gb18030: "gb18030",
|
||
"iso-2022-gbk": "gbk",
|
||
"iso-2022-58": "gb2312",
|
||
gbk: "gbk"
|
||
};
|
||
var encapsulatedSyntaxes = ["1.2.840.10008.1.2.4.50", "1.2.840.10008.1.2.4.51", "1.2.840.10008.1.2.4.57", "1.2.840.10008.1.2.4.70", "1.2.840.10008.1.2.4.80", "1.2.840.10008.1.2.4.81", "1.2.840.10008.1.2.4.90", "1.2.840.10008.1.2.4.91", "1.2.840.10008.1.2.4.92", "1.2.840.10008.1.2.4.93", "1.2.840.10008.1.2.4.94", "1.2.840.10008.1.2.4.95", "1.2.840.10008.1.2.5", "1.2.840.10008.1.2.6.1", "1.2.840.10008.1.2.4.100", "1.2.840.10008.1.2.4.102", "1.2.840.10008.1.2.4.103"];
|
||
|
||
var DicomMessage = /*#__PURE__*/function () {
|
||
function DicomMessage() {
|
||
_classCallCheck(this, DicomMessage);
|
||
}
|
||
|
||
_createClass(DicomMessage, null, [{
|
||
key: "read",
|
||
value: function read(bufferStream, syntax, ignoreErrors) {
|
||
var untilTag = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
||
var includeUntilTagValue = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
||
log.warn("DicomMessage.read to be deprecated after dcmjs 0.24.x");
|
||
return this._read(bufferStream, syntax, {
|
||
ignoreErrors: ignoreErrors,
|
||
untilTag: untilTag,
|
||
includeUntilTagValue: includeUntilTagValue
|
||
});
|
||
}
|
||
}, {
|
||
key: "readTag",
|
||
value: function readTag(bufferStream, syntax) {
|
||
var untilTag = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
||
var includeUntilTagValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
||
log.warn("DicomMessage.readTag to be deprecated after dcmjs 0.24.x");
|
||
return this._readTag(bufferStream, syntax, {
|
||
untilTag: untilTag,
|
||
includeUntilTagValue: includeUntilTagValue
|
||
});
|
||
}
|
||
}, {
|
||
key: "_read",
|
||
value: function _read(bufferStream, syntax) {
|
||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
||
ignoreErrors: false,
|
||
untilTag: null,
|
||
includeUntilTagValue: false
|
||
};
|
||
var ignoreErrors = options.ignoreErrors,
|
||
untilTag = options.untilTag;
|
||
var dict = {};
|
||
|
||
try {
|
||
while (!bufferStream.end()) {
|
||
var readInfo = DicomMessage._readTag(bufferStream, syntax, options);
|
||
|
||
var cleanTagString = readInfo.tag.toCleanString();
|
||
|
||
if (cleanTagString === "00080005") {
|
||
if (readInfo.values.length > 0) {
|
||
var coding = readInfo.values[0];
|
||
coding = coding.replace(/[_ ]/g, "-").toLowerCase();
|
||
|
||
if (coding in encodingMapping) {
|
||
coding = encodingMapping[coding];
|
||
bufferStream.setDecoder(new TextDecoder(coding));
|
||
} else if (ignoreErrors) {
|
||
log.warn("Unsupported character set: ".concat(coding, ", using default character set"));
|
||
} else {
|
||
throw Error("Unsupported character set: ".concat(coding));
|
||
}
|
||
}
|
||
|
||
// if (readInfo.values.length > 1) {
|
||
// if (ignoreErrors) {
|
||
// log.warn("Using multiple character sets is not supported, proceeding with just the first character set", readInfo.values);
|
||
// } else {
|
||
// throw Error("Using multiple character sets is not supported: ".concat(readInfo.values));
|
||
// }
|
||
// }
|
||
|
||
readInfo.values = ["ISO_IR 192"]; // change SpecificCharacterSet to UTF-8
|
||
}
|
||
|
||
dict[cleanTagString] = {
|
||
vr: readInfo.vr.type,
|
||
Value: readInfo.values
|
||
};
|
||
|
||
if (untilTag && untilTag === cleanTagString) {
|
||
break;
|
||
}
|
||
}
|
||
|
||
return dict;
|
||
} catch (err) {
|
||
if (ignoreErrors) {
|
||
log.warn("WARN:", err);
|
||
return dict;
|
||
}
|
||
|
||
throw err;
|
||
}
|
||
}
|
||
}, {
|
||
key: "_normalizeSyntax",
|
||
value: function _normalizeSyntax(syntax) {
|
||
if (syntax == IMPLICIT_LITTLE_ENDIAN || syntax == EXPLICIT_LITTLE_ENDIAN$1 || syntax == EXPLICIT_BIG_ENDIAN) {
|
||
return syntax;
|
||
} else {
|
||
return EXPLICIT_LITTLE_ENDIAN$1;
|
||
}
|
||
}
|
||
}, {
|
||
key: "isEncapsulated",
|
||
value: function isEncapsulated(syntax) {
|
||
return encapsulatedSyntaxes.indexOf(syntax) != -1;
|
||
}
|
||
}, {
|
||
key: "readFile",
|
||
value: function readFile(buffer) {
|
||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
||
ignoreErrors: false,
|
||
untilTag: null,
|
||
includeUntilTagValue: false,
|
||
noCopy: false
|
||
};
|
||
var stream = new ReadBufferStream(buffer, null, {
|
||
noCopy: options.noCopy
|
||
}),
|
||
useSyntax = EXPLICIT_LITTLE_ENDIAN$1;
|
||
stream.reset();
|
||
stream.increment(128);
|
||
|
||
if (stream.readAsciiString(4) !== "DICM") {
|
||
throw new Error("Invalid DICOM file, expected header is missing");
|
||
}
|
||
|
||
var el = DicomMessage._readTag(stream, useSyntax);
|
||
|
||
if (el.tag.toCleanString() !== "00020000") {
|
||
throw new Error("Invalid DICOM file, meta length tag is malformed or not present.");
|
||
}
|
||
|
||
var metaLength = el.values[0]; //read header buffer
|
||
|
||
var metaStream = stream.more(metaLength);
|
||
|
||
var metaHeader = DicomMessage._read(metaStream, useSyntax, options); //get the syntax
|
||
|
||
|
||
var mainSyntax = metaHeader["00020010"].Value[0]; //in case of deflated dataset, decompress and continue
|
||
|
||
if (mainSyntax === DEFLATED_EXPLICIT_LITTLE_ENDIAN) {
|
||
stream = new DeflatedReadBufferStream(stream, {
|
||
noCopy: options.noCopy
|
||
});
|
||
}
|
||
|
||
mainSyntax = DicomMessage._normalizeSyntax(mainSyntax);
|
||
|
||
var objects = DicomMessage._read(stream, mainSyntax, options);
|
||
|
||
var dicomDict = new DicomDict(metaHeader);
|
||
dicomDict.dict = objects;
|
||
return dicomDict;
|
||
}
|
||
}, {
|
||
key: "writeTagObject",
|
||
value: function writeTagObject(stream, tagString, vr, values, syntax, writeOptions) {
|
||
var tag = Tag.fromString(tagString);
|
||
tag.write(stream, vr, values, syntax, writeOptions);
|
||
}
|
||
}, {
|
||
key: "write",
|
||
value: function write(jsonObjects, useStream, syntax, writeOptions) {
|
||
var written = 0;
|
||
var sortedTags = Object.keys(jsonObjects).sort();
|
||
sortedTags.forEach(function (tagString) {
|
||
var tag = Tag.fromString(tagString),
|
||
tagObject = jsonObjects[tagString],
|
||
vrType = tagObject.vr,
|
||
values = tagObject.Value;
|
||
written += tag.write(useStream, vrType, values, syntax, writeOptions);
|
||
});
|
||
return written;
|
||
}
|
||
}, {
|
||
key: "_readTag",
|
||
value: function _readTag(stream, syntax) {
|
||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
||
untilTag: null,
|
||
includeUntilTagValue: false
|
||
};
|
||
var untilTag = options.untilTag,
|
||
includeUntilTagValue = options.includeUntilTagValue;
|
||
var implicit = syntax == IMPLICIT_LITTLE_ENDIAN ? true : false,
|
||
isLittleEndian = syntax == IMPLICIT_LITTLE_ENDIAN || syntax == EXPLICIT_LITTLE_ENDIAN$1 ? true : false;
|
||
var oldEndian = stream.isLittleEndian;
|
||
stream.setEndian(isLittleEndian);
|
||
var tag = Tag.readTag(stream);
|
||
|
||
if (untilTag === tag.toCleanString() && untilTag !== null) {
|
||
if (!includeUntilTagValue) {
|
||
return {
|
||
tag: tag,
|
||
vr: 0,
|
||
values: 0
|
||
};
|
||
}
|
||
}
|
||
|
||
var length = null,
|
||
vr = null,
|
||
vrType;
|
||
|
||
if (implicit) {
|
||
length = stream.readUint32();
|
||
var elementData = DicomMessage.lookupTag(tag);
|
||
|
||
if (elementData) {
|
||
vrType = elementData.vr;
|
||
} else {
|
||
//unknown tag
|
||
if (length == 0xffffffff) {
|
||
vrType = "SQ";
|
||
} else if (tag.isPixelDataTag()) {
|
||
vrType = "OW";
|
||
} else if (vrType == "xs") {
|
||
vrType = "US";
|
||
} else if (tag.isPrivateCreator()) {
|
||
vrType = "LO";
|
||
} else {
|
||
vrType = "UN";
|
||
}
|
||
}
|
||
|
||
vr = ValueRepresentation.createByTypeString(vrType);
|
||
} else {
|
||
vrType = stream.readVR();
|
||
vr = ValueRepresentation.createByTypeString(vrType);
|
||
|
||
if (vr.isExplicit()) {
|
||
stream.increment(2);
|
||
length = stream.readUint32();
|
||
} else {
|
||
length = stream.readUint16();
|
||
}
|
||
}
|
||
|
||
var values = [];
|
||
|
||
if (vr.isBinary() && length > vr.maxLength && !vr.noMultiple) {
|
||
var times = length / vr.maxLength,
|
||
i = 0;
|
||
|
||
while (i++ < times) {
|
||
values.push(vr.read(stream, vr.maxLength, syntax));
|
||
}
|
||
} else {
|
||
var val = vr.read(stream, length, syntax);
|
||
|
||
if (!vr.isBinary() && singleVRs.indexOf(vr.type) == -1) {
|
||
values = val;
|
||
|
||
if (typeof val === "string") {
|
||
values = val.split(String.fromCharCode(0x5c));
|
||
}
|
||
} else if (vr.type == "SQ") {
|
||
values = val;
|
||
} else if (vr.type == "OW" || vr.type == "OB") {
|
||
values = val;
|
||
} else {
|
||
Array.isArray(val) ? values = val : values.push(val);
|
||
}
|
||
}
|
||
|
||
stream.setEndian(oldEndian);
|
||
return {
|
||
tag: tag,
|
||
vr: vr,
|
||
values: values
|
||
};
|
||
}
|
||
}, {
|
||
key: "lookupTag",
|
||
value: function lookupTag(tag) {
|
||
return DicomMetaDictionary.dictionary[tag.toString()];
|
||
}
|
||
}]);
|
||
|
||
return DicomMessage;
|
||
}();
|
||
|
||
var EXPLICIT_LITTLE_ENDIAN = "1.2.840.10008.1.2.1";
|
||
|
||
var DicomDict = /*#__PURE__*/function () {
|
||
function DicomDict(meta) {
|
||
_classCallCheck(this, DicomDict);
|
||
|
||
this.meta = meta;
|
||
this.dict = {};
|
||
}
|
||
|
||
_createClass(DicomDict, [{
|
||
key: "upsertTag",
|
||
value: function upsertTag(tag, vr, values) {
|
||
if (this.dict[tag]) {
|
||
this.dict[tag].Value = values;
|
||
} else {
|
||
this.dict[tag] = {
|
||
vr: vr,
|
||
Value: values
|
||
};
|
||
}
|
||
}
|
||
}, {
|
||
key: "write",
|
||
value: function write() {
|
||
var writeOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
||
allowInvalidVRLength: false
|
||
};
|
||
var metaSyntax = EXPLICIT_LITTLE_ENDIAN;
|
||
var fileStream = new WriteBufferStream(4096, true);
|
||
fileStream.writeUint8Repeat(0, 128);
|
||
fileStream.writeAsciiString("DICM");
|
||
var metaStream = new WriteBufferStream(1024);
|
||
|
||
if (!this.meta["00020010"]) {
|
||
this.meta["00020010"] = {
|
||
vr: "UI",
|
||
Value: [EXPLICIT_LITTLE_ENDIAN]
|
||
};
|
||
}
|
||
|
||
DicomMessage.write(this.meta, metaStream, metaSyntax, writeOptions);
|
||
DicomMessage.writeTagObject(fileStream, "00020000", "UL", metaStream.size, metaSyntax, writeOptions);
|
||
fileStream.concat(metaStream);
|
||
var useSyntax = this.meta["00020010"].Value[0];
|
||
DicomMessage.write(this.dict, fileStream, useSyntax, writeOptions);
|
||
return fileStream.getBuffer();
|
||
}
|
||
}]);
|
||
|
||
return DicomDict;
|
||
}();
|
||
|
||
var DICOMWEB = /*#__PURE__*/function () {
|
||
/*
|
||
JavaScript DICOMweb REST API for browser use.
|
||
Design:
|
||
* map rest api to high-level code with modern conventions
|
||
** ES6: classes, arrow functions, let...
|
||
** promises
|
||
** json converted to objects
|
||
examples: see tests() method below.
|
||
*/
|
||
function DICOMWEB() {
|
||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||
|
||
_classCallCheck(this, DICOMWEB);
|
||
|
||
this.rootURL = options.rootURL;
|
||
this.progressCallback = options.progressCallback;
|
||
}
|
||
|
||
_createClass(DICOMWEB, [{
|
||
key: "request",
|
||
value: function request(endpoint) {
|
||
var parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||
var payload = arguments.length > 2 ? arguments[2] : undefined;
|
||
var responseType = DICOMWEB.responseType(endpoint);
|
||
var service = DICOMWEB.endpointService(endpoint);
|
||
var url = this.rootURL + "/" + service + endpoint;
|
||
var firstParameter = true;
|
||
Object.keys(parameters).forEach(function (parameter) {
|
||
if (firstParameter) {
|
||
url += "?";
|
||
firstParameter = false;
|
||
} else {
|
||
url += "&";
|
||
}
|
||
|
||
url += parameter + "=" + encodeURIComponent(parameters[parameter]);
|
||
});
|
||
|
||
function promiseHandler(resolve, reject) {
|
||
var request = new XMLHttpRequest();
|
||
request.open("GET", url);
|
||
request.responseType = responseType;
|
||
|
||
request.onload = function () {
|
||
resolve(request.response);
|
||
};
|
||
|
||
request.onprogress = this.progressCallback;
|
||
|
||
request.onerror = function (error) {
|
||
log.error(request.response);
|
||
reject(error);
|
||
};
|
||
|
||
request.send(payload);
|
||
}
|
||
|
||
var promise = new Promise(promiseHandler.bind(this));
|
||
return promise;
|
||
}
|
||
}, {
|
||
key: "patients",
|
||
value: function patients() {
|
||
return this.request("patients");
|
||
}
|
||
}, {
|
||
key: "studies",
|
||
value: function studies(patientID) {
|
||
return this.request("studies", {
|
||
PatientID: patientID
|
||
});
|
||
}
|
||
}, {
|
||
key: "series",
|
||
value: function series(studyInstanceUID) {
|
||
return this.request("series", {
|
||
StudyInstanceUID: studyInstanceUID
|
||
});
|
||
}
|
||
}, {
|
||
key: "instances",
|
||
value: function instances(studyInstanceUID, seriesInstanceUID) {
|
||
return this.request("instances", {
|
||
StudyInstanceUID: studyInstanceUID,
|
||
SeriesInstanceUID: seriesInstanceUID
|
||
});
|
||
}
|
||
}, {
|
||
key: "instance",
|
||
value: function instance(studyInstanceUID, seriesInstanceUID, sopInstanceUID) {
|
||
return this.request("wado", {
|
||
requestType: "WADO",
|
||
studyUID: studyInstanceUID,
|
||
seriesUID: seriesInstanceUID,
|
||
objectUID: sopInstanceUID,
|
||
contentType: "application/dicom"
|
||
});
|
||
}
|
||
}, {
|
||
key: "tests",
|
||
value: function tests() {
|
||
var testingServerURL = "http://quantome.org:4242/dcm4chee-arc/aets/DCM4CHEE";
|
||
var testOptions = {
|
||
rootURL: testingServerURL
|
||
};
|
||
new DICOMWEB(testOptions).patients().then(function (responses) {
|
||
responses.forEach(function (patient) {
|
||
log.log(patient);
|
||
});
|
||
});
|
||
}
|
||
}], [{
|
||
key: "responseType",
|
||
value: function responseType(endpoint) {
|
||
var types = {
|
||
wado: "arraybuffer"
|
||
};
|
||
return types[endpoint] ? types[endpoint] : "json";
|
||
} // which URL service to use for each of the high level services
|
||
|
||
}, {
|
||
key: "endpointService",
|
||
value: function endpointService(endpoint) {
|
||
var services = {
|
||
wado: ""
|
||
};
|
||
return Object.keys(services).indexOf(endpoint) != -1 ? services[endpoint] : "rs/";
|
||
}
|
||
}, {
|
||
key: "randomEntry",
|
||
value: function randomEntry(array) {
|
||
return array[Math.floor(Math.random() * array.length)];
|
||
}
|
||
}]);
|
||
|
||
return DICOMWEB;
|
||
}();
|
||
|
||
//
|
||
// Handle DICOM and CIELAB colors
|
||
// based on:
|
||
// https://github.com/michaelonken/dcmtk/blob/3c68f0e882e22e6d9e2a42f836332c0ca21b3e7f/dcmiod/libsrc/cielabutil.cc
|
||
//
|
||
// RGB here refers to sRGB 0-1 per component.
|
||
// dicomlab is CIELAB values as defined in the dicom standard
|
||
// XYZ is CIEXYZ convention
|
||
//
|
||
// TODO: needs a test suite
|
||
// TODO: only dicomlab2RGB tested on real data
|
||
//
|
||
//
|
||
var Colors = /*#__PURE__*/function () {
|
||
function Colors() {
|
||
_classCallCheck(this, Colors);
|
||
}
|
||
|
||
_createClass(Colors, null, [{
|
||
key: "d65WhitePointXYZ",
|
||
value: function d65WhitePointXYZ() {
|
||
// white points of D65 light point (CIELAB standard white point)
|
||
return [0.950456, 1.0, 1.088754];
|
||
}
|
||
}, {
|
||
key: "dicomlab2RGB",
|
||
value: function dicomlab2RGB(dicomlab) {
|
||
return Colors.lab2RGB(Colors.dicomlab2LAB(dicomlab));
|
||
}
|
||
}, {
|
||
key: "rgb2DICOMLAB",
|
||
value: function rgb2DICOMLAB(rgb) {
|
||
return Colors.lab2DICOMLAB(Colors.rgb2LAB(rgb));
|
||
}
|
||
}, {
|
||
key: "dicomlab2LAB",
|
||
value: function dicomlab2LAB(dicomlab) {
|
||
return [dicomlab[0] * 100.0 / 65535.0, // results in 0 <= L <= 100
|
||
dicomlab[1] * 255.0 / 65535.0 - 128, // results in -128 <= a <= 127
|
||
dicomlab[2] * 255.0 / 65535.0 - 128 // results in -128 <= b <= 127
|
||
];
|
||
}
|
||
}, {
|
||
key: "lab2DICOMLAB",
|
||
value: function lab2DICOMLAB(lab) {
|
||
return [lab[0] * 65535.0 / 100.0, // results in 0 <= L <= 65535
|
||
(lab[1] + 128) * 65535.0 / 255.0, // results in 0 <= a <= 65535
|
||
(lab[2] + 128) * 65535.0 / 255.0 // results in 0 <= b <= 65535
|
||
];
|
||
}
|
||
}, {
|
||
key: "rgb2LAB",
|
||
value: function rgb2LAB(rgb) {
|
||
return Colors.xyz2LAB(Colors.rgb2XYZ(rgb));
|
||
}
|
||
}, {
|
||
key: "gammaCorrection",
|
||
value: function gammaCorrection(n) {
|
||
if (n <= 0.0031306684425005883) {
|
||
return 12.92 * n;
|
||
} else {
|
||
return 1.055 * Math.pow(n, 0.416666666666666667) - 0.055;
|
||
}
|
||
}
|
||
}, {
|
||
key: "invGammaCorrection",
|
||
value: function invGammaCorrection(n) {
|
||
if (n <= 0.0404482362771076) {
|
||
return n / 12.92;
|
||
} else {
|
||
return Math.pow((n + 0.055) / 1.055, 2.4);
|
||
}
|
||
}
|
||
}, {
|
||
key: "rgb2XYZ",
|
||
value: function rgb2XYZ(rgb) {
|
||
var R = Colors.invGammaCorrection(rgb[0]);
|
||
var G = Colors.invGammaCorrection(rgb[1]);
|
||
var B = Colors.invGammaCorrection(rgb[2]);
|
||
return [0.4123955889674142161 * R + 0.3575834307637148171 * G + 0.1804926473817015735 * B, 0.2125862307855955516 * R + 0.7151703037034108499 * G + 0.07220049864333622685 * B, 0.01929721549174694484 * R + 0.1191838645808485318 * G + 0.950497125131579766 * B];
|
||
}
|
||
}, {
|
||
key: "xyz2LAB",
|
||
value: function xyz2LAB(xyz) {
|
||
var whitePoint = Colors.d65WhitePointXYZ();
|
||
var X = xyz[0] / whitePoint[0];
|
||
var Y = xyz[1] / whitePoint[1];
|
||
var Z = xyz[2] / whitePoint[2];
|
||
X = Colors.labf(X);
|
||
Y = Colors.labf(Y);
|
||
Z = Colors.labf(Z);
|
||
return [116 * Y - 16, 500 * (X - Y), 200 * (Y - Z)];
|
||
}
|
||
}, {
|
||
key: "lab2RGB",
|
||
value: function lab2RGB(lab) {
|
||
return Colors.xyz2RGB(Colors.lab2XYZ(lab));
|
||
}
|
||
}, {
|
||
key: "lab2XYZ",
|
||
value: function lab2XYZ(lab) {
|
||
var L = (lab[0] + 16) / 116;
|
||
var a = L + lab[1] / 500;
|
||
var b = L - lab[2] / 200;
|
||
var whitePoint = Colors.d65WhitePointXYZ();
|
||
return [whitePoint[0] * Colors.labfInv(a), whitePoint[1] * Colors.labfInv(L), whitePoint[2] * Colors.labfInv(b)];
|
||
}
|
||
}, {
|
||
key: "xyz2RGB",
|
||
value: function xyz2RGB(xyz) {
|
||
var R1 = 3.2406 * xyz[0] - 1.5372 * xyz[1] - 0.4986 * xyz[2];
|
||
var G1 = -0.9689 * xyz[0] + 1.8758 * xyz[1] + 0.0415 * xyz[2];
|
||
var B1 = 0.0557 * xyz[0] - 0.204 * xyz[1] + 1.057 * xyz[2];
|
||
/* Force nonnegative values so that gamma correction is well-defined. */
|
||
|
||
var minimumComponent = Math.min(R1, G1);
|
||
minimumComponent = Math.min(minimumComponent, B1);
|
||
|
||
if (minimumComponent < 0) {
|
||
R1 -= minimumComponent;
|
||
G1 -= minimumComponent;
|
||
B1 -= minimumComponent;
|
||
}
|
||
/* Transform from RGB to R'G'B' */
|
||
|
||
|
||
return [Colors.gammaCorrection(R1), Colors.gammaCorrection(G1), Colors.gammaCorrection(B1)];
|
||
}
|
||
}, {
|
||
key: "labf",
|
||
value: function labf(n) {
|
||
if (n >= 8.85645167903563082e-3) {
|
||
return Math.pow(n, 0.333333333333333);
|
||
} else {
|
||
return 841.0 / 108.0 * n + 4.0 / 29.0;
|
||
}
|
||
}
|
||
}, {
|
||
key: "labfInv",
|
||
value: function labfInv(n) {
|
||
if (n >= 0.206896551724137931) {
|
||
return n * n * n;
|
||
} else {
|
||
return 108.0 / 841.0 * (n - 4.0 / 29.0);
|
||
}
|
||
}
|
||
}]);
|
||
|
||
return Colors;
|
||
}();
|
||
|
||
function datasetToDict(dataset) {
|
||
var fileMetaInformationVersionArray = new Uint8Array(2);
|
||
fileMetaInformationVersionArray[1] = 1;
|
||
var TransferSyntaxUID = dataset._meta.TransferSyntaxUID && dataset._meta.TransferSyntaxUID.Value && dataset._meta.TransferSyntaxUID.Value[0] ? dataset._meta.TransferSyntaxUID.Value[0] : "1.2.840.10008.1.2.1";
|
||
dataset._meta = {
|
||
MediaStorageSOPClassUID: dataset.SOPClassUID,
|
||
MediaStorageSOPInstanceUID: dataset.SOPInstanceUID,
|
||
ImplementationVersionName: "dcmjs-0.0",
|
||
TransferSyntaxUID: TransferSyntaxUID,
|
||
ImplementationClassUID: "2.25.80302813137786398554742050926734630921603366648225212145404",
|
||
FileMetaInformationVersion: fileMetaInformationVersionArray.buffer
|
||
};
|
||
var denaturalized = DicomMetaDictionary.denaturalizeDataset(dataset._meta);
|
||
var dicomDict = new DicomDict(denaturalized);
|
||
dicomDict.dict = DicomMetaDictionary.denaturalizeDataset(dataset);
|
||
return dicomDict;
|
||
}
|
||
|
||
function datasetToBuffer(dataset) {
|
||
return Buffer.from(datasetToDict(dataset).write());
|
||
}
|
||
|
||
function datasetToBlob(dataset) {
|
||
var buffer = datasetToBuffer(dataset);
|
||
return new Blob([buffer], {
|
||
type: "application/dicom"
|
||
});
|
||
}
|
||
|
||
var DerivedDataset = /*#__PURE__*/function () {
|
||
function DerivedDataset(datasets) {
|
||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||
|
||
_classCallCheck(this, DerivedDataset);
|
||
|
||
this.options = JSON.parse(JSON.stringify(options));
|
||
var o = this.options;
|
||
o.Manufacturer = options.Manufacturer || "Unspecified";
|
||
o.ManufacturerModelName = options.ManufacturerModelName || "Unspecified";
|
||
o.SeriesDescription = options.SeriesDescription || "Research Derived series";
|
||
o.SeriesNumber = options.SeriesNumber || "99";
|
||
o.SoftwareVersions = options.SoftwareVersions || "0";
|
||
o.DeviceSerialNumber = options.DeviceSerialNumber || "1";
|
||
var date = DicomMetaDictionary.date();
|
||
var time = DicomMetaDictionary.time();
|
||
o.SeriesDate = options.SeriesDate || date;
|
||
o.SeriesTime = options.SeriesTime || time;
|
||
o.ContentDate = options.ContentDate || date;
|
||
o.ContentTime = options.ContentTime || time;
|
||
o.SOPInstanceUID = options.SOPInstanceUID || DicomMetaDictionary.uid();
|
||
o.SeriesInstanceUID = options.SeriesInstanceUID || DicomMetaDictionary.uid();
|
||
o.ClinicalTrialTimePointID = options.ClinicalTrialTimePointID || "";
|
||
o.ClinicalTrialCoordinatingCenterName = options.ClinicalTrialCoordinatingCenterName || "";
|
||
o.ClinicalTrialSeriesID = options.ClinicalTrialSeriesID || "";
|
||
o.ImageComments = options.ImageComments || "NOT FOR CLINICAL USE";
|
||
o.ContentQualification = "RESEARCH";
|
||
this.referencedDatasets = datasets; // list of one or more dicom-like object instances
|
||
|
||
this.referencedDataset = this.referencedDatasets[0];
|
||
this.dataset = {
|
||
_vrMap: this.referencedDataset._vrMap,
|
||
_meta: this.referencedDataset._meta
|
||
};
|
||
this.derive();
|
||
}
|
||
|
||
_createClass(DerivedDataset, [{
|
||
key: "assignToDataset",
|
||
value: function assignToDataset(data) {
|
||
var _this = this;
|
||
|
||
Object.keys(data).forEach(function (key) {
|
||
return _this.dataset[key] = data[key];
|
||
});
|
||
}
|
||
}, {
|
||
key: "assignFromReference",
|
||
value: function assignFromReference(tags) {
|
||
var _this2 = this;
|
||
|
||
tags.forEach(function (tag) {
|
||
return _this2.dataset[tag] = _this2.referencedDataset[tag] || "";
|
||
});
|
||
}
|
||
}, {
|
||
key: "assignFromOptions",
|
||
value: function assignFromOptions(tags) {
|
||
var _this3 = this;
|
||
|
||
tags.forEach(function (tag) {
|
||
return _this3.dataset[tag] = _this3.options[tag] || "";
|
||
});
|
||
}
|
||
}, {
|
||
key: "derive",
|
||
value: function derive() {
|
||
// common for all instances in study
|
||
this.assignFromReference(["AccessionNumber", "ReferringPhysicianName", "StudyDate", "StudyID", "StudyTime", "PatientName", "PatientID", "PatientBirthDate", "PatientSex", "PatientAge", "StudyInstanceUID", "StudyID"]);
|
||
this.assignFromOptions(["Manufacturer", "SoftwareVersions", "DeviceSerialNumber", "ManufacturerModelName", "SeriesDescription", "SeriesNumber", "ImageComments", "SeriesDate", "SeriesTime", "ContentDate", "ContentTime", "ContentQualification", "SOPInstanceUID", "SeriesInstanceUID"]);
|
||
}
|
||
}], [{
|
||
key: "copyDataset",
|
||
value: function copyDataset(dataset) {
|
||
// copies everything but the buffers
|
||
return JSON.parse(JSON.stringify(dataset));
|
||
}
|
||
}]);
|
||
|
||
return DerivedDataset;
|
||
}();
|
||
|
||
var DerivedPixels = /*#__PURE__*/function (_DerivedDataset) {
|
||
_inherits(DerivedPixels, _DerivedDataset);
|
||
|
||
var _super = _createSuper(DerivedPixels);
|
||
|
||
function DerivedPixels(datasets) {
|
||
var _this;
|
||
|
||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||
|
||
_classCallCheck(this, DerivedPixels);
|
||
|
||
_this = _super.call(this, datasets, options);
|
||
var o = _this.options;
|
||
o.ContentLabel = options.ContentLabel || "";
|
||
o.ContentDescription = options.ContentDescription || "";
|
||
o.ContentCreatorName = options.ContentCreatorName || "";
|
||
return _this;
|
||
} // this assumes a normalized multiframe input and will create
|
||
// a multiframe derived image
|
||
|
||
|
||
_createClass(DerivedPixels, [{
|
||
key: "derive",
|
||
value: function derive() {
|
||
_get(_getPrototypeOf(DerivedPixels.prototype), "derive", this).call(this);
|
||
|
||
this.assignToDataset({
|
||
ImageType: ["DERIVED", "PRIMARY"],
|
||
LossyImageCompression: "00",
|
||
InstanceNumber: "1"
|
||
});
|
||
this.assignFromReference(["SOPClassUID", "Modality", "FrameOfReferenceUID", "PositionReferenceIndicator", "NumberOfFrames", "Rows", "Columns", "SamplesPerPixel", "PhotometricInterpretation", "BitsStored", "HighBit"]);
|
||
this.assignFromOptions(["ContentLabel", "ContentDescription", "ContentCreatorName"]); //
|
||
// TODO: more carefully copy only PixelMeasures and related
|
||
// TODO: add derivation references
|
||
//
|
||
|
||
if (this.referencedDataset.SharedFunctionalGroupsSequence) {
|
||
this.dataset.SharedFunctionalGroupsSequence = DerivedDataset.copyDataset(this.referencedDataset.SharedFunctionalGroupsSequence);
|
||
}
|
||
|
||
if (this.referencedDataset.PerFrameFunctionalGroupsSequence) {
|
||
this.dataset.PerFrameFunctionalGroupsSequence = DerivedDataset.copyDataset(this.referencedDataset.PerFrameFunctionalGroupsSequence);
|
||
} // make an array of zeros for the pixels
|
||
|
||
|
||
this.dataset.PixelData = new ArrayBuffer(this.referencedDataset.PixelData.byteLength);
|
||
}
|
||
}]);
|
||
|
||
return DerivedPixels;
|
||
}(DerivedDataset);
|
||
|
||
var DerivedImage = /*#__PURE__*/function (_DerivedPixels) {
|
||
_inherits(DerivedImage, _DerivedPixels);
|
||
|
||
var _super = _createSuper(DerivedImage);
|
||
|
||
function DerivedImage(datasets) {
|
||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||
|
||
_classCallCheck(this, DerivedImage);
|
||
|
||
return _super.call(this, datasets, options);
|
||
}
|
||
|
||
_createClass(DerivedImage, [{
|
||
key: "derive",
|
||
value: function derive() {
|
||
_get(_getPrototypeOf(DerivedImage.prototype), "derive", this).call(this);
|
||
|
||
this.assignFromReference(["WindowCenter", "WindowWidth", "BitsAllocated", "PixelRepresentation", "BodyPartExamined", "Laterality", "PatientPosition", "RescaleSlope", "RescaleIntercept", "PixelPresentation", "VolumetricProperties", "VolumeBasedCalculationTechnique", "PresentationLUTShape"]);
|
||
}
|
||
}]);
|
||
|
||
return DerivedImage;
|
||
}(DerivedPixels);
|
||
|
||
var Normalizer = /*#__PURE__*/function () {
|
||
function Normalizer(datasets) {
|
||
_classCallCheck(this, Normalizer);
|
||
|
||
this.datasets = datasets; // one or more dicom-like object instances
|
||
|
||
this.dataset = undefined; // a normalized multiframe dicom object instance
|
||
}
|
||
|
||
_createClass(Normalizer, [{
|
||
key: "normalize",
|
||
value: function normalize() {
|
||
return "No normalization defined";
|
||
}
|
||
}], [{
|
||
key: "consistentSOPClassUIDs",
|
||
value: function consistentSOPClassUIDs(datasets) {
|
||
// return sopClassUID if all exist and match, otherwise undefined
|
||
var sopClassUID;
|
||
datasets.forEach(function (dataset) {
|
||
if (!dataset.SOPClassUID) {
|
||
return undefined;
|
||
}
|
||
|
||
if (!sopClassUID) {
|
||
sopClassUID = dataset.SOPClassUID;
|
||
}
|
||
|
||
if (dataset.SOPClassUID !== sopClassUID) {
|
||
log.error("inconsistent sopClassUIDs: ", dataset.SOPClassUID, sopClassUID);
|
||
return undefined;
|
||
}
|
||
});
|
||
return sopClassUID;
|
||
}
|
||
}, {
|
||
key: "normalizerForSOPClassUID",
|
||
value: function normalizerForSOPClassUID(sopClassUID) {
|
||
sopClassUID = sopClassUID.replace(/[^0-9.]/g, ""); // TODO: clean all VRs as part of normalizing
|
||
|
||
var toUID = DicomMetaDictionary.sopClassUIDsByName;
|
||
var sopClassUIDMap = {};
|
||
sopClassUIDMap[toUID.CTImage] = CTImageNormalizer;
|
||
sopClassUIDMap[toUID.ParametricMapStorage] = PMImageNormalizer;
|
||
sopClassUIDMap[toUID.MRImage] = MRImageNormalizer;
|
||
sopClassUIDMap[toUID.EnhancedCTImage] = EnhancedCTImageNormalizer;
|
||
sopClassUIDMap[toUID.LegacyConvertedEnhancedCTImage] = EnhancedCTImageNormalizer;
|
||
sopClassUIDMap[toUID.EnhancedMRImage] = EnhancedMRImageNormalizer;
|
||
sopClassUIDMap[toUID.LegacyConvertedEnhancedMRImage] = EnhancedMRImageNormalizer;
|
||
sopClassUIDMap[toUID.EnhancedUSVolume] = EnhancedUSVolumeNormalizer;
|
||
sopClassUIDMap[toUID.PETImage] = PETImageNormalizer;
|
||
sopClassUIDMap[toUID.EnhancedPETImage] = PETImageNormalizer;
|
||
sopClassUIDMap[toUID.LegacyConvertedEnhancedPETImage] = PETImageNormalizer;
|
||
sopClassUIDMap[toUID.Segmentation] = SEGImageNormalizer;
|
||
sopClassUIDMap[toUID.DeformableSpatialRegistration] = DSRNormalizer;
|
||
return sopClassUIDMap[sopClassUID];
|
||
}
|
||
}, {
|
||
key: "isMultiframeSOPClassUID",
|
||
value: function isMultiframeSOPClassUID(sopClassUID) {
|
||
var toUID = DicomMetaDictionary.sopClassUIDsByName;
|
||
var multiframeSOPClasses = [toUID.EnhancedMRImage, toUID.LegacyConvertedEnhancedMRImage, toUID.EnhancedCTImage, toUID.LegacyConvertedEnhancedCTImage, toUID.EnhancedUSVolume, toUID.EnhancedPETImage, toUID.LegacyConvertedEnhancedPETImage, toUID.Segmentation, toUID.ParametricMapStorage];
|
||
return multiframeSOPClasses.indexOf(sopClassUID) !== -1;
|
||
}
|
||
}, {
|
||
key: "isMultiframeDataset",
|
||
value: function isMultiframeDataset() {
|
||
var ds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.dataset;
|
||
var sopClassUID = ds.SOPClassUID.replace(/[^0-9.]/g, ""); // TODO: clean all VRs as part of normalizing
|
||
|
||
return Normalizer.isMultiframeSOPClassUID(sopClassUID);
|
||
}
|
||
}, {
|
||
key: "normalizeToDataset",
|
||
value: function normalizeToDataset(datasets) {
|
||
var sopClassUID = Normalizer.consistentSOPClassUIDs(datasets);
|
||
var normalizerClass = Normalizer.normalizerForSOPClassUID(sopClassUID);
|
||
|
||
if (!normalizerClass) {
|
||
log.error("no normalizerClass for ", sopClassUID);
|
||
return undefined;
|
||
}
|
||
|
||
var normalizer = new normalizerClass(datasets);
|
||
normalizer.normalize();
|
||
return normalizer.dataset;
|
||
}
|
||
}]);
|
||
|
||
return Normalizer;
|
||
}();
|
||
|
||
var ImageNormalizer = /*#__PURE__*/function (_Normalizer) {
|
||
_inherits(ImageNormalizer, _Normalizer);
|
||
|
||
var _super = _createSuper(ImageNormalizer);
|
||
|
||
function ImageNormalizer() {
|
||
_classCallCheck(this, ImageNormalizer);
|
||
|
||
return _super.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(ImageNormalizer, [{
|
||
key: "normalize",
|
||
value: function normalize() {
|
||
this.convertToMultiframe();
|
||
this.normalizeMultiframe();
|
||
}
|
||
}, {
|
||
key: "convertToMultiframe",
|
||
value: function convertToMultiframe() {
|
||
if (this.datasets.length === 1 && Normalizer.isMultiframeDataset(this.datasets[0])) {
|
||
// already a multiframe, so just use it
|
||
this.dataset = this.datasets[0];
|
||
return;
|
||
}
|
||
|
||
this.derivation = new DerivedImage(this.datasets);
|
||
this.dataset = this.derivation.dataset;
|
||
var ds = this.dataset; // create a new multiframe from the source datasets
|
||
// fill in only those elements required to make a valid image
|
||
// for volumetric processing
|
||
|
||
var referenceDataset = this.datasets[0];
|
||
ds.NumberOfFrames = this.datasets.length; // TODO: develop sets of elements to copy over in loops
|
||
|
||
ds.SOPClassUID = referenceDataset.SOPClassUID;
|
||
ds.Rows = referenceDataset.Rows;
|
||
ds.Columns = referenceDataset.Columns;
|
||
ds.BitsAllocated = referenceDataset.BitsAllocated;
|
||
ds.PixelRepresentation = referenceDataset.PixelRepresentation;
|
||
ds.RescaleSlope = referenceDataset.RescaleSlope || "1";
|
||
ds.RescaleIntercept = referenceDataset.RescaleIntercept || "0"; //ds.BurnedInAnnotation = referenceDataset.BurnedInAnnotation || "YES";
|
||
// sort
|
||
// https://github.com/pieper/Slicer3/blob/master/Base/GUI/Tcl/LoadVolume.tcl
|
||
// TODO: add spacing checks:
|
||
// https://github.com/Slicer/Slicer/blob/master/Modules/Scripted/DICOMPlugins/DICOMScalarVolumePlugin.py#L228-L250
|
||
// TODO: put this information into the Shared and PerFrame functional groups
|
||
// TODO: sorting of frames could happen in normalizeMultiframe instead, since other
|
||
// multiframe converters may not sort the images
|
||
// TODO: sorting can be seen as part of generation of the Dimension Multiframe Dimension Module
|
||
// and should really be done in an acquisition-specific way (e.g. for DCE)
|
||
|
||
var referencePosition = referenceDataset.ImagePositionPatient;
|
||
var rowVector = referenceDataset.ImageOrientationPatient.slice(0, 3);
|
||
var columnVector = referenceDataset.ImageOrientationPatient.slice(3, 6);
|
||
var scanAxis = ImageNormalizer.vec3CrossProduct(rowVector, columnVector);
|
||
var distanceDatasetPairs = [];
|
||
this.datasets.forEach(function (dataset) {
|
||
var position = dataset.ImagePositionPatient.slice();
|
||
var positionVector = ImageNormalizer.vec3Subtract(position, referencePosition);
|
||
var distance = ImageNormalizer.vec3Dot(positionVector, scanAxis);
|
||
distanceDatasetPairs.push([distance, dataset]);
|
||
});
|
||
distanceDatasetPairs.sort(function (a, b) {
|
||
return b[0] - a[0];
|
||
}); // assign array buffers
|
||
|
||
if (ds.BitsAllocated !== 16) {
|
||
log.error("Only works with 16 bit data, not " + String(this.dataset.BitsAllocated));
|
||
}
|
||
|
||
if (referenceDataset._vrMap && !referenceDataset._vrMap.PixelData) {
|
||
log.warn("No vr map given for pixel data, using OW");
|
||
ds._vrMap = {
|
||
PixelData: "OW"
|
||
};
|
||
} else {
|
||
ds._vrMap = {
|
||
PixelData: referenceDataset._vrMap.PixelData
|
||
};
|
||
}
|
||
|
||
var frameSize = referenceDataset.PixelData.byteLength;
|
||
ds.PixelData = new ArrayBuffer(ds.NumberOfFrames * frameSize);
|
||
var frame = 0;
|
||
distanceDatasetPairs.forEach(function (pair) {
|
||
var dataset = pair[1];
|
||
var pixels = new Uint16Array(dataset.PixelData);
|
||
var frameView = new Uint16Array(ds.PixelData, frame * frameSize, frameSize / 2);
|
||
|
||
try {
|
||
frameView.set(pixels);
|
||
} catch (e) {
|
||
if (e instanceof RangeError) {
|
||
var message = "Error inserting pixels in PixelData\n" + "frameSize ".concat(frameSize, "\n") + "NumberOfFrames ".concat(ds.NumberOfFrames, "\n") + "pair ".concat(pair, "\n") + "dataset PixelData size ".concat(dataset.PixelData.length);
|
||
log.error(message);
|
||
}
|
||
}
|
||
|
||
frame++;
|
||
});
|
||
|
||
if (ds.NumberOfFrames < 2) {
|
||
// TODO
|
||
log.error("Cannot populate shared groups uniquely without multiple frames");
|
||
}
|
||
|
||
var _distanceDatasetPairs = _slicedToArray(distanceDatasetPairs[0], 2),
|
||
distance0 = _distanceDatasetPairs[0],
|
||
dataset0 = _distanceDatasetPairs[1];
|
||
|
||
var distance1 = distanceDatasetPairs[1][0]; //
|
||
// make the functional groups
|
||
//
|
||
// shared
|
||
|
||
var SpacingBetweenSlices = Math.abs(distance1 - distance0);
|
||
ds.SharedFunctionalGroupsSequence = {
|
||
PlaneOrientationSequence: {
|
||
ImageOrientationPatient: dataset0.ImageOrientationPatient
|
||
},
|
||
PixelMeasuresSequence: {
|
||
PixelSpacing: dataset0.PixelSpacing,
|
||
SpacingBetweenSlices: SpacingBetweenSlices,
|
||
SliceThickness: SpacingBetweenSlices
|
||
}
|
||
};
|
||
ds.ReferencedSeriesSequence = {
|
||
SeriesInstanceUID: dataset0.SeriesInstanceUID,
|
||
ReferencedInstanceSequence: []
|
||
}; // per-frame
|
||
|
||
ds.PerFrameFunctionalGroupsSequence = []; // copy over each datasets window/level into the per-frame groups
|
||
// and set the referenced series uid
|
||
|
||
distanceDatasetPairs.forEach(function (pair) {
|
||
var dataset = pair[1];
|
||
ds.PerFrameFunctionalGroupsSequence.push({
|
||
PlanePositionSequence: {
|
||
ImagePositionPatient: dataset.ImagePositionPatient
|
||
},
|
||
FrameVOILUTSequence: {
|
||
WindowCenter: dataset.WindowCenter,
|
||
WindowWidth: dataset.WindowWidth
|
||
}
|
||
});
|
||
ds.ReferencedSeriesSequence.ReferencedInstanceSequence.push({
|
||
ReferencedSOPClassUID: dataset.SOPClassUID,
|
||
ReferencedSOPInstanceUID: dataset.SOPInstanceUID
|
||
});
|
||
});
|
||
var dimensionUID = DicomMetaDictionary.uid();
|
||
this.dataset.DimensionOrganizationSequence = {
|
||
DimensionOrganizationUID: dimensionUID
|
||
};
|
||
this.dataset.DimensionIndexSequence = [{
|
||
DimensionOrganizationUID: dimensionUID,
|
||
DimensionIndexPointer: 2097202,
|
||
FunctionalGroupPointer: 2134291,
|
||
// PlanePositionSequence
|
||
DimensionDescriptionLabel: "ImagePositionPatient"
|
||
}];
|
||
}
|
||
}, {
|
||
key: "normalizeMultiframe",
|
||
value: function normalizeMultiframe() {
|
||
var ds = this.dataset;
|
||
|
||
if (!ds.NumberOfFrames) {
|
||
log.error("Missing number or frames not supported");
|
||
return;
|
||
}
|
||
|
||
if (!ds.PixelRepresentation) {
|
||
// Required tag: guess signed
|
||
ds.PixelRepresentation = 1;
|
||
}
|
||
|
||
if (!ds.StudyID || ds.StudyID === "") {
|
||
// Required tag: fill in if needed
|
||
ds.StudyID = "No Study ID";
|
||
}
|
||
|
||
var validLateralities = ["R", "L"];
|
||
|
||
if (validLateralities.indexOf(ds.Laterality) === -1) {
|
||
delete ds.Laterality;
|
||
}
|
||
|
||
if (!ds.PresentationLUTShape) {
|
||
ds.PresentationLUTShape = "IDENTITY";
|
||
}
|
||
|
||
if (!ds.SharedFunctionalGroupsSequence) {
|
||
log.error("Can only process multiframe data with SharedFunctionalGroupsSequence");
|
||
} // TODO: special case!
|
||
|
||
|
||
if (ds.BodyPartExamined === "PROSTATE") {
|
||
ds.SharedFunctionalGroupsSequence.FrameAnatomySequence = {
|
||
AnatomicRegionSequence: {
|
||
CodeValue: "T-9200B",
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeMeaning: "Prostate"
|
||
},
|
||
FrameLaterality: "U"
|
||
};
|
||
}
|
||
|
||
var rescaleIntercept = ds.RescaleIntercept || 0;
|
||
var rescaleSlope = ds.RescaleSlope || 1;
|
||
ds.SharedFunctionalGroupsSequence.PixelValueTransformationSequence = {
|
||
RescaleIntercept: rescaleIntercept,
|
||
RescaleSlope: rescaleSlope,
|
||
RescaleType: "US"
|
||
};
|
||
var frameNumber = 1;
|
||
this.datasets.forEach(function (dataset) {
|
||
if (ds.NumberOfFrames === 1) ds.PerFrameFunctionalGroupsSequence = [ds.PerFrameFunctionalGroupsSequence];
|
||
ds.PerFrameFunctionalGroupsSequence[frameNumber - 1].FrameContentSequence = {
|
||
FrameAcquisitionDuration: 0,
|
||
StackID: 1,
|
||
InStackPositionNumber: frameNumber,
|
||
DimensionIndexValues: frameNumber
|
||
};
|
||
var frameTime = dataset.AcquisitionDate + dataset.AcquisitionTime;
|
||
|
||
if (!isNaN(frameTime)) {
|
||
var frameContentSequence = ds.PerFrameFunctionalGroupsSequence[frameNumber - 1].FrameContentSequence;
|
||
frameContentSequence.FrameAcquisitionDateTime = frameTime;
|
||
frameContentSequence.FrameReferenceDateTime = frameTime;
|
||
}
|
||
|
||
frameNumber++;
|
||
}); //
|
||
// TODO: convert this to shared functional group not top level element
|
||
//
|
||
|
||
if (ds.WindowCenter && ds.WindowWidth) {
|
||
// if they exist as single values, make them lists for consistency
|
||
if (!Array.isArray(ds.WindowCenter)) {
|
||
ds.WindowCenter = [ds.WindowCenter];
|
||
}
|
||
|
||
if (!Array.isArray(ds.WindowWidth)) {
|
||
ds.WindowWidth = [ds.WindowWidth];
|
||
}
|
||
}
|
||
|
||
if (!ds.WindowCenter || !ds.WindowWidth) {
|
||
// if they don't exist, make them empty lists and try to initialize them
|
||
ds.WindowCenter = []; // both must exist and be the same length
|
||
|
||
ds.WindowWidth = []; // provide a volume-level window/level guess (mean of per-frame)
|
||
|
||
if (ds.PerFrameFunctionalGroupsSequence) {
|
||
var wcww = {
|
||
center: 0,
|
||
width: 0,
|
||
count: 0
|
||
};
|
||
ds.PerFrameFunctionalGroupsSequence.forEach(function (functionalGroup) {
|
||
if (functionalGroup.FrameVOILUT) {
|
||
var wc = functionalGroup.FrameVOILUTSequence.WindowCenter;
|
||
var ww = functionalGroup.FrameVOILUTSequence.WindowWidth;
|
||
|
||
if (functionalGroup.FrameVOILUTSequence && wc && ww) {
|
||
if (Array.isArray(wc)) {
|
||
wc = wc[0];
|
||
}
|
||
|
||
if (Array.isArray(ww)) {
|
||
ww = ww[0];
|
||
}
|
||
|
||
wcww.center += Number(wc);
|
||
wcww.width += Number(ww);
|
||
wcww.count++;
|
||
}
|
||
}
|
||
});
|
||
|
||
if (wcww.count > 0) {
|
||
ds.WindowCenter.push(String(wcww.center / wcww.count));
|
||
ds.WindowWidth.push(String(wcww.width / wcww.count));
|
||
}
|
||
}
|
||
} // last gasp, pick an arbitrary default
|
||
|
||
|
||
if (ds.WindowCenter.length === 0) {
|
||
ds.WindowCenter = [300];
|
||
}
|
||
|
||
if (ds.WindowWidth.length === 0) {
|
||
ds.WindowWidth = [500];
|
||
}
|
||
}
|
||
}], [{
|
||
key: "vec3CrossProduct",
|
||
value: function vec3CrossProduct(a, b) {
|
||
var ax = a[0],
|
||
ay = a[1],
|
||
az = a[2],
|
||
bx = b[0],
|
||
by = b[1],
|
||
bz = b[2];
|
||
var out = [];
|
||
out[0] = ay * bz - az * by;
|
||
out[1] = az * bx - ax * bz;
|
||
out[2] = ax * by - ay * bx;
|
||
return out;
|
||
}
|
||
}, {
|
||
key: "vec3Subtract",
|
||
value: function vec3Subtract(a, b) {
|
||
var out = [];
|
||
out[0] = a[0] - b[0];
|
||
out[1] = a[1] - b[1];
|
||
out[2] = a[2] - b[2];
|
||
return out;
|
||
}
|
||
}, {
|
||
key: "vec3Dot",
|
||
value: function vec3Dot(a, b) {
|
||
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
||
}
|
||
}]);
|
||
|
||
return ImageNormalizer;
|
||
}(Normalizer);
|
||
|
||
var MRImageNormalizer = /*#__PURE__*/function (_ImageNormalizer) {
|
||
_inherits(MRImageNormalizer, _ImageNormalizer);
|
||
|
||
var _super2 = _createSuper(MRImageNormalizer);
|
||
|
||
function MRImageNormalizer() {
|
||
_classCallCheck(this, MRImageNormalizer);
|
||
|
||
return _super2.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(MRImageNormalizer, [{
|
||
key: "normalize",
|
||
value: function normalize() {
|
||
_get(_getPrototypeOf(MRImageNormalizer.prototype), "normalize", this).call(this); // TODO: make specialization for LegacyConverted vs normal EnhanceMRImage
|
||
//let toUID = DicomMetaDictionary.sopClassUIDsByName;
|
||
|
||
|
||
this.dataset.SOPClassUID = "LegacyConvertedEnhancedMRImage"; //this.dataset.SOPClassUID = toUID.EnhancedMRImage;
|
||
}
|
||
}, {
|
||
key: "normalizeMultiframe",
|
||
value: function normalizeMultiframe() {
|
||
_get(_getPrototypeOf(MRImageNormalizer.prototype), "normalizeMultiframe", this).call(this);
|
||
|
||
var ds = this.dataset;
|
||
|
||
if (!ds.ImageType || !ds.ImageType.constructor || ds.ImageType.constructor.name != "Array" || ds.ImageType.length != 4) {
|
||
ds.ImageType = ["ORIGINAL", "PRIMARY", "OTHER", "NONE"];
|
||
}
|
||
|
||
ds.SharedFunctionalGroupsSequence.MRImageFrameTypeSequence = {
|
||
FrameType: ds.ImageType,
|
||
PixelPresentation: "MONOCHROME",
|
||
VolumetricProperties: "VOLUME",
|
||
VolumeBasedCalculationTechnique: "NONE",
|
||
ComplexImageComponent: "MAGNITUDE",
|
||
AcquisitionContrast: "UNKNOWN"
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return MRImageNormalizer;
|
||
}(ImageNormalizer);
|
||
|
||
var EnhancedCTImageNormalizer = /*#__PURE__*/function (_ImageNormalizer2) {
|
||
_inherits(EnhancedCTImageNormalizer, _ImageNormalizer2);
|
||
|
||
var _super3 = _createSuper(EnhancedCTImageNormalizer);
|
||
|
||
function EnhancedCTImageNormalizer() {
|
||
_classCallCheck(this, EnhancedCTImageNormalizer);
|
||
|
||
return _super3.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(EnhancedCTImageNormalizer, [{
|
||
key: "normalize",
|
||
value: function normalize() {
|
||
_get(_getPrototypeOf(EnhancedCTImageNormalizer.prototype), "normalize", this).call(this);
|
||
}
|
||
}]);
|
||
|
||
return EnhancedCTImageNormalizer;
|
||
}(ImageNormalizer);
|
||
|
||
var EnhancedMRImageNormalizer = /*#__PURE__*/function (_ImageNormalizer3) {
|
||
_inherits(EnhancedMRImageNormalizer, _ImageNormalizer3);
|
||
|
||
var _super4 = _createSuper(EnhancedMRImageNormalizer);
|
||
|
||
function EnhancedMRImageNormalizer() {
|
||
_classCallCheck(this, EnhancedMRImageNormalizer);
|
||
|
||
return _super4.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(EnhancedMRImageNormalizer, [{
|
||
key: "normalize",
|
||
value: function normalize() {
|
||
_get(_getPrototypeOf(EnhancedMRImageNormalizer.prototype), "normalize", this).call(this);
|
||
}
|
||
}]);
|
||
|
||
return EnhancedMRImageNormalizer;
|
||
}(ImageNormalizer);
|
||
|
||
var EnhancedUSVolumeNormalizer = /*#__PURE__*/function (_ImageNormalizer4) {
|
||
_inherits(EnhancedUSVolumeNormalizer, _ImageNormalizer4);
|
||
|
||
var _super5 = _createSuper(EnhancedUSVolumeNormalizer);
|
||
|
||
function EnhancedUSVolumeNormalizer() {
|
||
_classCallCheck(this, EnhancedUSVolumeNormalizer);
|
||
|
||
return _super5.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(EnhancedUSVolumeNormalizer, [{
|
||
key: "normalize",
|
||
value: function normalize() {
|
||
_get(_getPrototypeOf(EnhancedUSVolumeNormalizer.prototype), "normalize", this).call(this);
|
||
}
|
||
}]);
|
||
|
||
return EnhancedUSVolumeNormalizer;
|
||
}(ImageNormalizer);
|
||
|
||
var CTImageNormalizer = /*#__PURE__*/function (_ImageNormalizer5) {
|
||
_inherits(CTImageNormalizer, _ImageNormalizer5);
|
||
|
||
var _super6 = _createSuper(CTImageNormalizer);
|
||
|
||
function CTImageNormalizer() {
|
||
_classCallCheck(this, CTImageNormalizer);
|
||
|
||
return _super6.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(CTImageNormalizer, [{
|
||
key: "normalize",
|
||
value: function normalize() {
|
||
_get(_getPrototypeOf(CTImageNormalizer.prototype), "normalize", this).call(this); // TODO: provide option at export to swap in LegacyConverted UID
|
||
|
||
|
||
var toUID = DicomMetaDictionary.sopClassUIDsByName; //this.dataset.SOPClassUID = "LegacyConvertedEnhancedCTImage";
|
||
|
||
this.dataset.SOPClassUID = toUID.EnhancedCTImage;
|
||
}
|
||
}]);
|
||
|
||
return CTImageNormalizer;
|
||
}(ImageNormalizer);
|
||
|
||
var PETImageNormalizer = /*#__PURE__*/function (_ImageNormalizer6) {
|
||
_inherits(PETImageNormalizer, _ImageNormalizer6);
|
||
|
||
var _super7 = _createSuper(PETImageNormalizer);
|
||
|
||
function PETImageNormalizer() {
|
||
_classCallCheck(this, PETImageNormalizer);
|
||
|
||
return _super7.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(PETImageNormalizer, [{
|
||
key: "normalize",
|
||
value: function normalize() {
|
||
_get(_getPrototypeOf(PETImageNormalizer.prototype), "normalize", this).call(this); // TODO: provide option at export to swap in LegacyConverted UID
|
||
|
||
|
||
var toUID = DicomMetaDictionary.sopClassUIDsByName; //this.dataset.SOPClassUID = "LegacyConvertedEnhancedPETImage";
|
||
|
||
this.dataset.SOPClassUID = toUID.EnhancedPETImage;
|
||
}
|
||
}]);
|
||
|
||
return PETImageNormalizer;
|
||
}(ImageNormalizer);
|
||
|
||
var SEGImageNormalizer = /*#__PURE__*/function (_ImageNormalizer7) {
|
||
_inherits(SEGImageNormalizer, _ImageNormalizer7);
|
||
|
||
var _super8 = _createSuper(SEGImageNormalizer);
|
||
|
||
function SEGImageNormalizer() {
|
||
_classCallCheck(this, SEGImageNormalizer);
|
||
|
||
return _super8.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(SEGImageNormalizer, [{
|
||
key: "normalize",
|
||
value: function normalize() {
|
||
_get(_getPrototypeOf(SEGImageNormalizer.prototype), "normalize", this).call(this);
|
||
}
|
||
}]);
|
||
|
||
return SEGImageNormalizer;
|
||
}(ImageNormalizer);
|
||
|
||
var PMImageNormalizer = /*#__PURE__*/function (_ImageNormalizer8) {
|
||
_inherits(PMImageNormalizer, _ImageNormalizer8);
|
||
|
||
var _super9 = _createSuper(PMImageNormalizer);
|
||
|
||
function PMImageNormalizer() {
|
||
_classCallCheck(this, PMImageNormalizer);
|
||
|
||
return _super9.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(PMImageNormalizer, [{
|
||
key: "normalize",
|
||
value: function normalize() {
|
||
_get(_getPrototypeOf(PMImageNormalizer.prototype), "normalize", this).call(this);
|
||
|
||
var ds = this.datasets[0];
|
||
|
||
if (ds.BitsAllocated !== 32) {
|
||
log.error("Only works with 32 bit data, not " + String(ds.BitsAllocated));
|
||
}
|
||
}
|
||
}]);
|
||
|
||
return PMImageNormalizer;
|
||
}(ImageNormalizer);
|
||
|
||
var DSRNormalizer = /*#__PURE__*/function (_Normalizer2) {
|
||
_inherits(DSRNormalizer, _Normalizer2);
|
||
|
||
var _super10 = _createSuper(DSRNormalizer);
|
||
|
||
function DSRNormalizer() {
|
||
_classCallCheck(this, DSRNormalizer);
|
||
|
||
return _super10.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(DSRNormalizer, [{
|
||
key: "normalize",
|
||
value: function normalize() {
|
||
this.dataset = this.datasets[0]; // only one dataset per series and for now we assume it is normalized
|
||
}
|
||
}]);
|
||
|
||
return DSRNormalizer;
|
||
}(Normalizer);
|
||
|
||
var Segmentation$4 = /*#__PURE__*/function (_DerivedPixels) {
|
||
_inherits(Segmentation, _DerivedPixels);
|
||
|
||
var _super = _createSuper(Segmentation);
|
||
|
||
function Segmentation(datasets) {
|
||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
||
includeSliceSpacing: true
|
||
};
|
||
|
||
_classCallCheck(this, Segmentation);
|
||
|
||
return _super.call(this, datasets, options);
|
||
}
|
||
|
||
_createClass(Segmentation, [{
|
||
key: "derive",
|
||
value: function derive() {
|
||
_get(_getPrototypeOf(Segmentation.prototype), "derive", this).call(this);
|
||
|
||
this.assignToDataset({
|
||
SOPClassUID: DicomMetaDictionary.sopClassUIDsByName.Segmentation,
|
||
Modality: "SEG",
|
||
SamplesPerPixel: "1",
|
||
PhotometricInterpretation: "MONOCHROME2",
|
||
BitsAllocated: "1",
|
||
BitsStored: "1",
|
||
HighBit: "0",
|
||
PixelRepresentation: "0",
|
||
LossyImageCompression: "00",
|
||
SegmentationType: "BINARY",
|
||
ContentLabel: "SEGMENTATION"
|
||
});
|
||
var dimensionUID = DicomMetaDictionary.uid();
|
||
this.dataset.DimensionOrganizationSequence = {
|
||
DimensionOrganizationUID: dimensionUID
|
||
};
|
||
this.dataset.DimensionIndexSequence = [{
|
||
DimensionOrganizationUID: dimensionUID,
|
||
DimensionIndexPointer: 6422539,
|
||
FunctionalGroupPointer: 6422538,
|
||
// SegmentIdentificationSequence
|
||
DimensionDescriptionLabel: "ReferencedSegmentNumber"
|
||
}, {
|
||
DimensionOrganizationUID: dimensionUID,
|
||
DimensionIndexPointer: 2097202,
|
||
FunctionalGroupPointer: 2134291,
|
||
// PlanePositionSequence
|
||
DimensionDescriptionLabel: "ImagePositionPatient"
|
||
}];
|
||
this.dataset.SegmentSequence = []; // TODO: check logic here.
|
||
// If the referenced dataset itself references a series, then copy.
|
||
// Otherwise, reference the dataset itself.
|
||
// This should allow Slicer and others to get the correct original
|
||
// images when loading Legacy Converted Images, but it's a workaround
|
||
// that really doesn't belong here.
|
||
|
||
if (this.referencedDataset.ReferencedSeriesSequence) {
|
||
this.dataset.ReferencedSeriesSequence = DerivedDataset.copyDataset(this.referencedDataset.ReferencedSeriesSequence);
|
||
} else {
|
||
var ReferencedInstanceSequence = [];
|
||
|
||
for (var i = 0; i < this.referencedDatasets.length; i++) {
|
||
ReferencedInstanceSequence.push({
|
||
ReferencedSOPClassUID: this.referencedDatasets[i].SOPClassUID,
|
||
ReferencedSOPInstanceUID: this.referencedDatasets[i].SOPInstanceUID
|
||
});
|
||
}
|
||
|
||
this.dataset.ReferencedSeriesSequence = {
|
||
SeriesInstanceUID: this.referencedDataset.SeriesInstanceUID,
|
||
StudyInstanceUID: this.referencedDataset.StudyInstanceUID,
|
||
ReferencedInstanceSequence: ReferencedInstanceSequence
|
||
};
|
||
}
|
||
|
||
if (!this.options.includeSliceSpacing) {
|
||
// per dciodvfy this should not be included, but dcmqi/Slicer requires it
|
||
delete this.dataset.SharedFunctionalGroupsSequence.PixelMeasuresSequence.SpacingBetweenSlices;
|
||
}
|
||
|
||
if (this.dataset.SharedFunctionalGroupsSequence.PixelValueTransformationSequence) {
|
||
// If derived from a CT, this shouldn't be left in the SEG.
|
||
delete this.dataset.SharedFunctionalGroupsSequence.PixelValueTransformationSequence;
|
||
} // The pixelData array needs to be defined once you know how many frames you'll have.
|
||
|
||
|
||
this.dataset.PixelData = undefined;
|
||
this.dataset.NumberOfFrames = 0;
|
||
this.dataset.PerFrameFunctionalGroupsSequence = [];
|
||
}
|
||
/**
|
||
* setNumberOfFrames - Sets the number of frames of the segmentation object
|
||
* and allocates (non-bitpacked) memory for the PixelData for constuction.
|
||
*
|
||
* @param {type} NumberOfFrames The number of segmentation frames.
|
||
*/
|
||
|
||
}, {
|
||
key: "setNumberOfFrames",
|
||
value: function setNumberOfFrames(NumberOfFrames) {
|
||
var dataset = this.dataset;
|
||
dataset.NumberOfFrames = NumberOfFrames;
|
||
dataset.PixelData = new ArrayBuffer(dataset.Rows * dataset.Columns * NumberOfFrames);
|
||
}
|
||
/**
|
||
* bitPackPixelData - Bitpacks the pixeldata, should be called after all
|
||
* segments are addded.
|
||
*
|
||
* @returns {type} description
|
||
*/
|
||
|
||
}, {
|
||
key: "bitPackPixelData",
|
||
value: function bitPackPixelData() {
|
||
if (this.isBitpacked) {
|
||
console.warn("This.bitPackPixelData has already been called, it should only be called once, when all frames have been added. Exiting.");
|
||
}
|
||
|
||
var dataset = this.dataset;
|
||
var unpackedPixelData = dataset.PixelData;
|
||
var uInt8ViewUnpackedPixelData = new Uint8Array(unpackedPixelData);
|
||
var bitPackedPixelData = BitArray.pack(uInt8ViewUnpackedPixelData);
|
||
dataset.PixelData = bitPackedPixelData.buffer;
|
||
this.isBitpacked = true;
|
||
}
|
||
/**
|
||
* addSegmentFromLabelmap - Adds a segment to the dataset,
|
||
* where the labelmaps are a set of 2D labelmaps, from which to extract the binary maps.
|
||
*
|
||
* @param {type} Segment The segment metadata.
|
||
* @param {Uint8Array[]} labelmaps labelmap arrays for each index of referencedFrameNumbers.
|
||
* @param {number} segmentIndexInLabelmap The segment index to extract from the labelmap
|
||
* (might be different to the segment metadata depending on implementation).
|
||
* @param {number[]} referencedFrameNumbers The frames that the
|
||
* segmentation references.
|
||
*
|
||
*/
|
||
|
||
}, {
|
||
key: "addSegmentFromLabelmap",
|
||
value: function addSegmentFromLabelmap(Segment, labelmaps, segmentIndexInLabelmap, referencedFrameNumbers) {
|
||
if (this.dataset.NumberOfFrames === 0) {
|
||
throw new Error("Must set the total number of frames via setNumberOfFrames() before adding segments to the segmentation.");
|
||
}
|
||
|
||
this._addSegmentPixelDataFromLabelmaps(labelmaps, segmentIndexInLabelmap);
|
||
|
||
var ReferencedSegmentNumber = this._addSegmentMetadata(Segment);
|
||
|
||
this._addPerFrameFunctionalGroups(ReferencedSegmentNumber, referencedFrameNumbers);
|
||
}
|
||
}, {
|
||
key: "_addSegmentPixelDataFromLabelmaps",
|
||
value: function _addSegmentPixelDataFromLabelmaps(labelmaps, segmentIndex) {
|
||
var dataset = this.dataset;
|
||
var existingFrames = dataset.PerFrameFunctionalGroupsSequence.length;
|
||
var sliceLength = dataset.Rows * dataset.Columns;
|
||
var byteOffset = existingFrames * sliceLength;
|
||
var pixelDataUInt8View = new Uint8Array(dataset.PixelData, byteOffset, labelmaps.length * sliceLength);
|
||
|
||
var occupiedValue = this._getOccupiedValue();
|
||
|
||
for (var l = 0; l < labelmaps.length; l++) {
|
||
var labelmap = labelmaps[l];
|
||
|
||
for (var i = 0; i < labelmap.length; i++) {
|
||
if (labelmap[i] === segmentIndex) {
|
||
pixelDataUInt8View[l * sliceLength + i] = occupiedValue;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}, {
|
||
key: "_getOccupiedValue",
|
||
value: function _getOccupiedValue() {
|
||
if (this.dataset.SegmentationType === "FRACTIONAL") {
|
||
return 255;
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
/**
|
||
* addSegment - Adds a segment to the dataset.
|
||
*
|
||
* @param {type} Segment The segment metadata.
|
||
* @param {Uint8Array} pixelData The pixelData array containing all frames
|
||
* of the segmentation.
|
||
* @param {Number[]} referencedFrameNumbers The frames that the
|
||
* segmentation references.
|
||
*
|
||
*/
|
||
|
||
}, {
|
||
key: "addSegment",
|
||
value: function addSegment(Segment, pixelData, referencedFrameNumbers) {
|
||
if (this.dataset.NumberOfFrames === 0) {
|
||
throw new Error("Must set the total number of frames via setNumberOfFrames() before adding segments to the segmentation.");
|
||
}
|
||
|
||
this._addSegmentPixelData(pixelData);
|
||
|
||
var ReferencedSegmentNumber = this._addSegmentMetadata(Segment);
|
||
|
||
this._addPerFrameFunctionalGroups(ReferencedSegmentNumber, referencedFrameNumbers);
|
||
}
|
||
}, {
|
||
key: "_addSegmentPixelData",
|
||
value: function _addSegmentPixelData(pixelData) {
|
||
var dataset = this.dataset;
|
||
var existingFrames = dataset.PerFrameFunctionalGroupsSequence.length;
|
||
var sliceLength = dataset.Rows * dataset.Columns;
|
||
var byteOffset = existingFrames * sliceLength;
|
||
var pixelDataUInt8View = new Uint8Array(dataset.PixelData, byteOffset, pixelData.length);
|
||
|
||
for (var i = 0; i < pixelData.length; i++) {
|
||
pixelDataUInt8View[i] = pixelData[i];
|
||
}
|
||
}
|
||
}, {
|
||
key: "_addPerFrameFunctionalGroups",
|
||
value: function _addPerFrameFunctionalGroups(ReferencedSegmentNumber, referencedFrameNumbers) {
|
||
var PerFrameFunctionalGroupsSequence = this.dataset.PerFrameFunctionalGroupsSequence;
|
||
var ReferencedSeriesSequence = this.referencedDataset.ReferencedSeriesSequence;
|
||
|
||
for (var i = 0; i < referencedFrameNumbers.length; i++) {
|
||
var frameNumber = referencedFrameNumbers[i];
|
||
var perFrameFunctionalGroups = {};
|
||
perFrameFunctionalGroups.PlanePositionSequence = DerivedDataset.copyDataset(this.referencedDataset.PerFrameFunctionalGroupsSequence[frameNumber - 1].PlanePositionSequence); // If the PlaneOrientationSequence is not in the SharedFunctionalGroupsSequence,
|
||
// extract it from the PerFrameFunctionalGroupsSequence.
|
||
|
||
if (!this.dataset.SharedFunctionalGroupsSequence.PlaneOrientationSequence) {
|
||
perFrameFunctionalGroups.PlaneOrientationSequence = DerivedDataset.copyDataset(this.referencedDataset.PerFrameFunctionalGroupsSequence[frameNumber - 1].PlaneOrientationSequence);
|
||
}
|
||
|
||
perFrameFunctionalGroups.FrameContentSequence = {
|
||
DimensionIndexValues: [ReferencedSegmentNumber, frameNumber]
|
||
};
|
||
perFrameFunctionalGroups.SegmentIdentificationSequence = {
|
||
ReferencedSegmentNumber: ReferencedSegmentNumber
|
||
};
|
||
var ReferencedSOPClassUID = void 0;
|
||
var ReferencedSOPInstanceUID = void 0;
|
||
var ReferencedFrameNumber = void 0;
|
||
|
||
if (ReferencedSeriesSequence) {
|
||
var referencedInstanceSequenceI = ReferencedSeriesSequence.ReferencedInstanceSequence[frameNumber - 1];
|
||
ReferencedSOPClassUID = referencedInstanceSequenceI.ReferencedSOPClassUID;
|
||
ReferencedSOPInstanceUID = referencedInstanceSequenceI.ReferencedSOPInstanceUID;
|
||
|
||
if (Normalizer.isMultiframeSOPClassUID(ReferencedSOPClassUID)) {
|
||
ReferencedFrameNumber = frameNumber;
|
||
}
|
||
} else {
|
||
ReferencedSOPClassUID = this.referencedDataset.SOPClassUID;
|
||
ReferencedSOPInstanceUID = this.referencedDataset.SOPInstanceUID;
|
||
ReferencedFrameNumber = frameNumber;
|
||
}
|
||
|
||
if (ReferencedFrameNumber) {
|
||
perFrameFunctionalGroups.DerivationImageSequence = {
|
||
SourceImageSequence: {
|
||
ReferencedSOPClassUID: ReferencedSOPClassUID,
|
||
ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,
|
||
ReferencedFrameNumber: ReferencedFrameNumber,
|
||
PurposeOfReferenceCodeSequence: {
|
||
CodeValue: "121322",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Source image for image processing operation"
|
||
}
|
||
},
|
||
DerivationCodeSequence: {
|
||
CodeValue: "113076",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Segmentation"
|
||
}
|
||
};
|
||
} else {
|
||
perFrameFunctionalGroups.DerivationImageSequence = {
|
||
SourceImageSequence: {
|
||
ReferencedSOPClassUID: ReferencedSOPClassUID,
|
||
ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,
|
||
PurposeOfReferenceCodeSequence: {
|
||
CodeValue: "121322",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Source image for image processing operation"
|
||
}
|
||
},
|
||
DerivationCodeSequence: {
|
||
CodeValue: "113076",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Segmentation"
|
||
}
|
||
};
|
||
}
|
||
|
||
PerFrameFunctionalGroupsSequence.push(perFrameFunctionalGroups);
|
||
}
|
||
}
|
||
}, {
|
||
key: "_addSegmentMetadata",
|
||
value: function _addSegmentMetadata(Segment) {
|
||
if (!Segment.SegmentLabel || !Segment.SegmentedPropertyCategoryCodeSequence || !Segment.SegmentedPropertyTypeCodeSequence || !Segment.SegmentAlgorithmType) {
|
||
throw new Error("Segment does not contain all the required fields.");
|
||
} // Capitalise the SegmentAlgorithmType if it happens to be given in
|
||
// Lower/mixed case.
|
||
|
||
|
||
Segment.SegmentAlgorithmType = Segment.SegmentAlgorithmType.toUpperCase(); // Check SegmentAlgorithmType and SegmentAlgorithmName if necessary.
|
||
|
||
switch (Segment.SegmentAlgorithmType) {
|
||
case "AUTOMATIC":
|
||
case "SEMIAUTOMATIC":
|
||
if (!Segment.SegmentAlgorithmName) {
|
||
throw new Error("If the SegmentAlgorithmType is SEMIAUTOMATIC or AUTOMATIC,\n SegmentAlgorithmName must be provided");
|
||
}
|
||
|
||
break;
|
||
|
||
case "MANUAL":
|
||
break;
|
||
|
||
default:
|
||
throw new Error("SegmentAlgorithmType ".concat(Segment.SegmentAlgorithmType, " invalid."));
|
||
} // Deep copy, so we don't change the segment index stored in cornerstoneTools.
|
||
|
||
|
||
var SegmentSequence = this.dataset.SegmentSequence;
|
||
var SegmentAlgorithmType = Segment.SegmentAlgorithmType;
|
||
var reNumberedSegmentCopy = {
|
||
SegmentedPropertyCategoryCodeSequence: Segment.SegmentedPropertyCategoryCodeSequence,
|
||
SegmentNumber: (SegmentSequence.length + 1).toString(),
|
||
SegmentLabel: Segment.SegmentLabel,
|
||
SegmentAlgorithmType: SegmentAlgorithmType,
|
||
RecommendedDisplayCIELabValue: Segment.RecommendedDisplayCIELabValue,
|
||
SegmentedPropertyTypeCodeSequence: Segment.SegmentedPropertyTypeCodeSequence
|
||
};
|
||
|
||
if (SegmentAlgorithmType === "AUTOMATIC" || SegmentAlgorithmType === "SEMIAUTOMATIC") {
|
||
reNumberedSegmentCopy.SegmentAlgorithmName = Segment.SegmentAlgorithmName;
|
||
}
|
||
|
||
SegmentSequence.push(reNumberedSegmentCopy);
|
||
return reNumberedSegmentCopy.SegmentNumber;
|
||
}
|
||
}]);
|
||
|
||
return Segmentation;
|
||
}(DerivedPixels);
|
||
|
||
var ParametricMap = /*#__PURE__*/function (_DerivedDataset) {
|
||
_inherits(ParametricMap, _DerivedDataset);
|
||
|
||
var _super = _createSuper(ParametricMap);
|
||
|
||
function ParametricMap(datasets) {
|
||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||
|
||
_classCallCheck(this, ParametricMap);
|
||
|
||
return _super.call(this, datasets, options);
|
||
} // this assumes a normalized multiframe input and will create
|
||
// a multiframe derived image
|
||
|
||
|
||
_createClass(ParametricMap, [{
|
||
key: "derive",
|
||
value: function derive() {
|
||
_get(_getPrototypeOf(ParametricMap.prototype), "derive", this).call(this);
|
||
|
||
this.assignToDataset({// TODO: ???
|
||
});
|
||
this.assignFromReference([]);
|
||
}
|
||
}]);
|
||
|
||
return ParametricMap;
|
||
}(DerivedDataset);
|
||
|
||
var StructuredReport = /*#__PURE__*/function (_DerivedDataset) {
|
||
_inherits(StructuredReport, _DerivedDataset);
|
||
|
||
var _super = _createSuper(StructuredReport);
|
||
|
||
function StructuredReport(datasets) {
|
||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||
|
||
_classCallCheck(this, StructuredReport);
|
||
|
||
return _super.call(this, datasets, options);
|
||
} // this assumes a normalized multiframe input and will create
|
||
// a multiframe derived image
|
||
|
||
|
||
_createClass(StructuredReport, [{
|
||
key: "derive",
|
||
value: function derive() {
|
||
_get(_getPrototypeOf(StructuredReport.prototype), "derive", this).call(this);
|
||
|
||
this.assignToDataset({
|
||
SOPClassUID: DicomMetaDictionary.sopClassUIDsByName.EnhancedSR,
|
||
Modality: "SR",
|
||
ValueType: "CONTAINER"
|
||
});
|
||
this.assignFromReference([]);
|
||
}
|
||
}]);
|
||
|
||
return StructuredReport;
|
||
}(DerivedDataset);
|
||
|
||
var TID1500MeasurementReport = /*#__PURE__*/function () {
|
||
function TID1500MeasurementReport(TIDIncludeGroups) {
|
||
_classCallCheck(this, TID1500MeasurementReport);
|
||
|
||
this.TIDIncludeGroups = TIDIncludeGroups;
|
||
var ImageLibraryContentSequence = [];
|
||
var CurrentRequestedProcedureEvidenceSequence = [];
|
||
this.ImageLibraryContentSequence = ImageLibraryContentSequence;
|
||
this.CurrentRequestedProcedureEvidenceSequence = CurrentRequestedProcedureEvidenceSequence;
|
||
this.PersonObserverName = {
|
||
RelationshipType: "HAS OBS CONTEXT",
|
||
ValueType: "PNAME",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "121008",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Person Observer Name"
|
||
},
|
||
PersonName: "unknown^unknown"
|
||
};
|
||
this.tid1500 = {
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "126000",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Imaging Measurement Report"
|
||
},
|
||
ContinuityOfContent: "SEPARATE",
|
||
PerformedProcedureCodeSequence: [],
|
||
CompletionFlag: "COMPLETE",
|
||
VerificationFlag: "UNVERIFIED",
|
||
ReferencedPerformedProcedureStepSequence: [],
|
||
InstanceNumber: 1,
|
||
CurrentRequestedProcedureEvidenceSequence: CurrentRequestedProcedureEvidenceSequence,
|
||
CodingSchemeIdentificationSequence: {
|
||
CodingSchemeDesignator: "99dcmjs",
|
||
CodingSchemeName: "Codes used for dcmjs",
|
||
CodingSchemeVersion: "0",
|
||
CodingSchemeResponsibleOrganization: "https://github.com/dcmjs-org/dcmjs"
|
||
},
|
||
ContentTemplateSequence: {
|
||
MappingResource: "DCMR",
|
||
TemplateIdentifier: "1500"
|
||
},
|
||
ContentSequence: [{
|
||
RelationshipType: "HAS CONCEPT MOD",
|
||
ValueType: "CODE",
|
||
ConceptNameCodeSequence: addAccessors({
|
||
CodeValue: "121049",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Language of Content Item and Descendants"
|
||
}),
|
||
ConceptCodeSequence: addAccessors({
|
||
CodeValue: "eng",
|
||
CodingSchemeDesignator: "RFC5646",
|
||
CodeMeaning: "English"
|
||
}),
|
||
ContentSequence: addAccessors({
|
||
RelationshipType: "HAS CONCEPT MOD",
|
||
ValueType: "CODE",
|
||
ConceptNameCodeSequence: addAccessors({
|
||
CodeValue: "121046",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Country of Language"
|
||
}),
|
||
ConceptCodeSequence: addAccessors({
|
||
CodeValue: "US",
|
||
CodingSchemeDesignator: "ISO3166_1",
|
||
CodeMeaning: "United States"
|
||
})
|
||
})
|
||
}, this.PersonObserverName, {
|
||
RelationshipType: "HAS CONCEPT MOD",
|
||
ValueType: "CODE",
|
||
ConceptNameCodeSequence: addAccessors({
|
||
CodeValue: "121058",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Procedure reported"
|
||
}),
|
||
ConceptCodeSequence: addAccessors({
|
||
CodeValue: "1",
|
||
CodingSchemeDesignator: "99dcmjs",
|
||
CodeMeaning: "Unknown procedure"
|
||
})
|
||
}, {
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "CONTAINER",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "111028",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Image Library"
|
||
},
|
||
ContinuityOfContent: "SEPARATE",
|
||
ContentSequence: {
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "CONTAINER",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "126200",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Image Library Group"
|
||
},
|
||
ContinuityOfContent: "SEPARATE",
|
||
ContentSequence: ImageLibraryContentSequence
|
||
}
|
||
}]
|
||
};
|
||
}
|
||
|
||
_createClass(TID1500MeasurementReport, [{
|
||
key: "validate",
|
||
value: function validate() {}
|
||
}, {
|
||
key: "contentItem",
|
||
value: function contentItem(derivationSourceDatasetOrDatasets) {
|
||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||
|
||
if (options.PersonName) {
|
||
this.PersonObserverName.PersonName = options.PersonName;
|
||
} // Note this is left in for compatibility with the Cornerstone Legacy adapter which only supports one series for now.
|
||
|
||
|
||
var derivationSourceDatasets = Array.isArray(derivationSourceDatasetOrDatasets) ? derivationSourceDatasetOrDatasets : [derivationSourceDatasetOrDatasets]; // Add the Measurement Groups to the Measurement Report
|
||
|
||
this.addTID1501MeasurementGroups(derivationSourceDatasets, options);
|
||
return this.tid1500;
|
||
}
|
||
}, {
|
||
key: "addTID1501MeasurementGroups",
|
||
value: function addTID1501MeasurementGroups(derivationSourceDatasets) {
|
||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||
var CurrentRequestedProcedureEvidenceSequence = this.CurrentRequestedProcedureEvidenceSequence,
|
||
ImageLibraryContentSequence = this.ImageLibraryContentSequence;
|
||
var sopInstanceUIDsToSeriesInstanceUIDMap = options.sopInstanceUIDsToSeriesInstanceUIDMap;
|
||
|
||
if (derivationSourceDatasets.length > 1 && sopInstanceUIDsToSeriesInstanceUIDMap === undefined) {
|
||
throw new Error("addTID1501MeasurementGroups provided with ".concat(derivationSourceDatasets.length, " derivationSourceDatasets, with no sopInstanceUIDsToSeriesInstanceUIDMap in options."));
|
||
}
|
||
|
||
var TID1501MeasurementGroups = this.TIDIncludeGroups.TID1501MeasurementGroups;
|
||
|
||
if (!TID1501MeasurementGroups) {
|
||
return;
|
||
}
|
||
|
||
var ContentSequence = [];
|
||
TID1501MeasurementGroups.forEach(function (child) {
|
||
ContentSequence = ContentSequence.concat(child.contentItem());
|
||
});
|
||
var parsedSOPInstances = []; // For each measurement that is referenced, add a link to the
|
||
// Image Library Group and the Current Requested Procedure Evidence
|
||
// with the proper ReferencedSOPSequence
|
||
|
||
TID1501MeasurementGroups.forEach(function (measurementGroup) {
|
||
measurementGroup.TID300Measurements.forEach(function (measurement) {
|
||
var ReferencedSOPInstanceUID = measurement.ReferencedSOPSequence.ReferencedSOPInstanceUID;
|
||
|
||
if (!parsedSOPInstances.includes(ReferencedSOPInstanceUID)) {
|
||
ImageLibraryContentSequence.push({
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: measurement.ReferencedSOPSequence
|
||
});
|
||
var derivationSourceDataset;
|
||
|
||
if (derivationSourceDatasets.length === 1) {
|
||
// If there is only one derivationSourceDataset, use it.
|
||
derivationSourceDataset = derivationSourceDatasets[0];
|
||
} else {
|
||
var SeriesInstanceUID = sopInstanceUIDsToSeriesInstanceUIDMap[ReferencedSOPInstanceUID];
|
||
derivationSourceDataset = derivationSourceDatasets.find(function (dsd) {
|
||
return dsd.SeriesInstanceUID === SeriesInstanceUID;
|
||
});
|
||
}
|
||
/**
|
||
* Note: the VM of the ReferencedSeriesSequence and ReferencedSOPSequence are 1, so
|
||
* it is correct that we have a full `CurrentRequestedProcedureEvidenceSequence`
|
||
* item per `SOPInstanceUID`.
|
||
*/
|
||
|
||
|
||
CurrentRequestedProcedureEvidenceSequence.push({
|
||
StudyInstanceUID: derivationSourceDataset.StudyInstanceUID,
|
||
ReferencedSeriesSequence: {
|
||
SeriesInstanceUID: derivationSourceDataset.SeriesInstanceUID,
|
||
ReferencedSOPSequence: measurement.ReferencedSOPSequence
|
||
}
|
||
});
|
||
parsedSOPInstances.push(ReferencedSOPInstanceUID);
|
||
}
|
||
});
|
||
});
|
||
var ImagingMeasurments = {
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "CONTAINER",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "126010",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Imaging Measurements" // TODO: would be nice to abstract the code sequences (in a dictionary? a service?)
|
||
|
||
},
|
||
ContinuityOfContent: "SEPARATE",
|
||
ContentSequence: ContentSequence
|
||
};
|
||
this.tid1500.ContentSequence.push(ImagingMeasurments);
|
||
}
|
||
}]);
|
||
|
||
return TID1500MeasurementReport;
|
||
}();
|
||
|
||
var TID1501MeasurementGroup = /*#__PURE__*/function () {
|
||
function TID1501MeasurementGroup(TID300Measurements) {
|
||
_classCallCheck(this, TID1501MeasurementGroup);
|
||
|
||
this.TID300Measurements = TID300Measurements;
|
||
}
|
||
|
||
_createClass(TID1501MeasurementGroup, [{
|
||
key: "contentItem",
|
||
value: function contentItem() {
|
||
var _this = this;
|
||
|
||
var TID300Measurements = this.TID300Measurements; // TODO: Is there nothing else in this group?
|
||
|
||
var measurementGroups = [];
|
||
TID300Measurements.forEach(function (TID300Measurement) {
|
||
measurementGroups.push(_this.getMeasurementGroup(TID300Measurement.contentItem()));
|
||
});
|
||
return measurementGroups;
|
||
}
|
||
}, {
|
||
key: "getMeasurementGroup",
|
||
value: function getMeasurementGroup(contentSequenceEntries) {
|
||
return {
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "CONTAINER",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "125007",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Measurement Group"
|
||
},
|
||
ContinuityOfContent: "SEPARATE",
|
||
ContentSequence: _toConsumableArray(contentSequenceEntries)
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return TID1501MeasurementGroup;
|
||
}();
|
||
|
||
var toArray = function toArray(x) {
|
||
return Array.isArray(x) ? x : [x];
|
||
};
|
||
|
||
var codeMeaningEquals = function codeMeaningEquals(codeMeaningName) {
|
||
return function (contentItem) {
|
||
return contentItem.ConceptNameCodeSequence.CodeMeaning === codeMeaningName;
|
||
};
|
||
};
|
||
|
||
var graphicTypeEquals = function graphicTypeEquals(graphicType) {
|
||
return function (contentItem) {
|
||
return contentItem && contentItem.GraphicType === graphicType;
|
||
};
|
||
};
|
||
|
||
var FINDING$2 = {
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeValue: "121071"
|
||
};
|
||
var FINDING_SITE$2 = {
|
||
CodingSchemeDesignator: "SCT",
|
||
CodeValue: "363698007"
|
||
};
|
||
var FINDING_SITE_OLD$1 = {
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeValue: "G-C0E3"
|
||
};
|
||
|
||
var codeValueMatch$1 = function codeValueMatch(group, code, oldCode) {
|
||
var ConceptNameCodeSequence = group.ConceptNameCodeSequence;
|
||
if (!ConceptNameCodeSequence) return;
|
||
var CodingSchemeDesignator = ConceptNameCodeSequence.CodingSchemeDesignator,
|
||
CodeValue = ConceptNameCodeSequence.CodeValue;
|
||
return CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue || oldCode && CodingSchemeDesignator == oldCode.CodingSchemeDesignator && CodeValue == oldCode.CodeValue;
|
||
};
|
||
|
||
function getTID300ContentItem$2(tool, toolType, ReferencedSOPSequence, toolClass) {
|
||
var args = toolClass.getTID300RepresentationArguments(tool);
|
||
args.ReferencedSOPSequence = ReferencedSOPSequence;
|
||
var TID300Measurement = new toolClass.TID300Representation(args);
|
||
return TID300Measurement;
|
||
}
|
||
|
||
function getMeasurementGroup$2(toolType, toolData, ReferencedSOPSequence) {
|
||
var toolTypeData = toolData[toolType];
|
||
var toolClass = MeasurementReport$3.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolType];
|
||
|
||
if (!toolTypeData || !toolTypeData.data || !toolTypeData.data.length || !toolClass) {
|
||
return;
|
||
} // Loop through the array of tool instances
|
||
// for this tool
|
||
|
||
|
||
var Measurements = toolTypeData.data.map(function (tool) {
|
||
return getTID300ContentItem$2(tool, toolType, ReferencedSOPSequence, toolClass);
|
||
});
|
||
return new TID1501MeasurementGroup(Measurements);
|
||
}
|
||
|
||
var MeasurementReport$3 = /*#__PURE__*/function () {
|
||
function MeasurementReport() {
|
||
_classCallCheck(this, MeasurementReport);
|
||
}
|
||
|
||
_createClass(MeasurementReport, null, [{
|
||
key: "getSetupMeasurementData",
|
||
value: function getSetupMeasurementData(MeasurementGroup) {
|
||
var ContentSequence = MeasurementGroup.ContentSequence;
|
||
var contentSequenceArr = toArray(ContentSequence);
|
||
var findingGroup = contentSequenceArr.find(function (group) {
|
||
return codeValueMatch$1(group, FINDING$2);
|
||
});
|
||
var findingSiteGroups = contentSequenceArr.filter(function (group) {
|
||
return codeValueMatch$1(group, FINDING_SITE$2, FINDING_SITE_OLD$1);
|
||
}) || [];
|
||
var NUMGroup = contentSequenceArr.find(function (group) {
|
||
return group.ValueType === "NUM";
|
||
});
|
||
var SCOORDGroup = toArray(NUMGroup.ContentSequence).find(function (group) {
|
||
return group.ValueType === "SCOORD";
|
||
});
|
||
var ReferencedSOPSequence = SCOORDGroup.ContentSequence.ReferencedSOPSequence;
|
||
var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,
|
||
ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber;
|
||
var defaultState = {
|
||
sopInstanceUid: ReferencedSOPInstanceUID,
|
||
frameIndex: ReferencedFrameNumber || 1,
|
||
complete: true,
|
||
finding: findingGroup ? addAccessors(findingGroup.ConceptCodeSequence) : undefined,
|
||
findingSites: findingSiteGroups.map(function (fsg) {
|
||
return addAccessors(fsg.ConceptCodeSequence);
|
||
})
|
||
};
|
||
|
||
if (defaultState.finding) {
|
||
defaultState.description = defaultState.finding.CodeMeaning;
|
||
}
|
||
|
||
var findingSite = defaultState.findingSites && defaultState.findingSites[0];
|
||
|
||
if (findingSite) {
|
||
defaultState.location = findingSite[0] && findingSite[0].CodeMeaning || findingSite.CodeMeaning;
|
||
}
|
||
|
||
return {
|
||
defaultState: defaultState,
|
||
findingGroup: findingGroup,
|
||
findingSiteGroups: findingSiteGroups,
|
||
NUMGroup: NUMGroup,
|
||
SCOORDGroup: SCOORDGroup,
|
||
ReferencedSOPSequence: ReferencedSOPSequence,
|
||
ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,
|
||
ReferencedFrameNumber: ReferencedFrameNumber
|
||
};
|
||
}
|
||
}, {
|
||
key: "generateReport",
|
||
value: function generateReport(toolState, metadataProvider, options) {
|
||
// ToolState for array of imageIDs to a Report
|
||
// Assume Cornerstone metadata provider has access to Study / Series / Sop Instance UID
|
||
var allMeasurementGroups = [];
|
||
var firstImageId = Object.keys(toolState)[0];
|
||
|
||
if (!firstImageId) {
|
||
throw new Error("No measurements provided.");
|
||
}
|
||
/* Patient ID
|
||
Warning - Missing attribute or value that would be needed to build DICOMDIR - Patient ID
|
||
Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Date
|
||
Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Time
|
||
Warning - Missing attribute or value that would be needed to build DICOMDIR - Study ID
|
||
*/
|
||
|
||
|
||
var generalSeriesModule = metadataProvider.get("generalSeriesModule", firstImageId); //const sopCommonModule = metadataProvider.get('sopCommonModule', firstImageId);
|
||
// NOTE: We are getting the Series and Study UIDs from the first imageId of the toolState
|
||
// which means that if the toolState is for multiple series, the report will have the incorrect
|
||
// SeriesInstanceUIDs
|
||
|
||
var studyInstanceUID = generalSeriesModule.studyInstanceUID,
|
||
seriesInstanceUID = generalSeriesModule.seriesInstanceUID; // Loop through each image in the toolData
|
||
|
||
Object.keys(toolState).forEach(function (imageId) {
|
||
var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
|
||
var frameNumber = metadataProvider.get("frameNumber", imageId);
|
||
var toolData = toolState[imageId];
|
||
var toolTypes = Object.keys(toolData);
|
||
var ReferencedSOPSequence = {
|
||
ReferencedSOPClassUID: sopCommonModule.sopClassUID,
|
||
ReferencedSOPInstanceUID: sopCommonModule.sopInstanceUID
|
||
};
|
||
|
||
if (Normalizer.isMultiframeSOPClassUID(sopCommonModule.sopClassUID)) {
|
||
ReferencedSOPSequence.ReferencedFrameNumber = frameNumber;
|
||
} // Loop through each tool type for the image
|
||
|
||
|
||
var measurementGroups = [];
|
||
toolTypes.forEach(function (toolType) {
|
||
var group = getMeasurementGroup$2(toolType, toolData, ReferencedSOPSequence);
|
||
|
||
if (group) {
|
||
measurementGroups.push(group);
|
||
}
|
||
});
|
||
allMeasurementGroups = allMeasurementGroups.concat(measurementGroups);
|
||
});
|
||
|
||
var _MeasurementReport = new TID1500MeasurementReport({
|
||
TID1501MeasurementGroups: allMeasurementGroups
|
||
}, options); // TODO: what is the correct metaheader
|
||
// http://dicom.nema.org/medical/Dicom/current/output/chtml/part10/chapter_7.html
|
||
// TODO: move meta creation to happen in derivations.js
|
||
|
||
|
||
var fileMetaInformationVersionArray = new Uint8Array(2);
|
||
fileMetaInformationVersionArray[1] = 1;
|
||
var derivationSourceDataset = {
|
||
StudyInstanceUID: studyInstanceUID,
|
||
SeriesInstanceUID: seriesInstanceUID //SOPInstanceUID: sopInstanceUID, // TODO: Necessary?
|
||
//SOPClassUID: sopClassUID,
|
||
|
||
};
|
||
var _meta = {
|
||
FileMetaInformationVersion: {
|
||
Value: [fileMetaInformationVersionArray.buffer],
|
||
vr: "OB"
|
||
},
|
||
//MediaStorageSOPClassUID
|
||
//MediaStorageSOPInstanceUID: sopCommonModule.sopInstanceUID,
|
||
TransferSyntaxUID: {
|
||
Value: ["1.2.840.10008.1.2.1"],
|
||
vr: "UI"
|
||
},
|
||
ImplementationClassUID: {
|
||
Value: [DicomMetaDictionary.uid()],
|
||
// TODO: could be git hash or other valid id
|
||
vr: "UI"
|
||
},
|
||
ImplementationVersionName: {
|
||
Value: ["dcmjs"],
|
||
vr: "SH"
|
||
}
|
||
};
|
||
var _vrMap = {
|
||
PixelData: "OW"
|
||
};
|
||
derivationSourceDataset._meta = _meta;
|
||
derivationSourceDataset._vrMap = _vrMap;
|
||
var report = new StructuredReport([derivationSourceDataset]);
|
||
|
||
var contentItem = _MeasurementReport.contentItem(derivationSourceDataset); // Merge the derived dataset with the content from the Measurement Report
|
||
|
||
|
||
report.dataset = Object.assign(report.dataset, contentItem);
|
||
report.dataset._meta = _meta;
|
||
return report;
|
||
}
|
||
/**
|
||
* Generate Cornerstone tool state from dataset
|
||
* @param {object} dataset dataset
|
||
* @param {object} hooks
|
||
* @param {function} hooks.getToolClass Function to map dataset to a tool class
|
||
* @returns
|
||
*/
|
||
|
||
}, {
|
||
key: "generateToolState",
|
||
value: function generateToolState(dataset) {
|
||
var hooks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||
|
||
// For now, bail out if the dataset is not a TID1500 SR with length measurements
|
||
if (dataset.ContentTemplateSequence.TemplateIdentifier !== "1500") {
|
||
throw new Error("This package can currently only interpret DICOM SR TID 1500");
|
||
}
|
||
|
||
var REPORT = "Imaging Measurements";
|
||
var GROUP = "Measurement Group";
|
||
var TRACKING_IDENTIFIER = "Tracking Identifier"; // Identify the Imaging Measurements
|
||
|
||
var imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT)); // Retrieve the Measurements themselves
|
||
|
||
var measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP)); // For each of the supported measurement types, compute the measurement data
|
||
|
||
var measurementData = {};
|
||
var cornerstoneToolClasses = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE;
|
||
var registeredToolClasses = [];
|
||
Object.keys(cornerstoneToolClasses).forEach(function (key) {
|
||
registeredToolClasses.push(cornerstoneToolClasses[key]);
|
||
measurementData[key] = [];
|
||
});
|
||
measurementGroups.forEach(function (measurementGroup) {
|
||
var measurementGroupContentSequence = toArray(measurementGroup.ContentSequence);
|
||
var TrackingIdentifierGroup = measurementGroupContentSequence.find(function (contentItem) {
|
||
return contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER;
|
||
});
|
||
var TrackingIdentifierValue = TrackingIdentifierGroup.TextValue;
|
||
var toolClass = hooks.getToolClass ? hooks.getToolClass(measurementGroup, dataset, registeredToolClasses) : registeredToolClasses.find(function (tc) {
|
||
return tc.isValidCornerstoneTrackingIdentifier(TrackingIdentifierValue);
|
||
});
|
||
|
||
if (toolClass) {
|
||
var measurement = toolClass.getMeasurementData(measurementGroup);
|
||
console.log("=== ".concat(toolClass.toolType, " ==="));
|
||
console.log(measurement);
|
||
measurementData[toolClass.toolType].push(measurement);
|
||
}
|
||
}); // NOTE: There is no way of knowing the cornerstone imageIds as that could be anything.
|
||
// That is up to the consumer to derive from the SOPInstanceUIDs.
|
||
|
||
return measurementData;
|
||
}
|
||
}, {
|
||
key: "registerTool",
|
||
value: function registerTool(toolClass) {
|
||
MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE[toolClass.utilityToolType] = toolClass;
|
||
MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolClass.toolType] = toolClass;
|
||
MeasurementReport.MEASUREMENT_BY_TOOLTYPE[toolClass.toolType] = toolClass.utilityToolType;
|
||
}
|
||
}]);
|
||
|
||
return MeasurementReport;
|
||
}();
|
||
MeasurementReport$3.MEASUREMENT_BY_TOOLTYPE = {};
|
||
MeasurementReport$3.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE = {};
|
||
MeasurementReport$3.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE = {};
|
||
|
||
var TID300Measurement = /*#__PURE__*/function () {
|
||
function TID300Measurement(props) {
|
||
_classCallCheck(this, TID300Measurement);
|
||
|
||
this.ReferencedSOPSequence = props.ReferencedSOPSequence;
|
||
this.props = props;
|
||
}
|
||
|
||
_createClass(TID300Measurement, [{
|
||
key: "getMeasurement",
|
||
value: function getMeasurement(contentSequenceEntries) {
|
||
return [].concat(_toConsumableArray(this.getTrackingGroups()), _toConsumableArray(this.getFindingGroup()), _toConsumableArray(this.getFindingSiteGroups()), _toConsumableArray(contentSequenceEntries));
|
||
}
|
||
}, {
|
||
key: "getTrackingGroups",
|
||
value: function getTrackingGroups() {
|
||
var trackingIdentifierTextValue = this.props.trackingIdentifierTextValue;
|
||
return [{
|
||
RelationshipType: "HAS OBS CONTEXT",
|
||
ValueType: "TEXT",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "112039",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Tracking Identifier"
|
||
},
|
||
TextValue: trackingIdentifierTextValue || "web annotation"
|
||
}, {
|
||
RelationshipType: "HAS OBS CONTEXT",
|
||
ValueType: "UIDREF",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "112040",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Tracking Unique Identifier"
|
||
},
|
||
UID: DicomMetaDictionary.uid()
|
||
}];
|
||
}
|
||
}, {
|
||
key: "getFindingGroup",
|
||
value: function getFindingGroup() {
|
||
var finding = this.props.finding;
|
||
|
||
if (!finding) {
|
||
return [];
|
||
}
|
||
|
||
var CodeValue = finding.CodeValue,
|
||
CodingSchemeDesignator = finding.CodingSchemeDesignator,
|
||
CodeMeaning = finding.CodeMeaning;
|
||
return [{
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "CODE",
|
||
ConceptNameCodeSequence: addAccessors({
|
||
CodeValue: "121071",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Finding"
|
||
}),
|
||
ConceptCodeSequence: addAccessors({
|
||
CodeValue: CodeValue,
|
||
//: "SAMPLE FINDING",
|
||
CodingSchemeDesignator: CodingSchemeDesignator,
|
||
//: "99dcmjs",
|
||
CodeMeaning: CodeMeaning //: "Sample Finding"
|
||
|
||
})
|
||
}];
|
||
}
|
||
}, {
|
||
key: "getFindingSiteGroups",
|
||
value: function getFindingSiteGroups() {
|
||
var findingSites = this.props.findingSites || [];
|
||
return findingSites.map(function (findingSite) {
|
||
var CodeValue = findingSite.CodeValue,
|
||
CodingSchemeDesignator = findingSite.CodingSchemeDesignator,
|
||
CodeMeaning = findingSite.CodeMeaning;
|
||
return {
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "CODE",
|
||
ConceptNameCodeSequence: addAccessors({
|
||
CodeValue: "363698007",
|
||
CodingSchemeDesignator: "SCT",
|
||
CodeMeaning: "Finding Site"
|
||
}),
|
||
ConceptCodeSequence: addAccessors({
|
||
CodeValue: CodeValue,
|
||
//: "SAMPLE FINDING SITE",
|
||
CodingSchemeDesignator: CodingSchemeDesignator,
|
||
//: "99dcmjs",
|
||
CodeMeaning: CodeMeaning //: "Sample Finding Site"
|
||
|
||
})
|
||
};
|
||
});
|
||
}
|
||
}]);
|
||
|
||
return TID300Measurement;
|
||
}();
|
||
|
||
var MM_UNIT = {
|
||
CodeValue: "mm",
|
||
CodingSchemeDesignator: "UCUM",
|
||
CodingSchemeVersion: "1.4",
|
||
CodeMeaning: "millimeter"
|
||
};
|
||
var MM2_UNIT = {
|
||
CodeValue: "mm2",
|
||
CodingSchemeDesignator: "UCUM",
|
||
CodingSchemeVersion: "1.4",
|
||
CodeMeaning: "SquareMilliMeter"
|
||
};
|
||
var NO_UNIT = {
|
||
CodeValue: "1",
|
||
CodingSchemeDesignator: "UCUM",
|
||
CodingSchemeVersion: "1.4",
|
||
CodeMeaning: "px"
|
||
};
|
||
var NO2_UNIT = NO_UNIT;
|
||
var measurementMap = {
|
||
px: NO_UNIT,
|
||
mm: MM_UNIT,
|
||
mm2: MM2_UNIT,
|
||
"mm\xB2": MM2_UNIT,
|
||
"px\xB2": NO2_UNIT
|
||
};
|
||
/** Converts the given unit into the
|
||
* specified coding values.
|
||
* Has .measurementMap on the function specifying global units for measurements.
|
||
*/
|
||
|
||
var unit2CodingValue = function unit2CodingValue(units) {
|
||
if (!units) return NO_UNIT;
|
||
var space = units.indexOf(" ");
|
||
var baseUnit = space === -1 ? units : units.substring(0, space);
|
||
var codingUnit = measurementMap[units] || measurementMap[baseUnit];
|
||
|
||
if (!codingUnit) {
|
||
log.error("Unspecified units", units);
|
||
return MM_UNIT;
|
||
}
|
||
|
||
return codingUnit;
|
||
};
|
||
|
||
unit2CodingValue.measurementMap = measurementMap;
|
||
|
||
var Length$2 = /*#__PURE__*/function (_TID300Measurement) {
|
||
_inherits(Length, _TID300Measurement);
|
||
|
||
var _super = _createSuper(Length);
|
||
|
||
function Length() {
|
||
_classCallCheck(this, Length);
|
||
|
||
return _super.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(Length, [{
|
||
key: "contentItem",
|
||
value: function contentItem() {
|
||
var _this$props = this.props,
|
||
point1 = _this$props.point1,
|
||
point2 = _this$props.point2,
|
||
_this$props$unit = _this$props.unit,
|
||
unit = _this$props$unit === void 0 ? "mm" : _this$props$unit,
|
||
distance = _this$props.distance,
|
||
ReferencedSOPSequence = _this$props.ReferencedSOPSequence;
|
||
return this.getMeasurement([{
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "G-D7FE",
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeMeaning: "Length"
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: unit2CodingValue(unit),
|
||
NumericValue: distance
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: "SCOORD",
|
||
GraphicType: "POLYLINE",
|
||
GraphicData: [point1.x, point1.y, point2.x, point2.y],
|
||
ContentSequence: {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}]);
|
||
}
|
||
}]);
|
||
|
||
return Length;
|
||
}(TID300Measurement);
|
||
|
||
var CORNERSTONE_4_TAG = "cornerstoneTools@^4.0.0";
|
||
|
||
var LENGTH$1 = "Length";
|
||
|
||
var Length$1 = /*#__PURE__*/function () {
|
||
function Length() {
|
||
_classCallCheck(this, Length);
|
||
} // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
|
||
|
||
|
||
_createClass(Length, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup) {
|
||
var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;
|
||
|
||
var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
|
||
length: NUMGroup.MeasuredValueSequence.NumericValue,
|
||
toolType: Length.toolType,
|
||
handles: {
|
||
start: {},
|
||
end: {},
|
||
textBox: {
|
||
hasMoved: false,
|
||
movesIndependently: false,
|
||
drawnIndependently: true,
|
||
allowedOutsideImage: true,
|
||
hasBoundingBox: true
|
||
}
|
||
}
|
||
});
|
||
|
||
var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 4);
|
||
|
||
state.handles.start.x = _SCOORDGroup$GraphicD[0];
|
||
state.handles.start.y = _SCOORDGroup$GraphicD[1];
|
||
state.handles.end.x = _SCOORDGroup$GraphicD[2];
|
||
state.handles.end.y = _SCOORDGroup$GraphicD[3];
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool) {
|
||
var handles = tool.handles,
|
||
finding = tool.finding,
|
||
findingSites = tool.findingSites;
|
||
var point1 = handles.start;
|
||
var point2 = handles.end;
|
||
var distance = tool.length;
|
||
var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:Length";
|
||
return {
|
||
point1: point1,
|
||
point2: point2,
|
||
distance: distance,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return Length;
|
||
}();
|
||
|
||
Length$1.toolType = LENGTH$1;
|
||
Length$1.utilityToolType = LENGTH$1;
|
||
Length$1.TID300Representation = Length$2;
|
||
|
||
Length$1.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone4Tag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === LENGTH$1;
|
||
};
|
||
|
||
MeasurementReport$3.registerTool(Length$1);
|
||
|
||
/**
|
||
* Expand an array of points stored as objects into
|
||
* a flattened array of points
|
||
*
|
||
* @param points [{x: 0, y: 1}, {x: 1, y: 2}] or [{x: 0, y: 1, z: 0}, {x: 1, y: 2, z: 0}]
|
||
* @return {Array} [point1x, point1y, point2x, point2y] or [point1x, point1y, point1z, point2x, point2y, point2z]
|
||
*/
|
||
|
||
function expandPoints$3(points) {
|
||
var allPoints = [];
|
||
points.forEach(function (point) {
|
||
allPoints.push(point[0] || point.x);
|
||
allPoints.push(point[1] || point.y);
|
||
|
||
if (point[2] !== undefined || point.z !== undefined) {
|
||
allPoints.push(point[2] || point.z);
|
||
}
|
||
});
|
||
return allPoints;
|
||
}
|
||
|
||
var Polyline$1 = /*#__PURE__*/function (_TID300Measurement) {
|
||
_inherits(Polyline, _TID300Measurement);
|
||
|
||
var _super = _createSuper(Polyline);
|
||
|
||
function Polyline() {
|
||
_classCallCheck(this, Polyline);
|
||
|
||
return _super.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(Polyline, [{
|
||
key: "contentItem",
|
||
value: function contentItem() {
|
||
var _this$props = this.props,
|
||
points = _this$props.points,
|
||
area = _this$props.area,
|
||
_this$props$areaUnit = _this$props.areaUnit,
|
||
areaUnit = _this$props$areaUnit === void 0 ? "mm2" : _this$props$areaUnit,
|
||
ReferencedSOPSequence = _this$props.ReferencedSOPSequence,
|
||
_this$props$use3DSpat = _this$props.use3DSpatialCoordinates,
|
||
use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat,
|
||
perimeter = _this$props.perimeter,
|
||
_this$props$unit = _this$props.unit,
|
||
unit = _this$props$unit === void 0 ? "mm" : _this$props$unit;
|
||
var GraphicData = expandPoints$3(points); // TODO: Add Mean and STDev value of (modality?) pixels
|
||
|
||
return this.getMeasurement([{
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "131191004",
|
||
CodingSchemeDesignator: "SCT",
|
||
CodeMeaning: "Perimeter"
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: unit2CodingValue(unit),
|
||
NumericValue: perimeter
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
|
||
GraphicType: "POLYLINE",
|
||
GraphicData: GraphicData,
|
||
ContentSequence: use3DSpatialCoordinates ? undefined : {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}, {
|
||
// TODO: This feels weird to repeat the GraphicData
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "G-A166",
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeMeaning: "Area" // TODO: Look this up from a Code Meaning dictionary
|
||
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: unit2CodingValue(areaUnit),
|
||
NumericValue: area
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
|
||
GraphicType: "POLYLINE",
|
||
GraphicData: GraphicData,
|
||
ContentSequence: use3DSpatialCoordinates ? undefined : {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}]);
|
||
}
|
||
}]);
|
||
|
||
return Polyline;
|
||
}(TID300Measurement);
|
||
|
||
var FreehandRoi = /*#__PURE__*/function () {
|
||
function FreehandRoi() {
|
||
_classCallCheck(this, FreehandRoi);
|
||
}
|
||
|
||
_createClass(FreehandRoi, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup) {
|
||
var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
||
NUMGroup = _MeasurementReport$ge.NUMGroup;
|
||
|
||
var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
|
||
toolType: FreehandRoi.toolType,
|
||
handles: {
|
||
points: [],
|
||
textBox: {
|
||
active: false,
|
||
hasMoved: false,
|
||
movesIndependently: false,
|
||
drawnIndependently: true,
|
||
allowedOutsideImage: true,
|
||
hasBoundingBox: true
|
||
}
|
||
},
|
||
cachedStats: {
|
||
area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
|
||
},
|
||
color: undefined,
|
||
invalidated: true
|
||
});
|
||
|
||
var GraphicData = SCOORDGroup.GraphicData;
|
||
|
||
for (var i = 0; i < GraphicData.length; i += 2) {
|
||
state.handles.points.push({
|
||
x: GraphicData[i],
|
||
y: GraphicData[i + 1]
|
||
});
|
||
}
|
||
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool) {
|
||
var handles = tool.handles,
|
||
finding = tool.finding,
|
||
findingSites = tool.findingSites,
|
||
_tool$cachedStats = tool.cachedStats,
|
||
cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats;
|
||
var points = handles.points;
|
||
var _cachedStats$area = cachedStats.area,
|
||
area = _cachedStats$area === void 0 ? 0 : _cachedStats$area,
|
||
_cachedStats$perimete = cachedStats.perimeter,
|
||
perimeter = _cachedStats$perimete === void 0 ? 0 : _cachedStats$perimete;
|
||
var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:FreehandRoi";
|
||
return {
|
||
points: points,
|
||
area: area,
|
||
perimeter: perimeter,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return FreehandRoi;
|
||
}();
|
||
|
||
FreehandRoi.toolType = "FreehandRoi";
|
||
FreehandRoi.utilityToolType = "FreehandRoi";
|
||
FreehandRoi.TID300Representation = Polyline$1;
|
||
|
||
FreehandRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone4Tag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === FreehandRoi.toolType;
|
||
};
|
||
|
||
MeasurementReport$3.registerTool(FreehandRoi);
|
||
|
||
var Bidirectional$2 = /*#__PURE__*/function (_TID300Measurement) {
|
||
_inherits(Bidirectional, _TID300Measurement);
|
||
|
||
var _super = _createSuper(Bidirectional);
|
||
|
||
function Bidirectional() {
|
||
_classCallCheck(this, Bidirectional);
|
||
|
||
return _super.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(Bidirectional, [{
|
||
key: "contentItem",
|
||
value: function contentItem() {
|
||
var _this$props = this.props,
|
||
longAxis = _this$props.longAxis,
|
||
shortAxis = _this$props.shortAxis,
|
||
longAxisLength = _this$props.longAxisLength,
|
||
shortAxisLength = _this$props.shortAxisLength,
|
||
unit = _this$props.unit,
|
||
ReferencedSOPSequence = _this$props.ReferencedSOPSequence;
|
||
return this.getMeasurement([{
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "G-A185",
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeMeaning: "Long Axis"
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: unit2CodingValue(unit),
|
||
NumericValue: longAxisLength
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: "SCOORD",
|
||
GraphicType: "POLYLINE",
|
||
GraphicData: [longAxis.point1.x, longAxis.point1.y, longAxis.point2.x, longAxis.point2.y],
|
||
ContentSequence: {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}, {
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "G-A186",
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeMeaning: "Short Axis"
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: unit2CodingValue(unit),
|
||
NumericValue: shortAxisLength
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: "SCOORD",
|
||
GraphicType: "POLYLINE",
|
||
GraphicData: [shortAxis.point1.x, shortAxis.point1.y, shortAxis.point2.x, shortAxis.point2.y],
|
||
ContentSequence: {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}]);
|
||
}
|
||
}]);
|
||
|
||
return Bidirectional;
|
||
}(TID300Measurement);
|
||
|
||
var BIDIRECTIONAL$1 = "Bidirectional";
|
||
var LONG_AXIS$1 = "Long Axis";
|
||
var SHORT_AXIS$1 = "Short Axis";
|
||
var FINDING$1 = "121071";
|
||
var FINDING_SITE$1 = "G-C0E3";
|
||
|
||
var Bidirectional$1 = /*#__PURE__*/function () {
|
||
function Bidirectional() {
|
||
_classCallCheck(this, Bidirectional);
|
||
} // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
|
||
|
||
|
||
_createClass(Bidirectional, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup) {
|
||
var _state;
|
||
|
||
var ContentSequence = MeasurementGroup.ContentSequence;
|
||
var findingGroup = toArray(ContentSequence).find(function (group) {
|
||
return group.ConceptNameCodeSequence.CodeValue === FINDING$1;
|
||
});
|
||
var findingSiteGroups = toArray(ContentSequence).filter(function (group) {
|
||
return group.ConceptNameCodeSequence.CodeValue === FINDING_SITE$1;
|
||
});
|
||
var longAxisNUMGroup = toArray(ContentSequence).find(function (group) {
|
||
return group.ConceptNameCodeSequence.CodeMeaning === LONG_AXIS$1;
|
||
});
|
||
var longAxisSCOORDGroup = toArray(longAxisNUMGroup.ContentSequence).find(function (group) {
|
||
return group.ValueType === "SCOORD";
|
||
});
|
||
var shortAxisNUMGroup = toArray(ContentSequence).find(function (group) {
|
||
return group.ConceptNameCodeSequence.CodeMeaning === SHORT_AXIS$1;
|
||
});
|
||
var shortAxisSCOORDGroup = toArray(shortAxisNUMGroup.ContentSequence).find(function (group) {
|
||
return group.ValueType === "SCOORD";
|
||
});
|
||
var ReferencedSOPSequence = longAxisSCOORDGroup.ContentSequence.ReferencedSOPSequence;
|
||
var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,
|
||
ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber; // Long axis
|
||
|
||
var longestDiameter = String(longAxisNUMGroup.MeasuredValueSequence.NumericValue);
|
||
var shortestDiameter = String(shortAxisNUMGroup.MeasuredValueSequence.NumericValue);
|
||
var bottomRight = {
|
||
x: Math.max(longAxisSCOORDGroup.GraphicData[0], longAxisSCOORDGroup.GraphicData[2], shortAxisSCOORDGroup.GraphicData[0], shortAxisSCOORDGroup.GraphicData[2]),
|
||
y: Math.max(longAxisSCOORDGroup.GraphicData[1], longAxisSCOORDGroup.GraphicData[3], shortAxisSCOORDGroup.GraphicData[1], shortAxisSCOORDGroup.GraphicData[3])
|
||
};
|
||
var state = (_state = {
|
||
sopInstanceUid: ReferencedSOPInstanceUID,
|
||
frameIndex: ReferencedFrameNumber || 1,
|
||
toolType: Bidirectional.toolType,
|
||
active: false,
|
||
handles: {
|
||
start: {
|
||
x: longAxisSCOORDGroup.GraphicData[0],
|
||
y: longAxisSCOORDGroup.GraphicData[1],
|
||
drawnIndependently: false,
|
||
allowedOutsideImage: false,
|
||
active: false,
|
||
highlight: false,
|
||
index: 0
|
||
},
|
||
end: {
|
||
x: longAxisSCOORDGroup.GraphicData[2],
|
||
y: longAxisSCOORDGroup.GraphicData[3],
|
||
drawnIndependently: false,
|
||
allowedOutsideImage: false,
|
||
active: false,
|
||
highlight: false,
|
||
index: 1
|
||
},
|
||
perpendicularStart: {
|
||
x: shortAxisSCOORDGroup.GraphicData[0],
|
||
y: shortAxisSCOORDGroup.GraphicData[1],
|
||
drawnIndependently: false,
|
||
allowedOutsideImage: false,
|
||
active: false,
|
||
highlight: false,
|
||
index: 2
|
||
},
|
||
perpendicularEnd: {
|
||
x: shortAxisSCOORDGroup.GraphicData[2],
|
||
y: shortAxisSCOORDGroup.GraphicData[3],
|
||
drawnIndependently: false,
|
||
allowedOutsideImage: false,
|
||
active: false,
|
||
highlight: false,
|
||
index: 3
|
||
},
|
||
textBox: {
|
||
highlight: false,
|
||
hasMoved: true,
|
||
active: false,
|
||
movesIndependently: false,
|
||
drawnIndependently: true,
|
||
allowedOutsideImage: true,
|
||
hasBoundingBox: true,
|
||
x: bottomRight.x + 10,
|
||
y: bottomRight.y + 10
|
||
}
|
||
},
|
||
invalidated: false,
|
||
isCreating: false,
|
||
longestDiameter: longestDiameter,
|
||
shortestDiameter: shortestDiameter
|
||
}, _defineProperty(_state, "toolType", "Bidirectional"), _defineProperty(_state, "toolName", "Bidirectional"), _defineProperty(_state, "visible", true), _defineProperty(_state, "finding", findingGroup ? findingGroup.ConceptCodeSequence : undefined), _defineProperty(_state, "findingSites", findingSiteGroups.map(function (fsg) {
|
||
return fsg.ConceptCodeSequence;
|
||
})), _state);
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool) {
|
||
var _tool$handles = tool.handles,
|
||
start = _tool$handles.start,
|
||
end = _tool$handles.end,
|
||
perpendicularStart = _tool$handles.perpendicularStart,
|
||
perpendicularEnd = _tool$handles.perpendicularEnd;
|
||
var shortestDiameter = tool.shortestDiameter,
|
||
longestDiameter = tool.longestDiameter,
|
||
finding = tool.finding,
|
||
findingSites = tool.findingSites;
|
||
var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:Bidirectional";
|
||
return {
|
||
longAxis: {
|
||
point1: start,
|
||
point2: end
|
||
},
|
||
shortAxis: {
|
||
point1: perpendicularStart,
|
||
point2: perpendicularEnd
|
||
},
|
||
longAxisLength: longestDiameter,
|
||
shortAxisLength: shortestDiameter,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return Bidirectional;
|
||
}();
|
||
|
||
Bidirectional$1.toolType = BIDIRECTIONAL$1;
|
||
Bidirectional$1.utilityToolType = BIDIRECTIONAL$1;
|
||
Bidirectional$1.TID300Representation = Bidirectional$2;
|
||
|
||
Bidirectional$1.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone4Tag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === BIDIRECTIONAL$1;
|
||
};
|
||
|
||
MeasurementReport$3.registerTool(Bidirectional$1);
|
||
|
||
/**
|
||
* Expand an array of points stored as objects into
|
||
* a flattened array of points
|
||
*
|
||
* @param points
|
||
* @return {Array}
|
||
*/
|
||
|
||
function expandPoints$2(points) {
|
||
var allPoints = [];
|
||
points.forEach(function (point) {
|
||
allPoints.push(point.x);
|
||
allPoints.push(point.y);
|
||
});
|
||
return allPoints;
|
||
}
|
||
|
||
var Ellipse$1 = /*#__PURE__*/function (_TID300Measurement) {
|
||
_inherits(Ellipse, _TID300Measurement);
|
||
|
||
var _super = _createSuper(Ellipse);
|
||
|
||
function Ellipse() {
|
||
_classCallCheck(this, Ellipse);
|
||
|
||
return _super.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(Ellipse, [{
|
||
key: "contentItem",
|
||
value: function contentItem() {
|
||
var _this$props = this.props,
|
||
points = _this$props.points,
|
||
ReferencedSOPSequence = _this$props.ReferencedSOPSequence,
|
||
area = _this$props.area,
|
||
areaUnit = _this$props.areaUnit;
|
||
var GraphicData = expandPoints$2(points);
|
||
return this.getMeasurement([{
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "G-D7FE",
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeMeaning: "AREA"
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: unit2CodingValue(areaUnit),
|
||
NumericValue: area
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: "SCOORD",
|
||
GraphicType: "ELLIPSE",
|
||
GraphicData: GraphicData,
|
||
ContentSequence: {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}]);
|
||
}
|
||
}]);
|
||
|
||
return Ellipse;
|
||
}(TID300Measurement);
|
||
|
||
var ELLIPTICALROI$1 = "EllipticalRoi";
|
||
|
||
var EllipticalRoi = /*#__PURE__*/function () {
|
||
function EllipticalRoi() {
|
||
_classCallCheck(this, EllipticalRoi);
|
||
} // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
|
||
|
||
|
||
_createClass(EllipticalRoi, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup) {
|
||
var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;
|
||
|
||
var GraphicData = SCOORDGroup.GraphicData;
|
||
var majorAxis = [{
|
||
x: GraphicData[0],
|
||
y: GraphicData[1]
|
||
}, {
|
||
x: GraphicData[2],
|
||
y: GraphicData[3]
|
||
}];
|
||
var minorAxis = [{
|
||
x: GraphicData[4],
|
||
y: GraphicData[5]
|
||
}, {
|
||
x: GraphicData[6],
|
||
y: GraphicData[7]
|
||
}]; // Calculate two opposite corners of box defined by two axes.
|
||
|
||
var minorAxisLength = Math.sqrt(Math.pow(minorAxis[0].x - minorAxis[1].x, 2) + Math.pow(minorAxis[0].y - minorAxis[1].y, 2));
|
||
var minorAxisDirection = {
|
||
x: (minorAxis[1].x - minorAxis[0].x) / minorAxisLength,
|
||
y: (minorAxis[1].y - minorAxis[0].y) / minorAxisLength
|
||
};
|
||
var halfMinorAxisLength = minorAxisLength / 2; // First end point of major axis + half minor axis vector
|
||
|
||
var corner1 = {
|
||
x: majorAxis[0].x + minorAxisDirection.x * halfMinorAxisLength,
|
||
y: majorAxis[0].y + minorAxisDirection.y * halfMinorAxisLength
|
||
}; // Second end point of major axis - half of minor axis vector
|
||
|
||
var corner2 = {
|
||
x: majorAxis[1].x - minorAxisDirection.x * halfMinorAxisLength,
|
||
y: majorAxis[1].y - minorAxisDirection.y * halfMinorAxisLength
|
||
};
|
||
|
||
var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
|
||
toolType: EllipticalRoi.toolType,
|
||
active: false,
|
||
cachedStats: {
|
||
area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
|
||
},
|
||
handles: {
|
||
end: {
|
||
x: corner1.x,
|
||
y: corner1.y,
|
||
highlight: false,
|
||
active: false
|
||
},
|
||
initialRotation: 0,
|
||
start: {
|
||
x: corner2.x,
|
||
y: corner2.y,
|
||
highlight: false,
|
||
active: false
|
||
},
|
||
textBox: {
|
||
hasMoved: false,
|
||
movesIndependently: false,
|
||
drawnIndependently: true,
|
||
allowedOutsideImage: true,
|
||
hasBoundingBox: true
|
||
}
|
||
},
|
||
invalidated: true,
|
||
visible: true
|
||
});
|
||
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool) {
|
||
var _tool$cachedStats = tool.cachedStats,
|
||
cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats,
|
||
handles = tool.handles,
|
||
finding = tool.finding,
|
||
findingSites = tool.findingSites;
|
||
var start = handles.start,
|
||
end = handles.end;
|
||
var area = cachedStats.area;
|
||
var halfXLength = Math.abs(start.x - end.x) / 2;
|
||
var halfYLength = Math.abs(start.y - end.y) / 2;
|
||
var points = [];
|
||
var center = {
|
||
x: (start.x + end.x) / 2,
|
||
y: (start.y + end.y) / 2
|
||
};
|
||
|
||
if (halfXLength > halfYLength) {
|
||
// X-axis major
|
||
// Major axis
|
||
points.push({
|
||
x: center.x - halfXLength,
|
||
y: center.y
|
||
});
|
||
points.push({
|
||
x: center.x + halfXLength,
|
||
y: center.y
|
||
}); // Minor axis
|
||
|
||
points.push({
|
||
x: center.x,
|
||
y: center.y - halfYLength
|
||
});
|
||
points.push({
|
||
x: center.x,
|
||
y: center.y + halfYLength
|
||
});
|
||
} else {
|
||
// Y-axis major
|
||
// Major axis
|
||
points.push({
|
||
x: center.x,
|
||
y: center.y - halfYLength
|
||
});
|
||
points.push({
|
||
x: center.x,
|
||
y: center.y + halfYLength
|
||
}); // Minor axis
|
||
|
||
points.push({
|
||
x: center.x - halfXLength,
|
||
y: center.y
|
||
});
|
||
points.push({
|
||
x: center.x + halfXLength,
|
||
y: center.y
|
||
});
|
||
}
|
||
|
||
var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:EllipticalRoi";
|
||
return {
|
||
area: area,
|
||
points: points,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return EllipticalRoi;
|
||
}();
|
||
|
||
EllipticalRoi.toolType = ELLIPTICALROI$1;
|
||
EllipticalRoi.utilityToolType = ELLIPTICALROI$1;
|
||
EllipticalRoi.TID300Representation = Ellipse$1;
|
||
|
||
EllipticalRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone4Tag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === ELLIPTICALROI$1;
|
||
};
|
||
|
||
MeasurementReport$3.registerTool(EllipticalRoi);
|
||
|
||
/**
|
||
* Expand an array of points stored as objects into
|
||
* a flattened array of points
|
||
*
|
||
* @param points [{x: 0, y: 1}, {x: 1, y: 2}] or [{x: 0, y: 1, z: 0}, {x: 1, y: 2, z: 0}]
|
||
* @return {Array} [point1x, point1y, point2x, point2y] or [point1x, point1y, point1z, point2x, point2y, point2z]
|
||
*/
|
||
|
||
function expandPoints$1(points) {
|
||
var allPoints = [];
|
||
points.forEach(function (point) {
|
||
allPoints.push(point.x);
|
||
allPoints.push(point.y);
|
||
});
|
||
return allPoints;
|
||
}
|
||
|
||
var Circle$1 = /*#__PURE__*/function (_TID300Measurement) {
|
||
_inherits(Circle, _TID300Measurement);
|
||
|
||
var _super = _createSuper(Circle);
|
||
|
||
function Circle() {
|
||
_classCallCheck(this, Circle);
|
||
|
||
return _super.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(Circle, [{
|
||
key: "contentItem",
|
||
value: function contentItem() {
|
||
var _this$props = this.props,
|
||
points = _this$props.points,
|
||
ReferencedSOPSequence = _this$props.ReferencedSOPSequence,
|
||
_this$props$use3DSpat = _this$props.use3DSpatialCoordinates,
|
||
use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat,
|
||
perimeter = _this$props.perimeter,
|
||
area = _this$props.area,
|
||
_this$props$areaUnit = _this$props.areaUnit,
|
||
areaUnit = _this$props$areaUnit === void 0 ? "mm2" : _this$props$areaUnit,
|
||
_this$props$unit = _this$props.unit,
|
||
unit = _this$props$unit === void 0 ? "mm" : _this$props$unit; // Combine all lengths to save the perimeter
|
||
// @ToDO The permiter has to be implemented
|
||
// const reducer = (accumulator, currentValue) => accumulator + currentValue;
|
||
// const perimeter = lengths.reduce(reducer);
|
||
|
||
var GraphicData = expandPoints$1(points); // TODO: Add Mean and STDev value of (modality?) pixels
|
||
|
||
return this.getMeasurement([{
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "G-A197",
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeMeaning: "Perimeter" // TODO: Look this up from a Code Meaning dictionary
|
||
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: unit2CodingValue(unit),
|
||
NumericValue: perimeter
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
|
||
GraphicType: "CIRCLE",
|
||
GraphicData: GraphicData,
|
||
ContentSequence: use3DSpatialCoordinates ? undefined : {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}, {
|
||
// TODO: This feels weird to repeat the GraphicData
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "G-A166",
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeMeaning: "Area" // TODO: Look this up from a Code Meaning dictionary
|
||
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: unit2CodingValue(areaUnit),
|
||
NumericValue: area
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
|
||
GraphicType: "CIRCLE",
|
||
GraphicData: GraphicData,
|
||
ContentSequence: use3DSpatialCoordinates ? undefined : {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}]);
|
||
}
|
||
}]);
|
||
|
||
return Circle;
|
||
}(TID300Measurement);
|
||
|
||
var CIRCLEROI = "CircleRoi";
|
||
|
||
var CircleRoi = /*#__PURE__*/function () {
|
||
function CircleRoi() {
|
||
_classCallCheck(this, CircleRoi);
|
||
}
|
||
/** Gets the measurement data for cornerstone, given DICOM SR measurement data. */
|
||
|
||
|
||
_createClass(CircleRoi, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup) {
|
||
var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;
|
||
|
||
var GraphicData = SCOORDGroup.GraphicData;
|
||
var center = {
|
||
x: GraphicData[0],
|
||
y: GraphicData[1]
|
||
};
|
||
var end = {
|
||
x: GraphicData[2],
|
||
y: GraphicData[3]
|
||
};
|
||
|
||
var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
|
||
toolType: CircleRoi.toolType,
|
||
active: false,
|
||
cachedStats: {
|
||
area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0,
|
||
// Dummy values to be updated by cornerstone
|
||
radius: 0,
|
||
perimeter: 0
|
||
},
|
||
handles: {
|
||
end: _objectSpread2(_objectSpread2({}, end), {}, {
|
||
highlight: false,
|
||
active: false
|
||
}),
|
||
initialRotation: 0,
|
||
start: _objectSpread2(_objectSpread2({}, center), {}, {
|
||
highlight: false,
|
||
active: false
|
||
}),
|
||
textBox: {
|
||
hasMoved: false,
|
||
movesIndependently: false,
|
||
drawnIndependently: true,
|
||
allowedOutsideImage: true,
|
||
hasBoundingBox: true
|
||
}
|
||
},
|
||
invalidated: true,
|
||
visible: true
|
||
});
|
||
|
||
return state;
|
||
}
|
||
/**
|
||
* Gets the TID 300 representation of a circle, given the cornerstone representation.
|
||
*
|
||
* @param {Object} tool
|
||
* @returns
|
||
*/
|
||
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool) {
|
||
var _tool$cachedStats = tool.cachedStats,
|
||
cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats,
|
||
handles = tool.handles,
|
||
finding = tool.finding,
|
||
findingSites = tool.findingSites;
|
||
var center = handles.start,
|
||
end = handles.end;
|
||
var area = cachedStats.area,
|
||
_cachedStats$areaUnit = cachedStats.areaUnit,
|
||
areaUnit = _cachedStats$areaUnit === void 0 ? "mm2" : _cachedStats$areaUnit,
|
||
_cachedStats$unit = cachedStats.unit,
|
||
unit = _cachedStats$unit === void 0 ? "mm" : _cachedStats$unit,
|
||
radius = cachedStats.radius;
|
||
var perimeter = 2 * Math.PI * radius;
|
||
var points = [];
|
||
points.push(center);
|
||
points.push(end);
|
||
var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:CircleRoi";
|
||
return {
|
||
area: area,
|
||
areaUnit: areaUnit,
|
||
perimeter: perimeter,
|
||
unit: unit,
|
||
radius: radius,
|
||
points: points,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return CircleRoi;
|
||
}();
|
||
|
||
CircleRoi.toolType = CIRCLEROI;
|
||
CircleRoi.utilityToolType = CIRCLEROI;
|
||
CircleRoi.TID300Representation = Circle$1;
|
||
|
||
CircleRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone4Tag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === CIRCLEROI;
|
||
};
|
||
|
||
MeasurementReport$3.registerTool(CircleRoi);
|
||
|
||
var Point$1 = /*#__PURE__*/function (_TID300Measurement) {
|
||
_inherits(Point, _TID300Measurement);
|
||
|
||
var _super = _createSuper(Point);
|
||
|
||
function Point() {
|
||
_classCallCheck(this, Point);
|
||
|
||
return _super.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(Point, [{
|
||
key: "contentItem",
|
||
value: function contentItem() {
|
||
var _this$props = this.props,
|
||
points = _this$props.points,
|
||
ReferencedSOPSequence = _this$props.ReferencedSOPSequence,
|
||
_this$props$use3DSpat = _this$props.use3DSpatialCoordinates,
|
||
use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat;
|
||
var GraphicData = use3DSpatialCoordinates ? [points[0].x, points[0].y, points[0].z] : [points[0].x, points[0].y]; // Allow storing another point as part of an indicator showing a single point
|
||
|
||
if (points.length == 2) {
|
||
GraphicData.push(points[1].x);
|
||
GraphicData.push(points[1].y);
|
||
if (use3DSpatialCoordinates) GraphicData.push(points[1].z);
|
||
}
|
||
|
||
return this.getMeasurement([{
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "111010",
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeMeaning: "Center"
|
||
},
|
||
//MeasuredValueSequence: ,
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
|
||
GraphicType: "POINT",
|
||
GraphicData: GraphicData,
|
||
ContentSequence: use3DSpatialCoordinates ? undefined : {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}]);
|
||
}
|
||
}]);
|
||
|
||
return Point;
|
||
}(TID300Measurement);
|
||
|
||
var ARROW_ANNOTATE$1 = "ArrowAnnotate";
|
||
var CORNERSTONEFREETEXT$1 = "CORNERSTONEFREETEXT";
|
||
|
||
var ArrowAnnotate$1 = /*#__PURE__*/function () {
|
||
function ArrowAnnotate() {
|
||
_classCallCheck(this, ArrowAnnotate);
|
||
}
|
||
|
||
_createClass(ArrowAnnotate, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup) {
|
||
var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
||
findingGroup = _MeasurementReport$ge.findingGroup;
|
||
|
||
var text = findingGroup.ConceptCodeSequence.CodeMeaning;
|
||
var GraphicData = SCOORDGroup.GraphicData;
|
||
|
||
var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
|
||
toolType: ArrowAnnotate.toolType,
|
||
active: false,
|
||
handles: {
|
||
start: {
|
||
x: GraphicData[0],
|
||
y: GraphicData[1],
|
||
highlight: true,
|
||
active: false
|
||
},
|
||
// Use a generic offset if the stored data doesn't have the endpoint, otherwise
|
||
// use the actual endpoint.
|
||
end: {
|
||
x: GraphicData.length == 4 ? GraphicData[2] : GraphicData[0] + 20,
|
||
y: GraphicData.length == 4 ? GraphicData[3] : GraphicData[1] + 20,
|
||
highlight: true,
|
||
active: false
|
||
},
|
||
textBox: {
|
||
hasMoved: false,
|
||
movesIndependently: false,
|
||
drawnIndependently: true,
|
||
allowedOutsideImage: true,
|
||
hasBoundingBox: true
|
||
}
|
||
},
|
||
invalidated: true,
|
||
text: text,
|
||
visible: true
|
||
});
|
||
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool) {
|
||
var points = [tool.handles.start, tool.handles.end];
|
||
var finding = tool.finding,
|
||
findingSites = tool.findingSites;
|
||
var TID300RepresentationArguments = {
|
||
points: points,
|
||
trackingIdentifierTextValue: "cornerstoneTools@^4.0.0:ArrowAnnotate",
|
||
findingSites: findingSites || []
|
||
}; // If freetext finding isn't present, add it from the tool text.
|
||
|
||
if (!finding || finding.CodeValue !== CORNERSTONEFREETEXT$1) {
|
||
finding = {
|
||
CodeValue: CORNERSTONEFREETEXT$1,
|
||
CodingSchemeDesignator: "CST4",
|
||
CodeMeaning: tool.text
|
||
};
|
||
}
|
||
|
||
TID300RepresentationArguments.finding = finding;
|
||
return TID300RepresentationArguments;
|
||
}
|
||
}]);
|
||
|
||
return ArrowAnnotate;
|
||
}();
|
||
|
||
ArrowAnnotate$1.toolType = ARROW_ANNOTATE$1;
|
||
ArrowAnnotate$1.utilityToolType = ARROW_ANNOTATE$1;
|
||
ArrowAnnotate$1.TID300Representation = Point$1;
|
||
|
||
ArrowAnnotate$1.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone4Tag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === ARROW_ANNOTATE$1;
|
||
};
|
||
|
||
MeasurementReport$3.registerTool(ArrowAnnotate$1);
|
||
|
||
function iota$1(n) {
|
||
var result = new Array(n);
|
||
for(var i=0; i<n; ++i) {
|
||
result[i] = i;
|
||
}
|
||
return result
|
||
}
|
||
|
||
var iota_1 = iota$1;
|
||
|
||
/*!
|
||
* Determine if an object is a Buffer
|
||
*
|
||
* @author Feross Aboukhadijeh <https://feross.org>
|
||
* @license MIT
|
||
*/
|
||
|
||
// The _isBuffer check is for Safari 5-7 support, because it's missing
|
||
// Object.prototype.constructor. Remove this eventually
|
||
var isBuffer_1 = function (obj) {
|
||
return obj != null && (isBuffer$1(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
|
||
};
|
||
|
||
function isBuffer$1 (obj) {
|
||
return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
|
||
}
|
||
|
||
// For Node v0.10 support. Remove this eventually.
|
||
function isSlowBuffer (obj) {
|
||
return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer$1(obj.slice(0, 0))
|
||
}
|
||
|
||
var iota = iota_1;
|
||
var isBuffer = isBuffer_1;
|
||
|
||
var hasTypedArrays = ((typeof Float64Array) !== "undefined");
|
||
|
||
function compare1st(a, b) {
|
||
return a[0] - b[0]
|
||
}
|
||
|
||
function order() {
|
||
var stride = this.stride;
|
||
var terms = new Array(stride.length);
|
||
var i;
|
||
for(i=0; i<terms.length; ++i) {
|
||
terms[i] = [Math.abs(stride[i]), i];
|
||
}
|
||
terms.sort(compare1st);
|
||
var result = new Array(terms.length);
|
||
for(i=0; i<result.length; ++i) {
|
||
result[i] = terms[i][1];
|
||
}
|
||
return result
|
||
}
|
||
|
||
function compileConstructor(dtype, dimension) {
|
||
var className = ["View", dimension, "d", dtype].join("");
|
||
if(dimension < 0) {
|
||
className = "View_Nil" + dtype;
|
||
}
|
||
var useGetters = (dtype === "generic");
|
||
|
||
if(dimension === -1) {
|
||
//Special case for trivial arrays
|
||
var code =
|
||
"function "+className+"(a){this.data=a;};\
|
||
var proto="+className+".prototype;\
|
||
proto.dtype='"+dtype+"';\
|
||
proto.index=function(){return -1};\
|
||
proto.size=0;\
|
||
proto.dimension=-1;\
|
||
proto.shape=proto.stride=proto.order=[];\
|
||
proto.lo=proto.hi=proto.transpose=proto.step=\
|
||
function(){return new "+className+"(this.data);};\
|
||
proto.get=proto.set=function(){};\
|
||
proto.pick=function(){return null};\
|
||
return function construct_"+className+"(a){return new "+className+"(a);}";
|
||
var procedure = new Function(code);
|
||
return procedure()
|
||
} else if(dimension === 0) {
|
||
//Special case for 0d arrays
|
||
var code =
|
||
"function "+className+"(a,d) {\
|
||
this.data = a;\
|
||
this.offset = d\
|
||
};\
|
||
var proto="+className+".prototype;\
|
||
proto.dtype='"+dtype+"';\
|
||
proto.index=function(){return this.offset};\
|
||
proto.dimension=0;\
|
||
proto.size=1;\
|
||
proto.shape=\
|
||
proto.stride=\
|
||
proto.order=[];\
|
||
proto.lo=\
|
||
proto.hi=\
|
||
proto.transpose=\
|
||
proto.step=function "+className+"_copy() {\
|
||
return new "+className+"(this.data,this.offset)\
|
||
};\
|
||
proto.pick=function "+className+"_pick(){\
|
||
return TrivialArray(this.data);\
|
||
};\
|
||
proto.valueOf=proto.get=function "+className+"_get(){\
|
||
return "+(useGetters ? "this.data.get(this.offset)" : "this.data[this.offset]")+
|
||
"};\
|
||
proto.set=function "+className+"_set(v){\
|
||
return "+(useGetters ? "this.data.set(this.offset,v)" : "this.data[this.offset]=v")+"\
|
||
};\
|
||
return function construct_"+className+"(a,b,c,d){return new "+className+"(a,d)}";
|
||
var procedure = new Function("TrivialArray", code);
|
||
return procedure(CACHED_CONSTRUCTORS[dtype][0])
|
||
}
|
||
|
||
var code = ["'use strict'"];
|
||
|
||
//Create constructor for view
|
||
var indices = iota(dimension);
|
||
var args = indices.map(function(i) { return "i"+i });
|
||
var index_str = "this.offset+" + indices.map(function(i) {
|
||
return "this.stride[" + i + "]*i" + i
|
||
}).join("+");
|
||
var shapeArg = indices.map(function(i) {
|
||
return "b"+i
|
||
}).join(",");
|
||
var strideArg = indices.map(function(i) {
|
||
return "c"+i
|
||
}).join(",");
|
||
code.push(
|
||
"function "+className+"(a," + shapeArg + "," + strideArg + ",d){this.data=a",
|
||
"this.shape=[" + shapeArg + "]",
|
||
"this.stride=[" + strideArg + "]",
|
||
"this.offset=d|0}",
|
||
"var proto="+className+".prototype",
|
||
"proto.dtype='"+dtype+"'",
|
||
"proto.dimension="+dimension);
|
||
|
||
//view.size:
|
||
code.push("Object.defineProperty(proto,'size',{get:function "+className+"_size(){\
|
||
return "+indices.map(function(i) { return "this.shape["+i+"]" }).join("*"),
|
||
"}})");
|
||
|
||
//view.order:
|
||
if(dimension === 1) {
|
||
code.push("proto.order=[0]");
|
||
} else {
|
||
code.push("Object.defineProperty(proto,'order',{get:");
|
||
if(dimension < 4) {
|
||
code.push("function "+className+"_order(){");
|
||
if(dimension === 2) {
|
||
code.push("return (Math.abs(this.stride[0])>Math.abs(this.stride[1]))?[1,0]:[0,1]}})");
|
||
} else if(dimension === 3) {
|
||
code.push(
|
||
"var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);\
|
||
if(s0>s1){\
|
||
if(s1>s2){\
|
||
return [2,1,0];\
|
||
}else if(s0>s2){\
|
||
return [1,2,0];\
|
||
}else{\
|
||
return [1,0,2];\
|
||
}\
|
||
}else if(s0>s2){\
|
||
return [2,0,1];\
|
||
}else if(s2>s1){\
|
||
return [0,1,2];\
|
||
}else{\
|
||
return [0,2,1];\
|
||
}}})");
|
||
}
|
||
} else {
|
||
code.push("ORDER})");
|
||
}
|
||
}
|
||
|
||
//view.set(i0, ..., v):
|
||
code.push(
|
||
"proto.set=function "+className+"_set("+args.join(",")+",v){");
|
||
if(useGetters) {
|
||
code.push("return this.data.set("+index_str+",v)}");
|
||
} else {
|
||
code.push("return this.data["+index_str+"]=v}");
|
||
}
|
||
|
||
//view.get(i0, ...):
|
||
code.push("proto.get=function "+className+"_get("+args.join(",")+"){");
|
||
if(useGetters) {
|
||
code.push("return this.data.get("+index_str+")}");
|
||
} else {
|
||
code.push("return this.data["+index_str+"]}");
|
||
}
|
||
|
||
//view.index:
|
||
code.push(
|
||
"proto.index=function "+className+"_index(", args.join(), "){return "+index_str+"}");
|
||
|
||
//view.hi():
|
||
code.push("proto.hi=function "+className+"_hi("+args.join(",")+"){return new "+className+"(this.data,"+
|
||
indices.map(function(i) {
|
||
return ["(typeof i",i,"!=='number'||i",i,"<0)?this.shape[", i, "]:i", i,"|0"].join("")
|
||
}).join(",")+","+
|
||
indices.map(function(i) {
|
||
return "this.stride["+i + "]"
|
||
}).join(",")+",this.offset)}");
|
||
|
||
//view.lo():
|
||
var a_vars = indices.map(function(i) { return "a"+i+"=this.shape["+i+"]" });
|
||
var c_vars = indices.map(function(i) { return "c"+i+"=this.stride["+i+"]" });
|
||
code.push("proto.lo=function "+className+"_lo("+args.join(",")+"){var b=this.offset,d=0,"+a_vars.join(",")+","+c_vars.join(","));
|
||
for(var i=0; i<dimension; ++i) {
|
||
code.push(
|
||
"if(typeof i"+i+"==='number'&&i"+i+">=0){\
|
||
d=i"+i+"|0;\
|
||
b+=c"+i+"*d;\
|
||
a"+i+"-=d}");
|
||
}
|
||
code.push("return new "+className+"(this.data,"+
|
||
indices.map(function(i) {
|
||
return "a"+i
|
||
}).join(",")+","+
|
||
indices.map(function(i) {
|
||
return "c"+i
|
||
}).join(",")+",b)}");
|
||
|
||
//view.step():
|
||
code.push("proto.step=function "+className+"_step("+args.join(",")+"){var "+
|
||
indices.map(function(i) {
|
||
return "a"+i+"=this.shape["+i+"]"
|
||
}).join(",")+","+
|
||
indices.map(function(i) {
|
||
return "b"+i+"=this.stride["+i+"]"
|
||
}).join(",")+",c=this.offset,d=0,ceil=Math.ceil");
|
||
for(var i=0; i<dimension; ++i) {
|
||
code.push(
|
||
"if(typeof i"+i+"==='number'){\
|
||
d=i"+i+"|0;\
|
||
if(d<0){\
|
||
c+=b"+i+"*(a"+i+"-1);\
|
||
a"+i+"=ceil(-a"+i+"/d)\
|
||
}else{\
|
||
a"+i+"=ceil(a"+i+"/d)\
|
||
}\
|
||
b"+i+"*=d\
|
||
}");
|
||
}
|
||
code.push("return new "+className+"(this.data,"+
|
||
indices.map(function(i) {
|
||
return "a" + i
|
||
}).join(",")+","+
|
||
indices.map(function(i) {
|
||
return "b" + i
|
||
}).join(",")+",c)}");
|
||
|
||
//view.transpose():
|
||
var tShape = new Array(dimension);
|
||
var tStride = new Array(dimension);
|
||
for(var i=0; i<dimension; ++i) {
|
||
tShape[i] = "a[i"+i+"]";
|
||
tStride[i] = "b[i"+i+"]";
|
||
}
|
||
code.push("proto.transpose=function "+className+"_transpose("+args+"){"+
|
||
args.map(function(n,idx) { return n + "=(" + n + "===undefined?" + idx + ":" + n + "|0)"}).join(";"),
|
||
"var a=this.shape,b=this.stride;return new "+className+"(this.data,"+tShape.join(",")+","+tStride.join(",")+",this.offset)}");
|
||
|
||
//view.pick():
|
||
code.push("proto.pick=function "+className+"_pick("+args+"){var a=[],b=[],c=this.offset");
|
||
for(var i=0; i<dimension; ++i) {
|
||
code.push("if(typeof i"+i+"==='number'&&i"+i+">=0){c=(c+this.stride["+i+"]*i"+i+")|0}else{a.push(this.shape["+i+"]);b.push(this.stride["+i+"])}");
|
||
}
|
||
code.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}");
|
||
|
||
//Add return statement
|
||
code.push("return function construct_"+className+"(data,shape,stride,offset){return new "+className+"(data,"+
|
||
indices.map(function(i) {
|
||
return "shape["+i+"]"
|
||
}).join(",")+","+
|
||
indices.map(function(i) {
|
||
return "stride["+i+"]"
|
||
}).join(",")+",offset)}");
|
||
|
||
//Compile procedure
|
||
var procedure = new Function("CTOR_LIST", "ORDER", code.join("\n"));
|
||
return procedure(CACHED_CONSTRUCTORS[dtype], order)
|
||
}
|
||
|
||
function arrayDType(data) {
|
||
if(isBuffer(data)) {
|
||
return "buffer"
|
||
}
|
||
if(hasTypedArrays) {
|
||
switch(Object.prototype.toString.call(data)) {
|
||
case "[object Float64Array]":
|
||
return "float64"
|
||
case "[object Float32Array]":
|
||
return "float32"
|
||
case "[object Int8Array]":
|
||
return "int8"
|
||
case "[object Int16Array]":
|
||
return "int16"
|
||
case "[object Int32Array]":
|
||
return "int32"
|
||
case "[object Uint8Array]":
|
||
return "uint8"
|
||
case "[object Uint16Array]":
|
||
return "uint16"
|
||
case "[object Uint32Array]":
|
||
return "uint32"
|
||
case "[object Uint8ClampedArray]":
|
||
return "uint8_clamped"
|
||
case "[object BigInt64Array]":
|
||
return "bigint64"
|
||
case "[object BigUint64Array]":
|
||
return "biguint64"
|
||
}
|
||
}
|
||
if(Array.isArray(data)) {
|
||
return "array"
|
||
}
|
||
return "generic"
|
||
}
|
||
|
||
var CACHED_CONSTRUCTORS = {
|
||
"float32":[],
|
||
"float64":[],
|
||
"int8":[],
|
||
"int16":[],
|
||
"int32":[],
|
||
"uint8":[],
|
||
"uint16":[],
|
||
"uint32":[],
|
||
"array":[],
|
||
"uint8_clamped":[],
|
||
"bigint64": [],
|
||
"biguint64": [],
|
||
"buffer":[],
|
||
"generic":[]
|
||
}
|
||
|
||
;
|
||
function wrappedNDArrayCtor(data, shape, stride, offset) {
|
||
if(data === undefined) {
|
||
var ctor = CACHED_CONSTRUCTORS.array[0];
|
||
return ctor([])
|
||
} else if(typeof data === "number") {
|
||
data = [data];
|
||
}
|
||
if(shape === undefined) {
|
||
shape = [ data.length ];
|
||
}
|
||
var d = shape.length;
|
||
if(stride === undefined) {
|
||
stride = new Array(d);
|
||
for(var i=d-1, sz=1; i>=0; --i) {
|
||
stride[i] = sz;
|
||
sz *= shape[i];
|
||
}
|
||
}
|
||
if(offset === undefined) {
|
||
offset = 0;
|
||
for(var i=0; i<d; ++i) {
|
||
if(stride[i] < 0) {
|
||
offset -= (shape[i]-1)*stride[i];
|
||
}
|
||
}
|
||
}
|
||
var dtype = arrayDType(data);
|
||
var ctor_list = CACHED_CONSTRUCTORS[dtype];
|
||
while(ctor_list.length <= d+1) {
|
||
ctor_list.push(compileConstructor(dtype, ctor_list.length-1));
|
||
}
|
||
var ctor = ctor_list[d+1];
|
||
return ctor(data, shape, stride, offset)
|
||
}
|
||
|
||
var ndarray = wrappedNDArrayCtor;
|
||
|
||
var ndarray$1 = /*@__PURE__*/getDefaultExportFromCjs(ndarray);
|
||
|
||
/**
|
||
* crossProduct3D - Returns the cross product of a and b.
|
||
*
|
||
* @param {Number[3]} a Vector a.
|
||
* @param {Number[3]} b Vector b.
|
||
* @return {Number[3]} The cross product.
|
||
*/
|
||
function crossProduct3D (a, b) {
|
||
return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
||
}
|
||
|
||
var flipImageOrientationPatient = {
|
||
/**
|
||
* h: Flips ImageOrientationPatient in the horizontal direction.
|
||
* @param {Number[6]} iop - ImageOrientationPatient
|
||
* @returns {Number[6]} The transformed ImageOrientationPatient
|
||
*/
|
||
h: function h(iop) {
|
||
return [iop[0], iop[1], iop[2], -iop[3], -iop[4], -iop[5]];
|
||
},
|
||
|
||
/**
|
||
* v: Flips ImageOrientationPatient in the vertical direction.
|
||
* @param {Number[6]} iop - ImageOrientationPatient
|
||
* @returns {Number[6]} The transformed ImageOrientationPatient
|
||
*/
|
||
v: function v(iop) {
|
||
return [-iop[0], -iop[1], -iop[2], iop[3], iop[4], iop[5]];
|
||
},
|
||
|
||
/**
|
||
* hv: Flips ImageOrientationPatient in the horizontal and vertical directions.
|
||
* @param {Number[6]} iop - ImageOrientationPatient
|
||
* @returns {Number[6]} The transformed ImageOrientationPatient
|
||
*/
|
||
hv: function hv(iop) {
|
||
return [-iop[0], -iop[1], -iop[2], -iop[3], -iop[4], -iop[5]];
|
||
}
|
||
};
|
||
|
||
/**
|
||
* rotateVectorAroundUnitVector - Rotates vector v around unit vector k using
|
||
* Rodrigues' rotation formula.
|
||
*
|
||
* @param {Number[3]} v The vector to rotate.
|
||
* @param {Number[3]} k The unit vector of the axis of rotation.
|
||
* @param {Number} theta The rotation magnitude in radians.
|
||
* @return {Number[3]} The rotated v vector.
|
||
*/
|
||
|
||
function rotateVectorAroundUnitVector (v, k, theta) {
|
||
var cosTheta = Math.cos(theta);
|
||
var sinTheta = Math.sin(theta);
|
||
var oneMinusCosTheta = 1.0 - cosTheta;
|
||
var kdotv = k[0] * v[0] + k[1] * v[1] + k[2] * v[2];
|
||
var vRot = [];
|
||
var kxv = crossProduct3D(k, v);
|
||
|
||
for (var i = 0; i <= 2; i++) {
|
||
vRot[i] = v[i] * cosTheta + kxv[i] * sinTheta + k[i] * kdotv * oneMinusCosTheta;
|
||
vRot[i] *= -1;
|
||
}
|
||
|
||
return vRot;
|
||
}
|
||
|
||
/**
|
||
* rotateDirectionCosinesInPlane - rotates the row and column cosines around
|
||
* their normal by angle theta.
|
||
*
|
||
* @param {Number[6]} iop The row (0..2) an column (3..5) direction cosines.
|
||
* @param {Number} theta The rotation magnitude in radians.
|
||
* @return {Number[6]} The rotate row (0..2) and column (3..5) direction cosines.
|
||
*/
|
||
|
||
function rotateDirectionCosinesInPlane (iop, theta) {
|
||
var r = [iop[0], iop[1], iop[2]];
|
||
var c = [iop[3], iop[4], iop[5]];
|
||
var rxc = crossProduct3D(r, c);
|
||
var rRot = rotateVectorAroundUnitVector(r, rxc, theta);
|
||
var cRot = rotateVectorAroundUnitVector(c, rxc, theta);
|
||
return [].concat(_toConsumableArray(rRot), _toConsumableArray(cRot));
|
||
}
|
||
|
||
var flipMatrix2D = {
|
||
h: h,
|
||
v: v
|
||
};
|
||
/**
|
||
* flipMatrix2D.h - Flips a 2D matrix in the horizontal direction.
|
||
*
|
||
* @param {Ndarry} matrix The matrix to flip.
|
||
* @return {Ndarry} The flipped matrix.
|
||
*/
|
||
|
||
function h(matrix) {
|
||
var _matrix$shape = _slicedToArray(matrix.shape, 2),
|
||
rows = _matrix$shape[0],
|
||
cols = _matrix$shape[1];
|
||
|
||
var result = ndarray$1(new Uint8Array(rows * cols), [rows, cols]);
|
||
|
||
for (var i = 0; i < rows; i++) {
|
||
for (var j = 0; j < cols; j++) {
|
||
result.set(i, j, matrix.get(i, cols - 1 - j));
|
||
}
|
||
}
|
||
|
||
return result;
|
||
}
|
||
/**
|
||
* flipMatrix2D.h - Flips a 2D matrix in the vertical direction.
|
||
*
|
||
* @param {Ndarry} matrix The matrix to flip.
|
||
* @return {Ndarry} The flipped matrix.
|
||
*/
|
||
|
||
|
||
function v(matrix) {
|
||
var _matrix$shape2 = _slicedToArray(matrix.shape, 2),
|
||
rows = _matrix$shape2[0],
|
||
cols = _matrix$shape2[1];
|
||
|
||
var result = ndarray$1(new Uint8Array(rows * cols), [rows, cols]);
|
||
|
||
for (var j = 0; j < cols; j++) {
|
||
for (var i = 0; i < rows; i++) {
|
||
result.set(i, j, matrix.get(rows - 1 - i, j));
|
||
}
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* anonymous function - Rotates a matrix by 90 degrees.
|
||
*
|
||
* @param {Ndarray} matrix The matrix to rotate.
|
||
* @return {Ndarry} The rotated matrix.
|
||
*/
|
||
|
||
function rotateMatrix902D (matrix) {
|
||
var _matrix$shape = _slicedToArray(matrix.shape, 2),
|
||
rows = _matrix$shape[0],
|
||
cols = _matrix$shape[1]; //debugPrintMatrix(matrix);
|
||
|
||
|
||
var result = ndarray$1(new Uint8Array(rows * cols), [cols, rows]);
|
||
var resultColsMinus1 = result.shape[1] - 1;
|
||
|
||
for (var i = 0; i < rows; i++) {
|
||
for (var j = 0; j < cols; j++) {
|
||
result.set(j, resultColsMinus1 - i, matrix.get(i, j));
|
||
}
|
||
} //debugPrintMatrix(result);
|
||
|
||
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* nearlyEqual - Returns true if a and b are nearly equal
|
||
* within a tolerance.
|
||
*
|
||
* Inspiration for this function logic source comes from:
|
||
* https://floating-point-gui.de/errors/comparison/
|
||
*
|
||
* https://floating-point-gui.de is published under
|
||
* the Creative Commons Attribution License (BY):
|
||
* http://creativecommons.org/licenses/by/3.0/
|
||
*
|
||
* The actual implementation has been adjusted
|
||
* as discussed here: https://github.com/dcmjs-org/dcmjs/pull/304
|
||
*
|
||
* More information on floating point comparison here:
|
||
* http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
|
||
*
|
||
* @param {Number} a
|
||
* @param {Number} b
|
||
* @param {Number} tolerance.
|
||
* @return {Boolean} True if a and b are nearly equal.
|
||
*/
|
||
function nearlyEqual(a, b, epsilon) {
|
||
var absA = Math.abs(a);
|
||
var absB = Math.abs(b);
|
||
var diff = Math.abs(a - b);
|
||
|
||
if (a === b) {
|
||
// shortcut, handles infinities
|
||
return true;
|
||
} else if (a === 0 || b === 0 || absA + absB < epsilon * epsilon) {
|
||
// a or b is zero or both are extremely close to it
|
||
// relative error is less meaningful here
|
||
return diff < epsilon;
|
||
} else {
|
||
// use relative error
|
||
return diff / Math.min(absA + absB, Number.MAX_VALUE) < epsilon;
|
||
}
|
||
}
|
||
|
||
var orientation = /*#__PURE__*/Object.freeze({
|
||
__proto__: null,
|
||
crossProduct3D: crossProduct3D,
|
||
flipImageOrientationPatient: flipImageOrientationPatient,
|
||
flipMatrix2D: flipMatrix2D,
|
||
nearlyEqual: nearlyEqual,
|
||
rotateDirectionCosinesInPlane: rotateDirectionCosinesInPlane,
|
||
rotateMatrix902D: rotateMatrix902D,
|
||
rotateVectorAroundUnitVector: rotateVectorAroundUnitVector
|
||
});
|
||
|
||
var Segmentation$3 = {
|
||
generateSegmentation: generateSegmentation$2,
|
||
generateToolState: generateToolState$2
|
||
};
|
||
/**
|
||
*
|
||
* @typedef {Object} BrushData
|
||
* @property {Object} toolState - The cornerstoneTools global toolState.
|
||
* @property {Object[]} segments - The cornerstoneTools segment metadata that corresponds to the
|
||
* seriesInstanceUid.
|
||
*/
|
||
|
||
/**
|
||
* generateSegmentation - Generates cornerstoneTools brush data, given a stack of
|
||
* imageIds, images and the cornerstoneTools brushData.
|
||
*
|
||
* @param {object[]} images An array of the cornerstone image objects.
|
||
* @param {BrushData} brushData and object containing the brushData.
|
||
* @returns {type} description
|
||
*/
|
||
|
||
function generateSegmentation$2(images, brushData) {
|
||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
||
includeSliceSpacing: true
|
||
};
|
||
var toolState = brushData.toolState,
|
||
segments = brushData.segments; // Calculate the dimensions of the data cube.
|
||
|
||
var image0 = images[0];
|
||
var dims = {
|
||
x: image0.columns,
|
||
y: image0.rows,
|
||
z: images.length
|
||
};
|
||
dims.xy = dims.x * dims.y;
|
||
|
||
var numSegments = _getSegCount(seg, segments);
|
||
|
||
if (!numSegments) {
|
||
throw new Error("No segments to export!");
|
||
}
|
||
|
||
var isMultiframe = image0.imageId.includes("?frame");
|
||
|
||
var seg = _createSegFromImages$1(images, isMultiframe, options);
|
||
|
||
var _getNumberOfFramesPer = _getNumberOfFramesPerSegment(toolState, images, segments),
|
||
referencedFramesPerSegment = _getNumberOfFramesPer.referencedFramesPerSegment,
|
||
segmentIndicies = _getNumberOfFramesPer.segmentIndicies;
|
||
|
||
var NumberOfFrames = 0;
|
||
|
||
for (var i = 0; i < referencedFramesPerSegment.length; i++) {
|
||
NumberOfFrames += referencedFramesPerSegment[i].length;
|
||
}
|
||
|
||
seg.setNumberOfFrames(NumberOfFrames);
|
||
|
||
for (var _i = 0; _i < segmentIndicies.length; _i++) {
|
||
var segmentIndex = segmentIndicies[_i];
|
||
var referencedFrameIndicies = referencedFramesPerSegment[_i]; // Frame numbers start from 1.
|
||
|
||
var referencedFrameNumbers = referencedFrameIndicies.map(function (element) {
|
||
return element + 1;
|
||
});
|
||
var segment = segments[segmentIndex];
|
||
seg.addSegment(segment, _extractCornerstoneToolsPixelData(segmentIndex, referencedFrameIndicies, toolState, images, dims), referencedFrameNumbers);
|
||
}
|
||
|
||
seg.bitPackPixelData();
|
||
var segBlob = datasetToBlob(seg.dataset);
|
||
return segBlob;
|
||
}
|
||
|
||
function _extractCornerstoneToolsPixelData(segmentIndex, referencedFrames, toolState, images, dims) {
|
||
var pixelData = new Uint8Array(dims.xy * referencedFrames.length);
|
||
var pixelDataIndex = 0;
|
||
|
||
for (var i = 0; i < referencedFrames.length; i++) {
|
||
var frame = referencedFrames[i];
|
||
var imageId = images[frame].imageId;
|
||
var imageIdSpecificToolState = toolState[imageId];
|
||
var brushPixelData = imageIdSpecificToolState.brush.data[segmentIndex].pixelData;
|
||
|
||
for (var p = 0; p < brushPixelData.length; p++) {
|
||
pixelData[pixelDataIndex] = brushPixelData[p];
|
||
pixelDataIndex++;
|
||
}
|
||
}
|
||
|
||
return pixelData;
|
||
}
|
||
|
||
function _getNumberOfFramesPerSegment(toolState, images, segments) {
|
||
var segmentIndicies = [];
|
||
var referencedFramesPerSegment = [];
|
||
|
||
for (var i = 0; i < segments.length; i++) {
|
||
if (segments[i]) {
|
||
segmentIndicies.push(i);
|
||
referencedFramesPerSegment.push([]);
|
||
}
|
||
}
|
||
|
||
for (var z = 0; z < images.length; z++) {
|
||
var imageId = images[z].imageId;
|
||
var imageIdSpecificToolState = toolState[imageId];
|
||
|
||
for (var _i2 = 0; _i2 < segmentIndicies.length; _i2++) {
|
||
var segIdx = segmentIndicies[_i2];
|
||
|
||
if (imageIdSpecificToolState && imageIdSpecificToolState.brush && imageIdSpecificToolState.brush.data && imageIdSpecificToolState.brush.data[segIdx] && imageIdSpecificToolState.brush.data[segIdx].pixelData) {
|
||
referencedFramesPerSegment[_i2].push(z);
|
||
}
|
||
}
|
||
}
|
||
|
||
return {
|
||
referencedFramesPerSegment: referencedFramesPerSegment,
|
||
segmentIndicies: segmentIndicies
|
||
};
|
||
}
|
||
|
||
function _getSegCount(seg, segments) {
|
||
var numSegments = 0;
|
||
|
||
for (var i = 0; i < segments.length; i++) {
|
||
if (segments[i]) {
|
||
numSegments++;
|
||
}
|
||
}
|
||
|
||
return numSegments;
|
||
}
|
||
/**
|
||
* _createSegFromImages - description
|
||
*
|
||
* @param {Object[]} images An array of the cornerstone image objects.
|
||
* @param {Boolean} isMultiframe Whether the images are multiframe.
|
||
* @returns {Object} The Seg derived dataSet.
|
||
*/
|
||
|
||
|
||
function _createSegFromImages$1(images, isMultiframe, options) {
|
||
var datasets = [];
|
||
|
||
if (isMultiframe) {
|
||
var image = images[0];
|
||
var arrayBuffer = image.data.byteArray.buffer;
|
||
var dicomData = DicomMessage.readFile(arrayBuffer);
|
||
var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
|
||
dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
|
||
datasets.push(dataset);
|
||
} else {
|
||
for (var i = 0; i < images.length; i++) {
|
||
var _image = images[i];
|
||
var _arrayBuffer = _image.data.byteArray.buffer;
|
||
|
||
var _dicomData = DicomMessage.readFile(_arrayBuffer);
|
||
|
||
var _dataset = DicomMetaDictionary.naturalizeDataset(_dicomData.dict);
|
||
|
||
_dataset._meta = DicomMetaDictionary.namifyDataset(_dicomData.meta);
|
||
datasets.push(_dataset);
|
||
}
|
||
}
|
||
|
||
var multiframe = Normalizer.normalizeToDataset(datasets);
|
||
return new Segmentation$4([multiframe], options);
|
||
}
|
||
/**
|
||
* generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,
|
||
* derive cornerstoneTools toolState and brush metadata.
|
||
*
|
||
* @param {string[]} imageIds An array of the imageIds.
|
||
* @param {ArrayBuffer} arrayBuffer The SEG arrayBuffer.
|
||
* @param {*} metadataProvider
|
||
* @returns {Object} The toolState and an object from which the
|
||
* segment metadata can be derived.
|
||
*/
|
||
|
||
|
||
function generateToolState$2(imageIds, arrayBuffer, metadataProvider) {
|
||
var dicomData = DicomMessage.readFile(arrayBuffer);
|
||
var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
|
||
dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
|
||
var multiframe = Normalizer.normalizeToDataset([dataset]);
|
||
var imagePlaneModule = metadataProvider.get("imagePlaneModule", imageIds[0]);
|
||
|
||
if (!imagePlaneModule) {
|
||
console.warn("Insufficient metadata, imagePlaneModule missing.");
|
||
}
|
||
|
||
var ImageOrientationPatient = Array.isArray(imagePlaneModule.rowCosines) ? [].concat(_toConsumableArray(imagePlaneModule.rowCosines), _toConsumableArray(imagePlaneModule.columnCosines)) : [imagePlaneModule.rowCosines.x, imagePlaneModule.rowCosines.y, imagePlaneModule.rowCosines.z, imagePlaneModule.columnCosines.x, imagePlaneModule.columnCosines.y, imagePlaneModule.columnCosines.z]; // Get IOP from ref series, compute supported orientations:
|
||
|
||
var validOrientations = getValidOrientations$1(ImageOrientationPatient);
|
||
var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence;
|
||
var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
|
||
var sliceLength = multiframe.Columns * multiframe.Rows;
|
||
var segMetadata = getSegmentMetadata$1(multiframe);
|
||
var pixelData = unpackPixelData$1(multiframe);
|
||
var PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence;
|
||
var toolState = {};
|
||
var inPlane = true;
|
||
|
||
for (var i = 0; i < PerFrameFunctionalGroupsSequence.length; i++) {
|
||
var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[i];
|
||
var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
|
||
var pixelDataI2D = ndarray$1(new Uint8Array(pixelData.buffer, i * sliceLength, sliceLength), [multiframe.Rows, multiframe.Columns]);
|
||
var alignedPixelDataI = alignPixelDataWithSourceData$1(pixelDataI2D, ImageOrientationPatientI, validOrientations);
|
||
|
||
if (!alignedPixelDataI) {
|
||
console.warn("This segmentation object is not in-plane with the source data. Bailing out of IO. It'd be better to render this with vtkjs. ");
|
||
inPlane = false;
|
||
break;
|
||
}
|
||
|
||
var segmentIndex = PerFrameFunctionalGroups.SegmentIdentificationSequence.ReferencedSegmentNumber - 1;
|
||
var SourceImageSequence = void 0;
|
||
|
||
if (SharedFunctionalGroupsSequence.DerivationImageSequence && SharedFunctionalGroupsSequence.DerivationImageSequence.SourceImageSequence) {
|
||
SourceImageSequence = SharedFunctionalGroupsSequence.DerivationImageSequence.SourceImageSequence[i];
|
||
} else {
|
||
SourceImageSequence = PerFrameFunctionalGroups.DerivationImageSequence.SourceImageSequence;
|
||
}
|
||
|
||
var imageId = getImageIdOfSourceImage(SourceImageSequence, imageIds, metadataProvider);
|
||
addImageIdSpecificBrushToolState(toolState, imageId, segmentIndex, alignedPixelDataI);
|
||
}
|
||
|
||
if (!inPlane) {
|
||
return;
|
||
}
|
||
|
||
return {
|
||
toolState: toolState,
|
||
segMetadata: segMetadata
|
||
};
|
||
}
|
||
/**
|
||
* unpackPixelData - Unpacks bitpacked pixelData if the Segmentation is BINARY.
|
||
*
|
||
* @param {Object} multiframe The multiframe dataset.
|
||
* @return {Uint8Array} The unpacked pixelData.
|
||
*/
|
||
|
||
|
||
function unpackPixelData$1(multiframe) {
|
||
var segType = multiframe.SegmentationType;
|
||
|
||
if (segType === "BINARY") {
|
||
return BitArray.unpack(multiframe.PixelData);
|
||
}
|
||
|
||
var pixelData = new Uint8Array(multiframe.PixelData);
|
||
var max = multiframe.MaximumFractionalValue;
|
||
var onlyMaxAndZero = pixelData.find(function (element) {
|
||
return element !== 0 && element !== max;
|
||
}) === undefined;
|
||
|
||
if (!onlyMaxAndZero) {
|
||
log.warn("This is a fractional segmentation, which is not currently supported.");
|
||
return;
|
||
}
|
||
|
||
log.warn("This segmentation object is actually binary... processing as such.");
|
||
return pixelData;
|
||
}
|
||
/**
|
||
* addImageIdSpecificBrushToolState - Adds brush pixel data to cornerstoneTools
|
||
* formatted toolState object.
|
||
*
|
||
* @param {Object} toolState The toolState object to modify
|
||
* @param {String} imageId The imageId of the toolState to add the data.
|
||
* @param {Number} segmentIndex The index of the segment data being added.
|
||
* @param {Ndarray} pixelData2D The pixelData in Ndarry 2D format.
|
||
*/
|
||
|
||
|
||
function addImageIdSpecificBrushToolState(toolState, imageId, segmentIndex, pixelData2D) {
|
||
if (!toolState[imageId]) {
|
||
toolState[imageId] = {};
|
||
toolState[imageId].brush = {};
|
||
toolState[imageId].brush.data = [];
|
||
} else if (!toolState[imageId].brush) {
|
||
toolState[imageId].brush = {};
|
||
toolState[imageId].brush.data = [];
|
||
} else if (!toolState[imageId].brush.data) {
|
||
toolState[imageId].brush.data = [];
|
||
}
|
||
|
||
toolState[imageId].brush.data[segmentIndex] = {};
|
||
var brushDataI = toolState[imageId].brush.data[segmentIndex];
|
||
brushDataI.pixelData = new Uint8Array(pixelData2D.data.length);
|
||
var cToolsPixelData = brushDataI.pixelData;
|
||
|
||
var _pixelData2D$shape = _slicedToArray(pixelData2D.shape, 2);
|
||
_pixelData2D$shape[0];
|
||
_pixelData2D$shape[1];
|
||
|
||
for (var p = 0; p < cToolsPixelData.length; p++) {
|
||
if (pixelData2D.data[p]) {
|
||
cToolsPixelData[p] = 1;
|
||
} else {
|
||
cToolsPixelData[p] = 0;
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* getImageIdOfSourceImage - Returns the Cornerstone imageId of the source image.
|
||
*
|
||
* @param {Object} SourceImageSequence Sequence describing the source image.
|
||
* @param {String[]} imageIds A list of imageIds.
|
||
* @param {Object} metadataProvider A Cornerstone metadataProvider to query
|
||
* metadata from imageIds.
|
||
* @return {String} The corresponding imageId.
|
||
*/
|
||
|
||
|
||
function getImageIdOfSourceImage(SourceImageSequence, imageIds, metadataProvider) {
|
||
var ReferencedSOPInstanceUID = SourceImageSequence.ReferencedSOPInstanceUID,
|
||
ReferencedFrameNumber = SourceImageSequence.ReferencedFrameNumber;
|
||
return ReferencedFrameNumber ? getImageIdOfReferencedFrame$1(ReferencedSOPInstanceUID, ReferencedFrameNumber, imageIds, metadataProvider) : getImageIdOfReferencedSingleFramedSOPInstance$1(ReferencedSOPInstanceUID, imageIds, metadataProvider);
|
||
}
|
||
/**
|
||
* getImageIdOfReferencedSingleFramedSOPInstance - Returns the imageId
|
||
* corresponding to the specified sopInstanceUid for single-frame images.
|
||
*
|
||
* @param {String} sopInstanceUid The sopInstanceUid of the desired image.
|
||
* @param {String[]} imageIds The list of imageIds.
|
||
* @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids
|
||
* from the cornerstone imageIds.
|
||
* @return {String} The imageId that corresponds to the sopInstanceUid.
|
||
*/
|
||
|
||
|
||
function getImageIdOfReferencedSingleFramedSOPInstance$1(sopInstanceUid, imageIds, metadataProvider) {
|
||
return imageIds.find(function (imageId) {
|
||
var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
|
||
|
||
if (!sopCommonModule) {
|
||
return;
|
||
}
|
||
|
||
return sopCommonModule.sopInstanceUID === sopInstanceUid;
|
||
});
|
||
}
|
||
/**
|
||
* getImageIdOfReferencedFrame - Returns the imageId corresponding to the
|
||
* specified sopInstanceUid and frameNumber for multi-frame images.
|
||
*
|
||
* @param {String} sopInstanceUid The sopInstanceUid of the desired image.
|
||
* @param {Number} frameNumber The frame number.
|
||
* @param {String} imageIds The list of imageIds.
|
||
* @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids
|
||
* from the cornerstone imageIds.
|
||
* @return {String} The imageId that corresponds to the sopInstanceUid.
|
||
*/
|
||
|
||
|
||
function getImageIdOfReferencedFrame$1(sopInstanceUid, frameNumber, imageIds, metadataProvider) {
|
||
var imageId = imageIds.find(function (imageId) {
|
||
var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
|
||
|
||
if (!sopCommonModule) {
|
||
return;
|
||
}
|
||
|
||
var imageIdFrameNumber = Number(imageId.split("frame=")[1]);
|
||
return (//frameNumber is zero indexed for cornerstoneWADOImageLoader image Ids.
|
||
sopCommonModule.sopInstanceUID === sopInstanceUid && imageIdFrameNumber === frameNumber - 1
|
||
);
|
||
});
|
||
return imageId;
|
||
}
|
||
/**
|
||
* getValidOrientations - returns an array of valid orientations.
|
||
*
|
||
* @param {Number[6]} iop The row (0..2) an column (3..5) direction cosines.
|
||
* @return {Number[8][6]} An array of valid orientations.
|
||
*/
|
||
|
||
|
||
function getValidOrientations$1(iop) {
|
||
var orientations = []; // [0, 1, 2]: 0, 0hf, 0vf
|
||
// [3, 4, 5]: 90, 90hf, 90vf
|
||
// [6, 7]: 180, 270
|
||
|
||
orientations[0] = iop;
|
||
orientations[1] = flipImageOrientationPatient.h(iop);
|
||
orientations[2] = flipImageOrientationPatient.v(iop);
|
||
var iop90 = rotateDirectionCosinesInPlane(iop, Math.PI / 2);
|
||
orientations[3] = iop90;
|
||
orientations[4] = flipImageOrientationPatient.h(iop90);
|
||
orientations[5] = flipImageOrientationPatient.v(iop90);
|
||
orientations[6] = rotateDirectionCosinesInPlane(iop, Math.PI);
|
||
orientations[7] = rotateDirectionCosinesInPlane(iop, 1.5 * Math.PI);
|
||
return orientations;
|
||
}
|
||
/**
|
||
* alignPixelDataWithSourceData -
|
||
*
|
||
* @param {Ndarray} pixelData2D The data to align.
|
||
* @param {Number[6]} iop The orientation of the image slice.
|
||
* @param {Number[8][6]} orientations An array of valid imageOrientationPatient values.
|
||
* @return {Ndarray} The aligned pixelData.
|
||
*/
|
||
|
||
|
||
function alignPixelDataWithSourceData$1(pixelData2D, iop, orientations) {
|
||
if (compareIOP(iop, orientations[0])) {
|
||
//Same orientation.
|
||
return pixelData2D;
|
||
} else if (compareIOP(iop, orientations[1])) {
|
||
//Flipped vertically.
|
||
return flipMatrix2D.v(pixelData2D);
|
||
} else if (compareIOP(iop, orientations[2])) {
|
||
//Flipped horizontally.
|
||
return flipMatrix2D.h(pixelData2D);
|
||
} else if (compareIOP(iop, orientations[3])) {
|
||
//Rotated 90 degrees.
|
||
return rotateMatrix902D(pixelData2D);
|
||
} else if (compareIOP(iop, orientations[4])) {
|
||
//Rotated 90 degrees and fliped horizontally.
|
||
return flipMatrix2D.h(rotateMatrix902D(pixelData2D));
|
||
} else if (compareIOP(iop, orientations[5])) {
|
||
//Rotated 90 degrees and fliped vertically.
|
||
return flipMatrix2D.v(rotateMatrix902D(pixelData2D));
|
||
} else if (compareIOP(iop, orientations[6])) {
|
||
//Rotated 180 degrees. // TODO -> Do this more effeciently, there is a 1:1 mapping like 90 degree rotation.
|
||
return rotateMatrix902D(rotateMatrix902D(pixelData2D));
|
||
} else if (compareIOP(iop, orientations[7])) {
|
||
//Rotated 270 degrees. // TODO -> Do this more effeciently, there is a 1:1 mapping like 90 degree rotation.
|
||
return rotateMatrix902D(rotateMatrix902D(rotateMatrix902D(pixelData2D)));
|
||
}
|
||
}
|
||
|
||
var dx = 1e-5;
|
||
/**
|
||
* compareIOP - Returns true if iop1 and iop2 are equal
|
||
* within a tollerance, dx.
|
||
*
|
||
* @param {Number[6]} iop1 An ImageOrientationPatient array.
|
||
* @param {Number[6]} iop2 An ImageOrientationPatient array.
|
||
* @return {Boolean} True if iop1 and iop2 are equal.
|
||
*/
|
||
|
||
function compareIOP(iop1, iop2) {
|
||
return Math.abs(iop1[0] - iop2[0]) < dx && Math.abs(iop1[1] - iop2[1]) < dx && Math.abs(iop1[2] - iop2[2]) < dx && Math.abs(iop1[3] - iop2[3]) < dx && Math.abs(iop1[4] - iop2[4]) < dx && Math.abs(iop1[5] - iop2[5]) < dx;
|
||
}
|
||
|
||
function getSegmentMetadata$1(multiframe) {
|
||
var data = [];
|
||
var segmentSequence = multiframe.SegmentSequence;
|
||
|
||
if (Array.isArray(segmentSequence)) {
|
||
for (var segIdx = 0; segIdx < segmentSequence.length; segIdx++) {
|
||
data.push(segmentSequence[segIdx]);
|
||
}
|
||
} else {
|
||
// Only one segment, will be stored as an object.
|
||
data.push(segmentSequence);
|
||
}
|
||
|
||
return {
|
||
seriesInstanceUid: multiframe.ReferencedSeriesSequence.SeriesInstanceUID,
|
||
data: data
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Common utilities
|
||
* @module glMatrix
|
||
*/
|
||
// Configuration Constants
|
||
var EPSILON$1 = 0.000001;
|
||
var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;
|
||
var RANDOM = Math.random;
|
||
if (!Math.hypot) Math.hypot = function () {
|
||
var y = 0,
|
||
i = arguments.length;
|
||
|
||
while (i--) {
|
||
y += arguments[i] * arguments[i];
|
||
}
|
||
|
||
return Math.sqrt(y);
|
||
};
|
||
|
||
/**
|
||
* 3 Dimensional Vector
|
||
* @module vec3
|
||
*/
|
||
|
||
/**
|
||
* Creates a new, empty vec3
|
||
*
|
||
* @returns {vec3} a new 3D vector
|
||
*/
|
||
|
||
function create() {
|
||
var out = new ARRAY_TYPE(3);
|
||
|
||
if (ARRAY_TYPE != Float32Array) {
|
||
out[0] = 0;
|
||
out[1] = 0;
|
||
out[2] = 0;
|
||
}
|
||
|
||
return out;
|
||
}
|
||
/**
|
||
* Creates a new vec3 initialized with values from an existing vector
|
||
*
|
||
* @param {ReadonlyVec3} a vector to clone
|
||
* @returns {vec3} a new 3D vector
|
||
*/
|
||
|
||
function clone(a) {
|
||
var out = new ARRAY_TYPE(3);
|
||
out[0] = a[0];
|
||
out[1] = a[1];
|
||
out[2] = a[2];
|
||
return out;
|
||
}
|
||
/**
|
||
* Calculates the length of a vec3
|
||
*
|
||
* @param {ReadonlyVec3} a vector to calculate length of
|
||
* @returns {Number} length of a
|
||
*/
|
||
|
||
function length(a) {
|
||
var x = a[0];
|
||
var y = a[1];
|
||
var z = a[2];
|
||
return Math.hypot(x, y, z);
|
||
}
|
||
/**
|
||
* Creates a new vec3 initialized with the given values
|
||
*
|
||
* @param {Number} x X component
|
||
* @param {Number} y Y component
|
||
* @param {Number} z Z component
|
||
* @returns {vec3} a new 3D vector
|
||
*/
|
||
|
||
function fromValues(x, y, z) {
|
||
var out = new ARRAY_TYPE(3);
|
||
out[0] = x;
|
||
out[1] = y;
|
||
out[2] = z;
|
||
return out;
|
||
}
|
||
/**
|
||
* Copy the values from one vec3 to another
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the source vector
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function copy(out, a) {
|
||
out[0] = a[0];
|
||
out[1] = a[1];
|
||
out[2] = a[2];
|
||
return out;
|
||
}
|
||
/**
|
||
* Set the components of a vec3 to the given values
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {Number} x X component
|
||
* @param {Number} y Y component
|
||
* @param {Number} z Z component
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function set(out, x, y, z) {
|
||
out[0] = x;
|
||
out[1] = y;
|
||
out[2] = z;
|
||
return out;
|
||
}
|
||
/**
|
||
* Adds two vec3's
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function add(out, a, b) {
|
||
out[0] = a[0] + b[0];
|
||
out[1] = a[1] + b[1];
|
||
out[2] = a[2] + b[2];
|
||
return out;
|
||
}
|
||
/**
|
||
* Subtracts vector b from vector a
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function subtract$1(out, a, b) {
|
||
out[0] = a[0] - b[0];
|
||
out[1] = a[1] - b[1];
|
||
out[2] = a[2] - b[2];
|
||
return out;
|
||
}
|
||
/**
|
||
* Multiplies two vec3's
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function multiply(out, a, b) {
|
||
out[0] = a[0] * b[0];
|
||
out[1] = a[1] * b[1];
|
||
out[2] = a[2] * b[2];
|
||
return out;
|
||
}
|
||
/**
|
||
* Divides two vec3's
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function divide(out, a, b) {
|
||
out[0] = a[0] / b[0];
|
||
out[1] = a[1] / b[1];
|
||
out[2] = a[2] / b[2];
|
||
return out;
|
||
}
|
||
/**
|
||
* Math.ceil the components of a vec3
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a vector to ceil
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function ceil(out, a) {
|
||
out[0] = Math.ceil(a[0]);
|
||
out[1] = Math.ceil(a[1]);
|
||
out[2] = Math.ceil(a[2]);
|
||
return out;
|
||
}
|
||
/**
|
||
* Math.floor the components of a vec3
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a vector to floor
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function floor(out, a) {
|
||
out[0] = Math.floor(a[0]);
|
||
out[1] = Math.floor(a[1]);
|
||
out[2] = Math.floor(a[2]);
|
||
return out;
|
||
}
|
||
/**
|
||
* Returns the minimum of two vec3's
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function min(out, a, b) {
|
||
out[0] = Math.min(a[0], b[0]);
|
||
out[1] = Math.min(a[1], b[1]);
|
||
out[2] = Math.min(a[2], b[2]);
|
||
return out;
|
||
}
|
||
/**
|
||
* Returns the maximum of two vec3's
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function max(out, a, b) {
|
||
out[0] = Math.max(a[0], b[0]);
|
||
out[1] = Math.max(a[1], b[1]);
|
||
out[2] = Math.max(a[2], b[2]);
|
||
return out;
|
||
}
|
||
/**
|
||
* Math.round the components of a vec3
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a vector to round
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function round(out, a) {
|
||
out[0] = Math.round(a[0]);
|
||
out[1] = Math.round(a[1]);
|
||
out[2] = Math.round(a[2]);
|
||
return out;
|
||
}
|
||
/**
|
||
* Scales a vec3 by a scalar number
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the vector to scale
|
||
* @param {Number} b amount to scale the vector by
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function scale(out, a, b) {
|
||
out[0] = a[0] * b;
|
||
out[1] = a[1] * b;
|
||
out[2] = a[2] * b;
|
||
return out;
|
||
}
|
||
/**
|
||
* Adds two vec3's after scaling the second operand by a scalar value
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @param {Number} scale the amount to scale b by before adding
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function scaleAndAdd(out, a, b, scale) {
|
||
out[0] = a[0] + b[0] * scale;
|
||
out[1] = a[1] + b[1] * scale;
|
||
out[2] = a[2] + b[2] * scale;
|
||
return out;
|
||
}
|
||
/**
|
||
* Calculates the euclidian distance between two vec3's
|
||
*
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @returns {Number} distance between a and b
|
||
*/
|
||
|
||
function distance(a, b) {
|
||
var x = b[0] - a[0];
|
||
var y = b[1] - a[1];
|
||
var z = b[2] - a[2];
|
||
return Math.hypot(x, y, z);
|
||
}
|
||
/**
|
||
* Calculates the squared euclidian distance between two vec3's
|
||
*
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @returns {Number} squared distance between a and b
|
||
*/
|
||
|
||
function squaredDistance(a, b) {
|
||
var x = b[0] - a[0];
|
||
var y = b[1] - a[1];
|
||
var z = b[2] - a[2];
|
||
return x * x + y * y + z * z;
|
||
}
|
||
/**
|
||
* Calculates the squared length of a vec3
|
||
*
|
||
* @param {ReadonlyVec3} a vector to calculate squared length of
|
||
* @returns {Number} squared length of a
|
||
*/
|
||
|
||
function squaredLength(a) {
|
||
var x = a[0];
|
||
var y = a[1];
|
||
var z = a[2];
|
||
return x * x + y * y + z * z;
|
||
}
|
||
/**
|
||
* Negates the components of a vec3
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a vector to negate
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function negate(out, a) {
|
||
out[0] = -a[0];
|
||
out[1] = -a[1];
|
||
out[2] = -a[2];
|
||
return out;
|
||
}
|
||
/**
|
||
* Returns the inverse of the components of a vec3
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a vector to invert
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function inverse(out, a) {
|
||
out[0] = 1.0 / a[0];
|
||
out[1] = 1.0 / a[1];
|
||
out[2] = 1.0 / a[2];
|
||
return out;
|
||
}
|
||
/**
|
||
* Normalize a vec3
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a vector to normalize
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function normalize$1(out, a) {
|
||
var x = a[0];
|
||
var y = a[1];
|
||
var z = a[2];
|
||
var len = x * x + y * y + z * z;
|
||
|
||
if (len > 0) {
|
||
//TODO: evaluate use of glm_invsqrt here?
|
||
len = 1 / Math.sqrt(len);
|
||
}
|
||
|
||
out[0] = a[0] * len;
|
||
out[1] = a[1] * len;
|
||
out[2] = a[2] * len;
|
||
return out;
|
||
}
|
||
/**
|
||
* Calculates the dot product of two vec3's
|
||
*
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @returns {Number} dot product of a and b
|
||
*/
|
||
|
||
function dot(a, b) {
|
||
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
||
}
|
||
/**
|
||
* Computes the cross product of two vec3's
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function cross$1(out, a, b) {
|
||
var ax = a[0],
|
||
ay = a[1],
|
||
az = a[2];
|
||
var bx = b[0],
|
||
by = b[1],
|
||
bz = b[2];
|
||
out[0] = ay * bz - az * by;
|
||
out[1] = az * bx - ax * bz;
|
||
out[2] = ax * by - ay * bx;
|
||
return out;
|
||
}
|
||
/**
|
||
* Performs a linear interpolation between two vec3's
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function lerp(out, a, b, t) {
|
||
var ax = a[0];
|
||
var ay = a[1];
|
||
var az = a[2];
|
||
out[0] = ax + t * (b[0] - ax);
|
||
out[1] = ay + t * (b[1] - ay);
|
||
out[2] = az + t * (b[2] - az);
|
||
return out;
|
||
}
|
||
/**
|
||
* Performs a hermite interpolation with two control points
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @param {ReadonlyVec3} c the third operand
|
||
* @param {ReadonlyVec3} d the fourth operand
|
||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function hermite(out, a, b, c, d, t) {
|
||
var factorTimes2 = t * t;
|
||
var factor1 = factorTimes2 * (2 * t - 3) + 1;
|
||
var factor2 = factorTimes2 * (t - 2) + t;
|
||
var factor3 = factorTimes2 * (t - 1);
|
||
var factor4 = factorTimes2 * (3 - 2 * t);
|
||
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
||
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
||
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
||
return out;
|
||
}
|
||
/**
|
||
* Performs a bezier interpolation with two control points
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the first operand
|
||
* @param {ReadonlyVec3} b the second operand
|
||
* @param {ReadonlyVec3} c the third operand
|
||
* @param {ReadonlyVec3} d the fourth operand
|
||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function bezier(out, a, b, c, d, t) {
|
||
var inverseFactor = 1 - t;
|
||
var inverseFactorTimesTwo = inverseFactor * inverseFactor;
|
||
var factorTimes2 = t * t;
|
||
var factor1 = inverseFactorTimesTwo * inverseFactor;
|
||
var factor2 = 3 * t * inverseFactorTimesTwo;
|
||
var factor3 = 3 * factorTimes2 * inverseFactor;
|
||
var factor4 = factorTimes2 * t;
|
||
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
||
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
||
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
||
return out;
|
||
}
|
||
/**
|
||
* Generates a random vector with the given scale
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function random(out, scale) {
|
||
scale = scale || 1.0;
|
||
var r = RANDOM() * 2.0 * Math.PI;
|
||
var z = RANDOM() * 2.0 - 1.0;
|
||
var zScale = Math.sqrt(1.0 - z * z) * scale;
|
||
out[0] = Math.cos(r) * zScale;
|
||
out[1] = Math.sin(r) * zScale;
|
||
out[2] = z * scale;
|
||
return out;
|
||
}
|
||
/**
|
||
* Transforms the vec3 with a mat4.
|
||
* 4th vector component is implicitly '1'
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the vector to transform
|
||
* @param {ReadonlyMat4} m matrix to transform with
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function transformMat4(out, a, m) {
|
||
var x = a[0],
|
||
y = a[1],
|
||
z = a[2];
|
||
var w = m[3] * x + m[7] * y + m[11] * z + m[15];
|
||
w = w || 1.0;
|
||
out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
|
||
out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
|
||
out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;
|
||
return out;
|
||
}
|
||
/**
|
||
* Transforms the vec3 with a mat3.
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the vector to transform
|
||
* @param {ReadonlyMat3} m the 3x3 matrix to transform with
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function transformMat3(out, a, m) {
|
||
var x = a[0],
|
||
y = a[1],
|
||
z = a[2];
|
||
out[0] = x * m[0] + y * m[3] + z * m[6];
|
||
out[1] = x * m[1] + y * m[4] + z * m[7];
|
||
out[2] = x * m[2] + y * m[5] + z * m[8];
|
||
return out;
|
||
}
|
||
/**
|
||
* Transforms the vec3 with a quat
|
||
* Can also be used for dual quaternions. (Multiply it with the real part)
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @param {ReadonlyVec3} a the vector to transform
|
||
* @param {ReadonlyQuat} q quaternion to transform with
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function transformQuat(out, a, q) {
|
||
// benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed
|
||
var qx = q[0],
|
||
qy = q[1],
|
||
qz = q[2],
|
||
qw = q[3];
|
||
var x = a[0],
|
||
y = a[1],
|
||
z = a[2]; // var qvec = [qx, qy, qz];
|
||
// var uv = vec3.cross([], qvec, a);
|
||
|
||
var uvx = qy * z - qz * y,
|
||
uvy = qz * x - qx * z,
|
||
uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);
|
||
|
||
var uuvx = qy * uvz - qz * uvy,
|
||
uuvy = qz * uvx - qx * uvz,
|
||
uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);
|
||
|
||
var w2 = qw * 2;
|
||
uvx *= w2;
|
||
uvy *= w2;
|
||
uvz *= w2; // vec3.scale(uuv, uuv, 2);
|
||
|
||
uuvx *= 2;
|
||
uuvy *= 2;
|
||
uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));
|
||
|
||
out[0] = x + uvx + uuvx;
|
||
out[1] = y + uvy + uuvy;
|
||
out[2] = z + uvz + uuvz;
|
||
return out;
|
||
}
|
||
/**
|
||
* Rotate a 3D vector around the x-axis
|
||
* @param {vec3} out The receiving vec3
|
||
* @param {ReadonlyVec3} a The vec3 point to rotate
|
||
* @param {ReadonlyVec3} b The origin of the rotation
|
||
* @param {Number} rad The angle of rotation in radians
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function rotateX(out, a, b, rad) {
|
||
var p = [],
|
||
r = []; //Translate point to the origin
|
||
|
||
p[0] = a[0] - b[0];
|
||
p[1] = a[1] - b[1];
|
||
p[2] = a[2] - b[2]; //perform rotation
|
||
|
||
r[0] = p[0];
|
||
r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);
|
||
r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position
|
||
|
||
out[0] = r[0] + b[0];
|
||
out[1] = r[1] + b[1];
|
||
out[2] = r[2] + b[2];
|
||
return out;
|
||
}
|
||
/**
|
||
* Rotate a 3D vector around the y-axis
|
||
* @param {vec3} out The receiving vec3
|
||
* @param {ReadonlyVec3} a The vec3 point to rotate
|
||
* @param {ReadonlyVec3} b The origin of the rotation
|
||
* @param {Number} rad The angle of rotation in radians
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function rotateY(out, a, b, rad) {
|
||
var p = [],
|
||
r = []; //Translate point to the origin
|
||
|
||
p[0] = a[0] - b[0];
|
||
p[1] = a[1] - b[1];
|
||
p[2] = a[2] - b[2]; //perform rotation
|
||
|
||
r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);
|
||
r[1] = p[1];
|
||
r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position
|
||
|
||
out[0] = r[0] + b[0];
|
||
out[1] = r[1] + b[1];
|
||
out[2] = r[2] + b[2];
|
||
return out;
|
||
}
|
||
/**
|
||
* Rotate a 3D vector around the z-axis
|
||
* @param {vec3} out The receiving vec3
|
||
* @param {ReadonlyVec3} a The vec3 point to rotate
|
||
* @param {ReadonlyVec3} b The origin of the rotation
|
||
* @param {Number} rad The angle of rotation in radians
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function rotateZ(out, a, b, rad) {
|
||
var p = [],
|
||
r = []; //Translate point to the origin
|
||
|
||
p[0] = a[0] - b[0];
|
||
p[1] = a[1] - b[1];
|
||
p[2] = a[2] - b[2]; //perform rotation
|
||
|
||
r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);
|
||
r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);
|
||
r[2] = p[2]; //translate to correct position
|
||
|
||
out[0] = r[0] + b[0];
|
||
out[1] = r[1] + b[1];
|
||
out[2] = r[2] + b[2];
|
||
return out;
|
||
}
|
||
/**
|
||
* Get the angle between two 3D vectors
|
||
* @param {ReadonlyVec3} a The first operand
|
||
* @param {ReadonlyVec3} b The second operand
|
||
* @returns {Number} The angle in radians
|
||
*/
|
||
|
||
function angle(a, b) {
|
||
var ax = a[0],
|
||
ay = a[1],
|
||
az = a[2],
|
||
bx = b[0],
|
||
by = b[1],
|
||
bz = b[2],
|
||
mag1 = Math.sqrt(ax * ax + ay * ay + az * az),
|
||
mag2 = Math.sqrt(bx * bx + by * by + bz * bz),
|
||
mag = mag1 * mag2,
|
||
cosine = mag && dot(a, b) / mag;
|
||
return Math.acos(Math.min(Math.max(cosine, -1), 1));
|
||
}
|
||
/**
|
||
* Set the components of a vec3 to zero
|
||
*
|
||
* @param {vec3} out the receiving vector
|
||
* @returns {vec3} out
|
||
*/
|
||
|
||
function zero(out) {
|
||
out[0] = 0.0;
|
||
out[1] = 0.0;
|
||
out[2] = 0.0;
|
||
return out;
|
||
}
|
||
/**
|
||
* Returns a string representation of a vector
|
||
*
|
||
* @param {ReadonlyVec3} a vector to represent as a string
|
||
* @returns {String} string representation of the vector
|
||
*/
|
||
|
||
function str(a) {
|
||
return "vec3(" + a[0] + ", " + a[1] + ", " + a[2] + ")";
|
||
}
|
||
/**
|
||
* Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
|
||
*
|
||
* @param {ReadonlyVec3} a The first vector.
|
||
* @param {ReadonlyVec3} b The second vector.
|
||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||
*/
|
||
|
||
function exactEquals(a, b) {
|
||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
|
||
}
|
||
/**
|
||
* Returns whether or not the vectors have approximately the same elements in the same position.
|
||
*
|
||
* @param {ReadonlyVec3} a The first vector.
|
||
* @param {ReadonlyVec3} b The second vector.
|
||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||
*/
|
||
|
||
function equals(a, b) {
|
||
var a0 = a[0],
|
||
a1 = a[1],
|
||
a2 = a[2];
|
||
var b0 = b[0],
|
||
b1 = b[1],
|
||
b2 = b[2];
|
||
return Math.abs(a0 - b0) <= EPSILON$1 * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= EPSILON$1 * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= EPSILON$1 * Math.max(1.0, Math.abs(a2), Math.abs(b2));
|
||
}
|
||
/**
|
||
* Alias for {@link vec3.subtract}
|
||
* @function
|
||
*/
|
||
|
||
var sub = subtract$1;
|
||
/**
|
||
* Alias for {@link vec3.multiply}
|
||
* @function
|
||
*/
|
||
|
||
var mul = multiply;
|
||
/**
|
||
* Alias for {@link vec3.divide}
|
||
* @function
|
||
*/
|
||
|
||
var div = divide;
|
||
/**
|
||
* Alias for {@link vec3.distance}
|
||
* @function
|
||
*/
|
||
|
||
var dist = distance;
|
||
/**
|
||
* Alias for {@link vec3.squaredDistance}
|
||
* @function
|
||
*/
|
||
|
||
var sqrDist = squaredDistance;
|
||
/**
|
||
* Alias for {@link vec3.length}
|
||
* @function
|
||
*/
|
||
|
||
var len = length;
|
||
/**
|
||
* Alias for {@link vec3.squaredLength}
|
||
* @function
|
||
*/
|
||
|
||
var sqrLen = squaredLength;
|
||
/**
|
||
* Perform some operation over an array of vec3s.
|
||
*
|
||
* @param {Array} a the array of vectors to iterate over
|
||
* @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed
|
||
* @param {Number} offset Number of elements to skip at the beginning of the array
|
||
* @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array
|
||
* @param {Function} fn Function to call for each vector in the array
|
||
* @param {Object} [arg] additional argument to pass to fn
|
||
* @returns {Array} a
|
||
* @function
|
||
*/
|
||
|
||
var forEach = function () {
|
||
var vec = create();
|
||
return function (a, stride, offset, count, fn, arg) {
|
||
var i, l;
|
||
|
||
if (!stride) {
|
||
stride = 3;
|
||
}
|
||
|
||
if (!offset) {
|
||
offset = 0;
|
||
}
|
||
|
||
if (count) {
|
||
l = Math.min(count * stride + offset, a.length);
|
||
} else {
|
||
l = a.length;
|
||
}
|
||
|
||
for (i = offset; i < l; i += stride) {
|
||
vec[0] = a[i];
|
||
vec[1] = a[i + 1];
|
||
vec[2] = a[i + 2];
|
||
fn(vec, vec, arg);
|
||
a[i] = vec[0];
|
||
a[i + 1] = vec[1];
|
||
a[i + 2] = vec[2];
|
||
}
|
||
|
||
return a;
|
||
};
|
||
}();
|
||
|
||
var vec3 = /*#__PURE__*/Object.freeze({
|
||
__proto__: null,
|
||
add: add,
|
||
angle: angle,
|
||
bezier: bezier,
|
||
ceil: ceil,
|
||
clone: clone,
|
||
copy: copy,
|
||
create: create,
|
||
cross: cross$1,
|
||
dist: dist,
|
||
distance: distance,
|
||
div: div,
|
||
divide: divide,
|
||
dot: dot,
|
||
equals: equals,
|
||
exactEquals: exactEquals,
|
||
floor: floor,
|
||
forEach: forEach,
|
||
fromValues: fromValues,
|
||
hermite: hermite,
|
||
inverse: inverse,
|
||
len: len,
|
||
length: length,
|
||
lerp: lerp,
|
||
max: max,
|
||
min: min,
|
||
mul: mul,
|
||
multiply: multiply,
|
||
negate: negate,
|
||
normalize: normalize$1,
|
||
random: random,
|
||
rotateX: rotateX,
|
||
rotateY: rotateY,
|
||
rotateZ: rotateZ,
|
||
round: round,
|
||
scale: scale,
|
||
scaleAndAdd: scaleAndAdd,
|
||
set: set,
|
||
sqrDist: sqrDist,
|
||
sqrLen: sqrLen,
|
||
squaredDistance: squaredDistance,
|
||
squaredLength: squaredLength,
|
||
str: str,
|
||
sub: sub,
|
||
subtract: subtract$1,
|
||
transformMat3: transformMat3,
|
||
transformMat4: transformMat4,
|
||
transformQuat: transformQuat,
|
||
zero: zero
|
||
});
|
||
|
||
/**
|
||
* Encodes a non-bitpacked frame which has one sample per pixel.
|
||
*
|
||
* @param {*} buffer
|
||
* @param {*} numberOfFrames
|
||
* @param {*} rows
|
||
* @param {*} cols
|
||
*/
|
||
|
||
function encode(buffer, numberOfFrames, rows, cols) {
|
||
var frameLength = rows * cols;
|
||
var header = createHeader();
|
||
var encodedFrames = [];
|
||
|
||
for (var frame = 0; frame < numberOfFrames; frame++) {
|
||
var frameOffset = frameLength * frame;
|
||
encodedFrames.push(encodeFrame(buffer, frameOffset, rows, cols, header));
|
||
}
|
||
|
||
return encodedFrames;
|
||
}
|
||
|
||
function encodeFrame(buffer, frameOffset, rows, cols, header) {
|
||
// Add header to frame:
|
||
var rleArray = [];
|
||
|
||
for (var r = 0; r < rows; r++) {
|
||
var rowOffset = r * cols;
|
||
var uint8Row = new Uint8Array(buffer, frameOffset + rowOffset, cols);
|
||
var i = 0;
|
||
|
||
while (i < uint8Row.length) {
|
||
var literalRunLength = getLiteralRunLength(uint8Row, i);
|
||
|
||
if (literalRunLength) {
|
||
// State how many in litteral run
|
||
rleArray.push(literalRunLength - 1); // Append litteral run.
|
||
|
||
var literalRun = uint8Row.slice(i, i + literalRunLength);
|
||
rleArray = [].concat(_toConsumableArray(rleArray), _toConsumableArray(literalRun));
|
||
i += literalRunLength;
|
||
}
|
||
|
||
if (i >= uint8Row.length) {
|
||
break;
|
||
} // Next must be a replicate run.
|
||
|
||
|
||
var replicateRunLength = getReplicateRunLength(uint8Row, i);
|
||
|
||
if (replicateRunLength) {
|
||
// State how many in replicate run
|
||
rleArray.push(257 - replicateRunLength);
|
||
rleArray.push(uint8Row[i]);
|
||
i += replicateRunLength;
|
||
}
|
||
}
|
||
}
|
||
|
||
var headerLength = 64;
|
||
var bodyLength = rleArray.length % 2 === 0 ? rleArray.length : rleArray.length + 1;
|
||
var encodedFrameBuffer = new ArrayBuffer(headerLength + bodyLength); // Copy header into encodedFrameBuffer.
|
||
|
||
var headerView = new Uint32Array(encodedFrameBuffer, 0, 16);
|
||
|
||
for (var _i = 0; _i < headerView.length; _i++) {
|
||
headerView[_i] = header[_i];
|
||
}
|
||
|
||
for (var _i2 = 0; _i2 < headerView.length; _i2++) {
|
||
rleArray.push(headerView[_i2]);
|
||
} // Copy rle data into encodedFrameBuffer.
|
||
|
||
|
||
var bodyView = new Uint8Array(encodedFrameBuffer, 64);
|
||
|
||
for (var _i3 = 0; _i3 < rleArray.length; _i3++) {
|
||
bodyView[_i3] = rleArray[_i3];
|
||
}
|
||
|
||
return encodedFrameBuffer;
|
||
}
|
||
|
||
function createHeader() {
|
||
var headerUint32 = new Uint32Array(16);
|
||
headerUint32[0] = 1; // 1 Segment.
|
||
|
||
headerUint32[1] = 64; // Data offset is 64 bytes.
|
||
// Return byte-array version of header:
|
||
|
||
return headerUint32;
|
||
}
|
||
|
||
function getLiteralRunLength(uint8Row, i) {
|
||
for (var l = 0; l < uint8Row.length - i; l++) {
|
||
if (uint8Row[i + l] === uint8Row[i + l + 1] && uint8Row[i + l + 1] === uint8Row[i + l + 2]) {
|
||
return l;
|
||
}
|
||
|
||
if (l === 128) {
|
||
return l;
|
||
}
|
||
}
|
||
|
||
return uint8Row.length - i;
|
||
}
|
||
|
||
function getReplicateRunLength(uint8Row, i) {
|
||
var first = uint8Row[i];
|
||
|
||
for (var l = 1; l < uint8Row.length - i; l++) {
|
||
if (uint8Row[i + l] !== first) {
|
||
return l;
|
||
}
|
||
|
||
if (l === 128) {
|
||
return l;
|
||
}
|
||
}
|
||
|
||
return uint8Row.length - i;
|
||
}
|
||
|
||
function decode(rleEncodedFrames, rows, cols) {
|
||
var pixelData = new Uint8Array(rows * cols * rleEncodedFrames.length);
|
||
var buffer = pixelData.buffer;
|
||
var frameLength = rows * cols;
|
||
|
||
for (var i = 0; i < rleEncodedFrames.length; i++) {
|
||
var rleEncodedFrame = rleEncodedFrames[i];
|
||
var uint8FrameView = new Uint8Array(buffer, i * frameLength, frameLength);
|
||
decodeFrame(rleEncodedFrame, uint8FrameView);
|
||
}
|
||
|
||
return pixelData;
|
||
}
|
||
|
||
function decodeFrame(rleEncodedFrame, pixelData) {
|
||
// Check HEADER:
|
||
var header = new Uint32Array(rleEncodedFrame, 0, 16);
|
||
|
||
if (header[0] !== 1) {
|
||
log.error("rleSingleSamplePerPixel only supports fragments with single Byte Segments (for rle encoded segmentation data) at the current time. This rleEncodedFrame has ".concat(header[0], " Byte Segments."));
|
||
return;
|
||
}
|
||
|
||
if (header[1] !== 64) {
|
||
log.error("Data offset of Byte Segment 1 should be 64 bytes, this rle fragment is encoded incorrectly.");
|
||
return;
|
||
}
|
||
|
||
var uInt8Frame = new Uint8Array(rleEncodedFrame, 64);
|
||
var pixelDataIndex = 0;
|
||
var i = 0;
|
||
|
||
while (pixelDataIndex < pixelData.length) {
|
||
var byteValue = uInt8Frame[i];
|
||
|
||
if (byteValue === undefined) {
|
||
break;
|
||
}
|
||
|
||
if (byteValue <= 127) {
|
||
// TODO -> Interpret the next N+1 bytes literally.
|
||
var N = byteValue + 1;
|
||
var next = i + 1; // Read the next N bytes literally.
|
||
|
||
for (var p = next; p < next + N; p++) {
|
||
pixelData[pixelDataIndex] = uInt8Frame[p];
|
||
pixelDataIndex++;
|
||
}
|
||
|
||
i += N + 1;
|
||
}
|
||
|
||
if (byteValue >= 129) {
|
||
var _N = 257 - byteValue;
|
||
|
||
var _next = i + 1; // Repeat the next byte N times.
|
||
|
||
|
||
for (var _p = 0; _p < _N; _p++) {
|
||
pixelData[pixelDataIndex] = uInt8Frame[_next];
|
||
pixelDataIndex++;
|
||
}
|
||
|
||
i += 2;
|
||
}
|
||
|
||
if (i === uInt8Frame.length) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
var compression = /*#__PURE__*/Object.freeze({
|
||
__proto__: null,
|
||
decode: decode,
|
||
encode: encode
|
||
});
|
||
|
||
var lodash_clonedeep = {exports: {}};
|
||
|
||
/**
|
||
* lodash (Custom Build) <https://lodash.com/>
|
||
* Build: `lodash modularize exports="npm" -o ./`
|
||
* Copyright jQuery Foundation and other contributors <https://jquery.org/>
|
||
* Released under MIT license <https://lodash.com/license>
|
||
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
||
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
||
*/
|
||
lodash_clonedeep.exports;
|
||
|
||
(function (module, exports) {
|
||
/** Used as the size to enable large array optimizations. */
|
||
var LARGE_ARRAY_SIZE = 200;
|
||
|
||
/** Used to stand-in for `undefined` hash values. */
|
||
var HASH_UNDEFINED = '__lodash_hash_undefined__';
|
||
|
||
/** Used as references for various `Number` constants. */
|
||
var MAX_SAFE_INTEGER = 9007199254740991;
|
||
|
||
/** `Object#toString` result references. */
|
||
var argsTag = '[object Arguments]',
|
||
arrayTag = '[object Array]',
|
||
boolTag = '[object Boolean]',
|
||
dateTag = '[object Date]',
|
||
errorTag = '[object Error]',
|
||
funcTag = '[object Function]',
|
||
genTag = '[object GeneratorFunction]',
|
||
mapTag = '[object Map]',
|
||
numberTag = '[object Number]',
|
||
objectTag = '[object Object]',
|
||
promiseTag = '[object Promise]',
|
||
regexpTag = '[object RegExp]',
|
||
setTag = '[object Set]',
|
||
stringTag = '[object String]',
|
||
symbolTag = '[object Symbol]',
|
||
weakMapTag = '[object WeakMap]';
|
||
|
||
var arrayBufferTag = '[object ArrayBuffer]',
|
||
dataViewTag = '[object DataView]',
|
||
float32Tag = '[object Float32Array]',
|
||
float64Tag = '[object Float64Array]',
|
||
int8Tag = '[object Int8Array]',
|
||
int16Tag = '[object Int16Array]',
|
||
int32Tag = '[object Int32Array]',
|
||
uint8Tag = '[object Uint8Array]',
|
||
uint8ClampedTag = '[object Uint8ClampedArray]',
|
||
uint16Tag = '[object Uint16Array]',
|
||
uint32Tag = '[object Uint32Array]';
|
||
|
||
/**
|
||
* Used to match `RegExp`
|
||
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
|
||
*/
|
||
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
|
||
|
||
/** Used to match `RegExp` flags from their coerced string values. */
|
||
var reFlags = /\w*$/;
|
||
|
||
/** Used to detect host constructors (Safari). */
|
||
var reIsHostCtor = /^\[object .+?Constructor\]$/;
|
||
|
||
/** Used to detect unsigned integer values. */
|
||
var reIsUint = /^(?:0|[1-9]\d*)$/;
|
||
|
||
/** Used to identify `toStringTag` values supported by `_.clone`. */
|
||
var cloneableTags = {};
|
||
cloneableTags[argsTag] = cloneableTags[arrayTag] =
|
||
cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
|
||
cloneableTags[boolTag] = cloneableTags[dateTag] =
|
||
cloneableTags[float32Tag] = cloneableTags[float64Tag] =
|
||
cloneableTags[int8Tag] = cloneableTags[int16Tag] =
|
||
cloneableTags[int32Tag] = cloneableTags[mapTag] =
|
||
cloneableTags[numberTag] = cloneableTags[objectTag] =
|
||
cloneableTags[regexpTag] = cloneableTags[setTag] =
|
||
cloneableTags[stringTag] = cloneableTags[symbolTag] =
|
||
cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
|
||
cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
|
||
cloneableTags[errorTag] = cloneableTags[funcTag] =
|
||
cloneableTags[weakMapTag] = false;
|
||
|
||
/** Detect free variable `global` from Node.js. */
|
||
var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
|
||
|
||
/** Detect free variable `self`. */
|
||
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
|
||
|
||
/** Used as a reference to the global object. */
|
||
var root = freeGlobal || freeSelf || Function('return this')();
|
||
|
||
/** Detect free variable `exports`. */
|
||
var freeExports = exports && !exports.nodeType && exports;
|
||
|
||
/** Detect free variable `module`. */
|
||
var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
|
||
|
||
/** Detect the popular CommonJS extension `module.exports`. */
|
||
var moduleExports = freeModule && freeModule.exports === freeExports;
|
||
|
||
/**
|
||
* Adds the key-value `pair` to `map`.
|
||
*
|
||
* @private
|
||
* @param {Object} map The map to modify.
|
||
* @param {Array} pair The key-value pair to add.
|
||
* @returns {Object} Returns `map`.
|
||
*/
|
||
function addMapEntry(map, pair) {
|
||
// Don't return `map.set` because it's not chainable in IE 11.
|
||
map.set(pair[0], pair[1]);
|
||
return map;
|
||
}
|
||
|
||
/**
|
||
* Adds `value` to `set`.
|
||
*
|
||
* @private
|
||
* @param {Object} set The set to modify.
|
||
* @param {*} value The value to add.
|
||
* @returns {Object} Returns `set`.
|
||
*/
|
||
function addSetEntry(set, value) {
|
||
// Don't return `set.add` because it's not chainable in IE 11.
|
||
set.add(value);
|
||
return set;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.forEach` for arrays without support for
|
||
* iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function arrayEach(array, iteratee) {
|
||
var index = -1,
|
||
length = array ? array.length : 0;
|
||
|
||
while (++index < length) {
|
||
if (iteratee(array[index], index, array) === false) {
|
||
break;
|
||
}
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* Appends the elements of `values` to `array`.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to modify.
|
||
* @param {Array} values The values to append.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function arrayPush(array, values) {
|
||
var index = -1,
|
||
length = values.length,
|
||
offset = array.length;
|
||
|
||
while (++index < length) {
|
||
array[offset + index] = values[index];
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.reduce` for arrays without support for
|
||
* iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @param {*} [accumulator] The initial value.
|
||
* @param {boolean} [initAccum] Specify using the first element of `array` as
|
||
* the initial value.
|
||
* @returns {*} Returns the accumulated value.
|
||
*/
|
||
function arrayReduce(array, iteratee, accumulator, initAccum) {
|
||
var index = -1,
|
||
length = array ? array.length : 0;
|
||
|
||
if (initAccum && length) {
|
||
accumulator = array[++index];
|
||
}
|
||
while (++index < length) {
|
||
accumulator = iteratee(accumulator, array[index], index, array);
|
||
}
|
||
return accumulator;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.times` without support for iteratee shorthands
|
||
* or max array length checks.
|
||
*
|
||
* @private
|
||
* @param {number} n The number of times to invoke `iteratee`.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {Array} Returns the array of results.
|
||
*/
|
||
function baseTimes(n, iteratee) {
|
||
var index = -1,
|
||
result = Array(n);
|
||
|
||
while (++index < n) {
|
||
result[index] = iteratee(index);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Gets the value at `key` of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} [object] The object to query.
|
||
* @param {string} key The key of the property to get.
|
||
* @returns {*} Returns the property value.
|
||
*/
|
||
function getValue(object, key) {
|
||
return object == null ? undefined : object[key];
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a host object in IE < 9.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a host object, else `false`.
|
||
*/
|
||
function isHostObject(value) {
|
||
// Many host objects are `Object` objects that can coerce to strings
|
||
// despite having improperly defined `toString` methods.
|
||
var result = false;
|
||
if (value != null && typeof value.toString != 'function') {
|
||
try {
|
||
result = !!(value + '');
|
||
} catch (e) {}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Converts `map` to its key-value pairs.
|
||
*
|
||
* @private
|
||
* @param {Object} map The map to convert.
|
||
* @returns {Array} Returns the key-value pairs.
|
||
*/
|
||
function mapToArray(map) {
|
||
var index = -1,
|
||
result = Array(map.size);
|
||
|
||
map.forEach(function(value, key) {
|
||
result[++index] = [key, value];
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a unary function that invokes `func` with its argument transformed.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to wrap.
|
||
* @param {Function} transform The argument transform.
|
||
* @returns {Function} Returns the new function.
|
||
*/
|
||
function overArg(func, transform) {
|
||
return function(arg) {
|
||
return func(transform(arg));
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Converts `set` to an array of its values.
|
||
*
|
||
* @private
|
||
* @param {Object} set The set to convert.
|
||
* @returns {Array} Returns the values.
|
||
*/
|
||
function setToArray(set) {
|
||
var index = -1,
|
||
result = Array(set.size);
|
||
|
||
set.forEach(function(value) {
|
||
result[++index] = value;
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/** Used for built-in method references. */
|
||
var arrayProto = Array.prototype,
|
||
funcProto = Function.prototype,
|
||
objectProto = Object.prototype;
|
||
|
||
/** Used to detect overreaching core-js shims. */
|
||
var coreJsData = root['__core-js_shared__'];
|
||
|
||
/** Used to detect methods masquerading as native. */
|
||
var maskSrcKey = (function() {
|
||
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
|
||
return uid ? ('Symbol(src)_1.' + uid) : '';
|
||
}());
|
||
|
||
/** Used to resolve the decompiled source of functions. */
|
||
var funcToString = funcProto.toString;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* Used to resolve the
|
||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||
* of values.
|
||
*/
|
||
var objectToString = objectProto.toString;
|
||
|
||
/** Used to detect if a method is native. */
|
||
var reIsNative = RegExp('^' +
|
||
funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
|
||
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
|
||
);
|
||
|
||
/** Built-in value references. */
|
||
var Buffer = moduleExports ? root.Buffer : undefined,
|
||
Symbol = root.Symbol,
|
||
Uint8Array = root.Uint8Array,
|
||
getPrototype = overArg(Object.getPrototypeOf, Object),
|
||
objectCreate = Object.create,
|
||
propertyIsEnumerable = objectProto.propertyIsEnumerable,
|
||
splice = arrayProto.splice;
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeGetSymbols = Object.getOwnPropertySymbols,
|
||
nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
|
||
nativeKeys = overArg(Object.keys, Object);
|
||
|
||
/* Built-in method references that are verified to be native. */
|
||
var DataView = getNative(root, 'DataView'),
|
||
Map = getNative(root, 'Map'),
|
||
Promise = getNative(root, 'Promise'),
|
||
Set = getNative(root, 'Set'),
|
||
WeakMap = getNative(root, 'WeakMap'),
|
||
nativeCreate = getNative(Object, 'create');
|
||
|
||
/** Used to detect maps, sets, and weakmaps. */
|
||
var dataViewCtorString = toSource(DataView),
|
||
mapCtorString = toSource(Map),
|
||
promiseCtorString = toSource(Promise),
|
||
setCtorString = toSource(Set),
|
||
weakMapCtorString = toSource(WeakMap);
|
||
|
||
/** Used to convert symbols to primitives and strings. */
|
||
var symbolProto = Symbol ? Symbol.prototype : undefined,
|
||
symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
|
||
|
||
/**
|
||
* Creates a hash object.
|
||
*
|
||
* @private
|
||
* @constructor
|
||
* @param {Array} [entries] The key-value pairs to cache.
|
||
*/
|
||
function Hash(entries) {
|
||
var index = -1,
|
||
length = entries ? entries.length : 0;
|
||
|
||
this.clear();
|
||
while (++index < length) {
|
||
var entry = entries[index];
|
||
this.set(entry[0], entry[1]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Removes all key-value entries from the hash.
|
||
*
|
||
* @private
|
||
* @name clear
|
||
* @memberOf Hash
|
||
*/
|
||
function hashClear() {
|
||
this.__data__ = nativeCreate ? nativeCreate(null) : {};
|
||
}
|
||
|
||
/**
|
||
* Removes `key` and its value from the hash.
|
||
*
|
||
* @private
|
||
* @name delete
|
||
* @memberOf Hash
|
||
* @param {Object} hash The hash to modify.
|
||
* @param {string} key The key of the value to remove.
|
||
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
||
*/
|
||
function hashDelete(key) {
|
||
return this.has(key) && delete this.__data__[key];
|
||
}
|
||
|
||
/**
|
||
* Gets the hash value for `key`.
|
||
*
|
||
* @private
|
||
* @name get
|
||
* @memberOf Hash
|
||
* @param {string} key The key of the value to get.
|
||
* @returns {*} Returns the entry value.
|
||
*/
|
||
function hashGet(key) {
|
||
var data = this.__data__;
|
||
if (nativeCreate) {
|
||
var result = data[key];
|
||
return result === HASH_UNDEFINED ? undefined : result;
|
||
}
|
||
return hasOwnProperty.call(data, key) ? data[key] : undefined;
|
||
}
|
||
|
||
/**
|
||
* Checks if a hash value for `key` exists.
|
||
*
|
||
* @private
|
||
* @name has
|
||
* @memberOf Hash
|
||
* @param {string} key The key of the entry to check.
|
||
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
||
*/
|
||
function hashHas(key) {
|
||
var data = this.__data__;
|
||
return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
|
||
}
|
||
|
||
/**
|
||
* Sets the hash `key` to `value`.
|
||
*
|
||
* @private
|
||
* @name set
|
||
* @memberOf Hash
|
||
* @param {string} key The key of the value to set.
|
||
* @param {*} value The value to set.
|
||
* @returns {Object} Returns the hash instance.
|
||
*/
|
||
function hashSet(key, value) {
|
||
var data = this.__data__;
|
||
data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
|
||
return this;
|
||
}
|
||
|
||
// Add methods to `Hash`.
|
||
Hash.prototype.clear = hashClear;
|
||
Hash.prototype['delete'] = hashDelete;
|
||
Hash.prototype.get = hashGet;
|
||
Hash.prototype.has = hashHas;
|
||
Hash.prototype.set = hashSet;
|
||
|
||
/**
|
||
* Creates an list cache object.
|
||
*
|
||
* @private
|
||
* @constructor
|
||
* @param {Array} [entries] The key-value pairs to cache.
|
||
*/
|
||
function ListCache(entries) {
|
||
var index = -1,
|
||
length = entries ? entries.length : 0;
|
||
|
||
this.clear();
|
||
while (++index < length) {
|
||
var entry = entries[index];
|
||
this.set(entry[0], entry[1]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Removes all key-value entries from the list cache.
|
||
*
|
||
* @private
|
||
* @name clear
|
||
* @memberOf ListCache
|
||
*/
|
||
function listCacheClear() {
|
||
this.__data__ = [];
|
||
}
|
||
|
||
/**
|
||
* Removes `key` and its value from the list cache.
|
||
*
|
||
* @private
|
||
* @name delete
|
||
* @memberOf ListCache
|
||
* @param {string} key The key of the value to remove.
|
||
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
||
*/
|
||
function listCacheDelete(key) {
|
||
var data = this.__data__,
|
||
index = assocIndexOf(data, key);
|
||
|
||
if (index < 0) {
|
||
return false;
|
||
}
|
||
var lastIndex = data.length - 1;
|
||
if (index == lastIndex) {
|
||
data.pop();
|
||
} else {
|
||
splice.call(data, index, 1);
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Gets the list cache value for `key`.
|
||
*
|
||
* @private
|
||
* @name get
|
||
* @memberOf ListCache
|
||
* @param {string} key The key of the value to get.
|
||
* @returns {*} Returns the entry value.
|
||
*/
|
||
function listCacheGet(key) {
|
||
var data = this.__data__,
|
||
index = assocIndexOf(data, key);
|
||
|
||
return index < 0 ? undefined : data[index][1];
|
||
}
|
||
|
||
/**
|
||
* Checks if a list cache value for `key` exists.
|
||
*
|
||
* @private
|
||
* @name has
|
||
* @memberOf ListCache
|
||
* @param {string} key The key of the entry to check.
|
||
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
||
*/
|
||
function listCacheHas(key) {
|
||
return assocIndexOf(this.__data__, key) > -1;
|
||
}
|
||
|
||
/**
|
||
* Sets the list cache `key` to `value`.
|
||
*
|
||
* @private
|
||
* @name set
|
||
* @memberOf ListCache
|
||
* @param {string} key The key of the value to set.
|
||
* @param {*} value The value to set.
|
||
* @returns {Object} Returns the list cache instance.
|
||
*/
|
||
function listCacheSet(key, value) {
|
||
var data = this.__data__,
|
||
index = assocIndexOf(data, key);
|
||
|
||
if (index < 0) {
|
||
data.push([key, value]);
|
||
} else {
|
||
data[index][1] = value;
|
||
}
|
||
return this;
|
||
}
|
||
|
||
// Add methods to `ListCache`.
|
||
ListCache.prototype.clear = listCacheClear;
|
||
ListCache.prototype['delete'] = listCacheDelete;
|
||
ListCache.prototype.get = listCacheGet;
|
||
ListCache.prototype.has = listCacheHas;
|
||
ListCache.prototype.set = listCacheSet;
|
||
|
||
/**
|
||
* Creates a map cache object to store key-value pairs.
|
||
*
|
||
* @private
|
||
* @constructor
|
||
* @param {Array} [entries] The key-value pairs to cache.
|
||
*/
|
||
function MapCache(entries) {
|
||
var index = -1,
|
||
length = entries ? entries.length : 0;
|
||
|
||
this.clear();
|
||
while (++index < length) {
|
||
var entry = entries[index];
|
||
this.set(entry[0], entry[1]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Removes all key-value entries from the map.
|
||
*
|
||
* @private
|
||
* @name clear
|
||
* @memberOf MapCache
|
||
*/
|
||
function mapCacheClear() {
|
||
this.__data__ = {
|
||
'hash': new Hash,
|
||
'map': new (Map || ListCache),
|
||
'string': new Hash
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Removes `key` and its value from the map.
|
||
*
|
||
* @private
|
||
* @name delete
|
||
* @memberOf MapCache
|
||
* @param {string} key The key of the value to remove.
|
||
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
||
*/
|
||
function mapCacheDelete(key) {
|
||
return getMapData(this, key)['delete'](key);
|
||
}
|
||
|
||
/**
|
||
* Gets the map value for `key`.
|
||
*
|
||
* @private
|
||
* @name get
|
||
* @memberOf MapCache
|
||
* @param {string} key The key of the value to get.
|
||
* @returns {*} Returns the entry value.
|
||
*/
|
||
function mapCacheGet(key) {
|
||
return getMapData(this, key).get(key);
|
||
}
|
||
|
||
/**
|
||
* Checks if a map value for `key` exists.
|
||
*
|
||
* @private
|
||
* @name has
|
||
* @memberOf MapCache
|
||
* @param {string} key The key of the entry to check.
|
||
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
||
*/
|
||
function mapCacheHas(key) {
|
||
return getMapData(this, key).has(key);
|
||
}
|
||
|
||
/**
|
||
* Sets the map `key` to `value`.
|
||
*
|
||
* @private
|
||
* @name set
|
||
* @memberOf MapCache
|
||
* @param {string} key The key of the value to set.
|
||
* @param {*} value The value to set.
|
||
* @returns {Object} Returns the map cache instance.
|
||
*/
|
||
function mapCacheSet(key, value) {
|
||
getMapData(this, key).set(key, value);
|
||
return this;
|
||
}
|
||
|
||
// Add methods to `MapCache`.
|
||
MapCache.prototype.clear = mapCacheClear;
|
||
MapCache.prototype['delete'] = mapCacheDelete;
|
||
MapCache.prototype.get = mapCacheGet;
|
||
MapCache.prototype.has = mapCacheHas;
|
||
MapCache.prototype.set = mapCacheSet;
|
||
|
||
/**
|
||
* Creates a stack cache object to store key-value pairs.
|
||
*
|
||
* @private
|
||
* @constructor
|
||
* @param {Array} [entries] The key-value pairs to cache.
|
||
*/
|
||
function Stack(entries) {
|
||
this.__data__ = new ListCache(entries);
|
||
}
|
||
|
||
/**
|
||
* Removes all key-value entries from the stack.
|
||
*
|
||
* @private
|
||
* @name clear
|
||
* @memberOf Stack
|
||
*/
|
||
function stackClear() {
|
||
this.__data__ = new ListCache;
|
||
}
|
||
|
||
/**
|
||
* Removes `key` and its value from the stack.
|
||
*
|
||
* @private
|
||
* @name delete
|
||
* @memberOf Stack
|
||
* @param {string} key The key of the value to remove.
|
||
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
||
*/
|
||
function stackDelete(key) {
|
||
return this.__data__['delete'](key);
|
||
}
|
||
|
||
/**
|
||
* Gets the stack value for `key`.
|
||
*
|
||
* @private
|
||
* @name get
|
||
* @memberOf Stack
|
||
* @param {string} key The key of the value to get.
|
||
* @returns {*} Returns the entry value.
|
||
*/
|
||
function stackGet(key) {
|
||
return this.__data__.get(key);
|
||
}
|
||
|
||
/**
|
||
* Checks if a stack value for `key` exists.
|
||
*
|
||
* @private
|
||
* @name has
|
||
* @memberOf Stack
|
||
* @param {string} key The key of the entry to check.
|
||
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
||
*/
|
||
function stackHas(key) {
|
||
return this.__data__.has(key);
|
||
}
|
||
|
||
/**
|
||
* Sets the stack `key` to `value`.
|
||
*
|
||
* @private
|
||
* @name set
|
||
* @memberOf Stack
|
||
* @param {string} key The key of the value to set.
|
||
* @param {*} value The value to set.
|
||
* @returns {Object} Returns the stack cache instance.
|
||
*/
|
||
function stackSet(key, value) {
|
||
var cache = this.__data__;
|
||
if (cache instanceof ListCache) {
|
||
var pairs = cache.__data__;
|
||
if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
|
||
pairs.push([key, value]);
|
||
return this;
|
||
}
|
||
cache = this.__data__ = new MapCache(pairs);
|
||
}
|
||
cache.set(key, value);
|
||
return this;
|
||
}
|
||
|
||
// Add methods to `Stack`.
|
||
Stack.prototype.clear = stackClear;
|
||
Stack.prototype['delete'] = stackDelete;
|
||
Stack.prototype.get = stackGet;
|
||
Stack.prototype.has = stackHas;
|
||
Stack.prototype.set = stackSet;
|
||
|
||
/**
|
||
* Creates an array of the enumerable property names of the array-like `value`.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to query.
|
||
* @param {boolean} inherited Specify returning inherited property names.
|
||
* @returns {Array} Returns the array of property names.
|
||
*/
|
||
function arrayLikeKeys(value, inherited) {
|
||
// Safari 8.1 makes `arguments.callee` enumerable in strict mode.
|
||
// Safari 9 makes `arguments.length` enumerable in strict mode.
|
||
var result = (isArray(value) || isArguments(value))
|
||
? baseTimes(value.length, String)
|
||
: [];
|
||
|
||
var length = result.length,
|
||
skipIndexes = !!length;
|
||
|
||
for (var key in value) {
|
||
if ((inherited || hasOwnProperty.call(value, key)) &&
|
||
!(skipIndexes && (key == 'length' || isIndex(key, length)))) {
|
||
result.push(key);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Assigns `value` to `key` of `object` if the existing value is not equivalent
|
||
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* for equality comparisons.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to modify.
|
||
* @param {string} key The key of the property to assign.
|
||
* @param {*} value The value to assign.
|
||
*/
|
||
function assignValue(object, key, value) {
|
||
var objValue = object[key];
|
||
if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
|
||
(value === undefined && !(key in object))) {
|
||
object[key] = value;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Gets the index at which the `key` is found in `array` of key-value pairs.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {*} key The key to search for.
|
||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||
*/
|
||
function assocIndexOf(array, key) {
|
||
var length = array.length;
|
||
while (length--) {
|
||
if (eq(array[length][0], key)) {
|
||
return length;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.assign` without support for multiple sources
|
||
* or `customizer` functions.
|
||
*
|
||
* @private
|
||
* @param {Object} object The destination object.
|
||
* @param {Object} source The source object.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function baseAssign(object, source) {
|
||
return object && copyObject(source, keys(source), object);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.clone` and `_.cloneDeep` which tracks
|
||
* traversed objects.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to clone.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @param {boolean} [isFull] Specify a clone including symbols.
|
||
* @param {Function} [customizer] The function to customize cloning.
|
||
* @param {string} [key] The key of `value`.
|
||
* @param {Object} [object] The parent object of `value`.
|
||
* @param {Object} [stack] Tracks traversed objects and their clone counterparts.
|
||
* @returns {*} Returns the cloned value.
|
||
*/
|
||
function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
|
||
var result;
|
||
if (customizer) {
|
||
result = object ? customizer(value, key, object, stack) : customizer(value);
|
||
}
|
||
if (result !== undefined) {
|
||
return result;
|
||
}
|
||
if (!isObject(value)) {
|
||
return value;
|
||
}
|
||
var isArr = isArray(value);
|
||
if (isArr) {
|
||
result = initCloneArray(value);
|
||
if (!isDeep) {
|
||
return copyArray(value, result);
|
||
}
|
||
} else {
|
||
var tag = getTag(value),
|
||
isFunc = tag == funcTag || tag == genTag;
|
||
|
||
if (isBuffer(value)) {
|
||
return cloneBuffer(value, isDeep);
|
||
}
|
||
if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
|
||
if (isHostObject(value)) {
|
||
return object ? value : {};
|
||
}
|
||
result = initCloneObject(isFunc ? {} : value);
|
||
if (!isDeep) {
|
||
return copySymbols(value, baseAssign(result, value));
|
||
}
|
||
} else {
|
||
if (!cloneableTags[tag]) {
|
||
return object ? value : {};
|
||
}
|
||
result = initCloneByTag(value, tag, baseClone, isDeep);
|
||
}
|
||
}
|
||
// Check for circular references and return its corresponding clone.
|
||
stack || (stack = new Stack);
|
||
var stacked = stack.get(value);
|
||
if (stacked) {
|
||
return stacked;
|
||
}
|
||
stack.set(value, result);
|
||
|
||
if (!isArr) {
|
||
var props = isFull ? getAllKeys(value) : keys(value);
|
||
}
|
||
arrayEach(props || value, function(subValue, key) {
|
||
if (props) {
|
||
key = subValue;
|
||
subValue = value[key];
|
||
}
|
||
// Recursively populate clone (susceptible to call stack limits).
|
||
assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.create` without support for assigning
|
||
* properties to the created object.
|
||
*
|
||
* @private
|
||
* @param {Object} prototype The object to inherit from.
|
||
* @returns {Object} Returns the new object.
|
||
*/
|
||
function baseCreate(proto) {
|
||
return isObject(proto) ? objectCreate(proto) : {};
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `getAllKeys` and `getAllKeysIn` which uses
|
||
* `keysFunc` and `symbolsFunc` to get the enumerable property names and
|
||
* symbols of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @param {Function} keysFunc The function to get the keys of `object`.
|
||
* @param {Function} symbolsFunc The function to get the symbols of `object`.
|
||
* @returns {Array} Returns the array of property names and symbols.
|
||
*/
|
||
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
|
||
var result = keysFunc(object);
|
||
return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `getTag`.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to query.
|
||
* @returns {string} Returns the `toStringTag`.
|
||
*/
|
||
function baseGetTag(value) {
|
||
return objectToString.call(value);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isNative` without bad shim checks.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a native function,
|
||
* else `false`.
|
||
*/
|
||
function baseIsNative(value) {
|
||
if (!isObject(value) || isMasked(value)) {
|
||
return false;
|
||
}
|
||
var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
|
||
return pattern.test(toSource(value));
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property names.
|
||
*/
|
||
function baseKeys(object) {
|
||
if (!isPrototype(object)) {
|
||
return nativeKeys(object);
|
||
}
|
||
var result = [];
|
||
for (var key in Object(object)) {
|
||
if (hasOwnProperty.call(object, key) && key != 'constructor') {
|
||
result.push(key);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `buffer`.
|
||
*
|
||
* @private
|
||
* @param {Buffer} buffer The buffer to clone.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Buffer} Returns the cloned buffer.
|
||
*/
|
||
function cloneBuffer(buffer, isDeep) {
|
||
if (isDeep) {
|
||
return buffer.slice();
|
||
}
|
||
var result = new buffer.constructor(buffer.length);
|
||
buffer.copy(result);
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `arrayBuffer`.
|
||
*
|
||
* @private
|
||
* @param {ArrayBuffer} arrayBuffer The array buffer to clone.
|
||
* @returns {ArrayBuffer} Returns the cloned array buffer.
|
||
*/
|
||
function cloneArrayBuffer(arrayBuffer) {
|
||
var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
|
||
new Uint8Array(result).set(new Uint8Array(arrayBuffer));
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `dataView`.
|
||
*
|
||
* @private
|
||
* @param {Object} dataView The data view to clone.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Object} Returns the cloned data view.
|
||
*/
|
||
function cloneDataView(dataView, isDeep) {
|
||
var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
|
||
return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `map`.
|
||
*
|
||
* @private
|
||
* @param {Object} map The map to clone.
|
||
* @param {Function} cloneFunc The function to clone values.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Object} Returns the cloned map.
|
||
*/
|
||
function cloneMap(map, isDeep, cloneFunc) {
|
||
var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);
|
||
return arrayReduce(array, addMapEntry, new map.constructor);
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `regexp`.
|
||
*
|
||
* @private
|
||
* @param {Object} regexp The regexp to clone.
|
||
* @returns {Object} Returns the cloned regexp.
|
||
*/
|
||
function cloneRegExp(regexp) {
|
||
var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
|
||
result.lastIndex = regexp.lastIndex;
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `set`.
|
||
*
|
||
* @private
|
||
* @param {Object} set The set to clone.
|
||
* @param {Function} cloneFunc The function to clone values.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Object} Returns the cloned set.
|
||
*/
|
||
function cloneSet(set, isDeep, cloneFunc) {
|
||
var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);
|
||
return arrayReduce(array, addSetEntry, new set.constructor);
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of the `symbol` object.
|
||
*
|
||
* @private
|
||
* @param {Object} symbol The symbol object to clone.
|
||
* @returns {Object} Returns the cloned symbol object.
|
||
*/
|
||
function cloneSymbol(symbol) {
|
||
return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `typedArray`.
|
||
*
|
||
* @private
|
||
* @param {Object} typedArray The typed array to clone.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Object} Returns the cloned typed array.
|
||
*/
|
||
function cloneTypedArray(typedArray, isDeep) {
|
||
var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
|
||
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
|
||
}
|
||
|
||
/**
|
||
* Copies the values of `source` to `array`.
|
||
*
|
||
* @private
|
||
* @param {Array} source The array to copy values from.
|
||
* @param {Array} [array=[]] The array to copy values to.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function copyArray(source, array) {
|
||
var index = -1,
|
||
length = source.length;
|
||
|
||
array || (array = Array(length));
|
||
while (++index < length) {
|
||
array[index] = source[index];
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* Copies properties of `source` to `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} source The object to copy properties from.
|
||
* @param {Array} props The property identifiers to copy.
|
||
* @param {Object} [object={}] The object to copy properties to.
|
||
* @param {Function} [customizer] The function to customize copied values.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function copyObject(source, props, object, customizer) {
|
||
object || (object = {});
|
||
|
||
var index = -1,
|
||
length = props.length;
|
||
|
||
while (++index < length) {
|
||
var key = props[index];
|
||
|
||
var newValue = customizer
|
||
? customizer(object[key], source[key], key, object, source)
|
||
: undefined;
|
||
|
||
assignValue(object, key, newValue === undefined ? source[key] : newValue);
|
||
}
|
||
return object;
|
||
}
|
||
|
||
/**
|
||
* Copies own symbol properties of `source` to `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} source The object to copy symbols from.
|
||
* @param {Object} [object={}] The object to copy symbols to.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function copySymbols(source, object) {
|
||
return copyObject(source, getSymbols(source), object);
|
||
}
|
||
|
||
/**
|
||
* Creates an array of own enumerable property names and symbols of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property names and symbols.
|
||
*/
|
||
function getAllKeys(object) {
|
||
return baseGetAllKeys(object, keys, getSymbols);
|
||
}
|
||
|
||
/**
|
||
* Gets the data for `map`.
|
||
*
|
||
* @private
|
||
* @param {Object} map The map to query.
|
||
* @param {string} key The reference key.
|
||
* @returns {*} Returns the map data.
|
||
*/
|
||
function getMapData(map, key) {
|
||
var data = map.__data__;
|
||
return isKeyable(key)
|
||
? data[typeof key == 'string' ? 'string' : 'hash']
|
||
: data.map;
|
||
}
|
||
|
||
/**
|
||
* Gets the native function at `key` of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @param {string} key The key of the method to get.
|
||
* @returns {*} Returns the function if it's native, else `undefined`.
|
||
*/
|
||
function getNative(object, key) {
|
||
var value = getValue(object, key);
|
||
return baseIsNative(value) ? value : undefined;
|
||
}
|
||
|
||
/**
|
||
* Creates an array of the own enumerable symbol properties of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of symbols.
|
||
*/
|
||
var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;
|
||
|
||
/**
|
||
* Gets the `toStringTag` of `value`.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to query.
|
||
* @returns {string} Returns the `toStringTag`.
|
||
*/
|
||
var getTag = baseGetTag;
|
||
|
||
// Fallback for data views, maps, sets, and weak maps in IE 11,
|
||
// for data views in Edge < 14, and promises in Node.js.
|
||
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
|
||
(Map && getTag(new Map) != mapTag) ||
|
||
(Promise && getTag(Promise.resolve()) != promiseTag) ||
|
||
(Set && getTag(new Set) != setTag) ||
|
||
(WeakMap && getTag(new WeakMap) != weakMapTag)) {
|
||
getTag = function(value) {
|
||
var result = objectToString.call(value),
|
||
Ctor = result == objectTag ? value.constructor : undefined,
|
||
ctorString = Ctor ? toSource(Ctor) : undefined;
|
||
|
||
if (ctorString) {
|
||
switch (ctorString) {
|
||
case dataViewCtorString: return dataViewTag;
|
||
case mapCtorString: return mapTag;
|
||
case promiseCtorString: return promiseTag;
|
||
case setCtorString: return setTag;
|
||
case weakMapCtorString: return weakMapTag;
|
||
}
|
||
}
|
||
return result;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Initializes an array clone.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to clone.
|
||
* @returns {Array} Returns the initialized clone.
|
||
*/
|
||
function initCloneArray(array) {
|
||
var length = array.length,
|
||
result = array.constructor(length);
|
||
|
||
// Add properties assigned by `RegExp#exec`.
|
||
if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
|
||
result.index = array.index;
|
||
result.input = array.input;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Initializes an object clone.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to clone.
|
||
* @returns {Object} Returns the initialized clone.
|
||
*/
|
||
function initCloneObject(object) {
|
||
return (typeof object.constructor == 'function' && !isPrototype(object))
|
||
? baseCreate(getPrototype(object))
|
||
: {};
|
||
}
|
||
|
||
/**
|
||
* Initializes an object clone based on its `toStringTag`.
|
||
*
|
||
* **Note:** This function only supports cloning values with tags of
|
||
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to clone.
|
||
* @param {string} tag The `toStringTag` of the object to clone.
|
||
* @param {Function} cloneFunc The function to clone values.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Object} Returns the initialized clone.
|
||
*/
|
||
function initCloneByTag(object, tag, cloneFunc, isDeep) {
|
||
var Ctor = object.constructor;
|
||
switch (tag) {
|
||
case arrayBufferTag:
|
||
return cloneArrayBuffer(object);
|
||
|
||
case boolTag:
|
||
case dateTag:
|
||
return new Ctor(+object);
|
||
|
||
case dataViewTag:
|
||
return cloneDataView(object, isDeep);
|
||
|
||
case float32Tag: case float64Tag:
|
||
case int8Tag: case int16Tag: case int32Tag:
|
||
case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
|
||
return cloneTypedArray(object, isDeep);
|
||
|
||
case mapTag:
|
||
return cloneMap(object, isDeep, cloneFunc);
|
||
|
||
case numberTag:
|
||
case stringTag:
|
||
return new Ctor(object);
|
||
|
||
case regexpTag:
|
||
return cloneRegExp(object);
|
||
|
||
case setTag:
|
||
return cloneSet(object, isDeep, cloneFunc);
|
||
|
||
case symbolTag:
|
||
return cloneSymbol(object);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a valid array-like index.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
|
||
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
|
||
*/
|
||
function isIndex(value, length) {
|
||
length = length == null ? MAX_SAFE_INTEGER : length;
|
||
return !!length &&
|
||
(typeof value == 'number' || reIsUint.test(value)) &&
|
||
(value > -1 && value % 1 == 0 && value < length);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is suitable for use as unique object key.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
|
||
*/
|
||
function isKeyable(value) {
|
||
var type = typeof value;
|
||
return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
|
||
? (value !== '__proto__')
|
||
: (value === null);
|
||
}
|
||
|
||
/**
|
||
* Checks if `func` has its source masked.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to check.
|
||
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
|
||
*/
|
||
function isMasked(func) {
|
||
return !!maskSrcKey && (maskSrcKey in func);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is likely a prototype object.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
|
||
*/
|
||
function isPrototype(value) {
|
||
var Ctor = value && value.constructor,
|
||
proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
|
||
|
||
return value === proto;
|
||
}
|
||
|
||
/**
|
||
* Converts `func` to its source code.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to process.
|
||
* @returns {string} Returns the source code.
|
||
*/
|
||
function toSource(func) {
|
||
if (func != null) {
|
||
try {
|
||
return funcToString.call(func);
|
||
} catch (e) {}
|
||
try {
|
||
return (func + '');
|
||
} catch (e) {}
|
||
}
|
||
return '';
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.clone` except that it recursively clones `value`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 1.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to recursively clone.
|
||
* @returns {*} Returns the deep cloned value.
|
||
* @see _.clone
|
||
* @example
|
||
*
|
||
* var objects = [{ 'a': 1 }, { 'b': 2 }];
|
||
*
|
||
* var deep = _.cloneDeep(objects);
|
||
* console.log(deep[0] === objects[0]);
|
||
* // => false
|
||
*/
|
||
function cloneDeep(value) {
|
||
return baseClone(value, true, true);
|
||
}
|
||
|
||
/**
|
||
* Performs a
|
||
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* comparison between two values to determine if they are equivalent.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1 };
|
||
* var other = { 'a': 1 };
|
||
*
|
||
* _.eq(object, object);
|
||
* // => true
|
||
*
|
||
* _.eq(object, other);
|
||
* // => false
|
||
*
|
||
* _.eq('a', 'a');
|
||
* // => true
|
||
*
|
||
* _.eq('a', Object('a'));
|
||
* // => false
|
||
*
|
||
* _.eq(NaN, NaN);
|
||
* // => true
|
||
*/
|
||
function eq(value, other) {
|
||
return value === other || (value !== value && other !== other);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is likely an `arguments` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an `arguments` object,
|
||
* else `false`.
|
||
* @example
|
||
*
|
||
* _.isArguments(function() { return arguments; }());
|
||
* // => true
|
||
*
|
||
* _.isArguments([1, 2, 3]);
|
||
* // => false
|
||
*/
|
||
function isArguments(value) {
|
||
// Safari 8.1 makes `arguments.callee` enumerable in strict mode.
|
||
return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
|
||
(!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is classified as an `Array` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an array, else `false`.
|
||
* @example
|
||
*
|
||
* _.isArray([1, 2, 3]);
|
||
* // => true
|
||
*
|
||
* _.isArray(document.body.children);
|
||
* // => false
|
||
*
|
||
* _.isArray('abc');
|
||
* // => false
|
||
*
|
||
* _.isArray(_.noop);
|
||
* // => false
|
||
*/
|
||
var isArray = Array.isArray;
|
||
|
||
/**
|
||
* Checks if `value` is array-like. A value is considered array-like if it's
|
||
* not a function and has a `value.length` that's an integer greater than or
|
||
* equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is array-like, else `false`.
|
||
* @example
|
||
*
|
||
* _.isArrayLike([1, 2, 3]);
|
||
* // => true
|
||
*
|
||
* _.isArrayLike(document.body.children);
|
||
* // => true
|
||
*
|
||
* _.isArrayLike('abc');
|
||
* // => true
|
||
*
|
||
* _.isArrayLike(_.noop);
|
||
* // => false
|
||
*/
|
||
function isArrayLike(value) {
|
||
return value != null && isLength(value.length) && !isFunction(value);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.isArrayLike` except that it also checks if `value`
|
||
* is an object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an array-like object,
|
||
* else `false`.
|
||
* @example
|
||
*
|
||
* _.isArrayLikeObject([1, 2, 3]);
|
||
* // => true
|
||
*
|
||
* _.isArrayLikeObject(document.body.children);
|
||
* // => true
|
||
*
|
||
* _.isArrayLikeObject('abc');
|
||
* // => false
|
||
*
|
||
* _.isArrayLikeObject(_.noop);
|
||
* // => false
|
||
*/
|
||
function isArrayLikeObject(value) {
|
||
return isObjectLike(value) && isArrayLike(value);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a buffer.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.3.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
|
||
* @example
|
||
*
|
||
* _.isBuffer(new Buffer(2));
|
||
* // => true
|
||
*
|
||
* _.isBuffer(new Uint8Array(2));
|
||
* // => false
|
||
*/
|
||
var isBuffer = nativeIsBuffer || stubFalse;
|
||
|
||
/**
|
||
* Checks if `value` is classified as a `Function` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
|
||
* @example
|
||
*
|
||
* _.isFunction(_);
|
||
* // => true
|
||
*
|
||
* _.isFunction(/abc/);
|
||
* // => false
|
||
*/
|
||
function isFunction(value) {
|
||
// The use of `Object#toString` avoids issues with the `typeof` operator
|
||
// in Safari 8-9 which returns 'object' for typed array and other constructors.
|
||
var tag = isObject(value) ? objectToString.call(value) : '';
|
||
return tag == funcTag || tag == genTag;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a valid array-like length.
|
||
*
|
||
* **Note:** This method is loosely based on
|
||
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
|
||
* @example
|
||
*
|
||
* _.isLength(3);
|
||
* // => true
|
||
*
|
||
* _.isLength(Number.MIN_VALUE);
|
||
* // => false
|
||
*
|
||
* _.isLength(Infinity);
|
||
* // => false
|
||
*
|
||
* _.isLength('3');
|
||
* // => false
|
||
*/
|
||
function isLength(value) {
|
||
return typeof value == 'number' &&
|
||
value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is the
|
||
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
|
||
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
|
||
* @example
|
||
*
|
||
* _.isObject({});
|
||
* // => true
|
||
*
|
||
* _.isObject([1, 2, 3]);
|
||
* // => true
|
||
*
|
||
* _.isObject(_.noop);
|
||
* // => true
|
||
*
|
||
* _.isObject(null);
|
||
* // => false
|
||
*/
|
||
function isObject(value) {
|
||
var type = typeof value;
|
||
return !!value && (type == 'object' || type == 'function');
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is object-like. A value is object-like if it's not `null`
|
||
* and has a `typeof` result of "object".
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
|
||
* @example
|
||
*
|
||
* _.isObjectLike({});
|
||
* // => true
|
||
*
|
||
* _.isObjectLike([1, 2, 3]);
|
||
* // => true
|
||
*
|
||
* _.isObjectLike(_.noop);
|
||
* // => false
|
||
*
|
||
* _.isObjectLike(null);
|
||
* // => false
|
||
*/
|
||
function isObjectLike(value) {
|
||
return !!value && typeof value == 'object';
|
||
}
|
||
|
||
/**
|
||
* Creates an array of the own enumerable property names of `object`.
|
||
*
|
||
* **Note:** Non-object values are coerced to objects. See the
|
||
* [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
|
||
* for more details.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property names.
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.keys(new Foo);
|
||
* // => ['a', 'b'] (iteration order is not guaranteed)
|
||
*
|
||
* _.keys('hi');
|
||
* // => ['0', '1']
|
||
*/
|
||
function keys(object) {
|
||
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
|
||
}
|
||
|
||
/**
|
||
* This method returns a new empty array.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.13.0
|
||
* @category Util
|
||
* @returns {Array} Returns the new empty array.
|
||
* @example
|
||
*
|
||
* var arrays = _.times(2, _.stubArray);
|
||
*
|
||
* console.log(arrays);
|
||
* // => [[], []]
|
||
*
|
||
* console.log(arrays[0] === arrays[1]);
|
||
* // => false
|
||
*/
|
||
function stubArray() {
|
||
return [];
|
||
}
|
||
|
||
/**
|
||
* This method returns `false`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.13.0
|
||
* @category Util
|
||
* @returns {boolean} Returns `false`.
|
||
* @example
|
||
*
|
||
* _.times(2, _.stubFalse);
|
||
* // => [false, false]
|
||
*/
|
||
function stubFalse() {
|
||
return false;
|
||
}
|
||
|
||
module.exports = cloneDeep;
|
||
} (lodash_clonedeep, lodash_clonedeep.exports));
|
||
|
||
var lodash_clonedeepExports = lodash_clonedeep.exports;
|
||
var cloneDeep = /*@__PURE__*/getDefaultExportFromCjs(lodash_clonedeepExports);
|
||
|
||
var Segmentation$2 = {
|
||
generateSegmentation: generateSegmentation$1,
|
||
generateToolState: generateToolState$1,
|
||
fillSegmentation: fillSegmentation$1
|
||
};
|
||
/**
|
||
*
|
||
* @typedef {Object} BrushData
|
||
* @property {Object} toolState - The cornerstoneTools global toolState.
|
||
* @property {Object[]} segments - The cornerstoneTools segment metadata that corresponds to the
|
||
* seriesInstanceUid.
|
||
*/
|
||
|
||
var generateSegmentationDefaultOptions = {
|
||
includeSliceSpacing: true,
|
||
rleEncode: true
|
||
};
|
||
/**
|
||
* generateSegmentation - Generates cornerstoneTools brush data, given a stack of
|
||
* imageIds, images and the cornerstoneTools brushData.
|
||
*
|
||
* @param {object[]} images An array of cornerstone images that contain the source
|
||
* data under `image.data.byteArray.buffer`.
|
||
* @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.
|
||
* @param {Object} userOptions Options to pass to the segmentation derivation and `fillSegmentation`.
|
||
* @returns {Blob}
|
||
*/
|
||
|
||
function generateSegmentation$1(images, inputLabelmaps3D) {
|
||
var userOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||
var isMultiframe = images[0].imageId.includes("?frame");
|
||
|
||
var segmentation = _createSegFromImages(images, isMultiframe, userOptions);
|
||
|
||
return fillSegmentation$1(segmentation, inputLabelmaps3D, userOptions);
|
||
}
|
||
/**
|
||
* fillSegmentation - Fills a derived segmentation dataset with cornerstoneTools `LabelMap3D` data.
|
||
*
|
||
* @param {object[]} segmentation An empty segmentation derived dataset.
|
||
* @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.
|
||
* @param {Object} userOptions Options object to override default options.
|
||
* @returns {Blob} description
|
||
*/
|
||
|
||
|
||
function fillSegmentation$1(segmentation, inputLabelmaps3D) {
|
||
var userOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||
var options = Object.assign({}, generateSegmentationDefaultOptions, userOptions); // Use another variable so we don't redefine labelmaps3D.
|
||
|
||
var labelmaps3D = Array.isArray(inputLabelmaps3D) ? inputLabelmaps3D : [inputLabelmaps3D];
|
||
var numberOfFrames = 0;
|
||
var referencedFramesPerLabelmap = [];
|
||
|
||
var _loop = function _loop(labelmapIndex) {
|
||
var labelmap3D = labelmaps3D[labelmapIndex];
|
||
var labelmaps2D = labelmap3D.labelmaps2D,
|
||
metadata = labelmap3D.metadata;
|
||
var referencedFramesPerSegment = [];
|
||
|
||
for (var i = 1; i < metadata.length; i++) {
|
||
if (metadata[i]) {
|
||
referencedFramesPerSegment[i] = [];
|
||
}
|
||
}
|
||
|
||
var _loop2 = function _loop2(_i) {
|
||
var labelmap2D = labelmaps2D[_i];
|
||
|
||
if (labelmaps2D[_i]) {
|
||
var segmentsOnLabelmap = labelmap2D.segmentsOnLabelmap;
|
||
segmentsOnLabelmap.forEach(function (segmentIndex) {
|
||
if (segmentIndex !== 0) {
|
||
referencedFramesPerSegment[segmentIndex].push(_i);
|
||
numberOfFrames++;
|
||
}
|
||
});
|
||
}
|
||
};
|
||
|
||
for (var _i = 0; _i < labelmaps2D.length; _i++) {
|
||
_loop2(_i);
|
||
}
|
||
|
||
referencedFramesPerLabelmap[labelmapIndex] = referencedFramesPerSegment;
|
||
};
|
||
|
||
for (var labelmapIndex = 0; labelmapIndex < labelmaps3D.length; labelmapIndex++) {
|
||
_loop(labelmapIndex);
|
||
}
|
||
|
||
segmentation.setNumberOfFrames(numberOfFrames);
|
||
|
||
for (var _labelmapIndex = 0; _labelmapIndex < labelmaps3D.length; _labelmapIndex++) {
|
||
var referencedFramesPerSegment = referencedFramesPerLabelmap[_labelmapIndex];
|
||
var labelmap3D = labelmaps3D[_labelmapIndex];
|
||
var metadata = labelmap3D.metadata;
|
||
|
||
for (var segmentIndex = 1; segmentIndex < referencedFramesPerSegment.length; segmentIndex++) {
|
||
var referencedFrameIndicies = referencedFramesPerSegment[segmentIndex];
|
||
|
||
if (referencedFrameIndicies) {
|
||
// Frame numbers start from 1.
|
||
var referencedFrameNumbers = referencedFrameIndicies.map(function (element) {
|
||
return element + 1;
|
||
});
|
||
var segmentMetadata = metadata[segmentIndex];
|
||
|
||
var labelmaps = _getLabelmapsFromRefernecedFrameIndicies(labelmap3D, referencedFrameIndicies);
|
||
|
||
segmentation.addSegmentFromLabelmap(segmentMetadata, labelmaps, segmentIndex, referencedFrameNumbers);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (options.rleEncode) {
|
||
var rleEncodedFrames = encode(segmentation.dataset.PixelData, numberOfFrames, segmentation.dataset.Rows, segmentation.dataset.Columns); // Must use fractional now to RLE encode, as the DICOM standard only allows BitStored && BitsAllocated
|
||
// to be 1 for BINARY. This is not ideal and there should be a better format for compression in this manner
|
||
// added to the standard.
|
||
|
||
segmentation.assignToDataset({
|
||
BitsAllocated: "8",
|
||
BitsStored: "8",
|
||
HighBit: "7",
|
||
SegmentationType: "FRACTIONAL",
|
||
SegmentationFractionalType: "PROBABILITY",
|
||
MaximumFractionalValue: "255"
|
||
});
|
||
segmentation.dataset._meta.TransferSyntaxUID = {
|
||
Value: ["1.2.840.10008.1.2.5"],
|
||
vr: "UI"
|
||
};
|
||
segmentation.dataset._vrMap.PixelData = "OB";
|
||
segmentation.dataset.PixelData = rleEncodedFrames;
|
||
} else {
|
||
// If no rleEncoding, at least bitpack the data.
|
||
segmentation.bitPackPixelData();
|
||
}
|
||
|
||
var segBlob = datasetToBlob(segmentation.dataset);
|
||
return segBlob;
|
||
}
|
||
|
||
function _getLabelmapsFromRefernecedFrameIndicies(labelmap3D, referencedFrameIndicies) {
|
||
var labelmaps2D = labelmap3D.labelmaps2D;
|
||
var labelmaps = [];
|
||
|
||
for (var i = 0; i < referencedFrameIndicies.length; i++) {
|
||
var frame = referencedFrameIndicies[i];
|
||
labelmaps.push(labelmaps2D[frame].pixelData);
|
||
}
|
||
|
||
return labelmaps;
|
||
}
|
||
/**
|
||
* _createSegFromImages - description
|
||
*
|
||
* @param {Object[]} images An array of the cornerstone image objects.
|
||
* @param {Boolean} isMultiframe Whether the images are multiframe.
|
||
* @returns {Object} The Seg derived dataSet.
|
||
*/
|
||
|
||
|
||
function _createSegFromImages(images, isMultiframe, options) {
|
||
var datasets = [];
|
||
|
||
if (isMultiframe) {
|
||
var image = images[0];
|
||
var arrayBuffer = image.data.byteArray.buffer;
|
||
var dicomData = DicomMessage.readFile(arrayBuffer);
|
||
var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
|
||
dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
|
||
datasets.push(dataset);
|
||
} else {
|
||
for (var i = 0; i < images.length; i++) {
|
||
var _image = images[i];
|
||
var _arrayBuffer = _image.data.byteArray.buffer;
|
||
|
||
var _dicomData = DicomMessage.readFile(_arrayBuffer);
|
||
|
||
var _dataset = DicomMetaDictionary.naturalizeDataset(_dicomData.dict);
|
||
|
||
_dataset._meta = DicomMetaDictionary.namifyDataset(_dicomData.meta);
|
||
datasets.push(_dataset);
|
||
}
|
||
}
|
||
|
||
var multiframe = Normalizer.normalizeToDataset(datasets);
|
||
return new Segmentation$4([multiframe], options);
|
||
}
|
||
/**
|
||
* generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,
|
||
* derive cornerstoneTools toolState and brush metadata.
|
||
*
|
||
* @param {string[]} imageIds - An array of the imageIds.
|
||
* @param {ArrayBuffer} arrayBuffer - The SEG arrayBuffer.
|
||
* @param {*} metadataProvider.
|
||
* @param {bool} skipOverlapping - skip checks for overlapping segs, default value false.
|
||
* @param {number} tolerance - default value 1.e-3.
|
||
*
|
||
* @return {[]ArrayBuffer}a list of array buffer for each labelMap
|
||
* @return {Object} an object from which the segment metadata can be derived
|
||
* @return {[][][]} 2D list containing the track of segments per frame
|
||
* @return {[][][]} 3D list containing the track of segments per frame for each labelMap
|
||
* (available only for the overlapping case).
|
||
*/
|
||
|
||
|
||
function generateToolState$1(imageIds, arrayBuffer, metadataProvider) {
|
||
var skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
||
var tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;
|
||
var dicomData = DicomMessage.readFile(arrayBuffer);
|
||
var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
|
||
dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
|
||
var multiframe = Normalizer.normalizeToDataset([dataset]);
|
||
var imagePlaneModule = metadataProvider.get("imagePlaneModule", imageIds[0]);
|
||
var generalSeriesModule = metadataProvider.get("generalSeriesModule", imageIds[0]);
|
||
var SeriesInstanceUID = generalSeriesModule.seriesInstanceUID;
|
||
|
||
if (!imagePlaneModule) {
|
||
console.warn("Insufficient metadata, imagePlaneModule missing.");
|
||
}
|
||
|
||
var ImageOrientationPatient = Array.isArray(imagePlaneModule.rowCosines) ? [].concat(_toConsumableArray(imagePlaneModule.rowCosines), _toConsumableArray(imagePlaneModule.columnCosines)) : [imagePlaneModule.rowCosines.x, imagePlaneModule.rowCosines.y, imagePlaneModule.rowCosines.z, imagePlaneModule.columnCosines.x, imagePlaneModule.columnCosines.y, imagePlaneModule.columnCosines.z]; // Get IOP from ref series, compute supported orientations:
|
||
|
||
var validOrientations = getValidOrientations(ImageOrientationPatient);
|
||
var sliceLength = multiframe.Columns * multiframe.Rows;
|
||
var segMetadata = getSegmentMetadata(multiframe, SeriesInstanceUID);
|
||
var TransferSyntaxUID = multiframe._meta.TransferSyntaxUID.Value[0];
|
||
var pixelData;
|
||
|
||
if (TransferSyntaxUID === "1.2.840.10008.1.2.5") {
|
||
var rleEncodedFrames = Array.isArray(multiframe.PixelData) ? multiframe.PixelData : [multiframe.PixelData];
|
||
pixelData = decode(rleEncodedFrames, multiframe.Rows, multiframe.Columns);
|
||
|
||
if (multiframe.BitsStored === 1) {
|
||
console.warn("No implementation for rle + bitbacking.");
|
||
return;
|
||
}
|
||
} else {
|
||
pixelData = unpackPixelData(multiframe);
|
||
|
||
if (!pixelData) {
|
||
throw new Error("Fractional segmentations are not yet supported");
|
||
}
|
||
}
|
||
|
||
var orientation = checkOrientation(multiframe, validOrientations, [imagePlaneModule.rows, imagePlaneModule.columns, imageIds.length], tolerance);
|
||
var overlapping = false;
|
||
|
||
if (!skipOverlapping) {
|
||
overlapping = checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance);
|
||
}
|
||
|
||
var insertFunction;
|
||
|
||
switch (orientation) {
|
||
case "Planar":
|
||
if (overlapping) {
|
||
insertFunction = insertOverlappingPixelDataPlanar;
|
||
} else {
|
||
insertFunction = insertPixelDataPlanar;
|
||
}
|
||
|
||
break;
|
||
|
||
case "Perpendicular":
|
||
//insertFunction = insertPixelDataPerpendicular;
|
||
throw new Error("Segmentations orthogonal to the acquisition plane of the source data are not yet supported.");
|
||
|
||
case "Oblique":
|
||
throw new Error("Segmentations oblique to the acquisition plane of the source data are not yet supported.");
|
||
}
|
||
/* if SEGs are overlapping:
|
||
1) the labelmapBuffer will contain M volumes which have non-overlapping segments;
|
||
2) segmentsOnFrame will have M * numberOfFrames values to track in which labelMap are the segments;
|
||
3) insertFunction will return the number of LabelMaps
|
||
4) generateToolState return is an array*/
|
||
|
||
|
||
var segmentsOnFrameArray = [];
|
||
segmentsOnFrameArray[0] = [];
|
||
var segmentsOnFrame = [];
|
||
var arrayBufferLength = sliceLength * imageIds.length * 2; // 2 bytes per label voxel in cst4.
|
||
|
||
var labelmapBufferArray = [];
|
||
labelmapBufferArray[0] = new ArrayBuffer(arrayBufferLength);
|
||
insertFunction(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance);
|
||
return {
|
||
labelmapBufferArray: labelmapBufferArray,
|
||
segMetadata: segMetadata,
|
||
segmentsOnFrame: segmentsOnFrame,
|
||
segmentsOnFrameArray: segmentsOnFrameArray
|
||
};
|
||
}
|
||
/**
|
||
* Find the reference frame of the segmentation frame in the source data.
|
||
*
|
||
* @param {Object} multiframe dicom metadata
|
||
* @param {Int} frameSegment frame dicom index
|
||
* @param {String[]} imageIds A list of imageIds.
|
||
* @param {Object} metadataProvider A Cornerstone metadataProvider to query
|
||
* metadata from imageIds.
|
||
* @param {Float} tolerance The tolerance parameter
|
||
*
|
||
* @returns {String} Returns the imageId
|
||
*/
|
||
|
||
|
||
function findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadataProvider, tolerance) {
|
||
var imageId = undefined;
|
||
|
||
if (!multiframe) {
|
||
return imageId;
|
||
}
|
||
|
||
var FrameOfReferenceUID = multiframe.FrameOfReferenceUID,
|
||
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
||
SourceImageSequence = multiframe.SourceImageSequence,
|
||
ReferencedSeriesSequence = multiframe.ReferencedSeriesSequence;
|
||
|
||
if (!PerFrameFunctionalGroupsSequence || PerFrameFunctionalGroupsSequence.length === 0) {
|
||
return imageId;
|
||
}
|
||
|
||
var PerFrameFunctionalGroup = PerFrameFunctionalGroupsSequence[frameSegment];
|
||
|
||
if (!PerFrameFunctionalGroup) {
|
||
return imageId;
|
||
}
|
||
|
||
var frameSourceImageSequence = undefined;
|
||
|
||
if (SourceImageSequence && SourceImageSequence.length !== 0) {
|
||
frameSourceImageSequence = SourceImageSequence[frameSegment];
|
||
} else if (PerFrameFunctionalGroup.DerivationImageSequence) {
|
||
var DerivationImageSequence = PerFrameFunctionalGroup.DerivationImageSequence;
|
||
|
||
if (Array.isArray(DerivationImageSequence)) {
|
||
if (DerivationImageSequence.length !== 0) {
|
||
DerivationImageSequence = DerivationImageSequence[0];
|
||
} else {
|
||
DerivationImageSequence = undefined;
|
||
}
|
||
}
|
||
|
||
if (DerivationImageSequence) {
|
||
frameSourceImageSequence = DerivationImageSequence.SourceImageSequence;
|
||
|
||
if (Array.isArray(frameSourceImageSequence)) {
|
||
if (frameSourceImageSequence.length !== 0) {
|
||
frameSourceImageSequence = frameSourceImageSequence[0];
|
||
} else {
|
||
frameSourceImageSequence = undefined;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (frameSourceImageSequence) {
|
||
imageId = getImageIdOfSourceImagebySourceImageSequence(frameSourceImageSequence, imageIds, metadataProvider);
|
||
}
|
||
|
||
if (imageId === undefined && ReferencedSeriesSequence) {
|
||
var referencedSeriesSequence = Array.isArray(ReferencedSeriesSequence) ? ReferencedSeriesSequence[0] : ReferencedSeriesSequence;
|
||
var ReferencedSeriesInstanceUID = referencedSeriesSequence.SeriesInstanceUID;
|
||
imageId = getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance);
|
||
}
|
||
|
||
return imageId;
|
||
}
|
||
/**
|
||
* Checks if there is any overlapping segmentations.
|
||
* @returns {boolean} Returns a flag if segmentations overlapping
|
||
*/
|
||
|
||
|
||
function checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance) {
|
||
var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
|
||
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
||
SegmentSequence = multiframe.SegmentSequence,
|
||
Rows = multiframe.Rows,
|
||
Columns = multiframe.Columns;
|
||
var numberOfSegs = SegmentSequence.length;
|
||
|
||
if (numberOfSegs < 2) {
|
||
return false;
|
||
}
|
||
|
||
var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
|
||
var sliceLength = Columns * Rows;
|
||
var groupsLen = PerFrameFunctionalGroupsSequence.length;
|
||
/** sort groupsLen to have all the segments for each frame in an array
|
||
* frame 2 : 1, 2
|
||
* frame 4 : 1, 3
|
||
* frame 5 : 4
|
||
*/
|
||
|
||
var frameSegmentsMapping = new Map();
|
||
|
||
var _loop3 = function _loop3(frameSegment) {
|
||
var segmentIndex = getSegmentIndex(multiframe, frameSegment);
|
||
|
||
if (segmentIndex === undefined) {
|
||
console.warn("Could not retrieve the segment index for frame segment " + frameSegment + ", skipping this frame.");
|
||
return "continue";
|
||
}
|
||
|
||
var imageId = findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadataProvider, tolerance);
|
||
|
||
if (!imageId) {
|
||
console.warn("Image not present in stack, can't import frame : " + frameSegment + ".");
|
||
return "continue";
|
||
}
|
||
|
||
var imageIdIndex = imageIds.findIndex(function (element) {
|
||
return element === imageId;
|
||
});
|
||
|
||
if (frameSegmentsMapping.has(imageIdIndex)) {
|
||
var segmentArray = frameSegmentsMapping.get(imageIdIndex);
|
||
|
||
if (!segmentArray.includes(frameSegment)) {
|
||
segmentArray.push(frameSegment);
|
||
frameSegmentsMapping.set(imageIdIndex, segmentArray);
|
||
}
|
||
} else {
|
||
frameSegmentsMapping.set(imageIdIndex, [frameSegment]);
|
||
}
|
||
};
|
||
|
||
for (var frameSegment = 0; frameSegment < groupsLen; ++frameSegment) {
|
||
var _ret = _loop3(frameSegment);
|
||
|
||
if (_ret === "continue") continue;
|
||
}
|
||
|
||
var _iterator = _createForOfIteratorHelper(frameSegmentsMapping.entries()),
|
||
_step;
|
||
|
||
try {
|
||
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
||
var _step$value = _slicedToArray(_step.value, 2),
|
||
user = _step$value[0],
|
||
role = _step$value[1];
|
||
|
||
var temp2DArray = new Uint16Array(sliceLength).fill(0);
|
||
|
||
for (var i = 0; i < role.length; ++i) {
|
||
var _frameSegment = role[i];
|
||
var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_frameSegment];
|
||
var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
|
||
var pixelDataI2D = ndarray$1(new Uint8Array(pixelData.buffer, _frameSegment * sliceLength, sliceLength), [Rows, Columns]);
|
||
var alignedPixelDataI = alignPixelDataWithSourceData(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);
|
||
|
||
if (!alignedPixelDataI) {
|
||
console.warn("Individual SEG frames are out of plane with respect to the first SEG frame, this is not yet supported, skipping this frame.");
|
||
continue;
|
||
}
|
||
|
||
var data = alignedPixelDataI.data;
|
||
|
||
for (var j = 0, len = data.length; j < len; ++j) {
|
||
if (data[j] !== 0) {
|
||
temp2DArray[j]++;
|
||
|
||
if (temp2DArray[j] > 1) {
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} catch (err) {
|
||
_iterator.e(err);
|
||
} finally {
|
||
_iterator.f();
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
function insertOverlappingPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance) {
|
||
var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
|
||
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
||
Rows = multiframe.Rows,
|
||
Columns = multiframe.Columns;
|
||
var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
|
||
var sliceLength = Columns * Rows;
|
||
var arrayBufferLength = sliceLength * imageIds.length * 2; // 2 bytes per label voxel in cst4.
|
||
// indicate the number of labelMaps
|
||
|
||
var M = 1; // indicate the current labelMap array index;
|
||
|
||
var m = 0; // temp array for checking overlaps
|
||
|
||
var tempBuffer = labelmapBufferArray[m].slice(0); // temp list for checking overlaps
|
||
|
||
var tempSegmentsOnFrame = cloneDeep(segmentsOnFrameArray[m]);
|
||
/** split overlapping SEGs algorithm for each segment:
|
||
* A) copy the labelmapBuffer in the array with index 0
|
||
* B) add the segment pixel per pixel on the copied buffer from (A)
|
||
* C) if no overlap, copy the results back on the orignal array from (A)
|
||
* D) if overlap, repeat increasing the index m up to M (if out of memory, add new buffer in the array and M++);
|
||
*/
|
||
|
||
var numberOfSegs = multiframe.SegmentSequence.length;
|
||
|
||
for (var segmentIndexToProcess = 1; segmentIndexToProcess <= numberOfSegs; ++segmentIndexToProcess) {
|
||
var _loop4 = function _loop4(_i2, groupsLen) {
|
||
var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_i2];
|
||
var segmentIndex = getSegmentIndex(multiframe, _i2);
|
||
|
||
if (segmentIndex === undefined) {
|
||
throw new Error("Could not retrieve the segment index. Aborting segmentation loading.");
|
||
}
|
||
|
||
if (segmentIndex !== segmentIndexToProcess) {
|
||
i = _i2;
|
||
return "continue";
|
||
}
|
||
|
||
var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
|
||
var pixelDataI2D = ndarray$1(new Uint8Array(pixelData.buffer, _i2 * sliceLength, sliceLength), [Rows, Columns]);
|
||
var alignedPixelDataI = alignPixelDataWithSourceData(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);
|
||
|
||
if (!alignedPixelDataI) {
|
||
throw new Error("Individual SEG frames are out of plane with respect to the first SEG frame. " + "This is not yet supported. Aborting segmentation loading.");
|
||
}
|
||
|
||
var imageId = findReferenceSourceImageId(multiframe, _i2, imageIds, metadataProvider, tolerance);
|
||
|
||
if (!imageId) {
|
||
console.warn("Image not present in stack, can't import frame : " + _i2 + ".");
|
||
i = _i2;
|
||
return "continue";
|
||
}
|
||
|
||
var sourceImageMetadata = metadataProvider.get("instance", imageId);
|
||
|
||
if (Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns) {
|
||
throw new Error("Individual SEG frames have different geometry dimensions (Rows and Columns) " + "respect to the source image reference frame. This is not yet supported. " + "Aborting segmentation loading. ");
|
||
}
|
||
|
||
var imageIdIndex = imageIds.findIndex(function (element) {
|
||
return element === imageId;
|
||
});
|
||
var byteOffset = sliceLength * 2 * imageIdIndex; // 2 bytes/pixel
|
||
|
||
var labelmap2DView = new Uint16Array(tempBuffer, byteOffset, sliceLength);
|
||
var data = alignedPixelDataI.data;
|
||
var segmentOnFrame = false;
|
||
|
||
for (var j = 0, len = alignedPixelDataI.data.length; j < len; ++j) {
|
||
if (data[j]) {
|
||
if (labelmap2DView[j] !== 0) {
|
||
m++;
|
||
|
||
if (m >= M) {
|
||
labelmapBufferArray[m] = new ArrayBuffer(arrayBufferLength);
|
||
segmentsOnFrameArray[m] = [];
|
||
M++;
|
||
}
|
||
|
||
tempBuffer = labelmapBufferArray[m].slice(0);
|
||
tempSegmentsOnFrame = cloneDeep(segmentsOnFrameArray[m]);
|
||
_i2 = 0;
|
||
break;
|
||
} else {
|
||
labelmap2DView[j] = segmentIndex;
|
||
segmentOnFrame = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (segmentOnFrame) {
|
||
if (!tempSegmentsOnFrame[imageIdIndex]) {
|
||
tempSegmentsOnFrame[imageIdIndex] = [];
|
||
}
|
||
|
||
tempSegmentsOnFrame[imageIdIndex].push(segmentIndex);
|
||
|
||
if (!segmentsOnFrame[imageIdIndex]) {
|
||
segmentsOnFrame[imageIdIndex] = [];
|
||
}
|
||
|
||
segmentsOnFrame[imageIdIndex].push(segmentIndex);
|
||
}
|
||
|
||
i = _i2;
|
||
};
|
||
|
||
for (var i = 0, groupsLen = PerFrameFunctionalGroupsSequence.length; i < groupsLen; ++i) {
|
||
var _ret2 = _loop4(i, groupsLen);
|
||
|
||
if (_ret2 === "continue") continue;
|
||
}
|
||
|
||
labelmapBufferArray[m] = tempBuffer.slice(0);
|
||
segmentsOnFrameArray[m] = cloneDeep(tempSegmentsOnFrame); // reset temp variables/buffers for new segment
|
||
|
||
m = 0;
|
||
tempBuffer = labelmapBufferArray[m].slice(0);
|
||
tempSegmentsOnFrame = cloneDeep(segmentsOnFrameArray[m]);
|
||
}
|
||
}
|
||
|
||
var getSegmentIndex = function getSegmentIndex(multiframe, frame) {
|
||
var PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
||
SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence;
|
||
var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[frame];
|
||
return PerFrameFunctionalGroups && PerFrameFunctionalGroups.SegmentIdentificationSequence ? PerFrameFunctionalGroups.SegmentIdentificationSequence.ReferencedSegmentNumber : SharedFunctionalGroupsSequence.SegmentIdentificationSequence ? SharedFunctionalGroupsSequence.SegmentIdentificationSequence.ReferencedSegmentNumber : undefined;
|
||
};
|
||
|
||
function insertPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance) {
|
||
var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
|
||
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
||
Rows = multiframe.Rows,
|
||
Columns = multiframe.Columns;
|
||
var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
|
||
var sliceLength = Columns * Rows;
|
||
|
||
var _loop5 = function _loop5(groupsLen, _i3) {
|
||
var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_i3];
|
||
var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
|
||
var pixelDataI2D = ndarray$1(new Uint8Array(pixelData.buffer, _i3 * sliceLength, sliceLength), [Rows, Columns]);
|
||
var alignedPixelDataI = alignPixelDataWithSourceData(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);
|
||
|
||
if (!alignedPixelDataI) {
|
||
throw new Error("Individual SEG frames are out of plane with respect to the first SEG frame. " + "This is not yet supported. Aborting segmentation loading.");
|
||
}
|
||
|
||
var segmentIndex = getSegmentIndex(multiframe, _i3);
|
||
|
||
if (segmentIndex === undefined) {
|
||
throw new Error("Could not retrieve the segment index. Aborting segmentation loading.");
|
||
}
|
||
|
||
var imageId = findReferenceSourceImageId(multiframe, _i3, imageIds, metadataProvider, tolerance);
|
||
|
||
if (!imageId) {
|
||
console.warn("Image not present in stack, can't import frame : " + _i3 + ".");
|
||
return "continue";
|
||
}
|
||
|
||
var sourceImageMetadata = metadataProvider.get("instance", imageId);
|
||
|
||
if (Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns) {
|
||
throw new Error("Individual SEG frames have different geometry dimensions (Rows and Columns) " + "respect to the source image reference frame. This is not yet supported. " + "Aborting segmentation loading. ");
|
||
}
|
||
|
||
var imageIdIndex = imageIds.findIndex(function (element) {
|
||
return element === imageId;
|
||
});
|
||
var byteOffset = sliceLength * 2 * imageIdIndex; // 2 bytes/pixel
|
||
|
||
var labelmap2DView = new Uint16Array(labelmapBufferArray[0], byteOffset, sliceLength);
|
||
var data = alignedPixelDataI.data;
|
||
|
||
for (var j = 0, len = alignedPixelDataI.data.length; j < len; ++j) {
|
||
if (data[j]) {
|
||
for (var x = j; x < len; ++x) {
|
||
if (data[x]) {
|
||
labelmap2DView[x] = segmentIndex;
|
||
}
|
||
}
|
||
|
||
if (!segmentsOnFrame[imageIdIndex]) {
|
||
segmentsOnFrame[imageIdIndex] = [];
|
||
}
|
||
|
||
segmentsOnFrame[imageIdIndex].push(segmentIndex);
|
||
break;
|
||
}
|
||
}
|
||
};
|
||
|
||
for (var _i3 = 0, groupsLen = PerFrameFunctionalGroupsSequence.length; _i3 < groupsLen; ++_i3) {
|
||
var _ret3 = _loop5(groupsLen, _i3);
|
||
|
||
if (_ret3 === "continue") continue;
|
||
}
|
||
}
|
||
|
||
function checkOrientation(multiframe, validOrientations, sourceDataDimensions, tolerance) {
|
||
var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
|
||
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence;
|
||
var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined; // Check if in plane.
|
||
|
||
var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[0];
|
||
var iop = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
|
||
var inPlane = validOrientations.some(function (operation) {
|
||
return compareArrays(iop, operation, tolerance);
|
||
});
|
||
|
||
if (inPlane) {
|
||
return "Planar";
|
||
}
|
||
|
||
if (checkIfPerpendicular(iop, validOrientations[0], tolerance) && sourceDataDimensions.includes(multiframe.Rows) && sourceDataDimensions.includes(multiframe.Columns)) {
|
||
// Perpendicular and fits on same grid.
|
||
return "Perpendicular";
|
||
}
|
||
|
||
return "Oblique";
|
||
}
|
||
/**
|
||
* checkIfPerpendicular - Returns true if iop1 and iop2 are perpendicular
|
||
* within a tolerance.
|
||
*
|
||
* @param {Number[6]} iop1 An ImageOrientationPatient array.
|
||
* @param {Number[6]} iop2 An ImageOrientationPatient array.
|
||
* @param {Number} tolerance.
|
||
* @return {Boolean} True if iop1 and iop2 are equal.
|
||
*/
|
||
|
||
|
||
function checkIfPerpendicular(iop1, iop2, tolerance) {
|
||
var absDotColumnCosines = Math.abs(iop1[0] * iop2[0] + iop1[1] * iop2[1] + iop1[2] * iop2[2]);
|
||
var absDotRowCosines = Math.abs(iop1[3] * iop2[3] + iop1[4] * iop2[4] + iop1[5] * iop2[5]);
|
||
return (absDotColumnCosines < tolerance || Math.abs(absDotColumnCosines - 1) < tolerance) && (absDotRowCosines < tolerance || Math.abs(absDotRowCosines - 1) < tolerance);
|
||
}
|
||
/**
|
||
* unpackPixelData - Unpacks bitpacked pixelData if the Segmentation is BINARY.
|
||
*
|
||
* @param {Object} multiframe The multiframe dataset.
|
||
* @return {Uint8Array} The unpacked pixelData.
|
||
*/
|
||
|
||
|
||
function unpackPixelData(multiframe) {
|
||
var segType = multiframe.SegmentationType;
|
||
var data;
|
||
|
||
if (Array.isArray(multiframe.PixelData)) {
|
||
data = multiframe.PixelData[0];
|
||
} else {
|
||
data = multiframe.PixelData;
|
||
}
|
||
|
||
if (data === undefined) {
|
||
log.error("This segmentation pixeldata is undefined.");
|
||
}
|
||
|
||
if (segType === "BINARY") {
|
||
return BitArray.unpack(data);
|
||
}
|
||
|
||
var pixelData = new Uint8Array(data);
|
||
var max = multiframe.MaximumFractionalValue;
|
||
var onlyMaxAndZero = pixelData.find(function (element) {
|
||
return element !== 0 && element !== max;
|
||
}) === undefined;
|
||
|
||
if (!onlyMaxAndZero) {
|
||
// This is a fractional segmentation, which is not currently supported.
|
||
return;
|
||
}
|
||
|
||
log.warn("This segmentation object is actually binary... processing as such.");
|
||
return pixelData;
|
||
}
|
||
/**
|
||
* getImageIdOfSourceImagebySourceImageSequence - Returns the Cornerstone imageId of the source image.
|
||
*
|
||
* @param {Object} SourceImageSequence Sequence describing the source image.
|
||
* @param {String[]} imageIds A list of imageIds.
|
||
* @param {Object} metadataProvider A Cornerstone metadataProvider to query
|
||
* metadata from imageIds.
|
||
* @return {String} The corresponding imageId.
|
||
*/
|
||
|
||
|
||
function getImageIdOfSourceImagebySourceImageSequence(SourceImageSequence, imageIds, metadataProvider) {
|
||
var ReferencedSOPInstanceUID = SourceImageSequence.ReferencedSOPInstanceUID,
|
||
ReferencedFrameNumber = SourceImageSequence.ReferencedFrameNumber;
|
||
return ReferencedFrameNumber ? getImageIdOfReferencedFrame(ReferencedSOPInstanceUID, ReferencedFrameNumber, imageIds, metadataProvider) : getImageIdOfReferencedSingleFramedSOPInstance(ReferencedSOPInstanceUID, imageIds, metadataProvider);
|
||
}
|
||
/**
|
||
* getImageIdOfSourceImagebyGeometry - Returns the Cornerstone imageId of the source image.
|
||
*
|
||
* @param {String} ReferencedSeriesInstanceUID Referenced series of the source image.
|
||
* @param {String} FrameOfReferenceUID Frame of reference.
|
||
* @param {Object} PerFrameFunctionalGroup Sequence describing segmentation reference attributes per frame.
|
||
* @param {String[]} imageIds A list of imageIds.
|
||
* @param {Object} metadataProvider A Cornerstone metadataProvider to query
|
||
* @param {Float} tolerance The tolerance parameter
|
||
*
|
||
* @return {String} The corresponding imageId.
|
||
*/
|
||
|
||
|
||
function getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance) {
|
||
if (ReferencedSeriesInstanceUID === undefined || PerFrameFunctionalGroup.PlanePositionSequence === undefined || PerFrameFunctionalGroup.PlanePositionSequence[0] === undefined || PerFrameFunctionalGroup.PlanePositionSequence[0].ImagePositionPatient === undefined) {
|
||
return undefined;
|
||
}
|
||
|
||
for (var imageIdsIndexc = 0; imageIdsIndexc < imageIds.length; ++imageIdsIndexc) {
|
||
var sourceImageMetadata = metadataProvider.get("instance", imageIds[imageIdsIndexc]);
|
||
|
||
if (sourceImageMetadata === undefined || sourceImageMetadata.ImagePositionPatient === undefined || sourceImageMetadata.FrameOfReferenceUID !== FrameOfReferenceUID || sourceImageMetadata.SeriesInstanceUID !== ReferencedSeriesInstanceUID) {
|
||
continue;
|
||
}
|
||
|
||
if (compareArrays(PerFrameFunctionalGroup.PlanePositionSequence[0].ImagePositionPatient, sourceImageMetadata.ImagePositionPatient, tolerance)) {
|
||
return imageIds[imageIdsIndexc];
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* getImageIdOfReferencedSingleFramedSOPInstance - Returns the imageId
|
||
* corresponding to the specified sopInstanceUid for single-frame images.
|
||
*
|
||
* @param {String} sopInstanceUid The sopInstanceUid of the desired image.
|
||
* @param {String[]} imageIds The list of imageIds.
|
||
* @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids
|
||
* from the cornerstone imageIds.
|
||
* @return {String} The imageId that corresponds to the sopInstanceUid.
|
||
*/
|
||
|
||
|
||
function getImageIdOfReferencedSingleFramedSOPInstance(sopInstanceUid, imageIds, metadataProvider) {
|
||
return imageIds.find(function (imageId) {
|
||
var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
|
||
|
||
if (!sopCommonModule) {
|
||
return;
|
||
}
|
||
|
||
return sopCommonModule.sopInstanceUID === sopInstanceUid;
|
||
});
|
||
}
|
||
/**
|
||
* getImageIdOfReferencedFrame - Returns the imageId corresponding to the
|
||
* specified sopInstanceUid and frameNumber for multi-frame images.
|
||
*
|
||
* @param {String} sopInstanceUid The sopInstanceUid of the desired image.
|
||
* @param {Number} frameNumber The frame number.
|
||
* @param {String} imageIds The list of imageIds.
|
||
* @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids
|
||
* from the cornerstone imageIds.
|
||
* @return {String} The imageId that corresponds to the sopInstanceUid.
|
||
*/
|
||
|
||
|
||
function getImageIdOfReferencedFrame(sopInstanceUid, frameNumber, imageIds, metadataProvider) {
|
||
var imageId = imageIds.find(function (imageId) {
|
||
var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
|
||
|
||
if (!sopCommonModule) {
|
||
return;
|
||
}
|
||
|
||
var imageIdFrameNumber = Number(imageId.split("frame=")[1]);
|
||
return (//frameNumber is zero indexed for cornerstoneWADOImageLoader image Ids.
|
||
sopCommonModule.sopInstanceUID === sopInstanceUid && imageIdFrameNumber === frameNumber - 1
|
||
);
|
||
});
|
||
return imageId;
|
||
}
|
||
/**
|
||
* getValidOrientations - returns an array of valid orientations.
|
||
*
|
||
* @param {Number[6]} iop The row (0..2) an column (3..5) direction cosines.
|
||
* @return {Number[8][6]} An array of valid orientations.
|
||
*/
|
||
|
||
|
||
function getValidOrientations(iop) {
|
||
var orientations = []; // [0, 1, 2]: 0, 0hf, 0vf
|
||
// [3, 4, 5]: 90, 90hf, 90vf
|
||
// [6, 7]: 180, 270
|
||
|
||
orientations[0] = iop;
|
||
orientations[1] = flipImageOrientationPatient.h(iop);
|
||
orientations[2] = flipImageOrientationPatient.v(iop);
|
||
var iop90 = rotateDirectionCosinesInPlane(iop, Math.PI / 2);
|
||
orientations[3] = iop90;
|
||
orientations[4] = flipImageOrientationPatient.h(iop90);
|
||
orientations[5] = flipImageOrientationPatient.v(iop90);
|
||
orientations[6] = rotateDirectionCosinesInPlane(iop, Math.PI);
|
||
orientations[7] = rotateDirectionCosinesInPlane(iop, 1.5 * Math.PI);
|
||
return orientations;
|
||
}
|
||
/**
|
||
* alignPixelDataWithSourceData -
|
||
*
|
||
* @param {Ndarray} pixelData2D - The data to align.
|
||
* @param {Number[6]} iop - The orientation of the image slice.
|
||
* @param {Number[8][6]} orientations - An array of valid imageOrientationPatient values.
|
||
* @param {Number} tolerance.
|
||
* @return {Ndarray} The aligned pixelData.
|
||
*/
|
||
|
||
|
||
function alignPixelDataWithSourceData(pixelData2D, iop, orientations, tolerance) {
|
||
if (compareArrays(iop, orientations[0], tolerance)) {
|
||
return pixelData2D;
|
||
} else if (compareArrays(iop, orientations[1], tolerance)) {
|
||
// Flipped vertically.
|
||
// Undo Flip
|
||
return flipMatrix2D.v(pixelData2D);
|
||
} else if (compareArrays(iop, orientations[2], tolerance)) {
|
||
// Flipped horizontally.
|
||
// Unfo flip
|
||
return flipMatrix2D.h(pixelData2D);
|
||
} else if (compareArrays(iop, orientations[3], tolerance)) {
|
||
//Rotated 90 degrees
|
||
// Rotate back
|
||
return rotateMatrix902D(pixelData2D);
|
||
} else if (compareArrays(iop, orientations[4], tolerance)) {
|
||
//Rotated 90 degrees and fliped horizontally.
|
||
// Undo flip and rotate back.
|
||
return rotateMatrix902D(flipMatrix2D.h(pixelData2D));
|
||
} else if (compareArrays(iop, orientations[5], tolerance)) {
|
||
// Rotated 90 degrees and fliped vertically
|
||
// Unfo flip and rotate back.
|
||
return rotateMatrix902D(flipMatrix2D.v(pixelData2D));
|
||
} else if (compareArrays(iop, orientations[6], tolerance)) {
|
||
// Rotated 180 degrees. // TODO -> Do this more effeciently, there is a 1:1 mapping like 90 degree rotation.
|
||
return rotateMatrix902D(rotateMatrix902D(pixelData2D));
|
||
} else if (compareArrays(iop, orientations[7], tolerance)) {
|
||
// Rotated 270 degrees
|
||
// Rotate back.
|
||
return rotateMatrix902D(rotateMatrix902D(rotateMatrix902D(pixelData2D)));
|
||
}
|
||
}
|
||
/**
|
||
* compareArrays - Returns true if array1 and array2 are equal
|
||
* within a tolerance.
|
||
*
|
||
* @param {Number[]} array1 - An array.
|
||
* @param {Number[]} array2 - An array.
|
||
* @param {Number} tolerance.
|
||
* @return {Boolean} True if array1 and array2 are equal.
|
||
*/
|
||
|
||
|
||
function compareArrays(array1, array2, tolerance) {
|
||
if (array1.length != array2.length) {
|
||
return false;
|
||
}
|
||
|
||
for (var _i4 = 0; _i4 < array1.length; ++_i4) {
|
||
if (!nearlyEqual(array1[_i4], array2[_i4], tolerance)) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
function getSegmentMetadata(multiframe, seriesInstanceUid) {
|
||
var segmentSequence = multiframe.SegmentSequence;
|
||
var data = [];
|
||
|
||
if (Array.isArray(segmentSequence)) {
|
||
data = [undefined].concat(_toConsumableArray(segmentSequence));
|
||
} else {
|
||
// Only one segment, will be stored as an object.
|
||
data = [undefined, segmentSequence];
|
||
}
|
||
|
||
return {
|
||
seriesInstanceUid: seriesInstanceUid,
|
||
data: data
|
||
};
|
||
}
|
||
|
||
var Segmentation$1 = {
|
||
generateSegmentation: generateSegmentation,
|
||
generateToolState: generateToolState,
|
||
fillSegmentation: fillSegmentation
|
||
};
|
||
/**
|
||
* generateSegmentation - Generates a DICOM Segmentation object given cornerstoneTools data.
|
||
*
|
||
* @param {object[]} images An array of the cornerstone image objects.
|
||
* @param {Object|Object[]} labelmaps3DorBrushData For 4.X: The cornerstone `Labelmap3D` object, or an array of objects.
|
||
* For 3.X: the BrushData.
|
||
* @param {number} cornerstoneToolsVersion The cornerstoneTools major version to map against.
|
||
* @returns {Object}
|
||
*/
|
||
|
||
function generateSegmentation(images, labelmaps3DorBrushData) {
|
||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
||
includeSliceSpacing: true
|
||
};
|
||
var cornerstoneToolsVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 4;
|
||
|
||
if (cornerstoneToolsVersion === 4) {
|
||
return Segmentation$2.generateSegmentation(images, labelmaps3DorBrushData, options);
|
||
}
|
||
|
||
if (cornerstoneToolsVersion === 3) {
|
||
return Segmentation$3.generateSegmentation(images, labelmaps3DorBrushData, options);
|
||
}
|
||
|
||
console.warn("No generateSegmentation adapater for cornerstone version ".concat(cornerstoneToolsVersion, ", exiting."));
|
||
}
|
||
/**
|
||
* generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,
|
||
* derive cornerstoneTools toolState and brush metadata.
|
||
*
|
||
* @param {string[]} imageIds An array of the imageIds.
|
||
* @param {ArrayBuffer} arrayBuffer The SEG arrayBuffer.
|
||
* @param {*} metadataProvider
|
||
* @param {bool} skipOverlapping - skip checks for overlapping segs, default value false.
|
||
* @param {number} tolerance - default value 1.e-3.
|
||
* @param {number} cornerstoneToolsVersion - default value 4.
|
||
*
|
||
* @returns {Object} The toolState and an object from which the
|
||
* segment metadata can be derived.
|
||
*/
|
||
|
||
|
||
function generateToolState(imageIds, arrayBuffer, metadataProvider) {
|
||
var skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
||
var tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;
|
||
var cornerstoneToolsVersion = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 4;
|
||
|
||
if (cornerstoneToolsVersion === 4) {
|
||
return Segmentation$2.generateToolState(imageIds, arrayBuffer, metadataProvider, skipOverlapping, tolerance);
|
||
}
|
||
|
||
if (cornerstoneToolsVersion === 3) {
|
||
return Segmentation$3.generateToolState(imageIds, arrayBuffer, metadataProvider);
|
||
}
|
||
|
||
console.warn("No generateToolState adapater for cornerstone version ".concat(cornerstoneToolsVersion, ", exiting."));
|
||
}
|
||
/**
|
||
* fillSegmentation - Fills a derived segmentation dataset with cornerstoneTools `LabelMap3D` data.
|
||
*
|
||
* @param {object[]} segmentation An empty segmentation derived dataset.
|
||
* @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.
|
||
* @param {Object} userOptions Options object to override default options.
|
||
* @returns {Blob} description
|
||
*/
|
||
|
||
|
||
function fillSegmentation(segmentation, inputLabelmaps3D) {
|
||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
||
includeSliceSpacing: true
|
||
};
|
||
var cornerstoneToolsVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 4;
|
||
|
||
if (cornerstoneToolsVersion === 4) {
|
||
return Segmentation$2.fillSegmentation(segmentation, inputLabelmaps3D, options);
|
||
}
|
||
|
||
console.warn("No generateSegmentation adapater for cornerstone version ".concat(cornerstoneToolsVersion, ", exiting."));
|
||
}
|
||
|
||
var CobbAngle$1 = /*#__PURE__*/function (_TID300Measurement) {
|
||
_inherits(CobbAngle, _TID300Measurement);
|
||
|
||
var _super = _createSuper(CobbAngle);
|
||
|
||
function CobbAngle() {
|
||
_classCallCheck(this, CobbAngle);
|
||
|
||
return _super.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(CobbAngle, [{
|
||
key: "contentItem",
|
||
value: function contentItem() {
|
||
var _this$props = this.props,
|
||
point1 = _this$props.point1,
|
||
point2 = _this$props.point2,
|
||
point3 = _this$props.point3,
|
||
point4 = _this$props.point4,
|
||
rAngle = _this$props.rAngle,
|
||
ReferencedSOPSequence = _this$props.ReferencedSOPSequence;
|
||
return this.getMeasurement([{
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "285285000",
|
||
CodingSchemeDesignator: "SCT",
|
||
CodeMeaning: "Cobb angle"
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: {
|
||
CodeValue: "deg",
|
||
CodingSchemeDesignator: "UCUM",
|
||
CodingSchemeVersion: "1.4",
|
||
CodeMeaning: "\xB0"
|
||
},
|
||
NumericValue: rAngle
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: "SCOORD",
|
||
GraphicType: "POLYLINE",
|
||
GraphicData: [point1.x, point1.y, point2.x, point2.y, point3.x, point3.y, point4.x, point4.y],
|
||
ContentSequence: {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}]);
|
||
}
|
||
}]);
|
||
|
||
return CobbAngle;
|
||
}(TID300Measurement);
|
||
|
||
var COBB_ANGLE = "CobbAngle";
|
||
|
||
var CobbAngle = /*#__PURE__*/function () {
|
||
function CobbAngle() {
|
||
_classCallCheck(this, CobbAngle);
|
||
} // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
|
||
|
||
|
||
_createClass(CobbAngle, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup) {
|
||
var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;
|
||
|
||
var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
|
||
rAngle: NUMGroup.MeasuredValueSequence.NumericValue,
|
||
toolType: CobbAngle.toolType,
|
||
handles: {
|
||
start: {},
|
||
end: {},
|
||
start2: {
|
||
highlight: true,
|
||
drawnIndependently: true
|
||
},
|
||
end2: {
|
||
highlight: true,
|
||
drawnIndependently: true
|
||
},
|
||
textBox: {
|
||
hasMoved: false,
|
||
movesIndependently: false,
|
||
drawnIndependently: true,
|
||
allowedOutsideImage: true,
|
||
hasBoundingBox: true
|
||
}
|
||
}
|
||
});
|
||
|
||
var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 8);
|
||
|
||
state.handles.start.x = _SCOORDGroup$GraphicD[0];
|
||
state.handles.start.y = _SCOORDGroup$GraphicD[1];
|
||
state.handles.end.x = _SCOORDGroup$GraphicD[2];
|
||
state.handles.end.y = _SCOORDGroup$GraphicD[3];
|
||
state.handles.start2.x = _SCOORDGroup$GraphicD[4];
|
||
state.handles.start2.y = _SCOORDGroup$GraphicD[5];
|
||
state.handles.end2.x = _SCOORDGroup$GraphicD[6];
|
||
state.handles.end2.y = _SCOORDGroup$GraphicD[7];
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool) {
|
||
var handles = tool.handles,
|
||
finding = tool.finding,
|
||
findingSites = tool.findingSites;
|
||
var point1 = handles.start;
|
||
var point2 = handles.end;
|
||
var point3 = handles.start2;
|
||
var point4 = handles.end2;
|
||
var rAngle = tool.rAngle;
|
||
var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:CobbAngle";
|
||
return {
|
||
point1: point1,
|
||
point2: point2,
|
||
point3: point3,
|
||
point4: point4,
|
||
rAngle: rAngle,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return CobbAngle;
|
||
}();
|
||
|
||
CobbAngle.toolType = COBB_ANGLE;
|
||
CobbAngle.utilityToolType = COBB_ANGLE;
|
||
CobbAngle.TID300Representation = CobbAngle$1;
|
||
|
||
CobbAngle.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone4Tag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === COBB_ANGLE;
|
||
};
|
||
|
||
MeasurementReport$3.registerTool(CobbAngle);
|
||
|
||
var ANGLE = "Angle";
|
||
|
||
var Angle = /*#__PURE__*/function () {
|
||
function Angle() {
|
||
_classCallCheck(this, Angle);
|
||
}
|
||
/**
|
||
* Generate TID300 measurement data for a plane angle measurement - use a CobbAngle, but label it as Angle
|
||
* @param MeasurementGroup
|
||
* @returns
|
||
*/
|
||
|
||
|
||
_createClass(Angle, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup) {
|
||
var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;
|
||
|
||
var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
|
||
rAngle: NUMGroup.MeasuredValueSequence.NumericValue,
|
||
toolType: Angle.toolType,
|
||
handles: {
|
||
start: {},
|
||
middle: {},
|
||
end: {},
|
||
textBox: {
|
||
hasMoved: false,
|
||
movesIndependently: false,
|
||
drawnIndependently: true,
|
||
allowedOutsideImage: true,
|
||
hasBoundingBox: true
|
||
}
|
||
}
|
||
});
|
||
|
||
var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 8);
|
||
|
||
state.handles.start.x = _SCOORDGroup$GraphicD[0];
|
||
state.handles.start.y = _SCOORDGroup$GraphicD[1];
|
||
state.handles.middle.x = _SCOORDGroup$GraphicD[2];
|
||
state.handles.middle.y = _SCOORDGroup$GraphicD[3];
|
||
state.handles.middle.x = _SCOORDGroup$GraphicD[4];
|
||
state.handles.middle.y = _SCOORDGroup$GraphicD[5];
|
||
state.handles.end.x = _SCOORDGroup$GraphicD[6];
|
||
state.handles.end.y = _SCOORDGroup$GraphicD[7];
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool) {
|
||
var handles = tool.handles,
|
||
finding = tool.finding,
|
||
findingSites = tool.findingSites;
|
||
var point1 = handles.start;
|
||
var point2 = handles.middle;
|
||
var point3 = handles.middle;
|
||
var point4 = handles.end;
|
||
var rAngle = tool.rAngle;
|
||
var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:Angle";
|
||
return {
|
||
point1: point1,
|
||
point2: point2,
|
||
point3: point3,
|
||
point4: point4,
|
||
rAngle: rAngle,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return Angle;
|
||
}();
|
||
|
||
Angle.toolType = ANGLE;
|
||
Angle.utilityToolType = ANGLE;
|
||
Angle.TID300Representation = CobbAngle$1;
|
||
|
||
Angle.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone4Tag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === ANGLE;
|
||
};
|
||
|
||
MeasurementReport$3.registerTool(Angle);
|
||
|
||
var RectangleRoi = /*#__PURE__*/function () {
|
||
function RectangleRoi() {
|
||
_classCallCheck(this, RectangleRoi);
|
||
}
|
||
|
||
_createClass(RectangleRoi, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup) {
|
||
var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
||
NUMGroup = _MeasurementReport$ge.NUMGroup;
|
||
|
||
var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
|
||
toolType: RectangleRoi.toolType,
|
||
handles: {
|
||
start: {},
|
||
end: {},
|
||
textBox: {
|
||
active: false,
|
||
hasMoved: false,
|
||
movesIndependently: false,
|
||
drawnIndependently: true,
|
||
allowedOutsideImage: true,
|
||
hasBoundingBox: true
|
||
},
|
||
initialRotation: 0
|
||
},
|
||
cachedStats: {
|
||
area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
|
||
},
|
||
color: undefined,
|
||
invalidated: true
|
||
});
|
||
|
||
var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 6);
|
||
|
||
state.handles.start.x = _SCOORDGroup$GraphicD[0];
|
||
state.handles.start.y = _SCOORDGroup$GraphicD[1];
|
||
_SCOORDGroup$GraphicD[2];
|
||
_SCOORDGroup$GraphicD[3];
|
||
state.handles.end.x = _SCOORDGroup$GraphicD[4];
|
||
state.handles.end.y = _SCOORDGroup$GraphicD[5];
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool) {
|
||
var finding = tool.finding,
|
||
findingSites = tool.findingSites,
|
||
_tool$cachedStats = tool.cachedStats,
|
||
cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats,
|
||
handles = tool.handles;
|
||
console.log("getTID300 Rectangle", tool, cachedStats, handles);
|
||
var start = handles.start,
|
||
end = handles.end;
|
||
var points = [start, {
|
||
x: start.x,
|
||
y: end.y
|
||
}, end, {
|
||
x: end.x,
|
||
y: start.y
|
||
}];
|
||
var area = cachedStats.area,
|
||
perimeter = cachedStats.perimeter;
|
||
console.log("Point=", points, "cachedStats=", cachedStats);
|
||
var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:RectangleRoi";
|
||
return {
|
||
points: points,
|
||
area: area,
|
||
perimeter: perimeter,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return RectangleRoi;
|
||
}();
|
||
|
||
RectangleRoi.toolType = "RectangleRoi";
|
||
RectangleRoi.utilityToolType = "RectangleRoi";
|
||
RectangleRoi.TID300Representation = Polyline$1;
|
||
|
||
RectangleRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone4Tag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === RectangleRoi.toolType;
|
||
};
|
||
|
||
MeasurementReport$3.registerTool(RectangleRoi);
|
||
|
||
var Cornerstone = {
|
||
Length: Length$1,
|
||
FreehandRoi: FreehandRoi,
|
||
Bidirectional: Bidirectional$1,
|
||
EllipticalRoi: EllipticalRoi,
|
||
CircleRoi: CircleRoi,
|
||
ArrowAnnotate: ArrowAnnotate$1,
|
||
MeasurementReport: MeasurementReport$3,
|
||
Segmentation: Segmentation$1,
|
||
CobbAngle: CobbAngle,
|
||
Angle: Angle,
|
||
RectangleRoi: RectangleRoi
|
||
};
|
||
|
||
// This is a custom coding scheme defined to store some annotations from Cornerstone.
|
||
// Note: CodeMeaning is VR type LO, which means we only actually support 64 characters
|
||
// here this is fine for most labels, but may be problematic at some point.
|
||
var CORNERSTONEFREETEXT = "CORNERSTONEFREETEXT"; // Cornerstone specified coding scheme for storing findings
|
||
|
||
var CodingSchemeDesignator$1 = "CORNERSTONEJS";
|
||
var CodingScheme = {
|
||
CodingSchemeDesignator: CodingSchemeDesignator$1,
|
||
codeValues: {
|
||
CORNERSTONEFREETEXT: CORNERSTONEFREETEXT
|
||
}
|
||
};
|
||
|
||
var FINDING = {
|
||
CodingSchemeDesignator: "DCM",
|
||
CodeValue: "121071"
|
||
};
|
||
var FINDING_SITE = {
|
||
CodingSchemeDesignator: "SCT",
|
||
CodeValue: "363698007"
|
||
};
|
||
var FINDING_SITE_OLD = {
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeValue: "G-C0E3"
|
||
};
|
||
|
||
var codeValueMatch = function codeValueMatch(group, code, oldCode) {
|
||
var ConceptNameCodeSequence = group.ConceptNameCodeSequence;
|
||
if (!ConceptNameCodeSequence) return;
|
||
var CodingSchemeDesignator = ConceptNameCodeSequence.CodingSchemeDesignator,
|
||
CodeValue = ConceptNameCodeSequence.CodeValue;
|
||
return CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue || oldCode && CodingSchemeDesignator == oldCode.CodingSchemeDesignator && CodeValue == oldCode.CodeValue;
|
||
};
|
||
|
||
function getTID300ContentItem$1(tool, toolType, ReferencedSOPSequence, toolClass, worldToImageCoords) {
|
||
var args = toolClass.getTID300RepresentationArguments(tool, worldToImageCoords);
|
||
args.ReferencedSOPSequence = ReferencedSOPSequence;
|
||
var TID300Measurement = new toolClass.TID300Representation(args);
|
||
return TID300Measurement;
|
||
}
|
||
|
||
function getMeasurementGroup$1(toolType, toolData, ReferencedSOPSequence, worldToImageCoords) {
|
||
var toolTypeData = toolData[toolType];
|
||
var toolClass = MeasurementReport$2.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolType];
|
||
|
||
if (!toolTypeData || !toolTypeData.data || !toolTypeData.data.length || !toolClass) {
|
||
return;
|
||
} // Loop through the array of tool instances
|
||
// for this tool
|
||
|
||
|
||
var Measurements = toolTypeData.data.map(function (tool) {
|
||
return getTID300ContentItem$1(tool, toolType, ReferencedSOPSequence, toolClass, worldToImageCoords);
|
||
});
|
||
return new TID1501MeasurementGroup(Measurements);
|
||
}
|
||
|
||
var MeasurementReport$2 = /*#__PURE__*/function () {
|
||
function MeasurementReport() {
|
||
_classCallCheck(this, MeasurementReport);
|
||
}
|
||
|
||
_createClass(MeasurementReport, null, [{
|
||
key: "getCornerstoneLabelFromDefaultState",
|
||
value: function getCornerstoneLabelFromDefaultState(defaultState) {
|
||
var _defaultState$finding = defaultState.findingSites,
|
||
findingSites = _defaultState$finding === void 0 ? [] : _defaultState$finding,
|
||
finding = defaultState.finding;
|
||
var cornersoneFreeTextCodingValue = CodingScheme.codeValues.CORNERSTONEFREETEXT;
|
||
var freeTextLabel = findingSites.find(function (fs) {
|
||
return fs.CodeValue === cornersoneFreeTextCodingValue;
|
||
});
|
||
|
||
if (freeTextLabel) {
|
||
return freeTextLabel.CodeMeaning;
|
||
}
|
||
|
||
if (finding && finding.CodeValue === cornersoneFreeTextCodingValue) {
|
||
return finding.CodeMeaning;
|
||
}
|
||
}
|
||
}, {
|
||
key: "generateDatasetMeta",
|
||
value: function generateDatasetMeta() {
|
||
// TODO: what is the correct metaheader
|
||
// http://dicom.nema.org/medical/Dicom/current/output/chtml/part10/chapter_7.html
|
||
// TODO: move meta creation to happen in derivations.js
|
||
var fileMetaInformationVersionArray = new Uint8Array(2);
|
||
fileMetaInformationVersionArray[1] = 1;
|
||
var _meta = {
|
||
FileMetaInformationVersion: {
|
||
Value: [fileMetaInformationVersionArray.buffer],
|
||
vr: "OB"
|
||
},
|
||
//MediaStorageSOPClassUID
|
||
//MediaStorageSOPInstanceUID: sopCommonModule.sopInstanceUID,
|
||
TransferSyntaxUID: {
|
||
Value: ["1.2.840.10008.1.2.1"],
|
||
vr: "UI"
|
||
},
|
||
ImplementationClassUID: {
|
||
Value: [DicomMetaDictionary.uid()],
|
||
// TODO: could be git hash or other valid id
|
||
vr: "UI"
|
||
},
|
||
ImplementationVersionName: {
|
||
Value: ["dcmjs"],
|
||
vr: "SH"
|
||
}
|
||
};
|
||
return _meta;
|
||
}
|
||
}, {
|
||
key: "generateDerivationSourceDataset",
|
||
value: function generateDerivationSourceDataset(StudyInstanceUID, SeriesInstanceUID) {
|
||
var _vrMap = {
|
||
PixelData: "OW"
|
||
};
|
||
|
||
var _meta = MeasurementReport.generateDatasetMeta();
|
||
|
||
var derivationSourceDataset = {
|
||
StudyInstanceUID: StudyInstanceUID,
|
||
SeriesInstanceUID: SeriesInstanceUID,
|
||
_meta: _meta,
|
||
_vrMap: _vrMap
|
||
};
|
||
return derivationSourceDataset;
|
||
}
|
||
}, {
|
||
key: "getSetupMeasurementData",
|
||
value: function getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, toolType) {
|
||
var ContentSequence = MeasurementGroup.ContentSequence;
|
||
var contentSequenceArr = toArray(ContentSequence);
|
||
var findingGroup = contentSequenceArr.find(function (group) {
|
||
return codeValueMatch(group, FINDING);
|
||
});
|
||
var findingSiteGroups = contentSequenceArr.filter(function (group) {
|
||
return codeValueMatch(group, FINDING_SITE, FINDING_SITE_OLD);
|
||
}) || [];
|
||
var NUMGroup = contentSequenceArr.find(function (group) {
|
||
return group.ValueType === "NUM";
|
||
});
|
||
var SCOORDGroup = toArray(NUMGroup.ContentSequence).find(function (group) {
|
||
return group.ValueType === "SCOORD";
|
||
});
|
||
var ReferencedSOPSequence = SCOORDGroup.ContentSequence.ReferencedSOPSequence;
|
||
var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,
|
||
ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber;
|
||
var referencedImageId = sopInstanceUIDToImageIdMap[ReferencedSOPInstanceUID];
|
||
var imagePlaneModule = metadata.get("imagePlaneModule", referencedImageId);
|
||
var finding = findingGroup ? addAccessors(findingGroup.ConceptCodeSequence) : undefined;
|
||
var findingSites = findingSiteGroups.map(function (fsg) {
|
||
return addAccessors(fsg.ConceptCodeSequence);
|
||
});
|
||
var defaultState = {
|
||
sopInstanceUid: ReferencedSOPInstanceUID,
|
||
annotation: {
|
||
annotationUID: DicomMetaDictionary.uid(),
|
||
metadata: {
|
||
toolName: toolType,
|
||
referencedImageId: referencedImageId,
|
||
FrameOfReferenceUID: imagePlaneModule.frameOfReferenceUID,
|
||
label: ""
|
||
}
|
||
},
|
||
finding: finding,
|
||
findingSites: findingSites
|
||
};
|
||
|
||
if (defaultState.finding) {
|
||
defaultState.description = defaultState.finding.CodeMeaning;
|
||
}
|
||
|
||
defaultState.annotation.metadata.label = MeasurementReport.getCornerstoneLabelFromDefaultState(defaultState);
|
||
return {
|
||
defaultState: defaultState,
|
||
NUMGroup: NUMGroup,
|
||
SCOORDGroup: SCOORDGroup,
|
||
ReferencedSOPSequence: ReferencedSOPSequence,
|
||
ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,
|
||
ReferencedFrameNumber: ReferencedFrameNumber
|
||
};
|
||
}
|
||
}, {
|
||
key: "generateReport",
|
||
value: function generateReport(toolState, metadataProvider, worldToImageCoords, options) {
|
||
// ToolState for array of imageIDs to a Report
|
||
// Assume Cornerstone metadata provider has access to Study / Series / Sop Instance UID
|
||
var allMeasurementGroups = [];
|
||
/* Patient ID
|
||
Warning - Missing attribute or value that would be needed to build DICOMDIR - Patient ID
|
||
Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Date
|
||
Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Time
|
||
Warning - Missing attribute or value that would be needed to build DICOMDIR - Study ID
|
||
*/
|
||
|
||
var sopInstanceUIDsToSeriesInstanceUIDMap = {};
|
||
var derivationSourceDatasets = [];
|
||
|
||
var _meta = MeasurementReport.generateDatasetMeta(); // Loop through each image in the toolData
|
||
|
||
|
||
Object.keys(toolState).forEach(function (imageId) {
|
||
var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
|
||
var generalSeriesModule = metadataProvider.get("generalSeriesModule", imageId);
|
||
var sopInstanceUID = sopCommonModule.sopInstanceUID,
|
||
sopClassUID = sopCommonModule.sopClassUID;
|
||
var studyInstanceUID = generalSeriesModule.studyInstanceUID,
|
||
seriesInstanceUID = generalSeriesModule.seriesInstanceUID;
|
||
sopInstanceUIDsToSeriesInstanceUIDMap[sopInstanceUID] = seriesInstanceUID;
|
||
|
||
if (!derivationSourceDatasets.find(function (dsd) {
|
||
return dsd.SeriesInstanceUID === seriesInstanceUID;
|
||
})) {
|
||
// Entry not present for series, create one.
|
||
var derivationSourceDataset = MeasurementReport.generateDerivationSourceDataset(studyInstanceUID, seriesInstanceUID);
|
||
derivationSourceDatasets.push(derivationSourceDataset);
|
||
}
|
||
|
||
var frameNumber = metadataProvider.get("frameNumber", imageId);
|
||
var toolData = toolState[imageId];
|
||
var toolTypes = Object.keys(toolData);
|
||
var ReferencedSOPSequence = {
|
||
ReferencedSOPClassUID: sopClassUID,
|
||
ReferencedSOPInstanceUID: sopInstanceUID
|
||
};
|
||
var instance = metadataProvider.get("instance", imageId);
|
||
|
||
if (instance && instance.NumberOfFrames && instance.NumberOfFrames > 1 || Normalizer.isMultiframeSOPClassUID(sopClassUID)) {
|
||
ReferencedSOPSequence.ReferencedFrameNumber = frameNumber;
|
||
} // Loop through each tool type for the image
|
||
|
||
|
||
var measurementGroups = [];
|
||
toolTypes.forEach(function (toolType) {
|
||
var group = getMeasurementGroup$1(toolType, toolData, ReferencedSOPSequence, worldToImageCoords);
|
||
|
||
if (group) {
|
||
measurementGroups.push(group);
|
||
}
|
||
});
|
||
allMeasurementGroups = allMeasurementGroups.concat(measurementGroups);
|
||
});
|
||
var tid1500MeasurementReport = new TID1500MeasurementReport({
|
||
TID1501MeasurementGroups: allMeasurementGroups
|
||
}, options);
|
||
var report = new StructuredReport(derivationSourceDatasets);
|
||
var contentItem = tid1500MeasurementReport.contentItem(derivationSourceDatasets, {
|
||
sopInstanceUIDsToSeriesInstanceUIDMap: sopInstanceUIDsToSeriesInstanceUIDMap
|
||
}); // Merge the derived dataset with the content from the Measurement Report
|
||
|
||
report.dataset = Object.assign(report.dataset, contentItem);
|
||
report.dataset._meta = _meta;
|
||
return report;
|
||
}
|
||
/**
|
||
* Generate Cornerstone tool state from dataset
|
||
* @param {object} dataset dataset
|
||
* @param {object} hooks
|
||
* @param {function} hooks.getToolClass Function to map dataset to a tool class
|
||
* @returns
|
||
*/
|
||
|
||
}, {
|
||
key: "generateToolState",
|
||
value: function generateToolState(dataset, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
|
||
var hooks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
|
||
|
||
// For now, bail out if the dataset is not a TID1500 SR with length measurements
|
||
if (dataset.ContentTemplateSequence.TemplateIdentifier !== "1500") {
|
||
throw new Error("This package can currently only interpret DICOM SR TID 1500");
|
||
}
|
||
|
||
var REPORT = "Imaging Measurements";
|
||
var GROUP = "Measurement Group";
|
||
var TRACKING_IDENTIFIER = "Tracking Identifier"; // Identify the Imaging Measurements
|
||
|
||
var imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT)); // Retrieve the Measurements themselves
|
||
|
||
var measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP)); // For each of the supported measurement types, compute the measurement data
|
||
|
||
var measurementData = {};
|
||
var cornerstoneToolClasses = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE;
|
||
var registeredToolClasses = [];
|
||
Object.keys(cornerstoneToolClasses).forEach(function (key) {
|
||
registeredToolClasses.push(cornerstoneToolClasses[key]);
|
||
measurementData[key] = [];
|
||
});
|
||
measurementGroups.forEach(function (measurementGroup, index) {
|
||
var measurementGroupContentSequence = toArray(measurementGroup.ContentSequence);
|
||
var TrackingIdentifierGroup = measurementGroupContentSequence.find(function (contentItem) {
|
||
return contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER;
|
||
});
|
||
var TrackingIdentifierValue = TrackingIdentifierGroup.TextValue;
|
||
var toolClass = hooks.getToolClass ? hooks.getToolClass(measurementGroup, dataset, registeredToolClasses) : registeredToolClasses.find(function (tc) {
|
||
return tc.isValidCornerstoneTrackingIdentifier(TrackingIdentifierValue);
|
||
});
|
||
|
||
if (toolClass) {
|
||
var measurement = toolClass.getMeasurementData(measurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata);
|
||
console.log("=== ".concat(toolClass.toolType, " ==="));
|
||
console.log(measurement);
|
||
measurementData[toolClass.toolType].push(measurement);
|
||
}
|
||
}); // NOTE: There is no way of knowing the cornerstone imageIds as that could be anything.
|
||
// That is up to the consumer to derive from the SOPInstanceUIDs.
|
||
|
||
return measurementData;
|
||
}
|
||
}, {
|
||
key: "registerTool",
|
||
value: function registerTool(toolClass) {
|
||
MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE[toolClass.utilityToolType] = toolClass;
|
||
MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolClass.toolType] = toolClass;
|
||
MeasurementReport.MEASUREMENT_BY_TOOLTYPE[toolClass.toolType] = toolClass.utilityToolType;
|
||
}
|
||
}]);
|
||
|
||
return MeasurementReport;
|
||
}();
|
||
MeasurementReport$2.MEASUREMENT_BY_TOOLTYPE = {};
|
||
MeasurementReport$2.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE = {};
|
||
MeasurementReport$2.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE = {};
|
||
|
||
var CORNERSTONE_3D_TAG = "Cornerstone3DTools@^0.1.0";
|
||
|
||
var LENGTH = "Length";
|
||
var trackingIdentifierTextValue$5 = "".concat(CORNERSTONE_3D_TAG, ":").concat(LENGTH);
|
||
|
||
var Length = /*#__PURE__*/function () {
|
||
function Length() {
|
||
_classCallCheck(this, Length);
|
||
} // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
|
||
|
||
|
||
_createClass(Length, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
|
||
var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Length.toolType),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
||
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
||
|
||
var referencedImageId = defaultState.annotation.metadata.referencedImageId;
|
||
var GraphicData = SCOORDGroup.GraphicData;
|
||
var worldCoords = [];
|
||
|
||
for (var i = 0; i < GraphicData.length; i += 2) {
|
||
var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
|
||
worldCoords.push(point);
|
||
}
|
||
|
||
var state = defaultState;
|
||
state.annotation.data = {
|
||
handles: {
|
||
points: [worldCoords[0], worldCoords[1]],
|
||
activeHandleIndex: 0,
|
||
textBox: {
|
||
hasMoved: false
|
||
}
|
||
},
|
||
cachedStats: _defineProperty({}, "imageId:".concat(referencedImageId), {
|
||
length: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
|
||
}),
|
||
frameNumber: ReferencedFrameNumber
|
||
};
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
|
||
var data = tool.data,
|
||
finding = tool.finding,
|
||
findingSites = tool.findingSites,
|
||
metadata = tool.metadata;
|
||
var _data$cachedStats = data.cachedStats,
|
||
cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
|
||
handles = data.handles;
|
||
var referencedImageId = metadata.referencedImageId;
|
||
|
||
if (!referencedImageId) {
|
||
throw new Error("Length.getTID300RepresentationArguments: referencedImageId is not defined");
|
||
}
|
||
|
||
var start = worldToImageCoords(referencedImageId, handles.points[0]);
|
||
var end = worldToImageCoords(referencedImageId, handles.points[1]);
|
||
var point1 = {
|
||
x: start[0],
|
||
y: start[1]
|
||
};
|
||
var point2 = {
|
||
x: end[0],
|
||
y: end[1]
|
||
};
|
||
|
||
var _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
|
||
distance = _ref.length;
|
||
|
||
return {
|
||
point1: point1,
|
||
point2: point2,
|
||
distance: distance,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue$5,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return Length;
|
||
}();
|
||
|
||
Length.toolType = LENGTH;
|
||
Length.utilityToolType = LENGTH;
|
||
Length.TID300Representation = Length$2;
|
||
|
||
Length.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone3DTag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === LENGTH;
|
||
};
|
||
|
||
MeasurementReport$2.registerTool(Length);
|
||
|
||
var BIDIRECTIONAL = "Bidirectional";
|
||
var LONG_AXIS = "Long Axis";
|
||
var SHORT_AXIS = "Short Axis";
|
||
var trackingIdentifierTextValue$4 = "".concat(CORNERSTONE_3D_TAG, ":").concat(BIDIRECTIONAL);
|
||
|
||
var Bidirectional = /*#__PURE__*/function () {
|
||
function Bidirectional() {
|
||
_classCallCheck(this, Bidirectional);
|
||
}
|
||
|
||
_createClass(Bidirectional, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
|
||
var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Bidirectional.toolType),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
||
|
||
var referencedImageId = defaultState.annotation.metadata.referencedImageId;
|
||
var ContentSequence = MeasurementGroup.ContentSequence;
|
||
var longAxisNUMGroup = toArray(ContentSequence).find(function (group) {
|
||
return group.ConceptNameCodeSequence.CodeMeaning === LONG_AXIS;
|
||
});
|
||
var longAxisSCOORDGroup = toArray(longAxisNUMGroup.ContentSequence).find(function (group) {
|
||
return group.ValueType === "SCOORD";
|
||
});
|
||
var shortAxisNUMGroup = toArray(ContentSequence).find(function (group) {
|
||
return group.ConceptNameCodeSequence.CodeMeaning === SHORT_AXIS;
|
||
});
|
||
var shortAxisSCOORDGroup = toArray(shortAxisNUMGroup.ContentSequence).find(function (group) {
|
||
return group.ValueType === "SCOORD";
|
||
});
|
||
var worldCoords = [];
|
||
[longAxisSCOORDGroup, shortAxisSCOORDGroup].forEach(function (group) {
|
||
var GraphicData = group.GraphicData;
|
||
|
||
for (var i = 0; i < GraphicData.length; i += 2) {
|
||
var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
|
||
worldCoords.push(point);
|
||
}
|
||
});
|
||
var state = defaultState;
|
||
state.annotation.data = {
|
||
handles: {
|
||
points: [worldCoords[0], worldCoords[1], worldCoords[2], worldCoords[3]],
|
||
activeHandleIndex: 0,
|
||
textBox: {
|
||
hasMoved: false
|
||
}
|
||
},
|
||
cachedStats: _defineProperty({}, "imageId:".concat(referencedImageId), {
|
||
length: longAxisNUMGroup.MeasuredValueSequence.NumericValue,
|
||
width: shortAxisNUMGroup.MeasuredValueSequence.NumericValue
|
||
}),
|
||
frameNumber: ReferencedFrameNumber
|
||
};
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
|
||
var data = tool.data,
|
||
finding = tool.finding,
|
||
findingSites = tool.findingSites,
|
||
metadata = tool.metadata;
|
||
var _data$cachedStats = data.cachedStats,
|
||
cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
|
||
handles = data.handles;
|
||
var referencedImageId = metadata.referencedImageId;
|
||
|
||
if (!referencedImageId) {
|
||
throw new Error("Bidirectional.getTID300RepresentationArguments: referencedImageId is not defined");
|
||
}
|
||
|
||
var _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
|
||
length = _ref.length,
|
||
width = _ref.width;
|
||
|
||
var points = handles.points; // Find the length and width point pairs by comparing the distances of the points at 0,1 to points at 2,3
|
||
|
||
var firstPointPairs = [points[0], points[1]];
|
||
var secondPointPairs = [points[2], points[3]];
|
||
var firstPointPairsDistance = Math.sqrt(Math.pow(firstPointPairs[0][0] - firstPointPairs[1][0], 2) + Math.pow(firstPointPairs[0][1] - firstPointPairs[1][1], 2) + Math.pow(firstPointPairs[0][2] - firstPointPairs[1][2], 2));
|
||
var secondPointPairsDistance = Math.sqrt(Math.pow(secondPointPairs[0][0] - secondPointPairs[1][0], 2) + Math.pow(secondPointPairs[0][1] - secondPointPairs[1][1], 2) + Math.pow(secondPointPairs[0][2] - secondPointPairs[1][2], 2));
|
||
var shortAxisPoints;
|
||
var longAxisPoints;
|
||
|
||
if (firstPointPairsDistance > secondPointPairsDistance) {
|
||
shortAxisPoints = firstPointPairs;
|
||
longAxisPoints = secondPointPairs;
|
||
} else {
|
||
shortAxisPoints = secondPointPairs;
|
||
longAxisPoints = firstPointPairs;
|
||
}
|
||
|
||
var longAxisStartImage = worldToImageCoords(referencedImageId, shortAxisPoints[0]);
|
||
var longAxisEndImage = worldToImageCoords(referencedImageId, shortAxisPoints[1]);
|
||
var shortAxisStartImage = worldToImageCoords(referencedImageId, longAxisPoints[0]);
|
||
var shortAxisEndImage = worldToImageCoords(referencedImageId, longAxisPoints[1]);
|
||
return {
|
||
longAxis: {
|
||
point1: {
|
||
x: longAxisStartImage[0],
|
||
y: longAxisStartImage[1]
|
||
},
|
||
point2: {
|
||
x: longAxisEndImage[0],
|
||
y: longAxisEndImage[1]
|
||
}
|
||
},
|
||
shortAxis: {
|
||
point1: {
|
||
x: shortAxisStartImage[0],
|
||
y: shortAxisStartImage[1]
|
||
},
|
||
point2: {
|
||
x: shortAxisEndImage[0],
|
||
y: shortAxisEndImage[1]
|
||
}
|
||
},
|
||
longAxisLength: length,
|
||
shortAxisLength: width,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue$4,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return Bidirectional;
|
||
}();
|
||
|
||
Bidirectional.toolType = BIDIRECTIONAL;
|
||
Bidirectional.utilityToolType = BIDIRECTIONAL;
|
||
Bidirectional.TID300Representation = Bidirectional$2;
|
||
|
||
Bidirectional.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone3DTag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === BIDIRECTIONAL;
|
||
};
|
||
|
||
MeasurementReport$2.registerTool(Bidirectional);
|
||
|
||
var ELLIPTICALROI = "EllipticalROI";
|
||
var EPSILON = 1e-4;
|
||
var trackingIdentifierTextValue$3 = "".concat(CORNERSTONE_3D_TAG, ":").concat(ELLIPTICALROI);
|
||
|
||
var EllipticalROI = /*#__PURE__*/function () {
|
||
function EllipticalROI() {
|
||
_classCallCheck(this, EllipticalROI);
|
||
}
|
||
|
||
_createClass(EllipticalROI, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
|
||
var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, EllipticalROI.toolType),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
||
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
||
|
||
var referencedImageId = defaultState.annotation.metadata.referencedImageId;
|
||
var GraphicData = SCOORDGroup.GraphicData; // GraphicData is ordered as [majorAxisStartX, majorAxisStartY, majorAxisEndX, majorAxisEndY, minorAxisStartX, minorAxisStartY, minorAxisEndX, minorAxisEndY]
|
||
// But Cornerstone3D points are ordered as top, bottom, left, right for the
|
||
// ellipse so we need to identify if the majorAxis is horizontal or vertical
|
||
// in the image plane and then choose the correct points to use for the ellipse.
|
||
|
||
var pointsWorld = [];
|
||
|
||
for (var i = 0; i < GraphicData.length; i += 2) {
|
||
var worldPos = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
|
||
pointsWorld.push(worldPos);
|
||
}
|
||
|
||
var majorAxisStart = fromValues.apply(vec3, _toConsumableArray(pointsWorld[0]));
|
||
var majorAxisEnd = fromValues.apply(vec3, _toConsumableArray(pointsWorld[1]));
|
||
var minorAxisStart = fromValues.apply(vec3, _toConsumableArray(pointsWorld[2]));
|
||
var minorAxisEnd = fromValues.apply(vec3, _toConsumableArray(pointsWorld[3]));
|
||
var majorAxisVec = create();
|
||
sub(majorAxisVec, majorAxisEnd, majorAxisStart); // normalize majorAxisVec to avoid scaling issues
|
||
|
||
normalize$1(majorAxisVec, majorAxisVec);
|
||
var minorAxisVec = create();
|
||
sub(minorAxisVec, minorAxisEnd, minorAxisStart);
|
||
normalize$1(minorAxisVec, minorAxisVec);
|
||
var imagePlaneModule = metadata.get("imagePlaneModule", referencedImageId);
|
||
|
||
if (!imagePlaneModule) {
|
||
throw new Error("imageId does not have imagePlaneModule metadata");
|
||
}
|
||
|
||
var columnCosines = imagePlaneModule.columnCosines; // find which axis is parallel to the columnCosines
|
||
|
||
var columnCosinesVec = fromValues.apply(vec3, _toConsumableArray(columnCosines));
|
||
var projectedMajorAxisOnColVec = dot(columnCosinesVec, majorAxisVec);
|
||
var projectedMinorAxisOnColVec = dot(columnCosinesVec, minorAxisVec);
|
||
var absoluteOfMajorDotProduct = Math.abs(projectedMajorAxisOnColVec);
|
||
var absoluteOfMinorDotProduct = Math.abs(projectedMinorAxisOnColVec);
|
||
var ellipsePoints = [];
|
||
|
||
if (Math.abs(absoluteOfMajorDotProduct - 1) < EPSILON) {
|
||
ellipsePoints = [pointsWorld[0], pointsWorld[1], pointsWorld[2], pointsWorld[3]];
|
||
} else if (Math.abs(absoluteOfMinorDotProduct - 1) < EPSILON) {
|
||
ellipsePoints = [pointsWorld[2], pointsWorld[3], pointsWorld[0], pointsWorld[1]];
|
||
} else {
|
||
console.warn("OBLIQUE ELLIPSE NOT YET SUPPORTED");
|
||
}
|
||
|
||
var state = defaultState;
|
||
state.annotation.data = {
|
||
handles: {
|
||
points: _toConsumableArray(ellipsePoints),
|
||
activeHandleIndex: 0,
|
||
textBox: {
|
||
hasMoved: false
|
||
}
|
||
},
|
||
cachedStats: _defineProperty({}, "imageId:".concat(referencedImageId), {
|
||
area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
|
||
}),
|
||
frameNumber: ReferencedFrameNumber
|
||
};
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
|
||
var data = tool.data,
|
||
finding = tool.finding,
|
||
findingSites = tool.findingSites,
|
||
metadata = tool.metadata;
|
||
var _data$cachedStats = data.cachedStats,
|
||
cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
|
||
handles = data.handles;
|
||
var referencedImageId = metadata.referencedImageId;
|
||
|
||
if (!referencedImageId) {
|
||
throw new Error("EllipticalROI.getTID300RepresentationArguments: referencedImageId is not defined");
|
||
}
|
||
|
||
var top = worldToImageCoords(referencedImageId, handles.points[0]);
|
||
var bottom = worldToImageCoords(referencedImageId, handles.points[1]);
|
||
var left = worldToImageCoords(referencedImageId, handles.points[2]);
|
||
var right = worldToImageCoords(referencedImageId, handles.points[3]); // find the major axis and minor axis
|
||
|
||
var topBottomLength = Math.abs(top[1] - bottom[1]);
|
||
var leftRightLength = Math.abs(left[0] - right[0]);
|
||
var points = [];
|
||
|
||
if (topBottomLength > leftRightLength) {
|
||
// major axis is bottom to top
|
||
points.push({
|
||
x: top[0],
|
||
y: top[1]
|
||
});
|
||
points.push({
|
||
x: bottom[0],
|
||
y: bottom[1]
|
||
}); // minor axis is left to right
|
||
|
||
points.push({
|
||
x: left[0],
|
||
y: left[1]
|
||
});
|
||
points.push({
|
||
x: right[0],
|
||
y: right[1]
|
||
});
|
||
} else {
|
||
// major axis is left to right
|
||
points.push({
|
||
x: left[0],
|
||
y: left[1]
|
||
});
|
||
points.push({
|
||
x: right[0],
|
||
y: right[1]
|
||
}); // minor axis is bottom to top
|
||
|
||
points.push({
|
||
x: top[0],
|
||
y: top[1]
|
||
});
|
||
points.push({
|
||
x: bottom[0],
|
||
y: bottom[1]
|
||
});
|
||
}
|
||
|
||
var _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
|
||
area = _ref.area;
|
||
|
||
return {
|
||
area: area,
|
||
points: points,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue$3,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return EllipticalROI;
|
||
}();
|
||
|
||
EllipticalROI.toolType = ELLIPTICALROI;
|
||
EllipticalROI.utilityToolType = ELLIPTICALROI;
|
||
EllipticalROI.TID300Representation = Ellipse$1;
|
||
|
||
EllipticalROI.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone3DTag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
|
||
return false;
|
||
} // The following is needed since the new cornerstone3D has changed
|
||
// the EllipticalRoi toolName (which was in the old cornerstone) to EllipticalROI
|
||
|
||
|
||
return toolType.toLowerCase() === ELLIPTICALROI.toLowerCase();
|
||
};
|
||
|
||
MeasurementReport$2.registerTool(EllipticalROI);
|
||
|
||
var ARROW_ANNOTATE = "ArrowAnnotate";
|
||
var trackingIdentifierTextValue$2 = "".concat(CORNERSTONE_3D_TAG, ":").concat(ARROW_ANNOTATE);
|
||
var codeValues = CodingScheme.codeValues,
|
||
CodingSchemeDesignator = CodingScheme.CodingSchemeDesignator;
|
||
|
||
var ArrowAnnotate = /*#__PURE__*/function () {
|
||
function ArrowAnnotate() {
|
||
_classCallCheck(this, ArrowAnnotate);
|
||
}
|
||
|
||
_createClass(ArrowAnnotate, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
|
||
var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, ArrowAnnotate.toolType),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
||
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
||
|
||
var referencedImageId = defaultState.annotation.metadata.referencedImageId;
|
||
var text = defaultState.annotation.metadata.label;
|
||
var GraphicData = SCOORDGroup.GraphicData;
|
||
var worldCoords = [];
|
||
|
||
for (var i = 0; i < GraphicData.length; i += 2) {
|
||
var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
|
||
worldCoords.push(point);
|
||
} // Since the arrowAnnotate measurement is just a point, to generate the tool state
|
||
// we derive the second point based on the image size relative to the first point.
|
||
|
||
|
||
if (worldCoords.length === 1) {
|
||
var imagePixelModule = metadata.get("imagePixelModule", referencedImageId);
|
||
var xOffset = 10;
|
||
var yOffset = 10;
|
||
|
||
if (imagePixelModule) {
|
||
var columns = imagePixelModule.columns,
|
||
rows = imagePixelModule.rows;
|
||
xOffset = columns / 10;
|
||
yOffset = rows / 10;
|
||
}
|
||
|
||
var secondPoint = imageToWorldCoords(referencedImageId, [GraphicData[0] + xOffset, GraphicData[1] + yOffset]);
|
||
worldCoords.push(secondPoint);
|
||
}
|
||
|
||
var state = defaultState;
|
||
state.annotation.data = {
|
||
text: text,
|
||
handles: {
|
||
arrowFirst: true,
|
||
points: [worldCoords[0], worldCoords[1]],
|
||
activeHandleIndex: 0,
|
||
textBox: {
|
||
hasMoved: false
|
||
}
|
||
},
|
||
frameNumber: ReferencedFrameNumber
|
||
};
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
|
||
var data = tool.data,
|
||
metadata = tool.metadata;
|
||
var finding = tool.finding,
|
||
findingSites = tool.findingSites;
|
||
var referencedImageId = metadata.referencedImageId;
|
||
|
||
if (!referencedImageId) {
|
||
throw new Error("ArrowAnnotate.getTID300RepresentationArguments: referencedImageId is not defined");
|
||
}
|
||
|
||
var _data$handles = data.handles,
|
||
points = _data$handles.points,
|
||
arrowFirst = _data$handles.arrowFirst;
|
||
var point;
|
||
|
||
if (arrowFirst) {
|
||
point = points[0];
|
||
} else {
|
||
point = points[1];
|
||
}
|
||
|
||
var pointImage = worldToImageCoords(referencedImageId, point);
|
||
var TID300RepresentationArguments = {
|
||
points: [{
|
||
x: pointImage[0],
|
||
y: pointImage[1]
|
||
}],
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue$2,
|
||
findingSites: findingSites || []
|
||
}; // If freetext finding isn't present, add it from the tool text.
|
||
|
||
if (!finding || finding.CodeValue !== codeValues.CORNERSTONEFREETEXT) {
|
||
finding = {
|
||
CodeValue: codeValues.CORNERSTONEFREETEXT,
|
||
CodingSchemeDesignator: CodingSchemeDesignator,
|
||
CodeMeaning: data.text
|
||
};
|
||
}
|
||
|
||
TID300RepresentationArguments.finding = finding;
|
||
return TID300RepresentationArguments;
|
||
}
|
||
}]);
|
||
|
||
return ArrowAnnotate;
|
||
}();
|
||
|
||
ArrowAnnotate.toolType = ARROW_ANNOTATE;
|
||
ArrowAnnotate.utilityToolType = ARROW_ANNOTATE;
|
||
ArrowAnnotate.TID300Representation = Point$1;
|
||
|
||
ArrowAnnotate.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone3DTag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === ARROW_ANNOTATE;
|
||
};
|
||
|
||
MeasurementReport$2.registerTool(ArrowAnnotate);
|
||
|
||
var PROBE = "Probe";
|
||
var trackingIdentifierTextValue$1 = "".concat(CORNERSTONE_3D_TAG, ":").concat(PROBE);
|
||
|
||
var Probe = /*#__PURE__*/function () {
|
||
function Probe() {
|
||
_classCallCheck(this, Probe);
|
||
}
|
||
|
||
_createClass(Probe, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
|
||
var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Probe.toolType),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
||
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
||
|
||
var referencedImageId = defaultState.annotation.metadata.referencedImageId;
|
||
var GraphicData = SCOORDGroup.GraphicData;
|
||
var worldCoords = [];
|
||
|
||
for (var i = 0; i < GraphicData.length; i += 2) {
|
||
var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
|
||
worldCoords.push(point);
|
||
}
|
||
|
||
var state = defaultState;
|
||
state.annotation.data = {
|
||
handles: {
|
||
points: worldCoords,
|
||
activeHandleIndex: null,
|
||
textBox: {
|
||
hasMoved: false
|
||
}
|
||
},
|
||
frameNumber: ReferencedFrameNumber
|
||
};
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
|
||
var data = tool.data,
|
||
metadata = tool.metadata;
|
||
var finding = tool.finding,
|
||
findingSites = tool.findingSites;
|
||
var referencedImageId = metadata.referencedImageId;
|
||
|
||
if (!referencedImageId) {
|
||
throw new Error("Probe.getTID300RepresentationArguments: referencedImageId is not defined");
|
||
}
|
||
|
||
var points = data.handles.points;
|
||
var pointsImage = points.map(function (point) {
|
||
var pointImage = worldToImageCoords(referencedImageId, point);
|
||
return {
|
||
x: pointImage[0],
|
||
y: pointImage[1]
|
||
};
|
||
});
|
||
var TID300RepresentationArguments = {
|
||
points: pointsImage,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue$1,
|
||
findingSites: findingSites || [],
|
||
finding: finding
|
||
};
|
||
return TID300RepresentationArguments;
|
||
}
|
||
}]);
|
||
|
||
return Probe;
|
||
}();
|
||
|
||
Probe.toolType = PROBE;
|
||
Probe.utilityToolType = PROBE;
|
||
Probe.TID300Representation = Point$1;
|
||
|
||
Probe.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone3DTag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === PROBE;
|
||
};
|
||
|
||
MeasurementReport$2.registerTool(Probe);
|
||
|
||
var PLANARFREEHANDROI = "PlanarFreehandROI";
|
||
var trackingIdentifierTextValue = "".concat(CORNERSTONE_3D_TAG, ":").concat(PLANARFREEHANDROI);
|
||
var closedContourThreshold = 1e-5;
|
||
|
||
var PlanarFreehandROI = /*#__PURE__*/function () {
|
||
function PlanarFreehandROI() {
|
||
_classCallCheck(this, PlanarFreehandROI);
|
||
}
|
||
|
||
_createClass(PlanarFreehandROI, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
|
||
var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, PlanarFreehandROI.toolType),
|
||
defaultState = _MeasurementReport$ge.defaultState,
|
||
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
||
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
||
|
||
var referencedImageId = defaultState.annotation.metadata.referencedImageId;
|
||
var GraphicData = SCOORDGroup.GraphicData;
|
||
var worldCoords = [];
|
||
|
||
for (var i = 0; i < GraphicData.length; i += 2) {
|
||
var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
|
||
worldCoords.push(point);
|
||
}
|
||
|
||
var distanceBetweenFirstAndLastPoint = distance(worldCoords[worldCoords.length - 1], worldCoords[0]);
|
||
var isOpenContour = true; // If the contour is closed, this should have been encoded as exactly the same point, so check for a very small difference.
|
||
|
||
if (distanceBetweenFirstAndLastPoint < closedContourThreshold) {
|
||
worldCoords.pop(); // Remove the last element which is duplicated.
|
||
|
||
isOpenContour = false;
|
||
}
|
||
|
||
var points = [];
|
||
|
||
if (isOpenContour) {
|
||
points.push(worldCoords[0], worldCoords[worldCoords.length - 1]);
|
||
}
|
||
|
||
var state = defaultState;
|
||
state.annotation.data = {
|
||
polyline: worldCoords,
|
||
isOpenContour: isOpenContour,
|
||
handles: {
|
||
points: points,
|
||
activeHandleIndex: null,
|
||
textBox: {
|
||
hasMoved: false
|
||
}
|
||
},
|
||
frameNumber: ReferencedFrameNumber
|
||
};
|
||
return state;
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
|
||
var data = tool.data,
|
||
finding = tool.finding,
|
||
findingSites = tool.findingSites,
|
||
metadata = tool.metadata;
|
||
var isOpenContour = data.isOpenContour,
|
||
polyline = data.polyline;
|
||
var referencedImageId = metadata.referencedImageId;
|
||
|
||
if (!referencedImageId) {
|
||
throw new Error("PlanarFreehandROI.getTID300RepresentationArguments: referencedImageId is not defined");
|
||
}
|
||
|
||
var points = polyline.map(function (worldPos) {
|
||
return worldToImageCoords(referencedImageId, worldPos);
|
||
});
|
||
|
||
if (!isOpenContour) {
|
||
// Need to repeat the first point at the end of to have an explicitly closed contour.
|
||
var firstPoint = points[0]; // Explicitly expand to avoid ciruclar references.
|
||
|
||
points.push([firstPoint[0], firstPoint[1]]);
|
||
}
|
||
|
||
var area = 0; // TODO -> The tool doesn't have these stats yet.
|
||
|
||
var perimeter = 0;
|
||
return {
|
||
points: points,
|
||
area: area,
|
||
perimeter: perimeter,
|
||
trackingIdentifierTextValue: trackingIdentifierTextValue,
|
||
finding: finding,
|
||
findingSites: findingSites || []
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return PlanarFreehandROI;
|
||
}();
|
||
|
||
PlanarFreehandROI.toolType = PLANARFREEHANDROI;
|
||
PlanarFreehandROI.utilityToolType = PLANARFREEHANDROI;
|
||
PlanarFreehandROI.TID300Representation = Polyline$1;
|
||
|
||
PlanarFreehandROI.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
||
if (!TrackingIdentifier.includes(":")) {
|
||
return false;
|
||
}
|
||
|
||
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
||
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
||
cornerstone3DTag = _TrackingIdentifier$s2[0],
|
||
toolType = _TrackingIdentifier$s2[1];
|
||
|
||
if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
|
||
return false;
|
||
}
|
||
|
||
return toolType === PLANARFREEHANDROI;
|
||
};
|
||
|
||
MeasurementReport$2.registerTool(PlanarFreehandROI);
|
||
|
||
var Cornerstone3D = {
|
||
Length: Length,
|
||
Bidirectional: Bidirectional,
|
||
EllipticalROI: EllipticalROI,
|
||
ArrowAnnotate: ArrowAnnotate,
|
||
Probe: Probe,
|
||
PlanarFreehandROI: PlanarFreehandROI,
|
||
MeasurementReport: MeasurementReport$2,
|
||
CodeScheme: CodingScheme,
|
||
CORNERSTONE_3D_TAG: CORNERSTONE_3D_TAG
|
||
};
|
||
|
||
// Should we move it to Colors.js
|
||
|
||
function dicomlab2RGBA(cielab) {
|
||
var rgba = Colors.dicomlab2RGB(cielab).map(function (x) {
|
||
return Math.round(x * 255);
|
||
});
|
||
rgba.push(255);
|
||
return rgba;
|
||
} // TODO: Copied these functions in from VTK Math so we don't need a dependency.
|
||
// I guess we should put them somewhere
|
||
// https://github.com/Kitware/vtk-js/blob/master/Sources/Common/Core/Math/index.js
|
||
|
||
|
||
function cross(x, y, out) {
|
||
var Zx = x[1] * y[2] - x[2] * y[1];
|
||
var Zy = x[2] * y[0] - x[0] * y[2];
|
||
var Zz = x[0] * y[1] - x[1] * y[0];
|
||
out[0] = Zx;
|
||
out[1] = Zy;
|
||
out[2] = Zz;
|
||
}
|
||
|
||
function norm(x) {
|
||
var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;
|
||
|
||
switch (n) {
|
||
case 1:
|
||
return Math.abs(x);
|
||
|
||
case 2:
|
||
return Math.sqrt(x[0] * x[0] + x[1] * x[1]);
|
||
|
||
case 3:
|
||
return Math.sqrt(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]);
|
||
|
||
default:
|
||
{
|
||
var sum = 0;
|
||
|
||
for (var i = 0; i < n; i++) {
|
||
sum += x[i] * x[i];
|
||
}
|
||
|
||
return Math.sqrt(sum);
|
||
}
|
||
}
|
||
}
|
||
|
||
function normalize(x) {
|
||
var den = norm(x);
|
||
|
||
if (den !== 0.0) {
|
||
x[0] /= den;
|
||
x[1] /= den;
|
||
x[2] /= den;
|
||
}
|
||
|
||
return den;
|
||
}
|
||
|
||
function subtract(a, b, out) {
|
||
out[0] = a[0] - b[0];
|
||
out[1] = a[1] - b[1];
|
||
out[2] = a[2] - b[2];
|
||
} // TODO: This is a useful utility on its own. We should move it somewhere?
|
||
// dcmjs.adapters.vtk.Multiframe? dcmjs.utils?
|
||
|
||
|
||
function geometryFromFunctionalGroups(dataset, PerFrameFunctionalGroups) {
|
||
var geometry = {};
|
||
var pixelMeasures = dataset.SharedFunctionalGroupsSequence.PixelMeasuresSequence;
|
||
var planeOrientation = dataset.SharedFunctionalGroupsSequence.PlaneOrientationSequence; // Find the origin of the volume from the PerFrameFunctionalGroups' ImagePositionPatient values
|
||
//
|
||
// TODO: assumes sorted frames. This should read the ImagePositionPatient from each frame and
|
||
// sort them to obtain the first and last position along the acquisition axis.
|
||
|
||
var firstFunctionalGroup = PerFrameFunctionalGroups[0];
|
||
var lastFunctionalGroup = PerFrameFunctionalGroups[PerFrameFunctionalGroups.length - 1];
|
||
var firstPosition = firstFunctionalGroup.PlanePositionSequence.ImagePositionPatient.map(Number);
|
||
var lastPosition = lastFunctionalGroup.PlanePositionSequence.ImagePositionPatient.map(Number);
|
||
geometry.origin = firstPosition; // NB: DICOM PixelSpacing is defined as Row then Column,
|
||
// unlike ImageOrientationPatient
|
||
|
||
geometry.spacing = [pixelMeasures.PixelSpacing[1], pixelMeasures.PixelSpacing[0], pixelMeasures.SpacingBetweenSlices].map(Number);
|
||
geometry.dimensions = [dataset.Columns, dataset.Rows, PerFrameFunctionalGroups.length].map(Number);
|
||
var orientation = planeOrientation.ImageOrientationPatient.map(Number);
|
||
var columnStepToPatient = orientation.slice(0, 3);
|
||
var rowStepToPatient = orientation.slice(3, 6);
|
||
geometry.planeNormal = [];
|
||
cross(columnStepToPatient, rowStepToPatient, geometry.planeNormal);
|
||
geometry.sliceStep = [];
|
||
subtract(lastPosition, firstPosition, geometry.sliceStep);
|
||
normalize(geometry.sliceStep);
|
||
geometry.direction = columnStepToPatient.concat(rowStepToPatient).concat(geometry.sliceStep);
|
||
return geometry;
|
||
}
|
||
|
||
var Segmentation = /*#__PURE__*/function () {
|
||
function Segmentation() {
|
||
_classCallCheck(this, Segmentation);
|
||
}
|
||
/**
|
||
* Produces an array of Segments from an input DICOM Segmentation dataset
|
||
*
|
||
* Segments are returned with Geometry values that can be used to create
|
||
* VTK Image Data objects.
|
||
*
|
||
* @example Example usage to create VTK Volume actors from each segment:
|
||
*
|
||
* const actors = [];
|
||
* const segments = generateToolState(dataset);
|
||
* segments.forEach(segment => {
|
||
* // now make actors using the segment information
|
||
* const scalarArray = vtk.Common.Core.vtkDataArray.newInstance({
|
||
* name: "Scalars",
|
||
* numberOfComponents: 1,
|
||
* values: segment.pixelData,
|
||
* });
|
||
*
|
||
* const imageData = vtk.Common.DataModel.vtkImageData.newInstance();
|
||
* imageData.getPointData().setScalars(scalarArray);
|
||
* imageData.setDimensions(geometry.dimensions);
|
||
* imageData.setSpacing(geometry.spacing);
|
||
* imageData.setOrigin(geometry.origin);
|
||
* imageData.setDirection(geometry.direction);
|
||
*
|
||
* const mapper = vtk.Rendering.Core.vtkVolumeMapper.newInstance();
|
||
* mapper.setInputData(imageData);
|
||
* mapper.setSampleDistance(2.);
|
||
*
|
||
* const actor = vtk.Rendering.Core.vtkVolume.newInstance();
|
||
* actor.setMapper(mapper);
|
||
*
|
||
* actors.push(actor);
|
||
* });
|
||
*
|
||
* @param dataset
|
||
* @return {{}}
|
||
*/
|
||
|
||
|
||
_createClass(Segmentation, null, [{
|
||
key: "generateSegments",
|
||
value: function generateSegments(dataset) {
|
||
if (dataset.SegmentSequence.constructor.name !== "Array") {
|
||
dataset.SegmentSequence = [dataset.SegmentSequence];
|
||
}
|
||
|
||
dataset.SegmentSequence.forEach(function (segment) {
|
||
// TODO: other interesting fields could be extracted from the segment
|
||
// TODO: Read SegmentsOverlay field
|
||
// http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.8.20.2.html
|
||
// TODO: Looks like vtkColor only wants RGB in 0-1 values.
|
||
// Why was this example converting to RGBA with 0-255 values?
|
||
var color = dicomlab2RGBA(segment.RecommendedDisplayCIELabValue);
|
||
segments[segment.SegmentNumber] = {
|
||
color: color,
|
||
functionalGroups: [],
|
||
offset: null,
|
||
size: null,
|
||
pixelData: null
|
||
};
|
||
}); // make a list of functional groups per segment
|
||
|
||
dataset.PerFrameFunctionalGroupsSequence.forEach(function (functionalGroup) {
|
||
var segmentNumber = functionalGroup.SegmentIdentificationSequence.ReferencedSegmentNumber;
|
||
segments[segmentNumber].functionalGroups.push(functionalGroup);
|
||
}); // determine per-segment index into the pixel data
|
||
// TODO: only handles one-bit-per pixel
|
||
|
||
var frameSize = Math.ceil(dataset.Rows * dataset.Columns / 8);
|
||
var nextOffset = 0;
|
||
Object.keys(segments).forEach(function (segmentNumber) {
|
||
var segment = segments[segmentNumber];
|
||
segment.numberOfFrames = segment.functionalGroups.length;
|
||
segment.size = segment.numberOfFrames * frameSize;
|
||
segment.offset = nextOffset;
|
||
nextOffset = segment.offset + segment.size;
|
||
var packedSegment = dataset.PixelData.slice(segment.offset, nextOffset);
|
||
segment.pixelData = BitArray.unpack(packedSegment);
|
||
var geometry = geometryFromFunctionalGroups(dataset, segment.functionalGroups);
|
||
segment.geometry = geometry;
|
||
});
|
||
return segments;
|
||
}
|
||
}]);
|
||
|
||
return Segmentation;
|
||
}();
|
||
|
||
var VTKjs = {
|
||
Segmentation: Segmentation
|
||
};
|
||
|
||
function getTID300ContentItem(tool, toolClass) {
|
||
var args = toolClass.getTID300RepresentationArguments(tool);
|
||
args.use3DSpatialCoordinates = true;
|
||
return new toolClass.TID300Representation(args);
|
||
}
|
||
|
||
function getMeasurementGroup(graphicType, measurements) {
|
||
var toolClass = MeasurementReport$1.MICROSCOPY_TOOL_CLASSES_BY_TOOL_TYPE[graphicType]; // Loop through the array of tool instances
|
||
// for this tool
|
||
|
||
var Measurements = measurements.map(function (tool) {
|
||
return getTID300ContentItem(tool, toolClass);
|
||
});
|
||
return new TID1501MeasurementGroup(Measurements);
|
||
}
|
||
|
||
var MeasurementReport$1 = /*#__PURE__*/function () {
|
||
function MeasurementReport() {
|
||
_classCallCheck(this, MeasurementReport);
|
||
}
|
||
|
||
_createClass(MeasurementReport, null, [{
|
||
key: "generateReport",
|
||
value: function generateReport(rois, metadataProvider, options) {
|
||
// Input is all ROIS returned via viewer.getALLROIs()
|
||
// let report = MeasurementReport.generateReport(viewer.getAllROIs());
|
||
// Sort and split into arrays by scoord3d.graphicType
|
||
var measurementsByGraphicType = {};
|
||
rois.forEach(function (roi) {
|
||
var graphicType = roi.scoord3d.graphicType;
|
||
|
||
if (graphicType !== "POINT") {
|
||
// adding z coord as 0
|
||
roi.scoord3d.graphicData.map(function (coord) {
|
||
return coord.push(0);
|
||
});
|
||
}
|
||
|
||
if (!measurementsByGraphicType[graphicType]) {
|
||
measurementsByGraphicType[graphicType] = [];
|
||
}
|
||
|
||
measurementsByGraphicType[graphicType].push(roi.scoord3d);
|
||
}); // For each measurement, get the utility arguments using the adapter, and create TID300 Measurement
|
||
// Group these TID300 Measurements into a TID1501 Measurement Group (for each graphicType)
|
||
// Use TID1500MeasurementReport utility to create a single report from the created groups
|
||
// return report;
|
||
|
||
var allMeasurementGroups = [];
|
||
var measurementGroups = [];
|
||
Object.keys(measurementsByGraphicType).forEach(function (graphicType) {
|
||
var measurements = measurementsByGraphicType[graphicType];
|
||
var group = getMeasurementGroup(graphicType, measurements);
|
||
|
||
if (group) {
|
||
measurementGroups.push(group);
|
||
}
|
||
|
||
allMeasurementGroups = allMeasurementGroups.concat(measurementGroups);
|
||
});
|
||
|
||
var _MeasurementReport = new TID1500MeasurementReport({
|
||
TID1501MeasurementGroups: allMeasurementGroups
|
||
}, options); // TODO: what is the correct metaheader
|
||
// http://dicom.nema.org/medical/Dicom/current/output/chtml/part10/chapter_7.html
|
||
// TODO: move meta creation to happen in derivations.js
|
||
|
||
|
||
var fileMetaInformationVersionArray = new Uint8Array(2);
|
||
fileMetaInformationVersionArray[1] = 1; // TODO: Find out how to reference the data from dicom-microscopy-viewer
|
||
|
||
var studyInstanceUID = "12.4";
|
||
var seriesInstanceUID = "12.4";
|
||
var derivationSourceDataset = {
|
||
StudyInstanceUID: studyInstanceUID,
|
||
SeriesInstanceUID: seriesInstanceUID //SOPInstanceUID: sopInstanceUID, // TODO: Necessary?
|
||
//SOPClassUID: sopClassUID,
|
||
|
||
};
|
||
var _meta = {
|
||
FileMetaInformationVersion: {
|
||
Value: [fileMetaInformationVersionArray.buffer],
|
||
vr: "OB"
|
||
},
|
||
//MediaStorageSOPClassUID
|
||
//MediaStorageSOPInstanceUID: sopCommonModule.sopInstanceUID,
|
||
TransferSyntaxUID: {
|
||
Value: ["1.2.840.10008.1.2.1"],
|
||
vr: "UI"
|
||
},
|
||
ImplementationClassUID: {
|
||
Value: [DicomMetaDictionary.uid()],
|
||
// TODO: could be git hash or other valid id
|
||
vr: "UI"
|
||
},
|
||
ImplementationVersionName: {
|
||
Value: ["dcmjs"],
|
||
vr: "SH"
|
||
}
|
||
};
|
||
var _vrMap = {
|
||
PixelData: "OW"
|
||
};
|
||
derivationSourceDataset._meta = _meta;
|
||
derivationSourceDataset._vrMap = _vrMap;
|
||
var report = new StructuredReport([derivationSourceDataset]);
|
||
|
||
var contentItem = _MeasurementReport.contentItem(derivationSourceDataset); // Merge the derived dataset with the content from the Measurement Report
|
||
|
||
|
||
report.dataset = Object.assign(report.dataset, contentItem);
|
||
report.dataset._meta = _meta;
|
||
return report;
|
||
} //@ToDo
|
||
|
||
}, {
|
||
key: "generateToolState",
|
||
value: function generateToolState(dataset) {
|
||
// For now, bail out if the dataset is not a TID1500 SR with length measurements
|
||
if (dataset.ContentTemplateSequence.TemplateIdentifier !== "1500") {
|
||
throw new Error("This package can currently only interpret DICOM SR TID 1500");
|
||
}
|
||
|
||
var REPORT = "Imaging Measurements";
|
||
var GROUP = "Measurement Group"; // Split the imagingMeasurementContent into measurement groups by their code meaning
|
||
|
||
var imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT)); // Retrieve the Measurements themselves
|
||
|
||
var measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP)); // // For each of the supported measurement types, compute the measurement data
|
||
|
||
var measurementData = {};
|
||
measurementGroups.forEach(function (mg) {
|
||
Object.keys(MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE).forEach(function (measurementType) {
|
||
// Find supported measurement types in the Structured Report
|
||
var measurementGroupContentSequence = toArray(mg.ContentSequence);
|
||
var measurementContent = measurementGroupContentSequence.filter(graphicTypeEquals(measurementType.toUpperCase()));
|
||
|
||
if (!measurementContent || measurementContent.length === 0) {
|
||
return;
|
||
}
|
||
|
||
var toolClass = MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE[measurementType];
|
||
var toolType = toolClass.toolType;
|
||
|
||
if (!toolClass.getMeasurementData) {
|
||
throw new Error("MICROSCOPY Tool Adapters must define a getMeasurementData static method.");
|
||
}
|
||
|
||
if (!measurementData[toolType]) {
|
||
measurementData[toolType] = [];
|
||
}
|
||
|
||
measurementData[toolType] = [].concat(_toConsumableArray(measurementData[toolType]), _toConsumableArray(toolClass.getMeasurementData(measurementContent)));
|
||
});
|
||
});
|
||
return measurementData;
|
||
}
|
||
}, {
|
||
key: "registerTool",
|
||
value: function registerTool(toolClass) {
|
||
MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE[toolClass.utilityToolType] = toolClass;
|
||
MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_TOOL_TYPE[toolClass.graphicType] = toolClass;
|
||
MeasurementReport.MEASUREMENT_BY_TOOLTYPE[toolClass.graphicType] = toolClass.utilityToolType;
|
||
}
|
||
}]);
|
||
|
||
return MeasurementReport;
|
||
}();
|
||
MeasurementReport$1.MEASUREMENT_BY_TOOLTYPE = {};
|
||
MeasurementReport$1.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE = {};
|
||
MeasurementReport$1.MICROSCOPY_TOOL_CLASSES_BY_TOOL_TYPE = {};
|
||
|
||
var Polyline = /*#__PURE__*/function () {
|
||
function Polyline() {
|
||
_classCallCheck(this, Polyline);
|
||
}
|
||
|
||
_createClass(Polyline, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(measurementContent) {
|
||
// removing duplication and Getting only the graphicData information
|
||
var measurement = measurementContent.map(function (item) {
|
||
return item.GraphicData;
|
||
}).filter(function (s) {
|
||
return function (a) {
|
||
return function (j) {
|
||
return !s.has(j) && s.add(j);
|
||
}(JSON.stringify(a));
|
||
};
|
||
}(new Set())); // Chunking the array into size of three
|
||
|
||
return measurement.map(function (measurement) {
|
||
return measurement.reduce(function (all, one, i) {
|
||
var ch = Math.floor(i / 3);
|
||
all[ch] = [].concat(all[ch] || [], one);
|
||
return all;
|
||
}, []);
|
||
});
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(scoord3d) {
|
||
if (scoord3d.graphicType !== "POLYLINE") {
|
||
throw new Error("We expected a POLYLINE graphicType");
|
||
}
|
||
|
||
var points = scoord3d.graphicData;
|
||
var lengths = 1;
|
||
return {
|
||
points: points,
|
||
lengths: lengths
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return Polyline;
|
||
}();
|
||
|
||
Polyline.graphicType = "POLYLINE";
|
||
Polyline.toolType = "Polyline";
|
||
Polyline.utilityToolType = "Polyline";
|
||
Polyline.TID300Representation = Polyline$1;
|
||
MeasurementReport$1.registerTool(Polyline);
|
||
|
||
/**
|
||
* Expand an array of points stored as objects into
|
||
* a flattened array of points
|
||
*
|
||
* @param points [{x: 0, y: 1}, {x: 1, y: 2}] or [{x: 0, y: 1, z: 0}, {x: 1, y: 2, z: 0}]
|
||
* @return {Array} [point1x, point1y, point2x, point2y] or [point1x, point1y, point1z, point2x, point2y, point2z]
|
||
*/
|
||
|
||
function expandPoints(points) {
|
||
var allPoints = [];
|
||
points.forEach(function (point) {
|
||
allPoints.push(point[0]);
|
||
allPoints.push(point[1]);
|
||
|
||
if (point[2] !== undefined) {
|
||
allPoints.push(point[2]);
|
||
}
|
||
});
|
||
return allPoints;
|
||
}
|
||
|
||
var Polygon$1 = /*#__PURE__*/function (_TID300Measurement) {
|
||
_inherits(Polygon, _TID300Measurement);
|
||
|
||
var _super = _createSuper(Polygon);
|
||
|
||
function Polygon() {
|
||
_classCallCheck(this, Polygon);
|
||
|
||
return _super.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(Polygon, [{
|
||
key: "contentItem",
|
||
value: function contentItem() {
|
||
var _this$props = this.props,
|
||
points = _this$props.points,
|
||
perimeter = _this$props.perimeter,
|
||
_this$props$unit = _this$props.unit,
|
||
unit = _this$props$unit === void 0 ? "mm" : _this$props$unit,
|
||
area = _this$props.area,
|
||
areaUnit = _this$props.areaUnit,
|
||
ReferencedSOPSequence = _this$props.ReferencedSOPSequence,
|
||
_this$props$use3DSpat = _this$props.use3DSpatialCoordinates,
|
||
use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat;
|
||
var GraphicData = expandPoints(points);
|
||
return this.getMeasurement([{
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "G-A197",
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeMeaning: "Perimeter"
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: unit2CodingValue(unit),
|
||
NumericValue: perimeter
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
|
||
GraphicType: "POLYGON",
|
||
GraphicData: GraphicData,
|
||
ContentSequence: use3DSpatialCoordinates ? undefined : {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}, {
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "G-A166",
|
||
CodingSchemeDesignator: "SRT",
|
||
CodeMeaning: "Area"
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: unit2CodingValue(areaUnit),
|
||
NumericValue: area
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
|
||
GraphicType: "POLYGON",
|
||
GraphicData: GraphicData,
|
||
ContentSequence: use3DSpatialCoordinates ? undefined : {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}]);
|
||
}
|
||
}]);
|
||
|
||
return Polygon;
|
||
}(TID300Measurement);
|
||
|
||
var Polygon = /*#__PURE__*/function () {
|
||
function Polygon() {
|
||
_classCallCheck(this, Polygon);
|
||
}
|
||
|
||
_createClass(Polygon, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(measurementContent) {
|
||
// removing duplication and Getting only the graphicData information
|
||
var measurement = measurementContent.map(function (item) {
|
||
return item.GraphicData;
|
||
}).filter(function (s) {
|
||
return function (a) {
|
||
return function (j) {
|
||
return !s.has(j) && s.add(j);
|
||
}(JSON.stringify(a));
|
||
};
|
||
}(new Set())); // Chunking the array into size of three
|
||
|
||
return measurement.map(function (measurement) {
|
||
return measurement.reduce(function (all, one, i) {
|
||
var ch = Math.floor(i / 3);
|
||
all[ch] = [].concat(all[ch] || [], one);
|
||
return all;
|
||
}, []);
|
||
});
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(scoord3d) {
|
||
if (scoord3d.graphicType !== "POLYGON") {
|
||
throw new Error("We expected a POLYGON graphicType");
|
||
}
|
||
|
||
var points = scoord3d.graphicData;
|
||
var lengths = 1;
|
||
return {
|
||
points: points,
|
||
lengths: lengths
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return Polygon;
|
||
}();
|
||
|
||
Polygon.graphicType = "POLYGON";
|
||
Polygon.toolType = "Polygon";
|
||
Polygon.utilityToolType = "Polygon";
|
||
Polygon.TID300Representation = Polygon$1;
|
||
MeasurementReport$1.registerTool(Polygon);
|
||
|
||
var Point = /*#__PURE__*/function () {
|
||
function Point() {
|
||
_classCallCheck(this, Point);
|
||
}
|
||
|
||
_createClass(Point, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(measurementContent) {
|
||
var measurement = measurementContent.map(function (item) {
|
||
return item.GraphicData;
|
||
});
|
||
return measurement.filter(function (s) {
|
||
return function (a) {
|
||
return function (j) {
|
||
return !s.has(j) && s.add(j);
|
||
}(JSON.stringify(a));
|
||
};
|
||
}(new Set()));
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(scoord3d) {
|
||
if (scoord3d.graphicType !== "POINT") {
|
||
throw new Error("We expected a POINT graphicType");
|
||
}
|
||
|
||
var points = [scoord3d.graphicData];
|
||
var lengths = 1;
|
||
return {
|
||
points: points,
|
||
lengths: lengths
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return Point;
|
||
}();
|
||
|
||
Point.graphicType = "POINT";
|
||
Point.toolType = "Point";
|
||
Point.utilityToolType = "Point";
|
||
Point.TID300Representation = Point$1;
|
||
MeasurementReport$1.registerTool(Point);
|
||
|
||
var Circle = /*#__PURE__*/function () {
|
||
function Circle() {
|
||
_classCallCheck(this, Circle);
|
||
}
|
||
|
||
_createClass(Circle, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(measurementContent) {
|
||
// removing duplication and Getting only the graphicData information
|
||
var measurement = measurementContent.map(function (item) {
|
||
return item.GraphicData;
|
||
}).filter(function (s) {
|
||
return function (a) {
|
||
return function (j) {
|
||
return !s.has(j) && s.add(j);
|
||
}(JSON.stringify(a));
|
||
};
|
||
}(new Set())); // Chunking the array into size of three
|
||
|
||
return measurement.map(function (measurement) {
|
||
return measurement.reduce(function (all, one, i) {
|
||
var ch = Math.floor(i / 3);
|
||
all[ch] = [].concat(all[ch] || [], one);
|
||
return all;
|
||
}, []);
|
||
});
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(scoord3d) {
|
||
if (scoord3d.graphicType !== "CIRCLE") {
|
||
throw new Error("We expected a CIRCLE graphicType");
|
||
}
|
||
|
||
var points = scoord3d.graphicData;
|
||
var lengths = 1;
|
||
return {
|
||
points: points,
|
||
lengths: lengths
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return Circle;
|
||
}();
|
||
|
||
Circle.graphicType = "CIRCLE";
|
||
Circle.toolType = "Circle";
|
||
Circle.utilityToolType = "Circle";
|
||
Circle.TID300Representation = Circle$1;
|
||
MeasurementReport$1.registerTool(Circle);
|
||
|
||
var Ellipse = /*#__PURE__*/function () {
|
||
function Ellipse() {
|
||
_classCallCheck(this, Ellipse);
|
||
}
|
||
|
||
_createClass(Ellipse, null, [{
|
||
key: "getMeasurementData",
|
||
value: function getMeasurementData(measurementContent) {
|
||
// removing duplication and Getting only the graphicData information
|
||
var measurement = measurementContent.map(function (item) {
|
||
return item.GraphicData;
|
||
}).filter(function (s) {
|
||
return function (a) {
|
||
return function (j) {
|
||
return !s.has(j) && s.add(j);
|
||
}(JSON.stringify(a));
|
||
};
|
||
}(new Set())); // Chunking the array into size of three
|
||
|
||
return measurement.map(function (measurement) {
|
||
return measurement.reduce(function (all, one, i) {
|
||
var ch = Math.floor(i / 3);
|
||
all[ch] = [].concat(all[ch] || [], one);
|
||
return all;
|
||
}, []);
|
||
});
|
||
}
|
||
}, {
|
||
key: "getTID300RepresentationArguments",
|
||
value: function getTID300RepresentationArguments(scoord3d) {
|
||
if (scoord3d.graphicType !== "Ellipse") {
|
||
throw new Error("We expected a Ellipse graphicType");
|
||
}
|
||
|
||
var points = scoord3d.graphicData;
|
||
var lengths = 1;
|
||
return {
|
||
points: points,
|
||
lengths: lengths
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return Ellipse;
|
||
}();
|
||
|
||
Ellipse.graphicType = "ELLIPSE";
|
||
Ellipse.toolType = "Ellipse";
|
||
Ellipse.utilityToolType = "Ellipse";
|
||
Ellipse.TID300Representation = Ellipse$1;
|
||
MeasurementReport$1.registerTool(Ellipse);
|
||
|
||
var DICOMMicroscopyViewer = {
|
||
Polyline: Polyline,
|
||
Polygon: Polygon,
|
||
Point: Point,
|
||
Circle: Circle,
|
||
Ellipse: Ellipse,
|
||
MeasurementReport: MeasurementReport$1
|
||
};
|
||
|
||
var adapters = {
|
||
Cornerstone: Cornerstone,
|
||
Cornerstone3D: Cornerstone3D,
|
||
VTKjs: VTKjs,
|
||
DICOMMicroscopyViewer: DICOMMicroscopyViewer
|
||
};
|
||
|
||
var TID1500 = {
|
||
TID1500MeasurementReport: TID1500MeasurementReport,
|
||
TID1501MeasurementGroup: TID1501MeasurementGroup
|
||
};
|
||
|
||
var Calibration = /*#__PURE__*/function (_TID300Measurement) {
|
||
_inherits(Calibration, _TID300Measurement);
|
||
|
||
var _super = _createSuper(Calibration);
|
||
|
||
function Calibration() {
|
||
_classCallCheck(this, Calibration);
|
||
|
||
return _super.apply(this, arguments);
|
||
}
|
||
|
||
_createClass(Calibration, [{
|
||
key: "contentItem",
|
||
value: function contentItem() {
|
||
var _this$props = this.props,
|
||
point1 = _this$props.point1,
|
||
point2 = _this$props.point2,
|
||
_this$props$unit = _this$props.unit,
|
||
unit = _this$props$unit === void 0 ? "mm" : _this$props$unit,
|
||
distance = _this$props.distance,
|
||
ReferencedSOPSequence = _this$props.ReferencedSOPSequence;
|
||
return this.getMeasurement([{
|
||
RelationshipType: "CONTAINS",
|
||
ValueType: "NUM",
|
||
ConceptNameCodeSequence: {
|
||
CodeValue: "102304005",
|
||
CodingSchemeDesignator: "SCT",
|
||
CodeMeaning: "Calibration Ruler"
|
||
},
|
||
MeasuredValueSequence: {
|
||
MeasurementUnitsCodeSequence: unit2CodingValue(unit),
|
||
NumericValue: distance
|
||
},
|
||
ContentSequence: {
|
||
RelationshipType: "INFERRED FROM",
|
||
ValueType: "SCOORD",
|
||
GraphicType: "POLYLINE",
|
||
GraphicData: [point1.x, point1.y, point2.x, point2.y],
|
||
ContentSequence: {
|
||
RelationshipType: "SELECTED FROM",
|
||
ValueType: "IMAGE",
|
||
ReferencedSOPSequence: ReferencedSOPSequence
|
||
}
|
||
}
|
||
}]);
|
||
}
|
||
}]);
|
||
|
||
return Calibration;
|
||
}(TID300Measurement);
|
||
|
||
// - Cornerstone Probe
|
||
// Note: OHIF currently uses Cornerstone's 'dragProbe'. We need to add the regular Probe tool, which drops a single point.
|
||
//
|
||
// Hierarchy
|
||
// TID 1500 MeasurementReport
|
||
// --TID 1501 Measurement Group
|
||
// ---Measurement Group (DCM 125007)
|
||
// ----TID 300 Measurement
|
||
// ------SCOORD. Graphic Type: POINT
|
||
//
|
||
//
|
||
// - Cornerstone Ellipse:
|
||
//
|
||
// Should specify the Mean Modality Pixel Value measured in whatever units the image is in
|
||
// Should specify the Standard Deviation Modality Pixel Value measured in whatever units the image is in
|
||
//
|
||
//
|
||
// - Cornerstone Rectangle ROI
|
||
//
|
||
// Hierarchy
|
||
// TID 1500 MeasurementReport
|
||
// --TID 1501 Measurement Group
|
||
// ---Measurement Group (DCM 125007)
|
||
// ----TID 300 Measurement
|
||
// ------SCOORD. Graphic Type: POLYLINE
|
||
// ------ Use concept corresponding to Rectangle measurement
|
||
//
|
||
// http://dicom.nema.org/medical/dicom/current/output/html/part16.html#sect_TID_4019
|
||
//
|
||
// OR
|
||
// Note: This should be the same as a Freehand ROI, more or less. We add a TID 4019: Algorithm Identification flag to specify that this was created (and should be rehydrated) into a Rectangle ROI.
|
||
// TODO: Should we use a Derivation instead? http://dicom.nema.org/medical/dicom/current/output/html/part16.html#DCM_121401
|
||
// Should specify the Area measured in mmˆ2, including the units in UCUM
|
||
// Should specify the Mean Modality Pixel Value measured in whatever units the image is in
|
||
// Should specify the Standard Deviation Modality Pixel Value measured in whatever units the image is in
|
||
//
|
||
//
|
||
// - Cornerstone Simple Angle tool
|
||
//
|
||
// Hierarchy
|
||
// TID 1500 MeasurementReport
|
||
// --TID 1501 Measurement Group
|
||
// ---Measurement Group (DCM 125007)
|
||
// ----TID 300 Measurement
|
||
// ------SCOORD. Graphic Type: POLYLINE
|
||
// (ftp://dicom.nema.org/MEDICAL/dicom/current/output/chtml/part03/sect_C.10.5.html)
|
||
// ----TID 300 Measurement
|
||
// ------SCOORD. Graphic Type: POLYLINE
|
||
// (ftp://dicom.nema.org/MEDICAL/dicom/current/output/chtml/part03/sect_C.10.5.html)
|
||
//
|
||
// ------ Use concept corresponding to Angle measurement
|
||
//
|
||
// Two lines specify the angle
|
||
// Should specify the Angle measured in Degrees, including the units in UCUM
|
||
//
|
||
|
||
var TID300 = {
|
||
TID300Measurement: TID300Measurement,
|
||
Point: Point$1,
|
||
Length: Length$2,
|
||
CobbAngle: CobbAngle$1,
|
||
Bidirectional: Bidirectional$2,
|
||
Polyline: Polyline$1,
|
||
Polygon: Polygon$1,
|
||
Ellipse: Ellipse$1,
|
||
Circle: Circle$1,
|
||
Calibration: Calibration,
|
||
unit2CodingValue: unit2CodingValue
|
||
};
|
||
|
||
/**
|
||
* Converts a Uint8Array to a String.
|
||
* @param {Uint8Array} array that should be converted
|
||
* @param {Number} offset array offset in case only subset of array items should be extracted (default: 0)
|
||
* @param {Number} limit maximum number of array items that should be extracted (defaults to length of array)
|
||
* @returns {String}
|
||
*/
|
||
function uint8ArrayToString(arr, offset, limit) {
|
||
offset = offset || 0;
|
||
limit = limit || arr.length - offset;
|
||
var str = "";
|
||
|
||
for (var i = offset; i < offset + limit; i++) {
|
||
str += String.fromCharCode(arr[i]);
|
||
}
|
||
|
||
return str;
|
||
}
|
||
/**
|
||
* Converts a String to a Uint8Array.
|
||
* @param {String} str string that should be converted
|
||
* @returns {Uint8Array}
|
||
*/
|
||
|
||
|
||
function stringToUint8Array(str) {
|
||
var arr = new Uint8Array(str.length);
|
||
|
||
for (var i = 0, j = str.length; i < j; i++) {
|
||
arr[i] = str.charCodeAt(i);
|
||
}
|
||
|
||
return arr;
|
||
}
|
||
/**
|
||
* Identifies the boundary in a multipart/related message header.
|
||
* @param {String} header message header
|
||
* @returns {String} boundary
|
||
*/
|
||
|
||
|
||
function identifyBoundary(header) {
|
||
var parts = header.split("\r\n");
|
||
|
||
for (var i = 0; i < parts.length; i++) {
|
||
if (parts[i].substr(0, 2) === "--") {
|
||
return parts[i];
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Checks whether a given token is contained by a message at a given offset.
|
||
* @param {Uint8Array} message message content
|
||
* @param {Uint8Array} token substring that should be present
|
||
* @param {Number} offset offset in message content from where search should start
|
||
* @returns {Boolean} whether message contains token at offset
|
||
*/
|
||
|
||
|
||
function containsToken(message, token) {
|
||
var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
||
|
||
if (offset + token.length > message.length) {
|
||
return false;
|
||
}
|
||
|
||
var index = offset;
|
||
|
||
for (var i = 0; i < token.length; i++) {
|
||
if (token[i] !== message[index++]) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
/**
|
||
* Finds a given token in a message at a given offset.
|
||
* @param {Uint8Array} message message content
|
||
* @param {Uint8Array} token substring that should be found
|
||
* @param {Number} offset message body offset from where search should start
|
||
* @returns {Boolean} whether message has a part at given offset or not
|
||
*/
|
||
|
||
|
||
function findToken(message, token) {
|
||
var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
||
var maxSearchLength = arguments.length > 3 ? arguments[3] : undefined;
|
||
var searchLength = message.length;
|
||
|
||
if (maxSearchLength) {
|
||
searchLength = Math.min(offset + maxSearchLength, message.length);
|
||
}
|
||
|
||
for (var i = offset; i < searchLength; i++) {
|
||
// If the first value of the message matches
|
||
// the first value of the token, check if
|
||
// this is the full token.
|
||
if (message[i] === token[0]) {
|
||
if (containsToken(message, token, i)) {
|
||
return i;
|
||
}
|
||
}
|
||
}
|
||
|
||
return -1;
|
||
}
|
||
/**
|
||
* @typedef {Object} MultipartEncodedData
|
||
* @property {ArrayBuffer} data The encoded Multipart Data
|
||
* @property {String} boundary The boundary used to divide pieces of the encoded data
|
||
*/
|
||
|
||
/**
|
||
* Encode one or more DICOM datasets into a single body so it can be
|
||
* sent using the Multipart Content-Type.
|
||
*
|
||
* @param {ArrayBuffer[]} datasets Array containing each file to be encoded in the multipart body, passed as ArrayBuffers.
|
||
* @param {String} [boundary] Optional string to define a boundary between each part of the multipart body. If this is not specified, a random GUID will be generated.
|
||
* @return {MultipartEncodedData} The Multipart encoded data returned as an Object. This contains both the data itself, and the boundary string used to divide it.
|
||
*/
|
||
|
||
|
||
function multipartEncode(datasets) {
|
||
var boundary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : guid();
|
||
var contentType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "application/dicom";
|
||
var contentTypeString = "Content-Type: ".concat(contentType);
|
||
var header = "\r\n--".concat(boundary, "\r\n").concat(contentTypeString, "\r\n\r\n");
|
||
var footer = "\r\n--".concat(boundary, "--");
|
||
var headerArray = stringToUint8Array(header);
|
||
var footerArray = stringToUint8Array(footer);
|
||
var headerLength = headerArray.length;
|
||
var footerLength = footerArray.length;
|
||
var length = 0; // Calculate the total length for the final array
|
||
|
||
var contentArrays = datasets.map(function (datasetBuffer) {
|
||
var contentArray = new Uint8Array(datasetBuffer);
|
||
var contentLength = contentArray.length;
|
||
length += headerLength + contentLength + footerLength;
|
||
return contentArray;
|
||
}); // Allocate the array
|
||
|
||
var multipartArray = new Uint8Array(length); // Set the initial header
|
||
|
||
multipartArray.set(headerArray, 0); // Write each dataset into the multipart array
|
||
|
||
var position = 0;
|
||
contentArrays.forEach(function (contentArray) {
|
||
contentArray.length;
|
||
multipartArray.set(headerArray, position);
|
||
multipartArray.set(contentArray, position + headerLength);
|
||
position += headerLength + contentArray.length;
|
||
});
|
||
multipartArray.set(footerArray, position);
|
||
return {
|
||
data: multipartArray.buffer,
|
||
boundary: boundary
|
||
};
|
||
}
|
||
/**
|
||
* Decode a Multipart encoded ArrayBuffer and return the components as an Array.
|
||
*
|
||
* @param {ArrayBuffer} response Data encoded as a 'multipart/related' message
|
||
* @returns {Array} The content
|
||
*/
|
||
|
||
|
||
function multipartDecode(response) {
|
||
var message = new Uint8Array(response);
|
||
/* Set a maximum length to search for the header boundaries, otherwise
|
||
findToken can run for a long time
|
||
*/
|
||
|
||
var maxSearchLength = 1000; // First look for the multipart mime header
|
||
|
||
var separator = stringToUint8Array("\r\n\r\n");
|
||
var headerIndex = findToken(message, separator, 0, maxSearchLength);
|
||
|
||
if (headerIndex === -1) {
|
||
throw new Error("Response message has no multipart mime header");
|
||
}
|
||
|
||
var header = uint8ArrayToString(message, 0, headerIndex);
|
||
var boundaryString = identifyBoundary(header);
|
||
|
||
if (!boundaryString) {
|
||
throw new Error("Header of response message does not specify boundary");
|
||
}
|
||
|
||
var boundary = stringToUint8Array(boundaryString);
|
||
boundary.length;
|
||
var components = [];
|
||
var offset = headerIndex + separator.length; // Loop until we cannot find any more boundaries
|
||
|
||
var boundaryIndex;
|
||
|
||
while (boundaryIndex !== -1) {
|
||
// Search for the next boundary in the message, starting
|
||
// from the current offset position
|
||
boundaryIndex = findToken(message, boundary, offset); // If no further boundaries are found, stop here.
|
||
|
||
if (boundaryIndex === -1) {
|
||
break;
|
||
} // Extract data from response message, excluding "\r\n"
|
||
|
||
|
||
var spacingLength = 2;
|
||
var length = boundaryIndex - offset - spacingLength;
|
||
var data = response.slice(offset, offset + length); // Add the data to the array of results
|
||
|
||
components.push(data); // find the end of the boundary
|
||
|
||
var boundaryEnd = findToken(message, separator, boundaryIndex + 1, maxSearchLength);
|
||
if (boundaryEnd === -1) break; // Move the offset to the end of the identified boundary
|
||
|
||
offset = boundaryEnd + separator.length;
|
||
}
|
||
|
||
return components;
|
||
}
|
||
/**
|
||
* Create a random GUID
|
||
*
|
||
* @return {string}
|
||
*/
|
||
|
||
|
||
function guid() {
|
||
function s4() {
|
||
return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
|
||
}
|
||
|
||
return s4() + s4() + "-" + s4() + "-" + s4() + "-" + s4() + "-" + s4() + s4() + s4();
|
||
}
|
||
|
||
var message = {
|
||
containsToken: containsToken,
|
||
findToken: findToken,
|
||
identifyBoundary: identifyBoundary,
|
||
uint8ArrayToString: uint8ArrayToString,
|
||
stringToUint8Array: stringToUint8Array,
|
||
multipartEncode: multipartEncode,
|
||
multipartDecode: multipartDecode,
|
||
guid: guid
|
||
};
|
||
|
||
var utilities = {
|
||
TID1500: TID1500,
|
||
TID300: TID300,
|
||
message: message,
|
||
addAccessors: addAccessors,
|
||
orientation: orientation,
|
||
compression: compression
|
||
};
|
||
|
||
var Code = /*#__PURE__*/function () {
|
||
function Code(options) {
|
||
_classCallCheck(this, Code);
|
||
|
||
this[_value] = options.value;
|
||
this[_meaning] = options.meaning;
|
||
this[_schemeDesignator] = options.schemeDesignator;
|
||
this[_schemeVersion] = options.schemeVersion || null;
|
||
}
|
||
|
||
_createClass(Code, [{
|
||
key: "value",
|
||
get: function get() {
|
||
return this[_value];
|
||
}
|
||
}, {
|
||
key: "meaning",
|
||
get: function get() {
|
||
return this[_meaning];
|
||
}
|
||
}, {
|
||
key: "schemeDesignator",
|
||
get: function get() {
|
||
return this[_schemeDesignator];
|
||
}
|
||
}, {
|
||
key: "schemeVersion",
|
||
get: function get() {
|
||
return this[_schemeVersion];
|
||
}
|
||
}]);
|
||
|
||
return Code;
|
||
}();
|
||
|
||
var CodedConcept = /*#__PURE__*/function () {
|
||
function CodedConcept(options) {
|
||
_classCallCheck(this, CodedConcept);
|
||
|
||
if (options.value === undefined) {
|
||
throw new Error("Option 'value' is required for CodedConcept.");
|
||
}
|
||
|
||
if (options.meaning === undefined) {
|
||
throw new Error("Option 'meaning' is required for CodedConcept.");
|
||
}
|
||
|
||
if (options.schemeDesignator === undefined) {
|
||
throw new Error("Option 'schemeDesignator' is required for CodedConcept.");
|
||
}
|
||
|
||
this.CodeValue = options.value;
|
||
this.CodeMeaning = options.meaning;
|
||
this.CodingSchemeDesignator = options.schemeDesignator;
|
||
|
||
if ("schemeVersion" in options) {
|
||
this.CodingSchemeVersion = options.schemeVersion;
|
||
}
|
||
}
|
||
|
||
_createClass(CodedConcept, [{
|
||
key: "equals",
|
||
value: function equals(other) {
|
||
if (other.value === this.value && other.schemeDesignator === this.schemeDesignator) {
|
||
if (other.schemeVersion && this.schemeVersion) {
|
||
return other.schemeVersion === this.schemeVersion;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
}, {
|
||
key: "value",
|
||
get: function get() {
|
||
return this.CodeValue;
|
||
}
|
||
}, {
|
||
key: "meaning",
|
||
get: function get() {
|
||
return this.CodeMeaning;
|
||
}
|
||
}, {
|
||
key: "schemeDesignator",
|
||
get: function get() {
|
||
return this.CodingSchemeDesignator;
|
||
}
|
||
}, {
|
||
key: "schemeVersion",
|
||
get: function get() {
|
||
return this.CodingSchemeVersion;
|
||
}
|
||
}]);
|
||
|
||
return CodedConcept;
|
||
}();
|
||
|
||
var coding = /*#__PURE__*/Object.freeze({
|
||
__proto__: null,
|
||
Code: Code,
|
||
CodedConcept: CodedConcept
|
||
});
|
||
|
||
var ValueTypes = {
|
||
CODE: "CODE",
|
||
COMPOSITE: "COMPOSITE",
|
||
CONTAINER: "CONTAINER",
|
||
DATE: "DATE",
|
||
DATETIME: "DATETIME",
|
||
IMAGE: "IMAGE",
|
||
NUM: "NUM",
|
||
PNAME: "PNAME",
|
||
SCOORD: "SCOORD",
|
||
SCOORD3D: "SCOORD3D",
|
||
TCOORD: "TCOORD",
|
||
TEXT: "TEXT",
|
||
TIME: "TIME",
|
||
UIDREF: "UIDREF",
|
||
WAVEFORM: "WAVEFORM"
|
||
};
|
||
Object.freeze(ValueTypes);
|
||
var GraphicTypes = {
|
||
CIRCLE: "CIRCLE",
|
||
ELLIPSE: "ELLIPSE",
|
||
ELLIPSOID: "ELLIPSOID",
|
||
MULTIPOINT: "MULTIPOINT",
|
||
POINT: "POINT",
|
||
POLYLINE: "POLYLINE"
|
||
};
|
||
Object.freeze(GraphicTypes);
|
||
var GraphicTypes3D = {
|
||
ELLIPSE: "ELLIPSE",
|
||
ELLIPSOID: "ELLIPSOID",
|
||
MULTIPOINT: "MULTIPOINT",
|
||
POINT: "POINT",
|
||
POLYLINE: "POLYLINE",
|
||
POLYGON: "POLYGON"
|
||
};
|
||
Object.freeze(GraphicTypes3D);
|
||
var TemporalRangeTypes = {
|
||
BEGIN: "BEGIN",
|
||
END: "END",
|
||
MULTIPOINT: "MULTIPOINT",
|
||
MULTISEGMENT: "MULTISEGMENT",
|
||
POINT: "POINT",
|
||
SEGMENT: "SEGMENT"
|
||
};
|
||
Object.freeze(TemporalRangeTypes);
|
||
var RelationshipTypes = {
|
||
CONTAINS: "CONTAINS",
|
||
HAS_ACQ_CONTENT: "HAS ACQ CONTENT",
|
||
HAS_CONCEPT_MOD: "HAS CONCEPT MOD",
|
||
HAS_OBS_CONTEXT: "HAS OBS CONTEXT",
|
||
HAS_PROPERTIES: "HAS PROPERTIES",
|
||
INFERRED_FROM: "INFERRED FROM",
|
||
SELECTED_FROM: "SELECTED FROM"
|
||
};
|
||
Object.freeze(RelationshipTypes);
|
||
var PixelOriginInterpretations = {
|
||
FRAME: "FRAME",
|
||
VOLUME: "VOLUME"
|
||
};
|
||
Object.freeze(RelationshipTypes);
|
||
|
||
function isFloat(n) {
|
||
return n === +n && n !== (n | 0);
|
||
}
|
||
|
||
function zeroPad(value) {
|
||
return (value > 9 ? "" : "0") + value;
|
||
}
|
||
|
||
function TM(date) {
|
||
// %H%M%S.%f
|
||
var hours = date.getHours();
|
||
var minutes = date.getMinutes();
|
||
var seconds = date.getSeconds();
|
||
var milliseconds = date.getMilliseconds();
|
||
return zeroPad(hours) + zeroPad(minutes) + zeroPad(seconds) + milliseconds;
|
||
}
|
||
|
||
function DA(date) {
|
||
var year = date.getFullYear();
|
||
var month = date.getMonth() + 1;
|
||
var day = date.getDate();
|
||
return year + zeroPad(month) + zeroPad(day);
|
||
}
|
||
|
||
function DT(date) {
|
||
return DA(date) + TM(date);
|
||
}
|
||
|
||
var ContentSequence$1 = /*#__PURE__*/function (_Array) {
|
||
_inherits(ContentSequence, _Array);
|
||
|
||
var _super = _createSuper(ContentSequence);
|
||
|
||
function ContentSequence() {
|
||
_classCallCheck(this, ContentSequence);
|
||
|
||
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
||
args[_key] = arguments[_key];
|
||
}
|
||
|
||
return _super.call.apply(_super, [this].concat(args));
|
||
} // filterBy(options) {
|
||
// }
|
||
|
||
|
||
return _createClass(ContentSequence);
|
||
}( /*#__PURE__*/_wrapNativeSuper(Array));
|
||
|
||
var ContentItem = /*#__PURE__*/_createClass(function ContentItem(options) {
|
||
_classCallCheck(this, ContentItem);
|
||
|
||
if (options.name === undefined) {
|
||
throw new Error("Option 'name' is required for ContentItem.");
|
||
}
|
||
|
||
if (options.name.constructor !== CodedConcept) {
|
||
throw new Error("Option 'name' must have type CodedConcept.");
|
||
}
|
||
|
||
this.ConceptNameCodeSequence = [options.name];
|
||
|
||
if (options.valueType === undefined) {
|
||
throw new Error("Option 'valueType' is required for ContentItem.");
|
||
}
|
||
|
||
if (!(Object.values(ValueTypes).indexOf(options.valueType) !== -1)) {
|
||
throw new Error("Invalid value type ".concat(options.valueType));
|
||
}
|
||
|
||
this.ValueType = options.valueType;
|
||
|
||
if (options.relationshipType !== undefined) {
|
||
if (!(Object.values(RelationshipTypes).indexOf(options.relationshipType) !== -1)) {
|
||
throw new Error("Invalid relationship type ".concat(options.relationshipTypes));
|
||
}
|
||
|
||
this.RelationshipType = options.relationshipType;
|
||
} // TODO: relationship type is required
|
||
|
||
} // getContentItems(options) {
|
||
// // TODO: filter by name, value type and relationship type
|
||
// return this.ContentSequence;
|
||
// }
|
||
);
|
||
|
||
var CodeContentItem = /*#__PURE__*/function (_ContentItem) {
|
||
_inherits(CodeContentItem, _ContentItem);
|
||
|
||
var _super2 = _createSuper(CodeContentItem);
|
||
|
||
function CodeContentItem(options) {
|
||
var _this;
|
||
|
||
_classCallCheck(this, CodeContentItem);
|
||
|
||
_this = _super2.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.CODE
|
||
});
|
||
|
||
if (options.value === undefined) {
|
||
throw new Error("Option 'value' is required for CodeContentItem.");
|
||
}
|
||
|
||
if (!(options.value || options.value.constructor === CodedConcept)) {
|
||
throw new Error("Option 'value' must have type CodedConcept.");
|
||
}
|
||
|
||
_this.ConceptCodeSequence = [options.value];
|
||
return _this;
|
||
}
|
||
|
||
return _createClass(CodeContentItem);
|
||
}(ContentItem);
|
||
|
||
var TextContentItem = /*#__PURE__*/function (_ContentItem2) {
|
||
_inherits(TextContentItem, _ContentItem2);
|
||
|
||
var _super3 = _createSuper(TextContentItem);
|
||
|
||
function TextContentItem(options) {
|
||
var _this2;
|
||
|
||
_classCallCheck(this, TextContentItem);
|
||
|
||
_this2 = _super3.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.TEXT
|
||
});
|
||
|
||
if (options.value === undefined) {
|
||
throw new Error("Option 'value' is required for TextContentItem.");
|
||
}
|
||
|
||
if (!(typeof options.value === "string" || options.value instanceof String)) {
|
||
throw new Error("Option 'value' must have type String.");
|
||
}
|
||
|
||
_this2.TextValue = options.value;
|
||
return _this2;
|
||
}
|
||
|
||
return _createClass(TextContentItem);
|
||
}(ContentItem);
|
||
|
||
var PNameContentItem = /*#__PURE__*/function (_ContentItem3) {
|
||
_inherits(PNameContentItem, _ContentItem3);
|
||
|
||
var _super4 = _createSuper(PNameContentItem);
|
||
|
||
function PNameContentItem(options) {
|
||
var _this3;
|
||
|
||
_classCallCheck(this, PNameContentItem);
|
||
|
||
_this3 = _super4.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.PNAME
|
||
});
|
||
|
||
if (options.value === undefined) {
|
||
throw new Error("Option 'value' is required for PNameContentItem.");
|
||
}
|
||
|
||
if (!(typeof options.value === "string" || options.value instanceof String)) {
|
||
throw new Error("Option 'value' must have type String.");
|
||
}
|
||
|
||
_this3.PersonName = options.value;
|
||
return _this3;
|
||
}
|
||
|
||
return _createClass(PNameContentItem);
|
||
}(ContentItem);
|
||
|
||
var TimeContentItem = /*#__PURE__*/function (_ContentItem4) {
|
||
_inherits(TimeContentItem, _ContentItem4);
|
||
|
||
var _super5 = _createSuper(TimeContentItem);
|
||
|
||
function TimeContentItem(options) {
|
||
var _this4;
|
||
|
||
_classCallCheck(this, TimeContentItem);
|
||
|
||
_this4 = _super5.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.TIME
|
||
});
|
||
|
||
if (options.value === undefined) {
|
||
throw new Error("Option 'value' is required for TimeContentItem.");
|
||
}
|
||
|
||
if (!(_typeof(options.value) === "object" || options.value instanceof Date)) {
|
||
throw new Error("Option 'value' must have type Date.");
|
||
}
|
||
|
||
_this4.Time = TM(options.value);
|
||
return _this4;
|
||
}
|
||
|
||
return _createClass(TimeContentItem);
|
||
}(ContentItem);
|
||
|
||
var DateContentItem = /*#__PURE__*/function (_ContentItem5) {
|
||
_inherits(DateContentItem, _ContentItem5);
|
||
|
||
var _super6 = _createSuper(DateContentItem);
|
||
|
||
function DateContentItem(options) {
|
||
var _this5;
|
||
|
||
_classCallCheck(this, DateContentItem);
|
||
|
||
_this5 = _super6.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.DATE
|
||
});
|
||
|
||
if (options.value === undefined) {
|
||
throw new Error("Option 'value' is required for DateContentItem.");
|
||
}
|
||
|
||
if (!(_typeof(options.value) === "object" || options.value instanceof Date)) {
|
||
throw new Error("Option 'value' must have type Date.");
|
||
}
|
||
|
||
_this5.Date = DA(options.value);
|
||
return _this5;
|
||
}
|
||
|
||
return _createClass(DateContentItem);
|
||
}(ContentItem);
|
||
|
||
var DateTimeContentItem = /*#__PURE__*/function (_ContentItem6) {
|
||
_inherits(DateTimeContentItem, _ContentItem6);
|
||
|
||
var _super7 = _createSuper(DateTimeContentItem);
|
||
|
||
function DateTimeContentItem(options) {
|
||
var _this6;
|
||
|
||
_classCallCheck(this, DateTimeContentItem);
|
||
|
||
_this6 = _super7.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.DATETIME
|
||
});
|
||
|
||
if (options.value === undefined) {
|
||
throw new Error("Option 'value' is required for DateTimeContentItem.");
|
||
}
|
||
|
||
if (!(_typeof(options.value) === "object" || options.value instanceof Date)) {
|
||
throw new Error("Option 'value' must have type Date.");
|
||
}
|
||
|
||
_this6.DateTime = DT(otions.value);
|
||
return _this6;
|
||
}
|
||
|
||
return _createClass(DateTimeContentItem);
|
||
}(ContentItem);
|
||
|
||
var UIDRefContentItem = /*#__PURE__*/function (_ContentItem7) {
|
||
_inherits(UIDRefContentItem, _ContentItem7);
|
||
|
||
var _super8 = _createSuper(UIDRefContentItem);
|
||
|
||
function UIDRefContentItem(options) {
|
||
var _this7;
|
||
|
||
_classCallCheck(this, UIDRefContentItem);
|
||
|
||
_this7 = _super8.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.UIDREF
|
||
});
|
||
|
||
if (options.value === undefined) {
|
||
throw new Error("Option 'value' is required for UIDRefContentItem.");
|
||
}
|
||
|
||
if (!(typeof options.value === "string" || options.value instanceof String)) {
|
||
throw new Error("Option 'value' must have type String.");
|
||
}
|
||
|
||
_this7.UID = options.value;
|
||
return _this7;
|
||
}
|
||
|
||
return _createClass(UIDRefContentItem);
|
||
}(ContentItem);
|
||
|
||
var NumContentItem = /*#__PURE__*/function (_ContentItem8) {
|
||
_inherits(NumContentItem, _ContentItem8);
|
||
|
||
var _super9 = _createSuper(NumContentItem);
|
||
|
||
function NumContentItem(options) {
|
||
var _this8;
|
||
|
||
_classCallCheck(this, NumContentItem);
|
||
|
||
_this8 = _super9.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.NUM
|
||
});
|
||
|
||
if (options.value !== undefined) {
|
||
if (!(typeof options.value === "number" || options.value instanceof Number)) {
|
||
throw new Error("Option 'value' must have type Number.");
|
||
}
|
||
|
||
if (options.unit === undefined) {
|
||
throw new Error("Option 'unit' is required for NumContentItem with 'value'.");
|
||
}
|
||
|
||
if (options.unit.constructor !== CodedConcept) {
|
||
throw new Error("Option 'unit' must have type CodedConcept.");
|
||
}
|
||
|
||
var item = {};
|
||
item.NumericValue = options.value;
|
||
|
||
if (isFloat(options.value)) {
|
||
item.FloatingPointValue = options.value;
|
||
}
|
||
|
||
item.MeasurementUnitsCodeSequence = [options.unit];
|
||
_this8.MeasuredValueSequence = [item];
|
||
} else if (options.qualifier !== undefined) {
|
||
if (!(options.qualifier || options.qualifier.constructor === CodedConcept)) {
|
||
throw new Error("Option 'qualifier' must have type CodedConcept.");
|
||
}
|
||
|
||
_this8.NumericValueQualifierCodeSequence = [options.qualifier];
|
||
} else {
|
||
throw new Error("Either option 'value' or 'qualifier' is required for NumContentItem.");
|
||
}
|
||
|
||
return _this8;
|
||
}
|
||
|
||
return _createClass(NumContentItem);
|
||
}(ContentItem);
|
||
|
||
var ContainerContentItem = /*#__PURE__*/function (_ContentItem9) {
|
||
_inherits(ContainerContentItem, _ContentItem9);
|
||
|
||
var _super10 = _createSuper(ContainerContentItem);
|
||
|
||
function ContainerContentItem(options) {
|
||
var _this9;
|
||
|
||
_classCallCheck(this, ContainerContentItem);
|
||
|
||
_this9 = _super10.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.CONTAINER
|
||
});
|
||
|
||
if (options.isContentContinuous !== undefined) {
|
||
_this9.ContinuityOfContent = "CONTINUOUS";
|
||
} else {
|
||
_this9.ContinuityOfContent = "SEPARATE";
|
||
}
|
||
|
||
if (options.templateID !== undefined) {
|
||
if (!(typeof options.templateID === "string" || options.templateID instanceof String)) {
|
||
throw new Error("Option 'templateID' must have type String.");
|
||
}
|
||
|
||
var item = {};
|
||
item.MappingResource = "DCMR";
|
||
item.TemplateIdentifier = options.templateID;
|
||
_this9.ContentTemplateSequence = [item];
|
||
}
|
||
|
||
return _this9;
|
||
}
|
||
|
||
return _createClass(ContainerContentItem);
|
||
}(ContentItem);
|
||
|
||
var CompositeContentItem = /*#__PURE__*/function (_ContentItem10) {
|
||
_inherits(CompositeContentItem, _ContentItem10);
|
||
|
||
var _super11 = _createSuper(CompositeContentItem);
|
||
|
||
function CompositeContentItem(options) {
|
||
var _this10;
|
||
|
||
_classCallCheck(this, CompositeContentItem);
|
||
|
||
_this10 = _super11.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.COMPOSITE
|
||
});
|
||
|
||
if (options.referencedSOPClassUID === undefined) {
|
||
throw new Error("Option 'referencedSOPClassUID' is required for CompositeContentItem.");
|
||
}
|
||
|
||
if (options.referencedSOPInstanceUID === undefined) {
|
||
throw new Error("Option 'referencedSOPInstanceUID' is required for CompositeContentItem.");
|
||
}
|
||
|
||
if (!(typeof options.referencedSOPClassUID === "string" || options.referencedSOPClassUID instanceof String)) {
|
||
throw new Error("Option 'referencedSOPClassUID' must have type String.");
|
||
}
|
||
|
||
if (!(typeof options.referencedSOPInstanceUID === "string" || options.referencedSOPInstanceUID instanceof String)) {
|
||
throw new Error("Option 'referencedSOPInstanceUID' must have type String.");
|
||
}
|
||
|
||
var item = {};
|
||
item.ReferencedSOPClassUID = options.referencedSOPClassUID;
|
||
item.ReferencedSOPInstanceUID = options.referencedSOPInstanceUID;
|
||
_this10.ReferenceSOPSequence = [item];
|
||
return _this10;
|
||
}
|
||
|
||
return _createClass(CompositeContentItem);
|
||
}(ContentItem);
|
||
|
||
var ImageContentItem = /*#__PURE__*/function (_ContentItem11) {
|
||
_inherits(ImageContentItem, _ContentItem11);
|
||
|
||
var _super12 = _createSuper(ImageContentItem);
|
||
|
||
function ImageContentItem(options) {
|
||
var _this11;
|
||
|
||
_classCallCheck(this, ImageContentItem);
|
||
|
||
_this11 = _super12.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.IMAGE
|
||
});
|
||
|
||
if (options.referencedSOPClassUID === undefined) {
|
||
throw new Error("Option 'referencedSOPClassUID' is required for ImageContentItem.");
|
||
}
|
||
|
||
if (options.referencedSOPInstanceUID === undefined) {
|
||
throw new Error("Option 'referencedSOPInstanceUID' is required for ImageContentItem.");
|
||
}
|
||
|
||
if (!(typeof options.referencedSOPClassUID === "string" || options.referencedSOPClassUID instanceof String)) {
|
||
throw new Error("Option 'referencedSOPClassUID' must have type String.");
|
||
}
|
||
|
||
if (!(typeof options.referencedSOPInstanceUID === "string" || options.referencedSOPInstanceUID instanceof String)) {
|
||
throw new Error("Option 'referencedSOPInstanceUID' must have type String.");
|
||
}
|
||
|
||
var item = {};
|
||
item.ReferencedSOPClassUID = options.referencedSOPClassUID;
|
||
item.ReferencedSOPInstanceUID = options.referencedSOPInstanceUID;
|
||
|
||
if (options.referencedFrameNumbers !== undefined) {
|
||
if (!(_typeof(options.referencedFrameNumbers) === "object" || options.referencedFrameNumbers instanceof Array)) {
|
||
throw new Error("Option 'referencedFrameNumbers' must have type Array.");
|
||
} // FIXME: value multiplicity
|
||
|
||
|
||
item.ReferencedFrameNumber = options.referencedFrameNumbers;
|
||
}
|
||
|
||
if (options.referencedFrameSegmentNumber !== undefined) {
|
||
if (!(_typeof(options.referencedSegmentNumbers) === "object" || options.referencedSegmentNumbers instanceof Array)) {
|
||
throw new Error("Option 'referencedSegmentNumbers' must have type Array.");
|
||
} // FIXME: value multiplicity
|
||
|
||
|
||
item.ReferencedSegmentNumber = options.referencedSegmentNumbers;
|
||
}
|
||
|
||
_this11.ReferencedSOPSequence = [item];
|
||
return _this11;
|
||
}
|
||
|
||
return _createClass(ImageContentItem);
|
||
}(ContentItem);
|
||
|
||
var ScoordContentItem = /*#__PURE__*/function (_ContentItem12) {
|
||
_inherits(ScoordContentItem, _ContentItem12);
|
||
|
||
var _super13 = _createSuper(ScoordContentItem);
|
||
|
||
function ScoordContentItem(options) {
|
||
var _this12;
|
||
|
||
_classCallCheck(this, ScoordContentItem);
|
||
|
||
_this12 = _super13.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.SCOORD
|
||
});
|
||
|
||
if (options.graphicType === undefined) {
|
||
throw new Error("Option 'graphicType' is required for ScoordContentItem.");
|
||
}
|
||
|
||
if (!(typeof options.graphicType === "string" || options.graphicType instanceof String)) {
|
||
throw new Error("Option 'graphicType' of ScoordContentItem must have type String.");
|
||
}
|
||
|
||
if (options.graphicData === undefined) {
|
||
throw new Error("Option 'graphicData' is required for ScoordContentItem.");
|
||
}
|
||
|
||
if (!(_typeof(options.graphicData) === "object" || options.graphicData instanceof Array)) {
|
||
throw new Error("Option 'graphicData' of ScoordContentItem must have type Array.");
|
||
}
|
||
|
||
if (Object.values(GraphicTypes).indexOf(options.graphicType) === -1) {
|
||
throw new Error("Invalid graphic type '".concat(options.graphicType, "'."));
|
||
}
|
||
|
||
if (options.graphicData[0] instanceof Array) {
|
||
options.graphicData = [].concat.apply([], options.graphicData);
|
||
}
|
||
|
||
_this12.GraphicData = options.graphicData;
|
||
options.pixelOriginInterpretation = options.pixelOriginInterpretation || PixelOriginInterpretations.VOLUME;
|
||
|
||
if (!(typeof options.pixelOriginInterpretation === "string" || options.pixelOriginInterpretation instanceof String)) {
|
||
throw new Error("Option 'pixelOriginInterpretation' must have type String.");
|
||
}
|
||
|
||
if (Object.values(PixelOriginInterpretations).indexOf(options.pixelOriginInterpretation) === -1) {
|
||
throw new Error("Invalid pixel origin interpretation '".concat(options.pixelOriginInterpretation, "'."));
|
||
}
|
||
|
||
if (options.fiducialUID !== undefined) {
|
||
if (!(typeof options.fiducialUID === "string" || options.fiducialUID instanceof String)) {
|
||
throw new Error("Option 'fiducialUID' must have type String.");
|
||
}
|
||
|
||
_this12.FiducialUID = options.fiducialUID;
|
||
}
|
||
|
||
return _this12;
|
||
}
|
||
|
||
return _createClass(ScoordContentItem);
|
||
}(ContentItem);
|
||
|
||
var Scoord3DContentItem = /*#__PURE__*/function (_ContentItem13) {
|
||
_inherits(Scoord3DContentItem, _ContentItem13);
|
||
|
||
var _super14 = _createSuper(Scoord3DContentItem);
|
||
|
||
function Scoord3DContentItem(options) {
|
||
var _this13;
|
||
|
||
_classCallCheck(this, Scoord3DContentItem);
|
||
|
||
_this13 = _super14.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.SCOORD3D
|
||
});
|
||
|
||
if (options.graphicType === undefined) {
|
||
throw new Error("Option 'graphicType' is required for Scoord3DContentItem.");
|
||
}
|
||
|
||
if (!(typeof options.graphicType === "string" || options.graphicType instanceof String)) {
|
||
throw new Error("Option 'graphicType' must have type String.");
|
||
}
|
||
|
||
if (options.graphicData === undefined) {
|
||
throw new Error("Option 'graphicData' is required for Scoord3DContentItem.");
|
||
}
|
||
|
||
if (!(_typeof(options.graphicData) === "object" || options.graphicData instanceof Array)) {
|
||
throw new Error("Option 'graphicData' must have type Array.");
|
||
}
|
||
|
||
if (Object.values(GraphicTypes3D).indexOf(options.graphicType) === -1) {
|
||
throw new Error("Invalid graphic type '".concat(options.graphicType, "'."));
|
||
}
|
||
|
||
if (options.graphicData[0] instanceof Array) {
|
||
options.graphicData = [].concat.apply([], options.graphicData);
|
||
}
|
||
|
||
_this13.GraphicType = options.graphicType;
|
||
_this13.GraphicData = options.graphicData;
|
||
|
||
if (options.frameOfReferenceUID === undefined) {
|
||
throw new Error("Option 'frameOfReferenceUID' is required for Scoord3DContentItem.");
|
||
}
|
||
|
||
if (!(typeof options.frameOfReferenceUID === "string" || options.frameOfReferenceUID instanceof String)) {
|
||
throw new Error("Option 'frameOfReferenceUID' must have type String.");
|
||
}
|
||
|
||
_this13.ReferencedFrameOfReferenceUID = options.frameOfReferenceUID;
|
||
|
||
if ("fiducialUID" in options) {
|
||
if (!(typeof options.fiducialUID === "string" || options.fiducialUID instanceof String)) {
|
||
throw new Error("Option 'fiducialUID' must have type String.");
|
||
}
|
||
|
||
_this13.FiducialUID = fiducialUID;
|
||
}
|
||
|
||
return _this13;
|
||
}
|
||
|
||
return _createClass(Scoord3DContentItem);
|
||
}(ContentItem);
|
||
|
||
var TcoordContentItem = /*#__PURE__*/function (_ContentItem14) {
|
||
_inherits(TcoordContentItem, _ContentItem14);
|
||
|
||
var _super15 = _createSuper(TcoordContentItem);
|
||
|
||
function TcoordContentItem(options) {
|
||
var _this14;
|
||
|
||
_classCallCheck(this, TcoordContentItem);
|
||
|
||
_this14 = _super15.call(this, {
|
||
name: options.name,
|
||
relationshipType: options.relationshipType,
|
||
valueType: ValueTypes.TCOORD
|
||
});
|
||
|
||
if (options.temporalRangeType === undefined) {
|
||
throw new Error("Option 'temporalRangeType' is required for TcoordContentItem.");
|
||
}
|
||
|
||
if (Object.values(TemporalRangeTypes).indexOf(options.temporalRangeType) === -1) {
|
||
throw new Error("Invalid temporal range type '".concat(options.temporalRangeType, "'."));
|
||
}
|
||
|
||
if (options.referencedSamplePositions === undefined) {
|
||
if (!(_typeof(options.referencedSamplePositions) === "object" || options.referencedSamplePositions instanceof Array)) {
|
||
throw new Error("Option 'referencedSamplePositions' must have type Array.");
|
||
} // TODO: ensure values are integers
|
||
|
||
|
||
_this14.ReferencedSamplePositions = options.referencedSamplePositions;
|
||
} else if (options.referencedTimeOffsets === undefined) {
|
||
if (!(_typeof(options.referencedTimeOffsets) === "object" || options.referencedTimeOffsets instanceof Array)) {
|
||
throw new Error("Option 'referencedTimeOffsets' must have type Array.");
|
||
} // TODO: ensure values are floats
|
||
|
||
|
||
_this14.ReferencedTimeOffsets = options.referencedTimeOffsets;
|
||
} else if (options.referencedDateTime === undefined) {
|
||
if (!(_typeof(options.referencedDateTime) === "object" || options.referencedDateTime instanceof Array)) {
|
||
throw new Error("Option 'referencedDateTime' must have type Array.");
|
||
}
|
||
|
||
_this14.ReferencedDateTime = options.referencedDateTime;
|
||
} else {
|
||
throw new Error("One of the following options is required for TcoordContentItem: " + "'referencedSamplePositions', 'referencedTimeOffsets', or " + "'referencedDateTime'.");
|
||
}
|
||
|
||
return _this14;
|
||
}
|
||
|
||
return _createClass(TcoordContentItem);
|
||
}(ContentItem);
|
||
|
||
var valueTypes = /*#__PURE__*/Object.freeze({
|
||
__proto__: null,
|
||
CodeContentItem: CodeContentItem,
|
||
CompositeContentItem: CompositeContentItem,
|
||
ContainerContentItem: ContainerContentItem,
|
||
ContentSequence: ContentSequence$1,
|
||
DateContentItem: DateContentItem,
|
||
DateTimeContentItem: DateTimeContentItem,
|
||
GraphicTypes: GraphicTypes,
|
||
GraphicTypes3D: GraphicTypes3D,
|
||
ImageContentItem: ImageContentItem,
|
||
NumContentItem: NumContentItem,
|
||
PNameContentItem: PNameContentItem,
|
||
PixelOriginInterpretations: PixelOriginInterpretations,
|
||
RelationshipTypes: RelationshipTypes,
|
||
Scoord3DContentItem: Scoord3DContentItem,
|
||
ScoordContentItem: ScoordContentItem,
|
||
TcoordContentItem: TcoordContentItem,
|
||
TemporalRangeTypes: TemporalRangeTypes,
|
||
TextContentItem: TextContentItem,
|
||
TimeContentItem: TimeContentItem,
|
||
UIDRefContentItem: UIDRefContentItem,
|
||
ValueTypes: ValueTypes
|
||
});
|
||
|
||
var LongitudinalTemporalOffsetFromEvent = /*#__PURE__*/function (_NumContentItem) {
|
||
_inherits(LongitudinalTemporalOffsetFromEvent, _NumContentItem);
|
||
|
||
var _super = _createSuper(LongitudinalTemporalOffsetFromEvent);
|
||
|
||
function LongitudinalTemporalOffsetFromEvent(options) {
|
||
var _this;
|
||
|
||
_classCallCheck(this, LongitudinalTemporalOffsetFromEvent);
|
||
|
||
_this = _super.call(this, {
|
||
name: new CodedConcept({
|
||
value: "128740",
|
||
meaning: "Longitudinal Temporal Offset from Event",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.value,
|
||
unit: options.unit,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
_this.ContentSequence = new ContentSequence$1();
|
||
var item = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "128741",
|
||
meaning: "Longitudinal Temporal Event Type",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.eventType,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
|
||
_this.ContentSequence.push(item);
|
||
|
||
return _this;
|
||
}
|
||
|
||
return _createClass(LongitudinalTemporalOffsetFromEvent);
|
||
}(NumContentItem);
|
||
|
||
var SourceImageForRegion = /*#__PURE__*/function (_ImageContentItem) {
|
||
_inherits(SourceImageForRegion, _ImageContentItem);
|
||
|
||
var _super2 = _createSuper(SourceImageForRegion);
|
||
|
||
function SourceImageForRegion(options) {
|
||
_classCallCheck(this, SourceImageForRegion);
|
||
|
||
return _super2.call(this, {
|
||
name: new CodedConcept({
|
||
value: "121324",
|
||
meaning: "Source Image",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
referencedSOPClassUID: options.referencedSOPClassUID,
|
||
referencedSOPInstanceUID: options.referencedSOPInstanceUID,
|
||
referencedFrameNumbers: options.referencedFrameNumbers,
|
||
relationshipType: RelationshipTypes.SELECTED_FROM
|
||
});
|
||
}
|
||
|
||
return _createClass(SourceImageForRegion);
|
||
}(ImageContentItem);
|
||
|
||
var SourceImageForSegmentation = /*#__PURE__*/function (_ImageContentItem2) {
|
||
_inherits(SourceImageForSegmentation, _ImageContentItem2);
|
||
|
||
var _super3 = _createSuper(SourceImageForSegmentation);
|
||
|
||
function SourceImageForSegmentation(options) {
|
||
_classCallCheck(this, SourceImageForSegmentation);
|
||
|
||
return _super3.call(this, {
|
||
name: new CodedConcept({
|
||
value: "121233",
|
||
meaning: "Source Image for Segmentation",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
referencedSOPClassUID: options.referencedSOPClassUID,
|
||
referencedSOPInstanceUID: options.referencedSOPInstanceUID,
|
||
referencedFrameNumbers: options.referencedFrameNumbers,
|
||
relationshipType: RelationshipTypes.SELECTED_FROM
|
||
});
|
||
}
|
||
|
||
return _createClass(SourceImageForSegmentation);
|
||
}(ImageContentItem);
|
||
|
||
var SourceSeriesForSegmentation = /*#__PURE__*/function (_UIDRefContentItem) {
|
||
_inherits(SourceSeriesForSegmentation, _UIDRefContentItem);
|
||
|
||
var _super4 = _createSuper(SourceSeriesForSegmentation);
|
||
|
||
function SourceSeriesForSegmentation(options) {
|
||
_classCallCheck(this, SourceSeriesForSegmentation);
|
||
|
||
return _super4.call(this, {
|
||
name: new CodedConcept({
|
||
value: "121232",
|
||
meaning: "Source Series for Segmentation",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.referencedSeriesInstanceUID,
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
}
|
||
|
||
return _createClass(SourceSeriesForSegmentation);
|
||
}(UIDRefContentItem);
|
||
|
||
var ImageRegion = /*#__PURE__*/function (_ScoordContentItem) {
|
||
_inherits(ImageRegion, _ScoordContentItem);
|
||
|
||
var _super5 = _createSuper(ImageRegion);
|
||
|
||
function ImageRegion(options) {
|
||
var _this2;
|
||
|
||
_classCallCheck(this, ImageRegion);
|
||
|
||
_this2 = _super5.call(this, {
|
||
name: new CodedConcept({
|
||
value: "111030",
|
||
meaning: "Image Region",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
graphicType: options.graphicType,
|
||
graphicData: options.graphicData,
|
||
pixelOriginInterpretation: options.pixelOriginInterpretation,
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
|
||
if (options.graphicType === GraphicTypes.MULTIPOINT) {
|
||
throw new Error("Graphic type 'MULTIPOINT' is not valid for region.");
|
||
}
|
||
|
||
if (options.sourceImage === undefined) {
|
||
throw Error("Option 'sourceImage' is required for ImageRegion.");
|
||
}
|
||
|
||
if (!(options.sourceImage || options.sourceImage.constructor === SourceImageForRegion)) {
|
||
throw new Error("Option 'sourceImage' of ImageRegion must have type " + "SourceImageForRegion.");
|
||
}
|
||
|
||
_this2.ContentSequence = new ContentSequence$1();
|
||
|
||
_this2.ContentSequence.push(options.sourceImage);
|
||
|
||
return _this2;
|
||
}
|
||
|
||
return _createClass(ImageRegion);
|
||
}(ScoordContentItem);
|
||
|
||
var ImageRegion3D = /*#__PURE__*/function (_Scoord3DContentItem) {
|
||
_inherits(ImageRegion3D, _Scoord3DContentItem);
|
||
|
||
var _super6 = _createSuper(ImageRegion3D);
|
||
|
||
function ImageRegion3D(options) {
|
||
var _this3;
|
||
|
||
_classCallCheck(this, ImageRegion3D);
|
||
|
||
_this3 = _super6.call(this, {
|
||
name: new CodedConcept({
|
||
value: "111030",
|
||
meaning: "Image Region",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
graphicType: options.graphicType,
|
||
graphicData: options.graphicData,
|
||
frameOfReferenceUID: options.frameOfReferenceUID,
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
|
||
if (options.graphicType === GraphicTypes3D.MULTIPOINT) {
|
||
throw new Error("Graphic type 'MULTIPOINT' is not valid for region.");
|
||
}
|
||
|
||
if (options.graphicType === GraphicTypes3D.ELLIPSOID) {
|
||
throw new Error("Graphic type 'ELLIPSOID' is not valid for region.");
|
||
}
|
||
|
||
return _this3;
|
||
}
|
||
|
||
return _createClass(ImageRegion3D);
|
||
}(Scoord3DContentItem);
|
||
|
||
var VolumeSurface = /*#__PURE__*/function (_Scoord3DContentItem2) {
|
||
_inherits(VolumeSurface, _Scoord3DContentItem2);
|
||
|
||
var _super7 = _createSuper(VolumeSurface);
|
||
|
||
function VolumeSurface(options) {
|
||
var _this4;
|
||
|
||
_classCallCheck(this, VolumeSurface);
|
||
|
||
_this4 = _super7.call(this, {
|
||
name: new CodedConcept({
|
||
value: "121231",
|
||
meaning: "Volume Surface",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
graphicType: options.graphicType,
|
||
graphicData: options.graphicData,
|
||
frameOfFeferenceUID: options.frameOfFeferenceUID,
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
|
||
if (options.graphicType !== GraphicTypes3D.ELLIPSOID) {
|
||
throw new Error("Graphic type for volume surface must be 'ELLIPSOID'.");
|
||
}
|
||
|
||
_this4.ContentSequence = new ContentSequence$1();
|
||
|
||
if (options.sourceImages) {
|
||
options.sourceImages.forEach(function (image) {
|
||
if (!(image || image.constructor === SourceImageForRegion)) {
|
||
throw new Error("Items of option 'sourceImages' of VolumeSurface " + "must have type SourceImageForRegion.");
|
||
}
|
||
|
||
_this4.ContentSequence.push(image);
|
||
});
|
||
} else if (options.sourceSeries) {
|
||
if (!(options.sourceSeries || options.sourceSeries.constructor === SourceSeriesForRegion)) {
|
||
throw new Error("Option 'sourceSeries' of VolumeSurface " + "must have type SourceSeriesForRegion.");
|
||
}
|
||
|
||
_this4.ContentSequence.push(options.sourceSeries);
|
||
} else {
|
||
throw new Error("One of the following two options must be provided: " + "'sourceImage' or 'sourceSeries'.");
|
||
}
|
||
|
||
return _this4;
|
||
}
|
||
|
||
return _createClass(VolumeSurface);
|
||
}(Scoord3DContentItem);
|
||
|
||
var ReferencedRealWorldValueMap = /*#__PURE__*/function (_CompositeContentItem) {
|
||
_inherits(ReferencedRealWorldValueMap, _CompositeContentItem);
|
||
|
||
var _super8 = _createSuper(ReferencedRealWorldValueMap);
|
||
|
||
function ReferencedRealWorldValueMap(options) {
|
||
_classCallCheck(this, ReferencedRealWorldValueMap);
|
||
|
||
return _super8.call(this, {
|
||
name: new CodedConcept({
|
||
value: "126100",
|
||
meaning: "Real World Value Map used for measurement",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
referencedSOPClassUID: option.referencedSOPClassUID,
|
||
referencedSOPInstanceUID: options.referencedSOPInstanceUID,
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
}
|
||
|
||
return _createClass(ReferencedRealWorldValueMap);
|
||
}(CompositeContentItem);
|
||
|
||
var FindingSite = /*#__PURE__*/function (_CodeContentItem) {
|
||
_inherits(FindingSite, _CodeContentItem);
|
||
|
||
var _super9 = _createSuper(FindingSite);
|
||
|
||
function FindingSite(options) {
|
||
var _this5;
|
||
|
||
_classCallCheck(this, FindingSite);
|
||
|
||
_this5 = _super9.call(this, {
|
||
name: new CodedConcept({
|
||
value: "363698007",
|
||
meaning: "Finding Site",
|
||
schemeDesignator: "SCT"
|
||
}),
|
||
value: options.anatomicLocation,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
_this5.ContentSequence = new ContentSequence$1();
|
||
|
||
if (options.laterality) {
|
||
var item = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "272741003",
|
||
meaning: "Laterality",
|
||
schemeDesignator: "SCT"
|
||
}),
|
||
value: options.laterality,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
|
||
_this5.ContentSequence.push(item);
|
||
}
|
||
|
||
if (options.topographicalModifier) {
|
||
var _item = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "106233006",
|
||
meaning: "Topographical Modifier",
|
||
schemeDesignator: "SCT"
|
||
}),
|
||
value: options.topographicalModifier,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
|
||
_this5.ContentSequence.push(_item);
|
||
}
|
||
|
||
return _this5;
|
||
}
|
||
|
||
return _createClass(FindingSite);
|
||
}(CodeContentItem);
|
||
|
||
var ReferencedSegmentationFrame = /*#__PURE__*/function (_ContentSequence) {
|
||
_inherits(ReferencedSegmentationFrame, _ContentSequence);
|
||
|
||
var _super10 = _createSuper(ReferencedSegmentationFrame);
|
||
|
||
function ReferencedSegmentationFrame(options) {
|
||
var _this6;
|
||
|
||
_classCallCheck(this, ReferencedSegmentationFrame);
|
||
|
||
if (options.sopClassUID === undefined) {
|
||
throw new Error("Option 'sopClassUID' is required for ReferencedSegmentationFrame.");
|
||
}
|
||
|
||
if (options.sopInstanceUID === undefined) {
|
||
throw new Error("Option 'sopInstanceUID' is required for ReferencedSegmentationFrame.");
|
||
}
|
||
|
||
if (options.frameNumber === undefined) {
|
||
throw new Error("Option 'frameNumber' is required for ReferencedSegmentationFrame.");
|
||
}
|
||
|
||
if (options.segmentNumber === undefined) {
|
||
throw new Error("Option 'segmentNumber' is required for ReferencedSegmentationFrame.");
|
||
}
|
||
|
||
if (options.sourceImage === undefined) {
|
||
throw new Error("Option 'sourceImage' is required for ReferencedSegmentationFrame.");
|
||
}
|
||
|
||
_this6 = _super10.call(this);
|
||
var segmentationItem = ImageContentItem({
|
||
name: new CodedConcept({
|
||
value: "121214",
|
||
meaning: "Referenced Segmentation Frame",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
referencedSOPClassUid: options.sopClassUid,
|
||
referencedSOPInstanceUid: options.sopInstanceUid,
|
||
referencedFrameNumber: options.frameNumber,
|
||
referencedSegmentNumber: options.segmentNumber
|
||
});
|
||
|
||
_this6.push(segmentationItem);
|
||
|
||
if (options.sourceImage.constructor !== SourceImageForSegmentation) {
|
||
throw new Error("Option 'sourceImage' must have type SourceImageForSegmentation.");
|
||
}
|
||
|
||
_this6.push(sourceImage);
|
||
|
||
return _this6;
|
||
}
|
||
|
||
return _createClass(ReferencedSegmentationFrame);
|
||
}(ContentSequence$1);
|
||
|
||
var ReferencedSegmentation = /*#__PURE__*/function (_ContentSequence2) {
|
||
_inherits(ReferencedSegmentation, _ContentSequence2);
|
||
|
||
var _super11 = _createSuper(ReferencedSegmentation);
|
||
|
||
function ReferencedSegmentation(options) {
|
||
var _this7;
|
||
|
||
_classCallCheck(this, ReferencedSegmentation);
|
||
|
||
if (options.sopClassUID === undefined) {
|
||
throw new Error("Option 'sopClassUID' is required for ReferencedSegmentation.");
|
||
}
|
||
|
||
if (options.sopInstanceUID === undefined) {
|
||
throw new Error("Option 'sopInstanceUID' is required for ReferencedSegmentation.");
|
||
}
|
||
|
||
if (options.frameNumbers === undefined) {
|
||
throw new Error("Option 'frameNumbers' is required for ReferencedSegmentation.");
|
||
}
|
||
|
||
if (options.segmentNumber === undefined) {
|
||
throw new Error("Option 'segmentNumber' is required for ReferencedSegmentation.");
|
||
}
|
||
|
||
_this7 = _super11.call(this);
|
||
var segmentationItem = new ImageContentItem({
|
||
name: new CodedConcept({
|
||
value: "121191",
|
||
meaning: "Referenced Segment",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
referencedSOPClassUid: options.sopClassUid,
|
||
referencedSOPInstanceUid: options.sopInstanceUid,
|
||
referencedFrameNumber: options.frameNumbers,
|
||
referencedSegmentNumber: options.segmentNumber
|
||
});
|
||
|
||
_this7.push(segmentationItem);
|
||
|
||
if (options.sourceImages !== undefined) {
|
||
options.sourceImages.forEach(function (image) {
|
||
if (!image || image.constructor !== SourceImageForSegmentation) {
|
||
throw new Error("Items of option 'sourceImages' must have type " + "SourceImageForSegmentation.");
|
||
}
|
||
|
||
_this7.push(image);
|
||
});
|
||
} else if (options.sourceSeries !== undefined) {
|
||
if (options.sourceSeries.constructor !== SourceSeriesForSegmentation) {
|
||
throw new Error("Option 'sourceSeries' must have type SourceSeriesForSegmentation.");
|
||
}
|
||
|
||
_this7.push(sourceSeries);
|
||
} else {
|
||
throw new Error("One of the following two options must be provided: " + "'sourceImages' or 'sourceSeries'.");
|
||
}
|
||
|
||
return _this7;
|
||
}
|
||
|
||
return _createClass(ReferencedSegmentation);
|
||
}(ContentSequence$1);
|
||
|
||
var contentItems = /*#__PURE__*/Object.freeze({
|
||
__proto__: null,
|
||
FindingSite: FindingSite,
|
||
ImageRegion: ImageRegion,
|
||
ImageRegion3D: ImageRegion3D,
|
||
LongitudinalTemporalOffsetFromEvent: LongitudinalTemporalOffsetFromEvent,
|
||
ReferencedRealWorldValueMap: ReferencedRealWorldValueMap,
|
||
ReferencedSegmentation: ReferencedSegmentation,
|
||
ReferencedSegmentationFrame: ReferencedSegmentationFrame,
|
||
SourceImageForRegion: SourceImageForRegion,
|
||
SourceImageForSegmentation: SourceImageForSegmentation,
|
||
SourceSeriesForSegmentation: SourceSeriesForSegmentation,
|
||
VolumeSurface: VolumeSurface
|
||
});
|
||
|
||
var Template = /*#__PURE__*/function (_ContentSequence) {
|
||
_inherits(Template, _ContentSequence);
|
||
|
||
var _super = _createSuper(Template);
|
||
|
||
function Template() {
|
||
_classCallCheck(this, Template);
|
||
|
||
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
||
args[_key] = arguments[_key];
|
||
}
|
||
|
||
return _super.call.apply(_super, [this].concat(args));
|
||
}
|
||
|
||
return _createClass(Template);
|
||
}(ContentSequence$1);
|
||
|
||
var Measurement = /*#__PURE__*/function (_Template) {
|
||
_inherits(Measurement, _Template);
|
||
|
||
var _super2 = _createSuper(Measurement);
|
||
|
||
function Measurement(options) {
|
||
var _valueItem$ContentSeq;
|
||
|
||
var _this;
|
||
|
||
_classCallCheck(this, Measurement);
|
||
|
||
_this = _super2.call(this);
|
||
var valueItem = new NumContentItem({
|
||
name: options.name,
|
||
value: options.value,
|
||
unit: options.unit,
|
||
qualifier: options.qualifier,
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
valueItem.ContentSequence = new ContentSequence$1();
|
||
|
||
if (options.trackingIdentifier === undefined) {
|
||
throw new Error("Option 'trackingIdentifier' is required for Measurement.");
|
||
}
|
||
|
||
if (options.trackingIdentifier.constructor === TrackingIdentifier) {
|
||
throw new Error("Option 'trackingIdentifier' must have type TrackingIdentifier.");
|
||
}
|
||
|
||
(_valueItem$ContentSeq = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq, _toConsumableArray(options.trackingIdentifier));
|
||
|
||
if (options.method !== undefined) {
|
||
var methodItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "370129005",
|
||
meaning: "Measurement Method",
|
||
schemeDesignator: "SCT"
|
||
}),
|
||
value: options.method,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
valueItem.ContentSequence.push(methodItem);
|
||
}
|
||
|
||
if (options.derivation !== undefined) {
|
||
var derivationItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "121401",
|
||
meaning: "Derivation",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.derivation,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
valueItem.ContentSequence.push(derivationItem);
|
||
}
|
||
|
||
if (options.findingSites !== undefined) {
|
||
if (!(_typeof(options.findingSites) === "object" || options.findingSites instanceof Array)) {
|
||
throw new Error("Option 'findingSites' must have type Array.");
|
||
}
|
||
|
||
options.findingSites.forEach(function (site) {
|
||
if (!site || site.constructor !== FindingSite) {
|
||
throw new Error("Items of option 'findingSites' must have type FindingSite.");
|
||
}
|
||
|
||
valueItem.ContentSequence.push(site);
|
||
});
|
||
}
|
||
|
||
if (options.properties !== undefined) {
|
||
var _valueItem$ContentSeq2;
|
||
|
||
if (options.properties.constructor !== MeasurementProperties) {
|
||
throw new Error("Option 'properties' must have type MeasurementProperties.");
|
||
}
|
||
|
||
(_valueItem$ContentSeq2 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq2, _toConsumableArray(options.properties));
|
||
}
|
||
|
||
if (options.referencedRegions !== undefined) {
|
||
if (!(_typeof(options.referencedRegions) === "object" || options.referencedRegions instanceof Array)) {
|
||
throw new Error("Option 'referencedRegions' must have type Array.");
|
||
}
|
||
|
||
options.referencedRegions.forEach(function (region) {
|
||
if (!region || region.constructor !== ImageRegion && region.constructor !== ImageRegion3D) {
|
||
throw new Error("Items of option 'referencedRegion' must have type " + "ImageRegion or ImageRegion3D.");
|
||
}
|
||
|
||
valueItem.ContentSequence.push(region);
|
||
});
|
||
} else if (options.referencedVolume !== undefined) {
|
||
if (options.referencedVolume.constructor !== VolumeSurface) {
|
||
throw new Error("Option 'referencedVolume' must have type VolumeSurface.");
|
||
}
|
||
|
||
valueItem.ContentSequence.push(options.referencedVolume);
|
||
} else if (options.referencedSegmentation !== undefined) {
|
||
if (options.referencedSegmentation.constructor !== ReferencedSegmentation && options.referencedSegmentation.constructor !== ReferencedSegmentationFrame) {
|
||
throw new Error("Option 'referencedSegmentation' must have type " + "ReferencedSegmentation or ReferencedSegmentationFrame.");
|
||
}
|
||
|
||
valueItem.ContentSequence.push(options.referencedSegmentation);
|
||
}
|
||
|
||
if (options.referencedRealWorldValueMap !== undefined) {
|
||
if (options.referencedRealWorldValueMap.constructor !== ReferencedRealWorldValueMap) {
|
||
throw new Error("Option 'referencedRealWorldValueMap' must have type " + "ReferencedRealWorldValueMap.");
|
||
}
|
||
|
||
valueItem.ContentSequence.push(options.referencedRealWorldValueMap);
|
||
}
|
||
|
||
if (options.algorithmId !== undefined) {
|
||
var _valueItem$ContentSeq3;
|
||
|
||
if (options.algorithmId.constructor !== AlgorithmIdentification) {
|
||
throw new Error("Option 'algorithmId' must have type AlgorithmIdentification.");
|
||
}
|
||
|
||
(_valueItem$ContentSeq3 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq3, _toConsumableArray(options.algorithmId));
|
||
}
|
||
|
||
_this.push(valueItem);
|
||
|
||
return _this;
|
||
}
|
||
|
||
return _createClass(Measurement);
|
||
}(Template);
|
||
|
||
var MeasurementProperties = /*#__PURE__*/function (_Template2) {
|
||
_inherits(MeasurementProperties, _Template2);
|
||
|
||
var _super3 = _createSuper(MeasurementProperties);
|
||
|
||
function MeasurementProperties(options) {
|
||
var _this2;
|
||
|
||
_classCallCheck(this, MeasurementProperties);
|
||
|
||
_this2 = _super3.call(this);
|
||
|
||
if (options.normality !== undefined) {
|
||
var normalityItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "121402",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Normality"
|
||
}),
|
||
value: options.normality,
|
||
relationshipType: RelationshipTypes.HAS_PROPERTIES
|
||
});
|
||
|
||
_this2.push(normalityItem);
|
||
}
|
||
|
||
if (options.measurementStatisticalProperties !== undefined) {
|
||
var _this3;
|
||
|
||
if (options.measurementStatisticalProperties.constructor !== MeasurementStatisticalProperties) {
|
||
throw new Error("Option 'measurmentStatisticalProperties' must have type " + "MeasurementStatisticalProperties.");
|
||
}
|
||
|
||
(_this3 = _this2).push.apply(_this3, _toConsumableArray(measurementStatisticalProperties));
|
||
}
|
||
|
||
if (options.normalRangeProperties !== undefined) {
|
||
var _this4;
|
||
|
||
if (options.normalRangeProperties.constructor !== NormalRangeProperties) {
|
||
throw new Error("Option 'normalRangeProperties' must have type NormalRangeProperties.");
|
||
}
|
||
|
||
(_this4 = _this2).push.apply(_this4, _toConsumableArray(normalRangeProperties));
|
||
}
|
||
|
||
if (options.levelOfSignificance !== undefined) {
|
||
var levelOfSignificanceItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "121403",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Level of Significance"
|
||
}),
|
||
value: options.levelOfSignificance,
|
||
relationshipType: RelationshipTypes.HAS_PROPERTIES
|
||
});
|
||
|
||
_this2.push(levelOfSignificanceItem);
|
||
}
|
||
|
||
if (options.selectionStatus !== undefined) {
|
||
var selectionStatusItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "121404",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Selection Status"
|
||
}),
|
||
value: options.selectionStatus,
|
||
relationshipType: RelationshipTypes.HAS_PROPERTIES
|
||
});
|
||
|
||
_this2.push(selectionStatusItem);
|
||
}
|
||
|
||
if (options.upperMeasurementUncertainty !== undefined) {
|
||
var upperMeasurementUncertaintyItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "R-00364",
|
||
schemeDesignator: "SRT",
|
||
meaning: "Range of Upper Measurement Uncertainty"
|
||
}),
|
||
value: options.upperMeasurementUncertainty,
|
||
relationshipType: RelationshipTypes.HAS_PROPERTIES
|
||
});
|
||
|
||
_this2.push(upperMeasurementUncertaintyItem);
|
||
}
|
||
|
||
if (options.lowerMeasurementUncertainty !== undefined) {
|
||
var lowerMeasurementUncertaintyItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "R-00362",
|
||
schemeDesignator: "SRT",
|
||
meaning: "Range of Lower Measurement Uncertainty"
|
||
}),
|
||
value: options.lowerMeasurementUncertainty,
|
||
relationshipType: RelationshipTypes.HAS_PROPERTIES
|
||
});
|
||
|
||
_this2.push(lowerMeasurementUncertaintyItem);
|
||
}
|
||
|
||
return _this2;
|
||
}
|
||
|
||
return _createClass(MeasurementProperties);
|
||
}(Template);
|
||
|
||
var MeasurementStatisticalProperties = /*#__PURE__*/function (_Template3) {
|
||
_inherits(MeasurementStatisticalProperties, _Template3);
|
||
|
||
var _super4 = _createSuper(MeasurementStatisticalProperties);
|
||
|
||
function MeasurementStatisticalProperties(options) {
|
||
var _this5;
|
||
|
||
_classCallCheck(this, MeasurementStatisticalProperties);
|
||
|
||
_this5 = _super4.call(this);
|
||
|
||
if (options.values === undefined) {
|
||
throw new Error("Option 'values' is required for MeasurementStatisticalProperties.");
|
||
}
|
||
|
||
if (!(_typeof(options.values) === "object" || options.values instanceof Array)) {
|
||
throw new Error("Option 'values' must have type Array.");
|
||
}
|
||
|
||
options.values.forEach(function (value) {
|
||
if (!options.concept || options.concept.constructor !== NumContentItem) {
|
||
throw new Error("Items of option 'values' must have type NumContentItem.");
|
||
}
|
||
|
||
_this5.push(value);
|
||
});
|
||
|
||
if (options.description !== undefined) {
|
||
new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121405",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Population Description"
|
||
}),
|
||
value: options.authority,
|
||
relationshipType: RelationshipTypes.HAS_PROPERTIES
|
||
});
|
||
|
||
_this5.push(authorityItem);
|
||
}
|
||
|
||
if (options.authority !== undefined) {
|
||
var _authorityItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121406",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Population Authority"
|
||
}),
|
||
value: options.authority,
|
||
relationshipType: RelationshipTypes.HAS_PROPERTIES
|
||
});
|
||
|
||
_this5.push(_authorityItem);
|
||
}
|
||
|
||
return _this5;
|
||
}
|
||
|
||
return _createClass(MeasurementStatisticalProperties);
|
||
}(Template);
|
||
|
||
var NormalRangeProperties = /*#__PURE__*/function (_Template4) {
|
||
_inherits(NormalRangeProperties, _Template4);
|
||
|
||
var _super5 = _createSuper(NormalRangeProperties);
|
||
|
||
function NormalRangeProperties(options) {
|
||
var _this6;
|
||
|
||
_classCallCheck(this, NormalRangeProperties);
|
||
|
||
_this6 = _super5.call(this);
|
||
|
||
if (options.values === undefined) {
|
||
throw new Error("Option 'values' is required for NormalRangeProperties.");
|
||
}
|
||
|
||
if (!(_typeof(options.values) === "object" || options.values instanceof Array)) {
|
||
throw new Error("Option 'values' must have type Array.");
|
||
}
|
||
|
||
options.values.forEach(function (value) {
|
||
if (!options.concept || options.concept.constructor !== NumContentItem) {
|
||
throw new Error("Items of option 'values' must have type NumContentItem.");
|
||
}
|
||
|
||
_this6.push(value);
|
||
});
|
||
|
||
if (options.description !== undefined) {
|
||
new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121407",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Normal Range Description"
|
||
}),
|
||
value: options.authority,
|
||
relationshipType: RelationshipTypes.HAS_PROPERTIES
|
||
});
|
||
|
||
_this6.push(authorityItem);
|
||
}
|
||
|
||
if (options.authority !== undefined) {
|
||
var _authorityItem2 = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121408",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Normal Range Authority"
|
||
}),
|
||
value: options.authority,
|
||
relationshipType: RelationshipTypes.HAS_PROPERTIES
|
||
});
|
||
|
||
_this6.push(_authorityItem2);
|
||
}
|
||
|
||
return _this6;
|
||
}
|
||
|
||
return _createClass(NormalRangeProperties);
|
||
}(Template);
|
||
|
||
var ObservationContext = /*#__PURE__*/function (_Template5) {
|
||
_inherits(ObservationContext, _Template5);
|
||
|
||
var _super6 = _createSuper(ObservationContext);
|
||
|
||
function ObservationContext(options) {
|
||
var _this8;
|
||
|
||
var _this7;
|
||
|
||
_classCallCheck(this, ObservationContext);
|
||
|
||
_this7 = _super6.call(this);
|
||
|
||
if (options.observerPersonContext === undefined) {
|
||
throw new Error("Option 'observerPersonContext' is required for ObservationContext.");
|
||
}
|
||
|
||
if (options.observerPersonContext.constructor !== ObserverContext) {
|
||
throw new Error("Option 'observerPersonContext' must have type ObserverContext");
|
||
}
|
||
|
||
(_this8 = _this7).push.apply(_this8, _toConsumableArray(options.observerPersonContext));
|
||
|
||
if (options.observerDeviceContext !== undefined) {
|
||
var _this9;
|
||
|
||
if (options.observerDeviceContext.constructor !== ObserverContext) {
|
||
throw new Error("Option 'observerDeviceContext' must have type ObserverContext");
|
||
}
|
||
|
||
(_this9 = _this7).push.apply(_this9, _toConsumableArray(options.observerDeviceContext));
|
||
}
|
||
|
||
if (options.subjectContext !== undefined) {
|
||
var _this10;
|
||
|
||
if (options.subjectContext.constructor !== SubjectContext) {
|
||
throw new Error("Option 'subjectContext' must have type SubjectContext");
|
||
}
|
||
|
||
(_this10 = _this7).push.apply(_this10, _toConsumableArray(options.subjectContext));
|
||
}
|
||
|
||
return _this7;
|
||
}
|
||
|
||
return _createClass(ObservationContext);
|
||
}(Template);
|
||
|
||
var ObserverContext = /*#__PURE__*/function (_Template6) {
|
||
_inherits(ObserverContext, _Template6);
|
||
|
||
var _super7 = _createSuper(ObserverContext);
|
||
|
||
function ObserverContext(options) {
|
||
var _this12;
|
||
|
||
var _this11;
|
||
|
||
_classCallCheck(this, ObserverContext);
|
||
|
||
_this11 = _super7.call(this);
|
||
|
||
if (options.observerType === undefined) {
|
||
throw new Error("Option 'observerType' is required for ObserverContext.");
|
||
} else {
|
||
if (options.observerType.constructor !== Code && options.observerType.constructor !== CodedConcept) {
|
||
throw new Error("Option 'observerType' must have type Code or CodedConcept.");
|
||
}
|
||
}
|
||
|
||
var observerTypeItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "121005",
|
||
meaning: "Observer Type",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.observerType,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this11.push(observerTypeItem);
|
||
|
||
if (options.observerIdentifyingAttributes === undefined) {
|
||
throw new Error("Option 'observerIdentifyingAttributes' is required for ObserverContext.");
|
||
} // FIXME
|
||
|
||
|
||
var person = new CodedConcept({
|
||
value: "121006",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Person"
|
||
});
|
||
var device = new CodedConcept({
|
||
value: "121007",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Device"
|
||
});
|
||
|
||
if (person.equals(options.observerType)) {
|
||
if (options.observerIdentifyingAttributes.constructor !== PersonObserverIdentifyingAttributes) {
|
||
throw new Error("Option 'observerIdentifyingAttributes' must have type " + "PersonObserverIdentifyingAttributes for 'Person' observer type.");
|
||
}
|
||
} else if (device.equals(options.observerType)) {
|
||
if (options.observerIdentifyingAttributes.constructor !== DeviceObserverIdentifyingAttributes) {
|
||
throw new Error("Option 'observerIdentifyingAttributes' must have type " + "DeviceObserverIdentifyingAttributes for 'Device' observer type.");
|
||
}
|
||
} else {
|
||
throw new Error("Option 'oberverType' must be either 'Person' or 'Device'.");
|
||
}
|
||
|
||
(_this12 = _this11).push.apply(_this12, _toConsumableArray(options.observerIdentifyingAttributes));
|
||
|
||
return _this11;
|
||
}
|
||
|
||
return _createClass(ObserverContext);
|
||
}(Template);
|
||
|
||
var PersonObserverIdentifyingAttributes = /*#__PURE__*/function (_Template7) {
|
||
_inherits(PersonObserverIdentifyingAttributes, _Template7);
|
||
|
||
var _super8 = _createSuper(PersonObserverIdentifyingAttributes);
|
||
|
||
function PersonObserverIdentifyingAttributes(options) {
|
||
var _this13;
|
||
|
||
_classCallCheck(this, PersonObserverIdentifyingAttributes);
|
||
|
||
_this13 = _super8.call(this);
|
||
|
||
if (options.name === undefined) {
|
||
throw new Error("Option 'name' is required for PersonObserverIdentifyingAttributes.");
|
||
}
|
||
|
||
var nameItem = new PNameContentItem({
|
||
name: new CodedConcept({
|
||
value: "121008",
|
||
meaning: "Person Observer Name",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.name,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this13.push(nameItem);
|
||
|
||
if (options.loginName !== undefined) {
|
||
var loginNameItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "128774",
|
||
meaning: "Person Observer's Login Name",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.loginName,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this13.push(loginNameItem);
|
||
}
|
||
|
||
if (options.organizationName !== undefined) {
|
||
var organizationNameItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121009",
|
||
meaning: "Person Observer's Organization Name",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.organizationName,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this13.push(organizationNameItem);
|
||
}
|
||
|
||
if (options.roleInOrganization !== undefined) {
|
||
var roleInOrganizationItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "121010",
|
||
meaning: "Person Observer's Role in the Organization",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.roleInOrganization,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this13.push(roleInOrganizationItem);
|
||
}
|
||
|
||
if (options.roleInProcedure !== undefined) {
|
||
var roleInProcedureItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "121011",
|
||
meaning: "Person Observer's Role in this Procedure",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.roleInProcedure,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this13.push(roleInProcedureItem);
|
||
}
|
||
|
||
return _this13;
|
||
}
|
||
|
||
return _createClass(PersonObserverIdentifyingAttributes);
|
||
}(Template);
|
||
|
||
var DeviceObserverIdentifyingAttributes = /*#__PURE__*/function (_Template8) {
|
||
_inherits(DeviceObserverIdentifyingAttributes, _Template8);
|
||
|
||
var _super9 = _createSuper(DeviceObserverIdentifyingAttributes);
|
||
|
||
function DeviceObserverIdentifyingAttributes(options) {
|
||
var _this14;
|
||
|
||
_classCallCheck(this, DeviceObserverIdentifyingAttributes);
|
||
|
||
_this14 = _super9.call(this);
|
||
|
||
if (options.uid === undefined) {
|
||
throw new Error("Option 'uid' is required for DeviceObserverIdentifyingAttributes.");
|
||
}
|
||
|
||
var deviceObserverItem = new UIDRefContentItem({
|
||
name: new CodedConcept({
|
||
value: "121012",
|
||
meaning: "Device Observer UID",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.uid,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this14.push(deviceObserverItem);
|
||
|
||
if (options.manufacturerName !== undefined) {
|
||
var manufacturerNameItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121013",
|
||
meaning: "Device Observer Manufacturer",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.manufacturerName,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this14.push(manufacturerNameItem);
|
||
}
|
||
|
||
if (options.modelName !== undefined) {
|
||
var modelNameItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121015",
|
||
meaning: "Device Observer Model Name",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.modelName,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this14.push(modelNameItem);
|
||
}
|
||
|
||
if (options.serialNumber !== undefined) {
|
||
var serialNumberItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121016",
|
||
meaning: "Device Observer Serial Number",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.serialNumber,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this14.push(serialNumberItem);
|
||
}
|
||
|
||
if (options.physicalLocation !== undefined) {
|
||
var physicalLocationItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121017",
|
||
meaning: "Device Observer Physical Location During Observation",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.physicalLocation,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this14.push(physicalLocationItem);
|
||
}
|
||
|
||
if (options.roleInProcedure !== undefined) {
|
||
var roleInProcedureItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "113876",
|
||
meaning: "Device Role in Procedure",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.roleInProcedure,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this14.push(roleInProcedureItem);
|
||
}
|
||
|
||
return _this14;
|
||
}
|
||
|
||
return _createClass(DeviceObserverIdentifyingAttributes);
|
||
}(Template);
|
||
|
||
var SubjectContext = /*#__PURE__*/function (_Template9) {
|
||
_inherits(SubjectContext, _Template9);
|
||
|
||
var _super10 = _createSuper(SubjectContext);
|
||
|
||
function SubjectContext(options) {
|
||
var _this16;
|
||
|
||
var _this15;
|
||
|
||
_classCallCheck(this, SubjectContext);
|
||
|
||
_this15 = _super10.call(this);
|
||
|
||
if (options.subjectClass === undefined) {
|
||
throw new Error("Option 'subjectClass' is required for SubjectContext.");
|
||
}
|
||
|
||
if (options.subjectClassSpecificContext === undefined) {
|
||
throw new Error("Option 'subjectClassSpecificContext' is required for SubjectContext.");
|
||
}
|
||
|
||
var subjectClassItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "121024",
|
||
meaning: "Subject Class",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.subjectClass,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this15.push(subjectClassItem);
|
||
|
||
var fetus = new CodedConcept({
|
||
value: "121026 ",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Fetus"
|
||
});
|
||
var specimen = new CodedConcept({
|
||
value: "121027",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Specimen"
|
||
});
|
||
var device = new CodedConcept({
|
||
value: "121192",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Device Subject"
|
||
});
|
||
|
||
if (fetus.equals(options.subjectClass)) {
|
||
if (options.subjectClassSpecificContext.constructor !== SubjectContextFetus) {
|
||
throw new Error("Option 'subjectClass' must have type " + "SubjectContextFetus for 'Fetus' subject class.");
|
||
}
|
||
} else if (specimen.equals(options.subjectClass)) {
|
||
if (options.subjectClassSpecificContext.constructor !== SubjectContextSpecimen) {
|
||
throw new Error("Option 'subjectClass' must have type " + "SubjectContextSpecimen for 'Specimen' subject class.");
|
||
}
|
||
} else if (device.equals(options.subjectClass)) {
|
||
if (options.subjectClassSpecificContext.constructor !== SubjectContextDevice) {
|
||
throw new Error("Option 'subjectClass' must have type " + "SubjectContextDevice for 'Device' subject class.");
|
||
}
|
||
} else {
|
||
throw new Error("Option 'subjectClass' must be either 'Fetus', 'Specimen', or 'Device'.");
|
||
}
|
||
|
||
(_this16 = _this15).push.apply(_this16, _toConsumableArray(options.subjectClassSpecificContext));
|
||
|
||
return _this15;
|
||
}
|
||
|
||
return _createClass(SubjectContext);
|
||
}(Template);
|
||
|
||
var SubjectContextFetus = /*#__PURE__*/function (_Template10) {
|
||
_inherits(SubjectContextFetus, _Template10);
|
||
|
||
var _super11 = _createSuper(SubjectContextFetus);
|
||
|
||
function SubjectContextFetus(options) {
|
||
var _this17;
|
||
|
||
_classCallCheck(this, SubjectContextFetus);
|
||
|
||
_this17 = _super11.call(this);
|
||
|
||
if (options.subjectID === undefined) {
|
||
throw new Error("Option 'subjectID' is required for SubjectContextFetus.");
|
||
}
|
||
|
||
var subjectIdItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121030",
|
||
meaning: "Subject ID",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.subjectID,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this17.push(subjectIdItem);
|
||
|
||
return _this17;
|
||
}
|
||
|
||
return _createClass(SubjectContextFetus);
|
||
}(Template);
|
||
|
||
var SubjectContextSpecimen = /*#__PURE__*/function (_Template11) {
|
||
_inherits(SubjectContextSpecimen, _Template11);
|
||
|
||
var _super12 = _createSuper(SubjectContextSpecimen);
|
||
|
||
function SubjectContextSpecimen(options) {
|
||
var _this18;
|
||
|
||
_classCallCheck(this, SubjectContextSpecimen);
|
||
|
||
_this18 = _super12.call(this);
|
||
|
||
if (options.uid === undefined) {
|
||
throw new Error("Option 'uid' is required for SubjectContextSpecimen.");
|
||
}
|
||
|
||
var specimenUidItem = new UIDRefContentItem({
|
||
name: new CodedConcept({
|
||
value: "121039",
|
||
meaning: "Specimen UID",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.uid,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this18.push(specimenUidItem);
|
||
|
||
if (options.identifier !== undefined) {
|
||
var specimenIdentifierItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121041",
|
||
meaning: "Specimen Identifier",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.identifier,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this18.push(specimenIdentifierItem);
|
||
}
|
||
|
||
if (options.containerIdentifier !== undefined) {
|
||
var containerIdentifierItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "111700",
|
||
meaning: "Specimen Container Identifier",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.containerIdentifier,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this18.push(containerIdentifierItem);
|
||
}
|
||
|
||
if (options.specimenType !== undefined) {
|
||
var specimenTypeItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "R-00254",
|
||
meaning: "Specimen Type",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.specimenType,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this18.push(specimenTypeItem);
|
||
}
|
||
|
||
return _this18;
|
||
}
|
||
|
||
return _createClass(SubjectContextSpecimen);
|
||
}(Template);
|
||
|
||
var SubjectContextDevice = /*#__PURE__*/function (_Template12) {
|
||
_inherits(SubjectContextDevice, _Template12);
|
||
|
||
_createSuper(SubjectContextDevice);
|
||
|
||
function SubjectContextDevice(options) {
|
||
var _this19;
|
||
|
||
_classCallCheck(this, SubjectContextDevice);
|
||
|
||
if (options.name === undefined) {
|
||
throw new Error("Option 'name' is required for SubjectContextDevice.");
|
||
}
|
||
|
||
var deviceNameItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121193",
|
||
meaning: "Device Subject Name",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.name,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this19.push(deviceNameItem);
|
||
|
||
if (options.uid !== undefined) {
|
||
var deviceUidItem = new UIDRefContentItem({
|
||
name: new CodedConcept({
|
||
value: "121198",
|
||
meaning: "Device Subject UID",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.uid,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this19.push(deviceUidItem);
|
||
}
|
||
|
||
if (options.manufacturerName !== undefined) {
|
||
var manufacturerNameItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121194",
|
||
meaning: "Device Subject Manufacturer",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.manufacturerName,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this19.push(manufacturerNameItem);
|
||
}
|
||
|
||
if (options.modelName !== undefined) {
|
||
var modelNameItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121195",
|
||
meaning: "Device Subject Model Name",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.modelName,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this19.push(modelNameItem);
|
||
}
|
||
|
||
if (options.serialNumber !== undefined) {
|
||
var serialNumberItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121196",
|
||
meaning: "Device Subject Serial Number",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.serialNumber,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this19.push(serialNumberItem);
|
||
}
|
||
|
||
if (options.physicalLocation !== undefined) {
|
||
var physicalLocationItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "121197",
|
||
meaning: "Device Subject Physical Location During Observation",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.physicalLocation,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this19.push(physicalLocationItem);
|
||
}
|
||
|
||
return _possibleConstructorReturn(_this19);
|
||
}
|
||
|
||
return _createClass(SubjectContextDevice);
|
||
}(Template);
|
||
|
||
var LanguageOfContentItemAndDescendants = /*#__PURE__*/function (_Template13) {
|
||
_inherits(LanguageOfContentItemAndDescendants, _Template13);
|
||
|
||
var _super14 = _createSuper(LanguageOfContentItemAndDescendants);
|
||
|
||
function LanguageOfContentItemAndDescendants(options) {
|
||
var _this20;
|
||
|
||
_classCallCheck(this, LanguageOfContentItemAndDescendants);
|
||
|
||
_this20 = _super14.call(this);
|
||
|
||
if (options.language === undefined) {
|
||
options.language = new CodedConcept({
|
||
value: "en-US",
|
||
schemeDesignator: "RFC5646",
|
||
meaning: "English (United States)"
|
||
});
|
||
}
|
||
|
||
var languageItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "121049",
|
||
meaning: "Language of Content Item and Descendants",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.language,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
|
||
_this20.push(languageItem);
|
||
|
||
return _this20;
|
||
}
|
||
|
||
return _createClass(LanguageOfContentItemAndDescendants);
|
||
}(Template);
|
||
|
||
var _MeasurementsAndQualitatitiveEvaluations = /*#__PURE__*/function (_Template14) {
|
||
_inherits(_MeasurementsAndQualitatitiveEvaluations, _Template14);
|
||
|
||
var _super15 = _createSuper(_MeasurementsAndQualitatitiveEvaluations);
|
||
|
||
function _MeasurementsAndQualitatitiveEvaluations(options) {
|
||
var _groupItem$ContentSeq;
|
||
|
||
var _this21;
|
||
|
||
_classCallCheck(this, _MeasurementsAndQualitatitiveEvaluations);
|
||
|
||
_this21 = _super15.call(this);
|
||
var groupItem = new ContainerContentItem({
|
||
name: new CodedConcept({
|
||
value: "125007",
|
||
meaning: "Measurement Group",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
groupItem.ContentSequence = new ContentSequence$1();
|
||
|
||
if (options.trackingIdentifier === undefined) {
|
||
throw new Error("Option 'trackingIdentifier' is required for measurements group.");
|
||
}
|
||
|
||
if (options.trackingIdentifier.constructor !== TrackingIdentifier) {
|
||
throw new Error("Option 'trackingIdentifier' must have type TrackingIdentifier.");
|
||
}
|
||
|
||
if (options.trackingIdentifier.length !== 2) {
|
||
throw new Error("Option 'trackingIdentifier' must include a human readable tracking " + "identifier and a tracking unique identifier.");
|
||
}
|
||
|
||
(_groupItem$ContentSeq = groupItem.ContentSequence).push.apply(_groupItem$ContentSeq, _toConsumableArray(options.trackingIdentifier));
|
||
|
||
if (options.session !== undefined) {
|
||
var sessionItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "C67447",
|
||
meaning: "Activity Session",
|
||
schemeDesignator: "NCIt"
|
||
}),
|
||
value: options.session,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
groupItem.ContentSequence.push(sessionItem);
|
||
}
|
||
|
||
if (options.findingType !== undefined) {
|
||
var findingTypeItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "121071",
|
||
meaning: "Finding",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.findingType,
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
groupItem.ContentSequence.push(findingTypeItem);
|
||
}
|
||
|
||
if (options.timePointContext !== undefined) {
|
||
var _groupItem$ContentSeq2;
|
||
|
||
if (options.timePointContext.constructor !== TimePointContext) {
|
||
throw new Error("Option 'timePointContext' must have type TimePointContext.");
|
||
}
|
||
|
||
(_groupItem$ContentSeq2 = groupItem.ContentSequence).push.apply(_groupItem$ContentSeq2, _toConsumableArray(timePointContext));
|
||
}
|
||
|
||
if (options.referencedRealWorldValueMap !== undefined) {
|
||
if (options.referencedRealWorldValueMap.constructor !== ReferencedRealWorldValueMap) {
|
||
throw new Error("Option 'referencedRealWorldValleMap' must have type " + "ReferencedRealWorldValueMap.");
|
||
}
|
||
|
||
groupItem.ContentSequence.push(options.referencedRealWorldValueMap);
|
||
}
|
||
|
||
if (options.measurements !== undefined) {
|
||
if (!(_typeof(options.measurements) === "object" || options.measurements instanceof Array)) {
|
||
throw new Error("Option 'measurements' must have type Array.");
|
||
}
|
||
|
||
options.measurements.forEach(function (measurement) {
|
||
console.log(measurement);
|
||
|
||
if (!measurement || measurement.constructor !== NumContentItem) {
|
||
throw new Error("Items of option 'measurement' must have type NumContentItem.");
|
||
}
|
||
|
||
groupItem.ContentSequence.push(measurement);
|
||
});
|
||
}
|
||
|
||
if (options.qualitativeEvaluations !== undefined) {
|
||
if (!(_typeof(options.qualitativeEvaluations) === "object" || options.qualitativeEvaluations instanceof Array)) {
|
||
throw new Error("Option 'qualitativeEvaluations' must have type Array.");
|
||
}
|
||
|
||
options.qualitativeEvaluations.forEach(function (evaluation) {
|
||
if (!evaluation || evaluation.constructor !== CodeContentItem && evaluation.constructor !== TextContentItem) {
|
||
throw new Error("Items of option 'qualitativeEvaluations' must have type " + "CodeContentItem or TextContentItem.");
|
||
}
|
||
|
||
groupItem.ContentSequence.push(evaluation);
|
||
});
|
||
}
|
||
|
||
_this21.push(groupItem);
|
||
|
||
return _this21;
|
||
}
|
||
|
||
return _createClass(_MeasurementsAndQualitatitiveEvaluations);
|
||
}(Template);
|
||
|
||
var _ROIMeasurementsAndQualitativeEvaluations = /*#__PURE__*/function (_MeasurementsAndQuali) {
|
||
_inherits(_ROIMeasurementsAndQualitativeEvaluations, _MeasurementsAndQuali);
|
||
|
||
var _super16 = _createSuper(_ROIMeasurementsAndQualitativeEvaluations);
|
||
|
||
function _ROIMeasurementsAndQualitativeEvaluations(options) {
|
||
var _this22;
|
||
|
||
_classCallCheck(this, _ROIMeasurementsAndQualitativeEvaluations);
|
||
|
||
_this22 = _super16.call(this, {
|
||
trackingIdentifier: options.trackingIdentifier,
|
||
timePointContext: options.timePointContext,
|
||
findingType: options.findingType,
|
||
session: options.session,
|
||
measurements: options.measurements,
|
||
qualitativeEvaluations: options.qualitativeEvaluations
|
||
});
|
||
var groupItem = _this22[0];
|
||
var wereReferencesProvided = [options.referencedRegions !== undefined, options.referencedVolume !== undefined, options.referencedSegmentation !== undefined];
|
||
var numReferences = wereReferencesProvided.reduce(function (a, b) {
|
||
return a + b;
|
||
});
|
||
|
||
if (numReferences === 0) {
|
||
throw new Error("One of the following options must be provided: " + "'referencedRegions', 'referencedVolume', or " + "'referencedSegmentation'.");
|
||
} else if (numReferences > 1) {
|
||
throw new Error("Only one of the following options should be provided: " + "'referencedRegions', 'referencedVolume', or " + "'referencedSegmentation'.");
|
||
}
|
||
|
||
if (options.referencedRegions !== undefined) {
|
||
if (!(_typeof(options.referencedRegions) === "object" || options.referencedRegions instanceof Array)) {
|
||
throw new Error("Option 'referencedRegions' must have type Array.");
|
||
}
|
||
|
||
if (options.referencedRegions.length === 0) {
|
||
throw new Error("Option 'referencedRegion' must have non-zero length.");
|
||
}
|
||
|
||
options.referencedRegions.forEach(function (region) {
|
||
if (region === undefined || region.constructor !== ImageRegion && region.constructor !== ImageRegion3D) {
|
||
throw new Error("Items of option 'referencedRegion' must have type " + "ImageRegion or ImageRegion3D.");
|
||
}
|
||
|
||
groupItem.ContentSequence.push(region);
|
||
});
|
||
} else if (options.referencedVolume !== undefined) {
|
||
if (options.referencedVolume.constructor !== VolumeSurface) {
|
||
throw new Error("Items of option 'referencedVolume' must have type VolumeSurface.");
|
||
}
|
||
|
||
groupItem.ContentSequence.push(referencedVolume);
|
||
} else if (options.referencedSegmentation !== undefined) {
|
||
if (options.referencedSegmentation.constructor !== ReferencedSegmentation && options.referencedSegmentation.constructor !== ReferencedSegmentationFrame) {
|
||
throw new Error("Option 'referencedSegmentation' must have type " + "ReferencedSegmentation or ReferencedSegmentationFrame.");
|
||
}
|
||
|
||
groupItem.ContentSequence.push(referencedSegmentation);
|
||
}
|
||
|
||
_this22[0] = groupItem;
|
||
return _this22;
|
||
}
|
||
|
||
return _createClass(_ROIMeasurementsAndQualitativeEvaluations);
|
||
}(_MeasurementsAndQualitatitiveEvaluations);
|
||
|
||
var PlanarROIMeasurementsAndQualitativeEvaluations = /*#__PURE__*/function (_ROIMeasurementsAndQu) {
|
||
_inherits(PlanarROIMeasurementsAndQualitativeEvaluations, _ROIMeasurementsAndQu);
|
||
|
||
var _super17 = _createSuper(PlanarROIMeasurementsAndQualitativeEvaluations);
|
||
|
||
function PlanarROIMeasurementsAndQualitativeEvaluations(options) {
|
||
_classCallCheck(this, PlanarROIMeasurementsAndQualitativeEvaluations);
|
||
|
||
var wereReferencesProvided = [options.referencedRegion !== undefined, options.referencedSegmentation !== undefined];
|
||
var numReferences = wereReferencesProvided.reduce(function (a, b) {
|
||
return a + b;
|
||
});
|
||
|
||
if (numReferences === 0) {
|
||
throw new Error("One of the following options must be provided: " + "'referencedRegion', 'referencedSegmentation'.");
|
||
} else if (numReferences > 1) {
|
||
throw new Error("Only one of the following options should be provided: " + "'referencedRegion', 'referencedSegmentation'.");
|
||
}
|
||
|
||
return _super17.call(this, {
|
||
trackingIdentifier: options.trackingIdentifier,
|
||
referencedRegions: [options.referencedRegion],
|
||
referencedSegmentation: options.referencedSegmentation,
|
||
referencedRealWorldValueMap: options.referencedRealWorldValueMap,
|
||
timePointContext: options.timePointContext,
|
||
findingType: options.findingType,
|
||
session: options.session,
|
||
measurements: options.measurements,
|
||
qualitativeEvaluations: options.qualitativeEvaluations
|
||
});
|
||
}
|
||
|
||
return _createClass(PlanarROIMeasurementsAndQualitativeEvaluations);
|
||
}(_ROIMeasurementsAndQualitativeEvaluations);
|
||
|
||
var VolumetricROIMeasurementsAndQualitativeEvaluations = /*#__PURE__*/function (_ROIMeasurementsAndQu2) {
|
||
_inherits(VolumetricROIMeasurementsAndQualitativeEvaluations, _ROIMeasurementsAndQu2);
|
||
|
||
var _super18 = _createSuper(VolumetricROIMeasurementsAndQualitativeEvaluations);
|
||
|
||
function VolumetricROIMeasurementsAndQualitativeEvaluations(options) {
|
||
_classCallCheck(this, VolumetricROIMeasurementsAndQualitativeEvaluations);
|
||
|
||
return _super18.call(this, {
|
||
trackingIdentifier: options.trackingIdentifier,
|
||
referencedRegions: options.referencedRegions,
|
||
referencedSegmentation: options.referencedSegmentation,
|
||
referencedRealWorldValueMap: options.referencedRealWorldValueMap,
|
||
timePointContext: options.timePointContext,
|
||
findingType: options.findingType,
|
||
session: options.session,
|
||
measurements: options.measurements,
|
||
qualitativeEvaluations: options.qualitativeEvaluations
|
||
});
|
||
}
|
||
|
||
return _createClass(VolumetricROIMeasurementsAndQualitativeEvaluations);
|
||
}(_ROIMeasurementsAndQualitativeEvaluations);
|
||
|
||
var MeasurementsDerivedFromMultipleROIMeasurements = /*#__PURE__*/function (_Template15) {
|
||
_inherits(MeasurementsDerivedFromMultipleROIMeasurements, _Template15);
|
||
|
||
_createSuper(MeasurementsDerivedFromMultipleROIMeasurements);
|
||
|
||
function MeasurementsDerivedFromMultipleROIMeasurements(options) {
|
||
var _this23;
|
||
|
||
_classCallCheck(this, MeasurementsDerivedFromMultipleROIMeasurements);
|
||
|
||
if (options.derivation === undefined) {
|
||
throw new Error("Option 'derivation' is required for " + "MeasurementsDerivedFromMultipleROIMeasurements.");
|
||
} // FIXME
|
||
|
||
|
||
var valueItem = new NumContentItem({
|
||
name: options.derivation
|
||
});
|
||
valueItem.ContentSequence = new ContentSequence$1();
|
||
|
||
if (options.measurementGroups === undefined) {
|
||
throw new Error("Option 'measurementGroups' is required for " + "MeasurementsDerivedFromMultipleROIMeasurements.");
|
||
}
|
||
|
||
if (!(_typeof(options.measurementGroups) === "object" || options.measurementGroups instanceof Array)) {
|
||
throw new Error("Option 'measurementGroups' must have type Array.");
|
||
}
|
||
|
||
options.measurementGroups.forEach(function (group) {
|
||
var _valueItem$ContentSeq4;
|
||
|
||
if (!group || group.constructor !== PlanarROIMeasurementsAndQualitativeEvaluations && group.constructor !== VolumetricROIMeasurementsAndQualitativeEvaluations) {
|
||
throw new Error("Items of option 'measurementGroups' must have type " + "PlanarROIMeasurementsAndQualitativeEvaluations or " + "VolumetricROIMeasurementsAndQualitativeEvaluations.");
|
||
}
|
||
|
||
group[0].RelationshipType = "R-INFERRED FROM";
|
||
|
||
(_valueItem$ContentSeq4 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq4, _toConsumableArray(group));
|
||
});
|
||
|
||
if (options.measurementProperties !== undefined) {
|
||
var _valueItem$ContentSeq5;
|
||
|
||
if (options.measurementProperties.constructor !== MeasurementProperties) {
|
||
throw new Error("Option 'measurementProperties' must have type MeasurementProperties.");
|
||
}
|
||
|
||
(_valueItem$ContentSeq5 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq5, _toConsumableArray(options.measurementProperties));
|
||
}
|
||
|
||
_this23.push(valueItem);
|
||
|
||
return _possibleConstructorReturn(_this23);
|
||
}
|
||
|
||
return _createClass(MeasurementsDerivedFromMultipleROIMeasurements);
|
||
}(Template);
|
||
|
||
var MeasurementAndQualitativeEvaluationGroup = /*#__PURE__*/function (_MeasurementsAndQuali2) {
|
||
_inherits(MeasurementAndQualitativeEvaluationGroup, _MeasurementsAndQuali2);
|
||
|
||
var _super20 = _createSuper(MeasurementAndQualitativeEvaluationGroup);
|
||
|
||
function MeasurementAndQualitativeEvaluationGroup(options) {
|
||
_classCallCheck(this, MeasurementAndQualitativeEvaluationGroup);
|
||
|
||
return _super20.call(this, {
|
||
trackingIdentifier: options.trackingIdentifier,
|
||
referencedRealWorldValueMap: options.referencedRealWorldValueMap,
|
||
timePointContext: options.timePointContext,
|
||
findingType: options.findingType,
|
||
session: options.session,
|
||
measurements: options.measurements,
|
||
qualitativeEvaluations: options.qualitativeEvaluations
|
||
});
|
||
}
|
||
|
||
return _createClass(MeasurementAndQualitativeEvaluationGroup);
|
||
}(_MeasurementsAndQualitatitiveEvaluations);
|
||
|
||
var ROIMeasurements = /*#__PURE__*/function (_Template16) {
|
||
_inherits(ROIMeasurements, _Template16);
|
||
|
||
var _super21 = _createSuper(ROIMeasurements);
|
||
|
||
function ROIMeasurements(options) {
|
||
var _this24;
|
||
|
||
_classCallCheck(this, ROIMeasurements);
|
||
|
||
_this24 = _super21.call(this);
|
||
|
||
if (options.method !== undefined) {
|
||
var methodItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "370129005",
|
||
meaning: "Measurement Method",
|
||
schemeDesignator: "SCT"
|
||
}),
|
||
value: options.method,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
|
||
_this24.push(methodItem);
|
||
}
|
||
|
||
if (options.findingSites !== undefined) {
|
||
if (!(_typeof(options.findingSites) === "object" || options.findingSites instanceof Array)) {
|
||
throw new Error("Option 'findingSites' must have type Array.");
|
||
}
|
||
|
||
options.findingSites.forEach(function (site) {
|
||
if (!site || site.constructor !== FindingSite) {
|
||
throw new Error("Items of option 'findingSites' must have type FindingSite.");
|
||
}
|
||
|
||
_this24.push(site);
|
||
});
|
||
}
|
||
|
||
if (options.measurements === undefined) {
|
||
throw new Error("Options 'measurements' is required ROIMeasurements.");
|
||
}
|
||
|
||
if (!(_typeof(options.measurements) === "object" || options.measurements instanceof Array)) {
|
||
throw new Error("Option 'measurements' must have type Array.");
|
||
}
|
||
|
||
if (options.measurements.length === 0) {
|
||
throw new Error("Option 'measurements' must have non-zero length.");
|
||
}
|
||
|
||
options.measurements.forEach(function (measurement) {
|
||
if (!measurement || measurement.constructor !== Measurement) {
|
||
throw new Error("Items of option 'measurements' must have type Measurement.");
|
||
}
|
||
|
||
_this24.push(measurement);
|
||
});
|
||
return _this24;
|
||
}
|
||
|
||
return _createClass(ROIMeasurements);
|
||
}(Template);
|
||
|
||
var MeasurementReport = /*#__PURE__*/function (_Template17) {
|
||
_inherits(MeasurementReport, _Template17);
|
||
|
||
var _super22 = _createSuper(MeasurementReport);
|
||
|
||
function MeasurementReport(options) {
|
||
var _item$ContentSequence, _item$ContentSequence2, _item$ContentSequence3;
|
||
|
||
var _this25;
|
||
|
||
_classCallCheck(this, MeasurementReport);
|
||
|
||
_this25 = _super22.call(this);
|
||
|
||
if (options.observationContext === undefined) {
|
||
throw new Error("Option 'observationContext' is required for MeasurementReport.");
|
||
}
|
||
|
||
if (options.procedureReported === undefined) {
|
||
throw new Error("Option 'procedureReported' is required for MeasurementReport.");
|
||
}
|
||
|
||
var item = new ContainerContentItem({
|
||
name: new CodedConcept({
|
||
value: "126000",
|
||
schemeDesignator: "DCM",
|
||
meaning: "Imaging Measurement Report"
|
||
}),
|
||
templateID: "1500"
|
||
});
|
||
item.ContentSequence = new ContentSequence$1();
|
||
|
||
if (options.languageOfContentItemAndDescendants === undefined) {
|
||
throw new Error("Option 'languageOfContentItemAndDescendants' is required for " + "MeasurementReport.");
|
||
}
|
||
|
||
if (options.languageOfContentItemAndDescendants.constructor !== LanguageOfContentItemAndDescendants) {
|
||
throw new Error("Option 'languageOfContentItemAndDescendants' must have type " + "LanguageOfContentItemAndDescendants.");
|
||
}
|
||
|
||
(_item$ContentSequence = item.ContentSequence).push.apply(_item$ContentSequence, _toConsumableArray(options.languageOfContentItemAndDescendants));
|
||
|
||
(_item$ContentSequence2 = item.ContentSequence).push.apply(_item$ContentSequence2, _toConsumableArray(options.observationContext));
|
||
|
||
if (options.procedureReported.constructor === CodedConcept || options.procedureReported.constructor === Code) {
|
||
options.procedureReported = [options.procedureReported];
|
||
}
|
||
|
||
if (!(_typeof(options.procedureReported) === "object" || options.procedureReported instanceof Array)) {
|
||
throw new Error("Option 'procedureReported' must have type Array.");
|
||
}
|
||
|
||
options.procedureReported.forEach(function (procedure) {
|
||
var procedureItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "121058",
|
||
meaning: "Procedure reported",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: procedure,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
item.ContentSequence.push(procedureItem);
|
||
});
|
||
var imageLibraryItem = new ImageLibrary();
|
||
|
||
(_item$ContentSequence3 = item.ContentSequence).push.apply(_item$ContentSequence3, _toConsumableArray(imageLibraryItem));
|
||
|
||
var wereOptionsProvided = [options.imagingMeasurements !== undefined, options.derivedImagingMeasurements !== undefined, options.qualitativeEvaluations !== undefined];
|
||
var numOptionsProvided = wereOptionsProvided.reduce(function (a, b) {
|
||
return a + b;
|
||
});
|
||
|
||
if (numOptionsProvided > 1) {
|
||
throw new Error("Only one of the following options should be provided: " + "'imagingMeasurements', 'derivedImagingMeasurement', " + "'qualitativeEvaluations'.");
|
||
}
|
||
|
||
if (options.imagingMeasurements !== undefined) {
|
||
var containerItem = new ContainerContentItem({
|
||
name: new CodedConcept({
|
||
value: "126010",
|
||
meaning: "Imaging Measurements",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
containerItem.ContentSequence = _construct(ContentSequence$1, _toConsumableArray(options.imagingMeasurements));
|
||
item.ContentSequence.push(containerItem);
|
||
} else if (options.derivedImagingMeasurements !== undefined) {
|
||
var _containerItem = new ContainerContentItem({
|
||
name: new CodedConcept({
|
||
value: "126011",
|
||
meaning: "Derived Imaging Measurements",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
|
||
_containerItem.ContentSequence = _construct(ContentSequence$1, _toConsumableArray(options.derivedImagingMeasurements));
|
||
item.ContentSequence.push(_containerItem);
|
||
} else if (options.qualitativeEvaluations !== undefined) {
|
||
var _containerItem2 = new ContainerContentItem({
|
||
name: new CodedConcept({
|
||
value: "C0034375",
|
||
meaning: "Qualitative Evaluations",
|
||
schemeDesignator: "UMLS"
|
||
}),
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
|
||
_containerItem2.ContentSequence = _construct(ContentSequence$1, _toConsumableArray(options.qualitativeEvaluations));
|
||
item.ContentSequence.push(_containerItem2);
|
||
}
|
||
|
||
_this25.push(item);
|
||
|
||
return _this25;
|
||
}
|
||
|
||
return _createClass(MeasurementReport);
|
||
}(Template);
|
||
|
||
var TimePointContext = /*#__PURE__*/function (_Template18) {
|
||
_inherits(TimePointContext, _Template18);
|
||
|
||
_createSuper(TimePointContext);
|
||
|
||
function TimePointContext(options) {
|
||
var _this26;
|
||
|
||
_classCallCheck(this, TimePointContext);
|
||
|
||
if (options.timePoint === undefined) {
|
||
throw new Error("Option 'timePoint' is required for TimePointContext.");
|
||
}
|
||
|
||
var timePointItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "C2348792",
|
||
meaning: "Time Point",
|
||
schemeDesignator: "UMLS"
|
||
}),
|
||
value: options.timePoint,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this26.push(timePointItem);
|
||
|
||
if (options.timePointType !== undefined) {
|
||
var timePointTypeItem = new CodeContentItem({
|
||
name: new CodedConcept({
|
||
value: "126072",
|
||
meaning: "Time Point Type",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.timePointType,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this26.push(timePointTypeItem);
|
||
}
|
||
|
||
if (options.timePointOrder !== undefined) {
|
||
var timePointOrderItem = new NumContentItem({
|
||
name: new CodedConcept({
|
||
value: "126073",
|
||
meaning: "Time Point Order",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.timePointOrder,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this26.push(timePointOrderItem);
|
||
}
|
||
|
||
if (options.subjectTimePointIdentifier !== undefined) {
|
||
var subjectTimePointIdentifierItem = new NumContentItem({
|
||
name: new CodedConcept({
|
||
value: "126070",
|
||
meaning: "Subject Time Point Identifier",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.subjectTimePointIdentifier,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this26.push(subjectTimePointIdentifierItem);
|
||
}
|
||
|
||
if (options.protocolTimePointIdentifier !== undefined) {
|
||
var protocolTimePointIdentifierItem = new NumContentItem({
|
||
name: new CodedConcept({
|
||
value: "126071",
|
||
meaning: "Protocol Time Point Identifier",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.protocolTimePointIdentifier,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this26.push(protocolTimePointIdentifierItem);
|
||
}
|
||
|
||
if (options.temporalOffsetFromEvent !== undefined) {
|
||
if (options.temporalOffsetFromEvent.constructor !== LongitudinalTemporalOffsetFromEventContentItem) {
|
||
throw new Error("Option 'temporalOffsetFromEvent' must have type " + "LongitudinalTemporalOffsetFromEventContentItem.");
|
||
}
|
||
|
||
_this26.push(temporalOffsetFromEvent);
|
||
}
|
||
|
||
return _possibleConstructorReturn(_this26);
|
||
}
|
||
|
||
return _createClass(TimePointContext);
|
||
}(Template);
|
||
|
||
var ImageLibrary = /*#__PURE__*/function (_Template19) {
|
||
_inherits(ImageLibrary, _Template19);
|
||
|
||
var _super24 = _createSuper(ImageLibrary);
|
||
|
||
function ImageLibrary(options) {
|
||
var _this27;
|
||
|
||
_classCallCheck(this, ImageLibrary);
|
||
|
||
_this27 = _super24.call(this);
|
||
var libraryItem = new ContainerContentItem({
|
||
name: new CodedConcept({
|
||
value: "111028",
|
||
meaning: "Image Library",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
relationshipType: RelationshipTypes.CONTAINS
|
||
});
|
||
|
||
_this27.push(libraryItem);
|
||
|
||
return _this27;
|
||
}
|
||
|
||
return _createClass(ImageLibrary);
|
||
}(Template);
|
||
|
||
var AlgorithmIdentification = /*#__PURE__*/function (_Template20) {
|
||
_inherits(AlgorithmIdentification, _Template20);
|
||
|
||
var _super25 = _createSuper(AlgorithmIdentification);
|
||
|
||
function AlgorithmIdentification(options) {
|
||
var _this28;
|
||
|
||
_classCallCheck(this, AlgorithmIdentification);
|
||
|
||
_this28 = _super25.call(this);
|
||
|
||
if (options.name === undefined) {
|
||
throw new Error("Option 'name' is required for AlgorithmIdentification.");
|
||
}
|
||
|
||
if (options.version === undefined) {
|
||
throw new Error("Option 'version' is required for AlgorithmIdentification.");
|
||
}
|
||
|
||
var nameItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "111001",
|
||
meaning: "Algorithm Name",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.name,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
|
||
_this28.push(nameItem);
|
||
|
||
var versionItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "111003",
|
||
meaning: "Algorithm Version",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.version,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
|
||
_this28.push(versionItem);
|
||
|
||
if (options.parameters !== undefined) {
|
||
if (!(_typeof(options.parameters) === "object" || options.parameters instanceof Array)) {
|
||
throw new Error("Option 'parameters' must have type Array.");
|
||
}
|
||
|
||
options.parameters.forEach(function (parameter) {
|
||
var parameterItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "111002",
|
||
meaning: "Algorithm Parameter",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: param,
|
||
relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
|
||
});
|
||
|
||
_this28.push(parameterItem);
|
||
});
|
||
}
|
||
|
||
return _this28;
|
||
}
|
||
|
||
return _createClass(AlgorithmIdentification);
|
||
}(Template);
|
||
|
||
var TrackingIdentifier = /*#__PURE__*/function (_Template21) {
|
||
_inherits(TrackingIdentifier, _Template21);
|
||
|
||
var _super26 = _createSuper(TrackingIdentifier);
|
||
|
||
function TrackingIdentifier(options) {
|
||
var _this29;
|
||
|
||
_classCallCheck(this, TrackingIdentifier);
|
||
|
||
_this29 = _super26.call(this);
|
||
|
||
if (options.uid === undefined) {
|
||
throw new Error("Option 'uid' is required for TrackingIdentifier.");
|
||
}
|
||
|
||
if (options.identifier !== undefined) {
|
||
var trackingIdentifierItem = new TextContentItem({
|
||
name: new CodedConcept({
|
||
value: "112039",
|
||
meaning: "Tracking Identifier",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.identifier,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this29.push(trackingIdentifierItem);
|
||
}
|
||
|
||
var trackingUIDItem = new UIDRefContentItem({
|
||
name: new CodedConcept({
|
||
value: "112040",
|
||
meaning: "Tracking Unique Identifier",
|
||
schemeDesignator: "DCM"
|
||
}),
|
||
value: options.uid,
|
||
relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
|
||
});
|
||
|
||
_this29.push(trackingUIDItem);
|
||
|
||
return _this29;
|
||
}
|
||
|
||
return _createClass(TrackingIdentifier);
|
||
}(Template);
|
||
|
||
var templates = /*#__PURE__*/Object.freeze({
|
||
__proto__: null,
|
||
AlgorithmIdentification: AlgorithmIdentification,
|
||
DeviceObserverIdentifyingAttributes: DeviceObserverIdentifyingAttributes,
|
||
ImageLibrary: ImageLibrary,
|
||
LanguageOfContentItemAndDescendants: LanguageOfContentItemAndDescendants,
|
||
Measurement: Measurement,
|
||
MeasurementAndQualitativeEvaluationGroup: MeasurementAndQualitativeEvaluationGroup,
|
||
MeasurementReport: MeasurementReport,
|
||
MeasurementsDerivedFromMultipleROIMeasurements: MeasurementsDerivedFromMultipleROIMeasurements,
|
||
ObservationContext: ObservationContext,
|
||
ObserverContext: ObserverContext,
|
||
PersonObserverIdentifyingAttributes: PersonObserverIdentifyingAttributes,
|
||
PlanarROIMeasurementsAndQualitativeEvaluations: PlanarROIMeasurementsAndQualitativeEvaluations,
|
||
ROIMeasurements: ROIMeasurements,
|
||
SubjectContext: SubjectContext,
|
||
SubjectContextDevice: SubjectContextDevice,
|
||
SubjectContextFetus: SubjectContextFetus,
|
||
SubjectContextSpecimen: SubjectContextSpecimen,
|
||
TimePointContext: TimePointContext,
|
||
TrackingIdentifier: TrackingIdentifier,
|
||
VolumetricROIMeasurementsAndQualitativeEvaluations: VolumetricROIMeasurementsAndQualitativeEvaluations
|
||
});
|
||
|
||
var _attributesToInclude = [// Patient
|
||
"00080054", "00080100", "00080102", "00080103", "00080104", "00080105", "00080106", "00080107", "0008010B", "0008010D", "0008010F", "00080117", "00080118", "00080119", "00080120", "00080121", "00080122", "00081120", "00081150", "00081155", "00081160", "00081190", "00081199", "00100010", "00100020", "00100021", "00100022", "00100024", "00100026", "00100027", "00100028", "00100030", "00100032", "00100033", "00100034", "00100035", "00100040", "00100200", "00100212", "00100213", "00100214", "00100215", "00100216", "00100217", "00100218", "00100219", "00100221", "00100222", "00100223", "00100229", "00101001", "00101002", "00101100", "00102160", "00102201", "00102202", "00102292", "00102293", "00102294", "00102295", "00102296", "00102297", "00102298", "00102299", "00104000", "00120062", "00120063", "00120064", "0020000D", "00400031", "00400032", "00400033", "00400035", "00400036", "00400039", "0040003A", "0040E001", "0040E010", "0040E020", "0040E021", "0040E022", "0040E023", "0040E024", "0040E025", "0040E030", "0040E031", "0062000B", "00880130", "00880140", // Patient Study
|
||
"00080100", "00080102", "00080103", "00080104", "00080105", "00080106", "00080107", "0008010B", "0008010D", "0008010F", "00080117", "00080118", "00080119", "00080120", "00080121", "00080122", "00081080", "00081084", "00101010", "00101020", "00101021", "00101022", "00101023", "00101024", "00101030", "00102000", "00102110", "00102180", "001021A0", "001021B0", "001021C0", "001021D0", "00102203", "00380010", "00380014", "00380060", "00380062", "00380064", "00380500", "00400031", "00400032", "00400033", // General Study
|
||
"00080020", "00080030", "00080050", "00080051", "00080080", "00080081", "00080082", "00080090", "00080096", "0008009C", "0008009D", "00080100", "00080102", "00080103", "00080104", "00080105", "00080106", "00080107", "0008010B", "0008010D", "0008010F", "00080117", "00080118", "00080119", "00080120", "00080121", "00080122", "00081030", "00081032", "00081048", "00081049", "00081060", "00081062", "00081110", "00081150", "00081155", "0020000D", "00200010", "00321034", "00400031", "00400032", "00400033", "00401012", "00401101", "00401102", "00401103", "00401104", // Clinical Trial Subject
|
||
"00120010", "00120020", "00120021", "00120030", "00120031", "00120040", "00120042", "00120081", "00120082", // Clinical Trial Study
|
||
"00120020", "00120050", "00120051", "00120052", "00120053", "00120083", "00120084", "00120085"];
|
||
|
||
var Comprehensive3DSR = /*#__PURE__*/_createClass(function Comprehensive3DSR(options) {
|
||
var _this = this;
|
||
|
||
_classCallCheck(this, Comprehensive3DSR);
|
||
|
||
if (options.evidence === undefined) {
|
||
throw new Error("Option 'evidence' is required for Comprehensive3DSR.");
|
||
}
|
||
|
||
if (!(_typeof(options.evidence) === "object" || options.evidence instanceof Array)) {
|
||
throw new Error("Option 'evidence' must have type Array.");
|
||
}
|
||
|
||
if (options.evidence.length === 0) {
|
||
throw new Error("Option 'evidence' must have non-zero length.");
|
||
}
|
||
|
||
if (options.content === undefined) {
|
||
throw new Error("Option 'content' is required for Comprehensive3DSR.");
|
||
}
|
||
|
||
if (options.seriesInstanceUID === undefined) {
|
||
throw new Error("Option 'seriesInstanceUID' is required for Comprehensive3DSR.");
|
||
}
|
||
|
||
if (options.seriesNumber === undefined) {
|
||
throw new Error("Option 'seriesNumber' is required for Comprehensive3DSR.");
|
||
}
|
||
|
||
if (options.seriesDescription === undefined) {
|
||
throw new Error("Option 'seriesDescription' is required for Comprehensive3DSR.");
|
||
}
|
||
|
||
if (options.sopInstanceUID === undefined) {
|
||
throw new Error("Option 'sopInstanceUID' is required for Comprehensive3DSR.");
|
||
}
|
||
|
||
if (options.instanceNumber === undefined) {
|
||
throw new Error("Option 'instanceNumber' is required for Comprehensive3DSR.");
|
||
}
|
||
|
||
if (options.manufacturer === undefined) {
|
||
throw new Error("Option 'manufacturer' is required for Comprehensive3DSR.");
|
||
}
|
||
|
||
this.SOPClassUID = "1.2.840.10008.5.1.4.1.1.88.34";
|
||
this.SOPInstanceUID = options.sopInstanceUID;
|
||
this.Modality = "SR";
|
||
this.SeriesDescription = options.seriesDescription;
|
||
this.SeriesInstanceUID = options.seriesInstanceUID;
|
||
this.SeriesNumber = options.seriesNumber;
|
||
this.InstanceNumber = options.instanceNumber;
|
||
this.Manufacturer = options.manufacturer;
|
||
|
||
if (options.institutionName !== undefined) {
|
||
this.InstitutionName = options.institutionName;
|
||
|
||
if (options.institutionalDepartmentName !== undefined) {
|
||
this.InstitutionalDepartmentName = options.institutionDepartmentName;
|
||
}
|
||
}
|
||
|
||
if (options.isComplete) {
|
||
this.CompletionFlag = "COMPLETE";
|
||
} else {
|
||
this.CompletionFlag = "PARTIAL";
|
||
}
|
||
|
||
if (options.isVerified) {
|
||
if (options.verifyingObserverName === undefined) {
|
||
throw new Error("Verifying Observer Name must be specified if SR document " + "has been verified.");
|
||
}
|
||
|
||
if (options.verifyingOrganization === undefined) {
|
||
throw new Error("Verifying Organization must be specified if SR document " + "has been verified.");
|
||
}
|
||
|
||
this.VerificationFlag = "VERIFIED";
|
||
var ovserver_item = {};
|
||
ovserver_item.VerifyingObserverName = options.verifyingObserverName;
|
||
ovserver_item.VerifyingOrganization = options.verifyingOrganization;
|
||
ovserver_item.VerificationDateTime = DicomMetaDictionary.dateTime();
|
||
this.VerifyingObserverSequence = [observer_item];
|
||
} else {
|
||
this.VerificationFlag = "UNVERIFIED";
|
||
}
|
||
|
||
if (options.isFinal) {
|
||
this.PreliminaryFlag = "FINAL";
|
||
} else {
|
||
this.PreliminaryFlag = "PRELIMINARY";
|
||
}
|
||
|
||
this.ContentDate = DicomMetaDictionary.date();
|
||
this.ContentTime = DicomMetaDictionary.time();
|
||
Object.keys(options.content).forEach(function (keyword) {
|
||
_this[keyword] = options.content[keyword];
|
||
});
|
||
var evidenceCollection = {};
|
||
options.evidence.forEach(function (evidence) {
|
||
if (evidence.StudyInstanceUID !== options.evidence[0].StudyInstanceUID) {
|
||
throw new Error("Referenced data sets must all belong to the same study.");
|
||
}
|
||
|
||
if (!(evidence.SeriesInstanceUID in evidenceCollection)) {
|
||
evidenceCollection[evidence.SeriesInstanceUID] = [];
|
||
}
|
||
|
||
var instanceItem = {};
|
||
instanceItem.ReferencedSOPClassUID = evidence.SOPClassUID;
|
||
instanceItem.ReferencedSOPInstanceUID = evidence.SOPInstanceUID;
|
||
evidenceCollection[evidence.SeriesInstanceUID].push(instanceItem);
|
||
});
|
||
var evidenceStudyItem = {};
|
||
evidenceStudyItem.StudyInstanceUID = options.evidence[0].StudyInstanceUID;
|
||
evidenceStudyItem.ReferencedSeriesSequence = [];
|
||
Object.keys(evidenceCollection).forEach(function (seriesInstanceUID) {
|
||
var seriesItem = {};
|
||
seriesItem.SeriesInstanceUID = seriesInstanceUID;
|
||
seriesItem.ReferencedSOPSequence = evidenceCollection[seriesInstanceUID];
|
||
evidenceStudyItem.ReferencedSeriesSequence.push(seriesItem);
|
||
});
|
||
|
||
if (options.requestedProcedures !== undefined) {
|
||
if (!(_typeof(options.requestedProcedures) === "object" || options.requestedProcedures instanceof Array)) {
|
||
throw new Error("Option 'requestedProcedures' must have type Array.");
|
||
}
|
||
|
||
this.ReferencedRequestSequence = _construct(ContentSequence, _toConsumableArray(options.requestedProcedures));
|
||
this.CurrentRequestedProcedureEvidenceSequence = [evidenceStudyItem];
|
||
} else {
|
||
this.PertinentOtherEvidenceSequence = [evidenceStudyItem];
|
||
}
|
||
|
||
if (options.previousVersions !== undefined) {
|
||
var preCollection = {};
|
||
options.previousVersions.forEach(function (version) {
|
||
if (version.StudyInstanceUID != options.evidence[0].StudyInstanceUID) {
|
||
throw new Error("Previous version data sets must belong to the same study.");
|
||
}
|
||
|
||
var instanceItem = {};
|
||
instanceItem.ReferencedSOPClassUID = version.SOPClassUID;
|
||
instanceItem.ReferencedSOPInstanceUID = version.SOPInstanceUID;
|
||
preCollection[version.SeriesInstanceUID].push(instanceItem);
|
||
});
|
||
var preStudyItem = {};
|
||
preStudyItem.StudyInstanceUID = options.previousVersions[0].StudyInstanceUID;
|
||
preStudyItem.ReferencedSeriesSequence = [];
|
||
Object.keys(preCollection).forEach(function (seriesInstanceUID) {
|
||
var seriesItem = {};
|
||
seriesItem.SeriesInstanceUID = seriesInstanceUID;
|
||
seriesItem.ReferencedSOPSequence = preCollection[seriesInstanceUID];
|
||
preStudyItem.ReferencedSeriesSequence.push(seriesItem);
|
||
});
|
||
this.PredecessorDocumentsSequence = [preStudyItem];
|
||
}
|
||
|
||
if (options.performedProcedureCodes !== undefined) {
|
||
if (!(_typeof(options.performedProcedureCodes) === "object" || options.performedProcedureCodes instanceof Array)) {
|
||
throw new Error("Option 'performedProcedureCodes' must have type Array.");
|
||
}
|
||
|
||
this.PerformedProcedureCodeSequence = _construct(ContentSequence, _toConsumableArray(options.performedProcedureCodes));
|
||
} else {
|
||
this.PerformedProcedureCodeSequence = [];
|
||
}
|
||
|
||
this.ReferencedPerformedProcedureStepSequence = [];
|
||
|
||
_attributesToInclude.forEach(function (tag) {
|
||
var key = DicomMetaDictionary.punctuateTag(tag);
|
||
var element = DicomMetaDictionary.dictionary[key];
|
||
|
||
if (element !== undefined) {
|
||
var keyword = element.name;
|
||
var value = options.evidence[0][keyword];
|
||
|
||
if (value !== undefined) {
|
||
_this[keyword] = value;
|
||
}
|
||
}
|
||
});
|
||
});
|
||
|
||
var documents = /*#__PURE__*/Object.freeze({
|
||
__proto__: null,
|
||
Comprehensive3DSR: Comprehensive3DSR
|
||
});
|
||
|
||
var sr = {
|
||
coding: coding,
|
||
contentItems: contentItems,
|
||
documents: documents,
|
||
templates: templates,
|
||
valueTypes: valueTypes
|
||
};
|
||
|
||
var tagNamesToEmpty = [// please override these in specificReplaceDefaults to have useful values
|
||
"PatientID", "PatientName", // 0/3: those that appear missing in CTP
|
||
"SeriesDate", "AccessionNumber", // (valuable, but sometimes manually filled)
|
||
"SeriesDescription", // cat 1/3: CTP: set to empty explicitely using @empty
|
||
"StudyTime", "ContentTime", "ReferringPhysicianName", "PatientBirthDate", "PatientSex", "ClinicalTrialSiteID", "ClinicalTrialSiteName", "ClinicalTrialSubjectID", "ClinicalTrialSubjectReadingID", "ClinicalTrialTimePointID", "ClinicalTrialTimePointDescription", "ContrastBolusAgent", "StudyID", // cat 2/3: CTP: set to increment dates
|
||
"InstanceCreationDate", "StudyDate", "ContentDate", "DateOfSecondaryCapture", "DateOfLastCalibration", "DateOfLastDetectorCalibration", "FrameAcquisitionDatetime", "FrameReferenceDatetime", "StudyVerifiedDate", "StudyReadDate", "ScheduledStudyStartDate", "ScheduledStudyStopDate", "StudyArrivalDate", "StudyCompletionDate", "ScheduledAdmissionDate", "ScheduledDischargeDate", "DischargeDate", "SPSStartDate", "SPSEndDate", "PPSStartDate", "PPSEndDate", "IssueDateOfImagingServiceRequest", "VerificationDateTime", "ObservationDateTime", "DateTime", "Date", "RefDatetime", // cat 3/3: CTP: set to remove using @remove
|
||
"AcquisitionDate", "OverlayDate", "CurveDate", "AcquisitionDatetime", "SeriesTime", "AcquisitionTime", "OverlayTime", "CurveTime", "InstitutionName", "InstitutionAddress", "ReferringPhysicianAddress", "ReferringPhysicianPhoneNumbers", "ReferringPhysiciansIDSeq", "TimezoneOffsetFromUTC", "StationName", "StudyDescription", "InstitutionalDepartmentName", "PhysicianOfRecord", "PhysicianOfRecordIdSeq", "PerformingPhysicianName", "PerformingPhysicianIdSeq", "NameOfPhysicianReadingStudy", "PhysicianReadingStudyIdSeq", "OperatorName", "OperatorsIdentificationSeq", "AdmittingDiagnosisDescription", "AdmittingDiagnosisCodeSeq", "RefStudySeq", "RefPPSSeq", "RefPatientSeq", "RefImageSeq", "DerivationDescription", "SourceImageSeq", "IdentifyingComments", "IssuerOfPatientID", "PatientBirthTime", "PatientInsurancePlanCodeSeq", "PatientPrimaryLanguageCodeSeq", "PatientPrimaryLanguageModifierCodeSeq", "OtherPatientIDs", "OtherPatientNames", "OtherPatientIDsSeq", "PatientBirthName", "PatientAge", "PatientSize", "PatientWeight", "PatientAddress", "InsurancePlanIdentification", "PatientMotherBirthName", "MilitaryRank", "BranchOfService", "MedicalRecordLocator", "MedicalAlerts", "ContrastAllergies", "CountryOfResidence", "RegionOfResidence", "PatientPhoneNumbers", "EthnicGroup", "Occupation", "SmokingStatus", "AdditionalPatientHistory", "PregnancyStatus", "LastMenstrualDate", "PatientReligiousPreference", "PatientSexNeutered", "ResponsiblePerson", "ResponsibleOrganization", "PatientComments", "DeviceSerialNumber", "PlateID", "GeneratorID", "CassetteID", "GantryID", // we keep - should be SoftwareVersions anyway
|
||
// "SoftwareVersion",
|
||
"ProtocolName", "AcquisitionDeviceProcessingDescription", "AcquisitionComments", "DetectorID", "AcquisitionProtocolDescription", "ContributionDescription", "ModifyingDeviceID", "ModifyingDeviceManufacturer", "ModifiedImageDescription", "ImageComments", "ImagePresentationComments", "StudyIDIssuer", "ScheduledStudyLocation", "ScheduledStudyLocationAET", "ReasonforStudy", "RequestingPhysician", "RequestingService", "RequestedProcedureDescription", "RequestedContrastAgent", "StudyComments", "AdmissionID", "IssuerOfAdmissionID", "ScheduledPatientInstitutionResidence", "AdmittingDate", "AdmittingTime", "DischargeDiagnosisDescription", "SpecialNeeds", "ServiceEpisodeID", "IssuerOfServiceEpisodeId", "ServiceEpisodeDescription", "CurrentPatientLocation", "PatientInstitutionResidence", "PatientState", "ReferencedPatientAliasSeq", "VisitComments", "ScheduledStationAET", "ScheduledPerformingPhysicianName", "SPSDescription", "ScheduledStationName", "SPSLocation", "PreMedication", "PerformedStationAET", "PerformedStationName", "PerformedLocation", "PerformedStationNameCodeSeq", "PPSID", "PPSDescription", "RequestAttributesSeq", "PPSComments", "AcquisitionContextSeq", "PatientTransportArrangements", "RequestedProcedureLocation", "NamesOfIntendedRecipientsOfResults", "IntendedRecipientsOfResultsIDSequence", "PersonAddress", "PersonTelephoneNumbers", "RequestedProcedureComments", "ReasonForTheImagingServiceRequest", "OrderEnteredBy", "OrderEntererLocation", "OrderCallbackPhoneNumber", "ImagingServiceRequestComments", "ConfidentialityPatientData", "ScheduledStationNameCodeSeq", "ScheduledStationGeographicLocCodeSeq", "PerformedStationGeoLocCodeSeq", "ScheduledHumanPerformersSeq", "ActualHumanPerformersSequence", "HumanPerformersOrganization", "HumanPerformersName", "VerifyingOrganization", "VerifyingObserverName", "AuthorObserverSequence", "ParticipantSequence", "CustodialOrganizationSeq", "VerifyingObserverIdentificationCodeSeq", "PersonName", "ContentSeq", "OverlayData", "OverlayComments", "IconImageSequence", "TopicSubject", "TopicAuthor", "TopicKeyWords", "TextString", "Arbitrary", "TextComments", "ResultsIDIssuer", "InterpretationRecorder", "InterpretationTranscriber", "InterpretationText", "InterpretationAuthor", "InterpretationApproverSequence", "PhysicianApprovingInterpretation", "InterpretationDiagnosisDescription", "ResultsDistributionListSeq", "DistributionName", "DistributionAddress", "InterpretationIdIssuer", "Impressions", "ResultComments", "DigitalSignaturesSeq", "DataSetTrailingPadding"];
|
||
function getTagsNameToEmpty() {
|
||
return [].concat(tagNamesToEmpty);
|
||
}
|
||
function cleanTags(dict) {
|
||
var tagNamesToReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
||
var customTagNamesToEmpty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
|
||
|
||
if (tagNamesToReplace == undefined) {
|
||
tagNamesToReplace = {
|
||
"00100010": "ANON^PATIENT",
|
||
"00100020": "ANON^ID"
|
||
};
|
||
}
|
||
|
||
var tags = customTagNamesToEmpty != undefined ? customTagNamesToEmpty : tagNamesToEmpty;
|
||
tags.forEach(function (tag) {
|
||
var tagInfo = DicomMetaDictionary.nameMap[tag];
|
||
|
||
if (tagInfo && tagInfo.version != "PrivateTag") {
|
||
var tagNumber = tagInfo.tag,
|
||
tagString = Tag.fromPString(tagNumber).toCleanString();
|
||
|
||
if (dict[tagString]) {
|
||
var newValue;
|
||
|
||
if (tagString in tagNamesToReplace) {
|
||
newValue = [tagNamesToReplace[tagString]];
|
||
} else {
|
||
newValue = [];
|
||
}
|
||
|
||
dict[tagString].Value = newValue;
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
// Data
|
||
var data = {
|
||
BitArray: BitArray,
|
||
ReadBufferStream: ReadBufferStream,
|
||
DeflatedReadBufferStream: DeflatedReadBufferStream,
|
||
WriteBufferStream: WriteBufferStream,
|
||
DicomDict: DicomDict,
|
||
DicomMessage: DicomMessage,
|
||
DicomMetaDictionary: DicomMetaDictionary,
|
||
Tag: Tag,
|
||
ValueRepresentation: ValueRepresentation,
|
||
Colors: Colors,
|
||
datasetToDict: datasetToDict,
|
||
datasetToBuffer: datasetToBuffer,
|
||
datasetToBlob: datasetToBlob
|
||
};
|
||
var derivations = {
|
||
DerivedDataset: DerivedDataset,
|
||
DerivedPixels: DerivedPixels,
|
||
DerivedImage: DerivedImage,
|
||
Segmentation: Segmentation$4,
|
||
StructuredReport: StructuredReport,
|
||
ParametricMap: ParametricMap
|
||
};
|
||
var normalizers = {
|
||
Normalizer: Normalizer,
|
||
ImageNormalizer: ImageNormalizer,
|
||
MRImageNormalizer: MRImageNormalizer,
|
||
EnhancedMRImageNormalizer: EnhancedMRImageNormalizer,
|
||
EnhancedUSVolumeNormalizer: EnhancedUSVolumeNormalizer,
|
||
CTImageNormalizer: CTImageNormalizer,
|
||
PETImageNormalizer: PETImageNormalizer,
|
||
SEGImageNormalizer: SEGImageNormalizer,
|
||
DSRNormalizer: DSRNormalizer
|
||
};
|
||
var anonymizer = {
|
||
cleanTags: cleanTags,
|
||
getTagsNameToEmpty: getTagsNameToEmpty
|
||
};
|
||
var dcmjs = {
|
||
DICOMWEB: DICOMWEB,
|
||
adapters: adapters,
|
||
data: data,
|
||
derivations: derivations,
|
||
normalizers: normalizers,
|
||
sr: sr,
|
||
utilities: utilities,
|
||
log: log,
|
||
anonymizer: anonymizer
|
||
};
|
||
|
||
exports.DICOMWEB = DICOMWEB;
|
||
exports.adapters = adapters;
|
||
exports.anonymizer = anonymizer;
|
||
exports.data = data;
|
||
exports.default = dcmjs;
|
||
exports.derivations = derivations;
|
||
exports.log = log;
|
||
exports.normalizers = normalizers;
|
||
exports.sr = sr;
|
||
exports.utilities = utilities;
|
||
|
||
Object.defineProperty(exports, '__esModule', { value: true });
|
||
|
||
}));
|
||
//# sourceMappingURL=dcmjs.js.map
|