init: tested on hangtuah to cloud
This commit is contained in:
86
utils/dicom_utils.py
Normal file
86
utils/dicom_utils.py
Normal file
@@ -0,0 +1,86 @@
|
||||
"""
|
||||
General utility functions for DICOM operations.
|
||||
"""
|
||||
import os
|
||||
import json
|
||||
from datetime import datetime
|
||||
from utils.logger import main_logger as logger
|
||||
|
||||
def create_directory_if_not_exists(directory_path):
|
||||
"""
|
||||
Create directory if it doesn't exist.
|
||||
|
||||
Args:
|
||||
directory_path (str): Path to directory
|
||||
"""
|
||||
if not os.path.exists(directory_path):
|
||||
os.makedirs(directory_path, exist_ok=True)
|
||||
logger.info(f"Created directory: {directory_path}")
|
||||
|
||||
def save_json_data(data, filename, directory):
|
||||
"""
|
||||
Save data as JSON to specified directory.
|
||||
|
||||
Args:
|
||||
data (dict): Data to save
|
||||
filename (str): Filename without path
|
||||
directory (str): Directory to save to
|
||||
|
||||
Returns:
|
||||
str: Full path to saved file
|
||||
"""
|
||||
create_directory_if_not_exists(directory)
|
||||
file_path = os.path.join(directory, filename)
|
||||
|
||||
with open(file_path, 'w') as f:
|
||||
json.dump(data, f, indent=2)
|
||||
|
||||
logger.info(f"Saved JSON data to {file_path}")
|
||||
return file_path
|
||||
|
||||
def parse_dicom_date(date_str):
|
||||
"""
|
||||
Parse DICOM date format (YYYYMMDD) to Python datetime.
|
||||
|
||||
Args:
|
||||
date_str (str): DICOM formatted date string
|
||||
|
||||
Returns:
|
||||
datetime: Python datetime object
|
||||
"""
|
||||
if not date_str or len(date_str) != 8:
|
||||
return None
|
||||
|
||||
try:
|
||||
return datetime.strptime(date_str, '%Y%m%d')
|
||||
except ValueError:
|
||||
logger.error(f"Invalid DICOM date format: {date_str}")
|
||||
return None
|
||||
|
||||
def parse_dicom_datetime(datetime_str):
|
||||
"""
|
||||
Parse DICOM datetime format (YYYYMMDDHHMMSS) to Python datetime.
|
||||
|
||||
Args:
|
||||
datetime_str (str): DICOM formatted datetime string
|
||||
|
||||
Returns:
|
||||
datetime: Python datetime object
|
||||
"""
|
||||
if not datetime_str:
|
||||
return None
|
||||
|
||||
# Handle various DICOM datetime formats
|
||||
try:
|
||||
if len(datetime_str) == 14: # YYYYMMDDHHMMSS
|
||||
return datetime.strptime(datetime_str, '%Y%m%d%H%M%S')
|
||||
elif len(datetime_str) == 12: # YYYYMMDDHHMM
|
||||
return datetime.strptime(datetime_str, '%Y%m%d%H%M')
|
||||
elif len(datetime_str) == 8: # YYYYMMDD
|
||||
return datetime.strptime(datetime_str, '%Y%m%d')
|
||||
else:
|
||||
logger.warning(f"Unexpected DICOM datetime format: {datetime_str}")
|
||||
return None
|
||||
except ValueError:
|
||||
logger.error(f"Invalid DICOM datetime format: {datetime_str}")
|
||||
return None
|
||||
Reference in New Issue
Block a user