include gro // by Erik Winfree Sept 24, 2011 // Grow a finite-sized ring around a central cell, and stop. set ( "dt", 0.075 ); ahl := signal ( 1, 0.3 ); notahl := signal ( 1, .8 ); program finite() := { p := [ mode := 0 ]; gfp := 0; cfp := 0; p.mode = 0 & daughter : { p.mode := 1 }; p.mode = 0 & just_divided & !daughter : { set ( "growth_rate", 0.00 ) }; p.mode = 0 : { emit_signal ( ahl, 100 ) }; p.mode = 0 & rate ( 1.0 ) : { cfp := cfp + 1 }; p.mode = 0 & rate ( 0.001 * cfp ) : { cfp := cfp - 1 }; p.mode > 0 & get_signal ( notahl ) > 0.06 : { set ( "growth_rate", 0.0 ) }; p.mode > 0 & get_signal ( notahl ) < 0.06 : { set ( "growth_rate", 0.078 ) }; p.mode = 1 & get_signal ( ahl ) < 0.1 : { p.mode := 2 }; p.mode = 2 & get_signal ( ahl ) > 0.1 & rate ( .1 ) : { p.mode := 1 }; p.mode = 2 : { emit_signal ( notahl, 100 ) }; p.mode = 2 & rate ( 1.0 ) : { gfp := gfp + 1 }; p.mode = 2 & rate ( 0.001 * gfp ) : { gfp := gfp - 1 }; p.mode = 2 & get_signal ( ahl ) < .001 : { die() } selected : { message ( 1, tostring(id) <> ": " <> tostring (gfp) ) } }; ecoli ( [ x:= 0, y:= 0 ], program finite() );