Measurement Job Generation

The measurement job generation is one of the most important tasks in the framework and is due to its design highly adaptable to input data. The general workflow of the mechanism is relatively fast explained, though.

Base Structure

As mentioned in the Data Exchange section the program exchanges data via python dictionary objects. The same holds for the measurement job generation. The sended message consists of a prior which must contain the following data

general_settings = {
                    "Measurement" :
                        {
                        "Save_data": <bool>,
                        "skip_init": <bool>,
                        "Filepath": <A valid filepath>,
                        "Filename": <A valid filename>
                        }
                   }

The Key from the main dict says, that the event loop has to interpret all following data as a measurement job.

Though, more parameters would be possible here, like conifgs etc, I would not recommend it, since it is intended to only have the basic global parameters in it.

The Save_data parameter states weather or not to save data to a file or not

The skip_init parameters states if all instruments should be re-initialized prior to the measurement. And the other two parameters are self-explanatory.

Tip

A very handy optional parameter can be the header parameter. Here only a string is valid. This string will be written to the file prior to the measurement.

The next crucial key entry is the measurement itself. This means whichever measurement you want to conduct.

Important

The key of the measurement must be a valid measurement plugin name!

So e.g. if you want to call the IV_class() measurement the key of the dict entry in the job dictionary has to be "IV": ...

The value to this key can be again a dictionary containing all data YOUR measurement pluging needs. Here you are not restricted by the framework.

A full demo dict can look like this

job_dict = {"Measurement" :
                    {"Save_data": bool,
                    "Filepath": "A valid filepath",
                    "Filename": "A valid filename,
                    "skip_init": bool,
                    "header":"# Measurement file: \n " \
                             "# Campaign: MyCampaign \n " \
                             "# Sensor Type: CoolSensor \n " \
                             "# ID: 12334 \n " +\
                             "# Operator: Batman \n " \
                             "# Date: 2.2.2222 \n\n"
                    "dynamicwaiting": {"StartVolt": 0,
                                       "EndVolt": -1000,
                                       "Steps": 1,
                                       "compliance": 0.0001,
                                       "num_of_points": 30
                                      }
                               }


           }

After the whole job data is gathered you can place it on the queue to the event loop and the measurement starts.

message_from_main.put(job_dict)

You can place more then one measurement in the dictionary. If more then one is prevalent the program conducts all measurements!

Important

The order how the measurements are conducted is defined by the config parameter measurement_order in you project config file.

Tip

It is good practice to always write the job to the log file if something went wrong. This can easily be done via the log system!

Accessing measurement data

In order to use the data in the measurement plugin you have written, you just need to access it via the designated object. If you have followed the How to you should have directly access to the dictionary.

A small example:

class IV_class: # Every measurement muss have a class named after the file AND the suffix '_class'

    def __init__(self, main_class):
        # Here all parameters can be definde, which are crucial for the module to work, you can add as much as you want
        self.main = main_class # Import the main parameters and functions (as well as the job dictionary

    def show_the_job():
        """Simply prints the job details"""
        print(self.main.job_details)