ChipOutput.py 6.68 KB
Newer Older
Fang Yuedong's avatar
Fang Yuedong committed
1
2
3
import os

class ChipOutput(object):
Fang Yuedong's avatar
Fang Yuedong committed
4
    def __init__(self, config, focal_plane, chip, filt, imgKey0="", imgKey1="", imgKey2="", exptime=150., mjdTime="", ra_cen=None, dec_cen=None, pointing_type='MS', pointing_ID='0', subdir="./", prefix=""):
Fang Yuedong's avatar
Fang Yuedong committed
5
6
7
8
9
10
11
12
13
14
15
16
        self.focal_plane = focal_plane
        self.chip = chip
        self.filt = filt
        self.imgKey0 = imgKey0
        self.imgKey1 = imgKey1
        self.imgKey2 = imgKey2
        self.exptime = exptime
        self.mjdTime = mjdTime
        if (ra_cen is not None) and (dec_cen is not None):
            self.ra_cen = ra_cen
            self.dec_cen = dec_cen
        else:
Fang Yuedong's avatar
Fang Yuedong committed
17
18
            self.ra_cen = config["obs_setting"]["ra_center"]
            self.dec_cen = config["obs_setting"]["dec_center"]
Fang Yuedong's avatar
Fang Yuedong committed
19
20
21
22
        exp_name = imgKey0 + "_%s_%s.fits"
        self.chipLabel = focal_plane.getChipLabel(chip.chipID)
        self.img_name =  prefix + exp_name%(self.chipLabel, filt.filter_type)
        # self.cat_name = self.img_name[:-5] + ".cat"
Fang Yuedong's avatar
Fang Yuedong committed
23
        self.cat_name = 'MSC_' +  config["obs_setting"]["date_obs"] + config["obs_setting"]["time_obs"] + "_" + str(pointing_ID).rjust(7, '0') + "_" + self.chipLabel.rjust(2,'0') + ".cat"
Fang Yuedong's avatar
Fang Yuedong committed
24
25
26
27
        self.subdir = subdir

        # hdr1  = "#ID ID_chip filter xImage yImage ra dec z mag flag SNR "
        hdr1  = "#ID ID_chip filter xImage yImage ra dec z mag flag "
Fang Yuedong's avatar
Fang Yuedong committed
28
29
        hdr2  = "thetaR bfrac hlr_disk hlr_bulge e1_disk e2_disk e1_bulge e2_bulge "
        hdr3  = "e1PSF e2PSF e1 e2 g1 g2 e1OBS e2OBS "
Fang Yuedong's avatar
Fang Yuedong committed
30
31
32
33
        hdr4  = "sed_type av redden "
        hdr5  = "star_model teff logg feh\n"
        # fmt1  = "%10d %4d %5s %10.3f %10.3f %15.6f %15.6f %7.4f %8.4f %2d %9.2f "
        fmt1  = "%10d %4d %5s %10.3f %10.3f %15.6f %15.6f %7.4f %8.4f %2d "
Fang Yuedong's avatar
Fang Yuedong committed
34
35
        fmt2  = "%8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f "
        fmt3  = "%8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f "
Fang Yuedong's avatar
Fang Yuedong committed
36
37
38
39
        fmt4 = "%2d %8.4f %8.4f "
        fmt5 = "%10s %8.4f %8.4f %8.4f\n"
        self.hdr = hdr1 + hdr2 + hdr3 + hdr4 + hdr5
        self.fmt = fmt1 + fmt2 + fmt3 + fmt4 + fmt5
40
        print("pointing_type = %s\n"%(pointing_type))
Fang Yuedong's avatar
Fang Yuedong committed
41
42
        if pointing_type == 'MS':
            self.cat = open(os.path.join(self.subdir, self.cat_name), "w")
43
            print("Creating catalog file %s ...\n"%(os.path.join(self.subdir, self.cat_name)))
Fang Yuedong's avatar
Fang Yuedong committed
44
            self.cat.write(self.hdr)
Fang Yuedong's avatar
Fang Yuedong committed
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78

    def updateHDR(self, hdr):
        hdrNew = [{"name":"RDNOISE", "value":self.chip.read_noise,        "comment":"read noise in e-/pixel"},
                {"name":"DARK",    "value":self.chip.dark_noise,        "comment":"Dark noise (e-/pixel/s)"},
                {"name":"EXPTIME", "value":self.exptime,          "comment":"exposure time in second"},
                {"name":"GAIN",    "value":self.chip.gain,             "comment":"CCD gain in e-/ADU"},
                {"name":"SATURATE","value":65535.0,          "comment":"saturation level"},
                {"name":"CCDCHIP",  "value":int(self.chipLabel), "comment":"chip ID in the CCD mosaic"},
                {"name":"FILTER",  "value":self.filt.filter_type,          "comment":"filter name"},
                {"name":"MJD-OBS", "value":self.mjdTime,          "comment":"Modified Julian Date (MJD) of observation"},
                {"name":"DATE-OBS","value":self.imgKey1,          "comment":"Date of observation"},
                {"name":"EQUINOX", "value":2000.0},
                {"name":"RADECSYS","value":"ICRS"},
                {"name":"RA",      "value":self.ra_cen,           "comment":"telescope pointing center"},
                {"name":"DEC",     "value":self.dec_cen,          "comment":"telescope pointing center"},
                {"name":"OBJECT",  "value":"CSS-OS"},
                {"name":"WCSDIM",  "value":2.0,              "comment":"WCS Dimensionality"},
                {"name":"EXTNAME", "value":"IM1",            "comment":"Extension name"},
                {"name":"BSCALE",  "value":1.0},
                {"name":"BZERO",   "value":0.0},
                {"name":"OBSID",   "value":self.imgKey0,          "comment":"Observation ID"},
                {"name":"CCDNAME", "value":"ccd"+self.chipLabel,"comment":"CCD name"},
                {"name":"RSPEED",  "value":10.0,             "comment":"Read speed"},
                {"name":"CHIPTEMP","value":-100.0,           "comment":"Chip temperature"},
                {"name":"DATASEC", "value":"1:%d,1:%d"%(self.chip.npix_x,self.chip.npix_y), "comment":"Data section"},
                {"name":"CCDSUM",  "value":self.chip.npix_x*self.chip.npix_y,      "comment":"CCD pixel summing"},
                {"name":"NSUM",    "value":self.chip.npix_x*self.chip.npix_y,      "comment":"CCD pixel summing"},
                {"name":"AUTHOR",  "value":"CSST-Sim Group"},
                {"name":"GROUP",   "value":"Weak Lensing Working Group for CSST"}]
        for item in hdrNew:
            hdr.add_record(item)
        return hdr

    # def cat_add_obj(self, obj, pos_img, snr, pos_shear, g1, g2):
Zhang Xin's avatar
Zhang Xin committed
79
    def cat_add_obj(self, obj, pos_img, pos_shear, g1, g2):
Fang Yuedong's avatar
Fang Yuedong committed
80
81
82
83
84
        ximg = pos_img.x - self.chip.bound.xmin + 1.0
        yimg = pos_img.y - self.chip.bound.ymin + 1.0
        e1, e2, g1, g2, e1OBS, e2OBS = obj.getObservedEll(g1, g2)
        if obj.type == 'galaxy':
            line = self.fmt%(obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z, obj.getMagFilter(self.filt), obj.param["star"], obj.thetaR, obj.bfrac, obj.hlr_disk, obj.hlr_bulge,
Fang Yuedong's avatar
Fang Yuedong committed
85
                obj.e1_disk, obj.e2_disk, obj.e1_bulge, obj.e2_bulge,
Fang Yuedong's avatar
Fang Yuedong committed
86
87
88
89
90
91
                pos_shear.g1, pos_shear.g2, e1, e2, g1, g2, e1OBS, e2OBS, obj.sed_type, obj.param['av'], obj.param['redden'], 'n', 0, 0, 0)
        elif obj.type == "quasar":
            line = self.fmt % (obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z,
                               obj.getMagFilter(self.filt), obj.param["star"], 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                               pos_shear.g1, pos_shear.g2, e1, e2, g1, g2, e1OBS, e2OBS, obj.sed_type, obj.param['av'], obj.param['redden'], 'n', 0.0, 0.0, 0.0)
        else:
Fang Yuedong's avatar
Fang Yuedong committed
92
            line = self.fmt%(obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z, obj.getMagFilter(self.filt), obj.param["star"], 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
Fang Yuedong's avatar
Fang Yuedong committed
93
94
                pos_shear.g1, pos_shear.g2, e1, e2, g1, g2, e1OBS, e2OBS, 0, 0.0, 0.0, obj.param['model_tag'], obj.param['teff'], obj.param['logg'],obj.param['feh'])
        # line = self.fmt%(obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z, obj.getMagFilter(self.filt), obj.param["star"], pos_shear.g1, pos_shear.g2, e1, e2, g1, g2, e1OBS, e2OBS)
Zhang Xin's avatar
Zhang Xin committed
95
        self.cat.write(line)