summaryrefslogtreecommitdiff
path: root/python-lightcon.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-lightcon.spec')
-rw-r--r--python-lightcon.spec746
1 files changed, 746 insertions, 0 deletions
diff --git a/python-lightcon.spec b/python-lightcon.spec
new file mode 100644
index 0000000..8bfafb6
--- /dev/null
+++ b/python-lightcon.spec
@@ -0,0 +1,746 @@
+%global _empty_manifest_terminate_build 0
+Name: python-lightcon
+Version: 1.3.2
+Release: 1
+Summary: A set of APIs to Light Conversion devices
+License: MIT License
+URL: https://bitbucket.org/harpiasoftware/light-conversion-apis.git
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/3e/1d/823ffc77c8a3290924f6ac9d0c1e1de39d21ce531e1527d87b234863fb4f/lightcon-1.3.2.tar.gz
+BuildArch: noarch
+
+Requires: python3-pythonnet
+Requires: python3-pyserial
+Requires: python3-numpy
+Requires: python3-matplotlib
+Requires: python3-requests
+Requires: python3-pytest
+Requires: python3-scipy
+Requires: python3-pillow
+
+%description
+# lightcon
+
+## Installation
+### Pip
+```pip install lightcon```
+<!--
+## Changelog
+### 1.1
+#### Added
+fast_daq module
+examples/fast_daq_wrapper_example.py
+#### Fixed
+#### Removed
+
+### 1.0
+Initial release
+<!--
+#### Added
+#### Fixed
+#### Removed
+-->
+
+## Modules
+
+### `lightcon.beam_alignment`
+Beam Alignment App REST client
+
+### `lightcon.common`
+Tools and converters
+
+### `lightcon.laser_clients`
+REST API clients for PHAROS and CARBIDE lasers
+
+Example:
+```python
+from lightcon.laser_clients import Carbide, Pharos
+import time
+
+my_laser = Pharos('192.168.8.113')
+# my_laser = Carbide('192.168.8.113')
+
+pp_ratio = my_laser.get_pp()
+print("Pulse picker ratio: {:d}".format(pp_ratio))
+
+target_pp_ratio = pp_ratio + 1
+print("Setting pulse picker to PP={:d}...".format(
+ target_pp_ratio), end='', flush=True)
+
+my_laser.set_pp(target_pp_ratio, blocking=True)
+print("OK", flush=True)
+
+print("Setting pulse picker to PP={:d}...".format(pp_ratio), end='', flush=True)
+my_laser.set_pp(pp_ratio, blocking=True)
+print("OK", flush=True)
+
+print("Enabling laser output...")
+my_laser.enable_output()
+
+print("Waiting for 3s...")
+time.sleep(3)
+
+print("Disabling laser output...")
+my_laser.close_output()
+```
+
+Output:
+```python console
+Pharos initialized at http://192.168.8.113:20020/v1/
+Pulse picker ratio: 1
+Setting pulse picker to PP=2...OK
+Setting pulse picker to PP=1...OK
+Enabling laser output...
+Waiting for 3s...
+Disabling laser output...
+```
+
+
+### `lightcon.harpia`
+HARPIA Service App REST client
+
+### `lightcon.fast_daq`
+Interface to the fast single-channel DAQ (E13-10023-02 or newer) DLL wrapper
+Example:
+```python
+import lightcon.fast_daq
+
+fdw = lightcon.fast_daq.FastDaqWrapper()
+
+if fdw.is_connected():
+ # sets missing trigger/clock timeout, after which TimeoutException is raised
+ fdw.set_timeout(1000)
+
+ # choose channel 'PFI0' for external clocking, 'internal' for internal clocking. Use 'rising' or 'falling' for active_edge
+ fdw.configure_sample_clock(channel = 'PFI0', active_edge = 'rising')
+
+ # choose channel 'PFI0' for external clocking, 'internal' for internal triggering
+ fdw.configure_start_trigger(channel = 'internal')
+
+ # sets external trigger delay for sampling to 100 ns
+ fdw.set_external_trigger_delay(1000)
+
+ # acquires n = 1000 samples as one-dimensional array
+ data = fdw.get_daq_data(10)
+
+ fdw.close()
+```
+
+### `lightcon.harpia_daq`
+Interface to the universal six-channel DAQ (PE04-005-04 or newer) DLL wrapper
+Example:
+```python
+import lightcon.harpia_daq
+
+# provide in ascending order to keep plot labels right
+enabled_channels = ['AI0', 'AI1', 'AI3']
+hdw = lightcon.harpia_daq.HarpiaDaqWrapper()
+
+if hdw.is_connected:
+ # sets missing trigger/clock timeout, after which TimeoutException is raised
+ hdw.set_timeout(100)
+
+ # enable analog input channels
+ hdw.enable_channels(enabled_channels)
+
+ # choose channel 'PFI0' - 'PFI5' for external clocking, 'internal' for internal clocking. Use 'rising' or 'falling' for active_edge
+ hdw.configure_sample_clock(channel = 'internal', active_edge = 'falling')
+
+ # choose channel 'PFI0' - 'PFI5' for external clocking, 'internal' for internal triggering
+ hdw.configure_start_trigger(channel = 'PFI0')
+
+ # acquires n=1000 samples and arranges to (m,n) two-dimensonal array, where m is number of enabled channels (in ascending order)
+ data = hdw.get_daq_data(1000)
+```
+
+### `lightcon.timing_controller`
+Timing controller API
+
+Example:
+```python
+import lightcon.timing_controller
+
+tc = TimingController()
+tc.connect()
+
+if tc.connected:
+ print ('Trigger source', 'EXTERNAL' if tc.get_trigger_source() == 1 else 'INTERNAL {:} Hz'.format(tc.get_frequency()))
+ print ('\n'.join(['Channel {:}, delay {:} ns, {:}'.format(i, tc.get_delay(i), 'ENABLED' if tc.get_enabled(i)==1 else 'DISABLED') for i in [1,2,3,4]]))
+```
+
+Output:
+```python console
+Connected to timer_stopwatch on COM12 (E131001401, firmware version: 1.0.1)
+Trigger source INTERNAL 1750 Hz
+Channel 1, delay 0 ns, DISABLED
+Channel 2, delay 0 ns, DISABLED
+Channel 3, delay 0 ns, DISABLED
+Channel 4, delay 0 ns, DISABLED
+```
+
+### `lightcon.eth_motor_board`
+EthMotorBoard API
+
+Example:
+```python
+from lightcon.eth_motor_board import EthMotorBoard
+
+emb = EthMotorBoard()
+
+print ('Hardware version:', emb.send('HARDWARE_VERSION'))
+```
+
+Output:
+```python console
+Successfullly connected to EthMotorBoard, name: Beam alignment, firmware version: 5.5.1
+Hardware version: E04-351-03
+```
+
+CAN extension example:
+```python
+from lightcon.eth_motor_board import EthMotorBoard
+from lightcon.common import BytesArrayToFloat
+
+emb = EthMotorBoard()
+
+can_output = emb.GetRegister(0x180, 0x0201, 2)
+print ('Response status', can_output[0])
+print ('Response data', can_output[1])
+print ('Quadrant detector SUM voltage', BytesArrayToFloat(can_output[1]), 'V')
+```
+
+Output:
+```python
+Successfullly connected to EthMotorBoard, name: Beam alignment, firmware version: 5.5.1
+Response status 0
+Response data [54, 121, 86, 64]
+Quadrant detector SUM voltage 3.3511481285095215 V
+```
+
+
+### `lightcon.wintopas`
+WinTopas REST client
+
+### `lightcon.camera_app_client`
+CameraApp REST client
+
+### `lightcon.style`
+Light Conversion style for 1D graphs
+
+
+Example:
+```python
+import lightcon.style
+
+lightcon.style.apply_style()
+
+...plot whatever here...
+
+lightcon.style.add_watermarks()
+```
+
+
+
+
+
+%package -n python3-lightcon
+Summary: A set of APIs to Light Conversion devices
+Provides: python-lightcon
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-lightcon
+# lightcon
+
+## Installation
+### Pip
+```pip install lightcon```
+<!--
+## Changelog
+### 1.1
+#### Added
+fast_daq module
+examples/fast_daq_wrapper_example.py
+#### Fixed
+#### Removed
+
+### 1.0
+Initial release
+<!--
+#### Added
+#### Fixed
+#### Removed
+-->
+
+## Modules
+
+### `lightcon.beam_alignment`
+Beam Alignment App REST client
+
+### `lightcon.common`
+Tools and converters
+
+### `lightcon.laser_clients`
+REST API clients for PHAROS and CARBIDE lasers
+
+Example:
+```python
+from lightcon.laser_clients import Carbide, Pharos
+import time
+
+my_laser = Pharos('192.168.8.113')
+# my_laser = Carbide('192.168.8.113')
+
+pp_ratio = my_laser.get_pp()
+print("Pulse picker ratio: {:d}".format(pp_ratio))
+
+target_pp_ratio = pp_ratio + 1
+print("Setting pulse picker to PP={:d}...".format(
+ target_pp_ratio), end='', flush=True)
+
+my_laser.set_pp(target_pp_ratio, blocking=True)
+print("OK", flush=True)
+
+print("Setting pulse picker to PP={:d}...".format(pp_ratio), end='', flush=True)
+my_laser.set_pp(pp_ratio, blocking=True)
+print("OK", flush=True)
+
+print("Enabling laser output...")
+my_laser.enable_output()
+
+print("Waiting for 3s...")
+time.sleep(3)
+
+print("Disabling laser output...")
+my_laser.close_output()
+```
+
+Output:
+```python console
+Pharos initialized at http://192.168.8.113:20020/v1/
+Pulse picker ratio: 1
+Setting pulse picker to PP=2...OK
+Setting pulse picker to PP=1...OK
+Enabling laser output...
+Waiting for 3s...
+Disabling laser output...
+```
+
+
+### `lightcon.harpia`
+HARPIA Service App REST client
+
+### `lightcon.fast_daq`
+Interface to the fast single-channel DAQ (E13-10023-02 or newer) DLL wrapper
+Example:
+```python
+import lightcon.fast_daq
+
+fdw = lightcon.fast_daq.FastDaqWrapper()
+
+if fdw.is_connected():
+ # sets missing trigger/clock timeout, after which TimeoutException is raised
+ fdw.set_timeout(1000)
+
+ # choose channel 'PFI0' for external clocking, 'internal' for internal clocking. Use 'rising' or 'falling' for active_edge
+ fdw.configure_sample_clock(channel = 'PFI0', active_edge = 'rising')
+
+ # choose channel 'PFI0' for external clocking, 'internal' for internal triggering
+ fdw.configure_start_trigger(channel = 'internal')
+
+ # sets external trigger delay for sampling to 100 ns
+ fdw.set_external_trigger_delay(1000)
+
+ # acquires n = 1000 samples as one-dimensional array
+ data = fdw.get_daq_data(10)
+
+ fdw.close()
+```
+
+### `lightcon.harpia_daq`
+Interface to the universal six-channel DAQ (PE04-005-04 or newer) DLL wrapper
+Example:
+```python
+import lightcon.harpia_daq
+
+# provide in ascending order to keep plot labels right
+enabled_channels = ['AI0', 'AI1', 'AI3']
+hdw = lightcon.harpia_daq.HarpiaDaqWrapper()
+
+if hdw.is_connected:
+ # sets missing trigger/clock timeout, after which TimeoutException is raised
+ hdw.set_timeout(100)
+
+ # enable analog input channels
+ hdw.enable_channels(enabled_channels)
+
+ # choose channel 'PFI0' - 'PFI5' for external clocking, 'internal' for internal clocking. Use 'rising' or 'falling' for active_edge
+ hdw.configure_sample_clock(channel = 'internal', active_edge = 'falling')
+
+ # choose channel 'PFI0' - 'PFI5' for external clocking, 'internal' for internal triggering
+ hdw.configure_start_trigger(channel = 'PFI0')
+
+ # acquires n=1000 samples and arranges to (m,n) two-dimensonal array, where m is number of enabled channels (in ascending order)
+ data = hdw.get_daq_data(1000)
+```
+
+### `lightcon.timing_controller`
+Timing controller API
+
+Example:
+```python
+import lightcon.timing_controller
+
+tc = TimingController()
+tc.connect()
+
+if tc.connected:
+ print ('Trigger source', 'EXTERNAL' if tc.get_trigger_source() == 1 else 'INTERNAL {:} Hz'.format(tc.get_frequency()))
+ print ('\n'.join(['Channel {:}, delay {:} ns, {:}'.format(i, tc.get_delay(i), 'ENABLED' if tc.get_enabled(i)==1 else 'DISABLED') for i in [1,2,3,4]]))
+```
+
+Output:
+```python console
+Connected to timer_stopwatch on COM12 (E131001401, firmware version: 1.0.1)
+Trigger source INTERNAL 1750 Hz
+Channel 1, delay 0 ns, DISABLED
+Channel 2, delay 0 ns, DISABLED
+Channel 3, delay 0 ns, DISABLED
+Channel 4, delay 0 ns, DISABLED
+```
+
+### `lightcon.eth_motor_board`
+EthMotorBoard API
+
+Example:
+```python
+from lightcon.eth_motor_board import EthMotorBoard
+
+emb = EthMotorBoard()
+
+print ('Hardware version:', emb.send('HARDWARE_VERSION'))
+```
+
+Output:
+```python console
+Successfullly connected to EthMotorBoard, name: Beam alignment, firmware version: 5.5.1
+Hardware version: E04-351-03
+```
+
+CAN extension example:
+```python
+from lightcon.eth_motor_board import EthMotorBoard
+from lightcon.common import BytesArrayToFloat
+
+emb = EthMotorBoard()
+
+can_output = emb.GetRegister(0x180, 0x0201, 2)
+print ('Response status', can_output[0])
+print ('Response data', can_output[1])
+print ('Quadrant detector SUM voltage', BytesArrayToFloat(can_output[1]), 'V')
+```
+
+Output:
+```python
+Successfullly connected to EthMotorBoard, name: Beam alignment, firmware version: 5.5.1
+Response status 0
+Response data [54, 121, 86, 64]
+Quadrant detector SUM voltage 3.3511481285095215 V
+```
+
+
+### `lightcon.wintopas`
+WinTopas REST client
+
+### `lightcon.camera_app_client`
+CameraApp REST client
+
+### `lightcon.style`
+Light Conversion style for 1D graphs
+
+
+Example:
+```python
+import lightcon.style
+
+lightcon.style.apply_style()
+
+...plot whatever here...
+
+lightcon.style.add_watermarks()
+```
+
+
+
+
+
+%package help
+Summary: Development documents and examples for lightcon
+Provides: python3-lightcon-doc
+%description help
+# lightcon
+
+## Installation
+### Pip
+```pip install lightcon```
+<!--
+## Changelog
+### 1.1
+#### Added
+fast_daq module
+examples/fast_daq_wrapper_example.py
+#### Fixed
+#### Removed
+
+### 1.0
+Initial release
+<!--
+#### Added
+#### Fixed
+#### Removed
+-->
+
+## Modules
+
+### `lightcon.beam_alignment`
+Beam Alignment App REST client
+
+### `lightcon.common`
+Tools and converters
+
+### `lightcon.laser_clients`
+REST API clients for PHAROS and CARBIDE lasers
+
+Example:
+```python
+from lightcon.laser_clients import Carbide, Pharos
+import time
+
+my_laser = Pharos('192.168.8.113')
+# my_laser = Carbide('192.168.8.113')
+
+pp_ratio = my_laser.get_pp()
+print("Pulse picker ratio: {:d}".format(pp_ratio))
+
+target_pp_ratio = pp_ratio + 1
+print("Setting pulse picker to PP={:d}...".format(
+ target_pp_ratio), end='', flush=True)
+
+my_laser.set_pp(target_pp_ratio, blocking=True)
+print("OK", flush=True)
+
+print("Setting pulse picker to PP={:d}...".format(pp_ratio), end='', flush=True)
+my_laser.set_pp(pp_ratio, blocking=True)
+print("OK", flush=True)
+
+print("Enabling laser output...")
+my_laser.enable_output()
+
+print("Waiting for 3s...")
+time.sleep(3)
+
+print("Disabling laser output...")
+my_laser.close_output()
+```
+
+Output:
+```python console
+Pharos initialized at http://192.168.8.113:20020/v1/
+Pulse picker ratio: 1
+Setting pulse picker to PP=2...OK
+Setting pulse picker to PP=1...OK
+Enabling laser output...
+Waiting for 3s...
+Disabling laser output...
+```
+
+
+### `lightcon.harpia`
+HARPIA Service App REST client
+
+### `lightcon.fast_daq`
+Interface to the fast single-channel DAQ (E13-10023-02 or newer) DLL wrapper
+Example:
+```python
+import lightcon.fast_daq
+
+fdw = lightcon.fast_daq.FastDaqWrapper()
+
+if fdw.is_connected():
+ # sets missing trigger/clock timeout, after which TimeoutException is raised
+ fdw.set_timeout(1000)
+
+ # choose channel 'PFI0' for external clocking, 'internal' for internal clocking. Use 'rising' or 'falling' for active_edge
+ fdw.configure_sample_clock(channel = 'PFI0', active_edge = 'rising')
+
+ # choose channel 'PFI0' for external clocking, 'internal' for internal triggering
+ fdw.configure_start_trigger(channel = 'internal')
+
+ # sets external trigger delay for sampling to 100 ns
+ fdw.set_external_trigger_delay(1000)
+
+ # acquires n = 1000 samples as one-dimensional array
+ data = fdw.get_daq_data(10)
+
+ fdw.close()
+```
+
+### `lightcon.harpia_daq`
+Interface to the universal six-channel DAQ (PE04-005-04 or newer) DLL wrapper
+Example:
+```python
+import lightcon.harpia_daq
+
+# provide in ascending order to keep plot labels right
+enabled_channels = ['AI0', 'AI1', 'AI3']
+hdw = lightcon.harpia_daq.HarpiaDaqWrapper()
+
+if hdw.is_connected:
+ # sets missing trigger/clock timeout, after which TimeoutException is raised
+ hdw.set_timeout(100)
+
+ # enable analog input channels
+ hdw.enable_channels(enabled_channels)
+
+ # choose channel 'PFI0' - 'PFI5' for external clocking, 'internal' for internal clocking. Use 'rising' or 'falling' for active_edge
+ hdw.configure_sample_clock(channel = 'internal', active_edge = 'falling')
+
+ # choose channel 'PFI0' - 'PFI5' for external clocking, 'internal' for internal triggering
+ hdw.configure_start_trigger(channel = 'PFI0')
+
+ # acquires n=1000 samples and arranges to (m,n) two-dimensonal array, where m is number of enabled channels (in ascending order)
+ data = hdw.get_daq_data(1000)
+```
+
+### `lightcon.timing_controller`
+Timing controller API
+
+Example:
+```python
+import lightcon.timing_controller
+
+tc = TimingController()
+tc.connect()
+
+if tc.connected:
+ print ('Trigger source', 'EXTERNAL' if tc.get_trigger_source() == 1 else 'INTERNAL {:} Hz'.format(tc.get_frequency()))
+ print ('\n'.join(['Channel {:}, delay {:} ns, {:}'.format(i, tc.get_delay(i), 'ENABLED' if tc.get_enabled(i)==1 else 'DISABLED') for i in [1,2,3,4]]))
+```
+
+Output:
+```python console
+Connected to timer_stopwatch on COM12 (E131001401, firmware version: 1.0.1)
+Trigger source INTERNAL 1750 Hz
+Channel 1, delay 0 ns, DISABLED
+Channel 2, delay 0 ns, DISABLED
+Channel 3, delay 0 ns, DISABLED
+Channel 4, delay 0 ns, DISABLED
+```
+
+### `lightcon.eth_motor_board`
+EthMotorBoard API
+
+Example:
+```python
+from lightcon.eth_motor_board import EthMotorBoard
+
+emb = EthMotorBoard()
+
+print ('Hardware version:', emb.send('HARDWARE_VERSION'))
+```
+
+Output:
+```python console
+Successfullly connected to EthMotorBoard, name: Beam alignment, firmware version: 5.5.1
+Hardware version: E04-351-03
+```
+
+CAN extension example:
+```python
+from lightcon.eth_motor_board import EthMotorBoard
+from lightcon.common import BytesArrayToFloat
+
+emb = EthMotorBoard()
+
+can_output = emb.GetRegister(0x180, 0x0201, 2)
+print ('Response status', can_output[0])
+print ('Response data', can_output[1])
+print ('Quadrant detector SUM voltage', BytesArrayToFloat(can_output[1]), 'V')
+```
+
+Output:
+```python
+Successfullly connected to EthMotorBoard, name: Beam alignment, firmware version: 5.5.1
+Response status 0
+Response data [54, 121, 86, 64]
+Quadrant detector SUM voltage 3.3511481285095215 V
+```
+
+
+### `lightcon.wintopas`
+WinTopas REST client
+
+### `lightcon.camera_app_client`
+CameraApp REST client
+
+### `lightcon.style`
+Light Conversion style for 1D graphs
+
+
+Example:
+```python
+import lightcon.style
+
+lightcon.style.apply_style()
+
+...plot whatever here...
+
+lightcon.style.add_watermarks()
+```
+
+
+
+
+
+%prep
+%autosetup -n lightcon-1.3.2
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-lightcon -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 17 2023 Python_Bot <Python_Bot@openeuler.org> - 1.3.2-1
+- Package Spec generated