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,312 @@
|
|
|
1
|
+
import warnings
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
warnings.filterwarnings("ignore")
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
sys.path.append("./")
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
import cProfile
|
|
12
|
+
import json
|
|
13
|
+
import pstats
|
|
14
|
+
from multiprocessing import Pool, Process
|
|
15
|
+
|
|
16
|
+
from pandas import DataFrame
|
|
17
|
+
from matplotlib import pyplot as plt
|
|
18
|
+
|
|
19
|
+
from corems.mass_spectrum.calc.Calibration import MzDomainCalibration
|
|
20
|
+
|
|
21
|
+
from corems.mass_spectrum.input.massList import ReadMassList
|
|
22
|
+
from corems.molecular_id.factory.classification import HeteroatomsClassification, Labels
|
|
23
|
+
from corems.molecular_id.search.priorityAssignment import OxygenPriorityAssignment
|
|
24
|
+
from corems.molecular_id.search.molecularFormulaSearch import SearchMolecularFormulas
|
|
25
|
+
from corems import SuppressPrints
|
|
26
|
+
from corems.transient.input.brukerSolarix import ReadBrukerSolarix
|
|
27
|
+
from corems.mass_spectra.input import rawFileReader
|
|
28
|
+
from corems.encapsulation.factory.parameters import MSParameters
|
|
29
|
+
from support_code.nmdc.metadata.nmdc_registration import DMS_Mapping, NMDC_Metadata
|
|
30
|
+
from support_code.nmdc.filefinder import get_dirnames, get_filename
|
|
31
|
+
|
|
32
|
+
def run_bruker(file_location):
|
|
33
|
+
|
|
34
|
+
with ReadBrukerSolarix(file_location) as transient:
|
|
35
|
+
|
|
36
|
+
MSParameters.mass_spectrum.noise_threshold_methodmethod = 'log'
|
|
37
|
+
MSParameters.mass_spectrum.noise_threshold_min_s2n = 6
|
|
38
|
+
|
|
39
|
+
mass_spectrum = transient.get_mass_spectrum(plot_result=False, auto_process=True)
|
|
40
|
+
# mass_spectrum.plot_profile_and_noise_threshold()
|
|
41
|
+
# plt.show()
|
|
42
|
+
|
|
43
|
+
return mass_spectrum, transient.transient_time
|
|
44
|
+
|
|
45
|
+
def run_thermo(file_location):
|
|
46
|
+
|
|
47
|
+
MSParameters.mass_spectrum.noise_threshold_method = 'log'
|
|
48
|
+
MSParameters.mass_spectrum.noise_threshold_min_std = 3
|
|
49
|
+
MSParameters.ms_peak.peak_min_prominence_percent = 0.2
|
|
50
|
+
|
|
51
|
+
parser = rawFileReader.ImportMassSpectraThermoMSFileReader(file_location)
|
|
52
|
+
|
|
53
|
+
# mass_spectrum = transient.get_mass_spectrum(plot_result=False, auto_process=True)
|
|
54
|
+
|
|
55
|
+
mass_spectrum = parser.get_average_mass_spectrum()
|
|
56
|
+
|
|
57
|
+
return mass_spectrum, 3
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def calspec(msobj, refmasslist, order=2):
|
|
61
|
+
|
|
62
|
+
calfn = MzDomainCalibration(msobj, refmasslist)
|
|
63
|
+
ref_mass_list_fmt = calfn.load_ref_mass_list()
|
|
64
|
+
|
|
65
|
+
imzmeas, mzrefs = calfn.find_calibration_points(ref_mass_list_fmt,
|
|
66
|
+
calib_ppm_error_threshold=(-1.0, 1.0),
|
|
67
|
+
calib_snr_threshold=4)
|
|
68
|
+
|
|
69
|
+
if len(mzrefs) < 5:
|
|
70
|
+
imzmeas, mzrefs = calfn.find_calibration_points(ref_mass_list_fmt,
|
|
71
|
+
calib_ppm_error_threshold=(-1.5, 1.5),
|
|
72
|
+
calib_snr_threshold=4)
|
|
73
|
+
|
|
74
|
+
if len(mzrefs) < 5:
|
|
75
|
+
imzmeas, mzrefs = calfn.find_calibration_points(ref_mass_list_fmt,
|
|
76
|
+
calib_ppm_error_threshold=(-3, 3),
|
|
77
|
+
calib_snr_threshold=4)
|
|
78
|
+
|
|
79
|
+
if len(mzrefs) < 5:
|
|
80
|
+
imzmeas, mzrefs = calfn.find_calibration_points(ref_mass_list_fmt,
|
|
81
|
+
calib_ppm_error_threshold=(-5, 5),
|
|
82
|
+
calib_snr_threshold=4)
|
|
83
|
+
|
|
84
|
+
if len(mzrefs) < 5:
|
|
85
|
+
|
|
86
|
+
imzmeas, mzrefs = calfn.find_calibration_points(ref_mass_list_fmt,
|
|
87
|
+
calib_ppm_error_threshold=(-7, 7),
|
|
88
|
+
calib_snr_threshold=4)
|
|
89
|
+
|
|
90
|
+
if len(mzrefs) < 5:
|
|
91
|
+
|
|
92
|
+
imzmeas, mzrefs = calfn.find_calibration_points(ref_mass_list_fmt,
|
|
93
|
+
calib_ppm_error_threshold=(-10, 10),
|
|
94
|
+
calib_snr_threshold=4)
|
|
95
|
+
|
|
96
|
+
calfn.recalibrate_mass_spectrum(imzmeas, mzrefs, order=order)
|
|
97
|
+
|
|
98
|
+
def set_parameters(mass_spectrum, field_strength=12, pos=False):
|
|
99
|
+
|
|
100
|
+
if field_strength == 12:
|
|
101
|
+
|
|
102
|
+
mass_spectrum.settings.max_calib_ppm_error = 10
|
|
103
|
+
mass_spectrum.settings.min_calib_ppm_error = -10
|
|
104
|
+
|
|
105
|
+
mass_spectrum.molecular_search_settings.error_method = 'None'
|
|
106
|
+
mass_spectrum.molecular_search_settings.min_ppm_error = -1
|
|
107
|
+
mass_spectrum.molecular_search_settings.max_ppm_error = 1
|
|
108
|
+
|
|
109
|
+
mass_spectrum.settings.calib_sn_threshold = 4
|
|
110
|
+
|
|
111
|
+
elif field_strength == 15:
|
|
112
|
+
|
|
113
|
+
mass_spectrum.settings.max_calib_ppm_error = 3
|
|
114
|
+
mass_spectrum.settings.min_calib_ppm_error = -3
|
|
115
|
+
|
|
116
|
+
mass_spectrum.molecular_search_settings.error_method = 'None'
|
|
117
|
+
mass_spectrum.molecular_search_settings.min_ppm_error = -1
|
|
118
|
+
mass_spectrum.molecular_search_settings.max_ppm_error = 1
|
|
119
|
+
|
|
120
|
+
mass_spectrum.settings.calib_sn_threshold = 4
|
|
121
|
+
|
|
122
|
+
elif field_strength == 7:
|
|
123
|
+
|
|
124
|
+
mass_spectrum.settings.max_calib_ppm_error = 3
|
|
125
|
+
mass_spectrum.settings.min_calib_ppm_error = -3
|
|
126
|
+
|
|
127
|
+
mass_spectrum.molecular_search_settings.error_method = 'None'
|
|
128
|
+
mass_spectrum.molecular_search_settings.min_ppm_error = -1
|
|
129
|
+
mass_spectrum.molecular_search_settings.max_ppm_error = 1
|
|
130
|
+
|
|
131
|
+
mass_spectrum.settings.calib_sn_threshold = 4
|
|
132
|
+
# 21T Data
|
|
133
|
+
else:
|
|
134
|
+
|
|
135
|
+
mass_spectrum.settings.max_calib_ppm_error = 1
|
|
136
|
+
mass_spectrum.settings.min_calib_ppm_error = -1
|
|
137
|
+
|
|
138
|
+
mass_spectrum.molecular_search_settings.error_method = 'None'
|
|
139
|
+
mass_spectrum.molecular_search_settings.min_ppm_error = -0.5
|
|
140
|
+
mass_spectrum.molecular_search_settings.max_ppm_error = 0.5
|
|
141
|
+
|
|
142
|
+
mass_spectrum.molecular_search_settings.url_database = "postgresql+psycopg2://coremsappdb:coremsapppnnl@localhost:5432/coremsapp"
|
|
143
|
+
mass_spectrum.molecular_search_settings.min_dbe = 0
|
|
144
|
+
mass_spectrum.molecular_search_settings.max_dbe = 40
|
|
145
|
+
|
|
146
|
+
if pos:
|
|
147
|
+
|
|
148
|
+
mass_spectrum.molecular_search_settings.usedAtoms['C'] = (1, 100)
|
|
149
|
+
mass_spectrum.molecular_search_settings.usedAtoms['H'] = (4, 200)
|
|
150
|
+
mass_spectrum.molecular_search_settings.usedAtoms['O'] = (1, 12)
|
|
151
|
+
mass_spectrum.molecular_search_settings.usedAtoms['N'] = (0, 3)
|
|
152
|
+
mass_spectrum.molecular_search_settings.usedAtoms['S'] = (0, 1)
|
|
153
|
+
|
|
154
|
+
else:
|
|
155
|
+
|
|
156
|
+
mass_spectrum.molecular_search_settings.usedAtoms['C'] = (1, 100)
|
|
157
|
+
mass_spectrum.molecular_search_settings.usedAtoms['H'] = (4, 200)
|
|
158
|
+
mass_spectrum.molecular_search_settings.usedAtoms['O'] = (0, 22)
|
|
159
|
+
mass_spectrum.molecular_search_settings.usedAtoms['N'] = (0, 1)
|
|
160
|
+
mass_spectrum.molecular_search_settings.usedAtoms['S'] = (0, 1)
|
|
161
|
+
|
|
162
|
+
mass_spectrum.molecular_search_settings.usedAtoms['Cl'] = (0, 0)
|
|
163
|
+
mass_spectrum.molecular_search_settings.usedAtoms['Br'] = (0, 0)
|
|
164
|
+
mass_spectrum.molecular_search_settings.usedAtoms['P'] = (0, 0)
|
|
165
|
+
mass_spectrum.molecular_search_settings.usedAtoms['Na'] = (0, 0)
|
|
166
|
+
|
|
167
|
+
mass_spectrum.molecular_search_settings.isProtonated = True
|
|
168
|
+
mass_spectrum.molecular_search_settings.isRadical = False
|
|
169
|
+
mass_spectrum.molecular_search_settings.isAdduct = False
|
|
170
|
+
|
|
171
|
+
def run_nmdc_workflow(args):
|
|
172
|
+
# mass_spectrum = get_masslist(file_location)
|
|
173
|
+
try:
|
|
174
|
+
file_location, ref_calibration_file, field_strength = args
|
|
175
|
+
|
|
176
|
+
if field_strength == 21:
|
|
177
|
+
|
|
178
|
+
# return "21T", None
|
|
179
|
+
# print("{} {}".format("21T", file_location))
|
|
180
|
+
print("{} {} {}".format("processing", field_strength, file_location))
|
|
181
|
+
mass_spectrum, transient_time = run_thermo(file_location)
|
|
182
|
+
|
|
183
|
+
else:
|
|
184
|
+
|
|
185
|
+
print("{} {} {}".format("processing", field_strength, file_location))
|
|
186
|
+
mass_spectrum, transient_time = run_bruker(file_location)
|
|
187
|
+
# return "not 21T", None
|
|
188
|
+
|
|
189
|
+
is_pos = True if mass_spectrum.polarity > 0 else False
|
|
190
|
+
|
|
191
|
+
if is_pos:
|
|
192
|
+
|
|
193
|
+
return "positive", None
|
|
194
|
+
|
|
195
|
+
if len(mass_spectrum) < 30:
|
|
196
|
+
|
|
197
|
+
print("{} {}".format("too few peaks", file_location))
|
|
198
|
+
return "too few peaks", None
|
|
199
|
+
|
|
200
|
+
set_parameters(mass_spectrum, field_strength=field_strength, pos=is_pos)
|
|
201
|
+
|
|
202
|
+
if ref_calibration_file:
|
|
203
|
+
|
|
204
|
+
calspec(mass_spectrum, ref_calibration_file)
|
|
205
|
+
# MzDomainCalibration(mass_spectrum, ref_calibration_file).run()
|
|
206
|
+
|
|
207
|
+
# mass_spectrum.filter_by_max_resolving_power(field_strength, transient_time)
|
|
208
|
+
|
|
209
|
+
SearchMolecularFormulas(mass_spectrum, first_hit=False).run_worker_mass_spectrum()
|
|
210
|
+
mass_spectrum.percentile_assigned(report_error=True)
|
|
211
|
+
mass_spectrum.molecular_search_settings.score_method = "prob_score"
|
|
212
|
+
mass_spectrum.molecular_search_settings.output_score_method = "prob_score"
|
|
213
|
+
|
|
214
|
+
return "all_good", mass_spectrum
|
|
215
|
+
|
|
216
|
+
except Exception as inst:
|
|
217
|
+
|
|
218
|
+
print(type(inst)) # the exception instance
|
|
219
|
+
print(inst.args) # arguments stored in .args
|
|
220
|
+
print(inst)
|
|
221
|
+
return 'error', None
|
|
222
|
+
|
|
223
|
+
def monitor(target):
|
|
224
|
+
|
|
225
|
+
import psutil
|
|
226
|
+
import time
|
|
227
|
+
|
|
228
|
+
worker_process = Process(target=target)
|
|
229
|
+
worker_process.start()
|
|
230
|
+
p = psutil.Process(worker_process.pid)
|
|
231
|
+
|
|
232
|
+
# log cpu usage of `worker_process` every 10 ms
|
|
233
|
+
cpu_percents = []
|
|
234
|
+
while worker_process.is_alive():
|
|
235
|
+
cpu_percents.append(p.cpu_percent())
|
|
236
|
+
time.sleep(0.01)
|
|
237
|
+
|
|
238
|
+
worker_process.join()
|
|
239
|
+
return cpu_percents
|
|
240
|
+
|
|
241
|
+
def worker(file_location):
|
|
242
|
+
|
|
243
|
+
cProfile.runctx('run_assignment(file_location)', globals(), locals(), 'di-fticr-di.prof')
|
|
244
|
+
# stats = pstats.Stats("topics.prof")
|
|
245
|
+
# stats.strip_dirs().sort_stats("time").print_stats()
|
|
246
|
+
|
|
247
|
+
def run_nom_nmdc_data_processing():
|
|
248
|
+
|
|
249
|
+
file_ext = '.raw' # '.d'
|
|
250
|
+
data_dir = Path("/Users/eber373/OneDrive - PNNL/Documents/Data/FT_ICR_MS/Spruce_Data/")
|
|
251
|
+
dms_file_path = Path("/Users/eber373/OneDrive - PNNL/Documents/Data/FT_ICR_MS/Spruce_Data/SPRUCE_FTICR_Peat.xlsx")
|
|
252
|
+
|
|
253
|
+
results_dir = Path("results/")
|
|
254
|
+
registration_path = results_dir / "spruce_ftms_nom_data_products.json"
|
|
255
|
+
failed_files = results_dir / "nom_failed_files.json"
|
|
256
|
+
pos_files = results_dir / "pos_files.json"
|
|
257
|
+
|
|
258
|
+
field_strength = 21
|
|
259
|
+
cores = 4
|
|
260
|
+
ref_calibration_path = False
|
|
261
|
+
|
|
262
|
+
# file_paths = get_dirnames()
|
|
263
|
+
ref_calibration_path = Path("db/Hawkes_neg.ref")
|
|
264
|
+
|
|
265
|
+
dms_mapping = DMS_Mapping(dms_file_path)
|
|
266
|
+
selected_files = dms_mapping.get_selected_sample_list()
|
|
267
|
+
|
|
268
|
+
failed_list = []
|
|
269
|
+
pos_list = []
|
|
270
|
+
|
|
271
|
+
for file_name, field_strength in selected_files:
|
|
272
|
+
|
|
273
|
+
in_file_path = data_dir / file_name / file_name.with_suffix(file_ext)
|
|
274
|
+
|
|
275
|
+
try:
|
|
276
|
+
|
|
277
|
+
issue, ms = run_nmdc_workflow((in_file_path, ref_calibration_path, field_strength))
|
|
278
|
+
|
|
279
|
+
if ms:
|
|
280
|
+
|
|
281
|
+
file_name = Path(in_file_path.name)
|
|
282
|
+
|
|
283
|
+
output_file_path = results_dir / file_name.with_suffix('.csv')
|
|
284
|
+
ms.to_csv(output_file_path, write_metadata=False)
|
|
285
|
+
|
|
286
|
+
nmdc = NMDC_Metadata(in_file_path, ref_calibration_path, output_file_path, dms_file_path)
|
|
287
|
+
nmdc.create_nmdc_ftms_metadata(ms, registration_path)
|
|
288
|
+
|
|
289
|
+
else:
|
|
290
|
+
print(issue)
|
|
291
|
+
|
|
292
|
+
except Exception as inst:
|
|
293
|
+
|
|
294
|
+
print(type(inst)) # the exception instance
|
|
295
|
+
print(inst.args) # arguments stored in .args
|
|
296
|
+
print(inst)
|
|
297
|
+
failed_list.append(str(in_file_path))
|
|
298
|
+
|
|
299
|
+
with failed_files.open('w') as json_file:
|
|
300
|
+
|
|
301
|
+
json_file.write(json.dumps(failed_list, indent=1))
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
if __name__ == "__main__":
|
|
305
|
+
|
|
306
|
+
# run_multiprocess()
|
|
307
|
+
# cpu_percents = monitor(target=run_multiprocess)
|
|
308
|
+
# print(cpu_percents)
|
|
309
|
+
run_nom_nmdc_data_processing()
|
|
310
|
+
# file_location = get_filename()
|
|
311
|
+
# if file_location:
|
|
312
|
+
# run_assignment(file_location)
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
from ctypes import c_long
|
|
2
|
+
from threading import Thread
|
|
3
|
+
|
|
4
|
+
from comtypes.automation import BSTR
|
|
5
|
+
from comtypes.client import CreateObject
|
|
6
|
+
from numpy import array
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
from corems.encapsulation.factory.parameters import default_parameters
|
|
10
|
+
from corems.encapsulation.constant import Labels
|
|
11
|
+
from corems.mass_spectra.factory.LC_Class import LCMSBase
|
|
12
|
+
from corems.mass_spectrum.factory.MassSpectrumClasses import MassSpecProfile
|
|
13
|
+
|
|
14
|
+
__author__ = "Yuri E. Corilo"
|
|
15
|
+
__date__ = "July 10, 2019"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ImportLCMSBrukerCompassXtract(Thread):
|
|
19
|
+
"""Class for importing LC-MS data from Bruker Compass Xtract files.
|
|
20
|
+
|
|
21
|
+
Parameters:
|
|
22
|
+
-----------
|
|
23
|
+
file_location : str
|
|
24
|
+
The path to the Bruker Compass Xtract file.
|
|
25
|
+
auto_process : bool, optional
|
|
26
|
+
Flag indicating whether to automatically process the imported data.
|
|
27
|
+
Default is True.
|
|
28
|
+
|
|
29
|
+
Attributes:
|
|
30
|
+
-----------
|
|
31
|
+
initial_scan_number : int
|
|
32
|
+
The initial scan number to import.
|
|
33
|
+
final_scan_number : int
|
|
34
|
+
The final scan number to import.
|
|
35
|
+
|
|
36
|
+
Methods:
|
|
37
|
+
--------
|
|
38
|
+
check_scan(scan: int) -> bool:
|
|
39
|
+
Check if the given scan number is valid.
|
|
40
|
+
get_scans_numbers() -> int:
|
|
41
|
+
Get the total number of scans in the file.
|
|
42
|
+
get_polarity_mode(spectrum) -> int:
|
|
43
|
+
Get the polarity mode of a given spectrum.
|
|
44
|
+
check_load_success() -> None:
|
|
45
|
+
Check if the file was loaded successfully.
|
|
46
|
+
get_bruker_tics() -> array:
|
|
47
|
+
Get the total ion current (TIC) array from the file.
|
|
48
|
+
get_bruker_retention_time() -> array:
|
|
49
|
+
Get the retention time array from the file.
|
|
50
|
+
get_data(spectra, scan: int) -> dict:
|
|
51
|
+
Get the mass spectrum data for a given scan number.
|
|
52
|
+
run() -> None:
|
|
53
|
+
Run the import process.
|
|
54
|
+
_import_mass_spectra(d_params: dict) -> None:
|
|
55
|
+
Import the mass spectra from the file.
|
|
56
|
+
get_lcms_obj() -> LCMSBase:
|
|
57
|
+
Get the LCMSBase object.
|
|
58
|
+
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
def __init__(self, file_location: str, auto_process: bool = True):
|
|
62
|
+
Thread.__init__(self)
|
|
63
|
+
self.lcms: LCMSBase = LCMSBase(file_location)
|
|
64
|
+
self.Bruker_Library = CreateObject("EDAL.MSAnalysis")
|
|
65
|
+
self.res = self.Bruker_Library.Open(file_location)
|
|
66
|
+
self.check_load_success()
|
|
67
|
+
self._initial_scan_number: int = 1
|
|
68
|
+
self._final_scan_number: int = self.get_scans_numbers()
|
|
69
|
+
self.file_location: str = file_location
|
|
70
|
+
self.auto_process: bool = auto_process
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def initial_scan_number(self) -> int:
|
|
74
|
+
return self._initial_scan_number
|
|
75
|
+
|
|
76
|
+
@initial_scan_number.setter
|
|
77
|
+
def initial_scan_number(self, initial_scan_number: int) -> None:
|
|
78
|
+
if self.check_scan(initial_scan_number):
|
|
79
|
+
self._initial_scan_number = initial_scan_number
|
|
80
|
+
else:
|
|
81
|
+
raise Exception(
|
|
82
|
+
f"startscan and finalscan should be less than {self.get_scans_numbers()}"
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def final_scan_number(self) -> int:
|
|
87
|
+
return self._final_scan_number
|
|
88
|
+
|
|
89
|
+
@final_scan_number.setter
|
|
90
|
+
def final_scan_number(self, final_scan_number: int) -> None:
|
|
91
|
+
if self.check_scan(final_scan_number):
|
|
92
|
+
self._final_scan_number = final_scan_number
|
|
93
|
+
else:
|
|
94
|
+
raise Exception(
|
|
95
|
+
f"startscan and finalscan should be less than {self.get_scans_numbers()}"
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
def check_scan(self, scan: int) -> bool:
|
|
99
|
+
scan_numbers = self.get_scans_numbers()
|
|
100
|
+
return scan <= scan_numbers
|
|
101
|
+
|
|
102
|
+
def get_scans_numbers(self) -> int:
|
|
103
|
+
scan_numbers = self.Bruker_Library.MSSpectrumCollection.Count
|
|
104
|
+
return scan_numbers
|
|
105
|
+
|
|
106
|
+
def get_polarity_mode(self, spectrum) -> int:
|
|
107
|
+
polarity_symbol = spectrum.Polarity
|
|
108
|
+
if polarity_symbol == 0:
|
|
109
|
+
return 1
|
|
110
|
+
elif polarity_symbol == 1:
|
|
111
|
+
return -1
|
|
112
|
+
else:
|
|
113
|
+
raise IOError("Could not read mass spectrum polarity mode")
|
|
114
|
+
|
|
115
|
+
def check_load_success(self) -> None:
|
|
116
|
+
if self.res == 0:
|
|
117
|
+
self.break_it = False
|
|
118
|
+
else:
|
|
119
|
+
raise ImportError(str(self.res))
|
|
120
|
+
|
|
121
|
+
def get_bruker_tics(self) -> array:
|
|
122
|
+
strAnalysisData = "SumIntensity"
|
|
123
|
+
if self.Bruker_Library.HasAnalysisData(strAnalysisData):
|
|
124
|
+
tics_array = self.Bruker_Library.GetAnalysisData(strAnalysisData)
|
|
125
|
+
tics_array = array(tics_array)
|
|
126
|
+
return tics_array
|
|
127
|
+
|
|
128
|
+
def get_bruker_retention_time(self) -> array:
|
|
129
|
+
strAnalysisData = "RetentionTime"
|
|
130
|
+
if self.Bruker_Library.HasAnalysisData(strAnalysisData):
|
|
131
|
+
tics_array = self.Bruker_Library.GetAnalysisData(strAnalysisData)
|
|
132
|
+
tics_array = array(tics_array)
|
|
133
|
+
else:
|
|
134
|
+
tics_array = [0]
|
|
135
|
+
return tics_array
|
|
136
|
+
|
|
137
|
+
@staticmethod
|
|
138
|
+
def get_data(spectra, scan: int) -> dict:
|
|
139
|
+
spectrum = spectra[scan]
|
|
140
|
+
is_profile = c_long(1)
|
|
141
|
+
masslist = spectrum.GetMassIntensityValues(is_profile)
|
|
142
|
+
data_dict = {
|
|
143
|
+
Labels.mz: array(masslist[0]),
|
|
144
|
+
Labels.abundance: array(masslist[1]),
|
|
145
|
+
Labels.rp: None,
|
|
146
|
+
Labels.s2n: None,
|
|
147
|
+
}
|
|
148
|
+
return data_dict
|
|
149
|
+
|
|
150
|
+
def run(self) -> None:
|
|
151
|
+
d_parameters = default_parameters(self.file_location)
|
|
152
|
+
self._import_mass_spectra(d_parameters)
|
|
153
|
+
|
|
154
|
+
def _import_mass_spectra(self, d_params: dict) -> None:
|
|
155
|
+
spectra = self.Bruker_Library.MSSpectrumCollection
|
|
156
|
+
list_rt = self.get_bruker_retention_time()
|
|
157
|
+
list_Tics = self.get_bruker_tics()
|
|
158
|
+
list_scans = list()
|
|
159
|
+
for scan_number in range(self.initial_scan_number, self.final_scan_number + 1):
|
|
160
|
+
if spectra[scan_number].MSMSStage == 1:
|
|
161
|
+
d_params["label"] = Labels.bruker_profile
|
|
162
|
+
d_params["polarity"] = self.get_polarity_mode(spectra[scan_number])
|
|
163
|
+
d_params["rt"] = list_rt[scan_number - 1]
|
|
164
|
+
d_params["scan_number"] = scan_number
|
|
165
|
+
list_scans.append(scan_number)
|
|
166
|
+
data_dict = self.get_data(spectra, scan_number)
|
|
167
|
+
mass_spec = MassSpecProfile(
|
|
168
|
+
data_dict, d_params, auto_process=self.auto_process
|
|
169
|
+
)
|
|
170
|
+
mass_spec.process_mass_spec()
|
|
171
|
+
self.lcms.add_mass_spectrum(mass_spec)
|
|
172
|
+
self.lcms.retention_time = list_rt
|
|
173
|
+
self.lcms.tic = list_Tics
|
|
174
|
+
self.lcms.scans_number = list_scans
|
|
175
|
+
|
|
176
|
+
def get_lcms_obj(self) -> LCMSBase:
|
|
177
|
+
if self.lcms.get(self._initial_scan_number):
|
|
178
|
+
return self.lcms
|
|
179
|
+
else:
|
|
180
|
+
raise Exception("Returning an empty LCMSBase object.")
|