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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 | class SetTriggeredDetectors(KPFFunction):
'''Selects which cameras will be triggered by setting the
`kpfexpose.TRIG_TARG` keyword value.
Args:
TriggerRed (bool): Trigger the Red detector? (default=False)
TriggerGreen (bool): Trigger the Green detector? (default=False)
TriggerCaHK (bool): Trigger the CaH&K detector? (default=False)
TriggerExpMeter (bool): Trigger the ExpMeter detector? (default=False)
KTL Keywords Used:
- `kpfexpose.TRIG_TARG`
- `kpfconfig.RED_ENABLED`
- `kpfconfig.GREEN_ENABLED`
- `kpfconfig.CA_HK_ENABLED`
- `kpfconfig.EXPMETER_ENABLED`
'''
@classmethod
def pre_condition(cls, args):
pass
@classmethod
def perform(cls, args):
kpfconfig = ktl.cache('kpfconfig')
detector_list = []
if args.get('TriggerRed', False) is True:
if kpfconfig['RED_ENABLED'].read(binary=True) == False:
log.warning(f'Red detector is not enabled')
else:
detector_list.append('Red')
if args.get('TriggerGreen', False) is True:
if kpfconfig['GREEN_ENABLED'].read(binary=True) == False:
log.warning(f'Green detector is not enabled')
else:
detector_list.append('Green')
if args.get('TriggerCaHK', False) is True:
if kpfconfig['CA_HK_ENABLED'].read(binary=True) == False:
log.warning(f'Ca HK detector is not enabled')
else:
detector_list.append('Ca_HK')
if args.get('TriggerExpMeter', False) is True:
if kpfconfig['EXPMETER_ENABLED'].read(binary=True) == False:
log.warning(f'ExpMeter detector is not enabled')
else:
detector_list.append('ExpMeter')
if args.get('TriggerGuide', False) is True:
detector_list.append('Guide')
detectors_string = ','.join(detector_list)
log.debug(f"Setting triggered detectors to '{detectors_string}'")
TRIG_TARG = ktl.cache('kpfexpose', 'TRIG_TARG')
TRIG_TARG.write(detectors_string)
@classmethod
def post_condition(cls, args):
kpfconfig = ktl.cache('kpfconfig')
TRIG_TARG = ktl.cache('kpfexpose', 'TRIG_TARG')
TRIG_TARG.monitor()
detector_names = [('Red', 'TriggerRed',
kpfconfig[f'RED_ENABLED'].read(binary=True)),
('Green', 'TriggerGreen',
kpfconfig[f'GREEN_ENABLED'].read(binary=True)),
('Ca_HK', 'TriggerCaHK',
kpfconfig[f'CA_HK_ENABLED'].read(binary=True)),
('ExpMeter', 'TriggerExpMeter',
kpfconfig[f'EXPMETER_ENABLED'].read(binary=True)),
]
detector_tests = [False]
timeshim = cfg.getfloat('times', 'kpfexpose_shim_time', fallback=0.01)
total_time = 0
while np.all(detector_tests) != True and total_time < 0.25:
detector_tests = []
for detector in detector_names:
if args.get(detector[1], False) and detector[2]:
detector_tests.append(detector[0] in TRIG_TARG.ascii.split(','))
sleep(timeshim)
total_time += timeshim
if np.all(detector_tests) != True:
raise FailedToReachDestination(TRIG_TARG.ascii, 'TBD')
@classmethod
def add_cmdline_args(cls, parser):
parser.add_argument("--Red", "--red", "-r",
dest="TriggerRed",
default=False, action="store_true",
help="Trigger the Red detector during exposure?")
parser.add_argument("--Green", "--green", "-g",
dest="TriggerGreen",
default=False, action="store_true",
help="Trigger the Green detector during exposure?")
parser.add_argument("--CaHK", "--HK", "--cahk", "--hk",
dest="TriggerCaHK",
default=False, action="store_true",
help="Trigger the CaHK detector during exposure?")
parser.add_argument("--ExpMeter", "--expmeter", "--EM", "--em",
dest="TriggerExpMeter",
default=False, action="store_true",
help="Trigger the ExpMeter detector during exposure?")
parser.add_argument("--Guide", "--Guider", "--guide", "--guider", "--CRED2",
dest="TriggerGuide",
default=False, action="store_true",
help="Trigger the Guider detector during exposure?")
return super().add_cmdline_args(parser)
|