ChipOutput.py 3.79 KB
Newer Older
Fang Yuedong's avatar
Fang Yuedong committed
1
import os
2
import logging
3
import ObservationSim.Config._util as _util
4
from ObservationSim.Config.Header import generatePrimaryHeader
Fang Yuedong's avatar
Fang Yuedong committed
5

6

Fang Yuedong's avatar
Fang Yuedong committed
7
class ChipOutput(object):
8
    def __init__(self, config, chip, filt, pointing, logger_filename=None):
9
        self.config = config
Fang Yuedong's avatar
Fang Yuedong committed
10
11
        self.chip = chip
        self.filt = filt
12
13
        self.pointing_type = pointing.pointing_type
        self.chip_label = str(chip.chipID).rjust(2, '0')
14

15
16
        # Get primary header based on chip and pointing
        self.h_prim = generatePrimaryHeader(
17
18
19
20
21
22
            xlen=chip.npix_x,
            ylen=chip.npix_y,
            pointing_id=pointing.obs_id,
            pointing_type_code=pointing.pointing_type_code,
            ra=pointing.ra,
            dec=pointing.dec,
23
            pixel_scale=chip.pix_scale,
24
            time_pt=pointing.timestamp,
25
26
27
28
29
30
31
            exptime=pointing.exp_time,
            im_type=pointing.pointing_type,
            sat_pos=[pointing.sat_x, pointing.sat_y, pointing.sat_z],
            sat_vel=[pointing.sat_vx, pointing.sat_vy, pointing.sat_vz],
            project_cycle=self.config["project_cycle"],
            run_counter=self.config["run_counter"],
            chip_name=self.chip_label)
32

33
34
35
        obs_id = _util.get_obs_id(img_type=self.pointing_type, project_cycle=config["project_cycle"], run_counter=config[
                                  "run_counter"], pointing_id=pointing.obs_id, pointing_type_code=pointing.pointing_type_code)

36
37
        self.subdir = pointing.output_dir
        self.cat_name = self.h_prim['FILENAME'] + '.cat'
38
39
        if logger_filename is None:
            logger_filename = self.h_prim['FILENAME'] + '.log'
Fang Yuedong's avatar
Fang Yuedong committed
40

41
        self.logger = logging.getLogger()
42
43
        fh = logging.FileHandler(os.path.join(
            self.subdir, logger_filename), mode='w+', encoding='utf-8')
44
45
        fh.setLevel(logging.DEBUG)
        self.logger.setLevel(logging.DEBUG)
Fang Yuedong's avatar
Fang Yuedong committed
46
        logging.getLogger('numba').setLevel(logging.WARNING)
47
48
        formatter = logging.Formatter(
            '%(asctime)s - %(msecs)d - %(levelname)-8s - [%(filename)s:%(lineno)d] - %(message)s')
49
50
51
        fh.setFormatter(formatter)
        self.logger.addHandler(fh)

52
        hdr1 = "# obj_ID ID_chip filter xImage yImage ra dec ra_orig dec_orig z mag obj_type "
Fang Yuedong's avatar
Fang Yuedong committed
53
        hdr2 = "pm_ra pm_dec RV parallax"
54
        fmt1 = "%20s %4d %5s %10.3f %10.3f %15.8f %15.8f %15.8f %15.8f %7.4f %8.4f %15s "
Fang Yuedong's avatar
Fang Yuedong committed
55
56
57
        fmt2 = "%15.8f %15.8f %15.8f %15.8f"
        self.hdr = hdr1 + hdr2
        self.fmt = fmt1 + fmt2
58

59
60
        self.logger.info("pointing_type = %s\n" % (self.pointing_type))

Fang Yuedong's avatar
Fang Yuedong committed
61
62
63
    def Log_info(self, message):
        print(message)
        self.logger.info(message)
64

Fang Yuedong's avatar
Fang Yuedong committed
65
66
67
    def Log_error(self, message):
        print(message)
        self.logger.error(message)
68

69
    def update_output_header(self, additional_column_names=""):
70
        self.hdr += additional_column_names
71

72
    def create_output_file(self):
73
        if self.pointing_type == 'SCI':
Fang Yuedong's avatar
Fang Yuedong committed
74
            self.cat = open(os.path.join(self.subdir, self.cat_name), "w")
75
76
            self.logger.info("Creating catalog file %s ...\n" %
                             (os.path.join(self.subdir, self.cat_name)))
77
78
            if not self.hdr.endswith("\n"):
                self.hdr += "\n"
Fang Yuedong's avatar
Fang Yuedong committed
79
            self.cat.write(self.hdr)
Fang Yuedong's avatar
Fang Yuedong committed
80

81
    def cat_add_obj(self, obj, pos_img, pos_shear):
xin's avatar
xin committed
82
83
        ximg = obj.real_pos.x + 1.0
        yimg = obj.real_pos.y + 1.0
84
85
86
87

        line = self.fmt % (
            obj.id, int(self.chip_label), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.ra_orig, obj.dec_orig, obj.z, obj.getMagFilter(
                self.filt), obj.type,
88
            obj.pmra, obj.pmdec, obj.rv, obj.parallax)
89
90
91
        line += obj.additional_output_str
        if not line.endswith("\n"):
            line += "\n"
Zhang Xin's avatar
Zhang Xin committed
92
        self.cat.write(line)