Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
total_control_app
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Martin Drechsler
total_control_app
Commits
6c5353f7
Commit
6c5353f7
authored
May 02, 2019
by
Martin Drechsler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
improved measurement file and added storage in resources
parent
9b311ce0
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
138 additions
and
8 deletions
+138
-8
main.py
main.py
+7
-2
measurement.py
measurement.py
+18
-6
storage.py
resources/storage.py
+92
-0
controllayouts.py
subclasses/controllayouts.py
+21
-0
No files found.
main.py
View file @
6c5353f7
...
@@ -50,7 +50,7 @@ if __name__ == "__main__":
...
@@ -50,7 +50,7 @@ if __name__ == "__main__":
myGuiMainWindow
=
CameraGuiMainWindow
()
myGuiMainWindow
=
CameraGuiMainWindow
()
cameraWorker
=
CameraWorker
(
andor_camera
=
camera
)
cameraWorker
=
CameraWorker
()
cameraWorker
.
make_connections
(
myGuiMainWindow
)
cameraWorker
.
make_connections
(
myGuiMainWindow
)
myGuiMainWindow
.
make_connections
(
cameraWorker
)
myGuiMainWindow
.
make_connections
(
cameraWorker
)
...
@@ -59,11 +59,16 @@ if __name__ == "__main__":
...
@@ -59,11 +59,16 @@ if __name__ == "__main__":
cameraWorker
.
moveToThread
(
cameraThread
)
cameraWorker
.
moveToThread
(
cameraThread
)
measurementGui
=
MeasurementGui
()
measurementGui
=
MeasurementGui
()
M
easurementWorker
=
MeasurementWorker
(
camera
)
m
easurementWorker
=
MeasurementWorker
(
camera
)
myGuiMainWindow
.
dMeasurement
.
addWidget
(
measurementGui
)
myGuiMainWindow
.
dMeasurement
.
addWidget
(
measurementGui
)
measurementThread
=
QtCore
.
QThread
()
measurementWorker
.
moveToThread
(
measurementThread
)
measurementGui
.
make_connections
(
measurementWorker
)
measurementWorker
.
make_connections
(
measurementGui
,
camera
)
cameraThread
.
start
()
cameraThread
.
start
()
mcDAQthread
.
start
()
mcDAQthread
.
start
()
measurementThread
.
start
()
sys
.
exit
(
app
.
exec_
())
sys
.
exit
(
app
.
exec_
())
measurement.py
View file @
6c5353f7
...
@@ -13,6 +13,8 @@ from PyQt5.QtCore import QSettings
...
@@ -13,6 +13,8 @@ from PyQt5.QtCore import QSettings
from
PyQt5.QtWidgets
import
QAction
,
QFileDialog
,
QInputDialog
,
QWidget
from
PyQt5.QtWidgets
import
QAction
,
QFileDialog
,
QInputDialog
,
QWidget
from
measurement_ui
import
Ui_Frame
from
measurement_ui
import
Ui_Frame
from
MCDAQcontrolsignals
import
anal_control_signal
from
MCDAQcontrolsignals
import
anal_control_signal
from
subclasses.controllayouts
import
LaserControlLayout
,
LaserScanLayout
import
time
class
MeasurementGui
(
QtWidgets
.
QFrame
,
Ui_Frame
):
class
MeasurementGui
(
QtWidgets
.
QFrame
,
Ui_Frame
):
def
__init__
(
self
):
def
__init__
(
self
):
...
@@ -78,17 +80,27 @@ class MeasurementGui(QtWidgets.QFrame, Ui_Frame):
...
@@ -78,17 +80,27 @@ class MeasurementGui(QtWidgets.QFrame, Ui_Frame):
class
MeasurementWorker
(
QtCore
.
QObject
):
class
MeasurementWorker
(
QtCore
.
QObject
):
"""
"""
Backend for the measurement frame.
Backend for the measurement frame.
Simple scan measurement: for scanning a spinbox.
External scan measurement: scans an external object. For example, the rigol function generator.
"""
"""
def
__init__
(
self
,
camera
):
def
__init__
(
self
):
super
()
.
__init__
()
super
()
.
__init__
()
def
make_connections
(
self
,
frontend
):
def
make_connections
(
self
,
frontend
,
camera
):
pass
frontend
.
startMeasureButton
.
clicked
.
connect
(
self
.
simple_scan_measurement
)
def
simple_scan_measurement
(
self
):
def
simple_scan_measurement
(
self
):
pass
for
l
in
LaserControlLayout
.
_registry
+
LaserScanLayout
.
_registry
:
l
.
freeze
()
for
l
in
LaserControlLayout
.
_registry
+
LaserScanLayout
.
_registry
:
l
.
unfreeze
()
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
import
sys
import
sys
...
@@ -108,7 +120,7 @@ if __name__ == '__main__':
...
@@ -108,7 +120,7 @@ if __name__ == '__main__':
app
=
QtWidgets
.
QApplication
(
sys
.
argv
)
app
=
QtWidgets
.
QApplication
(
sys
.
argv
)
gui
=
MeasurementGui
()
gui
=
MeasurementGui
()
measurementWorker
=
MeasurementWorker
(
None
,
None
)
measurementWorker
=
MeasurementWorker
(
None
)
measurementWorker
.
make_connections
(
gui
)
measurementWorker
.
make_connections
(
gui
)
gui
.
make_connections
(
measurementWorker
)
gui
.
make_connections
(
measurementWorker
)
...
...
resources/storage.py
0 → 100644
View file @
6c5353f7
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu May 2 17:56:49 2019
Class for handling data saving.
@author: martindrech
"""
import
numpy
as
np
import
time
import
datetime
import
os
import
shutil
class
Storage
(
object
):
"""
Class to handle data saving.
"""
def
__init__
(
self
,
directory
):
self
.
directory
=
directory
def
create_data_file
(
self
,
*
args
):
saving_directory
=
"/"
.
join
([
self
.
directory
,
self
.
get_date_string
()])
if
not
os
.
path
.
exists
(
saving_directory
):
os
.
makedirs
(
saving_directory
)
os
.
makedirs
(
saving_directory
+
'/dump'
)
s_num
=
self
.
get_saving_number
()
filename
=
"/"
.
join
([
saving_directory
,
'dump'
,
's'
+
str
(
s_num
)
.
zfill
(
2
)])
+
'.temp'
header
=
" "
.
join
([
s
for
s
in
args
]
+
[
'
\n
'
])
with
open
(
filename
,
'wb'
)
as
f
:
f
.
write
(
header
.
encode
(
'utf-8'
))
def
append_data_to_current_file
(
self
,
*
args
):
with
open
(
self
.
get_current_filename
(),
'ab'
)
as
f
:
data
=
np
.
column_stack
(
args
)
np
.
savetxt
(
f
,
data
)
f
.
flush
()
def
get_date_string
(
self
):
y
=
datetime
.
datetime
.
now
()
.
year
m
=
datetime
.
datetime
.
now
()
.
month
d
=
datetime
.
datetime
.
now
()
.
day
s
=
str
(
y
)
+
str
(
m
)
.
zfill
(
2
)
+
str
(
d
)
.
zfill
(
2
)
return
s
def
get_saving_number
(
self
,
permanent_saving
=
False
):
savings_number_list
=
[]
if
permanent_saving
:
suffix
=
'.dat'
saving_directory
=
"/"
.
join
([
self
.
directory
,
self
.
get_date_string
()])
else
:
suffix
=
'.temp'
saving_directory
=
"/"
.
join
([
self
.
directory
,
self
.
get_date_string
(),
'dump'
])
for
s
in
[
dat_file
for
dat_file
in
os
.
listdir
(
saving_directory
)
if
dat_file
.
endswith
(
suffix
)]:
savings_number_list
.
append
(
int
(
s
[
1
:]
.
split
(
'.'
)[
0
]))
if
len
(
savings_number_list
)
==
0
:
return
1
if
len
(
savings_number_list
)
==
3
and
not
permanent_saving
:
#removes the last of the last 10 files
file_to_remove
=
"/"
.
join
([
saving_directory
,
's'
+
str
(
min
(
savings_number_list
))
.
zfill
(
2
)])
+
'.temp'
os
.
remove
(
file_to_remove
)
return
max
(
savings_number_list
)
+
1
def
get_current_filename
(
self
):
s_num
=
self
.
get_saving_number
()
-
1
saving_directory
=
"/"
.
join
([
self
.
directory
,
self
.
get_date_string
()])
filename
=
"/"
.
join
([
saving_directory
,
'dump'
,
's'
+
str
(
s_num
)
.
zfill
(
2
)])
+
'.temp'
return
filename
def
permanent_save_current_data
(
self
):
oldfile
=
self
.
get_current_filename
()
saving_directory
=
"/"
.
join
([
self
.
directory
,
self
.
get_date_string
()])
newfilename
=
's'
+
str
(
self
.
get_saving_number
(
permanent_saving
=
True
)
)
.
zfill
(
2
)
+
'.dat'
shutil
.
move
(
oldfile
,
"/"
.
join
([
saving_directory
,
newfilename
])
)
print
(
"/"
.
join
([
saving_directory
,
newfilename
]))
#%%
if
__name__
==
'__main__'
:
storage
=
Storage
(
'/home/martindrech/Documents/storage'
)
storage
.
create_data_file
(
'col1'
,
'col2'
)
subclasses/controllayouts.py
View file @
6c5353f7
...
@@ -68,6 +68,19 @@ class LaserControlLayout(pg.LayoutWidget):
...
@@ -68,6 +68,19 @@ class LaserControlLayout(pg.LayoutWidget):
def
blink
(
self
,
cb
):
def
blink
(
self
,
cb
):
pass
pass
def
freeze
(
self
):
for
sb
in
self
.
spinboxes
:
self
.
spinboxes
[
sb
]
.
setEnabled
(
False
)
for
cb
in
self
.
checkboxes
:
self
.
checkboxes
[
cb
]
.
setEnabled
(
False
)
def
unfreeze
(
self
):
for
sb
in
self
.
spinboxes
:
self
.
spinboxes
[
sb
]
.
setEnabled
(
True
)
for
cb
in
self
.
checkboxes
:
self
.
checkboxes
[
cb
]
.
setEnabled
(
True
)
class
LaserScanLayout
(
pg
.
LayoutWidget
):
class
LaserScanLayout
(
pg
.
LayoutWidget
):
"""
"""
A class for creating a layout for scanning a laser piezo.
A class for creating a layout for scanning a laser piezo.
...
@@ -131,6 +144,7 @@ class LaserScanLayout(pg.LayoutWidget):
...
@@ -131,6 +144,7 @@ class LaserScanLayout(pg.LayoutWidget):
self
.
signal_to_scan_layout
.
spinboxes
[
self
.
name
]
.
setEnabled
(
False
)
self
.
signal_to_scan_layout
.
spinboxes
[
self
.
name
]
.
setEnabled
(
False
)
self
.
spinboxes
[
'start'
]
.
setEnabled
(
False
)
self
.
spinboxes
[
'start'
]
.
setEnabled
(
False
)
self
.
spinboxes
[
'stop'
]
.
setEnabled
(
False
)
self
.
spinboxes
[
'stop'
]
.
setEnabled
(
False
)
self
.
spinboxes
[
'period'
]
.
setEnabled
(
False
)
self
.
scan_button
.
setStyleSheet
(
"background-color: green"
)
self
.
scan_button
.
setStyleSheet
(
"background-color: green"
)
self
.
scan_button
.
setText
(
'Scanning'
)
self
.
scan_button
.
setText
(
'Scanning'
)
...
@@ -146,6 +160,8 @@ class LaserScanLayout(pg.LayoutWidget):
...
@@ -146,6 +160,8 @@ class LaserScanLayout(pg.LayoutWidget):
self
.
signal_to_scan_layout
.
spinboxes
[
self
.
name
]
.
setEnabled
(
True
)
self
.
signal_to_scan_layout
.
spinboxes
[
self
.
name
]
.
setEnabled
(
True
)
self
.
spinboxes
[
'start'
]
.
setEnabled
(
True
)
self
.
spinboxes
[
'start'
]
.
setEnabled
(
True
)
self
.
spinboxes
[
'stop'
]
.
setEnabled
(
True
)
self
.
spinboxes
[
'stop'
]
.
setEnabled
(
True
)
self
.
spinboxes
[
'period'
]
.
setEnabled
(
True
)
def
pBarEvent
(
self
,
current_step
):
def
pBarEvent
(
self
,
current_step
):
start
=
self
.
spinboxes
[
'start'
]
.
value
()
start
=
self
.
spinboxes
[
'start'
]
.
value
()
...
@@ -153,6 +169,11 @@ class LaserScanLayout(pg.LayoutWidget):
...
@@ -153,6 +169,11 @@ class LaserScanLayout(pg.LayoutWidget):
self
.
scanpBar
.
setValue
(
100
*
float
(
current_step
-
float
(
start
))
/
float
(
stop
-
start
)
)
self
.
scanpBar
.
setValue
(
100
*
float
(
current_step
-
float
(
start
))
/
float
(
stop
-
start
)
)
self
.
scanLabelValue
.
setText
(
"
%.2
f"
%
current_step
+
' V'
)
self
.
scanLabelValue
.
setText
(
"
%.2
f"
%
current_step
+
' V'
)
def
freeze
(
self
):
self
.
scan_button
.
setEnabled
(
False
)
def
unfreeze
(
self
):
self
.
scan_button
.
setEnabled
(
True
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
import
sys
import
sys
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment