d093827 | Matt McCormick | 30 April 2021, 15:55:10 UTC | DOC: Add more links in the README | 30 April 2021, 15:55:10 UTC |
2c14b2a | Viktor van der Valk | 20 April 2021, 11:00:54 UTC | CI:Elastix to my.cdash update (#451) * CI:Elastix_to_MyCdash * CI:Use_sha_in_ctest_build_name | 20 April 2021, 11:00:54 UTC |
d8776c0 | Niels Dekker | 12 April 2021, 20:39:09 UTC | BUG: Fix Conversion::ToString(float) itk::NumberToString specialization Accidentally, `ToString(float)` called the "double" specialization of `itk::NumberToString`, which led to a sub-optimal string representation. For example, 0.1f would yield "0.10000000149011612", instead of simply "0.1". Fixed by calling the "float" specialization of `itk::NumberToString` instead. | 13 April 2021, 08:50:39 UTC |
719b98f | Niels Dekker | 09 April 2021, 09:14:52 UTC | BUG: ReadParameter should fail if parameter string isn't fully processed The `ReadParameter<T>` member functions of `ParameterMapInterface` should fail when a parameter string is not entirely processed, during the conversion from `std::string` to type `T`. For example, when the parameter has string value "0.1", an attempt to read it into an integer will only process the string until (just before) the decimal point. This should trigger an exception. Note that a string value like "123.000" should still be converted to an integer, by `ReadParameter<int>`, as it only has trailing zero's after the decimal point. | 12 April 2021, 16:31:57 UTC |
96a38f1 | Niels Dekker | 08 April 2021, 17:27:50 UTC | BUG: Use double-conversion instead of std::istringstream in ParameterMap Replaced `std::istringstream` by `StringToDoubleConverter` from Google's double-conversion library <https://github.com/google/double-conversion>, inside the implementation of `ParameterMapInterface::StringCastToFloatingPoint`. `double_conversion::StringToDoubleConverter` is not affected by locale settings (specifically the decimal separator and the optional separator for thousands), so this commit should fix issue https://github.com/SuperElastix/elastix/issues/454 "elastix crash when LANG=fr_FR.UTF-8". The new `StringCastToFloatingPoint` implementation detects more types of user input errors, for example when a user tries to use a comma as decimal separator (as in "2,375"). This commit also cleans up, by removing code which is no longer necessary now, from "BUG: ParameterMapInterface::StringCast workaround Clang denormal bug", pull request https://github.com/SuperElastix/elastix/pull/404 commit a06e2323166d2ce3119ebcb650fe8ac80fe9b26b Note that elastix already uses Google's double-conversion library for double-to-string conversion, indirectly, via `itk::NumberToString`. | 09 April 2021, 08:17:40 UTC |
8df8ee8 | Niels Dekker | 29 March 2021, 10:46:40 UTC | ENH: Support Parameters + FixedParameters from itk::AffineTransform Supported using the TransformParameters and the TransformFixedParameters from ITK's `itk::AffineTransform` as parameter values for elastix AffineTransform (`AdvancedAffineTransformElastix`). | 07 April 2021, 14:53:52 UTC |
b067004 | Niels Dekker | 06 April 2021, 21:47:57 UTC | BUG: Fix retrieval of ITK FixedParameters TransformBase::ReadFromFile() | 07 April 2021, 14:53:52 UTC |
c18519d | Niels Dekker | 02 April 2021, 17:22:53 UTC | STYLE: Remove `using namespace std` from Common/xout Followed "Coding Standards" FAQ, "Should I use using namespace std in my code?" (Answer: "Probably not.") https://isocpp.org/wiki/faq/coding-standards#using-namespace-std | 02 April 2021, 19:31:02 UTC |
d03e0c5 | Niels Dekker | 28 March 2021, 17:43:52 UTC | COMP: Fix warning C4100: 'argv', 'argc': unreferenced formal parameter Fixed 48 of those warnings, by Visual C++ 2019 (Warning level 4), at the definition of `main` functions of tests. | 28 March 2021, 20:36:43 UTC |
accb3e7 | Niels Dekker | 28 March 2021, 13:22:34 UTC | COMP: Fix warning '!=': logical operation on address of string constant Fixed a Visual C++ 2019 Warning Level 4 warning from `static_assert(ELX_CMAKE_SOURCE_DIR != nullptr, "...")`, saying: > warning C4130: '!=': logical operation on address of string constant Did check `CMAKE_SOURCE_DIR` more carefully, adding two more `static_assert`s. | 28 March 2021, 20:36:43 UTC |
7fdca97 | Niels Dekker | 26 March 2021, 16:39:03 UTC | STYLE: Remove duplicate itkAdvancedTranslationTransform from Components Removed the duplicate definition of `itk::AdvancedTranslationTransform` from Components/Transforms/TranslationStackTransform. It is also at Common/Transforms ! | 26 March 2021, 20:07:36 UTC |
026dafb | Kasper Marstal | 26 March 2021, 12:04:19 UTC | Fix VNL header | 26 March 2021, 13:59:56 UTC |
6b3ac53 | Kasper Marstal | 26 March 2021, 12:03:44 UTC | Add ELASTIX_VERSION CMake variable | 26 March 2021, 13:59:56 UTC |
3c3d37a | Niels Dekker | 23 March 2021, 12:51:52 UTC | ENH: Add five GoogleTest unit tests for itk::TransformixFilter Added the following unit tests: - itkTransformixFilter.Translation2D - itkTransformixFilter.Translation3D - itkTransformixFilter.TranslationViaExternalTransformFile - itkTransformixFilter.ITKTranslationTransform2D - itkTransformixFilter.ITKTranslationTransform3D | 25 March 2021, 08:54:38 UTC |
3a2bef4 | Niels Dekker | 23 March 2021, 09:40:03 UTC | STYLE: Add itkAdvancedTranslationTransform .h and .hxx to CMakeLists.txt Followed the convention to pass the names of all header files of a component with its `ADD_ELXCOMPONENT` call. | 23 March 2021, 10:26:34 UTC |
4f2fa16 | Niels Dekker | 22 March 2021, 22:35:38 UTC | STYLE: Fix itkAdvancedTranslationTransform.hxx include guard macro name Follow-up to commit "STYLE: Rename itkAdvancedTranslationTransform.txx to .hxx". | 23 March 2021, 10:26:34 UTC |
8ca7d42 | Niels Dekker | 22 March 2021, 22:25:46 UTC | STYLE: Run clang-format on itkAdvancedTranslationTransform.hxx Apparently clang-format did not run on this file when it still had a .txx filename extension. | 23 March 2021, 10:26:34 UTC |
bc6c23f | Niels Dekker | 22 March 2021, 22:09:46 UTC | STYLE: Rename itkAdvancedTranslationTransform.txx to .hxx Following ITK's C++ source file naming convention. ITK abandoned .txx with "STYLE: Change to hxx extension for dev tools", Hans Johnson, 12 July 2011, commit https://github.com/InsightSoftwareConsortium/ITK/commit/2fccd272862ab7cc408d643c8db2e1cb5d098fcf | 23 March 2021, 10:26:34 UTC |
4d1cc48 | Niels Dekker | 22 March 2021, 14:49:16 UTC | ENH: Test ability to use special chars in external transform file paths Follow-up to commit 0a962b866dd8a1f15ca1a1eee11ca84a170534ab "ENH: Lift ParameterFileParser restrictions on chars of parameter values". | 22 March 2021, 17:36:01 UTC |
1c29460 | Niels Dekker | 07 March 2021, 21:58:50 UTC | ENH: Read data from an external transform file into the parameter map Both `Configuration::Initialize` overloads now add values from an external file, when the specified parameter map has parameter `("Transform" "File")`, and a "TransformFileName" parameter, which specifies the external file. The values are stored into the parameters "ITKTransformParameters", "ITKTransformFixedParameters", and "ITKTransformType". The value of the "Transform" parameter is then set to the elastix transform type name that corresponds with the "ITKTransformType" value. `TransformBase::ReadFromFile()` retrieves these new parameters and loads their values into the transform object. Added unit tests for a stand-alone initial transform parameter file, and for an initial transform parameter file that links to an ITK transform file (.tfm or .h5). Added `Deref`, `Front`, and `GetDataDirectoryPath()` helper functions to `CoreMainGTestUtilities`. | 19 March 2021, 21:35:36 UTC |
0a962b8 | Niels Dekker | 19 March 2021, 10:05:13 UTC | ENH: Lift ParameterFileParser restrictions on chars of parameter values Removed checks on special characters (",;!@#$%&|<>?") from `ParameterFileParser::GetParameterFromLine` for parameter values, in order to be more permissive towards free text strings, and to allow any file path name as parameter value. | 19 March 2021, 10:52:09 UTC |
4ac44df | Niels Dekker | 15 March 2021, 14:34:14 UTC | STYLE: Move CreateParameterMap function to elx::CoreMainGTestUtilities | 15 March 2021, 17:21:03 UTC |
d97a728 | Niels Dekker | 09 March 2021, 09:37:18 UTC | COMP: Replace string::find_last_of("/") calls by using string::back() Addressed warnings from LLVM 11.1.0 Clang Power Tools, saying: > 'find_last_of' called with a string literal consisting of a single character; consider using the more effective overload accepting a character [performance-faster-string-find] | 09 March 2021, 10:45:12 UTC |
f36c1db | Niels Dekker | 04 March 2021, 22:07:58 UTC | ENH: Add RetrieveValues to ParameterMapInterface and elx::Configuration Added convenience member functions, `itk::ParameterMapInterface::RetrieveValues(parameterName)` and `elx::Configuration::RetrieveValuesOfParameter(parameterName)`. Included six `ParameterMapInterface` GoogleTest unit tests. | 08 March 2021, 14:42:46 UTC |
5dd5ace | Niels Dekker | 05 March 2021, 10:37:35 UTC | ENH: Add Conversion::ToOptimizerParameters(const std::vector<double> &) Including GoogleTest unit test. | 08 March 2021, 14:41:05 UTC |
bd4d0b3 | Niels Dekker | 03 March 2021, 22:15:35 UTC | STYLE: Use itk::TransformBase for itk::TransformBaseTemplate<double> Just to reduce the noise, just like using `std::string` for `std::basic_string<char>`. | 04 March 2021, 08:17:29 UTC |
7b2502f | Niels Dekker | 03 March 2021, 10:00:53 UTC | STYLE: Remove nine unnecessary dynamic_casts from T* tot T* Removed "no-op" dynamic_casts, that just cast a pointer to its own compile-time type. | 03 March 2021, 12:56:27 UTC |
2f9c947 | Niels Dekker | 03 March 2021, 09:58:07 UTC | STYLE: Remove unused CheckForAdvancedTransform(void) from Optimizers The `CheckForAdvancedTransform(void)` member function of five optimizer component classes appears unnecessary, because the transform returned by `GetRegistration()->GetAsITKBaseType()->GetModifiableTransform()` is always an advanced transform anyway. (There is no need to "check" this at run-time.) The member function is not being called anywhere, although the documentation said, "Called by Initialize". Removing these member functions does reduce the number of dynamic_casts, which might ease avoiding MacOS segfaults. Note that this commit does not affect `AdvancedImageToImageMetric::CheckForAdvancedTransform(void)`, which is still being used. | 03 March 2021, 12:56:27 UTC |
0262094 | Niels Dekker | 02 March 2021, 22:42:57 UTC | COMP: Remove duplicated elxOverrideGetSelfMacro from OpenCLResampler Fixed compilation errors like: > Components\Resamplers\OpenCLResampler\elxOpenCLResampler.h(158,1): error C2535: 'const elastix::OpenCLResampler<TElastix> &elastix::OpenCLResampler<TElastix>::GetSelf(void) const': member function already defined or declared > Components\Resamplers\OpenCLResampler\elxOpenCLResampler.h(157): message : see declaration of 'elastix::OpenCLResampler<TElastix>::GetSelf' | 02 March 2021, 22:55:07 UTC |
2cf6df6 | Niels Dekker | 02 March 2021, 13:38:02 UTC | STYLE: Remove unnecessary const_cast<InterpolatorType *> from Metrics | 02 March 2021, 15:54:19 UTC |
1701c73 | Niels Dekker | 02 March 2021, 13:19:31 UTC | STYLE: Remove unnecessary dynamic_cast<ObjectType *> from Creator(void) | 02 March 2021, 15:54:19 UTC |
fe7b2a0 | Niels Dekker | 02 March 2021, 12:27:34 UTC | BUG: Replace dynamic_cast<itk::Object *>(this) by calls to GetSelf() Adds pure virtual `GetSelf(void)` member functions to `BaseComponentSE`, and calls `GetSelf()` instead of `dynamic_cast`, in both `SetElastix` and `SetConfiguration`. Aims to avoid potential `dynamic_cast<itk::Object *>` failures, especially on MacOS. | 02 March 2021, 15:54:19 UTC |
6f5b1c1 | Niels Dekker | 02 March 2021, 10:38:51 UTC | BUG: Replace five dynamic_casts by calls to BaseComponent::AsITKBaseType Aims to further reduce the chance of getting MacOS segfaults. | 02 March 2021, 15:54:19 UTC |
cf968a9 | Niels Dekker | 26 February 2021, 15:52:52 UTC | ENH: Add DisableOutput() to Elastix/TransformixFilter, for thread safety Added a `DisableOutput(void)` member function to both `elx::ElastixFilter` and `elx::TransformixFilter`, which allows skipping an internal `xoutSetup` call, during `GenerateData()`. Effectively suppressed the output that is otherwise produced, when doing `xl::xout["some-stream"] << "some-output"`. Aims to ease multi-threading support, as discussed with Konstantinos Ntatsis. | 01 March 2021, 13:24:24 UTC |
a0a0ba8 | Niels Dekker | 26 February 2021, 15:28:06 UTC | STYLE: Remove set_xout(xoutmain*), let get_xout() create xoutmain object With this commit, `get_xout()` creates the `xoutmain` object itself. Thereby it is ensured that `xout` is always valid (although it may just be default-constructed). Removed `set_xout(xoutmain*)` and `xout_valid()`, as those functions appear no longer necessary. Aims to ease multi-threading support, as discussed with Konstantinos Ntatsis. | 01 March 2021, 13:24:24 UTC |
8309298 | Niels Dekker | 28 February 2021, 08:33:31 UTC | STYLE: Remove xout flush in component base Write Image member functions An explicit flush of `xout["coutonly"]` appears unnecessary here, as `std::endl` is inserted afterwards (which flushes automatically). | 28 February 2021, 10:40:56 UTC |
9b3d9da | Niels Dekker | 28 February 2021, 08:00:43 UTC | STYLE: Simplify code to replace a possible " " with "_", in Write Image Simplified code to replace a possible " " with "_", in the implementation of Write Image member functions of ComponentBaseClasses: - Replaced `std::basic_string<char>` by `std::string` - Removed unnecessary local constant `npos` variables | 28 February 2021, 10:40:56 UTC |
a4c8fbf | Niels Dekker | 27 February 2021, 15:58:39 UTC | STYLE: Remove const_cast<RayCastInterpolatorType *> from ResamplerBase Follows C++ Core Guidelines (August 3, 2020) "ES.50: Don't cast away const", https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#es50-dont-cast-away-const | 28 February 2021, 10:40:56 UTC |
6770c64 | Matt McCormick | 20 November 2019, 23:40:49 UTC | COMP: Define CL_TARGET_OPENCL_VERSION This is required when using the Khronos OpenCL headers: https://github.com/KhronosGroup/OpenCL-Headers Limit to 1.2, because this is the version supported on macOS: https://support.apple.com/en-us/HT202823 Fixes: In file included from /home/matt/src/OpenCL-Headers/CL/cl_platform.h:20, from /home/matt/src/elastix/Common/OpenCL/ITKimprovements/itkOpenCL.h:27, from /home/matt/src/elastix/Common/OpenCL/ITKimprovements/itkOpenCLPlatform.h:21, from /home/matt/src/elastix/Common/OpenCL/ITKimprovements/itkOpenCLDevice.h:21, from /home/matt/src/elastix/Common/OpenCL/ITKimprovements/itkOpenCLProgram.h:21, from /home/matt/src/elastix/Common/OpenCL/ITKimprovements/itkOpenCLProgram.cxx:18: /home/matt/src/OpenCL-Headers/CL/cl_version.h:22:104: note: #pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0) 22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)") | ^ [42/464] Building CXX object Components/Metrics/AdvancedKappaStatistic/CMa...les/AdvancedKappaStatisticMetric.dir/elxAdvancedKappaStatisticMetric.cxx.o^C As well as (Visual Studio 2019 + intel_sdk_for_opencl_applications_2020.3.494): >------ Build started: Project: elxOpenCL, Configuration: Debug x64 ------ >itkOpenCLContext.cxx >cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2) >D:\src\elastix\elxOpenCL\Common\OpenCL\ITKimprovements\itkOpenCLContext.cxx(797,13): warning C4996: 'clCreateCommandQueue': was declared deprecated | 25 February 2021, 11:53:09 UTC |
a5d237b | Matt McCormick | 20 November 2019, 22:30:32 UTC | COMP: Add elxCommon_OpenCL_INCLUDE_DIRECTORIES to elxINCLUDE_DIRECTORIES So these directories are added to ELASTIX_INCLUDE_DIRS in ElastixConfig.cmake when ELASTIX_USE_OPENCL is enabled. | 25 February 2021, 11:53:09 UTC |
6a2b5e3 | Niels Dekker | 24 February 2021, 08:52:22 UTC | STYLE: Make ElastixMain::GetElastixBase() non-virtual, return reference Removed the `virtual` keyword from the declaration of `ElastixMain::GetElastixBase(void)`, as it isn't overridden by any derived class anyway. Following C++ Core Guidelines, August 3, 2020, "C.132: Don't make a function virtual without reason", https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-virtual Changed its return type from pointer to reference type. The original `GetElastixBase(void)` implementation already made sure that the return value was never null, and the `this->GetElastixBase()` calls didn't explicitly check for "not null" anyway. | 24 February 2021, 11:16:44 UTC |
68d1b72 | Niels Dekker | 24 February 2021, 07:44:04 UTC | STYLE: Remove redundant calls to ElastixMain::GetElastixBase(void) Added a local `elastixBase` variable to both `ElastixMain::Run(void)` and `TransformixMain::Run(void)`. Cleans up the code, and eases debugging (by avoiding to step into `GetElastixBase(void)` multiple times, when debugging `Run(void)`). | 24 February 2021, 11:16:44 UTC |
be0abdc | Niels Dekker | 18 February 2021, 10:45:41 UTC | STYLE: Remove GetAsCombinationTransform(void) member functions The `GetAsCombinationTransform(void)` member functions became redundant as `TransformBase::GetAsITKBaseType(void)` now returns an `AdvancedCombinationTransform` pointer. | 22 February 2021, 14:08:36 UTC |
6b57f61 | Niels Dekker | 17 February 2021, 23:25:17 UTC | STYLE: Replace GetAsCombinationTransform() calls by GetAsITKBaseType() Made the definition of `TransformBase::ITKBaseType` more specific (`AdvancedCombinationTransform` instead of `AdvancedTransform`), allowing `TransformBase::GetAsITKBaseType()` to be called anywhere, instead of `GetAsCombinationTransform()`. | 22 February 2021, 14:08:36 UTC |
abd1c5c | Niels Dekker | 17 February 2021, 23:08:28 UTC | ENH: Make GetAsITKBaseType(void) non-virtual, calling this->GetSelf() Declared the `GetAsITKBaseType(void)` member functions of the component base classes non-virtual, and implemented them by calling `this->GetSelf()`. Removing 18 `dynamic_cast`s, in order to avoid MacOS segfaults like the ones mentioned by Matt McCormick, issue https://github.com/SuperElastix/elastix/issues/411, "elastix::TransformBase itk::Object casting". | 22 February 2021, 14:08:36 UTC |
6d67228 | Niels Dekker | 17 February 2021, 22:17:56 UTC | ENH: Use elxDeclarePureVirtualGetSelfMacro and elxOverrideGetSelfMacro Called `elxDeclarePureVirtualGetSelfMacro(ITKBaseType)` in the private section of the 10 component base classes, defined in elastix/Core/ComponentBaseClasses. Called `elxOverrideGetSelfMacro` in the private section of the 90 derived component classes, defined in elastix/Components. | 22 February 2021, 14:08:36 UTC |
288a367 | Niels Dekker | 17 February 2021, 22:17:05 UTC | ENH: Define elxDeclarePureVirtualGetSelfMacro + elxOverrideGetSelfMacro `elxDeclarePureVirtualGetSelfMacro(ITKBaseType)` is to be called in the elastix component base classes, and `elxOverrideGetSelfMacro` is to be called in its concrete (derived) component classes. | 22 February 2021, 14:08:36 UTC |
b65034e | Viktor van der Valk | 17 February 2021, 10:05:12 UTC | CI: Build docker image and push to dockerhub (#415) | 17 February 2021, 10:05:12 UTC |
ab2e2e9 | Niels Dekker | 16 February 2021, 16:47:07 UTC | ENH: Move FillImageRegion to elxCoreMainGTestUtilities.h Aims to support both ITK 5.1 and ITK 5.2, by allowing `ImageRegionRange` to be either in `namespace itk` or in `namespace itk::Experimental`. | 17 February 2021, 07:55:01 UTC |
7677baf | Viktor van der Valk | 16 February 2021, 11:56:20 UTC | ENH: Add 4D float support (#418) | 16 February 2021, 11:56:20 UTC |
e0b7281 | Niels Dekker | 13 February 2021, 11:04:54 UTC | COMP: Fix GetJacobianOfSpatialHessian warnings on jsh_tmp buffer overrun Solved fifteen Visual C++ warnings from `RecursiveBSplineTransformImplementation::GetJacobianOfSpatialHessian`, which said: > warning C4789: buffer 'jsh_tmp' of size 32 bytes will be overrun; 8 bytes will be written starting at offset 64 Note that the buffer overrun would not occur in practice, as the size of `jsh_tmp` depends on `OutputDimension`, which was checked at runtime. But the compiler still issued those warnings. Which are fixed by this commit. | 16 February 2021, 10:25:39 UTC |
6fcd903 | Niels Dekker | 15 February 2021, 22:24:26 UTC | BUG: Replace dynamic_cast's TransformBase by GetAsCombinationTransform() Replaced 11 `dynamic_cast`'s from the implementation of `elx::TransformBase` by calls to `this->GetAsCombinationTransform()`, which is now pure `virtual`. Did override `TransformBase::GetAsCombinationTransform()` in all of its 17 derived transform classes. Aims to fix MacOS segfaults, mentioned by Matt McCormick, issue https://github.com/SuperElastix/elastix/issues/411, "elastix::TransformBase itk::Object casting". | 16 February 2021, 10:24:33 UTC |
f5b0e2a | Niels Dekker | 15 February 2021, 22:46:39 UTC | COMP: Fix OpenCLResampler ParameterMapType build error Addressed issue https://github.com/SuperElastix/elastix/issues/414 "OpenCLResampler build error: 'ParameterMapType does not name a type'", reported by 1989HD. | 16 February 2021, 08:09:03 UTC |
b74f6a2 | Niels Dekker | 13 February 2021, 08:04:07 UTC | STYLE: Pass parameter map "by reference" to CreateTransformParametersMap Replaced `ParameterMapType *` by `ParameterMapType &` as parameter type, to express that `CreateTransformParametersMap` does not support `nullptr` as argument. Follows C++ Core Guidelines section "Parameter passing expression rules" from https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-functions (August 3, 2020) | 13 February 2021, 10:47:46 UTC |
df2a3ce | ViktorvdValk | 26 November 2020, 13:43:16 UTC | COMP: Fix template export macro in classes | 12 February 2021, 17:56:44 UTC |
9d971ef | Niels Dekker | 09 February 2021, 10:51:12 UTC | STYLE: Remove xout["WriteHeaders"] logic, simply call WriteHeaders() Dropped "WriteHeaders" as special case for `xout[name]`. Replaced "WriteHeaders" by a direct call to `xoutrow::WriteHeaders()`. Aims to just simplify the code. | 09 February 2021, 13:34:10 UTC |
ef55738 | Niels Dekker | 08 February 2021, 22:51:02 UTC | ENH: No longer add "iteration" as target to xl::xout Eases multi-threading support. | 09 February 2021, 10:12:50 UTC |
003070d | Niels Dekker | 08 February 2021, 21:39:47 UTC | STYLE: Do access IterationInfo via BaseComponentSE and ElastixBase Instead of doing the access via `xl::xout["iteration"]` (which uses a global data structure). | 09 February 2021, 10:12:50 UTC |
e20adb7 | Niels Dekker | 08 February 2021, 15:00:37 UTC | ENH: Ease access to IterationInfo from BaseComponentSE and ElastixBase Added six member functions: - ElastixBase::GetIterationInfo() - ElastixBase::GetIterationInfoAt(name) - ElastixBase::AddTargetCellToIterationInfo(name) - BaseComponentSE::RemoveTargetCellFromIterationInfo(name) - BaseComponentSE::GetIterationInfoAt(name) - BaseComponentSE::AddTargetCellToIterationInfo(name) | 09 February 2021, 10:12:50 UTC |
b67df96 | Niels Dekker | 08 February 2021, 09:02:24 UTC | STYLE: Pass by const-ref (Clang performance-unnecessary-value-param) Passed parameters that are expensive to copy by `const` reference, instead of "by value". Fixed using Clang-Tidy (LLVM 11.0) `performance-unnecessary-value-param`: https://clang.llvm.org/extra/clang-tidy/checks/performance-unnecessary-value-param.html | 08 February 2021, 12:59:34 UTC |
043e04c | Niels Dekker | 08 February 2021, 08:47:53 UTC | COMP: Fix template template parameters, by `template <typename> class` According to https://en.cppreference.com/w/cpp/language/template_parameters > Unlike type template parameter declaration, template template parameter declaration can only use the keyword class and not typename. (until C++17) Issue found by Clang-Tidy (LLVM 11.0.0) | 08 February 2021, 12:59:34 UTC |
ee6fd5a | Niels Dekker | 07 February 2021, 16:22:14 UTC | ENH: No longer add transformationParameterInfo to global `xout` object Passed the `transformationParameterInfo` directly as parameter to the `WriteToFile` member functions of Transform, Resampler, and ResampleInterpolator, instead of via `xout["transpar"]`. This commit aims to ease implementing multi-threading support. | 08 February 2021, 09:04:58 UTC |
020b184 | Niels Dekker | 07 February 2021, 13:58:46 UTC | STYLE: Add TransformBase::WriteDerivedTransformDataToFile() + overrides Made `TransformBase::WriteToFile(const ParametersType &)` non-virtual, and let it call `WriteDerivedTransformDataToFile()`. Replaced the two existing `WriteToFile` overrides by `WriteDerivedTransformDataToFile` overrides. Will make it easier to add an extra parameter to `TransformBase::WriteToFile`. | 08 February 2021, 09:04:58 UTC |
271c983 | Niels Dekker | 07 February 2021, 12:51:31 UTC | STYLE: Remove unused `TransformBase<TElastix>::WriteToFile()` overload It appears that `TransformBase::WriteToFile(void)` is not being used anywhere (whereas the other overload, `TransformBase::WriteToFile(const ParametersType &)`, is called by `ElastixTemplate::CreateTransformParameterFile`). While preparing to add an extra parameter to the other overload, it appears easiest to simply remove this one. | 08 February 2021, 09:04:58 UTC |
3700590 | Niels Dekker | 04 February 2021, 22:06:37 UTC | BUG: Use OutputPixelType for ReadParameter call to get DefaultPixelValue Removed unchecked (unsafe) cast from `double` to `OutputPixelType`, in `ResamplerBase::BeforeRegistrationBase`. | 05 February 2021, 11:04:03 UTC |
1d9f7a1 | Niels Dekker | 04 February 2021, 21:55:48 UTC | STYLE: Use "0" instead of "0.0" as DefaultParameterMap DefaultPixelValue The pixel type may not be a floating point. ("0" is also correctly supported for both floating point and integer types.) | 05 February 2021, 11:04:03 UTC |
3b5df81 | Niels Dekker | 04 February 2021, 20:55:04 UTC | BUG: Restore (signed/unsigned) char support of ReadParameter<T> Support for (signed/unsigned) char pixel types was removed by commit ea7a1f78a15d8a5a8cf73022e4dd5c145dba2729 "STYLE: Avoid conversions between (signed/unsigned) char and string" (2 February 2021) This commit restores support for those pixel types, as it still appears useful for the `DefaultPixelValue` parameter. It is now implemented by a new `StringCastToCharType<TChar>` member function, which is more "type safe" than the original (elastix 5.0.1) approach (as it does not have the original cast in `StringCast<T>` anymore). | 05 February 2021, 11:04:03 UTC |
17cf3f3 | Niels Dekker | 04 February 2021, 16:55:52 UTC | BUG: Restore (signed/unsigned) char support for pixel types When CMake variable `ELASTIX_IMAGE_2D_PIXELTYPES` of `ELASTIX_IMAGE_3D_PIXELTYPES` would have (signed/unsigned) char types, a `static_assert` would fail inside `Conversion::ToString`, saying: > elastix\Core\Install\elxConversion.h(102,36): error C2338: ToString does not support (signed/unsigned) char! > elastix\Core\ComponentBaseClasses\elxResamplerBase.hxx(715): message : see reference to function template instantiation 'std::string elastix::Conversion::ToString<char>(const TInteger)' being compiled When trying to compile `Conversion::ToString(this->GetAsITKBaseType()->GetDefaultPixelValue())`. Fixed by this commit, which removes the `static_assert` and extends the `Conversion.ToString` GTest unit test, to also test char types. | 05 February 2021, 11:04:03 UTC |
a06e232 | Niels Dekker | 03 February 2021, 21:54:51 UTC | BUG: ParameterMapInterface::StringCast workaround Clang denormal bug Implemented a workaround to ensure that ParameterMapInterface::ReadParameter may properly retrieve denormal floating point values, even while having that Clang denormal bug: LLVM Bug 39012, "ostream writes a double that istream can't read", reported by Daniel Cooke, 2018-09-20. https://bugs.llvm.org/show_bug.cgi?id=39012 | 05 February 2021, 11:04:03 UTC |
cba9d81 | Niels Dekker | 03 February 2021, 21:29:20 UTC | STYLE: Declare parameterValue parameters as (const) reference Some `parameterValue` function parameters were accidentally declared as "by value", instead of "by (const) reference". Fixed by running Clang-Tidy (LLVM 11.0) `performance-unnecessary-value-param`: https://clang.llvm.org/extra/clang-tidy/checks/performance-unnecessary-value-param.html | 05 February 2021, 11:04:03 UTC |
b96cbab | Niels Dekker | 03 February 2021, 15:58:50 UTC | BUG: Work around Clang denorm_min Conversion round trip test failure Skipped the denorm_min round trip tests for Clang, as they appear to trigger an exception from `ParameterMapInterface::ReadParameter`. The exception appears to be caused (indirectly) by LLVM Bug 39012, "ostream writes a double that istream can't read", reported by Daniel Cooke, 2018-09-20. https://bugs.llvm.org/show_bug.cgi?id=39012 | 03 February 2021, 18:57:33 UTC |
1f1d33d | Niels Dekker | 03 February 2021, 13:34:55 UTC | ENH: Support "Infinity", "-Infinity", and "NaN" values in parameter map | 03 February 2021, 18:57:33 UTC |
954d4c9 | Niels Dekker | 03 February 2021, 12:02:20 UTC | ENH: Add Conversion.LosslessRoundTripOfParameterValue GTest unit test | 03 February 2021, 18:57:33 UTC |
08fc58c | Niels Dekker | 02 February 2021, 21:21:56 UTC | STYLE: ParameterMapInterface con/destructor default, StringCast static Small style improvements of `ParameterMapInterface`implementation: - Declared the private `StringCast` member function `static` - Defined default-constructor and destructor "default" (C++11) - Initialized `m_PrintErrorMessages` inside the class definition (C++11) | 03 February 2021, 18:57:33 UTC |
ea7a1f7 | Niels Dekker | 02 February 2021, 17:21:09 UTC | STYLE: Avoid conversions between (signed/unsigned) char and string So far, it appears unnecessary to support 8-bits (signed or unsigned) `char` as type of a parameter values. Moreover, conversion between `char` and `std::string` appears rather tricky, as it may not always be obvious whether to use the character value or the integer value represented by the bits of a `char`. Simplified `ParameterMapInterface::StringCast` by removing the `char` specific `NumericTraits<T>::AccumulateType` workaround. | 03 February 2021, 18:57:33 UTC |
f5ebf6e | Dženan Zukić | 28 December 2020, 15:28:01 UTC | ENH: use IO meta-packages | 01 February 2021, 21:08:36 UTC |
0890e5a | Viktor van der Valk | 21 December 2020, 14:42:07 UTC | ENH: Complete required ITK components in CMakeLists.txt | 01 February 2021, 21:08:36 UTC |
a3f1e88 | Dženan Zukić | 18 November 2020, 18:02:33 UTC | ENH: specify required ITK components explicitly This avoids circular dependency when building ITKElastix as part of ITK | 01 February 2021, 21:08:36 UTC |
71e52b4 | Niels Dekker | 31 January 2021, 12:00:25 UTC | ENH: Add DeformationFieldFileName from two transforms to ParameterMap Adds "DeformationFieldFileName" to the parameter maps of both `DeformationFieldTransform` and `BSplineTransformWithDiffusion`. Reduced code duplication by adding a helper function, `TransformIO::MakeDeformationFieldFileName`. Adjusted GTest `CreateTransformParametersMap` unit tests by expecting the added parameter for those two transform types. | 31 January 2021, 17:26:06 UTC |
0318c61 | Niels Dekker | 28 January 2021, 21:51:03 UTC | STYLE: Remove floating point output format flags from xout["transpar"] Floating point values are no longer directly inserted into `xout["transpar"]`. Instead, conversion from float to string is now performed via `itk::NumberToString`. | 31 January 2021, 08:23:09 UTC |
ebaad19 | Niels Dekker | 27 January 2021, 15:33:31 UTC | ENH: Sync Resamplers, ResampleInterpolators WriteToFile w/ ParameterMap Follow-up to "Sync Transform WriteToFile with CreateTransformParametersMap" pull request https://github.com/SuperElastix/elastix/pull/385 commit af382ee4b598ac79fcbb7724bfad7bbcfe492fd6 Making use of the new `ParameterMapToString` function from pull request https://github.com/SuperElastix/elastix/pull/394 commit 1a317327ad1d5e890ad607db4fabe445aee7a313 Adjusted Resamplers and ResampleInterpolators CreateTransformParametersMap unit tests accordingly. | 31 January 2021, 08:23:09 UTC |
7745c27 | Niels Dekker | 29 January 2021, 15:28:20 UTC | ENH: Test Resampler, ResampleInterpolator CreateTransformParametersMap Added two GoogleTest unit tests: - Resampler.CreateTransformParametersMapForDefaultResampler - ResampleInterpolator.CreateTransformParametersMapForDefaultInterpolator Moved common code of Resampler, ResampleInterpolator, and Transform unit tests to "elxGTestUtilities.h" | 30 January 2021, 20:36:24 UTC |
8f2f71c | Niels Dekker | 29 January 2021, 22:47:38 UTC | COMP: Add `xl::` to `xout` macro call by OpenCLResampler::WriteToFile() This `xl::` was accidentally removed on 26 January 2021, by: "STYLE: Move static BaseComponent member functions to Conversion class" Pull request https://github.com/SuperElastix/elastix/pull/399 Commit 306d15616b5d9b58c4c3821fa50674471944e4f6 | 30 January 2021, 20:36:24 UTC |
d0af976 | Niels Dekker | 28 January 2021, 15:39:36 UTC | STYLE: Remove template arguments charT, traits from xout classes It does not appear necessary to support template arguments (charT and traits) for the xout classes, as elastix always only uses 8-bits `char` as character type of output streams. Removing those template arguments significantly reduces compilation time (especially when adjusting the implementation of xout) and code complexity. Discussed at our internal SuperElastix/elastix slack channel. | 28 January 2021, 21:12:21 UTC |
306d156 | Niels Dekker | 26 January 2021, 15:21:31 UTC | STYLE: Move static BaseComponent member functions to Conversion class | 27 January 2021, 15:09:28 UTC |
5aa42e0 | Niels Dekker | 26 January 2021, 08:38:23 UTC | STYLE: Remove `using namespace xl` (which is no longer necessary) Entities from the xout library are (or should be) referred to with `xl::` prefix anyway. Did some code fixes, just to keep it compiling. | 26 January 2021, 10:10:18 UTC |
3fa9f04 | Niels Dekker | 26 January 2021, 08:44:01 UTC | STYLE: Consistently use the `xl` alias for the `xoutlibrary` namespace | 26 January 2021, 10:10:18 UTC |
3dd658b | Niels Dekker | 26 January 2021, 06:58:07 UTC | STYLE: For consistency, add `xl::` to all `xout` macro calls Before this commit, the majority of those macro calls already had `xl::` specified: " xout[" was encountered 241 times. " xl::xout[" was encountered 378 times. | 26 January 2021, 10:10:18 UTC |
8270aac | Niels Dekker | 25 January 2021, 20:53:23 UTC | STYLE: Remove `using namespace std` from global scope, in a header file Following "C++ Core Guidelines", August 3, 2020 "Don't write `using namespace` at global scope in a header file" https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rs-using-directive | 26 January 2021, 10:10:18 UTC |
aa32e1f | Niels Dekker | 24 January 2021, 21:44:13 UTC | STYLE: Make xoutbase abstract and add xoutmain type for xout singleton Made `xoutbase<char>` an abstract base class (as was already documented), by declaring its destructor pure (`= 0`) virtual, and its default-constructor `protected`. Derived an `xoutmain` class as the new type of the xout singleton. Aims to clarify the design of the xout library, by distinguishing clearly between base and leaf classes. See also Scott Meyers's book "More Effective C++", Item 33: "Make non-leaf classes abstract". | 26 January 2021, 06:00:01 UTC |
e2ec816 | Niels Dekker | 24 January 2021, 11:03:07 UTC | STYLE: No longer disable old MSVC "truncated name" warnings C4786, C4503 The Microsoft documentation page "Compiler Warning (level 1) C4503" (05/14/2018) at https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4503?view=msvc-160 says: > 'identifier' : decorated name length exceeded, name was truncated ... > This compiler warning is obsolete and is not generated in Visual Studio 2017 and later compilers. Warning C4786 is now listed with "Compiler warnings that are off by default" (05/14/2018) at https://docs.microsoft.com/en-us/cpp/preprocessor/compiler-warnings-that-are-off-by-default?view=msvc-160 > C4786 (level 3) 'symbol' : object name was truncated to 'number' characters in the debug information | 24 January 2021, 12:15:44 UTC |
efbf563 | Niels Dekker | 24 January 2021, 10:10:27 UTC | STYLE: Make xoutbase::SendToTargets `private` (instead of `protected`) | 24 January 2021, 12:15:44 UTC |
b1334de | Niels Dekker | 24 January 2021, 09:41:59 UTC | STYLE: xoutcell should not flush its m_InternalBuffer There is no need to flush `xoutcell::m_InternalBuffer`, which is an `std::ostringstream`. As explained by Cubbi (Sergey Zubkov), http://www.cplusplus.com/forum/general/84962 November 15, 2012: > flushing has no meaning for stringstream, as there is no external device that it sends data to Also removed an unnecessary `using namespace` directive and an unnecessary `std::string::c_str()` call. | 24 January 2021, 12:15:44 UTC |
f8e2e57 | Niels Dekker | 24 January 2021, 09:18:38 UTC | STYLE: xoutbase::SelectXCell(name) should only search for the cell once Replaced two searches for a key in the map (`map.count(key)` and `map[key]`) by one: `map.find(key)`. Might slightly improve the performance. | 24 January 2021, 12:15:44 UTC |
1a31732 | Niels Dekker | 22 January 2021, 23:51:32 UTC | ENH: Add BaseComponent::ParameterMapToString(map) + unit test Aims to improve performance and thread-safety of `TransformBase::WriteToFile`. Intended to be reused by `WriteToFile` member functions of other classes from "Core/ComponentBaseClasses". | 23 January 2021, 09:51:27 UTC |
37cab8f | Niels Dekker | 21 January 2021, 15:03:29 UTC | ENH: Add ElastixMain.GetComponentDatabaseAndCreatorInParallel unit test | 21 January 2021, 16:44:49 UTC |
e5b3658 | Niels Dekker | 10 January 2021, 22:52:15 UTC | ENH: Make ElastixMain database creation + loading components thread safe Ensures that only one thread may load the components into the ComponentDatabase, using using C++11 "magic statics". `ElastixMain::GetComponentDatabase()` now returns a "const reference" instead of a non-const pointer, to prevent one thread from modifying the database while another is reading from the database. Aims to fix issue https://github.com/SuperElastix/elastix/issues/174 "elastix 4.9 static libary version not thread safe" reported by jiangliMED, August 16, 2019 With help from Konstantinos Ntatsis | 21 January 2021, 16:44:49 UTC |
97d1718 | Niels Dekker | 13 January 2021, 08:54:57 UTC | STYLE: Remove UnloadComponents() from ElastixMain and ComponentLoader Removed the two `UnloadComponents()` member functions (from both `ElastixMain` and `ComponentLoader`), as they appear not useful anymore. Paves the way to making access to the ComponentDatabase thread-safe. | 21 January 2021, 16:44:49 UTC |
af382ee | Niels Dekker | 07 January 2021, 16:08:31 UTC | ENH: Sync Transform WriteToFile with CreateTransformParametersMap Adjusted `TransformBase::WriteToFile` by using the parameter map created by `CreateTransformParametersMap`. Removed 14 out of 16 `WriteToFile` overrides. Ensured that the transform parameter txt file is kept in sync with the corresponding the parameter map. Thereby also adjusted the floating point format for values written to file, as discussed at issue #383, "Reconsider string representation of floating points for parameter files and parameter maps", https://github.com/SuperElastix/elastix/issues/383 Addresses issue #217 'the "Origin" precision in TransformParameters is not high enough', reported by GouZi2019, January 5, 2020: https://github.com/SuperElastix/elastix/issues/217 | 14 January 2021, 22:04:26 UTC |
e8a1751 | Niels Dekker | 07 January 2021, 12:04:57 UTC | ENH: Add IsNumber(const std::string &) to BaseComponent Added a utility function, which is intended to estimate whether a transform parameter value should be "double quoted", when elastix `Transform::WriteToFile` writes such a value to a TransformParameters .txt file. (A numeric parameter value should not be double quoted.) | 14 January 2021, 22:04:26 UTC |