Added the test data files sent by Matthias Richter (see #1)

Had to make a few changes to ensure that they open correctly
This commit is contained in:
Chris Kerr
2014-11-06 09:54:38 +00:00
parent 045f15c855
commit ef6e7335e9
3 changed files with 41 additions and 4 deletions

View File

@@ -9,7 +9,7 @@ import csv
from os import SEEK_SET, SEEK_CUR
import time
from datetime import date, datetime, timedelta
from collections import OrderedDict
from collections import OrderedDict, defaultdict
from warnings import warn
import numpy as np
@@ -35,7 +35,9 @@ def fieldname_to_dtype(fieldname):
"|Ewe|/V", "|I|/A", "Phase(Z)/deg", "|Z|/Ohm",
"Re(Z)/Ohm", "-Im(Z)/Ohm"):
return (fieldname, np.float_)
elif fieldname in ("cycle number", "I Range"):
# N.B. I'm not sure what 'Ns' is as in the only file I have with that
# header it never has any value other than '0'
elif fieldname in ("cycle number", "I Range", "Ns"):
return (fieldname, np.int_)
elif fieldname in ("dq/mA.h", "dQ/mA.h"):
return ("dQ/mA.h", np.float_)
@@ -47,6 +49,12 @@ def fieldname_to_dtype(fieldname):
raise ValueError("Invalid column header: %s" % fieldname)
def comma_converter(float_string):
"""Convert numbers to floats whether the decimal point is '.' or ','"""
trans_table = bytes.maketrans(b',', b'.')
return float(float_string.translate(trans_table))
def MPTfile(file_or_path):
"""Opens .mpt files as numpy record arrays
@@ -75,7 +83,11 @@ def MPTfile(file_or_path):
fieldnames = str3(next(mpt_file)).strip().split('\t')
record_type = np.dtype(list(map(fieldname_to_dtype, fieldnames)))
mpt_array = np.loadtxt(mpt_file, dtype=record_type)
## Must be able to parse files where commas are used for decimal points
converter_dict = dict(((i, comma_converter)
for i in range(len(fieldnames))))
mpt_array = np.loadtxt(mpt_file, dtype=record_type,
converters=converter_dict)
return mpt_array, comments
@@ -320,10 +332,16 @@ class MPRfile:
dtype='<f8', count=1)
ole_timestamp2 = np.fromstring(log_module['data'][469:],
dtype='<f8', count=1)
ole_timestamp3 = np.fromstring(log_module['data'][473:],
dtype='<f8', count=1)
if ole_timestamp1 > 40000 and ole_timestamp1 < 50000:
ole_timestamp = ole_timestamp1
elif ole_timestamp2 > 40000 and ole_timestamp2 < 50000:
ole_timestamp = ole_timestamp2
elif ole_timestamp3 > 40000 and ole_timestamp3 < 50000:
ole_timestamp = ole_timestamp3
else:
raise ValueError("Could not find timestamp in the LOG module")
ole_base = datetime(1899, 12, 30, tzinfo=None)
ole_timedelta = timedelta(days=ole_timestamp[0])

View File

@@ -18,4 +18,8 @@ http://files.figshare.com/1778944/bio_logic6.mpt
http://files.figshare.com/1778945/bio_logic1.mpt
http://files.figshare.com/1778946/bio_logic3.mpr
http://files.figshare.com/1780444/bio_logic4.mpr
http://files.figshare.com/1780529/121_CA_455nm_6V_30min_C01.mpr
http://files.figshare.com/1780530/121_CA_455nm_6V_30min_C01.mpt
http://files.figshare.com/1780526/CV_C01.mpr
http://files.figshare.com/1780527/CV_C01.mpt
END_FILELIST

View File

@@ -122,7 +122,7 @@ def assert_MPR_matches_MPT(mpr, mpt, comments):
assert_array_almost_equal(mpr.data["time/s"],
mpt["time/s"],
decimal=4) # 5 digits in CSV
decimal=2) # 2 digits in CSV
assert_field_matches("control/V/mA", decimal=6)
assert_field_matches("control/V", decimal=6)
@@ -178,3 +178,18 @@ def test_MPR6_matches_MPT6():
mpt, comments = MPTfile(os.path.join(testdata_dir, 'bio-logic6.mpt'))
mpr.data = mpr.data[:958] # .mpt file is incomplete
assert_MPR_matches_MPT(mpr, mpt, comments)
## Tests for issue #1 -- new dtypes ##
def test_CV_C01():
mpr = MPRfile(os.path.join(testdata_dir, 'CV_C01.mpr'))
mpt, comments = MPTfile(os.path.join(testdata_dir, 'CV_C01.mpt'))
assert_MPR_matches_MPT(mpr, mpt, comments)
def test_CA_455nm():
mpr = MPRfile(os.path.join(testdata_dir, '121-CA-455nm-6V_30min_C01.mpr'))
mpt, comments = MPTfile(os.path.join(testdata_dir, '121-CA-455nm-6V_30min_C01.mpt'))
assert_MPR_matches_MPT(mpr, mpt, comments)