diff --git a/andorEmccd/andorEmccd.py b/andorEmccd/andorEmccd.py index b4b6513..3ea3311 100755 --- a/andorEmccd/andorEmccd.py +++ b/andorEmccd/andorEmccd.py @@ -39,6 +39,7 @@ class LibInstance: 20072: "DRV_ACQUIRING", 20073: "DRV_IDLE", 20075: "DRV_NOT_INITIALIZED", + 20081: "DRV_DRV_I2CDEVNOTFOUND", # can occur if USB device disappeared (e.g. camera powered off) 20992: "DRV_NOT_AVAILABLE" } @@ -107,7 +108,7 @@ def get_number_new_images(first, last): self.set_em_advanced = wrapper(dll.SetEMAdvanced, [c_int]) self.set_em_gain_mode = wrapper(dll.SetEMGainMode, [c_int]) self.get_detector = wrapper(dll.GetDetector, [POINTER(c_int), POINTER(c_int)]) - self.set_kinetic_cycle_time = wrapper(dll.SetKineticCycleTime, [c_int]) + self.set_kinetic_cycle_time = wrapper(dll.SetKineticCycleTime, [c_float]) self.get_number_preamp_gains = wrapper(dll.GetNumberPreAmpGains, [POINTER(c_int)]) self.get_preamp_gain = wrapper(dll.GetPreAmpGain, [c_int, POINTER(c_float)]) self.set_preamp_gain = wrapper(dll.SetPreAmpGain, [c_int]) @@ -204,6 +205,8 @@ def __init__(self, leave_camera_warm=True, framebuffer_len=100, lib=None, system. """ self.leave_camera_warm = leave_camera_warm + self._stopping = threading.Event() + self._thread = None if lib is None: self.lib = LibInstance() @@ -254,8 +257,6 @@ def __init__(self, leave_camera_warm=True, framebuffer_len=100, lib=None, self._frame_call_list = [] - self._stopping = threading.Event() - # Start image acquisition thread self._thread = threading.Thread(target=self._acquisition_thread, daemon=True) self._thread.start() @@ -271,7 +272,8 @@ def close(self): if self.leave_camera_warm: self.stop_acquisition() self.set_temperature(10) - self._thread.join() + if self._thread is not None: + self._thread.join() with self.lock_camera(): self.lib.shutdown() self.lib = None @@ -405,6 +407,19 @@ def set_image_region(self, hStart, hEnd, vStart, vEnd, hBin=1, vBin=1): binning. The region is 0 indexed and inclusive, so the valid ranges for hStart is 0..self.ccdWidth-1 etc.""" + + def out_of_range(val, max): + return val < 0 or val > max-1 + + if out_of_range(hStart, self.ccdWidth): + raise ValueError("hStart out of range") + if out_of_range(hEnd, self.ccdWidth): + raise ValueError("hEnd out of range") + if out_of_range(vStart, self.ccdHeight): + raise ValueError("vStart out of range") + if out_of_range(vEnd, self.ccdHeight): + raise ValueError("vEnd out of range") + self.roiWidth = int((1+hEnd-hStart) / hBin) self.roiHeight = int((1+vEnd-vStart) / vBin) diff --git a/setup.py b/setup.py index d5ddfed..697b132 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,4 @@ setup(name='andorEmccd', version='0.1', packages=['andorEmccd'], - entry_points={ - "console_scripts": ["andorEmccd_controller=andorEmccd.controller:main"], - } -) \ No newline at end of file +)