Source code for pkpd.protocols.protocol_pkpd_simulate_drug_interactions

# **************************************************************************
# *
# * Authors:     Carlos Oscar Sorzano (info@kinestat.com)
# *
# * Kinestat Pharma
# *
# * This program is free software; you can redistribute it and/or modify
# * it under the terms of the GNU General Public License as published by
# * the Free Software Foundation; either version 2 of the License, or
# * (at your option) any later version.
# *
# * This program is distributed in the hope that it will be useful,
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# * GNU General Public License for more details.
# *
# * You should have received a copy of the GNU General Public License
# * along with this program; if not, write to the Free Software
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# * 02111-1307  USA
# *
# *  All comments concerning this program package may be sent to the
# *  e-mail address 'info@kinestat.com'
# *
# **************************************************************************

try:
    from itertools import izip
except ImportError:
    izip = zip
import numpy as np
import os

import pyworkflow.protocol.params as params
from .protocol_pkpd import ProtPKPD
from pyworkflow.protocol.constants import LEVEL_ADVANCED

[docs]class ProtPKPDSimulateDrugInteractions(ProtPKPD): """ Simulate drug interactions as recommended in EMA CHMP/EWP/560/95 \n Protocol created by http://www.kinestatpharma.com\n""" _label = 'simulate drug interactions' #--------------------------- DEFINE param functions -------------------------------------------- def _defineParams(self, form, fullForm=True): form.addSection('Basic models Liver') fromToLiver = form.addLine('Inhibitor range [I] at liver') fromToLiver.addParam('I0Liver', params.FloatParam, default=0, label='Min (ng/mL)') fromToLiver.addParam('IFLiver', params.FloatParam, default=10, label='Max (ng/mL)') form.addParam("MWLiver", params.FloatParam, default=1, label="Molecular weight (g/mol)") form.addParam("doReversibleLiver", params.BooleanParam, default=False, label="Reversible inhibition", help="Investigational drug likely to be a reversible inhibitor if R1=1+[I]/Ki>1.02") form.addParam('KiReversibleLiver', params.StringParam, default="5", label='Inhibition constant (Ki [uM])', condition="doReversibleLiver", help="Ki is the in vitro unbound reversible inhibition constant. Several constants can be given separated by space, e.g., 5 10") form.addParam("doTimeDependentLiver", params.BooleanParam, default=False, label="Time dependent inhibition", help="Investigational drug likely to be a time dependent inhibitor if R2=1+kinact/kdeg*[I]/([I]+Ki)>1.25") form.addParam("kinactLiver",params.StringParam, default="0.01", label='Max. inactivation rate (kinact [min^-1])', condition="doTimeDependentLiver", help="Maximal inactivation rate. Several constants can be given separated by space, e.g., 0.01 0.005") form.addParam("kdegLiver",params.StringParam, default="0.008", label='Apparent first order degradation rate (kdeg [min^-1])', condition="doTimeDependentLiver", help="kdeg is the apparent first order degradation rate constant of the affected enzyme. Several constants can be given separated by space, e.g., 0.01 0.005") form.addParam('KiTimeLiver', params.StringParam, default="5", label='Inhibition constant (Ki [uM])', condition="doTimeDependentLiver", help="KI is the inhibitor concentration which yields 50% of the maximum inactivation rate. Several constants can be given separated by space, e.g., 5 10") form.addParam("doInductionLiver", params.BooleanParam, default=False, label="Induction", help="Investigational drug likely to be a time dependent inhibitor if R2=1+kinact/kdeg*[I]/([I]+Ki)>1.25") form.addParam("dLiver",params.StringParam, default="1", label='Scaling factor', condition="doInductionLiver", help="Several constants can be given separated by space, e.g., 1 1.05") form.addParam("EmaxLiver",params.StringParam, default="1", label='Max. Induction effect (Emax)', condition="doInductionLiver", help="Several constants can be given separated by space, e.g., 1 2") form.addParam('EC50Liver', params.StringParam, default="5", label='Half Max. Effect Conc (EC50 [uM])', condition="doInductionLiver", help="EC50 is the concentration causing half maximal effect. Several constants can be given separated by space, e.g., 5 6") form.addSection('Basic models Gut') fromToGut1 = form.addLine('Basic model Gut Oral dose') fromToGut1.addParam('D0Gut', params.FloatParam, default=0, label='Min (mg)') fromToGut1.addParam('DFGut', params.FloatParam, default=11, label='Max (mg)') form.addParam("MWGut", params.FloatParam, default=1, label="Molecular weight (g/mol)") form.addParam("doReversibleGut", params.BooleanParam, default=False, label="Reversible inhibition", help="Investigational drug likely to be a reversible inhibitor if R1=1+[I]/Ki>1.02") form.addParam('KiReversibleGut', params.StringParam, default="5", label='Inhibition constant (Ki [uM])', condition="doReversibleGut", help="Ki is the in vitro unbound reversible inhibition constant. Several constants can be given separated by space, e.g., 5 10") form.addParam("doTimeDependentGut", params.BooleanParam, default=False, label="Time dependent inhibition", help="Investigational drug likely to be a time dependent inhibitor if R2=1+kinact/kdeg*[I]/([I]+Ki)>1.25") form.addParam("kinactGut",params.StringParam, default="0.01", label='Max. inactivation rate (kinact [min^-1])', condition="doTimeDependentGut", help="Maximal inactivation rate. Several constants can be given separated by space, e.g., 0.01 0.005") form.addParam("kdegGut",params.StringParam, default="0.008", label='Apparent first order degradation rate (kdeg [min^-1])', condition="doTimeDependentGut", help="kdeg is the apparent first order degradation rate constant of the affected enzyme. Several constants can be given separated by space, e.g., 0.01 0.005") form.addParam('KiTimeGut', params.StringParam, default="5", label='Inhibition constant (Ki [uM])', condition="doTimeDependentGut", help="KI is the inhibitor concentration which yields 50% of the maximum inactivation rate. Several constants can be given separated by space, e.g., 5 10") form.addParam("doInductionGut", params.BooleanParam, default=False, label="Induction", help="Investigational drug likely to be a time dependent inhibitor if R2=1+kinact/kdeg*[I]/([I]+Ki)>1.25") form.addParam("dGut",params.StringParam, default="1", label='Scaling factor', condition="doInductionGut", help="Several constants can be given separated by space, e.g., 1 1.05") form.addParam("EmaxGut",params.StringParam, default="1", label='Max. Induction effect (Emax)', condition="doInductionGut", help="Several constants can be given separated by space, e.g., 1 2") form.addParam('EC50Gut', params.StringParam, default="5", label='Half Max. Effect Conc (EC50 [uM])', condition="doInductionGut", help="EC50 is the concentration causing half maximal effect. Several constants can be given separated by space, e.g., 5 6") form.addSection('Static model') form.addParam("doStatic", params.BooleanParam, default=False, label="Static", help="Mechanistic static model, Fahmi2009") form.addParam('KiStatic', params.StringParam, default="5", label='Inhibition constant (Ki [uM])', condition="doStatic", help="Ki is the in vitro unbound reversible inhibition constant. Several constants can be given separated by space, e.g., 5 10") form.addParam("EmaxStatic",params.StringParam, default="1", label='Max. Induction effect (Emax)', condition="doStatic", help="Several constants can be given separated by space, e.g., 1 2") form.addParam('EC50Static', params.StringParam, default="5", label='Half Max. Effect Conc (EC50 [uM])', condition="doStatic", help="EC50 is the concentration causing half maximal effect. Several constants can be given separated by space, e.g., 5 6") form.addParam("kinactStatic",params.StringParam, default="0.01", label='Max. inactivation rate (kinact [min^-1])', condition="doStatic", help="Maximal inactivation rate. Several constants can be given separated by space, e.g., 0.01 0.005") form.addParam("dStatic",params.StringParam, default="1", label='Scaling factor', condition="doStatic", help="Scaling factor determined with linear regression of the control data set") form.addParam("MWStatic", params.FloatParam, default=1, label="Molecular weight (g/mol)", condition="doStatic") group1 = form.addGroup("Physiological", condition="doStatic") group1.addParam("doPhysiological", params.BooleanParam, default=False, label="Physiological model", help="The physiological model estimates the concentration at liver and gut from " "the input dose, the fraction available, the absorption rate, and the liver and gut blood flow." "The alternative to the physiological model needs a direct estimation of the gut and liver concentration of the inhibitor") fromToGut2 = group1.addLine('Static model Oral dose', condition="doPhysiological and doStatic") fromToGut2.addParam('D0Phys', params.FloatParam, default=0, label='Min (mg)', condition="doPhysiological and doStatic") fromToGut2.addParam('DFPhys', params.FloatParam, default=10, label='Max (mg)', condition="doPhysiological and doStatic") group1.addParam("Fa", params.FloatParam, default=1, label="Fraction absorbed", condition="doPhysiological and doStatic", help="Fa is the fraction absorbed after oral administration (a value of 1 can be used if data are not available)") group1.addParam("ka", params.FloatParam, default=0.1, label="1st order absorption rate", condition="doPhysiological and doStatic", help="ka is the first order absorption rate constant in vivo and a value of 0.1 min^-1 can be used if data are not available.") group1.addParam("Qen", params.FloatParam, default=18, label="Blood flow at enterocytes [L/h/70kg", condition="doPhysiological and doStatic", help="Qen is blood flow through the enterocytes (e.g., 18L/hr/70kg taken from Yang2007a)") group1.addParam("fub", params.FloatParam, default=1, label="Fraction unbound in plasma", condition="doPhysiological and doStatic") group1.addParam("Imaxb", params.FloatParam, default=1, label="Maximal total [I] conc.", condition="doPhysiological and doStatic", help="[I]max,b is the maximal total (free and bound) inhibitor concentration in the blood at steady state") group1.addParam("Qh", params.FloatParam, default=97, label="Blood flow at hepatocytes [L/h/70kg", condition="doPhysiological and doStatic", help="Qh is hepatic blood flow (e.g., 97L/hr/70kg taken from Yang et al., 2007b)") group2 = form.addGroup("Liver", condition="doStatic") group2.addParam("doStaticLiver", params.BooleanParam, default=False, label="Liver") group2.addParam("fm",params.FloatParam, default=0.1, label='fm', condition="doStaticLiver", help="fm is the fraction of systemic clearance of the substrate mediated by the enzyme that is subject to inhibition/induction") fromToH = group2.addLine('Inhibitor range Liver [Ih]', condition="doStaticLiver and not doPhysiological", help='[Ih] is [I]liver = Molar Dose/250mL.') fromToH.addParam('Ih0', params.FloatParam, default=0, condition="doStaticLiver and not doPhysiological", label='Min (uM)') fromToH.addParam('IhF', params.FloatParam, default=10, condition="doStaticLiver and not doPhysiological", label='Max (uM)') group2.addParam("kdeghStatic",params.StringParam, default="0.008", label='Apparent first order degradation rate Liver (kdeg [min^-1])', condition="doStaticLiver", help="kdeg,h is the apparent first order degradation rate constant of the affected enzyme at the liver. Several constants can be given separated by space, e.g., 0.01 0.005") group3 = form.addGroup("Gut", condition="doStatic") group3.addParam("doStaticGut", params.BooleanParam, default=False, label="Gut") group3.addParam("fg",params.FloatParam, default=0.1, label='fg', condition="doStaticGut", help="fg is the fraction available after intestinal metabolism") fromToG = group3.addLine('Inhibitor range Gut [Ig]', condition="doStaticGut and not doPhysiological", help='[Ig] is [I]gut = Molar Dose/250mL.') fromToG.addParam('Ig0', params.FloatParam, default=0, condition="doStaticGut and not doPhysiological", label='Min (uM)') fromToG.addParam('IgF', params.FloatParam, default=10, condition="doStaticGut and not doPhysiological", label='Max (uM)') group3.addParam("kdeggStatic",params.StringParam, default="0.008", label='Apparent first order degradation rate Gut (kdeg [min^-1])', condition="doStaticGut", help="kdeg,g is the apparent first order degradation rate constant of the affected enzyme at the gut. Several constants can be given separated by space, e.g., 0.01 0.005") form.addSection('Transporters') form.addParam("doTransporterGut", params.BooleanParam, default=False, label="Gut transporter") fromToGut3 = form.addLine('Transporters Oral dose', condition="doTransporterGut") fromToGut3.addParam('D0TransporterGut', params.FloatParam, default=0, label='Min (mg)') fromToGut3.addParam('DFTransporterGut', params.FloatParam, default=10, label='Max (mg)') form.addParam("MWTransporterGut", params.FloatParam, default=1, label="Molecular weight (g/mol)", condition="doTransporterGut") form.addParam('KiTransporterGut', params.StringParam, default="5", label='Inhibition constant (Ki [uM])', condition="doTransporterGut", help="Ki is the in vitro unbound reversible inhibition constant. Several constants can be given separated by space, e.g., 5 10") form.addParam("doTransporterLiver", params.BooleanParam, default=False, label="Liver transporter") fromToGut4 = form.addLine('Unbound hepatic inlet [I]', condition="doTransporterLiver") fromToGut4.addParam('I0TransporterLiver', params.FloatParam, default=0, label='Min (uM)') fromToGut4.addParam('IFTransporterLiver', params.FloatParam, default=10, label='Max (uM)') form.addParam('KiTransporterLiver', params.StringParam, default="5", label='Inhibition constant (Ki [uM])', condition="doTransporterLiver", help="Ki is the in vitro unbound reversible inhibition constant. Several constants can be given separated by space, e.g., 5 10") form.addParam("doTransporterRenal", params.BooleanParam, default=False, label="Renal transporter") fromToGut5 = form.addLine('Unbound [Imax]', condition="doTransporterRenal") fromToGut5.addParam('I0TransporterRenal', params.FloatParam, default=0, label='Min (uM)') fromToGut5.addParam('IFTransporterRenal', params.FloatParam, default=10, label='Max (uM)') form.addParam('KiTransporterRenal', params.StringParam, default="5", label='Inhibition constant (Ki [uM])', condition="doTransporterRenal", help="Ki is the in vitro unbound reversible inhibition constant. Several constants can be given separated by space, e.g., 5 10") #--------------------------- INSERT steps functions -------------------------------------------- def _insertAllSteps(self): self._insertFunctionStep('runSimulate') #--------------------------- STEPS functions --------------------------------------------
[docs] def parseList(self, strList): return [float(v) for v in strList.split(' ')]
[docs] def runSimulate(self): R = [] Rlegends = [] Type = [] if self.doReversibleLiver: I = np.arange(self.I0Liver.get(), self.IFLiver.get(), (self.IFLiver.get()-self.I0Liver.get())/100) # I [ng/mL] I /= self.MWLiver.get() # I [uM] KiList = self.parseList(self.KiReversibleLiver.get()) for Ki in KiList: legend="Liver Rev. Inh. Ki=%f [uM]"%Ki print("Simulating %s"%legend) R.append((I,1+I/Ki)) Rlegends.append(legend) Type.append('ReversibleLiver') if self.doReversibleGut: D = np.arange(self.D0Gut.get(), self.DFGut.get(), (self.DFGut.get()-self.D0Gut.get())/100) I = D/(250*self.MWGut.get())*1e6 # I [uM] KiList = self.parseList(self.KiReversibleGut.get()) for Ki in KiList: legend="Gut Rev. Inh. Ki=%f [uM]"%Ki print("Simulating %s"%legend) R.append((I,1+I/Ki)) Rlegends.append(legend) Type.append('ReversibleGut') if self.doTimeDependentLiver: I = np.arange(self.I0Liver.get(), self.IFLiver.get(), (self.IFLiver.get()-self.I0Liver.get())/100) # I [ng/mL] I /= self.MWLiver.get() # I [uM] KiList = self.parseList(self.KiReversibleLiver.get()) kdegList = self.parseList(self.kdegLiver.get()) kinactList = self.parseList(self.kinactLiver.get()) for Ki in KiList: for kdeg in kdegList: for kinact in kinactList: legend="Liver Time Dep. Inh. Ki=%f [uM], kdeg=%f [min^-1], kinact=%f [min^-1]"%(Ki,kdeg,kinact) print("Simulating %s"%legend) R.append((I,1+kinact/kdeg*I/(Ki+I))) Rlegends.append(legend) Type.append('TimeDependentLiver') if self.doTimeDependentGut: D = np.arange(self.D0Gut.get(), self.DFGut.get(), (self.DFGut.get()-self.D0Gut.get())/100) I = D/(250*self.MWGut.get())*1e6 # I [uM] KiList = self.parseList(self.KiReversibleGut.get()) kdegList = self.parseList(self.kdegGut.get()) kinactList = self.parseList(self.kinactGut.get()) for Ki in KiList: for kdeg in kdegList: for kinact in kinactList: legend="Gut Time Dep. Inh. Ki=%f [uM], kdeg=%f [min^-1], kinact=%f [min^-1]"%(Ki,kdeg,kinact) print("Simulating %s"%legend) R.append((I,1+kinact/kdeg*I/(Ki+I))) Rlegends.append(legend) Type.append('TimeDependentGut') if self.doInductionLiver: I = np.arange(self.I0Liver.get(), self.IFLiver.get(), (self.IFLiver.get()-self.I0Liver.get())/100) # I [ng/mL] I /= self.MWLiver.get() # I [uM] EC50List = self.parseList(self.EC50Liver.get()) EmaxList = self.parseList(self.EmaxLiver.get()) dList = self.parseList(self.dLiver.get()) for EC50 in EC50List: for Emax in EmaxList: for d in dList: legend="Liver Induction EC50=%f [uM], Emax=%f, d=%f"%(EC50,Emax,d) print("Simulating %s"%legend) R.append((I,1/(1+d*Emax*I/(EC50+I)))) Rlegends.append(legend) Type.append('InductionLiver') if self.doInductionGut: D = np.arange(self.D0Gut.get(), self.DFGut.get(), (self.DFGut.get()-self.D0Gut.get())/100) I = D/(250*self.MWGut.get())*1e6 # I [uM] EC50List = self.parseList(self.EC50Gut.get()) EmaxList = self.parseList(self.EmaxGut.get()) dList = self.parseList(self.dGut.get()) for EC50 in EC50List: for Emax in EmaxList: for d in dList: legend="Induction EC50=%f [uM], Emax=%f, d=%f"%(EC50,Emax,d) print("Simulating %s"%legend) R.append((I,1/(1+d*Emax*I/(EC50+I)))) Rlegends.append(legend) Type.append('InductionGut') if self.doStatic: KiList = self.parseList(self.KiStatic.get()) EmaxList = self.parseList(self.EmaxStatic.get()) EC50List = self.parseList(self.EC50Static.get()) kinactList = self.parseList(self.kinactStatic.get()) dList = self.parseList(self.dStatic.get()) if self.doStaticLiver: kdeghList = self.parseList(self.kdeghStatic.get()) fm=self.fm.get() if self.doPhysiological: D = np.arange(self.D0Phys.get(), self.DFPhys.get(), (self.DFPhys.get()-self.D0Phys.get())/100) Ih = self.fub.get()*(self.Imaxb.get()+self.Fa.get()*self.ka.get()*D/self.Qh.get()) else: Ih = np.arange(self.Ih0.get(), self.IhF.get(), (self.IhF.get()-self.Ih0.get())/100) Ih/= self.MWStatic.get() for Ki in KiList: for Emax in EmaxList: for EC50 in EC50List: for kinact in kinactList: for d in dList: for kdegh in kdeghList: Ah = kdegh/(kdegh+Ih*kinact/(Ih+Ki)) Bh = 1+d*Emax*Ih/(Ih+EC50) Ch = 1/(1+Ih/Ki) legend="Static Liver Ki=%f [uM], EC50=%f [uM], Emax=%f, kinact=%f [min^-1], d=%f, kdegh=%f [min^-1]"%\ (Ki,EC50,Emax,kinact,d,kdegh) print("Simulating %s"%legend) R.append((Ih,1/(Ah*Bh*Ch*fm+(1-fm)))) Rlegends.append(legend) Type.append('StaticLiver') if self.doStaticGut: kdeggList = self.parseList(self.kdeggStatic.get()) if self.doPhysiological: D = np.arange(self.D0Phys.get(), self.DFPhys.get(), (self.DFPhys.get()-self.D0Phys.get())/100) Ig = self.Fa.get()*self.ka.get()*D/self.Qen.get() else: Ig = np.arange(self.Ig0.get(), self.IgF.get(), (self.IgF.get()-self.Ig0.get())/100) Ig/= self.MWStatic.get() fg=self.fg.get() for Ki in KiList: for Emax in EmaxList: for EC50 in EC50List: for kinact in kinactList: for d in dList: for kdegg in kdeggList: Ag = kdegg/(kdegg+Ig*kinact/(Ig+Ki)) Bg = 1+d*Emax*Ig/(Ig+EC50) Cg = 1/(1+Ig/Ki) legend="Static Gut Ki=%f [uM], EC50=%f [uM], Emax=%f, kinact=%f [min^-1], d=%f, kdegg=%f [min^-1]"%\ (Ki,EC50,Emax,kinact,d,kdegg) print("Simulating %s"%legend) R.append((Ig,1/(Ag*Bg*Cg*fg+(1-fg)))) Rlegends.append(legend) Type.append('StaticGut') if self.doTransporterGut: D = np.arange(self.D0TransporterGut.get(), self.DFTransporterGut.get(), (self.DFTransporterGut.get()-self.D0TransporterGut.get())/100) I = D/(250*self.MWTransporterGut.get())*1e6 # I [uM] KiList = self.parseList(self.KiTransporterGut.get()) for Ki in KiList: legend="Gut Transporter Ki=%f [uM]"%Ki print("Simulating %s"%legend) R.append((I,1+I/Ki)) Rlegends.append(legend) Type.append('TransporterGut') if self.doTransporterLiver: I = np.arange(self.I0TransporterLiver.get(), self.IFTransporterLiver.get(), (self.IFTransporterLiver.get()-self.I0TransporterLiver.get())/100) KiList = self.parseList(self.KiTransporterLiver.get()) for Ki in KiList: legend="Liver Transporter Ki=%f [uM]"%Ki print("Simulating %s"%legend) R.append((I,1+I/Ki)) Rlegends.append(legend) Type.append('TransporterLiver') if self.doTransporterRenal: I = np.arange(self.I0TransporterRenal.get(), self.IFTransporterRenal.get(), (self.IFTransporterRenal.get()-self.I0TransporterRenal.get())/100) KiList = self.parseList(self.KiTransporterRenal.get()) for Ki in KiList: legend="Renal Transporter Ki=%f [uM]"%Ki print("Simulating %s"%legend) R.append((I,1+I/Ki)) Rlegends.append(legend) Type.append('TransporterRenal') if len(R)>0: fh=open(self._getPath("profiles.txt"),'w') fhSummary=open(self._getPath("summary.txt"),"w") for toPlot, legend, plotType in izip(R,Rlegends,Type): fh.write(plotType+"::"+legend+"\n") fhSummary.write("Simulated %s:: %s\n"%(plotType,legend)) if len(toPlot)==2: I, Ri = toPlot for n in range(I.size): fh.write("%f %f\n"%(I[n],Ri[n])) else: Ig, Ih, Ri = toPlot for n in range(Ig.size): fh.write("%f %f %f\n"%(Ig[n],Ih[n],Ri[n])) fh.write("\n") fh.close() fhSummary.close()
#--------------------------- INFO functions -------------------------------------------- def _summary(self): msg=[] if os.path.exists(self._getPath("summary.txt")): fh=open(self._getPath("summary.txt")) for line in fh: msg.append(line.strip()) fh.close() return msg def _citations(self): retval = ['CHMPEWP56095','Fahmi2009'] # if self.doPhysiological: # retval+=['Yang2007a','Yang2007b','Rostami2004'] return retval def _methods(self): retval = [] if self.doTransporterGut: retval.append("We studied the inhibition of an intestinal transporter with a dose between %f and %f [mg] " "of a compound whose molecular weight was %f [g/mol]. The inhibition constant of the transporter " "was assumed to be %s [uM]"%(self.D0TransporterGut,self.DFTransporterGut,self.MWTransporterGut,self.KiTransporterGut)) if self.doTransporterLiver: retval.append("We studied the inhibition of a hepatic transporter with a unbound hepatic concentration of the inhibitor at the liver inlet between %f and %f [uM]. " "The inhibition constant of the transporter " "was assumed to be %s [uM]"%(self.I0TransporterLiver,self.IFTransporterLiver,self.KiTransporterLiver)) if self.doTransporterRenal: retval.append("We studied the inhibition of a renal transporter with a unbound hepatic concentration of the inhibitor at the liver inlet between %f and %f [uM]. " "The inhibition constant of the transporter " "was assumed to be %s [uM]"%(self.I0TransporterRenal,self.IFTransporterRenal,self.KiTransporterRenal)) return retval