Tomato
OxStartPointCalculator.h
Go to the documentation of this file.
1 
7 #ifndef Tomato_OXSTARTPOINTCALCULATOR_H
8 #define Tomato_OXSTARTPOINTCALCULATOR_H
9 
10 #include "KWUtil.h"
11 
12 namespace Ox {
13 
20  template< typename MeasureType >
22 
23  public:
24 
29  virtual int calculateStartPoint() = 0;
30 
31  // getters
32  const MeasureType *getInputStartPoint() const {
33  return _InputStartPoint;
34  }
35 
36  MeasureType *getCalculatedStartPoint() const {
37  if (!_CalculatedStartPoint) throw std::runtime_error("_CalculatedStartPoint equals 0. Set _CalculatedStartPoint");
38  return _CalculatedStartPoint;
39  }
40 
41  int getNDims() const { return _nDims; }
42 
43  //setters
44  virtual void setInputStartPoint(const MeasureType *_InputStartPoint) {
45 
46  if (_nDimsChanged){
47  delete[] this->_InputStartPoint;
48  this->_InputStartPoint = new MeasureType[this->_nDims];
49  _nDimsChanged = false;
50  }
51 
52  if (!_InputStartPoint) {
53  this->_InputStartPoint = new MeasureType[this->_nDims];
54  }
55 
56  for (int i = 0; i < this->getNDims(); i++){
57  StartPointCalculator::_InputStartPoint[i] = _InputStartPoint[i];
58  }
59 
60  }
61 
62  virtual void setNDims(int _nDims) {
63  if (StartPointCalculator::_nDims != _nDims) {
64  StartPointCalculator::_nDims = _nDims;
65  _nDimsChanged = true;
66  }
67  }
68 
69  virtual void setInvTimes(const MeasureType *_InvTimes) { StartPointCalculator::_InvTimes = _InvTimes; }
70  virtual void setEchoTimes(const MeasureType *_EchoTimes) { StartPointCalculator::_EchoTimes = _EchoTimes; }
71  virtual void setSigMag(const MeasureType *_SigMag) { StartPointCalculator::_SigMag = _SigMag; }
72  virtual void setSigns(const MeasureType *_Signs) { StartPointCalculator::_Signs = _Signs; }
73  virtual void setCalculatedStartPoint(MeasureType *_CalculatedStartPoint) { StartPointCalculator::_CalculatedStartPoint = _CalculatedStartPoint; }
74  virtual void setNSamples(int _nSamples) { StartPointCalculator::_nSamples = _nSamples; }
75 
76 
77  void disp(){
78  std::cout << "\nYou called disp() on a StartPointCalculator object " << this
79  << " with nSamples: " << _nSamples
80  << " nDims: " << _nDims;
81  KWUtil::printArray(_InvTimes != 0, _nSamples, _InvTimes, (char*)"\nInvTimes: ");
82  KWUtil::printArray(_EchoTimes != 0, _nSamples, _InvTimes, (char*)"\nEchoTimes: ");
83  KWUtil::printArray(_SigMag != 0, _nSamples, _SigMag, (char*)"\nSigMag: ");
84  KWUtil::printArray(_Signs != 0, _nSamples, _Signs, (char*)"\nSigns: ");
85  KWUtil::printArray(_nDims, this->getCalculatedStartPoint(), (char*)"\nStart point: ");
86  }
87 
92  _InputStartPoint = 0;
93  _CalculatedStartPoint = 0;
94  _InvTimes = 0;
95  _EchoTimes = 0;
96  _SigMag = 0;
97  _Signs = 0;
98  }
99 
104 
106 
107  _nSamples = 0;
108  _nDims = 0;
109  _nDimsChanged = false;
110  }
111 
116 
118 
119  _nSamples = old._nSamples;
120  _nDims = old._nDims;
121  _nDimsChanged = old._nDimsChanged;
122  };
123 
129 
135  delete [] this->_InputStartPoint;
136  };
137 
138  protected:
139  MeasureType* _InputStartPoint;
140  MeasureType* _CalculatedStartPoint;
141 
142  const MeasureType* _InvTimes;
143  const MeasureType* _EchoTimes;
144  const MeasureType* _SigMag;
145  const MeasureType* _Signs;
146 
147  int _nSamples;
148  int _nDims; // special ShMOLLI parameter
149 
150  bool _nDimsChanged;
151 
152  };
153 } //namespace Ox
154 
155 #endif //Tomato_OXSTARTPOINTCALCULATOR_H
void setAllPointersToNull()
set all the pointers to zero
Definition: OxStartPointCalculator.h:91
StartPointCalculator(const StartPointCalculator &old)
copy constructor
Definition: OxStartPointCalculator.h:115
virtual ~StartPointCalculator()
do not forget about the virtual destructor, see https://stackoverflow.com/questions/461203/when-to-us...
Definition: OxStartPointCalculator.h:134
virtual StartPointCalculator< MeasureType > * newByCloning()=0
Definition: OxStartPointCalculator.h:21
StartPointCalculator()
constructor
Definition: OxStartPointCalculator.h:103
Definition: OxCalculator.h:19
virtual int calculateStartPoint()=0