data_manager.py 16.9 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
18
import glob
import re

from astropy.io import fits

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


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

BO ZHANG's avatar
tweaks    
BO ZHANG committed
26
27
28
29
    ``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
30
    To generate L0 and L1 file paths, use ``CsstMsDataManager.l0_detector()``, ``CsstMsDataManager.l1_detector()``, etc.
BO ZHANG's avatar
BO ZHANG committed
31
    Here are some examples for simulation with different versions.
BO ZHANG's avatar
BO ZHANG committed
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    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
47
48
49
    Parameters
    ----------
    ver_sim : str
BO ZHANG's avatar
BO ZHANG committed
50
51
52
53
54
55
56
57
58
        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
59
60
61
62
    dir_l0 : str
        The L0 directory.
    dir_l1 : str
        The L1 directory.
BO ZHANG's avatar
BO ZHANG committed
63
64
    path_aux : str
        The aux data directory (bias, flat, dark).
BO ZHANG's avatar
BO ZHANG committed
65
66
67
    dir_pcref : str
        The position calibration reference data directory.
        Will be removed in the next version.
BO ZHANG's avatar
BO ZHANG committed
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
    _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
84
85
86

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

BO ZHANG's avatar
BO ZHANG committed
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
    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
128
        assert ver_sim in CP["sim"]["versions"]
BO ZHANG's avatar
tweaks    
BO ZHANG committed
129
        self.ver_sim = ver_sim
BO ZHANG's avatar
BO ZHANG committed
130

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

BO ZHANG's avatar
BO ZHANG committed
158
159
160
161
162
163
164
165
        # 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
166
167
168
169
170
        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
171
        # record hard code names in history
BO ZHANG's avatar
BO ZHANG committed
172
173
        self.hardcode_history = []

BO ZHANG's avatar
BO ZHANG committed
174
175
176
    @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
177

BO ZHANG's avatar
BO ZHANG committed
178
179
180
    @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
181

BO ZHANG's avatar
BO ZHANG committed
182
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
        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
219

BO ZHANG's avatar
BO ZHANG committed
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
    @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
238
239
        assert ver_sim in ["C5.1", "C5.2"]
        pattern = os.path.join(dir_l0, "MSC_*.cat")
BO ZHANG's avatar
BO ZHANG committed
240
241
242
243
244
245
246
247
248
        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
249
250
251
        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
252
253
254
255
        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
256
257
258
        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
259
260
261
262
        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
263
264
265
266
        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
267
268
269
270
        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
271
272
273
274
        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
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
        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
293
294
295
296
        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
297
298
299
300
301
302
303
304
305
306
307
308
309
        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
310
311
                print("@DM: available detectors are ", self.available_detectors)
                print("@DM: target detectors are ", detectors)
BO ZHANG's avatar
BO ZHANG committed
312
313
314

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

BO ZHANG's avatar
BO ZHANG committed
319
    def get_bias(self, detector=6):
BO ZHANG's avatar
tweaks    
BO ZHANG committed
320
        """ get bias data """
BO ZHANG's avatar
BO ZHANG committed
321
322
323
324
325
        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
326

BO ZHANG's avatar
BO ZHANG committed
327
    def get_dark(self, detector=6):
BO ZHANG's avatar
tweaks    
BO ZHANG committed
328
        """ get dark data """
BO ZHANG's avatar
BO ZHANG committed
329
330
331
332
333
        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
334

BO ZHANG's avatar
BO ZHANG committed
335
    def get_flat(self, detector=6):
BO ZHANG's avatar
tweaks    
BO ZHANG committed
336
        """ get flat data """
BO ZHANG's avatar
BO ZHANG committed
337
338
339
340
341
        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
342
343
344
345
346
347

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

        Parameters
        ----------
BO ZHANG's avatar
BO ZHANG committed
348
        name : str
BO ZHANG's avatar
BO ZHANG committed
349
            file name
BO ZHANG's avatar
BO ZHANG committed
350
        comment : str
BO ZHANG's avatar
BO ZHANG committed
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
            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

    @staticmethod
    def quickstart(ver_sim="C5.2", datatype="mbi", dir_l1=".", exposure_id=100):
BO ZHANG's avatar
BO ZHANG committed
366
        """Quick dataset generator for tests on dandelion or PMO
BO ZHANG's avatar
BO ZHANG committed
367
368
369

        Parameters
        ----------
BO ZHANG's avatar
BO ZHANG committed
370
        ver_sim : str
BO ZHANG's avatar
BO ZHANG committed
371
            {"C5.2"}
BO ZHANG's avatar
BO ZHANG committed
372
        datatype : str
BO ZHANG's avatar
BO ZHANG committed
373
            {"mbi", "sls"}
BO ZHANG's avatar
BO ZHANG committed
374
        dir_l1 : str
BO ZHANG's avatar
BO ZHANG committed
375
            output directory
BO ZHANG's avatar
BO ZHANG committed
376
        exposure_id : int
BO ZHANG's avatar
BO ZHANG committed
377
            The serial number of the exposure. 20-154 for C5.2.
BO ZHANG's avatar
BO ZHANG committed
378
379
380

        Returns
        -------
BO ZHANG's avatar
tweaks    
BO ZHANG committed
381
        CsstMsDataManager
BO ZHANG's avatar
BO ZHANG committed
382
            The Main Survey Data Manager instance.
BO ZHANG's avatar
BO ZHANG committed
383
384
385
386
387
388
389
390
391
392
393
394
395
        """
        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
396
            dir_l0 = "/nfsdata/share/csst_simulation_data/Cycle-5-SimuData/slitlessSpectroscopy/" \
BO ZHANG's avatar
BO ZHANG committed
397
                     "NGP_AstrometryON_shearOFF_Spec/MSC_{:07d}/".format(exposure_id)
BO ZHANG's avatar
BO ZHANG committed
398
            path_aux = "/nfsdata/share/csst_simulation_data/Cycle-5-SimuData/slitlessSpectroscopy/csst_{:02d}{}.fits"
BO ZHANG's avatar
BO ZHANG committed
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
            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
414
            raise ValueError("@DM: invalid hostname {} or datatype {}!".format(hostname, datatype))
BO ZHANG's avatar
BO ZHANG committed
415

BO ZHANG's avatar
BO ZHANG committed
416
        return CsstMsDataManager.from_dir(
BO ZHANG's avatar
tweaks    
BO ZHANG committed
417
            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
418

BO ZHANG's avatar
BO ZHANG committed
419

BO ZHANG's avatar
BO ZHANG committed
420
421
class CsstMbiDataManager:

BO ZHANG's avatar
BO ZHANG committed
422
    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
423
424
425
426
427
        """ initialize the multi-band imaging data manager

        Parameters
        ----------
        ver_sim: str
BO ZHANG's avatar
BO ZHANG committed
428
            version of simulation data, see csst_common.params.CP
BO ZHANG's avatar
BO ZHANG committed
429
430
431
432
433
434
435
436
437
438
439
440
441
        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
442
        >>> dm_mbi = CsstMbiDataManager(...)
BO ZHANG's avatar
BO ZHANG committed
443
        >>> # access L0 directory
BO ZHANG's avatar
BO ZHANG committed
444
        >>> dm_mbi.dir_l0
BO ZHANG's avatar
BO ZHANG committed
445
        >>> # access L1 directory
BO ZHANG's avatar
BO ZHANG committed
446
        >>> dm_mbi.dir_l1
BO ZHANG's avatar
BO ZHANG committed
447
        >>> # access dir_pcref
BO ZHANG's avatar
BO ZHANG committed
448
        >>> dm_mbi.dir_pcref
BO ZHANG's avatar
BO ZHANG committed
449
        >>> # access path_aux
BO ZHANG's avatar
BO ZHANG committed
450
        >>> dm_mbi.path_aux
BO ZHANG's avatar
BO ZHANG committed
451
        >>> # access ver_sim
BO ZHANG's avatar
BO ZHANG committed
452
        >>> dm_mbi.ver_sim
BO ZHANG's avatar
BO ZHANG committed
453
        >>> # access target detectors
BO ZHANG's avatar
BO ZHANG committed
454
        >>> dm_mbi.target_detectors
BO ZHANG's avatar
BO ZHANG committed
455
        >>> # access available detectors
BO ZHANG's avatar
BO ZHANG committed
456
        >>> dm_mbi.available_detectors
BO ZHANG's avatar
BO ZHANG committed
457
        >>> # define an L1 file (detector-specified)
BO ZHANG's avatar
BO ZHANG committed
458
        >>> dm_mbi.l1_detector(detector=6)
BO ZHANG's avatar
BO ZHANG committed
459
        >>> # define an L1 file (non-detector-specified)
BO ZHANG's avatar
BO ZHANG committed
460
        >>> dm_mbi.l1_file("flipped_image.fits")
BO ZHANG's avatar
BO ZHANG committed
461
        """
BO ZHANG's avatar
BO ZHANG committed
462
463
        raise DeprecationWarning(
            "CsstMbiDataManager will no longer be available in some days, please use CsstMsDataManager instead.")