diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8f83a1c5fda67604cae4b9fb4ab401035a1ef555..83e12b936bec4a2582675551b2d56c38c2c58a9b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,13 +12,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [0.6.0] - in planning
 
-*Plan: integrate AquaCrop (#79), set up first experiments*
+*Plan: decouple CairoMakie (#81), fix & test ALMaSS, set up first experiments*
 
 ---
 
-## [0.5.5] - unreleased
+## [0.5.5] - 09-08-2024
 
-*Plan: basic farm model (#16), decouple CairoMakie (#81)*
+**This point release implements the first basic farm model**
+
+### Added
+
+- basic farm model that assigns a crop rotation to each field, sowing and harvesting when appropriate
+
+- new parameters: `farm.farmmodel`, `farm.setaside`, `farm.fieldoutfreq`
+
+- visualisation of cropped area and crop growth over time
+
+- `farm.setaside` setting to configure what proportion of land farmers let lie fallow
+
+- `isharvestable()` function for `FarmPlot`s
+
+- `@areaof` macro to calculate the area of a given number of landscape pixels
+
+- `data/farm/standard_gross_margins.csv` from KTBL data
+
+### Changed
+
+- expanded & adapted general crop data and crop growth curve tables
+
+### Fixed
+
+- bug fixes in the ALMaSS crop model
 
 
 ## [0.5.4] - 08-08-2024
diff --git a/Project.toml b/Project.toml
index 131a5138c023ccfa4197c963415e0bba04a32288..b34a8e3bb74ffe2a863e273a054352ef359724ac 100644
--- a/Project.toml
+++ b/Project.toml
@@ -1,7 +1,7 @@
 name = "Persefone"
 uuid = "039acd1d-2a07-4b33-b082-83a1ff0fd136"
 authors = ["Daniel Vedder <daniel.vedder@idiv.de>"]
-version = "0.5.4"
+version = "0.5.5"
 
 [deps]
 ArgParse = "c7e460c6-2fb9-53a9-8c5b-16f535851c63"
diff --git a/data/crops/almass/almass_crop_growth_curves.csv b/data/crops/almass/almass_crop_growth_curves.csv
index 9fbba748596a09735a3b25a00e909def1e375c71..7896a334f06c0d4ccf338fd422b365c3b1cade52 100644
--- a/data/crops/almass/almass_crop_growth_curves.csv
+++ b/data/crops/almass/almass_crop_growth_curves.csv
@@ -1,650 +1,650 @@
 curve_id,crop_name,nutrient_status,growth_phase,point_type,GDD,LAI_total,LAI_green,height
-1,spring barley,high,janfirst,slope,99999.0,0.0,0.0,0.0
-1,spring barley,high,sow,start,-1.0,0.0,0.0,0.0
-1,spring barley,high,sow,slope,83.0,0.005466667,0.005466667,0.066666667
-1,spring barley,high,sow,slope,158.0,0.01,0.009866667,0.066666667
-1,spring barley,high,sow,slope,233.0,0.018266667,0.0184,0.106666667
-1,spring barley,high,sow,slope,308.0,0.033378378,0.033378378,0.081081081
-1,spring barley,high,sow,slope,382.0,0.0,0.0,0.060773481
-1,spring barley,high,sow,slope,563.0,0.0,0.0,0.154639175
-1,spring barley,high,sow,slope,660.0,0.0,0.0,0.066666667
-1,spring barley,high,sow,slope,675.0,0.0,0.0,0.138095238
-1,spring barley,high,sow,slope,885.0,0.0,-0.016233766,-0.029220779
-1,spring barley,high,sow,slope,1193.0,0.0,0.0,-0.035830619
-1,spring barley,high,sow,slope,1500.0,0.0,0.0,-0.000609143
-1,spring barley,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-1,spring barley,high,harvest1,start,-1.0,0.3,0.0,10.0
-1,spring barley,high,harvest2,slope,99999.0,0.0,0.0,0.0
-101,spring barley,low,janfirst,slope,99999.0,0.0,0.0,0.0
-101,spring barley,low,sow,start,-1.0,0.0,0.0,0.0
-101,spring barley,low,sow,slope,83.0,0.003333333,0.003333333,0.066666667
-101,spring barley,low,sow,slope,158.0,0.006,0.006,0.066666667
-101,spring barley,low,sow,slope,233.0,0.010933333,0.010933333,0.194666667
-101,spring barley,low,sow,slope,308.0,0.009932886,0.009932886,0.195973154
-101,spring barley,low,sow,slope,457.0,0.0,0.0,0.195180723
-101,spring barley,low,sow,slope,540.0,0.0,0.0,0.0
-101,spring barley,low,sow,slope,623.0,0.0,0.0,-1.333333333
-101,spring barley,low,sow,slope,638.0,0.0,-0.006160164,0.0
-101,spring barley,low,sow,slope,1125.0,0.0,0.0,-0.000505694
-101,spring barley,low,marchfirst,slope,99999.0,0.0,0.0,0.0
-101,spring barley,low,harvest1,start,-1.0,0.2,0.0,10.0
-101,spring barley,low,harvest2,slope,99999.0,0.0,0.0,0.0
-4,winter wheat,high,janfirst,slope,99999.0,0.0,0.0,0.0
-4,winter wheat,high,sow,start,-1.0,0.0,0.0,0.0
-4,winter wheat,high,sow,slope,83.0,0.002304147,0.002304147,0.055299539
-4,winter wheat,high,sow,slope,300.0,0.0,0.0,0.0
-4,winter wheat,high,marchfirst,slope,0.0,0.0,0.0,0.0
-4,winter wheat,high,marchfirst,slope,107.0,0.006666667,0.006666667,0.0
-4,winter wheat,high,marchfirst,slope,182.0,0.016,0.016,0.172
-4,winter wheat,high,marchfirst,slope,257.0,0.036363636,0.036363636,0.172727273
-4,winter wheat,high,marchfirst,slope,334.0,0.0,0.0,0.17593985
-4,winter wheat,high,marchfirst,slope,600.0,0.0,0.0,0.0
-4,winter wheat,high,marchfirst,slope,1087.0,0.0,-0.016722408,0.0
-4,winter wheat,high,marchfirst,slope,1386.0,0.0,0.0,-0.000861955
-4,winter wheat,high,harvest1,start,-1.0,0.3,0.0,10.0
-4,winter wheat,high,harvest2,slope,99999.0,0.0,0.0,0.0
-104,winter wheat,low,janfirst,slope,99999.0,0.0,0.0,0.0
-104,winter wheat,low,sow,start,-1.0,0.0,0.0,0.0
-104,winter wheat,low,sow,slope,83.0,0.003225806,0.003225806,0.055299539
-104,winter wheat,low,sow,slope,300.0,0.0,0.0,0.0
-104,winter wheat,low,marchfirst,slope,0.0,0.0,0.0,0.0
-104,winter wheat,low,marchfirst,slope,107.0,0.002666667,0.002666667,0.0
-104,winter wheat,low,marchfirst,slope,182.0,0.010666667,0.010666667,0.149333333
-104,winter wheat,low,marchfirst,slope,257.0,0.012295082,0.012295082,0.151639344
-104,winter wheat,low,marchfirst,slope,379.0,0.0,0.0,0.150678733
-104,winter wheat,low,marchfirst,slope,600.0,0.0,0.0,0.0
-104,winter wheat,low,marchfirst,slope,750.0,0.0,-0.005,0.0
-104,winter wheat,low,marchfirst,slope,1350.0,0.0,0.0,-0.000658902
-104,winter wheat,low,harvest1,start,-1.0,0.42,0.0,10.0
-104,winter wheat,low,harvest2,slope,99999.0,0.0,0.0,0.0
-13,undersown spring barley,high,janfirst,slope,99999.0,0.0,0.0,0.0
-13,undersown spring barley,high,sow,start,-1.0,0.0,0.0,0.0
-13,undersown spring barley,high,sow,slope,83.0,0.005466667,0.005466667,0.066666667
-13,undersown spring barley,high,sow,slope,158.0,0.01,0.009866667,0.066666667
-13,undersown spring barley,high,sow,slope,233.0,0.018266667,0.0184,0.212
-13,undersown spring barley,high,sow,slope,308.0,0.033378378,0.033378378,0.213513514
-13,undersown spring barley,high,sow,slope,382.0,0.0,0.0,0.21160221
-13,undersown spring barley,high,sow,slope,563.0,0.0,0.0,0.0
-13,undersown spring barley,high,sow,slope,660.0,0.0,0.0,-1.333333333
-13,undersown spring barley,high,sow,slope,675.0,0.0,0.0,0.0
-13,undersown spring barley,high,sow,slope,885.0,0.0,-0.016233766,0.0
-13,undersown spring barley,high,sow,slope,1193.0,0.0,0.0,-0.000607251
-13,undersown spring barley,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-13,undersown spring barley,high,harvest1,start,-1.0,0.275,0.165,5.0
-13,undersown spring barley,high,harvest1,slope,0.0,0.005625,0.003375,0.1
-13,undersown spring barley,high,harvest1,slope,40.0,0.002857143,0.005714286,0.0
-13,undersown spring barley,high,harvest1,slope,75.0,0.012,0.012,0.013333333
-13,undersown spring barley,high,harvest1,slope,150.0,0.022666667,0.024,0.08
-13,undersown spring barley,high,harvest1,slope,225.0,0.040909091,0.040909091,0.068181818
-13,undersown spring barley,high,harvest1,slope,269.0,0.0,0.0,0.08203125
-13,undersown spring barley,high,harvest1,slope,525.0,-5.03e-05,-5.03e-05,-0.000402115
-13,undersown spring barley,high,harvest2,start,-1.0,0.5,0.5,10.0
-13,undersown spring barley,high,harvest2,slope,0.0,0.008,0.008,0.133333333
-13,undersown spring barley,high,harvest2,slope,75.0,0.018666667,0.018666667,0.08
-13,undersown spring barley,high,harvest2,slope,150.0,0.04,0.04,0.04
-13,undersown spring barley,high,harvest2,slope,225.0,0.0,0.0,0.07
-13,undersown spring barley,high,harvest2,slope,525.0,-5.03e-05,-5.03e-05,-0.000402115
-113,undersown spring barley,low,janfirst,slope,99999.0,0.0,0.0,0.0
-113,undersown spring barley,low,sow,start,-1.0,0.0,0.0,0.0
-113,undersown spring barley,low,sow,slope,83.0,0.003333333,0.003333333,0.066666667
-113,undersown spring barley,low,sow,slope,158.0,0.006,0.006,0.066666667
-113,undersown spring barley,low,sow,slope,233.0,0.010933333,0.010933333,0.194666667
-113,undersown spring barley,low,sow,slope,308.0,0.009932886,0.009932886,0.195973154
-113,undersown spring barley,low,sow,slope,457.0,0.0,0.0,0.195180723
-113,undersown spring barley,low,sow,slope,540.0,0.0,0.0,0.0
-113,undersown spring barley,low,sow,slope,623.0,0.0,0.0,-1.333333333
-113,undersown spring barley,low,sow,slope,638.0,0.0,-0.006160164,0.0
-113,undersown spring barley,low,sow,slope,1125.0,0.0,0.0,-0.000505694
-113,undersown spring barley,low,marchfirst,slope,99999.0,0.0,0.0,0.0
-113,undersown spring barley,low,harvest1,start,-1.0,0.7,0.5,9.0
-113,undersown spring barley,low,harvest1,slope,0.0,0.0,0.001333333,0.0
-113,undersown spring barley,low,harvest1,slope,75.0,0.017333333,0.018666667,0.013333333
-113,undersown spring barley,low,harvest1,slope,150.0,0.04,0.04,0.08
-113,undersown spring barley,low,harvest1,slope,225.0,0.0,0.0,0.08
-113,undersown spring barley,low,harvest1,slope,525.0,0.0,-5.03e-05,-0.000402115
-113,undersown spring barley,low,harvest2,start,-1.0,0.5,0.5,10.0
-113,undersown spring barley,low,harvest2,slope,0.0,0.008,0.008,0.133333333
-113,undersown spring barley,low,harvest2,slope,75.0,0.018666667,0.018666667,0.0
-113,undersown spring barley,low,harvest2,slope,150.0,0.04,0.04,0.08
-113,undersown spring barley,low,harvest2,slope,225.0,0.0,0.0,0.08
-113,undersown spring barley,low,harvest2,slope,525.0,-5.03e-05,-5.03e-05,-0.000402115
-30,peas/beans,high,janfirst,slope,99999.0,0.0,0.0,0.0
-30,peas/beans,high,sow,start,-1.0,0.0,0.0,0.0
-30,peas/beans,high,sow,slope,113.0,0.001069519,0.001069519,0.064171123
-30,peas/beans,high,sow,slope,300.0,0.012,0.012,0.186666667
-30,peas/beans,high,sow,slope,375.0,0.037333333,0.037333333,0.2
-30,peas/beans,high,sow,slope,450.0,0.06875,0.06875,0.1875
-30,peas/beans,high,sow,slope,466.0,0.0,0.0,0.192513369
-30,peas/beans,high,sow,slope,653.0,-0.005952381,-0.011904762,-0.130952381
-30,peas/beans,high,sow,slope,1073.0,0.0,0.0,-0.000252714
-30,peas/beans,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-30,peas/beans,high,harvest1,start,-1.0,0.2,0.0,5.0
-30,peas/beans,high,harvest2,slope,99999.0,0.0,0.0,0.0
-21,spring rape,high,janfirst,slope,99999.0,0.0,0.0,0.0
-21,spring rape,high,sow,start,-1.0,0.0,0.0,0.0
-21,spring rape,high,sow,slope,105.0,0.005333333,0.005333333,0.04
-21,spring rape,high,sow,slope,180.0,0.010666667,0.010666667,0.026666667
-21,spring rape,high,sow,slope,255.0,0.018666667,0.018666667,0.066666667
-21,spring rape,high,sow,slope,330.0,0.034285714,0.034285714,0.171428571
-21,spring rape,high,sow,slope,400.0,0.0,0.0,0.453781513
-21,spring rape,high,sow,slope,638.0,0.0,0.0,0.0
-21,spring rape,high,sow,slope,1121.0,0.0,-0.028901734,0.0
-21,spring rape,high,sow,slope,1294.0,0.0,0.0,-0.001317056
-21,spring rape,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-21,spring rape,high,harvest1,start,-1.0,0.1,0.0,10.0
-21,spring rape,high,harvest2,slope,99999.0,0.0,0.0,0.0
-121,spring rape,low,janfirst,slope,99999.0,0.0,0.0,0.0
-121,spring rape,low,sow,start,-1.0,0.0,0.0,0.0
-121,spring rape,low,sow,slope,105.0,0.002666667,0.002666667,0.04
-121,spring rape,low,sow,slope,180.0,0.005333333,0.005333333,0.026666667
-121,spring rape,low,sow,slope,255.0,0.009333333,0.009333333,0.053333333
-121,spring rape,low,sow,slope,330.0,0.017346939,0.017346939,0.163265306
-121,spring rape,low,sow,slope,428.0,0.0,0.0,0.357142857
-121,spring rape,low,sow,slope,638.0,0.0,0.0,0.0
-121,spring rape,low,sow,slope,900.0,0.0,-0.00887574,0.0
-121,spring rape,low,sow,slope,1238.0,0.0,0.0,-0.001012545
-121,spring rape,low,marchfirst,slope,99999.0,0.0,0.0,0.0
-121,spring rape,low,harvest1,start,-1.0,0.1,0.0,10.0
-121,spring rape,low,harvest2,slope,99999.0,0.0,0.0,0.0
-22,winter rape,high,janfirst,slope,99999.0,0.0,0.0,0.0
-22,winter rape,high,sow,start,-1.0,0.0,0.0,0.0
-22,winter rape,high,sow,slope,105.0,0.004,0.004,0.04
-22,winter rape,high,sow,slope,180.0,0.004,0.004,0.026666667
-22,winter rape,high,sow,slope,255.0,0.0075,0.0075,0.058333333
-22,winter rape,high,sow,slope,375.0,0.002222222,0.002222222,0.013333333
-22,winter rape,high,sow,slope,600.0,0.0,0.0,0.0
-22,winter rape,high,marchfirst,slope,0.0,0.0,0.0,0.0
-22,winter rape,high,marchfirst,slope,92.0,0.013333333,0.013333333,0.106666667
-22,winter rape,high,marchfirst,slope,167.0,0.029850746,0.029850746,0.388059701
-22,winter rape,high,marchfirst,slope,234.0,0.0,0.0,0.435146444
-22,winter rape,high,marchfirst,slope,473.0,0.0,0.0,0.0
-22,winter rape,high,marchfirst,slope,869.0,0.0,-0.009960159,0.0
-22,winter rape,high,marchfirst,slope,1371.0,0.0,0.0,-0.001520866
-22,winter rape,high,harvest1,start,-1.0,0.1,0.0,10.0
-22,winter rape,high,harvest2,slope,99999.0,0.0,0.0,0.0
-122,winter rape,low,janfirst,slope,99999.0,0.0,0.0,0.0
-122,winter rape,low,sow,start,-1.0,0.0,0.0,0.0
-122,winter rape,low,sow,slope,105.0,0.002666667,0.002666667,0.04
-122,winter rape,low,sow,slope,180.0,0.005333333,0.005333333,0.026666667
-122,winter rape,low,sow,slope,255.0,0.011666667,0.011666667,0.041666667
-122,winter rape,low,sow,slope,375.0,0.002222222,0.002222222,0.017777778
-122,winter rape,low,sow,slope,600.0,-2.52e-05,-2.52e-05,-0.000140846
-122,winter rape,low,marchfirst,slope,0.0,0.0,0.0,0.0
-122,winter rape,low,marchfirst,slope,107.0,0.004,0.004,0.106666667
-122,winter rape,low,marchfirst,slope,182.0,0.014634146,0.014634146,0.329268293
-122,winter rape,low,marchfirst,slope,264.0,0.0,0.0,0.334821429
-122,winter rape,low,marchfirst,slope,488.0,0.0,0.0,0.0
-122,winter rape,low,marchfirst,slope,713.0,0.0,-0.005714286,0.0
-122,winter rape,low,marchfirst,slope,1238.0,0.0,0.0,-0.001215055
-122,winter rape,low,harvest1,start,-1.0,0.1,0.0,10.0
-122,winter rape,low,harvest2,slope,99999.0,0.0,0.0,0.0
-41,carrots,high,janfirst,slope,99999.0,0.0,0.0,0.0
-41,carrots,high,sow,start,-1.0,0.0,0.0,0.0
-41,carrots,high,sow,slope,225.0,0.000266667,0.000266667,0.026666667
-41,carrots,high,sow,slope,300.0,0.001066667,0.001066667,0.026666667
-41,carrots,high,sow,slope,375.0,0.002,0.002,0.026666667
-41,carrots,high,sow,slope,450.0,0.003333333,0.003333333,0.026666667
-41,carrots,high,sow,slope,525.0,0.009333333,0.009333333,0.053333333
-41,carrots,high,sow,slope,600.0,0.005333333,0.005333333,0.053333333
-41,carrots,high,sow,slope,750.0,0.01,0.01,0.016666667
-41,carrots,high,sow,slope,1050.0,-5.05e-05,-5.05e-05,-0.000252655
-41,carrots,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-41,carrots,high,harvest1,start,-1.0,0.0,0.0,0.0
-41,carrots,high,harvest2,slope,99999.0,0.0,0.0,0.0
-141,carrots,low,janfirst,slope,99999.0,0.0,0.0,0.0
-141,carrots,low,sow,start,-1.0,0.0,0.0,0.0
-141,carrots,low,sow,slope,225.0,0.000266667,0.000266667,0.026666667
-141,carrots,low,sow,slope,300.0,0.001066667,0.001066667,0.026666667
-141,carrots,low,sow,slope,375.0,0.002,0.002,0.026666667
-141,carrots,low,sow,slope,450.0,0.003333333,0.004666667,0.026666667
-141,carrots,low,sow,slope,525.0,0.008,0.006666667,0.04
-141,carrots,low,sow,slope,600.0,0.004,0.004,0.046666667
-141,carrots,low,sow,slope,750.0,0.004333333,0.004333333,0.013333333
-141,carrots,low,sow,slope,1050.0,-3.03e-05,-3.03e-05,-0.000222337
-141,carrots,low,marchfirst,slope,99999.0,0.0,0.0,0.0
-141,carrots,low,harvest1,start,-1.0,0.0,0.0,0.0
-141,carrots,low,harvest2,slope,99999.0,0.0,0.0,0.0
-5,winter rye,high,janfirst,slope,99999.0,0.0,0.0,0.0
-5,winter rye,high,sow,start,-1.0,0.0,0.0,0.0
-5,winter rye,high,sow,slope,83.0,0.002304147,0.002304147,0.069124424
-5,winter rye,high,sow,slope,300.0,0.0,0.0,0.0
-5,winter rye,high,marchfirst,slope,0.0,0.0,0.0,0.0
-5,winter rye,high,marchfirst,slope,107.0,0.014666667,0.014666667,0.066666667
-5,winter rye,high,marchfirst,slope,182.0,0.050746269,0.050746269,0.298507463
-5,winter rye,high,marchfirst,slope,249.0,0.0,0.0,0.234741784
-5,winter rye,high,marchfirst,slope,675.0,0.0,0.0,0.0
-5,winter rye,high,marchfirst,slope,1082.0,-0.006920415,-0.017301038,0.0
-5,winter rye,high,marchfirst,slope,1371.0,0.0,0.0,-0.001419475
-5,winter rye,high,harvest1,start,-1.0,0.3,0.0,10.0
-5,winter rye,high,harvest2,slope,99999.0,0.0,0.0,0.0
-105,winter rye,low,janfirst,slope,99999.0,0.0,0.0,0.0
-105,winter rye,low,sow,start,-1.0,0.0,0.0,0.0
-105,winter rye,low,sow,slope,83.0,0.002304147,0.002304147,0.069124424
-105,winter rye,low,sow,slope,300.0,-5.02e-06,-5.02e-06,-0.000150453
-105,winter rye,low,marchfirst,slope,0.0,0.0,0.0,0.0
-105,winter rye,low,marchfirst,slope,107.0,0.006666667,0.006666667,0.066666667
-105,winter rye,low,marchfirst,slope,182.0,0.024390244,0.024390244,0.243902439
-105,winter rye,low,marchfirst,slope,264.0,0.0,0.0,0.194647202
-105,winter rye,low,marchfirst,slope,675.0,0.0,0.0,0.0
-105,winter rye,low,marchfirst,slope,750.0,0.0,-0.005,0.0
-105,winter rye,low,marchfirst,slope,1350.0,0.0,0.0,-0.001216434
-105,winter rye,low,harvest1,start,-1.0,0.2,0.0,10.0
-105,winter rye,low,harvest2,slope,99999.0,0.0,0.0,0.0
-7,triticale,high,janfirst,slope,99999.0,0.0,0.0,0.0
-7,triticale,high,sow,start,-1.0,0.0,0.0,0.0
-7,triticale,high,sow,slope,83.0,0.002304147,0.002304147,0.046082949
-7,triticale,high,sow,slope,300.0,0.0,0.0,0.0
-7,triticale,high,marchfirst,slope,0.0,0.0,0.0,0.0
-7,triticale,high,marchfirst,slope,107.0,0.009333333,0.009333333,0.066666667
-7,triticale,high,marchfirst,slope,182.0,0.026666667,0.026666667,0.133333333
-7,triticale,high,marchfirst,slope,257.0,0.048648649,0.048648649,0.27027027
-7,triticale,high,marchfirst,slope,294.0,0.0,0.0,0.196850394
-7,triticale,high,marchfirst,slope,675.0,0.0,0.0,0.073710074
-7,triticale,high,marchfirst,slope,1082.0,0.0,-0.017301038,0.0
-7,triticale,high,marchfirst,slope,1371.0,0.0,0.0,-0.001419475
-7,triticale,high,harvest1,start,-1.0,0.3,0.0,10.0
-7,triticale,high,harvest2,slope,99999.0,0.0,0.0,0.0
-107,triticale,low,janfirst,slope,99999.0,0.0,0.0,0.0
-107,triticale,low,sow,start,-1.0,0.0,0.0,0.0
-107,triticale,low,sow,slope,83.0,0.002304147,0.002304147,0.046082949
-107,triticale,low,sow,slope,300.0,0.0,0.0,0.0
-107,triticale,low,marchfirst,slope,0.0,0.0,0.0,0.0
-107,triticale,low,marchfirst,slope,107.0,0.005333333,0.005333333,0.066666667
-107,triticale,low,marchfirst,slope,182.0,0.009756098,0.009756098,0.097560976
-107,triticale,low,marchfirst,slope,264.0,0.029545455,0.029545455,0.272727273
-107,triticale,low,marchfirst,slope,308.0,0.0,0.0,0.177111717
-107,triticale,low,marchfirst,slope,675.0,0.0,0.0,0.0
-107,triticale,low,marchfirst,slope,750.0,0.0,-0.005,0.0
-107,triticale,low,marchfirst,slope,1350.0,0.0,0.0,-0.001013695
-107,triticale,low,harvest1,start,-1.0,0.2,0.0,10.0
-107,triticale,low,harvest2,slope,99999.0,0.0,0.0,0.0
-2,winter barley,high,janfirst,slope,99999.0,0.0,0.0,0.0
-2,winter barley,high,sow,start,-1.0,0.0,0.0,0.0
-2,winter barley,high,sow,slope,83.0,0.002304147,0.002304147,0.046082949
-2,winter barley,high,sow,slope,300.0,0.0,0.0,0.0
-2,winter barley,high,marchfirst,slope,0.0,0.0,0.0,0.0
-2,winter barley,high,marchfirst,slope,107.0,0.014666667,0.014666667,0.133333333
-2,winter barley,high,marchfirst,slope,182.0,0.050746269,0.050746269,0.298507463
-2,winter barley,high,marchfirst,slope,249.0,0.0,0.0,0.18115942
-2,winter barley,high,marchfirst,slope,525.0,0.0,0.0,0.0
-2,winter barley,high,marchfirst,slope,715.0,0.0,-0.01754386,0.0
-2,winter barley,high,marchfirst,slope,1000.0,0.0,0.0,-0.0009091
-2,winter barley,high,harvest1,start,-1.0,0.3,0.0,10.0
-2,winter barley,high,harvest2,slope,99999.0,0.0,0.0,0.0
-102,winter barley,low,janfirst,slope,99999.0,0.0,0.0,0.0
-102,winter barley,low,sow,start,-1.0,0.0,0.0,0.0
-102,winter barley,low,sow,slope,83.0,0.002304147,0.002304147,0.046082949
-102,winter barley,low,sow,slope,300.0,0.0,0.0,0.0
-102,winter barley,low,marchfirst,slope,0.0,0.0,0.0,0.0
-102,winter barley,low,marchfirst,slope,107.0,0.006666667,0.006666667,0.133333333
-102,winter barley,low,marchfirst,slope,182.0,0.024390244,0.024390244,0.243902439
-102,winter barley,low,marchfirst,slope,264.0,0.0,0.0,0.153256705
-102,winter barley,low,marchfirst,slope,525.0,0.0,0.0,0.0
-102,winter barley,low,marchfirst,slope,638.0,0.0,-0.008902077,0.0
-102,winter barley,low,marchfirst,slope,975.0,0.0,0.0,-0.000807885
-102,winter barley,low,harvest1,start,-1.0,0.2,0.0,10.0
-102,winter barley,low,harvest2,slope,99999.0,0.0,0.0,0.0
-3,spring wheat,high,janfirst,slope,99999.0,0.0,0.0,0.0
-3,spring wheat,high,sow,start,-1.0,0.0,0.0,0.0
-3,spring wheat,high,sow,slope,83.0,0.004,0.004,0.066666667
-3,spring wheat,high,sow,slope,158.0,0.006666667,0.006666667,0.066666667
-3,spring wheat,high,sow,slope,233.0,0.010666667,0.010666667,0.173333333
-3,spring wheat,high,sow,slope,308.0,0.017333333,0.017333333,0.173333333
-3,spring wheat,high,sow,slope,383.0,0.028,0.028,0.173333333
-3,spring wheat,high,sow,slope,458.0,0.0,0.0,0.174657534
-3,spring wheat,high,sow,slope,750.0,0.0,0.0,0.0
-3,spring wheat,high,sow,slope,900.0,0.0,-0.014792899,0.0
-3,spring wheat,high,sow,slope,1238.0,0.0,0.0,-0.001012545
-3,spring wheat,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-3,spring wheat,high,harvest1,start,-1.0,0.3,0.0,10.0
-3,spring wheat,high,harvest2,slope,99999.0,0.0,0.0,0.0
-103,spring wheat,low,janfirst,slope,99999.0,0.0,0.0,0.0
-103,spring wheat,low,sow,start,-1.0,0.0,0.0,0.0
-103,spring wheat,low,sow,slope,83.0,0.002666667,0.002666667,0.066666667
-103,spring wheat,low,sow,slope,158.0,0.004,0.004,0.066666667
-103,spring wheat,low,sow,slope,233.0,0.006666667,0.006666667,0.16
-103,spring wheat,low,sow,slope,308.0,0.009333333,0.009333333,0.16
-103,spring wheat,low,sow,slope,383.0,0.017333333,0.017333333,0.16
-103,spring wheat,low,sow,slope,458.0,0.0,0.0,0.150684932
-103,spring wheat,low,sow,slope,750.0,0.0,0.0,0.0
-103,spring wheat,low,sow,slope,788.0,0.0,-0.007281553,0.0
-103,spring wheat,low,sow,slope,1200.0,0.0,0.0,-0.00091094
-103,spring wheat,low,marchfirst,slope,99999.0,0.0,0.0,0.0
-103,spring wheat,low,harvest1,start,-1.0,0.2,0.0,10.0
-103,spring wheat,low,harvest2,slope,99999.0,0.0,0.0,0.0
-21,spring rape,high,janfirst,slope,99999.0,0.0,0.0,0.0
-21,spring rape,high,sow,start,-1.0,0.0,0.0,0.0
-21,spring rape,high,sow,slope,113.0,0.001785714,0.001785714,0.107142857
-21,spring rape,high,sow,slope,225.0,0.010666667,0.010666667,0.106666667
-21,spring rape,high,sow,slope,300.0,0.02,0.02,0.133333333
-21,spring rape,high,sow,slope,375.0,0.033333333,0.033333333,0.186666667
-21,spring rape,high,sow,slope,450.0,0.0,0.0,0.177339901
-21,spring rape,high,sow,slope,653.0,0.0,0.0,0.0
-21,spring rape,high,sow,slope,1050.0,0.0,-0.014792899,0.0
-21,spring rape,high,sow,slope,1388.0,0.0,0.0,-0.000811269
-21,spring rape,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-21,spring rape,high,harvest1,start,-1.0,0.2,0.0,10.0
-21,spring rape,high,harvest2,slope,99999.0,0.0,0.0,0.0
-60,beet,high,janfirst,slope,99999.0,0.0,0.0,0.0
-60,beet,high,sow,start,-1.0,0.0,0.0,0.0
-60,beet,high,sow,slope,150.0,0.005,0.005,0.033333333
-60,beet,high,sow,slope,210.0,0.005555556,0.005555556,0.088888889
-60,beet,high,sow,slope,300.0,0.010666667,0.010666667,0.066666667
-60,beet,high,sow,slope,375.0,0.017333333,0.017333333,0.066666667
-60,beet,high,sow,slope,450.0,0.028,0.028,0.066666667
-60,beet,high,sow,slope,525.0,0.0,0.0,0.066666667
-60,beet,high,sow,slope,825.0,0.0,-5.04e-05,-0.000453748
-60,beet,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-60,beet,high,harvest1,start,-1.0,0.0,0.0,0.0
-60,beet,high,harvest2,slope,99999.0,0.0,0.0,0.0
-160,beet,low,janfirst,slope,99999.0,0.0,0.0,0.0
-160,beet,low,sow,start,-1.0,0.0,0.0,0.0
-160,beet,low,sow,slope,150.0,0.001666667,0.001666667,0.033333333
-160,beet,low,sow,slope,210.0,0.004444444,0.004444444,0.088888889
-160,beet,low,sow,slope,300.0,0.006666667,0.006666667,0.066666667
-160,beet,low,sow,slope,375.0,0.009333333,0.009333333,0.066666667
-160,beet,low,sow,slope,450.0,0.017333333,0.017333333,0.066666667
-160,beet,low,sow,slope,525.0,0.0,0.0,0.066666667
-160,beet,low,sow,slope,750.0,0.0,-3.02e-05,-0.000403027
-160,beet,low,marchfirst,slope,99999.0,0.0,0.0,0.0
-160,beet,low,harvest1,start,-1.0,0.0,0.0,0.0
-160,beet,low,harvest2,slope,99999.0,0.0,0.0,0.0
-8,maize,high,janfirst,slope,99999.0,0.0,0.0,0.0
-8,maize,high,sow,start,-1.0,0.0,0.0,0.0
-8,maize,high,sow,slope,150.0,0.001587302,0.001587302,0.095238095
-8,maize,high,sow,slope,465.0,0.006666667,0.006666667,0.166666667
-8,maize,high,sow,slope,525.0,0.012,0.012,0.133333333
-8,maize,high,sow,slope,600.0,0.03047619,0.03047619,0.476190476
-8,maize,high,sow,slope,705.0,0.0,0.0,0.512820513
-8,maize,high,sow,slope,900.0,0.0,0.0,0.0
-8,maize,high,sow,slope,1356.0,0.0,-0.008726003,0.0
-8,maize,high,sow,slope,1929.0,0.0,0.0,-0.00203936
-8,maize,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-8,maize,high,harvest1,start,-1.0,0.2,0.0,10.0
-8,maize,high,harvest2,slope,99999.0,0.0,0.0,0.0
-108,maize,low,janfirst,slope,99999.0,0.0,0.0,0.0
-108,maize,low,sow,start,-1.0,0.0,0.0,0.0
-108,maize,low,sow,slope,150.0,0.001269841,0.001269841,0.079365079
-108,maize,low,sow,slope,465.0,0.003333333,0.003333333,0.15
-108,maize,low,sow,slope,525.0,0.006666667,0.006666667,0.12
-108,maize,low,sow,slope,600.0,0.018095238,0.018095238,0.352380952
-108,maize,low,sow,slope,705.0,0.0,0.0,0.41025641
-108,maize,low,sow,slope,900.0,0.0,0.0,0.0
-108,maize,low,sow,slope,1275.0,0.0,-0.005,0.0
-108,maize,low,sow,slope,1875.0,0.0,0.0,-0.00163059
-108,maize,low,marchfirst,slope,99999.0,0.0,0.0,0.0
-108,maize,low,harvest1,start,-1.0,0.2,0.0,10.0
-108,maize,low,harvest2,slope,99999.0,0.0,0.0,0.0
-26,permanent grassland (grazed),high,janfirst,start,-1.0,3.0,1.0,30.0
-26,permanent grassland (grazed),high,janfirst,slope,0.0,-0.005,-0.0025,-0.05
-26,permanent grassland (grazed),high,janfirst,slope,200.0,-2e-05,-5.01e-06,-0.000200403
-26,permanent grassland (grazed),high,sow,slope,99999.0,0.0,0.0,0.0
-26,permanent grassland (grazed),high,marchfirst,slope,0.0,0.0,0.0,-0.044247788
-26,permanent grassland (grazed),high,marchfirst,slope,113.0,0.008928571,0.008928571,0.026785714
-26,permanent grassland (grazed),high,marchfirst,slope,225.0,0.013333333,0.02,0.026666667
-26,permanent grassland (grazed),high,marchfirst,slope,300.0,0.012,0.025333333,0.066666667
-26,permanent grassland (grazed),high,marchfirst,slope,375.0,8.89e-05,8.89e-05,0.04
-26,permanent grassland (grazed),high,marchfirst,slope,1500.0,-5.08e-05,-5.08e-05,-0.000710667
-26,permanent grassland (grazed),high,harvest1,slope,99999.0,0.0,0.0,0.0
-26,permanent grassland (grazed),high,harvest2,slope,99999.0,0.0,0.0,0.0
-27,permanent grassland (seeded),high,janfirst,start,-1.0,1.5,1.0,10.0
-27,permanent grassland (seeded),high,sow,slope,99999.0,0.0,0.0,0.0
-27,permanent grassland (seeded),high,marchfirst,slope,0.0,0.0,0.0,0.0
-27,permanent grassland (seeded),high,marchfirst,slope,107.0,0.0,0.004651163,0.0
-27,permanent grassland (seeded),high,marchfirst,slope,150.0,0.006666667,0.010666667,0.12
-27,permanent grassland (seeded),high,marchfirst,slope,225.0,0.022666667,0.022666667,0.12
-27,permanent grassland (seeded),high,marchfirst,slope,300.0,0.040625,0.040625,0.28125
-27,permanent grassland (seeded),high,marchfirst,slope,332.0,0.0,0.0,0.098939929
-27,permanent grassland (seeded),high,marchfirst,slope,615.0,0.0,0.0,0.0
-27,permanent grassland (seeded),high,marchfirst,slope,825.0,0.0,0.0,0.0
-27,permanent grassland (seeded),high,marchfirst,slope,1050.0,0.0,-0.016666667,0.0
-27,permanent grassland (seeded),high,marchfirst,slope,1350.0,-5.07e-05,0.0,-0.000658902
-27,permanent grassland (seeded),high,harvest1,start,-1.0,0.5,0.0,10.0
-27,permanent grassland (seeded),high,harvest2,slope,99999.0,0.0,0.0,0.0
-28,NA,high,janfirst,start,-1.0,1.5,1.0,10.0
-28,NA,high,sow,slope,99999.0,0.0,0.0,0.0
-28,NA,high,marchfirst,slope,0.0,0.0,0.0,0.0
-28,NA,high,marchfirst,slope,107.0,0.0,0.004651163,0.0
-28,NA,high,marchfirst,slope,150.0,0.006666667,0.010666667,0.08
-28,NA,high,marchfirst,slope,225.0,0.020408163,0.020408163,0.081632653
-28,NA,high,marchfirst,slope,274.0,-3.01e-05,-3.01e-05,-0.000200552
-28,NA,high,harvest1,slope,99999.0,0.0,0.0,0.0
-28,NA,high,harvest2,slope,99999.0,0.0,0.0,0.0
-29,fodder/clover,high,janfirst,start,-1.0,1.5,1.0,10.0
-29,fodder/clover,high,sow,slope,99999.0,0.0,0.0,0.0
-29,fodder/clover,high,marchfirst,slope,0.0,0.0,0.0,0.0
-29,fodder/clover,high,marchfirst,slope,107.0,-0.006976744,0.004651163,0.0
-29,fodder/clover,high,marchfirst,slope,150.0,0.010666667,0.010666667,0.12
-29,fodder/clover,high,marchfirst,slope,225.0,0.022666667,0.022666667,0.12
-29,fodder/clover,high,marchfirst,slope,300.0,0.040625,0.040625,0.28125
-29,fodder/clover,high,marchfirst,slope,332.0,0.0,0.0,0.083333333
-29,fodder/clover,high,marchfirst,slope,488.0,-5.02e-05,-5.02e-05,-0.000502457
-29,fodder/clover,high,harvest1,start,-1.0,0.5,0.5,10.0
-29,fodder/clover,high,harvest1,slope,0.0,0.016666667,0.016666667,0.333333333
-29,fodder/clover,high,harvest1,slope,30.0,0.006666667,0.006666667,0.0
-29,fodder/clover,high,harvest1,slope,75.0,0.012,0.012,0.0
-29,fodder/clover,high,harvest1,slope,150.0,0.026666667,0.026666667,0.12
-29,fodder/clover,high,harvest1,slope,225.0,0.043333333,0.043333333,0.1
-29,fodder/clover,high,harvest1,slope,255.0,0.0,0.0,0.120171674
-29,fodder/clover,high,harvest1,slope,488.0,-5.02e-05,-5.02e-05,-0.000502457
-29,fodder/clover,high,harvest2,slope,99999.0,0.0,0.0,0.0
-65,silage clover/grass,high,janfirst,slope,0.0,-1.5e-05,-1e-05,-0.000100001
-65,silage clover/grass,high,sow,slope,99999.0,0.0,0.0,0.0
-65,silage clover/grass,high,marchfirst,slope,0.0,0.0,0.0,0.0
-65,silage clover/grass,high,marchfirst,slope,107.0,0.0,0.004651163,0.0
-65,silage clover/grass,high,marchfirst,slope,150.0,0.006666667,0.010666667,0.12
-65,silage clover/grass,high,marchfirst,slope,225.0,0.022666667,0.022666667,0.12
-65,silage clover/grass,high,marchfirst,slope,300.0,0.040625,0.040625,0.28125
-65,silage clover/grass,high,marchfirst,slope,332.0,0.0,0.0,0.083333333
-65,silage clover/grass,high,marchfirst,slope,488.0,-5.02e-05,-5.02e-05,-0.000502457
-65,silage clover/grass,high,harvest1,start,-1.0,0.5,0.5,10.0
-65,silage clover/grass,high,harvest1,slope,0.0,0.016666667,0.016666667,0.333333333
-65,silage clover/grass,high,harvest1,slope,30.0,0.006666667,0.006666667,0.0
-65,silage clover/grass,high,harvest1,slope,75.0,0.012,0.012,0.0
-65,silage clover/grass,high,harvest1,slope,150.0,0.026666667,0.026666667,0.12
-65,silage clover/grass,high,harvest1,slope,225.0,0.043333333,0.043333333,0.1
-65,silage clover/grass,high,harvest1,slope,255.0,0.0,0.0,0.120171674
-65,silage clover/grass,high,harvest1,slope,488.0,-5.02e-05,-5.02e-05,-0.000502457
-65,silage clover/grass,high,harvest2,slope,99999.0,0.0,0.0,0.0
-165,silage clover/grass,low,janfirst,slope,0.0,-1.5e-05,-1e-05,-0.000100001
-165,silage clover/grass,low,sow,slope,99999.0,0.0,0.0,0.0
-165,silage clover/grass,low,marchfirst,slope,0.0,0.0,0.0,0.0
-165,silage clover/grass,low,marchfirst,slope,107.0,0.0,0.004651163,0.0
-165,silage clover/grass,low,marchfirst,slope,150.0,0.001333333,0.005333333,0.08
-165,silage clover/grass,low,marchfirst,slope,225.0,0.010666667,0.010666667,0.08
-165,silage clover/grass,low,marchfirst,slope,300.0,0.021333333,0.021333333,0.08
-165,silage clover/grass,low,marchfirst,slope,375.0,0.0,0.0,0.08
-165,silage clover/grass,low,marchfirst,slope,525.0,-4.02e-05,-4.02e-05,-0.000402115
-165,silage clover/grass,low,harvest1,start,-1.0,0.5,0.5,10.0
-165,silage clover/grass,low,harvest1,slope,0.0,0.016666667,0.016666667,0.333333333
-165,silage clover/grass,low,harvest1,slope,30.0,0.004444444,0.004444444,0.0
-165,silage clover/grass,low,harvest1,slope,75.0,0.006666667,0.006666667,0.0
-165,silage clover/grass,low,harvest1,slope,150.0,0.012,0.012,0.08
-165,silage clover/grass,low,harvest1,slope,225.0,0.025333333,0.025333333,0.08
-165,silage clover/grass,low,harvest1,slope,300.0,0.0,0.0,0.08
-165,silage clover/grass,low,harvest1,slope,525.0,-4.02e-05,-4.02e-05,-0.000402115
-165,silage clover/grass,low,harvest2,start,-1.0,0.0,0.0,0.0
-90,natural grass,high,janfirst,start,-1.0,4.83,0.0,70.25454545
-90,natural grass,high,janfirst,slope,105.0,-9.81e-06,0.0,-0.000142697
-90,natural grass,high,sow,slope,99999.0,0.0,0.0,0.0
-90,natural grass,high,marchfirst,slope,0.0,0.002249135,0.003460208,0.03271469
-90,natural grass,high,marchfirst,slope,289.0,0.001231527,0.0,0.017913121
-90,natural grass,high,marchfirst,slope,695.0,0.001552795,-0.00310559,0.02258611
-90,natural grass,high,marchfirst,slope,1017.0,0.0,0.0,0.0
-90,natural grass,high,marchfirst,slope,2619.0,-0.003988095,0.0,-0.058008658
-90,natural grass,high,marchfirst,slope,2787.0,0.0,0.0,0.0
-90,natural grass,high,harvest1,start,-1.0,1.0,0.0,10.0
-90,natural grass,high,harvest1,slope,0.0,0.012110727,0.003460208,0.19188424
-90,natural grass,high,harvest1,slope,289.0,0.001231527,0.0,0.017913121
-90,natural grass,high,harvest1,slope,695.0,0.001552795,-0.00310559,0.02258611
-90,natural grass,high,harvest1,slope,1017.0,0.0,0.0,0.0
-90,natural grass,high,harvest1,slope,2619.0,-0.003988095,0.0,-0.058008658
-90,natural grass,high,harvest1,slope,2787.0,0.0,0.0,0.0
-90,natural grass,high,harvest2,slope,99999.0,0.0,0.0,0.0
-91,no growth,high,janfirst,slope,99999.0,0.0,0.0,0.0
-91,no growth,high,sow,slope,99999.0,0.0,0.0,0.0
-91,no growth,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-91,no growth,high,harvest1,slope,99999.0,0.0,0.0,0.0
-91,no growth,high,harvest2,slope,99999.0,0.0,0.0,0.0
-92,permanent set-aside,high,janfirst,start,-1.0,2.55024,0.8,30.0
-92,permanent set-aside,high,janfirst,slope,105.0,-5.18e-06,0.0,5.01e-05
-92,permanent set-aside,high,sow,slope,99999.0,0.0,0.0,0.0
-92,permanent set-aside,high,marchfirst,slope,0.0,0.002101038,0.000941176,0.017301038
-92,permanent set-aside,high,marchfirst,slope,289.0,0.000650246,0.001970443,0.017241379
-92,permanent set-aside,high,marchfirst,slope,695.0,0.0,0.0,0.02484472
-92,permanent set-aside,high,marchfirst,slope,1017.0,-0.000220824,0.0,-0.006242197
-92,permanent set-aside,high,marchfirst,slope,2619.0,0.0,-0.003571429,-0.05952381
-92,permanent set-aside,high,marchfirst,slope,2787.0,-2.62e-05,-1.03e-05,-0.000308604
-92,permanent set-aside,high,harvest1,start,-1.0,0.6,0.4,15.0
-92,permanent set-aside,high,harvest1,slope,0.0,0.006145329,0.001384083,0.069204152
-92,permanent set-aside,high,harvest1,slope,289.0,0.000650246,0.001970443,0.007389163
-92,permanent set-aside,high,harvest1,slope,695.0,0.000819876,0.0,0.01242236
-92,permanent set-aside,high,harvest1,slope,1017.0,0.0,0.0,0.0
-92,permanent set-aside,high,harvest1,slope,2619.0,-0.002105714,-0.003571429,-0.029761905
-92,permanent set-aside,high,harvest1,slope,2787.0,0.0,-1.03e-05,0.0
-92,permanent set-aside,high,harvest2,slope,99999.0,0.0,0.0,0.0
-6,oats,high,janfirst,slope,99999.0,0.0,0.0,0.0
-6,oats,high,sow,slope,0.0,0.0,0.0,0.0
-6,oats,high,sow,slope,83.0,0.005466667,0.005466667,0.066666667
-6,oats,high,sow,slope,158.0,0.01,0.009866667,0.093333333
-6,oats,high,sow,slope,233.0,0.018266667,0.0184,0.306666667
-6,oats,high,sow,slope,308.0,0.033378378,0.033378378,0.540540541
-6,oats,high,sow,slope,382.0,0.0,0.0,0.359116022
-6,oats,high,sow,slope,563.0,0.0,0.0,0.0
-6,oats,high,sow,slope,660.0,0.0,0.0,0.0
-6,oats,high,sow,slope,675.0,0.0,0.0,0.0
-6,oats,high,sow,slope,938.0,-0.011450382,-0.019083969,0.0
-6,oats,high,sow,slope,1200.0,0.0,0.0,0.0
-6,oats,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-6,oats,high,harvest1,start,-1.0,0.3,0.0,10.0
-6,oats,high,harvest2,slope,99999.0,0.0,0.0,0.0
-106,oats,low,janfirst,slope,99999.0,0.0,0.0,0.0
-106,oats,low,sow,slope,0.0,0.0,0.0,0.0
-106,oats,low,sow,slope,83.0,0.003333333,0.003333333,0.066666667
-106,oats,low,sow,slope,158.0,0.006,0.006,0.093333333
-106,oats,low,sow,slope,233.0,0.010933333,0.010933333,0.306666667
-106,oats,low,sow,slope,308.0,0.009932886,0.009932886,0.268456376
-106,oats,low,sow,slope,457.0,0.0,0.0,0.662650602
-106,oats,low,sow,slope,540.0,0.0,0.0,0.0
-106,oats,low,sow,slope,623.0,0.0,0.0,0.0
-106,oats,low,sow,slope,675.0,-0.00307377,-0.006147541,0.0
-106,oats,low,sow,slope,1163.0,0.0,0.0,0.0
-106,oats,low,marchfirst,slope,99999.0,0.0,0.0,0.0
-106,oats,low,harvest1,start,-1.0,0.3,0.0,10.0
-106,oats,low,harvest2,slope,99999.0,0.0,0.0,0.0
-50,potatoes,high,janfirst,slope,99999.0,0.0,0.0,0.0
-50,potatoes,high,sow,slope,0.0,0.0,0.0,0.0
-50,potatoes,high,sow,slope,225.0,0.006666667,0.006666667,0.133333333
-50,potatoes,high,sow,slope,300.0,0.002666667,0.002666667,0.133333333
-50,potatoes,high,sow,slope,375.0,0.004,0.004,0.133333333
-50,potatoes,high,sow,slope,450.0,0.005333333,0.005333333,0.133333333
-50,potatoes,high,sow,slope,525.0,0.009333333,0.009333333,0.133333333
-50,potatoes,high,sow,slope,600.0,0.012,0.012,0.0
-50,potatoes,high,sow,slope,675.0,0.0,0.0,0.0
-50,potatoes,high,sow,slope,938.0,-0.016666667,-0.02,-0.266666667
-50,potatoes,high,sow,slope,1088.0,0.0,0.0,0.0
-50,potatoes,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-50,potatoes,high,harvest1,start,-1.0,0.0,0.0,0.0
-50,potatoes,high,harvest2,slope,99999.0,0.0,0.0,0.0
-150,potatoes,low,janfirst,slope,99999.0,0.0,0.0,0.0
-150,potatoes,low,sow,slope,0.0,0.0,0.0,0.0
-150,potatoes,low,sow,slope,225.0,0.008,0.008,0.133333333
-150,potatoes,low,sow,slope,300.0,0.005333333,0.005333333,0.133333333
-150,potatoes,low,sow,slope,375.0,0.006666667,0.006666667,0.133333333
-150,potatoes,low,sow,slope,450.0,0.009333333,0.009333333,0.133333333
-150,potatoes,low,sow,slope,525.0,0.014666667,0.014666667,0.133333333
-150,potatoes,low,sow,slope,600.0,0.022666667,0.022666667,0.133333333
-150,potatoes,low,sow,slope,675.0,0.0,0.0,0.0
-150,potatoes,low,sow,slope,1200.0,-0.017777778,-0.022222222,-0.222222222
-150,potatoes,low,sow,slope,1425.0,0.0,0.0,0.0
-150,potatoes,low,marchfirst,slope,99999.0,0.0,0.0,0.0
-150,potatoes,low,harvest1,start,-1.0,0.0,0.0,0.0
-150,potatoes,low,harvest2,slope,99999.0,0.0,0.0,0.0
-99,NA,high,janfirst,start,-1.0,1.0,1.0,10.0
-99,NA,high,sow,slope,99999.0,0.0,0.0,0.0
-99,NA,high,marchfirst,start,-1.0,1.1,1.0,10.0
-99,NA,high,marchfirst,slope,64.0,0.038461538,0.038461538,0.0
-99,NA,high,marchfirst,slope,90.0,0.022222222,0.022222222,0.0
-99,NA,high,marchfirst,slope,135.0,0.022222222,0.022222222,0.0
-99,NA,high,marchfirst,slope,180.0,0.0,0.0,0.0
-99,NA,high,marchfirst,slope,199.0,0.0,0.0,0.0
-99,NA,high,marchfirst,slope,308.0,0.0,0.0,0.0
-99,NA,high,marchfirst,slope,413.0,-0.007633588,-0.007633588,0.0
-99,NA,high,marchfirst,slope,675.0,-0.004444444,-0.004444444,0.0
-99,NA,high,marchfirst,slope,900.0,-9.08e-06,-9.08e-06,0.0
-99,NA,high,harvest1,start,-1.0,1.2,0.2,10.0
-99,NA,high,harvest1,slope,0.0,0.019642857,0.0,0.0
-99,NA,high,harvest1,slope,140.0,0.020833333,0.0,0.0
-99,NA,high,harvest1,slope,188.0,0.0,0.0,0.0
-99,NA,high,harvest1,slope,207.0,0.0,0.0,0.0
-99,NA,high,harvest1,slope,769.0,-0.013333333,0.0,0.0
-99,NA,high,harvest1,slope,844.0,-1.01e-05,0.0,0.0
-99,NA,high,harvest2,slope,99999.0,0.0,0.0,0.0
-112,heath,low,janfirst,start,-1.0,3.1878,1.0,46.368
-112,heath,low,janfirst,slope,105.0,-6.47e-06,0.0,-9.42e-05
-112,heath,low,sow,slope,99999.0,0.0,0.0,0.0
-112,heath,low,marchfirst,start,-1.0,2.541,0.66,36.96
-112,heath,low,marchfirst,slope,0.0,0.007958478,0.001176471,0.016608997
-112,heath,low,marchfirst,slope,289.0,0.000812808,0.002463054,0.01182266
-112,heath,low,marchfirst,slope,695.0,0.0,0.0,0.0
-112,heath,low,marchfirst,slope,1017.0,-0.00027603,0.0,-0.004014981
-112,heath,low,marchfirst,slope,2619.0,0.0,0.0,0.0
-112,heath,low,marchfirst,slope,2787.0,-3.28e-05,-2.06e-05,-0.000476978
-112,heath,low,harvest1,start,-1.0,0.66,0.5,10.0
-112,heath,low,harvest1,slope,0.0,0.00799308,0.001730104,0.114878893
-112,heath,low,harvest1,slope,289.0,0.000812808,0.002463054,0.01182266
-112,heath,low,harvest1,slope,695.0,0.001024845,0.0,0.014906832
-112,heath,low,harvest1,slope,1017.0,0.0,0.0,0.0
-112,heath,low,harvest1,slope,2619.0,-0.002632143,0.0,-0.038285714
-112,heath,low,harvest1,slope,2787.0,0.0,-2.06e-05,0.0
-112,heath,low,harvest2,slope,99999.0,0.0,0.0,0.0
-94,lawn,high,janfirst,start,-1.0,2.415,0.0,35.12727273
-94,lawn,high,janfirst,slope,105.0,-4.91e-06,0.0,-7.13e-05
-94,lawn,high,janfirst,slope,0.0,-2.5e-06,0.0,0.5
-94,lawn,high,sow,slope,99999.0,0.0,0.0,0.0
-94,lawn,high,marchfirst,start,-1.0,1.925,0.0,28.0
-94,lawn,high,marchfirst,slope,0.0,0.000865052,0.0,0.012582573
-94,lawn,high,marchfirst,slope,289.0,0.000615764,-0.001231527,0.008956561
-94,lawn,high,marchfirst,slope,695.0,0.0,0.0,0.0
-94,lawn,high,marchfirst,slope,1017.0,-0.000209114,0.0,-0.003041652
-94,lawn,high,marchfirst,slope,2619.0,0.0,0.0,0.0
-94,lawn,high,marchfirst,slope,2787.0,-2.48e-05,0.0,0.513973303
-94,lawn,high,harvest1,start,-1.0,0.5,0.0,5.0
-94,lawn,high,harvest1,slope,0.0,0.006055363,0.001730104,0.09594212
-94,lawn,high,harvest1,slope,289.0,0.000615764,0.0,0.008956561
-94,lawn,high,harvest1,slope,695.0,0.000776398,-0.001552795,0.011293055
-94,lawn,high,harvest1,slope,1017.0,0.0,0.0,0.0
-94,lawn,high,harvest1,slope,2619.0,-0.001994048,0.0,-0.029004329
-94,lawn,high,harvest1,slope,2787.0,0.0,0.0,0.0
-94,lawn,high,harvest1,slope,0.0,-2.5e-06,0.0,0.5
-94,lawn,high,harvest2,slope,99999.0,0.0,0.0,0.0
-25,permanent grassland (low yield),high,janfirst,start,-1.0,3.0,1.0,20.0
-25,permanent grassland (low yield),high,janfirst,slope,0.0,-0.005,-0.0025,-0.025
-25,permanent grassland (low yield),high,janfirst,slope,200.0,-2e-05,-5.01e-06,-0.000150302
-25,permanent grassland (low yield),high,sow,slope,99999.0,0.0,0.0,0.0
-25,permanent grassland (low yield),high,marchfirst,slope,0.0,0.0,0.0,-0.026548673
-25,permanent grassland (low yield),high,marchfirst,slope,113.0,0.008928571,0.008928571,0.053571429
-25,permanent grassland (low yield),high,marchfirst,slope,225.0,0.013333333,0.02,0.026666667
-25,permanent grassland (low yield),high,marchfirst,slope,300.0,0.012,0.025333333,0.066666667
-25,permanent grassland (low yield),high,marchfirst,slope,375.0,8.89e-05,8.89e-05,0.031111111
-25,permanent grassland (low yield),high,marchfirst,slope,1500.0,-5.08e-05,-5.08e-05,-0.000609143
-25,permanent grassland (low yield),high,harvest1,slope,99999.0,0.0,0.0,0.0
-25,permanent grassland (low yield),high,harvest2,slope,99999.0,0.0,0.0,0.0
-70,lucerne,high,janfirst,slope,99999.0,0.0,0.0,0.0
-70,lucerne,high,sow,start,-1.0,0.0,0.0,0.0
-70,lucerne,high,sow,slope,107.0,-0.006976744,0.004651163,0.0
-70,lucerne,high,sow,slope,150.0,0.010666667,0.010666667,0.12
-70,lucerne,high,sow,slope,225.0,0.022666667,0.022666667,0.12
-70,lucerne,high,sow,slope,300.0,0.040625,0.040625,0.28125
-70,lucerne,high,sow,slope,332.0,0.0,0.0,0.083333333
-70,lucerne,high,sow,slope,488.0,-5.02457e-05,-5.02457e-05,-0.000502457
-70,lucerne,high,marchfirst,slope,99999.0,0.0,0.0,0.0
-70,lucerne,high,harvest1,start,-1.0,0.5,0.5,10.0
-70,lucerne,high,harvest1,slope,0.0,0.016666667,0.016666667,0.333333333
-70,lucerne,high,harvest1,slope,30.0,0.006666667,0.006666667,0.0
-70,lucerne,high,harvest1,slope,75.0,0.012,0.012,0.0
-70,lucerne,high,harvest1,slope,150.0,0.026666667,0.026666667,0.12
-70,lucerne,high,harvest1,slope,225.0,0.043333333,0.043333333,0.1
-70,lucerne,high,harvest1,slope,255.0,0.0,0.0,0.120171674
-70,lucerne,high,harvest1,slope,488.0,-5.02457e-05,-5.02457e-05,-0.000502457
-70,lucerne,high,harvest2,slope,99999.0,0.0,0.0,0.0
+1,spring barley,high,janfirst,slope,99999,0,0,0
+1,spring barley,high,sow,start,-1,0,0,0
+1,spring barley,high,sow,slope,83,0.005466667,0.005466667,0.066666667
+1,spring barley,high,sow,slope,158,0.01,0.009866667,0.066666667
+1,spring barley,high,sow,slope,233,0.018266667,0.0184,0.106666667
+1,spring barley,high,sow,slope,308,0.033378378,0.033378378,0.081081081
+1,spring barley,high,sow,slope,382,0,0,0.060773481
+1,spring barley,high,sow,slope,563,0,0,0.154639175
+1,spring barley,high,sow,slope,660,0,0,0.066666667
+1,spring barley,high,sow,slope,675,0,0,0.138095238
+1,spring barley,high,sow,slope,885,0,-0.016233766,-0.029220779
+1,spring barley,high,sow,slope,1193,0,0,-0.035830619
+1,spring barley,high,sow,slope,1500,0,0,-0.000609143
+1,spring barley,high,marchfirst,slope,99999,0,0,0
+1,spring barley,high,harvest1,start,-1,0.3,0,10
+1,spring barley,high,harvest2,slope,99999,0,0,0
+101,spring barley,low,janfirst,slope,99999,0,0,0
+101,spring barley,low,sow,start,-1,0,0,0
+101,spring barley,low,sow,slope,83,0.003333333,0.003333333,0.066666667
+101,spring barley,low,sow,slope,158,0.006,0.006,0.066666667
+101,spring barley,low,sow,slope,233,0.010933333,0.010933333,0.194666667
+101,spring barley,low,sow,slope,308,0.009932886,0.009932886,0.195973154
+101,spring barley,low,sow,slope,457,0,0,0.195180723
+101,spring barley,low,sow,slope,540,0,0,0
+101,spring barley,low,sow,slope,623,0,0,-1.333333333
+101,spring barley,low,sow,slope,638,0,-0.006160164,0
+101,spring barley,low,sow,slope,1125,0,0,-0.000505694
+101,spring barley,low,marchfirst,slope,99999,0,0,0
+101,spring barley,low,harvest1,start,-1,0.2,0,10
+101,spring barley,low,harvest2,slope,99999,0,0,0
+4,winter wheat,high,janfirst,slope,99999,0,0,0
+4,winter wheat,high,sow,start,-1,0,0,0
+4,winter wheat,high,sow,slope,83,0.002304147,0.002304147,0.055299539
+4,winter wheat,high,sow,slope,300,0,0,0
+4,winter wheat,high,marchfirst,slope,0,0,0,0
+4,winter wheat,high,marchfirst,slope,107,0.006666667,0.006666667,0
+4,winter wheat,high,marchfirst,slope,182,0.016,0.016,0.172
+4,winter wheat,high,marchfirst,slope,257,0.036363636,0.036363636,0.172727273
+4,winter wheat,high,marchfirst,slope,334,0,0,0.17593985
+4,winter wheat,high,marchfirst,slope,600,0,0,0
+4,winter wheat,high,marchfirst,slope,1087,0,-0.016722408,0
+4,winter wheat,high,marchfirst,slope,1386,0,0,-0.000861955
+4,winter wheat,high,harvest1,start,-1,0.3,0,10
+4,winter wheat,high,harvest2,slope,99999,0,0,0
+104,winter wheat,low,janfirst,slope,99999,0,0,0
+104,winter wheat,low,sow,start,-1,0,0,0
+104,winter wheat,low,sow,slope,83,0.003225806,0.003225806,0.055299539
+104,winter wheat,low,sow,slope,300,0,0,0
+104,winter wheat,low,marchfirst,slope,0,0,0,0
+104,winter wheat,low,marchfirst,slope,107,0.002666667,0.002666667,0
+104,winter wheat,low,marchfirst,slope,182,0.010666667,0.010666667,0.149333333
+104,winter wheat,low,marchfirst,slope,257,0.012295082,0.012295082,0.151639344
+104,winter wheat,low,marchfirst,slope,379,0,0,0.150678733
+104,winter wheat,low,marchfirst,slope,600,0,0,0
+104,winter wheat,low,marchfirst,slope,750,0,-0.005,0
+104,winter wheat,low,marchfirst,slope,1350,0,0,-0.000658902
+104,winter wheat,low,harvest1,start,-1,0.42,0,10
+104,winter wheat,low,harvest2,slope,99999,0,0,0
+13,undersown spring barley,high,janfirst,slope,99999,0,0,0
+13,undersown spring barley,high,sow,start,-1,0,0,0
+13,undersown spring barley,high,sow,slope,83,0.005466667,0.005466667,0.066666667
+13,undersown spring barley,high,sow,slope,158,0.01,0.009866667,0.066666667
+13,undersown spring barley,high,sow,slope,233,0.018266667,0.0184,0.212
+13,undersown spring barley,high,sow,slope,308,0.033378378,0.033378378,0.213513514
+13,undersown spring barley,high,sow,slope,382,0,0,0.21160221
+13,undersown spring barley,high,sow,slope,563,0,0,0
+13,undersown spring barley,high,sow,slope,660,0,0,-1.333333333
+13,undersown spring barley,high,sow,slope,675,0,0,0
+13,undersown spring barley,high,sow,slope,885,0,-0.016233766,0
+13,undersown spring barley,high,sow,slope,1193,0,0,-0.000607251
+13,undersown spring barley,high,marchfirst,slope,99999,0,0,0
+13,undersown spring barley,high,harvest1,start,-1,0.275,0.165,5
+13,undersown spring barley,high,harvest1,slope,0,0.005625,0.003375,0.1
+13,undersown spring barley,high,harvest1,slope,40,0.002857143,0.005714286,0
+13,undersown spring barley,high,harvest1,slope,75,0.012,0.012,0.013333333
+13,undersown spring barley,high,harvest1,slope,150,0.022666667,0.024,0.08
+13,undersown spring barley,high,harvest1,slope,225,0.040909091,0.040909091,0.068181818
+13,undersown spring barley,high,harvest1,slope,269,0,0,0.08203125
+13,undersown spring barley,high,harvest1,slope,525,-0.0000503,-0.0000503,-0.000402115
+13,undersown spring barley,high,harvest2,start,-1,0.5,0.5,10
+13,undersown spring barley,high,harvest2,slope,0,0.008,0.008,0.133333333
+13,undersown spring barley,high,harvest2,slope,75,0.018666667,0.018666667,0.08
+13,undersown spring barley,high,harvest2,slope,150,0.04,0.04,0.04
+13,undersown spring barley,high,harvest2,slope,225,0,0,0.07
+13,undersown spring barley,high,harvest2,slope,525,-0.0000503,-0.0000503,-0.000402115
+113,undersown spring barley,low,janfirst,slope,99999,0,0,0
+113,undersown spring barley,low,sow,start,-1,0,0,0
+113,undersown spring barley,low,sow,slope,83,0.003333333,0.003333333,0.066666667
+113,undersown spring barley,low,sow,slope,158,0.006,0.006,0.066666667
+113,undersown spring barley,low,sow,slope,233,0.010933333,0.010933333,0.194666667
+113,undersown spring barley,low,sow,slope,308,0.009932886,0.009932886,0.195973154
+113,undersown spring barley,low,sow,slope,457,0,0,0.195180723
+113,undersown spring barley,low,sow,slope,540,0,0,0
+113,undersown spring barley,low,sow,slope,623,0,0,-1.333333333
+113,undersown spring barley,low,sow,slope,638,0,-0.006160164,0
+113,undersown spring barley,low,sow,slope,1125,0,0,-0.000505694
+113,undersown spring barley,low,marchfirst,slope,99999,0,0,0
+113,undersown spring barley,low,harvest1,start,-1,0.7,0.5,9
+113,undersown spring barley,low,harvest1,slope,0,0,0.001333333,0
+113,undersown spring barley,low,harvest1,slope,75,0.017333333,0.018666667,0.013333333
+113,undersown spring barley,low,harvest1,slope,150,0.04,0.04,0.08
+113,undersown spring barley,low,harvest1,slope,225,0,0,0.08
+113,undersown spring barley,low,harvest1,slope,525,0,-0.0000503,-0.000402115
+113,undersown spring barley,low,harvest2,start,-1,0.5,0.5,10
+113,undersown spring barley,low,harvest2,slope,0,0.008,0.008,0.133333333
+113,undersown spring barley,low,harvest2,slope,75,0.018666667,0.018666667,0
+113,undersown spring barley,low,harvest2,slope,150,0.04,0.04,0.08
+113,undersown spring barley,low,harvest2,slope,225,0,0,0.08
+113,undersown spring barley,low,harvest2,slope,525,-0.0000503,-0.0000503,-0.000402115
+30,peas/beans,high,janfirst,slope,99999,0,0,0
+30,peas/beans,high,sow,start,-1,0,0,0
+30,peas/beans,high,sow,slope,113,0.001069519,0.001069519,0.064171123
+30,peas/beans,high,sow,slope,300,0.012,0.012,0.186666667
+30,peas/beans,high,sow,slope,375,0.037333333,0.037333333,0.2
+30,peas/beans,high,sow,slope,450,0.06875,0.06875,0.1875
+30,peas/beans,high,sow,slope,466,0,0,0.192513369
+30,peas/beans,high,sow,slope,653,-0.005952381,-0.011904762,-0.130952381
+30,peas/beans,high,sow,slope,1073,0,0,-0.000252714
+30,peas/beans,high,marchfirst,slope,99999,0,0,0
+30,peas/beans,high,harvest1,start,-1,0.2,0,5
+30,peas/beans,high,harvest2,slope,99999,0,0,0
+21,spring rape,high,janfirst,slope,99999,0,0,0
+21,spring rape,high,sow,start,-1,0,0,0
+21,spring rape,high,sow,slope,105,0.005333333,0.005333333,0.04
+21,spring rape,high,sow,slope,180,0.010666667,0.010666667,0.026666667
+21,spring rape,high,sow,slope,255,0.018666667,0.018666667,0.066666667
+21,spring rape,high,sow,slope,330,0.034285714,0.034285714,0.171428571
+21,spring rape,high,sow,slope,400,0,0,0.453781513
+21,spring rape,high,sow,slope,638,0,0,0
+21,spring rape,high,sow,slope,1121,0,-0.028901734,0
+21,spring rape,high,sow,slope,1294,0,0,-0.001317056
+21,spring rape,high,marchfirst,slope,99999,0,0,0
+21,spring rape,high,harvest1,start,-1,0.1,0,10
+21,spring rape,high,harvest2,slope,99999,0,0,0
+121,spring rape,low,janfirst,slope,99999,0,0,0
+121,spring rape,low,sow,start,-1,0,0,0
+121,spring rape,low,sow,slope,105,0.002666667,0.002666667,0.04
+121,spring rape,low,sow,slope,180,0.005333333,0.005333333,0.026666667
+121,spring rape,low,sow,slope,255,0.009333333,0.009333333,0.053333333
+121,spring rape,low,sow,slope,330,0.017346939,0.017346939,0.163265306
+121,spring rape,low,sow,slope,428,0,0,0.357142857
+121,spring rape,low,sow,slope,638,0,0,0
+121,spring rape,low,sow,slope,900,0,-0.00887574,0
+121,spring rape,low,sow,slope,1238,0,0,-0.001012545
+121,spring rape,low,marchfirst,slope,99999,0,0,0
+121,spring rape,low,harvest1,start,-1,0.1,0,10
+121,spring rape,low,harvest2,slope,99999,0,0,0
+22,winter rape,high,janfirst,slope,99999,0,0,0
+22,winter rape,high,sow,start,-1,0,0,0
+22,winter rape,high,sow,slope,105,0.004,0.004,0.04
+22,winter rape,high,sow,slope,180,0.004,0.004,0.026666667
+22,winter rape,high,sow,slope,255,0.0075,0.0075,0.058333333
+22,winter rape,high,sow,slope,375,0.002222222,0.002222222,0.013333333
+22,winter rape,high,sow,slope,600,0,0,0
+22,winter rape,high,marchfirst,slope,0,0,0,0
+22,winter rape,high,marchfirst,slope,92,0.013333333,0.013333333,0.106666667
+22,winter rape,high,marchfirst,slope,167,0.029850746,0.029850746,0.388059701
+22,winter rape,high,marchfirst,slope,234,0,0,0.435146444
+22,winter rape,high,marchfirst,slope,473,0,0,0
+22,winter rape,high,marchfirst,slope,869,0,-0.009960159,0
+22,winter rape,high,marchfirst,slope,1371,0,0,-0.001520866
+22,winter rape,high,harvest1,start,-1,0.1,0,10
+22,winter rape,high,harvest2,slope,99999,0,0,0
+122,winter rape,low,janfirst,slope,99999,0,0,0
+122,winter rape,low,sow,start,-1,0,0,0
+122,winter rape,low,sow,slope,105,0.002666667,0.002666667,0.04
+122,winter rape,low,sow,slope,180,0.005333333,0.005333333,0.026666667
+122,winter rape,low,sow,slope,255,0.011666667,0.011666667,0.041666667
+122,winter rape,low,sow,slope,375,0.002222222,0.002222222,0.017777778
+122,winter rape,low,sow,slope,600,-0.0000252,-0.0000252,-0.000140846
+122,winter rape,low,marchfirst,slope,0,0,0,0
+122,winter rape,low,marchfirst,slope,107,0.004,0.004,0.106666667
+122,winter rape,low,marchfirst,slope,182,0.014634146,0.014634146,0.329268293
+122,winter rape,low,marchfirst,slope,264,0,0,0.334821429
+122,winter rape,low,marchfirst,slope,488,0,0,0
+122,winter rape,low,marchfirst,slope,713,0,-0.005714286,0
+122,winter rape,low,marchfirst,slope,1238,0,0,-0.001215055
+122,winter rape,low,harvest1,start,-1,0.1,0,10
+122,winter rape,low,harvest2,slope,99999,0,0,0
+41,carrots,high,janfirst,slope,99999,0,0,0
+41,carrots,high,sow,start,-1,0,0,0
+41,carrots,high,sow,slope,225,0.000266667,0.000266667,0.026666667
+41,carrots,high,sow,slope,300,0.001066667,0.001066667,0.026666667
+41,carrots,high,sow,slope,375,0.002,0.002,0.026666667
+41,carrots,high,sow,slope,450,0.003333333,0.003333333,0.026666667
+41,carrots,high,sow,slope,525,0.009333333,0.009333333,0.053333333
+41,carrots,high,sow,slope,600,0.005333333,0.005333333,0.053333333
+41,carrots,high,sow,slope,750,0.01,0.01,0.016666667
+41,carrots,high,sow,slope,1050,-0.0000505,-0.0000505,-0.000252655
+41,carrots,high,marchfirst,slope,99999,0,0,0
+41,carrots,high,harvest1,start,-1,0,0,0
+41,carrots,high,harvest2,slope,99999,0,0,0
+141,carrots,low,janfirst,slope,99999,0,0,0
+141,carrots,low,sow,start,-1,0,0,0
+141,carrots,low,sow,slope,225,0.000266667,0.000266667,0.026666667
+141,carrots,low,sow,slope,300,0.001066667,0.001066667,0.026666667
+141,carrots,low,sow,slope,375,0.002,0.002,0.026666667
+141,carrots,low,sow,slope,450,0.003333333,0.004666667,0.026666667
+141,carrots,low,sow,slope,525,0.008,0.006666667,0.04
+141,carrots,low,sow,slope,600,0.004,0.004,0.046666667
+141,carrots,low,sow,slope,750,0.004333333,0.004333333,0.013333333
+141,carrots,low,sow,slope,1050,-0.0000303,-0.0000303,-0.000222337
+141,carrots,low,marchfirst,slope,99999,0,0,0
+141,carrots,low,harvest1,start,-1,0,0,0
+141,carrots,low,harvest2,slope,99999,0,0,0
+5,winter rye,high,janfirst,slope,99999,0,0,0
+5,winter rye,high,sow,start,-1,0,0,0
+5,winter rye,high,sow,slope,83,0.002304147,0.002304147,0.069124424
+5,winter rye,high,sow,slope,300,0,0,0
+5,winter rye,high,marchfirst,slope,0,0,0,0
+5,winter rye,high,marchfirst,slope,107,0.014666667,0.014666667,0.066666667
+5,winter rye,high,marchfirst,slope,182,0.050746269,0.050746269,0.298507463
+5,winter rye,high,marchfirst,slope,249,0,0,0.234741784
+5,winter rye,high,marchfirst,slope,675,0,0,0
+5,winter rye,high,marchfirst,slope,1082,-0.006920415,-0.017301038,0
+5,winter rye,high,marchfirst,slope,1371,0,0,-0.001419475
+5,winter rye,high,harvest1,start,-1,0.3,0,10
+5,winter rye,high,harvest2,slope,99999,0,0,0
+105,winter rye,low,janfirst,slope,99999,0,0,0
+105,winter rye,low,sow,start,-1,0,0,0
+105,winter rye,low,sow,slope,83,0.002304147,0.002304147,0.069124424
+105,winter rye,low,sow,slope,300,-0.00000502,-0.00000502,-0.000150453
+105,winter rye,low,marchfirst,slope,0,0,0,0
+105,winter rye,low,marchfirst,slope,107,0.006666667,0.006666667,0.066666667
+105,winter rye,low,marchfirst,slope,182,0.024390244,0.024390244,0.243902439
+105,winter rye,low,marchfirst,slope,264,0,0,0.194647202
+105,winter rye,low,marchfirst,slope,675,0,0,0
+105,winter rye,low,marchfirst,slope,750,0,-0.005,0
+105,winter rye,low,marchfirst,slope,1350,0,0,-0.001216434
+105,winter rye,low,harvest1,start,-1,0.2,0,10
+105,winter rye,low,harvest2,slope,99999,0,0,0
+7,triticale,high,janfirst,slope,99999,0,0,0
+7,triticale,high,sow,start,-1,0,0,0
+7,triticale,high,sow,slope,83,0.002304147,0.002304147,0.046082949
+7,triticale,high,sow,slope,300,0,0,0
+7,triticale,high,marchfirst,slope,0,0,0,0
+7,triticale,high,marchfirst,slope,107,0.009333333,0.009333333,0.066666667
+7,triticale,high,marchfirst,slope,182,0.026666667,0.026666667,0.133333333
+7,triticale,high,marchfirst,slope,257,0.048648649,0.048648649,0.27027027
+7,triticale,high,marchfirst,slope,294,0,0,0.196850394
+7,triticale,high,marchfirst,slope,675,0,0,0.073710074
+7,triticale,high,marchfirst,slope,1082,0,-0.017301038,0
+7,triticale,high,marchfirst,slope,1371,0,0,-0.001419475
+7,triticale,high,harvest1,start,-1,0.3,0,10
+7,triticale,high,harvest2,slope,99999,0,0,0
+107,triticale,low,janfirst,slope,99999,0,0,0
+107,triticale,low,sow,start,-1,0,0,0
+107,triticale,low,sow,slope,83,0.002304147,0.002304147,0.046082949
+107,triticale,low,sow,slope,300,0,0,0
+107,triticale,low,marchfirst,slope,0,0,0,0
+107,triticale,low,marchfirst,slope,107,0.005333333,0.005333333,0.066666667
+107,triticale,low,marchfirst,slope,182,0.009756098,0.009756098,0.097560976
+107,triticale,low,marchfirst,slope,264,0.029545455,0.029545455,0.272727273
+107,triticale,low,marchfirst,slope,308,0,0,0.177111717
+107,triticale,low,marchfirst,slope,675,0,0,0
+107,triticale,low,marchfirst,slope,750,0,-0.005,0
+107,triticale,low,marchfirst,slope,1350,0,0,-0.001013695
+107,triticale,low,harvest1,start,-1,0.2,0,10
+107,triticale,low,harvest2,slope,99999,0,0,0
+2,winter barley,high,janfirst,slope,99999,0,0,0
+2,winter barley,high,sow,start,-1,0,0,0
+2,winter barley,high,sow,slope,83,0.002304147,0.002304147,0.046082949
+2,winter barley,high,sow,slope,300,0,0,0
+2,winter barley,high,marchfirst,slope,0,0,0,0
+2,winter barley,high,marchfirst,slope,107,0.014666667,0.014666667,0.133333333
+2,winter barley,high,marchfirst,slope,182,0.050746269,0.050746269,0.298507463
+2,winter barley,high,marchfirst,slope,249,0,0,0.18115942
+2,winter barley,high,marchfirst,slope,525,0,0,0
+2,winter barley,high,marchfirst,slope,715,0,-0.01754386,0
+2,winter barley,high,marchfirst,slope,1000,0,0,-0.0009091
+2,winter barley,high,harvest1,start,-1,0.3,0,10
+2,winter barley,high,harvest2,slope,99999,0,0,0
+102,winter barley,low,janfirst,slope,99999,0,0,0
+102,winter barley,low,sow,start,-1,0,0,0
+102,winter barley,low,sow,slope,83,0.002304147,0.002304147,0.046082949
+102,winter barley,low,sow,slope,300,0,0,0
+102,winter barley,low,marchfirst,slope,0,0,0,0
+102,winter barley,low,marchfirst,slope,107,0.006666667,0.006666667,0.133333333
+102,winter barley,low,marchfirst,slope,182,0.024390244,0.024390244,0.243902439
+102,winter barley,low,marchfirst,slope,264,0,0,0.153256705
+102,winter barley,low,marchfirst,slope,525,0,0,0
+102,winter barley,low,marchfirst,slope,638,0,-0.008902077,0
+102,winter barley,low,marchfirst,slope,975,0,0,-0.000807885
+102,winter barley,low,harvest1,start,-1,0.2,0,10
+102,winter barley,low,harvest2,slope,99999,0,0,0
+3,spring wheat,high,janfirst,slope,99999,0,0,0
+3,spring wheat,high,sow,start,-1,0,0,0
+3,spring wheat,high,sow,slope,83,0.004,0.004,0.066666667
+3,spring wheat,high,sow,slope,158,0.006666667,0.006666667,0.066666667
+3,spring wheat,high,sow,slope,233,0.010666667,0.010666667,0.173333333
+3,spring wheat,high,sow,slope,308,0.017333333,0.017333333,0.173333333
+3,spring wheat,high,sow,slope,383,0.028,0.028,0.173333333
+3,spring wheat,high,sow,slope,458,0,0,0.174657534
+3,spring wheat,high,sow,slope,750,0,0,0
+3,spring wheat,high,sow,slope,900,0,-0.014792899,0
+3,spring wheat,high,sow,slope,1238,0,0,-0.001012545
+3,spring wheat,high,marchfirst,slope,99999,0,0,0
+3,spring wheat,high,harvest1,start,-1,0.3,0,10
+3,spring wheat,high,harvest2,slope,99999,0,0,0
+103,spring wheat,low,janfirst,slope,99999,0,0,0
+103,spring wheat,low,sow,start,-1,0,0,0
+103,spring wheat,low,sow,slope,83,0.002666667,0.002666667,0.066666667
+103,spring wheat,low,sow,slope,158,0.004,0.004,0.066666667
+103,spring wheat,low,sow,slope,233,0.006666667,0.006666667,0.16
+103,spring wheat,low,sow,slope,308,0.009333333,0.009333333,0.16
+103,spring wheat,low,sow,slope,383,0.017333333,0.017333333,0.16
+103,spring wheat,low,sow,slope,458,0,0,0.150684932
+103,spring wheat,low,sow,slope,750,0,0,0
+103,spring wheat,low,sow,slope,788,0,-0.007281553,0
+103,spring wheat,low,sow,slope,1200,0,0,-0.00091094
+103,spring wheat,low,marchfirst,slope,99999,0,0,0
+103,spring wheat,low,harvest1,start,-1,0.2,0,10
+103,spring wheat,low,harvest2,slope,99999,0,0,0
+21,spring rape,high,janfirst,slope,99999,0,0,0
+21,spring rape,high,sow,start,-1,0,0,0
+21,spring rape,high,sow,slope,113,0.001785714,0.001785714,0.107142857
+21,spring rape,high,sow,slope,225,0.010666667,0.010666667,0.106666667
+21,spring rape,high,sow,slope,300,0.02,0.02,0.133333333
+21,spring rape,high,sow,slope,375,0.033333333,0.033333333,0.186666667
+21,spring rape,high,sow,slope,450,0,0,0.177339901
+21,spring rape,high,sow,slope,653,0,0,0
+21,spring rape,high,sow,slope,1050,0,-0.014792899,0
+21,spring rape,high,sow,slope,1388,0,0,-0.000811269
+21,spring rape,high,marchfirst,slope,99999,0,0,0
+21,spring rape,high,harvest1,start,-1,0.2,0,10
+21,spring rape,high,harvest2,slope,99999,0,0,0
+60,beet,high,janfirst,slope,99999,0,0,0
+60,beet,high,sow,start,-1,0,0,0
+60,beet,high,sow,slope,150,0.005,0.005,0.033333333
+60,beet,high,sow,slope,210,0.005555556,0.005555556,0.088888889
+60,beet,high,sow,slope,300,0.010666667,0.010666667,0.066666667
+60,beet,high,sow,slope,375,0.017333333,0.017333333,0.066666667
+60,beet,high,sow,slope,450,0.028,0.028,0.066666667
+60,beet,high,sow,slope,525,0,0,0.066666667
+60,beet,high,sow,slope,825,0,-0.0000504,-0.000453748
+60,beet,high,marchfirst,slope,99999,0,0,0
+60,beet,high,harvest1,start,-1,0,0,0
+60,beet,high,harvest2,slope,99999,0,0,0
+160,beet,low,janfirst,slope,99999,0,0,0
+160,beet,low,sow,start,-1,0,0,0
+160,beet,low,sow,slope,150,0.001666667,0.001666667,0.033333333
+160,beet,low,sow,slope,210,0.004444444,0.004444444,0.088888889
+160,beet,low,sow,slope,300,0.006666667,0.006666667,0.066666667
+160,beet,low,sow,slope,375,0.009333333,0.009333333,0.066666667
+160,beet,low,sow,slope,450,0.017333333,0.017333333,0.066666667
+160,beet,low,sow,slope,525,0,0,0.066666667
+160,beet,low,sow,slope,750,0,-0.0000302,-0.000403027
+160,beet,low,marchfirst,slope,99999,0,0,0
+160,beet,low,harvest1,start,-1,0,0,0
+160,beet,low,harvest2,slope,99999,0,0,0
+8,maize,high,janfirst,slope,99999,0,0,0
+8,maize,high,sow,start,-1,0,0,0
+8,maize,high,sow,slope,150,0.001587302,0.001587302,0.095238095
+8,maize,high,sow,slope,465,0.006666667,0.006666667,0.166666667
+8,maize,high,sow,slope,525,0.012,0.012,0.133333333
+8,maize,high,sow,slope,600,0.03047619,0.03047619,0.476190476
+8,maize,high,sow,slope,705,0,0,0.512820513
+8,maize,high,sow,slope,900,0,0,0
+8,maize,high,sow,slope,1356,0,-0.008726003,0
+8,maize,high,sow,slope,1929,0,0,-0.00203936
+8,maize,high,marchfirst,slope,99999,0,0,0
+8,maize,high,harvest1,start,-1,0.2,0,10
+8,maize,high,harvest2,slope,99999,0,0,0
+108,maize,low,janfirst,slope,99999,0,0,0
+108,maize,low,sow,start,-1,0,0,0
+108,maize,low,sow,slope,150,0.001269841,0.001269841,0.079365079
+108,maize,low,sow,slope,465,0.003333333,0.003333333,0.15
+108,maize,low,sow,slope,525,0.006666667,0.006666667,0.12
+108,maize,low,sow,slope,600,0.018095238,0.018095238,0.352380952
+108,maize,low,sow,slope,705,0,0,0.41025641
+108,maize,low,sow,slope,900,0,0,0
+108,maize,low,sow,slope,1275,0,-0.005,0
+108,maize,low,sow,slope,1875,0,0,-0.00163059
+108,maize,low,marchfirst,slope,99999,0,0,0
+108,maize,low,harvest1,start,-1,0.2,0,10
+108,maize,low,harvest2,slope,99999,0,0,0
+26,permanent grassland (grazed),high,janfirst,start,-1,3,1,30
+26,permanent grassland (grazed),high,janfirst,slope,0,-0.005,-0.0025,-0.05
+26,permanent grassland (grazed),high,janfirst,slope,200,-0.00002,-0.00000501,-0.000200403
+26,permanent grassland (grazed),high,sow,slope,99999,0,0,0
+26,permanent grassland (grazed),high,marchfirst,slope,0,0,0,-0.044247788
+26,permanent grassland (grazed),high,marchfirst,slope,113,0.008928571,0.008928571,0.026785714
+26,permanent grassland (grazed),high,marchfirst,slope,225,0.013333333,0.02,0.026666667
+26,permanent grassland (grazed),high,marchfirst,slope,300,0.012,0.025333333,0.066666667
+26,permanent grassland (grazed),high,marchfirst,slope,375,0.0000889,0.0000889,0.04
+26,permanent grassland (grazed),high,marchfirst,slope,1500,-0.0000508,-0.0000508,-0.000710667
+26,permanent grassland (grazed),high,harvest1,slope,99999,0,0,0
+26,permanent grassland (grazed),high,harvest2,slope,99999,0,0,0
+27,permanent grassland (seeded),high,janfirst,start,-1,1.5,1,10
+27,permanent grassland (seeded),high,sow,slope,99999,0,0,0
+27,permanent grassland (seeded),high,marchfirst,slope,0,0,0,0
+27,permanent grassland (seeded),high,marchfirst,slope,107,0,0.004651163,0
+27,permanent grassland (seeded),high,marchfirst,slope,150,0.006666667,0.010666667,0.12
+27,permanent grassland (seeded),high,marchfirst,slope,225,0.022666667,0.022666667,0.12
+27,permanent grassland (seeded),high,marchfirst,slope,300,0.040625,0.040625,0.28125
+27,permanent grassland (seeded),high,marchfirst,slope,332,0,0,0.098939929
+27,permanent grassland (seeded),high,marchfirst,slope,615,0,0,0
+27,permanent grassland (seeded),high,marchfirst,slope,825,0,0,0
+27,permanent grassland (seeded),high,marchfirst,slope,1050,0,-0.016666667,0
+27,permanent grassland (seeded),high,marchfirst,slope,1350,-0.0000507,0,-0.000658902
+27,permanent grassland (seeded),high,harvest1,start,-1,0.5,0,10
+27,permanent grassland (seeded),high,harvest2,slope,99999,0,0,0
+28,NA,high,janfirst,start,-1,1.5,1,10
+28,NA,high,sow,slope,99999,0,0,0
+28,NA,high,marchfirst,slope,0,0,0,0
+28,NA,high,marchfirst,slope,107,0,0.004651163,0
+28,NA,high,marchfirst,slope,150,0.006666667,0.010666667,0.08
+28,NA,high,marchfirst,slope,225,0.020408163,0.020408163,0.081632653
+28,NA,high,marchfirst,slope,274,-0.0000301,-0.0000301,-0.000200552
+28,NA,high,harvest1,slope,99999,0,0,0
+28,NA,high,harvest2,slope,99999,0,0,0
+29,fodder/clover,high,janfirst,start,-1,1.5,1,10
+29,fodder/clover,high,sow,slope,99999,0,0,0
+29,fodder/clover,high,marchfirst,slope,0,0,0,0
+29,fodder/clover,high,marchfirst,slope,107,-0.006976744,0.004651163,0
+29,fodder/clover,high,marchfirst,slope,150,0.010666667,0.010666667,0.12
+29,fodder/clover,high,marchfirst,slope,225,0.022666667,0.022666667,0.12
+29,fodder/clover,high,marchfirst,slope,300,0.040625,0.040625,0.28125
+29,fodder/clover,high,marchfirst,slope,332,0,0,0.083333333
+29,fodder/clover,high,marchfirst,slope,488,-0.0000502,-0.0000502,-0.000502457
+29,fodder/clover,high,harvest1,start,-1,0.5,0.5,10
+29,fodder/clover,high,harvest1,slope,0,0.016666667,0.016666667,0.333333333
+29,fodder/clover,high,harvest1,slope,30,0.006666667,0.006666667,0
+29,fodder/clover,high,harvest1,slope,75,0.012,0.012,0
+29,fodder/clover,high,harvest1,slope,150,0.026666667,0.026666667,0.12
+29,fodder/clover,high,harvest1,slope,225,0.043333333,0.043333333,0.1
+29,fodder/clover,high,harvest1,slope,255,0,0,0.120171674
+29,fodder/clover,high,harvest1,slope,488,-0.0000502,-0.0000502,-0.000502457
+29,fodder/clover,high,harvest2,slope,99999,0,0,0
+65,silage clover/grass,high,janfirst,slope,0,-0.000015,-0.00001,-0.000100001
+65,silage clover/grass,high,sow,slope,99999,0,0,0
+65,silage clover/grass,high,marchfirst,slope,0,0,0,0
+65,silage clover/grass,high,marchfirst,slope,107,0,0.004651163,0
+65,silage clover/grass,high,marchfirst,slope,150,0.006666667,0.010666667,0.12
+65,silage clover/grass,high,marchfirst,slope,225,0.022666667,0.022666667,0.12
+65,silage clover/grass,high,marchfirst,slope,300,0.040625,0.040625,0.28125
+65,silage clover/grass,high,marchfirst,slope,332,0,0,0.083333333
+65,silage clover/grass,high,marchfirst,slope,488,-0.0000502,-0.0000502,-0.000502457
+65,silage clover/grass,high,harvest1,start,-1,0.5,0.5,10
+65,silage clover/grass,high,harvest1,slope,0,0.016666667,0.016666667,0.333333333
+65,silage clover/grass,high,harvest1,slope,30,0.006666667,0.006666667,0
+65,silage clover/grass,high,harvest1,slope,75,0.012,0.012,0
+65,silage clover/grass,high,harvest1,slope,150,0.026666667,0.026666667,0.12
+65,silage clover/grass,high,harvest1,slope,225,0.043333333,0.043333333,0.1
+65,silage clover/grass,high,harvest1,slope,255,0,0,0.120171674
+65,silage clover/grass,high,harvest1,slope,488,-0.0000502,-0.0000502,-0.000502457
+65,silage clover/grass,high,harvest2,slope,99999,0,0,0
+165,silage clover/grass,low,janfirst,slope,0,-0.000015,-0.00001,-0.000100001
+165,silage clover/grass,low,sow,slope,99999,0,0,0
+165,silage clover/grass,low,marchfirst,slope,0,0,0,0
+165,silage clover/grass,low,marchfirst,slope,107,0,0.004651163,0
+165,silage clover/grass,low,marchfirst,slope,150,0.001333333,0.005333333,0.08
+165,silage clover/grass,low,marchfirst,slope,225,0.010666667,0.010666667,0.08
+165,silage clover/grass,low,marchfirst,slope,300,0.021333333,0.021333333,0.08
+165,silage clover/grass,low,marchfirst,slope,375,0,0,0.08
+165,silage clover/grass,low,marchfirst,slope,525,-0.0000402,-0.0000402,-0.000402115
+165,silage clover/grass,low,harvest1,start,-1,0.5,0.5,10
+165,silage clover/grass,low,harvest1,slope,0,0.016666667,0.016666667,0.333333333
+165,silage clover/grass,low,harvest1,slope,30,0.004444444,0.004444444,0
+165,silage clover/grass,low,harvest1,slope,75,0.006666667,0.006666667,0
+165,silage clover/grass,low,harvest1,slope,150,0.012,0.012,0.08
+165,silage clover/grass,low,harvest1,slope,225,0.025333333,0.025333333,0.08
+165,silage clover/grass,low,harvest1,slope,300,0,0,0.08
+165,silage clover/grass,low,harvest1,slope,525,-0.0000402,-0.0000402,-0.000402115
+165,silage clover/grass,low,harvest2,start,-1,0,0,0
+90,natural grass,high,janfirst,start,-1,4.83,0,70.25454545
+90,natural grass,high,janfirst,slope,105,-0.00000981,0,-0.000142697
+90,natural grass,high,sow,slope,99999,0,0,0
+90,natural grass,high,marchfirst,slope,0,0.002249135,0.003460208,0.03271469
+90,natural grass,high,marchfirst,slope,289,0.001231527,0,0.017913121
+90,natural grass,high,marchfirst,slope,695,0.001552795,-0.00310559,0.02258611
+90,natural grass,high,marchfirst,slope,1017,0,0,0
+90,natural grass,high,marchfirst,slope,2619,-0.003988095,0,-0.058008658
+90,natural grass,high,marchfirst,slope,2787,0,0,0
+90,natural grass,high,harvest1,start,-1,1,0,10
+90,natural grass,high,harvest1,slope,0,0.012110727,0.003460208,0.19188424
+90,natural grass,high,harvest1,slope,289,0.001231527,0,0.017913121
+90,natural grass,high,harvest1,slope,695,0.001552795,-0.00310559,0.02258611
+90,natural grass,high,harvest1,slope,1017,0,0,0
+90,natural grass,high,harvest1,slope,2619,-0.003988095,0,-0.058008658
+90,natural grass,high,harvest1,slope,2787,0,0,0
+90,natural grass,high,harvest2,slope,99999,0,0,0
+91,no growth,high,janfirst,slope,99999,0,0,0
+91,no growth,high,sow,slope,99999,0,0,0
+91,no growth,high,marchfirst,slope,99999,0,0,0
+91,no growth,high,harvest1,slope,99999,0,0,0
+91,no growth,high,harvest2,slope,99999,0,0,0
+92,permanent set-aside,high,janfirst,start,-1,2.55024,0.8,30
+92,permanent set-aside,high,janfirst,slope,105,-0.00000518,0,0.0000501
+92,permanent set-aside,high,sow,slope,99999,0,0,0
+92,permanent set-aside,high,marchfirst,slope,0,0.002101038,0.000941176,0.017301038
+92,permanent set-aside,high,marchfirst,slope,289,0.000650246,0.001970443,0.017241379
+92,permanent set-aside,high,marchfirst,slope,695,0,0,0.02484472
+92,permanent set-aside,high,marchfirst,slope,1017,-0.000220824,0,-0.006242197
+92,permanent set-aside,high,marchfirst,slope,2619,0,-0.003571429,-0.05952381
+92,permanent set-aside,high,marchfirst,slope,2787,-0.0000262,-0.0000103,-0.000308604
+92,permanent set-aside,high,harvest1,start,-1,0.6,0.4,15
+92,permanent set-aside,high,harvest1,slope,0,0.006145329,0.001384083,0.069204152
+92,permanent set-aside,high,harvest1,slope,289,0.000650246,0.001970443,0.007389163
+92,permanent set-aside,high,harvest1,slope,695,0.000819876,0,0.01242236
+92,permanent set-aside,high,harvest1,slope,1017,0,0,0
+92,permanent set-aside,high,harvest1,slope,2619,-0.002105714,-0.003571429,-0.029761905
+92,permanent set-aside,high,harvest1,slope,2787,0,-0.0000103,0
+92,permanent set-aside,high,harvest2,slope,99999,0,0,0
+6,oats,high,janfirst,slope,99999,0,0,0
+6,oats,high,sow,slope,0,0,0,0
+6,oats,high,sow,slope,83,0.005466667,0.005466667,0.066666667
+6,oats,high,sow,slope,158,0.01,0.009866667,0.093333333
+6,oats,high,sow,slope,233,0.018266667,0.0184,0.306666667
+6,oats,high,sow,slope,308,0.033378378,0.033378378,0.540540541
+6,oats,high,sow,slope,382,0,0,0.359116022
+6,oats,high,sow,slope,563,0,0,0
+6,oats,high,sow,slope,660,0,0,0
+6,oats,high,sow,slope,675,0,0,0
+6,oats,high,sow,slope,938,-0.011450382,-0.019083969,0
+6,oats,high,sow,slope,1200,0,0,0
+6,oats,high,marchfirst,slope,99999,0,0,0
+6,oats,high,harvest1,start,-1,0.3,0,10
+6,oats,high,harvest2,slope,99999,0,0,0
+106,oats,low,janfirst,slope,99999,0,0,0
+106,oats,low,sow,slope,0,0,0,0
+106,oats,low,sow,slope,83,0.003333333,0.003333333,0.066666667
+106,oats,low,sow,slope,158,0.006,0.006,0.093333333
+106,oats,low,sow,slope,233,0.010933333,0.010933333,0.306666667
+106,oats,low,sow,slope,308,0.009932886,0.009932886,0.268456376
+106,oats,low,sow,slope,457,0,0,0.662650602
+106,oats,low,sow,slope,540,0,0,0
+106,oats,low,sow,slope,623,0,0,0
+106,oats,low,sow,slope,675,-0.00307377,-0.006147541,0
+106,oats,low,sow,slope,1163,0,0,0
+106,oats,low,marchfirst,slope,99999,0,0,0
+106,oats,low,harvest1,start,-1,0.3,0,10
+106,oats,low,harvest2,slope,99999,0,0,0
+50,potatoes,high,janfirst,slope,99999,0,0,0
+50,potatoes,high,sow,slope,0,0,0,0
+50,potatoes,high,sow,slope,225,0.006666667,0.006666667,0.133333333
+50,potatoes,high,sow,slope,300,0.002666667,0.002666667,0.133333333
+50,potatoes,high,sow,slope,375,0.004,0.004,0.133333333
+50,potatoes,high,sow,slope,450,0.005333333,0.005333333,0.133333333
+50,potatoes,high,sow,slope,525,0.009333333,0.009333333,0.133333333
+50,potatoes,high,sow,slope,600,0.012,0.012,0
+50,potatoes,high,sow,slope,675,0,0,0
+50,potatoes,high,sow,slope,938,-0.016666667,-0.02,-0.266666667
+50,potatoes,high,sow,slope,1088,0,0,0
+50,potatoes,high,marchfirst,slope,99999,0,0,0
+50,potatoes,high,harvest1,start,-1,0,0,0
+50,potatoes,high,harvest2,slope,99999,0,0,0
+150,potatoes,low,janfirst,slope,99999,0,0,0
+150,potatoes,low,sow,slope,0,0,0,0
+150,potatoes,low,sow,slope,225,0.008,0.008,0.133333333
+150,potatoes,low,sow,slope,300,0.005333333,0.005333333,0.133333333
+150,potatoes,low,sow,slope,375,0.006666667,0.006666667,0.133333333
+150,potatoes,low,sow,slope,450,0.009333333,0.009333333,0.133333333
+150,potatoes,low,sow,slope,525,0.014666667,0.014666667,0.133333333
+150,potatoes,low,sow,slope,600,0.022666667,0.022666667,0.133333333
+150,potatoes,low,sow,slope,675,0,0,0
+150,potatoes,low,sow,slope,1200,-0.017777778,-0.022222222,-0.222222222
+150,potatoes,low,sow,slope,1425,0,0,0
+150,potatoes,low,marchfirst,slope,99999,0,0,0
+150,potatoes,low,harvest1,start,-1,0,0,0
+150,potatoes,low,harvest2,slope,99999,0,0,0
+99,weeds,high,janfirst,start,-1,1,1,10
+99,weeds,high,sow,slope,99999,0,0,0
+99,weeds,high,marchfirst,start,-1,1.1,1,10
+99,weeds,high,marchfirst,slope,64,0.038461538,0.038461538,0
+99,weeds,high,marchfirst,slope,90,0.022222222,0.022222222,0
+99,weeds,high,marchfirst,slope,135,0.022222222,0.022222222,0
+99,weeds,high,marchfirst,slope,180,0,0,0
+99,weeds,high,marchfirst,slope,199,0,0,0
+99,weeds,high,marchfirst,slope,308,0,0,0
+99,weeds,high,marchfirst,slope,413,-0.007633588,-0.007633588,0
+99,weeds,high,marchfirst,slope,675,-0.004444444,-0.004444444,0
+99,weeds,high,marchfirst,slope,900,-0.00000908,-0.00000908,0
+99,weeds,high,harvest1,start,-1,1.2,0.2,10
+99,weeds,high,harvest1,slope,0,0.019642857,0,0
+99,weeds,high,harvest1,slope,140,0.020833333,0,0
+99,weeds,high,harvest1,slope,188,0,0,0
+99,weeds,high,harvest1,slope,207,0,0,0
+99,weeds,high,harvest1,slope,769,-0.013333333,0,0
+99,weeds,high,harvest1,slope,844,-0.0000101,0,0
+99,weeds,high,harvest2,slope,99999,0,0,0
+112,heath,low,janfirst,start,-1,3.1878,1,46.368
+112,heath,low,janfirst,slope,105,-0.00000647,0,-0.0000942
+112,heath,low,sow,slope,99999,0,0,0
+112,heath,low,marchfirst,start,-1,2.541,0.66,36.96
+112,heath,low,marchfirst,slope,0,0.007958478,0.001176471,0.016608997
+112,heath,low,marchfirst,slope,289,0.000812808,0.002463054,0.01182266
+112,heath,low,marchfirst,slope,695,0,0,0
+112,heath,low,marchfirst,slope,1017,-0.00027603,0,-0.004014981
+112,heath,low,marchfirst,slope,2619,0,0,0
+112,heath,low,marchfirst,slope,2787,-0.0000328,-0.0000206,-0.000476978
+112,heath,low,harvest1,start,-1,0.66,0.5,10
+112,heath,low,harvest1,slope,0,0.00799308,0.001730104,0.114878893
+112,heath,low,harvest1,slope,289,0.000812808,0.002463054,0.01182266
+112,heath,low,harvest1,slope,695,0.001024845,0,0.014906832
+112,heath,low,harvest1,slope,1017,0,0,0
+112,heath,low,harvest1,slope,2619,-0.002632143,0,-0.038285714
+112,heath,low,harvest1,slope,2787,0,-0.0000206,0
+112,heath,low,harvest2,slope,99999,0,0,0
+94,lawn,high,janfirst,start,-1,2.415,0,35.12727273
+94,lawn,high,janfirst,slope,105,-0.00000491,0,-0.0000713
+94,lawn,high,janfirst,slope,0,-0.0000025,0,0.5
+94,lawn,high,sow,slope,99999,0,0,0
+94,lawn,high,marchfirst,start,-1,1.925,0,28
+94,lawn,high,marchfirst,slope,0,0.000865052,0,0.012582573
+94,lawn,high,marchfirst,slope,289,0.000615764,-0.001231527,0.008956561
+94,lawn,high,marchfirst,slope,695,0,0,0
+94,lawn,high,marchfirst,slope,1017,-0.000209114,0,-0.003041652
+94,lawn,high,marchfirst,slope,2619,0,0,0
+94,lawn,high,marchfirst,slope,2787,-0.0000248,0,0.513973303
+94,lawn,high,harvest1,start,-1,0.5,0,5
+94,lawn,high,harvest1,slope,0,0.006055363,0.001730104,0.09594212
+94,lawn,high,harvest1,slope,289,0.000615764,0,0.008956561
+94,lawn,high,harvest1,slope,695,0.000776398,-0.001552795,0.011293055
+94,lawn,high,harvest1,slope,1017,0,0,0
+94,lawn,high,harvest1,slope,2619,-0.001994048,0,-0.029004329
+94,lawn,high,harvest1,slope,2787,0,0,0
+94,lawn,high,harvest1,slope,0,-0.0000025,0,0.5
+94,lawn,high,harvest2,slope,99999,0,0,0
+25,permanent grassland (low yield),high,janfirst,start,-1,3,1,20
+25,permanent grassland (low yield),high,janfirst,slope,0,-0.005,-0.0025,-0.025
+25,permanent grassland (low yield),high,janfirst,slope,200,-0.00002,-0.00000501,-0.000150302
+25,permanent grassland (low yield),high,sow,slope,99999,0,0,0
+25,permanent grassland (low yield),high,marchfirst,slope,0,0,0,-0.026548673
+25,permanent grassland (low yield),high,marchfirst,slope,113,0.008928571,0.008928571,0.053571429
+25,permanent grassland (low yield),high,marchfirst,slope,225,0.013333333,0.02,0.026666667
+25,permanent grassland (low yield),high,marchfirst,slope,300,0.012,0.025333333,0.066666667
+25,permanent grassland (low yield),high,marchfirst,slope,375,0.0000889,0.0000889,0.031111111
+25,permanent grassland (low yield),high,marchfirst,slope,1500,-0.0000508,-0.0000508,-0.000609143
+25,permanent grassland (low yield),high,harvest1,slope,99999,0,0,0
+25,permanent grassland (low yield),high,harvest2,slope,99999,0,0,0
+70,lucerne,high,janfirst,slope,99999,0,0,0
+70,lucerne,high,sow,start,-1,0,0,0
+70,lucerne,high,sow,slope,107,-0.006976744,0.004651163,0
+70,lucerne,high,sow,slope,150,0.010666667,0.010666667,0.12
+70,lucerne,high,sow,slope,225,0.022666667,0.022666667,0.12
+70,lucerne,high,sow,slope,300,0.040625,0.040625,0.28125
+70,lucerne,high,sow,slope,332,0,0,0.083333333
+70,lucerne,high,sow,slope,488,-0.0000502457,-0.0000502457,-0.000502457
+70,lucerne,high,marchfirst,slope,99999,0,0,0
+70,lucerne,high,harvest1,start,-1,0.5,0.5,10
+70,lucerne,high,harvest1,slope,0,0.016666667,0.016666667,0.333333333
+70,lucerne,high,harvest1,slope,30,0.006666667,0.006666667,0
+70,lucerne,high,harvest1,slope,75,0.012,0.012,0
+70,lucerne,high,harvest1,slope,150,0.026666667,0.026666667,0.12
+70,lucerne,high,harvest1,slope,225,0.043333333,0.043333333,0.1
+70,lucerne,high,harvest1,slope,255,0,0,0.120171674
+70,lucerne,high,harvest1,slope,488,-0.0000502457,-0.0000502457,-0.000502457
+70,lucerne,high,harvest2,slope,99999,0,0,0
diff --git a/data/crops/almass/crop_data_general.csv b/data/crops/almass/crop_data_general.csv
index 806fdd7a87078e676dad57951561db6a6d45a7a8..c779dec5fa35c5777bb5363b88a81dbd8556bddc 100644
--- a/data/crops/almass/crop_data_general.csv
+++ b/data/crops/almass/crop_data_general.csv
@@ -6,7 +6,7 @@ name,minsowdate,maxsowdate,minharvestdate,maxharvestdate,mingrowthtemp,group
 "winter barley","15 September","30 September",NA,NA,0,"grain"
 "spring barley","1 March","10 April",NA,NA,0,"grain"
 "undersown spring barley",NA,NA,NA,NA,0,"grain"
-"winter rye","23 September","15 October",NA,NA,NA,NA,"grain"
+"winter rye","23 September","15 October",NA,NA,NA,"grain"
 "triticale","25 September","10 October",NA,NA,NA,"grain"
 "oats",NA,NA,NA,NA,NA,"grain"
 "maize","15 April","30 April",NA,NA,8,"grain"
diff --git a/data/farm/standard_gross_margins.csv b/data/farm/standard_gross_margins.csv
new file mode 100644
index 0000000000000000000000000000000000000000..4d44815ddf9327c5d5458033953ec0b6b17e56f7
--- /dev/null
+++ b/data/farm/standard_gross_margins.csv
@@ -0,0 +1,309 @@
+Category,Region,Year,SGM,Yield,Price,Value,Arable_Aid,Total_Output,Variable_Costs
+Wheat,Germany,2022,1777,80.9,28.67,2319,  ,2319,542
+Wheat,Germany,2021,1077,78.6,18.87,1484,  ,1484,407
+Wheat,Germany,2020,824,74.2,16.1,1195,  ,1195,371
+Wheat,Germany,2019,772,67.5,17.73,1197,  ,1197,425
+Wheat,Germany,2018,699,76.7,14.77,1132,  ,1132,433
+Wheat,Germany,2017,690,76.7,14.51,1113,  ,1113,423
+Wheat,Germany,2016,691,81.2,14.45,1174,  ,1174,483
+Wheat,Germany,2015,865,86.5,15.81,1368,  ,1368,502
+Wheat,Germany,2014,915,80.1,17.53,1405,  ,1405,490
+Wheat,Germany,2013,1216,73.9,23.01,1700,  ,1700,484
+Wheat,Germany,2012,803,70.4,18.57,1308,  ,1308,505
+Wheat,Germany,2011,1047,72.3,20.67,1494,  ,1494,447
+Wheat,Germany,2010,397,77.9,10.75,837,  ,837,440
+Wheat,Germany,2009,654,80.6,14.7,1186,  ,1186,531
+Wheat,Germany,2008,1088,68.8,21.41,1473,  ,1473,386
+Wheat,Germany,2007,561,71.3,12.8,912,  ,912,351
+Wheat,Germany,2006,349,73.9,9.52,704,  ,704,355
+Wheat,Germany,2005,759,81,9.3,753,347,1100,341
+Wheat,Germany,2004,845,64.9,12.73,826,346,1173,327
+Wheat,Germany,2003,746,68.4,10.51,719,346,1065,319
+Wheat,Germany,2002,839,78,10.7,835,346,1181,342
+Wheat,Germany,2001,831,72.3,11.38,822,323,1145,314
+Durum wheat ,Germany,2022,1397,55.1,31.2,1719,  ,1719,323
+Durum wheat ,Germany,2021,647,53.8,19.64,1057,  ,1057,410
+Durum wheat ,Germany,2020,483,49.2,17.61,849,  ,849,366
+Durum wheat ,Germany,2019,502,45.8,19.32,867,  ,867,365
+Durum wheat ,Germany,2018,528,57.5,17.16,967,  ,967,439
+Durum wheat ,Germany,2017,456,53.3,16.67,871,  ,871,415
+Durum wheat ,Germany,2016,357,46.5,16.74,763,  ,763,406
+Durum wheat ,Germany,2015,743,65.3,19.04,1218,  ,1218,475
+Durum wheat ,Germany,2014,696,61.3,19,1141,  ,1141,445
+Durum wheat ,Germany,2013,767,49.2,24.83,1197,  ,1197,430
+Durum wheat ,Germany,2012,541,47.3,20.83,966,  ,966,424
+Durum wheat ,Germany,2011,871,53.1,24.2,1259,  ,1259,389
+Durum wheat ,Germany,2010,362,58,13.51,768,  ,768,406
+Durum wheat ,Germany,2009,404,59.8,15.2,891,  ,891,486
+Durum wheat ,Germany,2008,958,50.1,26.38,1295,  ,1295,337
+Durum wheat ,Germany,2007,356,52.9,13.13,681,  ,681,324
+Durum wheat ,Germany,2006,423,49.3,15.37,743,  ,743,320
+Durum wheat ,Germany,2005,727,61.1,11.96,716,347,1063,336
+Durum wheat ,Germany,2004,725,47.2,14.67,679,346,1025,300
+Durum wheat ,Germany,2003,853,53.1,15.57,810,346,1157,304
+Durum wheat ,Germany,2002,848,51.1,15.74,788,346,1134,286
+Durum wheat ,Germany,2001,709,50.3,13.8,681,323,1004,295
+Rye ,Germany,2022,909,52.7,24.69,1301,  ,1301,393
+Rye ,Germany,2021,468,55.2,15.15,836,  ,836,369
+Rye ,Germany,2020,339,50.9,13.85,691,  ,691,352
+Rye ,Germany,2019,350,42.1,17.02,702,  ,702,352
+Rye ,Germany,2018,338,50.9,14.34,715,  ,715,377
+Rye ,Germany,2017,318,55.6,12.95,706,  ,706,387
+Rye ,Germany,2016,296,56.6,12.64,701,  ,701,405
+Rye ,Germany,2015,375,61.2,13.39,803,  ,803,428
+Rye ,Germany,2014,426,59.8,14.48,849,  ,849,423
+Rye ,Germany,2013,617,54.7,19.51,1046,  ,1046,429
+Rye ,Germany,2012,440,41.1,20.86,840,  ,840,401
+Rye ,Germany,2011,462,46.3,18.61,844,  ,844,382
+Rye ,Germany,2010,100,57,8.85,494,  ,494,394
+Rye ,Germany,2009,225,50.8,13.1,652,  ,652,427
+Rye ,Germany,2008,500,40.2,20.68,815,  ,815,314
+Rye ,Germany,2007,318,49.1,13.11,631,  ,631,313
+Rye ,Germany,2006,185,50.9,9.51,474,  ,474,290
+Rye ,Germany,2005,517,61.3,7.89,474,347,820,303
+Rye ,Germany,2004,526,42.9,10.91,459,346,805,279
+Rye ,Germany,2003,491,50.3,8.78,433,346,779,288
+Rye ,Germany,2002,621,61.1,9.63,576,346,923,302
+Rye ,Germany,2001,543,49,9.91,476,323,799,256
+Barley ,Germany,2022,1368,67,26.81,1796,  ,1796,428
+Barley ,Germany,2021,784,64.1,17.33,1109,  ,1109,325
+Barley ,Germany,2020,644,66.8,14.92,996,  ,996,352
+Barley ,Germany,2019,656,57.7,17.99,1039,  ,1039,383
+Barley ,Germany,2018,634,68.5,14.9,1021,  ,1021,386
+Barley ,Germany,2017,520,66,13.59,897,  ,897,377
+Barley ,Germany,2016,572,71.1,13.93,990,  ,990,418
+Barley ,Germany,2015,643,72.8,14.74,1073,  ,1073,430
+Barley ,Germany,2014,689,65.4,16.72,1093,  ,1093,404
+Barley ,Germany,2013,915,62.7,20.91,1311,  ,1311,396
+Barley ,Germany,2012,662,54.7,19.15,1048,  ,1048,386
+Barley ,Germany,2011,762,62.1,18.12,1126,  ,1126,364
+Barley ,Germany,2010,269,64.9,9.44,613,  ,613,344
+Barley ,Germany,2009,465,61.4,14.41,884,  ,884,419
+Barley ,Germany,2008,843,52.2,21.81,1139,  ,1139,296
+Barley ,Germany,2007,492,57.1,13.41,766,  ,766,274
+Barley ,Germany,2006,299,58.3,9.82,572,  ,572,273
+Barley ,Germany,2005,685,64.6,9.48,612,347,959,273
+Barley ,Germany,2004,691,51,11.64,594,346,940,250
+Barley ,Germany,2003,620,54.2,9.68,525,346,872,251
+Barley ,Germany,2002,739,62.3,10.58,660,346,1006,267
+Barley ,Germany,2001,718,57.2,11.08,634,323,956,238
+Oats,Germany,2022,606,42.5,21.58,917,  ,917,311
+Oats,Germany,2021,499,45.1,16.51,745,  ,745,246
+Oats,Germany,2020,456,40.6,15.81,641,  ,641,185
+Oats,Germany,2019,502,40.7,17.42,710,  ,710,208
+Oats,Germany,2018,428,44.3,14.53,643,  ,643,215
+Oats,Germany,2017,434,46,14.12,649,  ,649,215
+Oats,Germany,2016,404,44.9,14.11,634,  ,634,230
+Oats,Germany,2015,485,50.3,14.4,724,  ,724,240
+Oats,Germany,2014,513,47.6,15.82,753,  ,753,240
+Oats,Germany,2013,795,51.5,20.43,1053,  ,1053,258
+Oats,Germany,2012,584,43.5,18.88,822,  ,822,238
+Oats,Germany,2011,524,42,17.47,734,  ,734,210
+Oats,Germany,2010,265,50.2,9.67,486,  ,486,221
+Oats,Germany,2009,375,43.8,14.03,614,  ,614,239
+Oats,Germany,2008,609,40.6,19.74,801,  ,801,191
+Oats,Germany,2007,411,44.7,13.38,598,  ,598,186
+Oats,Germany,2006,246,45.3,9.3,422,  ,422,176
+Oats,Germany,2005,633,51.3,8.86,455,347,802,168
+Oats,Germany,2004,636,45.3,9.99,453,346,800,164
+Oats,Germany,2003,590,43.3,9.15,396,346,743,152
+Oats,Germany,2002,712,48.6,10.9,530,346,876,164
+Oats,Germany,2001,699,45.7,11.61,531,323,854,155
+Grain maize ,Germany,2022,2007,103.6,26.99,2796,  ,2796,790
+Grain maize ,Germany,2021,1187,93,19.03,1771,  ,1771,583
+Grain maize ,Germany,2020,725,88.1,16.38,1400,  ,1400,674
+Grain maize ,Germany,2019,640,81.4,17.02,1344,  ,1344,704
+Grain maize ,Germany,2018,846,105.3,15.5,1583,  ,1583,738
+Grain maize ,Germany,2017,737,96.5,15.47,1448,  ,1448,711
+Grain maize ,Germany,2016,596,88.8,15.88,1368,  ,1368,771
+Grain maize ,Germany,2015,692,107.6,14.59,1523,  ,1523,831
+Grain maize ,Germany,2014,826,89.1,18.45,1595,  ,1595,769
+Grain maize ,Germany,2013,1474,105.5,22.46,2298,  ,2298,824
+Grain maize ,Germany,2012,1225,107.2,19.56,2034,  ,2034,809
+Grain maize ,Germany,2011,1069,90.9,20.37,1796,  ,1796,728
+Grain maize ,Germany,2010,487,98.6,12.59,1204,  ,1204,717
+Grain maize ,Germany,2009,376,99.1,12.4,1192,  ,1192,816
+Grain maize ,Germany,2008,1225,94.9,20.58,1894,  ,1894,669
+Grain maize ,Germany,2007,538,80.7,14.55,1139,  ,1139,601
+Grain maize ,Germany,2006,412,92.7,11.17,1004,  ,1004,592
+Grain maize ,Germany,2005,715,91.3,10.63,941,347,1288,573
+Grain maize ,Germany,2004,862,74.5,14.27,1031,346,1378,516
+Grain maize ,Germany,2003,773,93.9,10.97,999,346,1346,573
+Grain maize ,Germany,2002,681,78.5,11.33,863,346,1210,529
+Grain maize ,Germany,2001,554,76.5,10.29,763,323,1086,532
+Potatoes ,Germany,2022,6416,437.9,18.38,8050,  ,8050,1634
+Potatoes ,Germany,2021,7049,428.3,19.96,8548,  ,8548,1498
+Potatoes ,Germany,2020,7224,390.3,22.14,8643,  ,8643,1419
+Potatoes ,Germany,2019,8325,353.8,28.33,10023,  ,10023,1698
+Potatoes ,Germany,2018,4160,467.9,11.88,5561,  ,5561,1400
+Potatoes ,Germany,2017,6882,444.2,19.02,8448,  ,8448,1567
+Potatoes ,Germany,2016,5882,438.1,16.35,7163,  ,7163,1280
+Potatoes ,Germany,2015,2619,474.2,7.72,3662,  ,3662,1043
+Potatoes ,Germany,2014,8036,398.3,24.01,9562,  ,9562,1526
+Potatoes ,Germany,2013,7332,447.5,19.53,8739,  ,8739,1407
+Potatoes ,Germany,2012,3896,457.6,11.02,5041,  ,5041,1145
+Potatoes ,Germany,2011,7683,398.8,22.63,9026,  ,9026,1343
+Potatoes ,Germany,2010,4019,442.6,11.42,5055,  ,5055,1036
+Potatoes ,Germany,2009,3927,437.4,11.51,5032,  ,5032,1105
+Potatoes ,Germany,2008,7138,324,29.46,9354,  ,9354,2216
+Potatoes ,Germany,2007,6718,365.3,22.21,8113,  ,8113,1396
+Potatoes ,Germany,2006,3317,419.3,10.1,4234,  ,4234,918
+Potatoes ,Germany,2005,663,329.5,4.57,1507,  ,1507,844
+Potatoes ,Germany,2004,2005,288.8,10.12,2923,  ,2923,917
+Potatoes ,Germany,2003,1682,391.2,6.5,2544,  ,2544,862
+Potatoes ,Germany,2002,2684,361.7,10.14,3668,  ,3668,984
+Potatoes ,Germany,2001,1184,386.4,5.07,1959,  ,1959,774
+Sugar beets ,Germany,2022,1903,817.7,3.34,2731,  ,2731,828
+Sugar beets ,Germany,2021,1793,741.5,3.5,2595,  ,2595,803
+Sugar beets ,Germany,2020,1551,724.4,2.92,2115,  ,2115,564
+Sugar beets ,Germany,2019,1119,632.8,3.13,1981,  ,1981,862
+Sugar beets ,Germany,2018,1585,837.5,3.02,2529,  ,2529,944
+Sugar beets ,Germany,2017,1898,762.3,3.6,2744,  ,2744,847
+Sugar beets ,Germany,2016,1450,721.7,3.3,2382,  ,2382,931
+Sugar beets ,Germany,2015,1795,798.6,3.45,2755,  ,2755,960
+Sugar beets ,Germany,2014,1932,638.8,4.35,2779,  ,2779,846
+Sugar beets ,Germany,2013,2013,688.5,4.35,2995,  ,2995,982
+Sugar beets ,Germany,2012,1446,628.7,3.7,2326,  ,2326,880
+Sugar beets ,Germany,2011,1053,616.3,2.98,1837,  ,1837,783
+Sugar beets ,Germany,2010,1230,675.6,2.98,2013,  ,2013,783
+Sugar beets ,Germany,2009,877,622.9,2.78,1732,  ,1732,855
+Sugar beets ,Germany,2008,1161,624.3,2.98,1860,  ,1860,699
+Sugar beets ,Germany,2007,1258,577.3,3.29,1899,  ,1899,642
+Sugar beets ,Germany,2006,2330,601.8,4.9,2949,  ,2949,619
+Sugar beets ,Germany,2005,2409,616.5,4.9,3021,  ,3021,612
+Sugar beets ,Germany,2004,2001,532.2,4.91,2613,  ,2613,612
+Sugar beets ,Germany,2003,2207,605.6,4.68,2834,  ,2834,628
+Sugar beets ,Germany,2002,1909,550.1,4.57,2514,  ,2514,605
+Sugar beets ,Germany,2001,2065,605,4.41,2668,  ,2668,603
+Temporary grass,Germany,2022,544,88,7.41,652,  ,652,107
+Temporary grass,Germany,2021,431,71.3,7.4,527,  ,527,96
+Temporary grass,Germany,2020,272,62.7,8.2,463,  ,463,190
+Temporary grass,Germany,2019,174,50.6,8.2,373,  ,373,200
+Temporary grass,Germany,2018,222,76.1,6.8,466,  ,466,244
+Temporary grass,Germany,2017,227,75.5,6.8,462,  ,462,235
+Temporary grass,Germany,2016,180,80.6,6.8,493,  ,493,314
+Temporary grass,Germany,2015,167,80.6,6.8,493,  ,493,327
+Temporary grass,Germany,2014,174,80.8,6.8,495,  ,495,321
+Temporary grass,Germany,2013,125,84.7,6.8,518,  ,518,393
+Temporary grass,Germany,2012,140,79.6,6.8,487,  ,487,347
+Temporary grass,Germany,2011,200,77.1,6.8,472,  ,472,272
+Temporary grass,Germany,2010,211,77.4,6.5,453,  ,453,242
+Temporary grass,Germany,2009,137,80.7,6.5,472,  ,472,335
+Temporary grass,Germany,2008,262,85.4,7.1,546,  ,546,284
+Temporary grass,Germany,2007,234,72.2,7.1,461,  ,461,228
+Temporary grass,Germany,2006,266,86.1,6.5,504,  ,504,238
+Temporary grass,Germany,2005,143,90.9,4.5,368,  ,368,225
+Temporary grass,Germany,2004,367,67.9,9,550,  ,550,183
+Temporary grass,Germany,2003,178,93.9,4.8,406,  ,406,228
+Temporary grass,Germany,2002,203,91.3,4.8,394,  ,394,191
+Temporary grass,Germany,2001,192,88.2,4.8,381,  ,381,189
+Silage maize,Germany,2022,784,401.5,3.2,1285,  ,1285,501
+Silage maize,Germany,2021,728,360.3,3.2,1153,  ,1153,425
+Silage maize,Germany,2020,457,390,2.8,928,  ,928,471
+Silage maize,Germany,2019,318,352.9,2.8,840,  ,840,522
+Silage maize,Germany,2018,587,474.6,2.8,1130,  ,1130,542
+Silage maize,Germany,2017,492,430.8,2.8,1025,  ,1025,534
+Silage maize,Germany,2016,449,413.6,2.8,984,  ,984,535
+Silage maize,Germany,2015,556,473.3,2.8,1126,  ,1126,570
+Silage maize,Germany,2014,404,389.7,2.8,927,  ,927,524
+Silage maize,Germany,2013,550,464.3,2.8,1105,  ,1105,555
+Silage maize,Germany,2012,572,476.1,2.8,1133,  ,1133,561
+Silage maize,Germany,2011,466,393.8,2.8,937,  ,937,471
+Silage maize,Germany,2010,583,445,2.8,1059,  ,1059,476
+Silage maize,Germany,2009,527,451.4,2.8,1074,  ,1074,548
+Silage maize,Germany,2008,796,469.8,3.1,1238,  ,1238,442
+Silage maize,Germany,2007,643,394,3.1,1038,  ,1038,395
+Silage maize,Germany,2006,703,454.3,2.8,1081,  ,1081,378
+Silage maize,Germany,2005,418,438.4,2.1,783,  ,783,365
+Silage maize,Germany,2004,1009,378.5,4.2,1351,  ,1351,342
+Silage maize,Germany,2003,448,454.3,2.1,811,  ,811,363
+Silage maize,Germany,2002,367,443.3,1.9,716,  ,716,349
+Silage maize,Germany,2001,360,449.7,1.9,726,  ,726,366
+Rape,Germany,2022,1920,35,72,2520,  ,2520,600
+Rape,Germany,2021,930,36.8,36.84,1354,  ,1354,423
+Rape,Germany,2020,772,33,35.8,1181,  ,1181,409
+Rape,Germany,2019,524,29.9,34.62,1036,  ,1036,512
+Rape,Germany,2018,566,32.6,33.52,1093,  ,1093,527
+Rape,Germany,2017,746,34.5,36.88,1273,  ,1273,526
+Rape,Germany,2016,768,39,34.46,1344,  ,1344,576
+Rape,Germany,2015,821,44.7,31.82,1422,  ,1422,600
+Rape,Germany,2014,805,39.4,35.36,1393,  ,1393,588
+Rape,Germany,2013,1059,36.9,44.89,1657,  ,1657,598
+Rape,Germany,2012,730,29.2,43.21,1263,  ,1263,533
+Rape,Germany,2011,1076,38.9,41.1,1599,  ,1599,524
+Rape,Germany,2010,607,42.8,25.85,1106,  ,1106,500
+Rape,Germany,2009,773,37.6,36.65,1378,  ,1378,605
+Rape,Germany,2008,800,33.9,36.62,1243,  ,1243,443
+Rape,Germany,2007,493,36.9,24.2,894,  ,894,400
+Rape,Germany,2006,392,37.2,20.21,751,  ,751,359
+Rape,Germany,2005,758,40.6,18.77,763,347,1109,351
+Rape,Germany,2004,746,28.7,24.5,703,346,1050,303
+Rape,Germany,2003,673,29.2,21.33,624,346,970,298
+Rape,Germany,2002,895,36.1,21.45,774,437,1212,317
+Rape,Germany,2001,798,33,18.59,614,494,1108,309
+Sunflower ,Germany,2022,860,26.1,49.27,1286,  ,1286,426
+Sunflower ,Germany,2021,261,20.6,31,639,  ,639,378
+Sunflower ,Germany,2020,211,20.5,29.42,591,  ,591,380
+Sunflower ,Germany,2019,143,18.2,29.16,520,  ,520,378
+Sunflower ,Germany,2018,352,21.9,34.34,737,  ,737,385
+Sunflower ,Germany,2017,345,21.4,34.54,724,  ,724,380
+Sunflower ,Germany,2016,205,19.2,31.92,601,  ,601,396
+Sunflower ,Germany,2015,210,23,31.02,699,  ,699,490
+Sunflower ,Germany,2014,259,21,35.4,729,  ,729,469
+Sunflower ,Germany,2013,492,23.8,41.53,969,  ,969,476
+Sunflower ,Germany,2012,253,19.8,36.21,703,  ,703,450
+Sunflower ,Germany,2011,339,18.9,36.07,668,  ,668,329
+Sunflower ,Germany,2010,171,24.1,20.86,493,  ,493,321
+Sunflower ,Germany,2009,407,19.6,40.1,770,  ,770,363
+Sunflower ,Germany,2008,304,26.5,23.42,608,  ,608,304
+Sunflower ,Germany,2007,135,19.3,21.76,412,  ,412,276
+Sunflower ,Germany,2006,263,24.7,21.76,527,  ,527,264
+Sunflower ,Germany,2005,451,22.1,16.43,356,347,702,251
+Sunflower ,Germany,2004,455,19.8,18.84,366,346,712,257
+Sunflower ,Germany,2003,570,19.9,24.44,477,346,823,253
+Sunflower ,Germany,2002,736,26.5,21.82,567,437,1005,268
+Sunflower ,Germany,2001,713,25.3,19.41,482,494,976,263
+Soya ,Germany,2022,1253,31.2,58.97,1840,  ,1840,587
+Soya ,Germany,2021,627,26.8,45.78,1227,  ,1227,599
+Soya ,Germany,2020,421,32.5,20.43,651,  ,651,229
+Soya ,Germany,2019,250,29.1,19.57,558,  ,558,308
+Soya ,Germany,2018,300,40.7,16.22,647,  ,647,347
+Soya ,Germany,2017,259,39.7,15.57,606,  ,606,347
+Soya ,Germany,2016,151,35.4,15.16,526,  ,526,375
+Soya ,Germany,2015,406,42.7,19.75,826,  ,826,420
+Soya ,Germany,2014,333,36.3,19.94,709,  ,709,376
+Soya ,Germany,2013,519,38.9,24.01,915,  ,915,396
+Soya ,Germany,2012,188,35.6,17.31,604,  ,604,416
+Soya ,Germany,2011,101,30.6,15.95,473,  ,473,372
+Soya ,Germany,2010,82,39.5,11.39,436,  ,436,355
+Soya ,Germany,2009,262,34.5,17.5,586,54,640,377
+Soya ,Germany,2008,349,35.3,17.71,606,  ,660,312
+Soya ,Germany,2007,145,32.6,11.77,372,  ,426,281
+Soya ,Germany,2006,112,38,9.87,364,  ,418,305
+Soya ,Germany,2005,487,41.3,9.99,400,399,799,312
+Soya ,Germany,2004,518,28.8,13.76,384,399,783,265
+Soya ,Germany,2003,467,27.8,12.07,325,399,724,257
+Soya ,Germany,2002,548,34.1,13.03,431,399,830,281
+Soya ,Germany,2001,456,28.9,13,364,399,763,307
+Pasture and meadows,Germany,2022,367,77.9,8.73,680,  ,680,313
+Pasture and meadows,Germany,2021,347,58.5,7.95,462,  ,462,115
+Pasture and meadows,Germany,2020,320,57.5,7.38,425,  ,425,104
+Pasture and meadows,Germany,2019,252,49.2,7.38,363,  ,363,111
+Pasture and meadows,Germany,2018,299,68.2,6.12,417,  ,417,118
+Pasture and meadows,Germany,2017,304,68.3,6.12,418,  ,418,114
+Pasture and meadows,Germany,2016,298,72.6,6.12,444,  ,444,146
+Pasture and meadows,Germany,2015,291,72.6,6.12,444,  ,444,153
+Pasture and meadows,Germany,2014,314,75.8,6.12,464,  ,464,150
+Pasture and meadows,Germany,2013,311,80.1,6.12,490,  ,490,179
+Pasture and meadows,Germany,2012,300,76.3,6.12,467,  ,467,168
+Pasture and meadows,Germany,2011,304,75.4,6.12,462,  ,462,158
+Pasture and meadows,Germany,2010,330,80.8,5.85,473,  ,473,143
+Pasture and meadows,Germany,2009,264,79.1,5.85,463,  ,463,199
+Pasture and meadows,Germany,2008,364,83,6.39,531,  ,531,167
+Pasture and meadows,Germany,2007,381,78,6.39,499,  ,499,118
+Pasture and meadows,Germany,2006,357,84,5.85,491,  ,491,134
+Pasture and meadows,Germany,2005,217,82.1,4.05,333,  ,333,115
+Pasture and meadows,Germany,2004,438,64.6,8.1,523,  ,523,85
+Pasture and meadows,Germany,2003,254,85.8,4.32,371,  ,371,117
+Pasture and meadows,Germany,2002,245,81.6,4.32,353,  ,353,108
+Pasture and meadows,Germany,2001,244,82.6,4.32,357,  ,357,113
diff --git a/docs/notebook-almass-vegetation.jl b/docs/notebook-almass-vegetation.jl
new file mode 100644
index 0000000000000000000000000000000000000000..aa6bac47831f0449f1ce4c738023a4978fd9c33f
--- /dev/null
+++ b/docs/notebook-almass-vegetation.jl
@@ -0,0 +1,1425 @@
+### A Pluto.jl notebook ###
+# v0.19.45
+
+using Markdown
+using InteractiveUtils
+
+# ╔═╡ 1ce4cf02-4d80-11ef-0759-99876c2c9002
+begin
+	using PlutoUI, Unitful, Plots
+	using Unitful: MJ, m, d
+	TableOfContents()
+end
+
+# ╔═╡ 26ad42b4-ec55-4c43-b45a-59fe99e8a067
+md"""
+# ALMaSS vegetation model
+
+Based on the information in ALMaSSVegetationModelling.pdf (https://git.idiv.de/persefone/persefone-model/-/blob/master/docs/ALMaSSVegetationModelling.pdf).
+"""
+
+# ╔═╡ eef634af-2157-4f6d-96de-d01ebb3a80a2
+md"""
+## TODO
+
+- calculation of LAI-green from temperature (using growth curves and GDD)
+  - at the moment daily avg temperature has no effect on LAI-green and hence no 
+    effect on accumulated dry matter
+
+"""
+
+# ╔═╡ 6e2001c5-69cc-4830-8426-a35990c1a03d
+md"""
+## Open questions
+
+- meaning of: radiation vs normal radiation?
+- units of incoming daily radiation? maybe: MJ/m^2/day
+"""
+
+# ╔═╡ 01331c5a-00bd-4504-85ac-d7aec1a0c14d
+md"""
+
+## Variables used in the model
+
+- `ε`: radiation use efficiency (g/MJ)
+- `ϕ`: fraction of incoming light intercepted by crop canopy (0 to 1, no units)
+  - `ϕ(LAI_green(d))`, where `LAI_green(d)` is the green leaf area index (m^2/m^2)
+- `f(T)`: effect of temperature `T` (K or °C) on dry matter growth (no units)
+- `R(d)`: incoming global radiation (MJ/m^2)
+- `p(d)`: effect of fertiliser (no units)
+
+- `LAI_green(d)` is taken from empirical curves, taking into account `gdd`,  
+  `LAI_total` also includes dead leaves
+-  `gdd`: growing-degree-days (unit "K days"),
+  - `gdd(n)=sum(max(0, (max_or_avg_temp(d) - min_growth_temp) for d = 1:n)`
+
+"""
+
+# ╔═╡ f3e009e2-c565-41dc-b35d-096400e867c3
+md"""
+## Accumulated dry matter: W
+"""
+
+# ╔═╡ 6534f518-9465-4bd2-9f74-51a12bdc412f
+md"""
+## Growing-degree days: GDD
+"""
+
+# ╔═╡ 1488ab39-d9f7-48a6-a22c-8ad4a90e17f5
+"""
+	gdd(n): growing-degree days (d K, day Kelvin)
+"""
+function gdd(n::Integer;
+             avg_daily_temperature = d -> 14.0u"°C",
+             min_growth_temperature = 10.0u"°C")
+	# TODO: check if formula is correct
+	g = sum(max(0.0u"K", avg_daily_temperature(d) - min_growth_temperature)
+	        for d = 1:n)
+	return g * 1.0u"d"
+end
+
+# ╔═╡ c489e5c3-24b1-48c8-b587-7e75154722ef
+let
+	x = range(1, 15)
+	# artificial avg daily temperature data
+	avgT = (0.5 * sin.(x).^2 .+ 9.8) * u"°C"
+	min_growth_temperature = 10.0u"°C"
+	y_gdd = ustrip.(gdd.(x; avg_daily_temperature = d -> avgT[d]))
+	y_avgT = ustrip.(avgT)
+	y_minT = [ustrip(min_growth_temperature) for _ in eachindex(x)]
+	p1 = plot(x, y_gdd;
+	          title="Growing-degree days (GDD)",
+	     	  label="GDD (day K)",
+	     	  xlabel="Day number",
+			  xticks=x,
+			  ylabel="Growing-degree days (day K)",
+			  color=:green,
+			  legend=:topleft,
+			  marker=:circle)
+	plot!(twinx(), x, [y_minT y_avgT];
+	      label=["Min growth temperature" "Daily avg temperature"],
+	      ylabel="Daily average temperature (°C)",
+	      legend=:topright,
+		  marker=[:none :circle])
+end
+
+# ╔═╡ 38158dbc-a702-4c86-8cda-6e08c631a22a
+md"""
+## Fraction of intercepted light: ϕ
+"""
+
+# ╔═╡ 5800ddc2-4fcb-452b-901f-7eb510aea4f5
+"""
+	ϕ(LAI_green): fraction of intercepted light (no units, 0 to 1)
+
+Arguments:
+ - `LAI_green`: leaf area index of green leaves (green leaf cover m^2 / ground area m^2)
+"""
+function ϕ(LAI_green)
+	"""
+        k: extinction coefficient (no units), set to k = 0.4 in general
+	"""
+	k = 0.4u"m^2/m^2"
+
+	1 - exp(-k * LAI_green)
+end
+
+# ╔═╡ 41411efa-5ff7-4e79-b6ee-d932b506758c
+let
+	x = range(0, 10, length=100)
+	y = ϕ.(x)
+	plot(x, y;
+		 title="Fraction of light intercepted by green leaves",
+	     label="fraction of intercepted light ϕ",
+	     xlabel="LAI-Green, green leaf area index (leaf cover m^2 / area m^2)",
+		 ylabel="Fraction intercepted light (no units)")
+end
+
+# ╔═╡ 1bef060e-f0cc-4359-941b-9b1e06895fd7
+md"""
+## Incoming daily solar radiation: R
+"""
+
+# ╔═╡ 551ee825-d63c-420c-980c-2d1bbf12dec0
+"""
+	R_Odum(d): normal daily global radiation (MJ m^-2) in Ødum, Denmark
+
+Arguments:
+- `d`: day of the year (1 to 365, no units)
+"""
+function R_Odum(d::Real)
+	# Fourier series approx. for Ødum, Denmark
+	ω = 2π / 365
+	b₀ = 9.478
+	b₁ = -9.221
+	b₂ = 1.458
+	b₃ = 0.653
+	b₄ = -0.421
+
+	return (b₀
+			+ b₁ * cos(ω * d)
+			+ b₂ * sin(ω * d)
+			+ b₃ * cos(2 * ω * d)
+			+ b₄ * sin(2 * ω * d)) * u"MJ/m^2"
+end
+
+# ╔═╡ 5dbf2aac-0cf0-4a15-b1cb-d804eed52a4f
+"""
+	W(n): accumulated dry matter at day `n` (g/m^2)
+
+	W(n :: Integer;
+	  biomass_per_light_energy :: Real,                           # (g/MJ)
+      daily_avg_temperature :: Function{d::Int -> T(d)::Real},    # (°C)
+      LAI_green :: Function{d::Int -> L(d)::Real},                # (no unit)
+      temperature_scaling :: Function{T -> f(T)},                 # (no unit)
+      fertiliser_scaling :: Function{d -> p(d)},                  # (no unit)
+      incoming_radiation :: Function{d -> R(d)})                  # (MJ/m^2)
+
+Formula used:
+	`W(n) = sum(ε * ϕ(L(d)) * f(T(d)) * R(d) * p(d) for d = 1:n)`
+
+Arguments
+- `biomass_per_light_energy`, `ε`
+- `daily_avg_temperature`, `T(d)`
+- `LAI_green`, `L(d)`
+- `temperature_scaling`, `f(T)`
+- `fertiliser_scaling`, `p(d)`
+
+Formula from pdf:
+	`W(n) = sum(ε * ϕ * f(T) * R(d) for d = 1:n)`
+"""
+function W(n::Integer;
+           biomass_per_light_energy = 1.4u"g/MJ",  # ε
+           daily_avg_temperature = d -> 15u"°C",   # T(d)
+		   LAI_green = d -> 5.0u"m^2/m^2",         # L(d)
+		   temperature_scaling = T -> 1.0,         # f(T)
+		   fertiliser_scaling = d -> 1.0,          # p(d)
+		   incoming_radiation = R_Odum)            # R(d)
+	ε = biomass_per_light_energy
+	T = daily_avg_temperature
+	L = LAI_green
+	f = temperature_scaling
+	p = fertiliser_scaling
+	R = incoming_radiation
+	sum(ε *	ϕ(L(d))	* f(T(d)) * R(d) * p(d) for d = 1:n)
+end
+
+# ╔═╡ 3d3fba49-beb0-4521-b787-b3a5455796e0
+# ╠═╡ disabled = true
+#=╠═╡
+let
+	x = range(1, 365, length=365)
+
+	# artificial data for daily avg temperature
+	T(d) = (cos(d * 2π/365 + 0.9π) .* 8 .+ 10) * u"°C"
+	yT = ustrip.(T.(x))
+
+	function L(d)
+		# TODO: assumes 1 <= d <= 365
+		L_start = 0.01
+		L_level = 8.0
+		L_end = 0.01
+		d_rampup = 75
+		d_level = 150
+		d_rampdown = 220
+		d_end = 250
+		return if 0 <= d < d_rampup
+			L_start
+		elseif d_rampup <= d < d_level
+			L_start + (d - d_rampup) * (L_level - L_start) / (d_level - d_rampup)
+		elseif d_level <= d < d_rampdown
+			L_start + L_level
+		elseif d_rampdown <= d < d_end
+			L_start + L_level - (d - d_rampdown) * (L_level - L_end) / (d_end - d_rampdown)
+		elseif d_end <= d <= 365
+			return L_end
+		else
+			error("Illegal day $d, has to be 0 <= d <= 365")
+		end * u"m^2/m^2"
+	end
+	yL = L.(x)
+
+	y = W.(Int.(x);
+		   daily_avg_temperature = T,
+		   incoming_radiation = R_Odum,
+	    )
+	p1 = plot(x, y;
+		 	  title="Accumulated dry matter: W",
+		 	  label="Dry matter in g / m^2",
+		 	  xlabel="Day of the year (1 to 365)",
+		      ylabel="Accumulated dry matter"
+	)
+	p1 = plot!(twinx(), yT;
+			   label="Daily avg temp (°C)",
+		  	   color="red",
+		  	   ylabel="Daily avg temperature (°C)",
+	)
+	p2 = plot(x, yL;
+	          title = "Green leaf area index (LAI-green)",
+	          label = "LAI-green",
+			  xlabel="Day of the year (1 to 365)",
+		      ylabel="LAI-green",
+		      #marker = :circle,
+	)
+	plot(p1, p2; layout=(2,1), size=(600,600))
+end
+  ╠═╡ =#
+
+# ╔═╡ 08624eb0-465b-411d-9706-104382aef0ff
+let
+	x = range(1, 365, length=365)
+	y = R_Odum.(x)
+	plot(x, y;
+		 title="Fourier series approximation to\n" *
+		       "incoming daily radiation in Ødum, Denmark",
+		 label="R: radiation in MJ m^-2",
+		 xlabel="Day of the year (1 to 365)",
+		 ylabel="Incoming daily radiation")
+end
+
+# ╔═╡ 2cf7ef76-1f47-48b0-9d85-0f967d15d537
+
+
+# ╔═╡ 00000000-0000-0000-0000-000000000001
+PLUTO_PROJECT_TOML_CONTENTS = """
+[deps]
+Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
+PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
+Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
+
+[compat]
+Plots = "~1.40.4"
+PlutoUI = "~0.7.59"
+Unitful = "~1.21.0"
+"""
+
+# ╔═╡ 00000000-0000-0000-0000-000000000002
+PLUTO_MANIFEST_TOML_CONTENTS = """
+# This file is machine-generated - editing it directly is not advised
+
+julia_version = "1.10.4"
+manifest_format = "2.0"
+project_hash = "3997c5570c6910da9b4b35c84f95ad83ce6a683d"
+
+[[deps.AbstractPlutoDingetjes]]
+deps = ["Pkg"]
+git-tree-sha1 = "6e1d2a35f2f90a4bc7c2ed98079b2ba09c35b83a"
+uuid = "6e696c72-6542-2067-7265-42206c756150"
+version = "1.3.2"
+
+[[deps.ArgTools]]
+uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
+version = "1.1.1"
+
+[[deps.Artifacts]]
+uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
+
+[[deps.Base64]]
+uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
+
+[[deps.BitFlags]]
+git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d"
+uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35"
+version = "0.1.9"
+
+[[deps.Bzip2_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd"
+uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
+version = "1.0.8+1"
+
+[[deps.Cairo_jll]]
+deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"]
+git-tree-sha1 = "a2f1c8c668c8e3cb4cca4e57a8efdb09067bb3fd"
+uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a"
+version = "1.18.0+2"
+
+[[deps.CodecZlib]]
+deps = ["TranscodingStreams", "Zlib_jll"]
+git-tree-sha1 = "bce6804e5e6044c6daab27bb533d1295e4a2e759"
+uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
+version = "0.7.6"
+
+[[deps.ColorSchemes]]
+deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"]
+git-tree-sha1 = "b5278586822443594ff615963b0c09755771b3e0"
+uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
+version = "3.26.0"
+
+[[deps.ColorTypes]]
+deps = ["FixedPointNumbers", "Random"]
+git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d"
+uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
+version = "0.11.5"
+
+[[deps.ColorVectorSpace]]
+deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"]
+git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249"
+uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4"
+version = "0.10.0"
+
+    [deps.ColorVectorSpace.extensions]
+    SpecialFunctionsExt = "SpecialFunctions"
+
+    [deps.ColorVectorSpace.weakdeps]
+    SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b"
+
+[[deps.Colors]]
+deps = ["ColorTypes", "FixedPointNumbers", "Reexport"]
+git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0"
+uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
+version = "0.12.11"
+
+[[deps.Compat]]
+deps = ["TOML", "UUIDs"]
+git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215"
+uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
+version = "4.16.0"
+weakdeps = ["Dates", "LinearAlgebra"]
+
+    [deps.Compat.extensions]
+    CompatLinearAlgebraExt = "LinearAlgebra"
+
+[[deps.CompilerSupportLibraries_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
+version = "1.1.1+0"
+
+[[deps.ConcurrentUtilities]]
+deps = ["Serialization", "Sockets"]
+git-tree-sha1 = "ea32b83ca4fefa1768dc84e504cc0a94fb1ab8d1"
+uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb"
+version = "2.4.2"
+
+[[deps.Contour]]
+git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8"
+uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
+version = "0.6.3"
+
+[[deps.DataAPI]]
+git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe"
+uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
+version = "1.16.0"
+
+[[deps.DataStructures]]
+deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
+git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82"
+uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
+version = "0.18.20"
+
+[[deps.Dates]]
+deps = ["Printf"]
+uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
+
+[[deps.Dbus_jll]]
+deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "fc173b380865f70627d7dd1190dc2fce6cc105af"
+uuid = "ee1fde0b-3d02-5ea6-8484-8dfef6360eab"
+version = "1.14.10+0"
+
+[[deps.DelimitedFiles]]
+deps = ["Mmap"]
+git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae"
+uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
+version = "1.9.1"
+
+[[deps.DocStringExtensions]]
+deps = ["LibGit2"]
+git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d"
+uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
+version = "0.9.3"
+
+[[deps.Downloads]]
+deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
+uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
+version = "1.6.0"
+
+[[deps.EpollShim_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "8e9441ee83492030ace98f9789a654a6d0b1f643"
+uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43"
+version = "0.0.20230411+0"
+
+[[deps.ExceptionUnwrapping]]
+deps = ["Test"]
+git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a"
+uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4"
+version = "0.1.10"
+
+[[deps.Expat_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7"
+uuid = "2e619515-83b5-522b-bb60-26c02a35a201"
+version = "2.6.2+0"
+
+[[deps.FFMPEG]]
+deps = ["FFMPEG_jll"]
+git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8"
+uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a"
+version = "0.4.1"
+
+[[deps.FFMPEG_jll]]
+deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
+git-tree-sha1 = "466d45dc38e15794ec7d5d63ec03d776a9aff36e"
+uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
+version = "4.4.4+1"
+
+[[deps.FileWatching]]
+uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
+
+[[deps.FixedPointNumbers]]
+deps = ["Statistics"]
+git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172"
+uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
+version = "0.8.5"
+
+[[deps.Fontconfig_jll]]
+deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"]
+git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23"
+uuid = "a3f928ae-7b40-5064-980b-68af3947d34b"
+version = "2.13.96+0"
+
+[[deps.Format]]
+git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc"
+uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8"
+version = "1.3.7"
+
+[[deps.FreeType2_jll]]
+deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"]
+git-tree-sha1 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc"
+uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
+version = "2.13.2+0"
+
+[[deps.FriBidi_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "1ed150b39aebcc805c26b93a8d0122c940f64ce2"
+uuid = "559328eb-81f9-559d-9380-de523a88c83c"
+version = "1.0.14+0"
+
+[[deps.GLFW_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll", "libdecor_jll", "xkbcommon_jll"]
+git-tree-sha1 = "3f74912a156096bd8fdbef211eff66ab446e7297"
+uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89"
+version = "3.4.0+0"
+
+[[deps.GR]]
+deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"]
+git-tree-sha1 = "3437ade7073682993e092ca570ad68a2aba26983"
+uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71"
+version = "0.73.3"
+
+[[deps.GR_jll]]
+deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"]
+git-tree-sha1 = "a96d5c713e6aa28c242b0d25c1347e258d6541ab"
+uuid = "d2c73de3-f751-5644-a686-071e5b155ba9"
+version = "0.73.3+0"
+
+[[deps.Gettext_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"]
+git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046"
+uuid = "78b55507-aeef-58d4-861c-77aaff3498b1"
+version = "0.21.0+0"
+
+[[deps.Glib_jll]]
+deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"]
+git-tree-sha1 = "7c82e6a6cd34e9d935e9aa4051b66c6ff3af59ba"
+uuid = "7746bdde-850d-59dc-9ae8-88ece973131d"
+version = "2.80.2+0"
+
+[[deps.Graphite2_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011"
+uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472"
+version = "1.3.14+0"
+
+[[deps.Grisu]]
+git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2"
+uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe"
+version = "1.0.2"
+
+[[deps.HTTP]]
+deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"]
+git-tree-sha1 = "d1d712be3164d61d1fb98e7ce9bcbc6cc06b45ed"
+uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
+version = "1.10.8"
+
+[[deps.HarfBuzz_jll]]
+deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"]
+git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3"
+uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566"
+version = "2.8.1+1"
+
+[[deps.Hyperscript]]
+deps = ["Test"]
+git-tree-sha1 = "179267cfa5e712760cd43dcae385d7ea90cc25a4"
+uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91"
+version = "0.0.5"
+
+[[deps.HypertextLiteral]]
+deps = ["Tricks"]
+git-tree-sha1 = "7134810b1afce04bbc1045ca1985fbe81ce17653"
+uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2"
+version = "0.9.5"
+
+[[deps.IOCapture]]
+deps = ["Logging", "Random"]
+git-tree-sha1 = "b6d6bfdd7ce25b0f9b2f6b3dd56b2673a66c8770"
+uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
+version = "0.2.5"
+
+[[deps.InteractiveUtils]]
+deps = ["Markdown"]
+uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
+
+[[deps.IrrationalConstants]]
+git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2"
+uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
+version = "0.2.2"
+
+[[deps.JLFzf]]
+deps = ["Pipe", "REPL", "Random", "fzf_jll"]
+git-tree-sha1 = "a53ebe394b71470c7f97c2e7e170d51df21b17af"
+uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c"
+version = "0.1.7"
+
+[[deps.JLLWrappers]]
+deps = ["Artifacts", "Preferences"]
+git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca"
+uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
+version = "1.5.0"
+
+[[deps.JSON]]
+deps = ["Dates", "Mmap", "Parsers", "Unicode"]
+git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a"
+uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
+version = "0.21.4"
+
+[[deps.JpegTurbo_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "c84a835e1a09b289ffcd2271bf2a337bbdda6637"
+uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8"
+version = "3.0.3+0"
+
+[[deps.LAME_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd"
+uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
+version = "3.100.2+0"
+
+[[deps.LERC_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434"
+uuid = "88015f11-f218-50d7-93a8-a6af411a945d"
+version = "3.0.0+1"
+
+[[deps.LLVMOpenMP_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713"
+uuid = "1d63c593-3942-5779-bab2-d838dc0a180e"
+version = "15.0.7+0"
+
+[[deps.LZO_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "70c5da094887fd2cae843b8db33920bac4b6f07d"
+uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac"
+version = "2.10.2+0"
+
+[[deps.LaTeXStrings]]
+git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec"
+uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
+version = "1.3.1"
+
+[[deps.Latexify]]
+deps = ["Format", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"]
+git-tree-sha1 = "ce5f5621cac23a86011836badfedf664a612cee4"
+uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
+version = "0.16.5"
+
+    [deps.Latexify.extensions]
+    DataFramesExt = "DataFrames"
+    SparseArraysExt = "SparseArrays"
+    SymEngineExt = "SymEngine"
+
+    [deps.Latexify.weakdeps]
+    DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
+    SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
+    SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8"
+
+[[deps.LibCURL]]
+deps = ["LibCURL_jll", "MozillaCACerts_jll"]
+uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
+version = "0.6.4"
+
+[[deps.LibCURL_jll]]
+deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
+uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
+version = "8.4.0+0"
+
+[[deps.LibGit2]]
+deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"]
+uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
+
+[[deps.LibGit2_jll]]
+deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"]
+uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5"
+version = "1.6.4+0"
+
+[[deps.LibSSH2_jll]]
+deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
+uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
+version = "1.11.0+1"
+
+[[deps.Libdl]]
+uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
+
+[[deps.Libffi_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290"
+uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490"
+version = "3.2.2+1"
+
+[[deps.Libgcrypt_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"]
+git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673"
+uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4"
+version = "1.8.11+0"
+
+[[deps.Libglvnd_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"]
+git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733"
+uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29"
+version = "1.6.0+0"
+
+[[deps.Libgpg_error_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "fbb1f2bef882392312feb1ede3615ddc1e9b99ed"
+uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8"
+version = "1.49.0+0"
+
+[[deps.Libiconv_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175"
+uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531"
+version = "1.17.0+0"
+
+[[deps.Libmount_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e"
+uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9"
+version = "2.40.1+0"
+
+[[deps.Libtiff_jll]]
+deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"]
+git-tree-sha1 = "2da088d113af58221c52828a80378e16be7d037a"
+uuid = "89763e89-9b03-5906-acba-b20f662cd828"
+version = "4.5.1+1"
+
+[[deps.Libuuid_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807"
+uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700"
+version = "2.40.1+0"
+
+[[deps.LinearAlgebra]]
+deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"]
+uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
+
+[[deps.LogExpFunctions]]
+deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"]
+git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea"
+uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
+version = "0.3.28"
+
+    [deps.LogExpFunctions.extensions]
+    LogExpFunctionsChainRulesCoreExt = "ChainRulesCore"
+    LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables"
+    LogExpFunctionsInverseFunctionsExt = "InverseFunctions"
+
+    [deps.LogExpFunctions.weakdeps]
+    ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+    ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0"
+    InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
+
+[[deps.Logging]]
+uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
+
+[[deps.LoggingExtras]]
+deps = ["Dates", "Logging"]
+git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075"
+uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36"
+version = "1.0.3"
+
+[[deps.MIMEs]]
+git-tree-sha1 = "65f28ad4b594aebe22157d6fac869786a255b7eb"
+uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65"
+version = "0.1.4"
+
+[[deps.MacroTools]]
+deps = ["Markdown", "Random"]
+git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df"
+uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
+version = "0.5.13"
+
+[[deps.Markdown]]
+deps = ["Base64"]
+uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
+
+[[deps.MbedTLS]]
+deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"]
+git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf"
+uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
+version = "1.1.9"
+
+[[deps.MbedTLS_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
+version = "2.28.2+1"
+
+[[deps.Measures]]
+git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102"
+uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e"
+version = "0.3.2"
+
+[[deps.Missings]]
+deps = ["DataAPI"]
+git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d"
+uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
+version = "1.2.0"
+
+[[deps.Mmap]]
+uuid = "a63ad114-7e13-5084-954f-fe012c677804"
+
+[[deps.MozillaCACerts_jll]]
+uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
+version = "2023.1.10"
+
+[[deps.NaNMath]]
+deps = ["OpenLibm_jll"]
+git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4"
+uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
+version = "1.0.2"
+
+[[deps.NetworkOptions]]
+uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
+version = "1.2.0"
+
+[[deps.Ogg_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f"
+uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
+version = "1.3.5+1"
+
+[[deps.OpenBLAS_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
+uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
+version = "0.3.23+4"
+
+[[deps.OpenLibm_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
+version = "0.8.1+2"
+
+[[deps.OpenSSL]]
+deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"]
+git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4"
+uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c"
+version = "1.4.3"
+
+[[deps.OpenSSL_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "a028ee3cb5641cccc4c24e90c36b0a4f7707bdf5"
+uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
+version = "3.0.14+0"
+
+[[deps.Opus_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720"
+uuid = "91d4177d-7536-5919-b921-800302f37372"
+version = "1.3.2+0"
+
+[[deps.OrderedCollections]]
+git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5"
+uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
+version = "1.6.3"
+
+[[deps.PCRE2_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15"
+version = "10.42.0+1"
+
+[[deps.Pango_jll]]
+deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "cb5a2ab6763464ae0f19c86c56c63d4a2b0f5bda"
+uuid = "36c8627f-9965-5494-a995-c6b170f724f3"
+version = "1.52.2+0"
+
+[[deps.Parsers]]
+deps = ["Dates", "PrecompileTools", "UUIDs"]
+git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821"
+uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
+version = "2.8.1"
+
+[[deps.Pipe]]
+git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d"
+uuid = "b98c9c47-44ae-5843-9183-064241ee97a0"
+version = "1.3.0"
+
+[[deps.Pixman_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"]
+git-tree-sha1 = "35621f10a7531bc8fa58f74610b1bfb70a3cfc6b"
+uuid = "30392449-352a-5448-841d-b1acce4e97dc"
+version = "0.43.4+0"
+
+[[deps.Pkg]]
+deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
+uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
+version = "1.10.0"
+
+[[deps.PlotThemes]]
+deps = ["PlotUtils", "Statistics"]
+git-tree-sha1 = "1f03a2d339f42dca4a4da149c7e15e9b896ad899"
+uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a"
+version = "3.1.0"
+
+[[deps.PlotUtils]]
+deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"]
+git-tree-sha1 = "7b1a9df27f072ac4c9c7cbe5efb198489258d1f5"
+uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
+version = "1.4.1"
+
+[[deps.Plots]]
+deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "PrecompileTools", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"]
+git-tree-sha1 = "442e1e7ac27dd5ff8825c3fa62fbd1e86397974b"
+uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
+version = "1.40.4"
+
+    [deps.Plots.extensions]
+    FileIOExt = "FileIO"
+    GeometryBasicsExt = "GeometryBasics"
+    IJuliaExt = "IJulia"
+    ImageInTerminalExt = "ImageInTerminal"
+    UnitfulExt = "Unitful"
+
+    [deps.Plots.weakdeps]
+    FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
+    GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326"
+    IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a"
+    ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254"
+    Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
+
+[[deps.PlutoUI]]
+deps = ["AbstractPlutoDingetjes", "Base64", "ColorTypes", "Dates", "FixedPointNumbers", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "MIMEs", "Markdown", "Random", "Reexport", "URIs", "UUIDs"]
+git-tree-sha1 = "ab55ee1510ad2af0ff674dbcced5e94921f867a9"
+uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
+version = "0.7.59"
+
+[[deps.PrecompileTools]]
+deps = ["Preferences"]
+git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f"
+uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
+version = "1.2.1"
+
+[[deps.Preferences]]
+deps = ["TOML"]
+git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6"
+uuid = "21216c6a-2e73-6563-6e65-726566657250"
+version = "1.4.3"
+
+[[deps.Printf]]
+deps = ["Unicode"]
+uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
+
+[[deps.Qt6Base_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Vulkan_Loader_jll", "Xorg_libSM_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_cursor_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "libinput_jll", "xkbcommon_jll"]
+git-tree-sha1 = "37b7bb7aabf9a085e0044307e1717436117f2b3b"
+uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56"
+version = "6.5.3+1"
+
+[[deps.REPL]]
+deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
+uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
+
+[[deps.Random]]
+deps = ["SHA"]
+uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
+
+[[deps.RecipesBase]]
+deps = ["PrecompileTools"]
+git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff"
+uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
+version = "1.3.4"
+
+[[deps.RecipesPipeline]]
+deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"]
+git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342"
+uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c"
+version = "0.6.12"
+
+[[deps.Reexport]]
+git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
+uuid = "189a3867-3050-52da-a836-e630ba90ab69"
+version = "1.2.2"
+
+[[deps.RelocatableFolders]]
+deps = ["SHA", "Scratch"]
+git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864"
+uuid = "05181044-ff0b-4ac5-8273-598c1e38db00"
+version = "1.0.1"
+
+[[deps.Requires]]
+deps = ["UUIDs"]
+git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7"
+uuid = "ae029012-a4dd-5104-9daa-d747884805df"
+version = "1.3.0"
+
+[[deps.SHA]]
+uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
+version = "0.7.0"
+
+[[deps.Scratch]]
+deps = ["Dates"]
+git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386"
+uuid = "6c6a2e73-6563-6170-7368-637461726353"
+version = "1.2.1"
+
+[[deps.Serialization]]
+uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
+
+[[deps.Showoff]]
+deps = ["Dates", "Grisu"]
+git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de"
+uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f"
+version = "1.0.3"
+
+[[deps.SimpleBufferStream]]
+git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1"
+uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7"
+version = "1.1.0"
+
+[[deps.Sockets]]
+uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
+
+[[deps.SortingAlgorithms]]
+deps = ["DataStructures"]
+git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085"
+uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
+version = "1.2.1"
+
+[[deps.SparseArrays]]
+deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"]
+uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
+version = "1.10.0"
+
+[[deps.Statistics]]
+deps = ["LinearAlgebra", "SparseArrays"]
+uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
+version = "1.10.0"
+
+[[deps.StatsAPI]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed"
+uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
+version = "1.7.0"
+
+[[deps.StatsBase]]
+deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
+git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21"
+uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
+version = "0.34.3"
+
+[[deps.SuiteSparse_jll]]
+deps = ["Artifacts", "Libdl", "libblastrampoline_jll"]
+uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c"
+version = "7.2.1+1"
+
+[[deps.TOML]]
+deps = ["Dates"]
+uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
+version = "1.0.3"
+
+[[deps.Tar]]
+deps = ["ArgTools", "SHA"]
+uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
+version = "1.10.0"
+
+[[deps.TensorCore]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6"
+uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50"
+version = "0.1.1"
+
+[[deps.Test]]
+deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
+uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[[deps.TranscodingStreams]]
+git-tree-sha1 = "e84b3a11b9bece70d14cce63406bbc79ed3464d2"
+uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
+version = "0.11.2"
+
+[[deps.Tricks]]
+git-tree-sha1 = "7822b97e99a1672bfb1b49b668a6d46d58d8cbcb"
+uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775"
+version = "0.1.9"
+
+[[deps.URIs]]
+git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b"
+uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
+version = "1.5.1"
+
+[[deps.UUIDs]]
+deps = ["Random", "SHA"]
+uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
+
+[[deps.Unicode]]
+uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
+
+[[deps.UnicodeFun]]
+deps = ["REPL"]
+git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf"
+uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1"
+version = "0.4.1"
+
+[[deps.Unitful]]
+deps = ["Dates", "LinearAlgebra", "Random"]
+git-tree-sha1 = "d95fe458f26209c66a187b1114df96fd70839efd"
+uuid = "1986cc42-f94f-5a68-af5c-568840ba703d"
+version = "1.21.0"
+
+    [deps.Unitful.extensions]
+    ConstructionBaseUnitfulExt = "ConstructionBase"
+    InverseFunctionsUnitfulExt = "InverseFunctions"
+
+    [deps.Unitful.weakdeps]
+    ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
+    InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
+
+[[deps.UnitfulLatexify]]
+deps = ["LaTeXStrings", "Latexify", "Unitful"]
+git-tree-sha1 = "e2d817cc500e960fdbafcf988ac8436ba3208bfd"
+uuid = "45397f5d-5981-4c77-b2b3-fc36d6e9b728"
+version = "1.6.3"
+
+[[deps.Unzip]]
+git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78"
+uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d"
+version = "0.2.0"
+
+[[deps.Vulkan_Loader_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Wayland_jll", "Xorg_libX11_jll", "Xorg_libXrandr_jll", "xkbcommon_jll"]
+git-tree-sha1 = "2f0486047a07670caad3a81a075d2e518acc5c59"
+uuid = "a44049a8-05dd-5a78-86c9-5fde0876e88c"
+version = "1.3.243+0"
+
+[[deps.Wayland_jll]]
+deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"]
+git-tree-sha1 = "7558e29847e99bc3f04d6569e82d0f5c54460703"
+uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89"
+version = "1.21.0+1"
+
+[[deps.Wayland_protocols_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "93f43ab61b16ddfb2fd3bb13b3ce241cafb0e6c9"
+uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91"
+version = "1.31.0+0"
+
+[[deps.XML2_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"]
+git-tree-sha1 = "d9717ce3518dc68a99e6b96300813760d887a01d"
+uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a"
+version = "2.13.1+0"
+
+[[deps.XSLT_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "XML2_jll", "Zlib_jll"]
+git-tree-sha1 = "a54ee957f4c86b526460a720dbc882fa5edcbefc"
+uuid = "aed1982a-8fda-507f-9586-7b0439959a61"
+version = "1.1.41+0"
+
+[[deps.XZ_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "ac88fb95ae6447c8dda6a5503f3bafd496ae8632"
+uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800"
+version = "5.4.6+0"
+
+[[deps.Xorg_libICE_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "326b4fea307b0b39892b3e85fa451692eda8d46c"
+uuid = "f67eecfb-183a-506d-b269-f58e52b52d7c"
+version = "1.1.1+0"
+
+[[deps.Xorg_libSM_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libICE_jll"]
+git-tree-sha1 = "3796722887072218eabafb494a13c963209754ce"
+uuid = "c834827a-8449-5923-a945-d239c165b7dd"
+version = "1.2.4+0"
+
+[[deps.Xorg_libX11_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"]
+git-tree-sha1 = "afead5aba5aa507ad5a3bf01f58f82c8d1403495"
+uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc"
+version = "1.8.6+0"
+
+[[deps.Xorg_libXau_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8"
+uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec"
+version = "1.0.11+0"
+
+[[deps.Xorg_libXcursor_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"]
+git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd"
+uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724"
+version = "1.2.0+4"
+
+[[deps.Xorg_libXdmcp_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7"
+uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05"
+version = "1.1.4+0"
+
+[[deps.Xorg_libXext_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"]
+git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85"
+uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3"
+version = "1.3.6+0"
+
+[[deps.Xorg_libXfixes_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
+git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4"
+uuid = "d091e8ba-531a-589c-9de9-94069b037ed8"
+version = "5.0.3+4"
+
+[[deps.Xorg_libXi_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"]
+git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246"
+uuid = "a51aa0fd-4e3c-5386-b890-e753decda492"
+version = "1.7.10+4"
+
+[[deps.Xorg_libXinerama_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"]
+git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123"
+uuid = "d1454406-59df-5ea1-beac-c340f2130bc3"
+version = "1.1.4+4"
+
+[[deps.Xorg_libXrandr_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"]
+git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631"
+uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484"
+version = "1.5.2+4"
+
+[[deps.Xorg_libXrender_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"]
+git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe"
+uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa"
+version = "0.9.11+0"
+
+[[deps.Xorg_libpthread_stubs_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9"
+uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74"
+version = "0.1.1+0"
+
+[[deps.Xorg_libxcb_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"]
+git-tree-sha1 = "bcd466676fef0878338c61e655629fa7bbc69d8e"
+uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b"
+version = "1.17.0+0"
+
+[[deps.Xorg_libxkbfile_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"]
+git-tree-sha1 = "730eeca102434283c50ccf7d1ecdadf521a765a4"
+uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a"
+version = "1.1.2+0"
+
+[[deps.Xorg_xcb_util_cursor_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_jll", "Xorg_xcb_util_renderutil_jll"]
+git-tree-sha1 = "04341cb870f29dcd5e39055f895c39d016e18ccd"
+uuid = "e920d4aa-a673-5f3a-b3d7-f755a4d47c43"
+version = "0.1.4+0"
+
+[[deps.Xorg_xcb_util_image_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
+git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97"
+uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b"
+version = "0.4.0+1"
+
+[[deps.Xorg_xcb_util_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"]
+git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1"
+uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5"
+version = "0.4.0+1"
+
+[[deps.Xorg_xcb_util_keysyms_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
+git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00"
+uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7"
+version = "0.4.0+1"
+
+[[deps.Xorg_xcb_util_renderutil_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
+git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e"
+uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e"
+version = "0.3.9+1"
+
+[[deps.Xorg_xcb_util_wm_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
+git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67"
+uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361"
+version = "0.4.1+1"
+
+[[deps.Xorg_xkbcomp_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"]
+git-tree-sha1 = "330f955bc41bb8f5270a369c473fc4a5a4e4d3cb"
+uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4"
+version = "1.4.6+0"
+
+[[deps.Xorg_xkeyboard_config_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"]
+git-tree-sha1 = "691634e5453ad362044e2ad653e79f3ee3bb98c3"
+uuid = "33bec58e-1273-512f-9401-5d533626f822"
+version = "2.39.0+0"
+
+[[deps.Xorg_xtrans_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77"
+uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10"
+version = "1.5.0+0"
+
+[[deps.Zlib_jll]]
+deps = ["Libdl"]
+uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
+version = "1.2.13+1"
+
+[[deps.Zstd_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b"
+uuid = "3161d3a3-bdf6-5164-811a-617609db77b4"
+version = "1.5.6+0"
+
+[[deps.eudev_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "gperf_jll"]
+git-tree-sha1 = "431b678a28ebb559d224c0b6b6d01afce87c51ba"
+uuid = "35ca27e7-8b34-5b7f-bca9-bdc33f59eb06"
+version = "3.2.9+0"
+
+[[deps.fzf_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "a68c9655fbe6dfcab3d972808f1aafec151ce3f8"
+uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09"
+version = "0.43.0+0"
+
+[[deps.gperf_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "3516a5630f741c9eecb3720b1ec9d8edc3ecc033"
+uuid = "1a1c6b14-54f6-533d-8383-74cd7377aa70"
+version = "3.1.1+0"
+
+[[deps.libaom_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "1827acba325fdcdf1d2647fc8d5301dd9ba43a9d"
+uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b"
+version = "3.9.0+0"
+
+[[deps.libass_jll]]
+deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
+git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47"
+uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0"
+version = "0.15.1+0"
+
+[[deps.libblastrampoline_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
+version = "5.8.0+1"
+
+[[deps.libdecor_jll]]
+deps = ["Artifacts", "Dbus_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pango_jll", "Wayland_jll", "xkbcommon_jll"]
+git-tree-sha1 = "9bf7903af251d2050b467f76bdbe57ce541f7f4f"
+uuid = "1183f4f0-6f2a-5f1a-908b-139f9cdfea6f"
+version = "0.2.2+0"
+
+[[deps.libevdev_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "141fe65dc3efabb0b1d5ba74e91f6ad26f84cc22"
+uuid = "2db6ffa8-e38f-5e21-84af-90c45d0032cc"
+version = "1.11.0+0"
+
+[[deps.libfdk_aac_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55"
+uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280"
+version = "2.0.2+0"
+
+[[deps.libinput_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "eudev_jll", "libevdev_jll", "mtdev_jll"]
+git-tree-sha1 = "ad50e5b90f222cfe78aa3d5183a20a12de1322ce"
+uuid = "36db933b-70db-51c0-b978-0f229ee0e533"
+version = "1.18.0+0"
+
+[[deps.libpng_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"]
+git-tree-sha1 = "d7015d2e18a5fd9a4f47de711837e980519781a4"
+uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f"
+version = "1.6.43+1"
+
+[[deps.libvorbis_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"]
+git-tree-sha1 = "490376214c4721cdaca654041f635213c6165cb3"
+uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a"
+version = "1.3.7+2"
+
+[[deps.mtdev_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "814e154bdb7be91d78b6802843f76b6ece642f11"
+uuid = "009596ad-96f7-51b1-9f1b-5ce2d5e8a71e"
+version = "1.1.6+0"
+
+[[deps.nghttp2_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
+version = "1.52.0+1"
+
+[[deps.p7zip_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
+version = "17.4.0+2"
+
+[[deps.x264_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2"
+uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a"
+version = "2021.5.5+0"
+
+[[deps.x265_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9"
+uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
+version = "3.5.0+0"
+
+[[deps.xkbcommon_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"]
+git-tree-sha1 = "9c304562909ab2bab0262639bd4f444d7bc2be37"
+uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd"
+version = "1.4.1+1"
+"""
+
+# ╔═╡ Cell order:
+# ╟─26ad42b4-ec55-4c43-b45a-59fe99e8a067
+# ╟─eef634af-2157-4f6d-96de-d01ebb3a80a2
+# ╟─6e2001c5-69cc-4830-8426-a35990c1a03d
+# ╟─01331c5a-00bd-4504-85ac-d7aec1a0c14d
+# ╠═1ce4cf02-4d80-11ef-0759-99876c2c9002
+# ╟─f3e009e2-c565-41dc-b35d-096400e867c3
+# ╠═5dbf2aac-0cf0-4a15-b1cb-d804eed52a4f
+# ╠═3d3fba49-beb0-4521-b787-b3a5455796e0
+# ╟─6534f518-9465-4bd2-9f74-51a12bdc412f
+# ╠═1488ab39-d9f7-48a6-a22c-8ad4a90e17f5
+# ╠═c489e5c3-24b1-48c8-b587-7e75154722ef
+# ╟─38158dbc-a702-4c86-8cda-6e08c631a22a
+# ╠═5800ddc2-4fcb-452b-901f-7eb510aea4f5
+# ╠═41411efa-5ff7-4e79-b6ee-d932b506758c
+# ╟─1bef060e-f0cc-4359-941b-9b1e06895fd7
+# ╠═551ee825-d63c-420c-980c-2d1bbf12dec0
+# ╠═08624eb0-465b-411d-9706-104382aef0ff
+# ╠═2cf7ef76-1f47-48b0-9d85-0f967d15d537
+# ╟─00000000-0000-0000-0000-000000000001
+# ╟─00000000-0000-0000-0000-000000000002
diff --git a/src/Persefone.jl b/src/Persefone.jl
index 96606884cbb3cacc9c2213399a02f584ec8de1c4..f5aa7b43f3baebe84b6d0b7b38548b558522f12a 100644
--- a/src/Persefone.jl
+++ b/src/Persefone.jl
@@ -95,6 +95,8 @@ export
     @walk,
     @follow,
     @destroynest,
+    @sow,
+    @harvest,
     #functions
     simulate,
     simulate!,
@@ -147,6 +149,7 @@ include("crop/almass.jl")
 include("crop/simplecrop.jl")
 
 include("farm/farm.jl")
+include("farm/farmdata.jl")
 
 include("nature/insects.jl")
 include("nature/energy.jl")
diff --git a/src/analysis/makieplots.jl b/src/analysis/makieplots.jl
index fd92184ef022a3e6d32e76153034a7ff72cd2bf7..70ba8ce93fbeab50d95d77cec4c3be01d910ebe5 100644
--- a/src/analysis/makieplots.jl
+++ b/src/analysis/makieplots.jl
@@ -59,9 +59,9 @@ function populationtrends(model::SimulationModel)
     update_theme!(palette=(color=cgrad(:seaborn_bright, ncolors),), cycle=[:color])
     f = Figure()
     dates = @param(core.startdate):@param(core.enddate)
-    axlimits = (1, length(dates), 0, maximum(pops[!,:Abundance]))
+    axlimits = (1, length(dates), 0, maximum(pops[!,:Abundance])*1.1)
     ax = Axis(f[1,1], xlabel="Date", ylabel="Population size",
-              limits=axlimits, xticks=gettickmarks(dates))
+              limits=axlimits, xticks=datetickmarks(dates))
     for s in @param(nature.targetspecies)
         points = @select!(@subset(pops, :Species .== s), :Abundance)
         iszero(size(points)[1]) && continue
@@ -84,7 +84,7 @@ function skylarkpopulation(model::SimulationModel)
     dates = @param(core.startdate):@param(core.enddate)
     axlimits = (1, length(dates), 0, maximum(pops[!,:TotalAbundance]))
     ax = Axis(f[1,1], xlabel="Date", ylabel="Population size",
-              limits=axlimits, xticks=gettickmarks(dates))
+              limits=axlimits, xticks=datetickmarks(dates))
     lines!(f[1,1], Vector{Float32}(pops.TotalAbundance), linewidth=3, label="Total abundance")
     lines!(f[1,1], Vector{Float32}(pops.Mating), linewidth=3, label="Mating")
     lines!(f[1,1], Vector{Float32}(pops.Breeding), linewidth=3, label="Breeding")
@@ -126,12 +126,45 @@ function skylarkstats(model::SimulationModel)
 end
 
 """
-    gettickmarks(dates)
+    croptrends(model)
+
+Plot a dual line graph of cropped area and average plant height per crop over time.
+Returns a Makie figure object.
+"""
+function croptrends(model::SimulationModel)
+    cropdata = @data("fields")
+    f = Figure(size=(1200,1000))
+    dates = @param(core.startdate):@param(core.enddate)
+    # plot cropped area over time
+    axlimitsarea = (1, length(dates), 0, maximum(cropdata[!,:Area])*1.1)
+    ax1 = Axis(f[1,1], xlabel="Date", ylabel="Cropped area (ha)",
+              limits=axlimitsarea, xticks=datetickmarks(dates))
+    for c in unique(cropdata.Crop)
+        points = @select!(@subset(cropdata, :Crop .== c), :Area)
+        (iszero(size(points)[1]) || iszero(sum(points.Area))) && continue
+        lines!(f[1,1], Vector{Float32}(points.Area), linewidth=3, label=c)
+    end
+    axislegend("Crop"; position=:rt)
+    # plot average crop height over time
+    axlimitsheight = (1, length(dates), 0, maximum(cropdata[!,:Height])*1.1)
+    ax2 = Axis(f[2,1], xlabel="Date", ylabel="Average plant height (cm)",
+              limits=axlimitsheight, xticks=datetickmarks(dates))
+    for c in unique(cropdata.Crop)
+        points = @select!(@subset(cropdata, :Crop .== c), :Height)
+        (iszero(size(points)[1]) || iszero(sum(points.Height))) && c != "no growth" && continue
+        lines!(f[2,1], Vector{Float32}(points.Height), linewidth=3, label=c)
+    end
+    axislegend("Crop"; position=:rt)
+    f
+end
+
+"""
+    datetickmarks(dates)
 
 Given a vector of dates, construct a selection to use as tick mark locations.
 Helper function for `[populationtrends](@ref)`
 """
-function gettickmarks(dates)
+function datetickmarks(dates)
     ticks = (Int[], String[])
     for i in 1:length(dates)
         if Day(dates[i]) == Day(1)
@@ -147,5 +180,3 @@ function gettickmarks(dates)
 end
 
 #XXX add animation with record()? https://docs.makie.org/stable/explanations/animation/
-
-#TODO causes of mortality, nesting habitats, territory sizes
diff --git a/src/core/output.jl b/src/core/output.jl
index 40dad75cc22facf77c859cb0d5fafa33a17c0a8e..4b3fd9712dba0b15a4d3bc97c324446368522479 100644
--- a/src/core/output.jl
+++ b/src/core/output.jl
@@ -257,7 +257,7 @@ function visualiseoutput(model::SimulationModel) #XXX remove this? (#81)
     CairoMakie.activate!() # make sure we're using Cairo
     for o in keys(model.dataoutputs)
         output = model.dataoutputs[o]
-        isnothing(output.plotfunction) && continue
+        (output.frequency == "never" || isnothing(output.plotfunction)) && continue
         figure = output.plotfunction(model)
         isnothing(figure) ? continue :
             save(joinpath(@param(core.outdir), o*"."*@param(core.figureformat)), figure)
diff --git a/src/core/utils.jl b/src/core/utils.jl
index ddffe480275f34dc7980a58753a2e05f7faf53cb..607cafd909b4756c8e41c20058c0c9725798f73e 100644
--- a/src/core/utils.jl
+++ b/src/core/utils.jl
@@ -46,6 +46,12 @@ end
 # Allows writing `(August, 2)` instead of `AnnualDate(August, 2)` where an AnnualDate is expected.
 AnnualDate(ad::Tuple{Int64,Int64}) = AnnualDate(ad...)
 Base.convert(::Type{AnnualDate}, ad::Tuple{Int64,Int64}) = AnnualDate(ad)
+Base.convert(::Type{Tuple{Int64,Int64}}, ad::AnnualDate) = (ad.month, ad.day)
+
+# allow creating AnnualDates from a string of the format "8 August"
+AnnualDate(ad::String) = AnnualDate(Date(ad, dateformat"d U"))
+Base.convert(::Type{AnnualDate}, ad::String) = AnnualDate(ad)
+Base.tryparse(::Type{AnnualDate}, ad::String) = AnnualDate(ad)
 
 # allow creating AnnualDates from a string of the format "8 August"
 AnnualDate(ad::String) = AnnualDate(Date(ad, dateformat"d U"))
@@ -56,6 +62,7 @@ AnnualDate(date::Date) = AnnualDate(month(date), day(date))
 Base.convert(::Type{AnnualDate}, ad::Date) = AnnualDate(ad)
 Dates.month(ad::AnnualDate) = ad.month
 Dates.day(ad::AnnualDate) = ad.day
+Dates.monthday(ad::AnnualDate) = (ad.month, ad.day)
 Date(year::Int64, ad::AnnualDate) = Date(year, ad.month, ad.day)
 
 # Comparison between AnnualDates and with Dates
@@ -162,7 +169,34 @@ A utility function to make sure that a number is within a given set of bounds.
 Returns `max`/`min` if `x` is greater/less than this.
 """
 function bounds(x::Number; max::Number=Inf, min::Number=0)
+    if unit(x) != NoUnits
+        max = max*unit(x)
+        min = min*unit(x)
+    end
     x > max ? max :
         x < min ? min :
         x
 end
+
+"""
+    cycle!(vector, n=1)
+
+Move the first element of the vector to the end, repeat n times.
+"""
+function cycle!(v::AbstractVector, n::Int64=1)
+    for i in 1:n
+        push!(v, v[1])
+        deleteat!(v, 1)
+    end
+    v
+end
+
+"""
+    @areaof(npixels)
+
+Calculate the area of a given number of landscape pixels, knowing the resolution of the
+world map (requires the `model` object to be available).
+"""
+macro areaof(npixels)
+    :($(esc(npixels)) * $(esc(:model)).settings["world.mapresolution"]^2)
+end
diff --git a/src/crop/almass.jl b/src/crop/almass.jl
index 5ac4c53ed22c13ab66fe9125577659fd3879b838..eb7db59037c188e707de12c30e65eb43c0aacf49 100644
--- a/src/crop/almass.jl
+++ b/src/crop/almass.jl
@@ -3,11 +3,16 @@
 ### This file is responsible for managing the crop growth modules.
 ###
 
-#TODO write tests for input functions
+#FIXME Looking at fields.pdf in the Persefone output, crop maturity is not recognised
+# properly, so most crops (except maize) are never planted. At the same time, maize never
+# seems to start growing.
+
+#TODO write tests to compare our output to the output of the original ALMaSS algorithm
 
 module ALMaSS
 
 using Persefone:
+    AnnualDate,
     Management,
     Length,
     cm,
@@ -22,7 +27,11 @@ import Persefone:
     cropname,
     cropheight,
     cropcover,
-    cropyield
+    cropyield,
+    sow!,
+    harvest!,
+    isharvestable,
+    bounds
 
 using Dates: Date, month, monthday
 using CSV: CSV
@@ -57,15 +66,17 @@ The type struct for all crops. Currently follows the crop growth model as
 implemented in ALMaSS.
 """
 struct CropType
+    #FIXME this needs thinking about. The sowing and harvest dates belong in the farm model,
+    # not here. Also, we need to harmonise crops across the crop growth models.
     name::String
-    minsowdate::Union{Missing,Date}
-    maxsowdate::Union{Missing,Date}
-    minharvestdate::Union{Missing,Date}
-    maxharvestdate::Union{Missing,Date}
+    group::String
+    minsowdate::Union{Missing,AnnualDate}
+    maxsowdate::Union{Missing,AnnualDate}
+    minharvestdate::Union{Missing,AnnualDate}
+    maxharvestdate::Union{Missing,AnnualDate}
     mingrowthtemp::Union{Missing,Float64}
     highnutrientgrowth::Union{Missing,CropCurveParams}
     lownutrientgrowth::Union{Missing,CropCurveParams}
-    #issowable::Union{Function,Bool}
 end
 
 cropname(ct::CropType) = ct.name
@@ -85,7 +96,8 @@ mutable struct CropState
     LAItotal::Float64
     LAIgreen::Float64
     #biomass::Float64 #XXX I need to figure out how to calculate this
-    events::Vector{Management}
+    mature::Bool #TODO how do we determine this?
+    events::Vector{Management} #FIXME does this do anything?
 end
 
 croptype(cs::CropState) = cs.croptype
@@ -93,6 +105,7 @@ cropname(cs::CropState) = cropname(croptype(cs))
 cropheight(cs::CropState) = cs.height
 cropcover(cs::CropState) = 0.0  # TODO: related to LAItotal, LAIgreen?
 cropyield(cs::CropState) = 0.0  # TODO: units? needs biomass?
+isharvestable(cs::CropState) = cs.mature
 
 """
     Base.tryparse(type, str)
@@ -100,7 +113,7 @@ cropyield(cs::CropState) = 0.0  # TODO: units? needs biomass?
 Extend `tryparse` to allow parsing GrowthPhase values.
 (Needed to read in the CSV parameter file.)
 """
-function Base.tryparse(type::Type{GrowthPhase}, str::String)
+function Base.tryparse(::Type{GrowthPhase}, str::String)
     str == "janfirst" ? janfirst :
         str == "sow" ? sow :
         str == "marchfirst" ? marchfirst :
@@ -146,8 +159,8 @@ Parse a CSV file containing the required parameter values for each crop
 """
 function readcropparameters(generalcropfile::String, growthfile::String)
     @debug "Reading crop parameters"
-    cropdata = CSV.File(generalcropfile, missingstring="NA", dateformat="d U",
-                        types=[String,Date,Date,Date,Date,Float64])
+    cropdata = CSV.File(generalcropfile, missingstring="NA",
+                        types=[String,AnnualDate,AnnualDate,AnnualDate,AnnualDate,Float64,String])
     growthdata = CSV.File(growthfile, missingstring="NA",
                           types=[Int,String,String,GrowthPhase,String,
                                  Float64,Float64,Float64,Float64])
@@ -159,7 +172,10 @@ function readcropparameters(generalcropfile::String, growthfile::String)
                                     filter(x -> x.nutrient_status=="high"))
         lownuts = buildgrowthcurve(cropgrowthdata |>
                                    filter(x -> x.nutrient_status=="low"))
-        croptypes[crop.name] = CropType(crop.name, crop.minsowdate, crop.maxsowdate,
+        # TODO: set crop group temporarily until there is a column in
+        # the csv file
+        crop_group = "CROP_GROUP_NOT_SET"
+        croptypes[crop.name] = CropType(crop.name, crop_group, crop.minsowdate, crop.maxsowdate,
                                         crop.minharvestdate, crop.maxharvestdate,
                                         crop.mingrowthtemp, highnuts, lownuts)
     end
@@ -172,6 +188,14 @@ end
 Update a farm plot by one day.
 """
 function stepagent!(cs::CropState, model::SimulationModel)
+    # update the phase on key dates
+    if monthday(model.date) == (1, 1)
+        cs.phase = ALMaSS.janfirst
+        cs.growingdegreedays = 0.0
+    elseif monthday(model.date) == (3, 1)
+        cs.phase = ALMaSS.marchfirst
+        cs.growingdegreedays = 0.0
+    end
     # update growing degree days
     # if no crop-specific base temperature is given, default to 5°C
     # (https://www.eea.europa.eu/publications/europes-changing-climate-hazards-1/heat-and-cold/heat-and-cold-2014-mean)
@@ -179,11 +203,8 @@ function stepagent!(cs::CropState, model::SimulationModel)
     ismissing(basetemp) && (basetemp = 5.0)
     gdd = (maxtemp(model)+mintemp(model))/2 - basetemp
     gdd > 0 && (cs.growingdegreedays += gdd)
-    # update the phase on key dates
-    monthday(model.date) == (1,1) && (cs.phase = ALMaSS.janfirst)
-    monthday(model.date) == (3,1) && (cs.phase = ALMaSS.marchfirst)
     # update crop growth
-    growcrop!(cs, model)
+    growcrop!(cs, gdd, model)
 end
 
 
@@ -195,9 +216,16 @@ end
 Change the cropstate to sow the specified crop.
 """
 function sow!(cs::CropState, model::SimulationModel, cropname::String)
-    #XXX test if the crop is sowable?
+    !ismissing(cs.croptype.minsowdate) && model.date < cs.croptype.minsowdate &&
+        @warn "$(model.date) is earlier than the minimum sowing date for $(cropname)."
     cs.croptype = model.crops[cropname]
     cs.phase = ALMaSS.sow
+    cs.growingdegreedays = 0.0
+    cs.height = 0.0cm
+    cs.LAItotal = 0.0
+    cs.LAIgreen = 0.0
+    cs.mature = false
+    cs.events = Vector{Management}()
 end
 
 """
@@ -209,6 +237,8 @@ function harvest!(cs::CropState, model::SimulationModel)
     cs.phase in [ALMaSS.harvest1, ALMaSS.harvest2] ?
         cs.phase = ALMaSS.harvest2 :
         cs.phase = ALMaSS.harvest1
+    cs.growingdegreedays = 0.0
+    cs.mature = false
     # height & LAI will be automatically adjusted by the growth function
     #TODO calculate and return yield
 end
@@ -218,19 +248,21 @@ end
 #TODO till!()
 
 """
-    growcrop!(cropstate, model)
+    growcrop!(cropstate, gdd, model)
 
 Apply the relevant crop growth model to update the plants crop state
 on this farm plot.  Implements the ALMaSS crop growth model by Topping
-et al.
+et al. (see `ALMaSS/Landscape/plant.cpp:PlantGrowthData::FindDiff()` and
+`ALMaSS/Landscape/elements.cpp:VegElement::DoDevelopment()`).
 """
-function growcrop!(cs::CropState, model::SimulationModel)
+function growcrop!(cs::CropState, gdd::Float64, model::SimulationModel)
     fertiliser in cs.events ?
         curve = cs.croptype.lownutrientgrowth :
         curve = cs.croptype.highnutrientgrowth
-    points = curve.GDD[cs.phase]
+    points = curve.GDD[cs.phase] #FIXME what if the curve is empty?
     for p in 1:length(points)
         if points[p] == 99999
+            !(cs.phase in (janfirst, sow)) && (cs.mature = true) #FIXME only in the last phase?
             return # the marker that there is no further growth this phase
         elseif points[p] == -1 # the marker to set all variables to specified values
             cs.height = curve.height[cs.phase][p]
@@ -241,9 +273,14 @@ function growcrop!(cs::CropState, model::SimulationModel)
             gdd = cs.growingdegreedays
             # figure out which is the correct slope value to use for growth
             if p == length(points) || gdd < points[p+1]
-                cs.height += curve.height[cs.phase][p]
-                cs.LAItotal += curve.LAItotal[cs.phase][p]
-                cs.LAIgreen += curve.LAIgreen[cs.phase][p]
+                #FIXME it appears to me from the ALMaSS source code that the curve value
+                # for the day is multiplied with that day's growingdegreedays to give the
+                # diff, which is then added to the previous values. However, this results
+                # in values that are staggeringly too large. I'm not quite sure what the
+                # issue is here...
+                cs.height += bounds(curve.height[cs.phase][p]*gdd)
+                cs.LAItotal += bounds(curve.LAItotal[cs.phase][p]*gdd)
+                cs.LAIgreen += bounds(curve.LAIgreen[cs.phase][p]*gdd)
                 return
             end
             #XXX To be precise, we ought to figure out if one or more inflection
diff --git a/src/crop/cropmodels.jl b/src/crop/cropmodels.jl
index bbbd92529424792d327ff7f5e3d55cfd0dfc5b6b..8653a1439e8d0a5dcfe14b09c326ef9a4a0a3bad 100644
--- a/src/crop/cropmodels.jl
+++ b/src/crop/cropmodels.jl
@@ -18,7 +18,8 @@ function initcropmodel(cropmodel::AbstractString, cropfile::AbstractString, grow
         Tcroptype = SimpleCrop.CropType
         Tcropstate = SimpleCrop.CropState
         crops_almass = ALMaSS.readcropparameters(cropfile, growthfile)
-        crops = Dict(name => SimpleCrop.CropType(ct.name) for (name, ct) in crops_almass)
+        crops = Dict(name => SimpleCrop.CropType(ct.name, ct.group, ct.minsowdate, ct.maxsowdate)
+                     for (name, ct) in crops_almass)
     else
         error("initcropmodel: no implementation for crop model '$cropmodel'")
     end
@@ -31,14 +32,12 @@ end
 Initialise the farm plots in the simulation model.
 """
 function initfields!(model::SimulationModel)
-    n = 0
     convertid = Dict{Int64,Int64}()
     width, height = size(model.landscape)
     for x in 1:width
         for y in 1:height
             # for each pixel, we need to extract the field ID given by the map input
-            # file, and convert it into the internal object ID used by Agents.jl,
-            # creating a new agent object if necessary
+            # file, and convert it into an internal object ID for `model.farmplots`
             rawid = model.landscape[x,y].fieldid
             (ismissing(rawid)) && continue
             if rawid in keys(convertid)
@@ -46,38 +45,37 @@ function initfields!(model::SimulationModel)
                 model.landscape[x,y].fieldid = objectid
                 push!(model.farmplots[objectid].pixels, (x,y))
             else
-                cropstate = make_cropstate(model, @param(crop.cropmodel))
-                fp = FarmPlot(
-                    length(model.farmplots) + 1,
-                    [(x, y)],
-                    cropstate
-                )
+                cropstate = makecropstate(model)
+                fp = FarmPlot(length(model.farmplots) + 1, [(x, y)], -1, cropstate)
                 push!(model.farmplots, fp)
                 model.landscape[x,y].fieldid = fp.id
                 convertid[rawid] = fp.id
-                n += 1
             end
         end
     end
-    @info "Initialised $n farm plots."
+    @info "Initialised $(length(model.farmplots)) farm plots."
 end
 
-# internal utility function
-function make_cropstate(model::SimulationModel, cropmodel::AbstractString)
-    if cropmodel == "almass"
+"""
+    makecropstate(model, cropmodel)
+
+An internal utility function to initialise one instance of the configured crop growth model.
+"""
+function makecropstate(model::SimulationModel)
+    if @param(crop.cropmodel) == "almass"
         phase = (month(model.date) < 3 ? ALMaSS.janfirst : ALMaSS.marchfirst)
         cs = ALMaSS.CropState(
                 model.crops["natural grass"],
                 phase,
-                0.0, 0.0m, 0.0, 0.0, Vector{Management}()
+                0.0, 0.0cm, 0.0, 0.0, false, Vector{Management}()
         )
-    elseif cropmodel == "simple"
+    elseif @param(crop.cropmodel) == "simple"
         cs = SimpleCrop.CropState(
             model.crops["natural grass"],
             0.0m
         )
     else
-        error("Unhandled crop model '$cropmodel' in make_cropstate")
+        Base.error("Unhandled crop model '$(@param(crop.cropmodel))' in makecropstate().")
     end
     return cs
 end
diff --git a/src/crop/farmplot.jl b/src/crop/farmplot.jl
index ebe7c84af97495f27f15d03e2dc583c9d4c9549c..ecd4baf5a26aa927bc836dedffdf27f09af0b152 100644
--- a/src/crop/farmplot.jl
+++ b/src/crop/farmplot.jl
@@ -3,10 +3,16 @@
 ### This file contains code for the fields that farmers manage.
 ###
 
+"""
+    FarmPlot
+
+A struct representing a single field, on which a crop can be grown.
+"""
 mutable struct FarmPlot{T} <: ModelAgent
     const id::Int64
     pixels::Vector{Tuple{Int64, Int64}}
-    cropstate :: T
+    farmer::Int64
+    cropstate::T
 end
 
 croptype(f::FarmPlot{T}) where {T} = croptype(f.cropstate)
@@ -14,6 +20,7 @@ cropname(f::FarmPlot{T}) where {T} = cropname(croptype(f))
 cropheight(f::FarmPlot{T}) where {T} = cropheight(f.cropstate)
 cropcover(f::FarmPlot{T}) where {T} = cropcover(f.cropstate)
 cropyield(f::FarmPlot{T}) where {T} = cropyield(f.cropstate)
+isharvestable(f::FarmPlot{T}) where {T} = isharvestable(f.cropstate)
 
 """
     stepagent!(farmplot, model)
@@ -30,9 +37,9 @@ end
 Sow the specified crop on the farmplot.
 """
 function sow!(farmplot::FarmPlot, model::SimulationModel, cropname::String)
-    #XXX test if the crop is sowable?
     createevent!(model, farmplot.pixels, sowing)
     sow!(farmplot.cropstate, model, cropname)
+    @debug "Farmer $(farmplot.farmer) sowed $(cropname) on farmplot $(farmplot.id)."
 end
 
 """
@@ -43,22 +50,55 @@ Harvest the crop of this farmplot.
 function harvest!(farmplot::FarmPlot{T}, model::SimulationModel) where T
     createevent!(model, farmplot.pixels, harvesting)
     harvest!(farmplot.cropstate, model)  # TODO: multiply with area to return units of `g`
+    @debug "Farmer $(farmplot.farmer) harvested $(cropname(farmplot)) from farmplot $(farmplot.id)."
+end
+
+"""
+    @sow(cropname)
+
+Sow the named crop on the current field. Requires the variables `field` and `model`.
+"""
+macro sow(cropname)
+    :(sow!($(esc(:field)), $(esc(:model)), $(esc(cropname))))
+end
+
+"""
+    @harvest()
+
+Harvest the current field. Requires the variables `field` and `model`.
+"""
+macro harvest()
+    :(harvest!($(esc(:field)), $(esc(:model))))
 end
 
 ## UTILITY FUNCTIONS
 
+"""
+    isgrassland(farmplot, model)
+
+Classify a farmplot as grassland or not (i.e., is the landcover of >80% of its pixels grass?)
+"""
+function isgrassland(farmplot::FarmPlot, model::SimulationModel)
+    proportiongrass = count(pos -> landcover(pos, model) == grass, farmplot.pixels) /
+        length(farmplot.pixels)
+    if proportiongrass > 0.8
+        return true
+    elseif proportiongrass > 0.2
+        @warn "Unclear classification: farm plot $(farmplot.id) has $(proportiongrass*100)% grass."
+        proportiongrass >= 0.5 && return true
+    end
+    return false
+end
+
 """
     averagefieldsize(model)
 
 Calculate the average field size in hectares for the model landscape.
 """
 function averagefieldsize(model::SimulationModel)
-    conversionfactor = 100 #our pixels are currently 10x10m, so 100 pixels per hectare
-    sizes::Vector{Float64} = []
-    for fp in model.farmplots
-        push!(sizes, size(fp.pixels)[1]/conversionfactor)
-    end
-    round(sum(sizes)/size(sizes)[1], digits=2)
+    area_sum = sum(@areaof(length(fp.pixels)) for fp in model.farmplots; init=0.0u"m^2")
+    area_avg = area_sum / length(model.farmplots)
+    return area_avg |> ha
 end
 
 """
diff --git a/src/crop/simplecrop.jl b/src/crop/simplecrop.jl
index 6bfe858364cf472af1a49b87cf0a8f455dfd5b8c..348d9448561f693d1e1f951d33b9b7781ea2187a 100644
--- a/src/crop/simplecrop.jl
+++ b/src/crop/simplecrop.jl
@@ -1,6 +1,7 @@
 module SimpleCrop
 
 using Persefone:
+    AnnualDate,
     FarmPlot,
     Length,
     cm,
@@ -12,10 +13,19 @@ import Persefone:
     cropname,
     cropheight,
     cropcover,
-    cropyield
+    cropyield,
+    sow!,
+    harvest!,
+    isharvestable
 
+using Unitful: @u_str
+
+# TODO: alternatively just use ALMaSS.CropType ?
 struct CropType
     name::String
+    group::String
+    minsowdate::Union{Missing,AnnualDate}
+    maxsowdate::Union{Missing,AnnualDate}
 end
 
 cropname(ct::CropType) = ct.name
@@ -30,7 +40,7 @@ cropname(cs::CropState) = cropname(croptype(cs))
 cropheight(cs::CropState) = cs.height
 cropcover(cs::CropState) = 0.0
 cropyield(cs::CropState) = 0.0  # TODO: units?
-
+isharvestable(cs::CropState) = true
 
 """
     stepagent!(farmplot, model)
@@ -50,7 +60,7 @@ Change the cropstate to sow the specified crop.
 """
 function sow!(cs::CropState, model::SimulationModel, cropname::String)
     cs.croptype = model.crops[cropname]
-    cs.height = 0cm
+    cs.height = 0.0cm
 end
 
 """
@@ -62,8 +72,8 @@ function harvest!(cs::CropState, model::SimulationModel)
     # TODO: set cs.croptype ?
     # TODO: this 1.0g/cm/m^2 height_to_yield factor should be a param
     #       for every crop type
-    yield = cs.height * 1.0g/cm/m^2
-    cs.height = 0cm
+    yield = cs.height * 1.0u"g/cm/m^2"
+    cs.height = 5.0cm
     return yield
 end
 
diff --git a/src/farm/farm.jl b/src/farm/farm.jl
index 6d7b1588f33e54cb67e14a5fe86f4153e4379c15..3bc3109e4efc086672a26681f147c3deb78065ce 100644
--- a/src/farm/farm.jl
+++ b/src/farm/farm.jl
@@ -1,37 +1,130 @@
 ### Persefone.jl - a model of agricultural landscapes and ecosystems in Europe.
 ###
 ### This file is responsible for managing the farm module(s).
-###
+###    
+
+
+## GENERIC TYPES AND FUNCTIONS
+
+"This is the agent type for the farm ABM."
+abstract type Farmer <: ModelAgent end
+
+stepagent!(f::Farmer, model::SimulationModel) =
+    @error "Farmer type $(typeof(f)) has no stepagent!() method."
 
 """
-    Farmer
+    initfarms!(model)
 
-This is the agent type for the farm ABM. (Not yet implemented.)
+Initialise the model with a set of farm agents, depending on the configured farm model.
 """
-mutable struct Farmer <: ModelAgent
-    #XXX make this into an abstract type and create subtypes for different
-    # farm submodels? (#69)
+function initfarms!(model::SimulationModel)
+    if @param(farm.farmmodel) == "BasicFarmer"
+        initbasicfarms!(model)
+    else
+        Base.error("Farm model $(@param(farm.farmmodel)) doesn't exist.")
+    end
+end
+
+
+## BASIC FARM MODEL
+
+#XXX Initially, we're only working with a single simple crop rotation.
+# Later on, we need to figure out how to integrate several.
+const CROPROTATION = ["winter rape", "winter wheat", "maize", "winter barley"]
+
+#FIXME Currently, this is specific to the ALMaSS model. We need to figure out how to generalise it.
+
+"""
+    BasicFarmer
+
+The BasicFarmer type simply applies a set crop rotation to his fields and keeps track of income.
+"""
+mutable struct BasicFarmer <: Farmer
     const id::Int64
-    # TODO: hardcoded ALMaSS crop model
-    fields::Vector{FarmPlot{ALMaSS.CropState}}
-    croprotation::Vector{ALMaSS.CropType}
-    #TODO add AES
+    # farmplots owned by this farmer and their associated crop rotations and next sowing date
+    fields::Vector{Int64}
+    croprotations::Dict{Int64, Vector{String}}
+    sowdates::Dict{Int64, AnnualDate}
+    totalincome::Float64 # accumulated income XXX split up by year?
 end
 
 """
     stepagent!(farmer, model)
 
-Update a farmer by one day.
+Update a farmer by one day. Cycle through all fields and see what management is needed.
 """
-function stepagent!(farmer::Farmer, model::SimulationModel)
-    #TODO
+function stepagent!(farmer::BasicFarmer, model::SimulationModel)
+    for f in farmer.fields
+        field = model.farmplots[f]
+        ctype = croptype(field)
+        if ctype.group != "semi-natural" && isharvestable(field)
+            @harvest()
+            #XXX later: calculate income based on yield and annual price
+            if ctype.group != "grass"
+                @sow("no growth")
+                cycle!(farmer.croprotations[f]) # advance the crop rotation
+                nextcrop = model.crops[farmer.croprotations[f][1]]
+                if ! (ismissing(nextcrop.minsowdate) || ismissing(nextcrop.maxsowdate))
+                    farmer.sowdates[f] = @rand(nextcrop.minsowdate:nextcrop.maxsowdate)
+                else
+                    @warn "minsowdate and/or maxsowdate is `missing` for crop \"$(ctype.name)\", not assigning sowdates"
+                end
+            end
+        elseif cropname(field) == "no growth" && model.date == farmer.sowdates[f]
+            # if a field has been harvested, check if the next crop can be sown
+            @sow(farmer.croprotations[f][1])
+        end
+    end     
 end
 
 """
-    initfarms!(model)
+    initbasicfarms!(model)
 
-Initialise the model with a set of farm agents.
+Initialise the basic farm model. All fields are controlled by a single farmer actor
+and are assigned as grassland, set-aside, or arable land with a crop rotation.
 """
-function initfarms!(model::SimulationModel)
-    #TODO
+function initbasicfarms!(model::SimulationModel)
+    farmer = BasicFarmer(1, collect(1:length(model.farmplots)), Dict(), Dict(), 0)
+    model.farmers = [farmer]
+    setasides = findsetasides(farmer, model)
+    for field in model.farmplots
+        field.farmer = farmer.id
+        if isgrassland(field, model)
+            @sow("permanent grassland (grazed)")
+            farmer.croprotations[field.id] = ["permanent grassland (grazed)"]
+        elseif field.id in setasides
+            @sow("permanent set-aside")
+            farmer.croprotations[field.id] = ["permanent set-aside"]
+        else
+            @sow("no growth") # assign each arable field a crop rotation, cycled randomly
+            farmer.croprotations[field.id] = cycle!(deepcopy(CROPROTATION), @rand(0:3))
+            nextcrop = model.crops[farmer.croprotations[field.id][1]]
+            farmer.sowdates[field.id] = @rand(nextcrop.minsowdate:nextcrop.maxsowdate)
+        end
+    end
+    initfarmdata(model)
+end
+
+"""
+    findsetasides(farmer, model)
+
+Return a vector of field IDs that this farmer should keep fallow to satisfy the configured
+set-aside rules.
+"""
+function findsetasides(farmer::BasicFarmer, model::SimulationModel)
+    @param(farm.setaside) == 0 && return []
+    croparea = @areaof(sum(f -> isgrassland(f, model) ? 0 : length(f.pixels),
+                           model.farmplots[farmer.fields]))
+    setasidearea = 0m²
+    setasides = []
+    for f in keys(farmer.fields) #XXX should be sorted smallest-largest for highest efficiency
+        field = model.farmplots[f]
+        isgrassland(field, model) && continue
+        push!(setasides, f)
+        setasidearea += @areaof(length(field.pixels))
+        if setasidearea >= croparea*@param(farm.setaside)
+            @debug "Farmer $(farmer.id) has set aside $(setasidearea |> ha)."
+            return setasides
+        end
+    end
 end
diff --git a/src/farm/farmdata.jl b/src/farm/farmdata.jl
new file mode 100644
index 0000000000000000000000000000000000000000..945d9ef90e3c126c70e1f35458a4d437b6441b84
--- /dev/null
+++ b/src/farm/farmdata.jl
@@ -0,0 +1,41 @@
+### Persefone.jl - a model of agricultural landscapes and ecosystems in Europe.
+###
+### This file handles the data output of the farm submodel.
+###    
+
+"""
+    initfarmdata()
+
+Create output files for each data group collected by the farm model.
+"""
+function initfarmdata(model::SimulationModel)
+    newdataoutput!(model, "fields", ["Date", "Crop", "Area", "Height"],
+                   @param(farm.fieldoutfreq), savefielddata, croptrends)
+    #XXX add later: income per year
+end
+
+"""
+    savefielddata(model)
+
+Return a data table (to be printed to `fields.csv`), giving the current
+date, and the area and average of each crop in the landscape. May be called
+never, daily, monthly, yearly, or at the end of a simulation, depending on
+the parameter `farm.fieldoutfreq`.
+"""
+function savefielddata(model::SimulationModel)
+    croparea = Dict(c => 0.0 for c in keys(model.crops))
+    cropheights = Dict(c => [0.0, 0.0] for c in keys(model.crops))
+    for f in model.farmplots
+        c = cropname(f)
+        croparea[c] += ustrip(ha, @areaof(length(f.pixels))) # total area with this crop
+        cropheights[c][1] += 1 # number of fields with this crop
+        cropheights[c][2] += ustrip(cm, cropheight(f)) # summed height of the plants of this crop
+    end
+    data = []
+    for p in keys(croparea)
+        averageheight = cropheights[p][2] == 0 ? 0 :
+            round(cropheights[p][2]/cropheights[p][1], digits=2)
+        push!(data, [model.date, p, croparea[p], averageheight])
+    end
+    data
+end
diff --git a/src/nature/ecologicaldata.jl b/src/nature/ecologicaldata.jl
index 3a1e53803bd7623d2620dd3773b08213af607852..15527ca69f0f1894d479151abdd96b173dc8d513 100644
--- a/src/nature/ecologicaldata.jl
+++ b/src/nature/ecologicaldata.jl
@@ -69,7 +69,7 @@ function initskylarkdata(model::SimulationModel)
     newdataoutput!(model, "skylark_abundance",
                    ["Date", "TotalAbundance", "Mating", "Breeding",
                     "Nonbreeding", "Juvenile", "Migrants"],
-                   "daily", skylarkabundance, skylarkpopulation)
+                   @param(nature.popoutfreq), skylarkabundance, skylarkpopulation)
     # newdataoutput!(model, "skylark_territories", ["Date", "ID", "X", "Y"],
     #                skylarkterritories, "monthly") #TODO add plotting function
     newdataoutput!(model, "skylark_breeding",
diff --git a/src/nature/populations.jl b/src/nature/populations.jl
index 2f45c71759ce2ff5de1e653cdde9aeac51898da2..144f0462fc612ffc14c1e4b4f075350aaf4fa362 100644
--- a/src/nature/populations.jl
+++ b/src/nature/populations.jl
@@ -84,7 +84,7 @@ function initpopulation!(species::Type, p::PopInitParams, model::SimulationModel
     lastn = 0
     width, height = size(model.landscape)
     if p.indarea > 0m²
-        pixelsperind = Int(round(p.indarea / @param(world.mapresolution)^2))
+        pixelsperind = Int(round(p.indarea / @areaof(1)))
     end
     while n == 0 || n < p.popsize
         for x in @shuffle!(Vector(1:width))
@@ -160,7 +160,7 @@ return the size as a plain number.
 function territorysize(a::Union{Animal,Int64}, model::SimulationModel,
                        units::Unitful.Units=ha, stripunits::Bool=false)
     a isa Int && (a = @animal(a))
-    size = length(a.territory) * @param(world.mapresolution)^2 |> Float64
+    size = length(a.territory) * @areaof(1) |> Float64
     stripunits ? ustrip(units, size) : size |> units
 end
 
diff --git a/src/nature/species/skylark.jl b/src/nature/species/skylark.jl
index ac582dc0aeed8f0af845d884d88583ce88053f56..feaa063a7be5e538c88895f2bef913bc8d06e965 100644
--- a/src/nature/species/skylark.jl
+++ b/src/nature/species/skylark.jl
@@ -319,7 +319,7 @@ function findterritory(skylark::Skylark, model::SimulationModel)
             (isoccupied(model, "Skylark", c)) && continue
             push!(territory, c)
             quality = foragequality(skylark, model, c)
-            effectivesize += @param(world.mapresolution)^2*quality
+            effectivesize += @areaof(quality)
             (quality > 0) && (constrained = false)
             #XXX check for nesting habitats?
         end
diff --git a/src/parameters.toml b/src/parameters.toml
index ee391ab5ee1c8a41e0263595061da7c649384d6f..484c1a9b02d4245f7e48b40ccfdf9de1f5221895 100644
--- a/src/parameters.toml
+++ b/src/parameters.toml
@@ -15,12 +15,12 @@ csvoutput = true # save collected data in CSV files
 visualise = true # generate result graphs
 storedata = true # keep collected data in memory
 figureformat = "pdf" # file format to use for graphical output
-loglevel = "info" # verbosity level: "debug", "info", "warn"
+loglevel = "debug" # verbosity level: "debug", "info", "warn"
 processors = 2 # number of processors to use on parallel runs
 seed = 2 # seed value for the RNG (0 -> random value)
-startdate = 2022-01-01 # first day of the simulation
-enddate = 2022-12-31 # last day of the simulation
-#enddate = 2022-03-31 # last day of the simulation (test value)
+startdate = 2021-01-01 # first day of the simulation
+enddate = 2023-12-31 # last day of the simulation
+#enddate = 2022-01-02 # last day of the simulation (test value)
 
 [world]
 mapdirectory = "data/regions/jena-small" # the directory in which all geographic data are stored
@@ -30,13 +30,18 @@ farmfieldsmap = "fields.tif" # name of the field geometry map in the map directo
 weatherfile = "weather.csv" # name of the weather data file in the map directory
 	
 [farm]
-farmmodel = "FieldManager" # which version of the farm model to use (not yet implemented)
-
+farmmodel = "BasicFarmer" # which version of the farm model to use
+setaside = 0.04 # proportion of farm area set aside as fallow
+fieldoutfreq = "daily" # output frequency for crop/field data, daily/monthly/yearly/end/never
+	
 [nature]
 #targetspecies = ["Wolpertinger", "Wyvern"] # list of target species to simulate - example species
-targetspecies = ["Skylark"] # list of target species to simulate
-popoutfreq = "daily" # output frequency population-level data, daily/monthly/yearly/end/never
-indoutfreq = "end" # output frequency individual-level data, daily/monthly/yearly/end/never
+targetspecies = [] # XXX disable all species for farm model testing
+#targetspecies = ["Skylark"] # list of target species to simulate
+popoutfreq = "never" # output frequency population-level data, daily/monthly/yearly/end/never
+indoutfreq = "never" # output frequency individual-level data, daily/monthly/yearly/end/never
+#popoutfreq = "daily" # output frequency population-level data, daily/monthly/yearly/end/never
+#indoutfreq = "end" # output frequency individual-level data, daily/monthly/yearly/end/never
 insectmodel = ["season", "habitat", "pesticides", "weather"] # factors affecting insect growth
 	
 [crop]
diff --git a/test/crop_data_general.csv b/test/crop_data_general.csv
index 4fd822472b0c862113bf47269bda7d9e875ad3cd..c779dec5fa35c5777bb5363b88a81dbd8556bddc 100644
--- a/test/crop_data_general.csv
+++ b/test/crop_data_general.csv
@@ -1,21 +1,28 @@
-name,minsowdate,maxsowdate,minharvestdate,maxharvestdate,mingrowthtemp
-"winter barley","15 September","30 September",NA,NA,0
-"spring barley","1 March","10 April",NA,NA,0
-"peas/beans",NA,NA,NA,NA,5
-"spring rape",NA,NA,NA,NA,NA
-"winter rape",NA,NA,NA,NA,NA
-"winter rye",NA,NA,NA,NA,NA
-"winter wheat","15 October","31 October",NA,NA,0
-"beet",NA,NA,NA,NA,NA
-"maize",NA,NA,NA,NA,8
-"permanent grassland (grazed)",NA,NA,NA,NA,NA
-"permanent grassland (seeded)",NA,NA,NA,NA,NA
-"fodder/clover",NA,NA,NA,NA,NA
-"natural grass",NA,NA,NA,NA,NA
-"potatoes",NA,NA,NA,NA,4
-"undersown spring barley",NA,NA,NA,NA,0
-"carrots",NA,NA,NA,NA,NA
-"oats",NA,NA,NA,NA,NA
-"permanent set-aside",NA,NA,NA,NA,NA
-"lucerne",NA,NA,NA,NA,NA
-"triticale","25 September","10 October",NA,NA,NA
+name,minsowdate,maxsowdate,minharvestdate,maxharvestdate,mingrowthtemp,group
+"spring rape",NA,NA,NA,NA,NA,"grain"
+"winter rape","20 August","25 August",NA,NA,NA,"grain"
+"winter wheat","15 October","31 October",NA,NA,0,"grain"
+"spring wheat",NA,NA,NA,NA,NA,"grain"
+"winter barley","15 September","30 September",NA,NA,0,"grain"
+"spring barley","1 March","10 April",NA,NA,0,"grain"
+"undersown spring barley",NA,NA,NA,NA,0,"grain"
+"winter rye","23 September","15 October",NA,NA,NA,"grain"
+"triticale","25 September","10 October",NA,NA,NA,"grain"
+"oats",NA,NA,NA,NA,NA,"grain"
+"maize","15 April","30 April",NA,NA,8,"grain"
+"potatoes",NA,NA,NA,NA,4,"root"
+"carrots",NA,NA,NA,NA,NA,"root"
+"beet","15 March","10 May",NA,NA,NA,"root"
+"sunflower","25 March","15 April",NA,NA,NA,"other"
+"lucerne",NA,NA,NA,NA,NA,"legumes"
+"peas/beans","15 February","15 March",NA,NA,5,"legumes"
+"silage clover/grass",NA,NA,NA,NA,NA,"legumes"
+"fodder/clover",NA,NA,NA,NA,NA,"legumes"
+"lawn",NA,NA,NA,NA,NA,"grass"
+"permanent grassland (grazed)",NA,NA,NA,NA,NA,"grass"
+"permanent grassland (seeded)",NA,NA,NA,NA,NA,"grass"
+"permanent grassland (low yield)",NA,NA,NA,NA,NA,"grass"
+"permanent set-aside",NA,NA,NA,NA,NA,"semi-natural"
+"natural grass",NA,NA,NA,NA,NA,"semi-natural"
+"no growth",NA,NA,NA,NA,NA,"semi-natural"
+"heath",NA,NA,NA,NA,NA,"semi-natural"
diff --git a/test/crop_tests.jl b/test/crop_tests.jl
index 91469250561ef844d1fd99969b6442701c8133e2..9632b1d59549eea5decd4909982b54e16fce2eb4 100644
--- a/test/crop_tests.jl
+++ b/test/crop_tests.jl
@@ -19,10 +19,15 @@ const TESTPARAM_SIMPLECROP = joinpath(pkgdir(Persefone), "test", "test_parameter
 end
 
 @testset "Submodule ALMaSS" begin
-    ct = Ps.ALMaSS.CropType("olive tree", missing, missing, missing, missing, missing,
-                            missing, missing)
-    fp = FarmPlot(0, [(0,0)],
-                  Ps.ALMaSS.CropState(ct, Ps.ALMaSS.janfirst, 0.0, 0.0m, 0.0, 0.0, Ps.Management[]))
+    ct = Ps.ALMaSS.CropType("olive tree", "no_crop_group",
+                            missing, missing, missing, missing, missing, missing, missing)
+    id = 0
+    pixels = [(0, 0)]
+    farmer = 0
+    mature = false
+    events = Ps.Management[]
+    fp = FarmPlot(id, pixels, farmer,
+                  Ps.ALMaSS.CropState(ct, Ps.ALMaSS.janfirst, 0.0, 0.0m, 0.0, 0.0, mature, events))
     @test fp isa FarmPlot
     @test fp isa FarmPlot{Ps.ALMaSS.CropState}
     @test croptype(fp) isa Ps.ALMaSS.CropType
@@ -33,8 +38,11 @@ end
 end
 
 @testset "Submodule SimpleCrop" begin
-    ct = Ps.SimpleCrop.CropType("olive tree")
-    fp = FarmPlot(0, [(0,0)], Ps.SimpleCrop.CropState(ct, 0.0cm))
+    ct = Ps.SimpleCrop.CropType("olive tree", "no_crop_group", AnnualDate(4, 1), AnnualDate(5, 1))
+    id = 0
+    pixels = [(0, 0)]
+    farmer = 0
+    fp = FarmPlot(id, pixels, farmer, Ps.SimpleCrop.CropState(ct, 0.0cm))
     @test fp isa FarmPlot
     @test fp isa FarmPlot{Ps.SimpleCrop.CropState}
     @test croptype(fp) isa Ps.SimpleCrop.CropType
diff --git a/test/landscape_tests.jl b/test/landscape_tests.jl
index d80afb2ab09ac9a712dae6697d78b2955f170d27..9aa3cb3b96c7a60ea039c767096511070611f8a2 100644
--- a/test/landscape_tests.jl
+++ b/test/landscape_tests.jl
@@ -14,7 +14,7 @@
     @test Ps.landcover((400,400), model) == Ps.grass
     @test Ps.landcover((800,800), model) == Ps.agriculture
     @test Ps.landcover((1100,1100), model) == Ps.builtup
-    @test Ps.averagefieldsize(model) == 5.37
+    @test isapprox(Ps.averagefieldsize(model), 5.374u"ha"; atol=1e-3u"ha")
     @test count(f -> ismissing(f.fieldid), model.landscape) == 1685573
     @test length(Ps.farmplot((800,800), model).pixels) == 4049               
 end
diff --git a/test/nature_tests.jl b/test/nature_tests.jl
index c78b7277f543f2c8bde9da3e02445ee7342e6487..b0d7e3cde16ebc6cfee39735454bb6cc8cfc1a90 100644
--- a/test/nature_tests.jl
+++ b/test/nature_tests.jl
@@ -49,10 +49,10 @@ end) # end eval
     model = inittestmodel()
     model.landscape[6,6] = Pixel(Ps.agriculture, 1, [], [], [])
     fp = Ps.FarmPlot(
-        1, [(6,6)],
+        1, [(6,6)], 1,
         Ps.ALMaSS.CropState(
             model.crops["winter wheat"], Ps.ALMaSS.janfirst,
-            0.0, 0.0m, 0.0, 0.0, Vector{Ps.Management}()
+            0.0, 0.0m, 0.0, 0.0, false, Vector{Ps.Management}()
         )
     )
     push!(model.farmplots, fp)
diff --git a/test/runtests.jl b/test/runtests.jl
index 4ee512ea3a25baea82eb68774c3267bf3befac3f..7fb635a5c663fc831d963786a07cf353b8961e15 100644
--- a/test/runtests.jl
+++ b/test/runtests.jl
@@ -20,7 +20,7 @@ const Ps = Persefone
 const TESTPARAMETERS = joinpath(pkgdir(Persefone), "test/test_parameters.toml")
 const TESTSETTINGS = Ps.getsettings(TESTPARAMETERS)
 
-import Unitful: cm, m, km, ha, mg, g, kg, Length, Area, Mass
+import Unitful: @u_str, cm, m, km, ha, mg, g, kg, Length, Area, Mass
 const m² = m^2
 const km² = km^2
 
diff --git a/test/simulation_tests.jl b/test/simulation_tests.jl
index a6f31eb8623a6af20eb1098727d921194691a5fe..fce2f2b2e05cef391a9295ed9a0db25ce2d523a0 100644
--- a/test/simulation_tests.jl
+++ b/test/simulation_tests.jl
@@ -10,7 +10,7 @@
     @test typeof(model.landscape) == Matrix{Pixel}
     @test typeof(model.dataoutputs) == Dict{String,DataOutput}
     @test typeof(model.logger) == TeeLogger{Tuple{ConsoleLogger, ConsoleLogger}}
-    @test length(model.dataoutputs) == 5
+    @test length(model.dataoutputs) == 6
     @test model.events == Vector{FarmEvent}()
     @test Ps.nagents(model) == 2092+0+321 # farmplots+farmers+animals
 end
diff --git a/test/test_parameters.toml b/test/test_parameters.toml
index 0a8e4055b6ce3cd1c578beb3866dc30f37e28c57..089712ee2f4ab8c4ecd7da50ed97fc7dc4ca74be 100644
--- a/test/test_parameters.toml
+++ b/test/test_parameters.toml
@@ -28,7 +28,9 @@ farmfieldsmap = "fields_jena.tif" # location of the field geometry map
 weatherfile = "weather_jena.csv" # location of the weather data file
 
 [farm]
-farmmodel = "FieldManager" # which version of the farm model to use (not yet implemented)
+farmmodel = "BasicFarmer" # which version of the farm model to use
+setaside = 0.04 # proportion of farm area set aside as fallow
+fieldoutfreq = "daily" # output frequency for crop/field data, daily/monthly/yearly/end/never
 
 [nature]
 targetspecies = ["Wolpertinger", "Wyvern"] # list of target species to simulate - example species
diff --git a/test/test_parameters_almass.toml b/test/test_parameters_almass.toml
index 1308029ee9b7b387064752b0c0e3a70174798c77..159e59d2cb484a8f51da325c3bbbad1ae0af9e48 100644
--- a/test/test_parameters_almass.toml
+++ b/test/test_parameters_almass.toml
@@ -28,7 +28,9 @@ farmfieldsmap = "fields_jena.tif" # location of the field geometry map
 weatherfile = "weather_jena.csv" # location of the weather data file
 
 [farm]
-farmmodel = "FieldManager" # which version of the farm model to use (not yet implemented)
+farmmodel = "BasicFarmer" # which version of the farm model to use
+setaside = 0.04 # proportion of farm area set aside as fallow
+fieldoutfreq = "daily" # output frequency for crop/field data, daily/monthly/yearly/end/never
 
 [nature]
 targetspecies = ["Wolpertinger", "Wyvern"] # list of target species to simulate - example species
diff --git a/test/test_parameters_simplecrop.toml b/test/test_parameters_simplecrop.toml
index fc199a8c8664b0d900e131d9b5b159dc006ee502..b7c08f1008786b06a0fc391437efd294bad8fdd2 100644
--- a/test/test_parameters_simplecrop.toml
+++ b/test/test_parameters_simplecrop.toml
@@ -28,7 +28,9 @@ farmfieldsmap = "fields_jena.tif" # location of the field geometry map
 weatherfile = "weather_jena.csv" # location of the weather data file
 
 [farm]
-farmmodel = "FieldManager" # which version of the farm model to use (not yet implemented)
+farmmodel = "BasicFarmer" # which version of the farm model to use
+setaside = 0.04 # proportion of farm area set aside as fallow
+fieldoutfreq = "daily" # output frequency for crop/field data, daily/monthly/yearly/end/never
 
 [nature]
 targetspecies = ["Wolpertinger", "Wyvern"] # list of target species to simulate - example species