<title>Background</title> <p>One of the main goals of computational cell biology aims to accurately simulate large biological systems at molecular resolution. Stochastic effects and spatial constraints are increasingly being recognized as important factors in the normal functioning of molecular networks [##REF##15763553##1##]. The efficiency of biochemical networks is enhanced by component co-localization [##REF##15860425##2##], and certain signaling networks are thought to be facilitated by transport and co-localization [##UREF##0##3##]. In addition, molecular crowding has been shown to affect biochemical systems [##REF##11566793##4##, ####REF##15261147##5##, ##REF##15142746##6####15142746##6##]. Modeling and simulation of these kinds of networks requires new kinds of stochastic simulators.</p> <p>We developed GridCell to simulate biological models with specific consideration for stochasticity, locality, and collision. GridCell is based on a simplified model for molecular movement and interaction. It uses a discrete three-dimensional cubic grid based on the D3Q27 model often used in the application of the Lattice-Boltzmann Method (LBM) [##UREF##1##7##]. Each voxel has access to itself and its 26 neighbours and is independent of voxels outside this immediate surrounding. Figure ##FIG##0##1## shows the 27 possible locations accessible to a voxel from a D3Q27 grid. The integer-addressed 3D grid avoids floating-point computation and distance calculations, resulting in an efficient implementation. Molecules are represented as particles that move and react stochastically within discrete volumes in discrete timesteps. Collisions and molecular crowding are enforced since only one particle can occupy a given location at any time. GridCell stores the coordinates of all the particles on the 3D grid at every turn, thereby enabling particle tracking in both space and time.</p> <p>The simulation space is visualized via a 3D interface and 2D graphs, and surface plots summarize molecule concentrations over space and time. GridCell supports models specified by the Systems Biology Markup Language (SBML) (please see Availability &amp; requirements for further information). SBML models can be obtained from public repositories such as EBI's Biomodels database (please see Availability &amp; requirements for further information) or designed using software such as SBMLeditor or JDesigner (please see Availability &amp; requirements for further information).</p>
<title>Results and discussion</title> <title>Michaelis-Menten reaction</title> <p>The Michaelis-Menten equations are used to describe most enzymatic reactions. Its kinetics is given by the following equation:</p> <p></p> <p>The enzyme <italic>E </italic>reacts with the substrate <italic>S </italic>to form the complex <italic>ES </italic>with a rate of reaction <italic>k</italic><sub>1</sub>. <italic>ES </italic>decomposes into the enzyme <italic>E </italic>and a new product <italic>P </italic>with a rate <italic>k</italic><sub>2</sub>, or reverts back to its original form <italic>E </italic>+ <italic>S </italic>with rate <italic>k</italic><sub><italic>r</italic></sub>.</p> <title>Crowding</title> <p>One of the main differences between GridCell and other simulators is its ability to simulate particle crowding. Molecular crowding occurs when particle density affects movement and reactivity. Crowding is typically ignored in most models since kinetics are often based on controlled, in vitro conditions that are not crowded. In addition, simulators do not typically support this feature since it is computationally expensive to keep track of all particle positions and their excluded volume, and to implement collision-detection algorithms. Some simulators (e.g. Smoldyn [##REF##16204833##9##]) have shown crowding effects by explicitly introducing cubic obstacles [##REF##15601687##10##] in the model. In contrast, GridCell implicitly exhibits molecular crowding effects by allowing inter-particle collisions. We demonstrate the effect of crowding by adding inert particles to a Michaelis-Menten system. Inert particles do not react with other molecules but reduce their movement and affect the overall number of reactions. The simulation parameters are described in Table ##TAB##4##5##. Figure ##FIG##4##5## shows the number of products over time for a wide range of concentrations of inert particles averaged over 20 iterations. The individual simulations provided almost identical results to one another with a relative standard deviation smaller than 3.5% at the end of the simulation. The number indicated in the legend signifies the percentage of the voxels occupied by inert particles. In this specific example, with a voxel size of 3.2<sup>-20 </sup>litres, this amounts to approximately 30000 inert particles per step of 10%.</p> <p>Interestingly, the maximum rate of reaction is obtained when the inert particles occupy 20% of the volume, which agrees with the fact that macromolecular crowding may enhance reaction rates, as the particles have to search a smaller volume to find each other [##REF##7688609##11##]. However, above 30%, the reaction rates decrease linearly as more and more inert particles are added. Under well-mixed and un-crowded systems, GridCell provides similar results to other ODE simulators and stochastic algorithms such as the stochastic simulation algorithm (SSA) from Gillespie [##UREF##3##12##] with the exception of a small stochastic noise [##UREF##4##13##].</p> <title>Related Work</title> <p>GridCell is related to a family of Monte Carlo (MC) simulators (Table ##TAB##5##6##). SmartCell [##UREF##5##14##] and MesoRD [##UREF##6##15##] subdivide the simulation space into smaller subvolumes (voxels) that can contain many particles. Each subvolume is composed of a well-mixed solution, and particles can diffuse to adjacent subvolumes. This approach permits quicker simulations, but it is impossible to track individual particles, and molecular crowding has no effect on movement and reaction rates. Cell++ [##UREF##7##16##] combines a cellular automata engine with Brownian dynamics in order to simulate large quantities of small molecules on a discretized grid, while large molecules exhibit stochastic behaviour and move in a continuous space. Both spaces are then superimposed onto each other, and reactions can take place between the two different spaces. Currently, only collisions between particles (both small and large) and a fixed membrane separating two compartments are supported. Therefore, molecular crowding effects are not simulated. Unlike Cell++, MCell [##UREF##8##17##] tracks all individual particles in a continuous 3D space, and the diffusing particles follow Brownian dynamics. Particles may collide and interact with effector sites and 2D membrane surfaces, but not with other particles. ChemCell [##UREF##2##8##] calculates the probability of reaction at every timestep, and particles follow Brownian motion in a continuous space that requires a computationally expensive search algorithm to find nearby particles, and the use of dimensionless particles removes the ability of particles to collide with one another. In contrast, GridCell enables stochasticity-based investigations of SBML networks while considering spatial effects of recruitment, localization and crowding.</p> <title>Future Directions</title> <p>GridCell performance is tightly linked to the number of voxels in the simulation space. The simulator can currently support a maximum of 10<sup>7 </sup>voxels/particles which is not enough to simulate at a molecular resolution structures as complex as a complete cell, the long term goal of GridCell. However, the simple and regular algorithm of GridCell, which does not require any searches or complex operations, is a prime candidate for acceleration by parallelization to achieve performance speedup and simulate large-scale systems.</p>
<title>Results and discussion</title> <title>Michaelis-Menten reaction</title> <p>The Michaelis-Menten equations are used to describe most enzymatic reactions. Its kinetics is given by the following equation:</p> <p></p> <p>The enzyme <italic>E </italic>reacts with the substrate <italic>S </italic>to form the complex <italic>ES </italic>with a rate of reaction <italic>k</italic><sub>1</sub>. <italic>ES </italic>decomposes into the enzyme <italic>E </italic>and a new product <italic>P </italic>with a rate <italic>k</italic><sub>2</sub>, or reverts back to its original form <italic>E </italic>+ <italic>S </italic>with rate <italic>k</italic><sub><italic>r</italic></sub>.</p> <title>Crowding</title> <p>One of the main differences between GridCell and other simulators is its ability to simulate particle crowding. Molecular crowding occurs when particle density affects movement and reactivity. Crowding is typically ignored in most models since kinetics are often based on controlled, in vitro conditions that are not crowded. In addition, simulators do not typically support this feature since it is computationally expensive to keep track of all particle positions and their excluded volume, and to implement collision-detection algorithms. Some simulators (e.g. Smoldyn [##REF##16204833##9##]) have shown crowding effects by explicitly introducing cubic obstacles [##REF##15601687##10##] in the model. In contrast, GridCell implicitly exhibits molecular crowding effects by allowing inter-particle collisions. We demonstrate the effect of crowding by adding inert particles to a Michaelis-Menten system. Inert particles do not react with other molecules but reduce their movement and affect the overall number of reactions. The simulation parameters are described in Table ##TAB##4##5##. Figure ##FIG##4##5## shows the number of products over time for a wide range of concentrations of inert particles averaged over 20 iterations. The individual simulations provided almost identical results to one another with a relative standard deviation smaller than 3.5% at the end of the simulation. The number indicated in the legend signifies the percentage of the voxels occupied by inert particles. In this specific example, with a voxel size of 3.2<sup>-20 </sup>litres, this amounts to approximately 30000 inert particles per step of 10%.</p> <p>Interestingly, the maximum rate of reaction is obtained when the inert particles occupy 20% of the volume, which agrees with the fact that macromolecular crowding may enhance reaction rates, as the particles have to search a smaller volume to find each other [##REF##7688609##11##]. However, above 30%, the reaction rates decrease linearly as more and more inert particles are added. Under well-mixed and un-crowded systems, GridCell provides similar results to other ODE simulators and stochastic algorithms such as the stochastic simulation algorithm (SSA) from Gillespie [##UREF##3##12##] with the exception of a small stochastic noise [##UREF##4##13##].</p> <title>Related Work</title> <p>GridCell is related to a family of Monte Carlo (MC) simulators (Table ##TAB##5##6##). SmartCell [##UREF##5##14##] and MesoRD [##UREF##6##15##] subdivide the simulation space into smaller subvolumes (voxels) that can contain many particles. Each subvolume is composed of a well-mixed solution, and particles can diffuse to adjacent subvolumes. This approach permits quicker simulations, but it is impossible to track individual particles, and molecular crowding has no effect on movement and reaction rates. Cell++ [##UREF##7##16##] combines a cellular automata engine with Brownian dynamics in order to simulate large quantities of small molecules on a discretized grid, while large molecules exhibit stochastic behaviour and move in a continuous space. Both spaces are then superimposed onto each other, and reactions can take place between the two different spaces. Currently, only collisions between particles (both small and large) and a fixed membrane separating two compartments are supported. Therefore, molecular crowding effects are not simulated. Unlike Cell++, MCell [##UREF##8##17##] tracks all individual particles in a continuous 3D space, and the diffusing particles follow Brownian dynamics. Particles may collide and interact with effector sites and 2D membrane surfaces, but not with other particles. ChemCell [##UREF##2##8##] calculates the probability of reaction at every timestep, and particles follow Brownian motion in a continuous space that requires a computationally expensive search algorithm to find nearby particles, and the use of dimensionless particles removes the ability of particles to collide with one another. In contrast, GridCell enables stochasticity-based investigations of SBML networks while considering spatial effects of recruitment, localization and crowding.</p> <title>Future Directions</title> <p>GridCell performance is tightly linked to the number of voxels in the simulation space. The simulator can currently support a maximum of 10<sup>7 </sup>voxels/particles which is not enough to simulate at a molecular resolution structures as complex as a complete cell, the long term goal of GridCell. However, the simple and regular algorithm of GridCell, which does not require any searches or complex operations, is a prime candidate for acceleration by parallelization to achieve performance speedup and simulate large-scale systems.</p>
<title>Conclusion</title> <p>GridCell is a stochastic simulator that uses a 3D grid and accounts for locality, very low concentration stochastic effects and particle collisions. Its user-interface makes it easy to use while providing several tools to analyze the system. GridCell reproduces the results obtained with ODEs and the Stochastic Simulation Algorithm (SSA) for simple systems when crowding and locality do not affect the system. We also show that particle collisions can have a significant impact on the speed of reaction and that the well-mixed assumption and dimensionless particles can induce a significantly different response in a biological system. The discrete 3D grid and the nearest-neighbour interactions remove the need to do any distance calculation, particle search and floating-point arithmetic. The regularity and simplicity of the algorithm makes it a good candidate for acceleration with a parallel architecture which will open the door to the simulation of even more complex systems.</p>
<p>This is an Open Access article distributed under the terms of the Creative Commons Attribution License (<ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/2.0"/>), which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</p> <title>Background</title> <p>Realistic biochemical simulators aim to improve our understanding of many biological processes that would be otherwise very difficult to monitor in experimental studies. Increasingly accurate simulators may provide insights into the regulation of biological processes due to stochastic or spatial effects.</p> <title>Results</title> <p>We have developed GridCell as a three-dimensional simulation environment for investigating the behaviour of biochemical networks under a variety of spatial influences including crowding, recruitment and localization. GridCell enables the tracking and characterization of individual particles, leading to insights on the behaviour of low copy number molecules participating in signaling networks. The simulation space is divided into a discrete 3D grid that provides ideal support for particle collisions without distance calculation and particle search. SBML support enables existing networks to be simulated and visualized. The user interface provides intuitive navigation that facilitates insights into species behaviour across spatial and temporal dimensions. We demonstrate the effect of crowing on a Michaelis-Menten system.</p> <title>Conclusion</title> <p>GridCell is an effective stochastic particle simulator designed to track the progress of individual particles in a three-dimensional space in which spatial influences such as crowding, co-localization and recruitment may be investigated.</p>
<title>Implementation</title> <title>Algorithm</title> <p>The simulation employs a two-phase process in which particles (1) attempt to move and then (2) attempt to react every turn.</p> <title>Movement Phase</title> <p>A particle can move at most once per timestep. Since a particle only has access to its immediate surrounding, a particle can only move in one of 27 nearest locations, including the current location. The selection of the movement direction is made randomly; therefore the particles follow a Brownian random walk. Figure ##FIG##1##2## shows an example of 4 different Brownian random walks of particles starting from the same location. In GridCell, any particle attempting to move to an occupied location will generate a collision. A collision prevents the particle attempting to move from moving during that turn and does not affect the other particle.</p> <title>Diffusion</title> <p>Particles following a Brownian random walk should also follow the well-known Einstein-Smoluchowski equation</p> <p></p> <p>where &lt;<italic>r</italic><sup>2</sup>&gt; is the mean-square displacement, <italic>d </italic>is the dimensionality, <italic>D </italic>the diffusion coefficient and <italic>t </italic>the elapsed time. Figure ##FIG##2##3## shows the mean-square displacement in units of voxel &lt;<italic>v</italic><sup>2</sup>&gt; (averaged over 1000 iterations) versus the number of timesteps <italic>n</italic><sub><italic>ts </italic></sub>when the probability of movement of the particles at every timestep is equal to 1. As expected for an uncrowded case, the mean-square displacement increases linearly with the number of timesteps. This leads to the following relation</p> <p></p> <p>where <italic>A </italic>is the slope of the graph. By substituting  and  where <italic>s</italic><sub><italic>vox </italic></sub>is the length of the sides of the voxels in meters and <italic>l</italic><sub><italic>ts </italic></sub>is the length of the timestep in seconds, we get</p> <p></p> <p>Since the probability of movement at each timestep of the particle is equal to 1, <italic>D </italic>can be substituted for the maximum diffusion speed <italic>D</italic><sub><italic>max </italic></sub>that GridCell can support for a given timestep and voxel size. This upper limit on diffusion speed is caused by the design decision of restraining particle movement to its immediate neighbourhood (the D3Q27 grid). By calculating the slope of the graph and setting the dimensionality <italic>d </italic>equal to 3, <italic>D</italic><sub><italic>max </italic></sub>can be calculated as</p> <p></p> <p>Smaller diffusion speeds are simulated by applying a different probability of movement such that</p> <p></p> <p>where <italic>p</italic><sub><italic>m </italic></sub>is the probability of movement of a particle at every timestep. As long as the diffusion speeds of the particles are smaller than <italic>D</italic><sub><italic>max</italic></sub>, diffusion will be modeled correctly. If a larger diffusion speed is needed, one can reduce the timestep or increase the size of the voxels.</p> <title>Reaction Phase</title> <p>A particle may react only once per turn and only with its immediate surrounding. The reaction phase is completely independent from the movement phase, therefore it does not matter if a particle previously moved or collided with another particle. Common interactions include aggregation events such as molecular complex formation/dissolution or conversion events such as chemical reactions. Only the simplest reactions involving 3 or less particles are directly supported. Complex reactions involving more than 3 particles are decomposed into several elementary reactions. The probability of reaction per timestep is derived from the overall rate of reaction and is very similar to the approach taken by ChemCell [##UREF##2##8##]. Only 3 different reactions involve 3 or less participants: 1 reactant and 1 product, 1 reactant and 2 products and 2 reactants and 1 product. Let's consider the two reactions that involve a single reactant</p> <p></p> <p></p> <p>Both reactions have a forward rate of reaction <italic>k </italic>in units of time<sup>-1 </sup>and timestep is <italic>t </italic>second. Assuming a well-mixed approximation and <italic>N </italic>particles of type <italic>A </italic>in the system, then in both cases the expected number of reaction per turn is given by <italic>N</italic>(1 - <italic>e</italic><sup>-<italic>kt</italic></sup>). Considering each particle individually, each particle has a probability equal to 1 - <italic>e</italic><sup>-<italic>kt </italic></sup>to react during each timestep. In our stochastic model, a uniform random number <italic>R</italic><sub><italic>n </italic></sub>between 0 and 1 is generated for each particle, and the reaction occurs if <italic>R</italic><sub><italic>n </italic></sub>&lt; 1 - <italic>e</italic><sup>-<italic>kt</italic></sup>. In a reaction with only 1 reactant and 1 product, the reactant is simply replaced by the product. In a reaction with 1 reactant and 2 products, a search is first conducted in the surrounding area. If there is at least 1 free voxel in the surrounding area of the particle, the reaction takes place, and the second product is positioned in that free location while the first product is placed at the position of the initial reactant. The reaction is blocked if no free position is found. This limitation only modifies the overall reaction rate of the reaction in a situation where the whole cell is completely filled which would prevent any movement and reaction to take place.</p> <p>Consider the following reaction with 2 reactants:</p> <p></p> <p>with a rate constant <italic>k </italic>in units of (molarity*time)<sup>-1 </sup>and a timestep between each iteration of <italic>t </italic>second. Assuming <italic>N</italic><sub><italic>a </italic></sub>particle of type <italic>A</italic>, <italic>N</italic><sub><italic>b </italic></sub>particle of type <italic>B</italic>, a Volume <italic>V </italic>and the Avogadro's number being <italic>A</italic><sub><italic>v</italic></sub>, then the total number of reactions <italic>N</italic><sub><italic>r </italic></sub>in a well-mixed system is given by</p> <p></p> <p>On average, the desired number of reactions in our system should be equivalent to the result of the above equation. In our system, particles can only react with their immediate surrounding locations. In a well-mixed system, the number of <italic>A</italic>,<italic>B </italic>pairs that are close enough to each other to generate a reaction is given by <italic>N </italic>= <italic>N</italic><sub><italic>a</italic></sub><italic>N</italic><sub><italic>b</italic></sub><italic>V</italic><sub><italic>c</italic></sub>/<italic>V </italic>where <italic>V</italic><sub><italic>c </italic></sub>is the volume of the cube containing the 26 "neighbouring" voxels and <italic>V </italic>is still the total volume of the simulation. If each of those pairs react with probability <italic>P</italic>, then <italic>N</italic><sub><italic>r </italic></sub>= <italic>NP</italic>. Setting the 2 equations <italic>N</italic><sub><italic>r </italic></sub>= <italic>NP </italic>= <italic>kN</italic><sub><italic>a</italic></sub><italic>N</italic><sub><italic>b</italic></sub><italic>t</italic>/(<italic>A</italic><sub><italic>v</italic></sub><italic>V</italic>) gives the equation</p> <p></p> <p>The formula is independent of <italic>V</italic>, <italic>N</italic><sub><italic>a </italic></sub>and <italic>N</italic><sub><italic>b </italic></sub>as expected. Also, for a given rate constant <italic>k</italic>, it is possible to have a set of parameter <italic>t</italic>/<italic>V</italic><sub><italic>c </italic></sub>such that <italic>P </italic>is greater than 1. If that is the case, a smaller timestep or larger voxel size (proportional to <italic>V</italic><sub><italic>c</italic></sub>) has to be selected. A random number <italic>R</italic><sub><italic>n </italic></sub>is generated. If <italic>R</italic><sub><italic>n </italic></sub>&lt;<italic>P</italic>, then the first reactant will search its surrounding area for the second reactant. If it is found, the reaction takes place and the product is placed at the location of the first reactant. If no reactant is found, the reaction is aborted. Note that the second reactant does not try to react with the first one, doing so still enables us to get the right rate of reaction and reduces the number of operations needed to update the simulation. In the case where a particle can participate in many different reactions, a random number is generated to select which reaction is going to be tested first. If the first reaction does not take place, then the next reaction on the list is tested. The procedure will go on until either a reaction takes place or all possible reactions have been tried. This ensures that, on average, all reactions are tested equally.</p> <p>When 2 reactants of the same species form a product such as</p> <p></p> <p>the individual rate of reaction of particle A needs to be modified to ensure that the overall rate of reaction is respected since each reactant will attempt to react with the other one. Assuming <italic>y </italic>is the overall probability of reaction and <italic>x </italic>is the individual probability of reaction of species A, then</p> <p></p> <p>More complex reactions are implemented by creating a cascade of several elementary equations. This process, done automatically by the software, will break the complex reactions into a series of simpler reactions by introducing "temporary" species. For example, consider the following reaction with 1 reactant and 5 products.</p> <p></p> <p>where <italic>k </italic>is the rate of reaction in time<sup>-1</sup>. For each product exceeding 2, a temporary species is created. In this case, 3 temporary species are created. It follows that the reaction is broken down into:</p> <p></p> <p></p> <p></p> <p></p> <p>where <italic>T</italic><sub>1</sub>, <italic>T</italic><sub>2 </sub>and <italic>T</italic><sub>3 </sub>are respectively the first, second and third temporary species. By setting the rate of reaction of equation 17 equal to <italic>k </italic>and the probability of reaction of equations containing any temporary species on the reactant side equal to 1, we reduce the artifacts due to the creation of the "temporary" species to a minimum. Indeed, the temporary species disappear from the system as quickly as possible and the overall rate of reaction is identical.</p> <p>Shown below is the case where more than 2 reactants merge into a single product:</p> <p></p> <p>The procedure is similar to the previous case, 1 temporary species is created for each reactant above 2.</p> <p></p> <p></p> <p></p> <p></p> <p>where <italic>T</italic><sub>1</sub>, <italic>T</italic><sub>2 </sub>and <italic>T</italic><sub>3 </sub>are respectively the first, second and third temporary species. In order to obtain the same overall probability of reaction and to reduce the impact of the temporary species on the system to a minimum, the probability of reaction of any reaction containing temporary species on the reactant side (equation 21 and 22) is set to 1. Assuming that <italic>P </italic>is the probability of reaction of the reaction presented in equation 18 and <italic>P</italic><sub>1 </sub>and <italic>P</italic><sub>2 </sub>are the probability of the first and second simple reactions <italic>A </italic>+ <italic>B </italic>→ <italic>T</italic><sub>1 </sub>and <italic>C </italic>+ <italic>D </italic>→ <italic>T</italic><sub>2 </sub>then, we set <italic>P </italic>= <italic>P</italic><sub>1</sub><italic>P</italic><sub>2</sub>. We also set <italic>P</italic><sub>1 </sub>= <italic>P</italic><sub>2</sub>. Equating the 2 equations gives <italic>P</italic><sub>1 </sub>= <italic>P</italic><sub>2 </sub>= .</p> <p>In general, the probability of the simple reactions <italic>P</italic><sub><italic>n </italic></sub>containing no temporary species is equal to</p> <p></p> <p>where <italic>P </italic>is the probability of reaction and <italic>N</italic><sub><italic>reactants </italic></sub>is the number of reactants of the initial reaction. Each temporary particle has a parameter <italic>lifetime </italic>which indicates the number of turns the particle has to live in the system before reverting back to its previous state. The short lifetime of temporary particles is important for 2 reasons. First, it makes sure that temporary particles are effectively temporary and never stay in the system for a long period of time. It also makes sure that all the reactants are to be close to each other in order for the reaction to complete. Usually, a lifetime of 2–3 turns is reasonable since it gives enough time to react with the neighbouring particles while making sure temporary particles do not constitute the bulk of the system.</p> <p>Reversible reactions are handled by creating 2 different separate reactions, 1 for the forward reaction with the forward reaction rate and 1 for the backward reaction with the corresponding backward reaction rate. Assuming the following reaction</p> <p></p> <p>with forward reaction rate <italic>k</italic><sub><italic>f </italic></sub>and backward reaction rate <italic>k</italic><sub><italic>b</italic></sub>. This reversible reaction is then split into</p> <p></p> <p>with a reaction rate <italic>k</italic><sub><italic>f </italic></sub>and</p> <p></p> <p>with reaction rate <italic>k</italic><sub><italic>b</italic></sub>.</p> <p>Temporary particles involved in a reversible reaction have a flag mentioning if they are participating in a forward or backward reaction such that they can revert back to the proper reactants when their lifetime reaches zero.</p> <title>Performance analysis</title> <p>Preliminary tests have been conducted to determine how the software reacts to different system sizes. The tests have been executed on a stand-alone microprocessor: a 3.2 GHz P4 with 2GB of RAM. The current algorithm is computed serially. As it can be shown in Table ##TAB##0##1##, the time required to compute a timestep increases linearly with the number of particles and voxels present in the system. Tables ##TAB##1##2## and ##TAB##2##3## demonstrate how the performance is affected by independently modifying the number of voxels or the number of particles. The maximum number of particles that can be currently simulated is equal to the maximum number of voxels that can be supported, which is 10<sup>7</sup>. Table ##TAB##3##4## shows that the number of reactions occurring at each timestep has a negligible effect on the performance. The reason is that all reactions have to be tested, regardless of whether or not they actually react. There are no practical limitations to the number of chemical species or the number of different reactions present in the system beyond the absolute limit on the number of voxels.</p> <title>User Interface Features</title> <p>The rendering is implemented in OpenGL, and most user-interface functions are written using the PLIB library, which is available online <ext-link ext-link-type="uri" xlink:href="http://plib.sourceforge.net/"/>. GridCell's user interface (Figure ##FIG##3##4##) consists of a) a menu system, b) an interactive 3D simulation space, c) a species panel, d) a 2D plot of concentration versus time, and e) a 2D plot of concentration versus space.</p> <p>The menu system (Figure ##FIG##3##4a##) provides the ability to load SBML models, set parameters and control the simulation. User-designated simulation parameters include the number of times to run the simulation, the timestep, the total simulation time, the sampling rate which is the frequency that the 2D graphs are updated and the results saved to file, and the frame rate which designates the frequency of updating the 3D visualization. GridCell computes the means and the standard deviations of the concentration over time if the user chooses to run multiple iterations of the simulation. These preferences may be saved and used later in any simulation. GridCell saves the particle concentrations and the 2D surface plot data in user-specified tab-delimited files. Spatial information such as specific compartment geometries or co-localization of particles is specified in an optional configuration file.</p> <p>A key feature of the GridCell user interface is the ability to interact with the three-dimensional simulation volume (Figure ##FIG##3##4b##). Users can navigate into the 3D scene with mouse and keyboard controls to rotate, pan and zoom. Buttons are present to i) start/pause simulations, ii) change the particle representation from cubes to points for faster rendering, iii) turn off the visualization for optimal simulation performance, and iv) hide or show all particle types.</p> <p>The species panel (Figure ##FIG##3##4c##) contains the current amount of each species, and allows species selection for the visualization plots. A second column specifies which species to render in the 2D surface plot of concentration versus space (Figure ##FIG##3##4e##). Particle colours are automatically selected from a predefined colour palette.</p> <p>Finally, two plots to summarize particle concentrations with respect to time (Figure ##FIG##3##4d##) and space (Figure ##FIG##3##4e##) are provided in real-time. The 2D spatial plot displays increasing concentration with increasing brightness along a selected Cartesian axis.</p> <title>Availability and Requirements</title> <p>The software is available at <ext-link ext-link-type="uri" xlink:href="http://iml.ece.mcgill.ca/GridCell"/> and runs under the Windows XP operating system. This package includes sample SBML and GridCell configuration files. GridCell requires the Systems Biology Markup Language Library (libSBML 2.3.4-Xerces; <ext-link ext-link-type="uri" xlink:href="http://sbml.org/software/libsbml/"/>) and the OpenGL utility toolkit (GLUT 3.7.6; <ext-link ext-link-type="uri" xlink:href="http://www.xmission.com/~nate/glut.html"/>). EBI's Biomodels database: <ext-link ext-link-type="uri" xlink:href="http://www.ebi.ac.uk/biomodels/"/>. SBMLeditor: <ext-link ext-link-type="uri" xlink:href="http://www.ebi.ac.uk/compneur-srv/SBMLeditor.html"/>. JDesigner: <ext-link ext-link-type="uri" xlink:href="http://sbw.kgi.edu/software/jdesigner.htm"/>. Systems Biology Markup Language (SBML): <ext-link ext-link-type="uri" xlink:href="http://sbml.org"/>. </p> <title>Authors' contributions</title> <p>LB designed and programmed the GridCell simulator. SAA contributed to the programming of the GridCell simulator and its graphical user interface. MD and WJG contributed to the conception and design of the GridCell simulator. LB and SAA drafted the manuscript and MD and WJG revised the manuscript. All authors read and approved the final manuscript.</p>
<title>Acknowledgements</title> <p>The authors gratefully acknowledge funding provided by the Natural Sciences and Engineering Research Council of Canada.</p>
<fig position="float" id="F1"><label>Figure 1</label><caption><p><bold>D3Q27 cubic grid structure</bold>. The 27 possible locations of a D3Q27 cubic grid that a given voxel can access.</p></caption></fig> <fig position="float" id="F2"><label>Figure 2</label><caption><p><bold>Random Brownian walk</bold>. Random walks of 4 different particles in GridCell after 1000 timesteps.</p></caption></fig> <fig position="float" id="F3"><label>Figure 3</label><caption><p><bold>Diffusion in GridCell</bold>. Mean-square distance (over 1000 iterations) of particles versus the number of timesteps in GridCell.</p></caption></fig> <fig position="float" id="F4"><label>Figure 4</label><caption><p><bold>GridCell user interface</bold>. GridCell user interface with (a) menu, (b) 3D space, (c) species panel, (d) 2D plot of concentration versus time, and (e) 2D surface plot of concentration versus space. Simulated model involves the translocation of particles through a membrane with embedded enzymes.</p></caption></fig> <fig position="float" id="F5"><label>Figure 5</label><caption><p><bold>Effect of crowding on Michaelis-Menten product formation using GridCell</bold>. Effect of increasing the number of inert particles on product formation of a Michaelis-Menten system using GridCell. The mean has been calculated over 20 iterations. Percentage of voxels occupied by inert particles.</p></caption></fig>
<table-wrap position="float" id="T1"><label>Table 1</label><caption><p>GridCell performance versus system size</p></caption><table frame="hsides" rules="groups"><thead><tr><td align="center">Number of Voxels</td><td align="center">1e3</td><td align="center">1e4</td><td align="center">1e5</td><td align="center">1e6</td></tr><tr><td align="center">Number of Particles</td><td align="center">3e2</td><td align="center">3e3</td><td align="center">3e4</td><td align="center">3e5</td></tr></thead><tbody><tr><td align="center">Time (s)</td><td align="center">1.62e-4</td><td align="center">1.58e-3</td><td align="center">1.6e-2</td><td align="center">1.7e-1</td></tr></tbody></table></table-wrap> <table-wrap position="float" id="T2"><label>Table 2</label><caption><p>GridCell performance versus number of voxels</p></caption><table frame="hsides" rules="groups"><thead><tr><td align="center">Number of Voxels</td><td align="center">1e3</td><td align="center">1e4</td><td align="center">1e5</td><td align="center">1e6</td></tr></thead><tbody><tr><td align="center">Time (s)</td><td align="center">1.6e-5</td><td align="center">1.6e-4</td><td align="center">2.14e-3</td><td align="center">2.06e-2</td></tr></tbody></table></table-wrap> <table-wrap position="float" id="T3"><label>Table 3</label><caption><p>GridCell performance versus number of particles</p></caption><table frame="hsides" rules="groups"><thead><tr><td align="center">Number of Particles</td><td align="center">1e3</td><td align="center">1e4</td><td align="center">1e5</td><td align="center">5e5</td></tr></thead><tbody><tr><td align="center">Time (s)</td><td align="center">21.3e-2</td><td align="center">26.4e-2</td><td align="center">68.1e-2</td><td align="center">22.8e-1</td></tr></tbody></table></table-wrap> <table-wrap position="float" id="T4"><label>Table 4</label><caption><p>GridCell performance versus the average number of reactions</p></caption><table frame="hsides" rules="groups"><thead><tr><td align="center">Average Number of Reactions</td><td align="center">0</td><td align="center">16.5e3</td><td align="center">29.5e3</td><td align="center">39.5e3</td><td align="center">47.5e3</td></tr></thead><tbody><tr><td align="center">Time (s)</td><td align="center">7.4e-2</td><td align="center">7.3e-2</td><td align="center">7.25e-2</td><td align="center">7.2e-2</td><td align="center">7.1e-2</td></tr></tbody></table></table-wrap> <table-wrap position="float" id="T5"><label>Table 5</label><caption><p>Simulation parameters</p></caption><table frame="hsides" rules="groups"><thead><tr><td align="center">Volume (litres)</td><td align="center">10<sup>-14</sup></td></tr></thead><tbody><tr><td align="center">Number of <italic>S </italic>particles</td><td align="center">3000</td></tr><tr><td align="center">Number of <italic>E </italic>particles</td><td align="center">1000</td></tr><tr><td align="center"><italic>k</italic><sub>1 </sub>(<italic>M</italic><sup>-1</sup><italic>s</italic><sup>-1</sup>)</td><td align="center">10<sup>7</sup></td></tr><tr><td align="center"><italic>k</italic><sub>2 </sub>(<italic>s</italic><sup>-1</sup>)</td><td align="center">1</td></tr><tr><td align="center"><italic>K</italic><sub><italic>r </italic></sub>(<italic>s</italic><sup>-1</sup>)</td><td align="center">1</td></tr><tr><td align="center">Simulation time (s)</td><td align="center">10</td></tr><tr><td align="center">Timestep (s)</td><td align="center">10<sup>-3</sup></td></tr></tbody></table></table-wrap> <table-wrap position="float" id="T6"><label>Table 6</label><caption><p>Spatial simulators</p></caption><table frame="hsides" rules="groups"><thead><tr><td/><td align="left">GridCell</td><td align="left">SmartCell</td><td align="left">MesoRD</td><td align="left">Cell++</td><td align="left">MCell</td><td align="left">Smoldyn</td><td align="left">ChemCell</td></tr></thead><tbody><tr><td align="left">Molecule representation</td><td align="left">Particle</td><td align="left">Population</td><td align="left">Population</td><td align="left">Large particles and populations of small particles</td><td align="left">Particle</td><td align="left">Particle</td><td align="left">Particle</td></tr><tr><td align="left">Stochastic</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Large particles only</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td></tr><tr><td align="left">Space</td><td align="left">Discretized</td><td align="left">Discretized</td><td align="left">Discretized</td><td align="left">Continuous (large particles) and discretized (small particles)</td><td align="left">Continuous</td><td align="left">Continuous</td><td align="left">Continuous</td></tr><tr><td align="left">Particle-collision support</td><td align="left">Yes</td><td align="left">No</td><td align="left">No</td><td align="left">No</td><td align="left">No</td><td align="left">No</td><td align="left">No</td></tr><tr><td align="left">Diffusion support</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td></tr><tr><td align="left">SBML support</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">No</td><td align="left">No</td><td align="left">No</td><td align="left">No</td></tr><tr><td align="left">Web availability</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">Yes</td><td align="left">No</td></tr></tbody></table></table-wrap>
<disp-formula id="bmcM1"><label>(1)</label>&lt;<italic>r</italic><sup>2</sup>&gt; = 2<italic>dDt</italic>,</disp-formula> <disp-formula id="bmcM2"><label>(2)</label>&lt;<italic>v</italic><sup>2</sup>&gt; = <italic>An</italic><sub><italic>ts</italic></sub>,</disp-formula> <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M1" name="1752-0509-2-66-i1" overflow="scroll"><mml:semantics><mml:mrow><mml:mo>&lt;</mml:mo><mml:msup><mml:mi>v</mml:mi><mml:mn>2</mml:mn></mml:msup><mml:mo>&gt;</mml:mo><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mo>&lt;</mml:mo><mml:msup><mml:mi>r</mml:mi><mml:mn>2</mml:mn></mml:msup><mml:mo>&gt;</mml:mo></mml:mrow><mml:mrow><mml:msubsup><mml:mi>s</mml:mi><mml:mrow><mml:mi>v</mml:mi><mml:mi>o</mml:mi><mml:mi>x</mml:mi></mml:mrow><mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula> <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M2" name="1752-0509-2-66-i2" overflow="scroll"><mml:semantics><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mi>t</mml:mi><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula> <disp-formula id="bmcM3"><label>(3)</label><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M3" name="1752-0509-2-66-i3" overflow="scroll"><mml:semantics><mml:mrow><mml:mo>&lt;</mml:mo><mml:msup><mml:mi>r</mml:mi><mml:mn>2</mml:mn></mml:msup><mml:mo>&gt;</mml:mo><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>A</mml:mi><mml:msubsup><mml:mi>s</mml:mi><mml:mrow><mml:mi>v</mml:mi><mml:mi>o</mml:mi><mml:mi>x</mml:mi></mml:mrow><mml:mn>2</mml:mn></mml:msubsup></mml:mrow><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:mi>d</mml:mi><mml:mi>D</mml:mi><mml:mi>t</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula> <disp-formula id="bmcM4"><label>(4)</label><italic>D</italic><sub><italic>max </italic></sub>= 0.335<italic>s</italic><sub><italic>vox</italic></sub><sup>2</sup>/<italic>t</italic><sub><italic>s</italic></sub>.</disp-formula> <disp-formula id="bmcM5"><label>(5)</label><italic>D </italic>= <italic>p</italic><sub><italic>m</italic></sub><italic>D</italic><sub><italic>max</italic></sub>,</disp-formula> <disp-formula id="bmcM6"><label>(6)</label><italic>A </italic>→ <italic>B</italic></disp-formula> <disp-formula id="bmcM7"><label>(7)</label><italic>A </italic>→ <italic>B </italic>+ <italic>C</italic>.</disp-formula> <disp-formula id="bmcM8"><label>(8)</label><italic>A </italic>+ <italic>B </italic>→ <italic>C</italic>,</disp-formula> <disp-formula id="bmcM9"><label>(9)</label><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M4" name="1752-0509-2-66-i4" overflow="scroll"><mml:semantics><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>r</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>k</mml:mi><mml:msub><mml:mi>N</mml:mi><mml:mi>a</mml:mi></mml:msub><mml:msub><mml:mi>N</mml:mi><mml:mi>b</mml:mi></mml:msub><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mi>A</mml:mi><mml:mi>v</mml:mi></mml:msub><mml:mi>V</mml:mi></mml:mrow></mml:mfrac><mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula> <disp-formula id="bmcM10"><label>(10)</label><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M5" name="1752-0509-2-66-i5" overflow="scroll"><mml:semantics><mml:mrow><mml:mi>P</mml:mi><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>k</mml:mi><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mi>A</mml:mi><mml:mi>v</mml:mi></mml:msub><mml:msub><mml:mi>V</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:mrow></mml:mfrac><mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula> <disp-formula id="bmcM11"><label>(11)</label><italic>A </italic>+ <italic>A </italic>→ <italic>B</italic>,</disp-formula> <disp-formula id="bmcM12"><label>(12)</label><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M6" name="1752-0509-2-66-i6" overflow="scroll"><mml:semantics><mml:mrow><mml:mi>x</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:msqrt><mml:mrow><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>y</mml:mi></mml:mrow></mml:msqrt><mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula> <disp-formula id="bmcM13"><label>(13)</label><italic>A </italic>→ <italic>B </italic>+ <italic>C </italic>+ <italic>D </italic>+ <italic>E </italic>+ <italic>F</italic></disp-formula> <disp-formula id="bmcM14"><label>(14)</label><italic>T</italic><sub>1 </sub>→ <italic>B </italic>+ <italic>C</italic></disp-formula> <disp-formula id="bmcM15"><label>(15)</label><italic>T</italic><sub>2 </sub>→ <italic>D </italic>+ <italic>E</italic></disp-formula> <disp-formula id="bmcM16"><label>(16)</label><italic>T</italic><sub>3 </sub>→ <italic>F </italic>+ <italic>T</italic><sub>1</sub></disp-formula> <disp-formula id="bmcM17"><label>(17)</label><italic>A </italic>→ <italic>T</italic><sub>2 </sub>+ <italic>T</italic><sub>3</sub></disp-formula> <disp-formula id="bmcM18"><label>(18)</label><italic>A </italic>+ <italic>B </italic>+ <italic>C </italic>+ <italic>D </italic>+ <italic>E </italic>→ <italic>F</italic>.</disp-formula> <disp-formula id="bmcM19"><label>(19)</label><italic>A </italic>+ <italic>B </italic>→ <italic>T</italic><sub>1</sub>,</disp-formula> <disp-formula id="bmcM20"><label>(20)</label><italic>C </italic>+ <italic>D </italic>→ <italic>T</italic><sub>2</sub>,</disp-formula> <disp-formula id="bmcM21"><label>(21)</label><italic>E </italic>+ <italic>T</italic><sub>1 </sub>→ <italic>T</italic><sub>3</sub>,</disp-formula> <disp-formula id="bmcM22"><label>(22)</label><italic>T</italic><sub>2 </sub>+ <italic>T</italic><sub>3 </sub>→ <italic>F</italic>.</disp-formula> <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M7" name="1752-0509-2-66-i7" overflow="scroll"><mml:semantics><mml:mrow><mml:msqrt><mml:mi>P</mml:mi></mml:msqrt></mml:mrow></mml:semantics></mml:math></inline-formula> <disp-formula id="bmcM23"><label>(23)</label><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M8" name="1752-0509-2-66-i8" overflow="scroll"><mml:semantics><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mi>P</mml:mi><mml:mrow><mml:mo>⌊</mml:mo><mml:mrow><mml:mfrac><mml:mn>2</mml:mn><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mrow><mml:mi>r</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi><mml:mi>c</mml:mi><mml:mi>t</mml:mi><mml:mi>a</mml:mi><mml:mi>n</mml:mi><mml:mi>t</mml:mi><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow><mml:mo>⌋</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula> <disp-formula id="bmcM24"><label>(24)</label><italic>A </italic>+ <italic>B </italic>+ <italic>C </italic>+ <italic>D </italic>+ <italic>E </italic>↔ <italic>F</italic>.</disp-formula> <disp-formula id="bmcM25"><label>(25)</label><italic>A </italic>+ <italic>B </italic>+ <italic>C </italic>+ <italic>D </italic>+ <italic>E </italic>→ <italic>F</italic></disp-formula> <disp-formula id="bmcM26"><label>(26)</label><italic>F </italic>→ <italic>A </italic>+ <italic>B </italic>+ <italic>C </italic>+ <italic>D </italic>+ <italic>E</italic></disp-formula> <disp-formula id="bmcM27"><label>(27)</label><italic>E </italic>+ <italic>S </italic>↔ <italic>ES </italic>→ <italic>E </italic>+ <italic>P</italic>.</disp-formula>
<table-wrap-foot><p>Time required to compute a timestep versus the size of a simulation.</p></table-wrap-foot> <table-wrap-foot><p>Time required to compute a timestep versus the number of voxels. No particles in the system</p></table-wrap-foot> <table-wrap-foot><p>Time required to compute a timestep versus the number of particles. The system contains 1e6 voxels.</p></table-wrap-foot> <table-wrap-foot><p>Time required to compute a timestep versus the average number of reactions occuring at each timestep. The system contains 1e6 voxels and 1e5 particles.</p></table-wrap-foot> <table-wrap-foot><p>Parameters of the Michaeles-Menten simulation.</p></table-wrap-foot> <table-wrap-foot><p>Comparison and description of various simulators.</p></table-wrap-foot>
<graphic xlink:href="1752-0509-2-66-1"/> <graphic xlink:href="1752-0509-2-66-2"/> <graphic xlink:href="1752-0509-2-66-3"/> <graphic xlink:href="1752-0509-2-66-4"/> <graphic xlink:href="1752-0509-2-66-5"/>
[{"surname": ["Kholodenko"], "given-names": ["BN"], "article-title": ["Four-dimensional organization of protein kinase signaling cascades: the roles of diffusion, endocytosis and molecular motors"], "source": ["Exp Biol"], "year": ["2003"], "volume": ["206"], "fpage": ["2073"], "lpage": ["2082"], "pub-id": ["10.1242/jeb.00298"]}, {"surname": ["Williams", "Carter", "Oliker", "Shalf", "Yelick"], "given-names": ["S", "J", "L", "J", "K"], "article-title": ["Lattice Boltzmann Simulation Optimization on Leading Multicore Platforms"], "source": ["International Parallel and Distributed Processing Symposium (IPDPS)"], "year": ["2008"]}, {"surname": ["Plimpton", "Slepoy"], "given-names": ["S", "A"], "article-title": ["ChemCell: A Particle-Based Model of Protein Chemistry and Diffusion in Microbial Cells"], "source": ["Sandia Technical Report SAND2003-4509"], "year": ["2003"]}, {"surname": ["Gillespie"], "given-names": ["DT"], "article-title": ["A general method for numerically simulating the stochastic time evolution of couple chemical reactions"], "source": ["Journal of Computational Physics"], "year": ["1976"], "volume": ["22"], "fpage": ["403"], "lpage": ["434"], "pub-id": ["10.1016/0021-9991(76)90041-3"]}, {"surname": ["Boulianne", "Dumontier", "Gross"], "given-names": ["L", "M", "WJ"], "article-title": ["A Stochastic Particle-Based Biological System Simulator"], "source": ["Proceedings of the Summer Computer Simulation Conference, San Diego, California (USA)"], "year": ["2007"], "fpage": ["794"], "lpage": ["801"]}, {"surname": ["Ander"], "given-names": ["M"], "article-title": ["SmartCell, a framework to simulate cellular processes that combines stochastic approximation with diffusion and localisation: analysis of simple networks"], "source": ["Syst Biol"], "year": ["2004"], "volume": ["1"], "fpage": ["129"], "lpage": ["138"], "pub-id": ["10.1049/sb:20045017"]}, {"surname": ["Hattne", "Fange", "Elf"], "given-names": ["J", "D", "J"], "article-title": ["Stochastic reaction-diffusion simulation with MesoRD"], "source": ["Bioinfomatics"], "year": ["2005"], "volume": ["21"], "fpage": ["2923"], "lpage": ["2924"], "pub-id": ["10.1093/bioinformatics/bti431"]}, {"surname": ["Sanford", "Yip", "White", "Parkinson"], "given-names": ["C", "MLK", "C", "J"], "article-title": ["Cell++simulating biochemical pathways"], "source": ["Bioinfomatics"], "year": ["2006"], "volume": ["22"], "fpage": ["2918"], "lpage": ["2925"], "pub-id": ["10.1093/bioinformatics/btl497"]}, {"surname": ["Stiles", "Bartol", "DeSchutter E"], "given-names": ["JR", "TM"], "article-title": ["Monte Carlo methods for simulating realistic synaptic microphysiology using MCell"], "source": ["Computational Neuroscience: Realistic Modeling for Experimentalists"], "year": ["2001"], "publisher-name": ["Boca Raton: CRC Press"], "fpage": ["87"], "lpage": ["127"]}]
BMC Syst Biol. 2008 Jul 23; 2:66