Newer
Older
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
import logging
import numpy as np
from time import sleep
from pymeasure.experiment import Procedure, IntegerParameter, FloatParameter
from ..classes.stage import Stage
from ..classes.dac import DAC
log = logging.getLogger(__name__)
log.addHandler(logging.NullHandler())
class Y_Sweep(Procedure):
name = "Y-Sweep"
acq_time = FloatParameter('Aquisition time', units='s', default=1)
freq = FloatParameter('Aquisition Frequency', units='Hz', default=50)
y_min = FloatParameter('From y', units='mm', default=0)
y_max = FloatParameter('To y', units='mm', default=5)
y_step = FloatParameter('Step', units='mm', default=0.1)
x = FloatParameter('Position x', units='mm', default=0)
field = FloatParameter('Magnetic field', units='V', default=0)
DATA_COLUMNS = ['X Position', 'Y Position', 'Voltage', 'Magnetic Field [V]', 'Magnetic Field [mT]']
def startup(self):
log.info("Setting up the data aquisition")
def execute(self):
log.info("Starting the voltage acquisition")
voltage = DAC("ai0")
field = DAC("ao1")
y_positions = np.arange(self.y_min, self.y_max, self.y_step)
field.write(self.field)
sleep(1)
try:
stage = Stage()
stage.enable_connections()
except:
log.info("Close connection with motors before running an experiment, motors can not be used")
stage.move_x_to(self.x)
stage.move_y_to(self.y_min)
stage.wait_stable()
# Start sweeping loop
for i in range(len(y_positions)):
stage.move_y_to(y_positions[i])
average_voltage = np.arange(0, int(round(self.acq_time * self.freq)))
for step in range(len(average_voltage)):
average_voltage[step] = voltage.read()
sleep(1/self.freq)
data = {
'Y Position': y_positions[i],
'Voltage': np.mean(average_voltage)
}
log.debug("Produced numbers: %s" % data)
self.emit('results', data)
self.emit('progress', 100 * i / len(y_positions))
if self.should_stop():
break
field.write(0.)
stage.close_connections()
def shutdown(self):
log.info("Finished acquisition")