25 March 2013

Writing out arrays and linked lists with pysces.write.*

PySCeS array export facilities have been expanded with a new set of array export functions. This includes exporting arrays and linked lists (lists of lists) to various flavours of text file.

These methods are either fully customizable and generic or specifically tailored for writing CSV (comma) and Text (<tab> delimited) files that include the array data and optionally row/col labels. They are all available in the ''pysces.write.*'' module (see documentation/docstrings for details).
In [3]: pysces.write.
pysces.write.exportArray2CSV
pysces.write.exportArray2TXT
pysces.write.exportLabelledArray
pysces.write.exportLabelledArray2CSV
pysces.write.exportLabelledArray2TXT
pysces.write.exportLabelledArrayWithHeader
pysces.write.exportLabelledArrayWithHeader2CSV
pysces.write.exportLabelledArrayWithHeader2TXT
pysces.write.exportLabelledLinkedList

 

22 March 2013

SED-ML gets more interesting when you start using it: PySCeS

Last year I started getting more active in the "Simulation Experiment Description Markup Language" (SED-ML) community. At its simplest SED-ML is a way of describing time-simulation plots in a standard way, of course it is way more than this, especially after the workshop hosted by Dagmar in Rostock last November year.

Just recently, using Frank Bergmann's.SED-ML tools for the conversion I've added SED-ML support into PySCeS. Its pretty simple to use as well, anything generated with mod.doSimPlot() can be exported.
import pysces
mod = pysces.model('chain.psc','d:\\projects\\modeldir')
mod.doSimPlot(50,100)
mod.exportSimAsSedML(output='files,archive,combine')

mod.exportSimAsSedML() does all the work and its arguments specify that output should be produced as raw SBML/SED-ML files, a SEDML archive (the same files zipped together) and a COMBINE archive (*.omex) a recently proposed archive format that includes the same files with all sorts of metadata.

While this is the simplest use-case, to do this I've wrapped most of the SED-ML 1.1 spec into a Python class that can be used to generate arbitrary SED-ML descriptions. This actually generates Frank's SED-ML script which then either uses libSEDML, installed locally, or the web services provided  here to generate the SED-ML.
sed = pysces.SED.SED(sed_id, sed_output_path)

In [11]: sed.
sed.addTaskPlot sed.addModel
sed.addDataGenerator sed.addTaskDataGenerators
sed.addModelAlt sed.writeCOMBINEArchive
sed.addPlot sed.writeSedScript
sed.addSimulation sed.writeSedXArchive
sed.addTask sed.writeSedXML

In [11]: sed.

This will all be available in the PySCeS 0.9 release (soon :-))

06 March 2013

Recon 2 translated to SBML Level 3 with FBC

Yesterday I translated the newly released Human metabolic map Recon 2 from its existing COBRA format into SBML 3 with FBC. The model is now available from cbmpy.sourceforge.net

It turned out to be trivial, here's what I did:

  1. Downloaded the model from biomodels

  2. Loaded it into CBMPy, this translates the model into SBML3+FBC using libSBML 5.8.0

    cmod = cbm.CBRead.readCOBRASBML('MODEL1109130000.cobra.xml', os.getcwd())


  3. At this point there is no objective function defined so I created one (R_biomass_reaction)
    cmod.createObjectiveFunction('R_biomass_reaction')


  4. All that's left is to solve it:
    cbm.CBSolver.analyzeModel(cmod)

    INFO: Model is optimal: 1
    Solution status = 1 : optimal
    Solution method = 2 : dual
    Objective value = 100.0
    Status: Model is optimal


  5. As this is a rather large model I decided to try my multicore FVA and see what happens (I decided to use two processing threads on  a quad core CPU). This took about and hour in the end which is slow, but this is a good excuse to look at some of the newer optimized FVA algorithms out there.
    fvadat = cbm.CBMultiCore.runMultiCoreFVA(cmod, procs=2)


  6. Finally I want to write the whole model, the FBA solution and FVA results to file. Excel 97 is actually quite a good format for this, next step is a COMBINE archive.
    cbm.CBWrite.writeModelToExcel97(cmod, 'results.xls')