xarray.Dataset.dts.ufunc_per_section

Dataset.dts.ufunc_per_section(sections=None, func=None, label=None, subtract_from_label=None, temp_err=False, x_indices=False, ref_temp_broadcasted=False, calc_per='stretch', suppress_section_validation=False, **func_kwargs)

Functions applied to parts of the cable.

Super useful,many options and slightlycomplicated.

The function func is taken over all the timesteps and calculated per calc_per. This is returned as a dictionary

Parameters:
  • sections (Dict[str, List[slice]], optional) – If None is supplied, ds.sections is used. Define calibration sections. Each section requires a reference temperature time series, such as the temperature measured by an external temperature sensor. They should already be part of the DataStore object. sections is defined with a dictionary with its keywords of the names of the reference temperature time series. Its values are lists of slice objects, where each slice object is a fiber stretch that has the reference temperature. Afterwards, sections is stored under ds.sections.

  • func (callable, str) – A numpy function, or lambda function to apple to each ‘calc_per’.

  • label

  • subtract_from_label

  • temp_err (bool) – The argument of the function is label minus the reference temperature.

  • x_indices (bool) – To retreive an integer array with the indices of the x-coordinates in the section/stretch. The indices are sorted.

  • ref_temp_broadcasted (bool)

  • calc_per ({‘all’, ‘section’, ‘stretch’})

  • func_kwargs (dict) – Dictionary with options that are passed to func

  • TODO (Spend time on creating a slice instead of appendng everything to a list and concatenating after.)

Returns:

dict

A dictionary with the keys of the sections and the values are the result of the function applied to the data in the section.

Examples:

  1. Calculate the variance of the residuals in the along ALL the reference sections wrt the temperature of the water baths

>>> tmpf_var = d.ufunc_per_section(
>>>     sections=sections,
>>>     func='var',
>>>     calc_per='all',
>>>     label='tmpf',
>>>     temp_err=True)
  1. Calculate the variance of the residuals in the along PER reference section wrt the temperature of the water baths

>>> tmpf_var = d.ufunc_per_section(
>>>     sections=sections,
>>>     func='var',
>>>     calc_per='stretch',
>>>     label='tmpf',
>>>     temp_err=True)
  1. Calculate the variance of the residuals in the along PER water bath wrt the temperature of the water baths

>>> tmpf_var = d.ufunc_per_section(
>>>     sections=sections,
>>>     func='var',
>>>     calc_per='section',
>>>     label='tmpf',
>>>     temp_err=True)
  1. Obtain the coordinates of the measurements per section

>>> locs = d.ufunc_per_section(
>>>     sections=sections,
>>>     func=None,
>>>     label='x',
>>>     temp_err=False,
>>>     ref_temp_broadcasted=False,
>>>     calc_per='stretch')
  1. Number of observations per stretch

>>> nlocs = d.ufunc_per_section(
>>>     sections=sections,
>>>     func=len,
>>>     label='x',
>>>     temp_err=False,
>>>     ref_temp_broadcasted=False,
>>>     calc_per='stretch')
  1. broadcast the temperature of the reference sections to stretch/section/all dimensions. The value of the reference temperature (a timeseries) is broadcasted to the shape of self[ label]. The self[label] is not used for anything else.

>>> temp_ref = d.ufunc_per_section(
>>>     label='st',
>>>     ref_temp_broadcasted=True,
>>>     calc_per='all')
  1. x-coordinate index

>>> ix_loc = d.ufunc_per_section(sections=sections, x_indices=True)

Notes:

If self[label] or self[subtract_from_label] is a Dask array, a Dask array is returned else a numpy array is returned