def main(raft_id, database, main_dir, calib_dir, output_dir='./'):

    logfile = database.replace('.db', '.log')
    logging.basicConfig(filename=logfile, level=logging.INFO)

    sensor_list = ['S00', 'S01', 'S02',
                   'S10', 'S11', 'S12',
                   'S20', 'S21', 'S22']
    sensor_ids = ['{0}_{1}'.format(raft_id, sensor_id) for sensor_id in sensor_list]

    ## Get bias frame
    bias_frames = {sensor_id : os.path.join(calib_dir, 
                                            '{0}_superbias.fits'.format(sensor_id)) for sensor_id in sensor_ids}

    ## Get projector positions and exptimes
    camera = camMapper._makeCamera()
    lct = LsstCameraTransforms(camera)

    subdir_list = [x.path for x in os.scandir(main_dir) if isdir(x.path)]
    for subdir in sorted(subdir_list):

        base = basename(subdir)
        if "xtalk" not in base: continue
        xpos, ypos, exptime = base.split('_')[-4:-1]
        central_sensor, ccdX, ccdY = lct.focalMmToCcdPixel(float(ypos), float(xpos))
        infiles = glob.glob(join(subdir, '*{0}.fits'.format(central_sensor)))

        ## Run crosstalk task
        for infile in infiles:
            crosstalk_task = CrosstalkSpotTask()
            crosstalk_task.config.database = database
            crosstalk_task.run(central_sensor, infile, bias_frame=bias_frames[central_sensor])
Exemple #2
0
 def __init__(self, ccdid, led, path_to_data, gainfile, biasfile=None, is_PTC=False):
     self.ccdid = ccdid
     self.gains = u.gains(gainfile, is_PTC=is_PTC)
     self.biasfile= biasfile
     self.led = led
     self.path_to_data = path_to_data
     self.data = {}
     camera = camMapper._makeCamera()
     self.lct = LsstCameraTransforms(camera)
Exemple #3
0
def main(raft_id, main_dir, calib_dir, output_dir='./'):

    sensor_list = [
        'S00', 'S01', 'S02', 'S10', 'S11', 'S12', 'S20', 'S21', 'S22'
    ]
    sensor_ids = [
        '{0}_{1}'.format(raft_id, sensor_id) for sensor_id in sensor_list
    ]

    for sensor_id in sensor_ids:
        print("Sensor: {0}".format(sensor_id))

        ## Get calibration products
        bias_frame = join(calib_dir, '{0}_superbias.fits'.format(sensor_id))
        dark_frame = join(calib_dir, '{0}_superdark.fits'.format(sensor_id))

        ## Get projector positions and exptimes
        position_set = set()
        exptime_set = set()
        camera = camMapper._makeCamera()
        lct = LsstCameraTransforms(camera)

        subdir_list = [x.path for x in os.scandir(main_dir) if isdir(x.path)]
        for subdir in subdir_list:
            base = basename(subdir)
            if "xtalk" not in base: continue
            xpos, ypos, exptime = base.split('_')[-4:-1]
            central_ccd, ccdX, ccdY = lct.focalMmToCcdPixel(
                float(ypos), float(xpos))
            if central_ccd == sensor_id:
                position_set.add((xpos, ypos))
                exptime_set.add(exptime)

        ## For each exptime construct calibrated crosstalk image
        for exptime in exptime_set:
            for i, pos in enumerate(position_set):
                xpos, ypos = pos
                infiles = glob.glob(
                    join(main_dir, '*{0}_{1}_{2}*'.format(xpos, ypos, exptime),
                         '*{0}.fits'.format(sensor_id)))

                pos_output_dir = join(
                    output_dir,
                    'xtalk_{0}_{1}_{2}_calibrated'.format(xpos, ypos, exptime))
                os.mkdir(pos_output_dir)  # add check if already existing
                base = basename(infiles[0])
                outfile = join(
                    pos_output_dir,
                    base.replace(sensor_id,
                                 '{0}_calibrated'.format(sensor_id)))

                calibrated_stack(infiles,
                                 outfile,
                                 bias_frame=bias_frame,
                                 dark_frame=dark_frame)
def main(sensor_id, main_dir, calib_dir, output_dir='./'):

    gain_results = pickle.load(open(join(calib_dir, 'et_results.pkl'), 'rb'))
    gains = gain_results.get_amp_gains(sensor_id)

    ## Get projector positions and exptimes
    position_set = set()
    exptime_set = set()
    camera = camMapper._makeCamera()
    lct = LsstCameraTransforms(camera)

    subdir_list = [x.path for x in os.scandir(main_dir) if isdir(x.path)]
    for subdir in subdir_list:

        base = basename(subdir)
        if "xtalk" not in base: continue
        xpos, ypos, exptime = base.split('_')[-4:-1]
        central_sensor, ccdX, ccdY = lct.focalMmToCcdPixel(
            float(ypos), float(xpos))
        if central_sensor == sensor_id:
            position_set.add((xpos, ypos))
            exptime_set.add(exptime)

    ## For each exptime calculate crosstalk
    for exptime in exptime_set:

        outfile = join(
            output_dir,
            '{0}_{0}_{1}_crosstalk_matrix.fits'.format(sensor_id, exptime))

        ## Get calibrated crosstalk infiles
        infiles = []
        for i, pos in enumerate(position_set):
            xpos, ypos = pos
            infile = glob.glob(
                join(main_dir, '*{0}_{1}_{2}*'.format(xpos, ypos, exptime),
                     '*{0}_calibrated.fits'.format(sensor_id)))[0]
            infiles.append(infile)

        ## Run crosstalk task
        crosstalk_task = CrosstalkTask()
        crosstalk_task.config.outfile = outfile
        crosstalk_task.run(sensor_id, infiles, gains)
# Offsets
xoffset = 5.0  # mm
yoffset = -7.0  # mm

# LED setup: current and exposure times
led = ['uv', 'blue', 'red', 'nm750', 'nm850', 'nm960']
current = [0.1, 0.006, 0.009, 0.01, 0.01, 0.01]
exp_time_orig = [0.02, 0.05, 0.05, 0.09, 0.06, 0.12]
exp_time_corr_factor = [1.33, 1.69, 1.46, 1.4, 1.5, 2.7]
exp_time = np.array(exp_time_orig) * np.array(exp_time_corr_factor)
led_config = list(zip(led, current, np.around(exp_time, 2)))
print(led_config)

# Full focal plane pointings.
# 5 pointings/CCD. One in the center and one in the center of each quadrant
camera = camMapper._makeCamera()
lct = LsstCameraTransforms(camera)
raft_list = [
    'R01', 'R02', 'R03', 'R10', 'R11', 'R12', 'R13', 'R14', 'R20', 'R21',
    'R22', 'R23', 'R24', 'R30', 'R31', 'R32', 'R33', 'R34', 'R41', 'R42', 'R43'
]
sensor_list = ['S00', 'S01', 'S02', 'S10', 'S11', 'S12', 'S20', 'S21', 'S22']
fp_pos_e2v = [(1024, 3003), (3072, 3003), (2048, 2002), (1024, 1001),
              (3072, 1001)]
fp_pos_itl = [(1018, 3000), (3054, 3000), (2036, 2000), (1018, 1000),
              (3054, 1000)]

xall = np.zeros((len(raft_list), len(sensor_list) * len(fp_pos_e2v)))
yall = np.zeros((len(raft_list), len(sensor_list) * len(fp_pos_e2v)))

for i, raft in enumerate(raft_list):
Exemple #6
0
    def __init__(self):
        """Initialize the LSST full-array mode (FAM) camera class."""

        super(LsstFamCam, self).__init__(LsstCamMapper().camera)
        self._initDetectors(DetectorType.SCIENCE)
Exemple #7
0
    def __init__(self):
        """Initialize the LSST camera class."""

        super(LsstCam, self).__init__(LsstCamMapper().camera)
        self._initDetectors(DetectorType.WAVEFRONT)
Exemple #8
0
 def _setupLSSTCamera(self):
     """If we want to include the camera chip gaps, etc"""
     mapper = LsstCamMapper()
     self.camera = mapper.camera
     self.epoch = 2000.0
def main(configfile):

    config = yaml.load(open(configfile, 'rb'), Loader=yaml.FullLoader)
    print(config)

    plt.ioff()  # turn off interactive mode to avoid problem with X forwarding
    path_to_beam = config['path_to_beam_model']
    model_ccdid = config['model_ccdid']
    model_ref_amp = config['model_ref_amp']
    path_to_bias = config['path_to_bias']
    led_beam = config['led_beam_model']
    led = config['led_analysis']
    raft_list = config['raft_list']
    sensor_list = config['sensor_list']
    outdir_figs = config['outdir_figs']
    outdir_fits = config['outdir_fits']

    basedir1 = '/gpfs/slac/lsst/fs3/g/data/jobHarness/jh_stage-test/LCA-10134_Cryostat/LCA-10134_Cryostat-0001/'
    basedir2 = '/gpfs/slac/lsst/fs3/g/data/jobHarness/jh_stage/LCA-10134_Cryostat/LCA-10134_Cryostat-0001/'

    path_to_data = {
        'R01': basedir1 + '6848D/BOT_acq/v0/48087/',
        'R02': basedir1 + '6849D/BOT_acq/v0/48093/',
        'R10': None,
        'R11': basedir1 + '6851D/BOT_acq/v0/48108/',
        'R12': basedir1 + '6852D/BOT_acq/v0/48113/',
        'R20': basedir1 + '6853D/BOT_acq/v0/48118/',
        'R21': None,
        'R22': basedir2 + '11974/BOT_acq/v0/93868/',
        'R30': basedir1 + '6843D/BOT_acq/v0/48047/'
    }

    beam_model = load_beam_model(path_to_beam,
                                 led_name=led_beam,
                                 ref_amp=model_ref_amp,
                                 ccdid=model_ccdid)

    camera = camMapper._makeCamera()
    lct = LsstCameraTransforms(camera)

    delta_x, delta_y = compute_offsets(beam_model,
                                       lct,
                                       ccdid=model_ccdid,
                                       ref_pix_x=2304,
                                       ref_pix_y=3003)

    ccdid_list = sorted(
        [raft + '_' + sensor for sensor in sensor_list for raft in raft_list])

    for data_ccdid in ccdid_list:

        print(data_ccdid)
        gainfile = '/gpfs/slac/lsst/fs3/g/data/jobHarness/jh_stage-test/LCA-10134_Cryostat/LCA-10134_Cryostat-0001/6801D/fe55_analysis_BOT/v0/47706/' + data_ccdid + '_6801D_eotest_results.fits'

        biasfile = os.path.join(path_to_bias, f'{data_ccdid}_sbias.fits')
        raft = data_ccdid.split('_')[0]
        data = qe_data.CcobQeData(data_ccdid,
                                  led,
                                  path_to_data[raft],
                                  gainfile,
                                  biasfile=biasfile)
        data.find_dir()

        for pos in data.pos_list:
            data.make_avg_mosaic_at_pos(pos, '/home/combet/tmp_9rafts/')
            mosaic = data.data[pos]['mosaic']
            bbox = define_model_bbox(beam_model, mosaic, data.lct, pos,
                                     delta_x, delta_y)

            xarr = np.linspace(bbox[0], bbox[1], mosaic.shape[0])
            yarr = np.linspace(bbox[2], bbox[3], mosaic.shape[1])
            tmp = beam_model.beam_image['f_interp'](
                xarr, yarr)  # interp works in cam coordinates
            tmp = np.flip(np.flip(tmp, axis=0),
                          axis=1)  # invert the model in x and in y
            model_eotestDef = np.flip(
                tmp.T, axis=1)  # beam model followinf EOTest convention
            model_normalised = model_eotestDef / np.max(
                model_eotestDef.flatten())
            qe = mosaic / model_normalised
            qe_norm = qe / np.median(qe.flatten())

            outfile = os.path.join(outdir_fits,
                                   f'QE_{data_ccdid}_{led}_{pos}.fits')
            amp_coord = data.data[pos]['amp_coord']
            make_fits(qe, amp_coord, outfile, data.template_file)

            figfile = os.path.join(outdir_figs,
                                   f'QE_{data_ccdid}_{led}_{pos}.png')
            plot_results(qe, model_eotestDef, mosaic, data_ccdid, data.lct,
                         pos, delta_x, delta_y, figfile)
            figfile = os.path.join(outdir_figs,
                                   f'QE_{data_ccdid}_{led}_{pos}_norm.png')
            plot_results(qe_norm, model_normalised, mosaic, data_ccdid,
                         data.lct, pos, delta_x, delta_y, figfile)