Tomato
OxModel.h
Go to the documentation of this file.
1 
7 #ifndef Tomato_OxModel_H
8 #define Tomato_OxModel_H
9 
10 #include "tomatolib_export.h"
11 #include <string>
12 
13 namespace Ox {
14 
25  template< typename MeasureType >
26  class Model{
27 
28  public:
29 
35  virtual MeasureType calcModelValue(const MeasureType* parameters, MeasureType time) = 0;
36 
41  virtual void calcLSResiduals(const MeasureType* parameters, MeasureType* residuals) = 0;
42 
47  virtual MeasureType calcCostValue(const MeasureType* parameters) = 0;
48 
53  virtual void calcCostDerivative(const MeasureType* parameters, MeasureType* derivative) = 0;
54 
59  virtual void calcLSJacobian(const MeasureType* parameters, MeasureType* jacobian) = 0;
60 
61  // getters
62  virtual int getNSamples() { return _nSamples; }
63  virtual const MeasureType *getInvTimes() const { return _InvTimes; }
64  virtual const MeasureType *getEchoTimes() const { return _EchoTimes; }
65  virtual const MeasureType *getRepTimes() const { return _RepTimes; }
66  virtual const MeasureType *getRelAcqTimes() const { return _RelAcqTimes; }
67  virtual const MeasureType *getSignal() const { return _Signal; }
68  virtual int getNDims() { return _nDims; }
69 
70  // setters
71  void setNSamples(int _nSamples);
72  virtual void setInvTimes(const MeasureType *_InvTimes) { Model::_InvTimes = _InvTimes; }
73  virtual void setEchoTimes(const MeasureType *_EchoTimes) { Model::_EchoTimes = _EchoTimes; }
74  virtual void setRepTimes(const MeasureType *_RepTimes) { Model::_RepTimes = _RepTimes; }
75  virtual void setRelAcqTimes(const MeasureType *_RelAcqTimes) { Model::_RelAcqTimes = _RelAcqTimes; }
76  virtual void setSignal(const MeasureType *_Signal) { Model::_Signal = _Signal; }
77 
78  // TODO: make abstract
79  virtual std::string getNthParamName(int nthParam){return "";};
80 
84  virtual void disp();
85 
89  void setAllPointersToNull();
90 
94  Model();
95 
100  Model(const Model &old);
101 
106  virtual Model<MeasureType> *newByCloning() = 0;
107 
112  virtual ~Model();
113 
114  protected:
115 
116  const MeasureType* _InvTimes;
117  const MeasureType* _EchoTimes;
118  const MeasureType* _RepTimes;
119  const MeasureType* _RelAcqTimes;
120  const MeasureType* _Signal;
121  int _nSamples;
122  int _nDims;
123 
124  // helper variables
125  MeasureType* _Residuals;
126  };
127 } //namespace Ox
128 
129 #ifndef TOMATOLIB_COMPILED
130 #include "OxModel.hxx"
131 #endif //TOMATOLIB_COMPILED
132 
133 #endif //Tomato_OxModel_H
virtual void disp()
show me your ModelT1
Definition: OxModel.hxx:26
Container for a model function, cost function and Least-Squares function. And derivatives.
Definition: OxModel.h:26
virtual void calcLSJacobian(const MeasureType *parameters, MeasureType *jacobian)=0
virtual MeasureType calcModelValue(const MeasureType *parameters, MeasureType time)=0
virtual void calcCostDerivative(const MeasureType *parameters, MeasureType *derivative)=0
Model()
constructor
Definition: OxModel.hxx:50
virtual Model< MeasureType > * newByCloning()=0
virtual void calcLSResiduals(const MeasureType *parameters, MeasureType *residuals)=0
virtual MeasureType calcCostValue(const MeasureType *parameters)=0
virtual ~Model()
do not forget about the virtual destructor, see https://stackoverflow.com/questions/461203/when-to-us...
Definition: OxModel.hxx:74
void setAllPointersToNull()
set all the pointers to zero
Definition: OxModel.hxx:40
Definition: OxCalculator.h:19