91 lines
4.3 KiB
PHP
91 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Pacs;
|
|
|
|
use App\Services\StudyRouter\RawDicomTags;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Str;
|
|
|
|
final class DicomUtils
|
|
{
|
|
public static function dateToCarbon(?string $datePart, string $timezone = 'UTC'): ?Carbon
|
|
{
|
|
if ($datePart === null) {
|
|
return null;
|
|
}
|
|
|
|
return Carbon::createFromFormat('Ymd', $datePart, $timezone);
|
|
}
|
|
|
|
public static function dateTimeToCarbon(?string $datePart, ?string $timePart, string $timezone = 'UTC'): ?Carbon
|
|
{
|
|
if (blank($datePart) || blank($timePart)) {
|
|
return null;
|
|
}
|
|
|
|
return Carbon::createFromFormat('YmdHis', $datePart . Str::before($timePart, '.'), $timezone);
|
|
}
|
|
|
|
public static function getDicomTagDescription(RawDicomTags $tag): string
|
|
{
|
|
return match ($tag) {
|
|
RawDicomTags::PatientName => "Patient's Name",
|
|
RawDicomTags::PatientID => 'Patient ID',
|
|
RawDicomTags::PatientBirthDate => "Patient's Birth Date",
|
|
RawDicomTags::PatientSex => "Patient's Sex",
|
|
RawDicomTags::StudyInstanceUID => 'Study Instance UID',
|
|
RawDicomTags::SeriesInstanceUID => 'Series Instance UID',
|
|
RawDicomTags::StudyID => 'Study ID',
|
|
RawDicomTags::SeriesNumber => 'Series Number',
|
|
RawDicomTags::InstanceNumber => 'Instance Number',
|
|
RawDicomTags::SOPClassUID => 'SOP Class UID',
|
|
RawDicomTags::SOPInstanceUID => 'SOP Instance UID',
|
|
RawDicomTags::StudyDate => 'Study Date',
|
|
RawDicomTags::StudyTime => 'Study Time',
|
|
RawDicomTags::AccessionNumber => 'Accession Number',
|
|
RawDicomTags::Modality => 'Modality',
|
|
RawDicomTags::Manufacturer => 'Manufacturer',
|
|
RawDicomTags::InstitutionName => 'Institution Name',
|
|
RawDicomTags::ReferringPhysicianName => "Referring Physician's Name",
|
|
RawDicomTags::StationName => 'Station Name',
|
|
RawDicomTags::SeriesDescription => 'Series Description',
|
|
RawDicomTags::ManufacturerModelName => "Manufacturer's Model Name",
|
|
RawDicomTags::PatientAge => "Patient's Age",
|
|
RawDicomTags::PatientWeight => "Patient's Weight",
|
|
RawDicomTags::BodyPartExamined => 'Body Part Examined',
|
|
RawDicomTags::ProtocolName => 'Protocol Name',
|
|
RawDicomTags::SoftwareVersions => 'Software Versions',
|
|
RawDicomTags::AcquisitionDate => 'Acquisition Date',
|
|
RawDicomTags::AcquisitionTime => 'Acquisition Time',
|
|
RawDicomTags::ContentDate => 'Content Date',
|
|
RawDicomTags::ContentTime => 'Content Time',
|
|
RawDicomTags::AcquisitionDeviceProcessingDescription => 'Acquisition Device Processing Description',
|
|
RawDicomTags::InstitutionAddress => 'Institution Address',
|
|
RawDicomTags::StudyDescription => 'Study Description',
|
|
RawDicomTags::OperatorsName => "Operator's Name",
|
|
RawDicomTags::Private10 => 'Private Tag 10',
|
|
RawDicomTags::IW_Private => 'IW Private Tag',
|
|
RawDicomTags::ImageType => 'Image Type',
|
|
RawDicomTags::PatientOrientation => 'Patient Orientation',
|
|
RawDicomTags::ImagePositionPatient => 'Image Position (Patient)',
|
|
RawDicomTags::ImageOrientationPatient => 'Image Orientation (Patient)',
|
|
RawDicomTags::FrameOfReferenceUID => 'Frame of Reference UID',
|
|
RawDicomTags::PositionReferenceIndicator => 'Position Reference Indicator',
|
|
RawDicomTags::SliceLocation => 'Slice Location',
|
|
RawDicomTags::SamplesPerPixel => 'Samples per Pixel',
|
|
RawDicomTags::PhotometricInterpretation => 'Photometric Interpretation',
|
|
RawDicomTags::Rows => 'Rows',
|
|
RawDicomTags::Columns => 'Columns',
|
|
RawDicomTags::PixelSpacing => 'Pixel Spacing',
|
|
RawDicomTags::BitsAllocated => 'Bits Allocated',
|
|
RawDicomTags::BitsStored => 'Bits Stored',
|
|
RawDicomTags::HighBit => 'High Bit',
|
|
RawDicomTags::PixelRepresentation => 'Pixel Representation',
|
|
RawDicomTags::WindowCenter => 'Window Center',
|
|
RawDicomTags::WindowWidth => 'Window Width',
|
|
RawDicomTags::RescaleIntercept => 'Rescale Intercept',
|
|
RawDicomTags::RescaleSlope => 'Rescale Slope',
|
|
};
|
|
}
|
|
}
|