Difficulty in Using Yamamoto Method to Estimate SMA Parameters

Hi,
I am trying to estimate the SMA parameters, k_eq and v, using the Yamamoto method. I did not get any error and the plot of the experiments seems all right, but the results of k_eq are quite different from those in the literature. I would say that the k_eq values are unrealistic:
v [11.951353298695398, 15.621517453314727]
k_eq [999.9999999999999, 999.999999631367]
I am confused as to what went wrong. Any help would be appreciated.
Thank you.




from CADETProcess.processModel import ComponentSystem
from CADETProcess.processModel import Inlet
from CADETProcess.processModel import Cstr
from CADETProcess.processModel import StericMassAction
from CADETProcess.processModel import LumpedRateModelWithoutPores
from CADETProcess.processModel import Outlet
from CADETProcess.processModel import FlowSheet
from CADETProcess.processModel import Process
from CADETProcess.simulator import Cadet
from CADETProcess.tools.yamamoto import GradientExperiment
from CADETProcess.tools.yamamoto import plot_experiments
from CADETProcess.tools.yamamoto import fit_parameters
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

file_name = r'C:\Users\cherr\Desktop\cadet run1-3 Yamamoto units checked.csv' # r:raw strings
EXPdata = np.genfromtxt(file_name, delimiter=',', skip_header=1, dtype=float, filling_values=0)
elution_volume = [15,20,25] # elution volume = gradient volume ?
experiments = []
for i in range(0,3):
    time = EXPdata[:, i*5] 
    c_protein = EXPdata[:, i*5+1:i*5+3] # unit: mM
    cond = EXPdata[:, i*5+3] # unit: mS/cm
    c_salt = (cond + 0.186) / 0.083328 # unit: mM
    gradient_volume = elution_volume [i]
    experiment = GradientExperiment(time, c_salt, c_protein, gradient_volume)
    experiments.append(experiment)

for experiment in experiments:
    experiment.plot()

cAphase = 22.29
cBphase = 1125
Q = 1e-6/60 # 1 mL/min
capacity = 680 # mM?

# Component System
systemE1 = ComponentSystem()
systemE1.add_component('salt')
systemE1.add_component('a')
systemE1.add_component('cyto')
    
# Binding Model
binding_model = StericMassAction(systemE1, 'SMA')
binding_model.is_kinetic = False 
binding_model.adsorption_rate = [1, 1, 1]
binding_model.desorption_rate = [1, 1, 1]
binding_model.steric_factor = [1, 1, 1]
binding_model.capacity = capacity
    
# column
column = LumpedRateModelWithoutPores(systemE1, 'column')
column.binding_model = binding_model
column.length = 0.02 # m
column.diameter = 0.008 # m
column.axial_dispersion = 2.7516e-7 # unit: m^2/s?
column.total_porosity = 0.9725 # unit:none
column.c = [cAphase, 0, 0] # salt in liquid phase
column.q = [capacity, 0, 0] # stationary phase is fully loaded with salt

yamamoto_results = fit_parameters(experiments, column)

print(yamamoto_results.characteristic_charge)
print(yamamoto_results.k_eq)
yamamoto_results.plot()

Hi Mao and welcome to the forum!

Without the data .csv file I can’t reproduce the problem, but I can make some guesses:

  1. The gradient_volume needs to be in m³. So if your gradient is 15 column volumes and a column volume is 4 ml, you need to specify 4 / 1000 / 1000 * 15 to get gradient_volume in m³.
  2. Your experiments end the elution with a high-salt wash step. That is not part of the gradient, but it gets used for the gradient slope calculation by CADET-Process, which calculates c_salt_end = np.max(c_salt) if no c_salt_end is given. My suggestion is to manually specify c_salt_end when creating the GradientExperiment.
  3. The same goes for c_salt_start, the salt concentration reaches a lower point than the start point of the gradient. So: experiment = GradientExperiment(time, c_salt, c_protein, gradient_volume, c_salt_start=50, c_salt_end=700) if your gradient goes from 50 to 700

Let me know if the results are still unexpected.

Hi Ronald,
Thanks for your quick reply, it’s very helpful!
I think the main reason for the unrealistic k_eq would be the inappropriate units of elution volume, as you pointed out. I have also corrected c_salt_start and c_salt_end. The results are much better!I will continue my work.
Thanks again!

1 Like