2121
2222import logging
2323
24- import numpy as np
24+ from ximea import xiapi
2525
2626from 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-
4232class 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