Open murrayrm opened 7 years ago
From Richard Murray, 28 Nov 2012:
Can you give an example of the type of circuit where this might occur? I kind of understand the issue, but an example would help clarify it.
I think I have some examples of this, will respond once I sort out a careful articulation of it on my end.
Transferred from SourceForge. Original author: Vipul Singhal, Nov 2012
Hi guys,
REVIEW
A quick reminder of the situation before I ask my question (for anyone apart from Richard and Zoltan reading this)
The main reason we want to have the device driver architecture is to resolve the recursive dependency issue. Recall that in the device driver format, a function (such as txtl_adddna or any of the functions it calls, like txtl_prom_p70) which originally defined species and reactions in the same call, now does them separately: first ALL the species are defined by calling all the functions int he 'Setup Species' mode, then all the reactions are defined by calling these very same functions in the 'Setup Reactions' mode.
Also note that the recursive dependency issue is what is resolved by this device driver approach: let's say promA is repressed by proteinA, and promB by proteinB, then the dna sequences 'promA-utr-proteinB' and 'promB-utr-proteinA' require all the species to be available before the relevant repression reactions can be specified. This is because if we try to setup the reactions associated with 'promA-utr-proteinB' without knowing whether 'promB-utr-proteinA' will be called in the future (or, more specifically, whether proteinA will be available at the time of the simulation), then we do not know whether to set up the reaction for the repression of promA by ProteinA. Thus the hope of the device driver architecture is that if all the species which are going to be in the mix are known before we start setting up the reactions, then we can search for a specie and only set up a reaction if all of its reactant species are available.
THE ISSUE
What happens if the product of a reaction which required a search (ie, we do not know a priori whether the reaction will occur or not or which variation of a specie (for instance if it contains an lva tag and/or a terminator) the reaction will use) is now a reactant for another reaction, so that now
1) We do not know at the time of 'Setup Species' whether that specie should be included in the model 2) If any reactions need the specie, and some of them are initialized before the reaction which would produce that specie, then those reactions would not be initialized.
A first thought for a solution is to initialize the products of all the potential reactions and setting their initial values to 0. It the reactions occur, then the amounts will change. But this will (?) not work because the reactants and therefore products may have a lot of possible variations (due to things like lva, terminators, multimers, loops...)
I think this is not an immediate concern because such 'second order' effects (reaction depending on the products of another reaction whose existence is itself not predetermined) do not occur in our current simple examples, but will occur in more complicated circuits we will inevitably try to build. Also, some sort of a place-holder specie/reaction system might work (Zoltan, i think you have previously brought up an approach which uses placeholders. I think it might we worth thinking about that in the context of this problem!).