SkyMapMod 0.1.33__tar.gz → 0.1.35__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.
- {skymapmod-0.1.33 → skymapmod-0.1.35}/PKG-INFO +1 -1
- skymapmod-0.1.35/SkyMapMod/airglow.py +70 -0
- skymapmod-0.1.35/SkyMapMod/planets.py +372 -0
- skymapmod-0.1.35/SkyMapMod/star_catalogues.py +59 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/total_background.py +96 -2
- skymapmod-0.1.35/SkyMapMod/zodiac.py +716 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/pyproject.toml +1 -1
- skymapmod-0.1.33/SkyMapMod/airglow.py +0 -39
- skymapmod-0.1.33/SkyMapMod/planets.py +0 -131
- skymapmod-0.1.33/SkyMapMod/star_catalogues.py +0 -24
- skymapmod-0.1.33/SkyMapMod/zodiac.py +0 -206
- {skymapmod-0.1.33 → skymapmod-0.1.35}/LICENSE +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/README.md +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/__init__.py +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/airglow_spectrum.py +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/albedo_of_planets.py +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/band_V_data.py +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/data/__init__.py +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/data/load_data.py +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/data/star_brightness.npy +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/data/star_temperatures.npy +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/modtran_default_kp_transparency.py +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/solar_radio_flux.py +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/solar_spectrum.py +0 -0
- {skymapmod-0.1.33 → skymapmod-0.1.35}/SkyMapMod/transparency.py +0 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
#для работы с собственным свечением атмосферы. возможно, сюда можно досыпать поправку на радиопоток
|
2
|
+
import numpy as np
|
3
|
+
import matplotlib.pyplot as plt
|
4
|
+
|
5
|
+
from .solar_radio_flux import fluxdate
|
6
|
+
from .solar_radio_flux import fluxtime
|
7
|
+
from .solar_radio_flux import fluxobsflux
|
8
|
+
|
9
|
+
from .airglow_spectrum import wavelenght_kp, intensity_kp
|
10
|
+
from .modtran_default_kp_transparency import wavelenght_modtran_kp, trancparency_modtran_kp
|
11
|
+
|
12
|
+
#следующая функция для поправки на радиопоток, пока не используется
|
13
|
+
def radioflux(date, time): #date -- в формате строки 'дд.мм.гггг', time -- в формате строки 'чч:мм:сс'
|
14
|
+
day, month, year = date.split('.')
|
15
|
+
date = year + month + day
|
16
|
+
hours, minutes, seconds = time.split(':')
|
17
|
+
time = hours + minutes + seconds
|
18
|
+
data_times = fluxtime[np.where(fluxdate==date)[0]]
|
19
|
+
box = []
|
20
|
+
for i in range(data_times.shape[0]):
|
21
|
+
box.append(abs(int(data_times[i]) - int(time)))
|
22
|
+
box = np.array(box)
|
23
|
+
return float(fluxobsflux[np.argmin(box)])
|
24
|
+
|
25
|
+
|
26
|
+
def airglow_spectrum(wavelenght_airglow = wavelenght_kp, intensity_airglow = intensity_kp, wavelenght_atmosphere = wavelenght_modtran_kp, transparency_atmosphere = trancparency_modtran_kp):
|
27
|
+
"""
|
28
|
+
Возвращает длины волн и спектр собственного свечения за атмосферой.
|
29
|
+
|
30
|
+
Функция корректирует спектр собственного свечения, учитывая прозрачность атмосферы на соответствующих
|
31
|
+
длинах волн. Затем пересчитывает интенсивность из Рэлей/Ангстрем в фот/(с·м²·бин·нм).
|
32
|
+
|
33
|
+
Параметры:
|
34
|
+
wavelenght_airglow (np.ndarray, optional): Длины волн спектра собственного свечения, нм.
|
35
|
+
По умолчанию — wavelenght_kp.
|
36
|
+
intensity_airglow (np.ndarray, optional): Интенсивность собственного свечения, Рэлей/Ангстрем.
|
37
|
+
По умолчанию — intensity_kp.
|
38
|
+
wavelenght_atmosphere (np.ndarray, optional): Длины волн атмосферных данных, нм.
|
39
|
+
По умолчанию — wavelenght_modtran_kp.
|
40
|
+
transparency_atmosphere (np.ndarray, optional): Прозрачность атмосферы (от 0 до 1).
|
41
|
+
По умолчанию — transparency_modtran_kp.
|
42
|
+
|
43
|
+
Возвращает:
|
44
|
+
wavelength_corrected (np.ndarray): Общие длины волн для спектра и атмосферных данных, нм.
|
45
|
+
intensity_corrected (np.ndarray): Скорректированная интенсивность,
|
46
|
+
фот/(с·м²·бин·нм).
|
47
|
+
|
48
|
+
Примечания:
|
49
|
+
- Для совпадающих длин волн значение интенсивности делится на соответствующую прозрачность.
|
50
|
+
- Пересчёт из "Рэлей/Ангстрем" в "фотоны/(с·м²·бин·нм)" производится по формуле:
|
51
|
+
intensity = intensity * 10^11 / (4 * pi) * pi^2 / (1800 * 1800)
|
52
|
+
"""
|
53
|
+
wavelenght = []
|
54
|
+
intensity = []
|
55
|
+
for i in range(wavelenght_airglow.shape[0]):
|
56
|
+
for j in range(wavelenght_atmosphere.shape[0]):
|
57
|
+
if wavelenght_airglow[i] == wavelenght_atmosphere[j]:
|
58
|
+
wavelenght.append(wavelenght_airglow[i])
|
59
|
+
intensity.append(intensity_airglow[i] / transparency_atmosphere[j])
|
60
|
+
intensity = np.array(intensity)
|
61
|
+
intensity = intensity * 10**11 / (4 * np.pi) * np.pi**2 / (1800 * 1800)
|
62
|
+
wavelenght = np.array(wavelenght)
|
63
|
+
return(wavelenght, intensity) #возвращает длину волны в нм и поток в фот / (сек м^2 ср нм) + от стерадиан к сетке
|
64
|
+
|
65
|
+
|
66
|
+
#функция написана для спектра взятого от китт пик, прозрачность атмосферы взята из модтрана, параметры -- см. доклад, там прямо скрин. Прозрачность взята для 45 градусов, пересчитана в 30 градусов
|
67
|
+
|
68
|
+
from .solar_radio_flux import fluxdate
|
69
|
+
|
70
|
+
|
@@ -0,0 +1,372 @@
|
|
1
|
+
from astropy.coordinates import get_body, Galactic
|
2
|
+
from astropy.time import Time
|
3
|
+
import ephem
|
4
|
+
import numpy as np
|
5
|
+
|
6
|
+
from .zodiac import convolution, integral
|
7
|
+
from .albedo_of_planets import venus_alb_wl, venus_alb_rf, mars_alb_wl, mars_alb_rf, jupiter_alb_wl, jupiter_alb_rf, saturn_alb_wl, saturn_alb_rf
|
8
|
+
from .solar_spectrum import wavelenght_newguey2003, flux_newguey2003
|
9
|
+
from .band_V_data import wavelenght_band_V, trancparency_band_V
|
10
|
+
|
11
|
+
|
12
|
+
def coordinates_of_planet(body, date, time): #'mars', 'venus', 'saturn', 'jupyter'; 2023-11-03; 12:00:00; return galactic coordinates of planet
|
13
|
+
"""
|
14
|
+
Вычисляет галактические координаты указанной планеты на заданную дату и время.
|
15
|
+
|
16
|
+
Функция принимает название планеты, дату и время, преобразует их в объект времени,
|
17
|
+
вычисляет положение планеты с использованием эфемерид и возвращает её галактические
|
18
|
+
координаты (долготу l и широту b).
|
19
|
+
|
20
|
+
Параметры:
|
21
|
+
body (str): Название планеты. Допустимые значения: 'mars', 'venus', 'saturn', 'jupiter'.
|
22
|
+
date (str): Дата в формате 'YYYY-MM-DD' (например, '2023-11-03').
|
23
|
+
time (str): Время в формате 'HH:MM:SS' (например, '12:00:00').
|
24
|
+
|
25
|
+
Возвращает:
|
26
|
+
tuple: Кортеж из двух значений:
|
27
|
+
- l (float): Галактическая долгота планеты (в градусах).
|
28
|
+
- b (float): Галактическая широта планеты (в градусах).
|
29
|
+
|
30
|
+
Примечания:
|
31
|
+
- Для вычисления положения планеты используется библиотека `astropy`:
|
32
|
+
- `get_body`: Получает положение планеты в экваториальной системе координат.
|
33
|
+
- `transform_to(Galactic)`: Преобразует координаты в галактическую систему.
|
34
|
+
- Эфемериды берутся из встроенного набора данных (`ephemeris='builtin'`).
|
35
|
+
- Результат возвращается в градусах, так как метод `.value` извлекает числовое значение углов.
|
36
|
+
"""
|
37
|
+
datetime = date + ' ' + time
|
38
|
+
time = Time(datetime)
|
39
|
+
planet = get_body(body, time, ephemeris='builtin').transform_to(Galactic)
|
40
|
+
l = planet.l.value
|
41
|
+
b = planet.b.value
|
42
|
+
return(l, b)
|
43
|
+
|
44
|
+
|
45
|
+
def magnitude_of_planet(body, date, time): #'mars', 'venus', 'saturn', 'jupiter'; 2023-11-03; 12:00:00';
|
46
|
+
"""
|
47
|
+
Вычисляет видимую звездную величину указанной планеты на заданную дату и время.
|
48
|
+
|
49
|
+
Функция принимает название планеты, дату и время наблюдения, использует библиотеку `ephem`
|
50
|
+
для расчета положения планеты и возвращает её видимую звездную величину (magnitude).
|
51
|
+
|
52
|
+
Параметры:
|
53
|
+
body (str): Название планеты. Допустимые значения: 'venus', 'mars', 'jupiter', 'saturn'.
|
54
|
+
date (str): Дата наблюдения в формате 'YYYY-MM-DD' (например, '2023-11-03').
|
55
|
+
time (str): Время наблюдения в формате 'HH:MM:SS' (например, '12:00:00').
|
56
|
+
В текущей реализации параметр time не используется, так как библиотека `ephem`
|
57
|
+
автоматически учитывает время при вычислениях.
|
58
|
+
|
59
|
+
Возвращает:
|
60
|
+
magnitude (float): Видимая звездная величина планеты (magnitude). Чем меньше значение, тем ярче объект.
|
61
|
+
|
62
|
+
Примечания:
|
63
|
+
- Для расчетов используется библиотека `ephem`, которая моделирует движение небесных тел.
|
64
|
+
- Дата преобразуется из формата 'YYYY-MM-DD' в формат 'YYYY/MM/DD', так как это требование библиотеки `ephem`.
|
65
|
+
- Видимая звездная величина (magnitude) зависит от положения планеты относительно Земли и Солнца.
|
66
|
+
- Если планета не указана в списке допустимых значений ('venus', 'mars', 'jupiter', 'saturn'),
|
67
|
+
функция вызовет ошибку.
|
68
|
+
|
69
|
+
|
70
|
+
Зависимости:
|
71
|
+
- `ephem`: Библиотека для астрономических расчетов.
|
72
|
+
Установка: `pip install ephem`
|
73
|
+
"""
|
74
|
+
if body == 'venus':
|
75
|
+
planet = ephem.Venus()
|
76
|
+
elif body == 'mars':
|
77
|
+
planet = ephem.Mars()
|
78
|
+
elif body == 'jupiter':
|
79
|
+
planet = ephem.Jupiter()
|
80
|
+
elif body == 'saturn':
|
81
|
+
planet = ephem.Saturn()
|
82
|
+
|
83
|
+
# Устанавливаем дату наблюдения
|
84
|
+
date = date.replace('-', '/')
|
85
|
+
|
86
|
+
planet.compute(date)
|
87
|
+
magnitude = planet.mag
|
88
|
+
return magnitude
|
89
|
+
|
90
|
+
def mag_to_phot(mag): #в полосе V
|
91
|
+
"""
|
92
|
+
Пересчитывает звездную величину (magnitude) в поток фотонов в полосе V, используя эталонную звезду 10-й звездной величины.
|
93
|
+
|
94
|
+
Функция использует формулу Погсона для пересчета звездной величины в поток фотонов.
|
95
|
+
Звезда 10-й звездной величины в полосе V имеет эталонный поток F0 = 10^2 фот / (см^2 сек).
|
96
|
+
|
97
|
+
Параметры:
|
98
|
+
mag (float): Звездная величина (magnitude) объекта в полосе V.
|
99
|
+
|
100
|
+
Возвращает:
|
101
|
+
F1 (float): Поток фотонов в единицах фот / (м^2 сек).
|
102
|
+
|
103
|
+
Примечания:
|
104
|
+
- Формула Погсона: F = F0 * 10^(0.4 * (10 - mag)),
|
105
|
+
где F0 — поток фотонов для звезды 10-й звездной величины.
|
106
|
+
- В данной реализации F0 = 10^2 фот / (см^2 сек).
|
107
|
+
- Результат переводится из фот / (см^2 сек) в фот / (м^2 сек) умножением на 10^4.
|
108
|
+
- Полоса V соответствует видимому диапазону спектра (визуальная звездная величина).
|
109
|
+
- Деление на 4π (для перехода к стерадианам) не выполняется, так как это зависит от контекста использования.
|
110
|
+
"""
|
111
|
+
F0 = 10**2
|
112
|
+
F1 = F0 * 10 ** (0.4 * (10 - mag)) # фот / (см^2 сек)
|
113
|
+
F1 = F1 * 10**4 #/ (4 * np.pi) # фот / (м^2 сек ср) -- НАДО ЛИ ДЕЛИТЬ НА 4 ПИ?
|
114
|
+
return F1
|
115
|
+
|
116
|
+
|
117
|
+
def venus_spectrum(date, time, Sun_sp_wl = wavelenght_newguey2003, Sun_sp_fx = flux_newguey2003, albedo_wl = venus_alb_wl, albedo_rf = venus_alb_rf, V_wl = wavelenght_band_V, V_tr = trancparency_band_V):
|
118
|
+
"""
|
119
|
+
Вычисляет спектр Венеры на основе заданных даты и времени наблюдения.
|
120
|
+
|
121
|
+
Функция использует спектр альбедо Венеры, солнечный спектр и полосу пропускания V
|
122
|
+
для вычисления нормированного спектра планеты. Нормировка производится так, чтобы
|
123
|
+
интегральная яркость в полосе V соответствовала видимой звездной величине Венеры на
|
124
|
+
указанную дату и время.
|
125
|
+
|
126
|
+
Параметры:
|
127
|
+
date (str): Дата наблюдения в формате 'YYYY-MM-DD' (например, '2023-11-03').
|
128
|
+
time (str): Время наблюдения в формате 'HH:MM:SS' (например, '12:00:00').
|
129
|
+
Sun_sp_wl (ndarray, optional): Массив длин волн солнечного спектра (в нм).
|
130
|
+
По умолчанию используется `wavelenght_newguey2003`.
|
131
|
+
Sun_sp_fx (ndarray, optional): Массив значений солнечного спектра (в фот / (сек м^2 нм)).
|
132
|
+
По умолчанию используется `flux_newguey2003`.
|
133
|
+
albedo_wl (ndarray, optional): Массив длин волн спектра альбедо Венеры (в нм).
|
134
|
+
По умолчанию используется `venus_alb_wl`.
|
135
|
+
albedo_rf (ndarray, optional): Массив значений спектра альбедо Венеры.
|
136
|
+
По умолчанию используется `venus_alb_rf`.
|
137
|
+
V_wl (ndarray, optional): Массив длин волн полосы пропускания V (в нм).
|
138
|
+
По умолчанию используется `wavelenght_band_V`.
|
139
|
+
V_tr (ndarray, optional): Массив значений прозрачности полосы пропускания V.
|
140
|
+
По умолчанию используется `trancparency_band_V`.
|
141
|
+
|
142
|
+
Возвращает:
|
143
|
+
tuple: Кортеж из двух массивов:
|
144
|
+
- planet_wl (ndarray): Массив длин волн спектра планеты (в нм).
|
145
|
+
- planet_sp (ndarray): Массив значений спектра планеты (в фот / (сек ср м^2 нм)).
|
146
|
+
|
147
|
+
Примечания:
|
148
|
+
- Спектр планеты вычисляется как свертка спектра альбедо планеты с солнечным спектром.
|
149
|
+
- Нормировка спектра производится так, чтобы интегральная яркость в полосе V
|
150
|
+
соответствовала видимой звездной величине планеты, вычисленной с помощью
|
151
|
+
функции `magnitude_of_planet`.
|
152
|
+
- Пользователь может задать свои спектры вместо стандартных данных.
|
153
|
+
|
154
|
+
Зависимости:
|
155
|
+
- `convolution`: Функция для свертки спектров.
|
156
|
+
- `integral`: Функция для численного интегрирования.
|
157
|
+
- `magnitude_of_planet`: Функция для вычисления видимой звездной величины планеты.
|
158
|
+
- `mag_to_phot`: Функция для пересчета звездной величины в поток фотонов.
|
159
|
+
"""
|
160
|
+
body = 'venus'
|
161
|
+
planet_wl, planet_sp = convolution(albedo_wl, albedo_rf, Sun_sp_wl, Sun_sp_fx) #вот тут получили спектр планеты
|
162
|
+
planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr) #свернули с полосой V, фот / (сек ср м^2 нм)
|
163
|
+
|
164
|
+
norm = integral(planet_V_wl, planet_V_sp) # фот / (сек ср м^2)
|
165
|
+
|
166
|
+
#делаем так, чтобы эта норма была равна F1
|
167
|
+
mag = magnitude_of_planet(body, date, time)
|
168
|
+
F1 = mag_to_phot(mag)
|
169
|
+
A = F1 / norm
|
170
|
+
planet_sp = A * planet_sp
|
171
|
+
|
172
|
+
#########################################################################
|
173
|
+
# planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr)
|
174
|
+
# integr = integral(planet_V_wl, planet_V_sp)
|
175
|
+
# print('Техническая проверка на совпадение двух чисел:', integr, F1)
|
176
|
+
#########################################################################
|
177
|
+
|
178
|
+
return planet_wl, planet_sp
|
179
|
+
|
180
|
+
def mars_spectrum(date, time, Sun_sp_wl = wavelenght_newguey2003, Sun_sp_fx = flux_newguey2003, albedo_wl = mars_alb_wl, albedo_rf = mars_alb_rf, V_wl = wavelenght_band_V, V_tr = trancparency_band_V):
|
181
|
+
"""
|
182
|
+
Вычисляет спектр Марса на основе заданных даты и времени наблюдения.
|
183
|
+
|
184
|
+
Функция использует спектр альбедо Марса, солнечный спектр и полосу пропускания V
|
185
|
+
для вычисления нормированного спектра планеты. Нормировка производится так, чтобы
|
186
|
+
интегральная яркость в полосе V соответствовала видимой звездной величине Марса на
|
187
|
+
указанную дату и время.
|
188
|
+
|
189
|
+
Параметры:
|
190
|
+
date (str): Дата наблюдения в формате 'YYYY-MM-DD' (например, '2023-11-03').
|
191
|
+
time (str): Время наблюдения в формате 'HH:MM:SS' (например, '12:00:00').
|
192
|
+
Sun_sp_wl (ndarray, optional): Массив длин волн солнечного спектра (в нм).
|
193
|
+
По умолчанию используется `wavelenght_newguey2003`.
|
194
|
+
Sun_sp_fx (ndarray, optional): Массив значений солнечного спектра (в фот / (сек м^2 нм)).
|
195
|
+
По умолчанию используется `flux_newguey2003`.
|
196
|
+
albedo_wl (ndarray, optional): Массив длин волн спектра альбедо Марса (в нм).
|
197
|
+
По умолчанию используется `mars_alb_wl`.
|
198
|
+
albedo_rf (ndarray, optional): Массив значений спектра альбедо Марса.
|
199
|
+
По умолчанию используется `mars_alb_rf`.
|
200
|
+
V_wl (ndarray, optional): Массив длин волн полосы пропускания V (в нм).
|
201
|
+
По умолчанию используется `wavelenght_band_V`.
|
202
|
+
V_tr (ndarray, optional): Массив значений прозрачности полосы пропускания V.
|
203
|
+
По умолчанию используется `trancparency_band_V`.
|
204
|
+
|
205
|
+
Возвращает:
|
206
|
+
tuple: Кортеж из двух массивов:
|
207
|
+
- planet_wl (ndarray): Массив длин волн спектра планеты (в нм).
|
208
|
+
- planet_sp (ndarray): Массив значений спектра планеты (в фот / (сек ср м^2 нм)).
|
209
|
+
|
210
|
+
Примечания:
|
211
|
+
- Спектр планеты вычисляется как свертка спектра альбедо планеты с солнечным спектром.
|
212
|
+
- Нормировка спектра производится так, чтобы интегральная яркость в полосе V
|
213
|
+
соответствовала видимой звездной величине планеты, вычисленной с помощью
|
214
|
+
функции `magnitude_of_planet`.
|
215
|
+
- Пользователь может задать свои спектры вместо стандартных данных.
|
216
|
+
|
217
|
+
Зависимости:
|
218
|
+
- `convolution`: Функция для свертки спектров.
|
219
|
+
- `integral`: Функция для численного интегрирования.
|
220
|
+
- `magnitude_of_planet`: Функция для вычисления видимой звездной величины планеты.
|
221
|
+
- `mag_to_phot`: Функция для пересчета звездной величины в поток фотонов.
|
222
|
+
"""
|
223
|
+
body = 'mars'
|
224
|
+
planet_wl, planet_sp = convolution(albedo_wl, albedo_rf, Sun_sp_wl, Sun_sp_fx) #вот тут получили спектр планеты
|
225
|
+
planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr) #свернули с полосой V, фот / (сек ср м^2 нм)
|
226
|
+
|
227
|
+
norm = integral(planet_V_wl, planet_V_sp) # фот / (сек ср м^2)
|
228
|
+
|
229
|
+
#делаем так, чтобы эта норма была равна F1
|
230
|
+
mag = magnitude_of_planet(body, date, time)
|
231
|
+
F1 = mag_to_phot(mag)
|
232
|
+
A = F1 / norm
|
233
|
+
planet_sp = A * planet_sp
|
234
|
+
|
235
|
+
#########################################################################
|
236
|
+
# planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr)
|
237
|
+
# integr = integral(planet_V_wl, planet_V_sp)
|
238
|
+
# print('Техническая проверка на совпадение двух чисел:', integr, F1)
|
239
|
+
#########################################################################
|
240
|
+
|
241
|
+
return planet_wl, planet_sp
|
242
|
+
|
243
|
+
def jupiter_spectrum(date, time, Sun_sp_wl = wavelenght_newguey2003, Sun_sp_fx = flux_newguey2003, albedo_wl = jupiter_alb_wl, albedo_rf = jupiter_alb_rf, V_wl = wavelenght_band_V, V_tr = trancparency_band_V):
|
244
|
+
"""
|
245
|
+
Вычисляет спектр Юпитера на основе заданных даты и времени наблюдения.
|
246
|
+
|
247
|
+
Функция использует спектр альбедо Юпитера, солнечный спектр и полосу пропускания V
|
248
|
+
для вычисления нормированного спектра планеты. Нормировка производится так, чтобы
|
249
|
+
интегральная яркость в полосе V соответствовала видимой звездной величине Юпитера на
|
250
|
+
указанную дату и время.
|
251
|
+
|
252
|
+
Параметры:
|
253
|
+
date (str): Дата наблюдения в формате 'YYYY-MM-DD' (например, '2023-11-03').
|
254
|
+
time (str): Время наблюдения в формате 'HH:MM:SS' (например, '12:00:00').
|
255
|
+
Sun_sp_wl (ndarray, optional): Массив длин волн солнечного спектра (в нм).
|
256
|
+
По умолчанию используется `wavelenght_newguey2003`.
|
257
|
+
Sun_sp_fx (ndarray, optional): Массив значений солнечного спектра (в фот / (сек м^2 нм)).
|
258
|
+
По умолчанию используется `flux_newguey2003`.
|
259
|
+
albedo_wl (ndarray, optional): Массив длин волн спектра альбедо Юпитера (в нм).
|
260
|
+
По умолчанию используется `jupiter_alb_wl`.
|
261
|
+
albedo_rf (ndarray, optional): Массив значений спектра альбедо Юпитера.
|
262
|
+
По умолчанию используется `jupiter_alb_rf`.
|
263
|
+
V_wl (ndarray, optional): Массив длин волн полосы пропускания V (в нм).
|
264
|
+
По умолчанию используется `wavelenght_band_V`.
|
265
|
+
V_tr (ndarray, optional): Массив значений прозрачности полосы пропускания V.
|
266
|
+
По умолчанию используется `trancparency_band_V`.
|
267
|
+
|
268
|
+
Возвращает:
|
269
|
+
tuple: Кортеж из двух массивов:
|
270
|
+
- planet_wl (ndarray): Массив длин волн спектра планеты (в нм).
|
271
|
+
- planet_sp (ndarray): Массив значений спектра планеты (в фот / (сек ср м^2 нм)).
|
272
|
+
|
273
|
+
Примечания:
|
274
|
+
- Спектр планеты вычисляется как свертка спектра альбедо планеты с солнечным спектром.
|
275
|
+
- Нормировка спектра производится так, чтобы интегральная яркость в полосе V
|
276
|
+
соответствовала видимой звездной величине планеты, вычисленной с помощью
|
277
|
+
функции `magnitude_of_planet`.
|
278
|
+
- Пользователь может задать свои спектры вместо стандартных данных.
|
279
|
+
|
280
|
+
Зависимости:
|
281
|
+
- `convolution`: Функция для свертки спектров.
|
282
|
+
- `integral`: Функция для численного интегрирования.
|
283
|
+
- `magnitude_of_planet`: Функция для вычисления видимой звездной величины планеты.
|
284
|
+
- `mag_to_phot`: Функция для пересчета звездной величины в поток фотонов.
|
285
|
+
"""
|
286
|
+
body = 'jupiter'
|
287
|
+
planet_wl, planet_sp = convolution(albedo_wl, albedo_rf, Sun_sp_wl, Sun_sp_fx) #вот тут получили спектр планеты
|
288
|
+
planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr) #свернули с полосой V, фот / (сек ср м^2 нм)
|
289
|
+
|
290
|
+
norm = integral(planet_V_wl, planet_V_sp) # фот / (сек ср м^2)
|
291
|
+
|
292
|
+
#делаем так, чтобы эта норма была равна F1
|
293
|
+
mag = magnitude_of_planet(body, date, time)
|
294
|
+
F1 = mag_to_phot(mag)
|
295
|
+
A = F1 / norm
|
296
|
+
planet_sp = A * planet_sp
|
297
|
+
|
298
|
+
#########################################################################
|
299
|
+
# planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr)
|
300
|
+
# integr = integral(planet_V_wl, planet_V_sp)
|
301
|
+
# print('Техническая проверка на совпадение двух чисел:', integr, F1)
|
302
|
+
#########################################################################
|
303
|
+
|
304
|
+
return planet_wl, planet_sp
|
305
|
+
|
306
|
+
def saturn_spectrum(date, time, Sun_sp_wl = wavelenght_newguey2003, Sun_sp_fx = flux_newguey2003, albedo_wl = saturn_alb_wl, albedo_rf = saturn_alb_rf, V_wl = wavelenght_band_V, V_tr = trancparency_band_V):
|
307
|
+
"""
|
308
|
+
Вычисляет спектр Сатурна на основе заданных даты и времени наблюдения.
|
309
|
+
|
310
|
+
Функция использует спектр альбедо Сатурна, солнечный спектр и полосу пропускания V
|
311
|
+
для вычисления нормированного спектра планеты. Нормировка производится так, чтобы
|
312
|
+
интегральная яркость в полосе V соответствовала видимой звездной величине Сатурна на
|
313
|
+
указанную дату и время.
|
314
|
+
|
315
|
+
Параметры:
|
316
|
+
date (str): Дата наблюдения в формате 'YYYY-MM-DD' (например, '2023-11-03').
|
317
|
+
time (str): Время наблюдения в формате 'HH:MM:SS' (например, '12:00:00').
|
318
|
+
Sun_sp_wl (ndarray, optional): Массив длин волн солнечного спектра (в нм).
|
319
|
+
По умолчанию используется `wavelenght_newguey2003`.
|
320
|
+
Sun_sp_fx (ndarray, optional): Массив значений солнечного спектра (в фот / (сек м^2 нм)).
|
321
|
+
По умолчанию используется `flux_newguey2003`.
|
322
|
+
albedo_wl (ndarray, optional): Массив длин волн спектра альбедо Сатурна (в нм).
|
323
|
+
По умолчанию используется `saturn_alb_wl`.
|
324
|
+
albedo_rf (ndarray, optional): Массив значений спектра альбедо Сатурна.
|
325
|
+
По умолчанию используется `saturn_alb_rf`.
|
326
|
+
V_wl (ndarray, optional): Массив длин волн полосы пропускания V (в нм).
|
327
|
+
По умолчанию используется `wavelenght_band_V`.
|
328
|
+
V_tr (ndarray, optional): Массив значений прозрачности полосы пропускания V.
|
329
|
+
По умолчанию используется `trancparency_band_V`.
|
330
|
+
|
331
|
+
Возвращает:
|
332
|
+
tuple: Кортеж из двух массивов:
|
333
|
+
- planet_wl (ndarray): Массив длин волн спектра планеты (в нм).
|
334
|
+
- planet_sp (ndarray): Массив значений спектра планеты (в фот / (сек ср м^2 нм)).
|
335
|
+
|
336
|
+
Примечания:
|
337
|
+
- Спектр планеты вычисляется как свертка спектра альбедо планеты с солнечным спектром.
|
338
|
+
- Нормировка спектра производится так, чтобы интегральная яркость в полосе V
|
339
|
+
соответствовала видимой звездной величине планеты, вычисленной с помощью
|
340
|
+
функции `magnitude_of_planet`.
|
341
|
+
- Пользователь может задать свои спектры вместо стандартных данных.
|
342
|
+
|
343
|
+
Зависимости:
|
344
|
+
- `convolution`: Функция для свертки спектров.
|
345
|
+
- `integral`: Функция для численного интегрирования.
|
346
|
+
- `magnitude_of_planet`: Функция для вычисления видимой звездной величины планеты.
|
347
|
+
- `mag_to_phot`: Функция для пересчета звездной величины в поток фотонов.
|
348
|
+
"""
|
349
|
+
body = 'saturn'
|
350
|
+
planet_wl, planet_sp = convolution(albedo_wl, albedo_rf, Sun_sp_wl, Sun_sp_fx) #вот тут получили спектр планеты
|
351
|
+
planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr) #свернули с полосой V, фот / (сек ср м^2 нм)
|
352
|
+
|
353
|
+
norm = integral(planet_V_wl, planet_V_sp) # фот / (сек ср м^2)
|
354
|
+
|
355
|
+
#делаем так, чтобы эта норма была равна F1
|
356
|
+
mag = magnitude_of_planet(body, date, time)
|
357
|
+
F1 = mag_to_phot(mag)
|
358
|
+
A = F1 / norm
|
359
|
+
planet_sp = A * planet_sp
|
360
|
+
|
361
|
+
#########################################################################
|
362
|
+
# planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr)
|
363
|
+
# integr = integral(planet_V_wl, planet_V_sp)
|
364
|
+
# print('Техническая проверка на совпадение двух чисел:', integr, F1)
|
365
|
+
#########################################################################
|
366
|
+
|
367
|
+
return planet_wl, planet_sp
|
368
|
+
|
369
|
+
# Внутри основной функции: если планета попадает в поле зрения (через coordinates_of_planet(.....)),
|
370
|
+
# ищем ее спектр venus_spectrum(.....)
|
371
|
+
|
372
|
+
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import numpy as np
|
2
|
+
|
3
|
+
from .data.load_data import load_star_temperatures, load_star_brightness
|
4
|
+
|
5
|
+
from.zodiac import black_body_phot
|
6
|
+
|
7
|
+
#на вход подаем галактические координаты (l -- долгота, b -- широта) и массив длин волн, по которым строим спектр
|
8
|
+
#РАЗОБРАТЬСЯ С КОЭФФИЦИЕНТАМИ А -- НАДО ЛИ НОРМИРОВАТЬ НА C (КАЖЕТСЯ НАДО) А ЕЩЕ ВРОДЕ Я ЕГО ОТНОРМИРОВАЛА И ПОДГРУЗИЛА -- ПРОВЕРИТЬ
|
9
|
+
def star_spectrum(l, b, lmbd):
|
10
|
+
"""
|
11
|
+
Вычисляет спектр звезды по её галактическим координатам и массиву длин волн.
|
12
|
+
|
13
|
+
Функция принимает галактические координаты (долгота и широта) и массив длин волн,
|
14
|
+
пересчитывает координаты в индексы массива, извлекает температуру и амплитуду
|
15
|
+
из предварительно рассчитанных массивов данных, и вычисляет спектр звезды
|
16
|
+
с использованием формулы Планка для абсолютно черного тела.
|
17
|
+
|
18
|
+
Параметры:
|
19
|
+
l (float): Галактическая долгота точки наблюдения (в градусах).
|
20
|
+
b (float): Галактическая широта точки наблюдения (в градусах).
|
21
|
+
lmbd (ndarray): Массив длин волн, для которых рассчитывается спектр (в нм).
|
22
|
+
|
23
|
+
Возвращает:
|
24
|
+
ndarray: Массив значений спектра звезды (в фот / (сек * м^2 * нм)).
|
25
|
+
|
26
|
+
Примечания:
|
27
|
+
- Пересчет галактических координат в индексы массива:
|
28
|
+
- Долгота преобразуется в диапазон от 0 до 3600.
|
29
|
+
- Широта преобразуется в диапазон от 0 до 1800.
|
30
|
+
- Используются два предварительно рассчитанных массива:
|
31
|
+
- `star_brightness`: массив амплитуд яркости звезд.
|
32
|
+
- `star_temperatures`: массив температур звезд (в Кельвинах).
|
33
|
+
- Спектр рассчитывается по формуле Планка для абсолютно черного тела:
|
34
|
+
- spectrum = A * black_body_phot(lmbd, T),
|
35
|
+
где A — амплитуда, T — температура, lmbd — длина волны.
|
36
|
+
- Функция `black_body_phot` определена отдельно.
|
37
|
+
|
38
|
+
|
39
|
+
Зависимости:
|
40
|
+
- `load_star_brightness()`: загружает массив амплитуд яркости звезд.
|
41
|
+
- `load_star_temperatures()`: загружает массив температур звезд.
|
42
|
+
- `black_body_phot(lmbd, T)`: вычисляет спектральную плотность излучения
|
43
|
+
абсолютно черного тела для заданной длины волны и температуры.
|
44
|
+
"""
|
45
|
+
#пересчет из галактических к позиции в массиве, ЕСЛИ ПРОБЛЕМЫ ВОЗНИКЛИ, ПЕРЕПРОВЕРИТЬ
|
46
|
+
if round(l*10) >= 1800:
|
47
|
+
j = int((1800 - round(l*10)) + 3600)
|
48
|
+
elif round(l*10) < 1800:
|
49
|
+
j = int(1800 - round((l+10)*10))
|
50
|
+
|
51
|
+
i = int(900 + round(b*10))
|
52
|
+
star_brightness = load_star_brightness()
|
53
|
+
star_temperatures = load_star_temperatures()
|
54
|
+
A = star_brightness[i][j]
|
55
|
+
T = star_temperatures[i][j]
|
56
|
+
print('Информация по звезде в этом пикселе: T = ', T, ', A = ', A, sep='')
|
57
|
+
print('Техническая строчка: i = ', i, ', j = ', j, sep='')
|
58
|
+
spectrum = A * black_body_phot(lmbd, T)
|
59
|
+
return spectrum
|
@@ -15,6 +15,35 @@ from .albedo_of_planets import *
|
|
15
15
|
from .planets import *
|
16
16
|
|
17
17
|
def galactic_to_equatorial(l, b):
|
18
|
+
"""
|
19
|
+
Преобразует галактические координаты в эклиптические.
|
20
|
+
|
21
|
+
Функция принимает галактическую долготу и широту объекта, преобразует их
|
22
|
+
в эклиптические координаты (долготу и широту) с использованием стандартной
|
23
|
+
эпохи J2000.0 и библиотеки `astropy`.
|
24
|
+
|
25
|
+
Параметры:
|
26
|
+
l (float): Галактическая долгота объекта (в градусах).
|
27
|
+
b (float): Галактическая широта объекта (в градусах).
|
28
|
+
|
29
|
+
Возвращает:
|
30
|
+
tuple: Кортеж из двух значений:
|
31
|
+
- ecl_lon (float): Эклиптическая долгота объекта (в градусах).
|
32
|
+
- ecl_lat (float): Эклиптическая широта объекта (в градусах).
|
33
|
+
|
34
|
+
Примечания:
|
35
|
+
- Для преобразования используется библиотека `astropy`:
|
36
|
+
- `Galactic`: Представляет галактические координаты.
|
37
|
+
- `GeocentricMeanEcliptic`: Представляет эклиптические координаты.
|
38
|
+
- Эпоха расчетов фиксирована как J2000.0.
|
39
|
+
- Результат возвращается в градусах, так как это наиболее распространенный формат для астрономических данных.
|
40
|
+
|
41
|
+
Зависимости:
|
42
|
+
- `astropy.units`: Для работы с единицами измерения (градусы).
|
43
|
+
- `astropy.time.Time`: Для задания эпохи J2000.0.
|
44
|
+
- `astropy.coordinates.Galactic`: Для представления галактических координат.
|
45
|
+
- `astropy.coordinates.GeocentricMeanEcliptic`: Для представления эклиптических координат.
|
46
|
+
"""
|
18
47
|
import astropy.units as u
|
19
48
|
# Входные данные: галактические координаты и эпоха
|
20
49
|
galactic_l = l * u.deg # Галактическая долгота
|
@@ -31,9 +60,40 @@ def galactic_to_equatorial(l, b):
|
|
31
60
|
print("Техническая проверка")
|
32
61
|
print(f"Эклиптическая долгота (λ): {ecliptic_coords.lon.to(u.deg)}")
|
33
62
|
print(f"Эклиптическая широта (β): {ecliptic_coords.lat.to(u.deg)}")
|
34
|
-
|
63
|
+
|
64
|
+
ecl_lon = ecliptic_coords.lon.to(u.deg).value
|
65
|
+
ecl_lat = ecliptic_coords.lat.to(u.deg).value
|
66
|
+
return(ecl_lon, ecl_lat)
|
35
67
|
|
36
68
|
def Sun_ecl_lon(date, time):
|
69
|
+
"""
|
70
|
+
Вычисляет эклиптическую долготу Солнца по заданным дате и времени.
|
71
|
+
|
72
|
+
Функция принимает дату и время наблюдения, использует библиотеку `astropy`
|
73
|
+
для расчета положения Солнца в геоцентрической эклиптической системе координат
|
74
|
+
и возвращает эклиптическую долготу Солнца.
|
75
|
+
|
76
|
+
Параметры:
|
77
|
+
date (str): Дата наблюдения в формате 'YYYY-MM-DD' (например, '2023-11-03').
|
78
|
+
time (str): Время наблюдения в формате 'HH:MM:SS' (например, '12:00:00').
|
79
|
+
|
80
|
+
Возвращает:
|
81
|
+
ecl_lon_of_Sun (float): Эклиптическая долгота Солнца (в градусах).
|
82
|
+
|
83
|
+
Примечания:
|
84
|
+
- Для расчетов используется библиотека `astropy`:
|
85
|
+
- `get_sun`: Получает положение Солнца в геоцентрической системе координат.
|
86
|
+
- `GeocentricMeanEcliptic`: Преобразует координаты в эклиптическую систему.
|
87
|
+
- Результат возвращается в градусах, так как это наиболее распространенный формат
|
88
|
+
для астрономических данных.
|
89
|
+
- Эклиптическая широта Солнца не возвращается, так как она не используется в дальнейших расчетах.
|
90
|
+
|
91
|
+
Зависимости:
|
92
|
+
- `astropy.time.Time`: Для обработки даты и времени.
|
93
|
+
- `astropy.coordinates.get_sun`: Для получения положения Солнца.
|
94
|
+
- `astropy.coordinates.GeocentricMeanEcliptic`: Для преобразования координат
|
95
|
+
в эклиптическую систему.
|
96
|
+
"""
|
37
97
|
datetime = date + ' ' + time
|
38
98
|
observation_time = Time(datetime)
|
39
99
|
|
@@ -51,9 +111,43 @@ def Sun_ecl_lon(date, time):
|
|
51
111
|
print("Техническая проверка:")
|
52
112
|
print(f"Эклиптическая долгота Солнца: {ecliptic_longitude}")
|
53
113
|
print(f"Эклиптическая широта Солнца: {ecliptic_latitude}")
|
54
|
-
|
114
|
+
ecl_lon_of_Sun = ecliptic_longitude.value
|
115
|
+
return(ecl_lon_of_Sun)
|
55
116
|
|
56
117
|
def sum_of_spectrums(wl_1, sp_1, wl_2, sp_2):
|
118
|
+
"""
|
119
|
+
Суммирует два спектра, заданных длинами волн и их интенсивностями.
|
120
|
+
|
121
|
+
Функция принимает два спектра, представленных массивами длин волн и соответствующих
|
122
|
+
интенсивностей, объединяет их по длинам волн и вычисляет сумму интенсивностей
|
123
|
+
на совпадающих длинах волн. Результатом является общий спектр, содержащий все
|
124
|
+
уникальные длины волн из обоих входных спектров.
|
125
|
+
|
126
|
+
Параметры:
|
127
|
+
wl_1 (ndarray): Массив длин волн первого спектра (в нм).
|
128
|
+
sp_1 (ndarray): Массив интенсивностей первого спектра.
|
129
|
+
wl_2 (ndarray): Массив длин волн второго спектра (в нм).
|
130
|
+
sp_2 (ndarray): Массив интенсивностей второго спектра.
|
131
|
+
|
132
|
+
Возвращает:
|
133
|
+
tuple: Кортеж из двух массивов:
|
134
|
+
- result_wl (ndarray): Массив уникальных длин волн, объединяющий
|
135
|
+
длины волн из обоих спектров (в нм).
|
136
|
+
- result_spec (ndarray): Массив суммарных интенсивностей для каждой
|
137
|
+
длины волны из `result_wl`.
|
138
|
+
|
139
|
+
Примечания:
|
140
|
+
- Если длина волны присутствует только в одном из спектров, её интенсивность
|
141
|
+
добавляется без изменений.
|
142
|
+
- Если длина волны присутствует в обоих спектрах, её интенсивности суммируются.
|
143
|
+
- Для объединения длин волн используется функция `numpy.union1d`, которая
|
144
|
+
гарантирует уникальность значений и их сортировку.
|
145
|
+
- Функция предполагает, что входные массивы `wl_1` и `sp_1`, а также `wl_2`
|
146
|
+
и `sp_2`, имеют одинаковую длину.
|
147
|
+
|
148
|
+
Зависимости:
|
149
|
+
- `numpy`: Для работы с массивами и выполнения операций объединения и поиска.
|
150
|
+
"""
|
57
151
|
result_wl = np.union1d(wl_1, wl_2) #создали массив совокупности длин волн
|
58
152
|
result_spec = np.zeros(result_wl.shape[0]) #создали массив для спектра
|
59
153
|
for i in range(result_wl.shape[0]):
|