Jump to content


Photo

Enterohepatic Recirculation depend on both time and concentration,


  • Please log in to reply
6 replies to this topic

#1 0521

0521

    Advanced Member

  • Members
  • PipPipPip
  • 46 posts

Posted 12 April 2023 - 07:47 AM

Hi support,
 
I had a problem describing a model structure using PML. The problem is the inability to achieve recirculation that depend on both time and concentration (similar to the Enterohepatic Recirculation).
 
In order to understand my requirements,  let's assume a Enterohepatic Recirculation mechanism.
 
Factors affecting Enterohepatic Recirculation:
Enterohepatic Recirculation is to occur when the drug concentration is above a threshold C_cut.
For a period of time after biliary excretion, drugs accumulate in the bile, but biliary excretion does not occur again.(Refractory period)
 
Drug background description:
The drug is administered orally, drugs exist in the body have "Enterohepatic Recirculation" phenomenon. 
The Enterohepatic Recirculation stops until the concentration below a certain level(C_cut). 
There are multiple dose levels: A, B, C, and multiple administration frequencies: BID, QD.
 
Model structure:
The mechanism by which drugs except for Enterohepatic Recirculation can be described by the following model:
Absorption: first-order rate absorption with absorption delay
Distribution: one compartment
Elimination: first order rate elimination
Hepato-intestinal circulation mechanism:
1. At concentrations higher than C_cut, biliary excretion events are triggered
2. Biliary excretion events do not occur again during a Duration after the event occurs.
3. There is a delayed Tlag between the occurrence of excretion events and the arrival of bile in the intestine
The PML realization of biliary excretion events:
sequence{
 while(C<C_cut){
   sleep(Tlag)
   A_intestinal = A_intestinal+A_bile
   sleep(Duration-Tlag)
 }
}
 
Problem 
The above code can work properly after a single dose("Initial Estimates"work, "Excute" not work), but in multiple dosing scenarios, the code does not work properly and does not perform biliary excretion as expected after a second dose.
I checked the "Phoenix Modeling Language Reference Guide" and it was mentioned that sequence statement only works when it stops and until a sleep statement isencountered. This means that Once the C < C_cut the sequence statement is invalidated, even if C is larger than the C_cut sequence again, it will not wake up the sequence.
 
I noticed that it was mentioned in the help that only reset can wake up and re-execute sequence statements, but the current model does not support me to use reset, because I also used sequence to set the initial value of other variables. So It is not appropriate for these variables to be set to the initial value again after multiple dosing.
 
Do you have any solutions that can help me achieve the model I want?
 
Sincerely,

0521



#2 bwendt@certara.com

bwendt@certara.com

    Advanced Member

  • Administrators
  • 282 posts

Posted 12 April 2023 - 09:04 AM

Hi,

 

I would suggest using a condition statement rather than a sequence statement, since your recycling is based on a condiiton that the concentration is below a certain value. e.g.

 

Rate = Switch / Duration
Switch= (C<C_cut ? 1:0)
 
Let me know if this is not clear.
 
Bernd


#3 0521

0521

    Advanced Member

  • Members
  • PipPipPip
  • 46 posts

Posted 12 April 2023 - 09:18 AM

 

Hi,

 

I would suggest using a condition statement rather than a sequence statement, since your recycling is based on a condiiton that the concentration is below a certain value. e.g.

 

Rate = Switch / Duration
Switch= (C<C_cut ? 1:0)
 
Let me know if this is not clear.
 
Bernd

 

Hi Bernd,

 

1.

Your solution can only solve the problem of concentration dependence, not solve time dependence.

 

"2. Biliary excretion events do not occur again during a Duration after the event occurs."

 

There must be a time interval between biliary excretions.

 

 

2.

I'm assuming here that biliary excretion is similar to intravenous administration, not similar to extravascular administration ( first-order rate)

 

 

Sincerely,
0521


#4 smouksassi1

smouksassi1

    Advanced Member

  • Members
  • PipPipPip
  • 231 posts
  • LocationMontreal

Posted 12 April 2023 - 09:18 AM

you can use while with time  and add Switch= (C<C_cut ? 1:0) as a condition below it

never tested in your case here is code from an old project that had a gall bladder switch

 

test(){
 
double(Gbr) #Define a gall bladder switch, “Gbr”, as a double
                double(i) #Define a gall bladder switch, “Gbr”, as a double
deriv(A1 = - (Cl * C) + (Aa * Ka)- (Cl2 * (C - C2))- (A1 * K1g) + (Ag * Kag))
urinecpt(A0 = (Cl * C))
deriv(Aa = - (Aa * Ka))
deriv(A2 = (Cl2 * (C - C2)))
deriv(Abile = (A1 * K1g)- (Abile * Rate))
deriv(Ag = (Abile * Rate)- (Ag * Kag))
C = A1 / V
dosepoint(Aa)
C2 = A2 / V2
Rate = Gbr/treflux #The rate from the bile to gut compartment
error(CEps = 0.304204)
observe(CObs = C * (1 + CEps))
 
sequence{
sleep(Initial);
                i=0;
                while(i<24) {
                                i = i + 1;
                                Gbr=0; #Gall bladder is off at time=0
                                sleep(tcycle-treflux); #
                                Gbr=1; #Gall bladder is on and drug is recycled into gut
                                sleep(treflux); #Skip to the end of the second peak
                }
} #Close the sequence statement
stparm(V = tvV)
stparm(Cl = tvCl)
stparm(Ka = tvKa)
stparm(V2 = tvV2)
stparm(Cl2 = tvCl2)
stparm(K1g = tvK1g)
stparm(Kag = tvKag)
stparm(Initial = tvInitial)
stparm(tcycle = tvtcycle) 
                stparm(treflux = tvtreflux) 
//stparm(Tau = tvTau)
fixef(tvV = c(0, 8.8037, ))
fixef(tvCl = c(0, 20.9016, ))
fixef(tvKa = c(0, 2.0153, ))
fixef(tvV2 = c(0, 128.096, ))
fixef(tvCl2 = c(0, 2.03027, ))
fixef(tvInitial = c(0, 3,))
fixef(tvtcycle = c(0, 24, ))
fixef(tvtreflux = c(0, 0.149672, ))
 
fixef(tvK1g = c(0, 2.52128, )) 
fixef(tvKag = c(0, 8.45759, ))
 
//fixef(tvTau = c(0, 7.20614, ))
ranef(diag(nCl, nKa, nV, nV2, nCl2, nEC50, nEmax, nK1g, nKag) = c(1, 1, 1, 1, 1, 1, 1, 1, 1))
}


#5 0521

0521

    Advanced Member

  • Members
  • PipPipPip
  • 46 posts

Posted 12 April 2023 - 09:34 AM

 

you can use while with time  and add Switch= (C<C_cut ? 1:0) as a condition below it

never tested in your case here is code from an old project that had a gall bladder switch

 

test(){
 
double(Gbr) #Define a gall bladder switch, “Gbr”, as a double
                double(i) #Define a gall bladder switch, “Gbr”, as a double
deriv(A1 = - (Cl * C) + (Aa * Ka)- (Cl2 * (C - C2))- (A1 * K1g) + (Ag * Kag))
urinecpt(A0 = (Cl * C))
deriv(Aa = - (Aa * Ka))
deriv(A2 = (Cl2 * (C - C2)))
deriv(Abile = (A1 * K1g)- (Abile * Rate))
deriv(Ag = (Abile * Rate)- (Ag * Kag))
C = A1 / V
dosepoint(Aa)
C2 = A2 / V2
Rate = Gbr/treflux #The rate from the bile to gut compartment
error(CEps = 0.304204)
observe(CObs = C * (1 + CEps))
 
sequence{
sleep(Initial);
                i=0;
                while(i<24) {
                                i = i + 1;
                                Gbr=0; #Gall bladder is off at time=0
                                sleep(tcycle-treflux); #
                                Gbr=1; #Gall bladder is on and drug is recycled into gut
                                sleep(treflux); #Skip to the end of the second peak
                }
} #Close the sequence statement
stparm(V = tvV)
stparm(Cl = tvCl)
stparm(Ka = tvKa)
stparm(V2 = tvV2)
stparm(Cl2 = tvCl2)
stparm(K1g = tvK1g)
stparm(Kag = tvKag)
stparm(Initial = tvInitial)
stparm(tcycle = tvtcycle) 
                stparm(treflux = tvtreflux) 
//stparm(Tau = tvTau)
fixef(tvV = c(0, 8.8037, ))
fixef(tvCl = c(0, 20.9016, ))
fixef(tvKa = c(0, 2.0153, ))
fixef(tvV2 = c(0, 128.096, ))
fixef(tvCl2 = c(0, 2.03027, ))
fixef(tvInitial = c(0, 3,))
fixef(tvtcycle = c(0, 24, ))
fixef(tvtreflux = c(0, 0.149672, ))
 
fixef(tvK1g = c(0, 2.52128, )) 
fixef(tvKag = c(0, 8.45759, ))
 
//fixef(tvTau = c(0, 7.20614, ))
ranef(diag(nCl, nKa, nV, nV2, nCl2, nEC50, nEmax, nK1g, nKag) = c(1, 1, 1, 1, 1, 1, 1, 1, 1))
}

 

 

Hi smouksassi1,

 

I have read and referred to this case carefully, but your solution does not solve the following two points:

 

1.

The Enterohepatic Recirculation will stops when the concentration below a certain level(C_cut). And restart When C>C_cut.

 

Consider the following scenario:
Dosing interval =24h
Bile excretion interval =10h
C> C_cut at 0~12h
 
So,
The code above causes the excretion event to occur at the following times:
0,10,30
 
However, the desired excretion event occurs at the following moments:
0,10,24
 
2.
I'm assuming here that biliary excretion is similar to intravenous administration, not similar to extravascular administration ( first-order rate)
 
Sincerely,
0521

Edited by 0521, 12 April 2023 - 09:34 AM.


#6 0521

0521

    Advanced Member

  • Members
  • PipPipPip
  • 46 posts

Posted 18 April 2023 - 04:58 AM

Hi Support,
 
I have an approximate implementation:
10 h is a cycle, the excretion duration is 0.5 h, the excretion rate is 0-order rate, 100 doses are excreted each time.
 
Drug administration regimen
Time,AMT
0,100
24,100
 
PML code
test(){
	deriv(Aa = - Ka * Aa + X)#0-order excreted 
	deriv(A1 = Ka * Aa - Cl * C)
	dosepoint(Aa,doafter={T=C>C_cut?T:0})
	deriv(T = 1)
	Y=fmod(T,10)#cycle II = 10h
	X=Y<0.5?(C>C_cut?200:0):0#if C>Cut and T not >0.5 then excret
	fixef(C_cut = c(, 2, ))# C cut off point
	
	C = A1 / V
	error(CEps = 1)
	observe(CObs = C + CEps)
	stparm(Ka = tvKa)
	stparm(V = tvV)
	stparm(Cl = tvCl)
	fixef(tvKa = c(, 1, ))
	fixef(tvV = c(, 1, ))
	fixef(tvCl = c(, 0.5, ))
}

if C_cut=2 then the desired excretion event occurs at the following moments:0,10,24

 

 

plot1.png

plot2.png

 

if C_cut=1 then the desired excretion event occurs at the following moments:0,10,30

 

 

plot3.png

plot4.png

 

But:

There are two problems with the above solution:
1. The excretion rate is 0-order(Infusion), not IV.
2. Unable to achieve excretion delay.
 
look forward to your answer.
 
Sincerely,
0521

Edited by 0521, 18 April 2023 - 04:59 AM.


#7 bwendt@certara.com

bwendt@certara.com

    Advanced Member

  • Administrators
  • 282 posts

Posted 18 April 2023 - 08:46 AM

Hi,

 

a simple suggestion would be to add the amount X to the central compartment instead of the absorption compartment, since you want it IV. When you setup the condition for when the excretion should happen you ask for a time window between 0 and 0.5. It would make more sense to put it at exactly 0.5 hours instead, since it is an IV bolus. 

Sorry, haven't tried myself whether that works.

 

Bernd






0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users