Materials and Methods

This section describes the preparative steps conducted to implement a workflow on the Hamilton Liquid Handling Station Microlab Star and to test it on a set of glucose reference standards.

Glucose Reference Standards

First, the glucose concentration of the set of reference standards was determined. For this purpose, 18 different glucose solutions were prepared in a serial dilution from 0 g/L up to 3 g/L as shown in table 1. 81.8mL of a glucose solution with the concentration of 3 g/L was prepared. Next, 12 mL of the 3 g/L standard was collected and the remaining sample was filled up to 76,15mL with deionized water to reach the next lower concentration (2,75 g/L). This procedure was repeated with the next dilution steps according to table 1 until the remaining standards were prepared. To obtain reference values, the glucose concentrations of the reference samples were measured enzymatically with the Cedex Bio HT (COBAS INTEGRA 400).

(TABLE??)

Evaporation Test

The here developed workflow was aimed to serve as an automated measurement of a set of glucose samples over the duration of around 120-168h. Therefore, considerations regarding the evaporation of the sample was taken into consideration. As the solvent (water) evaporates, the solute (glucose) either crystallizes on the tube wall or remains in solution while the volume of the solvent decreases. Both cases are unfavourable because they add uncertainties to measurements and in the latter case the concentration of glucose increases over time. To determine the evaporation rate of the glucose standard solution during the experiment and to evaluate possible changes of the glucose concentration in the results, the evaporation was simulated in the Hamilton robot. For this purpose, the empty weight of seven 1,5ml Eppendorf tubes was determined. Then five of the seven Eppendorf tubes were filled with 1mL of water and weighed again. The Eppendorf tubes were placed in the Hamilton robot at the position determined for glucose standards and after eleven days, they were removed from the robot and weighed again to determine the loss of water due to evaporation. Table 2 shows the results of the evaporation test.

insert table here or create secction supportive information and insert hyperlink

Hamilton Method Editor – Creating a Method

This section describes the implementation of a method for the measurement of glucose samples with the Hamilton Liquid Handling Station Microlab Star. The purpose for this workflow is to determine the glucose concentration of a given set of eighteen samples in a random order.

As a starting point, the general requirements to the liquid-handling-workflow were first evaluated as shown in figure 4. The samples must be transported from their storage positions to the sensor by the pipetting-channel. The sensor measures the glucose concentration of the sample and afterwards discards it. Two additional steps are performed to assure accurate results. First, to avoid cross contamination between samples, the sensor chamber is washed with a washing solution such as DI water. Secondly, sensor equilibration was shown to shorten the measurement duration. The steady state of the sensor signal when measuring a sample was reached after a shorter duration when it was equilibrated in a glucose buffer solution before the measurement.

As the experiment is designed to be an automated, high throughput measurement, the above-described steps must be implemented in a loop, in the following referred to as the measurement loop. As a second step, the requirements to set up the measurement-loop were evaluated.

_images/workflow_diagram.png

Fig. 4: General workflow of the method: equilibrate the glucose sensor with buffer, measure the sample, wash the chamber and repeat the steps. Workflow as indicated is implemented in a loop.

The Measurement-Loop

To transfer the liquid between two positions, the pipetting channel must pick up a pipette tip from the pipette-tip container, move to the storage position of the liquid, aspirate the liquid, move to the target position, and discard it. After the pipetting is completed, the tip is put back to the position it was withdrawn from. These set of steps are represented by the blue boxes in figure 5.

The Hamilton Method Editor offers star-methods which predefined requirements that can be specified by user inputs (storage/target positions of the liquid, liquid type and volume, aspiration/discard mode, channel usage). In the presented method, we used two of the star-methods for the aspiration and the dispense of liquid.

The aspiration method includes the tip pick up and the aspiration of the liquid. For the for the 300µL- and 50µL-tips, special carriers are placed on the deck of the instrument. To choose the desired tip for the aspiration of the liquid, the Tip type is specified (see Tip type, Figure 6). The sequence at which pipette tip is stored position is specified automatically depending on the tip type chosen (Fig 6, Pick up tips from sequence). The pipette-tip-type differs between the buffer/sample and water since the washing step requires more volume. For the aspiration of buffer and water the variables Water_tip_position and Buffer_tip_position were assigned to the sequences of the 300µL and 50µL-tips, respectively. During the entire workflow, these positions do not change. For samples, one tip is assigned to one specific sample exclusively. In total, 18 tips are needed for 18 samples. The sequence from which the pipette tip is picked up is equal to the sequence (glucose_index) from which the sample is picked up and therefore changes during the workflow.

_images/Aspirate.png

Figure 5: Hamilton Star Method 1000µl Channel Aspirate- Edit. This star method is uded to pick up a pipette-tip and asqirate liquid from a specified sequence.

To aspirate liquid, the sequence where the liquid container is stored on the deck is specified (see Fig 5, Aspirate from sequence) . ML_Star._Water_container and ML_Star.buffer_glc_fcs_falcon are the sequences from which water and buffer is aspirated from. These do not change during the workflow. The glucose standards (samples) are placed into a sample rack which has the sequence ML_STAR.glc_solutions_18_new and holds 32 positions. Each position can carry a sample.

In a more basic workflow, the measurement loop would iterate over the sequence from position 1 to 32. However, in this set-up, the order in which the samples are measured needs to be randomized as already stated above. Otherwise, the model, that we produce the training data for, possibly recognizes a pattern of increasing or decreasing glucose concentrations. To realize random sample picking, a Hamilton Scripting Language (HSL) code for the generation of a set of 18 random numbers between 1-18 was integrated. These numbers are stored inside an array and instead of iterating over the sequence ML_STAR.glc_solutions_18_new, the sequence from which the sample is aspirated from is now picked from the array of random numbers.

Because there is no iteration over the sequence anymore, at the beginning of every cycle the aspiration method requires the sequence from where the sample is picked from as an input. This can be realized by the sequence handling method called Sequence: Set Current Position.

The current position is set to the variable glucose_index, that holds the randomly picked position of a sample for each loop iteration.

The required pipetting volumes (Fig 5, Volumes [µl]:) that are needed to measure a sample, equilibrate the sensor, or wash the sensor chamber are assigned to variables outside of the loop (pipetting_volume_X, X = water, buffer, sample). This makes parameter variation easier since the volume can be changed by changing it inside the variable and not in every single pipetting step that within the method.

For the liquid class (Fig 5, [Liquid:]), water was used in all cases (sample/buffer/water) since neither the viscosity of the samples nor of the buffer does significantly differ from that of water since the glucose concentrations are not higher than 3g/L.

The dispensing method: To dispense a liquid to a desired position, some inputs are required regarding the target position, the dispensed volume, dispensing type, and pipette-tip ejection. Figure 6 shows the star method for 1000µl Channel Dispense – Edit and which inputs can be specified.

_images/Dispense.png

Figure 6: Hamilton Star Method 1000µl Channel Dispense - Edit. This star method is used to dispense a liquid to a specific location (sequence) on the deck.

In this workflow, the target sequence is always the inlet of the glucose-sensor-chamber (ML_STAR._Glucose_Sensor_Spot) that is located at fixed coordinates on the deck of the liquid handling station and is not part of the labware. Its position does not change during the workflow. The option Auto increment is not needed due to fixed location of sequence. The volume that was aspirated can be dispensed either partly or completely. For a complete dispensing into the inlet tube of the sensor and to ensure that no liquid remains inside the tip, the dispense mode is set to Dispense remaining volume (Remaining volume inclusive blowout air). Partly dispensing a volume could be useful e.g., to distribute a liquid between some tubes. The liquid class is by default set to the class used in aspiration. This accounts for the sample, buffer, and cleaning solution. After the sample/water/buffer was dispensed, the pipette ejection position can be specified. When in some cases it might be necessary to eject the pipette-tip to a waste container, in this workflow the pipette-tips can be used multiple times to safe resources and therefore Eject to the pick-up position is activated.

At the beginning of the measurement-loop, the position at which the tip is taken from and ejected to was specified by Sequence: Set Current Position (see above). The tip ejecting mode requires the sequence to which the tip is ejected to. This sequence is given by the position it was taken from, which was assigned to variables outside the loop (X_tip_position; X = Water, Buffer, Sample).

Controlling the Pump and Glucose-Sensor: As the liquid is pipetted into the inlet tube, it is pumped into the measuring chamber by a peristaltic pump. The flow rate at which the sample, buffer or washing solution is pumped into the chamber was calculated beforehand. For the washing step, a larger volume of the washing solution is pumped into and trough the chamber so that the inlet and outlet tube, as well as the chamber are filled with it. Once the liquid reached the sensor chamber, the measurement is started. The measurement duration is fixed and set to 5 minutes for measuring a sample and 10 minutes for the buffer equilibration. No measurement step is needed for washing.

The pump and the sensor are not part of the liquid handling station and therefore, can’t be controlled directly by the Hamilton Method Editor User Interface. An interface between the Raspberry-Pi that is connected to the pump and the glucose sensor and the computer that controls the Liquid Handling Station was build. It is distributed into a server side and a client. The server runs on the Raspberry-Pi and executes commands that are send by the client (e.g. the computer that is connected to the Hamilton Robot). The detailed description of the command line interface can be found here: HYPERLINK: Command Line Interface — glc_sensor_measurements 0.0.1 documentation (glucose-sensor-interface.readthedocs.io)

Via a Shell() function executed in HSL, the sensor and pump can be adresed through this command line interface. The following HSL code controls the pump:

_images/control_pump.png

The first line generates a string variable that holds the all the required input arguments for a script that controls the pump through the client interface. The second line is specifying the volume that is pumped inside the sensor chamber. “pumping_sample_volume” is a variable that was generated in the Hamilton Method Editor at the beginning of the method and is assigned to the volume of sample to be pumped. To add the number which represents the volume, the float is converted into a string by FStr() and inserted into the existing string by string addition. The third line specifies the flow rate, the server address (–channel) and the delay meaning the number of seconds to wait before pumping. Equally, variables exist for washing and buffer. The second code is needed to provide the required information to start a record of the sensor, i.e., to start a measurement of glucose concentrations.

_images/control_sensor.png

The structure is equal to the code above. The second line specifies that a measurement/recording is started. The Sample ID (–name) of the measured sample is recorded as Probe_X were X is assigned to the variable glucose_index to store the result in the .csv file. The measurement duration (–duration) and the channel are also specified.

Every time the HSL code is executed, the pump/sensor are controlled and operated at the parameters specified in the HSL code.

The Random-Number-Generator

The purpose of the Random Number Generator is, to randomize the order in which the set of glucose samples is measured. Therefore, a set of random numbers is generated. The size of set is equal to the number of samples that are measured. To store the numbers in an iterable format, they are stored in an array. This is done in a separate loop that includes the measurement-loop. The procedure always starts with the generation of a set of random numbers and is repeated once every sample form the set of samples was measured. The basic loop architecture is:

Loop start:

  • Generate array of random numbers

  • Measurement loop:
    • measure sample set

  • loop end

loop end

The loop and the HSL-code to generate the random numbers is shown in detail in figure 8. The code uses a for loop to generate to fill the beforehand assigned empty array random_numbers with random numbers. These are generated by the function MthR01Draw(). A second array container_numbers is filled with numbers from 1 to its defined length, e.g., 18. With the function Util::Sort() the container_numbers array is sorted in an ascending order which is based on the values of the random_numbers array. For a better understanding after performing the following steps:

container_numbers = [1,2,3,4, 5]

random_numbers = [22, 16, 57, 89, 5]

Util::Sort(container_numbers, random_numbers)

the new, sorted container_numbers array would look like this: [5,2,1,3,4]. Within the measurement loop, the container_idx variable is used as a loop counter, starting from 1. The glucose_index variable is set to the value at the position container_index within the array container_numbers that was just generated before the measurement-loop as shown in figure 7. In the first iteration, the loop-counter variable container_idx would be 1, therefore:

glucose_index = container_numbers[1]

which represents the first element of container_numbers, 5.

_images/Rand_Num_Gen.png

Figure 7: HSL-code to generate an array of integer numbers between 1 and the size of the sample set in a random order. A for-loop and subsequent sorting of an array are used.

Ending the Workflow

After the required cycles are finished, the sensor needs to be stored in buffer for increased sensor lifetime. Therefore, in a final step, 50µL buffer is aspirated and dispensed into the inlet tube of the sensor. It is pumped into the measurement chamber and the tip is placed back to the buffer tip position.

Glucose Sensor

MISSING

Experimental Structure

MISSING