O3as: Ozone assessment service’s documentation
O3as is a service within the framework of the European Open Science Cloud - Synergy (EOSC-Synergy) project, mainly for scientists working on the Chemistry-Climate Model Initiative (CCMI) for the quadrennial global assessment of ozone depletion due in 2022.
The O3as service shall provide an invaluable tool to extract ozone trends from large climate prediction model data to produce figures of stratospheric ozone trends in publication quality, in a coherent way.
Ozone introduction
This introduces you to ozone science: why ozone is important for our everyday life, what is ozone assessment. We present then our O3as service, how it can be used for simple analysis and a more advanced one. In the advanced section we show the underlying software technologies we are using.
Role of ozone for our life

The ozone layer in the stratosphere shields life on Earth from most UV-B and UV-C, the most harmful varieties of ultraviolet radiation. Credit: NASA
Ozone is a trace gas in the Earth’s atmosphere, that means that it only occurs in very small quantities on Earth. Trace gases are gases that are not nitrogen (78.1%), oxygen (20.9%) or argon (0.934%), i.e. they make up only about 0.066% of the atmosphere (not including water which makes up about 4%). If all the ozone were compressed to the pressure at the Earth’s surface (at 1013 hPa and 0°C) then the atmospheric content of ozone would make up a layer of 3 mm (which is equivalent to 300 Dobson Units (DU)). The highest content of ozone is found in the stratosphere at a height of about 25 to 30 km where the concentrations are about 10 parts per million parts of air (ppm), i.e. 0.001%.
The ozone present in the stratosphere at about 25 to 30 km is what makes up most ozone in the atmosphere. This ozone is important for life on planet Earth because it is responsible for removing most of the harmful ultraviolet (UV) radiation from the Sun. The longwave UV-A radiation (about 315–400 nm) is not absorbed, medium range UV-B radiation (about 280–315 nm) is mostly absorbed and the most dangerous shortwave UV-C radiation (about 100–280 nm) is totally absorbed by the ozone layer. A decrease in the ozone layer increases the amount of UV-B radiation reaching the Earth’s surface and the risk of skin cancer. Since UV radiation not only has an effect of the health of human beings it also has an effect on vegetation it is important to monitor stratospheric ozone.
Ozone hole and ozone assessment
With support of the World Meteorological Organization (WMO), the United Nations Environment Programme (UNEP), NASA, NOAA, and the European Commission periodic assessments of the state of ozone in the stratosphere are produced. Monitoring and the assessment of stratospheric ozone was started after the discovery of the ozone hole in the early eighties. Realizing that the decline of stratospheric ozone was due to harmful ozone destroying substances (ODSs) consisting of chlorofluorocarbons (CFCs) and hydrochlorofluorocarbons (HCFCs) the Montreal protocol (1987) and successor protocols were established to gradually curb the production of ODSs. The first assessment of the state of ozone was published in 1985, since 1994 they appear quadrennially.
Ozone simulations and observations (e.g. CCMI, SBUV etc)
There is a huge effort to predict the future development of stratospheric ozone under different scenarios. These scenarios are modelled in different groups with different model setups/different boundary/initial conditions. In order to get a robust prediction many different model runs can be combined into ensembles. Model runs of total ozone often don’t have same absolute values and are therefore normalized using satellite observations of ozone data. A date can then be picked at which the ozone of all the models agrees with the measured ozone. Only then they can be compared. For a more robust prediction of the behaviour of future ozone an average of all the model realizations can be produced to make a multi model mean so that a more robust prediction can be made.
Total Column Ozone, zonal mean

Total column ozone time series for Antarctic in October from 19 individual CCMs for the REF-C2 simulations with respect to mean 1980–1984 observations. The dashed black line indicates 1980 reference value. Credit: S.S. Dhomse et al., Atmos. Chem. Phys., 18, 8409–8438, 2018
The model results for the ozone data can come in different units, like volume or mass mixing ratios, partial pressure, number densities or ozone density. Those units can be converted into each other:
Conversions of ozone volume mixing ratio (vmr) into common other units:
The volume mixing ratio is given in ppmv (parts per million, 10-6,) pressure in hPa and temperature in K, then:
Ozone partial pressure pO3 [nbar]:
pO3 = vmrO3 × pressure
Ozone density ρO3[μg/m3]:
ρO3 = vmrO3 × 577.3 × pressure / temperature
Ozone mass mixing ratio mO3 [μg/g]:
mO3 = vmrO3 × 1.66 (mol_m_O3/mol_m_air = 48/28.9)
Ozone number density NO3 [molecules/cm3]:
NO3 = vmrO3 × pressure / (1.38 × 10-19 × temperature)
Also all these units can be converted to ozone volume mixing ratio (vmr) can be converted by inverting the above equations: The volume mixing ratio is given in ppmv, pressure in hPa and temperature in K.
Ozone partial pressure pO3 [nbar]:
vmrO3 = pO3 / pressure
Ozone density ρO3 [μg/m3]:
vmrO3 = ρO3 × 1.7322 × 10-3 × temperature / pressure
Ozone mass mixing ratio mO3 [μg/g]:
vmrO3 = mO3 × 0.602
Ozone number density NO3 [molecules/cm3]:
vmrO3 = NO3 × 1.38 × 10-19 × temperature / pressure
(http://www.meteo.mcgill.ca/hydroxyl/wiki/doku.php?id=ozone from Thilo Erbertseder, Frank Baier, last modified: October 2005)
Once ozone number density values are calculated, the values can be integrated over all heights to get a total column of ozone. Often the integration is done only partially either over the heights in the troposphere (from the ground to the tropopause) to get a tropospheric partial column of ozone or over the heights of the stratosphere (from the tropopause to the top of the atmosphere) to get a stratospheric partial column. The unit most often used for the column values of ozone is the Dobson unit:
1 Dobson Unit (DU) is:
2.6867 × 10+20 molecules per square meter
4.4615 × 10-04 mol per square meter
2.1415 × 10-05 kilogram of ozone per square meter
Also, a Dobson Unit can also be seen as a measurement of thickness of the ozone column: A typical column amount of 300 DU of atmospheric ozone corresponds to a 3 mm layer of pure gas at the surface of the Earth.
It can be seen that the integration over altitude in m could be done over those other units (mol, kg) as well, instead of only the number densities.
Often we deal with large data sets. Since we are interested mainly in the latitudinal distribution of ozone zonally (E-W direction) averaged values of ozone can be used.
Now we have reduced the 4 dimensional dataset (time, latitude, longitude and altitude) into a two dimensional dataset (time, latitude) by first integrating over the altitudes and then taking the zonal mean across the longitudes. Of these values time series can be plotted to see the trend in future ozone over different latitude bands.
Total Column Ozone, Return years

Estimated MMM1S return dates (red triangles) of total column ozone from the SEN-C2-fCH4 simulations for different latitude bands. Credit: S.S. Dhomse et al., Supplement of Atmos. Chem. Phys., 18, 8409–8438, 2018
As mentioned in the previous section, the time series of total column ozone (zonally averaged) can be normalized using satellite observations of ozone data. Usually a year before the decline of ozone in the 1980s is used for the normalization. If the year 1980 is taken, then we use the measurements of the ozone column and move all the model time series up or down so that they pass through the point of measurement. Since ozone has been decreasing from that point and has slowly recovered and is rising again, we are able to check when in the future ozone will be at the same level as in 1980 again. Having done this we can plot the time of ozone returning to 1980 level for each model and for different seasons/months/latitude bands.
Quizzes about Ozone Science
Quiz: Ozone Introduction
Why is stratospheric ozone important for life on Earth?
How much ozone is present in the Earth’s atmosphere?
What happened in the seventies that was discovered in the early eighties?
What was done to reduce the destruction of ozone?
What is done to publicize the state of ozone every four years?
Quiz: Total Column Ozone
What is the difference between a total column and a partial column of ozone?
What is a Dobson Unit?
How do you get from a data field of volume mixing ratios (latitude, longitude, height) into a total column? What steps are necessary?
What is a zonal mean?
Why would one use a multi model mean?
What is ozone return?
How can models be compared that have totally different values (offsets) from each other?
Wanna cross-check your answers? Have a look here
O3as Project
Motivation
Monitoring and projecting stratospheric ozone is mandated by UN Environment to safeguard a healthy planet. Regularly many climate models project future climate and ozone change, producing huge amounts of data that have to be analysed for key metrics. Those key metrics help policy makers to judge if measures implemented to protect the stratospheric ozone layer are working.
Project goals
To provide a framework to efficiently explore ozone projections, including the calculation of key metrics:
Improve the existing workflow and provide a reliable tool for scientists to perform analysis in a more efficient manner
Ensure reproducibility of results
Simplify data access and the use
Publish high-level data to citizens
Problem to solve
A typical workflow of today has many manual steps
Full processing from raw data takes hours
The code is not always accessible or well maintained
O3as solution

O3as service general structure
Climate Models data (10’s TB) are collected in one place (Large Scale Data Facility, LSDF at KIT)
The data are reduced to the parameters of interest and homogenized at HPC by the means of o3skim component
The reduced data (100’s MB) can be accessed with the REST API in seconds (o3api component)
A user may do final processing and plotting by leveraging the WebApp (o3webapp to come)
All components are open source (GPLv3), documented, implemented with continuous integration and delivery (CI/CD) based on Jenkins (JePL), and dockerised: o3skim is run via udocker in HPC, o3api and o3webapp are in the cloud (Kubernetes cluster).
Getting Started
Main entry point to our service is https://o3as.data.kit.edu. There you find a general information about the service and links to corresponding resources like this documentation site, git repository, docker hub organization etc.
Note
O3as Service is also offered via the EOSC Marketplace.
From the main website (https://o3as.data.kit.edu) you access our WebApp for a user-friendly communication with the service (to come) and O3as REST API for a programmatic usage of the service.
By using our service you agree to the Terms of Use.
Important
Once your ozone plots are produced, please, respect data policies, references and acknowledgments for the O3as service and original data.
In the case of questions, suggestions, or for any feedback, please contact us.
Tutorials
How to use API
How to use API (command line)
Introduction
This HowTo demonstrates basic communication with the O3as API by using cURL tool. Though cURL is a command-line tool, libcurl library is implemented in many programming languages (e.g. pycurl for Python). The examples below could also help understanding how the API calls can be implemented in your program using other means (e.g. urllib in Python).
Note
O3as API is based on the Open API 3 and Swagger, which provides Swagger UI, visual documentation allowing to interact with the API in a friendly way via web. The O3AS API Swagger UI webpage is accessible at https://api.o3as.fedcloud.eu/api/v1/ui/.
Tip
For the complete description of the REST API, please, check O3API Endpoints and https://api.o3as.fedcloud.eu/api/v1/ui/.
Info about available models
Get list of all available models
curl -X 'GET' 'https://api.o3as.fedcloud.eu/api/v1/models' -H 'accept: application/json'
List models with a certain pattern
e.g select models with ‘refC2’ in the name:
curl -X 'GET' \
'https://api.o3as.fedcloud.eu/api/v1/models?select=refc2' \
-H 'accept: application/json'
Get information about a particular model
e.g. about CCMI-1_ACCESS_ACCESS-CCM-refC2:
curl -X 'GET' \
'https://api.o3as.fedcloud.eu/api/v1/models/CCMI-1_ACCESS_ACCESS-CCM-refC2' \
-H 'accept: application/json'
Get default plot styles of selected models
e.g for CCMI-1_ACCESS_ACCESS-CCM-refC2
, CCMI-1_CCCma_CMAM-refC2
, CCMI-1_CHASER-MIROC-ESM-refC2
curl -X 'POST' \
'https://api.o3as.fedcloud.eu/api/v1/models/plotstyle' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '[
"CCMI-1_ACCESS_ACCESS-CCM-refC2",
"CCMI-1_CCCma_CMAM-refC2",
"CCMI-1_CHASER-MIROC-ESM-refC2"
]'
Creating plots
Get list of possible plots
curl -X 'GET' \
'https://api.o3as.fedcloud.eu/api/v1/plots' \
-H 'accept: application/json'
Create tco3_zm plot
This example shows how to retrieve a total column ozone (zonal mean) figure either in PDF or JSON format. The query parameters used in the example are shown in the table below.
Tip
For the explanation of parameters, please, check O3API Endpoints
Query parameter |
Value |
---|---|
begin |
1959 |
end |
2100 |
month |
[9,10,11] |
lat_min |
-90 |
lat_max |
90 |
ref_meas |
SBUV_GSFC_merged-SAT-ozone |
ref_year |
1980 |
Request body (for the list of models) |
e.g. all refC2 models |
tco3_zm.pdf
is created)curl -o tco3_zm.pdf -X 'POST' \
'https://api.o3as.fedcloud.eu/api/v1/plots/tco3_zm?begin=1959&end=2100&month=9,10,11&lat_min=-90&lat_max=90&ref_meas=SBUV_GSFC_merged-SAT-ozone&ref_year=1980' \
-H 'accept: application/pdf' \
-H 'Content-Type: application/json' \
-d '[
"CCMI-1_ACCESS_ACCESS-CCM-refC2",
"CCMI-1_CCCma_CMAM-refC2",
"CCMI-1_CESM1-CAM4Chem_refC2_r1i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r2i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r3i1p1",
"CCMI-1_CESM1-WACCM_refC2_r1i1p1",
"CCMI-1_CESM1-WACCM_refC2_r2i1p1",
"CCMI-1_CESM1-WACCM_refC2_r3i1p1",
"CCMI-1_CHASER-MIROC-ESM-refC2",
"CCMI-1_CNRM-CERFACS_CNRM-CM5-3-refC2",
"CCMI-1_CNRM-CERFACS_MOCAGE-refC2",
"CCMI-1_ETH-PMOD_SOCOL3-refC2",
"CCMI-1_GSFC_GEOSCCM-refC2",
"CCMI-1_MESSy_EMAC-L90MA-refC2",
"CCMI-1_MOHC_HadGEM3-ES-refC2",
"CCMI-1_MRI_ESM1r1-refC2",
"CCMI-1_NIES_CCSRNIES-MIROC3.2-refC2",
"CCMI-1_NIWA_NIWA-UKCA-refC2",
"CCMI-1_U-CAMBRIDGE_UMUKCA-UCAM-refC2",
"CCMI-1_U-LAQUILA_CCM-refC2",
"CCMI-1_U-LEEDS_UMSLIMCAT-refC2"
]'
tco3_zm.json
is created)curl -o tco3_zm.json -X 'POST' \
'https://api.o3as.fedcloud.eu/api/v1/plots/tco3_zm?begin=1959&end=2100&month=9,10,11&lat_min=-90&lat_max=90&ref_meas=SBUV_GSFC_merged-SAT-ozone&ref_year=1980' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '[
"CCMI-1_ACCESS_ACCESS-CCM-refC2",
"CCMI-1_CCCma_CMAM-refC2",
"CCMI-1_CESM1-CAM4Chem_refC2_r1i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r2i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r3i1p1",
"CCMI-1_CESM1-WACCM_refC2_r1i1p1",
"CCMI-1_CESM1-WACCM_refC2_r2i1p1",
"CCMI-1_CESM1-WACCM_refC2_r3i1p1",
"CCMI-1_CHASER-MIROC-ESM-refC2",
"CCMI-1_CNRM-CERFACS_CNRM-CM5-3-refC2",
"CCMI-1_CNRM-CERFACS_MOCAGE-refC2",
"CCMI-1_ETH-PMOD_SOCOL3-refC2",
"CCMI-1_GSFC_GEOSCCM-refC2",
"CCMI-1_MESSy_EMAC-L90MA-refC2",
"CCMI-1_MOHC_HadGEM3-ES-refC2",
"CCMI-1_MRI_ESM1r1-refC2",
"CCMI-1_NIES_CCSRNIES-MIROC3.2-refC2",
"CCMI-1_NIWA_NIWA-UKCA-refC2",
"CCMI-1_U-CAMBRIDGE_UMUKCA-UCAM-refC2",
"CCMI-1_U-LAQUILA_CCM-refC2",
"CCMI-1_U-LEEDS_UMSLIMCAT-refC2"
]'
Create tco3_return plot
The example shows how to retrieve a total column ozone (return years) figure either in PDF or JSON format. The query parameters used in the example are shown in the table below.
Tip
For the explanation of parameters, please, check O3API Endpoints
Query parameter |
Value |
---|---|
month |
[9,10,11] |
lat_min |
-90 |
lat_max |
90 |
ref_meas |
SBUV_GSFC_merged-SAT-ozone |
ref_year |
1980 |
Request body (for the list of models) |
e.g. all refC2 models |
tco3_return.pdf
is created)curl -o tco3_return.pdf -X 'POST' \
'https://api.o3as.fedcloud.eu/api/v1/plots/tco3_return?month=9,10,11&lat_min=-90&lat_max=90&ref_meas=SBUV_GSFC_merged-SAT-ozone&ref_year=1980' \
-H 'accept: application/pdf' \
-H 'Content-Type: application/json' \
-d '[
"CCMI-1_ACCESS_ACCESS-CCM-refC2",
"CCMI-1_CCCma_CMAM-refC2",
"CCMI-1_CESM1-CAM4Chem_refC2_r1i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r2i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r3i1p1",
"CCMI-1_CESM1-WACCM_refC2_r1i1p1",
"CCMI-1_CESM1-WACCM_refC2_r2i1p1",
"CCMI-1_CESM1-WACCM_refC2_r3i1p1",
"CCMI-1_CHASER-MIROC-ESM-refC2",
"CCMI-1_CNRM-CERFACS_CNRM-CM5-3-refC2",
"CCMI-1_CNRM-CERFACS_MOCAGE-refC2",
"CCMI-1_ETH-PMOD_SOCOL3-refC2",
"CCMI-1_GSFC_GEOSCCM-refC2",
"CCMI-1_MESSy_EMAC-L90MA-refC2",
"CCMI-1_MOHC_HadGEM3-ES-refC2",
"CCMI-1_MRI_ESM1r1-refC2",
"CCMI-1_NIES_CCSRNIES-MIROC3.2-refC2",
"CCMI-1_NIWA_NIWA-UKCA-refC2",
"CCMI-1_U-CAMBRIDGE_UMUKCA-UCAM-refC2",
"CCMI-1_U-LAQUILA_CCM-refC2",
"CCMI-1_U-LEEDS_UMSLIMCAT-refC2"
]'
tco3_return.json
is created)curl -o tco3_return.json -X 'POST' \
'https://api.o3as.fedcloud.eu/api/v1/plots/tco3_return?month=9,10,11&lat_min=-90&lat_max=90&ref_meas=SBUV_GSFC_merged-SAT-ozone&ref_year=1980' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '[
"CCMI-1_ACCESS_ACCESS-CCM-refC2",
"CCMI-1_CCCma_CMAM-refC2",
"CCMI-1_CESM1-CAM4Chem_refC2_r1i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r2i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r3i1p1",
"CCMI-1_CESM1-WACCM_refC2_r1i1p1",
"CCMI-1_CESM1-WACCM_refC2_r2i1p1",
"CCMI-1_CESM1-WACCM_refC2_r3i1p1",
"CCMI-1_CHASER-MIROC-ESM-refC2",
"CCMI-1_CNRM-CERFACS_CNRM-CM5-3-refC2",
"CCMI-1_CNRM-CERFACS_MOCAGE-refC2",
"CCMI-1_ETH-PMOD_SOCOL3-refC2",
"CCMI-1_GSFC_GEOSCCM-refC2",
"CCMI-1_MESSy_EMAC-L90MA-refC2",
"CCMI-1_MOHC_HadGEM3-ES-refC2",
"CCMI-1_MRI_ESM1r1-refC2",
"CCMI-1_NIES_CCSRNIES-MIROC3.2-refC2",
"CCMI-1_NIWA_NIWA-UKCA-refC2",
"CCMI-1_U-CAMBRIDGE_UMUKCA-UCAM-refC2",
"CCMI-1_U-LAQUILA_CCM-refC2",
"CCMI-1_U-LEEDS_UMSLIMCAT-refC2"
]'
Info on skimmed data
o3skim component produces skimmed data which are further processed by the o3api to build plots for the Ozone assessment (e.g. total column ozone (zonal mean) and total column ozone (return years)).
Get list of plot types with the available skimmed data
curl -X 'GET' 'https://api.o3as.fedcloud.eu/api/v1/data' -H 'accept: application/json'
Get skimmed data used to build tco3_zm plot
Tip
For the explanation of parameters, please, check O3API Endpoints
Query parameter |
Value |
---|---|
begin |
1959 |
end |
2100 |
month |
[9,10,11] |
lat_min |
-90 |
lat_max |
90 |
Request body (for the list of models) |
e.g. all refC2 models |
tco3_zm_skimmed.json
is created:
curl -o tco3_zm_skimmed.json -X 'POST' \
'https://api.o3as.fedcloud.eu/api/v1/data/tco3_zm?begin=1959&end=2100&month=9,10,11&lat_min=-90&lat_max=90' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '[
"CCMI-1_ACCESS_ACCESS-CCM-refC2",
"CCMI-1_CCCma_CMAM-refC2",
"CCMI-1_CESM1-CAM4Chem_refC2_r1i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r2i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r3i1p1",
"CCMI-1_CESM1-WACCM_refC2_r1i1p1",
"CCMI-1_CESM1-WACCM_refC2_r2i1p1",
"CCMI-1_CESM1-WACCM_refC2_r3i1p1",
"CCMI-1_CHASER-MIROC-ESM-refC2",
"CCMI-1_CNRM-CERFACS_CNRM-CM5-3-refC2",
"CCMI-1_CNRM-CERFACS_MOCAGE-refC2",
"CCMI-1_ETH-PMOD_SOCOL3-refC2",
"CCMI-1_GSFC_GEOSCCM-refC2",
"CCMI-1_MESSy_EMAC-L90MA-refC2",
"CCMI-1_MOHC_HadGEM3-ES-refC2",
"CCMI-1_MRI_ESM1r1-refC2",
"CCMI-1_NIES_CCSRNIES-MIROC3.2-refC2",
"CCMI-1_NIWA_NIWA-UKCA-refC2",
"CCMI-1_U-CAMBRIDGE_UMUKCA-UCAM-refC2",
"CCMI-1_U-LAQUILA_CCM-refC2",
"CCMI-1_U-LEEDS_UMSLIMCAT-refC2"
]'
Get skimmed data used to build tco3_return plot
Tip
For the explanation of parameters, please, check O3API Endpoints
Query parameter |
Value |
---|---|
begin |
1959 |
end |
2100 |
month |
[9,10,11] |
lat_min |
-90 |
lat_max |
90 |
Request body (for the list of models) |
e.g. all refC2 models |
tco3_return_skimmed.json
is created:
curl -o tco3_return_skimmed.json -X 'POST' \
'https://api.o3as.fedcloud.eu/api/v1/data/tco3_return?begin=1959&end=2100&month=9,10,11&lat_min=-90&lat_max=90' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '[
"CCMI-1_ACCESS_ACCESS-CCM-refC2",
"CCMI-1_CCCma_CMAM-refC2",
"CCMI-1_CESM1-CAM4Chem_refC2_r1i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r2i1p1",
"CCMI-1_CESM1-CAM4Chem_refC2_r3i1p1",
"CCMI-1_CESM1-WACCM_refC2_r1i1p1",
"CCMI-1_CESM1-WACCM_refC2_r2i1p1",
"CCMI-1_CESM1-WACCM_refC2_r3i1p1",
"CCMI-1_CHASER-MIROC-ESM-refC2",
"CCMI-1_CNRM-CERFACS_CNRM-CM5-3-refC2",
"CCMI-1_CNRM-CERFACS_MOCAGE-refC2",
"CCMI-1_ETH-PMOD_SOCOL3-refC2",
"CCMI-1_GSFC_GEOSCCM-refC2",
"CCMI-1_MESSy_EMAC-L90MA-refC2",
"CCMI-1_MOHC_HadGEM3-ES-refC2",
"CCMI-1_MRI_ESM1r1-refC2",
"CCMI-1_NIES_CCSRNIES-MIROC3.2-refC2",
"CCMI-1_NIWA_NIWA-UKCA-refC2",
"CCMI-1_U-CAMBRIDGE_UMUKCA-UCAM-refC2",
"CCMI-1_U-LAQUILA_CCM-refC2",
"CCMI-1_U-LEEDS_UMSLIMCAT-refC2"
]'
How to retrieve tco3 plots (jupyter)
This tutorial shows how to use a Jupyter notebook to retrieve data points of either tco3_zm plot or tco3_return plot in the JSON format and plot them. The Jupyter notebook can be downloaded from here.
System installations
If necessary, install required libraries or python packages
[1]:
### If needed, install additional modules:
#!pip3 install pandas
#!pip3 install matplotlib
### interactive plotting in jupyterlab requires node.js (pip does not install it!!):
#!apt update && apt install -y nodejs
#!pip3 install ipympl
#!jupyter labextension install @jupyter-widgets/jupyterlab-manager
#!jupyter labextension install jupyter-matplotlib
#!jupyter nbextension enable --py widgetsnbextension
### DON'T FORGET TO RESTART JupyterLab !!
# start jupyterlab:
# jupyter lab --ip=0.0.0.0
Import necessary packages
In this tutorial we need the following python packages:
json - to decode JSON data
matplotlib - to plot the data
numpy and pandas - to manipulate the data
os - to manipulate URL paths
requests - to communicate with the O3as API and retrieve data
[2]:
import json
import matplotlib.style as mplstyle
mplstyle.use('fast')
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
import requests
Define global variables
we set a few variables: e.g. the base URL of O3AS API and the default figure size
[3]:
# for interactive plot, may change to widget, if installed
%matplotlib inline
# Set default size of plots
plt.rcParams['figure.figsize'] = [12, 8]
# A few variables needed for every REST API call:
url_o3api = "http://api.o3as.fedcloud.eu/api/v1/" # base URL of the O3as API
headers = {'Content-Type': 'application/json',
'Accept': 'application/json'}
# Define Reference Measurement and Reference Year
refMeasurement = 'SBUV_GSFC_merged-SAT-ozone'
refYear = 1980
Retrieve the list of models
We will analyse refC2 models, therefore we first request the list of corresponding models via the REST API
[4]:
# Use '/models' API Endpoint, i.e. append "models" to the base url_o3api:
url_o3api_tco3_zm_models = os.path.join(url_o3api, "models")
# request the list of modesl from O3as API, select "refC2" models:
tco3_zm_models = requests.request("GET",
url=url_o3api_tco3_zm_models,
params={'select': 'refc2'},
headers=headers).json()
print(tco3_zm_models)
['CCMI-1_ACCESS_ACCESS-CCM-refC2', 'CCMI-1_CCCma_CMAM-refC2', 'CCMI-1_CESM1-CAM4Chem_refC2_r1i1p1', 'CCMI-1_CESM1-CAM4Chem_refC2_r2i1p1', 'CCMI-1_CESM1-CAM4Chem_refC2_r3i1p1', 'CCMI-1_CESM1-WACCM_refC2_r1i1p1', 'CCMI-1_CESM1-WACCM_refC2_r2i1p1', 'CCMI-1_CESM1-WACCM_refC2_r3i1p1', 'CCMI-1_CHASER-MIROC-ESM-refC2', 'CCMI-1_CNRM-CERFACS_CNRM-CM5-3-refC2', 'CCMI-1_CNRM-CERFACS_MOCAGE-refC2', 'CCMI-1_ETH-PMOD_SOCOL3-refC2', 'CCMI-1_GSFC_GEOSCCM-refC2', 'CCMI-1_MESSy_EMAC-L90MA-refC2', 'CCMI-1_MOHC_HadGEM3-ES-refC2', 'CCMI-1_MRI_ESM1r1-refC2', 'CCMI-1_NIES_CCSRNIES-MIROC3.2-refC2', 'CCMI-1_NIWA_NIWA-UKCA-refC2', 'CCMI-1_U-CAMBRIDGE_UMUKCA-UCAM-refC2', 'CCMI-1_U-LAQUILA_CCM-refC2', 'CCMI-1_U-LEEDS_UMSLIMCAT-refC2']
We also add a reference measurement, refMeasurement (defined above in the Global Variables, e.g. SBUV_GSFC_merged-SAT-ozone), to the list of models to be plotted
[5]:
tco3_zm_models.append(refMeasurement)
Request points of the tco3_zm plot
we configure parameters of interest to get the plot. In the example we specify that we want a plot for:
Range of years: (1960, 2100)
month: September, October, November
South Hemisphere (SH, latitudes: -90, -60)
reference measurement: refMeasurement (e.g. SBUV_GSFC_merged-SAT-ozone)
reference year: refYear (e.g. 1980, see Global Variables)
[6]:
# initialize an empty dictionary
kwargs_tco3_zm = {}
# Build kwargs with tco3_zm parameters for O3as API.
# Keys have to correspond to expected by the API keys!
kwargs_tco3_zm = {
'begin' : 1960,
'end' : 2100,
'month' : '9,10,11',
'lat_min' : -90,
'lat_max' : -60,
'ref_meas': refMeasurement,
'ref_year': refYear
}
We want to retrieve “tco3_zm” plot: we use ‘/plots’ endpoint, plot type ‘tco3_zm’, therefore we append ‘plots/tco3_zm’ to the base URL of the O3as API
Then we retrieve tco3_zm plot data for the parameters of interest and the list of refC2 models defined above
[7]:
# Build the API URL, use /plots/tco3_zm endpoint:
url_o3api_plot_tco3_zm = os.path.join(url_o3api, "plots/tco3_zm")
# Request data
response = requests.request("POST",
url=url_o3api_plot_tco3_zm,
params=kwargs_tco3_zm,
headers=headers,
data=json.dumps(tco3_zm_models))
# print(response.request.url) # uncomment if you like to see the API call
# print(response.request.body) # uncomment if you like to see the API call Request Body
# Read the status_code. Normal response => 200
print(response.status_code)
tco3_zm_data = response.json()
print(tco3_zm_data[:5]) # print first five for cross-checking
200
[{'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_ACCESS_ACCESS-CCM-refC2', 'plotstyle': {'color': 'purple', 'linestyle': 'solid', 'marker': ''}, 'x': ['1960', '1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968', '1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025', '2026', '2027', '2028', '2029', '2030', '2031', '2032', '2033', '2034', '2035', '2036', '2037', '2038', '2039', '2040', '2041', '2042', '2043', '2044', '2045', '2046', '2047', '2048', '2049', '2050', '2051', '2052', '2053', '2054', '2055', '2056', '2057', '2058', '2059', '2060', '2061', '2062', '2063', '2064', '2065', '2066', '2067', '2068', '2069', '2070', '2071', '2072', '2073', '2074', '2075', '2076', '2077', '2078', '2079', '2080', '2081', '2082', '2083', '2084', '2085', '2086', '2087', '2088', '2089', '2090', '2091', '2092', '2093', '2094', '2095', '2096', '2097', '2098', '2099', '2100'], 'y': [346.2776153564453, 346.2776153564453, 344.19089660644534, 345.2399810791016, 344.79651794433596, 343.2049926757813, 341.64759521484376, 341.9790252685547, 339.6935241699219, 339.7173004150391, 336.461865234375, 334.004965209961, 332.95016479492193, 330.1485961914063, 327.3143676757813, 326.07980957031253, 323.82362060546876, 320.05503234863284, 317.1924194335938, 314.53354187011723, 310.925, 307.60857543945315, 304.67973937988285, 302.41758117675784, 299.28678894042974, 295.69349060058596, 291.8769836425782, 287.95793762207035, 286.21589965820317, 281.78271789550786, 277.63332672119145, 273.80351562500005, 267.4904983520508, 261.4915878295899, 258.9700561523438, 255.55068511962895, 251.66219329833987, 248.30885620117192, 244.19300231933596, 243.56174621582034, 246.0753860473633, 243.7281616210938, 245.28644866943364, 247.0736755371094, 245.87856597900395, 245.76735992431645, 246.93642578125002, 248.34758758544925, 249.08704528808596, 247.95865173339848, 245.86597137451176, 247.63198699951175, 247.2372985839844, 250.01163787841801, 250.87575683593752, 251.80886383056645, 254.18242492675785, 253.67160949707034, 254.85982360839847, 256.2275970458985, 255.62308349609378, 257.060238647461, 258.2514282226563, 256.82307128906257, 257.3615539550782, 257.3642623901368, 256.9719482421875, 258.62582092285163, 258.0639465332032, 259.03634338378913, 261.9813705444336, 261.95432586669926, 263.4834625244141, 262.60323791503913, 264.1455886840821, 265.7035308837891, 266.6639846801758, 268.2940048217774, 271.5132202148438, 275.7468170166016, 279.5189178466797, 280.585482788086, 281.6898101806641, 284.5627624511719, 288.2847290039063, 290.4588958740235, 291.752035522461, 293.22461853027346, 297.2641906738282, 295.0239471435547, 296.0662506103516, 295.928125, 297.671859741211, 298.8583190917969, 298.3798034667969, 299.8877807617188, 301.73552856445315, 302.51728515625, 301.0359985351563, 303.35169677734376, 302.41975708007817, 305.3851501464844, 307.1610443115235, 308.31840515136724, 310.8793548583985, 311.1203918457032, 312.7027984619141, 312.83945007324223, 314.6934448242188, 317.3296325683594, 317.4012817382813, 318.46606750488286, 321.8202758789063, 323.72616577148443, 322.7880340576172, 325.6069763183594, 326.15849609375005, 330.8311218261719, 330.8529205322266, 328.95618896484376, 331.4684204101563, 331.71318359375005, 329.0909851074219, 331.5364959716797, 331.30587768554693, 330.81463317871095, 331.09461364746096, 329.43330078125, 330.2022674560547, 331.39458923339845, 331.2634979248047, 332.8045166015625, 334.02109680175784, 333.03064575195316, 334.6632781982422, 335.09021911621096, 334.4844055175782, 334.8290222167969, 335.1350799560547, 336.1991668701172, 336.1889068603516]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CCCma_CMAM-refC2', 'plotstyle': {'color': 'red', 'linestyle': 'solid', 'marker': ''}, 'x': ['1960', '1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968', '1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025', '2026', '2027', '2028', '2029', '2030', '2031', '2032', '2033', '2034', '2035', '2036', '2037', '2038', '2039', '2040', '2041', '2042', '2043', '2044', '2045', '2046', '2047', '2048', '2049', '2050', '2051', '2052', '2053', '2054', '2055', '2056', '2057', '2058', '2059', '2060', '2061', '2062', '2063', '2064', '2065', '2066', '2067', '2068', '2069', '2070', '2071', '2072', '2073', '2074', '2075', '2076', '2077', '2078', '2079', '2080', '2081', '2082', '2083', '2084', '2085', '2086', '2087', '2088', '2089', '2090', '2091', '2092', '2093', '2094', '2095', '2096', '2097', '2098', '2099', '2100'], 'y': [351.86401214599607, 351.86401214599607, 351.35542449951174, 355.57737884521487, 354.23424530029297, 349.9771499633789, 356.3275833129883, 345.24928131103513, 344.44151458740237, 345.22654876708987, 346.2831344604492, 341.86380767822266, 342.0477890014648, 341.26673736572263, 339.75594024658204, 334.4859817504883, 326.0071304321289, 326.3966567993164, 321.5586196899414, 320.67137603759767, 310.925, 311.5148620605469, 307.7693115234375, 294.7178695678711, 292.1662796020508, 282.9051818847656, 275.12669982910154, 269.04498901367185, 259.7135833740234, 251.92035980224608, 256.55771484375, 248.9955078125, 238.1190200805664, 234.03816680908204, 224.7013168334961, 222.19364166259766, 220.26981506347656, 215.7968719482422, 219.48813018798828, 213.17967834472657, 207.5328384399414, 204.23307189941406, 207.8407974243164, 212.4969940185547, 212.18795318603514, 218.69286193847657, 221.2501998901367, 221.17481689453126, 221.1938903808594, 227.6576904296875, 225.0509796142578, 234.98327178955077, 234.98602294921875, 237.02869567871093, 238.43987426757812, 238.3752471923828, 236.18712615966797, 238.46255950927736, 240.05568084716796, 238.20476989746095, 238.92852935791015, 230.1319580078125, 230.97845153808595, 229.5811981201172, 231.7886001586914, 235.01458587646485, 238.0358139038086, 238.99495849609374, 239.9964614868164, 239.98670654296876, 240.03091430664062, 241.85446319580078, 242.5213394165039, 247.2451370239258, 246.31226196289063, 246.52247619628906, 246.8947525024414, 250.33602600097657, 246.45228424072266, 249.7035171508789, 260.76424102783204, 261.41114196777346, 264.77335968017576, 260.86240539550784, 269.04332427978517, 268.7472579956055, 274.6591110229492, 277.1489990234375, 282.8788528442383, 287.6033767700195, 279.7131683349609, 282.2228973388672, 282.45654296875, 289.9041122436523, 286.9389083862305, 284.4388595581055, 282.1350357055664, 278.26026153564453, 278.1993606567383, 279.877180480957, 282.81798095703124, 288.4872848510742, 292.3008804321289, 287.47315826416013, 289.4187515258789, 290.8007614135742, 291.95507659912107, 297.0407119750977, 298.56753997802736, 294.8441329956055, 292.26769866943357, 290.61450042724607, 288.0403823852539, 286.97046966552733, 286.7638961791992, 292.0441146850586, 294.35302276611327, 291.24938201904297, 293.5563430786133, 297.3076736450195, 303.9276718139648, 301.899592590332, 305.82518463134767, 311.614030456543, 310.26675567626955, 307.07715301513673, 306.7837661743164, 311.4630630493164, 311.95809478759764, 307.93372650146483, 307.5526840209961, 307.6130996704102, 303.91739959716796, 301.8792190551758, 306.58191070556643, 310.2178237915039, 313.8189407348633, 316.07857513427734, 316.5812423706055, 318.24852752685547, 315.255143737793]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CESM1-CAM4Chem_refC2_r1i1p1', 'plotstyle': {'color': 'darkorange', 'linestyle': 'dashed', 'marker': ''}, 'x': ['1960', '1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968', '1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025', '2026', '2027', '2028', '2029', '2030', '2031', '2032', '2033', '2034', '2035', '2036', '2037', '2038', '2039', '2040', '2041', '2042', '2043', '2044', '2045', '2046', '2047', '2048', '2049', '2050', '2051', '2052', '2053', '2054', '2055', '2056', '2057', '2058', '2059', '2060', '2061', '2062', '2063', '2064', '2065', '2066', '2067', '2068', '2069', '2070', '2071', '2072', '2073', '2074', '2075', '2076', '2077', '2078', '2079', '2080', '2081', '2082', '2083', '2084', '2085', '2086', '2087', '2088', '2089', '2090', '2091', '2092', '2093', '2094', '2095', '2096', '2097', '2098', '2099', '2100'], 'y': [381.5714828491211, 381.5714828491211, 378.1163040161133, 376.7183303833008, 373.4070816040039, 373.9780899047852, 371.36494903564454, 374.6709915161133, 372.29052886962893, 368.84549713134766, 360.6159408569336, 357.20666656494143, 358.3512130737305, 353.1654281616211, 347.95308074951174, 343.93371734619143, 339.44506988525393, 332.83027496337894, 324.23018341064454, 316.62638092041016, 310.925, 309.10517578125, 295.56228790283205, 286.91331329345707, 282.9828369140625, 274.90110778808594, 268.45367126464845, 260.7116943359375, 255.36284942626955, 246.2650131225586, 240.69790496826172, 238.53372650146486, 236.68260955810547, 235.21825408935547, 232.4727493286133, 232.3526565551758, 228.981396484375, 229.0142776489258, 231.5090072631836, 233.72310180664064, 235.9229507446289, 239.2064651489258, 244.14745025634767, 243.71172943115235, 246.54490356445314, 244.62928771972656, 247.7969497680664, 246.57124481201174, 247.98087158203126, 249.27813110351565, 250.37484130859377, 240.65921478271486, 239.19200439453127, 238.1973861694336, 238.8849060058594, 241.07554931640627, 240.70039520263674, 241.2245315551758, 244.44255218505862, 250.5711639404297, 252.26995697021485, 255.21909790039064, 256.73286743164067, 260.87877502441404, 257.2423797607422, 256.60435638427737, 260.96625366210935, 265.16857147216797, 264.61548004150393, 261.60374450683594, 266.724592590332, 267.9991058349609, 267.2556259155274, 272.199365234375, 276.57763519287107, 279.6867080688477, 281.87621307373047, 280.0746719360352, 284.0301498413086, 286.6323913574219, 285.63535766601564, 289.1129653930664, 292.9555603027344, 290.94317321777345, 293.01483459472655, 294.6231369018555, 292.56831207275394, 296.7857070922852, 294.065885925293, 296.3155227661133, 296.8630111694336, 296.3875228881836, 297.7808303833008, 302.0857528686524, 303.6337173461914, 305.208317565918, 309.0577835083008, 311.7471145629883, 313.35450286865233, 315.879216003418, 315.09557342529297, 317.8024612426758, 318.81419219970707, 320.1314193725586, 321.8469467163086, 326.888151550293, 326.52049713134767, 325.1462661743164, 325.89070281982424, 324.04972381591796, 329.67862091064455, 330.1620834350586, 330.31318817138674, 328.13028717041016, 329.53011322021484, 326.86878509521483, 326.78084564208984, 330.5340835571289, 329.8897872924805, 334.3519912719727, 335.313688659668, 335.37488555908203, 334.43797454833987, 336.69957122802737, 339.33396759033207, 339.751188659668, 341.9354843139649, 340.37446441650394, 346.79536590576174, 344.0474655151367, 342.09180755615233, 343.31050262451174, 344.09497833251953, 342.79658355712894, 340.02554168701175, 340.67451324462894, 338.10611419677736, 337.42491302490237, 333.48226470947264, 333.1030715942383, 331.86889801025393]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CESM1-CAM4Chem_refC2_r2i1p1', 'plotstyle': {'color': 'darkorange', 'linestyle': 'dashed', 'marker': ''}, 'x': ['1960', '1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968', '1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025', '2026', '2027', '2028', '2029', '2030', '2031', '2032', '2033', '2034', '2035', '2036', '2037', '2038', '2039', '2040', '2041', '2042', '2043', '2044', '2045', '2046', '2047', '2048', '2049', '2050', '2051', '2052', '2053', '2054', '2055', '2056', '2057', '2058', '2059', '2060', '2061', '2062', '2063', '2064', '2065', '2066', '2067', '2068', '2069', '2070', '2071', '2072', '2073', '2074', '2075', '2076', '2077', '2078', '2079', '2080', '2081', '2082', '2083', '2084', '2085', '2086', '2087', '2088', '2089', '2090', '2091', '2092', '2093', '2094', '2095', '2096', '2097', '2098', '2099', '2100'], 'y': [358.6359558105469, 358.6359558105469, 357.95749816894534, 358.44141235351566, 359.3844879150391, 359.0133544921875, 354.6981109619141, 353.3206817626953, 352.1751342773438, 350.15040283203126, 345.91631469726565, 342.6816680908203, 338.2875183105469, 333.2715118408203, 331.16810302734376, 327.3575012207031, 323.2553405761719, 321.2728179931641, 317.3791473388672, 309.56711425781253, 310.925, 309.24676818847655, 308.69524230957035, 309.64970703125, 304.7010070800781, 300.38481750488285, 300.2701385498047, 291.2830490112305, 280.99983673095704, 276.5548492431641, 266.0521423339844, 257.6220001220703, 252.01848449707032, 240.39391326904297, 231.2869857788086, 227.9185012817383, 221.7367172241211, 221.01917724609376, 223.24974060058594, 222.3900100708008, 223.3753387451172, 224.31804199218752, 222.1968185424805, 225.74407806396485, 227.56508789062502, 231.21707611083986, 231.67010650634768, 232.9335479736328, 235.1730728149414, 237.97268066406252, 237.90101165771486, 237.39969482421876, 238.73965606689455, 240.7696243286133, 243.3038299560547, 240.22039642333985, 240.6954299926758, 239.92261047363283, 242.710546875, 245.2356903076172, 246.5360336303711, 252.18057403564455, 253.35039672851565, 251.01851043701174, 253.4172805786133, 254.85916137695312, 256.3019271850586, 256.0974868774414, 255.30174102783204, 256.98720703125, 257.12850189208984, 258.35796508789065, 262.17308807373047, 268.0345748901367, 271.59240875244143, 274.1342208862305, 278.1360504150391, 284.0222351074219, 288.8552017211914, 292.12681732177737, 294.62740020751954, 298.9747817993164, 302.2896011352539, 303.68848114013673, 304.14416961669923, 306.8114929199219, 307.885986328125, 309.46814880371096, 306.3762573242188, 306.3796752929688, 308.3333374023438, 306.14597167968753, 304.1287475585938, 302.96336059570314, 304.9953887939453, 305.5959197998047, 308.2728546142578, 309.0998504638672, 313.55296325683594, 313.0412628173828, 314.37506103515625, 318.391796875, 318.3229461669922, 321.5603729248047, 321.32123107910155, 323.6040252685547, 322.73389892578126, 323.77886657714845, 326.3802795410156, 326.79912109375, 331.80604858398436, 328.8478546142578, 331.20375061035156, 331.2844146728516, 337.35638122558595, 337.2773895263672, 337.6394073486328, 341.7844207763672, 337.78045043945315, 341.5189453125, 342.05064086914064, 343.88139953613285, 346.0853668212891, 348.1514434814453, 343.58464660644535, 343.0266967773438, 345.3072845458984, 342.8584014892578, 346.1903106689453, 346.3204620361328, 344.6767913818359, 344.90953369140624, 343.5954986572266, 344.3072143554688, 342.5970825195313, 344.10809020996095, 343.57060852050785, 344.4231201171875, 342.29920349121096, 343.61365356445316, 342.4048767089844]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CESM1-CAM4Chem_refC2_r3i1p1', 'plotstyle': {'color': 'darkorange', 'linestyle': 'dashed', 'marker': ''}, 'x': ['1960', '1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968', '1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025', '2026', '2027', '2028', '2029', '2030', '2031', '2032', '2033', '2034', '2035', '2036', '2037', '2038', '2039', '2040', '2041', '2042', '2043', '2044', '2045', '2046', '2047', '2048', '2049', '2050', '2051', '2052', '2053', '2054', '2055', '2056', '2057', '2058', '2059', '2060', '2061', '2062', '2063', '2064', '2065', '2066', '2067', '2068', '2069', '2070', '2071', '2072', '2073', '2074', '2075', '2076', '2077', '2078', '2079', '2080', '2081', '2082', '2083', '2084', '2085', '2086', '2087', '2088', '2089', '2090', '2091', '2092', '2093', '2094', '2095', '2096', '2097', '2098', '2099', '2100'], 'y': [365.4360290527344, 365.4360290527344, 366.3817901611328, 370.3562286376953, 370.0383636474609, 368.7543701171875, 363.65330505371094, 362.13975830078124, 362.7178039550781, 363.755908203125, 362.38750610351565, 360.49403991699216, 355.80242614746095, 350.2475311279297, 345.21844482421875, 343.0520751953125, 338.33714904785154, 333.865087890625, 327.39000244140624, 318.34383087158204, 310.925, 304.46538696289065, 299.0312774658203, 291.35950622558596, 288.34351806640626, 282.4365234375, 276.03794250488284, 271.8182373046875, 263.2386703491211, 262.28236083984376, 256.69469299316404, 252.03939971923828, 248.528076171875, 247.79768829345704, 240.75631256103514, 235.02481231689453, 230.83321533203124, 224.58261260986328, 226.68485412597656, 227.8892333984375, 230.0491973876953, 233.94886322021483, 235.38610076904297, 236.56617126464843, 239.3690414428711, 246.90138092041016, 253.57110748291015, 259.4573577880859, 258.7451919555664, 257.60504150390625, 257.0888076782227, 254.17039642333984, 255.1963134765625, 256.12268524169923, 259.8720077514648, 255.56302185058593, 260.1665542602539, 260.2986724853516, 264.5683395385742, 267.7353576660156, 270.566650390625, 276.5804504394531, 276.32234649658204, 276.3282241821289, 275.2374801635742, 278.22037506103516, 275.76917877197263, 277.9089553833008, 276.6732666015625, 277.34466552734375, 279.9870849609375, 277.62059631347654, 279.3583251953125, 280.8967742919922, 284.52840118408204, 285.99884643554685, 283.9988784790039, 286.9042510986328, 288.2472900390625, 288.2276809692383, 288.45092010498047, 290.03744354248045, 293.49230041503904, 294.37877502441404, 290.1622573852539, 289.8346633911133, 293.2915893554688, 294.0444580078125, 296.50605926513674, 298.96287231445314, 301.6950622558594, 304.6785858154297, 306.6046600341797, 308.448747253418, 310.9706726074219, 313.1002166748047, 312.72008056640624, 313.1872253417969, 314.9825103759766, 316.8722778320313, 316.04274597167966, 318.5152069091797, 318.5831359863281, 320.08416748046875, 324.6519805908203, 327.76747131347656, 330.9547088623047, 330.2920715332031, 331.4086059570312, 332.7617950439453, 334.48505249023435, 331.79441528320314, 333.61553649902345, 335.93740234375, 338.03192138671875, 339.3437164306641, 340.1692321777344, 345.2793029785156, 347.0900177001953, 346.4639862060547, 349.43590087890624, 349.12818298339846, 348.1135589599609, 346.2927307128906, 346.17779235839845, 342.52085266113284, 346.2075622558594, 343.29247131347654, 342.37383422851565, 343.1639038085938, 341.8174591064453, 342.67644958496095, 343.50169677734374, 346.4277709960937, 344.9670471191406, 347.34112548828125, 343.3644195556641, 343.538671875, 343.063525390625, 343.6079162597656, 343.7228485107422]}]
The received JSON data are converted into pandas Dataframe for an easier data manipulation
[8]:
tco3_zm_pd = pd.json_normalize(tco3_zm_data)
Finally, we plot the retrieved data:
[9]:
# set default linewidth:
linewidth_default = 2
tco3_zm_pd_plot = tco3_zm_pd.copy()
if not 'plotstyle.linewidth' in tco3_zm_pd_plot.columns:
tco3_zm_pd_plot['plotstyle.linewidth'] = linewidth_default
else:
tco3_zm_pd_plot['plotstyle.linewidth'] = tco3_zm_pd_plot['plotstyle.linewidth'].fillna(linewidth_default)
# plot every model
for index, c in tco3_zm_pd_plot.iterrows():
plt.plot(pd.to_datetime(c['x']), c['y'], label=c['model'],
color=c['plotstyle.color'], linestyle=c['plotstyle.linestyle'],
marker=c['plotstyle.marker'], linewidth=c['plotstyle.linewidth'])
# let's fill the area of (MMMean +/- 1 Std)
tco3_zm_mmmean_minus_std_pd = tco3_zm_pd_plot[tco3_zm_pd_plot['model']=='MMMean-Std']
tco3_zm_mmmean_plus_std_pd = tco3_zm_pd_plot[tco3_zm_pd_plot['model']=='MMMean+Std']
plt.fill_between(pd.to_datetime(tco3_zm_mmmean_minus_std_pd['x'].iloc[0]),
tco3_zm_mmmean_minus_std_pd['y'].iloc[0],
tco3_zm_mmmean_plus_std_pd['y'].iloc[0],
color='g', alpha=0.2);
# tune the plot
# show the legend
ax = plt.gca() # get axis instance
ax.legend(bbox_to_anchor=(1.0, 1.0))
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
# put titels for axes
plt.xlabel('Year', fontsize='x-large')
plt.ylabel('tco3_zm (DU)', fontsize='x-large')
[9]:
Text(0, 0.5, 'tco3_zm (DU)')

Request points of the tco3_return plot
Similar to the previous task, we configure parameters of interest to get the tco3_return plot. In the example we specify that we want a plot for:
month: September, October, November
South Hemisphere (SH, latitudes: -90, -60)
reference measurement: refMeasurement (e.g. SBUV_GSFC_merged-SAT-ozone, see Global Variables)
reference year: refYear (e.g. 1980, see Global Variables)
we don’t provide a specific range of years, like in the previous example, but use all available data
[10]:
# initialize an empty dictionary
kwargs_tco3_return = {}
# Build kwargs with tco3_zm parameters for O3as API.
# Keys have to correspond to expected by the API keys!
kwargs_tco3_return = {
'month' : '9,10,11',
'lat_min' : -90,
'lat_max' : -60,
'ref_meas': refMeasurement,
'ref_year': refYear
}
We want to retrieve “tco3_retrun” plot: we use ‘/plots’ endpoint, plot type ‘tco3_return’, therefore we append ‘plots/tco3_return’ to the base URL of the O3as API
Then we retrieve tco3_retrun plot data for the parameters of interest and the list of refC2 models defined above (this time we exclude the reference measurement)
[11]:
# Build the API URL, use /plots/tco3_return endpoint:
url_o3api_plot_tco3_return = os.path.join(url_o3api, "plots/tco3_return")
# Request data
response = requests.request("POST",
url=url_o3api_plot_tco3_return,
params=kwargs_tco3_return,
headers=headers,
data=json.dumps(tco3_zm_models))
# Read the status_code. Normal response => 200
print(response.status_code)
tco3_return_data = response.json()
print(tco3_return_data[:5]) # print first five for cross-checking
200
[{'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_ACCESS_ACCESS-CCM-refC2', 'plotstyle': {'color': 'purple', 'linestyle': 'none', 'marker': 'o'}, 'x': ['Antarctic(Oct)', 'SH mid-lat', 'Tropics', 'NH mid-lat', 'Arctic(Mar)', 'Near global', 'Global', 'User region'], 'y': [2064, 2051, 2060, 2041, 2040, 2049, 2052, 2065]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CCCma_CMAM-refC2', 'plotstyle': {'color': 'red', 'linestyle': 'none', 'marker': 'x'}, 'x': ['Antarctic(Oct)', 'SH mid-lat', 'NH mid-lat', 'Arctic(Mar)', 'Near global', 'Global', 'User region'], 'y': [2087.0, 2049.0, 1986.0, 1986.0, 2045.0, 2048.0, 2083.0]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CESM1-CAM4Chem_refC2_r1i1p1', 'plotstyle': {'color': 'darkorange', 'linestyle': 'none', 'marker': 'd'}, 'x': ['Antarctic(Oct)', 'SH mid-lat', 'Tropics', 'NH mid-lat', 'Arctic(Mar)', 'Near global', 'Global', 'User region'], 'y': [2056, 2049, 2026, 1987, 2009, 2026, 2038, 2057]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CESM1-CAM4Chem_refC2_r2i1p1', 'plotstyle': {'color': 'darkorange', 'linestyle': 'none', 'marker': 'd'}, 'x': ['Antarctic(Oct)', 'SH mid-lat', 'Tropics', 'NH mid-lat', 'Arctic(Mar)', 'Near global', 'Global', 'User region'], 'y': [2057, 2038, 2022, 2006, 2017, 2026, 2036, 2058]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CESM1-CAM4Chem_refC2_r3i1p1', 'plotstyle': {'color': 'darkorange', 'linestyle': 'none', 'marker': 'd'}, 'x': ['Antarctic(Oct)', 'SH mid-lat', 'Tropics', 'NH mid-lat', 'Arctic(Mar)', 'Near global', 'Global', 'User region'], 'y': [2055, 2037, 2025, 2002, 2020, 2022, 2034, 2054]}]
The received JSON data can be converted into pandas Dataframe for an easier data manipulation
[12]:
tco3_return_pd = pd.json_normalize(tco3_return_data)
Finally, we plot the retrieved data:
[13]:
# set default markersize:
markersize_default = 6
tco3_return_pd_plot = tco3_return_pd.copy()
if not 'plotstyle.markersize' in tco3_return_pd_plot.columns:
tco3_return_pd_plot['plotstyle.markersize'] = markersize_default
else:
tco3_return_pd_plot['plotstyle.markersize'] = tco3_return_pd_plot['plotstyle.markersize'].fillna(markersize_default)
# plot every model
for index, c in tco3_return_pd_plot.iterrows():
plt.plot(c['x'], c['y'], label=c['model'],
color=c['plotstyle.color'], linestyle=c['plotstyle.linestyle'],
marker=c['plotstyle.marker'], markersize=c['plotstyle.markersize'])
# show the legend
ax = plt.gca() # get axis instance
ax.legend(bbox_to_anchor=(1.0, 1.0))
# put titels for axes
plt.xlabel('Region', fontsize='x-large')
plt.ylabel('tco3_zm (DU)', fontsize='x-large')
[13]:
Text(0, 0.5, 'tco3_zm (DU)')

The example is how to use a Jupyter notebook to retrieve data points of either tco3_zm plot or tco3_return plot in the JSON format and plot them. The corresponding Jupyter notebook can be downloaded here .
How to retrieve data, analyse, and plot tco3 plots (jupyter)
This tutorial shows how to use a Jupyter notebook to retrieve skimmed data points in the JSON format and analyse for either tco3_zm or tco3_return plot. The Jupyter notebook can be downloaded from here.
System installations
If necessary, install required libraries or python packages
[1]:
### If needed, install additional modules:
#!pip3 install pandas
#!pip3 install matplotlib
### interactive plotting in jupyterlab requires node.js (pip does not install it!!):
#!apt update && apt install -y nodejs
#!pip3 install ipympl
#!jupyter labextension install @jupyter-widgets/jupyterlab-manager
#!jupyter labextension install jupyter-matplotlib
#!jupyter nbextension enable --py widgetsnbextension
### DON'T FORGET TO RESTART JupyterLab !!
# start jupyterlab:
# jupyter lab --ip=0.0.0.0
Import necessary packages
In this tutorial we need the following python packages:
json - to decode JSON data
matplotlib - to plot the data
numpy and pandas - to manipulate the data
os - to manipulate URL paths
requests - to communicate with the O3as API and retrieve data
scipy - to apply boxcar smoothing on the skimmed data
[2]:
import json
import matplotlib.style as mplstyle
mplstyle.use('fast')
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
import requests
from scipy import signal
Define global variables
we set a few variables: e.g. the base URL of O3AS API and the default figure size
[3]:
debug = False # global debug flag, set to True to get more print-outs
pd.options.display.max_columns = None # prints all columns of the pandas' DataFrame
# for interactive plot, may change to widget, if installed
%matplotlib inline
# Set default size of plots
plt.rcParams['figure.figsize'] = [12, 8]
# A few variables needed for every REST API call:
url_o3api = "http://api.o3as.fedcloud.eu/api/v1/" # base URL of the O3as API
headers = {'Content-Type': 'application/json',
'Accept': 'application/json'}
# Define Reference Measurement and Reference Year
refMeasurement = 'SBUV_GSFC_merged-SAT-ozone'
refYear = 1980
Retrieve list of models
We will analyse refC2 models, therefore we first request the list of corresponding models via the REST API
[4]:
# Use '/models' API Endpoint, i.e. append "models" to the base url_o3api:
url_o3api_tco3_zm_models = os.path.join(url_o3api, "models")
# request the list of modesl from O3as API, select "refC2" models:
tco3_zm_models = requests.request("GET",
url=url_o3api_tco3_zm_models,
params={'select': 'refc2'},
headers=headers).json()
print(tco3_zm_models)
['CCMI-1_ACCESS_ACCESS-CCM-refC2', 'CCMI-1_CCCma_CMAM-refC2', 'CCMI-1_CESM1-CAM4Chem_refC2_r1i1p1', 'CCMI-1_CESM1-CAM4Chem_refC2_r2i1p1', 'CCMI-1_CESM1-CAM4Chem_refC2_r3i1p1', 'CCMI-1_CESM1-WACCM_refC2_r1i1p1', 'CCMI-1_CESM1-WACCM_refC2_r2i1p1', 'CCMI-1_CESM1-WACCM_refC2_r3i1p1', 'CCMI-1_CHASER-MIROC-ESM-refC2', 'CCMI-1_CNRM-CERFACS_CNRM-CM5-3-refC2', 'CCMI-1_CNRM-CERFACS_MOCAGE-refC2', 'CCMI-1_ETH-PMOD_SOCOL3-refC2', 'CCMI-1_GSFC_GEOSCCM-refC2', 'CCMI-1_MESSy_EMAC-L90MA-refC2', 'CCMI-1_MOHC_HadGEM3-ES-refC2', 'CCMI-1_MRI_ESM1r1-refC2', 'CCMI-1_NIES_CCSRNIES-MIROC3.2-refC2', 'CCMI-1_NIWA_NIWA-UKCA-refC2', 'CCMI-1_U-CAMBRIDGE_UMUKCA-UCAM-refC2', 'CCMI-1_U-LAQUILA_CCM-refC2', 'CCMI-1_U-LEEDS_UMSLIMCAT-refC2']
We also add a reference measurement, refMeasurement (defined above, e.g. SBUV_GSFC_merged-SAT-ozone), to the list of models to be plotted
[5]:
tco3_zm_models.append(refMeasurement)
Request skimmed data to analyse and to build tco3 plots
we configure parameters of interest to get the data. In the example we specify that we want a plot for:
Range of years: (1960, 2100)
month: September, October, November
South Hemisphere (SH, latitudes: -90, -60)
[6]:
# initialize an empty dictionary
kwargs_tco3_zm = {}
# Build kwargs with tco3_zm parameters for O3as API '/data' Endpoint.
# Keys have to correspond to expected by the API keys!
kwargs_tco3_zm = {
'begin' : 1960,
'end' : 2100,
'month' : '9,10,11',
'lat_min' : -90,
'lat_max' : -60
}
We want to retrieve skimmed data to analyse and build “tco3_zm” plot: we use ‘/data’ endpoint, plot type ‘tco3_zm’, therefore we append ‘data/tco3_zm’ to the base URL of the O3as API
Then we retrieve skimmed data for the tco3_zm plot for the parameters of interest and the list of refC2 models defined above
[7]:
# Build the API URL, use /data/tco3_zm endpoint:
url_o3api_data_tco3_zm = os.path.join(url_o3api, "data/tco3_zm")
# Request data
response = requests.request("POST",
url=url_o3api_data_tco3_zm,
params=kwargs_tco3_zm,
headers=headers,
data=json.dumps(tco3_zm_models))
if debug: print(response.request.url) # debug: print the configured API call
# Read the status_code. Normal response => 200
print(response.status_code)
tco3_skim_data = response.json()
print(tco3_skim_data[:5]) # print first five for cross-checking
200
[{'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_ACCESS_ACCESS-CCM-refC2', 'plotstyle': {'color': 'purple', 'linestyle': 'solid', 'marker': 'o'}, 'x': ['1960-09-16 00:00:00', '1960-10-16 00:00:00', '1960-11-16 00:00:00', '1961-09-16 00:00:00', '1961-10-16 00:00:00', '1961-11-16 00:00:00', '1962-09-16 00:00:00', '1962-10-16 00:00:00', '1962-11-16 00:00:00', '1963-09-16 00:00:00', '1963-10-16 00:00:00', '1963-11-16 00:00:00', '1964-09-16 00:00:00', '1964-10-16 00:00:00', '1964-11-16 00:00:00', '1965-09-16 00:00:00', '1965-10-16 00:00:00', '1965-11-16 00:00:00', '1966-09-16 00:00:00', '1966-10-16 00:00:00', '1966-11-16 00:00:00', '1967-09-16 00:00:00', '1967-10-16 00:00:00', '1967-11-16 00:00:00', '1968-09-16 00:00:00', '1968-10-16 00:00:00', '1968-11-16 00:00:00', '1969-09-16 00:00:00', '1969-10-16 00:00:00', '1969-11-16 00:00:00', '1970-09-16 00:00:00', '1970-10-16 00:00:00', '1970-11-16 00:00:00', '1971-09-16 00:00:00', '1971-10-16 00:00:00', '1971-11-16 00:00:00', '1972-09-16 00:00:00', '1972-10-16 00:00:00', '1972-11-16 00:00:00', '1973-09-16 00:00:00', '1973-10-16 00:00:00', '1973-11-16 00:00:00', '1974-09-16 00:00:00', '1974-10-16 00:00:00', '1974-11-16 00:00:00', '1975-09-16 00:00:00', '1975-10-16 00:00:00', '1975-11-16 00:00:00', '1976-09-16 00:00:00', '1976-10-16 00:00:00', '1976-11-16 00:00:00', '1977-09-16 00:00:00', '1977-10-16 00:00:00', '1977-11-16 00:00:00', '1978-09-16 00:00:00', '1978-10-16 00:00:00', '1978-11-16 00:00:00', '1979-09-16 00:00:00', '1979-10-16 00:00:00', '1979-11-16 00:00:00', '1980-09-16 00:00:00', '1980-10-16 00:00:00', '1980-11-16 00:00:00', '1981-09-16 00:00:00', '1981-10-16 00:00:00', '1981-11-16 00:00:00', '1982-09-16 00:00:00', '1982-10-16 00:00:00', '1982-11-16 00:00:00', '1983-09-16 00:00:00', '1983-10-16 00:00:00', '1983-11-16 00:00:00', '1984-09-16 00:00:00', '1984-10-16 00:00:00', '1984-11-16 00:00:00', '1985-09-16 00:00:00', '1985-10-16 00:00:00', '1985-11-16 00:00:00', '1986-09-16 00:00:00', '1986-10-16 00:00:00', '1986-11-16 00:00:00', '1987-09-16 00:00:00', '1987-10-16 00:00:00', '1987-11-16 00:00:00', '1988-09-16 00:00:00', '1988-10-16 00:00:00', '1988-11-16 00:00:00', '1989-09-16 00:00:00', '1989-10-16 00:00:00', '1989-11-16 00:00:00', '1990-09-16 00:00:00', '1990-10-16 00:00:00', '1990-11-16 00:00:00', '1991-09-16 00:00:00', '1991-10-16 00:00:00', '1991-11-16 00:00:00', '1992-09-16 00:00:00', '1992-10-16 00:00:00', '1992-11-16 00:00:00', '1993-09-16 00:00:00', '1993-10-16 00:00:00', '1993-11-16 00:00:00', '1994-09-16 00:00:00', '1994-10-16 00:00:00', '1994-11-16 00:00:00', '1995-09-16 00:00:00', '1995-10-16 00:00:00', '1995-11-16 00:00:00', '1996-09-16 00:00:00', '1996-10-16 00:00:00', '1996-11-16 00:00:00', '1997-09-16 00:00:00', '1997-10-16 00:00:00', '1997-11-16 00:00:00', '1998-09-16 00:00:00', '1998-10-16 00:00:00', '1998-11-16 00:00:00', '1999-09-16 00:00:00', '1999-10-16 00:00:00', '1999-11-16 00:00:00', '2000-09-16 00:00:00', '2000-10-16 00:00:00', '2000-11-16 00:00:00', '2001-09-16 00:00:00', '2001-10-16 00:00:00', '2001-11-16 00:00:00', '2002-09-16 00:00:00', '2002-10-16 00:00:00', '2002-11-16 00:00:00', '2003-09-16 00:00:00', '2003-10-16 00:00:00', '2003-11-16 00:00:00', '2004-09-16 00:00:00', '2004-10-16 00:00:00', '2004-11-16 00:00:00', '2005-09-16 00:00:00', '2005-10-16 00:00:00', '2005-11-16 00:00:00', '2006-09-16 00:00:00', '2006-10-16 00:00:00', '2006-11-16 00:00:00', '2007-09-16 00:00:00', '2007-10-16 00:00:00', '2007-11-16 00:00:00', '2008-09-16 00:00:00', '2008-10-16 00:00:00', '2008-11-16 00:00:00', '2009-09-16 00:00:00', '2009-10-16 00:00:00', '2009-11-16 00:00:00', '2010-09-16 00:00:00', '2010-10-16 00:00:00', '2010-11-16 00:00:00', '2011-09-16 00:00:00', '2011-10-16 00:00:00', '2011-11-16 00:00:00', '2012-09-16 00:00:00', '2012-10-16 00:00:00', '2012-11-16 00:00:00', '2013-09-16 00:00:00', '2013-10-16 00:00:00', '2013-11-16 00:00:00', '2014-09-16 00:00:00', '2014-10-16 00:00:00', '2014-11-16 00:00:00', '2015-09-16 00:00:00', '2015-10-16 00:00:00', '2015-11-16 00:00:00', '2016-09-16 00:00:00', '2016-10-16 00:00:00', '2016-11-16 00:00:00', '2017-09-16 00:00:00', '2017-10-16 00:00:00', '2017-11-16 00:00:00', '2018-09-16 00:00:00', '2018-10-16 00:00:00', '2018-11-16 00:00:00', '2019-09-16 00:00:00', '2019-10-16 00:00:00', '2019-11-16 00:00:00', '2020-09-16 00:00:00', '2020-10-16 00:00:00', '2020-11-16 00:00:00', '2021-09-16 00:00:00', '2021-10-16 00:00:00', '2021-11-16 00:00:00', '2022-09-16 00:00:00', '2022-10-16 00:00:00', '2022-11-16 00:00:00', '2023-09-16 00:00:00', '2023-10-16 00:00:00', '2023-11-16 00:00:00', '2024-09-16 00:00:00', '2024-10-16 00:00:00', '2024-11-16 00:00:00', '2025-09-16 00:00:00', '2025-10-16 00:00:00', '2025-11-16 00:00:00', '2026-09-16 00:00:00', '2026-10-16 00:00:00', '2026-11-16 00:00:00', '2027-09-16 00:00:00', '2027-10-16 00:00:00', '2027-11-16 00:00:00', '2028-09-16 00:00:00', '2028-10-16 00:00:00', '2028-11-16 00:00:00', '2029-09-16 00:00:00', '2029-10-16 00:00:00', '2029-11-16 00:00:00', '2030-09-16 00:00:00', '2030-10-16 00:00:00', '2030-11-16 00:00:00', '2031-09-16 00:00:00', '2031-10-16 00:00:00', '2031-11-16 00:00:00', '2032-09-16 00:00:00', '2032-10-16 00:00:00', '2032-11-16 00:00:00', '2033-09-16 00:00:00', '2033-10-16 00:00:00', '2033-11-16 00:00:00', '2034-09-16 00:00:00', '2034-10-16 00:00:00', '2034-11-16 00:00:00', '2035-09-16 00:00:00', '2035-10-16 00:00:00', '2035-11-16 00:00:00', '2036-09-16 00:00:00', '2036-10-16 00:00:00', '2036-11-16 00:00:00', '2037-09-16 00:00:00', '2037-10-16 00:00:00', '2037-11-16 00:00:00', '2038-09-16 00:00:00', '2038-10-16 00:00:00', '2038-11-16 00:00:00', '2039-09-16 00:00:00', '2039-10-16 00:00:00', '2039-11-16 00:00:00', '2040-09-16 00:00:00', '2040-10-16 00:00:00', '2040-11-16 00:00:00', '2041-09-16 00:00:00', '2041-10-16 00:00:00', '2041-11-16 00:00:00', '2042-09-16 00:00:00', '2042-10-16 00:00:00', '2042-11-16 00:00:00', '2043-09-16 00:00:00', '2043-10-16 00:00:00', '2043-11-16 00:00:00', '2044-09-16 00:00:00', '2044-10-16 00:00:00', '2044-11-16 00:00:00', '2045-09-16 00:00:00', '2045-10-16 00:00:00', '2045-11-16 00:00:00', '2046-09-16 00:00:00', '2046-10-16 00:00:00', '2046-11-16 00:00:00', '2047-09-16 00:00:00', '2047-10-16 00:00:00', '2047-11-16 00:00:00', '2048-09-16 00:00:00', '2048-10-16 00:00:00', '2048-11-16 00:00:00', '2049-09-16 00:00:00', '2049-10-16 00:00:00', '2049-11-16 00:00:00', '2050-09-16 00:00:00', '2050-10-16 00:00:00', '2050-11-16 00:00:00', '2051-09-16 00:00:00', '2051-10-16 00:00:00', '2051-11-16 00:00:00', '2052-09-16 00:00:00', '2052-10-16 00:00:00', '2052-11-16 00:00:00', '2053-09-16 00:00:00', '2053-10-16 00:00:00', '2053-11-16 00:00:00', '2054-09-16 00:00:00', '2054-10-16 00:00:00', '2054-11-16 00:00:00', '2055-09-16 00:00:00', '2055-10-16 00:00:00', '2055-11-16 00:00:00', '2056-09-16 00:00:00', '2056-10-16 00:00:00', '2056-11-16 00:00:00', '2057-09-16 00:00:00', '2057-10-16 00:00:00', '2057-11-16 00:00:00', '2058-09-16 00:00:00', '2058-10-16 00:00:00', '2058-11-16 00:00:00', '2059-09-16 00:00:00', '2059-10-16 00:00:00', '2059-11-16 00:00:00', '2060-09-16 00:00:00', '2060-10-16 00:00:00', '2060-11-16 00:00:00', '2061-09-16 00:00:00', '2061-10-16 00:00:00', '2061-11-16 00:00:00', '2062-09-16 00:00:00', '2062-10-16 00:00:00', '2062-11-16 00:00:00', '2063-09-16 00:00:00', '2063-10-16 00:00:00', '2063-11-16 00:00:00', '2064-09-16 00:00:00', '2064-10-16 00:00:00', '2064-11-16 00:00:00', '2065-09-16 00:00:00', '2065-10-16 00:00:00', '2065-11-16 00:00:00', '2066-09-16 00:00:00', '2066-10-16 00:00:00', '2066-11-16 00:00:00', '2067-09-16 00:00:00', '2067-10-16 00:00:00', '2067-11-16 00:00:00', '2068-09-16 00:00:00', '2068-10-16 00:00:00', '2068-11-16 00:00:00', '2069-09-16 00:00:00', '2069-10-16 00:00:00', '2069-11-16 00:00:00', '2070-09-16 00:00:00', '2070-10-16 00:00:00', '2070-11-16 00:00:00', '2071-09-16 00:00:00', '2071-10-16 00:00:00', '2071-11-16 00:00:00', '2072-09-16 00:00:00', '2072-10-16 00:00:00', '2072-11-16 00:00:00', '2073-09-16 00:00:00', '2073-10-16 00:00:00', '2073-11-16 00:00:00', '2074-09-16 00:00:00', '2074-10-16 00:00:00', '2074-11-16 00:00:00', '2075-09-16 00:00:00', '2075-10-16 00:00:00', '2075-11-16 00:00:00', '2076-09-16 00:00:00', '2076-10-16 00:00:00', '2076-11-16 00:00:00', '2077-09-16 00:00:00', '2077-10-16 00:00:00', '2077-11-16 00:00:00', '2078-09-16 00:00:00', '2078-10-16 00:00:00', '2078-11-16 00:00:00', '2079-09-16 00:00:00', '2079-10-16 00:00:00', '2079-11-16 00:00:00', '2080-09-16 00:00:00', '2080-10-16 00:00:00', '2080-11-16 00:00:00', '2081-09-16 00:00:00', '2081-10-16 00:00:00', '2081-11-16 00:00:00', '2082-09-16 00:00:00', '2082-10-16 00:00:00', '2082-11-16 00:00:00', '2083-09-16 00:00:00', '2083-10-16 00:00:00', '2083-11-16 00:00:00', '2084-09-16 00:00:00', '2084-10-16 00:00:00', '2084-11-16 00:00:00', '2085-09-16 00:00:00', '2085-10-16 00:00:00', '2085-11-16 00:00:00', '2086-09-16 00:00:00', '2086-10-16 00:00:00', '2086-11-16 00:00:00', '2087-09-16 00:00:00', '2087-10-16 00:00:00', '2087-11-16 00:00:00', '2088-09-16 00:00:00', '2088-10-16 00:00:00', '2088-11-16 00:00:00', '2089-09-16 00:00:00', '2089-10-16 00:00:00', '2089-11-16 00:00:00', '2090-09-16 00:00:00', '2090-10-16 00:00:00', '2090-11-16 00:00:00', '2091-09-16 00:00:00', '2091-10-16 00:00:00', '2091-11-16 00:00:00', '2092-09-16 00:00:00', '2092-10-16 00:00:00', '2092-11-16 00:00:00', '2093-09-16 00:00:00', '2093-10-16 00:00:00', '2093-11-16 00:00:00', '2094-09-16 00:00:00', '2094-10-16 00:00:00', '2094-11-16 00:00:00', '2095-09-16 00:00:00', '2095-10-16 00:00:00', '2095-11-16 00:00:00', '2096-09-16 00:00:00', '2096-10-16 00:00:00', '2096-11-16 00:00:00', '2097-09-16 00:00:00', '2097-10-16 00:00:00', '2097-11-16 00:00:00', '2098-09-16 00:00:00', '2098-10-16 00:00:00', '2098-11-16 00:00:00', '2099-09-16 00:00:00', '2099-10-16 00:00:00', '2099-11-16 00:00:00', '2100-09-16 00:00:00', '2100-10-16 00:00:00', '2100-11-16 00:00:00'], 'y': [320.9511413574219, 333.2698669433594, 361.1513671875, 319.62957763671875, 329.90435791015625, 351.99432373046875, 323.95928955078125, 333.49688720703125, 351.9967346191406, 301.10845947265625, 318.9958801269531, 337.90045166015625, 326.7186279296875, 345.24346923828125, 368.2457275390625, 329.15325927734375, 342.9112548828125, 368.9132995605469, 314.4475402832031, 324.4623718261719, 338.6962890625, 313.0696716308594, 323.9486999511719, 352.458984375, 315.2423400878906, 324.0968322753906, 356.80987548828125, 307.1667785644531, 314.7663269042969, 331.8493957519531, 317.14031982421875, 323.12701416015625, 328.3831481933594, 325.8026123046875, 337.35614013671875, 348.3123474121094, 296.73944091796875, 312.2994384765625, 331.8489990234375, 313.1903991699219, 315.26885986328125, 330.25885009765625, 312.88128662109375, 314.5570373535156, 315.1064147949219, 309.8940734863281, 315.08343505859375, 342.2933349609375, 305.48162841796875, 310.6967468261719, 329.7838439941406, 292.3639831542969, 295.5267333984375, 317.5395202636719, 303.90606689453125, 303.4534606933594, 303.76263427734375, 308.0885925292969, 304.08612060546875, 304.571044921875, 292.8528747558594, 294.76934814453125, 313.34259033203125, 293.2722473144531, 296.9925231933594, 308.14874267578125, 290.07904052734375, 282.0804443359375, 282.8500671386719, 287.5937194824219, 285.5896911621094, 305.7683410644531, 280.9316101074219, 275.1843566894531, 278.1725158691406, 290.1395568847656, 288.7980041503906, 288.840576171875, 275.3650817871094, 281.0958557128906, 301.6361999511719, 268.7950439453125, 275.72186279296875, 293.0486145019531, 277.6191711425781, 265.67694091796875, 273.90228271484375, 264.92376708984375, 262.2011413574219, 281.8218994140625, 264.5673828125, 251.23760986328125, 270.6645812988281, 262.4004211425781, 257.0200500488281, 261.4216613769531, 274.2939147949219, 256.8444519042969, 271.61004638671875, 260.4425354003906, 245.9104766845703, 239.60330200195312, 245.67608642578125, 226.76229858398438, 237.36837768554688, 255.02687072753906, 243.22496032714844, 254.63192749023438, 237.52601623535156, 218.3738555908203, 212.80673217773438, 228.78549194335938, 212.57167053222656, 216.24105834960938, 246.7681427001953, 239.70101928710938, 255.0833282470703, 246.21258544921875, 227.00770568847656, 233.14537048339844, 235.61033630371094, 220.780029296875, 213.42445373535156, 232.5608673095703, 222.68557739257812, 224.99554443359375, 238.78787231445312, 219.60755920410156, 220.87733459472656, 246.76812744140625, 239.29649353027344, 240.95401000976562, 263.26715087890625, 261.12103271484375, 260.8277587890625, 240.32928466796875, 223.62928771972656, 218.50845336914062, 239.94801330566406, 222.20590209960938, 253.30130004882812, 237.81959533691406, 226.45980834960938, 246.93560791015625, 249.46987915039062, 234.60008239746094, 221.62921142578125, 242.90065002441406, 226.68389892578125, 233.4449005126953, 238.16900634765625, 229.46083068847656, 237.25697326660156, 251.24398803710938, 236.837646484375, 234.4951934814453, 243.40061950683594, 225.595703125, 232.46018981933594, 240.89219665527344, 228.0338592529297, 224.24075317382812, 243.5813751220703, 232.9595489501953, 245.89462280273438, 254.77378845214844, 240.49229431152344, 240.18142700195312, 237.91824340820312, 229.13064575195312, 236.56570434570312, 251.4462890625, 251.75778198242188, 291.2410888671875, 243.5029296875, 243.51437377929688, 244.60545349121094, 244.62106323242188, 234.22642517089844, 252.17518615722656, 259.82147216796875, 253.94825744628906, 262.3238525390625, 241.91818237304688, 233.77456665039062, 231.5596466064453, 251.64364624023438, 238.0005645751953, 247.45870971679688, 250.23460388183594, 244.02792358398438, 239.9375, 246.21987915039062, 231.83529663085938, 226.24493408203125, 258.68109130859375, 253.71719360351562, 266.1638488769531, 240.39974975585938, 238.03883361816406, 260.91168212890625, 242.51083374023438, 240.5770721435547, 268.506591796875, 245.82138061523438, 238.75674438476562, 263.1990966796875, 250.04684448242188, 242.31057739257812, 238.74649047851562, 254.63845825195312, 250.39834594726562, 259.2873840332031, 257.47613525390625, 250.20571899414062, 249.18670654296875, 247.41952514648438, 237.47723388671875, 235.34994506835938, 258.51934814453125, 248.27032470703125, 256.5822448730469, 264.91412353515625, 261.2141418457031, 266.5226745605469, 259.5149230957031, 253.67477416992188, 264.56109619140625, 257.94268798828125, 250.30714416503906, 276.97454833984375, 248.61819458007812, 238.04916381835938, 238.52040100097656, 262.4573059082031, 267.564697265625, 264.0257568359375, 265.5270690917969, 254.58303833007812, 257.7320861816406, 271.1839599609375, 260.71234130859375, 261.2414855957031, 269.9574890136719, 263.3025817871094, 272.5090637207031, 276.9688720703125, 269.89654541015625, 269.957763671875, 276.43603515625, 288.83367919921875, 325.1101379394531, 271.0771484375, 287.29522705078125, 347.4416198730469, 268.6408996582031, 263.44232177734375, 277.66455078125, 274.1307373046875, 268.27593994140625, 275.9475402832031, 269.0600891113281, 270.9355163574219, 271.38067626953125, 293.0168762207031, 294.1997985839844, 318.4900817871094, 287.87811279296875, 275.90338134765625, 279.28570556640625, 276.4892883300781, 274.3894958496094, 281.05322265625, 289.52545166015625, 282.6499328613281, 277.77130126953125, 295.5430908203125, 303.8149719238281, 338.65228271484375, 277.68658447265625, 273.61993408203125, 271.86602783203125, 301.6903381347656, 303.47186279296875, 331.92083740234375, 268.11431884765625, 265.869140625, 271.62054443359375, 287.63287353515625, 283.4216613769531, 299.6116943359375, 281.35736083984375, 277.9797668457031, 287.63299560546875, 289.4767761230469, 294.99078369140625, 306.8837585449219, 298.0177917480469, 292.9007263183594, 297.3879699707031, 287.3365783691406, 294.0700988769531, 305.9577331542969, 282.1213073730469, 285.92303466796875, 305.35498046875, 288.8056640625, 298.2877502441406, 306.47833251953125, 291.7304992675781, 294.57305908203125, 306.3399353027344, 306.17864990234375, 303.9519958496094, 298.9942626953125, 292.0149841308594, 296.72991943359375, 305.8209228515625, 309.55792236328125, 305.7448425292969, 308.6402587890625, 292.7779541015625, 292.1789855957031, 296.7340087890625, 308.33599853515625, 314.016845703125, 345.8269348144531, 294.3402099609375, 293.4899597167969, 307.7074890136719, 304.92327880859375, 308.2930908203125, 321.6202697753906, 290.6161804199219, 292.92132568359375, 293.96142578125, 315.560546875, 314.1277770996094, 319.50323486328125, 317.7062072753906, 314.522705078125, 339.5002136230469, 304.98284912109375, 302.94146728515625, 303.35003662109375, 305.9152526855469, 307.2983093261719, 313.29583740234375, 312.3543701171875, 332.01654052734375, 380.19842529296875, 309.08001708984375, 310.548828125, 319.23876953125, 309.73565673828125, 309.91546630859375, 320.3847351074219, 315.052490234375, 316.8179016113281, 348.2354736328125, 308.9962463378906, 313.2668151855469, 329.119140625, 313.6253662109375, 338.2978210449219, 365.75445556640625, 303.8120422363281, 307.92913818359375, 338.1043395996094, 297.4571533203125, 304.5600280761719, 312.8099365234375, 317.88592529296875, 329.4150085449219, 339.34033203125, 300.689697265625, 312.9947509765625, 320.1678161621094, 304.79022216796875, 312.5983581542969, 328.5147705078125, 312.03228759765625, 329.92449951171875, 370.2761535644531, 301.82470703125, 309.4911193847656, 321.80145263671875, 312.37823486328125, 324.86871337890625, 328.1216125488281, 309.9021301269531, 320.7536315917969, 329.12591552734375, 318.4219055175781, 323.5434265136719, 325.87298583984375, 313.8462219238281, 317.9273681640625, 341.14093017578125, 309.899658203125, 313.1237487792969, 327.5733947753906, 326.27655029296875, 326.5853271484375, 329.8466491699219, 319.37091064453125, 328.3035888671875, 332.4083557128906, 324.29376220703125, 328.0825500488281, 330.0244140625, 313.10382080078125, 323.1716613769531, 346.24395751953125, 321.2017822265625, 332.5537109375, 328.3407897949219, 322.56915283203125, 329.0609130859375, 326.54669189453125, 303.34466552734375, 311.45166015625, 326.8108825683594]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CCCma_CMAM-refC2', 'plotstyle': {'color': 'red', 'linestyle': 'solid', 'marker': 'x'}, 'x': ['1960-09-16 00:00:00', '1960-10-16 12:00:00', '1960-11-16 00:00:00', '1961-09-16 00:00:00', '1961-10-16 12:00:00', '1961-11-16 00:00:00', '1962-09-16 00:00:00', '1962-10-16 12:00:00', '1962-11-16 00:00:00', '1963-09-16 00:00:00', '1963-10-16 12:00:00', '1963-11-16 00:00:00', '1964-09-16 00:00:00', '1964-10-16 12:00:00', '1964-11-16 00:00:00', '1965-09-16 00:00:00', '1965-10-16 12:00:00', '1965-11-16 00:00:00', '1966-09-16 00:00:00', '1966-10-16 12:00:00', '1966-11-16 00:00:00', '1967-09-16 00:00:00', '1967-10-16 12:00:00', '1967-11-16 00:00:00', '1968-09-16 00:00:00', '1968-10-16 12:00:00', '1968-11-16 00:00:00', '1969-09-16 00:00:00', '1969-10-16 12:00:00', '1969-11-16 00:00:00', '1970-09-16 00:00:00', '1970-10-16 12:00:00', '1970-11-16 00:00:00', '1971-09-16 00:00:00', '1971-10-16 12:00:00', '1971-11-16 00:00:00', '1972-09-16 00:00:00', '1972-10-16 12:00:00', '1972-11-16 00:00:00', '1973-09-16 00:00:00', '1973-10-16 12:00:00', '1973-11-16 00:00:00', '1974-09-16 00:00:00', '1974-10-16 12:00:00', '1974-11-16 00:00:00', '1975-09-16 00:00:00', '1975-10-16 12:00:00', '1975-11-16 00:00:00', '1976-09-16 00:00:00', '1976-10-16 12:00:00', '1976-11-16 00:00:00', '1977-09-16 00:00:00', '1977-10-16 12:00:00', '1977-11-16 00:00:00', '1978-09-16 00:00:00', '1978-10-16 12:00:00', '1978-11-16 00:00:00', '1979-09-16 00:00:00', '1979-10-16 12:00:00', '1979-11-16 00:00:00', '1980-09-16 00:00:00', '1980-10-16 12:00:00', '1980-11-16 00:00:00', '1981-09-16 00:00:00', '1981-10-16 12:00:00', '1981-11-16 00:00:00', '1982-09-16 00:00:00', '1982-10-16 12:00:00', '1982-11-16 00:00:00', '1983-09-16 00:00:00', '1983-10-16 12:00:00', '1983-11-16 00:00:00', '1984-09-16 00:00:00', '1984-10-16 12:00:00', '1984-11-16 00:00:00', '1985-09-16 00:00:00', '1985-10-16 12:00:00', '1985-11-16 00:00:00', '1986-09-16 00:00:00', '1986-10-16 12:00:00', '1986-11-16 00:00:00', '1987-09-16 00:00:00', '1987-10-16 12:00:00', '1987-11-16 00:00:00', '1988-09-16 00:00:00', '1988-10-16 12:00:00', '1988-11-16 00:00:00', '1989-09-16 00:00:00', '1989-10-16 12:00:00', '1989-11-16 00:00:00', '1990-09-16 00:00:00', '1990-10-16 12:00:00', '1990-11-16 00:00:00', '1991-09-16 00:00:00', '1991-10-16 12:00:00', '1991-11-16 00:00:00', '1992-09-16 00:00:00', '1992-10-16 12:00:00', '1992-11-16 00:00:00', '1993-09-16 00:00:00', '1993-10-16 12:00:00', '1993-11-16 00:00:00', '1994-09-16 00:00:00', '1994-10-16 12:00:00', '1994-11-16 00:00:00', '1995-09-16 00:00:00', '1995-10-16 12:00:00', '1995-11-16 00:00:00', '1996-09-16 00:00:00', '1996-10-16 12:00:00', '1996-11-16 00:00:00', '1997-09-16 00:00:00', '1997-10-16 12:00:00', '1997-11-16 00:00:00', '1998-09-16 00:00:00', '1998-10-16 12:00:00', '1998-11-16 00:00:00', '1999-09-16 00:00:00', '1999-10-16 12:00:00', '1999-11-16 00:00:00', '2000-09-16 00:00:00', '2000-10-16 12:00:00', '2000-11-16 00:00:00', '2001-09-16 00:00:00', '2001-10-16 12:00:00', '2001-11-16 00:00:00', '2002-09-16 00:00:00', '2002-10-16 12:00:00', '2002-11-16 00:00:00', '2003-09-16 00:00:00', '2003-10-16 12:00:00', '2003-11-16 00:00:00', '2004-09-16 00:00:00', '2004-10-16 12:00:00', '2004-11-16 00:00:00', '2005-09-16 00:00:00', '2005-10-16 12:00:00', '2005-11-16 00:00:00', '2006-09-16 00:00:00', '2006-10-16 12:00:00', '2006-11-16 00:00:00', '2007-09-16 00:00:00', '2007-10-16 12:00:00', '2007-11-16 00:00:00', '2008-09-16 00:00:00', '2008-10-16 12:00:00', '2008-11-16 00:00:00', '2009-09-16 00:00:00', '2009-10-16 12:00:00', '2009-11-16 00:00:00', '2010-09-16 00:00:00', '2010-10-16 12:00:00', '2010-11-16 00:00:00', '2011-09-16 00:00:00', '2011-10-16 12:00:00', '2011-11-16 00:00:00', '2012-09-16 00:00:00', '2012-10-16 12:00:00', '2012-11-16 00:00:00', '2013-09-16 00:00:00', '2013-10-16 12:00:00', '2013-11-16 00:00:00', '2014-09-16 00:00:00', '2014-10-16 12:00:00', '2014-11-16 00:00:00', '2015-09-16 00:00:00', '2015-10-16 12:00:00', '2015-11-16 00:00:00', '2016-09-16 00:00:00', '2016-10-16 12:00:00', '2016-11-16 00:00:00', '2017-09-16 00:00:00', '2017-10-16 12:00:00', '2017-11-16 00:00:00', '2018-09-16 00:00:00', '2018-10-16 12:00:00', '2018-11-16 00:00:00', '2019-09-16 00:00:00', '2019-10-16 12:00:00', '2019-11-16 00:00:00', '2020-09-16 00:00:00', '2020-10-16 12:00:00', '2020-11-16 00:00:00', '2021-09-16 00:00:00', '2021-10-16 12:00:00', '2021-11-16 00:00:00', '2022-09-16 00:00:00', '2022-10-16 12:00:00', '2022-11-16 00:00:00', '2023-09-16 00:00:00', '2023-10-16 12:00:00', '2023-11-16 00:00:00', '2024-09-16 00:00:00', '2024-10-16 12:00:00', '2024-11-16 00:00:00', '2025-09-16 00:00:00', '2025-10-16 12:00:00', '2025-11-16 00:00:00', '2026-09-16 00:00:00', '2026-10-16 12:00:00', '2026-11-16 00:00:00', '2027-09-16 00:00:00', '2027-10-16 12:00:00', '2027-11-16 00:00:00', '2028-09-16 00:00:00', '2028-10-16 12:00:00', '2028-11-16 00:00:00', '2029-09-16 00:00:00', '2029-10-16 12:00:00', '2029-11-16 00:00:00', '2030-09-16 00:00:00', '2030-10-16 12:00:00', '2030-11-16 00:00:00', '2031-09-16 00:00:00', '2031-10-16 12:00:00', '2031-11-16 00:00:00', '2032-09-16 00:00:00', '2032-10-16 12:00:00', '2032-11-16 00:00:00', '2033-09-16 00:00:00', '2033-10-16 12:00:00', '2033-11-16 00:00:00', '2034-09-16 00:00:00', '2034-10-16 12:00:00', '2034-11-16 00:00:00', '2035-09-16 00:00:00', '2035-10-16 12:00:00', '2035-11-16 00:00:00', '2036-09-16 00:00:00', '2036-10-16 12:00:00', '2036-11-16 00:00:00', '2037-09-16 00:00:00', '2037-10-16 12:00:00', '2037-11-16 00:00:00', '2038-09-16 00:00:00', '2038-10-16 12:00:00', '2038-11-16 00:00:00', '2039-09-16 00:00:00', '2039-10-16 12:00:00', '2039-11-16 00:00:00', '2040-09-16 00:00:00', '2040-10-16 12:00:00', '2040-11-16 00:00:00', '2041-09-16 00:00:00', '2041-10-16 12:00:00', '2041-11-16 00:00:00', '2042-09-16 00:00:00', '2042-10-16 12:00:00', '2042-11-16 00:00:00', '2043-09-16 00:00:00', '2043-10-16 12:00:00', '2043-11-16 00:00:00', '2044-09-16 00:00:00', '2044-10-16 12:00:00', '2044-11-16 00:00:00', '2045-09-16 00:00:00', '2045-10-16 12:00:00', '2045-11-16 00:00:00', '2046-09-16 00:00:00', '2046-10-16 12:00:00', '2046-11-16 00:00:00', '2047-09-16 00:00:00', '2047-10-16 12:00:00', '2047-11-16 00:00:00', '2048-09-16 00:00:00', '2048-10-16 12:00:00', '2048-11-16 00:00:00', '2049-09-16 00:00:00', '2049-10-16 12:00:00', '2049-11-16 00:00:00', '2050-09-16 00:00:00', '2050-10-16 12:00:00', '2050-11-16 00:00:00', '2051-09-16 00:00:00', '2051-10-16 12:00:00', '2051-11-16 00:00:00', '2052-09-16 00:00:00', '2052-10-16 12:00:00', '2052-11-16 00:00:00', '2053-09-16 00:00:00', '2053-10-16 12:00:00', '2053-11-16 00:00:00', '2054-09-16 00:00:00', '2054-10-16 12:00:00', '2054-11-16 00:00:00', '2055-09-16 00:00:00', '2055-10-16 12:00:00', '2055-11-16 00:00:00', '2056-09-16 00:00:00', '2056-10-16 12:00:00', '2056-11-16 00:00:00', '2057-09-16 00:00:00', '2057-10-16 12:00:00', '2057-11-16 00:00:00', '2058-09-16 00:00:00', '2058-10-16 12:00:00', '2058-11-16 00:00:00', '2059-09-16 00:00:00', '2059-10-16 12:00:00', '2059-11-16 00:00:00', '2060-09-16 00:00:00', '2060-10-16 12:00:00', '2060-11-16 00:00:00', '2061-09-16 00:00:00', '2061-10-16 12:00:00', '2061-11-16 00:00:00', '2062-09-16 00:00:00', '2062-10-16 12:00:00', '2062-11-16 00:00:00', '2063-09-16 00:00:00', '2063-10-16 12:00:00', '2063-11-16 00:00:00', '2064-09-16 00:00:00', '2064-10-16 12:00:00', '2064-11-16 00:00:00', '2065-09-16 00:00:00', '2065-10-16 12:00:00', '2065-11-16 00:00:00', '2066-09-16 00:00:00', '2066-10-16 12:00:00', '2066-11-16 00:00:00', '2067-09-16 00:00:00', '2067-10-16 12:00:00', '2067-11-16 00:00:00', '2068-09-16 00:00:00', '2068-10-16 12:00:00', '2068-11-16 00:00:00', '2069-09-16 00:00:00', '2069-10-16 12:00:00', '2069-11-16 00:00:00', '2070-09-16 00:00:00', '2070-10-16 12:00:00', '2070-11-16 00:00:00', '2071-09-16 00:00:00', '2071-10-16 12:00:00', '2071-11-16 00:00:00', '2072-09-16 00:00:00', '2072-10-16 12:00:00', '2072-11-16 00:00:00', '2073-09-16 00:00:00', '2073-10-16 12:00:00', '2073-11-16 00:00:00', '2074-09-16 00:00:00', '2074-10-16 12:00:00', '2074-11-16 00:00:00', '2075-09-16 00:00:00', '2075-10-16 12:00:00', '2075-11-16 00:00:00', '2076-09-16 00:00:00', '2076-10-16 12:00:00', '2076-11-16 00:00:00', '2077-09-16 00:00:00', '2077-10-16 12:00:00', '2077-11-16 00:00:00', '2078-09-16 00:00:00', '2078-10-16 12:00:00', '2078-11-16 00:00:00', '2079-09-16 00:00:00', '2079-10-16 12:00:00', '2079-11-16 00:00:00', '2080-09-16 00:00:00', '2080-10-16 12:00:00', '2080-11-16 00:00:00', '2081-09-16 00:00:00', '2081-10-16 12:00:00', '2081-11-16 00:00:00', '2082-09-16 00:00:00', '2082-10-16 12:00:00', '2082-11-16 00:00:00', '2083-09-16 00:00:00', '2083-10-16 12:00:00', '2083-11-16 00:00:00', '2084-09-16 00:00:00', '2084-10-16 12:00:00', '2084-11-16 00:00:00', '2085-09-16 00:00:00', '2085-10-16 12:00:00', '2085-11-16 00:00:00', '2086-09-16 00:00:00', '2086-10-16 12:00:00', '2086-11-16 00:00:00', '2087-09-16 00:00:00', '2087-10-16 12:00:00', '2087-11-16 00:00:00', '2088-09-16 00:00:00', '2088-10-16 12:00:00', '2088-11-16 00:00:00', '2089-09-16 00:00:00', '2089-10-16 12:00:00', '2089-11-16 00:00:00', '2090-09-16 00:00:00', '2090-10-16 12:00:00', '2090-11-16 00:00:00', '2091-09-16 00:00:00', '2091-10-16 12:00:00', '2091-11-16 00:00:00', '2092-09-16 00:00:00', '2092-10-16 12:00:00', '2092-11-16 00:00:00', '2093-09-16 00:00:00', '2093-10-16 12:00:00', '2093-11-16 00:00:00', '2094-09-16 00:00:00', '2094-10-16 12:00:00', '2094-11-16 00:00:00', '2095-09-16 00:00:00', '2095-10-16 12:00:00', '2095-11-16 00:00:00', '2096-09-16 00:00:00', '2096-10-16 12:00:00', '2096-11-16 00:00:00', '2097-09-16 00:00:00', '2097-10-16 12:00:00', '2097-11-16 00:00:00', '2098-09-16 00:00:00', '2098-10-16 12:00:00', '2098-11-16 00:00:00', '2099-09-16 00:00:00', '2099-10-16 12:00:00', '2099-11-16 00:00:00', '2100-09-16 00:00:00', '2100-10-16 12:00:00', '2100-11-16 00:00:00'], 'y': [312.01544189453125, 321.8052978515625, 318.4827880859375, 373.5628967285156, 427.5948791503906, 400.84918212890625, 306.7142639160156, 329.4429016113281, 394.7228698730469, 313.3193664550781, 314.0513916015625, 332.553955078125, 300.83721923828125, 322.06768798828125, 374.71234130859375, 329.58880615234375, 334.6397705078125, 357.74755859375, 321.6456298828125, 326.34283447265625, 334.3711853027344, 324.7497253417969, 357.7966003417969, 404.03704833984375, 327.3304443359375, 320.51251220703125, 342.7430725097656, 340.0590515136719, 357.45513916015625, 376.7799072265625, 394.953125, 362.32061767578125, 385.54278564453125, 287.12469482421875, 281.5145568847656, 301.01861572265625, 309.72601318359375, 324.8658142089844, 372.05517578125, 332.909423828125, 311.63006591796875, 338.9363098144531, 322.7637939453125, 334.6484680175781, 371.902587890625, 304.3301086425781, 292.67156982421875, 292.39471435546875, 299.1558837890625, 325.49249267578125, 363.230712890625, 344.06671142578125, 346.3625793457031, 372.7225646972656, 321.47698974609375, 313.2578125, 310.52728271484375, 303.9569396972656, 298.3292541503906, 313.9091491699219, 289.7911071777344, 290.7610778808594, 307.8988037109375, 277.49273681640625, 272.6202392578125, 331.23065185546875, 289.68841552734375, 273.2861328125, 298.5314025878906, 311.4185791015625, 315.7268371582031, 329.7130126953125, 257.7281188964844, 232.57305908203125, 246.62240600585938, 281.7569580078125, 281.5671081542969, 343.7681579589844, 286.9586181640625, 280.95062255859375, 307.6033020019531, 237.86260986328125, 206.41189575195312, 227.33407592773438, 297.22674560546875, 284.2293395996094, 287.25830078125, 236.30657958984375, 189.95278930664062, 212.10302734375, 237.62188720703125, 201.34251403808594, 216.13211059570312, 246.57431030273438, 212.2509307861328, 240.06710815429688, 215.38287353515625, 164.74615478515625, 201.4347381591797, 252.10641479492188, 226.8505859375, 244.104736328125, 292.19146728515625, 288.90716552734375, 294.945556640625, 223.27359008789062, 182.56277465820312, 274.3896484375, 203.39166259765625, 153.09133911132812, 192.7349395751953, 207.366455078125, 157.0463409423828, 184.77017211914062, 202.83901977539062, 171.65333557128906, 214.1165771484375, 197.46685791015625, 152.93301391601562, 212.73223876953125, 226.1682891845703, 175.1841583251953, 196.029296875, 198.10987854003906, 163.6394500732422, 202.95472717285156, 243.79519653320312, 211.00863647460938, 237.4976806640625, 194.27247619628906, 151.04623413085938, 188.48947143554688, 237.41622924804688, 217.73675537109375, 251.48605346679688, 215.3482666015625, 170.17315673828125, 195.7115936279297, 218.75985717773438, 214.1609649658203, 224.5288848876953, 237.1565704345703, 193.3150634765625, 258.397216796875, 206.32005310058594, 174.82298278808594, 198.19467163085938, 247.32272338867188, 231.63563537597656, 279.321044921875, 232.88058471679688, 199.65554809570312, 241.56573486328125, 213.29037475585938, 168.49774169921875, 180.65444946289062, 256.9222106933594, 201.46484375, 234.4866485595703, 262.0504455566406, 231.41836547851562, 234.25340270996094, 224.51638793945312, 191.8742218017578, 212.0470733642578, 273.3935546875, 305.19451904296875, 300.61370849609375, 235.7860870361328, 191.82229614257812, 229.9238739013672, 250.47042846679688, 232.12864685058594, 267.54998779296875, 234.28518676757812, 185.7843017578125, 201.60357666015625, 273.01336669921875, 232.46702575683594, 250.86016845703125, 222.879638671875, 176.82994079589844, 208.74867248535156, 237.44076538085938, 199.92279052734375, 193.34197998046875, 280.7780456542969, 226.6374969482422, 233.25181579589844, 240.9012451171875, 203.2626953125, 228.03091430664062, 243.83233642578125, 201.94593811035156, 204.37222290039062, 236.458984375, 187.44285583496094, 191.40281677246094, 238.91358947753906, 205.51388549804688, 238.49957275390625, 243.65711975097656, 225.85870361328125, 238.71560668945312, 249.88990783691406, 221.92959594726562, 216.07559204101562, 284.20538330078125, 293.71832275390625, 275.19647216796875, 252.03933715820312, 212.94815063476562, 234.10757446289062, 236.72018432617188, 197.2996826171875, 225.4600067138672, 262.1656799316406, 238.1283416748047, 270.41839599609375, 237.76019287109375, 196.27313232421875, 237.868896484375, 242.56405639648438, 202.6681365966797, 206.2445068359375, 243.76702880859375, 208.06695556640625, 218.17713928222656, 257.31329345703125, 217.80154418945312, 227.81849670410156, 286.9660339355469, 263.3874206542969, 299.5919189453125, 251.55613708496094, 199.07594299316406, 209.27676391601562, 275.63824462890625, 272.8795471191406, 310.90875244140625, 264.97772216796875, 222.54087829589844, 222.7447509765625, 257.0205078125, 252.53036499023438, 253.16720581054688, 245.5787353515625, 198.80113220214844, 209.8203125, 259.9139404296875, 235.1575164794922, 274.36773681640625, 321.09869384765625, 319.83038330078125, 342.36932373046875, 248.2819366455078, 207.65968322753906, 233.47650146484375, 272.4914855957031, 250.78038024902344, 280.52801513671875, 266.4096984863281, 227.0115203857422, 239.19552612304688, 293.8797912597656, 278.2767333984375, 333.179931640625, 289.09625244140625, 276.0455322265625, 285.40277099609375, 296.13482666015625, 295.1759948730469, 296.30810546875, 281.10369873046875, 272.2876281738281, 284.0234375, 268.8075256347656, 281.95367431640625, 275.3345947265625, 300.2385559082031, 290.67230224609375, 320.2640380859375, 270.08123779296875, 233.30471801757812, 243.20620727539062, 276.41436767578125, 243.27572631835938, 245.01992797851562, 266.3614807128906, 261.0185546875, 283.4292297363281, 277.75762939453125, 309.000732421875, 369.28546142578125, 285.9642333984375, 267.0955505371094, 263.32049560546875, 276.75726318359375, 246.17767333984375, 252.60818481445312, 289.3187561035156, 263.9275817871094, 265.2579345703125, 257.1279602050781, 230.58856201171875, 233.45498657226562, 289.55841064453125, 264.52960205078125, 270.1807861328125, 315.7706604003906, 304.7431335449219, 340.9957275390625, 278.408447265625, 262.8204040527344, 293.58734130859375, 290.67987060546875, 299.0083923339844, 345.10089111328125, 310.1650390625, 306.5872802734375, 308.46478271484375, 275.6328125, 255.29432678222656, 280.28497314453125, 303.5191955566406, 280.819580078125, 290.4093017578125, 278.7304382324219, 269.536376953125, 268.73663330078125, 293.6918640136719, 283.7518310546875, 275.69000244140625, 301.6622314453125, 280.521484375, 291.556884765625, 283.381103515625, 278.75543212890625, 307.9370422363281, 292.0855712890625, 271.94000244140625, 285.7817687988281, 271.4925842285156, 244.1055145263672, 241.925048828125, 294.2793884277344, 292.35357666015625, 298.56024169921875, 288.7666015625, 271.3594665527344, 287.8674621582031, 275.1510314941406, 249.36611938476562, 254.5976104736328, 293.3354187011719, 279.18768310546875, 296.02777099609375, 317.8662109375, 311.8207702636719, 345.7229919433594, 304.28887939453125, 297.58734130859375, 320.52471923828125, 269.85638427734375, 249.4162139892578, 261.3587646484375, 316.92706298828125, 308.8054504394531, 313.5499572753906, 322.54412841796875, 314.77496337890625, 325.02813720703125, 327.51513671875, 315.546875, 313.0611267089844, 278.20135498046875, 259.76629638671875, 286.3831787109375, 314.5423278808594, 317.61236572265625, 333.60662841796875, 304.7137451171875, 306.5250244140625, 341.5413818359375, 284.80853271484375, 269.23724365234375, 274.0869140625, 282.0198974609375, 279.8678894042969, 317.8340759277344, 313.3314514160156, 300.4289855957031, 299.8388977050781, 305.6490478515625, 297.69720458984375, 317.6639709472656, 321.02197265625, 312.2932434082031, 320.81817626953125, 292.4630126953125, 274.04180908203125, 275.1113586425781, 312.26007080078125, 315.3774719238281, 317.0543212890625, 282.6333923339844, 266.8158874511719, 276.7140197753906, 295.3541259765625, 277.2128601074219, 282.3233642578125, 302.38616943359375, 296.98089599609375, 292.2677001953125, 317.2266845703125, 320.1060791015625, 331.880615234375, 331.47857666015625, 321.4004211425781, 335.9202880859375, 337.67657470703125, 342.46221923828125, 341.49407958984375]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CESM1-CAM4Chem_refC2_r1i1p1', 'plotstyle': {'color': 'darkorange', 'linestyle': 'dashed', 'marker': 'd'}, 'x': ['1960-09-16 00:00:00', '1960-10-16 12:00:00', '1960-11-16 00:00:00', '1961-09-16 00:00:00', '1961-10-16 12:00:00', '1961-11-16 00:00:00', '1962-09-16 00:00:00', '1962-10-16 12:00:00', '1962-11-16 00:00:00', '1963-09-16 00:00:00', '1963-10-16 12:00:00', '1963-11-16 00:00:00', '1964-09-16 00:00:00', '1964-10-16 12:00:00', '1964-11-16 00:00:00', '1965-09-16 00:00:00', '1965-10-16 12:00:00', '1965-11-16 00:00:00', '1966-09-16 00:00:00', '1966-10-16 12:00:00', '1966-11-16 00:00:00', '1967-09-16 00:00:00', '1967-10-16 12:00:00', '1967-11-16 00:00:00', '1968-09-16 00:00:00', '1968-10-16 12:00:00', '1968-11-16 00:00:00', '1969-09-16 00:00:00', '1969-10-16 12:00:00', '1969-11-16 00:00:00', '1970-09-16 00:00:00', '1970-10-16 12:00:00', '1970-11-16 00:00:00', '1971-09-16 00:00:00', '1971-10-16 12:00:00', '1971-11-16 00:00:00', '1972-09-16 00:00:00', '1972-10-16 12:00:00', '1972-11-16 00:00:00', '1973-09-16 00:00:00', '1973-10-16 12:00:00', '1973-11-16 00:00:00', '1974-09-16 00:00:00', '1974-10-16 12:00:00', '1974-11-16 00:00:00', '1975-09-16 00:00:00', '1975-10-16 12:00:00', '1975-11-16 00:00:00', '1976-09-16 00:00:00', '1976-10-16 12:00:00', '1976-11-16 00:00:00', '1977-09-16 00:00:00', '1977-10-16 12:00:00', '1977-11-16 00:00:00', '1978-09-16 00:00:00', '1978-10-16 12:00:00', '1978-11-16 00:00:00', '1979-09-16 00:00:00', '1979-10-16 12:00:00', '1979-11-16 00:00:00', '1980-09-16 00:00:00', '1980-10-16 12:00:00', '1980-11-16 00:00:00', '1981-09-16 00:00:00', '1981-10-16 12:00:00', '1981-11-16 00:00:00', '1982-09-16 00:00:00', '1982-10-16 12:00:00', '1982-11-16 00:00:00', '1983-09-16 00:00:00', '1983-10-16 12:00:00', '1983-11-16 00:00:00', '1984-09-16 00:00:00', '1984-10-16 12:00:00', '1984-11-16 00:00:00', '1985-09-16 00:00:00', '1985-10-16 12:00:00', '1985-11-16 00:00:00', '1986-09-16 00:00:00', '1986-10-16 12:00:00', '1986-11-16 00:00:00', '1987-09-16 00:00:00', '1987-10-16 12:00:00', '1987-11-16 00:00:00', '1988-09-16 00:00:00', '1988-10-16 12:00:00', '1988-11-16 00:00:00', '1989-09-16 00:00:00', '1989-10-16 12:00:00', '1989-11-16 00:00:00', '1990-09-16 00:00:00', '1990-10-16 12:00:00', '1990-11-16 00:00:00', '1991-09-16 00:00:00', '1991-10-16 12:00:00', '1991-11-16 00:00:00', '1992-09-16 00:00:00', '1992-10-16 12:00:00', '1992-11-16 00:00:00', '1993-09-16 00:00:00', '1993-10-16 12:00:00', '1993-11-16 00:00:00', '1994-09-16 00:00:00', '1994-10-16 12:00:00', '1994-11-16 00:00:00', '1995-09-16 00:00:00', '1995-10-16 12:00:00', '1995-11-16 00:00:00', '1996-09-16 00:00:00', '1996-10-16 12:00:00', '1996-11-16 00:00:00', '1997-09-16 00:00:00', '1997-10-16 12:00:00', '1997-11-16 00:00:00', '1998-09-16 00:00:00', '1998-10-16 12:00:00', '1998-11-16 00:00:00', '1999-09-16 00:00:00', '1999-10-16 12:00:00', '1999-11-16 00:00:00', '2000-09-16 00:00:00', '2000-10-16 12:00:00', '2000-11-16 00:00:00', '2001-09-16 00:00:00', '2001-10-16 12:00:00', '2001-11-16 00:00:00', '2002-09-16 00:00:00', '2002-10-16 12:00:00', '2002-11-16 00:00:00', '2003-09-16 00:00:00', '2003-10-16 12:00:00', '2003-11-16 00:00:00', '2004-09-16 00:00:00', '2004-10-16 12:00:00', '2004-11-16 00:00:00', '2005-09-16 00:00:00', '2005-10-16 12:00:00', '2005-11-16 00:00:00', '2006-09-16 00:00:00', '2006-10-16 12:00:00', '2006-11-16 00:00:00', '2007-09-16 00:00:00', '2007-10-16 12:00:00', '2007-11-16 00:00:00', '2008-09-16 00:00:00', '2008-10-16 12:00:00', '2008-11-16 00:00:00', '2009-09-16 00:00:00', '2009-10-16 12:00:00', '2009-11-16 00:00:00', '2010-09-16 00:00:00', '2010-10-16 12:00:00', '2010-11-16 00:00:00', '2011-09-16 00:00:00', '2011-10-16 12:00:00', '2011-11-16 00:00:00', '2012-09-16 00:00:00', '2012-10-16 12:00:00', '2012-11-16 00:00:00', '2013-09-16 00:00:00', '2013-10-16 12:00:00', '2013-11-16 00:00:00', '2014-09-16 00:00:00', '2014-10-16 12:00:00', '2014-11-16 00:00:00', '2015-09-16 00:00:00', '2015-10-16 12:00:00', '2015-11-16 00:00:00', '2016-09-16 00:00:00', '2016-10-16 12:00:00', '2016-11-16 00:00:00', '2017-09-16 00:00:00', '2017-10-16 12:00:00', '2017-11-16 00:00:00', '2018-09-16 00:00:00', '2018-10-16 12:00:00', '2018-11-16 00:00:00', '2019-09-16 00:00:00', '2019-10-16 12:00:00', '2019-11-16 00:00:00', '2020-09-16 00:00:00', '2020-10-16 12:00:00', '2020-11-16 00:00:00', '2021-09-16 00:00:00', '2021-10-16 12:00:00', '2021-11-16 00:00:00', '2022-09-16 00:00:00', '2022-10-16 12:00:00', '2022-11-16 00:00:00', '2023-09-16 00:00:00', '2023-10-16 12:00:00', '2023-11-16 00:00:00', '2024-09-16 00:00:00', '2024-10-16 12:00:00', '2024-11-16 00:00:00', '2025-09-16 00:00:00', '2025-10-16 12:00:00', '2025-11-16 00:00:00', '2026-09-16 00:00:00', '2026-10-16 12:00:00', '2026-11-16 00:00:00', '2027-09-16 00:00:00', '2027-10-16 12:00:00', '2027-11-16 00:00:00', '2028-09-16 00:00:00', '2028-10-16 12:00:00', '2028-11-16 00:00:00', '2029-09-16 00:00:00', '2029-10-16 12:00:00', '2029-11-16 00:00:00', '2030-09-16 00:00:00', '2030-10-16 12:00:00', '2030-11-16 00:00:00', '2031-09-16 00:00:00', '2031-10-16 12:00:00', '2031-11-16 00:00:00', '2032-09-16 00:00:00', '2032-10-16 12:00:00', '2032-11-16 00:00:00', '2033-09-16 00:00:00', '2033-10-16 12:00:00', '2033-11-16 00:00:00', '2034-09-16 00:00:00', '2034-10-16 12:00:00', '2034-11-16 00:00:00', '2035-09-16 00:00:00', '2035-10-16 12:00:00', '2035-11-16 00:00:00', '2036-09-16 00:00:00', '2036-10-16 12:00:00', '2036-11-16 00:00:00', '2037-09-16 00:00:00', '2037-10-16 12:00:00', '2037-11-16 00:00:00', '2038-09-16 00:00:00', '2038-10-16 12:00:00', '2038-11-16 00:00:00', '2039-09-16 00:00:00', '2039-10-16 12:00:00', '2039-11-16 00:00:00', '2040-09-16 00:00:00', '2040-10-16 12:00:00', '2040-11-16 00:00:00', '2041-09-16 00:00:00', '2041-10-16 12:00:00', '2041-11-16 00:00:00', '2042-09-16 00:00:00', '2042-10-16 12:00:00', '2042-11-16 00:00:00', '2043-09-16 00:00:00', '2043-10-16 12:00:00', '2043-11-16 00:00:00', '2044-09-16 00:00:00', '2044-10-16 12:00:00', '2044-11-16 00:00:00', '2045-09-16 00:00:00', '2045-10-16 12:00:00', '2045-11-16 00:00:00', '2046-09-16 00:00:00', '2046-10-16 12:00:00', '2046-11-16 00:00:00', '2047-09-16 00:00:00', '2047-10-16 12:00:00', '2047-11-16 00:00:00', '2048-09-16 00:00:00', '2048-10-16 12:00:00', '2048-11-16 00:00:00', '2049-09-16 00:00:00', '2049-10-16 12:00:00', '2049-11-16 00:00:00', '2050-09-16 00:00:00', '2050-10-16 12:00:00', '2050-11-16 00:00:00', '2051-09-16 00:00:00', '2051-10-16 12:00:00', '2051-11-16 00:00:00', '2052-09-16 00:00:00', '2052-10-16 12:00:00', '2052-11-16 00:00:00', '2053-09-16 00:00:00', '2053-10-16 12:00:00', '2053-11-16 00:00:00', '2054-09-16 00:00:00', '2054-10-16 12:00:00', '2054-11-16 00:00:00', '2055-09-16 00:00:00', '2055-10-16 12:00:00', '2055-11-16 00:00:00', '2056-09-16 00:00:00', '2056-10-16 12:00:00', '2056-11-16 00:00:00', '2057-09-16 00:00:00', '2057-10-16 12:00:00', '2057-11-16 00:00:00', '2058-09-16 00:00:00', '2058-10-16 12:00:00', '2058-11-16 00:00:00', '2059-09-16 00:00:00', '2059-10-16 12:00:00', '2059-11-16 00:00:00', '2060-09-16 00:00:00', '2060-10-16 12:00:00', '2060-11-16 00:00:00', '2061-09-16 00:00:00', '2061-10-16 12:00:00', '2061-11-16 00:00:00', '2062-09-16 00:00:00', '2062-10-16 12:00:00', '2062-11-16 00:00:00', '2063-09-16 00:00:00', '2063-10-16 12:00:00', '2063-11-16 00:00:00', '2064-09-16 00:00:00', '2064-10-16 12:00:00', '2064-11-16 00:00:00', '2065-09-16 00:00:00', '2065-10-16 12:00:00', '2065-11-16 00:00:00', '2066-09-16 00:00:00', '2066-10-16 12:00:00', '2066-11-16 00:00:00', '2067-09-16 00:00:00', '2067-10-16 12:00:00', '2067-11-16 00:00:00', '2068-09-16 00:00:00', '2068-10-16 12:00:00', '2068-11-16 00:00:00', '2069-09-16 00:00:00', '2069-10-16 12:00:00', '2069-11-16 00:00:00', '2070-09-16 00:00:00', '2070-10-16 12:00:00', '2070-11-16 00:00:00', '2071-09-16 00:00:00', '2071-10-16 12:00:00', '2071-11-16 00:00:00', '2072-09-16 00:00:00', '2072-10-16 12:00:00', '2072-11-16 00:00:00', '2073-09-16 00:00:00', '2073-10-16 12:00:00', '2073-11-16 00:00:00', '2074-09-16 00:00:00', '2074-10-16 12:00:00', '2074-11-16 00:00:00', '2075-09-16 00:00:00', '2075-10-16 12:00:00', '2075-11-16 00:00:00', '2076-09-16 00:00:00', '2076-10-16 12:00:00', '2076-11-16 00:00:00', '2077-09-16 00:00:00', '2077-10-16 12:00:00', '2077-11-16 00:00:00', '2078-09-16 00:00:00', '2078-10-16 12:00:00', '2078-11-16 00:00:00', '2079-09-16 00:00:00', '2079-10-16 12:00:00', '2079-11-16 00:00:00', '2080-09-16 00:00:00', '2080-10-16 12:00:00', '2080-11-16 00:00:00', '2081-09-16 00:00:00', '2081-10-16 12:00:00', '2081-11-16 00:00:00', '2082-09-16 00:00:00', '2082-10-16 12:00:00', '2082-11-16 00:00:00', '2083-09-16 00:00:00', '2083-10-16 12:00:00', '2083-11-16 00:00:00', '2084-09-16 00:00:00', '2084-10-16 12:00:00', '2084-11-16 00:00:00', '2085-09-16 00:00:00', '2085-10-16 12:00:00', '2085-11-16 00:00:00', '2086-09-16 00:00:00', '2086-10-16 12:00:00', '2086-11-16 00:00:00', '2087-09-16 00:00:00', '2087-10-16 12:00:00', '2087-11-16 00:00:00', '2088-09-16 00:00:00', '2088-10-16 12:00:00', '2088-11-16 00:00:00', '2089-09-16 00:00:00', '2089-10-16 12:00:00', '2089-11-16 00:00:00', '2090-09-16 00:00:00', '2090-10-16 12:00:00', '2090-11-16 00:00:00', '2091-09-16 00:00:00', '2091-10-16 12:00:00', '2091-11-16 00:00:00', '2092-09-16 00:00:00', '2092-10-16 12:00:00', '2092-11-16 00:00:00', '2093-09-16 00:00:00', '2093-10-16 12:00:00', '2093-11-16 00:00:00', '2094-09-16 00:00:00', '2094-10-16 12:00:00', '2094-11-16 00:00:00', '2095-09-16 00:00:00', '2095-10-16 12:00:00', '2095-11-16 00:00:00', '2096-09-16 00:00:00', '2096-10-16 12:00:00', '2096-11-16 00:00:00', '2097-09-16 00:00:00', '2097-10-16 12:00:00', '2097-11-16 00:00:00', '2098-09-16 00:00:00', '2098-10-16 12:00:00', '2098-11-16 00:00:00', '2099-09-16 00:00:00', '2099-10-16 12:00:00', '2099-11-16 00:00:00', '2100-09-16 00:00:00', '2100-10-16 12:00:00', '2100-11-16 00:00:00'], 'y': [353.1313171386719, 352.05389404296875, 370.7903747558594, 331.83526611328125, 337.29351806640625, 332.6077880859375, 366.6236572265625, 348.2923889160156, 349.31707763671875, 377.1514587402344, 368.1007995605469, 354.50299072265625, 355.24749755859375, 355.0059814453125, 396.5921630859375, 343.625244140625, 339.8108215332031, 336.17059326171875, 349.7147521972656, 327.5218505859375, 325.9536437988281, 350.941650390625, 334.7482604980469, 372.12615966796875, 328.00408935546875, 322.44189453125, 314.44970703125, 347.700439453125, 323.0464782714844, 348.11993408203125, 335.816650390625, 321.13153076171875, 340.6331787109375, 375.8186950683594, 369.19891357421875, 355.9002380371094, 317.88916015625, 317.1134033203125, 357.81671142578125, 326.8087463378906, 324.02178955078125, 345.57379150390625, 294.02435302734375, 283.5927734375, 282.34185791015625, 310.98260498046875, 295.81097412109375, 310.5348815917969, 337.1804504394531, 342.4287109375, 357.91748046875, 299.5369873046875, 294.21051025390625, 308.4949951171875, 279.06268310546875, 260.83258056640625, 268.6300354003906, 302.1304626464844, 297.5106201171875, 298.6448974609375, 293.54278564453125, 274.1562194824219, 295.22296142578125, 303.22491455078125, 289.29840087890625, 309.95068359375, 274.97412109375, 225.72972106933594, 234.11268615722656, 278.4093322753906, 237.65679931640625, 252.22413635253906, 254.16744995117188, 207.97671508789062, 226.77337646484375, 292.9732666015625, 266.5666198730469, 303.19384765625, 223.18942260742188, 193.5574951171875, 214.49310302734375, 248.40126037597656, 195.49913024902344, 198.87286376953125, 245.44436645507812, 215.40029907226562, 229.76632690429688, 229.512939453125, 193.35397338867188, 232.9671630859375, 251.48158264160156, 200.491455078125, 217.5258331298828, 236.171630859375, 197.66241455078125, 236.38067626953125, 215.7960662841797, 164.34625244140625, 194.20884704589844, 190.6596221923828, 143.3970947265625, 161.2984161376953, 202.7552490234375, 152.3041229248047, 166.84490966796875, 273.95416259765625, 254.91075134277344, 268.9434814453125, 197.26132202148438, 179.90200805664062, 198.543212890625, 227.91986083984375, 180.63983154296875, 190.28289794921875, 220.71348571777344, 181.40133666992188, 206.1310272216797, 235.22702026367188, 199.3326416015625, 217.67161560058594, 205.25796508789062, 163.13133239746094, 199.97177124023438, 244.84280395507812, 205.67701721191406, 220.68133544921875, 243.367919921875, 198.9734649658203, 206.85169982910156, 206.70712280273438, 170.46597290039062, 184.6048583984375, 225.7847442626953, 169.10186767578125, 193.01312255859375, 262.17254638671875, 306.5072021484375, 327.634033203125, 251.97152709960938, 233.08462524414062, 238.87994384765625, 209.99160766601562, 179.4298095703125, 196.34954833984375, 243.5169219970703, 217.50277709960938, 232.22134399414062, 227.8970184326172, 178.02532958984375, 188.8404541015625, 227.5699462890625, 213.9361572265625, 221.8848114013672, 235.15707397460938, 196.99241638183594, 202.28053283691406, 254.8408966064453, 213.40423583984375, 223.2367401123047, 219.37908935546875, 174.5485382080078, 206.7681427001953, 227.16700744628906, 190.26870727539062, 203.3653564453125, 240.80494689941406, 177.6494598388672, 186.390625, 246.6778564453125, 215.19174194335938, 218.0501708984375, 207.89053344726562, 165.97158813476562, 182.07028198242188, 249.66305541992188, 223.8021240234375, 240.40147399902344, 243.5272979736328, 201.12022399902344, 215.83460998535156, 240.736328125, 191.8094482421875, 219.59051513671875, 230.91152954101562, 202.10987854003906, 217.1326904296875, 265.2745666503906, 256.36102294921875, 266.38690185546875, 271.3406982421875, 254.64208984375, 258.5712890625, 257.3938903808594, 206.166015625, 208.20492553710938, 243.80508422851562, 203.1929168701172, 246.32122802734375, 252.5797119140625, 221.6053466796875, 251.14779663085938, 259.15826416015625, 205.0536651611328, 216.09771728515625, 224.69772338867188, 177.83493041992188, 202.24212646484375, 246.10226440429688, 190.968505859375, 204.2706298828125, 252.00741577148438, 261.3140869140625, 269.6717224121094, 289.88873291015625, 243.98374938964844, 242.3511199951172, 254.69119262695312, 246.4996337890625, 270.23895263671875, 253.2159881591797, 213.2776336669922, 227.70840454101562, 285.171630859375, 260.11859130859375, 280.10003662109375, 262.0959777832031, 223.57742309570312, 245.88124084472656, 259.88568115234375, 216.56655883789062, 226.57620239257812, 280.505615234375, 260.0455017089844, 288.0707092285156, 262.0877685546875, 231.99356079101562, 242.04156494140625, 257.6296081542969, 235.16845703125, 241.81553649902344, 293.13336181640625, 275.9891052246094, 279.555908203125, 259.70562744140625, 220.05020141601562, 242.42156982421875, 295.663330078125, 292.07049560546875, 302.3602294921875, 267.1206359863281, 246.20022583007812, 258.9483947753906, 271.2991943359375, 247.4454345703125, 276.734619140625, 290.7255859375, 270.3551025390625, 274.80218505859375, 281.03814697265625, 267.5129699707031, 269.7552185058594, 267.5831298828125, 246.04873657226562, 254.61831665039062, 275.1285095214844, 256.146728515625, 266.99749755859375, 280.8775634765625, 249.7889862060547, 252.19615173339844, 265.5966796875, 252.64764404296875, 268.7893371582031, 284.9729919433594, 275.19854736328125, 288.5277099609375, 285.708251953125, 257.555419921875, 265.23577880859375, 295.0673828125, 271.67236328125, 273.0186767578125, 285.01104736328125, 251.4252166748047, 275.46771240234375, 285.79119873046875, 261.3714904785156, 274.45550537109375, 292.3905944824219, 285.37164306640625, 282.3432922363281, 313.6703796386719, 294.56121826171875, 289.1662902832031, 291.8369445800781, 265.3492736816406, 287.52545166015625, 290.74432373046875, 268.9522399902344, 270.40411376953125, 305.7489929199219, 298.8329162597656, 297.93572998046875, 291.506591796875, 312.843505859375, 325.029052734375, 300.7225341796875, 277.1959228515625, 278.80267333984375, 318.2765197753906, 302.36376953125, 294.8594970703125, 275.3856201171875, 253.2352294921875, 259.7738342285156, 305.40020751953125, 292.4349670410156, 304.98968505859375, 320.77423095703125, 287.8369445800781, 281.84625244140625, 316.5269470214844, 302.156982421875, 318.2308044433594, 296.7737121582031, 283.07281494140625, 316.3309326171875, 336.8802490234375, 320.1484069824219, 324.30816650390625, 307.2872314453125, 288.72100830078125, 295.4797058105469, 304.8622741699219, 288.8728942871094, 294.4170837402344, 300.52569580078125, 292.74017333984375, 285.788330078125, 285.154541015625, 273.82781982421875, 301.2880859375, 318.467041015625, 318.5018310546875, 320.29266357421875, 310.9317626953125, 295.8368835449219, 310.56005859375, 308.94830322265625, 289.0935363769531, 296.9487609863281, 301.06005859375, 282.27117919921875, 288.0964050292969, 328.5723876953125, 306.0311279296875, 303.56878662109375, 302.9425048828125, 294.712890625, 303.841552734375, 307.3906555175781, 288.142578125, 293.3165283203125, 339.04241943359375, 327.9918212890625, 333.71514892578125, 294.6421203613281, 279.448486328125, 285.63470458984375, 330.2760925292969, 318.9078369140625, 344.95257568359375, 325.3250732421875, 317.8257751464844, 342.961669921875, 313.13507080078125, 298.18475341796875, 307.84478759765625, 290.19427490234375, 282.7154541015625, 293.9735107421875, 316.61328125, 300.4488220214844, 322.2135009765625, 345.2583923339844, 338.6092224121094, 333.3365783691406, 307.564453125, 296.70306396484375, 309.74609375, 312.7708435058594, 315.27935791015625, 326.3284606933594, 334.68511962890625, 312.59930419921875, 306.63433837890625, 342.91925048828125, 369.09967041015625, 340.3334655761719, 312.7289733886719, 298.4283447265625, 300.542236328125, 307.9903259277344, 313.7489929199219, 305.70343017578125, 310.59722900390625, 321.51043701171875, 323.61785888671875, 304.8424987792969, 292.567138671875, 293.0079345703125, 301.80706787109375, 291.90484619140625, 306.6117858886719, 317.9581604003906, 306.66436767578125, 309.45037841796875, 319.3812255859375, 307.36676025390625, 306.7347412109375, 301.4939270019531, 286.20526123046875, 289.62750244140625]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CESM1-CAM4Chem_refC2_r2i1p1', 'plotstyle': {'color': 'darkorange', 'linestyle': 'dashed', 'marker': 'd'}, 'x': ['1960-09-16 00:00:00', '1960-10-16 12:00:00', '1960-11-16 00:00:00', '1961-09-16 00:00:00', '1961-10-16 12:00:00', '1961-11-16 00:00:00', '1962-09-16 00:00:00', '1962-10-16 12:00:00', '1962-11-16 00:00:00', '1963-09-16 00:00:00', '1963-10-16 12:00:00', '1963-11-16 00:00:00', '1964-09-16 00:00:00', '1964-10-16 12:00:00', '1964-11-16 00:00:00', '1965-09-16 00:00:00', '1965-10-16 12:00:00', '1965-11-16 00:00:00', '1966-09-16 00:00:00', '1966-10-16 12:00:00', '1966-11-16 00:00:00', '1967-09-16 00:00:00', '1967-10-16 12:00:00', '1967-11-16 00:00:00', '1968-09-16 00:00:00', '1968-10-16 12:00:00', '1968-11-16 00:00:00', '1969-09-16 00:00:00', '1969-10-16 12:00:00', '1969-11-16 00:00:00', '1970-09-16 00:00:00', '1970-10-16 12:00:00', '1970-11-16 00:00:00', '1971-09-16 00:00:00', '1971-10-16 12:00:00', '1971-11-16 00:00:00', '1972-09-16 00:00:00', '1972-10-16 12:00:00', '1972-11-16 00:00:00', '1973-09-16 00:00:00', '1973-10-16 12:00:00', '1973-11-16 00:00:00', '1974-09-16 00:00:00', '1974-10-16 12:00:00', '1974-11-16 00:00:00', '1975-09-16 00:00:00', '1975-10-16 12:00:00', '1975-11-16 00:00:00', '1976-09-16 00:00:00', '1976-10-16 12:00:00', '1976-11-16 00:00:00', '1977-09-16 00:00:00', '1977-10-16 12:00:00', '1977-11-16 00:00:00', '1978-09-16 00:00:00', '1978-10-16 12:00:00', '1978-11-16 00:00:00', '1979-09-16 00:00:00', '1979-10-16 12:00:00', '1979-11-16 00:00:00', '1980-09-16 00:00:00', '1980-10-16 12:00:00', '1980-11-16 00:00:00', '1981-09-16 00:00:00', '1981-10-16 12:00:00', '1981-11-16 00:00:00', '1982-09-16 00:00:00', '1982-10-16 12:00:00', '1982-11-16 00:00:00', '1983-09-16 00:00:00', '1983-10-16 12:00:00', '1983-11-16 00:00:00', '1984-09-16 00:00:00', '1984-10-16 12:00:00', '1984-11-16 00:00:00', '1985-09-16 00:00:00', '1985-10-16 12:00:00', '1985-11-16 00:00:00', '1986-09-16 00:00:00', '1986-10-16 12:00:00', '1986-11-16 00:00:00', '1987-09-16 00:00:00', '1987-10-16 12:00:00', '1987-11-16 00:00:00', '1988-09-16 00:00:00', '1988-10-16 12:00:00', '1988-11-16 00:00:00', '1989-09-16 00:00:00', '1989-10-16 12:00:00', '1989-11-16 00:00:00', '1990-09-16 00:00:00', '1990-10-16 12:00:00', '1990-11-16 00:00:00', '1991-09-16 00:00:00', '1991-10-16 12:00:00', '1991-11-16 00:00:00', '1992-09-16 00:00:00', '1992-10-16 12:00:00', '1992-11-16 00:00:00', '1993-09-16 00:00:00', '1993-10-16 12:00:00', '1993-11-16 00:00:00', '1994-09-16 00:00:00', '1994-10-16 12:00:00', '1994-11-16 00:00:00', '1995-09-16 00:00:00', '1995-10-16 12:00:00', '1995-11-16 00:00:00', '1996-09-16 00:00:00', '1996-10-16 12:00:00', '1996-11-16 00:00:00', '1997-09-16 00:00:00', '1997-10-16 12:00:00', '1997-11-16 00:00:00', '1998-09-16 00:00:00', '1998-10-16 12:00:00', '1998-11-16 00:00:00', '1999-09-16 00:00:00', '1999-10-16 12:00:00', '1999-11-16 00:00:00', '2000-09-16 00:00:00', '2000-10-16 12:00:00', '2000-11-16 00:00:00', '2001-09-16 00:00:00', '2001-10-16 12:00:00', '2001-11-16 00:00:00', '2002-09-16 00:00:00', '2002-10-16 12:00:00', '2002-11-16 00:00:00', '2003-09-16 00:00:00', '2003-10-16 12:00:00', '2003-11-16 00:00:00', '2004-09-16 00:00:00', '2004-10-16 12:00:00', '2004-11-16 00:00:00', '2005-09-16 00:00:00', '2005-10-16 12:00:00', '2005-11-16 00:00:00', '2006-09-16 00:00:00', '2006-10-16 12:00:00', '2006-11-16 00:00:00', '2007-09-16 00:00:00', '2007-10-16 12:00:00', '2007-11-16 00:00:00', '2008-09-16 00:00:00', '2008-10-16 12:00:00', '2008-11-16 00:00:00', '2009-09-16 00:00:00', '2009-10-16 12:00:00', '2009-11-16 00:00:00', '2010-09-16 00:00:00', '2010-10-16 12:00:00', '2010-11-16 00:00:00', '2011-09-16 00:00:00', '2011-10-16 12:00:00', '2011-11-16 00:00:00', '2012-09-16 00:00:00', '2012-10-16 12:00:00', '2012-11-16 00:00:00', '2013-09-16 00:00:00', '2013-10-16 12:00:00', '2013-11-16 00:00:00', '2014-09-16 00:00:00', '2014-10-16 12:00:00', '2014-11-16 00:00:00', '2015-09-16 00:00:00', '2015-10-16 12:00:00', '2015-11-16 00:00:00', '2016-09-16 00:00:00', '2016-10-16 12:00:00', '2016-11-16 00:00:00', '2017-09-16 00:00:00', '2017-10-16 12:00:00', '2017-11-16 00:00:00', '2018-09-16 00:00:00', '2018-10-16 12:00:00', '2018-11-16 00:00:00', '2019-09-16 00:00:00', '2019-10-16 12:00:00', '2019-11-16 00:00:00', '2020-09-16 00:00:00', '2020-10-16 12:00:00', '2020-11-16 00:00:00', '2021-09-16 00:00:00', '2021-10-16 12:00:00', '2021-11-16 00:00:00', '2022-09-16 00:00:00', '2022-10-16 12:00:00', '2022-11-16 00:00:00', '2023-09-16 00:00:00', '2023-10-16 12:00:00', '2023-11-16 00:00:00', '2024-09-16 00:00:00', '2024-10-16 12:00:00', '2024-11-16 00:00:00', '2025-09-16 00:00:00', '2025-10-16 12:00:00', '2025-11-16 00:00:00', '2026-09-16 00:00:00', '2026-10-16 12:00:00', '2026-11-16 00:00:00', '2027-09-16 00:00:00', '2027-10-16 12:00:00', '2027-11-16 00:00:00', '2028-09-16 00:00:00', '2028-10-16 12:00:00', '2028-11-16 00:00:00', '2029-09-16 00:00:00', '2029-10-16 12:00:00', '2029-11-16 00:00:00', '2030-09-16 00:00:00', '2030-10-16 12:00:00', '2030-11-16 00:00:00', '2031-09-16 00:00:00', '2031-10-16 12:00:00', '2031-11-16 00:00:00', '2032-09-16 00:00:00', '2032-10-16 12:00:00', '2032-11-16 00:00:00', '2033-09-16 00:00:00', '2033-10-16 12:00:00', '2033-11-16 00:00:00', '2034-09-16 00:00:00', '2034-10-16 12:00:00', '2034-11-16 00:00:00', '2035-09-16 00:00:00', '2035-10-16 12:00:00', '2035-11-16 00:00:00', '2036-09-16 00:00:00', '2036-10-16 12:00:00', '2036-11-16 00:00:00', '2037-09-16 00:00:00', '2037-10-16 12:00:00', '2037-11-16 00:00:00', '2038-09-16 00:00:00', '2038-10-16 12:00:00', '2038-11-16 00:00:00', '2039-09-16 00:00:00', '2039-10-16 12:00:00', '2039-11-16 00:00:00', '2040-09-16 00:00:00', '2040-10-16 12:00:00', '2040-11-16 00:00:00', '2041-09-16 00:00:00', '2041-10-16 12:00:00', '2041-11-16 00:00:00', '2042-09-16 00:00:00', '2042-10-16 12:00:00', '2042-11-16 00:00:00', '2043-09-16 00:00:00', '2043-10-16 12:00:00', '2043-11-16 00:00:00', '2044-09-16 00:00:00', '2044-10-16 12:00:00', '2044-11-16 00:00:00', '2045-09-16 00:00:00', '2045-10-16 12:00:00', '2045-11-16 00:00:00', '2046-09-16 00:00:00', '2046-10-16 12:00:00', '2046-11-16 00:00:00', '2047-09-16 00:00:00', '2047-10-16 12:00:00', '2047-11-16 00:00:00', '2048-09-16 00:00:00', '2048-10-16 12:00:00', '2048-11-16 00:00:00', '2049-09-16 00:00:00', '2049-10-16 12:00:00', '2049-11-16 00:00:00', '2050-09-16 00:00:00', '2050-10-16 12:00:00', '2050-11-16 00:00:00', '2051-09-16 00:00:00', '2051-10-16 12:00:00', '2051-11-16 00:00:00', '2052-09-16 00:00:00', '2052-10-16 12:00:00', '2052-11-16 00:00:00', '2053-09-16 00:00:00', '2053-10-16 12:00:00', '2053-11-16 00:00:00', '2054-09-16 00:00:00', '2054-10-16 12:00:00', '2054-11-16 00:00:00', '2055-09-16 00:00:00', '2055-10-16 12:00:00', '2055-11-16 00:00:00', '2056-09-16 00:00:00', '2056-10-16 12:00:00', '2056-11-16 00:00:00', '2057-09-16 00:00:00', '2057-10-16 12:00:00', '2057-11-16 00:00:00', '2058-09-16 00:00:00', '2058-10-16 12:00:00', '2058-11-16 00:00:00', '2059-09-16 00:00:00', '2059-10-16 12:00:00', '2059-11-16 00:00:00', '2060-09-16 00:00:00', '2060-10-16 12:00:00', '2060-11-16 00:00:00', '2061-09-16 00:00:00', '2061-10-16 12:00:00', '2061-11-16 00:00:00', '2062-09-16 00:00:00', '2062-10-16 12:00:00', '2062-11-16 00:00:00', '2063-09-16 00:00:00', '2063-10-16 12:00:00', '2063-11-16 00:00:00', '2064-09-16 00:00:00', '2064-10-16 12:00:00', '2064-11-16 00:00:00', '2065-09-16 00:00:00', '2065-10-16 12:00:00', '2065-11-16 00:00:00', '2066-09-16 00:00:00', '2066-10-16 12:00:00', '2066-11-16 00:00:00', '2067-09-16 00:00:00', '2067-10-16 12:00:00', '2067-11-16 00:00:00', '2068-09-16 00:00:00', '2068-10-16 12:00:00', '2068-11-16 00:00:00', '2069-09-16 00:00:00', '2069-10-16 12:00:00', '2069-11-16 00:00:00', '2070-09-16 00:00:00', '2070-10-16 12:00:00', '2070-11-16 00:00:00', '2071-09-16 00:00:00', '2071-10-16 12:00:00', '2071-11-16 00:00:00', '2072-09-16 00:00:00', '2072-10-16 12:00:00', '2072-11-16 00:00:00', '2073-09-16 00:00:00', '2073-10-16 12:00:00', '2073-11-16 00:00:00', '2074-09-16 00:00:00', '2074-10-16 12:00:00', '2074-11-16 00:00:00', '2075-09-16 00:00:00', '2075-10-16 12:00:00', '2075-11-16 00:00:00', '2076-09-16 00:00:00', '2076-10-16 12:00:00', '2076-11-16 00:00:00', '2077-09-16 00:00:00', '2077-10-16 12:00:00', '2077-11-16 00:00:00', '2078-09-16 00:00:00', '2078-10-16 12:00:00', '2078-11-16 00:00:00', '2079-09-16 00:00:00', '2079-10-16 12:00:00', '2079-11-16 00:00:00', '2080-09-16 00:00:00', '2080-10-16 12:00:00', '2080-11-16 00:00:00', '2081-09-16 00:00:00', '2081-10-16 12:00:00', '2081-11-16 00:00:00', '2082-09-16 00:00:00', '2082-10-16 12:00:00', '2082-11-16 00:00:00', '2083-09-16 00:00:00', '2083-10-16 12:00:00', '2083-11-16 00:00:00', '2084-09-16 00:00:00', '2084-10-16 12:00:00', '2084-11-16 00:00:00', '2085-09-16 00:00:00', '2085-10-16 12:00:00', '2085-11-16 00:00:00', '2086-09-16 00:00:00', '2086-10-16 12:00:00', '2086-11-16 00:00:00', '2087-09-16 00:00:00', '2087-10-16 12:00:00', '2087-11-16 00:00:00', '2088-09-16 00:00:00', '2088-10-16 12:00:00', '2088-11-16 00:00:00', '2089-09-16 00:00:00', '2089-10-16 12:00:00', '2089-11-16 00:00:00', '2090-09-16 00:00:00', '2090-10-16 12:00:00', '2090-11-16 00:00:00', '2091-09-16 00:00:00', '2091-10-16 12:00:00', '2091-11-16 00:00:00', '2092-09-16 00:00:00', '2092-10-16 12:00:00', '2092-11-16 00:00:00', '2093-09-16 00:00:00', '2093-10-16 12:00:00', '2093-11-16 00:00:00', '2094-09-16 00:00:00', '2094-10-16 12:00:00', '2094-11-16 00:00:00', '2095-09-16 00:00:00', '2095-10-16 12:00:00', '2095-11-16 00:00:00', '2096-09-16 00:00:00', '2096-10-16 12:00:00', '2096-11-16 00:00:00', '2097-09-16 00:00:00', '2097-10-16 12:00:00', '2097-11-16 00:00:00', '2098-09-16 00:00:00', '2098-10-16 12:00:00', '2098-11-16 00:00:00', '2099-09-16 00:00:00', '2099-10-16 12:00:00', '2099-11-16 00:00:00'], 'y': [365.67962646484375, 346.0793151855469, 337.948486328125, 329.0875244140625, 324.39495849609375, 322.264892578125, 318.7379150390625, 330.5285339355469, 332.8694763183594, 332.62481689453125, 323.270263671875, 333.7188720703125, 337.9796142578125, 330.56011962890625, 324.10614013671875, 332.2137451171875, 321.5126953125, 317.12884521484375, 334.7716979980469, 325.10174560546875, 312.418701171875, 346.1999206542969, 333.0426025390625, 324.8887939453125, 337.77532958984375, 333.488037109375, 339.164794921875, 332.9766845703125, 320.0009460449219, 311.63568115234375, 309.53094482421875, 302.31231689453125, 308.4068603515625, 326.95355224609375, 309.387939453125, 298.0830078125, 314.005126953125, 319.617431640625, 314.14691162109375, 323.99005126953125, 300.84039306640625, 304.0415344238281, 301.97796630859375, 277.7290954589844, 285.91619873046875, 305.3645935058594, 282.5006408691406, 285.95068359375, 286.9250183105469, 275.80438232421875, 277.73822021484375, 287.52685546875, 275.34552001953125, 290.77874755859375, 310.16192626953125, 313.78851318359375, 323.37542724609375, 306.471435546875, 272.3183288574219, 271.5054931640625, 286.2471008300781, 251.84544372558594, 259.0927429199219, 301.53155517578125, 277.6706237792969, 295.74658203125, 279.865966796875, 270.9371032714844, 280.15625, 256.37139892578125, 211.02586364746094, 227.1137237548828, 314.4520568847656, 292.81707763671875, 299.0906982421875, 292.77203369140625, 258.16632080078125, 272.53057861328125, 280.9613037109375, 275.0679626464844, 267.892578125, 316.2608642578125, 284.4984436035156, 281.52581787109375, 271.05511474609375, 249.45079040527344, 278.3589782714844, 272.83477783203125, 221.68052673339844, 226.29429626464844, 277.26727294921875, 254.65167236328125, 261.82598876953125, 209.07394409179688, 187.19403076171875, 209.06813049316406, 199.30828857421875, 154.69320678710938, 168.4615020751953, 216.11944580078125, 163.78268432617188, 181.25921630859375, 201.72344970703125, 172.91456604003906, 216.64056396484375, 213.54833984375, 172.09713745117188, 184.91921997070312, 231.08425903320312, 201.98629760742188, 222.74583435058594, 204.15032958984375, 157.3826141357422, 172.01502990722656, 204.56503295898438, 155.07931518554688, 166.0127410888672, 227.6422882080078, 187.46139526367188, 204.65139770507812, 222.10501098632812, 180.28549194335938, 205.90087890625, 211.42318725585938, 170.01268005371094, 202.3740234375, 220.9741973876953, 179.29592895507812, 189.1097412109375, 195.51596069335938, 151.8114013671875, 188.04209899902344, 234.43191528320312, 191.187255859375, 195.21929931640625, 229.66763305664062, 181.24278259277344, 187.9353790283203, 211.7122802734375, 176.60513305664062, 203.86228942871094, 222.95114135742188, 206.64349365234375, 210.37112426757812, 219.32330322265625, 172.19161987304688, 188.77244567871094, 270.74261474609375, 224.33218383789062, 234.23989868164062, 233.05105590820312, 183.9254150390625, 204.90582275390625, 223.28822326660156, 198.62127685546875, 199.80364990234375, 230.47462463378906, 186.67245483398438, 239.41854858398438, 237.36654663085938, 188.44532775878906, 193.54580688476562, 233.7919158935547, 186.1747589111328, 198.72169494628906, 220.40049743652344, 180.4084930419922, 182.997314453125, 245.7755889892578, 187.22637939453125, 199.3765869140625, 258.98046875, 211.48202514648438, 230.4022979736328, 242.24420166015625, 193.50584411621094, 220.56349182128906, 226.34262084960938, 200.42689514160156, 210.04217529296875, 244.67239379882812, 193.3527069091797, 198.10821533203125, 228.389892578125, 182.2486572265625, 187.8900146484375, 271.7317810058594, 225.82131958007812, 242.65060424804688, 250.28219604492188, 216.58343505859375, 228.24636840820312, 244.0384521484375, 202.89418029785156, 210.76605224609375, 265.0697021484375, 243.6649932861328, 244.40782165527344, 234.81436157226562, 198.82513427734375, 233.833740234375, 235.49331665039062, 188.89712524414062, 206.51776123046875, 251.85009765625, 224.09713745117188, 252.3294219970703, 245.26634216308594, 215.87603759765625, 218.92575073242188, 247.89317321777344, 206.29493713378906, 225.22817993164062, 230.15707397460938, 177.81753540039062, 184.42074584960938, 251.72488403320312, 220.90802001953125, 243.69845581054688, 266.525390625, 238.71543884277344, 240.4351348876953, 249.81634521484375, 199.6676025390625, 212.45358276367188, 273.00152587890625, 254.92520141601562, 262.09967041015625, 272.98944091796875, 249.75372314453125, 259.18377685546875, 277.86810302734375, 263.841796875, 265.04290771484375, 295.59893798828125, 268.6759948730469, 270.73675537109375, 266.40478515625, 235.5479736328125, 254.36973571777344, 282.2143859863281, 256.596435546875, 260.66033935546875, 251.84512329101562, 257.15643310546875, 259.97930908203125, 299.96246337890625, 266.4241943359375, 294.93365478515625, 297.15191650390625, 269.71234130859375, 276.96014404296875, 263.6552429199219, 227.76864624023438, 245.5311279296875, 314.21331787109375, 299.9593505859375, 306.2751770019531, 300.88250732421875, 287.1684265136719, 293.3205871582031, 293.6396179199219, 270.69219970703125, 284.3874206542969, 291.73846435546875, 272.0585021972656, 284.88531494140625, 295.922119140625, 264.05859375, 276.3614807128906, 289.7493896484375, 263.8038330078125, 278.1527099609375, 283.79302978515625, 261.6714172363281, 270.9813537597656, 261.09747314453125, 243.06170654296875, 264.4044189453125, 288.13604736328125, 277.436767578125, 278.3541259765625, 280.0375671386719, 255.5471649169922, 259.98016357421875, 296.27447509765625, 277.73126220703125, 280.82110595703125, 282.7865295410156, 263.0016174316406, 275.06658935546875, 290.5851745605469, 260.81109619140625, 262.361328125, 312.7702331542969, 297.28509521484375, 299.5877990722656, 284.57623291015625, 283.4933166503906, 286.28857421875, 292.01739501953125, 292.58795166015625, 327.40863037109375, 286.7989807128906, 275.954833984375, 278.5018310546875, 307.450439453125, 294.8807067871094, 299.82586669921875, 284.80413818359375, 268.7020263671875, 275.06982421875, 283.9456481933594, 271.4902648925781, 280.1429443359375, 329.25738525390625, 334.0030517578125, 312.0684814453125, 282.804931640625, 268.1392822265625, 267.8450622558594, 307.85455322265625, 288.05523681640625, 314.97064208984375, 305.4913330078125, 297.33154296875, 299.64599609375, 313.9474182128906, 304.20123291015625, 304.6933288574219, 303.546630859375, 279.74090576171875, 302.6227111816406, 292.5414733886719, 279.241943359375, 300.8212890625, 323.9566650390625, 326.1233825683594, 330.11932373046875, 296.361572265625, 270.56005859375, 274.2196044921875, 328.7759704589844, 324.5758361816406, 332.434814453125, 286.6151428222656, 284.0872497558594, 315.8807373046875, 290.605224609375, 295.6073303222656, 303.25360107421875, 314.1800231933594, 293.4572448730469, 305.6630859375, 361.5279541015625, 358.6900329589844, 364.4098815917969, 314.656005859375, 305.97515869140625, 299.84100341796875, 299.3919372558594, 293.24200439453125, 304.13677978515625, 328.1431884765625, 323.1903991699219, 345.6214599609375, 296.21435546875, 277.26763916015625, 286.5982666015625, 323.1173095703125, 315.7867431640625, 314.3919982910156, 323.87890625, 347.09759521484375, 330.760986328125, 312.861572265625, 309.095703125, 319.54864501953125, 324.09954833984375, 312.3740234375, 319.111572265625, 318.549072265625, 331.17681884765625, 325.55670166015625, 321.98883056640625, 309.46319580078125, 316.1719970703125, 315.27459716796875, 295.5268249511719, 292.9322509765625, 332.21014404296875, 317.220947265625, 315.75726318359375, 306.894287109375, 302.6873779296875, 313.90692138671875, 330.88055419921875, 317.0320739746094, 312.12493896484375, 319.86346435546875, 308.1696472167969, 329.1674499511719, 313.86016845703125, 307.48583984375, 331.08135986328125, 319.6427001953125, 317.16204833984375, 311.6834411621094, 318.1702880859375, 299.75958251953125, 298.23419189453125, 332.412353515625, 325.9313659667969, 338.29034423828125, 312.30950927734375, 291.6859130859375, 292.32464599609375, 319.62786865234375, 313.8153076171875, 315.6207275390625]}, {'legalinfo': 'https://o3as.data.kit.edu/policies/terms-of-use.html', 'model': 'CCMI-1_CESM1-CAM4Chem_refC2_r3i1p1', 'plotstyle': {'color': 'darkorange', 'linestyle': 'dashed', 'marker': 'd'}, 'x': ['1960-09-16 00:00:00', '1960-10-16 12:00:00', '1960-11-16 00:00:00', '1961-09-16 00:00:00', '1961-10-16 12:00:00', '1961-11-16 00:00:00', '1962-09-16 00:00:00', '1962-10-16 12:00:00', '1962-11-16 00:00:00', '1963-09-16 00:00:00', '1963-10-16 12:00:00', '1963-11-16 00:00:00', '1964-09-16 00:00:00', '1964-10-16 12:00:00', '1964-11-16 00:00:00', '1965-09-16 00:00:00', '1965-10-16 12:00:00', '1965-11-16 00:00:00', '1966-09-16 00:00:00', '1966-10-16 12:00:00', '1966-11-16 00:00:00', '1967-09-16 00:00:00', '1967-10-16 12:00:00', '1967-11-16 00:00:00', '1968-09-16 00:00:00', '1968-10-16 12:00:00', '1968-11-16 00:00:00', '1969-09-16 00:00:00', '1969-10-16 12:00:00', '1969-11-16 00:00:00', '1970-09-16 00:00:00', '1970-10-16 12:00:00', '1970-11-16 00:00:00', '1971-09-16 00:00:00', '1971-10-16 12:00:00', '1971-11-16 00:00:00', '1972-09-16 00:00:00', '1972-10-16 12:00:00', '1972-11-16 00:00:00', '1973-09-16 00:00:00', '1973-10-16 12:00:00', '1973-11-16 00:00:00', '1974-09-16 00:00:00', '1974-10-16 12:00:00', '1974-11-16 00:00:00', '1975-09-16 00:00:00', '1975-10-16 12:00:00', '1975-11-16 00:00:00', '1976-09-16 00:00:00', '1976-10-16 12:00:00', '1976-11-16 00:00:00', '1977-09-16 00:00:00', '1977-10-16 12:00:00', '1977-11-16 00:00:00', '1978-09-16 00:00:00', '1978-10-16 12:00:00', '1978-11-16 00:00:00', '1979-09-16 00:00:00', '1979-10-16 12:00:00', '1979-11-16 00:00:00', '1980-09-16 00:00:00', '1980-10-16 12:00:00', '1980-11-16 00:00:00', '1981-09-16 00:00:00', '1981-10-16 12:00:00', '1981-11-16 00:00:00', '1982-09-16 00:00:00', '1982-10-16 12:00:00', '1982-11-16 00:00:00', '1983-09-16 00:00:00', '1983-10-16 12:00:00', '1983-11-16 00:00:00', '1984-09-16 00:00:00', '1984-10-16 12:00:00', '1984-11-16 00:00:00', '1985-09-16 00:00:00', '1985-10-16 12:00:00', '1985-11-16 00:00:00', '1986-09-16 00:00:00', '1986-10-16 12:00:00', '1986-11-16 00:00:00', '1987-09-16 00:00:00', '1987-10-16 12:00:00', '1987-11-16 00:00:00', '1988-09-16 00:00:00', '1988-10-16 12:00:00', '1988-11-16 00:00:00', '1989-09-16 00:00:00', '1989-10-16 12:00:00', '1989-11-16 00:00:00', '1990-09-16 00:00:00', '1990-10-16 12:00:00', '1990-11-16 00:00:00', '1991-09-16 00:00:00', '1991-10-16 12:00:00', '1991-11-16 00:00:00', '1992-09-16 00:00:00', '1992-10-16 12:00:00', '1992-11-16 00:00:00', '1993-09-16 00:00:00', '1993-10-16 12:00:00', '1993-11-16 00:00:00', '1994-09-16 00:00:00', '1994-10-16 12:00:00', '1994-11-16 00:00:00', '1995-09-16 00:00:00', '1995-10-16 12:00:00', '1995-11-16 00:00:00', '1996-09-16 00:00:00', '1996-10-16 12:00:00', '1996-11-16 00:00:00', '1997-09-16 00:00:00', '1997-10-16 12:00:00', '1997-11-16 00:00:00', '1998-09-16 00:00:00', '1998-10-16 12:00:00', '1998-11-16 00:00:00', '1999-09-16 00:00:00', '1999-10-16 12:00:00', '1999-11-16 00:00:00', '2000-09-16 00:00:00', '2000-10-16 12:00:00', '2000-11-16 00:00:00', '2001-09-16 00:00:00', '2001-10-16 12:00:00', '2001-11-16 00:00:00', '2002-09-16 00:00:00', '2002-10-16 12:00:00', '2002-11-16 00:00:00', '2003-09-16 00:00:00', '2003-10-16 12:00:00', '2003-11-16 00:00:00', '2004-09-16 00:00:00', '2004-10-16 12:00:00', '2004-11-16 00:00:00', '2005-09-16 00:00:00', '2005-10-16 12:00:00', '2005-11-16 00:00:00', '2006-09-16 00:00:00', '2006-10-16 12:00:00', '2006-11-16 00:00:00', '2007-09-16 00:00:00', '2007-10-16 12:00:00', '2007-11-16 00:00:00', '2008-09-16 00:00:00', '2008-10-16 12:00:00', '2008-11-16 00:00:00', '2009-09-16 00:00:00', '2009-10-16 12:00:00', '2009-11-16 00:00:00', '2010-09-16 00:00:00', '2010-10-16 12:00:00', '2010-11-16 00:00:00', '2011-09-16 00:00:00', '2011-10-16 12:00:00', '2011-11-16 00:00:00', '2012-09-16 00:00:00', '2012-10-16 12:00:00', '2012-11-16 00:00:00', '2013-09-16 00:00:00', '2013-10-16 12:00:00', '2013-11-16 00:00:00', '2014-09-16 00:00:00', '2014-10-16 12:00:00', '2014-11-16 00:00:00', '2015-09-16 00:00:00', '2015-10-16 12:00:00', '2015-11-16 00:00:00', '2016-09-16 00:00:00', '2016-10-16 12:00:00', '2016-11-16 00:00:00', '2017-09-16 00:00:00', '2017-10-16 12:00:00', '2017-11-16 00:00:00', '2018-09-16 00:00:00', '2018-10-16 12:00:00', '2018-11-16 00:00:00', '2019-09-16 00:00:00', '2019-10-16 12:00:00', '2019-11-16 00:00:00', '2020-09-16 00:00:00', '2020-10-16 12:00:00', '2020-11-16 00:00:00', '2021-09-16 00:00:00', '2021-10-16 12:00:00', '2021-11-16 00:00:00', '2022-09-16 00:00:00', '2022-10-16 12:00:00', '2022-11-16 00:00:00', '2023-09-16 00:00:00', '2023-10-16 12:00:00', '2023-11-16 00:00:00', '2024-09-16 00:00:00', '2024-10-16 12:00:00', '2024-11-16 00:00:00', '2025-09-16 00:00:00', '2025-10-16 12:00:00', '2025-11-16 00:00:00', '2026-09-16 00:00:00', '2026-10-16 12:00:00', '2026-11-16 00:00:00', '2027-09-16 00:00:00', '2027-10-16 12:00:00', '2027-11-16 00:00:00', '2028-09-16 00:00:00', '2028-10-16 12:00:00', '2028-11-16 00:00:00', '2029-09-16 00:00:00', '2029-10-16 12:00:00', '2029-11-16 00:00:00', '2030-09-16 00:00:00', '2030-10-16 12:00:00', '2030-11-16 00:00:00', '2031-09-16 00:00:00', '2031-10-16 12:00:00', '2031-11-16 00:00:00', '2032-09-16 00:00:00', '2032-10-16 12:00:00', '2032-11-16 00:00:00', '2033-09-16 00:00:00', '2033-10-16 12:00:00', '2033-11-16 00:00:00', '2034-09-16 00:00:00', '2034-10-16 12:00:00', '2034-11-16 00:00:00', '2035-09-16 00:00:00', '2035-10-16 12:00:00', '2035-11-16 00:00:00', '2036-09-16 00:00:00', '2036-10-16 12:00:00', '2036-11-16 00:00:00', '2037-09-16 00:00:00', '2037-10-16 12:00:00', '2037-11-16 00:00:00', '2038-09-16 00:00:00', '2038-10-16 12:00:00', '2038-11-16 00:00:00', '2039-09-16 00:00:00', '2039-10-16 12:00:00', '2039-11-16 00:00:00', '2040-09-16 00:00:00', '2040-10-16 12:00:00', '2040-11-16 00:00:00', '2041-09-16 00:00:00', '2041-10-16 12:00:00', '2041-11-16 00:00:00', '2042-09-16 00:00:00', '2042-10-16 12:00:00', '2042-11-16 00:00:00', '2043-09-16 00:00:00', '2043-10-16 12:00:00', '2043-11-16 00:00:00', '2044-09-16 00:00:00', '2044-10-16 12:00:00', '2044-11-16 00:00:00', '2045-09-16 00:00:00', '2045-10-16 12:00:00', '2045-11-16 00:00:00', '2046-09-16 00:00:00', '2046-10-16 12:00:00', '2046-11-16 00:00:00', '2047-09-16 00:00:00', '2047-10-16 12:00:00', '2047-11-16 00:00:00', '2048-09-16 00:00:00', '2048-10-16 12:00:00', '2048-11-16 00:00:00', '2049-09-16 00:00:00', '2049-10-16 12:00:00', '2049-11-16 00:00:00', '2050-09-16 00:00:00', '2050-10-16 12:00:00', '2050-11-16 00:00:00', '2051-09-16 00:00:00', '2051-10-16 12:00:00', '2051-11-16 00:00:00', '2052-09-16 00:00:00', '2052-10-16 12:00:00', '2052-11-16 00:00:00', '2053-09-16 00:00:00', '2053-10-16 12:00:00', '2053-11-16 00:00:00', '2054-09-16 00:00:00', '2054-10-16 12:00:00', '2054-11-16 00:00:00', '2055-09-16 00:00:00', '2055-10-16 12:00:00', '2055-11-16 00:00:00', '2056-09-16 00:00:00', '2056-10-16 12:00:00', '2056-11-16 00:00:00', '2057-09-16 00:00:00', '2057-10-16 12:00:00', '2057-11-16 00:00:00', '2058-09-16 00:00:00', '2058-10-16 12:00:00', '2058-11-16 00:00:00', '2059-09-16 00:00:00', '2059-10-16 12:00:00', '2059-11-16 00:00:00', '2060-09-16 00:00:00', '2060-10-16 12:00:00', '2060-11-16 00:00:00', '2061-09-16 00:00:00', '2061-10-16 12:00:00', '2061-11-16 00:00:00', '2062-09-16 00:00:00', '2062-10-16 12:00:00', '2062-11-16 00:00:00', '2063-09-16 00:00:00', '2063-10-16 12:00:00', '2063-11-16 00:00:00', '2064-09-16 00:00:00', '2064-10-16 12:00:00', '2064-11-16 00:00:00', '2065-09-16 00:00:00', '2065-10-16 12:00:00', '2065-11-16 00:00:00', '2066-09-16 00:00:00', '2066-10-16 12:00:00', '2066-11-16 00:00:00', '2067-09-16 00:00:00', '2067-10-16 12:00:00', '2067-11-16 00:00:00', '2068-09-16 00:00:00', '2068-10-16 12:00:00', '2068-11-16 00:00:00', '2069-09-16 00:00:00', '2069-10-16 12:00:00', '2069-11-16 00:00:00', '2070-09-16 00:00:00', '2070-10-16 12:00:00', '2070-11-16 00:00:00', '2071-09-16 00:00:00', '2071-10-16 12:00:00', '2071-11-16 00:00:00', '2072-09-16 00:00:00', '2072-10-16 12:00:00', '2072-11-16 00:00:00', '2073-09-16 00:00:00', '2073-10-16 12:00:00', '2073-11-16 00:00:00', '2074-09-16 00:00:00', '2074-10-16 12:00:00', '2074-11-16 00:00:00', '2075-09-16 00:00:00', '2075-10-16 12:00:00', '2075-11-16 00:00:00', '2076-09-16 00:00:00', '2076-10-16 12:00:00', '2076-11-16 00:00:00', '2077-09-16 00:00:00', '2077-10-16 12:00:00', '2077-11-16 00:00:00', '2078-09-16 00:00:00', '2078-10-16 12:00:00', '2078-11-16 00:00:00', '2079-09-16 00:00:00', '2079-10-16 12:00:00', '2079-11-16 00:00:00', '2080-09-16 00:00:00', '2080-10-16 12:00:00', '2080-11-16 00:00:00', '2081-09-16 00:00:00', '2081-10-16 12:00:00', '2081-11-16 00:00:00', '2082-09-16 00:00:00', '2082-10-16 12:00:00', '2082-11-16 00:00:00', '2083-09-16 00:00:00', '2083-10-16 12:00:00', '2083-11-16 00:00:00', '2084-09-16 00:00:00', '2084-10-16 12:00:00', '2084-11-16 00:00:00', '2085-09-16 00:00:00', '2085-10-16 12:00:00', '2085-11-16 00:00:00', '2086-09-16 00:00:00', '2086-10-16 12:00:00', '2086-11-16 00:00:00', '2087-09-16 00:00:00', '2087-10-16 12:00:00', '2087-11-16 00:00:00', '2088-09-16 00:00:00', '2088-10-16 12:00:00', '2088-11-16 00:00:00', '2089-09-16 00:00:00', '2089-10-16 12:00:00', '2089-11-16 00:00:00', '2090-09-16 00:00:00', '2090-10-16 12:00:00', '2090-11-16 00:00:00', '2091-09-16 00:00:00', '2091-10-16 12:00:00', '2091-11-16 00:00:00', '2092-09-16 00:00:00', '2092-10-16 12:00:00', '2092-11-16 00:00:00', '2093-09-16 00:00:00', '2093-10-16 12:00:00', '2093-11-16 00:00:00', '2094-09-16 00:00:00', '2094-10-16 12:00:00', '2094-11-16 00:00:00', '2095-09-16 00:00:00', '2095-10-16 12:00:00', '2095-11-16 00:00:00', '2096-09-16 00:00:00', '2096-10-16 12:00:00', '2096-11-16 00:00:00', '2097-09-16 00:00:00', '2097-10-16 12:00:00', '2097-11-16 00:00:00', '2098-09-16 00:00:00', '2098-10-16 12:00:00', '2098-11-16 00:00:00', '2099-09-16 00:00:00', '2099-10-16 12:00:00', '2099-11-16 00:00:00'], 'y': [384.22412109375, 375.72918701171875, 379.711181640625, 348.16729736328125, 335.81781005859375, 326.1171875, 336.8357238769531, 339.35809326171875, 345.55572509765625, 312.046630859375, 299.92559814453125, 297.560791015625, 340.07330322265625, 332.97918701171875, 314.9057922363281, 340.53643798828125, 329.3346252441406, 320.0054016113281, 340.18267822265625, 335.2765808105469, 340.8718566894531, 346.80584716796875, 340.73321533203125, 341.2271423339844, 330.7149658203125, 319.2563171386719, 362.2423400878906, 326.3066101074219, 322.77886962890625, 322.49700927734375, 338.7818298339844, 321.96893310546875, 325.8817443847656, 325.847412109375, 322.1021728515625, 316.7463684082031, 332.842041015625, 335.1965026855469, 371.0523681640625, 325.72100830078125, 304.7503356933594, 310.2048034667969, 315.69659423828125, 302.3489685058594, 328.8606872558594, 319.1392517089844, 300.3843994140625, 313.5488586425781, 297.31304931640625, 289.8427734375, 288.4268798828125, 297.1722412109375, 277.67852783203125, 287.2685546875, 290.42950439453125, 281.96484375, 288.94671630859375, 293.52899169921875, 302.2109069824219, 310.8515625, 293.5171203613281, 266.0408630371094, 285.626708984375, 281.8075866699219, 273.81561279296875, 274.910888671875, 301.428955078125, 269.2567443847656, 274.1527099609375, 250.22360229492188, 202.693115234375, 216.374267578125, 263.7291259765625, 226.73779296875, 233.87435913085938, 263.52142333984375, 234.3123321533203, 241.45034790039062, 245.73159790039062, 222.0733642578125, 244.7544403076172, 232.29763793945312, 193.4827117919922, 206.18585205078125, 278.8323059082031, 236.29672241210938, 255.73239135742188, 247.70001220703125, 234.7525177001953, 246.92904663085938, 241.0918731689453, 197.22894287109375, 214.906494140625, 257.62457275390625, 212.48312377929688, 233.83522033691406, 206.71038818359375, 178.87744140625, 201.863525390625, 244.32937622070312, 192.06594848632812, 204.20640563964844, 207.7671356201172, 164.15455627441406, 184.78955078125, 220.58370971679688, 172.03533935546875, 207.00628662109375, 229.44943237304688, 183.57916259765625, 194.19110107421875, 217.07760620117188, 185.55215454101562, 207.42477416992188, 203.86874389648438, 165.36537170410156, 190.385986328125, 210.79827880859375, 161.45603942871094, 185.18226623535156, 195.45849609375, 148.44528198242188, 183.57562255859375, 195.21258544921875, 146.91580200195312, 174.2964630126953, 239.3018035888672, 201.22047424316406, 209.996337890625, 249.05072021484375, 206.87261962890625, 220.80975341796875, 238.3411865234375, 185.25897216796875, 197.9100341796875, 265.39447021484375, 225.5625, 225.65834045410156, 245.3487548828125, 198.43649291992188, 206.5515899658203, 234.15594482421875, 194.5332489013672, 216.76747131347656, 234.65750122070312, 193.34771728515625, 215.70098876953125, 264.41363525390625, 259.07330322265625, 259.9197998046875, 271.617431640625, 231.2026824951172, 224.75108337402344, 231.86483764648438, 228.8740234375, 232.27349853515625, 244.2228546142578, 189.39744567871094, 195.5333251953125, 242.82920837402344, 196.91653442382812, 202.78282165527344, 208.58436584472656, 193.71751403808594, 203.72128295898438, 242.7593231201172, 187.69931030273438, 198.6043243408203, 237.52137756347656, 209.77392578125, 233.81903076171875, 235.55194091796875, 217.07162475585938, 220.62423706054688, 277.12603759765625, 228.51832580566406, 250.54153442382812, 246.98077392578125, 196.1932373046875, 210.96316528320312, 274.16412353515625, 277.0319519042969, 314.4810791015625, 248.59652709960938, 226.02557373046875, 222.3538055419922, 278.76007080078125, 241.23895263671875, 237.24461364746094, 260.56256103515625, 236.10745239257812, 240.8690948486328, 261.1882629394531, 208.10629272460938, 221.6674041748047, 266.41656494140625, 265.74639892578125, 277.31402587890625, 247.28089904785156, 207.30691528320312, 218.78341674804688, 248.18057250976562, 202.94580078125, 222.29776000976562, 253.138427734375, 227.9655303955078, 242.359619140625, 266.467041015625, 230.06317138671875, 247.09384155273438, 289.1470947265625, 250.64002990722656, 252.35415649414062, 268.06231689453125, 229.62432861328125, 263.4825439453125, 255.05584716796875, 217.25570678710938, 247.8614501953125, 274.548095703125, 237.36474609375, 245.7682647705078, 265.93511962890625, 246.65061950683594, 257.6488037109375, 258.9908142089844, 225.51148986816406, 253.98001098632812, 259.5974426269531, 222.59664916992188, 243.30899047851562, 259.6005859375, 219.76638793945312, 240.21066284179688, 290.1036376953125, 264.87591552734375, 277.432861328125, 264.7463684082031, 255.60980224609375, 267.3812255859375, 254.6274871826172, 229.95130920410156, 247.56341552734375, 292.78045654296875, 259.828369140625, 295.7215576171875, 261.49444580078125, 235.30831909179688, 263.661376953125, 263.8902893066406, 229.92745971679688, 263.27508544921875, 271.1767578125, 249.62234497070312, 256.132568359375, 284.16094970703125, 248.55810546875, 253.35894775390625, 278.27056884765625, 271.25372314453125, 279.6245422363281, 262.9705810546875, 237.64846801757812, 245.55279541015625, 250.6307373046875, 219.39273071289062, 235.89340209960938, 260.085693359375, 250.0213623046875, 267.802490234375, 290.5187072753906, 272.3798828125, 272.951416015625, 289.266357421875, 280.63580322265625, 301.0142517089844, 282.3924255371094, 276.78375244140625, 275.13604736328125, 288.7718811035156, 268.04034423828125, 273.9850158691406, 282.4685974121094, 286.39654541015625, 290.03228759765625, 304.7532958984375, 281.7134094238281, 289.11700439453125, 297.8353271484375, 278.3941650390625, 310.7015380859375, 276.2542724609375, 247.15347290039062, 278.08673095703125, 279.3991394042969, 239.63592529296875, 262.5395812988281, 298.07696533203125, 273.33221435546875, 270.38671875, 279.50750732421875, 273.23370361328125, 271.7047424316406, 306.75433349609375, 287.339111328125, 290.83734130859375, 293.72845458984375, 292.017578125, 302.4246826171875, 303.15460205078125, 290.48388671875, 293.85174560546875, 282.146728515625, 274.2728576660156, 277.59185791015625, 316.8066711425781, 312.50872802734375, 320.4421081542969, 313.94354248046875, 286.12481689453125, 288.90057373046875, 291.02789306640625, 265.9937744140625, 289.50372314453125, 310.5118408203125, 303.2950439453125, 304.8021240234375, 316.8968505859375, 308.9901428222656, 309.3736572265625, 301.77777099609375, 298.3074951171875, 319.9778137207031, 300.5914611816406, 278.7500305175781, 285.71014404296875, 320.0155334472656, 297.92315673828125, 303.7280578613281, 299.43914794921875, 306.5174865722656, 322.1292724609375, 309.3476257324219, 286.9554138183594, 289.4061279296875, 300.9517822265625, 272.574462890625, 295.5121765136719, 317.9032287597656, 309.6032409667969, 316.0960693359375, 315.4381103515625, 304.0845031738281, 296.6588134765625, 346.25531005859375, 319.4372863769531, 315.75201416015625, 324.4049072265625, 316.59808349609375, 333.6114501953125, 323.2805480957031, 311.0367736816406, 310.51123046875, 355.97705078125, 333.95623779296875, 328.4205322265625, 343.9536437988281, 320.55902099609375, 311.47552490234375, 300.8197021484375, 304.09075927734375, 304.39447021484375, 319.7082824707031, 329.664794921875, 325.4934997558594, 293.6533508300781, 275.99627685546875, 290.1572265625, 314.8209228515625, 301.4293518066406, 296.9135437011719, 299.95831298828125, 277.59088134765625, 284.00738525390625, 315.754638671875, 324.0767822265625, 338.1650085449219, 298.6648254394531, 280.3318176269531, 285.9096374511719, 343.83740234375, 351.5053405761719, 360.0870361328125, 316.98895263671875, 299.349365234375, 314.5627136230469, 315.70379638671875, 312.3668212890625, 320.3585205078125, 320.9887390136719, 307.60028076171875, 304.41802978515625, 321.58465576171875, 303.06671142578125, 309.8219299316406, 286.6208801269531, 291.19873046875, 307.7569885253906, 313.6889343261719, 304.78021240234375, 319.45208740234375, 317.58636474609375, 309.6918029785156, 322.0606384277344, 314.918701171875, 307.1820983886719, 312.07391357421875, 319.29852294921875, 305.7378234863281, 311.0923156738281]}]
The received JSON data are converted into pandas Dataframe for an easier data manipulation
[8]:
tco3_skim_pd = pd.json_normalize(tco3_skim_data)
if debug: print(tco3_skim_pd.head())
Let’s plot the retrieved skimmed data:
[9]:
# set default linewidth:
linewidth_default = 2
if not 'plotstyle.linewidth' in tco3_skim_pd.columns:
tco3_skim_pd['plotstyle.linewidth'] = linewidth_default
# plot every model
for index, c in tco3_skim_pd.iterrows():
plt.plot(pd.to_datetime(c['x']), c['y'], label=c['model'],
color=c['plotstyle.color'], linestyle=c['plotstyle.linestyle'],
marker=c['plotstyle.marker'], linewidth=c['plotstyle.linewidth'])
# show the legend
ax = plt.gca() # get axis instance
ax.legend(bbox_to_anchor=(1.0, 1.0))
# put titels for axes
plt.xlabel('Year')
plt.ylabel('tco3_zm (DU)')
[9]:
Text(0, 0.5, 'tco3_zm (DU)')

Analyse the skimmed data and plot tco3_zm
To analyse the data and produce tco3_zm plot, we do:
Define a help function for boxcar smoothing
Transform the Pandas Dataframe for easier data manipulation
Average skimmed data over one year
Apply boxcar smoothing, keep the reference year as-it-is, i.e. without smoothing
For the reference year, find the TCO3 value in the measured data (reference value)
Find biases in the simulation data in relation to the reference year
Shift all simulations to the reference value at the reference year
Plot shifted models together with the reference value.
Define a help function for boxcar smoothing
[10]:
def boxcar(data, bwin):
"""Function to apply boxcar, following
https://scipy-cookbook.readthedocs.io/items/SignalSmooth.html
N.B. 'valid' replaced with 'same' !
:param data: input data
:param bwin: width of the boxcar window
:return boxcar_values: smoothed values
"""
debug_boxcar = False
boxcar = np.ones(bwin)
if debug_boxcar: print("signal(raw) (len={}): {}".format(len(data),data))
# mirror start and end of the original signal:
sgnl = np.r_[data[bwin-1:0:-1],data,data[-2:-bwin-1:-1]]
boxcar_values = signal.convolve(sgnl,
boxcar,
mode='same')/bwin
if debug_boxcar: print("signal (len={}): {}".format(len(sgnl),sgnl))
if debug_boxcar: print("signal+boxcar (len={}): {}".format(len(boxcar_values),
boxcar_values))
return boxcar_values[bwin-1:-(bwin-1)]
Transform the DataFrame
[11]:
tco3_zm_pd = pd.DataFrame({'time': pd.to_datetime(tco3_skim_pd.loc[0,'x']),
tco3_skim_pd.loc[0,'model']: tco3_skim_pd.loc[0,'y']})
for i in range(1, len(tco3_skim_pd)):
curve = pd.DataFrame({'time': pd.to_datetime(tco3_skim_pd.loc[i,'x']),
tco3_skim_pd.loc[i,'model']: tco3_skim_pd.loc[i,'y']})
tco3_zm_pd = tco3_zm_pd.merge(curve, how='outer', on=['time'], sort=True)
tco3_zm_pd = tco3_zm_pd.set_index('time')
tco3_zm_pd = tco3_zm_pd.replace({0: np.nan})
# print(tco3_zm_pd.head()) # uncomment if you like to see the created DataFrame
Average data over one year
[12]:
# Average model data per year, index -> year
tco3_zm_year_pd = tco3_zm_pd.groupby([tco3_zm_pd.index.year]).mean()
# we may use pandas.plot() immediately
# Optionally, we can set matplotlib colors to the default values specified by the API:
import matplotlib as mpl
from cycler import cycler
mpl.rcParams['axes.prop_cycle'] = cycler(color=tco3_skim_pd['plotstyle.color'].values)
tco3_zm_year_pd.plot(legend=False)
[12]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f49e7fde350>

Apply boxcar smoothing
we use 10-point boxcar smoothing, when applied after averaging per year, it is an equivalent of 10-years
[13]:
boxcar_window = 10 # boxcar window for smoothing
# different models may have data point until a different year
# if last years have NaNs fill them with "before NaN values"
last_year = tco3_zm_year_pd.index.values[-1]
tco3_zm_year_pd[tco3_zm_year_pd.index > (last_year - boxcar_window)] = tco3_zm_year_pd[tco3_zm_year_pd.index > (last_year - boxcar_window)].fillna(method='ffill')
# apply boxcar smoothing
tco3_zm_smooth_pd = tco3_zm_year_pd.apply(boxcar, args = [boxcar_window], axis = 0, result_type = 'broadcast')
# inject the reference measurement (refMeasurement) as-it-is, i.e. **without** smoothing
if refMeasurement in tco3_zm_smooth_pd.columns:
tco3_zm_smooth_pd[refMeasurement] = tco3_zm_year_pd[refMeasurement]
# plot smoothed data
tco3_zm_smooth_pd.plot(legend=False)
[13]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f49e8574990>

All models are quite apart. We can choose a reference value, i.e. TCO3 value for the reference year (see “refYear” in the “Global Variables”) and the reference measurement (“refMeasurement”) and shift all models to that value.
Find TCO3 value for the reference measurement (refMeasurement) and reference year (refYear)
[14]:
refValue = tco3_zm_year_pd[refMeasurement][tco3_zm_year_pd.index == refYear].interpolate(method='linear').values[0]
print(refValue)
310.925
Shift models to the reference value (refValue)
[15]:
# Calculate shift values for every model (refValue - modelValue for refYear)
tco3_zm_shift = refValue - tco3_zm_smooth_pd[tco3_zm_smooth_pd.index == refYear]
# Shift models by the shift values
tco3_zm_refYear = tco3_zm_smooth_pd + tco3_zm_shift.values
tco3_zm_refYear.plot(legend=False)
[15]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f49e7dfc990>

[16]:
# Create an empty DataFrame for statistics (also to have better control how to plot it later)
tco3_zm_refYear_stat = pd.DataFrame(index=tco3_zm_refYear.index, columns=['Mean', 'Std', 'Median'])
# Fill 'Mean', 'Std' values, skip refMeasurement from the 'Mean' and 'Std' calculations
tco3_zm_refYear_stat["Mean"] = tco3_zm_refYear.drop(refMeasurement, axis=1, inplace=False).mean(axis=1, skipna=True)
tco3_zm_refYear_stat["Std"] = tco3_zm_refYear.drop(refMeasurement, axis=1, inplace=False).std(axis=1, skipna=True)
tco3_zm_refYear_stat["Mean-Std"] = tco3_zm_refYear_stat["Mean"] - tco3_zm_refYear_stat["Std"]
tco3_zm_refYear_stat["Mean+Std"] = tco3_zm_refYear_stat["Mean"] + tco3_zm_refYear_stat["Std"]
tco3_zm_refYear_stat["Median"] = tco3_zm_refYear.median(axis=1, skipna=True)
Finally, plot tco3_zm analysed data
[17]:
# one can use pandas.plot() but if we want to use default styles delivered by the API, we better plot line-by-line
# for the tco3_zm plot we do not use "marker" except for the reference measurement
for col in tco3_zm_refYear.columns:
style = tco3_skim_pd[tco3_skim_pd['model']==col]
col_marker = '' if col != refMeasurement else style['plotstyle.marker'].values[0]
tco3_zm_refYear[col].plot(color=style['plotstyle.color'].values[0],
linestyle=style['plotstyle.linestyle'].values[0],
marker=col_marker,
linewidth=style['plotstyle.linewidth'].values[0])
# draw horizonthal line for the reference value (refValue)
xmin, xmax = plt.xlim()
plt.hlines(refValue, xmin, xmax,
colors='k', # 'dimgray'..?
linestyles='dashed',
label='Reference value',
zorder=256)
# plot Mean, Median, and fill the area between Mean +/- Std
tco3_zm_refYear_stat['Mean'].plot(linewidth=5, color='g')
plt.fill_between(tco3_zm_refYear_stat.index,
tco3_zm_refYear_stat['Mean+Std'],
tco3_zm_refYear_stat['Mean-Std'],
color='g', alpha=0.2);
tco3_zm_refYear_stat['Median'].plot(linewidth=5, linestyle='dotted', color='b') # dashed
# tune the plot
ax = plt.gca() # get axis instance
handles, labels = ax.get_legend_handles_labels()
plt.legend(handles=handles,
loc='center left',
bbox_to_anchor=(1.0, 0.5))
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
ax.set_xlabel('Year', fontsize='x-large')
ax.set_ylabel('tco3_zm (DU)', fontsize='x-large')
[17]:
Text(0, 0.5, 'tco3_zm (DU)')

Further analyse the data and plot tco3_return
Define a help function to find return year for every model
[18]:
def get_tco3_return(data):
"""Function to find return_years for the set of models
:param data: input climate data after smoothing and shifting to the reference point
:return tco3_return_year_pd: DataFrame of models with return years
"""
refMargin = 5 # 'margin' years after refYear to avoid return years immediately after refYear
# select data later than (refYear+refMargin) year and with values above refValue. Drop duplicates to remove raws with all False or True
tco3_return = (data[data.index>(refYear+refMargin)]>refValue).drop_duplicates()
# every model (column) with at least one return_year (True) add to the dictionary { 'model': return_year}
tco3_return_year = { col: [tco3_return[col][tco3_return[col]==True].index[0]] for col in tco3_return.columns if len(tco3_return[col][tco3_return[col]==True].index)>0 }
# convert tco3_return_year dictionary to the pandas DataFrame
tco3_return_year_pd = pd.DataFrame.from_dict(tco3_return_year)
tco3_return_year_pd.index = ['user_region']
return tco3_return_year_pd
Find return years for specified models
[19]:
# find return years for the models, exclude the Reference Measurement (refMeasurement)
tco3_return_models = get_tco3_return(tco3_zm_refYear.drop(refMeasurement, axis=1))
if debug: print(tco3_return_models)
# find return years for statistical data points ('Mean', 'Mean-Std', 'Mean+Std')
tco3_return_stat = get_tco3_return(tco3_zm_refYear_stat)
if debug: print(tco3_return_stat)
Finally, plot the return years, tco3_return
[20]:
xlabel = F"User region ({kwargs_tco3_zm['lat_min']}, {kwargs_tco3_zm['lat_max']})"
tco3_return_models.index = [xlabel]
# to use default styles delivered by the API, we plot model-by-model
for col in tco3_return_models.columns:
style = tco3_skim_pd[tco3_skim_pd['model']==col]
tco3_return_models[col].plot(color=style['plotstyle.color'].values[0],
linestyle='none',
marker=style['plotstyle.marker'].values[0],
markersize=8)
mean_yerr = [ tco3_return_stat['Mean'] - tco3_return_stat['Mean+Std'],
tco3_return_stat['Mean-Std'] - tco3_return_stat['Mean']]
tco3_return_stat.index = [xlabel]
tco3_return_stat['Mean'].plot(color='r', marker='^', markersize=16, yerr=mean_yerr, capsize=8, legend='Mean', mfc='None')
tco3_return_stat['Median'].plot(color='b', marker='o', markersize=14, legend='Median', mfc='None')
# tune the plot
# show the legend
ax = plt.gca() # get axis instance
ax.legend(bbox_to_anchor=(1.0, 1.0))
plt.xticks(fontsize=14)
plt.yticks(fontsize=12)
ax.set_ylabel('tco3_zm return year', fontsize='x-large')
[20]:
Text(0, 0.5, 'tco3_zm return year')

The example shows how to use a Jupyter notebook to retrieve skimmed data in the JSON format and analyse for tco3_zm and tco3_return plots. The corresponding Jupyter notebook can be downloaded here .
Tip
In order to run a Jupyter notebook one may use either Jupyter Hub of EOSC-Synergy or Colab free service from Google.
Public presentations, demos
Introduction
O3as REST API provides:
Access to O3as (Ozone assessment) skimmed data (produced by the
o3skim
component).Information about used Climate Models
Ability to produce ozone plots (e.g. tco3_zm, tco3_return) in either PDF or JSON format
The API leverages Swagger, Flask, and Connexion.
The source code can be found in our o3api GitLab repository.
O3API Endpoints
Swagger API documentation
Tip
The full and actual Swagger documentation is found at https://api.o3as.fedcloud.eu/api/v1/ui/.
Endpoints description
The documentation below is automatically generated from the swagger.yml
:
- GET /apiinfo
Returns information about the API
Information about the API (o3api metadata)
- Status Codes
200 OK – Successfully returned o3api info
404 Not Found – Requested resource not found
- GET /data
Returns a list of plot types with the available raw data
List of plot types with the available raw data
- Status Codes
200 OK – Successfully returned the list of data types
404 Not Found – Requested resource not found
default – Unexpected error
- POST /data/tco3_zm
Returns raw data for tco3_zm
Raw data to be processed for building tco3_zm plot
- Query Parameters
begin (integer) – Year to start data scanning from
end (integer) – Year to finish data scanning
month (array) – Month(s) to select, if not a whole year
lat_min (integer) – Latitude (min) to define the range (-90..90)
lat_max (integer) – Latitude (max) to define the range (-90..90)
- Status Codes
200 OK – Successfully retrieved the data
404 Not Found – Requested resource not found
default – Unexpected error
- POST /data/tco3_return
Returns raw data for tco3_return
Raw data to be processed for building tco3_return plot
- Query Parameters
begin (integer) – Year to start data scanning from
end (integer) – Year to finish data scanning
month (array) – Month(s) to select, if not a whole year
lat_min (integer) – Latitude (min) to define the range (-90..90)
lat_max (integer) – Latitude (max) to define the range (-90..90)
- Status Codes
200 OK – Successfully retrieved the data
404 Not Found – Requested resource not found
default – Unexpected error
- GET /models
Returns a list of available models
List of available models
- Query Parameters
ptype (string) – Plot type (tco3_return, tco3_zm, vmro3_zm)
select (string) – Select models according to the {select} pattern
- Status Codes
200 OK – Successfully returned list of models
404 Not Found – Requested resource not found
default – Unexpected error
- GET /models/{model}
Returns detailed information about a model
Detailed information about a model
- Parameters
model (string) – model name
- Status Codes
200 OK – Successfully returned model information
404 Not Found – Requested resource not found
default – Unexpected error
- POST /models/plotstyle
Returns plot styles for models
Plot styles for selected models and plot type
- Query Parameters
ptype (string) – Plot type (tco3_return, tco3_zm, vmro3_zm)
- Status Codes
200 OK – Successfully returned plot styles for models
404 Not Found – Requested resource not found
default – Unexpected error
- GET /plots
Returns a list of possible plots
List of possible plots
- Status Codes
200 OK – Successfully returned the list of possible plots
404 Not Found – Requested resource not found
default – Unexpected error
- POST /plots/tco3_zm
Builds and returns tco3_zm plot
tco3_zm plot or corresponding data points
- Query Parameters
begin (integer) – Year to start data scanning from
end (integer) – Year to finish data scanning
month (array) – Month(s) to select, if not a whole year
lat_min (integer) – Latitude (min) to define the range (-90..90)
lat_max (integer) – Latitude (max) to define the range (-90..90)
ref_meas (string) – Reference observational measurument (Required)
ref_year (integer) – Reference year for the obsevational measurement (Required)
- Status Codes
200 OK – Successfully created the plot
404 Not Found – Requested resource not found
default – Unexpected error
- POST /plots/tco3_return
Builds and returns tco3_return plot
tco3_return plot or corresponding data points
- Query Parameters
month (array) – Month(s) to select, if not a whole year
lat_min (integer) – Latitude (min) to define the range (-90..90)
lat_max (integer) – Latitude (max) to define the range (-90..90)
ref_meas (string) – Reference observational measurument (Required)
ref_year (integer) – Reference year for the obsevational measurement (Required)
- Status Codes
200 OK – Successfully created a plot
404 Not Found – Requested resource not found
default – Unexpected error
O3API Reference
If you are looking for information on a specific function, class or method, this part of the documentation is for you.
api
O3as REST API methods:
- o3api.api.get_api_info()[source]
Return information about the package
- Returns
The o3api package info
- Return type
dict
- o3api.api.get_data_tco3_return(*args, **kwargs)[source]
Retrieve data to produce tco3_return plot
- Parameters
kwargs – provided in the API call parameters
- Returns
JSON document with data points
- o3api.api.get_data_tco3_zm(*args, **kwargs)[source]
Retrieve data to produce tco3_zm plot
- Parameters
kwargs – provided in the API call parameters
- Returns
JSON document with data points
- o3api.api.get_data_vmro3_zm(*args, **kwargs)[source]
Retrieve data to produce vmro3_zm plot
- Parameters
kwargs – provided in the API call parameters
- Returns
JSON document with data points
- o3api.api.get_model_detail(*args, **kwargs)[source]
Return information about the Ozone model
- Returns
Info about the Ozone model
- Return type
dict
- o3api.api.get_models_info()[source]
Return dictionary of available models with the meta info
- Returns
The dictionary of available models
- Return type
dict
- o3api.api.get_models_list(*args, **kwargs)[source]
Return the list of available Ozone models
- Returns
The list of available models
- Return type
list
- o3api.api.get_plot_style(*args, **kwargs)[source]
Returning plot style for selected models and plot type
- o3api.api.plot(data, ckwargs, **kwargs)[source]
Main plotting routine
- Parameters
data – data to plot
ckwargs – dictionary for curve plotting (e.g. color, style)
kwargs – provided in the API call parameters
- Returns
PDF plot
- o3api.api.plot_json(data, ckwargs, **kwargs)[source]
Plotting routine returning JSON points
- Parameters
data – data ready for plotting
ckwargs – dictionary for curve plotting (e.g. color, style)
kwargs – provided in the API call parameters
- Returns
JSON document with data points and styles for plotting
- o3api.api.plot_tco3_return(*args, **kwargs)[source]
Plot tco3_return
- Parameters
kwargs – provided in the API call parameters
- Returns
Either PDF plot or JSON document
plots
O3as helper classes to extact data for plotting:
- class o3api.plots.DataSelection(plot_type, **kwargs)[source]
Class to perform data selection, based on
Dataset
.- Parameters
begin – Year to start data scanning from
end – Year to finish data scanning
month – Month(s) to select, if not a whole year
lat_min – Minimum latitude to define the range (-90..90)
lat_max – Maximum latitude to define the range (-90..90)
- get_dataslice(model)[source]
Function to select the slice of data according to the time and latitude requested
- Parameters
model – The model to process
- Returns
xarray dataset selected according to the time and latitude
- Return type
xarray
- class o3api.plots.Dataset(plot_type, **kwargs)[source]
Base Class to initialize the dataset
- Parameters
plot_type – The plot type (e.g. tco3_zm, vmro3_zm, …)
- class o3api.plots.ProcessForTCO3(**kwargs)[source]
Subclass of
DataSelection
to calculate tco3_zm- get_ensemble_for_plot(models)[source]
Build the ensemble of tco3_zm models for plotting, include reference
- Parameters
models – Models to process for tco3_zm
- Returns
ensemble of models, including the reference, as pd.DataFrame
- Return type
pd.DataFrame
- get_ensemble_shifted(data)[source]
Shift tco3_zm data to reference year
- Parameters
data – data to process as pd.DataFrame
- Returns
shifted data points for plotting
- Return type
pd.DataFrame
- get_ensemble_smoothed(models, smooth_win)[source]
Smooth tco3_zm data using boxcar
- Parameters
models – Models to process for tco3_return
- Returns
smoothed data points
- Return type
pd.DataFrame
- get_ensemble_stats(data)[source]
Calculate Mean, Std, Median for tco3_zm data
- Parameters
data – data to process as pd.DataFrame
- Returns
updated pd.DateFrame with stats columns
- Return type
pd.DataFrame
- get_ensemble_yearly(models)[source]
Rebin tco3_zm data for yearly entries
- Parameters
models – Models to process for tco3_return
- Returns
yearly data points
- Return type
pd.DataFrame
- get_raw_data(model)[source]
Process the model to get tco3_zm raw data
- Parameters
model – The model to process for tco3_zm
- Returns
raw data points in preparation for plotting
- Return type
pandas series (pd.Series)
- get_raw_data_pd(model)[source]
Process the model to get tco3_zm raw data
- Parameters
model – The model to process for tco3_zm
- Returns
raw data points in preparation for plotting
- Return type
pd.DataFrame
- class o3api.plots.ProcessForTCO3Return(**kwargs)[source]
Subclass of
ProcessForTCO3
to calculate tco3_return
- class o3api.plots.ProcessForVMRO3(**kwargs)[source]
Subclass of
DataSelection
to calculate vmro3_zm
plothelpers
O3as help functions to create figures:
- o3api.plothelpers.cleanse_models(**kwargs)[source]
Cleansing models from empty entries, spaces, and quotes
- Parameters
kwargs – The provided in the API call parameters
- Returns
models cleansed from empty entries, spaces, quotes
- Return type
list
- o3api.plothelpers.get_date_range(ds)[source]
Return the range of dates in the provided dataset
- Parameters
ds – xarray dataset to check
- Returns
date_min, date_max
- o3api.plothelpers.get_periodicity(pd_time)[source]
Calculate periodicity in the provided data
- Parameters
pd_time (pandas DatetimeIndex) – The time period
- Returns
Calculated periodicity as the number of points per year
- Return type
int
- o3api.plothelpers.get_plot_info_html(**kwargs)[source]
Generate info text (HTML) for the plot
- Parameters
kwargs – The provided in the API call parameters
- Returns
information text (HTML) with legal info, parameters etc
- Return type
string
- o3api.plothelpers.get_plot_info_txt(**kwargs)[source]
Generate info text for the plot
- Parameters
kwargs – The provided in the API call parameters
- Returns
information text with legal info, parameters etc
- Return type
string
- o3api.plothelpers.get_plot_params(**kwargs)[source]
Get plot parameters
- Parameters
kwargs – The provided in the API call parameters
- Returns
plot_params with added input parameters
- Return type
string
Data skimming for ozone assessment.
o3skim is an open source project and Python package that provides the tools to pre-process, standardize and reduce ozone data from netCDF models to simplify and speed up ozone data transfer and plot.
Getting started
Which First steps you need to start.
How to use o3norm to standardize your models.
How to use o3skim to reduce your models.
First steps
Prerequisites
This software is shipped as python3 package, therefore you need to have python3 and pip installed. If not, please check pip documentation to find out how to install and run pip in your system with at least the following versions:
software
version
python
>= 3.6.12
pip
>= 21.0.1
Note
Non admin rights? Check how to run conda in your machine.
Installation
Once python3 and pip are running in your system, download the package and install it using pip:
$ git clone https://git.scc.kit.edu/synergy.o3as/o3skim.git
Cloning into 'o3skim'...
...
$ cd o3skim
$ pip install .
...
Successfully installed o3skim-0.4.0
o3norm
You can standardize a dataset from any sources using the provided command o3norm when installing the package.
usage: o3norm [-h] [-v {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [-t TARGET]
(--tco3_zm | --vmro3_zm)
{CCMI-1,ECMWF,ESACCI,SBUV} ...
This command loads the model from the specified sources and produces an standardized netCDF output with the following structure:
Dimensions: (lat: _, lon: _, plev: _, time: _)
Coordinates:
* time (time) datetime64[ns] ____-__-__ ... ____-__-__T__:__:__
* plev (plev) float64 ___._ ... ___._
* lon (lon) float64 ___._ ... ___._
* lat (lat) float64 ___._ ... ___._
Data variables:
tco3_zm (time, lon, lat) float64 __
vmro3_zm (time, plev, lon, lat) float64 __
...
Attributes:
<The original dataset attributes>
This can help you to work easier with multiple sources having a common data structure for your data.
The usage is very simple, call the o3norm command followed by the specific model type you would like to load as a Sub-command. Note that there are general optional arguments common to all source types (for example –target) and specific to each source type (for example –delimiter in the case of SBUV).
positional arguments (Sub-commands):
{CCMI-1,ECMWF,ESACCI,SBUV}
Sub-commands
CCMI-1 CCMI-1 Source input
ECMWF ECMWF Source input
ESACCI ESACCI Source input
SBUV SBUV Source input
optional arguments:
-h, --help show this help message and exit
-v {DEBUG,INFO,WARNING,ERROR,CRITICAL}, --verbosity {DEBUG,INFO,WARNING,ERROR,CRITICAL}
Sets the logging level (default: INFO)
-t TARGET, --target TARGET
Target netCDF file (default: o3data)
--tco3_zm Standardization for total column ozone
--vmro3_zm Standardization for volume mixing ratio ozone
You can use the optional argument –help to see the Command and Sub-command instructions. For example, to see the options available for the CCMI-1 you can use:
$ o3norm CCMI-1 --help
usage: o3norm CCMI-1 [-h] [--time TIME] [--plev PLEV] [--lat LAT] [--lon LON]
variable paths [paths ...]
...
As last example, the following commands shows how to produce an output of standardized netCDF files at the file mydata.nc using the files provided from a CCMI-1 source:
$ o3norm --tco3_zm -t mydata.nc CCMI-1 toz Ccmi/some_path/*.nc
$ o3norm --vmro3_zm -t mydata.nc CCMI-1 vmro3 Ccmi/some_path/*.nc
...
See the first command loads the toz from the source as tco3_zm and the second the vmro3 as vmro3_zm. Both commands are targeting the file mydata.nc, therefore that file will contain the information about the 2 variables.
o3skim
You can reduce an output dataset produced by o3norm using the provided command o3skim when installing the package.
usage: o3skim [-h] [-v {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [-o OUTPUT]
[--lon_mean] [--lat_mean] [--year_mean]
paths [paths ...]
This command loads the model from the specified paths and produces a set of standardized netCDF files. The output data are splitted into one file per variable at the original dataset. For example, skimming a dataset with tco3_zm and vmro3_zm produces the following output at the specified folder:
$ tree output_folder
output_folder/
├── tco3_zm.nc
└── vmro3_zm.nc
The structure of each output file will depend on the variable it contains (for example, tco3_zm does not contain plev coordinates) and the skimming operations performed (for example, lon_mean reduces the lon coordinate). This reduces the transference size by transferring only the files with the intended variables.
The usage is quite simple, call the o3skim command followed by the operations you would like to performed as optional arguments and with the paths to the dataset you would like to reduce.
positional arguments:
paths Paths to netCDF files with the data to skim
optional arguments:
-h, --help show this help message and exit
-v {DEBUG,INFO,WARNING,ERROR,CRITICAL}, --verbosity {DEBUG,INFO,WARNING,ERROR,CRITICAL}
Sets the logging level (default: INFO)
-o OUTPUT, --output OUTPUT
Folder for output files (default: .)
operations:
--lon_mean Longitudinal mean across the dataset
--lat_mean Latitudinal mean across the dataset
--year_mean Time average across the year
As an example, the following command shows how to reduce a dataset running an average mean over the latitude and longitude coordinates at the folder skimmed_model:
$ o3skim -o skimmed_model --lon_mean --lat_mean mydata.nc
...
$ tree skimmed_model
skimmed_model/
└── tco3_zm.nc
From this example, we can foreseen that the original dataset mydata.nc contained only tco3_zm information. The expected structure for the tco3_zm.nc dataset would be as follows:
Dimensions: (time: _)
Coordinates:
* time (time) datetime64[ns] ____-__-__ ... ____-__-__T__:__:__
Data variables:
tco3_zm (time) float64 __
Attributes:
<The original dataset attributes>
Developer guide
Check the First steps before start.
Check the Package index to learn about the functions.
Check the Test guidelines to extend the functionality.
Package index
O3as package with utilities to handle ozone data skimming.
- o3skim.process(dataset, actions)[source]
Function in charge of processing the list of o3skim operations to the ozone variables dataset. The available list of operations to perform are:
- lon_mean
Longitudinal mean accross the dataset.
- lat_mean
Latitudinal mean accross the dataset.
Note that multiple operations can be concatenated. For example using the list [‘lon_mean’, ‘lat_mean’] as actions parameter input would perform a longitudinal mean followed afterwards by a latitudinal mean before returning the result.
- Parameters
dataset (
xarray.Dataset
) – Original o3 dataset where to perform operations.actions (list) – List of operation names to perform.
- Returns
Dataset after processing listed operations.
- Return type
xarray.Dataset
- o3skim.save(dataset, target, split_by=None)[source]
Function in charge of saving the input dataset into the file system using an specified time range. The available type of output file formats are:
- None
Output file format is {target}.nc
- year
Output file format is {target}_{y}-{y+01}.nc
- decade
Output file format is {target}_{y}-{y+10}.nc
- Parameters
dataset (
xarray.DataSet
) – DataSet to save in the target.target (str) – Location where to save followed by the name prefix.
split_by (str, optional) – Type of saving format to apply.
o3skim loads
Module in charge of model data loading.
- o3skim.loads.ccmi(variable, paths)[source]
Loads and returns a CCMI-1 DataArray model and the dataset attributes.
- Parameters
variable (str) – Variable to load from the dataset.
paths (str or [str]) – Paths expression to the dataset netCDF files.
- Returns
Standardized DataArray.
- Return type
(
xarray.DataArray
, dict)
- o3skim.loads.ecmwf(variable, paths)[source]
Loads and returns a ECMWF DataArray model and the dataset attributes.
- Parameters
variable (str) – Variable to load from the dataset.
paths (str or [str]) – Paths expression to the dataset netCDF files.
- Returns
Standardized DataArray.
- Return type
(
xarray.DataArray
, dict)
- o3skim.loads.esacci(variable, time_position, paths)[source]
Loads and returns a ESACCI DataArray model and the dataset attributes. Note the name structure is composed by sections: For example: ESACCI-OZONE-L3S-TC-MERGED-DLR_1M-20010302-fv0100. Therefore is needed to indicate the position in the string for the dataset time (7 or -2 for the case above).
- Parameters
variable (str) – Variable to load from the dataset.
time_position (int) – Name position for the dataset time.
paths (str or [str]) – Paths expression to the dataset netCDF files.
- Returns
Standardized DataArray.
- Return type
(
xarray.DataArray
, dict)
- o3skim.loads.sbuv(textfile, delimiter)[source]
Loads and returns a SBUV DataArray model and the dataset attributes. Note SBUV models do not have longitude coordinate.
- Parameters
textfile (str) – Location to the textfile with model information.
delimiter (str or [str]) – Delimiter character for row values on the table.
- Returns
Standardized DataArray.
- Return type
(
xarray.DataArray
, {})
o3skim normalization
Module in charge of dataset normalization when loading models.
o3skim operations
Module in charge of implementing the o3skim operations.
- o3skim.operations.run(name, dataset)[source]
Main entry point for operation call on o3skimming functions:
- lon_mean
Longitudinal mean across the dataset.
- lat_mean
Latitudinal mean across the dataset.
- year_mean
Time coordinate averaged by year.
- Parameters
name (str) – Operation name to perform.
dataset (
xarray.Dataset
) – Original o3 dataset where to perform operations.
- Returns
Dataset after processing the specified operation.
- Return type
xarray.Dataset
Test guidelines
Testing is based on sqa-baseline criteria, tox automation is used to simplify the testing process.
To install it with pip use:
$ pip install tox
To run unit and functional tests together with reports use:
$ tox
...
clean: commands succeeded
stylecheck: commands succeeded
bandit: commands succeeded
docs: commands succeeded
py36: commands succeeded
report: commands succeeded
...
The last coverage report output is produced at htmlcov which can be displayed in html format accessing to index.html.
The last Pep8 report produced by flake8 at the output file flake8.log.
However, you can also run different test configurations using different tox environments:
Code Style [QC.Sty]
Test pep8 maintenance style conventions based on pylint format. To run stylecheck use:
$ tox -e stylecheck
...
stylecheck: commands succeeded
...
Unit Testing [QC.Uni]
All unit tests are placed inside the package (./o3skim/test). This helps to test easily functions at low level and ensure the functions have the expected behavior. To run unit tests use:
$ tox -e unittesting
...
unittesting: commands succeeded
...
This environment also provide a coverage term report for the tests. The design of Unit Tests is based on the python unittest framework, a simple and extended test framework which ships by default together with python.
The usage is very simple and straight forward for simple tests, but the difficulty to parametrize and combine multiple test fixtures makes it not suitable for Black-Box testing without a very complex customization.
Functional Testing [QC.Fun]
Located inside tests package folder (./tests). Functional testing is used to test the system from a general overview of the application. To run functional tests use:
$ tox -e functional
...
functional: commands succeeded
...
This environment also provide a coverage term report for the tests. The framework used is pytest to provide a simple syntax to test all possible combinations from the user point of view.
Pytest detects directly all tests following the test_discovery naming conventions. Therefore all functional tests should be located on the tests folder at the package root and start with test. For example test_sources.py.
More than 500 test combinations are generated using which otherwise might not be feasible using other python test frameworks.
Security [QC.Sec]
Security checks are performed by bandit, a tool designed to find common security issues in Python code. To run security checks use:
$ tox -e functional
...
functional: commands succeeded
...
Documentation [QC.Doc]
Documentation is build using sphinx, a tool designed to create documentation based on code. To run documentation build checks use:
$ tox -e docs
...
docs: commands succeeded
...
The HTML pages are build inside in docs/_build.