CoreMS 4.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- corems/__init__.py +63 -0
- corems/chroma_peak/__init__.py +0 -0
- corems/chroma_peak/calc/ChromaPeakCalc.py +480 -0
- corems/chroma_peak/calc/__init__.py +0 -0
- corems/chroma_peak/calc/subset.py +196 -0
- corems/chroma_peak/factory/__init__.py +0 -0
- corems/chroma_peak/factory/chroma_peak_classes.py +1178 -0
- corems/encapsulation/__init__.py +0 -0
- corems/encapsulation/constant.py +1283 -0
- corems/encapsulation/factory/__init__.py +0 -0
- corems/encapsulation/factory/parameters.py +392 -0
- corems/encapsulation/factory/processingSetting.py +1244 -0
- corems/encapsulation/input/__init__.py +0 -0
- corems/encapsulation/input/parameter_from_json.py +579 -0
- corems/encapsulation/output/__init__.py +0 -0
- corems/encapsulation/output/parameter_to_dict.py +142 -0
- corems/encapsulation/output/parameter_to_json.py +332 -0
- corems/mass_spectra/__init__.py +0 -0
- corems/mass_spectra/calc/GC_Calc.py +84 -0
- corems/mass_spectra/calc/GC_Deconvolution.py +558 -0
- corems/mass_spectra/calc/GC_RI_Calibration.py +44 -0
- corems/mass_spectra/calc/MZSearch.py +249 -0
- corems/mass_spectra/calc/SignalProcessing.py +656 -0
- corems/mass_spectra/calc/__init__.py +0 -0
- corems/mass_spectra/calc/lc_calc.py +5790 -0
- corems/mass_spectra/calc/lc_calc_operations.py +1127 -0
- corems/mass_spectra/factory/GC_Class.py +791 -0
- corems/mass_spectra/factory/__init__.py +0 -0
- corems/mass_spectra/factory/chromat_data.py +51 -0
- corems/mass_spectra/factory/lc_class.py +2721 -0
- corems/mass_spectra/input/__init__.py +0 -0
- corems/mass_spectra/input/andiNetCDF.py +200 -0
- corems/mass_spectra/input/boosterHDF5.py +216 -0
- corems/mass_spectra/input/brukerSolarix.py +153 -0
- corems/mass_spectra/input/brukerSolarix_utils.py +73 -0
- corems/mass_spectra/input/corems_hdf5.py +1710 -0
- corems/mass_spectra/input/massList.py +133 -0
- corems/mass_spectra/input/mzml.py +668 -0
- corems/mass_spectra/input/parserbase.py +239 -0
- corems/mass_spectra/input/rawFileReader.py +1839 -0
- corems/mass_spectra/output/__init__.py +0 -0
- corems/mass_spectra/output/export.py +2800 -0
- corems/mass_spectrum/__init__.py +0 -0
- corems/mass_spectrum/calc/AutoRecalibration.py +237 -0
- corems/mass_spectrum/calc/Calibration.py +602 -0
- corems/mass_spectrum/calc/CalibrationCalc.py +253 -0
- corems/mass_spectrum/calc/KendrickGroup.py +239 -0
- corems/mass_spectrum/calc/MassErrorPrediction.py +436 -0
- corems/mass_spectrum/calc/MassSpectrumCalc.py +303 -0
- corems/mass_spectrum/calc/MeanResolvingPowerFilter.py +212 -0
- corems/mass_spectrum/calc/NoiseCalc.py +371 -0
- corems/mass_spectrum/calc/NoiseCalc_Bayes.py +93 -0
- corems/mass_spectrum/calc/PeakPicking.py +994 -0
- corems/mass_spectrum/calc/__init__.py +0 -0
- corems/mass_spectrum/factory/MassSpectrumClasses.py +1753 -0
- corems/mass_spectrum/factory/__init__.py +0 -0
- corems/mass_spectrum/input/__init__.py +0 -0
- corems/mass_spectrum/input/baseClass.py +531 -0
- corems/mass_spectrum/input/boosterHDF5.py +161 -0
- corems/mass_spectrum/input/coremsHDF5.py +475 -0
- corems/mass_spectrum/input/massList.py +402 -0
- corems/mass_spectrum/input/numpyArray.py +133 -0
- corems/mass_spectrum/output/__init__.py +0 -0
- corems/mass_spectrum/output/export.py +841 -0
- corems/molecular_formula/__init__.py +0 -0
- corems/molecular_formula/calc/MolecularFormulaCalc.py +885 -0
- corems/molecular_formula/calc/__init__.py +0 -0
- corems/molecular_formula/factory/MolecularFormulaFactory.py +895 -0
- corems/molecular_formula/factory/__init__.py +0 -0
- corems/molecular_formula/input/__init__.py +0 -0
- corems/molecular_formula/input/masslist_ref.py +355 -0
- corems/molecular_id/__init__.py +0 -0
- corems/molecular_id/calc/ClusterFilter.py +251 -0
- corems/molecular_id/calc/MolecularFilter.py +122 -0
- corems/molecular_id/calc/SpectralSimilarity.py +632 -0
- corems/molecular_id/calc/__init__.py +0 -0
- corems/molecular_id/calc/math_distance.py +1637 -0
- corems/molecular_id/data/FAMES_REF.msp +980 -0
- corems/molecular_id/data/PNNLMetV20191015.msp +157267 -0
- corems/molecular_id/factory/EI_SQL.py +650 -0
- corems/molecular_id/factory/MolecularLookupTable.py +914 -0
- corems/molecular_id/factory/__init__.py +0 -0
- corems/molecular_id/factory/classification.py +884 -0
- corems/molecular_id/factory/lipid_molecular_metadata.py +50 -0
- corems/molecular_id/factory/molecularSQL.py +827 -0
- corems/molecular_id/factory/spectrum_search_results.py +119 -0
- corems/molecular_id/input/__init__.py +0 -0
- corems/molecular_id/input/nistMSI.py +148 -0
- corems/molecular_id/search/__init__.py +0 -0
- corems/molecular_id/search/compoundSearch.py +214 -0
- corems/molecular_id/search/database_interfaces.py +1527 -0
- corems/molecular_id/search/findOxygenPeaks.py +330 -0
- corems/molecular_id/search/lcms_spectral_search.py +348 -0
- corems/molecular_id/search/molecularFormulaSearch.py +1117 -0
- corems/molecular_id/search/priorityAssignment.py +723 -0
- corems/ms_peak/__init__.py +0 -0
- corems/ms_peak/calc/MSPeakCalc.py +1010 -0
- corems/ms_peak/calc/__init__.py +0 -0
- corems/ms_peak/factory/MSPeakClasses.py +542 -0
- corems/ms_peak/factory/__init__.py +0 -0
- corems/transient/__init__.py +0 -0
- corems/transient/calc/TransientCalc.py +362 -0
- corems/transient/calc/__init__.py +0 -0
- corems/transient/factory/TransientClasses.py +457 -0
- corems/transient/factory/__init__.py +0 -0
- corems/transient/input/__init__.py +0 -0
- corems/transient/input/brukerSolarix.py +461 -0
- corems/transient/input/midasDatFile.py +172 -0
- corems-4.0.0.dist-info/METADATA +475 -0
- corems-4.0.0.dist-info/RECORD +171 -0
- corems-4.0.0.dist-info/WHEEL +5 -0
- corems-4.0.0.dist-info/licenses/LICENSE +22 -0
- corems-4.0.0.dist-info/top_level.txt +4 -0
- examples/archive/scripts/CoreMS_tutorial.py +94 -0
- examples/archive/scripts/DI HR-MS Halogens Bruker.py +196 -0
- examples/archive/scripts/DI HR-MS MassList.py +385 -0
- examples/archive/scripts/GC-MS MetabRef.py +213 -0
- examples/archive/scripts/GC-MS NetCDF.py +217 -0
- examples/archive/scripts/HR-MS Thermo Raw 21T.py +136 -0
- examples/archive/scripts/LC-ICPMS_metal_peaks.py +297 -0
- examples/archive/scripts/LCMS-Thermo.py +460 -0
- examples/archive/scripts/LCMS_isotopes.py +283 -0
- examples/archive/scripts/MSParams_example.py +21 -0
- examples/archive/scripts/Molecular Formula Data Aggreation.py +84 -0
- examples/archive/scripts/Single Mz Search.py +69 -0
- examples/test_notebooks.py +145 -0
- ext_lib/ChemstationMSFileReader.dll +0 -0
- ext_lib/ChemstationMSFileReader.xml +126 -0
- ext_lib/RawFileReaderLicense.doc +0 -0
- ext_lib/ThermoFisher.CommonCore.BackgroundSubtraction.dll +0 -0
- ext_lib/ThermoFisher.CommonCore.BackgroundSubtraction.xml +2307 -0
- ext_lib/ThermoFisher.CommonCore.Data.dll +0 -0
- ext_lib/ThermoFisher.CommonCore.Data.xml +28974 -0
- ext_lib/ThermoFisher.CommonCore.MassPrecisionEstimator.dll +0 -0
- ext_lib/ThermoFisher.CommonCore.MassPrecisionEstimator.xml +241 -0
- ext_lib/ThermoFisher.CommonCore.RawFileReader.dll +0 -0
- ext_lib/ThermoFisher.CommonCore.RawFileReader.xml +31174 -0
- ext_lib/__init__.py +0 -0
- ext_lib/dotnet/OpenMcdf.Extensions.dll +0 -0
- ext_lib/dotnet/OpenMcdf.dll +0 -0
- ext_lib/dotnet/OpenMcdf.xml +1154 -0
- ext_lib/dotnet/System.IO.FileSystem.AccessControl.dll +0 -0
- ext_lib/dotnet/System.IO.FileSystem.AccessControl.xml +506 -0
- ext_lib/dotnet/System.Security.AccessControl.dll +0 -0
- ext_lib/dotnet/System.Security.AccessControl.xml +2043 -0
- ext_lib/dotnet/System.Security.Principal.Windows.dll +0 -0
- ext_lib/dotnet/System.Security.Principal.Windows.xml +1011 -0
- ext_lib/dotnet/ThermoFisher.CommonCore.BackgroundSubtraction.dll +0 -0
- ext_lib/dotnet/ThermoFisher.CommonCore.BackgroundSubtraction.xml +2307 -0
- ext_lib/dotnet/ThermoFisher.CommonCore.Data.dll +0 -0
- ext_lib/dotnet/ThermoFisher.CommonCore.Data.xml +29148 -0
- ext_lib/dotnet/ThermoFisher.CommonCore.MassPrecisionEstimator.dll +0 -0
- ext_lib/dotnet/ThermoFisher.CommonCore.MassPrecisionEstimator.xml +241 -0
- ext_lib/dotnet/ThermoFisher.CommonCore.RawFileReader.dll +0 -0
- ext_lib/dotnet/ThermoFisher.CommonCore.RawFileReader.xml +31492 -0
- ext_lib/version +18 -0
- support_code/atom_parsers/AtomsDescription.py +359 -0
- support_code/atom_parsers/CreateAtomsDescription.py +56 -0
- support_code/nmdc/filefinder.py +90 -0
- support_code/nmdc/lipidomics/lipidomics_workflow.py +748 -0
- support_code/nmdc/lipidomics/manifest_examples.py +49 -0
- support_code/nmdc/metabolomics/gcms_workflow.py +158 -0
- support_code/nmdc/metabolomics/lcms_metabolomics_targeted_search.py +59 -0
- support_code/nmdc/metabolomics/lcms_metabolomics_workflow.py +248 -0
- support_code/nmdc/metabolomics/metabolomics_collection.py +628 -0
- support_code/nmdc/metadata/dms_api.py +42 -0
- support_code/nmdc/nom/archived_scripts/nmdc_metadata_gen.py +288 -0
- support_code/nmdc/nom/archived_scripts/nom_grow_workflow.py +209 -0
- support_code/nmdc/nom/nom_workflow.py +312 -0
- support_code/windows_only_importers/BrukerCompassXtract.py +180 -0
- support_code/windows_only_importers/ThermoMSFileReader.py +405 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
__author__ = "Yuri E. Corilo"
|
|
2
|
+
__date__ = "Jun 09, 2021"
|
|
3
|
+
|
|
4
|
+
from threading import Thread
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import List
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class SearchResults:
|
|
11
|
+
calculated_mz: float
|
|
12
|
+
exp_mz: float
|
|
13
|
+
error: float
|
|
14
|
+
tolerance: float
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class MZSearch(Thread):
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
exp_mzs: List[float],
|
|
21
|
+
calculated_mzs: List[float],
|
|
22
|
+
tolerance,
|
|
23
|
+
method="ppm",
|
|
24
|
+
average_target_mz=True,
|
|
25
|
+
):
|
|
26
|
+
"""
|
|
27
|
+
Parameters
|
|
28
|
+
----------
|
|
29
|
+
calculated_mzs: [float] calculated m/z
|
|
30
|
+
exp_mzs: [float] experimental m/z
|
|
31
|
+
method: string,
|
|
32
|
+
ppm or ppb
|
|
33
|
+
call run to trigger the m/z search algorithm
|
|
34
|
+
or start if using it as thread
|
|
35
|
+
"""
|
|
36
|
+
Thread.__init__(self)
|
|
37
|
+
# placeholder for the results
|
|
38
|
+
self._matched_mz = {}
|
|
39
|
+
|
|
40
|
+
self._calculated_mzs = calculated_mzs
|
|
41
|
+
|
|
42
|
+
self._matched_mz = {}
|
|
43
|
+
|
|
44
|
+
self._averaged_target_mz = []
|
|
45
|
+
|
|
46
|
+
self._exp_mzs = exp_mzs
|
|
47
|
+
|
|
48
|
+
self._tolerance = tolerance
|
|
49
|
+
self.method = method
|
|
50
|
+
|
|
51
|
+
if average_target_mz:
|
|
52
|
+
self.colapse_calculated()
|
|
53
|
+
|
|
54
|
+
@property
|
|
55
|
+
def results(self):
|
|
56
|
+
"""{calculated_mz: [SearchResults]}
|
|
57
|
+
contains the results of the search
|
|
58
|
+
"""
|
|
59
|
+
return self._matched_mz
|
|
60
|
+
|
|
61
|
+
@property
|
|
62
|
+
def averaged_target_mz(self):
|
|
63
|
+
"""[float]
|
|
64
|
+
contains the average target m/z to be searched against
|
|
65
|
+
"""
|
|
66
|
+
return self._averaged_target_mz
|
|
67
|
+
|
|
68
|
+
@property
|
|
69
|
+
def calculated_mzs(self):
|
|
70
|
+
"""[float]
|
|
71
|
+
contains the mz target to be searched against
|
|
72
|
+
"""
|
|
73
|
+
if self.averaged_target_mz:
|
|
74
|
+
return sorted(self.averaged_target_mz)
|
|
75
|
+
else:
|
|
76
|
+
return sorted(list(self._calculated_mzs))
|
|
77
|
+
|
|
78
|
+
@property
|
|
79
|
+
def exp_mzs(self):
|
|
80
|
+
"""[float]
|
|
81
|
+
contains the exp mz to be searched against
|
|
82
|
+
"""
|
|
83
|
+
return self._exp_mzs
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def method(self):
|
|
87
|
+
return self._method
|
|
88
|
+
|
|
89
|
+
@method.setter
|
|
90
|
+
def method(self, method):
|
|
91
|
+
"""
|
|
92
|
+
method: string,
|
|
93
|
+
ppm or ppb
|
|
94
|
+
"""
|
|
95
|
+
if method not in ["ppm" or "ppb"]:
|
|
96
|
+
raise ValueError("Method should be ppm or ppb")
|
|
97
|
+
self._method = method
|
|
98
|
+
|
|
99
|
+
@property
|
|
100
|
+
def tolerance(self):
|
|
101
|
+
return self._tolerance
|
|
102
|
+
|
|
103
|
+
@tolerance.setter
|
|
104
|
+
def tolerance(self, tolerance):
|
|
105
|
+
"""
|
|
106
|
+
method: string,
|
|
107
|
+
ppm or ppb
|
|
108
|
+
"""
|
|
109
|
+
if tolerance < 0:
|
|
110
|
+
raise ValueError("Tolerance needs to be a positive number")
|
|
111
|
+
self._tolerance = tolerance
|
|
112
|
+
|
|
113
|
+
def colapse_calculated(self):
|
|
114
|
+
if len(self.calculated_mzs) > 1:
|
|
115
|
+
all_mz = []
|
|
116
|
+
subset = set()
|
|
117
|
+
|
|
118
|
+
i = -1
|
|
119
|
+
while True:
|
|
120
|
+
i = i + 1
|
|
121
|
+
|
|
122
|
+
if i == len(self.calculated_mzs) - 1:
|
|
123
|
+
all_mz.append({i})
|
|
124
|
+
# print(i, 'break1')
|
|
125
|
+
break
|
|
126
|
+
|
|
127
|
+
if i >= len(self.calculated_mzs) - 1:
|
|
128
|
+
# print(i, 'break2')
|
|
129
|
+
break
|
|
130
|
+
|
|
131
|
+
error = self.calc_mz_error(
|
|
132
|
+
self.calculated_mzs[i], self.calculated_mzs[i + 1]
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
# print(self.tolerance)
|
|
136
|
+
|
|
137
|
+
check_error = self.check_ppm_error(self.tolerance, error)
|
|
138
|
+
|
|
139
|
+
if not check_error:
|
|
140
|
+
start_list = {i}
|
|
141
|
+
|
|
142
|
+
else:
|
|
143
|
+
start_list = set()
|
|
144
|
+
|
|
145
|
+
while check_error:
|
|
146
|
+
start_list.add(i)
|
|
147
|
+
start_list.add(i + 1)
|
|
148
|
+
|
|
149
|
+
i = i + 1
|
|
150
|
+
|
|
151
|
+
if i == len(self.calculated_mzs) - 1:
|
|
152
|
+
start_list.add(i)
|
|
153
|
+
# print(i, 'break3')
|
|
154
|
+
break
|
|
155
|
+
|
|
156
|
+
error = self.calc_mz_error(
|
|
157
|
+
self.calculated_mzs[i], self.calculated_mzs[i + 1]
|
|
158
|
+
)
|
|
159
|
+
check_error = self.check_ppm_error(self.tolerance, error)
|
|
160
|
+
|
|
161
|
+
if start_list:
|
|
162
|
+
all_mz.append(start_list)
|
|
163
|
+
|
|
164
|
+
results = []
|
|
165
|
+
for each in all_mz:
|
|
166
|
+
# print(each)
|
|
167
|
+
mzs = [self.calculated_mzs[i] for i in each]
|
|
168
|
+
results.append(sum(mzs) / len(mzs))
|
|
169
|
+
|
|
170
|
+
# print(results)
|
|
171
|
+
self._averaged_target_mz = results
|
|
172
|
+
|
|
173
|
+
def run(self):
|
|
174
|
+
dict_nominal_exp_mz = self.get_nominal_exp(self.exp_mzs)
|
|
175
|
+
|
|
176
|
+
for calculated_mz in self.calculated_mzs:
|
|
177
|
+
nominal_selected_mz = int(calculated_mz)
|
|
178
|
+
|
|
179
|
+
if nominal_selected_mz in dict_nominal_exp_mz.keys():
|
|
180
|
+
self.search_mz(self.results, dict_nominal_exp_mz, calculated_mz, 0)
|
|
181
|
+
|
|
182
|
+
elif nominal_selected_mz - 1 in dict_nominal_exp_mz.keys():
|
|
183
|
+
self.search_mz(self.results, dict_nominal_exp_mz, calculated_mz, -1)
|
|
184
|
+
|
|
185
|
+
elif nominal_selected_mz + 1 in dict_nominal_exp_mz.keys():
|
|
186
|
+
self.search_mz(self.results, dict_nominal_exp_mz, calculated_mz, +1)
|
|
187
|
+
|
|
188
|
+
else:
|
|
189
|
+
continue
|
|
190
|
+
|
|
191
|
+
@staticmethod
|
|
192
|
+
def calc_mz_error(calculated_mz, exp_mz, method="ppm"):
|
|
193
|
+
"""
|
|
194
|
+
Parameters
|
|
195
|
+
----------
|
|
196
|
+
calculated_mz: float,
|
|
197
|
+
exp_mz:float
|
|
198
|
+
method: string,
|
|
199
|
+
ppm or ppb
|
|
200
|
+
"""
|
|
201
|
+
if method == "ppm":
|
|
202
|
+
multi_factor = 1000000
|
|
203
|
+
|
|
204
|
+
elif method == "ppb":
|
|
205
|
+
multi_factor = 1000000
|
|
206
|
+
|
|
207
|
+
else:
|
|
208
|
+
raise Exception(
|
|
209
|
+
"method needs to be ppm or ppb, \
|
|
210
|
+
you have entered %s"
|
|
211
|
+
% method
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
return ((exp_mz - calculated_mz) / calculated_mz) * multi_factor
|
|
215
|
+
|
|
216
|
+
@staticmethod
|
|
217
|
+
def check_ppm_error(tolerance, error):
|
|
218
|
+
return True if -tolerance <= error <= tolerance else False
|
|
219
|
+
|
|
220
|
+
def get_nominal_exp(self, exp_mzs) -> dict:
|
|
221
|
+
dict_nominal_exp_mz = {}
|
|
222
|
+
|
|
223
|
+
for exp_mz in exp_mzs:
|
|
224
|
+
nominal_mz = int(exp_mz)
|
|
225
|
+
|
|
226
|
+
if nominal_mz not in dict_nominal_exp_mz.keys():
|
|
227
|
+
dict_nominal_exp_mz[int(exp_mz)] = [exp_mz]
|
|
228
|
+
else:
|
|
229
|
+
dict_nominal_exp_mz[int(exp_mz)].append(exp_mz)
|
|
230
|
+
|
|
231
|
+
return dict_nominal_exp_mz
|
|
232
|
+
|
|
233
|
+
def search_mz(self, results, dict_nominal_exp_mz, calculated_mz, offset) -> None:
|
|
234
|
+
nominal_calculated_mz = int(calculated_mz) + offset
|
|
235
|
+
matched_n_precursors = dict_nominal_exp_mz.get(nominal_calculated_mz)
|
|
236
|
+
|
|
237
|
+
for precursor_mz in matched_n_precursors:
|
|
238
|
+
error = self.calc_mz_error(calculated_mz, precursor_mz, method=self.method)
|
|
239
|
+
|
|
240
|
+
if self.check_ppm_error(self.tolerance, error):
|
|
241
|
+
new_match = SearchResults(
|
|
242
|
+
calculated_mz, precursor_mz, error, self.tolerance
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
if calculated_mz not in results.keys():
|
|
246
|
+
results[calculated_mz] = [new_match]
|
|
247
|
+
|
|
248
|
+
else:
|
|
249
|
+
results[calculated_mz].append(new_match)
|