17 #include <vnl/algo/vnl_fft_1d.h> 18 #include <boost/numeric/odeint.hpp> 22 "Numeric Two Tissue Compartment Model";
103 typedef itk::Array<double> ConcentrationCurveType;
104 typedef std::vector<double> ConcentrationVectorType;
108 itkExceptionMacro(
"No Time Grid Set! Cannot Calculate Signal");
114 unsigned int timeSteps = this->
m_TimeGrid.GetSize();
119 aterialInputFunction);
124 aifODE.push_back(aif[timeSteps - 1]);
126 gridODE.push_back(grid[timeSteps - 1] + (grid[timeSteps - 1] - grid[timeSteps - 2]));
145 typedef boost::numeric::odeint::runge_kutta_cash_karp54<state_type> error_stepper_type;
149 ConcentrationVectorType C1;
150 ConcentrationVectorType C2;
151 ConcentrationVectorType odeTimeGrid;
153 error_stepper_type stepper;
155 const double dt = 0.1;
158 double T = this->
m_TimeGrid(timeSteps - 1) + (grid[timeSteps - 1] - grid[timeSteps - 2]);
160 for (
double t = 0.0; t < T; t += dt)
162 stepper.do_step(ode, x, t, dt);
165 odeTimeGrid.push_back(t);
175 ConcentrationCompartment1, rungeKuttaTimeGrid,
m_TimeGrid);
177 ConcentrationCompartment2, rungeKuttaTimeGrid,
m_TimeGrid);
183 mitk::ModelBase::ModelResultType::iterator signalPos = signal.begin();
184 mitk::ModelBase::ModelResultType::const_iterator C1Pos = C_1.begin();
185 mitk::ModelBase::ModelResultType::const_iterator C2Pos = C_2.begin();
188 for (AterialInputFunctionType::const_iterator aifpos = aterialInputFunction.begin();
189 aifpos != aterialInputFunction.end(); ++aifpos, ++C1Pos, ++C2Pos, ++signalPos)
191 *signalPos = VB * (*aifpos) + (1 - VB) * (*C1Pos + *C2Pos);
204 return newClone.GetPointer();
void setAIFTimeGrid(AIFType &grid)
static const std::string MODEL_DISPLAY_NAME
static const unsigned int POSITION_PARAMETER_K1
static const std::string UNIT_PARAMETER_k4
ParametersSizeType GetNumberOfParameters() const override
void initialize(double k_1, double k_2, double k_3, double k_4)
Initialize class with parameters K1, k2, k3 and k4 that are free fit parameters.
ModelTraitsInterface::ParametersType ParametersType
static const std::string UNIT_PARAMETER_K1
NumericTwoTissueCompartmentModel()
static const std::string UNIT_PARAMETER_k2
static const unsigned int POSITION_PARAMETER_VB
void setAIF(AIFType &aif)
std::string GetModelType() const override
static const std::string UNIT_PARAMETER_k3
void PrintSelf(std::ostream &os, ::itk::Indent indent) const override
~NumericTwoTissueCompartmentModel() override
static const unsigned int POSITION_PARAMETER_k3
void PrintSelf(std::ostream &os, ::itk::Indent indent) const override
static const unsigned int NUMBER_OF_PARAMETERS
const AterialInputFunctionType GetAterialInputFunction(TimeGridType currentTimeGrid) const
static const std::string NAME_PARAMETER_k3
static const unsigned int POSITION_PARAMETER_k4
MITKPHARMACOKINETICS_EXPORT ModelBase::StaticParameterValuesType convertArrayToParameter(itk::Array< double > array)
static const std::string NAME_PARAMETER_VB
ParamterUnitMapType GetParameterUnits() const override
ModelTraitsInterface::ParametersSizeType ParametersSizeType
ModelTraitsInterface::ModelResultType ModelResultType
MITKMODELFIT_EXPORT ModelBase::ModelResultType InterpolateSignalToNewTimeGrid(const ModelBase::ModelResultType &inputSignal, const ModelBase::TimeGridType &inputGrid, const ModelBase::TimeGridType &outputGrid)
static const std::string NAME_PARAMETER_k2
MITKPHARMACOKINETICS_EXPORT itk::Array< double > convertParameterToArray(ModelBase::StaticParameterValuesType)
itk::Array< double > AterialInputFunctionType
static const unsigned int POSITION_PARAMETER_k2
static const std::string NAME_PARAMETER_k4
ParameterNamesType GetParameterNames() const override
std::vector< double > state_type
ModelResultType ComputeModelfunction(const ParametersType ¶meters) const override
ModelTraitsInterface::ParameterNamesType ParameterNamesType
Helper Class for NumericTwoTissueCompartment Model: Defines the differential equations (Mass Balance ...
std::string GetModelDisplayName() const override
static const std::string UNIT_PARAMETER_VB
std::map< ParameterNameType, std::string > ParamterUnitMapType
std::vector< double > AIFType
itk::LightObject::Pointer InternalClone() const override
static const std::string NAME_PARAMETER_K1