Source code for spike.File.Thermo
#!/usr/bin/env python
# encoding: utf-8
"""
Utility to Handle Thermofisher files
Marc-André from first draft by Lionel
"""
from __future__ import print_function
__author__ = "Marc André Delsuc"
__date__ = "april 2014"
import os
import unittest
import numpy as np
from ..Orbitrap import OrbiData
import re
[docs]def read_thermo(filename):
"""
reads a thermofisher orbitrap file
"""
with open(filename,'rb') as F:
param = read_param(F)
if param['Storage Type'] == 'float':
typ = 'f4'
elif param['Storage Type'] == 'double':
typ = 'f8'
elif param['Storage Type'] == 'int':
typ = 'i4'
else:
raise Exception( "Unknown Storage type : " + param['Storage Type'] )
# adapted spectralwidth
data = read_data(F,typ)
# swold = data.axis1.specwidth
swnew = float(param['Bandwidth'])
# m/z = A + B/f^2 + C/f^4
data.axis1.calibA = float(param["Source Coeff1"])
data.axis1.calibB = float(param["Source Coeff2"])*1E6 # Thermo works internally in kHz, we use Hz
data.axis1.calibC = float(param["Source Coeff3"])*1E12
data.axis1.specwidth = swnew
# data.axis1.ref_freq *= swnew/swold
return (param, data)
[docs]def read_param(F):
"""
given F, an opend file , retrieve all parameters found in file header
read_param returns values in a plain dictionnary
"""
dic = {}
for l in F:
if l.startswith("Data:"):
break
v = l.rstrip().split(':') # remove trailing chars and split around :
if len(v)<2: # comment lines
print(l)
else:
dic[v[0]] = v[1].lstrip() # metadata lines
return dic
[docs]def read_data(F, typ='float'):
"""
given F, an opened file, reads the values and
read_param returns values in a dictionnary
"""
F.seek(0)
pos = 0
for l in F:
pos += len(l)
if l.startswith("Data Points"):
print(re.findall(r'\d+', l)[0])
if l.startswith("Data:"):
break
F.seek(pos)
data_interm = np.array(np.fromfile(F, dtype=typ).tolist()) # ndarray to list to np.array
data = OrbiData(buffer = data_interm )
return data
#-----------------------------------------
[docs]def Import_1D(filename):
"""
Entry point to import 1D spectra
It returns an Orbitrap data
"""
param, data = read_thermo(filename)
data.params = param
return data
#----------------------------------------------
[docs]class Thermo_Tests(unittest.TestCase):
""" A FAIRE """
[docs] def setUp(self):
from ..Tests import filename, directory
try:
import ConfigParser
except:
import configparser as ConfigParser
rootfiles = os.getcwd()
self.verbose = 1 # verbose > 0 switches messages on
[docs] def announce(self):
if self.verbose >0:
print("\n========",self.shortDescription(),'===============')
#-------------------------------------------------
if __name__ == '__main__':
unittest.main()