95 lines
3.8 KiB
Python
95 lines
3.8 KiB
Python
# Authors: The MNE-Python contributors.
|
|
# License: BSD-3-Clause
|
|
# Copyright the MNE-Python contributors.
|
|
|
|
from pathlib import Path
|
|
|
|
from ...utils import _check_option, _validate_type, get_subjects_dir, verbose
|
|
from ..utils import _manifest_check_download
|
|
|
|
_AGES = "2wk 1mo 2mo 3mo 4.5mo 6mo 7.5mo 9mo 10.5mo 12mo 15mo 18mo 2yr"
|
|
# https://github.com/christian-oreilly/infant_template_paper/releases
|
|
_ORIGINAL_URL = "https://github.com/christian-oreilly/infant_template_paper/releases/download/v0.1-alpha/{subject}.zip" # noqa: E501
|
|
# Formatted the same way as md5sum *.zip on Ubuntu:
|
|
_ORIGINAL_HASHES = """
|
|
851737d5f8f246883f2aef9819c6ec29 ANTS10-5Months3T.zip
|
|
32ab6d025f4311433a82e81374f1a045 ANTS1-0Months3T.zip
|
|
48ef349e7cc542fdf63ff36d7958ab57 ANTS12-0Months3T.zip
|
|
bba22c95aa97988c6e8892d6169ed317 ANTS15-0Months3T.zip
|
|
e1bfe5e3ef380592822ced446a4008c7 ANTS18-0Months3T.zip
|
|
fa7bee6c0985b9cd15ba53820cd72ccd ANTS2-0Months3T.zip
|
|
2ad90540cdf42837c09f8ce829458a35 ANTS2-0Weeks3T.zip
|
|
73e6a8b2579b7959a96f7d294ffb7393 ANTS2-0Years3T.zip
|
|
cb7b9752894e16a4938ddfe220f6286a ANTS3-0Months3T.zip
|
|
16b2a6804c7d5443cfba2ad6f7d4ac6a ANTS4-5Months3T.zip
|
|
dbdf2a9976121f2b106da96775690da3 ANTS6-0Months3T.zip
|
|
75fe37a1bc80ed6793a8abb47681d5ab ANTS7-5Months3T.zip
|
|
790f7dba0a264262e6c1c2dfdf216215 ANTS9-0Months3T.zip
|
|
"""
|
|
_MANIFEST_PATH = Path(__file__).parent
|
|
|
|
|
|
@verbose
|
|
def fetch_infant_template(age, subjects_dir=None, *, verbose=None):
|
|
"""Fetch and update an infant MRI template.
|
|
|
|
Parameters
|
|
----------
|
|
age : str
|
|
Age to download. Can be one of ``{'2wk', '1mo', '2mo', '3mo', '4.5mo',
|
|
'6mo', '7.5mo', '9mo', '10.5mo', '12mo', '15mo', '18mo', '2yr'}``.
|
|
subjects_dir : str | None
|
|
The path to download the template data to.
|
|
%(verbose)s
|
|
|
|
Returns
|
|
-------
|
|
subject : str
|
|
The standard subject name, e.g. ``ANTS4-5Month3T``.
|
|
|
|
Notes
|
|
-----
|
|
If you use these templates in your work, please cite
|
|
:footcite:`OReillyEtAl2021` and :footcite:`RichardsEtAl2016`.
|
|
|
|
.. versionadded:: 0.23
|
|
|
|
References
|
|
----------
|
|
.. footbibliography::
|
|
"""
|
|
# Code used to create the lists:
|
|
#
|
|
# $ for name in 2-0Weeks 1-0Months 2-0Months 3-0Months 4-5Months 6-0Months 7-5Months 9-0Months 10-5Months 12-0Months 15-0Months 18-0Months 2-0Years; do wget https://github.com/christian-oreilly/infant_template_paper/releases/download/v0.1-alpha/ANTS${name}3T.zip; done # noqa: E501
|
|
# $ md5sum ANTS*.zip
|
|
# $ python
|
|
# >>> import os.path as op
|
|
# >>> import zipfile
|
|
# >>> names = [f'ANTS{name}3T' for name in '2-0Weeks 1-0Months 2-0Months 3-0Months 4-5Months 6-0Months 7-5Months 9-0Months 10-5Months 12-0Months 15-0Months 18-0Months 2-0Years'.split()] # noqa: E501
|
|
# >>> for name in names:
|
|
# ... with zipfile.ZipFile(f'{name}.zip', 'r') as zip:
|
|
# ... names = sorted(name for name in zip.namelist() if not zipfile.Path(zip, name).is_dir()) # noqa: E501
|
|
# ... with open(f'{name}.txt', 'w') as fid:
|
|
# ... fid.write('\n'.join(names))
|
|
_validate_type(age, str, "age")
|
|
_check_option("age", age, _AGES.split())
|
|
subjects_dir = get_subjects_dir(subjects_dir, raise_error=True)
|
|
unit = dict(wk="Weeks", mo="Months", yr="Years")[age[-2:]]
|
|
first = age[:-2].split(".")[0]
|
|
dash = "-5" if ".5" in age else "-0"
|
|
subject = f"ANTS{first}{dash}{unit}3T"
|
|
# Actually get and create the files
|
|
subject_dir = subjects_dir / subject
|
|
subject_dir.mkdir(parents=True, exist_ok=True)
|
|
# .zip -> hash mapping
|
|
orig_hashes = dict(
|
|
line.strip().split()[::-1] for line in _ORIGINAL_HASHES.strip().splitlines()
|
|
)
|
|
_manifest_check_download(
|
|
manifest_path=_MANIFEST_PATH / f"{subject}.txt",
|
|
destination=subject_dir,
|
|
url=_ORIGINAL_URL.format(subject=subject),
|
|
hash_=orig_hashes[f"{subject}.zip"],
|
|
)
|
|
return subject
|