diff --git a/src/TutorialCode/Tutorial0/mymodel.cpp b/src/TutorialCode/Tutorial0/mymodel.cpp
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial0/mymodel.cpp
@@ -0,0 +1,69 @@
+/*
+ *
+ * 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 "simplugin.h"
+
+#include "parameter.h"
+
+#include "wallbase.h"
+#include "cellbase.h"
+#include "mymodel.h"
+
+static const std::string _module_id("$Id$");
+
+QString MyModel::ModelID(void) {
+ // specify the name of your model here
+ return QString( "My first model in VirtualLeaf" );
+}
+
+// return the number of chemicals your model uses
+int MyModel::NChem(void) { return 0; }
+
+// To be executed after cell division
+void MyModel::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
+ // rules to be executed after cell division go here
+ // (e.g., cell differentiation rules)
+}
+
+void MyModel::SetCellColor(CellBase *c, QColor *color) {
+ // add cell coloring rules here
+
+}
+
+void MyModel::CellHouseKeeping(CellBase *c) {
+ // add cell behavioral rules here
+}
+
+void MyModel::CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2) {
+ // add biochemical transport rules here
+}
+void MyModel::WallDynamics(Wall *w, double *dw1, double *dw2) {
+ // add biochemical networks for reactions occuring at walls here
+}
+void MyModel::CellDynamics(CellBase *c, double *dchem) {
+ // add biochemical networks for intracellular reactions here
+}
+
+
+Q_EXPORT_PLUGIN2(mymodel, MyModel)
diff --git a/src/TutorialCode/Tutorial0/mymodel.h b/src/TutorialCode/Tutorial0/mymodel.h
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial0/mymodel.h
@@ -0,0 +1,60 @@
+/*
+ * $Id$
+ *
+ * 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"
+
+
+class MyModel : public QObject, SimPluginInterface {
+ Q_OBJECT
+ Q_INTERFACES(SimPluginInterface);
+
+public:
+ virtual QString ModelID(void);
+
+ // Executed after the cellular mechanics steps have equillibrized
+ virtual void CellHouseKeeping (CellBase *c);
+ // Differential equations describing transport of chemicals from cell to cell
+ virtual void CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2);
+
+ // Differential equations describing chemical reactions taking place at or near the cell walls
+ // (e.g. PIN accumulation)
+ virtual void WallDynamics(Wall *w, double *dw1, double *dw2);
+
+ // Differential equations describing chemical reactions inside the cells
+ virtual void CellDynamics(CellBase *c, double *dchem);
+
+ // to be executed after a cell division
+ virtual void OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2);
+
+ // to be executed for coloring a cell
+ virtual void SetCellColor(CellBase *c, QColor *color);
+ // return number of chemicals
+ virtual int NChem(void);
+};
+
+
+
+
diff --git a/src/TutorialCode/Tutorial0/mymodel.pro b/src/TutorialCode/Tutorial0/mymodel.pro
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial0/mymodel.pro
@@ -0,0 +1,61 @@
+#
+# $Id$
+#
+# 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.
+#
+
+
+TARGET = mymodel
+VLEAFHOME = ../../..
+
+CONFIG += release
+CONFIG -= debug
+CONFIG += plugin
+
+BINDIR = $${VLEAFHOME}/bin
+LIBDIR = $${VLEAFHOME}/lib
+INCDIR = $${VLEAFHOME}/src
+DEFINES = QTGRAPHICS # VLEAFPLUGIN
+DESTDIR = $${BINDIR}/models
+HEADERS = $${TARGET}.h
+INCLUDEPATH += $${INCDIR}
+
+QMAKE_CXXFLAGS += -fexceptions #-I$${INCDIR}
+QMAKE_CXXFLAGS_DEBUG += -g3
+QMAKE_CXXFLAGS_DEBUG += -DQDEBUG
+QT += qt3support
+SOURCES = $${TARGET}.cpp
+TEMPLATE = lib
+
+unix {
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -fPIC -I/usr/include/libxml2
+ QMAKE_LFLAGS += -fPIC
+}
+
+win32 {
+ LIBXML2DIR = C:\libxml2
+ LIBICONVDIR = C:\libiconv
+ LIBZDIR = C:\libz
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -DLIBXML_STATIC
+ QMAKE_CXXFLAGS += -I$${LIBXML2DIR}\include -I$${LIBICONVDIR}\include -I$${LIBZDIR}\include
+
+}
+
+# finish
diff --git a/src/TutorialCode/Tutorial1/mymodel.cpp b/src/TutorialCode/Tutorial1/mymodel.cpp
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial1/mymodel.cpp
@@ -0,0 +1,70 @@
+/*
+ *
+ * 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 "simplugin.h"
+
+#include "parameter.h"
+
+#include "wallbase.h"
+#include "cellbase.h"
+#include "mymodel.h"
+
+static const std::string _module_id("$Id$");
+
+QString MyModel::ModelID(void) {
+ // specify the name of your model here
+ return QString( "Cell growth" );
+}
+
+// return the number of chemicals your model uses
+int MyModel::NChem(void) { return 0; }
+
+// To be executed after cell division
+void MyModel::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
+ // rules to be executed after cell division go here
+ // (e.g., cell differentiation rules)
+}
+
+void MyModel::SetCellColor(CellBase *c, QColor *color) {
+ // add cell coloring rules here
+
+}
+
+void MyModel::CellHouseKeeping(CellBase *c) {
+ // add cell behavioral rules here
+ c->EnlargeTargetArea(par->cell_expansion_rate);
+}
+
+void MyModel::CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2) {
+ // add biochemical transport rules here
+}
+void MyModel::WallDynamics(Wall *w, double *dw1, double *dw2) {
+ // add biochemical networks for reactions occuring at walls here
+}
+void MyModel::CellDynamics(CellBase *c, double *dchem) {
+ // add biochemical networks for intracellular reactions here
+}
+
+
+Q_EXPORT_PLUGIN2(mymodel, MyModel)
diff --git a/src/TutorialCode/Tutorial1/mymodel.h b/src/TutorialCode/Tutorial1/mymodel.h
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial1/mymodel.h
@@ -0,0 +1,60 @@
+/*
+ * $Id$
+ *
+ * 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"
+
+
+class MyModel : public QObject, SimPluginInterface {
+ Q_OBJECT
+ Q_INTERFACES(SimPluginInterface);
+
+public:
+ virtual QString ModelID(void);
+
+ // Executed after the cellular mechanics steps have equillibrized
+ virtual void CellHouseKeeping (CellBase *c);
+ // Differential equations describing transport of chemicals from cell to cell
+ virtual void CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2);
+
+ // Differential equations describing chemical reactions taking place at or near the cell walls
+ // (e.g. PIN accumulation)
+ virtual void WallDynamics(Wall *w, double *dw1, double *dw2);
+
+ // Differential equations describing chemical reactions inside the cells
+ virtual void CellDynamics(CellBase *c, double *dchem);
+
+ // to be executed after a cell division
+ virtual void OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2);
+
+ // to be executed for coloring a cell
+ virtual void SetCellColor(CellBase *c, QColor *color);
+ // return number of chemicals
+ virtual int NChem(void);
+};
+
+
+
+
diff --git a/src/TutorialCode/Tutorial1/mymodel.pro b/src/TutorialCode/Tutorial1/mymodel.pro
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial1/mymodel.pro
@@ -0,0 +1,61 @@
+#
+# $Id$
+#
+# 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.
+#
+
+
+TARGET = mymodel
+VLEAFHOME = ../../..
+
+CONFIG += release
+CONFIG -= debug
+CONFIG += plugin
+
+BINDIR = $${VLEAFHOME}/bin
+LIBDIR = $${VLEAFHOME}/lib
+INCDIR = $${VLEAFHOME}/src
+DEFINES = QTGRAPHICS # VLEAFPLUGIN
+DESTDIR = $${BINDIR}/models
+HEADERS = $${TARGET}.h
+INCLUDEPATH += $${INCDIR}
+
+QMAKE_CXXFLAGS += -fexceptions #-I$${INCDIR}
+QMAKE_CXXFLAGS_DEBUG += -g3
+QMAKE_CXXFLAGS_DEBUG += -DQDEBUG
+QT += qt3support
+SOURCES = $${TARGET}.cpp
+TEMPLATE = lib
+
+unix {
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -fPIC -I/usr/include/libxml2
+ QMAKE_LFLAGS += -fPIC
+}
+
+win32 {
+ LIBXML2DIR = C:\libxml2
+ LIBICONVDIR = C:\libiconv
+ LIBZDIR = C:\libz
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -DLIBXML_STATIC
+ QMAKE_CXXFLAGS += -I$${LIBXML2DIR}\include -I$${LIBICONVDIR}\include -I$${LIBZDIR}\include
+
+}
+
+# finish
diff --git a/src/TutorialCode/Tutorial2/mymodel.cpp b/src/TutorialCode/Tutorial2/mymodel.cpp
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial2/mymodel.cpp
@@ -0,0 +1,73 @@
+/*
+ *
+ * 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 "simplugin.h"
+
+#include "parameter.h"
+
+#include "wallbase.h"
+#include "cellbase.h"
+#include "mymodel.h"
+
+static const std::string _module_id("$Id$");
+
+QString MyModel::ModelID(void) {
+ // specify the name of your model here
+ return QString( "Cell growth and cell division" );
+}
+
+// return the number of chemicals your model uses
+int MyModel::NChem(void) { return 0; }
+
+// To be executed after cell division
+void MyModel::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
+ // rules to be executed after cell division go here
+ // (e.g., cell differentiation rules)
+}
+
+void MyModel::SetCellColor(CellBase *c, QColor *color) {
+ // add cell coloring rules here
+
+}
+
+void MyModel::CellHouseKeeping(CellBase *c) {
+ // add cell behavioral rules here
+ c->EnlargeTargetArea(par->cell_expansion_rate);
+ if (c->Area() > par->rel_cell_div_threshold * c->BaseArea()) {
+ c->Divide();
+ }
+}
+
+void MyModel::CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2) {
+ // add biochemical transport rules here
+}
+void MyModel::WallDynamics(Wall *w, double *dw1, double *dw2) {
+ // add biochemical networks for reactions occuring at walls here
+}
+void MyModel::CellDynamics(CellBase *c, double *dchem) {
+ // add biochemical networks for intracellular reactions here
+}
+
+
+Q_EXPORT_PLUGIN2(mymodel, MyModel)
diff --git a/src/TutorialCode/Tutorial2/mymodel.h b/src/TutorialCode/Tutorial2/mymodel.h
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial2/mymodel.h
@@ -0,0 +1,60 @@
+/*
+ * $Id$
+ *
+ * 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"
+
+
+class MyModel : public QObject, SimPluginInterface {
+ Q_OBJECT
+ Q_INTERFACES(SimPluginInterface);
+
+public:
+ virtual QString ModelID(void);
+
+ // Executed after the cellular mechanics steps have equillibrized
+ virtual void CellHouseKeeping (CellBase *c);
+ // Differential equations describing transport of chemicals from cell to cell
+ virtual void CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2);
+
+ // Differential equations describing chemical reactions taking place at or near the cell walls
+ // (e.g. PIN accumulation)
+ virtual void WallDynamics(Wall *w, double *dw1, double *dw2);
+
+ // Differential equations describing chemical reactions inside the cells
+ virtual void CellDynamics(CellBase *c, double *dchem);
+
+ // to be executed after a cell division
+ virtual void OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2);
+
+ // to be executed for coloring a cell
+ virtual void SetCellColor(CellBase *c, QColor *color);
+ // return number of chemicals
+ virtual int NChem(void);
+};
+
+
+
+
diff --git a/src/TutorialCode/Tutorial2/mymodel.pro b/src/TutorialCode/Tutorial2/mymodel.pro
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial2/mymodel.pro
@@ -0,0 +1,61 @@
+#
+# $Id$
+#
+# 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.
+#
+
+
+TARGET = mymodel
+VLEAFHOME = ../../..
+
+CONFIG += release
+CONFIG -= debug
+CONFIG += plugin
+
+BINDIR = $${VLEAFHOME}/bin
+LIBDIR = $${VLEAFHOME}/lib
+INCDIR = $${VLEAFHOME}/src
+DEFINES = QTGRAPHICS # VLEAFPLUGIN
+DESTDIR = $${BINDIR}/models
+HEADERS = $${TARGET}.h
+INCLUDEPATH += $${INCDIR}
+
+QMAKE_CXXFLAGS += -fexceptions #-I$${INCDIR}
+QMAKE_CXXFLAGS_DEBUG += -g3
+QMAKE_CXXFLAGS_DEBUG += -DQDEBUG
+QT += qt3support
+SOURCES = $${TARGET}.cpp
+TEMPLATE = lib
+
+unix {
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -fPIC -I/usr/include/libxml2
+ QMAKE_LFLAGS += -fPIC
+}
+
+win32 {
+ LIBXML2DIR = C:\libxml2
+ LIBICONVDIR = C:\libiconv
+ LIBZDIR = C:\libz
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -DLIBXML_STATIC
+ QMAKE_CXXFLAGS += -I$${LIBXML2DIR}\include -I$${LIBICONVDIR}\include -I$${LIBZDIR}\include
+
+}
+
+# finish
diff --git a/src/TutorialCode/Tutorial3/mymodel.cpp b/src/TutorialCode/Tutorial3/mymodel.cpp
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial3/mymodel.cpp
@@ -0,0 +1,72 @@
+/*
+ *
+ * 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 "simplugin.h"
+
+#include "parameter.h"
+
+#include "wallbase.h"
+#include "cellbase.h"
+#include "mymodel.h"
+
+static const std::string _module_id("$Id$");
+
+QString MyModel::ModelID(void) {
+ // specify the name of your model here
+ return QString( "Cell growth and cell division" );
+}
+
+// return the number of chemicals your model uses
+int MyModel::NChem(void) { return 0; }
+
+// To be executed after cell division
+void MyModel::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
+ // rules to be executed after cell division go here
+ // (e.g., cell differentiation rules)
+}
+
+void MyModel::SetCellColor(CellBase *c, QColor *color) {
+ // add cell coloring rules here
+}
+
+void MyModel::CellHouseKeeping(CellBase *c) {
+ // add cell behavioral rules here
+ c->EnlargeTargetArea(par->cell_expansion_rate);
+ if (c->Area() > par->rel_cell_div_threshold * c->BaseArea()) {
+ c->DivideOverAxis(Vector(1,0,0));
+ }
+}
+
+void MyModel::CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2) {
+ // add biochemical transport rules here
+}
+void MyModel::WallDynamics(Wall *w, double *dw1, double *dw2) {
+ // add biochemical networks for reactions occuring at walls here
+}
+void MyModel::CellDynamics(CellBase *c, double *dchem) {
+ // add biochemical networks for intracellular reactions here
+}
+
+
+Q_EXPORT_PLUGIN2(mymodel, MyModel)
diff --git a/src/TutorialCode/Tutorial3/mymodel.h b/src/TutorialCode/Tutorial3/mymodel.h
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial3/mymodel.h
@@ -0,0 +1,60 @@
+/*
+ * $Id$
+ *
+ * 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"
+
+
+class MyModel : public QObject, SimPluginInterface {
+ Q_OBJECT
+ Q_INTERFACES(SimPluginInterface);
+
+public:
+ virtual QString ModelID(void);
+
+ // Executed after the cellular mechanics steps have equillibrized
+ virtual void CellHouseKeeping (CellBase *c);
+ // Differential equations describing transport of chemicals from cell to cell
+ virtual void CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2);
+
+ // Differential equations describing chemical reactions taking place at or near the cell walls
+ // (e.g. PIN accumulation)
+ virtual void WallDynamics(Wall *w, double *dw1, double *dw2);
+
+ // Differential equations describing chemical reactions inside the cells
+ virtual void CellDynamics(CellBase *c, double *dchem);
+
+ // to be executed after a cell division
+ virtual void OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2);
+
+ // to be executed for coloring a cell
+ virtual void SetCellColor(CellBase *c, QColor *color);
+ // return number of chemicals
+ virtual int NChem(void);
+};
+
+
+
+
diff --git a/src/TutorialCode/Tutorial3/mymodel.pro b/src/TutorialCode/Tutorial3/mymodel.pro
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial3/mymodel.pro
@@ -0,0 +1,61 @@
+#
+# $Id$
+#
+# 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.
+#
+
+
+TARGET = mymodel
+VLEAFHOME = ../../..
+
+CONFIG += release
+CONFIG -= debug
+CONFIG += plugin
+
+BINDIR = $${VLEAFHOME}/bin
+LIBDIR = $${VLEAFHOME}/lib
+INCDIR = $${VLEAFHOME}/src
+DEFINES = QTGRAPHICS # VLEAFPLUGIN
+DESTDIR = $${BINDIR}/models
+HEADERS = $${TARGET}.h
+INCLUDEPATH += $${INCDIR}
+
+QMAKE_CXXFLAGS += -fexceptions #-I$${INCDIR}
+QMAKE_CXXFLAGS_DEBUG += -g3
+QMAKE_CXXFLAGS_DEBUG += -DQDEBUG
+QT += qt3support
+SOURCES = $${TARGET}.cpp
+TEMPLATE = lib
+
+unix {
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -fPIC -I/usr/include/libxml2
+ QMAKE_LFLAGS += -fPIC
+}
+
+win32 {
+ LIBXML2DIR = C:\libxml2
+ LIBICONVDIR = C:\libiconv
+ LIBZDIR = C:\libz
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -DLIBXML_STATIC
+ QMAKE_CXXFLAGS += -I$${LIBXML2DIR}\include -I$${LIBICONVDIR}\include -I$${LIBZDIR}\include
+
+}
+
+# finish
diff --git a/src/TutorialCode/Tutorial4/mymodel.cpp b/src/TutorialCode/Tutorial4/mymodel.cpp
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial4/mymodel.cpp
@@ -0,0 +1,75 @@
+/*
+ *
+ * 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 "simplugin.h"
+
+#include "parameter.h"
+
+#include "wallbase.h"
+#include "cellbase.h"
+#include "mymodel.h"
+
+static const std::string _module_id("$Id$");
+
+QString MyModel::ModelID(void) {
+ // specify the name of your model here
+ return QString( "Growth, division, coloring" );
+}
+
+// return the number of chemicals your model uses
+int MyModel::NChem(void) { return 0; }
+
+// To be executed after cell division
+void MyModel::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
+ // rules to be executed after cell division go here
+ // (e.g., cell differentiation rules)
+}
+
+void MyModel::SetCellColor(CellBase *c, QColor *color) {
+ // add cell coloring rules here
+ if (c->Area()/c->BaseArea()>1.8) { color->setNamedColor("blue"); }
+ else { color->setNamedColor("green"); }
+
+}
+
+void MyModel::CellHouseKeeping(CellBase *c) {
+ // add cell behavioral rules here
+ c->EnlargeTargetArea(par->cell_expansion_rate);
+ if (c->Area() > par->rel_cell_div_threshold * c->BaseArea()) {
+ c->Divide();
+ }
+}
+
+void MyModel::CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2) {
+ // add biochemical transport rules here
+}
+void MyModel::WallDynamics(Wall *w, double *dw1, double *dw2) {
+ // add biochemical networks for reactions occuring at walls here
+}
+void MyModel::CellDynamics(CellBase *c, double *dchem) {
+ // add biochemical networks for intracellular reactions here
+}
+
+
+Q_EXPORT_PLUGIN2(mymodel, MyModel)
diff --git a/src/TutorialCode/Tutorial4/mymodel.h b/src/TutorialCode/Tutorial4/mymodel.h
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial4/mymodel.h
@@ -0,0 +1,60 @@
+/*
+ * $Id$
+ *
+ * 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"
+
+
+class MyModel : public QObject, SimPluginInterface {
+ Q_OBJECT
+ Q_INTERFACES(SimPluginInterface);
+
+public:
+ virtual QString ModelID(void);
+
+ // Executed after the cellular mechanics steps have equillibrized
+ virtual void CellHouseKeeping (CellBase *c);
+ // Differential equations describing transport of chemicals from cell to cell
+ virtual void CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2);
+
+ // Differential equations describing chemical reactions taking place at or near the cell walls
+ // (e.g. PIN accumulation)
+ virtual void WallDynamics(Wall *w, double *dw1, double *dw2);
+
+ // Differential equations describing chemical reactions inside the cells
+ virtual void CellDynamics(CellBase *c, double *dchem);
+
+ // to be executed after a cell division
+ virtual void OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2);
+
+ // to be executed for coloring a cell
+ virtual void SetCellColor(CellBase *c, QColor *color);
+ // return number of chemicals
+ virtual int NChem(void);
+};
+
+
+
+
diff --git a/src/TutorialCode/Tutorial4/mymodel.pro b/src/TutorialCode/Tutorial4/mymodel.pro
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial4/mymodel.pro
@@ -0,0 +1,61 @@
+#
+# $Id$
+#
+# 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.
+#
+
+
+TARGET = mymodel
+VLEAFHOME = ../../..
+
+CONFIG += release
+CONFIG -= debug
+CONFIG += plugin
+
+BINDIR = $${VLEAFHOME}/bin
+LIBDIR = $${VLEAFHOME}/lib
+INCDIR = $${VLEAFHOME}/src
+DEFINES = QTGRAPHICS # VLEAFPLUGIN
+DESTDIR = $${BINDIR}/models
+HEADERS = $${TARGET}.h
+INCLUDEPATH += $${INCDIR}
+
+QMAKE_CXXFLAGS += -fexceptions #-I$${INCDIR}
+QMAKE_CXXFLAGS_DEBUG += -g3
+QMAKE_CXXFLAGS_DEBUG += -DQDEBUG
+QT += qt3support
+SOURCES = $${TARGET}.cpp
+TEMPLATE = lib
+
+unix {
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -fPIC -I/usr/include/libxml2
+ QMAKE_LFLAGS += -fPIC
+}
+
+win32 {
+ LIBXML2DIR = C:\libxml2
+ LIBICONVDIR = C:\libiconv
+ LIBZDIR = C:\libz
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -DLIBXML_STATIC
+ QMAKE_CXXFLAGS += -I$${LIBXML2DIR}\include -I$${LIBICONVDIR}\include -I$${LIBZDIR}\include
+
+}
+
+# finish
diff --git a/src/TutorialCode/Tutorial5/mymodel.cpp b/src/TutorialCode/Tutorial5/mymodel.cpp
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial5/mymodel.cpp
@@ -0,0 +1,120 @@
+/*
+ *
+ * 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 "simplugin.h"
+
+#include "parameter.h"
+
+#include "wallbase.h"
+#include "cellbase.h"
+#include "mymodel.h"
+
+static const std::string _module_id("$Id$");
+
+QString MyModel::ModelID(void) {
+ // specify the name of your model here
+ return QString( "Growth hormones" );
+}
+
+// return the number of chemicals your model uses
+int MyModel::NChem(void) { return 1; }
+
+// To be executed after cell division
+void MyModel::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
+ // rules to be executed after cell division go here
+ // (e.g., cell differentiation rules)
+
+ // set one cell to source after first division
+ if (CellBase::NCells()==2) {
+ daughter1->SetCellType(1);
+ daughter2->SetCellType(0);
+ }
+
+ // if a source cells has divided, one of the daughters becomes the new source
+ if (daughter1->CellType()==1) {
+
+ // if both cells are at the tissue perimeter, choose at random
+ if (daughter1->AtBoundaryP() && daughter2->AtBoundaryP()) {
+
+ if (qrand()%2){
+ daughter1->SetCellType(1);
+ daughter2->SetCellType(0);
+ } else {
+ daughter1->SetCellType(0);
+ daughter2->SetCellType(1);
+ }
+ } else {
+ // otherwise choose the one that is still at the perimeter
+ if (daughter1->AtBoundaryP()) {
+ daughter1->SetCellType(1);
+ daughter2->SetCellType(0);
+ } else {
+ daughter1->SetCellType(0);
+ daughter2->SetCellType(1);
+ }
+ }
+ }
+
+}
+
+void MyModel::SetCellColor(CellBase *c, QColor *color) {
+ // add cell coloring rules here
+
+ // white: high concentration of growth hormone, black low concentration
+ double val = c->Chemical(0)/(1.+c->Chemical(0));
+ color->setRgbF(val, val, val);
+}
+
+void MyModel::CellHouseKeeping(CellBase *c) {
+ // add cell behavioral rules here
+ if (CellBase::NCells()==1)
+ // first cell expands unconditionally
+ c->EnlargeTargetArea(par->cell_expansion_rate);
+ else
+ c->EnlargeTargetArea(c->Chemical(0)*par->cell_expansion_rate);
+
+ if (c->Area() > par->rel_cell_div_threshold * c->BaseArea()) {
+ c->Divide();
+ }
+}
+
+void MyModel::CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2) {
+ // add biochemical transport rules here
+ double phi = w->Length() * par->D[0] * ( w->C2()->Chemical(0) - w->C1()->Chemical(0) );
+ dchem_c1[0]+=phi;
+ dchem_c2[0]-=phi;
+}
+
+void MyModel::WallDynamics(Wall *w, double *dw1, double *dw2) {
+ // add biochemical networks for reactions occuring at walls here
+}
+void MyModel::CellDynamics(CellBase *c, double *dchem) {
+ // add biochemical networks for intracellular reactions here
+ if (c->CellType()==1) {
+ dchem[0] = par->leaf_tip_source;
+ }
+}
+
+
+Q_EXPORT_PLUGIN2(mymodel, MyModel)
diff --git a/src/TutorialCode/Tutorial5/mymodel.h b/src/TutorialCode/Tutorial5/mymodel.h
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial5/mymodel.h
@@ -0,0 +1,60 @@
+/*
+ * $Id$
+ *
+ * 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"
+
+
+class MyModel : public QObject, SimPluginInterface {
+ Q_OBJECT
+ Q_INTERFACES(SimPluginInterface);
+
+public:
+ virtual QString ModelID(void);
+
+ // Executed after the cellular mechanics steps have equillibrized
+ virtual void CellHouseKeeping (CellBase *c);
+ // Differential equations describing transport of chemicals from cell to cell
+ virtual void CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2);
+
+ // Differential equations describing chemical reactions taking place at or near the cell walls
+ // (e.g. PIN accumulation)
+ virtual void WallDynamics(Wall *w, double *dw1, double *dw2);
+
+ // Differential equations describing chemical reactions inside the cells
+ virtual void CellDynamics(CellBase *c, double *dchem);
+
+ // to be executed after a cell division
+ virtual void OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2);
+
+ // to be executed for coloring a cell
+ virtual void SetCellColor(CellBase *c, QColor *color);
+ // return number of chemicals
+ virtual int NChem(void);
+};
+
+
+
+
diff --git a/src/TutorialCode/Tutorial5/mymodel.pro b/src/TutorialCode/Tutorial5/mymodel.pro
new file mode 100644
--- /dev/null
+++ b/src/TutorialCode/Tutorial5/mymodel.pro
@@ -0,0 +1,61 @@
+#
+# $Id$
+#
+# 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.
+#
+
+
+TARGET = mymodel
+VLEAFHOME = ../../..
+
+CONFIG += release
+CONFIG -= debug
+CONFIG += plugin
+
+BINDIR = $${VLEAFHOME}/bin
+LIBDIR = $${VLEAFHOME}/lib
+INCDIR = $${VLEAFHOME}/src
+DEFINES = QTGRAPHICS # VLEAFPLUGIN
+DESTDIR = $${BINDIR}/models
+HEADERS = $${TARGET}.h
+INCLUDEPATH += $${INCDIR}
+
+QMAKE_CXXFLAGS += -fexceptions #-I$${INCDIR}
+QMAKE_CXXFLAGS_DEBUG += -g3
+QMAKE_CXXFLAGS_DEBUG += -DQDEBUG
+QT += qt3support
+SOURCES = $${TARGET}.cpp
+TEMPLATE = lib
+
+unix {
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -fPIC -I/usr/include/libxml2
+ QMAKE_LFLAGS += -fPIC
+}
+
+win32 {
+ LIBXML2DIR = C:\libxml2
+ LIBICONVDIR = C:\libiconv
+ LIBZDIR = C:\libz
+ LIBS += -L$${LIBDIR} -lvleaf
+ QMAKE_CXXFLAGS += -DLIBXML_STATIC
+ QMAKE_CXXFLAGS += -I$${LIBXML2DIR}\include -I$${LIBICONVDIR}\include -I$${LIBZDIR}\include
+
+}
+
+# finish
diff --git a/src/VirtualLeafpar.tmpl b/src/VirtualLeafpar.tmpl
--- a/src/VirtualLeafpar.tmpl
+++ b/src/VirtualLeafpar.tmpl
@@ -8,7 +8,7 @@ nodenumsize = 1 / int
node_mag = 1.0 / double
outlinewidth = 1.0 / double
cell_outline_color = forestgreen / string
-resize_stride = 10 / int
+resize_stride = 0 / int
label = / label
label = Cell mechanics / label
T = 1.0 / double
diff --git a/src/build_models/auxingrowthplugin.cpp b/src/build_models/auxingrowthplugin.cpp
--- a/src/build_models/auxingrowthplugin.cpp
+++ b/src/build_models/auxingrowthplugin.cpp
@@ -37,23 +37,23 @@ bool batch = false;
// To be executed after cell division
-void AuxinGrowthPlugin::OnDivide(ParentInfo &parent_info, CellBase &daughter1, CellBase &daughter2) {
+void AuxinGrowthPlugin::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
// Auxin distributes between parent and daughter according to area
- double area1 = daughter1.Area(), area2 = daughter2.Area();
+ double area1 = daughter1->Area(), area2 = daughter2->Area();
double tot_area = area1 + area2;
- daughter1.SetChemical(0,daughter1.Chemical(0)*(area1/tot_area));
- daughter2.SetChemical(0,daughter2.Chemical(0)*(area2/tot_area));
+ daughter1->SetChemical(0,daughter1->Chemical(0)*(area1/tot_area));
+ daughter2->SetChemical(0,daughter2->Chemical(0)*(area2/tot_area));
// After divisions, parent and daughter cells get a standard stock of PINs.
- daughter1.SetChemical(1, par->initval[1]);
- daughter2.SetChemical(1, par->initval[1]);
+ daughter1->SetChemical(1, par->initval[1]);
+ daughter2->SetChemical(1, par->initval[1]);
// Reset transporter values of parent and daughter
QList walls;
foreach(WallBase *w, walls) {
- w->setTransporter(&daughter1, 1, 0.);
+ w->setTransporter(daughter1, 1, 0.);
}
//daughter1.LoopWalls(Wall::setTransporter(&daughter1, 1, 0.));
@@ -68,29 +68,29 @@ void AuxinGrowthPlugin::OnDivide(ParentI
*/
}
-void AuxinGrowthPlugin::SetCellColor(CellBase &c, QColor &color) {
+void AuxinGrowthPlugin::SetCellColor(CellBase *c, QColor *color) {
// Red: PIN1
// Green: Auxin
- if (c.CellType()==1) color = QColor("Blue");
- else color.setRgb(c.Chemical(1)/(1+c.Chemical(1)) * 255.,(c.Chemical(0)/(1+c.Chemical(0)) * 255.),/* (chem[2]/(1+chem[2]) *255.) */ 0);
+ if (c->CellType()==1) color->setNamedColor("Blue");
+ else color->setRgb(c->Chemical(1)/(1+c->Chemical(1)) * 255.,(c->Chemical(0)/(1+c->Chemical(0)) * 255.),/* (chem[2]/(1+chem[2]) *255.) */ 0);
}
-void AuxinGrowthPlugin::CellHouseKeeping(CellBase &c) {
+void AuxinGrowthPlugin::CellHouseKeeping(CellBase *c) {
- if (c.Boundary()==CellBase::None) {
- if (c.Area() > par->rel_cell_div_threshold * c.BaseArea() ) {
- c.SetChemical(0,0);
- c.Divide();
+ if (c->Boundary()==CellBase::None) {
+ if (c->Area() > par->rel_cell_div_threshold * c->BaseArea() ) {
+ c->SetChemical(0,0);
+ c->Divide();
}
- if (c.Chemical(0)>0.6) {
- c.SetCellType(1);
+ if (c->Chemical(0)>0.6) {
+ c->SetCellType(1);
}
// expand according to auxin concentration
- c.EnlargeTargetArea(par->auxin_dependent_growth?(c.Chemical(0)/(1.+c.Chemical(0)))*par->cell_expansion_rate:par->cell_expansion_rate);
+ c->EnlargeTargetArea(par->auxin_dependent_growth?(c->Chemical(0)/(1.+c->Chemical(0)))*par->cell_expansion_rate:par->cell_expansion_rate);
}
@@ -241,15 +241,15 @@ void AuxinGrowthPlugin::WallDynamics(Wal
dw2[1] = dPijdt2;
}
-double AuxinGrowthPlugin::complex_PijAj(CellBase &here, CellBase &nb, Wall &w) {
+double AuxinGrowthPlugin::complex_PijAj(CellBase *here, CellBase *nb, Wall *w) {
// gives the amount of complex "auxinreceptor-Pin1" at the wall (at QSS)
//return here.Chemical(1) * nb.Chemical(0) / ( par->km + here.Chemical(1));
- double nb_aux = (nb.BoundaryPolP() && w.AuxinSink()) ? par->sam_auxin : nb.Chemical(0);
+ double nb_aux = (nb->BoundaryPolP() && w->AuxinSink()) ? par->sam_auxin : nb->Chemical(0);
double receptor_level = nb_aux * par->r / (par->kr + nb_aux);
- return here.Chemical(1) * receptor_level / ( par->km + here.Chemical(1));
+ return here->Chemical(1) * receptor_level / ( par->km + here->Chemical(1));
}
diff --git a/src/build_models/auxingrowthplugin.h b/src/build_models/auxingrowthplugin.h
--- a/src/build_models/auxingrowthplugin.h
+++ b/src/build_models/auxingrowthplugin.h
@@ -37,7 +37,7 @@ public:
virtual QString ModelID(void) { return QString( "Auxin accumulation and growth" ); }
// Executed after the cellular mechanics steps have equillibrized
- virtual void CellHouseKeeping (CellBase &c);
+ virtual void CellHouseKeeping (CellBase *c);
// Differential equations describing transport of chemicals from cell to cell
virtual void CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2);
@@ -49,15 +49,15 @@ public:
virtual void CellDynamics(CellBase *c, double *dchem);
// to be executed after a cell division
- virtual void OnDivide(ParentInfo &parent_info, CellBase &daughter1, CellBase &daughter2);
+ virtual void OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2);
// to be executed for coloring a cell
- virtual void SetCellColor(CellBase &c, QColor &color);
+ virtual void SetCellColor(CellBase *c, QColor *color);
// return number of chemicals
virtual int NChem(void) { return 2; }
private:
- double complex_PijAj(CellBase &here, CellBase &nb, Wall &w);
+ double complex_PijAj(CellBase *here, CellBase *nb, Wall *w);
};
#endif
diff --git a/src/build_models/meinhardtplugin.cpp b/src/build_models/meinhardtplugin.cpp
--- a/src/build_models/meinhardtplugin.cpp
+++ b/src/build_models/meinhardtplugin.cpp
@@ -21,7 +21,7 @@
#include
#include
-#include "simplugin.h"
+#include "../simplugin.h"
#include "parameter.h"
#include "warning.h"
@@ -34,24 +34,24 @@ static const std::string _module_id("$Id
bool batch = false;
// To be executed after cell division
-void MeinhardtPlugin::OnDivide(ParentInfo &parent_info, CellBase &daughter1, CellBase &daughter2) {
+void MeinhardtPlugin::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
}
-void MeinhardtPlugin::SetCellColor(CellBase &c, QColor &color) {
+void MeinhardtPlugin::SetCellColor(CellBase *c, QColor *color) {
- if (fpclassify(c.Chemical(0))==FP_NAN) {
+ if (fpclassify(c->Chemical(0))==FP_NAN) {
// somehow the function isnan doesn't work properly on my system... SuSE Linux
// 10.0 64-bits (isnan seems not be implemented using fpclassify).
MyWarning::warning("Whoops! Numerical instability!!");
- color.setNamedColor("red");
+ color->setNamedColor("red");
} else {
double range_min = 0.;//, range_max = 1.;
- if (c.Chemical(0)Chemical(0)setNamedColor("blue");
} else {
- color.setRgb(c.Chemical(1)/(1+c.Chemical(1)) * 255.,(c.Chemical(0)/(1+c.Chemical(0)) * 255.),(c.Chemical(3)/(1+c.Chemical(3)) *255.) );
+ color->setRgb(c->Chemical(1)/(1+c->Chemical(1)) * 255.,(c->Chemical(0)/(1+c->Chemical(0)) * 255.),(c->Chemical(3)/(1+c->Chemical(3)) *255.) );
}
}
@@ -59,21 +59,21 @@ void MeinhardtPlugin::SetCellColor(CellB
-void MeinhardtPlugin::CellHouseKeeping(CellBase &c) {
+void MeinhardtPlugin::CellHouseKeeping(CellBase *c) {
- if (c.Area() > par->rel_cell_div_threshold * c.BaseArea() ) {
- c.Divide();
+ if (c->Area() > par->rel_cell_div_threshold * c->BaseArea() ) {
+ c->Divide();
}
// cell expansion is inhibited by substrate (chem 3)
- if (!par->constituous_expansion_limit || c.NCells()constituous_expansion_limit) {
- c.EnlargeTargetArea(par->cell_expansion_rate );
+ if (!par->constituous_expansion_limit || c->NCells()constituous_expansion_limit) {
+ c->EnlargeTargetArea(par->cell_expansion_rate );
} else {
- if (c.Chemical(0)<0.5) {
+ if (c->Chemical(0)<0.5) {
double tmp;
- c.EnlargeTargetArea((tmp=(1.-par->vessel_inh_level*c.Chemical(3))*par->cell_expansion_rate /* + c.Chemical(4)*/)<0?0:tmp);
+ c->EnlargeTargetArea((tmp=(1.-par->vessel_inh_level*c->Chemical(3))*par->cell_expansion_rate /* + c->Chemical(4)*/)<0?0:tmp);
} else {
- c.EnlargeTargetArea(par->vessel_expansion_rate);
+ c->EnlargeTargetArea(par->vessel_expansion_rate);
}
}
diff --git a/src/build_models/meinhardtplugin.h b/src/build_models/meinhardtplugin.h
--- a/src/build_models/meinhardtplugin.h
+++ b/src/build_models/meinhardtplugin.h
@@ -26,7 +26,7 @@
#include
#include
#include
-#include "simplugin.h"
+#include "../simplugin.h"
class MeinhardtPlugin : public QObject, SimPluginInterface {
@@ -37,7 +37,7 @@ public:
virtual QString ModelID(void) { return QString( "Meinhardt 1976, with growth" ); }
// Executed after the cellular mechanics steps have equillibrized
- virtual void CellHouseKeeping (CellBase &c);
+ virtual void CellHouseKeeping (CellBase *c);
// Differential equations describing transport of chemicals from cell to cell
virtual void CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2);
@@ -49,10 +49,10 @@ public:
virtual void CellDynamics(CellBase *c, double *dchem);
// to be executed after a cell division
- virtual void OnDivide(ParentInfo &parent_info, CellBase &daughter1, CellBase &daughter2);
+ virtual void OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2);
// to be executed for coloring a cell
- virtual void SetCellColor(CellBase &c, QColor &color);
+ virtual void SetCellColor(CellBase *c, QColor *color);
// return number of chemicals
virtual int NChem(void) { return 4; }
};
diff --git a/src/build_models/plugin_auxingrowth.pro b/src/build_models/plugin_auxingrowth.pro
--- a/src/build_models/plugin_auxingrowth.pro
+++ b/src/build_models/plugin_auxingrowth.pro
@@ -24,6 +24,7 @@ CONFIG -= debug
CONFIG += plugin
BINDIR = ../../bin
+LIBDIR = ../../lib
DEFINES = QTGRAPHICS # VLEAFPLUGIN
DESTDIR = $${BINDIR}/models
TARGET = auxingrowth
@@ -37,7 +38,7 @@ SOURCES = $${TARGET}plugin.cpp
TEMPLATE = lib
unix {
- LIBS += -Llib -lvleaf
+ LIBS += -L$${LIBDIR} -lvleaf
QMAKE_CXXFLAGS += -fPIC -I/usr/include/libxml2
QMAKE_LFLAGS += -fPIC
}
@@ -46,7 +47,7 @@ win32 {
LIBXML2DIR = C:\libxml2
LIBICONVDIR = C:\libiconv
LIBZDIR = C:\libz
- LIBS += -Llib -lvleaf
+ LIBS += -L$${LIBDIR} -Llib -lvleaf
QMAKE_CXXFLAGS += -DLIBXML_STATIC
QMAKE_CXXFLAGS += -I$${LIBXML2DIR}\include -I$${LIBICONVDIR}\include -I$${LIBZDIR}\include
}
diff --git a/src/build_models/plugin_leaf.pro b/src/build_models/plugin_leaf.pro
--- a/src/build_models/plugin_leaf.pro
+++ b/src/build_models/plugin_leaf.pro
@@ -24,6 +24,7 @@ CONFIG -= debug
CONFIG += plugin
BINDIR = ../../bin
+LIBDIR = ../../lib
DEFINES = QTGRAPHICS # VLEAFPLUGIN
DESTDIR = $${BINDIR}/models
TARGET = leaf
@@ -37,7 +38,7 @@ SOURCES = $${TARGET}plugin.cpp
TEMPLATE = lib
unix {
- LIBS += -Llib -lvleaf
+ LIBS += -L$${LIBDIR} -lvleaf
QMAKE_CXXFLAGS += -fPIC -I/usr/include/libxml2
QMAKE_LFLAGS += -fPIC
}
@@ -46,7 +47,7 @@ win32 {
LIBXML2DIR = C:\libxml2
LIBICONVDIR = C:\libiconv
LIBZDIR = C:\libz
- LIBS += -Llib -lvleaf
+ LIBS += -L$${LIBDIR} -Llib -lvleaf
QMAKE_CXXFLAGS += -DLIBXML_STATIC
QMAKE_CXXFLAGS += -I$${LIBXML2DIR}\include -I$${LIBICONVDIR}\include -I$${LIBZDIR}\include
}
diff --git a/src/build_models/plugin_meinhardt.pro b/src/build_models/plugin_meinhardt.pro
--- a/src/build_models/plugin_meinhardt.pro
+++ b/src/build_models/plugin_meinhardt.pro
@@ -24,6 +24,7 @@ CONFIG -= debug
CONFIG += plugin
BINDIR = ../../bin
+LIBDIR = ../../lib
DEFINES = QTGRAPHICS # VLEAFPLUGIN
DESTDIR = $${BINDIR}/models
TARGET = meinhardt
@@ -37,7 +38,7 @@ SOURCES = $${TARGET}plugin.cpp
TEMPLATE = lib
unix {
- LIBS += -Llib -lvleaf
+ LIBS += -L$${LIBDIR} -lvleaf
QMAKE_CXXFLAGS += -fPIC -I/usr/include/libxml2
QMAKE_LFLAGS += -fPIC
}
@@ -46,7 +47,7 @@ win32 {
LIBXML2DIR = C:\libxml2
LIBICONVDIR = C:\libiconv
LIBZDIR = C:\libz
- LIBS += -Llib -lvleaf
+ LIBS += -L$${LIBDIR} -Llib -lvleaf
QMAKE_CXXFLAGS += -DLIBXML_STATIC
QMAKE_CXXFLAGS += -I$${LIBXML2DIR}\include -I$${LIBICONVDIR}\include -I$${LIBZDIR}\include
}
diff --git a/src/build_models/plugin_test.pro b/src/build_models/plugin_test.pro
--- a/src/build_models/plugin_test.pro
+++ b/src/build_models/plugin_test.pro
@@ -25,6 +25,7 @@ CONFIG -= debug
CONFIG += plugin
BINDIR = ../../bin
+LIBDIR = ../../lib
DEFINES = QTGRAPHICS # VLEAFPLUGIN
DESTDIR = $${BINDIR}/models
TARGET = test
@@ -38,7 +39,7 @@ SOURCES = $${TARGET}plugin.cpp
TEMPLATE = lib
unix {
- LIBS += -Llib -lvleaf
+ LIBS += -L$${LIBDIR} -lvleaf
QMAKE_CXXFLAGS += -fPIC -I/usr/include/libxml2
QMAKE_LFLAGS += -fPIC
}
@@ -47,7 +48,7 @@ win32 {
LIBXML2DIR = C:\libxml2
LIBICONVDIR = C:\libiconv
LIBZDIR = C:\libz
- LIBS += -Llib -lvleaf
+ LIBS += -L$${LIBDIR} -Llib -lvleaf
QMAKE_CXXFLAGS += -DLIBXML_STATIC
QMAKE_CXXFLAGS += -I$${LIBXML2DIR}\include -I$${LIBICONVDIR}\include -I$${LIBZDIR}\include
diff --git a/src/build_models/translate_plugin.pl b/src/build_models/translate_plugin.pl
new file mode 100755
--- /dev/null
+++ b/src/build_models/translate_plugin.pl
@@ -0,0 +1,78 @@
+#!/usr/bin/perl
+
+$cfilename = shift(@ARGV) || die "Usage: translate_plugin.pl [cfile] [hfile] [profile]\n";
+$hfilename = shift(@ARGV) || die "Usage: translate_plugin.pl [cfile] [hfile] [profile]\n";
+$pfilename = shift(@ARGV) || die "Usage: translate_plugin.pl [cfile] [hfile] [profile]\n";
+
+$ocfname = $cfilename; $ocfname =~ s/\.cpp/_tl.cpp/g;
+$ohfname = $hfilename; $ohfname =~ s/\.h/_tl.h/g;
+$opfname = $pfilename; $opfname =~ s/\.pro/_tl.pro/g;
+
+print STDERR "Translating '$cfilename' to '$ocfname', '$hfilename' to '$ohfname', and '$pfilename' to '$opfname'\n";
+
+open cfile,"<$cfilename";
+open ocfile,">$ocfname";
+
+while () {
+
+ #s/$hfilename/$ohfname/g;
+
+ # translate function definitions
+ if (/[a-zA-Z0-9 ]*::OnDivide/) {
+ s/ParentInfo &parent_info/ParentInfo *parent_info/g;
+ s/CellBase &daughter1/CellBase *daughter1/g;
+ s/CellBase &daughter2/CellBase *daughter2/g;
+ }
+
+ if (/[a-zA-Z0-9 ]*::SetCellColor/) {
+ s/CellBase &c/CellBase *c/g;
+ s/QColor &color/QColor *color/g;
+ }
+
+ if (/[a-zA-Z0-9 ]*::CellHouseKeeping/) {
+ s/CellBase &c/CellBase *c/g;
+ }
+
+ # translate member function calls
+ s/\bparent_info\b\./parent_info->/g;
+ s/\bdaughter1\b\./daughter1->/g;
+ s/\bdaughter2\b\./daughter2->/g;
+ s/\bc\b\./c->/g;
+ s/\bcolor\b\./color->/g;
+ print ocfile;
+
+}
+
+open hfile,"<$hfilename";
+open ohfile,">$ohfname";
+
+while () {
+ if (/[ \t]*virtual[ \t]+void[ \t]+CellHouseKeeping/) {
+ s/CellBase &c/CellBase *c/g;
+ }
+ if (/[ \t]*virtual[ \t]+void[ \t]+OnDivide/) {
+ s/ParentInfo &parent_info/ParentInfo *parent_info/g;
+ s/CellBase &daughter1/CellBase *daughter1/g;
+ s/CellBase &daughter2/CellBase *daughter2/g;
+ }
+ if (/[ \t]*virtual[ \t]+void[ \t]+SetCellColor/) {
+ s/CellBase &c/CellBase *c/g;
+ s/QColor &color/QColor *color/g;
+ }
+
+
+ print ohfile;
+
+}
+
+open pfile,"<$pfilename";
+open opfile,">$opfname";
+
+while () {
+
+ s/\bplugin\b\.h/plugin_tl\.h/g;
+ s/\bplugin\b\.cpp/plugin_tl\.cpp/g;
+
+ print opfile;
+
+}
\ No newline at end of file
diff --git a/src/cell.cpp b/src/cell.cpp
--- a/src/cell.cpp
+++ b/src/cell.cpp
@@ -415,6 +415,7 @@ void Cell::DivideWalls(ItList new_node_l
daughter->chem[i]=chem[i];
}
+ daughter->cell_type = cell_type;
//extern double auxin_account;
//auxin_account += daughter->chem[0];
@@ -1093,7 +1094,7 @@ void Cell::DivideWalls(ItList new_node_l
ConstructNeighborList();
daughter->ConstructNeighborList();
- m->plugin->OnDivide(parent_info,*daughter, *this);
+ m->plugin->OnDivide(&parent_info, daughter, this);
// wall->OnWallInsert();
//daughter->OnDivide();
@@ -1660,7 +1661,7 @@ void Cell::Draw(QGraphicsScene *c, QStri
QColor cell_color;
- m->plugin->SetCellColor(*this,cell_color);
+ m->plugin->SetCellColor(this,&cell_color);
p->setPolygon(pa);
p->setPen(par.outlinewidth>=0?QPen( QColor(par.cell_outline_color),par.outlinewidth):QPen(Qt::NoPen));
diff --git a/src/cellbase.cpp b/src/cellbase.cpp
--- a/src/cellbase.cpp
+++ b/src/cellbase.cpp
@@ -101,6 +101,7 @@ Vector()
div_counter=0;
cell_type = 0;
flag_for_divide = false;
+ division_axis = 0;
}
@@ -140,6 +141,7 @@ CellBase::CellBase(double x,double y,dou
div_counter = 0;
cell_type = 0;
flag_for_divide = false;
+ division_axis = 0;
}
@@ -180,7 +182,7 @@ CellBase::CellBase(const CellBase &src)
cell_type = src.cell_type;
div_counter = src.div_counter;
flag_for_divide = src.flag_for_divide;
-
+ division_axis = src.division_axis;
}
@@ -219,6 +221,7 @@ CellBase CellBase::operator=(const CellB
cell_type = src.cell_type;
div_counter = src.div_counter;
flag_for_divide = src.flag_for_divide;
+ division_axis = src.division_axis;
return *this;
}
diff --git a/src/cellbase.h b/src/cellbase.h
--- a/src/cellbase.h
+++ b/src/cellbase.h
@@ -96,6 +96,7 @@ class CellBase : public QObject, public
virtual ~CellBase() {
delete[] chem;
delete[] new_chem;
+ if (division_axis) delete division_axis;
//cerr << "CellBase " << index << " is dying. " << endl;
}
@@ -217,7 +218,13 @@ class CellBase : public QObject, public
inline void Divide(void) {
flag_for_divide = true;
}
- //Vector Strain(void) const;
+
+ inline void DivideOverAxis(const Vector &v) {
+ division_axis = new Vector(v);
+ flag_for_divide = true;
+ }
+
+ //Vector Strain(void) const;
inline double Circumference(void) const {
double sum=0.;
@@ -324,9 +331,9 @@ class CellBase : public QObject, public
for (list::const_iterator w=walls.begin();
w!=walls.end();
w++) {
- sum += (*w)->c1 == this ?
- f( *((*w)->c1), *((*w)->c2), **w ) :
- f( *((*w)->c2), *((*w)->c1), **w );
+ sum += ((*w)->c1 == this) ?
+ f( ((*w)->c1), ((*w)->c2), *w ) :
+ f( ((*w)->c2), ((*w)->c1), *w );
}
return sum;
}
@@ -447,6 +454,8 @@ protected:
bool dead;
bool flag_for_divide;
+ Vector *division_axis;
+
int cell_type;
//double length;
@@ -475,8 +484,8 @@ protected:
ostream &operator<<(ostream &os, const CellBase &v);
-inline Vector PINdir(CellBase &here, CellBase &nb, Wall &w) {
- return w.getTransporter( &here, 1) * w.getInfluxVector(&here);
+inline Vector PINdir(CellBase *here, CellBase *nb, Wall *w) {
+ return w->getTransporter( here, 1) * w->getInfluxVector(here);
}
diff --git a/src/libplugin.pro b/src/libplugin.pro
--- a/src/libplugin.pro
+++ b/src/libplugin.pro
@@ -29,7 +29,7 @@ QMAKE_CXXFLAGS_DEBUG += -DQDEBUG
QMAKE_CXXFLAGS_DEBUG -= -finstrument-functions
DEFINES = QTGRAPHICS # VLEAFPLUGIN
-DESTDIR = build_models/lib
+DESTDIR = ../lib
PERLDIR = ./perl
PARTMPL = VirtualLeafpar.tmpl
QT += qt3support
diff --git a/src/mesh.cpp b/src/mesh.cpp
--- a/src/mesh.cpp
+++ b/src/mesh.cpp
@@ -47,7 +47,7 @@
#include
#include
-static const std::string _module_id("$Id$");
+static const std::string _module_id("$Id: mesh.cpp,v 79f94eaa3b9e 2010/04/14 07:51:02 michael $");
extern Parameter par;
@@ -1983,9 +1983,21 @@ void Mesh::Derivatives(double *derivs) {
// (*wr)(*w, &(derivs[i]), &(derivs[i+nchems]));
plugin->WallDynamics(*w, &(derivs[i]), &(derivs[i+nchems]));
// Transport function adds to derivatives of cell chemicals
- plugin->CelltoCellTransport(*w, &(derivs[(*w)->c1->Index() * nchems]),
- &(derivs[(*w)->c2->Index() * nchems]));
-
+ double *dchem_c1 = &(derivs[(*w)->c1->Index() * nchems]);
+ double *dchem_c2 = &(derivs[(*w)->c2->Index() * nchems]);
+ //plugin->CelltoCellTransport(*w, &(derivs[(*w)->c1->Index() * nchems]),
+ // &(derivs[(*w)->c2->Index() * nchems]));
+ // quick fix: dummy values to prevent end user from writing into outer space and causing a crash :-)
+ // start here if you want to implement chemical input/output into environment over boundaries
+ double dummy1, dummy2;
+ if ((*w)->c1->Index()<0) { // tests if c1 is the boundary pol
+ dchem_c1 = &dummy1;
+ }
+ if ((*w)->c2->Index()<0) {
+ dchem_c2 = &dummy2;
+ }
+ plugin->CelltoCellTransport(*w, dchem_c1, dchem_c2);
+
//(*tf)(*w, &(derivs[(*w)->c1->Index() * nchems]),
//&(derivs[(*w)->c2->Index() * nchems] ) );
i+=2*nchems;
diff --git a/src/mesh.h b/src/mesh.h
--- a/src/mesh.h
+++ b/src/mesh.h
@@ -238,11 +238,17 @@ public:
for (vector::iterator i = current_cells.begin();
i != current_cells.end();
i ++) {
- plugin->CellHouseKeeping(**i);
+ plugin->CellHouseKeeping(*i);
// Call functions of Cell that cannot be called from CellBase, including Division
if ((*i)->flag_for_divide) {
- (*i)->Divide();
+ if ((*i)->division_axis) {
+ (*i)->DivideOverAxis(*(*i)->division_axis);
+ delete (*i)->division_axis;
+ (*i)->division_axis = 0;
+ } else {
+ (*i)->Divide();
+ }
(*i)->flag_for_divide=false;
}
}
diff --git a/src/modelcatalogue.cpp b/src/modelcatalogue.cpp
--- a/src/modelcatalogue.cpp
+++ b/src/modelcatalogue.cpp
@@ -68,9 +68,13 @@ void ModelCatalogue::LoadPlugins() {
qobject_cast(loader.instance())) {
models.append(plugin);
} else {
- MyWarning::warning("Could not load plugin %s",fileName.toStdString().c_str());
+ cerr << loader.errorString().toStdString().c_str() << endl;
+ MyWarning::warning("Could not load model %s: %s",fileName.toStdString().c_str(), loader.errorString().toStdString().c_str());
}
}
+ if (models.size()==0) {
+ MyWarning::error("No models could be loaded.");
+ }
}
void ModelCatalogue::LoadPlugin(const char *model) {
diff --git a/src/simplugin.h b/src/simplugin.h
--- a/src/simplugin.h
+++ b/src/simplugin.h
@@ -44,7 +44,7 @@ public:
virtual ~SimPluginInterface() { }
// Executed after the cellular mechanics steps have equillibrized
- virtual void CellHouseKeeping(CellBase &c) = 0;
+ virtual void CellHouseKeeping(CellBase *c) = 0;
// Differential equations describing transport of chemicals from cell to cell
virtual void CelltoCellTransport(Wall *, double *dchem_c1, double *dchem_c2) = 0;
@@ -57,10 +57,10 @@ public:
virtual void CellDynamics(CellBase *c, double *dchem) = 0;
// to be executed after a cell division
- virtual void OnDivide(ParentInfo &parent_info, CellBase &daughter1, CellBase &daughter2) = 0;
+ virtual void OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) = 0;
// to be executed for coloring a cell
- virtual void SetCellColor(CellBase &c, QColor &color) = 0;
+ virtual void SetCellColor(CellBase *c, QColor *color) = 0;
// Number of chemicals
virtual int NChem(void) = 0;
@@ -75,7 +75,7 @@ protected:
};
Q_DECLARE_INTERFACE(SimPluginInterface,
- "nl.cwi.VirtualLeaf.SimPluginInterface/1.1")
+ "nl.cwi.VirtualLeaf.SimPluginInterface/1.2")
Q_DECLARE_METATYPE(SimPluginInterface *)
|