Skip to content

Commit f6d0dca

Browse files
author
oerc0042
committed
closes #605, #375
1 parent a31ad87 commit f6d0dca

File tree

7 files changed

+193
-2
lines changed

7 files changed

+193
-2
lines changed

isatools/model/datafile.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,42 @@ def __ne__(self, other):
202202
return not self == other
203203

204204

205+
class ImageFile(DataFile):
206+
"""Represents an Image file in an experimental graph."""
207+
208+
def __init__(self, filename="", id_="", generated_from=None, comments=None):
209+
super().__init__(filename=filename, id_=id_, generated_from=generated_from, comments=comments)
210+
211+
self.label = "Image File"
212+
213+
def __repr__(self):
214+
return (
215+
"isatools.model.ImageFile(filename='{0.filename}', "
216+
"generated_from={0.generated_from}, comments={0.comments})".format(self)
217+
)
218+
219+
def __str__(self):
220+
return """ImageFile(
221+
filename={data_file.filename}
222+
generated_from={num_generated_from} Sample objects
223+
comments={num_comments} Comment objects
224+
)""".format(data_file=self, num_generated_from=len(self.generated_from), num_comments=len(self.comments))
225+
226+
def __hash__(self):
227+
return hash(repr(self))
228+
229+
def __eq__(self, other):
230+
return (
231+
isinstance(other, ImageFile)
232+
and self.filename == other.filename
233+
and self.generated_from == other.generated_from
234+
and self.comments == other.comments
235+
)
236+
237+
def __ne__(self, other):
238+
return not self == other
239+
240+
205241
class RawSpectralDataFile(DataFile):
206242
"""Represents a raw spectral data file in an experimental graph."""
207243

@@ -428,6 +464,44 @@ def __ne__(self, other):
428464
return not self == other
429465

430466

467+
class MetaboliteAssignmentFile(DataFile):
468+
"""Represents a metabolite assignment file in an experimental graph."""
469+
470+
def __init__(self, filename="", id_="", generated_from=None, comments=None):
471+
super().__init__(filename=filename, id_=id_, generated_from=generated_from, comments=comments)
472+
473+
self.label = "Metabolite Assignment File"
474+
475+
def __repr__(self):
476+
return (
477+
"isatools.model.MetaboliteAssignmentFile("
478+
"filename='{data_file.filename}', "
479+
"generated_from={data_file.generated_from}, "
480+
"comments={data_file.comments})".format(data_file=self)
481+
)
482+
483+
def __str__(self):
484+
return """MetaboliteAssignmentFile(
485+
filename={data_file.filename}
486+
generated_from={num_generated_from} Sample objects
487+
comments={num_comments} Comment objects
488+
)""".format(data_file=self, num_generated_from=len(self.generated_from), num_comments=len(self.comments))
489+
490+
def __hash__(self):
491+
return hash(repr(self))
492+
493+
def __eq__(self, other):
494+
return (
495+
isinstance(other, MetaboliteAssignmentFile)
496+
and self.filename == other.filename
497+
and self.generated_from == other.generated_from
498+
and self.comments == other.comments
499+
)
500+
501+
def __ne__(self, other):
502+
return not self == other
503+
504+
431505
class DerivedArrayDataMatrixFile(DataFile):
432506
"""Represents a derived array data matrix file in an experimental graph."""
433507

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,50 @@
1-
<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>
1+
<isatab-config-file xmlns="http://www.ebi.ac.uk/bii/isatab_configuration#">
2+
<isatab-configuration table-name="histology" isatab-assay-type="generic_assay" isatab-conversion-target="generic">
3+
<measurement term-label="histology" term-accession="http://purl.obolibrary.org/obo/OBI_0600020"
4+
source-abbreviation="OBI"/>
5+
<technology term-label="" term-accession="" source-abbreviation=""/>
6+
<field header="Sample Name" data-type="String" is-file-field="false" is-multiple-value="false"
7+
is-required="true" is-hidden="false" is-forced-ontology="false">
8+
<description>
9+
<![CDATA[Samples represent major outputs resulting from a protocol application other than the special case outputs of Extract or a Labeled Extract.]]></description>
10+
<default-value><![CDATA[]]></default-value>
11+
</field>
12+
<protocol-field protocol-type="histology"/>
13+
<field header="Assay Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true"
14+
is-hidden="false" is-forced-ontology="false">
15+
<description><![CDATA[User-defined name for an assay.]]></description>
16+
<default-value><![CDATA[]]></default-value>
17+
<generated-value-template>
18+
[INSTITUTION].Group-[GROUP_NO].Subject-[SUBJECT_NO].[SAMPLE_EXTRACT].Extract-[EXTRACT_COUNT].LE-[LABEL_COUNT].ASSAY-[HYB_COUNT]
19+
</generated-value-template>
20+
</field>
21+
<field header="Raw Data File" data-type="String" is-file-field="true" is-multiple-value="false"
22+
is-required="false" is-hidden="false" is-forced-ontology="false">
23+
<description><![CDATA[Name (or URI) of the data file generated by an assay]]></description>
24+
<default-value><![CDATA[]]></default-value>
25+
</field>
26+
<field header="Image File" data-type="String" is-file-field="true" is-multiple-value="false" is-required="false"
27+
is-hidden="false" is-forced-ontology="false">
28+
<description><![CDATA[Name (or URI) of the image files generated by an assay.]]></description>
29+
<default-value><![CDATA[]]></default-value>
30+
<generated-value-template>[INSTITUTION].Group-[GROUP_NO].Subject-[SUBJECT_NO].[SAMPLE_EXTRACT]
31+
</generated-value-template>
32+
</field>
33+
<field header="Normalization Name" data-type="String" is-file-field="false" is-multiple-value="false"
34+
is-required="false" is-hidden="false" is-forced-ontology="false">
35+
<description><![CDATA[User-defined name for each normalization applied]]></description>
36+
<default-value><![CDATA[]]></default-value>
37+
</field>
38+
<field header="Data Transformation Name" data-type="String" is-file-field="false" is-multiple-value="false"
39+
is-required="false" is-hidden="false" is-forced-ontology="false">
40+
<description><![CDATA[User-defined name for each data transformation applied]]></description>
41+
<default-value><![CDATA[]]></default-value>
42+
</field>
43+
<field header="Derived Data File" data-type="String" is-file-field="true" is-multiple-value="false"
44+
is-required="false" is-hidden="false" is-forced-ontology="false">
45+
<description><![CDATA[Name (or URI) of the data file generated by an assay.]]></description>
46+
<default-value><![CDATA[]]></default-value>
47+
</field>
48+
<structured-field name="factors"/>
49+
</isatab-configuration>
50+
</isatab-config-file>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<isatab-config-file xmlns="http://www.ebi.ac.uk/bii/isatab_configuration#">
2+
<isatab-configuration table-name="phenotyping_imaging" isatab-assay-type="generic_assay"
3+
isatab-conversion-target="generic">
4+
<measurement term-label="phenotyping analysis"
5+
term-accession="" source-abbreviation=""/>
6+
<technology term-label="imaging" term-accession="" source-abbreviation=""/>
7+
<field header="Sample Name" data-type="String" is-file-field="false" is-multiple-value="true" is-required="true"
8+
is-hidden="false" is-forced-ontology="false">
9+
<description>
10+
<![CDATA[Samples represent major outputs resulting from a protocol application other than the special case outputs of Extract or a Labeled Extract.]]></description>
11+
<default-value><![CDATA[]]></default-value>
12+
<generated-value-template>[INSTITUTION].Group-[GROUP_NO].Subject-[SUBJECT_NO].[SAMPLE_EXTRACT]
13+
</generated-value-template>
14+
</field>
15+
<protocol-field protocol-type="imaging"/>
16+
<field header="Assay Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true"
17+
is-hidden="false" is-forced-ontology="false">
18+
<description><![CDATA[User-defined name for an assay.]]></description>
19+
<default-value><![CDATA[]]></default-value>
20+
<generated-value-template>
21+
[INSTITUTION].Group-[GROUP_NO].Subject-[SUBJECT_NO].[SAMPLE_EXTRACT].Extract-[EXTRACT_COUNT].LE-[LABEL_COUNT].ASSAY-[HYB_COUNT]
22+
</generated-value-template>
23+
</field>
24+
<field header="Image File" data-type="String" is-file-field="true" is-multiple-value="false"
25+
is-required="true" is-hidden="false" is-forced-ontology="false">
26+
<description><![CDATA[Name (or URI) of the data file generated by an assay.]]></description>
27+
<default-value><![CDATA[]]></default-value>
28+
</field>
29+
<field header="Normalization Name" data-type="String" is-file-field="false" is-multiple-value="false"
30+
is-required="false" is-hidden="false" is-forced-ontology="false">
31+
<description><![CDATA[User-defined name for each normalization applied]]></description>
32+
<default-value><![CDATA[]]></default-value>
33+
</field>
34+
<field header="Data Transformation Name" data-type="String" is-file-field="false" is-multiple-value="false"
35+
is-required="false" is-hidden="false" is-forced-ontology="false">
36+
<description><![CDATA[User-defined name for each data transformation applied.]]></description>
37+
<default-value><![CDATA[]]></default-value>
38+
</field>
39+
<field header="Derived Data File" data-type="String" is-file-field="true" is-multiple-value="false"
40+
is-required="false" is-hidden="false" is-forced-ontology="false">
41+
<description><![CDATA[Name (or URI) of the data file generated by an assay.]]></description>
42+
<default-value><![CDATA[]]></default-value>
43+
</field>
44+
<structured-field name="factors"/>
45+
</isatab-configuration>
46+
</isatab-config-file>

tests/isajson/test_isajson.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,18 @@ def test_json_load_and_dump_bii_s_test(self):
460460
assays = [a for a in studies["assays"] if a["filename"] == "a_assay.txt"][0]
461461
self.assertEqual(assays["materials"]["otherMaterials"][1]["type"], "Extract Name")
462462

463+
464+
def test_json_load_and_dump_bii_s_test(self):
465+
# Load into ISA objects
466+
with open(os.path.join(utils.JSON_DATA_DIR, "ISA-Image", "isa-image.json")) as isajson_fp:
467+
investigation = isajson.load(isajson_fp)
468+
469+
# Dump into ISA JSON from ISA objects
470+
investigation_reload = json.loads(json.dumps(investigation, cls=isajson.ISAJSONEncoder))
471+
studies = [s for s in investigation_reload["studies"] if s["filename"] == "s_study.txt"][0]
472+
assays = [a for a in studies["assays"] if a["filename"] == "a_assay.txt"][0]
473+
self.assertEqual(assays["dataFiles"][1]["type"], "Image File")
474+
463475
def test_json_load_and_dump_isa_labeled_extract(self):
464476
# Load into ISA objects
465477
with open(os.path.join(utils.JSON_DATA_DIR, "TEST-ISA-LabeledExtract1", "isa-test-le1.json")) as isajson_fp:

tests/isatab/validate/test_core.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,14 @@ def test_bii_s_7(self):
4343
report = validate(fp=data_file, config_dir=self.default_conf)
4444
self.assertEqual(len(report["warnings"]), 1)
4545

46+
def test_imaging(self):
47+
data_path = path.join(path.dirname(path.abspath(__file__)), "..", "..", "data", "tab", "Imaging")
48+
with open(path.join(data_path, "i_Investigation.txt"), "r") as data_file:
49+
report = validate(fp=data_file, config_dir=self.default_conf)
50+
print(report["errors"])
51+
self.assertEqual(len(report["errors"]), 0)
52+
53+
4654
def test_print_rule(self):
4755
raw_rule = INVESTIGATION_RULES_MAPPING[0]
4856
rule = Rule(**raw_rule)

tests/model/test_datafile.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class TestSubDataFile(TestCase):
8181
def setUp(self):
8282
self.types = {
8383
"RawDataFile": RawDataFile,
84+
"ImageFile": ImageFile,
8485
"DerivedDataFile": DerivedDataFile,
8586
"RawSpectralDataFile": RawSpectralDataFile,
8687
"DerivedArrayDataFile": DerivedArrayDataFile,
@@ -92,6 +93,7 @@ def setUp(self):
9293
"PostTranslationalModificationAssignmentFile": PostTranslationalModificationAssignmentFile,
9394
"AcquisitionParameterDataFile": AcquisitionParameterDataFile,
9495
"FreeInductionDecayDataFile": FreeInductionDecayDataFile,
96+
"MetaboliteAssignmentFile": MetaboliteAssignmentFile
9597
}
9698
self.classes = {}
9799
for filetype in self.types:

tests/utils/test_isatab_configurator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def test_load_config_metagenome_seq(self):
5050
from isatools.io import isatab_configurator as configurator
5151

5252
config_dict = configurator.load(self._config_dir)
53-
self.assertEqual(len(config_dict), 30)
53+
self.assertEqual(len(config_dict), 31)
5454
self.assertEqual(
5555
config_dict[("metagenome sequencing", "nucleotide sequencing")].isatab_configuration[0].table_name,
5656
"metagenome_seq",

0 commit comments

Comments
 (0)