pyIntensityFeatures 0.1.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.
- pyIntensityFeatures/__init__.py +30 -0
- pyIntensityFeatures/_main.py +500 -0
- pyIntensityFeatures/instruments/__init__.py +9 -0
- pyIntensityFeatures/instruments/satellites.py +137 -0
- pyIntensityFeatures/proc/__init__.py +10 -0
- pyIntensityFeatures/proc/boundaries.py +420 -0
- pyIntensityFeatures/proc/fitting.py +374 -0
- pyIntensityFeatures/proc/intensity.py +251 -0
- pyIntensityFeatures/tests/__init__.py +1 -0
- pyIntensityFeatures/tests/test_instruments_satellites.py +210 -0
- pyIntensityFeatures/tests/test_main.py +734 -0
- pyIntensityFeatures/tests/test_proc_boundaries.py +613 -0
- pyIntensityFeatures/tests/test_proc_fitting.py +218 -0
- pyIntensityFeatures/tests/test_proc_intensity.py +205 -0
- pyIntensityFeatures/tests/test_utils_checks.py +933 -0
- pyIntensityFeatures/tests/test_utils_coords.py +197 -0
- pyIntensityFeatures/tests/test_utils_distributions.py +236 -0
- pyIntensityFeatures/tests/test_utils_grids.py +189 -0
- pyIntensityFeatures/tests/test_utils_output.py +433 -0
- pyIntensityFeatures/utils/__init__.py +13 -0
- pyIntensityFeatures/utils/checks.py +420 -0
- pyIntensityFeatures/utils/coords.py +157 -0
- pyIntensityFeatures/utils/distributions.py +199 -0
- pyIntensityFeatures/utils/grids.py +113 -0
- pyIntensityFeatures/utils/output.py +276 -0
- pyintensityfeatures-0.1.0.dist-info/METADATA +360 -0
- pyintensityfeatures-0.1.0.dist-info/RECORD +30 -0
- pyintensityfeatures-0.1.0.dist-info/WHEEL +5 -0
- pyintensityfeatures-0.1.0.dist-info/licenses/LICENSE +28 -0
- pyintensityfeatures-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pyIntensityFeatures
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Identify features, such as auroral luminosity boundaries, in imager data
|
|
5
|
+
Home-page: https://github.com/aburrell/pyIntensityFeatures
|
|
6
|
+
Author-email: Angeline Burrell <angeline.g.burrell.civ@us.navy.mil>
|
|
7
|
+
License: Copyright (c) 2025, Angeline G. Burrell (AGB), Gareth Chisham (GC), and
|
|
8
|
+
Nicola Longden (NL)
|
|
9
|
+
All rights reserved.
|
|
10
|
+
|
|
11
|
+
Redistribution and use in source and binary forms, with or without
|
|
12
|
+
modification, are permitted provided that the following conditions are met:
|
|
13
|
+
|
|
14
|
+
* Redistributions of source code must retain the above copyright notice, this
|
|
15
|
+
list of conditions and the following disclaimer.
|
|
16
|
+
|
|
17
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
|
18
|
+
this list of conditions and the following disclaimer in the documentation
|
|
19
|
+
and/or other materials provided with the distribution.
|
|
20
|
+
|
|
21
|
+
* Neither the name of ocbpy nor the names of its contributors may be used to
|
|
22
|
+
endorse or promote products derived from this software without specific
|
|
23
|
+
prior written permission.
|
|
24
|
+
|
|
25
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
26
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
27
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
28
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
29
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
30
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
31
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
32
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
33
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
34
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
35
|
+
|
|
36
|
+
Project-URL: Documentation, https://pyintensityfeatures.readthedocs.io/en/latest/
|
|
37
|
+
Project-URL: Source, https://github.com/aburrell/pyIntensityFeatures
|
|
38
|
+
Project-URL: Tracker, https://github.com/aburrell/pyIntensityFeatures/issues
|
|
39
|
+
Project-URL: Download, https://github.com/aburrell/pyIntensityFeatures/releases
|
|
40
|
+
Keywords: aurora,aurora australis,aurora borealis,boundaries,imager,ionosphere,heliophysics,magnetosphere,northern lights,southern lights,features,intensity
|
|
41
|
+
Classifier: Development Status :: 3 - Alpha
|
|
42
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
43
|
+
Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
|
|
44
|
+
Classifier: Intended Audience :: Science/Research
|
|
45
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
46
|
+
Classifier: Natural Language :: English
|
|
47
|
+
Classifier: Programming Language :: Python :: 3
|
|
48
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
49
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
50
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
51
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
52
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
53
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
54
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
55
|
+
Requires-Python: >=3.9
|
|
56
|
+
Description-Content-Type: text/markdown
|
|
57
|
+
License-File: LICENSE
|
|
58
|
+
Requires-Dist: aacgmv2
|
|
59
|
+
Requires-Dist: numpy
|
|
60
|
+
Requires-Dist: pandas
|
|
61
|
+
Requires-Dist: scipy
|
|
62
|
+
Requires-Dist: xarray
|
|
63
|
+
Provides-Extra: apex
|
|
64
|
+
Requires-Dist: apexpy; extra == "apex"
|
|
65
|
+
Provides-Extra: test
|
|
66
|
+
Requires-Dist: coverage[toml]; extra == "test"
|
|
67
|
+
Requires-Dist: flake8; extra == "test"
|
|
68
|
+
Requires-Dist: flake8-docstrings; extra == "test"
|
|
69
|
+
Provides-Extra: doc
|
|
70
|
+
Requires-Dist: myst_parser; extra == "doc"
|
|
71
|
+
Requires-Dist: numpydoc; extra == "doc"
|
|
72
|
+
Requires-Dist: pyproject-parser; extra == "doc"
|
|
73
|
+
Requires-Dist: sphinx; extra == "doc"
|
|
74
|
+
Requires-Dist: sphinx-autoapi; extra == "doc"
|
|
75
|
+
Requires-Dist: sphinx_rtd_theme; extra == "doc"
|
|
76
|
+
Dynamic: license-file
|
|
77
|
+
|
|
78
|
+
[](http://pyIntensityFeatures.readthedocs.io/en/latest/?badge=latest)
|
|
79
|
+
[DOI]
|
|
80
|
+
[PyPI version]
|
|
81
|
+
[](https://github.com/aburrell/pyIntensityFeatures/actions/workflows/main.yml)
|
|
82
|
+
[](https://coveralls.io/github/aburrell/pyIntensityFeatures?branch=main)
|
|
83
|
+
|
|
84
|
+
<h1> <img width="128" height="128" src="https://raw.githubusercontent.com/aburrell/pyIntensityFeatures/refs/heads/main/docs/figures/pyIntensityFeatures_logo.png" alt="Snakes marking the boundaries of the auroral oval" title="pyIntensityFeatures logo" style="float:left;">
|
|
85
|
+
Overview </h1>
|
|
86
|
+
|
|
87
|
+
pyIntensityFeatures is a Python module that identifies features in imager
|
|
88
|
+
intensity data. It currently supports the identification of the Auroral
|
|
89
|
+
Luminosity Boundaries (ALBs). This package is designed to be data source
|
|
90
|
+
agnostic and uses a fitting method based on Longden et al. (2009) to identify
|
|
91
|
+
the poleward and equatorward ALBs. Current support focuses on satellite-based
|
|
92
|
+
imagers.
|
|
93
|
+
|
|
94
|
+
# Dependencies
|
|
95
|
+
|
|
96
|
+
The required dependecies encompass:
|
|
97
|
+
* aacgmv2
|
|
98
|
+
* numpy
|
|
99
|
+
* pandas
|
|
100
|
+
* scipy
|
|
101
|
+
* xarray
|
|
102
|
+
|
|
103
|
+
Optional dependencies include:
|
|
104
|
+
* apexpy
|
|
105
|
+
|
|
106
|
+
Testing is performed using the python module, unittest.
|
|
107
|
+
|
|
108
|
+
# Installation
|
|
109
|
+
|
|
110
|
+
Installation is now available through pypi
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
$ pip install pyIntensityFeatures
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
You may also checkout the repository and install it yourself:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
$ git clone git://github.com/aburrell/pyIntensityFeatures.git;
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Change directories into the repository folder and build the wheel.
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
$ cd pyIntensityFeatures/
|
|
126
|
+
$ python -m build .
|
|
127
|
+
$ pip install .
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
To run the unit tests,
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
$ python -m unittest discover
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
# Example
|
|
137
|
+
|
|
138
|
+
This example uses pysatNASA to obtain GUVI sdr-imaging data. You can use this
|
|
139
|
+
as a template to create the necessary supporting functions to identify ALBs
|
|
140
|
+
in your own data set. In iPython, run:
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
import datetime as dt
|
|
144
|
+
import pyIntensityFeatures
|
|
145
|
+
import pysat
|
|
146
|
+
from pysatNASA.instruments import timed_guvi
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Obtain the data from which you want to get boundaries.
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
stime = dt.datetime(2005, 1, 1)
|
|
153
|
+
guvi = pysat.Instrument(inst_module=timed_guvi, tag='sdr-imaging',
|
|
154
|
+
inst_id='high_res')
|
|
155
|
+
guvi.download(start=stime)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
We need to create a cleaning function to select only good intensity data using
|
|
159
|
+
the supplied DQI flag. Because GUVI images the ionosphere at several
|
|
160
|
+
wavelenghts and the satellite slice-detection function expects a 2D array for
|
|
161
|
+
intensity, we also need to create a function that will add a single-channel
|
|
162
|
+
intensity variable to the pysat GUVI Instrument.
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
def create_channel_intensity(guvi, channel='LBHlong'):
|
|
166
|
+
"""Create a new variable for the single-channel auroral intensity.
|
|
167
|
+
|
|
168
|
+
Parameters
|
|
169
|
+
----------
|
|
170
|
+
guvi : pysat.Instrument
|
|
171
|
+
pysat Instrument for the GUVI data.
|
|
172
|
+
channel : str
|
|
173
|
+
Desired channel name. (defualt='LBHlong')
|
|
174
|
+
|
|
175
|
+
"""
|
|
176
|
+
int_var = 'DISK_RECTIFIED_INTENSITY_DAY_AURORAL'
|
|
177
|
+
chan_var = 'nchan'
|
|
178
|
+
|
|
179
|
+
# Get the channel index
|
|
180
|
+
ichan = list(guvi[chan_var].values).index(channel)
|
|
181
|
+
|
|
182
|
+
# Create the new intensity variable
|
|
183
|
+
new_var = int_var.replace('DISK_RECTIFIED', channel)
|
|
184
|
+
guvi[new_var] = guvi[int_var][:, :, ichan]
|
|
185
|
+
return
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def clean_guvi(guvi, int_var):
|
|
189
|
+
"""Get a mask for clean GUVI auroral intensity.
|
|
190
|
+
|
|
191
|
+
Parameters
|
|
192
|
+
----------
|
|
193
|
+
guvi : pysat.Instrument
|
|
194
|
+
pysat Instrument for the GUVI data.
|
|
195
|
+
int_var : str
|
|
196
|
+
Intensity variable name
|
|
197
|
+
|
|
198
|
+
Returns
|
|
199
|
+
-------
|
|
200
|
+
clean_mask : array-like
|
|
201
|
+
2D array with a mask denoting the good data by the DQI auroral flag.
|
|
202
|
+
|
|
203
|
+
"""
|
|
204
|
+
flag_var = 'DQI_DAY_AURORAL'
|
|
205
|
+
|
|
206
|
+
# Get the clean mask from the flag
|
|
207
|
+
clean_mask = np.full(shape=guvi[int_var].values.shape, fill_value=False)
|
|
208
|
+
clean_mask = guvi[flag_var].values <= 0
|
|
209
|
+
|
|
210
|
+
# The pyIntensityFeatures.instruments.satellites function requires time as
|
|
211
|
+
# the first dimension
|
|
212
|
+
return clean_mask.transpose()
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
pysat allows methods that update or alter the instrument to be run when loading
|
|
216
|
+
the data. Attach the `create_channel_intensity` function and load the
|
|
217
|
+
desired day.
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
guvi.custom_attach(create_channel_intensity, kwargs={'channel': 'LBHlong'})
|
|
221
|
+
guvi.load(date=stime)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Then initialise an AuroralBounds class object. The `transpose` kwarg is set
|
|
225
|
+
to `True` to reshape the GUVI longitude, latitude, and intensity data such that
|
|
226
|
+
the time dimension is first.
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
ckwargs = {'int_var': 'LBHlong_INTENSITY_DAY_AURORAL'}
|
|
230
|
+
guvi_alb = pyIntensityFeatures.AuroralBounds(guvi, 'time_auroral',
|
|
231
|
+
'PIERCEPOINT_DAY_LONGITUDE_AURORAL',
|
|
232
|
+
'PIERCEPOINT_DAY_LATITUDE_AURORAL',
|
|
233
|
+
'LBHlong_INTENSITY_DAY_AURORAL',
|
|
234
|
+
110.0, hemisphere=1,
|
|
235
|
+
opt_coords={'channel': 'LBHlong'},
|
|
236
|
+
transpose=True,
|
|
237
|
+
clean_func=clean_guvi,
|
|
238
|
+
clean_kwargs=ckwargs)
|
|
239
|
+
print(guvi_alb)
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
The output should be as follows, with the start and end times set to reflect
|
|
243
|
+
the times at which data was provided:
|
|
244
|
+
|
|
245
|
+
```
|
|
246
|
+
Auroral Boundary object
|
|
247
|
+
=======================
|
|
248
|
+
Instrument Data: pysat Instrument object
|
|
249
|
+
-----------------------
|
|
250
|
+
Platform: 'timed'
|
|
251
|
+
Name: 'guvi'
|
|
252
|
+
Tag: 'sdr-imaging'
|
|
253
|
+
Instrument id: 'high_res'
|
|
254
|
+
|
|
255
|
+
Data Processing
|
|
256
|
+
---------------
|
|
257
|
+
Cleaning Level: 'clean'
|
|
258
|
+
Data Padding: None
|
|
259
|
+
Custom Functions: 1 applied
|
|
260
|
+
0: <function create_channel_intensity>
|
|
261
|
+
: Kwargs={'channel': 'LBHlong'}
|
|
262
|
+
|
|
263
|
+
Local File Statistics
|
|
264
|
+
---------------------
|
|
265
|
+
Number of files: 711
|
|
266
|
+
Date Range: 01 January 2005 --- 01 March 2005
|
|
267
|
+
|
|
268
|
+
Loaded Data Statistics
|
|
269
|
+
----------------------
|
|
270
|
+
Date: 01 January 2005
|
|
271
|
+
DOY: 001
|
|
272
|
+
Time range: 01 January 2005 00:12:38 --- 01 January 2005 23:59:59
|
|
273
|
+
Number of Times: 23989
|
|
274
|
+
Number of variables: 70
|
|
275
|
+
|
|
276
|
+
Variable Names:
|
|
277
|
+
ORBIT_DAY LATITUDE_DAY LONGITUDE_DAY
|
|
278
|
+
...
|
|
279
|
+
nCross nCrossDayAur LBHlong_INTENSITY_DAY_AURORAL
|
|
280
|
+
|
|
281
|
+
pysat Meta object
|
|
282
|
+
-----------------
|
|
283
|
+
Tracking 8 metadata values
|
|
284
|
+
Metadata for 90 standard variables
|
|
285
|
+
Metadata for 40 global attributes
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
Data Variables
|
|
289
|
+
--------------
|
|
290
|
+
Time: time_auroral
|
|
291
|
+
Geo Lon: PIERCEPOINT_DAY_LONGITUDE_AURORAL
|
|
292
|
+
Geo Lat: PIERCEPOINT_DAY_LATITUDE_AURORAL
|
|
293
|
+
Intensity: LBHlong_INTENSITY_DAY_AURORAL
|
|
294
|
+
Transpose: {'PIERCEPOINT_DAY_LONGITUDE_AURORAL': True,
|
|
295
|
+
'PIERCEPOINT_DAY_LATITUDE_AURORAL': True,
|
|
296
|
+
'LBHlong_INTENSITY_DAY_AURORAL': True}
|
|
297
|
+
|
|
298
|
+
Coordinate Attributes
|
|
299
|
+
---------------------
|
|
300
|
+
Hemisphere: 1
|
|
301
|
+
Altitude: 110.00 km
|
|
302
|
+
Optional coords: {'channel': 'LBHlong', 'hemisphere': 1}
|
|
303
|
+
Start time: 2005-01-01T00:12:38.575362000
|
|
304
|
+
End time: 2005-01-01T23:59:59.722748000
|
|
305
|
+
|
|
306
|
+
Instrument Functions
|
|
307
|
+
--------------------
|
|
308
|
+
Slicing: functools.partial(<function get_auroral_slice>, transpose=True)
|
|
309
|
+
Cleaning: functools.partial(<function clean_guvi>,
|
|
310
|
+
int_var='LBHlong_INTENSITY_DAY_AURORAL')
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
Now, get the ALBs for the loaded data using the method defaults. This will
|
|
314
|
+
update the `boundaries` attribute from `None` to a filled or empty xarray
|
|
315
|
+
Dataset. We will update the end time to be shorter than the amount of loaded
|
|
316
|
+
data to limit the processing time.
|
|
317
|
+
|
|
318
|
+
```
|
|
319
|
+
guvi_alb.etime = dt.datetime(2005, 1, 1, 0, 25)
|
|
320
|
+
guvi_alb.set_boundaries()
|
|
321
|
+
print(guvi_alb.boundaries)
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
This will yield one slice of intensity data in the Northern hemisphere with
|
|
325
|
+
ALBs:
|
|
326
|
+
|
|
327
|
+
```
|
|
328
|
+
<xarray.Dataset>
|
|
329
|
+
Dimensions: (sweep_start: 1, mlt: 48, coeff: 12, lat: 31, sweep_end: 1)
|
|
330
|
+
Coordinates:
|
|
331
|
+
* sweep_start (sweep_start) datetime64[ns] 2005-01-01T00:24:35.572131
|
|
332
|
+
* sweep_end (sweep_end) datetime64[ns] 2005-01-01T00:49:11.295639
|
|
333
|
+
* mlt (mlt) float64 0.25 0.75 1.25 1.75 ... 22.75 23.25 23.75
|
|
334
|
+
channel <U7 'LBHlong'
|
|
335
|
+
hemisphere int64 1
|
|
336
|
+
* lat (lat) float64 59.5 60.5 61.5 62.5 ... 86.5 87.5 88.5 89.5
|
|
337
|
+
Dimensions without coordinates: coeff
|
|
338
|
+
Data variables:
|
|
339
|
+
eq_bounds (sweep_start, mlt) float64 63.5 64.03 nan ... nan 62.98 nan
|
|
340
|
+
eq_uncert (sweep_start, mlt) float64 0.741 0.8169 nan ... 2.219 nan
|
|
341
|
+
po_bounds (sweep_start, mlt) float64 73.96 76.12 nan ... nan 71.24 nan
|
|
342
|
+
po_uncert (sweep_start, mlt) float64 0.97 2.213 nan ... nan 0.6226 nan
|
|
343
|
+
eq_params (sweep_start, mlt, coeff) float64 67.87 -2.033 ... nan nan
|
|
344
|
+
po_params (sweep_start, mlt, coeff) float64 67.87 -2.033 ... nan nan
|
|
345
|
+
mean_intensity (sweep_start, lat, mlt) float64 0.2494 0.8067 ... nan nan
|
|
346
|
+
std_intensity (sweep_start, lat, mlt) float64 10.72 9.089 ... nan nan
|
|
347
|
+
num_intensity (sweep_start, lat, mlt) float64 10.72 9.089 ... nan nan
|
|
348
|
+
Attributes:
|
|
349
|
+
min_mlat_base: 59.0
|
|
350
|
+
mag_method: ALLOWTRACE
|
|
351
|
+
mlat_inc: 1.0
|
|
352
|
+
mlt_inc: 0.5
|
|
353
|
+
un_threshold: 1.25
|
|
354
|
+
lt_out_bin: 5.0
|
|
355
|
+
max_iqr: 1.5
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
You can then save the data as a NetCDF using the built-in xarray Dataset method.
|
|
359
|
+
All the kwargs from the `set_boundaries` method have been added as attributes to
|
|
360
|
+
ensure reproducibility of the identified boundaries.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
pyIntensityFeatures/__init__.py,sha256=YIDH9ou5u18AE1jDDM752pUVxtrMNswkfr6UJzFCIXE,990
|
|
2
|
+
pyIntensityFeatures/_main.py,sha256=tU2fi_GPJ8T7Mqt4iliU7EP7HJwKJHpofu_lc4QJbvI,19250
|
|
3
|
+
pyIntensityFeatures/instruments/__init__.py,sha256=0Ta2X4OCTwTRD9RBe-smdFsXhtP7uDSOtkJjRb_8Jq8,329
|
|
4
|
+
pyIntensityFeatures/instruments/satellites.py,sha256=9YARPRv9ABLswiXkPEC-4PjZUCojwCzKVOk_GvWXDzs,4731
|
|
5
|
+
pyIntensityFeatures/proc/__init__.py,sha256=VivAhUaNzxHRKGvoZWZdVBHM51J30BCueoxSsEWiCaE,382
|
|
6
|
+
pyIntensityFeatures/proc/boundaries.py,sha256=QcBfudrYHqskMBQvnk-10mX51_pb2rzzMu9kgBgfW8s,16772
|
|
7
|
+
pyIntensityFeatures/proc/fitting.py,sha256=u9FmNujlGvHB_3Ylnes2byejWy_MtyakgQig4FpzKao,14327
|
|
8
|
+
pyIntensityFeatures/proc/intensity.py,sha256=P6Z3mVvv68Oef8sJ37v7VnlE8UqT2-EpzrEHhMNzL2Q,10979
|
|
9
|
+
pyIntensityFeatures/tests/__init__.py,sha256=XIqU5yPIoD3TVB4SnBDT6vUO5FL_bsFWcUCyVlAwK1Y,62
|
|
10
|
+
pyIntensityFeatures/tests/test_instruments_satellites.py,sha256=bfzTkjovSy3DJLdjYLYAW1dmxTUOP_8dQaXr-6IUS4U,8986
|
|
11
|
+
pyIntensityFeatures/tests/test_main.py,sha256=-Bf-akD6SP_FeAMh9FPDqTHMxZbwA4LI1pdjCNoVouo,29490
|
|
12
|
+
pyIntensityFeatures/tests/test_proc_boundaries.py,sha256=CDWxUz8f-QqEI1PrBCi1Xo9knxdEJp_PoTUastwNr2I,26466
|
|
13
|
+
pyIntensityFeatures/tests/test_proc_fitting.py,sha256=Iy1QrzhFMKS7m4aR1GTEFUyuKCy2yskHewAfD38N0Rg,9010
|
|
14
|
+
pyIntensityFeatures/tests/test_proc_intensity.py,sha256=nk7qy85z5npfpLvwZGoj22MqzGuf-L85iXprXrXw9Bw,9377
|
|
15
|
+
pyIntensityFeatures/tests/test_utils_checks.py,sha256=CMFy_NYS-Lqp26c7IDP5HfSLyOat0YOc-ymOYoCTqXk,38841
|
|
16
|
+
pyIntensityFeatures/tests/test_utils_coords.py,sha256=bUnceqTjf2ZCQeMFSlfoHueGjebQGI0ipxpJCdYz8kM,7952
|
|
17
|
+
pyIntensityFeatures/tests/test_utils_distributions.py,sha256=TNluwLfCrughn7RJqweK0n8XgKWHow92iiaxQPlmbww,8198
|
|
18
|
+
pyIntensityFeatures/tests/test_utils_grids.py,sha256=K0AB3aeObNyp6wag1VGU2sgjFFc3xH5TT2TXdF7NWEE,7678
|
|
19
|
+
pyIntensityFeatures/tests/test_utils_output.py,sha256=7EGS7VkLNAvhECMC_CWcThSj3K5JzDQoc4Ilabti4qs,19030
|
|
20
|
+
pyIntensityFeatures/utils/__init__.py,sha256=LiltYUk8UPuziwpYlOVBkEizU7RclwVzMQwsOmUl-pk,548
|
|
21
|
+
pyIntensityFeatures/utils/checks.py,sha256=RqHri9p9tnzBkiyEQOZuMaAuApE5G4kArchVxmNa5HQ,15265
|
|
22
|
+
pyIntensityFeatures/utils/coords.py,sha256=NohKRfGBEuoLjx60UDCVV97_Jlt88VucJbvbxxQcsac,4885
|
|
23
|
+
pyIntensityFeatures/utils/distributions.py,sha256=T-X_VcP_KZSDo-aOyUyyZ2VvFYx18OWcl__ei_CxMlw,4883
|
|
24
|
+
pyIntensityFeatures/utils/grids.py,sha256=LHSGXuqErJUyC1mjS9wrd_AiZeQx3vBaCui8grd2KgU,3850
|
|
25
|
+
pyIntensityFeatures/utils/output.py,sha256=eyuHGzOk7e_Hb3PYEMpMK8p_xnEClSCGxpcgeoZ8COc,9452
|
|
26
|
+
pyintensityfeatures-0.1.0.dist-info/licenses/LICENSE,sha256=2rqvPCo5G2RAFaDXYvLH4sHIljYOaif3Cs_1NoQxPxg,1534
|
|
27
|
+
pyintensityfeatures-0.1.0.dist-info/METADATA,sha256=dhxEd6IkvwunK5tNyZVkB2-vIvuQOqdRB8AMgzPDfM4,13211
|
|
28
|
+
pyintensityfeatures-0.1.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
29
|
+
pyintensityfeatures-0.1.0.dist-info/top_level.txt,sha256=FO-XctjFafctEgZ7Py9YE0NH3DSfA5h4sDdJnKnBeOI,20
|
|
30
|
+
pyintensityfeatures-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
Copyright (c) 2025, Angeline G. Burrell (AGB), Gareth Chisham (GC), and
|
|
2
|
+
Nicola Longden (NL)
|
|
3
|
+
All rights reserved.
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
* Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
* Neither the name of ocbpy nor the names of its contributors may be used to
|
|
16
|
+
endorse or promote products derived from this software without specific
|
|
17
|
+
prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pyIntensityFeatures
|