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.
Files changed (171) hide show
  1. corems/__init__.py +63 -0
  2. corems/chroma_peak/__init__.py +0 -0
  3. corems/chroma_peak/calc/ChromaPeakCalc.py +480 -0
  4. corems/chroma_peak/calc/__init__.py +0 -0
  5. corems/chroma_peak/calc/subset.py +196 -0
  6. corems/chroma_peak/factory/__init__.py +0 -0
  7. corems/chroma_peak/factory/chroma_peak_classes.py +1178 -0
  8. corems/encapsulation/__init__.py +0 -0
  9. corems/encapsulation/constant.py +1283 -0
  10. corems/encapsulation/factory/__init__.py +0 -0
  11. corems/encapsulation/factory/parameters.py +392 -0
  12. corems/encapsulation/factory/processingSetting.py +1244 -0
  13. corems/encapsulation/input/__init__.py +0 -0
  14. corems/encapsulation/input/parameter_from_json.py +579 -0
  15. corems/encapsulation/output/__init__.py +0 -0
  16. corems/encapsulation/output/parameter_to_dict.py +142 -0
  17. corems/encapsulation/output/parameter_to_json.py +332 -0
  18. corems/mass_spectra/__init__.py +0 -0
  19. corems/mass_spectra/calc/GC_Calc.py +84 -0
  20. corems/mass_spectra/calc/GC_Deconvolution.py +558 -0
  21. corems/mass_spectra/calc/GC_RI_Calibration.py +44 -0
  22. corems/mass_spectra/calc/MZSearch.py +249 -0
  23. corems/mass_spectra/calc/SignalProcessing.py +656 -0
  24. corems/mass_spectra/calc/__init__.py +0 -0
  25. corems/mass_spectra/calc/lc_calc.py +5790 -0
  26. corems/mass_spectra/calc/lc_calc_operations.py +1127 -0
  27. corems/mass_spectra/factory/GC_Class.py +791 -0
  28. corems/mass_spectra/factory/__init__.py +0 -0
  29. corems/mass_spectra/factory/chromat_data.py +51 -0
  30. corems/mass_spectra/factory/lc_class.py +2721 -0
  31. corems/mass_spectra/input/__init__.py +0 -0
  32. corems/mass_spectra/input/andiNetCDF.py +200 -0
  33. corems/mass_spectra/input/boosterHDF5.py +216 -0
  34. corems/mass_spectra/input/brukerSolarix.py +153 -0
  35. corems/mass_spectra/input/brukerSolarix_utils.py +73 -0
  36. corems/mass_spectra/input/corems_hdf5.py +1710 -0
  37. corems/mass_spectra/input/massList.py +133 -0
  38. corems/mass_spectra/input/mzml.py +668 -0
  39. corems/mass_spectra/input/parserbase.py +239 -0
  40. corems/mass_spectra/input/rawFileReader.py +1839 -0
  41. corems/mass_spectra/output/__init__.py +0 -0
  42. corems/mass_spectra/output/export.py +2800 -0
  43. corems/mass_spectrum/__init__.py +0 -0
  44. corems/mass_spectrum/calc/AutoRecalibration.py +237 -0
  45. corems/mass_spectrum/calc/Calibration.py +602 -0
  46. corems/mass_spectrum/calc/CalibrationCalc.py +253 -0
  47. corems/mass_spectrum/calc/KendrickGroup.py +239 -0
  48. corems/mass_spectrum/calc/MassErrorPrediction.py +436 -0
  49. corems/mass_spectrum/calc/MassSpectrumCalc.py +303 -0
  50. corems/mass_spectrum/calc/MeanResolvingPowerFilter.py +212 -0
  51. corems/mass_spectrum/calc/NoiseCalc.py +371 -0
  52. corems/mass_spectrum/calc/NoiseCalc_Bayes.py +93 -0
  53. corems/mass_spectrum/calc/PeakPicking.py +994 -0
  54. corems/mass_spectrum/calc/__init__.py +0 -0
  55. corems/mass_spectrum/factory/MassSpectrumClasses.py +1753 -0
  56. corems/mass_spectrum/factory/__init__.py +0 -0
  57. corems/mass_spectrum/input/__init__.py +0 -0
  58. corems/mass_spectrum/input/baseClass.py +531 -0
  59. corems/mass_spectrum/input/boosterHDF5.py +161 -0
  60. corems/mass_spectrum/input/coremsHDF5.py +475 -0
  61. corems/mass_spectrum/input/massList.py +402 -0
  62. corems/mass_spectrum/input/numpyArray.py +133 -0
  63. corems/mass_spectrum/output/__init__.py +0 -0
  64. corems/mass_spectrum/output/export.py +841 -0
  65. corems/molecular_formula/__init__.py +0 -0
  66. corems/molecular_formula/calc/MolecularFormulaCalc.py +885 -0
  67. corems/molecular_formula/calc/__init__.py +0 -0
  68. corems/molecular_formula/factory/MolecularFormulaFactory.py +895 -0
  69. corems/molecular_formula/factory/__init__.py +0 -0
  70. corems/molecular_formula/input/__init__.py +0 -0
  71. corems/molecular_formula/input/masslist_ref.py +355 -0
  72. corems/molecular_id/__init__.py +0 -0
  73. corems/molecular_id/calc/ClusterFilter.py +251 -0
  74. corems/molecular_id/calc/MolecularFilter.py +122 -0
  75. corems/molecular_id/calc/SpectralSimilarity.py +632 -0
  76. corems/molecular_id/calc/__init__.py +0 -0
  77. corems/molecular_id/calc/math_distance.py +1637 -0
  78. corems/molecular_id/data/FAMES_REF.msp +980 -0
  79. corems/molecular_id/data/PNNLMetV20191015.msp +157267 -0
  80. corems/molecular_id/factory/EI_SQL.py +650 -0
  81. corems/molecular_id/factory/MolecularLookupTable.py +914 -0
  82. corems/molecular_id/factory/__init__.py +0 -0
  83. corems/molecular_id/factory/classification.py +884 -0
  84. corems/molecular_id/factory/lipid_molecular_metadata.py +50 -0
  85. corems/molecular_id/factory/molecularSQL.py +827 -0
  86. corems/molecular_id/factory/spectrum_search_results.py +119 -0
  87. corems/molecular_id/input/__init__.py +0 -0
  88. corems/molecular_id/input/nistMSI.py +148 -0
  89. corems/molecular_id/search/__init__.py +0 -0
  90. corems/molecular_id/search/compoundSearch.py +214 -0
  91. corems/molecular_id/search/database_interfaces.py +1527 -0
  92. corems/molecular_id/search/findOxygenPeaks.py +330 -0
  93. corems/molecular_id/search/lcms_spectral_search.py +348 -0
  94. corems/molecular_id/search/molecularFormulaSearch.py +1117 -0
  95. corems/molecular_id/search/priorityAssignment.py +723 -0
  96. corems/ms_peak/__init__.py +0 -0
  97. corems/ms_peak/calc/MSPeakCalc.py +1010 -0
  98. corems/ms_peak/calc/__init__.py +0 -0
  99. corems/ms_peak/factory/MSPeakClasses.py +542 -0
  100. corems/ms_peak/factory/__init__.py +0 -0
  101. corems/transient/__init__.py +0 -0
  102. corems/transient/calc/TransientCalc.py +362 -0
  103. corems/transient/calc/__init__.py +0 -0
  104. corems/transient/factory/TransientClasses.py +457 -0
  105. corems/transient/factory/__init__.py +0 -0
  106. corems/transient/input/__init__.py +0 -0
  107. corems/transient/input/brukerSolarix.py +461 -0
  108. corems/transient/input/midasDatFile.py +172 -0
  109. corems-4.0.0.dist-info/METADATA +475 -0
  110. corems-4.0.0.dist-info/RECORD +171 -0
  111. corems-4.0.0.dist-info/WHEEL +5 -0
  112. corems-4.0.0.dist-info/licenses/LICENSE +22 -0
  113. corems-4.0.0.dist-info/top_level.txt +4 -0
  114. examples/archive/scripts/CoreMS_tutorial.py +94 -0
  115. examples/archive/scripts/DI HR-MS Halogens Bruker.py +196 -0
  116. examples/archive/scripts/DI HR-MS MassList.py +385 -0
  117. examples/archive/scripts/GC-MS MetabRef.py +213 -0
  118. examples/archive/scripts/GC-MS NetCDF.py +217 -0
  119. examples/archive/scripts/HR-MS Thermo Raw 21T.py +136 -0
  120. examples/archive/scripts/LC-ICPMS_metal_peaks.py +297 -0
  121. examples/archive/scripts/LCMS-Thermo.py +460 -0
  122. examples/archive/scripts/LCMS_isotopes.py +283 -0
  123. examples/archive/scripts/MSParams_example.py +21 -0
  124. examples/archive/scripts/Molecular Formula Data Aggreation.py +84 -0
  125. examples/archive/scripts/Single Mz Search.py +69 -0
  126. examples/test_notebooks.py +145 -0
  127. ext_lib/ChemstationMSFileReader.dll +0 -0
  128. ext_lib/ChemstationMSFileReader.xml +126 -0
  129. ext_lib/RawFileReaderLicense.doc +0 -0
  130. ext_lib/ThermoFisher.CommonCore.BackgroundSubtraction.dll +0 -0
  131. ext_lib/ThermoFisher.CommonCore.BackgroundSubtraction.xml +2307 -0
  132. ext_lib/ThermoFisher.CommonCore.Data.dll +0 -0
  133. ext_lib/ThermoFisher.CommonCore.Data.xml +28974 -0
  134. ext_lib/ThermoFisher.CommonCore.MassPrecisionEstimator.dll +0 -0
  135. ext_lib/ThermoFisher.CommonCore.MassPrecisionEstimator.xml +241 -0
  136. ext_lib/ThermoFisher.CommonCore.RawFileReader.dll +0 -0
  137. ext_lib/ThermoFisher.CommonCore.RawFileReader.xml +31174 -0
  138. ext_lib/__init__.py +0 -0
  139. ext_lib/dotnet/OpenMcdf.Extensions.dll +0 -0
  140. ext_lib/dotnet/OpenMcdf.dll +0 -0
  141. ext_lib/dotnet/OpenMcdf.xml +1154 -0
  142. ext_lib/dotnet/System.IO.FileSystem.AccessControl.dll +0 -0
  143. ext_lib/dotnet/System.IO.FileSystem.AccessControl.xml +506 -0
  144. ext_lib/dotnet/System.Security.AccessControl.dll +0 -0
  145. ext_lib/dotnet/System.Security.AccessControl.xml +2043 -0
  146. ext_lib/dotnet/System.Security.Principal.Windows.dll +0 -0
  147. ext_lib/dotnet/System.Security.Principal.Windows.xml +1011 -0
  148. ext_lib/dotnet/ThermoFisher.CommonCore.BackgroundSubtraction.dll +0 -0
  149. ext_lib/dotnet/ThermoFisher.CommonCore.BackgroundSubtraction.xml +2307 -0
  150. ext_lib/dotnet/ThermoFisher.CommonCore.Data.dll +0 -0
  151. ext_lib/dotnet/ThermoFisher.CommonCore.Data.xml +29148 -0
  152. ext_lib/dotnet/ThermoFisher.CommonCore.MassPrecisionEstimator.dll +0 -0
  153. ext_lib/dotnet/ThermoFisher.CommonCore.MassPrecisionEstimator.xml +241 -0
  154. ext_lib/dotnet/ThermoFisher.CommonCore.RawFileReader.dll +0 -0
  155. ext_lib/dotnet/ThermoFisher.CommonCore.RawFileReader.xml +31492 -0
  156. ext_lib/version +18 -0
  157. support_code/atom_parsers/AtomsDescription.py +359 -0
  158. support_code/atom_parsers/CreateAtomsDescription.py +56 -0
  159. support_code/nmdc/filefinder.py +90 -0
  160. support_code/nmdc/lipidomics/lipidomics_workflow.py +748 -0
  161. support_code/nmdc/lipidomics/manifest_examples.py +49 -0
  162. support_code/nmdc/metabolomics/gcms_workflow.py +158 -0
  163. support_code/nmdc/metabolomics/lcms_metabolomics_targeted_search.py +59 -0
  164. support_code/nmdc/metabolomics/lcms_metabolomics_workflow.py +248 -0
  165. support_code/nmdc/metabolomics/metabolomics_collection.py +628 -0
  166. support_code/nmdc/metadata/dms_api.py +42 -0
  167. support_code/nmdc/nom/archived_scripts/nmdc_metadata_gen.py +288 -0
  168. support_code/nmdc/nom/archived_scripts/nom_grow_workflow.py +209 -0
  169. support_code/nmdc/nom/nom_workflow.py +312 -0
  170. support_code/windows_only_importers/BrukerCompassXtract.py +180 -0
  171. 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.")