110 lines
4.2 KiB
TypeScript
110 lines
4.2 KiB
TypeScript
import OHIF from '@ohif/core';
|
|
|
|
import { InstanceMetadata, PhilipsPETPrivateGroup } from '@cornerstonejs/calculate-suv/src/types';
|
|
|
|
const metadataProvider = OHIF.classes.MetadataProvider;
|
|
|
|
export default function getPTImageIdInstanceMetadata(imageId: string): InstanceMetadata {
|
|
const dicomMetaData = metadataProvider.get('instance', imageId);
|
|
|
|
if (!dicomMetaData) {
|
|
throw new Error('dicom metadata are required');
|
|
}
|
|
|
|
if (
|
|
dicomMetaData.SeriesDate === undefined ||
|
|
dicomMetaData.SeriesTime === undefined ||
|
|
dicomMetaData.CorrectedImage === undefined ||
|
|
dicomMetaData.Units === undefined ||
|
|
!dicomMetaData.RadiopharmaceuticalInformationSequence ||
|
|
dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife === undefined ||
|
|
dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose === undefined ||
|
|
dicomMetaData.DecayCorrection === undefined ||
|
|
dicomMetaData.AcquisitionDate === undefined ||
|
|
dicomMetaData.AcquisitionTime === undefined ||
|
|
(dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartDateTime ===
|
|
undefined &&
|
|
dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime ===
|
|
undefined)
|
|
) {
|
|
throw new Error('required metadata are missing');
|
|
}
|
|
|
|
if (dicomMetaData.PatientWeight === undefined) {
|
|
console.warn('PatientWeight missing from PT instance metadata');
|
|
}
|
|
|
|
const instanceMetadata: InstanceMetadata = {
|
|
CorrectedImage: dicomMetaData.CorrectedImage,
|
|
Units: dicomMetaData.Units,
|
|
RadionuclideHalfLife: dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife,
|
|
RadionuclideTotalDose:
|
|
dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose,
|
|
RadiopharmaceuticalStartDateTime:
|
|
dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartDateTime,
|
|
RadiopharmaceuticalStartTime:
|
|
dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime,
|
|
DecayCorrection: dicomMetaData.DecayCorrection,
|
|
PatientWeight: dicomMetaData.PatientWeight,
|
|
SeriesDate: dicomMetaData.SeriesDate,
|
|
SeriesTime: dicomMetaData.SeriesTime,
|
|
AcquisitionDate: dicomMetaData.AcquisitionDate,
|
|
AcquisitionTime: dicomMetaData.AcquisitionTime,
|
|
};
|
|
|
|
if (
|
|
dicomMetaData['70531000'] ||
|
|
dicomMetaData['70531000'] !== undefined ||
|
|
dicomMetaData['70531009'] ||
|
|
dicomMetaData['70531009'] !== undefined
|
|
) {
|
|
const philipsPETPrivateGroup: PhilipsPETPrivateGroup = {
|
|
SUVScaleFactor: dicomMetaData['70531000'],
|
|
ActivityConcentrationScaleFactor: dicomMetaData['70531009'],
|
|
};
|
|
instanceMetadata.PhilipsPETPrivateGroup = philipsPETPrivateGroup;
|
|
}
|
|
|
|
if (dicomMetaData['0009100d'] && dicomMetaData['0009100d'] !== undefined) {
|
|
instanceMetadata.GEPrivatePostInjectionDateTime = dicomMetaData['0009100d'];
|
|
}
|
|
|
|
if (dicomMetaData.FrameReferenceTime && dicomMetaData.FrameReferenceTime !== undefined) {
|
|
instanceMetadata.FrameReferenceTime = dicomMetaData.FrameReferenceTime;
|
|
}
|
|
|
|
if (dicomMetaData.ActualFrameDuration && dicomMetaData.ActualFrameDuration !== undefined) {
|
|
instanceMetadata.ActualFrameDuration = dicomMetaData.ActualFrameDuration;
|
|
}
|
|
|
|
if (dicomMetaData.PatientSex && dicomMetaData.PatientSex !== undefined) {
|
|
instanceMetadata.PatientSex = dicomMetaData.PatientSex;
|
|
}
|
|
|
|
if (dicomMetaData.PatientSize && dicomMetaData.PatientSize !== undefined) {
|
|
instanceMetadata.PatientSize = dicomMetaData.PatientSize;
|
|
}
|
|
|
|
return instanceMetadata;
|
|
}
|
|
|
|
function convertInterfaceTimeToString(time): string {
|
|
const hours = `${time.hours || '00'}`.padStart(2, '0');
|
|
const minutes = `${time.minutes || '00'}`.padStart(2, '0');
|
|
const seconds = `${time.seconds || '00'}`.padStart(2, '0');
|
|
|
|
const fractionalSeconds = `${time.fractionalSeconds || '000000'}`.padEnd(6, '0');
|
|
|
|
const timeString = `${hours}${minutes}${seconds}.${fractionalSeconds}`;
|
|
return timeString;
|
|
}
|
|
|
|
function convertInterfaceDateToString(date): string {
|
|
const month = `${date.month}`.padStart(2, '0');
|
|
const day = `${date.day}`.padStart(2, '0');
|
|
const dateString = `${date.year}${month}${day}`;
|
|
return dateString;
|
|
}
|
|
|
|
export { getPTImageIdInstanceMetadata };
|