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 { 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(),
},

View File

@ -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,