diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2010-10-14 + * mesh.cpp: In response to referees' comments, added new parameter "yield_threshold" instead of fixed parameter '4' for yield threshold. + + * wallitem.cpp: when clicking a wall, both the wall type was cycled and the transporterdialog popped up. Corrected this - for wall type cycling, hold the Control button while left clicking. TransporterDialog only pops up for left click. Also made sure the wall is redrawn after changing the transporter values. + + * cell.cpp (DivideWalls): accomodated for rename of Circumference -> WallCircumference * hull.h: added an operator< to sort Points diff --git a/src/VirtualLeafpar.tmpl b/src/VirtualLeafpar.tmpl --- a/src/VirtualLeafpar.tmpl +++ b/src/VirtualLeafpar.tmpl @@ -13,6 +13,7 @@ label = / label label = Cell mechanics / label T = 1.0 / double lambda_length = 100. / double +yielding_threshold = 4. / double lambda_celllength = 0. / double target_length = 60. / double cell_expansion_rate = 1. / double diff --git a/src/mesh.cpp b/src/mesh.cpp --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -761,10 +761,10 @@ double Mesh::DisplaceNodes(void) { static int count=0; // Insertion of nodes (cell wall yielding) if (!node.fixed) { - if (old_l1 > 4*Node::target_length && !cit->nb1->fixed) { + if (old_l1 > par.yielding_threshold*Node::target_length && !cit->nb1->fixed) { node_insertion_queue.push( Edge(cit->nb1, &node) ); } - if (old_l2 > 4*Node::target_length && !cit->nb2->fixed) { + if (old_l2 > par.yielding_threshold*Node::target_length && !cit->nb2->fixed) { node_insertion_queue.push( Edge(&node, cit->nb2 ) ); } count++; diff --git a/src/parameter.cpp b/src/parameter.cpp --- a/src/parameter.cpp +++ b/src/parameter.cpp @@ -53,6 +53,7 @@ Parameter::Parameter() { resize_stride = 0; T = 1.0; lambda_length = 100.; + yielding_threshold = 4.; lambda_celllength = 0.; target_length = 60.; cell_expansion_rate = 1.; @@ -253,6 +254,7 @@ void Parameter::Read(const char *filenam resize_stride = igetpar(fp, "resize_stride", 0, true); T = fgetpar(fp, "T", 1.0, true); lambda_length = fgetpar(fp, "lambda_length", 100., true); + yielding_threshold = fgetpar(fp, "yielding_threshold", 4., 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); @@ -380,6 +382,7 @@ void Parameter::Write(ostream &os) const os << " resize_stride = " << resize_stride << endl; os << " T = " << T << endl; os << " lambda_length = " << lambda_length << endl; + os << " yielding_threshold = " << yielding_threshold << endl; os << " lambda_celllength = " << lambda_celllength << endl; os << " target_length = " << target_length << endl; os << " cell_expansion_rate = " << cell_expansion_rate << endl; @@ -576,6 +579,13 @@ xmlNewProp(xmlpar, BAD_CAST "val", BAD_C } { xmlNode *xmlpar = xmlNewChild(xmlparameter, NULL, BAD_CAST "par", NULL); + xmlNewProp(xmlpar, BAD_CAST "name", BAD_CAST "yielding_threshold" ); + ostringstream text; + text << yielding_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 "lambda_celllength" ); ostringstream text; text << lambda_celllength; @@ -1525,6 +1535,10 @@ 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, "yielding_threshold")) { + yielding_threshold = standardlocale.toDouble(valc, &ok); + if (!ok) { MyWarning::error("Read error: cannot convert string \"%s\" to double while reading parameter 'yielding_threshold' 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); } diff --git a/src/parameter.h b/src/parameter.h --- a/src/parameter.h +++ b/src/parameter.h @@ -55,6 +55,7 @@ int resize_stride; double T; double lambda_length; + double yielding_threshold; double lambda_celllength; double target_length; double cell_expansion_rate; diff --git a/src/pardialog.cpp b/src/pardialog.cpp --- a/src/pardialog.cpp +++ b/src/pardialog.cpp @@ -45,6 +45,7 @@ ParameterDialog::ParameterDialog(QWidget 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" ); + yielding_threshold_edit = new QLineEdit( QString("%1").arg(par.yielding_threshold), this, "yielding_threshold_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" ); @@ -172,192 +173,194 @@ QGridLayout *grid = new QGridLayout( thi 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 ); - grid->addWidget( new QLabel( "export_interval", this ),4, 8 ); - grid->addWidget( export_interval_edit, 4, 8+1 ); - grid->addWidget( new QLabel( "export_fn_prefix", this ),5, 8 ); - grid->addWidget( export_fn_prefix_edit, 5, 8+1 ); + grid->addWidget( new QLabel( "yielding_threshold", this ),17, 0 ); + grid->addWidget( yielding_threshold_edit, 17, 0+1 ); + grid->addWidget( new QLabel( "lambda_celllength", this ),18, 0 ); + grid->addWidget( lambda_celllength_edit, 18, 0+1 ); + grid->addWidget( new QLabel( "target_length", this ),19, 0 ); + grid->addWidget( target_length_edit, 19, 0+1 ); + grid->addWidget( new QLabel( "cell_expansion_rate", this ),20, 0 ); + grid->addWidget( cell_expansion_rate_edit, 20, 0+1 ); + grid->addWidget( new QLabel( "cell_div_expansion_rate", this ),21, 0 ); + grid->addWidget( cell_div_expansion_rate_edit, 21, 0+1 ); + grid->addWidget( new QLabel( "auxin_dependent_growth", this ),22, 0 ); + grid->addWidget( auxin_dependent_growth_edit, 22, 0+1 ); + grid->addWidget( new QLabel( "ode_accuracy", this ),23, 0 ); + grid->addWidget( ode_accuracy_edit, 23, 0+1 ); + grid->addWidget( new QLabel( "mc_stepsize", this ),24, 0 ); + grid->addWidget( mc_stepsize_edit, 24, 0+1 ); + grid->addWidget( new QLabel( "mc_cell_stepsize", this ),25, 0 ); + grid->addWidget( mc_cell_stepsize_edit, 25, 0+1 ); + grid->addWidget( new QLabel( "energy_threshold", this ),26, 0 ); + grid->addWidget( energy_threshold_edit, 26, 0+1 ); + grid->addWidget( new QLabel( "bend_lambda", this ),27, 0 ); + grid->addWidget( bend_lambda_edit, 27, 0+1 ); + grid->addWidget( new QLabel( "alignment_lambda", this ),28, 0 ); + grid->addWidget( alignment_lambda_edit, 28, 0+1 ); + grid->addWidget( new QLabel( "rel_cell_div_threshold", this ),29, 0 ); + grid->addWidget( rel_cell_div_threshold_edit, 29, 0+1 ); + grid->addWidget( new QLabel( "rel_perimeter_stiffness", this ),3, 2 ); + grid->addWidget( rel_perimeter_stiffness_edit, 3, 2+1 ); + grid->addWidget( new QLabel( "collapse_node_threshold", this ),4, 2 ); + grid->addWidget( collapse_node_threshold_edit, 4, 2+1 ); + grid->addWidget( new QLabel( "morphogen_div_threshold", this ),5, 2 ); + grid->addWidget( morphogen_div_threshold_edit, 5, 2+1 ); + grid->addWidget( new QLabel( "morphogen_expansion_threshold", this ),6, 2 ); + grid->addWidget( morphogen_expansion_threshold_edit, 6, 2+1 ); + grid->addWidget( new QLabel( "copy_wall", this ),7, 2 ); + grid->addWidget( copy_wall_edit, 7, 2+1 ); + grid->addWidget( new QLabel( "", this), 8, 2, 1, 2 ); + grid->addWidget( new QLabel( " Auxin transport and PIN1 dynamics", this), 9, 2, 1, 2 ); + grid->addWidget( new QLabel( "source", this ),10, 2 ); + grid->addWidget( source_edit, 10, 2+1 ); + grid->addWidget( new QLabel( "D", this ),11, 2 ); + grid->addWidget( D_edit, 11, 2+1 ); + grid->addWidget( new QLabel( "initval", this ),12, 2 ); + grid->addWidget( initval_edit, 12, 2+1 ); + grid->addWidget( new QLabel( "k1", this ),13, 2 ); + grid->addWidget( k1_edit, 13, 2+1 ); + grid->addWidget( new QLabel( "k2", this ),14, 2 ); + grid->addWidget( k2_edit, 14, 2+1 ); + grid->addWidget( new QLabel( "r", this ),15, 2 ); + grid->addWidget( r_edit, 15, 2+1 ); + grid->addWidget( new QLabel( "kr", this ),16, 2 ); + grid->addWidget( kr_edit, 16, 2+1 ); + grid->addWidget( new QLabel( "km", this ),17, 2 ); + grid->addWidget( km_edit, 17, 2+1 ); + grid->addWidget( new QLabel( "Pi_tot", this ),18, 2 ); + grid->addWidget( Pi_tot_edit, 18, 2+1 ); + grid->addWidget( new QLabel( "transport", this ),19, 2 ); + grid->addWidget( transport_edit, 19, 2+1 ); + grid->addWidget( new QLabel( "ka", this ),20, 2 ); + grid->addWidget( ka_edit, 20, 2+1 ); + grid->addWidget( new QLabel( "pin_prod", this ),21, 2 ); + grid->addWidget( pin_prod_edit, 21, 2+1 ); + grid->addWidget( new QLabel( "pin_prod_in_epidermis", this ),22, 2 ); + grid->addWidget( pin_prod_in_epidermis_edit, 22, 2+1 ); + grid->addWidget( new QLabel( "pin_breakdown", this ),23, 2 ); + grid->addWidget( pin_breakdown_edit, 23, 2+1 ); + grid->addWidget( new QLabel( "pin_breakdown_internal", this ),24, 2 ); + grid->addWidget( pin_breakdown_internal_edit, 24, 2+1 ); + grid->addWidget( new QLabel( "aux1prod", this ),25, 2 ); + grid->addWidget( aux1prod_edit, 25, 2+1 ); + grid->addWidget( new QLabel( "aux1prodmeso", this ),26, 2 ); + grid->addWidget( aux1prodmeso_edit, 26, 2+1 ); + grid->addWidget( new QLabel( "aux1decay", this ),27, 2 ); + grid->addWidget( aux1decay_edit, 27, 2+1 ); + grid->addWidget( new QLabel( "aux1decaymeso", this ),28, 2 ); + grid->addWidget( aux1decaymeso_edit, 28, 2+1 ); + grid->addWidget( new QLabel( "aux1transport", this ),29, 2 ); + grid->addWidget( aux1transport_edit, 29, 2+1 ); + grid->addWidget( new QLabel( "aux_cons", this ),3, 4 ); + grid->addWidget( aux_cons_edit, 3, 4+1 ); + grid->addWidget( new QLabel( "aux_breakdown", this ),4, 4 ); + grid->addWidget( aux_breakdown_edit, 4, 4+1 ); + grid->addWidget( new QLabel( "kaux1", this ),5, 4 ); + grid->addWidget( kaux1_edit, 5, 4+1 ); + grid->addWidget( new QLabel( "kap", this ),6, 4 ); + grid->addWidget( kap_edit, 6, 4+1 ); + grid->addWidget( new QLabel( "leaf_tip_source", this ),7, 4 ); + grid->addWidget( leaf_tip_source_edit, 7, 4+1 ); + grid->addWidget( new QLabel( "sam_efflux", this ),8, 4 ); + grid->addWidget( sam_efflux_edit, 8, 4+1 ); + grid->addWidget( new QLabel( "sam_auxin", this ),9, 4 ); + grid->addWidget( sam_auxin_edit, 9, 4+1 ); + grid->addWidget( new QLabel( "sam_auxin_breakdown", this ),10, 4 ); + grid->addWidget( sam_auxin_breakdown_edit, 10, 4+1 ); + grid->addWidget( new QLabel( "van3prod", this ),11, 4 ); + grid->addWidget( van3prod_edit, 11, 4+1 ); + grid->addWidget( new QLabel( "van3autokat", this ),12, 4 ); + grid->addWidget( van3autokat_edit, 12, 4+1 ); + grid->addWidget( new QLabel( "van3sat", this ),13, 4 ); + grid->addWidget( van3sat_edit, 13, 4+1 ); + grid->addWidget( new QLabel( "k2van3", this ),14, 4 ); + grid->addWidget( k2van3_edit, 14, 4+1 ); + grid->addWidget( new QLabel( "", this), 15, 4, 1, 2 ); + grid->addWidget( new QLabel( " Integration parameters", this), 16, 4, 1, 2 ); + grid->addWidget( new QLabel( "dt", this ),17, 4 ); + grid->addWidget( dt_edit, 17, 4+1 ); + grid->addWidget( new QLabel( "rd_dt", this ),18, 4 ); + grid->addWidget( rd_dt_edit, 18, 4+1 ); + grid->addWidget( new QLabel( "datadir", this ),19, 4 ); + grid->addWidget( datadir_edit, 19, 4+1 ); + grid->addWidget( new QLabel( "movie", this ),20, 4 ); + grid->addWidget( movie_edit, 20, 4+1 ); + grid->addWidget( new QLabel( "nit", this ),21, 4 ); + grid->addWidget( nit_edit, 21, 4+1 ); + grid->addWidget( new QLabel( "maxt", this ),22, 4 ); + grid->addWidget( maxt_edit, 22, 4+1 ); + grid->addWidget( new QLabel( "storage_stride", this ),23, 4 ); + grid->addWidget( storage_stride_edit, 23, 4+1 ); + grid->addWidget( new QLabel( "xml_storage_stride", this ),24, 4 ); + grid->addWidget( xml_storage_stride_edit, 24, 4+1 ); + grid->addWidget( new QLabel( "rseed", this ),25, 4 ); + grid->addWidget( rseed_edit, 25, 4+1 ); + grid->addWidget( new QLabel( "", this), 26, 4, 1, 2 ); + grid->addWidget( new QLabel( " Meinhardt leaf venation model", this), 27, 4, 1, 2 ); + grid->addWidget( new QLabel( "constituous_expansion_limit", this ),28, 4 ); + grid->addWidget( constituous_expansion_limit_edit, 28, 4+1 ); + grid->addWidget( new QLabel( "vessel_inh_level", this ),29, 4 ); + grid->addWidget( vessel_inh_level_edit, 29, 4+1 ); + grid->addWidget( new QLabel( "vessel_expansion_rate", this ),3, 6 ); + grid->addWidget( vessel_expansion_rate_edit, 3, 6+1 ); + grid->addWidget( new QLabel( "d", this ),4, 6 ); + grid->addWidget( d_edit, 4, 6+1 ); + grid->addWidget( new QLabel( "e", this ),5, 6 ); + grid->addWidget( e_edit, 5, 6+1 ); + grid->addWidget( new QLabel( "f", this ),6, 6 ); + grid->addWidget( f_edit, 6, 6+1 ); + grid->addWidget( new QLabel( "c", this ),7, 6 ); + grid->addWidget( c_edit, 7, 6+1 ); + grid->addWidget( new QLabel( "mu", this ),8, 6 ); + grid->addWidget( mu_edit, 8, 6+1 ); + grid->addWidget( new QLabel( "nu", this ),9, 6 ); + grid->addWidget( nu_edit, 9, 6+1 ); + grid->addWidget( new QLabel( "rho0", this ),10, 6 ); + grid->addWidget( rho0_edit, 10, 6+1 ); + grid->addWidget( new QLabel( "rho1", this ),11, 6 ); + grid->addWidget( rho1_edit, 11, 6+1 ); + grid->addWidget( new QLabel( "c0", this ),12, 6 ); + grid->addWidget( c0_edit, 12, 6+1 ); + grid->addWidget( new QLabel( "gamma", this ),13, 6 ); + grid->addWidget( gamma_edit, 13, 6+1 ); + grid->addWidget( new QLabel( "eps", this ),14, 6 ); + grid->addWidget( eps_edit, 14, 6+1 ); + grid->addWidget( new QLabel( "", this), 15, 6, 1, 2 ); + grid->addWidget( new QLabel( " User-defined parameters", this), 16, 6, 1, 2 ); + grid->addWidget( new QLabel( "k", this ),17, 6 ); + grid->addWidget( k_edit, 17, 6+1 ); + grid->addWidget( new QLabel( "i1", this ),18, 6 ); + grid->addWidget( i1_edit, 18, 6+1 ); + grid->addWidget( new QLabel( "i2", this ),19, 6 ); + grid->addWidget( i2_edit, 19, 6+1 ); + grid->addWidget( new QLabel( "i3", this ),20, 6 ); + grid->addWidget( i3_edit, 20, 6+1 ); + grid->addWidget( new QLabel( "i4", this ),21, 6 ); + grid->addWidget( i4_edit, 21, 6+1 ); + grid->addWidget( new QLabel( "i5", this ),22, 6 ); + grid->addWidget( i5_edit, 22, 6+1 ); + grid->addWidget( new QLabel( "s1", this ),23, 6 ); + grid->addWidget( s1_edit, 23, 6+1 ); + grid->addWidget( new QLabel( "s2", this ),24, 6 ); + grid->addWidget( s2_edit, 24, 6+1 ); + grid->addWidget( new QLabel( "s3", this ),25, 6 ); + grid->addWidget( s3_edit, 25, 6+1 ); + grid->addWidget( new QLabel( "b1", this ),26, 6 ); + grid->addWidget( b1_edit, 26, 6+1 ); + grid->addWidget( new QLabel( "b2", this ),27, 6 ); + grid->addWidget( b2_edit, 27, 6+1 ); + grid->addWidget( new QLabel( "b3", this ),28, 6 ); + grid->addWidget( b3_edit, 28, 6+1 ); + grid->addWidget( new QLabel( "b4", this ),29, 6 ); + grid->addWidget( b4_edit, 29, 6+1 ); + grid->addWidget( new QLabel( "dir1", this ),3, 8 ); + grid->addWidget( dir1_edit, 3, 8+1 ); + grid->addWidget( new QLabel( "dir2", this ),4, 8 ); + grid->addWidget( dir2_edit, 4, 8+1 ); + grid->addWidget( new QLabel( "export_interval", this ),5, 8 ); + grid->addWidget( export_interval_edit, 5, 8+1 ); + grid->addWidget( new QLabel( "export_fn_prefix", this ),6, 8 ); + grid->addWidget( export_fn_prefix_edit, 6, 8+1 ); QPushButton *pb = new QPushButton( "&Write", this ); grid->addWidget(pb, 31, 6 ); connect( pb, SIGNAL( clicked() ), this, SLOT( write() ) ); @@ -382,6 +385,7 @@ delete cell_outline_color_edit; delete resize_stride_edit; delete T_edit; delete lambda_length_edit; +delete yielding_threshold_edit; delete lambda_celllength_edit; delete target_length_edit; delete cell_expansion_rate_edit; @@ -488,6 +492,7 @@ QString tmpval; par.resize_stride = resize_stride_edit->text().toInt(); par.T = T_edit->text().toDouble(); par.lambda_length = lambda_length_edit->text().toDouble(); + par.yielding_threshold = yielding_threshold_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(); @@ -722,6 +727,7 @@ void ParameterDialog::Reset(void) { 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) ); + yielding_threshold_edit->setText( QString("%1").arg(par.yielding_threshold) ); 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) ); diff --git a/src/pardialog.h b/src/pardialog.h --- a/src/pardialog.h +++ b/src/pardialog.h @@ -57,6 +57,7 @@ class ParameterDialog : public QDialog { QLineEdit *resize_stride_edit; QLineEdit *T_edit; QLineEdit *lambda_length_edit; + QLineEdit *yielding_threshold_edit; QLineEdit *lambda_celllength_edit; QLineEdit *target_length_edit; QLineEdit *cell_expansion_rate_edit; diff --git a/src/wallitem.cpp b/src/wallitem.cpp --- a/src/wallitem.cpp +++ b/src/wallitem.cpp @@ -86,7 +86,6 @@ void WallItem::setColor(void) { void WallItem::OnClick(QMouseEvent *e) { - Wall *w=&getWall(); #ifdef QDEBUG qDebug() << "Wall ID = " << w->Index() << ", this = " << w << endl; @@ -95,10 +94,8 @@ void WallItem::OnClick(QMouseEvent *e) { qDebug() << "N1 = " << w->N1()->Index() << ", N2 = " << w->N2()->Index() << endl; #endif CellBase *c = wn==1?w->C1():w->C2(); - - TransporterDialog dialog(w, c, wn); - dialog.exec(); - + + if (e->button() == Qt::RightButton) { QString message; if (wn==1) { @@ -111,22 +108,35 @@ void WallItem::OnClick(QMouseEvent *e) { } else { if (e->button() == Qt::LeftButton) { - if (c->BoundaryPolP()) { - w->cycleWallType(); - } else { - if (e->modifiers() == Qt::ShiftModifier) { - wn==1?w->setTransporters1(1,0):w->setTransporters2(1,0); + + if (e->modifiers() == Qt::ControlModifier) { + // let's consider wall type cycling an "easter egg". + // Ctrl modifier key required + if (c->BoundaryPolP()) { + w->cycleWallType(); } else { - // set high amount of PIN1 - //cerr << "Setting PIN1\n"; - wn==1?w->setTransporters1(1,10):w->setTransporters2(1,10); + if (e->modifiers() == Qt::ShiftModifier) { + wn==1?w->setTransporters1(1,0):w->setTransporters2(1,0); + + } else { + // set high amount of PIN1 + //cerr << "Setting PIN1\n"; + wn==1?w->setTransporters1(1,10):w->setTransporters2(1,10); + } } + setColor(); + } else { + TransporterDialog dialog(w, c, wn); + dialog.exec(); } - setColor(); - update(boundingRect()); - } + + } + } + setColor(); + update(boundingRect()); + } -/* finis */ + /* finis */