ohif-viewer/Packages/ohif-measurement-table/client/utils/retrieveDataFromSR.js

60 lines
2.3 KiB
JavaScript

import { dcmjs } from 'meteor/ohif:cornerstone';
import {getAllDisplaySets, getInstanceMetadata} from './srUtils'
const imagingMeasurementsToMeasurementData = (dataset, displaySets) => {
const { MeasurementReport } = dcmjs.adapters.Cornerstone;
const storedMeasurementByToolType = MeasurementReport.generateToolState(dataset);
const measurementData = {};
let measurementNumber = 0;
Object.keys(storedMeasurementByToolType).forEach(toolType => {
const measurements = storedMeasurementByToolType[toolType];
measurementData[toolType] = [];
measurements.forEach(measurement => {
const instanceMetadata = getInstanceMetadata(displaySets, measurement.sopInstanceUid);
const imageId = OHIF.viewerbase.getImageId(instanceMetadata);
if (!imageId) {
return;
}
// TODO: Update the OHIF metadata provider, then switch these to use 'generalSeriesModule'
const study = cornerstone.metaData.get('study', imageId);
const series = cornerstone.metaData.get('series', imageId);
const imagePath = [
study.studyInstanceUid,
series.seriesInstanceUid,
measurement.sopInstanceUid,
measurement.frameIndex
].join('_');
const toolData = Object.assign({}, measurement, {
imageId,
imagePath,
seriesInstanceUid: series.seriesInstanceUid,
studyInstanceUid: study.studyInstanceUid,
patientId: study.patientId,
measurementNumber: ++measurementNumber,
timepointId: OHIF.viewer.data.currentTimepointId,
toolType,
_id: imageId + measurementNumber,
});
measurementData[toolType].push(toolData);
});
})
return measurementData;
};
export default retrieveDataFromSR = (Part10SRArrayBuffer) => {
const allDisplaySets = getAllDisplaySets();
// Get the dicom data as an Object
const dicomData = dcmjs.data.DicomMessage.readFile(Part10SRArrayBuffer);
const dataset = dcmjs.data.DicomMetaDictionary.naturalizeDataset(dicomData.dict);
// Convert the SR into the kind of object the Measurements package is expecting
return imagingMeasurementsToMeasurementData(dataset, allDisplaySets);
};