rampedpyrox.RpoThermogram

class rampedpyrox.RpoThermogram(t, T, g=None)[source]

Class for inputting and storing Ramped PyrOx true (observed) and estimated (forward-modelled) thermograms, calculating goodness of fit statistics, and reporting summary tables.

Parameters:
  • t (array-like) – Array of time, in seconds. Length nt.
  • T (array-like) – Array of temperature, in Kelvin. Length nt.
  • g (None or array-like) – Array of the true fraction of carbon remaining at each timepoint, with length nt. Defaults to None.

Warning

UserWarning
If attempting to use isothermal data to create an rp.RpoThermogram instance. Consider using an alternate rp.TimeData subclass (to be added in future versions).

Notes

Important: The inverse model used herein is highly sensitive to boundary effects. To avoid unnecessarily large regularizations ensure that inputted data are completely at baseline (ppm CO2 = 0) at the beginning and the end of the experiment (can use the bl_subtract flag to enforce that this is true.)

See also

Daem
rp.Model subclass used to generate the distributed activation energy model (DAEM) transform matrix for RPO data and translate between time- and E-space.
EnergyComplex
rp.RateData subclass for storing and analyzing RPO energy (rate) data.

Examples

Generating an arbitrary bare-bones thermogram containing only t and T:

#import modules
import numpy as np
import rampedpyrox as rp

#generate arbitrary data
t = np.arange(1,100) #100 second experiment
beta = 0.5 #K/second
T = beta*t + 273.15 #K

#create instance
tg = rp.RpoThermogram(t,T)

Generating a real thermogram using an RPO output .csv file and the rp.RpoThermogram.from_csv class method, and subtracting the baseline:

#import modules
import rampedpyrox as rp

#create path to data file
file = 'path_to_folder_containing_data/thermogram_data.csv'

#create instance using baseline-subtracted CO2 data
tg = rp.RpoThermogram.from_csv(
        file,
        bl_subtract = True,
        nt = 250) #number of down-sampled time points

Manually adding some model-estimated fraction remaining data as ghat:

#assuming ghat has been generating using a ``rp.Daem`` model
tg.input_estimated(ghat)

Or, instead, you can input model-estimated g data directly from a given rp.Daem and rp.EnergyComplex instance (i.e. run the forward model):

#assuming ``rp.Daem`` named daem and ``rp.EnergyComplex`` named ec
tg.forward_model(daem, ec)

Plotting the resulting observed and modelled thermograms (note scatter when plotted against temp due to short fluctuations in measured ramp rate. For a “smooth” plot, always plot against time, as this is the master variable.):

#import additional modules
import matplotlib.pyplot as plt

#create figure
fig, ax = plt.subplots(1,2)

#plot resulting rates against time and temp
ax[0] = tg.plot(
        ax = ax[0],
        xaxis = 'time',
        yaxis = 'rate')

ax[1] = tg.plot(
        ax = ax[1],
        xaxis = 'temp',
        yaxis = 'rate')

Printing a summary of the observed and modelled thermograms:

print(tg.tg_info)
print(tg.tghat_info)

Attributes

dghatdt : numpy.ndarray
Array of the derivative of the estimated fraction of carbon remaining with respect to time at each timepoint, in fraction/second. Length nt.
dghatdT : numpy.ndarray
Array of the derivative of the estimated fraction of carbon remaining with respect to temperature at each timepoint, in fraction/Kelvin. Length nt.
dgdt : numpy.ndarray
Array of the derivative of the true fraction of carbon remaining with respect to time at each timepoint, in fraction/second. Length nt.
dgdT : numpy.ndarray
Array of the derivative of the true fraction of carbon remaining with respect to temperature at each timepoint, in fraction/Kelvin. Length nt.
dTdt : numpy.ndarray
Array of the derivative of temperature with respect to time (i.e. the instantaneous ramp rate) at each timepoint, in Kelvin/second. Length nt.
g : numpy.ndarray
Array of the true fraction of carbon remaining at each timepoint. Length nt.
ghat : numpy.ndarray
Array of the estimated fraction of carbon remaining at each timepoint. Length nt.
nt : int
Number of timepoints.
resid : float
The residual root mean square error (RMSE) between observed and modelled thermograms, g and ghat.
t : numpy.ndarray
Array of timepoints, in seconds. Length nt.
T : numpy.ndarray
Array of temperature, in Kelvin. Length nt.
tg_info : pd.Series

Series containing the observed thermogram summary info:

t_max (s),

t_mean (s),

t_std (s),

T_max (K),

T_mean (K),

T_std (K),

max_rate (frac/s),

max_rate (frac/K),

tghat_info : pd.Series

Series containing the modelled thermogram summary info:

t_max (s),

t_mean (s),

t_std (s),

T_max (K),

T_mean (K),

T_std (K),

max_rate (frac/s),

max_rate (frac/K),

Methods

forward_model(model, ratedata) Forward-models rate data for a given model and populates the thermogram with model-estimated data.
from_csv(file[, bl_subtract, nt]) Class method to directly import RPO data from a .csv file and create an rp.RpoThermogram class instance.
input_estimated(ghat) Inputs estimated thermogram into the rp.RpoThermogram instance and calculates statistics.
plot([ax, xaxis, yaxis]) Plots the true and model-estimated thermograms against time or temp.