SkyMapMod 0.0.1__tar.gz → 0.0.3__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.0.1 → skymapmod-0.0.3}/PKG-INFO +1 -1
- {skymapmod-0.0.1 → skymapmod-0.0.3}/pyproject.toml +1 -1
- skymapmod-0.0.3/src/SkyMapMod/__init__.py +1 -0
- skymapmod-0.0.3/src/SkyMapMod/zodiac.py +139 -0
- skymapmod-0.0.1/src/SkyMapMod/__init__.py +0 -0
- skymapmod-0.0.1/src/SkyMapMod/zodiac.py +0 -0
- {skymapmod-0.0.1 → skymapmod-0.0.3}/LICENSE +0 -0
- {skymapmod-0.0.1 → skymapmod-0.0.3}/README.md +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .zodiac import *
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import math
|
|
3
|
+
import matplotlib.pyplot as plt
|
|
4
|
+
|
|
5
|
+
def gret():
|
|
6
|
+
print('Hello')
|
|
7
|
+
|
|
8
|
+
#переопределяю тригонометрические функции, чтобы работать с градусами
|
|
9
|
+
def cos(x):
|
|
10
|
+
return math.cos(x * math.pi / 180)
|
|
11
|
+
|
|
12
|
+
def sin(x):
|
|
13
|
+
return math.sin(x * math.pi / 180)
|
|
14
|
+
|
|
15
|
+
def tan(x):
|
|
16
|
+
return math.tan(x * math.pi / 180)
|
|
17
|
+
|
|
18
|
+
def acos(x):
|
|
19
|
+
return math.acos(x) * 180 / math.pi
|
|
20
|
+
|
|
21
|
+
def asin(x):
|
|
22
|
+
return math.asin(x) * 180 / math.pi
|
|
23
|
+
|
|
24
|
+
def atan(x):
|
|
25
|
+
return math.atan(x) * 180 / math.pi
|
|
26
|
+
|
|
27
|
+
#переопределяю прочие функции для красоты записи
|
|
28
|
+
def exp(x):
|
|
29
|
+
return math.exp(x)
|
|
30
|
+
|
|
31
|
+
def sqrt(x):
|
|
32
|
+
return math.sqrt(x)
|
|
33
|
+
|
|
34
|
+
#функция Хевисайда (в контексте статьи определяется именно так)
|
|
35
|
+
def u(x):
|
|
36
|
+
if x <= 0:
|
|
37
|
+
return 0
|
|
38
|
+
elif x > 0:
|
|
39
|
+
return 1
|
|
40
|
+
|
|
41
|
+
#функции для перехода из одной СК в другую
|
|
42
|
+
#сферические в декартовы
|
|
43
|
+
def spheral_to_decart(r, lmbd, beta):
|
|
44
|
+
x = r * cos(lmbd) * cos(beta)
|
|
45
|
+
y = r * sin(lmbd) * cos(beta)
|
|
46
|
+
z = r * sin(beta)
|
|
47
|
+
return (x, y, z)
|
|
48
|
+
|
|
49
|
+
#декартовы в сферические
|
|
50
|
+
def decart_to_spheral(x, y, z):
|
|
51
|
+
r = sqrt(x**2 + y**2 + z**2)
|
|
52
|
+
lmbd = atan(y/(x + 1e-30))
|
|
53
|
+
beta = asin(z/r)
|
|
54
|
+
return(r, lmbd, beta)
|
|
55
|
+
|
|
56
|
+
#функция для поворота эклиптических координат
|
|
57
|
+
def rotate_ekl(lmbd, beta, lmbd0, beta0):
|
|
58
|
+
x, y, z = spheral_to_decart(1, lmbd-lmbd0, beta)
|
|
59
|
+
x1 = x * cos(beta0) + z * sin(beta0)
|
|
60
|
+
z1 = - x * sin(beta0) + z * cos(beta0)
|
|
61
|
+
y1 = y
|
|
62
|
+
r, lmbd2, beta2 = decart_to_spheral(x1, y1, z1)
|
|
63
|
+
return(lmbd2, beta2)
|
|
64
|
+
|
|
65
|
+
#Далее идут функции, которые входят в общую формулу для расчета зод. света
|
|
66
|
+
#Компонента S
|
|
67
|
+
def S(lmbd, beta, lmbd_sun, Omega):
|
|
68
|
+
c = cos(lmbd - lmbd_sun) * cos(beta)
|
|
69
|
+
eps = acos(c)
|
|
70
|
+
first = 6 * abs(sin(lmbd_sun - Omega))
|
|
71
|
+
second = ((1-u(eps-90)) * (sin(eps) + 1e-30)**(-2.3) + u(eps - 90) * sin(eps))
|
|
72
|
+
#third = (1 - u(Omega - lmbd_sun) / 4 + 2 * (1-u(eps-90)) * c)
|
|
73
|
+
third = (1 - (1-u(lmbd_sun - Omega))/4 + 2*(1-u(eps-90)) * c)
|
|
74
|
+
#equap = ((u(Omega - lmbd_sun) - u(lmbd_sun - Omega)) * beta + 5) / 10
|
|
75
|
+
equap = ((1 - u(lmbd_sun - Omega) - u(lmbd_sun - Omega)) * beta + 5) / 10
|
|
76
|
+
fourth = max(0, min(equap, 1))
|
|
77
|
+
S = first * second * third * fourth
|
|
78
|
+
return S
|
|
79
|
+
|
|
80
|
+
#Компонента D -- "эмпирический вклад в форме гантели"
|
|
81
|
+
def D(lmbd, beta, lmbd_sun):
|
|
82
|
+
|
|
83
|
+
d = abs(lmbd - lmbd_sun) / 6.5 - abs(beta) + 15 + 5 * u(beta)
|
|
84
|
+
eps = acos(cos(lmbd - lmbd_sun) * cos(beta))
|
|
85
|
+
if beta > 0:
|
|
86
|
+
lmbd1, beta1 = rotate_ekl(lmbd, beta, lmbd_sun, 21)
|
|
87
|
+
elif beta <= 0:
|
|
88
|
+
lmbd1, beta1 = rotate_ekl(lmbd, beta, lmbd_sun, -15)
|
|
89
|
+
gamma1 = atan(sin(lmbd1)/( 1e-30 + tan(beta1)))
|
|
90
|
+
eps1 = acos(cos(lmbd1) * cos(beta1))
|
|
91
|
+
h = gamma1 * (1 - u(beta)) + (gamma1) * u(beta)
|
|
92
|
+
A = (1 + 0.5 * (1 - u(beta))) * (1-u(eps-90)) * ((1-u(eps-75)) + u(eps - 75) * exp(-(eps - 75)**2 / 120))
|
|
93
|
+
# f = 60 * exp(- eps1 / 16) * (0.15 + 0.85 * exp(-6 * cos(0.6 * h)**4))
|
|
94
|
+
f = 60 * exp(- eps1 / 16) * (0.85 + 0.15 * exp(-6 * cos(0.6 * h)**4))
|
|
95
|
+
g = 25 * exp(- acos(cos(2 * lmbd1) * cos(0.7 * beta1)) / 10)
|
|
96
|
+
D = A * ((f * math.exp(-d / 10) + g * math.exp(-d / 8)) * u(d) + (f + g) * (1 - u(d)))
|
|
97
|
+
return D
|
|
98
|
+
|
|
99
|
+
#Компонента E -- остаточная, не учитывалась
|
|
100
|
+
def E(lmbd, beta):
|
|
101
|
+
return 0
|
|
102
|
+
|
|
103
|
+
#Компонента F -- остаточная, не учитывалась
|
|
104
|
+
def F(lmbd, beta, lmbd_sun):
|
|
105
|
+
return 0
|
|
106
|
+
|
|
107
|
+
#Компонента G -- антисолнечная точка
|
|
108
|
+
def G(lmbd, beta, lmbd_sun):
|
|
109
|
+
lmbd_tild = lmbd - lmbd_sun - 180
|
|
110
|
+
if lmbd_tild > 180:
|
|
111
|
+
lmbd_tild = lmbd_tild - 360
|
|
112
|
+
elif lmbd_tild < -180:
|
|
113
|
+
lmbd_tild = lmbd_tild + 360
|
|
114
|
+
eps_tild = 180 - acos(cos(lmbd_tild + 180) * cos(beta))
|
|
115
|
+
G_b = 7.5 * exp(-eps_tild / 4) + 39.5 * exp(-eps_tild / 25)
|
|
116
|
+
G_lmbd_tild = 7.5 * exp(-eps_tild / 4) + 39.5 * exp(-eps_tild / 35)
|
|
117
|
+
first = 1 - 0.02 * beta * lmbd_tild**2 / (eps_tild**3 + 1e-300)
|
|
118
|
+
second = (beta**2 * G_b + lmbd_tild**2 * G_lmbd_tild) / (eps_tild**2 + 1e-300)
|
|
119
|
+
third = (1 - u(eps_tild - 60) * (1 - exp(-(eps_tild - 60)**2 / 300)))
|
|
120
|
+
G = first * second * third
|
|
121
|
+
return G
|
|
122
|
+
|
|
123
|
+
#Общая формула для зод. света
|
|
124
|
+
def zodiacal_light(lmbd, beta, lmbd_sun):
|
|
125
|
+
b = 1.5 * (sqrt(1 + (beta / 1.5)**2) - 1)
|
|
126
|
+
c = cos(lmbd - lmbd_sun) * cos(beta)
|
|
127
|
+
eps = acos(c)
|
|
128
|
+
eps_tild = 180 - eps
|
|
129
|
+
lmbd_tild = lmbd - lmbd_sun - 180
|
|
130
|
+
abs_gm = abs(atan(sin(lmbd - lmbd_sun) / (tan(beta) + 1e-30)))
|
|
131
|
+
Omega = 78.25
|
|
132
|
+
first = 7 + 8 * (1 - cos(b)) + 6 * exp(- beta**2 / 512)
|
|
133
|
+
second_1 = (1-u(eps-90)) * (65 + 120 * c - 185 * c**2 + 65 * c**3) * (sin(eps) + 1e-30)**(-2.3)
|
|
134
|
+
second_2 = u(eps - 90) * (65 + 120 * c + 154 * c**2 + 88 * c**3)
|
|
135
|
+
second_mult = 10 ** (- sin(b) / (0.009 * (eps + 40)))
|
|
136
|
+
third = (1-u(eps-90)) * (30 * ((sin(eps) + 1e-30)**(-2.3) - 1) * cos(b))
|
|
137
|
+
fourth = (8800 * exp((1 - sqrt(1 + ((abs_gm - 90)/3)**2))/10) - 1200) * exp(-eps/10)
|
|
138
|
+
zod = first + (second_1 + second_2) * second_mult + third + fourth + S(lmbd, beta, lmbd_sun, Omega) + D(lmbd, beta, lmbd_sun) + E(lmbd, beta) + F(lmbd, beta, lmbd_sun) + G(lmbd, beta, lmbd_sun)
|
|
139
|
+
return zod/0.415 #деление на 0.415 осуществляет переход из ед. ADU в ед. S10
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|