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