Creating ISA content¶

The ISA API provides a set of Python classes that you can use to create ISA content with.

The three main objects that you need to create ISA content are:

  • Investigation

  • Study

  • Assay

…of course!

Important

As a pre-requisite to using ISA model classes, please make sure you have read and understood the ISA Abstract Model </isamodel>{.interpreted-text role=”doc”} that the ISA formats are based on.


Getting started¶

In isatools.model, the class Investigation is used as the top level container for all other ISA content. The Investigation Python class corresponds to the Investigation as defined in the ISA Model Specification. For example, to create an empty ISA structure consisting of an investigation with one study, you might use the following code:

from isatools.model import *
investigation = Investigation()
investigation.studies.append(Study())  # adds a new default Study object to investigation

This code simply creates one Investigation object, and adds a single Study object to it. The constructor of each of these objects creates empty structures for each of these. We can then inspect the structure by accessing its instance variables as follows:

  • Checking if a study exits:

investigation.studies
[<isatools.model.Study object>]
  • Checking if assays are associated to the first study object:

investigation.studies[0].assays
[]
  • Checking if the Investigation object has a title attribute filled:

investigation.title
''

Since we have not set any data in our ISA objects, these are by default mostly empty at the moment. We can set some instance variables with data as follows:

investigation.title = "My ISA Investigation"
investigation.title
'My ISA Investigation'
investigation.studies[0].title = "My ISA Study"
investigation.studies[0].title
'My ISA Study'
investigation.studies[0].assays.append(Assay())  # adds a new default Assay object to study
i.studies[0].assays
[<isatools.model.Assay object>]

If you then write these out to ISA-Tab, we can inspect the output written into an i_investigation.txt file. We do this using the isatab module to dump() the Investigation object we created, as follows:

from isatools import isatab
isatab.dump(investigation, 'tmp/')  # dump out ISA-Tab  to tmp/
<isatools.model.Investigation object>

If all went as expected, you should find an i_investigation.txt file with the standard Investigation sections, one Study section structured as defined by the ISA-Tab Specification.

Hint

Remember that when you dump() ISA content, you do it on the Investigation object. This means any Study and Assay objects and content must be attached to the Investigation for it to be serialized out.

Different classes in isatools.model have class constructors and instance variables that roughly map to the ISA Abstract Model. For full details of how to instantiate model classes, access and manipulate ISA data as objects, please inspect the module’s docstrings.

Obviously this isn’t enough to create a fully populated ISA investigation, but we would recommend that you have a look in the isatools.model package to inspect all the docstring documentation that is included with each of the ISA model classes.