3.0.3 (2024-04-18) —


  • Improved error message when some variables cannot be shifted by the suggest_shift_double_ended function.


  • [dev] Moved to Ruff instead of isort for import sorting

3.0.2 (2024-04-13) —


  • Bumpversion configuration was incorrect since v3.0.0. Therefore the 3.0.1 release failed. This is a re-release of 3.0.1:

3.0.1 (2024-04-13) —


  • Oryx v4 double ended could have the backward measurements incorrectly cut off during loading.

3.0.0 (2023-11-05) —


  • Calibration functions are now accessed via the .dts accessor in favor of the DataStore class.

  • Improved the functionality of merge_double_ended, by adding a check that handles measurements missing in one channel while present in the other ([#171](

  • Support for Python 3.11

  • matching_sections is now similarly implemented as sections.


  • Single-ended measurements with fix_alpha failed due to a bug introduced in v2.0.0 ([#173](

  • Headers in example notebooks and their appearance in the docs are now at correct levels

  • Big clean up of the documentation. The documentation is now more consistent and easier to read.


  • Notebooks now reflect the new API with the .dts accessor.

  • Calibration functions now return only calibration results instead of adding the results to the Dataset inplace.

  • Standardized parameter names. Reduced the freedom in choosing parameter names and dimension names in favor of simplifying the code.

  • Requiring netcdf4 >= 1.6.4

  • Optional dependencies of xarray that improve performance are now required by default.

  • variance_stokes_linear() does not default through zero anymore.

  • Refactored calibration_single_ended and calibration_double_ended()

  • Moved ParameterIndices classes to

  • Flox included in requirements to speed up resampling via xarray ([Xarray #5734](


  • Removed the DataStore module in favor of the dts accessor.

  • Removed ds.resample_datastore() in favor of using xarray’s resample function. See example notebook 2.

  • Removed support for Python 3.8

Developer changes

  • Added mypy to dev dependencies and CI.

  • Using ruff for most of the formattting. Black is used for the notebooks. Isort is used for sorting the imports.

  • Changed all import statements to be absolute instead of relative.

  • Cleaned up old ‘pylint: disable’ comments

2.0.0 (2023-05-24)

  • Faster approach on error propagation. As alternative to computational intensive Monte Carlo runs.

  • Refractored some of the indexing logic of the calibration routines.

  • Rewritten single-ended and double-ended example notebooks.

  • Removed support for OLS calibration, as with minor extra efforts WLS could be used, which has significant benefits.

1.2.0 (2023-03-13)

Bug fixes

  • Fixed deprecated np.float and


  • Moved project build system & scripts to hatch.

  • Project is now fully configured using pyproject.toml

  • Linting is handled by Ruff.

  • Notebooks are now rendered as part of the documentation.


  • script (unused) has been removed.

New contributors: * Karl Lapo (@klapo)

1.1.2 (2022-09-25)

  • Added support for Sensornet Sentinel v5 files.

1.1.1 (2022-09-25)

  • Deprecated Python 3.7

  • Fixed documention rendering

  • Updated readme badges

1.1.0 (2022-09-25)

New features

  • Added support for Python 3.9, 3.10.

  • Silixa’s xml version 8 is now supported

Bug fixes

  • Loading in untested sensornet files will not give a UnboundLocalError error anymore

  • Sensornet .ddf file version check is now more robust (commas are replaced to periods)

  • Changed matplotlib’s deprecated DivergingNorm to TwoSlopeNorm

  • Updated the stokes_variance_linear docstring to remove incorrect and duplicate information

  • Adjusted resample_datastore to avoid using deprecated ‘base’ kwarg, instead using the new arguments ‘origin’ and ‘offset’. See


  • Notebook 04 on Stokes variance has been updated to explain the different estimation methods for the variance, and their importance.

  • Notebook 07 and 08 have been updated to take into account the changes in ds.stokes_variance.

  • Silenced xarray’s __slots__ warning

  • Deprecated Python 3.6

  • CI has been moved to GitHub Actions. Travis-CI and AppVeyor have been removed.

1.0.2 (2020-05-04)

  • Same as v1.0.1

1.0.1 (2020-05-04)

New features

  • st_var can now be array-like. The array-like can vary in x or time, or both.

  • When converting from a xr.Dataset to a DataStore object, the attributes arenow transfered over

  • Added ‘verbose’ kwarg to shift_double_ended utility function to silence theconsole output

Bug fixes

  • If the ‘_sections’ attribute is missing from a DataStore object it is automagically re-added.

  • Assert that stokes variances are passed when running a double-ended WLS calibration

  • Added check for NaN/inf values in wls_sparse solver to avoid unclear error messages

  • Before calibration, the values of the used reference temperatures are checked if they are valid (float dtype, no NaN/inf values, correct time dimension)


  • European Geosciences Union conference 2020 presentation added

  • Updated documentation with content article

  • Use YAPF formatting of the Python files

  • integration in GitHub restored.

1.0.0 (2020-03-30)

  • First major release

  • Reduced flexibility in defining names under which the Stokes are stored

  • 4 Averaging functions implemented, with uncertainty estimation. See notebook 16 for the various options

  • Notebook about transient attenuation caused by for example connectors

  • Bug in singel ended transient attenuation

  • Check for consistent number of measurement locations across read files

0.9.2 (2020-03-17)

  • Reduced flexibility in defining Stokes labels

0.9.1 (2020-03-17)

  • Same as 0.9.2

0.9.0 (2020-03-16)

  • Increased precision of least squares solver, as this was limiting theprecision of the parameter estimation

  • The variance of the noise in the Stokes can change linear with the intensity

  • Improved residuals plot function

  • Reduced the number of equations for double ended calibration

  • Support for transient attenuation due to connectors along fibers

  • Matching sections

0.8.0 (2020-02-14)

  • Valentine edition

  • Added example for fixing parameters

  • Bug fixed in routine for reading Sensornet files (Bor van der Scheer)

  • Official support for Python 3.8

  • When the datastore is printed to the screen, the mean and std of thereference temperature is plotted

  • Integrated differential attenuation is reformulated. Starts integrating atthe first reference section location.

  • Estimation of the variance of the Stokes that is linear dependent on theintensity (Poisson)

  • Removed __slots__ attribute

0.7.4 (2020-01-26)

  • Update automated zenodo reference requires to draft a new release

0.7.3 (2020-01-24)

  • Solved xlim in subplots of plot_residuals_reference_sections funciton

  • Solved YAML deprecation related problems

  • Introduced new approach for double ended calibration, with a different Cfor the forward and backward channel

  • First code added for time variant asymmetric attenuation, such as connectors.

  • First code added for matching sections

0.7.2 (2019-11-22)

  • Set alpha and or gamma to known value, with corresponding variance.

  • Bug in computation of the weights for single and double-ended calibration

  • Added notebook about merging two single ended measurements

  • Added example notebook on how to create a custom datastore

  • Added notebook examples for loading in data from the different manufa..

  • Loading AP Sensing files and tests

  • Loading Sensortran files

0.7.0 (2019-11-07)

  • Ensure order of dimension upon initialization of DataStore. Resamplingwould lead to issues

  • Bug in section definition (reported by Robert Law)

  • Rewritten calibration solvers to align with article of this package

  • Removed old calibration solvers

  • New possibilities of saving and loading large DataStores saved to multiplenetCDF files

0.6.7 (2019-11-01)

  • Use twine to check if the compiled package meets all the requirements of Pypi

0.6.6 (2019-11-01)

  • Use twine to check if the compiled package meets all the requirements of Pypi

0.6.5 (2019-11-01)

  • Major bug fix version.

  • More flexibility in defining the time and space dimensions

  • Fixed unsave yaml loading

  • Added support for Silixa 7 files

  • Start using __slots__ as it is something new

  • xarray doesn’t have the attribute ._initialized anymore. Rewritten teststo make more sense by checking the sum of the Stokes instead.

  • Support for double ended Sensornet files and tests

  • Bug fixing

0.6.4 (2019-04-09)

  • More flexibility in defining the time dimension

  • Cleanup of some plotting functions

0.6.3 (2019-04-03)

  • Added reading support for zipped silixa files. Still rarely fails due to upstream bug.

  • pretty __repr__

  • Reworked double ended calibration procedure. Integrated differential attenuation outside of reference sections is now calculated seperately.

  • New approach for estimation of Stokes variance. Not restricted to a decaying exponential

  • Bug in averaging TMPF and TMPB to TMPW

  • Modified residuals plot, especially useful for long fibers (Great work Bart!)

  • Example notebooks updatred accordingly

  • Bug in to_netcdf when passing encodings

  • Better support for sections that are not related to a timeseries.

0.6.2 (2019-02-26)

  • Double-ended weighted calibration procedure is rewritten so that the integrated differential attenuation outside of the reference sections is calculated seperately. Better memory usage and faster

  • Other calibration routines cleaned up

  • Official support for Python 3.7

  • Coverage figures are now trustworthy

  • String representation improved

  • Include test for aligning double ended measurements

  • Example for aligning double ended measurements

0.6.1 (2019-01-04)

  • Many examples were shown in the documentation

  • Fixed verbose settings of solvers

  • Revised example notebooks

  • Moved to 80 characters per line (PEP)

  • More Python formatting using YAPF

  • Use example of plot_residuals_reference_sections function in Stokes variance example notebook

  • Support Python 3.7

0.6.0 (2018-12-08)

  • Reworked the double-ended calibration routine and the routine for confidence intervals. The integrated differential attenuation is not zero at x=0 anymore.

  • Verbose commands carpentry

  • Bug fixed that would make the read_silixa routine crash if there are copies of the same file in the same folder

  • Routine to read sensornet files. Only single-ended configurations supported for now. Anyone has double-ended measurements?

  • Lazy calculation of the confidence intervals

  • Bug solved. The x-coordinates where not calculated correctly. The bug only appeared for measurements along long cables.

  • Example notebook of importing a timeseries. For example, importing measurments from an external temperature sensor for calibration.

  • Updated documentation

0.5.3 (2018-10-26)

  • No changes

0.5.2 (2018-10-26)

  • New resample_datastore method (see basic usage notebook)

  • New notebook on basic usage of DataStore

  • Support for Silixa v4 (Windows xp based system) and Silixa v6 (Windows 7) measurement files

  • The representation string now includes the sections

  • Reorganized the IO related files

  • CI: Add appveyor to continuesly test on Windows platform

  • Auto load Silixa files to memory option, if size is small

0.5.1 (2018-10-19)

  • Rewritten the routine that reads Silixa measurement files

  • dts-calibration is now citable

  • Refractored the MC confidence interval routine

  • MC confidence interval routine speed up, with full dask support

  • Link to to try the example notebooks online

  • Added a few missing dependencies

  • The routine to read the Silixa files is completely refractored. Faster, smarter. Supports both the path to a directory and a list of file paths.

  • Changed imports from dtscalibration to be relative

0.4.0 (2018-09-06)

  • Single ended calibration

  • Confidence intervals for single ended calibration

  • Example notebooks have figures embedded

  • Several bugs squashed

  • Reorganized DataStore functions

0.2.0 (2018-08-16)

  • Double ended calibration

  • Confidence intervals for double ended calibration

0.1.0 (2018-08-01)

  • First release on PyPI.