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.

Regards
Shyama

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

Regards

Shyama

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()
component_system.add_component('Salt')
component_system.add_component('pH')
component_system.add_component('Protein')

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:

optimization_problem.add_variable(
    name='characteristic_charge_linear',
    parameter_path='flow_sheet.column.binding_model.characteristic_charge_linear',
    lb=1, ub=50,
    transform='auto',
    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\py3compat.py:356 in compat_exec
    exec(code, globals, locals)

  File d:\chromatography_parameter_estimation\cadet-process-dev11\gradient_complete_giec.py:136
    process = create_process(cv)

  File d:\chromatography_parameter_estimation\cadet-process-dev11\gradient_complete_giec.py:65 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\event.py:166 in add_event
    evt = Event(name, self, parameter_path, state, time=time, indices=indices)

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

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dynamicEvents\event.py:1208 in state
    raise e

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

  File D:\Chromatography_Parameter_Estimation\CADET-Process-dev11\CADETProcess\dynamicEvents\event.py:1295 in full_state
    self.set_value(new_value)

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

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

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

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

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

ValueError: Number of entries does not match

Any help is appreciated.

Regards

Shyama

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

Regards
Shyama

1 Like