Commit 33f18c07 authored by BO ZHANG's avatar BO ZHANG 🏀
Browse files

first commit

parent 497f4a5b
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
__version__ = "0.0.1"
 No newline at end of file
+18 −46
Original line number Original line Diff line number Diff line
@@ -3,46 +3,16 @@ from collections import OrderedDict
import astropy.io.fits as fits
import astropy.io.fits as fits
from astropy.io.fits import HDUList, PrimaryHDU
from astropy.io.fits import HDUList, PrimaryHDU


from csst.msc.mscdata import CsstMscImgData
from .CsstException import CsstException
from .CsstException import CsstException




class CsstDataFactory:
INSTRUMENT_LIST = ["MSC", ]
    """
    This class is designed to create CsstData and its inherited classes according to different kinds of input data format.
    """


    def __init__(self):
        pass


    def createData(self, fitsfilename):
class CsstData:
    """
    """

    general CSST data class
        Parameters
        ----------
        fitsfilename:
            the file name of fits files

        Returns
        -------

    """
    """

        try:
            hl = fits.open(fitsfilename)
            instrument = hl[0].header.get('INSTRUME')  # strip or not?
            detector = hl[0].header.get('DETECTOR')    # strip or not?
            print(instrument, detector)
            if instrument == 'MSC' and int(detector[3:5]) >= 6 and int(detector[3:5]) <= 25:
                # multi-band imaging
                data = CsstMscImgData(hl[0], hl[1])

        except Exception as e:
            print(e)
        return data


class CsstData:
    _primary_hdu = []
    _primary_hdu = []
    _l0data = []  # HDUList
    _l0data = []  # HDUList
    _l1hdr_global = []
    _l1hdr_global = []
@@ -50,28 +20,30 @@ class CsstData:
    _l2data = OrderedDict()  #
    _l2data = OrderedDict()  #
    _auxdata = OrderedDict()
    _auxdata = OrderedDict()


    def __init__(self, primaryHDU, imgHDU):
    def __init__(self, primaryHDU, imgHDU, instrument=None, detector=None):
        print('create CsstData')
        print('create CsstData')
        self._primary_hdu = primaryHDU
        self._primary_hdu = primaryHDU
        self._l0data = imgHDU
        self._l0data = imgHDU
        self.instrument = instrument
        self.detector = detector


    def get_l0data(self, *, copy):
    def get_l0data(self, copy=True):
        '''
        """
        obtain level 0 data from CsstData class
        obtain level 0 data from CsstData class
        copy: True: if the user want to copy the memory of the data to the new class;
        copy: True: if the user want to copy the memory of the data to the new class;
              False: only reference of the data memory is written to the new class
              False: only reference of the data memory is written to the new class
        '''
        """
        if copy:
        if copy:
            return self._l0data.data.copy()
            return self._l0data.data.copy()
        else:
        else:
            return self._l0data.data
            return self._l0data.data


    def get_l0keyword(self, ext, key):
    def get_l0keyword(self, ext="pri", key="INSTRUME"):
        '''
        """
        obtain keywords of the fits header of level 0 image data from the CsstData class
        obtain keywords of the fits header of level 0 image data from the CsstData class
        ext: the index of extension. if it equals to 'pri', looking up keywords from primary session, otherwise from extension sessions
        ext: the index of extension. if it equals to 'pri', looking up keywords from primary session, otherwise from extension sessions
        key: the name of the key
        key: the name of the key
        '''
        """
        if ext == 'pri':
        if ext == 'pri':
            try:
            try:
                value = self._primary_hdu.header.get(key)
                value = self._primary_hdu.header.get(key)
@@ -84,7 +56,6 @@ class CsstData:
                print(e)
                print(e)
        else:
        else:
            raise CsstException
            raise CsstException
        return value


    def set_l1keyword(self, key, value):
    def set_l1keyword(self, key, value):
        print('check out whether ' + key + " is a valid key and " + value + " is valid value")
        print('check out whether ' + key + " is a valid key and " + value + " is valid value")
@@ -94,13 +65,14 @@ class CsstData:


    def get_auxdata(self, name):
    def get_auxdata(self, name):
        print('Parent class returns zero image.')
        print('Parent class returns zero image.')
        return np.zeros_like(get_l0data())
        # return np.zeros_like(self.get_l0data())
        return


    def save_l1data(self, imgtype, filename):
    def save_l1data(self, imgtype, filename):
        '''
        """
        asve level 1 image and auxilary data to data file
        asve level 1 image and auxilary data to data file
        imgtype
        imgtype
        '''
        """
        print("save L1 image to a fits file with name " + filename)
        print("save L1 image to a fits file with name " + filename)
        try:
        try:
            self._l1hdr_global.set('TYPE', imgtype, 'Type of Level 1 data')
            self._l1hdr_global.set('TYPE', imgtype, 'Type of Level 1 data')

csst/common/factory.py

0 → 100644
+40 −0
Original line number Original line Diff line number Diff line
from astropy.io import fits

from .data import INSTRUMENT_LIST
from ..msc.mscdata import CsstMscImgData


class CsstDataFactory:
    """
    This class is designed to create CsstData and its inherited classes according to different kinds of input data format.
    """

    def __init__(self):
        pass

    @staticmethod
    def createData(fitsfilename):
        """ create CSST Data instances

        Parameters
        ----------
        fitsfilename:
            the file name of fits files

        Returns
        -------

        """

        try:
            hl = fits.open(fitsfilename)
            instrument = hl[0].header.get('INSTRUME')  # strip or not?
            detector = hl[0].header.get('DETECTOR')  # strip or not?
            print(instrument, detector)
            assert instrument in INSTRUMENT_LIST
            if instrument == 'MSC' and 6 <= int(detector[3:5]) <= 25:
                # multi-band imaging
                data = CsstMscImgData(hl[0], hl[1], instrument=instrument, detector=detector)
            return data
        except Exception as e:
            print(e)
+6 −5
Original line number Original line Diff line number Diff line

from abc import ABCMeta, abstractmethod
from abc import ABCMeta, abstractmethod
from enum import Enum
from enum import Enum



class CsstProcStatus(Enum):
class CsstProcStatus(Enum):
    empty = -1
    empty = -1
    normal = 0
    normal = 0
    ioerror = 1
    ioerror = 1
    runtimeerror = 2
    runtimeerror = 2



#     self['empty'].info = 'Not run yet.'
#     self['empty'].info = 'Not run yet.'
#     self['normal'].info = 'This is a normal run.'
#     self['normal'].info = 'This is a normal run.'
#     self['ioerror'].info = 'This run is exceptionally stopped due to IO error.'
#     self['ioerror'].info = 'This run is exceptionally stopped due to IO error.'
@@ -17,11 +18,11 @@ class CsstProcessor(metaclass=ABCMeta):
    @abstractmethod
    @abstractmethod
    def prepare(self, **kwargs):
    def prepare(self, **kwargs):
        pass
        pass

    @abstractmethod
    @abstractmethod
    def run(self, data):
    def run(self, data):
        return self._status
        return self._status

    @abstractmethod
    @abstractmethod
    def cleanup(self):
    def cleanup(self):
        pass
        pass
    
 
 No newline at end of file
+0 −1
Original line number Original line Diff line number Diff line
__version__ = "0.0.1"
 No newline at end of file
Loading