From 1a5d8f4f4ae1c2d549e40da6072c0b992618f31a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Line?= Date: Thu, 14 Apr 2022 10:15:56 +0200 Subject: [PATCH 1/7] Added 'fastload'. Support for 2-byte and 4-byte precision # Added a 'fastload' option, which reads the channel data to a numpy array. # Added support for reading measurement data with 2-byte and 4-byte precision - added the method 'read_float()' - renamed the method 'read_single()' to 'read_byte()' to avoid confusion. # Added test files with data at the different precision levels. --- apread/apreader.py | 5 +- apread/binaryReader.py | 5 +- apread/entries.py | 113 ++++++++++++++++++++++--- test/2byteJob1_2022_04_12_13_32_10.TST | 27 ++++++ test/2byteJob1_2022_04_12_13_32_10.bin | Bin 0 -> 40960 bytes test/4byteJob1_2022_04_12_13_31_47.TST | 27 ++++++ test/4byteJob1_2022_04_12_13_31_47.bin | Bin 0 -> 40960 bytes test/8byteJob1_2022_04_12_13_31_23.TST | 27 ++++++ test/8byteJob1_2022_04_12_13_31_23.bin | Bin 0 -> 45056 bytes 9 files changed, 188 insertions(+), 16 deletions(-) create mode 100644 test/2byteJob1_2022_04_12_13_32_10.TST create mode 100644 test/2byteJob1_2022_04_12_13_32_10.bin create mode 100644 test/4byteJob1_2022_04_12_13_31_47.TST create mode 100644 test/4byteJob1_2022_04_12_13_31_47.bin create mode 100644 test/8byteJob1_2022_04_12_13_31_23.TST create mode 100644 test/8byteJob1_2022_04_12_13_31_23.bin diff --git a/apread/apreader.py b/apread/apreader.py index c1ec566..e466a25 100644 --- a/apread/apreader.py +++ b/apread/apreader.py @@ -38,7 +38,7 @@ class APReader: """ Groups: List[Group] - def __init__(self, path, verbose=False, filterData=False): + def __init__(self, path, verbose=False, filterData=False, fastload=False): """Creates a new APReader based on a .binary file (path). Args: @@ -48,6 +48,7 @@ def __init__(self, path, verbose=False, filterData=False): """ self.verbose = verbose self.filterData = filterData + self.fastload = fastload self.filepath = path self.fileName = os.path.splitext(os.path.basename(path))[0] self.Channels = [] @@ -255,7 +256,7 @@ def read(self): for i in range(self.numChannels): # create new channel on top of reader #! be careful with current stream position - channel = Channel(reader, self.fileName, self.verbose, self.filterData) + channel = Channel(reader, self.fileName, self.verbose, self.filterData, self.fastload) if not channel.broken and channel.length > 0: self.Channels.append(channel) diff --git a/apread/binaryReader.py b/apread/binaryReader.py index 894b28b..a2c47cb 100644 --- a/apread/binaryReader.py +++ b/apread/binaryReader.py @@ -51,7 +51,7 @@ def read_chars(self, size, encoding: str = "utf-8"): return ret.decode(encoding) def read_char(self, encoding: str = "ascii"): return struct.unpack(self.endian + "c", self.read(1))[0].decode(encoding) - def read_single(self) -> int: + def read_byte(self) -> int: return struct.unpack(self.endian + "b", self.read(1))[0] def read_int16(self) -> int: @@ -60,6 +60,9 @@ def read_int16(self) -> int: def read_int32(self) -> int: return struct.unpack(self.endian + "i", self.read(4))[0] + def read_float(self) -> float: + return struct.unpack(self.endian + "f", self.read(4))[0] + def read_double(self) -> float: return struct.unpack(self.endian + "d", self.read(8))[0] # Aliases diff --git a/apread/entries.py b/apread/entries.py index 5441c9d..cad646f 100644 --- a/apread/entries.py +++ b/apread/entries.py @@ -14,7 +14,7 @@ # progress from tqdm import tqdm from apread.loader import Loader - +import numpy as np # filtering from scipy.signal import lfilter @@ -33,17 +33,18 @@ class Channel: If there is more than one channel having the same amount of entries, every channel will get the same reference to the time channel. """ - data: List[float] + # data: List[float] verbose: bool # Defines if data should be filtered. filterData: bool - def __init__(self, reader: BinaryReader, fileName='unknown', verbose=False, filterData=False): + def __init__(self, reader: BinaryReader, fileName='unknown', verbose=False, filterData=False, fastload=False): """ Creates the Channel. Uses a reader (BinaryReader) to read the data from the file accessed by "APReader.__init__". """ + self.fastload = fastload # defines, if the apreader should output verbose debug messages self.verbose = verbose # defines, wether read data should be filtered @@ -80,14 +81,23 @@ def __init__(self, reader: BinaryReader, fileName='unknown', verbose=False, filt self.dw = reader.read_int16() # time of reading self.time = reader.read_double() - # extended channel header (mostly unused) - self.header = reader.read(reader.read_int32()) + # extended channel header + self.nHdrbytes = reader.read_int32() + self.extHeader = self.readExtHeader(reader) + + precDict = {0:8, 1:4, 2:2} # key: Attribute "Exportformat", value: precision in bytes + try: + self.precision = precDict[self.extHeader['ExportFormat']] + except KeyError: + print('Unexpected value of attribute "ExportFormat" in the extended header of channel {}. Assuming double precision.'.format(self.Name)) + self.precision = 8 + # linearization mode self.lmode = reader.read_char() # user scale self.scale = reader.read_char() # unknown points - self.npoi = reader.read_single() + self.npoi = reader.read_byte() # readaway for i in range(self.npoi): reader.read_double() @@ -101,8 +111,63 @@ def __init__(self, reader: BinaryReader, fileName='unknown', verbose=False, filt # flag to indicate that everything is fine self.broken = False - + def readExtHeader(self, rdr: BinaryReader): + """ + Reads the extended header of this Channel. + + NOTE: At the time of writing (April 14th 2022), there seems to be + an error in the format documentation, as given in the Catman + installation directory: + + "C:\Program Files (x86)\HBM\catmanEasy\Infos\catmanBinaryFormat.xls" + + The error occurs somewhere between the attributes "HPFilt" + and "NominalRange". I've compensated for this error by moving + the transcription window ahead by three bytes. + + """ + + exthdr = {} + exthdr['T0'] = rdr.read_double() + exthdr['dt'] = rdr.read_double() + exthdr['SensorType'] = rdr.read_int16() + exthdr['SupplyVoltage'] = rdr.read_int16() + + exthdr['FiltChar'] = rdr.read_int16() + exthdr['FiltFreq'] = rdr.read_int16() + exthdr['TareVal'] = rdr.read_float() + exthdr['ZeroVal'] = rdr.read_float() + exthdr['MeasRange'] = rdr.read_float() + exthdr['InChar'] = [rdr.read_float() for i in range(4)] + + exthdr['SerNo'] = rdr.read_string(32) + exthdr['PhysUnit'] = rdr.read_string(8) + exthdr['NativeUnit'] = rdr.read_string(8) + + exthdr['Slot'] = rdr.read_int16() + exthdr['SubSlot'] = rdr.read_int16() + exthdr['AmpType'] = rdr.read_int16() + exthdr['APType'] = rdr.read_int16() + exthdr['kFactor'] = rdr.read_float() + exthdr['bFactor'] = rdr.read_float() + + exthdr['MeasSig'] = rdr.read_int16() + exthdr['AmpInput'] = rdr.read_int16() + exthdr['HPFilt'] = rdr.read_int16() + exthdr['OLImportInfo'] = rdr.read_byte() + exthdr['ScaleType'] = rdr.read_byte() + exthdr['SoftwareTareVal'] = rdr.read_float() + reserve = rdr.read_string(3) + exthdr['WriteProtected'] = rdr.read_byte() + + exthdr['NominalRange'] = rdr.read_float() + exthdr['CLCFactor'] = rdr.read_float() + exthdr['Exportformat'] = rdr.read_byte() + # reserve = rdr.read_string(10) + reserve = rdr.read_string(7) + + return exthdr def readData(self): """ @@ -114,12 +179,34 @@ def readData(self): # if something was wrong previously, nothing will happen here if self.broken: return - - # initialize data - self.data = [] - # read all channel data - for i in tqdm(range(self.length), leave=False): - self.data.append(self.reader.read_double()) + + if self.fastload: + # The data is stored channelwise. We therefore only need to pass pointers to the first and last byte. + if self.precision == 8 or self.precision == 4: + self.data = np.fromfile(self.reader.buf, dtype=np.dtype('f{}'.format(self.precision)), count=self.length) + elif self.precision == 2: + MinValue = self.reader.read_double() + MaxValue = self.reader.read_double() + sf = (MaxValue - MinValue)/32767 # scale factor + self.data = np.fromfile(self.reader.buf, dtype=np.dtype('u2'), count=self.length)*sf + MinValue + else: + # initialize data + self.data = [] + + # read all channel data + if self.precision == 8: + for i in tqdm(range(self.length), leave=False): + self.data.append(self.reader.read_double()) + elif self.precision == 4: + for i in tqdm(range(self.length), leave=False): + self.data.append(self.reader.read_float()) + elif self.precision == 2: + MinValue = self.reader.read_double() + MaxValue = self.reader.read_double() + sf = (MaxValue - MinValue)/32767 # scale factor + + for i in tqdm(range(self.length), leave=False): + self.data.append(self.reader.read_int16()*sf + MinValue) # filter data if self.filterData: diff --git a/test/2byteJob1_2022_04_12_13_32_10.TST b/test/2byteJob1_2022_04_12_13_32_10.TST new file mode 100644 index 0000000..1d0735e --- /dev/null +++ b/test/2byteJob1_2022_04_12_13_32_10.TST @@ -0,0 +1,27 @@ +CATMAN TEST FILE +PATH=C:\Users\sommer\Documents\HBM\catmanEasy\DATA\2022\Precision 4byte vs 8byte +Job name=Job1 +Data file with path=C:\Users\sommer\Documents\HBM\catmanEasy\DATA\2022\Precision 4byte vs 8byte\2byteJob1_2022_04_12_13_32_10.bin +Data file=2byteJob1_2022_04_12_13_32_10.bin +DAQ project=Precision 4byte vs 8byte.MEP +File comment= +Time zone=Mitteleuropäische Sommerzeit (UTC+2:00) +Bearbeiter= +Abteilung= +Kommentar= +Default sample rate=300 Hz +Slow sample rate=10 Hz +Fast sample rate=4800 Hz +Number of samples default sample rate=100 +Number of samples slow sample rate=0 +Number of samples fast sample rate=0 +Saving mode=AUTO +Master/Slave mode=No +Start mode=Manual +Start time=2022/04/12 13:32:09 +Stop mode=Number of samples +Stop time=2022/04/12 13:32:10 +catmanEasy/AP version=5.5.2.8 +Numerical precision=2 Byte Integer +Firmware MX840A=4.40.6.0 +DATAFILE=C:\Users\sommer\Documents\HBM\catmanEasy\DATA\2022\Precision 4byte vs 8byte\2byteJob1_2022_04_12_13_32_10.bin diff --git a/test/2byteJob1_2022_04_12_13_32_10.bin b/test/2byteJob1_2022_04_12_13_32_10.bin new file mode 100644 index 0000000000000000000000000000000000000000..5639eb7bae6f8111c413054b17a7ca038dd99df3 GIT binary patch literal 40960 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 literal 0 HcmV?d00001 diff --git a/test/4byteJob1_2022_04_12_13_31_47.TST b/test/4byteJob1_2022_04_12_13_31_47.TST new file mode 100644 index 0000000..0b101af --- /dev/null +++ b/test/4byteJob1_2022_04_12_13_31_47.TST @@ -0,0 +1,27 @@ +CATMAN TEST FILE +PATH=C:\Users\sommer\Documents\HBM\catmanEasy\DATA\2022\Precision 4byte vs 8byte +Job name=Job1 +Data file with path=C:\Users\sommer\Documents\HBM\catmanEasy\DATA\2022\Precision 4byte vs 8byte\4byteJob1_2022_04_12_13_31_47.bin +Data file=4byteJob1_2022_04_12_13_31_47.bin +DAQ project=Precision 4byte vs 8byte.MEP +File comment= +Time zone=Mitteleuropäische Sommerzeit (UTC+2:00) +Bearbeiter= +Abteilung= +Kommentar= +Default sample rate=300 Hz +Slow sample rate=10 Hz +Fast sample rate=4800 Hz +Number of samples default sample rate=100 +Number of samples slow sample rate=0 +Number of samples fast sample rate=0 +Saving mode=AUTO +Master/Slave mode=No +Start mode=Manual +Start time=2022/04/12 13:31:47 +Stop mode=Number of samples +Stop time=2022/04/12 13:31:47 +catmanEasy/AP version=5.5.2.8 +Numerical precision=4 Byte Float +Firmware MX840A=4.40.6.0 +DATAFILE=C:\Users\sommer\Documents\HBM\catmanEasy\DATA\2022\Precision 4byte vs 8byte\4byteJob1_2022_04_12_13_31_47.bin diff --git a/test/4byteJob1_2022_04_12_13_31_47.bin b/test/4byteJob1_2022_04_12_13_31_47.bin new file mode 100644 index 0000000000000000000000000000000000000000..78c4f0e12c12fd54c990c7d7d941e69cc555f02f GIT binary patch literal 40960 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 ix2A+jD;kb+Aj*L#2cjH^av;iqC^P$-Q literal 0 HcmV?d00001 diff --git a/test/8byteJob1_2022_04_12_13_31_23.TST b/test/8byteJob1_2022_04_12_13_31_23.TST new file mode 100644 index 0000000..e561e6d --- /dev/null +++ b/test/8byteJob1_2022_04_12_13_31_23.TST @@ -0,0 +1,27 @@ +CATMAN TEST FILE +PATH=C:\Users\sommer\Documents\HBM\catmanEasy\DATA\2022\Precision 4byte vs 8byte +Job name=Job1 +Data file with path=C:\Users\sommer\Documents\HBM\catmanEasy\DATA\2022\Precision 4byte vs 8byte\8byteJob1_2022_04_12_13_31_23.bin +Data file=8byteJob1_2022_04_12_13_31_23.bin +DAQ project=Precision 4byte vs 8byte.MEP +File comment= +Time zone=Mitteleuropäische Sommerzeit (UTC+2:00) +Bearbeiter= +Abteilung= +Kommentar= +Default sample rate=300 Hz +Slow sample rate=10 Hz +Fast sample rate=4800 Hz +Number of samples default sample rate=100 +Number of samples slow sample rate=0 +Number of samples fast sample rate=0 +Saving mode=AUTO +Master/Slave mode=No +Start mode=Manual +Start time=2022/04/12 13:31:23 +Stop mode=Number of samples +Stop time=2022/04/12 13:31:23 +catmanEasy/AP version=5.5.2.8 +Numerical precision=8 Byte Float +Firmware MX840A=4.40.6.0 +DATAFILE=C:\Users\sommer\Documents\HBM\catmanEasy\DATA\2022\Precision 4byte vs 8byte\8byteJob1_2022_04_12_13_31_23.bin diff --git a/test/8byteJob1_2022_04_12_13_31_23.bin b/test/8byteJob1_2022_04_12_13_31_23.bin new file mode 100644 index 0000000000000000000000000000000000000000..b34b3506519fb5913b243652f58d3d91f4f2f92f GIT binary patch literal 45056 zcmeHQ31Aad`X8VIR#;HvaJh#5ML~h)ZmKaPO&X|j*#l8`Z9?2Tf=-oXFbZPif6WB(*!@2p>lEg}fA2OEge%(%!qYtkA+4Vv?9LX1F}Z@! zp+FE`xIz$CdWkAD6H4KvyHMyUcZ;H0>@SwO%UspofarIXS9#r{&lPYt6a2_-Ewquo zX!XMfUt8{ilyVNI(%iY}7Qk8$G0Ee|3dLx43lS_VLT`i?Ahc6Pl6BQUPb1^B6sjr% z9{so$!tk->sJUi4%$tixx@Bs!bYZ5j0NW8hez7TMf&k~1Zn@dHdX-9Tv*pxKDT<&X z$|)b2ITBBxU&6B;qFUn5L;-b@ta-!^f^dIZi^Vi>V!2lw@AmmUl@%9cs0XMrM0Z6= zWvQoP%mo=mg^vEljDcp8t+JxRT@tADsm-RLm8EX6WNf9U#C<`AwZi4C9FtdJ8|wmw zH^Xd7keE#c?h1dUPr<;Xs%YsEl>v7}z*AZ74!C_#HZE;8<-7eJf525y;x>ah2B=J# zF%na**IknDsu<&jCV48%{fVN&!<2~v(@@t$E~f|~ZOV)(He&1~f2;;gjVj`$q$8%_ zB_1D`%B(kKhR;lPpQkKft1PdAe!HM^(2{)jzpCB-K*VZxzJ#F1;j>I=SeOLHuJ-xB zECm6$vLZ#S)qzTD>6O*~0NOZ`K;2dDfCuZrOVq3-E5(USnX&xLSoKhC4b9C=7>7(A zLL536#uAqod#s$q4d`WVUu8j+s{-1noSJE%FlB}z3=ahk0*NRSOT>*7W|Po_mZr0~ zQHV%QnbB%8!!6@xDk-yRILvNurK>by=5n8uOlWYt07nF8I)K9Ao&HTVrp&lWl2?jL zZy8KxUZZ&W!)&&}K*OQcT61i6n??(hj8<^S3ST3`T(Hn6VonToRaA$?(bEFA&*SnA zt1chyhG`3GVv~iinox-X+tB_6gZjfY04-F6CY#F(^A)R!oWV&RToj;ynJqaxFApJ$AxVt5%5V2y}Nn}$~hs;UF|*i9|o-*6F#k(nGGFWeW= zCXw5~kje>FF25gY4xgEc1-Dc>1l!o!85I5S;rnq$M=;Qi-Oov~c^zg%F ze{6>zZccR^ekgg&hd=Dk#$DL4vRbZe^h$=8mHFM^Bow-QV*qIc=n@YLOkqMaLn)D0 zG1fC0{0o?=$|*ZK3V|01ave;LO0Tza0x!{Y{l}&w9tt@a5f24cJaS3Mx4`v}9TW#F zA>gS)5I_ek3@kW&OT)_*x1Ogi-mQE4~55#sozN02GJ|V!`f_czg5{b9n`HHI{5ib zr`M@<8kIw5%r!dfDyuCV0~-z5a9c1!X;qd=r7@}uR%4b!qq3@vS-B2%meyd%)!Lzi zR+X)_>*3y;1)8($cC9VPkeg+7SnYOAE~c_Hq(}!!)bIxaY*70rQV@J=8+F*(2pgAt zB&^n{VN76D3>uwQCyL;A9@9wJU*(?caeKXPpJ=Tvt8kAkcl(lviQ&$A*qB(S%7&jP zk4IR1WY0r!<&zAUnoPK?If`&u)40OrxF414IPOg+P>v3K@`184@C_X(*LJD@g#&2v zN)Cyi(IGiu!sq@Fwa`I74IUCdM|1yl^c?d;LPJK+ntF?#TT=AgL8#%EzGlKO3`>tH zVjd_6lkK%d%)>ZfjzrA(-1vwQv!$B@TNW2F=be&##H>BBB4+v_Co;n$F?WJE6*brQ zv*ZSinpN=21|IyZHQ^C54s~P#oM>UQI{WZ(^RW61o0AWtc=as4D7=sz^Drujkm<1T z63n3E5iHekqp72(++-po?NLNX+Qt*RwXWvm-ID5~+2{tHJ!e4{xe z6oPxq@rZ=rks0m~#7%L^so6Br<*jy`HTr1C!V*~1!}RDgwi&U@QfsSXmk#p&X~A=RAaQm11sQZ;b%0P+MuPqqgcwSGHMN0mCX)YOznDuDo2&0 zS8M;w6R^WQE7R(8@P!JE@-)q%(-^dBcs`eUURI}Pa><8#2A&;ihs~x@=N$X}qe+B& zM|whboFcyH?Z1xRf0GIHbVm{B=^9s{chrO4bV9!9s3#xtDWl%dAz$q9{*@!WMz(2G z3Epam^`gJ))?1{ftG7t6HAQ--2t!A~%Qn_x+h9@OOc;reXpa2!=!rvK6cnvkiVr*& zt+hQpqPGL#wx{4pQ22;Xk3c8skKJ!sk)C{@r?1yQZ)Bx6;Gzwe;j_dYm$bpX);*WJ z4IcbXU@C72#>#5jbs5V&Ys` zz8GVv8ul;7gZmBuddj(Ft^U)uu}vB{%*i!XVv9K6e8 zx_2!JFTAlmbctD)Q$F~S-`>(6g%7T8Tt0Xmhq~!_-qEp6-t$(*x}iPqxJ&u3?0U!F zhLkt7@HV8Jn;PzIt%h~H_4Vd>pG=N-JAC;m`k9Gh^>K5)Th_(-ey9#lSqv%X8{S4f zCg0&mIo}C$i``1)8yOIl#0!%8jz;{d2TnM>m)h8zZ}??9i5G{m)GE93;*b^ICQ@D; zqBnw6+N>OVuFYz&X4xI^Mvx}QuCb}Il6x6Qc@(0x*6A1iRH0fdkbJO}%@4TLxprH& z-f-+6ft;u>4#nQJ>*%jHna3lBqX^9mjVm;Z^VjM)?oB67iw=D9ahfvl4IQV&jc_r1 z8YLC0;dTi4=~4N_M_s?H(Xg?aq26M(^l+?Zw~6EV$9_?*5=S1lSgloEVzn7{cu4g;*_l-`#F2R;!f9rLnJ?*tj6V`7iDWj^*Gq`&mUq-^6L#v$2X4-dGfxwGUN^In;&vj zr+o9jq;H;8Z@&2{D-I3RwKxw%mOCq8-Jwt0Hom*ax{gbQhx5&aP@ zg79*!Uydv1FP@9z;G<&rCTZ(h9Q5{@+lP|+*quzR>hQ^PV}cWv;EpHhpxY{|EBIsQ z;WN-4_n|n=0JSblXVkgRRT*mC&;(?fn_;rDCn-T(+qNd{02S<)SE)dYF=l5}f;jQj z_ySFC#b_^n;xT+?a_AIE_{@}7QR<$k2%`y>+dbnw_+@wq|0zpJH>xK$kx^=pZBzJV zK0IoCe_d;cZgXs8+orVY8oz*!*DCL(s_hHtS{2;pl>JfgB3F0|6>gj=Kg{>f=_8AE z`u;hYIQ&O#R~cQIDUAQw}4% zjbe?w5rfh!HGEV~t;#VP)oKlXPaSK3=Rywro}5Z+tmSD$Dmy6)Bp(3gDi3dR)q0)g z*gw2UV&@!%qwuRnO1ycmV&ouw?(G zFy&v!s*iBdk1-+~O1OA>UBbos`5R{Ss-PBlm${2NLe6dfs_SO7D!njWr36h zQWi*AAZ3A+1yUAhau$G}yjD&fHf|u}6!;ebgi)I&Ums3SN9=Lxsdt3scMU8mD!OC- zmV3ha51>3Pf6>EX-lLd*{?Bhc7Un;J^1zDBIpK0oq5S##?t3O&ejduVd0IRd*7H23 z+dpLZPgvi4l=r`3*Zi>F7g3&9F1-}i|1!$Uii#Etgn!u{>iI9que%_9A+4)wl*^4Ho1UPU?ddojxYx3AA@D2H~uj`DpQH@=Q?=+_%4Kke;VOAw)5GRT9S zKY3h69@u3m$Up9V(bY?l5A9qE@^f@cMlC}=*kKv+bF|twkq_;D6Zs>aYP%fyVCUt? zFYda1Ir5<&Zy~?@wqq z=;yo0pHtj#1;`IRci(+0kiX!=mMf7D{a%UuHwSH6iG1k)d&pnAc=3D4->|RGD&&VU zXRks&*yDZV?|!`MedL2(-bem#oiF+T`7QDneSrK^ZtcAq`CzBj&`!CHAgsYO*lP{s z@9c11`5NpO*bU_!y9Pc*IofY6$SoPq4_b?Q!H#P|er4b7FQXjoiSoNu85!%a91^C9X7dw+=fho*mma}%5&al z-hs_rZoit)dEWi3FK062<#Pz7os3S;t;DnJok8V;MeRtRw8zML@Bas()Al5%%NH|m z|KGX3d1q4j(6;MHuXENcLSffbuIIdkgz_D^#1sBKl*(Dk9$*YkWxd{oTu+x9I6dPO zLMdb;o^$_HuE+lx*YnF0tpCcjgqA&@6N;lc5zpzDxW2U}uBSWOFSPPf);}kYFxV-J zG3_4WNsoR)<;2ye5eC=KX8qURPUxIl>g&5Qfh65l>n?n9KchGU*Yvilo;vdIHzC zzm!mXW+S)fylI5Nd>hwOwwd+jvb{pTy-Vp}cebm%sweS6Z&h$T=~-M)*0tRJ?GF=% zwy6ju?+(frf4!J6^zD4EXZO#f*XjS1+yDKegmT;ea(c(#i0AC}0ikqWHS1aYCF}8Z zCH?Z!0j6&Ra3iIK;PnHR;`~ox$_}Y{kh%_1>p*H9NMapup7zJDOMowKzL7AP*7r9| z2YXlv<+H!y{2|{GhI+e5?tGvPVW|0Hk~_PpC@nU#5DJex%KS&(WnAqcdC-1<(!pmX zLUFl`udQQr_XqT(7C$<$;GbS2}2JoB)PozCqi*@ z73)2V^^0rRE^_{vtk2DQg^3%8A6l@J(2{>8ZGvTzNT-~LaM%g^>Aw4`zWEuZTtExp3!rGu-P zfAfcg!6hS^|H6Jsi@O#ON*i*y+*qC$;uSkcEkkuP66E*#5rTF}`qK(U#)f(5hw>Cp+J6c{^Swa(UaA z5JS`QpG9=G3J_oT{uJWN*3QHa-TS}Wh_|UV@hz%i;)hB`5nn27$@Yx z_9C`RSTU9O!Sa)dA1r2maFUtZ-)G-U*p7`Qo=F5LnGXKdD+#dgr+~12|C%$y&FydRz+r#?ry@vRq%i0j% z((GH}OQ99q9_gogGx06&teS!Lan9aOd}q&f+@7=@#1GEh%KCfFCVnt? zI`QSXTev+hgorOYZX>=VZ6dyK<^#l+M~-FwsxO&;)pp{CvYpHy^(D7w)Li0=PpgS9 z?%qiJ;Dh^#FZqnb7t=o@zO!HfxBuZ?x6=4(K4QM_58_)&56r;+hBO;k|MfEQgEzlT z{NU*7URX}vZ%|YDZ&vgsobpr)#9-wse;WuWSnm4O3=rz{c^8xmC3+R%lehIDJbmfj zH$W^sG@uLeEg|W9;(MRzMESFO^h1<_`o4(H77y+r{wX(gC;q{Qn<2`@^Qb*y`o+W# zX74)_`Qnz}(+J;Keg^WyXWnl`xYgGa<(8EO=I>g~<=bR5M|p6?s*c2)yXREGlZSRg zxwv3DwO`73o%B1OEeK(IEHis{LSFFK#p#IBPp@`FzEjmP6H$6oAp3+mPH2Jo7R%%w zh`}4CZN&ac1Agd?Jj+vmoQ)`dGl)zvV#+9S#v&!O^pLx~^ka|_#N z@GTpVZ@K0pYLBzU-v=Pi*-uY=*|7ZJ8(43Ks~fdr&3iPy((CtUAWv$wgXV$!srY}C zKJd)RRDN{ZuEcNmJGDzrznlB}<(WL+N?kNw@}P&vp5mLgo=*HW-N`;n6=}5=?;E!F% z-a*Y$u7BI!Z?U{QcUWJnUw(K#wKq6@?rF%Et}SDG7mla)Th>3fpZJfy*a!KRJ3F^W zbk4q%^gDO0Aigj&kNDERzuSWRP;e0G7qoAL`BP6t{ldX%%%8TsE2iZOmp@GWk>)c| zZ|M5_S|Ez+x>9>WPw(zeye?D7KH_7S>_EQw#a`lz*H3SWeCLxBTO&{S<0iVUrDc99 zAAI6enji8roq8ir*m5rMrMqrwi~OJ|i^sjkR=Qq-m;6HdL*w4*h5XQ>wzPgopQW9I z{LqvsG;f2_Y|<|->%8*~kPFw|*%SHFU9$zm;N}~@LV4(;Q)wJS+dkv#Q8#@z$t_;u z3&It2y^71P+=~5@W=*Ae724(Kfc42g-AmVpC1WS?gYBO0jQT^bE+M;y#+4G^a=Di5 z>GYk`4$C<&86+Z4da-LKM0xrv)Go{NZM5!$-qVpig*#@qC%#(G>zUYr_>$)CG%RN+ zKZ)kOaA996Cm*6jI%&~3R8AS&4YyNpwE?` zEgN!hc4WCNQ4)Jmc$I7)N#u5%2qp8E?LcF=GkiYx@|B`fVcK zccU3^x{tBf8pg#fzoPuY3mCukGftb!C~jhWwex1;6%1qi=6c2(7c=(!fpJlvEyT+& zX54i*;|;4Ad$jnP@)u?^UR=eva}MKm8yUNwzLj|Yy^wLlRK^_(8L!>V*sb?A;w`wG zao8-z?e8*9J;>PAu$_1>dl`p5&baM=jKTIhDF2K>j4xfqIOJu9v!1T}Cm! zIFs?Bw-~ql%6PSA7x6lK80SC2c;R}+&27G+{Htt?ohCEB@E^v!ZH!-a|CV_FE@bRD zo$>jljDvq-+%#Y}@g}<&Pk)f{xpj<#PX3PaLjxHnjc4re9OJW_8FT;sJ@LLA!8mam z1;1Z#DmvTlF3w7C~x#63x=o?Iu|o?{z9!5=SeQ dPFWyjfs_SO7D!njWr36hQWi*Aps`!v{{iYyCCUH* literal 0 HcmV?d00001 From e1d95cc3c888e08a2d3fa7ac88d9dfb9d0dfe0a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Line?= Date: Thu, 14 Apr 2022 10:46:19 +0200 Subject: [PATCH 2/7] Parameter names. Error handling in reading of extended header. --- apread/entries.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/apread/entries.py b/apread/entries.py index cad646f..2d5aa73 100644 --- a/apread/entries.py +++ b/apread/entries.py @@ -82,7 +82,7 @@ def __init__(self, reader: BinaryReader, fileName='unknown', verbose=False, filt # time of reading self.time = reader.read_double() # extended channel header - self.nHdrbytes = reader.read_int32() + self.nHdrBytes = reader.read_int32() self.extHeader = self.readExtHeader(reader) precDict = {0:8, 1:4, 2:2} # key: Attribute "Exportformat", value: precision in bytes @@ -127,7 +127,8 @@ def readExtHeader(self, rdr: BinaryReader): the transcription window ahead by three bytes. """ - + pos0 = rdr.tell() + exthdr = {} exthdr['T0'] = rdr.read_double() exthdr['dt'] = rdr.read_double() @@ -163,9 +164,25 @@ def readExtHeader(self, rdr: BinaryReader): exthdr['NominalRange'] = rdr.read_float() exthdr['CLCFactor'] = rdr.read_float() - exthdr['Exportformat'] = rdr.read_byte() + exthdr['ExportFormat'] = rdr.read_byte() # reserve = rdr.read_string(10) reserve = rdr.read_string(7) + posN = rdr.tell() + + if (posN-pos0) != self.nHdrBytes: + print(""" + WARNING: + The number of bytes read in the extended header of the channel + '{}' + doesn't match its declared length. + This probably means that the hardcoded format definition in the method + 'entries.readExtHeader' is no longer valid and must be revised. + Dumping the information already read from the extended header of this + channel and carrying on reading the metadata. + Precision will be set to double. + """.format(self.Name)) + rdr.seek(pos0 + self.nHdrBytes) + exthdr = {} return exthdr From 0c4d04faa891e90555cca9a3c891aa3b3c2f9abd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Line?= Date: Tue, 19 Apr 2022 11:09:56 +0200 Subject: [PATCH 3/7] Changed error handling when reading extended header The code now sets the attribute "ExportFormat" to zero instead of throwing away the entire extended header. --- apread/entries.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/apread/entries.py b/apread/entries.py index 2d5aa73..6473212 100644 --- a/apread/entries.py +++ b/apread/entries.py @@ -177,12 +177,11 @@ def readExtHeader(self, rdr: BinaryReader): doesn't match its declared length. This probably means that the hardcoded format definition in the method 'entries.readExtHeader' is no longer valid and must be revised. - Dumping the information already read from the extended header of this - channel and carrying on reading the metadata. - Precision will be set to double. + Leaving the extended header as-is and resetting the read position of + the binary reader. Assuming double precision for the data. """.format(self.Name)) rdr.seek(pos0 + self.nHdrBytes) - exthdr = {} + exthdr['ExportFormat'] = 0 return exthdr From 80a589429ec3d64ea086a535fec20885cb85a56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Line?= Date: Wed, 20 Apr 2022 12:48:40 +0200 Subject: [PATCH 4/7] Updated descriptive text on method "entries.readExtHeader" --- apread/entries.py | 81 ++++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/apread/entries.py b/apread/entries.py index 6473212..b37b10e 100644 --- a/apread/entries.py +++ b/apread/entries.py @@ -116,57 +116,58 @@ def readExtHeader(self, rdr: BinaryReader): """ Reads the extended header of this Channel. - NOTE: At the time of writing (April 14th 2022), there seems to be - an error in the format documentation, as given in the Catman - installation directory: + NOTE: The catman binary files use byte padding, which means that all + values are stored at byte addresses which are integer multiples of their + width in bytes (i.e. doubles are stored on addresses divisible by eight, + floats divisible by four etc.) - "C:\Program Files (x86)\HBM\catmanEasy\Infos\catmanBinaryFormat.xls" + See the link below for more info: + https://stackoverflow.com/questions/4306186/structure-padding-and-packing - The error occurs somewhere between the attributes "HPFilt" - and "NominalRange". I've compensated for this error by moving - the transcription window ahead by three bytes. + For this reasen, I've added three bytes of padding before the attribute + 'NominalRange', which is a float. """ - pos0 = rdr.tell() + pos0 = rdr.tell() # In general not a multiple of eight, which is unexpected! exthdr = {} - exthdr['T0'] = rdr.read_double() - exthdr['dt'] = rdr.read_double() - exthdr['SensorType'] = rdr.read_int16() - exthdr['SupplyVoltage'] = rdr.read_int16() + exthdr['T0'] = rdr.read_double() # 8 + exthdr['dt'] = rdr.read_double() # 16 + exthdr['SensorType'] = rdr.read_int16() # 18 + exthdr['SupplyVoltage'] = rdr.read_int16() # 20 - exthdr['FiltChar'] = rdr.read_int16() - exthdr['FiltFreq'] = rdr.read_int16() - exthdr['TareVal'] = rdr.read_float() - exthdr['ZeroVal'] = rdr.read_float() - exthdr['MeasRange'] = rdr.read_float() - exthdr['InChar'] = [rdr.read_float() for i in range(4)] + exthdr['FiltChar'] = rdr.read_int16() # 22 + exthdr['FiltFreq'] = rdr.read_int16() # 24 + exthdr['TareVal'] = rdr.read_float() # 28 + exthdr['ZeroVal'] = rdr.read_float() # 32 + exthdr['MeasRange'] = rdr.read_float() # 36 + exthdr['InChar'] = [rdr.read_float() for i in range(4)] # 40, 44, 48, 52 - exthdr['SerNo'] = rdr.read_string(32) - exthdr['PhysUnit'] = rdr.read_string(8) - exthdr['NativeUnit'] = rdr.read_string(8) + exthdr['SerNo'] = rdr.read_string(32) # 84 + exthdr['PhysUnit'] = rdr.read_string(8) # 92 + exthdr['NativeUnit'] = rdr.read_string(8) # 100 - exthdr['Slot'] = rdr.read_int16() - exthdr['SubSlot'] = rdr.read_int16() - exthdr['AmpType'] = rdr.read_int16() - exthdr['APType'] = rdr.read_int16() - exthdr['kFactor'] = rdr.read_float() - exthdr['bFactor'] = rdr.read_float() + exthdr['Slot'] = rdr.read_int16() # 102 + exthdr['SubSlot'] = rdr.read_int16() # 104 + exthdr['AmpType'] = rdr.read_int16() # 106 + exthdr['APType'] = rdr.read_int16() # 108 + exthdr['kFactor'] = rdr.read_float() # 112 + exthdr['bFactor'] = rdr.read_float() # 116 - exthdr['MeasSig'] = rdr.read_int16() - exthdr['AmpInput'] = rdr.read_int16() - exthdr['HPFilt'] = rdr.read_int16() - exthdr['OLImportInfo'] = rdr.read_byte() - exthdr['ScaleType'] = rdr.read_byte() - exthdr['SoftwareTareVal'] = rdr.read_float() - reserve = rdr.read_string(3) - exthdr['WriteProtected'] = rdr.read_byte() + exthdr['MeasSig'] = rdr.read_int16() # 118 + exthdr['AmpInput'] = rdr.read_int16() # 120 + exthdr['HPFilt'] = rdr.read_int16() # 122 + exthdr['OLImportInfo'] = rdr.read_byte() # 123 + exthdr['ScaleType'] = rdr.read_byte() # 124 + exthdr['SoftwareTareVal'] = rdr.read_float() # 128 + exthdr['WriteProtected'] = rdr.read_byte() # 129 + padding = rdr.read_string(3) # 132 - exthdr['NominalRange'] = rdr.read_float() - exthdr['CLCFactor'] = rdr.read_float() - exthdr['ExportFormat'] = rdr.read_byte() - # reserve = rdr.read_string(10) - reserve = rdr.read_string(7) + exthdr['NominalRange'] = rdr.read_float() # 136 + exthdr['CLCFactor'] = rdr.read_float() # 140 + exthdr['ExportFormat'] = rdr.read_byte() # 141 + reserve = rdr.read_string(7) # 148 + # reserve = rdr.read_string(10) posN = rdr.tell() if (posN-pos0) != self.nHdrBytes: From 58e5423c364365f54d60e037be113cd3f73397ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Line?= Date: Fri, 22 Apr 2022 14:29:52 +0200 Subject: [PATCH 5/7] Fixed some typos in the comments --- apread/entries.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apread/entries.py b/apread/entries.py index b37b10e..886cd92 100644 --- a/apread/entries.py +++ b/apread/entries.py @@ -119,19 +119,19 @@ def readExtHeader(self, rdr: BinaryReader): NOTE: The catman binary files use byte padding, which means that all values are stored at byte addresses which are integer multiples of their width in bytes (i.e. doubles are stored on addresses divisible by eight, - floats divisible by four etc.) + floats on addresses divisible by four etc.) See the link below for more info: https://stackoverflow.com/questions/4306186/structure-padding-and-packing - For this reasen, I've added three bytes of padding before the attribute + For this reason, I've added three bytes of padding before the attribute 'NominalRange', which is a float. """ pos0 = rdr.tell() # In general not a multiple of eight, which is unexpected! exthdr = {} - exthdr['T0'] = rdr.read_double() # 8 + exthdr['T0'] = rdr.read_double() # (pos0+) 8 exthdr['dt'] = rdr.read_double() # 16 exthdr['SensorType'] = rdr.read_int16() # 18 exthdr['SupplyVoltage'] = rdr.read_int16() # 20 @@ -177,7 +177,7 @@ def readExtHeader(self, rdr: BinaryReader): '{}' doesn't match its declared length. This probably means that the hardcoded format definition in the method - 'entries.readExtHeader' is no longer valid and must be revised. + 'Channel.readExtHeader' is no longer valid and must be revised. Leaving the extended header as-is and resetting the read position of the binary reader. Assuming double precision for the data. """.format(self.Name)) From 47ca3e567e82e406152988320fa8f0bcc69c67e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Line?= Date: Wed, 27 Apr 2022 09:05:49 +0200 Subject: [PATCH 6/7] Added catman binary format specification --- test/catmanBinaryFormat.xls | Bin 0 -> 47616 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/catmanBinaryFormat.xls diff --git a/test/catmanBinaryFormat.xls b/test/catmanBinaryFormat.xls new file mode 100644 index 0000000000000000000000000000000000000000..fcfb107992e145b3e679773bbcc11a6287011a4c GIT binary patch literal 47616 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 literal 0 HcmV?d00001 From 723b1430402b4c2f7fc29e369027085d3a96bfcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Line?= Date: Wed, 27 Apr 2022 10:56:05 +0200 Subject: [PATCH 7/7] Set 'fastload' with numpy as the default mode --- apread/apreader.py | 2 +- apread/entries.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apread/apreader.py b/apread/apreader.py index e466a25..2a64945 100644 --- a/apread/apreader.py +++ b/apread/apreader.py @@ -38,7 +38,7 @@ class APReader: """ Groups: List[Group] - def __init__(self, path, verbose=False, filterData=False, fastload=False): + def __init__(self, path, verbose=False, filterData=False, fastload=True): """Creates a new APReader based on a .binary file (path). Args: diff --git a/apread/entries.py b/apread/entries.py index 886cd92..19afd57 100644 --- a/apread/entries.py +++ b/apread/entries.py @@ -38,7 +38,7 @@ class Channel: # Defines if data should be filtered. filterData: bool - def __init__(self, reader: BinaryReader, fileName='unknown', verbose=False, filterData=False, fastload=False): + def __init__(self, reader: BinaryReader, fileName='unknown', verbose=False, filterData=False, fastload=True): """ Creates the Channel.