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
5 years ago
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
Show 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__":
myGuiMainWindow
=
CameraGuiMainWindow
()
cameraWorker
=
CameraWorker
(
andor_camera
=
camera
)
cameraWorker
=
CameraWorker
()
cameraWorker
.
make_connections
(
myGuiMainWindow
)
myGuiMainWindow
.
make_connections
(
cameraWorker
)
...
...
@@ -59,11 +59,16 @@ if __name__ == "__main__":
cameraWorker
.
moveToThread
(
cameraThread
)
measurementGui
=
MeasurementGui
()
M
easurementWorker
=
MeasurementWorker
(
camera
)
m
easurementWorker
=
MeasurementWorker
(
camera
)
myGuiMainWindow
.
dMeasurement
.
addWidget
(
measurementGui
)
measurementThread
=
QtCore
.
QThread
()
measurementWorker
.
moveToThread
(
measurementThread
)
measurementGui
.
make_connections
(
measurementWorker
)
measurementWorker
.
make_connections
(
measurementGui
,
camera
)
cameraThread
.
start
()
mcDAQthread
.
start
()
measurementThread
.
start
()
sys
.
exit
(
app
.
exec_
())
This diff is collapsed.
Click to expand it.
measurement.py
View file @
6c5353f7
...
...
@@ -13,6 +13,8 @@ from PyQt5.QtCore import QSettings
from
PyQt5.QtWidgets
import
QAction
,
QFileDialog
,
QInputDialog
,
QWidget
from
measurement_ui
import
Ui_Frame
from
MCDAQcontrolsignals
import
anal_control_signal
from
subclasses.controllayouts
import
LaserControlLayout
,
LaserScanLayout
import
time
class
MeasurementGui
(
QtWidgets
.
QFrame
,
Ui_Frame
):
def
__init__
(
self
):
...
...
@@ -79,16 +81,26 @@ class MeasurementGui(QtWidgets.QFrame, Ui_Frame):
class
MeasurementWorker
(
QtCore
.
QObject
):
"""
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__
()
def
make_connections
(
self
,
frontend
):
pass
def
make_connections
(
self
,
frontend
,
camera
):
frontend
.
startMeasureButton
.
clicked
.
connect
(
self
.
simple_scan_measurement
)
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__'
:
import
sys
...
...
@@ -108,7 +120,7 @@ if __name__ == '__main__':
app
=
QtWidgets
.
QApplication
(
sys
.
argv
)
gui
=
MeasurementGui
()
measurementWorker
=
MeasurementWorker
(
None
,
None
)
measurementWorker
=
MeasurementWorker
(
None
)
measurementWorker
.
make_connections
(
gui
)
gui
.
make_connections
(
measurementWorker
)
...
...
This diff is collapsed.
Click to expand it.
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'
)
This diff is collapsed.
Click to expand it.
subclasses/controllayouts.py
View file @
6c5353f7
...
...
@@ -68,6 +68,19 @@ class LaserControlLayout(pg.LayoutWidget):
def
blink
(
self
,
cb
):
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
):
"""
A class for creating a layout for scanning a laser piezo.
...
...
@@ -131,6 +144,7 @@ class LaserScanLayout(pg.LayoutWidget):
self
.
signal_to_scan_layout
.
spinboxes
[
self
.
name
]
.
setEnabled
(
False
)
self
.
spinboxes
[
'start'
]
.
setEnabled
(
False
)
self
.
spinboxes
[
'stop'
]
.
setEnabled
(
False
)
self
.
spinboxes
[
'period'
]
.
setEnabled
(
False
)
self
.
scan_button
.
setStyleSheet
(
"background-color: green"
)
self
.
scan_button
.
setText
(
'Scanning'
)
...
...
@@ -146,6 +160,8 @@ class LaserScanLayout(pg.LayoutWidget):
self
.
signal_to_scan_layout
.
spinboxes
[
self
.
name
]
.
setEnabled
(
True
)
self
.
spinboxes
[
'start'
]
.
setEnabled
(
True
)
self
.
spinboxes
[
'stop'
]
.
setEnabled
(
True
)
self
.
spinboxes
[
'period'
]
.
setEnabled
(
True
)
def
pBarEvent
(
self
,
current_step
):
start
=
self
.
spinboxes
[
'start'
]
.
value
()
...
...
@@ -153,6 +169,11 @@ class LaserScanLayout(pg.LayoutWidget):
self
.
scanpBar
.
setValue
(
100
*
float
(
current_step
-
float
(
start
))
/
float
(
stop
-
start
)
)
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__'
:
import
sys
...
...
This diff is collapsed.
Click to expand it.
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