Skip to content
Snippets Groups Projects
b_sweep.py 2.32 KiB
Newer Older
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 B_Sweep(Procedure):
    name = "B-Sweep"
    acq_time = FloatParameter('Aquisition time', units='s', default=1)
    freq = FloatParameter('Aquisition Frequency', units='Hz', default=50)
    b_min = FloatParameter('From B', units='V', default=0)
    b_max = FloatParameter('To B', units='V', default=5)
    b_step = FloatParameter('Step', units='V', default=0.1)
    x = FloatParameter('Position x', units='mm', default=0)
    y = FloatParameter('Position y', units='mm', 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")     

        b_values = np.arange(self.b_min, self.b_max, self.b_step)
   
        field.write(self.b_min)

        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)
        stage.wait_stable()

        # Start sweeping loop
        for i in range(len(b_values)):
            
            field.write(b_values[i])

esarrey's avatar
esarrey committed
            average_voltage = np.arange(0, int(round(self.acq_time * self.freq)), dtype='float64')

            for step in range(len(average_voltage)):
                average_voltage[step] = voltage.read()
                sleep(1/self.freq)

esarrey's avatar
esarrey committed
            print(average_voltage)

            data = {
                'Magnetic Field [V]': b_values[i],
                'Voltage': np.mean(average_voltage)
            }

            log.debug("Produced numbers: %s" % data)
            self.emit('results', data)
            self.emit('progress', 100 * i / len(b_values))
            if self.should_stop():
                break

        field.write(0.)
        stage.close_connections()

    def shutdown(self):
        log.info("Finished acquisition")