Skip to content
GitLab
Explore
Projects
Groups
Snippets
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
csst-sims
csst_msc_sim
Commits
019ee948
Commit
019ee948
authored
1 year ago
by
Zhang Xin
Browse files
Options
Download
Email Patches
Plain Diff
add Straylight unittest code
parent
f540664f
release_v3.0
current_stable_for_tests
develop
master
milky_way_extinction
revert-914004c1
sim_scheduler
sls_psf_pca_convolve
v3.3.0
v3.2.1
v3.2.0
v3.1.0
v3.0.0
1 merge request
!22
add field distortion test
Changes
2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
tests/Straylight_test.dat
+138
-0
tests/Straylight_test.dat
tests/TestStraylight.py
+190
-0
tests/TestStraylight.py
with
328 additions
and
0 deletions
+328
-0
tests/Straylight_test.dat
0 → 100644
+
138
-
0
View file @
019ee948
This diff is collapsed.
Click to expand it.
tests/TestStraylight.py
0 → 100644
+
190
-
0
View file @
019ee948
import
unittest
from
ObservationSim.Straylight
import
Straylight
import
numpy
as
np
import
math
import
astropy.constants
as
cons
import
galsim
from
astropy.table
import
Table
from
scipy
import
interpolate
import
matplotlib.pyplot
as
plt
hubbleAverZodiacal
=
{
'nuv'
:
0.0035
,
'u'
:
0.0163
,
'g'
:
0.1109
,
'r'
:
0.1471
,
'i'
:
0.1568
,
'z'
:
0.0953
,
'y'
:
0.0283
}
hubbleAverEarthShine
=
{
'nuv'
:
0.00024
,
'u'
:
0.0051
,
'g'
:
0.0506
,
'r'
:
0.0591
,
'i'
:
0.0568
,
'z'
:
0.0315
,
'y'
:
0.0090
}
def
transRaDec2D
(
ra
,
dec
):
x1
=
np
.
cos
(
dec
/
57.2957795
)
*
np
.
cos
(
ra
/
57.2957795
);
y1
=
np
.
cos
(
dec
/
57.2957795
)
*
np
.
sin
(
ra
/
57.2957795
);
z1
=
np
.
sin
(
dec
/
57.2957795
);
return
np
.
array
([
x1
,
y1
,
z1
])
def
getAngle132
(
x1
=
0
,
y1
=
0
,
z1
=
0
,
x2
=
0
,
y2
=
0
,
z2
=
0
,
x3
=
0
,
y3
=
0
,
z3
=
0
):
cosValue
=
0
;
angle
=
0
;
x11
=
x1
-
x3
;
y11
=
y1
-
y3
;
z11
=
z1
-
z3
;
x22
=
x2
-
x3
;
y22
=
y2
-
y3
;
z22
=
z2
-
z3
;
tt
=
np
.
sqrt
((
x11
*
x11
+
y11
*
y11
+
z11
*
z11
)
*
(
x22
*
x22
+
y22
*
y22
+
z22
*
z22
));
if
(
tt
==
0
):
return
0
;
cosValue
=
(
x11
*
x22
+
y11
*
y22
+
z11
*
z22
)
/
tt
;
if
(
cosValue
>
1
):
cosValue
=
1
;
if
(
cosValue
<
-
1
):
cosValue
=
-
1
;
angle
=
math
.
acos
(
cosValue
);
return
angle
*
360
/
(
2
*
math
.
pi
);
def
calculateAnglePwithEarth
(
sat
=
np
.
array
([
0
,
0
,
0
]),
pointing
=
np
.
array
([
0
,
0
,
0
]),
sun
=
np
.
array
([
0
,
0
,
0
])):
modSat
=
np
.
sqrt
(
sat
[
0
]
*
sat
[
0
]
+
sat
[
1
]
*
sat
[
1
]
+
sat
[
2
]
*
sat
[
2
])
modPoint
=
np
.
sqrt
(
pointing
[
0
]
*
pointing
[
0
]
+
pointing
[
1
]
*
pointing
[
1
]
+
pointing
[
2
]
*
pointing
[
2
])
withLocalZenithAngle
=
(
pointing
[
0
]
*
sat
[
0
]
+
pointing
[
1
]
*
sat
[
1
]
+
pointing
[
2
]
*
sat
[
2
])
/
(
modPoint
*
modSat
)
innerM_sat_sun
=
sat
[
0
]
*
sun
[
0
]
+
sat
[
1
]
*
sun
[
1
]
+
sat
[
2
]
*
sun
[
2
]
cosAngle
=
innerM_sat_sun
/
(
modSat
*
cons
.
au
.
value
/
1000
)
isInSunSide
=
1
if
(
cosAngle
<
-
0.3385737
):
#cos109.79
isInSunSide
=
-
1
;
elif
cosAngle
>=
-
0.3385737
and
cosAngle
<=
0.3385737
:
isInSunSide
=
0
;
return
math
.
acos
(
withLocalZenithAngle
)
*
180
/
math
.
pi
,
isInSunSide
class
TestStraylight
(
unittest
.
TestCase
):
def
__init__
(
self
,
methodName
=
'runTest'
,
datFn
=
''
,
filter
=
'i'
,
grating
=
"GI"
):
super
(
TestStraylight
,
self
).
__init__
(
methodName
)
self
.
pointingData
=
np
.
loadtxt
(
datFn
,
dtype
=
np
.
double
)
self
.
filter
=
filter
self
.
grating
=
grating
def
test_EarthShineFilter
(
self
):
d_sh
=
self
.
pointingData
.
shape
sl_e_pix
=
np
.
zeros
([
d_sh
[
0
],
3
],
dtype
=
np
.
double
)
for
i
in
np
.
arange
(
d_sh
[
0
]):
# if i > 50:
# continue
ju
=
self
.
pointingData
[
i
,
5
]
# pointing = transRaDec2D(self.pointingData[i, 0], self.pointingData[i, 1])
# print(ju, pointing, surveylist[i,3:9])
sl
=
Straylight
(
jtime
=
ju
,
sat_pos
=
self
.
pointingData
[
i
,
6
:
9
],
pointing_radec
=
np
.
array
([
self
.
pointingData
[
i
,
0
],
self
.
pointingData
[
i
,
1
]]),
sun_pos
=
self
.
pointingData
[
i
,
9
:
12
])
e1
,
py
=
sl
.
calculateEarthShineFilter
(
filter
=
self
.
filter
)
earthZenithAngle
,
isInSunSide
=
calculateAnglePwithEarth
(
sat
=
self
.
pointingData
[
i
,
6
:
9
],
pointing
=
sl
.
pointing
,
sun
=
self
.
pointingData
[
i
,
9
:
12
])
# e2, _ = sl.calculateZodiacalFilter2(filter='i', sun_pos=sl.sun_pos)
# e3 = sl.calculateStarLightFilter(filter='i', pointYaxis=py)
# e_all = sl.calculateStrayLightFilter(filter='i')
# s_pix, spec = sl.calculateStrayLightGrating(grating='GI')
sl_e_pix
[
i
,
0
]
=
e1
sl_e_pix
[
i
,
1
]
=
earthZenithAngle
sl_e_pix
[
i
,
2
]
=
isInSunSide
median
=
np
.
median
(
sl_e_pix
[:,
0
])
print
(
' average Earthshine %s: %e'
%
(
self
.
filter
,
median
))
self
.
assertTrue
(
median
-
hubbleAverEarthShine
[
self
.
filter
]
<
0.1
)
plt
.
figure
()
ids1
=
sl_e_pix
[:,
2
]
==
1
ids2
=
sl_e_pix
[:,
2
]
!=
1
plt
.
plot
(
sl_e_pix
[
ids1
,
0
],
sl_e_pix
[
ids1
,
1
],
'r.'
)
plt
.
plot
(
sl_e_pix
[
ids2
,
0
],
sl_e_pix
[
ids2
,
1
],
'b.'
)
plt
.
legend
([
'In Sun Side'
,
'In Earths shadow'
])
plt
.
xlabel
(
'straylight-earthshine(e-/pixel/s)'
)
plt
.
ylabel
(
'Angle with local zenith(degree)'
)
plt
.
show
()
def
test_ZodiacalFilter
(
self
):
d_sh
=
self
.
pointingData
.
shape
sl_e_pix
=
np
.
zeros
([
d_sh
[
0
],
2
],
dtype
=
np
.
double
)
for
i
in
np
.
arange
(
d_sh
[
0
]):
ju
=
self
.
pointingData
[
i
,
5
]
sl
=
Straylight
(
jtime
=
ju
,
sat_pos
=
self
.
pointingData
[
i
,
6
:
9
],
pointing_radec
=
np
.
array
([
self
.
pointingData
[
i
,
0
],
self
.
pointingData
[
i
,
1
]]),
sun_pos
=
self
.
pointingData
[
i
,
9
:
12
])
e1
,
_
=
sl
.
calculateZodiacalFilter2
(
filter
=
self
.
filter
,
sun_pos
=
sl
.
sun_pos
)
sl_e_pix
[
i
,
0
]
=
e1
sl_e_pix
[
i
,
1
]
=
getAngle132
(
x1
=
self
.
pointingData
[
i
,
9
],
y1
=
self
.
pointingData
[
i
,
10
],
z1
=
self
.
pointingData
[
i
,
11
],
x2
=
sl
.
pointing
[
0
],
y2
=
sl
.
pointing
[
1
],
z2
=
sl
.
pointing
[
2
],
x3
=
0
,
y3
=
0
,
z3
=
0
)
plt
.
figure
()
plt
.
plot
(
sl_e_pix
[:,
0
],
sl_e_pix
[:,
1
],
'r.'
)
plt
.
xlabel
(
'straylight-zodiacal(e-/pixel/s)'
)
plt
.
ylabel
(
'Angle between pointing and sun(degree)'
)
plt
.
show
()
median
=
np
.
median
(
sl_e_pix
[:,
0
])
print
(
' average Zodiacal %s: %f'
%
(
self
.
filter
,
median
))
self
.
assertTrue
(
median
-
hubbleAverZodiacal
[
self
.
filter
]
<
0.1
)
def
test_StarFilter
(
self
):
d_sh
=
self
.
pointingData
.
shape
sl_e_pix
=
np
.
zeros
(
d_sh
[
0
],
dtype
=
np
.
double
)
tnum
=
10
for
i
in
np
.
arange
(
tnum
):
# if i > 50:
# continue
ju
=
self
.
pointingData
[
i
,
5
]
# pointing = transRaDec2D(self.pointingData[i, 0], self.pointingData[i, 1])
# print(ju, pointing, surveylist[i,3:9])
sl
=
Straylight
(
jtime
=
ju
,
sat_pos
=
self
.
pointingData
[
i
,
6
:
9
],
pointing_radec
=
np
.
array
([
self
.
pointingData
[
i
,
0
],
self
.
pointingData
[
i
,
1
]]),
sun_pos
=
self
.
pointingData
[
i
,
9
:
12
])
e1
,
py
=
sl
.
calculateEarthShineFilter
(
filter
=
self
.
filter
)
# e2, _ = sl.calculateZodiacalFilter2(filter='i', sun_pos=sl.sun_pos)
e3
=
sl
.
calculateStarLightFilter
(
filter
=
self
.
filter
,
pointYaxis
=
py
)
# e_all = sl.calculateStrayLightFilter(filter='i')
# s_pix, spec = sl.calculateStrayLightGrating(grating='GI')
sl_e_pix
[
i
]
=
e3
median
=
np
.
median
(
sl_e_pix
[
0
:
tnum
])
print
(
' average Earthshine %s: %e'
%
(
self
.
filter
,
median
))
self
.
assertTrue
(
median
-
hubbleAverEarthShine
[
self
.
filter
]
<
0.2
)
def
test_GratingStraylight
(
self
):
d_sh
=
self
.
pointingData
.
shape
sl_e_pix
=
np
.
zeros
(
d_sh
[
0
],
dtype
=
np
.
double
)
tnum
=
10
for
i
in
np
.
arange
(
tnum
):
# if i > 50:
# continue
ju
=
self
.
pointingData
[
i
,
5
]
# pointing = transRaDec2D(self.pointingData[i, 0], self.pointingData[i, 1])
# print(ju, pointing, surveylist[i,3:9])
sl
=
Straylight
(
jtime
=
ju
,
sat_pos
=
self
.
pointingData
[
i
,
6
:
9
],
pointing_radec
=
np
.
array
([
self
.
pointingData
[
i
,
0
],
self
.
pointingData
[
i
,
1
]]),
sun_pos
=
self
.
pointingData
[
i
,
9
:
12
])
# e1, py = sl.calculateEarthShineFilter(filter=self.filter)
# e2, _ = sl.calculateZodiacalFilter2(filter='i', sun_pos=sl.sun_pos)
# e3 = sl.calculateStarLightFilter(filter=self.filter, pointYaxis=py)
# e_all = sl.calculateStrayLightFilter(filter='i')
s_pix
,
spec
=
sl
.
calculateStrayLightGrating
(
grating
=
self
.
grating
)
sl_e_pix
[
i
]
=
s_pix
plt
.
figure
()
plt
.
plot
(
spec
[
'WAVELENGTH'
],
spec
[
'FLUX'
],
'r'
)
plt
.
xlabel
(
'WAVELENGTH'
)
plt
.
ylabel
(
'F$\lambda$(erg/s/cm2/A/arcsec2)'
)
plt
.
xlim
(
2000
,
10000
)
plt
.
show
()
median
=
np
.
median
(
sl_e_pix
[
0
:
tnum
])
print
(
' average Earthshine %s: %e'
%
(
self
.
grating
,
median
))
self
.
assertTrue
(
median
<
0.8
)
if
__name__
==
'__main__'
:
suit
=
unittest
.
TestSuite
()
# case1 = TestStraylight('test_EarthShineFilter',datFn = 'Straylight_test.dat', filter = 'i')
# suit.addTest(case1)
# case2 = TestStraylight('test_ZodiacalFilter',datFn = 'Straylight_test.dat',filter = 'i')
# suit.addTest(case2)
# case3 = TestStraylight('test_StarFilter', datFn='Straylight_test.dat', filter='i')
# suit.addTest(case3)
case4
=
TestStraylight
(
'test_GratingStraylight'
,
datFn
=
'Straylight_test.dat'
,
grating
=
'GI'
)
suit
.
addTest
(
case4
)
unittest
.
TextTestRunner
(
verbosity
=
2
).
run
(
suit
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Snippets