def from_fits_file(cls, fname, session): """ generate a """ data_file_object = DataFile.from_file(fname) fits_object = TemporaryFITSFile() fits_object.data_file = data_file_object session.add(fits_object) session.commit() gmos_raw_image = cls() gmos_raw_image.fits = fits_object gmos_raw_image.object = Object.from_fits_object(fits_object) gmos_raw_image.program = Program.from_fits_object(fits_object) gmos_raw_image.observation_block = ObservationBlock.from_fits_object(fits_object) gmos_raw_image.observation_class = ObservationClass.from_fits_object(fits_object) gmos_raw_image.observation_type = ObservationType.from_fits_object(fits_object) gmos_raw_image.instrument = Instrument.from_fits_object(fits_object) gmos_raw_image.instrument_setup = GMOSImagingInstrumentSetup.from_fits_file(fname, session) date_obs_str = '{0}T{1}'.format(fits_object.header['date-obs'], fits_object.header['time-obs']) gmos_raw_image.mjd = time.Time(date_obs_str, scale='utc').mjd session.add(gmos_raw_image) session.commit() return gmos_raw_image
def from_fits_file(cls, fits_file, session, tilt_equivalency_threshold=0.001, wavelength_equivalency_threshold=0.0001): header = fits.getheader(fits_file) filter1 = GMOSFilter.from_keyword(header['filter1'], session) filter2 = GMOSFilter.from_keyword(header['filter2'], session) grating = GMOSGrating.from_keyword(header['grating'], session) instrument = Instrument.from_keyword(header['instrume'], session) grating_central_wavelength = header['centwave'] grating_slit_wavelength = header['grwlen'] grating_tilt = header['grtilt'] grating_order = header['grorder'] #Checking if the same instrument setup already exists instrument_setup_query = 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) < wavelength_equivalency_threshold, func.abs(cls.grating_slit_wavelength_value - grating_slit_wavelength) < wavelength_equivalency_threshold, func.abs(cls.grating_tilt_value - grating_tilt) < tilt_equivalency_threshold) instrument_setup_object = instrument_setup_query.first() if instrument_setup_object is None: instrument_setup_object = cls( filter1_id=filter1.id, filter2_id=filter2.id, grating_id=grating.id, grating_central_wavelength_value=grating_central_wavelength, grating_slit_wavelength_value=grating_slit_wavelength, grating_tilt_value=grating_tilt, grating_order=grating_order, instrument_id=instrument.id) session.add(instrument_setup_object) session.commit() return instrument_setup_object