solarviewer 1.0.2__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 (82) hide show
  1. solar_radio_image_viewer/__init__.py +12 -0
  2. solar_radio_image_viewer/assets/add_tab_default.png +0 -0
  3. solar_radio_image_viewer/assets/add_tab_default_light.png +0 -0
  4. solar_radio_image_viewer/assets/add_tab_hover.png +0 -0
  5. solar_radio_image_viewer/assets/add_tab_hover_light.png +0 -0
  6. solar_radio_image_viewer/assets/browse.png +0 -0
  7. solar_radio_image_viewer/assets/browse_light.png +0 -0
  8. solar_radio_image_viewer/assets/close_tab_default.png +0 -0
  9. solar_radio_image_viewer/assets/close_tab_default_light.png +0 -0
  10. solar_radio_image_viewer/assets/close_tab_hover.png +0 -0
  11. solar_radio_image_viewer/assets/close_tab_hover_light.png +0 -0
  12. solar_radio_image_viewer/assets/ellipse_selection.png +0 -0
  13. solar_radio_image_viewer/assets/ellipse_selection_light.png +0 -0
  14. solar_radio_image_viewer/assets/icons8-ellipse-90.png +0 -0
  15. solar_radio_image_viewer/assets/icons8-ellipse-90_light.png +0 -0
  16. solar_radio_image_viewer/assets/icons8-info-90.png +0 -0
  17. solar_radio_image_viewer/assets/icons8-info-90_light.png +0 -0
  18. solar_radio_image_viewer/assets/profile.png +0 -0
  19. solar_radio_image_viewer/assets/profile_light.png +0 -0
  20. solar_radio_image_viewer/assets/rectangle_selection.png +0 -0
  21. solar_radio_image_viewer/assets/rectangle_selection_light.png +0 -0
  22. solar_radio_image_viewer/assets/reset.png +0 -0
  23. solar_radio_image_viewer/assets/reset_light.png +0 -0
  24. solar_radio_image_viewer/assets/ruler.png +0 -0
  25. solar_radio_image_viewer/assets/ruler_light.png +0 -0
  26. solar_radio_image_viewer/assets/search.png +0 -0
  27. solar_radio_image_viewer/assets/search_light.png +0 -0
  28. solar_radio_image_viewer/assets/settings.png +0 -0
  29. solar_radio_image_viewer/assets/settings_light.png +0 -0
  30. solar_radio_image_viewer/assets/splash.fits +0 -0
  31. solar_radio_image_viewer/assets/zoom_60arcmin.png +0 -0
  32. solar_radio_image_viewer/assets/zoom_60arcmin_light.png +0 -0
  33. solar_radio_image_viewer/assets/zoom_in.png +0 -0
  34. solar_radio_image_viewer/assets/zoom_in_light.png +0 -0
  35. solar_radio_image_viewer/assets/zoom_out.png +0 -0
  36. solar_radio_image_viewer/assets/zoom_out_light.png +0 -0
  37. solar_radio_image_viewer/create_video.py +1345 -0
  38. solar_radio_image_viewer/dialogs.py +2665 -0
  39. solar_radio_image_viewer/from_simpl/__init__.py +184 -0
  40. solar_radio_image_viewer/from_simpl/caltable_visualizer.py +1001 -0
  41. solar_radio_image_viewer/from_simpl/dynamic_spectra_dialog.py +332 -0
  42. solar_radio_image_viewer/from_simpl/make_dynamic_spectra.py +351 -0
  43. solar_radio_image_viewer/from_simpl/pipeline_logger_gui.py +1232 -0
  44. solar_radio_image_viewer/from_simpl/simpl_theme.py +352 -0
  45. solar_radio_image_viewer/from_simpl/utils.py +984 -0
  46. solar_radio_image_viewer/from_simpl/view_dynamic_spectra_GUI.py +1975 -0
  47. solar_radio_image_viewer/helioprojective.py +1916 -0
  48. solar_radio_image_viewer/helioprojective_viewer.py +817 -0
  49. solar_radio_image_viewer/helioviewer_browser.py +1514 -0
  50. solar_radio_image_viewer/main.py +148 -0
  51. solar_radio_image_viewer/move_phasecenter.py +1269 -0
  52. solar_radio_image_viewer/napari_viewer.py +368 -0
  53. solar_radio_image_viewer/noaa_events/__init__.py +32 -0
  54. solar_radio_image_viewer/noaa_events/noaa_events.py +430 -0
  55. solar_radio_image_viewer/noaa_events/noaa_events_gui.py +1922 -0
  56. solar_radio_image_viewer/norms.py +293 -0
  57. solar_radio_image_viewer/radio_data_downloader/__init__.py +25 -0
  58. solar_radio_image_viewer/radio_data_downloader/radio_data_downloader.py +756 -0
  59. solar_radio_image_viewer/radio_data_downloader/radio_data_downloader_gui.py +528 -0
  60. solar_radio_image_viewer/searchable_combobox.py +220 -0
  61. solar_radio_image_viewer/solar_context/__init__.py +41 -0
  62. solar_radio_image_viewer/solar_context/active_regions.py +371 -0
  63. solar_radio_image_viewer/solar_context/cme_alerts.py +234 -0
  64. solar_radio_image_viewer/solar_context/context_images.py +297 -0
  65. solar_radio_image_viewer/solar_context/realtime_data.py +528 -0
  66. solar_radio_image_viewer/solar_data_downloader/__init__.py +35 -0
  67. solar_radio_image_viewer/solar_data_downloader/solar_data_downloader.py +1667 -0
  68. solar_radio_image_viewer/solar_data_downloader/solar_data_downloader_cli.py +901 -0
  69. solar_radio_image_viewer/solar_data_downloader/solar_data_downloader_gui.py +1210 -0
  70. solar_radio_image_viewer/styles.py +643 -0
  71. solar_radio_image_viewer/utils/__init__.py +32 -0
  72. solar_radio_image_viewer/utils/rate_limiter.py +255 -0
  73. solar_radio_image_viewer/utils.py +952 -0
  74. solar_radio_image_viewer/video_dialog.py +2629 -0
  75. solar_radio_image_viewer/video_utils.py +656 -0
  76. solar_radio_image_viewer/viewer.py +11174 -0
  77. solarviewer-1.0.2.dist-info/METADATA +343 -0
  78. solarviewer-1.0.2.dist-info/RECORD +82 -0
  79. solarviewer-1.0.2.dist-info/WHEEL +5 -0
  80. solarviewer-1.0.2.dist-info/entry_points.txt +8 -0
  81. solarviewer-1.0.2.dist-info/licenses/LICENSE +21 -0
  82. solarviewer-1.0.2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,148 @@
1
+ #!/usr/bin/env python3
2
+ # Suppress CASA warnings (C++ level) before any imports
3
+ import os
4
+ os.environ.setdefault('CASA_LOGLEVEL', 'ERROR')
5
+ os.environ['CASARC'] = '/dev/null' # Prevent CASA config loading
6
+
7
+ import sys
8
+ import argparse
9
+ from PyQt5.QtWidgets import QApplication
10
+ from PyQt5.QtGui import QPalette, QColor
11
+ from PyQt5.QtCore import Qt, QSettings
12
+
13
+ # Import theme manager FIRST, before viewer
14
+ from .styles import theme_manager, ThemeManager
15
+
16
+
17
+ def apply_theme(app, theme_mgr):
18
+ """Apply the current theme to the application."""
19
+ palette = theme_mgr.palette
20
+ is_dark = theme_mgr.is_dark
21
+
22
+ # Apply Qt palette
23
+ qt_palette = QPalette()
24
+ qt_palette.setColor(QPalette.Window, QColor(palette["window"]))
25
+ qt_palette.setColor(QPalette.WindowText, QColor(palette["text"]))
26
+ qt_palette.setColor(QPalette.Base, QColor(palette["base"]))
27
+ qt_palette.setColor(QPalette.AlternateBase, QColor(palette["surface"]))
28
+ qt_palette.setColor(QPalette.Text, QColor(palette["text"]))
29
+ qt_palette.setColor(QPalette.Button, QColor(palette["button"]))
30
+ qt_palette.setColor(QPalette.ButtonText, QColor(palette["text"]))
31
+ qt_palette.setColor(QPalette.Highlight, QColor(palette["highlight"]))
32
+ qt_palette.setColor(QPalette.HighlightedText, Qt.white)
33
+ qt_palette.setColor(QPalette.Link, QColor(palette["highlight"]))
34
+ qt_palette.setColor(QPalette.Disabled, QPalette.Text, QColor(palette["disabled"]))
35
+ qt_palette.setColor(QPalette.Disabled, QPalette.ButtonText, QColor(palette["disabled"]))
36
+
37
+ app.setPalette(qt_palette)
38
+ app.setStyleSheet(theme_mgr.stylesheet)
39
+
40
+
41
+ def main():
42
+ # Parse command-line arguments
43
+ parser = argparse.ArgumentParser(
44
+ description="Solar Radio Image Viewer - A tool for visualizing and analyzing solar radio images",
45
+ epilog="""
46
+ Viewer Types:
47
+ Standard Viewer: Full-featured viewer with comprehensive analysis tools,
48
+ coordinate systems, region selection, and statistical analysis.
49
+
50
+ Napari Viewer: Lightweight, fast viewer for quick visualization of images.
51
+ Offers basic functionality with faster loading times.
52
+
53
+ Examples:
54
+ solarviewer # Launch standard viewer
55
+ solarviewer image.fits # Open image.fits in standard viewer
56
+ solarviewer -f # Launch fast Napari viewer
57
+ solarviewer -f image.fits # Open image.fits in Napari viewer
58
+ sv --fast image.fits # Same as above using short command
59
+ """,
60
+ formatter_class=argparse.RawDescriptionHelpFormatter,
61
+ )
62
+
63
+ parser.add_argument(
64
+ "-f",
65
+ "--fast",
66
+ action="store_true",
67
+ help="Launch the fast Napari viewer instead of the standard viewer",
68
+ )
69
+ parser.add_argument(
70
+ "imagename",
71
+ nargs="?",
72
+ default=None,
73
+ help="Path to the image file to open (FITS or CASA format)",
74
+ )
75
+ parser.add_argument(
76
+ "--light",
77
+ action="store_true",
78
+ help="Start with light theme instead of dark theme",
79
+ )
80
+
81
+ # Add version information
82
+ parser.add_argument(
83
+ "-v",
84
+ "--version",
85
+ action="version",
86
+ version="Solar Radio Image Viewer 1.0",
87
+ help="Show the application version and exit",
88
+ )
89
+
90
+ args = parser.parse_args()
91
+
92
+ # Check if the specified image file exists
93
+ if args.imagename and not os.path.exists(args.imagename):
94
+ print(f"Error: Image file '{args.imagename}' not found.")
95
+ print("Please provide a valid path to an image file.")
96
+ sys.exit(1)
97
+
98
+ # Initialize the application
99
+ app = QApplication(sys.argv)
100
+ app.setStyle("Fusion")
101
+
102
+ # Load saved theme preference BEFORE importing viewer
103
+ settings = QSettings("SolarViewer", "SolarViewer")
104
+ saved_theme = settings.value("theme", ThemeManager.DARK)
105
+
106
+ # Command line --light flag overrides saved preference
107
+ if args.light:
108
+ saved_theme = ThemeManager.LIGHT
109
+
110
+ # Set initial theme BEFORE importing viewer (so matplotlib rcParams are correct)
111
+ # Use internal method to avoid triggering callbacks before viewer is loaded
112
+ theme_manager._current_theme = saved_theme
113
+
114
+ # Now import viewer - it will use the correct theme for matplotlib rcParams
115
+ from .viewer import SolarRadioImageViewerApp, update_matplotlib_theme
116
+
117
+ # Ensure matplotlib is updated with the correct theme
118
+ update_matplotlib_theme()
119
+
120
+ # Apply theme to application
121
+ apply_theme(app, theme_manager)
122
+
123
+ # Register theme change callback to update app
124
+ def on_theme_change(new_theme):
125
+ apply_theme(app, theme_manager)
126
+ update_matplotlib_theme()
127
+ # Save theme preference
128
+ settings.setValue("theme", new_theme)
129
+
130
+ theme_manager.register_callback(on_theme_change)
131
+
132
+ # Launch the appropriate viewer
133
+ if args.fast:
134
+ # Launch the Napari viewer
135
+ from .napari_viewer import main as napari_main
136
+
137
+ napari_main(args.imagename)
138
+ else:
139
+ # Launch the standard viewer
140
+ window = SolarRadioImageViewerApp(args.imagename)
141
+ window.resize(1920, 1080)
142
+ window.show()
143
+ sys.exit(app.exec_())
144
+
145
+
146
+ if __name__ == "__main__":
147
+ main()
148
+