Commit 93aabdae authored by GZhao's avatar GZhao
Browse files

update documnet and readme

parent 540738d7
Pipeline #4634 failed with stage
in 0 seconds
......@@ -11,7 +11,7 @@ cpism_refdata/
example/example_output
refdata
*.zip
# Other files and folders
.settings/
......
......@@ -4,22 +4,7 @@
CpicImgSim is a Python library for numerical simulation of the observational images of CSST/CPIC instrument.
## Insallation - 安装
### Requirements - 必要条件
- Python 3.8+
## Usage - 用法
## Development - 开发
## Contributing - 贡献
## Support - 支持
## Citation - 引用
## License - 许可证
## Change Log - 更新日志
程序代码:https://csst-tb.bao.ac.cn/code/csst-sims/csst_cpic_sim
数据文件:https://pan.cstcloud.cn/s/gjMlzXRuRsM 提取密码:i3Zs
程序文档:https://csst-tb.bao.ac.cn/simulation/cpic/index.html
联系方式:南京天光所 赵刚 gzhao@niaot.ac.cn 025-85482316
......@@ -75,6 +75,10 @@ config['bands'] = {
'f743': f'{cpism_refdata}/throughtput/f743_total.fits',
'f883': f'{cpism_refdata}/throughtput/f883_total.fits',
'f565': f'{cpism_refdata}/throughtput/f565_total.fits',
'f520': f'{cpism_refdata}/throughtput/f520.fits',
'f662': f'{cpism_refdata}/throughtput/f662.fits',
'f850': f'{cpism_refdata}/throughtput/f850.fits',
'f720': f'{cpism_refdata}/throughtput/f720.fits',
}
config['diameter'] = 2 # in meters
config['platescale'] = 0.016153
......
......@@ -163,10 +163,15 @@ def focal_convolve(
area = config['aperature_area']
filter = filter_throughput(band)
wave = filter.wave
throughput = filter.throughput
min_wave = wave[0]
max_wave = wave[-1]
wave = filter.wave
throughput_criterion = throughput.max() * 0.1
wave_criterion = wave[throughput > throughput_criterion]
min_wave = wave_criterion[0]
max_wave = wave_criterion[-1]
# print(min_wave, max_wave)
platescale = config['platescale']
iwa = config['mask_width'] / 2
......
......@@ -28,7 +28,7 @@ pupil_grid = make_pupil_grid(pupil_shape[0], pupil_shape[0] * pupil_rate)
aperture = make_circular_aperture(pupil_diameter)(pupil_grid)
aperture = aperture * Field(apm.flatten(), pupil_grid)
second_pupil_size = pupil_diameter * 0.8 # just gauss a number
second_pupil_size = pupil_diameter * 2 # just gauss a number
second_aperture = make_circular_aperture(second_pupil_size)(pupil_grid)
lyot_stop = ComplexSurfaceApodizer(second_aperture, second_aperture*0, lambda _: 2)
......
......@@ -9,7 +9,7 @@
import os
import sys
project = 'CpicImgSim'
project = 'csst_cpic_sim'
copyright = '2023, CSST/CPIC Group'
author = 'CPIC Group'
release = '1.0.0'
......
CpicImgSim package
csst_cpic_sim package
==================
Submodules
----------
CpicImgSim.main module
csst_cpic_sim.main module
----------------------
.. automodule:: CpicImgSim.main
.. automodule:: csst_cpic_sim.main
:members:
:undoc-members:
:show-inheritance:
CpicImgSim.target module
csst_cpic_sim.target module
------------------------
.. automodule:: CpicImgSim.target
.. automodule:: csst_cpic_sim.target
:members:
:undoc-members:
:show-inheritance:
CpicImgSim.optics module
csst_cpic_sim.optics module
------------------------
.. automodule:: CpicImgSim.optics
.. automodule:: csst_cpic_sim.optics
:members:
:undoc-members:
:show-inheritance:
CpicImgSim.camera module
csst_cpic_sim.camera module
------------------------
.. automodule:: CpicImgSim.camera
.. automodule:: csst_cpic_sim.camera
:members:
:undoc-members:
:show-inheritance:
CpicImgSim.io module
csst_cpic_sim.io module
--------------------
.. automodule:: CpicImgSim.io
.. automodule:: csst_cpic_sim.io
:members:
:undoc-members:
:show-inheritance:
CpicImgSim.config module
csst_cpic_sim.config module
------------------------
.. automodule:: CpicImgSim.config
.. automodule:: csst_cpic_sim.config
:members:
:undoc-members:
:show-inheritance:
CpicImgSim.utils module
csst_cpic_sim.utils module
-----------------------
.. automodule:: CpicImgSim.utils
.. automodule:: csst_cpic_sim.utils
:members:
:undoc-members:
:show-inheritance:
......@@ -63,7 +63,7 @@ CpicImgSim.utils module
Module contents
---------------
.. automodule:: CpicImgSim
.. automodule:: csst_cpic_sim
:members:
:undoc-members:
:show-inheritance:
......@@ -3,144 +3,59 @@ CPISM程序安装说明
Python版本
--------------
目前程序只在Python3.9下测试通过。建议尽量使用该版本运行。
如果使用anaconda,可选择使用conda创建虚拟环境后安装使用。
Python >= 3.9
使用setup.py安装
下载和安装
-----------------
联系作者获取软件安装文件,解压缩并执行以下命令:
下载和安装程序文件
```````````````````
使用以下命令,下载和安装程序文件
.. code-block:: bash
cd cpic-img-sim
git clone https://csst-tb.bao.ac.cn/code/csst-sims/csst_cpic_sim.git
cd csst_cpic_sim
python setup.py install
设置环境变量
--------------
Linux 或 Mac 用户
下载数据文件
```````````````````
执行以下命令,打开bash配置文件:
.. code-block:: bash
vi ~/.bash_profile
在文件中增加如下一行:
.. code-block:: bash
export cpism_refdata="/path/to/cpism/reference/"
编辑bash profile文件后,需要source一下,或者重新打开一个terminal。
.. code-block:: bash
source ~/.bash_profile
可以用如下命令检查是否设置成功:
.. code-block:: bash
echo $cpism_refdata
cd $cpism_refdata
ls
Windows 用户
`````````````
执行以下操作:
- 打开系统控制面板。
- 选择“系统” 。
- 选择“高级系统设置”。
- 转到“ 高级 ”选项卡。
- 选择 “环境变量...”。
- 点击用户变量下的“新建...”。
- 变量名为“cpism_refdata”,变量值为cpism_refdata文件夹的完整地址。
- 连续点击“确定”,直到所以对话框都关闭。
下载和安装 Pysynphot 恒星数据
----------------------------------------
CPISM中使用了 `Pysynphot package <https://pysynphot.readthedocs.io/en/latest/appendixa.html>`_ 来处理恒星光谱。为了得到恒星光谱,需要下载Pysynphot的恒星光谱数据。
``CPISM`` 中使用了 Castelli-Kurucz 模型: `ck04models <https://archive.stsci.edu/hlsps/reference-atlases/cdbs/grid/ck04models/>`_.
可以使用如下命令进行安装
.. code-block:: bash
wget http://ssb.stsci.edu/trds/tarfiles/synphot3.tar.gz
下载完成后并解压,文件夹结果如下所示, 需要将trd文件夹加入到环境变量中。
通过科技云盘下载
链接地址:https://pan.cstcloud.cn/s/gjMlzXRuRsM 提取密码:i3Zs
``<path>/grp/redcat/trds/grid/ck04models``
Linux 或者 Mac 用户
````````````````````````````````
.. code-block:: bash
vi ~/.bash_profile
增加如下一行
.. code-block:: bash
export PYSYN_CDBS="<your_path>/grp/redcat/trds"
记得要source一下,或者重新打开一个terminal。
.. code-block:: bash
source ~/.bash_profile
现在可以检查一下是否设置成功
.. code-block:: bash
cd $PYSYN_CDBS
ls
Windows 用户
````````````````
执行以下操作:
- 打开系统控制面板。
- 选择“系统” 。
- 选择“高级系统设置”。
- 转到“ 高级 ”选项卡。
- 选择 “环境变量...”。
- 点击用户变量下的“新建...”。
- 变量名为“PYSYN_CDBS”,变量值为trds文件夹的完整地址。
- 连续点击“确定”,直到所以对话框都关闭。
程序运行配置
------------------
打开cpism_refdata文件夹,编辑cpism_config.yaml文件。可以进行cpism程序的运行配置。
配置输出文件夹
````````````````
使用output_dir参数和relative_path参数配置初始文件夹的位置。
运行测试
-----------------
程序安装测试
```````````````````
.. code-block:: bash
python ./script/cpicsim.py --help
如果程序安装正确则会输出帮助信息。如果是首次运行,则会提示输入数据文件路径。
输入(复制粘贴)路径可进行配置。之后重新运行程序。
- 当relative_path设置为True时,可以通过更改output_dir来更改输出文件夹的相对地址。例如,如果你想将输出文件夹放在cpism_refdata的父文件夹下的output目录中,你可以将output_dir设置为output。
快速测试
```````````````````
.. code-block:: bash
python ./script/cpicsim.py quickrun '*0/15(0.4,0.6)' 10 50 6
- 当relative_path设置为False时,可以通过设置output_dir来更改输出文件夹的绝对地址。
如果运行成功,则可以在当前文件夹下看到生成的fits文件
其他配置
````````````````
- log_level: 日志的输出级别。可选择DEBUG、INFO、WARNING、ERROR、CRITICAL。日志文件存储在output文件夹的LOG目录下。
- tmp_dir: 快速仿真结果的输出文件夹。默认为TMP,存储在output目录的TMP文件夹下。可选择current, 将文件存储于当前文件夹下。
- check_fits_header: 输出文件时检查fits文件头的关键字是否和data model规定的一致,不一致时日志中输出warning信息。默认为False。
程序配置
-----------------
可通过修改数据文件夹下的cpism_config.yaml文件进行仿真参数、输出参数等的配置。
cpic_config_default.yaml对可配置参数进行了示例。
这里建议只针对输入输出路径、星表文件夹等进行配置,而不更改例如望远镜尺寸、角分辨率等的配置。否则可能会产生不可预期的结果。
测试是否安装成功
------------------
执行example.py 文件
.. code-block:: bash
配置脚本并设置环境变量 (可选)
--------------------
通过设计脚本并加入环境变量,可以极大的提高运行的舒适度。
cpicsim.ps1 和 cpicsim 分别是针对Windows 或 Linux/Mac 的脚本。
修改脚本中cpicsim.py的路径后,将script文件夹加入Path路径后,可以直接更简介的方法运行程序。
对于Linux/Mac用户,还需要使用chmod -x cpicsim设置可执行权限
python example.py
.. code-block:: bash
cpicsim quickrun '*0/15(0.4,0.6)' 10 50 6
如果安装成功,会在output目录下SCI、CAL、TMP目录下分别生成科学观测图像文件、定标文件与快速模拟结果。文件结构详见星冕仪0级数据说明。
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
%% Cell type:markdown id: tags:
# 观测效应仿真
%% Cell type:markdown id: tags:
观测效应仿真功能包括背景光仿真和宇宙线仿真两部分。
## 宇宙线仿真
使用CosmicRayFrameMaker()类可以生成宇宙线。在仿真中仅考虑由于mu子导致的宇宙线,这类宇宙线例子会在穿过CCD芯片时导致感光,产生长短不一的细线。
程序中假设宇宙线具有均匀且各项同性的分布。宇宙线事件的数目设置为1个事件/秒/平方厘米(参考WFPC2手册)。
能量、宽度、长度等参考Miles et al.2021、Fisher-Levine 2015等文章,分布如下图所示。
另外对于宇宙线沿路径方向的强度,我们也通过FFT的方式增加了随机性。
另外可以通过修改CosmicRayFrameMaker()类中的参数来调整宇宙线的事件几率、长度、宽度、强度分布等,具体参考代码中的注释。
%% Cell type:code id: tags:
``` python
from CpicImgSim import CosmicRayFrameMaker
from csst_cpic_sim import CosmicRayFrameMaker
cr_gen = CosmicRayFrameMaker()
crs = cr_gen.random_CR_parameter(10000, [1024, 1024])
```
%% Cell type:code id: tags:
``` python
flux = []
length = []
angle = []
sigma = []
for cr in crs:
flux.append(cr.flux)
length.append(cr.length)
angle.append(cr.angle)
sigma.append(cr.sigma)
import numpy as np
import matplotlib.pyplot as plt
from astropy.io import fits
plt.figure(figsize=(10, 3))
plt.subplot(1,3,1)
plt.hist(flux, bins=np.linspace(0, 20000, 20))
plt.title('cosmic ray event energy')
plt.xlabel('electron number')
plt.subplot(1,3,2)
plt.hist(length, bins=np.linspace(0, 30, 10), log=True)
plt.title('path length of CRs')
plt.xlabel('pixels')
plt.subplot(1,3,3)
plt.hist(sigma)
plt.title('path width of CRs')
plt.xlabel('pixels')
plt.tight_layout()
```
%% Output
%% Cell type:markdown id: tags:
使用该类的make_cr_frame()方法可以生成宇宙线图像。
该方法包括两个参数,分别为相机芯片尺寸和曝光时间。下面的代码演示了如何生成宇宙线图像。生成的宇宙线图像为一个二维数组,单位为电子数。
图中仿真了分别为30s曝光和300s曝光的两幅宇宙线图像。
%% Cell type:code id: tags:
``` python
def psf_imshow(psf, vmin=1e-8, vmax=0.1):
focal_img = psf.copy()
focal_img = np.maximum(focal_img, vmin)
focal_img = np.minimum(focal_img, focal_img.max()*vmax)
# image_log = np.log10(focal_img)
image_log = focal_img
plt.imshow(image_log, origin='lower', cmap='gray')
plt.figure(figsize=(10, 6))
plt.subplot(1,2,1)
crframe = cr_gen.make_cr_frame([1032, 1056], 30)
psf_imshow(crframe, vmin=0, vmax=0.01)
plt.title('cosmic ray frame 30s')
plt.subplot(1,2,2)
crframe_300 = cr_gen.make_cr_frame([1056, 1032], 300)
psf_imshow(crframe_300, vmin=0, vmax=0.01)
plt.title('cosmic ray frame 300s')
fits.writeto('image_files/cr_frame_30s.fit', crframe, overwrite=True)
```
%% Output
%% Cell type:markdown id: tags:
sky_frame_maker()函数可以生成天空背景图像,输入参数为观测波段、对应波段的星等/平方角秒、焦面比例尺、图像大小。
程序中天空背景光谱按照太阳光谱估计、考虑仪器的整体光电效率。输出为一个二维数组,反应了焦面处的辐照密度,单位为电子数/秒/平方米。
注意需要乘上望远镜通光口径和曝光时间来得到电子数。
%% Cell type:code id: tags:
``` python
from CpicImgSim import sky_frame_maker
from csst_cpic_sim import sky_frame_maker
area = 3.14 * 100 ** 2
frame = sky_frame_maker('f661', 19, 0.01613, (1024, 1024)) * area
psf_imshow(frame)
plt.title('sky background frame, 19mag/arcsec$^2$@f661')
plt.text(40, 40, f'{frame[1,1]:.3f} photons/pixel/s', color='white')
```
%% Output
Text(40, 40, '0.029 photons/pixel/s')
%% Cell type:code id: tags:
``` python
```
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment