Skip to main content

Scintillometry

Pytest and Flake8

Development branch: Pytest and Linting

Analyse data & 2D flux footprints from Scintec's BLS scintillometers.

This project started life as part of a field course. If you spot any missing citations or licences please open an issue.

Comprehensive documentation is available via ReadTheDocs.

Processing Scintillometry Data in Complex Terrain

Scintillometry is configured for scintillometer experiments in Austria using public or local data (ZAMG, InnFLUX), but is easily modified to work with other data sources. Note that external data sources may have different licensing constraints.

The package is currently in alpha and may change or break often. Support is only available for Python 3.8+ on debian-based Linux distros.

Installation

Scintillometry supports package installation with pip, or from source as an editable with pip or conda. Installing as an editable is recommended, as it allows you to call command line arguments directly on the package instead of writing a frontend.

Install from Source with Conda/Mamba

Create or activate your preferred conda environment and run:

git clone https://github.com/gampnico/scintillometry.git
make install

That's it!

Install the package with optional dependencies:

make install-tests  # install with dependencies for tests
make install-docs   # install and build local documentation
make install-all    # install with tests and build local documentation
make install-dev    # install with dependencies for development

Installation uses conda if mamba is unavailable. Micromamba may also work, but is not currently supported.

Install with Pip

If conda/mamba are not your package managers, then run:

python3 -m pip install --upgrade scintillometry

Note that this installation method does not provide documentation or a Makefile, and you cannot easily use the package from the command line.

To install from source (recommended):

git clone https://github.com/gampnico/scintillometry.git
pip install -e .

Install the package with optional dependencies:

pip install -e .[tests]
pip install -e .[docs]
pip install -e .[tests,docs]    # no whitespace after comma
pip install -e .[dev]

Features

Scintillometry

Data processing:

  • Parse scintillometry data from Scintec's BLS series of large aperture scintillometers (.mnd files).
  • Recalibrate data if the scintillometer was incorrectly set up (e.g. wrong dip switch settings).
  • Parse topographical data as path transect.
  • Parse meteorological data.
  • Parse innFLUX and HATPRO data.

Metrics:

  • Calculate effective path heights under various stability conditions.
  • Derive CT2 values from Cn2 if these were not collected.
  • Estimate the time when stability conditions change.
  • Estimate the boundary layer height.
  • Compute parameters such as Obukhov length, friction velocity, etc.
  • Compute kinematic and sensible heat fluxes. Supports free convection and iteration with MOST: several sets of coefficients are available for MOST functions, based on previous studies.

Visualisation:

  • Produces time series of scintillometry and meteorological data.
  • Produces vertical profiles.
  • Produces plots for derived or iterated variables.
  • Produces comparisons between calculated parameters and external data sources.

Currently implemented MOST functions:

Footprint Climatology (Roadmap)

These features are under development.

Metrics:

  • Process 2D flux footprints generated by Natascha Kljun's online model, available here.
  • Adjust topography and stitch footprints together.

Visualisation:

  • Produce regression plots between calculated parameters and external data sources.
  • Overlay stitched footprints onto map.

Workflow

Example Workflow

This package supports SRun and Austrian-sourced data (ZAMG, InnFLUX) out-of-the-box. If your scintillometry readings were taken in Austria, use DGM 5m data to generate topographical data for the scintillometer's path coordinates. Then generate the path transects necessary for calibrating the scintillometer.

Scintillometer path coordinates must be accurate. Incorrectly generated topographical data leads to poor calibration and nonsense results!

List all available arguments with:

python3 ./src/scintillometry/main.py -h
make commands   # if you installed from source

Navigate to the package root in the terminal. Calculate and plot surface sensible heat fluxes using MOST in CET, with coefficients from Andreas (1988):

python3 ./src/scintillometry/main.py -i "./<path_to_input>/<bls_data>.mnd" \
-p "./<path_to_transect>/<transect_data>.csv" -t "CET"

If you are not using the scintillometer in Austria, you will need to find and parse topographical and meteorological data yourself. Add parsing functions to classes in wrangler/data_parsing.py to parse data from other scintillometers, organisations, or countries. A step-by-step guide on how to do this is given in the module's docstring.

Make Things Simple

If you installed from source, the provided Makefile has many uses. View all the available commands:

make help       # display help for Makefile targets
make commands   # display help for scintillometry

Run from Terminal

From the package root, pass arguments like so:

src/scintillometry/main.py [-h] [-i <input_data>] [-p <path_data>] [-d] [...] [-v]

Import as Package

Scintillometry and its submodules can be imported as Python modules:

from scintillometry.wrangler.data_parser import WranglerParsing

parser = WranglerParsing()
dataframe = parser.scintillometer.parse_scintillometer(file_path="./data.mnd")
weather = parser.weather.parse_weather(file_path="./weather.csv")
weather = parser.weather.transform.change_index_frequency(weather, "60S")

MOST functions are stored in their respective class:

from scintillometry.backend.iterations import IterationMost

iteration = IterationMost()
iteration.most_method(dataframe, eff_h, stability, coeff_id="an1988")

Many classes initialise atmospheric constants using the AtmosConstants class:

from scintillometry.metrics.calculations import MetricsWorkflow
from scintillometry.backend.constants import AtmosConstants

workflow = MetricsWorkflow()
kelvin = workflow.constants.kelvin  # 273.15
assert isinstance(workflow.constants, AtmosConstants)  # True

For more information see the API section of the documentation.

Acknowledgements

This project would not be possible without the invaluable contributions from Josef Zink, Dr. Manuela Lehner, and Dr. Helen Ward.

Metadata

Release files for scintillometry 1.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for scintillometry 1.0.5
File Size Uploaded Provenance Actions
scintillometry-1.0.5.tar.gz 101.6 kB Without provenance Details for scintillometry-1.0.5.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for scintillometry 1.0.5
File Interpreter ABI Platform Actions
scintillometry-1.0.5-py3-none-any.whl Python 3 none any Details for scintillometry-1.0.5-py3-none-any.whl

Total release size: 160.7 kB

Release files / scintillometry-1.0.5.tar.gz

Download URL scintillometry-1.0.5.tar.gz
Size 101.6 kB
Tags Source
SHA-256 checksum
How to use checksums
92d257b84d4335c85f55bde1f9d344514c810992a86618f23dbdac21234018a6
BLAKE2b-256 checksum
How to use checksums
3e89aea47ebff15a905b51550a425d6d0937b51908b19bc55b17e79eaa610eb0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.11

Release files / scintillometry-1.0.5-py3-none-any.whl

Download URL scintillometry-1.0.5-py3-none-any.whl
Size 59.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c4e9e04974ddabf6769400e1483539c1b5974b58d94eaccc9cb613bdd9a6368c
BLAKE2b-256 checksum
How to use checksums
02e32c0543b9b1fe1b49de9a86658d548fd1c82fde28fa020a7f07e3f6eedc13
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.11

Security for scintillometry 1.0.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page