Skip to content

Latest commit

 

History

History
890 lines (645 loc) · 41.7 KB

CHANGELOG.md

File metadata and controls

890 lines (645 loc) · 41.7 KB

v1.1.3 (Thu May 16 2024)

📝 Documentation

Authors: 1


v1.1.2 (Wed May 15 2024)

🏠 Internal

📝 Documentation

Authors: 3


v1.1.1 (Thu May 02 2024)

🐛 Bug Fix

  • Handle cases where dates/times in DICOM are empty strings, not Nones (e.g. after some anonymization) #756 (@jennan @yarikoptic)

Authors: 2


v1.1.0 (Wed Feb 28 2024)

🚀 Enhancement

  • Add support for a custom seqinfo to extract from DICOMs any additional metadata desired for a heuristic #581 (@yarikoptic @bpinsard)
  • codespell: ignore "build" folder which might be on the system #581 (@yarikoptic)

Authors: 2


v1.0.2 (Mon Feb 26 2024)

🐛 Bug Fix

⚠️ Pushed to master

🏠 Internal

📝 Documentation

Authors: 6


v1.0.1 (Fri Dec 08 2023)

🐛 Bug Fix

  • Drop Python 3.7 support #722 (@yarikoptic)
  • ReproIn: give an informative assertion message when multiple values are found #718 (@yarikoptic)
  • Convert assertion into a warning that we would not use dicom dir template option #709 (@yarikoptic)
  • Do not demand --files for all commands, even those which do not care about it (like populate-intended-for) #708 (@yarikoptic)

⚠️ Pushed to master

  • Add script to sensor dicoms -- for the error where dcm2niix might or might not fail but issues an Error (@yarikoptic)

🏠 Internal

  • Ran pre-commit on everything, black decided to adjust some formatting #721 (@yarikoptic)
  • Make sensor-dicoms use gnu-getopt if present (on OSX) #721 (@yarikoptic)

Authors: 1


v1.0.0 (Wed Sep 20 2023)

💥 Breaking Change

🚀 Enhancement

  • Fix inconsistent behavior of existing session when using -d compared to --files option: raise an AssertionError instead of just a warning #682 (@neurorepro)

🐛 Bug Fix

🏠 Internal

  • Add codespell to lint tox env #706 (@yarikoptic)
  • test-compare-two-versions.sh: also ignore differences in HeudiconvVersion field in jsons since we have it there now #685 (@yarikoptic)

📝 Documentation

  • Add description of placeholders which could be used in the produced templates #681 (@yarikoptic)

Authors: 3


v0.13.1 (Tue May 23 2023)

🐛 Bug Fix

  • Make .subsecond optional in BIDS/DICOM datetime entries #675 (@yarikoptic)

🏠 Internal

Authors: 2


v0.13.0 (Mon May 08 2023)

🚀 Enhancement

  • Add type annotations #656 (@jwodder @yarikoptic)
  • ENH: Support extracting DICOMs from ZIP files (and possibly other archives) by switching to use shutil.unpack_archive instead of tarfile module functionality #471 (@HippocampusGirl @psadil)
  • Allow filling of acq_time when AcquisitionDate AcquisitionTime missing #614 (@psadil)

🐛 Bug Fix

  • BF(?): make _setter images be taken as scouts - only DICOMs are saved #570 (@yarikoptic)
  • Adjust .mailmap to account for mapping various folks with multiple emails so that git shortlog -sn -e provides entries without duplicates #570 (@yarikoptic)
  • Make an embed_dicom_and_nifti_metadata() annotation work on Python 3.7 #673 (@jwodder)
  • Merge branch 'feature_dicom_compresslevel' #673 (@yarikoptic)
  • Update heudiconv/dicoms.py #669 (@octomike)
  • Don't call logging.basicConfig() in __init__.py #659 (@jwodder)

⚠️ Pushed to master

  • Mailmapping more contributors (@yarikoptic)
  • Adjust comment and remove trailing space flipping linting (@yarikoptic)

🏠 Internal

  • Declare custom_grouping return type instead of casting #671 (@jwodder)
  • Use pydicom.dcmread() instead of pydicom.read_file() #668 (@jwodder)
  • Add sample_nifti.json to .gitignore #663 (@jwodder)
  • Write command arguments as lists of strings instead of splitting strings on whitespace #664 (@jwodder)
  • Add & apply pre-commit and lint job #658 (@jwodder)
  • Fix some strings with \ (make them raw or double-), improve pytest config: move to tox.ini, make unknown warnings into errors #660 (@jwodder)
  • Replace py.path with pathlib #654 (@jwodder)

🧪 Tests

  • Make test_private_csa_header test write to temp dir #666 (@jwodder)

🔩 Dependency Updates

  • Replace third-party mock library with stdlib's unittest.mock #661 (@jwodder)
  • Remove kludgy support for older versions of pydicom and dcmstack #662 (@jwodder)
  • Remove use of six #655 (@jwodder)

Authors: 5


v0.12.2 (Tue Mar 14 2023)

🏠 Internal

Authors: 1


v0.12.1 (Tue Mar 14 2023)

🐛 Bug Fix

  • Re-add explicit instructions to install dcm2niix "manually" and remove it from install_requires #651 (@yarikoptic)

📝 Documentation

Authors: 3


v0.12.0 (Tue Feb 21 2023)

🚀 Enhancement

🐛 Bug Fix

⚠️ Pushed to master

  • DOC: add clarification on where docs/requirements.txt should be "installed" from (@yarikoptic)
  • fix minor typo (@yarikoptic)
  • DOC: fixed the comment. Original was copy/pasted from DataLad (@yarikoptic)

🏠 Internal

  • dcm2niix explicitly noted as a (PyPI) dependency and removed from being installed via apt-get etc #628 (@TheChymera @yarikoptic)

📝 Documentation

🧪 Tests

Authors: 5


v0.11.6 (Thu Nov 03 2022)

🏠 Internal

📝 Documentation

Authors: 2


v0.11.5 (Thu Nov 03 2022)

🐛 Bug Fix

  • Fix certificate issue as indicated in #595 #597 (@neurorepro)
  • BF docker build: use python3.9 (not 3.7 which gets upgraded to 3.9) and newer dcm2niix #596 (@yarikoptic)
  • Fixup miniconda spec for neurodocker so it produces dockerfile now #596 (@yarikoptic)

🏠 Internal

📝 Documentation

Authors: 3


v0.11.4 (Thu Sep 29 2022)

🐛 Bug Fix

  • install dcmstack straight from github until it is released #593 (@yarikoptic)
  • DOC: provide rudimentary How to contribute section in README.rst (@yarikoptic)

⚠️ Pushed to master

  • Check out a full clone when testing (@jwodder)
  • Convert Travis workflow to GitHub Actions (@jwodder)
  • BF(docker): replace old -tipsy with -y -all for conda clean as neurodocker does now (@yarikoptic)
  • adjusted script for neurodocker although it does not work (@yarikoptic)

🏠 Internal

  • 0.9 of dcmstack was released, no need for github version #594 (@yarikoptic)
  • Minor face-lifts to ReproIn: align doc and code better to BIDS terms, address deprecation warnings etc #569 (@yarikoptic)

Authors: 2


v0.11.3 (Thu May 12 2022)

🏠 Internal

Authors: 1


v0.11.2 (Thu May 12 2022)

🏠 Internal

  • Make versioningit write version to file; make setup.py read version as fallback #566 (@jwodder)
  • BF: add fetch-depth: 0 to get all tags into docker builds of master #566 (@yarikoptic)

Authors: 2


v0.11.1 (Tue May 10 2022)

🏠 Internal

  • Remove .git/ from .dockerignore so that versioning works while building docker image #564 (@yarikoptic)

Authors: 1


v0.11.0 (Tue May 10 2022)

🚀 Enhancement

🐛 Bug Fix

  • bids_ME heuristic: add test for the dataset that raised #541, add support for MEGRE #547 (@pvelasco @yarikoptic)
  • reproin heuristic: specify POPULATE_INTENDED_FOR_OPTS #546 (@yarikoptic)
  • FIX: Convert sets to lists for filename updaters #461 (@tsalo)
  • Added new infofilestyle compatible with BIDS #12 (@chrisgorgo)
  • try a simple fix for wrongly ordered files in tar file #535 (@bpinsard)
  • BF: Fix the order of the 'echo' entity in the filename #542 (@pvelasco)
  • ENH: add HeudiconvVersion to sidecar .json files #529 (@yarikoptic)
  • BF (TST): make anonymize_script actually output anything and map deterministically #511 (@yarikoptic)
  • Rename DICOMCONVERT_README.md to README.md #4 (@satra)

⚠️ Pushed to master

  • Dockerfile - use bullseye for the base and fresh dcm2niix (@yarikoptic)

🏠 Internal

🧪 Tests

  • BF(TST): use caplog to control logging level, use python3 in shebang #553 (@yarikoptic)
  • BF(TST): use caplog instead of capfd for testing if we log a warning #534 (@yarikoptic)
  • Travis - Use bionic for the base #533 (@yarikoptic)

Authors: 9


[0.10.0] - 2021-09-16

Various improvements and compatibility/support (dcm2niix, datalad) changes.

Added

  • Add "AcquisitionTime" to the seqinfo (#487)
  • Add support for saving the Phoenix Report in the sourcedata folder (#489)

Changed

  • Python 3.5 EOLed, supported (tested) versions now: 3.6 - 3.9
  • In reprorin heuristic, allow for having multiple accessions since now there is -g all grouping (#508)
  • For BIDS, produce a singular scans.json at the top level, and not one per sub/ses (generates too many identical files) (#507)

Fixed

  • Compatibility with DataLad 0.15.0. Minimal version is 0.13.0 now.
  • Try to open top level BIDS .json files a number of times for adjustment, so in the case of competition across parallel processes, they just end up with the last one "winning over" (#523)
  • Don't fail if etelemetry.get_project returns None (#501)
  • Consistently use n/a for age/sex, also handle ?M for months (#500)
  • To avoid crashing on unrelated derivatives files etc, make find_files to take list of topdirs (excluding derivatives/ etc), and look for _bold only under sub-* directories (#496)
  • Ensure bvec/bval files are only created for dwi output (#491)

Removed

  • In reproin heuristic, old hardcoded sequence renamings and filters (#508)

[0.9.0] - 2020-12-23

Various improvements and compatibility/support (dcm2niix, datalad, duecredit) changes. Major change is placement of output files to the target output directory during conversion.

Added

  • #454 zenodo referencing in README.rst and support for ducredit for heudiconv and reproin heuristic
  • #445 more tutorial references in README.md

Changed

  • #485 placed files during conversion right away into the target directory (with a _heudiconv??? suffix, renamed into ultimate target name later on), which avoids hitting file size limits of /tmp (#481) and helped to avoid a regression in dcm2nixx 1.0.20201102
  • #477 replaced rec-<magnitude|phase> with part-<mag|phase> now hat BIDSsupports the part entity
  • #473 made default for CogAtlasID to be a TODO URL
  • #459 made AcquisitionTime used for acq_time scans file field
  • #451 retained sub-second resolution in scans files
  • #442 refactored code so there is now heudiconv.main.workflow for more convenient use as a Python module

Fixed

  • minimal version of nipype set to 1.2.3 to guarantee correct handling of DWI files (#480)
  • heudiconvDCM* temporary directories are removed now (#462)
  • compatibility with DataLad 0.13 (#464)

Removed

  • #443 pathlib as a dependency (we are Python3 only now)

[0.8.0] - 2020-04-15

Enhancements

  • Centralized saving of .json files. Indentation of some files could change now from previous versions where it could have used 3 spaces. Now indentation should be consistently 2 for .json files we produce/modify (#436) (note: dcm2niix uses tabs for indentation)
  • ReproIn heuristic: support SBRef and phase data (#387)
  • Set the "TaskName" field in .json sidecar files for multi-echo data (#420)
  • Provide an informative exception if command needs heuristic to be specified (#437)

Refactored

  • embed_nifti was refactored into embed_dicom_and_nifti_metadata which would no longer create .nii file if it does not exist already (#432)

Fixed

  • Skip datalad-based tests if no datalad available (#430)
  • Search heuristic file path first so we do not pick up a python module if name conflicts (#434)

[0.7.0] - 2020-03-20

Removed

  • Python 2 support/testing

Enhancement

  • -g option obtained two new modes: all and custom. In case of all, all provided DICOMs will be treated as coming from a single scanning session. custom instructs to use .grouping value (could be a DICOM attribute or a callable)provided by the heuristic (#359).
  • Stop before reading pixels data while gathering metadata from DICOMs (#404)
  • reproin heuristic:
    • In addition to original "md5sum of the study_description" protocols2fix could now have (and applied after md5sum matching ones) 1). a regular expression searched in study_description, 2). an empty string as "catch all". This features could be used to easily provide remapping into reproin naming (documentation is to come to http://github.com/ReproNim/reproin) (#425)

Fixed

  • Use nan, not None for absent echo value in sorting
  • reproin heuristic: case seqinfos into a list to be able to modify from overloaded heuristic (#419)
  • No spurious errors from the logger upon a warning about etelemetry absence (#407)

[0.6.0] - 2019-12-16

This is largely a bug fix. Metadata and order of _key-value fields in BIDS could change from the result of converting using previous versions, thus minor version boost. 14 people contributed to this release -- thanks everyone!

Enhancement

  • Use etelemetry to inform about most recent available version of heudiconv. Please set NO_ET environment variable if you want to disable it (#369)
  • BIDS:
    • --bids flag became an option. It can (optionally) accept notop value to avoid creation of top level files (CHANGES, dataset_description.json, etc) as a workaround during parallel execution to avoid race conditions etc. (#344)
    • Generate basic .json files with descriptions of the fields for participants.tsv and _scans.tsv files (#376)
    • Use filelock while writing top level files. Use HEUDICONV_FILELOCK_TIMEOUT environment to change the default timeout value (#348)
    • _PDT2 was added as a suffix for multi-echo (really "multi-modal") sequences (#345)
  • Calls to dcm2niix would include full output path to make it easier to discern in the logs what file it is working on (#351)
  • With recent datalad (>= 0.10), created DataLad dataset will use --fake-dates functionality of DataLad to not leak data conversion dates, which might be close to actual data acquisition/patient visit (#352)
  • Support multi-echo EPI _phase data (#373 fixes #368)
  • Log location of a bad .json file to ease troubleshooting (#379)
  • Add basic pypi classifiers for the package (#380)

Fixed

  • Sorting _scans.tsv files lacking valid dates field should not cause a crash (#337)
  • Multi-echo files detection based number of echos (#339)
  • BIDS
    • Use EchoTimes from the associated multi-echo files if EchoNumber tag is missing (#366 fixes #347)
    • Tolerate empty ContentTime and/or ContentDate in DICOMs (#372) and place "n/a" if value is missing (#390)
    • Do not crash and store original .json file is "JSON pretification" fails (#342)
  • ReproIn heuristic
    • tolerate WIP prefix on Philips scanners (#343)
    • allow for use of (...) instead of {...} since {} are not allowed (#343)
    • Support pipolar fieldmaps by providing them with _epi not _magnitude. "Loose" BIDS _key-value pairs might come now after _dir- even if they came first before (#358 fixes #357)
  • All heuristics saved under .heudiconv/ under heuristic.py name, to avoid discrepancy during reconversion (#354 fixes #353)
  • Do not crash (with TypeError) while trying to sort absent file list (#360)
  • heudiconv requires nipype >= 1.0.0 (#364) and blacklists 1.2.[12] (#375)

[0.5.4] - 2019-04-29

This release includes fixes to BIDS multi-echo conversions, the re-implementation of queuing support (currently just SLURM), as well as some bugfixes.

Starting today, we will (finally) push versioned releases to DockerHub. Finally, to more accurately reflect on-going development, the latest tag has been renamed to unstable.

Added

  • Readthedocs documentation (#327)

Changed

  • Update Docker dcm2niix to v.1.0.20190410 (#334)
  • Allow usage of --files with basic heuristics. This requires use of --subject flag, and is limited to one subject. (#293)

Deprecated

Fixed

  • Improve support for multiple --queue-args (#328)
  • Fixed an issue where generated BIDS sidecar files were missing additional information - treating all conversions as if the --minmeta flag was used (#306)
  • Re-enable SLURM queuing support (#304)
  • BIDS multi-echo support for EPI + T1 images (#293)
  • Correctly handle the case when outtype of heuristic has "dicom" before '.nii.gz'. Previously would have lead to absent additional metadata extraction etc (#310)

Removed

  • --sbargs argument was renamed to --queue-args (#304)

Security

[0.5.3] - 2019-01-12

Minor hot bugfix release

Fixed

  • Do not shorten spaces in the dates while pretty printing .json

[0.5.2] - 2019-01-04

A variety of bugfixes

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
  • 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
  • nipype>=0.12.0 is required now

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
  • Unicode handling in anonimization scripts

[0.5.1] - 2018-07-05

Bugfix release

Added

  • Video tutorial / updated slides
  • Helper to set metadata restrictions correctly
  • Usage is now shown when run without arguments
  • New fields to Seqinfo
    • series_uid
  • Reproin heuristic support for xnat

Changed

  • Dockerfile updated to use dcm2niix v1.0.20180622
  • Conversion table will be regenerated if heurisic has changed
  • Do not touch existing BIDS files
    • events.tsv
    • task JSON

Fixed

  • Python 2.7.8 and older installation
  • Support for updated packages
    • Datalad 0.10
    • pydicom 1.0.2
  • Later versions of pydicom are prioritized first
  • JSON pretty print should not remove spaces
  • Phasediff fieldmaps behavior
    • ensure phasediff exists
    • support for single magnitude acquisitions

[0.5] - 2018-03-01

The first release after major refactoring:

Changed

  • Refactored into a proper heudiconv Python module
    • heuristics is now a heudiconv.heuristics submodule
    • you can specify shipped heuristics by name (e.g. -f reproin) without providing full path to their files
    • you need to use --files (not just positional argument(s)) if not using --dicom_dir_templates or --subjects to point to data files or directories with input DICOMs
  • Dockerfile is generated by neurodocker
  • Logging verbosity reduced
  • Increased leniency with missing DICOM fields
  • dbic_bids heuristic renamed into reproin

Added

Removed

  • Support for converters other than dcm2niix, which is now the default. Explicitly specify -c none to only prepare conversion specification files without performing actual conversion

Fixed

  • Compatibility with Nipype 1.0, PyDicom 1.0, and upcoming DataLad 0.10
  • Consistency with converted files permissions
  • Ensured subject id for BIDS conversions will be BIDS compliant
  • Re-add seqinfo fields as column names in generated dicominfo
  • More robust sanity check of the regex reformatted .json file to avoid numeric precision issues
  • Many other various issues

[0.4] - 2017-10-15

A usable release to support DBIC use-case

Added

  • more testing

Changes

  • Dockerfile updates (added pigz, progressed forward dcm2niix)

Fixed

  • correct date/time in BIDS _scans files
  • sort entries in _scans by date and then filename

[0.3] - 2017-07-10

A somewhat working release on the way to support DBIC use-case

Added

  • more tests
  • grouping of dicoms by series if provided
  • many more features and fixes

[0.2] - 2016-10-20

An initial release on the way to support DBIC use-case

Added

  • basic Python project assets (setup.py, etc)
  • basic tests
  • datalad support
  • dbic_bids heuristic
  • --dbg command line flag to enter pdb environment upon failure

Fixed

  • Better Python3 support
  • Better PEP8 compliance

[0.1] - 2015-09-23

Initial version


References