diff --git a/suspect/io/lcmodel.py b/suspect/io/lcmodel.py index 5252f07..0b27405 100644 --- a/suspect/io/lcmodel.py +++ b/suspect/io/lcmodel.py @@ -1,9 +1,11 @@ -import numpy -import os import itertools -import parsley +import os +import re import warnings +import numpy +import parsley + basis_grammar = r""" namelist = '$' name:n pairs:p ws -> (n, dict(p)) pairs = (pair:first (pair)*:rest -> [first] + rest) | -> [] @@ -166,6 +168,13 @@ def write_all_files(filename, data, wref_data=None, params=None, filbas="/home/s def read_coord(filename): + + # This regex pattern finds any sequence that is an integer or a float. + # -? matches an optional negative sign. + # \d+ matches one or more digits. + # \.?\d* matches an optional decimal point followed by zero or more digits. + number_pattern = r'-?\d+\.?\d*' + with open(filename, 'rt') as fin: coord_lines = fin.readlines() @@ -212,12 +221,13 @@ def read_coord(filename): # misc_output_info_line = metabolite_table_info_line + metabolite_table_line_count + 1 misc_output_line_count = int(coord_lines[misc_output_info_line].split()[0]) misc_output_lines = coord_lines[(misc_output_info_line + 1):(misc_output_info_line + misc_output_line_count + 1)] + [phase0, phase1] = map(float, re.findall(number_pattern, misc_output_lines[2])) misc_output = { "fwhm": float(misc_output_lines[0].split()[2]), "snr": float(misc_output_lines[0].split()[6]), "frequency_shift": float(misc_output_lines[1].split("=")[1].split()[0]), - "phase0": float(misc_output_lines[2].split()[1]), - "phase1": float(misc_output_lines[2].split()[3]) + "phase0": phase0, + "phase1": phase1 } # get the ppm axis diff --git a/tests/test_data/lcmodel/liver.COORD b/tests/test_data/lcmodel/liver.COORD index cb62f91..9f49f97 100755 --- a/tests/test_data/lcmodel/liver.COORD +++ b/tests/test_data/lcmodel/liver.COORD @@ -19,7 +19,7 @@ 5 lines in following misc. output table FWHM = 0.297 ppm S/N = 24 Data shift =-0.019 ppm - Ph: 36 deg 0.3 deg/ppm + Ph:-136 deg 0.3 deg/ppm alphaB,S = 1.2E+02, 2.2E-02 6 spline knots. Ns = 0(1) 821 points on ppm-axis = NY diff --git a/tests/test_mrs/test_io.py b/tests/test_mrs/test_io.py index 36d31b3..00c8774 100644 --- a/tests/test_mrs/test_io.py +++ b/tests/test_mrs/test_io.py @@ -1,15 +1,15 @@ -import suspect -import suspect.io.tarquin -import pytest -import unittest.mock import builtins -from unittest.mock import patch import os - -from suspect.io._common import complex_array_from_iter +import unittest.mock +from math import isclose +from unittest.mock import patch import numpy +import suspect +import suspect.io.tarquin +from suspect.io._common import complex_array_from_iter + def test_complex_from_iter(): float_list = [1.0, 0.0, 0.0, 1.0] @@ -76,10 +76,14 @@ def test_lcmodel_all_files(): def test_lcmodel_read_coord(): fitting_result = suspect.io.lcmodel.read_coord("tests/test_data/lcmodel/svs_97.COORD") assert len(fitting_result["metabolite_fits"]) == 41 + assert isclose(fitting_result["misc_output"]["phase0"], 21.0) + assert isclose(fitting_result["misc_output"]["phase1"], 12.2) def test_lcmodel_read_liver_coord(): fitting_result = suspect.io.lcmodel.read_coord("tests/test_data/lcmodel/liver.COORD") + assert isclose(fitting_result["misc_output"]["phase0"], -136.0) + assert isclose(fitting_result["misc_output"]["phase1"], 0.3) def test_lcmodel_read_basis():