84 lines
3.2 KiB
JavaScript
Executable File
84 lines
3.2 KiB
JavaScript
Executable File
import { remoteGetValue } from '../../lib/remoteGetValue';
|
|
|
|
/**
|
|
* Parses data returned from a QIDO search and transforms it into
|
|
* an array of series that are present in the study
|
|
*
|
|
* @param server The DICOM server
|
|
* @param studyInstanceUid
|
|
* @param resultData
|
|
* @returns {Array} Series List
|
|
*/
|
|
function resultDataToStudyMetadata(server, studyInstanceUid, resultData) {
|
|
var seriesMap = {};
|
|
var seriesList = [];
|
|
|
|
resultData.forEach(function(instance) {
|
|
// Use seriesMap to cache series data
|
|
// If the series instance UID has already been used to
|
|
// process series data, continue using that series
|
|
var seriesInstanceUid = remoteGetValue(instance['0020,000e']);
|
|
var series = seriesMap[seriesInstanceUid];
|
|
|
|
// If no series data exists in the seriesMap cache variable,
|
|
// process any available series data
|
|
if(!series) {
|
|
series = {
|
|
seriesInstanceUid : seriesInstanceUid,
|
|
seriesNumber : parseFloat(remoteGetValue(instance['0020,0011'])),
|
|
instances: []
|
|
};
|
|
|
|
// Save this data in the seriesMap cache variable
|
|
seriesMap[seriesInstanceUid] = series;
|
|
seriesList.push(series);
|
|
}
|
|
|
|
// The uri for the dicomweb
|
|
// NOTE: DCM4CHEE seems to return the data zipped
|
|
// NOTE: Orthanc returns the data with multi-part mime which cornerstoneWADOImageLoader doesn't
|
|
// know how to parse yet
|
|
//var uri = DICOMWeb.getString(instance['00081190']);
|
|
//uri = uri.replace('wado-rs', 'dicom-web');
|
|
|
|
// manually create a WADO-URI from the UIDs
|
|
// NOTE: Haven't been able to get Orthanc's WADO-URI to work yet - maybe its not configured?
|
|
var sopInstanceUid = remoteGetValue(instance['0008,0018']);
|
|
var uri = server.wadoUriRoot + '?requestType=WADO&studyUID=' + studyInstanceUid + '&seriesUID=' + seriesInstanceUid + '&objectUID=' + sopInstanceUid + "&contentType=application%2Fdicom";
|
|
|
|
// Add this instance to the current series
|
|
series.instances.push({
|
|
sopClassUid: remoteGetValue(instance['0008,0016']),
|
|
sopInstanceUid: sopInstanceUid,
|
|
uri: uri,
|
|
instanceNumber: parseFloat(remoteGetValue(instance['0020,0013']))
|
|
});
|
|
});
|
|
return seriesList;
|
|
}
|
|
|
|
/**
|
|
* Retrieve a set of instances using a QIDO call
|
|
* @param server
|
|
* @param studyInstanceUid
|
|
* @returns {{wadoUriRoot: String, studyInstanceUid: String, seriesList: Array}}
|
|
*/
|
|
Services.REMOTE.Instances = function(server, studyInstanceUid) {
|
|
var parameters = {
|
|
PatientName: "",
|
|
PatientID: "",
|
|
AccessionNumber: "",
|
|
SeriesInstanceUID: "",
|
|
SeriesNumber : "",
|
|
SOPClassUID : "",
|
|
InstanceNumber : ""
|
|
};
|
|
|
|
var remote = new OrthancRemote(server.root, server.sourceAE);
|
|
|
|
return {
|
|
wadoUriRoot: server.wadoUriRoot,
|
|
studyInstanceUid: studyInstanceUid,
|
|
seriesList: resultDataToStudyMetadata(server, studyInstanceUid, remote.findInstances(server.modality, studyInstanceUid, null, parameters))
|
|
};
|
|
}; |