feat(data overlay): add foreground background control plus orientation change in the UI and add RTDOSE support (#5007)
This commit is contained in:
1 parent
c1fced0573
commit
cd4e6408bc
105 files changed
+3117
-788
No files matched your search
@@ -22,11 +22,11 @@ export default function init({
|
||||
cineService.EVENTS.CINE_STATE_CHANGED,
|
||||
]);
|
||||
// Add
|
||||
DicomMetadataStore.subscribe(DicomMetadataStore.EVENTS.INSTANCES_ADDED, handlePETImageMetadata);
|
||||
DicomMetadataStore.subscribe(DicomMetadataStore.EVENTS.INSTANCES_ADDED, handleScalingModules);
|
||||
|
||||
// If the metadata for PET has changed by the user (e.g. manually changing the PatientWeight)
|
||||
// we need to recalculate the SUV Scaling Factors
|
||||
DicomMetadataStore.subscribe(DicomMetadataStore.EVENTS.SERIES_UPDATED, handlePETImageMetadata);
|
||||
DicomMetadataStore.subscribe(DicomMetadataStore.EVENTS.SERIES_UPDATED, handleScalingModules);
|
||||
|
||||
// Adds extra custom attributes for use by hanging protocols
|
||||
registerHangingProtocolAttributes({ servicesManager });
|
||||
@@ -71,7 +71,7 @@ export default function init({
|
||||
});
|
||||
}
|
||||
|
||||
const handlePETImageMetadata = ({ SeriesInstanceUID, StudyInstanceUID }) => {
|
||||
const handleScalingModules = ({ SeriesInstanceUID, StudyInstanceUID }) => {
|
||||
const { instances } = DicomMetadataStore.getSeries(StudyInstanceUID, SeriesInstanceUID);
|
||||
|
||||
if (!instances?.length) {
|
||||
@@ -80,12 +80,41 @@ const handlePETImageMetadata = ({ SeriesInstanceUID, StudyInstanceUID }) => {
|
||||
|
||||
const modality = instances[0].Modality;
|
||||
|
||||
if (!modality || modality !== 'PT') {
|
||||
const allowedModality = ['PT', 'RTDOSE'];
|
||||
|
||||
if (!allowedModality.includes(modality)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const imageIds = instances.map(instance => instance.imageId);
|
||||
const instanceMetadataArray = [];
|
||||
|
||||
if (modality === 'RTDOSE') {
|
||||
const DoseGridScaling = instances[0].DoseGridScaling;
|
||||
const DoseSummation = instances[0].DoseSummation;
|
||||
const DoseType = instances[0].DoseType;
|
||||
const DoseUnit = instances[0].DoseUnit;
|
||||
const NumberOfFrames = instances[0].NumberOfFrames;
|
||||
const imageId = imageIds[0];
|
||||
|
||||
// add scaling module to the metadata
|
||||
// since RTDOSE is always a multiframe we should add the scaling module to each frame
|
||||
for (let i = 0; i < NumberOfFrames; i++) {
|
||||
const frameIndex = i + 1;
|
||||
|
||||
// Todo: we should support other things like wadouri, local etc
|
||||
const newImageId = `${imageId.replace(/\/frames\/\d+$/, '')}/frames/${frameIndex}`;
|
||||
metadataProvider.addCustomMetadata(newImageId, 'scalingModule', {
|
||||
DoseGridScaling,
|
||||
DoseSummation,
|
||||
DoseType,
|
||||
DoseUnit,
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// try except block to prevent errors when the metadata is not correct
|
||||
try {
|
||||
imageIds.forEach(imageId => {
|
||||
|
||||
Reference in new issue
Block a user