diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input/TWIN/farmer-plan_TWIN.txt	Mon Aug 25 16:37:43 2025 +0000
@@ -0,0 +1,1044 @@
+#################################################################################################################
+#                                                                                                               #
+#	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	 									#
+#################################################################################################################
+
+