From 7d7117374fdc651dae9acb442d40aed36b9952ca Mon Sep 17 00:00:00 2001 From: Kzra Date: Fri, 14 May 2021 15:10:39 +0100 Subject: [PATCH] Added options for nominal kendrick mass calculation --- .../factory/processingSetting.py | 4 ++++ corems/ms_peak/calc/MSPeakCalc.py | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/corems/encapsulation/factory/processingSetting.py b/corems/encapsulation/factory/processingSetting.py index 45cd4ae83..e8ab3bb16 100644 --- a/corems/encapsulation/factory/processingSetting.py +++ b/corems/encapsulation/factory/processingSetting.py @@ -119,6 +119,10 @@ def __post_init__(self): class MassSpecPeakSetting: kendrick_base: Dict = dataclasses.field(default_factory=dict) + + kendrick_rounding_method: str = 'floor' # 'floor', 'ceil' or 'round' are valid methods for calculating nominal kendrick mass + + implemented_kendrick_rounding_methods : tuple = ('floor','ceil','round') # kendrick_base : Dict = {'C': 1, 'H':2} diff --git a/corems/ms_peak/calc/MSPeakCalc.py b/corems/ms_peak/calc/MSPeakCalc.py index cf6d93f2e..bb46ba25e 100644 --- a/corems/ms_peak/calc/MSPeakCalc.py +++ b/corems/ms_peak/calc/MSPeakCalc.py @@ -5,8 +5,9 @@ from scipy.stats import norm, cauchy -from numpy import linspace, sqrt, log, trapz, pi, log, poly1d, polyfit,flip, square,exp, nan +from numpy import linspace, sqrt, log, trapz, pi, log, poly1d, polyfit,flip, square,exp, nan, ceil, rint, floor from corems.encapsulation.constant import Atoms +from corems.encapsulation.factory.parameters import MSParameters from lmfit import models import pyswarm @@ -19,6 +20,7 @@ class MSPeakCalculation(object): def _calc_kdm(self, dict_base): '''dict_base = {"C": 1, "H": 2} ''' + kendrick_rounding_method = MSParameters.ms_peak.kendrick_rounding_method # rounding method can be one of floor, ceil or round mass = 0 for atom in dict_base.keys(): @@ -26,7 +28,20 @@ def _calc_kdm(self, dict_base): kendrick_mass = (int(mass) / mass) * self.mz_exp - nominal_km = int(kendrick_mass) + if kendrick_rounding_method == 'ceil': + + nominal_km = ceil(kendrick_mass) + + elif kendrick_rounding_method == 'round': + + nominal_km = rint(kendrick_mass) + + elif kendrick_rounding_method == 'floor': + + nominal_km = floor(kendrick_mass) + + else: + raise Exception("%s method was not implemented, please refer to corems.ms_peak.calc.MSPeakCalc Class" % kendrick_rounding_method) kmd = (nominal_km - kendrick_mass)