Skip to content

Commit aaa19ea

Browse files
authored
Merge pull request #373 from tobymathieson/feature/add_instrument_type_lookup
added instrument / model name look up using obo
2 parents a3c71d6 + 570e61f commit aaa19ea

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

pymzml/obo/psi-ms-4.1.79.obo.gz

156 KB
Binary file not shown.

pymzml/run.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ def __init__(
131131
# obo version not specified -> try to identify from mzML by self._init_iter
132132
self.info["obo_version"] = None
133133

134-
self.iter = self._init_iter()
135134
self.OT = self._init_obo_translator()
135+
self.iter = self._init_iter()
136136

137137
def __next__(self):
138138
"""
@@ -295,6 +295,8 @@ def _obo_version_validator(version):
295295
2017: "4.1.0",
296296
2018: "4.1.10",
297297
2019: "4.1.22",
298+
2024: "4.1.79",
299+
2025: "4.1.188"
298300
}
299301
version_fixed = None
300302
if obo_rgx.match(version):
@@ -343,7 +345,7 @@ def _init_obo_translator(self):
343345
# parse obo, check MS tags and if they are ok in minimum.py (minimum
344346
# required) ...
345347
if self.info.get("obo_version", None) is None:
346-
self.info["obo_version"] = "1.1.0"
348+
self.info["obo_version"] = "4.1.79"
347349
obo_translator = obo.OboTranslator.from_cache(version=self.info["obo_version"])
348350

349351
return obo_translator
@@ -403,6 +405,9 @@ def _init_iter(self):
403405
elif element.tag.endswith("}dataProcessingList"):
404406
self.info["data_processing_list"] = True
405407
self.info["data_processing_list_element"] = element
408+
elif element.tag.endswith("}cvParam"):
409+
if self.term_is_a_member(element.attrib.get('accession'), "MS:1000494"):
410+
self.info["instrument_name"] = element.attrib.get('name')
406411

407412
elif element.tag.endswith("}spectrumList"):
408413
spec_cnt = element.attrib.get("count")
@@ -453,6 +458,23 @@ def get_chromatogram_count(self):
453458
def close(self):
454459
self.info["file_object"].close()
455460

461+
def term_is_a_member(self, tested_term, member_of_term):
462+
"""
463+
Use translated obo file to check if given term is_a member of the
464+
465+
Returns:
466+
is_member (bool) whether given term is a member of member_of_term
467+
468+
"""
469+
is_member = False
470+
try:
471+
term_in = self.OT[tested_term]
472+
if term_in:
473+
is_member = self.OT.id[tested_term]['is_a'].startswith(member_of_term)
474+
except KeyError:
475+
print(f'term not found ({tested_term})')
476+
return is_member
477+
456478

457479
if __name__ == "__main__":
458480
print(__doc__)

0 commit comments

Comments
 (0)