Source code for recipe_system.testing

import os
import pytest

import astrodata
import gemini_instruments

from astrodata import testing
from gempy.utils import logutils
from recipe_system.reduction.coreReduce import Reduce
from recipe_system.utils.reduce_utils import normalize_ucals


[docs]@pytest.fixture(scope='module') def get_master_arc(path_to_inputs, change_working_dir): """ Factory that creates a function that reads the master arc file from the permanent input folder or from the temporarily local cache, depending on command line options. Parameters ---------- path_to_inputs : pytest.fixture Path to the permanent local input files. change_working_dir : contextmanager Enable easy change to temporary folder when reducing data. Returns ------- AstroData The master arc. """ def _get_master_arc(ad, pre_process): cals = testing.get_associated_calibrations( ad.filename.split('_')[0] + '.fits') arc_filename = cals[cals.caltype == 'arc'].filename.values[0] arc_filename = arc_filename.split('.fits')[0] + '_arc.fits' if pre_process: with change_working_dir(): master_arc = astrodata.open(arc_filename) else: master_arc = astrodata.open( os.path.join(path_to_inputs, arc_filename)) return master_arc return _get_master_arc
[docs]@pytest.fixture(scope='module') def reduce_arc(change_working_dir): """ Factory for function for ARCS data reduction. Parameters ---------- change_working_dir : pytest.fixture Context manager used to write reduced data to a temporary folder. Returns ------- function : A function that will read the arcs files, process them and return the name of the master arc. """ def _reduce_arc(dlabel, arc_fnames): with change_working_dir(): print("Reducing ARCs in folder:\n {}".format(os.getcwd())) # Use config to prevent duplicated outputs when running Reduce via API logutils.config(file_name='log_arc_{}.txt'.format(dlabel)) reduce = Reduce() reduce.files.extend(arc_fnames) reduce.runr() master_arc = reduce.output_filenames.pop() return master_arc return _reduce_arc
[docs]@pytest.fixture(scope='module') def reduce_bias(change_working_dir): """ Factory for function for BIAS data reduction. Parameters ---------- change_working_dir : pytest.fixture Context manager used to write reduced data to a temporary folder. Returns ------- function : A function that will read the bias files, process them and return the name of the master bias. """ def _reduce_bias(datalabel, bias_fnames): with change_working_dir(): print("Reducing BIAS in folder:\n {}".format(os.getcwd())) logutils.config(file_name='log_bias_{}.txt'.format(datalabel)) reduce = Reduce() reduce.files.extend(bias_fnames) reduce.runr() master_bias = reduce.output_filenames.pop() return master_bias return _reduce_bias
[docs]@pytest.fixture(scope='module') def reduce_flat(change_working_dir): """ Factory for function for FLAT data reduction. Parameters ---------- change_working_dir : pytest.fixture Context manager used to write reduced data to a temporary folder. Returns ------- function : A function that will read the flat files, process them and return the name of the master flat. """ def _reduce_flat(data_label, flat_fnames, master_bias): with change_working_dir(): print("Reducing FLATs in folder:\n {}".format(os.getcwd())) logutils.config(file_name='log_flat_{}.txt'.format(data_label)) calibration_files = ['processed_bias:{}'.format(master_bias)] reduce = Reduce() reduce.files.extend(flat_fnames) reduce.mode = 'ql' reduce.ucals = normalize_ucals(reduce.files, calibration_files) reduce.runr() master_flat = reduce.output_filenames.pop() master_flat_ad = astrodata.open(master_flat) return master_flat_ad return _reduce_flat
[docs]@pytest.fixture(scope="module") def ref_ad_factory(path_to_refs): """ Read the reference file. Parameters ---------- path_to_refs : pytest.fixture Fixture containing the root path to the reference files. Returns ------- function : function that loads the reference file. """ def _reference_ad(filename): path = os.path.join(path_to_refs, filename) return astrodata.open(path) return _reference_ad