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
20 changes: 15 additions & 5 deletions suspect/io/lcmodel.py
Original file line number Diff line number Diff line change
@@ -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) | -> []
Expand Down Expand Up @@ -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()

Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion tests/test_data/lcmodel/liver.COORD
Original file line number Diff line number Diff line change
Expand Up @@ -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

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This .COORD file is only used in one test. I modified it to include the edge case that was crashing previously.

alphaB,S = 1.2E+02, 2.2E-02
6 spline knots. Ns = 0(1)
821 points on ppm-axis = NY
Expand Down
18 changes: 11 additions & 7 deletions tests/test_mrs/test_io.py
Original file line number Diff line number Diff line change
@@ -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]
Expand Down Expand Up @@ -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():
Expand Down