ch08_csst_common.rst 9.16 KB
Newer Older
BO ZHANG's avatar
BO ZHANG committed
1
2
3
Using ``csst_common``
=====================

BO ZHANG's avatar
tweaks    
BO ZHANG committed
4
5
6
7
In this chapter, we introduce the basic usages of some IMPORTANT functions / classes in ``csst_common``.
Package source code and installation guide can be found in the link below.

- https://csst-tb.bao.ac.cn/code/csst-l1/csst_common
BO ZHANG's avatar
BO ZHANG committed
8

BO ZHANG's avatar
tweaks    
BO ZHANG committed
9
10
``csst_common.data_manager.CsstMsDataManager``
----------------------------------------------
BO ZHANG's avatar
BO ZHANG committed
11

BO ZHANG's avatar
BO ZHANG committed
12
13
14
This class provides an interface to switch between local files and DFS.

To initilize from local directory:
BO ZHANG's avatar
BO ZHANG committed
15
16
17

.. code-block:: python

BO ZHANG's avatar
tweaks    
BO ZHANG committed
18
    from csst_common.data_manager import CsstMsDataManager
BO ZHANG's avatar
BO ZHANG committed
19
    # for full basic initialization
BO ZHANG's avatar
BO ZHANG committed
20
    dm_mbi = CsstMsDataManager.from_dir(
BO ZHANG's avatar
BO ZHANG committed
21
22
23
24
25
        ver_sim="C5.2",                  # version of simulation, "C5.2" is the latest
        dir_l0="",                       # the L0/input directory
        dir_l1="",                       # the L1/output directory
        dir_pcref="",                    # position calibration reference (will be deprecated)
        path_aux="",                     # aux file paths (master bias, dark, flat)
BO ZHANG's avatar
tweaks    
BO ZHANG committed
26
        datatype="mbi",                  # "mbi", "sls" or "all"
BO ZHANG's avatar
BO ZHANG committed
27
    )
BO ZHANG's avatar
BO ZHANG committed
28
    dm_mbi.set_detectors(detectors=None) # use all available detectors
BO ZHANG's avatar
tweaks    
BO ZHANG committed
29

BO ZHANG's avatar
BO ZHANG committed
30
31
In particular, if you are on ``dandelion`` or ``PM node``, you can use a ``quickstart`` method.

BO ZHANG's avatar
tweaks    
BO ZHANG committed
32
33
34
.. code-block:: python

    # for a quick start ()
BO ZHANG's avatar
BO ZHANG committed
35
36
37
38
    dm_mbi = CsstMsDataManager.quickstart(
        ver_sim="C5.2",
        datatype="mbi",
        dir_l1=".",
BO ZHANG's avatar
BO ZHANG committed
39
        exposure_id=100                  # the 100th exposure
BO ZHANG's avatar
BO ZHANG committed
40
    )
BO ZHANG's avatar
BO ZHANG committed
41
42
43
44
    dm_mbi.set_detectors(detectors=None) # use all available detectors

.. note::
    This ``quickstart`` method is ONLY available on
BO ZHANG's avatar
BO ZHANG committed
45
    ``dandelion`` or the ``Purple Mountain Lab node``.
BO ZHANG's avatar
BO ZHANG committed
46
    In your local development environment, you have to use
BO ZHANG's avatar
BO ZHANG committed
47
    ``CsstMsDataManager.from_dir(...)`` to initialize it.
BO ZHANG's avatar
BO ZHANG committed
48

BO ZHANG's avatar
BO ZHANG committed
49
Some attributes can be accessed as below.
BO ZHANG's avatar
tweaks    
BO ZHANG committed
50
51
52

.. code-block:: python

BO ZHANG's avatar
BO ZHANG committed
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
    # access L0 directory
    dm_mbi.dir_l0
    # access L1 directory
    dm_mbi.dir_l1
    # access dir_pcref
    dm_mbi.dir_pcref
    # access path_aux
    dm_mbi.path_aux
    # access ver_sim
    dm_mbi.ver_sim
    # access target detectors
    dm_mbi.target_detectors
    # access available detectors
    dm_mbi.available_detectors
    # define an L1 file (detector-specified)
    dm_mbi.l1_detector(detector=6)
    # define an L1 file (non-detector-specified)
    dm_mbi.l1_file("flipped_image.fits")

BO ZHANG's avatar
BO ZHANG committed
72
73
To get master files:

BO ZHANG's avatar
tweaks    
BO ZHANG committed
74
75
.. code-block:: python

BO ZHANG's avatar
BO ZHANG committed
76
77
78
79
80
81
82
    # to get bias
    dm_mbi.get_bias()
    # to get dark
    dm_mbi.get_dark()
    # to get flat
    dm_mbi.get_flat()

BO ZHANG's avatar
BO ZHANG committed
83

BO ZHANG's avatar
BO ZHANG committed
84
85
86
87
88
89
90
91
92
93
94
95
96
Access code to data products
----------------------------

``Multi-Band Imaging``
^^^^^^^^^^^^^^^^^^^^^^

========================== ===== ========================================================== ==================
Data source                Level File name / access code                                     Notes
========================== ===== ========================================================== ==================
raw                        0     ``dm.l0_detector(detector=detector)``                      sci image
raw                        0     ``dm.l0_crs(detector=detector)``                           cosmic ray image
raw                        0     ``dm.l0_cat(detector=detector)``                           input catalog
raw                        0     ``dm.l0_log(detector=detector)``                           log file
BO ZHANG's avatar
BO ZHANG committed
97
98
99
100
``csst_ms_mbi_instrument`` --    ``dm.l1_detector(detector=detector, post="img.fits")``     corrected image
``csst_ms_mbi_instrument`` --    ``dm.l1_detector(detector=detector, post="flg.fits")``     flag image
``csst_ms_mbi_instrument`` --    ``dm.l1_detector(detector=detector, post="wht.fits")``     weight image
``csst_ms_mbi_instrument`` --    ``dm.l1_detector(detector=detector, post="img.head")``     L0 fits header
BO ZHANG's avatar
BO ZHANG committed
101
102
``DFS``                    --    ``dm.l1_file(name="gaia_dfs.fits")``                       reference catalog
``csst_ms_mbi_distortion`` --    ``dm.l1_detector(detector=detector, post="wcs.head")``     fits head with WCS
BO ZHANG's avatar
BO ZHANG committed
103
104
105
106
107
``csst_ms_mbi_position``   --    ``dm.l1_detector(detector=detector, post="img.acat")``     photometry catalog
``csst_ms_mbi_position``   --    ``dm.l1_detector(detector=detector, post="img.rcat")``     reference catalog
``csst_ms_mbi_flux``       1     ``dm.l1_detector(detector=detector, post="img_L1.fits")``  sci image (L1)
``csst_ms_mbi_flux``       1     ``dm.l1_detector(detector=detector, post="flg_L1.fits")``  flag image (L1)
``csst_ms_mbi_flux``       1     ``dm.l1_detector(detector=detector, post="wht_L1.fits")``  weight image (L1)
BO ZHANG's avatar
BO ZHANG committed
108
109
110
111
112
113
114
115
116
117
118
119
========================== ===== ========================================================== ==================


``Slit-Less Spectra``
^^^^^^^^^^^^^^^^^^^^^
========================== ===== ========================================================== ==================
Data source                Level File name / access code                                     Notes
========================== ===== ========================================================== ==================
raw                        0     ``dm.l0_detector(detector=detector)``                      sci image
raw                        0     ``dm.l0_crs(detector=detector)``                           cosmic ray image
raw                        0     ``dm.l0_cat(detector=detector)``                           input catalog
raw                        0     ``dm.l0_log(detector=detector)``                           log file
BO ZHANG's avatar
tweaks    
BO ZHANG committed
120
121
``csst_ms_sls_instrument`` 1     ``dm.l1_detector(detector=detector, post="flt.fits")``     corrected image
``csst_ms_sls_position``   --    ``dm.l1_detector(detector=detector, post="L1_1.fits")``    image with wcs
BO ZHANG's avatar
BO ZHANG committed
122
123
========================== ===== ========================================================== ==================

BO ZHANG's avatar
BO ZHANG committed
124

BO ZHANG's avatar
BO ZHANG committed
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
``csst_common.file_recorder.FileRecorder``
------------------------------------------

Get an empty ``FileRecorder``.
This is initially a ``list``-like object.
Use ``FileRecorder.add_record()`` to add file records.

.. code-block::
    :linenos:

    >>> from csst_common.file_recorder import FileRecorder
    >>> fr = FileRecorder()
    >>> for i in range(3):
    >>>     fr.add_record(filepath="test{:03d}.txt".format(i),
    >>>                   db=True,
    >>>                   comment="Test file {:d}".format(i))
    >>> fr.pprint_all()

    <FileRecorder length=3>
      filepath   db    comment   existence
    ----------- ---- ----------- ---------
    test000.txt True Test file 0     False
    test001.txt True Test file 1     False
    test002.txt True Test file 2     False

BO ZHANG's avatar
tweaks    
BO ZHANG committed
150
``FileRecorder`` inherits from ``list``.
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
Therefore, if you are collecting records from subprocesses,
here is the way to combine records:

.. code-block:: python
    :linenos:

    >>> from csst_common.file_recorder import FileRecorder
    >>> fr1 = FileRecorder()
    >>> fr1.add_record(filepath="test1.txt", db=False, comment="test file 1")
    >>> fr2 = FileRecorder()
    >>> fr2.add_record(filepath="test2.txt", db=False, comment="test file 2")
    >>> fr_all = FileRecorder([*fr1, *fr2])
    >>> fr_all.pprint_all()
    <FileRecorder length=2>
     filepath   db    comment   existence
    --------- ----- ----------- ---------
    test1.txt False test file 1     False
    test2.txt False test file 2     False

BO ZHANG's avatar
tweaks    
BO ZHANG committed
170
171
172
173
174
175
176
177
178
    >>> fr_all.extend(fr1)
    >>> fr_all.pprint_all()
    <FileRecorder length=3>
     filepath   db    comment   existence
    --------- ----- ----------- ---------
    test1.txt False test file 1     False
    test2.txt False test file 2     False
    test1.txt False test file 1     False

BO ZHANG's avatar
BO ZHANG committed
179

BO ZHANG's avatar
BO ZHANG committed
180
181
182
183
184
185
186
``csst_common.logger.get_logger()``
-----------------------------------

Get the default configured ``logging.Logger``.


.. code-block:: python
BO ZHANG's avatar
BO ZHANG committed
187
    :linenos:
BO ZHANG's avatar
BO ZHANG committed
188
189
190
191

    from csst_common.logger import get_logger
    logger = get_logger()

BO ZHANG's avatar
BO ZHANG committed
192
.. warning::
BO ZHANG's avatar
BO ZHANG committed
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
    Developers should NOT use ``print`` function extensively in code.
    Generally ``print`` can be replaced with ``logger.debug("msg")``.
    For important information, use ``logger.info("msg")``.
    For warnings, use ``logger.warning("msg")``.
    For errors, use ``logger.error("msg")``.
    Conf https://docs.python.org/3/library/logging.html for more information
    about the usage of ``logging.Logger``.


``csst_common.status.CsstStatus``
---------------------------------

Developers should use ``csst_common.status.CsstStatus`` to return the
status of their interfaces.

.. code-block:: python
BO ZHANG's avatar
BO ZHANG committed
209
    :linenos:
BO ZHANG's avatar
BO ZHANG committed
210
211
212
213
214
215
216
217
218
219
220

    from csst_common.status import CsstStatus
    # presently 3 kinds of status are available, they are
    CsstStatus.PERFECT
    CsstStatus.WARNING
    CsstStatus.ERROR


An example interface
--------------------

BO ZHANG's avatar
tweaks    
BO ZHANG committed
221
222
223
We recommend our developers to use the code structure used in the example interfaces,
e.g., ``process_single_image`` and ``process_multiple_images``.
The example code is shown below.
BO ZHANG's avatar
BO ZHANG committed
224

BO ZHANG's avatar
BO ZHANG committed
225
226
227
Source code
^^^^^^^^^^^

BO ZHANG's avatar
BO ZHANG committed
228
.. literalinclude:: csst_common/example_interface.py
BO ZHANG's avatar
BO ZHANG committed
229
    :caption: ``example_interface.py``
230
    :emphasize-lines: 7-11,36-41,85,87-88,91-92,95-96,99-101,111-116,148,155-165,167-173,178-179,182-183,186-187,190-191
BO ZHANG's avatar
BO ZHANG committed
231
232
    :linenos:
    :language: python
BO ZHANG's avatar
BO ZHANG committed
233
234
235
236
237
238
239


Rendered ``docstring``
^^^^^^^^^^^^^^^^^^^^^^

.. automodule:: example_interface
    :members:
BO ZHANG's avatar
tweaks    
BO ZHANG committed
240
241
242
243
244
245
246
247
248
249


``csst_common.params``
----------------------

to be updated

Module Identifier
-----------------

BO ZHANG's avatar
BO ZHANG committed
250
to be updated