{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "*Name(s):*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# CS341 Project 2\n", "\n", "There are many reoccurring patterns in gene regulatory networks. In this project, you will be exploring three of them -- a signal cascade of activators, a feed forward loop, and a negative feedback loop. The third example is in the context of a specific biological system -- the fruit fly circadian clock. \n", "\n", "Your goal is to understand the purpose and mechanisms of these patterns (how do they work? why do we have them?). To accomplish your goal, you should explore and understand the ranges of behaviors of each pattern." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part 1. A Cascade of Activators\n", "\n", "Consider a system in which a \"signal\" enters the cell (in form of protein X\\*) and binds to the promoter region of gene y, activating its transcription. Once protein Y has been translated, it binds to the promoter of gene z, activating its transcription. The image below shows the network diagram for such a system. We assume that production of Y is governed by Hill kinetics with a maximal rate of transcription $\\beta_{Y}$, activation coefficient $K_Y$, and Hill coefficient $n_Y$. Likewise, the production of Z is governed by Hill kinetics with the analogous parameters $\\beta_{Z}$, $K_Z$, and $n_Z$. Both Y and Z are degraded using mass action kinetics with the rate constant $\\alpha$. X* is the input and as such can be thought of as an additional, time-varying parameter.\n", "\n", "\n", "
A signal cascade of activators. X* activates synthesis of protein Y, which activates synthesis of protein Z.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "(1) Write down the ODEs that describe this system. Assume that X\\* is a time-dependent parameter and that we need not include mRNA explicitly. In other words, use 2 ODEs. You may want to call X\\* simply X so that it works well in Latex." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Remove this line and use this cell for your solution.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "(2) Write the Python code necessary to simulate the system. Given the parameters, $\\beta_{Y} = 1 nM/s$, $K_Y = 0.5 nM$, $n_Y=2$, $\\beta_{Z} = 1 nM/s$, $K_Z = 0.5 nM$, $n_Z=2$, and $\\alpha=0.1$ and initial conditions $Y(0) =0$ and $Z(0)=0$, simulate the system for 150 seconds with the signal \"off\" during the first 50 seconds and \"on\" for the rest of the simulation. In other words, simulate the system from $t=0$ to $t=150s$ (with a time step $\\le0.1s$) when the input X\\*(t) = 0 for $0\\le t<50s$ and X\\*(t) = 1 thereafter.\n", "\n", "Remember to label your axes and your lines (i.e. use a legend). Also, add a new Markdown cell below the figure to describe what it contains and why it shows your calculation is correct.\n", "\n", "Note: It is a good idea to run the simulation twice - once with X\\* at 0, and one with X\\* at 1. Set up the second simulation to use sol.y\\[:,-1\\] as the initial condition for y. (If you instead attempt to use an if-statement in the model code (e.g. if t < timeOn), then the numerical integrator may take such large steps that it steps over the time t=50 and misses its chance to do what it needs to do.)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# Write code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "(3) X\\* provides \"simple input\" to gene Y. When X\\* is present, Y is activated and $Y(t)$ increases significantly. However, Z rises higher. Indeed, the biological purpose of a signal cascade is to amplify an input signal. Explore the effects of signal strength (i.e. the magnitude of X\\*) on the profile of Z. When does a stronger signal fail to yield a higher response? Why? (Hint: consider the Hill equation). When does it amplify the signal the most ? (By \"amplify the signal the most\", I mean \"increase the ratio of Z to X\" -- not necessarily increase the absolute values.)\n", "\n", "*Opportunity for thoroughness: Please feel free to add additional code and Markdown cells to make your explanation as complete as possible.*\n", "\n", "*Opportunity for thoroughness: Also consider a different definition of amplification, i.e. use the absolute value of Z.*" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# Write code here\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "(4) If we increase the Hill coefficient, how does the answer to (3) change? Why?\n", "\n", "Note: For the sake of simplicity, you can vary $n_Y$ and $n_Z$ together.\n", "\n", "*Opportunity for thoroughness: Please feel free to add additional code and Markdown cells to make your explanation as complete as possible.*" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# Write code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "(5) What is the relationship between the response time of Z and the onset of the signal? Numerically determine Z's response time by estimating its steady-state $Z_{SS}$ and the time it takes for Z to become $Z_{SS}/2$ (in the original configuration and others if you would like to explore further).\n", "\n", "*Opportunity for thoroughness: Please feel free to add additional code and Markdown cells to make your explanation as complete as possible.*" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "# Write code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part 2. A Feed-Forward Loop\n", "\n", "Next, consider a common feed-forward loop (see image below) similar to the activation cascade, but in which X\\* also \"feeds forward\" its signal directly to Z. The regulation of X\\* and Y\\* work together to activate transcription. Logically, we think of them as being \"ANDed\" together. Mathematically, we express it by multiplying the two regulation terms. We use the same assumptions as above, and therefore mostly the same parameters. Because there are two regulators for Z, we use $K_{ZX}$, $K_{ZY}$, $n_{ZX}$, and $n_{ZY}$ instead of just $K_Z$ and $n_Z$.\n", "\n", "\n", "
A signal cascade of activators. X* activates synthesis of protein Y, which activates synthesis of protein Z.
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "(1) Write down the ODEs that describe this system. Like above, use 2 ODEs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Remove this line and use this cell for your solution.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "(2) Write the Python code necessary to simulate the system. Given the parameters, $\\beta_{Y} = 1 nM/s$, $K_Y = 0.5 nM$, $n_Y=2$, $\\beta_{Z} = 1 nM/s$, $K_{ZX} = 0.5 nM$, $n_{ZX}=2$, $K_{ZY} = 0.5 nM$, $n_{ZY}=2$, and $\\alpha=1$ and initial conditions $Y(0) =0$ and $Z(0)=0$, simulate the system for 150 seconds with the signal \"off\" during the first 50 seconds and \"on\" for the rest of the simulation. In other words, simulate the system from $t=0$ to $t=50s$ (with a time step $\\le0.1s$) when the input X*(t) = 0 for $0\\le t<50s$ and X*(t) = 1 thereafter." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "# Write code here.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "(3) The biological purpose is to allow the system to ignore signals that are too short. In other words, this system is not set off accidentally by random fluctuations in certain proteins. Demonstrate how this feed-forward system is immune to short signals where as the cascade of activators is susceptible to it. Is a feed-forward loop immune to short signals because it delays the signal's off-to-on transition or on-to-off transition? Or both? You may want to compare the timing of these transitions in the feed-forward loop to the timing of these transitions in the simple cascade from the previous problem." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "# Write code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part 3. A Negative Feedback Loop\n", "\n", "Another ubiquitous gene network structure is that of the negative feedback loop. In 1995, Albert Goldbeter published an important mathematical model of the gene regulatory network in the fruit fly circadian clock. Even though it involves only one protein, it is remarkable in its ability to behave realistically.\n", "\n", "Read the paper \"A model of circadian oscillations in the *Drosophila* period protein\", *Proc. R. Soc. Lond. B*, 1995, which can be found at JStor that Stephanie emailed to you." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "(1) Reproduce Figure 2. The equations are specified in the text, and the parameter values are given in the figure's caption. Because this is a limit cycle oscillator, the system will achieve its cycle (rhythmic behavior) regardless of initial conditions. Initial conditions do, however, determine *when* the system achieves the rhythmic behavior -- if you start too far away from the cycle, you will have to simulate a long time before you see rhythms. Examine Goldbeter's Figure 2 to determine a reasonable set of initial conditions. Write the appropriate Python code, and run it. Your new figure does not need to use the same line styles as Goldbeter's, but it should have the same values at the same times (i.e. the mRNA component should peak around $t=12h$).\n", "\n", "Note: Be careful. The text is little and it is possible to mistake $K_1$ (K one) for $K_I$ (K eye) and vice versa. Both are used in the equations.\n", "\n", "Note: A strategy that I use for finding the periodic solution is to run the solver for 240 hours (to simulate 10 days), then grab the value of the state variables at the last time point. I use that value to begin a second, shorter, simulation that I plot." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "# Write code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "(2) One of the discussions in the paper is about the importance of the rate of doubly-phosphorylated PER degradation ($v_d$) on the period of the oscillation. He doubles the rate of PER translation (i.e. $k_s=0.78h_{-1}$ ). Using this set of parameters, he simulates the model many times, each time using different value of $v_d$. He demonstrates the strong depends of the period on the value of $v_d$. Then, in the text, he also mentions that the amplitude of oscillation depends on $v_d$ in an unintuitive direction -- increasing degradation of PER actually causes the maximum level of total PER to increase. This happens because the time evolutions of PER and *per* mRNA are closely intertwined. In other words, they are in a network with feedback and the process of degradation cannot be studied effectively in isolation. Write Python code to vary the value of $v_d$ and generate one or more figures to illustrate this unintuitive behavior. Is the same true for mRNA degradation? If so, why? If not, why not?\n", "\n", "Note: Answer this question by performing a similar experiment that varies $v_m$. Be sure to take into account only those values of $v_m$ that allow the system to oscillate." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "# Write code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Acknowledgements\n", "\n", "*Replace this text with links to external resources and thanks to people you worked with.*" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }