VanLeeuwen2009WntSwatCellCycleOdeSystem.cpp

00001 /*
00002 
00003 Copyright (C) University of Oxford, 2005-2010
00004 
00005 University of Oxford means the Chancellor, Masters and Scholars of the
00006 University of Oxford, having an administrative office at Wellington
00007 Square, Oxford OX1 2JD, UK.
00008 
00009 This file is part of Chaste.
00010 
00011 Chaste is free software: you can redistribute it and/or modify it
00012 under the terms of the GNU Lesser General Public License as published
00013 by the Free Software Foundation, either version 2.1 of the License, or
00014 (at your option) any later version.
00015 
00016 Chaste is distributed in the hope that it will be useful, but WITHOUT
00017 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00018 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
00019 License for more details. The offer of Chaste under the terms of the
00020 License is subject to the License being interpreted in accordance with
00021 English Law and subject to any action against the University of Oxford
00022 being under the jurisdiction of the English Courts.
00023 
00024 You should have received a copy of the GNU Lesser General Public License
00025 along with Chaste. If not, see <http://www.gnu.org/licenses/>.
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(); // set up parameter values
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; // for healthy cells
00081     double sigma_B = 0.0; // for healthy cells
00082 
00083     if (!mpMutationState)
00084     {
00085         // No mutations specified
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     // Other mutations have no effect.
00100 
00101     // Cell-specific initial conditions
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); // Destruction complex (APC/Axin/GSK3B)
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);  // Axin
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); // beta-catenin to be ubiquitinated
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); // Open form beta-catenin
00116 
00117     double steady_Cc = steady_Cf - steady_Co;
00118 
00119     if ((steady_Cc < 0) && (steady_Cc+100*DBL_EPSILON > 0) ) // stop protein values going -ve
00120     {
00121         steady_Cc = 0.0;
00122     }
00123     SetInitialConditionsComponent(9, steady_Cc); // Closed form beta-catenin
00124 
00125     SetInitialConditionsComponent(12, mSa/mDa);  // 'Free' adhesion molecules
00126 
00127     SetInitialConditionsComponent(13, mSa*mSca*steady_Co/(mDa*mDca)); // Co-A Adhesion complex
00128 
00129     SetInitialConditionsComponent(15, mSt/mDt); // `Free' transcription molecules (TCF)
00130 
00131     SetInitialConditionsComponent(16, mSct*mSt*steady_Co/(mDt*mDct)); // Co-T open form beta-catenin/TCF
00132 
00133     SetInitialConditionsComponent(17, mSct*mSt*steady_Cc/(mDt*mDct)); // Cc-T closed beta-catenin/TCF
00134 
00135     temp = (mSct*mSt*mSy*steady_Cf)/(mDy*(mSct*mSt*steady_Cf + mDct*mDt*mKt));
00136     SetInitialConditionsComponent(20, temp); // Wnt target protein
00137 
00138     SetInitialConditionsComponent(21, wntLevel); // Wnt stimulus
00139 }
00140 
00141 void VanLeeuwen2009WntSwatCellCycleOdeSystem::SetMutationState(boost::shared_ptr<AbstractCellMutationState> pMutationState)
00142 {
00143     mpMutationState = pMutationState;
00144 }
00145 
00146 VanLeeuwen2009WntSwatCellCycleOdeSystem::~VanLeeuwen2009WntSwatCellCycleOdeSystem()
00147 {
00148     // Do nothing
00149 }
00150 
00151 void VanLeeuwen2009WntSwatCellCycleOdeSystem::Init()
00152 {
00153     // Swat (2004) parameters
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     // Value of the mitogenic factor to make the van Leeuwen model influence cell cycle just the same
00180     double mitogenic_factorF = 1.0/25.0;
00181 
00182     // Non-dimensionalise parameters
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     // Initialize van Leeuwen model parameters
00206     mSa = 20;   //  nM/h
00207     mSca = 250; //  (nMh)^-1
00208     mSc = 25;   //  nM/h
00209     mSct = 30;  //  (nMh)^-1
00210     mSd = 100;  //  h^-1
00211     mSt = 10;   //  nM/h
00212     mSx = 10;   //  nM/h
00213     mSy = 10;   //  h^-1
00214     mDa = 2;    //  h^-1
00215     mDca = 350; //  h^-1
00216     mDc = 1;    //  h^-1
00217     mDct = 750; //  h^-1
00218     mDd = 5;    //  h^-1
00219     mDdx = 5;   //  h^-1
00220     mDt = 0.4;  //  h^-1
00221     mDu = 50;   //  h^-1
00222     mDx = 100;  //  h^-1
00223     mDy = 1;    //  h^-1
00224     mKc = 200;  //  nM
00225     mKd = 5;    //  nM
00226     mKt = 50;   //  nM
00227     mPc = 0.0;  //  h^-1
00228     mPu = 100;  //  h^-1
00229     mXiD = 5;   //  h^-1
00230     mXiDx = 5;  //  h^-1
00231     mXiX = 200; //  h^-1
00232     if (mHypothesis==1)
00233     {
00234         mXiC = 0.0; //  h^-1 (FOR HYPOTHESIS ONE)
00235     }
00236     else
00237     {
00238         mXiC = 5000.0;   //  h^-1 (FOR HYPOTHESIS TWO)
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     // Bit back-to-front, but work out the Wnt section first...
00257 
00258     // Variables
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     // Totals
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;   // for healthy cells
00289     double sigma_B = 0.0;   // for healthy cells
00290 
00291     if (!mpMutationState)
00292     {
00293         // No mutations specified
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     // Other mutations have no effect.
00308 
00309     // Now the cell cycle stuff...
00310 
00311     // dr
00312     dx1 = e/(mKm1d+e)*mJ11d/(mJ11d+r)*mJ61d/(mJ61d+p) - mk16d*r*j+mk61d*p-mphi_r*r;
00313     // de
00314     dx2 = mkpd+mk2d*(mad*mad+e*e)/(1+e*e)*mJ12d/(mJ12d+r)*mJ62d/(mJ62d+p) - e;
00315     // di - changed to include Ct+Mt - transcriptional beta-catenin
00316     dx3 = mk3d*(Ct+Mt) + mk23d*e*mJ13d/(mJ13d+r)*mJ63d/(mJ63d+p) + mk43d*j - mk34d*i*j/(1+j) - mphi_i*i;
00317     // dj
00318     dx4 = mk34d*i*j/(1+j) - (mk43d+mphi_j)*j;
00319     // dp
00320     dx5 = mk16d*r*j - mk61d*p - mphi_p*p;
00321 
00322     double factor = mPhiE2F1*60.0;  // Convert non-dimensional d/dt s to d/dt in hours.
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     // The van Leeuwen ODE system
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;  // don't interfere with Wnt stimulus
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");  // Destruction complex (APC/Axin/GSK3B)
00400     this->mVariableUnits.push_back("nM");
00401     this->mInitialConditions.push_back(NAN); // will be filled in later
00402 
00403     this->mVariableNames.push_back("X");  // Axin
00404     this->mVariableUnits.push_back("nM");
00405     this->mInitialConditions.push_back(NAN); // will be filled in later
00406 
00407     this->mVariableNames.push_back("Cu"); // beta-catenin to be ubiquitinated
00408     this->mVariableUnits.push_back("nM");
00409     this->mInitialConditions.push_back(NAN); // will be filled in later
00410 
00411     this->mVariableNames.push_back("Co"); // Open form beta-catenin
00412     this->mVariableUnits.push_back("nM");
00413     this->mInitialConditions.push_back(NAN); // will be filled in later
00414 
00415     this->mVariableNames.push_back("Cc"); // Closed form beta-catenin
00416     this->mVariableUnits.push_back("nM");
00417     this->mInitialConditions.push_back(NAN); // will be filled in later
00418 
00419     this->mVariableNames.push_back("Mo"); // Open form mutant beta-catenin
00420     this->mVariableUnits.push_back("nM");
00421     this->mInitialConditions.push_back(0.0);
00422 
00423     this->mVariableNames.push_back("Mc"); // Closed form mutant beta-catenin
00424     this->mVariableUnits.push_back("nM");
00425     this->mInitialConditions.push_back(0.0);
00426 
00427     this->mVariableNames.push_back("A");  // 'Free' adhesion molecules
00428     this->mVariableUnits.push_back("nM");
00429     this->mInitialConditions.push_back(NAN); // will be filled in later
00430 
00431     this->mVariableNames.push_back("Ca"); // Co-A Adhesion complex
00432     this->mVariableUnits.push_back("nM");
00433     this->mInitialConditions.push_back(NAN); // will be filled in later
00434 
00435     this->mVariableNames.push_back("Ma"); // Mo-A Mutant adhesion complex
00436     this->mVariableUnits.push_back("nM");
00437     this->mInitialConditions.push_back(0.0);
00438 
00439     this->mVariableNames.push_back("T"); // `Free' transcription molecules (TCF)
00440     this->mVariableUnits.push_back("nM");
00441     this->mInitialConditions.push_back(NAN); // will be filled in later
00442 
00443     this->mVariableNames.push_back("Cot"); // Co-T open form beta-catenin/TCF
00444     this->mVariableUnits.push_back("nM");
00445     this->mInitialConditions.push_back(NAN); // will be filled in later
00446 
00447     this->mVariableNames.push_back("Cct"); // Cc-T closed beta-catenin/TCF
00448     this->mVariableUnits.push_back("nM");
00449     this->mInitialConditions.push_back(NAN); // will be filled in later
00450 
00451     this->mVariableNames.push_back("Mot"); // Mo-T open form mutant beta-catenin/TCF
00452     this->mVariableUnits.push_back("nM");
00453     this->mInitialConditions.push_back(0.0);
00454 
00455     this->mVariableNames.push_back("Mct"); // Mc-T closed form mutant beta-catenin/TCF
00456     this->mVariableUnits.push_back("nM");
00457     this->mInitialConditions.push_back(0.0);
00458 
00459     this->mVariableNames.push_back("Y"); // Wnt target protein
00460     this->mVariableUnits.push_back("nM");
00461     this->mInitialConditions.push_back(NAN); // will be filled in later
00462 
00463     this->mVariableNames.push_back("Sw"); // Wnt stimulus
00464     this->mVariableUnits.push_back("nM");
00465     this->mInitialConditions.push_back(NAN); // will be filled in later
00466 
00467     this->mInitialised = true;
00468 }

Generated by  doxygen 1.6.2