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,385 @@
|
|
|
1
|
+
import warnings
|
|
2
|
+
|
|
3
|
+
from pandas.core.frame import DataFrame
|
|
4
|
+
warnings.filterwarnings("ignore")
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
sys.path.append("./")
|
|
8
|
+
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
import cProfile
|
|
11
|
+
import json
|
|
12
|
+
import pstats
|
|
13
|
+
from multiprocessing import Pool, Process
|
|
14
|
+
|
|
15
|
+
import pandas as pd
|
|
16
|
+
from matplotlib import pyplot as plt
|
|
17
|
+
|
|
18
|
+
from corems.mass_spectrum.calc.Calibration import MzDomainCalibration
|
|
19
|
+
|
|
20
|
+
from corems.mass_spectrum.input.massList import ReadMassList
|
|
21
|
+
from corems.molecular_id.factory.classification import HeteroatomsClassification
|
|
22
|
+
from corems.mass_spectrum.calc.Calibration import MzDomainCalibration
|
|
23
|
+
from corems.molecular_id.search.molecularFormulaSearch import SearchMolecularFormulas
|
|
24
|
+
from corems import SuppressPrints
|
|
25
|
+
from corems.transient.input.brukerSolarix import ReadBrukerSolarix
|
|
26
|
+
from corems.mass_spectra.input import rawFileReader
|
|
27
|
+
|
|
28
|
+
from corems.encapsulation.constant import Atoms
|
|
29
|
+
from corems.encapsulation.factory.parameters import MSParameters
|
|
30
|
+
|
|
31
|
+
from support_code.nmdc.filefinder import get_filename, get_filenames
|
|
32
|
+
|
|
33
|
+
def mzdomain_calibration(mass_spectrum):
|
|
34
|
+
|
|
35
|
+
mass_spectrum.settings.min_calib_ppm_error = 0
|
|
36
|
+
mass_spectrum.settings.max_calib_ppm_error = 1
|
|
37
|
+
|
|
38
|
+
#file_location = Path.cwd() / "tests/tests_data/ESI_NEG_SRFA.d/"
|
|
39
|
+
|
|
40
|
+
def run_bruker(file_location):
|
|
41
|
+
|
|
42
|
+
with ReadBrukerSolarix(file_location) as transient:
|
|
43
|
+
|
|
44
|
+
MSParameters.mass_spectrum.noise_threshold_method = 'log'
|
|
45
|
+
MSParameters.mass_spectrum.noise_threshold_min_s2n = 6
|
|
46
|
+
|
|
47
|
+
mass_spectrum = transient.get_mass_spectrum(plot_result=False, auto_process=True)
|
|
48
|
+
# mass_spectrum.plot_profile_and_noise_threshold()
|
|
49
|
+
# plt.show()
|
|
50
|
+
# find_formula_thread = FindOxygenPeaks(mass_spectrum)
|
|
51
|
+
# find_formula_thread.run()
|
|
52
|
+
|
|
53
|
+
# mspeaks_results = find_formula_thread.get_list_found_peaks()
|
|
54
|
+
|
|
55
|
+
# mass_spectrum.clear_molecular_formulas()
|
|
56
|
+
|
|
57
|
+
return mass_spectrum, transient.transient_time
|
|
58
|
+
|
|
59
|
+
def run_thermo(file_location):
|
|
60
|
+
|
|
61
|
+
MSParameters.mass_spectrum.noise_threshold_method = 'log'
|
|
62
|
+
MSParameters.mass_spectrum.noise_threshold_min_s2n = 6
|
|
63
|
+
|
|
64
|
+
parser = rawFileReader.ImportMassSpectraThermoMSFileReader(file_location)
|
|
65
|
+
|
|
66
|
+
# mass_spectrum = transient.get_mass_spectrum(plot_result=False, auto_process=True)
|
|
67
|
+
|
|
68
|
+
mass_spectrum = parser.get_average_mass_spectrum()
|
|
69
|
+
|
|
70
|
+
return mass_spectrum, 3
|
|
71
|
+
|
|
72
|
+
def get_masslist(file_location):
|
|
73
|
+
|
|
74
|
+
return(ReadMassList(file_location).get_mass_spectrum(polarity=-1))
|
|
75
|
+
|
|
76
|
+
def calspec(msobj, refmasslist, order=2):
|
|
77
|
+
|
|
78
|
+
calfn = MzDomainCalibration(msobj, refmasslist)
|
|
79
|
+
ref_mass_list_fmt = calfn.load_ref_mass_list(refmasslist)
|
|
80
|
+
|
|
81
|
+
imzmeas, mzrefs = calfn.find_calibration_points(msobj, ref_mass_list_fmt,
|
|
82
|
+
calib_ppm_error_threshold=(-1.0, 1.0),
|
|
83
|
+
calib_snr_threshold=4)
|
|
84
|
+
|
|
85
|
+
if len(mzrefs) < 5:
|
|
86
|
+
imzmeas, mzrefs = calfn.find_calibration_points(msobj, ref_mass_list_fmt,
|
|
87
|
+
calib_ppm_error_threshold=(-1.5, 1.5),
|
|
88
|
+
calib_snr_threshold=4)
|
|
89
|
+
|
|
90
|
+
if len(mzrefs) < 5:
|
|
91
|
+
imzmeas, mzrefs = calfn.find_calibration_points(msobj, ref_mass_list_fmt,
|
|
92
|
+
calib_ppm_error_threshold=(-3, 3),
|
|
93
|
+
calib_snr_threshold=4)
|
|
94
|
+
|
|
95
|
+
if len(mzrefs) < 5:
|
|
96
|
+
imzmeas, mzrefs = calfn.find_calibration_points(msobj, ref_mass_list_fmt,
|
|
97
|
+
calib_ppm_error_threshold=(-5, 5),
|
|
98
|
+
calib_snr_threshold=4)
|
|
99
|
+
|
|
100
|
+
if len(mzrefs) < 5:
|
|
101
|
+
imzmeas, mzrefs = calfn.find_calibration_points(msobj, ref_mass_list_fmt,
|
|
102
|
+
calib_ppm_error_threshold=(-7, 7),
|
|
103
|
+
calib_snr_threshold=4)
|
|
104
|
+
|
|
105
|
+
if len(mzrefs) < 5:
|
|
106
|
+
|
|
107
|
+
imzmeas, mzrefs = calfn.find_calibration_points(msobj, ref_mass_list_fmt,
|
|
108
|
+
calib_ppm_error_threshold=(-10, 10),
|
|
109
|
+
calib_snr_threshold=4)
|
|
110
|
+
|
|
111
|
+
calfn.recalibrate_mass_spectrum(msobj, imzmeas, mzrefs, order=order)
|
|
112
|
+
|
|
113
|
+
def set_parameters(mass_spectrum, field_strength=12, pos=False):
|
|
114
|
+
|
|
115
|
+
if field_strength == 12:
|
|
116
|
+
|
|
117
|
+
mass_spectrum.settings.max_calib_ppm_error = 5
|
|
118
|
+
mass_spectrum.settings.min_calib_ppm_error = -5
|
|
119
|
+
|
|
120
|
+
mass_spectrum.molecular_search_settings.error_method = 'None'
|
|
121
|
+
mass_spectrum.molecular_search_settings.min_ppm_error = -1
|
|
122
|
+
mass_spectrum.molecular_search_settings.max_ppm_error = 1
|
|
123
|
+
|
|
124
|
+
mass_spectrum.settings.calib_sn_threshold = 2
|
|
125
|
+
|
|
126
|
+
elif field_strength == 15:
|
|
127
|
+
|
|
128
|
+
mass_spectrum.settings.max_calib_ppm_error = 3
|
|
129
|
+
mass_spectrum.settings.min_calib_ppm_error = -3
|
|
130
|
+
|
|
131
|
+
mass_spectrum.molecular_search_settings.error_method = 'None'
|
|
132
|
+
mass_spectrum.molecular_search_settings.min_ppm_error = -1
|
|
133
|
+
mass_spectrum.molecular_search_settings.max_ppm_error = 1
|
|
134
|
+
|
|
135
|
+
mass_spectrum.settings.calib_sn_threshold = 2
|
|
136
|
+
|
|
137
|
+
else:
|
|
138
|
+
|
|
139
|
+
mass_spectrum.settings.max_calib_ppm_error = 1
|
|
140
|
+
mass_spectrum.settings.min_calib_ppm_error = -1
|
|
141
|
+
|
|
142
|
+
mass_spectrum.molecular_search_settings.error_method = 'None'
|
|
143
|
+
mass_spectrum.molecular_search_settings.min_ppm_error = -0.5
|
|
144
|
+
mass_spectrum.molecular_search_settings.max_ppm_error = 0.5
|
|
145
|
+
|
|
146
|
+
mass_spectrum.molecular_search_settings.url_database = None
|
|
147
|
+
mass_spectrum.molecular_search_settings.min_dbe = 0
|
|
148
|
+
mass_spectrum.molecular_search_settings.max_dbe = 40
|
|
149
|
+
|
|
150
|
+
if pos:
|
|
151
|
+
|
|
152
|
+
mass_spectrum.molecular_search_settings.usedAtoms['C'] = (1, 100)
|
|
153
|
+
mass_spectrum.molecular_search_settings.usedAtoms['H'] = (4, 200)
|
|
154
|
+
mass_spectrum.molecular_search_settings.usedAtoms['O'] = (1, 12)
|
|
155
|
+
mass_spectrum.molecular_search_settings.usedAtoms['N'] = (0, 3)
|
|
156
|
+
mass_spectrum.molecular_search_settings.usedAtoms['S'] = (0, 1)
|
|
157
|
+
|
|
158
|
+
else:
|
|
159
|
+
|
|
160
|
+
mass_spectrum.molecular_search_settings.usedAtoms['C'] = (1, 100)
|
|
161
|
+
mass_spectrum.molecular_search_settings.usedAtoms['H'] = (4, 200)
|
|
162
|
+
mass_spectrum.molecular_search_settings.usedAtoms['O'] = (0, 22)
|
|
163
|
+
mass_spectrum.molecular_search_settings.usedAtoms['N'] = (0, 1)
|
|
164
|
+
mass_spectrum.molecular_search_settings.usedAtoms['S'] = (0, 1)
|
|
165
|
+
|
|
166
|
+
mass_spectrum.molecular_search_settings.usedAtoms['Cl'] = (0, 0)
|
|
167
|
+
mass_spectrum.molecular_search_settings.usedAtoms['Br'] = (0, 0)
|
|
168
|
+
mass_spectrum.molecular_search_settings.usedAtoms['P'] = (0, 0)
|
|
169
|
+
mass_spectrum.molecular_search_settings.usedAtoms['Na'] = (0, 0)
|
|
170
|
+
|
|
171
|
+
mass_spectrum.molecular_search_settings.isProtonated = True
|
|
172
|
+
mass_spectrum.molecular_search_settings.isRadical = False
|
|
173
|
+
mass_spectrum.molecular_search_settings.isAdduct = False
|
|
174
|
+
|
|
175
|
+
def merge_files(file_paths: list, variable='Peak Height'):
|
|
176
|
+
|
|
177
|
+
master_data_dict = []
|
|
178
|
+
list_filenames = []
|
|
179
|
+
for filepath in file_paths:
|
|
180
|
+
|
|
181
|
+
filepath = Path(filepath)
|
|
182
|
+
|
|
183
|
+
with filepath.open('r') as f:
|
|
184
|
+
|
|
185
|
+
data = json.loads(json.load(f))
|
|
186
|
+
|
|
187
|
+
df = DataFrame(data)
|
|
188
|
+
idx = df.groupby(['Molecular Formula'])['Confidence Score'].transform(max) == df['Confidence Score']
|
|
189
|
+
|
|
190
|
+
df = df[idx]
|
|
191
|
+
df.fillna(0, inplace=True)
|
|
192
|
+
|
|
193
|
+
name_column = "{} ({})".format(variable, filepath.stem)
|
|
194
|
+
df.rename({variable: name_column}, inplace=True, axis=1)
|
|
195
|
+
|
|
196
|
+
list_filenames.append(name_column)
|
|
197
|
+
master_data_dict.extend(df.to_dict('records'))
|
|
198
|
+
|
|
199
|
+
formula_dict = {}
|
|
200
|
+
for record in master_data_dict:
|
|
201
|
+
molecular_formula = record.get('Molecular Formula')
|
|
202
|
+
|
|
203
|
+
if molecular_formula in formula_dict.keys():
|
|
204
|
+
formula_dict[molecular_formula].append(record)
|
|
205
|
+
else:
|
|
206
|
+
formula_dict[molecular_formula] = [record]
|
|
207
|
+
|
|
208
|
+
def dict_mean(dict_list, average_keys):
|
|
209
|
+
mean_dict = {}
|
|
210
|
+
|
|
211
|
+
for key in average_keys:
|
|
212
|
+
|
|
213
|
+
mean_dict[key] = sum(d[key] for d in dict_list) / len(dict_list)
|
|
214
|
+
|
|
215
|
+
return mean_dict
|
|
216
|
+
|
|
217
|
+
average_records = []
|
|
218
|
+
|
|
219
|
+
average_keys = ['m/z', 'Calibrated m/z', 'Calculated m/z', 'Peak Area', 'Resolving Power', 'S/N', 'm/z Error (ppm)', 'm/z Error Score',
|
|
220
|
+
'Isotopologue Similarity', 'Mono Isotopic Index', 'Confidence Score']
|
|
221
|
+
average_keys.extend(list_filenames)
|
|
222
|
+
|
|
223
|
+
for formula, records in formula_dict.items():
|
|
224
|
+
|
|
225
|
+
#mean_dict = dict_mean(records, average_keys)
|
|
226
|
+
mean_dict = {}
|
|
227
|
+
for record in records:
|
|
228
|
+
#get the selected variable
|
|
229
|
+
for filename in list_filenames:
|
|
230
|
+
if filename in record.keys():
|
|
231
|
+
mean_dict[filename] = record[filename]
|
|
232
|
+
|
|
233
|
+
for record in records:
|
|
234
|
+
#than get the rest of the data
|
|
235
|
+
for key in record.keys():
|
|
236
|
+
if key not in average_keys:
|
|
237
|
+
mean_dict[key] = record[key]
|
|
238
|
+
|
|
239
|
+
average_records.append(mean_dict)
|
|
240
|
+
master_df = pd.DataFrame(average_records)
|
|
241
|
+
|
|
242
|
+
master_df.set_index('Molecular Formula', inplace=True)
|
|
243
|
+
print(master_df)
|
|
244
|
+
|
|
245
|
+
master_df.to_csv('{}.csv')
|
|
246
|
+
#grouped = master_df.groupby(["Molecular Formula", "Sample Name", "Peak Height"])
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def run_assignment(file_location, field_strength=12):
|
|
251
|
+
#mass_spectrum = get_masslist(file_location)
|
|
252
|
+
|
|
253
|
+
mass_spectrum, transient_time = run_bruker(file_location)
|
|
254
|
+
set_parameters(mass_spectrum, field_strength=field_strength, pos=False)
|
|
255
|
+
#mass_spectrum.filter_by_max_resolving_power(field_strength, transient_time)
|
|
256
|
+
|
|
257
|
+
SearchMolecularFormulas(mass_spectrum, first_hit=False).run_worker_mass_spectrum()
|
|
258
|
+
|
|
259
|
+
mass_spectrum.percentile_assigned(report_error=True)
|
|
260
|
+
|
|
261
|
+
mass_spectrum.to_csv(mass_spectrum.sample_name, write_metadata=False)
|
|
262
|
+
|
|
263
|
+
mass_spectrum.molecular_search_settings.score_method = "prob_score"
|
|
264
|
+
mass_spectrum.molecular_search_settings.output_score_method = "prob_score"
|
|
265
|
+
data_table = mass_spectrum.to_json()
|
|
266
|
+
|
|
267
|
+
with open(mass_spectrum.sample_name + '.json', 'w') as outfile:
|
|
268
|
+
json.dump(data_table, outfile)
|
|
269
|
+
|
|
270
|
+
# export_calc_isotopologues(mass_spectrum, "15T_Neg_ESI_SRFA_Calc_Isotopologues")
|
|
271
|
+
|
|
272
|
+
# mass_spectrum_by_classes = HeteroatomsClassification(mass_spectrum, choose_molecular_formula=True)
|
|
273
|
+
# mass_spectrum_by_classes.plot_ms_assigned_unassigned()
|
|
274
|
+
# mass_spectrum_by_classes.plot_mz_error()
|
|
275
|
+
|
|
276
|
+
# mass_spectrum_by_classes.plot_ms_assigned_unassigned()
|
|
277
|
+
# plt.show()
|
|
278
|
+
# mass_spectrum_by_classes.plot_mz_error()
|
|
279
|
+
# plt.show()
|
|
280
|
+
# mass_spectrum_by_classes.plot_ms_class()
|
|
281
|
+
# plt.show()
|
|
282
|
+
# dataframe = mass_spectrum_by_classes.to_dataframe()
|
|
283
|
+
# return (mass_spectrum, mass_spectrum_by_classes)
|
|
284
|
+
|
|
285
|
+
# class_plot(dataframe)
|
|
286
|
+
|
|
287
|
+
def get_all_used_atoms_in_order(mass_spectrum):
|
|
288
|
+
|
|
289
|
+
atoms_in_order = Atoms.atoms_order
|
|
290
|
+
all_used_atoms = set()
|
|
291
|
+
if mass_spectrum:
|
|
292
|
+
for ms_peak in mass_spectrum:
|
|
293
|
+
if ms_peak:
|
|
294
|
+
for m_formula in ms_peak:
|
|
295
|
+
for atom in m_formula.atoms:
|
|
296
|
+
all_used_atoms.add(atom)
|
|
297
|
+
|
|
298
|
+
def sort_method(atom):
|
|
299
|
+
return [atoms_in_order.index(atom)]
|
|
300
|
+
|
|
301
|
+
return sorted(all_used_atoms, key=sort_method)
|
|
302
|
+
|
|
303
|
+
def export_calc_isotopologues(mass_spectrum, out_filename):
|
|
304
|
+
|
|
305
|
+
columns_label = ["Mono Isotopic Index", "Calculated m/z", "Calculated Peak Height", 'Heteroatom Class', "Molecular Formula"]
|
|
306
|
+
|
|
307
|
+
atoms_order_list = get_all_used_atoms_in_order(mass_spectrum)
|
|
308
|
+
|
|
309
|
+
column_labels = columns_label + atoms_order_list
|
|
310
|
+
|
|
311
|
+
dict_data_list = []
|
|
312
|
+
|
|
313
|
+
for index, ms_peak in enumerate(mass_spectrum):
|
|
314
|
+
|
|
315
|
+
if ms_peak:
|
|
316
|
+
for m_formula in ms_peak:
|
|
317
|
+
if not m_formula.is_isotopologue:
|
|
318
|
+
for imf in m_formula.expected_isotopologues:
|
|
319
|
+
|
|
320
|
+
formula_dict = imf.to_dict()
|
|
321
|
+
dict_result = {"Mono Isotopic Index": index,
|
|
322
|
+
"Calculated m/z": imf.mz_calc,
|
|
323
|
+
"Calculated Peak Height": imf.abundance_calc,
|
|
324
|
+
'Heteroatom Class': imf.class_label,
|
|
325
|
+
'H/C': imf.H_C,
|
|
326
|
+
'O/C': imf.O_C,
|
|
327
|
+
'Ion Type': imf.ion_type.lower(),
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
for atom in atoms_order_list:
|
|
331
|
+
if atom in formula_dict.keys():
|
|
332
|
+
dict_result[atom] = formula_dict.get(atom)
|
|
333
|
+
|
|
334
|
+
dict_data_list.append(dict_result)
|
|
335
|
+
|
|
336
|
+
df = DataFrame(dict_data_list, columns=column_labels)
|
|
337
|
+
df.to_csv(out_filename + ".csv", index=False)
|
|
338
|
+
|
|
339
|
+
def monitor(target):
|
|
340
|
+
''' psutil is not installed by default, use the requirement_dev.txt to install non essential packages'''
|
|
341
|
+
import psutil
|
|
342
|
+
import time
|
|
343
|
+
|
|
344
|
+
worker_process = Process(target=target)
|
|
345
|
+
worker_process.start()
|
|
346
|
+
p = psutil.Process(worker_process.pid)
|
|
347
|
+
|
|
348
|
+
# log cpu usage of `worker_process` every 10 ms
|
|
349
|
+
cpu_percents = []
|
|
350
|
+
while worker_process.is_alive():
|
|
351
|
+
cpu_percents.append(p.cpu_percent())
|
|
352
|
+
time.sleep(0.01)
|
|
353
|
+
|
|
354
|
+
worker_process.join()
|
|
355
|
+
return cpu_percents
|
|
356
|
+
|
|
357
|
+
def worker(file_location):
|
|
358
|
+
|
|
359
|
+
cProfile.runctx('run_assignment(file_location)', globals(), locals(), 'di-fticr-di.prof')
|
|
360
|
+
# stats = pstats.Stats("topics.prof")
|
|
361
|
+
# stats.strip_dirs().sort_stats("time").print_stats()
|
|
362
|
+
|
|
363
|
+
def run_multiprocess():
|
|
364
|
+
|
|
365
|
+
cores = 4
|
|
366
|
+
# file_location = get_dirname()
|
|
367
|
+
file_location = get_filename()
|
|
368
|
+
p = Pool(cores)
|
|
369
|
+
args = [(file_path) for file_path in [file_location] * 1]
|
|
370
|
+
ms_collection = p.map(worker, args)
|
|
371
|
+
p.close()
|
|
372
|
+
p.join()
|
|
373
|
+
|
|
374
|
+
for ms in ms_collection:
|
|
375
|
+
ms[0].to_hdf('test')
|
|
376
|
+
|
|
377
|
+
if __name__ == "__main__":
|
|
378
|
+
|
|
379
|
+
# run_multiprocess()
|
|
380
|
+
# cpu_percents = monitor(target=run_multiprocess)
|
|
381
|
+
# print(cpu_percents)
|
|
382
|
+
file_location = get_filenames()
|
|
383
|
+
if file_location:
|
|
384
|
+
merge_files(file_location)
|
|
385
|
+
#run_assignment(file_location)
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import warnings
|
|
2
|
+
|
|
3
|
+
warnings.filterwarnings("ignore")
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
import sys
|
|
7
|
+
from multiprocessing import Pool
|
|
8
|
+
|
|
9
|
+
from corems.mass_spectra.calc.GC_RI_Calibration import get_rt_ri_pairs
|
|
10
|
+
from corems.mass_spectra.input.andiNetCDF import ReadAndiNetCDF
|
|
11
|
+
from corems.molecular_id.search.compoundSearch import LowResMassSpectralMatch
|
|
12
|
+
from corems.molecular_id.search.database_interfaces import MetabRefGCInterface
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def start_gcms_metabref_sql(normalize=False, url="sqlite://"):
|
|
16
|
+
# Initialize MetabRef interface
|
|
17
|
+
metabref = MetabRefGCInterface()
|
|
18
|
+
|
|
19
|
+
# Pull contents into SQLite
|
|
20
|
+
return metabref.get_library(format="sql")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def start_fames_metabref_sql(normalize=False, url="sqlite://"):
|
|
24
|
+
# Initialize MetabRef interface
|
|
25
|
+
metabref = MetabRefGCInterface()
|
|
26
|
+
|
|
27
|
+
# Pull contents into SQLite
|
|
28
|
+
return metabref.get_fames(format="sql")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def get_gcms(filepath):
|
|
32
|
+
# Initialize reader
|
|
33
|
+
reader_gcms = ReadAndiNetCDF(filepath)
|
|
34
|
+
|
|
35
|
+
# Run reader
|
|
36
|
+
reader_gcms.run()
|
|
37
|
+
|
|
38
|
+
# Get GCMS object
|
|
39
|
+
gcms = reader_gcms.get_gcms_obj()
|
|
40
|
+
|
|
41
|
+
# # Process chromatogram
|
|
42
|
+
# gcms.process_chromatogram()
|
|
43
|
+
|
|
44
|
+
return gcms
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def stand_alone():
|
|
48
|
+
# Determine filename
|
|
49
|
+
filepath = get_filename()
|
|
50
|
+
|
|
51
|
+
# Initialize reader
|
|
52
|
+
reader_gcms = ReadAndiNetCDF(filepath)
|
|
53
|
+
|
|
54
|
+
# Run
|
|
55
|
+
reader_gcms.run()
|
|
56
|
+
|
|
57
|
+
# Get GCMS object
|
|
58
|
+
gcms = reader_gcms.get_gcms_obj()
|
|
59
|
+
|
|
60
|
+
# Process chromatogram
|
|
61
|
+
gcms.process_chromatogram()
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def get_reference_dict(calibration_filepath=False):
|
|
65
|
+
from PySide2.QtCore import Qt
|
|
66
|
+
from PySide2.QtWidgets import QApplication, QFileDialog
|
|
67
|
+
|
|
68
|
+
# Open dialog to select calibration file
|
|
69
|
+
if not calibration_filepath:
|
|
70
|
+
app = QApplication(sys.argv)
|
|
71
|
+
file_dialog = QFileDialog()
|
|
72
|
+
file_dialog.setWindowFlags(Qt.WindowStaysOnTopHint)
|
|
73
|
+
filepath = file_dialog.getOpenFileName(None, "FAMES REF FILE", filter="*.cdf")[
|
|
74
|
+
0
|
|
75
|
+
]
|
|
76
|
+
file_dialog.close()
|
|
77
|
+
app.exit()
|
|
78
|
+
|
|
79
|
+
# Calibration file specified directly
|
|
80
|
+
else:
|
|
81
|
+
filepath = calibration_filepath
|
|
82
|
+
|
|
83
|
+
# No filepath
|
|
84
|
+
if not filepath:
|
|
85
|
+
raise ValueError("Must supply calibration file.")
|
|
86
|
+
|
|
87
|
+
# Parse supplied calibration data
|
|
88
|
+
gcms_ref_obj = get_gcms(filepath)
|
|
89
|
+
|
|
90
|
+
# Build calibration SQLite database from MetabRef
|
|
91
|
+
sql_obj = start_fames_metabref_sql()
|
|
92
|
+
|
|
93
|
+
# Determine calibration pairs
|
|
94
|
+
rt_ri_pairs = get_rt_ri_pairs(gcms_ref_obj, sql_obj=sql_obj)
|
|
95
|
+
|
|
96
|
+
return rt_ri_pairs, filepath
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def run(args):
|
|
100
|
+
# Unpack arguments
|
|
101
|
+
filepath, ref_dict, cal_filepath = args
|
|
102
|
+
|
|
103
|
+
# Parse supplied file
|
|
104
|
+
gcms = get_gcms(filepath)
|
|
105
|
+
|
|
106
|
+
# Process chromatogram
|
|
107
|
+
gcms.process_chromatogram()
|
|
108
|
+
|
|
109
|
+
# Calibrate retention index
|
|
110
|
+
gcms.calibrate_ri(ref_dict, cal_filepath)
|
|
111
|
+
|
|
112
|
+
# Initialize GCMS refeerence database from MetabRef
|
|
113
|
+
sql_obj = start_gcms_metabref_sql()
|
|
114
|
+
|
|
115
|
+
# Initialize spectral match
|
|
116
|
+
lowResSearch = LowResMassSpectralMatch(gcms, sql_obj=sql_obj)
|
|
117
|
+
|
|
118
|
+
# Run spectral match
|
|
119
|
+
lowResSearch.run()
|
|
120
|
+
|
|
121
|
+
return gcms
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def auto_calibrate_and_search(
|
|
125
|
+
file_locations, output_filename, jobs, calibration_filepath
|
|
126
|
+
):
|
|
127
|
+
ref_dict, cal_filepath = get_reference_dict(
|
|
128
|
+
calibration_filepath=calibration_filepath
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
if ref_dict:
|
|
132
|
+
# run in multiprocessing mode
|
|
133
|
+
pool = Pool(jobs)
|
|
134
|
+
args = [(filepath, ref_dict, cal_filepath) for filepath in file_locations]
|
|
135
|
+
gcmss = pool.map(run, args)
|
|
136
|
+
pool.close()
|
|
137
|
+
pool.join()
|
|
138
|
+
for gcms in gcmss:
|
|
139
|
+
gcms.to_hdf()
|
|
140
|
+
gcms.to_csv(output_filename)
|
|
141
|
+
# print(output_filename)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def calibrate_and_search(filename, jobs):
|
|
145
|
+
import csv
|
|
146
|
+
|
|
147
|
+
from PySide2.QtCore import Qt
|
|
148
|
+
from PySide2.QtWidgets import QApplication, QFileDialog
|
|
149
|
+
|
|
150
|
+
ref_dict, cal_filepath = get_reference_dict()
|
|
151
|
+
|
|
152
|
+
if ref_dict:
|
|
153
|
+
file_dialog = QFileDialog()
|
|
154
|
+
file_dialog.setWindowFlags(Qt.WindowStaysOnTopHint)
|
|
155
|
+
|
|
156
|
+
if file_dialog:
|
|
157
|
+
file_locations = file_dialog.getOpenFileNames(
|
|
158
|
+
None, "Standard Compounds Files", filter="*.cdf"
|
|
159
|
+
)
|
|
160
|
+
file_dialog.close()
|
|
161
|
+
|
|
162
|
+
# run in multiprocessing mode
|
|
163
|
+
pool = Pool(jobs)
|
|
164
|
+
args = [
|
|
165
|
+
(filepath, ref_dict, cal_filepath) for filepath in file_locations[0]
|
|
166
|
+
]
|
|
167
|
+
gcmss = pool.map(run, args)
|
|
168
|
+
pool.close()
|
|
169
|
+
pool.join()
|
|
170
|
+
for gcms in gcmss:
|
|
171
|
+
gcms.to_csv(filename)
|
|
172
|
+
gcms.to_hdf()
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def worker(args):
|
|
176
|
+
cProfile.runctx("run(args)", globals(), locals(), "gc-ms.prof")
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def auto_process(jobs):
|
|
180
|
+
rootdir = get_dirname()
|
|
181
|
+
|
|
182
|
+
output_filenames = list(os.walk(rootdir))[0][1]
|
|
183
|
+
|
|
184
|
+
# print(output_filenames[0])
|
|
185
|
+
for output_filename in output_filenames:
|
|
186
|
+
# print(output_filename)
|
|
187
|
+
|
|
188
|
+
file_locations = glob.glob(str((rootdir / output_filename)) + "/*.cdf")
|
|
189
|
+
calibration_filepath = ""
|
|
190
|
+
for filepath in file_locations:
|
|
191
|
+
if "FAME" in filepath:
|
|
192
|
+
calibration_filepath = filepath
|
|
193
|
+
if calibration_filepath:
|
|
194
|
+
auto_calibrate_and_search(
|
|
195
|
+
file_locations, output_filename, jobs, calibration_filepath
|
|
196
|
+
)
|
|
197
|
+
else:
|
|
198
|
+
print(
|
|
199
|
+
"Could not find a calibration experimental file for {}".format(
|
|
200
|
+
output_filename
|
|
201
|
+
)
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
if __name__ == "__main__":
|
|
206
|
+
# Set token
|
|
207
|
+
TOKEN_PATH = "metabref.token"
|
|
208
|
+
MetabRefGCInterface().set_token(TOKEN_PATH)
|
|
209
|
+
|
|
210
|
+
jobs = 6
|
|
211
|
+
filename = "json_test"
|
|
212
|
+
|
|
213
|
+
calibrate_and_search(filename, jobs)
|