VanLeeuwen2009WntSwatCellCycleOdeSystem.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "VanLeeuwen2009WntSwatCellCycleOdeSystem.hpp"
00030 #include "CellwiseOdeSystemInformation.hpp"
00031
00032 VanLeeuwen2009WntSwatCellCycleOdeSystem::VanLeeuwen2009WntSwatCellCycleOdeSystem(
00033 unsigned hypothesis,
00034 double wntLevel,
00035 boost::shared_ptr<AbstractCellMutationState> pMutationState)
00036 : AbstractOdeSystem(22),
00037 mpMutationState(pMutationState),
00038 mHypothesis(hypothesis)
00039 {
00040 if (hypothesis!=1u && hypothesis!=2u)
00041 {
00042 EXCEPTION("You must set up this cell cycle ODE system with hypothesis one or two.");
00043 }
00044
00045 mpSystemInfo.reset(new CellwiseOdeSystemInformation<VanLeeuwen2009WntSwatCellCycleOdeSystem>);
00046
00073 Init();
00074
00075 double d_d_hat = mDd + mXiD*wntLevel;
00076 double d_d_x_hat = mDdx + mXiDx*wntLevel;
00077 double d_x_hat = mDx + mXiX*wntLevel;
00078 double p_c_hat = mPc + mXiC*wntLevel;
00079
00080 double sigma_D = 0.0;
00081 double sigma_B = 0.0;
00082
00083 if (!mpMutationState)
00084 {
00085
00086 }
00087 else if (mpMutationState->IsType<ApcOneHitCellMutationState>())
00088 {
00089 sigma_D = 0.5;
00090 }
00091 else if (mpMutationState->IsType<ApcTwoHitCellMutationState>())
00092 {
00093 sigma_D = 1.0;
00094 }
00095 else if (mpMutationState->IsType<BetaCateninOneHitCellMutationState>())
00096 {
00097 sigma_B = 0.5;
00098 }
00099
00100
00101
00102 double steady_D = ((1.0-sigma_D)*mSd*mSx)/((1.0-sigma_D)*mSd*d_d_hat + d_x_hat*(d_d_hat + d_d_x_hat));
00103 SetInitialConditionsComponent(5, steady_D);
00104
00105 double temp = (mSx*(d_d_hat+d_d_x_hat))/((1.0-sigma_D)*mSd*d_d_hat+d_x_hat*(d_d_hat+d_d_x_hat));
00106 SetInitialConditionsComponent(6, temp);
00107
00108 double steady_Cf = ((mSc-mDc*mKd - mPu*steady_D)+sqrt(SmallPow((mSc-mDc*mKd - mPu*steady_D),2) + (4.0*mSc*mDc*mKd)))/(2.0*mDc);
00109 temp = (mPu*steady_D*steady_Cf)/(mDu*(steady_Cf+mKd));
00110 SetInitialConditionsComponent(7, temp);
00111
00112 double theta = mDc + (mPu*steady_D)/(steady_Cf + mKd);
00113
00114 double steady_Co = ( mSc - p_c_hat - theta*mKc + sqrt(4.0*mSc*theta*mKc + SmallPow((mSc - p_c_hat - theta*mKc),2)) )/(2.0*theta);
00115 SetInitialConditionsComponent(8, steady_Co);
00116
00117 double steady_Cc = steady_Cf - steady_Co;
00118
00119 if ((steady_Cc < 0) && (steady_Cc+100*DBL_EPSILON > 0) )
00120 {
00121 steady_Cc = 0.0;
00122 }
00123 SetInitialConditionsComponent(9, steady_Cc);
00124
00125 SetInitialConditionsComponent(12, mSa/mDa);
00126
00127 SetInitialConditionsComponent(13, mSa*mSca*steady_Co/(mDa*mDca));
00128
00129 SetInitialConditionsComponent(15, mSt/mDt);
00130
00131 SetInitialConditionsComponent(16, mSct*mSt*steady_Co/(mDt*mDct));
00132
00133 SetInitialConditionsComponent(17, mSct*mSt*steady_Cc/(mDt*mDct));
00134
00135 temp = (mSct*mSt*mSy*steady_Cf)/(mDy*(mSct*mSt*steady_Cf + mDct*mDt*mKt));
00136 SetInitialConditionsComponent(20, temp);
00137
00138 SetInitialConditionsComponent(21, wntLevel);
00139 }
00140
00141 void VanLeeuwen2009WntSwatCellCycleOdeSystem::SetMutationState(boost::shared_ptr<AbstractCellMutationState> pMutationState)
00142 {
00143 mpMutationState = pMutationState;
00144 }
00145
00146 VanLeeuwen2009WntSwatCellCycleOdeSystem::~VanLeeuwen2009WntSwatCellCycleOdeSystem()
00147 {
00148
00149 }
00150
00151 void VanLeeuwen2009WntSwatCellCycleOdeSystem::Init()
00152 {
00153
00154 double k1 = 1.0;
00155 double k2 = 1.6;
00156 double k3 = 0.05;
00157 double k16 = 0.4;
00158 double k34 = 0.04;
00159 double k43 = 0.01;
00160 double k61 = 0.3;
00161 double k23 = 0.3;
00162 double a = 0.04;
00163 double J11 = 0.5;
00164 double J12 = 5.0;
00165 double J61 = 5.0;
00166 double J62 = 8.0;
00167 double J13 = 0.002;
00168 double J63 = 2.0;
00169 double Km1 = 0.5;
00170 double Km2 = 4.0;
00171 double Km4 = 0.3;
00172 double kp = 0.05;
00173 double phi_pRb = 0.005;
00174 double phi_E2F1 = 0.1;
00175 double phi_CycDi = 0.023;
00176 double phi_CycDa = 0.03;
00177 double phi_pRbp = 0.06;
00178
00179
00180 double mitogenic_factorF = 1.0/25.0;
00181
00182
00183 mk2d = k2/(Km2*phi_E2F1);
00184 mk3d = k3*mitogenic_factorF/(Km4*phi_E2F1);
00185 mk34d = k34/phi_E2F1;
00186 mk43d = k43/phi_E2F1;
00187 mk23d = k23*Km2/(Km4*phi_E2F1);
00188 mad = a/Km2;
00189 mJ11d = J11*phi_E2F1/k1;
00190 mJ12d = J12*phi_E2F1/k1;
00191 mJ13d = J13*phi_E2F1/k1;
00192 mJ61d = J61*phi_E2F1/k1;
00193 mJ62d = J62*phi_E2F1/k1;
00194 mJ63d = J63*phi_E2F1/k1;
00195 mKm1d = Km1/Km2;
00196 mkpd = kp/(Km2*phi_E2F1);
00197 mphi_r = phi_pRb/phi_E2F1;
00198 mphi_i = phi_CycDi/phi_E2F1;
00199 mphi_j = phi_CycDa/phi_E2F1;
00200 mphi_p = phi_pRbp/phi_E2F1;
00201 mk16d = k16*Km4/phi_E2F1;
00202 mk61d = k61/phi_E2F1;
00203 mPhiE2F1 = phi_E2F1;
00204
00205
00206 mSa = 20;
00207 mSca = 250;
00208 mSc = 25;
00209 mSct = 30;
00210 mSd = 100;
00211 mSt = 10;
00212 mSx = 10;
00213 mSy = 10;
00214 mDa = 2;
00215 mDca = 350;
00216 mDc = 1;
00217 mDct = 750;
00218 mDd = 5;
00219 mDdx = 5;
00220 mDt = 0.4;
00221 mDu = 50;
00222 mDx = 100;
00223 mDy = 1;
00224 mKc = 200;
00225 mKd = 5;
00226 mKt = 50;
00227 mPc = 0.0;
00228 mPu = 100;
00229 mXiD = 5;
00230 mXiDx = 5;
00231 mXiX = 200;
00232 if (mHypothesis==1)
00233 {
00234 mXiC = 0.0;
00235 }
00236 else
00237 {
00238 mXiC = 5000.0;
00239 }
00240 }
00241
00242 void VanLeeuwen2009WntSwatCellCycleOdeSystem::EvaluateYDerivatives(double time, const std::vector<double>& rY, std::vector<double>& rDY)
00243 {
00244 double r = rY[0];
00245 double e = rY[1];
00246 double i = rY[2];
00247 double j = rY[3];
00248 double p = rY[4];
00249
00250 double dx1 = 0.0;
00251 double dx2 = 0.0;
00252 double dx3 = 0.0;
00253 double dx4 = 0.0;
00254 double dx5 = 0.0;
00255
00256
00257
00258
00259 double D = rY[5];
00260 double X = rY[6];
00261 double Cu = rY[7];
00262 double Co = rY[8];
00263 double Cc = rY[9];
00264 double Mo = rY[10];
00265 double Mc = rY[11];
00266 double A = rY[12];
00267 double Ca = rY[13];
00268 double Ma = rY[14];
00269 double T = rY[15];
00270 double Cot = rY[16];
00271 double Cct = rY[17];
00272 double Mot = rY[18];
00273 double Mct = rY[19];
00274 double Y = rY[20];
00275 double stimulus_wnt = rY[21];
00276
00277
00278 double Cf = Cc+Co;
00279 double Ct = Cct+Cot;
00280 double Mf = Mc+Mo;
00281 double Mt = Mct+Mot;
00282
00283 double d_d_hat = mDd + mXiD*stimulus_wnt;
00284 double d_d_x_hat = mDdx + mXiDx*stimulus_wnt;
00285 double d_x_hat = mDx + mXiX*stimulus_wnt;
00286 double p_c_hat = mPc + mXiC*stimulus_wnt;
00287
00288 double sigma_D = 0.0;
00289 double sigma_B = 0.0;
00290
00291 if (!mpMutationState)
00292 {
00293
00294 }
00295 else if (mpMutationState->IsType<ApcOneHitCellMutationState>())
00296 {
00297 sigma_D = 0.5;
00298 }
00299 else if (mpMutationState->IsType<ApcTwoHitCellMutationState>())
00300 {
00301 sigma_D = 1.0;
00302 }
00303 else if (mpMutationState->IsType<BetaCateninOneHitCellMutationState>())
00304 {
00305 sigma_B = 0.5;
00306 }
00307
00308
00309
00310
00311
00312 dx1 = e/(mKm1d+e)*mJ11d/(mJ11d+r)*mJ61d/(mJ61d+p) - mk16d*r*j+mk61d*p-mphi_r*r;
00313
00314 dx2 = mkpd+mk2d*(mad*mad+e*e)/(1+e*e)*mJ12d/(mJ12d+r)*mJ62d/(mJ62d+p) - e;
00315
00316 dx3 = mk3d*(Ct+Mt) + mk23d*e*mJ13d/(mJ13d+r)*mJ63d/(mJ63d+p) + mk43d*j - mk34d*i*j/(1+j) - mphi_i*i;
00317
00318 dx4 = mk34d*i*j/(1+j) - (mk43d+mphi_j)*j;
00319
00320 dx5 = mk16d*r*j - mk61d*p - mphi_p*p;
00321
00322 double factor = mPhiE2F1*60.0;
00323
00324 rDY[0] = dx1*factor;
00325 rDY[1] = dx2*factor;
00326 rDY[2] = dx3*factor;
00327 rDY[3] = dx4*factor;
00328 rDY[4] = dx5*factor;
00329
00330
00331 rDY[5] = (1.0-sigma_D)*mSd*X - (d_d_hat + d_d_x_hat)*D;
00332 rDY[6] = mSx - (1.0-sigma_D)*mSd*X - d_x_hat*X + d_d_x_hat*D;
00333 rDY[7] = (mPu*D*Cf)/(Cf+mKd) - mDu*Cu;
00334
00335 rDY[8] = (1.0-sigma_B)*mSc + mDca*Ca + mDct*Cot - (mSca*A + mSct*T + mDc)*Co
00336 - (p_c_hat*Co)/(Co + Mo + mKc) - (mPu*D*Co)/(Cf+mKd);
00337
00338 rDY[9] = (p_c_hat*Co)/(Co + Mo + mKc) + mDct*Cct - (mSct*T + mDc)*Cc
00339 - (mPu*D*Cc)/(Cf+mKd);
00340
00341 rDY[10] = sigma_B*mSc + mDca*Ma + mDct*Mot - (mSca*A + mSct*T + mDc)*Mo
00342 - (p_c_hat*Mo)/(Co + Mo + mKc);
00343
00344 rDY[11] = (p_c_hat*Mo)/(Co + Mo + mKc) + mDct*Mct - (mSct*T + mDc)*Mc;
00345 rDY[12] = mSa + mDca*(Ca+Ma) - (mSca*(Co+Mo) + mDa)*A;
00346 rDY[13] = mSca*Co*A - mDca*Ca;
00347 rDY[14] = mSca*Mo*A - mDca*Ma;
00348 rDY[15] = mSt + mDct*(Ct+Mt) - mSct*(Cf+Mf)*T - mDt*T;
00349 rDY[16] = mSct*Co*T - mDct*Cot;
00350 rDY[17] = mSct*Cc*T - mDct*Cct;
00351 rDY[18] = mSct*Mo*T - mDct*Mot;
00352 rDY[19] = mSct*Mc*T - mDct*Mct;
00353 rDY[20] = (mSy*(Ct+Mt))/(Ct + Mt + mKt) - mDy*Y;
00354 rDY[21] = 0.0;
00355 }
00356
00357 boost::shared_ptr<AbstractCellMutationState> VanLeeuwen2009WntSwatCellCycleOdeSystem::GetMutationState()
00358 {
00359 return mpMutationState;
00360 }
00361
00362 bool VanLeeuwen2009WntSwatCellCycleOdeSystem::CalculateStoppingEvent(double time, const std::vector<double>& rY)
00363 {
00364 std::vector<double> dy(rY.size());
00365 EvaluateYDerivatives(time, rY, dy);
00366
00367 return (rY[1] > 1.0 && dy[1] > 0.0);
00368 }
00369
00370 double VanLeeuwen2009WntSwatCellCycleOdeSystem::CalculateRootFunction(double time, const std::vector<double>& rY)
00371 {
00372 return rY[1]-1.0;
00373 }
00374
00375
00376 template<>
00377 void CellwiseOdeSystemInformation<VanLeeuwen2009WntSwatCellCycleOdeSystem>::Initialise()
00378 {
00379 this->mVariableNames.push_back("pRb");
00380 this->mVariableUnits.push_back("non_dim");
00381 this->mInitialConditions.push_back(7.357000000000000e-01);
00382
00383 this->mVariableNames.push_back("E2F1");
00384 this->mVariableUnits.push_back("non_dim");
00385 this->mInitialConditions.push_back(1.713000000000000e-01);
00386
00387 this->mVariableNames.push_back("CycD_i");
00388 this->mVariableUnits.push_back("non_dim");
00389 this->mInitialConditions.push_back(6.900000000000001e-02);
00390
00391 this->mVariableNames.push_back("CycD_a");
00392 this->mVariableUnits.push_back("non_dim");
00393 this->mInitialConditions.push_back(3.333333333333334e-03);
00394
00395 this->mVariableNames.push_back("pRb_p");
00396 this->mVariableUnits.push_back("non_dim");
00397 this->mInitialConditions.push_back(1.000000000000000e-04);
00398
00399 this->mVariableNames.push_back("D");
00400 this->mVariableUnits.push_back("nM");
00401 this->mInitialConditions.push_back(NAN);
00402
00403 this->mVariableNames.push_back("X");
00404 this->mVariableUnits.push_back("nM");
00405 this->mInitialConditions.push_back(NAN);
00406
00407 this->mVariableNames.push_back("Cu");
00408 this->mVariableUnits.push_back("nM");
00409 this->mInitialConditions.push_back(NAN);
00410
00411 this->mVariableNames.push_back("Co");
00412 this->mVariableUnits.push_back("nM");
00413 this->mInitialConditions.push_back(NAN);
00414
00415 this->mVariableNames.push_back("Cc");
00416 this->mVariableUnits.push_back("nM");
00417 this->mInitialConditions.push_back(NAN);
00418
00419 this->mVariableNames.push_back("Mo");
00420 this->mVariableUnits.push_back("nM");
00421 this->mInitialConditions.push_back(0.0);
00422
00423 this->mVariableNames.push_back("Mc");
00424 this->mVariableUnits.push_back("nM");
00425 this->mInitialConditions.push_back(0.0);
00426
00427 this->mVariableNames.push_back("A");
00428 this->mVariableUnits.push_back("nM");
00429 this->mInitialConditions.push_back(NAN);
00430
00431 this->mVariableNames.push_back("Ca");
00432 this->mVariableUnits.push_back("nM");
00433 this->mInitialConditions.push_back(NAN);
00434
00435 this->mVariableNames.push_back("Ma");
00436 this->mVariableUnits.push_back("nM");
00437 this->mInitialConditions.push_back(0.0);
00438
00439 this->mVariableNames.push_back("T");
00440 this->mVariableUnits.push_back("nM");
00441 this->mInitialConditions.push_back(NAN);
00442
00443 this->mVariableNames.push_back("Cot");
00444 this->mVariableUnits.push_back("nM");
00445 this->mInitialConditions.push_back(NAN);
00446
00447 this->mVariableNames.push_back("Cct");
00448 this->mVariableUnits.push_back("nM");
00449 this->mInitialConditions.push_back(NAN);
00450
00451 this->mVariableNames.push_back("Mot");
00452 this->mVariableUnits.push_back("nM");
00453 this->mInitialConditions.push_back(0.0);
00454
00455 this->mVariableNames.push_back("Mct");
00456 this->mVariableUnits.push_back("nM");
00457 this->mInitialConditions.push_back(0.0);
00458
00459 this->mVariableNames.push_back("Y");
00460 this->mVariableUnits.push_back("nM");
00461 this->mInitialConditions.push_back(NAN);
00462
00463 this->mVariableNames.push_back("Sw");
00464 this->mVariableUnits.push_back("nM");
00465 this->mInitialConditions.push_back(NAN);
00466
00467 this->mInitialised = true;
00468 }