89 lines
2.4 KiB
JavaScript
89 lines
2.4 KiB
JavaScript
import setActiveLabelmap from './utils/setActiveLabelMap';
|
|
import { classes } from '@ohif/core';
|
|
|
|
const { ImageSet } = classes;
|
|
|
|
export default function getSourceDisplaySet(studies, segDisplaySet) {
|
|
const referencedDisplaySet = _getReferencedDisplaySet(segDisplaySet, studies);
|
|
|
|
setActiveLabelmap(referencedDisplaySet, studies, segDisplaySet);
|
|
|
|
return referencedDisplaySet;
|
|
}
|
|
|
|
const _getReferencedDisplaySet = (segDisplaySet, studies) => {
|
|
let allDisplaySets = [];
|
|
|
|
studies.forEach(study => {
|
|
allDisplaySets = allDisplaySets.concat(study.displaySets);
|
|
});
|
|
|
|
const otherDisplaySets = allDisplaySets.filter(
|
|
ds => ds.displaySetInstanceUID !== segDisplaySet.displaySetInstanceUID
|
|
);
|
|
|
|
const { metadata } = segDisplaySet;
|
|
|
|
let referencedSeriesInstanceUIDs;
|
|
|
|
if (metadata.ReferencedSeriesSequence) {
|
|
const ReferencedSeriesSequence = _toArray(
|
|
metadata.ReferencedSeriesSequence
|
|
);
|
|
|
|
referencedSeriesInstanceUIDs = ReferencedSeriesSequence.map(
|
|
ReferencedSeries => ReferencedSeries.SeriesInstanceUID
|
|
);
|
|
} else {
|
|
const { PerFrameFunctionalGroupsSequence } = metadata;
|
|
|
|
let SourceImageSequence;
|
|
|
|
if (metadata.SourceImageSequence) {
|
|
SourceImageSequence = metadata.SourceImageSequence;
|
|
} else {
|
|
const firstFunctionalGroups = _toArray(
|
|
PerFrameFunctionalGroupsSequence
|
|
)[0];
|
|
const { DerivationImageSequence } = firstFunctionalGroups;
|
|
|
|
SourceImageSequence = DerivationImageSequence;
|
|
}
|
|
|
|
const firstSourceImage = _toArray(SourceImageSequence)[0];
|
|
|
|
const { ReferencedSOPInstanceUID } = firstSourceImage;
|
|
|
|
referencedSeriesInstanceUIDs = _findReferencedSeriesInstanceUIDsFromSOPInstanceUID(
|
|
otherDisplaySets,
|
|
ReferencedSOPInstanceUID
|
|
);
|
|
}
|
|
|
|
const referencedDisplaySet = otherDisplaySets.find(ds =>
|
|
referencedSeriesInstanceUIDs.includes(ds.SeriesInstanceUID)
|
|
);
|
|
|
|
return referencedDisplaySet;
|
|
};
|
|
|
|
const _findReferencedSeriesInstanceUIDsFromSOPInstanceUID = (
|
|
displaySets,
|
|
SOPInstanceUID
|
|
) => {
|
|
const imageSets = displaySets.filter(ds => ds instanceof ImageSet);
|
|
|
|
for (let i = 0; i < imageSets.length; i++) {
|
|
const { images } = imageSets[i];
|
|
for (let j = 0; j < images.length; j++) {
|
|
if (images[j].SOPInstanceUID === SOPInstanceUID) {
|
|
return [images[j].getData().metadata.SeriesInstanceUID];
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
function _toArray(arrayOrObject) {
|
|
return Array.isArray(arrayOrObject) ? arrayOrObject : [arrayOrObject];
|
|
}
|