diff --git a/src/Makefile b/src/Makefile
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,18 +1,20 @@
# $Id$
+QMAKE = qmake
+
all: VirtualLeaf libplugin plugins
VirtualLeaf: Makefile.VirtualLeaf
make -f Makefile.VirtualLeaf
Makefile.VirtualLeaf: VirtualLeaf.pro
- qmake -makefile -o $@ $<
+ $(QMAKE) -makefile -o $@ $<
libplugin: Makefile.libplugin
make -f Makefile.libplugin
Makefile.libplugin: libplugin.pro
- qmake -makefile -o $@ $<
+ $(QMAKE) -makefile -o $@ $<
plugins:
make -C build_models
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/VirtualLeaf.pro b/src/VirtualLeaf.pro
--- a/src/VirtualLeaf.pro
+++ b/src/VirtualLeaf.pro
@@ -117,7 +117,7 @@ HEADERS += \
cellbase.h \
cell.h \
cellitem.h \
- forwardeuler.h \
+# forwardeuler.h \
infobar.h \
mainbase.h \
mainbase.h \
@@ -158,7 +158,7 @@ SOURCES += \
cellbase.cpp \
cell.cpp \
cellitem.cpp \
- forwardeuler.cpp \
+# forwardeuler.cpp \
mainbase.cpp \
matrix.cpp \
mesh.cpp \
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/Makefile b/src/build_models/Makefile
--- a/src/build_models/Makefile
+++ b/src/build_models/Makefile
@@ -1,30 +1,32 @@
# $Id$
+QMAKE = qmake
+
all: plugin_auxingrowth plugin_leaf plugin_meinhardt plugin_test
plugin_auxingrowth: Makefile.plugin_auxingrowth
make -f Makefile.plugin_auxingrowth
Makefile.plugin_auxingrowth: plugin_auxingrowth.pro
- qmake -makefile -o $@ $<
+ $(QMAKE) -makefile -o $@ $<
plugin_leaf: Makefile.plugin_leaf
make -f Makefile.plugin_leaf
Makefile.plugin_leaf: plugin_leaf.pro
- qmake -makefile -o $@ $<
+ $(QMAKE) -makefile -o $@ $<
plugin_meinhardt: Makefile.plugin_meinhardt
make -f Makefile.plugin_meinhardt
Makefile.plugin_meinhardt: plugin_meinhardt.pro
- qmake -makefile -o $@ $<
+ $(QMAKE) -makefile -o $@ $<
plugin_test: Makefile.plugin_test
make -f Makefile.plugin_test
Makefile.plugin_test: plugin_test.pro
- qmake -makefile -o $@ $<
+ $(QMAKE) -makefile -o $@ $<
clean:
make -f Makefile.plugin_auxingrowth clean
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/leafplugin.cpp b/src/build_models/leafplugin.cpp
--- a/src/build_models/leafplugin.cpp
+++ b/src/build_models/leafplugin.cpp
@@ -37,9 +37,9 @@ static const std::string _module_id("$Id
bool batch = false;
// To be executed after cell division
-void LeafPlugin::OnDivide(ParentInfo &parent_info, CellBase &daughter1, CellBase &daughter2) {
+void LeafPlugin::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
// PIN1 distributes between parent and daughter according to area
- double area = daughter1.Area(), daughter_area = daughter2.Area();
+ double area = daughter1->Area(), daughter_area = daughter2->Area();
double tot_area = area + daughter_area;
//chem[1]*=(area/tot_area);
@@ -54,10 +54,10 @@ void LeafPlugin::OnDivide(ParentInfo &pa
// redistribute the PIN in the endosome according to area
// "Fudge" rule: if one of the cells is at the boundary, remove all AUX1 in the other cell
- if (daughter1.AtBoundaryP() && !daughter2.AtBoundaryP()) {
- //daughter2.new_chem[2]=daughter2.chem[2]=0.;
- daughter2.SetNewChem(2,0);
- daughter2.SetChemical(2,0);
+ if (daughter1->AtBoundaryP() && !daughter2->AtBoundaryP()) {
+ //daughter2->new_chem[2]=daughter2->chem[2]=0.;
+ daughter2->SetNewChem(2,0);
+ daughter2->SetChemical(2,0);
//daughter.new_chem[0]=daughter.chem[0]=0.;
//cerr << "Clearing daughter\n";
//for (list::const_iterator w=daughter.walls.begin();
@@ -67,16 +67,16 @@ void LeafPlugin::OnDivide(ParentInfo &pa
// (*w)->setTransporter(&daughter, 1, 0.);
//}
- //new_chem[2]=chem[2]=parent_info.PINendosome;
- daughter1.SetNewChem(2,parent_info.PINendosome);
- daughter1.SetChemical(2,parent_info.PINendosome);
+ //new_chem[2]=chem[2]=parent_info->PINendosome;
+ daughter1->SetNewChem(2,parent_info->PINendosome);
+ daughter1->SetChemical(2,parent_info->PINendosome);
} else {
- if (daughter2.AtBoundaryP() && !daughter1.AtBoundaryP()) {
+ if (daughter2->AtBoundaryP() && !daughter1->AtBoundaryP()) {
//new_chem[2]=chem[2]=0.;
- daughter1.SetNewChem(2,0);
- daughter1.SetChemical(2,0);
+ daughter1->SetNewChem(2,0);
+ daughter1->SetChemical(2,0);
/*new_chem[0]=chem[0]=0.;
for (list::const_iterator w=walls.begin();
@@ -85,17 +85,17 @@ void LeafPlugin::OnDivide(ParentInfo &pa
(*w)->setTransporter(this, 1, 0.);
}*/
- //daughter2.chem[2]=parent_info.PINendosome;
- daughter2.SetChemical(2,parent_info.PINendosome);
+ //daughter2->chem[2]=parent_info->PINendosome;
+ daughter2->SetChemical(2,parent_info->PINendosome);
//cerr << "Clearing parent\n";
} else {
- //daughter1.new_chem[2]=daughter1.chem[2] = parent_info.PINendosome*(area/tot_area);
- daughter1.SetNewChem(2,parent_info.PINendosome*(area/tot_area));
- daughter1.SetChemical(2, parent_info.PINendosome*(area/tot_area));
- //daughter2.new_chem[2]=daughter2.chem[2] = parent_info.PINendosome*(daughter_area/tot_area);
- daughter2.SetNewChem(2,parent_info.PINendosome*(daughter_area/tot_area));
- daughter2.SetChemical(2,parent_info.PINendosome*(daughter_area/tot_area));
+ //daughter1->new_chem[2]=daughter1->chem[2] = parent_info->PINendosome*(area/tot_area);
+ daughter1->SetNewChem(2,parent_info->PINendosome*(area/tot_area));
+ daughter1->SetChemical(2, parent_info->PINendosome*(area/tot_area));
+ //daughter2->new_chem[2]=daughter2->chem[2] = parent_info->PINendosome*(daughter_area/tot_area);
+ daughter2->SetNewChem(2,parent_info->PINendosome*(daughter_area/tot_area));
+ daughter2->SetChemical(2,parent_info->PINendosome*(daughter_area/tot_area));
}
}
@@ -112,12 +112,12 @@ void LeafPlugin::OnDivide(ParentInfo &pa
double daughter_circ = daughter.Circumference();
double tot_circ = circ + daughter_circ;
- double wallPINs = (circ / tot_circ) * parent_info.PINmembrane;
- double daughter_wallPINs = (daughter_circ / tot_circ) * parent_info.PINmembrane;
+ double wallPINs = (circ / tot_circ) * parent_info->PINmembrane;
+ double daughter_wallPINs = (daughter_circ / tot_circ) * parent_info->PINmembrane;
- //cerr << "wallPINs = " << wallPINs << ", daughter_wallPINs = " << daughter_wallPINs << "sum = " << wallPINs + daughter_wallPINs << ", PINmembrane = " << parent_info.PINmembrane << endl;
+ //cerr << "wallPINs = " << wallPINs << ", daughter_wallPINs = " << daughter_wallPINs << "sum = " << wallPINs + daughter_wallPINs << ", PINmembrane = " << parent_info->PINmembrane << endl;
// distrubute it according to the overall polarity
- Vector polarization = parent_info.polarization.Normalised().Perp2D();
+ Vector polarization = parent_info->polarization.Normalised().Perp2D();
double sum=0.;
for (list::const_iterator w=walls.begin();
@@ -143,30 +143,30 @@ void LeafPlugin::OnDivide(ParentInfo &pa
*/
}
-void LeafPlugin::SetCellColor(CellBase &c, QColor &color) {
+void LeafPlugin::SetCellColor(CellBase *c, QColor *color) {
// Red: AUX1
// Green: Auxin
// Blue: van-3
- // color.setRgb(chem[2]/(1+chem[2]) * 255.,(chem[0]/(1+chem[0]) * 255.),(chem[3]/(1+chem[3]) *255.) );
- color.setRgb(c.Chemical(2)/(1+c.Chemical(2)) * 255.,(c.Chemical(0)/(1+c.Chemical(0)) * 255.),(c.Chemical(3)/(1+c.Chemical(3)) *255.) );
+ // color->setRgb(chem[2]/(1+chem[2]) * 255.,(chem[0]/(1+chem[0]) * 255.),(chem[3]/(1+chem[3]) *255.) );
+ color->setRgb(c->Chemical(2)/(1+c->Chemical(2)) * 255.,(c->Chemical(0)/(1+c->Chemical(0)) * 255.),(c->Chemical(3)/(1+c->Chemical(3)) *255.) );
}
-void LeafPlugin::CellHouseKeeping(CellBase &c) {
+void LeafPlugin::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();
}
// expand if this is not a provascular cell
- if (c.Chemical(3) < 0.7 ) {
- c.EnlargeTargetArea(par->cell_expansion_rate);
+ if (c->Chemical(3) < 0.7 ) {
+ c->EnlargeTargetArea(par->cell_expansion_rate);
}
}
@@ -359,15 +359,15 @@ void LeafPlugin::WallDynamics(Wall *w, d
}
-double LeafPlugin::complex_PijAj(CellBase &here, CellBase &nb, Wall &w) {
+double LeafPlugin::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/leafplugin.h b/src/build_models/leafplugin.h
--- a/src/build_models/leafplugin.h
+++ b/src/build_models/leafplugin.h
@@ -37,7 +37,7 @@ public:
virtual QString ModelID(void) { return QString( "Traveling wave model with influx carriers - Merks and Beemster, 2006-2008" ); }
// 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 4; }
private:
- double complex_PijAj(CellBase &here, CellBase &nb, Wall &w);
+ double complex_PijAj(CellBase *here, CellBase *nb, Wall *w);
};
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
@@ -24,6 +24,7 @@ CONFIG -= debug
CONFIG += plugin
BINDIR = ../../bin
+LIBDIR = ../../lib
DEFINES = QTGRAPHICS # VLEAFPLUGIN
DESTDIR = $${BINDIR}/models
TARGET = test
@@ -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/simplugin.h b/src/build_models/simplugin.h
deleted file mode 100644
--- a/src/build_models/simplugin.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * $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.
- *
- */
-
-#ifndef _SIMPLUGIN_H_
-#define _SIMPLUGIN_H_
-
-#include
-#include
-#include "cellbase.h"
-#include "wallbase.h"
-
-class Parameter;
-
-#include
-#include
-
-
-class SimPluginInterface {
-
-public:
- virtual QString ModelID(void) = 0;
-
- virtual ~SimPluginInterface() { }
-
- // Executed after the cellular mechanics steps have equillibrized
- 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;
-
- // 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 *dw) = 0;
-
- // Differential equations describing chemical reactions inside the cells
- 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;
-
- // to be executed for coloring a cell
- virtual void SetCellColor(CellBase &c, QColor &color) = 0;
-
- // Number of chemicals
- virtual int NChem(void) = 0;
-
- // For internal use; not to be redefined by end users
- virtual void SetParameters(Parameter *pass_pars);// { par = pass_pars; }
- virtual void SetCellsStaticDatamembers (CellsStaticDatamembers *cells_static_data_members_of_main);
-
-protected:
- class Parameter *par;
-
-};
-
-Q_DECLARE_INTERFACE(SimPluginInterface,
- "nl.cwi.VirtualLeaf.SimPluginInterface/1.1")
-Q_DECLARE_METATYPE(SimPluginInterface *)
-
-
-#endif
\ No newline at end of file
diff --git a/src/build_models/testplugin.cpp b/src/build_models/testplugin.cpp
--- a/src/build_models/testplugin.cpp
+++ b/src/build_models/testplugin.cpp
@@ -35,26 +35,26 @@ static const std::string _module_id("$Id
bool batch = false;
// To be executed after cell division
-void TestPlugin::OnDivide(ParentInfo &parent_info, CellBase &daughter1, CellBase &daughter2) {
+void TestPlugin::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
}
-void TestPlugin::SetCellColor(CellBase &c, QColor &color) {
+void TestPlugin::SetCellColor(CellBase *c, QColor *color) {
static QStringList colors;
if (colors.size()==0) {
colors << "red" << "green" << "blue";
}
- color = colors[c.Index()%colors.size()];
+ color->setNamedColor(colors[c->Index()%colors.size()]);
}
-void TestPlugin::CellHouseKeeping(CellBase &c) {
+void TestPlugin::CellHouseKeeping(CellBase *c) {
- c.EnlargeTargetArea(par->cell_expansion_rate);
- if (c.Area() > par->rel_cell_div_threshold * c.BaseArea() ) {
- c.Divide();
+ c->EnlargeTargetArea(par->cell_expansion_rate);
+ if (c->Area() > par->rel_cell_div_threshold * c->BaseArea() ) {
+ c->Divide();
}
}
diff --git a/src/build_models/testplugin.h b/src/build_models/testplugin.h
--- a/src/build_models/testplugin.h
+++ b/src/build_models/testplugin.h
@@ -35,7 +35,7 @@ public:
virtual QString ModelID(void) { return QString( "Test model" ); }
// 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);
@@ -47,10 +47,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 0; }
};
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
@@ -1094,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();
@@ -1661,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.h b/src/cellbase.h
--- a/src/cellbase.h
+++ b/src/cellbase.h
@@ -331,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;
}
@@ -484,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.h b/src/mesh.h
--- a/src/mesh.h
+++ b/src/mesh.h
@@ -238,7 +238,7 @@ 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) {
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 *)
|