Enterohepatic Recirculation depend on both time and concentration,

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

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

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:

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

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

Sincerely,
0521

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

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

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

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