Elena’s paper

Python
Published

July 23, 2024

Elena’s paper

Started to play with Elena’s paper: Link to the paper

image.png

image.png
import pandas as pd
import plotnine as p9
import numpy as np
from scipy.integrate import odeint
from plotnine import ggplot, aes, geom_point, geom_line, facet_wrap
p9.theme_set(p9.theme_bw())

def dict_to_tuple(x):
    return tuple(x.values())
def get_p_and_y0(df, d = 1, i = 1):
    pp = df.iloc[i].to_dict()
    p = {key: pp[key] for key in ['Pz', 'Pyx', 'Pxy', 'TKI', 'Kz', 'Ky', 'Py', 'm', 'rz', 'a']}
    p['d'] = d
    y_0 = {key: pp[key] for key in ['X(0)', 'Y(0)', 'Z(0)']}
    return p, y_0


params_df = pd.read_csv('ParameterSets.csv')

p, y0 = get_p_and_y0(params_df, 1)
params_df
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Cell In[2], line 9
      5     y_0 = {key: pp[key] for key in ['X(0)', 'Y(0)', 'Z(0)']}
      6     return p, y_0
----> 9 params_df = pd.read_csv('ParameterSets.csv')
     11 p, y0 = get_p_and_y0(params_df, 1)
     12 params_df

File ~/Library/r-miniconda-arm64/envs/sbloggel/lib/python3.11/site-packages/pandas/io/parsers/readers.py:912, in read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)
    899 kwds_defaults = _refine_defaults_read(
    900     dialect,
    901     delimiter,
   (...)
    908     dtype_backend=dtype_backend,
    909 )
    910 kwds.update(kwds_defaults)
--> 912 return _read(filepath_or_buffer, kwds)

File ~/Library/r-miniconda-arm64/envs/sbloggel/lib/python3.11/site-packages/pandas/io/parsers/readers.py:577, in _read(filepath_or_buffer, kwds)
    574 _validate_names(kwds.get("names", None))
    576 # Create the parser.
--> 577 parser = TextFileReader(filepath_or_buffer, **kwds)
    579 if chunksize or iterator:
    580     return parser

File ~/Library/r-miniconda-arm64/envs/sbloggel/lib/python3.11/site-packages/pandas/io/parsers/readers.py:1407, in TextFileReader.__init__(self, f, engine, **kwds)
   1404     self.options["has_index_names"] = kwds["has_index_names"]
   1406 self.handles: IOHandles | None = None
-> 1407 self._engine = self._make_engine(f, self.engine)

File ~/Library/r-miniconda-arm64/envs/sbloggel/lib/python3.11/site-packages/pandas/io/parsers/readers.py:1661, in TextFileReader._make_engine(self, f, engine)
   1659     if "b" not in mode:
   1660         mode += "b"
-> 1661 self.handles = get_handle(
   1662     f,
   1663     mode,
   1664     encoding=self.options.get("encoding", None),
   1665     compression=self.options.get("compression", None),
   1666     memory_map=self.options.get("memory_map", False),
   1667     is_text=is_text,
   1668     errors=self.options.get("encoding_errors", "strict"),
   1669     storage_options=self.options.get("storage_options", None),
   1670 )
   1671 assert self.handles is not None
   1672 f = self.handles.handle

File ~/Library/r-miniconda-arm64/envs/sbloggel/lib/python3.11/site-packages/pandas/io/common.py:859, in get_handle(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)
    854 elif isinstance(handle, str):
    855     # Check whether the filename is to be opened in binary mode.
    856     # Binary mode does not support 'encoding' and 'newline'.
    857     if ioargs.encoding and "b" not in ioargs.mode:
    858         # Encoding
--> 859         handle = open(
    860             handle,
    861             ioargs.mode,
    862             encoding=ioargs.encoding,
    863             errors=errors,
    864             newline="",
    865         )
    866     else:
    867         # Binary mode
    868         handle = open(handle, ioargs.mode)

FileNotFoundError: [Errno 2] No such file or directory: 'ParameterSets.csv'
def cml_model(y, t, Pz, Pyx, Pxy, TKI, Kz, Ky, Py, m, rz, a, d):
    X, Y, Z = y
    dX = Pyx * Y - Pxy * X
    dY = Pxy * X - Pyx * Y + Py * (1 - Y / Ky) * Y - m * Z * Y - d * TKI * Y
    dZ = rz + Z * Pz * (Y / (Kz ** 2 + Y ** 2)) - a * Z
    return (dX, dY, dZ)
ii = tuple(range(0, len(params_df) - 1))
ii = tuple(range(0, 9))

t = np.arange(0.0, 100, 0.01)
result_list = []

for i in ii:
    p, y0 = get_p_and_y0(params_df, i = i)
    result = odeint(cml_model, 
                    dict_to_tuple(y0), 
                    t,
                    args=dict_to_tuple(p))
    df = pd.DataFrame(result, columns = ['X', 'Y', 'Z'])
    df = df.assign(t = t)
    df['PatID'] = i
    result_list.append(df)

result = pd.concat(result_list, ignore_index=True)
result['PatID'] = result['PatID'].astype('category')
result_long = pd.melt(result, 
                      id_vars = ['t', 'PatID'], 
                      value_vars = ['X', 'Y', 'Z'],
                      value_name = 'cell_count')
(
    ggplot(result_long, aes('t', 'cell_count', color = 'variable')) + 
    geom_line() + 
    facet_wrap('PatID')+ p9.scale_y_continuous(trans='log10') +
    p9.theme(figure_size=(12,9)) +
    p9.labs(y='Cell count', color = 'Compartment')
)

(
    ggplot(result, aes('t', 'Y', color = 'PatID')) + 
    geom_line() + p9.scale_y_continuous(trans='log10')
)

image.png
def LRATIO(Y, KY=1e6):
    return Y / (Y + 2 * (KY - Y))

result['LRATIO'] = LRATIO(result["Y"])

(
    ggplot(result, aes('t', 'LRATIO', color='PatID')) + 
    geom_line() + p9.scale_y_continuous(trans='log10', 
                                        breaks=(1, 1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6), 
                                        labels=('MR0 (100%)', 'MR1 (10%)', 'MR2 (1%)', 'MR3 (0.1%)', 'MR4 (0.01%)', 'MR5 (0.001%)', 'MR6 (0.0001)')) +
    p9.theme(figure_size=(10, 7))
)