======================================== Single Cell Specification Format ======================================== The specification of a single cell type can be provided to Infobiotics in `SBML `_ format. Specifically, Infobiotics is compatible with the SBML v2.1 generated by `CellDesigner `_. Alternatively, the specific modelling language based on SP-systems provided by Infobiotics can be used. The skeleton of the specification of an individual cell type, identified with the name *cellTypeName* must be done in a text file with extension *.sps* for *Stochastic P-system* according to the following format:: SPSystem cellTypeName alphabet ... endAlphabet compartments ... endCompartments initialMultisets ... endInitialMultisets ruleSets ... endRuleSets endSPSystem In Ron Weiss' synthetic pulse propagation, there exist two different bacterial strains or cell types. One of them acts a **signal sender** and the other one as a **pulse generator** in response to the signal produced by the first bacterial strain. In what follows we use the specification of the *signal sender* to introduce the format for the specification of the different components of an SP-system model enumerated above. Molecular Species ------------------------- The molecular species described as string-objects are specified within the block *molecules ... endMolecules*. Each molecular species is identified with a name, *moleculeName*. For example, in our *signal sender* the following molecular species are present:: alphabet Pconst_geneLuxI rnaLuxI_RNAP rnaLuxI proteinLuxI_Rib proteinLuxI signal3OC6 endAlphabet These objects represent the constitutively expressed gene LuxI, *Pconst_geneLuxI*, an RNA polymerase producing the RNA associated with LuxI, *rnaLuxI_RNAP*, the LuxI RNA, *rnaLuxI*, a ribosome translating the corresponding RNA into the protein LuxI, *proteinLuxI_Rib*, the LuxI protein, *proteinLuxI* and the molecula signal 3OC6, *signal3OC6*. Compartments ---------------------- The different compartments and regions relevant in a model of an individual cell type are specified in the block *compartments ... endCompartments*. Each compartment is identified with a *compartmentName* and the keyword *inside* followed by another *compartmentName* is used to specify the inclusion of the first compartment in the second one. The declaration of a compartment identified with *compartmentName1* inside a compartment identified with *compartmentName2* is specified as follows:: compartmentName1 inside compartmentName2 If a compartment is not contained in any other compartment of the system the key word *inside* and the second compartment name are omitted. Our example includes two relevant regions for a bacterium. Specifically, the *media* surronding an individual cell and the *bacterium* itself. Note how the compartment *bacterium* is declared as contained in the compartment *media*:: compartments media bacterium inside media endCompartments Initial Multiplicities ------------------------------- The initial number of molecules present at the beginning of the simulation in the different compartments must be specified using the block *initialMultisets ... endInitialMultisets*. For each compartment identified with *compartmentName* a different block *initialMultiset compartmentName ... endInitialMultiset* must be declared inside the block *initiaLMultisets*. This inner block contains a list of species names follow by an integer representing the initial number of molecules:: initialMultisets initialMultiset compartmentName speciesName numberOfMolecules ... endInitialMultiset ... endInitialMultisets If a compartment is initiallly empty the block declaring its initial number of molecules can be omitted. For example, our *signal sender* consists of two compartments, the *media* and the *bacterium*. The media is initially empty whereas the bacterium has a molecule *Pcons_geneLuxI* represeting a specific gene:: initialMultisets initialMultiset bacterium Pconst_geneLuxI 1 endInitialMultiset endInitialMultisets Molecular Interactions --------------------------------------------------- The molecular interactions in a cell type are represented using rules specified within the block *ruleSets ... endRuleSets*. For each compartment identified with *compName* a different block *ruleSet compName ... endRuleSet* enumerating the molecular interactions associated with the compartment must be inserted in the previous block:: ruleSets ruleSet compName ... endRuleSet ... endRuleSets The *sender cell* in our example needs the specification of the molecualar interactions involving two different compartments, the *media* and the *bacterium*:: ruleSets ruleSet media ... endRuleSet ruleSet bacterium ... endRuleSet endRuleSets The molecular interactions taking place inside a compartment (first rule type below) or moving molecules outside a compartment (second rule type below) and inside a compartment (third rule type below) are specified using one of the rule types bellow. These must be specified within the corresponding block *ruleSet compName ... endRuleSet*:: ruleName: [ reactants ]_compName -const-> [ products ]_compName const = value ruleName: [ reactants ]_compName -const-> products [ ]_compName const = value ruleName: reactants [ ]_compName -const-> [ products ]_compName const = value In the above declaration *ruleName* is an identifier of the rule, *reactants* and *products* are either a single *moleculeName* or two separated by a plus symbol, *moleculeName + moleculeName*; the compartment involved in the molecular interaction is identified with *compName*; *const* is used to represent the stochastic constant specifically associated with the rule and its value is specified in *const = value*. In the *sender cell* of our running example there are two different compartments, the *media* and the *bacterium*. In the *media* the only molecular interactions are *signal diffusion out* of the media, *signal diffusion inside* the bacterium and *signal degradation*. These are represented using the rules *r1*, *r2* and *r3* specified in the correponding *ruleSet* block:: ruleSet media r1: [ signal3OC6 ]_media -c1-> signal3OC6 [ ]_media c1 = 1 r2: signal3OC6 [ ]_bacterium -c2-> [ signal3OC6 ]_bacterium c2 = 2 r3: [ signal3OC6 ]_bacterium -c3-> [ ]_bacterium c3 = 1 endRuleSet The molecular interactions associated with a compartment can be specified in a modular way by reusing sets of rules, modules, containing variables that can be instantiated with specific molecular species names, stochastic constant values and compartment names. A module is specified by stating its identifier *moduleName* and the molecular names, stochastic constant values and compartment names for the corresponding instantiations (*objectInstantiation*, *constantInstantiation*, *compInstantiaton*). Finally, the file containing the library of modules where the corresponding module is defined must be specified after the key word *from*:: moduleName( objectInstantiation, constantInstantiation, compInstantiation ) from moduleLibraryFile For example, in our *sender cell* the molecular interactions associated with the *bacterium* compartment are specified using two modules defined in the module library *library.plb*. The first one called *Pconst* contains rules describing the constitutive expression of a gene *X*, instantiated in this case with *LuxI*, at a rate *c*, instantiated with 0.1, inside a compartment *l*, instantiated with *bacterium* here. The second one called *PostTransc* consists of rules representing the processes involved in the post-transcriptional regultion of a protein *X*, instantiated with *LuxI* here, taking place a the rates instantiated with the values *3.36,0.0667,0.004,3.78,0.0667* inside a compartment instantiated as *bacterium* in this case. Three additional rules are added in order to represent *signal synthesis* by proteinLuxI, *signal diffusion* out of the compartment *bacterium* and *signal degradation*:: ruleSet bacterium Pconst({LuxI},{0.1},{bacterium}) from library.plb PostTransc({LuxI},{3.36,0.0667,0.004,3.78,0.0667},{bacterium}) from library.plb r1: [ proteinLuxI ]_bacterium -c1-> [ proteinLuxI + signal3OC6 ]_bacterium c1 = 1 r2: [ signal3OC6 ]_bacterium -c2-> signal3OC6 [ ]_bacterium c2 = 2 r3: [ signal3OC6 ]_bacterium -c3-> [ ]_bacterium c3 = 2 endRuleSet The use of modules is extensively described in the next section.