PyThea 0.14.0__tar.gz → 1.1.0__tar.gz
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.
- {pythea-0.14.0 → pythea-1.1.0}/CHANGELOG.md +28 -0
- {pythea-0.14.0 → pythea-1.1.0}/PKG-INFO +24 -9
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/PyThea_app.py +1 -1
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/_version.py +2 -2
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/config/selected_imagers.py +7 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/extensions/Parker_spirals/utils.py +1 -1
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/extensions/hek/utils.py +67 -37
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/modules.py +1 -1
- pythea-1.1.0/PyThea/sunpy_dev/extern/sunkit_instruments/aia/utils.py +20 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/sunpy_dev/map/maputils.py +25 -10
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/test/figure_hashes.json +2 -2
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/test/test_extension_utils.py +2 -2
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/utils.py +14 -7
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/utils_database.py +2 -1
- {pythea-0.14.0 → pythea-1.1.0}/PyThea.egg-info/PKG-INFO +24 -9
- {pythea-0.14.0 → pythea-1.1.0}/PyThea.egg-info/requires.txt +3 -3
- {pythea-0.14.0 → pythea-1.1.0}/README.md +5 -4
- {pythea-0.14.0 → pythea-1.1.0}/README_pypi.md +5 -1
- {pythea-0.14.0 → pythea-1.1.0}/environment.yml +4 -4
- {pythea-0.14.0 → pythea-1.1.0}/requirements.txt +3 -3
- {pythea-0.14.0 → pythea-1.1.0}/setup.cfg +1 -2
- {pythea-0.14.0 → pythea-1.1.0}/setup.py +3 -3
- pythea-0.14.0/PyThea/sunpy_dev/extern/sunkit_instruments/aia/utils.py +0 -14
- {pythea-0.14.0 → pythea-1.1.0}/.readthedocs.yaml +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/LICENSE.md +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/MANIFEST.in +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/callbacks.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/config/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/config/app_styles.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/config/config_sliders.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/config/selected_bodies.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/data/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/data/sample_data.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/extensions/LICENSE_gcs_python.md +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/extensions/Parker_spirals/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/extensions/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/extensions/buttons.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/extensions/hek/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/geometrical_models.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/pythea_cli.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/sunpy_dev/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/aia/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/lasco/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/lasco/utils.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/stereo/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/stereo/utils.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/sunpy_dev/map/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/test/Pythea_test.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/test/__init__.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/test/conftest.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/test/test_figures.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/test/test_geometrical_models.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/test/test_imports.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/test/test_remote_clients.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/test/test_utils.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea/version.py +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea.egg-info/.DS_Store +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea.egg-info/SOURCES.txt +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea.egg-info/dependency_links.txt +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea.egg-info/entry_points.txt +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea.egg-info/not-zip-safe +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/PyThea.egg-info/top_level.txt +0 -0
- {pythea-0.14.0 → pythea-1.1.0}/pyproject.toml +0 -0
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
# v1.1.0 (12-Feb-2025)
|
|
2
|
+
|
|
3
|
+
## Minor Changes
|
|
4
|
+
- Updates the dependencies for sunpy>6.0
|
|
5
|
+
- Improves the utility of HEK events retrieval
|
|
6
|
+
|
|
7
|
+
## Bug Fixes
|
|
8
|
+
- Fixes a flakes8 error for using bare except
|
|
9
|
+
- Fixes get_horizons_coord passing id_type
|
|
10
|
+
- Fixes a bug when no flare or AR data returned from HEK in the app
|
|
11
|
+
- Removes AIA fix_observer_location as it is no longer needed
|
|
12
|
+
|
|
13
|
+
# v1.0.0 (19-Nov-2024)
|
|
14
|
+
|
|
15
|
+
## Features
|
|
16
|
+
- Adds imaging data from Solar Orbiter's SOLOHi.
|
|
17
|
+
- Implements offline fits file loading from local database.
|
|
18
|
+
|
|
19
|
+
## Minor Changes
|
|
20
|
+
- Updates Test figure hashes.
|
|
21
|
+
- Final changes in README before the major release.
|
|
22
|
+
|
|
23
|
+
## Bug Fixes
|
|
24
|
+
- Fixes a temporary bug with JSOC and AIA prep
|
|
25
|
+
- Fixes potential bug with maps loading into map sequence.
|
|
26
|
+
- Fixes a bug when fits database is selected but no files downloaded.
|
|
27
|
+
- Fixes a bug with the maps clims.
|
|
28
|
+
|
|
1
29
|
# v0.14.0 (03-Oct-2024)
|
|
2
30
|
|
|
3
31
|
## Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: PyThea
|
|
3
|
-
Version:
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: PyThea: A software package to reconstruct the 3D structure of CMEs and shock waves
|
|
5
5
|
Home-page: https://github.com/AthKouloumvakos/PyThea
|
|
6
6
|
Author: Athanasios Kouloumvakos
|
|
@@ -10,25 +10,25 @@ Keywords: science,solar physics,solar,sun,shock waves
|
|
|
10
10
|
Platform: any
|
|
11
11
|
Classifier: Programming Language :: Python
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
15
|
Classifier: Development Status :: 4 - Beta
|
|
16
16
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
17
17
|
Classifier: Operating System :: OS Independent
|
|
18
18
|
Classifier: Intended Audience :: Science/Research
|
|
19
19
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
20
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.10, <3.12
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
License-File: LICENSE.md
|
|
23
|
-
Requires-Dist: numpy
|
|
23
|
+
Requires-Dist: numpy
|
|
24
24
|
Requires-Dist: pandas
|
|
25
25
|
Requires-Dist: scipy
|
|
26
26
|
Requires-Dist: aiapy
|
|
27
|
-
Requires-Dist: astropy
|
|
27
|
+
Requires-Dist: astropy
|
|
28
28
|
Requires-Dist: astroquery
|
|
29
29
|
Requires-Dist: jplephem
|
|
30
30
|
Requires-Dist: numexpr
|
|
31
|
-
Requires-Dist: sunpy==
|
|
31
|
+
Requires-Dist: sunpy==6.0.4
|
|
32
32
|
Requires-Dist: sunpy_soar
|
|
33
33
|
Requires-Dist: parfive==2.1.0
|
|
34
34
|
Requires-Dist: pooch
|
|
@@ -44,6 +44,17 @@ Requires-Dist: pyvista
|
|
|
44
44
|
Requires-Dist: pytest-astropy
|
|
45
45
|
Requires-Dist: pytest-sugar
|
|
46
46
|
Requires-Dist: pytest-mpl
|
|
47
|
+
Dynamic: author
|
|
48
|
+
Dynamic: author-email
|
|
49
|
+
Dynamic: classifier
|
|
50
|
+
Dynamic: description
|
|
51
|
+
Dynamic: description-content-type
|
|
52
|
+
Dynamic: home-page
|
|
53
|
+
Dynamic: keywords
|
|
54
|
+
Dynamic: license
|
|
55
|
+
Dynamic: requires-dist
|
|
56
|
+
Dynamic: requires-python
|
|
57
|
+
Dynamic: summary
|
|
47
58
|
|
|
48
59
|
# PyThea: A software package to reconstruct the 3D structure of CMEs and shock waves
|
|
49
60
|
|
|
@@ -54,7 +65,7 @@ Requires-Dist: pytest-mpl
|
|
|
54
65
|

|
|
55
66
|

|
|
56
67
|
|
|
57
|
-
_PyThea_ is an open-source software package that can be used to reconstruct the 3D structure of Coronal Mass Ejections (CMEs) and shock waves and determine their kinematics using remote-sensing observations. The tool implements the Graduated Cylindrical Shell (GCS) model that can be used to reconstruct CMEs and two geometrical models, namely a spheroid and ellipsoid model to reconstruct shock waves. It also implements remote-sensing observations from multiple viewpoints such as the Solar and Heliospheric Observatory (SoHO)
|
|
68
|
+
_PyThea_ is an open-source software package that can be used to reconstruct the 3D structure of Coronal Mass Ejections (CMEs) and shock waves and determine their kinematics using remote-sensing observations. The tool implements the Graduated Cylindrical Shell (GCS) model that can be used to reconstruct CMEs and two geometrical models, namely a spheroid and ellipsoid model to reconstruct shock waves. It also implements remote-sensing observations from multiple viewpoints such as the Solar and Heliospheric Observatory (SoHO), Solar Terrestrial Relations Observatory (STEREO), and Parker Solar Probe.
|
|
58
69
|
|
|
59
70
|
## 💾 Installation
|
|
60
71
|
|
|
@@ -153,3 +164,7 @@ If you use _PyThea_ for scientific work or research presented in a publication,
|
|
|
153
164
|
## ⓘ The mythology of Thea:
|
|
154
165
|
|
|
155
166
|
In Greek mythology, Thea, also called Euryphaessa "wide-shining", is the Titaness of sight and the shining light of the clear blue sky. Her brother/consort is Hyperion, a Titan and god of the sun, and together they are the parents of Helios (the Sun), Selene (the Moon), and Eos (the Dawn).
|
|
167
|
+
|
|
168
|
+
## Development Support:
|
|
169
|
+
|
|
170
|
+
The lead author of this software package Athanasios Kouloumvakos acknowledges financial support from NASA Grant 80NSSC24K0071 for the further development and improvement of PyThea during 2024. This grant was part of the NASA Headquarters Heliophysics Tools and Methods Program in response to NASA ROSES–2022 (NNH22ZDA001N).
|
|
@@ -85,7 +85,7 @@ def footer_text():
|
|
|
85
85
|
More imaging data have been added:
|
|
86
86
|
- SDO/AIA images from 211A channel.
|
|
87
87
|
- PSP/WISPR inner and outer telescope images.
|
|
88
|
-
- SolO/EUI and
|
|
88
|
+
- SolO/EUI, METIS, and HI(tiles 1&2) images.
|
|
89
89
|
''', icon='ℹ️')
|
|
90
90
|
st.warning('''
|
|
91
91
|
**NOTE: From PyThea >0.8.1 the JSON fitting files will be slightly different from the old ones.**
|
|
@@ -80,3 +80,10 @@ imager_dict['EUI-FSI'] = {'fido': (a.Instrument('EUI'), a.soar.Product('EUI-FSI1
|
|
|
80
80
|
imager_dict['METIS'] = {'fido': (a.Instrument('METIS'), a.soar.Product('METIS-VL-TB'), a.Level(2)),
|
|
81
81
|
'process': {'dimensions': (1024*u.pixel, 1024*u.pixel), 'superpixel': 2},
|
|
82
82
|
'source': 'SOLO', 'instrument': 'METIS', 'detector': 'VLD', 'wavelength': 'TB'}
|
|
83
|
+
|
|
84
|
+
for tile in range(1, 5):
|
|
85
|
+
z = 'T' if tile in [1, 2] else 'G'
|
|
86
|
+
imager_dict[f'SOLOHI-T{tile}'] = {'fido': (a.Instrument('SOLOHI'),
|
|
87
|
+
a.soar.Product(f'SOLOHI-{tile}F{z}'), a.Level(2)),
|
|
88
|
+
'process': {'superpixel': 2},
|
|
89
|
+
'source': 'SOLO', 'instrument': 'SOLOHI', 'detector': f'T{tile}'}
|
|
@@ -25,7 +25,7 @@ def plot_parker_spiral(axis, map, bodies, sw_speed=350 * (u.km / u.second)):
|
|
|
25
25
|
None
|
|
26
26
|
"""
|
|
27
27
|
for body in bodies:
|
|
28
|
-
pos = get_horizons_coord(bodies_dict[body][0], map.date_average
|
|
28
|
+
pos = get_horizons_coord(bodies_dict[body][0], map.date_average)
|
|
29
29
|
pos = pos.transform_to(frames.HeliographicCarrington(observer='Earth', obstime=map.date_average))
|
|
30
30
|
|
|
31
31
|
spiral_coord = Parker_spirals.spiral(pos, sw_speed[body], map.date_average)
|
|
@@ -8,8 +8,67 @@ from sunpy.net import hek
|
|
|
8
8
|
from sunpy.physics.differential_rotation import solar_rotate_coordinate
|
|
9
9
|
from sunpy.time import parse_time
|
|
10
10
|
|
|
11
|
+
hek_client = hek.HEKClient()
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
def get_hek_active_regions(date, time_range):
|
|
15
|
+
start_time = date + TimeDelta(time_range[0] * u.hour)
|
|
16
|
+
end_time = date + TimeDelta(time_range[1] * u.hour)
|
|
17
|
+
|
|
18
|
+
responses = hek_client.search(a.Time(start_time, end_time),
|
|
19
|
+
a.hek.AR, a.hek.FRM.Name == 'HMI SHARP')
|
|
20
|
+
|
|
21
|
+
if str(responses) == '<No columns>':
|
|
22
|
+
return []
|
|
23
|
+
|
|
24
|
+
responses.keep_columns(['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y', 'event_starttime'])
|
|
25
|
+
indx = [i for i, x in enumerate(responses['ar_noaanum']) if x is None]
|
|
26
|
+
responses.remove_rows(indx)
|
|
27
|
+
responses = responses[['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y', 'event_starttime']]
|
|
28
|
+
dates = Time(responses['event_starttime'])
|
|
29
|
+
time_diff = np.abs(dates - date)
|
|
30
|
+
time_diff_seconds = np.array([td.sec for td in time_diff])
|
|
31
|
+
if len(np.unique(time_diff_seconds)) > 1:
|
|
32
|
+
responses.remove_rows(np.where(time_diff_seconds == np.max(time_diff_seconds)))
|
|
33
|
+
|
|
34
|
+
responses_ = hek_client.search(a.Time(start_time, end_time),
|
|
35
|
+
a.hek.AR, a.hek.FRM.Name == 'NOAA SWPC Observer')
|
|
36
|
+
responses_.keep_columns(['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y'])
|
|
37
|
+
|
|
38
|
+
responses['ar_mcintoshcls'] = np.full(responses['ar_noaanum'].shape[0], None)
|
|
39
|
+
responses['ar_mtwilsoncls'] = np.full(responses['ar_noaanum'].shape[0], None)
|
|
40
|
+
|
|
41
|
+
for rn, clm, clw in zip(responses_['ar_noaanum'], responses_['ar_mcintoshcls'], responses_['ar_mtwilsoncls']):
|
|
42
|
+
i = np.argwhere(responses['ar_noaanum'] == rn)
|
|
43
|
+
responses['ar_mcintoshcls'][i] = clm
|
|
44
|
+
responses['ar_mtwilsoncls'][i] = clw
|
|
45
|
+
|
|
46
|
+
return responses
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def get_hek_coronal_holes(start_time, end_time):
|
|
50
|
+
|
|
51
|
+
responses = hek_client.search(a.Time(start_time, end_time),
|
|
52
|
+
a.hek.CH, a.hek.FRM.Name == 'SPoCA')
|
|
53
|
+
return responses
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def get_hek_flares(start_time, end_time):
|
|
57
|
+
# TODO: Merge this with get_hek_flare from PyThea utils.
|
|
58
|
+
responses = hek_client.search(a.Time(start_time, end_time),
|
|
59
|
+
a.hek.FL, a.hek.FRM.Name == 'SWPC')
|
|
60
|
+
|
|
61
|
+
if str(responses) == '<No columns>':
|
|
62
|
+
return []
|
|
63
|
+
|
|
64
|
+
responses.keep_columns(['event_starttime', 'event_peaktime', 'fl_goescls', 'hgs_x', 'hgs_y', 'ar_noaanum'])
|
|
65
|
+
responses.remove_rows(np.where((responses['hgs_x'] == 0) & (responses['hgs_y'] == 0)))
|
|
66
|
+
responses = responses[['event_starttime', 'event_peaktime', 'fl_goescls', 'hgs_x', 'hgs_y', 'ar_noaanum']]
|
|
67
|
+
|
|
68
|
+
return responses
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def plot_hek(axis, date, mode, time_range=[-2, 2], hek_responses=None):
|
|
13
72
|
"""
|
|
14
73
|
Plots HEK (Heliophysics Event Knowledgebase) events on a given axis.
|
|
15
74
|
|
|
@@ -34,37 +93,13 @@ def plot_hek(axis, map, mode, time_range=[-2, 2], hek_responses=None):
|
|
|
34
93
|
responses: list
|
|
35
94
|
The list of HEK event responses.
|
|
36
95
|
"""
|
|
37
|
-
|
|
38
|
-
start_time =
|
|
39
|
-
end_time =
|
|
96
|
+
|
|
97
|
+
start_time = date + TimeDelta(time_range[0] * u.hour)
|
|
98
|
+
end_time = date + TimeDelta(time_range[1] * u.hour)
|
|
40
99
|
|
|
41
100
|
if mode == 'Active Regions':
|
|
42
101
|
if hek_responses is None or not hek_responses['Active Regions']:
|
|
43
|
-
responses =
|
|
44
|
-
a.hek.AR, a.hek.FRM.Name == 'HMI SHARP')
|
|
45
|
-
|
|
46
|
-
responses.keep_columns(['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y', 'event_starttime'])
|
|
47
|
-
indx = [i for i, x in enumerate(responses['ar_noaanum']) if x is None]
|
|
48
|
-
responses.remove_rows(indx)
|
|
49
|
-
responses = responses[['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y', 'event_starttime']]
|
|
50
|
-
dates = Time(responses['event_starttime'])
|
|
51
|
-
time_diff = np.abs(dates - map.date_average)
|
|
52
|
-
time_diff_seconds = np.array([td.sec for td in time_diff])
|
|
53
|
-
if len(np.unique(time_diff_seconds)) > 1:
|
|
54
|
-
responses.remove_rows(np.where(time_diff_seconds == np.max(time_diff_seconds)))
|
|
55
|
-
|
|
56
|
-
responses_ = hek_client.search(a.Time(start_time, end_time),
|
|
57
|
-
a.hek.AR, a.hek.FRM.Name == 'NOAA SWPC Observer')
|
|
58
|
-
responses_.keep_columns(['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y'])
|
|
59
|
-
|
|
60
|
-
responses['ar_mcintoshcls'] = np.full(responses['ar_noaanum'].shape[0], None)
|
|
61
|
-
responses['ar_mtwilsoncls'] = np.full(responses['ar_noaanum'].shape[0], None)
|
|
62
|
-
|
|
63
|
-
for rn, clm, clw in zip(responses_['ar_noaanum'], responses_['ar_mcintoshcls'], responses_['ar_mtwilsoncls']):
|
|
64
|
-
i = np.argwhere(responses['ar_noaanum'] == rn)
|
|
65
|
-
responses['ar_mcintoshcls'][i] = clm
|
|
66
|
-
responses['ar_mtwilsoncls'][i] = clw
|
|
67
|
-
print(responses)
|
|
102
|
+
responses = get_hek_active_regions(date, time_range)
|
|
68
103
|
else:
|
|
69
104
|
responses = hek_responses['Active Regions']
|
|
70
105
|
|
|
@@ -78,8 +113,7 @@ def plot_hek(axis, map, mode, time_range=[-2, 2], hek_responses=None):
|
|
|
78
113
|
horizontalalignment='center', verticalalignment='center')
|
|
79
114
|
elif mode == 'Coronal Holes':
|
|
80
115
|
if hek_responses is None or not hek_responses['Coronal Holes']:
|
|
81
|
-
responses =
|
|
82
|
-
a.hek.CH, a.hek.FRM.Name == 'SPoCA')
|
|
116
|
+
responses = get_hek_coronal_holes(start_time, end_time)
|
|
83
117
|
else:
|
|
84
118
|
responses = hek_responses['Coronal Holes']
|
|
85
119
|
|
|
@@ -92,15 +126,11 @@ def plot_hek(axis, map, mode, time_range=[-2, 2], hek_responses=None):
|
|
|
92
126
|
[(float(v[0]), float(v[1])) * u.arcsec for v in p3],
|
|
93
127
|
obstime=ch_date, observer='earth',
|
|
94
128
|
frame=frames.Helioprojective)
|
|
95
|
-
rotated_ch_boundary = solar_rotate_coordinate(ch_boundary, time=
|
|
129
|
+
rotated_ch_boundary = solar_rotate_coordinate(ch_boundary, time=date)
|
|
96
130
|
axis.plot_coord(rotated_ch_boundary, color='c')
|
|
97
131
|
elif mode == 'Flares':
|
|
98
132
|
if hek_responses is None or not hek_responses['Flares']:
|
|
99
|
-
responses =
|
|
100
|
-
a.hek.FL, a.hek.FRM.Name == 'SWPC')
|
|
101
|
-
responses.keep_columns(['event_starttime', 'event_peaktime', 'fl_goescls', 'hgs_x', 'hgs_y', 'ar_noaanum'])
|
|
102
|
-
responses.remove_rows(np.where((responses['hgs_x'] == 0) & (responses['hgs_y'] == 0)))
|
|
103
|
-
responses = responses[['event_starttime', 'event_peaktime', 'fl_goescls', 'hgs_x', 'hgs_y', 'ar_noaanum']]
|
|
133
|
+
responses = get_hek_flares(start_time, end_time)
|
|
104
134
|
else:
|
|
105
135
|
responses = hek_responses['Flares']
|
|
106
136
|
|
|
@@ -352,7 +352,7 @@ def figure_streamlit(st, running_map, image_mode, imager, model):
|
|
|
352
352
|
if 'hek_responses' not in st.session_state:
|
|
353
353
|
st.session_state.hek_responses = {'Active Regions': [], 'Coronal Holes': [], 'Flares': []}
|
|
354
354
|
for mode in st.session_state.hek_list:
|
|
355
|
-
st.session_state.hek_responses[mode] = plot_hek(axis, running_map, mode,
|
|
355
|
+
st.session_state.hek_responses[mode] = plot_hek(axis, running_map.date_average, mode,
|
|
356
356
|
st.session_state.imaging_time_range,
|
|
357
357
|
hek_responses=st.session_state.hek_responses)
|
|
358
358
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import warnings
|
|
2
|
+
from astropy.time import TimeDelta
|
|
3
|
+
from aiapy.calibrate import update_pointing
|
|
4
|
+
|
|
5
|
+
__all__ = ['prep_aia']
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def prep_aia(map_sequence):
|
|
9
|
+
try:
|
|
10
|
+
map_sequence = [update_pointing(tmap) for tmap in map_sequence]
|
|
11
|
+
except Exception:
|
|
12
|
+
warnings.warn('Prepare AIA maps failed, script proceeded without update_pointing. Check connection with JSOC.', UserWarning)
|
|
13
|
+
|
|
14
|
+
# AIAMap already fixes the .observer_coordinate property with HAE, therefore, the following is removed.
|
|
15
|
+
# map_sequence = [fix_observer_location(tmap) for tmap in map_sequence]
|
|
16
|
+
|
|
17
|
+
for map_ in map_sequence:
|
|
18
|
+
map_.meta['DATE-AVG'] = (map_.date + TimeDelta(map_.meta['exptime']/2, format='sec')).value
|
|
19
|
+
|
|
20
|
+
return map_sequence
|
|
@@ -18,6 +18,16 @@ __all__ = ['maps_sequence_processing', 'get_closest', 'normalize_exposure',
|
|
|
18
18
|
'prepare_maps', 'difference_maps', 'mask_occulter']
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
def check_maps_sequence(map_sequence):
|
|
22
|
+
if map_sequence:
|
|
23
|
+
if isinstance(map_sequence, MapSequence):
|
|
24
|
+
return map_sequence
|
|
25
|
+
else:
|
|
26
|
+
return sunpy.map.Map(map_sequence, sequence=True)
|
|
27
|
+
else:
|
|
28
|
+
return []
|
|
29
|
+
|
|
30
|
+
|
|
21
31
|
def maps_sequence_processing(map_sequence, **kwargs):
|
|
22
32
|
"""
|
|
23
33
|
Returns a sequence of maps which is processed as plain images, running or base difference images.
|
|
@@ -36,6 +46,7 @@ def maps_sequence_processing(map_sequence, **kwargs):
|
|
|
36
46
|
A SunPy map.
|
|
37
47
|
"""
|
|
38
48
|
|
|
49
|
+
map_sequence = check_maps_sequence(map_sequence)
|
|
39
50
|
if len(map_sequence) == 0:
|
|
40
51
|
return []
|
|
41
52
|
|
|
@@ -139,6 +150,7 @@ def filter_maps(map_sequence, **kwargs):
|
|
|
139
150
|
|
|
140
151
|
'''
|
|
141
152
|
|
|
153
|
+
map_sequence = check_maps_sequence(map_sequence)
|
|
142
154
|
if len(map_sequence) == 0:
|
|
143
155
|
return []
|
|
144
156
|
|
|
@@ -155,11 +167,7 @@ def filter_maps(map_sequence, **kwargs):
|
|
|
155
167
|
map_sequence = [tmap for tmap in map_sequence if tmap.meta['polar'] == kwargs['polar']]
|
|
156
168
|
|
|
157
169
|
if len(map_sequence) != 0:
|
|
158
|
-
|
|
159
|
-
return map_sequence
|
|
160
|
-
else:
|
|
161
|
-
sequence_final = sunpy.map.Map(map_sequence, sequence=True)
|
|
162
|
-
|
|
170
|
+
sequence_final = check_maps_sequence(map_sequence)
|
|
163
171
|
else:
|
|
164
172
|
sequence_final = []
|
|
165
173
|
|
|
@@ -188,6 +196,7 @@ def prepare_maps(map_sequence, **kwargs):
|
|
|
188
196
|
|
|
189
197
|
'''
|
|
190
198
|
|
|
199
|
+
map_sequence = check_maps_sequence(map_sequence)
|
|
191
200
|
if len(map_sequence) == 0:
|
|
192
201
|
return []
|
|
193
202
|
|
|
@@ -246,6 +255,7 @@ def difference_maps(smapi, smapm):
|
|
|
246
255
|
if smapm.exposure_time != 1*u.second:
|
|
247
256
|
smapm = normalize_exposure(smapm)
|
|
248
257
|
smap_difference = smapi.data - smapm.data
|
|
258
|
+
|
|
249
259
|
return sunpy.map.Map(smap_difference, smapi.meta)
|
|
250
260
|
|
|
251
261
|
|
|
@@ -300,11 +310,16 @@ def mask_occulter(smap, apply_mask=True, mask_value=0):
|
|
|
300
310
|
|
|
301
311
|
|
|
302
312
|
def maps_clims(images):
|
|
303
|
-
if images
|
|
304
|
-
|
|
313
|
+
i = 0 if len(images) < 2 else 1
|
|
314
|
+
|
|
315
|
+
if images[i].instrument == 'WISPR':
|
|
316
|
+
if images[i].detector == 'Outer':
|
|
305
317
|
return [14., 14.]
|
|
306
|
-
elif images[
|
|
318
|
+
elif images[i].detector == 'Inner':
|
|
307
319
|
return [13., 13.]
|
|
308
|
-
|
|
320
|
+
elif images[i].instrument == 'Metis':
|
|
309
321
|
return [12.80, 13.00]
|
|
310
|
-
|
|
322
|
+
elif images[i].instrument.startswith('SoloHI'):
|
|
323
|
+
return [13.95, 14.05]
|
|
324
|
+
|
|
325
|
+
return [np.nanquantile(images[i].data, 0.20)-10, np.nanquantile(images[i].data, 0.80)+10]
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"PyThea.test.test_figures.test_ellipsoid_on_AIA_venus": "f1ff774b483a8c934c9353c552278c8823216fc7d9dad4ccc00c74be3f30c4c3",
|
|
3
|
-
"PyThea.test.test_figures.test_ellipsoid_on_AIA_mercury": "
|
|
3
|
+
"PyThea.test.test_figures.test_ellipsoid_on_AIA_mercury": "a70589cd9c052d80532df5f9fbbc6d857333dcd3e2e7acfbe0e73f6b98a2a6ef",
|
|
4
4
|
"PyThea.test.test_figures.test_ellipsoid_on_STEREO_COR1_venus": "18a3af72e9da5b60e435f83ee3ef3f8cd0eb437eaef463329552ff56968f12ff",
|
|
5
5
|
"PyThea.test.test_figures.test_ellipsoid_on_STEREO_COR2_three_planets": "231d5635f57c4d66556674a83f6cbcef7dc94b51846e977c4c2dc3dc244096ac",
|
|
6
|
-
"PyThea.test.test_figures.test_kinematics_figure": "83e060de53b57e9d34fe50111ba60a44f7c7c7b20faae9a4381654ef1c9ea72d"
|
|
6
|
+
"PyThea.test.test_figures.test_kinematics_figure": "83e060de53b57e9d34fe50111ba60a44f7c7c7b20faae9a4381654ef1c9ea72d",
|
|
7
7
|
"PyThea.test.test_figures.test_ellipsoid_on_WISPR_Inner_Venus": "8d831b43b0c789cacfcff8386c00af0707bb68d64fca16c6188deca93d3cba87",
|
|
8
8
|
"PyThea.test.test_figures.test_ellipsoid_on_WISPR_Outer_Mercury": "f94c444f2c6f00cd5dd5deff394d0e233c9e720413fd5570b306b262915c9732"
|
|
9
9
|
}
|
|
@@ -19,7 +19,7 @@ def test_parker_spiral():
|
|
|
19
19
|
time = '2022-01-01T00:00:00'
|
|
20
20
|
body = bodies_dict['Earth'][0]
|
|
21
21
|
|
|
22
|
-
pos = get_horizons_coord(body, time
|
|
22
|
+
pos = get_horizons_coord(body, time)
|
|
23
23
|
pos = pos.transform_to(frames.HeliographicCarrington(observer='Earth', obstime=time))
|
|
24
24
|
|
|
25
25
|
spiral_coord = Parker_spirals.spiral(pos, 350 * (u.km/u.second), time)
|
|
@@ -43,7 +43,7 @@ def test_footpoint():
|
|
|
43
43
|
time = '2022-01-01T00:00:00'
|
|
44
44
|
body = bodies_dict['Earth'][0]
|
|
45
45
|
|
|
46
|
-
pos = get_horizons_coord(body, time
|
|
46
|
+
pos = get_horizons_coord(body, time)
|
|
47
47
|
pos = pos.transform_to(frames.HeliographicCarrington(observer='Earth', obstime=time))
|
|
48
48
|
|
|
49
49
|
footpoint_coord = Parker_spirals.footpoint(pos, 350 * (u.km/u.second), time)
|
|
@@ -128,10 +128,7 @@ def make_figure(map, cmap='Greys_r', clim=[-20, 20], clip_model=True, **kwargs):
|
|
|
128
128
|
if median_filter_value != 1:
|
|
129
129
|
map = sunpy.map.Map(median_filter(map.data, size=int(median_filter_value)), map.meta)
|
|
130
130
|
|
|
131
|
-
if map.instrument
|
|
132
|
-
clim = [-10**-clim[0], 10**-clim[1]]
|
|
133
|
-
|
|
134
|
-
if map.instrument == 'Metis':
|
|
131
|
+
if map.instrument in ['WISPR', 'Metis'] or map.instrument.startswith('SoloHI'):
|
|
135
132
|
clim = [-10**-clim[0], 10**-clim[1]]
|
|
136
133
|
|
|
137
134
|
if cmap == 'default':
|
|
@@ -155,9 +152,19 @@ def make_figure(map, cmap='Greys_r', clim=[-20, 20], clip_model=True, **kwargs):
|
|
|
155
152
|
if cref.Ty > 0:
|
|
156
153
|
axis.invert_yaxis()
|
|
157
154
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
155
|
+
if map.instrument == 'SoloHI':
|
|
156
|
+
title = 'SoloHI' + f' Tile-{map.detector}' ' $T_{AGV}:$' + parse_time(map.date_average).strftime('%Y-%m-%d %H:%M:%S')
|
|
157
|
+
elif map.instrument == 'Metis':
|
|
158
|
+
title = re.sub(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}',
|
|
159
|
+
' $T_{AGV}:$' + parse_time(map.date_average).strftime('%Y-%m-%d %H:%M:%S'),
|
|
160
|
+
map.latex_name.replace('VLD', 'METIS-VDL'))
|
|
161
|
+
else:
|
|
162
|
+
title = re.sub(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}',
|
|
163
|
+
' $T_{AGV}:$' + parse_time(map.date_average).strftime('%Y-%m-%d %H:%M:%S'),
|
|
164
|
+
map.latex_name)
|
|
165
|
+
print(map.instrument)
|
|
166
|
+
print(map.latex_name)
|
|
167
|
+
axis.set_title(title,
|
|
161
168
|
fontsize=10, pad=8)
|
|
162
169
|
|
|
163
170
|
return fig, axis
|
|
@@ -79,7 +79,8 @@ def get_fits_filenames_from_database(event_id, timerange, imager):
|
|
|
79
79
|
|
|
80
80
|
if downloaded_files is None:
|
|
81
81
|
downloaded_files = download_fits(timerange, imager)
|
|
82
|
-
|
|
82
|
+
if not downloaded_files:
|
|
83
|
+
return None
|
|
83
84
|
nested_dict_ = create_nested_dict(db_args, downloaded_files.data)
|
|
84
85
|
nested_dict_ = {str(timerange): nested_dict_}
|
|
85
86
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: PyThea
|
|
3
|
-
Version:
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: PyThea: A software package to reconstruct the 3D structure of CMEs and shock waves
|
|
5
5
|
Home-page: https://github.com/AthKouloumvakos/PyThea
|
|
6
6
|
Author: Athanasios Kouloumvakos
|
|
@@ -10,25 +10,25 @@ Keywords: science,solar physics,solar,sun,shock waves
|
|
|
10
10
|
Platform: any
|
|
11
11
|
Classifier: Programming Language :: Python
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
15
|
Classifier: Development Status :: 4 - Beta
|
|
16
16
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
17
17
|
Classifier: Operating System :: OS Independent
|
|
18
18
|
Classifier: Intended Audience :: Science/Research
|
|
19
19
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
20
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.10, <3.12
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
License-File: LICENSE.md
|
|
23
|
-
Requires-Dist: numpy
|
|
23
|
+
Requires-Dist: numpy
|
|
24
24
|
Requires-Dist: pandas
|
|
25
25
|
Requires-Dist: scipy
|
|
26
26
|
Requires-Dist: aiapy
|
|
27
|
-
Requires-Dist: astropy
|
|
27
|
+
Requires-Dist: astropy
|
|
28
28
|
Requires-Dist: astroquery
|
|
29
29
|
Requires-Dist: jplephem
|
|
30
30
|
Requires-Dist: numexpr
|
|
31
|
-
Requires-Dist: sunpy==
|
|
31
|
+
Requires-Dist: sunpy==6.0.4
|
|
32
32
|
Requires-Dist: sunpy_soar
|
|
33
33
|
Requires-Dist: parfive==2.1.0
|
|
34
34
|
Requires-Dist: pooch
|
|
@@ -44,6 +44,17 @@ Requires-Dist: pyvista
|
|
|
44
44
|
Requires-Dist: pytest-astropy
|
|
45
45
|
Requires-Dist: pytest-sugar
|
|
46
46
|
Requires-Dist: pytest-mpl
|
|
47
|
+
Dynamic: author
|
|
48
|
+
Dynamic: author-email
|
|
49
|
+
Dynamic: classifier
|
|
50
|
+
Dynamic: description
|
|
51
|
+
Dynamic: description-content-type
|
|
52
|
+
Dynamic: home-page
|
|
53
|
+
Dynamic: keywords
|
|
54
|
+
Dynamic: license
|
|
55
|
+
Dynamic: requires-dist
|
|
56
|
+
Dynamic: requires-python
|
|
57
|
+
Dynamic: summary
|
|
47
58
|
|
|
48
59
|
# PyThea: A software package to reconstruct the 3D structure of CMEs and shock waves
|
|
49
60
|
|
|
@@ -54,7 +65,7 @@ Requires-Dist: pytest-mpl
|
|
|
54
65
|

|
|
55
66
|

|
|
56
67
|
|
|
57
|
-
_PyThea_ is an open-source software package that can be used to reconstruct the 3D structure of Coronal Mass Ejections (CMEs) and shock waves and determine their kinematics using remote-sensing observations. The tool implements the Graduated Cylindrical Shell (GCS) model that can be used to reconstruct CMEs and two geometrical models, namely a spheroid and ellipsoid model to reconstruct shock waves. It also implements remote-sensing observations from multiple viewpoints such as the Solar and Heliospheric Observatory (SoHO)
|
|
68
|
+
_PyThea_ is an open-source software package that can be used to reconstruct the 3D structure of Coronal Mass Ejections (CMEs) and shock waves and determine their kinematics using remote-sensing observations. The tool implements the Graduated Cylindrical Shell (GCS) model that can be used to reconstruct CMEs and two geometrical models, namely a spheroid and ellipsoid model to reconstruct shock waves. It also implements remote-sensing observations from multiple viewpoints such as the Solar and Heliospheric Observatory (SoHO), Solar Terrestrial Relations Observatory (STEREO), and Parker Solar Probe.
|
|
58
69
|
|
|
59
70
|
## 💾 Installation
|
|
60
71
|
|
|
@@ -153,3 +164,7 @@ If you use _PyThea_ for scientific work or research presented in a publication,
|
|
|
153
164
|
## ⓘ The mythology of Thea:
|
|
154
165
|
|
|
155
166
|
In Greek mythology, Thea, also called Euryphaessa "wide-shining", is the Titaness of sight and the shining light of the clear blue sky. Her brother/consort is Hyperion, a Titan and god of the sun, and together they are the parents of Helios (the Sun), Selene (the Moon), and Eos (the Dawn).
|
|
167
|
+
|
|
168
|
+
## Development Support:
|
|
169
|
+
|
|
170
|
+
The lead author of this software package Athanasios Kouloumvakos acknowledges financial support from NASA Grant 80NSSC24K0071 for the further development and improvement of PyThea during 2024. This grant was part of the NASA Headquarters Heliophysics Tools and Methods Program in response to NASA ROSES–2022 (NNH22ZDA001N).
|
|
@@ -10,10 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|

|
|
12
12
|
|
|
13
|
-
_PyThea_ is an open-source software package that can be used to reconstruct the 3D structure of Coronal Mass Ejections (CMEs) and shock waves and determine their kinematics using remote-sensing observations. The tool implements the Graduated Cylindrical Shell (GCS) model that can be used to reconstruct CMEs and two geometrical models, namely a spheroid and ellipsoid model to reconstruct shock waves. It also implements remote-sensing observations from multiple viewpoints such as the Solar and Heliospheric Observatory (SoHO)
|
|
14
|
-
|
|
15
|
-
> [!NOTE]
|
|
16
|
-
> The lead author of PyThea (A. Kouloumvakos) has been awarded a NASA Grant (80NSSC24K0071) for further developing and improving PyThea, during fiscal year 2024. The awarded proposal is part of the NASA Headquarters Heliophysics Tools and Methods Program in response to NASA ROSES–2022 (NNH22ZDA001N). The proposed software enhancements and new features encompass a range of improvements, including but not limited to: improved code documentation, expanded and improved code testing, improved image processing and visualization, and the incorporation of new solar mission imaging data.
|
|
13
|
+
_PyThea_ is an open-source software package that can be used to reconstruct the 3D structure of Coronal Mass Ejections (CMEs) and shock waves and determine their kinematics using remote-sensing observations. The tool implements the Graduated Cylindrical Shell (GCS) model that can be used to reconstruct CMEs and two geometrical models, namely a spheroid and ellipsoid model to reconstruct shock waves. It also implements remote-sensing observations from multiple viewpoints such as the Solar and Heliospheric Observatory (SoHO), Solar Terrestrial Relations Observatory (STEREO), and Parker Solar Probe.
|
|
17
14
|
|
|
18
15
|
## 💾 Installation
|
|
19
16
|
|
|
@@ -112,3 +109,7 @@ If you use _PyThea_ for scientific work or research presented in a publication,
|
|
|
112
109
|
## ⓘ The mythology of Thea:
|
|
113
110
|
|
|
114
111
|
In Greek mythology, Thea, also called Euryphaessa "wide-shining", is the Titaness of sight and the shining light of the clear blue sky. Her brother/consort is Hyperion, a Titan and god of the sun, and together they are the parents of Helios (the Sun), Selene (the Moon), and Eos (the Dawn).
|
|
112
|
+
|
|
113
|
+
## Development Support:
|
|
114
|
+
|
|
115
|
+
The lead author of this software package Athanasios Kouloumvakos acknowledges financial support from NASA Grant 80NSSC24K0071 for the further development and improvement of PyThea during 2024. This grant was part of the NASA Headquarters Heliophysics Tools and Methods Program in response to NASA ROSES–2022 (NNH22ZDA001N).
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|

|
|
8
8
|

|
|
9
9
|
|
|
10
|
-
_PyThea_ is an open-source software package that can be used to reconstruct the 3D structure of Coronal Mass Ejections (CMEs) and shock waves and determine their kinematics using remote-sensing observations. The tool implements the Graduated Cylindrical Shell (GCS) model that can be used to reconstruct CMEs and two geometrical models, namely a spheroid and ellipsoid model to reconstruct shock waves. It also implements remote-sensing observations from multiple viewpoints such as the Solar and Heliospheric Observatory (SoHO)
|
|
10
|
+
_PyThea_ is an open-source software package that can be used to reconstruct the 3D structure of Coronal Mass Ejections (CMEs) and shock waves and determine their kinematics using remote-sensing observations. The tool implements the Graduated Cylindrical Shell (GCS) model that can be used to reconstruct CMEs and two geometrical models, namely a spheroid and ellipsoid model to reconstruct shock waves. It also implements remote-sensing observations from multiple viewpoints such as the Solar and Heliospheric Observatory (SoHO), Solar Terrestrial Relations Observatory (STEREO), and Parker Solar Probe.
|
|
11
11
|
|
|
12
12
|
## 💾 Installation
|
|
13
13
|
|
|
@@ -106,3 +106,7 @@ If you use _PyThea_ for scientific work or research presented in a publication,
|
|
|
106
106
|
## ⓘ The mythology of Thea:
|
|
107
107
|
|
|
108
108
|
In Greek mythology, Thea, also called Euryphaessa "wide-shining", is the Titaness of sight and the shining light of the clear blue sky. Her brother/consort is Hyperion, a Titan and god of the sun, and together they are the parents of Helios (the Sun), Selene (the Moon), and Eos (the Dawn).
|
|
109
|
+
|
|
110
|
+
## Development Support:
|
|
111
|
+
|
|
112
|
+
The lead author of this software package Athanasios Kouloumvakos acknowledges financial support from NASA Grant 80NSSC24K0071 for the further development and improvement of PyThea during 2024. This grant was part of the NASA Headquarters Heliophysics Tools and Methods Program in response to NASA ROSES–2022 (NNH22ZDA001N).
|
|
@@ -5,16 +5,16 @@ channels:
|
|
|
5
5
|
- defaults
|
|
6
6
|
|
|
7
7
|
dependencies:
|
|
8
|
-
- python=3.
|
|
9
|
-
- numpy
|
|
8
|
+
- python=3.10
|
|
9
|
+
- numpy
|
|
10
10
|
- pandas
|
|
11
11
|
- scipy
|
|
12
12
|
- matplotlib
|
|
13
13
|
- aiapy
|
|
14
|
-
- astropy
|
|
14
|
+
- astropy
|
|
15
15
|
- astroquery
|
|
16
16
|
- numexpr
|
|
17
|
-
- sunpy=
|
|
17
|
+
- sunpy=6.0.4
|
|
18
18
|
- parfive=2.1.0 # The issue with streamlit and asyncio is resolved (see #13). Keep this for a while to make sure everything works smoothly.
|
|
19
19
|
- streamlit
|
|
20
20
|
- seaborn
|
|
@@ -9,9 +9,8 @@ classifiers =
|
|
|
9
9
|
Operating System :: OS Independent
|
|
10
10
|
Programming Language :: Python
|
|
11
11
|
Programming Language :: Python :: 3
|
|
12
|
-
Programming Language :: Python :: 3.8
|
|
13
|
-
Programming Language :: Python :: 3.9
|
|
14
12
|
Programming Language :: Python :: 3.10
|
|
13
|
+
Programming Language :: Python :: 3.11
|
|
15
14
|
Topic :: Scientific/Engineering :: Physics
|
|
16
15
|
|
|
17
16
|
[options]
|
|
@@ -37,8 +37,8 @@ setup(
|
|
|
37
37
|
classifiers=[
|
|
38
38
|
'Programming Language :: Python',
|
|
39
39
|
'Programming Language :: Python :: 3',
|
|
40
|
-
'Programming Language :: Python :: 3.
|
|
41
|
-
'Programming Language :: Python :: 3.
|
|
40
|
+
'Programming Language :: Python :: 3.10',
|
|
41
|
+
'Programming Language :: Python :: 3.11',
|
|
42
42
|
'Development Status :: 4 - Beta',
|
|
43
43
|
'License :: OSI Approved :: GNU General Public License v3 (GPLv3)',
|
|
44
44
|
'Operating System :: OS Independent',
|
|
@@ -46,7 +46,7 @@ setup(
|
|
|
46
46
|
'Topic :: Scientific/Engineering :: Physics',
|
|
47
47
|
],
|
|
48
48
|
|
|
49
|
-
python_requires='>=3.
|
|
49
|
+
python_requires='>=3.10, <3.12',
|
|
50
50
|
install_requires=requirements,
|
|
51
51
|
|
|
52
52
|
packages=find_packages(),
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
from astropy.time import TimeDelta
|
|
2
|
-
from aiapy.calibrate import fix_observer_location, update_pointing
|
|
3
|
-
|
|
4
|
-
__all__ = ['prep_aia']
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def prep_aia(map_sequence):
|
|
8
|
-
map_sequence = [update_pointing(tmap) for tmap in map_sequence]
|
|
9
|
-
map_sequence = [fix_observer_location(tmap) for tmap in map_sequence]
|
|
10
|
-
|
|
11
|
-
for map_ in map_sequence:
|
|
12
|
-
map_.meta['DATE-AVG'] = (map_.date + TimeDelta(map_.meta['exptime']/2, format='sec')).value
|
|
13
|
-
|
|
14
|
-
return map_sequence
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pythea-0.14.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/stereo/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|