def show_recipes(args): drpsys = DrpSystem() # Query instruments if args.instrument: name = args.instrument res = [(name, drpsys.query_by_name(name))] else: res = drpsys.query_all().items() # Function to print if args.template: this_recipe_print = print_recipe_template else: this_recipe_print = print_recipe for name, theins in res: # Per instrument if theins: for pipe in theins.pipelines.values(): for mode, recipe_fqn in pipe.recipes.items(): if not args.name or (recipe_fqn in args.name): Cls = import_object(recipe_fqn) this_recipe_print(Cls, name=recipe_fqn, insname=theins.name, pipename=pipe.name, modename=mode) else: print_no_instrument(name)
def test_recipe1(): drps = init_drp_system() instrument = drps.get('MEGARA') pipeline = instrument.pipelines.get('default') recipe_fqn = pipeline.recipes.get('bias_image') RecipeClass = import_object(recipe_fqn) assert RecipeClass is BiasRecipe
def test_recipe1(drpmocker): drpmocker.add_drp('MEGARA', load_drp) insdrp = numina.drps.get_system_drps().query_by_name('MEGARA') pipeline = insdrp.pipelines.get('default') recipe_fqn = pipeline.recipes.get('MEGARA_BIAS_IMAGE') RecipeClass = import_object(recipe_fqn) assert RecipeClass is BiasRecipe
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 test_recipe2(): drps = init_drp_system() 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] instrument = drps.get(ob.instrument) pipeline = instrument.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 RecipeInputBuilder recipe = BiasRecipe() RR = BiasRecipe.RecipeRequirements # @UndefinedVariable ri = RR(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 search_recipe_from_ob(self, obsres, pipeline): _logger.info("Identifier of the observation result: %s", obsres.id) _logger.info("instrument name: %s", obsres.instrument) my_ins = self.drps.query_by_name(obsres.instrument) if my_ins is None: raise ValueError('no instrument named %r' % obsres.instrument) my_pipe = my_ins.pipelines.get(pipeline) if my_pipe is None: raise ValueError('no pipeline named %r' % pipeline) _logger.info("observing mode: %r", obsres.mode) recipe_fqn = my_pipe.recipes.get(obsres.mode) recipeclass = import_object(recipe_fqn) return recipeclass
def search_recipe(self, ins, mode, pipeline): recipe_fqn = self.search_recipe_fqn(ins, mode, pipeline) klass = import_object(recipe_fqn) return klass