From f0742c15f0c54867915c66093f246457f7bcc5f1 Mon Sep 17 00:00:00 2001 From: Bruno Melo Date: Fri, 24 Aug 2018 18:25:25 -0300 Subject: [PATCH 01/41] Trying to solve issue #249. --- heudiconv/convert.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/heudiconv/convert.py b/heudiconv/convert.py index d1749164..4ca8d3e4 100644 --- a/heudiconv/convert.py +++ b/heudiconv/convert.py @@ -442,7 +442,7 @@ def save_converted_files(res, item_dicoms, bids, outtype, prefix, outname_bids, from nipype.interfaces.base import isdefined bids_outfiles = [] - res_files = res.outputs.converted_files + res_files = sorted(res.outputs.converted_files) if not len(res_files): lgr.debug("DICOMs {} were not converted".format(item_dicoms)) @@ -469,7 +469,7 @@ def save_converted_files(res, item_dicoms, bids, outtype, prefix, outname_bids, # Also copy BIDS files although they might need to # be merged/postprocessed later - bids_files = (res.outputs.bids + bids_files = sorted(res.outputs.bids if len(res.outputs.bids) == len(res_files) else [None] * len(res_files)) From a75167b7fffad5ec2c083df7abfaecb208357805 Mon Sep 17 00:00:00 2001 From: Bruno Melo Date: Fri, 24 Aug 2018 20:27:29 -0300 Subject: [PATCH 02/41] Trying to fix previous commit error. --- heudiconv/convert.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/heudiconv/convert.py b/heudiconv/convert.py index 4ca8d3e4..c78c8da2 100644 --- a/heudiconv/convert.py +++ b/heudiconv/convert.py @@ -442,7 +442,7 @@ def save_converted_files(res, item_dicoms, bids, outtype, prefix, outname_bids, from nipype.interfaces.base import isdefined bids_outfiles = [] - res_files = sorted(res.outputs.converted_files) + res_files = res.outputs.converted_files if not len(res_files): lgr.debug("DICOMs {} were not converted".format(item_dicoms)) @@ -454,6 +454,7 @@ def save_converted_files(res, item_dicoms, bids, outtype, prefix, outname_bids, safe_copyfile(res.outputs.bvals, outname_bvals, overwrite) if isinstance(res_files, list): + res_files = sorted(res_files) # we should provide specific handling for fmap, # dwi etc which might spit out multiple files From 2ae6263c96078f40b43b32f744861bca3147dbae Mon Sep 17 00:00:00 2001 From: Kasbohm Date: Fri, 31 Aug 2018 15:09:01 +0200 Subject: [PATCH 03/41] Workaround for protocol name in private siemens csa headers #80 --- heudiconv/dicoms.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/heudiconv/dicoms.py b/heudiconv/dicoms.py index 048acd29..138f0d70 100644 --- a/heudiconv/dicoms.py +++ b/heudiconv/dicoms.py @@ -4,7 +4,7 @@ import logging from collections import OrderedDict import tarfile - +from nibabel.nicom import csareader from heudiconv.external.pydicom import dcm from .utils import SeqInfo, load_json, set_readonly @@ -73,6 +73,23 @@ def group_dicoms_into_seqinfos(files, file_filter, dcmfilter, grouping): lgr.info("File {} is missing any StudyInstanceUID".format(filename)) file_studyUID = None + # Workaround for protocol name in private siemens csa header + try: + ProtocolName = mw.dcm_data.ProtocolName + except AttributeError: + mw.dcm_data.ProtocolName = '' + + # try parsing Siemens csa header + try: + if mw.is_csa and mw.dcm_data.ProtocolName == '': + csastr = csareader.get_csa_header(mw.dcm_data, 'series')['tags']['MrPhoenixProtocol']['items'][0] + #Make sure dcmstack finds beginning of header. + csastr = csastr.replace("### ASCCONV BEGIN", "### ASCCONV BEGIN ### ") #Remove when dmcstack is updated + parsedhdr = ds.extract.parse_phoenix_prot('MrPhoenixProtocol', csastr) + mw.dcm_data.ProtocolName = parsedhdr['tProtocolName'].replace(" ", "") + except: + lgr.info("File {} is missing ProtocolName".format(filename)) + try: series_id = (int(mw.dcm_data.SeriesNumber), mw.dcm_data.ProtocolName) @@ -208,7 +225,7 @@ def group_dicoms_into_seqinfos(files, file_filter, dcmfilter, grouping): dcminfo.get('PatientID'), dcminfo.get('StudyDescription'), refphys, - dcminfo.get('SeriesDescription'), + series_desc, #We try to set this further up. sequence_name, image_type, accession_number, @@ -232,7 +249,7 @@ def group_dicoms_into_seqinfos(files, file_filter, dcmfilter, grouping): lgr.debug("%30s %30s %27s %27s %5s nref=%-2d nsrc=%-2d %s" % ( key, info.series_id, - dcminfo.SeriesDescription, + series_desc, dcminfo.ProtocolName, info.is_derived, len(dcminfo.get('ReferencedImageSequence', '')), From ee00242c41cf3786c4641039bb5068418d7eeabe Mon Sep 17 00:00:00 2001 From: Inge Amlien Date: Tue, 9 Oct 2018 12:27:29 +0200 Subject: [PATCH 04/41] Fix for "Conflicting study identifiers" --- heudiconv/dicoms.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/heudiconv/dicoms.py b/heudiconv/dicoms.py index 138f0d70..5a28bf24 100644 --- a/heudiconv/dicoms.py +++ b/heudiconv/dicoms.py @@ -99,11 +99,11 @@ def group_dicoms_into_seqinfos(files, file_filter, dcmfilter, grouping): # verify that we are working with a single study if studyUID is None: studyUID = file_studyUID - elif not per_accession_number: - assert studyUID == file_studyUID, ( - "Conflicting study identifiers found [{}, {}].".format( - studyUID, file_studyUID - )) +# elif not per_accession_number: +# assert studyUID == file_studyUID, ( +# "Conflicting study identifiers found [{}, {}].".format( +# studyUID, file_studyUID +# )) except AttributeError as exc: lgr.warning('Ignoring %s since not quite a "normal" DICOM: %s', filename, exc) From 0cc700a35771edce8e843c32e825501303d12489 Mon Sep 17 00:00:00 2001 From: Inge Amlien Date: Tue, 9 Oct 2018 12:36:05 +0200 Subject: [PATCH 05/41] This was not supposed to go to the pull request.. *bangs head in wall* --- heudiconv/dicoms.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/heudiconv/dicoms.py b/heudiconv/dicoms.py index 5a28bf24..138f0d70 100644 --- a/heudiconv/dicoms.py +++ b/heudiconv/dicoms.py @@ -99,11 +99,11 @@ def group_dicoms_into_seqinfos(files, file_filter, dcmfilter, grouping): # verify that we are working with a single study if studyUID is None: studyUID = file_studyUID -# elif not per_accession_number: -# assert studyUID == file_studyUID, ( -# "Conflicting study identifiers found [{}, {}].".format( -# studyUID, file_studyUID -# )) + elif not per_accession_number: + assert studyUID == file_studyUID, ( + "Conflicting study identifiers found [{}, {}].".format( + studyUID, file_studyUID + )) except AttributeError as exc: lgr.warning('Ignoring %s since not quite a "normal" DICOM: %s', filename, exc) From 002e03f12d696fbc3b297cb8043a07e23d6120ac Mon Sep 17 00:00:00 2001 From: Kasbohm Date: Tue, 9 Oct 2018 12:41:48 +0200 Subject: [PATCH 06/41] Revert "This was not supposed to go to the pull request.." This reverts commit 0cc700a35771edce8e843c32e825501303d12489. --- heudiconv/dicoms.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/heudiconv/dicoms.py b/heudiconv/dicoms.py index 138f0d70..5a28bf24 100644 --- a/heudiconv/dicoms.py +++ b/heudiconv/dicoms.py @@ -99,11 +99,11 @@ def group_dicoms_into_seqinfos(files, file_filter, dcmfilter, grouping): # verify that we are working with a single study if studyUID is None: studyUID = file_studyUID - elif not per_accession_number: - assert studyUID == file_studyUID, ( - "Conflicting study identifiers found [{}, {}].".format( - studyUID, file_studyUID - )) +# elif not per_accession_number: +# assert studyUID == file_studyUID, ( +# "Conflicting study identifiers found [{}, {}].".format( +# studyUID, file_studyUID +# )) except AttributeError as exc: lgr.warning('Ignoring %s since not quite a "normal" DICOM: %s', filename, exc) From c68d8366a5dac9a2df5466f77ad02b7965fff324 Mon Sep 17 00:00:00 2001 From: Kasbohm Date: Tue, 9 Oct 2018 12:41:59 +0200 Subject: [PATCH 07/41] Revert "Fix for "Conflicting study identifiers"" This reverts commit ee00242c41cf3786c4641039bb5068418d7eeabe. --- heudiconv/dicoms.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/heudiconv/dicoms.py b/heudiconv/dicoms.py index 5a28bf24..138f0d70 100644 --- a/heudiconv/dicoms.py +++ b/heudiconv/dicoms.py @@ -99,11 +99,11 @@ def group_dicoms_into_seqinfos(files, file_filter, dcmfilter, grouping): # verify that we are working with a single study if studyUID is None: studyUID = file_studyUID -# elif not per_accession_number: -# assert studyUID == file_studyUID, ( -# "Conflicting study identifiers found [{}, {}].".format( -# studyUID, file_studyUID -# )) + elif not per_accession_number: + assert studyUID == file_studyUID, ( + "Conflicting study identifiers found [{}, {}].".format( + studyUID, file_studyUID + )) except AttributeError as exc: lgr.warning('Ignoring %s since not quite a "normal" DICOM: %s', filename, exc) From 3ccf8a3908063194f0936ec3145108c0aec20a5c Mon Sep 17 00:00:00 2001 From: mathiasg Date: Thu, 8 Nov 2018 14:52:57 -0500 Subject: [PATCH 08/41] enh: use private CSA tags if possible --- heudiconv/dicoms.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/heudiconv/dicoms.py b/heudiconv/dicoms.py index 138f0d70..eca21f4b 100644 --- a/heudiconv/dicoms.py +++ b/heudiconv/dicoms.py @@ -75,20 +75,9 @@ def group_dicoms_into_seqinfos(files, file_filter, dcmfilter, grouping): # Workaround for protocol name in private siemens csa header try: - ProtocolName = mw.dcm_data.ProtocolName + mw.dcm_data.ProtocolName except AttributeError: - mw.dcm_data.ProtocolName = '' - - # try parsing Siemens csa header - try: - if mw.is_csa and mw.dcm_data.ProtocolName == '': - csastr = csareader.get_csa_header(mw.dcm_data, 'series')['tags']['MrPhoenixProtocol']['items'][0] - #Make sure dcmstack finds beginning of header. - csastr = csastr.replace("### ASCCONV BEGIN", "### ASCCONV BEGIN ### ") #Remove when dmcstack is updated - parsedhdr = ds.extract.parse_phoenix_prot('MrPhoenixProtocol', csastr) - mw.dcm_data.ProtocolName = parsedhdr['tProtocolName'].replace(" ", "") - except: - lgr.info("File {} is missing ProtocolName".format(filename)) + mw.dcm_data.ProtocolName = parse_private_csa_header(mw.dcm_data, 'ProtocolName', 'tProtocolName') if mw.is_csa else '' try: series_id = (int(mw.dcm_data.SeriesNumber), @@ -500,3 +489,20 @@ def embed_metadata_from_dicoms(bids, item_dicoms, outname, outname_bids, except Exception as exc: lgr.error("Embedding failed: %s", str(exc)) os.chdir(cwd) + +def parse_private_csa_header(dcm_data, public_attr, private_attr, default=None): + """Doc""" + # tProtocolName + # TODO: provide mapping to private_attr from public_attr + from nibabel.nicom import csareader + import dcmstack.extract as dsextract + try: + # TODO: test with attr besides ProtocolName + csastr = csareader.get_csa_header(dcm_data, 'series')['tags']['MrPhoenixProtocol']['items'][0] + csastr = csastr.replace("### ASCCONV BEGIN", "### ASCCONV BEGIN ### ") + parsedhdr = dsextract.parse_phoenix_prot('MrPhoenixProtocol', csastr) + val = parsedhdr[private_attr].replace(' ', '') + except Exception as e: + lgr.info("Failed to parse CSA header: %s", str(e)) + val = default if default else '' + return val From adf518975274bc843f66d7c62c08261ca1fc3b30 Mon Sep 17 00:00:00 2001 From: mathiasg Date: Thu, 8 Nov 2018 15:54:35 -0500 Subject: [PATCH 09/41] doc: private fields docstring --- heudiconv/dicoms.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/heudiconv/dicoms.py b/heudiconv/dicoms.py index eca21f4b..85195d39 100644 --- a/heudiconv/dicoms.py +++ b/heudiconv/dicoms.py @@ -491,8 +491,25 @@ def embed_metadata_from_dicoms(bids, item_dicoms, outname, outname_bids, os.chdir(cwd) def parse_private_csa_header(dcm_data, public_attr, private_attr, default=None): - """Doc""" - # tProtocolName + """ + Parses CSA header in cases where value is not defined publicly + + Parameters + ---------- + dcm_data : pydicom Dataset object + DICOM metadata + public_attr : string + non-private DICOM attribute + private_attr : string + private DICOM attribute + default (optional) + default value if private_attr not found + + Returns + ------- + val (default: empty string) + private attribute value or default + """ # TODO: provide mapping to private_attr from public_attr from nibabel.nicom import csareader import dcmstack.extract as dsextract From b7aa163042cf1eed6802e615c70136c3356cc8f6 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Fri, 9 Nov 2018 14:01:44 -0500 Subject: [PATCH 10/41] sty: inline comment Co-Authored-By: mgxd --- heudiconv/dicoms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/heudiconv/dicoms.py b/heudiconv/dicoms.py index 85195d39..46f0e7a8 100644 --- a/heudiconv/dicoms.py +++ b/heudiconv/dicoms.py @@ -214,7 +214,7 @@ def group_dicoms_into_seqinfos(files, file_filter, dcmfilter, grouping): dcminfo.get('PatientID'), dcminfo.get('StudyDescription'), refphys, - series_desc, #We try to set this further up. + series_desc, # We try to set this further up. sequence_name, image_type, accession_number, From cceb76d0c5ec869a23cbd06f185e6c28e02e3d68 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Fri, 9 Nov 2018 14:02:37 -0500 Subject: [PATCH 11/41] enh: whitespace alone not good enough Co-Authored-By: mgxd --- heudiconv/dicoms.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/heudiconv/dicoms.py b/heudiconv/dicoms.py index 46f0e7a8..6d14b2dc 100644 --- a/heudiconv/dicoms.py +++ b/heudiconv/dicoms.py @@ -77,7 +77,9 @@ def group_dicoms_into_seqinfos(files, file_filter, dcmfilter, grouping): try: mw.dcm_data.ProtocolName except AttributeError: - mw.dcm_data.ProtocolName = parse_private_csa_header(mw.dcm_data, 'ProtocolName', 'tProtocolName') if mw.is_csa else '' + if not getattr(mw.dcm_data, 'ProtocolName', '').strip(): + mw.dcm_data.ProtocolName = parse_private_csa_header(mw.dcm_data, 'ProtocolName', 'tProtocolName') \ + if mw.is_csa else '' try: series_id = (int(mw.dcm_data.SeriesNumber), From 73c8e9f9998be85a52160eb7a9110801d33d4bfc Mon Sep 17 00:00:00 2001 From: mathiasg Date: Fri, 9 Nov 2018 14:15:43 -0500 Subject: [PATCH 12/41] rf: show log less frequent --- heudiconv/dicoms.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/heudiconv/dicoms.py b/heudiconv/dicoms.py index 85195d39..b2f67ff6 100644 --- a/heudiconv/dicoms.py +++ b/heudiconv/dicoms.py @@ -504,7 +504,7 @@ def parse_private_csa_header(dcm_data, public_attr, private_attr, default=None): private DICOM attribute default (optional) default value if private_attr not found - + Returns ------- val (default: empty string) @@ -520,6 +520,6 @@ def parse_private_csa_header(dcm_data, public_attr, private_attr, default=None): parsedhdr = dsextract.parse_phoenix_prot('MrPhoenixProtocol', csastr) val = parsedhdr[private_attr].replace(' ', '') except Exception as e: - lgr.info("Failed to parse CSA header: %s", str(e)) + lgr.debug("Failed to parse CSA header: %s", str(e)) val = default if default else '' return val From 4efc52536e3eabf869f05859114427781062ce33 Mon Sep 17 00:00:00 2001 From: mathiasg Date: Fri, 9 Nov 2018 14:16:26 -0500 Subject: [PATCH 13/41] tst: add single dicom and test for CSA header --- tests/data/axasc35.dcm | Bin 0 -> 383456 bytes tests/test_dicoms.py | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 tests/data/axasc35.dcm create mode 100644 tests/test_dicoms.py diff --git a/tests/data/axasc35.dcm b/tests/data/axasc35.dcm new file mode 100644 index 0000000000000000000000000000000000000000..904c67f8699d9ef2c2a0e71b9a6ddd90ee858e2a GIT binary patch literal 383456 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℘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%0AH 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�qcV z=Lf(hjZfGScM0BlNA|&e*5|hdCig#Frx{fu&}LQa40qw%eie(eOXC0HYT{q_&}VRF ztPqb3=di*U8W7+37n`VL&R8#dR% zv@LGHCYpyGG$CyUC90Bc2N~#|c42$olAc2+?@Noo0UpC2YEM?`PoRfO$>v%V-hw^` zuuAU=Q^P9%tFssGM|q@1XJTsJq+*qfU4WYL|KO6j)j)2+h1%{HiwtpB`lG&;6=TE@xuPKOYeY>vf!ENiqoq&4Ur8Q)5E^@{w~ ziaA*6X0@ZaKIUJl?+QFmZEOt6J`*Cu_Mt0k~Wei$t61>-x+=HSpnsK|bvZlPRA#s`gz-IPOH^KqiRJ9v)fDrzbEQGX?d98o-rOnibjFoARUj*Q`rrpi!Z&%&7<1(W{`QH;QTEh3CfG*&2ZICma_?vdme#GUfLx)wcK2DGO(uOz$Bmj9$?#t(BvM%uNGvpqh z!+1U5$X3u@BX(6w%Td)oW)!+3a`r%GumlTtZ{d7A?is}M>ZhZK0S-ad{~Ujf4blT~ zA*kja{OSv^fc`?~)Qg{lPWS=EpkGI3XQhVOm(c%fV4&~CIdr8vCwzkTelc7UPm70# zW?>cbzzQN`w$i^lpp{;kv1<^4GOt*Fz#d%HnXz57^vq}QRRJDZgpBN$wr50{S^cr8 zGpN8V;2@q~Z9IUwXbkNRvu^A>pttKiit0AAul(2D)*4a%=GAyw$Bj9!yU;T|_^jO? zv{Ah|rzyPEjhPtPZNvAEg=5f%-^2%qH`WFn-$~X*YcRgL$l&Tcqb*NRnpg&i8j<5e?C9u|z$iSh{-o@~dzK!{@dZBf&U&K!5^A4rP9(2TSg<4eFJ%aX+ z%-|mKb2gEo_W)Yp6m(Q`G;J$ZE2gdgljHs3jLrGYSeM$?(UreiLt=p9FlOHM<8)kq zJ0$pJ*i+-61v2s2HFxtKxNHsR_^|i@a{pfB;5A_KFUNDyMOj=NK0wOG*dfeBa;${@ z&D61b#i5*PU)E!miFl`Ii+)#u5f5Qi%KkE}b|yB{_1H^aVM8862Ic^y(VJw`zCu3c zU&On{U}tv2&+im(V*mfZFFqE(d{|;3dd^ojZ`Z%@BCXhw-G~=2%T(@N3 zHzPJCgPto7Yqkht#es5XEcNWGUj^VSD8DH9!YK<>6(Z1ot8T8kK07ekGq0-7wQk?$hSVqyFYuiFdmH_S@6`5R1_p z(KnyOzs9LrBY*7~*n#(Z|66-jXDThQTEaX;#P_u@PB zf##0p30>f#R*a&25mCrJ96en*&0Y__;`)`vd2NjNdoy;RGhY?S!1#&Z8enyv#Ix*Y zR}Bq!2KHS`5WPD%)jik*FJa@}86T$O$+Pir@R;MH_R~XHr8C*7X3X3U6?W9=$=LF} z
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

WVFwo=8yi>$^N%yp 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 Date: Fri, 9 Nov 2018 14:27:33 -0500 Subject: [PATCH 14/41] fix: indentation --- heudiconv/dicoms.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/heudiconv/dicoms.py b/heudiconv/dicoms.py index 84ad07ae..1206894c 100644 --- a/heudiconv/dicoms.py +++ b/heudiconv/dicoms.py @@ -77,9 +77,10 @@ def group_dicoms_into_seqinfos(files, file_filter, dcmfilter, grouping): try: mw.dcm_data.ProtocolName except AttributeError: - if not getattr(mw.dcm_data, 'ProtocolName', '').strip(): - mw.dcm_data.ProtocolName = parse_private_csa_header(mw.dcm_data, 'ProtocolName', 'tProtocolName') \ - if mw.is_csa else '' + if not getattr(mw.dcm_data, 'ProtocolName', '').strip(): + mw.dcm_data.ProtocolName = parse_private_csa_header( + mw.dcm_data, 'ProtocolName', 'tProtocolName' + ) if mw.is_csa else '' try: series_id = (int(mw.dcm_data.SeriesNumber), From 2b083a9aa099f4bb73374cbb91c393a4c363c94c Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Mon, 12 Nov 2018 09:30:44 -0500 Subject: [PATCH 15/41] RF: move tests under heudiconv/ module - to ease maintenance/distribution - to facilitate testing of installed instances --- .coveragerc | 3 +-- .travis.yml | 2 +- CHANGELOG.md | 2 ++ {tests => heudiconv/tests}/__init__.py | 0 .../tests}/data/01-anat-scout/0001.dcm | Bin ....1107.5.2.43.66112.2016101409263663466202201.dcm | Bin {tests => heudiconv/tests}/data/axasc35.dcm | Bin {tests => heudiconv/tests}/test_dicoms.py | 0 {tests => heudiconv/tests}/test_heuristics.py | 0 {tests => heudiconv/tests}/test_main.py | 0 {tests => heudiconv/tests}/test_monitor.py | 0 {tests => heudiconv/tests}/test_regression.py | 0 {tests => heudiconv/tests}/test_tarballs.py | 0 {tests => heudiconv/tests}/test_utils.py | 0 {tests => heudiconv/tests}/utils.py | 0 pytest.ini | 3 ++- 16 files changed, 6 insertions(+), 4 deletions(-) rename {tests => heudiconv/tests}/__init__.py (100%) rename {tests => heudiconv/tests}/data/01-anat-scout/0001.dcm (100%) rename {tests => heudiconv/tests}/data/01-fmap_acq-3mm/1.3.12.2.1107.5.2.43.66112.2016101409263663466202201.dcm (100%) rename {tests => heudiconv/tests}/data/axasc35.dcm (100%) rename {tests => heudiconv/tests}/test_dicoms.py (100%) rename {tests => heudiconv/tests}/test_heuristics.py (100%) rename {tests => heudiconv/tests}/test_main.py (100%) rename {tests => heudiconv/tests}/test_monitor.py (100%) rename {tests => heudiconv/tests}/test_regression.py (100%) rename {tests => heudiconv/tests}/test_tarballs.py (100%) rename {tests => heudiconv/tests}/test_utils.py (100%) rename {tests => heudiconv/tests}/utils.py (100%) diff --git a/.coveragerc b/.coveragerc index b2f0d1f0..f14665ff 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,4 +1,3 @@ [run] -include = tests/* - heudiconv/* +include = heudiconv/* setup.py diff --git a/.travis.yml b/.travis.yml index d8f30208..e8b21eaa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,7 +37,7 @@ install: - git config --global user.name "Travis Almighty" script: - - coverage run `which py.test` -s -v tests heudiconv/heuristics/*.py + - coverage run `which py.test` -s -v heudiconv heudiconv/heuristics/*.py after_success: - codecov diff --git a/CHANGELOG.md b/CHANGELOG.md index 34e0839e..96cb6c5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ TODO Summary - Reproin heuristic: `__dup` indices would now be assigned incrementally individually per each sequence, so there is a chance to properly treat associate for multi-file (e.g. `fmap`) sequences +- `tests/` moved under `heudiconv/tests` to ease maintenance and facilitate + testing of an installed heudiconv ### Deprecated ### Fixed diff --git a/tests/__init__.py b/heudiconv/tests/__init__.py similarity index 100% rename from tests/__init__.py rename to heudiconv/tests/__init__.py diff --git a/tests/data/01-anat-scout/0001.dcm b/heudiconv/tests/data/01-anat-scout/0001.dcm similarity index 100% rename from tests/data/01-anat-scout/0001.dcm rename to heudiconv/tests/data/01-anat-scout/0001.dcm diff --git a/tests/data/01-fmap_acq-3mm/1.3.12.2.1107.5.2.43.66112.2016101409263663466202201.dcm b/heudiconv/tests/data/01-fmap_acq-3mm/1.3.12.2.1107.5.2.43.66112.2016101409263663466202201.dcm similarity index 100% rename from tests/data/01-fmap_acq-3mm/1.3.12.2.1107.5.2.43.66112.2016101409263663466202201.dcm rename to heudiconv/tests/data/01-fmap_acq-3mm/1.3.12.2.1107.5.2.43.66112.2016101409263663466202201.dcm diff --git a/tests/data/axasc35.dcm b/heudiconv/tests/data/axasc35.dcm similarity index 100% rename from tests/data/axasc35.dcm rename to heudiconv/tests/data/axasc35.dcm diff --git a/tests/test_dicoms.py b/heudiconv/tests/test_dicoms.py similarity index 100% rename from tests/test_dicoms.py rename to heudiconv/tests/test_dicoms.py diff --git a/tests/test_heuristics.py b/heudiconv/tests/test_heuristics.py similarity index 100% rename from tests/test_heuristics.py rename to heudiconv/tests/test_heuristics.py diff --git a/tests/test_main.py b/heudiconv/tests/test_main.py similarity index 100% rename from tests/test_main.py rename to heudiconv/tests/test_main.py diff --git a/tests/test_monitor.py b/heudiconv/tests/test_monitor.py similarity index 100% rename from tests/test_monitor.py rename to heudiconv/tests/test_monitor.py diff --git a/tests/test_regression.py b/heudiconv/tests/test_regression.py similarity index 100% rename from tests/test_regression.py rename to heudiconv/tests/test_regression.py diff --git a/tests/test_tarballs.py b/heudiconv/tests/test_tarballs.py similarity index 100% rename from tests/test_tarballs.py rename to heudiconv/tests/test_tarballs.py diff --git a/tests/test_utils.py b/heudiconv/tests/test_utils.py similarity index 100% rename from tests/test_utils.py rename to heudiconv/tests/test_utils.py diff --git a/tests/utils.py b/heudiconv/tests/utils.py similarity index 100% rename from tests/utils.py rename to heudiconv/tests/utils.py diff --git a/pytest.ini b/pytest.ini index de4848ca..58f538f6 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,2 +1,3 @@ [pytest] -addopts = --doctest-modules --tb=short +# monitor.py requires optional linotify, but would blow tests discovery, does not contain tests within +addopts = --doctest-modules --tb=short --ignore heudiconv/cli/monitor.py From 986ec09f93fefd0c1112a1d3f4946161d37756ec Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Mon, 12 Nov 2018 09:42:13 -0500 Subject: [PATCH 16/41] RF: move all the tests from reproin.py to its test_ To avoid pytest freaking out, as in https://travis-ci.org/nipy/heudiconv/jobs/453993426 --- .travis.yml | 2 +- heudiconv/heuristics/reproin.py | 156 ------------------------- heudiconv/heuristics/test_reproin.py | 167 ++++++++++++++++++++++++++- 3 files changed, 167 insertions(+), 158 deletions(-) diff --git a/.travis.yml b/.travis.yml index e8b21eaa..7688e85b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,7 +37,7 @@ install: - git config --global user.name "Travis Almighty" script: - - coverage run `which py.test` -s -v heudiconv heudiconv/heuristics/*.py + - coverage run `which py.test` -s -v heudiconv after_success: - codecov diff --git a/heudiconv/heuristics/reproin.py b/heudiconv/heuristics/reproin.py index 674ba5aa..7de451de 100644 --- a/heudiconv/heuristics/reproin.py +++ b/heudiconv/heuristics/reproin.py @@ -922,159 +922,3 @@ def fixup_subjectid(subjectid): # just filter out possible _- in it return re.sub('[-_]', '', subjectid) return "sid%06d" % int(reg.groups()[0]) - - -def test_filter_files(): - # Filtering is currently disabled -- any sequence directory is Ok - assert(filter_files('/home/mvdoc/dbic/09-run_func_meh/0123432432.dcm')) - assert(filter_files('/home/mvdoc/dbic/run_func_meh/012343143.dcm')) - - -def test_md5sum(): - assert md5sum('cryptonomicon') == '1cd52edfa41af887e14ae71d1db96ad1' - assert md5sum('mysecretmessage') == '07989808231a0c6f522f9d8e34695794' - - -def test_fix_canceled_runs(): - from collections import namedtuple - FakeSeqInfo = namedtuple('FakeSeqInfo', - ['accession_number', 'series_id', - 'protocol_name', 'series_description']) - - seqinfo = [] - runname = 'func_run+' - for i in range(1, 6): - seqinfo.append( - FakeSeqInfo('accession1', - '{0:02d}-'.format(i) + runname, - runname, runname) - ) - - fake_accession2run = { - 'accession1': ['^01-', '^03-'] - } - - seqinfo_ = fix_canceled_runs(seqinfo, fake_accession2run) - - for i, s in enumerate(seqinfo_, 1): - output = runname - if i == 1 or i == 3: - output = 'cancelme_' + output - for key in ['series_description', 'protocol_name']: - value = getattr(s, key) - assert(value == output) - # check we didn't touch series_id - assert(s.series_id == '{0:02d}-'.format(i) + runname) - - -def test_fix_dbic_protocol(): - from collections import namedtuple - FakeSeqInfo = namedtuple('FakeSeqInfo', - ['accession_number', 'study_description', - 'field1', 'field2']) - accession_number = 'A003' - seq1 = FakeSeqInfo(accession_number, - 'mystudy', - '02-anat-scout_run+_MPR_sag', - '11-func_run-life2_acq-2mm692') - seq2 = FakeSeqInfo(accession_number, - 'mystudy', - 'nochangeplease', - 'nochangeeither') - - - seqinfos = [seq1, seq2] - keys = ['field1'] - subsdict = { - md5sum('mystudy'): - [('scout_run\+', 'scout'), - ('run-life[0-9]', 'run+_task-life')], - } - - seqinfos_ = fix_dbic_protocol(seqinfos, keys=keys, subsdict=subsdict) - assert(seqinfos[1] == seqinfos_[1]) - # field2 shouldn't have changed since I didn't pass it - assert(seqinfos_[0] == FakeSeqInfo(accession_number, - 'mystudy', - '02-anat-scout_MPR_sag', - seq1.field2)) - - # change also field2 please - keys = ['field1', 'field2'] - seqinfos_ = fix_dbic_protocol(seqinfos, keys=keys, subsdict=subsdict) - assert(seqinfos[1] == seqinfos_[1]) - # now everything should have changed - assert(seqinfos_[0] == FakeSeqInfo(accession_number, - 'mystudy', - '02-anat-scout_MPR_sag', - '11-func_run+_task-life_acq-2mm692')) - - -def test_sanitize_str(): - assert sanitize_str('super@duper.faster') == 'superduperfaster' - assert sanitize_str('perfect') == 'perfect' - assert sanitize_str('never:use:colon:!') == 'neverusecolon' - - -def test_fixupsubjectid(): - assert fixup_subjectid("abra") == "abra" - assert fixup_subjectid("sub") == "sub" - assert fixup_subjectid("sid") == "sid" - assert fixup_subjectid("sid000030") == "sid000030" - assert fixup_subjectid("sid0000030") == "sid000030" - assert fixup_subjectid("sid00030") == "sid000030" - assert fixup_subjectid("sid30") == "sid000030" - assert fixup_subjectid("SID30") == "sid000030" - - -def test_parse_series_spec(): - pdpn = parse_series_spec - - assert pdpn("nondbic_func-bold") == {} - assert pdpn("cancelme_func-bold") == {} - - assert pdpn("bids_func-bold") == \ - pdpn("func-bold") == \ - {'seqtype': 'func', 'seqtype_label': 'bold'} - - # pdpn("bids_func_ses+_task-boo_run+") == \ - # order and PREFIX: should not matter, as well as trailing spaces - assert \ - pdpn(" PREFIX:bids_func_ses+_task-boo_run+ ") == \ - pdpn("PREFIX:bids_func_ses+_task-boo_run+") == \ - pdpn("bids_func_ses+_run+_task-boo") == \ - { - 'seqtype': 'func', - # 'seqtype_label': 'bold', - 'session': '+', - 'run': '+', - 'task': 'boo', - } - - # TODO: fix for that - assert pdpn("bids_func-pace_ses-1_task-boo_acq-bu_bids-please_run-2__therest") == \ - pdpn("bids_func-pace_ses-1_run-2_task-boo_acq-bu_bids-please__therest") == \ - pdpn("func-pace_ses-1_task-boo_acq-bu_bids-please_run-2") == \ - { - 'seqtype': 'func', 'seqtype_label': 'pace', - 'session': '1', - 'run': '2', - 'task': 'boo', - 'acq': 'bu', - 'bids': 'bids-please' - } - - assert pdpn("bids_anat-scout_ses+") == \ - { - 'seqtype': 'anat', - 'seqtype_label': 'scout', - 'session': '+', - } - - assert pdpn("anat_T1w_acq-MPRAGE_run+") == \ - { - 'seqtype': 'anat', - 'run': '+', - 'acq': 'MPRAGE', - 'seqtype_label': 'T1w' - } diff --git a/heudiconv/heuristics/test_reproin.py b/heudiconv/heuristics/test_reproin.py index 7bad2329..2517b29f 100644 --- a/heudiconv/heuristics/test_reproin.py +++ b/heudiconv/heuristics/test_reproin.py @@ -2,7 +2,16 @@ # Tests for reproin.py # from collections import OrderedDict -from .reproin import get_dups_marked +from .reproin import ( + filter_files, + fix_canceled_runs, + fix_dbic_protocol, + fixup_subjectid, + get_dups_marked, + md5sum, + parse_series_spec, + sanitize_str, +) def test_get_dups_marked(): @@ -37,3 +46,159 @@ def test_get_dups_marked(): ('smth2',): ['c'] } + + +def test_filter_files(): + # Filtering is currently disabled -- any sequence directory is Ok + assert(filter_files('/home/mvdoc/dbic/09-run_func_meh/0123432432.dcm')) + assert(filter_files('/home/mvdoc/dbic/run_func_meh/012343143.dcm')) + + +def test_md5sum(): + assert md5sum('cryptonomicon') == '1cd52edfa41af887e14ae71d1db96ad1' + assert md5sum('mysecretmessage') == '07989808231a0c6f522f9d8e34695794' + + +def test_fix_canceled_runs(): + from collections import namedtuple + FakeSeqInfo = namedtuple('FakeSeqInfo', + ['accession_number', 'series_id', + 'protocol_name', 'series_description']) + + seqinfo = [] + runname = 'func_run+' + for i in range(1, 6): + seqinfo.append( + FakeSeqInfo('accession1', + '{0:02d}-'.format(i) + runname, + runname, runname) + ) + + fake_accession2run = { + 'accession1': ['^01-', '^03-'] + } + + seqinfo_ = fix_canceled_runs(seqinfo, fake_accession2run) + + for i, s in enumerate(seqinfo_, 1): + output = runname + if i == 1 or i == 3: + output = 'cancelme_' + output + for key in ['series_description', 'protocol_name']: + value = getattr(s, key) + assert(value == output) + # check we didn't touch series_id + assert(s.series_id == '{0:02d}-'.format(i) + runname) + + +def test_fix_dbic_protocol(): + from collections import namedtuple + FakeSeqInfo = namedtuple('FakeSeqInfo', + ['accession_number', 'study_description', + 'field1', 'field2']) + accession_number = 'A003' + seq1 = FakeSeqInfo(accession_number, + 'mystudy', + '02-anat-scout_run+_MPR_sag', + '11-func_run-life2_acq-2mm692') + seq2 = FakeSeqInfo(accession_number, + 'mystudy', + 'nochangeplease', + 'nochangeeither') + + + seqinfos = [seq1, seq2] + keys = ['field1'] + subsdict = { + md5sum('mystudy'): + [('scout_run\+', 'scout'), + ('run-life[0-9]', 'run+_task-life')], + } + + seqinfos_ = fix_dbic_protocol(seqinfos, keys=keys, subsdict=subsdict) + assert(seqinfos[1] == seqinfos_[1]) + # field2 shouldn't have changed since I didn't pass it + assert(seqinfos_[0] == FakeSeqInfo(accession_number, + 'mystudy', + '02-anat-scout_MPR_sag', + seq1.field2)) + + # change also field2 please + keys = ['field1', 'field2'] + seqinfos_ = fix_dbic_protocol(seqinfos, keys=keys, subsdict=subsdict) + assert(seqinfos[1] == seqinfos_[1]) + # now everything should have changed + assert(seqinfos_[0] == FakeSeqInfo(accession_number, + 'mystudy', + '02-anat-scout_MPR_sag', + '11-func_run+_task-life_acq-2mm692')) + + +def test_sanitize_str(): + assert sanitize_str('super@duper.faster') == 'superduperfaster' + assert sanitize_str('perfect') == 'perfect' + assert sanitize_str('never:use:colon:!') == 'neverusecolon' + + +def test_fixupsubjectid(): + assert fixup_subjectid("abra") == "abra" + assert fixup_subjectid("sub") == "sub" + assert fixup_subjectid("sid") == "sid" + assert fixup_subjectid("sid000030") == "sid000030" + assert fixup_subjectid("sid0000030") == "sid000030" + assert fixup_subjectid("sid00030") == "sid000030" + assert fixup_subjectid("sid30") == "sid000030" + assert fixup_subjectid("SID30") == "sid000030" + + +def test_parse_series_spec(): + pdpn = parse_series_spec + + assert pdpn("nondbic_func-bold") == {} + assert pdpn("cancelme_func-bold") == {} + + assert pdpn("bids_func-bold") == \ + pdpn("func-bold") == \ + {'seqtype': 'func', 'seqtype_label': 'bold'} + + # pdpn("bids_func_ses+_task-boo_run+") == \ + # order and PREFIX: should not matter, as well as trailing spaces + assert \ + pdpn(" PREFIX:bids_func_ses+_task-boo_run+ ") == \ + pdpn("PREFIX:bids_func_ses+_task-boo_run+") == \ + pdpn("bids_func_ses+_run+_task-boo") == \ + { + 'seqtype': 'func', + # 'seqtype_label': 'bold', + 'session': '+', + 'run': '+', + 'task': 'boo', + } + + # TODO: fix for that + assert pdpn("bids_func-pace_ses-1_task-boo_acq-bu_bids-please_run-2__therest") == \ + pdpn("bids_func-pace_ses-1_run-2_task-boo_acq-bu_bids-please__therest") == \ + pdpn("func-pace_ses-1_task-boo_acq-bu_bids-please_run-2") == \ + { + 'seqtype': 'func', 'seqtype_label': 'pace', + 'session': '1', + 'run': '2', + 'task': 'boo', + 'acq': 'bu', + 'bids': 'bids-please' + } + + assert pdpn("bids_anat-scout_ses+") == \ + { + 'seqtype': 'anat', + 'seqtype_label': 'scout', + 'session': '+', + } + + assert pdpn("anat_T1w_acq-MPRAGE_run+") == \ + { + 'seqtype': 'anat', + 'run': '+', + 'acq': 'MPRAGE', + 'seqtype_label': 'T1w' + } From 2034a13db208e6800b374a5ee2502b26173268ca Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Mon, 12 Nov 2018 09:46:02 -0500 Subject: [PATCH 17/41] BF: requires nipype at least 0.12 where Dcm2niix interface was added Some older neurodebian systems still have prior releases of nipype --- heudiconv/info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/heudiconv/info.py b/heudiconv/info.py index eda59bab..6aa469f6 100644 --- a/heudiconv/info.py +++ b/heudiconv/info.py @@ -11,7 +11,7 @@ REQUIRES = [ 'nibabel', 'pydicom', - 'nipype', + 'nipype>=0.12.0', 'pathlib', 'dcmstack>=0.7', ] From 54e0808d2cbf96893fe8b34a9ae536c6da47ab03 Mon Sep 17 00:00:00 2001 From: mathiasg Date: Tue, 13 Nov 2018 10:15:50 -0500 Subject: [PATCH 18/41] fix: add "recommended" package --- Dockerfile | 6 ++++-- utils/gen-docker-image.sh | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index b457250f..b2ccd55e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Generated by Neurodocker version 0.4.1-28-g83dbc15 -# Timestamp: 2018-11-01 22:00:14 UTC +# Timestamp: 2018-11-13 15:14:11 UTC # # Thank you for using Neurodocker. If you discover any issues # or ways to improve this software, please submit an issue or @@ -70,6 +70,7 @@ RUN apt-get update -qq \ liblzma-dev \ libc-dev \ git-annex-standalone \ + netbase \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* @@ -125,7 +126,8 @@ RUN echo '{ \ \n "pigz", \ \n "liblzma-dev", \ \n "libc-dev", \ - \n "git-annex-standalone" \ + \n "git-annex-standalone", \ + \n "netbase" \ \n ] \ \n ], \ \n [ \ diff --git a/utils/gen-docker-image.sh b/utils/gen-docker-image.sh index 0efba470..06afe722 100644 --- a/utils/gen-docker-image.sh +++ b/utils/gen-docker-image.sh @@ -8,7 +8,7 @@ image="kaczmarj/neurodocker:master@sha256:9f7d58f6977cfcd4dd5d1a2e70be4124417206 docker run --rm $image generate docker -b neurodebian:stretch -p apt \ --dcm2niix version=v1.0.20180622 method=source \ - --install git gcc pigz liblzma-dev libc-dev git-annex-standalone \ + --install git gcc pigz liblzma-dev libc-dev git-annex-standalone netbase \ --copy . /src/heudiconv \ --miniconda use_env=base conda_install="python=3.6 traits>=4.6.0 scipy numpy nomkl" \ pip_install="/src/heudiconv[all]" \ From 4d0e882f201242a63e33dc2126e03d2f38809615 Mon Sep 17 00:00:00 2001 From: Jakub Kaczmarzyk Date: Tue, 13 Nov 2018 17:05:09 -0500 Subject: [PATCH 19/41] enh: wrap conda and pip pkgs in single quotes --- Dockerfile | 16 ++++++++-------- utils/gen-docker-image.sh | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index b2ccd55e..fbf732aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ -# Generated by Neurodocker version 0.4.1-28-g83dbc15 -# Timestamp: 2018-11-13 15:14:11 UTC +# Generated by Neurodocker version 0.4.2-3-gf7055a1 +# Timestamp: 2018-11-13 22:04:04 UTC # # Thank you for using Neurodocker. If you discover any issues # or ways to improve this software, please submit an issue or @@ -90,15 +90,15 @@ RUN export PATH="/opt/miniconda-latest/bin:$PATH" \ && conda config --system --set show_channel_urls true \ && sync && conda clean -tipsy && sync \ && conda install -y -q --name base \ - python=3.6 \ - traits>=4.6.0 \ - scipy \ - numpy \ - nomkl \ + 'python=3.6' \ + 'traits>=4.6.0' \ + 'scipy' \ + 'numpy' \ + 'nomkl' \ && sync && conda clean -tipsy && sync \ && bash -c "source activate base \ && pip install --no-cache-dir --editable \ - /src/heudiconv[all]" \ + '/src/heudiconv[all]'" \ && rm -rf ~/.cache/pip/* \ && sync diff --git a/utils/gen-docker-image.sh b/utils/gen-docker-image.sh index 06afe722..10f745ae 100644 --- a/utils/gen-docker-image.sh +++ b/utils/gen-docker-image.sh @@ -4,7 +4,7 @@ set -eu VER=$(grep -Po '(?<=^__version__ = ).*' ../heudiconv/info.py | sed 's/"//g') -image="kaczmarj/neurodocker:master@sha256:9f7d58f6977cfcd4dd5d1a2e70be4124417206b716d51b7d9a182820157f1bd3" +image="kaczmarj/neurodocker:master@sha256:936401fe8f677e0d294f688f352cbb643c9693f8de371475de1d593650e42a66" docker run --rm $image generate docker -b neurodebian:stretch -p apt \ --dcm2niix version=v1.0.20180622 method=source \ From 81d0aca6aade731130214b67bdacc54ef76c6fc7 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Mon, 26 Nov 2018 22:54:14 -0500 Subject: [PATCH 20/41] RF: removed unused imports --- heudiconv/parser.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/heudiconv/parser.py b/heudiconv/parser.py index c8475b4d..6d470c5c 100644 --- a/heudiconv/parser.py +++ b/heudiconv/parser.py @@ -4,7 +4,7 @@ from glob import glob import re -from collections import defaultdict, OrderedDict +from collections import defaultdict import tarfile from tempfile import mkdtemp @@ -13,10 +13,6 @@ from .utils import ( docstring_parameter, StudySessionInfo, - load_json, - save_json, - create_file_if_missing, - json_dumps_pretty, ) lgr = logging.getLogger(__name__) From 3f0e3d9ef6c1a42159bbbcc2085ce63b1c3c1183 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Mon, 26 Nov 2018 23:18:40 -0500 Subject: [PATCH 21/41] Do regenerate top level task-* stab file, retain only our custom fields Otherwise it would be inconsistent and populated only with the first run analysis output, so multiple sessions etc would not really get all common values, deminishing its value. See https://github.com/nipy/heudiconv/issues/277 --- heudiconv/bids.py | 35 +++++++++++++++++++++++++++-------- heudiconv/utils.py | 10 ++++++++-- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/heudiconv/bids.py b/heudiconv/bids.py index 97dfdec9..1440f198 100644 --- a/heudiconv/bids.py +++ b/heudiconv/bids.py @@ -76,6 +76,9 @@ def populate_bids_templates(path, defaults={}): # 'Manufacturer', 'SliceTiming', ''} for fpath in find_files('.*_task-.*\_bold\.json', topdir=path, exclude_vcs=True, exclude="/\.(datalad|heudiconv)/"): + # + # According to BIDS spec I think both _task AND _acq (may be more? _rec, _dir, ...?) should be retained? + # TODO: if we are to fix it, then old ones (without _acq) should be removed first task = re.sub('.*_(task-[^_\.]*(_acq-[^_\.]*)?)_.*', r'\1', fpath) json_ = load_json(fpath) if task not in tasks: @@ -95,17 +98,33 @@ def populate_bids_templates(path, defaults={}): lgr.debug("Generating %s", events_file) with open(events_file, 'w') as f: f.write("onset\tduration\ttrial_type\tresponse_time\tstim_file\tTODO -- fill in rows and add more tab-separated columns if desired") + # extract tasks files stubs for task_acq, fields in tasks.items(): task_file = op.join(path, task_acq + '_bold.json') - # do not touch any existing thing, it may be precious - if not op.lexists(task_file): - lgr.debug("Generating %s", task_file) - fields["TaskName"] = ("TODO: full task name for %s" % - task_acq.split('_')[0].split('-')[1]) - fields["CogAtlasID"] = "TODO" - with open(task_file, 'w') as f: - f.write(json_dumps_pretty(fields, indent=2, sort_keys=True)) + # Since we are pulling all unique fields we have to possibly + # rewrite this file to guarantee consistency. + # See https://github.com/nipy/heudiconv/issues/277 for a usecase/bug + # when we didn't touch existing one. + # But the fields we enter (TaskName and CogAtlasID) might need need + # to be populated from the file if it already exists + placeholders = { + "TaskName": ("TODO: full task name for %s" % + task_acq.split('_')[0].split('-')[1]), + "CogAtlasID": "TODO", + } + if op.lexists(task_file): + j = load_json(task_file) + # Retain possibly modified placeholder fields + for f in placeholders: + if f in j: + placeholders[f] = j[f] + act = "Regenerating" + else: + act = "Generating" + lgr.debug("%s %s", act, task_file) + fields.update(placeholders) + save_json(task_file, fields, indent=2, sort_keys=True, pretty=True) def tuneup_bids_json_files(json_files): diff --git a/heudiconv/utils.py b/heudiconv/utils.py index 3539a5a9..e40806a6 100644 --- a/heudiconv/utils.py +++ b/heudiconv/utils.py @@ -171,7 +171,7 @@ def assure_no_file_exists(path): os.unlink(path) -def save_json(filename, data, indent=4): +def save_json(filename, data, indent=4, sort_keys=True, pretty=False): """Save data to a json file Parameters @@ -180,11 +180,17 @@ def save_json(filename, data, indent=4): Filename to save data in. data : dict Dictionary to save in json file. + indent : int, optional + sort_keys : bool, optional + pretty : bool, optional """ assure_no_file_exists(filename) with open(filename, 'w') as fp: - fp.write(_canonical_dumps(data, sort_keys=True, indent=indent)) + fp.write( + (json_dumps_pretty if pretty else _canonical_dumps)( + data, sort_keys=sort_keys, indent=indent) + ) def json_dumps_pretty(j, indent=2, sort_keys=True): From d530b0148edc9dd7ff6daee07b69a7e1c13458c1 Mon Sep 17 00:00:00 2001 From: Dae Houlihan Date: Mon, 3 Dec 2018 18:09:42 -0500 Subject: [PATCH 22/41] added subproces string decoding for anonymization use Three changes related to the anonymization use case. 1 - The bytes literal string returned by subprocess.check_output is decoded to utf-8. 2 - Many anonymization use cases are likely to involve parsing tabular files with a python script, for which pandas is a common strategy. Including it in the docker file of the vanilla build saves people from needing to roll their own. 3 - The user info in the .heudiconv directory is not anonymized if an anon_sid is present. --- Dockerfile | 1 + heudiconv/convert.py | 2 +- heudiconv/utils.py | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index fbf732aa..56512b35 100644 --- a/Dockerfile +++ b/Dockerfile @@ -94,6 +94,7 @@ RUN export PATH="/opt/miniconda-latest/bin:$PATH" \ 'traits>=4.6.0' \ 'scipy' \ 'numpy' \ + 'pandas' \ 'nomkl' \ && sync && conda clean -tipsy && sync \ && bash -c "source activate base \ diff --git a/heudiconv/convert.py b/heudiconv/convert.py index c78c8da2..f58979eb 100644 --- a/heudiconv/convert.py +++ b/heudiconv/convert.py @@ -100,7 +100,7 @@ def prep_conversion(sid, dicoms, outdir, heuristic, converter, anon_sid, anon_outdir = outdir # Generate heudiconv info folder - idir = op.join(outdir, '.heudiconv', sid) + idir = op.join(outdir, '.heudiconv', anon_sid) if bids and ses: idir = op.join(idir, 'ses-%s' % str(ses)) if anon_outdir == outdir: diff --git a/heudiconv/utils.py b/heudiconv/utils.py index 3539a5a9..6d0e21c5 100644 --- a/heudiconv/utils.py +++ b/heudiconv/utils.py @@ -105,7 +105,7 @@ def dec(obj): def anonymize_sid(sid, anon_sid_cmd): from subprocess import check_output cmd = [anon_sid_cmd, sid] - return check_output(cmd).strip() + return check_output(cmd).decode().strip() def create_file_if_missing(filename, content): From 5cbeaf7439f9f5888d53c1e080c19bae3b0befc1 Mon Sep 17 00:00:00 2001 From: Dae Houlihan Date: Mon, 3 Dec 2018 19:06:00 -0500 Subject: [PATCH 23/41] handling of variable returned by subprocess more robust to different string types --- heudiconv/utils.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/heudiconv/utils.py b/heudiconv/utils.py index 6d0e21c5..fd532dce 100644 --- a/heudiconv/utils.py +++ b/heudiconv/utils.py @@ -105,7 +105,14 @@ def dec(obj): def anonymize_sid(sid, anon_sid_cmd): from subprocess import check_output cmd = [anon_sid_cmd, sid] - return check_output(cmd).decode().strip() + shell_out = check_output(cmd).strip() + if isinstance(shell_out, bytes): + anon_sid = shell_out.decode() + elif isinstance(shell_out, str): + anon_sid = shell_out + else: + raise 'subprocess did not return a valid string' + return anon_sid def create_file_if_missing(filename, content): From 880e7e649dc939cb280025a78e5986f0928d4d5e Mon Sep 17 00:00:00 2001 From: Dae Houlihan Date: Tue, 4 Dec 2018 12:39:38 -0500 Subject: [PATCH 24/41] just stash --- .projectignore | 14 ++++++++++ Dockerfile | 1 + environment27.yml | 1 + heudiconv/cli/run.py | 2 +- heudiconv/queue.py | 35 ------------------------ heudiconv/slurmqueue.py | 1 + heudiconv/tests/data/__init__.py | 1 + heudiconv/tests/data/anonymize_script.py | 1 + heudiconv/tests/test_regression.py | 5 ++-- heudiconv/tests/utils.py | 7 ++++- heudiconv/utils.py | 27 ++++++++++++++++-- 11 files changed, 53 insertions(+), 42 deletions(-) create mode 100644 .projectignore create mode 100644 environment27.yml delete mode 100644 heudiconv/queue.py create mode 100644 heudiconv/slurmqueue.py create mode 100644 heudiconv/tests/data/__init__.py create mode 100755 heudiconv/tests/data/anonymize_script.py diff --git a/.projectignore b/.projectignore new file mode 100644 index 00000000..316c9c16 --- /dev/null +++ b/.projectignore @@ -0,0 +1,14 @@ +# project-local contains your personal configuration choices and state +/anaconda-project-local.yml + +# Files autocreated by Python +__pycache__/ +*.pyc +*.pyo +*.pyd + +# Notebook stuff +/.ipynb_checkpoints + +# Spyder stuff +/.spyderproject diff --git a/Dockerfile b/Dockerfile index 56512b35..c9e20061 100644 --- a/Dockerfile +++ b/Dockerfile @@ -71,6 +71,7 @@ RUN apt-get update -qq \ libc-dev \ git-annex-standalone \ netbase \ + vim \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/environment27.yml b/environment27.yml new file mode 100644 index 00000000..b31dda57 --- /dev/null +++ b/environment27.yml @@ -0,0 +1 @@ +/annex/objects/SHA256E-s3151--0270335bbbc9ae6db51a923b92854401449661dac8a9c98d25ed37466b3af141.yml diff --git a/heudiconv/cli/run.py b/heudiconv/cli/run.py index 3041d6dd..4bd9c0df 100644 --- a/heudiconv/cli/run.py +++ b/heudiconv/cli/run.py @@ -8,7 +8,7 @@ from ..utils import load_heuristic, anonymize_sid, treat_infofile, SeqInfo from ..convert import prep_conversion from ..bids import populate_bids_templates, tuneup_bids_json_files -from ..queue import queue_conversion +from ..slurmqueue import queue_conversion import inspect import logging diff --git a/heudiconv/queue.py b/heudiconv/queue.py deleted file mode 100644 index 89c912f2..00000000 --- a/heudiconv/queue.py +++ /dev/null @@ -1,35 +0,0 @@ -import os -import os.path as op - -import logging - -lgr = logging.getLogger(__name__) - -# start with SLURM but extend past that #TODO -def queue_conversion(progname, queue, outdir, heuristic, dicoms, sid, - anon_cmd, converter, session,with_prov, bids): - - # Rework this... - convertcmd = ' '.join(['python', progname, - '-o', outdir, - '-f', heuristic, - '-s', sid, - '--anon-cmd', anon_cmd, - '-c', converter]) - if session: - convertcmd += " --ses '%s'" % session - if with_prov: - convertcmd += " --with-prov" - if bids: - convertcmd += " --bids" - if dicoms: - convertcmd += " --files" - convertcmd += [" '%s'" % f for f in dicoms] - - script_file = 'dicom-%s.sh' % sid - with open(script_file, 'wt') as fp: - fp.writelines(['#!/bin/bash\n', convertcmd]) - outcmd = 'sbatch -J dicom-%s -p %s -N1 -c2 --mem=20G %s' \ - % (sid, queue, script_file) - - os.system(outcmd) diff --git a/heudiconv/slurmqueue.py b/heudiconv/slurmqueue.py new file mode 100644 index 00000000..e2cfaff1 --- /dev/null +++ b/heudiconv/slurmqueue.py @@ -0,0 +1 @@ +/annex/objects/SHA256E-s1164--c0074611d4178ba7bf603159c93e65f7ee7aa7c2c339a30098a9cd7e20db4547.py diff --git a/heudiconv/tests/data/__init__.py b/heudiconv/tests/data/__init__.py new file mode 100644 index 00000000..b2f67337 --- /dev/null +++ b/heudiconv/tests/data/__init__.py @@ -0,0 +1 @@ +/annex/objects/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.py diff --git a/heudiconv/tests/data/anonymize_script.py b/heudiconv/tests/data/anonymize_script.py new file mode 100755 index 00000000..a5b2bd49 --- /dev/null +++ b/heudiconv/tests/data/anonymize_script.py @@ -0,0 +1 @@ +/annex/objects/SHA256E-s391--38015958888dd40f9c1872ee36a5a02587f010e0b2946be8ecd2f23c4970b07d.py diff --git a/heudiconv/tests/test_regression.py b/heudiconv/tests/test_regression.py index 0ac02b7f..06a005c3 100644 --- a/heudiconv/tests/test_regression.py +++ b/heudiconv/tests/test_regression.py @@ -19,8 +19,9 @@ @pytest.mark.parametrize('subject', ['sub-sid000143']) @pytest.mark.parametrize('heuristic', ['reproin.py']) +@pytest.mark.parametrize('anon_cmd', [None]) # ['anonymize_script.py'] @pytest.mark.skipif(not have_datalad, reason="no datalad") -def test_conversion(tmpdir, subject, heuristic): +def test_conversion(tmpdir, subject, heuristic, anon_cmd): tmpdir.chdir() try: datadir = fetch_data(tmpdir.strpath, subject) @@ -28,7 +29,7 @@ def test_conversion(tmpdir, subject, heuristic): pytest.skip("Failed to fetch test data: %s" % str(exc)) outdir = tmpdir.mkdir('out').strpath - args = gen_heudiconv_args(datadir, outdir, subject, heuristic) + args = gen_heudiconv_args(datadir, outdir, subject, heuristic, anon_cmd) runner(args) # run conversion # verify functionals were converted diff --git a/heudiconv/tests/utils.py b/heudiconv/tests/utils.py index 6d875c26..f68c8fac 100644 --- a/heudiconv/tests/utils.py +++ b/heudiconv/tests/utils.py @@ -5,7 +5,7 @@ TESTS_DATA_PATH = op.join(op.dirname(__file__), 'data') -def gen_heudiconv_args(datadir, outdir, subject, heuristic_file, xargs=None): +def gen_heudiconv_args(datadir, outdir, subject, heuristic_file, anon_cmd=None, xargs=None): heuristic = op.realpath(op.join(HEURISTICS_PATH, heuristic_file)) args = ["-d", op.join(datadir, 'sourcedata/{subject}/*/*/*.tgz'), "-c", "dcm2niix", @@ -13,8 +13,13 @@ def gen_heudiconv_args(datadir, outdir, subject, heuristic_file, xargs=None): "-s", subject, "-f", heuristic, "--bids",] + if anon_cmd: + args += ["--anon-cmd", op.join(op.dirname(__file__), 'data', anon_cmd), "-a", outdir] if xargs: args += xargs + + print("DEBUGCUSTOM1") + print(args) return args diff --git a/heudiconv/utils.py b/heudiconv/utils.py index fd532dce..1f6cd24c 100644 --- a/heudiconv/utils.py +++ b/heudiconv/utils.py @@ -104,15 +104,36 @@ def dec(obj): def anonymize_sid(sid, anon_sid_cmd): from subprocess import check_output + + import re, sys + from doctest import OutputChecker, DocTestSuite + + class Py23DocChecker(OutputChecker): + def check_output(self, want, got, optionflags): + if sys.version_info[0] < 3: + # if running on py2, attempt to prefix all the strings + # with "u" to signify that they're unicode literals + want = re.sub("'(.*?)'", "u'\\1'", want) + return OutputChecker.check_output(self, want, got, optionflags) + + def load_tests(loader, tests, ignore): + tests.addTests(DocTestSuite(mymodule, checker=Py23DocChecker())) + return tests + + import os + import os.path cmd = [anon_sid_cmd, sid] - shell_out = check_output(cmd).strip() + print("CUSTOMDEBUG2") + print(os.getcwd()) + shell_out = check_output(cmd) + print(shell_out) if isinstance(shell_out, bytes): anon_sid = shell_out.decode() elif isinstance(shell_out, str): anon_sid = shell_out else: - raise 'subprocess did not return a valid string' - return anon_sid + raise TypeError("subprocess did not return a valid string") + return anon_sid.strip() def create_file_if_missing(filename, content): From 3cd30a2e8a6a914ceb3f8f9d7ab59768c285a57b Mon Sep 17 00:00:00 2001 From: Dae Houlihan Date: Tue, 4 Dec 2018 13:14:06 -0500 Subject: [PATCH 25/41] undoing to start from base --- heudiconv/utils.py | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/heudiconv/utils.py b/heudiconv/utils.py index 1f6cd24c..df4145c4 100644 --- a/heudiconv/utils.py +++ b/heudiconv/utils.py @@ -104,35 +104,8 @@ def dec(obj): def anonymize_sid(sid, anon_sid_cmd): from subprocess import check_output - - import re, sys - from doctest import OutputChecker, DocTestSuite - - class Py23DocChecker(OutputChecker): - def check_output(self, want, got, optionflags): - if sys.version_info[0] < 3: - # if running on py2, attempt to prefix all the strings - # with "u" to signify that they're unicode literals - want = re.sub("'(.*?)'", "u'\\1'", want) - return OutputChecker.check_output(self, want, got, optionflags) - - def load_tests(loader, tests, ignore): - tests.addTests(DocTestSuite(mymodule, checker=Py23DocChecker())) - return tests - - import os - import os.path cmd = [anon_sid_cmd, sid] - print("CUSTOMDEBUG2") - print(os.getcwd()) - shell_out = check_output(cmd) - print(shell_out) - if isinstance(shell_out, bytes): - anon_sid = shell_out.decode() - elif isinstance(shell_out, str): - anon_sid = shell_out - else: - raise TypeError("subprocess did not return a valid string") + anon_sid = check_output(cmd) return anon_sid.strip() From 17439eadcdf7089d7715f2ef408dd04bb0513b26 Mon Sep 17 00:00:00 2001 From: Dae Houlihan Date: Tue, 4 Dec 2018 15:31:59 -0500 Subject: [PATCH 26/41] passes unit test in boty py3.6 and py 2.7 --- heudiconv/cli/run.py | 5 +++++ heudiconv/tests/data/anonymize_script.py | 2 +- heudiconv/tests/test_regression.py | 3 ++- heudiconv/tests/utils.py | 2 +- heudiconv/utils.py | 23 ++++++++++++++++++++++- 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/heudiconv/cli/run.py b/heudiconv/cli/run.py index 4bd9c0df..fe8cc2cb 100644 --- a/heudiconv/cli/run.py +++ b/heudiconv/cli/run.py @@ -306,7 +306,12 @@ def process_args(args): anon_sid = anonymize_sid(sid, args.anon_cmd) if args.anon_cmd else None if args.anon_cmd: + import sys + lgr.info('DEBUGC-version {}'.format(sys.version)) + lgr.info('DEBUGC-execpath {}'.format(sys.executable)) lgr.info('Anonymized {} to {}'.format(sid, anon_sid)) + lgr.info('DEBUGC-type_to_match {}'.format(type(sid))) + lgr.info('DEBUGC-type_returned {}'.format(type(anon_sid))) study_outdir = op.join(outdir, locator or '') anon_outdir = args.conv_outdir or outdir diff --git a/heudiconv/tests/data/anonymize_script.py b/heudiconv/tests/data/anonymize_script.py index a5b2bd49..b9de6f6f 100755 --- a/heudiconv/tests/data/anonymize_script.py +++ b/heudiconv/tests/data/anonymize_script.py @@ -1 +1 @@ -/annex/objects/SHA256E-s391--38015958888dd40f9c1872ee36a5a02587f010e0b2946be8ecd2f23c4970b07d.py +/annex/objects/SHA256E-s336--b49382e4763607f62d142ff207fd8be214c7860661556a4a929e7edacd777a1f.py diff --git a/heudiconv/tests/test_regression.py b/heudiconv/tests/test_regression.py index 06a005c3..d4cda684 100644 --- a/heudiconv/tests/test_regression.py +++ b/heudiconv/tests/test_regression.py @@ -19,7 +19,8 @@ @pytest.mark.parametrize('subject', ['sub-sid000143']) @pytest.mark.parametrize('heuristic', ['reproin.py']) -@pytest.mark.parametrize('anon_cmd', [None]) # ['anonymize_script.py'] +# @pytest.mark.parametrize('anon_cmd', [None]) # ['anonymize_script.py'] +@pytest.mark.parametrize('anon_cmd', [None, 'anonymize_script.py']) # @pytest.mark.skipif(not have_datalad, reason="no datalad") def test_conversion(tmpdir, subject, heuristic, anon_cmd): tmpdir.chdir() diff --git a/heudiconv/tests/utils.py b/heudiconv/tests/utils.py index f68c8fac..ab53fd43 100644 --- a/heudiconv/tests/utils.py +++ b/heudiconv/tests/utils.py @@ -18,7 +18,7 @@ def gen_heudiconv_args(datadir, outdir, subject, heuristic_file, anon_cmd=None, if xargs: args += xargs - print("DEBUGCUSTOM1") + print("DEBUGC-args") print(args) return args diff --git a/heudiconv/utils.py b/heudiconv/utils.py index df4145c4..a9737103 100644 --- a/heudiconv/utils.py +++ b/heudiconv/utils.py @@ -104,8 +104,29 @@ def dec(obj): def anonymize_sid(sid, anon_sid_cmd): from subprocess import check_output + import sys + print('DEBUGC-version {}'.format(sys.version)) + print('DEBUGC-execpath {}'.format(sys.executable)) + + type_to_match = type(sid) + cmd = [anon_sid_cmd, sid] - anon_sid = check_output(cmd) + shell_return = check_output(cmd) + + type_returned = type(shell_return) + + print('DEBUGC-type_to_match {}'.format(type_to_match)) + print('DEBUGC-type_returned {}'.format(type_returned)) + + # if type_to_match not type_returned: + # if sys.version_info[0] < 3: + # if type_to_match + + if all([sys.version_info[0] > 2, isinstance(shell_return, bytes), isinstance(sid, str)]): + anon_sid = shell_return.decode() + else: + anon_sid = shell_return + return anon_sid.strip() From 6ca155b3b8e62fe67a89debd6da93b0aaa8d00bc Mon Sep 17 00:00:00 2001 From: Dae Houlihan Date: Tue, 4 Dec 2018 17:10:31 -0500 Subject: [PATCH 27/41] added anon-cmd unit test. verified in py36 and py27 ready for pr --- Dockerfile | 2 +- heudiconv/cli/run.py | 7 +------ heudiconv/{slurmqueue.py => queue.py} | 0 heudiconv/tests/anonymize_script.py | 1 + heudiconv/tests/data/__init__.py | 1 - heudiconv/tests/data/anonymize_script.py | 1 - heudiconv/tests/test_regression.py | 3 +-- heudiconv/tests/utils.py | 5 +---- heudiconv/utils.py | 15 +++------------ 9 files changed, 8 insertions(+), 27 deletions(-) rename heudiconv/{slurmqueue.py => queue.py} (100%) create mode 100755 heudiconv/tests/anonymize_script.py delete mode 100644 heudiconv/tests/data/__init__.py delete mode 100755 heudiconv/tests/data/anonymize_script.py diff --git a/Dockerfile b/Dockerfile index c9e20061..4c864e7b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -71,7 +71,6 @@ RUN apt-get update -qq \ libc-dev \ git-annex-standalone \ netbase \ - vim \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* @@ -148,6 +147,7 @@ RUN echo '{ \ \n "traits>=4.6.0", \ \n "scipy", \ \n "numpy", \ + \n "pandas", \ \n "nomkl" \ \n ], \ \n "pip_install": [ \ diff --git a/heudiconv/cli/run.py b/heudiconv/cli/run.py index fe8cc2cb..3041d6dd 100644 --- a/heudiconv/cli/run.py +++ b/heudiconv/cli/run.py @@ -8,7 +8,7 @@ from ..utils import load_heuristic, anonymize_sid, treat_infofile, SeqInfo from ..convert import prep_conversion from ..bids import populate_bids_templates, tuneup_bids_json_files -from ..slurmqueue import queue_conversion +from ..queue import queue_conversion import inspect import logging @@ -306,12 +306,7 @@ def process_args(args): anon_sid = anonymize_sid(sid, args.anon_cmd) if args.anon_cmd else None if args.anon_cmd: - import sys - lgr.info('DEBUGC-version {}'.format(sys.version)) - lgr.info('DEBUGC-execpath {}'.format(sys.executable)) lgr.info('Anonymized {} to {}'.format(sid, anon_sid)) - lgr.info('DEBUGC-type_to_match {}'.format(type(sid))) - lgr.info('DEBUGC-type_returned {}'.format(type(anon_sid))) study_outdir = op.join(outdir, locator or '') anon_outdir = args.conv_outdir or outdir diff --git a/heudiconv/slurmqueue.py b/heudiconv/queue.py similarity index 100% rename from heudiconv/slurmqueue.py rename to heudiconv/queue.py diff --git a/heudiconv/tests/anonymize_script.py b/heudiconv/tests/anonymize_script.py new file mode 100755 index 00000000..84005b7b --- /dev/null +++ b/heudiconv/tests/anonymize_script.py @@ -0,0 +1 @@ +/annex/objects/SHA256E-s305--d13f986ddc4e3ba2a9fdea076834eb9861cddd365380d5675ebdf1177281f352.py diff --git a/heudiconv/tests/data/__init__.py b/heudiconv/tests/data/__init__.py deleted file mode 100644 index b2f67337..00000000 --- a/heudiconv/tests/data/__init__.py +++ /dev/null @@ -1 +0,0 @@ -/annex/objects/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.py diff --git a/heudiconv/tests/data/anonymize_script.py b/heudiconv/tests/data/anonymize_script.py deleted file mode 100755 index b9de6f6f..00000000 --- a/heudiconv/tests/data/anonymize_script.py +++ /dev/null @@ -1 +0,0 @@ -/annex/objects/SHA256E-s336--b49382e4763607f62d142ff207fd8be214c7860661556a4a929e7edacd777a1f.py diff --git a/heudiconv/tests/test_regression.py b/heudiconv/tests/test_regression.py index d4cda684..a4c98687 100644 --- a/heudiconv/tests/test_regression.py +++ b/heudiconv/tests/test_regression.py @@ -19,8 +19,7 @@ @pytest.mark.parametrize('subject', ['sub-sid000143']) @pytest.mark.parametrize('heuristic', ['reproin.py']) -# @pytest.mark.parametrize('anon_cmd', [None]) # ['anonymize_script.py'] -@pytest.mark.parametrize('anon_cmd', [None, 'anonymize_script.py']) # +@pytest.mark.parametrize('anon_cmd', [None, 'anonymize_script.py']) @pytest.mark.skipif(not have_datalad, reason="no datalad") def test_conversion(tmpdir, subject, heuristic, anon_cmd): tmpdir.chdir() diff --git a/heudiconv/tests/utils.py b/heudiconv/tests/utils.py index ab53fd43..2749cd51 100644 --- a/heudiconv/tests/utils.py +++ b/heudiconv/tests/utils.py @@ -14,12 +14,9 @@ def gen_heudiconv_args(datadir, outdir, subject, heuristic_file, anon_cmd=None, "-f", heuristic, "--bids",] if anon_cmd: - args += ["--anon-cmd", op.join(op.dirname(__file__), 'data', anon_cmd), "-a", outdir] + args += ["--anon-cmd", op.join(op.dirname(__file__), anon_cmd), "-a", outdir] if xargs: args += xargs - - print("DEBUGC-args") - print(args) return args diff --git a/heudiconv/utils.py b/heudiconv/utils.py index a9737103..02321384 100644 --- a/heudiconv/utils.py +++ b/heudiconv/utils.py @@ -103,25 +103,16 @@ def dec(obj): def anonymize_sid(sid, anon_sid_cmd): - from subprocess import check_output import sys - print('DEBUGC-version {}'.format(sys.version)) - print('DEBUGC-execpath {}'.format(sys.executable)) - - type_to_match = type(sid) + from subprocess import check_output cmd = [anon_sid_cmd, sid] shell_return = check_output(cmd) + type_to_match = type(sid) type_returned = type(shell_return) - print('DEBUGC-type_to_match {}'.format(type_to_match)) - print('DEBUGC-type_returned {}'.format(type_returned)) - - # if type_to_match not type_returned: - # if sys.version_info[0] < 3: - # if type_to_match - + ### Handle subprocess returning a bytes literal string to a python3 interpreter if all([sys.version_info[0] > 2, isinstance(shell_return, bytes), isinstance(sid, str)]): anon_sid = shell_return.decode() else: From fc47db5a41f4d29a300226fa8ae52f952f4eb2b3 Mon Sep 17 00:00:00 2001 From: Dae Date: Tue, 4 Dec 2018 17:20:46 -0500 Subject: [PATCH 28/41] Delete .projectignore --- .projectignore | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 .projectignore diff --git a/.projectignore b/.projectignore deleted file mode 100644 index 316c9c16..00000000 --- a/.projectignore +++ /dev/null @@ -1,14 +0,0 @@ -# project-local contains your personal configuration choices and state -/anaconda-project-local.yml - -# Files autocreated by Python -__pycache__/ -*.pyc -*.pyo -*.pyd - -# Notebook stuff -/.ipynb_checkpoints - -# Spyder stuff -/.spyderproject From a56df09bef4b1a935ce75a50ad7ffa4ef94e2e61 Mon Sep 17 00:00:00 2001 From: Dae Date: Tue, 4 Dec 2018 17:21:09 -0500 Subject: [PATCH 29/41] Delete environment27.yml --- environment27.yml | 1 - 1 file changed, 1 deletion(-) delete mode 100644 environment27.yml diff --git a/environment27.yml b/environment27.yml deleted file mode 100644 index b31dda57..00000000 --- a/environment27.yml +++ /dev/null @@ -1 +0,0 @@ -/annex/objects/SHA256E-s3151--0270335bbbc9ae6db51a923b92854401449661dac8a9c98d25ed37466b3af141.yml From 518ce37e1112ea7234637889b0a924d5bef41728 Mon Sep 17 00:00:00 2001 From: Dae Houlihan Date: Tue, 4 Dec 2018 18:16:37 -0500 Subject: [PATCH 30/41] rescuing files for git annex --- .gitignore | 0 heudiconv/queue.py | 36 ++++++++++++++++++++++++++++- heudiconv/tests/anonymize_script.py | 20 +++++++++++++++- 3 files changed, 54 insertions(+), 2 deletions(-) mode change 100644 => 100755 .gitignore diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/heudiconv/queue.py b/heudiconv/queue.py index e2cfaff1..89c912f2 100644 --- a/heudiconv/queue.py +++ b/heudiconv/queue.py @@ -1 +1,35 @@ -/annex/objects/SHA256E-s1164--c0074611d4178ba7bf603159c93e65f7ee7aa7c2c339a30098a9cd7e20db4547.py +import os +import os.path as op + +import logging + +lgr = logging.getLogger(__name__) + +# start with SLURM but extend past that #TODO +def queue_conversion(progname, queue, outdir, heuristic, dicoms, sid, + anon_cmd, converter, session,with_prov, bids): + + # Rework this... + convertcmd = ' '.join(['python', progname, + '-o', outdir, + '-f', heuristic, + '-s', sid, + '--anon-cmd', anon_cmd, + '-c', converter]) + if session: + convertcmd += " --ses '%s'" % session + if with_prov: + convertcmd += " --with-prov" + if bids: + convertcmd += " --bids" + if dicoms: + convertcmd += " --files" + convertcmd += [" '%s'" % f for f in dicoms] + + script_file = 'dicom-%s.sh' % sid + with open(script_file, 'wt') as fp: + fp.writelines(['#!/bin/bash\n', convertcmd]) + outcmd = 'sbatch -J dicom-%s -p %s -N1 -c2 --mem=20G %s' \ + % (sid, queue, script_file) + + os.system(outcmd) diff --git a/heudiconv/tests/anonymize_script.py b/heudiconv/tests/anonymize_script.py index 84005b7b..694923bb 100755 --- a/heudiconv/tests/anonymize_script.py +++ b/heudiconv/tests/anonymize_script.py @@ -1 +1,19 @@ -/annex/objects/SHA256E-s305--d13f986ddc4e3ba2a9fdea076834eb9861cddd365380d5675ebdf1177281f352.py +#! /usr/bin/env python + +import sys +import re +import ctypes + + +def bids_id_(sid): + parsed_id = re.compile(r"^(?:sub-|)(.+)$").search(sid).group(1) + return str(ctypes.c_size_t(hash(parsed_id)).value) + + +def main(): + sid = sys.argv[1] + return bids_id_(sid) + + +if __name__ == '__main__': + main() From ead67ceec60982c75195736d36396d12d27a8297 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Wed, 5 Dec 2018 16:02:51 -0500 Subject: [PATCH 31/41] RF: extracted functionality into a dedicated populate_aggregated_jsons PyCharm also introduced minor code reformattings to avoid too long lines --- heudiconv/bids.py | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/heudiconv/bids.py b/heudiconv/bids.py index 1440f198..b980ff7c 100644 --- a/heudiconv/bids.py +++ b/heudiconv/bids.py @@ -69,16 +69,37 @@ def populate_bids_templates(path, defaults={}): "TODO: Provide description for the dataset -- basic details about the " "study, possibly pointing to pre-registration (if public or embargoed)") + populate_aggregated_jsons(path) + + +def populate_aggregated_jsons(path): + """Aggregate across the entire BIDS dataset .json's into top level .json's + + Top level .json files would contain only the fields which are + common to all subject[/session]/type/*_modality.json's. + + ATM aggregating only for *_task*_bold.json files. Only the task- and + OPTIONAL _acq- field is retained within the aggregated filename. The other + BIDS _key-value pairs are "aggregated over". + + Parameters + ---------- + path: str + Path to the top of the BIDS dataset + """ # TODO: collect all task- .json files for func files to tasks = {} # way too many -- let's just collect all which are the same! # FIELDS_TO_TRACK = {'RepetitionTime', 'FlipAngle', 'EchoTime', # 'Manufacturer', 'SliceTiming', ''} for fpath in find_files('.*_task-.*\_bold\.json', topdir=path, - exclude_vcs=True, exclude="/\.(datalad|heudiconv)/"): + exclude_vcs=True, + exclude="/\.(datalad|heudiconv)/"): # - # According to BIDS spec I think both _task AND _acq (may be more? _rec, _dir, ...?) should be retained? - # TODO: if we are to fix it, then old ones (without _acq) should be removed first + # According to BIDS spec I think both _task AND _acq (may be more? + # _rec, _dir, ...?) should be retained? + # TODO: if we are to fix it, then old ones (without _acq) should be + # removed first task = re.sub('.*_(task-[^_\.]*(_acq-[^_\.]*)?)_.*', r'\1', fpath) json_ = load_json(fpath) if task not in tasks: @@ -97,8 +118,10 @@ def populate_bids_templates(path, defaults={}): if not op.lexists(events_file): lgr.debug("Generating %s", events_file) with open(events_file, 'w') as f: - f.write("onset\tduration\ttrial_type\tresponse_time\tstim_file\tTODO -- fill in rows and add more tab-separated columns if desired") - + f.write( + "onset\tduration\ttrial_type\tresponse_time\tstim_file" + "\tTODO -- fill in rows and add more tab-separated " + "columns if desired") # extract tasks files stubs for task_acq, fields in tasks.items(): task_file = op.join(path, task_acq + '_bold.json') @@ -110,7 +133,7 @@ def populate_bids_templates(path, defaults={}): # to be populated from the file if it already exists placeholders = { "TaskName": ("TODO: full task name for %s" % - task_acq.split('_')[0].split('-')[1]), + task_acq.split('_')[0].split('-')[1]), "CogAtlasID": "TODO", } if op.lexists(task_file): From 5c337b5bd2484a8c5a2e5ee603521c6bc792eada Mon Sep 17 00:00:00 2001 From: Mathias Goncalves Date: Wed, 12 Dec 2018 18:43:24 -0500 Subject: [PATCH 32/41] Update heudiconv/utils.py Co-Authored-By: daeh --- heudiconv/utils.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/heudiconv/utils.py b/heudiconv/utils.py index 02321384..dff1e73e 100644 --- a/heudiconv/utils.py +++ b/heudiconv/utils.py @@ -107,7 +107,8 @@ def anonymize_sid(sid, anon_sid_cmd): from subprocess import check_output cmd = [anon_sid_cmd, sid] - shell_return = check_output(cmd) + kwargs = {'encoding': 'utf-8'} if sys.version_info[0] >= 3 else {} + return check_output(cmd, **kwargs).strip() type_to_match = type(sid) type_returned = type(shell_return) @@ -461,4 +462,4 @@ def create_tree(path, tree, archives_leading_dir=True): load = load.encode('utf-8') f.write(load) if executable: - os.chmod(full_name, os.stat(full_name).st_mode | stat.S_IEXEC) \ No newline at end of file + os.chmod(full_name, os.stat(full_name).st_mode | stat.S_IEXEC) From 38c2d76a41a6b6833b261ae0b8d6eb6240b49fa9 Mon Sep 17 00:00:00 2001 From: Dae Date: Wed, 12 Dec 2018 18:54:06 -0500 Subject: [PATCH 33/41] replacing clumsy typecheck with kwargs --- heudiconv/utils.py | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/heudiconv/utils.py b/heudiconv/utils.py index dff1e73e..9c2136cd 100644 --- a/heudiconv/utils.py +++ b/heudiconv/utils.py @@ -107,19 +107,8 @@ def anonymize_sid(sid, anon_sid_cmd): from subprocess import check_output cmd = [anon_sid_cmd, sid] - kwargs = {'encoding': 'utf-8'} if sys.version_info[0] >= 3 else {} - return check_output(cmd, **kwargs).strip() - - type_to_match = type(sid) - type_returned = type(shell_return) - - ### Handle subprocess returning a bytes literal string to a python3 interpreter - if all([sys.version_info[0] > 2, isinstance(shell_return, bytes), isinstance(sid, str)]): - anon_sid = shell_return.decode() - else: - anon_sid = shell_return - - return anon_sid.strip() + kwargs = {'encoding': 'utf-8'} if sys.version_info[0] >= 3 else {} + return check_output(cmd, **kwargs).strip() def create_file_if_missing(filename, content): From 0a14a1da9c8ec3092aabf92a61dd058017d52eb1 Mon Sep 17 00:00:00 2001 From: Dae Houlihan Date: Fri, 14 Dec 2018 19:31:44 -0500 Subject: [PATCH 34/41] adding the string check back --- heudiconv/utils.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/heudiconv/utils.py b/heudiconv/utils.py index 9c2136cd..ac62af28 100644 --- a/heudiconv/utils.py +++ b/heudiconv/utils.py @@ -107,8 +107,15 @@ def anonymize_sid(sid, anon_sid_cmd): from subprocess import check_output cmd = [anon_sid_cmd, sid] - kwargs = {'encoding': 'utf-8'} if sys.version_info[0] >= 3 else {} - return check_output(cmd, **kwargs).strip() + shell_return = check_output(cmd) + + ### Handle subprocess returning a bytes literal string to a python3 interpreter + if all([sys.version_info[0] > 2, isinstance(shell_return, bytes), isinstance(sid, str)]): + anon_sid = shell_return.decode() + else: + anon_sid = shell_return + + return anon_sid.strip() def create_file_if_missing(filename, content): From 9aaf9ed0a45f852ce94db2619494df50ae54153c Mon Sep 17 00:00:00 2001 From: Dae Houlihan Date: Fri, 14 Dec 2018 19:34:49 -0500 Subject: [PATCH 35/41] adding pandas to docker file generation --- utils/gen-docker-image.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/gen-docker-image.sh b/utils/gen-docker-image.sh index 10f745ae..63756dca 100644 --- a/utils/gen-docker-image.sh +++ b/utils/gen-docker-image.sh @@ -10,7 +10,7 @@ docker run --rm $image generate docker -b neurodebian:stretch -p apt \ --dcm2niix version=v1.0.20180622 method=source \ --install git gcc pigz liblzma-dev libc-dev git-annex-standalone netbase \ --copy . /src/heudiconv \ - --miniconda use_env=base conda_install="python=3.6 traits>=4.6.0 scipy numpy nomkl" \ + --miniconda use_env=base conda_install="python=3.6 traits>=4.6.0 scipy numpy nomkl pandas" \ pip_install="/src/heudiconv[all]" \ pip_opts="--editable" \ --entrypoint "heudiconv" \ From 1e0353c1c2bebf361aca00a5cafad8a6024d5099 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Fri, 4 Jan 2019 10:33:17 -0500 Subject: [PATCH 36/41] CHANGELOG --- CHANGELOG.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96cb6c5d..0bb0f698 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,9 @@ All notable changes to this project will be documented (for humans) in this file The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## [0.5.2] - Date +## [0.5.2] - 2019-01-04 -TODO Summary +A variety of bugfixes ### Added ### Changed @@ -14,11 +14,22 @@ TODO Summary - Reproin heuristic: `__dup` indices would now be assigned incrementally individually per each sequence, so there is a chance to properly treat associate for multi-file (e.g. `fmap`) sequences +- Reproin heuristic: also split StudyDescription by space not only by ^ - `tests/` moved under `heudiconv/tests` to ease maintenance and facilitate testing of an installed heudiconv +- Protocol name will also be accessed from private Siemens + csa.tProtocolName header field if not present in public one ### Deprecated ### Fixed + +- Multiple files produced by dcm2niix are first sorted to guarantee + correct order e.g. of magnitude files in fieldmaps, which otherwise + resulted in incorrect according to BIDS ordering of them +- Aggregated top level .json files now would contain only the fields + with the same values from all scanned files. In prior versions, + those files were not regenerated after an initial conversion + ### Removed ### Security From ad63f7d03764f47bcd51843ce63f50537c62d827 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Fri, 4 Jan 2019 10:34:38 -0500 Subject: [PATCH 37/41] Version boost --- LICENSE | 2 +- heudiconv/info.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index bf30877f..00e7481a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright [2014-2018] [Heudiconv developers] +Copyright [2014-2019] [Heudiconv developers] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/heudiconv/info.py b/heudiconv/info.py index 6aa469f6..c1f9d0e7 100644 --- a/heudiconv/info.py +++ b/heudiconv/info.py @@ -1,4 +1,4 @@ -__version__ = "0.5.2-dev" +__version__ = "0.5.2" __author__ = "HeuDiConv team and contributors" __url__ = "https://github.com/nipy/heudiconv" __packagename__ = 'heudiconv' From d59f1ba79105ad977a5e658c42815fb1cd7d172a Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Fri, 4 Jan 2019 10:44:46 -0500 Subject: [PATCH 38/41] Adjusted CHANGELOG --- CHANGELOG.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bb0f698..04dbf351 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. A variety of bugfixes -### Added ### Changed - - Reproin heuristic: `__dup` indices would now be assigned incrementally individually per each sequence, so there is a chance to properly treat associate for multi-file (e.g. `fmap`) sequences @@ -19,20 +17,16 @@ A variety of bugfixes testing of an installed heudiconv - Protocol name will also be accessed from private Siemens csa.tProtocolName header field if not present in public one +- nipype>=0.12.0 is required now -### Deprecated ### Fixed - - Multiple files produced by dcm2niix are first sorted to guarantee correct order e.g. of magnitude files in fieldmaps, which otherwise resulted in incorrect according to BIDS ordering of them - Aggregated top level .json files now would contain only the fields with the same values from all scanned files. In prior versions, those files were not regenerated after an initial conversion - -### Removed -### Security - +- Unicode handling in anonimization scripts ## [0.5.1] - 2018-07-05 Bugfix release From 7a60c0d2447768c524f2adba5adb17ae509db020 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Fri, 4 Jan 2019 11:28:02 -0500 Subject: [PATCH 39/41] Install test data --- setup.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index bf6c9d4c..46b838fd 100755 --- a/setup.py +++ b/setup.py @@ -54,7 +54,10 @@ def findsome(subdir, extensions): ]}, install_requires=ldict['REQUIRES'], extras_require=ldict['EXTRA_REQUIRES'], - ) + package_data={ + 'heudiconv.tests': [op.join('data', '*'), op.join('data', '*', '*')], + } + ) if __name__ == '__main__': From b6d6a51efc334cb79979ed5f504b0e51bd406e6b Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Fri, 4 Jan 2019 22:49:40 -0500 Subject: [PATCH 40/41] BF: package_data - restrict to *.dcm files to not match directories On older systems, setuptools puke on directories --- setup.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 46b838fd..6017447a 100755 --- a/setup.py +++ b/setup.py @@ -55,7 +55,10 @@ def findsome(subdir, extensions): install_requires=ldict['REQUIRES'], extras_require=ldict['EXTRA_REQUIRES'], package_data={ - 'heudiconv.tests': [op.join('data', '*'), op.join('data', '*', '*')], + 'heudiconv.tests': [ + op.join('data', '*.dcm'), + op.join('data', '*', '*.dcm') + ], } ) From b9b5e0d27db8471c8dc00caa107874a3fe7a73b3 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Fri, 4 Jan 2019 23:42:24 -0500 Subject: [PATCH 41/41] Show must go on --- CHANGELOG.md | 16 ++++++++++++++++ heudiconv/info.py | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 04dbf351..f5c86e3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,22 @@ All notable changes to this project will be documented (for humans) in this file The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [0.5.3] - Date + +TODO Summary + +### Added + +### Changed + +### Deprecated + +### Fixed + +### Removed + +### Security + ## [0.5.2] - 2019-01-04 A variety of bugfixes diff --git a/heudiconv/info.py b/heudiconv/info.py index c1f9d0e7..6d364410 100644 --- a/heudiconv/info.py +++ b/heudiconv/info.py @@ -1,4 +1,4 @@ -__version__ = "0.5.2" +__version__ = "0.5.3-dev" __author__ = "HeuDiConv team and contributors" __url__ = "https://github.com/nipy/heudiconv" __packagename__ = 'heudiconv'