= Practical 7 = == Analysing a genome scale model of Salmonella == In this practical we (you !) will be replicating some the analysis that was described in the [[http://mudsharkstatic.brookes.ac.uk/C1Net/Wshop1/L10.pdf|previous lecture]] . In order to do this you will need to download the files associated with the model: 1. Download the file [[http://mudsharkstatic.brookes.ac.uk/C1Net/Wshop1/P7.tgz|P7.tgz]] into the area in whch you have been using for your other practicals. 1. This is a compressed archive file and you will need to extract the files before they can be used: {{{ $ tar -zxf P7.tgz }}} 1. This will generate a directory, S.Typhim, containing two sub-directories: Model and Analysis. Model contains the model definition files and an additional python module (in Model/Tools). Analysis contains the python modules you will need for this practical. 1. For the sake of the practical we have made a few simplifications and the model and results will not be identical to those in the lecture. the aim of the practical is to illustrate the techniques used. == Part A: Analysing the response to varying ATP demand. == 1. Change directory to the relevant area: . {{{$ cd S.Typhim/Analysis/ATPScan}}} 1. Start ScrumPy and load the model: . {{{ >>> m = ScrumPy.Model("../../Model/MetaSal.spy") }}} . (If you wish to avoid a bit of typing, leave the model name blank and use the file selector to find the model file instead.) 1. Examine the files that are now presented - how much can you recognise from previous work in this course? 1. Now import the module called ATPScan . {{{ >>> import ATPScan }}} 1. The module contains a function, also called {{{ATPScan}}} that will generate a data set (as shown in previous lectures) containing the lp solutions over a range of imposed ATP demand values, e.g.: 1. {{{ >>> results = ATPScan.ATPScan(m, 0, 10, 50) }}} 1. Will generate a dataset containing 50 solutions for the model with the imposed ATPase flux varying between 0 and 10 flux units. 1. The ATPScan module also contains three functions to aid in the analysis of results: . {{{ GetChangers(results, tol=1e-6) }}} A list of reactions whose flux value changes by more than tol (default = 1e-6). {{{ GetSwitchers(results) }}} A list of reactions that carry no flux at some point. {{{ GetRanges(results, tol=1e-6) }}} A dictionary mapping reactions to the amount of change in flux over the range of ATP demand. * For example, to plot the reactions that at some point carry no flux: . {{{ results.AddToPlot(ATPScan.GetSwitchers(results)) }}} * Use these functions to identify which fluxes show the greatest response to changes in ATP demand == Part B: Impact of single and double reaction knockouts == 1. cd into Analysis/Knockouts 1. Start ScrumPy and the load the model as before. 1. Import the {{{KnockOutImpacts}}} module. 1. This defines a single function also called {{{KnockOutImpacts}}} that returns a dictionary recording the impact of remove each reaction from the model (relative change in objective value) eg: {{{ >>> res = KnockOutImpacts.KnockOutImpacts(m)}}} 1. Use this to a) Identify the lethal knockouts. b) Identify the non lethal knockouts that have the greatest impact. c) From b investigate the impact of dual knockouts, e.g.: {{{ >>> lp.SetFixedFlux({Reac1:0,Reac2:0}) }}} {{{ >>> lp.Solve() }}} etc. Remember to clear the constraint before proceeding: {{{ >>> lp.ClearFluxConstraint([Reac1,Reac2]) }}} (Generate lp by: {{{>>> lp = KnockOutImpacts.BuildLP.BuildLP(m) }}} )