From 1dee509a8ba30455e41365dbebf7f50e27870394 Mon Sep 17 00:00:00 2001 From: Arnaud Bore Date: Tue, 5 Jan 2021 14:42:34 -0500 Subject: [PATCH 01/57] fix intendedFor --- dcm2bids/dcm2bids.py | 16 +++++++++----- dcm2bids/sidecar.py | 36 +++++++++++++++++++------------ dcm2bids/structure.py | 49 ++++++++++++++++++++++++++++++++----------- 3 files changed, 71 insertions(+), 30 deletions(-) diff --git a/dcm2bids/dcm2bids.py b/dcm2bids/dcm2bids.py index 59fe9047..4520a6ac 100644 --- a/dcm2bids/dcm2bids.py +++ b/dcm2bids/dcm2bids.py @@ -124,7 +124,6 @@ def run(self): sidecars.append( Sidecar(filename, self.config.get("compKeys", DEFAULT.compKeys)) ) - sidecars = sorted(sidecars) parser = SidecarPairing( sidecars, @@ -137,15 +136,18 @@ def run(self): parser.find_runs() self.logger.info("moving acquisitions into BIDS folder") + + intendedForList = [[] for i in range(len(parser.descriptions))] for acq in parser.acquisitions: - self.move(acq) + intendedForList = self.move(acq, intendedForList) check_latest() check_latest("dcm2niix") - def move(self, acquisition): + def move(self, acquisition, intendedForList): """Move an acquisition to BIDS format""" for srcFile in glob(acquisition.srcRoot + ".*"): + _, ext = splitext_(srcFile) dstFile = os.path.join(self.bidsDir, acquisition.dstRoot + ext) @@ -177,18 +179,22 @@ def move(self, acquisition): pass defaceTpl = self.config.get("defaceTpl") cmd = defaceTpl.format(srcFile=srcFile, dstFile=dstFile) + run_shell_command(cmd) + intendedForList[acquisition.indexSidecar].append(acquisition.dstIntendedFor + ext) - # use elif ext == ".json": - data = acquisition.dstSidecarData(self.config["descriptions"]) + data = acquisition.dstSidecarData(self.config["descriptions"], + intendedForList) save_json(dstFile, data) os.remove(srcFile) # just move else: os.rename(srcFile, dstFile) + intendedForList[acquisition.indexSidecar].append(acquisition.dstIntendedFor + ext) + return intendedForList def get_arguments(): """Load arguments for main""" diff --git a/dcm2bids/sidecar.py b/dcm2bids/sidecar.py index 73d41bad..61f90dc5 100644 --- a/dcm2bids/sidecar.py +++ b/dcm2bids/sidecar.py @@ -95,7 +95,7 @@ def __init__(self, sidecars, descriptions, searchMethod=DEFAULT.searchMethod, self._searchMethod = "" self.graph = OrderedDict() - self.aquisitions = [] + self.acquisitions = [] self.sidecars = sidecars self.descriptions = descriptions @@ -154,14 +154,14 @@ def build_graph(self): A graph (OrderedDict) """ graph = OrderedDict((_, []) for _ in self.sidecars) - possibleLinks = itertools.product(self.sidecars, self.descriptions) for sidecar, description in possibleLinks: criteria = description.get("criteria", None) if criteria and self.isLink(sidecar.data, criteria): - graph[sidecar].append(description) + graph[sidecar].append(description) self.graph = graph + return graph def isLink(self, data, criteria): @@ -213,32 +213,42 @@ def build_acquisitions(self, participant): A list of acquisition objects """ acquisitions = [] + acquisitions_intendedFor = [] self.logger.info("Sidecars pairing:") - for sidecar, descriptions in iteritems(self.graph): + for sidecar, valid_descriptions in iteritems(self.graph): + #for sidecar, descriptions in iteritems(self.graph): sidecarName = os.path.basename(sidecar.root) # only one description for the sidecar - if len(descriptions) == 1: - desc = descriptions[0] - acq = Acquisition(participant, srcSidecar=sidecar, **desc) - acquisitions.append(acq) + if len(valid_descriptions) == 1: + desc = valid_descriptions[0] + acq = Acquisition(participant, + srcSidecar=sidecar, **desc) + acq.indexSidecar = self.descriptions.index(desc) + + if acq.intendedFor != [None]: + acquisitions_intendedFor.append(acq) + else: + acquisitions.append(acq) self.logger.info("%s <- %s", acq.suffix, sidecarName) # sidecar with no link - elif len(descriptions) == 0: + elif len(valid_descriptions) == 0: self.logger.info("No Pairing <- %s", sidecarName) # sidecar with several links else: self.logger.warning("Several Pairing <- %s", sidecarName) - for desc in descriptions: - acq = Acquisition(participant, **desc) + for desc in valid_descriptions: + acq = Acquisition(participant, indexSidecar=index, + **desc) self.logger.warning(" -> %s", acq.suffix) - self.acquisitions = acquisitions - return acquisitions + self.acquisitions = acquisitions + acquisitions_intendedFor + + return acquisitions + acquisitions_intendedFor def find_runs(self): """ diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index d03c3b4d..94ea9d19 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -113,6 +113,7 @@ def __init__( participant, dataType, modalityLabel, + indexSidecar=None, customLabels="", srcSidecar=None, sidecarChanges=None, @@ -123,16 +124,19 @@ def __init__( self._modalityLabel = "" self._customLabels = "" self._intendedFor = None + self._indexSidecar = None self.participant = participant self.dataType = dataType self.modalityLabel = modalityLabel self.customLabels = customLabels self.srcSidecar = srcSidecar + if sidecarChanges is None: self.sidecarChanges = {} else: self.sidecarChanges = sidecarChanges + if intendedFor is None: self.intendedFor = IntendedFor else: @@ -206,6 +210,18 @@ def dstRoot(self): self.participant.prefix + self.suffix, ) + @property + def dstIntendedFor(self): + """ + Return: + The destination root inside the BIDS structure for intendedFor + """ + return opj( + self.participant.session, + self.dataType, + self.participant.prefix + self.suffix, + ) + @property def intendedFor(self): return self._intendedFor @@ -217,27 +233,36 @@ def intendedFor(self, value): else: self._intendedFor = [value] - def dstSidecarData(self, descriptions): + @property + def indexSidecar(self): + """ + Returns: + A int '_' + """ + return self._indexSidecar + + @indexSidecar.setter + def indexSidecar(self, value): + """ + Returns: + A int '_' + """ + self._indexSidecar = value + + + def dstSidecarData(self, descriptions, intendedForList): """ """ data = self.srcSidecar.origData data["Dcm2bidsVersion"] = __version__ + # intendedFor key if self.intendedFor != [None]: intendedValue = [] - for index in self.intendedFor: - intendedDesc = descriptions[index] - session = self.participant.session - dataType = intendedDesc["dataType"] - - niiFile = self.participant.prefix - niiFile += self.prepend(intendedDesc.get("customLabels", "")) - niiFile += self.prepend(intendedDesc["modalityLabel"]) - niiFile += ".nii.gz" - - intendedValue.append(opj(session, dataType, niiFile).replace("\\", "/")) + for index in self.intendedFor: + intendedValue = intendedValue + intendedForList[index] if len(intendedValue) == 1: data["IntendedFor"] = intendedValue[0] From b58050a092ae5d7acc856c5b06add10086a6785e Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Thu, 14 Apr 2022 11:03:26 -0400 Subject: [PATCH 02/57] intendedFor only for nii.z files --- dcm2bids/dcm2bids.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dcm2bids/dcm2bids.py b/dcm2bids/dcm2bids.py index 4520a6ac..92c7ab1d 100644 --- a/dcm2bids/dcm2bids.py +++ b/dcm2bids/dcm2bids.py @@ -192,7 +192,8 @@ def move(self, acquisition, intendedForList): # just move else: os.rename(srcFile, dstFile) - intendedForList[acquisition.indexSidecar].append(acquisition.dstIntendedFor + ext) + if ext == ".nii.gz": + intendedForList[acquisition.indexSidecar].append(acquisition.dstIntendedFor + ext) return intendedForList From 255c44918e938f2d2e3227ff414b1ba2c82f15c3 Mon Sep 17 00:00:00 2001 From: Samuel Guay Date: Thu, 14 Apr 2022 12:42:27 -0400 Subject: [PATCH 03/57] reformat tables in oneliners --- pyproject.toml | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ea91b059..f491403e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,27 +63,16 @@ palette = {scheme = "preference"} # Additional settings for plugins -[[tool.portray.mkdocs.markdown_extensions]] -[tool.portray.mkdocs.markdown_extensions.toc] -permalink = "⚓︎" - -[[tool.portray.mkdocs.markdown_extensions]] -[tool.portray.mkdocs.markdown_extensions."pymdownx.highlight"] -linenums = true # Always add line numbers in code blocks - -[[tool.portray.mkdocs.markdown_extensions]] -[tool.portray.mkdocs.markdown_extensions."pymdownx.tasklist"] -custom_checkbox = true -clickable_checkbox = false - -# [[tool.portray.mkdocs.plugins]] -# [tool.portray.mkdocs.plugins.git-revision-date] -# enabled_if_env = "CI" - -# [[tool.portray.mkdocs.plugins]] -# [tool.portray.mkdocs.plugins.git-revision-date-localized] -# type = "date" -# fallback_to_build_date = true + +markdown_extensions.toc = { permalink = "⚓︎" } + # Always add line numbers in code blocks +markdown_extensions."pymdownx.highlight" = { linenums = true } + +markdown_extensions."pymdownx.tasklist" = {custom_checkbox = true, clickable_checkbox = false } + + +plugins."git-revision-date" = {enabled_if_env = "CI"} +plugins.git-revision-date-localized = {type = "date", fallback_to_build_date = true} ## Footer icon in bottom-right corner From 986d2c2213b31d710b4148dd778426bf88edabdd Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Thu, 14 Apr 2022 13:13:34 -0400 Subject: [PATCH 04/57] remove python3.6 --- .github/workflows/tests.yml | 2 +- dcm2bids/scaffold/__init__.py | 7 +------ setup.py | 9 ++------- tox.ini | 9 ++++----- 4 files changed, 8 insertions(+), 19 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 27e481fb..6aa28bbe 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,7 +13,7 @@ jobs: - ubuntu-latest # ubuntu-18.04 - macos-latest # macOS-10.14 - windows-latest # windows-2019 - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.7, 3.8, 3.9] steps: - uses: actions/checkout@v1 diff --git a/dcm2bids/scaffold/__init__.py b/dcm2bids/scaffold/__init__.py index d0a1cabb..92a088ad 100644 --- a/dcm2bids/scaffold/__init__.py +++ b/dcm2bids/scaffold/__init__.py @@ -6,12 +6,7 @@ import datetime import os import shutil -if sys.version_info >= (3,7,0): - import importlib.resources as resources -else: - # backport: https://pypi.org/project/importlib-resources/ - # TODO: drop this when py3.6 is end-of-life - import importlib_resources as resources +import importlib.resources as resources from ..utils import write_txt diff --git a/setup.py b/setup.py index 36586ec4..a252cae0 100755 --- a/setup.py +++ b/setup.py @@ -55,7 +55,6 @@ def install_requires(): "Operating System :: Microsoft :: Windows", "Operating System :: Unix", "Programming Language :: Python", - "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", @@ -71,14 +70,10 @@ def install_requires(): version=VERSION, packages=find_packages(exclude=["tests"]), entry_points=ENTRY_POINTS, - python_requires=">=3.6", + python_requires=">=3.7", use_scm_version=True, setup_requires=['setuptools_scm'], - install_requires=[ - 'future>=0.17.1', - # TODO: drop this when py3.6 is end-of-life - 'importlib_resources ; python_version<"3.7"', - ], + install_requires=['future>=0.17.1'], include_package_data=True, author=AUTHOR, author_email=AUTHOR_EMAIL, diff --git a/tox.ini b/tox.ini index f5444bc0..b0d10f6f 100644 --- a/tox.ini +++ b/tox.ini @@ -4,12 +4,11 @@ # and then run "tox" from this directory. [tox] -envlist = py36, py37, py38, py39 -; envlist = clean, py36, py37, py38, py39, report +envlist = py37, py38, py39 +; envlist = clean, py37, py38, py39, report [gh-actions] python = - 3.6: py36 3.7: py37 3.8: py38 3.9: py39 @@ -19,8 +18,8 @@ deps = -rrequirements-test.txt commands = pytest --cov --cov-report=xml -s ; commands = pytest --cov --cov-append --black --flake8 --pylint ; depends = -; {py36, py37, py38}: clean -; report: py36, py37, py38, py39 +; {py37, py38, py39}: clean +; report: py37, py38, py39 ; [testenv:report] ; deps = coverage From 0d4373679d6ead686b05d43632d7b8d3fa2c0c46 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Thu, 14 Apr 2022 15:19:31 -0400 Subject: [PATCH 05/57] fix tests --- dcm2bids/dcm2bids.py | 8 ++++++-- dcm2bids/sidecar.py | 2 +- tests/test_structure.py | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/dcm2bids/dcm2bids.py b/dcm2bids/dcm2bids.py index 92c7ab1d..a96a1b45 100644 --- a/dcm2bids/dcm2bids.py +++ b/dcm2bids/dcm2bids.py @@ -125,6 +125,8 @@ def run(self): Sidecar(filename, self.config.get("compKeys", DEFAULT.compKeys)) ) + sidecars = sorted(sidecars) + parser = SidecarPairing( sidecars, self.config["descriptions"], @@ -192,8 +194,10 @@ def move(self, acquisition, intendedForList): # just move else: os.rename(srcFile, dstFile) - if ext == ".nii.gz": - intendedForList[acquisition.indexSidecar].append(acquisition.dstIntendedFor + ext) + + intendedFile = acquisition.dstIntendedFor + ".nii.gz" + if not intendedFile in intendedForList[acquisition.indexSidecar]: + intendedForList[acquisition.indexSidecar].append(intendedFile) return intendedForList diff --git a/dcm2bids/sidecar.py b/dcm2bids/sidecar.py index 61f90dc5..2ffbd820 100644 --- a/dcm2bids/sidecar.py +++ b/dcm2bids/sidecar.py @@ -242,7 +242,7 @@ def build_acquisitions(self, participant): else: self.logger.warning("Several Pairing <- %s", sidecarName) for desc in valid_descriptions: - acq = Acquisition(participant, indexSidecar=index, + acq = Acquisition(participant, indexSidecar=self.descriptions.index(desc), **desc) self.logger.warning(" -> %s", acq.suffix) diff --git a/tests/test_structure.py b/tests/test_structure.py index 936dc600..396c3086 100644 --- a/tests/test_structure.py +++ b/tests/test_structure.py @@ -29,5 +29,5 @@ ) def test_acquisition_get_dst_path(name, session, modality, custom, expected): participant = Participant(name, session) - acquisition = Acquisition(participant, "anat", modality, custom) + acquisition = Acquisition(participant, "anat", modality, customLabels=custom) assert acquisition.dstRoot == expected From 874c3902c9f8e371f1e4b161162b63ab096b6604 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Thu, 14 Apr 2022 15:29:31 -0400 Subject: [PATCH 06/57] BF test windows --- tests/test_dcm2bids.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_dcm2bids.py b/tests/test_dcm2bids.py index 6b7e00f4..7330a684 100644 --- a/tests/test_dcm2bids.py +++ b/tests/test_dcm2bids.py @@ -57,7 +57,7 @@ def test_dcm2bids(): fmapFile = os.path.join(bidsDir.name, "sub-01", "fmap", "sub-01_echo-492_fmap.json") data = load_json(fmapFile) fmapMtime = os.stat(fmapFile).st_mtime - assert data["IntendedFor"] == "dwi/sub-01_dwi.nii.gz" + assert data["IntendedFor"] == os.path.join("dwi", "sub-01_dwi.nii.gz") data = load_json( os.path.join( From 4885bec0a6930edd00759e055bd3e427a360a28d Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Thu, 14 Apr 2022 19:37:26 -0400 Subject: [PATCH 07/57] add entity table order --- dcm2bids/structure.py | 22 ++++++++++++++++++++-- dcm2bids/utils.py | 6 ++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index 94ea9d19..f7ce3e13 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -207,7 +207,7 @@ def dstRoot(self): return opj( self.participant.directory, self.dataType, - self.participant.prefix + self.suffix, + self.set_order_entity_table(), ) @property @@ -219,9 +219,27 @@ def dstIntendedFor(self): return opj( self.participant.session, self.dataType, - self.participant.prefix + self.suffix, + self.set_order_entity_table(), ) + def set_order_entity_table(self): + curr_name = self.participant.prefix + self.suffix + new_name = '' + curr_dict = dict(x.split("-") for x in curr_name.split("_") if len(x.split('-'))==2) + ext = [x for x in curr_name.split("_") if len(x.split('-'))==1] + + for curr_key in DEFAULT.entityTableKeys: + if curr_key in curr_dict.keys(): + new_name = '_'.join([new_name, curr_key + '-' + + curr_dict[curr_key]]) + curr_dict.pop(curr_key, None) + for curr_key in curr_dict.keys(): + new_name = '_'.join([new_name, curr_key + '-' + + curr_dict[curr_key]]) + new_name = new_name[1:] + new_name = '_'.join([new_name,ext[0]]) + return new_name + @property def intendedFor(self): return self._intendedFor diff --git a/dcm2bids/utils.py b/dcm2bids/utils.py index 4fae5c2f..20101a8a 100644 --- a/dcm2bids/utils.py +++ b/dcm2bids/utils.py @@ -37,6 +37,12 @@ class DEFAULT(object): runTpl = "_run-{:02d}" caseSensitive = True + # Entity table: + # https://bids-specification.readthedocs.io/en/latest/99-appendices/04-entity-table.html#appendix-iv-entity-table + entityTableKeys = ["sub","ses","task","acq","ce","rec","dir", + "run","mod","echo","flip","inv","mt","part", + "recording"] + # misc tmpDirName = "tmp_dcm2bids" helperDir = "helper" From 5d73836d75c18171a9b7d94130a993b9b765cc34 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Thu, 14 Apr 2022 19:51:28 -0400 Subject: [PATCH 08/57] add docstring --- dcm2bids/structure.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index f7ce3e13..a7ce0f80 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -223,6 +223,11 @@ def dstIntendedFor(self): ) def set_order_entity_table(self): + """ + Return: + The destination filename formated following BIDS entity key table + https://bids-specification.readthedocs.io/en/latest/99-appendices/04-entity-table.html#appendix-iv-entity-table + """ curr_name = self.participant.prefix + self.suffix new_name = '' curr_dict = dict(x.split("-") for x in curr_name.split("_") if len(x.split('-'))==2) @@ -233,6 +238,7 @@ def set_order_entity_table(self): new_name = '_'.join([new_name, curr_key + '-' + curr_dict[curr_key]]) curr_dict.pop(curr_key, None) + for curr_key in curr_dict.keys(): new_name = '_'.join([new_name, curr_key + '-' + curr_dict[curr_key]]) From fc38fdadc8b6c6071d949a973efa28678d46f4c1 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Thu, 14 Apr 2022 20:12:31 -0400 Subject: [PATCH 09/57] add warning message --- dcm2bids/structure.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index a7ce0f80..cc9fae5a 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -2,7 +2,7 @@ """k""" - +import logging from os.path import join as opj from future.utils import iteritems from .utils import DEFAULT @@ -132,6 +132,8 @@ def __init__( self.customLabels = customLabels self.srcSidecar = srcSidecar + self.logger = logging.getLogger(__name__) + if sidecarChanges is None: self.sidecarChanges = {} else: @@ -240,6 +242,9 @@ def set_order_entity_table(self): curr_dict.pop(curr_key, None) for curr_key in curr_dict.keys(): + self.logger.warning( + "Entity \"%s\" is not a valid BIDS entity.", curr_key + ) new_name = '_'.join([new_name, curr_key + '-' + curr_dict[curr_key]]) new_name = new_name[1:] From 307797879ea79b1f14b3222397f641f487ac2f07 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Thu, 14 Apr 2022 20:16:19 -0400 Subject: [PATCH 10/57] fix pep8 --- dcm2bids/structure.py | 8 +++----- dcm2bids/utils.py | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index cc9fae5a..094d20ed 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -232,8 +232,8 @@ def set_order_entity_table(self): """ curr_name = self.participant.prefix + self.suffix new_name = '' - curr_dict = dict(x.split("-") for x in curr_name.split("_") if len(x.split('-'))==2) - ext = [x for x in curr_name.split("_") if len(x.split('-'))==1] + curr_dict = dict(x.split("-") for x in curr_name.split("_") if len(x.split('-')) == 2) + ext = [x for x in curr_name.split("_") if len(x.split('-')) == 1] for curr_key in DEFAULT.entityTableKeys: if curr_key in curr_dict.keys(): @@ -248,7 +248,7 @@ def set_order_entity_table(self): new_name = '_'.join([new_name, curr_key + '-' + curr_dict[curr_key]]) new_name = new_name[1:] - new_name = '_'.join([new_name,ext[0]]) + new_name = '_'.join([new_name, ext[0]]) return new_name @property @@ -278,14 +278,12 @@ def indexSidecar(self, value): """ self._indexSidecar = value - def dstSidecarData(self, descriptions, intendedForList): """ """ data = self.srcSidecar.origData data["Dcm2bidsVersion"] = __version__ - # intendedFor key if self.intendedFor != [None]: intendedValue = [] diff --git a/dcm2bids/utils.py b/dcm2bids/utils.py index 20101a8a..19481317 100644 --- a/dcm2bids/utils.py +++ b/dcm2bids/utils.py @@ -39,8 +39,8 @@ class DEFAULT(object): # Entity table: # https://bids-specification.readthedocs.io/en/latest/99-appendices/04-entity-table.html#appendix-iv-entity-table - entityTableKeys = ["sub","ses","task","acq","ce","rec","dir", - "run","mod","echo","flip","inv","mt","part", + entityTableKeys = ["sub", "ses", "task", "acq", "ce", "rec", "dir", + "run", "mod", "echo", "flip", "inv", "mt", "part", "recording"] # misc From 8a16cbabb8e5a27152b6ba7b87ae6d0970fd1949 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Fri, 15 Apr 2022 11:19:14 -0400 Subject: [PATCH 11/57] Update dcm2bids/structure.py Co-authored-by: Samuel Guay --- dcm2bids/structure.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index 094d20ed..ed2b0bd4 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -227,8 +227,8 @@ def dstIntendedFor(self): def set_order_entity_table(self): """ Return: - The destination filename formated following BIDS entity key table - https://bids-specification.readthedocs.io/en/latest/99-appendices/04-entity-table.html#appendix-iv-entity-table + The destination filename formatted following the v1.7.0 BIDS entity key table + https://bids-specification.readthedocs.io/en/v1.7.0/99-appendices/04-entity-table.html """ curr_name = self.participant.prefix + self.suffix new_name = '' From 4917144ba182b1d2ae3b1ce858e03b29cf05e816 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Fri, 15 Apr 2022 11:19:26 -0400 Subject: [PATCH 12/57] Update dcm2bids/utils.py Co-authored-by: Samuel Guay --- dcm2bids/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dcm2bids/utils.py b/dcm2bids/utils.py index 19481317..fbffa859 100644 --- a/dcm2bids/utils.py +++ b/dcm2bids/utils.py @@ -38,7 +38,7 @@ class DEFAULT(object): caseSensitive = True # Entity table: - # https://bids-specification.readthedocs.io/en/latest/99-appendices/04-entity-table.html#appendix-iv-entity-table + # https://bids-specification.readthedocs.io/en/v1.7.0/99-appendices/04-entity-table.html entityTableKeys = ["sub", "ses", "task", "acq", "ce", "rec", "dir", "run", "mod", "echo", "flip", "inv", "mt", "part", "recording"] From db9486a0e3d523d93b3ed11fac46aaff3b7d8b23 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Fri, 15 Apr 2022 11:44:05 -0400 Subject: [PATCH 13/57] Update dcm2bids/structure.py Co-authored-by: Samuel Guay --- dcm2bids/structure.py | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index ed2b0bd4..ba653e1f 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -230,25 +230,38 @@ def set_order_entity_table(self): The destination filename formatted following the v1.7.0 BIDS entity key table https://bids-specification.readthedocs.io/en/v1.7.0/99-appendices/04-entity-table.html """ - curr_name = self.participant.prefix + self.suffix + current_name = self.participant.prefix + self.suffix new_name = '' - curr_dict = dict(x.split("-") for x in curr_name.split("_") if len(x.split('-')) == 2) - ext = [x for x in curr_name.split("_") if len(x.split('-')) == 1] + current_dict = dict(x.split("-") for x in current_name.split("_") if len(x.split('-')) == 2) + suffix_list = [x for x in current_name.split("_") if len(x.split('-')) == 1] - for curr_key in DEFAULT.entityTableKeys: - if curr_key in curr_dict.keys(): - new_name = '_'.join([new_name, curr_key + '-' + - curr_dict[curr_key]]) - curr_dict.pop(curr_key, None) + for current_key in DEFAULT.entityTableKeys: + if current_key in current_dict and new_name != '': + new_name += f"_{current_key}-{current_dict[current_key]}" + elif current_key in current_dict: + new_name = f"{current_key}-{current_dict[current_key]}" + current_dict.pop(current_key, None) - for curr_key in curr_dict.keys(): + for current_key in current_dict: self.logger.warning( - "Entity \"%s\" is not a valid BIDS entity.", curr_key - ) - new_name = '_'.join([new_name, curr_key + '-' + - curr_dict[curr_key]]) - new_name = new_name[1:] - new_name = '_'.join([new_name, ext[0]]) + f"Entity '{current_key}' is not a valid BIDS entity." + ) + new_name = f"{new_name}_{current_key}-{current_dict[current_key]}" + + new_name = f"{new_name}_{'_'.join(suffix_list)}" # Allow multiple single key (without value) + + if len(suffix_list) != 1: + self.logger.warning( + f"There was more than one suffix found ({suffix_list}), this is not BIDS compliant. Make sure you know what you are doing." + ) + + if current_name != new_name: + self.logger.warning( + f"""✅ Filename was reordered according to BIDS entity table order: + from: {current_name} + to: {new_name}""" + ) + return new_name @property From a8648be7e35c4e850cdd46475450465ee852555b Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Fri, 15 Apr 2022 18:13:41 -0400 Subject: [PATCH 14/57] Fix multiple print when reordering entities --- dcm2bids/dcm2bids.py | 12 ++++++------ dcm2bids/sidecar.py | 10 +++++----- dcm2bids/structure.py | 42 ++++++++++++++++++++++++++---------------- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/dcm2bids/dcm2bids.py b/dcm2bids/dcm2bids.py index a96a1b45..6b842e07 100644 --- a/dcm2bids/dcm2bids.py +++ b/dcm2bids/dcm2bids.py @@ -141,11 +141,9 @@ def run(self): intendedForList = [[] for i in range(len(parser.descriptions))] for acq in parser.acquisitions: + acq.setDstFile() intendedForList = self.move(acq, intendedForList) - check_latest() - check_latest("dcm2niix") - def move(self, acquisition, intendedForList): """Move an acquisition to BIDS format""" for srcFile in glob(acquisition.srcRoot + ".*"): @@ -153,8 +151,6 @@ def move(self, acquisition, intendedForList): _, ext = splitext_(srcFile) dstFile = os.path.join(self.bidsDir, acquisition.dstRoot + ext) - # os.makedirs(os.path.dirname(dstFile), exist_ok=True) - # python2 compatibility if not os.path.exists(os.path.dirname(dstFile)): os.makedirs(os.path.dirname(dstFile)) @@ -196,11 +192,12 @@ def move(self, acquisition, intendedForList): os.rename(srcFile, dstFile) intendedFile = acquisition.dstIntendedFor + ".nii.gz" - if not intendedFile in intendedForList[acquisition.indexSidecar]: + if intendedFile not in intendedForList[acquisition.indexSidecar]: intendedForList[acquisition.indexSidecar].append(intendedFile) return intendedForList + def get_arguments(): """Load arguments for main""" parser = argparse.ArgumentParser( @@ -298,6 +295,9 @@ def main(): ) return 1 + check_latest() + check_latest("dcm2niix") + app = Dcm2bids(**vars(args)) return app.run() diff --git a/dcm2bids/sidecar.py b/dcm2bids/sidecar.py index 2ffbd820..7085b6b2 100644 --- a/dcm2bids/sidecar.py +++ b/dcm2bids/sidecar.py @@ -158,7 +158,7 @@ def build_graph(self): for sidecar, description in possibleLinks: criteria = description.get("criteria", None) if criteria and self.isLink(sidecar.data, criteria): - graph[sidecar].append(description) + graph[sidecar].append(description) self.graph = graph @@ -189,7 +189,7 @@ def compare(name, pattern): result = [] for tag, pattern in iteritems(criteria): - name = data.get(tag, '')# or '' + name = data.get(tag, '') if isinstance(name, list): try: @@ -217,7 +217,6 @@ def build_acquisitions(self, participant): self.logger.info("Sidecars pairing:") for sidecar, valid_descriptions in iteritems(self.graph): - #for sidecar, descriptions in iteritems(self.graph): sidecarName = os.path.basename(sidecar.root) # only one description for the sidecar @@ -242,13 +241,14 @@ def build_acquisitions(self, participant): else: self.logger.warning("Several Pairing <- %s", sidecarName) for desc in valid_descriptions: - acq = Acquisition(participant, indexSidecar=self.descriptions.index(desc), + acq = Acquisition(participant, + indexSidecar=self.descriptions.index(desc), **desc) self.logger.warning(" -> %s", acq.suffix) self.acquisitions = acquisitions + acquisitions_intendedFor - return acquisitions + acquisitions_intendedFor + return self.acquisitions def find_runs(self): """ diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index ba653e1f..2b9fe5e9 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -"""k""" +"""Participant class""" import logging from os.path import join as opj @@ -121,6 +121,8 @@ def __init__( IntendedFor=None, **kwargs ): + self.logger = logging.getLogger(__name__) + self._modalityLabel = "" self._customLabels = "" self._intendedFor = None @@ -132,8 +134,6 @@ def __init__( self.customLabels = customLabels self.srcSidecar = srcSidecar - self.logger = logging.getLogger(__name__) - if sidecarChanges is None: self.sidecarChanges = {} else: @@ -144,6 +144,9 @@ def __init__( else: self.intendedFor = intendedFor + self.bidsCompliant = {} + self.dstFile = '' + def __eq__(self, other): return ( self.dataType == other.dataType @@ -209,7 +212,7 @@ def dstRoot(self): return opj( self.participant.directory, self.dataType, - self.set_order_entity_table(), + self.dstFile, ) @property @@ -221,15 +224,16 @@ def dstIntendedFor(self): return opj( self.participant.session, self.dataType, - self.set_order_entity_table(), + self.dstFile, ) - def set_order_entity_table(self): + def setDstFile(self): """ Return: The destination filename formatted following the v1.7.0 BIDS entity key table https://bids-specification.readthedocs.io/en/v1.7.0/99-appendices/04-entity-table.html """ + bidsCompliant = [] current_name = self.participant.prefix + self.suffix new_name = '' current_dict = dict(x.split("-") for x in current_name.split("_") if len(x.split('-')) == 2) @@ -243,26 +247,32 @@ def set_order_entity_table(self): current_dict.pop(current_key, None) for current_key in current_dict: - self.logger.warning( - f"Entity '{current_key}' is not a valid BIDS entity." - ) new_name = f"{new_name}_{current_key}-{current_dict[current_key]}" - new_name = f"{new_name}_{'_'.join(suffix_list)}" # Allow multiple single key (without value) + if current_dict: + self.logger.warning("Entity \"{}\"".format(list(current_dict.keys())) + + " is not a valid BIDS entity.") + + new_name = f"{new_name}_{'_'.join(suffix_list)}" # Allow multiple single key (without value) if len(suffix_list) != 1: - self.logger.warning( - f"There was more than one suffix found ({suffix_list}), this is not BIDS compliant. Make sure you know what you are doing." - ) + self.logger.warning("There was more than one suffix found " + "({}), this is not ".format(suffix_list) + + "BIDS compliant. Make sure you know what " + "you are doing.") if current_name != new_name: + bidsCompliant.append({'name': new_name, + 'old_name': current_name}) self.logger.warning( f"""✅ Filename was reordered according to BIDS entity table order: from: {current_name} - to: {new_name}""" - ) + to: {new_name}""") + + for d in bidsCompliant: + self.bidsCompliant.update(d) - return new_name + self.dstFile = new_name @property def intendedFor(self): From 55dde246d26f71d82fd822d80ff10384b3d79514 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Fri, 15 Apr 2022 20:24:16 -0400 Subject: [PATCH 15/57] fix tests --- dcm2bids/sidecar.py | 1 + dcm2bids/structure.py | 4 ---- tests/test_dcm2bids.py | 3 +-- tests/test_structure.py | 1 + 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/dcm2bids/sidecar.py b/dcm2bids/sidecar.py index 7085b6b2..f3ad1ae5 100644 --- a/dcm2bids/sidecar.py +++ b/dcm2bids/sidecar.py @@ -225,6 +225,7 @@ def build_acquisitions(self, participant): acq = Acquisition(participant, srcSidecar=sidecar, **desc) acq.indexSidecar = self.descriptions.index(desc) + acq.setDstFile() if acq.intendedFor != [None]: acquisitions_intendedFor.append(acq) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index 2b9fe5e9..9af2075b 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -144,7 +144,6 @@ def __init__( else: self.intendedFor = intendedFor - self.bidsCompliant = {} self.dstFile = '' def __eq__(self, other): @@ -269,9 +268,6 @@ def setDstFile(self): from: {current_name} to: {new_name}""") - for d in bidsCompliant: - self.bidsCompliant.update(d) - self.dstFile = new_name @property diff --git a/tests/test_dcm2bids.py b/tests/test_dcm2bids.py index 7330a684..d20d3b34 100644 --- a/tests/test_dcm2bids.py +++ b/tests/test_dcm2bids.py @@ -96,8 +96,7 @@ def test_caseSensitive_false(): app.run() layout = BIDSLayout(bidsDir.name, - validate=False, - ignore='tmp_dcm2bids') + validate=False) path_dwi = os.path.join(bidsDir.name, "sub-01", diff --git a/tests/test_structure.py b/tests/test_structure.py index 396c3086..6f374871 100644 --- a/tests/test_structure.py +++ b/tests/test_structure.py @@ -30,4 +30,5 @@ def test_acquisition_get_dst_path(name, session, modality, custom, expected): participant = Participant(name, session) acquisition = Acquisition(participant, "anat", modality, customLabels=custom) + acquisition.setDstFile() assert acquisition.dstRoot == expected From fb77dd5fac8465d520b914acbebe5fc75185baa4 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Fri, 15 Apr 2022 21:16:29 -0400 Subject: [PATCH 16/57] remove relicat --- dcm2bids/structure.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index 9af2075b..dcb9a81d 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -232,7 +232,6 @@ def setDstFile(self): The destination filename formatted following the v1.7.0 BIDS entity key table https://bids-specification.readthedocs.io/en/v1.7.0/99-appendices/04-entity-table.html """ - bidsCompliant = [] current_name = self.participant.prefix + self.suffix new_name = '' current_dict = dict(x.split("-") for x in current_name.split("_") if len(x.split('-')) == 2) @@ -261,8 +260,6 @@ def setDstFile(self): "you are doing.") if current_name != new_name: - bidsCompliant.append({'name': new_name, - 'old_name': current_name}) self.logger.warning( f"""✅ Filename was reordered according to BIDS entity table order: from: {current_name} From c5814a917c788a3f1723789f29ee69c8ec61be50 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Fri, 15 Apr 2022 21:51:28 -0400 Subject: [PATCH 17/57] Update dcm2bids/structure.py Co-authored-by: Samuel Guay --- dcm2bids/structure.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index dcb9a81d..5763cec3 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -255,8 +255,8 @@ def setDstFile(self): if len(suffix_list) != 1: self.logger.warning("There was more than one suffix found " - "({}), this is not ".format(suffix_list) + - "BIDS compliant. Make sure you know what " + f"({suffix_list}). this is not BIDS " + "compliant. Make sure you know what" "you are doing.") if current_name != new_name: From 943a8046c39b0e6ea867360dde58391e1822b5c2 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Fri, 15 Apr 2022 21:51:45 -0400 Subject: [PATCH 18/57] Update dcm2bids/structure.py Co-authored-by: Samuel Guay --- dcm2bids/structure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index 5763cec3..b808699f 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -251,7 +251,7 @@ def setDstFile(self): self.logger.warning("Entity \"{}\"".format(list(current_dict.keys())) + " is not a valid BIDS entity.") - new_name = f"{new_name}_{'_'.join(suffix_list)}" # Allow multiple single key (without value) + new_name += f"_{'_'.join(suffix_list)}" # Allow multiple single key (without value) if len(suffix_list) != 1: self.logger.warning("There was more than one suffix found " From 312e1084b5782ad9e7ba3c0404e2928b796a9b48 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Fri, 15 Apr 2022 21:51:54 -0400 Subject: [PATCH 19/57] Update dcm2bids/structure.py Co-authored-by: Samuel Guay --- dcm2bids/structure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index b808699f..860245e5 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -245,7 +245,7 @@ def setDstFile(self): current_dict.pop(current_key, None) for current_key in current_dict: - new_name = f"{new_name}_{current_key}-{current_dict[current_key]}" + new_name += f"_current_key}-{current_dict[current_key]}" if current_dict: self.logger.warning("Entity \"{}\"".format(list(current_dict.keys())) + From 545b267dee937bcc6d01098f478da4e5424d151a Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Fri, 15 Apr 2022 21:56:54 -0400 Subject: [PATCH 20/57] fix typo --- dcm2bids/structure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dcm2bids/structure.py b/dcm2bids/structure.py index 860245e5..72156820 100644 --- a/dcm2bids/structure.py +++ b/dcm2bids/structure.py @@ -245,7 +245,7 @@ def setDstFile(self): current_dict.pop(current_key, None) for current_key in current_dict: - new_name += f"_current_key}-{current_dict[current_key]}" + new_name += f"_{current_key}-{current_dict[current_key]}" if current_dict: self.logger.warning("Entity \"{}\"".format(list(current_dict.keys())) + From cfdae8858ea1744c8c35e9d856b86992065c0b08 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Sat, 16 Apr 2022 23:26:07 -0400 Subject: [PATCH 21/57] suggestion_to_fix_path --- dcm2bids/dcm2bids.py | 43 ++++++++++++------------------------------- dcm2bids/dcm2niix.py | 5 +++-- dcm2bids/utils.py | 24 +++++++++++++++++++++--- docs/4-advanced.md | 2 +- 4 files changed, 37 insertions(+), 37 deletions(-) diff --git a/dcm2bids/dcm2bids.py b/dcm2bids/dcm2bids.py index 6b842e07..cc6653cb 100644 --- a/dcm2bids/dcm2bids.py +++ b/dcm2bids/dcm2bids.py @@ -13,7 +13,8 @@ from .logger import setup_logging from .sidecar import Sidecar, SidecarPairing from .structure import Participant -from .utils import DEFAULT, load_json, save_json, run_shell_command, splitext_ +from .utils import (DEFAULT, load_json, save_json, + splitext_, run_shell_command, valid_path) from .version import __version__, check_latest, dcm2niix_version @@ -47,8 +48,8 @@ def __init__( self._dicomDirs = [] self.dicomDirs = dicom_dir - self.bidsDir = output_dir - self.config = load_json(config) + self.bidsDir = valid_path(output_dir) + self.config = load_json(valid_path(config)) self.participant = Participant(participant, session) self.clobber = clobber self.forceDcm2niix = forceDcm2niix @@ -74,22 +75,25 @@ def dicomDirs(self): @dicomDirs.setter def dicomDirs(self, value): + if isinstance(value, list): dicom_dirs = value else: dicom_dirs = [value] dir_not_found = [] + valid_dirs = [] for _dir in dicom_dirs: + _dir = valid_path(_dir) if os.path.isdir(_dir): - pass + valid_dirs.append(_dir) else: dir_not_found.append(_dir) if dir_not_found: raise FileNotFoundError(dir_not_found) - self._dicomDirs = dicom_dirs + self._dicomDirs = valid_dirs def set_logger(self): """ Set a basic logger""" @@ -176,9 +180,11 @@ def move(self, acquisition, intendedForList): except FileNotFoundError: pass defaceTpl = self.config.get("defaceTpl") - cmd = defaceTpl.format(srcFile=srcFile, dstFile=dstFile) + cmd = [w.replace('srcFile', srcFile) for w in defaceTpl] + cmd = [w.replace('dstFile', dstFile) for w in defaceTpl] run_shell_command(cmd) + intendedForList[acquisition.indexSidecar].append(acquisition.dstIntendedFor + ext) elif ext == ".json": @@ -262,16 +268,6 @@ def get_arguments(): help="Set logging level", ) - parser.add_argument( - "-a", - "--anonymizer", - required=False, - action="store_true", - help=""" - This option no longer exists from the script in this release. - See:https://github.com/unfmontreal/Dcm2Bids/blob/master/README.md#defaceTpl""", - ) - args = parser.parse_args() return args @@ -280,21 +276,6 @@ def main(): """Let's go""" args = get_arguments() - if args.anonymizer: - print( - """ - The anonymizer option no longer exists from the script in this release - It is still possible to deface the anatomical nifti images - Please add "defaceTpl" key in the congifuration file - - For example, if you use the last version of pydeface, add: - "defaceTpl": "pydeface --outfile {dstFile} {srcFile}" - It is a template string and dcm2bids will replace {srcFile} and {dstFile} - by the source file (input) and the destination file (output) - """ - ) - return 1 - check_latest() check_latest("dcm2niix") diff --git a/dcm2bids/dcm2niix.py b/dcm2bids/dcm2niix.py index 5efcbe89..b59265b9 100644 --- a/dcm2bids/dcm2niix.py +++ b/dcm2bids/dcm2niix.py @@ -4,6 +4,7 @@ import logging import os +import shlex import shutil from glob import glob from .utils import DEFAULT, run_shell_command @@ -95,8 +96,8 @@ def execute(self): """ Execute dcm2niix for each directory in dicomDirs """ for dicomDir in self.dicomDirs: - commandTpl = "dcm2niix {} -o {} {}" - cmd = commandTpl.format(self.options, self.outputDir, dicomDir) + cmd = ['dcm2niix', *shlex.split(self.options), + '-o', self.outputDir, dicomDir] output = run_shell_command(cmd) try: diff --git a/dcm2bids/utils.py b/dcm2bids/utils.py index fbffa859..1c54931e 100644 --- a/dcm2bids/utils.py +++ b/dcm2bids/utils.py @@ -5,7 +5,8 @@ import json import logging import os -import shlex +from pathlib import PurePath +import re from collections import OrderedDict from subprocess import check_output @@ -110,10 +111,27 @@ def splitext_(path, extensions=None): def run_shell_command(commandLine): """ Wrapper of subprocess.check_output - Returns: Run command with arguments and return its output """ logger = logging.getLogger(__name__) logger.info("Running %s", commandLine) - return check_output(shlex.split(commandLine)) + return check_output(commandLine) + + +def valid_path(in_path): + """Assert that file exists. + + Parameters + ---------- + required_file: string path + Path to be checked. + """ + valid_path = re.sub(r'\\', os.path.sep, in_path) + valid_path = re.sub(r'\/', os.path.sep, valid_path) + valid_path = str(PurePath(valid_path)) + + if os.path.isfile(valid_path) or os.path.isdir(valid_path): + if os.path.exists(valid_path): + return valid_path + raise FileNotFoundError(in_path) diff --git a/docs/4-advanced.md b/docs/4-advanced.md index 3047b15e..3e87f24d 100644 --- a/docs/4-advanced.md +++ b/docs/4-advanced.md @@ -6,7 +6,7 @@ These optional configurations could be insert in the configuration file at the s { "searchMethod": "fnmatch", "caseSensitive": true, - "defaceTpl": "pydeface --outfile {dstFile} {srcFile}", + "defaceTpl": ["pydeface", "--outfile", "dstFile", "srcFile"], "description": [ ... ] From 3afcb61e633d2323f47287bd28385301e76d29f5 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Sat, 16 Apr 2022 23:38:58 -0400 Subject: [PATCH 22/57] fix helper --- dcm2bids/helper.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dcm2bids/helper.py b/dcm2bids/helper.py index 79521206..6e02cbd0 100644 --- a/dcm2bids/helper.py +++ b/dcm2bids/helper.py @@ -6,7 +6,7 @@ import os import sys from .dcm2niix import Dcm2niix -from .utils import DEFAULT +from .utils import DEFAULT, valid_path def get_arguments(): @@ -38,7 +38,12 @@ def get_arguments(): def main(): """Let's go""" args = get_arguments() - app = Dcm2niix(dicomDirs=args.dicom_dir, bidsDir=args.output_dir) + valid_dicom_dir = [] + for _dir in args.dicom_dir: + valid_dicom_dir.append(valid_path(_dir)) + + app = Dcm2niix(dicomDirs=valid_dicom_dir, + bidsDir=valid_path(args.output_dir)) rsl = app.run() print("Example in:") print(os.path.join(args.output_dir, DEFAULT.tmpDirName, DEFAULT.helperDir)) From def7876a01e8e6615d98f9c0541bb9f529d3cef1 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Sat, 16 Apr 2022 23:48:47 -0400 Subject: [PATCH 23/57] remove re --- dcm2bids/utils.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dcm2bids/utils.py b/dcm2bids/utils.py index 1c54931e..aebacecd 100644 --- a/dcm2bids/utils.py +++ b/dcm2bids/utils.py @@ -127,11 +127,10 @@ def valid_path(in_path): required_file: string path Path to be checked. """ - valid_path = re.sub(r'\\', os.path.sep, in_path) - valid_path = re.sub(r'\/', os.path.sep, valid_path) - valid_path = str(PurePath(valid_path)) + valid_path = str(PurePath(in_path)) if os.path.isfile(valid_path) or os.path.isdir(valid_path): if os.path.exists(valid_path): return valid_path + raise FileNotFoundError(in_path) From 46640c318a5ff4abda6f127adfb0795402cd724e Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Tue, 19 Apr 2022 08:23:49 -0400 Subject: [PATCH 24/57] fix typos --- dcm2bids/sidecar.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dcm2bids/sidecar.py b/dcm2bids/sidecar.py index f3ad1ae5..a973765b 100644 --- a/dcm2bids/sidecar.py +++ b/dcm2bids/sidecar.py @@ -86,7 +86,7 @@ class SidecarPairing(object): """ Args: sidecars (list): List of Sidecar objects - descriptions (list): List of dictionnaries describing acquisitions + descriptions (list): List of dictionaries describing acquisitions """ def __init__(self, sidecars, descriptions, searchMethod=DEFAULT.searchMethod, @@ -146,7 +146,7 @@ def caseSensitive(self, value): def build_graph(self): """ Test all the possible links between the list of sidecars and the - description dictionnaries and build a graph from it + description dictionaries and build a graph from it The graph is in a OrderedDict object. The keys are the Sidecars and the values are a list of possible descriptions From 17fabaafeafedca2fa6bc23138ebae333d2647f3 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Tue, 19 Apr 2022 08:43:28 -0400 Subject: [PATCH 25/57] fix_dcm2bids_helper --- dcm2bids/helper.py | 55 +++++++++++++++++++++++----------------------- dcm2bids/utils.py | 44 ++++++++++++++++++++++++++++++++++++- 2 files changed, 71 insertions(+), 28 deletions(-) diff --git a/dcm2bids/helper.py b/dcm2bids/helper.py index 79521206..b2db1117 100644 --- a/dcm2bids/helper.py +++ b/dcm2bids/helper.py @@ -6,38 +6,39 @@ import os import sys from .dcm2niix import Dcm2niix -from .utils import DEFAULT - - -def get_arguments(): - """Load arguments for main""" - parser = argparse.ArgumentParser( - formatter_class=argparse.RawDescriptionHelpFormatter, - description="", - epilog=""" - Documentation at https://github.com/unfmontreal/Dcm2Bids - """, - ) - - parser.add_argument( - "-d", "--dicom_dir", required=True, nargs="+", help="DICOM files directory" - ) - - parser.add_argument( - "-o", - "--output_dir", - required=False, - default=DEFAULT.cliOutputDir, - help="Output BIDS directory, Default: current directory", - ) +from .utils import DEFAULT, assert_dirs_empty - args = parser.parse_args() - return args +EPILOG = """ + Documentation at https://github.com/unfmontreal/Dcm2Bids + """ + + +def _build_arg_parser(): + p = argparse.ArgumentParser(description=__doc__, epilog=EPILOG, + formatter_class=argparse.RawTextHelpFormatter) + + p.add_argument("-d", "--dicom_dir", + required=True, nargs="+", + help="DICOM files directory.") + + p.add_argument("-o", "--output_dir", + required=False, default=DEFAULT.cliOutputDir, + help="Output BIDS directory." + " (Default: %(default)s)") + + p.add_argument('-f', + dest='overwrite', action='store_true', + help='Force overwriting of the output files.') + + return p def main(): """Let's go""" - args = get_arguments() + parser = _build_arg_parser() + args = parser.parse_args() + out_folder = os.path.join(args.output_dir, 'tmp_dcm2bids', 'helper') + assert_dirs_empty(parser, args, out_folder) app = Dcm2niix(dicomDirs=args.dicom_dir, bidsDir=args.output_dir) rsl = app.run() print("Example in:") diff --git a/dcm2bids/utils.py b/dcm2bids/utils.py index fbffa859..41398243 100644 --- a/dcm2bids/utils.py +++ b/dcm2bids/utils.py @@ -5,8 +5,9 @@ import json import logging import os -import shlex from collections import OrderedDict +import shlex +import shutil from subprocess import check_output @@ -117,3 +118,44 @@ def run_shell_command(commandLine): logger = logging.getLogger(__name__) logger.info("Running %s", commandLine) return check_output(shlex.split(commandLine)) + + +def assert_dirs_empty(parser, args, required): + """ + Assert that all directories exist are empty. + If exists and not empty, and -f used, delete dirs. + + Parameters + ---------- + parser: argparse.ArgumentParser object + Parser. + args: argparse namespace + Argument list. + required: string or list of paths to files + Required paths to be checked. + create_dir: bool + If true, create the directory if it does not exist. + """ + def check(path): + if os.listdir(path): + if not args.overwrite: + parser.error( + 'Output directory {} isn\'t empty and some files could be ' + 'overwritten or even deleted. Use -f option if you want ' + 'to continue.'.format(path)) + else: + for the_file in os.listdir(path): + file_path = os.path.join(path, the_file) + try: + if os.path.isfile(file_path): + os.unlink(file_path) + elif os.path.isdir(file_path): + shutil.rmtree(file_path) + except Exception as e: + print(e) + + if isinstance(required, str): + required = [required] + + for cur_dir in required: + check(cur_dir) From e7f2b6c0010192e845bdb81a4234a2ea49f9def9 Mon Sep 17 00:00:00 2001 From: Samuel Guay Date: Sat, 16 Apr 2022 16:37:40 -0400 Subject: [PATCH 26/57] fix plugins + slate mode --- docs/stylesheets/extra.css | 10 +++--- pyproject.toml | 65 +++++++++++++++++++++++--------------- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index bb0cacf8..e74ffae1 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -2,15 +2,17 @@ --md-primary-fg-color: hsla(16, 100%, 42%, 1); --md-primary-fg-color--light: hsla(16, 100%, 64%, 1); --md-primary-fg-color--dark: hsla(16, 100%, 28%, 1); - + --md-typeset-a-color: var(--md-accent-fg-color--transparent) --md-accent-fg-color: hsla(196, 100%, 44%, 1); --md-accent-fg-color--transparent: hsla(196, 100%, 44%, 0.1); } [data-md-color-scheme="slate"] { - --md-primary-fg-color: var(--md-footer-bg-color--dark); - --md-primary-bg-color: hsla(16, 100%, 42%, 1); - --md-hue: 213; + --md-primary-fg-color: #121212; + --md-accent-fg-color: hsla(16, 100%, 42%, 1); + --md-primary-bg-color: #FFA98A; + --md-typeset-a-color: #FFA98A; + --md-hue: 213; } .md-search-result__meta { diff --git a/pyproject.toml b/pyproject.toml index f491403e..67a1eba0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,6 +3,20 @@ modules = ["dcm2bids"] # docs_dir = ["docs"] # extra_dirs = ["media", "art"] +# Set plugins +[[tool.portray.extra_markdown_extensions]] + [tool.portray.extra_markdown_extensions.toc] + permalink = "⚓︎" + +[[tool.portray.extra_markdown_extensions]] + [tool.portray.extra_markdown_extensions."pymdownx.highlight"] + linenums = true + +[[tool.portray.extra_markdown_extensions]] + [tool.portray.extra_markdown_extensions."pymdownx.tasklist"] + custom_checkbox = true + clickable_checkbox = false + [tool.portray.mkdocs] # Repository repo_name = "UNFmontreal/dcm2bids" # Name in top right corner @@ -22,9 +36,6 @@ nav = [{ Home = "README.md"}, extra_css = ["docs/stylesheets/extra.css"] # To fix some colors in light vs slate mode. -# Add a bunch of markdown extensions to improve the documentation (and the look ;)). -# See https://squidfunk.github.io/mkdocs-material/reference/abbreviations/ -# for full list of extensions. markdown_extensions = ["admonition", "footnotes", "pymdownx.emoji", @@ -35,9 +46,9 @@ markdown_extensions = ["admonition", "pymdownx.superfences", "pymdownx.tabbed"] -# TODO: Implement plugin so git info is displayed on each page, -# issue has been open on portray to fix the bug. -# plugins = ["git-revision-date", "git-revision-date-localized", "bibtext"] +# Add a bunch of markdown extensions to improve the documentation (and the look ;)). +# See https://squidfunk.github.io/mkdocs-material/reference/abbreviations/ +# for full list of extensions. [tool.portray.mkdocs.theme] name = "material" @@ -49,31 +60,36 @@ site_description = """ Imaging Data Structure (BIDS). """ -# Design related stuff - -icon = {repo = "fontawesome/brands/github"} # icon in top-right corner. -# TODO: Design a logo and/or favicon. -# favicon = "art/logo_small.png" -# logo = "art/logo_small.png" - -palette = {scheme = "preference"} -# Alternative way of setting multiple option for the palette -# [[tool.portray.mkdocs.theme.palette]] -# scheme = "preference" +[[tool.portray.mkdocs.theme.palette]] +media = "(prefers-color-scheme: light)" +scheme = "default" + [tool.portray.mkdocs.theme.palette.toggle] + icon = "material/toggle-switch-off-outline" + name = "Switch to dark mode" -# Additional settings for plugins +[[tool.portray.mkdocs.theme.palette]] +media = "(prefers-color-scheme: dark)" +scheme = "slate" -markdown_extensions.toc = { permalink = "⚓︎" } - # Always add line numbers in code blocks -markdown_extensions."pymdownx.highlight" = { linenums = true } + [tool.portray.mkdocs.theme.palette.toggle] + icon = "material/toggle-switch" + name = "Switch to light mode" -markdown_extensions."pymdownx.tasklist" = {custom_checkbox = true, clickable_checkbox = false } +[[tool.portray.mkdocs.plugins]] +[tool.portray.mkdocs.plugins.search] +[[tool.portray.mkdocs.plugins]] +[tool.portray.mkdocs.plugins.git-revision-date-localized] +type = "timeago" +enable_creation_date = true +fallback_to_build_date = true -plugins."git-revision-date" = {enabled_if_env = "CI"} -plugins.git-revision-date-localized = {type = "date", fallback_to_build_date = true} +icon = {repo = "fontawesome/brands/github"} # icon in top-right corner. +# TODO: Design a logo and/or favicon. +# favicon = "art/logo_small.png" +# logo = "art/logo_small.png" ## Footer icon in bottom-right corner [[tool.portray.mkdocs.extra.social]] @@ -85,4 +101,3 @@ name = "dcm2bids on GitHub" icon = "fontawesome/brands/docker" link = "https://hub.docker.com/r/unfmontreal/dcm2bids" name = "dcm2bids on docker" - From 49082cbbcc2c2408afcbbf9123cdeb35b3a35b37 Mon Sep 17 00:00:00 2001 From: Samuel Guay Date: Sat, 16 Apr 2022 17:27:57 -0400 Subject: [PATCH 27/57] fix footer --- docs_helper/templates/partials/footer.html | 59 ++++++++++++++++++++++ pyproject.toml | 58 +++++++++++---------- 2 files changed, 91 insertions(+), 26 deletions(-) create mode 100644 docs_helper/templates/partials/footer.html diff --git a/docs_helper/templates/partials/footer.html b/docs_helper/templates/partials/footer.html new file mode 100644 index 00000000..dafcbb15 --- /dev/null +++ b/docs_helper/templates/partials/footer.html @@ -0,0 +1,59 @@ +{% import "partials/language.html" as lang with context %} + \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 67a1eba0..13aaf3f9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.portray] modules = ["dcm2bids"] -# docs_dir = ["docs"] -# extra_dirs = ["media", "art"] +docs_dir = "docs" +extra_dirs = ["docs_helper/assets"] # Set plugins [[tool.portray.extra_markdown_extensions]] @@ -15,7 +15,7 @@ modules = ["dcm2bids"] [[tool.portray.extra_markdown_extensions]] [tool.portray.extra_markdown_extensions."pymdownx.tasklist"] custom_checkbox = true - clickable_checkbox = false + clickable_checkbox = true [tool.portray.mkdocs] # Repository @@ -36,22 +36,24 @@ nav = [{ Home = "README.md"}, extra_css = ["docs/stylesheets/extra.css"] # To fix some colors in light vs slate mode. +# Refer to https://squidfunk.github.io/mkdocs-material/reference/ +# for the full list of extensions and config. markdown_extensions = ["admonition", - "footnotes", - "pymdownx.emoji", + "pymdownx.extra", # combines a bunch together "pymdownx.caret", "pymdownx.mark", "pymdownx.tilde", + "pymdownx.critic", + "pymdownx.keys", "pymdownx.details", - "pymdownx.superfences", - "pymdownx.tabbed"] - -# Add a bunch of markdown extensions to improve the documentation (and the look ;)). -# See https://squidfunk.github.io/mkdocs-material/reference/abbreviations/ -# for full list of extensions. + "pymdownx.tabbed", + "pymdownx.snippets", + "pymdownx.inlinehilite"] [tool.portray.mkdocs.theme] name = "material" +custom_dir = "docs_helper/templates" # dir to put overriding templates + # Blurb that is output when the doc site is shared on social media or elsewhere. site_description = """ This is the documentation for dcm2bids, a community-centered project @@ -60,6 +62,12 @@ site_description = """ Imaging Data Structure (BIDS). """ +icon = {repo = "fontawesome/brands/github"} # icon in top-right corner. +# TODO: Design a logo and/or favicon. +# favicon = "art/logo_small.png" +# logo = "art/logo_small.png" + +# Light vs slate mode + switch [[tool.portray.mkdocs.theme.palette]] media = "(prefers-color-scheme: light)" scheme = "default" @@ -76,21 +84,6 @@ scheme = "slate" icon = "material/toggle-switch" name = "Switch to light mode" -[[tool.portray.mkdocs.plugins]] -[tool.portray.mkdocs.plugins.search] - -[[tool.portray.mkdocs.plugins]] -[tool.portray.mkdocs.plugins.git-revision-date-localized] -type = "timeago" -enable_creation_date = true -fallback_to_build_date = true - -icon = {repo = "fontawesome/brands/github"} # icon in top-right corner. - -# TODO: Design a logo and/or favicon. -# favicon = "art/logo_small.png" -# logo = "art/logo_small.png" - ## Footer icon in bottom-right corner [[tool.portray.mkdocs.extra.social]] icon = "fontawesome/brands/github" @@ -101,3 +94,16 @@ name = "dcm2bids on GitHub" icon = "fontawesome/brands/docker" link = "https://hub.docker.com/r/unfmontreal/dcm2bids" name = "dcm2bids on docker" + + +# Additional plugins +[[tool.portray.mkdocs.plugins]] +[tool.portray.mkdocs.plugins.search] + +[[tool.portray.mkdocs.plugins]] +[tool.portray.mkdocs.plugins.git-revision-date-localized] +type = "timeago" +# enable_creation_date = true +fallback_to_build_date = true +[[tool.portray.mkdocs.plugins]] +[tool.portray.mkdocs.plugins.git-authors] From 2b01e326cfa3a39dbbfab8a88d2fc93090ef7047 Mon Sep 17 00:00:00 2001 From: Samuel Guay Date: Sat, 16 Apr 2022 21:24:54 -0400 Subject: [PATCH 28/57] add plugin requirements --- requirements-dev.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements-dev.txt b/requirements-dev.txt index 9ba211c8..a2b0a0ca 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,3 +2,5 @@ ipython>=7.10.0 portray>=1.3.1 tox>=3.14.0 dcm2bids +mkdocs-git-authors-plugin +mkdocs-git-revision-date-localized-plugin From 8581695996135d6cb27fe84253f7d25f29b43a06 Mon Sep 17 00:00:00 2001 From: Samuel Guay Date: Sun, 17 Apr 2022 19:50:05 -0400 Subject: [PATCH 29/57] draft Installation --- docs/get-started/installation.md | 318 +++++++++++++++++++++++++++++++ 1 file changed, 318 insertions(+) create mode 100644 docs/get-started/installation.md diff --git a/docs/get-started/installation.md b/docs/get-started/installation.md new file mode 100644 index 00000000..f7f932b3 --- /dev/null +++ b/docs/get-started/installation.md @@ -0,0 +1,318 @@ +--- +title: Installing dcm2bids and dependencies +summary: Set of instructions to help install dcm2bids and dependencies. +authors: + - Samuel Guay +date: 2022-04-17 +--- + +## Installation + +Before you can use dcm2bids, you will need to get it installed. This page guides +you through a minimal, typical dcm2bids installation workflow that is sufficient +to complete all dcm2bids tasks. + +We recommend to skim-read the full page **before** you start installing anything +considering there are many ways to install software in the Python ecosystem +which are often dependent on the familiarity and preference of the user. + +We offer recommendations at the bottom of the page that will take care of the +whole installation process in one go and make use of a dedicated environment for +dcm2bids. + +??? tip "You just want the installation command?" + + If you are used to installing packages, you can get it from PyPI or conda: + + `pip install dcm2bids` + + `conda install -c conda-forge dcm2bids` + +### Dependencies + +#### Python + +As dcm2bids is a Python package, the first prerequisite is that Python must be +installed on the machine you will use dcm2bids. You will need **Python 3.7 or +above** to run dcm2bids properly. + +If you are unsure what version(s) of Python is available on your machine, you +can find out by opening a terminal and typing `python --version` or `python`. +The former will output the version directly in the terminal while the latter +will open an interactive Python shell with the version displayed in the first +line. + +=== "python --version" + + ```bash hl_lines="2" + sam:~$ python --version + Python 3.10.4 + ``` + +=== "python" + + ```bash hl_lines="2" + sam:~$ python + Python 3.10.4 | packaged by conda-forge | (main, Mar 24 2022, 17:39:04) [GCC 10.3.0] on linux + Type "help", "copyright", "credits" or "license" for more information. + >>> exit() + ``` + +If your system-wide version of Python is lower 3.7, it is okay. We will make +sure to use a higher version in the isolated environment that will be created +for dcm2bids. The important part is to verify that Python is installed. + +If you are a **beginning user** in the Python ecosystem, the odds are that you +have installed [Anaconda][anaconda], which contains all Python versions so you +should be good. If you were not able to find out which version of Python is +installed on your machine or find Anaconda on your machine, we recommend that +you install Python through [Anaconda][anaconda]. + +??? question "Should I install Anaconda or Miniconda?" + + If you unsure what to install read this [section describing the differences between Anaconda and Miniconda][mini-vs-ana] to help you choose. + +#### dcm2niix + +[dcm2niix](https://github.com/rordenlab/dcm2niix) can also be installed in a +variety of ways as seen on +[the main page of the software](https://github.com/rordenlab/dcm2niix#install). + +Whether you want to install the latest compiled executable directly on your +machine is up to you but you have to **make sure you can call the software from +any directory**. In other words, you have to make sure it is included in your +`$PATH`. Otherwise, dcm2bids won't be able to run dcm2niix for you. That's why +we recommend to install it at the same time in the dedicated environment. Steps +described below. + +### Recommendations + +We recommend to install all the dependencies at once when installing dcm2bids on +a machine or server. As mentioned above the minimal installation requires only +dcm2bids, dcm2niix and Python >= 3.7. For ease of use and to make sure we have a +reproducible environment, we recommend to use a dedicated environment through +[conda][conda] or, for those who have it installed, [Anaconda][anaconda]. Note +that you **don't need** to use specifically them to use dcm2bids, but it will +make your life easier. + +??? info "More info on conda" + + Conda is an open-source package management system and environment management + system that runs on Windows, macOS, and Linux. Conda quickly installs, runs, and + updates packages and their dependencies. Conda easily creates, saves, loads, and + switches between environments on your local computer. The conda package and + environment manager is included in all versions of Anaconda and Miniconda. + - [conda docs](https://docs.conda.io/projects/conda/en/latest/) + +??? question "But I use another package/env management system, what do I do?" + + Of course you can use your preferred package/env management system, whether it + is venv, virtualenv, pyenv, pip, poetry, etc. This guide was built on the + basis that no previous knowledge is required to install and learn dcm2bids by so + providing a simple way to install dcm2bids without having to worry about the + rest. + +??? question "I already created an environment for my project, what do I do?" + + You can update your environment either by: + + 1. installing dcm2bids while your environment is active like any package; or + 2. adding dcm2bids to the dependencies and updating your environment + + Here's an example with conda after updating an `environment.yml` file: + + ```bash + conda env update --file environment.yml --prune + ``` + +### Finally, time to install! + +From now on, it is assume that [conda][conda] (or [Anaconda][anaconda]) is +installed and correctly setup on your computer as it is the easiest way to +install dcm2bids and its dependencies on any OS. + +We could install all the software one by one using a series of command: + +```bash +conda install -c conda-forge dcm2bids +conda install -c conda-forge dcm2niix +``` + +But this would install the software in the main environment instead of a +dedicated one, assuming none were active. This could have atrocious dependencies +issues in the long-term if you want to install other software. + +#### Create environment.yml + +That is exactly why dedicated environments were invented. To help creating +dedicated environments, we can create a file, often called `environment.yml`, +which is used to specify things such as the dependencies that need to be +installed inside the environment. + +To create such a file, you can use any code editor or your terminal to write or +paste the information below, and save it in your project directory with the name +`environment.yml`: + +You can create a project directory anywhere on your computer, it does not +matter. You can create `dcm2bids-proj` if you need inspiration. + +```yaml +name: dcm2bids +channels: + - conda-forge +dependencies: + - python>=3.7 + - dcm2niix + - dcm2bids +``` + +In short, here's what the fields mean: + +- The `name:` key refers to the name of the dedicated environment. You will have + to use this name to activate your environment and use software installed + inside. The name is arbitrary, you can name it however you want. +- The `channels:` key tells conda where to look for the declared dependencies. + In our case, all our dependencies are located on the + [conda-forge channel](https://anaconda.org/conda-forge). +- The `dependencies:` key lists all the dependencies to be installed inside the + environment. If you are creating an environment for your analysis project, + this is where you would list other dependencies such as `nilearn`, `pandas`, + and especially as `pip` since you don't want to use the pip outside of your + environment Note that we specify `python>=3.7` to make sure the requirement is + satisfied for dcm2bids as the newer version of dcm2bids may face issue with + Python 3.6 and below. + +Now that all the dependencies have been specified, it is time to create the new +conda environment dedicated to dcm2bids! :tada: + +#### Create conda environment + install dcm2bids + +Open a terminal and go in the directory where you put the `environment.yml` run +this command: + +```bash +conda env create --file environment.yml +``` + +If the executation was successful, you should see a message similar to: + +```bash hl_lines="14" +sam:~/dcm2bids-proj$ nano environment.yml +sam:~/dcm2bids-proj$ conda env create --file environment.yml +Collecting package metadata (repodata.json): done +Solving environment: |done + +Downloading and Extracting Packages +future-0.18.2 | 738 KB | ########################################## | 100% +Preparing transaction: done +Verifying transaction: done +Executing transaction: done +# +# To activate this environment, use +# +# $ conda activate dcm2bids +# +# To deactivate an active environment, use +# +# $ conda deactivate +``` + +#### Activate environment + +Last step is to make sure you can activate[^1] your environment by running the +command: + +```bash +conda activate dcm2bids +``` + +:warning: Remember that dcm2bids here refer to the name given specified in the +`environment.yml`. + +```bash hl_lines="2" +sam:~/dcm2bids-proj$ conda activate dcm2bids +(dcm2bids) sam:~/dcm2bids-proj$ +``` + +You can see the environment is activated as a new `(dcm2bids)` appear in front +of the username. + +#### Verify that dcm2bids works + +Finally, you can test that dcm2bids was installed correctly by running the any +dcm2bids command such as `dcm2bids --help`: + +```bash hl_lines="1" +(dcm2bids) sam:~/dcm2bids-proj$ dcm2bids --help +usage: dcm2bids [-h] -d DICOM_DIR [DICOM_DIR ...] -p PARTICIPANT [-s SESSION] -c + CONFIG [-o OUTPUT_DIR] [--forceDcm2niix] [--clobber] + [-l {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [-a] + +Reorganising NIfTI files from dcm2niix into the Brain Imaging Data Structure +dcm2bids 2.1.6 + +options: + -h, --help show this help message and exit + -d DICOM_DIR [DICOM_DIR ...], --dicom_dir DICOM_DIR [DICOM_DIR ...] + DICOM directory(ies) + -p PARTICIPANT, --participant PARTICIPANT + Participant ID + -s SESSION, --session SESSION + Session ID + -c CONFIG, --config CONFIG + JSON configuration file (see example/config.json) + -o OUTPUT_DIR, --output_dir OUTPUT_DIR + Output BIDS directory, Default: current directory + (/home/sam/dcm2bids-proj) + --forceDcm2niix Overwrite previous temporary dcm2niix output if it exists + --clobber Overwrite output if it exists + -l {DEBUG,INFO,WARNING,ERROR,CRITICAL}, --log_level {DEBUG,INFO,WARNING,ERROR,CRITICAL} + Set logging level + -a, --anonymizer This option no longer exists from the script in this + release. See:https://github.com/unfmontreal/Dcm2Bids/blob/m + aster/README.md#defaceTpl + + Documentation at https://github.com/unfmontreal/Dcm2Bids +``` + +Voilà, you are ready to use dcm2bids or at least +[move onto the tutorial](../tutorial/first-steps.md)!! + +## Containers + +We also provide a container image that includes both dcm2niix and dcm2bids which +you can install using [Docker](https://docker.com) or +[Apptainer/Singularity](https://apptainer.org/). + +=== "Docker" + + `docker pull unfmontreal/dcm2bids:latest` + +=== "Apptainer/Singularity" + + `singularity pull dcm2bids_latest.sif docker://unfmontreal/dcm2bids:latest ` + +## Summary + +Installing dcm2bids is quite easy once you know how. The easiest way to install +it is to follow the steps below using conda but it is also possible to use other software, including containers: + +- [ ] Create [`environment.yml`](#create_environmentyml) file with dependencies + - [x] dcm2bids + - [x] dcm2niix +- [ ] Create conda environment + - [x] `conda env create --file environment.yml` +- [ ] Activate conda environment + - [x] `conda activate dcm2bids` +- [ ] Validate a dcm2bids command + - [x] `dcm2bids --help` +- [ ] Consult how-to guides or follow the tutorial + +[conda]: https://conda.io/en/latest/miniconda.html +[anaconda]: https://www.anaconda.com/distribution/ +[mini-vs-ana]: + https://docs.conda.io/projects/conda/en/latest/user-guide/install/download.html#anaconda-or-miniconda + +[^1]: + To get out of the conda environment, you have to deactivate it with the + `conda deactivate` or `exit` commands. From e023ab31a19c2fe538c051c2d529deb59c63772a Mon Sep 17 00:00:00 2001 From: Samuel Guay Date: Sun, 17 Apr 2022 22:19:19 -0400 Subject: [PATCH 30/57] tidy installation --- docs/get-started/installation.md | 75 ++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 28 deletions(-) diff --git a/docs/get-started/installation.md b/docs/get-started/installation.md index f7f932b3..16ee5afa 100644 --- a/docs/get-started/installation.md +++ b/docs/get-started/installation.md @@ -1,12 +1,11 @@ --- -title: Installing dcm2bids and dependencies summary: Set of instructions to help install dcm2bids and dependencies. authors: - Samuel Guay date: 2022-04-17 --- -## Installation +# Installation Before you can use dcm2bids, you will need to get it installed. This page guides you through a minimal, typical dcm2bids installation workflow that is sufficient @@ -28,9 +27,9 @@ dcm2bids. `conda install -c conda-forge dcm2bids` -### Dependencies +## Dependencies -#### Python +### Python As dcm2bids is a Python package, the first prerequisite is that Python must be installed on the machine you will use dcm2bids. You will need **Python 3.7 or @@ -72,20 +71,23 @@ you install Python through [Anaconda][anaconda]. If you unsure what to install read this [section describing the differences between Anaconda and Miniconda][mini-vs-ana] to help you choose. -#### dcm2niix +### dcm2niix -[dcm2niix](https://github.com/rordenlab/dcm2niix) can also be installed in a -variety of ways as seen on -[the main page of the software](https://github.com/rordenlab/dcm2niix#install). +[dcm2niix][dcm2niix] can also be installed in a variety of ways as seen on +[the main page of the software][dcm2niix-install]. Whether you want to install the latest compiled executable directly on your machine is up to you but you have to **make sure you can call the software from any directory**. In other words, you have to make sure it is included in your `$PATH`. Otherwise, dcm2bids won't be able to run dcm2niix for you. That's why -we recommend to install it at the same time in the dedicated environment. Steps -described below. +we recommend to install it at the same time in the dedicated environment. -### Recommendations +As you can see, dcm2niix is available through [conda][conda] so that is the +approach chosen in this guide. We will benefit from the simplicity of installing +all software from the same located at. Steps to install dcm2niix +are included in the next secton. + +## Recommendations We recommend to install all the dependencies at once when installing dcm2bids on a machine or server. As mentioned above the minimal installation requires only @@ -125,11 +127,12 @@ make your life easier. conda env update --file environment.yml --prune ``` -### Finally, time to install! +### Install dcm2bids -From now on, it is assume that [conda][conda] (or [Anaconda][anaconda]) is +From now on, it is assumed that [conda][conda] (or [Anaconda][anaconda]) is installed and correctly setup on your computer as it is the easiest way to -install dcm2bids and its dependencies on any OS. +install dcm2bids and its dependencies on any OS. We assume that if you want to +install it in a different way, you have enough skills to do it on your own. We could install all the software one by one using a series of command: @@ -173,7 +176,7 @@ In short, here's what the fields mean: inside. The name is arbitrary, you can name it however you want. - The `channels:` key tells conda where to look for the declared dependencies. In our case, all our dependencies are located on the - [conda-forge channel](https://anaconda.org/conda-forge). + [conda-forge channel][conda-forge]. - The `dependencies:` key lists all the dependencies to be installed inside the environment. If you are creating an environment for your analysis project, this is where you would list other dependencies such as `nilearn`, `pandas`, @@ -278,11 +281,13 @@ options: Voilà, you are ready to use dcm2bids or at least [move onto the tutorial](../tutorial/first-steps.md)!! +[Go to the Tutorial section](../../tutorial){ .md-button } + +[Go to the How-to section](../../how-to/){ .md-button } ## Containers We also provide a container image that includes both dcm2niix and dcm2bids which -you can install using [Docker](https://docker.com) or -[Apptainer/Singularity](https://apptainer.org/). +you can install using [Docker][docker] or [Apptainer/Singularity][apptainer]. === "Docker" @@ -292,27 +297,41 @@ you can install using [Docker](https://docker.com) or `singularity pull dcm2bids_latest.sif docker://unfmontreal/dcm2bids:latest ` -## Summary +## Summary of the steps + +In sum, installing dcm2bids is quite easy if you know how to install Python +packages. The easiest way to install it is to follow the steps below using +[conda][conda] but it is also possible to use other software, including +containers: -Installing dcm2bids is quite easy once you know how. The easiest way to install -it is to follow the steps below using conda but it is also possible to use other software, including containers: +- [ ] Create an [`environment.yml`](#create-environmentyml) file with dependencies + - [x] Content: -- [ ] Create [`environment.yml`](#create_environmentyml) file with dependencies - - [x] dcm2bids - - [x] dcm2niix + name: dcm2bids + channels: + - conda-forge + dependencies: + - python>=3.7 + - dcm2niix + - dcm2bids + - [ ] Create conda environment - [x] `conda env create --file environment.yml` - [ ] Activate conda environment - [x] `conda activate dcm2bids` -- [ ] Validate a dcm2bids command +- [ ] Verify a dcm2bids command - [x] `dcm2bids --help` - [ ] Consult how-to guides or follow the tutorial -[conda]: https://conda.io/en/latest/miniconda.html -[anaconda]: https://www.anaconda.com/distribution/ +[anaconda]: https://www.anaconda.com/distribution +[dcm2niix]: https://github.com/rordenlab/dcm2niix +[dcm2niix-install]: https://github.com/rordenlab/dcm2niix#install +[conda]: https://conda.io/en/latest/miniconda.html +[conda-forge]: https://anaconda.org/conda-forge +[docker]: https://docker.com +[apptainer]: https://apptainer.org [mini-vs-ana]: https://docs.conda.io/projects/conda/en/latest/user-guide/install/download.html#anaconda-or-miniconda -[^1]: - To get out of the conda environment, you have to deactivate it with the +[^1]: To get out of a conda environment, you have to deactivate it with the `conda deactivate` or `exit` commands. From e508803b2ea11983afe244ba9a4da429544fb3ac Mon Sep 17 00:00:00 2001 From: Samuel Guay Date: Mon, 18 Apr 2022 12:38:04 -0400 Subject: [PATCH 31/57] add more css classes to improve UX Added #only-dark/light to show or hide dark vs bright images according to color mode. Added #border classes to add border on images so it's easier where the image border is. --- docs/assets/extra.css | 55 ++++++++++++++++++++++++++++++++++++++ docs/stylesheets/extra.css | 21 --------------- 2 files changed, 55 insertions(+), 21 deletions(-) create mode 100644 docs/assets/extra.css delete mode 100644 docs/stylesheets/extra.css diff --git a/docs/assets/extra.css b/docs/assets/extra.css new file mode 100644 index 00000000..67182fab --- /dev/null +++ b/docs/assets/extra.css @@ -0,0 +1,55 @@ +:root { + --md-primary-fg-color: hsla(16, 100%, 42%, 1); + --md-primary-fg-color--light: hsla(16, 100%, 64%, 1); + --md-primary-fg-color--dark: hsla(16, 100%, 28%, 1); + --md-typeset-a-color: var(--md-accent-fg-color--transparent) + --md-accent-fg-color: hsla(196, 100%, 44%, 1); + --md-accent-fg-color--transparent: hsla(196, 100%, 44%, 0.1); +} + + /* Hide images by default for dark mode */ + img[src$="#only-dark"] { + display: none; + } + +@media screen { + [data-md-color-scheme="slate"] { + --md-primary-fg-color: var(--md-primary-fg-color--dark); + --md-accent-fg-color: hsla(16, 100%, 42%, 1); + --md-typeset-a-color: #FFA98A; + --md-default-bg-color: #121212 + } + + /* Hide images for light mode */ + [data-md-color-scheme="slate"] img[src$="#only-light"] { + display: none; + } + + /* Show images for dark mode */ + [data-md-color-scheme="slate"] img[src$="#only-dark"] { + display: initial; + } + +} + +/* Add border to images and prevent emojis to get bordered by +injecting this class optional */ +img[src$="#border"], +img[src$="#only-dark#border"], +img[src$="#only-light#border"], +img[src$="#border#only-dark"], +img[src$="#border#only-light"] { + border: .01rem solid var(--md-typeset-kbd-border-color); + border-radius: .1rem; + padding: .25rem +} + +.md-search-result__meta { + /* background-color: var(--md-default-fg-color); */ + color: var(--md-typeset-color); +} + +.md-top { + background-color: #FFA98A; + color: var(--md-default-bg-color) +} \ No newline at end of file diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css deleted file mode 100644 index e74ffae1..00000000 --- a/docs/stylesheets/extra.css +++ /dev/null @@ -1,21 +0,0 @@ -:root { - --md-primary-fg-color: hsla(16, 100%, 42%, 1); - --md-primary-fg-color--light: hsla(16, 100%, 64%, 1); - --md-primary-fg-color--dark: hsla(16, 100%, 28%, 1); - --md-typeset-a-color: var(--md-accent-fg-color--transparent) - --md-accent-fg-color: hsla(196, 100%, 44%, 1); - --md-accent-fg-color--transparent: hsla(196, 100%, 44%, 0.1); -} - -[data-md-color-scheme="slate"] { - --md-primary-fg-color: #121212; - --md-accent-fg-color: hsla(16, 100%, 42%, 1); - --md-primary-bg-color: #FFA98A; - --md-typeset-a-color: #FFA98A; - --md-hue: 213; -} - -.md-search-result__meta { - /* background-color: var(--md-default-fg-color); */ - color: var(--md-typeset-color); -} \ No newline at end of file From 2fd0adcf2d517f3a097a2f9beb311aaf7de6f43f Mon Sep 17 00:00:00 2001 From: Samuel Guay Date: Mon, 18 Apr 2022 14:04:44 -0400 Subject: [PATCH 32/57] Create get-help.md --- docs/assets/img/github-issue-dark.png | Bin 0 -> 190229 bytes docs/assets/img/github-issue-light.png | Bin 0 -> 203981 bytes docs/assets/img/neurostars-1-dark.png | Bin 0 -> 87736 bytes docs/assets/img/neurostars-1-light.png | Bin 0 -> 82140 bytes docs/assets/img/neurostars-2-dark.png | Bin 0 -> 310960 bytes docs/assets/img/neurostars-2-light.png | Bin 0 -> 277609 bytes docs/assets/img/neurostars-3-dark.png | Bin 0 -> 69988 bytes docs/assets/img/neurostars-3-light.png | Bin 0 -> 65068 bytes docs/assets/img/neurostars-4-dark.png | Bin 0 -> 43868 bytes docs/assets/img/neurostars-4-light.png | Bin 0 -> 39685 bytes docs/how-to/get-help.md | 163 +++++++++++++++++++++++++ 11 files changed, 163 insertions(+) create mode 100644 docs/assets/img/github-issue-dark.png create mode 100644 docs/assets/img/github-issue-light.png create mode 100644 docs/assets/img/neurostars-1-dark.png create mode 100644 docs/assets/img/neurostars-1-light.png create mode 100644 docs/assets/img/neurostars-2-dark.png create mode 100644 docs/assets/img/neurostars-2-light.png create mode 100644 docs/assets/img/neurostars-3-dark.png create mode 100644 docs/assets/img/neurostars-3-light.png create mode 100644 docs/assets/img/neurostars-4-dark.png create mode 100644 docs/assets/img/neurostars-4-light.png create mode 100644 docs/how-to/get-help.md diff --git a/docs/assets/img/github-issue-dark.png b/docs/assets/img/github-issue-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2e2332cb19f5fd94d937b86fe8f10e25164ec393 GIT binary patch literal 190229 zcmeFZ_gm6`|2|xnWtyX5mZny|D@Tq}Gbfs*W;t?iE%(ALxiw2$?mf}mqPQ0*WR{i- zbD<)lxkbf=Ctj(rp&@Mw0QOJ*6{er-$s#o1Wvq4XiT@4+#;2;etXxBJBd@Pp z{_Um5j$04@?Z&BI(`9B^>2~c*6#uVy{qsW%7%uyem#y~7hR zQ)q5Uaj}{9>hLdUx9>kTS)Oa6KB&QSvi|#hj|n?Wvu9st_MH#Mm>xgBcAW{9CT3i3 zpRnq{&O6$2f<$m(UqkQGb-|bJn7OcBlBoAW=Gc)*t(<_mG57I{-|x+5{zoJVdqB&$+Rre(6Ow0nN@Am#CrY@9HW>nmRps4U|Tn7DS4W~H7c$O3Vf@obmp72s;RP< zBy!=Q;s~=Z_vk=EaX!qe^~+}Bax8fU{=eAYce>YPGcCI=Nm^(nOt1VfV`YH)2k1C) zqS~@1O59Hk>$x{N0Kz?*vRh3ZHW}9m)2}poBDPoxxW@hIi;3Jx@_04IqloWR*lzl3 z!NR|wOt6j`f@6kl@N)#Sulh&*DC~7qhfBhq;AQf;nsfgV2G>5RHn|ylVqpP${p|K# ze-5##8f$qO@GUF%w96SWHs6+YG2N5eX`+jzD&^~%14D%RC9@e=fP3x&bj4YnCL$3D zB^1N}Y&(JjqR2guRZZ1JIalcV&{&hfRoBmjnKf;+TO;%*|8a@0aoH3&{7ep~bpw_M z*pbHwH~xU}V!3Kjw~m!6=xvTE$TDg(Baa&z`T9NFs0Qe6-SeG@NAm!kCg5q3wlkuz z=P?O|)lw-Nq^a{7rfwp>3mFBQjb*j!vXb@=3*Xpx|Q zfS>iTD%!z1=gCi@f*0vy(iwAU^N@aH0a2bbJ+Tt;_b9(>nV?FW5n0#&*%tXTOrzEQv_-nfYoF%&M^f(7Wtc+Ad%go9io>}RB zDkb;jW;q{zB6?nAy0@tDg3Dzw= z~ol z_y1{6|Id32M5p@h-joIb)jlkT+KLLM8CDstt9P%)&vxT$?h=RMQo9rAGZBq;oex7= z>Bs100TRgd8xW(q&-7<%Gly(ED*>T)n=cG5Ep`InP6Zf96-2*EFeNtpR|JSgE-E!(<3%Pae|2q4}+67jV z^(Hmp)?%iJ_B4sS2<5GDs105*U)-XxRV&CxiV>$N{uzah&+6lIu@-}yTNkb3?tiI_ zB(&gkegIR>0Zdg}F{{=qC4A4{asH3N|9|X>@D$S+gz!=a}?O!c=hjF zs0&ES@N!Fd2h1m>>=8<<*zX#IWE*n$_7Pw`bCJGqA%T;U_hI31uw3qCdd8!vt;amM zcr00YNG_?K-`K{zH9a$_7cflu{*mX0p1TDNwGy0-nol_)5Vw|TCcMlf$r*NkL#Y)X zZ&@_;B~H#NrJ3%#N#v#J-zBwOuh$=0&s$%~S>KXpnP_^q$jVRr0!(ERt zf8sI!-phS~sm`j+H&6#9=J^dTnUlY|jLHWB^p3hU5?+l-w5^0f^a~%B&buH&r0I9a z13ZF`YnR=V@_%kLj1UCVMEDsg1;F6Rcye8i(y5-`yt*zPHZeU&HcHgV14`GThM z!wL3XCnz&(aqMQ+^S!~bSKHana#MwAeqrB$kMq7vmh?&Z_^l%3@4>&bQg=Nu&6CZZ zS7Pml%xEzEHNu<09t&KEU}IUVlI=>6c>h_e&6p#Jxz~44N~F&l6Lm#W4aqf>nMPN? z(hY7&n|=cWgJnM!(xC}xFtMJ8#hC{-o?dPF5ZAkn&z5yJ;~_fZNS{D zx^{i(;+y1cug;A`wu8*J)jWx)_`?qsGesq+4K);Inv6GDlHkvmqe|wz&<0Ru)=&JfHL9N>E zfy9>W#H~r^uk*iB)#TgRQ-vVahxIjCB`&;y49VD<%P-kU&($>SQU1 zpW_e_*(rxD%h?3|v}ktOOfaoWTI@45OA}4g;Wyu(YG?`oEsj%4F&+ypYo+tl;&(x+ zrXALnEpA!W>XM)$L#|FM$A#BVVVE*OM2=&As`H|?-%ht5Y;hm%F|mcd=TPU7b#Hu% z*xxbVOrH$jAT?QfZF+(u4x0uJs0puBQZtt}nsdAw?>TB?cGYbM(QOpGy?`k?+&l-+8|CCsvWvj` z;ps=DyhxzO)9qT_JkR~ywkv_3W2>V%6~1f+BCinF#+!~Os5rz1Dhz&hjVxvl+nUpa z`tIrF$h(_BrNMX56sr?;H~y8dJ`&ge{OAn4g^&lm(Uyh;AKEY75j-{)nzpe&gP9`0 z6Og2!*+R{AT!gC`pX?nrM%;-wQ$8}fpBQg+*u3q}XCR4vr59jTlyfbUGP!I!b%IL9 zEQlCViRSztjReE`=)f)F%`ThJ?!9O5Zsw3QlPa@0{JC^VTLDn4`6$?jXh~Tg(L1n% zhTD&A6B;BD_0^Uw*&3IPVpWN)D#V2gp0oCxnB2DAd!wL5#<82`4u0({ymTDv5+fl1 zmH&w>X;L_U3>AJh zsm=zn{J`sUbm}S+9r)zko?WzbIQNf0+w4qk$bJ^W8OqxN2K`z@2t7|6H8e$)!1D3t zO|B{3f!|AbFkPEd&_@4BUpS#N);_IC$+M*#Fdw)+G_%(dP7TISZ75OjHOP^6#y5BG zgOF<$g41Jr&p^|G4SB)jN!PwVmMWk1U7GZnZ=s)&F2TzjK3%hy{69E>t1X>2sb)im z{e86YYD;I^jjQ>kLAy?qz)Igm?MaC)##w!=Dvo(QSFl^3_sHC|OY?izcDkr>Z*Q77 zU%HOt`2nfDIg_RAbGkPpaE6l=veqxkwA0SpOJtZScF;RDo5Lu9ikfK=bz^N%H>9FDCyAf4i za7R-22e9$JbtX1z_lvN3Ys=c{pMr2dTpBJAeLVxyF~x!rgIxXW*e|=19J^it!e4wp zo*sEs0b&%)h$j64Rypjoov%zu@?N8br@ye9zWnJyUKY9}aA( zG_HK);M$CV?th!-r2K4J9>{jH4JSvrs{Gb+9V8$R+aIysr`{zx(}TW$$cjG0dw$kO zZhDpn-0me^M*V%;7Cpp~ovW9WQIeJ`IM7q4^q%P6x0q+XznZ z4$J|{=n@%PxlYfO9k?_=!K%<#ltUVE)bWDwj%S0D*3yFj(j6o=oO5rW7HR>?n;{y7 zge>6iAC{e&ncGdkfvP)z^=?35vG)_T$d8grD4U>F`JA0y(*3ZVzams}1Dw!r;6B6h zcQPuFG_HNv;SY7vA&O|tlH5DL{2rIdBo!RN*ci`kaKr@XJaP+d-=vRvGECeW&k3f~ zkAv_OFO>$Kn6veRiYMX=F~jl&O0MO(Q%&xZPbHP+k@#hQMWL?GnpeZiQ3-=B1y;nI z0=%D{v-tUA-uvZVojN`%KCW6$VWlPzbDf)oxSLsV!MkaVgjfVUL3yV@ zaOalHW6S%6cvpZB?($}zF`YAEXgpguiU1BwBX z{xkh~^518!5M$_`99Sw)9xX2u%|PY7maz$kUtK%H~2PF7be2 z*xSQ!?+8-`EY&)2`NwRT0BNzb5XWvjup&(%Uy8S{2L z=oH(+Le|#7V9$Xk)_*==y!gp{BWwVAo?ld&vwQSnu6H<8D!W@j;$mI7>M#^D!ZpM+!mo z11g%PM>p|Um?%;V0_a3tDL%SChGznrNmh=Qy2 ziHiFxpJjE=w_pz7T)BMMmtj5Apa6Y!@QnK~+v|~QaOR<3fIWHdLc-+x+gF|W?gM3- zBF`oxyp?NUUr&Qa`JTv4uyU;G@k~C2llHn4%JilNztE_|OqCGRnr%OpnGld5ot}Ji zwa&GvwhEd|Kk1Oi_QmeBlFx+jrXvRDmW{}rB9F;eQ>=CM^MVP>&R^|^Aw_j$F|7dF=)L(8#BY5OP23MJh}%QwY- z6Uzj#aBL=dHHC>&&I&!E=oX%{D3)$%%#(_#*++y!m!dhQah$)nB$P@0DS=y2rzeI> z`lf@$LZ#}Sq;%6dGzIup#HQuobMi|tA95OJo^uUH$V@z-4U&^VM0@9a!jpjQG+ubK zDJQ^ox6xI)DlpGN zPI{o|?c|D#>ExSFt+PDqS-E>D3EbYi(mS#MqYtl{@Mte7>d>m5oJNNAuMq?-F!a`Z z74%Bhr9iKht855OUQz$9n7Hwm30P`7`&#F#g}U2W76j%eYBQY@TCY|*Pm^2x*+q;i z9j2Pf`dn{g-ey>3y~y*X#AT3FKz;`8v?a^&jZe@(QeKNi4c;L7MK74C)QzQ3`vYe4 z$7L2t%b@eDjHVI<;si`o}OiV;>> zYlJ&ILyGw6k4HzQlO>Nj1`&#ZxyZo0l^El3b}tu&LccZdK6{)X5Bd3&JM$aO*3-w* z-XfyOG(4pa1J$7tw;9Y(ZHlh)2ukxp_Kh^172n|MnEUErzV#Xu;90K2vh^$TsZfZ# z$Wz%!zPrAk=rp&5v@4tWFLzR1H_5p^0&_+2O4ISmOTu);LOeLx0<=ab*Nw#-0?kU_ ze!LXh=N3cq-3=+i+2s+`)UQ*aO&)czf;;5Y6y4fQQ(HW=&bD;p_U#_9XAIk`m^sDX+IiCxw%3X@>3y|&lFjAH5!o-os}@0(TU?XsRA;tQxo({t5&Re>JR!i@3p6u zqf^)8KcfB_6$n={F)|xz_Ucd#^vHChi%^%q67^inN);o{$^+@jVX(@(qfp~M_T{#I z1dVLTN8N{SB7)UpJS%|DP$D7CZj0ca05FUZm9KXtsMI9@4)1uHi_85cW_b2v?5SKR z^ggV2-xsyrG96x~16JvhM1RHF1}bk{jKD!dY?MhWZM0?EduYp*@ZEA<&DL($*w$0y zI-W&v9DQ}!cD>|9%|#1k7c+;MN5`TvSzNv$R9bK^ZNrEGG449g0!@zb8B=5PHzbwl zR{=bbwNx2Scb8!ogU)vbh2Xa#c^K!1))ZX8anms&2vBGHrgaV+2J2Gil>ZU`fc(l< zFgwHO>-T#xZSfqHhUWOS$4;oMdHhc!uL_Rm&ba{yK7Lt0s;kX@77kC_$6Q1{QFeyV ztPOoD^Ce{}!XlXah z9t(`l4c*-aWa^}ZaSG5fm7Jm87-ObYbG9o`F!*PLu zgUlHgDNfbZB%PMS$MJ!3xs_HU!7cl3m_STXT+=k9V*|6z6_I36Q(bmSCA(15i9uZ+ zeVc?Gr~SZkwczObn2xcT@yda48dJ@e$5@4chYg7kbY+z>N|w1&Ao$=eruwm^dk5&W zJBFr88ODAQd$+wXDBy+a*h;nz8(>F_l?}_HaSOKi8@a{?T&7Xx*14ZoMY2^g`8c-E%FrLu$6usYmW-^s0rIgaoHJ4J@1_EIi=z_VA;~( z#2DT2SpWJnIK91&&-vjycj;7Coh0a$!oJle-d8J>qMS;5y$53i%|+bytWem^j={7( z3BS7j z_0GMBgX4l+9W!Ce<5fRjDGv{n1Cs%Vdw!&_2NRf83-Z^Y4C+=N2p23eo&O4z2D+F4X!u2`>s z=#$uy`_9uEBMrOM=#8^ZgFumPcecJZM1S3%;Kb^EwsFSM?Q*@eio12@45T7}CdaXs zKv-wQ>5C3ygpyuUT*7^dfE_q||1I+RX87UFx%*y8y|?^d9+B19AJe4Arci2zl4Eeouo(b z(?>Haq=!XHE1->NPC&CVCSVWgK1DBZ&X;EAtig5cDgW^EJ<7UguH{wkxaA{Zr?Pk0 zsdD<`CCO&ObbzAFm#xbRF+Y5>@KMZCyHl{FpcPig_s_8M%L zJxHOu*anWF2yRy9GsUNl^Ttt7aYaE~K&T-2D6kqmUdtd_J-QpO?GWjd> z%XIkj;M90!vT(=>Eu_jbrz2G8dsc%Jr8_!|ur{9`Ar0X3SKReCZSieG0%*Sic!lRT zw-bCi(t#NHHJz34pg0Bx_tcIM=oz|PI>hn(eQ>JY+2C$8a|L3jkV2UnwGFRTgBE2f z+!dxJ=9FH$3H`SgAT`7JYk>+r73zElOI445FwTJ=om_q{qwRy+1i>@P7jvm{#l*M0Zd$MCJWg5^^ z*#lhiFp3TFUpDl}a<{7SyJ7I*^vF>qD9-;=T{wWj9heEK)_c)s;DoI%>r#3SAS64E zPf?*7Pp5J!yCILV+jyQcJaZV~4m10383y=dgQJEh6CSL8ylPw)JJ>cv3N>afuuwl$ z(ZaT0!DNvFhMXQeVy=h^X4k7YX1AiUV*q53g<)mmdgN_t@r-t*6r!J*hr3*# z6V-kyG5UiV`&$U>sFn!JQuzM&jOV1KxW?+&ujs$oP{iu@h=Uz>xldo?5a_C8iwcei zB0Ic+K&3SWPo8x3k~6Ady39H*rdksrR^dF!;3sOgaV0dVMsMZ1u99V&%jt!`ZI_Fd ztn>{EHmCT2JBy`_FBi2#ri{Oc$$Ab?(2)fxgZ%7$iCA#VB1?u0axS35OIPt0G190; zTlOz~whotgF@^jCP`1pO zh=CuC1tIpfa-W)q-6gon3!S5jHvmT~$8r_~V0|!mjl@yDHi-M90=}AtLAdY+yx8xV zoWNQ@%_Updi@uGxms5kjhn(zZ^0D%Tg<8Y657!hR#n;mV8b&BE_apg&0_1DZ+;HP6 z64M5ia~#TfjvlrIBE>uJ%3G9L%Pdhb;!zPm7B_s+;dr#ezEglNJC5HS^| zoLdTlF7j?#dH>|T!pkH~;8ifiMZ^tD4K}%OLYddBBckB@c*=T6W`1gr7TUWf>mAxW zt8!btNP}Hx*^|sLHVUKwD+RPrNuVd@K*O*F>!TNw4q>GM$Ojj~Wr;ED8DIZIR;=EY zFJfZao=f7SQEk`MQTt}8j)}4P=(fTm+!cI;q5sAR$yCjnYRTR$vln6_B8QaYT{DlG zU6l@R`6$tGubLYgZn}wBJ|5BWYm1l{uhdUaNbdoU)h#YG=&6Ltb#-8;0kMA1(j$B|9J_I5+^XUihKI~ZZ5>d=FraJN|EVB; zgZD=z4`C51u|ky7BvXp}B;gNqG>dxH>z~Sod>;$ggF#!s86*kQYi=B;#EQs~tj~;LN%r!A>)hO$6(#&Zq^==zl$5RQ|wUIq( z*8Leq5fdsgtA@m}N$T=fYXoS)8L<_kvdk#FP(UkoDb`fG;^4MNiow=w32UMCf*ns$ zQ*IBc;{_Q-H3tB7t0`=`)FyaH_P5FH1{Xt{{4?D8##lV)Lbw(tPeX@AqY)$YFi*QN zXvBA_rvch9q0bY|-~t+I;83x}9u?nY@U#SGAg-8n@I_7KR6%4rFU|dfkj}@l>&3Dq z*=q@Ve0(}Ea^IsGcRC& zB>GAgq(`sSCDHV3RjeJjYYoM?!|J}?B<31MN`x5@EZG@kQ?|M-Z@#On@ehum@bU=T zE}oOCL(ztGYAb%5ryrjl?nq4hS>r!_H}9zQ6oB%uR7docZ#3IA{3&ICf&Sg{>$kd? z1B|1pY~JxAEIZd9X=#EKhMf&NGP-WE2Ne67)IRLkNWFNh65ZNHNaB$&t~C0Iv~GWN z@U&MG9GdMa%iaRrtKegjzML&>ChWqcKg`}@Y4#*-agzF$uhQf&Y<1C8+R?I4!Ynbk z|JPMhMs`Nkjb)DzHxw8~ZZ8z{qnVkXfq8QkdLEYvar8BYx4LVTz70g2J6lq9dSOT& zVr(99^u(GfC8%alpb1#>iVIg&@u;+vo4P`Bpw zsNMv!F1xQ$Ukg6u#OTav!nkq=EK@-}wviLp_GQir&CE+{q^fQY!I-hdkCv6+Ex1 zdJT?K>j-gd%75j|Gtmg2!f?olg}GQqvJ#cA?XcraI2as2x;?k4Hd>%TV%}XEAi+P3 zZ950q$sg%+YOWGCWSBlM<+}-QjhDAr6Ap{Qx?X#W!2SNBDjbICac>a7o03L9D+*_$ z{e;30H`sC9o3GSyPrtcquiV|@{YSMu%HiBlZBK@^Pa4s`2w5Kga<~|LR0v55*ON=` z`3NL)jrE*#jgTW}yl&<_Z;m`v8&;m(GPUs&$~;=k=OO9kkoH?d3_ZSFh+fB%3G~%c3cF&QTWgdMyLA$+R#URx5nThT6x_udtV@U`-nBJ>YF+Hq zs@y!m$6xU3U&K+WqqF^Tr7;cvIQPX(8wRroagd= zWP3j+$874nDJJ)yCM&On+yi^>tRkWlcyW-CSPkz{8Dq(|!V)CyNF8UU0>AjIhG$R% zIWYNM>ua^?P-###Xkbt{9o(a2@wp&wsr+54DBXj17T7X^~;mwS6t87;9_43;L8qNKR_e7fhy6n4MPE}YfY~`Lt5xH zoey$i0drcgg2CVna5M?b05T-TX#YtW2TBhJ|i2a~j_G;S!3fIlxfHK!7P z7;?I8E|$BtR|i(DXDe5B80G56Y8%ou@FHZK8I!LhzdKz)ex_VuyscmN@-ZF5D+1_j zvXUF0OBNLgr`wkz<14DvGbn!HOY>(3pRikAs`&K!FqluaKa}>SPjk!Wv$ZphGOG@! z=PP1s`+6K*GPwr4`&Rk)B1d`$>_1<}8Qm>8WvqEMi73@D*L#b4zXsXtJatsbN(P4v zX1VSLp6>fzc}KPeSX@jw!9GxfOLH-7M9S%a1}`W(x*f<9xDTEQ9(@|y)(o-wb*Jpb zmY+hbM=f@JFv+gXY})WKg@P{ju?NS=`z;-6j|>(6G99(Noq0iiZ+G41_LS^R`23vT zKa2ApV3BJDdva5qa6zuQyG*U~I=R0a zfkEdgMPti!a^~oxD+VN$;8G*aQ|via`EW6;jCA3XuW+R#F;tYE-4qyDf{npwmZ)Bb&-L#1Q z9%^F}u_pC7M*H+S?w77#fUNcOQA?#*P~X7K8uB|WpX=YFUUS$>v+jqD}t^ShkQHBofMDRK4*~EXAI^K-D+UZ=rkl2yr-9bay~K1sI(6m3i{D zBRx?4p(wNMjN4cxIsav4;)s6gTyk)eI7pla~tSG%Nn&Xd%#cZM!7)a>=}+V9JKm#ZmU;?nz{`X~J1`bNp$muGPw6 zd6oqS_^(7}TGQwkpf393@*)~)nNhaBSd#mi-~HW;mI#E5R@`i+)oZ(rCb>LO+XGp% zZTzV$kV5mes1fR4-zcV6^=hfbFR`w`1b|6QFjw?W$+8DvJFIHxrFNo&0c-ry$l zLOok=nivV!B=qvsLlv!Jd{vAF?ZxkeaEY{ZiE9w;&u+$$>?JmIoV(PwfMR>ot^G|! zuU*_3>{+pj$B?r!FpZ(9yVK-9XTW!=`E|zH+v@9hC}M|I&X&A#Hm=~Mar)Ex2RQ#3 zQDzdyT)g-z$ugu|=Y6_)a&ScQSToVQDjoo*UK(AV%o9>mdFk`VvDi|{6+)2?M9Zd8 zV(w2*RnwkKEp+N@1-S{%e-<#eZxjT7jbZ0)r7W3eX`C{^4wC@Sc1Re`85|mYrP3K1 zygOcL+$Z?3xO=s8I}LlNl&sLQnMI?)3`#!G@q3YURKcdYqjr_yOq*p4rJzB%Ve zD`SnTSRvV4qz3iI9lcb&DQlJg5QnLKVILFxYY25=EmhM`Mr^QXQlIK4~%i;o^B2r)q)btBZ@JUJ2uaDEeO1u6Rc|;nWz1WC!Aq_@7vOWV6?jAu30hUA2|_R2TK+_8m* z7VBt)0=~103+M$-*4O;4lwDG5G#Nje&8Nb9@jZtz*=PYU`b0QxRvh@1JBdA z#Pds-570IP@w3)@%x;MdB{`X&^6yI1A&31by641_U*gOjD!-I{bQn#Vam<#!sZ}T1 zS2fr&E6u!GugwUQeuc#@shFN{$iys{9u7m{yRZ@XH5O5A#7lQxY0CMzoc{2 z755<3dW}(V-8(u=$~onn%f^BV=!lFK0iWXJb>W`A=u{|TRr~TS{wJpRi9KXtr*0~4 z_ENUdGB?a-1wRz<>JPJFSb&}J?6*F*UM6_K-VNcRJ@-S1qro&*nXvXcqNOWgEq75g zo4j2qCb^pjlVLS4js&VHUvSEryg@5ea2v?WQW!Jc9pCt>>%+rUetk?+Fk*@CSp|o* z0qfcgF{AR?QaP>duKTgK#s)41idvRFOE>@F-r=6km#`f>ce}m6Cr>v{>d2aGoxA#( z#+)~rrv#S?KO#+v8!V`Bc8j6C^OAH!*@KEMo@FlopiX?PKiuxmFt%Qmd=cLkfZ^&X zqHy)yT888=Vz>G|Iy%3!5RaXW$qC(9KvJj{FjL5(=1(`W~@JJ&xq?9pP~wX>qO zFnfY?D?-hH89q$x@TyY*Vco&-NFZ1L80F@4qDJu%_YWQU$2lj6e;Iv*ct5FTNn2{Q zK?gnIEme;aVPq|8ChGF;5*rOD?D6px)&ZQsUSI4uaK1dI+Rhf za~2U10nSW^gcVe4lKMRKc!uIrEn3{p?H8Sb-h{{0{|W%vTb%Raaga|UagKtemUnC6%_ZWKD22QRnyfsdFqI`fT)?OWDU(B0%q?D($ZNj zV{gk8w{`plvtQayurmMsBVuDdK@JyKCa65W)y3hXyh!IuyKdrGF;^s1azCWR#L#c%&n-E9n?r_-tLbF>!-&Dj3N`SanCQE6seRlTG&DxoOru&|0z|-T1poSt{JJS! z?M!u(JE=F?E|3s`jiQKxr< zZD>}oO+HAsrB*JMH_&fA^W1%p6)rhCaL?~t>?T~w#un2MD+pW;lOwE2qYy5f%14=; zc1pCB=ocrh^vOAS+#`WC`4uhWS6!;Y`*Wd&RdDAs#y-1v(N!Bwl=T`Gvcdd>kO$hF4EN9QX79V_ z;lKQmq;h%rwKOKQ_CeS(lg{$^;;3OLcDx2zvj3X3MTKxZQq`A5_?;0XP>14l1bVy{ z$sJ0?TDOdu<7pv;es3Li>K98VNeFVws?IQ!4;4!1j zwKPm!S9rL&4s*IOc`avDA(L&|%hhE#P$t{DYNUAsb0l#?hZwwRUQzTH+ebZ{*w9z8H zF0pdiK``_NaHZCC*tcjrzEaruCjBEy*|W*LY|#C4zCW*=?e2iv?~S30C(o0o$$*GD z&g67-d&Hapjv}xlw}izeRx4W#39TGLJ`RuQsW>q>nn1tmXRL}X4g-m?Z@e**YXo+I zopypXWbR&m#L^SP1mv~6S6_X`2~iV)&>MZ2^YPC=En+4O^kSfhpW!{sGm#s#1(yp^=KWIG*I-$ z2-I_Gc?!3&IrVvNQg*o+$da~~H^yZa{6K)R&*DCBp>kThX)J|kjE3uW;^Z_x)mK@3 zaO~B(j{H^W$Ohlch8!I|lf#8)pavM7A+X+$A_(KQn8Gs|ds)yDHODBZJ7~Y{rsu>G zMIiLAX*X9wTsXx#N6E3W=JJ(oa&4o$mvPds#nF^1aLz~V)y`OoX726{|I^umMGPMO z2vfru(TVEfKWUYUVh9=*QG&+J<)3d}8HN)|2jA~9q{T;Gi*Q0*-+pZwq3V;u`cQO- zY2uz`seBm`14*@ppglm1eo?U$&b{i}V`2wn_nLjeQqvvx@qV+pbQMWGC0Z>&&L6s} zSY<~lKUYI0)CjQFE6V*jSL=T2)VppjBsD#yrDbW8VHGdfwu0g}W{hkZss|jJF4+U7 zy}Cff1+|s+_SNB4Hun_`336oRR|%3rH?j6BHjhYe)jkHsi1mMz!T+NT)3hP{AsK9@!MOQ!CJ`V-f zB-rkcGlZz7F&(q{e!BaeIG&i&amVuQg=O3D#Wk_Ls(U}6ekdfFA+1e8++DgVxA=ao z3cBg@xOpUa)y8jP%e1;VWHZQZ)_xp4_QDN`YF#aB3=3 z80D14+iLe!nCG&>#-88TLCvHwnEau~%5HQQ$G~|Q`=b1G`{lwu?(b+`?N>vy&S9K) znMs@Ykl1Sf-M1%q?@Q3|l6W6tz?I-w5h*`nQ^&^p9)bN1zr8YnS7d`#wi32Z3!WkU zn_gs@+4p4|j_4xDNK!1OCIu0o9x=#((ka9ZOFYW9R#g3M%ee7m`T4C)MIiAwhjF;1 zIcyYbhTh@1vA9@iBj+%Yu(WPC>pMO1i*|~BRc_tA_)z5I%dAqsE%vw}>YBUfyBtXk z^%JXl%BH>P;`VEvkm5s*nJYQGF9C38pML+a9OVZYq5;CG)+sMFyb*jc{0D? zUob|}gq5ln#~x*a{*tlJn`-i82nintoV}elF0SVn*=O_Q_}I2>*h^`vt)t(4AqR&a z{48{zJ5Gof+Z^D>t6S(q#5n1jO;d1y#W4rsnk$x8 z%D;7EvNG)-GQm#c59L>zu#NZ{MKB7vvh!?LbJ6AYna0`}YXoHwa}-yXY~!49ar6lI zm9sgbhq~UU2iQ8k#Ss5f2-@1(A|cbViNh?cZkLJMr@b)MEjZ5$5zjoYC1IPp!l2zI zp#2Vv5}&g zA#K6M_VJqwrSp?G(zr1y-*_{OolxN{pe)8*RCTh=WPZ*DO>Ay}=e>Zpol2%OVlXt? zvLH_N)#%DyiOAaP8^=z!!Qvb@uPi32bJRyqt6YMS3nY=WZkq`EH(*R%ES#XSKBPV! z-rW`hHOKjV;-xkZ1fqt^@_j$UL0)TMlFaWPD|fvp=Tfy;t|d-01;doYtMXKL-A6-Hq!d*so0$|VR zxl6>AukoY}gQm%3%r;{4FL*I|z#VI~uctyQ=VON^xF?3CR9hkkd!meRG9Cx+f$#Z5 zJc}Thc;l%?*9Jc3ZDv48-deNl@1jlSK+s5^Yw<&@`U>ruL2tsJus5Daxy!k-c1&g( z7fGw=P-#%O_PCo-SF(=qdFNEVRMpH)&T6i{aDQ5fudwe_5Cao>XMfhFxZpJ?2>_?V>y~41s85kbY0%ZNqRsbesEL#l_ejDcZz-P| z23u^DYh(t9<*Mu==v@YTCv- z6}|RUF1Lg!L#}nky7HUXaB-4OV3$w@&nlZ_hljDXSGg$AW}ZqS*v0Y5akTWk3D%3_ z8YW#viSEwDR1dlx4xvWB%+g{7d^&eNhH}Cf1m$hdq}+7Fm1dz16Dd-v1lEc$)ECz0 zFc4BvkR0=HoTPc2(tb-hSI}ql4B~WUjKWx*aX`m2*@#~xs2r5HvLL+b-&z3nlYU;O zDZ@J5+qXdhfbNVbHK2gWfb;B!ucVo<0W24iw)Ep6m3FFY%*olXS9wCLLarDgDXKY; zlC4rfT9@8zc^>ttM<8e@40(@(c?W4pJ}7k6^Hm<3YAyUG^X5nr8Y*+|HL&*c6J9cD zt4OaFk0n{DSzFr&_(?nV$}p5~{?Mi4rgqQbK>iyliwhTy2cHU%8;|%tj*obD4B5s0RM4$3y*m4;1u~7-t(l>REG>-bZr_Evvq<%mX2zv_GumwS zc+VACwT-?=R&Pm3L3<%7`E+Gd$seaT;eD|DpnOi>rN%pHJwhCSZwmZAnXa27_cm|I zhYbf5GXzu^S!Fnd&)K+lb!HAu2;U-cxRobc_ihm4ctfv-8#$9Y@TohRELhwbQz zFw|Myo!47C4>OBF!*Hn0eELmNe<{*?mDx0-gwavKa#1-dFr;OhUESYPq;hqjMdMK8 z?pjvRw->Rn)#f$IIa6bBi(TgpfI+TC3ER?iTz8c7SC`bC=1;wgU(^*3WAuAkE4D`q zo{Vr*`4B;DJQDkP&t!%lnW#I&F3n==1Y3P=X6@N1O}HM=O2}f9Ts0w#bE;a7xc{+c zz}~rVC@cnn=!v_hh>|^KC}m1?_H--hPLnZqO2|iJ7QjLY0-1tDXyKtqIr_WXxI5Xa z3REh&Ura#OYXfIKT#Ey5b%aT6+T+AF`lVqG2haM-nXJ;V^D0LV^d=R@iNLkM;EbyS zzaS}X<{#-XECYt8%;Yth(yaCMJJp(e|6(LCG}e`+ooJBe;h}VbJT3JI`@ph~Cko)K zv#Xvf<2tTTIcthoPmQ~lsCk^-ux)wfPpW=qihvxYo+m z%@AMZPp48H|Ji@_u22;lO!V0AAFarI*~)jH!BMe%OZyVezu)v&Vzxx%ugMZTmc?Vl zx!-#`el(_HQe2SSwomLL$>TSW?hRPa?az-3bF?$jN*6S2jmZ4*8TBT5(+0pdZE0er zQ%-XAFI|EMbaDy?mDl>WR-J9%gkNnyD}YDe-?)7J?sWW1Yk~#W;>BHgf9A5nk2r5- z$nb4ukZfa3%%JjD;pY5yOZd}v}Vp|)WtoR{C6A8HLeV%KT7yg%w;b(kBiwd0kJW7+V-+7 z%Tmnmf0aQ0)ph(^yFg=rw>i8k*zojygFPn3w7j_Wp1MIDl>6Kpe-0I|Ug4BKP!(LE zzIeGm^8GCooPl<`lW!~~Cy9wK3t;=J0CFPy;MZ{kA1LwlTpE$i419%RlUU84+uhS* z-K>1+d~~ob`GI%;d7oR}^k0k5gKqxMyHu!poRryv8_;6~YxgOQyG0jP=4$W^F|iOQ zb{Q}t!}WhR#b3*3PM0uuL$$iDn$%eEqb5JW+qa)x20cD+9HS8z)T8$vRGss1_mP~j z)nl|z1A|jn5s>@c^dek$ks%!xswj2%$SMK8B$_DipJqxNHZCygVCZZLGh-Q2WB#E2 z_bTNWJd6*E?|i|j(vr9uAN5dbVshJH_gbWbr z4I!JG7Xo#$E@uz{yM(1%u4X3}lio1UeDQIVF|=fs0+is?xvcj=FDgOhaJ0n%gRlE3pS}Aw8pJld|Knphh+__;ySNUi5 zeb@Dn^}z!wC!l|)2B{N|`G43u�!hbzyH&6k#h$RcT65=>pQEiS*t>2}QaP5~Oz! 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%0AdKJ%Y~RSJ=D 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

>{bIA!0%&}rdFdR{x@g;!s> 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 literal 0 HcmV?d00001 diff --git a/docs/assets/img/github-issue-light.png b/docs/assets/img/github-issue-light.png new file mode 100644 index 0000000000000000000000000000000000000000..2a678b33d8c76384411cc4a76a3d6fe57ff3c4bd GIT binary patch literal 203981 zcmeFZWl&sQ6D@og+}+(JxVyW%TYwn-hH}P_g=mFL}{ukpreqW004llq$sNm0El1!fP+CofPORlJ(U6a z0pqEyAPrQGlI;Ni6`&+5rR!sUm=$1}q__Ga;fJdx&=zuVJRTxLQ0=0)y+vMG-kA1V zrjYmeV?9oNa4Sq>uo1W-k}bE)ie8gi7psz{P2K+X*G~os#nuaEnV)je5T^}u1E$6a z`=BZw4Kz+zo?f(H>vqp)SD!tzB5rO>cUvnjgw{@O{3M7a&Lr03;S|CD+XdM}_Kycu zPc0?DQo-Q-ZxU))y zpg6ehOMja4@`z|qReI{BfXMz*hyK#~ICg*!Kd1(xvy_D5O%d!rdkR<$xjEnk@s!Mu z@%fS}dZ=bM<-h(2K0=BN;luf%me3mC6EEg6;Jp?QvGZMH;_k|z z(J_=S5kM9shbh7WuYA*n8^H)QWgo16ct*@V=SmnJyacaIdSH*R5xPGck()^Z?iVAK zXi&gOHn=OuG~)Wz3-^n33f;dlMl~_ajg~~8#__q#lY-qJWG9}|QKN}~=jSwWF~Ixo zUYg-ccYlAs5aOmy$MOEYw229+cx9D>ni}6~RR#GuwqPc}D(XiW<52_^yUG{;Roq8?Erp=+ynVOWp06YrfyK6niQb=3cubebuUBFD#? z;?8vaGS3wLl`1(O;bdjQRR}YPQG9RJxC+If4{)s9mjM25$?ea2H??y{EHNXe-La|c zAZ!2k*dQ`)SIY=2uw3LWI`Kg{#+B1vC{A8pj*1cN8As6nC3-^`*S9Zp{AVWAPu98% zY|#H@6kJdb>Mf$SH!r`x)t7t2s4ZNq?5?i|0#rO=9gzH_$UX0}F(CdH=6Br*#`EEV=ayAn&}}SqmwPH2Aj* z&xb>ZpaX&D^^sCQa~ygcqo(7qNV`&UE@iUpqpocN{r zuf5AGu6Tc6;|9RuV&&!FN6RTHsgpEws-TeufBJQ$$>O~vhId(w42h$9-Y-|d_L<)i zB4zl8iin6B?z{SfkhtLUi~Nwi;J+#lB4W5^{&+Nzbe`y1v4Bi7vVNL|>^qIV zs-k%c^J?}v+sxhH=)b1twEaa?{`^GJCw6Dj#?Sj3bPA1XP17`q-$FrNcp}1`A9e3T z#5LvA*TZ563ciI2gqzusy<+^QT_wUXaeq>*^U#DkjJi75vF;1$_{Zbaq-WwT42w^d zmF%dMRug#)>zkV&C5~9TH^(g&8uq9O!8eEO!C1kuPgVwW>u&v8L)+G;!wLjei8OHM zTutaGU@ZSNR+a&a)ztz5Z@Hy>%z?n&eF^;-$p0;}4duZ!A#d6Z)Bgfe_(x!FColJq z$ocU@6Hb?Lq1&g?YQiTRA`}z!65vsH*|mmdv|i<6+JT2!)Ezx&GkuVj_R_qKjj(In zZ!f#7%7Bpkhb;USL_HqWSLy+$)Ow(MGc#n&Z=!9za?zw`bmY zE!+7&+(wsBQP+dkbPJrh@an%TlOHnt0|_8-=!GB6kU;|O&w$u3W>9CIB@nLPv&{SZ~HYQQ%2wsMoMVO5Y@!(c-{_POl z`tBD4>irse2J9O~U}=&42^o^l<_oiwE_guuPkyua*KgjTdiq2CrUMx%e$9Q$f10Az zBJd8g4ZyjR?&vttoeOyO59xPyb8aO1I%UoYwaiqHdvzQp)H1RFfq9EU{2|ZY)2n8Y z&j4#X*bZKdH@B%KWQ6d2#6M=F@K``D{I$$jI5fwHM?uKFKj}pTR93z8Rf=J~{uU4r z6g?*4+PyveQd`VcIYO}EvETD|uY6R9`;XAQD#EP~(xzH^O_st;#9d_YS`wS!6^piO zWN|citw90DvdJT!E!~>@AAy#06Is)S=!{_pfG)rn8!P{C&LXIS!1m}VgLA{BOflTfKWVB3}G!52lU)⪙gO|1SLFs+k@wA!6^3Sg zGnzR4@s&C4wy=N0k&c{xpV-b7~`(h?D<4Bwz6Hn!U;^rZP)q|4dj)9K<%5iDW zw!E^td^ZhlYVJ^8tJ!qwPYv&KohdSDIROI#SKrNsy~VB4f!3T2o6d;W=dUG#_vs*t z)FeY;3H0P^Sl;G1jG39w#6$BrvEwFcU27%6BIEZ)VsGP^v@}g$FNlov$&xX}g=*Nr zw^#wV!XniLWRlnU!;ZCP+e|opMF_^MYe0bG#_f1LXjT{o93|6FjhU zua?0uCo<$1myp)MOB6K5Xg#~nB7!2@*gs>ogoUbcO%gug%M4&LyF@sbrvje{@Lp`O zC*y8t{goaQ@6{=2>hDj6u)*}FMro11>?nGY*`z|m0U4O)xk5@s;8?Hy>7Dpy>YIY^ zy}vRB2`DG=z$2j}R{x0goD=R$4*Tc^npFI%SEI$2V&;36fmi2&_;<)Bec^5UgV0h zwaH)E7R>V(y@UIsQO%u~87~`|0aU}wp^t$Nd`bEBU#}g`->lP5T!V2zaf>=hqd2v7>i>voGC;ToNS6j8R&0y{lw!;GYu?Um)WOi$s?i z7RE4B)eD9Mg_g^;m-tJAGU&5ARS=h`7rlHmVs#85j&gG3Rf8HF9Mpc_6M_N%b2<3U z_cy+-o{5kreGXL%y!cSfk%;=V7;4f{v}XPilh!u~`IK33-g>atzmF6`_!3b}+c_D9 ziM-nywhC6{1bG!XPNi1T+tdDwsSs-9c{SiYahQ8oS`6Yz8{w8q>PCc1rCY~r)GUWY z@12g`y!X1GxL0GOYc@(@73u&vdRsz5puHiv0GS7OjSk&99hC66;Z3sh;r}`N3oIh6 zX<#0?DW)fQrbKGoMt6F8Cbz!aABk}l5rI1HONUOa!Q3_{VdCGk=&;(Xp+$8cC^UY~ z?x8aBh|#2DabGs;tECk!M4CK=oC1@@R=oT*{wP9Y?FP=FEKKWIRcKn zcmXeJXs%6cA}ef+Gp*0&%k0w6N3D4?AW-}Rem;fCq-%V*j6L5Vs*mGnnGZC-UpQds zDRls*@yp|GPF(ozGb5BGZ5LQv1e)Z-edXJ|gy~?=siqo+Bu+c=3~3l(8kXd6#^lwA znVTmwQ%5fYBWQ&^sg9<+z~_laD+BO*R;wHSk^~ytz;PYq|kR1(DM`fr(@a;)OF1zeY#-gD%9?H&|61#nn z*rZS$pcX%+A>%54+ACraulEd-o6YRgmM!jk}aOW0-hPR02S+?p-$PSzQck--~Y^t`dpqKC#u zm^YR3c(P2@&zA}5PO<{F4aH3HvJ)avY3vTYd4+C$M_i4J)V&{LMH1;{t-fE7T#D8% z>J!vEdBgbly@q)_$yjtv4SzL#9<`;Hpd4gb>)N~V)hXrZ7d{w9HBdgvOv4ApS(!D! z?e_dY3*aBFoNh<>hce4cNGUk^W8u=io2@LVQMd?*H)jFObd zg$A(?%k=$W!6Q49u9sGanTK=o1#UprjR4x8wX)k9r{{`apZ`x{mXU@~fT{Q&Ov~i>c($}R`_0v_3y8Rl77Pux+y!fO%CGkx0%)_v_B3-@Msm7KOml)exYq` zCR5S@tg|_fad&C&wcvN|<0FdfRhPQNh@XRiM&J{S=ai#+KrRLl8s8YH7%Pd_g4VJ=prkVSnbCSTAor7PX}jQf{rssTo@MARMuC z!^v049_ACDeko%_-!Dy`ucfBslOa~~NdQ#`wpS_8*hGlr=a`3wP4#ua78`SH7NmQ$ zXJ^DKuRQ#kCpu(_AGAp|FE8Wa;`=Te6r?mTqTuvy?L(lO9fb!b|25h}$uMew3_MN< zs{2JcZ{H{xtdbq+{72&!i7!2PHr!L#Xq^(*v)fbX7lTF@mx|u#R@g@@`+aQL#2rf z-P+sTVQl(yRNqlTa`>15$D1WbPEa*j9tR-}ts+9b9u?O+`fHL^1MQ%~;~|+)q^tm5 z^w;jnya$JNi2(?P3fs?-adCY;;Hc9UITR%W#Pp2Oyd6nwl<2Z?%Uf=N@y7+tysxRV z<&^K6lEp|lvA`E8)VpybL+P)Mc-F2weT=y=+G~i86(+0Chl!j_tW1FvpD{^US;3wA zhaLs?kTzc>XDDh-6)&3=V=zuXWi~vEC*88kzc=Rwy|Jo%L&H!5=XHO=fh=k#7Cuie zl_qXpCtk+hly@A0l0@Jnv$t^EAelcjfVjsq&a($-Ht7W?7_ie^Hf#;0Ed+OHh=r0h zeN&7MM4IY&lTa)?ZfX%G=DI_Dqd3M_CIK_gExvM1dApLkYwBLiHwc0ux}n>I#3|l3 z*XQ!uVr!S`CD`v~@1CjtT6DvYI@sj2%fu^flqdUT7L|k=p26FhD! zf%*31D-%y+(d&cY#e8uTNMr7hu%hKWGMYR%zs`;f8DRD^+xee!b#1~22<;ecI8ig^Vp0fC98%R-;ls)7QMNpqUc{59{L*sq0 zbo$tfU8s)hha;sZnqT6`xmGg3kX%F7^qKjGpk_N!He)TP;{umzTek-`U?VUVydR7dtwD`&>M_7StL7?v?kj1$LP4SBrm zL?*(7w69A*!8dWigRzp1!-GC2med~SEaR5?fW`qYQ-`yLo%QOJ9oDU?D9v#fYPMBZ zVFNZJOVZE?+ukZijTL?EtbPjb8*i9f|CN%!2cAsxMp)>9a%=06!Kla6{%1NHpu+j# z%H(|&%AJIa69S_%5J+uO1+p4Sh8T}ukSVQIT_dHSdDQgvy>~l&XHq@c!E+IeF zXx~X@y`m!aJ28tv!yeH7J$2NIeXJeZo-3RYTdi=RC7{db?Mx3)vUcz45SH~5Q128| z&BP^XcKkZSmdcYjAhO=N{J2;2=apnW#48L$z*avL-v}X?s z7(;G)inenr-UAf{QWEwC7#tzdLFF0H=Y1z}3O`m-M)dDr`?nglW3B5eyOAKkZ|}RCpdBy6T8v$2T@% zm-Z?^%Wit>vUpubZ`eYEo7{R56TCC_od?W!pdj(yBd%dq6TncIzxyW0(sP(IGT5$A z=eMnuYUdw`LMaLkp_*lcZT)#6gyLjY6FexPUOzB+w&MX%>+uy>jph ztFc7iZ>YER0c#cIcY8{-kVo#7A%Rsk3pZBK8zg@Q)Qp_8+|DAsRFm=L_xPVpI@U{$ z4Nx&EVifYVX&042n~CJx@k@+q;CMXyimHBv3WJGuJGRN6BA1}k9|f_eU-@8;H)V1w z;Y*hWtj`U#UL&e^;zXoXtn@T8!_0e#TYdie;*x9fp3G&WMiNMYdy{{^edi`{%Q=M# zDY~()dM8fcbKoLAqM-9rV(Swsq`;19uR&FIt-y@5&rd29FWZBdjvc)J5hp6XXd}Ug z6^#zactD$eKSIky>{?+_{$VuAFYlY#!!c5QPNm$1V9>47FI;ezwOGwVNDTUa=yymp zZgmWh*-Wg3Te&e!+BNvS%Z!U#Uf@=YlMs5u*etNtE9PO^^d0W-`LiK(dlxFQPVJ== zWMc7n3y0Blfx$xR*CNpJ>7#`vCq=qAj6{bTg8T7P`aa6@%rbbtSGoOZm2iA$tP;ua zjN6Lwg*<4{2jneY3JJ)rY`z}zP3pYG!H9`}*HnXKddeBdHG_CQQLui!f?v-+Q&4Lf z6;QOud-VryU7mjOJuId;H}03?r0%OW^~bV18Ql}T{L5+0>`#=}d%YM5U>zKyPe3`6 z5nwP!T7594TsLrh3gWau3NVWLL`4new{kV-KUaCBStOz>I?kkq46()^Vpi-SYq8a+ zZ`h;Jb+KM&zUJnb$^Sk@In|+t1R)44O5eBY0-YMsN4I^%;?k;7?8yJG7T{AGY(**Q zM&7KJtoMNy7J1l}%x4#@YGd7ZQ@(H3P>Rz_H4`!-Hbd;j-=++qq~U?t8qJyj)0PX~ zKpbJxY<8CVCNDrct1|ZoCHZwyt)Ip6?`4ugz&{TqxfwIKCu;X`@YXK^PoiZBm7*uH zz(L}3D!sMqlqBxb?OH`+GW>`ZKtUzipo0pjT^L$yAVzh8U&Lgv*6#^y5J*%9^vAxW zu>9U(K1)=NYkNbedFqSL$%Fr<1;wZJU9O8A0*=7ZoKIAXBA1XTywTXNh$7jrR)Z88 zr!xMHJ2n)jrL1Vk1Pd?aFX`oUoav}3N*8m(Q&R?RnE*a>nMN#dfVE~LEkz&>K1tF+ zVp`?2Pd3U)GXB@}5vLhqr@J?F9vlEs2a((fgSGIePpA;>Uq)5aK5`bNJt@0$G)=}2TwK1O{3-54EV_uo5;zqZ9<37b zZdxfzU!g{3D0a=q|1O%fI)Oj>c|z0sySQQKgDrySc=%+RWdq^o+dVkTE6?Mez;cT^ z;(o@(X-^ufC;mc|F-7X*z@^9zQtcXjpEfV04Z>CeA;-R+)$qyfZbc#69Ua?h2s-@w z_Qw3=%L0CG8SIg~X!gvOb15Xn%ZRCxAp4K@Ewgq)gRQtf9ZTkN{SZ~Tl7tY{7}aHh z6kk?!i(i?={8oG5yGg?3_DgSelxln_)8FAz(L zNj4(yu;mmBls`TEnEQg=^i3I;Vt52K&tX9kJw;}+k_HUH@8jZr z{5_xL)jV0352VtbzNion*{&K=r7181wYF=qWZmqi+*zg zUk|JB((FiH6s@LT6$A~9*34exfp_tJsCOezmCFZH65K{SIO1?G1rja+GayLg= zv)r4z}lj+nUHLo#$3**L0W-=r`4K~tQP7~TA z0>Pdm^Zd)m(Rg^%czv%Q^h-7e2;4+S-HUUP-VlP92G=5StCH3WUGuSF4F5%NVBh&I zzOA8WmU}T@4;-_yaZw(~tdT79px>#elzad{)pBE!3;w?kXUla)6lxRFj0?Z=;Bfr< zz<~Qz#h(u`uJzvlO?=wj``_%6 zTPfacc$EYSEU3)8dW^XJa}fk1agWTfCPq-u>DaSjU@pDEoMkME0@I}?e>i5-JUa{4 z*=66fm;+O;@>6^nK-FqQPZl~zcnS6?nMHxx5#mn-EKTm&r(4vd zbSJe%eKKANcL_%571UH;`p# zxsJJxa&=g4!P;||M`G5~@SljrPp$wW16)r2fQMj2$s~4f02kTrb056RQ?FD>?)$;hjCT^!G!(sL8#T->;l*xG%(xxE z@=WArv0LGlU_d^u3*CO0gLx)SMaL)F(2m+7MoEtrP!wiW-|8?z{&^Tp=o5EYgaKt= zta&r8k`5g|78t#62-gUS>r_zBd#WF`re7qHQ!BJUkIKfeKo3-1tSqV-hUC8?y#=PJ zE{N>PUwcAe;LR6gAaht$^XZ79$4$6QrIGa`4c)`KV|}T`$KJ%#`v{6c z^b0F@JCo}<&Wa?TsTD5-23v)9ZUa3&ZV3VbZUMa+HOD!@Z=#F z3f`IY2`$w3>UuPKL%GGl6{v9{yTEOMRCV#~wL|ft*Q7Q#J@%Wh#nYN$LI(_EG~S?c zBZ*(@JGYL`95A>21gt(EC~H5u^!*?tq-L#p&`o3){e<))dQcM3Y;uIYtO8ue4pwdw zsmilWeoW14_6{vFq0xFrhduS0$YZeffzv4hO$k1Ok0XDu4jVT${)<>ofa3*Tyk4G* zBVLbr$%$8Up2?wrs3b#n4J-;I^_uoLwH21G6`5*Q^4q<*y+PfC|0NOBTQ{xu+N3hf zFYE1N`K-k;OC$d>%>8bC$yb-x3H}!0OM_~Cnd6F~2t(AtDEX#_**jR8O+b0ikBSW> zKRG`^#W`kc%1LY5nle`GFZ66ov8W0^C$h(U+%2~u!zezH-kpdBR<3hsHe{pn#pQP5 zjE>pC_cvN+$3!VJo^d4EBmz3X`yKBlsS#3h)&C$EhWuY9Pm%h)g$-+pI440m)%&^e zg==_m=SPvzAnkY^Mv1<=Msu2y7))uM9I2ss^~}XH9CP9M!mCyISJc