From 4dccefb21f9a661d1114355516f5254a73087de9 Mon Sep 17 00:00:00 2001 From: dannyrb Date: Tue, 12 May 2020 23:10:21 -0400 Subject: [PATCH] seriesInStudy method --- .../default/src/DicomWebDataSource/index.js | 22 ++++---- .../default/src/DicomWebDataSource/qido.js | 54 ++++++++++++++++--- 2 files changed, 58 insertions(+), 18 deletions(-) diff --git a/extensions/default/src/DicomWebDataSource/index.js b/extensions/default/src/DicomWebDataSource/index.js index a93dcf296..fa2522166 100644 --- a/extensions/default/src/DicomWebDataSource/index.js +++ b/extensions/default/src/DicomWebDataSource/index.js @@ -1,5 +1,11 @@ import { api } from 'dicomweb-client'; -import { mapParams, search as qidoSearch, processResults } from './qido.js'; +import { + mapParams, + search as qidoSearch, + seriesInStudy, + processResults, + processSeriesResults, +} from './qido.js'; import { dicomMetadataStore, IWebApiDataSource, utils } from '@ohif/core'; import * as dcmjs from 'dcmjs'; import exampleInstances from './exampleInstances.js'; @@ -7,7 +13,6 @@ import exampleInstances from './exampleInstances.js'; const { urlUtil } = utils; - /** * * @param {string} name - Data source name @@ -57,18 +62,13 @@ function createDicomWebApi(dicomWebConfig) { }, series: { // mapParams: mapParams.bind(), - search: async function(origParams) { - const { studyInstanceUid, seriesInstanceUid, ...mappedParams } = - mapParams(origParams) || {}; - - const results = await qidoSearch( + search: async function(studyInstanceUid) { + const results = await seriesInStudy( qidoDicomWebClient, - studyInstanceUid, - undefined, - mappedParams + studyInstanceUid ); - return processResults(results); + return processSeriesResults(results); }, // processResults: processResults.bind(), }, diff --git a/extensions/default/src/DicomWebDataSource/qido.js b/extensions/default/src/DicomWebDataSource/qido.js index 434cccee4..3b2ac3592 100644 --- a/extensions/default/src/DicomWebDataSource/qido.js +++ b/extensions/default/src/DicomWebDataSource/qido.js @@ -63,6 +63,35 @@ function processResults(qidoStudies) { return studies; } +/** + * Parses resulting data from a QIDO call into a set of Study MetaData + * + * @param {Array} qidoSeries - An array of study objects. Each object contains a keys for DICOM tags. + * @param {object} qidoSeries[0].qidoSeries - An object where each key is the DICOM Tag group+element + * @param {object} qidoSeries[0].qidoSeries[dicomTag] - Optional object that represents DICOM Tag + * @param {string} qidoSeries[0].qidoSeries[dicomTag].vr - Value Representation + * @param {string[]} qidoSeries[0].qidoSeries[dicomTag].Value - Optional string array representation of the DICOM Tag's value + * @returns {Array} An array of Study MetaData objects + */ +export function processSeriesResults(qidoSeries) { + const series = []; + + if (qidoSeries && qidoSeries.length) { + qidoSeries.forEach(qidoSeries => + series.push({ + studyInstanceUid: getString(qidoSeries['0020000D']), + seriesInstanceUid: getString(qidoSeries['0020000E']), + modality: getString(qidoSeries['00080060']), + seriesNumber: getString(qidoSeries['00200011']), + numSeriesInstances: Number(getString(qidoSeries['00201209'])), + description: getString(qidoSeries['0008103E']), + }) + ); + } + + return series; +} + /** * * @param {object} dicomWebClient - Client similar to what's provided by `dicomweb-client` library @@ -78,18 +107,29 @@ function search( seriesInstanceUid, queryParamaters ) { - // const requestFn = studyInstanceUid - // ? dicomWebClient.searchForInstances - // : dicomWebClient.searchForStudies; - - // TODO: Current version does not apply query Params for `searchForInstances` call? - // Just sets `studyInstanceUid` in options... + // Studies return dicomWebClient.searchForStudies({ - studyInstanceUid, + studyInstanceUid: undefined, queryParams: queryParamaters, }); } +/** + * + * @param {string} studyInstanceUID - ID of study to return a list of series for + * @returns {Promise} - Resolves SeriesMetadata[] in study + */ +export function seriesInStudy(dicomWebClient, studyInstanceUID) { + // Series Description + // Already included? + const commaSeparatedFields = ['0008103E'].join(','); + const queryParams = { + // includefield: commaSeparatedFields, + }; + + return dicomWebClient.searchForSeries({ studyInstanceUID, queryParams }); +} + export default function searchStudies(server, filter) { const queryParams = getQIDOQueryParams( filter,