Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkThreeStepLinearModel.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
14 
15 const std::string mitk::ThreeStepLinearModel::MODEL_DISPLAY_NAME = "Three Step Linear Model";
16 
17 const std::string mitk::ThreeStepLinearModel::NAME_PARAMETER_S0 = "Baseline";
18 const std::string mitk::ThreeStepLinearModel::NAME_PARAMETER_t1 = "Time_point_1";
19 const std::string mitk::ThreeStepLinearModel::NAME_PARAMETER_t2 = "Time_point_2";
20 const std::string mitk::ThreeStepLinearModel::NAME_PARAMETER_a1 = "Slope_1";
21 const std::string mitk::ThreeStepLinearModel::NAME_PARAMETER_a2 = "Slope_2";
22 
23 // Assuming that Model is calculated on Signal intensities I
24 const std::string mitk::ThreeStepLinearModel::UNIT_PARAMETER_S0 = "I";
25 const std::string mitk::ThreeStepLinearModel::UNIT_PARAMETER_t1 = "s";
26 const std::string mitk::ThreeStepLinearModel::UNIT_PARAMETER_t2 = "s";
27 const std::string mitk::ThreeStepLinearModel::UNIT_PARAMETER_a1 = "I/s";
28 const std::string mitk::ThreeStepLinearModel::UNIT_PARAMETER_a2 = "I/s";
29 
35 
37 
39 {
40  return MODEL_DISPLAY_NAME;
41 };
42 
44 {
45  return "Generic";
46 };
47 
49 {
50  return "Baseline if t<Time_point_1; Slope_1*t+Y_intercept_1 if Time_point_1<=t<=Time_point_2; Slope_2*t+Y_intercept_2 if Time_point_2<t";
51 };
52 
54 {
55  return "x";
56 };
57 
60 {
61  ParameterNamesType result;
62  result.push_back(NAME_PARAMETER_S0);
63  result.push_back(NAME_PARAMETER_t1);
64  result.push_back(NAME_PARAMETER_t2);
65  result.push_back(NAME_PARAMETER_a1);
66  result.push_back(NAME_PARAMETER_a2);
67 
68 
69  return result;
70 };
71 
74 {
75  return NUMBER_OF_PARAMETERS;
76 };
77 
80 {
81  ParamterUnitMapType result;
82 
83  result.insert(std::make_pair(NAME_PARAMETER_S0, UNIT_PARAMETER_S0));
84  result.insert(std::make_pair(NAME_PARAMETER_t1, UNIT_PARAMETER_t1));
85  result.insert(std::make_pair(NAME_PARAMETER_t2, UNIT_PARAMETER_t2));
86  result.insert(std::make_pair(NAME_PARAMETER_a1, UNIT_PARAMETER_a1));
87  result.insert(std::make_pair(NAME_PARAMETER_a2, UNIT_PARAMETER_a2));
88 
89  return result;
90 };
91 
94 {
95  ParameterNamesType result;
96  result.push_back("AUC");
97  result.push_back("FinalTimePoint");
98  result.push_back("FinalUptake");
99  result.push_back("Smax");
100  result.push_back("y-intercept2");
101  result.push_back("y-intercept1");
102 
103  return result;
104 };
105 
108 {
109  return 6;
110 };
111 
113 {
114  ParamterUnitMapType result;
115 
116  result.insert(std::make_pair("AUC", "I*s"));
117  result.insert(std::make_pair("FinalTimePoint", "s"));
118  result.insert(std::make_pair("FinalUptake", "I"));
119  result.insert(std::make_pair("Smax", "I"));
120  result.insert(std::make_pair("y-intercept1", "I"));
121  result.insert(std::make_pair("y-intercept2", "I"));
122 
123 
124 
125 
126  return result;
127 };
128 
131 {
132  //Model Parameters
133  double S0 = (double) parameters[POSITION_PARAMETER_S0];
134  double t1 = (double) parameters[POSITION_PARAMETER_t1] ;
135  double t2 = (double) parameters[POSITION_PARAMETER_t2] ;
136  double a1 = (double) parameters[POSITION_PARAMETER_a1] ;
137  double a2 = (double) parameters[POSITION_PARAMETER_a2] ;
138 
139 
140  double b1 = S0-a1*t1 ;
141  double b2 = (a1*t2+ b1) - (a2*t2);
142 
143  ModelResultType signal(m_TimeGrid.GetSize());
144 
145  TimeGridType::const_iterator timeGridEnd = m_TimeGrid.end();
146  ModelResultType::iterator signalPos = signal.begin();
147 
148  for (TimeGridType::const_iterator gridPos = m_TimeGrid.begin(); gridPos != timeGridEnd; ++gridPos, ++signalPos)
149  {
150  if((*gridPos) < t1)
151  {
152  *signalPos = S0;
153  }
154  else if ((*gridPos) >= t1 && (*gridPos) <= t2)
155  {
156  *signalPos = a1*(*gridPos)+b1;
157  }
158  else
159  {
160  *signalPos = a2*(*gridPos)+b2;
161  }
162  }
163 
164  return signal;
165 };
166 
168 {
169  ParameterNamesType result;
170 
171  return result;
172 }
173 
175 {
176  return 0;
177 }
178 
181 {
182  //do nothing
183 };
184 
186  const ParameterNameType&) const
187 {
189 
190  //do nothing
191 
192  return result;
193 };
194 
196  const mitk::ModelBase::ParametersType& parameters) const
197 {
198  double S0 = (double) parameters[POSITION_PARAMETER_S0];
199  double tau = (double) parameters[POSITION_PARAMETER_t1] ;
200  double tmax = (double) parameters[POSITION_PARAMETER_t2] ;
201  double s1 = (double) parameters[POSITION_PARAMETER_a1] ;
202  double s2 = (double) parameters[POSITION_PARAMETER_a2] ;
203 
204  unsigned int timeSteps = m_TimeGrid.GetSize();
205 
206  double Taq = 0;
207  Taq = m_TimeGrid.GetElement(timeSteps-1);
208 
209  double b1 = S0-s1*tau;
210  double Smax = s1*tmax+b1;
211  double b2 = Smax-s2*tmax;
212  double AUC = s1/2*(tmax*tmax-tau*tau)
213  +(b1-S0)*(tmax-tau)
214  +s2/2*(Taq*Taq-tmax*tmax)
215  +(b2-S0)*(Taq-tmax);
216  double Sfin = s2*Taq+b2;
217 
219 
220  result.insert(std::make_pair("AUC", AUC));
221  result.insert(std::make_pair("FinalTimePoint", Taq));
222  result.insert(std::make_pair("FinalUptake", Sfin));
223  result.insert(std::make_pair("Smax", Smax));
224  result.insert(std::make_pair("y-intercept1", b1));
225  result.insert(std::make_pair("y-intercept2", b2));
226 
227  return result;
228 };
229 
230 itk::LightObject::Pointer mitk::ThreeStepLinearModel::InternalClone() const
231 {
233 
234  newClone->SetTimeGrid(this->m_TimeGrid);
235 
236  return newClone.GetPointer();
237 };
ParameterNamesType GetStaticParameterNames() const override
ParametersSizeType GetNumberOfDerivedParameters() const override
ParametersSizeType GetNumberOfParameters() const override
static const std::string NAME_PARAMETER_S0
ModelTraitsInterface::ParametersType ParametersType
Definition: mitkModelBase.h:59
static const std::string UNIT_PARAMETER_t1
TimeGridType m_TimeGrid
static const unsigned int POSITION_PARAMETER_S0
static const std::string NAME_PARAMETER_t2
ParametersSizeType GetNumberOfStaticParameters() const override
static const std::string UNIT_PARAMETER_t2
ModelResultType ComputeModelfunction(const ParametersType &parameters) const override
ParamterUnitMapType GetParameterUnits() const override
StaticParameterValuesType GetStaticParameterValue(const ParameterNameType &name) const override
ParameterNamesType GetDerivedParameterNames() const override
static const unsigned int POSITION_PARAMETER_t1
std::string GetModelType() const override
static const std::string NAME_PARAMETER_a2
static const std::string UNIT_PARAMETER_a1
Superclass::ParametersSizeType ParametersSizeType
static const std::string NAME_PARAMETER_a1
std::vector< StaticParameterValueType > StaticParameterValuesType
Definition: mitkModelBase.h:71
bool t2(false)
static const std::string UNIT_PARAMETER_a2
std::map< ParameterNameType, DerivedParameterValueType > DerivedParameterMapType
Definition: mitkModelBase.h:75
ModelTraitsInterface::ModelResultType ModelResultType
Definition: mitkModelBase.h:55
std::string GetXName() const override
itk::LightObject::Pointer InternalClone() const override
ModelTraitsInterface::ParameterNameType ParameterNameType
Definition: mitkModelBase.h:63
DerivedParameterMapType ComputeDerivedParameters(const mitk::ModelBase::ParametersType &parameters) const override
ModelTraitsInterface::ParameterNamesType ParameterNamesType
Definition: mitkModelBase.h:64
static const std::string UNIT_PARAMETER_S0
static const unsigned int NUMBER_OF_PARAMETERS
static const unsigned int POSITION_PARAMETER_t2
static const std::string MODEL_DISPLAY_NAME
FunctionStringType GetFunctionString() const override
static const unsigned int POSITION_PARAMETER_a1
std::map< ParameterNameType, std::string > ParamterUnitMapType
ParameterNamesType GetParameterNames() const override
void SetStaticParameter(const ParameterNameType &name, const StaticParameterValuesType &values) override
static const unsigned int POSITION_PARAMETER_a2
std::string GetModelDisplayName() const override
static const std::string NAME_PARAMETER_t1
ParamterUnitMapType GetDerivedParameterUnits() const override