QMJ format encodes a QUB state model in JavaScript Object Notation (JSON). Here's an example:
{
"channelCount":1,
"IeqFv":false,
"balanceLoops":true,
"vRev":0,
"states": [
{"Class":0,"Pr":0,"x":25,"y":50,"Label":"","Index":0},
{"Class":1,"Pr":0,"x":75,"y":50,"Label":"","Index":1}
],
"classes": [
{"Amp":0,"Std":0.1,"Cond":0,"CondStd":0.1,"Index":0},
{"Amp":1,"Std":0.1,"Cond":10,"CondStd":0.1,"Index":1}
],
"rates":[
{"From":0,"To":1,"k0":10,"k1":0,"k2":0,"Ligand":"","Voltage":"","Pressure":"","Index":0},
{"From":1,"To":0,"k0":100,"k1":0,"k2":0,"Ligand":"","Voltage":"","Pressure":"","Index":1}
],
"constraints":[
{"Type":"FixRate","States":[1,0],"Index":0}
],
"modelName":"twostate",
"modelAbout":"Basic closed-open model, with a constraint fixing the value of k0 closing"
}
Some notes:
- Each state has a class number, shown onscreen as its color (black, red, ...). States in the same class have identical measurements, given in "classes."
- When IeqFv is false, a class's measurements belong to the normal distribution (class.Amp +/- class.Std).
- When IeqFv is true, they belong to the distribution (classes[0].Amp + (V - vRev)*class.Cond +/- (V - vRev)*class.CondStd)
- vRev (the reversal potential) has units mV
- Rates should be given in symmetric pairs, i.e. don't list all rates emanating from state 0, then all rates from state 1, ...
- Constraint types are:
- "FixRate": hold k0 constant
- "FixExp": hold k1 constant
- "FixPress": hold k2 constant
- "ScaleRate": preserve the ratio between two k0 constants
- "ScaleExp": preserve the ratio between two k1 constants
- "ScalePress": preserve the ratio between two k2 constants