Enzyme Kinetics

No preview image

1 collaborator

Images George Dombi (Author)

Tags

(This model has yet to be categorized with any tags)
Child of model Cinetica Enzimatica preview imageCinetica Enzimatica
Model group CineticaQB | Visible to everyone | Changeable by group members (CineticaQB)
Model was written in NetLogo 5.0.5 • Viewed 517 times • Downloaded 26 times • Run 0 times
Download the 'Enzyme Kinetics' 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

;; First English version of simulator

breed [ enzimas enzima]           ;; agentes rojos que se unen y catalizan el sustrato
breed [ sustratos sustrato ]      ;; agentes verdes que se unen a la enzima y pueden reaccionar
breed [ inhibidores inhibidor ]   ;; agentes amarillos que se unen a la enzima pero no pueden reaccionar
breed [ productos producto ]      ;; agentes azules que se generan a partir de la interaccion sustrato-enzima


turtles-own [
  companiero  ;;correposnde al nombre del otro agente del complejo o a "nobody" si no esta acomplejado
]

;;definicion de variables, se incluyen las variables globales definidas por interfaz
globals [
  sustrato-inicial ;; guarda la concentracion de sustrato inicial de cada corrida (para grafico de MM)
  v                ;; tasa de formacion de producto  
  K1               ;; constante de asociacion de enzima y sustrato
  K2               ;; constante de disociacion de complejo ES en enzima y sustrato
  K3               ;; constante de disociacion de complejo ES en enzima y producto
  Kia              ;; constante de asociacion del inhibidor
  Ki               ;; constante de disociacion del inhibidor
  n                ;; cantidad de repeticiones de cada corrida para una concentracion de sustrato
  ind              ;; indice para contar la cantidad de iteraciones del ciclo de repeticiones que lleva hechas
  ;Conc-sustrato   ;; concentracion de sustrato para PvsT
  sustrato-conv    ;; concentracion de sustrato para PvsT convertido a cantidad de moleculas
  ;Tipo-inhibidor  ;; Ninguno, Inhibidor A o Inhibidor B (reversibles)

  cantidad-enzimas ;; cantidad de enzimas
  
  Sustrato-inicial-min-conv ;; concentracion de sustrato inicial para MM convertido a cantidad de moleculas
  escalon-orden1            ;; cantidad de concentraciones de sustrato que se toman para la primera parte de MM
  sustrato-inicial-ordenm   ;; cantidad de sustrato a partir de la cual se hace el segundo escalonado
  escalon-ordenm            ;; cantidad de concentraciones de sustrato que se toman para la parte media de MM
  sustrato-inicial-orden0   ;; cantidad de sustrato a partir de la cual se hace el tercer escalonado
  escalon-orden0            ;; cantidad de concentraciones de sustrato que se toman para la ultima parte de MM
  sustrato-inicial-max-conv ;; concentracion de sustrato final para MM convertido de concentracion a cantidad de moleculas

  ;Conc-inhibidor       ;; concentracion de sustrato para MM
  inhibidor-conv        ;; concentracion de sustrato para MM convertida a cantidad de moleculas
  ;Minutos-por-corrida  ;; cantidad maxima de ticks para una corrida de MM
  max-minutos           ;; cantidad maxima de ticks para una corrida de PvsT
]

;;seteo de variables FIJO para una enzima y dos inhibidores determinados

to set-variables
  set cantidad-enzimas 10000
  set K1 40
  set K2 90
  set K3 15
  set Kia 5
  if Tipo-inhibidor = "Inhibidor A"[
    set Ki 90
    set inhibidor-conv Conc-inhibidor * 1E5]
  if Tipo-inhibidor = "Inhibidor B"[
    set Ki 5
    set inhibidor-conv Conc-inhibidor * 1E5]
  set n 1                                 ;; FIJO para hacer solo una repeticion de cada corrida
  set sustrato-conv Conc-sustrato * 1E5
  set Sustrato-inicial-min-conv Sustrato-inicial-min * 1E5
  set escalon-orden1 8                    ;; puntos en el orden 1, antes de Km
  set sustrato-inicial-ordenm 0.2 * 1E5   ;; tomamos orden1 hasta este valor FIJO
  set escalon-ordenm 6                    ;; puntos en el orden mixto
  set sustrato-inicial-orden0 0.6 * 1E5   ;; tomamos orden mixto hasta este valor FIJO
  set escalon-orden0 3                    ;; puntos en el orden 0
  set sustrato-inicial-max-conv 1.5 * 1E5 ;; FIJO asi no son demasiadas moleculas
  set max-minutos 30                      ;; FIJO asi no no dejan correr por demasiado tiempo
end 

;; procedimiento del observador para agregar moleculas a la reaccion

to add [tipo cantidad]
  crt cantidad
    [ set breed tipo
      setxy random-xcor random-ycor
      set companiero nobody
      setshape ]
end 

;; procedimiento para asignar formas, colores y comportamiento (escondido o no) a los agentes,
;; segun corresponde segun su estado.

to setshape
  ifelse breed = enzimas
    [ set color red
      ifelse companiero = nobody
        [ set shape "enzyme" ]
        [ ifelse ([breed] of (companiero) = sustratos)
            [ set shape "complex" ]
            [if Tipo-inhibidor != "Ninguno"
              [set shape "inhib complex rev"] ] ]]
    [ ifelse breed = sustratos
        [ set color green
          set shape "substrate"
          set hidden? (companiero != nobody) ]
        [ ifelse breed = inhibidores
            [ set color yellow
              set shape "inhibitor rev"
              set hidden? (companiero != nobody) ]
            [ if breed = productos
                [ set color pink + 4
                  set shape "substrate"
                  set hidden? false ] ] ] ]
end 

;; procedimiento base del modelo

to go
  ask turtles [ move ]
  ask enzimas [ form-complex ]        ;; las enzimas pueden formar complejo con un sustrato o un inhibidor
  ask sustratos [ react-forward ]     ;; los sustratos acomplejados pueden convertirse en producto
  ask enzimas [ dissociate ]          ;; o los complejos pueden simplementerte desacomplejarse
end 

;; procedimiento del observador para setear PvsT

to setearPvsT
  set-patch-size 13.56                       ;; garantiza que se corra siempre con el mismo tamano, sin importar si el usario modifico el mundo
  resize-world -12 12 -12 12                 ;; garantiza que se corra siempre con el mismo tamano, sin importar si el usario modifico el mundo
  clear-all
  set-variables
  set sustrato-inicial sustrato-conv
  set v 0
  add enzimas cantidad-enzimas
  add sustratos sustrato-conv         ;; corre con concentracion de sustrato segun slider
  reset-ticks
  output-print (word "[S] = " (sustrato-inicial * 1E-5) " M")  ;; esta seccion saca por terminal las condiciones experimentales
  output-type "\n"
  output-type "t"                     ;; esta seccion le pone titulos a las columnas de la terminal de salida
  output-type "\t"
  output-type "[P]"
  output-type "\n"
  output-type "(min)"
  output-type "\t"
  output-type "(µmoles)"
  output-type "\n"
end 

;; procedimiento principal para PvsT

to correrPvst
  if ticks > max-minutos 
  [ user-message ("Terminó de correr P(t). Podés copiar los resultados de la Terminal de salida o exportarlos con el botón \"Exportar datos\". La primera columna corresponde a t (min) y la segunda, a [P] (µmoles).")
    clear-ticks
    stop ]
  go
  do-Pvst-plot
  output-type ticks                   ;; esta seccion imprime a la terminal de salida
  output-type "\t"
  let numeroSinComa precision ((count productos) * 1E-2) 2   ;; esta seccion cambia numeros con punto decimal a coma decimal
  ;; output-type numeroSinComa               ;; descomentar esta linea y comentar la linea de abajo para pasar los números a punto decimal
  output-type (word int(numeroSinComa) "," precision (((numeroSinComa - int(numeroSinComa)) * 100)) 2)
  output-type "\n"
  tick
end 

;; procedimiento de agentes para moverse

to move
   fd 1
   rt random-float 360
end 

;; procedimiento de enzimas para formar complejos cuando se encuentra en 
;; la misma parcela que un sustrato o un inhibidor. Cuando se encuentra con un 
;; sustrato, se acompleja con porcentaje K1 y, con un inhibidor, con Kia.

to form-complex
  if companiero != nobody [ stop ]
  set companiero one-of (other turtles-here with [companiero = nobody])
  if companiero = nobody [ stop ]
  if [companiero] of companiero != nobody [ set companiero nobody stop ]  ;; por las dudas que dos enzimas elijan el mismo companiero
  ifelse ((([breed] of companiero) = sustratos) and ((random-float 100) < K1))
     or (([breed] of companiero) = inhibidores and (Tipo-inhibidor = "rev-comp") and ((random-float 100) < Kia))
     or (([breed] of companiero) = inhibidores and (Tipo-inhibidor = "irrev"))
    [ ask companiero [ set companiero myself ]
      setshape
      ask companiero [ setshape ] ]
    [ set companiero nobody ]
end 

;; procedimiento de sustratos acomplejados para formar producto
;; y que este sea liberado de la enzima, con porcenaje K3

to react-forward
  if (companiero != nobody) and (random-float 100 < K3)
    [ set breed productos
      ask companiero [ set companiero nobody ]
      let companiero-anterior companiero
      set companiero nobody
      setshape
      ask companiero-anterior [ setshape ] ]
end 

;; procedimiento de enzimas para disociar complejos:
;; ocurre con pocentaje K2 si el companiero es sustrato o con Ki si es inhibidor

to dissociate
  if companiero != nobody
    [ if (([breed] of companiero = sustratos) and (random-float 100 < K2)) or
      (([breed] of companiero) = inhibidores and (Tipo-inhibidor = "rev-comp") and ((random-float 100) < Ki))
      [ ask companiero [ set companiero nobody ]
        let companiero-anterior companiero
        set companiero nobody
        setshape
        ask companiero-anterior [ setshape ] ] ]
end 

;; procedimiento para calcular la velocidad tomando la cantidad de productos desacomplejados
;; (asume que al comienzo de cada corrida la cantidad de productos es cero)

to calculate-velocity
  let current-conc count productos with [companiero = nobody]
  if ticks > 0
    [ set v (current-conc * 1E-5) / ticks ]
end 

;; procedimientos para graficar
;; grafica concentracion de productos en funcion del tiempo para curva de PvsT

to do-Pvst-plot
  set-current-plot "P(t)"
  plot (count productos) * 1E-2
end 

;; grafica concentracion de sustrato inicial en funcion de velocidad para curva de MM

to do-mm-plot
  set-current-plot "Curva Michaelis-Menten"
  plotxy (sustrato-inicial * 1E-5) (v * 1E3)
end 

;; grafica las inversas de MM

to do-imm-plot
  set-current-plot "Lineweaver-Burk"
  if (sustrato-inicial > 0 and v > 0)
  [ plotxy (1 / (sustrato-inicial * 1E-5)) (1 / (v * 1E3)) ]
end 

;; procedimiento del observador para setear MM

to setearExperimento
  no-display                               ;; logra que corra mas rapido el modelo
  set-patch-size 13.56                     ;; garantiza que se corra siempre con el mismo tamano, sin importar si el usario modifico el mundo
  resize-world -12 12 -12 12               ;; garantiza que se corra siempre con el mismo tamano, sin importar si el usario modifico el mundo
  clear-all
  set-variables
  if (Sustrato-inicial-min <= 0.0 or Sustrato-inicial-min > 1.6 or Minutos-por-corrida <= 0.0 or Minutos-por-corrida > 20)[
    user-message ("Verificá la concentración de sustrato inicial mínima y los minutos por corrida: no pueden ser cero y, además, deben estar en un rango aceptable (para las concentraciones, hasta 1.6 M y para el tiempo, 20 minutos).")
    stop]
  set sustrato-inicial Sustrato-inicial-min-conv
  reset-ticks
  output-print (word "Mínima conc. de sustrato inicial = " sustrato-inicial-min " M") ;; esta seccion saca por terminal las condiciones experimentales
  output-print (word "Tiempo de cada corrida = " minutos-por-corrida " min")
  output-print word "Tipo de inhibidor: " tipo-inhibidor
  if tipo-inhibidor != "Ninguno" [
    output-print (word "Conc. de inhibidor = " conc-inhibidor " M")]
  output-type "\n"
  output-type "1/[S]"                      ;; esta seccion le pone titulos a las columnas de la terminal de salida
  output-type "\t"
  output-type "1/V"
  output-type "\n"
  output-type "(1/M)"
  output-type "\t"
  output-type "(min/nmoles)"
  output-type "\n"
end 

;; procedimiento principal para MM

to correrExperimento                                   
  if (Sustrato-inicial-min <= 0.0 or Sustrato-inicial-min > 1.6 or Minutos-por-corrida <= 0.0 or Minutos-por-corrida > 20)[
    user-message ("Verificá la concentración de sustrato inicial mínima y los minutos por corrida y volvé a armar MM.")
    clear-ticks
    stop]
  if sustrato-inicial > sustrato-inicial-max-conv [
    user-message ("Terminó de correr el experimento de MM. Podés copiar los resultados de la Terminal de salida o exportarlos con el botón \"Exportar datos\". La primera columna corresponde a 1/[S] (1/M) y la segunda, a 1/V (min/nmoles).")
    clear-ticks
    stop]
  
  clear-turtles                          ;; borra la vista pero mantiene los graficos de MM
  set-current-plot "P(t)"                ;; reinicia grafico de Pvst para cada corrida
  clear-plot
  set v 0
  add enzimas cantidad-enzimas
  add sustratos sustrato-inicial         ;; agrega sustrato segun "sustrato-inicial" (la primera vez vale "Sustrato-inicial-min-conv")
  add inhibidores inhibidor-conv         ;; agrega una concentracion constante de inhibidor
   while [ticks < Minutos-por-corrida] [  ;; corrida de P(t) tal como el procedimiento go
    go
    calculate-velocity
    do-Pvst-plot                         ;; grafica Pvst en cada tick de cada corrida de MM
    tick]
  do-mm-plot                             ;; grafica MM en cada corrida
  do-imm-plot                            ;; grafica inversas de MM en cada corrida
      
  ;; a partir de aca, esta seccion imprime a la terminal de salida 
  let xSinComa precision (1 / (sustrato-inicial * 1E-5)) 2  ;; esta seccion cambia numeros con punto decimal a coma decimal
  ;; output-type xSinComa               ;; descomentar esta linea y comentar la linea de abajo para pasar los números a punto decimal
  output-type (word int(xSinComa) "," precision (((xSinComa - int(xSinComa)) * 100)) 2)
  output-type "\t"
  let ySinComa precision (1 / (v * 1E3)) 2  ;;esta sección cambia numeros con punto decimal a coma decimal
  ;; output-type ySinComa               ;; descomentar esta linea y comentar la linea de abajo para pasar los números a punto decimal
  output-type (word int(ySinComa) "," precision (((ySinComa - int(ySinComa)) * 100)) 2)
  output-type "\n"
  reset-ticks

  ;; incremento escalonado de concentracion inicial de sustrato
  ;; para orden1, primera parte de la curva (hasta el inicio de ordenm), tomamos escalon-orden1 escalones
  ifelse sustrato-inicial < sustrato-inicial-ordenm
    [set sustrato-inicial sustrato-inicial + ((sustrato-inicial-ordenm - Sustrato-inicial-min-conv) / escalon-orden1)]
    [ifelse sustrato-inicial > sustrato-inicial-orden0 [
        ;; para orden0, ultima parte de la curva (a partir de sustrato-inicial-max), tomamos escalon-orden0 escalones
        set sustrato-inicial sustrato-inicial + ((sustrato-inicial-max-conv - sustrato-inicial-orden0) / escalon-orden0)][
        ;; para orden mixto, parte media de la curva (hasta el inicio de orden0), tomamos escalon-ordenm escalones
        set sustrato-inicial sustrato-inicial + ((sustrato-inicial-orden0 - sustrato-inicial-ordenm) / escalon-ordenm)]]
end 

to export-data
   user-message ("Elegí una ubicación y un nombre de archivo. Si en el directorio ya existe un archivo con ese nombre, se sobrescribirá.")
   let direccion user-new-file
   if is-string? direccion     ;; verifica que se obtuvo un string, en caso de que el usuario haya cancelado
   [if file-exists? direccion
     [ file-delete direccion ] ;; elimina el archivo si este ya existe en la ubicación elegida
     export-output word direccion ".xls"
     user-message (word "Se generó el archivo en " direccion ".xls. Podés abrirlo con una hoja de cálculo.\nLos datos de la primera columna corresponden a las x y los de la segunda, a las y.")
   ]
end 

; Copyright 2001 Uri Wilensky.
; See Info tab for full copyright and license.

There is only one version of this model, created over 10 years ago by George Dombi.

Attached files

No files

Parent: Cinetica Enzimatica

This model does not have any descendants.

Graph of models related to 'Enzyme Kinetics'