Version 0.3.0 · Python 3 · PyVISA · Written in ASD-STE100

JUMP

Justin's Universal Measurement Program

This page explains JUMP in eight levels. Level 1 is simple. Each level after it gives more detail. Stop when you have sufficient information.

Language Python 3 Interface GPIB, USB through PyVISA Instrument classes 7 Tested on Windows 10, CentOS 7 Code approx. 5 300 lines
Level 1 · Overview

What JUMP does

JUMP is a computer program for laboratory measurements. It controls laboratory instruments and records the data that they measure.

The first use of JUMP is dielectric spectroscopy. This procedure measures the electrical properties of a material sample at different frequencies and temperatures.

A typical measurement

JUMP decreases the sample temperature from 300 K to 250 K. At each 3 K step, it measures the sample at 30 frequencies between 1 Hz and 10 MHz. At the end, JUMP writes one data file for each temperature.

JUMP operates in a text console. It asks the operator questions. The operator types the answers.

JUMP replaces an older QBasic program. The group of Experimental Physics V at the University of Augsburg uses it.

Level 2 · The main idea

Two types of values

JUMP divides all values into two types: controllables and measurables.

Controllable
A value that JUMP sends to an instrument. Examples: the temperature setpoint, the frequency of the test voltage.
Measurable
A value that JUMP receives from an instrument. Examples: the sample temperature, the impedance of the sample.

Some physical quantities have the two types. You set the temperature setpoint. Then you measure the real sample temperature.

The code uses the spelling "controlable".

ComputerJUMP
Setpoint = 297.0 K  →
←  Sensor B = 297.06 K
InstrumentLakeShore 336

Test your knowledge

0 of 6 correct

Select the type of each value. These values are from real instrument classes in JUMP.

Level 3 · How a measurement is built

The task list

A measurement in JUMP is a list of tasks. The tasks make a tree. Each task can have sub-tasks.

JUMP has three task types:

ParameterController
Changes one controllable. After each new value, it starts its direct sub-tasks, one after the other. In the mode "ramp", it changes the value at a constant rate, for example 0.5 K/min. In the mode "specific values", it sets each value from a list, for example 30 frequencies.
DataAcquisition
Reads one measurable and records the value. As an option, it continues to read while its sub-tasks operate. Then it also records the average and the maximum deviations.
Trigger
Starts its sub-tasks at fixed time intervals. For example: every 3 minutes, for 5 hours.

Each task has an identifier, for example [0,0,1]. The number of digits shows the depth of the task in the tree.

Simulation: a short temperature run

No instrument is necessary

This is a short version of a real task list. Push "Next step" to see each action. Push "Start" to see all actions automatically.

t = 00:00
Setpoint that JUMP sendsPlanned rate 0.5 K/minSub-tasks start

During the frequency sweep, JUMP keeps the setpoint constant. After the sweep, it moves the setpoint to the planned value. Because of this, the mean rate stays at 0.5 K/min.

Level 4 · Workflow

Three phases

Each session with JUMP has three phases. The operator can do phase 3 at a different time and on a different computer.

  1. Set up

    The operator types a name, a working directory and a comment. Then the operator selects the measurement setup and the instruments. Last, the operator makes the task list.

  2. Measure

    JUMP starts each task as a separate thread. The tasks operate in the sequence of the tree. Every 5 minutes, JUMP saves the database in one of two autosave files. At the end, it saves the full database as a .JUMP file.

  3. Process

    The operator opens the .JUMP file. JUMP calculates more quantities and connects the data of the tasks. Then it writes text files.

The template S001 gives fixed answers for the task list and for the processing. With a template, the operator types fewer answers.

Level 5 · Phase 3 in detail

From raw data to files

JUMP records the data of each task in a separate list. The lists do not have a link to each other.

For example, list [0,0,0,0] contains 16 impedance values. But these values do not show their temperature. In phase 3, the operator connects the lists with these operations:

Merge, different level
Connects each point of a task with the related point of its sub-task, for example [0] and [0,0]. The two lists must have the same length. The relation is 1 to 1.
Merge, same level
Connects two tasks with the same parent, for example [0,0] and [0,1]. Use it when two sensors record data at the same time.
Integrate
Attaches n sub-task points to each parent point. The relation is 1 to n. In this example, n = 16 / 4 = 4.
Transpose
Changes the direction of the data. Before, each temperature has a list of frequencies. After, each frequency has a list of temperatures.

Process the data from the simulation

Do the operations in this sequence. Each operation uses the data that the operation before it made.

Level 6 · Physics

Calculated quantities

The ALPHA analyzer gives three values for each point: the resistance R, the reactance X and the frequency f.

JUMP calculates more quantities from these values. If you give the sample thickness d and the electrode area A, JUMP also calculates the permittivity and the conductivity.

JUMP uses millimetres for d and A. Because of this, it uses ε0 = 8.854 × 10−15 F/mm. The conductivity is in S/cm.

Calculator

Same equations as DataManipulator
QuantityEquationValueKey in file
Level 7 · Inside the code

Program structure

JUMP has six Python files. Each file is one layer of the program.

All commands to an instrument go through the measurement setup. The setup knows the limits of the physical equipment. For example, a cryostat must not go above 500 K.

Layers

Select a layer

How JUMP finds an instrument

  1. JUMP asks PyVISA for all connected instruments.
  2. JUMP sends *IDN? to each instrument. The timeout is 50 ms.
  3. If there is no answer, JUMP sends END ALWAYS and ID?. The Agilent 3458A needs these commands.
  4. JUMP compares each answer with the lists in the folder Device_Serials.
  5. JUMP shows the recognized instruments. The operator selects one.
  6. JUMP prepares the instrument and asks for its settings, for example the excitation voltage.

The repository contains only Device_Serials/DUMMY.py. Each laboratory adds the files for its own instruments.

Supported instruments

ClassInstrumentMeasurablesControllables
ALPHANovocontrol ALPHA analyzerRXexpected_freq
Temp_336LakeShore 336 temperature controllerSensor A to D (K)Setpoint, PID, HeaterOutput, HeaterRange
QuatroNovocontrol Quatro cryosystemSample temperatureSetpoint, PowerOffNow
Agilent4980AAgilent 4980A LCR meter19 functions, CpD to YTrexpected_freq
Agilent3458AAgilent 3458A multimeter4-wire resistanceresistance_range
Keysight_MSO_X_3014TKeysight oscilloscopeVmax on channels 1 and 2None
NIMaxScreenshotsScreen of NI MAX, read with OCR8 channels in mVNone

How to add an instrument

  1. Copy the class DUMMY in MeasurementHardware.py.
  2. Give the class a new name.
  3. Write the methods measure_measurable and set_controlable for the instrument.
  4. Write the *IDN? answer of the instrument in a new file in Device_Serials.
  5. Add the class name to the parent classes of MeasurementDeviceChooser.
Level 8 · Status

Limits of version 0.3.0

  • JUMP has no graphic interface. It does not show the data during a measurement.
  • The Trigger task operates only with time. A trigger that uses a measured value is not complete.
  • You cannot safely stop a measurement. If one thread fails, the measurement can stop.
  • The .JUMP file uses the Python format "pickle". Only Python with the JUMP classes can open it. Do not open .JUMP files from unknown sources.
  • The code uses import visa. Current PyVISA versions do not have this module. Use an older PyVISA version or change the import.
  • Templates are fixed lists of answers. If a question changes, the template also must change.