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