Radiation#
Instrumentation#
The BCO is equipped with a solar and terrestrial radiation measurement station, comprised of 4 radiation sensors attached to a SOLYS2 sun tracker. The instruments were installed on 2015-03-30.

More specifically, the apparatus sits on the top of the BCO container, \(4.5\,\mathrm{m}\) above the ground, or \(21.5\,\mathrm{m}\) above mean sea level
The 4 sensors are as follows:
shaded pyranometer mounted on table of sun tracker for diffuse radiation (CMP21 by Kipp and Zonen),
non-shaded pyranometer mounted on table of sun tracker for diffuse radiation (CMP21 by Kipp and Zonen),
pyranometers measure solar irradiance from a hemispherical field of view diffuse radiation is the portion of incoming shortwave (SW) radiation due to atmospheric scattering
shaded pyrgeometer mounted on table of sun tracker for longwave (LW) radiation (CGR4 by Kipp and Zonen)
pyrheliometer mounted on the side of the sun tracker (CPH1 by Kipp and Zonen) points directly into the sun.
Two sets of 4 sensors are used and exchanged simultaneously approximately every two years.
Set 1: CMP21 #140337, CMP21 #140356, CGR4 #140034 (replaced by 220446), CHP1 #140059 (replaced by 160388)
Set 2: CMP21 #160654, CMP21 #160653, CGR4 #150139, CHP1 #160388
The calibration is done by the DWD in Lindenberg, and the solar irradiance (\(\mathrm{W} \mathrm{m}^{-2}\)), the raw voltages, the sensitivities, and the housing temperatures of each of the 4 sensors are available.
Data Availability#
Housekeeping data is available as .zarr files in the catalog as:
BCO.radiation_c1(2015-03-30 to 2015-10-14)BCO.radiation_c2(2015-10-15 to present)
And a level 2 product is being tested and can be found under the catalog entry BCO.radiation_l2 (2015-03-30 to present).
import intake
cat = intake.open_catalog("https://tcodata.mpimet.mpg.de/catalog.yaml")
ds_rad = cat.BCO.radiation_l2.to_dask()
ds_rad
/builds/tco/bco/docs/.venv/lib/python3.12/site-packages/intake_xarray/base.py:21: FutureWarning: The return type of `Dataset.dims` will be changed to return a set of dimension names in future, in order to be more consistent with `DataArray.dims`. To access a mapping from dimension names to lengths, please use `Dataset.sizes`.
'dims': dict(self._ds.dims),
<xarray.Dataset> Size: 88MB
Dimensions: (time: 3665382)
Coordinates:
alt float64 8B ...
lat float64 8B ...
lon float64 8B ...
* time (time) datetime64[ns] 29MB 2015-03-30T15:17:40 ... 2015-10-13...
Data variables:
LWD_diff (time) float32 15MB dask.array<chunksize=(262144,), meta=np.ndarray>
SWD_diff (time) float32 15MB dask.array<chunksize=(262144,), meta=np.ndarray>
SWD_dir (time) float32 15MB dask.array<chunksize=(262144,), meta=np.ndarray>
SWD_global (time) float32 15MB dask.array<chunksize=(262144,), meta=np.ndarray>
Attributes:
Conventions: CF-1.12
_logical_cutoff_date: 2015-10-14T00:00:00Z
bcoproc_version: 0.0.0.post1564.dev0+f62cdee
featureType: timeSeries
institution: Max Planck Institute for Meteorology, Hamburg
license: CC0-1.0
location: The Barbados Cloud Observatory (BCO), Deebles Poin...
platform: BCO
source: Kipp & Zonen CMP21 (shaded and un-shaded) pyranome...
summary: This dataset contains measurements of downwelling ...
title: Radiation data from BCO (Level 2)
tool_versions: {"Python": "3.11.2 (main, Apr 28 2025, 14:11:48) [...Sample Plot#
import matplotlib.pylab as plt
import pandas as pd
import xarray as xr
from pvlib.location import Location
cat = intake.open_catalog("https://tcodata.mpimet.mpg.de/catalog.yaml")
ds_rad = cat.BCO.radiation_l2.to_dask()
# select a few days of interest
subset = ds_rad.sel(time=slice("2015-07-03", "2015-07-05"))
# get clear sky calculated radiation for reference
lat, lon, alt = float(subset.lat), float(subset.lon), float(subset.alt)
bco = Location(lat, lon, 'UTC', alt, name = 'bco')
times = pd.to_datetime(subset.coords['time'].values)
cs = bco.get_clearsky(times).to_xarray().rename({'index': 'time'})
ds_cs = xr.merge([subset, cs])
# plot observed SW vs calculated clear-sky
ds_cs.SWD_global.plot(label='SW from non-shaded pyranometer')
ds_cs.ghi.plot(label='Clear-sky')
plt.legend(loc='upper left')
plt.ylabel('Solar Irradiance [W/m²]')
plt.title('BCO SW radiation vs. clear-sky calculated')
/builds/tco/bco/docs/.venv/lib/python3.12/site-packages/intake_xarray/base.py:21: FutureWarning: The return type of `Dataset.dims` will be changed to return a set of dimension names in future, in order to be more consistent with `DataArray.dims`. To access a mapping from dimension names to lengths, please use `Dataset.sizes`.
'dims': dict(self._ds.dims),
Text(0.5, 1.0, 'BCO SW radiation vs. clear-sky calculated')