Build WADO logic to fetch + build displaysets + generate imageIds based on prefs.

This commit is contained in:
James A. Petts committed 2020-05-15 14:02:04 +02:00
1 parent d5c83bf596
commit 289d3f5703
6 files changed
+164 -15

No files matched your search

@@ -6,7 +6,15 @@ import {
processResults,
processSeriesResults,
} from './qido.js';
import { dicomMetadataStore, IWebApiDataSource, utils } from '@ohif/core';
import {
dicomMetadataStore,
IWebApiDataSource,
utils,
displaySetManager,
} from '@ohif/core';
import { mapParams, search as qidoSearch, processResults } from './qido.js';
import getImageId from './utils/getImageId';
import * as dcmjs from 'dcmjs';
import { retrieveStudyMetadata } from './retrieveStudyMetadata.js';
@@ -121,18 +129,46 @@ function createDicomWebApi(dicomWebConfig) {
});
});
});
// TEMP use dummy data.
//const { naturalizeDataset } = dcmjs.data.DicomMetaDictionary;
//const instances = exampleInstances.map(naturalizeDataset);
// TEMP
//dicomMetadataStore.addInstances(instances);
//callback(instances);
},
},
},
getImageIdsForDisplaySet(displaySetInstanceUid) {
const displaySet = displaySetManager.getDisplaySetByUID(
displaySetInstanceUid
);
debugger;
const images = displaySet.images;
const imageIds = [];
if (!images) {
return imageIds;
}
displaySet.images.forEach(instance => {
const NumberOfFrames = instance.NumberOfFrames;
if (NumberOfFrames > 1) {
for (let i = 0; i < NumberOfFrames; i++) {
const imageId = getImageId({
instance,
frame: i,
config: dicomWebConfig,
});
imageIds.push(imageId);
}
} else {
const imageId = getImageId({ instance, config: dicomWebConfig });
imageIds.push(imageId);
}
});
debugger;
return imageIds;
},
});
}
@@ -0,0 +1,51 @@
import getWADORSImageId from './getWADORSImageId';
function buildInstanceWadoUrl(config, instance) {
const { StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID } = instance;
const params = [];
params.push('requestType=WADO');
params.push(`studyUID=${StudyInstanceUID}`);
params.push(`seriesUID=${SeriesInstanceUID}`);
params.push(`objectUID=${SOPInstanceUID}`);
params.push('contentType=application/dicom');
params.push('transferSyntax=*');
const paramString = params.join('&');
return `${config.wadoUriRoot}?${paramString}`;
}
/**
* Obtain an imageId for Cornerstone from an image instance
*
* @param instance
* @param frame
* @param thumbnail
* @returns {string} The imageId to be used by Cornerstone
*/
export default function getImageId({
instance,
frame,
config,
thumbnail = false,
}) {
if (!instance) {
return;
}
const renderingAttr = thumbnail ? 'thumbnailRendering' : 'imageRendering';
if (!config[renderingAttr] || config[renderingAttr] === 'wadouri') {
const wadouri = buildInstanceWadoUrl(config, instance);
let imageId = 'dicomweb:' + wadouri;
if (frame !== undefined) {
imageId += '&frame=' + frame;
}
return imageId;
} else {
return getWADORSImageId(instance, config, frame); // WADO-RS Retrieve Frame
}
}
@@ -0,0 +1,51 @@
function buildInstanceWadoRsUri(instance, config) {
const { StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID } = instance;
return `${config.wadoRoot}/studies/${StudyInstanceUID}/series/${SeriesInstanceUID}/instances/${SOPInstanceUID}`;
}
function buildInstanceFrameWadoRsUri(instance, config, frame) {
const baseWadoRsUri = buildInstanceWadoRsUri(instance, config);
frame = frame != null || 1;
return `${baseWadoRsUri}/frames/${frame}`;
}
// function getWADORSImageUrl(instance, frame) {
// const wadorsuri = buildInstanceFrameWadoRsUri(instance, config, frame);
// if (!wadorsuri) {
// return;
// }
// // Use null to obtain an imageId which represents the instance
// if (frame === null) {
// wadorsuri = wadorsuri.replace(/frames\/(\d+)/, '');
// } else {
// // We need to sum 1 because WADO-RS frame number is 1-based
// frame = frame ? parseInt(frame) + 1 : 1;
// // Replaces /frame/1 by /frame/{frame}
// wadorsuri = wadorsuri.replace(/frames\/(\d+)/, `frames/${frame}`);
// }
// return wadorsuri;
// }
/**
* Obtain an imageId for Cornerstone based on the WADO-RS scheme
*
* @param {object} instanceMetada metadata object (InstanceMetadata)
* @param {(string\|number)} [frame] the frame number
* @returns {string} The imageId to be used by Cornerstone
*/
export default function getWADORSImageId(instance, config, frame) {
//const uri = getWADORSImageUrl(instance, frame);
const uri = buildInstanceFrameWadoRsUri(instance, config, frame);
if (!uri) {
return;
}
return `wadors:${uri}`;
}