From bbd9e19c8a37965adbe4082b426487fdcfd28f2e Mon Sep 17 00:00:00 2001 From: nial Date: Thu, 29 Jan 2015 12:39:37 +0000 Subject: [PATCH] adds functions for opening a spectrometer by serial number --- oceanoptics/__init__.py | 3 +- oceanoptics/base.py | 57 +++++---- oceanoptics/spectrometers/APEX.py | 4 +- oceanoptics/spectrometers/MAYA.py | 4 +- oceanoptics/spectrometers/MAYA2000pro.py | 4 +- oceanoptics/spectrometers/QE65xxx.py | 9 +- oceanoptics/spectrometers/STS.py | 4 +- oceanoptics/spectrometers/TORUS.py | 4 +- oceanoptics/spectrometers/XXX2000.py | 12 +- oceanoptics/spectrometers/XXX2000plus.py | 8 +- oceanoptics/spectrometers/XXX4000.py | 8 +- oceanoptics/utils.py | 141 ++++++++++++++++++++--- 12 files changed, 194 insertions(+), 64 deletions(-) diff --git a/oceanoptics/__init__.py b/oceanoptics/__init__.py index 56b4de1..1604536 100644 --- a/oceanoptics/__init__.py +++ b/oceanoptics/__init__.py @@ -13,4 +13,5 @@ from oceanoptics.defines import OceanOpticsError -from oceanoptics.utils import get_a_random_spectrometer +from oceanoptics.utils import get_a_random_spectrometer, get_available_spectrometers +from oceanoptics.utils import get_spectrometer, list_available_spectrometers diff --git a/oceanoptics/base.py b/oceanoptics/base.py index 87ba45c..0bdad51 100644 --- a/oceanoptics/base.py +++ b/oceanoptics/base.py @@ -21,6 +21,7 @@ class OceanOpticsSpectrometer(object): All spectrometers should inherit from this! (or from a class that inherits from this) """ + def wavelengths(self, only_valid_pixels=True): """ returns a np.array with wavelenghts in nm """ raise NotImplementedError @@ -44,10 +45,10 @@ def integration_time(self, time_sec=None): class OceanOpticsUSBComm(object): - def __init__(self, model): - self._usb_init_connection(model) + def __init__(self, model, device=None): + self._usb_init_connection(model, device) - def _usb_init_connection(self, model): + def _usb_init_connection(self, model, device): if model not in _OOModelConfig.keys(): raise _OOError('Unkown OceanOptics spectrometer model: %s' % model) @@ -63,20 +64,25 @@ def _usb_init_connection(self, model): self._EPin1_size = _OOModelConfig[model]['EPin1_size'] self._min_integration_time, self._max_integration_time = _OOMinMaxIT[model] - devices = usb.core.find(find_all=True, - custom_match=lambda d: (d.idVendor==vendorId and - d.idProduct in productId)) - # FIXME: generator fix - devices = list(devices) + if device is None: + #if no specific device is passed in, then search for all OO devices + #and open the first one. + devices = usb.core.find(find_all=True, + custom_match=lambda d: (d.idVendor==vendorId and + d.idProduct in productId)) + # FIXME: generator fix + devices = list(devices) - try: - self._dev = devices.pop(0) - except (AttributeError, IndexError): - raise _OOError('No OceanOptics %s spectrometer found!' % model) + try: + self._dev = devices.pop(0) + except (AttributeError, IndexError): + raise _OOError('No OceanOptics %s spectrometer found!' % model) + else: + if devices: + warnings.warn('Currently the first device matching the ' + 'Vendor/Product id is used') else: - if devices: - warnings.warn('Currently the first device matching the ' - 'Vendor/Product id is used') + self._dev = device self._dev.set_configuration() self._USBTIMEOUT = self._dev.default_timeout * 1e-3 @@ -117,8 +123,8 @@ class OceanOpticsBase(OceanOpticsSpectrometer, OceanOpticsUSBComm): """ - def __init__(self, model): - super(OceanOpticsBase, self).__init__(model) + def __init__(self, model,**kwargs): + super(OceanOpticsBase, self).__init__(model, **kwargs) self._initialize() status = self._init_robust_status() @@ -127,9 +133,11 @@ def __init__(self, model): self._pixels = status['pixels'] self._EPspec = self._EPin1 if self._usb_speed == 0x80 else self._EPin0 self._packet_N, self._packet_size, self._packet_func = ( - _OOSpecConfig[model][self._usb_speed] ) + _OOSpecConfig[self.model][self._usb_speed] ) self._init_robust_spectrum() - + + self._serial_number = self._query_information(0) + # XXX: differs for some spectrometers... #self._sat_factor = 65535.0/float( # stuct.unpack('