Download Links

Simulate 3D | SBW (Win32) | Bifurcation Discovery | FluxBalance

Sunday, November 11, 2012

SBW Flux Balance Analysis Tool … v2

Brett Olivier was here last week in HD, and we made quite some progress on the FBC specification. We also started with a test suite for tools implementing the FBC package. And as can be expected, these tests revealed quite some room in the original FBA Tool that from 2009.

2012-11-11_-_FBA

The new version fully supports the SBML FBC package, will properly inform whether a solution was found or not, and sorts a number of problems (such as dealing with infinite bounds). The new version is still aimed as teaching tool, but now is much better suited as such. The list of changes:

  • fixed issue with infinite bounds
  • fixed issue accessing the results from the c library
  • added display of objective value and solution quality to status bar
  • added export of LP files
  • added import of COPASI / Jarnac files (if latest SBW is installed)

In any case I started a github page for the project, where the first windows installer is available for download:

https://github.com/downloads/fbergmann/FluxBalance/SetupFBA-1.3.exe

Launch4j for 32bit

Launch4j is a great project, that can bundle java applications into an executable, so that starting these applications is no longer a problem. No batch files needed, no relying that the default extension for jars is starting them and no command line wizardry required. Launch4j would allow you to either bundle a JRE with your java application, or it could find it during runtime.

There was only one catch, you could not let it know that what you do want it to find is a certain architecture of JRE. See, when your project would use JNI and your native libraries are only available in 32 bit architecture, then running the project with a 64bit JVM would just not work.

Thanks to the wonders of open source, the full code for launch4j is publicly available from SF, so it was no problem to fork the project and add an option to the launcher that would allow it to find 32 bit JVMs first.

A new installer is available on github!, grab it here:

http://fbergmann.github.com/launch4j/files/SetupLaunch4j_3.0.3.exe

Screenshot

Sunday, October 21, 2012

Using LibSBML from Tomcat

I frequently hear that it would be difficult to use libSBML from Tomcat. So I figured I take some time to investigate what the problems could be. In the process I rewrote the SBML Online Validator to use libSBML java bindings and tomcat. It turned out that libSBML is actually easy enough to set up to be used by tomcat, one just has to take certain particularities of the java programming language (with respect to P/Invoke ) into account:

  • libraries can only be loaded once
  • native resources can only be accessed from the thread that created them
  • you have hardly any control of the garbage collection, however all native classes have to be freed on the same thread as they were created on
  • be careful that your elements do not go out of scope (i.e.: even if you are working with SBML Models, you can not let the SBML Document get out of scope)

I’ve written all this up and published it on github, it would be great to hear what you think about it. There you will find:

Thursday, September 6, 2012

Custom Annotation for using Distribution Functions in SBML Models

Drawing random numbers is a task occasionally encountered. However, there is no standard way to do that in SBML. Of course that is precisely what the SBML Level 3 package for Distributions and Ranges is for. But what to do in the meantime, or what to do when you want it working for SBML Level 2? This is precisely what I encountered a couple of weeks back, and that is why below you will find a specification for a very short custom annotation, that allows to tag an SBML function definition as distribution function. Here an example:

<functionDefinition id="normal" name="Normal distribution">
  <annotation>
    <distribution xmlns="
http://sbml.org/annotations/distribution" definition="http://en.wikipedia.org/wiki/Normal_distribution" />
  </annotation>
  <math xmlns="
http://www.w3.org/1998/Math/MathML">
    <lambda>
      <bvar>
        <ci> m </ci>
      </bvar>
      <bvar>
        <ci> s </ci>
      </bvar>
      <ci> m </ci>
    </lambda>
  </math>
</functionDefinition>

The annotation (in the namespace http://sbml.org/annotations/distribution) contains one attribute definition, whose value tells us precisely which distribution we would like to draw numbers from. All software that supports it will know that we are dealing with a distribution and know what to do with it. Other software at least get the mean whenever they invoke the function.

2012-09-06_-_Result

Here the full specification of the Custom Distribution Annotation. (and here the SBML model). The annotation is so far supported by JarnacLite and RoadRunner (Windows Installer). As the same functionality is available in other software packages it would be great if they could be tagged with the annotation as well.

Sunday, August 5, 2012

Updates to the LibSBML Layout Support

The libSBML 5.6.0 release contains changes to the Layout code as was discussed during HARMONY 2012. While the time between HARMONY and this release was not sufficient to fully update the specifications, we thought that it would be better to update the implementation so that people could test the changes. The changes include a modification of the GraphicalObject base class through adding of a “metaIdRef” attribute and the introduction of two now classes:

  • GeneralGlyph and
  • ReferenceGlyph

The new metaIdRef attribute means that now elements can be referenced by specifying the metaId of elements to reference elements that have no SId.

They are to be used analog to ReactionGlyphs and SpeciesReferenceGlyphs. However, they are not specific to a given SBML Class, and thus can address the use case of wanting to represent Events, Rules or even InitialAssignments visually. So how do these classes look? Obviously both are extending GraphicalObject, and so get their Ids and all the SBase goodness from there, additional elements are:

image

So the ReferenceGlyph References an SBML element via the “reference” attribute, and additionally allows to reference a Layout Glyph via the “glyph” attribute. For the time being we allow free form ‘role’ strings to be applied.

image

These ReferenceGlyphs are then used by the GeneralGlyph, that analog to the ReactionGlyph references an SBML element via the “reference” attribute and contains a list of these reference elements (in a listOfReferenceGlyphs), together with an optional Curve and optional additional glyphs to be rendered (that are kept in a listOfSubGlyphs). These additional glyphs can be any subclass of GraphicalObject.  The GeneralGlyphs can be found in the containing Layout in the listOfAdditionalGraphicalObjects. So how would it look in a full SBML model? Here a model represening a rule glyph as image:

image

and in SBML:

<?xml version="1.0" encoding="UTF-8"?>
<sbml xmlns="http://www.sbml.org/sbml/level3/version1/core" xmlns:layout="http://www.sbml.org/sbml/level3/version1/layout/version1" xmlns:render="http://www.sbml.org/sbml/level3/version1/render/version1" level="3" version="1" layout:required="false" render:required="false">
  <model timeUnits="time">
    <listOfUnitDefinitions>
      <unitDefinition id="volume">
        <listOfUnits>
          <unit kind="litre" exponent="1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="substance">
        <listOfUnits>
          <unit kind="mole" exponent="1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="time">
        <listOfUnits>
          <unit kind="second" exponent="1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
    </listOfUnitDefinitions>
    <listOfCompartments>
      <compartment id="compartment" spatialDimensions="3" size="1" units="volume" constant="true"/>
    </listOfCompartments>
    <listOfSpecies>
      <species id="species" compartment="compartment" initialConcentration="0" substanceUnits="substance" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
    </listOfSpecies>
    <listOfParameters>
      <parameter id="variable1" value="0.1" constant="true"/>
      <parameter id="variable2" value="0.1" constant="true"/>
    </listOfParameters>
    <listOfRules>
      <assignmentRule variable="species">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <plus/>
            <ci> variable1 </ci>
            <ci> variable2 </ci>
          </apply>
        </math>
      </assignmentRule>
    </listOfRules>
    <layout:listOfLayouts xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <layout:layout layout:id="test">
        <layout:dimensions layout:width="837" layout:height="445.5"/>
        <layout:listOfSpeciesGlyphs>
          <layout:speciesGlyph layout:id="sGlyph_0" layout:species="species">
            <layout:boundingBox>
              <layout:position layout:x="298" layout:y="199"/>
              <layout:dimensions layout:width="62" layout:height="40"/>
            </layout:boundingBox>
          </layout:speciesGlyph>
        </layout:listOfSpeciesGlyphs>
        <layout:listOfTextGlyphs>
          <layout:textGlyph layout:id="tGlyph_0" layout:text="species" layout:graphicalObject="sGlyph_0">
            <layout:boundingBox>
              <layout:position layout:x="298" layout:y="199"/>
              <layout:dimensions layout:width="62" layout:height="40"/>
            </layout:boundingBox>
          </layout:textGlyph>
          <layout:textGlyph layout:id="tGlyph_1" layout:text="variable1" layout:graphicalObject="glyph_1">
            <layout:boundingBox>
              <layout:position layout:x="477" layout:y="116"/>
              <layout:dimensions layout:width="62" layout:height="40"/>
            </layout:boundingBox>
          </layout:textGlyph>
          <layout:textGlyph layout:id="tGlyph_2" layout:text="variable2" layout:graphicalObject="glyph_2">
            <layout:boundingBox>
              <layout:position layout:x="477" layout:y="289"/>
              <layout:dimensions layout:width="62" layout:height="40"/>
            </layout:boundingBox>
          </layout:textGlyph>
        </layout:listOfTextGlyphs>
        <layout:listOfAdditionalGraphicalObjects>
          <layout:generalGlyph layout:id="glyph_1" layout:reference="variable1">
            <layout:boundingBox>
              <layout:position layout:x="477" layout:y="116"/>
              <layout:dimensions layout:width="62" layout:height="40"/>
            </layout:boundingBox>
          </layout:generalGlyph>
          <layout:generalGlyph layout:id="glyph_2" layout:reference="variable2">
            <layout:boundingBox>
              <layout:position layout:x="477" layout:y="289"/>
              <layout:dimensions layout:width="62" layout:height="40"/>
            </layout:boundingBox>
          </layout:generalGlyph>
          <layout:generalGlyph layout:id="ruleGlyph">
            <layout:boundingBox>
              <layout:position layout:x="0" layout:y="0"/>
              <layout:dimensions layout:width="0" layout:height="0"/>
            </layout:boundingBox>
            <layout:listOfReferenceGlyphs>
              <layout:referenceGlyph layout:id="Reference_J0_0" layout:reference="species" layout:glyph="sGlyph_0" layout:role="product">
                <layout:curve>
                  <layout:listOfCurveSegments>
                    <layout:curveSegment xsi:type="CubicBezier">
                      <layout:start layout:x="425" layout:y="220"/>
                      <layout:end layout:x="367" layout:y="218.425925925926"/>
                      <layout:basePoint1 layout:x="383" layout:y="218"/>
                      <layout:basePoint2 layout:x="383" layout:y="218"/>
                    </layout:curveSegment>
                  </layout:listOfCurveSegments>
                </layout:curve>
              </layout:referenceGlyph>
              <layout:referenceGlyph layout:id="Reference_J0_2" layout:reference="variable1" layout:glyph="glyph_1" layout:role="substrate">
                <layout:curve>
                  <layout:listOfCurveSegments>
                    <layout:curveSegment xsi:type="CubicBezier">
                      <layout:start layout:x="495.46511627907" layout:y="163"/>
                      <layout:end layout:x="425" layout:y="220"/>
                      <layout:basePoint1 layout:x="467" layout:y="222"/>
                      <layout:basePoint2 layout:x="467" layout:y="222"/>
                    </layout:curveSegment>
                  </layout:listOfCurveSegments>
                </layout:curve>
              </layout:referenceGlyph>
              <layout:referenceGlyph layout:id="Reference_J0_3" layout:reference="variable2" layout:glyph="glyph_2" layout:role="substrate">
                <layout:curve>
                  <layout:listOfCurveSegments>
                    <layout:curveSegment xsi:type="CubicBezier">
                      <layout:start layout:x="495.574712643678" layout:y="282"/>
                      <layout:end layout:x="425" layout:y="220"/>
                      <layout:basePoint1 layout:x="467" layout:y="222"/>
                      <layout:basePoint2 layout:x="467" layout:y="222"/>
                    </layout:curveSegment>
                  </layout:listOfCurveSegments>
                </layout:curve>
              </layout:referenceGlyph>
            </layout:listOfReferenceGlyphs>
          </layout:generalGlyph>
        </layout:listOfAdditionalGraphicalObjects>
        <render:listOfRenderInformation render:versionMajor="1" render:versionMinor="0">
          <render:renderInformation render:id="ConvertedRenderStyle" render:programName="SBML Layout Viewer - SBW version" render:programVersion="2.7.4513.22555 Compiled on: 11.05.2012 12:31:50" render:backgroundColor="#FFFFFFFF">
            <render:listOfColorDefinitions>
              <render:colorDefinition render:id="Color_0" render:value="#ff9900"/>
              <render:colorDefinition render:id="Color_1" render:value="#008000"/>
              <render:colorDefinition render:id="Color_2" render:value="#000000"/>
            </render:listOfColorDefinitions>
            <render:listOfGradientDefinitions>
              <render:linearGradient render:id="LinearGradient_0" render:spreadMethod="reflect" render:x2="0">
                <render:stop render:offset="0" render:stop-color="#ffffff"/>
                <render:stop render:offset="100%" render:stop-color="#ffcc99"/>
              </render:linearGradient>
            </render:listOfGradientDefinitions>
            <render:listOfLineEndings>
              <render:lineEnding render:id="product">
                <layout:boundingBox>
                  <layout:position layout:x="-10" layout:y="-5"/>
                  <layout:dimensions layout:width="10" layout:height="10"/>
                </layout:boundingBox>
                <render:g render:stroke="Color_1" render:stroke-width="0.001" render:fill="Color_1" render:font-size="0" render:text-anchor="start" render:vtext-anchor="top">
                  <render:polygon render:fill="Color_1">
                    <render:listOfElements>
                      <render:element xsi:type="RenderPoint" render:x="0" render:y="0"/>
                      <render:element xsi:type="RenderPoint" render:x="100%" render:y="50%"/>
                      <render:element xsi:type="RenderPoint" render:x="0" render:y="100%"/>
                      <render:element xsi:type="RenderPoint" render:x="33%" render:y="50%"/>
                      <render:element xsi:type="RenderPoint" render:x="0" render:y="0"/>
                    </render:listOfElements>
                  </render:polygon>
                </render:g>
              </render:lineEnding>
            </render:listOfLineEndings>
            <render:listOfStyles>
              <render:style render:idList="sGlyph_0">
                <render:g render:stroke-width="0" render:fill-rule="nonzero" render:font-size="0" render:font-family="sans-serif" render:font-style="normal" render:font-weight="normal" render:text-anchor="start" render:vtext-anchor="top">
                  <render:curve render:stroke="Color_0" render:stroke-width="2">
                    <render:listOfElements>
                      <render:element xsi:type="RenderPoint" render:x="20" render:y="0"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="0" render:y="20" render:basePoint1_x="8.95431" render:basePoint1_y="0" render:basePoint2_x="0" render:basePoint2_y="8.95431"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="20" render:y="40" render:basePoint1_x="0" render:basePoint1_y="31.0457" render:basePoint2_x="8.95431" render:basePoint2_y="40"/>
                      <render:element xsi:type="RenderPoint" render:x="42" render:y="40"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="62" render:y="20" render:basePoint1_x="53.0457" render:basePoint1_y="40" render:basePoint2_x="62" render:basePoint2_y="31.0457"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="42" render:y="0" render:basePoint1_x="62" render:basePoint1_y="8.95431" render:basePoint2_x="53.0457" render:basePoint2_y="0"/>
                      <render:element xsi:type="RenderPoint" render:x="20" render:y="0"/>
                    </render:listOfElements>
                  </render:curve>
                </render:g>
              </render:style>
              <render:style render:idList="glyph_1">
                <render:g render:stroke-width="0" render:fill-rule="nonzero" render:font-size="0" render:font-family="sans-serif" render:font-style="normal" render:font-weight="normal" render:text-anchor="start" render:vtext-anchor="top">
                  <render:curve render:stroke="Color_0" render:stroke-width="2">
                    <render:listOfElements>
                      <render:element xsi:type="RenderPoint" render:x="20" render:y="0"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="0" render:y="20" render:basePoint1_x="8.95431" render:basePoint1_y="0" render:basePoint2_x="0" render:basePoint2_y="8.95431"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="20" render:y="40" render:basePoint1_x="0" render:basePoint1_y="31.0457" render:basePoint2_x="8.95431" render:basePoint2_y="40"/>
                      <render:element xsi:type="RenderPoint" render:x="42" render:y="40"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="62" render:y="20" render:basePoint1_x="53.0457" render:basePoint1_y="40" render:basePoint2_x="62" render:basePoint2_y="31.0457"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="42" render:y="0" render:basePoint1_x="62" render:basePoint1_y="8.95431" render:basePoint2_x="53.0457" render:basePoint2_y="0"/>
                      <render:element xsi:type="RenderPoint" render:x="20" render:y="0"/>
                    </render:listOfElements>
                  </render:curve>
                </render:g>
              </render:style>
              <render:style render:idList="glyph_2">
                <render:g render:stroke-width="0" render:fill-rule="nonzero" render:font-size="0" render:font-family="sans-serif" render:font-style="normal" render:font-weight="normal" render:text-anchor="start" render:vtext-anchor="top">
                  <render:curve render:stroke="Color_0" render:stroke-width="2">
                    <render:listOfElements>
                      <render:element xsi:type="RenderPoint" render:x="20" render:y="0"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="0" render:y="20" render:basePoint1_x="8.95431" render:basePoint1_y="0" render:basePoint2_x="0" render:basePoint2_y="8.95431"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="20" render:y="40" render:basePoint1_x="0" render:basePoint1_y="31.0457" render:basePoint2_x="8.95431" render:basePoint2_y="40"/>
                      <render:element xsi:type="RenderPoint" render:x="42" render:y="40"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="62" render:y="20" render:basePoint1_x="53.0457" render:basePoint1_y="40" render:basePoint2_x="62" render:basePoint2_y="31.0457"/>
                      <render:element xsi:type="RenderCubicBezier" render:x="42" render:y="0" render:basePoint1_x="62" render:basePoint1_y="8.95431" render:basePoint2_x="53.0457" render:basePoint2_y="0"/>
                      <render:element xsi:type="RenderPoint" render:x="20" render:y="0"/>
                    </render:listOfElements>
                  </render:curve>
                </render:g>
              </render:style>
              <render:style render:roleList="sidesubstrate substrate" render:idList="ruleGlyph">
                <render:g render:stroke="Color_1" render:stroke-width="2" render:fill-rule="nonzero" render:font-size="0" render:font-family="sans-serif" render:font-style="normal" render:font-weight="normal" render:text-anchor="start" render:vtext-anchor="top"/>
              </render:style>
              <render:style render:roleList="product">
                <render:g render:stroke="Color_1" render:stroke-width="2" render:fill-rule="nonzero" render:font-size="0" render:font-family="sans-serif" render:font-style="normal" render:font-weight="normal" render:text-anchor="start" render:vtext-anchor="top" render:endHead="product"/>
              </render:style>
              <render:style render:idList="tGlyph_0">
                <render:g render:stroke="Color_2" render:stroke-width="0" render:fill-rule="nonzero" render:font-size="11" render:font-family="Arial" render:font-style="normal" render:font-weight="normal" render:text-anchor="middle" render:vtext-anchor="top"/>
              </render:style>
              <render:style render:idList="tGlyph_1">
                <render:g render:stroke="Color_2" render:stroke-width="0" render:fill-rule="nonzero" render:font-size="11" render:font-family="Arial" render:font-style="normal" render:font-weight="normal" render:text-anchor="middle" render:vtext-anchor="top"/>
              </render:style>
              <render:style render:idList="tGlyph_2">
                <render:g render:stroke="Color_2" render:stroke-width="0" render:fill-rule="nonzero" render:font-size="11" render:font-family="Arial" render:font-style="normal" render:font-weight="normal" render:text-anchor="middle" render:vtext-anchor="top"/>
              </render:style>
            </render:listOfStyles>
          </render:renderInformation>
        </render:listOfRenderInformation>
      </layout:layout>
    </layout:listOfLayouts>
  </model>
</sbml>

Friday, August 3, 2012

libSBML 5.6.0 Released

I’m glad to announce that we have just released libSBML 5.6.0. This new release comes with more binary installers. Among them Python 3 and R bindings in two flavors: with or without SBML package code. Main changes in this release are:

  • An updated python 2.x binding, contributed by Gordon Ball, that makes the python API more python like. Here just one example on how this can look:
    Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from libsbml import *
    >>> doc = readSBML('/Development/libsbml/examples/sample-models/from-spec/level-3/membrane.xml')
    >>> doc.model
    <Model Model_1 "Reaction on membrane">
    >>> doc.model.compartments[0]
    <Compartment cyt "Cytosol">
    >>> doc.model.compartments[0].name
    'Cytosol'
    >>>


  • Updated Layout package with GeneralGlyph / ReferenceGlyphs for those that want to represent other things than just compartments, species and reactions.


  • (experimental) Implementation of the QUAL package


  • (experimental) Updated Spatial package to make it easier dealing with ImageData as well as Spatial Parameters


  • (experimental) Updated Groups package that includes the ‘kind’ attribute.


  • (experimental) Updated FBC package that allows to set Operations and FluxBounds through enums.

All this is rounded up by bug fixes, with handling of MIRIAM annotations among others. The full release announcement is online.


Please grab the new version from SourceForge:


http://sourceforge.net/projects/sbml/files/libsbml/5.6.0/


SBML logo[3]

Thursday, July 12, 2012

R bindings for libSBML 5.5.0

R, an environment for statistical computing, enjoys popularity in the wider fields of computational biology. Until now, if you would feel like consuming an SBML model in R you could use the Bioconductor project rsbml. It would be great for reading SBML (by transforming it into a DOM).

r-logo

Over the past weeks I’ve spend some time looking into R bindings for libSBML based on SWIG code generation. This will make it possible to fully create / manipulate / validate SBML documents from R. At the same time support for all SBML packages will be readily available.

First experiments seem to be quite convincing, I’ve ported all the C examples over to R (isn’t it nice how you can write C code in any language?). From here I would hope that some R and SBML enthusiast could write some helper functions to make the functions more R-like. Here the examples:

In order to install the bindings you need to have R 2.15.1 simply download the binary package for your system:

And then execute

R CMD INSTALL <archivename>



(or choose install from local package in the RGui.) I did not have luck renaming these files, so perhaps the names have to be what they are. If you are interested in compiling a binary package from source, you can use the CMake build files and select WITH_R to have it build the R bindings (tested with SWIG 2.0.4). In any case I would look forward to hear how it is working for you.

Sunday, June 10, 2012

SED-ML Nested Proposal V3

A new version of the nested proposal is available immediately from:

http://identifiers.org/combine.specifications/sed-ml.proposal.nested-simulations.FB.version-3

The new version rephrases the Nested Simulation Class as Repeated Task, and addresses comments made by the community over the past couple of months (and of course the discussions at HARMONY 2012). As far as the scope is concerned, the current proposal is capable of describing all experiments possible with the previous version. Additionally through a new listOfSubTasks additional experiments can be run.

Steady state scan image
Pulsing a parameter during a simulation image
Multiple Stochastic Traces image
Timecourse scan image
2D Steady State scan image

 

Of course there also is an implementation available in the SED-ML Web Tools, where all examples can be run directly.

Friday, June 8, 2012

SBML Spatial Extension & Simulation

As part of my new job at the University of Heidelberg I get to work again on spatial simulations. While trying to get my feet wet, I was able to experiment with a spatial simulator by Akira Funahasi’s group (see also his presentation at last years COMBINE). So today I just wanted to share the resulting video with you:

Unable to display content. Adobe Flash is required.

It always is fascinating watching these things. And the real amazing thing is that this is not a hard coded simulation, but one that is interpreted from an SBML file. And while it probably will take a while until we are regularly exchanging spatial models we are definitely on the right way!

Monday, May 21, 2012

LibSED-ML @HARMONY 2012

HARMONY 2012 has finally started. And it started big, first I was privy to the SBML Editors meeting, and great stuff is coming there. Stay tuned on updates with respect to that. Here I’d like to share with you the slides from the introduction of libSED-ML from today:

In the morning the hackathon will start for real. Three parallel sessions: SBML, SBGN and SED-ML + semantic + BioPAX. I certainly hope to push the nested proposal for SED-ML. But luck willing we might even get a strategy for including data in SED-ML.

Saturday, May 12, 2012

libSBML 5.5.0 Released

Only one more week to go until HARMONY 2012 and the libSBML Team is proud to announce the immediate availability of libSBML 5.5.0. Primary changes in this release are:

  • a modification in the behavior of handling custom annotations
  • a better handling of MIRIAM annotations, such that RDF not falling into the subset supported by the SBML specification can be round tripped.

Additionally it is now possible to compile libSBML easily with Borland and Intel compilers (when using the CMake build system. Finally all experimental packages have been updated to allow them to be extended by other packages. That means that now it would be easily possible to use the COMP to extend the Layout elements. For more information see the full release announcement.

SBML logo[3]

Sunday, February 12, 2012

Systems Biology Workbench - 2.9.0

I’m pleased to announce the release of SBW 2.9.0. This release is available for the following platforms:

  • Windows
  • Linux x86 / x64
  • OS X
  • portable Apps

This release improves support for the exchange standards: SBGN-ML, SED-ML (including the nested proposal v2), and of course SBML. RoadRunner simulates a wider range of SBML models. You can get the new release from Sourceforge:

And the portable installer from:

Screenshots

image

image

image

Linux

Thanks to bitrock, we are finally able to provide a new range of linux installers (as well as 32bit and 64bit RPMs and DEB packages). When installing as root, SBW will be installed into /opt/sbw-2.9.0. Otherwise it will be available in the users home directory. In these directories you will find shortcuts to all available programs.

Dependencies: most SBW applications require Mono 2.10 to be installed (we recommend to install mono-complete). If you try to run SBW on an older linux distribution that does not include mono 2.10 in its repository here are some installation scripts for fedora and ubuntu that will help you to get it running, it should be easy enough to adapt them to centos when needed. Here the example for ubuntu:

mkdir mono-2.10
cd mono-2.10
wget --no-check-certificate https://github.com/nathanb/iws-snippets/raw/master/mono-install-scripts/ubuntu/install_mono-2.10.sh
chmod 755 install_mono-2.10.sh
./install_mono-2.10.sh

If this still seems to adventurous for you, I’ve created a 32bit and a 64bit virtual machine that runs SBW 2.9.0. It includes Live CDs, Virtual Machines and hard drive images. Simply start the machine and find the SBW shortcuts in the start menu. (They simply use the SBW rpm installer!).

OS X

We’ve listened to all your feedback about SBW being difficult to install. So this time around we don’t use any installation. Simply drag the SBW folder into your Applications folder and you are good to go.

As always, we recommend installing XQuartz and Mono prior to running SBW. The current Mono release 2.10.8 (and the 2.10.9 beta) unfortunately have a regression that causes the some application to stop working. The last known working release is 2.10.5 as available from:  http://download.mono-project.com/archive/2.10.5/download/

As for XQuartz, I’m using: http://xquartz.macosforge.org/trac/wiki/X112.7.0

Full Change Log

Feb 2012
Changes in Version 2.9.0
===========================

SBML Layout:
  - Reading Support for SBML Layout Extension (for SBML L3)
  - (at the moment the library only writes annotations though)
  - Stability and performance improvements for Layout Viewer.
  - SBGN upgrade
  - Bug Fix: Global Render Information were not correctly read
  - Stability: Now works even independently of SBW
   
SED-ML:
  - Support for Kisao Terms (full lookup and browsing of the
    hierarchy).
  - Bug Fixes for error correction facility

RoadRunner:
  - BugFix: non integral stoichiometry for L1 models
  - BugFix: model refused to load when non-L3 model used ids in speciesreferences
  - BugFix: L1 model with local parameters refused to load
  - BugFix: L1 model with non-integral stoichiometry was incorrect
  - BugFix: hasOnlySubstanceUnits was ignored in some places

NOM:
  - added methods:
    reorderRules : string reorderRules(string)
    inlineFunctionDefinitions : string inlineFunctionDefinitions(string)
  - (rules are automatically reordered by loadSBML, this will allow other modules
    to work correctly without code change)
  - fix: promote local to global parameters works for L1 models
   
Translators:
  - sort assignment rules
  - added command line option -f <sbmlfile> to translate the SBML file
    and write the file to stdout, so they can be used from the command line.
 
Portable:
  - we also have a version of SBW that you can install on a flash drive
    using portable apps.
 
All modules:
  - updated to use libSBML 5.4.0

JDesigner:
  - Fixed Chinese characters appearing when assignment rule was selected for editing.

Wednesday, January 18, 2012

SED-ML Nested Simulation Proposal v2

With the start of the new year it is time to get the Nested Simulation Proposal for SED-ML ready for wide-spread adoption. I believe nested simulations are vital for SED-ML so that we can cover a much larger variety of simulation experiments. I think it is especially important NOT to create a new simulation class for every single different simulation we perform on a model. By just defining two simulation classes:

  • One Step: which brings the model to the next desired output step.
  • Nested Simulation: which allows running over another simulation task, while changing multiple models parameters with computed values from ranges.

it is possible to construct a large number of simulations that are currently carried out.  I’ve taken these past weeks to fully flesh out all the details and the document is now available from Nature Proceedings:

http://precedings.nature.com/documents/4257/version/2

The new version describes in detail all attributes and elements and features a number of examples (see below)

All features have been implemented in libSedML. The major change is that internally libSedMLRunner no longer produces a simple 2d array of data, but a NuML result set.

NOTE: This proposal only covers the generation of the data, not the visualization. In other words this proposal allows to generate n-dimensional data sets, while currently our DataGenerators can not access the values. I believe the two issues should be handled in different proposals.

Examples

Just a brief overview of the examples:

Steady state scan image
Pulsing a parameter during a simulation image
Multiple Stochastic Traces image
Timecourse scan image
2D Steady State scan image

 

Availability

As indicated above, the proposal is implemented in libSedML, a also released a new version of the SED-ML Web Tools, that can simulate all of the above examples.

Just for completeness sake: here the link to the old version:

Doc:            http://precedings.nature.com/documents/4257/version/1
Examples:   http://frank-fbergmann.blogspot.com/2010/03/nested-simulation-experiments.html

FBC Package & SBMLToolbox 4.1.0 Getting Started

Today the SBML Team released version 4.1.0 of the SBML Toolbox. The news? It can be used with the SBML Level 3 Flux package. So what do you need to get it set up?

  1. Grab the beta FBC package for your system from:
  2. Grab SBML Toolbox 4.1.0: http://sourceforge.net/projects/sbml/files/SBMLToolbox/4.1.0/
  3. unzip / start Matlab / change into the toolbox directory, run the ‘install’ command.
  4. run the tests to be sure all is working fine for you:
    cd Test
    RunTest




Please let us know how things are going for you!