def generate_bias(detector, number, temporary_path): from megaradrp.simulation.actions import simulate_bias from megaradrp.recipes.calibration.bias import BiasRecipe config_uuid = '4fd05b24-2ed9-457b-b563-a3c618bb1d4c' date_obs = '2017-11-09T11:00:00.0' fs = [simulate_bias(detector) for i in range(number)] header = fits.Header() header['DATE-OBS'] = date_obs header['INSCONF'] = config_uuid header['INSTRUME'] = 'MEGARA' header['VPH'] = 'LR-U' header['INSMODE'] = 'MOS' for aux in range(len(fs)): fits.writeto('%s/bias_%s.fits' % (temporary_path, aux), fs[aux], header=header, overwrite=True) fs = ["%s/bias_%s.fits" % (temporary_path, i) for i in range(number)] ob = ObservationResult() ob.instrument = 'MEGARA' ob.mode = 'bias_image' pkg_paths = ['megaradrp.instrument.configs'] store = asb.load_paths_store(pkg_paths) insmodel = asb.assembly_instrument(store, config_uuid, date_obs, by_key='uuid') insmodel.configure_with_header(header) ob.configuration = insmodel ob.frames = [DataFrame(filename=f) for f in fs] recipe = BiasRecipe() ri = recipe.create_input(obresult=ob) return recipe.run(ri)
def test_bias(drpmocker): BASE_URL = 'http://guaix.fis.ucm.es/~spr/megara_test/BIAS/%s' images = ['e99d2937d2c29a27c0ba4eebfcf7918e', 'e99d2937d2c29a27c0ba4eebfcf7918e', 'e99d2937d2c29a27c0ba4eebfcf7918e'] fs = [download_cache(BASE_URL % i) for i in images] ob = ObservationResult() ob.instrument = 'MEGARA' ob.mode = 'bias_image' ob.frames = [DataFrame(filename=f.name) for f in fs] drpmocker.add_drp('MEGARA', load_drp) # Here we could directly import the required pipeline, # but the idea is to test all the process insdrp = numina.drps.get_system_drps().query_by_name(ob.instrument) pipeline = insdrp.pipelines.get('default') recipe_fqn = pipeline.recipes.get(ob.mode) RecipeClass = import_object(recipe_fqn) assert RecipeClass is BiasRecipe # TODO: these should be created by a build_recipe_input method recipe = BiasRecipe() ri = recipe.create_input(obresult=ob) result = recipe.run(ri) # assert result.qc >= QC.UNKNOWN # Checks on the image hdulist = result.biasframe.open() assert len(hdulist) == 1 hdu = hdulist[0] assert hdu.shape == (4112, 4096) data = hdu.data mlevel = 0.0 block = data[1980:2020, 1980:2020] mblock = block.mean() sblock = block.std() assert abs(mblock - mlevel) < 5 * sblock # In the end, remove the files for f in fs: os.remove(f.name)
def generate_bias(detector, number, temporary_path): from megaradrp.simulation.actions import simulate_bias from megaradrp.recipes.calibration.bias import BiasRecipe fs = [simulate_bias(detector) for i in range(number)] for aux in range(len(fs)): fits.writeto('%s/bias_%s.fits' % (temporary_path, aux), fs[aux], clobber=True) fs = ["%s/bias_%s.fits" % (temporary_path, i) for i in range(number)] ob = ObservationResult() ob.instrument = 'MEGARA' ob.mode = 'bias_image' ob.configuration = build_instrument_config('4fd05b24-2ed9-457b-b563-a3c618bb1d4c', loader=Loader()) ob.frames = [DataFrame(filename=f) for f in fs] recipe = BiasRecipe() ri = recipe.create_input(obresult=ob) return recipe.run(ri)