diff --git a/src/protocols/MyDiffusionModel/mydiffusionmodel.cpp b/src/protocols/MyDiffusionModel/mydiffusionmodel.cpp new file mode 100644 --- /dev/null +++ b/src/protocols/MyDiffusionModel/mydiffusionmodel.cpp @@ -0,0 +1,90 @@ +/* + * + * This file is part of the Virtual Leaf. + * + * The Virtual Leaf is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The Virtual Leaf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Virtual Leaf. If not, see . + * + * Copyright 2010 Roeland Merks. + * + */ + +#include +#include +#include + +#include "simplugin.h" +#include "parameter.h" +#include "wallbase.h" +#include "cellbase.h" +#include "mydiffusionmodel.h" + +QString Mydiffusionmodel::ModelID(void) { + // specify the name of your model here + return QString( "Diffusion dependent coloriing" ); +} + +// return the number of chemicals your model uses +int Mydiffusionmodel::NChem(void) { return 4; } + +// To be executed after cell division +void Mydiffusionmodel::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) { + // rules to be executed after cell division go here + // (e.g., cell differentiation rules) +} + +void Mydiffusionmodel::SetCellColor(CellBase *c, QColor *color) { + // add cell coloring rules here + double red=c->Chemical(1)/(1.+c->Chemical(1)); + double green=c->Chemical(0)/(1.+c->Chemical(0)); + double blue=c->Chemical(3)/(1.+c->Chemical(3)); + color->setRgbF(red,green,blue); +} + +void Mydiffusionmodel::CellHouseKeeping(CellBase *c) { + // add cell behavioral rules here + + if (c->Chemical(0) < 0.5){ + c->EnlargeTargetArea(par->cell_expansion_rate); + } + + if(c->Area() > 2*c->BaseArea()){ + c->Divide(); + } +} + +void Mydiffusionmodel::CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2) { + // add biochemical transport rules here +} + +void Mydiffusionmodel::WallDynamics(Wall *w, double *dw1, double *dw2) { + // add biochemical networks for reactions occuring at walls here +} + +void Mydiffusionmodel::CellDynamics(CellBase *c, double *dchem) { + // add biochemical networks for intracellular reactions here + double Y = c->Chemical(0), + A = c->Chemical(1), + H = c->Chemical(2), + S = c->Chemical(3); + + dchem[0] = ( par->d * A - par->e * Y + Y*Y/(1 + par->f * Y*Y ) ); + dchem[1] = ( par->c * A*A*S/H - par->mu * A + par->rho0*Y ); + dchem[2] = ( par->c * A*A*S - par->nu*H + par->rho1*Y ); + dchem[3] = ( par->c0 - par->gamma*S - par->eps * Y * S ); +} + + +Q_EXPORT_PLUGIN2(mydiffusionmodel, Mydiffusionmodel) + +// finis