forked from HaeffnerLab/RealSimpleGrapher
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRSGDataset.py
More file actions
96 lines (82 loc) · 3.23 KB
/
RSGDataset.py
File metadata and controls
96 lines (82 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
"""
Parent class for datasets
"""
from twisted.internet.defer import inlineCallbacks, returnValue, DeferredLock
from PyQt5.QtCore import QObject
import numpy as np
class RSGDataset(QObject):
def __init__(self, data_vault, context, dataset_location, reactor):
super(RSGDataset, self).__init__()
self.data = None
self.accessingData = DeferredLock()
self.reactor = reactor
self.dataset_location = dataset_location
self.data_vault = data_vault
self.updateCounter = 0
self.context = context
self.dataset_name = None
self.connect_datavault()
self.setup_listeners()
def connect_datavault(self):
yield self.data_vault.cd(self.dataset_location[0], context=self.context)
path, dataset_name = yield self.data_vault.open(
self.dataset_location[1], context=self.context
)
self.dataset_name = dataset_name
@inlineCallbacks
def setup_listeners(self):
yield self.data_vault.signal__data_available(11111, context=self.context)
yield self.data_vault.addListener(
listener=self.update_data, source=None, ID=11111, context=self.context
)
@inlineCallbacks
def open_dataset(self):
yield self.data_vault.cd(self.dataset_location[0], context=self.context)
yield self.data_vault.open(self.dataset_location[1], context=self.context)
@inlineCallbacks
def get_parameters(self):
parameters = yield self.data_vault.parameters(context=self.context)
parameter_values = []
for parameter in parameters:
parameter_value = yield self.data_vault.get_parameter(
parameter, context=self.context
)
parameter_values.append((parameter, parameter_value))
returnValue(parameter_values)
def update_data(self, x, y):
self.updateCounter += 1
self.get_data()
@inlineCallbacks
def get_data(self):
from labrad.units import DimensionlessArray
data = yield self.data_vault.get(100, context=self.context)
if self.data is None:
yield self.accessingData.acquire()
if isinstance(data, DimensionlessArray):
self.data = data
else:
self.data = data.asarray
self.accessingData.release()
else:
yield self.accessingData.acquire()
if isinstance(data, DimensionlessArray):
self.data = np.append(self.data, data, 0)
else:
self.data = np.append(self.data, data.asarray, 0)
self.accessingData.release()
@inlineCallbacks
def get_labels(self):
labels = []
yield self.open_dataset()
variables = yield self.data_vault.variables(context=self.context)
path, dataset_name = yield self.data_vault.open(
self.dataset_location[1], context=self.context
)
for i in range(len(variables[1])):
labels.append(variables[1][i][1] + " - " + dataset_name)
returnValue(labels)
@inlineCallbacks
def disconnect_data_signal(self):
yield self.data_vault.removeListener(
listener=self.update_data, source=None, ID=11111, context=self.context
)