Mercurial > repos > siwaa > insilicow
changeset 0:50112d3941d8 draft
"planemo upload for repository https://forgemia.inra.fr/insilicow/insilicow-tool commit a01dd8fc54d5015e703722d7acb8db4b54b4a468"
author | siwaa |
---|---|
date | Mon, 07 Apr 2025 15:18:25 +0000 |
parents | |
children | f2840b46b353 |
files | inSiliCow-post.sh inSiliCow-run.sh insilicow.xml test-data/input/example_00.zip test-data/input/example_00/explan.txt test-data/input/example_00/farmer-pl.txt test-data/input/example_01.zip test-data/input/example_01/explan.txt test-data/input/example_01/farmer-pl.txt test-data/input/example_02.zip test-data/input/example_02/explan.txt test-data/input/example_02/farmer-pl.txt |
diffstat | 12 files changed, 7366 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/inSiliCow-post.sh Mon Apr 07 15:18:25 2025 +0000 @@ -0,0 +1,29 @@ +#!/bin/sh + +echo "IN_EXPLAN=$IN_EXPLAN" # +echo "OUT_FOLDER=$OUT_FOLDER" # +echo "IN_FOLDER=$IN_FOLDER" # +echo "IN_EXE=$IN_EXE" # +echo "SCRIPT_FOLDER=$SCRIPT_FOLDER" # +echo "OUT_FOLDER=$OUT_FOLDER" # +echo "IN_SCILAB=$IN_SCILAB" # +echo "OUT_SIM=$OUT_SIM" # +echo "SIM_ID=$SIM_ID" # + +HERE=$(realpath ./ ) + +echo "$OUT_SIM BEGIN" &&\ +cp "$IN_FOLDER/farmer-log.txt" "$OUT_SIM" && \ +cd "$OUT_SIM" && \ +"$IN_EXE" farmer.txt > log.txt && \ +mkdir cows && \ +Rscript "$SCRIPT_FOLDER/cowcut.R" "./" "cows/" && \ +MESA_GL_VERSION_OVERRIDE=3.0 "$IN_SCILAB" -f "$SCRIPT_FOLDER/inSiliCow-abby.sci" -nwni -quit -args "$OUT_SIM" "$OUT_SIM" "$PL_PREFIX$SIM_ID$PL_SUFFIX" && \ +echo "$OUT_SIM OK" + +#--- ZIP individual sim forlers --- +#cd "$OUT_FOLDER" && \ +#zip -rmq9 "$SIM_ID.zip" "$SIM_ID" ; +#cd "$HERE"; + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/inSiliCow-run.sh Mon Apr 07 15:18:25 2025 +0000 @@ -0,0 +1,185 @@ +#!/bin/bash + +# Title: inSiliCow-run.sh +# Address: main/run +# Description: Launch simulations +# Authors: Olivier MARTIN ( https://orcid.org/0000-0001-7375-2850 ) +# Pierre Blavy +# Contact: olivier.martin-mosar@inrae.fr +# Date: 2025 +# Usage: inSiliCow-run.sh example_xx [out] +# example_xx is a folder in examples/ +# out is the output folder, default ./out + +clear + +#-------------------------------------- +#--- Colors for display in terminal --- +#-------------------------------------- + +# Set Bold High Intensity colors +R='\033[1;91m' # Red +B='\033[1;94m' # Blue +NC='\033[0m' # No Color + +#Set BIP sound +BIP='\007' + +# --- Opening message --- +echo -e ${B}"\n> Launching inSiliCow"${NC} + +# ----------------------- +# --- Input arguments --- +# ----------------------- +#$1 is an example folder that exists in examples +#$2 is the output folder, must exists, default "./out" + +if [ "$#" -le 0 ]; then + echo -e ${B}"\n>> Missing argument" + echo -e ">> Usage:"${NC}" inSilicow-run example_00 [out]" + echo -e ${B}"\n>> Aborted\n"${NC} + exit 1 +fi + +INPUT_DIR=$(realpath "examples/$1" ) +OUTPUT_DIR=$(realpath ${2:-"./out"}) +mkdir -p $OUTPUT_DIR + + +FARMER_LOG=$(realpath "examples/farmer-log.txt" ) +SCRIPTS_DIR=$(realpath ./) +SCILAB=$(ls -drt $HOME/* | grep scilab- | tail -1)"/bin/scilab-cli" +INSILICOW=$(realpath ./../insilicow-linux) + +CURRENT=`pwd` + +# -------------------------- +# --- Check things --------- +# -------------------------- + +#Input does'nt exists => return +if [ ! -d "$INPUT_DIR" ]; then + echo -e ${BIP}${R}"\n>> Input directory $INPUT_DIR does not exist\n"; + echo -e ">> Aborted\n"; + exit 1; +fi + +#Output does'nt exists => return +#if [ ! -d "$OUTPUT_DIR" ]; then +# echo -e ${BIP}${R}"\n>> Output directory $OUTPUT_DIR does not exist\n"; +# echo -e ">> Aborted\n"; +# exit 1; +#fi + +#inSiliCow binary does'nt exists => return +if [ ! -e "$INSILICOW" ]; then + echo -e ${BIP}${R}"\n>> inSiliCow binary $INSILICOW does not exist\n"; + echo -e ">> Aborted\n"; + exit 1; +fi + +# ----------------------- +# --- Output ------------ +# ----------------------- + +#Get current date to name output folder +d=`date "+%Y%m%d_%H%M%S_%N"` +OUT_JOB="$OUTPUT_DIR/job-$d" +ZIP_FILE=$(realpath "$OUTPUT_DIR/simulations-$d.zip" ) + +# ------------------------------ +# --- Print input and output --- +# ------------------------------ + +echo -e ${B}"\n>> Pathways:" +echo -e " Input:\t$INPUT_DIR"; +echo -e " Output:\t$OUT_JOB"; +echo -e " Scilab:\t$SCILAB"; +echo -e " inSiliCow:\t$INSILICOW\n"${NC}; + + +# --------------------------------- +# --- Make output folders --------- +# --------------------------------- +mkdir -p "$OUT_JOB/in"; +mkdir -p "$OUT_JOB/out"; + +# ------------------------------------- +# --- check if scilab is responding --- +# ------------------------------------- + +#check-scilab.sci xxx creates a file called "xxx/scilab_is_ok" +rm -f "$OUTPUT_DIR/scilab_is_ok" + +#"$SCILAB" -f "$SCRIPTS_DIR/check-scilab.sci" -nwni -quit -args "$OUTPUT_DIR"; + +#if [ ! -f "$OUTPUT_DIR/scilab_is_ok" ]; then +# echo -e ${BIP}${R}"\n>> Scilab is not responding\n"; +# echo -e ">> Aborted\n"; +# exit 0; +#fi + +rm "$OUTPUT_DIR/scilab_is_ok" + +# -------------------------- +# --- Run the jobs --------- +# -------------------------- + +# --- Track time --- +SECONDS=0; + +#Format elapsed time +FormatSeconds () { + seconds="$1" + date -ud @${seconds} +"$(( seconds/3600/24 ))d %Hh %Mm %Ss" \ + | sed -r 's/\b0([0-9])/\1/g; s/\b0(s|m|h|d)//g; s/ +/ /g; s/^ +//; s/ +$//; s/^$/0s/' +} + +#copy input to $OUT_JOB/in +cp -r "$INPUT_DIR/"* "$OUT_JOB/in/" +cp "$FARMER_LOG" "$OUT_JOB/in/" + +echo -e ${B}"\n>> Starting job $d\n"${NC} + +# -------------- +# --- explan --- +# -------------- + +#Create file explan-config.txt with right paths +cat > "$OUT_JOB/in/explan-config.txt" << EOF +explan{ + IN_CPU = 4 #number of parallel jobs + IN_EXPLAN = $OUT_JOB/in/explan.txt + OUT_FOLDER = $OUT_JOB/out/ + IN_FOLDER = $OUT_JOB/in/ + IN_EXE = $INSILICOW + SCRIPT_FOLDER = $SCRIPTS_DIR + OUT_FOLDER = $OUT_JOB/sim + IN_SCILAB = $SCILAB +} +EOF + + +# Execute R script to launch simulations +echo -e ${B}"\n>> Starting simulation\n"${NC} +Rscript "$SCRIPTS_DIR/explan2.R" "$OUT_JOB/in/explan-config.txt" + + +# ZIP + +#uncomment the block below to zip output + +#rm -f "$ZIP_FILE" +#echo -e ${B}"\n>> Compress simulation to $ZIP_FILE \n"${NC} +#cd "$OUT_JOB" && \ +#zip -rq9 "$ZIP_FILE" ./ -x out/sim_*/log_herd.txt && \ +#cd "$CURRENT" && \ +#rm -rf "$OUT_JOB" + + +# ----------------------------------- +# --- display final message --------- +# ----------------------------------- + +echo -e ${B}"\n>> Job "$d" done in $(FormatSeconds $SECONDS)${NC}\n" +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/insilicow.xml Mon Apr 07 15:18:25 2025 +0000 @@ -0,0 +1,78 @@ +<tool id="inSiliCow" name="inSiliCow" version="1.0.0"> + <description>to run the inSiliCow simulator</description> + <requirements> + <container type="singularity">docker://registry.forgemia.inra.fr/insilicow/insilicow-container:6d9cbffcf24d3af29b244ea3543c53b4298077de</container> + </requirements> + <command detect_errors="aggressive"> + <![CDATA[ + echo "=================" && + env && + echo "=================" && + cp -r /insilicow-simulator . && + cd insilicow-simulator/scripts && + cp $__tool_directory__/inSiliCow-run.sh . && + cp $__tool_directory__/inSiliCow-post.sh . && + rm -rf examples/e* && + unzip -d tmp ${in} && + configDir=\$(ls -1 tmp) && + mv tmp/* examples && + pwd && ls && echo \$configDir && + chmod u+x ./inSiliCow-run.sh && + TERM="xterm-256color" ./inSiliCow-run.sh \$configDir && + cd out && + zip -r j* * && + mv *.zip ${out} + ]]> + </command> + <inputs> + <param name="in" type="data" format="zip" label="Select a inSiliCow config folder (zip file)"/> + </inputs> + <outputs> + <data format="zip" name="out" + label="inSiliCowOutputs"> + </data> + </outputs> + <tests> + <test> + <param name="in" value="input/example_00.zip" ftype="zip" /> + <output name="out" ftype="zip" > + <assert_contents> + <has_archive_member path=".*/out/farmer.sh"> + <has_size value="0" negate="true" /> + </has_archive_member> + <has_archive_member path=".*/in/explan.txt"> + <has_size value="0" negate="true" /> + <has_text text="end_year" /> + <has_text text="1971" /> + </has_archive_member> + <has_archive_member path=".*/out/sim_1/events.sqlite"> + <has_size value="0" negate="true" /> + </has_archive_member> + <has_archive_member path=".*/out/sim_1/states.txt"> + <has_size value="0" negate="true" /> + <has_text text="CALF" /> + </has_archive_member> + <has_archive_member path=".*/out/sim_1/cows/nb_cows.txt"> + <has_text text="126" /> + </has_archive_member> + </assert_contents> + </output> + </test> + </tests> + <help> +*The usage of this tool is restricted to the user of the redelac_authorized group.* + +*To be granted, apply to the REDELAC Project Team and then request to SIWAA* + +Documentation +------------- +A tool to generate Stics Inputs according to a plan for REDELAC + +Credits +------- +- Wrapped Tool Author: https://www6.paca.inrae.fr/stics_eng/About-us/Project-Stics-Team +- Stics Site: https://www6.paca.inra.fr/stics_eng +- Galaxy Tool Maintainer: Patrick Chabrier patrick.chabrier@inrae.fr +- Copyright: INRAE + </help> +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/input/example_00/explan.txt Mon Apr 07 15:18:25 2025 +0000 @@ -0,0 +1,2 @@ +template_file sim_id end_year +farmer-pl.txt sim_1 1971
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/input/example_00/farmer-pl.txt Mon Apr 07 15:18:25 2025 +0000 @@ -0,0 +1,2360 @@ +################################################################################################################# +# # +# InSiliCow: Farm Management # +# # +################################################################################################################# + +################################################################################################################# +#====== Preprocessor: specification of included files # +################################################################################################################# + +@include farmer-log.txt +# provides the action log_olivier +# call the action log_olivier every hour + + + + +################################################################################################################# +#====== Initialization of simulation # +################################################################################################################# + +#______ Simulation time range + +init{ + begin_date = 1970-01-01 00:00:00 # 1970-01-01 00:00:00 + end_date = $end_year$-12-31 23:59:59 # 1975-02-20 23:59:59 + output_db = events.sqlite + name = $sim_id$ +} + +#______ Models + +param_general{ + garuns_type = garuns_olivier + rpm_type = rpm_lite + abortion_type = abortion_olivier +} + + +#______ Stoechio +stoechio{ + +} + + + + +################################################################################################################# +#====== Genetic Scaling Parameters (GSP): defines individual cow performance # +# # +#======> in GARUNS model # +#GSP (unit) : Name Default | Proxy for # +#WM (Kg) : Mature non labile body mass 450 ± 25 | Format # +#khi_M (%) : Target labile:non-labile mass ratio 0.33 ± 0.03 | Body fatness # +#b0 (1/d) : Reserves storage rate 1.6 ± 0.16 | Reserve lability # +#nu_X (-) : Labile body mass mobilization index 1.0 ± 0.1 | Maternal investment # +#nu_Y (-) : Milk yield index 1.0 ± 0.1 | Milk potential # +#nu_F (-) : Milk fat secretion index 1.00 ± 0.02 | Milk fat content # +#nu_P (-) : Milk protein secretion index 1.00 ± 0.02 | Milk protein content # +#eD_star (MJ ME/Kg DM) : Optimal diet energy content 12.3 ± 0.5 | Energy intake capacity # +#NDF_star (Kg NDF/Kg DM): Optimal fiber energy content 0.5 ± 0.02 | Fiber intake capacity # +# # +#======> in RPM model # +#nu_I (-) : Conception probability threshold 0.026 ± 0.007 | Fertility # +#nu_B (-) : Puberty index 1.70 ± 0.07 | Age at 1st ovulation # +#nu_Z (-) : Follicular dynamics rate 1.00 ± 0.02 | Estrous duration # +################################################################################################################# + +################################################################################################################# +#====== Transmission of Genetic Scaling Parameters (GSP) # +# > genetic_sd defines the Mendelian sampling standard deviation for the calculation of the GSP of # +# a newborn calf : GSP_newborn ~ Normal [ (GSP_mother + GSP_father)/2 , GSP_sd ] # +################################################################################################################# + +genetic_sd{ + + garuns_olivier.WM{ + sd = 50 + min = 200 + max = 800 + } + + garuns_olivier.khi_M { + sd = 0.06 + 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.1 + 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 + } + + rpm_lite.nu_I{ + sd = 0.007 + min = 0.00 + max = 0.20 + } + + rpm_lite.nu_B{ + sd = 0.07 + min = 1.20 + max = 2.20 + } + + rpm_lite.nu_Z{ + sd = 0.02 + min = 0.90 + max = 1.10 + } +} + +################################################################################################################# +#====== Initialization of cows # +################################################################################################################# + +####### DEFAULT COW ############################################################################################# +init_cow{ + name=cow_default + + ### ABORTION rules acording to days in pregnancy (dip) + abortion_olivier.delta = constant 3.0 # days (compute every delta) + abortion_olivier.enabled = sometime + # never : no abortion, + # always : always abort, + # sometime : abort according to abortion_olivier.abo + # and abortion_olivier.dip + + ### Days in pregnancy (dip) cutoffs (to cut gestation in early embryo, late embryo and fetal stages) + # Default intervals: Early embryo [0;17] Late embryo [17;64] Fetal [64;+inf] + abortion_olivier.dip = vector constant 17 ; constant 64 + + ### Daily probability of abortion for each intervals + # Default probabiliies : E: 0.0230 L: 0.0096 F: 0.0004 + abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 + + ### GARUNS & RPM_lite Genetic Scaling Parameters + # Default constant values + garuns_olivier.WM = constant 450 #450 + garuns_olivier.khi_M = constant 0.30 # 0.33 + garuns_olivier.b0 = constant 1.6 # 1.6 + garuns_olivier.nu_X = constant 1 # 1.0 + garuns_olivier.nu_Y = constant 1.1 # 1.0 + garuns_olivier.nu_F = constant 1 # 1.0 + garuns_olivier.nu_P = constant 1 # 1.0 + garuns_olivier.eD_star = constant 10.7 # 10.7 + garuns_olivier.NDF_star = constant 0.5 # 0.5 + rpm_lite.nu_B = constant 1.7 # 1.7 + rpm_lite.nu_Z = constant 1 # 1.0 + rpm_lite.nu_I = constant 0.025 # 0.026 +} + +####### RANDOM COW ############################################################################################## +init_cow{ + name=cow_random + + ### ABORTION rules acording to days in pregnancy (dip) + abortion_olivier.delta = constant 3.0 # days (compute every delta) + abortion_olivier.enabled = sometime + # never : no abortion, + # always : always abort, + # sometime : abort according to abortion_olivier.abo + # and abortion_olivier.dip + + ### Days in pregnancy (dip) cutoffs (to cut gestation in early embryo, late embryo and fetal stages) + # Default intervals: Early embryo [0;17] Late embryo [17;64] Fetal [64;+inf] + abortion_olivier.dip = vector constant 17 ; constant 64 + + ### Daily probability of abortion for each intervals + # Default probabiliies : E: 0.0230 L: 0.0096 F: 0.0004 + abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 + + ### GARUNS & RPM_lite Genetic Scaling Parameters + # Random values + garuns_olivier.WM = norm99 450 50 #450 ± 25 + garuns_olivier.khi_M = norm99 0.30 0.06 # 0.33 ± 0.03 + garuns_olivier.b0 = norm99 1.6 0 # 1.6 ± 0.16 + garuns_olivier.nu_X = norm99 1 0 # 1.0 ± 0.10 + garuns_olivier.nu_Y = norm99 1.1 0.1 # 1.0 ± 0.10 + garuns_olivier.nu_F = norm99 1 0 # 1.0 ± 0.02 + garuns_olivier.nu_P = norm99 1 0 # 1.0 ± 0.02 + garuns_olivier.eD_star = norm99 10.7 0 # 10.7 ± 0.5 + garuns_olivier.NDF_star = norm99 0.5 0 # 0.5 ± 0.02 + rpm_lite.nu_B = norm99 1.7 0.07 # 1.7 ± 0.07 + rpm_lite.nu_Z = norm99 1 0.02 # 1.0 ± 0.02 + rpm_lite.nu_I = norm99 0.025 0.007 # 0.026 ± 0.007 +} + +################################################################################################################# +#====== Breeding # +################################################################################################################# + +#______ Bull semen: quality = 0.95 ± 0.05 ; sexratio = 0 % female + +breed{ + breed = bull_default +} + +init_bull{ + name=semen_default + bull.breed_name = bull_default + bull.semens_quality = norm99 0.95 0.05 # a number between 0.0 (=never works) and 1.0 (=perfect) + bull.female_ratio = constant 0 # offspring sex ratio. 1.0 = 100%female, 0.0=0%female +} + +#_______Breeding season: every year from *-03-21 00:00:00 to *-06-21 23:59:59 + +condition{ + type = chron_range + name = breeding_season + from = *-03-21 00:00:00 #*-03-21 00:00:00 + to = *-06-21 23:59:59 #*-06-21 23:59:59 +} + +trigger{ + type = chron + name = breeding_start + scheme = *-03-21 00:00:00 +} + +# link{ +# trigger = breeding_start +# action = log_db Start_breeding_season +#} + +trigger{ + type = chron + name = breeding_end + scheme = *-06-21 23:59:59 +} + +#link{ +# trigger = breeding_end +# action = log_db Stop_breeding_season +#} + +#______ Estrous detection method ________________________________________________________________________________ + +estrous_detection_method{ + name=estrous_detection_default + + #When do we observe oestruses + time_slice = 06:00:00 18:00:00 #00:00:01 23:59:59 + + #estrogene is transformed to an expression using a Hill function + expression_threshold=0.75 #default 0.75 + expression_stiffness=7 #default 7 + + + #the oestrus worth an insemination if the memory function is above this threshold + #THIS threshold is scaled for an observation all the day long + #if you observe half a day multiply this threshold by 0.5 + #1.0 is a reasonable base value for all day observations + detection_threshold=0.05 # 0.1 + + #then, the oestrus is truely detected with a chance of + sensitivity = 0.75 #0.7 + + #then an average of wrong_oestrus_per_day are generated + wrong_oestrus_per_day = 0 #0.00 +} + + +#______ Insemination _________________________________________________________________________________ + +# Insemination is performed once a day when estrous is detected + +state{ + state = ALREADY_INSEMINATED +} + +trigger{ + type=custom + name=tr_delete_ALREADY_INSEMINATED +} + +link{ + trigger = tr_delete_ALREADY_INSEMINATED + action = state_delete ALREADY_INSEMINATED +} + +link{ + trigger = estrous + condition = is_in BREEDING + condition = not is_pregnant + condition = not is_in ALREADY_INSEMINATED + action = state_add ALREADY_INSEMINATED + action = trigger_later tr_delete_ALREADY_INSEMINATED 1 + action = log_db 01_INSEMINATION + action = inseminate semen_default +} + +################################################################################################################# +#====== Initialization of herd # +################################################################################################################# + +trigger{ + type = custom + name = init_day_01 +} +trigger{ + type = custom + name = init_day_02 +} +trigger{ + type = custom + name = init_day_03 +} +trigger{ + type = custom + name = init_day_04 +} +trigger{ + type = custom + name = init_day_05 +} +trigger{ + type = custom + name = init_day_06 +} +trigger{ + type = custom + name = init_day_07 +} +trigger{ + type = custom + name = init_day_08 +} +trigger{ + type = custom + name = init_day_09 +} +trigger{ + type = custom + name = init_day_10 +} +trigger{ + type = custom + name = init_day_11 +} +trigger{ + type = custom + name = init_day_12 +} +trigger{ + type = custom + name = init_day_13 +} +trigger{ + type = custom + name = init_day_14 +} +trigger{ + type = custom + name = init_day_15 +} +trigger{ + type = custom + name = init_day_16 +} +trigger{ + type = custom + name = init_day_17 +} +trigger{ + type = custom + name = init_day_18 +} +trigger{ + type = custom + name = init_day_19 +} +trigger{ + type = custom + name = init_day_20 +} +trigger{ + type = custom + name = init_day_21 +} +trigger{ + type = custom + name = init_day_22 +} +trigger{ + type = custom + name = init_day_23 +} +trigger{ + type = custom + name = init_day_24 +} +trigger{ + type = custom + name = init_day_25 +} +trigger{ + type = custom + name = init_day_26 +} +trigger{ + type = custom + name = init_day_27 +} +trigger{ + type = custom + name = init_day_28 +} +trigger{ + type = custom + name = init_day_29 +} +trigger{ + type = custom + name = init_day_30 +} +trigger{ + type = custom + name = init_day_31 +} +trigger{ + type = custom + name = init_day_32 +} +trigger{ + type = custom + name = init_day_33 +} +trigger{ + type = custom + name = init_day_34 +} +trigger{ + type = custom + name = init_day_35 +} +trigger{ + type = custom + name = init_day_36 +} +trigger{ + type = custom + name = init_day_37 +} +trigger{ + type = custom + name = init_day_38 +} +trigger{ + type = custom + name = init_day_39 +} +trigger{ + type = custom + name = init_day_40 +} +trigger{ + type = custom + name = init_day_41 +} +trigger{ + type = custom + name = init_day_42 +} +trigger{ + type = custom + name = init_day_43 +} +trigger{ + type = custom + name = init_day_44 +} +trigger{ + type = custom + name = init_day_45 +} +trigger{ + type = custom + name = init_day_46 +} +trigger{ + type = custom + name = init_day_47 +} +trigger{ + type = custom + name = init_day_48 +} +trigger{ + type = custom + name = init_day_49 +} +trigger{ + type = custom + name = init_day_50 +} +trigger{ + type = custom + name = init_day_51 +} +trigger{ + type = custom + name = init_day_52 +} +trigger{ + type = custom + name = init_day_53 +} +trigger{ + type = custom + name = init_day_54 +} +trigger{ + type = custom + name = init_day_55 +} +trigger{ + type = custom + name = init_day_56 +} +trigger{ + type = custom + name = init_day_57 +} +trigger{ + type = custom + name = init_day_58 +} +trigger{ + type = custom + name = init_day_59 +} + +link{ + trigger = init + action = buy_calf cow_random 1 + action = log_db BUY_CALF_N=1 + action = trigger_later init_day_01 1 +} +link{ + trigger = init_day_01 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_02 1 +} +link{ + trigger = init_day_02 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_03 1 +} +link{ + trigger = init_day_03 + action = buy_calf cow_random 8 + action = log_db BUY_CALF_N=8 + action = trigger_later init_day_04 1 +} +link{ + trigger = init_day_04 + action = buy_calf cow_random 8 + action = log_db BUY_CALF_N=8 + action = trigger_later init_day_05 1 +} +link{ + trigger = init_day_05 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_06 1 +} +link{ + trigger = init_day_06 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_07 1 +} +link{ + trigger = init_day_07 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_08 1 +} +link{ + trigger = init_day_08 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_09 1 +} +link{ + trigger = init_day_09 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_10 1 +} +link{ + trigger = init_day_10 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_11 1 +} +link{ + trigger = init_day_11 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_12 1 +} +link{ + trigger = init_day_12 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_13 1 +} +link{ + trigger = init_day_13 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_14 1 +} +link{ + trigger = init_day_14 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_15 1 +} +link{ + trigger = init_day_15 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_16 1 +} +link{ + trigger = init_day_16 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_17 1 +} +link{ + trigger = init_day_17 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_18 1 +} +link{ + trigger = init_day_18 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_19 1 +} +link{ + trigger = init_day_19 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_20 1 +} +link{ + trigger = init_day_20 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_21 1 +} +link{ + trigger = init_day_21 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_22 1 +} +link{ + trigger = init_day_22 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_23 1 +} +link{ + trigger = init_day_23 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_24 1 +} +link{ + trigger = init_day_24 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_25 1 +} +link{ + trigger = init_day_25 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_26 1 +} +link{ + trigger = init_day_26 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_27 1 +} +link{ + trigger = init_day_27 + action = buy_calf cow_random 12 + action = log_db BUY_CALF_N=12 + action = trigger_later init_day_28 1 +} +link{ + trigger = init_day_28 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_29 1 +} +link{ + trigger = init_day_29 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_30 1 +} +link{ + trigger = init_day_30 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_31 1 +} +link{ + trigger = init_day_31 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_32 1 +} +link{ + trigger = init_day_32 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_33 1 +} +link{ + trigger = init_day_33 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_34 1 +} +link{ + trigger = init_day_34 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_35 1 +} +link{ + trigger = init_day_35 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_36 1 +} +link{ + trigger = init_day_36 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_37 1 +} +link{ + trigger = init_day_37 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_38 1 +} +link{ + trigger = init_day_38 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_39 1 +} +link{ + trigger = init_day_39 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_40 1 +} +link{ + trigger = init_day_40 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_41 1 +} +link{ + trigger = init_day_41 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_42 1 +} +link{ + trigger = init_day_42 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_43 1 +} +link{ + trigger = init_day_43 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_44 1 +} +link{ + trigger = init_day_44 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_45 1 +} +link{ + trigger = init_day_45 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_46 1 +} +link{ + trigger = init_day_46 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_47 1 +} +link{ + trigger = init_day_47 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_48 1 +} +link{ + trigger = init_day_48 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_49 1 +} +link{ + trigger = init_day_49 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_50 1 +} +link{ + trigger = init_day_50 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_51 1 +} +link{ + trigger = init_day_51 + action = buy_calf cow_random 8 + action = log_db BUY_CALF_N=8 + action = trigger_later init_day_52 1 +} +link{ + trigger = init_day_52 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_53 1 +} +link{ + trigger = init_day_53 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_54 1 +} +link{ + trigger = init_day_54 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_55 1 +} +link{ + trigger = init_day_55 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_56 1 +} +link{ + trigger = init_day_56 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_57 1 +} +link{ + trigger = init_day_57 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_58 1 +} +link{ + trigger = init_day_58 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_59 1 +} +link{ + trigger = init_day_59 + action = buy_calf cow_random 25 + action = log_db BUY_CALF_N=25 +} + +################################################################################################################# +#====== Management of herd # +################################################################################################################# + +#_______Predefined states : herd, heifers & mature ______________________________________________________________ +# +# herd : Every animal that enters the herd is added to this state. Male calves are never added. +# heifers : Newborn female calves enter the herd as heifers, and are moved to not_heifers at 1st calving. +# mature : Cows enter mature state when non-labile body mass W > 0.5 WM (GSP for mature format). + + +################################################################################################################# +#====== Remove cows @ end of simulation # +################################################################################################################# + +trigger{ + type = chron + name = tr_end_simu + scheme = 1985-12-31 23:59:58 +} + +link{ + trigger = tr_end_simu + action = log_db action_remove_herd + action = remove_herd +} + +action{ + type = broadcast_now + name = remove_herd + trigger = tr_remove_herd +} + +trigger{ + type = custom + name = tr_remove_herd +} + +link{ + trigger = tr_remove_herd + action = log_db delete_cow + action = delete_cow +} + +################################################################################################################# +#====== Rearing # +################################################################################################################# + +#_______CALF: heifers of age < 100 days + +state{ + state = CALF +} + +link{ + trigger = enter heifers + condition = age < 100 + # action = log_db heifers_to_CALF + action = state_move heifers CALF +} + +link{ + trigger = calving + condition = state_size CALF > 333 + action = log_db REMOVE_CALF_to_limit_size + action = delete_calf + } + +#_______HEIFER: heifers of age >= 100 days + +state{ + state = HEIFER +} + +link{ + trigger = enter heifers + condition = age >= 100 + # action = log_db heifers_to_HEIFER + action = state_move heifers HEIFER +} + +link{ + trigger = every_day + condition = age >= 100 + condition = is_in CALF + # action = log_db CALF_to_HEIFER_@WEANING + action = state_move CALF HEIFER +} + + +################################################################################################################# +#====== Reproduction # +################################################################################################################# + +#_______CYCLING: non-pregnant heifers at 1st ovulation or postabortive/postpartum recycling cows _____________ + +state{ + state = CYCLING +} + +link{ + trigger = ovulation + condition = is_in HEIFER + # action = log_db HEIFER_to_CYCLING_@PUBERTY + action = log_db 00_PUBERTY + action = state_move HEIFER CYCLING +} + +link{ + trigger = ovulation + action = log_db 00_OVULATION +} + +#_______BREEDING: cycling heifers and cows during breeding season ______________________________________________ + +state{ + state = BREEDING +} + +#During breeding season, not TO_CULL and CYCLING cows are moved to BREEDING +link{ + trigger = every_day + condition = breeding_season + condition = not is_in TO_CULL + condition = is_in CYCLING + condition = is_in mature + # action = log_db CYCLING_to_BREEDING + action = state_move CYCLING BREEDING +} + +link{ + trigger = enter BREEDING + # action = log_db Start_estrous_detection + action = estrous_start estrous_detection_default +} + +link{ + trigger = every_day + condition = not breeding_season + condition = is_in BREEDING + # action = log_db BREEDING_to_CYCLING + action = state_move BREEDING CYCLING +} + +link{ + trigger = quit BREEDING + # action = log_db Stop_estrous_detection + action = estrous_stop +} + + +#_______PREGNANT: at conception _________________________________________________________________________________ + +state{ + state = PREGNANT +} + +link{ + trigger = conception + action = log_db 02_CONCEPTION + action = state_move BREEDING PREGNANT +} + +#_______POST-ABORTIVE: triggered at abortion ____________________________________________________________________ + +state{ + state = POST-ABORTIVE +} + +link{ + trigger = abortion + condition = days_after_conception <= 17 + action = log_db 03_EARLY_EMBRYO_DEATH + action = state_move PREGNANT CYCLING +} + +link{ + trigger = abortion + condition = days_after_conception > 17 + condition = days_after_conception <= 64 + action = log_db 04_LATE_EMBRYO_DEATH + action = state_move PREGNANT CYCLING +} + +trigger{ + type = custom + name = post_abortive_recycling +} + +#Abortions after ] 64 - 210 days] days in pregnancy are managed with a voluntary period of 40 days +link{ + trigger = abortion + condition = days_after_conception > 64 + condition = days_after_conception <= 210 + action = log_db 05_FETAL_DEATH + action = state_move PREGNANT POST-ABORTIVE + action = trigger_later post_abortive_recycling 40 +} + +link{ + trigger = post_abortive_recycling + # action = log_db POST-ABORTIVE_to_CYCLING + action = state_move POST-ABORTIVE CYCLING +} + +#Abortions after 210 days in pregnancy are managed by culling +link{ + trigger = abortion + condition = days_after_conception > 210 + action = log_db 05_FETAL_DEATH + action = log_db TO_CULL_from_PREGNANT_after_late_fetal_death + action = state_move PREGNANT TO_CULL +} + + +#_______POSTPARTAL: triggered at parturition ____________________________________________________________________ + +state{ + state = POSTPARTAL +} + +trigger{ + type = custom + name = postpartal_recycling +} + +link{ + trigger = parturition + action = log_db 06_PARTURITION + # action = log_db PREGNANT_to_POSTPARTAL + action = state_move PREGNANT POSTPARTAL + action = trigger_later postpartal_recycling 40 + action = log_db start_milking + action = start_milking + } + +link{ + trigger = postpartal_recycling + # action = log_db POSTPARTAL_to_CYCLING + action = state_move POSTPARTAL CYCLING +} + +################################################################################################################# +#====== Drying-off # +################################################################################################################# + +#_______EXTENDED_LACTATION: CYCLING and is_milking after 305 days after calving + +state{ + state = EXTENDED_LACTATION +} + +link{ + trigger = every_day + condition = is_milking + condition = not is_in PREGNANT + condition = not is_in EXTENDED_LACTATION + condition = days_after_calving >= 305 + # action = log_db Extended lactation + action = state_add EXTENDED_LACTATION +} + +#stop 300 days_after_calving if milk_yield <= 5 kg/d and not in EXTENDED_LACTATION +link{ + trigger = every_day + condition = is_milking + condition = not is_in EXTENDED_LACTATION + condition = days_after_calving >= 300 + condition = milk_yield <= 5 + action = log_db stop_milking + action = stop_milking +} + +#stop 300 days_after_calving if milk_yield <= 5 kg/d and in EXTENDED_LACTATION +link{ + trigger = every_day + condition = is_milking + condition = is_in EXTENDED_LACTATION + condition = days_after_calving >= 300 + condition = milk_yield <= 5 + action = log_db stop_milking_extended + action = stop_milking +} + +#stop 300 days_after_calving and 219 days_in_pregnancy +link{ + trigger = every_day + condition = is_milking + condition = is_pregnant + condition = days_after_calving >= 300 + condition = days_in_pregnancy >= 219 + action = log_db stop_milking_pregnant + action = stop_milking +} + +link{ + trigger = stop_milking + trigger = enter PREGNANT + condition = is_in EXTENDED_LACTATION + action = state_delete EXTENDED_LACTATION +} + +################################################################################################################# +#====== Culling # +################################################################################################################# + +#_______TO_CULL: ____________________________________________________________________ + +state{ + state = TO_CULL +} + +#______culling not pregnant nulliparous at age > 800 days +link{ + trigger = every_day + condition = is_in CYCLING + condition = not is_in PREGNANT + condition = parity = 0 + condition = age > 800 + action = log_db TO_CULL_from_CYCLING_because_too_old_heifer + action = state_move CYCLING TO_CULL +} + + +#______culling not pregnant 320 days_after_calving +link{ + trigger = every_day + condition = days_after_calving > 320 + condition = is_in CYCLING + action = log_db TO_CULL_from_CYCLING_because_too_late_after_calving + action = state_move CYCLING TO_CULL +} + +#______culling not pregnant after 7 insemination +link{ + trigger = every_day + condition = is_in BREEDING + condition = not is_in ALREADY_INSEMINATED + condition = parity > 0 + condition = num_insemination_lactation >= 7 + action = log_db TO_CULL_from_BREEDING_max_nb_ins + action = state_move BREEDING TO_CULL +} + +link{ + trigger = enter PREGNANT + condition = is_in TO_CULL + action = state_move TO_CULL PREGNANT +} + + +#______culling oldest cow + +link{ + trigger = culling_day + condition = state_size TO_CULL = 999999 + condition = state_size PREGNANT > 666 + #individual conditions, like not is_milking cannot be mixed wirh herd level triggers + action = log_db Seek_for_oldest_to_cull + action = cull_oldest +} + +trigger{ + type = custom + name = tr_cull_oldest +} + +action{ + type = broadcast_now + name = cull_oldest + condition = not is_pregnant + condition = not is_milking + condition = not is_in HEIFER + condition = not is_in CALF + sortby = age + reverse = yes + limit = 1 + trigger = tr_cull_oldest +} + +link{ + trigger = tr_cull_oldest + action = log_db remove_oldest + action = delete_cow +} + + +#______remove cows TO_CULL once a month on day 15th + +trigger{ + type = custom + name = tr_remove_cows_to_cull +} + +link{ + trigger = tr_remove_cows_to_cull + condition = is_in TO_CULL + condition = not is_milking + condition = not is_pregnant + action = log_db Remove + action = delete_cow +} + +trigger{ + type = chron + name = culling_day + scheme = *-*-15 14:00:00 +} + +action{ + type = broadcast_now + name = broadcast_TO_CULL + condition = is_in TO_CULL + trigger = tr_remove_cows_to_cull +} + +link{ + trigger = culling_day + action = broadcast_TO_CULL +} + + +################################################################################################################# +#====== Feeding # +################################################################################################################# +#______optimal feeding for 999 + +state{ + state = CONTROL +} + +link{ + trigger = enter herd + condition = state_size herd <= 999 #nb_control 0 - 999 + action = change_food optimal + action = state_add CONTROL #Cows are fed on optimal diet as a control +} + +#______Default feeding rules + +#################### > at birth: on calf diet +link{ + trigger = enter CALF + condition = not is_in CONTROL + action = change_food calf_diet +} + +#################### > at weaning: on heifer diet +link{ + trigger = enter HEIFER + condition = not is_in CONTROL + action = change_food heifer_diet +} + +#################### > at parturition: on lactation diet +link{ + trigger = parturition + condition = not is_in CONTROL + action = change_food lactation_diet +} + + +#################### > at drying-off: on drycow_diet +link{ + trigger = stop_milking + condition = not is_in CONTROL + action = change_food drycow_diet +} + +#################### > OUTDOOR: on pasture diet +trigger{ + type = chron + name = outdoor + scheme = *-04-01 00:00:00 +} + +link{ + trigger = outdoor + action = broadcast_outdoor +} + +action{ + type = broadcast_now + name = broadcast_outdoor + trigger = outdoor_feeding +} + +trigger{ + type = custom + name = outdoor_feeding +} + +link{ + trigger = outdoor_feeding + condition = not is_in CALF + condition = not is_in CONTROL + action = change_food pasture_diet +} + + +#################### > INDOOR: back to diet according to state +trigger{ + type = chron + name = indoor + scheme = *-10-01 00:00:00 +} + +link{ + trigger = indoor + action = broadcast_indoor +} + +action{ + type = broadcast_now + name = broadcast_indoor + trigger = indoor_feeding +} + +trigger{ + type = custom + name = indoor_feeding +} + +link{ + trigger = indoor_feeding + condition = is_in HEIFER + condition = not is_in CONTROL + action = change_food heifer_diet +} + +link{ + trigger = indoor_feeding + condition = is_in CYCLING + condition = not is_in CONTROL + action = change_food heifer_diet +} + +link{ + trigger = indoor_feeding + condition = is_in BREEDING + condition = not is_milking + condition = not is_in CONTROL + action = change_food heifer_diet +} + +link{ + trigger = indoor_feeding + condition = not is_in BREEDING + condition = not is_milking + condition = not is_in CONTROL + action = change_food drycow_diet +} + +link{ + trigger = indoor_feeding + condition = is_milking + condition = not is_in CONTROL + action = change_food lactation_diet +} + + + + +################################################################################################################# +#====== Generic stuff # +################################################################################################################# + +trigger{ + type = chron + name = every_day_herd + scheme = *-*-* 12:00:00 +} + +trigger{ + type = custom + name = every_day +} + +link{ + trigger = every_day_herd + action = broadcast_now every_day +} + +trigger{ + type = custom + name = first_day_sub +} + +trigger{ + type = custom + name = first_day +} + +link{ + trigger = init + action = trigger_later first_day_sub 0.001 +} +link{ + trigger = first_day_sub + action = broadcast_now first_day +} + +################################################################################################################# +#====== Log # +################################################################################################################# + +log{ + + #farmer level + insemination = yes + change_food = yes + + #herd level + conception = yes + parturition = yes + death = yes + estrous_observed = yes + estrous_missed = yes + estrous_environment= yes + insemination_result= yes + mature = yes + ovulation = yes + new_cow = yes + delete_cow = yes + abortion = yes + + #cow level + animal_performance = no +} + +################################################################################################################# +#====== Log states # +################################################################################################################# + +action{ + type = genericlog_herd + + name = log_states + log_type = file + file_path = states.txt + sep_col = \t + file_line_flush=no + + #sqlite_path = states.sqlite + #sqlite_table = states + + + #--- from cow and simulator --- + column{ + value = time + name = time + sqlite_type = numeric + } + + column{ + value = state.CONTROL + name = CONTROL + sqlite_type = numeric + } + + column{ + value = state.CALF + name = CALF + sqlite_type = numeric + } + + column{ + value = state.HEIFER + name = HEIFER + sqlite_type = numeric + } + + column{ + value = state.CYCLING + name = CYCLING + sqlite_type = numeric + } + + column{ + value = state.BREEDING + name = BREEDING + sqlite_type = numeric + } + + column{ + value = state.PREGNANT + name = PREGNANT + sqlite_type = numeric + } + + column{ + value = state.POST-ABORTIVE + name = POST-ABORTIVE + sqlite_type = numeric + } + + column{ + value = state.POSTPARTAL + name = POSTPARTAL + sqlite_type = numeric + } + + column{ + value = state.EXTENDED_LACTATION + name = EXTENDED_LACTATION + sqlite_type = numeric + } + + column{ + value = state.TO_CULL + name = TO_CULL + sqlite_type = numeric + } + + + # column{ + # value = state.not.mature + # name = not_mature + # sqlite_type = numeric + # } + +} + +link{ + trigger = every_day_herd + action = log_states +} + + + +###s######## Default diets + +feed{ + name = calf_diet + type = mix + + feed = CPL.MLK + proportion = 1.00 +} + +feed{ + name = heifer_diet + type = mix + + feed = FO.STR + proportion = 0.02 + feed = FO.HAP + proportion = 0.60 + feed = FO.GSI + proportion = 0.32 + feed = CO.CER + proportion = 0.05 + feed = CPL.CMV + proportion = 0.01 +} + +feed{ + name = lactation_diet + type = mix + + feed = FO.STR + proportion = 0.01 + feed = FO.HAP + proportion = 0.03 + feed = FO.GSI + proportion = 0.04 + feed = FO.CSI + proportion = 0.70 + feed = CO.CER + proportion = 0.05 + feed = CO.OSC + proportion = 0.13 + feed = CO.ROO + proportion = 0.03 + feed = CPL.CMV + proportion = 0.01 +} + +feed{ + name = drycow_diet + type = mix + + feed = FO.STR + proportion = 0.02 + feed = FO.HAP + proportion = 0.68 + feed = FO.CSI + proportion = 0.08 + feed = CO.CER + proportion = 0.05 + feed = CO.OSC + proportion = 0.13 + feed = CO.ROO + proportion = 0.03 + feed = CPL.CMV + proportion = 0.01 +} + +feed{ + name = pasture_diet + type = mix + + feed = FO.FGX + proportion = 0.778 + feed = CO.CER + proportion = 0.050 + feed = CO.OSC + proportion = 0.130 + feed = CO.TUB + proportion = 0.002 + feed = CO.ROO + proportion = 0.030 + feed = CPL.CMV + proportion = 0.010 +} + + + + + +######################################################## +# # +#List of available feed (derived from INRA tables) # +# # +######################################################## + +########### FORAGES #################################### +# FO.STR Straw +# FO.STN Straw treated with ammonia +# FO.MSH Maize stover & husks +# FO.HAL Legume hay +# FO.HAG Gramineae hay +# FO.HAP Permanent grassland hay +# FO.DHA Dehydrated alfalfa +# FO.DHF Dehydrated forage +# FO.FGC Fresh cereal grass +# FO.FGO Fresh oleaginous grass +# FO.FGG Fresh gramineae grass +# FO.FGX Fresh mixed grass (meadow) +# FO.FGL Fresh legume grass +# FO.GSI50 Grass silage > 50% DM +# FO.GSI Grass silage +# FO.CSI Corn silage +# FO.FPF Faba & pea forage +# FO.VEG Vegetable fodder + +########### CONCENTRATES ############################### +# CO.CER Cereal seed & by-products +# CO.OSC5 Oilseed cake <5% oil +# CO.OSC Oilseed cake +# CO.TUB Starchy tubers +# CO.ROO Vegetable roots +# CO.FPB Faba & pea bean +# CO.LUP Lupin +# CO.SDO Oilseed + +########### COMPLEMENTS ################################ +# CPL.CMV Compl. Minerals & Vitamins +# CPL.AMA Amino acids +# CPL.URE Urea +# CPL.MOL Molasses +# CPL.PLP Beet pulp +# CPL.MLK Milk +# CPL.OIL Oil + + +feed{ # Straw + # Type of feed: FORAGE + # Maximum incorporation in diet: 80 %FM + # Representative INRA feed: FP0090 Oat straw + name = FO.STR + type = ingredient + feed_eD = 5.9512 # MJ_ME/kg_DM + feed_DMC = 0.8825 # kg_DM/kg_FM + feed_OM = 0.9100 # kg/kg_DM + feed_OMd = 0.4500 # % + feed_CP = 0.0360 # kg/kg_DM + feed_CPd = 0.0296 # % + feed_NDF = 0.7910 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0150 # kg/kg_DM +} +feed{ # Straw treated with ammonia + # Type of feed: FORAGE + # Maximum incorporation in diet: 80 %FM + # Representative INRA feed: FP0080 Barley straw, NH3-treated 5%DM + name = FO.STN + type = ingredient + feed_eD = 7.6484 # MJ_ME/kg_DM + feed_DMC = 0.8867 # kg_DM/kg_FM + feed_OM = 0.8970 # kg/kg_DM + feed_OMd = 0.5567 # % + feed_CP = 0.1000 # kg/kg_DM + feed_CPd = 0.3933 # % + feed_NDF = 0.7603 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0150 # kg/kg_DM +} +feed{ # Maize stover & husks + # Type of feed: FORAGE + # Maximum incorporation in diet: 80 %FM + # Representative INRA feed: FP0180 Maize stover, ensiled + name = FO.MSH + type = ingredient + feed_eD = 8.5847 # MJ_ME/kg_DM + feed_DMC = 0.5022 # kg_DM/kg_FM + feed_OM = 0.9332 # kg/kg_DM + feed_OMd = 0.6220 # % + feed_CP = 0.0888 # kg/kg_DM + feed_CPd = 0.3432 # % + feed_NDF = 0.6580 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0150 # kg/kg_DM +} +feed{ # Legume hay + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FF3370 Lucerne hay + name = FO.HAL + type = ingredient + feed_eD = 8.4626 # MJ_ME/kg_DM + feed_DMC = 0.8500 # kg_DM/kg_FM + feed_OM = 0.8956 # kg/kg_DM + feed_OMd = 0.5987 # % + feed_CP = 0.1791 # kg/kg_DM + feed_CPd = 0.6818 # % + feed_NDF = 0.5326 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0259 # kg/kg_DM +} +feed{ # Gramineae hay + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FF1190 Italian ryegrass hay + name = FO.HAG + type = ingredient + feed_eD = 8.8553 # MJ_ME/kg_DM + feed_DMC = 0.8500 # kg_DM/kg_FM + feed_OM = 0.9011 # kg/kg_DM + feed_OMd = 0.6294 # % + feed_CP = 0.1169 # kg/kg_DM + feed_CPd = 0.5447 # % + feed_NDF = 0.6421 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0300 # kg/kg_DM +} +feed{ # Permanent grassland hay + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FF0750 Mountain permanent grassland hay + name = FO.HAP + type = ingredient + feed_eD = 9.0294 # MJ_ME/kg_DM + feed_DMC = 0.8500 # kg_DM/kg_FM + feed_OM = 0.9133 # kg/kg_DM + feed_OMd = 0.6196 # % + feed_CP = 0.1270 # kg/kg_DM + feed_CPd = 0.5679 # % + feed_NDF = 0.6090 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0223 # kg/kg_DM +} +feed{ # Dehydrated alfalfa + # Type of feed: FORAGE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CD0040 Dehydrated alfalfa + name = FO.DHA + type = ingredient + feed_eD = 9.2187 # MJ_ME/kg_DM + feed_DMC = 0.9070 # kg_DM/kg_FM + feed_OM = 0.8752 # kg/kg_DM + feed_OMd = 0.6317 # % + feed_CP = 0.2002 # kg/kg_DM + feed_CPd = 0.7017 # % + feed_NDF = 0.4375 # kg/kg_DM + feed_ST = 0.0297 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.0292 # kg/kg_DM +} +feed{ # Dehydrated forage + # Type of feed: FORAGE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CD0120 Dehydrated Italian ryegrass + name = FO.DHF + type = ingredient + feed_eD = 9.9954 # MJ_ME/kg_DM + feed_DMC = 0.9080 # kg_DM/kg_FM + feed_OM = 0.8898 # kg/kg_DM + feed_OMd = 0.7010 # % + feed_CP = 0.1436 # kg/kg_DM + feed_CPd = 0.6182 # % + feed_NDF = 0.5450 # kg/kg_DM + feed_ST = 0.0024 # kg/kg_DM + feed_STd = 0.1640 # % + feed_EE = 0.0268 # kg/kg_DM +} +feed{ # Fresh cereal grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2020 Fresh whole crop sorghum + name = FO.FGC + type = ingredient + feed_eD = 9.4748 # MJ_ME/kg_DM + feed_DMC = 0.2504 # kg_DM/kg_FM + feed_OM = 0.9148 # kg/kg_DM + feed_OMd = 0.6585 # % + feed_CP = 0.1044 # kg/kg_DM + feed_CPd = 0.6330 # % + feed_NDF = 0.5710 # kg/kg_DM + feed_ST = 0.0983 # kg/kg_DM + feed_STd = 0.8652 # % + feed_EE = 0.0304 # kg/kg_DM +} +feed{ # Fresh oleaginous grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2830 Fresh silphium + name = FO.FGO + type = ingredient + feed_eD = 9.8974 # MJ_ME/kg_DM + feed_DMC = 0.1170 # kg_DM/kg_FM + feed_OM = 0.8494 # kg/kg_DM + feed_OMd = 0.7323 # % + feed_CP = 0.1535 # kg/kg_DM + feed_CPd = 0.7491 # % + feed_NDF = 0.4212 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0248 # kg/kg_DM +} +feed{ # Fresh gramineae grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV0490 Fresh italian ryegrass + name = FO.FGG + type = ingredient + feed_eD = 10.2129 # MJ_ME/kg_DM + feed_DMC = 0.1885 # kg_DM/kg_FM + feed_OM = 0.8893 # kg/kg_DM + feed_OMd = 0.7150 # % + feed_CP = 0.1452 # kg/kg_DM + feed_CPd = 0.6756 # % + feed_NDF = 0.5690 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0367 # kg/kg_DM +} +feed{ # Fresh mixed grass (meadow) + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV0120 Fresh lowland grassland + name = FO.FGX + type = ingredient + feed_eD = 10.2424 # MJ_ME/kg_DM + feed_DMC = 0.1946 # kg_DM/kg_FM + feed_OM = 0.9057 # kg/kg_DM + feed_OMd = 0.6896 # % + feed_CP = 0.1444 # kg/kg_DM + feed_CPd = 0.6595 # % + feed_NDF = 0.5498 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0265 # kg/kg_DM +} +feed{ # Fresh legume grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2370 Fresh red clover + name = FO.FGL + type = ingredient + feed_eD = 10.3243 # MJ_ME/kg_DM + feed_DMC = 0.1749 # kg_DM/kg_FM + feed_OM = 0.8844 # kg/kg_DM + feed_OMd = 0.7014 # % + feed_CP = 0.2046 # kg/kg_DM + feed_CPd = 0.7671 # % + feed_NDF = 0.4603 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0287 # kg/kg_DM +} +feed{ # Grass silage > 50% DM + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FE2790 Wilted perennial ryegrass silage + name = FO.GSI50 + type = ingredient + feed_eD = 9.3078 # MJ_ME/kg_DM + feed_DMC = 0.5502 # kg_DM/kg_FM + feed_OM = 0.9056 # kg/kg_DM + feed_OMd = 0.6545 # % + feed_CP = 0.1351 # kg/kg_DM + feed_CPd = 0.6395 # % + feed_NDF = 0.5744 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0337 # kg/kg_DM +} +feed{ # Grass silage + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FE2220 Perennial ryegrass silage + name = FO.GSI + type = ingredient + feed_eD = 10.3090 # MJ_ME/kg_DM + feed_DMC = 0.2234 # kg_DM/kg_FM + feed_OM = 0.8950 # kg/kg_DM + feed_OMd = 0.6952 # % + feed_CP = 0.1406 # kg/kg_DM + feed_CPd = 0.6469 # % + feed_NDF = 0.5425 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0374 # kg/kg_DM +} +feed{ # Corn silage + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FE4710 Fine chop 30% DM corn silage + name = FO.CSI + type = ingredient + feed_eD = 10.6995 # MJ_ME/kg_DM + feed_DMC = 0.3109 # kg_DM/kg_FM + feed_OM = 0.9484 # kg/kg_DM + feed_OMd = 0.7061 # % + feed_CP = 0.0848 # kg/kg_DM + feed_CPd = 0.5300 # % + feed_NDF = 0.4415 # kg/kg_DM + feed_ST = 0.2754 # kg/kg_DM + feed_STd = 0.7660 # % + feed_EE = 0.0310 # kg/kg_DM +} +feed{ # Faba & pea forage + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2700 Fresh faba bean forage + name = FO.FPF + type = ingredient + feed_eD = 10.8203 # MJ_ME/kg_DM + feed_DMC = 0.2546 # kg_DM/kg_FM + feed_OM = 0.9115 # kg/kg_DM + feed_OMd = 0.7188 # % + feed_CP = 0.1578 # kg/kg_DM + feed_CPd = 0.7156 # % + feed_NDF = 0.4160 # kg/kg_DM + feed_ST = 0.0913 # kg/kg_DM + feed_STd = 0.7650 # % + feed_EE = 0.0288 # kg/kg_DM +} +feed{ # Vegetable fodder + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2840 Fresh kale + name = FO.VEG + type = ingredient + feed_eD = 12.0901 # MJ_ME/kg_DM + feed_DMC = 0.1348 # kg_DM/kg_FM + feed_OM = 0.8674 # kg/kg_DM + feed_OMd = 0.8260 # % + feed_CP = 0.1684 # kg/kg_DM + feed_CPd = 0.7794 # % + feed_NDF = 0.3382 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0080 # kg/kg_DM +} +feed{ # Cereal seed & by-products + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CS0160 Wheat middlings, starch 30-40% + name = CO.CER + type = ingredient + feed_eD = 12.3262 # MJ_ME/kg_DM + feed_DMC = 0.8835 # kg_DM/kg_FM + feed_OM = 0.9541 # kg/kg_DM + feed_OMd = 0.7712 # % + feed_CP = 0.1642 # kg/kg_DM + feed_CPd = 0.6629 # % + feed_NDF = 0.2909 # kg/kg_DM + feed_ST = 0.4008 # kg/kg_DM + feed_STd = 0.8041 # % + feed_EE = 0.0584 # kg/kg_DM +} +feed{ # Oilseed cake <5% oil + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CX0050 Cottonseed meal, cr. fibre 15-20% + name = CO.OSC5 + type = ingredient + feed_eD = 12.0555 # MJ_ME/kg_DM + feed_DMC = 0.8907 # kg_DM/kg_FM + feed_OM = 0.9309 # kg/kg_DM + feed_OMd = 0.7747 # % + feed_CP = 0.4309 # kg/kg_DM + feed_CPd = 0.7740 # % + feed_NDF = 0.2931 # kg/kg_DM + feed_ST = 0.0527 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.0236 # kg/kg_DM +} +feed{ # Oilseed cake + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CX0310 Sunflower meal, oil 5-20% + name = CO.OSC + type = ingredient + feed_eD = 12.6524 # MJ_ME/kg_DM + feed_DMC = 0.9207 # kg_DM/kg_FM + feed_OM = 0.9368 # kg/kg_DM + feed_OMd = 0.7350 # % + feed_CP = 0.3499 # kg/kg_DM + feed_CPd = 0.7570 # % + feed_NDF = 0.3477 # kg/kg_DM + feed_ST = 0.0444 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.1015 # kg/kg_DM +} +feed{ # Starchy tubers + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CP0030 Cassava + name = CO.TUB + type = ingredient + feed_eD = 11.6622 # MJ_ME/kg_DM + feed_DMC = 0.6480 # kg_DM/kg_FM + feed_OM = 0.9510 # kg/kg_DM + feed_OMd = 0.8367 # % + feed_CP = 0.0750 # kg/kg_DM + feed_CPd = 0.4888 # % + feed_NDF = 0.1192 # kg/kg_DM + feed_ST = 0.6447 # kg/kg_DM + feed_STd = 0.7900 # % + feed_EE = 0.0062 # kg/kg_DM +} +feed{ # Vegetable roots + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: FR0040 Carrot + name = CO.ROO + type = ingredient + feed_eD = 12.8261 # MJ_ME/kg_DM + feed_DMC = 0.1568 # kg_DM/kg_FM + feed_OM = 0.9311 # kg/kg_DM + feed_OMd = 0.8900 # % + feed_CP = 0.0896 # kg/kg_DM + feed_CPd = 0.5710 # % + feed_NDF = 0.1295 # kg/kg_DM + feed_ST = 0.0050 # kg/kg_DM + feed_STd = 0.2000 # % + feed_EE = 0.0110 # kg/kg_DM +} +feed{ # Faba & pea bean + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CN0060 Faba bean seeds + name = CO.FPB + type = ingredient + feed_eD = 13.6219 # MJ_ME/kg_DM + feed_DMC = 0.8721 # kg_DM/kg_FM + feed_OM = 0.9610 # kg/kg_DM + feed_OMd = 0.9057 # % + feed_CP = 0.2689 # kg/kg_DM + feed_CPd = 0.7843 # % + feed_NDF = 0.1550 # kg/kg_DM + feed_ST = 0.4601 # kg/kg_DM + feed_STd = 0.7586 # % + feed_EE = 0.0146 # kg/kg_DM +} +feed{ # Lupin + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CN0130 White lupin seeds + name = CO.LUP + type = ingredient + feed_eD = 15.2995 # MJ_ME/kg_DM + feed_DMC = 0.8880 # kg_DM/kg_FM + feed_OM = 0.9617 # kg/kg_DM + feed_OMd = 0.8800 # % + feed_CP = 0.3657 # kg/kg_DM + feed_CPd = 0.8000 # % + feed_NDF = 0.2257 # kg/kg_DM + feed_ST = 0.0700 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.0850 # kg/kg_DM +} +feed{ # Oilseed + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CN0110 Linseeds + name = CO.SDO + type = ingredient + feed_eD = 17.6063 # MJ_ME/kg_DM + feed_DMC = 0.9143 # kg_DM/kg_FM + feed_OM = 0.9539 # kg/kg_DM + feed_OMd = 0.7650 # % + feed_CP = 0.2647 # kg/kg_DM + feed_CPd = 0.7380 # % + feed_NDF = 0.2515 # kg/kg_DM + feed_ST = 0.0461 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.3208 # kg/kg_DM +} +feed{ # Compl. Minerals & Vitamins + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: MC0010 Crushed chalk + name = CPL.CMV + type = ingredient + feed_eD = 0.0000 # MJ_ME/kg_DM + feed_DMC = 0.9500 # kg_DM/kg_FM + feed_OM = 0.0000 # kg/kg_DM + feed_OMd = 0.0000 # % + feed_CP = 0.0000 # kg/kg_DM + feed_CPd = 0.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0000 # kg/kg_DM +} +feed{ # Amino acids + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: CAA020 L-threonin + name = CPL.AMA + type = ingredient + feed_eD = 0.0000 # MJ_ME/kg_DM + feed_DMC = 1.0000 # kg_DM/kg_FM + feed_OM = 0.9960 # kg/kg_DM + feed_OMd = 1.0000 # % + feed_CP = 0.7450 # kg/kg_DM + feed_CPd = 1.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0000 # kg/kg_DM +} +feed{ # Urea + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: CV0020 Urea + name = CPL.URE + type = ingredient + feed_eD = 3.3890 # MJ_ME/kg_DM + feed_DMC = 0.9940 # kg_DM/kg_FM + feed_OM = 1.0000 # kg/kg_DM + feed_OMd = 0.9900 # % + feed_CP = 2.8700 # kg/kg_DM + feed_CPd = 1.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0000 # kg/kg_DM +} +feed{ # Molasses + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 10 %FM + # Representative INRA feed: CP0170 Beet molasses + name = CPL.MOL + type = ingredient + feed_eD = 9.7906 # MJ_ME/kg_DM + feed_DMC = 0.7390 # kg_DM/kg_FM + feed_OM = 0.8660 # kg/kg_DM + feed_OMd = 0.8250 # % + feed_CP = 0.1000 # kg/kg_DM + feed_CPd = 0.5800 # % + feed_NDF = 0.0015 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0070 # kg/kg_DM +} +feed{ # Beet pulp + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 10 %FM + # Representative INRA feed: CP0020 Pressed beet pulp + name = CPL.PLP + type = ingredient + feed_eD = 11.5046 # MJ_ME/kg_DM + feed_DMC = 0.4503 # kg_DM/kg_FM + feed_OM = 0.9243 # kg/kg_DM + feed_OMd = 0.8367 # % + feed_CP = 0.0913 # kg/kg_DM + feed_CPd = 0.6470 # % + feed_NDF = 0.4827 # kg/kg_DM + feed_ST = 0.0047 # kg/kg_DM + feed_STd = 0.5467 # % + feed_EE = 0.0097 # kg/kg_DM +} +feed{ # Milk + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: CL0020 Whole milk powder + name = CPL.MLK + type = ingredient + feed_eD = 18.8280 # MJ_ME/kg_DM + feed_DMC = 0.9600 # kg_DM/kg_FM + feed_OM = 0.9350 # kg/kg_DM + feed_OMd = 0.9400 # % + feed_CP = 0.2540 # kg/kg_DM + feed_CPd = 0.7800 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.2510 # kg/kg_DM +} +feed{ # Oil + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: CG0050 Soybean oil + name = CPL.OIL + type = ingredient + feed_eD = 36.6937 # MJ_ME/kg_DM + feed_DMC = 0.9980 # kg_DM/kg_FM + feed_OM = 0.9995 # kg/kg_DM + feed_OMd = 0.8900 # % + feed_CP = 0.0000 # kg/kg_DM + feed_CPd = 0.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.9992 # kg/kg_DM +} + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/input/example_01/explan.txt Mon Apr 07 15:18:25 2025 +0000 @@ -0,0 +1,3 @@ +template_file sim_id end_year +farmer-pl.txt sim_1 1972 +farmer-pl.txt sim_2 1975
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/input/example_01/farmer-pl.txt Mon Apr 07 15:18:25 2025 +0000 @@ -0,0 +1,2353 @@ +################################################################################################################# +# # +# InSiliCow: Farm Management # +# # +################################################################################################################# + +################################################################################################################# +#====== Preprocessor: specification of included files # +################################################################################################################# + +@include farmer-log.txt +# provides the action log_olivier +# call the action log_olivier every hour + +################################################################################################################# +#====== Initialization of simulation # +################################################################################################################# + +#______ Simulation time range + +init{ + begin_date = 1970-01-01 00:00:00 # 1970-01-01 00:00:00 + end_date = $end_year$-12-31 23:59:59 # 1975-02-20 23:59:59 + output_db = events.sqlite + name = $sim_id$ +} + +#______ Models + +param_general{ + garuns_type = garuns_olivier + rpm_type = rpm_lite + abortion_type = abortion_olivier +} + +#______ Stoechio +stoechio{ + +} + +################################################################################################################# +#====== Genetic Scaling Parameters (GSP): defines individual cow performance # +# # +#======> in GARUNS model # +#GSP (unit) : Name Default | Proxy for # +#WM (Kg) : Mature non labile body mass 450 ± 25 | Format # +#khi_M (%) : Target labile:non-labile mass ratio 0.33 ± 0.03 | Body fatness # +#b0 (1/d) : Reserves storage rate 1.6 ± 0.16 | Reserve lability # +#nu_X (-) : Labile body mass mobilization index 1.0 ± 0.1 | Maternal investment # +#nu_Y (-) : Milk yield index 1.0 ± 0.1 | Milk potential # +#nu_F (-) : Milk fat secretion index 1.00 ± 0.02 | Milk fat content # +#nu_P (-) : Milk protein secretion index 1.00 ± 0.02 | Milk protein content # +#eD_star (MJ ME/Kg DM) : Optimal diet energy content 12.3 ± 0.5 | Energy intake capacity # +#NDF_star (Kg NDF/Kg DM): Optimal fiber energy content 0.5 ± 0.02 | Fiber intake capacity # +# # +#======> in RPM model # +#nu_I (-) : Conception probability threshold 0.026 ± 0.007 | Fertility # +#nu_B (-) : Puberty index 1.70 ± 0.07 | Age at 1st ovulation # +#nu_Z (-) : Follicular dynamics rate 1.00 ± 0.02 | Estrous duration # +################################################################################################################# + +################################################################################################################# +#====== Transmission of Genetic Scaling Parameters (GSP) # +# > genetic_sd defines the Mendelian sampling standard deviation for the calculation of the GSP of # +# a newborn calf : GSP_newborn ~ Normal [ (GSP_mother + GSP_father)/2 , GSP_sd ] # +################################################################################################################# + +genetic_sd{ + + garuns_olivier.WM{ + sd = 50 + min = 200 + max = 800 + } + + garuns_olivier.khi_M { + sd = 0.06 + 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.1 + 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 + } + + rpm_lite.nu_I{ + sd = 0.007 + min = 0.00 + max = 0.20 + } + + rpm_lite.nu_B{ + sd = 0.07 + min = 1.20 + max = 2.20 + } + + rpm_lite.nu_Z{ + sd = 0.02 + min = 0.90 + max = 1.10 + } +} + +################################################################################################################# +#====== Initialization of cows # +################################################################################################################# + +####### DEFAULT COW ############################################################################################# +init_cow{ + name=cow_default + + ### ABORTION rules acording to days in pregnancy (dip) + abortion_olivier.delta = constant 3.0 # days (compute every delta) + abortion_olivier.enabled = sometime + # never : no abortion, + # always : always abort, + # sometime : abort according to abortion_olivier.abo + # and abortion_olivier.dip + + ### Days in pregnancy (dip) cutoffs (to cut gestation in early embryo, late embryo and fetal stages) + # Default intervals: Early embryo [0;17] Late embryo [17;64] Fetal [64;+inf] + abortion_olivier.dip = vector constant 17 ; constant 64 + + ### Daily probability of abortion for each intervals + # Default probabiliies : E: 0.0230 L: 0.0096 F: 0.0004 + abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 + + ### GARUNS & RPM_lite Genetic Scaling Parameters + # Default constant values + garuns_olivier.WM = constant 450 #450 + garuns_olivier.khi_M = constant 0.30 # 0.33 + garuns_olivier.b0 = constant 1.6 # 1.6 + garuns_olivier.nu_X = constant 1 # 1.0 + garuns_olivier.nu_Y = constant 1.1 # 1.0 + garuns_olivier.nu_F = constant 1 # 1.0 + garuns_olivier.nu_P = constant 1 # 1.0 + garuns_olivier.eD_star = constant 10.7 # 10.7 + garuns_olivier.NDF_star = constant 0.5 # 0.5 + rpm_lite.nu_B = constant 1.7 # 1.7 + rpm_lite.nu_Z = constant 1 # 1.0 + rpm_lite.nu_I = constant 0.025 # 0.026 +} + +####### RANDOM COW ############################################################################################## +init_cow{ + name=cow_random + + ### ABORTION rules acording to days in pregnancy (dip) + abortion_olivier.delta = constant 3.0 # days (compute every delta) + abortion_olivier.enabled = sometime + # never : no abortion, + # always : always abort, + # sometime : abort according to abortion_olivier.abo + # and abortion_olivier.dip + + ### Days in pregnancy (dip) cutoffs (to cut gestation in early embryo, late embryo and fetal stages) + # Default intervals: Early embryo [0;17] Late embryo [17;64] Fetal [64;+inf] + abortion_olivier.dip = vector constant 17 ; constant 64 + + ### Daily probability of abortion for each intervals + # Default probabiliies : E: 0.0230 L: 0.0096 F: 0.0004 + abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 + + ### GARUNS & RPM_lite Genetic Scaling Parameters + # Random values + garuns_olivier.WM = norm99 450 50 #450 ± 25 + garuns_olivier.khi_M = norm99 0.30 0.06 # 0.33 ± 0.03 + garuns_olivier.b0 = norm99 1.6 0 # 1.6 ± 0.16 + garuns_olivier.nu_X = norm99 1 0 # 1.0 ± 0.10 + garuns_olivier.nu_Y = norm99 1.1 0.1 # 1.0 ± 0.10 + garuns_olivier.nu_F = norm99 1 0 # 1.0 ± 0.02 + garuns_olivier.nu_P = norm99 1 0 # 1.0 ± 0.02 + garuns_olivier.eD_star = norm99 10.7 0 # 10.7 ± 0.5 + garuns_olivier.NDF_star = norm99 0.5 0 # 0.5 ± 0.02 + rpm_lite.nu_B = norm99 1.7 0.07 # 1.7 ± 0.07 + rpm_lite.nu_Z = norm99 1 0.02 # 1.0 ± 0.02 + rpm_lite.nu_I = norm99 0.025 0.007 # 0.026 ± 0.007 +} + +################################################################################################################# +#====== Breeding # +################################################################################################################# + +#______ Bull semen: quality = 0.95 ± 0.05 ; sexratio = 0 % female + +breed{ + breed = bull_default +} + +init_bull{ + name=semen_default + bull.breed_name = bull_default + bull.semens_quality = norm99 0.95 0.05 # a number between 0.0 (=never works) and 1.0 (=perfect) + bull.female_ratio = constant 0 # offspring sex ratio. 1.0 = 100%female, 0.0=0%female +} + +#_______Breeding season: every year from *-03-21 00:00:00 to *-06-21 23:59:59 + +condition{ + type = chron_range + name = breeding_season + from = *-03-21 00:00:00 #*-03-21 00:00:00 + to = *-06-21 23:59:59 #*-06-21 23:59:59 +} + +trigger{ + type = chron + name = breeding_start + scheme = *-03-21 00:00:00 +} + +# link{ +# trigger = breeding_start +# action = log_db Start_breeding_season +#} + +trigger{ + type = chron + name = breeding_end + scheme = *-06-21 23:59:59 +} + +#link{ +# trigger = breeding_end +# action = log_db Stop_breeding_season +#} + +#______ Estrous detection method ________________________________________________________________________________ + +estrous_detection_method{ + name=estrous_detection_default + + #When do we observe oestruses + time_slice = 06:00:00 18:00:00 #00:00:01 23:59:59 + + #estrogene is transformed to an expression using a Hill function + expression_threshold=0.75 #default 0.75 + expression_stiffness=7 #default 7 + + + #the oestrus worth an insemination if the memory function is above this threshold + #THIS threshold is scaled for an observation all the day long + #if you observe half a day multiply this threshold by 0.5 + #1.0 is a reasonable base value for all day observations + detection_threshold=0.05 # 0.1 + + #then, the oestrus is truely detected with a chance of + sensitivity = 0.75 #0.7 + + #then an average of wrong_oestrus_per_day are generated + wrong_oestrus_per_day = 0 #0.00 +} + + +#______ Insemination _________________________________________________________________________________ + +# Insemination is performed once a day when estrous is detected + +state{ + state = ALREADY_INSEMINATED +} + +trigger{ + type=custom + name=tr_delete_ALREADY_INSEMINATED +} + +link{ + trigger = tr_delete_ALREADY_INSEMINATED + action = state_delete ALREADY_INSEMINATED +} + +link{ + trigger = estrous + condition = is_in BREEDING + condition = not is_pregnant + condition = not is_in ALREADY_INSEMINATED + action = state_add ALREADY_INSEMINATED + action = trigger_later tr_delete_ALREADY_INSEMINATED 1 + action = log_db 01_INSEMINATION + action = inseminate semen_default +} + +################################################################################################################# +#====== Initialization of herd # +################################################################################################################# + +trigger{ + type = custom + name = init_day_01 +} +trigger{ + type = custom + name = init_day_02 +} +trigger{ + type = custom + name = init_day_03 +} +trigger{ + type = custom + name = init_day_04 +} +trigger{ + type = custom + name = init_day_05 +} +trigger{ + type = custom + name = init_day_06 +} +trigger{ + type = custom + name = init_day_07 +} +trigger{ + type = custom + name = init_day_08 +} +trigger{ + type = custom + name = init_day_09 +} +trigger{ + type = custom + name = init_day_10 +} +trigger{ + type = custom + name = init_day_11 +} +trigger{ + type = custom + name = init_day_12 +} +trigger{ + type = custom + name = init_day_13 +} +trigger{ + type = custom + name = init_day_14 +} +trigger{ + type = custom + name = init_day_15 +} +trigger{ + type = custom + name = init_day_16 +} +trigger{ + type = custom + name = init_day_17 +} +trigger{ + type = custom + name = init_day_18 +} +trigger{ + type = custom + name = init_day_19 +} +trigger{ + type = custom + name = init_day_20 +} +trigger{ + type = custom + name = init_day_21 +} +trigger{ + type = custom + name = init_day_22 +} +trigger{ + type = custom + name = init_day_23 +} +trigger{ + type = custom + name = init_day_24 +} +trigger{ + type = custom + name = init_day_25 +} +trigger{ + type = custom + name = init_day_26 +} +trigger{ + type = custom + name = init_day_27 +} +trigger{ + type = custom + name = init_day_28 +} +trigger{ + type = custom + name = init_day_29 +} +trigger{ + type = custom + name = init_day_30 +} +trigger{ + type = custom + name = init_day_31 +} +trigger{ + type = custom + name = init_day_32 +} +trigger{ + type = custom + name = init_day_33 +} +trigger{ + type = custom + name = init_day_34 +} +trigger{ + type = custom + name = init_day_35 +} +trigger{ + type = custom + name = init_day_36 +} +trigger{ + type = custom + name = init_day_37 +} +trigger{ + type = custom + name = init_day_38 +} +trigger{ + type = custom + name = init_day_39 +} +trigger{ + type = custom + name = init_day_40 +} +trigger{ + type = custom + name = init_day_41 +} +trigger{ + type = custom + name = init_day_42 +} +trigger{ + type = custom + name = init_day_43 +} +trigger{ + type = custom + name = init_day_44 +} +trigger{ + type = custom + name = init_day_45 +} +trigger{ + type = custom + name = init_day_46 +} +trigger{ + type = custom + name = init_day_47 +} +trigger{ + type = custom + name = init_day_48 +} +trigger{ + type = custom + name = init_day_49 +} +trigger{ + type = custom + name = init_day_50 +} +trigger{ + type = custom + name = init_day_51 +} +trigger{ + type = custom + name = init_day_52 +} +trigger{ + type = custom + name = init_day_53 +} +trigger{ + type = custom + name = init_day_54 +} +trigger{ + type = custom + name = init_day_55 +} +trigger{ + type = custom + name = init_day_56 +} +trigger{ + type = custom + name = init_day_57 +} +trigger{ + type = custom + name = init_day_58 +} +trigger{ + type = custom + name = init_day_59 +} + +link{ + trigger = init + action = buy_calf cow_random 1 + action = log_db BUY_CALF_N=1 + action = trigger_later init_day_01 1 +} +link{ + trigger = init_day_01 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_02 1 +} +link{ + trigger = init_day_02 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_03 1 +} +link{ + trigger = init_day_03 + action = buy_calf cow_random 8 + action = log_db BUY_CALF_N=8 + action = trigger_later init_day_04 1 +} +link{ + trigger = init_day_04 + action = buy_calf cow_random 8 + action = log_db BUY_CALF_N=8 + action = trigger_later init_day_05 1 +} +link{ + trigger = init_day_05 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_06 1 +} +link{ + trigger = init_day_06 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_07 1 +} +link{ + trigger = init_day_07 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_08 1 +} +link{ + trigger = init_day_08 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_09 1 +} +link{ + trigger = init_day_09 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_10 1 +} +link{ + trigger = init_day_10 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_11 1 +} +link{ + trigger = init_day_11 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_12 1 +} +link{ + trigger = init_day_12 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_13 1 +} +link{ + trigger = init_day_13 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_14 1 +} +link{ + trigger = init_day_14 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_15 1 +} +link{ + trigger = init_day_15 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_16 1 +} +link{ + trigger = init_day_16 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_17 1 +} +link{ + trigger = init_day_17 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_18 1 +} +link{ + trigger = init_day_18 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_19 1 +} +link{ + trigger = init_day_19 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_20 1 +} +link{ + trigger = init_day_20 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_21 1 +} +link{ + trigger = init_day_21 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_22 1 +} +link{ + trigger = init_day_22 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_23 1 +} +link{ + trigger = init_day_23 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_24 1 +} +link{ + trigger = init_day_24 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_25 1 +} +link{ + trigger = init_day_25 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_26 1 +} +link{ + trigger = init_day_26 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_27 1 +} +link{ + trigger = init_day_27 + action = buy_calf cow_random 12 + action = log_db BUY_CALF_N=12 + action = trigger_later init_day_28 1 +} +link{ + trigger = init_day_28 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_29 1 +} +link{ + trigger = init_day_29 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_30 1 +} +link{ + trigger = init_day_30 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_31 1 +} +link{ + trigger = init_day_31 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_32 1 +} +link{ + trigger = init_day_32 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_33 1 +} +link{ + trigger = init_day_33 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_34 1 +} +link{ + trigger = init_day_34 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_35 1 +} +link{ + trigger = init_day_35 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_36 1 +} +link{ + trigger = init_day_36 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_37 1 +} +link{ + trigger = init_day_37 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_38 1 +} +link{ + trigger = init_day_38 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_39 1 +} +link{ + trigger = init_day_39 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_40 1 +} +link{ + trigger = init_day_40 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_41 1 +} +link{ + trigger = init_day_41 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_42 1 +} +link{ + trigger = init_day_42 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_43 1 +} +link{ + trigger = init_day_43 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_44 1 +} +link{ + trigger = init_day_44 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_45 1 +} +link{ + trigger = init_day_45 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_46 1 +} +link{ + trigger = init_day_46 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_47 1 +} +link{ + trigger = init_day_47 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_48 1 +} +link{ + trigger = init_day_48 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_49 1 +} +link{ + trigger = init_day_49 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_50 1 +} +link{ + trigger = init_day_50 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_51 1 +} +link{ + trigger = init_day_51 + action = buy_calf cow_random 8 + action = log_db BUY_CALF_N=8 + action = trigger_later init_day_52 1 +} +link{ + trigger = init_day_52 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_53 1 +} +link{ + trigger = init_day_53 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_54 1 +} +link{ + trigger = init_day_54 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_55 1 +} +link{ + trigger = init_day_55 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_56 1 +} +link{ + trigger = init_day_56 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_57 1 +} +link{ + trigger = init_day_57 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_58 1 +} +link{ + trigger = init_day_58 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_59 1 +} +link{ + trigger = init_day_59 + action = buy_calf cow_random 25 + action = log_db BUY_CALF_N=25 +} + +################################################################################################################# +#====== Management of herd # +################################################################################################################# + +#_______Predefined states : herd, heifers & mature ______________________________________________________________ +# +# herd : Every animal that enters the herd is added to this state. Male calves are never added. +# heifers : Newborn female calves enter the herd as heifers, and are moved to not_heifers at 1st calving. +# mature : Cows enter mature state when non-labile body mass W > 0.5 WM (GSP for mature format). + + +################################################################################################################# +#====== Remove cows @ end of simulation # +################################################################################################################# + +trigger{ + type = chron + name = tr_end_simu + scheme = 1985-12-31 23:59:58 +} + +link{ + trigger = tr_end_simu + action = log_db action_remove_herd + action = remove_herd +} + +action{ + type = broadcast_now + name = remove_herd + trigger = tr_remove_herd +} + +trigger{ + type = custom + name = tr_remove_herd +} + +link{ + trigger = tr_remove_herd + action = log_db delete_cow + action = delete_cow +} + +################################################################################################################# +#====== Rearing # +################################################################################################################# + +#_______CALF: heifers of age < 100 days + +state{ + state = CALF +} + +link{ + trigger = enter heifers + condition = age < 100 + # action = log_db heifers_to_CALF + action = state_move heifers CALF +} + +link{ + trigger = calving + condition = state_size CALF > 333 + action = log_db REMOVE_CALF_to_limit_size + action = delete_calf + } + +#_______HEIFER: heifers of age >= 100 days + +state{ + state = HEIFER +} + +link{ + trigger = enter heifers + condition = age >= 100 + # action = log_db heifers_to_HEIFER + action = state_move heifers HEIFER +} + +link{ + trigger = every_day + condition = age >= 100 + condition = is_in CALF + # action = log_db CALF_to_HEIFER_@WEANING + action = state_move CALF HEIFER +} + + +################################################################################################################# +#====== Reproduction # +################################################################################################################# + +#_______CYCLING: non-pregnant heifers at 1st ovulation or postabortive/postpartum recycling cows _____________ + +state{ + state = CYCLING +} + +link{ + trigger = ovulation + condition = is_in HEIFER + # action = log_db HEIFER_to_CYCLING_@PUBERTY + action = log_db 00_PUBERTY + action = state_move HEIFER CYCLING +} + +link{ + trigger = ovulation + action = log_db 00_OVULATION +} + +#_______BREEDING: cycling heifers and cows during breeding season ______________________________________________ + +state{ + state = BREEDING +} + +#During breeding season, not TO_CULL and CYCLING cows are moved to BREEDING +link{ + trigger = every_day + condition = breeding_season + condition = not is_in TO_CULL + condition = is_in CYCLING + condition = is_in mature + # action = log_db CYCLING_to_BREEDING + action = state_move CYCLING BREEDING +} + +link{ + trigger = enter BREEDING + # action = log_db Start_estrous_detection + action = estrous_start estrous_detection_default +} + +link{ + trigger = every_day + condition = not breeding_season + condition = is_in BREEDING + # action = log_db BREEDING_to_CYCLING + action = state_move BREEDING CYCLING +} + +link{ + trigger = quit BREEDING + # action = log_db Stop_estrous_detection + action = estrous_stop +} + + +#_______PREGNANT: at conception _________________________________________________________________________________ + +state{ + state = PREGNANT +} + +link{ + trigger = conception + action = log_db 02_CONCEPTION + action = state_move BREEDING PREGNANT +} + +#_______POST-ABORTIVE: triggered at abortion ____________________________________________________________________ + +state{ + state = POST-ABORTIVE +} + +link{ + trigger = abortion + condition = days_after_conception <= 17 + action = log_db 03_EARLY_EMBRYO_DEATH + action = state_move PREGNANT CYCLING +} + +link{ + trigger = abortion + condition = days_after_conception > 17 + condition = days_after_conception <= 64 + action = log_db 04_LATE_EMBRYO_DEATH + action = state_move PREGNANT CYCLING +} + +trigger{ + type = custom + name = post_abortive_recycling +} + +#Abortions after ] 64 - 210 days] days in pregnancy are managed with a voluntary period of 40 days +link{ + trigger = abortion + condition = days_after_conception > 64 + condition = days_after_conception <= 210 + action = log_db 05_FETAL_DEATH + action = state_move PREGNANT POST-ABORTIVE + action = trigger_later post_abortive_recycling 40 +} + +link{ + trigger = post_abortive_recycling + # action = log_db POST-ABORTIVE_to_CYCLING + action = state_move POST-ABORTIVE CYCLING +} + +#Abortions after 210 days in pregnancy are managed by culling +link{ + trigger = abortion + condition = days_after_conception > 210 + action = log_db 05_FETAL_DEATH + action = log_db TO_CULL_from_PREGNANT_after_late_fetal_death + action = state_move PREGNANT TO_CULL +} + + +#_______POSTPARTAL: triggered at parturition ____________________________________________________________________ + +state{ + state = POSTPARTAL +} + +trigger{ + type = custom + name = postpartal_recycling +} + +link{ + trigger = parturition + action = log_db 06_PARTURITION + # action = log_db PREGNANT_to_POSTPARTAL + action = state_move PREGNANT POSTPARTAL + action = trigger_later postpartal_recycling 40 + action = log_db start_milking + action = start_milking + } + +link{ + trigger = postpartal_recycling + # action = log_db POSTPARTAL_to_CYCLING + action = state_move POSTPARTAL CYCLING +} + +################################################################################################################# +#====== Drying-off # +################################################################################################################# + +#_______EXTENDED_LACTATION: CYCLING and is_milking after 305 days after calving + +state{ + state = EXTENDED_LACTATION +} + +link{ + trigger = every_day + condition = is_milking + condition = not is_in PREGNANT + condition = not is_in EXTENDED_LACTATION + condition = days_after_calving >= 305 + # action = log_db Extended lactation + action = state_add EXTENDED_LACTATION +} + +#stop 300 days_after_calving if milk_yield <= 5 kg/d and not in EXTENDED_LACTATION +link{ + trigger = every_day + condition = is_milking + condition = not is_in EXTENDED_LACTATION + condition = days_after_calving >= 300 + condition = milk_yield <= 5 + action = log_db stop_milking + action = stop_milking +} + +#stop 300 days_after_calving if milk_yield <= 5 kg/d and in EXTENDED_LACTATION +link{ + trigger = every_day + condition = is_milking + condition = is_in EXTENDED_LACTATION + condition = days_after_calving >= 300 + condition = milk_yield <= 5 + action = log_db stop_milking_extended + action = stop_milking +} + +#stop 300 days_after_calving and 219 days_in_pregnancy +link{ + trigger = every_day + condition = is_milking + condition = is_pregnant + condition = days_after_calving >= 300 + condition = days_in_pregnancy >= 219 + action = log_db stop_milking_pregnant + action = stop_milking +} + +link{ + trigger = stop_milking + trigger = enter PREGNANT + condition = is_in EXTENDED_LACTATION + action = state_delete EXTENDED_LACTATION +} + +################################################################################################################# +#====== Culling # +################################################################################################################# + +#_______TO_CULL: ____________________________________________________________________ + +state{ + state = TO_CULL +} + +#______culling not pregnant nulliparous at age > 800 days +link{ + trigger = every_day + condition = is_in CYCLING + condition = not is_in PREGNANT + condition = parity = 0 + condition = age > 800 + action = log_db TO_CULL_from_CYCLING_because_too_old_heifer + action = state_move CYCLING TO_CULL +} + + +#______culling not pregnant 320 days_after_calving +link{ + trigger = every_day + condition = days_after_calving > 320 + condition = is_in CYCLING + action = log_db TO_CULL_from_CYCLING_because_too_late_after_calving + action = state_move CYCLING TO_CULL +} + +#______culling not pregnant after 7 insemination +link{ + trigger = every_day + condition = is_in BREEDING + condition = not is_in ALREADY_INSEMINATED + condition = parity > 0 + condition = num_insemination_lactation >= 7 + action = log_db TO_CULL_from_BREEDING_max_nb_ins + action = state_move BREEDING TO_CULL +} + +link{ + trigger = enter PREGNANT + condition = is_in TO_CULL + action = state_move TO_CULL PREGNANT +} + + +#______culling oldest cow + +link{ + trigger = culling_day + condition = state_size TO_CULL = 999999 + condition = state_size PREGNANT > 666 + #individual conditions, like not is_milking cannot be mixed wirh herd level triggers + action = log_db Seek_for_oldest_to_cull + action = cull_oldest +} + +trigger{ + type = custom + name = tr_cull_oldest +} + +action{ + type = broadcast_now + name = cull_oldest + condition = not is_pregnant + condition = not is_milking + condition = not is_in HEIFER + condition = not is_in CALF + sortby = age + reverse = yes + limit = 1 + trigger = tr_cull_oldest +} + +link{ + trigger = tr_cull_oldest + action = log_db remove_oldest + action = delete_cow +} + + +#______remove cows TO_CULL once a month on day 15th + +trigger{ + type = custom + name = tr_remove_cows_to_cull +} + +link{ + trigger = tr_remove_cows_to_cull + condition = is_in TO_CULL + condition = not is_milking + condition = not is_pregnant + action = log_db Remove + action = delete_cow +} + +trigger{ + type = chron + name = culling_day + scheme = *-*-15 14:00:00 +} + +action{ + type = broadcast_now + name = broadcast_TO_CULL + condition = is_in TO_CULL + trigger = tr_remove_cows_to_cull +} + +link{ + trigger = culling_day + action = broadcast_TO_CULL +} + + +################################################################################################################# +#====== Feeding # +################################################################################################################# +#______optimal feeding for 999 + +state{ + state = CONTROL +} + +link{ + trigger = enter herd + condition = state_size herd <= 999 #nb_control 0 - 999 + action = change_food optimal + action = state_add CONTROL #Cows are fed on optimal diet as a control +} + +#______Default feeding rules + +#################### > at birth: on calf diet +link{ + trigger = enter CALF + condition = not is_in CONTROL + action = change_food calf_diet +} + +#################### > at weaning: on heifer diet +link{ + trigger = enter HEIFER + condition = not is_in CONTROL + action = change_food heifer_diet +} + +#################### > at parturition: on lactation diet +link{ + trigger = parturition + condition = not is_in CONTROL + action = change_food lactation_diet +} + + +#################### > at drying-off: on drycow_diet +link{ + trigger = stop_milking + condition = not is_in CONTROL + action = change_food drycow_diet +} + +#################### > OUTDOOR: on pasture diet +trigger{ + type = chron + name = outdoor + scheme = *-04-01 00:00:00 +} + +link{ + trigger = outdoor + action = broadcast_outdoor +} + +action{ + type = broadcast_now + name = broadcast_outdoor + trigger = outdoor_feeding +} + +trigger{ + type = custom + name = outdoor_feeding +} + +link{ + trigger = outdoor_feeding + condition = not is_in CALF + condition = not is_in CONTROL + action = change_food pasture_diet +} + + +#################### > INDOOR: back to diet according to state +trigger{ + type = chron + name = indoor + scheme = *-10-01 00:00:00 +} + +link{ + trigger = indoor + action = broadcast_indoor +} + +action{ + type = broadcast_now + name = broadcast_indoor + trigger = indoor_feeding +} + +trigger{ + type = custom + name = indoor_feeding +} + +link{ + trigger = indoor_feeding + condition = is_in HEIFER + condition = not is_in CONTROL + action = change_food heifer_diet +} + +link{ + trigger = indoor_feeding + condition = is_in CYCLING + condition = not is_in CONTROL + action = change_food heifer_diet +} + +link{ + trigger = indoor_feeding + condition = is_in BREEDING + condition = not is_milking + condition = not is_in CONTROL + action = change_food heifer_diet +} + +link{ + trigger = indoor_feeding + condition = not is_in BREEDING + condition = not is_milking + condition = not is_in CONTROL + action = change_food drycow_diet +} + +link{ + trigger = indoor_feeding + condition = is_milking + condition = not is_in CONTROL + action = change_food lactation_diet +} + + + + +################################################################################################################# +#====== Generic stuff # +################################################################################################################# + +trigger{ + type = chron + name = every_day_herd + scheme = *-*-* 12:00:00 +} + +trigger{ + type = custom + name = every_day +} + +link{ + trigger = every_day_herd + action = broadcast_now every_day +} + +trigger{ + type = custom + name = first_day_sub +} + +trigger{ + type = custom + name = first_day +} + +link{ + trigger = init + action = trigger_later first_day_sub 0.001 +} +link{ + trigger = first_day_sub + action = broadcast_now first_day +} + +################################################################################################################# +#====== Log # +################################################################################################################# + +log{ + + #farmer level + insemination = yes + change_food = yes + + #herd level + conception = yes + parturition = yes + death = yes + estrous_observed = yes + estrous_missed = yes + estrous_environment= yes + insemination_result= yes + mature = yes + ovulation = yes + new_cow = yes + delete_cow = yes + abortion = yes + + #cow level + animal_performance = no +} + +################################################################################################################# +#====== Log states # +################################################################################################################# + +action{ + type = genericlog_herd + + name = log_states + log_type = file + file_path = states.txt + sep_col = \t + file_line_flush=no + + #sqlite_path = states.sqlite + #sqlite_table = states + + + #--- from cow and simulator --- + column{ + value = time + name = time + sqlite_type = numeric + } + + column{ + value = state.CONTROL + name = CONTROL + sqlite_type = numeric + } + + column{ + value = state.CALF + name = CALF + sqlite_type = numeric + } + + column{ + value = state.HEIFER + name = HEIFER + sqlite_type = numeric + } + + column{ + value = state.CYCLING + name = CYCLING + sqlite_type = numeric + } + + column{ + value = state.BREEDING + name = BREEDING + sqlite_type = numeric + } + + column{ + value = state.PREGNANT + name = PREGNANT + sqlite_type = numeric + } + + column{ + value = state.POST-ABORTIVE + name = POST-ABORTIVE + sqlite_type = numeric + } + + column{ + value = state.POSTPARTAL + name = POSTPARTAL + sqlite_type = numeric + } + + column{ + value = state.EXTENDED_LACTATION + name = EXTENDED_LACTATION + sqlite_type = numeric + } + + column{ + value = state.TO_CULL + name = TO_CULL + sqlite_type = numeric + } + + + # column{ + # value = state.not.mature + # name = not_mature + # sqlite_type = numeric + # } + +} + +link{ + trigger = every_day_herd + action = log_states +} + + + +###s######## Default diets + +feed{ + name = calf_diet + type = mix + + feed = CPL.MLK + proportion = 1.00 +} + +feed{ + name = heifer_diet + type = mix + + feed = FO.STR + proportion = 0.02 + feed = FO.HAP + proportion = 0.60 + feed = FO.GSI + proportion = 0.32 + feed = CO.CER + proportion = 0.05 + feed = CPL.CMV + proportion = 0.01 +} + +feed{ + name = lactation_diet + type = mix + + feed = FO.STR + proportion = 0.01 + feed = FO.HAP + proportion = 0.03 + feed = FO.GSI + proportion = 0.04 + feed = FO.CSI + proportion = 0.70 + feed = CO.CER + proportion = 0.05 + feed = CO.OSC + proportion = 0.13 + feed = CO.ROO + proportion = 0.03 + feed = CPL.CMV + proportion = 0.01 +} + +feed{ + name = drycow_diet + type = mix + + feed = FO.STR + proportion = 0.02 + feed = FO.HAP + proportion = 0.68 + feed = FO.CSI + proportion = 0.08 + feed = CO.CER + proportion = 0.05 + feed = CO.OSC + proportion = 0.13 + feed = CO.ROO + proportion = 0.03 + feed = CPL.CMV + proportion = 0.01 +} + +feed{ + name = pasture_diet + type = mix + + feed = FO.FGX + proportion = 0.778 + feed = CO.CER + proportion = 0.050 + feed = CO.OSC + proportion = 0.130 + feed = CO.TUB + proportion = 0.002 + feed = CO.ROO + proportion = 0.030 + feed = CPL.CMV + proportion = 0.010 +} + + + + + +######################################################## +# # +#List of available feed (derived from INRA tables) # +# # +######################################################## + +########### FORAGES #################################### +# FO.STR Straw +# FO.STN Straw treated with ammonia +# FO.MSH Maize stover & husks +# FO.HAL Legume hay +# FO.HAG Gramineae hay +# FO.HAP Permanent grassland hay +# FO.DHA Dehydrated alfalfa +# FO.DHF Dehydrated forage +# FO.FGC Fresh cereal grass +# FO.FGO Fresh oleaginous grass +# FO.FGG Fresh gramineae grass +# FO.FGX Fresh mixed grass (meadow) +# FO.FGL Fresh legume grass +# FO.GSI50 Grass silage > 50% DM +# FO.GSI Grass silage +# FO.CSI Corn silage +# FO.FPF Faba & pea forage +# FO.VEG Vegetable fodder + +########### CONCENTRATES ############################### +# CO.CER Cereal seed & by-products +# CO.OSC5 Oilseed cake <5% oil +# CO.OSC Oilseed cake +# CO.TUB Starchy tubers +# CO.ROO Vegetable roots +# CO.FPB Faba & pea bean +# CO.LUP Lupin +# CO.SDO Oilseed + +########### COMPLEMENTS ################################ +# CPL.CMV Compl. Minerals & Vitamins +# CPL.AMA Amino acids +# CPL.URE Urea +# CPL.MOL Molasses +# CPL.PLP Beet pulp +# CPL.MLK Milk +# CPL.OIL Oil + + +feed{ # Straw + # Type of feed: FORAGE + # Maximum incorporation in diet: 80 %FM + # Representative INRA feed: FP0090 Oat straw + name = FO.STR + type = ingredient + feed_eD = 5.9512 # MJ_ME/kg_DM + feed_DMC = 0.8825 # kg_DM/kg_FM + feed_OM = 0.9100 # kg/kg_DM + feed_OMd = 0.4500 # % + feed_CP = 0.0360 # kg/kg_DM + feed_CPd = 0.0296 # % + feed_NDF = 0.7910 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0150 # kg/kg_DM +} +feed{ # Straw treated with ammonia + # Type of feed: FORAGE + # Maximum incorporation in diet: 80 %FM + # Representative INRA feed: FP0080 Barley straw, NH3-treated 5%DM + name = FO.STN + type = ingredient + feed_eD = 7.6484 # MJ_ME/kg_DM + feed_DMC = 0.8867 # kg_DM/kg_FM + feed_OM = 0.8970 # kg/kg_DM + feed_OMd = 0.5567 # % + feed_CP = 0.1000 # kg/kg_DM + feed_CPd = 0.3933 # % + feed_NDF = 0.7603 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0150 # kg/kg_DM +} +feed{ # Maize stover & husks + # Type of feed: FORAGE + # Maximum incorporation in diet: 80 %FM + # Representative INRA feed: FP0180 Maize stover, ensiled + name = FO.MSH + type = ingredient + feed_eD = 8.5847 # MJ_ME/kg_DM + feed_DMC = 0.5022 # kg_DM/kg_FM + feed_OM = 0.9332 # kg/kg_DM + feed_OMd = 0.6220 # % + feed_CP = 0.0888 # kg/kg_DM + feed_CPd = 0.3432 # % + feed_NDF = 0.6580 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0150 # kg/kg_DM +} +feed{ # Legume hay + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FF3370 Lucerne hay + name = FO.HAL + type = ingredient + feed_eD = 8.4626 # MJ_ME/kg_DM + feed_DMC = 0.8500 # kg_DM/kg_FM + feed_OM = 0.8956 # kg/kg_DM + feed_OMd = 0.5987 # % + feed_CP = 0.1791 # kg/kg_DM + feed_CPd = 0.6818 # % + feed_NDF = 0.5326 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0259 # kg/kg_DM +} +feed{ # Gramineae hay + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FF1190 Italian ryegrass hay + name = FO.HAG + type = ingredient + feed_eD = 8.8553 # MJ_ME/kg_DM + feed_DMC = 0.8500 # kg_DM/kg_FM + feed_OM = 0.9011 # kg/kg_DM + feed_OMd = 0.6294 # % + feed_CP = 0.1169 # kg/kg_DM + feed_CPd = 0.5447 # % + feed_NDF = 0.6421 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0300 # kg/kg_DM +} +feed{ # Permanent grassland hay + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FF0750 Mountain permanent grassland hay + name = FO.HAP + type = ingredient + feed_eD = 9.0294 # MJ_ME/kg_DM + feed_DMC = 0.8500 # kg_DM/kg_FM + feed_OM = 0.9133 # kg/kg_DM + feed_OMd = 0.6196 # % + feed_CP = 0.1270 # kg/kg_DM + feed_CPd = 0.5679 # % + feed_NDF = 0.6090 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0223 # kg/kg_DM +} +feed{ # Dehydrated alfalfa + # Type of feed: FORAGE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CD0040 Dehydrated alfalfa + name = FO.DHA + type = ingredient + feed_eD = 9.2187 # MJ_ME/kg_DM + feed_DMC = 0.9070 # kg_DM/kg_FM + feed_OM = 0.8752 # kg/kg_DM + feed_OMd = 0.6317 # % + feed_CP = 0.2002 # kg/kg_DM + feed_CPd = 0.7017 # % + feed_NDF = 0.4375 # kg/kg_DM + feed_ST = 0.0297 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.0292 # kg/kg_DM +} +feed{ # Dehydrated forage + # Type of feed: FORAGE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CD0120 Dehydrated Italian ryegrass + name = FO.DHF + type = ingredient + feed_eD = 9.9954 # MJ_ME/kg_DM + feed_DMC = 0.9080 # kg_DM/kg_FM + feed_OM = 0.8898 # kg/kg_DM + feed_OMd = 0.7010 # % + feed_CP = 0.1436 # kg/kg_DM + feed_CPd = 0.6182 # % + feed_NDF = 0.5450 # kg/kg_DM + feed_ST = 0.0024 # kg/kg_DM + feed_STd = 0.1640 # % + feed_EE = 0.0268 # kg/kg_DM +} +feed{ # Fresh cereal grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2020 Fresh whole crop sorghum + name = FO.FGC + type = ingredient + feed_eD = 9.4748 # MJ_ME/kg_DM + feed_DMC = 0.2504 # kg_DM/kg_FM + feed_OM = 0.9148 # kg/kg_DM + feed_OMd = 0.6585 # % + feed_CP = 0.1044 # kg/kg_DM + feed_CPd = 0.6330 # % + feed_NDF = 0.5710 # kg/kg_DM + feed_ST = 0.0983 # kg/kg_DM + feed_STd = 0.8652 # % + feed_EE = 0.0304 # kg/kg_DM +} +feed{ # Fresh oleaginous grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2830 Fresh silphium + name = FO.FGO + type = ingredient + feed_eD = 9.8974 # MJ_ME/kg_DM + feed_DMC = 0.1170 # kg_DM/kg_FM + feed_OM = 0.8494 # kg/kg_DM + feed_OMd = 0.7323 # % + feed_CP = 0.1535 # kg/kg_DM + feed_CPd = 0.7491 # % + feed_NDF = 0.4212 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0248 # kg/kg_DM +} +feed{ # Fresh gramineae grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV0490 Fresh italian ryegrass + name = FO.FGG + type = ingredient + feed_eD = 10.2129 # MJ_ME/kg_DM + feed_DMC = 0.1885 # kg_DM/kg_FM + feed_OM = 0.8893 # kg/kg_DM + feed_OMd = 0.7150 # % + feed_CP = 0.1452 # kg/kg_DM + feed_CPd = 0.6756 # % + feed_NDF = 0.5690 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0367 # kg/kg_DM +} +feed{ # Fresh mixed grass (meadow) + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV0120 Fresh lowland grassland + name = FO.FGX + type = ingredient + feed_eD = 10.2424 # MJ_ME/kg_DM + feed_DMC = 0.1946 # kg_DM/kg_FM + feed_OM = 0.9057 # kg/kg_DM + feed_OMd = 0.6896 # % + feed_CP = 0.1444 # kg/kg_DM + feed_CPd = 0.6595 # % + feed_NDF = 0.5498 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0265 # kg/kg_DM +} +feed{ # Fresh legume grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2370 Fresh red clover + name = FO.FGL + type = ingredient + feed_eD = 10.3243 # MJ_ME/kg_DM + feed_DMC = 0.1749 # kg_DM/kg_FM + feed_OM = 0.8844 # kg/kg_DM + feed_OMd = 0.7014 # % + feed_CP = 0.2046 # kg/kg_DM + feed_CPd = 0.7671 # % + feed_NDF = 0.4603 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0287 # kg/kg_DM +} +feed{ # Grass silage > 50% DM + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FE2790 Wilted perennial ryegrass silage + name = FO.GSI50 + type = ingredient + feed_eD = 9.3078 # MJ_ME/kg_DM + feed_DMC = 0.5502 # kg_DM/kg_FM + feed_OM = 0.9056 # kg/kg_DM + feed_OMd = 0.6545 # % + feed_CP = 0.1351 # kg/kg_DM + feed_CPd = 0.6395 # % + feed_NDF = 0.5744 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0337 # kg/kg_DM +} +feed{ # Grass silage + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FE2220 Perennial ryegrass silage + name = FO.GSI + type = ingredient + feed_eD = 10.3090 # MJ_ME/kg_DM + feed_DMC = 0.2234 # kg_DM/kg_FM + feed_OM = 0.8950 # kg/kg_DM + feed_OMd = 0.6952 # % + feed_CP = 0.1406 # kg/kg_DM + feed_CPd = 0.6469 # % + feed_NDF = 0.5425 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0374 # kg/kg_DM +} +feed{ # Corn silage + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FE4710 Fine chop 30% DM corn silage + name = FO.CSI + type = ingredient + feed_eD = 10.6995 # MJ_ME/kg_DM + feed_DMC = 0.3109 # kg_DM/kg_FM + feed_OM = 0.9484 # kg/kg_DM + feed_OMd = 0.7061 # % + feed_CP = 0.0848 # kg/kg_DM + feed_CPd = 0.5300 # % + feed_NDF = 0.4415 # kg/kg_DM + feed_ST = 0.2754 # kg/kg_DM + feed_STd = 0.7660 # % + feed_EE = 0.0310 # kg/kg_DM +} +feed{ # Faba & pea forage + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2700 Fresh faba bean forage + name = FO.FPF + type = ingredient + feed_eD = 10.8203 # MJ_ME/kg_DM + feed_DMC = 0.2546 # kg_DM/kg_FM + feed_OM = 0.9115 # kg/kg_DM + feed_OMd = 0.7188 # % + feed_CP = 0.1578 # kg/kg_DM + feed_CPd = 0.7156 # % + feed_NDF = 0.4160 # kg/kg_DM + feed_ST = 0.0913 # kg/kg_DM + feed_STd = 0.7650 # % + feed_EE = 0.0288 # kg/kg_DM +} +feed{ # Vegetable fodder + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2840 Fresh kale + name = FO.VEG + type = ingredient + feed_eD = 12.0901 # MJ_ME/kg_DM + feed_DMC = 0.1348 # kg_DM/kg_FM + feed_OM = 0.8674 # kg/kg_DM + feed_OMd = 0.8260 # % + feed_CP = 0.1684 # kg/kg_DM + feed_CPd = 0.7794 # % + feed_NDF = 0.3382 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0080 # kg/kg_DM +} +feed{ # Cereal seed & by-products + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CS0160 Wheat middlings, starch 30-40% + name = CO.CER + type = ingredient + feed_eD = 12.3262 # MJ_ME/kg_DM + feed_DMC = 0.8835 # kg_DM/kg_FM + feed_OM = 0.9541 # kg/kg_DM + feed_OMd = 0.7712 # % + feed_CP = 0.1642 # kg/kg_DM + feed_CPd = 0.6629 # % + feed_NDF = 0.2909 # kg/kg_DM + feed_ST = 0.4008 # kg/kg_DM + feed_STd = 0.8041 # % + feed_EE = 0.0584 # kg/kg_DM +} +feed{ # Oilseed cake <5% oil + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CX0050 Cottonseed meal, cr. fibre 15-20% + name = CO.OSC5 + type = ingredient + feed_eD = 12.0555 # MJ_ME/kg_DM + feed_DMC = 0.8907 # kg_DM/kg_FM + feed_OM = 0.9309 # kg/kg_DM + feed_OMd = 0.7747 # % + feed_CP = 0.4309 # kg/kg_DM + feed_CPd = 0.7740 # % + feed_NDF = 0.2931 # kg/kg_DM + feed_ST = 0.0527 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.0236 # kg/kg_DM +} +feed{ # Oilseed cake + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CX0310 Sunflower meal, oil 5-20% + name = CO.OSC + type = ingredient + feed_eD = 12.6524 # MJ_ME/kg_DM + feed_DMC = 0.9207 # kg_DM/kg_FM + feed_OM = 0.9368 # kg/kg_DM + feed_OMd = 0.7350 # % + feed_CP = 0.3499 # kg/kg_DM + feed_CPd = 0.7570 # % + feed_NDF = 0.3477 # kg/kg_DM + feed_ST = 0.0444 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.1015 # kg/kg_DM +} +feed{ # Starchy tubers + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CP0030 Cassava + name = CO.TUB + type = ingredient + feed_eD = 11.6622 # MJ_ME/kg_DM + feed_DMC = 0.6480 # kg_DM/kg_FM + feed_OM = 0.9510 # kg/kg_DM + feed_OMd = 0.8367 # % + feed_CP = 0.0750 # kg/kg_DM + feed_CPd = 0.4888 # % + feed_NDF = 0.1192 # kg/kg_DM + feed_ST = 0.6447 # kg/kg_DM + feed_STd = 0.7900 # % + feed_EE = 0.0062 # kg/kg_DM +} +feed{ # Vegetable roots + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: FR0040 Carrot + name = CO.ROO + type = ingredient + feed_eD = 12.8261 # MJ_ME/kg_DM + feed_DMC = 0.1568 # kg_DM/kg_FM + feed_OM = 0.9311 # kg/kg_DM + feed_OMd = 0.8900 # % + feed_CP = 0.0896 # kg/kg_DM + feed_CPd = 0.5710 # % + feed_NDF = 0.1295 # kg/kg_DM + feed_ST = 0.0050 # kg/kg_DM + feed_STd = 0.2000 # % + feed_EE = 0.0110 # kg/kg_DM +} +feed{ # Faba & pea bean + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CN0060 Faba bean seeds + name = CO.FPB + type = ingredient + feed_eD = 13.6219 # MJ_ME/kg_DM + feed_DMC = 0.8721 # kg_DM/kg_FM + feed_OM = 0.9610 # kg/kg_DM + feed_OMd = 0.9057 # % + feed_CP = 0.2689 # kg/kg_DM + feed_CPd = 0.7843 # % + feed_NDF = 0.1550 # kg/kg_DM + feed_ST = 0.4601 # kg/kg_DM + feed_STd = 0.7586 # % + feed_EE = 0.0146 # kg/kg_DM +} +feed{ # Lupin + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CN0130 White lupin seeds + name = CO.LUP + type = ingredient + feed_eD = 15.2995 # MJ_ME/kg_DM + feed_DMC = 0.8880 # kg_DM/kg_FM + feed_OM = 0.9617 # kg/kg_DM + feed_OMd = 0.8800 # % + feed_CP = 0.3657 # kg/kg_DM + feed_CPd = 0.8000 # % + feed_NDF = 0.2257 # kg/kg_DM + feed_ST = 0.0700 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.0850 # kg/kg_DM +} +feed{ # Oilseed + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CN0110 Linseeds + name = CO.SDO + type = ingredient + feed_eD = 17.6063 # MJ_ME/kg_DM + feed_DMC = 0.9143 # kg_DM/kg_FM + feed_OM = 0.9539 # kg/kg_DM + feed_OMd = 0.7650 # % + feed_CP = 0.2647 # kg/kg_DM + feed_CPd = 0.7380 # % + feed_NDF = 0.2515 # kg/kg_DM + feed_ST = 0.0461 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.3208 # kg/kg_DM +} +feed{ # Compl. Minerals & Vitamins + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: MC0010 Crushed chalk + name = CPL.CMV + type = ingredient + feed_eD = 0.0000 # MJ_ME/kg_DM + feed_DMC = 0.9500 # kg_DM/kg_FM + feed_OM = 0.0000 # kg/kg_DM + feed_OMd = 0.0000 # % + feed_CP = 0.0000 # kg/kg_DM + feed_CPd = 0.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0000 # kg/kg_DM +} +feed{ # Amino acids + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: CAA020 L-threonin + name = CPL.AMA + type = ingredient + feed_eD = 0.0000 # MJ_ME/kg_DM + feed_DMC = 1.0000 # kg_DM/kg_FM + feed_OM = 0.9960 # kg/kg_DM + feed_OMd = 1.0000 # % + feed_CP = 0.7450 # kg/kg_DM + feed_CPd = 1.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0000 # kg/kg_DM +} +feed{ # Urea + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: CV0020 Urea + name = CPL.URE + type = ingredient + feed_eD = 3.3890 # MJ_ME/kg_DM + feed_DMC = 0.9940 # kg_DM/kg_FM + feed_OM = 1.0000 # kg/kg_DM + feed_OMd = 0.9900 # % + feed_CP = 2.8700 # kg/kg_DM + feed_CPd = 1.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0000 # kg/kg_DM +} +feed{ # Molasses + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 10 %FM + # Representative INRA feed: CP0170 Beet molasses + name = CPL.MOL + type = ingredient + feed_eD = 9.7906 # MJ_ME/kg_DM + feed_DMC = 0.7390 # kg_DM/kg_FM + feed_OM = 0.8660 # kg/kg_DM + feed_OMd = 0.8250 # % + feed_CP = 0.1000 # kg/kg_DM + feed_CPd = 0.5800 # % + feed_NDF = 0.0015 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0070 # kg/kg_DM +} +feed{ # Beet pulp + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 10 %FM + # Representative INRA feed: CP0020 Pressed beet pulp + name = CPL.PLP + type = ingredient + feed_eD = 11.5046 # MJ_ME/kg_DM + feed_DMC = 0.4503 # kg_DM/kg_FM + feed_OM = 0.9243 # kg/kg_DM + feed_OMd = 0.8367 # % + feed_CP = 0.0913 # kg/kg_DM + feed_CPd = 0.6470 # % + feed_NDF = 0.4827 # kg/kg_DM + feed_ST = 0.0047 # kg/kg_DM + feed_STd = 0.5467 # % + feed_EE = 0.0097 # kg/kg_DM +} +feed{ # Milk + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: CL0020 Whole milk powder + name = CPL.MLK + type = ingredient + feed_eD = 18.8280 # MJ_ME/kg_DM + feed_DMC = 0.9600 # kg_DM/kg_FM + feed_OM = 0.9350 # kg/kg_DM + feed_OMd = 0.9400 # % + feed_CP = 0.2540 # kg/kg_DM + feed_CPd = 0.7800 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.2510 # kg/kg_DM +} +feed{ # Oil + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: CG0050 Soybean oil + name = CPL.OIL + type = ingredient + feed_eD = 36.6937 # MJ_ME/kg_DM + feed_DMC = 0.9980 # kg_DM/kg_FM + feed_OM = 0.9995 # kg/kg_DM + feed_OMd = 0.8900 # % + feed_CP = 0.0000 # kg/kg_DM + feed_CPd = 0.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.9992 # kg/kg_DM +} + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/input/example_02/explan.txt Mon Apr 07 15:18:25 2025 +0000 @@ -0,0 +1,2 @@ +template_file sim_id end_year +farmer-pl.txt sim_1 1980
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/input/example_02/farmer-pl.txt Mon Apr 07 15:18:25 2025 +0000 @@ -0,0 +1,2354 @@ +################################################################################################################# +# # +# InSiliCow: Farm Management # +# # +################################################################################################################# + +################################################################################################################# +#====== Preprocessor: specification of included files # +################################################################################################################# + +@include farmer-log.txt +# provides the action log_olivier +# call the action log_olivier every hour + +################################################################################################################# +#====== Initialization of simulation # +################################################################################################################# + +#______ Simulation time range + +init{ + begin_date = 1970-01-01 00:00:00 # 1970-01-01 00:00:00 + end_date = $end_year$-12-31 23:59:59 # 1975-02-20 23:59:59 + output_db = events.sqlite + name = $sim_id$ +} + +#______ Models + +param_general{ + garuns_type = garuns_olivier + rpm_type = rpm_lite + abortion_type = abortion_olivier +} + + +#______ Stoechio +stoechio{ + +} + +################################################################################################################# +#====== Genetic Scaling Parameters (GSP): defines individual cow performance # +# # +#======> in GARUNS model # +#GSP (unit) : Name Default | Proxy for # +#WM (Kg) : Mature non labile body mass 450 ± 25 | Format # +#khi_M (%) : Target labile:non-labile mass ratio 0.33 ± 0.03 | Body fatness # +#b0 (1/d) : Reserves storage rate 1.6 ± 0.16 | Reserve lability # +#nu_X (-) : Labile body mass mobilization index 1.0 ± 0.1 | Maternal investment # +#nu_Y (-) : Milk yield index 1.0 ± 0.1 | Milk potential # +#nu_F (-) : Milk fat secretion index 1.00 ± 0.02 | Milk fat content # +#nu_P (-) : Milk protein secretion index 1.00 ± 0.02 | Milk protein content # +#eD_star (MJ ME/Kg DM) : Optimal diet energy content 12.3 ± 0.5 | Energy intake capacity # +#NDF_star (Kg NDF/Kg DM): Optimal fiber energy content 0.5 ± 0.02 | Fiber intake capacity # +# # +#======> in RPM model # +#nu_I (-) : Conception probability threshold 0.026 ± 0.007 | Fertility # +#nu_B (-) : Puberty index 1.70 ± 0.07 | Age at 1st ovulation # +#nu_Z (-) : Follicular dynamics rate 1.00 ± 0.02 | Estrous duration # +################################################################################################################# + +################################################################################################################# +#====== Transmission of Genetic Scaling Parameters (GSP) # +# > genetic_sd defines the Mendelian sampling standard deviation for the calculation of the GSP of # +# a newborn calf : GSP_newborn ~ Normal [ (GSP_mother + GSP_father)/2 , GSP_sd ] # +################################################################################################################# + +genetic_sd{ + + garuns_olivier.WM{ + sd = 50 + min = 200 + max = 800 + } + + garuns_olivier.khi_M { + sd = 0.06 + 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.1 + 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 + } + + rpm_lite.nu_I{ + sd = 0.007 + min = 0.00 + max = 0.20 + } + + rpm_lite.nu_B{ + sd = 0.07 + min = 1.20 + max = 2.20 + } + + rpm_lite.nu_Z{ + sd = 0.02 + min = 0.90 + max = 1.10 + } +} + +################################################################################################################# +#====== Initialization of cows # +################################################################################################################# + +####### DEFAULT COW ############################################################################################# +init_cow{ + name=cow_default + + ### ABORTION rules acording to days in pregnancy (dip) + abortion_olivier.delta = constant 3.0 # days (compute every delta) + abortion_olivier.enabled = sometime + # never : no abortion, + # always : always abort, + # sometime : abort according to abortion_olivier.abo + # and abortion_olivier.dip + + ### Days in pregnancy (dip) cutoffs (to cut gestation in early embryo, late embryo and fetal stages) + # Default intervals: Early embryo [0;17] Late embryo [17;64] Fetal [64;+inf] + abortion_olivier.dip = vector constant 17 ; constant 64 + + ### Daily probability of abortion for each intervals + # Default probabiliies : E: 0.0230 L: 0.0096 F: 0.0004 + abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 + + ### GARUNS & RPM_lite Genetic Scaling Parameters + # Default constant values + garuns_olivier.WM = constant 450 #450 + garuns_olivier.khi_M = constant 0.30 # 0.33 + garuns_olivier.b0 = constant 1.6 # 1.6 + garuns_olivier.nu_X = constant 1 # 1.0 + garuns_olivier.nu_Y = constant 1.1 # 1.0 + garuns_olivier.nu_F = constant 1 # 1.0 + garuns_olivier.nu_P = constant 1 # 1.0 + garuns_olivier.eD_star = constant 10.7 # 10.7 + garuns_olivier.NDF_star = constant 0.5 # 0.5 + rpm_lite.nu_B = constant 1.7 # 1.7 + rpm_lite.nu_Z = constant 1 # 1.0 + rpm_lite.nu_I = constant 0.025 # 0.026 +} + +####### RANDOM COW ############################################################################################## +init_cow{ + name=cow_random + + ### ABORTION rules acording to days in pregnancy (dip) + abortion_olivier.delta = constant 3.0 # days (compute every delta) + abortion_olivier.enabled = sometime + # never : no abortion, + # always : always abort, + # sometime : abort according to abortion_olivier.abo + # and abortion_olivier.dip + + ### Days in pregnancy (dip) cutoffs (to cut gestation in early embryo, late embryo and fetal stages) + # Default intervals: Early embryo [0;17] Late embryo [17;64] Fetal [64;+inf] + abortion_olivier.dip = vector constant 17 ; constant 64 + + ### Daily probability of abortion for each intervals + # Default probabiliies : E: 0.0230 L: 0.0096 F: 0.0004 + abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 + + ### GARUNS & RPM_lite Genetic Scaling Parameters + # Random values + garuns_olivier.WM = norm99 450 50 #450 ± 25 + garuns_olivier.khi_M = norm99 0.30 0.06 # 0.33 ± 0.03 + garuns_olivier.b0 = norm99 1.6 0 # 1.6 ± 0.16 + garuns_olivier.nu_X = norm99 1 0 # 1.0 ± 0.10 + garuns_olivier.nu_Y = norm99 1.1 0.1 # 1.0 ± 0.10 + garuns_olivier.nu_F = norm99 1 0 # 1.0 ± 0.02 + garuns_olivier.nu_P = norm99 1 0 # 1.0 ± 0.02 + garuns_olivier.eD_star = norm99 10.7 0 # 10.7 ± 0.5 + garuns_olivier.NDF_star = norm99 0.5 0 # 0.5 ± 0.02 + rpm_lite.nu_B = norm99 1.7 0.07 # 1.7 ± 0.07 + rpm_lite.nu_Z = norm99 1 0.02 # 1.0 ± 0.02 + rpm_lite.nu_I = norm99 0.025 0.007 # 0.026 ± 0.007 +} + +################################################################################################################# +#====== Breeding # +################################################################################################################# + +#______ Bull semen: quality = 0.95 ± 0.05 ; sexratio = 0 % female + +breed{ + breed = bull_default +} + +init_bull{ + name=semen_default + bull.breed_name = bull_default + bull.semens_quality = norm99 0.95 0.05 # a number between 0.0 (=never works) and 1.0 (=perfect) + bull.female_ratio = constant 0 # offspring sex ratio. 1.0 = 100%female, 0.0=0%female +} + +#_______Breeding season: every year from *-03-21 00:00:00 to *-06-21 23:59:59 + +condition{ + type = chron_range + name = breeding_season + from = *-03-21 00:00:00 #*-03-21 00:00:00 + to = *-06-21 23:59:59 #*-06-21 23:59:59 +} + +trigger{ + type = chron + name = breeding_start + scheme = *-03-21 00:00:00 +} + +# link{ +# trigger = breeding_start +# action = log_db Start_breeding_season +#} + +trigger{ + type = chron + name = breeding_end + scheme = *-06-21 23:59:59 +} + +#link{ +# trigger = breeding_end +# action = log_db Stop_breeding_season +#} + +#______ Estrous detection method ________________________________________________________________________________ + +estrous_detection_method{ + name=estrous_detection_default + + #When do we observe oestruses + time_slice = 06:00:00 18:00:00 #00:00:01 23:59:59 + + #estrogene is transformed to an expression using a Hill function + expression_threshold=0.75 #default 0.75 + expression_stiffness=7 #default 7 + + + #the oestrus worth an insemination if the memory function is above this threshold + #THIS threshold is scaled for an observation all the day long + #if you observe half a day multiply this threshold by 0.5 + #1.0 is a reasonable base value for all day observations + detection_threshold=0.05 # 0.1 + + #then, the oestrus is truely detected with a chance of + sensitivity = 0.75 #0.7 + + #then an average of wrong_oestrus_per_day are generated + wrong_oestrus_per_day = 0 #0.00 +} + + +#______ Insemination _________________________________________________________________________________ + +# Insemination is performed once a day when estrous is detected + +state{ + state = ALREADY_INSEMINATED +} + +trigger{ + type=custom + name=tr_delete_ALREADY_INSEMINATED +} + +link{ + trigger = tr_delete_ALREADY_INSEMINATED + action = state_delete ALREADY_INSEMINATED +} + +link{ + trigger = estrous + condition = is_in BREEDING + condition = not is_pregnant + condition = not is_in ALREADY_INSEMINATED + action = state_add ALREADY_INSEMINATED + action = trigger_later tr_delete_ALREADY_INSEMINATED 1 + action = log_db 01_INSEMINATION + action = inseminate semen_default +} + +################################################################################################################# +#====== Initialization of herd # +################################################################################################################# + +trigger{ + type = custom + name = init_day_01 +} +trigger{ + type = custom + name = init_day_02 +} +trigger{ + type = custom + name = init_day_03 +} +trigger{ + type = custom + name = init_day_04 +} +trigger{ + type = custom + name = init_day_05 +} +trigger{ + type = custom + name = init_day_06 +} +trigger{ + type = custom + name = init_day_07 +} +trigger{ + type = custom + name = init_day_08 +} +trigger{ + type = custom + name = init_day_09 +} +trigger{ + type = custom + name = init_day_10 +} +trigger{ + type = custom + name = init_day_11 +} +trigger{ + type = custom + name = init_day_12 +} +trigger{ + type = custom + name = init_day_13 +} +trigger{ + type = custom + name = init_day_14 +} +trigger{ + type = custom + name = init_day_15 +} +trigger{ + type = custom + name = init_day_16 +} +trigger{ + type = custom + name = init_day_17 +} +trigger{ + type = custom + name = init_day_18 +} +trigger{ + type = custom + name = init_day_19 +} +trigger{ + type = custom + name = init_day_20 +} +trigger{ + type = custom + name = init_day_21 +} +trigger{ + type = custom + name = init_day_22 +} +trigger{ + type = custom + name = init_day_23 +} +trigger{ + type = custom + name = init_day_24 +} +trigger{ + type = custom + name = init_day_25 +} +trigger{ + type = custom + name = init_day_26 +} +trigger{ + type = custom + name = init_day_27 +} +trigger{ + type = custom + name = init_day_28 +} +trigger{ + type = custom + name = init_day_29 +} +trigger{ + type = custom + name = init_day_30 +} +trigger{ + type = custom + name = init_day_31 +} +trigger{ + type = custom + name = init_day_32 +} +trigger{ + type = custom + name = init_day_33 +} +trigger{ + type = custom + name = init_day_34 +} +trigger{ + type = custom + name = init_day_35 +} +trigger{ + type = custom + name = init_day_36 +} +trigger{ + type = custom + name = init_day_37 +} +trigger{ + type = custom + name = init_day_38 +} +trigger{ + type = custom + name = init_day_39 +} +trigger{ + type = custom + name = init_day_40 +} +trigger{ + type = custom + name = init_day_41 +} +trigger{ + type = custom + name = init_day_42 +} +trigger{ + type = custom + name = init_day_43 +} +trigger{ + type = custom + name = init_day_44 +} +trigger{ + type = custom + name = init_day_45 +} +trigger{ + type = custom + name = init_day_46 +} +trigger{ + type = custom + name = init_day_47 +} +trigger{ + type = custom + name = init_day_48 +} +trigger{ + type = custom + name = init_day_49 +} +trigger{ + type = custom + name = init_day_50 +} +trigger{ + type = custom + name = init_day_51 +} +trigger{ + type = custom + name = init_day_52 +} +trigger{ + type = custom + name = init_day_53 +} +trigger{ + type = custom + name = init_day_54 +} +trigger{ + type = custom + name = init_day_55 +} +trigger{ + type = custom + name = init_day_56 +} +trigger{ + type = custom + name = init_day_57 +} +trigger{ + type = custom + name = init_day_58 +} +trigger{ + type = custom + name = init_day_59 +} + +link{ + trigger = init + action = buy_calf cow_random 1 + action = log_db BUY_CALF_N=1 + action = trigger_later init_day_01 1 +} +link{ + trigger = init_day_01 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_02 1 +} +link{ + trigger = init_day_02 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_03 1 +} +link{ + trigger = init_day_03 + action = buy_calf cow_random 8 + action = log_db BUY_CALF_N=8 + action = trigger_later init_day_04 1 +} +link{ + trigger = init_day_04 + action = buy_calf cow_random 8 + action = log_db BUY_CALF_N=8 + action = trigger_later init_day_05 1 +} +link{ + trigger = init_day_05 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_06 1 +} +link{ + trigger = init_day_06 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_07 1 +} +link{ + trigger = init_day_07 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_08 1 +} +link{ + trigger = init_day_08 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_09 1 +} +link{ + trigger = init_day_09 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_10 1 +} +link{ + trigger = init_day_10 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_11 1 +} +link{ + trigger = init_day_11 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_12 1 +} +link{ + trigger = init_day_12 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_13 1 +} +link{ + trigger = init_day_13 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_14 1 +} +link{ + trigger = init_day_14 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_15 1 +} +link{ + trigger = init_day_15 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_16 1 +} +link{ + trigger = init_day_16 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_17 1 +} +link{ + trigger = init_day_17 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_18 1 +} +link{ + trigger = init_day_18 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_19 1 +} +link{ + trigger = init_day_19 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_20 1 +} +link{ + trigger = init_day_20 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_21 1 +} +link{ + trigger = init_day_21 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_22 1 +} +link{ + trigger = init_day_22 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_23 1 +} +link{ + trigger = init_day_23 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_24 1 +} +link{ + trigger = init_day_24 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_25 1 +} +link{ + trigger = init_day_25 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_26 1 +} +link{ + trigger = init_day_26 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_27 1 +} +link{ + trigger = init_day_27 + action = buy_calf cow_random 12 + action = log_db BUY_CALF_N=12 + action = trigger_later init_day_28 1 +} +link{ + trigger = init_day_28 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_29 1 +} +link{ + trigger = init_day_29 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_30 1 +} +link{ + trigger = init_day_30 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_31 1 +} +link{ + trigger = init_day_31 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_32 1 +} +link{ + trigger = init_day_32 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_33 1 +} +link{ + trigger = init_day_33 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_34 1 +} +link{ + trigger = init_day_34 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_35 1 +} +link{ + trigger = init_day_35 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_36 1 +} +link{ + trigger = init_day_36 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_37 1 +} +link{ + trigger = init_day_37 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_38 1 +} +link{ + trigger = init_day_38 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_39 1 +} +link{ + trigger = init_day_39 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_40 1 +} +link{ + trigger = init_day_40 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_41 1 +} +link{ + trigger = init_day_41 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_42 1 +} +link{ + trigger = init_day_42 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_43 1 +} +link{ + trigger = init_day_43 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_44 1 +} +link{ + trigger = init_day_44 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_45 1 +} +link{ + trigger = init_day_45 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_46 1 +} +link{ + trigger = init_day_46 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_47 1 +} +link{ + trigger = init_day_47 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_48 1 +} +link{ + trigger = init_day_48 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_49 1 +} +link{ + trigger = init_day_49 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_50 1 +} +link{ + trigger = init_day_50 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_51 1 +} +link{ + trigger = init_day_51 + action = buy_calf cow_random 8 + action = log_db BUY_CALF_N=8 + action = trigger_later init_day_52 1 +} +link{ + trigger = init_day_52 + action = buy_calf cow_random 4 + action = log_db BUY_CALF_N=4 + action = trigger_later init_day_53 1 +} +link{ + trigger = init_day_53 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_54 1 +} +link{ + trigger = init_day_54 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_55 1 +} +link{ + trigger = init_day_55 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_56 1 +} +link{ + trigger = init_day_56 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_57 1 +} +link{ + trigger = init_day_57 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_58 1 +} +link{ + trigger = init_day_58 + action = buy_calf cow_random 0 + action = log_db BUY_CALF_N=0 + action = trigger_later init_day_59 1 +} +link{ + trigger = init_day_59 + action = buy_calf cow_random 25 + action = log_db BUY_CALF_N=25 +} + +################################################################################################################# +#====== Management of herd # +################################################################################################################# + +#_______Predefined states : herd, heifers & mature ______________________________________________________________ +# +# herd : Every animal that enters the herd is added to this state. Male calves are never added. +# heifers : Newborn female calves enter the herd as heifers, and are moved to not_heifers at 1st calving. +# mature : Cows enter mature state when non-labile body mass W > 0.5 WM (GSP for mature format). + + +################################################################################################################# +#====== Remove cows @ end of simulation # +################################################################################################################# + +trigger{ + type = chron + name = tr_end_simu + scheme = 1985-12-31 23:59:58 +} + +link{ + trigger = tr_end_simu + action = log_db action_remove_herd + action = remove_herd +} + +action{ + type = broadcast_now + name = remove_herd + trigger = tr_remove_herd +} + +trigger{ + type = custom + name = tr_remove_herd +} + +link{ + trigger = tr_remove_herd + action = log_db delete_cow + action = delete_cow +} + +################################################################################################################# +#====== Rearing # +################################################################################################################# + +#_______CALF: heifers of age < 100 days + +state{ + state = CALF +} + +link{ + trigger = enter heifers + condition = age < 100 + # action = log_db heifers_to_CALF + action = state_move heifers CALF +} + +link{ + trigger = calving + condition = state_size CALF > 333 + action = log_db REMOVE_CALF_to_limit_size + action = delete_calf + } + +#_______HEIFER: heifers of age >= 100 days + +state{ + state = HEIFER +} + +link{ + trigger = enter heifers + condition = age >= 100 + # action = log_db heifers_to_HEIFER + action = state_move heifers HEIFER +} + +link{ + trigger = every_day + condition = age >= 100 + condition = is_in CALF + # action = log_db CALF_to_HEIFER_@WEANING + action = state_move CALF HEIFER +} + + +################################################################################################################# +#====== Reproduction # +################################################################################################################# + +#_______CYCLING: non-pregnant heifers at 1st ovulation or postabortive/postpartum recycling cows _____________ + +state{ + state = CYCLING +} + +link{ + trigger = ovulation + condition = is_in HEIFER + # action = log_db HEIFER_to_CYCLING_@PUBERTY + action = log_db 00_PUBERTY + action = state_move HEIFER CYCLING +} + +link{ + trigger = ovulation + action = log_db 00_OVULATION +} + +#_______BREEDING: cycling heifers and cows during breeding season ______________________________________________ + +state{ + state = BREEDING +} + +#During breeding season, not TO_CULL and CYCLING cows are moved to BREEDING +link{ + trigger = every_day + condition = breeding_season + condition = not is_in TO_CULL + condition = is_in CYCLING + condition = is_in mature + # action = log_db CYCLING_to_BREEDING + action = state_move CYCLING BREEDING +} + +link{ + trigger = enter BREEDING + # action = log_db Start_estrous_detection + action = estrous_start estrous_detection_default +} + +link{ + trigger = every_day + condition = not breeding_season + condition = is_in BREEDING + # action = log_db BREEDING_to_CYCLING + action = state_move BREEDING CYCLING +} + +link{ + trigger = quit BREEDING + # action = log_db Stop_estrous_detection + action = estrous_stop +} + + +#_______PREGNANT: at conception _________________________________________________________________________________ + +state{ + state = PREGNANT +} + +link{ + trigger = conception + action = log_db 02_CONCEPTION + action = state_move BREEDING PREGNANT +} + +#_______POST-ABORTIVE: triggered at abortion ____________________________________________________________________ + +state{ + state = POST-ABORTIVE +} + +link{ + trigger = abortion + condition = days_after_conception <= 17 + action = log_db 03_EARLY_EMBRYO_DEATH + action = state_move PREGNANT CYCLING +} + +link{ + trigger = abortion + condition = days_after_conception > 17 + condition = days_after_conception <= 64 + action = log_db 04_LATE_EMBRYO_DEATH + action = state_move PREGNANT CYCLING +} + +trigger{ + type = custom + name = post_abortive_recycling +} + +#Abortions after ] 64 - 210 days] days in pregnancy are managed with a voluntary period of 40 days +link{ + trigger = abortion + condition = days_after_conception > 64 + condition = days_after_conception <= 210 + action = log_db 05_FETAL_DEATH + action = state_move PREGNANT POST-ABORTIVE + action = trigger_later post_abortive_recycling 40 +} + +link{ + trigger = post_abortive_recycling + # action = log_db POST-ABORTIVE_to_CYCLING + action = state_move POST-ABORTIVE CYCLING +} + +#Abortions after 210 days in pregnancy are managed by culling +link{ + trigger = abortion + condition = days_after_conception > 210 + action = log_db 05_FETAL_DEATH + action = log_db TO_CULL_from_PREGNANT_after_late_fetal_death + action = state_move PREGNANT TO_CULL +} + + +#_______POSTPARTAL: triggered at parturition ____________________________________________________________________ + +state{ + state = POSTPARTAL +} + +trigger{ + type = custom + name = postpartal_recycling +} + +link{ + trigger = parturition + action = log_db 06_PARTURITION + # action = log_db PREGNANT_to_POSTPARTAL + action = state_move PREGNANT POSTPARTAL + action = trigger_later postpartal_recycling 40 + action = log_db start_milking + action = start_milking + } + +link{ + trigger = postpartal_recycling + # action = log_db POSTPARTAL_to_CYCLING + action = state_move POSTPARTAL CYCLING +} + +################################################################################################################# +#====== Drying-off # +################################################################################################################# + +#_______EXTENDED_LACTATION: CYCLING and is_milking after 305 days after calving + +state{ + state = EXTENDED_LACTATION +} + +link{ + trigger = every_day + condition = is_milking + condition = not is_in PREGNANT + condition = not is_in EXTENDED_LACTATION + condition = days_after_calving >= 305 + # action = log_db Extended lactation + action = state_add EXTENDED_LACTATION +} + +#stop 300 days_after_calving if milk_yield <= 5 kg/d and not in EXTENDED_LACTATION +link{ + trigger = every_day + condition = is_milking + condition = not is_in EXTENDED_LACTATION + condition = days_after_calving >= 300 + condition = milk_yield <= 5 + action = log_db stop_milking + action = stop_milking +} + +#stop 300 days_after_calving if milk_yield <= 5 kg/d and in EXTENDED_LACTATION +link{ + trigger = every_day + condition = is_milking + condition = is_in EXTENDED_LACTATION + condition = days_after_calving >= 300 + condition = milk_yield <= 5 + action = log_db stop_milking_extended + action = stop_milking +} + +#stop 300 days_after_calving and 219 days_in_pregnancy +link{ + trigger = every_day + condition = is_milking + condition = is_pregnant + condition = days_after_calving >= 300 + condition = days_in_pregnancy >= 219 + action = log_db stop_milking_pregnant + action = stop_milking +} + +link{ + trigger = stop_milking + trigger = enter PREGNANT + condition = is_in EXTENDED_LACTATION + action = state_delete EXTENDED_LACTATION +} + +################################################################################################################# +#====== Culling # +################################################################################################################# + +#_______TO_CULL: ____________________________________________________________________ + +state{ + state = TO_CULL +} + +#______culling not pregnant nulliparous at age > 800 days +link{ + trigger = every_day + condition = is_in CYCLING + condition = not is_in PREGNANT + condition = parity = 0 + condition = age > 800 + action = log_db TO_CULL_from_CYCLING_because_too_old_heifer + action = state_move CYCLING TO_CULL +} + + +#______culling not pregnant 320 days_after_calving +link{ + trigger = every_day + condition = days_after_calving > 320 + condition = is_in CYCLING + action = log_db TO_CULL_from_CYCLING_because_too_late_after_calving + action = state_move CYCLING TO_CULL +} + +#______culling not pregnant after 7 insemination +link{ + trigger = every_day + condition = is_in BREEDING + condition = not is_in ALREADY_INSEMINATED + condition = parity > 0 + condition = num_insemination_lactation >= 7 + action = log_db TO_CULL_from_BREEDING_max_nb_ins + action = state_move BREEDING TO_CULL +} + +link{ + trigger = enter PREGNANT + condition = is_in TO_CULL + action = state_move TO_CULL PREGNANT +} + + +#______culling oldest cow + +link{ + trigger = culling_day + condition = state_size TO_CULL = 999999 + condition = state_size PREGNANT > 666 + #individual conditions, like not is_milking cannot be mixed wirh herd level triggers + action = log_db Seek_for_oldest_to_cull + action = cull_oldest +} + +trigger{ + type = custom + name = tr_cull_oldest +} + +action{ + type = broadcast_now + name = cull_oldest + condition = not is_pregnant + condition = not is_milking + condition = not is_in HEIFER + condition = not is_in CALF + sortby = age + reverse = yes + limit = 1 + trigger = tr_cull_oldest +} + +link{ + trigger = tr_cull_oldest + action = log_db remove_oldest + action = delete_cow +} + + +#______remove cows TO_CULL once a month on day 15th + +trigger{ + type = custom + name = tr_remove_cows_to_cull +} + +link{ + trigger = tr_remove_cows_to_cull + condition = is_in TO_CULL + condition = not is_milking + condition = not is_pregnant + action = log_db Remove + action = delete_cow +} + +trigger{ + type = chron + name = culling_day + scheme = *-*-15 14:00:00 +} + +action{ + type = broadcast_now + name = broadcast_TO_CULL + condition = is_in TO_CULL + trigger = tr_remove_cows_to_cull +} + +link{ + trigger = culling_day + action = broadcast_TO_CULL +} + + +################################################################################################################# +#====== Feeding # +################################################################################################################# +#______optimal feeding for 999 + +state{ + state = CONTROL +} + +link{ + trigger = enter herd + condition = state_size herd <= 999 #nb_control 0 - 999 + action = change_food optimal + action = state_add CONTROL #Cows are fed on optimal diet as a control +} + +#______Default feeding rules + +#################### > at birth: on calf diet +link{ + trigger = enter CALF + condition = not is_in CONTROL + action = change_food calf_diet +} + +#################### > at weaning: on heifer diet +link{ + trigger = enter HEIFER + condition = not is_in CONTROL + action = change_food heifer_diet +} + +#################### > at parturition: on lactation diet +link{ + trigger = parturition + condition = not is_in CONTROL + action = change_food lactation_diet +} + + +#################### > at drying-off: on drycow_diet +link{ + trigger = stop_milking + condition = not is_in CONTROL + action = change_food drycow_diet +} + +#################### > OUTDOOR: on pasture diet +trigger{ + type = chron + name = outdoor + scheme = *-04-01 00:00:00 +} + +link{ + trigger = outdoor + action = broadcast_outdoor +} + +action{ + type = broadcast_now + name = broadcast_outdoor + trigger = outdoor_feeding +} + +trigger{ + type = custom + name = outdoor_feeding +} + +link{ + trigger = outdoor_feeding + condition = not is_in CALF + condition = not is_in CONTROL + action = change_food pasture_diet +} + + +#################### > INDOOR: back to diet according to state +trigger{ + type = chron + name = indoor + scheme = *-10-01 00:00:00 +} + +link{ + trigger = indoor + action = broadcast_indoor +} + +action{ + type = broadcast_now + name = broadcast_indoor + trigger = indoor_feeding +} + +trigger{ + type = custom + name = indoor_feeding +} + +link{ + trigger = indoor_feeding + condition = is_in HEIFER + condition = not is_in CONTROL + action = change_food heifer_diet +} + +link{ + trigger = indoor_feeding + condition = is_in CYCLING + condition = not is_in CONTROL + action = change_food heifer_diet +} + +link{ + trigger = indoor_feeding + condition = is_in BREEDING + condition = not is_milking + condition = not is_in CONTROL + action = change_food heifer_diet +} + +link{ + trigger = indoor_feeding + condition = not is_in BREEDING + condition = not is_milking + condition = not is_in CONTROL + action = change_food drycow_diet +} + +link{ + trigger = indoor_feeding + condition = is_milking + condition = not is_in CONTROL + action = change_food lactation_diet +} + + + + +################################################################################################################# +#====== Generic stuff # +################################################################################################################# + +trigger{ + type = chron + name = every_day_herd + scheme = *-*-* 12:00:00 +} + +trigger{ + type = custom + name = every_day +} + +link{ + trigger = every_day_herd + action = broadcast_now every_day +} + +trigger{ + type = custom + name = first_day_sub +} + +trigger{ + type = custom + name = first_day +} + +link{ + trigger = init + action = trigger_later first_day_sub 0.001 +} +link{ + trigger = first_day_sub + action = broadcast_now first_day +} + +################################################################################################################# +#====== Log # +################################################################################################################# + +log{ + + #farmer level + insemination = yes + change_food = yes + + #herd level + conception = yes + parturition = yes + death = yes + estrous_observed = yes + estrous_missed = yes + estrous_environment= yes + insemination_result= yes + mature = yes + ovulation = yes + new_cow = yes + delete_cow = yes + abortion = yes + + #cow level + animal_performance = no +} + +################################################################################################################# +#====== Log states # +################################################################################################################# + +action{ + type = genericlog_herd + + name = log_states + log_type = file + file_path = states.txt + sep_col = \t + file_line_flush=no + + #sqlite_path = states.sqlite + #sqlite_table = states + + + #--- from cow and simulator --- + column{ + value = time + name = time + sqlite_type = numeric + } + + column{ + value = state.CONTROL + name = CONTROL + sqlite_type = numeric + } + + column{ + value = state.CALF + name = CALF + sqlite_type = numeric + } + + column{ + value = state.HEIFER + name = HEIFER + sqlite_type = numeric + } + + column{ + value = state.CYCLING + name = CYCLING + sqlite_type = numeric + } + + column{ + value = state.BREEDING + name = BREEDING + sqlite_type = numeric + } + + column{ + value = state.PREGNANT + name = PREGNANT + sqlite_type = numeric + } + + column{ + value = state.POST-ABORTIVE + name = POST-ABORTIVE + sqlite_type = numeric + } + + column{ + value = state.POSTPARTAL + name = POSTPARTAL + sqlite_type = numeric + } + + column{ + value = state.EXTENDED_LACTATION + name = EXTENDED_LACTATION + sqlite_type = numeric + } + + column{ + value = state.TO_CULL + name = TO_CULL + sqlite_type = numeric + } + + + # column{ + # value = state.not.mature + # name = not_mature + # sqlite_type = numeric + # } + +} + +link{ + trigger = every_day_herd + action = log_states +} + + + +###s######## Default diets + +feed{ + name = calf_diet + type = mix + + feed = CPL.MLK + proportion = 1.00 +} + +feed{ + name = heifer_diet + type = mix + + feed = FO.STR + proportion = 0.02 + feed = FO.HAP + proportion = 0.60 + feed = FO.GSI + proportion = 0.32 + feed = CO.CER + proportion = 0.05 + feed = CPL.CMV + proportion = 0.01 +} + +feed{ + name = lactation_diet + type = mix + + feed = FO.STR + proportion = 0.01 + feed = FO.HAP + proportion = 0.03 + feed = FO.GSI + proportion = 0.04 + feed = FO.CSI + proportion = 0.70 + feed = CO.CER + proportion = 0.05 + feed = CO.OSC + proportion = 0.13 + feed = CO.ROO + proportion = 0.03 + feed = CPL.CMV + proportion = 0.01 +} + +feed{ + name = drycow_diet + type = mix + + feed = FO.STR + proportion = 0.02 + feed = FO.HAP + proportion = 0.68 + feed = FO.CSI + proportion = 0.08 + feed = CO.CER + proportion = 0.05 + feed = CO.OSC + proportion = 0.13 + feed = CO.ROO + proportion = 0.03 + feed = CPL.CMV + proportion = 0.01 +} + +feed{ + name = pasture_diet + type = mix + + feed = FO.FGX + proportion = 0.778 + feed = CO.CER + proportion = 0.050 + feed = CO.OSC + proportion = 0.130 + feed = CO.TUB + proportion = 0.002 + feed = CO.ROO + proportion = 0.030 + feed = CPL.CMV + proportion = 0.010 +} + + + + + +######################################################## +# # +#List of available feed (derived from INRA tables) # +# # +######################################################## + +########### FORAGES #################################### +# FO.STR Straw +# FO.STN Straw treated with ammonia +# FO.MSH Maize stover & husks +# FO.HAL Legume hay +# FO.HAG Gramineae hay +# FO.HAP Permanent grassland hay +# FO.DHA Dehydrated alfalfa +# FO.DHF Dehydrated forage +# FO.FGC Fresh cereal grass +# FO.FGO Fresh oleaginous grass +# FO.FGG Fresh gramineae grass +# FO.FGX Fresh mixed grass (meadow) +# FO.FGL Fresh legume grass +# FO.GSI50 Grass silage > 50% DM +# FO.GSI Grass silage +# FO.CSI Corn silage +# FO.FPF Faba & pea forage +# FO.VEG Vegetable fodder + +########### CONCENTRATES ############################### +# CO.CER Cereal seed & by-products +# CO.OSC5 Oilseed cake <5% oil +# CO.OSC Oilseed cake +# CO.TUB Starchy tubers +# CO.ROO Vegetable roots +# CO.FPB Faba & pea bean +# CO.LUP Lupin +# CO.SDO Oilseed + +########### COMPLEMENTS ################################ +# CPL.CMV Compl. Minerals & Vitamins +# CPL.AMA Amino acids +# CPL.URE Urea +# CPL.MOL Molasses +# CPL.PLP Beet pulp +# CPL.MLK Milk +# CPL.OIL Oil + + +feed{ # Straw + # Type of feed: FORAGE + # Maximum incorporation in diet: 80 %FM + # Representative INRA feed: FP0090 Oat straw + name = FO.STR + type = ingredient + feed_eD = 5.9512 # MJ_ME/kg_DM + feed_DMC = 0.8825 # kg_DM/kg_FM + feed_OM = 0.9100 # kg/kg_DM + feed_OMd = 0.4500 # % + feed_CP = 0.0360 # kg/kg_DM + feed_CPd = 0.0296 # % + feed_NDF = 0.7910 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0150 # kg/kg_DM +} +feed{ # Straw treated with ammonia + # Type of feed: FORAGE + # Maximum incorporation in diet: 80 %FM + # Representative INRA feed: FP0080 Barley straw, NH3-treated 5%DM + name = FO.STN + type = ingredient + feed_eD = 7.6484 # MJ_ME/kg_DM + feed_DMC = 0.8867 # kg_DM/kg_FM + feed_OM = 0.8970 # kg/kg_DM + feed_OMd = 0.5567 # % + feed_CP = 0.1000 # kg/kg_DM + feed_CPd = 0.3933 # % + feed_NDF = 0.7603 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0150 # kg/kg_DM +} +feed{ # Maize stover & husks + # Type of feed: FORAGE + # Maximum incorporation in diet: 80 %FM + # Representative INRA feed: FP0180 Maize stover, ensiled + name = FO.MSH + type = ingredient + feed_eD = 8.5847 # MJ_ME/kg_DM + feed_DMC = 0.5022 # kg_DM/kg_FM + feed_OM = 0.9332 # kg/kg_DM + feed_OMd = 0.6220 # % + feed_CP = 0.0888 # kg/kg_DM + feed_CPd = 0.3432 # % + feed_NDF = 0.6580 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0150 # kg/kg_DM +} +feed{ # Legume hay + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FF3370 Lucerne hay + name = FO.HAL + type = ingredient + feed_eD = 8.4626 # MJ_ME/kg_DM + feed_DMC = 0.8500 # kg_DM/kg_FM + feed_OM = 0.8956 # kg/kg_DM + feed_OMd = 0.5987 # % + feed_CP = 0.1791 # kg/kg_DM + feed_CPd = 0.6818 # % + feed_NDF = 0.5326 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0259 # kg/kg_DM +} +feed{ # Gramineae hay + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FF1190 Italian ryegrass hay + name = FO.HAG + type = ingredient + feed_eD = 8.8553 # MJ_ME/kg_DM + feed_DMC = 0.8500 # kg_DM/kg_FM + feed_OM = 0.9011 # kg/kg_DM + feed_OMd = 0.6294 # % + feed_CP = 0.1169 # kg/kg_DM + feed_CPd = 0.5447 # % + feed_NDF = 0.6421 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0300 # kg/kg_DM +} +feed{ # Permanent grassland hay + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FF0750 Mountain permanent grassland hay + name = FO.HAP + type = ingredient + feed_eD = 9.0294 # MJ_ME/kg_DM + feed_DMC = 0.8500 # kg_DM/kg_FM + feed_OM = 0.9133 # kg/kg_DM + feed_OMd = 0.6196 # % + feed_CP = 0.1270 # kg/kg_DM + feed_CPd = 0.5679 # % + feed_NDF = 0.6090 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0223 # kg/kg_DM +} +feed{ # Dehydrated alfalfa + # Type of feed: FORAGE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CD0040 Dehydrated alfalfa + name = FO.DHA + type = ingredient + feed_eD = 9.2187 # MJ_ME/kg_DM + feed_DMC = 0.9070 # kg_DM/kg_FM + feed_OM = 0.8752 # kg/kg_DM + feed_OMd = 0.6317 # % + feed_CP = 0.2002 # kg/kg_DM + feed_CPd = 0.7017 # % + feed_NDF = 0.4375 # kg/kg_DM + feed_ST = 0.0297 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.0292 # kg/kg_DM +} +feed{ # Dehydrated forage + # Type of feed: FORAGE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CD0120 Dehydrated Italian ryegrass + name = FO.DHF + type = ingredient + feed_eD = 9.9954 # MJ_ME/kg_DM + feed_DMC = 0.9080 # kg_DM/kg_FM + feed_OM = 0.8898 # kg/kg_DM + feed_OMd = 0.7010 # % + feed_CP = 0.1436 # kg/kg_DM + feed_CPd = 0.6182 # % + feed_NDF = 0.5450 # kg/kg_DM + feed_ST = 0.0024 # kg/kg_DM + feed_STd = 0.1640 # % + feed_EE = 0.0268 # kg/kg_DM +} +feed{ # Fresh cereal grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2020 Fresh whole crop sorghum + name = FO.FGC + type = ingredient + feed_eD = 9.4748 # MJ_ME/kg_DM + feed_DMC = 0.2504 # kg_DM/kg_FM + feed_OM = 0.9148 # kg/kg_DM + feed_OMd = 0.6585 # % + feed_CP = 0.1044 # kg/kg_DM + feed_CPd = 0.6330 # % + feed_NDF = 0.5710 # kg/kg_DM + feed_ST = 0.0983 # kg/kg_DM + feed_STd = 0.8652 # % + feed_EE = 0.0304 # kg/kg_DM +} +feed{ # Fresh oleaginous grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2830 Fresh silphium + name = FO.FGO + type = ingredient + feed_eD = 9.8974 # MJ_ME/kg_DM + feed_DMC = 0.1170 # kg_DM/kg_FM + feed_OM = 0.8494 # kg/kg_DM + feed_OMd = 0.7323 # % + feed_CP = 0.1535 # kg/kg_DM + feed_CPd = 0.7491 # % + feed_NDF = 0.4212 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0248 # kg/kg_DM +} +feed{ # Fresh gramineae grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV0490 Fresh italian ryegrass + name = FO.FGG + type = ingredient + feed_eD = 10.2129 # MJ_ME/kg_DM + feed_DMC = 0.1885 # kg_DM/kg_FM + feed_OM = 0.8893 # kg/kg_DM + feed_OMd = 0.7150 # % + feed_CP = 0.1452 # kg/kg_DM + feed_CPd = 0.6756 # % + feed_NDF = 0.5690 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0367 # kg/kg_DM +} +feed{ # Fresh mixed grass (meadow) + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV0120 Fresh lowland grassland + name = FO.FGX + type = ingredient + feed_eD = 10.2424 # MJ_ME/kg_DM + feed_DMC = 0.1946 # kg_DM/kg_FM + feed_OM = 0.9057 # kg/kg_DM + feed_OMd = 0.6896 # % + feed_CP = 0.1444 # kg/kg_DM + feed_CPd = 0.6595 # % + feed_NDF = 0.5498 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0265 # kg/kg_DM +} +feed{ # Fresh legume grass + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2370 Fresh red clover + name = FO.FGL + type = ingredient + feed_eD = 10.3243 # MJ_ME/kg_DM + feed_DMC = 0.1749 # kg_DM/kg_FM + feed_OM = 0.8844 # kg/kg_DM + feed_OMd = 0.7014 # % + feed_CP = 0.2046 # kg/kg_DM + feed_CPd = 0.7671 # % + feed_NDF = 0.4603 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0287 # kg/kg_DM +} +feed{ # Grass silage > 50% DM + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FE2790 Wilted perennial ryegrass silage + name = FO.GSI50 + type = ingredient + feed_eD = 9.3078 # MJ_ME/kg_DM + feed_DMC = 0.5502 # kg_DM/kg_FM + feed_OM = 0.9056 # kg/kg_DM + feed_OMd = 0.6545 # % + feed_CP = 0.1351 # kg/kg_DM + feed_CPd = 0.6395 # % + feed_NDF = 0.5744 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0337 # kg/kg_DM +} +feed{ # Grass silage + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FE2220 Perennial ryegrass silage + name = FO.GSI + type = ingredient + feed_eD = 10.3090 # MJ_ME/kg_DM + feed_DMC = 0.2234 # kg_DM/kg_FM + feed_OM = 0.8950 # kg/kg_DM + feed_OMd = 0.6952 # % + feed_CP = 0.1406 # kg/kg_DM + feed_CPd = 0.6469 # % + feed_NDF = 0.5425 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0374 # kg/kg_DM +} +feed{ # Corn silage + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FE4710 Fine chop 30% DM corn silage + name = FO.CSI + type = ingredient + feed_eD = 10.6995 # MJ_ME/kg_DM + feed_DMC = 0.3109 # kg_DM/kg_FM + feed_OM = 0.9484 # kg/kg_DM + feed_OMd = 0.7061 # % + feed_CP = 0.0848 # kg/kg_DM + feed_CPd = 0.5300 # % + feed_NDF = 0.4415 # kg/kg_DM + feed_ST = 0.2754 # kg/kg_DM + feed_STd = 0.7660 # % + feed_EE = 0.0310 # kg/kg_DM +} +feed{ # Faba & pea forage + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2700 Fresh faba bean forage + name = FO.FPF + type = ingredient + feed_eD = 10.8203 # MJ_ME/kg_DM + feed_DMC = 0.2546 # kg_DM/kg_FM + feed_OM = 0.9115 # kg/kg_DM + feed_OMd = 0.7188 # % + feed_CP = 0.1578 # kg/kg_DM + feed_CPd = 0.7156 # % + feed_NDF = 0.4160 # kg/kg_DM + feed_ST = 0.0913 # kg/kg_DM + feed_STd = 0.7650 # % + feed_EE = 0.0288 # kg/kg_DM +} +feed{ # Vegetable fodder + # Type of feed: FORAGE + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: FV2840 Fresh kale + name = FO.VEG + type = ingredient + feed_eD = 12.0901 # MJ_ME/kg_DM + feed_DMC = 0.1348 # kg_DM/kg_FM + feed_OM = 0.8674 # kg/kg_DM + feed_OMd = 0.8260 # % + feed_CP = 0.1684 # kg/kg_DM + feed_CPd = 0.7794 # % + feed_NDF = 0.3382 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0080 # kg/kg_DM +} +feed{ # Cereal seed & by-products + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CS0160 Wheat middlings, starch 30-40% + name = CO.CER + type = ingredient + feed_eD = 12.3262 # MJ_ME/kg_DM + feed_DMC = 0.8835 # kg_DM/kg_FM + feed_OM = 0.9541 # kg/kg_DM + feed_OMd = 0.7712 # % + feed_CP = 0.1642 # kg/kg_DM + feed_CPd = 0.6629 # % + feed_NDF = 0.2909 # kg/kg_DM + feed_ST = 0.4008 # kg/kg_DM + feed_STd = 0.8041 # % + feed_EE = 0.0584 # kg/kg_DM +} +feed{ # Oilseed cake <5% oil + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CX0050 Cottonseed meal, cr. fibre 15-20% + name = CO.OSC5 + type = ingredient + feed_eD = 12.0555 # MJ_ME/kg_DM + feed_DMC = 0.8907 # kg_DM/kg_FM + feed_OM = 0.9309 # kg/kg_DM + feed_OMd = 0.7747 # % + feed_CP = 0.4309 # kg/kg_DM + feed_CPd = 0.7740 # % + feed_NDF = 0.2931 # kg/kg_DM + feed_ST = 0.0527 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.0236 # kg/kg_DM +} +feed{ # Oilseed cake + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CX0310 Sunflower meal, oil 5-20% + name = CO.OSC + type = ingredient + feed_eD = 12.6524 # MJ_ME/kg_DM + feed_DMC = 0.9207 # kg_DM/kg_FM + feed_OM = 0.9368 # kg/kg_DM + feed_OMd = 0.7350 # % + feed_CP = 0.3499 # kg/kg_DM + feed_CPd = 0.7570 # % + feed_NDF = 0.3477 # kg/kg_DM + feed_ST = 0.0444 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.1015 # kg/kg_DM +} +feed{ # Starchy tubers + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CP0030 Cassava + name = CO.TUB + type = ingredient + feed_eD = 11.6622 # MJ_ME/kg_DM + feed_DMC = 0.6480 # kg_DM/kg_FM + feed_OM = 0.9510 # kg/kg_DM + feed_OMd = 0.8367 # % + feed_CP = 0.0750 # kg/kg_DM + feed_CPd = 0.4888 # % + feed_NDF = 0.1192 # kg/kg_DM + feed_ST = 0.6447 # kg/kg_DM + feed_STd = 0.7900 # % + feed_EE = 0.0062 # kg/kg_DM +} +feed{ # Vegetable roots + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: FR0040 Carrot + name = CO.ROO + type = ingredient + feed_eD = 12.8261 # MJ_ME/kg_DM + feed_DMC = 0.1568 # kg_DM/kg_FM + feed_OM = 0.9311 # kg/kg_DM + feed_OMd = 0.8900 # % + feed_CP = 0.0896 # kg/kg_DM + feed_CPd = 0.5710 # % + feed_NDF = 0.1295 # kg/kg_DM + feed_ST = 0.0050 # kg/kg_DM + feed_STd = 0.2000 # % + feed_EE = 0.0110 # kg/kg_DM +} +feed{ # Faba & pea bean + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CN0060 Faba bean seeds + name = CO.FPB + type = ingredient + feed_eD = 13.6219 # MJ_ME/kg_DM + feed_DMC = 0.8721 # kg_DM/kg_FM + feed_OM = 0.9610 # kg/kg_DM + feed_OMd = 0.9057 # % + feed_CP = 0.2689 # kg/kg_DM + feed_CPd = 0.7843 # % + feed_NDF = 0.1550 # kg/kg_DM + feed_ST = 0.4601 # kg/kg_DM + feed_STd = 0.7586 # % + feed_EE = 0.0146 # kg/kg_DM +} +feed{ # Lupin + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CN0130 White lupin seeds + name = CO.LUP + type = ingredient + feed_eD = 15.2995 # MJ_ME/kg_DM + feed_DMC = 0.8880 # kg_DM/kg_FM + feed_OM = 0.9617 # kg/kg_DM + feed_OMd = 0.8800 # % + feed_CP = 0.3657 # kg/kg_DM + feed_CPd = 0.8000 # % + feed_NDF = 0.2257 # kg/kg_DM + feed_ST = 0.0700 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.0850 # kg/kg_DM +} +feed{ # Oilseed + # Type of feed: CONCENTRATE + # Maximum incorporation in diet: 60 %FM + # Representative INRA feed: CN0110 Linseeds + name = CO.SDO + type = ingredient + feed_eD = 17.6063 # MJ_ME/kg_DM + feed_DMC = 0.9143 # kg_DM/kg_FM + feed_OM = 0.9539 # kg/kg_DM + feed_OMd = 0.7650 # % + feed_CP = 0.2647 # kg/kg_DM + feed_CPd = 0.7380 # % + feed_NDF = 0.2515 # kg/kg_DM + feed_ST = 0.0461 # kg/kg_DM + feed_STd = 0.8200 # % + feed_EE = 0.3208 # kg/kg_DM +} +feed{ # Compl. Minerals & Vitamins + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: MC0010 Crushed chalk + name = CPL.CMV + type = ingredient + feed_eD = 0.0000 # MJ_ME/kg_DM + feed_DMC = 0.9500 # kg_DM/kg_FM + feed_OM = 0.0000 # kg/kg_DM + feed_OMd = 0.0000 # % + feed_CP = 0.0000 # kg/kg_DM + feed_CPd = 0.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0000 # kg/kg_DM +} +feed{ # Amino acids + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: CAA020 L-threonin + name = CPL.AMA + type = ingredient + feed_eD = 0.0000 # MJ_ME/kg_DM + feed_DMC = 1.0000 # kg_DM/kg_FM + feed_OM = 0.9960 # kg/kg_DM + feed_OMd = 1.0000 # % + feed_CP = 0.7450 # kg/kg_DM + feed_CPd = 1.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0000 # kg/kg_DM +} +feed{ # Urea + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: CV0020 Urea + name = CPL.URE + type = ingredient + feed_eD = 3.3890 # MJ_ME/kg_DM + feed_DMC = 0.9940 # kg_DM/kg_FM + feed_OM = 1.0000 # kg/kg_DM + feed_OMd = 0.9900 # % + feed_CP = 2.8700 # kg/kg_DM + feed_CPd = 1.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0000 # kg/kg_DM +} +feed{ # Molasses + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 10 %FM + # Representative INRA feed: CP0170 Beet molasses + name = CPL.MOL + type = ingredient + feed_eD = 9.7906 # MJ_ME/kg_DM + feed_DMC = 0.7390 # kg_DM/kg_FM + feed_OM = 0.8660 # kg/kg_DM + feed_OMd = 0.8250 # % + feed_CP = 0.1000 # kg/kg_DM + feed_CPd = 0.5800 # % + feed_NDF = 0.0015 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.0070 # kg/kg_DM +} +feed{ # Beet pulp + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 10 %FM + # Representative INRA feed: CP0020 Pressed beet pulp + name = CPL.PLP + type = ingredient + feed_eD = 11.5046 # MJ_ME/kg_DM + feed_DMC = 0.4503 # kg_DM/kg_FM + feed_OM = 0.9243 # kg/kg_DM + feed_OMd = 0.8367 # % + feed_CP = 0.0913 # kg/kg_DM + feed_CPd = 0.6470 # % + feed_NDF = 0.4827 # kg/kg_DM + feed_ST = 0.0047 # kg/kg_DM + feed_STd = 0.5467 # % + feed_EE = 0.0097 # kg/kg_DM +} +feed{ # Milk + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 100 %FM + # Representative INRA feed: CL0020 Whole milk powder + name = CPL.MLK + type = ingredient + feed_eD = 18.8280 # MJ_ME/kg_DM + feed_DMC = 0.9600 # kg_DM/kg_FM + feed_OM = 0.9350 # kg/kg_DM + feed_OMd = 0.9400 # % + feed_CP = 0.2540 # kg/kg_DM + feed_CPd = 0.7800 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.2510 # kg/kg_DM +} +feed{ # Oil + # Type of feed: COMPLEMENT + # Maximum incorporation in diet: 5 %FM + # Representative INRA feed: CG0050 Soybean oil + name = CPL.OIL + type = ingredient + feed_eD = 36.6937 # MJ_ME/kg_DM + feed_DMC = 0.9980 # kg_DM/kg_FM + feed_OM = 0.9995 # kg/kg_DM + feed_OMd = 0.8900 # % + feed_CP = 0.0000 # kg/kg_DM + feed_CPd = 0.0000 # % + feed_NDF = 0.0000 # kg/kg_DM + feed_ST = 0.0000 # kg/kg_DM + feed_STd = 0.0000 # % + feed_EE = 0.9992 # kg/kg_DM +} + + +