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,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)