コード例 #1
0
    def queue(self):
        
        procedure = self.make_procedure()

        directory = procedure.fileroot
        

        if procedure.inverse_spacing:
            fields = np.linspace(1/procedure.field_start,1/procedure.field_stop,procedure.field_steps)
            fields = 1/fields
            for field in fields:
                filename = unique_filename(directory, prefix=procedure.filename, ext='txt', datetimeformat='')
                procedure.field = field
                results = Results(procedure, filename)
                experiment = self.new_experiment(results)

                self.manager.queue(experiment)

        else:
            filename = unique_filename(directory, prefix=procedure.filename, ext='txt', datetimeformat='')

            results = Results(procedure, filename)
            experiment = self.new_experiment(results)

            self.manager.queue(experiment)
コード例 #2
0
ファイル: image_gui.py プロジェクト: xieyong8410/pymeasure
 def queue(self):
     direc = '.'
     filename = unique_filename(direc,'test')
     procedure = self.make_procedure()
     results = Results(procedure, filename)
     experiment = self.new_experiment(results)
     self.manager.queue(experiment)
コード例 #3
0
    def queue(self):

        maxcurrent = self.inputs.max_curr.value()
        mincurrent = self.inputs.min_curr.value()
        currentstep = self.inputs.curr_step.value()

        currents = np.arange(mincurrent, maxcurrent + currentstep, currentstep)

        for k, curr in enumerate(currents):
            # Change this to the desired directory
            directory = self.inputs.folder.text()

            filename = unique_filename(
                directory, prefix=self.inputs.samplename.text(),
                ext='txt', datetimeformat='')

            procedure = Measure2ndHarmonic()
            procedure.current = curr
            procedure.max_angle = self.inputs.max_angle.value()
            procedure.delay = self.inputs.delay.value()
            procedure.Lockin1_use = self.inputs.Lockin1_use.currentText()
            procedure.Lockin2_use = self.inputs.Lockin2_use.currentText()

            results = Results(procedure, filename)
            experiment = self.new_experiment(results)

            self.manager.queue(experiment)
コード例 #4
0
ファイル: tempQTGUI.py プロジェクト: jeraldtm/glovebox
 def queue(self):
     procedure = self.make_procedure()
     filename = unique_filename(procedure.save_dir, procedure.sample_name,
                                '_temp_monitor_')
     results = Results(procedure, filename)
     experiment = self.new_experiment(results)
     self.manager.queue(experiment)
コード例 #5
0
    def queue(self):
        directory = "./"  # Change this to the desired directory
        filename = unique_filename(directory, prefix='IV')

        procedure = self.make_procedure()
        results = Results(procedure, filename)
        experiment = self.new_experiment(results)

        self.manager.queue(experiment)
コード例 #6
0
ファイル: iv_keithley.py プロジェクト: ralph-group/pymeasure
    def queue(self):
        directory = "./" # Change this to the desired directory
        filename = unique_filename(directory, prefix='IV')

        procedure = self.make_procedure()
        results = Results(procedure, filename)
        experiment = self.new_experiment(results)

        self.manager.queue(experiment)
コード例 #7
0
ファイル: tempControlGUI.py プロジェクト: jeraldtm/glovebox
 def queue(self):
     fname = unique_filename(
         self.inputs.save_dir.text(),
         dated_folder=True,
         prefix=self.inputs.calib_name.text() + '_temperature_record_',
         suffix=''
     )
     procedure = self.make_procedure()
     results = Results(procedure, fname)
     experiment = self.new_experiment(results)
     self.manager.queue(experiment)
コード例 #8
0
    def queue(self):
        direc = self.inputs.save_dir.text()
        # create list of procedures to run
        procedure = self.make_procedure()

        # create files
        pre = (procedure.your_name + '_') if procedure.your_name else ''
        suf = 'SS9'
        filename = unique_filename(direc,
                                   dated_folder=True,
                                   suffix=suf,
                                   prefix=pre)
        # ensure *some* sample name exists so Results.load() works
        if procedure.your_name == '':
            procedure.your_name = 'undefined'

        # Queue experiment
        results = Results(procedure, filename)
        experiment = self.new_experiment(results)
        self.manager.queue(experiment)
コード例 #9
0
class DepProcedure(Procedure):

    plate_e = FloatParameter('Plating Potential',
                             units='V',
                             minimum=-5,
                             maximum=5,
                             default=-1.5)
    pulse = FloatParameter('Pulse length', units='s', default=0.1)
    delay = FloatParameter('Delay Time', units='s', default=5.9)
    repeats = IntegerParameter('Cycles', units=None, default=50)
    deltat = FloatParameter('Measurement Frequency', units='Hz', default=20)
    current_range = FloatParameter('Current Range', units='A', default=0.1)
    directory = Parameter('Working Directory', default='C:/Data/')
    filename = Parameter('Filename',
                         default=unique_filename(str(directory),
                                                 prefix='Plate_'))
    DATA_COLUMNS = ['Current (A)', 'Potential (V)', 'Time (s)']

    def startup(self):
        #        log.info("Setting up instruments")
        #        self.meter = Keithley2182("GPIB::7::INSTR")
        #        self.meter.measure_voltage()
        #        self.meter.voltage_range = self.voltage_range
        #        self.meter.voltage_nplc = 1 # Integration constant to Medium

        self.source = Keithley2400("GPIB::24::INSTR")
        self.source.apply_voltage()
        self.source.measure_current()
        self.source.voltage_nplc = 1  # Integration constant to Medium
        self.source.complinance_current = self.current_range
        self.source.enable_source()
        sleep(2)

    def execute(self):
        pulses = np.repeat(self.plate_e, (self.pulse) * 1 // (1 / self.deltat))
        rest = np.repeat(0, (self.delay) * 1 // (1 / self.deltat))
        potentials = np.concatenate((pulses, rest))
        potentials = np.tile(potentials, np.int(self.repeats))
        #        currents *= 1e-3 # to mA from A
        steps = len(potentials)
        log.info("Starting Pulsed electrodeposition")
        for i, potential in enumerate(potentials):
            log.debug("Applying potential: %g V" % potential)

            self.source.source_voltage = potential
            # Or use self.source.ramp_to_current(current, delay=0.1)
            sleep(1 / self.deltat)

            current = self.source.current
            time = i / self.deltat
            data = {
                'Current (A)': current,
                'Potential (V)': potential,
                'Time (s)': time
            }
            self.emit('results', data)
            self.emit('progress', 100. * i / steps)
            if self.should_stop():
                log.warning("Catch stop command in procedure")
                break

    def shutdown(self):
        self.source.shutdown()
        self.source.beep(783.991, 0.1)
        sleep(0.125)
        self.source.beep(1046.50, 0.1)
        sleep(0.125)
        self.source.beep(1318.51, 0.1)
        sleep(0.125)
        self.source.beep(1567.98, 0.22)
        sleep(0.25)
        self.source.beep(1318.51, 0.1)
        sleep(0.125)
        self.source.beep(1567.98, 0.25)
        log.info("Finished")
コード例 #10
0
class IVProcedure(Procedure):

    max_current = FloatParameter('Maximum Current', units='mA', default=10)
    min_current = FloatParameter('Minimum Current', units='mA', default=-10)
    current_step = FloatParameter('Current Step', units='mA', default=0.1)
    delay = FloatParameter('Delay Time', units='ms', default=20)
    voltage_range = FloatParameter('Voltage Range', units='V', default=10)
    directory = Parameter('Working Directory', default='C:/Data/')
    filename = Parameter('Filename', default=unique_filename(str(directory), prefix='IV'))
    DATA_COLUMNS = ['Current (A)', 'Voltage (V)', 'Resistance (Ohm)']

    def startup(self):
        log.info("Setting up instruments")
#        self.meter = Keithley2182("GPIB::7::INSTR")
#        self.meter.measure_voltage()
#        self.meter.voltage_range = self.voltage_range
#        self.meter.voltage_nplc = 1 # Integration constant to Medium
        
        self.source = Keithley2400("GPIB::24::INSTR")
        self.source.apply_current()
        self.source.source_current_range = self.max_current*1e-3 # A
        self.source.complinance_voltage = self.voltage_range
        self.source.enable_source()
        sleep(2)

    def execute(self):
        currents_up = np.arange(self.min_current, self.max_current, self.current_step)
        currents_down = np.arange(self.max_current, self.min_current, -self.current_step)
        currents = np.concatenate((currents_up, currents_down)) # Include the reverse
        currents *= 1e-3 # to mA from A
        steps = len(currents)
        
        log.info("Starting to sweep through current")
        for i, current in enumerate(currents):
            log.debug("Measuring current: %g mA" % current)

            self.source.source_current = current
            # Or use self.source.ramp_to_current(current, delay=0.1)
            sleep(self.delay*1e-3)
            
            voltage = self.meter.voltage

            if abs(current) <= 1e-10:
                resistance = np.nan
            else:
                resistance = voltage/current
            data = {
                'Current (A)': current,
                'Voltage (V)': voltage,
                'Resistance (Ohm)': resistance
            }
            self.emit('results', data)
            self.emit('progress', 100.*i/steps)
            if self.should_stop():
                log.warning("Catch stop command in procedure")
                break

    def shutdown(self):
        self.source.shutdown()
        self.source.beep(783.991,0.1)
        sleep(0.125)
        self.source.beep(1046.50,0.1)
        sleep(0.125)
        self.source.beep(1318.51,0.1)
        sleep(0.125)
        self.source.beep(1567.98,0.22)
        sleep(0.25)
        self.source.beep(1318.51,0.1)
        sleep(0.125)
        self.source.beep(1567.98,0.25)
        log.info("Finished")
コード例 #11
0
ファイル: electroplating GUI.py プロジェクト: abeljim/SSDK
class DepProcedure(Procedure):

    plate_current = FloatParameter('Plating Current',
                                   units='A',
                                   minimum=-1,
                                   maximum=1,
                                   default=0.000268055577)
    pulse = FloatParameter('Pulse length', units='s', maximum=1e8, default=0.1)
    delay = FloatParameter('Delay Time', units='s', maximum=1e8, default=5.9)
    repeats = IntegerParameter('Cycles',
                               units=None,
                               minimum=1,
                               maximum=1e8,
                               default=500)
    deltat = FloatParameter('Measurement Frequency', units='Hz', default=20)
    voltage_range = FloatParameter('Potential Range', units='V', default=10)
    directory = Parameter('Working Directory', default='C:/Data/')
    filename = Parameter('Filename',
                         default=unique_filename(str(directory),
                                                 prefix='Plate_'))
    DATA_COLUMNS = ['Current (A)', 'Potential (V)', 'Time (s)']

    def startup(self):
        log.info("Setting up instruments")
        """
        To use the Nanovoltmeter instead of the Sourcemeter to measure
        potential, uncomment the following section and change the corresponding
        section in execute routine to measure from meter instead of source    
        """
        #        self.meter = Keithley2182("GPIB::7::INSTR")
        #        self.meter.measure_voltage()
        #        self.meter.voltage_range = self.voltage_range
        #        self.meter.voltage_nplc = 1 # Integration constant to Medium

        self.source = Keithley2400("GPIB::24::INSTR")
        self.source.apply_current()
        self.source.measure_voltage()
        self.source.source_current_range = self.plate_current * 1.1  # Current range is 10% over target
        self.source.compliance_voltage = self.voltage_range
        self.source.enable_source()
        sleep(2)

    def execute(self):
        pulses = np.repeat(self.plate_current,
                           (self.pulse) * 1 // (1 / self.deltat))
        rest = np.repeat(0, (self.delay) * 1 // (1 / self.deltat))
        currents = np.concatenate((pulses, rest))
        currents = np.tile(currents, np.int(self.repeats))
        #        currents *= 1e-3 # to mA from A
        steps = len(currents)
        log.info("Starting Pulsed electrodeposition")
        for i, current in enumerate(currents):
            log.debug("Applying current: %g A" % current)

            self.source.source_current = current
            # Or use self.source.ramp_to_current(current, delay=0.1)
            sleep(1 / self.deltat)

            voltage = self.source.voltage
            time = i / self.deltat
            data = {
                'Current (A)': current,
                'Potential (V)': voltage,
                'Time (s)': time
            }
            self.emit('results', data)
            self.emit('progress', 100. * i / steps)
            if self.should_stop():
                log.warning("Catch stop command in procedure")
                break

    def shutdown(self):
        self.source.shutdown()
        self.source.beep(783.991, 0.1)
        sleep(0.125)
        self.source.beep(1046.50, 0.1)
        sleep(0.125)
        self.source.beep(1318.51, 0.1)
        sleep(0.125)
        self.source.beep(1567.98, 0.22)
        sleep(0.25)
        self.source.beep(1318.51, 0.1)
        sleep(0.125)
        self.source.beep(1567.98, 0.25)
        log.info("Finished")
コード例 #12
0
class PotentiostaticProcedure(Procedure):

    potential = FloatParameter('Potential', units='V', default=0.1)
    max_current = FloatParameter('Maximum Current', units='mA', default=10)
    time = FloatParameter('Experiment Length', units='s', default=5)
    dt = FloatParameter('Measurement frequency', units='Hz', default=5)
    voltage_range = FloatParameter('Voltage Range', units='V', default=10)
    directory = Parameter('Working Directory', default='C:/Data/')
    filename = Parameter('Filename',
                         default=unique_filename(str(directory),
                                                 prefix='StaticE'))
    DATA_COLUMNS = ['Time (s)', 'Current (A)', 'Potential (V)']

    def startup(self):

        self.source = Keithley2400("GPIB::24::INSTR")
        self.source.apply_voltage(voltage_range=None, compliance_current=0.1)
        self.source.measure_current(nplc=1,
                                    current=self.max_current,
                                    auto_range=True)
        #        self.source.apply_current()
        #        self.source.source_current_range = self.max_current*1e-3 # A
        #        self.source.complinance_voltage = self.voltage_range
        self.source.enable_source()
        sleep(2)

    def execute(self):
        potential = self.potential
        times = np.arange(0, self.time, 1 / self.dt)
        steps = len(times)
        log.info("Applying potential of %f V" % potential)
        self.source.source_voltage = potential
        for i, time in enumerate(times):
            #            self.source.source_current = potential
            sleep(1 / self.dt)
            # sleep between current measurements (Hz -> s)

            current = self.source.current

            data = {
                #                'Time (s)': time,
                'Potential (V)': potential,
                'Current': current
            }
            self.emit('results', data)
            self.emit('progress', 100. * i / steps)
            if self.should_stop():
                log.warning("Catch stop command in procedure")
                break

    def shutdown(self):
        self.source.shutdown()
        self.source.beep(783.991, 0.1)
        sleep(0.125)
        self.source.beep(1046.50, 0.1)
        sleep(0.125)
        self.source.beep(1318.51, 0.1)
        sleep(0.125)
        self.source.beep(1567.98, 0.22)
        sleep(0.25)
        self.source.beep(1318.51, 0.1)
        sleep(0.125)
        self.source.beep(1567.98, 0.25)
        log.info("Finished")
コード例 #13
0
ファイル: CV_keithley2400.py プロジェクト: abeljim/SSDK
class DepProcedure(Procedure):
    in_e = IntegerParameter('Start E', units='mV', minimum=-10000, maximum=10000, default=0)
    lo_e = IntegerParameter('Low E', units='mV', minimum=-10000, maximum=10000, default=-50)
    hi_e = IntegerParameter('High E', units='mV', minimum=-10000, maximum=10000, default=50)
#    sweepdirection = 
    sweep_rate = FloatParameter('Sweep Rate', units='mV/s', minimum=0.01, maximum=500, default=10)
    repeats = IntegerParameter('Cycles', units=None, minimum=1, maximum=1e8, default=10)
    deltat = FloatParameter('Measurement Frequency', units='Hz', default=20)
    voltage_range = FloatParameter('Potential Range', units='V', default=10)
    current_range = FloatParameter('Current Range', units='A', default=0.5)
    directory = Parameter('Working Directory', default='C:/Data/')
    filename = Parameter('Filename', default=unique_filename(str(directory), prefix='CV_'))
    DATA_COLUMNS = ['Time (s)', 'Potential (V)', 'Current (A)']

    def startup(self):
        log.info("Setting up instruments")
        """
        To use the Nanovoltmeter instead of the Sourcemeter to measure
        potential, uncomment the following section and change the corresponding
        section in execute routine to measure from meter instead of source    
        """
#        self.meter = Keithley2182("GPIB::7::INSTR")
#        self.meter.measure_voltage()
#        self.meter.voltage_range = self.voltage_range
#        self.meter.voltage_nplc = 1 # Integration constant to Medium
        
        self.source = Keithley2400("GPIB::24::INSTR")
        self.source.apply_voltage()
        self.source.measure_current()
        self.source.source_current_range = self.current_range
        self.source.compliance_voltage = self.voltage_range
        self.source.enable_source()
        sleep(2)

    def execute(self):
        in_e = self.in_e/1000   # Convert from mV to V
        hi_e = self.hi_e/1000   # Convert from mV to V
        lo_e = self.lo_e/1000   # Convert from mV to V
        
        # To calculate the e_step, convert to V/s and divide by measurement frequency 
        self.source.ramp_to_voltage(hi_e)
        e_step = 0.001*self.sweep_rate/self.deltat
        sweep1 = np.arange(in_e, hi_e, e_step)
        sweep2 = np.arange(hi_e, lo_e, -e_step)
        sweep3 = np.arange(lo_e, hi_e, e_step)
        potentials = np.concatenate((sweep2, sweep3))
        potentials = np.tile(potentials, np.int(self.repeats))
        sweep4 = np.arange(hi_e, in_e, -e_step)
        potentials = np.concatenate((sweep1, potentials))
        potentials = np.concatenate((potentials, sweep4))
        steps = len(potentials)
        log.info("Starting Cyclic Voltammetry")
        for i, e in enumerate(potentials):
            log.debug("Measuring potential: %g V" % e)
            self.source.source_voltage = e
            sleep(1/self.deltat)
            current = self.source.current
            time = i/self.deltat
            data = {
                    'Time (s)': time,
                    'Potential (V)': e,
                    'Current (A)': current
                    }
            self.emit('results', data)
            self.emit('progress', 100.*i/steps)
            if self.should_stop():
                log.warning("Catch stop command in procedure")
                break

    def shutdown(self):
        self.source.shutdown()
        self.source.beep(783.991,0.1)
        sleep(0.125)
        self.source.beep(1046.50,0.1)
        sleep(0.125)
        self.source.beep(1318.51,0.1)
        sleep(0.125)
        self.source.beep(1567.98,0.22)
        sleep(0.25)
        self.source.beep(1318.51,0.1)
        sleep(0.125)
        self.source.beep(1567.98,0.25)
        log.info("Finished")
コード例 #14
0
ファイル: charge-discharge.py プロジェクト: abeljim/SSDK
class DepProcedure(Procedure):
    capacity = FloatParameter('Capacity',
                              units='mAh',
                              minimum=0,
                              maximum=10,
                              default=4.29)
    c_rate = FloatParameter('Charge Rate',
                            units='C',
                            minimum=0.01,
                            maximum=20,
                            default=1)
    repeats = IntegerParameter('Cycles',
                               units=None,
                               minimum=1,
                               maximum=1e8,
                               default=50)
    deltat = FloatParameter('Measurement Frequency', units='Hz', default=1)
    voltage_range = FloatParameter('Potential Range', units='V', default=10)
    directory = Parameter('Working Directory', default='C:/Data/')
    filename = Parameter('Filename',
                         default=unique_filename(str(directory),
                                                 prefix='charge_'))
    DATA_COLUMNS = ['Time (s)', 'Current (A)', 'Potential (V)']

    def startup(self):
        log.info("Setting up instruments")
        """
        To use the Nanovoltmeter instead of the Sourcemeter to measure
        potential, uncomment the following section and change the corresponding
        section in execute routine to measure from meter instead of source    
        """
        #        self.meter = Keithley2182("GPIB::7::INSTR")
        #        self.meter.measure_voltage()
        #        self.meter.voltage_range = self.voltage_range
        #        self.meter.voltage_nplc = 1 # Integration constant to Medium

        self.source = Keithley2400("GPIB::24::INSTR")
        self.source.source_current()
        self.source.measure_voltage()
        self.source.source_current_range = self.capacity * self.c_rate * 5
        self.source.compliance_voltage = self.voltage_range
        self.source.enable_source()
        sleep(2)

    def execute(self):
        charge_rate = self.capacity * self.c_rate * 0.001  # Charge rate, in A
        discharge_rate = charge_rate * -1  # Discharge rate, in A
        currents = np.repeat(charge_rate, )
        currents_up = np.arange(self.min_current, self.max_current,
                                self.current_step)
        currents_down = np.arange(self.max_current, self.min_current,
                                  -self.current_step)

        currents = np.concatenate(
            (currents_up, currents_down))  # Include the reverse
        currents *= 1e-3  # to mA from A
        steps = len(currents)

        # To calculate the e_step, convert to V/s and divide by measurement frequency
        self.source.ramp_to_voltage(hi_e)
        e_step = 0.001 * self.sweep_rate / self.deltat
        sweep1 = np.arange(in_e, hi_e, e_step)
        sweep2 = np.arange(hi_e, lo_e, -e_step)
        sweep3 = np.arange(lo_e, hi_e, e_step)
        potentials = np.concatenate((sweep2, sweep3))
        potentials = np.tile(potentials, np.int(self.repeats))
        sweep4 = np.arange(hi_e, in_e, -e_step)
        potentials = np.concatenate((sweep1, potentials))
        potentials = np.concatenate((potentials, sweep4))
        steps = len(potentials)
        log.info("Starting Discharge-Charge")

        for i, e in enumerate(potentials):
            log.debug("Measuring potential: %g V" % e)
            self.source.source_voltage = e
            sleep(1 / self.deltat)
            current = self.source.current
            time = i / self.deltat
            data = {
                'Time (s)': time,
                'Potential (V)': e,
                'Current (A)': current
            }
            self.emit('results', data)
            self.emit('progress', 100. * i / steps)
            if self.should_stop():
                log.warning("Catch stop command in procedure")
                break

    def shutdown(self):
        self.source.shutdown()
        self.source.beep(783.991, 0.1)
        sleep(0.125)
        self.source.beep(1046.50, 0.1)
        sleep(0.125)
        self.source.beep(1318.51, 0.1)
        sleep(0.125)
        self.source.beep(1567.98, 0.22)
        sleep(0.25)
        self.source.beep(1318.51, 0.1)
        sleep(0.125)
        self.source.beep(1567.98, 0.25)
        log.info("Finished")