irc_web/.svn/pristine/5e/5e9b4865cfa258ec8dc3b822533...

212 lines
7.0 KiB
Plaintext

import { metaData } from '@cornerstonejs/core';
import type { InstanceMetadata } from '@cornerstonejs/calculate-suv';
export default function getPTImageIdInstanceMetadata(
imageId: string
): InstanceMetadata {
const petSequenceModule = metaData.get('petIsotopeModule', imageId);
const generalSeriesModule = metaData.get('generalSeriesModule', imageId);
const patientStudyModule = metaData.get('patientStudyModule', imageId);
const ptSeriesModule = metaData.get('petSeriesModule', imageId);
const ptImageModule = metaData.get('petImageModule', imageId);
if (!petSequenceModule) {
throw new Error('petSequenceModule metadata is required');
}
const radiopharmaceuticalInfo = petSequenceModule.radiopharmaceuticalInfo;
const { seriesDate, seriesTime, acquisitionDate, acquisitionTime } =
generalSeriesModule;
const { patientWeight } = patientStudyModule;
const { correctedImage, units, decayCorrection } = ptSeriesModule;
if (
seriesDate === undefined ||
seriesTime === undefined ||
patientWeight === undefined ||
acquisitionDate === undefined ||
acquisitionTime === undefined ||
correctedImage === undefined ||
units === undefined ||
decayCorrection === undefined ||
radiopharmaceuticalInfo.radionuclideTotalDose === undefined ||
radiopharmaceuticalInfo.radionuclideHalfLife === undefined ||
(radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime === undefined &&
seriesDate === undefined &&
radiopharmaceuticalInfo.radiopharmaceuticalStartTime === undefined)
//
) {
throw new Error('required metadata are missing');
}
const instanceMetadata: InstanceMetadata = {
CorrectedImage: correctedImage,
Units: units,
RadionuclideHalfLife: radiopharmaceuticalInfo.radionuclideHalfLife,
RadionuclideTotalDose: radiopharmaceuticalInfo.radionuclideTotalDose,
DecayCorrection: decayCorrection,
PatientWeight: patientWeight,
SeriesDate: seriesDate,
SeriesTime: seriesTime,
AcquisitionDate: acquisitionDate,
AcquisitionTime: acquisitionTime,
};
if (
radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime &&
radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime !== undefined &&
typeof radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime === 'string'
) {
instanceMetadata.RadiopharmaceuticalStartDateTime =
radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime;
}
if (
radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime &&
radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime !== undefined &&
typeof radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime !== 'string'
) {
const dateString = convertInterfaceDateToString(
radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime
);
instanceMetadata.RadiopharmaceuticalStartDateTime = dateString;
}
if (
instanceMetadata.AcquisitionDate &&
instanceMetadata.AcquisitionDate !== undefined &&
typeof instanceMetadata.AcquisitionDate !== 'string'
) {
const dateString = convertInterfaceDateToString(
instanceMetadata.AcquisitionDate
);
instanceMetadata.AcquisitionDate = dateString;
}
if (
instanceMetadata.SeriesDate &&
instanceMetadata.SeriesDate !== undefined &&
typeof instanceMetadata.SeriesDate !== 'string'
) {
const dateString = convertInterfaceDateToString(
instanceMetadata.SeriesDate
);
instanceMetadata.SeriesDate = dateString;
}
if (
radiopharmaceuticalInfo.radiopharmaceuticalStartTime &&
radiopharmaceuticalInfo.radiopharmaceuticalStartTime !== undefined &&
typeof radiopharmaceuticalInfo.radiopharmaceuticalStartTime === 'string'
) {
instanceMetadata.RadiopharmaceuticalStartTime =
radiopharmaceuticalInfo.radiopharmaceuticalStartTime;
}
if (
radiopharmaceuticalInfo.radiopharmaceuticalStartTime &&
radiopharmaceuticalInfo.radiopharmaceuticalStartTime !== undefined &&
typeof radiopharmaceuticalInfo.radiopharmaceuticalStartTime !== 'string'
) {
const timeString = convertInterfaceTimeToString(
radiopharmaceuticalInfo.radiopharmaceuticalStartTime
);
instanceMetadata.RadiopharmaceuticalStartTime = timeString;
}
if (
instanceMetadata.AcquisitionTime &&
instanceMetadata.AcquisitionTime !== undefined &&
typeof instanceMetadata.AcquisitionTime !== 'string'
) {
const timeString = convertInterfaceTimeToString(
instanceMetadata.AcquisitionTime
);
instanceMetadata.AcquisitionTime = timeString;
}
if (
instanceMetadata.SeriesTime &&
instanceMetadata.SeriesTime !== undefined &&
typeof instanceMetadata.SeriesTime !== 'string'
) {
const timeString = convertInterfaceTimeToString(
instanceMetadata.SeriesTime
);
instanceMetadata.SeriesTime = timeString;
}
if (
ptImageModule.frameReferenceTime &&
ptImageModule.frameReferenceTime !== undefined
) {
instanceMetadata.FrameReferenceTime = ptImageModule.frameReferenceTime;
}
if (
ptImageModule.actualFrameDuration &&
ptImageModule.actualFrameDuration !== undefined
) {
instanceMetadata.ActualFrameDuration = ptImageModule.actualFrameDuration;
}
if (
patientStudyModule.patientSex &&
patientStudyModule.patientSex !== undefined
) {
instanceMetadata.PatientSex = patientStudyModule.patientSex;
}
if (
patientStudyModule.patientSize &&
patientStudyModule.patientSize !== undefined
) {
instanceMetadata.PatientSize = patientStudyModule.patientSize;
}
// Todo: add private tags
// 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'];
// }
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 };