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 (2015-03-30 to present). The level 2 product is filtered and quality controlled combining the following techniques: (1) pre-determined flags in the level 1 data with meanings high_anomaly, low_anomaly, or broken are dropped (2) for c2, we have access to recorded voltages and can therefore drop times when the irradiance measured is 0 but there is some nonzero voltage recorded (3) use ±4000 W m-2 as bounds (non-inclusive, because this is the maximum operational irradiance of the instrument itself) for unphysical measurements and drop all fluxes outside of these bounds.
import intake
import matplotlib.pyplot as plt
cat = intake.open_catalog("https://tcodata.mpimet.mpg.de/catalog.yaml")
ds = cat.BCO.radiation(time="PT1H").to_dask().sel(time="2024-09")
ds
/builds/tco/bco/docs/.venv/lib/python3.14/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: 35kB
Dimensions: (time: 720, bnd: 2)
Coordinates:
* time (time) datetime64[ns] 6kB 2024-09-01T00:30:00 ... 202...
alt float64 8B ...
lat float64 8B ...
lon float64 8B ...
Dimensions without coordinates: bnd
Data variables:
lw_down_diffuse (time) float32 3kB dask.array<chunksize=(720,), meta=np.ndarray>
raw_count (time) float64 6kB dask.array<chunksize=(720,), meta=np.ndarray>
sw_down_diffuse (time) float32 3kB dask.array<chunksize=(720,), meta=np.ndarray>
sw_down_global (time) float32 3kB dask.array<chunksize=(720,), meta=np.ndarray>
sw_down_suntracker (time) float32 3kB dask.array<chunksize=(720,), meta=np.ndarray>
time_bounds (time, bnd) datetime64[ns] 12kB dask.array<chunksize=(720, 2), meta=np.ndarray>
Attributes:
Conventions: CF-1.12
_cutoff_date: 2026-10-16T23:55:00.000001000
bcoproc_version: 0.0.0.post2256.dev0+3c9a772
institution: Max Planck Institute for Meteorology, Hamburg
license: CC0-1.0
location: The Barbados Cloud Observatory (BCO), Deebles Point, Ba...
platform: BCO
source: https://swift.dkrz.de/v1/dkrz_948e7d4bbfbb445fbff5315fc...
summary: This dataset contains measurements of downwelling short...
title: Radiation data from BCO (Level 2)
tool_versions: {"Python": "3.14.3 (main, Mar 3 2026, 14:59:53) [Clang...Sample Plot#
ds.sw_down_global.groupby(ds.time.dt.hour).mean().plot()
plt.xlabel("time / hour")
plt.title("diurnal cycle during 2024-09")
Text(0.5, 1.0, 'diurnal cycle during 2024-09')