Skip to content
GitLab
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
45682570
Commit
45682570
authored
Oct 26, 2024
by
Zhang Xin
Browse files
pep8
parent
d10eb6a8
Pipeline
#7114
failed with stage
in 0 seconds
Changes
5
Pipelines
1
Show whitespace changes
Inline
Side-by-side
observation_sim/mock_objects/SpecDisperser/SpecDisperser.py
View file @
45682570
...
@@ -336,7 +336,7 @@ class SpecDisperser(object):
...
@@ -336,7 +336,7 @@ class SpecDisperser(object):
orders
=
{
"A"
:
"1st"
,
"B"
:
"0st"
,
"C"
:
"2st"
,
"D"
:
"-1st"
,
"E"
:
"-2st"
}
orders
=
{
"A"
:
"1st"
,
"B"
:
"0st"
,
"C"
:
"2st"
,
"D"
:
"-1st"
,
"E"
:
"-2st"
}
sens_file_name
=
conffile
[
0
:
-
5
]
+
\
sens_file_name
=
conffile
[
0
:
-
5
]
+
\
"_sensitivity_"
+
orders
[
beam
]
+
".fits"
"_sensitivity_"
+
orders
[
beam
]
+
".fits"
if
not
os
.
path
.
exists
(
sens_file_name
)
==
Tru
e
:
if
os
.
path
.
exists
(
sens_file_name
)
if
Fals
e
:
senstivity_out
=
Table
(
senstivity_out
=
Table
(
array
([
w
,
sens
]).
T
,
names
=
(
"WAVELENGTH"
,
"SENSITIVITY"
))
array
([
w
,
sens
]).
T
,
names
=
(
"WAVELENGTH"
,
"SENSITIVITY"
))
senstivity_out
.
write
(
sens_file_name
,
format
=
"fits"
)
senstivity_out
.
write
(
sens_file_name
,
format
=
"fits"
)
...
...
observation_sim/mock_objects/SpecDisperser/setup_c.py
View file @
45682570
...
@@ -8,16 +8,16 @@ import numpy
...
@@ -8,16 +8,16 @@ import numpy
extensions
=
[
extensions
=
[
Extension
(
"disperse_c.interp"
,
[
"disperse_c/interp.pyx"
],
Extension
(
"disperse_c.interp"
,
[
"disperse_c/interp.pyx"
],
include_dirs
=
[
numpy
.
get_include
()],
include_dirs
=
[
numpy
.
get_include
()],
libraries
=
[
"m"
]),
libraries
=
[
"m"
]),
Extension
(
"disperse_c.disperse"
,
[
"disperse_c/disperse.pyx"
],
Extension
(
"disperse_c.disperse"
,
[
"disperse_c/disperse.pyx"
],
include_dirs
=
[
numpy
.
get_include
()],
include_dirs
=
[
numpy
.
get_include
()],
libraries
=
[
"m"
]),
libraries
=
[
"m"
]),
]
]
setup
(
setup
(
name
=
"slssim_disperse"
,
name
=
"slssim_disperse"
,
ext_modules
=
cythonize
(
extensions
),
ext_modules
=
cythonize
(
extensions
),
)
)
observation_sim/psf/PSFInterpSLS.py
View file @
45682570
...
@@ -435,14 +435,15 @@ class PSFInterpSLS(PSFModel):
...
@@ -435,14 +435,15 @@ class PSFInterpSLS(PSFModel):
# PSF_int_trans[ids_szero] = 0
# PSF_int_trans[ids_szero] = 0
# print(PSF_int_trans[ids_szero].shape[0],PSF_int_trans.shape)
# print(PSF_int_trans[ids_szero].shape[0],PSF_int_trans.shape)
PSF_int_trans
=
PSF_int_trans
/
np
.
sum
(
PSF_int_trans
)
PSF_int_trans
=
PSF_int_trans
/
np
.
sum
(
PSF_int_trans
)
#
##
DEBGU
#
DEBGU
ids_szero
=
PSF_int_trans
<
0
ids_szero
=
PSF_int_trans
<
0
n01
=
PSF_int_trans
[
ids_szero
].
shape
[
0
]
n01
=
PSF_int_trans
[
ids_szero
].
shape
[
0
]
n1
=
np
.
sum
(
np
.
isinf
(
PSF_int_trans
))
n1
=
np
.
sum
(
np
.
isinf
(
PSF_int_trans
))
n2
=
np
.
sum
(
np
.
isnan
(
PSF_int_trans
))
n2
=
np
.
sum
(
np
.
isnan
(
PSF_int_trans
))
if
n1
>
0
or
n2
>
0
:
if
n1
>
0
or
n2
>
0
:
print
(
"DEBUG: PSFInterpSLS, inf:%d, nan:%d, 0 num:%d"
%
(
n1
,
n2
,
n01
))
print
(
"DEBUG: PSFInterpSLS, inf:%d, nan:%d, 0 num:%d"
%
(
n1
,
n2
,
n01
))
####
####
# from astropy.io import fits
# from astropy.io import fits
...
@@ -537,19 +538,20 @@ class PSFInterpSLS(PSFModel):
...
@@ -537,19 +538,20 @@ class PSFInterpSLS(PSFModel):
sumImg
=
np
.
sum
(
cutImg
.
array
)
sumImg
=
np
.
sum
(
cutImg
.
array
)
tmp_img
=
cutImg
*
0
tmp_img
=
cutImg
*
0
for
j
in
np
.
arange
(
npc
):
for
j
in
np
.
arange
(
npc
):
X_
=
np
.
hstack
((
pos_p
[:,
1
].
flatten
()[:,
None
],
pos_p
[:,
0
].
flatten
()[:,
None
]),
dtype
=
np
.
float32
)
X_
=
np
.
hstack
((
pos_p
[:,
1
].
flatten
()[:,
None
],
pos_p
[:,
0
].
flatten
()[
:,
None
]),
dtype
=
np
.
float32
)
Z_
=
(
pc_coeff
[
j
].
astype
(
np
.
float32
)).
flatten
()
Z_
=
(
pc_coeff
[
j
].
astype
(
np
.
float32
)).
flatten
()
# print(pc_coeff[j].shape[0], pos_p[:,1].shape[0], pos_p[:,0].shape[0])
# print(pc_coeff[j].shape[0], pos_p[:,1].shape[0], pos_p[:,0].shape[0])
cx_len
=
int
(
chip
.
npix_x
)
cx_len
=
int
(
chip
.
npix_x
)
cy_len
=
int
(
chip
.
npix_y
)
cy_len
=
int
(
chip
.
npix_y
)
n_x
=
np
.
arange
(
0
,
cx_len
,
1
,
dtype
=
int
)
n_x
=
np
.
arange
(
0
,
cx_len
,
1
,
dtype
=
int
)
n_y
=
np
.
arange
(
0
,
cy_len
,
1
,
dtype
=
int
)
n_y
=
np
.
arange
(
0
,
cy_len
,
1
,
dtype
=
int
)
M
,
N
=
np
.
meshgrid
(
n_x
,
n_y
)
M
,
N
=
np
.
meshgrid
(
n_x
,
n_y
)
# t1=datetime.datetime.now()
# t1=datetime.datetime.now()
# U = interpolate.griddata(X_, Z_, (M[0:cy_len, 0:cx_len],N[0:cy_len, 0:cx_len]),
# U = interpolate.griddata(X_, Z_, (M[0:cy_len, 0:cx_len],N[0:cy_len, 0:cx_len]),
# method='nearest',fill_value=1.0)
# method='nearest',fill_value=1.0)
b_img
=
galsim
.
Image
(
cx_len
,
cy_len
)
b_img
=
galsim
.
Image
(
cx_len
,
cy_len
)
b_img
.
setOrigin
(
0
,
0
)
b_img
.
setOrigin
(
0
,
0
)
bounds
=
cutImg
.
bounds
&
b_img
.
bounds
bounds
=
cutImg
.
bounds
&
b_img
.
bounds
if
bounds
.
area
()
==
0
:
if
bounds
.
area
()
==
0
:
continue
continue
...
@@ -574,8 +576,8 @@ class PSFInterpSLS(PSFModel):
...
@@ -574,8 +576,8 @@ class PSFInterpSLS(PSFModel):
ye
=
bounds
.
ymax
+
1
ye
=
bounds
.
ymax
+
1
xs
=
bounds
.
xmin
xs
=
bounds
.
xmin
xe
=
bounds
.
xmax
+
1
xe
=
bounds
.
xmax
+
1
U
=
interpolate
.
griddata
(
X_
,
Z_
,
(
M
[
ys
:
ye
,
xs
:
xe
],
N
[
ys
:
ye
,
xs
:
xe
]),
U
=
interpolate
.
griddata
(
X_
,
Z_
,
(
M
[
ys
:
ye
,
xs
:
xe
],
N
[
ys
:
ye
,
xs
:
xe
]),
method
=
'nearest'
,
fill_value
=
1.0
)
method
=
'nearest'
,
fill_value
=
1.0
)
# t2=datetime.datetime.now()
# t2=datetime.datetime.now()
# print("time interpolate:", t2-t1)
# print("time interpolate:", t2-t1)
...
@@ -586,47 +588,47 @@ class PSFInterpSLS(PSFModel):
...
@@ -586,47 +588,47 @@ class PSFInterpSLS(PSFModel):
img_tmp
=
cutImg
img_tmp
=
cutImg
img_tmp
[
bounds
]
=
img_tmp
[
bounds
]
*
U
img_tmp
[
bounds
]
=
img_tmp
[
bounds
]
*
U
psf
=
pcs
[:,
j
].
reshape
(
m_size
,
m_size
)
psf
=
pcs
[:,
j
].
reshape
(
m_size
,
m_size
)
tmp_img
=
tmp_img
+
signal
.
fftconvolve
(
img_tmp
.
array
,
psf
,
mode
=
'same'
,
axes
=
None
)
tmp_img
=
tmp_img
+
\
signal
.
fftconvolve
(
img_tmp
.
array
,
psf
,
mode
=
'same'
,
axes
=
None
)
# t3=datetime.datetime.now()
# t3=datetime.datetime.now()
# print("time convole:", t3-t2)
# print("time convole:", t3-t2)
del
U
del
U
del
img_tmp
del
img_tmp
if
np
.
sum
(
tmp_img
.
array
)
==
0
:
if
np
.
sum
(
tmp_img
.
array
)
==
0
:
tmp_img
=
cutImg
tmp_img
=
cutImg
else
:
else
:
tmp_img
=
tmp_img
/
np
.
sum
(
tmp_img
.
array
)
*
sumImg
tmp_img
=
tmp_img
/
np
.
sum
(
tmp_img
.
array
)
*
sumImg
return
tmp_img
return
tmp_img
def
convolveFullImgWithPCAPSF
(
self
,
chip
,
folding_threshold
=
5.e-3
):
def
convolveFullImgWithPCAPSF
(
self
,
chip
,
folding_threshold
=
5.e-3
):
keys_L1
=
chip_utils
.
getChipSLSGratingID
(
chip
.
chipID
)
keys_L1
=
chip_utils
.
getChipSLSGratingID
(
chip
.
chipID
)
# keys_L2 = ['order-2','order-1','order0','order1','order2']
# keys_L2 = ['order-2','order-1','order0','order1','order2']
keys_L2
=
[
'order0'
,
'order1'
]
keys_L2
=
[
'order0'
,
'order1'
]
keys_L3
=
[
'w1'
,
'w2'
,
'w3'
,
'w4'
]
keys_L3
=
[
'w1'
,
'w2'
,
'w3'
,
'w4'
]
npca
=
10
npca
=
10
x_start
=
chip
.
x_cen
/
chip
.
pix_size
-
chip
.
npix_x
/
2.
x_start
=
chip
.
x_cen
/
chip
.
pix_size
-
chip
.
npix_x
/
2.
y_start
=
chip
.
y_cen
/
chip
.
pix_size
-
chip
.
npix_y
/
2.
y_start
=
chip
.
y_cen
/
chip
.
pix_size
-
chip
.
npix_y
/
2.
for
i
,
gt
in
enumerate
(
keys_L1
):
for
i
,
gt
in
enumerate
(
keys_L1
):
psfCo
=
self
.
grating1_data
psfCo
=
self
.
grating1_data
if
i
>
0
:
if
i
>
0
:
psfCo
=
self
.
grating2_data
psfCo
=
self
.
grating2_data
for
od
in
keys_L2
:
for
od
in
keys_L2
:
psfCo_L2
=
psfCo
[
'order1'
]
psfCo_L2
=
psfCo
[
'order1'
]
if
od
in
[
'order-2'
,
'order-1'
,
'order0'
,
'order2'
]:
if
od
in
[
'order-2'
,
'order-1'
,
'order0'
,
'order2'
]:
psfCo_L2
=
psfCo
[
'order0'
]
psfCo_L2
=
psfCo
[
'order0'
]
for
w
in
keys_L3
:
for
w
in
keys_L3
:
img
=
chip
.
img_stack
[
gt
][
od
][
w
]
img
=
chip
.
img_stack
[
gt
][
od
][
w
]
pcs
=
psfCo_L2
[
'band'
+
w
[
1
]][
'band_data'
][
0
].
data
pcs
=
psfCo_L2
[
'band'
+
w
[
1
]][
'band_data'
][
0
].
data
pos_p
=
psfCo_L2
[
'band'
+
w
[
1
]][
'band_data'
][
1
].
data
/
chip
.
pix_size
-
np
.
array
([
y_start
,
x_start
])
pos_p
=
psfCo_L2
[
'band'
+
w
[
1
]][
'band_data'
][
1
].
data
/
\
chip
.
pix_size
-
np
.
array
([
y_start
,
x_start
])
pc_coeff
=
psfCo_L2
[
'band'
+
w
[
1
]][
'band_data'
][
2
].
data
pc_coeff
=
psfCo_L2
[
'band'
+
w
[
1
]][
'band_data'
][
2
].
data
# print("DEBUG-----------",np.max(pos_p[:,1]),np.min(pos_p[:,1]), np.max(pos_p[:,0]),np.min(pos_p[:,0]))
# print("DEBUG-----------",np.max(pos_p[:,1]),np.min(pos_p[:,1]), np.max(pos_p[:,0]),np.min(pos_p[:,0]))
sum_img
=
np
.
sum
(
img
.
array
)
sum_img
=
np
.
sum
(
img
.
array
)
# coeff_mat = np.zeros([npca, chip.npix_y, chip.npix_x])
# coeff_mat = np.zeros([npca, chip.npix_y, chip.npix_x])
# for m in np.arange(chip.npix_y):
# for m in np.arange(chip.npix_y):
# for n in np.arange(chip.npix_x):
# for n in np.arange(chip.npix_x):
...
@@ -660,37 +662,41 @@ class PSFInterpSLS(PSFModel):
...
@@ -660,37 +662,41 @@ class PSFInterpSLS(PSFModel):
# coeff_mat[:, m, n] = coeff_int
# coeff_mat[:, m, n] = coeff_int
m_size
=
int
(
pcs
.
shape
[
0
]
**
0.5
)
m_size
=
int
(
pcs
.
shape
[
0
]
**
0.5
)
tmp_img
=
np
.
zeros_like
(
img
.
array
,
dtype
=
np
.
float32
)
tmp_img
=
np
.
zeros_like
(
img
.
array
,
dtype
=
np
.
float32
)
for
j
in
np
.
arange
(
npca
):
for
j
in
np
.
arange
(
npca
):
print
(
gt
,
od
,
w
,
j
)
print
(
gt
,
od
,
w
,
j
)
X_
=
np
.
hstack
((
pos_p
[:,
1
].
flatten
()[:,
None
],
pos_p
[:,
0
].
flatten
()[:,
None
]),
dtype
=
np
.
float32
)
X_
=
np
.
hstack
((
pos_p
[:,
1
].
flatten
()[:,
None
],
pos_p
[:,
0
].
flatten
()[
:,
None
]),
dtype
=
np
.
float32
)
Z_
=
(
pc_coeff
[
j
].
astype
(
np
.
float32
)).
flatten
()
Z_
=
(
pc_coeff
[
j
].
astype
(
np
.
float32
)).
flatten
()
# print(pc_coeff[j].shape[0], pos_p[:,1].shape[0], pos_p[:,0].shape[0])
# print(pc_coeff[j].shape[0], pos_p[:,1].shape[0], pos_p[:,0].shape[0])
sub_size
=
4
sub_size
=
4
cx_len
=
int
(
chip
.
npix_x
/
sub_size
)
cx_len
=
int
(
chip
.
npix_x
/
sub_size
)
cy_len
=
int
(
chip
.
npix_y
/
sub_size
)
cy_len
=
int
(
chip
.
npix_y
/
sub_size
)
n_x
=
np
.
arange
(
0
,
chip
.
npix_x
,
sub_size
,
dtype
=
int
)
n_x
=
np
.
arange
(
0
,
chip
.
npix_x
,
sub_size
,
dtype
=
int
)
n_y
=
np
.
arange
(
0
,
chip
.
npix_y
,
sub_size
,
dtype
=
int
)
n_y
=
np
.
arange
(
0
,
chip
.
npix_y
,
sub_size
,
dtype
=
int
)
M
,
N
=
np
.
meshgrid
(
n_x
,
n_y
)
M
,
N
=
np
.
meshgrid
(
n_x
,
n_y
)
t1
=
datetime
.
datetime
.
now
()
t1
=
datetime
.
datetime
.
now
()
# U = interpolate.griddata(X_, Z_, (M[0:cy_len, 0:cx_len],N[0:cy_len, 0:cx_len]),
# U = interpolate.griddata(X_, Z_, (M[0:cy_len, 0:cx_len],N[0:cy_len, 0:cx_len]),
# method='nearest',fill_value=1.0)
# method='nearest',fill_value=1.0)
U1
=
interpolate
.
griddata
(
X_
,
Z_
,
(
M
,
N
),
U1
=
interpolate
.
griddata
(
X_
,
Z_
,
(
M
,
N
),
method
=
'nearest'
,
fill_value
=
1.0
)
method
=
'nearest'
,
fill_value
=
1.0
)
U
=
np
.
zeros_like
(
chip
.
img
.
array
,
dtype
=
np
.
float32
)
U
=
np
.
zeros_like
(
chip
.
img
.
array
,
dtype
=
np
.
float32
)
for
mi
in
np
.
arange
(
cy_len
):
for
mi
in
np
.
arange
(
cy_len
):
for
mj
in
np
.
arange
(
cx_len
):
for
mj
in
np
.
arange
(
cx_len
):
U
[
mi
*
sub_size
:(
mi
+
1
)
*
sub_size
,
mj
*
sub_size
:(
mj
+
1
)
*
sub_size
]
=
U1
[
mi
,
mj
]
U
[
mi
*
sub_size
:(
mi
+
1
)
*
sub_size
,
mj
*
t2
=
datetime
.
datetime
.
now
()
sub_size
:(
mj
+
1
)
*
sub_size
]
=
U1
[
mi
,
mj
]
t2
=
datetime
.
datetime
.
now
()
print
(
"time interpolate:"
,
t2
-
t1
)
print
(
"time interpolate:"
,
t2
-
t1
)
img_tmp
=
img
.
array
*
U
img_tmp
=
img
.
array
*
U
psf
=
pcs
[:,
j
].
reshape
(
m_size
,
m_size
)
psf
=
pcs
[:,
j
].
reshape
(
m_size
,
m_size
)
tmp_img
=
tmp_img
+
signal
.
fftconvolve
(
img_tmp
,
psf
,
mode
=
'same'
,
axes
=
None
)
tmp_img
=
tmp_img
+
\
signal
.
fftconvolve
(
img_tmp
,
psf
,
mode
=
'same'
,
axes
=
None
)
t3
=
datetime
.
datetime
.
now
()
t3
=
datetime
.
datetime
.
now
()
print
(
"time convole:"
,
t3
-
t2
)
print
(
"time convole:"
,
t3
-
t2
)
del
U
del
U
del
U1
del
U1
...
...
tools/get_pointing.py
View file @
45682570
...
@@ -25,6 +25,7 @@ import galsim
...
@@ -25,6 +25,7 @@ import galsim
import
math
import
math
# from numba import jit
# from numba import jit
class
Chip
(
object
):
class
Chip
(
object
):
def
__init__
(
self
,
chipID
):
def
__init__
(
self
,
chipID
):
self
.
chipID
=
chipID
self
.
chipID
=
chipID
...
@@ -43,7 +44,7 @@ class Chip(object):
...
@@ -43,7 +44,7 @@ class Chip(object):
self
.
npix_y
=
9232
self
.
npix_y
=
9232
self
.
pix_scale
=
0.074
self
.
pix_scale
=
0.074
def
getTanWCS
(
self
,
ra
,
dec
,
img_rot
,
pix_scale
=
None
,
xcen
=
None
,
ycen
=
None
,
logger
=
None
):
def
getTanWCS
(
self
,
ra
,
dec
,
img_rot
,
pix_scale
=
None
,
xcen
=
None
,
ycen
=
None
,
logger
=
None
):
""" Get the WCS of the image mosaic using Gnomonic/TAN projection
""" Get the WCS of the image mosaic using Gnomonic/TAN projection
Parameter:
Parameter:
...
@@ -57,7 +58,8 @@ class Chip(object):
...
@@ -57,7 +58,8 @@ class Chip(object):
WCS of the focal plane
WCS of the focal plane
"""
"""
if
logger
is
not
None
:
if
logger
is
not
None
:
logger
.
info
(
" Construct the wcs of the entire image mosaic using Gnomonic/TAN projection"
)
logger
.
info
(
" Construct the wcs of the entire image mosaic using Gnomonic/TAN projection"
)
if
(
xcen
==
None
)
or
(
ycen
==
None
):
if
(
xcen
==
None
)
or
(
ycen
==
None
):
xcen
=
self
.
cen_pix_x
xcen
=
self
.
cen_pix_x
ycen
=
self
.
cen_pix_y
ycen
=
self
.
cen_pix_y
...
@@ -78,7 +80,8 @@ class Chip(object):
...
@@ -78,7 +80,8 @@ class Chip(object):
# dvdx = -np.cos(img_rot.rad) * pix_scale
# dvdx = -np.cos(img_rot.rad) * pix_scale
# dvdy = +np.sin(img_rot.rad) * pix_scale
# dvdy = +np.sin(img_rot.rad) * pix_scale
moscen
=
galsim
.
PositionD
(
x
=
xcen
,
y
=
ycen
)
moscen
=
galsim
.
PositionD
(
x
=
xcen
,
y
=
ycen
)
sky_center
=
galsim
.
CelestialCoord
(
ra
=
ra
*
galsim
.
degrees
,
dec
=
dec
*
galsim
.
degrees
)
sky_center
=
galsim
.
CelestialCoord
(
ra
=
ra
*
galsim
.
degrees
,
dec
=
dec
*
galsim
.
degrees
)
affine
=
galsim
.
AffineTransform
(
dudx
,
dudy
,
dvdx
,
dvdy
,
origin
=
moscen
)
affine
=
galsim
.
AffineTransform
(
dudx
,
dudy
,
dvdx
,
dvdy
,
origin
=
moscen
)
WCS
=
galsim
.
TanWCS
(
affine
,
sky_center
,
units
=
galsim
.
arcsec
)
WCS
=
galsim
.
TanWCS
(
affine
,
sky_center
,
units
=
galsim
.
arcsec
)
...
@@ -99,8 +102,6 @@ class Chip(object):
...
@@ -99,8 +102,6 @@ class Chip(object):
A galsim BoundsD object
A galsim BoundsD object
"""
"""
chipID
=
self
.
chipID
chipID
=
self
.
chipID
rowID
,
colID
=
self
.
getChipRowCol
(
chipID
)
rowID
,
colID
=
self
.
getChipRowCol
(
chipID
)
...
@@ -125,36 +126,41 @@ class Chip(object):
...
@@ -125,36 +126,41 @@ class Chip(object):
return
galsim
.
PositionD
(
xcen
,
ycen
)
return
galsim
.
PositionD
(
xcen
,
ycen
)
def
transRaDec2D
(
ra
,
dec
):
def
transRaDec2D
(
ra
,
dec
):
x1
=
np
.
cos
(
dec
/
57.2957795
)
*
np
.
cos
(
ra
/
57.2957795
)
;
x1
=
np
.
cos
(
dec
/
57.2957795
)
*
np
.
cos
(
ra
/
57.2957795
)
y1
=
np
.
cos
(
dec
/
57.2957795
)
*
np
.
sin
(
ra
/
57.2957795
)
;
y1
=
np
.
cos
(
dec
/
57.2957795
)
*
np
.
sin
(
ra
/
57.2957795
)
z1
=
np
.
sin
(
dec
/
57.2957795
)
;
z1
=
np
.
sin
(
dec
/
57.2957795
)
return
np
.
array
([
x1
,
y1
,
z1
])
return
np
.
array
([
x1
,
y1
,
z1
])
def
getobsPA
(
ra
,
dec
):
def
getobsPA
(
ra
,
dec
):
l1
=
np
.
array
([
0
,
0
,
1
])
l1
=
np
.
array
([
0
,
0
,
1
])
l2
=
transRaDec2D
(
ra
,
dec
)
l2
=
transRaDec2D
(
ra
,
dec
)
polar_ec
=
coord
.
SkyCoord
(
0
*
u
.
degree
,
90
*
u
.
degree
,
frame
=
'barycentrictrueecliptic'
)
polar_ec
=
coord
.
SkyCoord
(
0
*
u
.
degree
,
90
*
u
.
degree
,
frame
=
'barycentrictrueecliptic'
)
polar_eq
=
polar_ec
.
transform_to
(
'icrs'
)
polar_eq
=
polar_ec
.
transform_to
(
'icrs'
)
# print(polar_eq.ra.value,polar_eq.dec.value)
# print(polar_eq.ra.value,polar_eq.dec.value)
polar_d
=
transRaDec2D
(
polar_eq
.
ra
.
value
,
polar_eq
.
dec
.
value
)
polar_d
=
transRaDec2D
(
polar_eq
.
ra
.
value
,
polar_eq
.
dec
.
value
)
l1l2cross
=
np
.
cross
(
l2
,
l1
)
l1l2cross
=
np
.
cross
(
l2
,
l1
)
pdl2cross
=
np
.
cross
(
l2
,
polar_d
)
pdl2cross
=
np
.
cross
(
l2
,
polar_d
)
angle
=
math
.
acos
(
np
.
dot
(
l1l2cross
,
pdl2cross
)
/
(
np
.
linalg
.
norm
(
l1l2cross
)
*
np
.
linalg
.
norm
(
pdl2cross
)))
angle
=
math
.
acos
(
np
.
dot
(
l1l2cross
,
pdl2cross
)
/
(
np
.
linalg
.
norm
(
l1l2cross
)
*
np
.
linalg
.
norm
(
pdl2cross
)))
angle
=
(
angle
)
/
math
.
pi
*
180
angle
=
(
angle
)
/
math
.
pi
*
180
angle
=
angle
+
90
angle
=
angle
+
90
if
(
ra
<
90
or
ra
>
270
):
if
(
ra
<
90
or
ra
>
270
):
angle
=
-
angle
angle
=
-
angle
return
angle
return
angle
# @jit()
# @jit()
def
getSelectPointingList
(
center
=
[
60
,
-
40
],
radius
=
2
):
points
=
np
.
loadtxt
(
'sky.dat'
)
center
=
center
#ra dec
def
getSelectPointingList
(
center
=
[
60
,
-
40
],
radius
=
2
):
points
=
np
.
loadtxt
(
'sky.dat'
)
center
=
center
# ra dec
radius
=
radius
# degree
radius
=
radius
# degree
radii_dec
=
1
radii_dec
=
1
...
@@ -163,7 +169,8 @@ def getSelectPointingList(center = [60,-40], radius = 2):
...
@@ -163,7 +169,8 @@ def getSelectPointingList(center = [60,-40], radius = 2):
if
radii_ra
>
180
:
if
radii_ra
>
180
:
radii_ra
=
180
radii_ra
=
180
c_eclip
=
coord
.
SkyCoord
(
points
[:,
2
]
*
u
.
degree
,
points
[:,
1
]
*
u
.
degree
,
frame
=
'barycentrictrueecliptic'
)
c_eclip
=
coord
.
SkyCoord
(
points
[:,
2
]
*
u
.
degree
,
points
[:,
1
]
*
u
.
degree
,
frame
=
'barycentrictrueecliptic'
)
c_equtor
=
c_eclip
.
transform_to
(
'icrs'
)
c_equtor
=
c_eclip
.
transform_to
(
'icrs'
)
# print(np.min((c_equtor.ra*u.degree).value), np.max((c_equtor.ra*u.degree).value))
# print(np.min((c_equtor.ra*u.degree).value), np.max((c_equtor.ra*u.degree).value))
...
@@ -174,13 +181,15 @@ def getSelectPointingList(center = [60,-40], radius = 2):
...
@@ -174,13 +181,15 @@ def getSelectPointingList(center = [60,-40], radius = 2):
ra_range_lo
=
center
[
0
]
-
radii_ra
ra_range_lo
=
center
[
0
]
-
radii_ra
ra_range_hi
=
center
[
0
]
+
radii_ra
ra_range_hi
=
center
[
0
]
+
radii_ra
if
ra_range_lo
<
0
:
if
ra_range_lo
<
0
:
ids1
=
((
c_equtor
.
ra
*
u
.
degree
).
value
<
ra_range_hi
)
|
((
c_equtor
.
ra
*
u
.
degree
).
value
>
360
+
ra_range_lo
)
ids1
=
((
c_equtor
.
ra
*
u
.
degree
).
value
<
ra_range_hi
)
|
((
c_equtor
.
ra
*
u
.
degree
).
value
>
360
+
ra_range_lo
)
elif
ra_range_hi
>
360
:
elif
ra_range_hi
>
360
:
ids1
=
((
c_equtor
.
ra
*
u
.
degree
).
value
>
ra_range_lo
)
|
((
c_equtor
.
ra
*
u
.
degree
).
value
<
ra_range_hi
-
360
)
ids1
=
((
c_equtor
.
ra
*
u
.
degree
).
value
>
ra_range_lo
)
|
((
c_equtor
.
ra
*
u
.
degree
).
value
<
ra_range_hi
-
360
)
else
:
else
:
ids1
=
((
c_equtor
.
ra
*
u
.
degree
).
value
>
ra_range_lo
)
&
((
c_equtor
.
ra
*
u
.
degree
).
value
<
ra_range_hi
)
ids1
=
((
c_equtor
.
ra
*
u
.
degree
).
value
>
ra_range_lo
)
&
((
c_equtor
.
ra
*
u
.
degree
).
value
<
ra_range_hi
)
dec_range_lo
=
center
[
1
]
-
radii_dec
dec_range_lo
=
center
[
1
]
-
radii_dec
if
center
[
1
]
-
radii_dec
<
-
90
:
if
center
[
1
]
-
radii_dec
<
-
90
:
...
@@ -198,25 +207,24 @@ def getSelectPointingList(center = [60,-40], radius = 2):
...
@@ -198,25 +207,24 @@ def getSelectPointingList(center = [60,-40], radius = 2):
p_result
=
np
.
zeros
([
num
,
5
])
p_result
=
np
.
zeros
([
num
,
5
])
i
=
0
i
=
0
for
p
,
p_
in
zip
(
points
[
ids1
][
ids3
][
ids4
],
c_equtor
[
ids1
][
ids3
][
ids4
]):
for
p
,
p_
in
zip
(
points
[
ids1
][
ids3
][
ids4
],
c_equtor
[
ids1
][
ids3
][
ids4
]):
ra
=
(
p_
.
ra
*
u
.
degree
).
value
ra
=
(
p_
.
ra
*
u
.
degree
).
value
dec
=
(
p_
.
dec
*
u
.
degree
).
value
dec
=
(
p_
.
dec
*
u
.
degree
).
value
# print(ra, dec)
# print(ra, dec)
lon
=
p
[
2
]
lon
=
p
[
2
]
lat
=
p
[
1
]
lat
=
p
[
1
]
p_result
[
i
,
0
]
=
ra
p_result
[
i
,
0
]
=
ra
p_result
[
i
,
1
]
=
dec
p_result
[
i
,
1
]
=
dec
p_result
[
i
,
2
]
=
lon
p_result
[
i
,
2
]
=
lon
p_result
[
i
,
3
]
=
lat
p_result
[
i
,
3
]
=
lat
p_result
[
i
,
4
]
=
getobsPA
(
ra
,
dec
)
+
90
p_result
[
i
,
4
]
=
getobsPA
(
ra
,
dec
)
+
90
i
=
i
+
1
i
=
i
+
1
return
p_result
return
p_result
def
findPointingbyChipID
(
chipID
=
8
,
ra
=
60.
,
dec
=-
40.
):
def
findPointingbyChipID
(
chipID
=
8
,
ra
=
60.
,
dec
=
-
40.
):
"""_summary_
"""_summary_
Args:
Args:
...
@@ -228,7 +236,7 @@ def findPointingbyChipID(chipID = 8, ra = 60., dec = -40.):
...
@@ -228,7 +236,7 @@ def findPointingbyChipID(chipID = 8, ra = 60., dec = -40.):
_type_: [ra, dec, rotation angle]
_type_: [ra, dec, rotation angle]
"""
"""
chip_center
=
[
ra
,
dec
]
chip_center
=
[
ra
,
dec
]
p_list
=
getSelectPointingList
(
center
=
chip_center
)
p_list
=
getSelectPointingList
(
center
=
chip_center
)
pchip
=
Chip
(
chipID
)
pchip
=
Chip
(
chipID
)
p_num
=
p_list
.
shape
[
0
]
p_num
=
p_list
.
shape
[
0
]
...
@@ -238,10 +246,10 @@ def findPointingbyChipID(chipID = 8, ra = 60., dec = -40.):
...
@@ -238,10 +246,10 @@ def findPointingbyChipID(chipID = 8, ra = 60., dec = -40.):
r_ra
=
ra
r_ra
=
ra
r_dec
=
dec
r_dec
=
dec
r_rot
=
0.
r_rot
=
0.
for
i
in
np
.
arange
(
0
,
p_num
,
1
):
for
i
in
np
.
arange
(
0
,
p_num
,
1
):
ra_n
=
p_list
[
i
,
0
]
ra_n
=
p_list
[
i
,
0
]
dec_n
=
p_list
[
i
,
1
]
dec_n
=
p_list
[
i
,
1
]
rot
=
p_list
[
i
,
4
]
*
galsim
.
degrees
rot
=
p_list
[
i
,
4
]
*
galsim
.
degrees
chip_wcs
=
pchip
.
getTanWCS
(
ra_n
,
dec_n
,
rot
)
chip_wcs
=
pchip
.
getTanWCS
(
ra_n
,
dec_n
,
rot
)
c_center
=
pchip
.
getChipCenter
()
c_center
=
pchip
.
getChipCenter
()
...
@@ -259,13 +267,12 @@ def findPointingbyChipID(chipID = 8, ra = 60., dec = -40.):
...
@@ -259,13 +267,12 @@ def findPointingbyChipID(chipID = 8, ra = 60., dec = -40.):
r_rot
=
rot
.
deg
r_rot
=
rot
.
deg
if
min_d
==
max_value
:
if
min_d
==
max_value
:
print
(
"RA:%f,Dec:%f不在指向范围内,请于巡天规划序列比对!!!!!"
%
(
ra
,
dec
))
print
(
"RA:%f,Dec:%f不在指向范围内,请于巡天规划序列比对!!!!!"
%
(
ra
,
dec
))
return
[
r_ra
,
r_dec
,
r_rot
]
return
[
r_ra
,
r_dec
,
r_rot
]
if
__name__
==
"__main__"
:
if
__name__
==
"__main__"
:
tchip
,
tra
,
tdec
=
13
,
60.
,
-
40.
tchip
,
tra
,
tdec
=
13
,
60.
,
-
40.
pointing
=
findPointingbyChipID
(
chipID
=
tchip
,
ra
=
tra
,
dec
=
tdec
)
pointing
=
findPointingbyChipID
(
chipID
=
tchip
,
ra
=
tra
,
dec
=
tdec
)
print
(
"[ra_center, dec_center, image_rot]: "
,
pointing
)
print
(
"[ra_center, dec_center, image_rot]: "
,
pointing
)
tools/get_pointing_accuracy.py
View file @
45682570
from
pylab
import
*
from
pylab
import
*
import
math
,
sys
,
numpy
as
np
import
math
import
sys
import
numpy
as
np
import
astropy.coordinates
as
coord
import
astropy.coordinates
as
coord
from
astropy.coordinates
import
SkyCoord
from
astropy.coordinates
import
SkyCoord
from
astropy
import
wcs
,
units
as
u
from
astropy
import
wcs
,
units
as
u
...
@@ -14,8 +16,9 @@ def transRaDec2D(ra, dec):
...
@@ -14,8 +16,9 @@ def transRaDec2D(ra, dec):
z1
=
np
.
sin
(
dec
/
57.2957795
)
z1
=
np
.
sin
(
dec
/
57.2957795
)
return
np
.
array
([
x1
,
y1
,
z1
])
return
np
.
array
([
x1
,
y1
,
z1
])
def
ecl2radec
(
lon_ecl
,
lat_ecl
):
def
ecl2radec
(
lon_ecl
,
lat_ecl
):
#
#
convert from ecliptic coordinates to equatorial coordinates
# convert from ecliptic coordinates to equatorial coordinates
c_ecl
=
SkyCoord
(
c_ecl
=
SkyCoord
(
lon
=
lon_ecl
*
u
.
degree
,
lat
=
lat_ecl
*
u
.
degree
,
frame
=
"barycentrictrueecliptic"
lon
=
lon_ecl
*
u
.
degree
,
lat
=
lat_ecl
*
u
.
degree
,
frame
=
"barycentrictrueecliptic"
)
)
...
@@ -25,18 +28,19 @@ def ecl2radec(lon_ecl, lat_ecl):
...
@@ -25,18 +28,19 @@ def ecl2radec(lon_ecl, lat_ecl):
def
radec2ecl
(
ra
,
dec
):
def
radec2ecl
(
ra
,
dec
):
#
#
convert from equatorial coordinates to ecliptic coordinates
# convert from equatorial coordinates to ecliptic coordinates
c_eq
=
SkyCoord
(
ra
=
ra
*
u
.
degree
,
dec
=
dec
*
u
.
degree
,
frame
=
"icrs"
)
c_eq
=
SkyCoord
(
ra
=
ra
*
u
.
degree
,
dec
=
dec
*
u
.
degree
,
frame
=
"icrs"
)
c_ecl
=
c_eq
.
transform_to
(
"barycentrictrueecliptic"
)
c_ecl
=
c_eq
.
transform_to
(
"barycentrictrueecliptic"
)
lon_ecl
,
lat_ecl
=
c_ecl
.
lon
.
degree
,
c_ecl
.
lat
.
degree
lon_ecl
,
lat_ecl
=
c_ecl
.
lon
.
degree
,
c_ecl
.
lat
.
degree
return
lon_ecl
,
lat_ecl
return
lon_ecl
,
lat_ecl
def
cal_FoVcenter_1P_equatorial
(
ra_FieldCenter
,
dec_FieldCenter
,
chipID
=
1
,
pa
=
-
23.5
):
### [ra_FieldCenter, dec_FieldCenter] is the center ra, dec of calibration fileds, such as: NEP, NGC 6397, etc.
def
cal_FoVcenter_1P_equatorial
(
ra_FieldCenter
,
dec_FieldCenter
,
chipID
=
1
,
pa
=-
23.5
):
### [ra_ChipCenter, dec_ChipCenter] is the center ra, dec of the Chip center.
### [ra_PointCenter, dec_PointCenter] is the telescope pointing center.
# [ra_FieldCenter, dec_FieldCenter] is the center ra, dec of calibration fileds, such as: NEP, NGC 6397, etc.
## Calculate PA angle
# [ra_ChipCenter, dec_ChipCenter] is the center ra, dec of the Chip center.
# [ra_PointCenter, dec_PointCenter] is the telescope pointing center.
# Calculate PA angle
chip
=
Chip
(
chipID
)
chip
=
Chip
(
chipID
)
h_ext
=
ImageHeader
.
generateExtensionHeader
(
h_ext
=
ImageHeader
.
generateExtensionHeader
(
...
@@ -75,17 +79,18 @@ def cal_FoVcenter_1P_equatorial(ra_FieldCenter, dec_FieldCenter, chipID = 1, pa
...
@@ -75,17 +79,18 @@ def cal_FoVcenter_1P_equatorial(ra_FieldCenter, dec_FieldCenter, chipID = 1, pa
return
ra_PointCenter
,
dec_PointCenter
,
lon_ecl_PointCenter
,
lat_ecl_PointCenter
return
ra_PointCenter
,
dec_PointCenter
,
lon_ecl_PointCenter
,
lat_ecl_PointCenter
def
cal_FoVcenter_1P_ecliptic
(
lon_ecl_FieldCenter
,
lat_ecl_FieldCenter
,
chipID
=
1
,
pa
=
-
23.5
):
### [ra_FieldCenter, dec_FieldCenter] is the center ra, dec of calibration fileds, such as: NEP, NGC 6397, etc.
def
cal_FoVcenter_1P_ecliptic
(
lon_ecl_FieldCenter
,
lat_ecl_FieldCenter
,
chipID
=
1
,
pa
=-
23.5
):
### [ra_ChipCenter, dec_ChipCenter] is the center ra, dec of the Chip center.
### [ra_PointCenter, dec_PointCenter] is the telescope pointing center.
# [ra_FieldCenter, dec_FieldCenter] is the center ra, dec of calibration fileds, such as: NEP, NGC 6397, etc.
# [ra_ChipCenter, dec_ChipCenter] is the center ra, dec of the Chip center.
# [ra_PointCenter, dec_PointCenter] is the telescope pointing center.
ra_FieldCenter
,
dec_FieldCenter
=
ecl2radec
(
ra_FieldCenter
,
dec_FieldCenter
=
ecl2radec
(
lon_ecl_FieldCenter
,
lat_ecl_FieldCenter
lon_ecl_FieldCenter
,
lat_ecl_FieldCenter
)
)
#
#
Calculate PA angle
# Calculate PA angle
chip
=
Chip
(
chipID
)
chip
=
Chip
(
chipID
)
h_ext
=
ImageHeader
.
generateExtensionHeader
(
h_ext
=
ImageHeader
.
generateExtensionHeader
(
...
@@ -124,7 +129,8 @@ def cal_FoVcenter_1P_ecliptic(lon_ecl_FieldCenter, lat_ecl_FieldCenter, chipID =
...
@@ -124,7 +129,8 @@ def cal_FoVcenter_1P_ecliptic(lon_ecl_FieldCenter, lat_ecl_FieldCenter, chipID =
return
ra_PointCenter
,
dec_PointCenter
,
lon_ecl_PointCenter
,
lat_ecl_PointCenter
return
ra_PointCenter
,
dec_PointCenter
,
lon_ecl_PointCenter
,
lat_ecl_PointCenter
def
getChipCenterRaDec
(
chipID
=
1
,
p_ra
=
60.
,
p_dec
=
-
40.
):
def
getChipCenterRaDec
(
chipID
=
1
,
p_ra
=
60.
,
p_dec
=-
40.
):
chip
=
Chip
(
chipID
)
chip
=
Chip
(
chipID
)
h_ext
=
ImageHeader
.
generateExtensionHeader
(
h_ext
=
ImageHeader
.
generateExtensionHeader
(
...
@@ -149,17 +155,18 @@ def getChipCenterRaDec(chipID = 1, p_ra = 60., p_dec = -40.):
...
@@ -149,17 +155,18 @@ def getChipCenterRaDec(chipID = 1, p_ra = 60., p_dec = -40.):
RA_chip
,
Dec_chip
=
world_point
[
0
][
0
],
world_point
[
0
][
1
]
RA_chip
,
Dec_chip
=
world_point
[
0
][
0
],
world_point
[
0
][
1
]
return
RA_chip
,
Dec_chip
return
RA_chip
,
Dec_chip
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
ra_input
,
dec_input
=
270.00000
,
66.56000
# NEP
ra_input
,
dec_input
=
270.00000
,
66.56000
# NEP
pa
=
23.5
pa
=
23.5
# chipid = 2
# chipid = 2
for
chipid
in
np
.
arange
(
1
,
31
,
1
):
for
chipid
in
np
.
arange
(
1
,
31
,
1
):
ra
,
dec
,
lon_ecl
,
lat_ecl
=
cal_FoVcenter_1P_equatorial
(
ra
,
dec
,
lon_ecl
,
lat_ecl
=
cal_FoVcenter_1P_equatorial
(
ra_input
,
dec_input
,
chipID
=
chipid
,
pa
=
pa
)
ra_input
,
dec_input
,
chipID
=
chipid
,
pa
=
pa
)
print
(
"chip id is %d, chip center [ra,dec] is [%f, %f], pointing center calculated [ra,dec] is [%f, %f]"
%
(
chipid
,
ra_input
,
dec_input
,
ra
,
dec
))
print
(
"chip id is %d, chip center [ra,dec] is [%f, %f], pointing center calculated [ra,dec] is [%f, %f]"
%
(
#for check the result
chipid
,
ra_input
,
dec_input
,
ra
,
dec
))
# for check the result
# testRA, testDec = getChipCenterRaDec(chipID = chipid, p_ra = ra, p_dec = dec)
# testRA, testDec = getChipCenterRaDec(chipID = chipid, p_ra = ra, p_dec = dec)
# print(ra_input-testRA, dec_input-testDec)
# print(ra_input-testRA, dec_input-testDec)
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