From 660b828f4b0e1194f074272e328cbc8482a4d288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elo=C3=ADzio=20Salgado?= Date: Mon, 16 Jan 2017 19:29:49 -0200 Subject: [PATCH] Creating ohif:metadata package with metadata classes and adding it to the viewers --- LesionTracker/.meteor/packages | 1 + LesionTracker/.meteor/versions | 1 + OHIFViewer/.meteor/packages | 1 + OHIFViewer/.meteor/versions | 5 +- .../toolbarSection/toolbarSection.js | 11 ++-- OHIFViewer/client/components/viewer/viewer.js | 5 +- Packages/ohif-hanging-protocols/package.js | 1 - .../client/OHIFInstanceMetadata.js | 58 +++++++++++++++++++ .../client/OHIFSeriesMetadata.js | 26 +++++++++ .../ohif-metadata/client/OHIFStudyMetadata.js | 25 ++++++++ Packages/ohif-metadata/client/index.js | 10 ++++ Packages/ohif-metadata/main.js | 39 +++++++++++++ Packages/ohif-metadata/namespace.js | 23 ++++++++ Packages/ohif-metadata/package.js | 16 +++++ .../client/lib/getStudyMetadata.js | 4 +- .../server/services/dimse/retrieveMetadata.js | 2 +- .../services/remote/retrieveMetadata.js | 2 +- .../server/services/wado/retrieveMetadata.js | 2 +- Packages/ohif-viewerbase/client/index.js | 4 ++ .../client/lib/StackManager.js | 6 +- .../lib/classes/metadata/InstanceMetadata.js | 15 ++++- .../client/lib/createStacks.js | 4 +- .../client/lib}/dicomTagDescriptions.js | 4 +- .../client/lib/getSortedData.js | 5 +- 24 files changed, 242 insertions(+), 28 deletions(-) create mode 100644 Packages/ohif-metadata/client/OHIFInstanceMetadata.js create mode 100644 Packages/ohif-metadata/client/OHIFSeriesMetadata.js create mode 100644 Packages/ohif-metadata/client/OHIFStudyMetadata.js create mode 100644 Packages/ohif-metadata/client/index.js create mode 100644 Packages/ohif-metadata/main.js create mode 100644 Packages/ohif-metadata/namespace.js create mode 100644 Packages/ohif-metadata/package.js rename Packages/{ohif-hanging-protocols/both => ohif-viewerbase/client/lib}/dicomTagDescriptions.js (99%) diff --git a/LesionTracker/.meteor/packages b/LesionTracker/.meteor/packages index 62628e2cc..96b1071bb 100644 --- a/LesionTracker/.meteor/packages +++ b/LesionTracker/.meteor/packages @@ -35,6 +35,7 @@ ohif:dicom-services ohif:hanging-protocols ohif:user-management ohif:lesiontracker +ohif:metadata accounts-base@1.2.14 accounts-password@1.3.3 diff --git a/LesionTracker/.meteor/versions b/LesionTracker/.meteor/versions index 3194fe8bd..7f68afcf0 100644 --- a/LesionTracker/.meteor/versions +++ b/LesionTracker/.meteor/versions @@ -95,6 +95,7 @@ ohif:hanging-protocols@0.0.1 ohif:lesiontracker@0.0.1 ohif:log@0.0.1 ohif:measurements@0.0.1 +ohif:metadata@0.0.1 ohif:study-list@0.0.1 ohif:user-management@0.0.1 ohif:viewerbase@0.0.1 diff --git a/OHIFViewer/.meteor/packages b/OHIFViewer/.meteor/packages index c32dee8ff..6e3d92e8e 100644 --- a/OHIFViewer/.meteor/packages +++ b/OHIFViewer/.meteor/packages @@ -13,6 +13,7 @@ ohif:study-list ohif:dicom-services ohif:hanging-protocols # ohif:user-management +ohif:metadata twbs:bootstrap http@1.2.10 diff --git a/OHIFViewer/.meteor/versions b/OHIFViewer/.meteor/versions index 0830faba9..e8737cb63 100644 --- a/OHIFViewer/.meteor/versions +++ b/OHIFViewer/.meteor/versions @@ -20,10 +20,6 @@ caching-compiler@1.1.9 caching-html-compiler@1.0.7 callback-hook@1.0.10 check@1.2.4 -clinical:router@2.0.17 -clinical:router-location@2.0.14 -clinical:router-middleware-stack@2.0.13 -clinical:router-url@2.0.15 coffeescript@1.11.1_4 ddp@1.2.5 ddp-client@1.3.2 @@ -81,6 +77,7 @@ ohif:design@0.0.1 ohif:dicom-services@0.0.1 ohif:hanging-protocols@0.0.1 ohif:log@0.0.1 +ohif:metadata@0.0.1 ohif:study-list@0.0.1 ohif:viewerbase@0.0.1 ohif:wadoproxy@0.0.1 diff --git a/OHIFViewer/client/components/toolbarSection/toolbarSection.js b/OHIFViewer/client/components/toolbarSection/toolbarSection.js index a423b9de7..ba4acb87e 100644 --- a/OHIFViewer/client/components/toolbarSection/toolbarSection.js +++ b/OHIFViewer/client/components/toolbarSection/toolbarSection.js @@ -1,7 +1,8 @@ -import { OHIF } from 'meteor/ohif:core'; import { Template } from 'meteor/templating'; import { $ } from 'meteor/jquery'; -import { Viewerbase } from 'meteor/ohif:viewerbase'; + +import { OHIF } from 'meteor/ohif:core'; +import 'meteor/ohif:viewerbase'; Template.toolbarSection.onCreated(() => { const instance = Template.instance(); @@ -182,7 +183,7 @@ Template.toolbarSection.helpers({ title: 'CINE', classes: 'imageViewerCommand', iconClasses: 'fa fa-youtube-play', - disableFunction: Viewerbase.viewportUtils.hasMultipleFrames + disableFunction: OHIF.viewerbase.viewportUtils.hasMultipleFrames }); } @@ -232,11 +233,11 @@ Template.toolbarSection.onRendered(function() { instance.$('#layout').dropdown(); if (OHIF.uiSettings.displayEchoUltrasoundWorkflow) { - Viewerbase.viewportUtils.toggleCineDialog(); + toggleCineDialog(); } // Set disabled/enabled tool buttons that are set in toolManager - const states = Viewerbase.toolManager.getToolDefaultStates(); + const states = OHIF.viewerbase.toolManager.getToolDefaultStates(); const disabledToolButtons = states.disabledToolButtons; const allToolbarButtons = $('#toolbar').find('button'); if (disabledToolButtons && disabledToolButtons.length > 0) { diff --git a/OHIFViewer/client/components/viewer/viewer.js b/OHIFViewer/client/components/viewer/viewer.js index ada9b6885..08d69725c 100644 --- a/OHIFViewer/client/components/viewer/viewer.js +++ b/OHIFViewer/client/components/viewer/viewer.js @@ -1,5 +1,6 @@ import { OHIF } from 'meteor/ohif:core'; -import { Viewerbase } from 'meteor/ohif:viewerbase'; +import 'meteor/ohif:viewerbase'; +import 'meteor/ohif:metadata'; OHIF.viewer = OHIF.viewer || {}; OHIF.viewer.defaultTool = 'wwwc'; @@ -54,6 +55,8 @@ Template.viewer.onCreated(() => { instance.data.studies.forEach(study => { study.selected = true; study.displaySets = Viewerbase.createStacks(study); + // const studyMetadata = new OHIF.metadata.StudyMetadata(study); + // study.displaySets = OHIF.viewerbase.sortingManager.getDisplaySets(studyMetadata); ViewerStudies.insert(study); ViewerData[contentId].studyInstanceUids.push(study.studyInstanceUid); }); diff --git a/Packages/ohif-hanging-protocols/package.js b/Packages/ohif-hanging-protocols/package.js index f6c569e67..b9ec6ba61 100755 --- a/Packages/ohif-hanging-protocols/package.js +++ b/Packages/ohif-hanging-protocols/package.js @@ -26,7 +26,6 @@ Package.onUse(function(api) { // Both client & server api.addFiles('both/namespace.js'); api.addFiles('both/collections.js'); - //api.addFiles('both/dicomTagDescriptions.js'); api.addFiles('both/schema.js'); api.addFiles('both/hardcodedData.js'); api.addFiles('both/testData.js'); diff --git a/Packages/ohif-metadata/client/OHIFInstanceMetadata.js b/Packages/ohif-metadata/client/OHIFInstanceMetadata.js new file mode 100644 index 000000000..7996f488a --- /dev/null +++ b/Packages/ohif-metadata/client/OHIFInstanceMetadata.js @@ -0,0 +1,58 @@ +import { Viewerbase } from 'meteor/ohif:viewerbase'; + +const InstanceMetadata = Viewerbase.metadata.InstanceMetadata; + +export class OHIFInstanceMetadata extends InstanceMetadata { + + /** + * @param {Object} Instance object. + */ + constructor(data) { + super(data); + this.init(); + } + + init() { + const data = this.getData(); + // set protected property... + this._sopInstanceUID = data.sopInstanceUid; + } + + // Override + getRawValue(tagOrProperty, defaultValue) { + const propertyName = OHIFInstanceMetadata.getPropertyName(tagOrProperty); + + const data = this.getData(); + const rawValue = data[propertyName]; + + return rawValue !== void 0 ? rawValue : defaultValue; + } + + // Override + tagExists(tagOrProperty) { + const propertyName = OHIFInstanceMetadata.getPropertyName(tagOrProperty); + + const data = this.getData(); + + return (propertyName in data); + } + + /** + * Static methods + */ + + static getPropertyName(tagOrProperty) { + const tagInfo = InstanceMetadata.getTagInfo(tagOrProperty); + + if(tagInfo.propertyName === null) { + return; + } + + let propertyName = tagInfo.propertyName.charAt(0).toLowerCase() + tagInfo.propertyName.substr(1); + // TODO: Improve this: change retriveMetadata to use dicom standard names (see dicomTagDescriptions.js) + propertyName = propertyName.replace(/^sop/, 'SOP'); + propertyName = propertyName.replace(/uid$/i, 'UID'); + + return propertyName; + } +} diff --git a/Packages/ohif-metadata/client/OHIFSeriesMetadata.js b/Packages/ohif-metadata/client/OHIFSeriesMetadata.js new file mode 100644 index 000000000..81f322a0e --- /dev/null +++ b/Packages/ohif-metadata/client/OHIFSeriesMetadata.js @@ -0,0 +1,26 @@ +import { Viewerbase } from 'meteor/ohif:viewerbase'; +import { OHIFInstanceMetadata } from './OHIFInstanceMetadata'; + +export class OHIFSeriesMetadata extends Viewerbase.metadata.SeriesMetadata { + + /** + * @param {Object} Series object. + */ + constructor(data) { + super(data); + this.init(); + } + + init() { + const data = this.getData(); + + // set protected property... + this._seriesInstanceUID = data.seriesInstanceUid; + // populate internal list of instances... + data.instances.forEach(instance => { + this.addInstance(new OHIFInstanceMetadata(instance)); + }); + } + +} + diff --git a/Packages/ohif-metadata/client/OHIFStudyMetadata.js b/Packages/ohif-metadata/client/OHIFStudyMetadata.js new file mode 100644 index 000000000..8899e6914 --- /dev/null +++ b/Packages/ohif-metadata/client/OHIFStudyMetadata.js @@ -0,0 +1,25 @@ +import { Viewerbase } from 'meteor/ohif:viewerbase'; +import { OHIFSeriesMetadata } from './OHIFSeriesMetadata'; + +export class OHIFStudyMetadata extends Viewerbase.metadata.StudyMetadata { + + /** + * @param {Object} Study object. + */ + constructor(data) { + super(data); + this.init(); + } + + init() { + const data = this.getData(); + + // set protected property... + this._studyInstanceUID = data.studyInstanceUid; + // populate internal list of series... + data.seriesList.forEach(series => { + this.addSeries(new OHIFSeriesMetadata(series)); + }); + } + +} diff --git a/Packages/ohif-metadata/client/index.js b/Packages/ohif-metadata/client/index.js new file mode 100644 index 000000000..1ccd601e1 --- /dev/null +++ b/Packages/ohif-metadata/client/index.js @@ -0,0 +1,10 @@ +import { Metadata } from '../namespace'; + +// OHIFStudyMetadata, OHIFSeriesMetadata, OHIFInstanceMetadata +import { OHIFStudyMetadata } from './OHIFStudyMetadata'; +import { OHIFSeriesMetadata } from './OHIFSeriesMetadata'; +import { OHIFInstanceMetadata } from './OHIFInstanceMetadata'; + +Metadata.StudyMetadata = OHIFStudyMetadata; +Metadata.SeriesMetadata = OHIFSeriesMetadata; +Metadata.InstanceMetadata = OHIFInstanceMetadata; \ No newline at end of file diff --git a/Packages/ohif-metadata/main.js b/Packages/ohif-metadata/main.js new file mode 100644 index 000000000..4456cc3a4 --- /dev/null +++ b/Packages/ohif-metadata/main.js @@ -0,0 +1,39 @@ +/** + * Import namespace... + */ + +import { OHIF, Metadata } from './namespace.js'; + +/** + * Import scripts that will populate the Metadata namespace as a side effect only import. This is effectively the public API... + */ + +import './client/'; // which is actually: import './client/index.js'; + +/** + * Export relevant objects... + * + * With the following export it becomes possible to import "OHIF" from "ohif:core" and "Metadata" + * from "ohif:metadata" using a single import (a shorthand), like this: + * + * import { OHIF } from 'meteor/ohif:metadata'; + * + * Which is equivalent to: + * + * import { OHIF } from 'meteor/ohif:core'; + * import 'meteor/ohif:metadata'; + * + * The second (extended) format should be used when other OHIF packages are also to be used within + * the current module. This makes it explicit that the following imports will populate their + * respective namespaces within the to "OHIF" namespace. Example: + * + * import { OHIF } from 'meteor/ohif:core'; + * import 'meteor/ohif:metadata'; + * import 'meteor/ohif:hanging-protocols'; + * [ ... ] + * OHIF.metadata.setActiveViewport(...); + * OHIF.hangingprotocols.doSomething(...); + * + */ + +export { OHIF, Metadata }; diff --git a/Packages/ohif-metadata/namespace.js b/Packages/ohif-metadata/namespace.js new file mode 100644 index 000000000..a17212475 --- /dev/null +++ b/Packages/ohif-metadata/namespace.js @@ -0,0 +1,23 @@ +/** + * Import main dependency... + */ + +import { OHIF } from 'meteor/ohif:core'; + +/** + * Create Metadata namespace... + */ + +const Metadata = {}; + +/** + * Append Metadata namespace to OHIF namespace... + */ + +OHIF.metadata = Metadata; + +/** + * Export relevant objects... + */ + +export { OHIF, Metadata }; diff --git a/Packages/ohif-metadata/package.js b/Packages/ohif-metadata/package.js new file mode 100644 index 000000000..1e69589cd --- /dev/null +++ b/Packages/ohif-metadata/package.js @@ -0,0 +1,16 @@ +Package.describe({ + name: 'ohif:metadata', + summary: 'OHIF Metadata classes', + version: '0.0.1' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.4'); + + api.use('ecmascript'); + + api.use('ohif:core'); + api.use('ohif:viewerbase'); + + api.mainModule('main.js', 'client'); +}); diff --git a/Packages/ohif-study-list/client/lib/getStudyMetadata.js b/Packages/ohif-study-list/client/lib/getStudyMetadata.js index e141f0ff6..13c7fa940 100644 --- a/Packages/ohif-study-list/client/lib/getStudyMetadata.js +++ b/Packages/ohif-study-list/client/lib/getStudyMetadata.js @@ -1,5 +1,5 @@ import { OHIF } from 'meteor/ohif:core'; -import { Viewerbase } from 'meteor/ohif:viewerbase'; +import 'meteor/ohif:viewerbase'; // Define the StudyMetaData object. This is used as a cache // to store study meta data information to prevent unnecessary @@ -56,7 +56,7 @@ getStudyMetadata = function(studyInstanceUid, doneCallback, failCallback) { // Once we have retrieved the data, we sort the series' by series // and instance number in ascending order - Viewerbase.sortStudy(study); + OHIF.viewerbase.sortStudy(study); // Add additional metadata to our study from the studylist var studylistStudy = StudyListStudies.findOne({ diff --git a/Packages/ohif-study-list/server/services/dimse/retrieveMetadata.js b/Packages/ohif-study-list/server/services/dimse/retrieveMetadata.js index e4f4c5ee6..1c2d9f0bc 100755 --- a/Packages/ohif-study-list/server/services/dimse/retrieveMetadata.js +++ b/Packages/ohif-study-list/server/services/dimse/retrieveMetadata.js @@ -119,7 +119,7 @@ function resultDataToStudyMetadata(studyInstanceUid, resultData) { laterality: instance[0x00200062], viewPosition: instance[0x00185101], acquisitionDatetime: instance[0x0008002A], - numFrames: parseFloat(instance[0x00280008]), + numberOfFrames: parseFloat(instance[0x00280008]), frameIncrementPointer: getValue(instance[0x00280009]), frameTime: parseFloat(instance[0x00181063]), frameTimeVector: parseFloatArray(instance[0x00181065]), diff --git a/Packages/ohif-study-list/server/services/remote/retrieveMetadata.js b/Packages/ohif-study-list/server/services/remote/retrieveMetadata.js index 949703936..b999992cf 100755 --- a/Packages/ohif-study-list/server/services/remote/retrieveMetadata.js +++ b/Packages/ohif-study-list/server/services/remote/retrieveMetadata.js @@ -97,7 +97,7 @@ function resultDataToStudyMetadata(server, studyInstanceUid, resultData) { laterality: remoteGetValue(instance['0020,0062']), viewPosition: remoteGetValue(instance['0018,5101']), acquisitionDatetime: remoteGetValue(instance['0008,002A']), - numFrames: parseFloat(remoteGetValue(instance['0028,0008'])), + numberOfFrames: parseFloat(remoteGetValue(instance['0028,0008'])), frameIncrementPointer: remoteGetValue(instance['0028,0009']), frameTime: parseFloat(remoteGetValue(instance['0018,1063'])), frameTimeVector: parseFloatArray(remoteGetValue(instance['0018,1065'])) diff --git a/Packages/ohif-study-list/server/services/wado/retrieveMetadata.js b/Packages/ohif-study-list/server/services/wado/retrieveMetadata.js index 528a0fcb8..812a2be96 100644 --- a/Packages/ohif-study-list/server/services/wado/retrieveMetadata.js +++ b/Packages/ohif-study-list/server/services/wado/retrieveMetadata.js @@ -109,7 +109,7 @@ function resultDataToStudyMetadata(server, studyInstanceUid, resultData) { laterality: DICOMWeb.getString(instance['00200062']), viewPosition: DICOMWeb.getString(instance['00185101']), acquisitionDatetime: DICOMWeb.getString(instance['0008002A']), - numFrames: DICOMWeb.getNumber(instance['00280008']), + numberOfFrames: DICOMWeb.getNumber(instance['00280008']), frameIncrementPointer: DICOMWeb.getAttribute(instance['00280009']), frameTime: DICOMWeb.getNumber(instance['00181063']), frameTimeVector: parseFloatArray(DICOMWeb.getString(instance['00181065'])), diff --git a/Packages/ohif-viewerbase/client/index.js b/Packages/ohif-viewerbase/client/index.js index 3f60af6ae..716bef442 100644 --- a/Packages/ohif-viewerbase/client/index.js +++ b/Packages/ohif-viewerbase/client/index.js @@ -163,6 +163,10 @@ Viewerbase.helpers = helpers; import { sopClassDictionary } from './lib/sopClassDictionary'; Viewerbase.sopClassDictionary = sopClassDictionary; +// dicomTagDescriptions +import { dicomTagDescriptions } from './lib/dicomTagDescriptions'; +Viewerbase.dicomTagDescriptions = dicomTagDescriptions; + /** * Exported Classes */ diff --git a/Packages/ohif-viewerbase/client/lib/StackManager.js b/Packages/ohif-viewerbase/client/lib/StackManager.js index cca4d9706..8bddcf0c0 100644 --- a/Packages/ohif-viewerbase/client/lib/StackManager.js +++ b/Packages/ohif-viewerbase/client/lib/StackManager.js @@ -30,10 +30,10 @@ function createAndAddStack(stackMap, study, displaySet) { imageIndex: imageIndex + 1 }; - const numFrames = image.numFrames; - if (numFrames > 1) { + const numberOfFrames = image.numberOfFrames; + if (numberOfFrames > 1) { OHIF.log.info('Multiframe image detected'); - for (let i = 0; i < numFrames; i++) { + for (let i = 0; i < numberOfFrames; i++) { metaData.frame = i; imageId = getImageId(image, i); imageIds.push(imageId); diff --git a/Packages/ohif-viewerbase/client/lib/classes/metadata/InstanceMetadata.js b/Packages/ohif-viewerbase/client/lib/classes/metadata/InstanceMetadata.js index 37c259bfc..ef18ffc4a 100644 --- a/Packages/ohif-viewerbase/client/lib/classes/metadata/InstanceMetadata.js +++ b/Packages/ohif-viewerbase/client/lib/classes/metadata/InstanceMetadata.js @@ -1,9 +1,10 @@ import { Metadata } from './Metadata'; +import { dicomTagDescriptions } from '../../dicomTagDescriptions'; const UNDEFINED = 'undefined'; const NUMBER = 'number'; const STRING = 'string'; -const REGEX_TAG = /^x[0-9a-f]{8}$/; +const REGEX_TAG = /^x[0-9a-fx]{8}$/; export class InstanceMetadata extends Metadata { @@ -132,7 +133,17 @@ export class InstanceMetadata extends Metadata { propertyName = tagOrProperty; } - // @TODO: map tagName to propertyName and vice versa + // It's a property + if (tagName === null) { + for (let tag in dicomTagDescriptions) { + if (dicomTagDescriptions[tag] === propertyName) { + tagName = tag; + break; + } + } + } else if (propertyName === null) { + propertyName = dicomTagDescriptions[tagName] || null; + } return { tagName, propertyName }; } diff --git a/Packages/ohif-viewerbase/client/lib/createStacks.js b/Packages/ohif-viewerbase/client/lib/createStacks.js index 86297f8ef..50b4852e1 100644 --- a/Packages/ohif-viewerbase/client/lib/createStacks.js +++ b/Packages/ohif-viewerbase/client/lib/createStacks.js @@ -44,7 +44,7 @@ function createStacks(study) { displaySet.setAttributes({ isClip: true, studyInstanceUid: study.studyInstanceUid, // Include the study instance Uid for drag/drop purposes - numImageFrames: instance.numFrames, // Override the default value of instances.length + numImageFrames: instance.numberOfFrames, // Override the default value of instances.length instanceNumber: instance.instanceNumber, // Include the instance number acquisitionDatetime: instance.acquisitionDatetime // Include the acquisition datetime }); @@ -110,7 +110,7 @@ function isSingleImageModality(modality) { } function isMultiFrame(instance) { - return instance.numFrames > 1; + return instance.numberOfFrames > 1; } /** diff --git a/Packages/ohif-hanging-protocols/both/dicomTagDescriptions.js b/Packages/ohif-viewerbase/client/lib/dicomTagDescriptions.js similarity index 99% rename from Packages/ohif-hanging-protocols/both/dicomTagDescriptions.js rename to Packages/ohif-viewerbase/client/lib/dicomTagDescriptions.js index 1c56455b6..4e6e13925 100644 --- a/Packages/ohif-hanging-protocols/both/dicomTagDescriptions.js +++ b/Packages/ohif-viewerbase/client/lib/dicomTagDescriptions.js @@ -1,4 +1,4 @@ -HP.tagDescriptions = { +export const dicomTagDescriptions = { x00020000: 'FileMetaInfoGroupLength', x00020001: 'FileMetaInfoVersion', x00020002: 'MediaStorageSOPClassUID', @@ -3145,4 +3145,4 @@ HP.tagDescriptions = { xfffee000: 'StartOfItem', xfffee00d: 'EndOfItems', xfffee0dd: 'EndOfSequence' -}; +}; \ No newline at end of file diff --git a/Packages/ohif-viewerbase/client/lib/getSortedData.js b/Packages/ohif-viewerbase/client/lib/getSortedData.js index 0cca2285f..89663ebb9 100644 --- a/Packages/ohif-viewerbase/client/lib/getSortedData.js +++ b/Packages/ohif-viewerbase/client/lib/getSortedData.js @@ -126,7 +126,6 @@ const stackOfInstancesToDisplaySets = (sopInstances, seriesView) => { const groups = _.groupBy(sopInstances, sopInstance => { // Create an empty string to store our key let result = ''; - const instanceView = sopInstance.getData(); // For each rule, find out if the tag exists seriesSplittingRules.forEach(rule => { @@ -134,8 +133,8 @@ const stackOfInstancesToDisplaySets = (sopInstances, seriesView) => { result += ';' // If the tag exists, concatenate its value to our key - if (instanceView.exists(rule.tag)) { - result += instanceView.raw(rule.tag); + if (sopInstance.tagExists(rule.tag)) { + result += sopInstance.getRawValue(rule.tag); } });