Files
@ bd77d1217180
Branch filter:
Location: EI/VirtualLeaf/src/protocols/MyAuxinModel/myauxinmodel.cpp
bd77d1217180
3.8 KiB
text/x-c++src
Added first auxin transport protocol: Auxin upstream pumping.
--
user: Michael Guravage <michael.guravage@cwi.nl>
branch 'default'
added data/leaves/myAuxin.xml
added src/protocols/MyAuxinModel/Makefile
added src/protocols/MyAuxinModel/myauxinmodel.cpp
added src/protocols/MyAuxinModel/myauxinmodel.h
added src/protocols/MyAuxinModel/myauxinmodel.pro
changed src/protocols/Makefile
--
user: Michael Guravage <michael.guravage@cwi.nl>
branch 'default'
added data/leaves/myAuxin.xml
added src/protocols/MyAuxinModel/Makefile
added src/protocols/MyAuxinModel/myauxinmodel.cpp
added src/protocols/MyAuxinModel/myauxinmodel.h
added src/protocols/MyAuxinModel/myauxinmodel.pro
changed src/protocols/Makefile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | /*
*
* 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 <http://www.gnu.org/licenses/>.
*
* Copyright 2010 Roeland Merks.
*
*/
#include <QObject>
#include <QtGui>
#include <QDebug>
#include "simplugin.h"
#include "parameter.h"
#include "wallbase.h"
#include "cellbase.h"
#include "myauxinmodel.h"
#include "flux_function.h"
#include "math.h"
#include "random.h"
QString MyAuxinModel::ModelID(void) {
// specify the name of your model here
return QString( "Auxin upstream pumping" );
}
// return the number of chemicals your model uses
int MyAuxinModel::NChem(void) { return 2; }
// To be executed after cell division
void MyAuxinModel::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
// rules to be executed after cell division go here
// (e.g., cell differentiation rules)
}
void MyAuxinModel::SetCellColor(CellBase *c, QColor *color) {
// add cell coloring rules here
double colour;
colour = c->Chemical(1) / (1.0 + c->Chemical(1));
double red = (colour < 0.0) ? 0.0 : (colour > 1.0) ? 1.0 : colour;
colour = c->Chemical(0) / (1.0 + c->Chemical(0));
double green = (colour < 0.0) ? 0.0 : (colour > 1.0) ? 1.0 : colour;
colour = c->Chemical(3) / (1.0 + c->Chemical(3));
double blue = (colour < 0.0) ? 0.0 : (colour > 1.0) ? 1.0 : colour;
if ((red < 0 || red > 1) || (green < 0 || green > 1) || (blue < 0 || blue > 1))
qDebug() << "COLORS OUT OF RANGE: red: " << red << ", green: " << green << ", blue: " << blue << endl;
color->setRgbF(red, green, blue);
}
void MyAuxinModel::CellHouseKeeping(CellBase *c) {
// add cell behavioral rules here
}
void MyAuxinModel::CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2) {
for (int c=0; c<NChem(); c++) {
// diffusive transport
double phi = w->Length() * ( par->D[c] ) *
( w->C2()->Chemical(c) - w->C1()->Chemical(c) );
dchem_c1[c] += phi;
dchem_c2[c] -= phi;
}
// active transport
// efflux from cell 1 to cell 2
double trans12 = ( par->transport * w->Transporters1(1) *
w->C1()->Chemical(0) / (par->ka + w->C1()->Chemical(0)) );
// efflux from cell 2 to cell 1
double trans21 = ( par->transport * w->Transporters2(1) *
w->C2()->Chemical(0) / (par->ka + w->C2()->Chemical(0)) );
dchem_c1[0] += trans21 - trans12;
dchem_c2[0] += trans12 - trans21;
}
void MyAuxinModel::WallDynamics(Wall *w, double *dw1, double *dw2){
// add biochemical networks for reactions occurring at walls here
}
void MyAuxinModel::CellDynamics(CellBase *c, double *dchem) {
// add biochemical networks for intracellular reactions here
}
double MyAuxinModel::PINflux(CellBase *this_cell, CellBase *adjacent_cell, Wall *w) {
// calculate PIN translocation rate from cell to membrane
double adj_auxin = adjacent_cell->Chemical(0);
double receptor_level = adj_auxin * par->r / (par->kr + adj_auxin);
double pin_atwall; // pick the correct side of the Wall
if (w->C1() == this_cell){
pin_atwall = w->Transporters1(1);
}
else{
pin_atwall=w->Transporters2(1);
}
double pin_flux = par->k1 * this_cell->Chemical(1) *
receptor_level / ( par->km + this_cell->Chemical(1) ) - par->k2 * w->Transporters1(1);
return pin_flux;
}
Q_EXPORT_PLUGIN2(myauxinmodel, MyAuxinModel)
// finis
|