From 916221370b9410bd3b75f3913be22fb5f0ff62a3 Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Wed, 24 Jun 2026 12:56:44 +0100 Subject: [PATCH 01/16] Switch to different datasets for exercises --- exercises/{README => README.md} | 13 +++++++++++-- exercises/problem/plot1.py | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) rename exercises/{README => README.md} (72%) diff --git a/exercises/README b/exercises/README.md similarity index 72% rename from exercises/README rename to exercises/README.md index 3a13423..6094a4e 100644 --- a/exercises/README +++ b/exercises/README.md @@ -3,14 +3,19 @@ After going through the slides on how to make our research projects reproducible, it is time to go through a practice scenario! -The code in `problem` is an example of a research project which has not taken +The code in `problem/` is an example of a research project which has not taken reproducibility into account. +## Data + +If you are trying to work through these exercises, you will need the data that +the scripts rely on, which can be found here: https://doi.org/10.5281/zenodo.7014332. + ## Instructions: 1. Create a new repository on your local machine with `git init repro-examples` 2. Copy the files in the `problem` directory into the new repository -3. Download the data needed for the analysis from https://zenodo.org/records/16875985 +3. Download the data needed for the analysis from https://doi.org/10.5281/zenodo.7014332 ## Section 1: Version control @@ -43,6 +48,10 @@ Tasks: Tasks: 1. Create a README for the repository +2. Add comments and docstrings where you think is necessary + +Extension: Use an documentation tool, such as Sphinx, to automate building the +documentation. ## Section 5: Try it out! diff --git a/exercises/problem/plot1.py b/exercises/problem/plot1.py index 2256204..f62225e 100644 --- a/exercises/problem/plot1.py +++ b/exercises/problem/plot1.py @@ -1,7 +1,7 @@ import xarray import matplotlib.pyplot as plt -ds = xarray.open_dataset("../data/CARS2009_temp20-40S_69-88W.nc") +ds = xarray.open_dataset("../data/HadCRUT.5.0.0.0_analysis_summary-series_180E-0N-180W-30N_annual.nc") -ds['temp'].plot() +plt.fill_between(ds['time'].data, ds['tas_lower'].data, ds['tas_upper']) plt.show() From e31895f29ee618e7dfc6c62c557db8049147f5bd Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Wed, 1 Jul 2026 11:34:15 +0100 Subject: [PATCH 02/16] Move exercises to separate quarto markdown files --- exercises/README.md | 45 ++----------------------- exercises/automation_exercises.qmd | 6 ++++ exercises/dependencies_exercises.qmd | 11 ++++++ exercises/documentation_exercises.qmd | 10 ++++++ exercises/final_exercises.qmd | 7 ++++ exercises/version_control_exercises.qmd | 8 +++++ 6 files changed, 44 insertions(+), 43 deletions(-) create mode 100644 exercises/automation_exercises.qmd create mode 100644 exercises/dependencies_exercises.qmd create mode 100644 exercises/documentation_exercises.qmd create mode 100644 exercises/final_exercises.qmd create mode 100644 exercises/version_control_exercises.qmd diff --git a/exercises/README.md b/exercises/README.md index 6094a4e..017ffd0 100644 --- a/exercises/README.md +++ b/exercises/README.md @@ -16,46 +16,5 @@ the scripts rely on, which can be found here: https://doi.org/10.5281/zenodo.701 1. Create a new repository on your local machine with `git init repro-examples` 2. Copy the files in the `problem` directory into the new repository 3. Download the data needed for the analysis from https://doi.org/10.5281/zenodo.7014332 - -## Section 1: Version control - -Try to answer the following questions: - -1. Which files should be tracked? -2. Are there any files in the project that should not be tracked? -3. Are there any files missing that are needed to run the analysis? - -## Section 2: Dependencies - -Try to answer the following questions: - -1. What are the python dependencies for the analysis? -2. What are the system dependencies? - -Task: Document the dependencies that you find -Extension: Using your favourite dependency management tool (e.g. Conda, Nix), -create a reproducible environment configuration. - -## Section 3: Automation - -Tasks: - -1. Create an automated pipeline for producing all the figures -2. Automate the fetching of the necessary data - -## Section 4: Documentation - -Tasks: - -1. Create a README for the repository -2. Add comments and docstrings where you think is necessary - -Extension: Use an documentation tool, such as Sphinx, to automate building the -documentation. - -## Section 5: Try it out! - -Tasks: - -1. Share your repository with the person near you -2. Try to reproduce the results using the repo that you have been shared +4. Try to complete the tasks in the files named `*_exercises.qmd`. Some of these are +achievable during the session, others are tasks that could be worked on in your own time. diff --git a/exercises/automation_exercises.qmd b/exercises/automation_exercises.qmd new file mode 100644 index 0000000..b8ff200 --- /dev/null +++ b/exercises/automation_exercises.qmd @@ -0,0 +1,6 @@ +## Automation Exercises + +Tasks: + +1. Create an automated pipeline for producing all the figures +2. Automate the fetching of the necessary data diff --git a/exercises/dependencies_exercises.qmd b/exercises/dependencies_exercises.qmd new file mode 100644 index 0000000..90dfad2 --- /dev/null +++ b/exercises/dependencies_exercises.qmd @@ -0,0 +1,11 @@ +## Dependencies exercises + +Try to answer the following questions: + +1. What are the python dependencies for the analysis? +2. What are the system dependencies? +3. Data dependencies + +Task: Document the dependencies that you find +Extension: Using your favourite dependency management tool (e.g. Conda, Nix), +create a reproducible environment configuration. diff --git a/exercises/documentation_exercises.qmd b/exercises/documentation_exercises.qmd new file mode 100644 index 0000000..b35dcea --- /dev/null +++ b/exercises/documentation_exercises.qmd @@ -0,0 +1,10 @@ +## Documentation Exercises + +Tasks: + +1. Create a README for the repository +2. Add comments and docstrings where you think is necessary + +Extension: Use an documentation tool, such as Sphinx, to automate building the +documentation. + diff --git a/exercises/final_exercises.qmd b/exercises/final_exercises.qmd new file mode 100644 index 0000000..76c860d --- /dev/null +++ b/exercises/final_exercises.qmd @@ -0,0 +1,7 @@ +## Try it out! + +Tasks: + +1. Share your repository with the person near you +2. Try to reproduce the results using the repo that you have been shared + diff --git a/exercises/version_control_exercises.qmd b/exercises/version_control_exercises.qmd new file mode 100644 index 0000000..0f5773b --- /dev/null +++ b/exercises/version_control_exercises.qmd @@ -0,0 +1,8 @@ +## Version Control Exercises + +Try to answer the following questions: + +1. Which files should be tracked? +2. Are there any files in the project that should not be tracked? +3. Are there any files missing that are needed to run the analysis? + From bfa6539980f7e167a702c556ee93000950e68a82 Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Wed, 1 Jul 2026 11:36:23 +0100 Subject: [PATCH 03/16] Add exercise slides to main slideshow --- src/slides.qmd | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/slides.qmd b/src/slides.qmd index cab3cf5..0fc5919 100644 --- a/src/slides.qmd +++ b/src/slides.qmd @@ -15,14 +15,19 @@ authors: {{< include introduction.qmd >}} {{< include version_control.qmd >}} +{{< include ../exercises/version_control_exercises.qmd >}} {{< include dependencies.qmd >}} +{{< include ../exercises/dependencies_exercises.qmd >}} {{< include automation.qmd >}} +{{< include ../exercises/automation_exercises.qmd >}} {{< include testing.qmd >}} +{{< include ../exercises/testing_exercises.qmd >}} {{< include documentation.qmd >}} +{{< include ../exercises/documentation_exercises.qmd >}} {{< include fair_principles.qmd >}} From 820c224c557071de4d3195599d043a527dd289e0 Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Wed, 1 Jul 2026 11:37:46 +0100 Subject: [PATCH 04/16] Create python script for producing the "warming lines" plot --- exercises/problem/plot1.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/exercises/problem/plot1.py b/exercises/problem/plot1.py index f62225e..97ca970 100644 --- a/exercises/problem/plot1.py +++ b/exercises/problem/plot1.py @@ -1,7 +1,21 @@ import xarray import matplotlib.pyplot as plt -ds = xarray.open_dataset("../data/HadCRUT.5.0.0.0_analysis_summary-series_180E-0N-180W-30N_annual.nc") +# Recreate the "warming stripes" visualisation +# https://showyourstripes.info/ + +ds = xarray.open_dataset("../data/HadCRUT.5.0.0.0_analysis_summary-series_global_annual.nc") + +fig, axs = plt.subplots(2, 1, figsize=(10,6), layout='constrained') + +x = ds['time'].data + +y_lower = ds['tas_lower'].data +y = ds['tas_mean'].data +y_upper = ds['tas_upper'].data + +axs[0].errorbar(x, y, yerr=[y - y_lower, y_upper - y]) + +axs[1].pcolor(y.reshape(1, -1), cmap="seismic") -plt.fill_between(ds['time'].data, ds['tas_lower'].data, ds['tas_upper']) plt.show() From 6802424dc8b9c1793e2581c248e00a2a100a3098 Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Wed, 1 Jul 2026 13:06:30 +0100 Subject: [PATCH 05/16] Remove non-existant exercise slide --- src/slides.qmd | 1 - 1 file changed, 1 deletion(-) diff --git a/src/slides.qmd b/src/slides.qmd index 0fc5919..c8565c4 100644 --- a/src/slides.qmd +++ b/src/slides.qmd @@ -24,7 +24,6 @@ authors: {{< include ../exercises/automation_exercises.qmd >}} {{< include testing.qmd >}} -{{< include ../exercises/testing_exercises.qmd >}} {{< include documentation.qmd >}} {{< include ../exercises/documentation_exercises.qmd >}} From 95bd3a6db7597b614eef89e4a098373d897ff5a1 Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Wed, 1 Jul 2026 13:33:47 +0100 Subject: [PATCH 06/16] Add plot of yearly temp fluctuations --- exercises/problem/plot2.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 exercises/problem/plot2.py diff --git a/exercises/problem/plot2.py b/exercises/problem/plot2.py new file mode 100644 index 0000000..0537204 --- /dev/null +++ b/exercises/problem/plot2.py @@ -0,0 +1,28 @@ +import xarray +import matplotlib.pyplot as plt + +global_ds = xarray.open_dataset("../data/HadCRUT.5.0.0.0_analysis_summary-series_global_annual.nc") +northern_ds = xarray.open_dataset("../data/HadCRUT.5.0.0.0_analysis_summary-series_northern-hemisphere_annual.nc") +southern_ds = xarray.open_dataset("../data/HadCRUT.5.0.0.0_analysis_summary-series_southern-hemisphere_annual.nc") + +def plot_temp_with_error(ax, ds, label): + axs.fill_between(ds['time'].data, ds['tas_lower'].data, ds['tas_upper'].data, + color="grey", alpha=0.3, edgecolor=None) + axs.plot(ds['time'].data, ds['tas_mean'].data) + + +fig, axs = plt.subplots(1, 1, figsize=(10,6), layout='constrained') + +plot_temp_with_error(axs, global_ds, label="global") +plot_temp_with_error(axs, northern_ds, label="northern") +plot_temp_with_error(axs, southern_ds, label="southern") + +t_min = global_ds['time'].min() +t_max = global_ds['time'].max() + +axs.hlines(0.0, t_min, t_max, color="black", linestyle="--") + +axs.set_xlabel("Year") +axs.set_ylabel("Annual Temperature Anomalies Compared to 1961-1990, \N{DEGREE SIGN}C") + +plt.show() From 9dbcbcc3debfaa00057f9fe82420f0c7f3c71b25 Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Tue, 7 Jul 2026 17:51:50 +0100 Subject: [PATCH 07/16] Add plot of monthly variations over the years of the data range --- exercises/problem/plot3.py | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 exercises/problem/plot3.py diff --git a/exercises/problem/plot3.py b/exercises/problem/plot3.py new file mode 100644 index 0000000..b618092 --- /dev/null +++ b/exercises/problem/plot3.py @@ -0,0 +1,39 @@ +import xarray + +import matplotlib.pyplot as plt +import matplotlib as mpl + +ds = xarray.open_dataset("../data/HadCRUT.5.0.0.0_analysis_summary-series_global_monthly.nc") + +fig, axs = plt.subplots(1, 1, figsize=(10,6), layout='constrained') + +N_years = ds.time.size / 12 + +alpha = 0.001 +delta_alpha = (1.0 - alpha)/N_years + +year_group = ds.groupby("time.year") + +years = [ year for year, _ in year_group] + +first_year = years[0] +last_year = years[-1] + +delta_years = last_year - first_year + +cmap = mpl.colormaps['rainbow'] + +for year, year_data in year_group: + alpha += delta_alpha + yearly_mean = year_data['tas_mean'].mean() + axs.plot(year_data.time.dt.strftime("%b"), year_data['tas_mean'], + label=year, color=cmap((year - first_year)/delta_years), alpha=alpha) + + +axs.set_ylabel("Temperature Anomalies Compared to 1961-1990, \N{DEGREE SIGN}C") +axs.set_xlabel("Month") + +colorizer = mpl.colorizer.Colorizer(norm=mpl.colors.Normalize(first_year, last_year), cmap='rainbow') +fig.colorbar(mpl.colorizer.ColorizingArtist(colorizer), ax=axs) + +plt.show() From 620c2a6d2b5939716ffbafe9d179a3cc1272ea27 Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Tue, 7 Jul 2026 18:00:35 +0100 Subject: [PATCH 08/16] Make first plot look a bit nicer --- exercises/problem/plot1.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/exercises/problem/plot1.py b/exercises/problem/plot1.py index 97ca970..07248cc 100644 --- a/exercises/problem/plot1.py +++ b/exercises/problem/plot1.py @@ -14,8 +14,11 @@ y = ds['tas_mean'].data y_upper = ds['tas_upper'].data -axs[0].errorbar(x, y, yerr=[y - y_lower, y_upper - y]) +axs[0].pcolor(y.reshape(1, -1), cmap="coolwarm") +axs[0].axis('off') -axs[1].pcolor(y.reshape(1, -1), cmap="seismic") +axs[1].errorbar(x, y, yerr=[y - y_lower, y_upper - y]) +axs[1].set_ylabel("Annual Temperature Anomalies Compared to 1961-1990, \N{DEGREE SIGN}C") +axs[1].set_xlabel("Year") plt.show() From 5a48e26908f0cec2fd6580b1f6e155f2670c05df Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Tue, 7 Jul 2026 18:12:09 +0100 Subject: [PATCH 09/16] Change VC exercises to just be downloading scripts and adding to git --- exercises/version_control_exercises.qmd | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/exercises/version_control_exercises.qmd b/exercises/version_control_exercises.qmd index 0f5773b..4adbf48 100644 --- a/exercises/version_control_exercises.qmd +++ b/exercises/version_control_exercises.qmd @@ -1,8 +1,16 @@ ## Version Control Exercises -Try to answer the following questions: +Hopefully, at this point in the week, you will all be comfortable with version control! -1. Which files should be tracked? -2. Are there any files in the project that should not be tracked? -3. Are there any files missing that are needed to run the analysis? +The exercises in this course will work on improving an example set of python scripts, +to make them more reproducible! +These scripts are hosted on the same GitHub repository as these slides: +(https://github.com/Cambridge-ICCS/ReproducibilityInComputingCourse) +Specifically in the directory `exercises/problem`. + +Tasks: + +1. Download the Python scripts from the GitHub repository +2. Create a new git repository on your local machine +3. Add the Python scripts to git for version control! From b8fd7087076d902d19431b8fc5b25a1c1e59ae45 Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Wed, 8 Jul 2026 11:08:59 +0100 Subject: [PATCH 10/16] Polish dependency exercise --- exercises/dependencies_exercises.qmd | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/exercises/dependencies_exercises.qmd b/exercises/dependencies_exercises.qmd index 90dfad2..82ebe69 100644 --- a/exercises/dependencies_exercises.qmd +++ b/exercises/dependencies_exercises.qmd @@ -1,11 +1,14 @@ ## Dependencies exercises -Try to answer the following questions: +Returning to the Python scripts, try to answer the following questions: -1. What are the python dependencies for the analysis? +1. What are the python dependencies? 2. What are the system dependencies? -3. Data dependencies +3. What are the data dependencies? -Task: Document the dependencies that you find -Extension: Using your favourite dependency management tool (e.g. Conda, Nix), -create a reproducible environment configuration. +### Extension + +Using your favourite dependency management tool (e.g. Conda, Nix), create a +reproducible environment configuration to handle the python and system dependencies. + +Create a way to automatically fetch the data dependencies when using the scripts. From 225c439fe47594c831dafe653a3a3a773ad81f0f Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Wed, 8 Jul 2026 11:55:16 +0100 Subject: [PATCH 11/16] Polish docs exercises --- exercises/documentation_exercises.qmd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/exercises/documentation_exercises.qmd b/exercises/documentation_exercises.qmd index b35dcea..800ac02 100644 --- a/exercises/documentation_exercises.qmd +++ b/exercises/documentation_exercises.qmd @@ -5,6 +5,8 @@ Tasks: 1. Create a README for the repository 2. Add comments and docstrings where you think is necessary -Extension: Use an documentation tool, such as Sphinx, to automate building the +## Extension + +Use an documentation tool, such as Sphinx, to automate building the documentation. From 4f8f1750de170da07fef1f9c4c0f0ba96c9c38be Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Wed, 8 Jul 2026 11:55:41 +0100 Subject: [PATCH 12/16] Polish automation exercises --- exercises/automation_exercises.qmd | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/exercises/automation_exercises.qmd b/exercises/automation_exercises.qmd index b8ff200..70117d2 100644 --- a/exercises/automation_exercises.qmd +++ b/exercises/automation_exercises.qmd @@ -1,6 +1,9 @@ ## Automation Exercises -Tasks: +1. What tools/technologies could be used to automate producing the plots? +2. How could we automatically fetch the data needed for the plots + +## Extension 1. Create an automated pipeline for producing all the figures 2. Automate the fetching of the necessary data From 7916153db118a6c191bba25df59cd5911113a380 Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Thu, 9 Jul 2026 16:37:08 +0100 Subject: [PATCH 13/16] Add exercises to README --- README.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0cfa066..a392290 100644 --- a/README.md +++ b/README.md @@ -32,16 +32,18 @@ The slides for this workshop can be viewed on the [website of this course](https ### Exercises -TODO +The exercises for this course are listed in the quarto markdown files which can be found in the [exercises](exercises/) directory. The tasks are +divided into those that can be answered/solved during the session, and also "Extension" tasks which can be worked on outside of the session. -The exercises for the course can be found in the [exercises](exercises/) directory. -These take the form of \. +There is a small group of python scripts in the [problem](exercises/problem/) sub-directory. These act as an example of a non-reproducible workflow. The tasks involve understanding and +improving the reproducibility of the scripts using what is covered in the session. It is recommended to download these scripts to a seperate location on your local machine for +this purpose. ### Worked Solution -TODO Worked solutions for all of the exercises can be found in the [worked solutions](worked-solutions/) directory. -These are for recapping after the course in case you missed anything, and contain example solutions. +These cover the tasks that require any modifications/improvements to the example workflow provided. They are not exhaustive, but use common technologies and approaches +to solving the tasks. ### Mini ReproHack @@ -66,7 +68,11 @@ If you want to follow along with the exercises, basic Python coding skills and a ## Installation and setup -TODO +To complete the exercises, you will need to download the dataset used by the python scripts. This can be found [here](https://www.metoffice.gov.uk/hadobs/hadcrut5/data/HadCRUT.5.0.0.0/download.html) +As part of the exercises will be assessing the data dependencies of the scripts, it will be left as a task to find out which of the datasets you need! + +It is recommended to download the python scripts from [exercises/problem](exercises/problem/) to your local machine, in a new directory. +This will allow you to develop the code as you would in practice. ## License From 4ae59ba73e288db5d0a62dd95289a6403e323bfc Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Thu, 9 Jul 2026 16:37:23 +0100 Subject: [PATCH 14/16] Update exercises README --- exercises/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/README.md b/exercises/README.md index 017ffd0..8b77cdc 100644 --- a/exercises/README.md +++ b/exercises/README.md @@ -9,7 +9,7 @@ reproducibility into account. ## Data If you are trying to work through these exercises, you will need the data that -the scripts rely on, which can be found here: https://doi.org/10.5281/zenodo.7014332. +the scripts rely on, which can be found here: https://www.metoffice.gov.uk/hadobs/hadcrut5/data/HadCRUT.5.0.0.0/download.html. ## Instructions: From f479751dedd1766b7e4abe2da0540b9d8afad194 Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Thu, 9 Jul 2026 17:24:46 +0100 Subject: [PATCH 15/16] Move extension section to same slide as tasks --- exercises/automation_exercises.qmd | 2 +- exercises/documentation_exercises.qmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/automation_exercises.qmd b/exercises/automation_exercises.qmd index 70117d2..24cd1ba 100644 --- a/exercises/automation_exercises.qmd +++ b/exercises/automation_exercises.qmd @@ -3,7 +3,7 @@ 1. What tools/technologies could be used to automate producing the plots? 2. How could we automatically fetch the data needed for the plots -## Extension +### Extension 1. Create an automated pipeline for producing all the figures 2. Automate the fetching of the necessary data diff --git a/exercises/documentation_exercises.qmd b/exercises/documentation_exercises.qmd index 800ac02..7caccbb 100644 --- a/exercises/documentation_exercises.qmd +++ b/exercises/documentation_exercises.qmd @@ -5,7 +5,7 @@ Tasks: 1. Create a README for the repository 2. Add comments and docstrings where you think is necessary -## Extension +### Extension Use an documentation tool, such as Sphinx, to automate building the documentation. From 4f82e58084451e4370cfd30d2cd82f47fb61487c Mon Sep 17 00:00:00 2001 From: jackdfranklin Date: Thu, 9 Jul 2026 17:43:29 +0100 Subject: [PATCH 16/16] Polish final exercise --- exercises/final_exercises.qmd | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/exercises/final_exercises.qmd b/exercises/final_exercises.qmd index 76c860d..437862f 100644 --- a/exercises/final_exercises.qmd +++ b/exercises/final_exercises.qmd @@ -2,6 +2,14 @@ Tasks: -1. Share your repository with the person near you +1. Try running some of the worked examples in the repository + - Which ones work? Which do you find the easiest to use? + +### Extensions + +1. Share your repository with someone, see if they can reproduce the plotd 2. Try to reproduce the results using the repo that you have been shared +3. Try to use a different dataset (e.g. a different version of the HadCrut data) + - Does it work? + - What changes did you need to make?