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_cpic_sim
Commits
190f1129
Commit
190f1129
authored
Oct 26, 2024
by
GZhao
Browse files
pep 8 check.
parent
b6e8bc32
Pipeline
#7115
failed with stage
in 0 seconds
Changes
20
Pipelines
1
Show whitespace changes
Inline
Side-by-side
csst_cpic_sim/__init__.py
View file @
190f1129
csst_cpic_sim/camera.py
View file @
190f1129
...
@@ -2,7 +2,6 @@ import math
...
@@ -2,7 +2,6 @@ import math
import
numpy
as
np
import
numpy
as
np
import
scipy.ndimage
as
nd
import
scipy.ndimage
as
nd
from
astropy.io
import
fits
from
astropy.io
import
fits
import
matplotlib.pyplot
as
plt
from
.config
import
config
,
S
from
.config
import
config
,
S
from
.utils
import
region_replace
,
random_seed_select
from
.utils
import
region_replace
,
random_seed_select
...
@@ -13,6 +12,8 @@ cpism_refdata = config['cpism_refdata']
...
@@ -13,6 +12,8 @@ cpism_refdata = config['cpism_refdata']
MAG_SYSTEM
=
config
[
'mag_system'
]
MAG_SYSTEM
=
config
[
'mag_system'
]
solar_spectrum
=
S
.
FileSpectrum
(
config
[
'solar_spectrum'
])
solar_spectrum
=
S
.
FileSpectrum
(
config
[
'solar_spectrum'
])
solar_spectrum
.
convert
(
'photlam'
)
solar_spectrum
.
convert
(
'photlam'
)
def
sky_frame_maker
(
band
,
skybg
,
platescale
,
shape
):
def
sky_frame_maker
(
band
,
skybg
,
platescale
,
shape
):
"""
"""
generate a sky background frame.
generate a sky background frame.
...
@@ -301,7 +302,7 @@ class CpicVisEmccd(object):
...
@@ -301,7 +302,7 @@ class CpicVisEmccd(object):
self
.
_defaut_config
()
self
.
_defaut_config
()
if
config_dict
is
not
None
:
if
config_dict
is
not
None
:
old_switch
=
self
.
switch
old_switch
=
self
.
switch
self
.
__dict__
.
update
(
config_dict
)
#
not safe, be careful
self
.
__dict__
.
update
(
config_dict
)
#
not safe, be careful
old_switch
.
update
(
self
.
switch
)
old_switch
.
update
(
self
.
switch
)
self
.
switch
=
old_switch
self
.
switch
=
old_switch
self
.
config_init
()
self
.
config_init
()
...
@@ -347,7 +348,7 @@ class CpicVisEmccd(object):
...
@@ -347,7 +348,7 @@ class CpicVisEmccd(object):
self
.
flat
=
None
self
.
flat
=
None
self
.
fullwell
=
80_000
self
.
fullwell
=
80_000
self
.
em_fullwell
=
500_000
#
780_000
self
.
em_fullwell
=
500_000
#
780_000
self
.
em_cte
=
0.9996
self
.
em_cte
=
0.9996
self
.
emreg_cal_num
=
10
# 用来加速计算
self
.
emreg_cal_num
=
10
# 用来加速计算
self
.
emreg_num
=
604
self
.
emreg_num
=
604
...
@@ -372,12 +373,10 @@ class CpicVisEmccd(object):
...
@@ -372,12 +373,10 @@ class CpicVisEmccd(object):
self
.
nonlinear_coefficient
=
-
0.1
self
.
nonlinear_coefficient
=
-
0.1
self
.
detector_name
=
'
EM
CCD'
self
.
detector_name
=
'CCD
201-20-EM
'
self
.
ccd_label
=
'CCD
201-20
'
self
.
ccd_label
=
'
EM
CCD'
self
.
pitch_size
=
13
self
.
pitch_size
=
13
def
config_init
(
self
):
def
config_init
(
self
):
"""initialize the camera.
"""initialize the camera.
If the config is set, call this function to update the config.
If the config is set, call this function to update the config.
...
@@ -431,7 +430,6 @@ class CpicVisEmccd(object):
...
@@ -431,7 +430,6 @@ class CpicVisEmccd(object):
cti_trail
=
cte_201
(
self
.
em_cte
,
start
=
0
,
length
=
10
)
cti_trail
=
cte_201
(
self
.
em_cte
,
start
=
0
,
length
=
10
)
self
.
cti_trail
=
cti_trail
/
cti_trail
.
sum
()
self
.
cti_trail
=
cti_trail
/
cti_trail
.
sum
()
def
em_fix_fuc_fit
(
self
,
emgain
):
def
em_fix_fuc_fit
(
self
,
emgain
):
"""Calculate the emgain fix coeficient to fix the gamma distribution.
"""Calculate the emgain fix coeficient to fix the gamma distribution.
The coeficient is from fixing of ideal emgain distribution.
The coeficient is from fixing of ideal emgain distribution.
...
@@ -448,6 +446,7 @@ class CpicVisEmccd(object):
...
@@ -448,6 +446,7 @@ class CpicVisEmccd(object):
"""
"""
emgain
=
np
.
array
([
emgain
]).
flatten
()
emgain
=
np
.
array
([
emgain
]).
flatten
()
p
=
[
0.01014486
,
-
0.00712984
,
-
0.17163414
,
0.09523666
,
-
0.53926089
]
p
=
[
0.01014486
,
-
0.00712984
,
-
0.17163414
,
0.09523666
,
-
0.53926089
]
def
kernel
(
em
):
def
kernel
(
em
):
log_em
=
np
.
log10
(
em
)
log_em
=
np
.
log10
(
em
)
loglog_g
=
np
.
log10
(
log_em
)
loglog_g
=
np
.
log10
(
log_em
)
...
@@ -465,7 +464,6 @@ class CpicVisEmccd(object):
...
@@ -465,7 +464,6 @@ class CpicVisEmccd(object):
output
.
append
(
kernel
(
em
))
output
.
append
(
kernel
(
em
))
return
np
.
array
(
output
)
return
np
.
array
(
output
)
def
bias_frame
(
self
):
def
bias_frame
(
self
):
"""Generate bias frame
"""Generate bias frame
The bias frame contains vertical, horizontal, peper-salt noise, bias drift effect.
The bias frame contains vertical, horizontal, peper-salt noise, bias drift effect.
...
@@ -565,7 +563,7 @@ class CpicVisEmccd(object):
...
@@ -565,7 +563,7 @@ class CpicVisEmccd(object):
# plt.title('vertical pattern')
# plt.title('vertical pattern')
# 接上制冷机后,会有亮暗点
# 接上制冷机后,会有亮暗点
#cooler interfence effect
#
cooler interfence effect
ci_position
=
10
ci_position
=
10
ci_sub_struct
=
80
ci_sub_struct
=
80
ci_sub_exp
=
2.5
ci_sub_exp
=
2.5
...
@@ -646,7 +644,7 @@ class CpicVisEmccd(object):
...
@@ -646,7 +644,7 @@ class CpicVisEmccd(object):
heat
=
self
.
volt
*
self
.
heat_speed
heat
=
self
.
volt
*
self
.
heat_speed
self
.
ccd_temp
=
heat
+
self
.
cooler_temp
+
(
self
.
ccd_temp
-
self
.
cooler_temp
)
*
np
.
exp
(
-
dt
*
self
.
temper_speed
)
self
.
ccd_temp
=
heat
+
self
.
cooler_temp
+
(
self
.
ccd_temp
-
self
.
cooler_temp
)
*
np
.
exp
(
-
dt
*
self
.
temper_speed
)
if
self
.
ccd_temp
<
self
.
cooler_temp
:
#
if
self
.
ccd_temp
<
self
.
cooler_temp
:
self
.
ccd_temp
=
self
.
cooler_temp
self
.
ccd_temp
=
self
.
cooler_temp
self
.
system_time
+=
dt
self
.
system_time
+=
dt
...
@@ -679,7 +677,8 @@ class CpicVisEmccd(object):
...
@@ -679,7 +677,8 @@ class CpicVisEmccd(object):
volt_coe_a
=
-
0.01828
volt_coe_a
=
-
0.01828
volt_coe_b
=
43.61
volt_coe_b
=
43.61
volt_func
=
lambda
es
:
volt_coe_a
*
es
+
volt_coe_b
def
volt_func
(
es
):
return
volt_coe_a
*
es
+
volt_coe_b
self
.
volt
=
volt_func
(
em_set
)
self
.
volt
=
volt_func
(
em_set
)
...
@@ -846,7 +845,6 @@ class CpicVisEmccd(object):
...
@@ -846,7 +845,6 @@ class CpicVisEmccd(object):
image_shutter
=
np
.
random
.
poisson
(
image_shutter
)
image_shutter
=
np
.
random
.
poisson
(
image_shutter
)
image
[:,
self
.
pscan1
+
self
.
ldark
:
-
self
.
oscan1
-
self
.
rdark
]
+=
image_shutter
image
[:,
self
.
pscan1
+
self
.
ldark
:
-
self
.
oscan1
-
self
.
rdark
]
+=
image_shutter
if
self
.
switch
[
'cic'
]:
if
self
.
switch
[
'cic'
]:
cic_frame
=
np
.
zeros
((
self
.
dark_shape
[
0
],
self
.
bias_shape
[
1
]))
+
self
.
cic
cic_frame
=
np
.
zeros
((
self
.
dark_shape
[
0
],
self
.
bias_shape
[
1
]))
+
self
.
cic
image
[
self
.
pscan2
:
-
self
.
oscan2
,
:]
+=
np
.
random
.
poisson
(
cic_frame
)
image
[
self
.
pscan2
:
-
self
.
oscan2
,
:]
+=
np
.
random
.
poisson
(
cic_frame
)
...
@@ -861,7 +859,6 @@ class CpicVisEmccd(object):
...
@@ -861,7 +859,6 @@ class CpicVisEmccd(object):
em_fix
=
self
.
em_fix_fuc_fit
(
emgain
)
*
emgain
em_fix
=
self
.
em_fix_fuc_fit
(
emgain
)
*
emgain
image
=
np
.
random
.
gamma
(
image
,
em_fix
)
+
image
*
(
emgain
-
em_fix
)
image
=
np
.
random
.
gamma
(
image
,
em_fix
)
+
image
*
(
emgain
-
em_fix
)
if
self
.
switch
[
'em_blooming'
]:
if
self
.
switch
[
'em_blooming'
]:
image
=
self
.
emregester_blooming
(
image
)
image
=
self
.
emregester_blooming
(
image
)
...
...
csst_cpic_sim/config.py
View file @
190f1129
import
os
,
yaml
import
os
import
yaml
import
warnings
import
warnings
from
datetime
import
datetime
from
datetime
import
datetime
import
numpy
as
np
import
numpy
as
np
...
@@ -37,8 +38,6 @@ def load_refdata_path(config_aim):
...
@@ -37,8 +38,6 @@ def load_refdata_path(config_aim):
----------
----------
config_aim : str
config_aim : str
config_aim file path
config_aim file path
"""
"""
with
open
(
config_aim
,
'r'
)
as
f
:
with
open
(
config_aim
,
'r'
)
as
f
:
refdata_list
=
yaml
.
load
(
f
,
Loader
=
yaml
.
FullLoader
)
refdata_list
=
yaml
.
load
(
f
,
Loader
=
yaml
.
FullLoader
)
...
@@ -85,8 +84,8 @@ config['platescale'] = 0.016153
...
@@ -85,8 +84,8 @@ config['platescale'] = 0.016153
config
[
'datamodel'
]
=
f
'
{
cpism_refdata
}
/io/csst-cpic-l0.yaml'
config
[
'datamodel'
]
=
f
'
{
cpism_refdata
}
/io/csst-cpic-l0.yaml'
config
[
'log_dir'
]
=
f
'
{
cpism_refdata
}
/log'
config
[
'log_dir'
]
=
f
'
{
cpism_refdata
}
/log'
config
[
'log_level'
]
=
f
'info'
config
[
'log_level'
]
=
'info'
config
[
'output'
]
=
f
'./'
config
[
'output'
]
=
'./'
config
[
'sp2teff_model'
]
=
f
'
{
cpism_refdata
}
/target_model/sptype2teff_lut.json'
config
[
'sp2teff_model'
]
=
f
'
{
cpism_refdata
}
/target_model/sptype2teff_lut.json'
config
[
'dm_pickle'
]
=
f
'
{
cpism_refdata
}
/optics/dm_model.pkl'
config
[
'dm_pickle'
]
=
f
'
{
cpism_refdata
}
/optics/dm_model.pkl'
config
[
'pysyn_refdata'
]
=
f
'
{
cpism_refdata
}
/starmodel/grp/redcat/trds'
config
[
'pysyn_refdata'
]
=
f
'
{
cpism_refdata
}
/starmodel/grp/redcat/trds'
...
@@ -95,9 +94,12 @@ config['csst_format'] = True
...
@@ -95,9 +94,12 @@ config['csst_format'] = True
config
[
'nsample'
]
=
5
config
[
'nsample'
]
=
5
update_able_keys
=
[
update_able_keys
=
[
'apm_file'
,
'actuator_file'
,
'aberration'
,
'log_dir'
,
'log_level'
,
'catalog_folder'
,
'nsample'
,
'csst_format'
,
'output'
,
'check_fits_header'
'apm_file'
,
'actuator_file'
,
'aberration'
,
'log_dir'
,
'log_level'
,
'catalog_folder'
,
'nsample'
,
'csst_format'
,
'output'
,
'check_fits_header'
]
]
def
replace_cpism_refdata
(
def
replace_cpism_refdata
(
config
:
dict
,
config
:
dict
,
output
:
str
=
'$'
)
->
None
:
output
:
str
=
'$'
)
->
None
:
...
@@ -138,6 +140,7 @@ __version__ = '2.0.0'
...
@@ -138,6 +140,7 @@ __version__ = '2.0.0'
with
warnings
.
catch_warnings
():
# pragma: no cover
with
warnings
.
catch_warnings
():
# pragma: no cover
warnings
.
filterwarnings
(
"ignore"
)
warnings
.
filterwarnings
(
"ignore"
)
import
pysynphot
as
S
import
pysynphot
as
S
_
=
S
# S will be used in other modules, but I need to use it once here to pass the lint.
def
setup_config
(
new_config
):
def
setup_config
(
new_config
):
...
@@ -160,8 +163,10 @@ def setup_config(new_config):
...
@@ -160,8 +163,10 @@ def setup_config(new_config):
config
[
'default_band'
]
=
list
(
config
[
'bands'
].
keys
())[
0
]
config
[
'default_band'
]
=
list
(
config
[
'bands'
].
keys
())[
0
]
config
[
'default_filter'
]
=
config
[
'bands'
][
config
[
'default_band'
]]
config
[
'default_filter'
]
=
config
[
'bands'
][
config
[
'default_band'
]]
setup_config
({})
setup_config
({})
def
which_focalplane
(
band
):
def
which_focalplane
(
band
):
"""
"""
Return the name of the focalplane which the band belongs to.
Return the name of the focalplane which the band belongs to.
...
@@ -172,7 +177,6 @@ def which_focalplane(band):
...
@@ -172,7 +177,6 @@ def which_focalplane(band):
band: str
band: str
The name of the band.
The name of the band.
Returns
Returns
--------
--------
str
str
...
@@ -194,6 +198,7 @@ def which_focalplane(band):
...
@@ -194,6 +198,7 @@ def which_focalplane(band):
return
'vis'
return
'vis'
# raise ValueError(f"未知的波段{band}")
# raise ValueError(f"未知的波段{band}")
def
iso_time
(
time
):
def
iso_time
(
time
):
"""Transfer relative time to iso time format
"""Transfer relative time to iso time format
...
@@ -210,7 +215,7 @@ def iso_time(time):
...
@@ -210,7 +215,7 @@ def iso_time(time):
"""
"""
if
isinstance
(
time
,
str
):
if
isinstance
(
time
,
str
):
_
=
datetime
.
fromisoformat
(
time
)
_
=
datetime
.
fromisoformat
(
time
)
# check if it is a iso time
return
time
return
time
utc0
=
config
[
'utc0'
]
utc0
=
config
[
'utc0'
]
...
@@ -218,6 +223,7 @@ def iso_time(time):
...
@@ -218,6 +223,7 @@ def iso_time(time):
time
=
datetime
.
fromtimestamp
(
time0
+
time
)
time
=
datetime
.
fromtimestamp
(
time0
+
time
)
return
time
.
isoformat
()
return
time
.
isoformat
()
def
relative_time
(
time
):
def
relative_time
(
time
):
"""Transfer iso time format to relative time in seconds
"""Transfer iso time format to relative time in seconds
...
@@ -240,4 +246,3 @@ def relative_time(time):
...
@@ -240,4 +246,3 @@ def relative_time(time):
utc0
=
config
[
'utc0'
]
utc0
=
config
[
'utc0'
]
time0
=
datetime
.
timestamp
(
datetime
.
fromisoformat
(
utc0
))
time0
=
datetime
.
timestamp
(
datetime
.
fromisoformat
(
utc0
))
return
datetime
.
timestamp
(
datetime
.
fromisoformat
(
time
))
-
time0
return
datetime
.
timestamp
(
datetime
.
fromisoformat
(
time
))
-
time0
\ No newline at end of file
csst_cpic_sim/io.py
View file @
190f1129
import
yaml
,
os
,
re
import
yaml
import
os
from
datetime
import
datetime
from
datetime
import
datetime
import
numpy
as
np
import
numpy
as
np
import
pandas
as
pd
import
pandas
as
pd
from
astropy.io
import
fits
from
astropy.io
import
fits
from
astropy.coordinates
import
SkyCoord
from
astropy.coordinates
import
SkyCoord
import
astropy.units
as
u
from
.config
import
__version__
,
which_focalplane
from
.config
import
__version__
,
which_focalplane
from
.utils
import
Logger
from
.utils
import
Logger
...
@@ -14,13 +16,16 @@ default_output_dir = config['output']
...
@@ -14,13 +16,16 @@ default_output_dir = config['output']
log_level
=
config
[
'log_level'
]
log_level
=
config
[
'log_level'
]
header_check
=
config
[
'check_fits_header'
]
header_check
=
config
[
'check_fits_header'
]
def
set_up_logger
(
log_dir
):
def
set_up_logger
(
log_dir
):
if
not
os
.
path
.
exists
(
log_dir
):
if
not
os
.
path
.
exists
(
log_dir
):
os
.
makedirs
(
log_dir
)
os
.
makedirs
(
log_dir
)
return
Logger
(
log_dir
+
'/cpism_pack.log'
,
log_level
).
logger
return
Logger
(
log_dir
+
'/cpism_pack.log'
,
log_level
).
logger
log
=
set_up_logger
(
config
[
'log_dir'
])
log
=
set_up_logger
(
config
[
'log_dir'
])
def
check_and_update_fits_header
(
header
):
def
check_and_update_fits_header
(
header
):
"""
"""
Check the header keywords and update the description according to the data model.
Check the header keywords and update the description according to the data model.
...
@@ -43,7 +48,7 @@ def check_and_update_fits_header(header):
...
@@ -43,7 +48,7 @@ def check_and_update_fits_header(header):
data_model
=
yaml
.
load
(
fid
,
Loader
=
yaml
.
FullLoader
)
data_model
=
yaml
.
load
(
fid
,
Loader
=
yaml
.
FullLoader
)
if
'FILETYPE'
in
header
.
keys
():
if
'FILETYPE'
in
header
.
keys
():
header_model
=
data_model
[
'HDU0'
]
header_model
=
data_model
[
'HDU0'
]
hdu
=
'hdu0'
hdu
=
'hdu0'
else
:
else
:
header_model
=
data_model
[
'HDU1'
]
header_model
=
data_model
[
'HDU1'
]
...
@@ -88,7 +93,12 @@ def check_and_update_fits_header(header):
...
@@ -88,7 +93,12 @@ def check_and_update_fits_header(header):
else
:
else
:
key_type
=
'ukn'
key_type
=
'ukn'
# print(f"keyword: {keyword} type: {key_type}, datamodel: {dtype}, value: {value}")
if
key_type
!=
dtype
[
0
:
3
]:
if
key_type
!=
dtype
[
0
:
3
]:
if
key_type
==
'int'
and
dtype
[
0
:
3
]
==
'flo'
:
header
[
keyword
]
=
float
(
header
[
keyword
])
# print('transfer int to float with header keyword:', keyword)
else
:
print_warning
(
print_warning
(
f
"Keyword
{
keyword
}
has wrong type in [
{
hdu
}
].
{
dtype
}
expected,
{
key_type
}
found."
)
f
"Keyword
{
keyword
}
has wrong type in [
{
hdu
}
].
{
dtype
}
expected,
{
key_type
}
found."
)
...
@@ -146,6 +156,27 @@ def obsid_parser(
...
@@ -146,6 +156,27 @@ def obsid_parser(
return
obstype
return
obstype
def
datetime_obj_to_iso
(
time_obj
):
"""
transfer datetime object to iso format used in csst fits file
example '2014-02-10T12:32:12.4'
Parameters
----------
time_obj: datetime.datetime
The datetime object.
Returns
-------
str
The iso format of the datetime object.
"""
isotime
=
time_obj
.
isoformat
(
sep
=
'T'
,
timespec
=
'milliseconds'
)
subsec
=
str
(
round
(
float
(
isotime
[
19
:
22
]),
1
))
return
isotime
[:
18
]
+
subsec
def
datetime_obj_to_mjd
(
time_obj
):
def
datetime_obj_to_mjd
(
time_obj
):
"""
"""
transfer datetime object to mean julian date (MJD).
transfer datetime object to mean julian date (MJD).
...
@@ -225,7 +256,7 @@ def primary_hdu(
...
@@ -225,7 +256,7 @@ def primary_hdu(
header
[
'NEXTEND'
]
=
1
# + parameters['nframe']
header
[
'NEXTEND'
]
=
1
# + parameters['nframe']
# header['GROUPS'] = False
# header['GROUPS'] = False
header
[
'DATE'
]
=
datetime
.
now
().
isoform
at
(
time
spec
=
'seconds'
)
header
[
'DATE'
]
=
datetime
_obj_to_iso
(
d
at
e
time
.
now
()
)
heaer_filename
=
filename
[:
-
4
]
heaer_filename
=
filename
[:
-
4
]
if
len
(
heaer_filename
)
>
68
:
if
len
(
heaer_filename
)
>
68
:
heaer_filename
=
heaer_filename
[:
68
]
heaer_filename
=
heaer_filename
[:
68
]
...
@@ -243,8 +274,10 @@ def primary_hdu(
...
@@ -243,8 +274,10 @@ def primary_hdu(
cstar
=
obs_info
[
'target'
][
'cstar'
]
cstar
=
obs_info
[
'target'
][
'cstar'
]
radec
=
SkyCoord
(
cstar
[
'ra'
],
cstar
[
'dec'
])
radec
=
SkyCoord
(
cstar
[
'ra'
],
cstar
[
'dec'
])
target_name
=
radec
.
to_string
(
'hmsdms'
)
ra_str
=
radec
.
ra
.
to_string
(
unit
=
u
.
hour
,
sep
=
''
,
precision
=
1
,
pad
=
True
)
target_name
=
re
.
sub
(
R
'[hdms\s]'
,
''
,
target_name
)
dec_str
=
radec
.
dec
.
to_string
(
unit
=
u
.
deg
,
sep
=
''
,
alwayssign
=
True
,
pad
=
True
)
target_name
=
ra_str
+
dec_str
header
[
'OBJECT'
]
=
cstar
.
get
(
'name'
,
target_name
)
header
[
'OBJECT'
]
=
cstar
.
get
(
'name'
,
target_name
)
header
[
'TARGET'
]
=
target_name
header
[
'TARGET'
]
=
target_name
header
[
'OBSID'
]
=
str
(
obsid
)
header
[
'OBSID'
]
=
str
(
obsid
)
...
@@ -253,7 +286,7 @@ def primary_hdu(
...
@@ -253,7 +286,7 @@ def primary_hdu(
# telescope information
# telescope information
header
[
'REFFRAME'
]
=
'CSSTGSC-1.0'
header
[
'REFFRAME'
]
=
'CSSTGSC-1.0'
header
[
'DATE-OBS'
]
=
exp_start
.
isoformat
(
timespec
=
'seconds'
)
header
[
'DATE-OBS'
]
=
datetime_obj_to_iso
(
exp_start
)
header
[
'SATESWV'
]
=
'1'
header
[
'SATESWV'
]
=
'1'
header
[
'EXPSTART'
]
=
datetime_obj_to_mjd
(
exp_start
)
header
[
'EXPSTART'
]
=
datetime_obj_to_mjd
(
exp_start
)
...
@@ -368,12 +401,12 @@ def frame_header(obs_info, index, primary_header, camera_dict):
...
@@ -368,12 +401,12 @@ def frame_header(obs_info, index, primary_header, camera_dict):
header
[
'BUNIT'
]
=
'ADU'
header
[
'BUNIT'
]
=
'ADU'
header
[
'FILTER'
]
=
obs_info
[
'band'
]
header
[
'FILTER'
]
=
obs_info
[
'band'
]
header
[
'DETSN'
]
=
'0'
header
[
'DETSN'
]
=
'0
0000000000
'
header
[
'DETNAME'
]
=
camera_config
[
'detector_name'
]
header
[
'DETNAME'
]
=
camera_config
[
'detector_name'
]
header
[
'CHIPLAB'
]
=
camera_config
[
'ccd_label'
]
header
[
'CHIPLAB'
]
=
camera_config
[
'ccd_label'
]
header
[
'DEWTEMP'
]
=
float
(
camera_config
[
'cooler_temp'
])
header
[
'DEWTEMP'
]
=
float
(
camera_config
[
'cooler_temp'
])
+
273.15
frame_info
=
obs_info
[
'frame_info'
][
index
]
frame_info
=
obs_info
[
'frame_info'
][
index
]
header
[
'CHIPTEMP'
]
=
float
(
frame_info
[
'chiptemp'
])
header
[
'CHIPTEMP'
]
=
float
(
frame_info
[
'chiptemp'
])
+
273.15
header
[
'DETSIZE'
]
=
f
"
{
imgszx
}
*
{
imgszy
}
"
header
[
'DETSIZE'
]
=
f
"
{
imgszx
}
*
{
imgszy
}
"
header
[
'IMGINDEX'
]
=
index
+
1
header
[
'IMGINDEX'
]
=
index
+
1
...
@@ -513,7 +546,6 @@ def save_fits_simple(images, obs_info, output_folder='./'):
...
@@ -513,7 +546,6 @@ def save_fits_simple(images, obs_info, output_folder='./'):
shift
=
obs_info
[
'shift'
]
shift
=
obs_info
[
'shift'
]
header
[
'shift'
]
=
f
"x:
{
shift
[
0
]
}
,y:
{
shift
[
1
]
}
"
header
[
'shift'
]
=
f
"x:
{
shift
[
0
]
}
,y:
{
shift
[
1
]
}
"
fullname
=
os
.
path
.
join
(
output_folder
,
filename
)
fullname
=
os
.
path
.
join
(
output_folder
,
filename
)
print
(
fullname
)
print
(
fullname
)
if
not
os
.
path
.
exists
(
output_folder
):
if
not
os
.
path
.
exists
(
output_folder
):
...
...
csst_cpic_sim/main.py
View file @
190f1129
import
argparse
,
sys
,
tqdm
,
time
,
os
,
yaml
import
argparse
import
tqdm
import
time
import
os
import
yaml
from
glob
import
glob
from
glob
import
glob
from
datetime
import
datetime
from
datetime
import
datetime
import
traceback
import
traceback
...
@@ -25,8 +30,8 @@ def vis_observation(
...
@@ -25,8 +30,8 @@ def vis_observation(
shift
:
list
=
[
0
,
0
],
shift
:
list
=
[
0
,
0
],
gnc_info
:
dict
=
{},
gnc_info
:
dict
=
{},
csst_format
:
bool
=
True
,
csst_format
:
bool
=
True
,
camera
=
CpicVisEmccd
(),
camera
=
CpicVisEmccd
(),
crmaker
=
CosmicRayFrameMaker
(),
crmaker
=
CosmicRayFrameMaker
(),
nsample
:
int
=
1
,
nsample
:
int
=
1
,
emgain
=
None
,
emgain
=
None
,
prograss_bar
=
None
,
prograss_bar
=
None
,
...
@@ -49,7 +54,8 @@ def vis_observation(
...
@@ -49,7 +54,8 @@ def vis_observation(
emset: int
emset: int
EM gain setting value. 1023(0x3FF) for ~1.0× EM gain.
EM gain setting value. 1023(0x3FF) for ~1.0× EM gain.
obsid: int
obsid: int
observation ID. Start from 4 for CPIC, 01 for science observation. See the input of io.obsid_parser for more details.
observation ID. Start from 4 for CPIC, 01 for science observation.
See the input of io.obsid_parser for more details.
rotation: float
rotation: float
rotation of the telescope. in unit of degree. 0 means North is up.
rotation of the telescope. in unit of degree. 0 means North is up.
shift: list
shift: list
...
@@ -174,6 +180,7 @@ def vis_observation(
...
@@ -174,6 +180,7 @@ def vis_observation(
print
(
f
'
\r
Done [
{
time
.
time
()
-
start_time
:
.
1
f
}
s] '
)
print
(
f
'
\r
Done [
{
time
.
time
()
-
start_time
:
.
1
f
}
s] '
)
return
image_cube
return
image_cube
def
quick_run_v2
(
def
quick_run_v2
(
target_str
:
str
,
target_str
:
str
,
band
:
str
,
band
:
str
,
...
@@ -183,9 +190,9 @@ def quick_run_v2(
...
@@ -183,9 +190,9 @@ def quick_run_v2(
skybg
:
float
=
None
,
skybg
:
float
=
None
,
rotation
:
float
=
0
,
rotation
:
float
=
0
,
shift
:
list
=
[
0
,
0
],
shift
:
list
=
[
0
,
0
],
emset_input
:
bool
=
False
,
emset_input
:
bool
=
False
,
cr_frame
:
bool
=
True
,
cr_frame
:
bool
=
True
,
camera_effect
:
bool
=
True
,
camera_effect
:
bool
=
True
,
prograss_bar
=
False
,
prograss_bar
=
False
,
output
=
'./'
)
->
np
.
ndarray
:
output
=
'./'
)
->
np
.
ndarray
:
...
@@ -226,7 +233,6 @@ def quick_run_v2(
...
@@ -226,7 +233,6 @@ def quick_run_v2(
"""
"""
print
(
f
'Quick Run:
{
target_str
}
'
)
print
(
f
'Quick Run:
{
target_str
}
'
)
log
.
debug
(
log
.
debug
(
f
"""input parameters:
f
"""input parameters:
target_str:
{
target_str
}
target_str:
{
target_str
}
...
@@ -283,10 +289,9 @@ def quick_run_v2(
...
@@ -283,10 +289,9 @@ def quick_run_v2(
)
)
def
deduplicate_names_add_count
(
names
:
list
):
def
deduplicate_names_add_count
(
names
:
list
):
"""remove duplicate names and add count"""
"""remove duplicate names and add count"""
for
i
in
range
(
len
(
names
)
-
1
,
-
1
,
-
1
):
for
i
in
range
(
len
(
names
)
-
1
,
-
1
,
-
1
):
if
names
.
count
(
names
[
i
])
>
1
:
if
names
.
count
(
names
[
i
])
>
1
:
names
[
i
]
=
names
[
i
]
+
'_'
+
str
(
names
.
count
(
names
[
i
]))
names
[
i
]
=
names
[
i
]
+
'_'
+
str
(
names
.
count
(
names
[
i
]))
...
@@ -337,7 +342,6 @@ def observation_simulation_from_config(obs_file, config_file):
...
@@ -337,7 +342,6 @@ def observation_simulation_from_config(obs_file, config_file):
if
not
file_list
:
if
not
file_list
:
log
.
warning
(
f
"No observation file found in
{
obs_file
}
"
)
log
.
warning
(
f
"No observation file found in
{
obs_file
}
"
)
for
ind_target
,
file
in
enumerate
(
file_list
):
for
ind_target
,
file
in
enumerate
(
file_list
):
try
:
try
:
with
open
(
file
,
'r'
)
as
fid
:
with
open
(
file
,
'r'
)
as
fid
:
...
@@ -405,6 +409,7 @@ def observation_simulation_from_config(obs_file, config_file):
...
@@ -405,6 +409,7 @@ def observation_simulation_from_config(obs_file, config_file):
except
Exception
as
e
:
except
Exception
as
e
:
log
.
error
(
f
"
{
info_text
}
failed with
{
type
(
e
).
__name__
}{
e
}
.
\n\n
{
traceback
.
format_exc
()
}
"
)
log
.
error
(
f
"
{
info_text
}
failed with
{
type
(
e
).
__name__
}{
e
}
.
\n\n
{
traceback
.
format_exc
()
}
"
)
def
main
(
argv
=
None
):
def
main
(
argv
=
None
):
"""
"""
Command line interface of csst_cpic_sim
Command line interface of csst_cpic_sim
...
@@ -426,10 +431,18 @@ def main(argv=None):
...
@@ -426,10 +431,18 @@ def main(argv=None):
parser_quickrun
.
add_argument
(
'nframe'
,
type
=
int
,
help
=
'number of frames'
)
parser_quickrun
.
add_argument
(
'nframe'
,
type
=
int
,
help
=
'number of frames'
)
parser_quickrun
.
add_argument
(
'-b'
,
'--band'
,
type
=
str
,
default
=
'f661'
,
help
=
'band, one of f565/f661/f743/f883'
)
parser_quickrun
.
add_argument
(
'-b'
,
'--band'
,
type
=
str
,
default
=
'f661'
,
help
=
'band, one of f565/f661/f743/f883'
)
parser_quickrun
.
add_argument
(
'-r'
,
'--rotation'
,
type
=
float
,
default
=
0
,
help
=
'rotation angle [degree]'
)
parser_quickrun
.
add_argument
(
'-r'
,
'--rotation'
,
type
=
float
,
default
=
0
,
help
=
'rotation angle [degree]'
)
parser_quickrun
.
add_argument
(
'-s'
,
'--skybk'
,
type
=
float
,
default
=
21
,
help
=
'magnitude of sky background [mag/arcsec^2]'
)
parser_quickrun
.
add_argument
(
parser_quickrun
.
add_argument
(
'-f'
,
'--cr_frame'
,
action
=
'store_true'
,
help
=
'if True, cosmic ray frame will be added'
)
'-s'
,
'--skybk'
,
type
=
float
,
default
=
21
,
parser_quickrun
.
add_argument
(
'-e'
,
'--emset'
,
action
=
'store_true'
,
help
=
'if True, emgain set value will be used as input'
)
help
=
'magnitude of sky background [mag/arcsec^2]'
)
parser_quickrun
.
add_argument
(
'-c'
,
'--camera_effect'
,
action
=
'store_true'
,
help
=
'if True, camera effect will be added'
)
parser_quickrun
.
add_argument
(
'-f'
,
'--cr_frame'
,
action
=
'store_true'
,
help
=
'if True, cosmic ray frame will be added'
)
parser_quickrun
.
add_argument
(
'-e'
,
'--emset'
,
action
=
'store_true'
,
help
=
'if True, emgain set value will be used as input'
)
parser_quickrun
.
add_argument
(
'-c'
,
'--camera_effect'
,
action
=
'store_true'
,
help
=
'if True, camera effect will be added'
)
parser_quickrun
.
add_argument
(
'-o'
,
'--output'
,
type
=
str
,
default
=
'./'
,
help
=
'output folder'
)
parser_quickrun
.
add_argument
(
'-o'
,
'--output'
,
type
=
str
,
default
=
'./'
,
help
=
'output folder'
)
def
quick_run_call
(
args
):
def
quick_run_call
(
args
):
...
...
csst_cpic_sim/optics.py
View file @
190f1129
...
@@ -133,7 +133,7 @@ def focal_convolve(
...
@@ -133,7 +133,7 @@ def focal_convolve(
rotation
:
float
=
0
,
rotation
:
float
=
0
,
nsample
:
int
=
5
,
nsample
:
int
=
5
,
error
:
float
=
0
,
error
:
float
=
0
,
platesize
:
list
=
[
1024
,
1024
])
->
np
.
ndarray
:
platesize
:
list
=
[
1024
,
1024
])
->
np
.
ndarray
:
"""PSF convolution of the ideal focus image.
"""PSF convolution of the ideal focus image.
Parameters
Parameters
...
...
csst_cpic_sim/psf_simulation.py
View file @
190f1129
import
os
,
pickle
import
os
import
pickle
import
numpy
as
np
import
numpy
as
np
from
astropy.io
import
fits
from
astropy.io
import
fits
...
@@ -73,6 +74,7 @@ aberration = SurfaceApodizer(
...
@@ -73,6 +74,7 @@ aberration = SurfaceApodizer(
aberration_distance
=
80
*
focal_length
aberration_distance
=
80
*
focal_length
aberration
=
SurfaceAberrationAtDistance
(
aberration
,
aberration_distance
)
aberration
=
SurfaceAberrationAtDistance
(
aberration
,
aberration_distance
)
def
single_band_masked_psf
(
def
single_band_masked_psf
(
wavelength
:
float
,
wavelength
:
float
,
error
:
float
=
0
,
error
:
float
=
0
,
...
@@ -99,8 +101,10 @@ def single_band_masked_psf(
...
@@ -99,8 +101,10 @@ def single_band_masked_psf(
wf
=
Wavefront
(
aperture
,
wavelength
)
wf
=
Wavefront
(
aperture
,
wavelength
)
shift
=
np
.
array
(
shift
)
*
ARCSEC2RAD
/
2
shift
=
np
.
array
(
shift
)
*
ARCSEC2RAD
/
2
tiptilt_mirror
.
actuators
=
shift
tiptilt_mirror
.
actuators
=
shift
wf
=
tiptilt_mirror
(
wf
)
wf
=
aberration
(
wf
)
wf
=
aberration
(
wf
)
wf
=
tiptilt_mirror
(
wf
)
first_focal
=
prop_full_frame
(
deformable_mirror
(
wf
))
first_focal
=
prop_full_frame
(
deformable_mirror
(
wf
))
strength
=
first_focal
.
intensity
.
shaped
.
sum
()
strength
=
first_focal
.
intensity
.
shaped
.
sum
()
...
@@ -109,6 +113,41 @@ def single_band_masked_psf(
...
@@ -109,6 +113,41 @@ def single_band_masked_psf(
psf
=
second_focal
.
intensity
.
shaped
psf
=
second_focal
.
intensity
.
shaped
return
psf
/
strength
return
psf
/
strength
def
single_band_shift_psf
(
wavelength
:
float
,
error
:
float
=
0
,
shift
:
list
=
[
0
,
0
])
->
np
.
ndarray
:
"""CPIC PSF considering the focal plane mask.
Parameters
-----------
wavelength : float
observation wavelength in meter
error : float
deformable mirror control error in nm
shift : list
angular shift of the target in arcsec.
Returns
----------
psf : np.ndarray
psf in the focal plane. Normalized as the input flux is 1.
(Note that total flux of the psf is not 1, because it is masked)
"""
error
=
np
.
random
.
normal
(
0
,
error
*
1e-9
,
actuator
.
shape
)
deformable_mirror
.
actuators
=
actuator
+
error
wf
=
Wavefront
(
aperture
,
wavelength
)
shift
=
np
.
array
(
shift
)
*
ARCSEC2RAD
/
2
tiptilt_mirror
.
actuators
=
shift
wf
=
aberration
(
wf
)
wf
=
tiptilt_mirror
(
wf
)
first_focal
=
prop_full_frame
(
deformable_mirror
(
wf
))
image
=
np
.
array
(
first_focal
.
intensity
.
shaped
)
return
image
/
image
.
sum
()
def
single_band_psf
(
def
single_band_psf
(
wavelength
:
float
,
wavelength
:
float
,
error
:
float
=
0
)
->
np
.
ndarray
:
error
:
float
=
0
)
->
np
.
ndarray
:
...
@@ -126,7 +165,6 @@ def single_band_psf(
...
@@ -126,7 +165,6 @@ def single_band_psf(
----------
----------
psf : np.ndarray
psf : np.ndarray
psf in the focal plane. Normalized. The total flux is 1.
psf in the focal plane. Normalized. The total flux is 1.
"""
"""
error
=
np
.
random
.
normal
(
0
,
error
*
1e-9
,
actuator
.
shape
)
error
=
np
.
random
.
normal
(
0
,
error
*
1e-9
,
actuator
.
shape
)
deformable_mirror
.
actuators
=
actuator
+
error
deformable_mirror
.
actuators
=
actuator
+
error
...
@@ -136,7 +174,6 @@ def single_band_psf(
...
@@ -136,7 +174,6 @@ def single_band_psf(
image
=
np
.
array
(
first_focal
.
intensity
.
shaped
)
image
=
np
.
array
(
first_focal
.
intensity
.
shaped
)
return
image
/
image
.
sum
()
return
image
/
image
.
sum
()
# def single_band_psf(wavelength, error=0, aber_phase=None):
# def single_band_psf(wavelength, error=0, aber_phase=None):
# error = np.random.normal(0, error*1e-9, actuator.shape)
# error = np.random.normal(0, error*1e-9, actuator.shape)
# deformable_mirror.actuators = actuator + error
# deformable_mirror.actuators = actuator + error
...
...
csst_cpic_sim/target.py
View file @
190f1129
import
os
,
re
,
json
,
yaml
import
os
import
re
import
json
import
yaml
from
typing
import
Union
from
typing
import
Union
import
numpy
as
np
import
numpy
as
np
from
scipy
import
constants
from
scipy
import
constants
...
@@ -24,6 +27,7 @@ BCC_MODEL_FOLDER = config['bcc_model']
...
@@ -24,6 +27,7 @@ BCC_MODEL_FOLDER = config['bcc_model']
MAG_SYSTEM
=
config
[
'mag_system'
]
MAG_SYSTEM
=
config
[
'mag_system'
]
CATALOG_CACHE
=
{}
CATALOG_CACHE
=
{}
class
AlbedoCat
(
S
.
spectrum
.
TabularSpectralElement
,
S
.
catalog
.
Icat
):
class
AlbedoCat
(
S
.
spectrum
.
TabularSpectralElement
,
S
.
catalog
.
Icat
):
"""Generate albedo spectrum from the planet reflection model in Batalha et al. 2018
"""Generate albedo spectrum from the planet reflection model in Batalha et al. 2018
...
@@ -48,13 +52,14 @@ class AlbedoCat(S.spectrum.TabularSpectralElement, S.catalog.Icat):
...
@@ -48,13 +52,14 @@ class AlbedoCat(S.spectrum.TabularSpectralElement, S.catalog.Icat):
"""
"""
def
__init__
(
self
,
def
__init__
(
self
,
phase
:
float
,
phase
:
float
,
metallicity
:
float
,
metallicity
:
float
,
f_sed
:
float
,
f_sed
:
float
,
):
):
catname
=
'BCCalbedo'
catname
=
'BCCalbedo'
self
.
isAnalytic
=
False
self
.
isAnalytic
=
False
self
.
name
=
f
"
{
catname
}
_
{
phase
}
_
{
metallicity
}
_
{
f_sed
}
"
self
.
name
=
f
"
{
catname
}
_
{
phase
}
_
{
metallicity
}
_
{
f_sed
}
"
self
.
parameter_names
=
[
'phase'
,
'metallicity'
,
'f_sed'
]
self
.
parameter_names
=
[
'phase'
,
'metallicity'
,
'f_sed'
]
self
.
catalog_folder
=
BCC_MODEL_FOLDER
self
.
catalog_folder
=
BCC_MODEL_FOLDER
...
@@ -70,15 +75,15 @@ class AlbedoCat(S.spectrum.TabularSpectralElement, S.catalog.Icat):
...
@@ -70,15 +75,15 @@ class AlbedoCat(S.spectrum.TabularSpectralElement, S.catalog.Icat):
indices
=
self
.
_getArgs
(
indexList
,
filenameList
)
indices
=
self
.
_getArgs
(
indexList
,
filenameList
)
CATALOG_CACHE
[
filename
]
=
indices
CATALOG_CACHE
[
filename
]
=
indices
list0
,
list1
=
self
.
_breakList
(
indices
,
0
,
phase
)
list0
,
list1
=
self
.
_breakList
(
indices
,
0
,
phase
)
list2
,
list3
=
self
.
_breakList
(
list0
,
1
,
metallicity
)
list2
,
list3
=
self
.
_breakList
(
list0
,
1
,
metallicity
)
list4
,
list5
=
self
.
_breakList
(
list1
,
1
,
metallicity
)
list4
,
list5
=
self
.
_breakList
(
list1
,
1
,
metallicity
)
list6
,
list7
=
self
.
_breakList
(
list2
,
2
,
f_sed
)
list6
,
list7
=
self
.
_breakList
(
list2
,
2
,
f_sed
)
list8
,
list9
=
self
.
_breakList
(
list3
,
2
,
f_sed
)
list8
,
list9
=
self
.
_breakList
(
list3
,
2
,
f_sed
)
list10
,
list11
=
self
.
_breakList
(
list4
,
2
,
f_sed
)
list10
,
list11
=
self
.
_breakList
(
list4
,
2
,
f_sed
)
list12
,
list13
=
self
.
_breakList
(
list5
,
2
,
f_sed
)
list12
,
list13
=
self
.
_breakList
(
list5
,
2
,
f_sed
)
sp1
,
wave
,
waveunits
=
self
.
_getSpectrum
(
list6
[
0
],
catname
,
wave_output
=
True
)
sp1
,
wave
,
waveunits
=
self
.
_getSpectrum
(
list6
[
0
],
catname
,
wave_output
=
True
)
sp2
=
self
.
_getSpectrum
(
list7
[
0
],
catname
)
sp2
=
self
.
_getSpectrum
(
list7
[
0
],
catname
)
...
@@ -255,6 +260,7 @@ def star_photlam(
...
@@ -255,6 +260,7 @@ def star_photlam(
star_sp
.
convert
(
'photlam'
)
star_sp
.
convert
(
'photlam'
)
return
star_sp
return
star_sp
def
standard_spectrum
(
def
standard_spectrum
(
magnitude
:
float
)
->
S
.
ArraySpectrum
:
magnitude
:
float
)
->
S
.
ArraySpectrum
:
"""Standard spectrum of magnitude system.
"""Standard spectrum of magnitude system.
...
@@ -283,6 +289,7 @@ def standard_spectrum(
...
@@ -283,6 +289,7 @@ def standard_spectrum(
std_spectrum
.
convert
(
'photlam'
)
std_spectrum
.
convert
(
'photlam'
)
return
std_spectrum
return
std_spectrum
def
bcc_spectrum
(
def
bcc_spectrum
(
coe_cloud
:
float
,
coe_cloud
:
float
,
coe_metalicity
:
float
)
->
S
.
spectrum
.
ArraySpectralElement
:
coe_metalicity
:
float
)
->
S
.
spectrum
.
ArraySpectralElement
:
...
@@ -563,19 +570,20 @@ class TargetOjbect(object):
...
@@ -563,19 +570,20 @@ class TargetOjbect(object):
elif
sp_model
==
'bcc_planet'
:
elif
sp_model
==
'bcc_planet'
:
coe_c
,
coe_m
=
planet
.
get
(
'coe_cloud'
,
2
),
planet
.
get
(
'coe_metal'
,
0
)
coe_c
,
coe_m
=
planet
.
get
(
'coe_cloud'
,
2
),
planet
.
get
(
'coe_metal'
,
0
)
albedo_spect
=
bcc_spectrum
(
coe_c
,
coe_m
)
albedo_spect
=
bcc_spectrum
(
coe_c
,
coe_m
)
else
:
#
sp_model == 'template_planet'
else
:
#
sp_model == 'template_planet'
albedo_spect
=
S
.
FileBandpass
(
detect_template_path
(
planet
[
'template'
]))
albedo_spect
=
S
.
FileBandpass
(
detect_template_path
(
planet
[
'template'
]))
contrast
=
1
contrast
=
1
self
.
spectrum
=
cstar
.
spectrum
*
albedo_spect
*
contrast
self
.
spectrum
=
cstar
.
spectrum
*
albedo_spect
*
contrast
def
planet_contrast
(
def
planet_contrast
(
planet_x_au
:
float
,
planet_x_au
:
float
,
planet_y_au
:
float
,
planet_y_au
:
float
,
phase_angle
:
float
,
phase_angle
:
float
,
radius
:
float
)
->
float
:
radius
:
float
)
->
float
:
"""
"""
c
alculate the contrast of a planet
C
alculate the contrast of a planet
.
Parameters
Parameters
----------
----------
...
@@ -610,10 +618,11 @@ def planet_contrast(
...
@@ -610,10 +618,11 @@ def planet_contrast(
contrast
=
(
radius
/
sep_3d
*
R_JUPITER_METER
/
AU_METER
)
**
2
*
phase
contrast
=
(
radius
/
sep_3d
*
R_JUPITER_METER
/
AU_METER
)
**
2
*
phase
return
contrast
return
contrast
def
spectrum_generator
(
def
spectrum_generator
(
targets
:
dict
)
->
list
:
targets
:
dict
)
->
list
:
"""
"""
g
enerate the spectrum due to the input target list
G
enerate the spectrum due to the input target list
.
Parameters
Parameters
----------
----------
...
@@ -682,7 +691,7 @@ def target_file_load(
...
@@ -682,7 +691,7 @@ def target_file_load(
if
not
target
:
# None or empty string
if
not
target
:
# None or empty string
return
{}
return
{}
if
isinstance
(
target
,
str
):
#
filename or formatted string
if
isinstance
(
target
,
str
):
#
filename or formatted string
target
=
target
.
strip
()
target
=
target
.
strip
()
if
not
target
:
if
not
target
:
return
{}
return
{}
...
...
csst_cpic_sim/utils.py
View file @
190f1129
example/observations/01_bias.yaml
View file @
190f1129
band
:
f66
1
band
:
f66
2
emgain
:
1
emgain
:
1
emset
:
-1
emset
:
-1
expt
:
10
expt
:
10
...
...
example/observations/02_dark.yaml
View file @
190f1129
band
:
f66
1
band
:
f66
2
emgain
:
200
emgain
:
200
emset
:
-1
emset
:
-1
expt
:
100
expt
:
100
...
...
example/observations/03_flat.yaml
View file @
190f1129
band
:
f5
65
band
:
f5
20
emgain
:
1
emgain
:
1
emset
:
-1
emset
:
-1
expt
:
10
expt
:
10
...
...
example/observations/04_bkg.yaml
View file @
190f1129
band
:
f5
65
band
:
f5
20
emgain
:
50
emgain
:
50
emset
:
-1
emset
:
-1
expt
:
50
expt
:
50
...
...
example/observations/05_sci.yaml
View file @
190f1129
band
:
f66
1
band
:
f66
2
emgain
:
50
emgain
:
50
emset
:
-1
emset
:
-1
expt
:
20
expt
:
20
...
...
example/observations/06_density.yaml
View file @
190f1129
band
:
f5
65
band
:
f5
20
emgain
:
1
emgain
:
1
emset
:
-1
emset
:
-1
expt
:
10
expt
:
10
...
...
example/observations/07_cals.yaml
View file @
190f1129
band
:
f5
65
band
:
f5
20
emgain
:
2
emgain
:
2
emset
:
-1
emset
:
-1
expt
:
10
expt
:
10
...
...
example/observations/08_laser.yaml
View file @
190f1129
band
:
f
565
band
:
f
720
emgain
:
2
emgain
:
2
emset
:
-1
emset
:
-1
expt
:
10
expt
:
10
...
...
example/observations/09_disk.yaml
View file @
190f1129
band
:
f5
65
band
:
f5
20
emgain
:
50
emgain
:
50
emset
:
-1
emset
:
-1
expt
:
10
expt
:
10
...
...
refdata/cpism_config_default.yaml
View file @
190f1129
...
@@ -12,6 +12,10 @@ bands:
...
@@ -12,6 +12,10 @@ bands:
f743
:
${cpism_refdata}/throughtput/f743_total.fits
f743
:
${cpism_refdata}/throughtput/f743_total.fits
f883
:
${cpism_refdata}/throughtput/f883_total.fits
f883
:
${cpism_refdata}/throughtput/f883_total.fits
f565
:
${cpism_refdata}/throughtput/f565_total.fits
f565
:
${cpism_refdata}/throughtput/f565_total.fits
f520
:
${cpism_refdata}/throughtput/f520.fits
f662
:
${cpism_refdata}/throughtput/f662.fits
f850
:
${cpism_refdata}/throughtput/f850.fits
f720
:
${cpism_refdata}/throughtput/f720.fits
diameter
:
2
diameter
:
2
platescale
:
0.016153
platescale
:
0.016153
datamodel
:
${cpism_refdata}/io/csst-cpic-l0.yaml
datamodel
:
${cpism_refdata}/io/csst-cpic-l0.yaml
...
...
script/cpicsim.py
View file @
190f1129
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