SetTimedShutters

Bases: KPFTranslatorFunction

Selects which timed shutters will be triggered by setting the kpfexpose.TIMED_SHUTTERS keyword value.

ARGS:

:TimedShutter_Scrambler: bool Open the TimedShutter_Scrambler shutter? (default=False) :TimedShutter_SimulCal: bool Open the TimedShutter_SimulCal shutter? (default=False) :TimedShutter_CaHK: bool Open the TimedShutter_CaHK shutter? (default=False) :TimedShutter_FlatField: bool Open the TimedShutter_FlatField shutter? (default=False)

Source code in kpf/spectrograph/SetTimedShutters.py
10
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
80
81
class SetTimedShutters(KPFTranslatorFunction):
    '''Selects which timed shutters will be triggered by setting the
    `kpfexpose.TIMED_SHUTTERS` keyword value.

    ARGS:
    =====
    :TimedShutter_Scrambler: `bool` Open the TimedShutter_Scrambler shutter? (default=False)
    :TimedShutter_SimulCal: `bool` Open the TimedShutter_SimulCal shutter? (default=False)
    :TimedShutter_CaHK: `bool` Open the TimedShutter_CaHK shutter? (default=False)
    :TimedShutter_FlatField: `bool` Open the TimedShutter_FlatField shutter? (default=False)
    '''
    @classmethod
    def pre_condition(cls, args, logger, cfg):
        pass

    @classmethod
    def perform(cls, args, logger, cfg):
        # Scrambler 2 SimulCal 3 FF_Fiber 4 Ca_HK
        timed_shutters_list = []

        if args.get('TimedShutter_Scrambler', False) is True:
            timed_shutters_list.append('Scrambler')
        if args.get('TimedShutter_SimulCal', False) is True:
            timed_shutters_list.append('SimulCal')
        if args.get('TimedShutter_FlatField', False) is True:
            timed_shutters_list.append('FF_Fiber')
        if args.get('TimedShutter_CaHK', False) is True:
            timed_shutters_list.append('Ca_HK')
        timed_shutters_string = ','.join(timed_shutters_list)
        log.debug(f"Setting timed shutters to '{timed_shutters_string}'")
        kpfexpose = ktl.cache('kpfexpose')
        kpfexpose['TIMED_TARG'].write(timed_shutters_string)
        shim_time = cfg.getfloat('times', 'kpfexpose_shim_time', fallback=0.1)
        sleep(shim_time)

    @classmethod
    def post_condition(cls, args, logger, cfg):
        kpfexpose = ktl.cache('kpfexpose')
        timeshim = cfg.getfloat('times', 'kpfexpose_shim_time', fallback=0.01)
        sleep(timeshim)
        shutters = kpfexpose['TIMED_TARG'].read()
        log.debug(f"TIMED_TARG: {shutters}")
        shutter_list = shutters.split(',')
        shutter_names = [('Scrambler', 'TimedShutter_Scrambler'),
                         ('SimulCal', 'TimedShutter_SimulCal'),
                         ('FF_Fiber', 'TimedShutter_FlatField'),
                         ('Ca_HK', 'TimedShutter_CaHK')]
        for shutter in shutter_names:
            shutter_status = shutter[0] in shutter_list
            shutter_target = args.get(shutter[1], False)
            if shutter_target != shutter_status:
                raise FailedToReachDestination(shutter_status, shutter_target)

    @classmethod
    def add_cmdline_args(cls, parser, cfg=None):
        parser.add_argument("--Scrambler", "--scrambler",
                            dest="TimedShutter_Scrambler",
                            default=False, action="store_true",
                            help="Open the Scrambler Timed Shutter during exposure?")
        parser.add_argument("--SimulCal", "--simulcal",
                            dest="TimedShutter_SimulCal",
                            default=False, action="store_true",
                            help="Open the SimulCal Timed Shutter during exposure?")
        parser.add_argument("--CaHK", "--HK", "--cahk", "--hk",
                            dest="TimedShutter_CaHK",
                            default=False, action="store_true",
                            help="Open the CaHK Timed Shutter during exposure?")
        parser.add_argument("--FlatField", "--flatfield",
                            dest="TimedShutter_FlatField",
                            default=False, action="store_true",
                            help="Open the FlatField Timed Shutter during exposure?")
        return super().add_cmdline_args(parser, cfg)