3131"""
3232
3333import logging
34- import re , sys , functools , os , platform
34+ import sys , functools , os , platform
3535import ctypes
3636from ctypes import Structure , POINTER
3737from ctypes import c_int , c_uint , c_long , c_ulong , c_longlong , c_ulonglong
3838from ctypes import c_ubyte , c_short , c_float , c_double , c_char , c_char_p
39- from ctypes import c_void_p
4039from numpy .ctypeslib import ndpointer
4140
4241
@@ -1132,9 +1131,8 @@ def __str__(self):
11321131
11331132
11341133from threading import Lock
1135- import functools
11361134from microscope import devices
1137- from microscope .devices import keep_acquiring , Setting , Binning , ROI
1135+ from microscope .devices import keep_acquiring , Binning , ROI
11381136import time
11391137
11401138# A lock on the DLL used to ensure DLL calls act on the correct device.
@@ -1255,21 +1253,21 @@ def initialize(self):
12551253 # Mode
12561254 name = 'readout mode'
12571255 if self ._readout_modes :
1258- self .settings [ name ] = Setting (name , 'enum' ,
1259- None ,
1260- self ._set_readout_mode ,
1261- lambda : [str (mode ) for mode in self ._readout_modes ])
1262- self .settings [ name ]. set ( 0 )
1256+ self .add_setting (name , 'enum' ,
1257+ None ,
1258+ self ._set_readout_mode ,
1259+ lambda : [str (mode ) for mode in self ._readout_modes ])
1260+ self .set_setting ( name , 0 )
12631261 # TriggerMode
12641262 name = 'TriggerMode'
1265- self .settings [ name ] = Setting (name , 'enum' ,
1266- None ,
1267- self ._bind (SetTriggerMode ),
1268- TriggerMode )
1263+ self .add_setting (name , 'enum' ,
1264+ None ,
1265+ self ._bind (SetTriggerMode ),
1266+ TriggerMode )
12691267 if self ._caps .ulTriggerModes & AC_TRIGGERMODE_EXTERNAL :
1270- self .settings [ name ]. set ( TriggerMode .EXTERNAL )
1268+ self .set_setting ( name , TriggerMode .EXTERNAL )
12711269 elif self ._caps .ulTriggerModes & AC_TRIGGERMODE_CONTINUOUS :
1272- self .settings [ name ]. set ( TriggerMode .SOFTWARE )
1270+ self .set_setting ( name , TriggerMode .SOFTWARE )
12731271 # Gain - device will use either EMGain or MCPGain
12741272 name = 'gain'
12751273 getter , setter , vrange = None , None , None
@@ -1284,9 +1282,7 @@ def initialize(self):
12841282 setter = self ._bind (SetMCPGain )
12851283 vrange = self ._bind (GetMCPGainRange )
12861284 if getter or setter :
1287- self .settings [name ] = Setting (name , 'int' ,
1288- getter , setter , vrange ,
1289- setter is None )
1285+ self .add_setting (name , 'int' , getter , setter , vrange , setter is None )
12901286 # Temperature
12911287 name = 'TemperatureSetPoint'
12921288 getter , setter , vrange = None , None , None
@@ -1295,77 +1291,73 @@ def initialize(self):
12951291 if self ._caps .ulGetFunctions & AC_GETFUNCTION_TEMPERATURERANGE :
12961292 vrange = self ._bind (GetTemperatureRange )
12971293 if setter :
1298- self .settings [name ] = Setting (name , 'int' ,
1299- None , setter , vrange ,
1300- setter is None )
1294+ self .add_setting (name , 'int' , None , setter , vrange , setter is None )
13011295 # Set a conservative default temperature set-point.
1302- self .settings [ name ]. set ( - 20 )
1296+ self .set_setting ( name , - 20 )
13031297 # Fan control
13041298 name = 'Temperature'
1305- self .settings [name ] = Setting (name , 'int' ,
1306- self .get_sensor_temperature ,
1307- None , (None , None ), True )
1299+ self .add_setting (name , 'int' , self .get_sensor_temperature , None , (None , None ), True )
13081300 name = 'Fan mode'
1309- self .settings [ name ] = Setting (name , 'enum' ,
1310- None , # Can't query fan mode
1311- self ._bind (SetFanMode ),
1312- {0 :'full' , 1 :'low' , 2 :'off' }
1313- )
1301+ self .add_setting (name , 'enum' ,
1302+ None , # Can't query fan mode
1303+ self ._bind (SetFanMode ),
1304+ {0 :'full' , 1 :'low' , 2 :'off' }
1305+ )
13141306 # Cooler control
13151307 name = 'Cooler Enabled'
1316- self .settings [ name ] = Setting (name , 'bool' ,
1317- None ,
1318- self ._set_cooler_state ,
1319- None )
1320- self .settings [ name ]. set ( True )
1308+ self .add_setting (name , 'bool' ,
1309+ None ,
1310+ self ._set_cooler_state ,
1311+ None )
1312+ self .set_setting ( name , True )
13211313 # Binning
13221314 name = 'Binning'
1323- self .settings [ name ] = Setting (name , 'tuple' ,
1324- self .get_binning ,
1325- self .set_binning ,
1326- None )
1315+ self .add_setting (name , 'tuple' ,
1316+ self .get_binning ,
1317+ self .set_binning ,
1318+ None )
13271319 # Roi
13281320 name = 'Roi'
1329- self .settings [ name ] = Setting (name , 'tuple' ,
1330- self .get_roi ,
1331- lambda roi : self .set_roi (* roi ),
1332- None )
1321+ self .add_setting (name , 'tuple' ,
1322+ self .get_roi ,
1323+ lambda roi : self .set_roi (* roi ),
1324+ None )
13331325 # BaselineClamp
13341326 name = 'BaselineClamp'
13351327 if self ._caps .ulSetFunctions & AC_SETFUNCTION_BASELINECLAMP :
1336- self .settings [ name ] = Setting (name , 'bool' ,
1337- None ,
1338- self ._bind (SetBaselineClamp ))
1339- self .settings [ name ]. set ( False )
1328+ self .add_setting (name , 'bool' ,
1329+ None ,
1330+ self ._bind (SetBaselineClamp ))
1331+ self .set_setting ( name , False )
13401332 # BaselineOffset
1341- nam = 'BaselineOffset'
1333+ name = 'BaselineOffset'
13421334 if self ._caps .ulSetFunctions & AC_SETFUNCTION_BASELINEOFFSET :
1343- self .settings [ name ] = Setting (name , 'int' ,
1344- None ,
1345- self ._bind (SetBaselineOffset ),
1346- (- 1000 , 1000 ))
1347- self .settings [ name ]. set ( 0 )
1335+ self .add_setting (name , 'int' ,
1336+ None ,
1337+ self ._bind (SetBaselineOffset ),
1338+ (- 1000 , 1000 ))
1339+ self .set_setting ( name , 0 )
13481340 # EMAdvanced
13491341 name = 'EMAdvanced'
13501342 if self ._caps .ulSetFunctions & AC_SETFUNCTION_EMADVANCED :
1351- self .settings [ name ] = Setting (name , 'bool' ,
1352- None ,
1353- self ._bind (SetEMAdvanced ))
1354- self .settings [ name ]. set ( False )
1343+ self .add_setting (name , 'bool' ,
1344+ None ,
1345+ self ._bind (SetEMAdvanced ))
1346+ self .set_setting ( name , False )
13551347 # GateMode
13561348 name = 'GateMode'
13571349 if self ._caps .ulSetFunctions & AC_SETFUNCTION_GATEMODE :
13581350 vrange = range (0 , [5 ,6 ][self ._caps .ulCameraType & AC_CAMERATYPE_ISTAR ])
1359- self .setings [ name ] = Setting (name , 'int' ,
1360- None ,
1361- self ._bind (SetGateMode ),
1362- vrange )
1351+ self .add_setting (name , 'int' ,
1352+ None ,
1353+ self ._bind (SetGateMode ),
1354+ vrange )
13631355 # HighCapacity
13641356 name = 'HighCapacity'
13651357 if self ._caps .ulSetFunctions & AC_SETFUNCTION_HIGHCAPACITY :
1366- self .settings [ name ] = Setting (name , 'bool' ,
1367- None ,
1368- self ._bind (SetHighCapacity ))
1358+ self .add_setting (name , 'bool' ,
1359+ None ,
1360+ self ._bind (SetHighCapacity ))
13691361
13701362 def _fetch_data (self ):
13711363 """Poll for data and return it, with minimal processing.
@@ -1431,7 +1423,7 @@ def _on_enable(self):
14311423 SetReadMode (ReadMode .IMAGE )
14321424 x , y = GetDetector ()
14331425 self ._set_image ()
1434- if not IsTriggerModeAvailable (self .settings [ 'TriggerMode' ]. get ( )):
1426+ if not IsTriggerModeAvailable (self .get_setting ( 'TriggerMode' )):
14351427 raise AtmcdException ("Trigger mode is not valid." )
14361428 StartAcquisition ()
14371429 return True
@@ -1508,7 +1500,7 @@ def get_sensor_temperature(self):
15081500
15091501 def get_trigger_type (self ):
15101502 """Return the microscope.devices trigger type."""
1511- trig = self .settings [ 'TriggerMode' ]. get ( )
1503+ trig = self .get_setting ( 'TriggerMode' )
15121504 if trig == TriggerMode .BULB :
15131505 return devices .TRIGGER_DURATION
15141506 elif trig == TriggerMode .SOFTWARE :
0 commit comments