Skip to content

Commit 9e0fa6e

Browse files
committed
ximea: style fixes.
Mark private attributes as private; Don't pass formatted messages to the logger so it only happens if the message emitted; remove unused trigger_type_to_value.
1 parent 9fe1030 commit 9e0fa6e

File tree

1 file changed

+47
-59
lines changed

1 file changed

+47
-59
lines changed

microscope/cameras/ximea.py

Lines changed: 47 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -21,46 +21,36 @@
2121

2222
import logging
2323

24-
import numpy as np
24+
from ximea import xiapi
2525

2626
from microscope import devices
27-
from microscope.devices import keep_acquiring, ROI
28-
29-
# import ximea python module.
30-
from ximea import xiapi
3127

3228

3329
_logger = logging.getLogger(__name__)
3430

3531

36-
trigger_type_to_value = {
37-
0: 'XI_TRG_SOFTWARE',
38-
1: 'XI_TRG_EDGE_RISING',
39-
}
40-
41-
4232
class XimeaCamera(devices.CameraDevice):
43-
def __init__(self, dev_id = 0, **kwargs):
33+
def __init__(self, dev_id=0, **kwargs):
4434
super().__init__(**kwargs)
4535
self._acquiring = False
4636
self._exposure_time = 0.1
4737
self._triggered = False
48-
self.handle = None
49-
self.dev_id = dev_id
50-
self.Roi=ROI(None,None,None,None)
38+
self._handle = None
39+
self._dev_id = dev_id
40+
self._roi = devices.ROI(None,None,None,None)
5141

5242
def _fetch_data(self):
5343
if not self._acquiring:
5444
return
5545

56-
trigger_type = self.handle.get_trigger_source()
46+
trigger_type = self._handle.get_trigger_source()
5747
if trigger_type == 'XI_TRG_SOFTWARE' and not self._triggered:
5848
return
5949
elif trigger_type != 'XI_TRG_EDGE_RISING':
6050
raise Exception('unhandled trigger type %s' % trigger_type)
6151

6252
try:
63-
self.handle.get_image(self.img)
53+
self._handle.get_image(self.img)
6454
data = self.img.get_image_data_numpy()
6555
_logger.info("Fetched imaged with dims %s and size %s.",
6656
data.shape, data.size)
@@ -79,31 +69,29 @@ def abort(self):
7969
_logger.info('Disabling acquisition.')
8070
if self._acquiring:
8171
self._acquiring = False
82-
self.handle.stop_acquisition()
72+
self._handle.stop_acquisition()
8373

8474
def initialize(self):
8575
"""Initialise the camera.
8676
8777
Open the connection, connect properties and populate settings dict.
8878
"""
8979
try:
90-
self.handle = xiapi.Camera(self.dev_id)
91-
self.handle.open_device()
80+
self._handle = xiapi.Camera(self._dev_id)
81+
self._handle.open_device()
9282
except:
9383
raise Exception("Problem opening camera.")
94-
if self.handle == None:
84+
if self._handle == None:
9585
raise Exception("No camera opened.")
9686

97-
# for name, var in sorted(self.__dict__.items()):
9887
_logger.info('Initializing.')
99-
# Try set camera into rising-edge hardware trigger mode. If that can't be done
100-
# set it to software trigger mode
88+
# Try set camera into rising-edge hardware trigger mode. If
89+
# that can't be done set it to software trigger mode.
10190
try:
102-
self.handle.set_trigger_source('XI_TRG_EDGE_RISING')
91+
self._handle.set_trigger_source('XI_TRG_EDGE_RISING')
10392
except:
104-
self.handle.set_trigger_source('XI_TRG_SOFTWARE')
93+
self._handle.set_trigger_source('XI_TRG_SOFTWARE')
10594
# create img buffer to hold images.
106-
10795
self.img = xiapi.Image()
10896

10997
def make_safe(self):
@@ -119,95 +107,95 @@ def _on_enable(self):
119107
self.abort()
120108
self._acquiring = True
121109
# actually start camera
122-
self.handle.start_acquisition()
110+
self._handle.start_acquisition()
123111
_logger.info("Acquisition enabled.")
124112
return True
125113

126114
def set_exposure_time(self, value):
127115
# exposure times are set in us.
128116
try:
129-
self.handle.set_exposure(int(value * 1000000))
117+
self._handle.set_exposure(int(value * 1000000))
130118
except Exception as err:
131-
_logger.debug("set_exposure_time exception: %s" % err)
119+
_logger.debug("set_exposure_time exception: %s", err)
132120

133121
def get_exposure_time(self):
134122
# exposure times are in us, so multiple by 1E-6 to get seconds.
135-
return (self.handle.get_exposure() * 1.0E-6)
123+
return (self._handle.get_exposure() * 1.0E-6)
136124

137125
def get_cycle_time(self):
138-
return (1.0/self.handle.get_framerate())
126+
return (1.0/self._handle.get_framerate())
139127

140128
def _get_sensor_shape(self):
141-
return (self.handle.get_width(), self.handle.get_height())
129+
return (self._handle.get_width(), self._handle.get_height())
142130

143131
def get_trigger_source(self):
144-
return (self.handle.get_trigger_source())
132+
return (self._handle.get_trigger_source())
145133

146134
def get_trigger_type(self):
147-
trig = self.handle.get_trigger_source()
148-
_logger.info("called get trigger type %s" % trig)
135+
trig = self._handle.get_trigger_source()
136+
_logger.info("called get trigger type %s", trig)
149137
if trig == 'XI_TRG_SOFTWARE':
150138
return devices.TRIGGER_SOFT
151139
elif trig == 'XI_TRG_EDGE_RISING':
152140
return devices.TRIGGER_BEFORE
153141

154142
def set_trigger_source(self, trig):
155-
_logger.info("Set trigger source %s" % (trig))
143+
_logger.info("Set trigger source %s", trig)
156144
reenable = False
157145
if self._acquiring:
158146
self.abort()
159147
reenable = True
160-
result = self.handle.set_trigger_source(trig)
161-
_logger.info("Set trigger source result %s" % (result))
148+
result = self._handle.set_trigger_source(trig)
149+
_logger.info("Set trigger source result %s", result)
162150
if reenable:
163151
self._on_enable()
164152
return
165153

166154
def set_trigger_type(self, trig):
167-
_logger.info("Set trigger type %s" % (trig))
155+
_logger.info("Set trigger type %s", trig)
168156
self.abort()
169157

170158
if trig is 0:
171-
self.handle.set_trigger_source('XI_TRG_SOFTWARE')
159+
self._handle.set_trigger_source('XI_TRG_SOFTWARE')
172160
elif trig is 1:
173-
self.handle.set_trigger_source('XI_TRG_EDGE_RISING')
161+
self._handle.set_trigger_source('XI_TRG_EDGE_RISING')
174162
# define digial input mode of trigger
175-
self.handle.set_gpi_selector('XI_GPI_PORT1')
176-
self.handle.set_gpi_mode('XI_GPI_TRIGGER')
177-
self.handle.set_gpo_selector('XI_GPO_PORT1')
178-
self.handle.set_gpo_mode('XI_GPO_EXPOSURE_ACTIVE')
163+
self._handle.set_gpi_selector('XI_GPI_PORT1')
164+
self._handle.set_gpi_mode('XI_GPI_TRIGGER')
165+
self._handle.set_gpo_selector('XI_GPO_PORT1')
166+
self._handle.set_gpo_mode('XI_GPO_EXPOSURE_ACTIVE')
179167

180168
self._on_enable()
181169

182-
result = self.handle.get_trigger_source()
183-
_logger.info("Trigger type %s" % result)
184-
_logger.info("GPI Selector %s" % self.handle.get_gpi_selector())
185-
_logger.info("GPI Mode %s" % self.handle.get_gpi_mode())
170+
result = self._handle.get_trigger_source()
171+
_logger.info("Trigger type %s", result)
172+
_logger.info("GPI Selector %s", self._handle.get_gpi_selector())
173+
_logger.info("GPI Mode %s", self._handle.get_gpi_mode())
186174

187175
return
188176

189177
def soft_trigger(self):
190-
_logger.info('Soft trigger received; self._acquiring is %s.'
191-
% self._acquiring)
178+
_logger.info('Soft trigger received; self._acquiring is %s.',
179+
self._acquiring)
192180
if self._acquiring:
193-
self.handle.set_trigger_software(True)
181+
self._handle.set_trigger_software(True)
194182
self._triggered = True
195183

196184
def _get_binning(self):
197185
return (1, 1)
198186

199-
@keep_acquiring
187+
@devices.keep_acquiring
200188
def _set_binning(self, h, v):
201189
return False
202190

203191
def _get_roi(self):
204-
return self.Roi
192+
return self._roi
205193

206-
@keep_acquiring
194+
@devices.keep_acquiring
207195
def _set_roi(self, x, y, width, height):
208-
self.Roi = ROI(x, y, width, height)
196+
self._roi = devices.ROI(x, y, width, height)
209197

210198
def _on_shutdown(self):
211199
if self._acquiring:
212-
self.handle.stop_acquisition()
213-
self.handle.close_device()
200+
self._handle.stop_acquisition()
201+
self._handle.close_device()

0 commit comments

Comments
 (0)