SetExpMeterTerminationParameters

Bases: KPFTranslatorFunction

Sets the exposure meter exposure termination control parameters

Parameters:
  • Band (int) –

    Which of the 4 exposure meter bands to use? 0=All, 1=498nm, 2=604nm, 3=711nm, 4=817nm (from kpf_expmeter.THRESHOLDBIN).

  • Flux (float) –

    The target flux (e/nm) in the science spectrum.

KTL Keywords Used:

  • kpf_expmeter.THRESHOLDBIN
  • kpf_expmeter.THRESHOLD
  • kpf_expmeter.USETHRESHOLD
Source code in kpf/expmeter/SetExpMeterTerminationParameters.py
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
class SetExpMeterTerminationParameters(KPFTranslatorFunction):
    '''Sets the exposure meter exposure termination control parameters

    Args:
        Band (int): Which of the 4 exposure meter bands to use? 0=All, 1=498nm,
            2=604nm, 3=711nm, 4=817nm (from kpf_expmeter.THRESHOLDBIN).
        Flux (float): The target flux (e/nm) in the science spectrum.

    KTL Keywords Used:

    - `kpf_expmeter.THRESHOLDBIN`
    - `kpf_expmeter.THRESHOLD`
    - `kpf_expmeter.USETHRESHOLD`
    '''
    @classmethod
    def pre_condition(cls, args, logger, cfg):
        check_input(args, 'ExpMeterThreshold', allowed_types=[int, float],
                    value_min=0)
        check_input(args, 'ExpMeterBin')
        # Manually check ExpMeterBin inputs
        band = args.get('ExpMeterBin')
        tbin = ktl.cache('kpf_expmeter', 'THRESHOLDBIN')
        allowed_values = list(tbin._getEnumerators())
        if isinstance(band, float):
            band = str(band)
        if isinstance(band, str):
            if band not in allowed_values:
                raise FailedPreCondition(f"ExpMeterBin '{band}' not in {allowed_values}")
        else:
            raise FailedPreCondition(f"ExpMeterBin '{band}' could not be parsed")

    @classmethod
    def perform(cls, args, logger, cfg):
        band = str(args.get('ExpMeterBin'))
        spectrograph_flux = args.get('ExpMeterThreshold')
        expmeter_flux, snr_estimate = expeter_flux_target(spectrograph_flux, band)
        kpf_expmeter = ktl.cache('kpf_expmeter')
        kpf_expmeter['THRESHOLDBIN'].write(band)
        kpf_expmeter['THRESHOLD'].write(expmeter_flux)
        kpf_expmeter['USETHRESHOLD'].write('Yes')

    @classmethod
    def post_condition(cls, args, logger, cfg):
        pass

    @classmethod
    def add_cmdline_args(cls, parser, cfg=None):
        parser.add_argument('ExpMeterBin', type=int,
                            choices=[1,2,3,4],
                            help="Which exposure meter band to use (1, 2, 3, or 4)")
        parser.add_argument('ExpMeterThreshold', type=float,
                            help="Threshold flux in Mphotons per Angstrom in the main spectrograph")
        return super().add_cmdline_args(parser, cfg)