From: Michael H. <mh...@ca...> - 2006-09-09 06:00:12
|
Rainer and the rest, Thanks for finding those errors in the examples in the SBML spec; we'll try to get them out. But since you have been thinking about this topic, I'd like to ask you how you think the following class of problems can be solved. It has been confounding Nicolas and myself. Suppose we have a reaction system consisting of 3 compartments, with species A in Va, B in Vb, and C in Vc (I'm using the volumes as the names of the compartments), and the reaction is A + B -> C The compartments have constant volume; no varying volumes here. Suppose further that the reaction is said to obey the simplest possible kind of kinetics, a kind of mass action (but a weird one because multiple compartments are involved). So let's say the rate is k * [A] * [B] Here, k must have units of a 2nd order rate constant, which is 1/(Molar * time) = (volume)/(substance*time). As initial values, we might be given the values of concentrations [A], [B], [C], or we might be given the substance amounts; it won't matter as we'll see below. The key point is that the reactants are in different compartments. Now we want to construct the ODEs. First let's start naively just to make sure all the grounds are covered. The first attempt we might make is to say that the rates of change are like in traditional kinetics: d[A]/dt = -k * [A] * [B] d[B]/dt = -k * [A] * [B] d[C]/dt = k * [A] * [B] But this can easily be shown to be wrong. Borrowing an example that Nicolas has written for the l2v2 spec, let's say that volume Vc = 2*Va (i.e., Vc is twice the volume of Va). Then if we calculate the change of substance amounts (moles or items) in compartments Va and Vc (and here I'm using "A" to stand for the amount of substance of species A, "C" to stand for the amount of substance of species C): dA/dt = Va*d[A]/dt = Va * (-k * [A] * [B]^2) dC/dt = Vc*d[C]/dt = Vc * (k * [A] * [B]^2) = 2 * Va * (k * [A] * [B]^2) So we just created matter out of nothing. This simply proves what we already knew, which is that we have to express the rate in terms of substance changes, not concentration changes. OK, fine, so let's try to do that. Since we know the compartment volumes and we can know the concentrations of each species, we have the relationships [A] = A/Va [B] = B/Vb [C] = C/Vc We then substitute this into the ODEs: d[A]/dt = -k * (A/Va) * (B/Vb) d[B]/dt = -k * (A/Va) * (B/Vb) d[C]/dt = k * (A/Va) * (B/Vb) So far this is perfectly valid, but it didn't help anything; the overall expressions are still in terms of concentrations. We need to make them to be about species amount, not concentrations. But how? Attempt #1: Multiply each ODE by the volume in which that species is located. Let's take for example d[C]/dt, and multiply it by the volume in which [C] is located: dC/dt = Vc*d[C]/dt = k * (A/Va) * (B/Vb) * Vc This seems reasonable; after all, C is located in Vc, and Vc*[C] must give me number of molecules of C. But it can't be right. Suppose I change the model by doubling the size of Vc, without changing anything else in the system. According to the above, the rate of appearance of molecules of C will double if I do that, which is impossible because actually the number of molecules must be solely determined by the reactants. Attempt #2: The conclusion from the above must be that multiplying by Vc is the wrong way around. The core rate expression must be reformulated in terms of substance per time, not concentration per time, and *then* concentrations can be made out of it by dividing by the volumes as needed. So let's try to do that. new rate expr = k * ([A]*Va) * ([B]*Vb) This gets rid of the concentration terms, but now the units are wrong, because they are (volume * substance)/time rather than substance/time. Hmmm. Could this be a clue? Maybe we just need to divide by a volume? That seems promising. So: dA/dt = ( -k * ([A]*Va) * ([B]*Vb) )/Va dB/dt = ( -k * ([A]*Va) * ([B]*Vb) )/Vb dC/dt = ( k * ([A]*Va) * ([B]*Vb) )/Vc The units look right. But wait, this has the same problem as before: if Vc changes and nothing else in the system changes, the rate of appearance of C will change. Attempt #3: Maybe we simply divided by the wrong volume in the equations above; maybe it should be always Va or Vb. Oh, but, there are two choices: Va and Vb. If we can only use one, how do we pick which one we use? Attempt #4: Ok, so the volume division idea isn't working. What if the issue is not about dividing by volumes, but instead, the problem is that the units of k need to be changed? Maybe what we really need is dA/dt = -k' * ([A]*Va) * ([B]*Vb) dB/dt = -k' * ([A]*Va) * ([B]*Vb) dC/dt = k' * ([A]*Va) * ([B]*Vb) Then k' can be used to sort out the units. Except.... what *should* be the correction applied to k? How can we create k' systematically? What if the rate law is something entirely different -- without a k', or with other constants? What will the correction be then? So at this point, we're stuck. The conclusion must be one of the following: Option (a): Conclude that attempt #4 is the right way, and we need to work out how to construct a proper correction term for the general case. Option (b): Conclude that there is a fundamental error in one or more of the attempts #1-4, or there is another way out. Option (c): Conclude that we must declare the situation impossible and require that all reactants must be in the same compartment. Unfortunately, Nicolas points out that (c) is violated by some existing models -- they already use multiple compartments for reactants -- so people must believe it's doable. Option (c) is not a way out. What is your opinion? What is the solution? How should this multicompartment model be solved? MH |