Skip to content

Commit b810958

Browse files
committed
BF: make .%f optional while processing dates from DICOMs / in BIDS
ref: #657
1 parent e27017c commit b810958

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

heudiconv/bids.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
from collections import OrderedDict
88
import csv
9-
from datetime import datetime
109
import errno
1110
from glob import glob
1211
import hashlib
@@ -32,6 +31,7 @@
3231
remove_suffix,
3332
save_json,
3433
set_readonly,
34+
strptime_micr,
3535
update_json,
3636
)
3737

@@ -369,7 +369,9 @@ def tuneup_bids_json_files(json_files: list[str]) -> None:
369369
set_readonly(json_phasediffname)
370370

371371

372-
def add_participant_record(studydir: str, subject: str, age: str | None, sex: str | None) -> None:
372+
def add_participant_record(
373+
studydir: str, subject: str, age: str | None, sex: str | None
374+
) -> None:
373375
participants_tsv = op.join(studydir, "participants.tsv")
374376
participant_id = "sub-%s" % subject
375377

@@ -945,17 +947,17 @@ def select_fmap_from_compatible_groups(
945947
k for k, v in acq_times_fmaps.items() if v == first_acq_time
946948
][0]
947949
elif criterion == "Closest":
948-
json_acq_time = datetime.strptime(
950+
json_acq_time = strptime_micr(
949951
acq_times[
950952
# remove session folder and '.json', add '.nii.gz':
951953
remove_suffix(remove_prefix(json_file, sess_folder + op.sep), ".json")
952954
+ ".nii.gz"
953955
],
954-
"%Y-%m-%dT%H:%M:%S.%f",
956+
"%Y-%m-%dT%H:%M:%S[.%f]",
955957
)
956958
# differences in acquisition time (abs value):
957959
diff_fmaps_acq_times = {
958-
k: abs(datetime.strptime(v, "%Y-%m-%dT%H:%M:%S.%f") - json_acq_time)
960+
k: abs(strptime_micr(v, "%Y-%m-%dT%H:%M:%S[.%f]") - json_acq_time)
959961
for k, v in acq_times_fmaps.items()
960962
}
961963
min_diff_acq_times = sorted(diff_fmaps_acq_times.values())[0]

heudiconv/dicoms.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,14 @@
1515

1616
import pydicom as dcm
1717

18-
from .utils import SeqInfo, TempDirs, get_typed_attr, load_json, set_readonly
18+
from .utils import (
19+
SeqInfo,
20+
TempDirs,
21+
get_typed_attr,
22+
load_json,
23+
set_readonly,
24+
strptime_micr,
25+
)
1926

2027
if TYPE_CHECKING:
2128
if sys.version_info >= (3, 8):
@@ -481,16 +488,16 @@ def get_datetime_from_dcm(dcm_data: dcm.FileDataset) -> Optional[datetime.dateti
481488
acq_date = dcm_data.get("AcquisitionDate")
482489
acq_time = dcm_data.get("AcquisitionTime")
483490
if not (acq_date is None or acq_time is None):
484-
return datetime.datetime.strptime(acq_date + acq_time, "%Y%m%d%H%M%S.%f")
491+
return strptime_micr(acq_date + acq_time, "%Y%m%d%H%M%S[.%f]")
485492

486493
acq_dt = dcm_data.get("AcquisitionDateTime")
487494
if acq_dt is not None:
488-
return datetime.datetime.strptime(acq_dt, "%Y%m%d%H%M%S.%f")
495+
return strptime_micr(acq_dt, "%Y%m%d%H%M%S[.%f]")
489496

490497
series_date = dcm_data.get("SeriesDate")
491498
series_time = dcm_data.get("SeriesTime")
492499
if not (series_date is None or series_time is None):
493-
return datetime.datetime.strptime(series_date + series_time, "%Y%m%d%H%M%S.%f")
500+
return strptime_micr(series_date + series_time, "%Y%m%d%H%M%S[.%f]")
494501
return None
495502

496503

0 commit comments

Comments
 (0)