Demonstrate the power of deep learning models and variational approaches in the detection and attribution of climate change, using climate simulation and observational data.
The modelling pipeline consists of the following three procedures: data acquisition & preprocessing, climate change detection and climate change attribution.
The model was implemented in Python 3.10 using PyTorch v1.13.0. Further details can be found in the Environmental Data Science paper "Detection and attribution of climate change: A deep learning and variational approach".
Bône, Constantin, Guillaume Gastineau, Sylvie Thiria, and Patrick Gallinari. "Detection and attribution of climate change: A deep learning and variational approach." Environmental Data Science 1 (2022): e27. https://doi.org/10.1017/eds.2022.17
:::{note} The notebook contributors acknowledge the authors of the paper for providing a reproducible and public code available at https://gitlab.com/ConstantinBone/detection-and-attribution-of-climate-change-a-deep-learning-and-variational-approach. The source codde of the paper was adapted to this notebook. :::
'''Nath & Data Libraries'''
import os
import numpy as np
import random
import pandas as pd
import netCDF4 as nc4
from scipy import signal
import pooch
''' ML Libraries'''
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
from sklearn.metrics import mean_squared_error
import pickle
''' Miscellaneous Libraries'''
from tqdm import tqdm
'''Visualization Libraries'''
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid", {"grid.color": "0.5", "axes.edgecolor": "0.2"})
color_palette = ["#FF8853", "#FFE174", "#007597", "#C1C36D", "#00A697", "#BC97E0", "#ffc0bf"]
notebook_folder = './notebook'
if not os.path.exists(notebook_folder):
os.makedirs(notebook_folder)
# Dictionary of dictionaries containing the number of simulations per forcing per model
model_dict = {
"IPSL" : {'hist-GHG' : 10,'hist-aer' : 10, 'hist-nat' : 10,'historical' : 32},
"ACCESS" : {'hist-GHG' : 3,'hist-aer' : 3, 'hist-nat' : 3,'historical' : 30},
"CESM2" : {'hist-GHG' : 3,'hist-aer' : 2, 'hist-nat' : 3,'historical' : 11},
"BCC" : {'hist-GHG' : 3,'hist-aer' : 3, 'hist-nat' : 3,'historical' : 3},
"CanESM5" : {'hist-GHG' : 50,'hist-aer' : 30, 'hist-nat' : 50,'historical' : 65},
"FGOALS" : {'hist-GHG' : 3,'hist-aer' : 3, 'hist-nat' : 3,'historical' : 6},
"HadGEM3" : {'hist-GHG' : 4,'hist-aer' : 4, 'hist-nat' : 4,'historical' : 5},
"MIRO" : {'hist-GHG' : 3,'hist-aer' : 3, 'hist-nat' : 3,'historical' : 50},
"ESM2" : {'hist-GHG' : 5,'hist-aer' : 5, 'hist-nat' : 5,'historical' : 7},
"NorESM2" : {'hist-GHG' : 3,'hist-aer' : 3, 'hist-nat' : 3,'historical' : 3},
"CNRM" : {'hist-GHG' : 9,'hist-aer' : 10, 'hist-nat' : 10,'historical' : 30},
"GISS" : {'hist-GHG' : 10,'hist-aer' : 12, 'hist-nat' : 20,'historical' : 19}
}
data_dir = 'notebook/data/data_pre_ind_2/' # Location of the data (Should be changed to something more logical as here it implicates that only the preindustrial data is there)
model_list = ['CanESM5', 'CNRM', 'IPSL', 'ACCESS', 'BCC', 'FGOALS', 'HadGEM3', 'MIRO', 'ESM2','NorESM2','CESM2','GISS']
class CNN_Model(nn.Module):
"""
A class for a Convolutional Neural Network.
The CNN consists of three convolutional layers, each with a padding of 5
and a kernel size of 11 that are non-linearly transformed using a hyperbolic tangent function.
---
Parameters
----------
size_channel : int
length of the layer (number of neurons) (defaults to 10)
bias: boolean
whether to add a learnable bias to the input (defaults to True)
Methods
-------
forward(X):
Defines the computation performed at every call.
"""
def __init__(self, size_channel = 10, bias = True):
super(CNN_Model, self).__init__()
self.tanh = nn.Tanh()
self.conv1 = nn.Conv1d(3, size_channel, kernel_size=11, bias=bias, padding=5) # The input layer has a size of 3 due to the three forcings [ghg, aer, nat]
self.conv2 = nn.Conv1d(size_channel, size_channel, kernel_size=11, bias=bias, padding=5)
self.conv3 = nn.Conv1d(size_channel, 1, kernel_size=11, bias=bias, padding=5) # The output layer has a size of 1 as the target [hist]
def forward(self, x):
"""
Defines the computation performed at every call.
The input goes through 2 convolutional and hyperbolic tangent layers before being
transformed to float and transformed to a tensor of shape (batch_size, N_years)
---
Parameters
----------
x : torch.tensor of shape (batch_size, N_forcings, N_years), where the batch size defaults to 100, N_forcings equals 3 and represents the three forcings [ghg, aer, nat], and N_years equals 115 and represents the data from 1900-2014.
input tensor containing the batch of data for the three forcings over the time span of interest.
Returns
-------
Output of computation : torch.tensor of shape (batch_size, N_years)
output tensor that tries to predict the historical simulations using all the external forcings as varying boundary conditions
"""
x = self.conv1(x)
x = self.tanh(x)
x = self.conv2(x)
x = self.tanh(x)
x = x.float()
x = self.conv3(x)[:,0,:]
return x
class Linear_Model(nn.Module):
"""
A class for a Simple Linear Module used for comparison.
---
Parameters
----------
bias: boolean
whether to add a learnable bias to the input (defaults to False)
Methods
-------
forward(X):
Defines the computation performed at every call.
"""
def __init__(self, bias = False):
super(Linear_Model, self).__init__()
self.linear = nn.Linear(3, 1, bias = bias)
def forward(self, X):
"""
Defines the computation performed at every call.
The input goes through a linear layer before being transformed to a tensor of shape [batch_size, N_years]
---
Parameters
----------
x : torch.tensor of size (batch_size, N_forcings, N_years), where the batch size defaults to 100, N_forcings equals 3 and represents the three forcings [ghg, aer, nat], and N_years equals 115 and represents the data from 1900-2014.
input tensor containing the batch of data for the three forcings over the time span of interest.
Returns
-------
Output of computation : torch.tensor of shape (batch_size, N_years)
output tensor that tries to predict the historical simulations using all the external forcings as varying boundary conditions
"""
x = self.linear(X.transpose(1,2))
return x[:,:,0]
class MonDataset(Dataset):
"""
A pytorch Dataset class that is used as an input for the CNN DataLoader.
---
Parameters
----------
ghg: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 50, and N_years equals 115 and represents the data from 1900-2014
A list of tensors, containing the greenhouse gas (GHG) single forcing simulations for each model over the time span of interest.
aer: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 50, and N_years equals 115 and represents the data from 1900-2014
A list of tensors, containing the aerosol (AER) single forcing simulations for each model over the time span of interest.
nat: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 2 to 30, and N_years equals 115 and represents the data from 1900-2014
A list of tensors, containing the natural (NAT) single forcing simulations for each model over the time span of interest.
historical: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 65, and N_years equals 115 and represents the data from 1900-2014
A list of tensors, containing the historical (HIST) simulations using all the external forcings as varying boundary conditions for each model over the time span of interest.
model_of_interest: int
The index of the model to exclude (include) when creating the train (test) dataset. Set to -1 in order to include all models.
dataset_type: str, one of ["train", "test"]
Whether to create a train or test dataset
Methods
-------
len(N_samples):
Defines the number of samples returned.
__getitem__():
Fetch a random data sample.
"""
def __init__(self, ghg, aer, nat, historical, model_of_interest=-1, dataset_type='train'):
self.ghg = ghg
self.aer = aer
self.nat = nat
self.historical = historical
self.dataset_type = dataset_type
self.model_of_interest = model_of_interest
def __len__(self, N_samples = 50000):
"""
Defines the number of samples returned.
---
Parameters
----------
N_samples: int
Number of samples to return. Defaults to 5e4.
Returns
-------
Number of samples : int
"""
return N_samples
def __getitem__(self, idx):
"""
Fetch a random data sample.
If self.model_of_interest is -1, no models are excluded and in both the train and test sample we randomly choose a model and then randomly choose a simulation for each forcing to add to the dataset.
Otherwise, if we want to exclude a specific model, within the train set we randomly choose a model that is not the model we want to exclude, while in the test set we only acquire data from that model.
---
Returns
-------
X : torch.tensor of shape (N_forcings, N_years), where N_forcings equals 3 and represents the three forcings [ghg, aer, nat], and N_years equals 115 and represents the data from 1900-2014.
a tensor containing a random sample of the simulation data for the three forcings over the time span of interest.
y : torch.tensor of shape (N_years, ) where N_years equals 115 and represents the data from 1900-2014
a tensor containing a random sample of the historical simulation data over the time span of interest.
model_idx : int
the index of the model used to acquire the random sample
"""
if(self.dataset_type == 'train'):
# We sample a random index between 0 and 11 until we find one that is not the model we want to exclude.
while True:
model_idx = random.randint(0, len(self.ghg) - 1)
if(model_idx != self.model_of_interest):
break
elif(self.dataset_type == 'test'):
# We take the index of the model we want to include.
model_idx = self.model_of_interest
# If the model is -1, then all models can potentially be included, thus we randomly sample one of the 12 models
if(model_idx==-1):
model_idx = random.randint(0, len(self.ghg) - 1)
#We sample a simulation of each forcing of the model
ghg_sample = self.ghg[model_idx][random.randint(0, self.ghg[model_idx].shape[0] - 1)]
aer_sample = self.aer[model_idx][random.randint(0, self.aer[model_idx].shape[0] - 1)]
nat_sample = self.nat[model_idx][random.randint(0, self.nat[model_idx].shape[0] - 1)]
hist_sample = self.historical[model_idx][random.randint(0, self.historical[model_idx].shape[0] - 1)]
X = torch.stack((ghg_sample, aer_sample, nat_sample)).float()
y = hist_sample.float()
return X, y, model_idx
def calculate_spatial_mean(data):
"""
Calculate the spatially weighted mean over the globe.
---
Parameters
----------
data : np.array of shape (N_years, latitude, longitude)
temporal data covering the entire globe
Returns
-------
obs_data_mean : np.array of shape (N_years)
Annual spatially averaged observation data from 1900 to 2020.
"""
data_mean = np.zeros((data.shape[0])) #Initialize np array to keep the results
latitude = np.linspace(-87.5, 87.5, 36) #Initialize array that contains the latitude coordinates used in the spatial weighting
div = 0
for j in range(36):
for k in range(72):
data_mean += data[:,j,k] * np.cos(np.radians(latitude[j]))
div += np.cos(np.radians(latitude[j]))
data_mean /= div
return data_mean
def get_observation_data():
"""
Get annual observation (OBS) data of the 2 m air temperature over the continent from HadCRUT4 (Morice et al., 2012)
blended with sea surface temperature from HadISST4 (Rayner et al., 2003) over the time span of interest. The data is spatially averaged
---
Returns
-------
obs_data_mean : np.array of shape (121, )
Annual spatially averaged observation data from 1900 to 2020.
"""
obs_nc = nc4.Dataset(data_dir + 'obs.nc', 'r')
obs_temperature_data = obs_nc.variables['temperature_anomaly'][:]
return calculate_spatial_mean(obs_temperature_data)
def calculate_preindustrial_average(forcing, model_name = 'IPSL', physics = 1):
"""
Calculate pre-industrial average between years 1850-1900 for a given forcing and model.
---
Parameters
----------
forcing : str: one of ["hist-GHG", "hist-aer", "hist-nat", "historical"]
type of forcing used in the simulation
model_name : str: one of the 12 models in the model_list
model used in the simulation
physics: int: one of [1, 2]
parameter used for the GISS model
Returns
-------
preindustrial_average : float
The pre-industrial average between the years 1850-1900.
"""
# Since there are special rules for the GISS model it has to be done like this. Think of ways to make it simpler
preindustrial_average = np.zeros((36,72))
if(model_name=="GISS"):
if(type=='hist-aer'):
if(physics==1):
for i in range(model_dict[model_name][forcing]):
if(i<5 or i>9):
simu_nc = nc4.Dataset(f"{data_dir}{model_name}_{forcing}_{i+1}.nc", 'r')
simu_temperature_data = simu_nc.variables['tas'][0:50]
preindustrial_average += np.mean(simu_temperature_data, axis=0)/7
else:
for i in range(model_dict[model_name][forcing]):
if(i>=5 and i<=9):
simu_nc = nc4.Dataset(f"{data_dir}{model_name}_{forcing}_{i+1}.nc", 'r')
simu_temperature_data = simu_nc.variables['tas'][0:50]
preindustrial_average += np.mean(simu_temperature_data, axis=0)/5
if(type=='historical'):
if(physics==1):
for i in range(model_dict[model_name][forcing]):
if(i<10):
simu_nc = nc4.Dataset(f"{data_dir}{model_name}_{forcing}_{i+1}.nc", 'r')
simu_temperature_data = simu_nc.variables['tas'][0:50]
preindustrial_average += np.mean(simu_temperature_data, axis=0)/10
else:
for i in range(model_dict[model_name][forcing]):
if (i>=10):
simu_nc = nc4.Dataset(f"{data_dir}{model_name}_{forcing}_{i+1}.nc", 'r')
simu_temperature_data = simu_nc.variables['tas'][0:50]
preindustrial_average += np.mean(simu_temperature_data, axis=0)/9
else:
for i in range(model_dict[model_name][forcing]):
if (i>=5 and i<=9):
simu_nc = nc4.Dataset(f"{data_dir}{model_name}_{forcing}_{i+1}.nc", 'r')
simu_temperature_data = simu_nc.variables['tas'][0:50]
preindustrial_average += np.mean(simu_temperature_data, axis=0)/5
else:
for i in range(model_dict[model_name][forcing]):
simu_nc = nc4.Dataset(f"{data_dir}{model_name}_{forcing}_{i+1}.nc", 'r')
simu_temperature_data = simu_nc.variables['tas'][0:50]
preindustrial_average += np.mean(simu_temperature_data, axis=0)/model_dict[model_name][forcing]
return preindustrial_average
def get_simulation(simulation_index, forcing, model_name = 'IPSL', filter = False):
"""
Get a simulation for a given forcing and model.
---
Parameters
----------
simulation_index : int
the index of the requested simulation
forcing : str: one of ["hist-GHG", "hist-aer", "hist-nat", "historical"]
type of forcing used in the simulation
model_name : str: one of the 12 models in the model_list
model used in the simulation
filter : boolean. Defaults to False.
whether to apply a lowpass filter to the GHG and AER forcings
Returns
-------
simulation : np.array of shape (N_years), where N_years equals 115
The data from one simulation for a given forcing and climate model for the years 1900-2014, from which the pre-industrial average is excluded.
"""
# Calculate pre-industrial average
physics = 1
if(model_name=='GISS'):
if(forcing=='hist-aer' and (simulation_index>=6 and simulation_index<=10)):
physics = 2
elif(forcing=='historical' and simulation_index>10):
physics = 2
preindustrial_average = calculate_preindustrial_average(forcing, model_name = model_name, physics = physics)
# Calculate post-industrial 1900-2015 average
simu_nc = nc4.Dataset(f"{data_dir}{model_name}_{forcing}_{simulation_index}.nc", 'r')
simu_temperature_data = simu_nc.variables['tas'][50:]
# Subtract preindustrial average from the post-industrial data
simu_temperature_data = simu_temperature_data - preindustrial_average
simulation = calculate_spatial_mean(simu_temperature_data)
if(filter):
if(forcing=='hist-GHG' or forcing=='hist-aer'):
b, a = signal.butter(20, 1/5, btype='lowpass') # Lowpass used in the filtrage of the data
simulation = signal.filtfilt(b, a, simulation)
return simulation
def get_all_simulations(forcing, model_name = 'IPSL',filter = False):
"""
Get all simulations for a given forcing and model.
---
Parameters
----------
forcing : str: one of ["hist-GHG", "hist-aer", "hist-nat", "historical"]
type of forcing used in the simulation
model_name : str: one of the 12 models in the model_list
model used in the simulation
filter : boolean. Defaults to False.
whether to apply a lowpass filter to the GHG and AER forcings
Returns
-------
simulation_data : np.array of shape (N_simu, N_years), where N_simu is dependent on the model and ranges from 3 to 50, and N_years equals 115 and represents the data from 1900-2014
The data from all simulations for a given forcing and climate model for the years 1900-2014, from which the pre-industrial average is excluded.
"""
simulation_data = np.zeros((model_dict[model_name][forcing], 115))
for i in range(model_dict[model_name][forcing]):
simulation_data[i] = get_simulation(i+1, forcing = forcing, model_name = model_name, filter = filter)[0:115]
return (simulation_data)
def get_model_dataset(model_name = 'ALL', normalize = True, filter = False):
"""
Get the entire dataset (all simulations for all forcings) for a climate model or all climate models.
---
Parameters
----------
model_name : str: one of the 12 models in the model_list or "ALL" to acquire dataset for all climate models
model used in the simulation
normalize : boolean. Defaults to False.
whether to normalize all simulations by the maximum historical value
filter : boolean. Defaults to False.
whether to apply a lowpass filter to the GHG and AER forcings
Returns
-------
ghg: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 50, and N_years equals 115 and represents the data from 1900-2014
A list of tensors, containing the greenhouse gas (GHG) single forcing simulations for each model over the time span of interest.
aer: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 50, and N_years equals 115 and represents the data from 1900-2014
A list of tensors, containing the aerosol (AER) single forcing simulations for each model over the time span of interest.
nat: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 2 to 30, and N_years equals 115 and represents the data from 1900-2014
A list of tensors, containing the natural (NAT) single forcing simulations for each model over the time span of interest.
historical: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 65, and N_years equals 115 and represents the data from 1900-2014
A list of tensors, containing the historical (HIST) simulations using all the external forcings as varying boundary conditions for each model over the time span of interest.
maximum_historical_list: list of length 1 or length 12, dependent if model_name=="ALL"
A list of maximum historical values per model
"""
maximum_historical_list = []
if (model_name == 'ALL'):
aer = []
ghg = []
nat = []
historical = []
for model_curr in tqdm(model_list):
print(model_curr)
aer_curr = torch.tensor(get_all_simulations('hist-aer', model_name = model_curr, filter = filter)[:, 0:115])
ghg_curr = torch.tensor(get_all_simulations('hist-GHG', model_name = model_curr, filter = filter)[:, 0:115])
nat_curr = torch.tensor(get_all_simulations('hist-nat', model_name = model_curr, filter = filter)[:, 0:115])
historical_curr = torch.tensor(get_all_simulations('historical', model_name = model_curr, filter = filter)[:, 0:115])
historical_max = torch.max(torch.mean(historical_curr, dim=0))
maximum_historical_list.append(historical_max)
if(normalize):
aer_curr = aer_curr / historical_max
ghg_curr = ghg_curr / historical_max
nat_curr = nat_curr / historical_max
historical_curr = historical_curr / historical_max
aer.append(aer_curr)
ghg.append(ghg_curr)
nat.append(nat_curr)
historical.append(historical_curr)
else:
aer = torch.tensor(get_all_simulations('hist-aer', model_name = model_name, filter = filter)[:,0:115])
ghg = torch.tensor(get_all_simulations('hist-GHG', model_name = model_name, filter = filter)[:,0:115])
nat = torch.tensor(get_all_simulations('hist-nat', model_name = model_name, filter = filter)[:,0:115])
historical = torch.tensor(get_all_simulations('historical', model_name = model_name, filter = filter)[:,0:115])
historical_max = torch.max(torch.mean(historical, dim=0))
maximum_historical_list.append(historical_max)
if(normalize):
aer = aer /historical_max
ghg = ghg / historical_max
nat = nat / historical_max
historical = historical/ historical_max
return ghg, aer, nat, historical, np.array(maximum_historical_list)
def train_models(train_dataloader, test_dataloader, lr = 0.001, N_epoch = 100, size_channel = 10, regularization = 0):
"""
Train the CNN and Linear model.
---
Parameters
----------
train_dataloader : pytorch Dataloader
the data loader for the training set that consists of a sample of simulations from the three forcings for random climate models.
test_dataloader : pytorch Dataloader
the data loader for the test set that consists of a sample of simulations from the three forcings for random climate models.
lr : int
learning rate. Defaults to 1e-3.
N_epoch : int
the number of epochs used to train the model. Defaults to 1e2.
size_channel : int
length of the layer (number of neurons) (defaults to 10)
regularization : float
the amount of regularization used when training the model. Defaults to 0, representing no regularization.
Returns
model, Loss_tab,Loss_test_tab, model_linear, Loss_tab_lin,Loss_test_tab_lin
-------
model_CNN : CNN_Model
a CNN model which takes data from the three single forcing models [ghg, aer, nat] and is trained to predict the historical (HIST) simulations using all the external forcings as varying boundary conditions
loss_train_CNN: list of length N_epoch
list that contains the MSE loss of the model on the training set after each epoch
loss_test_CNN: list of length N_epoch
list that contains the MSE loss of the model on the test set after each epoch
model_linear : Linear_Model
a benchmark linear model which takes data from the three single forcing models [ghg, aer, nat] and is trained to predict the historical (HIST) simulations using all the external forcings as varying boundary conditions
loss_train_linear: list of length N_epoch
list that contains the MSE loss of the model on the training set after each epoch
loss_test_linear: list of length N_epoch
list that contains the MSE loss of the model on the test set after each epoch
"""
model_CNN = CNN_Model(size_channel = size_channel, bias = True)
model_linear = Linear_Model(bias = False)
criterion_CNN = nn.MSELoss()
criterion_linear = nn.MSELoss()
optim_CNN = torch.optim.Adam(model_CNN.parameters(), lr=lr, weight_decay = regularization)
optim_linear = torch.optim.Adam(model_linear.parameters(), lr=lr, weight_decay=regularization)
loss_train_CNN = []
loss_test_CNN = []
loss_train_linear = []
loss_test_linear = []
for iter in tqdm(range(N_epoch)):
loss_total_train_CNN = 0
loss_total_test_CNN = 0
length_train_CNN = 0
length_test_CNN = 0
loss_total_train_linear = 0
loss_total_test_linear = 0
length_train_linear = 0
length_test_linear = 0
with torch.no_grad():
for(X_test, y_test, model_idx) in test_dataloader:
y_hat_test_CNN = model_CNN(X_test)
loss_test = criterion_CNN(y_hat_test_CNN.float(), y_test.float())
loss_total_test_CNN += loss_test
length_test_CNN += 1
y_hat_test_linear = model_linear(X_test)
loss_test = criterion_linear(y_hat_test_linear.float(),y_test.float())
loss_total_test_linear += loss_test
length_test_linear += 1
for(X_train, y_train, model_idx) in train_dataloader:
y_hat_train_CNN = model_CNN(X_train)
loss = criterion_CNN(y_hat_train_CNN.float(), y_train.float())
loss.backward()
optim_CNN.step()
loss_total_train_CNN += loss
optim_CNN.zero_grad()
length_train_CNN +=1
y_hat_train_linear = model_linear(X_train)
loss = criterion_linear(y_hat_train_linear.float(), y_train.float())
loss.backward()
optim_linear.step()
loss_total_train_linear += loss
optim_linear.zero_grad()
length_train_linear += 1
loss_total_train_CNN = loss_total_train_CNN.item() / length_train_CNN
loss_total_test_CNN = loss_total_test_CNN.item() / length_test_CNN
loss_total_train_linear = loss_total_train_linear.item() / length_train_linear
loss_total_test_linear = loss_total_test_linear.item() / length_test_linear
if(iter%10 == 0):
print(f"Iteration {iter}:")
print(f"\tCNN: training loss: {loss_total_train_CNN:.6f}, test loss {loss_total_test_CNN:.6f}")
print(f"\tLinear: training loss: {loss_total_train_linear:.6f}, test loss {loss_total_test_linear:.6f}")
loss_train_CNN.append(loss_total_train_CNN)
loss_test_CNN.append(loss_total_test_CNN)
loss_train_linear.append(loss_total_train_linear)
loss_test_linear.append(loss_total_test_linear)
return model_CNN, np.array(loss_train_CNN), np.array(loss_test_CNN), model_linear, np.array(loss_train_linear), np.array(loss_test_linear)
The data can be found in a compressed file data_pre_ind_2
at https://gitlab.com/ConstantinBone/detection-and-attribution-of-climate-change-a-deep-learning-and-variational-approach. We use pooch to fetch and unzip them directly from the GitLab repository.
pooch.retrieve(
url="https://gitlab.com/ConstantinBone/detection-and-attribution-of-climate-change-a-deep-learning-and-variational-approach/-/raw/main/data_pre_ind_2.zip",
known_hash=None,
processor=pooch.Unzip(extract_dir=os.path.join(notebook_folder,'data')),
path=f".",
)
['/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_16.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_58.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-GHG_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/obs.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-aer_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_19.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_28.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_historical_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-aer_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_19.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-aer_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_24.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_48.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_39.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_30.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_12.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_29.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_14.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_20.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-aer_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_18.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_20.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_14.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_29.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_38.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_13.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_28.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_15.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_12.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-aer_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_19.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_21.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_15.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_28.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_17.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_59.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_spe.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_18.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_29.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_historical_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-nat_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_18.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_25.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_49.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_20.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_40.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_13.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_14.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_45.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_25.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_27.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_14.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_20.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_31.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_32.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_52.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_37.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_27.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_13.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_42.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_22.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_21.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_30.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_35.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_44.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_15.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_16.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_50.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_30.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_23.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_41.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_21.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_35.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_24.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_15.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_24.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_44.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_17.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_50.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_62.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_33.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_18.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_56.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_46.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_17.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_23.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_12.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_40.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_34.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_26.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_25.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_31.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_22.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_40.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_20.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_34.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_25.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_14.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_25.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_45.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_16.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_63.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_32.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_19.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_57.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_47.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_16.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_22.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_13.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_41.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_35.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_27.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_24.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_30.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_50.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_21.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_41.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_12.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_15.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_44.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_24.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_26.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_15.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_21.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_30.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_53.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-aer_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_36.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_26.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_12.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_43.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_23.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_20.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_34.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_45.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_14.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_17.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-aer_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_31.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_26.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_37.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_43.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_23.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_21.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_12.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_12.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_26.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_46.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_15.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_17.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_31.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_60.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_54.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_15.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_28.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_44.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_21.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_36.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_42.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_13.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_33.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_24.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_27.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_16.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_13.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_22.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_42.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_33.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_30.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_22.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_25.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_16.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_18.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_47.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_27.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_50.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_64.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_35.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_18.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_25.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_40.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_37.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_20.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_23.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_32.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-aer_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_17.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_14.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_46.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_17.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_12.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_23.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_43.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_32.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_31.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_23.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_24.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_17.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_46.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_26.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_19.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_51.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_65.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_34.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_19.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_24.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_41.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_36.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_21.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_22.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_33.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_16.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_15.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_47.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_27.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_36.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_42.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_22.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_20.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_13.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_13.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_27.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_47.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_14.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_16.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_30.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_61.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_55.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_14.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_29.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_45.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_20.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_37.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_43.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_12.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_30.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_32.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_25.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_26.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_29.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_49.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_16.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_18.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_18.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_48.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_19.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_39.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_22.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_16.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_14.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_19.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_48.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_28.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-GHG_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_12.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_39.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_28.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-nat_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_29.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_38.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-aer_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_12.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_26.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_15.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_18.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_49.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_29.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-GHG_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_13.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_38.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_29.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_28.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-nat_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_39.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-aer_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_13.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_27.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_8.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_6.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_11.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_17.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_28.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_48.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_19.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_10.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_19.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_49.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_18.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-GHG_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-nat_1.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_historical_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_38.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-aer_4.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_23.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_5.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_9.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_7.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_3.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_17.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-nat_2.nc', '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_5.nc']
We first start by acquiring the annual observation data (OBS) of the 2 m air temperature over the continent from HadCRUT4 blended with sea surface temperature from HadISST4. The data is spatially averaged over the globe and only the time span of interest (1900 - 2014) is acquired. To make OBS and HIST comparable, OBS is corrected of its blending effects using a 1.06 multiplier coefficient. Finally, the OBS data is normalized to a maximum of 1 by dividing the series with the OBS maximum.
We then get the simulation data for all forcings (GHG, AER, NAT, HIST) of all 12 climate models. The simulation data is spatially averaged over the globe to create an annual mean from which the pre-industrial average is subtracted. The simulations are then also max-normalized by dividing with the historical maximum.
# Get observation data
observation_data = torch.tensor(get_observation_data())[0:115] * 1.06
observation_max = torch.max(observation_data)
observation_data = observation_data /observation_max
# Get the simulation data for all forcings and all climate models
ghg, aer, nat, historical, maximum_historical_list = get_model_dataset(model_name = 'ALL', normalize = True, filter = False)
0%| | 0/12 [00:00<?, ?it/s]
CanESM5
8%|███████████▎ | 1/12 [01:11<13:01, 71.08s/it]
CNRM
17%|██████████████████████▋ | 2/12 [01:21<05:55, 35.58s/it]
IPSL
25%|██████████████████████████████████ | 3/12 [01:32<03:37, 24.12s/it]
ACCESS
33%|█████████████████████████████████████████████▎ | 4/12 [01:39<02:20, 17.58s/it]
BCC
42%|████████████████████████████████████████████████████████▋ | 5/12 [01:40<01:21, 11.62s/it]
FGOALS
50%|████████████████████████████████████████████████████████████████████ | 6/12 [01:42<00:48, 8.12s/it]
HadGEM3
58%|███████████████████████████████████████████████████████████████████████████████▎ | 7/12 [01:43<00:30, 6.03s/it]
MIRO
67%|██████████████████████████████████████████████████████████████████████████████████████████▋ | 8/12 [02:01<00:38, 9.60s/it]
ESM2
75%|██████████████████████████████████████████████████████████████████████████████████████████████████████ | 9/12 [02:03<00:22, 7.38s/it]
NorESM2
83%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 10/12 [02:04<00:10, 5.49s/it]
CESM2
92%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 11/12 [02:07<00:04, 4.49s/it]
GISS
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 12/12 [02:13<00:00, 11.09s/it]
The following table shows the number of simulations per forcing per climate model (Table 1. of the paper). It should be noted that the paper lists a value of 50 AER simulations and 30 NAT simulations for the CanESM5 model, while the data show the opposite, thus the mistake is probably due to a manual labeling error.
# Create a table containing the number of simulations per forcing per climate model (Table 1. of the paper)
N_simu_table_list = []
for i in range(len(model_list)):
N_simu_table_list.append([model_list[i], ghg[i].shape[0], aer[i].shape[0], nat[i].shape[0], historical[i].shape[0]])
N_simu_table = pd.DataFrame(N_simu_table_list, columns = ["Model Name", "#GHG", "#AER", "#NAT", "#HIST"])
N_simu_table
Model Name | #GHG | #AER | #NAT | #HIST | |
---|---|---|---|---|---|
0 | CanESM5 | 50 | 30 | 50 | 65 |
1 | CNRM | 9 | 10 | 10 | 30 |
2 | IPSL | 10 | 10 | 10 | 32 |
3 | ACCESS | 3 | 3 | 3 | 30 |
4 | BCC | 3 | 3 | 3 | 3 |
5 | FGOALS | 3 | 3 | 3 | 6 |
6 | HadGEM3 | 4 | 4 | 4 | 5 |
7 | MIRO | 3 | 3 | 3 | 50 |
8 | ESM2 | 5 | 5 | 5 | 7 |
9 | NorESM2 | 3 | 3 | 3 | 3 |
10 | CESM2 | 3 | 2 | 3 | 11 |
11 | GISS | 10 | 12 | 20 | 19 |
To visualize the intra-specific and inter-specific variation of the simulations for the 12 climate models, we plot the three single-forcing simulations: GHG(orange), AER(yellow), NAT(blue) and the historical simulation using all external forcings: HIST (olive) for each model. The mean value of the simulations per forcing are shown with a solid line, while the shaded color represents one standard deviation off the mean. The observation data: OBS is also shown with a black dotted line.
fig, ax = plt.subplots(figsize = (16,10), ncols = 4, nrows = 3)
plt.suptitle("Visualization of the simulations of the 12 models", fontsize = 20)
for i in range(len(model_list)):
plt.subplot(3, 4, i+1)
plt.title(model_list[i])
for j, (forcing, forcing_name) in enumerate(zip([ghg, aer, nat, historical], ["GHG", "AER", "NAT", "HIST"])):
forcing_mean = torch.mean(forcing[i], axis=0)
forcing_std = torch.std(forcing[i], axis=0)
plt.plot(forcing_mean, color = color_palette[j], alpha = 0.8, label = forcing_name)
plt.fill_between(np.arange(115), forcing_mean - forcing_std, forcing_mean + forcing_std, color = color_palette[j], alpha = 0.3)
plt.plot(observation_data, color = "#444444", linestyle = ":", linewidth = 3, alpha = 1, label = "OBS")
plt.ylim(-2.5, 2.5)
plt.xticks(np.linspace(0, 120, 5), [str(tick+1900) for tick in np.linspace(0, 120, 5, dtype=int)])
plt.yticks(np.linspace(-2.5, 2.5, 5), [str(np.round(tick, 2)) for tick in np.linspace(-2.5, 2.5, 5, dtype=float)])
if(i==0):
handles, labels = ax[0,0].get_legend_handles_labels()
plt.legend(handles, ["GHG", "AER", "NAT", "HIST", "OBS"], loc = "upper left", fontsize = 10)
plt.tight_layout()
plt.show()
The following figure shows the variation of the forcings across all 12 climate models. The same color code as the previous figure is used.
fig, ax = plt.subplots(figsize = (8,5), ncols = 1, nrows = 1)
plt.suptitle("Mean and standard deviation of the simulations of the 12 models", fontsize = 20)
for j, (forcing, forcing_name) in enumerate(zip([ghg, aer, nat, historical], ["GHG", "AER", "NAT", "HIST"])):
forcing_mean = torch.mean(torch.cat(forcing), axis=0)
forcing_std = torch.std(torch.cat(forcing), axis=0)
plt.plot(forcing_mean, color = color_palette[j], alpha = 0.8, label = forcing_name)
plt.fill_between(np.arange(115), forcing_mean - forcing_std, forcing_mean + forcing_std, color = color_palette[j], alpha = 0.3)
plt.plot(observation_data, color = "#444444", linestyle = ":", linewidth = 3, alpha = 1, label = "OBS")
plt.ylim(-2.5, 2.5)
plt.xticks(np.linspace(0, 120, 5), [str(tick+1900) for tick in np.linspace(0, 120, 5, dtype=int)])
plt.yticks(np.linspace(-2.5, 2.5, 5), [str(np.round(tick, 2)) for tick in np.linspace(-2.5, 2.5, 5, dtype=float)])
handles, labels = ax.get_legend_handles_labels()
plt.legend(handles, ["GHG", "AER", "NAT", "HIST", "OBS"], loc = "upper left", fontsize = 10)
plt.tight_layout()
plt.show()
To train the model for the detection of climate change given the single-forcing simulations, we first define a custom dataloader. The data loader works such that it randomly picks a model and a simulation index to create a data sample of input (GHG, AER, NAT) and a target (HIST).
BATCH_SIZE = 100
train_dataloader = DataLoader(MonDataset(ghg, aer, nat, historical, model_of_interest = -1, dataset_type = 'train'), shuffle=True, batch_size=BATCH_SIZE)
test_dataloader = DataLoader(MonDataset(ghg, aer, nat, historical, model_of_interest = -1, dataset_type = 'test'), shuffle=True, batch_size=BATCH_SIZE)
The train and test dataloaders are then used as input to a convolutional network with three convolutional layers and a hyperbolic tangent activation function. As a result of the function, we receive the trained CNN model, as well as a linear model which is used for comparison.
model_CNN, loss_train_CNN, loss_test_CNN, model_linear, loss_train_linear, loss_test_linear = train_models(train_dataloader, test_dataloader, N_epoch = 100)
1%|█▎ | 1/100 [00:07<11:50, 7.18s/it]
Iteration 0: CNN: training loss: 0.131452, test loss 0.212950 Linear: training loss: 0.218098, test loss 0.268420
11%|██████████████▋ | 11/100 [00:59<07:19, 4.94s/it]
Iteration 10: CNN: training loss: 0.111875, test loss 0.111870 Linear: training loss: 0.180613, test loss 0.180203
21%|████████████████████████████▏ | 21/100 [02:01<08:15, 6.27s/it]
Iteration 20: CNN: training loss: 0.109526, test loss 0.110216 Linear: training loss: 0.180416, test loss 0.180702
31%|█████████████████████████████████████████▌ | 31/100 [02:57<06:20, 5.51s/it]
Iteration 30: CNN: training loss: 0.108029, test loss 0.108391 Linear: training loss: 0.180636, test loss 0.181043
41%|██████████████████████████████████████████████████████▉ | 41/100 [03:53<05:32, 5.64s/it]
Iteration 40: CNN: training loss: 0.106959, test loss 0.109083 Linear: training loss: 0.180978, test loss 0.180822
51%|████████████████████████████████████████████████████████████████████▎ | 51/100 [04:49<04:34, 5.61s/it]
Iteration 50: CNN: training loss: 0.106206, test loss 0.106667 Linear: training loss: 0.179944, test loss 0.180480
61%|█████████████████████████████████████████████████████████████████████████████████▋ | 61/100 [05:40<03:14, 5.00s/it]
Iteration 60: CNN: training loss: 0.105828, test loss 0.105772 Linear: training loss: 0.179997, test loss 0.180285
71%|███████████████████████████████████████████████████████████████████████████████████████████████▏ | 71/100 [06:35<02:42, 5.60s/it]
Iteration 70: CNN: training loss: 0.105104, test loss 0.105018 Linear: training loss: 0.180132, test loss 0.180438
81%|████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 81/100 [08:26<02:53, 9.13s/it]
Iteration 80: CNN: training loss: 0.104800, test loss 0.105489 Linear: training loss: 0.179939, test loss 0.179760
91%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 91/100 [09:35<01:05, 7.30s/it]
Iteration 90: CNN: training loss: 0.104820, test loss 0.104928 Linear: training loss: 0.180643, test loss 0.180020
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 100/100 [10:53<00:00, 6.54s/it]
## Save models
models_dir = os.path.join(notebook_folder,'models')
os.makedirs(models_dir, exist_ok=True)
pickle.dump(model_CNN, open(os.path.join(models_dir,'CNN_model.pkl'), 'wb'))
pickle.dump(model_linear, open(os.path.join(models_dir,'Linear_model.pkl'), 'wb'))
skip_first_epochs = 5
fig, ax = plt.subplots(figsize = (8,5), ncols = 1, nrows = 1)
plt.suptitle("Loss per Epoch of the CNN and Linear models", fontsize = 20)
for i, (loss_list, dataset_type) in enumerate(zip([loss_train_CNN, loss_test_CNN], ["Train", "Test"])):
plt.plot(loss_list[skip_first_epochs:], color = color_palette[i+1], linestyle = "-", linewidth = 3, alpha = 0.8, label = f"CNN Model {dataset_type} Loss")
for i, (loss_list, dataset_type) in enumerate(zip([loss_train_linear, loss_test_linear], ["Train", "Test"])):
plt.plot(loss_list[skip_first_epochs:], color = color_palette[i+1], linestyle = "--", linewidth = 3, alpha = 0.8, label = f"Linear Model {dataset_type} Loss")
plt.xlabel("# Epochs")
plt.ylabel("MSE Loss")
plt.yscale("log")
plt.legend(loc = "upper right", fontsize = 10)
plt.tight_layout()
plt.show()