Genetic Switch - Synthetic Biology Extension

Genetic Switch - Synthetic Biology Extension preview image

1 collaborator

My_photo_2 Sugat Dabholkar (Author)

Tags

(This model has yet to be categorized with any tags)
Part of project 'GenEvo Curriculum'
Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.0-M6 • Viewed 604 times • Downloaded 91 times • Run 0 times
Download the 'Genetic Switch - Synthetic Biology Extension' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Info tab cannot be displayed because of an encoding error

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

breed [ LacIs LacI ]  ;; LacI repressior protein (violet proteins)
breed [ LacZs LacZ ]  ;; LacZ beta-galactosidase emzyme (red proteins)
breed [ ONPGs ONPG ]  ;; ortho-Nitrophenyl-beta-galactoside (ONPG) molecule (grey molecules) that is cleaved by beta-galactosidase to produce an intensely yellow compound.
breed [ LacYs LacY ]  ;; permease orange turtles that go to the cell wall and transport lactose inside
breed [ RNAPs RNAP ]  ;; RNA Polymerases (brown proteins) that bind to promoter part of DNA and synthesize mRNA from the downstream DNA

LacIs-own [
  partner             ;;  a partner is a ONPG molecule with which a LacI molecule binds to form a complex
  inhibitor?          ;;  a boolean to track if a LacI can bind to DNA as an inhibitor of transcition
]
RNAPs-own [on-dna?]   ;; a boolean to track if RNAP
ONPGs-own [
  partner             ;; a partner is a lacI molecule with which an ONPG forms a complex
]

globals
[ promoter-color-list       ;; color list to set promoter colors based on their strengths
  rbs-color-list            ;; color list to set rbs colors based on their strengths
  gene-color                ;; color of the gene
  operon-transcribed?       ;; a boolean to see if the operon is transcribed
  LACZ-PRODUCTION-NUM       ;; number of lacZ molecules produced per transcription (this number depends on the rbs strength)
  lacZ-production-num-list  ;; list of numbers to set lacZ molecules produced based on the rbs strength
  ONPG-degradation-count    ;; a variable to keep track of number of ONPG molecules degraded
  energy-value              ;; keeps track of the energy value of the cell
  lacI-number               ;; number of lacI molecules
  RNAP-number               ;; number of RNA Polemerase molecules
  inhibited?                ;; boolean for whether or not the operator is inhibited
  dna                       ;; agentset containing the patches that are DNA
  non-dna                   ;; agentset excluding the patches that are DNA
  lacZ-gene                 ;; agentset containing the patches that are LacZ gene
  promoter                  ;; agentset containing the patches that are for the promoter
  operator                  ;; agentset containing the patches that are for the operator
  rbs                       ;; agentset containing the patches that are for the rbs
  terminator                ;; agentset containing the patches that are for the terminator
  total-transcripts         ;; a variable to keep track of the number of transciption events
  total-proteins            ;; a veriable to keep track of the number of proteins produced
  ini-ONPG-number           ;; a veriable to set initial ONPG number. This number is set to 0 in the setup procedure. It is set to 200 in the 'Add ONPG' button.
]

to set-global-variables
  set promoter-color-list [62 64 65 68]
  set rbs-color-list [12 14 15 17]
  set gene-color 95
  set lacI-number 30
  set RNAP-number 30
  set lacZ-production-num-list [2 3 4 6]
  set inhibited? false
  set ONPG-degradation-count 0
  set total-transcripts 0
  set ini-ONPG-number 0
  set operon-transcribed? false
end 

to set-rbs-effect        ;; sets number of LacZ molecules produced per transcription event depedning on the rbs strength
   if rbs-strength = "weak" [
    set lacZ-production-num item 0 lacZ-production-num-list
  ]
  if rbs-strength = "reference" [
    set lacZ-production-num item 1 lacZ-production-num-list
  ]
  if rbs-strength = "medium" [
    set lacZ-production-num item 2 lacZ-production-num-list
  ]
  if rbs-strength = "strong" [
    set lacZ-production-num item 3 lacZ-production-num-list
  ]
end 

to setup
  ca
  set-global-variables
  set-rbs-effect
  set-DNA-patches
  add-proteins
  reset-ticks
end 

to go
  go-lacIs
  go-RNAPs
  go-LacZs
  if (operon-transcribed?) [
    create-lacZs lacZ-production-num [
      setxy random-xcor random-ycor
      setshape
    ]
    set total-proteins total-proteins + lacZ-production-num
    set operon-transcribed? false
  ]
  go-ONPGs
  degrade-lacZ
  dissociate-complex
  recolor-patches
  ask turtles [
    setshape
  ]
  if timed-expt? [
    if ticks = 2500 [ stop ]
  ]
  if const-ONPG? [
    add-ONPG ( ini-ONPG-number - count ONPGs )
  ]

  tick
end 

to random-walk    ;; a random walk procedure for the proteins and ONPG molecules in the cell
  rt random-float 360
  fd 1
end 

to set-DNA-patches   ;; a procedure to set the DNA patches in the cell and assign appropriate colors based on their strengths
  ask patches [set pcolor white]
  set dna patches with [
    pxcor >= -40 and pxcor < 30 and pycor > 3 and pycor < 6
  ]
  set promoter patches with [
    pxcor >= -40 and pxcor < -26 and pycor > 3 and pycor < 6
  ]
  set operator ( patch-set
    patches with [ pxcor >= -26 and pxcor < -20 and pycor = 4 ]
    patches with [ pxcor = -26 and pycor = 5 ]
    patches with [ pxcor = -24 and pycor = 5 ]
    patches with [ pxcor = -23 and pycor = 5 ]
    patches with [ pxcor = -21 and pycor = 5 ]
  )

  set rbs patches with [
    pxcor >= -20 and pxcor < -15 and pycor > 3 and pycor < 6
  ]
  set lacZ-gene patches with [
    pxcor >= -15 and pxcor < 25 and pycor > 3 and pycor < 6
  ]
  set terminator patches with [
     pxcor >= 25 and pxcor < 30 and pycor > 3 and pycor < 6
  ]
  ask promoter [
    if promoter-strength = "strong" [
      set pcolor item 0 promoter-color-list
    ]
    if promoter-strength = "medium" [
      set pcolor item 1 promoter-color-list
    ]
    if promoter-strength = "reference" [
      set pcolor item 2 promoter-color-list
    ]
    if promoter-strength = "weak" [
      set pcolor item 3 promoter-color-list
    ]
  ]
  ask operator [
    set pcolor orange
  ]
  ask rbs [
    if rbs-strength = "strong" [
      set pcolor item 0 rbs-color-list
    ]
    if rbs-strength = "medium" [
      set pcolor item 1 rbs-color-list
    ]
    if rbs-strength = "reference" [
      set pcolor item 2 rbs-color-list
    ]
    if rbs-strength = "weak" [
      set pcolor item 3 rbs-color-list
    ]
  ]
  ask lacZ-gene [
    set pcolor gene-color
  ]
   ask terminator [
    set pcolor gray
  ]
  set non-dna patches with [pcolor = white]
end 

to add-proteins        ;; part of the setup procedure to create and randomly place proteins inside the cell
  create-lacIs lacI-number [
    setxy random-xcor random-ycor
    set inhibitor? false
    set partner nobody
    setshape
  ]
  create-RNAPs RNAP-number [
    setxy random-xcor random-ycor
    set on-dna? false
    setshape
  ]
end 

to setshape        ;; a procedure to set shapes of the molecules
  if breed = LacIs
  [ set size 10
    ifelse partner = nobody
    [ set shape "laci"]
    [ set shape "laci-onpg-complex" set size 10 ]
  ]
  if breed = RNAPs
    [ set size 6
      set shape "RNAPol"
      set color brown]
  if breed = ONPGs
    [
      ifelse partner = nobody
      [
        set shape "pentagon"
        set color gray
        set hidden? false
      ]
      [
        set hidden? true
      ]
    ]
   if breed = LacZs
   [ set shape "protein"
     set color red
     set size 6]
end 

to go-lacIs
   ;; If there is a LacI at the operator, set the transcription is inhibited.
  if not inhibited? [
    ask LacIs with [ member? patch-ahead 2 operator and partner = nobody] [
      set inhibitor? true
      set inhibited? true
      set heading 0
      setxy -23 6
    ]
  ]

ask LacIs with [inhibitor?] [
  if (random-float 10 < lacI-bond-leakage) [
    set inhibitor? false
    set inhibited? false
    fd 3
  ]
]
  ask LacIs with [not inhibitor?] [
   random-walk
  ]

  ask LacIs [
    if partner != nobody [ stop ]
    set partner one-of (other ONPGs-here with [partner = nobody])
    if partner = nobody [ stop ]
    if [partner] of partner != nobody [ set partner nobody stop ]  ;; just in case two lacIs grab the same partner
    ifelse random-float 1 < complex-formation-chance
      [ ask partner [ set partner myself ]
        setshape
        ask partner [ setshape ]
        if (inhibitor?) [
          set inhibited? false
          set inhibitor? false
          fd 1
        ]
      ]
    [set partner nobody]
  ]
end 

to go-RNAPs    ;; If a RNAP is close or on the promoter (green) and the operator is open, change heading and move on the DNA towards the terminator.

if not inhibited? [
  ask RNAPs [
    if promoter-strength = "strong" [
      if member? patch-here promoter or member? patch-ahead 9 promoter [
        start-transcription
      ]
    ]
    if promoter-strength = "medium" [
      if member? patch-here promoter or member? patch-ahead 3 promoter [
        start-transcription
      ]
    ]
    if promoter-strength = "reference" [
      if member? patch-here promoter or member? patch-ahead 2 promoter [
        start-transcription
      ]
    ]
    if promoter-strength = "weak" [
      if member? patch-here promoter or member? patch-ahead 1 promoter [
        start-transcription
      ]
    ]
  ]
]

if any? RNAPS with [on-dna?] [
  ask RNAPs with [on-dna?] [
    fd 1
    if (member? patch-here terminator) [
      set operon-transcribed? true
      set on-dna? false
      rt random-float 360
      set total-transcripts total-transcripts + 1
    ]
  ]
]

ask RNAPs with [not on-dna?] [
  random-walk
]
end 

to start-transcription    ;; a procedure for RNAPs
  setxy xcor 5
  set heading 90
  set on-dna? true
end 

to add-ONPG [ONPG-number]
   create-ONPGs ONPG-number [
    set partner nobody
    setxy random-xcor random-ycor
    setshape
   ]
end 

to go-lacZs
  ask lacZs [
    rt random-float 360
    fd 1
    if count ONPGs-here != 0 [
      if random-float 1 < ONPG-degradation-chance
      [ ask one-of ONPGs-here [ die ]
        set ONPG-degradation-count ONPG-degradation-count + 1
      ]
    ]
  ]
end 

to go-ONPGs
  ask ONPGs [
    random-walk
  ]
end 

to recolor-patches  ;; Change the color of the cell based on ONPG degradation
  ask non-dna [
    set pcolor scale-color yellow ( 1000 - ONPG-degradation-count ) 0 1000
  ]
end 

to dissociate-complex  ;; Dissociate the LacI-ONPG complex
  ask LacIs with [partner != nobody] [
    if random-float 1 < complex-separation-chance [
    let temp-x xcor
    let temp-y xcor
    ask partner [
      set partner nobody
      setxy temp-x temp-y
      setshape
      fd 1
    ]
    set partner nobody
    setshape
    fd -1
   ]
  ]
end 

to degrade-LacZ
  ask LacZs [
    if random-float 1 < LacZ-degradation-chance [
      die
    ]
  ]
end 

to-report number-of-transcripts-per-tick
  report precision ( total-transcripts / ticks * 1000 ) 1
end 

to-report number-of-proteins-per-tick
  report precision ( total-proteins / ticks * 1000 ) 1
end 

There are 2 versions of this model.

Uploaded by When Description Download
Sugat Dabholkar over 8 years ago Added the link to access the model on web Download this version
Sugat Dabholkar over 8 years ago Initial upload Download this version

Attached files

File Type Description Last updated
Genetic Switch - Synthetic Biology Extension.png preview Preview for 'Genetic Switch - Synthetic Biology Extension' over 8 years ago, by Sugat Dabholkar Download

This model does not have any ancestors.

This model does not have any descendants.