The Yamamoto method

The Yamamoto method#

This example demonstrates how to estimate SMA binding parameters based on multiple gradient elution chromatograms using the Yamamoto method.

import numpy as np

from CADETProcess.processModel import ComponentSystem
from CADETProcess.tools.yamamoto import GradientExperiment, fit_parameters

from binding_model_parameters import create_column_model, create_in_silico_experimental_data

if __name__ == "__main__":
    component_system = ComponentSystem(['Salt', 'Protein'])
    column = create_column_model(component_system, final_salt_concentration=600, initial_salt_concentration=50)

    column_volume = column.length * ((column.diameter / 2) ** 2) * np.pi

    create_in_silico_experimental_data()

    exp_5cv = np.loadtxt("experimental_data/5.csv", delimiter=",")
    exp_30cv = np.loadtxt("experimental_data/30.csv", delimiter=",")
    exp_120cv = np.loadtxt("experimental_data/120.csv", delimiter=",")

    experiment_1 = GradientExperiment(exp_5cv[:, 0], exp_5cv[:, 1], exp_5cv[:, 2], 5 * column_volume)
    experiment_2 = GradientExperiment(exp_30cv[:, 0], exp_30cv[:, 1], exp_30cv[:, 2], 30 * column_volume)
    experiment_3 = GradientExperiment(exp_120cv[:, 0], exp_120cv[:, 1], exp_120cv[:, 2], 120 * column_volume)

    experiments = [experiment_1, experiment_2, experiment_3]

    for experiment in experiments:
        experiment.plot()

    yamamoto_results = fit_parameters(experiments, column)

    print('yamamoto_results.characteristic_charge =', yamamoto_results.characteristic_charge)
    print('yamamoto_results.k_eq =', yamamoto_results.k_eq)

    yamamoto_results.plot()
/home/docs/checkouts/readthedocs.org/user_builds/cadet-process/conda/latest/lib/python3.13/site-packages/ax/modelbridge/best_model_selector.py:45: FutureWarning: functools.partial will be a method descriptor in future Python versions; wrap it in enum.member() if you want to preserve the old behavior
  MEAN: Callable[[ARRAYLIKE], np.ndarray] = partial(np.mean)
/home/docs/checkouts/readthedocs.org/user_builds/cadet-process/conda/latest/lib/python3.13/site-packages/ax/modelbridge/best_model_selector.py:46: FutureWarning: functools.partial will be a method descriptor in future Python versions; wrap it in enum.member() if you want to preserve the old behavior
  MIN: Callable[[ARRAYLIKE], np.ndarray] = partial(np.min)
/home/docs/checkouts/readthedocs.org/user_builds/cadet-process/conda/latest/lib/python3.13/site-packages/ax/modelbridge/best_model_selector.py:47: FutureWarning: functools.partial will be a method descriptor in future Python versions; wrap it in enum.member() if you want to preserve the old behavior
  MAX: Callable[[ARRAYLIKE], np.ndarray] = partial(np.max)
yamamoto_results.characteristic_charge = [9.54892032]
yamamoto_results.k_eq = [0.08498994]
../../_images/266be0b26bcd0eb7c3bcc895e8acb2b14b80a9abb6b325965616b97cca32a5aa.png ../../_images/14fb990dc8c600a600748a6c194973a97dfda29d09be1f70a8b95fd35ed65a3b.png ../../_images/c703aa88e630cf74fb755b6d13f58103bef57603841b922d9b3b58b64caf80a5.png ../../_images/cbd3a9b60fdf30a9b21c5149925111aaf7bdeb9b4941ee8efc193b037f4edbfe.png