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
Wu Jin
CSST simulation
Commits
1908e835
Commit
1908e835
authored
Jun 16, 2021
by
Xin Zhang
Browse files
sls sim double direct dispersion
parent
0d59783b
Changes
3
Hide whitespace changes
Inline
Side-by-side
ObservationSim/MockObject/Galaxy.py
View file @
1908e835
...
...
@@ -257,7 +257,7 @@ class Galaxy(MockObject):
return
True
,
pos_shear
def
drawObj_slitless
(
self
,
tel
,
pos_img
,
psf_model
,
bandpass_list
,
filt
,
chip
,
nphotons_tot
=
None
,
g1
=
0
,
g2
=
0
,
exptime
=
150.
,
normFilter
=
None
):
exptime
=
150.
,
normFilter
=
None
,
grating_split_pos
=
3685
):
norm_thr_rang_ids
=
normFilter
[
'SENSITIVITY'
]
>
0.001
sedNormFactor
=
getNormFactorForSpecWithABMAG
(
ABMag
=
self
.
param
[
'mag_use_normal'
],
spectrum
=
self
.
sed
,
...
...
@@ -280,6 +280,7 @@ class Galaxy(MockObject):
gsp
=
galsim
.
GSParams
(
folding_threshold
=
folding_threshold
)
# nphotons_sum = 0
xOrderSigPlus
=
{
'A'
:
1.3909419820029296
,
'B'
:
1.4760376591236062
,
'C'
:
4.035447379743442
,
'D'
:
5.5684364343742825
,
'E'
:
16.260021029735388
}
grating_split_pos_chip
=
chip
.
bound
.
xmin
+
grating_split_pos
for
i
in
range
(
len
(
bandpass_list
)):
bandpass
=
bandpass_list
[
i
]
...
...
@@ -302,47 +303,65 @@ class Galaxy(MockObject):
origin_star
=
[
self
.
y_nominal
-
(
starImg
.
center
.
y
-
starImg
.
ymin
),
self
.
x_nominal
-
(
starImg
.
center
.
x
-
starImg
.
xmin
)]
# print(self.y_nominal, starImg.center.y, starImg.ymin)
gal_origin
=
[
origin_star
[
0
],
origin_star
[
1
]]
gal_end
=
[
origin_star
[
0
]
+
starImg
.
array
.
shape
[
0
]
-
1
,
origin_star
[
1
]
+
starImg
.
array
.
shape
[
1
]
-
1
]
if
gal_origin
[
1
]
<
grating_split_pos_chip
<
gal_end
[
1
]:
subSlitPos
=
int
(
grating_split_pos_chip
-
gal_origin
[
1
]
+
1
)
## part img disperse
subImg_p1
=
starImg
.
array
[:,
0
:
subSlitPos
]
star_p1
=
galsim
.
Image
(
subImg_p1
)
origin_p1
=
origin_star
xcenter_p1
=
min
(
self
.
x_nominal
,
grating_split_pos_chip
-
1
)
-
chip
.
bound
.
xmin
ycenter_p1
=
self
.
y_nominal
-
chip
.
bound
.
ymin
sdp_p1
=
SpecDisperser
(
orig_img
=
star_p1
,
xcenter
=
xcenter_p1
,
ycenter
=
ycenter_p1
,
origin
=
origin_p1
,
tar_spec
=
normalSED
,
band_start
=
bandpass
.
blue_limit
*
10
,
band_end
=
bandpass
.
red_limit
*
10
,
conf
=
chip
.
sls_conf
[
0
],
isAlongY
=
0
)
self
.
addSLStoChipImage
(
sdp
=
sdp_p1
,
chip
=
chip
,
xOrderSigPlus
=
xOrderSigPlus
)
subImg_p2
=
starImg
.
array
[:,
subSlitPos
+
1
:
starImg
.
array
.
shape
[
1
]]
star_p2
=
galsim
.
Image
(
subImg_p2
)
origin_p2
=
[
origin_star
[
0
],
grating_split_pos_chip
]
xcenter_p2
=
max
(
self
.
x_nominal
,
grating_split_pos_chip
-
1
)
-
chip
.
bound
.
xmin
ycenter_p2
=
self
.
y_nominal
-
chip
.
bound
.
ymin
sdp_p2
=
SpecDisperser
(
orig_img
=
star_p2
,
xcenter
=
xcenter_p2
,
ycenter
=
ycenter_p2
,
origin
=
origin_p2
,
tar_spec
=
normalSED
,
band_start
=
bandpass
.
blue_limit
*
10
,
band_end
=
bandpass
.
red_limit
*
10
,
conf
=
chip
.
sls_conf
[
1
],
isAlongY
=
0
)
self
.
addSLStoChipImage
(
sdp
=
sdp_p2
,
chip
=
chip
,
xOrderSigPlus
=
xOrderSigPlus
)
del
sdp_p1
del
sdp_p2
elif
grating_split_pos_chip
<=
gal_origin
[
1
]:
sdp
=
SpecDisperser
(
orig_img
=
starImg
,
xcenter
=
self
.
x_nominal
-
chip
.
bound
.
xmin
,
ycenter
=
self
.
y_nominal
-
chip
.
bound
.
ymin
,
origin
=
origin_star
,
tar_spec
=
normalSED
,
band_start
=
bandpass
.
blue_limit
*
10
,
band_end
=
bandpass
.
red_limit
*
10
,
conf
=
chip
.
sls_conf
[
1
],
isAlongY
=
0
)
self
.
addSLStoChipImage
(
sdp
=
sdp
,
chip
=
chip
,
xOrderSigPlus
=
xOrderSigPlus
)
del
sdp
elif
grating_split_pos_chip
>=
gal_end
[
1
]:
sdp
=
SpecDisperser
(
orig_img
=
starImg
,
xcenter
=
self
.
x_nominal
-
chip
.
bound
.
xmin
,
ycenter
=
self
.
y_nominal
-
chip
.
bound
.
ymin
,
origin
=
origin_star
,
tar_spec
=
normalSED
,
band_start
=
bandpass
.
blue_limit
*
10
,
band_end
=
bandpass
.
red_limit
*
10
,
conf
=
chip
.
sls_conf
[
0
],
isAlongY
=
0
)
self
.
addSLStoChipImage
(
sdp
=
sdp
,
chip
=
chip
,
xOrderSigPlus
=
xOrderSigPlus
)
del
sdp
sdp
=
SpecDisperser
(
orig_img
=
starImg
,
xcenter
=
self
.
x_nominal
-
chip
.
bound
.
xmin
,
ycenter
=
self
.
y_nominal
-
chip
.
bound
.
ymin
,
origin
=
origin_star
,
tar_spec
=
normalSED
,
band_start
=
bandpass
.
blue_limit
*
10
,
band_end
=
bandpass
.
red_limit
*
10
,
conf
=
chip
.
sls_conf
[
1
],
isAlongY
=
0
)
spec_orders
=
sdp
.
compute_spec_orders
()
for
k
,
v
in
spec_orders
.
items
():
img_s
=
v
[
0
]
img_s
,
orig_off
=
convolveGaussXorders
(
img_s
,
xOrderSigPlus
[
k
])
origin_order_x
=
v
[
1
]
-
orig_off
origin_order_y
=
v
[
2
]
-
orig_off
specImg
=
galsim
.
ImageF
(
img_s
)
photons
=
galsim
.
PhotonArray
.
makeFromImage
(
specImg
)
photons
.
x
+=
origin_order_x
photons
.
y
+=
origin_order_y
xlen_imf
=
int
(
specImg
.
xmax
-
specImg
.
xmin
+
1
)
ylen_imf
=
int
(
specImg
.
ymax
-
specImg
.
ymin
+
1
)
stamp
=
galsim
.
ImageF
(
xlen_imf
,
ylen_imf
)
stamp
.
wcs
=
self
.
localWCS
stamp
.
setOrigin
(
origin_order_x
,
origin_order_y
)
bounds
=
stamp
.
bounds
&
chip
.
img
.
bounds
if
bounds
.
area
()
==
0
:
continue
stamp
[
bounds
]
=
chip
.
img
[
bounds
]
if
not
big_galaxy
:
chip
.
sensor
.
accumulate
(
photons
,
stamp
)
else
:
sensor
=
galsim
.
Sensor
()
sensor
.
accumulate
(
photons
,
stamp
)
# chip.sensor.accumulate(photons, stamp)
chip
.
img
[
bounds
]
=
stamp
[
bounds
]
del
stamp
del
sdp
del
spec_orders
# print(self.y_nominal, starImg.center.y, starImg.ymin)
del
psf
return
True
,
pos_shear
...
...
ObservationSim/MockObject/MockObject.py
View file @
1908e835
...
...
@@ -168,8 +168,36 @@ class MockObject(object):
del
stamp
return
True
,
pos_shear
def
addSLStoChipImage
(
self
,
sdp
=
None
,
chip
=
None
,
xOrderSigPlus
=
None
):
spec_orders
=
sdp
.
compute_spec_orders
()
for
k
,
v
in
spec_orders
.
items
():
img_s
=
v
[
0
]
img_s
,
orig_off
=
convolveGaussXorders
(
img_s
,
xOrderSigPlus
[
k
])
origin_order_x
=
v
[
1
]
-
orig_off
origin_order_y
=
v
[
2
]
-
orig_off
specImg
=
galsim
.
ImageF
(
img_s
)
photons
=
galsim
.
PhotonArray
.
makeFromImage
(
specImg
)
photons
.
x
+=
origin_order_x
photons
.
y
+=
origin_order_y
xlen_imf
=
int
(
specImg
.
xmax
-
specImg
.
xmin
+
1
)
ylen_imf
=
int
(
specImg
.
ymax
-
specImg
.
ymin
+
1
)
stamp
=
galsim
.
ImageF
(
xlen_imf
,
ylen_imf
)
stamp
.
wcs
=
self
.
localWCS
stamp
.
setOrigin
(
origin_order_x
,
origin_order_y
)
bounds
=
stamp
.
bounds
&
chip
.
img
.
bounds
if
bounds
.
area
()
==
0
:
continue
stamp
[
bounds
]
=
chip
.
img
[
bounds
]
chip
.
sensor
.
accumulate
(
photons
,
stamp
)
chip
.
img
[
bounds
]
=
stamp
[
bounds
]
del
stamp
del
spec_orders
def
drawObj_slitless
(
self
,
tel
,
pos_img
,
psf_model
,
bandpass_list
,
filt
,
chip
,
nphotons_tot
=
None
,
g1
=
0
,
g2
=
0
,
exptime
=
150.
,
normFilter
=
None
):
exptime
=
150.
,
normFilter
=
None
,
grating_split_pos
=
3685
):
norm_thr_rang_ids
=
normFilter
[
'SENSITIVITY'
]
>
0.001
sedNormFactor
=
getNormFactorForSpecWithABMAG
(
ABMag
=
self
.
param
[
'mag_use_normal'
],
spectrum
=
self
.
sed
,
...
...
@@ -192,6 +220,7 @@ class MockObject(object):
xOrderSigPlus
=
{
'A'
:
1.3909419820029296
,
'B'
:
1.4760376591236062
,
'C'
:
4.035447379743442
,
'D'
:
5.5684364343742825
,
'E'
:
16.260021029735388
}
grating_split_pos_chip
=
chip
.
bound
.
xmin
+
grating_split_pos
for
i
in
range
(
len
(
bandpass_list
)):
bandpass
=
bandpass_list
[
i
]
psf
,
pos_shear
=
psf_model
.
get_PSF
(
chip
=
chip
,
pos_img
=
pos_img
,
bandpass
=
bandpass
,
folding_threshold
=
folding_threshold
)
...
...
@@ -203,39 +232,63 @@ class MockObject(object):
origin_star
=
[
self
.
y_nominal
-
(
starImg
.
center
.
y
-
starImg
.
ymin
),
self
.
x_nominal
-
(
starImg
.
center
.
x
-
starImg
.
xmin
)]
sdp
=
SpecDisperser
(
orig_img
=
starImg
,
xcenter
=
self
.
x_nominal
-
chip
.
bound
.
xmin
,
ycenter
=
self
.
y_nominal
-
chip
.
bound
.
ymin
,
origin
=
origin_star
,
tar_spec
=
normalSED
,
band_start
=
bandpass
.
blue_limit
*
10
,
band_end
=
bandpass
.
red_limit
*
10
,
conf
=
chip
.
sls_conf
[
1
],
isAlongY
=
0
)
spec_orders
=
sdp
.
compute_spec_orders
()
for
k
,
v
in
spec_orders
.
items
():
img_s
=
v
[
0
]
img_s
,
orig_off
=
convolveGaussXorders
(
img_s
,
xOrderSigPlus
[
k
])
origin_order_x
=
v
[
1
]
-
orig_off
origin_order_y
=
v
[
2
]
-
orig_off
specImg
=
galsim
.
ImageF
(
img_s
)
photons
=
galsim
.
PhotonArray
.
makeFromImage
(
specImg
)
photons
.
x
+=
origin_order_x
photons
.
y
+=
origin_order_y
xlen_imf
=
int
(
specImg
.
xmax
-
specImg
.
xmin
+
1
)
ylen_imf
=
int
(
specImg
.
ymax
-
specImg
.
ymin
+
1
)
stamp
=
galsim
.
ImageF
(
xlen_imf
,
ylen_imf
)
stamp
.
wcs
=
self
.
localWCS
stamp
.
setOrigin
(
origin_order_x
,
origin_order_y
)
bounds
=
stamp
.
bounds
&
chip
.
img
.
bounds
if
bounds
.
area
()
==
0
:
continue
stamp
[
bounds
]
=
chip
.
img
[
bounds
]
chip
.
sensor
.
accumulate
(
photons
,
stamp
)
chip
.
img
[
bounds
]
=
stamp
[
bounds
]
del
stamp
del
sdp
del
spec_orders
gal_origin
=
[
origin_star
[
0
],
origin_star
[
1
]]
gal_end
=
[
origin_star
[
0
]
+
starImg
.
array
.
shape
[
0
]
-
1
,
origin_star
[
1
]
+
starImg
.
array
.
shape
[
1
]
-
1
]
if
gal_origin
[
1
]
<
grating_split_pos_chip
<
gal_end
[
1
]:
subSlitPos
=
int
(
grating_split_pos_chip
-
gal_origin
[
1
]
+
1
)
## part img disperse
subImg_p1
=
starImg
.
array
[:,
0
:
subSlitPos
]
star_p1
=
galsim
.
Image
(
subImg_p1
)
origin_p1
=
origin_star
xcenter_p1
=
min
(
self
.
x_nominal
,
grating_split_pos_chip
-
1
)
-
chip
.
bound
.
xmin
ycenter_p1
=
self
.
y_nominal
-
chip
.
bound
.
ymin
sdp_p1
=
SpecDisperser
(
orig_img
=
star_p1
,
xcenter
=
xcenter_p1
,
ycenter
=
ycenter_p1
,
origin
=
origin_p1
,
tar_spec
=
normalSED
,
band_start
=
bandpass
.
blue_limit
*
10
,
band_end
=
bandpass
.
red_limit
*
10
,
conf
=
chip
.
sls_conf
[
0
],
isAlongY
=
0
)
self
.
addSLStoChipImage
(
sdp
=
sdp_p1
,
chip
=
chip
,
xOrderSigPlus
=
xOrderSigPlus
)
subImg_p2
=
starImg
.
array
[:,
subSlitPos
+
1
:
starImg
.
array
.
shape
[
1
]]
star_p2
=
galsim
.
Image
(
subImg_p2
)
origin_p2
=
[
origin_star
[
0
],
grating_split_pos_chip
]
xcenter_p2
=
max
(
self
.
x_nominal
,
grating_split_pos_chip
-
1
)
-
chip
.
bound
.
xmin
ycenter_p2
=
self
.
y_nominal
-
chip
.
bound
.
ymin
sdp_p2
=
SpecDisperser
(
orig_img
=
star_p2
,
xcenter
=
xcenter_p2
,
ycenter
=
ycenter_p2
,
origin
=
origin_p2
,
tar_spec
=
normalSED
,
band_start
=
bandpass
.
blue_limit
*
10
,
band_end
=
bandpass
.
red_limit
*
10
,
conf
=
chip
.
sls_conf
[
1
],
isAlongY
=
0
)
self
.
addSLStoChipImage
(
sdp
=
sdp_p2
,
chip
=
chip
,
xOrderSigPlus
=
xOrderSigPlus
)
del
sdp_p1
del
sdp_p2
elif
grating_split_pos_chip
<=
gal_origin
[
1
]:
sdp
=
SpecDisperser
(
orig_img
=
starImg
,
xcenter
=
self
.
x_nominal
-
chip
.
bound
.
xmin
,
ycenter
=
self
.
y_nominal
-
chip
.
bound
.
ymin
,
origin
=
origin_star
,
tar_spec
=
normalSED
,
band_start
=
bandpass
.
blue_limit
*
10
,
band_end
=
bandpass
.
red_limit
*
10
,
conf
=
chip
.
sls_conf
[
1
],
isAlongY
=
0
)
self
.
addSLStoChipImage
(
sdp
=
sdp
,
chip
=
chip
,
xOrderSigPlus
=
xOrderSigPlus
)
del
sdp
elif
grating_split_pos_chip
>=
gal_end
[
1
]:
sdp
=
SpecDisperser
(
orig_img
=
starImg
,
xcenter
=
self
.
x_nominal
-
chip
.
bound
.
xmin
,
ycenter
=
self
.
y_nominal
-
chip
.
bound
.
ymin
,
origin
=
origin_star
,
tar_spec
=
normalSED
,
band_start
=
bandpass
.
blue_limit
*
10
,
band_end
=
bandpass
.
red_limit
*
10
,
conf
=
chip
.
sls_conf
[
0
],
isAlongY
=
0
)
self
.
addSLStoChipImage
(
sdp
=
sdp
,
chip
=
chip
,
xOrderSigPlus
=
xOrderSigPlus
)
del
sdp
del
psf
return
True
,
pos_shear
...
...
ObservationSim/MockObject/SkybackgroundMap.py
View file @
1908e835
...
...
@@ -15,7 +15,7 @@ import os
###calculate sky map by sky SED
def
calculateSkyMap_split_g
(
xLen
=
9232
,
yLen
=
9126
,
blueLimit
=
4200
,
redLimit
=
6500
,
skyfn
=
'param/skybackground/sky_emiss_hubble_50_50_A.dat'
,
conf
=
[
''
],
pixelSize
=
0.074
,
isAlongY
=
0
,
split_pos
=
100000
):
split_pos
=
3685
):
skyMap
=
np
.
ones
([
yLen
,
xLen
],
dtype
=
'float32'
)
# for i in range(len(conf)):
...
...
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