def from_fits_object(cls, fits_object, ccd_no): hdu = fits_object.fits_data[ccd_no] header = hdu.header session = object_session(fits_object) x_binning, y_binning = map(int, header['CCDSUM'].split()) readout_direction = header['ampname'].split(',')[1].strip() instrument_id = Instrument.from_fits_object(fits_object).id detector_object = session.query(cls).filter( cls.naxis1 == header['NAXIS1'], cls.naxis2 == header['NAXIS2'], cls.ccd_name == header['CCDNAME'], cls.readout_direction == readout_direction, (func.abs(cls.gain - header['GAIN']) / header['GAIN']) < 0.0001, (func.abs(cls.readout_noise - header['RDNOISE']) / header['RDNOISE']) < 0.0001, cls.x_binning == x_binning, cls.y_binning == y_binning, cls.frame_id == int(header['FRAMEID']), cls.instrument_id == instrument_id).all() if detector_object == []: detector_object = cls(header['NAXIS1'], header['NAXIS2'], header['CCDNAME'], readout_direction, header['GAIN'], header['RDNOISE'], x_binning, y_binning, header['FRAMEID'], instrument_id) session.add(detector_object) session.commit() return detector_object elif len(detector_object) == 1: return detector_object[0] else: raise ValueError('Found more than one detectors')
def from_fits_object(cls, fits_object, ccd_no): hdu = fits_object.fits_data[ccd_no] header = hdu.header session = object_session(fits_object) x_binning, y_binning = map(int, header['CCDSUM'].split()) readout_direction = header['ampname'].split(',')[1].strip() instrument_id = Instrument.from_fits_object(fits_object).id detector_object = session.query(cls).filter(cls.naxis1==header['NAXIS1'], cls.naxis2==header['NAXIS2'], cls.ccd_name==header['CCDNAME'], cls.readout_direction==readout_direction, (func.abs(cls.gain - header['GAIN']) / header['GAIN']) < 0.0001, (func.abs(cls.readout_noise - header['RDNOISE']) / header['RDNOISE']) < 0.0001, cls.x_binning==x_binning, cls.y_binning==y_binning, cls.frame_id==int(header['FRAMEID']), cls.instrument_id==instrument_id).all() if detector_object == []: detector_object = cls(header['NAXIS1'], header['NAXIS2'], header['CCDNAME'], readout_direction, header['GAIN'], header['RDNOISE'], x_binning, y_binning, header['FRAMEID'], instrument_id) session.add(detector_object) session.commit() return detector_object elif len(detector_object) == 1: return detector_object[0] else: raise ValueError('Found more than one detectors')
def from_fits_object(cls, fits_object, equivalency_threshold = 0.0001): session = object_session(fits_object) header = fits_object.fits_data[0].header filter1 = GMOSFilter.from_keyword(header['filter1'], session) filter2 = GMOSFilter.from_keyword(header['filter2'], session) grating = GMOSGrating.from_keyword(header['grating'], session) grating_central_wavelength = header['centwave'] grating_slit_wavelength = header['grwlen'] grating_tilt = header['grtilt'] grating_order = header['grorder'] instrument = Instrument.from_fits_object(fits_object) instrument_setup_object = session.query(cls).filter( cls.filter1_id==filter1.id, cls.filter2_id==filter2.id, cls.grating_id==grating.id, cls.instrument_id==instrument.id, (func.abs(cls.grating_central_wavelength_value - grating_central_wavelength) / grating_central_wavelength) < equivalency_threshold, (func.abs(cls.grating_slit_wavelength_value - grating_slit_wavelength) / grating_slit_wavelength) < equivalency_threshold, (func.abs(cls.grating_tilt_value - grating_tilt) / grating_tilt) < equivalency_threshold).all() if instrument_setup_object == []: instrument_setup_object = cls(filter1.id, filter2.id, grating.id, grating_central_wavelength, grating_slit_wavelength, grating_tilt, grating_order, instrument.id) session.add(instrument_setup_object) session.commit() for fits_extension_id in xrange(1, len(fits_object.fits_data)): current_detector_id = GMOSDetector.from_fits_object(fits_object, fits_extension_id).id session.add(GMOSMOSInstrumentSetup2Detector(instrument_setup_id=instrument_setup_object.id, fits_extension_id=fits_extension_id, detector_id=current_detector_id)) session.commit() return instrument_setup_object elif len(instrument_setup_object) == 1: return instrument_setup_object[0] else: raise ValueError('More than one Instrument setup with the same setup found: %s' % instrument_setup_object)