masster 0.2.5__py3-none-any.whl → 0.3.1__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.

Potentially problematic release.


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

Files changed (55) hide show
  1. masster/__init__.py +27 -27
  2. masster/_version.py +17 -17
  3. masster/chromatogram.py +497 -503
  4. masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.featureXML +199787 -0
  5. masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.sample5 +0 -0
  6. masster/logger.py +318 -244
  7. masster/sample/__init__.py +9 -9
  8. masster/sample/defaults/__init__.py +15 -15
  9. masster/sample/defaults/find_adducts_def.py +325 -325
  10. masster/sample/defaults/find_features_def.py +366 -366
  11. masster/sample/defaults/find_ms2_def.py +285 -285
  12. masster/sample/defaults/get_spectrum_def.py +314 -318
  13. masster/sample/defaults/sample_def.py +374 -378
  14. masster/sample/h5.py +1321 -1297
  15. masster/sample/helpers.py +833 -364
  16. masster/sample/lib.py +762 -0
  17. masster/sample/load.py +1220 -1187
  18. masster/sample/parameters.py +131 -131
  19. masster/sample/plot.py +1685 -1622
  20. masster/sample/processing.py +1402 -1416
  21. masster/sample/quant.py +209 -0
  22. masster/sample/sample.py +393 -387
  23. masster/sample/sample5_schema.json +181 -181
  24. masster/sample/save.py +737 -736
  25. masster/sample/sciex.py +1213 -0
  26. masster/spectrum.py +1287 -1319
  27. masster/study/__init__.py +9 -9
  28. masster/study/defaults/__init__.py +21 -19
  29. masster/study/defaults/align_def.py +267 -267
  30. masster/study/defaults/export_def.py +41 -40
  31. masster/study/defaults/fill_chrom_def.py +264 -264
  32. masster/study/defaults/fill_def.py +260 -0
  33. masster/study/defaults/find_consensus_def.py +256 -256
  34. masster/study/defaults/find_ms2_def.py +163 -163
  35. masster/study/defaults/integrate_chrom_def.py +225 -225
  36. masster/study/defaults/integrate_def.py +221 -0
  37. masster/study/defaults/merge_def.py +256 -0
  38. masster/study/defaults/study_def.py +272 -269
  39. masster/study/export.py +674 -287
  40. masster/study/h5.py +1406 -886
  41. masster/study/helpers.py +1713 -433
  42. masster/study/helpers_optimized.py +317 -0
  43. masster/study/load.py +1231 -1078
  44. masster/study/parameters.py +99 -99
  45. masster/study/plot.py +632 -645
  46. masster/study/processing.py +1057 -1046
  47. masster/study/save.py +161 -134
  48. masster/study/study.py +612 -522
  49. masster/study/study5_schema.json +253 -241
  50. {masster-0.2.5.dist-info → masster-0.3.1.dist-info}/METADATA +15 -10
  51. masster-0.3.1.dist-info/RECORD +59 -0
  52. {masster-0.2.5.dist-info → masster-0.3.1.dist-info}/licenses/LICENSE +661 -661
  53. masster-0.2.5.dist-info/RECORD +0 -50
  54. {masster-0.2.5.dist-info → masster-0.3.1.dist-info}/WHEEL +0 -0
  55. {masster-0.2.5.dist-info → masster-0.3.1.dist-info}/entry_points.txt +0 -0
@@ -1,131 +1,131 @@
1
- """
2
- Sample Parameters Module for individual sample operations.
3
-
4
- This module contains parameter management functions for the Sample class.
5
- """
6
-
7
- from __future__ import annotations
8
-
9
-
10
- def store_history(self, keys, value):
11
- """
12
- Store parameters in self.history.
13
-
14
- Parameters:
15
- keys (list): List of keys to identify the position in nested dicts
16
- value: The value to store (can be a parameter object, dict, or any other value)
17
- """
18
- if not isinstance(keys, list) or len(keys) == 0:
19
- raise ValueError("keys must be a non-empty list")
20
-
21
- # Initialize self.history if it doesn't exist
22
- if not hasattr(self, "history"):
23
- self.history = {}
24
-
25
- # Navigate to the target location, creating nested dicts as needed
26
- current_dict = self.history
27
- for key in keys[:-1]:
28
- if key not in current_dict:
29
- current_dict[key] = {}
30
- elif not isinstance(current_dict[key], dict):
31
- # If the existing value is not a dict, replace it with a dict
32
- current_dict[key] = {}
33
- current_dict = current_dict[key]
34
-
35
- # Store the value at the final key
36
- current_dict[keys[-1]] = value
37
-
38
-
39
- def get_parameters(self, keys):
40
- """
41
- Retrieve parameters from the sample_defaults object or nested history structure.
42
-
43
- Parameters:
44
- keys (list): List of keys to identify the position
45
-
46
- Returns:
47
- The value at the specified location, or None if not found
48
- """
49
- if not isinstance(keys, list) or len(keys) == 0:
50
- raise ValueError("keys must be a non-empty list")
51
-
52
- # If asking for sample parameters, get from self.parameters (sample_defaults object)
53
- if keys[0] == "sample":
54
- if len(keys) == 1:
55
- # Return the whole sample_defaults object as dict
56
- return self.parameters.to_dict() if hasattr(self.parameters, 'to_dict') else None
57
- else:
58
- # Get specific parameter from sample_defaults object
59
- param_name = keys[1]
60
- if hasattr(self.parameters, param_name):
61
- return getattr(self.parameters, param_name)
62
- return None
63
-
64
- # Otherwise, look in history for processing parameters
65
- if not hasattr(self, "history"):
66
- return None
67
-
68
- current_dict = self.history
69
- for key in keys:
70
- if isinstance(current_dict, dict) and key in current_dict:
71
- current_dict = current_dict[key]
72
- else:
73
- return None
74
-
75
- return current_dict
76
-
77
-
78
- def update_parameters(self, **kwargs):
79
- """
80
- Update sample parameters using the new parameter system.
81
-
82
- Parameters:
83
- **kwargs: Keyword arguments for parameter updates. Can include:
84
- - A sample_defaults instance to set all parameters at once
85
- - Individual parameter names and values (see sample_defaults for details)
86
- """
87
- # Import here to avoid circular imports
88
- from masster.sample.defaults.sample_def import (
89
- sample_defaults as SampleDefaults,
90
- )
91
-
92
- # Get current sample parameter object (should already be a sample_defaults instance)
93
- current_params = self.parameters
94
-
95
- # Handle parameter overrides from kwargs
96
- for key, value in kwargs.items():
97
- if isinstance(value, SampleDefaults):
98
- self.parameters = value
99
- break
100
- else:
101
- if hasattr(current_params, key):
102
- current_params.set(key, value, validate=True)
103
-
104
- # No need to store in history - self.parameters is the source of truth for sample params
105
-
106
-
107
- def get_parameters_property(self):
108
- """
109
- Property getter to provide backward compatibility for parameter access.
110
- Returns a dictionary that provides access to sample parameters and history.
111
- """
112
- # Create a result dict with sample parameters
113
- result = {}
114
-
115
- # Add sample parameters from the sample_defaults object
116
- if hasattr(self.parameters, 'to_dict'):
117
- result["sample"] = self.parameters.to_dict()
118
-
119
- # Add history (processing parameters)
120
- if hasattr(self, 'history'):
121
- result.update(self.history)
122
-
123
- return result
124
-
125
-
126
- def set_parameters_property(self, value):
127
- """Property setter to allow setting parameters for backward compatibility."""
128
- if isinstance(value, dict):
129
- self.parameters = value
130
- else:
131
- raise ValueError("parameters must be a dictionary")
1
+ """
2
+ Sample Parameters Module for individual sample operations.
3
+
4
+ This module contains parameter management functions for the Sample class.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+
10
+ def store_history(self, keys, value):
11
+ """
12
+ Store parameters in self.history.
13
+
14
+ Parameters:
15
+ keys (list): List of keys to identify the position in nested dicts
16
+ value: The value to store (can be a parameter object, dict, or any other value)
17
+ """
18
+ if not isinstance(keys, list) or len(keys) == 0:
19
+ raise ValueError("keys must be a non-empty list")
20
+
21
+ # Initialize self.history if it doesn't exist
22
+ if not hasattr(self, "history"):
23
+ self.history = {}
24
+
25
+ # Navigate to the target location, creating nested dicts as needed
26
+ current_dict = self.history
27
+ for key in keys[:-1]:
28
+ if key not in current_dict:
29
+ current_dict[key] = {}
30
+ elif not isinstance(current_dict[key], dict):
31
+ # If the existing value is not a dict, replace it with a dict
32
+ current_dict[key] = {}
33
+ current_dict = current_dict[key]
34
+
35
+ # Store the value at the final key
36
+ current_dict[keys[-1]] = value
37
+
38
+
39
+ def get_parameters(self, keys):
40
+ """
41
+ Retrieve parameters from the sample_defaults object or nested history structure.
42
+
43
+ Parameters:
44
+ keys (list): List of keys to identify the position
45
+
46
+ Returns:
47
+ The value at the specified location, or None if not found
48
+ """
49
+ if not isinstance(keys, list) or len(keys) == 0:
50
+ raise ValueError("keys must be a non-empty list")
51
+
52
+ # If asking for sample parameters, get from self.parameters (sample_defaults object)
53
+ if keys[0] == "sample":
54
+ if len(keys) == 1:
55
+ # Return the whole sample_defaults object as dict
56
+ return self.parameters.to_dict() if hasattr(self.parameters, "to_dict") else None
57
+ else:
58
+ # Get specific parameter from sample_defaults object
59
+ param_name = keys[1]
60
+ if hasattr(self.parameters, param_name):
61
+ return getattr(self.parameters, param_name)
62
+ return None
63
+
64
+ # Otherwise, look in history for processing parameters
65
+ if not hasattr(self, "history"):
66
+ return None
67
+
68
+ current_dict = self.history
69
+ for key in keys:
70
+ if isinstance(current_dict, dict) and key in current_dict:
71
+ current_dict = current_dict[key]
72
+ else:
73
+ return None
74
+
75
+ return current_dict
76
+
77
+
78
+ def update_parameters(self, **kwargs):
79
+ """
80
+ Update sample parameters using the new parameter system.
81
+
82
+ Parameters:
83
+ **kwargs: Keyword arguments for parameter updates. Can include:
84
+ - A sample_defaults instance to set all parameters at once
85
+ - Individual parameter names and values (see sample_defaults for details)
86
+ """
87
+ # Import here to avoid circular imports
88
+ from masster.sample.defaults.sample_def import (
89
+ sample_defaults as SampleDefaults,
90
+ )
91
+
92
+ # Get current sample parameter object (should already be a sample_defaults instance)
93
+ current_params = self.parameters
94
+
95
+ # Handle parameter overrides from kwargs
96
+ for key, value in kwargs.items():
97
+ if isinstance(value, SampleDefaults):
98
+ self.parameters = value
99
+ break
100
+ else:
101
+ if hasattr(current_params, key):
102
+ current_params.set(key, value, validate=True)
103
+
104
+ # No need to store in history - self.parameters is the source of truth for sample params
105
+
106
+
107
+ def get_parameters_property(self):
108
+ """
109
+ Property getter to provide backward compatibility for parameter access.
110
+ Returns a dictionary that provides access to sample parameters and history.
111
+ """
112
+ # Create a result dict with sample parameters
113
+ result = {}
114
+
115
+ # Add sample parameters from the sample_defaults object
116
+ if hasattr(self.parameters, "to_dict"):
117
+ result["sample"] = self.parameters.to_dict()
118
+
119
+ # Add history (processing parameters)
120
+ if hasattr(self, "history"):
121
+ result.update(self.history)
122
+
123
+ return result
124
+
125
+
126
+ def set_parameters_property(self, value):
127
+ """Property setter to allow setting parameters for backward compatibility."""
128
+ if isinstance(value, dict):
129
+ self.parameters = value
130
+ else:
131
+ raise ValueError("parameters must be a dictionary")