Performance Prediction for Optical Particle Spectrometer
Project description
PPOPS
Performance Prediction for Optical Particle Spectrometer
Documentation: https://rtd-ppops.readthedocs.io/
Overview
This repository simulates the performance of a simple Optical Particle Spectrometer (OPS) using a physics-based model. The default optical system is based on Gao et al., Aerosol Sci. Technol., 2016, which is also what the POPS instrument sold by Handix Scientific is based on. The PPOPS model is semi-validated in that PPOPS modeled signal was within 50% of the actual signal of a POPS unit from Handix Scientific (see validation section of PPOPS website for more information).
The PPOPS model calculates the amount and direction of scattered light by aerosols according to Mie theory. The scattered light is integrated over the solid-angle acceptance of the collection mirror to calculate a truncated scattering cross section (the effective scattering cross section). This truncated scattering cross section is then used to calculate the instrument signal and noise current.
To summarize, the PPOPS workflow includes,
- Use miepython to calculate the scattering amplitudes (
S₁,S₂) according to Mie theory.- Compute Mie coefficients (
a_n,b_n) for electric and magnetic scattering modes. - Generate angular functions (
π_n,τ_n) that describe angle-dependent intensity.
- Compute Mie coefficients (
- Integrating over the OPS collection mirror’s polar and azimuthal acceptance to compute the truncated scattering cross section.
- Convert the truncated scattering cross section to signal and noise current based on detector specifications.
- Optionally, convert signal current to digitizer bins for direct comparison with POPS data.
Assumptions
This package makes several assumptions:
- Particles are perfectly spherical.
- Scattering is elastic.
- All scattered light incident on the collection mirror is detected.
- The only noise sources are signal noise, dark noise, and preamp noise (i.e., we neglect stray scattering).
- The detector is shot noise limited.
Installation
PPOPS is available via PyPI
pip install ppops
Usage
See PPOPS website for more information.
import ppops
ops = ppops.OpticalParticleSpectrometer()
ops.estimate_signal_noise(diameters = [0.1, 0.5, 1.0], ior = 1.5+0.001j)
References
Gao, R.S., Telg, H., McLaughlin, R.J., Ciciora, S.J., Watts, L.A., Richardson, M.S., Schwarz, J.P., Perring, A.E., Thornberry, T.D., Rollins, A.W., Markovic, M.Z., Bates, T.S., Johnson, J.E., Fahey, D.W., 2016. A light-weight, high-sensitivity particle spectrometer for PM2.5 aerosol measurements. Aerosol Science and Technology 50, 88–99. https://doi.org/10.1080/02786826.2015.1131809
miepython: 10.5281/zenodo.7949263
Author Notes
This repository is intended as a transparent, well-documented implementation of Mie scattering and optical geometry for POPS performance prediction and analysis.
License
PPOPS is released under the MIT license.
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 ppops-0.0.0.tar.gz.
File metadata
- Download URL: ppops-0.0.0.tar.gz
- Upload date:
- Size: 18.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b59d3a4f910f49b69f6f89036a6f7b33dff628694a9b74e411a71ffe07c1c134
|
|
| MD5 |
a3371297a8097938c19f570d254ac6d8
|
|
| BLAKE2b-256 |
91e4d2c9bfd282749a0bf06ba39235f4f4e2395e4054741913a56775229b6ced
|
Provenance
The following attestation bundles were made for ppops-0.0.0.tar.gz:
Publisher:
publish.yml on c-pedersen/PPOPS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ppops-0.0.0.tar.gz -
Subject digest:
b59d3a4f910f49b69f6f89036a6f7b33dff628694a9b74e411a71ffe07c1c134 - Sigstore transparency entry: 1032834455
- Sigstore integration time:
-
Permalink:
c-pedersen/PPOPS@85eb6536b72a3ae5482d994326f40c77f1024940 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/c-pedersen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@85eb6536b72a3ae5482d994326f40c77f1024940 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file ppops-0.0.0-py3-none-any.whl.
File metadata
- Download URL: ppops-0.0.0-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52f336d542e34a60bc2f9f6b62f5e1741485a021e6e7f192c08cfb0845a2efce
|
|
| MD5 |
cfa8deac2063ecb4c7c8129072f3a63b
|
|
| BLAKE2b-256 |
c1b137dae718eef8a8ed4066fa2fa64c314eed0c9d6550b411d6b94d384f288e
|
Provenance
The following attestation bundles were made for ppops-0.0.0-py3-none-any.whl:
Publisher:
publish.yml on c-pedersen/PPOPS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ppops-0.0.0-py3-none-any.whl -
Subject digest:
52f336d542e34a60bc2f9f6b62f5e1741485a021e6e7f192c08cfb0845a2efce - Sigstore transparency entry: 1032834596
- Sigstore integration time:
-
Permalink:
c-pedersen/PPOPS@85eb6536b72a3ae5482d994326f40c77f1024940 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/c-pedersen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@85eb6536b72a3ae5482d994326f40c77f1024940 -
Trigger Event:
workflow_dispatch
-
Statement type: