SPIRALL

SPIRALL preview image

6 collaborators

Default-person Rekha Warrier (Author)
Default-person Pat Keys (Advisor)
Patrick Keys (Advisor)
Randall Boone (Domain expert)
Woody Turner (Team member)
Keith Gaddis (Team member)

Tags

sustainability 

Tagged by Rekha Warrier about 4 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 6.1.1 • Viewed 275 times • Downloaded 21 times • Run 0 times
Download the 'SPIRALL' modelDownload this modelEmbed this model

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


Comments and Questions

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

Click to Run Model

extensions [gis matrix profiler csv]

globals [
zones-dataset land-cover pop-density npp market                      ;; GIS datasets (FEWS livelihood zones, ESA-CCI land cover, GridPop, Simulated Npp,
county pa grain npp_new                                              ;; County Sape file Kenya, Cell-size, Output raster name
;max_cat max_cam                                                     ;; Max stocking density for cattle and camel when HSI = 1
PA_patch                                                             ;; A variable related to setting up PA access scenarios
cat_age cat_wt_age cam_age cam_wt_age
sh_age sh_wt_age gt_age gt_wt_age
cat-breed cat-milk                                                   ;; Breeding and milking schedule for cattle
shoat-breed shoat-milk                                               ;; Breeding and milking schedule for shoats
cam-breed cam-milk                                                   ;; Breeding and milking schedule for camels
;cat_energy cam_energy sh_energy gt_energy                            ;; Energy content in MJ of 1 kg of forage consumed by livestock species
cat-rep-rate sht-rep-rate cam-rep-rate                               ;; Monthly reporductive probability for cattle, shoats and camel
m_harvest                                                            ;; maize harvest calendar
cat_pool sh_pool gt_pool cam_pool                                    ;; Preference for a biomass pool relative to other livestock species
TLU                                                                  ;; Livestock specific TLU values [catttle sheep goat camel]
ca_calf_dr cam_calf_dr sh_lambs_dr gt_kids_dr                        ;; Death rate for calves (cattle, camel) , lambs and kids
hh_ae mem_calreq                                                     ;; Adult equivalents, Calorie requirements for each age-sex class
milk_prod meat_prod_cat cam_milk_prod shoat_milk_prod                ;; Monthly milk and meat production by cattle camel and shoats
opportunistic_slaughter                                              ;; Monthly probability that a steer will be slaughtered
milk_cal_cow milk_cal_cam milk_cal_gt milk_cal_sh                    ;; Calories from cattle, camel, goat and sheep
meat_cal non-maize_cal maize_cal sug_cal                             ;; calories from meat, non-maize sources, maize and sugar
income_catcam income_shoat                                           ;; Sources of income
exp_food exp_gen exp_vet                                             ;; Sources of expenses
cattle-total camel-total sheep-total goat-total                      ;; Population sizes, of cattle, camel , sheep and goats
drop-outs  hungry                                                    ;; Total number of households in each month, that have lost all assets (livestock)
hungry_turk hungry_bar hungry_wp hungry_sam  hungry_isi  hungry_lai hungry_mar hungry_man  hungry_waj hungry_gar hungry_tr  hungry_lam hungry_kaj hungry_nar
R month m_days                                                       ;; Total number of months to simulate; variable converting ticks to months
cat-dr cam-dr sh-dr gt-dr]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

breed [hholds hhold]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

patches-own [
Kenya zone  cov  den  p_prop protect   ;; patches in Kenya, livelihood zone id, landcover category patch human density
tribe mark  nomad                      ;; County id stand in for tribe id , market access, proportion nomadic in the patch
cattle sheep goat camel farm           ;; Mean number of cattle, sheep, goat and camel within livelihood zones; Is patch a farming area or not.
HSI_herb HSI_browse stock_den cam_den  ;; Habitat suitability for livestock, habitat suitability of a patch based on browse availability, stocking density based on HSI,
CAT-T cam-T                            ;; Counter for total number of cattle and camel on patch
forage_cat forage_browse               ;; Total available forage for cattle and sheep and total available browse for goats and camels
cat-per-pools sh-per-pools            ;; The fraction of each biomass pool available to each species weighted by TLU and biomass preferences
gt-per-pools cam-per-pools             ;;  These four lists are calculated each month based on changing compositions of
cons browse_cons                       ;; Counter for forage consumed by cattle and sheep (cons) and goat and camels (browse_cons)
percap_forage percap_browse            ;; Per capita browse available to each livestock species ; cattle and sheep (percap_forage) camel and goats (percap_browse)
cattle-forage sheep-forage
goat-forage camel-forage
percap_cattle percap_shp               ;; Forage available per head of cattle and sheep on each patch
percap_cam percap_gt                   ;; Forage available per head of camel and goats on each patch
cons_cat cons_sh cons_cam cons_gt      ;; Forage consumed each month on each patch by each species
green_herb dead_herb                   ;; Green and dead herb biomass from Lrange
green_shrub dead_shrub shrub_brnch     ;; Green, dead and branch biomass for shrubs from LRange
green_tree dead_tree tree_brnch        ;; Green, shrub and branch biomass for trees from LRange
greenH deadH greenS deadS brnchS       ;; Holding variables for different biomass pools from L-Range
greenT deadT brnchT                    ;; These are used for tracking changes in biomass and calculating fraction forage grazed.
liv_prop camels                        ;; The fraction of total herbivore biomass on a patch that is made up of livestock (from Ogutu et al ., 2018)
hunger                                 ;; Proportion of households on patch that are food deficient



]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

hholds-own [

nonsed occ agrop                                                         ;; nomadic status, occupation, agropastoralist
hm_patch my-tribe                                                        ;; Patch where houseolds are located at the start of ths simulaton and where they should return in the monsoon season
past_type move-stat grazing_land                                         ;;Type of pastoralist (spliiter or non-splitter); Pasture where splitter herds graze
move-cost                                                                ;; Cost associated with movement
;cat gt shp cam                                                          ;; matrix holding cattle,shoat and camel age-sex classes

cam_aM cam_aF cam-tot cam_aM_wt cam_aF_wt                                ;; camel holding variables : number of maes, females, total, wts of males and females
cam_aF_ag cam_aM_ag cam_fem_lact                                         ;; Ages of males and females, id of lactating females
cam_calves cam_calves_ag cam_tot_wt                                      ;; Total calves, calf age and total camel wt
dead-camF dead-camM camel-owner                                          ;; Counter for dead camels; Identifier if household traditionally holds camels


ca_calves ca_calves_ag ca_aF ca_aM cat-tot                               ;; Cattle holdings variables (# calves,post weaning individuals (ca_af, ca_am), total cattle
ca_aF_wt ca_aM_wt ca_tot_wt  fem_lact                                    ;; Cattle wt  tracker for each age-sex class except calves. id of lactating ind
ca_aF_ag ca_aM_ag dead-caF dead-caM                                      ;; Cattle age tracker for each age-sex class; Counter for dead cattle


sh_r sh_e sh-tot sh_r_wt sh_e_wt                                         ;; Sheep holding variables: Number of rams, ewes, total sheep, weights of classes
sh_r_ag sh_e_ag sh_fem_lact                                              ;; Ram and Ewe age, id of lactating ewes
sh_lambs sh_lambs_ag sh_tot_wt dead-she dead-shr                         ;; Total number of lambs, ages and total wt of sheep; counter for dead sheep

gt_b gt_d gt-tot gt_b_wt gt_d_wt                                         ;; Goat holding variables: Number of bucks, kids, total goats, wts of bucks and does
gt_b_ag gt_d_ag gt_fem_lact                                              ;; Ages of bucks and does, id of lactating does
gt_kids gt_kids_ag gt_tot_wt                                             ;; Total number of kids, age of kids, total wt of goats; counter for dead goats
dead-gtb dead-gtd

p_under5 p_6to12 m_13to17 m_older17 f_13to17 f_older17  hh_mem  AE       ;; Household composition (# of individuals in each age-sex class);List of hhold members; Total adult equivalents
hh_tot h_quant
cow-milk cow-meat cal_meat cal_milk tot_calreq_month                     ;; Cow milk and meat production, calories from meat and milk
cal_maize maize food_sufficiency sufficiency-source hunger-stat          ;; Calories in hhold from maize, Maize available at home Food sufficiency category ("Deficient" "Sufficient")
camel-milk sh-milk gt-milk    cal-source                                 ;; Milk from camel, sheep and goat
cash_in_hand maize_purchased                                                             ;; Disposable income with hhold
labour business ag_land  base_income                                     ;; Indicator of whether household engages in labour; business; land owned in ha by pastoral hholds; base monthly income
cal_needs  dead-meat   store_cal  liv_cal                                       ;; Total calorie needs of household; total meat from dead animals; Indicator of purchased calories
dead-meat-ca dead-meat-cam dead-meat-gt dead-meat-sh                     ;; Dead meat from each livestock species
economic_state  assets                                                   ;; Household debt status and Indicator of availability of livestock assets (0 / assetless)
family                                                                   ;; List of households that constitute a social network for a home
TLU-owned  TLU-cap                                                       ;; Livestock owned in TLU
temp_given temp_recieved temp_gift_given temp_gift_recieved              ;; Is milk / gifts given and received between families in a month
gift_given gift_recieved sell                                            ;; Indicator of whether livestock was gifted or sold
milk_recieved milk_given milk_sold                                       ;; Indicator of whether gfit was received or given , milk sold
temp_past_status                                                         ;; Temporary indicator to determine if household has made a movement decision
hh-cam-tot hh-cat-tot hh-cat-lam hh-cam-lam                              ;; A running tally of household camel and cattle holdings
risk  raid-loss raid-tribe                                                          ;; Indicator of whether household is exposed to risk from other ethnic groups
sales_ca purchases_ca sales_cam purchases_cam sales_sht purchases_sht    ;; An indicator of sale and purchase of each livestock species
sales_ca_m purchases_ca_m sales_cam_m purchases_cam_m sales_sht_m        ;; A monthly counter of sales and purchases by households
purchases_sht_m sale_income
reborn                                                                   ;; A household that is assetless is provided some livestock and reenters the simulation
ca_s_tot ca_p_tot cam_s_tot cam_p_tot sht_s_tot sht_p_tot                ;; Total sales and purchases of livestock by each hhold over the course of the simulation
selection
cat_m  cam_m sh_m gt_m
liv_sales_income milk_inc
cal_ava maize_cons
cal_needs1 cal_needs2 cal_needs3
]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup
 clear-all
 ;profiler:start
 load-layers
 load-parms
 load-households
 ;spin-hholds
 set R 12 * years  ; Years is set using a sliding scale in the interface
 reset-ticks
end 

to set-spin
 spin-hholds
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to go
  while [not file-exists? read-from-string bio_out] [wait 1]
  wait 5
  if ticks = R [
    stop
  ]

  reset-hholds     ;; Households that are assetless at the end of the previous month are collected and provided some livestock to reenter the simulation.
  load-forage      ;; Bring input from LRange, calculate habitat suitability
  find-pasture     ;; Make decisions to move depending on stockign density
  ;find-pasture-sedentary-scenario
  deplete-patch    ;; animals forage and deplete biomass on patch.
  grow-herd        ;; Based on froage consumed, weight gain is calculated and body condition scores determiend which determine  monthly survival probabilities
  produce          ;; Livestock reprodcue and produce milk and meat in appropriate months
  calorie-counter  ;; Determine if calorie needs are being met and classify households as Deficient or sufficient
  cash-flow        ;; Tallying of income, expenses, and sales of livestock
  exchange-stock   ;; Goats are exchanged for cattle if herb availability is high.
  gifting          ;; Social interactions maong households pertaining to gifting of livestock and milk.
  wrap-up          ;; Generate summaries and output files.
  ;print-output     ;; write output to csv
  tick
  ;  ]
end 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to load-layers

  ; Note that setting the coordinate system here is optional, as
  ; long as all of the datasets use the same coordinate system.
  ;gis:load-coordinate-system "esa_lc.prj"



  ; Load all spatial datasets
  ;; Load the ESA_CCI land cover dataset for eastern Africa with 10 land cover classes
  set land-cover gis:load-dataset "esa_lc.asc"
  ;; import the gridded population of the world layer..densities will determine distribution of households; This is the population density for the year 2000
  set pop-density gis:load-dataset "pop00.asc"
  ;;Load livelihood zones shape files
  set zones-dataset gis:load-dataset "Lzones_pro.shp" ;; FEWS livelihood zones shapefile with associated zone-spcific attribute table
  ;; Load the market access dataset. Here market access
  set market gis:load-dataset "market_aoi.asc"
  ;; Load the Kenya counties dataset- County boundaries used to define rules of conlflict and cooperation
  set county gis:load-dataset "KE_Admin1_dat.shp"

  ;; Load the protected areas dataset
  set pa gis:load-dataset "eastAF_protected_pro.shp"


  ;; Set the world envelope to the union of all of our dataset's (except pa) envelopes

  resize-world 0 gis:width-of land-cover - 1 0 gis:height-of land-cover - 1 ;; This ensure that the number of patches match those on the input raster layers

  gis:set-world-envelope-ds (gis:envelope-union-of (gis:envelope-of land-cover)
                              (gis:envelope-of pop-density)
                               (gis:envelope-of zones-dataset)
                                (gis:envelope-of county)
                                 (gis:envelope-of market))

;; Determine the patch size from the land cover  .asc files

file-open "esa_lc.asc"
repeat 4 [let skip file-read-line]  ; ignore the first four lines
let ignore file-read-characters 8   ; ignore character string preceding the grain value
set grain file-read  ;;;
file-close
 ;; Display datasets

; Display land-cover datasets
  gis:apply-raster land-cover cov
  let min-cov  1 ;;gis:minimum-of land-cover
  let max-cov 10;;gis:maximum-of land-cover
  ask patches[if(cov > -9999)[
      set pcolor scale-color brown cov min-cov max-cov]]
;0 No data
;1 Trees cover areas
;2 Shrubs cover areas
;3 Grassland
;4 Cropland
;5 Vegetation aquatic or regularly flooded
;6 Lichen Mosses / Sparse vegetation
;7 Bare areas
;8 Built up areas
;9 Snow and/or Ice
;10 Open water

;;; Load and plot pop density dataset

 gis:apply-raster pop-density den
  ; To display population density
  ;let min-den gis:minimum-of pop-density
  ;let max-den gis:maximum-of pop-density
  ;ask patches[
  ;  if (den > -9999)
  ;    [set pcolor scale-color brown den min-den max-den]
  ;]


  ;; Assign attributes to patches depending on the zone they lie in
   ;let i 1
   foreach gis:feature-list-of zones-dataset [feature ->
    ask patches gis:intersecting feature [
      set cattle gis:property-value feature "cattle"      ; Mean number of cattle per household
      set sheep gis:property-value feature "sheep"        ; Mean number of sheep per household
      set goat gis:property-value feature "goats"         ; Mean number of goats per household
      set camel gis:property-value feature "camel"        ; Mean number of camel per household
      set zone gis:property-value feature "LZCODE"        ; zone id
      set farm gis:property-value feature "Crop_sales"    ; Crop sales -  Binary variable divides zones into farming and pastoral areas
      set nomad gis:property-value feature "nomads" ]      ; Proportion of nomads in the llhood zone
     ;set i i + 1
 ]

;; Assign county identity to each patch
;; Display county dataset
  gis:set-drawing-color yellow
  gis:draw county 1
   foreach gis:feature-list-of county [feature ->
    ask patches gis:intersecting feature [
      set tribe gis:property-value feature "ADMIN1"      ; The county name is associated with each patch as a tribe identity
      set liv_prop  (gis:property-value feature "liv_prop") ; Proportion of cattle in herbivore population in county
      ;set camels (gis:property-value feature "camel")   ; Proportion camel
      set p_prop (gis:property-value feature "Past_p")  ; Proportion of pastoral people in county
    ]

 ]


;; Plot protected area dataset
  ask patches [set protect 0]
  gis:set-drawing-color green
  gis:fill pa 1
 foreach gis:feature-list-of pa [feature ->
    ask patches gis:intersecting feature [
      set protect gis:property-value feature "PA"      ; The protection status associated with a patch is set
        ]
      ]


  ;; Assign livestock proportions to patches without data. Set this at 0.8

  ask patches with [liv_prop = 0] [set liv_prop 0.8]

;; Assign Kenya identity to each patch; This is so that we can restrict model to Kenya
  ask patches gis:intersecting zones-dataset [set Kenya 1] ; demarcate what patches are within Kenya

; Apply market datasets
 gis:apply-raster market mark  ; Read in and apply the market access layer
end 

to-report assign-wt [current-age compare-age compare-wt max-age max-wt]
  let ideal-wt []
  foreach current-age [x ->
    ifelse x < max-age
     [let pos position x compare-age
      let id-wt item pos compare-wt
      set ideal-wt lput id-wt ideal-wt]
     [set ideal-wt lput max-wt ideal-wt]
  ]

  report ideal-wt
end 




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Load households based on option set using the chooser (Farmers, Pastoralists, All)

to load-households
                                   ;; Since agents are households and not indivduals, the number of households sprouted is set at about a fifth of the density
ifelse llhood = "all" [            ;; If both farmers and pastoral groups are being simualted
  ask patches [
    if ((cov  = 2) or (cov = 3 ) or (cov = 4))  and (den > -9999) and  kenya = 1 and protect = 0 [
      sprout-hholds ceiling (den * 0.2  * sam_p) [
       set shape "house"
       set color red
       set hm_patch patch-here
          ifelse [cov] of patch-here = 4 and [farm] of patch-here = 1 [set occ "farmer"  set color green] [set occ "pastoralist"]
          set my-tribe [tribe] of patch-here
 ]
  ]
   ]
    ]

  [if llhood = "farmer" [ask patches [  ; only farmers are simulated
    if (cov = 4)  and (den > -9999) and kenya = 1 and farm = 1 and protect = 0 [
      sprout-hholds ceiling (den * 0.2 * sam_p) [
       set shape "house"
       set color red
       set hm_patch patch-here
       set occ "farmer"
        set my-tribe [tribe] of patch-here]
 ]
  ]
    ]

  if llhood = "pastoralist" [ask patches with   ; only pastoralists are simulated
      [((cov = 2) or (cov = 3) or (cov = 4))  and (den > -9999) and kenya = 1 and farm = 0 and p_prop > 0.1 and protect = 0] [

       sprout-hholds ceiling (den  * 0.15 * p_prop * sam_p * pop_fact)  [  ;; Kratli and Swift 2014, Counting pastoralists and hhld size is a little over 5 hence multiply by 0.1; p_prop is pastoral population proportion
       set shape "house"
       set color red
       set hm_patch patch-here
       set occ  "pastoralist"
       set my-tribe [tribe] of patch-here]
 ]
  ]
    ]


; Assign agropastoral status to pastoral households

  ask hholds with [[cov] of patch-here = 4]    ; Agropastoral households are pastoral households on ag land . land holding range from 0.25 Ha to a little under 2 Ha
                  [set agrop 1
                   set ag_land precision ((random-float 1.75) + 0.25) 2]


; Assign non-sedentary status to households that are not agropastoral
  ask hholds with [agrop = 0] [let temp [nomad] of patch-here
    if random-float 1 < temp / 100 [set nonsed 1]]

   ask hholds[
   ;; assign members based on age-sex classification to each household : We will use the age-sex classification from GridPop to inform this if necessary.
   ;; Hholds may thus have a maximum of 10 members and a minimum of 2

   set  p_under5   random 3                ;; members under 5 years of age
   set  p_6to12    random 3                ;; members between 6 and 12 years of age
   set  m_13to17   random 3                ;; male members between 13 and 17 years of age
   set  f_13to17   random 3                ;; female members between 13 and 17 years of age
   set  m_older17  (random 3) + 1          ;; male members older than 17
   set  f_older17  (random 3) + 1          ;; female members older than 17  Ensure that households have at least 1 older male and female.

   set hh_mem (list p_under5 p_6to12 m_13to17 f_13to17 m_older17  f_older17)  ;< 5 , 6-12, 13-17 (m) 13-17 (f) >17 (m) >17 (f)
   set hh_tot sum hh_mem
  ]
;##########################################################################################################################################################################

  ;; Households are assigned to three categories based on size. This determines livestock holdings and sources of income

  ask hholds [

    if hh_tot < 8 [set h_quant 1]
    if hh_tot > 7 and hh_tot < 11 [set h_quant 3]
    if hh_tot > 10 [ set h_quant 6]



    ;; give households a cattle herd
    let ca_temp abs (random-normal ([cattle] of patch-here * h_quant ) 5) ; Mean as per FEWS

    ; Split cattle into two sex classes (includes all post weaning individuals)
    set ca_aF ceiling (ca_temp * 0.57)
    set ca_aM ceiling (ca_temp * 0.43)


    ;set cat matrix:from-column-list (list(list ca_aF  ca_aM)) ;
    set cat-tot sum (list ca_aF ca_aM); Here we do not include calves in the total.

    ;; Give the herd a starting age. Here we assign a starting age for each sex class ranging. Cohort includes individuals of all ages post weaning

    set ca_aF_ag  n-values ca_aF [random (96 - 9 + 1) + 9]  ;Max age 12 years, Min age 9 months (weaning age)
    set ca_aM_ag  n-values ca_aM [random (96 - 9 + 1) + 9]


    ;; Give the herd a starting weight.
    ;;Removing sum before n-values to make a list of weights instead of total weight of cohort
    let temp_caFwt assign-wt ca_aF_ag cat_age cat_wt_age 16 200
    set ca_aF_wt []
    foreach temp_caFwt [x -> set ca_aF_wt lput (x + random-normal 0 2) ca_aF_wt]

    let temp_caMwt assign-wt ca_aM_ag cat_age cat_wt_age 18 250
    set ca_aM_wt []
    foreach temp_caMwt [x -> set ca_aM_wt lput (x + random-normal 0 2) ca_aM_wt]

    set ca_tot_wt sum (map [x -> sum x] (list ca_aF_wt ca_aM_wt))

    ;; Determine breeding females and create calf cohort
    set ca_calves 0
    set ca_calves_ag []
    set fem_lact n-values ca_af [0]


    set hh-cat-tot (list cat-tot)  ; Total adult cattle owned
    set hh-cat-lam []   ; A tracker for monthly cattle population growth rate

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;; give households a goat herd
    let gt_temp abs (random-normal ([goat] of patch-here * h_quant) 5) ; Mean as per FEWS

    ; Assign individuals to sex cohorts
    set gt_b ceiling (gt_temp * 0.26)
    set gt_d ceiling (gt_temp * 0.74)


  ;set gt matrix:from-column-list (list(list gt_b  gt_d))
  set gt-tot sum (list gt_b  gt_d ) ; Total adult goats owned


    ;; Give each animal a starting age

   set gt_b_ag n-values  gt_b [random (60 - 8 + 1) + 8]
   set gt_d_ag n-values gt_d [random (60 - 8 + 1) + 8]


   ;; Give a starting weight to each age sex class

    let temp_gtDwt assign-wt gt_d_ag gt_age gt_wt_age 16 32
    set gt_d_wt []
    foreach temp_gtDwt [x -> set gt_d_wt lput (x + random-normal 0 2) gt_d_wt]

    let temp_gtBwt assign-wt gt_b_ag gt_age gt_wt_age 17 34
    set gt_b_wt []
    foreach temp_gtBwt [x -> set gt_b_wt lput (x + random-normal 0 2) gt_b_wt]

    set gt_tot_wt sum (map [x -> sum x] (list gt_d_wt gt_b_wt))

    ;; Determine lactating individuals and create kids cohort
    set gt_kids 0
    set gt_kids_ag []
    set gt_fem_lact n-values gt_d [0]

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; give households a sheep herd

    let shp_temp abs (random-normal ([sheep] of patch-here * h_quant) 5); Mean as per FEWS

    set  sh_r ceiling (shp_temp * 0.12)
    set  sh_e ceiling (shp_temp * 0.88)

    ;set shp matrix:from-column-list (list (list sh_r  sh_e))
    set sh-tot sum (list sh_r  sh_e)   ; Total adult sheep owned

    ;; Give each animal a starting age  (Konig et al 2017)

   set sh_r_ag n-values sh_r [random (60 - 8 + 1) + 8]      ;; Max age of adults is 5 years.
   set sh_e_ag n-values sh_e [random (60 - 8 + 1) + 8]

    ;; Give a starting weight to each age sex class

    let temp_shEwt assign-wt sh_e_ag sh_age sh_wt_age 14 32
    set sh_e_wt []
    foreach temp_shEwt [x -> set sh_e_wt lput (x + random-normal 0 2) sh_e_wt]

    let temp_shRwt assign-wt sh_r_ag sh_age sh_wt_age 14 34
    set sh_r_wt []
    foreach temp_shRwt [x -> set sh_r_wt lput (x + random-normal 0 2) sh_r_wt]


    set sh_tot_wt sum (map [x -> sum x] (list sh_r_wt sh_e_wt))

     ;; Determine breeding females and create calf cohort
    set sh_lambs 0
    set sh_lambs_ag []
    set sh_fem_lact n-values sh_e [0]

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  ;; Give households camel herds; Not all areas in Kenya have camels. So only patches where camels have been recorded get hholds with camels
    ifelse [camel] of patch-here != 0 [set camel-owner 1] [set camel-owner 0] ;; Designate if the household traditionally keeps camels

    let cam_temp abs (random-normal ([camel] of patch-here * h_quant) 5); Mean as per FEWS * the quartile the household falls in.
    if [camel] of patch-here = 0 [set cam_temp 0]

    set cam_aM ceiling (0.33 * cam_temp)
    set cam_aF ceiling (0.67 * cam_temp)

    ;set cam matrix:from-column-list (list (list cam_aM  cam_aF))
    set cam-tot sum (list cam_aM  cam_aF)

    ;; Give each animal a starting age  (Konig et al 2017)

    set cam_aM_ag n-values cam_aM [random (300 - 8 + 1) + 8]         ;; Max age of adults set to 25 years
    set cam_aF_ag n-values cam_aF [random (300 - 8 + 1) + 8]         ;; Weaning age is 7 months

      ;; Give a starting weight to each age sex class

    let temp_camFwt assign-wt cam_af_ag cam_age cam_wt_age 17 350
    set cam_af_wt []
    foreach temp_camFwt [x -> set cam_af_wt lput (x + random-normal 0 2) cam_af_wt]

    let temp_camMwt assign-wt cam_am_ag cam_age cam_wt_age 19 400
    set cam_am_wt []
    foreach temp_camMwt [x -> set cam_am_wt lput (x + random-normal 0 2) cam_am_wt]


    set cam_tot_wt sum (map [x -> sum x] (list cam_aF_wt cam_aM_wt))


        ;; Determine breeding females and create calf cohort
    set cam_calves 0
    set cam_calves_ag []
    set cam_fem_lact n-values cam_af [0]


    set hh-cam-tot (list cam-tot)

    set hh-cam-lam []      ;; This is where the monthly camel population growth rate is tracked


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;; For each household set up total number of livestock as TLU
   set TLU-owned (list ((cam-tot * 1.25) + cat-tot  + gt-tot * 0.1 + sh-tot * 0.1)) ;; Megersa et al 2014
   let adult_eq [0.52 0.85 0.96 0.96 1.0 0.86];; from DECUMA
   set AE sum (map [[a b] -> a * b] hh_mem adult_eq) ;; Total adult equivalents in each household
   set TLU-cap (list (item 0 TLU-owned / AE));; The TLUs owned per adult equivalent
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    set move-cost []   ;; Set up the list that tracks distances moved in each step

    ;; Give households a starting quanitity of maize purchased from markets / grown at home
    set maize 0; (floor abs random-normal 100 5) ;; Here each household has upto 80 kgs of maize assigned randomly for the month; Left over from previous months

   ;; Give households sources of income
    ;ifelse (item 0 TLU-cap) <= 5  ; Poverty line is 2$/day. These households earn approximately 4000ksh/month and earn the rest via cattle sales
    ;    [set base_income abs(random-normal 4000 100)] [set base_income 0]

    ifelse h_quant = 1 [ set base_income abs(random-normal 3000 100)] [set base_income 0]

  ; ifelse (item 0 TLU-cap) > 5  and (item 0 TLU-cap) <= 8
   ;     [set labour abs(random-normal 6000 500)] [set labour 0]

     ifelse h_quant = 3 [ set labour abs(random-normal 5000 500)] [set labour 0]

    ;ifelse (item 0 TLU-cap) > 8
    ;[set business abs(random-normal 8000 500)] [set business 0] ;;

    ifelse h_quant = 6 [ set business abs(random-normal 8000 500)] [set business 0]

    set cash_in_hand 0; (floor abs random-normal 10000 500)  ;; money left over from last month



   ;; Assign a few households (at a minimum 1 and a maximum of 10) as family from whom gifts may be received or to whom gifts may be given
    let temp-fam hholds with [my-tribe = [my-tribe] of myself]
    let fam count temp-fam
    ifelse fam < 10
    [create-links-with n-of (random  fam) other temp-fam  [hide-link]]
    [create-links-with n-of (random  (10)) other temp-fam  [hide-link]]

;;  Set the calorie source tracker
    set cal-source []

 ;; Set the debt tracker
     set economic_state []
    ;;Set the sales and purchases tracker. For each houselhold, each month the number of cattle, camel, sheep and goat bought and sold is tracked.

    set sales_ca_m []
    set sales_cam_m []
    set sales_sht_m []
    set purchases_ca_m []
    set purchases_cam_m []
    set purchases_sht_m []
    set hunger-stat []
    set milk_given []
    set milk_recieved []
    set gift_given []
    set gift_recieved []
    set cat_m []
    set cam_m []
    set gt_m []
    set sh_m []
    set liv_sales_income []
    set raid-tribe []
    set raid-loss []
    set grazing_land patch-here
    if nonsed = 0 [set move-stat "sedentary" set temp_past_status 1]
    if nonsed = 1 [set move-stat "non-sedentary" set temp_past_status 1]
  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to load-parms
  set m_days [31 28 31 30 31 30 31 31 30 31 30 31]

  ;; Adult equivalent conversions and Calorie requirements per AE
 set hh_ae [0.52 0.85 0.96 0.96 1.0 0.86] ;; < 5 , 6-12, 13-17 (m) 13-17 (f) >17 (m) >17 (f)
 set mem_calreq [1720 1720 1943 1943 2024 1943]

  ;Milk calorie for each sp

 set milk_cal_cow 789 ; Milk calorie count (cal/kg)
 set milk_cal_cam 700  ; Camel milk calorie (cal/kg) From Morton 1984
 set milk_cal_gt  530 ; Calories from goat milk
 set milk_cal_sh  530 ; Calories from sheep milk

  ; Slaughter probability and meat calories
 set opportunistic_slaughter 0.05
 set meat_cal 1720; Meat calorie count (kcal/kg)
 set maize_cal 3700 ; Maize calorie count (kcal/kg)


  ;; Household wealth and sources in Kenyan Shillings: These values are placeholders from Decuma

 set income_catcam  [5889 5818 6798 6679 6514 7721 6924 6403 6254 6743 6790 6939] ;; Monthly price of large livestock
 set income_shoat [1212 1179 1198 1160 1213 1217 1167 1187 1149 1232 1326 1383] ; Monthly price of small stock


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  set TLU [1 0.1 0.1 1]

  set cat_age [8 9 10 11 12 13 14 15 16 17 18] ;;post-weaning ages for cattle and camel
  set cat_wt_age [100	107	115	124	135	147	161	177	195	215	238];; weight at age for cattle

  set cam_age [8 9 10 11 12 13 14 15 16 17 18 19]
  set cam_wt_age [150	162	175	190	206	224	244	266	291	319	350	385]

  set sh_age [3 4 5 6 7 8 9 10 11 12 13 14]
  set sh_wt_age [10	10.89	11.9	13.05	14.36	15.86	17.58	19.56	21.84	24.48	27.54	31.1]

  set gt_age [3 4 5 6 7 8 9 10 11 12 13 14 15 16 17]
  set gt_wt_age [10 10 11 12 13 14 15 16 17 19 21 23 26 28 32]


  set ca_calf_dr 0.029      ; Monthly death rate for calves  ;;All 4 values from Having herds
  set cam_calf_dr 0.029  ; Monthly death rate for camel calves
  set gt_kids_dr 0.018   ; Monthly death rate for kids
  set sh_lambs_dr 0.029   ; Monthly death rate for lambs


  set milk_prod [24 24 24 45 46.5 24 24 24 24 24 42 42] ; milk produced kg/cow/month Decuma
  set cam_milk_prod [15 15 15 51 51 51 45 45 45 36 36 36]; McCabe 2004
  set shoat_milk_prod [0 0 0 5 5 0 0 0 0 0 4 4]; McCabe 2004


 ;; Set the breeeding and milking months for cattle, camel and shoats between Jan and Dec

  set cat-breed [0 0 0 1 0 0 0 0 0 0 1 0]
  set shoat-breed [0 0 0 1 0 0 0 0 0 0 1 0]
  set cam-breed [0 0 0 1 0 0 0 0 0 0 1 0]

  set cat-milk [1 1 1 1 1 1 1 1 1 1 1 1]
  set shoat-milk [0 0 0 1 1 0 0 0 0 0 1 1]
  set cam-milk [1 1 1 1 1 1 1 1 1 1 1 1];   From Morton 1984

  set cat-rep-rate [0 0 0 0.5 0 0 0 0 0 0 0.2 0]
  set sht-rep-rate [0 0 0 0.7 0 0 0 0 0 0 0.3 0]
  set cam-rep-rate [0 0 0 0.4 0 0 0 0 0 0 0.1 0]


  set m_harvest [0 0 0 0 0 0 1 0 0 0 0 0]  ; Month when maize is harvested by agropastoral hholds (July)

  set cat_pool [0.45 0.45 0.05 0.05 0 0 0 0] ; relative preference of cattle for gherb dherb gshrub dshrub bshrub gtree dtree btree
  set sh_pool [0.45 0.43 0.05 0.05 0 0.07 0.07 0] ; relative preference of sheep for gherb dherb gshrub dshrub bshrub gtree dtree btree
  set gt_pool [0.08 0.10 0.40 0.40 0.28 0.45 0.45 0.38] ; relative preference of goat for gherb dherb gshrub dshrub bshrub gtree dtree btree
  set cam_pool [0.02 0.02 0.50 0.50 0.72 0.48 0.48 0.62] ; relative preference of camel for gherb dherb gshrub dshrub bshrub gtree dtree btree

  ;set cat_energy 7
  ;set cam_energy 5
  ;set sh_energy 7
  ;set gt_energy 8
  ;; Above each pool adds up to 1.


;;;;;;;;;;;;;;;;;;;Update livestock totals for Kenya;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  ; The total number of cattle, vamel, sheep and goat in Kenya
  set cattle-total (list sum [cat-tot] of turtles)
  set camel-total (list sum [cam-tot] of turtles)
  set sheep-total (list sum [sh-tot] of turtles)
  set goat-total (list sum [gt-tot] of turtles)

  set drop-outs []
  ;set hungry []
end 

to spin-hholds
  create-turtles 10657

  file-open  "SPIRALL-NewDiets world.csv"
  let headings csv:from-row file-read-line
  let i 0
  while [ not file-at-end? ] [
    let data csv:from-row file-read-line
    print data
ask turtle i [
;set	who	((item	0	data))
set	color		red
;set	heading	(item	2	data)
set	xcor (item	0	data)
set	ycor (item	1	data)
set	shape	"house"
set	label	(read-from-string	(item	3	data))
set	label-color	black
set	breed	hholds
set	size	1
set	pen-size	1
set	pen-mode	"up"
set	nonsed	(item	4	data)
set	occ	(read-from-string	(item	5	data))
set	agrop		(item	6	data)
set	hm_patch read-from-string (item 7 data)
set	my-tribe	(read-from-string	(item	8	data))
set past_type read-from-string (item 9 data)
set move-stat read-from-string (item 10 data)
set	grazing_land	read-from-string (item	11	data)
set	cam_am	 (item	12	data)
set	cam_af		(item	13	data)
set	cam-tot	(item	14	data)
set	cam_am_wt read-from-string	(item	15	data)
set	cam_af_wt	read-from-string (item	16	data)
set	cam_af_ag	read-from-string (item	17	data)
set	cam_am_ag	read-from-string (item	18	data)
set	cam_fem_lact read-from-string	(item	19	data)
set	cam_calves	(item	20	data)
set	cam_calves_ag	read-from-string (item	21	data)
set	cam_tot_wt	(item	22	data)
set	camel-owner	(item	23	data)
set	ca_calves	(item	24	data)
set	ca_calves_ag	read-from-string (item	25	data)
set	ca_af	(item	26	data)
set	ca_am	(item	27	data)
set	cat-tot	(item	28	data)
set	ca_af_wt	read-from-string (item	29	data)
set	ca_am_wt	read-from-string (item	30	data)
set	ca_tot_wt	 (item	31	data)
set	fem_lact	read-from-string (item	32	data)
set	ca_af_ag	read-from-string (item	33	data)
set	ca_am_ag	read-from-string (item	34	data)
set	sh_r	(item	35	data)
set	sh_e	(item	36	data)
set	sh-tot	(item	37	data)
set	sh_r_wt	read-from-string (item	38	data)
set	sh_e_wt	read-from-string (item	39	data)
set	sh_r_ag	read-from-string (item	40	data)
set	sh_e_ag	read-from-string (item	41	data)
set	sh_fem_lact	read-from-string (item	42	data)
set	sh_lambs	(item	43	data)
set	sh_lambs_ag	read-from-string (item	44	data)
set	sh_tot_wt  (item	45	data)
set	gt_b (item	46	data)
set	gt_d	(item	47	data)
set	gt-tot	(item	48	data)
set	gt_b_wt	read-from-string (item	49	data)
set	gt_d_wt	read-from-string (item	50	data)
set	gt_b_ag	read-from-string (item	51	data)
set	gt_d_ag	read-from-string (item	52	data)
set	gt_fem_lact	read-from-string (item	53	data)
set	gt_kids	(item	54	data)
set	gt_kids_ag	read-from-string (item	55	data)
set	gt_tot_wt	(item	56	data)
set	p_under5	(item	57	data)
set	p_6to12	(item	58	data)
set	m_13to17	(item	59	data)
set	m_older17	(item	60	data)
set	f_13to17	(item	61	data)
set	f_older17	(item	62	data)
set	hh_mem	read-from-string (item	63	data)
set	ae	(item	64	data)
set	hh_tot (item	65	data)
set	h_quant	(item	66	data)
set	maize	(item	67	data)
set	cash_in_hand	(item	68	data)
set	labour	(item	69	data)
set	business	(item	70	data)
set	ag_land	(item	71	data)
set	base_income	(item	72	data)
set	assets	(item 73	data)
set	family	(item	74	data)
    set move-cost []
    set cal-source []
    set economic_state []
    set sales_ca_m []
    set sales_cam_m []
    set sales_sht_m []
    set purchases_ca_m []
    set purchases_cam_m []
    set purchases_sht_m []
    set hunger-stat []
    set milk_given []
    set milk_recieved []
    set gift_given []
    set gift_recieved []
    set hh-cat-tot (list cat-tot)  ; Total adul cattle owned
    set hh-cat-lam []   ; A tracker for monthly cattle population growth rate
    set hh-cam-tot (list cam-tot)
    set hh-cam-lam []
    set TLU-owned []
    set TLU-cap []
    set cat_m (list cat-tot)
    set cam_m (list cam-tot)
    set sh_m (list sh-tot)
    set gt_m (list gt-tot )
    set liv_sales_income []
    set raid-tribe []
    set raid-loss []

        ]
set i i + 1
    ]

  file-close-all

  ask hholds [
    ;move-to  hm_patch             ;; Use this and next line for sedentary scenario
    ;set grazing_land hm_patch
    let temp-fam hholds with [my-tribe = [my-tribe] of myself]
    let fam count temp-fam
    ifelse fam < 10
    [create-links-with n-of (random  fam) other temp-fam  [hide-link]]
    [create-links-with n-of (random  (10)) other temp-fam  [hide-link]]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;; For each household set up total number of livestock as TLU
   set TLU-owned (list ((cam-tot * 1.25) + cat-tot  + gt-tot * 0.1 + sh-tot * 0.1)) ;; Megersa et al 2014
   let adult_eq [0.52 0.85 0.96 0.96 1.0 0.86]
   set AE sum (map [[a b] -> a * b] hh_mem adult_eq)
   set TLU-cap (list (item 0 TLU-owned / AE))

      ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to reset-hholds

;; This step ensures that if there are pastoralists who end up without any livestock in the previous step, they have atleast a small herd of a combinaiton of cattle and shoats to start off with to stay in the system

  ask hholds with [assets = "assetless"]  ; Households that lost their entire herd at the end of the previous month
               ;; give households a cattle herd
  [
    set reborn  1

   let ca_temp random-poisson 2 ;

    ; Split cattle into two sex classes (includes all psot weaning individuals)
    set ca_aF ceiling (ca_temp * 0.57)
    set ca_aM ceiling (ca_temp * 0.43)


    ;set cat matrix:from-column-list (list(list ca_aF  ca_aM)) ;
    set cat-tot sum (list ca_aF ca_aM); Here we do not include calves in the total.

    ;; Give the herd a starting age. Here we assign a starting age for each sex class ranging. Cohort includes individuals of all ages post weaning

    set ca_aF_ag  n-values ca_aF [random (144 - 9 + 1) + 9]  ;Max age 13 years, Min age 9 months (weaning age)
    set ca_aM_ag  n-values ca_aM [random (144 - 9 + 1) + 9]


    ;; Give the herd a starting weight.
    ;;Removing sum before n-values to make a list of weights instead of total weight of cohort
    let temp_caFwt assign-wt ca_aF_ag cat_age cat_wt_age 16 200
    set ca_aF_wt []
    foreach temp_caFwt [x -> set ca_aF_wt lput (x + random-normal 0 2) ca_aF_wt]

    let temp_caMwt assign-wt ca_aM_ag cat_age cat_wt_age 18 250
    set ca_aM_wt []
    foreach temp_caMwt [x -> set ca_aM_wt lput (x + random-normal 0 2) ca_aM_wt]
    set ca_tot_wt sum (map [x -> sum x] (list ca_aF_wt ca_aM_wt))

    ;; Determine breeding females and create calf cohort
    set ca_calves 0
    set ca_calves_ag []
    set fem_lact n-values ca_af [0]


   ; set hh-cat-tot n-values (ticks + 1)  [0]
    ;set hh-cat-lam n-values (ticks + 1)  [1]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;; give households a goat herd
    let gt_temp random-poisson 2 ; Poisson mean as per FEWS

    ; Assign individuals to sex cohorts
    set gt_b ceiling (gt_temp * 0.26)
    set gt_d ceiling (gt_temp * 0.74)


  ;set gt matrix:from-column-list (list(list gt_b  gt_d))
  set gt-tot sum (list gt_b  gt_d )


    ;; Give each animal a starting age

   set gt_b_ag n-values  gt_b [random (60 - 8 + 1) + 8]
   set gt_d_ag n-values gt_d [random (60 - 8 + 1) + 8]


   ;; Give a starting weight to each age sex class

    let temp_gtDwt assign-wt gt_d_ag gt_age gt_wt_age 16 32
    set gt_d_wt []
    foreach temp_gtDwt [x -> set gt_d_wt lput (x + random-normal 0 2) gt_d_wt]

    let temp_gtBwt assign-wt gt_b_ag gt_age gt_wt_age 17 34
    set gt_b_wt []
    foreach temp_gtBwt [x -> set gt_b_wt lput (x + random-normal 0 2) gt_b_wt]

    set gt_tot_wt sum (map [x -> sum x] (list gt_d_wt gt_b_wt))

    ;; Determine lactating individuals and create kids cohort
    set gt_kids 0
    set gt_kids_ag []
    set gt_fem_lact n-values gt_d [0]

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; give households a sheep herd

    let shp_temp random-poisson 2 ; Poisson mean as per FEWS

    set  sh_r ceiling (shp_temp * 0.12)
    set  sh_e ceiling (shp_temp * 0.88)

    ;set shp matrix:from-column-list (list (list sh_r  sh_e))
    set sh-tot sum (list sh_r  sh_e)

    ;; Give each animal a starting age  (Konig et al 2017)

   set sh_r_ag n-values sh_r [random (60 - 8 + 1) + 8]      ;; Max age of adults is 5 years.
   set sh_e_ag n-values sh_e [random (60 - 8 + 1) + 8]

    ;; Give a starting weight to each age sex class

   let temp_shEwt assign-wt sh_e_ag sh_age sh_wt_age 14 32
    set sh_e_wt []
    foreach temp_shEwt [x -> set sh_e_wt lput (x + random-normal 0 2) sh_e_wt]

    let temp_shRwt assign-wt sh_r_ag sh_age sh_wt_age 14 34
    set sh_r_wt []
    foreach temp_shRwt [x -> set sh_r_wt lput (x + random-normal 0 2) sh_r_wt]

    set sh_tot_wt sum (map [x -> sum x] (list sh_r_wt sh_e_wt))

     ;; Determine breeding females and create calf cohort
    set sh_lambs 0
    set sh_lambs_ag []
    set sh_fem_lact n-values sh_e [0]

  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to load-forage
  ; This is where the agent based model will integrate with lrange
  ;; The biomass values are updated for each patch


 let p_sort sort patches
 let pools ["GREEN_HERB" "DEAD_HERB"  "GREEN_SHRUB" "DEAD_SHRUB" "SHRUB_BRNCH" "GREEN_TREE" "DEAD_TREE" "TREE_BRNCH"]


  file-open (read-from-string bio_out)
  let temp []
   while [not file-at-end?] [
   let skip file-read-line
   repeat (count patches) [set temp lput file-read temp]
        ]
  file-close

  ;;Update  biomass
  let totp count patches
  (foreach p_sort sublist temp 0 totp [[p t] ->
    ask p [set green_herb t]])
  (foreach p_sort sublist temp totp (totp * 2) [[p t] ->
    ask p [set dead_herb t]])
  (foreach p_sort sublist temp (totp * 2) (totp * 3) [[p t] ->
    ask p [set green_shrub t]])
  (foreach p_sort sublist temp (totp * 3) (totp * 4) [[p t] ->
    ask p [set dead_shrub t]])
  (foreach p_sort sublist temp (totp * 4) (totp * 5) [[p t] ->
    ask p [set shrub_brnch t]])
  (foreach p_sort sublist temp (totp * 5) (totp * 6) [[p t] ->
    ask p [set green_tree t]])
 (foreach p_sort sublist temp (totp * 6) (totp * 7) [[p t] ->
    ask p [set dead_tree t]])
  (foreach p_sort sublist temp (totp * 7) (totp * 8) [[p t] ->
    ask p [set tree_brnch t]])


  ;; Reset the forage and other metrics to 0

  ask patches [
    set hsi_herb 0
    set hsi_browse 0
    set forage_cat 0
    set forage_browse 0
    set stock_den 0
    set cam_den 0]





  ask patches with [green_herb >= 1] [                   ;; here we calculate habitat suitability values based on the max and min observed biomass values for Kenya Boutton et al., 1988
                                                         ;; Biomass Dynamics of grassland vegetation in Kenya.

    ;let mag (green_herb + 0.25 * dead_herb ) * (1 - unavailable); total monthly available biomass for grazers
    ;let mab (green_shrub + 0.25 * dead_shrub + 0.5 * (green_tree + 0.25 * dead_tree)) * (1 - unavailable); total monthly available biomass for browsers
    ;; We assume that dead plant matter contributes 25 % to the diets of herbivores (McNaughton 1985) and about 50 % of green tree matter is available to herbivores (check for reference)
    ;; Of this total amount, in reality a large fraction is unavailable due to natural and anthropogenic constraints. We assume that an assessment of suitability is made based on the total availability

    ;ifelse mag = 0 [set HSI_herb 0]
     ; [set HSI_herb exp(-5 + 0.1 * mag) / (1 + exp(-5 + 0.1 * mag))]


   ; ifelse mab = 0 [set HSI_browse 0]
         ; [set HSI_browse exp(-5 + 0.1 * mab) / (1 + exp(-5 + 0.1 * mab))]

  ;; We determine forage availability for each livestock species by assuming that abt 20 % of herbivore diet is composed of dead matter. Mingo and Oesterheld 2009 McNaughton 1985
  ;; Forage available on a patch is based on the fraction of the population represented (sam_p)
    set greenH green_herb
    set deadH dead_herb
    set greenS green_shrub
    set deadS dead_shrub
    set brnchS shrub_brnch
    set greenT green_tree
    set deadT dead_tree
    set brnchT tree_brnch
  ]
end 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;This sub-routine allows herders to compare the suitability of the patch they are on patches within multiple radii and make movement decisions
;;We work under the assumption that movements out of the patch are driven only by considerationf of forage availability for cattle
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to find-pasture

    set month ticks - (12 * floor (ticks / 12))
    if member? ticks n-values years [x -> x * 12] [ set month 0]

  ask patches [

   let mag (green_herb +  dead_herb ) * (grain ^ 2) * (0.001) * (0.01) * sam_p * (1 - unavailable); total monthly available biomass for grazers
   let mab (green_shrub +  dead_shrub + (green_tree +  dead_tree)) * (grain ^ 2) * (0.001) * (0.01) * sam_p * (1 - unavailable); total monthly available biomass for browsers

   set stock_den (mag / 225 )
   set cam_den (mab /  360 )
   ;set stock_den  floor (max_cat * (1 - exp (-30 * 0.05 * HSI_herb / 0.5))) * sam_p ; ;; Monthly patch specific stocking density based on habitat suitability for grazers
   ;set cam_den floor (max_cam * (1 - exp (-30 * 0.05 * HSI_browse / 0.5))) * sam_p ; Monthly patch specific stocking density based on habitat suitability for browsers

    ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PA access scenario

  if PA_access = "No access" [set PA_patch "protect = 0"]
  if PA_access = "Access allowed" [set PA_patch "protect >= 0"]




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;When ticks are greater than 0
;; Once sedentary hholds have decided where to place cattle on the lands, in subsequent months assessment are made relative to this new grazing land (Note grazing land may also be the home patch)
;; Hholds assess if graing lands on which cattle are located at the end of previous iteration have reached stockign density. If yes, they are moved to another patch. Those hholds who find their cattle
;; on their home patch are called non-splitters, others are splitters. note again, sedentary hholds keep all other stock on home patch without assessing suitability.  There is a tendency to move
  ;; to patches closer to home in the long rain months

;if ticks > 0 [

  ask patches [set CAT-T 0
               set cam-t 0]

  ask hholds with [move-stat = "sedentary"][
    let current_loc grazing_land
    let name [who] of self
    let home_patch hm_patch

    if (month = 3 or month = 4 or month = 5)[
         ask patch-here [set cam-T cam-T + [cam-tot] of hhold name  ; Camels stay on patch of sedentary households
                         set CAT-T CAT-T + [cat-tot] of hhold name]
               set grazing_land patch-here
               ifelse grazing_land = home_patch [set past_type "non-splitter"] [set past_type "splitter"]
               set move-stat "sedentary"
               set move-cost lput (distance current_loc) move-cost
               ifelse my-tribe != [tribe] of grazing_land and [protect] of grazing_land = 0 [set risk 1] [set risk 0]
               set selection 1]]


     ask hholds with [move-stat = "sedentary"] [

       let name [who] of self
       let home_patch hm_patch


      ask patch-here [ set cam-T cam-T + [cam-tot] of hhold name ]  ; Camels stay on patch of sedentary households

       ifelse [CAT-T] of grazing_land + cat-tot < [stock_den] of grazing_land  ; Check grazing lands to see if they can support cattle;

              [;set grazing_land grazing_land; grazing_land
               ask grazing_land [set CAT-T CAT-T + [cat-tot] of hhold name]
               ifelse grazing_land = home_patch [set past_type "non-splitter"] [set past_type "splitter"]
               set move-stat "sedentary"
               set move-cost lput 0 move-cost
               ifelse my-tribe != [tribe] of grazing_land and [protect] of grazing_land = 0 [set risk 1] [set risk 0]
               set selection 1]

    ;; Look for a suitable patch within county boundary

      [let available ([patches in-radius (orbit_normal /(grain  / 1000))] of home_patch) ;; Look for patches within county boundary
                                 with [tribe = [my-tribe] of turtle name  and (CAT-T + [cat-tot] of turtle name  < stock_den)
                                          and (cov = 3 or cov = 2 or cov = 4) and farm = 0 and (runresult (PA_patch))]

          if my-tribe = "Turkana" [

          set available available with [tribe != "Marsabit"]]

                  ifelse any? available
                   [let temp_range 0
                    set temp_range (ifelse-value (month = 3 or month = 4 or month = 5) [min-one-of available [distance home_patch]]
                                                                                       [ one-of available])
                     set grazing_land temp_range
                     ask grazing_land [set CAT-T CAT-T  + [cat-tot] of hhold name]
                     ifelse grazing_land = home_patch [set past_type "non-splitter"] [set past_type "splitter"]
                     set move-stat "sedentary"
                     set move-cost lput (distance grazing_land) move-cost
                     ifelse my-tribe != [tribe] of grazing_land [set risk 1] [set risk 0]
                     set selection 2]

       ;; Look for a suitable patch for cattle beyond county boundary

             [let available-d ([patches in-radius (orbit_normal /(grain  / 1000))] of home_patch) ; Look for patches outside county boundary
                                 with [(CAT-T + [cat-tot] of turtle name  < stock_den) and (cov = 3 or cov = 2 or cov = 4) and farm = 0 and (runresult (PA_patch))]

          if my-tribe = "Turkana" [

          set available-d available-d with [tribe != "Marsabit"]]

                   ifelse any? available-d
                     [let temp_range 0
                     set temp_range (ifelse-value (month = 3 or month = 4 or month = 5) [min-one-of available-d [distance home_patch]]
                                                                                       [ one-of available-d])
                     set grazing_land temp_range
                     ask grazing_land [set CAT-T CAT-T + [cat-tot] of hhold name ]
                     ifelse grazing_land = home_patch [set past_type "non-splitter"] [set past_type "splitter"]
                     set move-stat "sedentary"
                     set move-cost lput (distance grazing_land) move-cost
            ifelse my-tribe != [tribe] of grazing_land and [protect] of grazing_land = 0 [set risk 1] [set risk 0]
                     set selection 3]

            ;;If no suitable patches are available within or beyond the county keep cattle on current patch
              [;set grazing_land grazing_land; grazing_land
               ask grazing_land [set CAT-T CAT-T + [cat-tot] of hhold name ]
               ifelse grazing_land = home_patch [set past_type "non-splitter"] [set past_type "splitter"]
               set move-stat "sedentary"
               set move-cost lput 0 move-cost
               ifelse my-tribe != [tribe] of grazing_land and [protect] of grazing_land = 0 [set risk 1] [set risk 0]
               set selection 4]

              ]
            ]
         ]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;;;; Move non-sedetary househlds.
;; Non -sedentary hholds assess the suitability of patches for both camel and cattle. They move the entire hhold when patches have reached stockign density for either cattle or camel
  ;; Movement is first to another patch within the county, then beyond the county and if nothing is found, then to any patch with HSI> 0. Tendency to move to a patch close to home in the
  ;; long rain months
  ask hholds with [move-stat = "non-sedentary"][

  set temp_past_status 0
  let name [who] of self
  let home_patch hm_patch
  let current_loc patch-here
  set grazing_land 0

    ;; During long rain months in Kenya (March-April-May) households head back to their home patch "Awi"
      ifelse (month = 3 or month = 4 or month = 5)

                      [move-to home_patch
                      ask patch-here  [set CAT-T CAT-T + [cat-tot] of hhold name
                                       set cam-T (cam-T + [cam-tot] of hhold name )]
                      set move-cost lput (distance current_loc) move-cost
                      set past_type "non-splitter"
                      set move-stat "non-sedentary"
                      set temp_past_status 1
                      set nonsed  1
                      set grazing_land home_patch
                      set selection 1
                      set risk 0]

 ;; In other months households examine whether the patch they are located on can support cattle and camel herds
      [ifelse ([CAT-T] of patch-here + cat-tot < [stock_den] of patch-here and
              [cam-T] of patch-here +  cam-tot < [cam_den] of patch-here)

      ;; If it can, stay on patch
       [ask patch-here [set CAT-T  CAT-T + [cat-tot] of hhold name
                        set cam-T cam-T + [cam-tot] of hhold name]
          set move-cost lput 0 move-cost
          set past_type "non-splitter"
          set move-stat "non-sedentary"
          set temp_past_status 1
          set nonsed  1
          set grazing_land patch-here
          ifelse my-tribe != [tribe] of grazing_land and [protect] of grazing_land = 0 [set risk 1] [set risk 0]
          set selection 1]

      ;; If not look for another patch within the movement orbit around the home patch and within the county
        [let available ([patches in-radius ((orbit_normal) /(grain  / 1000))] of home_patch) ; Look for patches within county boundary
                                 with [tribe = [my-tribe] of turtle name  and (CAT-T + [cat-tot] of turtle name  < stock_den) and (cov = 3 or cov = 2 or cov = 4)
                                         and (cam-T + [cam-tot] of turtle name ) < cam_den and farm = 0 and (runresult (PA_patch))]

        if my-tribe = "Turkana" [

          set available available with [tribe != "Marsabit"]]


              ifelse any? available
                    [ let new-p 0

                      set new-p one-of available
                      move-to new-p
                      ask new-p [set CAT-T CAT-T + [cat-tot] of hhold name
                                               set cam-T (cam-T + [cam-tot] of hhold name )]
                      set move-cost lput (distance current_loc) move-cost
                      set past_type "non-splitter"
                      set move-stat "non-sedentary"
                      set temp_past_status 1
                      set nonsed  1
                      set grazing_land new-p
                      ifelse my-tribe != [tribe] of grazing_land and [protect] of grazing_land = 0 [set risk 1] [set risk 0]
                      set selection 2]

                        [set temp_past_status 0]]]
  ]

;; Move households that have still not found a suitable pasture. Look for patches within movement radius and otside of the county

  ask hholds with [move-stat = "non-sedentary" and temp_past_status = 0][
                 let name [who] of self
                 let home_patch hm_patch
                 let current_loc patch-here

                 let available-d ([patches in-radius (orbit_normal /(grain  / 1000))] of home_patch) ; Look for pactches outside the county
                                          with [(CAT-T + [cat-tot] of turtle name  < stock_den) and (cov = 3 or cov = 2 or cov = 4) and
                                                (cam-T + [cam-tot] of turtle name) < cam_den and farm = 0 and (runresult (PA_patch))]

          if my-tribe = "Turkana" [

          set available-d available-d with [tribe != "Marsabit"]]


        ifelse any? available-d

                    [let new-pn 0

                    set new-pn one-of available-d
                               move-to new-pn
                               ask new-pn [set CAT-T CAT-T + [cat-tot] of hhold name
                                                         set cam-T (cam-T + [cam-tot] of hhold name)]
                               set move-cost lput (distance current_loc) move-cost
                               set past_type "non-splitter"
                               set move-stat "non-sedentary"
                               set temp_past_status 1
                               set nonsed 1
                               set grazing_land new-pn
                               if my-tribe != [tribe] of patch-here and [protect] of grazing_land = 0 [set risk 1]
                               set selection 3]

         ;; Remain on current patch

                 [ask patch-here [set CAT-T  CAT-T + [cat-tot] of hhold name
                        set cam-T cam-T + [cam-tot] of hhold name]
                        set move-cost lput 0 move-cost
                        set past_type "non-splitter"
                        set move-stat "non-sedentary"
                        set temp_past_status 1
                        set nonsed  1
                        set grazing_land patch-here
                      ifelse my-tribe != [tribe] of grazing_land and [protect] of grazing_land = 0 [set risk 1] [set risk 0]
                        set selection 4]
   ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to find-pasture-sedentary-scenario

  ask patches [

   let mag (green_herb +  dead_herb ) * (grain ^ 2) * (0.001) * (0.01) * sam_p * (1 - unavailable); total monthly available biomass for grazers
   let mab (green_shrub +  dead_shrub + (green_tree +  dead_tree)) * (grain ^ 2) * (0.001) * (0.01) * sam_p * (1 - unavailable); total monthly available biomass for browsers

   set stock_den (mag / 225 )
   set cam_den (mab /  360 )
   ;set stock_den  floor (max_cat * (1 - exp (-30 * 0.05 * HSI_herb / 0.5))) * sam_p ; ;; Monthly patch specific stocking density based on habitat suitability for grazers
   ;set cam_den floor (max_cam * (1 - exp (-30 * 0.05 * HSI_browse / 0.5))) * sam_p ; Monthly patch specific stocking density based on habitat suitability for browsers

    ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; Procedure to explore full sedentarization
;; Here all housholds stay on their respective home patches

  ask patches [set CAT-T sum [cat-tot] of turtles-here
               set cam-T sum [cam-tot] of turtles-here]

    ask hholds[
               set grazing_land patch-here;
               set past_type "non-splitter"
               set move-stat "sedentary"
               set move-cost lput (distance grazing_land) move-cost
               ifelse my-tribe != [tribe] of grazing_land [set risk 1] [set risk 0]
               set selection 1]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Now we divide up existing biomass among the livestock present on the patch by first accounting for the fact that only a fraction of the population is being sampled
;; This procedure includes two components: 1) The forage acquired by each animal is tallied to determine weight gain. 2) the patch depletion rate is tallied and and ASCII is written out
;; Livestock lose energy from travel to a patch as well as travel within patch. Travel within patch is based on watering frequency and some random assumed distance to water
;; Wt: List with weight of the livestock group (species-sex-age)
;; BMR : Species specific Matabolic rate
;; travel: total distance traveled to get to patch
;; wat_frequency: The number of times each species is taken to water each month
;; percapita: The percapita available forage for the species on the patch
;; energy: Energy content of the forage consumed by the species (MJ)
;; max_wt: Maximum possible wt for each sex class of each species
;; grazing_area: For splitter cattle herds, grazing area is the patch on which herd is currently grazing (may be different from patch on which hhold is located)
;; All other species and non-splitter cattle herds graze on the same patch where the hhold is located

to-report forage [wt BMR travel wat_freq percapita energy max_wt]

  let max_forage map [n -> (n * 0.03 * 30)] wt  ; based on current wt determine maximum forage that can be consumed as 3 % of body weight

  set wt map [n -> n - (precision (((BMR * (n ^ 0.75) * 30 * 239) / 5600 ) +   ;; FAO;; Wt loss from travel and metabolic costs
                        ((travel + (((random 10) + 1) * wat_freq))  * (12 * n / 100) / 5600)) 2)] wt

  let forage_cons []
  let consumed 0
   foreach max_forage [n -> ifelse percapita > n ;; Checks if per capita available forage is greater than maximum forage that can be consumed by individual
           [set forage_cons lput n forage_cons                     ;; If yes then constrain foraging to maximum diet capacity
            set consumed consumed + n]
           [set forage_cons lput  percapita forage_cons  ;; else constrain to percapita available forage
            set consumed consumed + percapita ]
           ]
      let energy_aq map [n -> n * energy * 239] forage_cons   ;; energy here is the energy content in MJ of 1 kg DM consumed

      set wt (map  [[n a] -> precision (n + (a / 5600)) 2] wt energy_aq) ;; weight gained by assuming 5600 kcal is needed for 1 kg wt gain.

      let temp1 []
      foreach wt [n -> ifelse n > max_wt [set temp1 lput max_wt temp1] [set temp1 lput n temp1]]  ;; Constrain max weight to max possbile wt
      let temp2 []
      foreach temp1 [n -> ifelse n < 0 [set temp2 lput 0 temp2] [set temp2 lput n temp2]]  ;; Remove possible negative values
      set wt temp2

report (list wt consumed forage_cons max_forage)
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Calculate per capita availability of each pool

to deplete-patch
  ask patches with [CAT-T + sum [cam-tot] of turtles-here + sum [sh-tot] of turtles-here + sum [gt-tot] of turtles-here > 0][

;; Account for all the animals on the patch. cows belonging to both hholds on the patch and splitter families
let cows cat-t
let cams sum [cam-tot] of turtles-here
let shs sum [sh-tot] of turtles-here
let goats sum [gt-tot] of turtles-here

;; Standardize total livestock on patch in terms of TLU and relative TLU aundance
let temp-pop (list cows shs goats cams)
let temp-pop-tlu (map [[a b] -> a * b] TLU temp-pop)
let temp-tlu-sum sum temp-pop-tlu
let temp-tlu-std map [a -> a / temp-tlu-sum] temp-pop-tlu

;; Create a combined metric of fraction of each pool allocated representing pool preference and standardized relative abundance
    let cattle-props map [a -> (item 0 temp-tlu-std)  * a] cat_pool
    let sheep-props  map [a -> (item 1 temp-tlu-std)  * a] sh_pool
    let goat-props  map [a -> (item 2 temp-tlu-std) * a]  gt_pool
    let camel-props  map [a -> (item 3 temp-tlu-std) * a] cam_pool

    let temp-tots (map[[a b c d] -> a + b + c + d] cattle-props sheep-props goat-props camel-props)
    let temp-tots2 map [[x] -> ifelse-value (x = 0) [1] [x]] temp-tots ;; This is done to avoid a divide by zero error in the next step

 ; This is the final standardized allocation of each pool to each species on a patch
    set cat-per-pools (map [[a b] -> a / b] cattle-props temp-tots2)
    set sh-per-pools (map [[a b] -> a / b] sheep-props temp-tots2)
    set gt-per-pools (map [[a b] -> a / b] goat-props temp-tots2)
    set cam-per-pools (map [[a b] -> a / b] camel-props temp-tots2)

 ;; Calculate the total forage available for each species by multiplying the fractions with biomass for each pool

    set cattle-forage (sum (map [[a b] -> a * b] cat-per-pools (list greenH deadH greenS deadS brnchS greenT deadT brnchT))) * (grain ^ 2) * 0.001 * 0.01 * sam_p * (1 - unavailable)
    set sheep-forage (sum (map [[a b] -> a * b] sh-per-pools (list greenH deadH greenS deadS brnchS greenT deadT brnchT))) * (grain ^ 2) * 0.001 * 0.01 * sam_p * (1 - unavailable)
    set goat-forage (sum (map [[a b] -> a * b] gt-per-pools (list greenH deadH greenS deadS brnchS greenT deadT brnchT))) * (grain ^ 2) * 0.001 * 0.01 * sam_p * (1 - unavailable)
    set camel-forage (sum (map [[a b] -> a * b] cam-per-pools (list greenH deadH greenS deadS brnchS greenT deadT brnchT))) * (grain ^ 2) * 0.001 * 0.01 * sam_p * (1 - unavailable)

    ifelse cows > 0 [set percap_cattle cattle-forage / cows] [set percap_cattle cattle-forage]
    ifelse shs > 0 [set percap_shp sheep-forage / shs] [set percap_shp sheep-forage]
    ifelse goats > 0 [set percap_gt goat-forage / goats] [set percap_gt goat-forage]
    ifelse cams > 0 [set percap_cam camel-forage / cams] [set percap_cam camel-forage]
    ]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Set the coutners tracking froaged consumed each month to 0

  ask patches[set cons_cat 0
              set cons_sh 0
              set cons_gt 0
              set cons_cam 0]


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 ask hholds with [past_type = "non-splitter"] [

    let move-dist 0  ;; Cattle of sedentary and non-spitter households incur movement costs from accessing water within patch, whereas non-sedentary household cattle
                     ;; incur movement cost both from moving to other patches and accesing water within patch
    ifelse past_type = "non-sedentary" [set move-dist (item (ticks ) move-cost) * grain / 1000] [set move-dist 0]


 if ca_aF > 0 [
     let percap_patch [percap_cattle] of patch-here
     let new_wt forage  ca_aF_wt 0.48 move-dist 15 floor percap_patch cat_energy 200
     set ca_aF_wt item 0 new_wt
     ask patch-here [set cons_cat cons_cat + item 1 new_wt]
        ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    if ca_aM > 0 [

     let percap_patch [percap_cattle] of patch-here
     let new_wt forage  ca_aM_wt 0.48 move-dist 15 floor percap_patch cat_energy 250
     set ca_aM_wt item 0 new_wt
     ask patch-here [set cons_cat cons_cat + item 1 new_wt]
   ]


    set ca_tot_wt sum (map [x -> sum x](list ca_aF_wt ca_aM_wt))  ; Update total cattle wt

 ]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Next we deplete patches where splitter herds are located
 ask hholds with [past_type = "splitter"] [ ; Cattle of splitter households incur movement costs from moving to grazing lands
                                                            ; and from accessign water.

    ; Cattle of splitter households
    let percap_patch [percap_cattle] of grazing_land
    let move-dist 0
    set move-dist (item (ticks) move-cost) * grain / 1000

    if ca_aF > 0 [


     let new_wt2 forage  ca_aF_wt 0.48 move-dist 15 floor percap_patch cat_energy 200
     set ca_aF_wt item 0 new_wt2
     ask grazing_land [set cons_cat cons_cat + item 1 new_wt2]
]




 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    if ca_aM > 0 [

     let new_wt3 forage  ca_aM_wt 0.48 move-dist 15 floor percap_patch cat_energy 250
     set ca_aM_wt item 0 new_wt3
     ask grazing_land [set cons_cat cons_cat + item 1 new_wt3]
     ]


      set ca_tot_wt sum (map [x -> sum x](list ca_aF_wt ca_aM_wt))

]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Update sheep foraging and wt gain

  ask hholds with [sh-tot > 0 ] [
    let move-dist 0
    ifelse past_type = "non-sedentary" [set move-dist (item (ticks) move-cost) * grain / 1000] [set move-dist 0]

    if sh_e > 0 [
     let percap_patch [percap_shp] of patch-here
     let new_wt forage  sh_e_wt 0.25 move-dist 10 floor percap_patch sh_energy 32
     set sh_e_wt item 0 new_wt
     ask patch-here [set cons_sh cons_sh + item 1 new_wt]

     ]

  ;;;;;;;;;;;;;;;;;;;

    if sh_r > 0 [

     let percap_patch [percap_shp] of patch-here
     let new_wt forage  sh_r_wt 0.25 move-dist 10 floor percap_patch sh_energy 34
     set sh_r_wt item 0 new_wt
     ask patch-here [set cons_sh cons_sh + item 1 new_wt]
    ]


     set sh_tot_wt sum (map [x -> sum x] (list sh_e_wt sh_r_wt))  ;update total sheep wt

  ]

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;; Update foraging and wt gain of goats and camels

 ask hholds with [cam-tot > 0] [

     let move-dist 0
     ifelse past_type = "non-sedentary" [set move-dist (item (ticks) move-cost) * grain / 1000] [set move-dist 0]

     if cam_aF > 0 [

     let percap_patch [percap_cam] of patch-here
     let new_wt forage  cam_aF_wt 0.314 move-dist 10 percap_patch cam_energy 350
     set cam_aF_wt item 0 new_wt
      ask patch-here [set cons_cam cons_cam + item 1 new_wt]
     ]

;;;;;;;;;

     if cam_aM > 0 [

     let percap_patch [percap_cam] of patch-here
     let new_wt forage  cam_aM_wt 0.314 move-dist 10 percap_patch cam_energy 400
     set cam_aM_wt item 0 new_wt
     ask patch-here [set cons_cam cons_cam + item 1 new_wt]
       ]

    set cam_tot_wt sum (map [x -> sum x](list cam_aF_wt cam_aM_wt))  ; Update total cattle wt


  ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  ask hholds with [gt-tot > 0] [

    let move-dist 0
    ifelse past_type = "non-sedentary" [set move-dist (item (ticks) move-cost) * grain / 1000] [set move-dist 0]

    if gt_b > 0 [

    let percap_patch [percap_gt] of patch-here
     let new_wt forage  gt_b_wt 0.3 move-dist 10 percap_patch gt_energy 34
     set gt_b_wt item 0 new_wt
     ask patch-here [set cons_gt cons_gt + item 1 new_wt]

    ]
;;;;;;;;;;;;;;;;;;;;;
     if gt_d > 0 [

     let percap_patch [percap_gt] of patch-here
     let new_wt forage  gt_d_wt 0.3 move-dist 10 percap_patch gt_energy 32
     set gt_d_wt item 0 new_wt
     ask patch-here [set cons_gt cons_gt + item 1 new_wt]

     ]

    set gt_tot_wt sum (map [x -> sum x](list gt_b_wt gt_d_wt))  ; Update total cattle wt


  ]

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ;; Deplete patches
    ;; the fraction of each pool grazed is calculated as follows: (total consumed / total forage) * (fraction of each pool considered) * (fraction deemed unavailable)
   ;;  not all of the  available dead herb and shrub and tree can be cosumed whereas all of the green herb, shrub, and tree is that is available can also be consumed
   ;; For sites where livestock grazing is not simulated (eg. areas outside Kenya, non-pastoral areas in Kenya), we set the fraction grazed to a fixed value

   ask patches with [cons_cat + cons_sh + cons_gt + cons_cam > 0][

    set green_herb (((cons_cat / (cattle-forage + 1)) * (item 0 cat-per-pools)) + ((cons_sh / (sheep-forage + 1)) * (item 0 sh-per-pools)) +((cons_gt / (goat-forage + 1)) * (item 0 gt-per-pools)) + ((cons_cam / (camel-forage + 1)) * (item 0 cam-per-pools))) * ( 1 - unavailable)
    set dead_herb (((cons_cat / (cattle-forage + 1)) * (item 1 cat-per-pools)) + ((cons_sh / (sheep-forage + 1)) * (item 1 sh-per-pools)) +((cons_gt / (goat-forage + 1)) * (item 1 gt-per-pools)) + ((cons_cam / (camel-forage + 1)) * (item 1 cam-per-pools))) * ( 1 - unavailable)
    set green_shrub ( ((cons_cat / (cattle-forage + 1)) * (item 2 cat-per-pools)) + ((cons_sh / (sheep-forage + 1)) * (item 2 sh-per-pools)) +((cons_gt / (goat-forage + 1)) * (item 2 gt-per-pools)) + ((cons_cam / (camel-forage + 1)) * (item 2 cam-per-pools))) * ( 1 - unavailable)
    set dead_shrub (((cons_cat / (cattle-forage + 1)) * (item 3 cat-per-pools)) + ((cons_sh / (sheep-forage + 1)) * (item 3 sh-per-pools)) +((cons_gt / (goat-forage + 1)) * (item 3 gt-per-pools)) + ((cons_cam / (camel-forage + 1)) * (item 3 cam-per-pools))) * ( 1 - unavailable)
    set shrub_brnch (((cons_cat / (cattle-forage + 1)) * (item 4 cat-per-pools)) + ((cons_sh / (sheep-forage + 1)) * (item 4 sh-per-pools)) +((cons_gt / (goat-forage + 1)) * (item 4 gt-per-pools)) + ((cons_cam / (camel-forage + 1)) * (item 4 cam-per-pools))) * ( 1 - unavailable)
    set green_tree (((cons_cat / (cattle-forage + 1)) * (item 5 cat-per-pools)) + ((cons_sh / (sheep-forage + 1)) * (item 5 sh-per-pools)) +((cons_gt / (goat-forage + 1)) * (item 5 gt-per-pools)) + ((cons_cam / (camel-forage + 1)) * (item 5 cam-per-pools))) * ( 1 - unavailable)
    set dead_tree (((cons_cat / (cattle-forage + 1)) * (item 6 cat-per-pools)) + ((cons_sh / (sheep-forage + 1)) * (item 6 sh-per-pools)) +((cons_gt / (goat-forage + 1)) * (item 6 gt-per-pools)) + ((cons_cam / (camel-forage + 1)) * (item 6 cam-per-pools))) * ( 1 - unavailable)
    set tree_brnch (((cons_cat / (cattle-forage + 1)) * (item 7 cat-per-pools)) + ((cons_sh / (sheep-forage + 1)) * (item 7 sh-per-pools)) +((cons_gt / (goat-forage + 1)) * (item 7 gt-per-pools)) + ((cons_cam / (camel-forage + 1)) * (item 7 cam-per-pools))) * ( 1 - unavailable)

  ]


  ask patches with [((cons_cat + cons_sh + cons_gt + cons_cam) = 0) and green_herb > -9999]   ;; Sites where livestock did not graze.
    [
      set green_herb 0.001 * grazing
      set dead_herb 0.001 * grazing
      set green_shrub 0.001 * grazing
      set dead_shrub 0.001 * grazing
      set shrub_brnch 0.0001 * grazing
      set green_tree 0.01 * grazing
      set dead_tree 0.001 * grazing
      set tree_brnch 0.0001 * grazing
  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; In this procedure animals survive or die depending on body condition and they transition to appropriate age cohorts. Two seperate reproters
;; are created (grow-f and grow-m), one for each sex.
;;age: List of ages of inidviduals in each species-sex-age group
;;wt:List of body weights of inidviduals in each species-sex-age group
;; num: Total number of individuals in each species-age-sex group
;; u v w x : Parameters for species and sex specific Brody curves
;;lact-ind: List indicating which females are lactating
;; max-age: Maximum age to which a species lives
;;Meat-from-dead: Total body weight of animals that failed to survive. In the 'produce' procedure, this is used to tally total meat available from dead animals
;; These procedures, body

to-report grow-f [age wt num max-age-wt compare-age compare-wt max-wt lact-ind max-age meat-from-dead dead-an]

  let exp_wt []
  foreach age [x ->
    ifelse x < max-age-wt
     [let pos position x compare-age
      let id-wt item pos compare-wt
      set exp_wt lput id-wt exp_wt]
     [set exp_wt lput max-wt exp_wt]
  ]
   ;let exp_wt map [n -> u * (1 - exp(- v * w * n / x))] age  ;;


  let BC (map [ [a b] -> a / b] wt exp_wt)
  let DR map [i -> 1 -(precision ((exp (-4 + 9 * i )) / (1 + exp (-4 + 9 * i))) 3)] BC    ;;
  set age map [n -> n + 1] age
  let temp n-values num [random-float 1]
  let dead (map [[a b c] -> (ifelse-value a < b [0]
                                          c > max-age [0]
                                              [1])] temp DR age)
  set meat-from-dead []
  (foreach dead wt [[a b] -> set meat-from-dead lput ((1 - a) * b) meat-from-dead])
   set wt (map [ [a b] -> a * b ] dead wt)
   set wt remove 0 wt
   set age (map [[a b] ->  a * b ] dead age)
   set age remove 0 age
   set num length wt
   set lact-ind map [a -> a + 1] lact-ind ;; 0 becomes 1 and 1 becomes 2
   set lact-ind (map [[a b] -> a * b ] dead lact-ind) ;;
   set lact-ind remove 0 lact-ind
   set lact-ind map[a -> a - 1] lact-ind
   set meat-from-dead sum meat-from-dead
   set dead-an (length dead - sum dead)

  report (list age wt num lact-ind meat-from-dead dead-an)
end 

to-report grow-m [age wt num max-age-wt compare-age compare-wt max-wt max-age meat-from-dead dead-an]

  let exp_wt []
  foreach age [x ->
    ifelse x < max-age-wt
     [let pos position x compare-age
      let id-wt item pos compare-wt
      set exp_wt lput id-wt exp_wt]
     [set exp_wt lput max-wt exp_wt]
  ]

  ;let exp_wt map [n -> u * (1 - exp(- v * w * n / x))] age  ;; These brody parms need to be flexible to accommodate multiple species
  let BC (map [ [a b] -> a / b] wt exp_wt)  ; Calculate body condition
  let DR map [i -> precision (1 - (exp (-4 + 9 * i )) / (1 + exp (-4 + 9 * i))) 3] BC ;;Caculate monthly death rate based on body condition. Max monthly survival set to 0.99 from 0.995
  set age map [n -> n + 1] age
  let temp n-values num [random-float 1]
  let dead (map [[a b c] -> (ifelse-value  a < b [0]  ; Animals may die due to poor body condition or age
                                           c > max-age [0]
                                                [1])] temp DR age)
  set meat-from-dead[]
  (foreach dead wt [[a b] -> set meat-from-dead lput ((1 - a) * b) meat-from-dead])
   set wt (map [ [a b] -> a * b ] dead wt)
   set wt remove 0 wt
   set age (map [[a b] ->  a * b ] dead age)
   set age remove 0 age
   set num length wt
   set meat-from-dead sum meat-from-dead
   set dead-an (length dead - sum dead)
   report (list age wt num meat-from-dead dead-an)
end 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Individuals are transitioned to appropriate age cohorts
;; calf: number of pre-weaned individuals of each species in a household
;; weaned-f and weaned-m : List of ages of adult female and male individuals of a species in a household (e.g. ca_aF_ag for adult cows)
;; wean-age: Age at which young ones are weaned and become adults (start consuming forage)
;;lact-ind: List of lactating individuals of each species in a hhold
;; calf_dr: The montly death rate fro pre-weaning individuals of each species
;;calf-wt-mean, calf-wt-sd: The mean weight and standard deviation of individuals at weaning age for each species

to-report transition-age [calf weaned-f weaned-m  weaned-f-wt weaned-m-wt wean-age lact-ind calf_dr calf-wt-mean calf-wt-sd]
if length calf != 0 [
set calf map [a -> a + 1] calf
let i 0
foreach calf [a  ->                        ;; Remove individuals from cohort who do not survive
    ifelse random-float 1 < calf_dr
      [set calf remove-item i calf]
      [set i i + 1]
    ]
 let j 0
 foreach calf [a ->                        ;; Check if surviving individuals are above weaning age
    ifelse a > wean-age [
      ifelse random-float 1 > 0.5      ;; If so, randomly sort them into male and female post weaning (adult) cohorts.
      [set weaned-m lput a weaned-m
       set weaned-m-wt lput (calf-wt-mean + random-normal 0 calf-wt-sd)  weaned-m-wt
       set calf remove-item j calf]
      [set weaned-f lput a weaned-f
       set weaned-f-wt lput (calf-wt-mean + random-normal 0 calf-wt-sd) weaned-f-wt
       set calf remove-item j calf
       set lact-ind lput 0 lact-ind]
      ]
      [set j j + 1]
    ]
  ]

  report (list weaned-f weaned-f-wt weaned-m weaned-m-wt calf lact-ind )
end 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to grow-herd          ;; Here we create a variable that measures the difference between the ideal and realized body weights of herds.
                      ;; We start by drawing weights based on age from a Brody Curve specified for males and females.
                      ;; The weights of each individual is then compared to their ideal weight and a ratio is obtained

  let cat_pop1 sum [cat-tot] of hholds
  let cam_pop1 sum [cam-tot] of hholds
  let gt_pop1 sum [gt-tot] of hholds
  let sh_pop1 sum [sh-tot] of hholds


  ask hholds [set dead-meat 0]
  ;; Grow cattle herd

  ask hholds with [cat-tot > 0 ] [
    let temp_aF  grow-f ca_aF_ag ca_aF_wt ca_aF 16 cat_age cat_wt_age 200 fem_lact 144 dead-meat dead-caF
    set ca_aF_ag item 0 temp_aF
    set ca_aF_wt item 1 temp_aF
    set ca_aF item 2 temp_aF
    set fem_lact item 3 temp_aF
    set dead-meat-ca item 4 temp_aF
    set dead-caF item 5 temp_aF

    let temp_aM  grow-m ca_aM_ag ca_aM_wt ca_aM 18 cat_age cat_wt_age 250 144 dead-meat dead-caM
    set ca_aM_ag item 0 temp_aM
    set ca_aM_wt item 1 temp_aM
    set ca_aM item 2 temp_aM
    set dead-meat-ca  item 3 temp_aM
    set dead-caM item 4 temp_aM

  ; If the ages of individuals are over the maximum for the cohort thery are in , we transition these individuals to the next cofort. If
; it is a birthing month individuals are born to a portion of the females and these calves are added to the calf cohort. Birth rates are functions of the BC of the females

   ;Transition pre-weaning individuals to post-weaning cohort

   let temp_trans transition-age ca_calves_ag ca_aF_ag ca_aM_ag ca_aF_wt ca_aM_wt 8 fem_lact ca_calf_dr 100 2
    set ca_aF_ag item 0 temp_trans
    set ca_aF_wt item 1 temp_trans
    set ca_aM_ag item 2 temp_trans
    set ca_aM_wt item 3 temp_trans
    set ca_calves_ag item 4 temp_trans
    set fem_lact item 5 temp_trans
    ; Update totals: The total number of animals in each cohort is updated to reflect the transitions
     set ca_calves length ca_calves_ag
     set ca_aF length ca_aF_wt
     set ca_aM length ca_aM_wt
     set cat-tot sum (list ca_aF ca_aM)
     ;set cat matrix:from-column-list (list(list ca_aF  ca_aM))
    set ca_tot_wt sum (map [x -> sum x] (list ca_aF_wt ca_aM_wt))]

  ;;; Stochastic loss of herds to conflict; Pastoralists who are on lands outside their county may experience loss of cattle herds to conflict with a 5 % monthly probability

ask hholds[
         let raid-loss-temp 0
         let raid-tribe-temp 0
 if risk = 1 and cat-tot > 0 [

         if random-float 1 < 0.05 [     ;; Any month, there is a 5 % chance of a raid
         set cat-tot 0
         set ca_aF 0
         set ca_aM 0
         set ca_aF_wt []
         set ca_aF_ag []
         set fem_lact []
         set ca_aM_ag []
         set ca_aM_wt []
         set ca_calves 0
         set ca_calves_ag []
         set ca_tot_wt 0
         set raid-loss-temp 1
         set raid-tribe-temp [tribe] of grazing_land]]

  set raid-loss lput raid-loss-temp raid-loss
  set raid-tribe lput raid-tribe-temp raid-tribe

  ]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Grow camel herd


ask hholds with [cam-tot > 0 ] [

 ; DETERMINE DEATH RATES BASED ON BODY CONDITION AND ADJUST COHORTS
    let temp_cam_aF  grow-f cam_aF_ag cam_aF_wt cam_aF 17 cam_age cam_wt_age 350 cam_fem_lact 288 dead-meat-cam dead-camF
    set cam_aF_ag item 0 temp_cam_aF
    set cam_aF_wt item 1 temp_cam_aF
    set cam_aF item 2 temp_cam_aF
    set cam_fem_lact item 3 temp_cam_aF
    set dead-meat-cam item 4 temp_cam_aF
    set dead-camF item 5 temp_cam_aF

    let temp_cam_aM  grow-m cam_aM_ag cam_aM_wt cam_aM 19 cam_age cam_wt_age 400 288 dead-meat-cam dead-camM
    set cam_aM_ag item 0 temp_cam_aM
    set cam_aM_wt item 1 temp_cam_aM
    set cam_aM item 2 temp_cam_aM
    set dead-meat-cam item 3 temp_cam_aM
    set dead-camM item 4 temp_cam_aM

 ;  Transition to post weaning cohorts all calves older than 7 months

    let temp_trans2 transition-age cam_calves_ag cam_aF_ag cam_aM_ag cam_aF_wt cam_aM_wt 7 cam_fem_lact cam_calf_dr 150 2
    set cam_aF_ag item 0 temp_trans2
    set cam_aF_wt item 1 temp_trans2
    set cam_aM_ag item 2 temp_trans2
    set cam_aM_wt item 3 temp_trans2
    set cam_calves_ag item 4 temp_trans2
    set cam_fem_lact item 5 temp_trans2

    ; Update totals: The total number of animals in each cohort is updated to reflect the transitions
     set cam_calves length cam_calves_ag
     set cam_aF length cam_aF_wt
     set cam_aM length cam_aM_wt
     set cam-tot sum (list cam_aF cam_aM)
     ;set cam matrix:from-column-list (list(list cam_aF  cam_aM))
     set cam_tot_wt sum (map [x -> sum x] (list cam_aF_wt cam_aM_wt))

  ]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  ; Grow goat herd
  ask hholds with [gt-tot > 0 ] [

  ; DETERMINE DEATH RATES BASED ON BODY CONDITION AND ADJUST COHORTS
    let temp_gt_d  grow-f gt_d_ag gt_d_wt gt_d 16 gt_age gt_wt_age 32 gt_fem_lact 60 dead-meat-gt dead-gtd
    set gt_d_ag item 0 temp_gt_d
    set gt_d_wt item 1 temp_gt_d
    set gt_d item 2 temp_gt_d
    set gt_fem_lact item 3 temp_gt_d
    set dead-meat-gt item 4 temp_gt_d
    set dead-gtd item 5 temp_gt_d

    let temp_gt_b  grow-m gt_b_ag gt_b_wt gt_b 17 gt_age gt_wt_age 34 60 dead-meat-gt dead-gtb
    set gt_b_ag item 0 temp_gt_b
    set gt_b_wt item 1 temp_gt_b
    set gt_b item 2 temp_gt_b
    set dead-meat-gt item 3 temp_gt_b
    set dead-gtb item 4 temp_gt_b


  ;;Transition individuals between pre and post weaning cohorts

    let temp_trans3 transition-age gt_kids_ag gt_d_ag gt_b_ag gt_d_wt gt_b_wt 3 gt_fem_lact gt_kids_dr 10 1
    set gt_d_ag item 0 temp_trans3
    set gt_d_wt item 1 temp_trans3
    set gt_b_ag item 2 temp_trans3
    set gt_b_wt item 3 temp_trans3
    set gt_kids_ag item 4 temp_trans3
    set gt_fem_lact item 5 temp_trans3

 ; Update totals: The total number of animals in each cohort is updated to reflect the transitions
     set gt_kids length gt_kids_ag
     set gt_d length gt_d_wt
     set gt_b length gt_b_wt
     set gt-tot sum (list gt_d gt_b)
     ;set gt matrix:from-column-list (list(list gt_d  gt_b))
     set gt_tot_wt sum (map [x -> sum x] (list gt_d_wt gt_b_wt))

  ]

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ; Grow sheep herd
  ask hholds with [sh-tot > 0 ] [

  ; DETERMINE DEATH RATES BASED ON BODY CONDITION AND ADJUST COHORTS
    let temp_sh_e  grow-f sh_e_ag sh_e_wt sh_e 14 sh_age sh_wt_age 32 sh_fem_lact 60 dead-meat-sh dead-she
    set sh_e_ag item 0 temp_sh_e
    set sh_e_wt item 1 temp_sh_e
    set sh_e item 2 temp_sh_e
    set sh_fem_lact item 3 temp_sh_e
    set dead-meat-sh item 4 temp_sh_e
    set dead-she item 5 temp_sh_e

   let temp_sh_r  grow-m sh_r_ag sh_r_wt sh_r 14 sh_age sh_wt_age 34 60 dead-meat-sh dead-shr
    set sh_r_ag item 0 temp_sh_r
    set sh_r_wt item 1 temp_sh_r
    set sh_r item 2 temp_sh_r
    set dead-meat-sh item 3 temp_sh_r
    set dead-shr item 4 temp_sh_r

  ; TRANSITION INDIVIDUALS between pre and post weaning cohorts

    let temp_trans4 transition-age sh_lambs_ag sh_e_ag sh_r_ag sh_e_wt sh_r_wt 3 sh_fem_lact sh_lambs_dr 10 1
    set sh_e_ag item 0 temp_trans4
    set sh_e_wt item 1 temp_trans4
    set sh_r_ag item 2 temp_trans4
    set sh_r_wt item 3 temp_trans4
    set sh_lambs_ag item 4 temp_trans4
    set sh_fem_lact item 5 temp_trans4

; Update totals: The total number of animals in each cohort is updated to reflect the transitions
     set sh_lambs length sh_lambs_ag
     set sh_e length sh_e_wt
     set sh_r length sh_r_wt
     set sh-tot sum (list sh_e sh_r)
     ;set shp matrix:from-column-list (list(list sh_e  sh_r))
     set sh_tot_wt sum (map [x -> sum x] (list cam_aF_wt cam_aM_wt))

  ]

  set cat-dr ((sum [dead-caM + dead-caF] of hholds) / cat_pop1) * 100
  set cam-dr ((sum [dead-camM + dead-camF] of hholds) / cam_pop1) * 100
  set gt-dr ((sum [dead-gtd + dead-gtb] of hholds) / gt_pop1) * 100
  set sh-dr ((sum [dead-shr + dead-she] of hholds) / sh_pop1) * 100
end 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Animals reproduce and produce milk
;;min_age - max_age; Min and maximuma ge of reporduction for each species
;;rep-calendar: Month when species reproduce
;;lactating-ind Species specific list of lactating individuals in a hhold
;; fem-age, fem-wt List with ages and weights of female cohort of each species
;; calves- total number of pre-weanied individuals of each speceies
;;calf-ag - lsit with ages of pre-weaned individuals of each species
;; milk-calendar- motnhs when each species produces milk
;; sp-milk-prod - maximum mulk production by the species in that month
;; sp-milk - total milk prduced by the species that month in a month
;; j k l m -- Species specific Brody parameters
;; rep-rate -- The fraction of adult females of each species that can reproduce in any given year

to-report reproduce [min_age max_age rep-calendar lactating-ind fem-age fem-wt calves calf-ag milk-calendar sp-milk-prod rep-rate compare-age compare-wt max-age-wt max-wt ]

  set month ticks - (12 * floor (ticks / 12))
    if member? ticks n-values years [x -> x * 12] [ set month 0]



 if item (month)  rep-calendar = 1 [
      set lactating-ind []                                                           ; Reset the lactation tracker
        let expWt []
        foreach fem-age [x ->
        ifelse x < max-age-wt
       [let pos position x compare-age
       let id-wt item pos compare-wt
         set expWt lput id-wt expWt]
        [set expWt lput max-wt expWt]]                                                 ; calculate expected wt for females
      let BC_aF (map [ [a b] -> a / b ] fem-wt expWt)                                ; Caluclate body condition for females

      (foreach BC_aF fem-age
         [ [a b] -> ifelse (a >= 0.8 and b < max_age and b > min_age and random-float 1 < (item month rep-rate))  ; Only females with body condition above 0.8 and age between min and max years can breed (Arbitrary!)
                                                            ; Individuals that meet this requirement produce one calf and enter lactation status.
          [set calves calves + 1                            ; Individuals that do not meet this requirement do not reproduce and do not lactate.
             set calf-ag fput  0 calf-ag
             set lactating-ind lput 1 lactating-ind]
          [  set calves calves
             set calf-ag calf-ag
             set lactating-ind lput 0 lactating-ind]
                    ])

       ]

  let milk-produced 0
  ifelse item month milk-calendar = 1  and lactating-ind != 0                 ; If it is a milking month each household gets milk depending on number of lactating females
    [   let expWt []
        foreach fem-age [x ->
        ifelse x < max-age-wt
       [let pos position x compare-age
       let id-wt item pos compare-wt
         set expWt lput id-wt expWt]
        [set expWt lput max-wt expWt]]                  ; calculate expected wt for females
      let BC_aF (map [ [a b] -> a / b ] fem-wt expWt)                                ; Caluclate body condition for females
      set milk-produced (sum lactating-ind) * item month sp-milk-prod * mean BC_aF ]         ; Milk production is determined by body condition.
     [set milk-produced 0]

   report (list lactating-ind calves calf-ag milk-produced)
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to produce   ;; parms based on McCabe 2004

 ask hholds [set cow-milk 0
             set camel-milk 0
             set gt-milk 0
             set sh-milk 0]





  ask turtles with [ca_aF > 0]  [
   let production reproduce 36 120 cat-breed fem_lact ca_aF_ag ca_aF_wt ca_calves ca_calves_ag cat-milk milk_prod cat-rep-rate cat_age cat_wt_age 16 200
   set fem_lact item 0 production
   set ca_calves item 1 production
   set ca_calves_ag item 2 production
   set cow-milk item 3 production ]

 ask turtles with [cam_aF > 0]  [
   let production reproduce 48 240 cam-breed cam_fem_lact cam_aF_ag cam_aF_wt cam_calves cam_calves_ag cam-milk cam_milk_prod cam-rep-rate cam_age cam_wt_age 17 350
   set cam_fem_lact item 0 production
   set cam_calves item 1 production
   set cam_calves_ag item 2 production
   set camel-milk item 3 production ]


 ask turtles with [gt_d > 0]  [
   let production reproduce 18 60 shoat-breed gt_fem_lact gt_d_ag gt_d_wt gt_kids gt_kids_ag shoat-milk shoat_milk_prod sht-rep-rate gt_age gt_wt_age 16 32
   set gt_fem_lact item 0 production
   set gt_kids item 1 production
   set gt_kids_ag item 2 production
   set gt-milk item 3 production ]


 ask turtles with [sh_e > 0]  [
   let production reproduce 18 60 shoat-breed sh_fem_lact sh_e_ag sh_e_wt sh_lambs sh_lambs_ag shoat-milk shoat_milk_prod sht-rep-rate sh_age sh_wt_age 14 32
   set sh_fem_lact item 0 production
   set  sh_lambs item 1 production
   set sh_lambs_ag item 2 production
   set sh-milk item 3 production ]


set month ticks - (12 * floor (ticks / 12))
 if member? ticks n-values years [x -> x * 12] [ set month 0]

  if item month m_harvest = 1
    [ask turtles with [agrop = 1]
      [let maize_produced  ((ag_land * greenH / 1500) * 1000)   ; Maize harvest is set at 1000 kgs per hectare in the best possible scenario. Its depelted as a proportion of
                                                             ;; current green herb biomass relative to a high maximum value (1500 gm / sq m).
                                                              ;; Maize is sold at maize price and input costs are subtratced. input cost = 1200ksh / 90kg
      set cash_in_hand cash_in_hand + (maize_produced * maize_price) - ((maize_produced / 90) * 1200)]]
end 





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Calories requirement and calories from various sources are tallied. First hholds calorie requirements are tallied as the calorie required per adult equivalent for the month

to calorie-counter


  set month ticks - (12 * floor (ticks / 12))
    if member? ticks n-values years [x -> x * 12] [ set month 0]



  ask hholds [

    set food_sufficiency ""             ; reset household food sufficiency values


    set tot_calreq_month sum (map [[a b] -> a * b ] hh_mem mem_calreq) * (item month m_days)  ; Total calories required by hhold each month

    ; Total calories from milk
    set cal_milk (milk_cal_cow * cow-milk) + (milk_cal_cam * camel-milk)  + (milk_cal_sh * sh-milk) + (milk_cal_gt * gt-milk)  ; Calories from milk
    ; Total calories from maize
    set cal_maize maize_cal * maize
    ; Total calories from animals that died of natural causes
    set dead-meat dead-meat-ca + dead-meat-cam + dead-meat-gt + dead-meat-sh

    ;; Determine if slaughter occurs and determine calories obtained from meat; Here we assume ceremonial slaughter of a bull

    let slaughter 0
   if random-float 1 < opportunistic_slaughter [set slaughter 1]  ; opportunistic slaughter is the probability of slaughter in a month

   if slaughter = 1 and (sh_r > 0 or gt_b > 0)[   ; Whether ram or buck is killed depends on abundance

     if sh_r > gt_b
     [let animal_slaughtered random sh_r  ; pick the id of the animal that is slaughtered
       set cal_meat meat_cal * (item animal_slaughtered sh_r_wt * 0.3 + dead-meat * 0.3 * 0.3)   ; 30 % of the weight of the animal slaughtered is available
       set sh_r_ag remove-item animal_slaughtered sh_r_ag                                        ; Total meat from dead is the weight of slaughtered animal and 9 % of the total
       set sh_r_wt remove-item animal_slaughtered sh_r_wt                                        ; weight of animals that died from natural causes. 30% dead animals retrieved and 30 % of retrieved
       set sh_r length sh_r_wt]                                                                  ; dead animals may be consumed


     if sh_r < gt_b
     [let animal_slaughtered random gt_b  ; pick the id of the animal that is slaughtered
       set cal_meat meat_cal * (item animal_slaughtered gt_b_wt * 0.3 + dead-meat * 0.3 * 0.3)   ; 30 % of the weight of the animal slaughtered is available
       set gt_b_ag remove-item animal_slaughtered gt_b_ag                                        ; Total meat from dead is the weight of slaughtered animal and 9 % of the total
       set gt_b_wt remove-item animal_slaughtered gt_b_wt                                        ; weight of animals that died from natural causes. 30% dead animals retrieved and 30 % of retrieved
       set gt_b length gt_b_wt]
    ]



    if slaughter = 0
    [set cal_meat meat_cal * dead-meat * 0.95 * 0.3]; dead animal weights * proportion edible animals * proprotion body weight that can be consumed

    set liv_cal (cal_meat + cal_milk) / tot_calreq_month
    ;; Update livestock totals and weight

    set sh-tot sum (list sh_r sh_e)
    set sh_tot_wt sum (map [x -> sum x] (list sh_r_wt sh_e_wt))

    set gt-tot sum (list gt_b gt_d)
    set gt_tot_wt sum (map [x -> sum x] (list gt_b_wt gt_d_wt))

    set cal_ava (cal_milk + cal_meat + cal_maize)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  Determine cal needs remaining after calories from milk is used

    set maize_cons 0
    set cal_needs 0

   set cal_needs1 tot_calreq_month - cal_milk


    ifelse cal_needs1 <=  0                                 ; if sufficient milk is available, fill caories needs with milk
      [set cal_needs 0                                      ; if not, deplete milk and set food sufficiency as deficient
       set food_sufficiency  "sufficient"
       set sufficiency-source  "milk"
       set cal_milk cal_milk - tot_calreq_month]
      [set food_sufficiency  "deficient"
       ifelse cal_milk > 0 [set sufficiency-source "milk"][set sufficiency-source ""]
       set cal_needs cal_needs1
       set cal_milk 0

    ]
  ]

  ask hholds with [food_sufficiency = "deficient"][       ; if sufficient meat is available, fill remaining caories needs with meat
       set cal_needs2 cal_needs - cal_meat                 ; if not, deplete meat and set food sufficiency as deficient

       ifelse cal_needs2 <= 0
      [set food_sufficiency  "sufficient"
       set sufficiency-source  (word sufficiency-source "meat")
       set cal_meat cal_meat - cal_needs
       set cal_needs 0]
      [set food_sufficiency  "deficient"
       ifelse cal_meat > 0 [set sufficiency-source (word sufficiency-source "meat")][set sufficiency-source (word sufficiency-source "")]
       set cal_meat 0
       set cal_needs cal_needs2
       ]
      ]

  ask hholds with [food_sufficiency = "deficient"] [       ; if sufficient maize is available, fill remaining caories needs with maize
      set cal_needs3 cal_needs - cal_maize                  ; if not, deplete maize and set food sufficiency as deficient
      ifelse cal_needs3 <= 0
    [set food_sufficiency  "sufficient"
     set sufficiency-source  (word sufficiency-source "maize")
     set maize maize - (cal_needs / maize_cal)
      set maize_cons (cal_needs / maize_cal)
      set cal_needs 0]

    [set food_sufficiency  "deficient"
     ifelse cal_maize > 0 [set sufficiency-source (word sufficiency-source "maize")][set sufficiency-source (word sufficiency-source "")]
      set maize_cons maize
      set maize 0
     set cal_needs cal_needs3
     ]
  ]

  ask hholds with [food_sufficiency = "deficient"] [           ; Food deficient holds are those that fail to meet less than 90 % of total monthly calorie needs. Label rest as sufficient.
     ifelse cal_needs > 0.1 * tot_calreq_month
    [set food_sufficiency  "deficient"]
     [set food_sufficiency  "sufficient"]
    ]

  ask hholds [ifelse maize_cons * maize_cal > 0.8 * tot_calreq_month [set store_cal 1][set store_cal 0]]
end 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; The recurring monthly expenses and income is tallied and differences drive livestock purchase and sales decisions. An economic state determines whether household is in debt or is assetless
;; The expenses and income are tallied over a three month period, the current month + two months in the future. So when income is gained in the current month, some of it is used to pay off the
;; months expenses. Similarly, the cash in hand reflects existing cash earned from sales and income for the month.

to cash-flow


set month ticks - (12 * floor (ticks / 12))
    if member? ticks n-values years [x -> x * 12] [ set month 0]


  ask hholds [            ; Six temporary indicators of whether sale or purchase of each livestock type occurs in the month

  set sales_ca 0
  set sales_cam 0
  set sales_sht 0
  set purchases_ca 0
  set purchases_cam 0
  set purchases_sht 0
  set sale_income 0

   set assets 0 ; reset indicator of asset holdings
    ;; Calculate monthly expenses as sum of general veterinary food expenses and the expenses towards meeting calorie deficits.
   let temp-TLU cam-tot + cat-tot  + gt-tot * 0.1 + sh-tot * 0.1 ; Convert livestock holding to TLU

   ;; Tally expenses

   let expenses ((AE *  100) + (temp-TLU * 25) +  ((tot_calreq_month / 3700) * Maize_price) ) * 3  ; 100 Ksh  general expenses per family member; We assume 25 Ksh / TLU as vet expenses Thornton et al., 2014;


   set cash_in_hand cash_in_hand + labour  + business + base_income ; Update cash in hand with income from labour , business or base_income for the month

   let income cash_in_hand + ((labour + business + base_income) * 2)     ;; income is what is available in hand + current month income + income over next 2 months from assured sources (labour, business)


    ;; If expenses  are greater than income
    if expenses >  income                                               ; If expenses are greater that twice the income.

          [ifelse cat-tot > 0 or gt-tot > 0 or sh-tot > 0 or cam-tot > 0   ;If the hhold has any livestock
           [ifelse expenses -  income  > 10000                              ; and If expenses - income are greater than 5000 Ksh
              [set sell  0                                                 ; start steps to sell one or more individuals. There is a preference to sell males over females

             if sell = 0 and ca_aM > 1                                     ; If an adult bull is avaialble, sell it.

                 [let animal_sold position (max ca_aM_wt)  ca_aM_wt
                     set ca_aM_wt remove-item animal_sold ca_aM_wt
                     set ca_aM_ag remove-item animal_sold ca_aM_ag
                     set ca_aM length ca_aM_wt
                     set cash_in_hand cash_in_hand + item month income_catcam
                     set sell 1
                     set sales_ca 1
                     set sale_income item month income_catcam]

             if sell = 0 and ca_aF > 1                                     ; Else sell a cow if one is available
                   [let animal_sold position (max ca_aF_wt) ca_aF_wt
                     set ca_aF_wt remove-item animal_sold ca_aF_wt
                     set ca_aF_ag remove-item animal_sold ca_aF_ag
                     set fem_lact remove-item animal_sold fem_lact
                     set ca_aF length ca_aF_wt
                     set cash_in_hand cash_in_hand + item month income_catcam
                     set sell 1
                     set sales_ca 1
                     set sale_income item month income_catcam]

             if sell = 0 and cam_aM > 1                                     ; Else sell a bull camel if one is available
                   [ let animal_sold position (max cam_aM_wt)  cam_aM_wt
                     set cam_aM_wt remove-item animal_sold cam_aM_wt
                     set cam_aM_ag remove-item animal_sold cam_aM_ag
                     set cam_aM length cam_aM_wt
                     set cash_in_hand cash_in_hand + item month income_catcam
                     set sell 1
                     set sales_cam 1
                     set sale_income item month income_catcam]

             if sell = 0 and cam_aF > 1                                      ; Else sell a cow camel if one is available
                   [let animal_sold position (max cam_aF_wt) cam_aF_wt
                     set cam_aF_wt remove-item animal_sold cam_aF_wt
                     set cam_aF_ag remove-item animal_sold cam_aF_ag
                     set cam_aF length cam_aF_wt
                     set cam_fem_lact remove-item animal_sold cam_fem_lact
                     set cash_in_hand cash_in_hand + item month income_catcam
                     set sell 1
                     set sales_cam 1
                     set sale_income item month income_catcam]

                if sell = 0 and sh_r > 3        ; or sell rams
                    [let num_sold 3
                     set sh_r_wt sublist sh_r_wt 3 sh_r
                     set sh_r_ag sublist sh_r_ag 3 sh_r
                     set sh_r length sh_r_wt
                     set cash_in_hand cash_in_hand + (item month income_shoat) * num_sold
                     set sell 1
                     set sales_sht num_sold
                     set sale_income (item month income_shoat) * num_sold]


              if sell = 0 and gt_b > 3         ; Else sell as may bucks as needed to earn amount needed
                    [let num_sold 3
                     set gt_b_wt sublist gt_b_wt 3 gt_b
                     set gt_b_ag sublist gt_b_ag 3 gt_b
                     set gt_b length gt_b_wt
                     set cash_in_hand cash_in_hand + (item month income_shoat) * num_sold
                     set sell 1
                     set sales_sht num_sold
                     set sale_income (item month income_shoat) * num_sold]

                   ]

                [set sell 0                                                     ;; If expenses are less than 3000 KsH; smaller stock are sold if at least 2 individuals are available

                 if sell = 0 and sh_r > 3
                    [let num_sold 1
                     set sh_r_wt sublist sh_r_wt 1 sh_r
                     set sh_r_ag sublist sh_r_ag  1 sh_r
                     set sh_r length sh_r_wt
                     set cash_in_hand cash_in_hand + item month income_shoat
                     set sell 1
                     set sales_sht num_sold
                     set sale_income item month income_shoat]

                if sell = 0 and gt_b > 3                                    ;; with a preference to sell males.
                    [let num_sold 1
                     set gt_b_wt sublist gt_b_wt 1 gt_b
                     set gt_b_ag sublist gt_b_ag 1 gt_b
                     set gt_b length gt_b_wt
                     set cash_in_hand cash_in_hand + item month income_shoat
                     set sell 1
                     set sales_sht num_sold
                     set sale_income item month income_shoat]

                 if sell = 0 and sh_e > 3
                    [let num_sold 1
                     set sh_e_wt sublist sh_e_wt 1 sh_e
                     set sh_e_ag sublist sh_e_ag  1 sh_e
                     set sh_fem_lact sublist sh_fem_lact 1 sh_e
                     set sh_e length sh_e_wt
                     set cash_in_hand cash_in_hand + item month income_shoat
                     set sell 1
                     set sales_sht num_sold
                     set sale_income item month income_shoat]

                if sell = 0 and gt_d > 3
                    [let num_sold 1
                     set gt_d_wt sublist gt_d_wt 1 gt_d
                     set gt_d_ag sublist gt_d_ag 1 gt_d
                     set gt_fem_lact sublist gt_fem_lact 1 gt_d
                     set gt_d length gt_d_wt
                     set cash_in_hand cash_in_hand + item month income_shoat
                     set sell 1
                     set sales_sht num_sold
                     set sale_income item month income_shoat]





                       ]
                  ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;ELSE  If livestock are not available

   [if cat-tot = 0 and gt-tot = 0 and sh-tot = 0 and cam-tot = 0 [set assets "assetless"]]]     ; If no livestock are avaiable to sell,
                                                                                                        ; if expenses not covered, set assetless

 ;; Update all livestock totals
    set cat-tot sum (list ca_aF ca_aM)
    ;set cat matrix:from-column-list (list(list ca_aF  ca_aM))
    set ca_tot_wt sum (map [x -> sum x] (list ca_aF_wt ca_aM_wt))

   set cam-tot sum (list cam_aF cam_aM)
   set cam_tot_wt sum (map [x -> sum x] (list cam_aF_wt cam_aM_wt))

    set gt-tot sum (list gt_b gt_d)
    set gt_tot_wt sum (map [x -> sum x] (list gt_b_wt gt_d_wt))

    set sh-tot sum (list sh_r sh_e)
    set sh_tot_wt sum (map [x -> sum x] (list sh_r_wt sh_e_wt))

    set liv_sales_income lput sale_income liv_sales_income
; Deplete cash in hand to account for the months expenses such as general expenses, veterinary expenses and food expenses
 ;; Set maize stores food expenses / cost of unit calorie.
 ;; Prioritize food expenses first. If money is available, use it to buy food. Then decide if money can be used to complete other expenses.

    let food_money  cash_in_hand                                  ;; Maize available is compared against minimum needed to meet cal needs; 3700 kcal / kg maize
    let maize_needs (tot_calreq_month) / 3700

    if maize < (maize_needs) [                                            ;; if maize stores are less than the minimum needed
       ifelse food_money < maize_needs * Maize_price                             ;; ifelse cash in hand is less than needed


       [set maize maize + (food_money / Maize_price)
        set expenses expenses - (food_money)                          ;; If money is spent on maize, update expenses and cash_in_hand
        set cash_in_hand 0
        set maize_purchased (food_money / Maize_price)]

       [set maize maize + maize_needs                                ;; Use money for monthly food expeneses (150 Ksh / member) to update maize stores. 50 ksh /kg maize.Do this only if store is depleted
        set expenses expenses - (Maize_price * maize_needs)                       ;; If money is spent on maize, update expenses and cash_in_hand
        set cash_in_hand cash_in_hand - (maize_needs * Maize_price)
        set maize_purchased maize_needs]
    ]

    ifelse cash_in_hand > ((AE * 100) + (temp-TLU * 25))              ;; Can cash in hand (money from previous month + this months income) meet the months expenses?

     [set cash_in_hand cash_in_hand - ((AE * 50) + (temp-TLU * 25))  ;; The months genral and veterniary expenses are taken care of
      set expenses expenses - ((AE * 100) + (temp-TLU * 25))         ;; Adjust expenses to reflect this reality
      set economic_state lput "nodebt" economic_state]

    [ set cash_in_hand 0
      set economic_state lput "debt" economic_state]

     set income cash_in_hand + ((labour +  business + base_income) * 2)   ;; Update income to reflect the expenses that were met
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Buying livestock
;; A distinction is made between homes that traditionally did and did not own camels. The ones that did not can look back over the last two years and assess the performance of cattle herds
;; and make a decision to buy camels for the first time. This is intended as an adaptive response. Homes that did traditionally own camels can assess performance of both cattle and camel herds
;; and decide based on performance what animal to buy

    set purchases_ca 0
    set purchases_sht 0
    set purchases_cam 0


   if   expenses <  income and food_sufficiency = "sufficient" [  ;;  Triggers to buy livestock . if income is > than anticipated expenses and hhold is not calorie deficient

      if  cash_in_hand > 10000 and camel-owner = 0 [         ; if household did not traditionally own camels and a large sum of cash is available

        let temp_lambda 1
        ifelse length hh-cat-lam > 24 [set temp_lambda mean (sublist hh-cat-lam (ticks - 23) (ticks - 1) )]  ;; Cattle survival over last 24 timesteps.
                      [set temp_lambda 1]
     ;else
        let sp 0                                                  ;; Buy sheep, goat or camels with roughly equal probability
         let temp random-float 1
          set sp (ifelse-value temp < 0.85 ["cat"]
                               temp < 0.9 ["gt" ]
                               temp < 0.95 ["shp"]
                                          ["cam"])

       if sp = "cat" and cat-tot < 200 [                                        ;  If cattle lambda over alst 2 years is greater than 0.9 or total cattle is less than the adult equivalents in the house

         ifelse ca_aM < 0.1 * cat-tot                                           ; if males are less than 10 % of the stock then buy a male, else buy females
            [set ca_aM ca_aM + 1
             set ca_aM_wt lput (floor abs random-normal 240 1) ca_aM_wt
             set ca_aM_ag lput  (random (84 - 36 + 1) + 36) ca_aM_ag
             set cash_in_hand cash_in_hand - (item month income_catcam)
             set purchases_ca 1]

             [set ca_aF ca_aF + 1
             set ca_aF_wt lput (floor abs random-normal 190 1) ca_aF_wt
             set ca_aF_ag lput  (random (45 - 37 + 1) + 37) ca_aF_ag
             set fem_lact lput 0 fem_lact
             set cash_in_hand cash_in_hand - (item month income_catcam)
             set purchases_ca 1]
           ]

          if sp = "gt" and gt-tot < 500[
            set gt_d gt_d + 3
            set gt_d_wt sentence gt_d_wt n-values 3 [random-normal 30 1]
            set gt_d_ag sentence gt_d_ag n-values 3 [24]
            set gt_fem_lact sentence gt_fem_lact n-values 3 [0]
            set cash_in_hand cash_in_hand - (item month income_shoat) * 3
            set purchases_sht 3]

          if sp = "shp" and sh-tot < 500
             [set sh_e sh_e + 3
             set sh_e_wt sentence sh_e_wt n-values 3 [random-normal 30 1]
             set sh_e_ag sentence sh_e_ag n-values 3 [24]
             set sh_fem_lact sentence sh_fem_lact n-values 3 [0]
             set cash_in_hand cash_in_hand - (item month income_shoat) * 3
             set purchases_sht 3]

         if sp = "cam" and cam-tot < 150
             [set cam_aF cam_aF + 1
             set cam_aF_wt lput (random-normal 350 1) cam_aF_wt
             set cam_aF_ag lput 60 cam_aF_ag
             set cam_fem_lact lput 0 cam_fem_lact
             set cash_in_hand cash_in_hand - (item month income_catcam)
             ;set camel-owner 1
             set purchases_cam 1]
          ]


  ;; Now look at households that are traditionally camel owners

     if cash_in_hand > 10000 and camel-owner = 1 [         ; if household did traditionaly own camels

        let sp  0
        let temp-lam-cam 1
        let temp-lam-cat 1
        ;let temp-random random-float 1

       ; ifelse length hh-cam-lam > 12 [set temp-lam-cam mean (sublist hh-cam-lam (ticks - 11) (ticks - 1))] [set temp-lam-cam 1]
        ;ifelse length hh-cat-lam > 12 [set temp-lam-cat mean (sublist hh-cat-lam (ticks - 11) (ticks - 1))] [set temp-lam-cat 1]

        ;set sp (ifelse-value temp-lam-cat > 0.9 ["cat"]   ; Do camel herds lose less than 20 % individuals monthly on average over 2 years
         ;                    temp-random < 0.6 ["cam"]   ; Do cattle herds lose less than 20 % individuals monthly on average over 2 years
          ;                   temp-random < 0.8 ["shp"] ; If above two are not true, then buy either sheep or goat (50 % probability)
            ;                                   ["gt"])
          let temp-random random-float 1
          set sp (ifelse-value temp-random < 0.4 ["cat"]   ; Do camel herds lose less than 20 % individuals monthly on average over 2 years
                               temp-random < 0.8 ["cam"]    ; Do cattle herds lose less than 20 % individuals monthly on average over 2 years
                               temp-random < 0.9 ["gt"]
                                                 ["shp"])


        if sp = "gt" and gt-tot < 500[
           set gt_d gt_d + 3
            set gt_d_wt sentence gt_d_wt n-values 3 [random-normal 30 1]
            set gt_d_ag sentence gt_d_ag n-values 3 [24]
            set gt_fem_lact sentence gt_fem_lact n-values 3 [0]
            set cash_in_hand cash_in_hand - (item month income_shoat) * 3
            set purchases_sht 3]

          if sp = "shp" and sh-tot < 500
             [set sh_e sh_e + 3
             set sh_e_wt sentence sh_e_wt n-values 3 [random-normal 30 1]
             set sh_e_ag sentence sh_e_ag n-values 3 [24]
             set sh_fem_lact sentence sh_fem_lact n-values 3 [0]
             set cash_in_hand cash_in_hand - (item month income_shoat) * 3
             set purchases_sht 3]

         if sp = "cam" and cam-tot < 150
             [set cam_aF cam_aF + 1
             set cam_aF_wt lput (random-normal 350 1) cam_aF_wt
             set cam_aF_ag lput 60 cam_aF_ag
             set cam_fem_lact lput 0 cam_fem_lact
             set cash_in_hand cash_in_hand - (item month income_catcam)
             set purchases_cam 1]

         if sp = "cat" and cat-tot < 200
        [set ca_aF ca_aF + 1
             set ca_aF_wt lput (floor abs random-normal 190 1) ca_aF_wt
             set ca_aF_ag lput  (random (45 - 37 + 1) + 37) ca_aF_ag
             set fem_lact lput 0 fem_lact
             set cash_in_hand cash_in_hand - (item month income_catcam)
             set purchases_ca 1]

      ]



     set cat-tot sum (list ca_aF ca_aM)                             ; Update all the livestock entries.
     set ca_tot_wt sum (map [x -> sum x] (list ca_aF_wt ca_aM_wt))

     set cam-tot sum (list cam_aF cam_aM)                             ; Update all the livestock entries.
     set cam_tot_wt sum (map [x -> sum x] (list cam_aF_wt cam_aM_wt))

     set gt-tot sum (list gt_d gt_b)                             ; Update all the livestock entries.
     set gt_tot_wt sum (map [x -> sum x] (list gt_b_wt gt_d_wt))

     set sh-tot sum (list sh_r sh_e)                             ; Update all the livestock entries.
     set sh_tot_wt sum (map [x -> sum x] (list sh_r_wt sh_e_wt))

;;; If cash available is less than 10000 but greater than 3000


    if cash_in_hand > 5000 and cash_in_hand < 10000 [

       let sp 0
       ifelse random-float 1 < 0.6 [set sp "gt" ] [set sp "shp"]
       if sp = "gt" and gt-tot < 500[

             set gt_d gt_d + 1
             set gt_d_wt lput (floor abs random-normal 30 1) gt_d_wt
             set gt_d_ag lput  (random (36 - 12 + 1) + 12) gt_d_ag
             set gt_fem_lact lput 0 gt_fem_lact
             set cash_in_hand cash_in_hand - (item month income_shoat)
             set purchases_sht 1]
       if sp = "shp" and sh-tot < 500
             [set sh_e sh_e + 1
             set sh_e_wt lput (floor abs random-normal 30 1) sh_e_wt
             set sh_e_ag lput  (random (36 - 12 + 1) + 12) sh_e_ag
             set sh_fem_lact lput 0 sh_fem_lact
             set cash_in_hand cash_in_hand - (item month income_shoat)
             set purchases_sht 1]
      ]

     set gt-tot sum (list gt_d gt_b)                             ; Update all the livestock entries.
     set sh-tot sum (list sh_e sh_r)
     ;set cat matrix:from-column-list (list(list ca_aF  ca_aM))
     set gt_tot_wt sum (map [x -> sum x] (list gt_b_wt gt_d_wt))
     set sh_tot_wt sum (map [x -> sum x] (list sh_r_wt sh_e_wt))

    ]
   ;; Update counters for sales and purchases
  set sales_ca_m lput sales_ca sales_ca_m
  set sales_cam_m lput sales_cam sales_cam_m
  set sales_sht_m lput sales_sht sales_sht_m
  set purchases_ca_m lput purchases_ca purchases_ca_m
  set purchases_cam_m lput purchases_cam purchases_cam_m
  set purchases_sht_m lput purchases_sht purchases_sht_m

  ]
end 

to exchange-stock   ;; If green herb availability is deemed high then hholds exchange 3 goats for a cow from the market.

  set month ticks - (12 * floor (ticks / 12))
    if member? ticks n-values years [x -> x * 12] [ set month 0]

if month = 2 [                      ;; In March, hholds with more than 20 does and green pastures
  ask hholds with [gt_d > 20 and [greenH] of grazing_land > 300]

      [set ca_aF ca_aF + 2
      set ca_aF_wt sentence n-values 2 [floor abs random-normal 190 5] ca_aF_wt      ;; Buy 2 cows
      set ca_aF_ag sentence n-values 2  [random (45 - 37 + 1) + 37] ca_aF_ag
      set fem_lact sentence n-values 2 [0] fem_lact


            set gt_d gt_d - 6                                               ;; In exchange for 6 goats
            set gt_d_wt sublist gt_d_wt 6 length gt_d_wt
            set gt_d_ag sublist gt_d_ag 6 length gt_d_ag
            set gt_fem_lact sublist gt_fem_lact 6 length gt_fem_lact

            set gt-tot sum (list gt_d gt_b)                                    ; Update all the livestock entries.
            set gt_tot_wt sum (map [x -> sum x] (list gt_d_wt gt_b_wt))

            set cat-tot sum (list ca_aF ca_aM)
            set ca_tot_wt sum (map [x -> sum x] (list ca_aF_wt ca_aM_wt))
        ]

  ]
end 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Hholds tht have excess milk may take it to a market and sell it or give it to a family member in need. Similarly a hhold that is meeting its calorie needs and is not in debt can
; gift livestock to a family member in need

to gifting

  ask hholds[
   set temp_given 0
   set temp_recieved 0
   set temp_gift_given 0
   set temp_gift_recieved 0
   set milk_inc 0]

ask hholds with  [cal_milk > 1000][

    ifelse mark < 120    ;; Milk with hhold is measured in terms of left over calories. Market distance of 120 reflect the time taken in mins to get to a market
         [set cash_in_hand cash_in_hand + (cal_milk / milk_cal_cow) * 40 ;;If markets are close sell milk and make money
          set milk_inc (cal_milk / milk_cal_cow) * 40
          set cal_milk 0
          set milk_sold 1]

; else
    [let temp_milk cal_milk
         let temp one-of (hholds in-radius 0) with [food_sufficiency = "deficient"]
           if temp != nobody

           [ask temp [
             set cal_needs cal_needs - temp_milk
             set temp_recieved 1

             ifelse cal_needs > 0.1 * tot_calreq_month

              [set food_sufficiency  "deficient"
               set sufficiency-source sufficiency-source]
              [set food_sufficiency  "sufficient"
               set sufficiency-source word sufficiency-source "gift"
               set cal_needs 0]
           ]
          set temp_given 1
          set cal_milk 0
      ]
    ]
  ]

 ;; Update the milk given and received counters for all hosueholds
  ask hholds with [assets = "assetless"][

;; Gifting of livestock
  ; HHolds that do not have any livestock can receive gifts from wealthier family members
      let temp_gifter one-of link-neighbors with [ca_aF > 10 and gt_d > 20]   ; If holdings exceed 25TLU MAKE THIS IN TERMS OF TLU-cap > 5
      let an_gift_wt []
      let an_gift_ag []
      let ag_gifted 0
      let gift_lact []
      if temp_gifter != nobody [
      ask temp_gifter [
       ifelse random-float 1 < 0.5         ;; Gift cattle or goats with a 50% probability.

         [set ca_aF ca_aF - 2
          set an_gift_wt sublist ca_aF_wt 0 2
          set ca_aF_wt sublist ca_aF_wt 2 length ca_aF_wt
          set an_gift_ag sublist ca_aF_ag 0 2
          set gift_lact sublist fem_lact 0 2
          set fem_lact sublist fem_lact 2 length fem_lact
          set ca_aF_ag sublist ca_aF_ag 2 length ca_aF_ag
          set cat-tot sum (list ca_aF ca_aM)                             ; Update all the livestock entries.
          ;set cat matrix:from-column-list (list(list ca_aF  ca_aM))
          set ca_tot_wt sum (map [x -> sum x] (list ca_aF_wt ca_aM_wt))
          set temp_gift_given "cattle"]
          ;set gift lput (word ticks "ca-given") gift]  ;; This is a way to note the iteration during which gifting occured

          [set gt_d gt_d - 2
          set an_gift_wt sublist gt_d_wt 0 2
          set gt_d_wt sublist gt_d_wt 2 length gt_d_wt
          set an_gift_ag sublist gt_d_ag 0 2
          set gt_d_ag sublist gt_d_ag 2 length gt_d_ag
          set gt_fem_lact sublist gt_fem_lact 2 length gt_fem_lact
          set gift_lact sublist gt_fem_lact 0 2
          set gt-tot sum (list gt_d gt_b)                             ; Update all the livestock entries.
          ;set gt matrix:from-column-list (list(list gt_d gt_b))
          set gt_tot_wt sum (map [x -> sum x] (list gt_d_wt gt_b_wt))
          set temp_gift_given "goat"]
          ;set gift lput (word ticks "gt-given") gift]
        ]



    if ([temp_gift_given] of temp_gifter = "goat")
        [set gt_d gt_d + 2
         set gt_d_ag sentence gt_d_ag an_gift_ag
         set gt_d_wt sentence gt_d_wt an_gift_wt
         set gt_fem_lact sentence gt_fem_lact gift_lact
          set temp_gift_recieved "goat"]
         ;set gift lput (word ticks "gt-received") gift]

     if ([temp_gift_given] of temp_gifter = "cattle")
        [set ca_aF ca_aF + 2
         set ca_aF_ag sentence ca_aF_ag an_gift_ag
         set ca_aF_wt sentence ca_aF_wt an_gift_wt
         set fem_lact sentence fem_lact gift_lact
         set temp_gift_recieved "cattle"]
         ;set gift lput (word ticks "ca-received") gift]
  ]

  ]

 ask hholds [
      set cat-tot sum (list ca_aF ca_aM)                             ; Update all the livestock entries.
      set ca_tot_wt sum (map [x -> sum x] (list ca_aF_wt ca_aM_wt))

      set gt-tot sum (list gt_d gt_b)                             ; Update all the livestock entries.
      set gt_tot_wt sum (map [x -> sum x] (list gt_b_wt gt_d_wt))


             set milk_given lput temp_given milk_given
             set milk_recieved lput temp_recieved milk_recieved
             set gift_given lput temp_gift_given gift_given
             set gift_recieved lput temp_gift_recieved gift_recieved
             set hh-cat-tot lput cat-tot hh-cat-tot
             set hh-cam-tot lput cam-tot hh-cam-tot

            ifelse (ticks > 0  and  item (ticks - 1) hh-cat-tot != 0)
           [set hh-cat-lam lput ((item ticks hh-cat-tot) / (item (ticks - 1) hh-cat-tot)) hh-cat-lam]
           [set hh-cat-lam lput 1 hh-cat-lam]

           ifelse (ticks > 0 and  item (ticks - 1) hh-cam-tot != 0)
           [set hh-cam-lam lput ((item ticks  hh-cam-tot) / (item (ticks - 1)  hh-cam-tot)) hh-cam-lam]
           [set hh-cam-lam lput 1 hh-cam-lam]
  ]
end 


;;;; Wrap up the model by writing out the ASCII file of interest and deleting the npp file

to wrap-up
; let month ticks - (12 * floor (ticks / 12))
 ;   if member? ticks n-values years [x -> x * 12] [ set month 0]

  set month ticks + 1

  ask hholds [let temp-TLU cam-tot + cat-tot  + gt-tot * 0.1 + sh-tot * 0.1
              set TLU-owned lput temp-TLU TLU-owned   ; tracks changes in TLU each month for each hhold
              set TLU-cap lput (temp-TLU / AE) TLU-cap   ; Tracks TLY per adult equivalent each month
              set hunger-stat lput food_sufficiency hunger-stat  ; track hunger status
              set cal-source lput sufficiency-source cal-source ; track calorie surce
              set ca_s_tot sum sales_ca_m   ;; Track sales and purchases of livestock speciees each month
              set ca_p_tot sum purchases_ca_m
              set cam_s_tot sum sales_cam_m
              set cam_p_tot sum  purchases_cam_m
              set sht_s_tot sum sales_sht_m
              set sht_p_tot sum purchases_sht_m
              set cat_m lput cat-tot cat_m
              set cam_m lput cam-tot cam_m
              set gt_m lput gt-tot gt_m
              set sh_m lput sh-tot sh_m]

  ;; Update total number of cattle, camel, sheep and goat in Kenya

  set cattle-total lput (sum [cat-tot] of turtles) cattle-total     ; Across Kenya, total cattle, camel, sheep and goat
  set camel-total lput (sum [cam-tot] of turtles) camel-total
  set sheep-total lput (sum [sh-tot] of turtles) sheep-total
  set goat-total lput (sum [gt-tot] of turtles) goat-total

  ;ask hholds [set economic_state 0]
  ask hholds with [cat-tot + cam-tot + gt-tot + sh-tot = 0] [set assets "assetless"]  ;; Assetless hholds can stay on the system as is or can be given livestock at the start of next month
  set drop-outs lput (count hholds with [assets = "assetless"]) drop-outs
  ;set hungry lput (count hholds with [food_sufficiency = "deficient"]) hungry  ; Total hunger across Kenya each month
  set hungry (count hholds with [food_sufficiency = "deficient"]) / count hholds


  ;;Write out the temp_grazed file


if ticks < R  [
let p_sort sort patches
let pools ["GREEN_HERB" "DEAD_HERB"  "GREEN_SHRUB" "DEAD_SHRUB" "SHRUB_BRNCH" "GREEN_TREE" "DEAD_TREE" "TREE_BRNCH"]
let i 1
;let k 0

file-delete read-from-string bio_out
 file-open read-from-string grazed_out

foreach pools [b ->
    file-type " " file-type  b  file-type "           " file-print  month
  foreach p_sort [p ->
    ifelse (i != (count patches) / (max-pycor + 1) )
      [file-write [runresult b] of p file-type "      "
       set i i + 1]
      [file-write [runresult b] of p file-type "      "  file-print ""
       set i 1]

   ]
     file-print ""
    set i 1
    ;set k k + 1
  ]
  file-print "END_OF_FILE"
 file-close
  ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  let turk hholds with [my-tribe = "Turkana"]
  let kaj hholds with [my-tribe = "Kajiado"]
  let man hholds with [my-tribe = "Mandera"]
  let mar hholds with [my-tribe = "Marsabit"]
  let lai hholds with [my-tribe = "Laikipia"]
  let sam hholds with [my-tribe = "Samburu"]
  let wp  hholds with [my-tribe = "West Pokot"]
  let nar hholds with [my-tribe = "Narok"]
  let tr hholds with [my-tribe = "Tana River"]
  let waj hholds with [my-tribe = "Wajir"]
  let isi hholds with [my-tribe = "Isiolo"]
  let lam  hholds with [my-tribe = "Lamu"]
  let gar hholds with [my-tribe = "Garissa"]
  let bar hholds with [my-tribe = "Baringo"]

  set hungry_turk (count turk with [food_sufficiency = "deficient"])/ (count turk)
  set hungry_kaj (count kaj with [food_sufficiency = "deficient" ])/(count kaj)
  set hungry_man (count man with [food_sufficiency = "deficient"])/ (count man)
  set hungry_mar (count mar with [food_sufficiency = "deficient"])/ (count mar)
  set hungry_lai (count lai with [food_sufficiency = "deficient"])/ (count lai)
  set hungry_sam (count sam with [food_sufficiency = "deficient"])/ (count sam)
  set hungry_wp (count wp with [food_sufficiency = "deficient"])/ (count wp)
  set hungry_nar (count nar with [food_sufficiency = "deficient"])/ (count nar)
  set hungry_tr (count tr with [food_sufficiency = "deficient"])/ (count tr)
  set hungry_waj (count waj with [food_sufficiency = "deficient"])/ (count waj)
  set hungry_isi (count isi with [food_sufficiency = "deficient"])/ (count isi)
  set hungry_lam (count lam with [food_sufficiency = "deficient"])/ (count lam)
  set hungry_gar (count gar with [food_sufficiency = "deficient"])/ (count gar)
  set hungry_bar (count bar with [food_sufficiency = "deficient"])/ (count bar)
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to print-output

  ;; County specific estimates of hunger

  let turk hholds with [my-tribe = "Turkana"]
  let kaj hholds with [my-tribe = "Kajiado"]
  let man hholds with [my-tribe = "Mandera"]
  let mar hholds with [my-tribe = "Marsabit"]
  let lai hholds with [my-tribe = "Laikipia"]
  let sam hholds with [my-tribe = "Samburu"]
  let wp  hholds with [my-tribe = "West Pokot"]
  let nar hholds with [my-tribe = "Narok"]
  let tr hholds with [my-tribe = "Tana River"]
  let waj hholds with [my-tribe = "Wajir"]
  let isi hholds with [my-tribe = "Isiolo"]
  let lam  hholds with [my-tribe = "Lamu"]
  let gar hholds with [my-tribe = "Garissa"]
  let bar hholds with [my-tribe = "Baringo"]

  ;let hungry_turk (count turk with [food_sufficiency = "deficient"])/ (count turk)
  ;let hungry_kaj (count kaj with [food_sufficiency = "deficient" ])/(count kaj)
  ;let hungry_man (count man with [food_sufficiency = "deficient"])/ (count man)
  ;let hungry_mar (count mar with [food_sufficiency = "deficient"])/ (count mar)
  ;let hungry_lai (count lai with [food_sufficiency = "deficient"])/ (count lai)
  ;let hungry_sam (count sam with [food_sufficiency = "deficient"])/ (count sam)
  ;let hungry_wp (count wp with [food_sufficiency = "deficient"])/ (count wp)
  ;let hungry_nar (count nar with [food_sufficiency = "deficient"])/ (count nar)
  ;let hungry_tr (count tr with [food_sufficiency = "deficient"])/ (count tr)
  ;let hungry_waj (count waj with [food_sufficiency = "deficient"])/ (count waj)
  ;let hungry_isi (count isi with [food_sufficiency = "deficient"])/ (count isi)
  ;let hungry_lam (count lam with [food_sufficiency = "deficient"])/ (count lam)
  ;let hungry_gar (count gar with [food_sufficiency = "deficient"])/ (count gar)
  ;let hungry_bar (count bar with [food_sufficiency = "deficient"])/ (count bar)

  let hungry_turk_1 (count turk with [food_sufficiency = "deficient" and h_quant = 1])/ (count turk with [ h_quant = 1])
  let hungry_kaj_1 (count kaj with [food_sufficiency = "deficient"  and h_quant = 1])/(count kaj with [ h_quant = 1])
  let hungry_man_1 (count man with [food_sufficiency = "deficient" and h_quant = 1])/ (count man with [ h_quant = 1])
  let hungry_mar_1 (count mar with [food_sufficiency = "deficient" and h_quant = 1])/ (count mar with [ h_quant = 1])
  let hungry_lai_1 (count lai with [food_sufficiency = "deficient" and h_quant = 1])/ (count lai with [ h_quant = 1])
  let hungry_sam_1 (count sam with [food_sufficiency = "deficient" and h_quant = 1])/ (count sam with [ h_quant = 1])
  let hungry_wp_1  (count wp with [food_sufficiency = "deficient" and h_quant = 1])/ (count wp with [ h_quant = 1])
  let hungry_nar_1 (count nar with [food_sufficiency = "deficient" and h_quant = 1])/ (count nar with [ h_quant = 1])
  let hungry_tr_1  (count tr with [food_sufficiency = "deficient" and h_quant = 1])/ (count tr with [ h_quant = 1])
  let hungry_waj_1 (count waj with [food_sufficiency = "deficient" and h_quant = 1])/ (count waj with [ h_quant = 1])
  let hungry_isi_1 (count isi with [food_sufficiency = "deficient" and h_quant = 1])/ (count isi with [ h_quant = 1])
  let hungry_lam_1 (count lam with [food_sufficiency = "deficient" and h_quant = 1])/ (count lam with [ h_quant = 1])
  let hungry_gar_1 (count gar with [food_sufficiency = "deficient" and h_quant = 1])/ (count gar with [ h_quant = 1])
  let hungry_bar_1 (count bar with [food_sufficiency = "deficient" and h_quant = 1])/ (count bar with [ h_quant = 1])

    let hungry_turk_3 (count turk with [food_sufficiency = "deficient" and h_quant = 3])/ (count turk with [ h_quant = 3])
  let hungry_kaj_3 (count kaj with [food_sufficiency = "deficient"  and h_quant = 3])/(count kaj with [ h_quant = 3])
  let hungry_man_3 (count man with [food_sufficiency = "deficient" and h_quant = 3])/ (count man with [ h_quant = 3])
  let hungry_mar_3 (count mar with [food_sufficiency = "deficient" and h_quant = 3])/ (count mar with [ h_quant = 3])
  let hungry_lai_3 (count lai with [food_sufficiency = "deficient" and h_quant = 3])/ (count lai with [ h_quant = 3])
  let hungry_sam_3 (count sam with [food_sufficiency = "deficient" and h_quant = 3])/ (count sam with [ h_quant = 3])
  let hungry_wp_3  (count wp with [food_sufficiency = "deficient" and h_quant = 3])/ (count wp with [ h_quant = 3])
  let hungry_nar_3 (count nar with [food_sufficiency = "deficient" and h_quant = 3])/ (count nar with [ h_quant = 3])
  let hungry_tr_3  (count tr with [food_sufficiency = "deficient" and h_quant = 3])/ (count tr with [ h_quant = 3])
  let hungry_waj_3 (count waj with [food_sufficiency = "deficient" and h_quant = 3])/ (count waj with [ h_quant = 3])
  let hungry_isi_3 (count isi with [food_sufficiency = "deficient" and h_quant = 3])/ (count isi with [ h_quant = 3])
  let hungry_lam_3 (count lam with [food_sufficiency = "deficient" and h_quant = 3])/ (count lam with [ h_quant = 3])
  let hungry_gar_3 (count gar with [food_sufficiency = "deficient" and h_quant = 3])/ (count gar with [ h_quant = 3])
  let hungry_bar_3 (count bar with [food_sufficiency = "deficient" and h_quant = 3])/ (count bar with [ h_quant = 3])

  let hungry_turk_6 (count turk with [food_sufficiency = "deficient" and h_quant = 6])/ (count turk with [ h_quant = 6])
  let hungry_kaj_6 (count kaj with [food_sufficiency = "deficient"  and h_quant = 6])/(count kaj with [ h_quant = 6])
  let hungry_man_6 (count man with [food_sufficiency = "deficient" and h_quant = 6])/ (count man with [ h_quant = 6])
  let hungry_mar_6 (count mar with [food_sufficiency = "deficient" and h_quant = 6])/ (count mar with [ h_quant = 6])
  let hungry_lai_6 (count lai with [food_sufficiency = "deficient" and h_quant = 6])/ (count lai with [ h_quant = 6])
  let hungry_sam_6 (count sam with [food_sufficiency = "deficient" and h_quant = 6])/ (count sam with [ h_quant = 6])
  let hungry_wp_6  (count wp with [food_sufficiency = "deficient" and h_quant = 6])/ (count wp with [ h_quant = 6])
  let hungry_nar_6 (count nar with [food_sufficiency = "deficient" and h_quant = 6])/ (count nar with [ h_quant = 6])
  let hungry_tr_6  (count tr with [food_sufficiency = "deficient" and h_quant = 6])/ (count tr with [ h_quant = 6])
  let hungry_waj_6 (count waj with [food_sufficiency = "deficient" and h_quant = 6])/ (count waj with [ h_quant = 6])
  let hungry_isi_6 (count isi with [food_sufficiency = "deficient" and h_quant = 6])/ (count isi with [ h_quant = 6])
  let hungry_lam_6 (count lam with [food_sufficiency = "deficient" and h_quant = 6])/ (count lam with [ h_quant = 6])
  let hungry_gar_6 (count gar with [food_sufficiency = "deficient" and h_quant = 6])/ (count gar with [ h_quant = 6])
  let hungry_bar_6 (count bar with [food_sufficiency = "deficient" and h_quant = 6])/ (count bar with [ h_quant = 6])

  let hungry_turk_ag (count turk with [food_sufficiency = "deficient" and agrop = 1])/ (count turk with [ agrop = 1])
  let hungry_kaj_ag (count kaj with [food_sufficiency = "deficient"  and agrop = 1])/(count kaj with [ agrop = 1])
  let hungry_man_ag (count man with [food_sufficiency = "deficient" and agrop = 1])/ (count man with [ agrop = 1])
  let hungry_mar_ag (count mar with [food_sufficiency = "deficient" and agrop = 1])/ (count mar with [ agrop = 1])
  let hungry_lai_ag (count lai with [food_sufficiency = "deficient" and agrop = 1])/ (count lai with [ agrop = 1])
  let hungry_sam_ag (count sam with [food_sufficiency = "deficient" and agrop = 1])/ (count sam with [ agrop = 1])
  let hungry_wp_ag  (count wp with [food_sufficiency = "deficient" and agrop = 1])/ (count wp with [ agrop = 1])
  let hungry_nar_ag (count nar with [food_sufficiency = "deficient" and agrop = 1])/ (count nar with [ agrop = 1])
  let hungry_tr_ag  (count tr with [food_sufficiency = "deficient" and agrop = 1])/ (count tr with [ agrop = 1])
  let hungry_waj_ag (count waj with [food_sufficiency = "deficient" and agrop = 1])/ (count waj with [ agrop = 1])
  let hungry_isi_ag (count isi with [food_sufficiency = "deficient" and agrop = 1])/ (count isi with [ agrop = 1])
  let hungry_lam_ag (count lam with [food_sufficiency = "deficient" and agrop = 1])/ (count lam with [ agrop = 1])
  let hungry_gar_ag (count gar with [food_sufficiency = "deficient" and agrop = 1])/ (count gar with [ agrop = 1])
  let hungry_bar_ag (count bar with [food_sufficiency = "deficient" and agrop = 1])/ (count bar with [ agrop = 1])

  let debt_turk (count turk with [item ticks economic_state = "debt"])/ (count turk)
  let debt_kaj (count kaj with [item ticks economic_state = "debt" ])/(count kaj)
  let debt_man (count man with [item ticks economic_state = "debt"])/ (count man)
  let debt_mar (count mar with [item ticks economic_state = "debt"])/ (count mar)
  let debt_lai (count lai with [item ticks economic_state = "debt"])/ (count lai)
  let debt_sam (count sam with [item ticks economic_state = "debt"])/ (count sam )
  let debt_wp  (count wp with [item ticks economic_state = "debt"])/ (count wp )
  let debt_nar (count nar with [item ticks economic_state = "debt"])/ (count nar)
  let debt_tr  (count tr with [item ticks economic_state = "debt"])/ (count tr)
  let debt_waj  (count waj with [item ticks economic_state = "debt"])/ (count waj)
  let debt_isi  (count isi with [item ticks economic_state = "debt"])/ (count isi)
  let debt_lam (count lam with [item ticks economic_state = "debt"])/ (count lam)
  let debt_gar  (count gar with [item ticks economic_state = "debt"])/ (count gar)
  let debt_bar  (count bar with [item ticks economic_state = "debt"])/ (count bar)

  let store_turk (count turk with [store_cal = 1])/ (count turk)
  let store_kaj (count kaj with [store_cal = 1 ])/(count kaj)
  let store_man (count man with [store_cal = 1])/ (count man)
  let store_mar (count mar with [store_cal = 1])/ (count mar)
  let store_lai (count lai with [store_cal = 1])/ (count lai)
  let store_sam (count sam with [store_cal = 1])/ (count sam)
  let store_wp (count wp with [store_cal = 1])/ (count wp)
  let store_nar (count nar with [store_cal = 1])/ (count nar)
  let store_tr (count tr with [store_cal = 1])/ (count tr)
  let store_waj (count waj with [store_cal = 1])/ (count waj)
  let store_isi (count isi with [store_cal = 1])/ (count isi)
  let store_lam (count lam with [store_cal = 1])/ (count lam)
  let store_gar (count gar with [store_cal = 1])/ (count gar)
  let store_bar (count bar with [store_cal = 1])/ (count bar)

  let catS_turk sum [sales_ca] of turk
  let catS_kaj  sum [sales_ca] of kaj
  let catS_man  sum [sales_ca] of man
  let catS_mar  sum [sales_ca] of mar
  let catS_lai  sum [sales_ca] of lai
  let catS_sam  sum [sales_ca] of sam
  let catS_wp   sum [sales_ca] of wp
  let catS_nar  sum [sales_ca] of nar
  let catS_tr   sum [sales_ca] of tr
  let catS_waj  sum [sales_ca] of waj
  let catS_isi  sum [sales_ca] of isi
  let catS_lam  sum [sales_ca] of lam
  let catS_gar  sum [sales_ca] of gar
  let catS_bar  sum [sales_ca] of bar

  let catP_turk sum [purchases_ca] of turk
  let catP_kaj  sum [purchases_ca] of kaj
  let catP_man  sum [purchases_ca] of man
  let catP_mar  sum [purchases_ca] of mar
  let catP_lai  sum [purchases_ca] of lai
  let catP_sam  sum [purchases_ca] of sam
  let catP_wp   sum [purchases_ca] of wp
  let catP_nar  sum [purchases_ca] of nar
  let catP_tr   sum [purchases_ca] of tr
  let catP_waj  sum [purchases_ca] of waj
  let catP_isi  sum [purchases_ca] of isi
  let catP_lam  sum [purchases_ca] of lam
  let catP_gar  sum [purchases_ca] of gar
  let catP_bar  sum [purchases_ca] of bar

  let camS_turk sum [sales_cam] of turk
  let camS_kaj  sum [sales_cam] of kaj
  let camS_man  sum [sales_cam] of man
  let camS_mar  sum [sales_cam] of mar
  let camS_lai  sum [sales_cam] of lai
  let camS_sam  sum [sales_cam] of sam
  let camS_wp   sum [sales_cam] of wp
  let camS_nar  sum [sales_cam] of nar
  let camS_tr   sum [sales_cam] of tr
  let camS_waj  sum [sales_cam] of waj
  let camS_isi  sum [sales_cam] of isi
  let camS_lam  sum [sales_cam] of lam
  let camS_gar  sum [sales_cam] of gar
  let camS_bar  sum [sales_cam] of bar

  let camP_turk sum [purchases_cam] of turk
  let camP_kaj  sum [purchases_cam] of kaj
  let camP_man  sum [purchases_cam] of man
  let camP_mar  sum [purchases_cam] of mar
  let camP_lai  sum [purchases_cam] of lai
  let camP_sam  sum [purchases_cam] of sam
  let camP_wp   sum [purchases_cam] of wp
  let camP_nar  sum [purchases_cam] of nar
  let camP_tr   sum [purchases_cam] of tr
  let camP_waj  sum [purchases_cam] of waj
  let camP_isi  sum [purchases_cam] of isi
  let camP_lam  sum [purchases_cam] of lam
  let camP_gar  sum [purchases_cam] of gar
  let camP_bar  sum [purchases_cam] of bar


  let shtS_turk sum [sales_sht] of turk
  let shtS_kaj  sum [sales_sht] of kaj
  let shtS_man  sum [sales_sht] of man
  let shtS_mar  sum [sales_sht] of mar
  let shtS_lai  sum [sales_sht] of lai
  let shtS_sam  sum [sales_sht] of sam
  let shtS_wp   sum [sales_sht] of wp
  let shtS_nar  sum [sales_sht] of nar
  let shtS_tr   sum [sales_sht] of tr
  let shtS_waj  sum [sales_sht] of waj
  let shtS_isi  sum [sales_sht] of isi
  let shtS_lam  sum [sales_sht] of lam
  let shtS_gar  sum [sales_sht] of gar
  let shtS_bar  sum [sales_sht] of bar

  let shtP_turk sum [purchases_sht] of turk
  let shtP_kaj  sum [purchases_sht] of kaj
  let shtP_man  sum [purchases_sht] of man
  let shtP_mar  sum [purchases_sht] of mar
  let shtP_lai  sum [purchases_sht] of lai
  let shtP_sam  sum [purchases_sht] of sam
  let shtP_wp   sum [purchases_sht] of wp
  let shtP_nar  sum [purchases_sht] of nar
  let shtP_tr   sum [purchases_sht] of tr
  let shtP_waj  sum [purchases_sht] of waj
  let shtP_isi  sum [purchases_sht] of isi
  let shtP_lam  sum [purchases_sht] of lam
  let shtP_gar  sum [purchases_sht] of gar
  let shtP_bar  sum [purchases_sht] of bar


  let gift_turk (count turk with [temp_recieved = 1])/ (count turk)
  let gift_kaj (count kaj with [temp_recieved = 1 ])/(count kaj)
  let gift_man (count man with [temp_recieved = 1])/ (count man)
  let gift_mar (count mar with [temp_recieved = 1])/ (count mar)
  let gift_lai (count lai with [temp_recieved = 1])/ (count lai)
  let gift_sam (count sam with [temp_recieved = 1])/ (count sam)
  let gift_wp (count wp with [temp_recieved = 1])/ (count wp)
  let gift_nar (count nar with [temp_recieved = 1])/ (count nar)
  let gift_tr (count tr with [temp_recieved = 1])/ (count tr)
  let gift_waj (count waj with [temp_recieved = 1])/ (count waj)
  let gift_isi (count isi with [temp_recieved = 1])/ (count isi)
  let gift_lam (count lam with [temp_recieved = 1])/ (count lam)
  let gift_gar (count gar with [temp_recieved = 1])/ (count gar)
  let gift_bar (count bar with [temp_recieved = 1])/ (count bar)

  let cat_turk (sum [cat-tot] of turk)
  let cat_kaj  (sum [cat-tot] of kaj)
  let cat_man  (sum [cat-tot] of man)
  let cat_mar  (sum [cat-tot] of mar)
  let cat_lai  (sum [cat-tot] of lai)
  let cat_sam  (sum [cat-tot] of sam)
  let cat_wp   (sum [cat-tot] of wp)
  let cat_nar  (sum [cat-tot] of nar)
  let cat_tr   (sum [cat-tot] of tr)
  let cat_waj  (sum [cat-tot] of waj)
  let cat_isi  (sum [cat-tot] of isi)
  let cat_lam  (sum [cat-tot] of lam)
  let cat_gar  (sum [cat-tot] of gar)
  let cat_bar  (sum [cat-tot] of bar)

  let cam_turk (sum [cam-tot] of turk)
  let cam_kaj  (sum [cam-tot] of kaj)
  let cam_man  (sum [cam-tot] of man)
  let cam_mar  (sum [cam-tot] of mar)
  let cam_lai  (sum [cam-tot] of lai)
  let cam_sam  (sum [cam-tot] of sam)
  let cam_wp   (sum [cam-tot] of wp)
  let cam_nar  (sum [cam-tot] of nar)
  let cam_tr   (sum [cam-tot] of tr)
  let cam_waj  (sum [cam-tot] of waj)
  let cam_isi  (sum [cam-tot] of isi)
  let cam_lam  (sum [cam-tot] of lam)
  let cam_gar  (sum [cam-tot] of gar)
  let cam_bar  (sum [cam-tot] of bar)

  let sh_turk (sum [sh-tot] of turk)
  let sh_kaj  (sum [sh-tot] of kaj)
  let sh_man  (sum [sh-tot] of man)
  let sh_mar  (sum [sh-tot] of mar)
  let sh_lai  (sum [sh-tot] of lai)
  let sh_sam  (sum [sh-tot] of sam)
  let sh_wp   (sum [sh-tot] of wp)
  let sh_nar  (sum [sh-tot] of nar)
  let sh_tr   (sum [sh-tot] of tr)
  let sh_waj  (sum [sh-tot] of waj)
  let sh_isi  (sum [sh-tot] of isi)
  let sh_lam  (sum [sh-tot] of lam)
  let sh_gar  (sum [sh-tot] of gar)
  let sh_bar  (sum [sh-tot] of bar)

  let gt_turk (sum [gt-tot] of turk)
  let gt_kaj  (sum [gt-tot] of kaj)
  let gt_man  (sum [gt-tot] of man)
  let gt_mar  (sum [gt-tot] of mar)
  let gt_lai  (sum [gt-tot] of lai)
  let gt_sam  (sum [gt-tot] of sam)
  let gt_wp   (sum [gt-tot] of wp)
  let gt_nar  (sum [gt-tot] of nar)
  let gt_tr   (sum [gt-tot] of tr)
  let gt_waj  (sum [gt-tot] of waj)
  let gt_isi  (sum [gt-tot] of isi)
  let gt_lam  (sum [gt-tot] of lam)
  let gt_gar  (sum [gt-tot] of gar)
  let gt_bar  (sum [gt-tot] of bar)


  let raid_turk   count turk with [raid-loss = 1]
  let raid_kaj count kaj with [raid-loss = 1]
  let raid_man  count man with [raid-loss = 1]
  let raid_mar count mar with [raid-loss = 1]
  let raid_lai  count lai with [raid-loss = 1]
  let raid_sam  count sam with [raid-loss = 1]
  let raid_wp  count wp with [raid-loss = 1]
  let raid_nar  count nar with [raid-loss = 1]
  let raid_tr  count tr with [raid-loss = 1]
  let raid_waj  count waj with [raid-loss = 1]
  let raid_isi  count isi with [raid-loss = 1]
  let raid_lam  count lam with [raid-loss = 1]
  let raid_gar  count gar with [raid-loss = 1]
  let raid_bar  count bar with [raid-loss = 1]

  let saleinc_turk (sum [sale_income] of turk)
  let saleinc_kaj  (sum [sale_income] of kaj)
  let saleinc_man  (sum [sale_income] of man)
  let saleinc_mar  (sum [sale_income] of mar)
  let saleinc_lai  (sum [sale_income] of lai)
  let saleinc_sam  (sum [sale_income] of sam)
  let saleinc_wp   (sum [sale_income] of wp)
  let saleinc_nar  (sum [sale_income] of nar)
  let saleinc_tr   (sum [sale_income] of tr)
  let saleinc_waj  (sum [sale_income] of waj)
  let saleinc_isi  (sum [sale_income] of isi)
  let saleinc_lam  (sum [sale_income] of lam)
  let saleinc_gar  (sum [sale_income] of gar)
  let saleinc_bar  (sum [sale_income] of bar)

  let move_turk (mean [item ticks move-cost] of turk )
  let move_kaj (mean [item ticks move-cost] of kaj )
  let move_man (mean [item ticks move-cost] of man )
  let move_mar (mean [item ticks move-cost] of mar )
  let move_lai (mean [item ticks move-cost] of lai )
  let move_sam (mean [item ticks move-cost] of sam )
  let move_wp (mean [item ticks move-cost] of wp )
  let move_nar (mean [item ticks move-cost] of nar )
  let move_tr (mean [item ticks move-cost] of tr )
  let move_waj (mean [item ticks move-cost] of waj )
  let move_isi (mean [item ticks move-cost] of isi )
  let move_lam (mean [item ticks move-cost] of lam )
  let move_gar (mean [item ticks move-cost] of gar )
  let move_bar (mean [item ticks move-cost] of bar )

  let milk_turk (sum [milk_inc] of turk)
  let milk_kaj (sum [milk_inc] of kaj)
  let milk_man (sum [milk_inc] of man)
  let milk_mar (sum [milk_inc] of mar)
  let milk_lai (sum [milk_inc] of lai)
  let milk_sam (sum [milk_inc] of sam)
  let milk_wp (sum [milk_inc] of wp)
  let milk_nar (sum [milk_inc] of nar)
  let milk_tr (sum [milk_inc] of tr)
  let milk_waj (sum [milk_inc] of waj)
  let milk_isi (sum [milk_inc] of isi)
  let milk_lam (sum [milk_inc] of lam)
  let milk_gar (sum [milk_inc] of gar)
  let milk_bar (sum [milk_inc] of bar)

  let hunger1 count hholds with [food_sufficiency = "deficient" and [zone] of hm_patch = "KE01"] / count hholds with [[zone] of hm_patch = "KE01"]
  let hunger3 count hholds with [food_sufficiency = "deficient" and [zone] of hm_patch = "KE03"] / count hholds with [[zone] of hm_patch = "KE03"]
  let hunger5 count hholds with [food_sufficiency = "deficient" and [zone] of hm_patch = "KE05"] / count hholds with [[zone] of hm_patch = "KE05"]
  let hunger7 count hholds with [food_sufficiency = "deficient" and [zone] of hm_patch = "KE07"] / count hholds with [[zone] of hm_patch = "KE07"]
  let hunger9 count hholds with [food_sufficiency = "deficient" and [zone] of hm_patch = "KE09"] / count hholds with [[zone] of hm_patch = "KE09"]
  let hunger10 count hholds with [food_sufficiency = "deficient" and [zone] of hm_patch = "KE10"] / count hholds with [[zone] of hm_patch = "KE10"]
  let hunger11 count hholds with [food_sufficiency = "deficient" and [zone] of hm_patch = "KE11"] / count hholds with [[zone] of hm_patch = "KE11"]
  let hunger15 count hholds with [food_sufficiency = "deficient" and [zone] of hm_patch = "KE15"] / count hholds with [[zone] of hm_patch = "KE15"]
 let hunger24 count hholds with [food_sufficiency = "deficient" and [zone] of hm_patch = "KE24"] / count hholds with [[zone] of hm_patch = "KE24"]

  let liv_cal_turk (mean [liv_cal] of turk)
  let liv_cal_kaj (mean [liv_cal] of kaj)
  let liv_cal_man (mean [liv_cal] of man)
  let liv_cal_mar (mean [liv_cal] of mar)
  let liv_cal_lai (mean [liv_cal] of lai)
  let liv_cal_sam (mean [liv_cal] of sam)
  let liv_cal_wp (mean [liv_cal] of wp)
  let liv_cal_nar (mean [liv_cal] of nar)
  let liv_cal_tr (mean [liv_cal] of tr)
  let liv_cal_waj (mean [liv_cal] of waj)
  let liv_cal_isi (mean [liv_cal] of isi)
  let liv_cal_lam (mean [liv_cal] of lam)
  let liv_cal_gar (mean [liv_cal] of gar)
  let liv_cal_bar (mean [liv_cal] of bar)

  let pro_turk count turk with [[protect] of grazing_land > 0]
  let pro_kaj count kaj with [[protect] of grazing_land > 0]
  let pro_man count man with [[protect] of grazing_land > 0]
  let pro_mar count mar with [[protect] of grazing_land > 0]
  let pro_lai count lai with [[protect] of grazing_land > 0]
  let pro_sam count sam with [[protect] of grazing_land > 0]
  let pro_wp count wp with [[protect] of grazing_land > 0]
  let pro_nar count nar with [[protect] of grazing_land > 0]
  let pro_tr count tr with [[protect] of grazing_land > 0]
  let pro_waj count waj with [[protect] of grazing_land > 0]
  let pro_isi count isi with [[protect] of grazing_land > 0]
  let pro_lam count lam with [[protect] of grazing_land > 0]
  let pro_gar count gar with [[protect] of grazing_land > 0]
  let pro_bar count bar with [[protect] of grazing_land > 0]

  let tlu_turk mean [item ticks TLU-cap] of turk
  let tlu_kaj mean [item ticks TLU-cap] of kaj
  let tlu_man mean [item ticks TLU-cap] of man
  let tlu_mar mean [item ticks TLU-cap] of mar
  let tlu_lai mean [item ticks TLU-cap] of lai
  let tlu_sam mean [item ticks TLU-cap] of sam
  let tlu_wp mean [item ticks TLU-cap] of wp
  let tlu_nar mean [item ticks TLU-cap] of nar
  let tlu_tr mean [item ticks TLU-cap] of tr
  let tlu_waj mean [item ticks TLU-cap] of waj
  let tlu_isi mean [item ticks TLU-cap] of isi
  let tlu_lam mean [item ticks TLU-cap] of lam
  let tlu_gar mean [item ticks TLU-cap] of gar
  let tlu_bar mean [item ticks TLU-cap] of bar


  let tlu1_turk mean [item ticks TLU-cap] of turk with [h_quant = 1]
  let tlu1_kaj mean [item ticks TLU-cap] of kaj with [h_quant = 1]
  let tlu1_man mean [item ticks TLU-cap] of man with [h_quant = 1]
  let tlu1_mar mean [item ticks TLU-cap] of mar with [h_quant = 1]
  let tlu1_lai mean [item ticks TLU-cap] of lai with [h_quant = 1]
  let tlu1_sam mean [item ticks TLU-cap] of sam with [h_quant = 1]
  let tlu1_wp mean [item ticks TLU-cap] of wp with [h_quant = 1]
  let tlu1_nar mean [item ticks TLU-cap] of nar with [h_quant = 1]
  let tlu1_tr mean [item ticks TLU-cap] of tr with [h_quant = 1]
  let tlu1_waj mean [item ticks TLU-cap] of waj with [h_quant = 1]
  let tlu1_isi mean [item ticks TLU-cap] of isi with [h_quant = 1]
  let tlu1_lam mean [item ticks TLU-cap] of lam with [h_quant = 1]
  let tlu1_gar mean [item ticks TLU-cap] of gar with [h_quant = 1]
  let tlu1_bar mean [item ticks TLU-cap] of bar with [h_quant = 1]


  let tlu3_turk mean [item ticks TLU-cap] of turk with [h_quant = 3]
  let tlu3_kaj mean [item ticks TLU-cap] of kaj with [h_quant = 3]
  let tlu3_man mean [item ticks TLU-cap] of man with [h_quant = 3]
  let tlu3_mar mean [item ticks TLU-cap] of mar with [h_quant = 3]
  let tlu3_lai mean [item ticks TLU-cap] of lai with [h_quant = 3]
  let tlu3_sam mean [item ticks TLU-cap] of sam with [h_quant = 3]
  let tlu3_wp mean [item ticks TLU-cap] of wp with [h_quant = 3]
  let tlu3_nar mean [item ticks TLU-cap] of nar with [h_quant = 3]
  let tlu3_tr mean [item ticks TLU-cap] of tr with [h_quant = 3]
  let tlu3_waj mean [item ticks TLU-cap] of waj with [h_quant = 3]
  let tlu3_isi mean [item ticks TLU-cap] of isi with [h_quant = 3]
  let tlu3_lam mean [item ticks TLU-cap] of lam with [h_quant = 3]
  let tlu3_gar mean [item ticks TLU-cap] of gar with [h_quant = 3]
  let tlu3_bar mean [item ticks TLU-cap] of bar with [h_quant = 3]

  let tlu6_turk mean [item ticks TLU-cap] of turk with [h_quant = 6]
  let tlu6_kaj mean [item ticks TLU-cap] of kaj with [h_quant = 6]
  let tlu6_man mean [item ticks TLU-cap] of man with [h_quant = 6]
  let tlu6_mar mean [item ticks TLU-cap] of mar with [h_quant = 6]
  let tlu6_lai mean [item ticks TLU-cap] of lai with [h_quant = 6]
  let tlu6_sam mean [item ticks TLU-cap] of sam with [h_quant = 6]
  let tlu6_wp mean [item ticks TLU-cap] of wp with [h_quant = 6]
  let tlu6_nar mean [item ticks TLU-cap] of nar with [h_quant = 6]
  let tlu6_tr mean [item ticks TLU-cap] of tr with [h_quant = 6]
  let tlu6_waj mean [item ticks TLU-cap] of waj with [h_quant = 6]
  let tlu6_isi mean [item ticks TLU-cap] of isi with [h_quant = 6]
  let tlu6_lam mean [item ticks TLU-cap] of lam with [h_quant = 6]
  let tlu6_gar mean [item ticks TLU-cap] of gar with [h_quant = 6]
  let tlu6_bar mean [item ticks TLU-cap] of bar with [h_quant = 6]

let path word read-from-string (f_path) scenario

;; Print info on hunger to file
file-open word path "/Hunger_zones.csv"
if ticks = 0 [file-print (word "KE01" "," "KE03" "," "KE05" "," "KE07" "," "KE09" "," "KE10" "," "KE11" "," "KE15" ","  "KE24")]
file-print (word hunger1 "," hunger3 "," hunger5 "," hunger7 "," hunger9 "," hunger10 "," hunger11 "," hunger15  "," hunger24)
file-close

;; Print info on hunger to file
file-open word path "/Hunger.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" ","  "Wajir" ","  "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word hungry_turk "," hungry_kaj "," hungry_lai "," hungry_mar "," hungry_man "," hungry_sam "," hungry_nar "," hungry_wp "," hungry_tr "," hungry_waj "," hungry_isi "," hungry_lam "," hungry_gar "," hungry_bar)
file-close

;; print fraction of poor households going hungry
file-open word path "/Hunger1.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word hungry_turk_1 "," hungry_kaj_1 "," hungry_lai_1 "," hungry_mar_1 "," hungry_man_1 ","  hungry_sam_1 "," hungry_nar_1 ","  hungry_wp_1 "," hungry_tr_1 ","  hungry_waj_1 "," hungry_isi_1 "," hungry_lam_1 "," hungry_gar_1 "," hungry_bar_1)
file-close

;; print fraction of middle income households going hungry
file-open word path "/Hunger3.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word hungry_turk_3 "," hungry_kaj_3 "," hungry_lai_3 "," hungry_mar_3 "," hungry_man_3 ","  hungry_sam_3 "," hungry_nar_3 ","  hungry_wp_3 "," hungry_tr_3 ","  hungry_waj_3 "," hungry_isi_3 "," hungry_lam_3 "," hungry_gar_3 "," hungry_bar_3)
file-close

;; print fraction of rich households going hungry
file-open word path "/Hunger6.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word hungry_turk_6 "," hungry_kaj_6 "," hungry_lai_6 "," hungry_mar_6 "," hungry_man_6 ","  hungry_sam_6 "," hungry_nar_6 ","  hungry_wp_6 "," hungry_tr_6 ","  hungry_waj_6 "," hungry_isi_6 "," hungry_lam_6 "," hungry_gar_6 "," hungry_bar_6)
file-close


;; print fraction of agropastoral households going hungry
file-open word path "/Hunger_ag.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word hungry_turk_ag "," hungry_kaj_ag "," hungry_lai_ag "," hungry_mar_ag "," hungry_man_ag ","  hungry_sam_ag "," hungry_nar_ag ","  hungry_wp_ag "," hungry_tr_ag ","  hungry_waj_ag "," hungry_isi_ag "," hungry_lam_ag "," hungry_gar_ag "," hungry_bar_ag)
file-close

;; fraction of households meeting more than 50 % cal req via maize.
file-open word path "/store_cal.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word store_turk "," store_kaj "," store_lai ","  store_mar "," store_man ","  store_sam "," store_nar "," store_wp "," store_tr "," store_waj "," store_isi "," store_lam "," store_gar "," store_bar)
file-close

;;proportion in debt in Turkana, Kajiado, Laikipia, Marsabit and Mandera, WP and Narok counties
file-open word  path "/debt.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word debt_turk "," debt_kaj ","  debt_lai "," debt_mar ","debt_man ","   debt_sam "," debt_nar ","  debt_wp ","  debt_tr "," debt_waj "," debt_isi ","  debt_lam "," debt_gar "," debt_bar)
file-close

;;proportion cattle seller in Turkana, Kajiado, Laikipia, Marsabit and Mandera, WP and Narok counties
file-open word path "/cat_sales.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word catS_turk "," catS_kaj "," catS_lai ","  catS_mar "," catS_man ","  catS_sam "," catS_nar "," catS_wp "," catS_tr ","  catS_waj ","  catS_isi "," catS_lam ","  catS_gar "," catS_bar)
file-close

;;proportion cattle buyers in Turkana, Kajiado, Laikipia, Marsabit and Mandera, WP and Narok counties
file-open word path "/cattle_pur.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word catP_turk "," catP_kaj ","  catP_mar "," catP_man "," catP_lai "," catP_sam ","  catP_nar "," catP_wp "," catP_tr "," catP_waj ","  catP_isi "," catP_lam "," catP_gar "," catP_bar)
file-close

;;proportion camel sellers in Turkana, Kajiado, Laikipia, Marsabit and Mandera, WP and Narok counties
file-open word path "/cam_sales.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word camS_turk "," camS_kaj "," camS_lai "," camS_mar ","  camS_man ","  camS_sam ","  camS_nar "," camS_wp "," camS_tr "," camS_waj ","   camS_isi "," camS_lam "," camS_gar "," camS_bar)
file-close

;;proportion camel buyers in Turkana, Kajiado, Laikipia, Marsabit and Mandera, WP and Narok counties
file-open word path "/cam_pur.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word camP_turk "," camP_kaj "," camP_lai "," camP_mar ","camP_man ","   camP_sam ","   camP_nar "," camP_wp "," camP_tr "," camP_waj ","  camP_isi ","  camP_lam "," camP_gar "," camP_bar)
file-close

 ;;proportion shoat sellers in Turkana, Kajiado, Laikipia, Marsabit and Mandera, WP and Narok counties
file-open word path "/sht_sales.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
  file-print (word shtS_turk "," shtS_kaj "," shtS_lai "," shtS_mar "," shtS_man ","   shtS_sam "," shtS_nar "," shtS_wp "," shtS_tr ","  shtS_waj "," shtS_isi "," shtS_lam ","  shtS_gar "," shtS_bar)
file-close

;;proportion shoat buyers in Turkana, Kajiado, Laikipia, Marsabit and Mandera, WP and Narok counties
file-open word path "/sht_pur.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word shtP_turk "," shtP_kaj "," shtP_lai "," shtP_mar "," shtP_man ","   shtP_sam "," shtP_nar "," shtP_wp "," shtP_tr "," shtP_waj ","  shtP_isi ","  shtP_lam "," shtP_gar "," shtP_bar)
file-close

;;proportion households meeting cal req via gifting
file-open word path "/gift_r.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word gift_turk "," gift_kaj "," gift_lai "," gift_mar "," gift_man ","   gift_sam "," gift_nar "," gift_wp ","   gift_tr "," gift_waj "," gift_isi "," gift_lam ","  gift_gar "," gift_bar)
file-close

 ; cattle population in counties
file-open word path "/cattle.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word cat_turk "," cat_kaj "," cat_lai "," cat_mar "," cat_man ","  cat_sam ","  cat_nar ","  cat_wp "," cat_tr "," cat_waj ","  cat_isi "," cat_lam "," cat_gar "," cat_bar)
file-close

; goat population in counties
file-open word path "/goat.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word gt_turk "," gt_kaj ","  gt_lai "," gt_mar "," gt_man "," gt_sam "," gt_nar "," gt_wp ","   gt_tr "," gt_waj ","  gt_isi "," gt_lam ","  gt_gar "," gt_bar)
file-close

; sheep population in counties
file-open word path "/sheep.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word sh_turk "," sh_kaj "," sh_lai "," sh_mar "," sh_man ","  sh_sam "," sh_nar "," sh_wp "," sh_tr ","  sh_waj ","  sh_isi "," sh_lam "," sh_gar "," sh_bar)
file-close

; camel population in counties
file-open word path "/camel.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print (word cam_turk "," cam_kaj "," cam_lai "," cam_mar "," cam_man ","  cam_sam "," cam_nar "," cam_wp ","  cam_tr "," cam_waj ","  cam_isi "," cam_lam ","  cam_gar "," cam_bar)
file-close


;; Print info on raids to file
file-open word path "/Raid.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print  (word raid_turk "," raid_kaj "," raid_lai "," raid_mar "," raid_man ","  raid_sam "," raid_nar "," raid_wp "," raid_tr ","  raid_waj ","  raid_isi "," raid_lam "," raid_gar "," raid_bar)
file-close

;; Print info on income for livestokc sales to file
file-open word path "/Sale_inc.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print  (word saleinc_turk "," saleinc_kaj "," saleinc_lai "," saleinc_mar "," saleinc_man ","  saleinc_sam "," saleinc_nar "," saleinc_wp "," saleinc_tr ","  saleinc_waj ","  saleinc_isi "," saleinc_lam "," saleinc_gar "," saleinc_bar)
file-close

file-open word path "/Move.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print  (word move_turk "," move_kaj "," move_lai "," move_mar "," move_man ","  move_sam "," move_nar "," move_wp "," move_tr ","  move_waj ","  move_isi "," move_lam "," move_gar "," move_bar)
file-close


file-open word path "/Milk_inc.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print  (word milk_turk "," milk_kaj "," milk_lai "," milk_mar "," milk_man ","  milk_sam "," milk_nar "," milk_wp "," milk_tr ","  milk_waj ","  milk_isi "," milk_lam "," milk_gar "," milk_bar)
file-close


file-open word path "/liv_cal.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print  (word liv_cal_turk "," liv_cal_kaj "," liv_cal_lai "," liv_cal_mar "," liv_cal_man ","  liv_cal_sam "," liv_cal_nar "," liv_cal_wp "," liv_cal_tr ","  liv_cal_waj ","  liv_cal_isi "," liv_cal_lam "," liv_cal_gar "," liv_cal_bar)
file-close

file-open word path "/pa_use.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print  (word pro_turk "," pro_kaj "," pro_lai "," pro_mar "," pro_man ","  pro_sam "," pro_nar "," pro_wp "," pro_tr ","  pro_waj ","  pro_isi "," pro_lam "," pro_gar "," pro_bar)
file-close

file-open word path "/tlu-cap.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print  (word tlu_turk "," tlu_kaj "," tlu_lai "," tlu_mar "," tlu_man ","  tlu_sam "," tlu_nar "," tlu_wp "," tlu_tr ","  tlu_waj ","  tlu_isi "," tlu_lam "," tlu_gar "," tlu_bar)
file-close

file-open word path "/tlu1-cap.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print  (word tlu1_turk "," tlu1_kaj "," tlu1_lai "," tlu1_mar "," tlu1_man ","  tlu1_sam "," tlu1_nar "," tlu1_wp "," tlu1_tr ","  tlu1_waj ","  tlu1_isi "," tlu1_lam "," tlu1_gar "," tlu1_bar)
file-close

file-open word path "/tlu3-cap.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print  (word tlu3_turk "," tlu3_kaj "," tlu3_lai "," tlu3_mar "," tlu3_man ","  tlu3_sam "," tlu3_nar "," tlu3_wp "," tlu3_tr ","  tlu3_waj ","  tlu3_isi "," tlu3_lam "," tlu3_gar "," tlu3_bar)
file-close

file-open word path "/tlu6-cap.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print  (word tlu6_turk "," tlu6_kaj "," tlu6_lai "," tlu6_mar "," tlu6_man ","  tlu6_sam "," tlu6_nar "," tlu6_wp "," tlu6_tr ","  tlu6_waj ","  tlu6_isi "," tlu6_lam "," tlu6_gar "," tlu6_bar)
file-close


file-open word path "/pa_use.csv"
if ticks = 0 [file-print (word "Turkana" "," "Kajiado" "," "Laikipia" "," "Marsabit" "," "Mandera" "," "Samburu" "," "Narok" "," "West Pokot" "," "Tana River" "," "Wajir" "," "Isiolo" "," "Lamu" "," "Garissa" "," "Baringo")]
file-print  (word pro_turk "," pro_kaj "," pro_lai "," pro_mar "," pro_man ","  pro_sam "," pro_nar "," pro_wp "," pro_tr ","  pro_waj ","  pro_isi "," pro_lam "," pro_gar "," pro_bar)
file-close
end 

to export-start
let path word read-from-string (f_path) scenario
  let tribes (list "Turkana"  "Kajiado" "Laikipia"  "Marsabit"  "Mandera"  "Samburu"  "Narok"  "West Pokot" "Tana River" "Wajir" "Isiolo"  "Lamu"  "Garissa" "Baringo")
   let tlucaps ["Mean TLU-cap"]
   let tothouses ["Total households"]
   let meanind ["Mean households size"]
   let tot-cat ["Total cattle"]
   let tot-camel ["Total camel"]
   let tot-sh ["Total sheep"]
   let tot-gt ["Total goats"]
   let sed-fr ["Proportion Sedentary"]
   let split ["Proportion herd splitting"]
   let area ["Area"]

  foreach tribes [x ->
    set tlucaps lput mean [item 0 TLU-cap] of hholds with [my-tribe = x] tlucaps
    set tothouses lput count hholds with [my-tribe = x] tothouses
    set meanind lput mean [hh_tot] of hholds with [my-tribe = x] meanind
    set tot-cat lput sum [cat-tot] of hholds with [my-tribe = x] tot-cat
    set tot-camel lput sum [cam-tot] of hholds with [my-tribe = x] tot-camel
    set tot-sh lput sum [sh-tot] of hholds with [my-tribe = x] tot-sh
    set tot-gt lput sum [gt-tot] of hholds with [my-tribe = x] tot-gt
    set sed-fr lput ((count hholds with [my-tribe = x and nonsed = 0]) / (count hholds with [my-tribe = x])) sed-fr
    set split lput ((count hholds with [my-tribe = x and past_type = "splitter"]) / (count hholds with [my-tribe = x])) split
    set area lput (count patches with [tribe = x]) area
  ]


;file-open
  csv:to-file word path "/County_attributes.csv"  (list tribes tlucaps tothouses meanind sed-fr split tot-cat tot-camel tot-sh tot-gt area)
end 

to export-end
  let path word read-from-string (f_path) scenario
  csv:to-file word path "/raid-tribe.csv" ([(list my-tribe raid-tribe)] of hholds)
  csv:to-file word path "/raid-loss.csv" ([(list my-tribe raid-loss)] of hholds)
  csv:to-file word path "/move-cost.csv" ([(list my-tribe move-cost)] of hholds)
end 

There are 2 versions of this model.

Uploaded by When Description Download
Rekha Warrier about 3 years ago Weight gain updated. Download this version
Rekha Warrier about 4 years ago Initial upload Download this version

Attached files

File Type Description Last updated
Appendix1_SPIRALL.pdf pdf Procedures and parameters in SPIRALL almost 3 years ago, by Rekha Warrier Download
Appendix_2__SPIRALL.pdf pdf SPIRALL Parameter Specifications almost 3 years ago, by Rekha Warrier Download
esa_lc.asc data Information on land cover type associated with each patch about 4 years ago, by Rekha Warrier Download
Kenya_LivelihoodZones.zip data Shape file containing FEWS NET livelihood zones about 4 years ago, by Rekha Warrier Download
Kenyan Counties.zip data Shape file containing boundaries of Kenyan counties about 4 years ago, by Rekha Warrier Download
market_aoi.asc data Distance of each patch to the nearest urban center about 4 years ago, by Rekha Warrier Download
pop00.asc data Population density in the year 2000 about 4 years ago, by Rekha Warrier Download
SPIRALL.png preview Preview for 'SPIRALL' about 4 years ago, by Rekha Warrier Download

This model does not have any ancestors.

This model does not have any descendants.