http://cmpdartsvr3-v.uea.ac.uk/wiki/BanghamLab/index.php?title=Tutorial_on_different_ways_of_specifying_the_growth_of_shapes&feed=atom&action=historyTutorial on different ways of specifying the growth of shapes - Revision history2024-03-28T17:25:18ZRevision history for this page on the wikiMediaWiki 1.35.5http://cmpdartsvr3-v.uea.ac.uk/wiki/BanghamLab/index.php?title=Tutorial_on_different_ways_of_specifying_the_growth_of_shapes&diff=6891&oldid=prevAndrewBangham: /* Illustrating independent ways to form shapes and the use of submodels. */2014-08-06T15:23:37Z<p><span dir="auto"><span class="autocomment">Illustrating independent ways to form shapes and the use of submodels.</span></span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 15:23, 6 August 2014</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l14" >Line 14:</td>
<td colspan="2" class="diff-lineno">Line 14:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|width="400pt"|'''Uniform specified growth'''. Creating a shape using a specified pattern of diffusable polariser.<br><br></div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|width="400pt"|'''Uniform specified growth'''. Creating a shape using a specified pattern of diffusable polariser.<br><br></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>'''Result''': simple patterns can readily produce sharp shapes. <br><br></div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>'''Result''': simple patterns can readily produce sharp shapes. <br><br></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>'''Conclusion''': It is not so easy to produce blobby shapes using patterns of polariser alone. </div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>'''Conclusion''': It is not so easy to produce blobby shapes using patterns of polariser alone<ins class="diffchange diffchange-inline">. But it is easy to produce outgrowths</ins>.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|width="180pt"|[[image:GPT_TwoWayHeart_20110531-0002_Last.png|thumb|180px|Pattern of specified polariser levels (green-cyan). Polariser can diffuse and the gradient is arrowed. Uniform specified growth (red).]]</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|width="180pt"|[[image:GPT_TwoWayHeart_20110531-0002_Last.png|thumb|180px|Pattern of specified polariser levels (green-cyan). Polariser can diffuse and the gradient is arrowed. Uniform specified growth (red).]]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|width="180pt"|[[image:GPT_TwoWayHeart_20110531-0002.png|thumb|180px|Patterns and shape after growing to 3 times the original area.]] </div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|width="180pt"|[[image:GPT_TwoWayHeart_20110531-0002.png|thumb|180px|Patterns and shape after growing to 3 times the original area.]] </div></td></tr>
</table>AndrewBanghamhttp://cmpdartsvr3-v.uea.ac.uk/wiki/BanghamLab/index.php?title=Tutorial_on_different_ways_of_specifying_the_growth_of_shapes&diff=5519&oldid=prevAndrewBangham: Created page with 'Back to GFtbox Tutorial pages<br><br> We illustrate the practical advantage of having submodels within a project and an important con…'2011-07-01T09:08:02Z<p>Created page with '<a href="/wiki/BanghamLab/index.php/GFtbox_Tutorial_pages#Output_and_Results" title="GFtbox Tutorial pages">Back to GFtbox Tutorial pages</a><br><br> We illustrate the practical advantage of having submodels within a project and an important con…'</p>
<p><b>New page</b></p><div>[[GFtbox Tutorial pages#Output and Results|Back to GFtbox Tutorial pages]]<br><br><br />
We illustrate the practical advantage of having submodels within a project and an important consequence of understanding biological growth within the GPT-framework.<br><br><br />
Conclusion: using a '''combination''' of polarity patterns to set local axes for anisotropic growth and patterns of differential specified growth to regulate the growth of shape would be powerful. <br />
==Illustrating independent ways to form shapes and the use of submodels. ==<br />
The full interaction function is shown at the bottom. The line of code that selects the submodel and the start of each submodel is shown in red.<br><br><br />
{| border="0" cellpadding="15" cellspacing="3"<br />
|- valign="top"<br />
|width="400pt"|'''Uniform specified polariser''' (no polariser gradient). Creating a shape using a specified pattern of isotropic growth.<br><br><br />
'''Result''': simple patterns tend to produce blobby shapes. <br><br><br />
'''Conclusion''': Whilst it may be possible to produce complex shapes such as the outgrowth shown in the GFtbox icon, we don't know how.<br />
|width="180pt"|[[image:GPT TwoWayHeart 20110531-0001 Last.png|thumb|180px|Pattern of isotropic specified growth (no polariser)]]<br />
|width="180pt"|[[image:GPT_TwoWayHeart_20110531-0001.png|thumb|180px|Pattern of isotropic specified growth after growing to 3 times the original area.]] <br />
|- valign="top"<br />
|width="400pt"|'''Uniform specified growth'''. Creating a shape using a specified pattern of diffusable polariser.<br><br><br />
'''Result''': simple patterns can readily produce sharp shapes. <br><br><br />
'''Conclusion''': It is not so easy to produce blobby shapes using patterns of polariser alone. <br />
|width="180pt"|[[image:GPT_TwoWayHeart_20110531-0002_Last.png|thumb|180px|Pattern of specified polariser levels (green-cyan). Polariser can diffuse and the gradient is arrowed. Uniform specified growth (red).]]<br />
|width="180pt"|[[image:GPT_TwoWayHeart_20110531-0002.png|thumb|180px|Patterns and shape after growing to 3 times the original area.]] <br />
|- valign="top"<br />
|}<br />
<span style="color: CornflowerBlue">% Section 1</span><br />
function m = gpt_twowayheart_20110531( m )<br />
<span style="color: Green">%m = gpt_twowayheart_20110531( m )</span><br />
<span style="color: Green">% Morphogen interaction function.</span><br />
<span style="color: Green">% Written at 2011-05-31 19:51:32.</span><br />
<span style="color: Green">% GFtbox revision 3548, 2011-05-31 14:37:10.747930.</span><br />
<br />
<span style="color: Green">% The user may edit any part of this function between delimiters</span><br />
<span style="color: Green">% of the form "USER CODE..." and "END OF USER CODE...". The</span><br />
<span style="color: Green">% delimiters themselves must not be moved, edited, deleted, or added.</span><br />
<br />
if isempty(m), return; end<br />
<br />
fprintf( 1, '<span style="color: Green">%s found in %s\n', mfilename(), which(mfilename()) );</span><br />
<br />
try<br />
m = local_setproperties( m );<br />
catch<br />
end<br />
<br />
realtime = m.globalDynamicProps.currenttime;<br />
<br />
<span style="color: CornflowerBlue">% Section 2</span><br />
<span style="color: Green">%%% USER CODE: INITIALISATION</span><br />
<br />
<span style="color: Green">% In this section you may modify the mesh in any way whatsoever.</span><br />
if (Steps(m)==0) && m.globalDynamicProps.doinit <span style="color: Green">% First iteration</span><br />
<span style="color: Green">% Set up names for variant models. Useful for running multiple models on a cluster.</span><br />
m.userdata.ranges.modelname.range = { 'PolariserBased', 'DifferentialGrowthBased' }; <span style="color: Green">% CLUSTER</span><br />
<span style="color: Crimson"> m.userdata.ranges.modelname.index = 1; </span> <span style="color: Green">% CLUSTER</span><br />
end<br />
modelname = m.userdata.ranges.modelname.range{m.userdata.ranges.modelname.index}; <span style="color: Green">% CLUSTER</span><br />
disp(sprintf('\nRunning <span style="color: Green">%s model %s\n',mfilename, modelname));</span><br />
<br />
<span style="color: Green">% Set priorities for simultaneous plotting of multiple morphogens, if desired.</span><br />
m = leaf_mgen_plotpriority( m, {'ID_PLUSORG', 'ID_MINUSORG'}, [1,2], [0.4,0.4] );<br />
<br />
<span style="color: Green">% Set colour of polariser gradient arrows.</span><br />
m = leaf_plotoptions(m,'highgradcolor',[0,0,0],'lowgradcolor',[1,0,0]);<br />
m = leaf_plotoptions(m,'decorscale',1.5);<br />
<br />
<span style="color: Green">% setup a multiplot of the following morphogens</span><br />
m = leaf_plotoptions( m, 'morphogen', {'V_KAREAL','ID_PLUSORG','ID_MINUSORG'});<br />
<span style="color: Green">%%% END OF USER CODE: INITIALISATION</span><br />
<br />
<span style="color: CornflowerBlue">% Section 3</span><br />
<span style="color: Green">%%% SECTION 1: ACCESSING MORPHOGENS AND TIME.</span><br />
<span style="color: Green">%%% AUTOMATICALLY GENERATED CODE: DO NOT EDIT.</span><br />
<br />
if isempty(m), return; end<br />
<br />
setGlobals();<br />
global gNEW_KA_PAR gNEW_KA_PER gNEW_KB_PAR gNEW_KB_PER<br />
global gNEW_K_NOR gNEW_POLARISER gNEW_STRAINRET gNEW_ARREST<br />
dt = m.globalProps.timestep;<br />
polariser_i = gNEW_POLARISER;<br />
P = m.morphogens(:,polariser_i);<br />
[kapar_i,kapar_p,kapar_a,kapar_l] = getMgenLevels( m, 'KAPAR' );<br />
[kaper_i,kaper_p,kaper_a,kaper_l] = getMgenLevels( m, 'KAPER' );<br />
[kbpar_i,kbpar_p,kbpar_a,kbpar_l] = getMgenLevels( m, 'KBPAR' );<br />
[kbper_i,kbper_p,kbper_a,kbper_l] = getMgenLevels( m, 'KBPER' );<br />
[knor_i,knor_p,knor_a,knor_l] = getMgenLevels( m, 'KNOR' );<br />
[strainret_i,strainret_p,strainret_a,strainret_l] = getMgenLevels( m, 'STRAINRET' );<br />
[arrest_i,arrest_p,arrest_a,arrest_l] = getMgenLevels( m, 'ARREST' );<br />
[id_plusorg_i,id_plusorg_p,id_plusorg_a,id_plusorg_l] = getMgenLevels( m, 'ID_PLUSORG' );<br />
[id_minusorg_i,id_minusorg_p,id_minusorg_a,id_minusorg_l] = getMgenLevels( m, 'ID_MINUSORG' );<br />
[v_kareal_i,v_kareal_p,v_kareal_a,v_kareal_l] = getMgenLevels( m, 'V_KAREAL' );<br />
[id_tip_i,id_tip_p,id_tip_a,id_tip_l] = getMgenLevels( m, 'ID_TIP' );<br />
[id_top_i,id_top_p,id_top_a,id_top_l] = getMgenLevels( m, 'ID_TOP' );<br />
[s_growth_i,s_growth_p,s_growth_a,s_growth_l] = getMgenLevels( m, 'S_GROWTH' );<br />
[id_mid_i,id_mid_p,id_mid_a,id_mid_l] = getMgenLevels( m, 'ID_MID' );<br />
<br />
<span style="color: Green">% Mesh type: circle</span><br />
<span style="color: Green">% centre: 0</span><br />
<span style="color: Green">% circumpts: 24</span><br />
<span style="color: Green">% coneangle: 0</span><br />
<span style="color: Green">% dealign: 0</span><br />
<span style="color: Green">% height: 0</span><br />
<span style="color: Green">% innerpts: 0</span><br />
<span style="color: Green">% randomness: 0.1</span><br />
<span style="color: Green">% rings: 4</span><br />
<span style="color: Green">% version: 1</span><br />
<span style="color: Green">% xwidth: 2</span><br />
<span style="color: Green">% ywidth: 2</span><br />
<br />
<span style="color: Green">% Morphogen Diffusion Decay Dilution Mutant</span><br />
<span style="color: Green">% -------------------------------------------------</span><br />
<span style="color: Green">% KAPAR ---- ---- ---- ----</span><br />
<span style="color: Green">% KAPER ---- ---- ---- ----</span><br />
<span style="color: Green">% KBPAR ---- ---- ---- ----</span><br />
<span style="color: Green">% KBPER ---- ---- ---- ----</span><br />
<span style="color: Green">% KNOR ---- ---- ---- ----</span><br />
<span style="color: Green">% POLARISER 0.1 ---- ---- ----</span><br />
<span style="color: Green">% STRAINRET ---- ---- ---- ----</span><br />
<span style="color: Green">% ARREST ---- ---- ---- ----</span><br />
<span style="color: Green">% ID_PLUSORG ---- ---- ---- ----</span><br />
<span style="color: Green">% ID_MINUSORG ---- ---- ---- ----</span><br />
<span style="color: Green">% V_KAREAL ---- ---- ---- ----</span><br />
<span style="color: Green">% ID_TIP ---- ---- ---- ----</span><br />
<span style="color: Green">% ID_TOP ---- ---- ---- ----</span><br />
<span style="color: Green">% S_GROWTH 0.01 ---- ---- ----</span><br />
<span style="color: Green">% ID_MID ---- ---- ---- ----</span><br />
<br />
<br />
<span style="color: Green">%%% USER CODE: MORPHOGEN INTERACTIONS</span><br />
<br />
<span style="color: Green">% In this section you may modify the mesh in any way that does not</span><br />
<span style="color: CornflowerBlue">% Section 4</span><br />
<span style="color: Green">% alter the set of nodes.</span><br />
<br />
<span style="color: Green">% Use the same pattern for both submodels</span><br />
RangeTip=(m.nodes(:,1)<-0.8)&...<br />
(abs(m.nodes(:,2))<0.2);<br />
RangeMid=(m.nodes(:,1)<=0.5)&...<br />
(m.nodes(:,1)>-0.5)&...<br />
(abs(m.nodes(:,2))<0.3);<br />
RangeTops=(m.nodes(:,1)<=max(m.nodes(:,1))&...<br />
(m.nodes(:,1)>0.5)&...<br />
(abs(m.nodes(:,2))>0.3));<br />
if (Steps(m)==0) && m.globalDynamicProps.doinit <span style="color: Green">% Initialisation code.</span><br />
switch modelname<br />
<span style="color: Crimson"> case 'PolariserBased' </span><span style="color: Green">% </span><br />
<span style="color: Green">% One way to set up a morphogen gradient is by ...</span><br />
<span style="color: Green">% Setting up a gradient by clamping the ends (execute only once)</span><br />
P(RangeTip)=0;<br />
P(RangeMid)=0.5;<br />
P(RangeTops)=1;<br />
id_plusorg_p=P;<br />
id_minusorg_p(RangeTip)=1;<br />
m.morphogenclamp( RangeTops|RangeTip|RangeMid, polariser_i ) = 1;<br />
m = leaf_mgen_conductivity( m, 'POLARISER', 0.1 ); <span style="color: Green">%specifies the diffusion rate of polariser</span><br />
m = leaf_mgen_absorption( m, 'POLARISER', 0.0 ); <span style="color: Green">% specifies degradation rate of polariser</span><br />
<span style="color: Crimson"> case 'DifferentialGrowthBased'</span> <span style="color: Green">% </span><br />
P(:)=0;<br />
<span style="color: Green">% One way to set up a morphogen gradient is by ...</span><br />
<span style="color: Green">% Setting up a gradient by clamping the ends (execute only once)</span><br />
s_growth_p(RangeTip)=1;<br />
s_growth_p(RangeMid)=0.05;<br />
s_growth_p(RangeTops)=0.8;<br />
m.morphogenclamp( RangeTops|RangeTip|RangeMid, s_growth_i ) = 1;<br />
m = leaf_mgen_conductivity( m, 's_growth', 0.001 ); <span style="color: Green">%specifies the diffusion rate of polariser</span><br />
m = leaf_mgen_absorption( m, 's_growth', 0.0 ); <span style="color: Green">% specifies degradation rate of polariser</span><br />
end<br />
end<br />
BasicGrowth=0.01;<br />
switch modelname<br />
<span style="color: Crimson"> case 'PolariserBased' </span> <span style="color: Green">%</span><br />
<span style="color: Green">% Every equation to be formatted should end with an at-at Eqn N comment.</span><br />
kapar_p(:) = BasicGrowth; <span style="color: Green">% when isotropic this will be 0.005</span><br />
kaper_p(:) = 0.0; <span style="color: Green">% when isotropic this will be 0.005</span><br />
kbpar_p(:) = BasicGrowth; <span style="color: Green">% when isotropic this will be 0.005</span><br />
kbper_p(:) = 0.0; <span style="color: Green">% when isotropic this will be 0.005</span><br />
knor_p(:) = 0; <span style="color: Green">% thickness</span><br />
<span style="color: Crimson"> case 'DifferentialGrowthBased'</span> <span style="color: Green">% </span><br />
<span style="color: Green">% Every equation to be formatted should end with an at-at Eqn N comment.</span><br />
kapar_p(:) = BasicGrowth*s_growth_p; <span style="color: Green">%0.01; % when isotropic this will be 0.005</span><br />
kaper_p(:) = BasicGrowth*s_growth_p; <span style="color: Green">%0.0; % when isotropic this will be 0.005</span><br />
kbpar_p(:) = BasicGrowth*s_growth_p; <span style="color: Green">%0.01; % when isotropic this will be 0.005</span><br />
kbper_p(:) = BasicGrowth*s_growth_p; <span style="color: Green">%0.0; % when isotropic this will be 0.005</span><br />
knor_p(:) = 0; <span style="color: Green">% thickness</span><br />
end<br />
v_kareal_p=kapar_p+kaper_p; <span style="color: Green">% total specified areal growth</span><br />
<span style="color: CornflowerBlue">% Section 5</span><br />
<span style="color: Green">%%% END OF USER CODE: MORPHOGEN INTERACTIONS</span><br />
<br />
<span style="color: Green">%%% SECTION 3: INSTALLING MODIFIED VALUES BACK INTO MESH STRUCTURE</span><br />
<span style="color: Green">%%% AUTOMATICALLY GENERATED CODE: DO NOT EDIT.</span><br />
m.morphogens(:,polariser_i) = P;<br />
m.morphogens(:,kapar_i) = kapar_p;<br />
m.morphogens(:,kaper_i) = kaper_p;<br />
m.morphogens(:,kbpar_i) = kbpar_p;<br />
m.morphogens(:,kbper_i) = kbper_p;<br />
m.morphogens(:,knor_i) = knor_p;<br />
m.morphogens(:,strainret_i) = strainret_p;<br />
m.morphogens(:,arrest_i) = arrest_p;<br />
m.morphogens(:,id_plusorg_i) = id_plusorg_p;<br />
m.morphogens(:,id_minusorg_i) = id_minusorg_p;<br />
m.morphogens(:,v_kareal_i) = v_kareal_p;<br />
m.morphogens(:,id_tip_i) = id_tip_p;<br />
m.morphogens(:,id_top_i) = id_top_p;<br />
m.morphogens(:,s_growth_i) = s_growth_p;<br />
m.morphogens(:,id_mid_i) = id_mid_p;<br />
<br />
<span style="color: Green">%%% USER CODE: FINALISATION</span><br />
<br />
<span style="color: Green">%%% END OF USER CODE: FINALISATION</span><br />
<br />
end<br />
<br />
<br />
<span style="color: Green">%%% USER CODE: SUBFUNCTIONS</span><br />
<br />
<span style="color: CornflowerBlue">% Section 6</span><br />
function m = local_setproperties( m )<br />
end</div>AndrewBangham