diff options
author | CoprDistGit <infra@openeuler.org> | 2023-06-20 06:57:51 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-06-20 06:57:51 +0000 |
commit | af2fd2b069ba060db030d7cfeee5bdb27d197180 (patch) | |
tree | 75b60ebccec9e648c9e717328a5a6824c5fb4c77 | |
parent | 3ee457a5d651253e9fb701d8569b569bc5ac62cd (diff) |
automatic import of python-phylabopeneuler20.03
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-phylab.spec | 540 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 542 insertions, 0 deletions
@@ -0,0 +1 @@ +/phylab-0.4.1.tar.gz diff --git a/python-phylab.spec b/python-phylab.spec new file mode 100644 index 0000000..08f9665 --- /dev/null +++ b/python-phylab.spec @@ -0,0 +1,540 @@ +%global _empty_manifest_terminate_build 0 +Name: python-phylab +Version: 0.4.1 +Release: 1 +Summary: A Python module for basic data analysis and curve fitting for Physics laboratory students. +License: GPLv3 +URL: https://github.com/BernardoTomelleri/phylab +Source0: https://mirrors.aliyun.com/pypi/web/packages/f5/d3/4c8ec11838854c8fff7f324eb897dd3b2cb8d1eb32e66a9bb43cdc6aa8be/phylab-0.4.1.tar.gz +BuildArch: noarch + +Requires: python3-numpy +Requires: python3-scipy +Requires: python3-matplotlib + +%description +[](https://github.com/BernardoTomelleri/phylab/actions/workflows/PyPI-publish-release.yml) +[](https://opensource.org/licenses/gpl-3.0.html) +A Python package for basic data analysis and curve fitting for Physics laboratory students. +## Table of contents +- [Phy lab](#phy-lab) + * [Table of contents](#table-of-contents) + * [Philosophy behind this](#philosophy-behind-this) + + [How this library came about](#how-this-library-came-about) + * [Contents](#contents) + + [model functions](#model-functions) + + [testing and printing of fit results](#testing-and-printing-of-fit-results) + + [curve-fitting routines](#curve-fitting-routines) + + [Fourier transform utilities](#fourier-transform-utilities) + + [data plotting](#data-plotting) + + [importing data from files](#importing-data-from-files) + * [Setting up](#setting-up) + + [Prerequisites](#prerequisites) + + [Installation](#installation) + * [Using Phy lab](#using-phy-lab) + * [Development](#development) + * [License](#license) +## Philosophy behind this +Because this was written by someone starting to learn about experimental Physics +and Python (for students in a similar situation) all the functions in this module +try to use only the basic data structures and functionalities found in Python +that are briefly discussed with students (functions, arrays & not much else). +This is why you won't find classes, methods or even dicts in this package +and why the code inside may be very, very inefficient/ugly. +On the upside though, all the definitions inside should be easily comprehensible +and modifiable by anyone just starting out with programming. +### How this library came about +While writing the python scripts for individual experiments (at UniPi's Physics Lab) +I noticed that a significant amount of code was common to almost all of them. +I started writing down these common functions in a python module everytime this +happened, so that I could import them later to save a lot of time and hassle. +That's basically the story behind it: a collection of useful ideas I had while +learning how to analyze experimental data with Python's SciPy. +Now that it's grown into a powerful enough collection of tools, I decided to +release it for any and all students that may find it helpful for dealing +with similar problems. +## Contents +- The main module containing all the functions. [lab] +- A simple showcase of a couple of things this library allows you to do. [circfit] + - Finding the best-fitting circle and ellipse for simulated or real sampled data points. + - A quick comparison between using `curve_fit`, an algebraic circle fit + (weighted [Coope] method) and an algebraic ellipse fit. + - Plotting the $\chi^2(a, b)$ surface for a pair of parameters $a, b$ of the circle or the ellipse. +- Folder containing further examples and data that can be used in the demos. [examples] +For another example of where this package can come in handy feel free to check +out [FFT repository] and [Lock-in detector]. A small paper (in italiano) on fitting, +computing Fourier transforms and/or simulating the effect of a Lock-in detector +on real sampled signals or internally generated ones. +### model functions +A few definitions of the model functions more commonly encountered in the first +years of Physics lab (e.g. [dampened oscillator], [square wave]) +along with a few digital filters (e.g. [Butterworth]). +Right at the beginning of the module so you can immediately start adding +the models you need. +### testing and printing of fit results +Goodness of fit tests, evaluation of parameter uncertainties and +correlations ([chi-square test], [errcor]). +Simple print formatters that allow you to quickly display the results +of a fit and associated uncertainties with the desired number of significant +digits. ([print correlations], [print parameters]) +### curve-fitting routines +Weighted least-square fitting accounting for uncertainties on x and y axes +with linear error propagation ([propagated fit]), relying on [scipy.optimize.curve_fit]. +Weighted orthogonal distance regression thanks to [ODRPACK]. +Weighted algebraic fits (like [ellipse fit] and others). +### Fourier transform utilities +Functions for computing FFTs of real and complex signals and other +associated quantities ([sampling], [FFT], [FWHM]), applying window functions +and displaying their output through Matplotlib ([plotfft]). +### data plotting +Instead of having to write multiple calls to function in order to: +activate axis minor ticks, setting their size, orientation and spacing, +placing grids, setting errorbar sizes, etc.. (stuff that's present in +almost all experimental graphs) +You can set some sensible defaults for plots of fitted data, so you can +do all of the above in a faster and less error-prone way. +([grid], [plot fit & residuals]) +### importing data from files +Load a selected range of data from (.txt, .csv, .py, etc.) files as NumPy +arrays, loop over files in a directory with a few calls to function +([measured range], [file loop]). +## Setting up +This library was written entirely in Python 3.x, but because of its entry +level design should be effortless to readapt to Python 2.x. +Should be completely OS independent. +### Prerequisites +Phy lab requires three core packages from the SciPy ecosystem to work: +[Numpy], [SciPy] and [Matplotlib]. You should be able to obtain all 3 via `pip` +``` +python -m pip install --user --upgrade numpy scipy matplotlib +``` +Check [SciPy's installation page](https://www.scipy.org/install.html) for more details. +### Installation +The cleanest way to install and manage phylab is using `pip`: +``` +python -m pip install --user phylab +``` +Then simply import the main module with +``` +import phylab as lab +``` +Alternatively, you can clone the repository or download the latest release +manually and import the main module directly inside your script just as before. +## Using Phy lab +For a quick guide on how to use this library and to show just how much of a difference +using these few functions can have, compare [beat] and [beat_naive]. +These two scripts do the same thing, but the first one is three times shorter +at 50 lines, runs ~ 0.2 seconds (30%) faster using less memory and can be +easily extended to work with more than 2 datasets, remove outliers, +compute FFT and so on... As you can see for example in [beat_ext]. +## Development +Any and all suggestions are always appreciated, If you want to contribute +in any way don't hesitate to contact me. I'm always happy to learn something +new, so if you know how to improve any part of the code, find something +that needs fixing or even if you'd like to see something added going forwards, +feel free to let me know (here or at bernardo.tomelleri@gmail.com). +## License +Phy lab is licensed under the GNU General Public License v3.0 or later. +[//]: # (These are reference links used in the body of the readme and get +stripped out by the markdown processor. +See - http://stackoverflow.com/questions/4823468/store-comments-in-markdown-syntax) + [lab]: <https://github.com/BernardoTomelleri/phylab/blob/master/phylab/lab.py> + [circfit]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/circfit.py> + [examples]: <https://github.com/BernardoTomelleri/phylab/tree/master/examples> + [FFT repository]: <https://github.com/BernardoTomelleri/FFT> + [Lock-in detector]: <https://github.com/BernardoTomelleri/FFT/blob/master/lockin.py> + [Coope]: <https://ir.canterbury.ac.nz/bitstream/handle/10092/11104/coope_report_no69_1992.pdf?sequence=1&isAllowed=y> + [dampened oscillator]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L58> + [square wave]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L66> + [Butterworth]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L131> + [chi-square test]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L161> + [errcor]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L292> + [print correlations]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L301> + [print parameters]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L308> + [propagated fit]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L381> + [ODRPACK]: <https://docs.scipy.org/doc/external/odrpack_guide.pdf> + [scipy.optimize.curve_fit]: <https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html> + [ellipse fit]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L589> + [sampling]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L836> + [FFT]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L851> + [FWHM]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L336> + [plotfft]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L801> + [grid]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L653> + [plot fit & residuals]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L729> + [measured range]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L902> + [file loop]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L943> + [SciPy]: <https://www.scipy.org/scipylib/index.html> + [NumPy]: <https://numpy.org/> + [Matplotlib]: <https://matplotlib.org/stable/index.html> + [beat]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/beat.py> + [beat_naive]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/beat_naive.py> + [beat_ext]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/beat_ext.py> + +%package -n python3-phylab +Summary: A Python module for basic data analysis and curve fitting for Physics laboratory students. +Provides: python-phylab +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-phylab +[](https://github.com/BernardoTomelleri/phylab/actions/workflows/PyPI-publish-release.yml) +[](https://opensource.org/licenses/gpl-3.0.html) +A Python package for basic data analysis and curve fitting for Physics laboratory students. +## Table of contents +- [Phy lab](#phy-lab) + * [Table of contents](#table-of-contents) + * [Philosophy behind this](#philosophy-behind-this) + + [How this library came about](#how-this-library-came-about) + * [Contents](#contents) + + [model functions](#model-functions) + + [testing and printing of fit results](#testing-and-printing-of-fit-results) + + [curve-fitting routines](#curve-fitting-routines) + + [Fourier transform utilities](#fourier-transform-utilities) + + [data plotting](#data-plotting) + + [importing data from files](#importing-data-from-files) + * [Setting up](#setting-up) + + [Prerequisites](#prerequisites) + + [Installation](#installation) + * [Using Phy lab](#using-phy-lab) + * [Development](#development) + * [License](#license) +## Philosophy behind this +Because this was written by someone starting to learn about experimental Physics +and Python (for students in a similar situation) all the functions in this module +try to use only the basic data structures and functionalities found in Python +that are briefly discussed with students (functions, arrays & not much else). +This is why you won't find classes, methods or even dicts in this package +and why the code inside may be very, very inefficient/ugly. +On the upside though, all the definitions inside should be easily comprehensible +and modifiable by anyone just starting out with programming. +### How this library came about +While writing the python scripts for individual experiments (at UniPi's Physics Lab) +I noticed that a significant amount of code was common to almost all of them. +I started writing down these common functions in a python module everytime this +happened, so that I could import them later to save a lot of time and hassle. +That's basically the story behind it: a collection of useful ideas I had while +learning how to analyze experimental data with Python's SciPy. +Now that it's grown into a powerful enough collection of tools, I decided to +release it for any and all students that may find it helpful for dealing +with similar problems. +## Contents +- The main module containing all the functions. [lab] +- A simple showcase of a couple of things this library allows you to do. [circfit] + - Finding the best-fitting circle and ellipse for simulated or real sampled data points. + - A quick comparison between using `curve_fit`, an algebraic circle fit + (weighted [Coope] method) and an algebraic ellipse fit. + - Plotting the $\chi^2(a, b)$ surface for a pair of parameters $a, b$ of the circle or the ellipse. +- Folder containing further examples and data that can be used in the demos. [examples] +For another example of where this package can come in handy feel free to check +out [FFT repository] and [Lock-in detector]. A small paper (in italiano) on fitting, +computing Fourier transforms and/or simulating the effect of a Lock-in detector +on real sampled signals or internally generated ones. +### model functions +A few definitions of the model functions more commonly encountered in the first +years of Physics lab (e.g. [dampened oscillator], [square wave]) +along with a few digital filters (e.g. [Butterworth]). +Right at the beginning of the module so you can immediately start adding +the models you need. +### testing and printing of fit results +Goodness of fit tests, evaluation of parameter uncertainties and +correlations ([chi-square test], [errcor]). +Simple print formatters that allow you to quickly display the results +of a fit and associated uncertainties with the desired number of significant +digits. ([print correlations], [print parameters]) +### curve-fitting routines +Weighted least-square fitting accounting for uncertainties on x and y axes +with linear error propagation ([propagated fit]), relying on [scipy.optimize.curve_fit]. +Weighted orthogonal distance regression thanks to [ODRPACK]. +Weighted algebraic fits (like [ellipse fit] and others). +### Fourier transform utilities +Functions for computing FFTs of real and complex signals and other +associated quantities ([sampling], [FFT], [FWHM]), applying window functions +and displaying their output through Matplotlib ([plotfft]). +### data plotting +Instead of having to write multiple calls to function in order to: +activate axis minor ticks, setting their size, orientation and spacing, +placing grids, setting errorbar sizes, etc.. (stuff that's present in +almost all experimental graphs) +You can set some sensible defaults for plots of fitted data, so you can +do all of the above in a faster and less error-prone way. +([grid], [plot fit & residuals]) +### importing data from files +Load a selected range of data from (.txt, .csv, .py, etc.) files as NumPy +arrays, loop over files in a directory with a few calls to function +([measured range], [file loop]). +## Setting up +This library was written entirely in Python 3.x, but because of its entry +level design should be effortless to readapt to Python 2.x. +Should be completely OS independent. +### Prerequisites +Phy lab requires three core packages from the SciPy ecosystem to work: +[Numpy], [SciPy] and [Matplotlib]. You should be able to obtain all 3 via `pip` +``` +python -m pip install --user --upgrade numpy scipy matplotlib +``` +Check [SciPy's installation page](https://www.scipy.org/install.html) for more details. +### Installation +The cleanest way to install and manage phylab is using `pip`: +``` +python -m pip install --user phylab +``` +Then simply import the main module with +``` +import phylab as lab +``` +Alternatively, you can clone the repository or download the latest release +manually and import the main module directly inside your script just as before. +## Using Phy lab +For a quick guide on how to use this library and to show just how much of a difference +using these few functions can have, compare [beat] and [beat_naive]. +These two scripts do the same thing, but the first one is three times shorter +at 50 lines, runs ~ 0.2 seconds (30%) faster using less memory and can be +easily extended to work with more than 2 datasets, remove outliers, +compute FFT and so on... As you can see for example in [beat_ext]. +## Development +Any and all suggestions are always appreciated, If you want to contribute +in any way don't hesitate to contact me. I'm always happy to learn something +new, so if you know how to improve any part of the code, find something +that needs fixing or even if you'd like to see something added going forwards, +feel free to let me know (here or at bernardo.tomelleri@gmail.com). +## License +Phy lab is licensed under the GNU General Public License v3.0 or later. +[//]: # (These are reference links used in the body of the readme and get +stripped out by the markdown processor. +See - http://stackoverflow.com/questions/4823468/store-comments-in-markdown-syntax) + [lab]: <https://github.com/BernardoTomelleri/phylab/blob/master/phylab/lab.py> + [circfit]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/circfit.py> + [examples]: <https://github.com/BernardoTomelleri/phylab/tree/master/examples> + [FFT repository]: <https://github.com/BernardoTomelleri/FFT> + [Lock-in detector]: <https://github.com/BernardoTomelleri/FFT/blob/master/lockin.py> + [Coope]: <https://ir.canterbury.ac.nz/bitstream/handle/10092/11104/coope_report_no69_1992.pdf?sequence=1&isAllowed=y> + [dampened oscillator]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L58> + [square wave]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L66> + [Butterworth]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L131> + [chi-square test]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L161> + [errcor]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L292> + [print correlations]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L301> + [print parameters]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L308> + [propagated fit]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L381> + [ODRPACK]: <https://docs.scipy.org/doc/external/odrpack_guide.pdf> + [scipy.optimize.curve_fit]: <https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html> + [ellipse fit]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L589> + [sampling]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L836> + [FFT]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L851> + [FWHM]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L336> + [plotfft]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L801> + [grid]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L653> + [plot fit & residuals]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L729> + [measured range]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L902> + [file loop]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L943> + [SciPy]: <https://www.scipy.org/scipylib/index.html> + [NumPy]: <https://numpy.org/> + [Matplotlib]: <https://matplotlib.org/stable/index.html> + [beat]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/beat.py> + [beat_naive]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/beat_naive.py> + [beat_ext]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/beat_ext.py> + +%package help +Summary: Development documents and examples for phylab +Provides: python3-phylab-doc +%description help +[](https://github.com/BernardoTomelleri/phylab/actions/workflows/PyPI-publish-release.yml) +[](https://opensource.org/licenses/gpl-3.0.html) +A Python package for basic data analysis and curve fitting for Physics laboratory students. +## Table of contents +- [Phy lab](#phy-lab) + * [Table of contents](#table-of-contents) + * [Philosophy behind this](#philosophy-behind-this) + + [How this library came about](#how-this-library-came-about) + * [Contents](#contents) + + [model functions](#model-functions) + + [testing and printing of fit results](#testing-and-printing-of-fit-results) + + [curve-fitting routines](#curve-fitting-routines) + + [Fourier transform utilities](#fourier-transform-utilities) + + [data plotting](#data-plotting) + + [importing data from files](#importing-data-from-files) + * [Setting up](#setting-up) + + [Prerequisites](#prerequisites) + + [Installation](#installation) + * [Using Phy lab](#using-phy-lab) + * [Development](#development) + * [License](#license) +## Philosophy behind this +Because this was written by someone starting to learn about experimental Physics +and Python (for students in a similar situation) all the functions in this module +try to use only the basic data structures and functionalities found in Python +that are briefly discussed with students (functions, arrays & not much else). +This is why you won't find classes, methods or even dicts in this package +and why the code inside may be very, very inefficient/ugly. +On the upside though, all the definitions inside should be easily comprehensible +and modifiable by anyone just starting out with programming. +### How this library came about +While writing the python scripts for individual experiments (at UniPi's Physics Lab) +I noticed that a significant amount of code was common to almost all of them. +I started writing down these common functions in a python module everytime this +happened, so that I could import them later to save a lot of time and hassle. +That's basically the story behind it: a collection of useful ideas I had while +learning how to analyze experimental data with Python's SciPy. +Now that it's grown into a powerful enough collection of tools, I decided to +release it for any and all students that may find it helpful for dealing +with similar problems. +## Contents +- The main module containing all the functions. [lab] +- A simple showcase of a couple of things this library allows you to do. [circfit] + - Finding the best-fitting circle and ellipse for simulated or real sampled data points. + - A quick comparison between using `curve_fit`, an algebraic circle fit + (weighted [Coope] method) and an algebraic ellipse fit. + - Plotting the $\chi^2(a, b)$ surface for a pair of parameters $a, b$ of the circle or the ellipse. +- Folder containing further examples and data that can be used in the demos. [examples] +For another example of where this package can come in handy feel free to check +out [FFT repository] and [Lock-in detector]. A small paper (in italiano) on fitting, +computing Fourier transforms and/or simulating the effect of a Lock-in detector +on real sampled signals or internally generated ones. +### model functions +A few definitions of the model functions more commonly encountered in the first +years of Physics lab (e.g. [dampened oscillator], [square wave]) +along with a few digital filters (e.g. [Butterworth]). +Right at the beginning of the module so you can immediately start adding +the models you need. +### testing and printing of fit results +Goodness of fit tests, evaluation of parameter uncertainties and +correlations ([chi-square test], [errcor]). +Simple print formatters that allow you to quickly display the results +of a fit and associated uncertainties with the desired number of significant +digits. ([print correlations], [print parameters]) +### curve-fitting routines +Weighted least-square fitting accounting for uncertainties on x and y axes +with linear error propagation ([propagated fit]), relying on [scipy.optimize.curve_fit]. +Weighted orthogonal distance regression thanks to [ODRPACK]. +Weighted algebraic fits (like [ellipse fit] and others). +### Fourier transform utilities +Functions for computing FFTs of real and complex signals and other +associated quantities ([sampling], [FFT], [FWHM]), applying window functions +and displaying their output through Matplotlib ([plotfft]). +### data plotting +Instead of having to write multiple calls to function in order to: +activate axis minor ticks, setting their size, orientation and spacing, +placing grids, setting errorbar sizes, etc.. (stuff that's present in +almost all experimental graphs) +You can set some sensible defaults for plots of fitted data, so you can +do all of the above in a faster and less error-prone way. +([grid], [plot fit & residuals]) +### importing data from files +Load a selected range of data from (.txt, .csv, .py, etc.) files as NumPy +arrays, loop over files in a directory with a few calls to function +([measured range], [file loop]). +## Setting up +This library was written entirely in Python 3.x, but because of its entry +level design should be effortless to readapt to Python 2.x. +Should be completely OS independent. +### Prerequisites +Phy lab requires three core packages from the SciPy ecosystem to work: +[Numpy], [SciPy] and [Matplotlib]. You should be able to obtain all 3 via `pip` +``` +python -m pip install --user --upgrade numpy scipy matplotlib +``` +Check [SciPy's installation page](https://www.scipy.org/install.html) for more details. +### Installation +The cleanest way to install and manage phylab is using `pip`: +``` +python -m pip install --user phylab +``` +Then simply import the main module with +``` +import phylab as lab +``` +Alternatively, you can clone the repository or download the latest release +manually and import the main module directly inside your script just as before. +## Using Phy lab +For a quick guide on how to use this library and to show just how much of a difference +using these few functions can have, compare [beat] and [beat_naive]. +These two scripts do the same thing, but the first one is three times shorter +at 50 lines, runs ~ 0.2 seconds (30%) faster using less memory and can be +easily extended to work with more than 2 datasets, remove outliers, +compute FFT and so on... As you can see for example in [beat_ext]. +## Development +Any and all suggestions are always appreciated, If you want to contribute +in any way don't hesitate to contact me. I'm always happy to learn something +new, so if you know how to improve any part of the code, find something +that needs fixing or even if you'd like to see something added going forwards, +feel free to let me know (here or at bernardo.tomelleri@gmail.com). +## License +Phy lab is licensed under the GNU General Public License v3.0 or later. +[//]: # (These are reference links used in the body of the readme and get +stripped out by the markdown processor. +See - http://stackoverflow.com/questions/4823468/store-comments-in-markdown-syntax) + [lab]: <https://github.com/BernardoTomelleri/phylab/blob/master/phylab/lab.py> + [circfit]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/circfit.py> + [examples]: <https://github.com/BernardoTomelleri/phylab/tree/master/examples> + [FFT repository]: <https://github.com/BernardoTomelleri/FFT> + [Lock-in detector]: <https://github.com/BernardoTomelleri/FFT/blob/master/lockin.py> + [Coope]: <https://ir.canterbury.ac.nz/bitstream/handle/10092/11104/coope_report_no69_1992.pdf?sequence=1&isAllowed=y> + [dampened oscillator]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L58> + [square wave]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L66> + [Butterworth]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L131> + [chi-square test]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L161> + [errcor]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L292> + [print correlations]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L301> + [print parameters]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L308> + [propagated fit]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L381> + [ODRPACK]: <https://docs.scipy.org/doc/external/odrpack_guide.pdf> + [scipy.optimize.curve_fit]: <https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html> + [ellipse fit]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L589> + [sampling]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L836> + [FFT]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L851> + [FWHM]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L336> + [plotfft]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L801> + [grid]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L653> + [plot fit & residuals]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L729> + [measured range]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L902> + [file loop]: <https://github.com/BernardoTomelleri/phylab/blob/1a4a86d121a1c07b91af5dfc7ec03443b1939035/phylab/lab.py#L943> + [SciPy]: <https://www.scipy.org/scipylib/index.html> + [NumPy]: <https://numpy.org/> + [Matplotlib]: <https://matplotlib.org/stable/index.html> + [beat]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/beat.py> + [beat_naive]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/beat_naive.py> + [beat_ext]: <https://github.com/BernardoTomelleri/phylab/blob/master/examples/beat_ext.py> + +%prep +%autosetup -n phylab-0.4.1 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-phylab -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Jun 20 2023 Python_Bot <Python_Bot@openeuler.org> - 0.4.1-1 +- Package Spec generated @@ -0,0 +1 @@ +9aee9ca84aa50591e4e3023c4e41b3e5 phylab-0.4.1.tar.gz |