Mercurial > repos > siwaa > insilicow
view test-data/input/TWIN/farmer-plan_TWIN.txt @ 3:3fe3e1e6a40b draft default tip
"planemo upload for repository https://forgemia.inra.fr/insilicow/insilicow-tool commit b530a8209615f225696abe3e0ba49093ff3dc4ad"
author | siwaa |
---|---|
date | Mon, 25 Aug 2025 16:37:43 +0000 |
parents | |
children |
line wrap: on
line source
################################################################################################################# # # # InSiliCow # # Virtual farm specification # # # ################################################################################################################# ################################################################################################################# #====== GENERAL SETTINGS # ################################################################################################################# #______ Include files @include farmer-log.txt # providing log action and trigger @include farmer-base.txt # providing basic components #______ Models: specify models for individual cows param_general{ garuns_type = garuns_olivier rpm_type = rpm_lite abortion_type = abortion_olivier } #______ Simulation: provide time range, output database and code name init{ begin_date = $start_date$ 00:00:00 end_date = $stop_date$ 23:59:59 output_db = db_events.sqlite output_config = config.txt name = $sim_id$ } #______ Log Farm information link{ trigger = init action = log_db farm_tag $farm_tag$ action = log_db start_date $start_date$ action = log_db stop_date $stop_date$ action = log_db now_date $now_date$ action = log_db latitude $latitude$ action = log_db longitude $longitude$ } #______ End of simulation trigger{ type = chron name = tr_end_simu scheme = $stop_date$ 23:59:58 } #______ Past and future condition{ type = chron_range name = past from = $start_date$ 00:00:00 to = $now_date$ 00:00:01 } condition{ type = chron_range name = future from = $now_date$ 00:00:00 to = $stop_date$ 23:59:59 } #______ Day one trigger{ type = chron name = day_one_herd scheme = $start_date$ 23:59:59 } trigger{ type = custom name = day_one } link{ trigger = day_one_herd action = broadcast_now day_one } #______ Calving tag link{ trigger = calving condition = calf_sex male condition = future action = log_db birth_of_male no_tag } link{ trigger = calving condition = calf_sex female condition = future action = log_db birth_of_female no_tag } #______ Manage initial dam state{ state = INITIAL-DAM } link{ trigger = day_one action = state_add INITIAL-DAM } link{ trigger = parturition condition = is_in INITIAL-DAM condition = not is_in IN_WILD action = trigger_later tr_delete_cow 1 } trigger{ type = custom name = tr_delete_cow } link{ trigger = tr_delete_cow action = delete_cow remove_initial_dam } #______ Stoechio stoechio{ } ################################################################################################################# #====== FARMING # ################################################################################################################# #______ Keep cows and calves in farm: no natural mating link{ trigger = enter IN_WILD action = state_move IN_WILD IN_FARM } link{ trigger = enter WILD_COW action = state_move WILD_COW DRY_COW } #______ Remove calf from dam: no natural weaning link{ trigger = enter SUCKLING_CALF action = state_move SUCKLING_CALF NURSED_CALF } #______ Milk cows: no natural drying-off at calf weaning link{ trigger = enter NURSING_COW action = state_move NURSING_COW LACTATING_COW } #______ Optimal feeding link{ trigger = enter IN_FARM action = trigger_later tr_optimal_feeding 0 } trigger{ type = custom name = tr_optimal_feeding } link{ trigger = tr_optimal_feeding action = change_food optimal } ################################################################################################################# #====== FARM COMPONENTS: genotype # ################################################################################################################# #______ Genetic_sD: provide Mendelian sampling std dev for transmission of Genetic Scaling Parameters (GSP) # GSP_newborn ~ Normal [ (GSP_mother + GSP_father)/2 , GSP_sd ] | within (min, max) #TWIN CASE : all sd = 0 genetic_sd{ garuns_olivier.WM{ sd = 0 min = 200 max = 800 } garuns_olivier.khi_M { sd = 0 min = 0.1 max = 0.6 } garuns_olivier.b0{ sd = 0 min = 0.80 max = 2.40 } garuns_olivier.nu_X{ sd = 0 min = 0.2 max = 1.8 } garuns_olivier.nu_Y{ sd = 0 min = 0.2 max = 1.8 } garuns_olivier.nu_F{ sd = 0 min = 0.50 max = 1.50 } garuns_olivier.nu_P{ sd = 0 min = 0.50 max = 1.50 } garuns_olivier.eD_star{ sd = 0 min = 9.0 max = 15.0 } garuns_olivier.NDF_star{ sd = 0 min = 0.10 max = 0.90 } garuns_olivier.psi{ sd = 0 min = 0 max = 1 } rpm_lite.nu_I{ sd = 0 min = 0.00 max = 0.20 } rpm_lite.nu_B{ sd = 0 min = 1.20 max = 2.20 } rpm_lite.nu_Z{ sd = 0 min = 0.90 max = 1.10 } } ################################################################################################################# #====== FARM COMPONENTS: herd (genotype-based initialization of individual cows) # ################################################################################################################# #______ INITIALIZATION of TWIN farm from tables Genotype and Initialization # From table Genotype: for all <cow_tag> (all lines) state{ state = cow_01 state = cow_02 state = cow_03 state = cow_04 state = cow_05 } action{ type = genericlog name = log_states_cows log_type = sqlite sqlite_path = db_states.sqlite sqlite_table = user_states #log_type = file #file_path = states-user.txt #sep_col = \t #file_line_flush=no column{ value = time name = time sqlite_type = numeric } column{ value = state.count.INITIAL-DAM name = INITIAL-DAM sqlite_type = numeric } column{ value = state.count.cow_01 name = cow_01 sqlite_type = numeric } column{ value = state.count.cow_02 name = cow_02 sqlite_type = numeric } column{ value = state.count.cow_03 name = cow_03 sqlite_type = numeric } column{ value = state.count.cow_04 name = cow_04 sqlite_type = numeric } column{ value = state.count.cow_05 name = cow_05 sqlite_type = numeric } } link{ trigger = every_day_herd action = log_states_cows } # From table Genotype: for each <cow_tag> not in table Initialization init_cow{ name=cow_03 abortion_olivier.delta = constant 3.0 abortion_olivier.enabled = never abortion_olivier.dip = vector constant 17 ; constant 64 abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 garuns_olivier.WM = constant 450 garuns_olivier.khi_M = constant 0.3 garuns_olivier.b0 = constant 1.6 garuns_olivier.nu_X = constant 1 garuns_olivier.nu_Y = constant 1.1 garuns_olivier.nu_F = constant 1 garuns_olivier.nu_P = constant 1 garuns_olivier.eD_star = constant 10.7 garuns_olivier.NDF_star = constant 1 garuns_olivier.psi = constant 1 rpm_lite.nu_B = constant 0.5 rpm_lite.nu_Z = constant 0.025 rpm_lite.nu_I = constant 1.7 } init_cow{ name=cow_04 abortion_olivier.delta = constant 3.0 abortion_olivier.enabled = never abortion_olivier.dip = vector constant 17 ; constant 64 abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 garuns_olivier.WM = constant 450 garuns_olivier.khi_M = constant 0.3 garuns_olivier.b0 = constant 1.6 garuns_olivier.nu_X = constant 1 garuns_olivier.nu_Y = constant 1.1 garuns_olivier.nu_F = constant 1 garuns_olivier.nu_P = constant 1 garuns_olivier.eD_star = constant 10.7 garuns_olivier.NDF_star = constant 1 garuns_olivier.psi = constant 1 rpm_lite.nu_B = constant 0.5 rpm_lite.nu_Z = constant 0.025 rpm_lite.nu_I = constant 1.7 } init_cow{ name=cow_05 abortion_olivier.delta = constant 3.0 abortion_olivier.enabled = never abortion_olivier.dip = vector constant 17 ; constant 64 abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 garuns_olivier.WM = constant 450 garuns_olivier.khi_M = constant 0.3 garuns_olivier.b0 = constant 1.6 garuns_olivier.nu_X = constant 1 garuns_olivier.nu_Y = constant 1.1 garuns_olivier.nu_F = constant 1 garuns_olivier.nu_P = constant 1 garuns_olivier.eD_star = constant 10.7 garuns_olivier.NDF_star = constant 1 garuns_olivier.psi = constant 1 rpm_lite.nu_B = constant 0.5 rpm_lite.nu_Z = constant 0.025 rpm_lite.nu_I = constant 1.7 } # From table Initialization: for each <dam_tag> (each line) breed{ breed = dam_cow_01 breed = dam_cow_02 } # From table Initialization: for each <sire_tag> (each line) init_bull{ name= sire_cow_01 bull.breed_name = dam_cow_01 bull.semens_quality = constant 1.0 bull.female_ratio = constant 1.0 # Genotype sub-block associated with cow_01 in table Genotype garuns_olivier.WM = constant 450 garuns_olivier.khi_M = constant 0.3 garuns_olivier.b0 = constant 1.6 garuns_olivier.nu_X = constant 1 garuns_olivier.nu_Y = constant 1.1 garuns_olivier.nu_F = constant 1 garuns_olivier.nu_P = constant 1 garuns_olivier.eD_star = constant 10.7 garuns_olivier.NDF_star = constant 1 garuns_olivier.psi = constant 1 rpm_lite.nu_B = constant 0.5 rpm_lite.nu_Z = constant 0.025 rpm_lite.nu_I = constant 1.7 } init_bull{ name= sire_cow_02 bull.breed_name = dam_cow_02 bull.semens_quality = constant 1.0 bull.female_ratio = constant 1.0 # Genotype sub-block associated with cow_02 in table Genotype garuns_olivier.WM = constant 450 garuns_olivier.khi_M = constant 0.3 garuns_olivier.b0 = constant 1.6 garuns_olivier.nu_X = constant 1 garuns_olivier.nu_Y = constant 1.1 garuns_olivier.nu_F = constant 1 garuns_olivier.nu_P = constant 1 garuns_olivier.eD_star = constant 10.7 garuns_olivier.NDF_star = constant 1 garuns_olivier.psi = constant 1 rpm_lite.nu_B = constant 0.5 rpm_lite.nu_Z = constant 0.025 rpm_lite.nu_I = constant 1.7 } # From table Initialization: for each <dam_tag> (each line) init_cow{ name=dam_cow_01 #______ Abortion sub-block abortion_olivier.delta = constant 3.0 abortion_olivier.enabled = never abortion_olivier.dip = vector constant 17 ; constant 64 abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 # Genotype sub-block associated with cow_01 in table Genotype garuns_olivier.WM = constant 450 garuns_olivier.khi_M = constant 0.3 garuns_olivier.b0 = constant 1.6 garuns_olivier.nu_X = constant 1 garuns_olivier.nu_Y = constant 1.1 garuns_olivier.nu_F = constant 1 garuns_olivier.nu_P = constant 1 garuns_olivier.eD_star = constant 10.7 garuns_olivier.NDF_star = constant 1 garuns_olivier.psi = constant 1 rpm_lite.nu_B = constant 0.5 rpm_lite.nu_Z = constant 0.025 rpm_lite.nu_I = constant 1.7 } init_cow{ name=dam_cow_02 #______ Abortion sub-block abortion_olivier.delta = constant 3.0 abortion_olivier.enabled = never abortion_olivier.dip = vector constant 17 ; constant 64 abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 # Genotype sub-block associated with cow_02 in table Genotype garuns_olivier.WM = constant 450 garuns_olivier.khi_M = constant 0.3 garuns_olivier.b0 = constant 1.6 garuns_olivier.nu_X = constant 1 garuns_olivier.nu_Y = constant 1.1 garuns_olivier.nu_F = constant 1 garuns_olivier.nu_P = constant 1 garuns_olivier.eD_star = constant 10.7 garuns_olivier.NDF_star = constant 1 garuns_olivier.psi = constant 1 rpm_lite.nu_B = constant 0.5 rpm_lite.nu_Z = constant 0.025 rpm_lite.nu_I = constant 1.7 } # From table Initialization: for each line # The value of days_after_conception is set such as N = - (birth_date – 280 – start_date) action{ type = buy_cow name = buy_dam_cow_01 init_cow = dam_cow_01 init_bull = sire_cow_01 age = 600 days_after_conception = -1 number = 1 } action{ type = buy_cow name = buy_dam_cow_02 init_cow = dam_cow_02 init_bull = sire_cow_02 age = 600 days_after_conception = -30 number = 1 } # From table Initialization: for all lines link{ trigger = init action = buy_dam_cow_01 action = buy_dam_cow_02 } # From table Initialization: for each line link{ trigger = calving condition = calf_breed dam_cow_01 action = state_add cow_01 action = log_db birth_of_female cow_01 birth_from_dam dam_cow_01 birth_from_sire sire_cow_01 } link{ trigger = calving condition = calf_breed dam_cow_02 action = state_add cow_02 action = log_db birth_of_female cow_02 birth_from_dam dam_cow_02 birth_from_sire sire_cow_02 } #______ MANAGE BREEDING of TWIN farm from tables Genotype & Insemination # Define once init_bull{ name= no_conception bull.breed_name = NULL bull.semens_quality = constant 0.0 bull.female_ratio = constant 0.5 } # For all lines where conception is not 0 breed{ breed = NULL #always this line breed = IA_01 breed = IA_02 breed = IA_03 breed = IA_04 } # From table Insemination: for each line where conception = 1 and calf_sex = 1 (male) init_bull{ name= semen_IA_01 bull.breed_name = IA_01 bull.semens_quality = constant 1.0 bull.female_ratio = constant 0.0 } # From table Insemination: for each line where conception = 1 and calf_sex = 0 (female) init_bull{ name= semen_IA_02 bull.breed_name = IA_02 bull.semens_quality = constant 1.0 bull.female_ratio = constant 1.0 # Genotype sub-block associated with <calf_tag> = cow_03 in table Genotype garuns_olivier.WM = constant 450 garuns_olivier.khi_M = constant 0.3 garuns_olivier.b0 = constant 1.6 garuns_olivier.nu_X = constant 1 garuns_olivier.nu_Y = constant 1.1 garuns_olivier.nu_F = constant 1 garuns_olivier.nu_P = constant 1 garuns_olivier.eD_star = constant 10.7 garuns_olivier.NDF_star = constant 1 garuns_olivier.psi = constant 1 rpm_lite.nu_B = constant 0.5 rpm_lite.nu_Z = constant 0.025 rpm_lite.nu_I = constant 1.7 } init_bull{ name= semen_IA_03 bull.breed_name = IA_03 bull.semens_quality = constant 1.0 bull.female_ratio = constant 1.0 # Genotype sub-block associated with <calf_tag> = cow_05 in table Genotype garuns_olivier.WM = constant 450 garuns_olivier.khi_M = constant 0.3 garuns_olivier.b0 = constant 1.6 garuns_olivier.nu_X = constant 1 garuns_olivier.nu_Y = constant 1.1 garuns_olivier.nu_F = constant 1 garuns_olivier.nu_P = constant 1 garuns_olivier.eD_star = constant 10.7 garuns_olivier.NDF_star = constant 1 garuns_olivier.psi = constant 1 rpm_lite.nu_B = constant 0.5 rpm_lite.nu_Z = constant 0.025 rpm_lite.nu_I = constant 1.7 } init_bull{ name= semen_IA_04 bull.breed_name = IA_04 bull.semens_quality = constant 1.0 bull.female_ratio = constant 1.0 # Genotype sub-block associated with <calf_tag> = cow_04 in table Genotype garuns_olivier.WM = constant 450 garuns_olivier.khi_M = constant 0.3 garuns_olivier.b0 = constant 1.6 garuns_olivier.nu_X = constant 1 garuns_olivier.nu_Y = constant 1.1 garuns_olivier.nu_F = constant 1 garuns_olivier.nu_P = constant 1 garuns_olivier.eD_star = constant 10.7 garuns_olivier.NDF_star = constant 1 garuns_olivier.psi = constant 1 rpm_lite.nu_B = constant 0.5 rpm_lite.nu_Z = constant 0.025 rpm_lite.nu_I = constant 1.7 } # From table Insemination: for each different <insemination date> trigger{ type = chron name = trigger_insem_19720221 scheme = 1972-02-21 12:00:00 } trigger{ type = chron name = trigger_insem_19730106 scheme = 1973-01-06 12:00:00 } trigger{ type = chron name = trigger_insem_19750225 scheme = 1975-02-25 12:00:00 } trigger{ type = chron name = trigger_insem_19720321 scheme = 1972-03-21 12:00:00 } trigger{ type = chron name = trigger_insem_19730204 scheme = 1973-02-04 12:00:00 } trigger{ type = chron name = trigger_insem_19730225 scheme = 1973-02-25 12:00:00 } # From table Insemination: for each line link{ trigger = trigger_insem_19720221 action = insemination_IA_01 } trigger{ type = custom name = trigger_insem_19720221_cow_01 } action{ type = broadcast_now name = insemination_IA_01 condition = is_in cow_01 trigger = trigger_insem_19720221_cow_01 } link{ trigger = trigger_insem_19730106 action = insemination_IA_02 } trigger{ type = custom name = trigger_insem_19730106_cow_01 } action{ type = broadcast_now name = insemination_IA_02 condition = is_in cow_01 trigger = trigger_insem_19730106_cow_01 } link{ trigger = trigger_insem_19750225 action = insemination_IA_03 } trigger{ type = custom name = trigger_insem_19750225_cow_03 } action{ type = broadcast_now name = insemination_IA_03 condition = is_in cow_03 trigger = trigger_insem_19750225_cow_03 } link{ trigger = trigger_insem_19720321 action = insemination_IA_04 } trigger{ type = custom name = trigger_insem_19720321_cow_02 } action{ type = broadcast_now name = insemination_IA_04 condition = is_in cow_02 trigger = trigger_insem_19720321_cow_02 } link{ trigger = trigger_insem_19730204 action = insemination_IA_05 } trigger{ type = custom name = trigger_insem_19730204_cow_02 } action{ type = broadcast_now name = insemination_IA_05 condition = is_in cow_02 trigger = trigger_insem_19730204_cow_02 } link{ trigger = trigger_insem_19730225 action = insemination_IA_06 } trigger{ type = custom name = trigger_insem_19730225_cow_02 } action{ type = broadcast_now name = insemination_IA_06 condition = is_in cow_02 trigger = trigger_insem_19730225_cow_02 } # From table Insemination : for each line WHERE conception = 0 link{ trigger = trigger_insem_19730204_cow_02 action = inseminate no_conception } link{ trigger = trigger_insem_19730225_cow_02 action = inseminate no_conception } # From table Insemination : for each line WHERE conception = 1 link{ trigger = trigger_insem_19720221_cow_01 action = force_conception semen_IA_01 } link{ trigger = trigger_insem_19730106_cow_01 action = force_conception semen_IA_02 } link{ trigger = trigger_insem_19750225_cow_03 action = force_conception semen_IA_03 } link{ trigger = trigger_insem_19720321_cow_02 action = force_conception semen_IA_04 } # From table Insemination : for each line WHERE conception = 1 AND calf_sex = 0 (female) link{ trigger = calving condition = calf_breed IA_02 action = state_add cow_03 action = log_db birth_of_female cow_03 birth_from_dam cow_01 birth_from_sire sire_20 } link{ trigger = calving condition = calf_breed IA_03 action = state_add cow_05 action = log_db birth_of_female cow_05 birth_from_dam cow_03 birth_from_sire sire_20 } link{ trigger = calving condition = calf_breed IA_04 action = state_add cow_04 action = log_db birth_of_female cow_04 birth_from_dam cow_02 birth_from_sire sire_20 } # From table Insemination : for each line WHERE conception = 1 AND calf_sex = 0 (male) link{ trigger = calving condition = calf_breed IA_01 action = log_db birth_of_male calf_a birth_from_dam cow_01 birth_from_sire sire_10 } #______ MANAGE DEATH of TWIN farm from table Death # From table Death: for each different <death_date> trigger{ type = chron name = trigger_death_19741001 scheme = 1974-10-01 23:59:59 } # From table Death: for each different <cow_tag> link{ trigger = trigger_death_19741001 action = death_cow_01 } trigger{ type = custom name = trigger_death_19741001_cow_01 } action{ type = broadcast_now name = death_cow_01 condition = is_in cow_01 trigger = trigger_death_19741001_cow_01 } link{ trigger = trigger_death_19741001_cow_01 #action = log_db death_of_cow cow_01 #action = delete_cow death action = trigger_now om_death } #______ MANAGE CULLING of TWIN farm from table Culling # From table Culling: for each different <culling_date> trigger{ type = chron name = trigger_culling_19731025 scheme = 1973-10-25 06:00:00 } # From table Culling: for each different <cow_tag> link{ trigger = trigger_culling_19731025 action = culling_cow_02 } trigger{ type = custom name = trigger_culling_19731025_cow_02 } action{ type = broadcast_now name = culling_cow_02 condition = is_in cow_02 trigger = trigger_culling_19731025_cow_02 } link{ trigger = trigger_culling_19731025_cow_02 #action = log_db culling_of_cow cow_02 action = delete_cow culling cow_02 action = log_db delete_cow: for a reason } #______ MANAGE DRYING-OFF of TWIN farm from table Drying-off # From table Drying-off: for each different <drying_off_date> trigger{ type = chron name = trigger_dryingoff_19730923 scheme = 1973-09-23 14:00:00 } trigger{ type = chron name = trigger_dryingoff_19740809 scheme = 1974-08-09 14:00:00 } trigger{ type = chron name = trigger_dryingoff_19760927 scheme = 1976-09-27 14:00:00 } trigger{ type = chron name = trigger_dryingoff_19731022 scheme = 1973-10-22 14:00:00 } # From table Drying-off: for each different <cow_tag> link{ trigger = trigger_dryingoff_19730923 action = dryingoff_cow_01_parity_1 } trigger{ type = custom name = trigger_dryingoff_19730923_cow_01 } action{ type = broadcast_now name = dryingoff_cow_01_parity_1 condition = is_in cow_01 trigger = trigger_dryingoff_19730923_cow_01 } link{ trigger = trigger_dryingoff_19730923_cow_01 #action = log_db dryingoff_of_cow cow_01 dryingoff_in_parity 1 action = stop_milking action = log_db stop_milking: cow_01 in_parity 1 } link{ trigger = trigger_dryingoff_19740809 action = dryingoff_cow_01_parity_2 } trigger{ type = custom name = trigger_dryingoff_19740809_cow_01 } action{ type = broadcast_now name = dryingoff_cow_01_parity_2 condition = is_in cow_01 trigger = trigger_dryingoff_19740809_cow_01 } link{ trigger = trigger_dryingoff_19740809_cow_01 #action = log_db dryingoff_of_cow cow_01 dryingoff_in_parity 2 action = stop_milking action = log_db stop_milking: cow_01 in_parity 2 } link{ trigger = trigger_dryingoff_19760927 action = dryingoff_cow_03_parity_1 } trigger{ type = custom name = trigger_dryingoff_19760927_cow_03 } action{ type = broadcast_now name = dryingoff_cow_03_parity_1 condition = is_in cow_03 trigger = trigger_dryingoff_19760927_cow_03 } link{ trigger = trigger_dryingoff_19760927_cow_03 #action = log_db dryingoff_of_cow cow_03 dryingoff_in_parity 1 action = stop_milking action = log_db stop_milking: cow_03 in_parity 1 } link{ trigger = trigger_dryingoff_19731022 action = dryingoff_cow_02_parity_1 } trigger{ type = custom name = trigger_dryingoff_19731022_cow_02 } action{ type = broadcast_now name = dryingoff_cow_02_parity_1 condition = is_in cow_02 trigger = trigger_dryingoff_19731022_cow_02 } link{ trigger = trigger_dryingoff_19731022_cow_02 #action = log_db dryingoff_of_cow cow_02 dryingoff_in_parity 1 action = stop_milking action = log_db stop_milking: cow_02 in_parity 1 } ################################################################################################################# #====== FARM COMPONENTS: semen (genotype-based initialization of semen from individual bulls) # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: heat detection # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: feedstuffs # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: diets # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: time schemes # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: groups # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: operations # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: transfers # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: perturbations # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: parcels # #################################################################################################################