Skip to content

USB2000 must be read three times before getting intensities #174

@MarcoBisi0

Description

@MarcoBisi0

spectrometer and system information

  • model: USB2000
  • operating system: Debian Bullseye 32bit
  • python version: Python 3.9.2
  • python-seabreeze version: current master
  • installed-via: pip

current problem

instrument must be read three times before getting intensities

steps to reproduce

Here is my code, I know it is ugly...

import matplotlib.pyplot as plt
import sys
import time

import seabreeze
seabreeze.use('pyseabreeze')
import seabreeze.spectrometers as sb

from seabreeze.spectrometers import Spectrometer
spec = Spectrometer.from_first_available()
spec.integration_time_micros(20000)

w=spec.wavelengths()

continua = 1
while continua:
	try:
		continua = 0
		i=spec.intensities()
	except:
		print(sys.exc_info()[0], 'occurred')
		continua = 1

plt.plot(w,i)
plt.show()

minimal code example and error (very helpful if available)

script output:
<class 'usb.core.USBError'> occurred
<class 'ValueError'> occurred

detailed output (line-by-line in python console)
FIRST CALL

>>> i=spec.intensities()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/marco/.local/lib/python3.9/site-packages/seabreeze/spectrometers.py", line 212, in intensities
    out = self._dev.f.spectrometer.get_intensities()
  File "/home/marco/.local/lib/python3.9/site-packages/seabreeze/pyseabreeze/features/spectrometer.py", line 184, in get_intensities
    tmp = self._get_spectrum_raw()
  File "/home/marco/.local/lib/python3.9/site-packages/seabreeze/pyseabreeze/features/spectrometer.py", line 168, in _get_spectrum_raw
    self.protocol.receive(
  File "/home/marco/.local/lib/python3.9/site-packages/seabreeze/pyseabreeze/protocol.py", line 110, in receive
    return self.transport.read(
  File "/home/marco/.local/lib/python3.9/site-packages/seabreeze/pyseabreeze/transport.py", line 194, in read
    ret: bytes = self._device.pyusb_device.read(
  File "/usr/lib/python3/dist-packages/usb/core.py", line 983, in read
    ret = fn(
  File "/usr/lib/python3/dist-packages/usb/backend/libusb1.py", line 828, in bulk_read
    return self.__read(self.lib.libusb_bulk_transfer,
  File "/usr/lib/python3/dist-packages/usb/backend/libusb1.py", line 936, in __read
    _check(retval)
  File "/usr/lib/python3/dist-packages/usb/backend/libusb1.py", line 595, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 75] Overflow

SECOND CALL

>>> i=spec.intensities()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/marco/.local/lib/python3.9/site-packages/seabreeze/spectrometers.py", line 212, in intensities
    out = self._dev.f.spectrometer.get_intensities()
  File "/home/marco/.local/lib/python3.9/site-packages/seabreeze/pyseabreeze/features/spectrometer.py", line 184, in get_intensities
    tmp = self._get_spectrum_raw()
  File "/home/marco/.local/lib/python3.9/site-packages/seabreeze/pyseabreeze/features/spectrometer.py", line 167, in _get_spectrum_raw
    tmp[:] = bytearray(
ValueError: could not broadcast input array from shape (65,) into shape (4097,)

THIRD CALL (wow, it works)

>>> i=spec.intensities()
>>> i
array([  0., 112., 113., ..., 121., 123., 120.])

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions