How to incorporate pH effect in load wash elute(LWE) simulation with SMA isotherm?

Hi Team,

I want to simulate pH effect using SMA model in linear gradient simulation. I am not able to find any option to add pH in load wash elute model in cadet python or cadet process. Please advice this or suggest any other isotherm model to incorporate pH effect.

Any suggestions appropriate.


Hey Shyama,

you can use the generalized ion exchange isotherm, which assumes that the the first component represents salt, and the second component represents another non-binding modifier (e.g., pH).

It’s available in CADET-Process as the GeneralizedIonExchange binding model with this parameter interface or in CADET-Python as the GENERALIZED_ION_EXCHANGE binding model with this parameter interface

Thanks Ronald for quick response.
To fit the Generalized ion exchange isotherm, We need to estimate the parameters of the isotherm model.
How to estimate the parameters of the generalized ion exchange isotherm model?
Any help is appreciated. Thanks



You can use the same workflow that is described here for the SMA model.

Here are a few adaptions to the GIEX you’ll need to make:

You need to add your pH component to the process definition

# Component System
component_system = ComponentSystem()

and set the pH to appropriate values

c_load = np.array([initial_salt_concentration, pH_value, 1.0])
c_wash = np.array([initial_salt_concentration, pH_value, 0.0])
c_elute = np.array([final_salt_concentration, pH_value, 0.0])

Then, when defining the optimization variables, you need to include the pH dependent parameters, like so:

    lb=1, ub=50,
    indices=[2]  # modify only the protein (component index 2) parameter

for the linear dependence of the characteristic charge on the pH. This can be done for your desired sub-set of model parameters. My recommendation would be to use 1 less pH dependent dimension than pH datapoints you have. So if you have data for 3 pH values, use 2 degrees of freedom (x & x_lin) per parameter (nu & ka).

It’s also highly advisable to use parameter dependencies to optimize keq instead of ka & kd as described here

1 Like

Thanks Ronald for reply. Sorry for late response, I was busy with other work.
When I was add three components in component_system(), I am getting error in the following line:
process.add_event(‘grad_end’, ‘flow_sheet.inlet.c’, c_post_gradient_wash, t_gradient_end).

Please find the error:

Traceback (most recent call last):

  File ~\AppData\Local\anaconda3\Lib\site-packages\spyder_kernels\ in compat_exec
    exec(code, globals, locals)

  File d:\chromatography_parameter_estimation\cadet-process-dev11\
    process = create_process(cv)

  File d:\chromatography_parameter_estimation\cadet-process-dev11\ in create_process
    process.add_event('grad_end', 'flow_sheet.inlet.c', c_post_gradient_wash, t_gradient_end)

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dynamicEvents\ in add_event
    evt = Event(name, self, parameter_path, state, time=time, indices=indices)

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dynamicEvents\ in __init__
    self.state = state

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dynamicEvents\ in state
    raise e

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dynamicEvents\ in state
    _ = self.full_state

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dynamicEvents\ in full_state

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dynamicEvents\ in set_value
    setattr(self.performer_obj, self.parameter_sequence[-1], state)

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dataStructure\ in frozensetattr
    object.__setattr__(self, key, value)

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dataStructure\ in __set__
    value = self._prepare(instance, value, recursive=True)

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dataStructure\ in _prepare
    value = self.fill_values(dims, value)

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dataStructure\ in fill_values
    raise ValueError("Number of entries does not match")

ValueError: Number of entries does not match

Any help is appreciated.



Can you please post the code you are trying to run? I would guess that you have not specified parameters for each component.

Thanks alters. I have solved the problem. You are right, I was not specified parameters for each components.

Thanks team


1 Like