SetupExpMeter

Bases: KPFTranslatorFunction

Configure the exposure meter using the given OB arguments.

Parameters:
  • ExpMeterMode (str) –

    See Science OB definition.

  • TriggerExpMeter (bool) –

    See Science OB definition.

KTL Keywords Used:

  • kpf_expmeter.USETHRESHOLD
  • kpfconfig.EXPMETER_ENABLED

Scripts Called:

  • kpf.expmeter.SetExpMeterTerminationParameters
Source code in kpf/expmeter/SetupExpMeter.py
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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 SetupExpMeter(KPFTranslatorFunction):
    '''Configure the exposure meter using the given OB arguments.

    Args:
        ExpMeterMode (str): See Science OB definition.
        TriggerExpMeter (bool): See Science OB definition.

    KTL Keywords Used:

    - `kpf_expmeter.USETHRESHOLD`
    - `kpfconfig.EXPMETER_ENABLED`

    Scripts Called:

    - `kpf.expmeter.SetExpMeterTerminationParameters`
    '''
    abortable = False

    @classmethod
    def pre_condition(cls, args, logger, cfg):
        check_input(args, 'Template_Name', allowed_values=['kpf_lamp', 'kpf_sci'])
        check_input(args, 'Template_Version', version_check=True, value_min='0.5')

    @classmethod
    def perform(cls, args, logger, cfg):
        kpf_expmeter = ktl.cache('kpf_expmeter')
        kpfconfig = ktl.cache('kpfconfig')

        ## ----------------------------------------------------------------
        ## Configure exposure meter
        ## ----------------------------------------------------------------
        log.debug('Setting up exposure meter using SetupExpMeter')
        EM_mode = args.get('ExpMeterMode', 'off')
        EM_enabled = kpfconfig['EXPMETER_ENABLED'].read() == 'Yes'
        if EM_mode == 'monitor' and EM_enabled:
            kpf_expmeter['USETHRESHOLD'].write('No')
            args['TriggerExpMeter'] = True
        elif EM_mode == 'control' and EM_enabled:
            args['TriggerExpMeter'] = True
            try:
                SetExpMeterTerminationParameters.execute(args)
            except Exception as e:
                log.error('SetExpMeterTerminationParameters failed')
                log.error(e)
                traceback_text = traceback.format_exc()
                log.error(traceback_text)
                kpf_expmeter['USETHRESHOLD'].write('No')
        elif EM_mode in ['off', False]: # pyyaml converts 'off' to False, so handle both
            args['TriggerExpMeter'] = False
        elif EM_enabled == False:
            log.warning('ExpMeter is disabled')
        else:
            log.warning(f"ExpMeterMode {EM_mode} is not available")
            kpf_expmeter['USETHRESHOLD'].write('No')

        # Must return args as we have edited them
        return args


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

    @classmethod
    def add_cmdline_args(cls, parser, cfg=None):
        parser.add_argument('--nointensemon', dest="nointensemon",
                            default=False, action="store_true",
                            help='Skip the intensity monitor measurement?')
        return super().add_cmdline_args(parser, cfg)