Unit conversion in Simbiology
5 views (last 30 days)
Show older comments
Hi to all,
Does Simbiology performs unit conversion when, for example, a species in the membrane is transformed into a cytoplasmatic product? It certainly does some conversion but I’m not sure is the right one. For example, 1 molecule/micrometer^2 is transformed by an irreversible reaction from the compartment X that has 6 micrometer^2 capacity into 6 nM of the product in compartment Y that has 1 micrometer^3 capacity. According to my numbers it should have been 10nM instead of 6nM.
Am I missing something here?
Thanks in advance,
Omar
2 Comments
George Kamin
on 3 Mar 2017
You comment about accessing the "simulation settings" to disable unit checking, this no longer exists in R2016AB
Arthur Goldsipe
on 3 Mar 2017
Hi,
In R2016b, you can disable unit checking directly while viewing the model by going to the toolstrip tab labeled MODEL and clicking on the button named "Convert Units." You will also still find a button labeled "Simulation Settings" when viewing a task, like a simulation. Just go to the toolstrip tab labeled EDITOR and look for the gear icon.
-Arthur
Accepted Answer
Rick Paxson
on 5 Apr 2011
Hello Omar,
SimBiology can operate in one of two modes when it comes to Units conversions and checking dimensions. By default it performs dimensional analysis using user provided units but does no unit conversions. To turn on unit conversion from the SimBiology Desktop go to the "simulation settings" panel for the simulation task and at the bottom of that panel you will see a checkbox to turn on UnitConversion.
From the MATLAB command line here is the code that I used to confirm that product in compartment Y has 10nM:
m = sbiomodel('unit conversion check');
X = m.addcompartment('X', 'Capacity', 6, 'CapacityUnits', 'micrometer^2');
X.addspecies('membrane_species', 'InitialAmount', 1, 'InitialAmountUnits', 'molecule/micrometer^2');
Y = m.addcompartment('Y', 'Capacity', 1, 'CapacityUnits', 'micrometer^3');
Y.addspecies('cytoplasmic_product', 'InitialAmount', 0, 'InitialAmountUnits', 'nanomolarity');
m.addreaction('X.membrane_species -> Y.cytoplasmic_product', 'reactionrate', 'K*X.membrane_species');
m.addparameter('K', 'Value', 1, 'ValueUnits', '1/second');
% Turn on UnitConversion
cs = m.getconfigset;
cs.CompileOptions.UnitConversion = true;
[t,x] = sbiosimulate(m);
plot(t,x)
Hope this helps.
3 Comments
Arthur Goldsipe
on 13 Apr 2011
Hi Omar,
With regard to unitless parameters, we recently added support for a new unit named "dimensionless" for just this case. That capability is available as of R2010b. As of R2011a (just released!), you can also specify arbitrary simulation TimeUnits when using UnitConversion.
With regard to unit conversion and user-defined functions, the units of input arguments or output arguments is not currently documented. Therefore, I recommend writing your user functions in a way that is independent of units. For example, can you make the inputs and outputs dimensionless quantities? This may require you to create additional parameters so that you can scale the arguments.
Finally, one caution against using user-defined functions to create pulse inputs. This approach introduces discontinuities into the equations. For the most accurate and robust numerical solutions to such problems, the solver needs to be informed of the discontinuities. The best way to do this is via events. The documentation actually incudes a demo documenting this approach. The title of the demo is "Deterministic Simulation of a Model Containing a Discontinuity". You can also type "edit discontSimBiologyModel.m" at the MATLAB prompt to see the demo.
Cheers,
Arthur
More Answers (0)
Communities
More Answers in the SimBiology Community
See Also
Categories
Find more on Perform Sensitivity Analysis in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!