seriesInStudy method

This commit is contained in:
dannyrb 2020-05-12 23:10:21 -04:00 committed by James A. Petts
parent c532d94025
commit 4dccefb21f
2 changed files with 58 additions and 18 deletions

View File

@ -1,5 +1,11 @@
import { api } from 'dicomweb-client'; 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 { dicomMetadataStore, IWebApiDataSource, utils } from '@ohif/core';
import * as dcmjs from 'dcmjs'; import * as dcmjs from 'dcmjs';
import exampleInstances from './exampleInstances.js'; import exampleInstances from './exampleInstances.js';
@ -7,7 +13,6 @@ import exampleInstances from './exampleInstances.js';
const { urlUtil } = utils; const { urlUtil } = utils;
/** /**
* *
* @param {string} name - Data source name * @param {string} name - Data source name
@ -57,18 +62,13 @@ function createDicomWebApi(dicomWebConfig) {
}, },
series: { series: {
// mapParams: mapParams.bind(), // mapParams: mapParams.bind(),
search: async function(origParams) { search: async function(studyInstanceUid) {
const { studyInstanceUid, seriesInstanceUid, ...mappedParams } = const results = await seriesInStudy(
mapParams(origParams) || {};
const results = await qidoSearch(
qidoDicomWebClient, qidoDicomWebClient,
studyInstanceUid, studyInstanceUid
undefined,
mappedParams
); );
return processResults(results); return processSeriesResults(results);
}, },
// processResults: processResults.bind(), // processResults: processResults.bind(),
}, },

View File

@ -63,6 +63,35 @@ function processResults(qidoStudies) {
return studies; 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 * @param {object} dicomWebClient - Client similar to what's provided by `dicomweb-client` library
@ -78,18 +107,29 @@ function search(
seriesInstanceUid, seriesInstanceUid,
queryParamaters queryParamaters
) { ) {
// const requestFn = studyInstanceUid // Studies
// ? dicomWebClient.searchForInstances
// : dicomWebClient.searchForStudies;
// TODO: Current version does not apply query Params for `searchForInstances` call?
// Just sets `studyInstanceUid` in options...
return dicomWebClient.searchForStudies({ return dicomWebClient.searchForStudies({
studyInstanceUid, studyInstanceUid: undefined,
queryParams: queryParamaters, 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) { export default function searchStudies(server, filter) {
const queryParams = getQIDOQueryParams( const queryParams = getQIDOQueryParams(
filter, filter,