No project description provided
Project description
SNOWPAT
This is a toolbox for handling file formates most often used in Snow Science.
There are 4 submodules: pysmet: Used to read and write SMET files snowpackreader: Used to read SNOWPACK output files (.pro) and handle profiles easily (soon also with visualization) SnowLense: Plotting Framework for files that can be read with this module (SMET not yet available) icsv: Read and write iCSV Files. (Next generation SMET) (see Documentation)
News
2025-03-13: It is now possible to write Snowpack objects to .pro files. (If necessary also a series of profiles, could be written to a .pro file, not implemented yet). Manual JSON profiles can be written to .pro files including stability calculations.
2025-01-06: Happy New Year! New year new bugs, please update snowpat, as a function used in the plotting is deprecated in the newest matplotlib.
2024-05-05: A module to read and write iCSV files.
2024-03-25: Installation via PyPi now possible
2024-03-08: Plotting of Snow Profiles is available with SnowLense module
2024-03-01: A simple merge function is now available to join to SMET Files: merge(SMETFile, override) and mergeFromFile(filename, override)
Installation
Installation via pip and poetry is supported.
It is as easy as:
pip install snowpat
You can also install from git (needs git to be installed) to always get the latest release:
pip install [--user] git+https://gitlabext.wsl.ch/patrick.leibersperger/snowpat.git
the --user option might be needed if you do not have admin rights.
Upgrade
If you already have an installation of Sowpat, that is out of date, run:
pip install [--user] --upgrade snowpat
pip install [--user] --upgrade git+https://gitlabext.wsl.ch/patrick.leibersperger/snowpat.git
Manually
Download the folder, and from the main directory run:
poetry install
or:
pip install [--user] .
Documentation
The main documentation can be found under the respective module names, i.e. pySMET and SMET, as well as snowpackreader
Extensive Documentation is available online, it uses http, so you might get a privacy error in your browser; Or prepuilt in artifacts.zip, whic can be found in job artifacts: under (Number) files download the folder.
If you download the zip folder just open index.html in your browser.
Or you can build the docs yourself.
MkDocs
To create the docs with MkDocs: Install via
pip install mkdocs
run:
mkdocs serve
from the main directory and follow the link shown (localhost)
License
This project is licensed under the terms of the GNU-GPL-3.0 license.
Examples
Please see the Documentation for more Examples and information on the full capabilities
from snowpat import pysmet as smet
from snowpat import snowpackreader as spr
Examples iCSV
from snowpat import icsv
file = icsv.read(filename)
data_pandas = file.data
data_xarray = file.to_xarray()
# metadata and fields can be accessed with get_attribute
field_delimiter = file.metadata.get_attribute("field_delimiter")
fields = file.fields.get_attribute("fields")
# required keys will always be present, as a sanity check is done. Any other might return None if it is not available.
# To see what metadata is available, you can print the information:
file.info() # prints information about the whole file
print(file.metadata) # prints information on the metadata only
print(file.fields) # print information on the fields section
# changing metadata
file.metadata.set_attribute("field_delimiter", ":")
# and for writing to an output again (if no output filename is provided, the given filename is used with an out flag):
file.write(out_filename)
# It is possible to convert SMET files to iCSV:
from snowpat import pysmet as smet
smet_file = smet.read(smet_filename)
icsv_file = from_smet(smet_file)
Examples pySMET
from snowpat import pysmet as smet
file = smet.read(filename)
data_pandas = file.data
data_numpy = file.toNumpy()
# meta_data only contains the mandatory SMET metadata
station_id = file.meta_data.station_id
lon = file.meta_data.location.longitude
# optional_meta_data according to the file format can be accessed like this:
timezone = file.optional_meta_data.tz
# acdd metadata (anything preceded with acdd_ or known acdd attributes are stored in acdd metadata)
acdd_creator_name = file.acdd_meta_data.get_attribute("creator_name")
# everything else is in other metadata
value = file.other_metadata["key"]
# changing metadata
file.meta_data.station_ID = "WFJ"
file.acdd_meta_data.set_attribute("creator_name", "SomeName")
# for easier access and visibility of metadata do:
file.all_meta_data # And access values by keys in this dictionary
# and for writing to an output again (if no output filename is provided, the given filename is used with an out flag):
file.write(out_filename)
# a summary is also available wih
file.info()
#UNTESTED:
# it is also possible to merge to SMET files, as long as they are compatible (metadata and fields)
other_file = smet.read(other_filename)
file.merge(other_file)
# or
list_of_files_to_merge = [filename1, filename2,filename3,...]
merged_file = smet.merge_files(list_of_files_to_merge)
Examples snowpackreader
from snowpat import snowpackreader as spr
pro = spr.readPRO("test.pro")
# print a summary of the file
pro.info()
# all available dates
dates = pro.get_all_dates()
# will only return data above the ground after this
pro.discard_below_ground(True)
# get a Snowpack object (internal data class for Profiles) on a specific date
profile = pro.get_profile_on(dates[0])
# convert it to a dataframe with minimum stability and surface hoar as metadata
# column names will be data codes, except for "0500"= height (layer boundaries)-> 2 columns: layer middle and layer thickness
profile.toDf().head()
wl = profile.weak_layer # or profile.get_param["0534"]
sh = profile.surface_hoar # pr profile.get_param["0514"]
# There is help, to deal with the DataCodes:
# per default, the names are as in the .pro Header (without units)
pro.update_name_of_code("0503", "Snow Density")
density_code = pro.name_to_code("Snow Density")
# read from JSON (as best as it can)
profile, metadata, date = spr.read_json_profile("test.json")
# write profile to .pro
metadata = {
"StationName": "Test",
"Latitude": 47.123,
"Longitude": 8.123,
"Altitude": 1234,
"SlopeAngle": 12,
"SlopeAzi": 123
}
date = datetime.datetime.now()
pro.write_pro_file("out.pro", metadata, date)
Logo was creaeted with: hotpot.ai/art-generator
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file snowpat-0.8.2.tar.gz.
File metadata
- Download URL: snowpat-0.8.2.tar.gz
- Upload date:
- Size: 479.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16dac73e2114c281fd39140cbe68a9110b6ae0bef7017550351c8e4ce30106ef
|
|
| MD5 |
576e145de15791be5929528df543cc95
|
|
| BLAKE2b-256 |
d456c0b99e08443bc9c5875a37753923931cacb5cd651ff1b9b0ec3bd8a8f6f4
|
File details
Details for the file snowpat-0.8.2-py3-none-any.whl.
File metadata
- Download URL: snowpat-0.8.2-py3-none-any.whl
- Upload date:
- Size: 496.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18bad15de841fa9e10eba9bb792042a00a6c179dca7210fa76fc8a6e8f498256
|
|
| MD5 |
33a19fb3859ec1e04b0f8ef947f59760
|
|
| BLAKE2b-256 |
46edd237fa86a5c97ba4e4c4f546844a8b015a2d5aa30d79f13940550556f743
|