Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions isatools/model/datafile.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,42 @@ def __ne__(self, other):
return not self == other


class ImageFile(DataFile):
"""Represents an Image file in an experimental graph."""

def __init__(self, filename="", id_="", generated_from=None, comments=None):
super().__init__(filename=filename, id_=id_, generated_from=generated_from, comments=comments)

self.label = "Image File"

def __repr__(self):
return (
"isatools.model.ImageFile(filename='{0.filename}', "
"generated_from={0.generated_from}, comments={0.comments})".format(self)
)

def __str__(self):
return """ImageFile(
filename={data_file.filename}
generated_from={num_generated_from} Sample objects
comments={num_comments} Comment objects
)""".format(data_file=self, num_generated_from=len(self.generated_from), num_comments=len(self.comments))

def __hash__(self):
return hash(repr(self))

def __eq__(self, other):
return (
isinstance(other, ImageFile)
and self.filename == other.filename
and self.generated_from == other.generated_from
and self.comments == other.comments
)

def __ne__(self, other):
return not self == other


class RawSpectralDataFile(DataFile):
"""Represents a raw spectral data file in an experimental graph."""

Expand Down Expand Up @@ -428,6 +464,44 @@ def __ne__(self, other):
return not self == other


class MetaboliteAssignmentFile(DataFile):
"""Represents a metabolite assignment file in an experimental graph."""

def __init__(self, filename="", id_="", generated_from=None, comments=None):
super().__init__(filename=filename, id_=id_, generated_from=generated_from, comments=comments)

self.label = "Metabolite Assignment File"

def __repr__(self):
return (
"isatools.model.MetaboliteAssignmentFile("
"filename='{data_file.filename}', "
"generated_from={data_file.generated_from}, "
"comments={data_file.comments})".format(data_file=self)
)

def __str__(self):
return """MetaboliteAssignmentFile(
filename={data_file.filename}
generated_from={num_generated_from} Sample objects
comments={num_comments} Comment objects
)""".format(data_file=self, num_generated_from=len(self.generated_from), num_comments=len(self.comments))

def __hash__(self):
return hash(repr(self))

def __eq__(self, other):
return (
isinstance(other, MetaboliteAssignmentFile)
and self.filename == other.filename
and self.generated_from == other.generated_from
and self.comments == other.comments
)

def __ne__(self, other):
return not self == other


class DerivedArrayDataMatrixFile(DataFile):
"""Represents a derived array data matrix file in an experimental graph."""

Expand Down
51 changes: 50 additions & 1 deletion isatools/resources/config/xml/histology.xml
Original file line number Diff line number Diff line change
@@ -1 +1,50 @@
<isatab-config-file xmlns="http://www.ebi.ac.uk/bii/isatab_configuration#"><isatab-configuration table-name="histology" isatab-assay-type="generic_assay" isatab-conversion-target="generic"><measurement term-label="histology" term-accession="http://purl.obolibrary.org/obo/OBI_0600020" source-abbreviation="OBI"/><technology term-label="" term-accession="" source-abbreviation=""/><field header="Sample Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false"><description><![CDATA[Samples represent major outputs resulting from a protocol application other than the special case outputs of Extract or a Labeled Extract.]]></description><default-value><![CDATA[]]></default-value></field><protocol-field protocol-type ="histology"/><field header="Assay Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false"><description><![CDATA[User-defined name for an assay.]]></description><default-value><![CDATA[]]></default-value><generated-value-template>[INSTITUTION].Group-[GROUP_NO].Subject-[SUBJECT_NO].[SAMPLE_EXTRACT].Extract-[EXTRACT_COUNT].LE-[LABEL_COUNT].ASSAY-[HYB_COUNT]</generated-value-template></field><field header="Raw Data File" data-type="String" is-file-field="true" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false"><description><![CDATA[Name (or URI) of the data file generated by an assay]]></description><default-value><![CDATA[]]></default-value></field><field header="Image File" data-type="String" is-file-field="true" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false"><description><![CDATA[Name (or URI) of the image files generated by an assay.]]></description><default-value><![CDATA[]]></default-value><generated-value-template>[INSTITUTION].Group-[GROUP_NO].Subject-[SUBJECT_NO].[SAMPLE_EXTRACT]</generated-value-template></field><field header="Normalization Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false"><description><![CDATA[User-defined name for each normalization applied]]></description><default-value><![CDATA[]]></default-value></field><field header="Data Transformation Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false"><description><![CDATA[User-defined name for each data transformation applied]]></description><default-value><![CDATA[]]></default-value></field><field header="Derived Data File" data-type="String" is-file-field="true" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false"><description><![CDATA[Name (or URI) of the data file generated by an assay.]]></description><default-value><![CDATA[]]></default-value></field><structured-field name="factors"/></isatab-configuration></isatab-config-file>
<isatab-config-file xmlns="http://www.ebi.ac.uk/bii/isatab_configuration#">
<isatab-configuration table-name="histology" isatab-assay-type="generic_assay" isatab-conversion-target="generic">
<measurement term-label="histology" term-accession="http://purl.obolibrary.org/obo/OBI_0600020"
source-abbreviation="OBI"/>
<technology term-label="" term-accession="" source-abbreviation=""/>
<field header="Sample Name" data-type="String" is-file-field="false" is-multiple-value="false"
is-required="true" is-hidden="false" is-forced-ontology="false">
<description>
<![CDATA[Samples represent major outputs resulting from a protocol application other than the special case outputs of Extract or a Labeled Extract.]]></description>
<default-value><![CDATA[]]></default-value>
</field>
<protocol-field protocol-type="histology"/>
<field header="Assay Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true"
is-hidden="false" is-forced-ontology="false">
<description><![CDATA[User-defined name for an assay.]]></description>
<default-value><![CDATA[]]></default-value>
<generated-value-template>
[INSTITUTION].Group-[GROUP_NO].Subject-[SUBJECT_NO].[SAMPLE_EXTRACT].Extract-[EXTRACT_COUNT].LE-[LABEL_COUNT].ASSAY-[HYB_COUNT]
</generated-value-template>
</field>
<field header="Raw Data File" data-type="String" is-file-field="true" is-multiple-value="false"
is-required="false" is-hidden="false" is-forced-ontology="false">
<description><![CDATA[Name (or URI) of the data file generated by an assay]]></description>
<default-value><![CDATA[]]></default-value>
</field>
<field header="Image File" data-type="String" is-file-field="true" is-multiple-value="false" is-required="false"
is-hidden="false" is-forced-ontology="false">
<description><![CDATA[Name (or URI) of the image files generated by an assay.]]></description>
<default-value><![CDATA[]]></default-value>
<generated-value-template>[INSTITUTION].Group-[GROUP_NO].Subject-[SUBJECT_NO].[SAMPLE_EXTRACT]
</generated-value-template>
</field>
<field header="Normalization Name" data-type="String" is-file-field="false" is-multiple-value="false"
is-required="false" is-hidden="false" is-forced-ontology="false">
<description><![CDATA[User-defined name for each normalization applied]]></description>
<default-value><![CDATA[]]></default-value>
</field>
<field header="Data Transformation Name" data-type="String" is-file-field="false" is-multiple-value="false"
is-required="false" is-hidden="false" is-forced-ontology="false">
<description><![CDATA[User-defined name for each data transformation applied]]></description>
<default-value><![CDATA[]]></default-value>
</field>
<field header="Derived Data File" data-type="String" is-file-field="true" is-multiple-value="false"
is-required="false" is-hidden="false" is-forced-ontology="false">
<description><![CDATA[Name (or URI) of the data file generated by an assay.]]></description>
<default-value><![CDATA[]]></default-value>
</field>
<structured-field name="factors"/>
</isatab-configuration>
</isatab-config-file>
46 changes: 46 additions & 0 deletions isatools/resources/config/xml/phenotyping_imaging.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<isatab-config-file xmlns="http://www.ebi.ac.uk/bii/isatab_configuration#">
<isatab-configuration table-name="phenotyping_imaging" isatab-assay-type="generic_assay"
isatab-conversion-target="generic">
<measurement term-label="phenotyping analysis"
term-accession="" source-abbreviation=""/>
<technology term-label="imaging" term-accession="" source-abbreviation=""/>
<field header="Sample Name" data-type="String" is-file-field="false" is-multiple-value="true" is-required="true"
is-hidden="false" is-forced-ontology="false">
<description>
<![CDATA[Samples represent major outputs resulting from a protocol application other than the special case outputs of Extract or a Labeled Extract.]]></description>
<default-value><![CDATA[]]></default-value>
<generated-value-template>[INSTITUTION].Group-[GROUP_NO].Subject-[SUBJECT_NO].[SAMPLE_EXTRACT]
</generated-value-template>
</field>
<protocol-field protocol-type="imaging"/>
<field header="Assay Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true"
is-hidden="false" is-forced-ontology="false">
<description><![CDATA[User-defined name for an assay.]]></description>
<default-value><![CDATA[]]></default-value>
<generated-value-template>
[INSTITUTION].Group-[GROUP_NO].Subject-[SUBJECT_NO].[SAMPLE_EXTRACT].Extract-[EXTRACT_COUNT].LE-[LABEL_COUNT].ASSAY-[HYB_COUNT]
</generated-value-template>
</field>
<field header="Image File" data-type="String" is-file-field="true" is-multiple-value="false"
is-required="true" is-hidden="false" is-forced-ontology="false">
<description><![CDATA[Name (or URI) of the data file generated by an assay.]]></description>
<default-value><![CDATA[]]></default-value>
</field>
<field header="Normalization Name" data-type="String" is-file-field="false" is-multiple-value="false"
is-required="false" is-hidden="false" is-forced-ontology="false">
<description><![CDATA[User-defined name for each normalization applied]]></description>
<default-value><![CDATA[]]></default-value>
</field>
<field header="Data Transformation Name" data-type="String" is-file-field="false" is-multiple-value="false"
is-required="false" is-hidden="false" is-forced-ontology="false">
<description><![CDATA[User-defined name for each data transformation applied.]]></description>
<default-value><![CDATA[]]></default-value>
</field>
<field header="Derived Data File" data-type="String" is-file-field="true" is-multiple-value="false"
is-required="false" is-hidden="false" is-forced-ontology="false">
<description><![CDATA[Name (or URI) of the data file generated by an assay.]]></description>
<default-value><![CDATA[]]></default-value>
</field>
<structured-field name="factors"/>
</isatab-configuration>
</isatab-config-file>
12 changes: 12 additions & 0 deletions tests/isajson/test_isajson.py
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,18 @@ def test_json_load_and_dump_bii_s_test(self):
assays = [a for a in studies["assays"] if a["filename"] == "a_assay.txt"][0]
self.assertEqual(assays["materials"]["otherMaterials"][1]["type"], "Extract Name")


def test_json_load_and_dump_imagefile_test(self):
# Load into ISA objects
with open(os.path.join(utils.JSON_DATA_DIR, "ISA-Image", "isa-image.json")) as isajson_fp:
investigation = isajson.load(isajson_fp)

# Dump into ISA JSON from ISA objects
investigation_reload = json.loads(json.dumps(investigation, cls=isajson.ISAJSONEncoder))
studies = [s for s in investigation_reload["studies"] if s["filename"] == "s_study.txt"][0]
assays = [a for a in studies["assays"] if a["filename"] == "a_assay.txt"][0]
self.assertEqual(assays["dataFiles"][1]["type"], "Image File")

def test_json_load_and_dump_isa_labeled_extract(self):
# Load into ISA objects
with open(os.path.join(utils.JSON_DATA_DIR, "TEST-ISA-LabeledExtract1", "isa-test-le1.json")) as isajson_fp:
Expand Down
8 changes: 8 additions & 0 deletions tests/isatab/validate/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,14 @@ def test_bii_s_7(self):
report = validate(fp=data_file, config_dir=self.default_conf)
self.assertEqual(len(report["warnings"]), 1)

def test_imaging(self):
data_path = path.join(path.dirname(path.abspath(__file__)), "..", "..", "data", "tab", "Imaging")
with open(path.join(data_path, "i_Investigation.txt"), "r") as data_file:
report = validate(fp=data_file, config_dir=self.default_conf)
print(report["errors"])
self.assertEqual(len(report["errors"]), 0)


def test_print_rule(self):
raw_rule = INVESTIGATION_RULES_MAPPING[0]
rule = Rule(**raw_rule)
Expand Down
2 changes: 2 additions & 0 deletions tests/model/test_datafile.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ class TestSubDataFile(TestCase):
def setUp(self):
self.types = {
"RawDataFile": RawDataFile,
"ImageFile": ImageFile,
"DerivedDataFile": DerivedDataFile,
"RawSpectralDataFile": RawSpectralDataFile,
"DerivedArrayDataFile": DerivedArrayDataFile,
Expand All @@ -92,6 +93,7 @@ def setUp(self):
"PostTranslationalModificationAssignmentFile": PostTranslationalModificationAssignmentFile,
"AcquisitionParameterDataFile": AcquisitionParameterDataFile,
"FreeInductionDecayDataFile": FreeInductionDecayDataFile,
"MetaboliteAssignmentFile": MetaboliteAssignmentFile
}
self.classes = {}
for filetype in self.types:
Expand Down
2 changes: 1 addition & 1 deletion tests/utils/test_isatab_configurator.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def test_load_config_metagenome_seq(self):
from isatools.io import isatab_configurator as configurator

config_dict = configurator.load(self._config_dir)
self.assertEqual(len(config_dict), 30)
self.assertEqual(len(config_dict), 31)
self.assertEqual(
config_dict[("metagenome sequencing", "nucleotide sequencing")].isatab_configuration[0].table_name,
"metagenome_seq",
Expand Down
Loading