Tomato
OxCalculator.h
Go to the documentation of this file.
1 
7 #ifndef Tomato_OXCALCULATORT1_H
8 #define Tomato_OXCALCULATORT1_H
9 
10 #include "tomatolib_export.h"
11 #include "OxFitter.h"
12 #include "OxModel.h"
13 #include "OxSignCalculator.h"
14 #include "OxStartPointCalculator.h"
15 #include <map>
16 
17 #include "KWUtil.h"
18 
19 namespace Ox {
20 
27  template< typename MeasureType >
28  class Calculator{
29 
30  public:
31 
36  virtual int calculate() = 0;
37 
42  virtual int prepareToCalculate() = 0;
43 
44  /* ****************** */
45  /* *** GETTERS *** */
46  /* ****************** */
47 
48  virtual std::map <std::string, MeasureType> getResults() const;
49 
54  virtual Model<MeasureType> *getModel() const;
55 
60  virtual Fitter<MeasureType> *getFitter() const;
61 
62  virtual StartPointCalculator<MeasureType> *getStartPointCalculator() const;
63 
64  virtual SignCalculator<MeasureType> *getSignCalculator() const;
65 
66  virtual const MeasureType *getInvTimes() const;
67 
68  virtual const MeasureType *getEchoTimes() const;
69 
70  virtual const MeasureType *getRepTimes() const;
71 
72  virtual const MeasureType *getRelAcqTimes() const;
73 
78  virtual const MeasureType *getSigMag() const;
79 
84  virtual const MeasureType *getSigPha() const;
85 
86  virtual const MeasureType *getNoise() const;
87 
88  virtual MeasureType *getSignal() const;
89 
90  virtual MeasureType *getSigns() const;
91 
92  virtual MeasureType *getStartPoint() ;
93 
94  virtual MeasureType getMeanCutOff() const;
95 
100  virtual int getNSamples() const;
101 
106  virtual int getNDims() const;
107 
108  MeasureType *getParametersAfterFitting() const;
109 
110  /* ****************** */
111  /* *** SETTERS *** */
112  /* ****************** */
113  /* ****************** */
114 
115  // setters for the 'has a' classes
116  virtual void setModel(Model<MeasureType> *_Model);
117 
118  virtual void setFitter(Fitter<MeasureType> *_Fitter);
119 
120  virtual void setSignCalculator(SignCalculator<MeasureType> *_SignCalculator);
121 
122  virtual void setStartPointCalculator(StartPointCalculator<MeasureType> *_StartPointCalculator);
123 
124  // setters for the data
125  virtual void setInvTimes(const MeasureType *_InvTimes);
126 
127  virtual void setEchoTimes(const MeasureType *_EchoTimes);
128 
129  virtual void setSigMag(const MeasureType *_SigMag);
130 
131  virtual void setSigPha(const MeasureType *_SigPha);
132 
133  virtual void setNoise(const MeasureType *_Noise);
134 
135  virtual void setMeanCutOff(MeasureType _MeanCutOff);
136 
141  virtual void setNSamples(int _nSamples);
142 
147  virtual void setNDims(int _nDims);
148 
152  void disp();
153 
158  // objects
159  _Model = 0;
160  _Fitter = 0;
161  _SignCalculator = 0;
162  _StartPointCalculator = 0;
163 
164  // arrays
165  _InvTimes = 0;
166  _EchoTimes = 0;
167  _RepTimes = 0;
168  _RelAcqTimes = 0;
169  _SigMag = 0; // original one
170  _SigPha = 0; // original one
171  _Noise = 0;
172  _Signal = 0; // we will be working with this one
173  _Signs = 0; // we will be working with this one
174  _StartPoint = 0;
175  _ParametersAfterFitting = 0;
176  }
177 
182 
184 
185  // primitives
186  _MeanCutOff = 0;
187  _nSamples = 0;
188  _nDims = 0;
189 
190  };
191 
195  Calculator(const Calculator &old){
196 
198 
199  // primitives
200  setMeanCutOff(old._MeanCutOff);
201  setNSamples(old._nSamples);
202  setNDims(old._nDims);
203  };
204 
209  virtual Calculator<MeasureType> *newByCloning() = 0;
210 
215  virtual ~Calculator(){
216  delete [] _Signal; _Signal = 0;
217  delete [] _Signs; _Signs = 0;
218  delete [] _StartPoint; _StartPoint = 0;
219  delete [] _ParametersAfterFitting; _ParametersAfterFitting = 0;
220  };
221 
222  protected:
223 
224  Model<MeasureType>* _Model;
225  Fitter<MeasureType>* _Fitter;
226  SignCalculator<MeasureType>* _SignCalculator;
227  StartPointCalculator<MeasureType>* _StartPointCalculator;
228 
229  const MeasureType* _InvTimes;
230  const MeasureType* _EchoTimes;
231  const MeasureType* _RepTimes;
232  const MeasureType* _RelAcqTimes;
233  const MeasureType* _SigMag; // original one
234  const MeasureType* _SigPha; // original one
235  const MeasureType* _Noise;
236  MeasureType* _Signal; // size: nSamples. We will be working with this one
237  MeasureType* _Signs; // size: nSamples. We will be working with this one
238  MeasureType* _StartPoint; // size: nDims. We will be working with this one
239 
240  int _nSamples;
241  int _nDims;
242  MeasureType _MeanCutOff;
243 
244  MeasureType* _ParametersAfterFitting; // size: nDims
245  std::map <std::string, MeasureType> _Results;
246 
247  };
248 } //namespace Ox
249 
250 #ifndef TOMATOLIB_COMPILED
251 #include "OxCalculator.hxx"
252 #endif //TOMATOLIB_COMPILED
253 
254 #endif //Tomato_OXCALCULATORT1_H
virtual ~Calculator()
do not forget about the virtual destructor, see https://stackoverflow.com/questions/461203/when-to-us...
Definition: OxCalculator.h:215
virtual int getNSamples() const
Definition: OxCalculator.hxx:143
virtual int getNDims() const
Definition: OxCalculator.hxx:153
Container for a model function, cost function and Least-Squares function. And derivatives.
Definition: OxModel.h:26
virtual const MeasureType * getSigMag() const
Definition: OxCalculator.hxx:90
virtual void setNDims(int _nDims)
Definition: OxCalculator.hxx:263
virtual int prepareToCalculate()=0
void disp()
show me your Model
Definition: OxCalculator.hxx:287
Definition: OxCalculator.h:28
void setAllPointersToNull()
set all the pointers to zero
Definition: OxCalculator.h:157
Definition: OxSignCalculator.h:21
Definition: OxStartPointCalculator.h:21
virtual int calculate()=0
Calculator()
constructor
Definition: OxCalculator.h:181
Definition: OxFitter.h:22
virtual const MeasureType * getSigPha() const
Definition: OxCalculator.hxx:100
virtual Calculator< MeasureType > * newByCloning()=0
Calculator(const Calculator &old)
copy constructor
Definition: OxCalculator.h:195
Definition: OxCalculator.h:19
virtual Model< MeasureType > * getModel() const
Definition: OxCalculator.hxx:28
virtual void setNSamples(int _nSamples)
Definition: OxCalculator.hxx:240
virtual Fitter< MeasureType > * getFitter() const
Definition: OxCalculator.hxx:38