dc9298f | Niels Dekker | 17 February 2021, 17:08:22 UTC | BUG: Remove dynamic_casts from elx::MetricBase::GetAsITKBaseType() Added `MetricBase::GetAsSingleValuedCostFunction(void)` as pure virtual member function, replacing the `dynamic_cast`s within `elx::MetricBase::GetAsITKBaseType(void)`. Aims to avoid MacOS segfaults like the ones mentioned by Matt McCormick, issue https://github.com/SuperElastix/elastix/issues/411, "elastix::TransformBase itk::Object casting". Follow-up to pull request https://github.com/SuperElastix/elastix/pull/420 commit 6fcd90348664c4a477a73552194592de014c02a5 "BUG: Replace dynamic_cast's TransformBase by GetAsCombinationTransform()" | 17 February 2021, 17:08:22 UTC |
e1e75ff | Niels Dekker | 17 February 2021, 14:46:14 UTC | BUG: Remove dynamic_casts from elx::InterpolatorBase::GetAsITKBaseType() Added `InterpolatorBase::GetAsInterpolateImageFunction(void)` as pure virtual member function, replacing the `dynamic_cast`s within `elx::InterpolatorBase::GetAsITKBaseType(void)`. Aims to avoid MacOS segfaults like the ones mentioned by Matt McCormick, issue https://github.com/SuperElastix/elastix/issues/411, "elastix::TransformBase itk::Object casting". Follow-up to pull request https://github.com/SuperElastix/elastix/pull/420 commit 6fcd90348664c4a477a73552194592de014c02a5 "BUG: Replace dynamic_cast's TransformBase by GetAsCombinationTransform()" | 17 February 2021, 14:46:14 UTC |
c92b4f2 | Niels Dekker | 17 February 2021, 14:21:48 UTC | BUG: Remove dynamic_casts from ImageSamplerBase::GetAsITKBaseType() Added `ImageSamplerBase::GetAsITKImageSamplerBase(void)` as pure virtual member function, replacing the `dynamic_cast`s within `ImageSamplerBase::GetAsITKBaseType(void)`. Aims to avoid MacOS segfaults like the ones mentioned by Matt McCormick, issue https://github.com/SuperElastix/elastix/issues/411, "elastix::TransformBase itk::Object casting". Follow-up to pull request https://github.com/SuperElastix/elastix/pull/420 commit 6fcd90348664c4a477a73552194592de014c02a5 "BUG: Replace dynamic_cast's TransformBase by GetAsCombinationTransform()" | 17 February 2021, 14:25:39 UTC |
d1cea01 | Niels Dekker | 17 February 2021, 10:47:45 UTC | BUG: Remove dynamic_casts from FixedImagePyramidBase::GetAsITKBaseType() Added `FixedImagePyramidBase::GetAsMultiResolutionPyramidImageFilter(void)` as pure virtual member function, replacing the `dynamic_cast`s within `FixedImagePyramidBase::GetAsITKBaseType(void)`. Aims to avoid MacOS segfaults like the ones mentioned by Matt McCormick, issue https://github.com/SuperElastix/elastix/issues/411, "elastix::TransformBase itk::Object casting". Follow-up to pull request https://github.com/SuperElastix/elastix/pull/420 commit 6fcd90348664c4a477a73552194592de014c02a5 "BUG: Replace dynamic_cast's TransformBase by GetAsCombinationTransform()" | 17 February 2021, 11:27:57 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 |
e1f5dae | Niels Dekker | 06 January 2021, 12:07:45 UTC | ENH: Implemented ToString(double) by itk::NumberToString (issue #383) Synchronized the string representation of double floating point values of transform parameter maps (produced by elastix `CreateTransformParametersMap`) with ITK's .tfm file format (as written by `itk::TransformFileWriter`). Increased the floating point precision from 6 to 16. ITK's `itk::NumberToString` uses a lossless floating point conversion from the Google double-conversion library, https://github.com/google/double-conversion Part of issue #383 "Reconsider string representation of floating points for parameter files and parameter maps" | 14 January 2021, 22:04:26 UTC |
57dcf37 | Niels Dekker | 14 January 2021, 15:49:49 UTC | ENH: Add MultiBSplineTransformWithNormalLabels to parameter map Added "MultiBSplineTransformWithNormalLabels" to the transform parameter map of `MultiBSplineTransformWithNormal`, addressing a "TODO" comment. Anticipating pull request https://github.com/SuperElastix/elastix/pull/385 "Sync Transform WriteToFile with CreateTransformParametersMap". Also improved the `Test_CreateTransformParametersMap_for_default_transform()` unit test function for `MultiBSplineTransformWithNormal`. Note that this change is not yet completely unit tested, because `MultiBSplineTransformWithNormal::BeforeAll()` throws an exception, saying "ERROR: Missing -labels argument!". | 14 January 2021, 16:47:52 UTC |
31af828 | ViktorvdV | 13 January 2021, 17:08:52 UTC | CI:ClangFormat_output | 14 January 2021, 09:54:54 UTC |
9b37f88 | ViktorvdV | 13 January 2021, 15:16:20 UTC | STYLE:Add_Git_pre_commit_hook | 14 January 2021, 09:54:54 UTC |
ae9c0fd | Niels Dekker | 13 January 2021, 18:20:04 UTC | ENH: Add SubTransforms to WeightedCombinationTransform parameter map Anticipating pull request https://github.com/SuperElastix/elastix/pull/385 "Sync Transform WriteToFile with CreateTransformParametersMap". | 13 January 2021, 19:36:07 UTC |
e2d2970 | Niels Dekker | 13 January 2021, 16:58:04 UTC | ENH: DeformationFieldFileName when "TransformParameters." is not found When the current transform parameter filename would not have "TransformParameters." as a substring, the creation of the "lastpart" of a `DeformationFieldFileName` would go wrong (typically causing an `std::out_of_range` exception). However, it still appears useful to make a `DeformationFieldFileName` in that case. Especially when trying to write a default-constructed transform, for test purposes. This commit makes the "lastpart" empty, in that case. Discussed with Marius at the weekly internal elastix sprint. | 13 January 2021, 18:04:37 UTC |
91204bc | Niels Dekker | 12 January 2021, 16:06:38 UTC | STYLE: Rerun clang-format after pull request #363 Reran: find . -regex '.*\.\(hxx\|h\|cxx\)' -exec '/c/Program Files/LLVM/8.0.1-ITK/clang-format.exe' -style=file -i {} \; After merge of pull request #363 from ntatsisk/automaticScalesEstimationStackTransform, commit b6467ba7d6648d343582d57d55b8eec317ebea75 by Stefan Klein, 11 January 2021. | 13 January 2021, 08:22:40 UTC |
b6467ba | Stefan Klein | 11 January 2021, 11:14:17 UTC | Merge pull request #363 from ntatsisk/automaticScalesEstimationStackTransform ENH: Fix Interface discrepancy with parameter AutomaticScalesEstimationStackTransform (issue #260) | 11 January 2021, 11:14:17 UTC |
8582478 | Niels Dekker | 09 January 2021, 14:41:31 UTC | STYLE: Clean up code TransformBase ReadInitialTransform implementation Used `nullptr` when checking or initializing a pointer. Removed some unnecessary local variable. Declared other local variables `const`, according to Scott Meyers, Effective C++, "Use const whenever possible". Followed the Clang-Tidy recommendation to use `auto`, "when a variable is declared and initialized with a cast": https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-auto.html | 10 January 2021, 09:54:39 UTC |
fa6397b | Niels Dekker | 09 January 2021, 11:10:56 UTC | STYLE: Share code between TransformBase::ReadInitialTransform functions Shared duplicate code between `TransformBase<TElastix>` member functions `ReadInitialTransformFromVector` and `ReadInitialTransformFromFile`, by introducing a private helper member function, `ReadInitialTransformFromConfiguration`. | 10 January 2021, 09:54:39 UTC |
b60640f | Niels Dekker | 05 January 2021, 17:34:35 UTC | BUG: Add missing parameters to transform parameter maps of 11 transforms Added `CreateDerivedTransformParametersMap` overrides, which add missing parameters to: - AffineDTITransformElastix - AffineLogStackTransform - AffineLogTransformElastix - BSplineTransformWithDiffusion - DeformationFieldTransform - EulerStackTransform - MultiBSplineTransformWithNormal - SimilarityTransformElastix - SplineKernelTransform - TranslationStackTransform - WeightedCombinationTransformElastix Addresses the following issues: ITKElastix issue 93: "2D similarity transform parameter map doesn't keep "CenterOfRotationPoint" parameter", by Heath Patterson, 16 December, 2020. https://github.com/InsightSoftwareConsortium/ITKElastix/issues/93 SuperElastix/elastix issue 366: "AffineDTITransform does not return the CenterOfRotationPoint", by dyliu2016, 27 November, 2020 https://github.com/SuperElastix/elastix/issues/366 Declared `TransformBase::CreateDerivedTransformParametersMap()` pure virtual (`= 0`). Added an empty override to `TranslationTransformElastix`, just to keep allowing the transform to be instantiated. Extended `CreateTransformParametersMapForDefaultTransform` GoogleTest unit test. Note: Some of the overrides may still be incomplete, as indicated by comments, saying "TODO If necessary, add possibly missing parameters". | 05 January 2021, 19:35:09 UTC |
752938c | Niels Dekker | 22 December 2020, 20:42:37 UTC | ENH: Add ConcatenateVectors(vector1, vector2) function to BaseComponent | 05 January 2021, 19:35:09 UTC |
0caf5c2 | Niels Dekker | 05 January 2021, 14:45:24 UTC | STYLE: Make CreateTransformParametersMap non-virtual (small redesign) Made `TransformBase::CreateTransformParametersMap` non-virtual. Added transform type specific parameters by overriding the added virtual `CreateDerivedTransformParametersMap` member function, which is called by `CreateTransformParametersMap`. Reduced the amount of code duplication, by using the new `BaseComponent::ToVectorOfStrings` and `BaseComponent::ToVectorOfStrings` convenience functions. Replaced `std::map::insert` calls by `std::map::operator[]` and C++11 list initialization (using curly braces). | 05 January 2021, 19:35:09 UTC |
0350515 | Niels Dekker | 22 December 2020, 13:23:04 UTC | ENH: BaseComponent GetNumberOfElements, ToString, and ToVectorOfStrings Added three overload sets of static member functions to `BaseComponent`: size_t GetNumberOfElements(container) string ToString(value) vector<string> ToVectorOfStrings(container) Including four GoogleTest unit tests. | 05 January 2021, 19:35:09 UTC |
5811583 | ViktorvdV | 29 December 2020, 14:25:09 UTC | 'CI:Logs_ctest_to_cdash' | 05 January 2021, 16:24:05 UTC |
e8c161b | Niels Dekker | 04 January 2021, 18:13:55 UTC | BUG: Transform UseAddition should affect CreateTransformParametersMap After calling `elxTransform.SetUseAddition(true)`, a call to `CreateTransformParametersMap` should yield a map with parameterMap["HowToCombineTransforms"] returning "Add", and not "Compose". Just like `TransformBase::WriteToFile` writes "(HowToCombineTransforms Add)", in that case. This commit aims to fix this bug, and includes a GoogleTest unit test. Discussed with Marius at our internal weekly elastix sprint. | 05 January 2021, 09:40:00 UTC |
bff2250 | Niels Dekker | 29 December 2020, 13:15:31 UTC | ENH: Add two CreateTransformParametersMap GoogleTest unit tests Checks the content of parameter map of a "default" transform object. Checks the floating point precision of the string representation of a `double` value. The precision is currently 6 digits. | 30 December 2020, 15:22:36 UTC |
98aaaf7 | Viktor van der Valk | 22 December 2020, 13:59:37 UTC | ENH: Use ITK v5.1.2. | 22 December 2020, 13:59:37 UTC |
3acd58e | Niels Dekker | 20 December 2020, 11:24:46 UTC | STYLE: Remove MetricWithFeatures member m_FeatureInterpolatorsAreBSpline `ImageToImageMetricWithFeatures::m_FeatureInterpolatorsAreBSpline` was unused, and it was not useful as it was always only set to `true` (not to `false`). | 21 December 2020, 14:07:16 UTC |
8dee7b8 | Niels Dekker | 20 December 2020, 10:02:22 UTC | STYLE: Remove bitwise AND assignment `b &= true` (which have no effect) For a `bool` variable `b`, the statement `b &= true` has no effect at all. | 21 December 2020, 14:07:16 UTC |
b21d0c4 | Niels Dekker | 20 December 2020, 09:52:52 UTC | STYLE: Replace bitwise AND assignment `b &= false` by copy-assignment For a `bool` variable `b`, the following two statements are equivalent: b &= false; b = false; Replaced the first form by the second, which appears easier to read. | 21 December 2020, 14:07:16 UTC |
7cf45f1 | Niels Dekker | 20 December 2020, 22:37:26 UTC | STYLE: Fix clang-format errors #358 (TransformOutputFileNameExtensions) Did rerun clang-format as follows: find . -regex '.*\.\(hxx\|h\|cxx\)' -exec /c/Users/Niels_Dekker/AppData/Roaming/ClangPowerTools/LLVM/LLVM8.0.1/bin/clang-format.exe -style=file -i {} \; Formatting errors were introduced by merging pull request #358 ("ENH: Add parameter file support for TransformOutputFileNameExtensions") | 20 December 2020, 22:39:59 UTC |
b8cf9dd | Niels Dekker | 22 November 2020, 17:16:08 UTC | ENH: Add parameter file support for TransformOutputFileNameExtensions Allows specifying output file types for transform files by their file name extension, for example: (TransformOutputFileNameExtensions ".h5" ".mat" ".tfm") Experimental feature, under construction. | 20 December 2020, 22:09:40 UTC |
8d08cfa | Niels Dekker | 22 November 2020, 16:51:51 UTC | ENH: Configuration GetValuesOfParameter, ParameterMapInterface GetValues Added `Configuration::GetValuesOfParameter(parameterName)` and `ParameterMapInterface::GetValues(parameterName)`. Both return a vector of the values of the specified parameter. | 20 December 2020, 22:09:40 UTC |
8ac0413 | ViktorvdValk | 11 December 2020, 10:45:12 UTC | STYLE: add clang format check | 15 December 2020, 19:36:35 UTC |
84723c5 | Niels Dekker | 11 December 2020, 15:10:50 UTC | STYLE: Revert workaround GCC4 error xoutManager "use of deleted func..." This reverts commit c106327239f2d2a0ef6962f00f86f8ae41e8781f "COMP: Avoid GCC4 error xoutManager "use of deleted function", issue #331" Matt McCormick informed us that GCC 4 no longer needs to be supported, as ITKElastix is upgraded to manylinux2014, which allows using GCC 9 instead. | 11 December 2020, 16:05:12 UTC |
94942b9 | ViktorvdValk | 11 December 2020, 09:39:28 UTC | Merge pull request #371 from SuperElastix/Rerun-clang-format STYLE: Run clang-format again | 11 December 2020, 09:39:28 UTC |
7040f38 | ViktorvdValk | 10 December 2020, 15:35:16 UTC | 'STYLE:Removing_unnecessary_symbols_clang_format' | 10 December 2020, 15:35:16 UTC |
3871d2d | Niels Dekker | 10 December 2020, 13:57:24 UTC | STYLE: Run clang-format again Did rerun clang format as follows: find . -regex '.*\.\(hxx\|h\|cxx\)' -exec /c/Users/Niels_Dekker/AppData/Roaming/ClangPowerTools/LLVM/LLVM8.0.1/bin/clang-format.exe -style=file -i {} \; | 10 December 2020, 13:57:24 UTC |
a68fb59 | Niels Dekker | 04 December 2020, 10:34:17 UTC | COMP: Remove itk::InvalidImageMomentsError from Calculator hxx file The class `itk::InvalidImageMomentsError` appears unused, while it has been defined twice: - https://github.com/InsightSoftwareConsortium/ITK/blob/v5.1.1/Modules/Filtering/ImageStatistics/include/itkImageMomentsCalculator.hxx#L28 - https://github.com/SuperElastix/elastix/blob/5.0.1/Common/Transforms/itkAdvancedImageMomentsCalculator.hxx#L29 Which caused compilation errors like: > ITK511\Modules\Filtering\ImageStatistics\include\itkImageMomentsCalculator.hxx(28,32): error C2011: 'itk::InvalidImageMomentsError': 'class' type redefinition > elx\elastix\Common\Transforms\itkAdvancedImageMomentsCalculator.hxx(29): message : see declaration of 'itk::InvalidImageMomentsError' When doing: #include "AdvancedAffineTransform/elxAdvancedAffineTransform.h" #include "EulerTransform/elxEulerTransform.h" Note that hxx files are meant for implementation only. A class defined within an hxx file should not be not be part of the interface (API), otherwise it should be defined in the h file instead. | 04 December 2020, 12:03:28 UTC |
b87674d | ViktorvdValk | 30 November 2020, 13:30:45 UTC | COMP: cmake-build-type to Release | 30 November 2020, 13:30:45 UTC |
7104a37 | Niels Dekker | 24 November 2020, 18:15:31 UTC | DOC: Update copyright notices regarding ITK and ANN Updated notices according to: - https://github.com/InsightSoftwareConsortium/ITK/blob/v5.1.1/NOTICE - https://github.com/SuperElastix/elastix/blob/5.0.1/Components/Metrics/KNNGraphAlphaMutualInformation/KNN/ann_1.1/Copyright.txt - https://github.com/SuperElastix/elastix/blob/5.0.1/Components/Metrics/KNNGraphAlphaMutualInformation/KNN/ann_1.1/License.txt | 30 November 2020, 12:35:06 UTC |
a133a51 | Niels Dekker | 27 November 2020, 15:43:44 UTC | STYLE: Remove space between class and member names in C++ source files It appears that clang-format has in some cases introduced a space character between `ClassName` and `::MemberName`. This typically seems to have happened when there originally was a line break between the class name and the member name. This commit fixes the formatting by removing those spaces, as follows: find . \( -iname *.cxx \) -exec perl -pi -w -e 's/([A-Z][a-z]+) \:\:([A-Z][a-z])/$1::$2/g;' {} \; Follows ITK: - pull request https://github.com/InsightSoftwareConsortium/ITK/pull/2096 - commit: https://github.com/InsightSoftwareConsortium/ITK/commit/734d6f84d728b343baae5ef66643a5568a5a30c7 | 30 November 2020, 11:46:25 UTC |
43fa10b | ViktorvdValk | 26 November 2020, 16:23:52 UTC | Merge pull request #364 from SuperElastix/Rename-GitHubActions STYLE: Rename GitHub Actions yml file and change GitHub Actions name | 26 November 2020, 16:23:52 UTC |
919be71 | Marius Staring | 25 November 2020, 13:33:58 UTC | Update README.md | 25 November 2020, 13:33:58 UTC |
38065e5 | Niels Dekker | 24 November 2020, 14:31:30 UTC | STYLE: Rename GitHub Actions yml file and change GitHub Actions name | 24 November 2020, 14:31:30 UTC |
1b28f34 | ViktorvdValk | 24 November 2020, 11:56:22 UTC | Merge pull request #362 from ViktorvdValk/develop Github Actions to replace Azure Pipelines | 24 November 2020, 11:56:22 UTC |
b345e9c | ViktorvdValk | 24 November 2020, 09:49:42 UTC | GitHub Actions .yml file | 24 November 2020, 09:49:42 UTC |
e86cd54 | ntatsisk | 23 November 2020, 15:26:41 UTC | ENH: Change AutomaticScalesEstimationStatckTransform parameter to AutomaticScalesEstimation | 23 November 2020, 15:28:21 UTC |
4b3ca0b | Niels Dekker | 17 November 2020, 21:36:53 UTC | STYLE: Make protected AdvancedCombinationTransform data members private It appears that the 13 data members that are made `private` with this commit are not accessed directly by any derived class, so they do not need to be `protected` anymore. Following C++ Core Guidelines (August 3, 2020), "C.133: Avoid protected data", https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-protected | 18 November 2020, 10:36:24 UTC |
d24a6ad | Niels Dekker | 17 November 2020, 21:13:14 UTC | STYLE: Make 11 AdvancedCombinationTransform member functions non-virtual The `virtual` keyword should only be used for member functions that are meant to be overridden in a derived class. See also C++ Core Guidelines (August 3, 2020), "C.132: Don't make a function virtual without reason", https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-virtual | 18 November 2020, 10:36:24 UTC |
a57bacd | Niels Dekker | 12 November 2020, 16:49:48 UTC | ENH: Add BoolToString to BaseComponent and use it in TransformBase | 13 November 2020, 13:07:58 UTC |
e2617a8 | Niels Dekker | 12 November 2020, 16:14:32 UTC | STYLE: Remove FixedImage types TransformBase, use `const auto` instead Removed some redundant local typedefs of `FixedImageType` types, and increased const-correctness by using `const auto` instead of those typedefs. | 13 November 2020, 13:07:58 UTC |
a46a8d0 | Niels Dekker | 12 November 2020, 15:45:58 UTC | STYLE: Replace xout["transpar"] calls in TransformBase by local variable It appears sufficient to just call `get_xout()["transpar"]` once, in `TransformBase::WriteToFile`, and then refer to the output by a local variable (`transparOutput`). | 13 November 2020, 13:07:58 UTC |