@@ -102,7 +102,7 @@ def set_window(self, left: float, top: float, width: float, height: float, *args
102
102
Raises:
103
103
ValueError: If binning could not be set.
104
104
"""
105
- self ._window = { 'left' : int (left ), ' top' : int ( top ), ' width' : int ( width ), ' height' : int ( height )}
105
+ self ._window = (left , top , width , height )
106
106
log .info ('Setting window to %dx%d at %d,%d...' , width , height , left , top )
107
107
108
108
def set_binning (self , x : int , y : int , * args , ** kwargs ):
@@ -115,7 +115,7 @@ def set_binning(self, x: int, y: int, *args, **kwargs):
115
115
Raises:
116
116
ValueError: If binning could not be set.
117
117
"""
118
- self ._binning = { 'x' : int ( x ), 'y' : int ( y )}
118
+ self ._binning = ( x , y )
119
119
log .info ('Setting binning to %dx%d...' , x , y )
120
120
121
121
def _expose (self , exposure_time : int , open_shutter : bool , abort_event : threading .Event ) -> fits .PrimaryHDU :
@@ -131,18 +131,18 @@ def _expose(self, exposure_time: int, open_shutter: bool, abort_event: threading
131
131
"""
132
132
133
133
# set binning
134
- log .info ("Set binning to %dx%d." , self ._binning ['x' ], self ._binning ['y' ])
135
- self ._driver .set_binning (self ._binning [ 'x' ], self . _binning [ 'y' ] )
134
+ log .info ("Set binning to %dx%d." , self ._binning [0 ], self ._binning [1 ])
135
+ self ._driver .set_binning (* self ._binning )
136
136
137
137
# set window, divide width/height by binning, from libfli:
138
138
# "Note that the given lower-right coordinate must take into account the horizontal and
139
139
# vertical bin factor settings, but the upper-left coordinate is absolute."
140
- width = int (math .floor (self ._window ['width' ]) / self ._binning ['x' ])
141
- height = int (math .floor (self ._window ['height' ]) / self ._binning ['y' ])
140
+ width = int (math .floor (self ._window [2 ]) / self ._binning [0 ])
141
+ height = int (math .floor (self ._window [3 ]) / self ._binning [1 ])
142
142
log .info ("Set window to %dx%d (binned %dx%d) at %d,%d." ,
143
- self ._window ['width' ], self ._window ['height' ], width , height ,
144
- self ._window ['left' ], self ._window ['top' ])
145
- self ._driver .set_window (self ._window ['left' ], self ._window ['top' ], width , height )
143
+ self ._window [2 ], self ._window [3 ], width , height ,
144
+ self ._window [0 ], self ._window [1 ])
145
+ self ._driver .set_window (self ._window [0 ], self ._window [1 ], width , height )
146
146
147
147
# set some stuff
148
148
self ._change_exposure_status (ICamera .ExposureStatus .EXPOSING )
@@ -174,8 +174,8 @@ def _expose(self, exposure_time: int, open_shutter: bool, abort_event: threading
174
174
# readout
175
175
log .info ('Exposure finished, reading out...' )
176
176
self ._change_exposure_status (ICamera .ExposureStatus .READOUT )
177
- width = int (math .floor (self ._window ['width' ] / self ._binning ['x' ]))
178
- height = int (math .floor (self ._window ['height' ] / self ._binning ['y' ]))
177
+ width = int (math .floor (self ._window [2 ] / self ._binning [0 ]))
178
+ height = int (math .floor (self ._window [3 ] / self ._binning [1 ]))
179
179
img = np .zeros ((height , width ), dtype = np .uint16 )
180
180
for row in range (height ):
181
181
img [row , :] = self ._driver .grab_row (width )
@@ -192,12 +192,12 @@ def _expose(self, exposure_time: int, open_shutter: bool, abort_event: threading
192
192
hdu .header ['INSTRUME' ] = (self ._driver .name , 'Name of instrument' )
193
193
194
194
# binning
195
- hdu .header ['XBINNING' ] = hdu .header ['DET-BIN1' ] = (self ._binning ['x' ], 'Binning factor used on X axis' )
196
- hdu .header ['YBINNING' ] = hdu .header ['DET-BIN2' ] = (self ._binning ['y' ], 'Binning factor used on Y axis' )
195
+ hdu .header ['XBINNING' ] = hdu .header ['DET-BIN1' ] = (self ._binning [0 ], 'Binning factor used on X axis' )
196
+ hdu .header ['YBINNING' ] = hdu .header ['DET-BIN2' ] = (self ._binning [1 ], 'Binning factor used on Y axis' )
197
197
198
198
# window
199
- hdu .header ['XORGSUBF' ] = (self ._window ['left' ], 'Subframe origin on X axis' )
200
- hdu .header ['YORGSUBF' ] = (self ._window ['top' ], 'Subframe origin on Y axis' )
199
+ hdu .header ['XORGSUBF' ] = (self ._window [0 ], 'Subframe origin on X axis' )
200
+ hdu .header ['YORGSUBF' ] = (self ._window [1 ], 'Subframe origin on Y axis' )
201
201
202
202
# statistics
203
203
hdu .header ['DATAMIN' ] = (float (np .min (img )), 'Minimum data value' )
@@ -206,7 +206,7 @@ def _expose(self, exposure_time: int, open_shutter: bool, abort_event: threading
206
206
207
207
# biassec/trimsec
208
208
full = self .get_full_frame ()
209
- self .set_biassec_trimsec (hdu .header , full [ 'left' ], full [ 'top' ], full [ 'width' ], full [ 'height' ] )
209
+ self .set_biassec_trimsec (hdu .header , * full )
210
210
211
211
# return FITS image
212
212
log .info ('Readout finished.' )
0 commit comments