Alzheimers_Buildup

No preview image

1 collaborator

Default-person Grace Schwarz (Author)

Tags

alzheimers 

Tagged by Grace Schwarz over 5 years ago

disease 

Tagged by Grace Schwarz over 5 years ago

human health 

Tagged by Grace Schwarz over 5 years ago

neurophysiology/medicine 

Tagged by Grace Schwarz over 5 years ago

proteins 

Tagged by Grace Schwarz over 5 years ago

waste 

Tagged by Grace Schwarz over 5 years ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.0.3 • Viewed 454 times • Downloaded 67 times • Run 0 times
Download the 'Alzheimers_Buildup' 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

globals [CellState]                                                       ;; keep track of CellState

Breed [NFT a-NFT ]
NFT-own [energyNFT]                                                       ;; AB, NFT, and APOE2 are all breeds of turtle.

Breed [ AB a-AB ]
AB-own [energyAB]

Breed [ APOE APOEsingle]
APOE-own [energyAPOE birth]

patches-own [countdown dead ]

to setup
  clear-all

  ask patches [
    set countdown DiseaseProgression ]                                    ;; initialize CellState to set parameter

  set-default-shape NFT "circle"
  create-NFT NFT-buildup [                                                ;; create the NFT, then initialize their variables
    set color magenta
    set size 2.3                                                          ;; NFT can be up to 441 amino acids long (Sontheimer, 2015), using the 352 isoform, 352/150 = 2.3
    set label-color magenta - 2
    set energyNFT 50
    setxy random-xcor random-ycor ]

  set-default-shape AB "circle"
  create-AB AB-buildup [                                                  ;; create the AB, then initialize their variables
    set color blue
    set size .5                                                           ;; AB is up to 51 amino acids long (Olsson, 2014), 51/200 = .333, round up to .5
    set label-color blue - 2
    set energyAB 50
    setxy random-xcor random-ycor ]

  set-default-shape APOE "square"
  create-APOE Inital-APOE [                                               ;; create the APOE, then initialize their variables
    set color red
    set size 2                                                            ;; APOE is 299 amino acids long  (Phillips, 2014), 299/150 = 2
    set energyAPOE 100
    setxy random-xcor random-ycor ]

  reset-ticks
end 

to go
  if not any? APOE [ stop ]                                               ;; Humans require APOE for survival
  if (((count patches with [pcolor = green]) * 100)/(count patches) < %LiveRequired? ) [ stop]  ;; Humans require live cells

  ask NFT [                                                               ;; NFT is intracellular, does not move, does not lose energy
    task-CellState
    transcribe-NFT ]

  ask AB [
    move
    set energyAB energyAB - .25                                           ;; AB loses energy as it moves
    task-CellState
    transcribe-AB ]

  ask APOE [
    move
    set energyAPOE energyAPOE - 1                                         ;; APOE requires more energy than AB to move, larger
    set birth 1
    catch
    deathAPOE
    transcribe-APOE ]

  ask patches [ grow-CellState ]                                          ;; run procedure to allow regrowth of Cell health

  tick
end 

to move                                                                   ;; turtle moving around procedure
  rt random 100
  lt random 100
  fd 1
end 

to task-CellState                                                         ;; task CellState
  ask NFT-here [
    if pcolor = green [
    set pcolor brown                                                      ;; turn the cell brown, indicating cell recovering from task performed
    set energyNFT energyNFT + 5                                           ;; NFT and AB gain energy by performing tasks on each cell
      if energyNFT < 0 and pcolor = brown [ die ] ] ]                     ;; if NFT or AB run out of energy on an already unhealthy cell, die

  ask AB-here [
    if pcolor = green [                                                   ;; same thing, for AB
    set pcolor brown
    set energyAB energyAB + 100
      if energyAB < 0 and pcolor = brown [ die ] ] ]
end 

to catch
 let preyAB one-of AB-here                                                ;; AB procedure, grab a random AB
  if (preyAB != nobody)                                                   ;; did we get one? if so,
  [ if (APOE-Variant = "APOE2" ) and (random-float 50 < AB-Transcription-Level ) ;; APOE2 has better odds of binding than APOE3 or APOE4
     [ ask preyAB [ die ]                                                 ;; kill it
      set energyAPOE energyAPOE + 50 ]                                    ;; get energy from breaking down AB

    if (APOE-Variant = "APOE3" ) and (random-float 75 < AB-Transcription-Level )
      [ ask preyAB [ die ]                                                ;; APOE3 and APOE4 are progressively worse at binding AB, get less energy from it
      set energyAPOE energyAPOE + 35 ]

    if (APOE-Variant = "APOE4" ) and (random-float 100 < AB-Transcription-Level )
      [ ask preyAB [ die ]                                                ;; APOE3 and APOE4 are progressively worse at binding AB, get less energy from it
      set energyAPOE energyAPOE + 20 ] ]                                  ;; APOE3 and APOE4 allow higher levels of waste accumulation

  if count AB > 1                                                         ;; APOE only acts on NFT when AB is present (Farfel, 2016)
   [let preyNFT one-of NFT-here                                           ;; same as above for NFT
    if (preyNFT != nobody)
  [ if (APOE-Variant = "APOE2" ) and (random-float 50 < NFT-Transcription-Level )
     [ ask preyNFT [ die ]
      set energyAPOE energyAPOE + 50 ]

    if ( APOE-Variant = "APOE3" ) and (random-float 75 < NFT-Transcription-Level )
    [ ask preyNFT [ die ]
      set energyAPOE energyAPOE + 35 ]

    if (APOE-Variant = "APOE4" ) and (random-float 100 < NFT-Transcription-Level )
    [ ask preyNFT [ die ]
        set energyAPOE energyAPOE + 20 ] ] ]
end 

to transcribe-NFT                                                          ;; NFT procedure
  if count AB > 1   [                                                      ;; AB cascade hypothesis (Jack, 2011)
    if random-float 100 < ( NFT-Transcription-Level / 25 ) [               ;; throw "dice" to see if you will transcribe
      set energyNFT (energyNFT / 2)                                        ;; divide energy between parent and offspring
        hatch 1 [ rt random-float 360 fd 3 ] ] ]                           ;; hatch an offspring and move it forward 5 steps
end 

to transcribe-AB                                                           ;; AB procedure
  if random-float 50 < ( AB-Transcription-Level / 25 ) [                   ;; throw "dice" to see if you will transcribe, odds are better to compensate for NFT being larger/more accessible to APOE
    set energyAB (energyAB / 2)                                            ;; divide energy between parent and offspring
      hatch 1 [ rt random-float 360 fd 1 ] ]                               ;; hatch an offspring and move it forward 1 step
end 

to transcribe-APOE                                                         ;; APOE procedure
  ifelse ( count APOE < ( count NFT + count AB) ) [                        ;; transcribe more APOE only if NFT and AB levels are too high
     if (random-float 100 < ( APOE-Transcription-Level / 25 ))             ;; throw "dice" to see if you will transcribe
     [set energyAPOE (energyAPOE / 2)                                      ;; divide energy between parent and offspring
      hatch 1 [ rt random-float 360 fd 1]                                  ;; hatch an offspring and move it forward 1 step
      if pcolor = green
       [set pcolor brown
          set energyAPOE energyAPOE + 5 ] ] ]                              ;; APOE gets energy from cell as it is transcribed, takes cell's health for itself

     [ die ]                                                               ;; if ( APOE > NFT + AB) too much APOE already, cells will degrade APOE not produce more
end 

to deathAPOE                                                               ;; APOE procedure when energy dips, die
  if APOE-Variant = "APOE2" [ if energyAPOE < 0 [ die ]  ]                 ;; APOE2 is the baseline
  if APOE-Variant = "APOE3" [ if energyAPOE < 5 [ die ]  ]                 ;; APOE3 and APOE4 are worse adapted to survival, die faster
  if APOE-Variant = "APOE4" [ if energyAPOE < 10 [ die ]  ]
end 

to grow-CellState                                                          ;; countdown on brown patches: if reach 0, grow some CellState
    if pcolor = brown [
      ifelse countdown <= 0
        [ set pcolor green
          set countdown DiseaseProgression ]
        [   if APOE-Variant = "APOE2" [ set countdown countdown - 10 ]     ;; APOE2 is the baseline, cell recover faster
            if APOE-Variant = "APOE3" [ set countdown countdown - 5  ]     ;; APOE3 and APOE4 are harder on the cells, cells take longer to recover
            if APOE-Variant = "APOE4" [ set countdown countdown - 1  ] ] ]
end 

to color-patches                                                           ;; sets the disease state - user inputs how 'healthy' the tissue begins
         let InitalLivePatches (100 - DiseaseProgression)
         let total InitalLivePatches + DiseaseProgression
         let p-green InitalLivePatches / total
         let p-brown DiseaseProgression / total
      ask patches [
         let x random-float 1.0
         if x <= p-green + p-brown [ set pcolor green]
         if x <= p-brown [ set pcolor brown] ]
end 

There are 9 versions of this model.

Uploaded by When Description Download
Grace Schwarz over 5 years ago Improved accuracy to in vivo Download this version
Grace Schwarz over 5 years ago solved info tab issue Download this version
Grace Schwarz over 5 years ago Reverted to older version Download this version
Grace Schwarz over 5 years ago Reverted to older version Download this version
Grace Schwarz over 5 years ago test info layout Download this version
Grace Schwarz over 5 years ago Reverted to older version Download this version
Grace Schwarz over 5 years ago Information formatting Download this version
Grace Schwarz over 5 years ago change initializing variables Download this version
Grace Schwarz over 5 years ago Initial upload Download this version

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.