Commit 6c5353f7 authored by Martin Drechsler's avatar Martin Drechsler

improved measurement file and added storage in resources

parent 9b311ce0
...@@ -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()
MeasurementWorker = MeasurementWorker(camera) measurementWorker = 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_())
...@@ -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)
......
#!/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')
...@@ -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("%.2f" % current_step + ' V') self.scanLabelValue.setText("%.2f" % 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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment