7 #ifndef Tomato_OXModelT1ThreeParam_HXX 8 #define Tomato_OXModelT1ThreeParam_HXX 13 template<
typename MeasureType >
17 MeasureType A = parameters[0];
18 MeasureType B = parameters[1];
19 MeasureType T1star = parameters[2];
21 if (fabs(T1star) < std::numeric_limits<MeasureType>::min())
24 return A - B * exp( -time / T1star );
27 template<
typename MeasureType >
32 unsigned int nSamples = this->_nSamples;
34 for (
unsigned int i = 0; i < nSamples; i++) {
35 MeasureType invTime = this->_InvTimes[i];
36 MeasureType measured = this->_Signal[i];
37 MeasureType calculated = 0;
39 calculated = calcModelValue(parameters, invTime);
41 residuals[i] = calculated - measured;
46 template<
typename MeasureType >
50 int nSamples = this->_nSamples;
53 MeasureType B = parameters[1];
54 MeasureType T1star = parameters[2];
55 MeasureType invTime, myexp;
57 for (
int i = 0; i < nSamples; i++) {
58 invTime = this->_InvTimes[i];
59 myexp = exp(-invTime/T1star);
62 jacobian[i*3+0] = 1.0;
63 jacobian[i*3+1] = -myexp;
64 jacobian[i*3+2] = -B * invTime * myexp / (T1star * T1star);
68 template<
typename MeasureType >
73 int nSamples = this->_nSamples;
75 calcLSResiduals(parameters, this->_Residuals);
76 MeasureType result = 0;
78 for (
int i = 0; i < nSamples; ++i) {
79 result = result + this->_Residuals[i] * this->_Residuals[i];
85 template<
typename MeasureType >
90 int nSamples = this->_nSamples;
96 MeasureType measured, invTime, myexp;
98 MeasureType A = parameters[0];
99 MeasureType B = parameters[1];
100 MeasureType T1star = parameters[2];
103 for (
int i = 0; i < nSamples; ++i){
104 measured = this->getSignal()[i];
105 invTime = this->getInvTimes()[i];
106 myexp = exp(-invTime/T1star);
108 derivative[0] = derivative[0] + A*2 - measured*2 - myexp*B*2;;
109 derivative[1] = derivative[1] + myexp*2*(measured - A + myexp*B);
110 derivative[2] = derivative[2] + (invTime*myexp*B*2*(measured - A + myexp*B))/(T1star*T1star);
117 #endif //Tomato_OXModelT1ThreeParam_HXX virtual void calcLSResiduals(const MeasureType *parameters, MeasureType *residuals)
Definition: OxModelT1ThreeParam.hxx:30
virtual void calcCostDerivative(const MeasureType *parameters, MeasureType *derivative)
Definition: OxModelT1ThreeParam.hxx:88
virtual MeasureType calcModelValue(const MeasureType *parameters, MeasureType time)
Definition: OxModelT1ThreeParam.hxx:16
virtual MeasureType calcCostValue(const MeasureType *parameters)
Definition: OxModelT1ThreeParam.hxx:71
virtual void calcLSJacobian(const MeasureType *parameters, MeasureType *jacobian)
Definition: OxModelT1ThreeParam.hxx:49
Definition: OxCalculator.h:19