diff --git a/extensions/cornerstone/src/components/OHIFCornerstoneViewportOverlay.js b/extensions/cornerstone/src/components/OHIFCornerstoneViewportOverlay.js
index 72a945625..d344efec3 100644
--- a/extensions/cornerstone/src/components/OHIFCornerstoneViewportOverlay.js
+++ b/extensions/cornerstone/src/components/OHIFCornerstoneViewportOverlay.js
@@ -45,7 +45,7 @@ class OHIFCornerstoneViewportOverlay extends PureComponent {
imageId: PropTypes.string.isRequired,
imageIndex: PropTypes.number.isRequired,
stackSize: PropTypes.number.isRequired,
- inconsistencyWarnings: PropTypes.array.isRequired,
+ inconsistencyWarnings: PropTypes.array,
SRLabels: PropTypes.array,
};
diff --git a/extensions/debugging/src/DebugReportModal.js b/extensions/debugging/src/DebugReportModal.js
index c8acec293..2727f4fdd 100644
--- a/extensions/debugging/src/DebugReportModal.js
+++ b/extensions/debugging/src/DebugReportModal.js
@@ -89,10 +89,10 @@ const DubugReportModal = ({
Object.keys(viewportSpecificData).forEach(viewportIndex => {
const displaySet = viewportSpecificData[viewportIndex];
- const [
- referencedDisplaySetsRef,
- referencedDisplaySetsCount,
- ] = _getReferencedSeriesInstanceUIDsString(displaySet, 'SEG');
+ const [referencedDisplaySetsRef] = _getReferencedSeriesInstanceUIDsString(
+ displaySet,
+ 'SEG'
+ );
const [row, column] = _viewportIndexToViewportPosition(
viewportIndex,
@@ -106,10 +106,27 @@ const DubugReportModal = ({
Object.keys(viewportSpecificData).forEach(viewportIndex => {
const displaySet = viewportSpecificData[viewportIndex];
- const [
- referencedDisplaySetsRef,
- referencedDisplaySetsCount,
- ] = _getReferencedSeriesInstanceUIDsString(displaySet, 'RTSTRUCT');
+ const [referencedDisplaySetsRef] = _getReferencedSeriesInstanceUIDsString(
+ displaySet,
+ 'RTSTRUCT'
+ );
+
+ const [row, column] = _viewportIndexToViewportPosition(
+ viewportIndex,
+ numColumns
+ );
+
+ body += `[${row},${column}]\t${referencedDisplaySetsRef}\n`;
+ });
+
+ body += '== ReferencedSRSeriesInstanceUIDs ==\n';
+
+ Object.keys(viewportSpecificData).forEach(viewportIndex => {
+ const displaySet = viewportSpecificData[viewportIndex];
+ const [referencedDisplaySetsRef] = _getReferencedSeriesInstanceUIDsString(
+ displaySet,
+ 'SR'
+ );
const [row, column] = _viewportIndexToViewportPosition(
viewportIndex,
@@ -261,11 +278,15 @@ const getLayout = viewports => {
| ReferencedSEGSeriesInstanceUIDs |
- {getReferencedSEGSeriesInstanceUIDsPerRow(viewports)}
+ {getReferencedSeriesInstanceUIDsPerRow(viewports, 'SEG')}
| ReferencedRTSTRUCTSeriesInstanceUIDs |
- {getReferencedRTSTRUCTSeriesInstanceUIDsPerRow(viewports)}
+ {getReferencedSeriesInstanceUIDsPerRow(viewports, 'RTSTRUCT')}
+
+ | ReferencedSRSeriesInstanceUIDs |
+
+ {getReferencedSeriesInstanceUIDsPerRow(viewports, 'SR')}
);
};
@@ -351,7 +372,7 @@ const _getReferencedSeriesInstanceUIDsString = (displaySet, Modality) => {
return [referencedDisplaySetsRef, referencedDisplaySetsCount];
};
-const getReferencedSEGSeriesInstanceUIDsPerRow = viewports => {
+const getReferencedSeriesInstanceUIDsPerRow = (viewports, Modality) => {
const { viewportSpecificData, numColumns } = viewports;
// NOTE viewportSpecificData is actually an object with numerical keys.
@@ -360,43 +381,7 @@ const getReferencedSEGSeriesInstanceUIDsPerRow = viewports => {
const [
referencedDisplaySetsRef,
referencedDisplaySetsCount,
- ] = _getReferencedSeriesInstanceUIDsString(displaySet, 'SEG');
-
- const [row, column] = _viewportIndexToViewportPosition(
- viewportIndex,
- numColumns
- );
-
- if (referencedDisplaySetsCount > 1) {
- return (
-
- | {`[${row},${column}]`} |
-
- {referencedDisplaySetsRef}
- |
-
- );
- } else {
- return (
-
- | {`[${row},${column}]`} |
- {referencedDisplaySetsRef} |
-
- );
- }
- });
-};
-
-const getReferencedRTSTRUCTSeriesInstanceUIDsPerRow = viewports => {
- const { viewportSpecificData, numColumns } = viewports;
-
- // NOTE viewportSpecificData is actually an object with numerical keys.
- return Object.keys(viewportSpecificData).map(viewportIndex => {
- const displaySet = viewportSpecificData[viewportIndex];
- const [
- referencedDisplaySetsRef,
- referencedDisplaySetsCount,
- ] = _getReferencedSeriesInstanceUIDsString(displaySet, 'RTSTRUCT');
+ ] = _getReferencedSeriesInstanceUIDsString(displaySet, Modality);
const [row, column] = _viewportIndexToViewportPosition(
viewportIndex,
diff --git a/extensions/dicom-html/src/OHIFDicomHtmlSopClassHandler.js b/extensions/dicom-html/src/OHIFDicomHtmlSopClassHandler.js
index 5a1844f67..06634dc4e 100644
--- a/extensions/dicom-html/src/OHIFDicomHtmlSopClassHandler.js
+++ b/extensions/dicom-html/src/OHIFDicomHtmlSopClassHandler.js
@@ -1,4 +1,4 @@
-import { MODULE_TYPES, utils } from '@ohif/core';
+import { MODULE_TYPES, utils, metadata } from '@ohif/core';
// TODO: Should probably use dcmjs for this
const SOP_CLASS_UIDS = {
@@ -10,7 +10,7 @@ const SOP_CLASS_UIDS = {
MAMMOGRAPHY_CAD_SR: '1.2.840.10008.5.1.4.1.1.88.50',
CHEST_CAD_SR: '1.2.840.10008.5.1.4.1.1.88.65',
X_RAY_RADIATION_DOSE_SR: '1.2.840.10008.5.1.4.1.1.88.67',
- ACQUISITION_CONTEXT_SR_STORAGE: '1.2.840.10008.5.1.4.1.1.88.71'
+ ACQUISITION_CONTEXT_SR_STORAGE: '1.2.840.10008.5.1.4.1.1.88.71',
};
const sopClassUIDs = Object.values(SOP_CLASS_UIDS);
@@ -32,7 +32,7 @@ const OHIFDicomHtmlSopClassHandler = {
SeriesTime,
} = metadata;
- return {
+ const srDisplaySet = {
plugin: 'html',
Modality: 'SR',
displaySetInstanceUID: utils.guid(),
@@ -49,7 +49,15 @@ const OHIFDicomHtmlSopClassHandler = {
authorizationHeaders,
sopClassUids: sopClassUIDs,
images: series._instances,
+ isDerived: true,
+ referencedDisplaySets: [],
};
+
+ srDisplaySet.getSourceDisplaySet = function() {
+ return srDisplaySet.referencedDisplaySets;
+ };
+
+ return srDisplaySet;
},
};
diff --git a/platform/core/src/DICOMSR/SCOORD3D/parseSCOORD3D.js b/platform/core/src/DICOMSR/SCOORD3D/parseSCOORD3D.js
index ab5a44152..c4c96fe52 100644
--- a/platform/core/src/DICOMSR/SCOORD3D/parseSCOORD3D.js
+++ b/platform/core/src/DICOMSR/SCOORD3D/parseSCOORD3D.js
@@ -139,6 +139,10 @@ const checkIfCanAddMeasurementsToDisplaySet = (
coord.ReferencedSOPSequence.ReferencedSOPInstanceUID
);
if (imageIndex > -1) {
+ if (!srDisplaySet.referencedDisplaySets.includes(imageDisplaySet)) {
+ srDisplaySet.referencedDisplaySets.push(imageDisplaySet);
+ }
+
const imageId = imageIds[imageIndex];
const imageMetadata = images[imageIndex].getData().metadata;
diff --git a/platform/core/src/classes/metadata/StudyMetadata.js b/platform/core/src/classes/metadata/StudyMetadata.js
index f99651937..ad881b18a 100644
--- a/platform/core/src/classes/metadata/StudyMetadata.js
+++ b/platform/core/src/classes/metadata/StudyMetadata.js
@@ -350,6 +350,19 @@ class StudyMetadata extends Metadata {
referencedSeriesInstanceUID
);
} else {
+ const filteredReferencedDisplaySets = displaySet.referencedDisplaySets.filter(
+ referencedDisplaySet =>
+ referencedDisplaySet.SeriesInstanceUID ===
+ referencedSeriesInstanceUID
+ );
+
+ if (
+ filteredReferencedDisplaySets &&
+ filteredReferencedDisplaySets.length !== 0
+ ) {
+ return true;
+ }
+
return false;
}
}
diff --git a/platform/viewer/src/connectedComponents/ConnectedStudyBrowser.js b/platform/viewer/src/connectedComponents/ConnectedStudyBrowser.js
index 06d2cc04f..6e3f3c150 100644
--- a/platform/viewer/src/connectedComponents/ConnectedStudyBrowser.js
+++ b/platform/viewer/src/connectedComponents/ConnectedStudyBrowser.js
@@ -48,7 +48,7 @@ const mapDispatchToProps = (dispatch, ownProps) => {
);
document.dispatchEvent(selectionFired);
});
- } else {
+ } else if (Modality !== 'SR') {
displaySet = displaySet.getSourceDisplaySet(ownProps.studyMetadata);
}
diff --git a/platform/viewer/src/connectedComponents/Viewer.js b/platform/viewer/src/connectedComponents/Viewer.js
index 41cfaf5e3..2a22568e9 100644
--- a/platform/viewer/src/connectedComponents/Viewer.js
+++ b/platform/viewer/src/connectedComponents/Viewer.js
@@ -262,7 +262,11 @@ class Viewer extends Component {
const { currentTimepointId } = this;
this.timepointApi.retrieveTimepoints({ PatientID });
- this.measurementApi.retrieveMeasurements(PatientID, [currentTimepointId]);
+ this.measurementApi
+ .retrieveMeasurements(PatientID, [currentTimepointId])
+ .then(() => {
+ this._updateThumbnails();
+ });
}
}
@@ -608,9 +612,30 @@ const _isDisplaySetActive = function(
if (
displaySet.Modality !== 'SEG' &&
displaySet.Modality !== 'RTSTRUCT' &&
- displaySet.Modality !== 'RTDOSE'
+ displaySet.Modality !== 'RTDOSE' &&
+ displaySet.Modality !== 'SR'
) {
active = activeDisplaySetInstanceUID === displaySetInstanceUID;
+ } else if (displaySet.Modality === 'SR') {
+ active = activeDisplaySetInstanceUID === displaySetInstanceUID;
+
+ if (!active && displaySet.getSourceDisplaySet) {
+ const referencedDisplaySet = displaySet.getSourceDisplaySet(
+ studies,
+ false
+ );
+ if (referencedDisplaySet && referencedDisplaySet.length !== 0) {
+ for (let i = 0; i < referencedDisplaySet.length; i++) {
+ if (
+ referencedDisplaySet[i].displaySetInstanceUID ===
+ activeDisplaySetInstanceUID
+ ) {
+ active = true;
+ break;
+ }
+ }
+ }
+ }
} else if (displaySet.getSourceDisplaySet) {
if (displaySet.Modality === 'SEG') {
const { referencedDisplaySet } = displaySet.getSourceDisplaySet(
diff --git a/platform/viewer/src/connectedComponents/ViewerMain.js b/platform/viewer/src/connectedComponents/ViewerMain.js
index 6b0a7b8b9..d53881bdf 100644
--- a/platform/viewer/src/connectedComponents/ViewerMain.js
+++ b/platform/viewer/src/connectedComponents/ViewerMain.js
@@ -173,7 +173,7 @@ class ViewerMain extends Component {
);
document.dispatchEvent(selectionFired);
});
- } else {
+ } else if (Modality !== 'SR') {
displaySet = displaySet.getSourceDisplaySet(this.props.studies);
}