Tg and Moisture

Quick Start

The glass transition temperature, Tg, of a food powder depends strongly on how much water it contains. That depends on the Moisture Sorption isotherm. As the Tg goes down, the powder gets softer and might cake, as in the Powder-Moisture app.


These food science apps are produced in conjunction with expert Prof Emmanuel Purlis, CONICET, Argentina.

Tg and Moisture

Tg Dry °C
% Water
Tg wet
//One universal basic required here to get things going once loaded
window.onload = function () {
    //restoreDefaultValues(); //Un-comment this if you want to start with defaults
//Any global variables go here

//Main is hard wired as THE place to start calculating when input changes
//It does no calculations itself, it merely sets them up, sends off variables, gets results and, if necessary, plots them.
function Main() {

    //Send all the inputs as a structured object
    //If you need to convert to, say, SI units, do it here!
    const inputs = {
        Tg: sliders.SlideTg.value,
        K: sliders.SlideK.value,
        PercW: sliders.SlidePercW.value,

    //Get all the resonses as a structure
    const result = CalcIt(inputs)

    //Set all the text box outputs
    document.getElementById('TgWet').value = result.TgWet
    if (result.plots) {
        for (let i = 0; i < result.plots.length; i++) {
            plotIt(result.plots[i], result.canvas[i]);


//Here's the real app calculation
function CalcIt({ Tg,K,PercW }) {
    //The structure automatically has the names provided from input
    //By convention the values are provided with the correct units within CalcIt
    let WPts=[]
    const Tgw=-135
    var GotWater=false,TgActual=0
     for (var i = 0; i <= 95; i++) {
         if (i>=PercW && !GotWater){

    //Now we return everything - text boxes, plot and the name of the canvas, which is 'canvas' for a single plot
    const prmap = {
        plotData: [WPts], //An array of 1 or more datasets
        lineLabels: ["Tg"], //An array of labels for each dataset
        hideLegend: true,
        xLabel: 'Water&%', //Label for the x axis, with an & to separate the units
        yLabel: 'Tg&°C', //Label for the y axis, with an & to separate the units
        y2Label: null, //Label for the y2 axis, null if not needed
        yAxisL1R2: [], //Array to say which axis each dataset goes on. Blank=Left=1
        logX: false, //Is the x-axis in log form?
        xTicks: undefined, //We can define a tick function if we're being fancy
        logY: false, //Is the y-axis in log form?
        yTicks: undefined, //We can define a tick function if we're being fancy
        legendPosition: 'top', //Where we want the legend - top, bottom, left, right
        xMinMax: [,], //Set min and max, e.g. [-10,100], leave one or both blank for auto
        yMinMax: [,], //Set min and max, e.g. [-10,100], leave one or both blank for auto
        y2MinMax: [,], //Set min and max, e.g. [-10,100], leave one or both blank for auto
        xSigFigs: 'P3', //These are the sig figs for the Tooltip readout. A wide choice!
        ySigFigs: 'P3', //F for Fixed, P for Precision, E for exponential

    return {
        TgWet: TgActual.toFixed(1),
        plots: [prmap],
        canvas: ['canvas'],

The glass transition temperature, Tg, shows when there is large-scale motion in a powder material such as starch or a sugar. The lower the Tg, the more likely the powder might be deformed and, ultimately, stick together. The Tg is calculated via the Gordon-Taylor formula based on the Tg of water (-135°C), the dry Tg of the particle and w, the fraction of water in the particle. The parameter K controls the size of the effect and needs to be found by experiment or from extensive datasets of foodstuffs.

`T_g= ((1-w)T_g+w.K.T_"gw")/((1-w)+w.K)`

To do the calculation you need to know w. If you know the RH then you can calculate w via the Moisture Sorption app. Whether the powder will stick together is calculated via the Powders-Moisture app.