data_manager.py 17.5 KB
Newer Older
BO ZHANG's avatar
BO ZHANG committed
1
2
3
4
5
6
7
8
"""
Identifier:     KSC-SJ4-csst_common/data_manager.py
Name:           data_manager.py
Description:    file path generator
Author:         Bo Zhang
Created:        2022-09-13
Modified-History:
    2022-09-13, Bo Zhang, created
BO ZHANG's avatar
tweaks    
BO ZHANG committed
9
    2022-09-13, Bo Zhang, added CsstMbiDataManager
BO ZHANG's avatar
BO ZHANG committed
10
    2022-09-29, Bo Zhang, favor CsstMsDataManager instead of CsstMbiDataManager
BO ZHANG's avatar
BO ZHANG committed
11
    2022-10-26, Bo Zhang, reconstruct CsstMsDataManager, deprecate CsstMbiDataManager
BO ZHANG's avatar
BO ZHANG committed
12
"""
BO ZHANG's avatar
BO ZHANG committed
13
import os
BO ZHANG's avatar
BO ZHANG committed
14
15
16
17
import glob
import re

from astropy.io import fits
BO ZHANG's avatar
BO ZHANG committed
18
from astropy.table import Table
BO ZHANG's avatar
BO ZHANG committed
19

20
from .params import CSST_PARAMS as CP
BO ZHANG's avatar
BO ZHANG committed
21
22


BO ZHANG's avatar
BO ZHANG committed
23
class CsstMsDataManager:
BO ZHANG's avatar
BO ZHANG committed
24
25
    """
    CSST MS data manager, including MBI and SLS.
BO ZHANG's avatar
tweaks    
BO ZHANG committed
26

BO ZHANG's avatar
tweaks    
BO ZHANG committed
27
28
29
30
    ``CsstMsDataManager`` provides an interface to switch between DFS and local file system.
    To initialize ``CsstMsDataManager`` from local directory, use ``CsstMsDataManager.from_dir()``
    To initialize ``CsstMsDataManager`` on ``dandelion`` or ``PM node``, ``CsstMsDataManager.quickstart()``.
    To initialize ``CsstMsDataManager`` from DFS, use ``CsstMsDataManager.from_dfs()``.
BO ZHANG's avatar
tweaks    
BO ZHANG committed
31
    To generate L0 and L1 file paths, use ``CsstMsDataManager.l0_detector()``, ``CsstMsDataManager.l1_detector()``, etc.
BO ZHANG's avatar
BO ZHANG committed
32
    Here are some examples for simulation with different versions.
BO ZHANG's avatar
BO ZHANG committed
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    C3:
        MSC_MS_210525220000_100000020_06_raw.fits
        MSC_CRS_210525220000_100000020_06_raw.fits
        MSC_210525120000_0000020_06.cat
    C5.1:
        CSST_MSC_MS_SCI_20270810081950_20270810082220_100000100_06_L0_1.fits
        CSST_MSC_MS_CRS_20270810081950_20270810082220_100000100_06_L0_1.fits
        MSC_10000100_chip_06_filt_y.cat
        MSC_10000100_chip_06_filt_y.log
    C5.2
        CSST_MSC_MS_SCI_20270810081950_20270810082220_100000100_06_L0_1.fits
        CSST_MSC_MS_CRS_20270810081950_20270810082220_100000100_06_L0_1.fits
        MSC_100000100_chip_06_filt_y.cat
        MSC_100000100_chip_06_filt_y.log

BO ZHANG's avatar
BO ZHANG committed
48
49
50
    Parameters
    ----------
    ver_sim : str
BO ZHANG's avatar
BO ZHANG committed
51
52
53
54
55
56
57
58
59
        The version of simulation data, see ``csst_common.params.CP``.
    datatype : str
        The options are {"mbi", "sls", "all"}.
        The "all" option is used for QC in particular.
        Note that in this case methods like ``get_bias`` are unavailable.
    available_detectors : list
        The list of available detector serial numbers of available images.
    target_detectors : list
        The list of target detector serial numbers of available images.
BO ZHANG's avatar
BO ZHANG committed
60
61
62
63
    dir_l0 : str
        The L0 directory.
    dir_l1 : str
        The L1 directory.
BO ZHANG's avatar
BO ZHANG committed
64
65
    path_aux : str
        The aux data directory (bias, flat, dark).
BO ZHANG's avatar
BO ZHANG committed
66
67
68
    dir_pcref : str
        The position calibration reference data directory.
        Will be removed in the next version.
BO ZHANG's avatar
BO ZHANG committed
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
    _exp_id : int
        The exposure ID.
    _exp_start : int
        The exposure start time in ``yyyymmddhhmmss`` format.
    _exp_stop : int
        The exposure start time in ``yyyymmddhhmmss`` format.
    _telescope : str
        The telescope name. Defaults to ``CSST`` for C5.2 simulation.
    _instrument : str
        The instrument name. Defaults to ``MSC`` for C5.2 simulation.
    _survey : str
        The survey name. Defaults to ``MS`` for C5.2 simulation.
    _imagetype : str
        The image type signature for science images. Defualts to ``SCI`` for C5.2 simulation.
    _l0_post : str
        The postfix. Defaults to ``L0_1`` for C5.2 simulation.
BO ZHANG's avatar
BO ZHANG committed
85
86
87

    Examples
    --------
BO ZHANG's avatar
BO ZHANG committed
88
    >>> dm_mbi = CsstMsDataManager(...)
BO ZHANG's avatar
BO ZHANG committed
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
    >>> # 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
107
108
    """

BO ZHANG's avatar
BO ZHANG committed
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
    def __init__(self,
                 ver_sim="C5.2",
                 datatype="mbi",
                 available_detectors=None,
                 target_detectors=None,
                 dir_l0=".",
                 dir_l1=".",
                 path_aux="",  # bias dark flat
                 dir_pcref="",  # deprecated
                 _exp_id=100000100,
                 _exp_start=20270810081950,
                 _exp_stop=20270810082220,
                 _telescope="CSST",
                 _instrument="MSC",
                 _survey="MS",
                 _imagetype="SCI",
                 _l0_post="L0_1",
                 ):

        # version
BO ZHANG's avatar
BO ZHANG committed
129
        assert ver_sim in CP["sim"]["versions"]
BO ZHANG's avatar
tweaks    
BO ZHANG committed
130
        self.ver_sim = ver_sim
BO ZHANG's avatar
BO ZHANG committed
131

BO ZHANG's avatar
BO ZHANG committed
132
        # datatype, valid_detectors, detector2filter
133
        assert datatype in ["mbi", "sls", "all"]
BO ZHANG's avatar
tweaks    
BO ZHANG committed
134
        self.datatype = datatype
BO ZHANG's avatar
BO ZHANG committed
135
136
137
138
        if datatype == "mbi":
            # MBI
            self.valid_detectors = CP["mbi"]["detectors"]
            self.detector2filter = CP["mbi"]["detector2filter"]
139
        elif datatype == "sls":
BO ZHANG's avatar
BO ZHANG committed
140
141
142
            # SLS
            self.valid_detectors = CP["sls"]["detectors"]
            self.detector2filter = CP["sls"]["detector2filter"]
143
144
        else:
            # ALL
BO ZHANG's avatar
BO ZHANG committed
145
146
147
148
149
150
151
152
153
154
155
156
157
            self.valid_detectors = CP["all"]["detectors"]
            self.detector2filter = CP["all"]["detector2filter"]

        # available_detectors
        self.available_detectors = available_detectors
        # set all available detectors by default
        self.target_detectors = []
        self.set_detectors(target_detectors)

        # exposure info
        self._exp_id = _exp_id
        self._exp_start = _exp_start
        self._exp_stop = _exp_stop
BO ZHANG's avatar
BO ZHANG committed
158

BO ZHANG's avatar
BO ZHANG committed
159
160
161
162
163
164
165
166
        # file name components
        self._telescope = _telescope
        self._instrument = _instrument
        self._survey = _survey
        self._imagetype = _imagetype
        self._l0_post = _l0_post

        # data directory
BO ZHANG's avatar
BO ZHANG committed
167
168
169
170
171
        self.dir_l0 = dir_l0
        self.dir_l1 = dir_l1
        self.dir_pcref = dir_pcref
        self.path_aux = path_aux

BO ZHANG's avatar
BO ZHANG committed
172
        # record hard code names in history
BO ZHANG's avatar
BO ZHANG committed
173
174
        self.hardcode_history = []

BO ZHANG's avatar
BO ZHANG committed
175
176
177
    @staticmethod
    def from_dfs(ver_sim="C5.2", data_type="mbi", exp_id=10000100, dir_l1="."):
        raise NotImplementedError("from_dfs is currently not available!")
BO ZHANG's avatar
BO ZHANG committed
178

BO ZHANG's avatar
BO ZHANG committed
179
180
181
    @staticmethod
    def from_dir(ver_sim="C5.2", datatype="mbi", dir_l0=".", dir_l1=".", dir_pcref="", path_aux=""):
        """ initialize the multi-band imaging data manager """
BO ZHANG's avatar
BO ZHANG committed
182

BO ZHANG's avatar
BO ZHANG committed
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
        assert ver_sim in ["C5.2", ]

        # glob files
        fps_img = CsstMsDataManager.glob_image(dir_l0, ver_sim=ver_sim)
        if len(fps_img) == 0:
            raise FileNotFoundError(f"No file found in dir_l0: {dir_l0}")

        # available detectors
        available_detectors = [int(re.split(r"[_.]", fp)[7]) for fp in fps_img]
        available_detectors.sort()

        # parse info
        _telescope, _instrument, _survey, _imagetype, \
            _exp_start, _exp_stop, _exp_id, \
            _detector, *_l0_post, _ext = re.split(r"[_.]", fps_img[0])

        _exp_start = int(_exp_start)
        _exp_stop = int(_exp_stop)
        _exp_id = int(_exp_id)

        return CsstMsDataManager(ver_sim=ver_sim,
                                 datatype=datatype,
                                 available_detectors=available_detectors,
                                 target_detectors=None,
                                 dir_l0=dir_l0,
                                 dir_l1=dir_l1,
                                 path_aux=path_aux,  # bias dark flat
                                 dir_pcref=dir_pcref,  # deprecated
                                 _exp_id=_exp_id,
                                 _exp_start=_exp_start,
                                 _exp_stop=_exp_stop,
                                 _telescope=_telescope,
                                 _instrument=_instrument,
                                 _survey=_survey,
                                 _imagetype=_imagetype,
                                 _l0_post="_".join(_l0_post),
                                 )
BO ZHANG's avatar
BO ZHANG committed
220

BO ZHANG's avatar
BO ZHANG committed
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
    @staticmethod
    def glob_image(dir_l0, ver_sim="C5"):
        """ glob files in L0 data directory """
        if ver_sim == "C3":
            pattern = os.path.join(dir_l0, "MSC_MS_*_raw.fits")
        else:
            assert ver_sim in ["C5.1", "C5.2"]
            pattern = os.path.join(dir_l0, "CSST_MSC_MS_SCI_*.fits")
        fps = glob.glob(pattern)
        fps = [os.path.basename(fp) for fp in fps]
        fps.sort()

        print("@DM.glob_dir: {} files found with pattern: {}".format(len(fps), pattern))
        return fps

    @staticmethod
    def glob_cat(dir_l0, ver_sim="C5"):
        """ glob input catalogs in L0 data directory """
BO ZHANG's avatar
BO ZHANG committed
239
240
        assert ver_sim in ["C5.1", "C5.2"]
        pattern = os.path.join(dir_l0, "MSC_*.cat")
BO ZHANG's avatar
BO ZHANG committed
241
242
243
244
245
246
247
248
249
        fps = glob.glob(pattern)
        fps = [os.path.basename(fp) for fp in fps]
        fps.sort()

        print("@DM.glob_dir: {} files found with pattern: {}".format(len(fps), pattern))
        return fps

    def l0_cat(self, detector=6):
        """ the L0 cat file path"""
BO ZHANG's avatar
BO ZHANG committed
250
251
252
        assert self.ver_sim == "C5.2"
        fn = "{}_{}_chip_{:02d}_filt_{}.cat".format(
            self._instrument, self._exp_id, detector, self.detector2filter[detector])
BO ZHANG's avatar
BO ZHANG committed
253
254
255
256
        return os.path.join(self.dir_l0, fn)

    def l0_log(self, detector=6):
        """ L0 log file path """
BO ZHANG's avatar
BO ZHANG committed
257
258
259
        assert self.ver_sim == "C5.2"
        fn = "{}_{}_chip_{:02d}_filt_{}.log".format(
            self._instrument, self._exp_id, detector, self.detector2filter[detector])
BO ZHANG's avatar
BO ZHANG committed
260
261
262
263
        return os.path.join(self.dir_l0, fn)

    def l0_detector(self, detector=6):
        """ L0 detector-specific image file path """
BO ZHANG's avatar
BO ZHANG committed
264
265
266
267
        assert self.ver_sim in ["C5.1", "C5.2"]
        fn = "{}_{}_{}_SCI_{}_{}_{}_{:02d}_L0_1.fits".format(
            self._telescope, self._instrument, self._survey,
            self._exp_start, self._exp_stop, self._exp_id, detector)
BO ZHANG's avatar
BO ZHANG committed
268
269
270
271
        return os.path.join(self.dir_l0, fn)

    def l0_crs(self, detector=6):
        """ L0 cosmic ray file path """
BO ZHANG's avatar
BO ZHANG committed
272
273
274
275
        assert self.ver_sim in ["C5.1", "C5.2"]
        fn = "{}_{}_{}_CRS_{}_{}_{}_{:02d}_L0_1.fits".format(
            self._telescope, self._instrument, self._survey,
            self._exp_start, self._exp_stop, self._exp_id, detector)
BO ZHANG's avatar
BO ZHANG committed
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
        return os.path.join(self.dir_l0, fn)

    def l1_detector(self, detector=6, post="img.fits"):
        """ generate L1 file path

        Parameters
        ----------
        detector:
            detector ID
        post:
            postfix
            e.g, {"img.fits", "wht.fits", "flg.fits", "img_L1.fits", "wht_L1.fits", "flg_L1.fits"}

        Returns
        -------
        L1 file path

        """
BO ZHANG's avatar
BO ZHANG committed
294
295
296
297
        assert self.ver_sim in ["C5.1", "C5.2"]
        fn = "{}_{}_{}_SCI_{}_{}_{}_{:02d}_{}".format(
            self._telescope, self._instrument, self._survey,
            self._exp_start, self._exp_stop, self._exp_id, detector, post)
BO ZHANG's avatar
BO ZHANG committed
298
299
300
301
302
303
304
305
306
307
308
309
310
        return os.path.join(self.dir_l1, fn)

    def set_detectors(self, detectors=None):
        """ set target detector """
        if detectors is None:
            # default detectors
            self.target_detectors = self.available_detectors
        else:
            try:
                # assert detectors is a subset of available detectors
                assert set(detectors).issubset(set(self.available_detectors))
                self.target_detectors = list(detectors)
            except AssertionError as ae:
BO ZHANG's avatar
tweaks    
BO ZHANG committed
311
312
                print("@DM: available detectors are ", self.available_detectors)
                print("@DM: target detectors are ", detectors)
BO ZHANG's avatar
BO ZHANG committed
313
314
315

                print("@DM: final target detectors are ", set(detectors) & set(self.available_detectors))
                # raise ae
BO ZHANG's avatar
tweaks    
BO ZHANG committed
316
                self.target_detectors = list(set(detectors) & set(self.available_detectors))
BO ZHANG's avatar
BO ZHANG committed
317
318
319
        print("final target detector IDs are ", self.target_detectors)
        return

BO ZHANG's avatar
BO ZHANG committed
320
    def get_bias(self, detector=6):
BO ZHANG's avatar
tweaks    
BO ZHANG committed
321
        """ get bias data """
BO ZHANG's avatar
BO ZHANG committed
322
323
324
325
326
        if self.datatype == "mbi":
            fp = glob.glob(self.path_aux.format("CLB", detector))[0]
            return fits.getdata(fp)
        else:
            return self.path_aux.format(detector, "bias")
BO ZHANG's avatar
BO ZHANG committed
327

BO ZHANG's avatar
BO ZHANG committed
328
    def get_dark(self, detector=6):
BO ZHANG's avatar
tweaks    
BO ZHANG committed
329
        """ get dark data """
BO ZHANG's avatar
BO ZHANG committed
330
331
332
333
334
        if self.datatype == "mbi":
            fp = glob.glob(self.path_aux.format("CLD", detector))[0]
            return fits.getdata(fp)
        else:
            return self.path_aux.format(detector, "dark")
BO ZHANG's avatar
BO ZHANG committed
335

BO ZHANG's avatar
BO ZHANG committed
336
    def get_flat(self, detector=6):
BO ZHANG's avatar
tweaks    
BO ZHANG committed
337
        """ get flat data """
BO ZHANG's avatar
BO ZHANG committed
338
339
340
341
342
        if self.datatype == "mbi":
            fp = glob.glob(self.path_aux.format("CLF", detector))[0]
            return fits.getdata(fp)
        else:
            return self.path_aux.format(detector, "flat")
BO ZHANG's avatar
BO ZHANG committed
343
344
345
346
347
348

    def l1_file(self, name="", comment=""):
        """ L1 file path

        Parameters
        ----------
BO ZHANG's avatar
BO ZHANG committed
349
        name : str
BO ZHANG's avatar
BO ZHANG committed
350
            file name
BO ZHANG's avatar
BO ZHANG committed
351
        comment : str
BO ZHANG's avatar
BO ZHANG committed
352
353
354
355
356
357
358
359
360
361
362
363
364
            use the function name plz

        Returns
        -------
        fp: str
            the synthetic file path

        """
        fp = os.path.join(self.dir_l1, name)
        # record hardcode history
        self.hardcode_history.append(dict(hdcd=fp, comment=comment))
        return fp

BO ZHANG's avatar
BO ZHANG committed
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
    def get_sls_info(self, use_dfs=False):
        if use_dfs:
            raise NotImplementedError()
        else:
            assert len(self.target_detectors) == 1
            header = fits.getheader(self.l0_detector(self.target_detectors[0]), ext=1)
        return header

    def get_mbi_info(self, use_dfs=False):
        if use_dfs:
            raise NotImplementedError()
        else:
            info = Table.read("/nfsdata/share/csst_simulation_data/Cycle-5-SimuData/slitlessSpectroscopy/t_mbi_l1.fits")
        return info

BO ZHANG's avatar
BO ZHANG committed
380
381
    @staticmethod
    def quickstart(ver_sim="C5.2", datatype="mbi", dir_l1=".", exposure_id=100):
BO ZHANG's avatar
BO ZHANG committed
382
        """Quick dataset generator for tests on dandelion or PMO
BO ZHANG's avatar
BO ZHANG committed
383
384
385

        Parameters
        ----------
BO ZHANG's avatar
BO ZHANG committed
386
        ver_sim : str
BO ZHANG's avatar
BO ZHANG committed
387
            {"C5.2"}
BO ZHANG's avatar
BO ZHANG committed
388
        datatype : str
BO ZHANG's avatar
BO ZHANG committed
389
            {"mbi", "sls"}
BO ZHANG's avatar
BO ZHANG committed
390
        dir_l1 : str
BO ZHANG's avatar
BO ZHANG committed
391
            output directory
BO ZHANG's avatar
BO ZHANG committed
392
        exposure_id : int
BO ZHANG's avatar
BO ZHANG committed
393
            The serial number of the exposure. 20-154 for C5.2.
BO ZHANG's avatar
BO ZHANG committed
394
395
396

        Returns
        -------
BO ZHANG's avatar
tweaks    
BO ZHANG committed
397
        CsstMsDataManager
BO ZHANG's avatar
BO ZHANG committed
398
            The Main Survey Data Manager instance.
BO ZHANG's avatar
BO ZHANG committed
399
400
401
402
403
404
405
406
407
408
409
410
411
        """
        assert datatype in ["mbi", "sls"]
        # auto identify node name
        hostname = os.uname()[1]
        assert hostname in ["dandelion", "ubuntu"]

        # dandelion
        if hostname == "dandelion" and datatype == "mbi":
            dir_l0 = "/nfsdata/share/csst_simulation_data/Cycle-5-SimuData/multipleBandsImaging/" \
                     "NGP_AstrometryON_shearOFF/MSC_{:07d}/".format(exposure_id)
            path_aux = "/nfsdata/users/cham/L1Test/ref_C5.2/MSC_{}_*_{:02d}_combine.fits"
            dir_pcref = "/nfsdata/users/csstpipeline/L1Pipeline/msc/gaia_dr3/"
        elif hostname == "dandelion" and datatype == "sls":
BO ZHANG's avatar
BO ZHANG committed
412
            dir_l0 = "/nfsdata/share/csst_simulation_data/Cycle-5-SimuData/slitlessSpectroscopy/" \
BO ZHANG's avatar
BO ZHANG committed
413
                     "NGP_AstrometryON_shearOFF_Spec/MSC_{:07d}/".format(exposure_id)
BO ZHANG's avatar
BO ZHANG committed
414
            path_aux = "/nfsdata/share/csst_simulation_data/Cycle-5-SimuData/slitlessSpectroscopy/csst_{:02d}{}.fits"
BO ZHANG's avatar
BO ZHANG committed
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
            dir_pcref = ""

        # PMO
        elif hostname == "ubuntu" and datatype == "mbi":
            dir_l0 = "/share/simudata/CSSOSDataProductsSims/data/CSSTSimImage_C5/" \
                     "NGP_AstrometryON_shearOFF/MSC_{:07d}/".format(exposure_id)
            path_aux = "/data/sim_data/MSC_0000100/ref/MSC_{}_*_{:02d}_combine.fits"
            dir_pcref = "/home/user/L1Pipeline/msc/gaia_dr3/"
        elif hostname == "ubuntu" and datatype == "sls":
            dir_l0 = "/share/simudata/CSSOSDataProductsSims/data/CSSTSimImage_C5/" \
                     "NGP_AstrometryON_shearOFF_Spec/MSC_{:07d}/".format(exposure_id)
            path_aux = ""
            dir_pcref = ""

        else:
BO ZHANG's avatar
tweaks    
BO ZHANG committed
430
            raise ValueError("@DM: invalid hostname {} or datatype {}!".format(hostname, datatype))
BO ZHANG's avatar
BO ZHANG committed
431

BO ZHANG's avatar
BO ZHANG committed
432
        return CsstMsDataManager.from_dir(
BO ZHANG's avatar
tweaks    
BO ZHANG committed
433
            ver_sim=ver_sim, datatype=datatype, dir_l0=dir_l0, dir_l1=dir_l1, dir_pcref=dir_pcref, path_aux=path_aux)
BO ZHANG's avatar
BO ZHANG committed
434

BO ZHANG's avatar
BO ZHANG committed
435

BO ZHANG's avatar
BO ZHANG committed
436
437
class CsstMbiDataManager:

BO ZHANG's avatar
BO ZHANG committed
438
    def __init__(self, ver_sim="C5.2", dir_l0="", dir_l1="", dir_pcref="", path_aux="", force_all_detectors=False):
BO ZHANG's avatar
BO ZHANG committed
439
440
441
442
443
        """ initialize the multi-band imaging data manager

        Parameters
        ----------
        ver_sim: str
BO ZHANG's avatar
BO ZHANG committed
444
            version of simulation data, see csst_common.params.CP
BO ZHANG's avatar
BO ZHANG committed
445
446
447
448
449
450
451
452
453
454
455
456
457
        dir_l0: str
            L0 directory
        dir_l1: str
            L1 directory
        dir_pcref: str
            position calibration data directory
        path_aux: str
            aux data directory (bias, flat, dark)
        force_all_detectors: bool
            if True, assert data for all detectors are available

        Examples
        --------
BO ZHANG's avatar
BO ZHANG committed
458
        >>> dm_mbi = CsstMbiDataManager(...)
BO ZHANG's avatar
BO ZHANG committed
459
        >>> # access L0 directory
BO ZHANG's avatar
BO ZHANG committed
460
        >>> dm_mbi.dir_l0
BO ZHANG's avatar
BO ZHANG committed
461
        >>> # access L1 directory
BO ZHANG's avatar
BO ZHANG committed
462
        >>> dm_mbi.dir_l1
BO ZHANG's avatar
BO ZHANG committed
463
        >>> # access dir_pcref
BO ZHANG's avatar
BO ZHANG committed
464
        >>> dm_mbi.dir_pcref
BO ZHANG's avatar
BO ZHANG committed
465
        >>> # access path_aux
BO ZHANG's avatar
BO ZHANG committed
466
        >>> dm_mbi.path_aux
BO ZHANG's avatar
BO ZHANG committed
467
        >>> # access ver_sim
BO ZHANG's avatar
BO ZHANG committed
468
        >>> dm_mbi.ver_sim
BO ZHANG's avatar
BO ZHANG committed
469
        >>> # access target detectors
BO ZHANG's avatar
BO ZHANG committed
470
        >>> dm_mbi.target_detectors
BO ZHANG's avatar
BO ZHANG committed
471
        >>> # access available detectors
BO ZHANG's avatar
BO ZHANG committed
472
        >>> dm_mbi.available_detectors
BO ZHANG's avatar
BO ZHANG committed
473
        >>> # define an L1 file (detector-specified)
BO ZHANG's avatar
BO ZHANG committed
474
        >>> dm_mbi.l1_detector(detector=6)
BO ZHANG's avatar
BO ZHANG committed
475
        >>> # define an L1 file (non-detector-specified)
BO ZHANG's avatar
BO ZHANG committed
476
        >>> dm_mbi.l1_file("flipped_image.fits")
BO ZHANG's avatar
BO ZHANG committed
477
        """
BO ZHANG's avatar
BO ZHANG committed
478
479
        raise DeprecationWarning(
            "CsstMbiDataManager will no longer be available in some days, please use CsstMsDataManager instead.")