pyelq 1.1.4__py3-none-any.whl → 1.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. pyelq/__init__.py +1 -0
  2. pyelq/component/__init__.py +1 -0
  3. pyelq/component/background.py +19 -13
  4. pyelq/component/component.py +2 -1
  5. pyelq/component/error_model.py +2 -1
  6. pyelq/component/offset.py +2 -1
  7. pyelq/component/source_model.py +78 -29
  8. pyelq/coordinate_system.py +1 -0
  9. pyelq/data_access/__init__.py +1 -0
  10. pyelq/data_access/data_access.py +1 -1
  11. pyelq/dispersion_model/__init__.py +4 -3
  12. pyelq/dispersion_model/dispersion_model.py +202 -0
  13. pyelq/dispersion_model/finite_volume.py +1084 -0
  14. pyelq/dispersion_model/gaussian_plume.py +8 -189
  15. pyelq/dispersion_model/site_layout.py +97 -0
  16. pyelq/dlm.py +11 -15
  17. pyelq/gas_species.py +1 -0
  18. pyelq/meteorology/__init__.py +6 -0
  19. pyelq/{meteorology.py → meteorology/meteorology.py} +388 -387
  20. pyelq/meteorology/meteorology_windfield.py +180 -0
  21. pyelq/model.py +2 -1
  22. pyelq/plotting/__init__.py +1 -0
  23. pyelq/plotting/plot.py +1 -0
  24. pyelq/preprocessing.py +98 -38
  25. pyelq/sensor/__init__.py +1 -0
  26. pyelq/sensor/sensor.py +70 -5
  27. pyelq/source_map.py +1 -0
  28. pyelq/support_functions/__init__.py +1 -0
  29. pyelq/support_functions/post_processing.py +1 -0
  30. pyelq/support_functions/spatio_temporal_interpolation.py +1 -0
  31. {pyelq-1.1.4.dist-info → pyelq-1.2.0.dist-info}/METADATA +45 -44
  32. pyelq-1.2.0.dist-info/RECORD +37 -0
  33. {pyelq-1.1.4.dist-info → pyelq-1.2.0.dist-info}/WHEEL +1 -1
  34. pyelq-1.1.4.dist-info/RECORD +0 -32
  35. {pyelq-1.1.4.dist-info → pyelq-1.2.0.dist-info/licenses}/LICENSE.md +0 -0
  36. {pyelq-1.1.4.dist-info → pyelq-1.2.0.dist-info/licenses}/LICENSES/Apache-2.0.txt +0 -0
@@ -1,27 +1,28 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: pyelq
3
- Version: 1.1.4
3
+ Version: 1.2.0
4
4
  Summary: Package for detection, localization and quantification code.
5
5
  License: Apache-2.0
6
+ License-File: LICENSE.md
7
+ License-File: LICENSES/Apache-2.0.txt
6
8
  Keywords: gas dispersion,emission,detection,localization,quantification
7
9
  Author: Bas van de Kerkhof
8
- Requires-Python: >=3.9
10
+ Requires-Python: >=3.11
9
11
  Classifier: License :: OSI Approved :: Apache Software License
10
12
  Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.9
12
- Classifier: Programming Language :: Python :: 3.10
13
13
  Classifier: Programming Language :: Python :: 3.11
14
14
  Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
16
17
  Requires-Dist: geojson (>=3.2.0)
17
- Requires-Dist: numpy (>=2.0.2)
18
- Requires-Dist: openmcmc (==1.0.6)
19
- Requires-Dist: pandas (>=2.2.3)
20
- Requires-Dist: plotly (>=6.0.0)
21
- Requires-Dist: pymap3d (>=3.1.0)
22
- Requires-Dist: scikit-learn (>=1.6.1)
23
- Requires-Dist: scipy (>=1.13.1)
24
- Requires-Dist: shapely (>=2.0.7)
18
+ Requires-Dist: numpy (>=2.4.0)
19
+ Requires-Dist: openmcmc (==1.0.8)
20
+ Requires-Dist: pandas (>=2.3.3,<3.0.0)
21
+ Requires-Dist: plotly (>=6.5.0)
22
+ Requires-Dist: pymap3d (>=3.2.0)
23
+ Requires-Dist: scikit-learn (>=1.8.0)
24
+ Requires-Dist: scipy (>=1.16.3)
25
+ Requires-Dist: shapely (>=2.1.2)
25
26
  Project-URL: Documentation, https://sede-open.github.io/pyELQ/
26
27
  Project-URL: Homepage, https://sede-open.github.io/pyELQ/
27
28
  Project-URL: Repository, https://github.com/sede-open/pyELQ
@@ -51,27 +52,27 @@ SPDX-License-Identifier: Apache-2.0
51
52
  </div>
52
53
 
53
54
  # pyELQ
54
- This repository contains the Python Emission Localization and Quantification software we call pyELQ. It is code used
55
- for gas dispersion modelling, in particular methane emissions detection, localization and quantification.
55
+ This repository contains the Python Emission Localization and Quantification software we call pyELQ. It is code used
56
+ for gas dispersion modelling, in particular methane emissions detection, localization and quantification.
56
57
 
57
58
  ***
58
59
  # Background
59
- The **py**thon **E**mission **L**ocalization and **Q**uantification (pyELQ) code aims to maximize effective use of
60
- existing measurement data, especially from continuous monitoring solutions. The code has been developed to detect,
61
- localize, and quantify methane emissions from concentration and wind measurements. It can be used in combination with
60
+ The **py**thon **E**mission **L**ocalization and **Q**uantification (pyELQ) code aims to maximize effective use of
61
+ existing measurement data, especially from continuous monitoring solutions. The code has been developed to detect,
62
+ localize, and quantify methane emissions from concentration and wind measurements. It can be used in combination with
62
63
  point or beam sensors that are placed strategically on an area of interest.
63
64
 
64
- The algorithms in the pyELQ code are based a Bayesian statistics framework. pyELQ can ingest long-term concentration
65
- and wind data, and it performs an inversion to predict the likely strengths and locations of persistent methane sources.
66
- The goal is to arrive at a plausible estimate of methane emissions from an area of interest that matches the measured
67
- data. The predictions from pyELQ come with uncertainty ranges that are representative of probability density functions
68
- sampled by a Markov Chain Monte Carlo method. Time series of varying length can be processed by pyELQ: in general,
69
- the Bayesian inversion leads to a more constrained solution if more high-precision measurement data is available.
65
+ The algorithms in the pyELQ code are based a Bayesian statistics framework. pyELQ can ingest long-term concentration
66
+ and wind data, and it performs an inversion to predict the likely strengths and locations of persistent methane sources.
67
+ The goal is to arrive at a plausible estimate of methane emissions from an area of interest that matches the measured
68
+ data. The predictions from pyELQ come with uncertainty ranges that are representative of probability density functions
69
+ sampled by a Markov Chain Monte Carlo method. Time series of varying length can be processed by pyELQ: in general,
70
+ the Bayesian inversion leads to a more constrained solution if more high-precision measurement data is available.
70
71
  We have tested our code under controlled conditions as well as in operating oil and gas facilities.
71
72
 
72
- The information on the strength and the approximate location of methane emission sources provided by pyELQ can help
73
- operators with more efficient identification and quantification of (unexpected) methane sources, in order to start
74
- appropriate mitigating actions accordingly. The pyELQ code is being made available in an open-source environment,
73
+ The information on the strength and the approximate location of methane emission sources provided by pyELQ can help
74
+ operators with more efficient identification and quantification of (unexpected) methane sources, in order to start
75
+ appropriate mitigating actions accordingly. The pyELQ code is being made available in an open-source environment,
75
76
  to support various assets in their quest to reduce methane emissions.
76
77
 
77
78
  Use cases where the pyELQ code has been applied are described in the following papers:
@@ -81,30 +82,30 @@ Use cases where the pyELQ code has been applied are described in the following p
81
82
  * Weidmann, D., Hirst, B. et al. "Locating and Quantifying Methane Emissions by Inverse Analysis of Path-Integrated Concentration Data Using a Markov-Chain Monte Carlo Approach." ACS Earth and Space Chemistry 2022 6 (9), 2190-2198 (https://doi.org/10.1021/acsearthspacechem.2c00093)
82
83
 
83
84
  ## Deployment design
84
- The pyELQ code needs high-quality methane concentration and wind data to be able to provide reliable output on location
85
- and quantification of methane emission sources. This requires methane concentration sensors of sufficiently high
86
- precision in a layout that allows the detection of relevant methane emission sources, in combination with wind
87
- measurements of high enough frequency and accuracy. The optimal sensor layout typically depends on the prevailing
88
- meteorological conditions at the site of interest and requires multiple concentration sensors to cover the site under
89
- different wind directions.
85
+ The pyELQ code needs high-quality methane concentration and wind data to be able to provide reliable output on location
86
+ and quantification of methane emission sources. This requires methane concentration sensors of sufficiently high
87
+ precision in a layout that allows the detection of relevant methane emission sources, in combination with wind
88
+ measurements of high enough frequency and accuracy. The optimal sensor layout typically depends on the prevailing
89
+ meteorological conditions at the site of interest and requires multiple concentration sensors to cover the site under
90
+ different wind directions.
90
91
 
91
92
  ## pyELQ data interpretation
92
- The results from pyELQ come with uncertainty ranges that are representative of probability density functions sampled
93
- by a Markov Chain Monte Carlo method. One should take these uncertainty ranges into account when interpreting the pyELQ
94
- output data. Remember that absence of evidence for methane emissions does not always imply evidence for absence of
95
- methane emissions; for instance, when meteorological conditions are such that there is no sensor downwind of a methane
96
- source during the selected monitoring period, then it will be impossible to detect, localize and quantify
97
- this particular source.
98
- Also, there are limitations to the forward dispersion model which is used in the analysis.
99
- For example, the performance of the Gaussian plume dispersion model will degrade at lower wind speeds.
100
- Therefore, careful interpretation of the data is always required.
93
+ The results from pyELQ come with uncertainty ranges that are representative of probability density functions sampled
94
+ by a Markov Chain Monte Carlo method. One should take these uncertainty ranges into account when interpreting the pyELQ
95
+ output data. Remember that absence of evidence for methane emissions does not always imply evidence for absence of
96
+ methane emissions; for instance, when meteorological conditions are such that there is no sensor downwind of a methane
97
+ source during the selected monitoring period, then it will be impossible to detect, localize and quantify
98
+ this particular source.
99
+ Also, there are limitations to the forward dispersion model which is used in the analysis.
100
+ For example, the performance of the Gaussian plume dispersion model will degrade at lower wind speeds.
101
+ Therefore, careful interpretation of the data is always required.
101
102
 
102
103
  ***
103
104
  # Installing pyELQ as a package
104
105
  Suppose you want to use this pyELQ package in a different project.
105
- You can install it from [PyPi](https://pypi.org/project/pyelq/) through pip
106
+ You can install it from [PyPi](https://pypi.org/project/pyelq/) through pip
106
107
  `pip install pyelq`.
107
- Or you could clone the repository and install it from the source code.
108
+ Or you could clone the repository and install it from the source code.
108
109
  After activating the environment you want to install pyELQ in, open a terminal, move to the main pyELQ folder
109
110
  where pyproject.toml is located and run `pip install .`, optionally you can pass the `-e` flag is for editable mode.
110
111
  All the main options, info and settings for the package are found in the pyproject.toml file which sits in this repo
@@ -0,0 +1,37 @@
1
+ pyelq/__init__.py,sha256=QTy9T8kZm6WlCn5fZtb8oMrOYQQY1VaSp35YcCX8www,415
2
+ pyelq/component/__init__.py,sha256=z-fBVCQdUyioLsUdVyOph4NtjCaNvey9oEOMhOn4FcM,247
3
+ pyelq/component/background.py,sha256=zEy4Z7Rsy6mojJ5o4yfIpDDF1G22L-EHd-JuNKwwQBs,19133
4
+ pyelq/component/component.py,sha256=zaO2xYVu764niqLWP8bX23ieS1BhCKEhZ3HZ_UyB-m4,2374
5
+ pyelq/component/error_model.py,sha256=zl8H7LJpe3GtUdVeFKQkX8-gLn0XCTC9miPMHgwC4VA,16275
6
+ pyelq/component/offset.py,sha256=Ag9UGeVxW4q6l1E2blkYZvdw9CyGdRbhwKF8uV1YAsA,7732
7
+ pyelq/component/source_model.py,sha256=_44lQvGh2tYpR37u4uwhN6rQIznIW8x10nZ_HLhauQw,47671
8
+ pyelq/coordinate_system.py,sha256=VnyRDi22R1L99iRUyyhdBj67wSfgJG_1dU1Cgw9s8xQ,22283
9
+ pyelq/data_access/__init__.py,sha256=hj7V4vJq4Z4OKehHZvooHuFhzRxVfdLx6hzxr5869rk,187
10
+ pyelq/data_access/data_access.py,sha256=L7W92NCQMp0XffNACKm-V5EpYmLDjsYynbdaLSL_taM,3985
11
+ pyelq/dispersion_model/__init__.py,sha256=eSvJp7PYNcs_pVIlYdHxc85vaTOrPkPOo3uq2cv6Hqk,242
12
+ pyelq/dispersion_model/dispersion_model.py,sha256=ClYTlmp7fKT1gB9QvDB0Swjsgtpprzg4uBWq7xRhjo0,9644
13
+ pyelq/dispersion_model/finite_volume.py,sha256=bgFEUFcphV5GgjKOCi1sgyp55ngOsJOrXpe7045Q6Uk,56843
14
+ pyelq/dispersion_model/gaussian_plume.py,sha256=V1Edu6-G_s08yhTVNLWaVYuwss2ARVZcPZPDH5xWGLY,21211
15
+ pyelq/dispersion_model/site_layout.py,sha256=F7kzEKK1yTV3zbPj5Aj6dcEDimudqm5G0PVDLxSghCs,4439
16
+ pyelq/dlm.py,sha256=4FIEtCJtSCznST2tlURkPrxavfDFrwYGkN-OXmOmQpE,25307
17
+ pyelq/gas_species.py,sha256=WcZBtmrP-JjgluCAxNmNLvD-ndGNWEvxBVI_DCznAlI,6909
18
+ pyelq/meteorology/__init__.py,sha256=3rS7hCKJ5-dwH3I2FxdoWbSy6ena7-YugiNZ4lmGhGk,212
19
+ pyelq/meteorology/meteorology.py,sha256=HxQ5UJmkGLzNQ8EqKtepph9SIox9N6ayazBe2q41iLE,17027
20
+ pyelq/meteorology/meteorology_windfield.py,sha256=mZ6M3ECGYmv6MN_-3_IatkfTx1OUMLHMUTZd6FrckGE,8891
21
+ pyelq/model.py,sha256=52mPqGC0GbivafE7rgXBzYVKGhVEeXq5pAUF08mwYv8,15266
22
+ pyelq/plotting/__init__.py,sha256=qD90WWAAcrDBjSbvAMV464bp4BLJEJ6hcB_sRqmTh7k,177
23
+ pyelq/plotting/plot.py,sha256=nOEg9GdJoZk_MnAic3nSswfBWI6Do61S_fU3xZ6wPiM,50125
24
+ pyelq/preprocessing.py,sha256=9fknWjJA4pousDljOnKLO_lTPaljSLqJyzqOC1gfuPo,16381
25
+ pyelq/sensor/__init__.py,sha256=eEkhOjjJtyIkRrnpkmdFNFAEwZcqtbRX5DxbOXN-Dy4,198
26
+ pyelq/sensor/beam.py,sha256=6E7-cH_IoBRgferIcyOWUfnFjnakhpTbnfWDAyABezA,1806
27
+ pyelq/sensor/satellite.py,sha256=2T6NcSPc_YxgnhyOTQz8zlz6IqWl6uSnDTFHGBoy0lI,2316
28
+ pyelq/sensor/sensor.py,sha256=o48pd2-BxBwIGD3Eb1g1iooQAGTpB_wWATINuGbu3y0,12729
29
+ pyelq/source_map.py,sha256=pX02fw_fji489_vTwo2g1Xy0rh16ffMGJhHfahQeeeM,5743
30
+ pyelq/support_functions/__init__.py,sha256=-7w2WoaaQuyK0-abgKBscl97-gA9Cf1xVl2cPDBUqbU,230
31
+ pyelq/support_functions/post_processing.py,sha256=hT46tgj1SXuWEaO99Hk812CbtTGj_33OoNHlIkkL7bk,16997
32
+ pyelq/support_functions/spatio_temporal_interpolation.py,sha256=QPjd5ncho7YMDe4Y0WwWsQcAKnbNGQa-rfZ6RN4YAdY,10610
33
+ pyelq-1.2.0.dist-info/METADATA,sha256=ZWDMjbyp8cQMJZYNQkeWI8zHPPiyJxR1YDh5aLjaNv4,8505
34
+ pyelq-1.2.0.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
35
+ pyelq-1.2.0.dist-info/licenses/LICENSE.md,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
36
+ pyelq-1.2.0.dist-info/licenses/LICENSES/Apache-2.0.txt,sha256=B05uMshqTA74s-0ltyHKI6yoPfJ3zYgQbvcXfDVGFf8,10280
37
+ pyelq-1.2.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.3.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,32 +0,0 @@
1
- pyelq/__init__.py,sha256=DWp54sQ6AiZv9IKwd9y0Y7pZBVv5QA9em4n9Oq34MoM,414
2
- pyelq/component/__init__.py,sha256=6uV-V7spjDQ1sI6PT02Q9ljuqacChygAteNYfv99RCA,245
3
- pyelq/component/background.py,sha256=kalBr0fck1ktDUoNlLNff805tM2yZI0TVHPbUL5uZ5s,18705
4
- pyelq/component/component.py,sha256=rOQSWhhnKnx8Vc5MevX9B1rt42UY9gabFKq_7cJFQO8,2360
5
- pyelq/component/error_model.py,sha256=NLPKEuEPnb2DwaX78CibHy7ioMkljRzwT96Y8h6_sDc,16261
6
- pyelq/component/offset.py,sha256=RPQLjdzvS-7Moy1u_wAF84DQEEn4MqfW6RMozwf-11g,7718
7
- pyelq/component/source_model.py,sha256=eAAI8CDpd9Q474W8-1KA5t9-Zjoa2Jz-hwZ3asOxtLc,44873
8
- pyelq/coordinate_system.py,sha256=UXk6GOghMxEE3NfWcGPSVsI1q89xEjHTe9sfHbh-gDc,22281
9
- pyelq/data_access/__init__.py,sha256=hLTVYOMdmEVsckJ5OOCX9jf2Cqw5xRkQnmxCmYCGWXw,186
10
- pyelq/data_access/data_access.py,sha256=mI2HYxsZCr4vmmV-t85HYlHuZ06GJEBX4ypx9Putou0,3973
11
- pyelq/dispersion_model/__init__.py,sha256=KN1hyrEBsfoIHd0_u_BGy2n-KliiDr-_7YAHiNzhyT0,194
12
- pyelq/dispersion_model/gaussian_plume.py,sha256=q19ZB0wJBEAcdTOYb5AUw85T7yGlM7lImXPc2Uh0Gfo,31404
13
- pyelq/dlm.py,sha256=LnD3BpvYjuHw_MiZaFfamfyJMQTMxd0kay_Z7w_yWH0,25375
14
- pyelq/gas_species.py,sha256=tQy41zINgI8Q1P1iHKQWU2X48FwtzYb-mCMdYT2yqOc,6908
15
- pyelq/meteorology.py,sha256=INs_Y-SGVD27re2THTANsgnw81iu9olr-ozA4lnD08U,17433
16
- pyelq/model.py,sha256=P3H_MzQRwQpsK1aW69NcwKNyTuft_MHhsc82uSox8s4,15252
17
- pyelq/plotting/__init__.py,sha256=E3qUfLWIHlC11-P5GJKOkflKclZB8TzHpRnOZbg9swk,176
18
- pyelq/plotting/plot.py,sha256=2JYl1bR2794Lh6OezodZKTPJnRqms-n7l8Cl3nnWQEQ,50124
19
- pyelq/preprocessing.py,sha256=KDYrfOJSJHePWqdn4rWBum8AKLuO8FzaZBJjTB3uImY,12654
20
- pyelq/sensor/__init__.py,sha256=RK00UUnv4z45_kAdFoSIUKD6WmzPbbqYOlbyGG-_ZLw,197
21
- pyelq/sensor/beam.py,sha256=6E7-cH_IoBRgferIcyOWUfnFjnakhpTbnfWDAyABezA,1806
22
- pyelq/sensor/satellite.py,sha256=2T6NcSPc_YxgnhyOTQz8zlz6IqWl6uSnDTFHGBoy0lI,2316
23
- pyelq/sensor/sensor.py,sha256=t7bqU3222BRS7hXs4pWeTdeB1IkKlFYH6VdNtDU2RbU,9183
24
- pyelq/source_map.py,sha256=L82dvrZTpVQBy10BhoCJ09-gVO5d90DDwvIdIST9l4g,5741
25
- pyelq/support_functions/__init__.py,sha256=ZYcVLitB51BXYojlt6FEZ4ciDFkRlA5ZkJvnzWQsdD4,229
26
- pyelq/support_functions/post_processing.py,sha256=MBoe75SifPnsFyooA1oaF-waC-rVxtqEk-HiNjrJpQQ,16996
27
- pyelq/support_functions/spatio_temporal_interpolation.py,sha256=sU_-9Yz4I1YgNa78_KvRclsaP4LlZiE0HG7_OZ1Vahk,10609
28
- pyelq-1.1.4.dist-info/LICENSE.md,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
29
- pyelq-1.1.4.dist-info/LICENSES/Apache-2.0.txt,sha256=B05uMshqTA74s-0ltyHKI6yoPfJ3zYgQbvcXfDVGFf8,10280
30
- pyelq-1.1.4.dist-info/METADATA,sha256=JFuMlUv03rEPR9UyIA_Gcxt-eHY6sH_X9CgqNswgPYs,8515
31
- pyelq-1.1.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
32
- pyelq-1.1.4.dist-info/RECORD,,