CalLampPower

Bases: KPFFunction

Powers off one of the cal lamps via the kpflamps keyword service. Uses the lamp names from the OCTAGON when appropriate.

Parameters:
  • lamp (str) –

    Name of the lamp to control. Allowed Values: BrdbandFiber, U_gold, U_daily, Th_daily, Th_gold, WideFlat, ExpMeterLED, CaHKLED, SciLED, SkyLED

  • power (str) –

    Destination state for lamp power. Allowed Values: "on" or "off".

KTL Keywords Used:

  • kpflamps.BRDBANDFIBER
  • kpflamps.U_GOLD
  • kpflamps.U_DAILY
  • kpflamps.TH_DAILY
  • kpflamps.TH_GOLD
  • kpflamps.FF_FIBER
  • kpflamps.EXPMLED
  • kpflamps.HKLED
  • kpflamps.SCILED
  • kpflamps.SKYLED
Source code in kpf/calbench/CalLampPower.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
class CalLampPower(KPFFunction):
    '''Powers off one of the cal lamps via the `kpflamps` keyword service. Uses
    the lamp names from the OCTAGON when appropriate.

    Args:
        lamp (str): Name of the lamp to control. Allowed Values: BrdbandFiber,
            U_gold, U_daily, Th_daily, Th_gold, WideFlat, ExpMeterLED, CaHKLED,
            SciLED, SkyLED
        power (str): Destination state for lamp power. Allowed Values: "on" or
            "off".

    KTL Keywords Used:

    - `kpflamps.BRDBANDFIBER`
    - `kpflamps.U_GOLD`
    - `kpflamps.U_DAILY`
    - `kpflamps.TH_DAILY`
    - `kpflamps.TH_GOLD`
    - `kpflamps.FF_FIBER`
    - `kpflamps.EXPMLED`
    - `kpflamps.HKLED`
    - `kpflamps.SCILED`
    - `kpflamps.SKYLED`
    '''
    @classmethod
    def pre_condition(cls, args):
        # Check lamp name
        lamp = standardize_lamp_name(args.get('lamp', None))
        if lamp is None:
            msg = f"Could not standardize lamp name {args.get('lamp')}"
            raise FailedPreCondition(msg)
        # Check power
        check_input(args, 'power', allowed_values=['on', 'off'])

    @classmethod
    def perform(cls, args):
        lamp = standardize_lamp_name(args.get('lamp'))
        pwr = args.get('power')
        log.debug(f"Turning {pwr} {lamp}")
        kpflamps = ktl.cache('kpflamps')
        kpflamps[lamp].write(pwr)

    @classmethod
    def post_condition(cls, args):
        lamp = standardize_lamp_name(args.get('lamp'))
        pwr = args.get('power')
        timeout = cfg.getfloat('times', 'lamp_timeout', fallback=1)
        success = ktl.waitFor(f"($kpflamps.{lamp} == {pwr})", timeout=timeout)
        if success is not True:
            kpflamps = ktl.cache('kpflamps')
            raise FailedPostCondition(kpflamps[lamp], pwr)

    @classmethod
    def add_cmdline_args(cls, parser):
        parser.add_argument('lamp', type=str,
                            choices=['BrdbandFiber', 'U_gold', 'U_daily',
                                     'Th_daily', 'Th_gold', 'WideFlat',
                                     'ExpMeterLED', 'CaHKLED', 'SciLED',
                                     'SkyLED'],
                            help='Which lamp to control?')
        parser.add_argument('power', type=str,
                            choices=['on', 'off'],
                            help='Desired power state: "on" or "off"')
        return super().add_cmdline_args(parser)