masster 0.2.0__tar.gz → 0.2.2__tar.gz

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.

Potentially problematic release.


This version of masster might be problematic. Click here for more details.

Files changed (71) hide show
  1. {masster-0.2.0 → masster-0.2.2}/PKG-INFO +31 -55
  2. {masster-0.2.0 → masster-0.2.2}/README.md +30 -54
  3. {masster-0.2.0 → masster-0.2.2}/pyproject.toml +1 -1
  4. {masster-0.2.0 → masster-0.2.2}/src/masster/_version.py +1 -1
  5. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/h5.py +18 -2
  6. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/sample5_schema.json +76 -58
  7. {masster-0.2.0 → masster-0.2.2}/src/masster/study/h5.py +317 -138
  8. {masster-0.2.0 → masster-0.2.2}/src/masster/study/helpers.py +6 -39
  9. {masster-0.2.0 → masster-0.2.2}/src/masster/study/load.py +23 -134
  10. {masster-0.2.0 → masster-0.2.2}/src/masster/study/study.py +29 -11
  11. {masster-0.2.0 → masster-0.2.2}/uv.lock +1 -1
  12. {masster-0.2.0 → masster-0.2.2}/.github/workflows/publish.yml +0 -0
  13. {masster-0.2.0 → masster-0.2.2}/.github/workflows/security.yml +0 -0
  14. {masster-0.2.0 → masster-0.2.2}/.github/workflows/test.yml +0 -0
  15. {masster-0.2.0 → masster-0.2.2}/.gitignore +0 -0
  16. {masster-0.2.0 → masster-0.2.2}/.pre-commit-config.yaml +0 -0
  17. {masster-0.2.0 → masster-0.2.2}/LICENSE +0 -0
  18. {masster-0.2.0 → masster-0.2.2}/Makefile +0 -0
  19. {masster-0.2.0 → masster-0.2.2}/TESTING.md +0 -0
  20. {masster-0.2.0 → masster-0.2.2}/demo/example_batch_process.py +0 -0
  21. {masster-0.2.0 → masster-0.2.2}/demo/example_sample_process.py +0 -0
  22. {masster-0.2.0 → masster-0.2.2}/src/masster/__init__.py +0 -0
  23. {masster-0.2.0 → masster-0.2.2}/src/masster/chromatogram.py +0 -0
  24. {masster-0.2.0 → masster-0.2.2}/src/masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.mzML +0 -0
  25. {masster-0.2.0 → masster-0.2.2}/src/masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.timeseries.data +0 -0
  26. {masster-0.2.0 → masster-0.2.2}/src/masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.wiff +0 -0
  27. {masster-0.2.0 → masster-0.2.2}/src/masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.wiff.scan +0 -0
  28. {masster-0.2.0 → masster-0.2.2}/src/masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.wiff2 +0 -0
  29. {masster-0.2.0 → masster-0.2.2}/src/masster/logger.py +0 -0
  30. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/__init__.py +0 -0
  31. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/defaults/__init__.py +0 -0
  32. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/defaults/find_adducts_def.py +0 -0
  33. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/defaults/find_features_def.py +0 -0
  34. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/defaults/find_ms2_def.py +0 -0
  35. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/defaults/get_spectrum_def.py +0 -0
  36. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/defaults/sample_def.py +0 -0
  37. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/helpers.py +0 -0
  38. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/load.py +0 -0
  39. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/parameters.py +0 -0
  40. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/plot.py +0 -0
  41. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/processing.py +0 -0
  42. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/sample.py +0 -0
  43. {masster-0.2.0 → masster-0.2.2}/src/masster/sample/save.py +0 -0
  44. {masster-0.2.0 → masster-0.2.2}/src/masster/spectrum.py +0 -0
  45. {masster-0.2.0 → masster-0.2.2}/src/masster/study/__init__.py +0 -0
  46. {masster-0.2.0 → masster-0.2.2}/src/masster/study/defaults/__init__.py +0 -0
  47. {masster-0.2.0 → masster-0.2.2}/src/masster/study/defaults/align_def.py +0 -0
  48. {masster-0.2.0 → masster-0.2.2}/src/masster/study/defaults/export_def.py +0 -0
  49. {masster-0.2.0 → masster-0.2.2}/src/masster/study/defaults/fill_chrom_def.py +0 -0
  50. {masster-0.2.0 → masster-0.2.2}/src/masster/study/defaults/find_consensus_def.py +0 -0
  51. {masster-0.2.0 → masster-0.2.2}/src/masster/study/defaults/find_ms2_def.py +0 -0
  52. {masster-0.2.0 → masster-0.2.2}/src/masster/study/defaults/integrate_chrom_def.py +0 -0
  53. {masster-0.2.0 → masster-0.2.2}/src/masster/study/defaults/study_def.py +0 -0
  54. {masster-0.2.0 → masster-0.2.2}/src/masster/study/export.py +0 -0
  55. {masster-0.2.0 → masster-0.2.2}/src/masster/study/parameters.py +0 -0
  56. {masster-0.2.0 → masster-0.2.2}/src/masster/study/plot.py +0 -0
  57. {masster-0.2.0 → masster-0.2.2}/src/masster/study/processing.py +0 -0
  58. {masster-0.2.0 → masster-0.2.2}/src/masster/study/save.py +0 -0
  59. {masster-0.2.0 → masster-0.2.2}/src/masster/study/study5_schema.json +0 -0
  60. {masster-0.2.0 → masster-0.2.2}/tests/conftest.py +0 -0
  61. {masster-0.2.0 → masster-0.2.2}/tests/test_chromatogram.py +0 -0
  62. {masster-0.2.0 → masster-0.2.2}/tests/test_defaults.py +0 -0
  63. {masster-0.2.0 → masster-0.2.2}/tests/test_imports.py +0 -0
  64. {masster-0.2.0 → masster-0.2.2}/tests/test_integration.py +0 -0
  65. {masster-0.2.0 → masster-0.2.2}/tests/test_logger.py +0 -0
  66. {masster-0.2.0 → masster-0.2.2}/tests/test_parameters.py +0 -0
  67. {masster-0.2.0 → masster-0.2.2}/tests/test_sample.py +0 -0
  68. {masster-0.2.0 → masster-0.2.2}/tests/test_spectrum.py +0 -0
  69. {masster-0.2.0 → masster-0.2.2}/tests/test_study.py +0 -0
  70. {masster-0.2.0 → masster-0.2.2}/tests/test_version.py +0 -0
  71. {masster-0.2.0 → masster-0.2.2}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: masster
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Mass spectrometry data analysis package
5
5
  Project-URL: homepage, https://github.com/zamboni-lab/masster
6
6
  Project-URL: repository, https://github.com/zamboni-lab/masster
@@ -730,10 +730,12 @@ Description-Content-Type: text/markdown
730
730
 
731
731
  # MASSter
732
732
 
733
- **MASSter** is a comprehensive Python package for mass spectrometry data analysis, designed for metabolomics and LC-MS data processing. It provides tools for feature detection, alignment, consensus building, and interactive visualization of mass spectrometry datasets.
733
+ **MASSter** is a comprehensive Python package for mass spectrometry data analysis, designed for metabolomics and LC-MS data processing. It provides tools for feature detection, alignment, consensus building, and interactive visualization of mass spectrometry datasets. It is designed to deal with DDA, and hides functionalities for DIA and ZTScan DIA data.
734
734
 
735
735
  Most core processing functions are derived from OpenMS. We use the same nomenclature and refer to their documentation for an explanation of the parameters. To a large extent, however, you should be able to use the defaults (=no parameters) when calling processing steps.
736
736
 
737
+ This is a poorly documented, stable branch of the development codebase in use in the Zamboni lab. Novel functionalities will be added based on need and requests.
738
+
737
739
  ## Features
738
740
 
739
741
  - **Mass spectrometry data processing**: Support for multiple file formats (.wiff, .mzML, .raw, .mzpkl)
@@ -751,7 +753,7 @@ pip install masster
751
753
 
752
754
  ## Quick Start
753
755
 
754
- ### Basic Workflow
756
+ ### Basic Workflow for analyzing LC-MS study with 2-... samples
755
757
 
756
758
  ```python
757
759
  import masster
@@ -769,21 +771,33 @@ study.align(rt_max_diff=2.0)
769
771
  study.find_consensus(min_samples=3)
770
772
 
771
773
  # Retrieve missing data for quantification
772
- study.fill_chrom_parallel()
774
+ study.fill_chrom(abs_)
773
775
 
774
776
  # Integrate according to consensus metadata
775
777
  study.integrate_chrom()
776
778
 
777
- # link MS2 across the whole study
779
+ # link MS2 across the whole study and export them
778
780
  study.find_ms2()
779
-
780
- # Export MGF file
781
781
  study.export_mgf()
782
782
 
783
- # Save the study
783
+ # Save the study to .study5
784
784
  study.save()
785
785
  ```
786
786
 
787
+ ### Study-Level Plots
788
+
789
+ ```python
790
+ # Plot features from multiple samples
791
+ study.plot_samples_2d()
792
+
793
+ # Plot consensus features
794
+ study.plot_consensus_2d()
795
+
796
+ # Plot overlaid chromatograms for specific consensus features (use their uid)
797
+ study.plot_chrom(uids=[1, 2, 3])
798
+ ```
799
+
800
+
787
801
  ### Single Sample Processing
788
802
 
789
803
  ```python
@@ -801,15 +815,13 @@ sample.find_adducts()
801
815
  # Find MS2 spectra
802
816
  sample.find_ms2()
803
817
 
804
- # Save results
818
+ # Save results to .sample5
805
819
  sample.save()
806
820
  ```
807
821
 
808
- ## Visualization Examples
809
-
810
822
  Masster provides extensive plotting capabilities for data exploration and quality control:
811
823
 
812
- ### 2D Data Visualization
824
+ ### Single sample visualization
813
825
 
814
826
  ```python
815
827
  # Plot 2D overview of MS data with detected features
@@ -822,35 +834,14 @@ sample.plot_2d(
822
834
 
823
835
  # Plot with feature filtering
824
836
  sample.plot_2d(
825
- filename="features_ms2_only.html",
826
- show_only_features_with_ms2=True,
827
- markersize=8
837
+ filename="features_ms2_only.html"
828
838
  )
829
- ```
830
839
 
831
- ### Study-Level Plots
832
-
833
- ```python
834
- # Plot features from multiple samples
835
- study.plot_samples_2d(
836
- samples=None, # Use all samples
837
- filename="multi_sample_overview.html",
838
- markersize=3,
839
- alpha_max=0.8
840
- )
841
-
842
- # Plot consensus features
843
- study.plot_consensus_2d(
844
- filename="consensus_features.html",
845
- colorby="number_samples",
846
- sizeby="inty_mean"
847
- )
848
-
849
- # Plot chromatograms for specific features
850
- study.plot_chrom(
851
- uids=[1, 2, 3], # Feature UIDs
852
- filename="chromatograms.html",
853
- aligned=True
840
+ # Plot extracted ion chromatogram
841
+ sample.plot_eic(
842
+ feature_uid=123,
843
+ rt_tol=10,
844
+ mz_tol=0.005
854
845
  )
855
846
  ```
856
847
 
@@ -883,14 +874,6 @@ sample.plot_ms2_cycle(
883
874
  filename="ms2_cycle.html",
884
875
  centroid=True
885
876
  )
886
-
887
- # Plot extracted ion chromatogram
888
- sample.plot_eic(
889
- feature_uid=123,
890
- rt_tol=10,
891
- mz_tol=0.005,
892
- filename="eic.html"
893
- )
894
877
  ```
895
878
 
896
879
  ## File Format Support
@@ -919,13 +902,6 @@ python -m masster.demo.example_batch_process input_directory --recursive --dest
919
902
 
920
903
  GNU Affero General Public License v3
921
904
 
922
- ## Contributing
923
-
924
- Contributions are welcome! Please see our contributing guidelines and code of conduct.
925
-
926
905
  ## Citation
927
906
 
928
- If you use Masster in your research, please cite:
929
- ```
930
- [Citation details to be added]
931
- ```
907
+ If you use Masster in your research, please cite this repository.
@@ -1,9 +1,11 @@
1
1
  # MASSter
2
2
 
3
- **MASSter** is a comprehensive Python package for mass spectrometry data analysis, designed for metabolomics and LC-MS data processing. It provides tools for feature detection, alignment, consensus building, and interactive visualization of mass spectrometry datasets.
3
+ **MASSter** is a comprehensive Python package for mass spectrometry data analysis, designed for metabolomics and LC-MS data processing. It provides tools for feature detection, alignment, consensus building, and interactive visualization of mass spectrometry datasets. It is designed to deal with DDA, and hides functionalities for DIA and ZTScan DIA data.
4
4
 
5
5
  Most core processing functions are derived from OpenMS. We use the same nomenclature and refer to their documentation for an explanation of the parameters. To a large extent, however, you should be able to use the defaults (=no parameters) when calling processing steps.
6
6
 
7
+ This is a poorly documented, stable branch of the development codebase in use in the Zamboni lab. Novel functionalities will be added based on need and requests.
8
+
7
9
  ## Features
8
10
 
9
11
  - **Mass spectrometry data processing**: Support for multiple file formats (.wiff, .mzML, .raw, .mzpkl)
@@ -21,7 +23,7 @@ pip install masster
21
23
 
22
24
  ## Quick Start
23
25
 
24
- ### Basic Workflow
26
+ ### Basic Workflow for analyzing LC-MS study with 2-... samples
25
27
 
26
28
  ```python
27
29
  import masster
@@ -39,21 +41,33 @@ study.align(rt_max_diff=2.0)
39
41
  study.find_consensus(min_samples=3)
40
42
 
41
43
  # Retrieve missing data for quantification
42
- study.fill_chrom_parallel()
44
+ study.fill_chrom(abs_)
43
45
 
44
46
  # Integrate according to consensus metadata
45
47
  study.integrate_chrom()
46
48
 
47
- # link MS2 across the whole study
49
+ # link MS2 across the whole study and export them
48
50
  study.find_ms2()
49
-
50
- # Export MGF file
51
51
  study.export_mgf()
52
52
 
53
- # Save the study
53
+ # Save the study to .study5
54
54
  study.save()
55
55
  ```
56
56
 
57
+ ### Study-Level Plots
58
+
59
+ ```python
60
+ # Plot features from multiple samples
61
+ study.plot_samples_2d()
62
+
63
+ # Plot consensus features
64
+ study.plot_consensus_2d()
65
+
66
+ # Plot overlaid chromatograms for specific consensus features (use their uid)
67
+ study.plot_chrom(uids=[1, 2, 3])
68
+ ```
69
+
70
+
57
71
  ### Single Sample Processing
58
72
 
59
73
  ```python
@@ -71,15 +85,13 @@ sample.find_adducts()
71
85
  # Find MS2 spectra
72
86
  sample.find_ms2()
73
87
 
74
- # Save results
88
+ # Save results to .sample5
75
89
  sample.save()
76
90
  ```
77
91
 
78
- ## Visualization Examples
79
-
80
92
  Masster provides extensive plotting capabilities for data exploration and quality control:
81
93
 
82
- ### 2D Data Visualization
94
+ ### Single sample visualization
83
95
 
84
96
  ```python
85
97
  # Plot 2D overview of MS data with detected features
@@ -92,35 +104,14 @@ sample.plot_2d(
92
104
 
93
105
  # Plot with feature filtering
94
106
  sample.plot_2d(
95
- filename="features_ms2_only.html",
96
- show_only_features_with_ms2=True,
97
- markersize=8
107
+ filename="features_ms2_only.html"
98
108
  )
99
- ```
100
109
 
101
- ### Study-Level Plots
102
-
103
- ```python
104
- # Plot features from multiple samples
105
- study.plot_samples_2d(
106
- samples=None, # Use all samples
107
- filename="multi_sample_overview.html",
108
- markersize=3,
109
- alpha_max=0.8
110
- )
111
-
112
- # Plot consensus features
113
- study.plot_consensus_2d(
114
- filename="consensus_features.html",
115
- colorby="number_samples",
116
- sizeby="inty_mean"
117
- )
118
-
119
- # Plot chromatograms for specific features
120
- study.plot_chrom(
121
- uids=[1, 2, 3], # Feature UIDs
122
- filename="chromatograms.html",
123
- aligned=True
110
+ # Plot extracted ion chromatogram
111
+ sample.plot_eic(
112
+ feature_uid=123,
113
+ rt_tol=10,
114
+ mz_tol=0.005
124
115
  )
125
116
  ```
126
117
 
@@ -153,14 +144,6 @@ sample.plot_ms2_cycle(
153
144
  filename="ms2_cycle.html",
154
145
  centroid=True
155
146
  )
156
-
157
- # Plot extracted ion chromatogram
158
- sample.plot_eic(
159
- feature_uid=123,
160
- rt_tol=10,
161
- mz_tol=0.005,
162
- filename="eic.html"
163
- )
164
147
  ```
165
148
 
166
149
  ## File Format Support
@@ -189,13 +172,6 @@ python -m masster.demo.example_batch_process input_directory --recursive --dest
189
172
 
190
173
  GNU Affero General Public License v3
191
174
 
192
- ## Contributing
193
-
194
- Contributions are welcome! Please see our contributing guidelines and code of conduct.
195
-
196
175
  ## Citation
197
176
 
198
- If you use Masster in your research, please cite:
199
- ```
200
- [Citation details to be added]
201
- ```
177
+ If you use Masster in your research, please cite this repository.
@@ -1,7 +1,7 @@
1
1
 
2
2
  [project]
3
3
  name = "masster"
4
- version = "0.2.0"
4
+ version = "0.2.2"
5
5
  description = "Mass spectrometry data analysis package"
6
6
  authors = [
7
7
  { name = "Zamboni Lab" }
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
 
4
- __version__ = "0.2.0"
4
+ __version__ = "0.2.2"
5
5
 
6
6
 
7
7
  def get_version():
@@ -309,7 +309,7 @@ def _load_sample5(self, filename: str, map: bool = True):
309
309
  missing_columns = []
310
310
  for col in schema.get("scans_df", {}).get("columns", []):
311
311
  if col not in scans_group:
312
- self.logger.warning(f"Column '{col}' not found in sample5/scans.")
312
+ self.logger.debug(f"Column '{col}' not found in sample5/scans.")
313
313
  data[col] = None
314
314
  missing_columns.append(col)
315
315
  continue
@@ -444,6 +444,14 @@ def _load_sample5(self, filename: str, map: bool = True):
444
444
  f"Column '{col}' in scans_df not found in schema, keeping original type.",
445
445
  )
446
446
 
447
+ # Ensure column order matches schema order
448
+ if "scans_df" in schema and "columns" in schema["scans_df"]:
449
+ schema_column_order = list(schema["scans_df"]["columns"].keys())
450
+ # Only reorder columns that exist in both schema and DataFrame
451
+ existing_columns = [col for col in schema_column_order if col in self.scans_df.columns]
452
+ if existing_columns:
453
+ self.scans_df = self.scans_df.select(existing_columns)
454
+
447
455
  else:
448
456
  self.scans_df = None
449
457
  else:
@@ -457,7 +465,7 @@ def _load_sample5(self, filename: str, map: bool = True):
457
465
  missing_columns = []
458
466
  for col in schema.get("features_df", {}).get("columns", []):
459
467
  if col not in features_group:
460
- self.logger.warning(
468
+ self.logger.debug(
461
469
  f"Column '{col}' not found in sample5/features.",
462
470
  )
463
471
  data[col] = None
@@ -804,6 +812,14 @@ def _load_sample5(self, filename: str, map: bool = True):
804
812
  pl.col(col).fill_nan(None).alias(col),
805
813
  ])
806
814
 
815
+ # Ensure column order matches schema order
816
+ if "features_df" in schema and "columns" in schema["features_df"]:
817
+ schema_column_order = list(schema["features_df"]["columns"].keys())
818
+ # Only reorder columns that exist in both schema and DataFrame
819
+ existing_columns = [col for col in schema_column_order if col in self.features_df.columns]
820
+ if existing_columns:
821
+ self.features_df = self.features_df.select(existing_columns)
822
+
807
823
  else:
808
824
  self.features_df = None
809
825
  else:
@@ -1,80 +1,80 @@
1
1
  {
2
2
  "features_df": {
3
3
  "columns": {
4
- "adduct": {
5
- "dtype": "pl.Utf8"
6
- },
7
- "adduct_group": {
4
+ "feature_uid": {
8
5
  "dtype": "pl.Int64"
9
6
  },
10
- "adduct_mass": {
11
- "dtype": "pl.Float64"
7
+ "feature_id": {
8
+ "dtype": "pl.Utf8"
12
9
  },
13
- "charge": {
14
- "dtype": "pl.Int32"
10
+ "mz": {
11
+ "dtype": "pl.Float64"
15
12
  },
16
- "chrom": {
17
- "dtype": "pl.Object"
13
+ "rt": {
14
+ "dtype": "pl.Float64"
18
15
  },
19
- "chrom_coherence": {
16
+ "rt_original": {
20
17
  "dtype": "pl.Float64"
21
18
  },
22
- "chrom_height_scaled": {
19
+ "rt_start": {
23
20
  "dtype": "pl.Float64"
24
21
  },
25
- "chrom_prominence": {
22
+ "rt_end": {
26
23
  "dtype": "pl.Float64"
27
24
  },
28
- "chrom_prominence_scaled": {
25
+ "rt_delta": {
29
26
  "dtype": "pl.Float64"
30
27
  },
31
- "feature_id": {
32
- "dtype": "pl.Utf8"
28
+ "mz_start": {
29
+ "dtype": "pl.Float64"
33
30
  },
34
- "feature_uid": {
35
- "dtype": "pl.Int64"
31
+ "mz_end": {
32
+ "dtype": "pl.Float64"
36
33
  },
37
34
  "inty": {
38
35
  "dtype": "pl.Float64"
39
36
  },
37
+ "quality": {
38
+ "dtype": "pl.Float64"
39
+ },
40
+ "charge": {
41
+ "dtype": "pl.Int32"
42
+ },
40
43
  "iso": {
41
44
  "dtype": "pl.Int64"
42
45
  },
43
46
  "iso_of": {
44
47
  "dtype": "pl.Int64"
45
48
  },
46
- "ms2_scans": {
47
- "dtype": "pl.Object"
48
- },
49
- "ms2_specs": {
50
- "dtype": "pl.Object"
49
+ "adduct_group": {
50
+ "dtype": "pl.Int64"
51
51
  },
52
- "mz": {
53
- "dtype": "pl.Float64"
52
+ "adduct": {
53
+ "dtype": "pl.Utf8"
54
54
  },
55
- "mz_end": {
55
+ "adduct_mass": {
56
56
  "dtype": "pl.Float64"
57
57
  },
58
- "mz_start": {
59
- "dtype": "pl.Float64"
58
+ "chrom": {
59
+ "dtype": "pl.Object"
60
60
  },
61
- "quality": {
61
+ "chrom_coherence": {
62
62
  "dtype": "pl.Float64"
63
63
  },
64
- "rt": {
64
+ "chrom_prominence": {
65
65
  "dtype": "pl.Float64"
66
66
  },
67
- "rt_delta": {
67
+ "chrom_prominence_scaled": {
68
68
  "dtype": "pl.Float64"
69
69
  },
70
- "rt_end": {
70
+ "chrom_height_scaled": {
71
71
  "dtype": "pl.Float64"
72
72
  },
73
- "rt_original": {
74
- "dtype": "pl.Float64"
73
+ "ms2_scans": {
74
+ "dtype": "pl.Object"
75
75
  },
76
- "rt_start": {
77
- "dtype": "pl.Float64"
76
+ "ms2_specs": {
77
+ "dtype": "pl.Object"
78
78
  }
79
79
  }
80
80
  },
@@ -100,62 +100,80 @@
100
100
  },
101
101
  "scans_df": {
102
102
  "columns": {
103
- "bl": {
104
- "dtype": "pl.Float64"
105
- },
106
- "comment": {
107
- "dtype": "pl.Utf8"
103
+ "scan_uid": {
104
+ "dtype": "pl.Int64"
108
105
  },
109
106
  "cycle": {
110
107
  "dtype": "pl.Int64"
111
108
  },
112
- "energy": {
113
- "dtype": "pl.Float64"
114
- },
115
- "feature_uid": {
109
+ "ms_level": {
116
110
  "dtype": "pl.Int64"
117
111
  },
118
- "id": {
119
- "dtype": "pl.Utf8"
112
+ "rt": {
113
+ "dtype": "pl.Float64"
120
114
  },
121
- "inty_max": {
115
+ "inty_tot": {
122
116
  "dtype": "pl.Float64"
123
117
  },
124
118
  "inty_min": {
125
119
  "dtype": "pl.Float64"
126
120
  },
127
- "inty_tot": {
121
+ "inty_max": {
128
122
  "dtype": "pl.Float64"
129
123
  },
130
- "ms_level": {
131
- "dtype": "pl.Int64"
132
- },
133
- "mz_max": {
124
+ "bl": {
134
125
  "dtype": "pl.Float64"
135
126
  },
136
127
  "mz_min": {
137
128
  "dtype": "pl.Float64"
138
129
  },
130
+ "mz_max": {
131
+ "dtype": "pl.Float64"
132
+ },
133
+ "comment": {
134
+ "dtype": "pl.Utf8"
135
+ },
139
136
  "name": {
140
137
  "dtype": "pl.Utf8"
141
138
  },
142
- "prec_inty": {
143
- "dtype": "pl.Float64"
139
+ "id": {
140
+ "dtype": "pl.Utf8"
144
141
  },
145
142
  "prec_mz": {
146
143
  "dtype": "pl.Float64"
147
144
  },
145
+ "prec_mz_min": {
146
+ "dtype": "pl.Float64"
147
+ },
148
148
  "prec_mz_max": {
149
149
  "dtype": "pl.Float64"
150
150
  },
151
- "prec_mz_min": {
151
+ "prec_inty": {
152
152
  "dtype": "pl.Float64"
153
153
  },
154
- "rt": {
154
+ "energy": {
155
155
  "dtype": "pl.Float64"
156
156
  },
157
- "scan_uid": {
157
+ "feature_uid": {
158
158
  "dtype": "pl.Int64"
159
+ },
160
+ "ms2_n": {
161
+ "dtype": "pl.Int64"
162
+ },
163
+ "time_cycle": {
164
+ "dtype": "pl.Float64"
165
+ },
166
+ "time_ms1_to_ms1": {
167
+ "dtype": "pl.Float64"
168
+ },
169
+ "time_ms1_to_ms2": {
170
+ "dtype": "pl.Float64"
171
+ },
172
+ "time_ms2_to_ms2": {
173
+ "dtype": "pl.Float64"
174
+ },
175
+ "time_ms2_to_ms1": {
176
+ "dtype": "pl.Float64"
159
177
  }
160
178
  }
161
179
  },