Libraries of Modules ---------------------------------------------------------- Molecular interaction modules must be defined in *libraries*, files with the extension *.plb*, in order to facilitate their reusability in different *SP-system* models of individual cells. A library of modules is defined as a block *libraryOfModules libraryName ... endLibraryOfModules* where *libraryName* is an identifier. A library consists of a list of module definitions as introduced in the previous section. The general structure of a **module library** is given below:: libraryOfModules libraryName moduleDefinition ... moduleDefinition endLibraryOfModules Modules can reuse other modules define in the same library if these have been defined previously, above in the file, or modules from other libraries. When the modules being reused are from the same library the two keywords *from this* must be used, if they are defined in other libraries the corresponding files must be declared following the module instantiation using *from libaryFileName*. The following next two sections illustrate how modules and libraries of modules are used in the *Infobiotics Workbench* in two different scenarios: systems biology and synthetic biology. The library of modules used in our model of Ron Weiss' pulse propagation is presented below in order to illustrate the above definition. Observe how the last module in the library *pulseGenerator* is defined using previously introduced modules in the library with specific instantiatons. As illustrated in the first module, *Pconst*, a variable representing a stochastic constant can be given a default value that can be overwritten. :: libraryOfModules promoterLibrary Pconst({X},{c_1},{l}) = { r1: [ Pconst_geneX ]_l -c1-> [ Pconst_geneX + rnaX_RNAP ]_l c1 = 2 } Plux({X},{c_1, c_2, c_3},{l}) = { r1: [ LuxR2 + Plux_geneX ]_l -c_1-> [ Plux_LuxR2_geneX ]_l r2: [ Plux_LuxR2_geneX ]_l -c_2-> [ LuxR2 + Plux_geneX ]_l r3: [ Plux_LuxR2_geneX ]_l -c_3-> [ Plux_LuxR2_geneX + rnaX_RNAP ]_l } Pluxleaky({X},{c_1,c_2,c_3,c_4},{l}) = { r1: [ LuxR2 + Plux_geneX ]_l -c_1-> [ Plux_LuxR2_geneX ]_l r2: [ Plux_LuxR2_geneX ]_l -c_2-> [ LuxR2 + Plux_geneX ]_l r3: [ Plux_LuxR2_geneX ]_l -c_3-> [ Plux_LuxR2_geneX + rnaX_RNAP ]_l r4: [ Plux_geneX ]_l -c_4-> [ Plux_geneX + rnaX_RNAP ]_l } PluxPR({X},{c_1,c_2,c_3,c_4,c_5,c_6,c_7,c_8,c_9},{l}) = { r1: [ LuxR2 + PluxPR_geneX ]_l -c_1-> [ PluxPR_LuxR2_geneX ]_l r2: [ PluxPR_LuxR2_geneX ]_l -c_2-> [ LuxR2 + PluxPR_geneX ]_l r3: [ LuxR2 + PluxPR_CI2_geneX ]_l -c_3-> [ PluxPR_LuxR2_CI2_geneX ]_l r4: [ PluxPR_LuxR2_CI2_geneX ]_l -c_4-> [ LuxR2 + PluxPR_CI2_geneX ]_l r5: [ CI2 + PluxPR_geneX ]_l -c_5-> [ PluxPR_CI2_geneX ]_l r6: [ PluxPR_CI2_geneX ]_l -c_6-> [ CI2 + PluxPR_geneX ]_l r7: [ CI2 + PluxPR_LuxR2_geneX ]_l -c_7-> [ PluxPR_LuxR2_CI2_geneX ]_l r8: [ PluxPR_LuxR2_CI2_geneX ]_l -c_8-> [ CI2 + PluxPR_LuxR2_geneX ]_l r9: [ PluxPR_LuxR2_geneX ]_l -c_9-> [ PluxPR_LuxR2_geneX + rnaX_RNAP ]_l } Plac({X},{c_1,c_2,c_3},{l}) = { r1: [ Plac_geneX ]_l -c_1-> [ Plac_geneX + rnaX_RNAP ]_l r2: [ proteinLacI + Plac_geneX ]_l -c_2-> [ Plac_LacI_geneX ]_l r3: [ Plac_LacI_geneX ]_l -c_3-> [ proteinLacI + Plac_geneX ]_l r4: [ proteinUnLacI + Plac_geneX ]_l -c_2-> [ Plac_UnLacI_geneX ]_l r5: [ Plac_UnLacI_geneX ]_l -c_3-> [ proteinUnLacI + Plac_geneX ]_l } PluxPtetR({X},{c_1,c_2,c_3,c_4,c_5,c_6,c_7,c_8,c_9,c_10,c_11,c_12,c_13,c_14,c_15},{l}) = { r1: [ LuxR2 + PluxPtetR_geneX ]_l -c_1-> [ PluxPtetR_LuxR2_geneX ]_l r2: [ PluxPtetR_LuxR2_geneX ]_l -c_2-> [ LuxR2 + PluxPtetR_geneX ]_l r3: [ LuxR2 + PluxPtetR_TetR_geneX ]_l -c_3-> [ PluxPtetR_LuxR2_TetR_geneX ]_l r4: [ PluxPtetR_LuxR2_TetR_geneX ]_l -c_4-> [ LuxR2 + PluxPtetR_TetR_geneX ]_l r5: [ LuxR2 + PluxPtetR_TetR2_geneX ]_l -c_5-> [ PluxPtetR_LuxR2_TetR2_geneX ]_l r6: [ PluxPtetR_LuxR2_TetR2_geneX ]_l -c_6-> [ LuxR2 + PluxPtetR_TetR2_geneX ]_l r7: [ TetR + PluxPtetR_geneX ]_l -c_7-> [ PluxPtetR_TetR_geneX ]_l r8: [ PluxPtetR_TetR_geneX ]_l -c_8-> [ TetR + PluxPtetR_geneX ]_l r9: [ TetR + PluxPtetR_LuxR2_geneX ]_l -c_9-> [ PluxPtetR_LuxR2_TetR_geneX ]_l r10: [ PluxPtetR_LuxR2_TetR_geneX ]_l -c_10-> [ TetR + PluxPtetR_LuxR2_geneX ]_l r11: [ TetR + PluxPtetR_TetR_geneX ]_l -c_11-> [ PluxPtetR_TetR2_geneX ]_l r12: [ PluxPtetR_TetR2_geneX ]_l -c_12-> [ TetR + PluxPtetR_TetR_geneX ]_l r13: [ TetR + PluxPtetR_LuxR2_TetR_geneX ]_l -c_13-> [ PluxPtetR_LuxR2_TetR2_geneX ]_l r14: [ PluxPtetR_LuxR2_TetR2_geneX ]_l -c_14-> [ TetR + PluxPtetR_LuxR2_TetR_geneX ]_l r15: [ PluxPtetR_LuxR2_geneX ]_l -c_15-> [ PluxPtetR_LuxR2_geneX + rnaX_RNAP ]_l } PR({X},{c_1,c_2,c_3},{l}) = { r1: [ PR_geneX ]_l -c_1-> [ PR_geneX + rnaX_RNAP ]_l r2: [ CI2 + PR_geneX ]_l -c_2-> [ PR_CI2_geneX ]_l r3: [ PR_CI2_geneX ]_l -c_3-> [ CI2 + PR_geneX ]_l } PostTransc({X},{c_1,c_2,c_3,c_4,c_5},{l}) = { r1: [ rnaX_RNAP ]_l -c_1-> [ rnaX ]_l r2: [ rnaX ]_l -c_2-> [ rnaX + proteinX_Rib ]_l r3: [ rnaX ]_l -c_3-> [ ]_l r4: [ proteinX_Rib ]_l -c_4-> [ proteinX ]_l r5: [ proteinX ]_l -c_5-> [ ]_l } Dim({X,Y},{c_1,c_2},{l}) = { r1: [ proteinX + proteinX ]_l -c_1-> [ Y ]_l r2: [ Y ]_l -c_2-> [ ]_l } DimSig({X,S,Y},{c_1,c_2,c_3,c_4},{l}) = { r1: [ proteinX + signalS ]_l -c_1-> [ proteinX_S ]_l r2: [ proteinX_S ]_l -c_2-> [ ]_l r3: [ proteinX_S + proteinX_S ]_l -c_3-> [ Y ]_l r4: [ Y ]_l -c_4-> [ ]_l } Diffusion({X},{c_1},{l}) = { r1: [ signalX ]_l =(1,0)=[ ] -c_1-> [ ]_l =(1,0)=[ signalX ] r2: [ signalX ]_l =(-1,0)=[ ] -c_1-> [ ]_l =(-1,0)=[ signalX ] r3: [ signalX ]_l =(0,1)=[ ] -c_1-> [ ]_l =(0,1)=[ signalX ] r4: [ signalX ]_l =(0,-1)=[ ] -c_1-> [ ]_l =(0,-1)=[ signalX ] } Deg({X},{c_1},{l}) = { r1: [ X ]_l -c_1-> [ ]_l } pulseGenerator({X},{c_1,c_2,c_3,c_4,c_5},{l}) = { Pconst({LuxR},{0.1},{l}) from this PostTransc({LuxR},{3.2,0.3,0.04,3.6,0.075},{l}) from this DimSig({LuxR,3OC12,LuxR2},{1,0.0154,1,0.0154},{l}) from this Plux({CI},{1,1,4},{l}) from this PostTransc({CI},{3.2,0.02,0.04,3.6,0.1},{l}) from this Dim({CI,CI2},{1,0.00554},{l}) from this PluxPR({X},{1,1,1,1,5,0.0000001,5,0.0000001,4},{l}) from this PostTransc({X},{c_1,c_2,c_3,c_4,c_5},{l}) from this Diffusion({3OC12},{0.1},{l}) from this } endLibraryOfModules