File: elxParameterObject.h

package info (click to toggle)
elastix 5.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 45,644 kB
  • sloc: cpp: 85,720; lisp: 4,118; python: 1,045; sh: 200; xml: 182; makefile: 33
file content (144 lines) | stat: -rw-r--r-- 5,119 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*=========================================================================
 *
 *  Copyright UMC Utrecht and contributors
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/
#ifndef elxParameterObject_h
#define elxParameterObject_h

#include "itkObjectFactory.h"
#include "itkDataObject.h"
#include "elxMacro.h"

namespace elastix
{

// TODO: Why does the compiler not see ELASTIXLIB_API declspec in elxMacro.h?
//   error: variable has incomplete type 'class ELASTIXLIB_API'
// with class ELASTIXLIB_API ParameterObject : public itk::DataObject

class ParameterObject : public itk::DataObject
{
public:
  using Self = ParameterObject;
  using Pointer = itk::SmartPointer<Self>;
  using ConstPointer = itk::SmartPointer<const Self>;
  itkNewMacro(Self);
  itkOverrideGetNameOfClassMacro(ParameterObject);

  using ParameterKeyType = std::string;
  using ParameterValueType = std::string;
  using ParameterValueVectorType = std::vector<ParameterValueType>;
  using ParameterValueVectorIterator = ParameterValueVectorType::iterator;
  using ParameterMapType = std::map<ParameterKeyType, ParameterValueVectorType>;
  using ParameterMapIterator = ParameterMapType::iterator;
  using ParameterMapConstIterator = ParameterMapType::const_iterator;
  using ParameterMapVectorType = std::vector<ParameterMapType>;
  using ParameterFileNameType = std::string;
  using ParameterFileNameVectorType = std::vector<ParameterFileNameType>;
  using ParameterFileNameVectorIterator = ParameterFileNameVectorType::iterator;
  using ParameterFileNameVectorConstIterator = ParameterFileNameVectorType::const_iterator;

  /* Set/Get/Add parameter map or vector of parameter maps. */
  // TODO: Use itkSetMacro for ParameterMapVectorType
  void
  SetParameterMap(const ParameterMapType & parameterMap);
  void
  SetParameterMap(const unsigned int index, const ParameterMapType & parameterMap);

  void
  SetParameterMaps(const ParameterMapVectorType & parameterMaps);

  void
  AddParameterMap(const ParameterMapType & parameterMap);
  const ParameterMapType &
  GetParameterMap(const unsigned int index) const;

  const ParameterMapVectorType &
  GetParameterMaps() const
  {
    return m_ParameterMaps;
  }

  unsigned int
  GetNumberOfParameterMaps() const
  {
    return static_cast<unsigned int>(m_ParameterMaps.size());
  }

  void
  SetParameter(const unsigned int index, const ParameterKeyType & key, const ParameterValueType & value);
  void
  SetParameter(const unsigned int index, const ParameterKeyType & key, const ParameterValueVectorType & value);
  void
  SetParameter(const ParameterKeyType & key, const ParameterValueType & value);
  void
  SetParameter(const ParameterKeyType & key, const ParameterValueVectorType & value);
  const ParameterValueVectorType &
  GetParameter(const unsigned int index, const ParameterKeyType & key) const;
  bool
  HasParameter(const unsigned int index, const ParameterKeyType & key) const;
  bool
  HasParameter(const ParameterKeyType & key) const;
  void
  RemoveParameter(const unsigned int index, const ParameterKeyType & key);
  void
  RemoveParameter(const ParameterKeyType & key);

  /* Read/Write parameter file or multiple parameter files to/from disk. */
  void
  ReadParameterFile(const ParameterFileNameType & parameterFileName);

  void
  ReadParameterFiles(const ParameterFileNameVectorType & parameterFileNameVector);

  void
  AddParameterFile(const ParameterFileNameType & parameterFileName);

  static void
  WriteParameterFile(const ParameterMapType & parameterMap, const ParameterFileNameType & parameterFileName);
  void
  WriteParameterFile(const ParameterFileNameType & parameterFileName) const;

  void
  WriteParameterFiles() const;

  void
  WriteParameterFiles(const ParameterFileNameVectorType & parameterFileNameVector) const;

  static void
  WriteParameterFiles(const ParameterMapVectorType &      parameterMapVector,
                      const ParameterFileNameVectorType & parameterFileNameVector);

  /* Get preconfigured parameter maps. */
  static ParameterMapType
  GetDefaultParameterMap(const std::string & transformName,
                         const unsigned int  numberOfResolutions = 4u,
                         const double        finalGridSpacingInPhysicalUnits = 10.0);

protected:
  void
  PrintSelf(std::ostream & os, itk::Indent indent) const override;

private:
  ParameterMapType &
  GetMutableParameterMap(const unsigned int index);

  ParameterMapVectorType m_ParameterMaps;
};

} // namespace elastix

#endif // elxParameterObject_h