Removing search loops and proprietary tag definitions from DICOMTagDescriptions viewerbase utility.

This commit is contained in:
Emanuel F. Oliveira 2017-02-09 15:22:06 -02:00 committed by Eloízio Salgado
parent e75330fe87
commit 0be2f5887a
5 changed files with 485 additions and 419 deletions

View File

@ -1,6 +1,7 @@
import { Viewerbase } from 'meteor/ohif:viewerbase'; import { Viewerbase } from 'meteor/ohif:viewerbase';
const InstanceMetadata = Viewerbase.metadata.InstanceMetadata; const InstanceMetadata = Viewerbase.metadata.InstanceMetadata;
const DICOMTagDescriptions = Viewerbase.DICOMTagDescriptions;
export class OHIFInstanceMetadata extends InstanceMetadata { export class OHIFInstanceMetadata extends InstanceMetadata {
@ -105,11 +106,11 @@ export class OHIFInstanceMetadata extends InstanceMetadata {
// A possible solution to improve this would be adapt retriveMetadata names to use DICOM standard names as in dicomTagDescriptions.js // A possible solution to improve this would be adapt retriveMetadata names to use DICOM standard names as in dicomTagDescriptions.js
static getPropertyName(tagOrProperty) { static getPropertyName(tagOrProperty) {
let propertyName; let propertyName;
const tagInfo = InstanceMetadata.getTagInfo(tagOrProperty); const tagInfo = DICOMTagDescriptions.find(tagOrProperty);
if (tagInfo.propertyName !== null) { if (tagInfo !== void 0) {
// This function tries to translate standard DICOM property names into local naming convention. // This function tries to translate standard DICOM property names into local naming convention.
propertyName = tagInfo.propertyName.replace(/^SOP/, 'sop').replace(/UID$/, 'Uid').replace(/ID$/, 'Id'); propertyName = tagInfo.keyword.replace(/^SOP/, 'sop').replace(/UID$/, 'Uid').replace(/ID$/, 'Id');
propertyName = propertyName.charAt(0).toLowerCase() + propertyName.substr(1); propertyName = propertyName.charAt(0).toLowerCase() + propertyName.substr(1);
} }

View File

@ -165,8 +165,8 @@ import { sopClassDictionary } from './lib/sopClassDictionary';
Viewerbase.sopClassDictionary = sopClassDictionary; Viewerbase.sopClassDictionary = sopClassDictionary;
// dicomTagDescriptions // dicomTagDescriptions
import { dicomTagDescriptions } from './lib/dicomTagDescriptions'; import { DICOMTagDescriptions } from './lib/dicomTagDescriptions';
Viewerbase.dicomTagDescriptions = dicomTagDescriptions; Viewerbase.DICOMTagDescriptions = DICOMTagDescriptions;
/** /**
* Exported Classes * Exported Classes

View File

@ -1,5 +1,4 @@
import { Metadata } from './Metadata'; import { Metadata } from './Metadata';
import { dicomTagDescriptions } from '../../dicomTagDescriptions';
import { OHIFError } from '../OHIFError'; import { OHIFError } from '../OHIFError';
const UNDEFINED = 'undefined'; const UNDEFINED = 'undefined';
@ -165,38 +164,6 @@ export class InstanceMetadata extends Metadata {
* Static Methods * Static Methods
*/ */
static getTagInfo(tagOrProperty) {
let tagName = null,
propertyName = null;
if (typeof tagOrProperty === NUMBER) {
// if it's a number, build an hexadecimal representation...
tagName = 'x' + ('00000000' + tagOrProperty.toString(16)).substr(-8);
} else if (typeof tagOrProperty === STRING) {
if (REGEX_TAG.test(tagOrProperty)) {
tagName = tagOrProperty;
} else {
propertyName = tagOrProperty;
}
}
if (propertyName !== null) {
// try to figure out the "tagName" using the provided "propertyName"...
for (let tag in dicomTagDescriptions) {
// No need to check for "hasOwnProperty" here since dicomTagDescriptions is an object with no prototype...
if (dicomTagDescriptions[tag] === propertyName) {
tagName = tag;
break;
}
}
} else if (tagName !== null) {
// try to figure out the "propertyName" using the provided "tagName"...
propertyName = dicomTagDescriptions[tagName] || null;
}
return { tagName, propertyName };
}
/** /**
* Get an value based that can be index based. This function is called by all getters. See above functions. * Get an value based that can be index based. This function is called by all getters. See above functions.
* - If value is a String and has indexes: * - If value is a String and has indexes:

View File

@ -0,0 +1,42 @@
class StudySummary {
constructor(propertyMap) {
// Define the main immutable "_data" private property.
Object.defineProperty(this, '_data', {
configurable: false,
enumerable: false,
writable: false,
value: Object.create(null)
});
const hasOwn = Object.prototype.hasOwnProperty;
const data = this._data;
for (let property in propertyMap) {
if (hasOwn.call(propertyMap, property)) {
data[property] = propertyMap[property];
}
}
}
propertyExists(propertyName) {
const internalPropertyName = this.getInternalPropertyName(propertyName);
return (internalPropertyName in this._data);
}
getPropertyValue(propertyName) {
const internalPropertyName = this.getInternalPropertyName(propertyName);
return this._data[internalPropertyName];
}
/**
* This function is supposed to translate external property names into internal property names.
* By default it implements the simplest translation possible. For
*/
getInternalPropertyName(propertyName) {
return propertyName;
}
}

View File

@ -1,6 +1,36 @@
const dicomTagDescriptions = Object.create(null); // Object with null prototype for fast and safe lookups... const NUMBER = 'number';
let _dicomTagDescriptions = { const STRING = 'string';
const DICOMTagDescriptions = Object.create(Object.prototype, {
_descriptions: {
configurable: false,
enumerable: false,
writable: false,
value: Object.create(null)
},
find: {
configurable: false,
enumerable: true,
writable: false,
value: function find(name) {
let description; // by default, undefined...
if (typeof name === NUMBER) {
// if it's a number, build its hexadecimal representation...
name = 'x' + ('00000000' + name.toString(16)).substr(-8);
}
if (typeof name === STRING) {
description = this._descriptions[name];
}
return description;
}
}
});
/**
* Map with DICOM Tag Descriptions
*/
let initialTagDescriptionMap = {
x00020000: 'FileMetaInfoGroupLength', x00020000: 'FileMetaInfoGroupLength',
x00020001: 'FileMetaInfoVersion', x00020001: 'FileMetaInfoVersion',
x00020002: 'MediaStorageSOPClassUID', x00020002: 'MediaStorageSOPClassUID',
@ -92,7 +122,7 @@ let _dicomTagDescriptions = {
x00080112: 'CodingSchemeRegistry', x00080112: 'CodingSchemeRegistry',
x00080114: 'CodingSchemeExternalID', x00080114: 'CodingSchemeExternalID',
x00080115: 'CodingSchemeName', x00080115: 'CodingSchemeName',
x00080116: 'ResponsibleOrganization', x00080116: 'CodingSchemeResponsibleOrganization',
x00080117: 'ContextUID', x00080117: 'ContextUID',
x00080201: 'TimezoneOffsetFromUTC', x00080201: 'TimezoneOffsetFromUTC',
x00081000: 'NetworkID', x00081000: 'NetworkID',
@ -114,7 +144,7 @@ let _dicomTagDescriptions = {
x00081090: 'ManufacturersModelName', x00081090: 'ManufacturersModelName',
x00081100: 'ReferencedResultsSequence', x00081100: 'ReferencedResultsSequence',
x00081110: 'ReferencedStudySequence', x00081110: 'ReferencedStudySequence',
x00081111: 'ReferencedProcedureStepSequence', x00081111: 'ReferencedPerformedProcedureStepSequence',
x00081115: 'ReferencedSeriesSequence', x00081115: 'ReferencedSeriesSequence',
x00081120: 'ReferencedPatientSequence', x00081120: 'ReferencedPatientSequence',
x00081125: 'ReferencedVisitSequence', x00081125: 'ReferencedVisitSequence',
@ -137,7 +167,7 @@ let _dicomTagDescriptions = {
x00081199: 'ReferencedSOPSequence', x00081199: 'ReferencedSOPSequence',
x00081200: 'OtherReferencedStudiesSequence', x00081200: 'OtherReferencedStudiesSequence',
x00081250: 'RelatedSeriesSequence', x00081250: 'RelatedSeriesSequence',
x00082110: 'LossyImageCompression', x00082110: 'LossyImageCompressionRetired',
x00082111: 'DerivationDescription', x00082111: 'DerivationDescription',
x00082112: 'SourceImageSequence', x00082112: 'SourceImageSequence',
x00082120: 'StageName', x00082120: 'StageName',
@ -191,16 +221,16 @@ let _dicomTagDescriptions = {
x00089458: 'FrameDisplaySequence', x00089458: 'FrameDisplaySequence',
x00089459: 'RecommendedDisplayFrameRateInFloat', x00089459: 'RecommendedDisplayFrameRateInFloat',
x00089460: 'SkipFrameRangeFlag', x00089460: 'SkipFrameRangeFlag',
x00091001: 'FullFidelity', // x00091001: 'FullFidelity',
x00091002: 'SuiteID', // x00091002: 'SuiteID',
x00091004: 'ProductID', // x00091004: 'ProductID',
x00091027: 'ImageActualDate', // x00091027: 'ImageActualDate',
x00091030: 'ServiceID', // x00091030: 'ServiceID',
x00091031: 'MobileLocationNumber', // x00091031: 'MobileLocationNumber',
x000910e3: 'EquipmentUID', // x000910e3: 'EquipmentUID',
x000910e6: 'GenesisVersionNow', // x000910e6: 'GenesisVersionNow',
x000910e7: 'ExamRecordChecksum', // x000910e7: 'ExamRecordChecksum',
x000910e9: 'ActualSeriesDataTimeStamp', // x000910e9: 'ActualSeriesDataTimeStamp',
x00100000: 'PatientGroupLength', x00100000: 'PatientGroupLength',
x00100010: 'PatientName', x00100010: 'PatientName',
x00100020: 'PatientID', x00100020: 'PatientID',
@ -911,149 +941,149 @@ let _dicomTagDescriptions = {
x0018a001: 'ContributingEquipmentSequence', x0018a001: 'ContributingEquipmentSequence',
x0018a002: 'ContributionDateTime', x0018a002: 'ContributionDateTime',
x0018a003: 'ContributionDescription', x0018a003: 'ContributionDescription',
x00191002: 'NumberOfCellsIInDetector', // x00191002: 'NumberOfCellsIInDetector',
x00191003: 'CellNumberAtTheta', // x00191003: 'CellNumberAtTheta',
x00191004: 'CellSpacing', // x00191004: 'CellSpacing',
x0019100f: 'HorizFrameOfRef', // x0019100f: 'HorizFrameOfRef',
x00191011: 'SeriesContrast', // x00191011: 'SeriesContrast',
x00191012: 'LastPseq', // x00191012: 'LastPseq',
x00191013: 'StartNumberForBaseline', // x00191013: 'StartNumberForBaseline',
x00191014: 'EndNumberForBaseline', // x00191014: 'EndNumberForBaseline',
x00191015: 'StartNumberForEnhancedScans', // x00191015: 'StartNumberForEnhancedScans',
x00191016: 'EndNumberForEnhancedScans', // x00191016: 'EndNumberForEnhancedScans',
x00191017: 'SeriesPlane', // x00191017: 'SeriesPlane',
x00191018: 'FirstScanRas', // x00191018: 'FirstScanRas',
x00191019: 'FirstScanLocation', // x00191019: 'FirstScanLocation',
x0019101a: 'LastScanRas', // x0019101a: 'LastScanRas',
x0019101b: 'LastScanLoc', // x0019101b: 'LastScanLoc',
x0019101e: 'DisplayFieldOfView', // x0019101e: 'DisplayFieldOfView',
x00191023: 'TableSpeed', // x00191023: 'TableSpeed',
x00191024: 'MidScanTime', // x00191024: 'MidScanTime',
x00191025: 'MidScanFlag', // x00191025: 'MidScanFlag',
x00191026: 'DegreesOfAzimuth', // x00191026: 'DegreesOfAzimuth',
x00191027: 'GantryPeriod', // x00191027: 'GantryPeriod',
x0019102a: 'XRayOnPosition', // x0019102a: 'XRayOnPosition',
x0019102b: 'XRayOffPosition', // x0019102b: 'XRayOffPosition',
x0019102c: 'NumberOfTriggers', // x0019102c: 'NumberOfTriggers',
x0019102e: 'AngleOfFirstView', // x0019102e: 'AngleOfFirstView',
x0019102f: 'TriggerFrequency', // x0019102f: 'TriggerFrequency',
x00191039: 'ScanFOVType', // x00191039: 'ScanFOVType',
x00191040: 'StatReconFlag', // x00191040: 'StatReconFlag',
x00191041: 'ComputeType', // x00191041: 'ComputeType',
x00191042: 'SegmentNumber', // x00191042: 'SegmentNumber',
x00191043: 'TotalSegmentsRequested', // x00191043: 'TotalSegmentsRequested',
x00191044: 'InterscanDelay', // x00191044: 'InterscanDelay',
x00191047: 'ViewCompressionFactor', // x00191047: 'ViewCompressionFactor',
x0019104a: 'TotalNoOfRefChannels', // x0019104a: 'TotalNoOfRefChannels',
x0019104b: 'DataSizeForScanData', // x0019104b: 'DataSizeForScanData',
x00191052: 'ReconPostProcflag', // x00191052: 'ReconPostProcflag',
x00191057: 'CTWaterNumber', // x00191057: 'CTWaterNumber',
x00191058: 'CTBoneNumber', // x00191058: 'CTBoneNumber',
x0019105a: 'AcquisitionDuration', // x0019105a: 'AcquisitionDuration',
x0019105e: 'NumberOfChannels', // x0019105e: 'NumberOfChannels',
x0019105f: 'IncrementBetweenChannels', // x0019105f: 'IncrementBetweenChannels',
x00191060: 'StartingView', // x00191060: 'StartingView',
x00191061: 'NumberOfViews', // x00191061: 'NumberOfViews',
x00191062: 'IncrementBetweenViews', // x00191062: 'IncrementBetweenViews',
x0019106a: 'DependantOnNoViewsProcessed', // x0019106a: 'DependantOnNoViewsProcessed',
x0019106b: 'FieldOfViewInDetectorCells', // x0019106b: 'FieldOfViewInDetectorCells',
x00191070: 'ValueOfBackProjectionButton', // x00191070: 'ValueOfBackProjectionButton',
x00191071: 'SetIfFatqEstimatesWereUsed', // x00191071: 'SetIfFatqEstimatesWereUsed',
x00191072: 'ZChanAvgOverViews', // x00191072: 'ZChanAvgOverViews',
x00191073: 'AvgOfLeftRefChansOverViews', // x00191073: 'AvgOfLeftRefChansOverViews',
x00191074: 'MaxLeftChanOverViews', // x00191074: 'MaxLeftChanOverViews',
x00191075: 'AvgOfRightRefChansOverViews', // x00191075: 'AvgOfRightRefChansOverViews',
x00191076: 'MaxRightChanOverViews', // x00191076: 'MaxRightChanOverViews',
x0019107d: 'SecondEcho', // x0019107d: 'SecondEcho',
x0019107e: 'NumberOfEchoes', // x0019107e: 'NumberOfEchoes',
x0019107f: 'TableDelta', // x0019107f: 'TableDelta',
x00191081: 'Contiguous', // x00191081: 'Contiguous',
x00191084: 'PeakSAR', // x00191084: 'PeakSAR',
x00191085: 'MonitorSAR', // x00191085: 'MonitorSAR',
x00191087: 'CardiacRepetitionTime', // x00191087: 'CardiacRepetitionTime',
x00191088: 'ImagesPerCardiacCycle', // x00191088: 'ImagesPerCardiacCycle',
x0019108a: 'ActualReceiveGainAnalog', // x0019108a: 'ActualReceiveGainAnalog',
x0019108b: 'ActualReceiveGainDigital', // x0019108b: 'ActualReceiveGainDigital',
x0019108d: 'DelayAfterTrigger', // x0019108d: 'DelayAfterTrigger',
x0019108f: 'Swappf', // x0019108f: 'Swappf',
x00191090: 'PauseInterval', // x00191090: 'PauseInterval',
x00191091: 'PulseTime', // x00191091: 'PulseTime',
x00191092: 'SliceOffsetOnFreqAxis', // x00191092: 'SliceOffsetOnFreqAxis',
x00191093: 'CenterFrequency', // x00191093: 'CenterFrequency',
x00191094: 'TransmitGain', // x00191094: 'TransmitGain',
x00191095: 'AnalogReceiverGain', // x00191095: 'AnalogReceiverGain',
x00191096: 'DigitalReceiverGain', // x00191096: 'DigitalReceiverGain',
x00191097: 'BitmapDefiningCVs', // x00191097: 'BitmapDefiningCVs',
x00191098: 'CenterFreqMethod', // x00191098: 'CenterFreqMethod',
x0019109b: 'PulseSeqMode', // x0019109b: 'PulseSeqMode',
x0019109c: 'PulseSeqName', // x0019109c: 'PulseSeqName',
x0019109d: 'PulseSeqDate', // x0019109d: 'PulseSeqDate',
x0019109e: 'InternalPulseSeqName', // x0019109e: 'InternalPulseSeqName',
x0019109f: 'TransmittingCoil', // x0019109f: 'TransmittingCoil',
x001910a0: 'SurfaceCoilType', // x001910a0: 'SurfaceCoilType',
x001910a1: 'ExtremityCoilFlag', // x001910a1: 'ExtremityCoilFlag',
x001910a2: 'RawDataRunNumber', // x001910a2: 'RawDataRunNumber',
x001910a3: 'CalibratedFieldStrength', // x001910a3: 'CalibratedFieldStrength',
x001910a4: 'SATFatWaterBone', // x001910a4: 'SATFatWaterBone',
x001910a5: 'ReceiveBandwidth', // x001910a5: 'ReceiveBandwidth',
x001910a7: 'UserData01', // x001910a7: 'UserData01',
x001910a8: 'UserData02', // x001910a8: 'UserData02',
x001910a9: 'UserData03', // x001910a9: 'UserData03',
x001910aa: 'UserData04', // x001910aa: 'UserData04',
x001910ab: 'UserData05', // x001910ab: 'UserData05',
x001910ac: 'UserData06', // x001910ac: 'UserData06',
x001910ad: 'UserData07', // x001910ad: 'UserData07',
x001910ae: 'UserData08', // x001910ae: 'UserData08',
x001910af: 'UserData09', // x001910af: 'UserData09',
x001910b0: 'UserData10', // x001910b0: 'UserData10',
x001910b1: 'UserData11', // x001910b1: 'UserData11',
x001910b2: 'UserData12', // x001910b2: 'UserData12',
x001910b3: 'UserData13', // x001910b3: 'UserData13',
x001910b4: 'UserData14', // x001910b4: 'UserData14',
x001910b5: 'UserData15', // x001910b5: 'UserData15',
x001910b6: 'UserData16', // x001910b6: 'UserData16',
x001910b7: 'UserData17', // x001910b7: 'UserData17',
x001910b8: 'UserData18', // x001910b8: 'UserData18',
x001910b9: 'UserData19', // x001910b9: 'UserData19',
x001910ba: 'UserData20', // x001910ba: 'UserData20',
x001910bb: 'UserData21', // x001910bb: 'UserData21',
x001910bc: 'UserData22', // x001910bc: 'UserData22',
x001910bd: 'UserData23', // x001910bd: 'UserData23',
x001910be: 'ProjectionAngle', // x001910be: 'ProjectionAngle',
x001910c0: 'SaturationPlanes', // x001910c0: 'SaturationPlanes',
x001910c1: 'SurfaceCoilIntensity', // x001910c1: 'SurfaceCoilIntensity',
x001910c2: 'SATLocationR', // x001910c2: 'SATLocationR',
x001910c3: 'SATLocationL', // x001910c3: 'SATLocationL',
x001910c4: 'SATLocationA', // x001910c4: 'SATLocationA',
x001910c5: 'SATLocationP', // x001910c5: 'SATLocationP',
x001910c6: 'SATLocationH', // x001910c6: 'SATLocationH',
x001910c7: 'SATLocationF', // x001910c7: 'SATLocationF',
x001910c8: 'SATThicknessR-L', // x001910c8: 'SATThicknessR-L',
x001910c9: 'SATThicknessA-P', // x001910c9: 'SATThicknessA-P',
x001910ca: 'SATThicknessH-F', // x001910ca: 'SATThicknessH-F',
x001910cb: 'PrescribedFlowAxis', // x001910cb: 'PrescribedFlowAxis',
x001910cc: 'VelocityEncoding', // x001910cc: 'VelocityEncoding',
x001910cd: 'ThicknessDisclaimer', // x001910cd: 'ThicknessDisclaimer',
x001910ce: 'PrescanType', // x001910ce: 'PrescanType',
x001910cf: 'PrescanStatus', // x001910cf: 'PrescanStatus',
x001910d0: 'RawDataType', // x001910d0: 'RawDataType',
x001910d2: 'ProjectionAlgorithm', // x001910d2: 'ProjectionAlgorithm',
x001910d3: 'ProjectionAlgorithm', // x001910d3: 'ProjectionAlgorithm',
x001910d5: 'FractionalEcho', // x001910d5: 'FractionalEcho',
x001910d6: 'PrepPulse', // x001910d6: 'PrepPulse',
x001910d7: 'CardiacPhases', // x001910d7: 'CardiacPhases',
x001910d8: 'VariableEchoflag', // x001910d8: 'VariableEchoflag',
x001910d9: 'ConcatenatedSAT', // x001910d9: 'ConcatenatedSAT',
x001910da: 'ReferenceChannelUsed', // x001910da: 'ReferenceChannelUsed',
x001910db: 'BackProjectorCoefficient', // x001910db: 'BackProjectorCoefficient',
x001910dc: 'PrimarySpeedCorrectionUsed', // x001910dc: 'PrimarySpeedCorrectionUsed',
x001910dd: 'OverrangeCorrectionUsed', // x001910dd: 'OverrangeCorrectionUsed',
x001910de: 'DynamicZAlphaValue', // x001910de: 'DynamicZAlphaValue',
x001910df: 'UserData', // x001910df: 'UserData',
x001910e0: 'UserData', // x001910e0: 'UserData',
x001910e2: 'VelocityEncodeScale', // x001910e2: 'VelocityEncodeScale',
x001910f2: 'FastPhases', // x001910f2: 'FastPhases',
x001910f9: 'TransmissionGain', // x001910f9: 'TransmissionGain',
x00200000: 'RelationshipGroupLength', x00200000: 'RelationshipGroupLength',
x0020000d: 'StudyInstanceUID', x0020000d: 'StudyInstanceUID',
x0020000e: 'SeriesInstanceUID', x0020000e: 'SeriesInstanceUID',
@ -1157,41 +1187,41 @@ let _dicomTagDescriptions = {
x00209518: 'AcquisitionIndex', x00209518: 'AcquisitionIndex',
x00209529: 'ContributingSOPInstancesRefSeq', x00209529: 'ContributingSOPInstancesRefSeq',
x00209536: 'ReconstructionIndex', x00209536: 'ReconstructionIndex',
x00211003: 'SeriesFromWhichPrescribed', // x00211003: 'SeriesFromWhichPrescribed',
x00211005: 'GenesisVersionNow', // x00211005: 'GenesisVersionNow',
x00211007: 'SeriesRecordChecksum', // x00211007: 'SeriesRecordChecksum',
x00211018: 'GenesisVersionNow', // x00211018: 'GenesisVersionNow',
x00211019: 'AcqreconRecordChecksum', // x00211019: 'AcqreconRecordChecksum',
x00211020: 'TableStartLocation', // x00211020: 'TableStartLocation',
x00211035: 'SeriesFromWhichPrescribed', // x00211035: 'SeriesFromWhichPrescribed',
x00211036: 'ImageFromWhichPrescribed', // x00211036: 'ImageFromWhichPrescribed',
x00211037: 'ScreenFormat', // x00211037: 'ScreenFormat',
x0021104a: 'AnatomicalReferenceForScout', // x0021104a: 'AnatomicalReferenceForScout',
x0021104f: 'LocationsInAcquisition', // x0021104f: 'LocationsInAcquisition',
x00211050: 'GraphicallyPrescribed', // x00211050: 'GraphicallyPrescribed',
x00211051: 'RotationFromSourceXRot', // x00211051: 'RotationFromSourceXRot',
x00211052: 'RotationFromSourceYRot', // x00211052: 'RotationFromSourceYRot',
x00211053: 'RotationFromSourceZRot', // x00211053: 'RotationFromSourceZRot',
x00211054: 'ImagePosition', // x00211054: 'ImagePosition',
x00211055: 'ImageOrientation', // x00211055: 'ImageOrientation',
x00211056: 'IntegerSlop', // x00211056: 'IntegerSlop',
x00211057: 'IntegerSlop', // x00211057: 'IntegerSlop',
x00211058: 'IntegerSlop', // x00211058: 'IntegerSlop',
x00211059: 'IntegerSlop', // x00211059: 'IntegerSlop',
x0021105a: 'IntegerSlop', // x0021105a: 'IntegerSlop',
x0021105b: 'FloatSlop', // x0021105b: 'FloatSlop',
x0021105c: 'FloatSlop', // x0021105c: 'FloatSlop',
x0021105d: 'FloatSlop', // x0021105d: 'FloatSlop',
x0021105e: 'FloatSlop', // x0021105e: 'FloatSlop',
x0021105f: 'FloatSlop', // x0021105f: 'FloatSlop',
x00211081: 'AutoWindowLevelAlpha', // x00211081: 'AutoWindowLevelAlpha',
x00211082: 'AutoWindowLevelBeta', // x00211082: 'AutoWindowLevelBeta',
x00211083: 'AutoWindowLevelWindow', // x00211083: 'AutoWindowLevelWindow',
x00211084: 'ToWindowLevelLevel', // x00211084: 'ToWindowLevelLevel',
x00211090: 'TubeFocalSpotPosition', // x00211090: 'TubeFocalSpotPosition',
x00211091: 'BiopsyPosition', // x00211091: 'BiopsyPosition',
x00211092: 'BiopsyTLocation', // x00211092: 'BiopsyTLocation',
x00211093: 'BiopsyRefLocation', // x00211093: 'BiopsyRefLocation',
x00220001: 'LightPathFilterPassThroughWavelen', x00220001: 'LightPathFilterPassThroughWavelen',
x00220002: 'LightPathFilterPassBand', x00220002: 'LightPathFilterPassBand',
x00220003: 'ImagePathFilterPassThroughWavelen', x00220003: 'ImagePathFilterPassThroughWavelen',
@ -1240,58 +1270,58 @@ let _dicomTagDescriptions = {
x00220056: 'IlluminationPower', x00220056: 'IlluminationPower',
x00220057: 'IlluminationBandwidth', x00220057: 'IlluminationBandwidth',
x00220058: 'MydriaticAgentSequence', x00220058: 'MydriaticAgentSequence',
x00231001: 'NumberOfSeriesInStudy', // x00231001: 'NumberOfSeriesInStudy',
x00231002: 'NumberOfUnarchivedSeries', // x00231002: 'NumberOfUnarchivedSeries',
x00231010: 'ReferenceImageField', // x00231010: 'ReferenceImageField',
x00231050: 'SummaryImage', // x00231050: 'SummaryImage',
x00231070: 'StartTimeSecsInFirstAxial', // x00231070: 'StartTimeSecsInFirstAxial',
x00231074: 'NoofUpdatesToHeader', // x00231074: 'NoofUpdatesToHeader',
x0023107d: 'IndicatesIfTheStudyHasCompleteInfo', // x0023107d: 'IndicatesIfTheStudyHasCompleteInfo',
x00251006: 'LastPulseSequenceUsed', // x00251006: 'LastPulseSequenceUsed',
x00251007: 'ImagesInSeries', // x00251007: 'ImagesInSeries',
x00251010: 'LandmarkCounter', // x00251010: 'LandmarkCounter',
x00251011: 'NumberOfAcquisitions', // x00251011: 'NumberOfAcquisitions',
x00251014: 'IndicatesNoofUpdatesToHeader', // x00251014: 'IndicatesNoofUpdatesToHeader',
x00251017: 'SeriesCompleteFlag', // x00251017: 'SeriesCompleteFlag',
x00251018: 'NumberOfImagesArchived', // x00251018: 'NumberOfImagesArchived',
x00251019: 'LastImageNumberUsed', // x00251019: 'LastImageNumberUsed',
x0025101a: 'PrimaryReceiverSuiteAndHost', // x0025101a: 'PrimaryReceiverSuiteAndHost',
x00271006: 'ImageArchiveFlag', // x00271006: 'ImageArchiveFlag',
x00271010: 'ScoutType', // x00271010: 'ScoutType',
x0027101c: 'VmaMamp', // x0027101c: 'VmaMamp',
x0027101d: 'VmaPhase', // x0027101d: 'VmaPhase',
x0027101e: 'VmaMod', // x0027101e: 'VmaMod',
x0027101f: 'VmaClip', // x0027101f: 'VmaClip',
x00271020: 'SmartScanOnOffFlag', // x00271020: 'SmartScanOnOffFlag',
x00271030: 'ForeignImageRevision', // x00271030: 'ForeignImageRevision',
x00271031: 'ImagingMode', // x00271031: 'ImagingMode',
x00271032: 'PulseSequence', // x00271032: 'PulseSequence',
x00271033: 'ImagingOptions', // x00271033: 'ImagingOptions',
x00271035: 'PlaneType', // x00271035: 'PlaneType',
x00271036: 'ObliquePlane', // x00271036: 'ObliquePlane',
x00271040: 'RASLetterOfImageLocation', // x00271040: 'RASLetterOfImageLocation',
x00271041: 'ImageLocation', // x00271041: 'ImageLocation',
x00271042: 'CenterRCoordOfPlaneImage', // x00271042: 'CenterRCoordOfPlaneImage',
x00271043: 'CenterACoordOfPlaneImage', // x00271043: 'CenterACoordOfPlaneImage',
x00271044: 'CenterSCoordOfPlaneImage', // x00271044: 'CenterSCoordOfPlaneImage',
x00271045: 'NormalRCoord', // x00271045: 'NormalRCoord',
x00271046: 'NormalACoord', // x00271046: 'NormalACoord',
x00271047: 'NormalSCoord', // x00271047: 'NormalSCoord',
x00271048: 'RCoordOfTopRightCorner', // x00271048: 'RCoordOfTopRightCorner',
x00271049: 'ACoordOfTopRightCorner', // x00271049: 'ACoordOfTopRightCorner',
x0027104a: 'SCoordOfTopRightCorner', // x0027104a: 'SCoordOfTopRightCorner',
x0027104b: 'RCoordOfBottomRightCorner', // x0027104b: 'RCoordOfBottomRightCorner',
x0027104c: 'ACoordOfBottomRightCorner', // x0027104c: 'ACoordOfBottomRightCorner',
x0027104d: 'SCoordOfBottomRightCorner', // x0027104d: 'SCoordOfBottomRightCorner',
x00271050: 'TableStartLocation', // x00271050: 'TableStartLocation',
x00271051: 'TableEndLocation', // x00271051: 'TableEndLocation',
x00271052: 'RASLetterForSideOfImage', // x00271052: 'RASLetterForSideOfImage',
x00271053: 'RASLetterForAnteriorPosterior', // x00271053: 'RASLetterForAnteriorPosterior',
x00271054: 'RASLetterForScoutStartLoc', // x00271054: 'RASLetterForScoutStartLoc',
x00271055: 'RASLetterForScoutEndLoc', // x00271055: 'RASLetterForScoutEndLoc',
x00271060: 'ImageDimensionX', // x00271060: 'ImageDimensionX',
x00271061: 'ImageDimensionY', // x00271061: 'ImageDimensionY',
x00271062: 'NumberOfExcitations', // x00271062: 'NumberOfExcitations',
x00280000: 'ImagePresentationGroupLength', x00280000: 'ImagePresentationGroupLength',
x00280002: 'SamplesPerPixel', x00280002: 'SamplesPerPixel',
x00280003: 'SamplesPerPixelUsed', x00280003: 'SamplesPerPixelUsed',
@ -1469,21 +1499,21 @@ let _dicomTagDescriptions = {
x00289507: 'LUTFrameRange', x00289507: 'LUTFrameRange',
x00289520: 'ImageToEquipmentMappingMatrix', x00289520: 'ImageToEquipmentMappingMatrix',
x00289537: 'EquipmentCoordinateSystemID', x00289537: 'EquipmentCoordinateSystemID',
x00291004: 'LowerRangeOfPixels1a', // x00291004: 'LowerRangeOfPixels1a',
x00291005: 'LowerRangeOfPixels1b', // x00291005: 'LowerRangeOfPixels1b',
x00291006: 'LowerRangeOfPixels1c', // x00291006: 'LowerRangeOfPixels1c',
x00291007: 'LowerRangeOfPixels1d', // x00291007: 'LowerRangeOfPixels1d',
x00291008: 'LowerRangeOfPixels1e', // x00291008: 'LowerRangeOfPixels1e',
x00291009: 'LowerRangeOfPixels1f', // x00291009: 'LowerRangeOfPixels1f',
x0029100a: 'LowerRangeOfPixels1g', // x0029100a: 'LowerRangeOfPixels1g',
x00291015: 'LowerRangeOfPixels1h', // x00291015: 'LowerRangeOfPixels1h',
x00291016: 'LowerRangeOfPixels1i', // x00291016: 'LowerRangeOfPixels1i',
x00291017: 'LowerRangeOfPixels2', // x00291017: 'LowerRangeOfPixels2',
x00291018: 'UpperRangeOfPixels2', // x00291018: 'UpperRangeOfPixels2',
x0029101a: 'LenOfTotHdrInBytes', // x0029101a: 'LenOfTotHdrInBytes',
x00291026: 'VersionOfTheHdrStruct', // x00291026: 'VersionOfTheHdrStruct',
x00291034: 'AdvantageCompOverflow', // x00291034: 'AdvantageCompOverflow',
x00291035: 'AdvantageCompUnderflow', // x00291035: 'AdvantageCompUnderflow',
x00320000: 'StudyGroupLength', x00320000: 'StudyGroupLength',
x0032000a: 'StudyStatusID', x0032000a: 'StudyStatusID',
x0032000c: 'StudyPriorityID', x0032000c: 'StudyPriorityID',
@ -1678,8 +1708,8 @@ let _dicomTagDescriptions = {
x00402001: 'ReasonForImagingServiceRequest', x00402001: 'ReasonForImagingServiceRequest',
x00402004: 'IssueDateOfImagingServiceRequest', x00402004: 'IssueDateOfImagingServiceRequest',
x00402005: 'IssueTimeOfImagingServiceRequest', x00402005: 'IssueTimeOfImagingServiceRequest',
x00402006: 'PlacerOrderNum-ImagingServiceReq', x00402006: 'PlacerOrderNumberImagingServiceRequestRetired',
x00402007: 'FillerOrderNum-ImagingServiceReq', x00402007: 'FillerOrderNumberImagingServiceRequestRetired',
x00402008: 'OrderEnteredBy', x00402008: 'OrderEnteredBy',
x00402009: 'OrderEntererLocation', x00402009: 'OrderEntererLocation',
x00402010: 'OrderCallbackPhoneNumber', x00402010: 'OrderCallbackPhoneNumber',
@ -1799,79 +1829,79 @@ let _dicomTagDescriptions = {
x00420012: 'MIMETypeOfEncapsulatedDocument', x00420012: 'MIMETypeOfEncapsulatedDocument',
x00420013: 'SourceInstanceSequence', x00420013: 'SourceInstanceSequence',
x00420014: 'ListOfMIMETypes', x00420014: 'ListOfMIMETypes',
x00431001: 'BitmapOfPrescanOptions', // x00431001: 'BitmapOfPrescanOptions',
x00431002: 'GradientOffsetInX', // x00431002: 'GradientOffsetInX',
x00431003: 'GradientOffsetInY', // x00431003: 'GradientOffsetInY',
x00431004: 'GradientOffsetInZ', // x00431004: 'GradientOffsetInZ',
x00431005: 'ImgIsOriginalOrUnoriginal', // x00431005: 'ImgIsOriginalOrUnoriginal',
x00431006: 'NumberOfEPIShots', // x00431006: 'NumberOfEPIShots',
x00431007: 'ViewsPerSegment', // x00431007: 'ViewsPerSegment',
x00431008: 'RespiratoryRateBpm', // x00431008: 'RespiratoryRateBpm',
x00431009: 'RespiratoryTriggerPoint', // x00431009: 'RespiratoryTriggerPoint',
x0043100a: 'TypeOfReceiverUsed', // x0043100a: 'TypeOfReceiverUsed',
x0043100b: 'PeakRateOfChangeOfGradientField', // x0043100b: 'PeakRateOfChangeOfGradientField',
x0043100c: 'LimitsInUnitsOfPercent', // x0043100c: 'LimitsInUnitsOfPercent',
x0043100d: 'PSDEstimatedLimit', // x0043100d: 'PSDEstimatedLimit',
x0043100e: 'PSDEstimatedLimitInTeslaPerSecond', // x0043100e: 'PSDEstimatedLimitInTeslaPerSecond',
x0043100f: 'Saravghead', // x0043100f: 'Saravghead',
x00431010: 'WindowValue', // x00431010: 'WindowValue',
x00431011: 'TotalInputViews', // x00431011: 'TotalInputViews',
x00431012: 'X-RayChain', // x00431012: 'X-RayChain',
x00431013: 'DeconKernelParameters', // x00431013: 'DeconKernelParameters',
x00431014: 'CalibrationParameters', // x00431014: 'CalibrationParameters',
x00431015: 'TotalOutputViews', // x00431015: 'TotalOutputViews',
x00431016: 'NumberOfOverranges', // x00431016: 'NumberOfOverranges',
x00431017: 'IBHImageScaleFactors', // x00431017: 'IBHImageScaleFactors',
x00431018: 'BBHCoefficients', // x00431018: 'BBHCoefficients',
x00431019: 'NumberOfBBHChainsToBlend', // x00431019: 'NumberOfBBHChainsToBlend',
x0043101a: 'StartingChannelNumber', // x0043101a: 'StartingChannelNumber',
x0043101b: 'PpscanParameters', // x0043101b: 'PpscanParameters',
x0043101c: 'GEImageIntegrity', // x0043101c: 'GEImageIntegrity',
x0043101d: 'LevelValue', // x0043101d: 'LevelValue',
x0043101e: 'DeltaStartTime', // x0043101e: 'DeltaStartTime',
x0043101f: 'MaxOverrangesInAView', // x0043101f: 'MaxOverrangesInAView',
x00431020: 'AvgOverrangesAllViews', // x00431020: 'AvgOverrangesAllViews',
x00431021: 'CorrectedAfterGlowTerms', // x00431021: 'CorrectedAfterGlowTerms',
x00431025: 'ReferenceChannels', // x00431025: 'ReferenceChannels',
x00431026: 'NoViewsRefChansBlocked', // x00431026: 'NoViewsRefChansBlocked',
x00431027: 'ScanPitchRatio', // x00431027: 'ScanPitchRatio',
x00431028: 'UniqueImageIden', // x00431028: 'UniqueImageIden',
x00431029: 'HistogramTables', // x00431029: 'HistogramTables',
x0043102a: 'UserDefinedData', // x0043102a: 'UserDefinedData',
x0043102b: 'PrivateScanOptions', // x0043102b: 'PrivateScanOptions',
x0043102c: 'EffectiveEchoSpacing', // x0043102c: 'EffectiveEchoSpacing',
x0043102d: 'StringSlopField1', // x0043102d: 'StringSlopField1',
x0043102e: 'StringSlopField2', // x0043102e: 'StringSlopField2',
x0043102f: 'RawDataType', // x0043102f: 'RawDataType',
x00431030: 'RawDataType', // x00431030: 'RawDataType',
x00431031: 'RACordOfTargetReconCenter', // x00431031: 'RACordOfTargetReconCenter',
x00431032: 'RawDataType', // x00431032: 'RawDataType',
x00431033: 'NegScanspacing', // x00431033: 'NegScanspacing',
x00431034: 'OffsetFrequency', // x00431034: 'OffsetFrequency',
x00431035: 'UserUsageTag', // x00431035: 'UserUsageTag',
x00431036: 'UserFillMapMSW', // x00431036: 'UserFillMapMSW',
x00431037: 'UserFillMapLSW', // x00431037: 'UserFillMapLSW',
x00431038: 'User25-48', // x00431038: 'User25-48',
x00431039: 'SlopInt6-9', // x00431039: 'SlopInt6-9',
x00431040: 'TriggerOnPosition', // x00431040: 'TriggerOnPosition',
x00431041: 'DegreeOfRotation', // x00431041: 'DegreeOfRotation',
x00431042: 'DASTriggerSource', // x00431042: 'DASTriggerSource',
x00431043: 'DASFpaGain', // x00431043: 'DASFpaGain',
x00431044: 'DASOutputSource', // x00431044: 'DASOutputSource',
x00431045: 'DASAdInput', // x00431045: 'DASAdInput',
x00431046: 'DASCalMode', // x00431046: 'DASCalMode',
x00431047: 'DASCalFrequency', // x00431047: 'DASCalFrequency',
x00431048: 'DASRegXm', // x00431048: 'DASRegXm',
x00431049: 'DASAutoZero', // x00431049: 'DASAutoZero',
x0043104a: 'StartingChannelOfView', // x0043104a: 'StartingChannelOfView',
x0043104b: 'DASXmPattern', // x0043104b: 'DASXmPattern',
x0043104c: 'TGGCTriggerMode', // x0043104c: 'TGGCTriggerMode',
x0043104d: 'StartScanToXrayOnDelay', // x0043104d: 'StartScanToXrayOnDelay',
x0043104e: 'DurationOfXrayOn', // x0043104e: 'DurationOfXrayOn',
x00431060: 'SlopInt10-17', // x00431060: 'SlopInt10-17',
x00431061: 'ScannerStudyEntityUID', // x00431061: 'ScannerStudyEntityUID',
x00431062: 'ScannerStudyID', // x00431062: 'ScannerStudyID',
x0043106f: 'ScannerTableEntry', // x0043106f: 'ScannerTableEntry',
x00440001: 'ProductPackageIdentifier', x00440001: 'ProductPackageIdentifier',
x00440002: 'SubstanceAdministrationApproval', x00440002: 'SubstanceAdministrationApproval',
x00440003: 'ApprovalStatusFurtherDescription', x00440003: 'ApprovalStatusFurtherDescription',
@ -1886,40 +1916,40 @@ let _dicomTagDescriptions = {
x00440012: 'SubstanceAdministrationDeviceID', x00440012: 'SubstanceAdministrationDeviceID',
x00440013: 'ProductParameterSequence', x00440013: 'ProductParameterSequence',
x00440019: 'SubstanceAdminParameterSeq', x00440019: 'SubstanceAdminParameterSeq',
x00451001: 'NumberOfMacroRowsInDetector', // x00451001: 'NumberOfMacroRowsInDetector',
x00451002: 'MacroWidthAtISOCenter', // x00451002: 'MacroWidthAtISOCenter',
x00451003: 'DASType', // x00451003: 'DASType',
x00451004: 'DASGain', // x00451004: 'DASGain',
x00451005: 'DASTemperature', // x00451005: 'DASTemperature',
x00451006: 'TableDirectionInOrOut', // x00451006: 'TableDirectionInOrOut',
x00451007: 'ZSmoothingFactor', // x00451007: 'ZSmoothingFactor',
x00451008: 'ViewWeightingMode', // x00451008: 'ViewWeightingMode',
x00451009: 'SigmaRowNumberWhichRowsWereUsed', // x00451009: 'SigmaRowNumberWhichRowsWereUsed',
x0045100a: 'MinimumDasValueFoundInTheScanData', // x0045100a: 'MinimumDasValueFoundInTheScanData',
x0045100b: 'MaximumOffsetShiftValueUsed', // x0045100b: 'MaximumOffsetShiftValueUsed',
x0045100c: 'NumberOfViewsShifted', // x0045100c: 'NumberOfViewsShifted',
x0045100d: 'ZTrackingFlag', // x0045100d: 'ZTrackingFlag',
x0045100e: 'MeanZError', // x0045100e: 'MeanZError',
x0045100f: 'ZTrackingMaximumError', // x0045100f: 'ZTrackingMaximumError',
x00451010: 'StartingViewForRow2a', // x00451010: 'StartingViewForRow2a',
x00451011: 'NumberOfViewsInRow2a', // x00451011: 'NumberOfViewsInRow2a',
x00451012: 'StartingViewForRow1a', // x00451012: 'StartingViewForRow1a',
x00451013: 'SigmaMode', // x00451013: 'SigmaMode',
x00451014: 'NumberOfViewsInRow1a', // x00451014: 'NumberOfViewsInRow1a',
x00451015: 'StartingViewForRow2b', // x00451015: 'StartingViewForRow2b',
x00451016: 'NumberOfViewsInRow2b', // x00451016: 'NumberOfViewsInRow2b',
x00451017: 'StartingViewForRow1b', // x00451017: 'StartingViewForRow1b',
x00451018: 'NumberOfViewsInRow1b', // x00451018: 'NumberOfViewsInRow1b',
x00451019: 'AirFilterCalibrationDate', // x00451019: 'AirFilterCalibrationDate',
x0045101a: 'AirFilterCalibrationTime', // x0045101a: 'AirFilterCalibrationTime',
x0045101b: 'PhantomCalibrationDate', // x0045101b: 'PhantomCalibrationDate',
x0045101c: 'PhantomCalibrationTime', // x0045101c: 'PhantomCalibrationTime',
x0045101d: 'ZSlopeCalibrationDate', // x0045101d: 'ZSlopeCalibrationDate',
x0045101e: 'ZSlopeCalibrationTime', // x0045101e: 'ZSlopeCalibrationTime',
x0045101f: 'CrosstalkCalibrationDate', // x0045101f: 'CrosstalkCalibrationDate',
x00451020: 'CrosstalkCalibrationTime', // x00451020: 'CrosstalkCalibrationTime',
x00451021: 'IterboneOptionFlag', // x00451021: 'IterboneOptionFlag',
x00451022: 'PeristalticFlagOption', // x00451022: 'PeristalticFlagOption',
x00460012: 'LensDescription', x00460012: 'LensDescription',
x00460014: 'RightLensSequence', x00460014: 'RightLensSequence',
x00460015: 'LeftLensSequence', x00460015: 'LeftLensSequence',
@ -2423,7 +2453,7 @@ let _dicomTagDescriptions = {
x20400082: 'OverlayBackgroundDensity', x20400082: 'OverlayBackgroundDensity',
x20400090: 'OverlayMode', x20400090: 'OverlayMode',
x20400100: 'ThresholdDensity', x20400100: 'ThresholdDensity',
x20400500: 'ReferencedImageBoxSequence', x20400500: 'ReferencedImageBoxSequenceRetired',
x20500010: 'PresentationLUTSequence', x20500010: 'PresentationLUTSequence',
x20500020: 'PresentationLUTShape', x20500020: 'PresentationLUTShape',
x20500500: 'ReferencedPresentationLUTSequence', x20500500: 'ReferencedPresentationLUTSequence',
@ -2436,7 +2466,7 @@ let _dicomTagDescriptions = {
x21000140: 'DestinationAE', x21000140: 'DestinationAE',
x21000160: 'OwnerID', x21000160: 'OwnerID',
x21000170: 'NumberOfFilms', x21000170: 'NumberOfFilms',
x21000500: 'ReferencedPrintJobSequence', x21000500: 'ReferencedPrintJobSequencePullStoredPrint',
x21100010: 'PrinterStatus', x21100010: 'PrinterStatus',
x21100020: 'PrinterStatusInfo', x21100020: 'PrinterStatusInfo',
x21100030: 'PrinterName', x21100030: 'PrinterName',
@ -3081,7 +3111,7 @@ let _dicomTagDescriptions = {
x50xx200c: 'AudioSampleData', x50xx200c: 'AudioSampleData',
x50xx200e: 'AudioComments', x50xx200e: 'AudioComments',
x50xx2500: 'CurveLabel', x50xx2500: 'CurveLabel',
x50xx2600: 'ReferencedOverlaySequence', x50xx2600: 'CurveReferencedOverlaySequence',
x50xx2610: 'ReferencedOverlayGroup', x50xx2610: 'ReferencedOverlayGroup',
x50xx3000: 'CurveData', x50xx3000: 'CurveData',
x52009229: 'SharedFunctionalGroupsSequence', x52009229: 'SharedFunctionalGroupsSequence',
@ -3149,17 +3179,43 @@ let _dicomTagDescriptions = {
xfffee0dd: 'EndOfSequence' xfffee0dd: 'EndOfSequence'
}; };
// Safely copy tag descriptions to exported objects... // Safely populate DICOMTagDescriptions object
(function(_dicomTagDescriptions) { (function(initialTagDescriptionMap) {
const _hasOwn = Object.prototype.hasOwnProperty; const _hasOwn = Object.prototype.hasOwnProperty;
for (let tag in _dicomTagDescriptions) { const descriptionMap = DICOMTagDescriptions._descriptions;
if (_hasOwn.call(_dicomTagDescriptions, tag)) { for (let tag in initialTagDescriptionMap) {
dicomTagDescriptions[tag] = _dicomTagDescriptions[tag]; if (_hasOwn.call(initialTagDescriptionMap, tag)) {
if (tag in descriptionMap) {
// Skip in case the tag is duplicated...
console.info(`DICOMTagDescriptions: Duplicated tag ${tag}...`);
continue;
}
// Save keyword...
const keyword = initialTagDescriptionMap[tag];
// Create a description entry and freeze it...
const entry = Object.create(null);
entry.tag = tag;
entry.keyword = keyword;
Object.freeze(entry);
// Add tag references to entry...
descriptionMap[tag] = entry;
// Add keyword references to entry (if not present already)...
if (keyword in descriptionMap) {
const currentEntry = descriptionMap[keyword];
console.info(`DICOMTagDescriptions: Using <${currentEntry.tag},${currentEntry.keyword}> instead of <${entry.tag},${entry.keyword}> for keyword "${keyword}"...`);
} else {
descriptionMap[keyword] = entry;
} }
} }
}(_dicomTagDescriptions)); }
// Freeze internal description map (nothing should be changed in this object afterwords)...
Object.freeze(descriptionMap);
}(initialTagDescriptionMap));
// Discard original object... // Freeze exported object...
_dicomTagDescriptions = null; Object.freeze(DICOMTagDescriptions);
export { dicomTagDescriptions }; // Discard original map...
initialTagDescriptionMap = null;
export { DICOMTagDescriptions };