Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v0.7.1.3 to dev #24

Merged
merged 2 commits into from
Sep 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 31 additions & 52 deletions examples/custom_measurement.py
Original file line number Diff line number Diff line change
@@ -1,70 +1,49 @@
import numpy as np

from sciopy import (
SystemMessageCallback,
set_measurement_config,
connect_COM_port,
StartStopMeasurement,
reshape_full_message_in_bursts,
del_hex_in_list,
split_bursts_in_frames,
sciospec_measurement,
connect_COM_port_usb_hs,
set_measurement_config_usb_hs,
SystemMessageCallback_usb_hs,
)

from sciopy.sciopy_dataclasses import ScioSpecMeasurementSetup

s_path = ""
files_offset = 0

sciospec_measurement_setup = ScioSpecMeasurementSetup(
# connect device
Sciospec = connect_COM_port_usb_hs()

# configuration
ssms = ScioSpecMeasurementSetup(
burst_count=1, # The number of measurements to be performed.
total_meas_num=10, # Repetitions of burst count
n_el=64, # Set 16, 32, 48 or 64 and do not forget to change the channel_group.
total_meas_num=1, # Repetitions of burst count
n_el=32, # Set 16, 32, 48 or 64 and do not forget to change the channel_group.
channel_group=[
1,
2,
3,
4,
], # Use [1] for n_el=16, [1,2] for n_el=32, [1,2,3] for n_el=48, and [1,2,3,4] for n_el=64
exc_freq=10_000, # 10,000Hz = 10kHz
framerate=5, # Measurements per second
exc_freq=125_000, # 10,000Hz = 10kHz
framerate=10, # Measurements per second
amplitude=0.01, # 0.01A = 10mA (maximum)
inj_skip=0, # injection electrode skip
inj_skip=16, # injection electrode skip
gain=1,
adc_range=1, # +/- 1V
notes="None", # add measurement information
configured=False,
notes="test measurement", # add measurement information
configured=True,
)

# Connect ScioSpec device
COM_ScioSpec = connect_COM_port(port="/dev/ttyACM0")

# Send configuration
set_measurement_config(serial=COM_ScioSpec, ssms=sciospec_measurement_setup)

# Read out system callback
SystemMessageCallback(COM_ScioSpec, prnt_msg=True)

# Start and stop single measurement
measurement_data_hex = StartStopMeasurement(COM_ScioSpec)
# Delete hex in mesured buffer
measurement_data = del_hex_in_list(measurement_data_hex)
# Reshape the full mesaurement buffer. Depending on number of electrodes
split_measurement_data = reshape_full_message_in_bursts(
measurement_data, sciospec_measurement_setup
)
measurement_data = split_bursts_in_frames(
split_measurement_data, sciospec_measurement_setup
)

# Set to "True" to save single measurement
save = True

if save:
for bursts in measurement_data:
np.savez(
s_path + "sample_{0:06d}.npz".format(files_offset),
config=sciospec_measurement_setup,
data=bursts,
)
files_offset += 1
SystemMessageCallback(COM_ScioSpec, prnt_msg=False)
# write config to device
set_measurement_config_usb_hs(Sciospec, ssms)
SystemMessageCallback_usb_hs(Sciospec, prnt_msg=True)

# measurement
sciospec_data = sciospec_measurement(Sciospec, ssms)

file_idx = 0
for bursts in sciospec_data:
np.savez(
s_path + "sample_{0:06d}.npz".format(file_idx),
config=ssms,
data=bursts,
)
file_idx += 1
71 changes: 0 additions & 71 deletions examples/measurement_n_el_16.py

This file was deleted.

71 changes: 0 additions & 71 deletions examples/measurement_n_el_32.py

This file was deleted.

7 changes: 7 additions & 0 deletions sciopy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
convert_fulldir_doteit_to_npz,
)


from .com_handling import (
available_serial_ports,
connect_COM_port,
Expand All @@ -20,6 +21,7 @@
set_measurement_config_usb_hs,
SystemMessageCallback_usb_hs,
StartStopMeasurement_usb_hs,
SoftwareReset_usb_hs,
)

from .print_command_info import (
Expand Down Expand Up @@ -102,6 +104,8 @@
mesh_sample,
)

from .sciospec_hs import sciospec_measurement

# TBD from .configurations import configuration_01

__all__ = [
Expand All @@ -123,6 +127,7 @@
"set_measurement_config_usb_hs",
"SystemMessageCallback_usb_hs",
"StartStopMeasurement_usb_hs",
"SoftwareReset_usb_hs",
# .print_command_info
"print_syntax",
"print_general_system_messages",
Expand Down Expand Up @@ -190,4 +195,6 @@
"add_circle_anomaly",
"plot_mesh",
"mesh_sample",
# .sciospec_hs
"sciospec_measurement",
]
21 changes: 21 additions & 0 deletions sciopy/sciospec_hs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
try:
import serial
except ImportError:
print("Could not import module: serial")

from sciopy import (
StartStopMeasurement_usb_hs,
del_hex_in_list,
reshape_full_message_in_bursts,
split_bursts_in_frames,
)

from sciopy.sciopy_dataclasses import ScioSpecMeasurementSetup


def sciospec_measurement(COM_Sciospec, ssms: ScioSpecMeasurementSetup) -> None:
measurement_data_hex = StartStopMeasurement_usb_hs(COM_Sciospec)
measurement_data = del_hex_in_list(measurement_data_hex)
split_measurement_data = reshape_full_message_in_bursts(measurement_data, ssms)
measurement_data = split_bursts_in_frames(split_measurement_data, ssms)
return measurement_data
17 changes: 17 additions & 0 deletions sciopy/usb_hs_handling.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from pyftdi.ftdi import Ftdi
import struct
import time
from typing import Union
from sciopy.sciopy_dataclasses import (
ScioSpecMeasurementSetup,
Expand Down Expand Up @@ -266,3 +267,19 @@ def StartStopMeasurement_usb_hs(serial: Ftdi, print_msg: bool = False) -> list:
serial.write_data(bytearray([0xB4, 0x01, 0x00, 0xB4]))
SystemMessageCallback_usb_hs(serial, prnt_msg=False, ret_hex_int="int")
return measurement_data_hex


def SoftwareReset_usb_hs(serial: Ftdi, print_msg: bool = True) -> None:
"""
Reset the ScioSpec device.

Parameters
----------
serial : Ftdi
USB-HS serial connection
print_msg : bool, optional
print the callback message, by default True
"""
serial.write_data(bytearray([0xA1, 0x00, 0xA1]))
time.sleep(5)
SystemMessageCallback_usb_hs(serial, print_msg)
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

setuptools.setup(
name="sciopy",
version="0.7.1",
version="0.7.1.3",
author="Jacob Peter Thönes",
author_email="[email protected]",
description="Python based interface module for communication with the Sciospec Electrical Impedance Tomography (EIT) device.",
Expand Down
Loading