diff --git a/.hgignore b/.hgignore --- a/.hgignore +++ b/.hgignore @@ -12,14 +12,10 @@ syntax: glob *.Release *.so *.vars -*Makefile +*Makefile.* *make.out *moc_*.cpp -src/parameter.h -src/parameter.cpp src/default.par -src/pardialog.h -src/pardialog.cpp bin* # switch to regexp syntax. diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,15 @@ +2010-06-03 + + * pardialog.h: Added default versions of this automatically generated file. + * pardialog.cpp: ditto. + * parameter.h: ditto. + * parameter.cpp: ditto. + + * VirtualLeaf.pro: delete/generate parameter.{h,cpp}and pardialog.{h,cpp} only if perl is installed. + * libplugin.pro: dito. + + * Makefile: Added top-level Makefile + 2010-05-10 * VirtualLeaf.pro: Added -fPIC option to QMAKE_CXXFLAGS. diff --git a/src/Makefile b/src/Makefile new file mode 100644 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,25 @@ +# $Id$ + +all: VirtualLeaf libplugin plugins + +VirtualLeaf: Makefile.VirtualLeaf + make -f Makefile.VirtualLeaf + +Makefile.VirtualLeaf: VirtualLeaf.pro + qmake -makefile -o $@ $< + +libplugin: Makefile.libplugin + make -f Makefile.libplugin + +Makefile.libplugin: libplugin.pro + qmake -makefile -o $@ $< + +plugins: + make -C build_models + +clean: + make -f Makefile.libplugin clean + make -f Makefile.VirtualLeaf clean + make -C build_models clean + +#finis diff --git a/src/VirtualLeaf.pro b/src/VirtualLeaf.pro --- a/src/VirtualLeaf.pro +++ b/src/VirtualLeaf.pro @@ -50,6 +50,11 @@ QT += qt3support } win32 { + system(WHERE /Q perl && IF errorlevel 0 (DEL parameter.cpp parameter.h pardialog.cpp pardialog.h) + system(WHERE /Q perl && IF errorlevel 0 (perl $$PERLDIR\make_parameter_source.pl $$PARTMPL) + system(WHERE /Q perl && IF errorlevel 0 (perl $$PERLDIR\make_pardialog_source.pl $$PARTMPL) +#system(WHERE /Q perl && IF errorlevel 0 (perl $$PERLDIR\make_xmlwritecode.pl -h $$REACTIONS) + CONFIG += console LIBXML2DIR = C:\libxml2 LIBICONVDIR = C:\libiconv @@ -93,7 +98,10 @@ macx:release { } unix { - system(rm -f parameter.cpp parameter.h) + system(if `which perl > /dev/null 2>&1` ; then rm -f parameter.cpp parameter.h pardialog.cpp pardialog.h; fi) + system(if `which perl > /dev/null 2>&1` ; then perl $$PERLDIR/make_parameter_source.pl $$PARTMPL; fi) + system(if `which perl > /dev/null 2>&1` ; then perl $$PERLDIR/make_pardialog_source.pl $$PARTMPL; fi) +#system(if `which perl > /dev/null 2>&1` ; then perl $$PERLDIR/make_xmlwritecode.pl -h $$REACTIONS; fi) CC = /usr/bin/gcc QWTDIR = /ufs/guravage/opt/qwt-5.2.1-svn QMAKE_LIBDIR += $$QWTDIR/lib @@ -102,10 +110,6 @@ unix { LIBS += -lxml2 -lz -lm } -system(perl $$PERLDIR/make_parameter_source.pl $$PARTMPL) -system(perl $$PERLDIR/make_pardialog_source.pl $$PARTMPL) -#system(perl $$PERLDIR/make_xmlwritecode.pl -h $$REACTIONS) - # Input HEADERS += \ apoplastitem.h \ diff --git a/src/build_models/ChangeLog b/src/build_models/ChangeLog --- a/src/build_models/ChangeLog +++ b/src/build_models/ChangeLog @@ -1,3 +1,7 @@ +2010-06-03 + + * Makefile: Added top-level Makefile. + 2010-05-10 * plugin_test.pro: Added -fPIC option to QMAKE_CXXFLAGS. diff --git a/src/build_models/Makefile b/src/build_models/Makefile new file mode 100644 --- /dev/null +++ b/src/build_models/Makefile @@ -0,0 +1,35 @@ +# $Id$ + +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 $@ $< + +plugin_leaf: Makefile.plugin_leaf + make -f Makefile.plugin_leaf + +Makefile.plugin_leaf: plugin_leaf.pro + qmake -makefile -o $@ $< + +plugin_meinhardt: Makefile.plugin_meinhardt + make -f Makefile.plugin_meinhardt + +Makefile.plugin_meinhardt: plugin_meinhardt.pro + qmake -makefile -o $@ $< + +plugin_test: Makefile.plugin_test + make -f Makefile.plugin_test + +Makefile.plugin_test: plugin_test.pro + qmake -makefile -o $@ $< + +clean: + make -f Makefile.plugin_auxingrowth clean + make -f Makefile.plugin_leaf clean + make -f Makefile.plugin_meinhardt clean + make -f Makefile.plugin_test clean + +#finis diff --git a/src/libplugin.pro b/src/libplugin.pro --- a/src/libplugin.pro +++ b/src/libplugin.pro @@ -63,14 +63,22 @@ SOURCES = \ warning.cpp unix { - system(rm -f parameter.cpp parameter.h) # this is performed here when qmake is envoked and not in the resulting makefile. + system(if `which perl > /dev/null 2>&1` ; then rm -f parameter.cpp parameter.h pardialog.cpp pardialog.h; fi) + system(if `which perl > /dev/null 2>&1` ; then perl $$PERLDIR/make_parameter_source.pl $$PARTMPL; fi) + system(if `which perl > /dev/null 2>&1` ; then perl $$PERLDIR/make_pardialog_source.pl $$PARTMPL; fi) +#system(if `which perl > /dev/null 2>&1` ; then perl $$PERLDIR/make_xmlwritecode.pl -h $$REACTIONS; fi) + QMAKE_CXXFLAGS += -fPIC -I/usr/include/libxml2 QMAKE_LFLAGS += -fPIC LIBS += -lxml2 -lz -lm } win32 { - system(DEL parameter.cpp parameter.h) + system(WHERE /Q perl && IF errorlevel 0 (DEL parameter.cpp parameter.h pardialog.cpp pardialog.h) + system(WHERE /Q perl && IF errorlevel 0 (perl $$PERLDIR\make_parameter_source.pl $$PARTMPL) + system(WHERE /Q perl && IF errorlevel 0 (perl $$PERLDIR\make_pardialog_source.pl $$PARTMPL) +#system(WHERE /Q perl && IF errorlevel 0 (perl $$PERLDIR\make_xmlwritecode.pl -h $$REACTIONS) + LIBXML2DIR = C:\libxml2 LIBICONVDIR = C:\libiconv LIBZDIR = C:\libz @@ -78,7 +86,4 @@ win32 { QMAKE_CXXFLAGS += -I$${LIBXML2DIR}\include -I$${LIBICONVDIR}\include -I$${LIBZDIR}\include } -system(perl $$PERLDIR/make_parameter_source.pl $$PARTMPL) -system(perl $$PERLDIR/make_pardialog_source.pl $$PARTMPL) -#system(perl $$PERLDIR/make_xmlwritecode.pl -h $$REACTIONS) # diff --git a/src/parameter.cpp b/src/parameter.cpp new file mode 100644 --- /dev/null +++ b/src/parameter.cpp @@ -0,0 +1,1886 @@ +/* + * + * 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 "parameter.h" +#include +#include +#include +#include +#include +#include +#include "output.h" +#include "parse.h" +#include "xmlwrite.h" +#include "warning.h" +#include + +using namespace std; + +static const std::string _module_id("$Id$"); + +Parameter::Parameter() { + arrowcolor = strdup("white"); + arrowsize = 100; + textcolor = strdup("red"); + cellnumsize = 1; + nodenumsize = 1; + node_mag = 1.0; + outlinewidth = 1.0; + cell_outline_color = strdup("forestgreen"); + resize_stride = 10; + T = 1.0; + lambda_length = 100.; + lambda_celllength = 0.; + target_length = 60.; + cell_expansion_rate = 1.; + cell_div_expansion_rate = 0.; + auxin_dependent_growth = true; + ode_accuracy = 1e-4; + mc_stepsize = 0.4; + mc_cell_stepsize = 0.2; + energy_threshold = 1000.; + bend_lambda = 0.; + alignment_lambda = 0.; + rel_cell_div_threshold = 2.; + rel_perimeter_stiffness = 2; + collapse_node_threshold = 0.05; + morphogen_div_threshold = 0.2; + morphogen_expansion_threshold = 0.01; + copy_wall = true; + source = 0.; + D = new double[15]; + D[0] = 0.; + D[1] = 0.0; + D[2] = 0.0; + D[3] = 0.; + D[4] = 0.; + D[5] = 0.; + D[6] = 0.; + D[7] = 0.; + D[8] = 0.; + D[9] = 0.; + D[10] = 0.; + D[11] = 0.; + D[12] = 0.; + D[13] = 0.; + D[14] = 0.; + initval = new double[15]; + initval[0] = 0.; + initval[1] = 0.; + initval[2] = 0.; + initval[3] = 0.; + initval[4] = 0.; + initval[5] = 0.; + initval[6] = 0.; + initval[7] = 0.; + initval[8] = 0.; + initval[9] = 0.; + initval[10] = 0.; + initval[11] = 0.; + initval[12] = 0.; + initval[13] = 0.; + initval[14] = 0.; + k1 = 1.; + k2 = 0.3; + r = 1.; + kr = 1.; + km = 1.; + Pi_tot = 1.; + transport = 0.036; + ka = 1; + pin_prod = 0.001; + pin_prod_in_epidermis = 0.1; + pin_breakdown = 0.001; + pin_breakdown_internal = 0.001; + aux1prod = 0.001; + aux1prodmeso = 0.; + aux1decay = 0.001; + aux1decaymeso = 0.1; + aux1transport = 0.036; + aux_cons = 0.; + aux_breakdown = 0.; + kaux1 = 1; + kap = 1; + leaf_tip_source = 0.001; + sam_efflux = 0.0001; + sam_auxin = 10.; + sam_auxin_breakdown = 0; + van3prod = 0.002; + van3autokat = 0.1; + van3sat = 10; + k2van3 = 0.3; + dt = 0.1; + rd_dt = 1.0; + datadir = strdup("."); + movie = false; + nit = 100000; + maxt = 1000.; + storage_stride = 10; + xml_storage_stride = 500; + rseed = -1; + constituous_expansion_limit = 16; + vessel_inh_level = 1; + vessel_expansion_rate = 0.25; + d = 0.; + e = 0.; + f = 0.; + c = 0.; + mu = 0.; + nu = 0.; + rho0 = 0.; + rho1 = 0.; + c0 = 0.; + gamma = 0.; + eps = 0.; + k = new double[15]; + k[0] = 0.; + k[1] = 0.0; + k[2] = 0.0; + k[3] = 0.; + k[4] = 0.; + k[5] = 0.; + k[6] = 0.; + k[7] = 0.; + k[8] = 0.; + k[9] = 0.; + k[10] = 0.; + k[11] = 0.; + k[12] = 0.; + k[13] = 0.; + k[14] = 0.; + i1 = 0; + i2 = 0; + i3 = 0; + i4 = 0; + i5 = 0; + s1 = strdup(""); + s2 = strdup(""); + s3 = strdup(""); + b1 = false; + b2 = false; + b3 = false; + b4 = false; + dir1 = strdup("."); + dir2 = strdup("."); +} + +Parameter::~Parameter() { + + // destruct parameter object + + // free string parameter + + CleanUp(); + +} + +void Parameter::CleanUp(void) { + if (arrowcolor) + free(arrowcolor); + if (textcolor) + free(textcolor); + if (cell_outline_color) + free(cell_outline_color); + if (D) + free(D); + if (initval) + free(initval); + if (datadir) + free(datadir); + if (k) + free(k); + if (s1) + free(s1); + if (s2) + free(s2); + if (s3) + free(s3); + if (dir1) + free(dir1); + if (dir2) + free(dir2); + +} + +void Parameter::Read(const char *filename) { + + static bool ReadP=false; + + if (ReadP) { + + //throw "Run Time Error in parameter.cpp: Please Read parameter file only once!!"; + CleanUp(); + + } else + ReadP=true; + + FILE *fp=OpenReadFile(filename); + + + arrowcolor = sgetpar(fp, "arrowcolor", "white", true); + arrowsize = fgetpar(fp, "arrowsize", 100, true); + textcolor = sgetpar(fp, "textcolor", "red", true); + cellnumsize = igetpar(fp, "cellnumsize", 1, true); + nodenumsize = igetpar(fp, "nodenumsize", 1, true); + node_mag = fgetpar(fp, "node_mag", 1.0, true); + outlinewidth = fgetpar(fp, "outlinewidth", 1.0, true); + cell_outline_color = sgetpar(fp, "cell_outline_color", "forestgreen", true); + resize_stride = igetpar(fp, "resize_stride", 10, true); + T = fgetpar(fp, "T", 1.0, true); + lambda_length = fgetpar(fp, "lambda_length", 100., true); + lambda_celllength = fgetpar(fp, "lambda_celllength", 0., true); + target_length = fgetpar(fp, "target_length", 60., true); + cell_expansion_rate = fgetpar(fp, "cell_expansion_rate", 1., true); + cell_div_expansion_rate = fgetpar(fp, "cell_div_expansion_rate", 0., true); + auxin_dependent_growth = bgetpar(fp, "auxin_dependent_growth", true, true); + ode_accuracy = fgetpar(fp, "ode_accuracy", 1e-4, true); + mc_stepsize = fgetpar(fp, "mc_stepsize", 0.4, true); + mc_cell_stepsize = fgetpar(fp, "mc_cell_stepsize", 0.2, true); + energy_threshold = fgetpar(fp, "energy_threshold", 1000., true); + bend_lambda = fgetpar(fp, "bend_lambda", 0., true); + alignment_lambda = fgetpar(fp, "alignment_lambda", 0., true); + rel_cell_div_threshold = fgetpar(fp, "rel_cell_div_threshold", 2., true); + rel_perimeter_stiffness = fgetpar(fp, "rel_perimeter_stiffness", 2, true); + collapse_node_threshold = fgetpar(fp, "collapse_node_threshold", 0.05, true); + morphogen_div_threshold = fgetpar(fp, "morphogen_div_threshold", 0.2, true); + morphogen_expansion_threshold = fgetpar(fp, "morphogen_expansion_threshold", 0.01, true); + copy_wall = bgetpar(fp, "copy_wall", true, true); + source = fgetpar(fp, "source", 0., true); + D = dgetparlist(fp, "D", 15, true); + initval = dgetparlist(fp, "initval", 15, true); + k1 = fgetpar(fp, "k1", 1., true); + k2 = fgetpar(fp, "k2", 0.3, true); + r = fgetpar(fp, "r", 1., true); + kr = fgetpar(fp, "kr", 1., true); + km = fgetpar(fp, "km", 1., true); + Pi_tot = fgetpar(fp, "Pi_tot", 1., true); + transport = fgetpar(fp, "transport", 0.036, true); + ka = fgetpar(fp, "ka", 1, true); + pin_prod = fgetpar(fp, "pin_prod", 0.001, true); + pin_prod_in_epidermis = fgetpar(fp, "pin_prod_in_epidermis", 0.1, true); + pin_breakdown = fgetpar(fp, "pin_breakdown", 0.001, true); + pin_breakdown_internal = fgetpar(fp, "pin_breakdown_internal", 0.001, true); + aux1prod = fgetpar(fp, "aux1prod", 0.001, true); + aux1prodmeso = fgetpar(fp, "aux1prodmeso", 0., true); + aux1decay = fgetpar(fp, "aux1decay", 0.001, true); + aux1decaymeso = fgetpar(fp, "aux1decaymeso", 0.1, true); + aux1transport = fgetpar(fp, "aux1transport", 0.036, true); + aux_cons = fgetpar(fp, "aux_cons", 0., true); + aux_breakdown = fgetpar(fp, "aux_breakdown", 0., true); + kaux1 = fgetpar(fp, "kaux1", 1, true); + kap = fgetpar(fp, "kap", 1, true); + leaf_tip_source = fgetpar(fp, "leaf_tip_source", 0.001, true); + sam_efflux = fgetpar(fp, "sam_efflux", 0.0001, true); + sam_auxin = fgetpar(fp, "sam_auxin", 10., true); + sam_auxin_breakdown = fgetpar(fp, "sam_auxin_breakdown", 0, true); + van3prod = fgetpar(fp, "van3prod", 0.002, true); + van3autokat = fgetpar(fp, "van3autokat", 0.1, true); + van3sat = fgetpar(fp, "van3sat", 10, true); + k2van3 = fgetpar(fp, "k2van3", 0.3, true); + dt = fgetpar(fp, "dt", 0.1, true); + rd_dt = fgetpar(fp, "rd_dt", 1.0, true); + datadir = sgetpar(fp, "datadir", ".", true); + if (strcmp(datadir, ".")) + MakeDir(datadir); + movie = bgetpar(fp, "movie", false, true); + nit = igetpar(fp, "nit", 100000, true); + maxt = fgetpar(fp, "maxt", 1000., true); + storage_stride = igetpar(fp, "storage_stride", 10, true); + xml_storage_stride = igetpar(fp, "xml_storage_stride", 500, true); + rseed = igetpar(fp, "rseed", -1, true); + constituous_expansion_limit = igetpar(fp, "constituous_expansion_limit", 16, true); + vessel_inh_level = fgetpar(fp, "vessel_inh_level", 1, true); + vessel_expansion_rate = fgetpar(fp, "vessel_expansion_rate", 0.25, true); + d = fgetpar(fp, "d", 0., true); + e = fgetpar(fp, "e", 0., true); + f = fgetpar(fp, "f", 0., true); + c = fgetpar(fp, "c", 0., true); + mu = fgetpar(fp, "mu", 0., true); + nu = fgetpar(fp, "nu", 0., true); + rho0 = fgetpar(fp, "rho0", 0., true); + rho1 = fgetpar(fp, "rho1", 0., true); + c0 = fgetpar(fp, "c0", 0., true); + gamma = fgetpar(fp, "gamma", 0., true); + eps = fgetpar(fp, "eps", 0., true); + k = dgetparlist(fp, "k", 15, true); + i1 = igetpar(fp, "i1", 0, true); + i2 = igetpar(fp, "i2", 0, true); + i3 = igetpar(fp, "i3", 0, true); + i4 = igetpar(fp, "i4", 0, true); + i5 = igetpar(fp, "i5", 0, true); + s1 = sgetpar(fp, "s1", "", true); + s2 = sgetpar(fp, "s2", "", true); + s3 = sgetpar(fp, "s3", "", true); + b1 = bgetpar(fp, "b1", false, true); + b2 = bgetpar(fp, "b2", false, true); + b3 = bgetpar(fp, "b3", false, true); + b4 = bgetpar(fp, "b4", false, true); + dir1 = sgetpar(fp, "dir1", ".", true); + if (strcmp(dir1, ".")) + MakeDir(dir1); + dir2 = sgetpar(fp, "dir2", ".", true); + if (strcmp(dir2, ".")) + MakeDir(dir2); + +} + +const char *sbool(const bool &p) { + + const char *true_str="true"; + const char *false_str="false"; + if (p) + return true_str; + else + return false_str; +} + +void Parameter::Write(ostream &os) const { + + + if (arrowcolor) + os << " arrowcolor = " << arrowcolor << endl; + os << " arrowsize = " << arrowsize << endl; + + if (textcolor) + os << " textcolor = " << textcolor << endl; + os << " cellnumsize = " << cellnumsize << endl; + os << " nodenumsize = " << nodenumsize << endl; + os << " node_mag = " << node_mag << endl; + os << " outlinewidth = " << outlinewidth << endl; + + if (cell_outline_color) + os << " cell_outline_color = " << cell_outline_color << endl; + os << " resize_stride = " << resize_stride << endl; + os << " T = " << T << endl; + os << " lambda_length = " << lambda_length << endl; + os << " lambda_celllength = " << lambda_celllength << endl; + os << " target_length = " << target_length << endl; + os << " cell_expansion_rate = " << cell_expansion_rate << endl; + os << " cell_div_expansion_rate = " << cell_div_expansion_rate << endl; + os << " auxin_dependent_growth = " << sbool(auxin_dependent_growth) << endl; + os << " ode_accuracy = " << ode_accuracy << endl; + os << " mc_stepsize = " << mc_stepsize << endl; + os << " mc_cell_stepsize = " << mc_cell_stepsize << endl; + os << " energy_threshold = " << energy_threshold << endl; + os << " bend_lambda = " << bend_lambda << endl; + os << " alignment_lambda = " << alignment_lambda << endl; + os << " rel_cell_div_threshold = " << rel_cell_div_threshold << endl; + os << " rel_perimeter_stiffness = " << rel_perimeter_stiffness << endl; + os << " collapse_node_threshold = " << collapse_node_threshold << endl; + os << " morphogen_div_threshold = " << morphogen_div_threshold << endl; + os << " morphogen_expansion_threshold = " << morphogen_expansion_threshold << endl; + os << " copy_wall = " << sbool(copy_wall) << endl; + os << " source = " << source << endl; + os << " D = "<< D[0] << ", " << D[1] << ", " << D[2] << ", " << D[3] << ", " << D[4] << ", " << D[5] << ", " << D[6] << ", " << D[7] << ", " << D[8] << ", " << D[9] << ", " << D[10] << ", " << D[11] << ", " << D[12] << ", " << D[13] << ", " << D[14] << endl; + os << " initval = "<< initval[0] << ", " << initval[1] << ", " << initval[2] << ", " << initval[3] << ", " << initval[4] << ", " << initval[5] << ", " << initval[6] << ", " << initval[7] << ", " << initval[8] << ", " << initval[9] << ", " << initval[10] << ", " << initval[11] << ", " << initval[12] << ", " << initval[13] << ", " << initval[14] << endl; + os << " k1 = " << k1 << endl; + os << " k2 = " << k2 << endl; + os << " r = " << r << endl; + os << " kr = " << kr << endl; + os << " km = " << km << endl; + os << " Pi_tot = " << Pi_tot << endl; + os << " transport = " << transport << endl; + os << " ka = " << ka << endl; + os << " pin_prod = " << pin_prod << endl; + os << " pin_prod_in_epidermis = " << pin_prod_in_epidermis << endl; + os << " pin_breakdown = " << pin_breakdown << endl; + os << " pin_breakdown_internal = " << pin_breakdown_internal << endl; + os << " aux1prod = " << aux1prod << endl; + os << " aux1prodmeso = " << aux1prodmeso << endl; + os << " aux1decay = " << aux1decay << endl; + os << " aux1decaymeso = " << aux1decaymeso << endl; + os << " aux1transport = " << aux1transport << endl; + os << " aux_cons = " << aux_cons << endl; + os << " aux_breakdown = " << aux_breakdown << endl; + os << " kaux1 = " << kaux1 << endl; + os << " kap = " << kap << endl; + os << " leaf_tip_source = " << leaf_tip_source << endl; + os << " sam_efflux = " << sam_efflux << endl; + os << " sam_auxin = " << sam_auxin << endl; + os << " sam_auxin_breakdown = " << sam_auxin_breakdown << endl; + os << " van3prod = " << van3prod << endl; + os << " van3autokat = " << van3autokat << endl; + os << " van3sat = " << van3sat << endl; + os << " k2van3 = " << k2van3 << endl; + os << " dt = " << dt << endl; + os << " rd_dt = " << rd_dt << endl; + + if (datadir) + os << " datadir = " << datadir << endl; + os << " movie = " << sbool(movie) << endl; + os << " nit = " << nit << endl; + os << " maxt = " << maxt << endl; + os << " storage_stride = " << storage_stride << endl; + os << " xml_storage_stride = " << xml_storage_stride << endl; + os << " rseed = " << rseed << endl; + os << " constituous_expansion_limit = " << constituous_expansion_limit << endl; + os << " vessel_inh_level = " << vessel_inh_level << endl; + os << " vessel_expansion_rate = " << vessel_expansion_rate << endl; + os << " d = " << d << endl; + os << " e = " << e << endl; + os << " f = " << f << endl; + os << " c = " << c << endl; + os << " mu = " << mu << endl; + os << " nu = " << nu << endl; + os << " rho0 = " << rho0 << endl; + os << " rho1 = " << rho1 << endl; + os << " c0 = " << c0 << endl; + os << " gamma = " << gamma << endl; + os << " eps = " << eps << endl; + os << " k = "<< k[0] << ", " << k[1] << ", " << k[2] << ", " << k[3] << ", " << k[4] << ", " << k[5] << ", " << k[6] << ", " << k[7] << ", " << k[8] << ", " << k[9] << ", " << k[10] << ", " << k[11] << ", " << k[12] << ", " << k[13] << ", " << k[14] << endl; + os << " i1 = " << i1 << endl; + os << " i2 = " << i2 << endl; + os << " i3 = " << i3 << endl; + os << " i4 = " << i4 << endl; + os << " i5 = " << i5 << endl; + + if (s1) + os << " s1 = " << s1 << endl; + + if (s2) + os << " s2 = " << s2 << endl; + + if (s3) + os << " s3 = " << s3 << endl; + os << " b1 = " << sbool(b1) << endl; + os << " b2 = " << sbool(b2) << endl; + os << " b3 = " << sbool(b3) << endl; + os << " b4 = " << sbool(b4) << endl; + + if (dir1) + os << " dir1 = " << dir1 << endl; + + if (dir2) + os << " dir2 = " << dir2 << endl; +} +void Parameter::XMLAdd(xmlNode *root) const { + xmlNode *xmlparameter = xmlNewChild(root, NULL, BAD_CAST "parameter", NULL); +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "arrowcolor" ); + ostringstream text; + + if (arrowcolor) + text << arrowcolor; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "arrowsize" ); + ostringstream text; + text << arrowsize; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "textcolor" ); + ostringstream text; + + if (textcolor) + text << textcolor; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "cellnumsize" ); + ostringstream text; + text << cellnumsize; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "nodenumsize" ); + ostringstream text; + text << nodenumsize; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "node_mag" ); + ostringstream text; + text << node_mag; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "outlinewidth" ); + ostringstream text; + text << outlinewidth; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "cell_outline_color" ); + ostringstream text; + + if (cell_outline_color) + text << cell_outline_color; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "resize_stride" ); + ostringstream text; + text << resize_stride; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "T" ); + ostringstream text; + text << T; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "lambda_length" ); + ostringstream text; + text << lambda_length; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "lambda_celllength" ); + ostringstream text; + text << lambda_celllength; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "target_length" ); + ostringstream text; + text << target_length; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "cell_expansion_rate" ); + ostringstream text; + text << cell_expansion_rate; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "cell_div_expansion_rate" ); + ostringstream text; + text << cell_div_expansion_rate; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "auxin_dependent_growth" ); + ostringstream text; +text << sbool(auxin_dependent_growth); +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "ode_accuracy" ); + ostringstream text; + text << ode_accuracy; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "mc_stepsize" ); + ostringstream text; + text << mc_stepsize; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "mc_cell_stepsize" ); + ostringstream text; + text << mc_cell_stepsize; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "energy_threshold" ); + ostringstream text; + text << energy_threshold; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "bend_lambda" ); + ostringstream text; + text << bend_lambda; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "alignment_lambda" ); + ostringstream text; + text << alignment_lambda; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "rel_cell_div_threshold" ); + ostringstream text; + text << rel_cell_div_threshold; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "rel_perimeter_stiffness" ); + ostringstream text; + text << rel_perimeter_stiffness; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "collapse_node_threshold" ); + ostringstream text; + text << collapse_node_threshold; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "morphogen_div_threshold" ); + ostringstream text; + text << morphogen_div_threshold; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "morphogen_expansion_threshold" ); + ostringstream text; + text << morphogen_expansion_threshold; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "copy_wall" ); + ostringstream text; +text << sbool(copy_wall); +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "source" ); + ostringstream text; + text << source; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "D" ); + xmlNode *xmlvalarray = xmlNewChild(xmlpar, NULL, BAD_CAST "valarray", NULL); + { + ostringstream text; + text << D[0]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[1]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[2]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[3]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[4]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[5]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[6]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[7]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[8]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[9]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[10]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[11]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[12]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[13]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << D[14]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "initval" ); + xmlNode *xmlvalarray = xmlNewChild(xmlpar, NULL, BAD_CAST "valarray", NULL); + { + ostringstream text; + text << initval[0]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[1]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[2]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[3]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[4]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[5]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[6]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[7]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[8]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[9]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[10]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[11]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[12]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[13]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << initval[14]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "k1" ); + ostringstream text; + text << k1; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "k2" ); + ostringstream text; + text << k2; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "r" ); + ostringstream text; + text << r; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "kr" ); + ostringstream text; + text << kr; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "km" ); + ostringstream text; + text << km; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "Pi_tot" ); + ostringstream text; + text << Pi_tot; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "transport" ); + ostringstream text; + text << transport; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "ka" ); + ostringstream text; + text << ka; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "pin_prod" ); + ostringstream text; + text << pin_prod; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "pin_prod_in_epidermis" ); + ostringstream text; + text << pin_prod_in_epidermis; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "pin_breakdown" ); + ostringstream text; + text << pin_breakdown; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "pin_breakdown_internal" ); + ostringstream text; + text << pin_breakdown_internal; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "aux1prod" ); + ostringstream text; + text << aux1prod; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "aux1prodmeso" ); + ostringstream text; + text << aux1prodmeso; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "aux1decay" ); + ostringstream text; + text << aux1decay; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "aux1decaymeso" ); + ostringstream text; + text << aux1decaymeso; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "aux1transport" ); + ostringstream text; + text << aux1transport; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "aux_cons" ); + ostringstream text; + text << aux_cons; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "aux_breakdown" ); + ostringstream text; + text << aux_breakdown; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "kaux1" ); + ostringstream text; + text << kaux1; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "kap" ); + ostringstream text; + text << kap; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "leaf_tip_source" ); + ostringstream text; + text << leaf_tip_source; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "sam_efflux" ); + ostringstream text; + text << sam_efflux; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "sam_auxin" ); + ostringstream text; + text << sam_auxin; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "sam_auxin_breakdown" ); + ostringstream text; + text << sam_auxin_breakdown; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "van3prod" ); + ostringstream text; + text << van3prod; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "van3autokat" ); + ostringstream text; + text << van3autokat; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "van3sat" ); + ostringstream text; + text << van3sat; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "k2van3" ); + ostringstream text; + text << k2van3; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "dt" ); + ostringstream text; + text << dt; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "rd_dt" ); + ostringstream text; + text << rd_dt; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "datadir" ); + ostringstream text; + + if (datadir) + text << datadir; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "movie" ); + ostringstream text; +text << sbool(movie); +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "nit" ); + ostringstream text; + text << nit; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "maxt" ); + ostringstream text; + text << maxt; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "storage_stride" ); + ostringstream text; + text << storage_stride; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "xml_storage_stride" ); + ostringstream text; + text << xml_storage_stride; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "rseed" ); + ostringstream text; + text << rseed; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "constituous_expansion_limit" ); + ostringstream text; + text << constituous_expansion_limit; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "vessel_inh_level" ); + ostringstream text; + text << vessel_inh_level; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "vessel_expansion_rate" ); + ostringstream text; + text << vessel_expansion_rate; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "d" ); + ostringstream text; + text << d; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "e" ); + ostringstream text; + text << e; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "f" ); + ostringstream text; + text << f; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "c" ); + ostringstream text; + text << c; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "mu" ); + ostringstream text; + text << mu; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "nu" ); + ostringstream text; + text << nu; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "rho0" ); + ostringstream text; + text << rho0; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "rho1" ); + ostringstream text; + text << rho1; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "c0" ); + ostringstream text; + text << c0; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "gamma" ); + ostringstream text; + text << gamma; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "eps" ); + ostringstream text; + text << eps; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "k" ); + xmlNode *xmlvalarray = xmlNewChild(xmlpar, NULL, BAD_CAST "valarray", NULL); + { + ostringstream text; + text << k[0]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[1]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[2]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[3]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[4]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[5]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[6]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[7]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[8]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[9]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[10]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[11]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[12]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[13]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } + { + ostringstream text; + text << k[14]; + xmlNode *xmlval = xmlNewChild(xmlvalarray, NULL, BAD_CAST "val", NULL); + xmlNewProp(xmlval, BAD_CAST "v", BAD_CAST text.str().c_str()); + } +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "i1" ); + ostringstream text; + text << i1; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "i2" ); + ostringstream text; + text << i2; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "i3" ); + ostringstream text; + text << i3; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "i4" ); + ostringstream text; + text << i4; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "i5" ); + ostringstream text; + text << i5; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "s1" ); + ostringstream text; + + if (s1) + text << s1; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "s2" ); + ostringstream text; + + if (s2) + text << s2; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "s3" ); + ostringstream text; + + if (s3) + text << s3; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "b1" ); + ostringstream text; +text << sbool(b1); +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "b2" ); + ostringstream text; +text << sbool(b2); +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "b3" ); + ostringstream text; +text << sbool(b3); +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "b4" ); + ostringstream text; +text << sbool(b4); +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "dir1" ); + ostringstream text; + + if (dir1) + text << dir1; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +{ + xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "dir2" ); + ostringstream text; + + if (dir2) + text << dir2; +xmlNewProp(xmlpar, BAD_CAST "val", BAD_CAST text.str().c_str()); +} +} +void Parameter::AssignValToPar(const char *namec, const char *valc) { + QLocale standardlocale(QLocale::C); + bool ok; +if (!strcmp(namec, "arrowcolor")) { + if (arrowcolor) { free(arrowcolor); } + arrowcolor=strdup(valc); +} +if (!strcmp(namec, "arrowsize")) { + arrowsize = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'arrowsize' from XML file.",valc); } +} +if (!strcmp(namec, "textcolor")) { + if (textcolor) { free(textcolor); } + textcolor=strdup(valc); +} +if (!strcmp(namec, "cellnumsize")) { + cellnumsize = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'cellnumsize' from XML file.",valc); } +} +if (!strcmp(namec, "nodenumsize")) { + nodenumsize = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'nodenumsize' from XML file.",valc); } +} +if (!strcmp(namec, "node_mag")) { + node_mag = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'node_mag' from XML file.",valc); } +} +if (!strcmp(namec, "outlinewidth")) { + outlinewidth = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'outlinewidth' from XML file.",valc); } +} +if (!strcmp(namec, "cell_outline_color")) { + if (cell_outline_color) { free(cell_outline_color); } + cell_outline_color=strdup(valc); +} +if (!strcmp(namec, "resize_stride")) { + resize_stride = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'resize_stride' from XML file.",valc); } +} +if (!strcmp(namec, "T")) { + T = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'T' from XML file.",valc); } +} +if (!strcmp(namec, "lambda_length")) { + lambda_length = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'lambda_length' from XML file.",valc); } +} +if (!strcmp(namec, "lambda_celllength")) { + lambda_celllength = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'lambda_celllength' from XML file.",valc); } +} +if (!strcmp(namec, "target_length")) { + target_length = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'target_length' from XML file.",valc); } +} +if (!strcmp(namec, "cell_expansion_rate")) { + cell_expansion_rate = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'cell_expansion_rate' from XML file.",valc); } +} +if (!strcmp(namec, "cell_div_expansion_rate")) { + cell_div_expansion_rate = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'cell_div_expansion_rate' from XML file.",valc); } +} +if (!strcmp(namec, "auxin_dependent_growth")) { +auxin_dependent_growth = strtobool(valc); +} +if (!strcmp(namec, "ode_accuracy")) { + ode_accuracy = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'ode_accuracy' from XML file.",valc); } +} +if (!strcmp(namec, "mc_stepsize")) { + mc_stepsize = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'mc_stepsize' from XML file.",valc); } +} +if (!strcmp(namec, "mc_cell_stepsize")) { + mc_cell_stepsize = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'mc_cell_stepsize' from XML file.",valc); } +} +if (!strcmp(namec, "energy_threshold")) { + energy_threshold = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'energy_threshold' from XML file.",valc); } +} +if (!strcmp(namec, "bend_lambda")) { + bend_lambda = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'bend_lambda' from XML file.",valc); } +} +if (!strcmp(namec, "alignment_lambda")) { + alignment_lambda = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'alignment_lambda' from XML file.",valc); } +} +if (!strcmp(namec, "rel_cell_div_threshold")) { + rel_cell_div_threshold = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'rel_cell_div_threshold' from XML file.",valc); } +} +if (!strcmp(namec, "rel_perimeter_stiffness")) { + rel_perimeter_stiffness = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'rel_perimeter_stiffness' from XML file.",valc); } +} +if (!strcmp(namec, "collapse_node_threshold")) { + collapse_node_threshold = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'collapse_node_threshold' from XML file.",valc); } +} +if (!strcmp(namec, "morphogen_div_threshold")) { + morphogen_div_threshold = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'morphogen_div_threshold' from XML file.",valc); } +} +if (!strcmp(namec, "morphogen_expansion_threshold")) { + morphogen_expansion_threshold = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'morphogen_expansion_threshold' from XML file.",valc); } +} +if (!strcmp(namec, "copy_wall")) { +copy_wall = strtobool(valc); +} +if (!strcmp(namec, "source")) { + source = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'source' from XML file.",valc); } +} +if (!strcmp(namec, "k1")) { + k1 = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'k1' from XML file.",valc); } +} +if (!strcmp(namec, "k2")) { + k2 = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'k2' from XML file.",valc); } +} +if (!strcmp(namec, "r")) { + r = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'r' from XML file.",valc); } +} +if (!strcmp(namec, "kr")) { + kr = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'kr' from XML file.",valc); } +} +if (!strcmp(namec, "km")) { + km = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'km' from XML file.",valc); } +} +if (!strcmp(namec, "Pi_tot")) { + Pi_tot = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'Pi_tot' from XML file.",valc); } +} +if (!strcmp(namec, "transport")) { + transport = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'transport' from XML file.",valc); } +} +if (!strcmp(namec, "ka")) { + ka = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'ka' from XML file.",valc); } +} +if (!strcmp(namec, "pin_prod")) { + pin_prod = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'pin_prod' from XML file.",valc); } +} +if (!strcmp(namec, "pin_prod_in_epidermis")) { + pin_prod_in_epidermis = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'pin_prod_in_epidermis' from XML file.",valc); } +} +if (!strcmp(namec, "pin_breakdown")) { + pin_breakdown = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'pin_breakdown' from XML file.",valc); } +} +if (!strcmp(namec, "pin_breakdown_internal")) { + pin_breakdown_internal = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'pin_breakdown_internal' from XML file.",valc); } +} +if (!strcmp(namec, "aux1prod")) { + aux1prod = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'aux1prod' from XML file.",valc); } +} +if (!strcmp(namec, "aux1prodmeso")) { + aux1prodmeso = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'aux1prodmeso' from XML file.",valc); } +} +if (!strcmp(namec, "aux1decay")) { + aux1decay = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'aux1decay' from XML file.",valc); } +} +if (!strcmp(namec, "aux1decaymeso")) { + aux1decaymeso = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'aux1decaymeso' from XML file.",valc); } +} +if (!strcmp(namec, "aux1transport")) { + aux1transport = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'aux1transport' from XML file.",valc); } +} +if (!strcmp(namec, "aux_cons")) { + aux_cons = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'aux_cons' from XML file.",valc); } +} +if (!strcmp(namec, "aux_breakdown")) { + aux_breakdown = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'aux_breakdown' from XML file.",valc); } +} +if (!strcmp(namec, "kaux1")) { + kaux1 = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'kaux1' from XML file.",valc); } +} +if (!strcmp(namec, "kap")) { + kap = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'kap' from XML file.",valc); } +} +if (!strcmp(namec, "leaf_tip_source")) { + leaf_tip_source = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'leaf_tip_source' from XML file.",valc); } +} +if (!strcmp(namec, "sam_efflux")) { + sam_efflux = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'sam_efflux' from XML file.",valc); } +} +if (!strcmp(namec, "sam_auxin")) { + sam_auxin = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'sam_auxin' from XML file.",valc); } +} +if (!strcmp(namec, "sam_auxin_breakdown")) { + sam_auxin_breakdown = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'sam_auxin_breakdown' from XML file.",valc); } +} +if (!strcmp(namec, "van3prod")) { + van3prod = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'van3prod' from XML file.",valc); } +} +if (!strcmp(namec, "van3autokat")) { + van3autokat = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'van3autokat' from XML file.",valc); } +} +if (!strcmp(namec, "van3sat")) { + van3sat = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'van3sat' from XML file.",valc); } +} +if (!strcmp(namec, "k2van3")) { + k2van3 = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'k2van3' from XML file.",valc); } +} +if (!strcmp(namec, "dt")) { + dt = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'dt' from XML file.",valc); } +} +if (!strcmp(namec, "rd_dt")) { + rd_dt = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'rd_dt' from XML file.",valc); } +} +if (!strcmp(namec, "datadir")) { + if (datadir) { free(datadir); } + datadir=strdup(valc); +} +if (!strcmp(namec, "movie")) { +movie = strtobool(valc); +} +if (!strcmp(namec, "nit")) { + nit = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'nit' from XML file.",valc); } +} +if (!strcmp(namec, "maxt")) { + maxt = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'maxt' from XML file.",valc); } +} +if (!strcmp(namec, "storage_stride")) { + storage_stride = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'storage_stride' from XML file.",valc); } +} +if (!strcmp(namec, "xml_storage_stride")) { + xml_storage_stride = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'xml_storage_stride' from XML file.",valc); } +} +if (!strcmp(namec, "rseed")) { + rseed = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'rseed' from XML file.",valc); } +} +if (!strcmp(namec, "constituous_expansion_limit")) { + constituous_expansion_limit = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'constituous_expansion_limit' from XML file.",valc); } +} +if (!strcmp(namec, "vessel_inh_level")) { + vessel_inh_level = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'vessel_inh_level' from XML file.",valc); } +} +if (!strcmp(namec, "vessel_expansion_rate")) { + vessel_expansion_rate = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'vessel_expansion_rate' from XML file.",valc); } +} +if (!strcmp(namec, "d")) { + d = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'd' from XML file.",valc); } +} +if (!strcmp(namec, "e")) { + e = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'e' from XML file.",valc); } +} +if (!strcmp(namec, "f")) { + f = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'f' from XML file.",valc); } +} +if (!strcmp(namec, "c")) { + c = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'c' from XML file.",valc); } +} +if (!strcmp(namec, "mu")) { + mu = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'mu' from XML file.",valc); } +} +if (!strcmp(namec, "nu")) { + nu = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'nu' from XML file.",valc); } +} +if (!strcmp(namec, "rho0")) { + rho0 = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'rho0' from XML file.",valc); } +} +if (!strcmp(namec, "rho1")) { + rho1 = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'rho1' from XML file.",valc); } +} +if (!strcmp(namec, "c0")) { + c0 = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'c0' from XML file.",valc); } +} +if (!strcmp(namec, "gamma")) { + gamma = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'gamma' from XML file.",valc); } +} +if (!strcmp(namec, "eps")) { + eps = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'eps' from XML file.",valc); } +} +if (!strcmp(namec, "i1")) { + i1 = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'i1' from XML file.",valc); } +} +if (!strcmp(namec, "i2")) { + i2 = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'i2' from XML file.",valc); } +} +if (!strcmp(namec, "i3")) { + i3 = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'i3' from XML file.",valc); } +} +if (!strcmp(namec, "i4")) { + i4 = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'i4' from XML file.",valc); } +} +if (!strcmp(namec, "i5")) { + i5 = standardlocale.toInt(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to integer while reading parameter 'i5' from XML file.",valc); } +} +if (!strcmp(namec, "s1")) { + if (s1) { free(s1); } + s1=strdup(valc); +} +if (!strcmp(namec, "s2")) { + if (s2) { free(s2); } + s2=strdup(valc); +} +if (!strcmp(namec, "s3")) { + if (s3) { free(s3); } + s3=strdup(valc); +} +if (!strcmp(namec, "b1")) { +b1 = strtobool(valc); +} +if (!strcmp(namec, "b2")) { +b2 = strtobool(valc); +} +if (!strcmp(namec, "b3")) { +b3 = strtobool(valc); +} +if (!strcmp(namec, "b4")) { +b4 = strtobool(valc); +} +if (!strcmp(namec, "dir1")) { + if (dir1) { free(dir1); } + dir1=strdup(valc); +} +if (!strcmp(namec, "dir2")) { + if (dir2) { free(dir2); } + dir2=strdup(valc); +} +} +void Parameter::AssignValArrayToPar(const char *namec, vector valarray) { +if (!strcmp(namec, "D")) { + int i=0; + vector::const_iterator v=valarray.begin(); + while (v!=valarray.end() && i <= 14 ) { + D[i++]=*(v++); + } +} +if (!strcmp(namec, "initval")) { + int i=0; + vector::const_iterator v=valarray.begin(); + while (v!=valarray.end() && i <= 14 ) { + initval[i++]=*(v++); + } +} +if (!strcmp(namec, "k")) { + int i=0; + vector::const_iterator v=valarray.begin(); + while (v!=valarray.end() && i <= 14 ) { + k[i++]=*(v++); + } +} +} + +/* void Parameter::XMLRead(xmlNode *root) { + + xmlNode *cur = root->xmlChildrenNode; + while (cur!=NULL) { + if ((!xmlStrcmp(cur->name, (const xmlChar *)"parameter"))){ + xmlNode *par_node = cur->xmlChildrenNode; + while (par_node!=NULL) { + { + if (!xmlStrcmp(par_node->name, (const xmlChar *)"par")) { + xmlChar *namec = xmlGetProp(par_node, BAD_CAST "name"); + xmlChar *valc = xmlGetProp(par_node, BAD_CAST "val"); + if (valc) { + AssignValToPar((const char*)namec,(const char*)valc); + } else { + // Probably a valarray + xmlNode *sub_par_node = par_node->xmlChildrenNode; + vector valarray; + while (sub_par_node != NULL) { + if (!xmlStrcmp(sub_par_node->name, (const xmlChar *)"valarray")) { + valarray = XMLIO::XMLReadValArray(sub_par_node); + } + sub_par_node = sub_par_node->next; + } + AssignValArrayToPar((const char*)namec, valarray); + } + } + } + par_node = par_node->next; + } + + } + cur=cur->next; + } + +}*/ + +ostream &operator<<(ostream &os, Parameter &p) { + p.Write(os); + return os; +} + diff --git a/src/parameter.h b/src/parameter.h new file mode 100644 --- /dev/null +++ b/src/parameter.h @@ -0,0 +1,149 @@ +/* + * + * $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 _PARAMETER_H_ +#define _PARAMETER_H_ +#include "vector.h" +#include + +#include +#include + +class Parameter { + + public: + Parameter(); + ~Parameter(); + void CleanUp(void); + void Read(const char *filename); + void Write(ostream &os) const; + void XMLAdd(xmlNode *root) const; + void XMLRead(xmlNode *root); + void AssignValToPar(const char *namec, const char *valc); + void AssignValArrayToPar(const char *namec, vector valarray); + char * arrowcolor; + double arrowsize; + char * textcolor; + int cellnumsize; + int nodenumsize; + double node_mag; + double outlinewidth; + char * cell_outline_color; + int resize_stride; + double T; + double lambda_length; + double lambda_celllength; + double target_length; + double cell_expansion_rate; + double cell_div_expansion_rate; + bool auxin_dependent_growth; + double ode_accuracy; + double mc_stepsize; + double mc_cell_stepsize; + double energy_threshold; + double bend_lambda; + double alignment_lambda; + double rel_cell_div_threshold; + double rel_perimeter_stiffness; + double collapse_node_threshold; + double morphogen_div_threshold; + double morphogen_expansion_threshold; + bool copy_wall; + double source; + double * D; + double * initval; + double k1; + double k2; + double r; + double kr; + double km; + double Pi_tot; + double transport; + double ka; + double pin_prod; + double pin_prod_in_epidermis; + double pin_breakdown; + double pin_breakdown_internal; + double aux1prod; + double aux1prodmeso; + double aux1decay; + double aux1decaymeso; + double aux1transport; + double aux_cons; + double aux_breakdown; + double kaux1; + double kap; + double leaf_tip_source; + double sam_efflux; + double sam_auxin; + double sam_auxin_breakdown; + double van3prod; + double van3autokat; + double van3sat; + double k2van3; + double dt; + double rd_dt; + char * datadir; + bool movie; + int nit; + double maxt; + int storage_stride; + int xml_storage_stride; + int rseed; + int constituous_expansion_limit; + double vessel_inh_level; + double vessel_expansion_rate; + double d; + double e; + double f; + double c; + double mu; + double nu; + double rho0; + double rho1; + double c0; + double gamma; + double eps; + double * k; + int i1; + int i2; + int i3; + int i4; + int i5; + char * s1; + char * s2; + char * s3; + bool b1; + bool b2; + bool b3; + bool b4; + char * dir1; + char * dir2; + private: +}; + +ostream &operator<<(ostream &os, Parameter &p); +const char *sbool(const bool &p); + + +#endif diff --git a/src/pardialog.cpp b/src/pardialog.cpp new file mode 100644 --- /dev/null +++ b/src/pardialog.cpp @@ -0,0 +1,806 @@ +/* + * + * 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 "pardialog.h" +#include "parameter.h" +#include +#include +#include +#include +#include + +static const std::string _module_id("$Id$"); + +ParameterDialog::ParameterDialog(QWidget *parent, const char *name, Qt::WindowFlags f) : QDialog(parent,name,false,f) { + extern Parameter par; + arrowcolor_edit = new QLineEdit( QString("%1").arg(par.arrowcolor), this, "arrowcolor_edit" ); + arrowsize_edit = new QLineEdit( QString("%1").arg(par.arrowsize), this, "arrowsize_edit" ); + textcolor_edit = new QLineEdit( QString("%1").arg(par.textcolor), this, "textcolor_edit" ); + cellnumsize_edit = new QLineEdit( QString("%1").arg(par.cellnumsize), this, "cellnumsize_edit" ); + nodenumsize_edit = new QLineEdit( QString("%1").arg(par.nodenumsize), this, "nodenumsize_edit" ); + node_mag_edit = new QLineEdit( QString("%1").arg(par.node_mag), this, "node_mag_edit" ); + outlinewidth_edit = new QLineEdit( QString("%1").arg(par.outlinewidth), this, "outlinewidth_edit" ); + cell_outline_color_edit = new QLineEdit( QString("%1").arg(par.cell_outline_color), this, "cell_outline_color_edit" ); + resize_stride_edit = new QLineEdit( QString("%1").arg(par.resize_stride), this, "resize_stride_edit" ); + T_edit = new QLineEdit( QString("%1").arg(par.T), this, "T_edit" ); + lambda_length_edit = new QLineEdit( QString("%1").arg(par.lambda_length), this, "lambda_length_edit" ); + lambda_celllength_edit = new QLineEdit( QString("%1").arg(par.lambda_celllength), this, "lambda_celllength_edit" ); + target_length_edit = new QLineEdit( QString("%1").arg(par.target_length), this, "target_length_edit" ); + cell_expansion_rate_edit = new QLineEdit( QString("%1").arg(par.cell_expansion_rate), this, "cell_expansion_rate_edit" ); + cell_div_expansion_rate_edit = new QLineEdit( QString("%1").arg(par.cell_div_expansion_rate), this, "cell_div_expansion_rate_edit" ); + auxin_dependent_growth_edit = new QLineEdit( QString("%1").arg(sbool(par.auxin_dependent_growth)), this, "auxin_dependent_growth_edit" ); + ode_accuracy_edit = new QLineEdit( QString("%1").arg(par.ode_accuracy), this, "ode_accuracy_edit" ); + mc_stepsize_edit = new QLineEdit( QString("%1").arg(par.mc_stepsize), this, "mc_stepsize_edit" ); + mc_cell_stepsize_edit = new QLineEdit( QString("%1").arg(par.mc_cell_stepsize), this, "mc_cell_stepsize_edit" ); + energy_threshold_edit = new QLineEdit( QString("%1").arg(par.energy_threshold), this, "energy_threshold_edit" ); + bend_lambda_edit = new QLineEdit( QString("%1").arg(par.bend_lambda), this, "bend_lambda_edit" ); + alignment_lambda_edit = new QLineEdit( QString("%1").arg(par.alignment_lambda), this, "alignment_lambda_edit" ); + rel_cell_div_threshold_edit = new QLineEdit( QString("%1").arg(par.rel_cell_div_threshold), this, "rel_cell_div_threshold_edit" ); + rel_perimeter_stiffness_edit = new QLineEdit( QString("%1").arg(par.rel_perimeter_stiffness), this, "rel_perimeter_stiffness_edit" ); + collapse_node_threshold_edit = new QLineEdit( QString("%1").arg(par.collapse_node_threshold), this, "collapse_node_threshold_edit" ); + morphogen_div_threshold_edit = new QLineEdit( QString("%1").arg(par.morphogen_div_threshold), this, "morphogen_div_threshold_edit" ); + morphogen_expansion_threshold_edit = new QLineEdit( QString("%1").arg(par.morphogen_expansion_threshold), this, "morphogen_expansion_threshold_edit" ); + copy_wall_edit = new QLineEdit( QString("%1").arg(sbool(par.copy_wall)), this, "copy_wall_edit" ); + source_edit = new QLineEdit( QString("%1").arg(par.source), this, "source_edit" ); + QString D_string("%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,%14,%15"); + D_string = D_string.arg(par.D[0]).arg(par.D[1]).arg(par.D[2]).arg(par.D[3]).arg(par.D[4]).arg(par.D[5]).arg(par.D[6]).arg(par.D[7]).arg(par.D[8]).arg(par.D[9]).arg(par.D[10]).arg(par.D[11]).arg(par.D[12]).arg(par.D[13]).arg(par.D[14]); + D_edit = new QLineEdit( D_string, this, "D_edit" ); + QString initval_string("%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,%14,%15"); + initval_string = initval_string.arg(par.initval[0]).arg(par.initval[1]).arg(par.initval[2]).arg(par.initval[3]).arg(par.initval[4]).arg(par.initval[5]).arg(par.initval[6]).arg(par.initval[7]).arg(par.initval[8]).arg(par.initval[9]).arg(par.initval[10]).arg(par.initval[11]).arg(par.initval[12]).arg(par.initval[13]).arg(par.initval[14]); + initval_edit = new QLineEdit( initval_string, this, "initval_edit" ); + k1_edit = new QLineEdit( QString("%1").arg(par.k1), this, "k1_edit" ); + k2_edit = new QLineEdit( QString("%1").arg(par.k2), this, "k2_edit" ); + r_edit = new QLineEdit( QString("%1").arg(par.r), this, "r_edit" ); + kr_edit = new QLineEdit( QString("%1").arg(par.kr), this, "kr_edit" ); + km_edit = new QLineEdit( QString("%1").arg(par.km), this, "km_edit" ); + Pi_tot_edit = new QLineEdit( QString("%1").arg(par.Pi_tot), this, "Pi_tot_edit" ); + transport_edit = new QLineEdit( QString("%1").arg(par.transport), this, "transport_edit" ); + ka_edit = new QLineEdit( QString("%1").arg(par.ka), this, "ka_edit" ); + pin_prod_edit = new QLineEdit( QString("%1").arg(par.pin_prod), this, "pin_prod_edit" ); + pin_prod_in_epidermis_edit = new QLineEdit( QString("%1").arg(par.pin_prod_in_epidermis), this, "pin_prod_in_epidermis_edit" ); + pin_breakdown_edit = new QLineEdit( QString("%1").arg(par.pin_breakdown), this, "pin_breakdown_edit" ); + pin_breakdown_internal_edit = new QLineEdit( QString("%1").arg(par.pin_breakdown_internal), this, "pin_breakdown_internal_edit" ); + aux1prod_edit = new QLineEdit( QString("%1").arg(par.aux1prod), this, "aux1prod_edit" ); + aux1prodmeso_edit = new QLineEdit( QString("%1").arg(par.aux1prodmeso), this, "aux1prodmeso_edit" ); + aux1decay_edit = new QLineEdit( QString("%1").arg(par.aux1decay), this, "aux1decay_edit" ); + aux1decaymeso_edit = new QLineEdit( QString("%1").arg(par.aux1decaymeso), this, "aux1decaymeso_edit" ); + aux1transport_edit = new QLineEdit( QString("%1").arg(par.aux1transport), this, "aux1transport_edit" ); + aux_cons_edit = new QLineEdit( QString("%1").arg(par.aux_cons), this, "aux_cons_edit" ); + aux_breakdown_edit = new QLineEdit( QString("%1").arg(par.aux_breakdown), this, "aux_breakdown_edit" ); + kaux1_edit = new QLineEdit( QString("%1").arg(par.kaux1), this, "kaux1_edit" ); + kap_edit = new QLineEdit( QString("%1").arg(par.kap), this, "kap_edit" ); + leaf_tip_source_edit = new QLineEdit( QString("%1").arg(par.leaf_tip_source), this, "leaf_tip_source_edit" ); + sam_efflux_edit = new QLineEdit( QString("%1").arg(par.sam_efflux), this, "sam_efflux_edit" ); + sam_auxin_edit = new QLineEdit( QString("%1").arg(par.sam_auxin), this, "sam_auxin_edit" ); + sam_auxin_breakdown_edit = new QLineEdit( QString("%1").arg(par.sam_auxin_breakdown), this, "sam_auxin_breakdown_edit" ); + van3prod_edit = new QLineEdit( QString("%1").arg(par.van3prod), this, "van3prod_edit" ); + van3autokat_edit = new QLineEdit( QString("%1").arg(par.van3autokat), this, "van3autokat_edit" ); + van3sat_edit = new QLineEdit( QString("%1").arg(par.van3sat), this, "van3sat_edit" ); + k2van3_edit = new QLineEdit( QString("%1").arg(par.k2van3), this, "k2van3_edit" ); + dt_edit = new QLineEdit( QString("%1").arg(par.dt), this, "dt_edit" ); + rd_dt_edit = new QLineEdit( QString("%1").arg(par.rd_dt), this, "rd_dt_edit" ); + datadir_edit = new QLineEdit( QString("%1").arg(par.datadir), this, "datadir_edit" ); + movie_edit = new QLineEdit( QString("%1").arg(sbool(par.movie)), this, "movie_edit" ); + nit_edit = new QLineEdit( QString("%1").arg(par.nit), this, "nit_edit" ); + maxt_edit = new QLineEdit( QString("%1").arg(par.maxt), this, "maxt_edit" ); + storage_stride_edit = new QLineEdit( QString("%1").arg(par.storage_stride), this, "storage_stride_edit" ); + xml_storage_stride_edit = new QLineEdit( QString("%1").arg(par.xml_storage_stride), this, "xml_storage_stride_edit" ); + rseed_edit = new QLineEdit( QString("%1").arg(par.rseed), this, "rseed_edit" ); + constituous_expansion_limit_edit = new QLineEdit( QString("%1").arg(par.constituous_expansion_limit), this, "constituous_expansion_limit_edit" ); + vessel_inh_level_edit = new QLineEdit( QString("%1").arg(par.vessel_inh_level), this, "vessel_inh_level_edit" ); + vessel_expansion_rate_edit = new QLineEdit( QString("%1").arg(par.vessel_expansion_rate), this, "vessel_expansion_rate_edit" ); + d_edit = new QLineEdit( QString("%1").arg(par.d), this, "d_edit" ); + e_edit = new QLineEdit( QString("%1").arg(par.e), this, "e_edit" ); + f_edit = new QLineEdit( QString("%1").arg(par.f), this, "f_edit" ); + c_edit = new QLineEdit( QString("%1").arg(par.c), this, "c_edit" ); + mu_edit = new QLineEdit( QString("%1").arg(par.mu), this, "mu_edit" ); + nu_edit = new QLineEdit( QString("%1").arg(par.nu), this, "nu_edit" ); + rho0_edit = new QLineEdit( QString("%1").arg(par.rho0), this, "rho0_edit" ); + rho1_edit = new QLineEdit( QString("%1").arg(par.rho1), this, "rho1_edit" ); + c0_edit = new QLineEdit( QString("%1").arg(par.c0), this, "c0_edit" ); + gamma_edit = new QLineEdit( QString("%1").arg(par.gamma), this, "gamma_edit" ); + eps_edit = new QLineEdit( QString("%1").arg(par.eps), this, "eps_edit" ); + QString k_string("%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,%14,%15"); + k_string = k_string.arg(par.k[0]).arg(par.k[1]).arg(par.k[2]).arg(par.k[3]).arg(par.k[4]).arg(par.k[5]).arg(par.k[6]).arg(par.k[7]).arg(par.k[8]).arg(par.k[9]).arg(par.k[10]).arg(par.k[11]).arg(par.k[12]).arg(par.k[13]).arg(par.k[14]); + k_edit = new QLineEdit( k_string, this, "k_edit" ); + i1_edit = new QLineEdit( QString("%1").arg(par.i1), this, "i1_edit" ); + i2_edit = new QLineEdit( QString("%1").arg(par.i2), this, "i2_edit" ); + i3_edit = new QLineEdit( QString("%1").arg(par.i3), this, "i3_edit" ); + i4_edit = new QLineEdit( QString("%1").arg(par.i4), this, "i4_edit" ); + i5_edit = new QLineEdit( QString("%1").arg(par.i5), this, "i5_edit" ); + s1_edit = new QLineEdit( QString("%1").arg(par.s1), this, "s1_edit" ); + s2_edit = new QLineEdit( QString("%1").arg(par.s2), this, "s2_edit" ); + s3_edit = new QLineEdit( QString("%1").arg(par.s3), this, "s3_edit" ); + b1_edit = new QLineEdit( QString("%1").arg(sbool(par.b1)), this, "b1_edit" ); + b2_edit = new QLineEdit( QString("%1").arg(sbool(par.b2)), this, "b2_edit" ); + b3_edit = new QLineEdit( QString("%1").arg(sbool(par.b3)), this, "b3_edit" ); + b4_edit = new QLineEdit( QString("%1").arg(sbool(par.b4)), this, "b4_edit" ); + dir1_edit = new QLineEdit( QString("%1").arg(par.dir1), this, "dir1_edit" ); + dir2_edit = new QLineEdit( QString("%1").arg(par.dir2), this, "dir2_edit" ); + // make a 1x1 grid; it will auto-expand + QGridLayout *grid = new QGridLayout( this, 1, 1 ); + + // add the first four widgets with (row, column) addressing + setWindowTitle( QString( " Parameter values for The Virtual Leaf") ); + grid->addWidget( new QLabel( "

Parameter values for The Virtual Leaf

",this), 0, 0, 1, -1, Qt::AlignCenter); + grid->addWidget( new QLabel( "", this), 0+1, 0, 1, -1); + grid->addWidget( new QLabel( " Visualization", this), 3, 0, 1, 2 ); + grid->addWidget( new QLabel( "arrowcolor", this ),4, 0 ); + grid->addWidget( arrowcolor_edit, 4, 0+1 ); + grid->addWidget( new QLabel( "arrowsize", this ),5, 0 ); + grid->addWidget( arrowsize_edit, 5, 0+1 ); + grid->addWidget( new QLabel( "textcolor", this ),6, 0 ); + grid->addWidget( textcolor_edit, 6, 0+1 ); + grid->addWidget( new QLabel( "cellnumsize", this ),7, 0 ); + grid->addWidget( cellnumsize_edit, 7, 0+1 ); + grid->addWidget( new QLabel( "nodenumsize", this ),8, 0 ); + grid->addWidget( nodenumsize_edit, 8, 0+1 ); + grid->addWidget( new QLabel( "node_mag", this ),9, 0 ); + grid->addWidget( node_mag_edit, 9, 0+1 ); + grid->addWidget( new QLabel( "outlinewidth", this ),10, 0 ); + grid->addWidget( outlinewidth_edit, 10, 0+1 ); + grid->addWidget( new QLabel( "cell_outline_color", this ),11, 0 ); + grid->addWidget( cell_outline_color_edit, 11, 0+1 ); + grid->addWidget( new QLabel( "resize_stride", this ),12, 0 ); + grid->addWidget( resize_stride_edit, 12, 0+1 ); + grid->addWidget( new QLabel( "", this), 13, 0, 1, 2 ); + grid->addWidget( new QLabel( " Cell mechanics", this), 14, 0, 1, 2 ); + grid->addWidget( new QLabel( "T", this ),15, 0 ); + grid->addWidget( T_edit, 15, 0+1 ); + grid->addWidget( new QLabel( "lambda_length", this ),16, 0 ); + grid->addWidget( lambda_length_edit, 16, 0+1 ); + grid->addWidget( new QLabel( "lambda_celllength", this ),17, 0 ); + grid->addWidget( lambda_celllength_edit, 17, 0+1 ); + grid->addWidget( new QLabel( "target_length", this ),18, 0 ); + grid->addWidget( target_length_edit, 18, 0+1 ); + grid->addWidget( new QLabel( "cell_expansion_rate", this ),19, 0 ); + grid->addWidget( cell_expansion_rate_edit, 19, 0+1 ); + grid->addWidget( new QLabel( "cell_div_expansion_rate", this ),20, 0 ); + grid->addWidget( cell_div_expansion_rate_edit, 20, 0+1 ); + grid->addWidget( new QLabel( "auxin_dependent_growth", this ),21, 0 ); + grid->addWidget( auxin_dependent_growth_edit, 21, 0+1 ); + grid->addWidget( new QLabel( "ode_accuracy", this ),22, 0 ); + grid->addWidget( ode_accuracy_edit, 22, 0+1 ); + grid->addWidget( new QLabel( "mc_stepsize", this ),23, 0 ); + grid->addWidget( mc_stepsize_edit, 23, 0+1 ); + grid->addWidget( new QLabel( "mc_cell_stepsize", this ),24, 0 ); + grid->addWidget( mc_cell_stepsize_edit, 24, 0+1 ); + grid->addWidget( new QLabel( "energy_threshold", this ),25, 0 ); + grid->addWidget( energy_threshold_edit, 25, 0+1 ); + grid->addWidget( new QLabel( "bend_lambda", this ),26, 0 ); + grid->addWidget( bend_lambda_edit, 26, 0+1 ); + grid->addWidget( new QLabel( "alignment_lambda", this ),27, 0 ); + grid->addWidget( alignment_lambda_edit, 27, 0+1 ); + grid->addWidget( new QLabel( "rel_cell_div_threshold", this ),28, 0 ); + grid->addWidget( rel_cell_div_threshold_edit, 28, 0+1 ); + grid->addWidget( new QLabel( "rel_perimeter_stiffness", this ),29, 0 ); + grid->addWidget( rel_perimeter_stiffness_edit, 29, 0+1 ); + grid->addWidget( new QLabel( "collapse_node_threshold", this ),3, 2 ); + grid->addWidget( collapse_node_threshold_edit, 3, 2+1 ); + grid->addWidget( new QLabel( "morphogen_div_threshold", this ),4, 2 ); + grid->addWidget( morphogen_div_threshold_edit, 4, 2+1 ); + grid->addWidget( new QLabel( "morphogen_expansion_threshold", this ),5, 2 ); + grid->addWidget( morphogen_expansion_threshold_edit, 5, 2+1 ); + grid->addWidget( new QLabel( "copy_wall", this ),6, 2 ); + grid->addWidget( copy_wall_edit, 6, 2+1 ); + grid->addWidget( new QLabel( "", this), 7, 2, 1, 2 ); + grid->addWidget( new QLabel( " Auxin transport and PIN1 dynamics", this), 8, 2, 1, 2 ); + grid->addWidget( new QLabel( "source", this ),9, 2 ); + grid->addWidget( source_edit, 9, 2+1 ); + grid->addWidget( new QLabel( "D", this ),10, 2 ); + grid->addWidget( D_edit, 10, 2+1 ); + grid->addWidget( new QLabel( "initval", this ),11, 2 ); + grid->addWidget( initval_edit, 11, 2+1 ); + grid->addWidget( new QLabel( "k1", this ),12, 2 ); + grid->addWidget( k1_edit, 12, 2+1 ); + grid->addWidget( new QLabel( "k2", this ),13, 2 ); + grid->addWidget( k2_edit, 13, 2+1 ); + grid->addWidget( new QLabel( "r", this ),14, 2 ); + grid->addWidget( r_edit, 14, 2+1 ); + grid->addWidget( new QLabel( "kr", this ),15, 2 ); + grid->addWidget( kr_edit, 15, 2+1 ); + grid->addWidget( new QLabel( "km", this ),16, 2 ); + grid->addWidget( km_edit, 16, 2+1 ); + grid->addWidget( new QLabel( "Pi_tot", this ),17, 2 ); + grid->addWidget( Pi_tot_edit, 17, 2+1 ); + grid->addWidget( new QLabel( "transport", this ),18, 2 ); + grid->addWidget( transport_edit, 18, 2+1 ); + grid->addWidget( new QLabel( "ka", this ),19, 2 ); + grid->addWidget( ka_edit, 19, 2+1 ); + grid->addWidget( new QLabel( "pin_prod", this ),20, 2 ); + grid->addWidget( pin_prod_edit, 20, 2+1 ); + grid->addWidget( new QLabel( "pin_prod_in_epidermis", this ),21, 2 ); + grid->addWidget( pin_prod_in_epidermis_edit, 21, 2+1 ); + grid->addWidget( new QLabel( "pin_breakdown", this ),22, 2 ); + grid->addWidget( pin_breakdown_edit, 22, 2+1 ); + grid->addWidget( new QLabel( "pin_breakdown_internal", this ),23, 2 ); + grid->addWidget( pin_breakdown_internal_edit, 23, 2+1 ); + grid->addWidget( new QLabel( "aux1prod", this ),24, 2 ); + grid->addWidget( aux1prod_edit, 24, 2+1 ); + grid->addWidget( new QLabel( "aux1prodmeso", this ),25, 2 ); + grid->addWidget( aux1prodmeso_edit, 25, 2+1 ); + grid->addWidget( new QLabel( "aux1decay", this ),26, 2 ); + grid->addWidget( aux1decay_edit, 26, 2+1 ); + grid->addWidget( new QLabel( "aux1decaymeso", this ),27, 2 ); + grid->addWidget( aux1decaymeso_edit, 27, 2+1 ); + grid->addWidget( new QLabel( "aux1transport", this ),28, 2 ); + grid->addWidget( aux1transport_edit, 28, 2+1 ); + grid->addWidget( new QLabel( "aux_cons", this ),29, 2 ); + grid->addWidget( aux_cons_edit, 29, 2+1 ); + grid->addWidget( new QLabel( "aux_breakdown", this ),3, 4 ); + grid->addWidget( aux_breakdown_edit, 3, 4+1 ); + grid->addWidget( new QLabel( "kaux1", this ),4, 4 ); + grid->addWidget( kaux1_edit, 4, 4+1 ); + grid->addWidget( new QLabel( "kap", this ),5, 4 ); + grid->addWidget( kap_edit, 5, 4+1 ); + grid->addWidget( new QLabel( "leaf_tip_source", this ),6, 4 ); + grid->addWidget( leaf_tip_source_edit, 6, 4+1 ); + grid->addWidget( new QLabel( "sam_efflux", this ),7, 4 ); + grid->addWidget( sam_efflux_edit, 7, 4+1 ); + grid->addWidget( new QLabel( "sam_auxin", this ),8, 4 ); + grid->addWidget( sam_auxin_edit, 8, 4+1 ); + grid->addWidget( new QLabel( "sam_auxin_breakdown", this ),9, 4 ); + grid->addWidget( sam_auxin_breakdown_edit, 9, 4+1 ); + grid->addWidget( new QLabel( "van3prod", this ),10, 4 ); + grid->addWidget( van3prod_edit, 10, 4+1 ); + grid->addWidget( new QLabel( "van3autokat", this ),11, 4 ); + grid->addWidget( van3autokat_edit, 11, 4+1 ); + grid->addWidget( new QLabel( "van3sat", this ),12, 4 ); + grid->addWidget( van3sat_edit, 12, 4+1 ); + grid->addWidget( new QLabel( "k2van3", this ),13, 4 ); + grid->addWidget( k2van3_edit, 13, 4+1 ); + grid->addWidget( new QLabel( "", this), 14, 4, 1, 2 ); + grid->addWidget( new QLabel( " Integration parameters", this), 15, 4, 1, 2 ); + grid->addWidget( new QLabel( "dt", this ),16, 4 ); + grid->addWidget( dt_edit, 16, 4+1 ); + grid->addWidget( new QLabel( "rd_dt", this ),17, 4 ); + grid->addWidget( rd_dt_edit, 17, 4+1 ); + grid->addWidget( new QLabel( "datadir", this ),18, 4 ); + grid->addWidget( datadir_edit, 18, 4+1 ); + grid->addWidget( new QLabel( "movie", this ),19, 4 ); + grid->addWidget( movie_edit, 19, 4+1 ); + grid->addWidget( new QLabel( "nit", this ),20, 4 ); + grid->addWidget( nit_edit, 20, 4+1 ); + grid->addWidget( new QLabel( "maxt", this ),21, 4 ); + grid->addWidget( maxt_edit, 21, 4+1 ); + grid->addWidget( new QLabel( "storage_stride", this ),22, 4 ); + grid->addWidget( storage_stride_edit, 22, 4+1 ); + grid->addWidget( new QLabel( "xml_storage_stride", this ),23, 4 ); + grid->addWidget( xml_storage_stride_edit, 23, 4+1 ); + grid->addWidget( new QLabel( "rseed", this ),24, 4 ); + grid->addWidget( rseed_edit, 24, 4+1 ); + grid->addWidget( new QLabel( "", this), 25, 4, 1, 2 ); + grid->addWidget( new QLabel( " Meinhardt leaf venation model", this), 26, 4, 1, 2 ); + grid->addWidget( new QLabel( "constituous_expansion_limit", this ),27, 4 ); + grid->addWidget( constituous_expansion_limit_edit, 27, 4+1 ); + grid->addWidget( new QLabel( "vessel_inh_level", this ),28, 4 ); + grid->addWidget( vessel_inh_level_edit, 28, 4+1 ); + grid->addWidget( new QLabel( "vessel_expansion_rate", this ),29, 4 ); + grid->addWidget( vessel_expansion_rate_edit, 29, 4+1 ); + grid->addWidget( new QLabel( "d", this ),3, 6 ); + grid->addWidget( d_edit, 3, 6+1 ); + grid->addWidget( new QLabel( "e", this ),4, 6 ); + grid->addWidget( e_edit, 4, 6+1 ); + grid->addWidget( new QLabel( "f", this ),5, 6 ); + grid->addWidget( f_edit, 5, 6+1 ); + grid->addWidget( new QLabel( "c", this ),6, 6 ); + grid->addWidget( c_edit, 6, 6+1 ); + grid->addWidget( new QLabel( "mu", this ),7, 6 ); + grid->addWidget( mu_edit, 7, 6+1 ); + grid->addWidget( new QLabel( "nu", this ),8, 6 ); + grid->addWidget( nu_edit, 8, 6+1 ); + grid->addWidget( new QLabel( "rho0", this ),9, 6 ); + grid->addWidget( rho0_edit, 9, 6+1 ); + grid->addWidget( new QLabel( "rho1", this ),10, 6 ); + grid->addWidget( rho1_edit, 10, 6+1 ); + grid->addWidget( new QLabel( "c0", this ),11, 6 ); + grid->addWidget( c0_edit, 11, 6+1 ); + grid->addWidget( new QLabel( "gamma", this ),12, 6 ); + grid->addWidget( gamma_edit, 12, 6+1 ); + grid->addWidget( new QLabel( "eps", this ),13, 6 ); + grid->addWidget( eps_edit, 13, 6+1 ); + grid->addWidget( new QLabel( "", this), 14, 6, 1, 2 ); + grid->addWidget( new QLabel( " User-defined parameters", this), 15, 6, 1, 2 ); + grid->addWidget( new QLabel( "k", this ),16, 6 ); + grid->addWidget( k_edit, 16, 6+1 ); + grid->addWidget( new QLabel( "i1", this ),17, 6 ); + grid->addWidget( i1_edit, 17, 6+1 ); + grid->addWidget( new QLabel( "i2", this ),18, 6 ); + grid->addWidget( i2_edit, 18, 6+1 ); + grid->addWidget( new QLabel( "i3", this ),19, 6 ); + grid->addWidget( i3_edit, 19, 6+1 ); + grid->addWidget( new QLabel( "i4", this ),20, 6 ); + grid->addWidget( i4_edit, 20, 6+1 ); + grid->addWidget( new QLabel( "i5", this ),21, 6 ); + grid->addWidget( i5_edit, 21, 6+1 ); + grid->addWidget( new QLabel( "s1", this ),22, 6 ); + grid->addWidget( s1_edit, 22, 6+1 ); + grid->addWidget( new QLabel( "s2", this ),23, 6 ); + grid->addWidget( s2_edit, 23, 6+1 ); + grid->addWidget( new QLabel( "s3", this ),24, 6 ); + grid->addWidget( s3_edit, 24, 6+1 ); + grid->addWidget( new QLabel( "b1", this ),25, 6 ); + grid->addWidget( b1_edit, 25, 6+1 ); + grid->addWidget( new QLabel( "b2", this ),26, 6 ); + grid->addWidget( b2_edit, 26, 6+1 ); + grid->addWidget( new QLabel( "b3", this ),27, 6 ); + grid->addWidget( b3_edit, 27, 6+1 ); + grid->addWidget( new QLabel( "b4", this ),28, 6 ); + grid->addWidget( b4_edit, 28, 6+1 ); + grid->addWidget( new QLabel( "dir1", this ),29, 6 ); + grid->addWidget( dir1_edit, 29, 6+1 ); + grid->addWidget( new QLabel( "dir2", this ),3, 8 ); + grid->addWidget( dir2_edit, 3, 8+1 ); + QPushButton *pb = new QPushButton( "&Write", this ); + grid->addWidget(pb, 31, 6 ); + connect( pb, SIGNAL( clicked() ), this, SLOT( write() ) ); + QPushButton *pb2 = new QPushButton( "&Close", this ); + grid->addWidget(pb2,31, 6+1 ); + connect( pb2, SIGNAL( clicked() ), this, SLOT( close() ) ); + QPushButton *pb3 = new QPushButton( "&Reset", this ); + grid->addWidget(pb3, 31, 6+2 ); + connect( pb3, SIGNAL( clicked() ), this, SLOT( Reset() ) ); + show(); +}; + +ParameterDialog::~ParameterDialog(void) { +delete arrowcolor_edit; +delete arrowsize_edit; +delete textcolor_edit; +delete cellnumsize_edit; +delete nodenumsize_edit; +delete node_mag_edit; +delete outlinewidth_edit; +delete cell_outline_color_edit; +delete resize_stride_edit; +delete T_edit; +delete lambda_length_edit; +delete lambda_celllength_edit; +delete target_length_edit; +delete cell_expansion_rate_edit; +delete cell_div_expansion_rate_edit; +delete auxin_dependent_growth_edit; +delete ode_accuracy_edit; +delete mc_stepsize_edit; +delete mc_cell_stepsize_edit; +delete energy_threshold_edit; +delete bend_lambda_edit; +delete alignment_lambda_edit; +delete rel_cell_div_threshold_edit; +delete rel_perimeter_stiffness_edit; +delete collapse_node_threshold_edit; +delete morphogen_div_threshold_edit; +delete morphogen_expansion_threshold_edit; +delete copy_wall_edit; +delete source_edit; +delete D_edit; +delete initval_edit; +delete k1_edit; +delete k2_edit; +delete r_edit; +delete kr_edit; +delete km_edit; +delete Pi_tot_edit; +delete transport_edit; +delete ka_edit; +delete pin_prod_edit; +delete pin_prod_in_epidermis_edit; +delete pin_breakdown_edit; +delete pin_breakdown_internal_edit; +delete aux1prod_edit; +delete aux1prodmeso_edit; +delete aux1decay_edit; +delete aux1decaymeso_edit; +delete aux1transport_edit; +delete aux_cons_edit; +delete aux_breakdown_edit; +delete kaux1_edit; +delete kap_edit; +delete leaf_tip_source_edit; +delete sam_efflux_edit; +delete sam_auxin_edit; +delete sam_auxin_breakdown_edit; +delete van3prod_edit; +delete van3autokat_edit; +delete van3sat_edit; +delete k2van3_edit; +delete dt_edit; +delete rd_dt_edit; +delete datadir_edit; +delete movie_edit; +delete nit_edit; +delete maxt_edit; +delete storage_stride_edit; +delete xml_storage_stride_edit; +delete rseed_edit; +delete constituous_expansion_limit_edit; +delete vessel_inh_level_edit; +delete vessel_expansion_rate_edit; +delete d_edit; +delete e_edit; +delete f_edit; +delete c_edit; +delete mu_edit; +delete nu_edit; +delete rho0_edit; +delete rho1_edit; +delete c0_edit; +delete gamma_edit; +delete eps_edit; +delete k_edit; +delete i1_edit; +delete i2_edit; +delete i3_edit; +delete i4_edit; +delete i5_edit; +delete s1_edit; +delete s2_edit; +delete s3_edit; +delete b1_edit; +delete b2_edit; +delete b3_edit; +delete b4_edit; +delete dir1_edit; +delete dir2_edit; +} + +void ParameterDialog::write(void) { + + extern Parameter par; + QString tmpval; + par.arrowcolor = strdup((const char *)arrowcolor_edit->text()); + par.arrowsize = arrowsize_edit->text().toDouble(); + par.textcolor = strdup((const char *)textcolor_edit->text()); + par.cellnumsize = cellnumsize_edit->text().toInt(); + par.nodenumsize = nodenumsize_edit->text().toInt(); + par.node_mag = node_mag_edit->text().toDouble(); + par.outlinewidth = outlinewidth_edit->text().toDouble(); + par.cell_outline_color = strdup((const char *)cell_outline_color_edit->text()); + par.resize_stride = resize_stride_edit->text().toInt(); + par.T = T_edit->text().toDouble(); + par.lambda_length = lambda_length_edit->text().toDouble(); + par.lambda_celllength = lambda_celllength_edit->text().toDouble(); + par.target_length = target_length_edit->text().toDouble(); + par.cell_expansion_rate = cell_expansion_rate_edit->text().toDouble(); + par.cell_div_expansion_rate = cell_div_expansion_rate_edit->text().toDouble(); + tmpval = auxin_dependent_growth_edit->text().stripWhiteSpace(); + if (tmpval == "true" || tmpval == "yes" ) par.auxin_dependent_growth = true; + else if (tmpval == "false" || tmpval == "no") par.auxin_dependent_growth = false; + else { + if (QMessageBox::question(this, "Syntax error", tr("Value %1 of parameter %2 is not recognized as Boolean.\nDo you mean TRUE or FALSE?").arg(tmpval).arg("auxin_dependent_growth"),"True","False", QString::null, 0, 1)==0) par.auxin_dependent_growth=true; + else par.auxin_dependent_growth=false; + } + par.ode_accuracy = ode_accuracy_edit->text().toDouble(); + par.mc_stepsize = mc_stepsize_edit->text().toDouble(); + par.mc_cell_stepsize = mc_cell_stepsize_edit->text().toDouble(); + par.energy_threshold = energy_threshold_edit->text().toDouble(); + par.bend_lambda = bend_lambda_edit->text().toDouble(); + par.alignment_lambda = alignment_lambda_edit->text().toDouble(); + par.rel_cell_div_threshold = rel_cell_div_threshold_edit->text().toDouble(); + par.rel_perimeter_stiffness = rel_perimeter_stiffness_edit->text().toDouble(); + par.collapse_node_threshold = collapse_node_threshold_edit->text().toDouble(); + par.morphogen_div_threshold = morphogen_div_threshold_edit->text().toDouble(); + par.morphogen_expansion_threshold = morphogen_expansion_threshold_edit->text().toDouble(); + tmpval = copy_wall_edit->text().stripWhiteSpace(); + if (tmpval == "true" || tmpval == "yes" ) par.copy_wall = true; + else if (tmpval == "false" || tmpval == "no") par.copy_wall = false; + else { + if (QMessageBox::question(this, "Syntax error", tr("Value %1 of parameter %2 is not recognized as Boolean.\nDo you mean TRUE or FALSE?").arg(tmpval).arg("copy_wall"),"True","False", QString::null, 0, 1)==0) par.copy_wall=true; + else par.copy_wall=false; + } + par.source = source_edit->text().toDouble(); + tmpval = D_edit->text().section(',', 0, 0); + par.D[0] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 1, 1); + par.D[1] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 2, 2); + par.D[2] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 3, 3); + par.D[3] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 4, 4); + par.D[4] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 5, 5); + par.D[5] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 6, 6); + par.D[6] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 7, 7); + par.D[7] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 8, 8); + par.D[8] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 9, 9); + par.D[9] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 10, 10); + par.D[10] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 11, 11); + par.D[11] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 12, 12); + par.D[12] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 13, 13); + par.D[13] = tmpval.toDouble(); + tmpval = D_edit->text().section(',', 14, 14); + par.D[14] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 0, 0); + par.initval[0] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 1, 1); + par.initval[1] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 2, 2); + par.initval[2] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 3, 3); + par.initval[3] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 4, 4); + par.initval[4] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 5, 5); + par.initval[5] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 6, 6); + par.initval[6] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 7, 7); + par.initval[7] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 8, 8); + par.initval[8] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 9, 9); + par.initval[9] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 10, 10); + par.initval[10] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 11, 11); + par.initval[11] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 12, 12); + par.initval[12] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 13, 13); + par.initval[13] = tmpval.toDouble(); + tmpval = initval_edit->text().section(',', 14, 14); + par.initval[14] = tmpval.toDouble(); + par.k1 = k1_edit->text().toDouble(); + par.k2 = k2_edit->text().toDouble(); + par.r = r_edit->text().toDouble(); + par.kr = kr_edit->text().toDouble(); + par.km = km_edit->text().toDouble(); + par.Pi_tot = Pi_tot_edit->text().toDouble(); + par.transport = transport_edit->text().toDouble(); + par.ka = ka_edit->text().toDouble(); + par.pin_prod = pin_prod_edit->text().toDouble(); + par.pin_prod_in_epidermis = pin_prod_in_epidermis_edit->text().toDouble(); + par.pin_breakdown = pin_breakdown_edit->text().toDouble(); + par.pin_breakdown_internal = pin_breakdown_internal_edit->text().toDouble(); + par.aux1prod = aux1prod_edit->text().toDouble(); + par.aux1prodmeso = aux1prodmeso_edit->text().toDouble(); + par.aux1decay = aux1decay_edit->text().toDouble(); + par.aux1decaymeso = aux1decaymeso_edit->text().toDouble(); + par.aux1transport = aux1transport_edit->text().toDouble(); + par.aux_cons = aux_cons_edit->text().toDouble(); + par.aux_breakdown = aux_breakdown_edit->text().toDouble(); + par.kaux1 = kaux1_edit->text().toDouble(); + par.kap = kap_edit->text().toDouble(); + par.leaf_tip_source = leaf_tip_source_edit->text().toDouble(); + par.sam_efflux = sam_efflux_edit->text().toDouble(); + par.sam_auxin = sam_auxin_edit->text().toDouble(); + par.sam_auxin_breakdown = sam_auxin_breakdown_edit->text().toDouble(); + par.van3prod = van3prod_edit->text().toDouble(); + par.van3autokat = van3autokat_edit->text().toDouble(); + par.van3sat = van3sat_edit->text().toDouble(); + par.k2van3 = k2van3_edit->text().toDouble(); + par.dt = dt_edit->text().toDouble(); + par.rd_dt = rd_dt_edit->text().toDouble(); + par.datadir = strdup((const char *)datadir_edit->text()); + tmpval = movie_edit->text().stripWhiteSpace(); + if (tmpval == "true" || tmpval == "yes" ) par.movie = true; + else if (tmpval == "false" || tmpval == "no") par.movie = false; + else { + if (QMessageBox::question(this, "Syntax error", tr("Value %1 of parameter %2 is not recognized as Boolean.\nDo you mean TRUE or FALSE?").arg(tmpval).arg("movie"),"True","False", QString::null, 0, 1)==0) par.movie=true; + else par.movie=false; + } + par.nit = nit_edit->text().toInt(); + par.maxt = maxt_edit->text().toDouble(); + par.storage_stride = storage_stride_edit->text().toInt(); + par.xml_storage_stride = xml_storage_stride_edit->text().toInt(); + par.rseed = rseed_edit->text().toInt(); + par.constituous_expansion_limit = constituous_expansion_limit_edit->text().toInt(); + par.vessel_inh_level = vessel_inh_level_edit->text().toDouble(); + par.vessel_expansion_rate = vessel_expansion_rate_edit->text().toDouble(); + par.d = d_edit->text().toDouble(); + par.e = e_edit->text().toDouble(); + par.f = f_edit->text().toDouble(); + par.c = c_edit->text().toDouble(); + par.mu = mu_edit->text().toDouble(); + par.nu = nu_edit->text().toDouble(); + par.rho0 = rho0_edit->text().toDouble(); + par.rho1 = rho1_edit->text().toDouble(); + par.c0 = c0_edit->text().toDouble(); + par.gamma = gamma_edit->text().toDouble(); + par.eps = eps_edit->text().toDouble(); + tmpval = k_edit->text().section(',', 0, 0); + par.k[0] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 1, 1); + par.k[1] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 2, 2); + par.k[2] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 3, 3); + par.k[3] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 4, 4); + par.k[4] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 5, 5); + par.k[5] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 6, 6); + par.k[6] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 7, 7); + par.k[7] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 8, 8); + par.k[8] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 9, 9); + par.k[9] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 10, 10); + par.k[10] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 11, 11); + par.k[11] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 12, 12); + par.k[12] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 13, 13); + par.k[13] = tmpval.toDouble(); + tmpval = k_edit->text().section(',', 14, 14); + par.k[14] = tmpval.toDouble(); + par.i1 = i1_edit->text().toInt(); + par.i2 = i2_edit->text().toInt(); + par.i3 = i3_edit->text().toInt(); + par.i4 = i4_edit->text().toInt(); + par.i5 = i5_edit->text().toInt(); + par.s1 = strdup((const char *)s1_edit->text()); + par.s2 = strdup((const char *)s2_edit->text()); + par.s3 = strdup((const char *)s3_edit->text()); + tmpval = b1_edit->text().stripWhiteSpace(); + if (tmpval == "true" || tmpval == "yes" ) par.b1 = true; + else if (tmpval == "false" || tmpval == "no") par.b1 = false; + else { + if (QMessageBox::question(this, "Syntax error", tr("Value %1 of parameter %2 is not recognized as Boolean.\nDo you mean TRUE or FALSE?").arg(tmpval).arg("b1"),"True","False", QString::null, 0, 1)==0) par.b1=true; + else par.b1=false; + } + tmpval = b2_edit->text().stripWhiteSpace(); + if (tmpval == "true" || tmpval == "yes" ) par.b2 = true; + else if (tmpval == "false" || tmpval == "no") par.b2 = false; + else { + if (QMessageBox::question(this, "Syntax error", tr("Value %1 of parameter %2 is not recognized as Boolean.\nDo you mean TRUE or FALSE?").arg(tmpval).arg("b2"),"True","False", QString::null, 0, 1)==0) par.b2=true; + else par.b2=false; + } + tmpval = b3_edit->text().stripWhiteSpace(); + if (tmpval == "true" || tmpval == "yes" ) par.b3 = true; + else if (tmpval == "false" || tmpval == "no") par.b3 = false; + else { + if (QMessageBox::question(this, "Syntax error", tr("Value %1 of parameter %2 is not recognized as Boolean.\nDo you mean TRUE or FALSE?").arg(tmpval).arg("b3"),"True","False", QString::null, 0, 1)==0) par.b3=true; + else par.b3=false; + } + tmpval = b4_edit->text().stripWhiteSpace(); + if (tmpval == "true" || tmpval == "yes" ) par.b4 = true; + else if (tmpval == "false" || tmpval == "no") par.b4 = false; + else { + if (QMessageBox::question(this, "Syntax error", tr("Value %1 of parameter %2 is not recognized as Boolean.\nDo you mean TRUE or FALSE?").arg(tmpval).arg("b4"),"True","False", QString::null, 0, 1)==0) par.b4=true; + else par.b4=false; + } + par.dir1 = strdup((const char *)dir1_edit->text()); + par.dir2 = strdup((const char *)dir2_edit->text()); + Reset(); + +} +void ParameterDialog::Reset(void) { + extern Parameter par; + arrowcolor_edit->setText( QString("%1").arg(par.arrowcolor) ); + arrowsize_edit->setText( QString("%1").arg(par.arrowsize) ); + textcolor_edit->setText( QString("%1").arg(par.textcolor) ); + cellnumsize_edit->setText( QString("%1").arg(par.cellnumsize) ); + nodenumsize_edit->setText( QString("%1").arg(par.nodenumsize) ); + node_mag_edit->setText( QString("%1").arg(par.node_mag) ); + outlinewidth_edit->setText( QString("%1").arg(par.outlinewidth) ); + cell_outline_color_edit->setText( QString("%1").arg(par.cell_outline_color) ); + resize_stride_edit->setText( QString("%1").arg(par.resize_stride) ); + T_edit->setText( QString("%1").arg(par.T) ); + lambda_length_edit->setText( QString("%1").arg(par.lambda_length) ); + lambda_celllength_edit->setText( QString("%1").arg(par.lambda_celllength) ); + target_length_edit->setText( QString("%1").arg(par.target_length) ); + cell_expansion_rate_edit->setText( QString("%1").arg(par.cell_expansion_rate) ); + cell_div_expansion_rate_edit->setText( QString("%1").arg(par.cell_div_expansion_rate) ); + auxin_dependent_growth_edit->setText( QString("%1").arg(sbool(par.auxin_dependent_growth))); + ode_accuracy_edit->setText( QString("%1").arg(par.ode_accuracy) ); + mc_stepsize_edit->setText( QString("%1").arg(par.mc_stepsize) ); + mc_cell_stepsize_edit->setText( QString("%1").arg(par.mc_cell_stepsize) ); + energy_threshold_edit->setText( QString("%1").arg(par.energy_threshold) ); + bend_lambda_edit->setText( QString("%1").arg(par.bend_lambda) ); + alignment_lambda_edit->setText( QString("%1").arg(par.alignment_lambda) ); + rel_cell_div_threshold_edit->setText( QString("%1").arg(par.rel_cell_div_threshold) ); + rel_perimeter_stiffness_edit->setText( QString("%1").arg(par.rel_perimeter_stiffness) ); + collapse_node_threshold_edit->setText( QString("%1").arg(par.collapse_node_threshold) ); + morphogen_div_threshold_edit->setText( QString("%1").arg(par.morphogen_div_threshold) ); + morphogen_expansion_threshold_edit->setText( QString("%1").arg(par.morphogen_expansion_threshold) ); + copy_wall_edit->setText( QString("%1").arg(sbool(par.copy_wall))); + source_edit->setText( QString("%1").arg(par.source) ); + QString D_string("%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,%14,%15"); + D_string = D_string.arg(par.D[0]).arg(par.D[1]).arg(par.D[2]).arg(par.D[3]).arg(par.D[4]).arg(par.D[5]).arg(par.D[6]).arg(par.D[7]).arg(par.D[8]).arg(par.D[9]).arg(par.D[10]).arg(par.D[11]).arg(par.D[12]).arg(par.D[13]).arg(par.D[14]); + D_edit->setText( D_string ); + QString initval_string("%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,%14,%15"); + initval_string = initval_string.arg(par.initval[0]).arg(par.initval[1]).arg(par.initval[2]).arg(par.initval[3]).arg(par.initval[4]).arg(par.initval[5]).arg(par.initval[6]).arg(par.initval[7]).arg(par.initval[8]).arg(par.initval[9]).arg(par.initval[10]).arg(par.initval[11]).arg(par.initval[12]).arg(par.initval[13]).arg(par.initval[14]); + initval_edit->setText( initval_string ); + k1_edit->setText( QString("%1").arg(par.k1) ); + k2_edit->setText( QString("%1").arg(par.k2) ); + r_edit->setText( QString("%1").arg(par.r) ); + kr_edit->setText( QString("%1").arg(par.kr) ); + km_edit->setText( QString("%1").arg(par.km) ); + Pi_tot_edit->setText( QString("%1").arg(par.Pi_tot) ); + transport_edit->setText( QString("%1").arg(par.transport) ); + ka_edit->setText( QString("%1").arg(par.ka) ); + pin_prod_edit->setText( QString("%1").arg(par.pin_prod) ); + pin_prod_in_epidermis_edit->setText( QString("%1").arg(par.pin_prod_in_epidermis) ); + pin_breakdown_edit->setText( QString("%1").arg(par.pin_breakdown) ); + pin_breakdown_internal_edit->setText( QString("%1").arg(par.pin_breakdown_internal) ); + aux1prod_edit->setText( QString("%1").arg(par.aux1prod) ); + aux1prodmeso_edit->setText( QString("%1").arg(par.aux1prodmeso) ); + aux1decay_edit->setText( QString("%1").arg(par.aux1decay) ); + aux1decaymeso_edit->setText( QString("%1").arg(par.aux1decaymeso) ); + aux1transport_edit->setText( QString("%1").arg(par.aux1transport) ); + aux_cons_edit->setText( QString("%1").arg(par.aux_cons) ); + aux_breakdown_edit->setText( QString("%1").arg(par.aux_breakdown) ); + kaux1_edit->setText( QString("%1").arg(par.kaux1) ); + kap_edit->setText( QString("%1").arg(par.kap) ); + leaf_tip_source_edit->setText( QString("%1").arg(par.leaf_tip_source) ); + sam_efflux_edit->setText( QString("%1").arg(par.sam_efflux) ); + sam_auxin_edit->setText( QString("%1").arg(par.sam_auxin) ); + sam_auxin_breakdown_edit->setText( QString("%1").arg(par.sam_auxin_breakdown) ); + van3prod_edit->setText( QString("%1").arg(par.van3prod) ); + van3autokat_edit->setText( QString("%1").arg(par.van3autokat) ); + van3sat_edit->setText( QString("%1").arg(par.van3sat) ); + k2van3_edit->setText( QString("%1").arg(par.k2van3) ); + dt_edit->setText( QString("%1").arg(par.dt) ); + rd_dt_edit->setText( QString("%1").arg(par.rd_dt) ); + datadir_edit->setText( QString("%1").arg(par.datadir) ); + movie_edit->setText( QString("%1").arg(sbool(par.movie))); + nit_edit->setText( QString("%1").arg(par.nit) ); + maxt_edit->setText( QString("%1").arg(par.maxt) ); + storage_stride_edit->setText( QString("%1").arg(par.storage_stride) ); + xml_storage_stride_edit->setText( QString("%1").arg(par.xml_storage_stride) ); + rseed_edit->setText( QString("%1").arg(par.rseed) ); + constituous_expansion_limit_edit->setText( QString("%1").arg(par.constituous_expansion_limit) ); + vessel_inh_level_edit->setText( QString("%1").arg(par.vessel_inh_level) ); + vessel_expansion_rate_edit->setText( QString("%1").arg(par.vessel_expansion_rate) ); + d_edit->setText( QString("%1").arg(par.d) ); + e_edit->setText( QString("%1").arg(par.e) ); + f_edit->setText( QString("%1").arg(par.f) ); + c_edit->setText( QString("%1").arg(par.c) ); + mu_edit->setText( QString("%1").arg(par.mu) ); + nu_edit->setText( QString("%1").arg(par.nu) ); + rho0_edit->setText( QString("%1").arg(par.rho0) ); + rho1_edit->setText( QString("%1").arg(par.rho1) ); + c0_edit->setText( QString("%1").arg(par.c0) ); + gamma_edit->setText( QString("%1").arg(par.gamma) ); + eps_edit->setText( QString("%1").arg(par.eps) ); + QString k_string("%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,%14,%15"); + k_string = k_string.arg(par.k[0]).arg(par.k[1]).arg(par.k[2]).arg(par.k[3]).arg(par.k[4]).arg(par.k[5]).arg(par.k[6]).arg(par.k[7]).arg(par.k[8]).arg(par.k[9]).arg(par.k[10]).arg(par.k[11]).arg(par.k[12]).arg(par.k[13]).arg(par.k[14]); + k_edit->setText( k_string ); + i1_edit->setText( QString("%1").arg(par.i1) ); + i2_edit->setText( QString("%1").arg(par.i2) ); + i3_edit->setText( QString("%1").arg(par.i3) ); + i4_edit->setText( QString("%1").arg(par.i4) ); + i5_edit->setText( QString("%1").arg(par.i5) ); + s1_edit->setText( QString("%1").arg(par.s1) ); + s2_edit->setText( QString("%1").arg(par.s2) ); + s3_edit->setText( QString("%1").arg(par.s3) ); + b1_edit->setText( QString("%1").arg(sbool(par.b1))); + b2_edit->setText( QString("%1").arg(sbool(par.b2))); + b3_edit->setText( QString("%1").arg(sbool(par.b3))); + b4_edit->setText( QString("%1").arg(sbool(par.b4))); + dir1_edit->setText( QString("%1").arg(par.dir1) ); + dir2_edit->setText( QString("%1").arg(par.dir2) ); +} + diff --git a/src/pardialog.h b/src/pardialog.h new file mode 100644 --- /dev/null +++ b/src/pardialog.h @@ -0,0 +1,145 @@ +/* + * + * $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 PARAMETER_DIALOG_H +#define PARAMETER_DIALOG_H +#include +#include +#include +#include +#include +#include + +class ParameterDialog : public QDialog { + Q_OBJECT + + public: + ParameterDialog(QWidget *parent=0, const char *name = 0, Qt::WindowFlags f = 0); + virtual ~ParameterDialog(void); + public slots: + void Reset(void); + +private slots: + void write(void); + + private: + QLineEdit *arrowcolor_edit; + QLineEdit *arrowsize_edit; + QLineEdit *textcolor_edit; + QLineEdit *cellnumsize_edit; + QLineEdit *nodenumsize_edit; + QLineEdit *node_mag_edit; + QLineEdit *outlinewidth_edit; + QLineEdit *cell_outline_color_edit; + QLineEdit *resize_stride_edit; + QLineEdit *T_edit; + QLineEdit *lambda_length_edit; + QLineEdit *lambda_celllength_edit; + QLineEdit *target_length_edit; + QLineEdit *cell_expansion_rate_edit; + QLineEdit *cell_div_expansion_rate_edit; + QLineEdit *auxin_dependent_growth_edit; + QLineEdit *ode_accuracy_edit; + QLineEdit *mc_stepsize_edit; + QLineEdit *mc_cell_stepsize_edit; + QLineEdit *energy_threshold_edit; + QLineEdit *bend_lambda_edit; + QLineEdit *alignment_lambda_edit; + QLineEdit *rel_cell_div_threshold_edit; + QLineEdit *rel_perimeter_stiffness_edit; + QLineEdit *collapse_node_threshold_edit; + QLineEdit *morphogen_div_threshold_edit; + QLineEdit *morphogen_expansion_threshold_edit; + QLineEdit *copy_wall_edit; + QLineEdit *source_edit; + QLineEdit *D_edit; + QLineEdit *initval_edit; + QLineEdit *k1_edit; + QLineEdit *k2_edit; + QLineEdit *r_edit; + QLineEdit *kr_edit; + QLineEdit *km_edit; + QLineEdit *Pi_tot_edit; + QLineEdit *transport_edit; + QLineEdit *ka_edit; + QLineEdit *pin_prod_edit; + QLineEdit *pin_prod_in_epidermis_edit; + QLineEdit *pin_breakdown_edit; + QLineEdit *pin_breakdown_internal_edit; + QLineEdit *aux1prod_edit; + QLineEdit *aux1prodmeso_edit; + QLineEdit *aux1decay_edit; + QLineEdit *aux1decaymeso_edit; + QLineEdit *aux1transport_edit; + QLineEdit *aux_cons_edit; + QLineEdit *aux_breakdown_edit; + QLineEdit *kaux1_edit; + QLineEdit *kap_edit; + QLineEdit *leaf_tip_source_edit; + QLineEdit *sam_efflux_edit; + QLineEdit *sam_auxin_edit; + QLineEdit *sam_auxin_breakdown_edit; + QLineEdit *van3prod_edit; + QLineEdit *van3autokat_edit; + QLineEdit *van3sat_edit; + QLineEdit *k2van3_edit; + QLineEdit *dt_edit; + QLineEdit *rd_dt_edit; + QLineEdit *datadir_edit; + QLineEdit *movie_edit; + QLineEdit *nit_edit; + QLineEdit *maxt_edit; + QLineEdit *storage_stride_edit; + QLineEdit *xml_storage_stride_edit; + QLineEdit *rseed_edit; + QLineEdit *constituous_expansion_limit_edit; + QLineEdit *vessel_inh_level_edit; + QLineEdit *vessel_expansion_rate_edit; + QLineEdit *d_edit; + QLineEdit *e_edit; + QLineEdit *f_edit; + QLineEdit *c_edit; + QLineEdit *mu_edit; + QLineEdit *nu_edit; + QLineEdit *rho0_edit; + QLineEdit *rho1_edit; + QLineEdit *c0_edit; + QLineEdit *gamma_edit; + QLineEdit *eps_edit; + QLineEdit *k_edit; + QLineEdit *i1_edit; + QLineEdit *i2_edit; + QLineEdit *i3_edit; + QLineEdit *i4_edit; + QLineEdit *i5_edit; + QLineEdit *s1_edit; + QLineEdit *s2_edit; + QLineEdit *s3_edit; + QLineEdit *b1_edit; + QLineEdit *b2_edit; + QLineEdit *b3_edit; + QLineEdit *b4_edit; + QLineEdit *dir1_edit; + QLineEdit *dir2_edit; +}; +#endif