Skip to content

Commit

Permalink
BUG: FixedParameters should be double precision
Browse files Browse the repository at this point in the history
In order for tranforms to properly represent the fixed
parameters (i.e. size/spacing/direction of displacement fields)
it is required that the FixedParameters are of type double.

Change-Id: I6c08aaa496cbf86a1a17620e161a54eec3d4ad43
  • Loading branch information
hjmjohnson committed Jul 2, 2015
1 parent 316df67 commit 3592834
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 27 deletions.
15 changes: 14 additions & 1 deletion Modules/Core/Transform/include/itkTransformBase.h
Expand Up @@ -53,9 +53,22 @@ class TransformBaseTemplate:public Object

typedef TParametersValueType ParametersValueType;
typedef OptimizerParameters<ParametersValueType> ParametersType;
typedef ParametersValueType FixedParametersValueType;
typedef double FixedParametersValueType;
typedef OptimizerParameters<FixedParametersValueType> FixedParametersType;

// The ITK_FIXED_PARAMETERS_ARE_DOUBLE is intended
// to facilitate transition of ITK for those very
// rare cases where multiple versions of ITK
// may need to be supported simultaneously.
#if defined( ITK_LEGACY_REMOVE )
#undef ITK_FIXED_PARAMETERS_ARE_DOUBLE
#else
#define ITK_FIXED_PARAMETERS_ARE_DOUBLE
// #if !defined(ITK_FIXED_PARAMETERS_ARE_DOUBLE)
// typedef ParametersValueType FixedParametersValueType;
// #endif
#endif

/** Run-time type information (and related methods). */
itkTypeMacro(TransformBaseTemplate, Object);

Expand Down
2 changes: 1 addition & 1 deletion Modules/IO/TransformBase/include/itkTransformFileWriter.h
Expand Up @@ -45,7 +45,7 @@ class TransformFileWriterTemplate:public LightProcessObject
typedef SmartPointer<const Self> ConstPointer;

typedef TParametersValueType ParametersValueType;
typedef ParametersValueType FixedParametersValueType;
typedef double FixedParametersValueType;
typedef TransformBaseTemplate<ParametersValueType> TransformType;
typedef TransformIOBaseTemplate<ParametersValueType> TransformIOType;
typedef typename TransformIOType::TransformPointer TransformPointer;
Expand Down
26 changes: 1 addition & 25 deletions Modules/IO/TransformHDF5/include/itkHDF5TransformIO.hxx
Expand Up @@ -141,10 +141,6 @@ HDF5TransformIOTemplate<TParametersValueType>
{
const hsize_t dim(fixedParameters.Size());
FixedParametersValueType *buf = new FixedParametersValueType[dim];

const std::string & NameParametersValueTypeString = Superclass::GetTypeNameString();
if( ! NameParametersValueTypeString.compare( std::string("double") ))
{
for(unsigned i(0); i < dim; i++)
{
buf[i] = fixedParameters[i];
Expand All @@ -155,26 +151,6 @@ HDF5TransformIOTemplate<TParametersValueType>
paramSpace);
paramSet.write(buf,H5::PredType::NATIVE_DOUBLE);
paramSet.close();
}
else if( ! NameParametersValueTypeString.compare(std::string("float") ) )
{
for(unsigned i(0); i < dim; i++)
{
buf[i] = fixedParameters[i];
}
H5::DataSpace paramSpace(1,&dim);
H5::DataSet paramSet = this->m_H5File->createDataSet(name,
H5::PredType::NATIVE_FLOAT,
paramSpace);
paramSet.write(buf,H5::PredType::NATIVE_FLOAT);
paramSet.close();
}
else
{
itkExceptionMacro(<< "Wrong data precision type "
<< NameParametersValueTypeString
<< "for writing in HDF5 File");
}
delete [] buf;
}

Expand Down Expand Up @@ -413,7 +389,7 @@ HDF5TransformIOTemplate<TParametersValueType>
FixedParametersType FixedtmpArray = curTransform->GetFixedParameters();
std::string fixedParamsName(transformName);
fixedParamsName += transformFixedName;
this->WriteParameters(fixedParamsName,FixedtmpArray);
this->WriteFixedParameters(fixedParamsName,FixedtmpArray);
// parameters
ParametersType tmpArray = curTransform->GetParameters();
std::string paramsName(transformName);
Expand Down

0 comments on commit 3592834

Please sign in to comment.