Bases: KPFFunction
Take a "trigger file" from the guide camera of a given duration.
Parameters: |
-
duration
(float )
–
The duration in seconds of the image set.
-
ImageCube
(bool )
–
Collect the full cube of images? (default True) This
will slow down file write considerably.
|
KTL Keywords Used:
kpfguide.TRIGCUBE
kpfguide.LASTTRIGFILE
kpfguide.ALL_LOOPS
Functions Called:
kpf.guider.StartTriggerFile
kpf.guider.StopTriggerFile
kpf.guider.WaitForTriggerFile
Source code in kpf/guider/TakeGuiderCube.py
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 TakeGuiderCube(KPFFunction):
'''Take a "trigger file" from the guide camera of a given duration.
Args:
duration (float): The duration in seconds of the image set.
ImageCube (bool): Collect the full cube of images? (default True) This
will slow down file write considerably.
KTL Keywords Used:
- `kpfguide.TRIGCUBE`
- `kpfguide.LASTTRIGFILE`
- `kpfguide.ALL_LOOPS`
Functions Called:
- `kpf.guider.StartTriggerFile`
- `kpf.guider.StopTriggerFile`
- `kpf.guider.WaitForTriggerFile`
'''
@classmethod
def pre_condition(cls, args):
check_input(args, 'duration', value_min=0)
@classmethod
def perform(cls, args):
duration = float(args.get('duration'))
kpfguide = ktl.cache('kpfguide')
# Read initial conditions, so we can set them back at the end
initial_trigcube = kpfguide['TRIGCUBE'].read()
initial_lastfile = kpfguide['LASTTRIGFILE'].read()
initial_all_loops = kpfguide['ALL_LOOPS'].read()
# Do we want to take the image cube?
collect_image_cube = args.get('ImageCube', True)
set_trigcube = {True: 'Active', False: 'Inactive'}[collect_image_cube]
kpfguide['TRIGCUBE'].write(set_trigcube)
# Trigger data collection
log.info(f"Starting guider cube data collection, duration = {duration:.1f} s")
StartTriggerFile.execute({})
time.sleep(duration)
StopTriggerFile.execute({})
# Stop all loops if we're writing out a full image cube
# if initial_all_loops == 'Active' and collect_image_cube == True:
# kpfguide['ALL_LOOPS'].write('Inactive', wait=False)
cube_file = WaitForTriggerFile.execute({'initial_lastfile': initial_lastfile})
# Reset TRIGCUBE
kpfguide['TRIGCUBE'].write(initial_trigcube)
# Reset ALL_LOOPS to initial values
# if initial_all_loops == 'Active' and collect_image_cube == True:
# kpfguide['ALL_LOOPS'].write(initial_all_loops)
return cube_file
@classmethod
def post_condition(cls, args):
pass
@classmethod
def add_cmdline_args(cls, parser):
parser.add_argument('duration', type=float,
help='The duration in seconds')
parser.add_argument("--noTRIGCUBE", dest="ImageCube",
default=True, action="store_false",
help="Collect the full image cube?")
return super().add_cmdline_args(parser)
|