Doppler Wind Lidars#

There are two Doppler wind lidars at the Barbados Cloud Observatory (BCO) – both HALO Photonics (formerly; now Lumi Bird) Stream Line Pro Scanning Doppler Lidars.

Both instruments use a laser beam with a wavelength of 1550 nm to measure line-of-sight component of wind velocity in the atmospheric boundary layer. Two modes of operation are possible - staring at the zenith and scanning in several vertically inclined directions. These two modes may be distinguished by the zenith angle of the measurement.

Nomenclature of instruments#

Both Doppler wind lidars at BCO are the same instruments in terms of their specifications (both are commercially produced models of the same kind). Therefore we will simply distinguish them by their order of arrival at BCO.

  • WindLidar1 -> Chronologically first at BCO

  • WindLidar2 -> Chronologically second at BCO

Configurations#

Wind lidars have been operated in different configurations over time. These configurations can be distinguished by the number of averaging gates along the laser beam and their length. The different available configurations are listed here:

Dataset

Gates number

Gate length

Start date

End date

BCO.windlidar1_c1_v1

100

30.0 m

2015-07-26
2015-09-18
2019-09-01
2021-07-21
2025-09-23

2015-09-17
2019-08-27
2019-10-31
2024-09-20
today

BCO.windlidar1_c2_v1

1000

30.0 m

2019-08-27

2019-09-01

BCO.windlidar1_c3_v1

100

60.0 m

2015-09-17

2015-09-18

BCO.windlidar2_c1_v1

100

30.0 m

2019-02-18
2021-05-21
2024-09-20

2021-04-11
2021-07-21
2025-09-10

BCO.windlidar2_c2_v1

160

60.0 m

2021-04-11

2021-05-21

Deployments#

During the operation at BCO wind lidars were deployed on two containers. The locations of instruments at different periods of time are listed here:

Instrument

Location (container)

Mode

Start date

End date

WindLidar1

Testbed

Scan

2015-07-26

2016-02-29

WindLidar1

Testbed

Stare

2016-03-02

2019-10-31

WindLidar1

WBand

Stare

2021-07-21

2024-09-20

WindLidar1

WBand

Stare

2025-09-23

today

WindLidar2

WBand

Stare

2019-02-18

2019-03-05

WindLidar2

WBand

Scan

2019-03-06

2021-07-21

WindLidar2

WBand

Stare

2024-09-20

2025-09-10

Notes on the Deployments table#

  • Modes:

    • Stare mode: provides only vertical winds

    • Scan mode: provides both horizontal and vertical winds

  • Testbed and WBand containers are roughly 5 m apart and have the same height.

  • The temporal resolution of the vertical wind speed is 1.3 s (information obtained from Wiki as on 30.07.2025).

  • We decided that the change of location (between two containers 5 m apart) does not warrant the dataset to be provided as being measurements from two deployments, therefore WindLidar1’s Stare mode data from both Testbed and WBand containers are provided in the same dataset.

Example#

Note

The intensity threshold follows Päschke et al. [2015].

import intake
import numpy as np

# get wind lidar dataset from tcodata
cat = intake.open_catalog("https://tcodata.mpimet.mpg.de/catalog.yaml")
wl1 = cat.BCO.windlidar1_c1_v1(chunks=None).to_dask()

def is_vertical(ds):
    return ds["zenith"] < 2

def is_reliable(ds):
    # mask signals from the point where it became too much attenuated
    return (ds["intensity"] <= 1.015).cumsum("alt") < 1

# cut, filter, resample and plot the data
wl1_day = wl1.sel(time="2019-01-01", alt=slice(70, 1000))
wl1_1min_avg = wl1_day["doppler"].where(is_vertical(wl1_day) & is_reliable(wl1_day)).resample(time="1min").mean()
wl1_1min_avg.plot(x="time", y="alt", vmin=-1, vmax=1, figsize=(12, 4), cmap="bwr")
/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),
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[1], line 16
     13     return (ds["intensity"] <= 1.015).cumsum("alt") < 1
     15 # cut, filter, resample and plot the data
---> 16 wl1_day = wl1.sel(time="2019-01-01", alt=slice(70, 1000))
     17 wl1_1min_avg = wl1_day["doppler"].where(is_vertical(wl1_day) & is_reliable(wl1_day)).resample(time="1min").mean()
     18 wl1_1min_avg.plot(x="time", y="alt", vmin=-1, vmax=1, figsize=(12, 4), cmap="bwr")

File /builds/tco/bco/docs/.venv/lib/python3.12/site-packages/xarray/core/dataset.py:2911, in Dataset.sel(self, indexers, method, tolerance, drop, **indexers_kwargs)
   2843 """Returns a new dataset with each array indexed by tick labels
   2844 along the specified dimension(s).
   2845 
   (...)   2908 
   2909 """
   2910 indexers = either_dict_or_kwargs(indexers, indexers_kwargs, "sel")
-> 2911 query_results = map_index_queries(
   2912     self, indexers=indexers, method=method, tolerance=tolerance
   2913 )
   2915 if drop:
   2916     no_scalar_variables = {}

File /builds/tco/bco/docs/.venv/lib/python3.12/site-packages/xarray/core/indexing.py:187, in map_index_queries(obj, indexers, method, tolerance, **indexers_kwargs)
    184     options = {"method": method, "tolerance": tolerance}
    186 indexers = either_dict_or_kwargs(indexers, indexers_kwargs, "map_index_queries")
--> 187 grouped_indexers = group_indexers_by_index(obj, indexers, options)
    189 results = []
    190 for index, labels in grouped_indexers:

File /builds/tco/bco/docs/.venv/lib/python3.12/site-packages/xarray/core/indexing.py:146, in group_indexers_by_index(obj, indexers, options)
    144     grouped_indexers[index_id][key] = label
    145 elif key in obj.coords:
--> 146     raise KeyError(f"no index found for coordinate {key!r}")
    147 elif key not in obj.dims:
    148     raise KeyError(
    149         f"{key!r} is not a valid dimension or coordinate for "
    150         f"{obj.__class__.__name__} with dimensions {obj.dims!r}"
    151     )

KeyError: "no index found for coordinate 'alt'"