Commit 9c07d167 authored by Xie Zhou's avatar Xie Zhou
Browse files

补全仪器效应改正里的宇宙线去除功能

parent b0ca68fe
Loading
Loading
Loading
Loading
+982 KiB

File added.

No diff preview for this file type.

+52 −18
Original line number Original line Diff line number Diff line
from collections import OrderedDict
from pathlib import Path
from abc import ABCMeta, abstractmethod

from enum import Enum
from ccdproc import cosmicray_lacosmic
import numpy as np
import numpy as np
from deepCR import deepCR
from deepCR import deepCR
from ..core.processor import CsstProcStatus, CsstProcessor

from ..core.processor import CsstProcessor, CsstProcStatus




class CsstMscInstrumentProc(CsstProcessor):
class CsstMscInstrumentProc(CsstProcessor):
    _status = CsstProcStatus.empty
    _status = CsstProcStatus.empty
    _switches = {'crosstalk': False, 'nonlinear': False,
    _switches = {'deepcr': True, 'clean': False}
                 'deepcr': False, 'cti': False, 'brighterfatter': False}


    def __init__(self):
    def __init__(self):
        pass
        pass
@@ -73,19 +73,51 @@ class CsstMscInstrumentProc(CsstProcessor):
        flg = raw == 65535
        flg = raw == 65535
        self.__flagimg = self.__flagimg | (flg * 8)
        self.__flagimg = self.__flagimg | (flg * 8)


    def _do_cray(self):
    def _do_cray(self, gain, rdnoise):
        '''宇宙线像元标记
        '''宇宙线像元标记


        宇宙线污染的像元, 用deepCR进行标记
        宇宙线污染的像元, 用deepCR或lacosmic进行标记
        '''
        '''



        if self._switches['deepcr']:
        
            clean_model = str(Path(__file__).parent /
        flg, _ = deepCR(self.__l1img)
                              'CSST_2021-12-30_CCD23_epoch20.pth')

            inpaint_model = 'ACS-WFC-F606W-2-32'

            model = deepCR(clean_model,

                           inpaint_model,
        self.__flagimg = self.__flagimg | (flg * 16)
                           device='CPU',
                           hidden=50)
            masked, cleaned = model.clean(self.__l1img,
                                          threshold=0.5,
                                          inpaint=True,
                                          segment=True,
                                          patch=256,
                                          parallel=True,
                                          n_jobs=2)
        else:
            cleaned, masked = cosmicray_lacosmic(ccd=self.__l1img,
                                                 sigclip=3.,    # cr_threshold
                                                 sigfrac=0.5,   # neighbor_threshold
                                                 objlim=5.,     # constrast
                                                 gain=gain,
                                                 readnoise=rdnoise,
                                                 satlevel=65535.0,
                                                 pssl=0.0,
                                                 niter=4,
                                                 sepmed=True,
                                                 cleantype='meanmask',
                                                 fsmode='median',
                                                 psfmodel='gauss',
                                                 psffwhm=2.5,
                                                 psfsize=7,
                                                 psfk=None,
                                                 psfbeta=4.765,
                                                 verbose=False,
                                                 gain_apply=True)

        self.__flagimg = self.__flagimg | (masked * 16)
        if self._switches['clean']:
            self.__l1img = cleaned


    def _do_weight(self, bias, gain, rdnoise, exptime):
    def _do_weight(self, bias, gain, rdnoise, exptime):
        '''权重图
        '''权重图
@@ -121,15 +153,17 @@ class CsstMscInstrumentProc(CsstProcessor):
            flat = data.get_flat()
            flat = data.get_flat()
            bias = data.get_bias()
            bias = data.get_bias()
            dark = data.get_dark()
            dark = data.get_dark()

            print('Flat and bias correction')
            print('Flat and bias correction')

            self._do_fix(raw, bias, dark, flat, exptime)
            self._do_fix(raw, bias, dark, flat, exptime)
            self._do_badpix(flat)
            self._do_badpix(flat)
            self._do_hot_and_warm_pix(dark, exptime, rdnoise)
            self._do_hot_and_warm_pix(dark, exptime, rdnoise)
            self._do_over_saturation(raw)
            self._do_over_saturation(raw)
            # self._do_cray()
            self._do_cray(gain, rdnoise)
            self._do_weight(bias, gain, rdnoise, exptime)
            self._do_weight(bias, gain, rdnoise, exptime)


            print('fake to finish the run and save the results back to CsstData')
            print('finish the run and save the results back to CsstData')


            data.set_l1data('sci', self.__l1img)
            data.set_l1data('sci', self.__l1img)
            data.set_l1data('weight', self.__weightimg)
            data.set_l1data('weight', self.__weightimg)