Sequencer: Difference between revisions

From SweepMe! Wiki
Jump to navigation Jump to search
m (Removed duplicate links.)
(26 intermediate revisions by 2 users not shown)
Line 1: Line 1:
The sequencer is a SweepMe! tool to create your own sequence of measurements.
The sequencer is the heart of SweepMe!. Use it to create tree-like measurement sequences. Items can be placed by drag&drop from a list of all available [[Modules]].
Items can be placed by drag&drop from a list of all available items/measurements and deleted by selecting them folowed by pressing 'Del(ete)' on the keyboard.
There exists basic examples (''Settings'' -> ''Load Example'') that demonstrate the creation of measurement procedures.
Each item represents either a measurement communicating with an external device or a certain internal procedure doing some operation like [[MakeFile]], or [[PlotData]].




The sequencer presents all measurements in a tree like hierarchy. The more they are shifted to the right side, the lower the level of hierarchy.  
== Procedures ==
The structure of the tree allows for serial and parallel arrangement of the items.  
The sequencer presents a measurement in a tree-like hierarchy of modules. Each module can be understood as a for-loop over its sweep values. These sweep values can be seen as set values that have to be applied and reached to perform a measurement point. Whenever modules are nested into each other, it automatically means that nested for-loops are created. As for any tree, there exist branches. If you have a single branch, all items are nested into each other. This is the most simple and basic configuration you can realize. In this case, SweepMe! will perform variation across all combinations of set values of each module in the branch. Each combination can be seen as a measurement point for which all modules of the sequencer are asked for their measurment values. These measurement values are typically different from the set values. For example, a source measuring unit could have a set value of 5 Volt but the meausurement value might be 4.99 Volt.
Thus, very complex measurement scenarios can be created.  


'''[[Serial arrangement]]:''' Items only have either one parent item of higher hierarchy, one child item of lower hierarchy, or both.
The order of the modules directly infuences the measurement procedure: It makes a difference whether you want to measureme at all defined voltages for each temperature or if you want to measure at all defined temperatures for each voltage. In contrast, taking measurement values only slightly depends on the modules as all modules of a branch are read out at each measurement point.


'''[[Parallel arrangement]]:''' Multiple items are placed at the same level of hierarchy.
If you put items on the same level of hierarchy (siblings), you will automatically create a second branch of the tree. Now, SweepMe! will run through the first branch, followed by the second branch. Only the modules of the current branch are used to apply the sweep values and readout the measurement values. Of course, these two branches might have some modules in common and these modules will take part at the measurement of both branches. Please see the example below:


In general, a full measurement sequence can be represented by various serial arrangements and parallel arrangements.
Whenever a parallel arrangement is created, the tree gets new branches which are individually processed.
For simple measurements, we recommend to avoid parallel arrangements and solely create serial arrangements


[[File:Sequencer_example_visualization.gif|480px|thumb|Visualization of the traversing of the sequencer which has a device with two consecutive children.]]
Let's consider a sequencer arrangement with three [[SMU|SMUs]] where SMU 1 has two direct subelements, SMU 2 and SMU 3. SMU 2 and SMU 3 shall be at the same hierachy of the sequencer tree, i.e. they will be swept consecutively.


==Setting and reading==
The measurement will then have the following sequence:
# SMU1 applies the first sweep value of the sweep.
# SMU2 will run its full sweep and SMU1 and SMU2 are measured (while SMU3 is still off).
# SMU2 is switched off and now SMU3 runs its full sweep and SMU1 and SMU2 are measured (while SMU1 is off).
# SMU3 is switched off.
# SMU1 applies the next sweep value of its sweep (or the measurement is finished, if no further values shall be swept).


All items have at least one value which will used to indicate its presence in the tree, and to make it participating in the read out of the sequence.
This measurement process is shown schematically in the animation on the right.
Some items, however, have multiple values, e.g. a Source-Measure-Unit [[SMU]] typically has several values in order realize a current-voltage curve.


When reading out the sequence represented by the tree, the values of each item are iterated, and for each value of one item, the prior procedure is again done for the children items which are below in the hierarchy of the tree.
==Module categories==


There is a crucial difference between setting a value and reading a value!
=== The invisible root module 'Time' ===


'''Setting a value:'''
The sequencer has an invisible root item called 'Time' being part of any procedure. It measures the elapsed time and generates a time stamp. You will find it for example in your saved data as well as if you configure a widget such as [[Plot]].
Whenever values of an item are iterated, they are forwarded to their [[MeasurementClasses]].  
As a consequence, the sequence of items, has a crucial impact on the measurement procedure, i.e. in which order parameters are applied to your devices.


'''Reading a value:'''
===Basic modules===
Whenever the end of a branch of the tree is reached, reading of the device parameters is started.
Standardized SweepMe! functions are called in order to apply, measure, and call the parameters of all items of the current branch of the tree.
Thus, independent of the exact serial arrangement in the current branch, all items are read out.
The major difference is the order in which the device are called, the order in which the data is saved in to file, and the order in which items appear in the boxes to control the plot.


If only one item has multiple values and a purely serial arrangement is used, the position of each item, except of [[MakeFile]] and [[PlotData]], can nicely be used to adjust the order of setting and reading parameters.
There are basic modules that are used in almost any type of measurement: [[Loop]], [[Hold]], or [[MakeFile]]. Have a look at the examples to understand their meaning. We also recommend to just play around with these modules to understand how they work and interact. For example, try to combine multiple Loop or MakeFile to see the sequence of the measurement and the generated data files.  


==Use of MakeFile==
===Device modules===
 
Some modules can be used to implement measurement equipment via a Device Class. These modules have field 'Device' that allows to select the Device Class.
 
[[SMU]], [[Signal]], [[Spectrometer]], [[Scope]], [[LCRmeter]], [[LockIn]], [[Monochromator]]
 
===Add-on modules===
 
SweepMe! can be extended into any direction to implement individual setups, devices and tasks. Contact us to discuss your specific needs.
 
 
==Handling==
 
===Adding modules===
 
Modules are added by drag&drop from the right sided list of all available Modules. Some modules generate a new tab, other modules have a hidden dialog. In both cases, the module can be configured, by double-clicking on it.
 
===Moving modules===
 
Just drag&drop a module including all child items to a new position in the sequencer. If you like to insert the item between two other items at the same hierarchy, a thin black line must appear between the two items.
 
===Removing modules===
You can remove a module from the sequencer by selecting it and pressing 'Del(ete)'. An alternative would be to right-click on a module and click 'Delete selected item(s)'
 
== Tree terminology ==
 
The following figure highlights the branches of an example as needed to understand the operation of the sequencer.
[[File:Sequencer branches.png|480px|center|Visualization of branches in the sequencer]]
 
The measurement would basically perform a temperature variation. For each temperature, a Hold ensures to wait a certain time before taking the current-voltage characteristic by the SMU module. A module Loop is a child of SMU and thus repeats the measurement of each voltage as defined by the number of repetitions. In a last step a Logger module is used, e.g. to read out a temperature sensor to do a control measurement. Then, the procedure goes ahead with the next defined temperature. Files will be created for the second and third branch for which MakeFile is in. For each temperature a new file is created as the module Temperature is above MakeFile. Furthermore, the data of SMU and Logger will go into individual files as they are in different branches.
 
=== Root ===
The root of the sequencer is always an invisible module called "Time". It is part of any measurement and is part of any branch that you add to the sequencer. Thus, you will always have a timestamp in your measurement data.
 
=== Child ===
 
A child module is the module that is inserted into a certain module. For example, the module MakeFile is a child of the module Temperature in the example shown in the figure.
 
=== Parent ===
 
The parent module is the module into which a module is inserted in. For example, the module MakeFile is a parent of the module Logger in the example shown in the figure.
 
=== Leaf ===
A leaf of the sequencer is always a module that has no child items, i.e. no module is inserted to it. The modules that are leaves have colored CheckBoxes in the figure.
 
=== Branches ===
Each module that is a leaf defines a new branch (see colored lines). A branch is therefore given by all modules that are between the invisible root module [[Time]] and the leaf module. Modules can be part of several branches simultaneously. In the example, the module Temperature is part of all three branches. Such Modules that are part in multiple branches perform the measurements that are defined in each branch. The number of leaf modules is always the number of branches.
 
=== Siblings ===
Modules that have exactly the same parent module are siblings. If you have siblings in your sequencer, you automatically have multiple branches. For example, the module SMU and Logger are siblings. Also the modules Hold and MakeFile are siblings in the example of the figure.
 
==Setting and reading values==
 
All modules have a sweep values that are defined at the beginning of the measurment. The combination of these sweep values defines the number of measurement points and the procedure to be done. While some modules have a list of several sweep values, e.g. several voltages to be applied, some modules have apparently no sweep value. For example, the module Logger does not perform a sweep. Still it has a single pseudo sweep value that makes sure that the concept of nested for-loops does work in any sequence of modules.
 
There is a crucial difference between setting a [[sweep value]] (also called set value) and reading a [[measurement value]]:
 
'''Setting a sweep value:'''
The sequence of modules has a crucial impact on the measurement procedure, i.e. in which order parameters are applied to your devices. This is due to the fact that each module presents a for-loop over its sweep values and strongly depends whether a module is above or below another module.
 
'''Reading a Measurement value:'''
The combination of all sweep values defines the number of measurement points at which measurement values are taken. A measurement point can be seen as a unique combination of the sweep value of each module that is present in the current branch.
At each measurement point, '''all''' modules that are part of the current branch are read out. The order of modules in the current branch only determines in which order the modules are read out and in which order the measured data appears in the data files. As the invisible root module 'Time' is always the first module in each branch, it is also the module that is read out first and the columns of the data files always start with the measurement values of this module.
 
== Settings ==
 
Procedures, as defined by modules in the sequencer, can be saved and restored via a setting.


==Use of PlotData==


[[Category:Manual]]
[[Category:Manual]]

Revision as of 00:15, 12 February 2020

The sequencer is the heart of SweepMe!. Use it to create tree-like measurement sequences. Items can be placed by drag&drop from a list of all available Modules. There exists basic examples (Settings -> Load Example) that demonstrate the creation of measurement procedures.


Procedures

The sequencer presents a measurement in a tree-like hierarchy of modules. Each module can be understood as a for-loop over its sweep values. These sweep values can be seen as set values that have to be applied and reached to perform a measurement point. Whenever modules are nested into each other, it automatically means that nested for-loops are created. As for any tree, there exist branches. If you have a single branch, all items are nested into each other. This is the most simple and basic configuration you can realize. In this case, SweepMe! will perform variation across all combinations of set values of each module in the branch. Each combination can be seen as a measurement point for which all modules of the sequencer are asked for their measurment values. These measurement values are typically different from the set values. For example, a source measuring unit could have a set value of 5 Volt but the meausurement value might be 4.99 Volt.

The order of the modules directly infuences the measurement procedure: It makes a difference whether you want to measureme at all defined voltages for each temperature or if you want to measure at all defined temperatures for each voltage. In contrast, taking measurement values only slightly depends on the modules as all modules of a branch are read out at each measurement point.

If you put items on the same level of hierarchy (siblings), you will automatically create a second branch of the tree. Now, SweepMe! will run through the first branch, followed by the second branch. Only the modules of the current branch are used to apply the sweep values and readout the measurement values. Of course, these two branches might have some modules in common and these modules will take part at the measurement of both branches. Please see the example below:


Visualization of the traversing of the sequencer which has a device with two consecutive children.

Let's consider a sequencer arrangement with three SMUs where SMU 1 has two direct subelements, SMU 2 and SMU 3. SMU 2 and SMU 3 shall be at the same hierachy of the sequencer tree, i.e. they will be swept consecutively.

The measurement will then have the following sequence:

  1. SMU1 applies the first sweep value of the sweep.
  2. SMU2 will run its full sweep and SMU1 and SMU2 are measured (while SMU3 is still off).
  3. SMU2 is switched off and now SMU3 runs its full sweep and SMU1 and SMU2 are measured (while SMU1 is off).
  4. SMU3 is switched off.
  5. SMU1 applies the next sweep value of its sweep (or the measurement is finished, if no further values shall be swept).

This measurement process is shown schematically in the animation on the right.

Module categories

The invisible root module 'Time'

The sequencer has an invisible root item called 'Time' being part of any procedure. It measures the elapsed time and generates a time stamp. You will find it for example in your saved data as well as if you configure a widget such as Plot.

Basic modules

There are basic modules that are used in almost any type of measurement: Loop, Hold, or MakeFile. Have a look at the examples to understand their meaning. We also recommend to just play around with these modules to understand how they work and interact. For example, try to combine multiple Loop or MakeFile to see the sequence of the measurement and the generated data files.

Device modules

Some modules can be used to implement measurement equipment via a Device Class. These modules have field 'Device' that allows to select the Device Class.

SMU, Signal, Spectrometer, Scope, LCRmeter, LockIn, Monochromator

Add-on modules

SweepMe! can be extended into any direction to implement individual setups, devices and tasks. Contact us to discuss your specific needs.


Handling

Adding modules

Modules are added by drag&drop from the right sided list of all available Modules. Some modules generate a new tab, other modules have a hidden dialog. In both cases, the module can be configured, by double-clicking on it.

Moving modules

Just drag&drop a module including all child items to a new position in the sequencer. If you like to insert the item between two other items at the same hierarchy, a thin black line must appear between the two items.

Removing modules

You can remove a module from the sequencer by selecting it and pressing 'Del(ete)'. An alternative would be to right-click on a module and click 'Delete selected item(s)'

Tree terminology

The following figure highlights the branches of an example as needed to understand the operation of the sequencer.

Visualization of branches in the sequencer

The measurement would basically perform a temperature variation. For each temperature, a Hold ensures to wait a certain time before taking the current-voltage characteristic by the SMU module. A module Loop is a child of SMU and thus repeats the measurement of each voltage as defined by the number of repetitions. In a last step a Logger module is used, e.g. to read out a temperature sensor to do a control measurement. Then, the procedure goes ahead with the next defined temperature. Files will be created for the second and third branch for which MakeFile is in. For each temperature a new file is created as the module Temperature is above MakeFile. Furthermore, the data of SMU and Logger will go into individual files as they are in different branches.

Root

The root of the sequencer is always an invisible module called "Time". It is part of any measurement and is part of any branch that you add to the sequencer. Thus, you will always have a timestamp in your measurement data.

Child

A child module is the module that is inserted into a certain module. For example, the module MakeFile is a child of the module Temperature in the example shown in the figure.

Parent

The parent module is the module into which a module is inserted in. For example, the module MakeFile is a parent of the module Logger in the example shown in the figure.

Leaf

A leaf of the sequencer is always a module that has no child items, i.e. no module is inserted to it. The modules that are leaves have colored CheckBoxes in the figure.

Branches

Each module that is a leaf defines a new branch (see colored lines). A branch is therefore given by all modules that are between the invisible root module Time and the leaf module. Modules can be part of several branches simultaneously. In the example, the module Temperature is part of all three branches. Such Modules that are part in multiple branches perform the measurements that are defined in each branch. The number of leaf modules is always the number of branches.

Siblings

Modules that have exactly the same parent module are siblings. If you have siblings in your sequencer, you automatically have multiple branches. For example, the module SMU and Logger are siblings. Also the modules Hold and MakeFile are siblings in the example of the figure.

Setting and reading values

All modules have a sweep values that are defined at the beginning of the measurment. The combination of these sweep values defines the number of measurement points and the procedure to be done. While some modules have a list of several sweep values, e.g. several voltages to be applied, some modules have apparently no sweep value. For example, the module Logger does not perform a sweep. Still it has a single pseudo sweep value that makes sure that the concept of nested for-loops does work in any sequence of modules.

There is a crucial difference between setting a sweep value (also called set value) and reading a measurement value:

Setting a sweep value: The sequence of modules has a crucial impact on the measurement procedure, i.e. in which order parameters are applied to your devices. This is due to the fact that each module presents a for-loop over its sweep values and strongly depends whether a module is above or below another module.

Reading a Measurement value: The combination of all sweep values defines the number of measurement points at which measurement values are taken. A measurement point can be seen as a unique combination of the sweep value of each module that is present in the current branch. At each measurement point, all modules that are part of the current branch are read out. The order of modules in the current branch only determines in which order the modules are read out and in which order the measured data appears in the data files. As the invisible root module 'Time' is always the first module in each branch, it is also the module that is read out first and the columns of the data files always start with the measurement values of this module.

Settings

Procedures, as defined by modules in the sequencer, can be saved and restored via a setting.