from __future__ import print_function
[docs]def make_sf_adduct_database(sum_formulae, adducts, output_filename, sigma=0.001, resolution=10000, charge=1):
from pyMSpec.pyisocalc import pyisocalc
# Extract variables from config dict
# Check if already genrated and load if possible, otherwise calculate fresh
with open(output_filename, 'a') as f_out:
for sum_formula in sum_formulae:
# print sum_formula
for adduct in adducts:
try:
sf = pyisocalc.complex_to_simple(sum_formula + adduct)
if sf is None: # not possible to form adduct
continue
isotope_ms = pyisocalc.isodist(sf, plot=False, sigma=sigma, charges=charge,
resolution=resolution)
except KeyError as e:
if str(e).startswith("KeyError:"):
print(str(e))
continue
except ValueError as e:
if str(e).startswith("Element not recognised"):
print(str(e))
continue
except:
print(sf == "", sum_formula, adduct)
raise
f_out.write("{},[M{}],{},{}\n".format(sum_formula, adduct, isotope_ms.get_spectrum(
source='centroids')[0], isotope_ms.get_spectrum(source='centroids')[1]))
[docs]def make_sf_adduct_optimusfilter(sum_formulae, adducts, output_filename, sigma=0.001, resolution=10000, charge=1):
from pyMSpec.pyisocalc import pyisocalc
# Extract variables from config dict
# Check if already genrated and load if possible, otherwise calculate fresh
with open(output_filename, 'a') as f_out:
for sum_formula in sum_formulae:
# print sum_formula
for adduct in adducts:
try:
sf = pyisocalc.complex_to_simple(sum_formula + adduct)
if sf is None: # not possible to form adduct
continue
isotope_ms = pyisocalc.isodist(sf, plot=False, sigma=sigma, charges=charge,
resolution=resolution)
except KeyError as e:
if str(e).startswith("KeyError:"):
print(str(e))
continue
except ValueError as e:
if str(e).startswith("Element not recognised"):
print(str(e))
continue
except:
print(sf == "", sum_formula, adduct)
raise
f_out.write("{} [M{}],-1,{}\n".format(sum_formula, adduct,
isotope_ms.get_spectrum(source='centroids')[0][0]))
[docs]def normalise_sf(sf_string):
from pyMSpec.pyisocalc.pyisocalc import InvalidFormulaError, ParseError
from pyMSpec.pyisocalc.pyisocalc import parseSumFormula
import logging
try:
sf = parseSumFormula(sf_string)
except (ParseError, InvalidFormulaError) as e:
logging.debug(e)
return ""
except:
logging.warning("failed to parse: {}".format(sf_string))
return ""
return sf.__unicode__()