123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- import numpy as np
- import matplotlib.pyplot as plt
- import os
- import json
- import cModel
- import runSolver
- import importlib
- importlib.reload(cModel)
- importlib.reload(runSolver)
- # Load data
- def load_data(modelName, jobDir):
- Q = runSolver.loadSolutionFromDir(jobDir, True)
- return Q
- def print_lut_keys(Q):
- lut = Q['lut']
- # Debug information - removed print statements
- # print("Available keys in lut:")
- # for key in lut:
- # print(f"Key: {key}, Index: {lut[key]}")
- def plot_rbc_to_plasma_ratio(Q):
- lut = Q['lut']
-
- # Debug information - removed print statements
- # print("Available keys in lut:", lut.keys())
-
- # Example keys based on available compartments
- red_blood_cells_key = 'arterial'
- plasma_key = 'venous'
-
- if red_blood_cells_key not in lut or plasma_key not in lut:
- raise KeyError(f"Expected keys '{red_blood_cells_key}' or '{plasma_key}' are missing in 'lut'.")
-
- fy1 = Q['sol'][:, lut[red_blood_cells_key]]
- fy = Q['sol'][:, lut[plasma_key]]
- qy = fy1[1:] / fy[1:]
- t = Q['t']
-
- plt.plot(t[1:], qy)
- plt.xlabel('Time')
- plt.ylabel('RBC/Plasma Ratio')
- plt.title('RBC to Plasma Ratio Over Time')
- plt.show()
- # Parse model and retrieve parameters
- def parse_and_retrieve_parameters(modelFile, parameterFile):
- model = cModel.model()
- model.parse(modelFile, parameterFile)
- # Debug information - removed print statement
- # print('w(oI) {}'.format(model.getWeight('oralIngestion')))
- return model
- def calculate_derivatives_weights(model, sOut, lut, compartment):
- """
- Calculate derivatives and weights for a specific compartment and print sorted results.
- Parameters:
- - model: An instance of the model object
- - sOut: Simulation output data
- - lut: Look-up table (LUT) of compartments
- - compartment: The compartment for which to calculate derivatives and weights
- """
- try:
- # Compute derivatives for the specified compartment
- d = model.getDerivatives(sOut, lut[compartment])
- print(sOut)
- print(lut[compartment])
- # Retrieve the LUT for parameter indices and weights
- lutSE = model.lutSE # Accessing lutSE as an attribute
- w = model.getWeights(lutSE)
- print(lutSE)
- print(w)
- print(d)
- # Ensure the lengths of arrays match
- if len(lutSE) != len(d) or len(lutSE) != len(w):
- raise ValueError("Mismatch in lengths of LUT, derivatives, or weights.")
-
- # Calculate weighted derivatives
- s = {x: d[lutSE[x]] * w[lutSE[x]] for x in lutSE}
- s = dict(sorted(s.items(), key=lambda item: item[1], reverse=True))
- # Print the results
- print(f"Top 10 derivatives and weights for compartment '{compartment}':")
- for p in list(s)[:10]:
- j = lutSE[p]
- print(f'{p}: Weighted Derivative = {d[j] * w[j]:.2g} (Derivative = {d[j]:.2g}, Weight = {w[j]:.2g})')
-
- except AttributeError as e:
- print(f"Error accessing model methods or attributes: {e}")
-
- except ValueError as e:
- print(f"Value error: {e}")
- def retrieve_and_calculate_total_mass(model, setup):
- tscale = runSolver.getScale(setup)
-
- # Attempt to retrieve parameters with attribute checking
- blood_to_plasma_pc_scale = getattr(model, 'bloodToPlasmaPCscale', None)
- blood_volume = getattr(model, 'bloodVolume', None)
-
- # Print debug information
- if blood_to_plasma_pc_scale is not None:
- print(f'Blood to Plasma PC Scale: {blood_to_plasma_pc_scale}')
- else:
- print('Blood to Plasma PC Scale parameter is missing.')
-
- if blood_volume is not None:
- print(f'Blood Volume: {blood_volume}')
- else:
- print('Blood Volume parameter is missing.')
-
- return blood_to_plasma_pc_scale, blood_volume
- def main(): #PAZI MODEL in PArameter File morta bit ista!!!
- # Define job directory and model files
- jobDir = os.path.join(os.path.expanduser('~'), 'Documents', 'Sola', 'IJS', 'PBPK_public', 'cDiazepam1_IVP')
- modelFile = os.path.join(os.path.expanduser('~'), 'Documents', 'Sola', 'IJS', 'PBPK_public', 'models', 'cDiazepam.json')
- parameterFile = os.path.join(os.path.expanduser('~'), 'Documents', 'Sola', 'IJS', 'PBPK_public', 'models', 'cDiazepam_parameters.json')
-
- # Load data
- Q = load_data('cDiazepam1_IVP', jobDir)
-
- # Plot RBC to Plasma Ratio
- plot_rbc_to_plasma_ratio(Q)
-
- # Parse model and retrieve parameters
- model = parse_and_retrieve_parameters(modelFile, parameterFile)
-
- # Calculate derivatives and weights for 'kidney'
- compartment = 'kidney'
- calculate_derivatives_weights(model, Q['sOut'], Q['lut'], compartment)
-
- # Retrieve model and calculate total mass
- setup = Q['setup']
- retrieve_and_calculate_total_mass(model, setup)
- if __name__ == "__main__":
- main()
|