An example to use ACT isotherm for protein A affinity chromatography

Hi,

the ACT isotherm is currently only available on the dev branch of CADET-Process. Information on how to install this, can be found in our Contributor’s guide.

Best

Johannes

I am already able to successfully use the ACT model in CADET-Process. Thank you very much.

May I ask approximately how long does it take you to run this simulation? I’m trying to inverse fit three different components according to the ACT isotherm and it takes a very long time compared to other models.

I didn’t know you are using it for a multicomponent system. In a multicomponent system some combinations of \eta and pka for your components would cause very complex behaviors because of simultaneous changes of q_{app} and K_{app} and competitive binding, which can easily lead to displacement front (strong binder kicks off weaker binder), sequential adsorption (one fraction binds, release and then re-binds or displaced), multiple traveling fronts for the same component (split peaks). All these behaviors are very challenging to solve numerically. Normally these behaviors are seen when you have close pka and very different \eta between components.

I am still working on better ways to address this issue. Before that, one simple trick is to: rather than solving for one three component system, solve for three one component system. Define three sub systems for each component and solve them separately, combine the results and fit to your data. Note that one downside is that you have to assume there is no competitive binding anymore and will lose the model’s capability to solve complex displacement behaviors. However, if your system is something like monomer, HMW and LMW and the chromatogram looks normal, then this should be a valid assumption since HMW and LMW are low in percentages.

Hey, thanks for your speedy reply. Yeah, but that’s exactly the problem, is that my chromatogram doesn’t look like a ‘normal’ chromatogram per se.

From several experiments we know that there is a lot of competition that leads to displacement of one of the species. Also the percentages of LMW and HMW are not so low, specially the HMW which makes up around 35% of the whole load composition.

I have done what you suggest, which is to fit them all individually, but then the prediction is not accurate since it lacks the competitive behavior. Anyway, thanks a lot for your reply. I would be very interested if you do more work regarding this topic!

The system might simply be numerically challenging to solve accurately due to stiffness or related effects. Have you tried solving the binding model in rapid-equilibrium and/or changing the time solver tolerances?

Hello, it can be. How could I do that? I’m using Cadet Process

Hi Sasha,

rapid-equilibrium vs kinetic binding is controlled by the field is_kinetic, see e.g. CADETProcess.processModel.Langmuir — CADET-Process 0.11.1 documentation

Time integration parameters are documented here, most important here are relTol and absTol, try to increase them.

Hello, I’ve followed your suggestion and still with only a two component system the time it takes to process increases exponentially. With one component I would say takes around 1 minute or so and with 2 components even the whole afternoon nothing happens. I’ve tried increasing the tolerances as per your suggestion but still nothing. Could I share my code for you to test it?

Do you have an .h5 file? I should be able to take a look.

Hey, I dont have an .h5 file of the script with the two components because it never actually reaches an output. I can share with you the .h5 file of the script with one component that does run. I have fitted the second component separately and have the constants that describe its behaviour, everything else (D_film, D_pore etc) is the same as it is for the first component. Would this help?

Hi Sasha,

The .h5 file is required by CADET-Core to run a simulation. Every configuration must be available as an .h5 file, regardless of whether the simulation has produced output. This is independent of the simulation success and instead determined by when and where you explicitly save the configuration in your code.

After configuring your model, you can save it using:

cadet.save("filename.h5")

where cadet is your CADET object. This writes the configuration to an .h5 file that can be used to run the simulation.

Best,
Hannah

Hello Hannah, thank you so much for the clarification. However, I’m using CADET Process, so it was different to make it but I think I managed ;). Here it is (I think)

mp_act_config.h5 (202.2 KB)

Hm, I think I figured out the problem…

When having multicomponent system, the adsorption driving force or the source term is Free sites = (effective capacity) − (already bound protein). The effective capacity changes depending on the ACT parameters. Under certain parameter set, effective capacity drops too quickly and the free sites become slightly negative. At first I thought this is fine because this is just desorption, but desorption is actually controlled by the sink term (k_d*q). So a negative source term becomes unphysical. Whenever this happens, IDAS line search starts to linger.

Considering physically the source term can’t be negative, my current fix is to implement a softplus function that regularizes the value of free sites, so it does not drop below zero. After this fix your simulation started to work and the simulation time becomes normal. Results are below:


It might take a while to test, document and release this patch. If you need a version that works urgently, please let me know and I can send you a pre-compiled version of cadet-cli.exe via DM.

Thank you so much for the help, what you explained makes sense. If you could send the cadet-cli.exe version I would greatly appreciate it. It’s not super urgent, but I would like to test it with my results.