SkyMapMod 0.1.33__py3-none-any.whl → 0.1.35__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.
SkyMapMod/airglow.py CHANGED
@@ -24,6 +24,32 @@ def radioflux(date, time): #date -- в формате строки 'дд.мм.г
24
24
 
25
25
 
26
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
+ """
27
53
  wavelenght = []
28
54
  intensity = []
29
55
  for i in range(wavelenght_airglow.shape[0]):
@@ -31,7 +57,12 @@ def airglow_spectrum(wavelenght_airglow = wavelenght_kp, intensity_airglow = int
31
57
  if wavelenght_airglow[i] == wavelenght_atmosphere[j]:
32
58
  wavelenght.append(wavelenght_airglow[i])
33
59
  intensity.append(intensity_airglow[i] / transparency_atmosphere[j])
34
- return(np.array(wavelenght), np.array(intensity) * 10**10 / (4 * np.pi)) * np.pi**2 / (180 * 360) #возвращает длину волны в нм и поток в фот / (сек м^2 ср нм) + от стерадиан к сетке
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
+
35
66
  #функция написана для спектра взятого от китт пик, прозрачность атмосферы взята из модтрана, параметры -- см. доклад, там прямо скрин. Прозрачность взята для 45 градусов, пересчитана в 30 градусов
36
67
 
37
68
  from .solar_radio_flux import fluxdate
SkyMapMod/planets.py CHANGED
@@ -10,6 +10,30 @@ from .band_V_data import wavelenght_band_V, trancparency_band_V
10
10
 
11
11
 
12
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
+ """
13
37
  datetime = date + ' ' + time
14
38
  time = Time(datetime)
15
39
  planet = get_body(body, time, ephemeris='builtin').transform_to(Galactic)
@@ -19,6 +43,34 @@ def coordinates_of_planet(body, date, time): #'mars', 'venus', 'saturn', 'jupyte
19
43
 
20
44
 
21
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
+ """
22
74
  if body == 'venus':
23
75
  planet = ephem.Venus()
24
76
  elif body == 'mars':
@@ -32,16 +84,79 @@ def magnitude_of_planet(body, date, time): #'mars', 'venus', 'saturn', 'jupiter'
32
84
  date = date.replace('-', '/')
33
85
 
34
86
  planet.compute(date)
35
- return planet.mag
87
+ magnitude = planet.mag
88
+ return magnitude
36
89
 
37
90
  def mag_to_phot(mag): #в полосе V
38
- F0 = 10**6
39
- F1 = F0 * 10 ** (- 0.4 * mag) # фот / (см^2 сек)
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 сек)
40
113
  F1 = F1 * 10**4 #/ (4 * np.pi) # фот / (м^2 сек ср) -- НАДО ЛИ ДЕЛИТЬ НА 4 ПИ?
41
114
  return F1
42
115
 
43
116
 
44
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
+ """
45
160
  body = 'venus'
46
161
  planet_wl, planet_sp = convolution(albedo_wl, albedo_rf, Sun_sp_wl, Sun_sp_fx) #вот тут получили спектр планеты
47
162
  planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr) #свернули с полосой V, фот / (сек ср м^2 нм)
@@ -63,6 +178,48 @@ def venus_spectrum(date, time, Sun_sp_wl = wavelenght_newguey2003, Sun_sp_fx = f
63
178
  return planet_wl, planet_sp
64
179
 
65
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
+ """
66
223
  body = 'mars'
67
224
  planet_wl, planet_sp = convolution(albedo_wl, albedo_rf, Sun_sp_wl, Sun_sp_fx) #вот тут получили спектр планеты
68
225
  planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr) #свернули с полосой V, фот / (сек ср м^2 нм)
@@ -84,6 +241,48 @@ def mars_spectrum(date, time, Sun_sp_wl = wavelenght_newguey2003, Sun_sp_fx = fl
84
241
  return planet_wl, planet_sp
85
242
 
86
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
+ """
87
286
  body = 'jupiter'
88
287
  planet_wl, planet_sp = convolution(albedo_wl, albedo_rf, Sun_sp_wl, Sun_sp_fx) #вот тут получили спектр планеты
89
288
  planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr) #свернули с полосой V, фот / (сек ср м^2 нм)
@@ -105,6 +304,48 @@ def jupiter_spectrum(date, time, Sun_sp_wl = wavelenght_newguey2003, Sun_sp_fx =
105
304
  return planet_wl, planet_sp
106
305
 
107
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
+ """
108
349
  body = 'saturn'
109
350
  planet_wl, planet_sp = convolution(albedo_wl, albedo_rf, Sun_sp_wl, Sun_sp_fx) #вот тут получили спектр планеты
110
351
  planet_V_wl, planet_V_sp = convolution(planet_wl, planet_sp, V_wl, V_tr) #свернули с полосой V, фот / (сек ср м^2 нм)
@@ -7,6 +7,41 @@ from.zodiac import black_body_phot
7
7
  #на вход подаем галактические координаты (l -- долгота, b -- широта) и массив длин волн, по которым строим спектр
8
8
  #РАЗОБРАТЬСЯ С КОЭФФИЦИЕНТАМИ А -- НАДО ЛИ НОРМИРОВАТЬ НА C (КАЖЕТСЯ НАДО) А ЕЩЕ ВРОДЕ Я ЕГО ОТНОРМИРОВАЛА И ПОДГРУЗИЛА -- ПРОВЕРИТЬ
9
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
+ """
10
45
  #пересчет из галактических к позиции в массиве, ЕСЛИ ПРОБЛЕМЫ ВОЗНИКЛИ, ПЕРЕПРОВЕРИТЬ
11
46
  if round(l*10) >= 1800:
12
47
  j = int((1800 - round(l*10)) + 3600)
@@ -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
- return(ecliptic_coords.lon.to(u.deg).value, ecliptic_coords.lat.to(u.deg).value)
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
- return(ecliptic_longitude.value)
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]):
SkyMapMod/zodiac.py CHANGED
@@ -8,55 +8,276 @@ import random
8
8
 
9
9
  #переопределяю тригонометрические функции, чтобы работать с градусами
10
10
  def cos(x):
11
+ """
12
+ Вычисляет косинус угла, заданного в градусах.
13
+
14
+ Параметры:
15
+ x (float): Угол в градусах.
16
+
17
+ Возвращает:
18
+ float: Значение косинуса угла.
19
+
20
+ Примечания:
21
+ - Функция преобразует угол из градусов в радианы перед вычислением.
22
+ """
11
23
  return np.cos(x * np.pi / 180)
12
24
 
13
25
  def sin(x):
26
+ """
27
+ Вычисляет синус угла, заданного в градусах.
28
+
29
+ Параметры:
30
+ x (float): Угол в градусах.
31
+
32
+ Возвращает:
33
+ float: Значение синуса угла.
34
+
35
+ Примечания:
36
+ - Функция преобразует угол из градусов в радианы перед вычислением.
37
+ """
14
38
  return np.sin(x * np.pi / 180)
15
39
 
16
40
  def tan(x):
41
+ """
42
+ Вычисляет тангенс угла, заданного в градусах.
43
+
44
+ Параметры:
45
+ x (float): Угол в градусах.
46
+
47
+ Возвращает:
48
+ float: Значение тангенса угла.
49
+
50
+ Примечания:
51
+ - Функция преобразует угол из градусов в радианы перед вычислением.
52
+ - Для углов, близких к 90° или 270°, результат может быть неопределённым (деление на ноль).
53
+ """
17
54
  return np.tan(x * np.pi / 180)
18
55
 
19
56
  def acos(x):
57
+ """
58
+ Вычисляет арккосинус числа и возвращает результат в градусах.
59
+
60
+ Параметры:
61
+ x (float): Число в диапазоне [-1, 1].
62
+
63
+ Возвращает:
64
+ float: Значение арккосинуса в градусах.
65
+
66
+ Примечания:
67
+ - Результат преобразуется из радиан в градусы.
68
+ - Если x не находится в диапазоне [-1, 1], возникает ошибка (ValueError).
69
+ """
20
70
  return np.arccos(x) * 180 / np.pi
21
71
 
22
72
  def asin(x):
73
+ """
74
+ Вычисляет арксинус числа и возвращает результат в градусах.
75
+
76
+ Параметры:
77
+ x (float): Число в диапазоне [-1, 1].
78
+
79
+ Возвращает:
80
+ float: Значение арксинуса в градусах.
81
+
82
+ Примечания:
83
+ - Результат преобразуется из радиан в градусы.
84
+ - Если x не находится в диапазоне [-1, 1], возникает ошибка (ValueError).
85
+ """
23
86
  return np.arcsin(x) * 180 / np.pi
24
87
 
25
88
  def atan(x):
89
+ """
90
+ Вычисляет арктангенс числа и возвращает результат в градусах.
91
+
92
+ Параметры:
93
+ x (float): Число.
94
+
95
+ Возвращает:
96
+ float: Значение арктангенса в градусах.
97
+
98
+ Примечания:
99
+ - Результат преобразуется из радиан в градусы.
100
+ """
26
101
  return np.arctan(x) * 180 / np.pi
27
102
 
28
103
  #переопределяю прочие функции для красоты записи
29
104
  def exp(x):
105
+ """
106
+ Вычисляет экспоненту числа.
107
+
108
+ Параметры:
109
+ x (float): Число.
110
+
111
+ Возвращает:
112
+ float: Значение экспоненты числа.
113
+
114
+ Примечания:
115
+ - Используется стандартная функция np.exp(x).
116
+ """
30
117
  return np.exp(x)
31
118
 
32
119
  def sqrt(x):
120
+ """
121
+ Вычисляет квадратный корень числа.
122
+
123
+ Параметры:
124
+ x (float): Неотрицательное число.
125
+
126
+ Возвращает:
127
+ float: Значение квадратного корня числа.
128
+
129
+ Примечания:
130
+ - Если x < 0, возникает ошибка (ValueError).
131
+ - Используется стандартная функция np.sqrt(x).
132
+ """
33
133
  return np.sqrt(x)
34
134
 
35
135
  #функция Хевисайда (в контексте статьи определяется именно так)
36
136
  def u(x):
137
+ """
138
+ Вычисляет значение функции Хевисайда (Heaviside step function).
139
+
140
+ Функция Хевисайда определяется как:
141
+ - 0, если x ≤ 0,
142
+ - 1, если x > 0.
143
+ Она используется для моделирования условий, которые применяются только
144
+ в определённых областях небесной сферы, например, для разделения солнечного
145
+ и антисолнечного полушарий.
146
+
147
+ Параметры:
148
+ x (float): Входное значение, для которого вычисляется функция.
149
+
150
+ Возвращает:
151
+ int: Значение функции Хевисайда:
152
+ - 0, если x ≤ 0,
153
+ - 1, если x > 0.
154
+
155
+ Примечания:
156
+ - Функция используется в модели зодиакального света для определения областей
157
+ применения различных слагаемых в уравнении (1) из статьи Buffington et al. (2016).
158
+ - Например:
159
+ - u(90 - ε) ≠ 0 только в солнечном полушарии,
160
+ - u(ε - 90) ≠ 0 только в антисолнечном полушарии.
161
+
162
+ Пример:
163
+ >>> u(-5)
164
+ 0
165
+ >>> u(0)
166
+ 0
167
+ >>> u(5)
168
+ 1
169
+ """
37
170
  if x <= 0:
38
171
  return 0
39
172
  elif x > 0:
40
173
  return 1
41
174
 
42
- #функции для перехода из одной СК в другую
43
- #сферические в декартовы
44
175
  def spheral_to_decart(r, lmbd, beta):
176
+ """
177
+ Преобразует сферические координаты в декартовы.
178
+
179
+ Функция принимает сферические координаты точки (радиус, долгота, широта)
180
+ и преобразует их в декартовы координаты (x, y, z). Углы задаются в градусах. Обозначения и порядок следования углов выбраны для
181
+ удобства использования функции в дальнейшем коде.
182
+
183
+ Параметры:
184
+ r (float): Радиус (расстояние от начала координат до точки).
185
+ lmbd (float): Долгота (угол в градусах, измеренный от оси X в плоскости XY). Лежит в диапазоне от 0° до 360°.
186
+ beta (float): Широта (угол в градусах, измеренный от плоскости XY). Лежит в диапазоне от -90° до 90°.
187
+
188
+ Возвращает:
189
+ tuple: Кортеж из трех значений (x, y, z), представляющих декартовы координаты точки:
190
+ - x (float): Координата по оси X.
191
+ - y (float): Координата по оси Y.
192
+ - z (float): Координата по оси Z.
193
+
194
+ Пример:
195
+ >>> r = 1.0
196
+ >>> lmbd = 45.0 # 45 градусов
197
+ >>> beta = 30.0 # 30 градусов
198
+ >>> spheral_to_decart(r, lmbd, beta)
199
+ (0.6123724356957945, 0.6123724356957945, 0.5)
200
+
201
+ Примечания:
202
+ - Углы `lmbd` (долгота) и `beta` (широта) должны быть заданы в градусах.
203
+ - Если вы используете углы в радианах, преобразуйте их в градусы с помощью формулы: degrees = radians * 180 / pi.
204
+ """
45
205
  x = r * cos(lmbd) * cos(beta)
46
206
  y = r * sin(lmbd) * cos(beta)
47
207
  z = r * sin(beta)
48
208
  return (x, y, z)
49
209
 
50
- #декартовы в сферические
210
+
51
211
  def decart_to_spheral(x, y, z):
212
+ """
213
+ Преобразует декартовы координаты в сферические.
214
+
215
+ Функция принимает декартовы координаты точки (x, y, z)
216
+ и преобразует их в сферические координаты (радиус, долгота, широта).
217
+ Углы возвращаются в градусах. Обозначения и порядок следования углов выбраны для удобства использования функции в дальнейшем коде.
218
+
219
+ Параметры:
220
+ x (float): Координата по оси X.
221
+ y (float): Координата по оси Y.
222
+ z (float): Координата по оси Z.
223
+
224
+ Возвращает:
225
+ tuple: Кортеж из трех значений (r, lmbd, beta), представляющих сферические координаты точки:
226
+ - r (float): Радиус (расстояние от начала координат до точки).
227
+ - lmbd (float): Долгота (угол в градусах, измеренный от оси X в плоскости XY). Лежит в диапазоне от 0° до 360°.
228
+ - beta (float): Широта (угол в градусах, измеренный от плоскости XY). Лежит в диапазоне от -90° до 90°.
229
+
230
+ Пример:
231
+ >>> x = 0.6123724356957945
232
+ >>> y = 0.6123724356957945
233
+ >>> z = 0.5
234
+ >>> decart_to_spheral(x, y, z)
235
+ (1.0, 45.0, 30.0)
236
+
237
+ Примечания:
238
+ - Углы `lmbd` (долгота) и `beta` (широта) возвращаются в градусах.
239
+ - Для преобразования углов обратно в радианы используйте формулу: radians = degrees * pi / 180.
240
+ - Если `x` близко к нулю, используется малая добавка (1e-30) для избежания деления на ноль.
241
+ """
52
242
  r = sqrt(x**2 + y**2 + z**2)
53
243
  lmbd = atan(y/(x + 1e-30))
54
244
  beta = asin(z/r)
55
245
  return(r, lmbd, beta)
56
246
 
57
- #функция для поворота эклиптических координат
58
- def rotate_ekl(lmbd, beta, lmbd0, beta0):
59
- x, y, z = spheral_to_decart(1, lmbd-lmbd0, beta)
247
+
248
+ def rotate_ecl(lmbd, beta, lmbd0, beta0):
249
+ """
250
+ Поворачивает эклиптические координаты на заданные углы.
251
+
252
+ Функция принимает начальные эклиптические координаты (долгота и широта)
253
+ и выполняет их поворот на указанные углы (lmbd0 и beta0).
254
+ Все углы задаются и возвращаются в градусах.
255
+
256
+ Параметры:
257
+ lmbd (float): Начальная эклиптическая долгота (в градусах).
258
+ beta (float): Начальная эклиптическая широта (в градусах).
259
+ lmbd0 (float): Угол поворота по долготе (в градусах).
260
+ beta0 (float): Угол поворота по широте (в градусах).
261
+
262
+ Возвращает:
263
+ tuple: Кортеж из двух значений (lmbd2, beta2), представляющих новые эклиптические координаты:
264
+ - lmbd2 (float): Новая эклиптическая долгота (в градусах).
265
+ - beta2 (float): Новая эклиптическая широта (в градусах).
266
+
267
+ Пример:
268
+ >>> lmbd = 45.0 # Начальная долгота
269
+ >>> beta = 10.0 # Начальная широта
270
+ >>> lmbd0 = 30.0 # Угол поворота по долготе
271
+ >>> beta0 = 5.0 # Угол поворота по широте
272
+ >>> rotate_ecl(lmbd, beta, lmbd0, beta0)
273
+ (75.0, 15.0)
274
+
275
+ Примечания:
276
+ - Все углы задаются и возвращаются в градусах.
277
+ - Для преобразования углов обратно в радианы используйте формулу: radians = degrees * pi / 180.
278
+ - Функция использует промежуточное преобразование в декартовы координаты для выполнения поворота.
279
+ """
280
+ x, y, z = spheral_to_decart(1, lmbd+lmbd0, beta) #ВОТ ТУТ БЫЛО ИЗНАЧАЛЬНО lmbd-lmbd0
60
281
  x1 = x * cos(beta0) + z * sin(beta0)
61
282
  z1 = - x * sin(beta0) + z * cos(beta0)
62
283
  y1 = y
@@ -66,6 +287,26 @@ def rotate_ekl(lmbd, beta, lmbd0, beta0):
66
287
  #Далее идут функции, которые входят в общую формулу для расчета зод. света
67
288
  #Компонента S
68
289
  def S(lmbd, beta, lmbd_sun, Omega):
290
+ """
291
+ Вычисляет компоненту S модели зодиакального света.
292
+
293
+ Компонента S представляет собой слагаемое, которое моделирует годовое изменение
294
+ яркости зодиакального света, вызванное наклоном плоскости симметрии пылевого облака
295
+ относительно эклиптики. Этот эффект перемещается между северным и южным полушариями в течение года.
296
+
297
+ Параметры:
298
+ lmbd (float): Эклиптическая долгота точки наблюдения (в градусах).
299
+ beta (float): Эклиптическая широта точки наблюдения (в градусах).
300
+ lmbd_sun (float): Эклиптическая долгота Солнца (в градусах).
301
+ Omega (float): Долгота восходящего узла плоскости симметрии пылевого облака
302
+ (в градусах). В модели используется значение Omega = 78.25°.
303
+
304
+ Возвращает:
305
+ float: Значение компоненты S, выраженное в единицах яркости (SMEI ADUs).
306
+
307
+ Примечания:
308
+ - Используется функция u(x)
309
+ """
69
310
  c = cos(lmbd - lmbd_sun) * cos(beta)
70
311
  eps = acos(c)
71
312
  first = 6 * abs(sin(lmbd_sun - Omega))
@@ -80,13 +321,30 @@ def S(lmbd, beta, lmbd_sun, Omega):
80
321
 
81
322
  #Компонента D -- "эмпирический вклад в форме гантели"
82
323
  def D(lmbd, beta, lmbd_sun):
83
-
324
+ """
325
+ Вычисляет компоненту D модели зодиакального света.
326
+
327
+ Компонента D представляет собой аналитическое слагаемое в форме "гантели", которое
328
+ улучшает соответствие модели данным в областях, близких к Солнцу, но удаленных от
329
+ эклиптики и полюсов. Это эмпирический вклад.
330
+
331
+ Параметры:
332
+ lmbd (float): Эклиптическая долгота точки наблюдения (в градусах).
333
+ beta (float): Эклиптическая широта точки наблюдения (в градусах).
334
+ lmbd_sun (float): Эклиптическая долгота Солнца (в градусах).
335
+
336
+ Возвращает:
337
+ float: Значение компоненты D, выраженное в единицах яркости (SMEI ADUs).
338
+
339
+ Примечания:
340
+ - Используется функция rotate_ecl для поворота координат относительно Солнца.
341
+ """
84
342
  d = abs(lmbd - lmbd_sun) / 6.5 - abs(beta) + 15 + 5 * u(beta)
85
343
  eps = acos(cos(lmbd - lmbd_sun) * cos(beta))
86
344
  if beta > 0:
87
- lmbd1, beta1 = rotate_ekl(lmbd, beta, lmbd_sun, 21)
345
+ lmbd1, beta1 = rotate_ecl(lmbd, beta, lmbd_sun, 21)
88
346
  elif beta <= 0:
89
- lmbd1, beta1 = rotate_ekl(lmbd, beta, lmbd_sun, -15)
347
+ lmbd1, beta1 = rotate_ecl(lmbd, beta, lmbd_sun, -15)
90
348
  gamma1 = atan(sin(lmbd1)/( 1e-30 + tan(beta1)))
91
349
  eps1 = acos(cos(lmbd1) * cos(beta1))
92
350
  h = gamma1 * (1 - u(beta)) + (gamma1) * u(beta)
@@ -99,14 +357,69 @@ def D(lmbd, beta, lmbd_sun):
99
357
 
100
358
  #Компонента E -- остаточная, не учитывалась
101
359
  def E(lmbd, beta):
360
+ """
361
+ Вычисляет компоненту E модели зодиакального света.
362
+
363
+ Компонента E представляет собой остаточный член, который не учитывается в данной
364
+ реализации модели. Она могла бы быть использована для покрытия дополнительных
365
+ эмпирических остатков, если бы они были значимыми.
366
+
367
+ Параметры:
368
+ lmbd (float): Эклиптическая долгота точки наблюдения (в градусах).
369
+ beta (float): Эклиптическая широта точки наблюдения (в градусах).
370
+
371
+ Возвращает:
372
+ float: Значение компоненты E, всегда равное 0.
373
+
374
+ Примечания:
375
+ - Компонента E не используется в текущей реализации модели.
376
+ """
102
377
  return 0
103
378
 
104
379
  #Компонента F -- остаточная, не учитывалась
105
380
  def F(lmbd, beta, lmbd_sun):
381
+ """
382
+ Вычисляет компоненту F модели зодиакального света.
383
+
384
+ Компонента F представляет собой остаточный член, который также не учитывается в данной
385
+ реализации модели. Она могла бы быть использована для покрытия недостатков модели,
386
+ связанных с инструментальными артефактами.
387
+
388
+ Параметры:
389
+ lmbd (float): Эклиптическая долгота точки наблюдения (в градусах).
390
+ beta (float): Эклиптическая широта точки наблюдения (в градусах).
391
+ lmbd_sun (float): Эклиптическая долгота Солнца (в градусах).
392
+
393
+ Возвращает:
394
+ float: Значение компоненты F, всегда равное 0.
395
+
396
+ Примечания:
397
+ - Компонента F не используется в текущей реализации модели.
398
+ """
106
399
  return 0
107
400
 
108
401
  #Компонента G -- антисолнечная точка
109
402
  def G(lmbd, beta, lmbd_sun):
403
+ """
404
+ Вычисляет компоненту G модели зодиакального света.
405
+
406
+ Компонента G моделирует усиление яркости в антисолнечной точке (Gegenschein).
407
+ Она учитывает угловое расстояние до антисолнечной точки и его влияние на яркость.
408
+
409
+ Параметры:
410
+ lmbd (float): Эклиптическая долгота точки наблюдения (в градусах).
411
+ beta (float): Эклиптическая широта точки наблюдения (в градусах).
412
+ lmbd_sun (float): Эклиптическая долгота Солнца (в градусах).
413
+
414
+ Возвращает:
415
+ float: Значение компоненты G, выраженное в единицах яркости (SMEI ADUs).
416
+
417
+ Примечания:
418
+ - Антисолнечная точка определяется как точка, противоположная Солнцу
419
+ (lmbd_tild = lmbd - lmbd_sun - 180°).
420
+ - Компонента G убывает для угловых расстояний ε_tild ≥ 60°, чтобы свести
421
+ вклад усиления к нулю в солнечном полушарии.
422
+ """
110
423
  lmbd_tild = lmbd - lmbd_sun - 180
111
424
  if lmbd_tild > 180:
112
425
  lmbd_tild = lmbd_tild - 360
@@ -123,6 +436,31 @@ def G(lmbd, beta, lmbd_sun):
123
436
 
124
437
  #Общая формула для зод. света
125
438
  def zodiacal_light(lmbd, beta, lmbd_sun):
439
+ """
440
+ Вычисляет яркость зодиакального света в заданной точке небесной сферы.
441
+
442
+ Функция реализует эмпирическую модель зодиакального света, основанную на данных
443
+ Solar Mass Ejection Imager (SMEI).
444
+
445
+ Параметры:
446
+ lmbd (float): Эклиптическая долгота точки наблюдения (в градусах).
447
+ beta (float): Эклиптическая широта точки наблюдения (в градусах).
448
+ lmbd_sun (float): Эклиптическая долгота Солнца (в градусах).
449
+
450
+ Возвращает:
451
+ float: Значение яркости зодиакального света в единицах S10.
452
+
453
+ Примечания:
454
+ - Все углы задаются в градусах.
455
+ - Используется функция u(x)
456
+ - Результат делится на 0.415 для перевода из единиц ADU (SMEI) в единицы S10.
457
+ - Omega = 78.25° — долгота восходящего узла плоскости симметрии пылевого облака.
458
+
459
+ Ссылки:
460
+ - Buffington, A., Bisi, M.M., Clover, J.M., et al., 2016. Measurements and an empirical
461
+ model of the Zodiacal brightness as observed by the Solar Mass Ejection Imager (SMEI).
462
+ Icarus 272, 88–101. doi: 10.1016/j.icarus.2016.02.037
463
+ """
126
464
  b = 1.5 * (sqrt(1 + (beta / 1.5)**2) - 1)
127
465
  c = cos(lmbd - lmbd_sun) * cos(beta)
128
466
  eps = acos(c)
@@ -145,9 +483,42 @@ def zodiacal_light(lmbd, beta, lmbd_sun):
145
483
  from .solar_spectrum import wavelenght_newguey2003, flux_newguey2003
146
484
  from .band_V_data import wavelenght_band_V, trancparency_band_V
147
485
 
148
- #Функция для спектра АЧТ, по которому расчитаем спектр от звезды класса A0
149
- #на вход -- массив длин волн и температура. На выходе -- массив значений в Вт/(м^2 м)
486
+
150
487
  def black_body(lmbd, T):
488
+ """
489
+ Рассчитывает спектр излучения абсолютно черного тела (АЧТ) по закону Планка.
490
+
491
+ Функция принимает массив длин волн (в нанометрах) и температуру (в кельвинах),
492
+ и возвращает спектральную плотность излучения абсолютно черного тела.
493
+ Расчет выполняется по формуле Планка.
494
+
495
+ Параметры:
496
+ lmbd (ndarray): Массив длин волн в нанометрах (нм).
497
+ T (float): Температура абсолютно черного тела в кельвинах (K).
498
+
499
+ Возвращает:
500
+ ndarray: Массив значений спектральной плотности излучения в Вт/(м^2 * м).
501
+ Размерность выходного массива совпадает с размерностью входного массива длин волн.
502
+
503
+ Пример:
504
+ >>> wavelengths = np.array([400, 500, 600]) # Длины волн в нанометрах
505
+ >>> temperature = 10000 # Температура в кельвинах
506
+ >>> black_body(wavelengths, temperature)
507
+ array([1.83e+13, 7.95e+13, 1.29e+14])
508
+
509
+ Примечания:
510
+ - Длина волны задается в нанометрах (нм), но внутри функции преобразуется в метры.
511
+ - Температура задается в кельвинах (K).
512
+ - Формула Планка:
513
+ u(λ, T) = (2 * h * c^2) / λ^5 / (exp((h * c) / (λ * k * T)) - 1),
514
+ где:
515
+ - h = 6.63e-34 Дж·с — постоянная Планка,
516
+ - c = 3e8 м/с — скорость света,
517
+ - k = 1.38e-23 Дж/К — постоянная Больцмана,
518
+ - λ — длина волны в метрах,
519
+ - T — температура в кельвинах.
520
+ - Выходной массив имеет размерность Вт/(м^2 * м), что соответствует спектральной плотности излучения.
521
+ """
151
522
  h = 6.63e-34 #Дж * сек
152
523
  c = 3e8 # м / сек
153
524
  k = 1.38e-23 # Дж / К
@@ -155,8 +526,42 @@ def black_body(lmbd, T):
155
526
  u = 2 * h * c**2 / (lmbd**5) / (np.exp(h * c / (lmbd) / k / T) - 1)
156
527
  return u
157
528
 
158
- #спектр АЧТ в фотонах
529
+
159
530
  def black_body_phot(lmbd, T):
531
+ """
532
+ Рассчитывает спектр излучения абсолютно черного тела (АЧТ) в фотонах.
533
+
534
+ Функция принимает массив длин волн (в нанометрах) и температуру (в кельвинах),
535
+ и возвращает спектральную плотность числа фотонов, излучаемых абсолютно черным телом.
536
+ Расчет выполняется по модифицированной формуле Планка, учитывающей энергию фотонов.
537
+
538
+ Параметры:
539
+ lmbd (ndarray): Массив длин волн в нанометрах (нм).
540
+ T (float): Температура абсолютно черного тела в кельвинах (K).
541
+
542
+ Возвращает:
543
+ ndarray: Массив значений спектральной плотности числа фотонов в фот/(м^2 * м * сек).
544
+ Размерность выходного массива совпадает с размерностью входного массива длин волн.
545
+
546
+ Пример:
547
+ >>> wavelengths = np.array([400, 500, 600]) # Длины волн в нанометрах
548
+ >>> temperature = 10000 # Температура в кельвинах
549
+ >>> black_body_phot(wavelengths, temperature)
550
+ array([5.53e+22, 2.41e+23, 3.89e+23])
551
+
552
+ Примечания:
553
+ - Длина волны задается в нанометрах (нм), но внутри функции преобразуется в метры.
554
+ - Температура задается в кельвинах (K).
555
+ - Формула расчета:
556
+ u(λ, T) = (2 * c) / λ^4 / (exp((h * c) / (λ * k * T)) - 1),
557
+ где:
558
+ - h = 6.63e-34 Дж·с — постоянная Планка,
559
+ - c = 3e8 м/с — скорость света,
560
+ - k = 1.38e-23 Дж/К — постоянная Больцмана,
561
+ - λ — длина волны в метрах,
562
+ - T — температура в кельвинах.
563
+ - Выходной массив имеет размерность фот/(м^2 * м * сек), что соответствует спектральной плотности числа фотонов.
564
+ """
160
565
  h = 6.63e-34 #Дж * сек
161
566
  c = 3e8 # м / сек
162
567
  k = 1.38e-23 # Дж / К
@@ -164,8 +569,35 @@ def black_body_phot(lmbd, T):
164
569
  u = 2 * c / (lmbd**4) / (np.exp(h * c / (lmbd) / k / T) - 1)
165
570
  return u #уже в фотонах/сек (поделено на hc/lambda)
166
571
 
167
- #универсальная функция для свертки двух спектров
572
+
168
573
  def convolution(array_1, meaning_1, array_2, meaning_2):
574
+ """
575
+ Универсальная функция для свертки двух спектров.
576
+
577
+ Эта функция принимает два набора данных: массивы длин волн и соответствующие им спектры для двух объектов,
578
+ и выполняет операцию свертки на основе совпадающих длин волн.
579
+
580
+ Параметры:
581
+ array_1 (ndarray): Массив длин волн первого объекта.
582
+ meaning_1 (ndarray): Спектр (значения) первого объекта, соответствующий array_1.
583
+ array_2 (ndarray): Массив длин волн второго объекта.
584
+ meaning_2 (ndarray): Спектр (значения) второго объекта, соответствующий array_2.
585
+
586
+ Возвращает:
587
+ tuple: Кортеж из двух NumPy массивов:
588
+ - array (ndarray): массив, содержащий совпадающие длины волн из array_1 и array_2.
589
+ - meaning (ndarray): массив, содержащий произведения значений спектров (meaning_1 * meaning_2)
590
+ для соответствующих длин волн.
591
+
592
+ Пример:
593
+ >>> array_1 = np.array([400, 500, 600])
594
+ >>> meaning_1 = np.array([1.0, 2.0, 3.0])
595
+ >>> array_2 = np.array([500, 600, 700])
596
+ >>> meaning_2 = np.array([4.0, 5.0, 6.0])
597
+ >>> result = convolution(array_1, meaning_1, array_2, meaning_2)
598
+ >>> print(result)
599
+ (array([500, 600]), array([8.0, 15.0]))
600
+ """
169
601
  array = []
170
602
  meaning = []
171
603
  for i in range(array_1.shape[0]):
@@ -175,7 +607,45 @@ def convolution(array_1, meaning_1, array_2, meaning_2):
175
607
  meaning.append(meaning_1[i] * meaning_2[j])
176
608
  return np.array(array), np.array(meaning)
177
609
 
610
+
178
611
  def integral(wl, spec):
612
+ """
613
+ Вычисляет интеграл по спектру методом трапеций.
614
+
615
+ Функция принимает массив длин волн (в нанометрах) и соответствующий массив значений спектра,
616
+ и вычисляет интеграл методом трапеций. Это позволяет получить общую интенсивность излучения
617
+ или количество фотонов, учитывая заданный спектр.
618
+
619
+ Параметры:
620
+ wl (ndarray): Массив длин волн в нанометрах (нм). Должен быть отсортирован по возрастанию.
621
+ spec (ndarray): Массив значений спектра в фот/(м^2 * нм * сек).
622
+ Размерность массива должна совпадать с размерностью массива длин волн.
623
+
624
+ Возвращает:
625
+ float: Значение интеграла, представляющее площадь под кривой спектра.
626
+ Размерность результата зависит от входных данных:
627
+ - Если спектр задан в фот/(м^2 * нм * сек), результат будет в фот/(м^2 * сек).
628
+
629
+ Пример:
630
+ >>> wavelengths = np.array([400, 500, 600]) # Длины волн в нанометрах
631
+ >>> spectrum = np.array([1e13, 2e13, 1.5e13]) # Спектр в фот/(м^2 * нм * сек)
632
+ >>> integral(wavelengths, spectrum)
633
+ 1.75e16
634
+
635
+ Примечания:
636
+ - Метод трапеций используется для численного интегрирования. Он аппроксимирует площадь под кривой
637
+ как сумму трапеций, образованных соседними точками.
638
+ - Формула для одной трапеции:
639
+ area = (spec[i] + spec[i+1]) / 2 * (wl[i+1] - wl[i]),
640
+ где:
641
+ - spec[i] и spec[i+1] — значения спектра в соседних точках,
642
+ - wl[i] и wl[i+1] — длины волн в соседних точках.
643
+ - Массивы `wl` и `spec` должны иметь одинаковую размерность.
644
+ - Результат интегрирования имеет размерность, равную произведению размерностей входных данных:
645
+ - [wl] = нм,
646
+ - [spec] = фот/(м^2 * нм * сек),
647
+ - [результат] = фот/(м^2 * сек).
648
+ """
179
649
  shape = wl.shape[0]
180
650
  result = 0
181
651
  for i in range(shape - 1):
@@ -183,11 +653,50 @@ def integral(wl, spec):
183
653
  return result
184
654
 
185
655
  def zodiacal_spectrum(lmbd, beta, lmbd_sun, Sun_sp_wl = wavelenght_newguey2003, Sun_sp_fx = flux_newguey2003, V_wl = wavelenght_band_V, V_tr = trancparency_band_V):
656
+ """
657
+ Вычисляет спектр зодиакального света для заданных эклиптических координат.
658
+
659
+ Функция принимает эклиптические координаты точки наблюдения, эклиптическую долготу Солнца,
660
+ а также спектр Солнца и полосу пропускания V (по умолчанию используются стандартные данные).
661
+ На основе этих данных функция вычисляет нормировочную константу для солнечного спектра,
662
+ чтобы его можно было использовать как спектр зодиакального света. Расчет основан на единицах
663
+ S10, их связи со звездой 10-й звездной величины и коэффициенте пересчета от звезды 10-й величины в полосе V
664
+ к Солнцу в полосе V.
665
+
666
+ Параметры:
667
+ lmbd (float): Эклиптическая долгота точки наблюдения (в градусах).
668
+ beta (float): Эклиптическая широта точки наблюдения (в градусах).
669
+ lmbd_sun (float): Эклиптическая долгота Солнца (в градусах).
670
+ Sun_sp_wl (ndarray, optional): Массив длин волн солнечного спектра (в нм).
671
+ По умолчанию используется `wavelenght_newguey2003`.
672
+ Sun_sp_fx (ndarray, optional): Массив значений солнечного спектра (в фот / (м^2 сек нм)).
673
+ По умолчанию используется `flux_newguey2003`.
674
+ V_wl (ndarray, optional): Массив длин волн полосы пропускания V (в нм).
675
+ По умолчанию используется `wavelenght_band_V`.
676
+ V_tr (ndarray, optional): Массив значений прозрачности полосы пропускания V.
677
+ По умолчанию используется `trancparency_band_V`.
678
+
679
+ Возвращает:
680
+ tuple: Кортеж из двух массивов:
681
+ - Sun_sp_wl (ndarray): Массив длин волн зодиакального спектра (в нм),
682
+ - Sun_sp_fx (ndarray): Массив значений спектра зодиакального света (в фот / (м^2 сек нм)).
683
+
684
+ Примечания:
685
+ - Единица яркости S10 соответствует 100 фотонам/(см^2 сек) от звезды класса A0.
686
+ - Коэффициент пересчета N_S10 из единиц S10 в количество фотонов от Солнца:
687
+ - 1 ед. S10 = 100.6 фотонов/(см^2 сек),
688
+ - Нормировка солнечного спектра производится путем свертки с полосой пропускания V
689
+ и последующего интегрирования.
690
+ - Используется функция `zodiacal_light` для расчета яркости зодиакального света в единицах S10.
691
+
692
+ Ссылки:
693
+ - Buffington, A., Bisi, M.M., Clover, J.M., et al., 2016. Measurements and an empirical model of the Zodiacal brightness as observed by the Solar Mass Ejection Imager (SMEI). Icarus 272, 88–101. doi: 10.1016/j.icarus.2016.02.037
694
+ """
186
695
  #коэффициент пересчета из единиц S10 в количество фотонов от Солнца
187
696
  #вычислен на основе спектра АЧТ от звезды класса A0, солнечного спектра и факта, что 1 ед. S10 соответствует 100 фотонов от звезды класса A0
188
697
  #вот столько фотонов/(см^2 сек) от Солнца несет 1 ед S10:
189
698
  N_S10 = 100.6
190
- N_S10 = N_S10 * 10**4 / (4 * np.pi) # фот / (м^2 сек ср) -- НАДО ЛИ ДЕЛИТЬ НА 4 ПИ?
699
+ N_S10 = N_S10 * 10**4 #/ (4 * np.pi) # фот / (м^2 сек ср) -- НАДО ЛИ ДЕЛИТЬ НА 4 ПИ?
191
700
  S10 = zodiacal_light(lmbd, beta, lmbd_sun)
192
701
  Sun_V_wl, Sun_V_sp = convolution(Sun_sp_wl, Sun_sp_fx, V_wl, V_tr) #свертка Солнечного спектра с полосой V
193
702
  integr = integral(Sun_V_wl, Sun_V_sp)
@@ -200,7 +709,8 @@ def zodiacal_spectrum(lmbd, beta, lmbd_sun, Sun_sp_wl = wavelenght_newguey2003,
200
709
  print('Техническая проверка: S10*N_S10 =', S10 * N_S10)
201
710
  print('А при нормировке и интекрированию получается:', c)
202
711
  #############################################
712
+ Sun_sp_fx = Sun_sp_fx * A
203
713
 
204
- return Sun_sp_wl, A * Sun_sp_fx #нм, фот / (м^2 сек нм ср)
714
+ return Sun_sp_wl, Sun_sp_fx #нм, фот / (м^2 сек нм ср)
205
715
 
206
716
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SkyMapMod
3
- Version: 0.1.33
3
+ Version: 0.1.35
4
4
  Summary: for modeling
5
5
  Project-URL: Homepage, https://istina.msu.ru/profile/aminevann/
6
6
  Author-email: Anna Amineva <amineva.2219@physics.msu.ru>
@@ -1,21 +1,21 @@
1
1
  SkyMapMod/__init__.py,sha256=wCfBqXAT9oawNOwo_FhQwXjeK7SEZSiU-ggVPVUArwg,359
2
- SkyMapMod/airglow.py,sha256=K82Zf5DY0EwqKLQdfFSwRN5OrzV-PYnXgITLHj9dQVU,2346
2
+ SkyMapMod/airglow.py,sha256=tE2Te7WsGbpJtHQLCdzs3-6MoayVIbAqhXb8244BFbo,4473
3
3
  SkyMapMod/airglow_spectrum.py,sha256=4pY4QSGjIDvjs_jvxrowsZ9WLtIUwR0DesoCK6moWjs,127314
4
4
  SkyMapMod/albedo_of_planets.py,sha256=4vlya40XmSfQGsuK_bVFSQSA-uJzYKNNA5UoU4oOZg4,88424
5
5
  SkyMapMod/band_V_data.py,sha256=fOj9H2IdZuqErAxnoLq4A02UXfYMgLNBiLjwrzjfWTs,15223
6
6
  SkyMapMod/modtran_default_kp_transparency.py,sha256=QeLYQA9FNUsKp-eRtOMQFxfq0pdwCnqVIl0X6Vvf7GU,78306
7
- SkyMapMod/planets.py,sha256=7BR1NYaWlqWQSrWmbeF6oabQSaZlFPzxxm9cG_jIUxE,6703
7
+ SkyMapMod/planets.py,sha256=NKNehWtUPDJZGaZbE36il8ng659AKzHhoJHAVIa6wBw,27707
8
8
  SkyMapMod/solar_radio_flux.py,sha256=I02O6Mltv3lfqxif3BHUNAzeElQ5AZax_2L09A3cXb8,842
9
9
  SkyMapMod/solar_spectrum.py,sha256=LjBPSTI6Yq86pwF7haUja7RjRYH4C8HZL8SjyI7zp6g,24433
10
- SkyMapMod/star_catalogues.py,sha256=SFbsODxilzsT_XZVhx3Aje1rRFLQpPYMfYrvXydFetA,1351
11
- SkyMapMod/total_background.py,sha256=0nkbvNMWf6uDiGRkUmy-JFdWDe2EWNy_KRDFORpaU1M,8246
10
+ SkyMapMod/star_catalogues.py,sha256=-JGHE3m6NCg4Ea57ZR6RuxfftkPJyjJHOaU5Wf7qvRc,4102
11
+ SkyMapMod/total_background.py,sha256=QeN3NFpqCirB1Cjbp3xZweOeLn45A1ALxMT94MpiOsk,15068
12
12
  SkyMapMod/transparency.py,sha256=HiSbbVX80neh3n284f64sWnrbxpRzPGKvFyid9sVo7I,376
13
- SkyMapMod/zodiac.py,sha256=08kNMa7ivJAvVpVMOUYz4sl07erOMf9O3jeh9vVBFwU,9095
13
+ SkyMapMod/zodiac.py,sha256=mT08Cjh2qcL3FVEM0B4G52OeuzWPB9w9mpp89sWRVJo,40729
14
14
  SkyMapMod/data/__init__.py,sha256=_292qgM72hPa2vxDNSaI9QvPunvi-aSXUsZki99q63o,83
15
15
  SkyMapMod/data/load_data.py,sha256=p-Nq5St713HTTDunSWu9ANrF9V0Slaak17IhD0n_bSY,931
16
16
  SkyMapMod/data/star_brightness.npy,sha256=aTsrvGU-vl9pqcOLMz3kqsSA15piynS1aP19aqjT6fQ,51840128
17
17
  SkyMapMod/data/star_temperatures.npy,sha256=Yjp252bzqmKQz00K0ADTkstjzGFulRMgyW1b8kaDOPE,51840128
18
- skymapmod-0.1.33.dist-info/METADATA,sha256=SMq1rDxkxehLP6QHUkrbKsPBS4ImmhDa2YEhI3JgvPY,469
19
- skymapmod-0.1.33.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
20
- skymapmod-0.1.33.dist-info/licenses/LICENSE,sha256=eShhW1a77wkzEW9UASG0IaNNaJ3vnxmpcxp8tXh5WCA,1045
21
- skymapmod-0.1.33.dist-info/RECORD,,
18
+ skymapmod-0.1.35.dist-info/METADATA,sha256=pajZ04HKEiKeWjIqg0aAyX5ey4Rcc-PyJeFEefPqRHA,469
19
+ skymapmod-0.1.35.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
20
+ skymapmod-0.1.35.dist-info/licenses/LICENSE,sha256=eShhW1a77wkzEW9UASG0IaNNaJ3vnxmpcxp8tXh5WCA,1045
21
+ skymapmod-0.1.35.dist-info/RECORD,,