From bbe824b38ad41d685f528aee7a93838f5b6e4d8d Mon Sep 17 00:00:00 2001 From: Joseph Hardin Date: Sun, 3 Dec 2017 12:02:13 -0800 Subject: [PATCH] Move to pydsd (#57) This Commit squashes many individual commits. Among them: * Minor bugfixes to plotting * Updated setup.py and moved top level source directory to pydsd * Updated README, and setup.py * Updated Test Cases * Updating documentation to refer to pydsd * Updating examples to use pydsd instead of pydisdrometer * Fixed a failing test in Image2DReader that pointed to pydisdrometer still * Fixed travis script to point to pydsd * Added ARM Vdis reader * Updates to versioneer setup * Updated manifest to include description. Apparently versioneer remved it? * setup.py inlined description. Not sure what is causing this break * Updated README to add Nick in * Added fit to installer * Fixed a bug introduced by a change in numpy 1.13. pcolormesh no longer accepts masked arrays as coordinates arguments * Added a make clean to docs to ensure old files are not used * Updated docs to point to pydsd as well now * Fixed one of the examples that had a fixed path * Fixed an example. Still need to find a better test file for it --- .gitattributes | 1 + .travis.yml | 10 +- MANIFEST.in | 5 +- README.md | 12 +- continuous_integration/build_docs.sh | 3 +- docs/Makefile | 8 +- docs/source/conf.py | 24 ++-- docs/source/index.rst | 10 +- ...r.aux_readers.rst => pydsd.aux_reader.rst} | 8 +- ...{pydisdrometer.plot.rst => pydsd.plot.rst} | 4 +- docs/source/{pydisdrometer.rst => pydsd.rst} | 22 ++-- examples/README.txt | 4 +- examples/plot_basic_example.py | 4 +- examples/plot_dsd.py | 28 +++++ pydisdrometer/tests/test_DSR.py | 5 - pydisdrometer/tests/test_pydisdrometer.py | 9 -- {pydisdrometer => pydsd}/DSDProcessor.py | 0 {pydisdrometer => pydsd}/DSR.py | 0 .../DropSizeDistribution.py | 0 {pydisdrometer => pydsd}/__init__.py | 1 + {pydisdrometer => pydsd}/_version.py | 4 +- .../aux_readers/ARM_APU_reader.py | 0 .../aux_readers/ARM_JWD_Reader.py | 0 pydsd/aux_readers/ARM_Vdis_Reader.py | 117 ++++++++++++++++++ .../aux_readers/GPMApuWallopsRawReader.py | 0 .../aux_readers/NASA_2DVD_reader.py | 0 .../aux_readers/__init__.py | 0 .../aux_readers/read_2ds.py | 0 .../aux_readers/read_hvps.py | 0 {pydisdrometer => pydsd}/fit/__init__.py | 0 {pydisdrometer => pydsd}/fit/ua98.py | 0 {pydisdrometer => pydsd}/io/Image2DReader.py | 2 +- {pydisdrometer => pydsd}/io/JWDReader.py | 0 .../io/ParsivelNasaGVReader.py | 0 {pydisdrometer => pydsd}/io/ParsivelReader.py | 0 {pydisdrometer => pydsd}/io/__init__.py | 0 {pydisdrometer => pydsd}/io/common.py | 0 .../parsivel_conditional_matrix.txt | 0 .../partition/__init__.py | 0 .../partition/cs_partition.py | 0 {pydisdrometer => pydsd}/plot/__init__.py | 0 {pydisdrometer => pydsd}/plot/plot.py | 5 +- {pydisdrometer => pydsd}/tests/__init__.py | 0 .../tests/testARM_JWD_Reader.py | 0 .../tests/testConfiguration.py | 0 .../tests/testNasa2DVDReader_iphex.py | 2 +- .../tests/testNasa2DVDReader_mc3e.py | 2 +- pydsd/tests/test_DSR.py | 5 + .../tests/test_DropSizeDistribution.py | 0 .../tests/test_Image2DReader.py | 0 .../tests/test_ParsivelNasaGVReader.py | 2 +- .../tests/test_ParsivelReader.py | 2 +- .../tests/test_dielectric.py | 0 {pydisdrometer => pydsd}/tests/test_expfit.py | 0 {pydisdrometer => pydsd}/tests/test_plot.py | 0 pydsd/tests/test_pydisdrometer.py | 9 ++ {pydisdrometer => pydsd}/tests/test_ua98.py | 2 +- {pydisdrometer => pydsd}/utility/__init__.py | 0 .../utility/configuration.py | 0 .../utility/dielectric.py | 0 {pydisdrometer => pydsd}/utility/expfit.py | 0 .../utility/metadata.json | 0 .../utility/ts_utility.py | 0 setup.cfg | 4 +- setup.py | 27 ++-- 65 files changed, 245 insertions(+), 96 deletions(-) rename docs/source/{pydisdrometer.aux_readers.rst => pydsd.aux_reader.rst} (67%) rename docs/source/{pydisdrometer.plot.rst => pydsd.plot.rst} (82%) rename docs/source/{pydisdrometer.rst => pydsd.rst} (69%) create mode 100644 examples/plot_dsd.py delete mode 100644 pydisdrometer/tests/test_DSR.py delete mode 100644 pydisdrometer/tests/test_pydisdrometer.py rename {pydisdrometer => pydsd}/DSDProcessor.py (100%) rename {pydisdrometer => pydsd}/DSR.py (100%) rename {pydisdrometer => pydsd}/DropSizeDistribution.py (100%) rename {pydisdrometer => pydsd}/__init__.py (93%) rename {pydisdrometer => pydsd}/_version.py (99%) rename {pydisdrometer => pydsd}/aux_readers/ARM_APU_reader.py (100%) rename {pydisdrometer => pydsd}/aux_readers/ARM_JWD_Reader.py (100%) create mode 100644 pydsd/aux_readers/ARM_Vdis_Reader.py rename {pydisdrometer => pydsd}/aux_readers/GPMApuWallopsRawReader.py (100%) rename {pydisdrometer => pydsd}/aux_readers/NASA_2DVD_reader.py (100%) rename {pydisdrometer => pydsd}/aux_readers/__init__.py (100%) rename {pydisdrometer => pydsd}/aux_readers/read_2ds.py (100%) rename {pydisdrometer => pydsd}/aux_readers/read_hvps.py (100%) rename {pydisdrometer => pydsd}/fit/__init__.py (100%) rename {pydisdrometer => pydsd}/fit/ua98.py (100%) rename {pydisdrometer => pydsd}/io/Image2DReader.py (99%) rename {pydisdrometer => pydsd}/io/JWDReader.py (100%) rename {pydisdrometer => pydsd}/io/ParsivelNasaGVReader.py (100%) rename {pydisdrometer => pydsd}/io/ParsivelReader.py (100%) rename {pydisdrometer => pydsd}/io/__init__.py (100%) rename {pydisdrometer => pydsd}/io/common.py (100%) rename {pydisdrometer => pydsd}/parsivel_conditional_matrix.txt (100%) rename {pydisdrometer => pydsd}/partition/__init__.py (100%) rename {pydisdrometer => pydsd}/partition/cs_partition.py (100%) rename {pydisdrometer => pydsd}/plot/__init__.py (100%) rename {pydisdrometer => pydsd}/plot/plot.py (98%) rename {pydisdrometer => pydsd}/tests/__init__.py (100%) rename {pydisdrometer => pydsd}/tests/testARM_JWD_Reader.py (100%) rename {pydisdrometer => pydsd}/tests/testConfiguration.py (100%) rename {pydisdrometer => pydsd}/tests/testNasa2DVDReader_iphex.py (93%) rename {pydisdrometer => pydsd}/tests/testNasa2DVDReader_mc3e.py (93%) create mode 100644 pydsd/tests/test_DSR.py rename {pydisdrometer => pydsd}/tests/test_DropSizeDistribution.py (100%) rename {pydisdrometer => pydsd}/tests/test_Image2DReader.py (100%) rename {pydisdrometer => pydsd}/tests/test_ParsivelNasaGVReader.py (98%) rename {pydisdrometer => pydsd}/tests/test_ParsivelReader.py (96%) rename {pydisdrometer => pydsd}/tests/test_dielectric.py (100%) rename {pydisdrometer => pydsd}/tests/test_expfit.py (100%) rename {pydisdrometer => pydsd}/tests/test_plot.py (100%) create mode 100644 pydsd/tests/test_pydisdrometer.py rename {pydisdrometer => pydsd}/tests/test_ua98.py (98%) rename {pydisdrometer => pydsd}/utility/__init__.py (100%) rename {pydisdrometer => pydsd}/utility/configuration.py (100%) rename {pydisdrometer => pydsd}/utility/dielectric.py (100%) rename {pydisdrometer => pydsd}/utility/expfit.py (100%) rename {pydisdrometer => pydsd}/utility/metadata.json (100%) rename {pydisdrometer => pydsd}/utility/ts_utility.py (100%) diff --git a/.gitattributes b/.gitattributes index e2cb95e..29e7f8d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ pydisdrometer/_version.py export-subst +pydsd/_version.py export-subst diff --git a/.travis.yml b/.travis.yml index fad7cc1..80e9a4f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,27 +13,27 @@ matrix: - python: '2.7' env: - PYTHON_VERSION="2.7" - - NOSE_ARGS="-v --no-skip --with-cov --cov pydisdrometer pydisdrometer" + - NOSE_ARGS="-v --no-skip --with-cov --cov pydsd pydsd" - COVERALLS="true" - python: '3.4' env: - PYTHON_VERSION="3.4" - - NOSE_ARGS="-v --no-skip --with-cov --cov pydisdrometer pydisdrometer" + - NOSE_ARGS="-v --no-skip --with-cov --cov pydsd pydsd" - COVERALLS="true" - python: '3.5' env: - PYTHON_VERSION="3.5" - - NOSE_ARGS="-v --no-skip --with-cov --cov pydisdrometer pydisdrometer" + - NOSE_ARGS="-v --no-skip --with-cov --cov pydsd pydsd" - COVERALLS="true" - python: '3.6' env: - PYTHON_VERSION="3.6" - - NOSE_ARGS="-v --no-skip --with-cov --cov pydisdrometer pydisdrometer" + - NOSE_ARGS="-v --no-skip --with-cov --cov pydsd pydsd" - COVERALLS="true" - python: '3.6' env: - PYTHON_VERSION="3.6" - - NOSE_ARGS="-v --no-skip --with-cov --cov pydisdrometer pydisdrometer" + - NOSE_ARGS="-v --no-skip --with-cov --cov pydsd pydsd" - COVERALLS="true" - DOC_BUILD="true" before_install: diff --git a/MANIFEST.in b/MANIFEST.in index 387000c..367dc3e 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,4 @@ -include pydisdrometer/utility/metadata.json +include pydsd/utility/metadata.json include versioneer.py -include pydisdrometer/_version.py +include pydsd/_version.py +include description.txt diff --git a/README.md b/README.md index 09fc50a..ee0acb6 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# PyDisdrometer +# PyDSD [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.9991.svg)](https://doi.org/10.5281/zenodo.9991) -[![Coverage Status](https://coveralls.io/repos/github/josephhardinee/PyDisdrometer/badge.svg?branch=master)](https://coveralls.io/github/josephhardinee/PyDisdrometer?branch=master) +[![Coverage Status](https://coveralls.io/repos/github/josephhardinee/PyDSD/badge.svg?branch=master)](https://coveralls.io/github/josephhardinee/PyDSD?branch=master) -PyDisdrometer is a Python package to process disdrometer files. It currently is capable of reading several different types of disdrometer formats, with more being added regularly. It currently supports the following functionality: +PyDSD is a Python package to process disdrometer files. It currently is capable of reading several different types of disdrometer formats, with more being added regularly. It currently supports the following functionality: 1) File Reading 2) Microphysics Estimation 3) T-Matrix Scattering of Radar Parameters @@ -12,7 +12,7 @@ PyDisdrometer is a Python package to process disdrometer files. It currently is It currently supports OTT Parsivel disdrometers, Joss Waldvogel Disdrometers, 2DVD files, and HVPS and 2DS airborne disdrometers. -Author: Joseph C. Hardin +Author: Joseph C. Hardin, Nick Guy ## Usage @@ -36,13 +36,13 @@ The scattered fields will be stored in the fields dictionary of the dsd object. plot(dsd.time, dsd.fields['Zh']['data']) ``` -For more information, please see the examples in the Notebooks directory. Additionally you can find some initial documentation at [PyDisdrometer Documentation](http://josephhardinee.github.io/PyDisdrometer) +For more information, please see the examples in the Notebooks directory. Additionally you can find some initial documentation at [PyDSD Documentation](http://josephhardinee.github.io/PyDSD) Requirements: This library currently requires the normal scientific python stack(numpy+scipy+matplotlib) It also requires the [PyTMatrix Package](https://github.com/jleinonen/pytmatrix). -We welcome contributions from all users. Please see the examples in Notebooks for a more indepth guide on how to use PyDisdrometer. +We welcome contributions from all users. Please see the examples in Notebooks for a more indepth guide on how to use PyDSD. ## User Group There is now a pydisdrometer user group mailing list at diff --git a/continuous_integration/build_docs.sh b/continuous_integration/build_docs.sh index 75e926e..f898b03 100644 --- a/continuous_integration/build_docs.sh +++ b/continuous_integration/build_docs.sh @@ -1,6 +1,7 @@ set -e pip install doctr pillow cd docs +make clean make html cd .. -doctr deploy . \ No newline at end of file +doctr deploy . diff --git a/docs/Makefile b/docs/Makefile index 4b7224d..452908c 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -85,17 +85,17 @@ qthelp: @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PyDisdrometer.qhcp" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PyDSD.qhcp" @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PyDisdrometer.qhc" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PyDSD.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/PyDisdrometer" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PyDisdrometer" + @echo "# mkdir -p $$HOME/.local/share/devhelp/PyDSD" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PyDSD" @echo "# devhelp" epub: diff --git a/docs/source/conf.py b/docs/source/conf.py index 2e79fa5..a650f1d 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# PyDisdrometer documentation build configuration file, created by +# PyDSD documentation build configuration file, created by # sphinx-quickstart on Tue Jul 29 15:22:22 2014. # # This file is execfile()d with the current directory set to its @@ -59,7 +59,7 @@ master_doc = 'index' # General information about the project. -project = u'PyDisdrometer' +project = u'PyDSD' copyright = u'2014, Joseph C. Hardin' # The version info for the project you're documenting, acts as replacement for @@ -192,7 +192,7 @@ #html_file_suffix = None # Output file base name for HTML help builder. -htmlhelp_basename = 'PyDisdrometerdoc' +htmlhelp_basename = 'PyDSDdoc' # -- Options for LaTeX output --------------------------------------------- @@ -212,7 +212,7 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - ('index', 'PyDisdrometer.tex', u'PyDisdrometer Documentation', + ('index', 'PyDSD.tex', u'PyDSD Documentation', u'Joseph C. Hardin', 'manual'), ] @@ -242,7 +242,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - ('index', 'pydisdrometer', u'PyDisdrometer Documentation', + ('index', 'pydsd', u'PyDSD Documentation', [u'Joseph C. Hardin'], 1) ] @@ -256,8 +256,8 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - ('index', 'PyDisdrometer', u'PyDisdrometer Documentation', - u'Joseph C. Hardin', 'PyDisdrometer', 'One line description of project.', + ('index', 'PyDSD', u'PyDSD Documentation', + u'Joseph C. Hardin', 'PyDSD', 'One line description of project.', 'Miscellaneous'), ] @@ -277,13 +277,13 @@ # -- Options for Epub output ---------------------------------------------- # Bibliographic Dublin Core info. -epub_title = u'PyDisdrometer' -epub_author = u'Joseph C. Hardin' -epub_publisher = u'Joseph C. Hardin' -epub_copyright = u'2014, Joseph C. Hardin' +epub_title = u'PyDSD' +epub_author = u'Joseph C. Hardin, Nick Guy' +epub_publisher = u'Joseph C. Hardin, Nick Guy' +epub_copyright = u'2014, Joseph C. Hardin, Nick Guy' # The basename for the epub file. It defaults to the project name. -#epub_basename = u'PyDisdrometer' +#epub_basename = u'PyDSD' # The HTML theme for the epub output. Since the default themes are not optimized # for small screen space, using the same theme for HTML and epub output is diff --git a/docs/source/index.rst b/docs/source/index.rst index b532c4f..b47fdc2 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,9 +1,9 @@ -.. PyDisdrometer documentation master file, created by +.. PyDSD documentation master file, created by sphinx-quickstart on Tue Jul 29 15:22:22 2014. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Welcome to PyDisdrometer's documentation! +Welcome to PyDSD's documentation! ========================================= Contents: @@ -13,9 +13,9 @@ Contents: source/auto_examples/index - pydisdrometer.rst - pydisdrometer.aux_readers.rst - pydisdrometer.plot.rst + pydsd.rst + pydsd.aux_readers.rst + pydsd.plot.rst Indices and tables ================== diff --git a/docs/source/pydisdrometer.aux_readers.rst b/docs/source/pydsd.aux_reader.rst similarity index 67% rename from docs/source/pydisdrometer.aux_readers.rst rename to docs/source/pydsd.aux_reader.rst index 815329c..bbb2b50 100644 --- a/docs/source/pydisdrometer.aux_readers.rst +++ b/docs/source/pydsd.aux_reader.rst @@ -1,11 +1,11 @@ -:mod:`pydisdrometer.aux_readers` +:mod:`pydsd.aux_readers` ================================= Module contents --------------- -.. automodule:: pydisdrometer.aux_readers +.. automodule:: pydsd.aux_readers :members: :undoc-members: :show-inheritance: @@ -13,7 +13,7 @@ Module contents :mod:`GPMApuWallopsRawReader` -------------------------------------------------------- -.. automodule:: pydisdrometer.aux_readers.GPMApuWallopsRawReader +.. automodule:: pydsd.aux_readers.GPMApuWallopsRawReader :members: :undoc-members: :show-inheritance: @@ -21,7 +21,7 @@ Module contents :mod:`NASA_2DVD_reader` ------------------------------------------------- -.. automodule:: pydisdrometer.aux_readers.NASA_2DVD_reader +.. automodule:: pydsd.aux_readers.NASA_2DVD_reader :members: :undoc-members: :show-inheritance: diff --git a/docs/source/pydisdrometer.plot.rst b/docs/source/pydsd.plot.rst similarity index 82% rename from docs/source/pydisdrometer.plot.rst rename to docs/source/pydsd.plot.rst index 4724231..1381222 100644 --- a/docs/source/pydisdrometer.plot.rst +++ b/docs/source/pydsd.plot.rst @@ -5,14 +5,14 @@ This module contains plotting functions for the `DropSizeDistribution` object. Module contents --------------- -.. automodule:: pydisdrometer.plot +.. automodule:: pydsd.plot :members: :undoc-members: :show-inheritance: :mod:`dsd_plots` -------------------------------------------------------- -.. automodule:: pydisdrometer.plot.plot +.. automodule:: pydsd.plot.plot :members: :undoc-members: :show-inheritance: diff --git a/docs/source/pydisdrometer.rst b/docs/source/pydsd.rst similarity index 69% rename from docs/source/pydisdrometer.rst rename to docs/source/pydsd.rst index e160d07..f5a13e0 100644 --- a/docs/source/pydisdrometer.rst +++ b/docs/source/pydsd.rst @@ -1,4 +1,4 @@ -pydisdrometer package +pydsd package ===================== Subpackages @@ -6,8 +6,8 @@ Subpackages .. toctree:: - pydisdrometer.aux_readers - pydisdrometer.plot + pydsd.aux_readers + pydsd.plot Submodules ---------- @@ -15,7 +15,7 @@ Submodules DSDProcessor module --------------------------------- -.. automodule:: pydisdrometer.DSDProcessor +.. automodule:: pydsd.DSDProcessor :members: :undoc-members: :show-inheritance: @@ -23,7 +23,7 @@ DSDProcessor module DSR module ------------------------ -.. automodule:: pydisdrometer.DSR +.. automodule:: pydsd.DSR :members: :undoc-members: :show-inheritance: @@ -31,7 +31,7 @@ DSR module DropSizeDistribution module ----------------------------------------- -.. automodule:: pydisdrometer.DropSizeDistribution +.. automodule:: pydsd.DropSizeDistribution :members: :undoc-members: :show-inheritance: @@ -39,7 +39,7 @@ DropSizeDistribution module JWDReader module ------------------------------ -.. automodule:: pydisdrometer.io.JWDReader +.. automodule:: pydsd.io.JWDReader :members: :undoc-members: :show-inheritance: @@ -47,7 +47,7 @@ JWDReader module ParsivelNasaGVReader module ----------------------------------------- -.. automodule:: pydisdrometer.io.ParsivelNasaGVReader +.. automodule:: pydsd.io.ParsivelNasaGVReader :members: :undoc-members: :show-inheritance: @@ -55,7 +55,7 @@ ParsivelNasaGVReader module ParsivelReader module ----------------------------------- -.. automodule:: pydisdrometer.io.ParsivelReader +.. automodule:: pydsd.io.ParsivelReader :members: :undoc-members: :show-inheritance: @@ -63,7 +63,7 @@ ParsivelReader module expfit module -------------------------- -.. automodule:: pydisdrometer.utility.expfit +.. automodule:: pydsd.utility.expfit :members: :undoc-members: :show-inheritance: @@ -72,7 +72,7 @@ expfit module Module contents --------------- -.. automodule:: pydisdrometer +.. automodule:: pydsd :members: :undoc-members: :show-inheritance: diff --git a/examples/README.txt b/examples/README.txt index def31ac..754cdc3 100644 --- a/examples/README.txt +++ b/examples/README.txt @@ -1,4 +1,4 @@ -PyDisdrometer Example Gallery +PyDSD Example Gallery ----------------------------- -PyDisdrometer Example Gallery. \ No newline at end of file +PyDSD Example Gallery. diff --git a/examples/plot_basic_example.py b/examples/plot_basic_example.py index 9a0ca58..026d0d5 100644 --- a/examples/plot_basic_example.py +++ b/examples/plot_basic_example.py @@ -2,14 +2,14 @@ Simple Example -------------- -A simple example using PyDisdrometer. This example reads in a OTT APU Disdrometer file, calculates the radar variables, and plots a few of them. +A simple example using PyDSD. This example reads in a OTT APU Disdrometer file, calculates the radar variables, and plots a few of them. Author: Joseph C. Hardin """ import numpy as np import matplotlib.pyplot as plt -import pydisdrometer as pyd +import pydsd as pyd filename = '../testdata/sgpdisdrometerC1.b1.20110427.000000_test_jwd_b1.cdf' diff --git a/examples/plot_dsd.py b/examples/plot_dsd.py new file mode 100644 index 0000000..0eba042 --- /dev/null +++ b/examples/plot_dsd.py @@ -0,0 +1,28 @@ +""" +Simple Example +-------------- + +A simple example using PyDSD. This example reads in a OTT APU Disdrometer file, calculates the radar variables, and plots a few of them. +Author: Joseph C. Hardin +""" + +import numpy as np +import matplotlib.pyplot as plt + +import pydsd as pyd + +filename = '../testdata/sgpdisdrometerC1.b1.20110427.000000_test_jwd_b1.cdf' +dsd = pyd.read_arm_jwd_b1(filename) +#dsd = pyd.read_parsivel_nasa_gv(filename) +#Read in the Parsivel File +dsd.calculate_dsd_parameterization() +fig = plt.figure(figsize=(8,8)) + +# pyd.plot.plot_dsd(dsd) +pyd.plot.plot_NwD0(dsd) +plt.title('Drop Size Distribution') + +plt.show() + + + diff --git a/pydisdrometer/tests/test_DSR.py b/pydisdrometer/tests/test_DSR.py deleted file mode 100644 index b101c4b..0000000 --- a/pydisdrometer/tests/test_DSR.py +++ /dev/null @@ -1,5 +0,0 @@ -import pydisdrometer - - -def test_tb(): - assert pydisdrometer.DSR.tb(2) > 0 diff --git a/pydisdrometer/tests/test_pydisdrometer.py b/pydisdrometer/tests/test_pydisdrometer.py deleted file mode 100644 index 2720539..0000000 --- a/pydisdrometer/tests/test_pydisdrometer.py +++ /dev/null @@ -1,9 +0,0 @@ -import pydisdrometer -from unittest import TestCase - - -class TestPyDisdrometerOverall(TestCase): - - def test_import(self): - """ PyDisdrometerOverall: Test whether the PyDisdrometer can be imported properly""" - import pydisdrometer diff --git a/pydisdrometer/DSDProcessor.py b/pydsd/DSDProcessor.py similarity index 100% rename from pydisdrometer/DSDProcessor.py rename to pydsd/DSDProcessor.py diff --git a/pydisdrometer/DSR.py b/pydsd/DSR.py similarity index 100% rename from pydisdrometer/DSR.py rename to pydsd/DSR.py diff --git a/pydisdrometer/DropSizeDistribution.py b/pydsd/DropSizeDistribution.py similarity index 100% rename from pydisdrometer/DropSizeDistribution.py rename to pydsd/DropSizeDistribution.py diff --git a/pydisdrometer/__init__.py b/pydsd/__init__.py similarity index 93% rename from pydisdrometer/__init__.py rename to pydsd/__init__.py index 09176d7..228f389 100644 --- a/pydisdrometer/__init__.py +++ b/pydsd/__init__.py @@ -10,6 +10,7 @@ from .aux_readers.read_2ds import read_2ds from .aux_readers.read_hvps import read_hvps from .aux_readers.ARM_JWD_Reader import read_arm_jwd_b1 +from .aux_readers.ARM_Vdis_Reader import read_arm_vdis_b1 from . import partition from . import utility diff --git a/pydisdrometer/_version.py b/pydsd/_version.py similarity index 99% rename from pydisdrometer/_version.py rename to pydsd/_version.py index f7e2291..2ae69f4 100644 --- a/pydisdrometer/_version.py +++ b/pydsd/_version.py @@ -42,8 +42,8 @@ def get_config(): cfg.VCS = "git" cfg.style = "pep440" cfg.tag_prefix = "" - cfg.parentdir_prefix = "pydisdrometer-" - cfg.versionfile_source = "pydisdrometer/_version.py" + cfg.parentdir_prefix = "pydsd-" + cfg.versionfile_source = "pydsd/_version.py" cfg.verbose = False return cfg diff --git a/pydisdrometer/aux_readers/ARM_APU_reader.py b/pydsd/aux_readers/ARM_APU_reader.py similarity index 100% rename from pydisdrometer/aux_readers/ARM_APU_reader.py rename to pydsd/aux_readers/ARM_APU_reader.py diff --git a/pydisdrometer/aux_readers/ARM_JWD_Reader.py b/pydsd/aux_readers/ARM_JWD_Reader.py similarity index 100% rename from pydisdrometer/aux_readers/ARM_JWD_Reader.py rename to pydsd/aux_readers/ARM_JWD_Reader.py diff --git a/pydsd/aux_readers/ARM_Vdis_Reader.py b/pydsd/aux_readers/ARM_Vdis_Reader.py new file mode 100644 index 0000000..dac9964 --- /dev/null +++ b/pydsd/aux_readers/ARM_Vdis_Reader.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +import numpy as np +import numpy.ma as ma +import itertools +import scipy.optimize +from pytmatrix.psd import GammaPSD +import csv +import datetime +from netCDF4 import Dataset + +from ..DropSizeDistribution import DropSizeDistribution +from ..io import common +import os + + +def read_arm_vdis_b1(filename): + ''' + Takes a filename pointing to an ARM vdis netcdf file and returns + a drop size distribution object. Tested on MC3E data. + + Usage: + dsd = read_parsivel_parsivel_netcdf(filename) + + Returns: + DropSizeDistrometer object + + ''' + + reader = ArmVdisReader(filename) + + if reader: + return DropSizeDistribution(reader) + else: + return None + + del (reader) + + +class ArmVdisReader(object): + ''' + This class reads and parses parsivel disdrometer data from ARM netcdf + files. These conform to document (Need Document). + + Use the read_arm_jwd_b1() function to interface with this. + ''' + + def __init__(self, filename): + ''' + Handles setting up a reader. + ''' + self.fields = {} + self.info = {} + + self.nc_dataset = Dataset(filename) + self.filename = filename + + time = np.ma.array(self.nc_dataset.variables['time_offset'][:] + self.nc_dataset.variables['base_time'][:]) + self.time = self._get_epoch_time(time) + + Nd = np.ma.array( + self.nc_dataset.variables['num_density'][:]) + # velocity = np.ma.array( + # self.nc_dataset.variables['fall_vel'][:]) + # rain_rate = np.ma.array( + # self.nc_dataset.variables['rain_rate'][:]) + self.diameter = np.ma.array(self.nc_dataset.variables['drop_diameter'][:]) + self.spread = np.ma.array(self.nc_dataset.variables['delta_diam'][:]) + + # TODO: Move this to new metadata utility, and just add information from raw netcdf where appropriate + self.bin_edges = common.var_to_dict( + 'bin_edges', + np.hstack((0, self.diameter + np.array(self.spread) / 2)), + 'mm', 'Boundaries of bin sizes') + self.spread = common.var_to_dict( + 'spread', self.spread, + 'mm', 'Bin size spread of bins') + self.diameter = common.var_to_dict( + 'diameter', self.diameter, + 'mm', 'Particle diameter of bins') + + self.fields['Nd'] = common.var_to_dict( + 'Nd', Nd, 'm^-3 mm^-1', + 'Liquid water particle concentration') + self.fields['velocity'] = common.var_to_dict( + 'velocity', velocity, 'm s^-1', + 'Terminal fall velocity for each bin') + self.fields['rain_rate'] = common.var_to_dict( + 'rain_rate', rain_rate, 'mm h^-1', + 'Rain rate') + # + # self.fields['num_drop'] = common.var_to_dict( + # "num_drop", self.nc_dataset.variables['num_drop'][:], '#', + # "Number of Drops") + + # self.fields['d_max'] = common.var_to_dict( + # "d_max", self.nc_dataset.variables['d_max'][:],"mm", + # "Diameter of largest drop" + # ) + # self.fields['liq_water'] = common.var_to_dict( + # "liq_water", self.nc_dataset.variables['liq_water'][:], + # "gm/m^3", "Liquid water content") + + self.fields['n_0'] = common.var_to_dict( + "n_0", self.nc_dataset.variables['n_0'][:], + "1/(m^3-mm)", "Distribution Intercept") + self.fields['lambda'] = common.var_to_dict( + "lambda", self.nc_dataset.variables['lambda'][:], + "1/mm", "Distribution Slope") + + for key in self.nc_dataset.ncattrs(): + self.info[key] =self.nc_dataset.getncattr(key) + + def _get_epoch_time(self, sample_times): + """Convert time to epoch time and return a dictionary.""" + eptime = {'data': sample_times, 'units': common.EPOCH_UNITS, + 'standard_name': 'Time', 'long_name': 'Time (UTC)'} + return eptime diff --git a/pydisdrometer/aux_readers/GPMApuWallopsRawReader.py b/pydsd/aux_readers/GPMApuWallopsRawReader.py similarity index 100% rename from pydisdrometer/aux_readers/GPMApuWallopsRawReader.py rename to pydsd/aux_readers/GPMApuWallopsRawReader.py diff --git a/pydisdrometer/aux_readers/NASA_2DVD_reader.py b/pydsd/aux_readers/NASA_2DVD_reader.py similarity index 100% rename from pydisdrometer/aux_readers/NASA_2DVD_reader.py rename to pydsd/aux_readers/NASA_2DVD_reader.py diff --git a/pydisdrometer/aux_readers/__init__.py b/pydsd/aux_readers/__init__.py similarity index 100% rename from pydisdrometer/aux_readers/__init__.py rename to pydsd/aux_readers/__init__.py diff --git a/pydisdrometer/aux_readers/read_2ds.py b/pydsd/aux_readers/read_2ds.py similarity index 100% rename from pydisdrometer/aux_readers/read_2ds.py rename to pydsd/aux_readers/read_2ds.py diff --git a/pydisdrometer/aux_readers/read_hvps.py b/pydsd/aux_readers/read_hvps.py similarity index 100% rename from pydisdrometer/aux_readers/read_hvps.py rename to pydsd/aux_readers/read_hvps.py diff --git a/pydisdrometer/fit/__init__.py b/pydsd/fit/__init__.py similarity index 100% rename from pydisdrometer/fit/__init__.py rename to pydsd/fit/__init__.py diff --git a/pydisdrometer/fit/ua98.py b/pydsd/fit/ua98.py similarity index 100% rename from pydisdrometer/fit/ua98.py rename to pydsd/fit/ua98.py diff --git a/pydisdrometer/io/Image2DReader.py b/pydsd/io/Image2DReader.py similarity index 99% rename from pydisdrometer/io/Image2DReader.py rename to pydsd/io/Image2DReader.py index 323d050..9130ce2 100644 --- a/pydisdrometer/io/Image2DReader.py +++ b/pydsd/io/Image2DReader.py @@ -5,7 +5,7 @@ import numpy as np import scipy.interpolate as sinterp -from pydisdrometer.io.common import get_epoch_time +from pydsd.io.common import get_epoch_time from . import common from ..DropSizeDistribution import DropSizeDistribution diff --git a/pydisdrometer/io/JWDReader.py b/pydsd/io/JWDReader.py similarity index 100% rename from pydisdrometer/io/JWDReader.py rename to pydsd/io/JWDReader.py diff --git a/pydisdrometer/io/ParsivelNasaGVReader.py b/pydsd/io/ParsivelNasaGVReader.py similarity index 100% rename from pydisdrometer/io/ParsivelNasaGVReader.py rename to pydsd/io/ParsivelNasaGVReader.py diff --git a/pydisdrometer/io/ParsivelReader.py b/pydsd/io/ParsivelReader.py similarity index 100% rename from pydisdrometer/io/ParsivelReader.py rename to pydsd/io/ParsivelReader.py diff --git a/pydisdrometer/io/__init__.py b/pydsd/io/__init__.py similarity index 100% rename from pydisdrometer/io/__init__.py rename to pydsd/io/__init__.py diff --git a/pydisdrometer/io/common.py b/pydsd/io/common.py similarity index 100% rename from pydisdrometer/io/common.py rename to pydsd/io/common.py diff --git a/pydisdrometer/parsivel_conditional_matrix.txt b/pydsd/parsivel_conditional_matrix.txt similarity index 100% rename from pydisdrometer/parsivel_conditional_matrix.txt rename to pydsd/parsivel_conditional_matrix.txt diff --git a/pydisdrometer/partition/__init__.py b/pydsd/partition/__init__.py similarity index 100% rename from pydisdrometer/partition/__init__.py rename to pydsd/partition/__init__.py diff --git a/pydisdrometer/partition/cs_partition.py b/pydsd/partition/cs_partition.py similarity index 100% rename from pydisdrometer/partition/cs_partition.py rename to pydsd/partition/cs_partition.py diff --git a/pydisdrometer/plot/__init__.py b/pydsd/plot/__init__.py similarity index 100% rename from pydisdrometer/plot/__init__.py rename to pydsd/plot/__init__.py diff --git a/pydisdrometer/plot/plot.py b/pydsd/plot/plot.py similarity index 98% rename from pydisdrometer/plot/plot.py rename to pydsd/plot/plot.py index 7f4f474..bd785b9 100644 --- a/pydisdrometer/plot/plot.py +++ b/pydsd/plot/plot.py @@ -56,7 +56,8 @@ def plot_dsd(dsd, xlims=None, ylims=None, log_scale=True, tighten=True, norm = mpl.colors.LogNorm(vmin=vmin, vmax=vmax) else: norm = None - plt.pcolormesh(dsd.time['data'], dsd.diameter['data'], dsd.fields['Nd']['data'].T, + import pdb; pdb.set_trace() + plt.pcolormesh(dsd.time['data'].filled(), dsd.diameter['data'].filled(), dsd.fields['Nd']['data'].T, vmin=vmin, vmax=vmax, figure=fig, norm=norm, cmap=cmap) @@ -107,7 +108,7 @@ def plot_NwD0(dsd, col='k', msize=20, edgecolors='none', title=None, xlab = r'D$_0$ (mm)' ylab = r'log$_{10}$[N$_w$] (mm$^{-1}$ m$^{-3}$)' - fig, ax = scatter(dsd.fields['Nw']['data'], dsd.fields['D0']['data'], col=col, msize=msize, + fig, ax = scatter(np.log10(dsd.fields['Nw']['data']), dsd.fields['D0']['data'], col=col, msize=msize, edgecolors=edgecolors, title=title, ax=ax, fig=fig, **kwargs) ax.set_xlabel(xlab) diff --git a/pydisdrometer/tests/__init__.py b/pydsd/tests/__init__.py similarity index 100% rename from pydisdrometer/tests/__init__.py rename to pydsd/tests/__init__.py diff --git a/pydisdrometer/tests/testARM_JWD_Reader.py b/pydsd/tests/testARM_JWD_Reader.py similarity index 100% rename from pydisdrometer/tests/testARM_JWD_Reader.py rename to pydsd/tests/testARM_JWD_Reader.py diff --git a/pydisdrometer/tests/testConfiguration.py b/pydsd/tests/testConfiguration.py similarity index 100% rename from pydisdrometer/tests/testConfiguration.py rename to pydsd/tests/testConfiguration.py diff --git a/pydisdrometer/tests/testNasa2DVDReader_iphex.py b/pydsd/tests/testNasa2DVDReader_iphex.py similarity index 93% rename from pydisdrometer/tests/testNasa2DVDReader_iphex.py rename to pydsd/tests/testNasa2DVDReader_iphex.py index 3d12241..a97aee8 100644 --- a/pydisdrometer/tests/testNasa2DVDReader_iphex.py +++ b/pydsd/tests/testNasa2DVDReader_iphex.py @@ -4,7 +4,7 @@ from ..aux_readers import NASA_2DVD_reader class TestNasa2DvdReaderIphexSubcase(unittest.TestCase): - 'Test module for the NASA_2DVD_reader class in pydisdrometer.aux_io.NASA_2DVD_reader for ifloods file' + 'Test module for the NASA_2DVD_reader class in pydsd.aux_io.NASA_2DVD_reader for ifloods file' def setUp(self): filename = 'testdata/nasa_gv_iphex_2dvd_test.txt' diff --git a/pydisdrometer/tests/testNasa2DVDReader_mc3e.py b/pydsd/tests/testNasa2DVDReader_mc3e.py similarity index 93% rename from pydisdrometer/tests/testNasa2DVDReader_mc3e.py rename to pydsd/tests/testNasa2DVDReader_mc3e.py index ef88df5..c8620b6 100644 --- a/pydisdrometer/tests/testNasa2DVDReader_mc3e.py +++ b/pydsd/tests/testNasa2DVDReader_mc3e.py @@ -4,7 +4,7 @@ from ..aux_readers import NASA_2DVD_reader class TestNasa2DvdReaderMc3eSubcase(unittest.TestCase): - 'Test module for the NASA_2DVD_reader class in pydisdrometer.aux_io.NASA_2DVD_reader for mc3e files' + 'Test module for the NASA_2DVD_reader class in pydsd.aux_io.NASA_2DVD_reader for mc3e files' def setUp(self): filename = 'testdata/nasa_gv_mc3e_2dvd_test.txt' diff --git a/pydsd/tests/test_DSR.py b/pydsd/tests/test_DSR.py new file mode 100644 index 0000000..1079004 --- /dev/null +++ b/pydsd/tests/test_DSR.py @@ -0,0 +1,5 @@ +import pydsd + + +def test_tb(): + assert pydsd.DSR.tb(2) > 0 diff --git a/pydisdrometer/tests/test_DropSizeDistribution.py b/pydsd/tests/test_DropSizeDistribution.py similarity index 100% rename from pydisdrometer/tests/test_DropSizeDistribution.py rename to pydsd/tests/test_DropSizeDistribution.py diff --git a/pydisdrometer/tests/test_Image2DReader.py b/pydsd/tests/test_Image2DReader.py similarity index 100% rename from pydisdrometer/tests/test_Image2DReader.py rename to pydsd/tests/test_Image2DReader.py diff --git a/pydisdrometer/tests/test_ParsivelNasaGVReader.py b/pydsd/tests/test_ParsivelNasaGVReader.py similarity index 98% rename from pydisdrometer/tests/test_ParsivelNasaGVReader.py rename to pydsd/tests/test_ParsivelNasaGVReader.py index cae6d6c..f995ccf 100644 --- a/pydisdrometer/tests/test_ParsivelNasaGVReader.py +++ b/pydsd/tests/test_ParsivelNasaGVReader.py @@ -1,6 +1,6 @@ import numpy as np from unittest import TestCase -import pydisdrometer +import pydsd from .. import read_parsivel_nasa_gv import datetime diff --git a/pydisdrometer/tests/test_ParsivelReader.py b/pydsd/tests/test_ParsivelReader.py similarity index 96% rename from pydisdrometer/tests/test_ParsivelReader.py rename to pydsd/tests/test_ParsivelReader.py index 0ad417b..ca35690 100644 --- a/pydisdrometer/tests/test_ParsivelReader.py +++ b/pydsd/tests/test_ParsivelReader.py @@ -6,7 +6,7 @@ class TestParsivelReader(unittest.TestCase): - """Test module for the ParsivelReader class in pydisdrometer.io.ParsivelReader """ + """Test module for the ParsivelReader class in pydsd.io.ParsivelReader """ def setUp(self): filename = 'testdata/parsivel_telegraph_testfile.mis' diff --git a/pydisdrometer/tests/test_dielectric.py b/pydsd/tests/test_dielectric.py similarity index 100% rename from pydisdrometer/tests/test_dielectric.py rename to pydsd/tests/test_dielectric.py diff --git a/pydisdrometer/tests/test_expfit.py b/pydsd/tests/test_expfit.py similarity index 100% rename from pydisdrometer/tests/test_expfit.py rename to pydsd/tests/test_expfit.py diff --git a/pydisdrometer/tests/test_plot.py b/pydsd/tests/test_plot.py similarity index 100% rename from pydisdrometer/tests/test_plot.py rename to pydsd/tests/test_plot.py diff --git a/pydsd/tests/test_pydisdrometer.py b/pydsd/tests/test_pydisdrometer.py new file mode 100644 index 0000000..cd61e45 --- /dev/null +++ b/pydsd/tests/test_pydisdrometer.py @@ -0,0 +1,9 @@ +import pydsd +from unittest import TestCase + + +class TestPyDSDOverall(TestCase): + + def test_import(self): + """ PyDSDOverall: Test whether the PyDSD can be imported properly""" + import pydsd diff --git a/pydisdrometer/tests/test_ua98.py b/pydsd/tests/test_ua98.py similarity index 98% rename from pydisdrometer/tests/test_ua98.py rename to pydsd/tests/test_ua98.py index afe662e..4a1ca38 100644 --- a/pydisdrometer/tests/test_ua98.py +++ b/pydsd/tests/test_ua98.py @@ -1,7 +1,7 @@ import numpy as np import unittest -import pydisdrometer.fit.ua98 as ua98 +import pydsd.fit.ua98 as ua98 from ..fit import ua98 class TestDSDFits(unittest.TestCase): diff --git a/pydisdrometer/utility/__init__.py b/pydsd/utility/__init__.py similarity index 100% rename from pydisdrometer/utility/__init__.py rename to pydsd/utility/__init__.py diff --git a/pydisdrometer/utility/configuration.py b/pydsd/utility/configuration.py similarity index 100% rename from pydisdrometer/utility/configuration.py rename to pydsd/utility/configuration.py diff --git a/pydisdrometer/utility/dielectric.py b/pydsd/utility/dielectric.py similarity index 100% rename from pydisdrometer/utility/dielectric.py rename to pydsd/utility/dielectric.py diff --git a/pydisdrometer/utility/expfit.py b/pydsd/utility/expfit.py similarity index 100% rename from pydisdrometer/utility/expfit.py rename to pydsd/utility/expfit.py diff --git a/pydisdrometer/utility/metadata.json b/pydsd/utility/metadata.json similarity index 100% rename from pydisdrometer/utility/metadata.json rename to pydsd/utility/metadata.json diff --git a/pydisdrometer/utility/ts_utility.py b/pydsd/utility/ts_utility.py similarity index 100% rename from pydisdrometer/utility/ts_utility.py rename to pydsd/utility/ts_utility.py diff --git a/setup.cfg b/setup.cfg index 23db54d..9c2b9ef 100644 --- a/setup.cfg +++ b/setup.cfg @@ -4,9 +4,9 @@ addopts = --ignore setup.py --cov-report term-missing --cov . [versioneer] VCS = git style = pep440 -versionfile_source = pydisdrometer/_version.py +versionfile_source = pydsd/_version.py versionfile_build = tag_prefix = -parentdir_prefix = pydisdrometer- +parentdir_prefix = pydsd- diff --git a/setup.py b/setup.py index bddd7c7..2f24f73 100644 --- a/setup.py +++ b/setup.py @@ -2,28 +2,27 @@ import versioneer setup( - name='PyDisdrometer', - version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass(), + name='PyDSD', author='Joseph C. Hardin, Nick Guy', author_email='josephhardinee@gmail.com', - packages=['pydisdrometer', - 'pydisdrometer.aux_readers', - 'pydisdrometer.plot', - 'pydisdrometer.io', - 'pydisdrometer.fit', - 'pydisdrometer.partition', - 'pydisdrometer.plot', - 'pydisdrometer.utility'], + packages=['pydsd', + 'pydsd.aux_readers', + 'pydsd.plot', + 'pydsd.io', + 'pydsd.partition', + 'pydsd.plot', + 'pydsd.utility', + 'pydsd.fit'], url='http://pypi.python.org/pypi/PyDisdrometer/', license='LICENSE.txt', description='Python Disdrometer Processing', - long_description=open('description.txt').read(), + long_description=""" A python library for working with drop size distributions, disdrometers, and particle probes.""", install_requires=['pytmatrix>=0.2.0', 'numpy', 'matplotlib', 'scipy', 'versioneer'], classifiers=[ "Development Status :: 3 - Alpha", "Environment :: Console" ], - include_package_data=True - + include_package_data=True, + version=versioneer.get_version(), + cmdclass=versioneer.get_cmdclass() )