17 #include <vnl/algo/vnl_fft_1d.h> 18 #include <boost/numeric/odeint.hpp> 22 "Numeric Two Compartment Exchange Model";
51 return "Perfusion.MR";
166 typedef itk::Array<double> ConcentrationCurveType;
167 typedef std::vector<double> ConcentrationVectorType;
171 itkExceptionMacro(
"No Time Grid Set! Cannot Calculate Signal");
177 unsigned int timeSteps = this->
m_TimeGrid.GetSize();
182 aterialInputFunction);
187 aifODE.push_back(aif[timeSteps - 1]);
189 gridODE.push_back(grid[timeSteps - 1] + (grid[timeSteps - 1] - grid[timeSteps - 2]));
209 typedef boost::numeric::odeint::runge_kutta_cash_karp54<state_type> error_stepper_type;
213 ConcentrationVectorType Cp;
214 ConcentrationVectorType Ce;
215 ConcentrationVectorType odeTimeGrid;
217 error_stepper_type stepper;
222 const double dt = this->m_ODEINTStepSize;
228 stepper.do_step(ode, x, t, dt);
231 odeTimeGrid.push_back(t);
247 mitk::ModelBase::ModelResultType::iterator signalPos = signal.begin();
248 mitk::ModelBase::ModelResultType::const_iterator CePos = C_EES.begin();
250 mitk::ModelBase::ModelResultType::const_iterator t = this->
m_TimeGrid.begin();
251 mitk::ModelBase::ModelResultType::const_iterator Cin = aterialInputFunction.begin();
255 for (mitk::ModelBase::ModelResultType::const_iterator CpPos = C_Plasma.begin();
256 CpPos != C_Plasma.end(); ++CpPos, ++CePos, ++signalPos, ++t, ++Cin)
258 *signalPos = vp * (*CpPos) + ve * (*CePos);
275 return newClone.GetPointer();
279 ::itk::Indent indent)
const std::vector< double > AIFType
ParametersSizeType GetNumberOfStaticParameters() const override
static const std::string NAME_PARAMETER_PS
ModelTraitsInterface::ParametersType ParametersType
virtual const double & GetODEINTStepSize()
static const std::string NAME_STATIC_PARAMETER_AIFTimeGrid
ModelResultType ComputeModelfunction(const ParametersType ¶meters) const override
static const std::string NAME_PARAMETER_vp
static const std::string UNIT_PARAMETER_F
static const unsigned int POSITION_PARAMETER_ve
void PrintSelf(std::ostream &os, ::itk::Indent indent) const override
itk::Array< double > TimeGridType
static const std::string UNIT_PARAMETER_PS
Helper Class for NumericTwoCompartmentExchangeModel: Defines the differential equations (Mass Balance...
ParameterNamesType GetStaticParameterNames() const override
const AterialInputFunctionType GetAterialInputFunction(TimeGridType currentTimeGrid) const
static const std::string NAME_STATIC_PARAMETER_ODEINTStepSize
MITKPHARMACOKINETICS_EXPORT ModelBase::StaticParameterValuesType convertArrayToParameter(itk::Array< double > array)
itk::LightObject::Pointer InternalClone() const override
~NumericTwoCompartmentExchangeModel() override
ModelTraitsInterface::ParametersSizeType ParametersSizeType
static const unsigned int POSITION_PARAMETER_F
AterialInputFunctionType m_AterialInputFunctionValues
std::vector< StaticParameterValueType > StaticParameterValuesType
static const std::string UNIT_PARAMETER_ve
ModelTraitsInterface::ModelResultType ModelResultType
ParametersSizeType GetNumberOfParameters() const override
virtual void SetODEINTStepSize(double _arg)
MITKMODELFIT_EXPORT ModelBase::ModelResultType InterpolateSignalToNewTimeGrid(const ModelBase::ModelResultType &inputSignal, const ModelBase::TimeGridType &inputGrid, const ModelBase::TimeGridType &outputGrid)
ParameterNamesType GetParameterNames() const override
MITKPHARMACOKINETICS_EXPORT itk::Array< double > convertParameterToArray(ModelBase::StaticParameterValuesType)
itk::Array< double > AterialInputFunctionType
void PrintSelf(std::ostream &os, ::itk::Indent indent) const override
static const std::string MODEL_DISPLAY_NAME
static const unsigned int POSITION_PARAMETER_vp
void setAIFTimeGrid(AIFType &grid)
ModelTraitsInterface::ParameterNameType ParameterNameType
static const std::string NAME_PARAMETER_F
void SetStaticParameter(const ParameterNameType &name, const StaticParameterValuesType &values) override
NumericTwoCompartmentExchangeModel()
static const std::string UNIT_PARAMETER_vp
virtual void SetAterialInputFunctionTimeGrid(TimeGridType _arg)
static const std::string NAME_STATIC_PARAMETER_AIF
virtual void SetAterialInputFunctionValues(AterialInputFunctionType _arg)
ModelTraitsInterface::ParameterNamesType ParameterNamesType
void initialize(double Fp, double ps, double fi, double fp)
Initialize class with parameters F/Vp, PS/Vp, fi and fp that are free fit parameters.
static const unsigned int NUMBER_OF_PARAMETERS
TimeGridType m_AterialInputFunctionTimeGrid
static const std::string NAME_PARAMETER_ve
std::string GetModelDisplayName() const override
static const unsigned int POSITION_PARAMETER_PS
std::map< ParameterNameType, std::string > ParamterUnitMapType
ParamterUnitMapType GetParameterUnits() const override
StaticParameterValuesType GetStaticParameterValue(const ParameterNameType &name) const override
std::vector< double > state_type
std::string GetModelType() const override
void setAIF(AIFType &aif)