File: elxParameterObject.h

package info (click to toggle)
elastix 5.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 42,480 kB
  • sloc: cpp: 68,403; lisp: 4,118; python: 1,013; xml: 182; sh: 177; makefile: 33
file content (159 lines) | stat: -rw-r--r-- 5,973 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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*=========================================================================
 *
 *  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);
  itkTypeMacro(ParameterObject, itk::DataObject);

  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);

  [[deprecated("Instead of calling this overload, please call SetParameterMaps")]] void
  SetParameterMap(const ParameterMapVectorType & parameterMaps);

  void
  SetParameterMaps(const ParameterMapVectorType & parameterMaps);

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

  [[deprecated("Instead of calling this member function, please call GetParameterMaps")]] const ParameterMapVectorType &
  GetParameterMap() const
  {
    return m_ParameterMaps;
  }

  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);
  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);

  [[deprecated("Instead of calling this overload, please call ReadParameterFiles")]] void
  ReadParameterFile(const ParameterFileNameVectorType & parameterFileNameVector);

  void
  ReadParameterFiles(const ParameterFileNameVectorType & parameterFileNameVector);

  void
  AddParameterFile(const ParameterFileNameType & parameterFileName);

  [[deprecated("Instead of calling this overload, please call WriteParameterFiles")]] void
  WriteParameterFile() const;

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

  [[deprecated("Instead of calling this overload, please call WriteParameterFiles")]] void
  WriteParameterFile(const ParameterFileNameVectorType & parameterFileNameVector) const;

  [[deprecated("Instead of calling this overload, please call WriteParameterFiles")]] static void
  WriteParameterFile(const ParameterMapVectorType &      parameterMapVector,
                     const ParameterFileNameVectorType & parameterFileNameVector);

  void
  WriteParameterFiles() const;

  void
  WriteParameterFiles(const ParameterFileNameVectorType & parameterFileNameVector) const;

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

  /* Get preconfigured parameter maps. */
  static const 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:
  ParameterMapVectorType m_ParameterMaps;
};

} // namespace elastix

#endif // elxParameterObject_h