2020-04-28 04:49:57 -06:00
|
|
|
import dcmjs from 'dcmjs';
|
2020-04-09 07:06:41 -04:00
|
|
|
import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader';
|
2019-09-27 08:47:08 -03:00
|
|
|
import FileLoader from './fileLoader';
|
2020-03-09 19:03:23 +00:00
|
|
|
import OHIF from '@ohif/core';
|
|
|
|
|
|
|
|
|
|
const metadataProvider = OHIF.cornerstone.metadataProvider;
|
2019-09-27 08:47:08 -03:00
|
|
|
|
|
|
|
|
const DICOMFileLoader = new (class extends FileLoader {
|
|
|
|
|
fileType = 'application/dicom';
|
2020-04-09 07:06:41 -04:00
|
|
|
loadFile(file, imageId) {
|
2019-09-27 08:47:08 -03:00
|
|
|
return cornerstoneWADOImageLoader.wadouri.loadFileRequest(imageId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getDataset(image, imageId) {
|
|
|
|
|
let dataset = {};
|
|
|
|
|
try {
|
|
|
|
|
const dicomData = dcmjs.data.DicomMessage.readFile(image);
|
2020-03-09 19:03:23 +00:00
|
|
|
|
2019-09-27 08:47:08 -03:00
|
|
|
dataset = dcmjs.data.DicomMetaDictionary.naturalizeDataset(
|
|
|
|
|
dicomData.dict
|
|
|
|
|
);
|
2020-03-09 19:03:23 +00:00
|
|
|
|
|
|
|
|
metadataProvider.addInstance(dataset);
|
|
|
|
|
|
2019-09-27 08:47:08 -03:00
|
|
|
dataset._meta = dcmjs.data.DicomMetaDictionary.namifyDataset(
|
|
|
|
|
dicomData.meta
|
|
|
|
|
);
|
|
|
|
|
} catch (e) {
|
2020-01-27 10:12:07 +01:00
|
|
|
console.error('Error reading dicom file', e);
|
2019-09-27 08:47:08 -03:00
|
|
|
}
|
|
|
|
|
// Set imageId on dataset to be consumed later on
|
|
|
|
|
dataset.imageId = imageId;
|
|
|
|
|
|
|
|
|
|
return dataset;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getStudies(dataset, imageId) {
|
|
|
|
|
return this.getStudyFromDataset(dataset);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getStudyFromDataset(dataset = {}) {
|
|
|
|
|
const {
|
|
|
|
|
StudyInstanceUID,
|
|
|
|
|
StudyDate,
|
|
|
|
|
StudyTime,
|
|
|
|
|
AccessionNumber,
|
|
|
|
|
ReferringPhysicianName,
|
|
|
|
|
PatientName,
|
|
|
|
|
PatientID,
|
|
|
|
|
PatientBirthDate,
|
|
|
|
|
PatientSex,
|
|
|
|
|
StudyID,
|
|
|
|
|
StudyDescription,
|
|
|
|
|
SeriesInstanceUID,
|
|
|
|
|
SeriesDescription,
|
|
|
|
|
SeriesNumber,
|
|
|
|
|
imageId,
|
|
|
|
|
} = dataset;
|
|
|
|
|
|
|
|
|
|
const instance = {
|
2020-03-09 19:03:23 +00:00
|
|
|
metadata: dataset,
|
2019-09-27 08:47:08 -03:00
|
|
|
url: imageId,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const series = {
|
2020-03-09 19:03:23 +00:00
|
|
|
SeriesInstanceUID: SeriesInstanceUID,
|
|
|
|
|
SeriesDescription: SeriesDescription,
|
|
|
|
|
SeriesNumber: SeriesNumber,
|
2019-09-27 08:47:08 -03:00
|
|
|
instances: [instance],
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const study = {
|
2020-03-09 19:03:23 +00:00
|
|
|
StudyInstanceUID,
|
|
|
|
|
StudyDate,
|
|
|
|
|
StudyTime,
|
|
|
|
|
AccessionNumber,
|
|
|
|
|
ReferringPhysicianName,
|
|
|
|
|
PatientName,
|
|
|
|
|
PatientID,
|
|
|
|
|
PatientBirthDate,
|
|
|
|
|
PatientSex,
|
|
|
|
|
StudyID,
|
|
|
|
|
StudyDescription,
|
2019-09-27 08:47:08 -03:00
|
|
|
/*
|
|
|
|
|
TODO: in case necessary to uncomment this block, double check every property
|
|
|
|
|
numberOfStudyRelatedSeries: NumberOfStudyRelatedSeries || DICOMWeb.getString(dataset['00201206']),
|
|
|
|
|
numberOfStudyRelatedInstances: NumberOfStudyRelatedInstances || DICOMWeb.getString(dataset['00201208']),
|
2020-03-09 19:03:23 +00:00
|
|
|
Modality: Modality || DICOMWeb.getString(dataset['00080060']),
|
|
|
|
|
ModalitiesInStudy: ModalitiesInStudy || DICOMWeb.getString(dataset['00080061']),
|
2019-09-27 08:47:08 -03:00
|
|
|
modalities:
|
|
|
|
|
*/
|
2020-03-09 19:03:23 +00:00
|
|
|
series: [series],
|
2019-09-27 08:47:08 -03:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return study;
|
|
|
|
|
}
|
|
|
|
|
})();
|
|
|
|
|
|
|
|
|
|
export default DICOMFileLoader;
|