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

masster/sample/adducts.py CHANGED
@@ -473,7 +473,7 @@ def find_adducts(self, **kwargs):
473
473
  self.logger.debug(f"Min probability threshold: {min_probability}")
474
474
 
475
475
  # Generate comprehensive adduct specifications using the Sample method
476
- adducts_df = _get_adducts(self,
476
+ adducts_df = self._get_adducts(
477
477
  adducts_list=adducts_list,
478
478
  charge_min=charge_min,
479
479
  charge_max=charge_max,
masster/sample/helpers.py CHANGED
@@ -358,7 +358,7 @@ def get_eic(self, mz, mz_tol=None):
358
358
  return None
359
359
 
360
360
 
361
- def select(
361
+ def features_select(
362
362
  self,
363
363
  mz=None,
364
364
  rt=None,
@@ -372,6 +372,7 @@ def select(
372
372
  height_scaled=None,
373
373
  prominence=None,
374
374
  height=None,
375
+ uids=None,
375
376
  ):
376
377
  """
377
378
  Select features based on specified criteria and return the filtered DataFrame.
@@ -389,6 +390,7 @@ def select(
389
390
  height_scaled: scaled height filter (tuple for range, single value for minimum)
390
391
  prominence: prominence filter (tuple for range, single value for minimum)
391
392
  height: height filter (tuple for range, single value for minimum)
393
+ uids: feature UID filter (list of feature UIDs, polars/pandas DataFrame with feature_uid/feature_id column, or None for all features)
392
394
 
393
395
  Returns:
394
396
  polars.DataFrame: Filtered features DataFrame
@@ -398,6 +400,20 @@ def select(
398
400
  # self.logger.info("No features found. R")
399
401
  return
400
402
  feats = self.features_df.clone()
403
+
404
+ # Filter by feature UIDs if provided
405
+ if uids is not None:
406
+ feature_uids_to_keep = self._get_feature_uids(features=uids, verbose=True)
407
+ if not feature_uids_to_keep:
408
+ self.logger.warning("No valid feature UIDs provided.")
409
+ return feats.limit(0) # Return empty DataFrame with same structure
410
+
411
+ feats_len_before_filter = len(feats)
412
+ feats = feats.filter(pl.col("feature_uid").is_in(feature_uids_to_keep))
413
+ self.logger.debug(
414
+ f"Selected features by UIDs. Features removed: {feats_len_before_filter - len(feats)}",
415
+ )
416
+
401
417
  if coherence is not None:
402
418
  has_coherence = "chrom_coherence" in self.features_df.columns
403
419
  if not has_coherence:
masster/sample/plot.py CHANGED
@@ -57,12 +57,78 @@ from holoviews import dim
57
57
  from holoviews.plotting.util import process_cmap
58
58
  from matplotlib.colors import rgb2hex
59
59
 
60
+ # Import cmap for colormap handling
61
+ try:
62
+ from cmap import Colormap
63
+ except ImportError:
64
+ Colormap = None
65
+
60
66
  # Parameters removed - using hardcoded defaults
61
67
 
62
68
 
63
69
  hv.extension("bokeh")
64
70
 
65
71
 
72
+ def _process_cmap(cmap, fallback="viridis", logger=None):
73
+ """
74
+ Process colormap using the cmap package, similar to study's implementation.
75
+
76
+ Parameters:
77
+ cmap: Colormap specification (string name, cmap.Colormap object, or None)
78
+ fallback: Fallback colormap name if cmap processing fails
79
+ logger: Logger for warnings (optional)
80
+
81
+ Returns:
82
+ list: List of hex color strings for the colormap
83
+ """
84
+ # Handle None case
85
+ if cmap is None:
86
+ cmap = "viridis"
87
+ elif cmap == "grey":
88
+ cmap = "Greys256"
89
+ elif cmap == "iridescent":
90
+ cmap = "iridescent_r"
91
+
92
+ # If cmap package is not available, fall back to process_cmap
93
+ if Colormap is None:
94
+ if logger:
95
+ logger.warning("cmap package not available, using holoviews process_cmap")
96
+ return process_cmap(cmap, provider="bokeh")
97
+
98
+ try:
99
+ # Handle colormap using cmap.Colormap
100
+ if isinstance(cmap, str):
101
+ colormap = Colormap(cmap)
102
+ # Generate 256 colors and convert to hex
103
+ import matplotlib.colors as mcolors
104
+ colors = colormap(np.linspace(0, 1, 256))
105
+ palette = [mcolors.rgb2hex(color) for color in colors]
106
+ else:
107
+ colormap = cmap
108
+ # Try to use to_bokeh() method first
109
+ try:
110
+ palette = colormap.to_bokeh()
111
+ # Ensure we got a color palette, not another mapper
112
+ if not isinstance(palette, (list, tuple)):
113
+ # Fall back to generating colors manually
114
+ import matplotlib.colors as mcolors
115
+ colors = colormap(np.linspace(0, 1, 256))
116
+ palette = [mcolors.rgb2hex(color) for color in colors]
117
+ except AttributeError:
118
+ # Fall back to generating colors manually
119
+ import matplotlib.colors as mcolors
120
+ colors = colormap(np.linspace(0, 1, 256))
121
+ palette = [mcolors.rgb2hex(color) for color in colors]
122
+
123
+ return palette
124
+
125
+ except (AttributeError, ValueError, TypeError) as e:
126
+ # Fallback to process_cmap if cmap interpretation fails
127
+ if logger:
128
+ logger.warning(f"Could not interpret colormap '{cmap}': {e}, falling back to {fallback}")
129
+ return process_cmap(fallback, provider="bokeh")
130
+
131
+
66
132
  def _is_notebook_environment():
67
133
  """
68
134
  Detect if code is running in a notebook environment (Jupyter, JupyterLab, or Marimo).
@@ -462,10 +528,8 @@ def plot_2d(
462
528
  self.logger.error("No MS1 data available.")
463
529
  return
464
530
 
465
- if cmap is None:
466
- cmap = "iridescent_r"
467
- elif cmap == "grey":
468
- cmap = "Greys256"
531
+ # Process colormap using the cmap package
532
+ cmap_palette = _process_cmap(cmap, fallback="iridescent_r", logger=self.logger)
469
533
 
470
534
  # get columns rt, mz, inty from self.ms1_df, It's polars DataFrame
471
535
  spectradf = self.ms1_df.select(["rt", "mz", "inty"])
@@ -585,7 +649,7 @@ def plot_2d(
585
649
  dynamic=dyn, # alpha=10, min_alpha=0,
586
650
  ).opts(
587
651
  active_tools=["box_zoom"],
588
- cmap=process_cmap(cmap, provider="bokeh"), # blues
652
+ cmap=cmap_palette,
589
653
  tools=["hover"],
590
654
  hooks=[new_bounds_hook],
591
655
  width=width,
@@ -1003,10 +1067,8 @@ def plot_2d_oracle(
1003
1067
  print("Please load a file first.")
1004
1068
  return
1005
1069
 
1006
- if cmap is None or cmap == "grey":
1007
- cmap = "Greys256"
1008
- elif cmap == "iridescent":
1009
- cmap = "iridescent_r"
1070
+ # Process colormap using the cmap package
1071
+ cmap_palette = _process_cmap(cmap, fallback="Greys256", logger=self.logger)
1010
1072
 
1011
1073
  # get columns rt, mz, inty from self.ms1_df, It's polars DataFrame
1012
1074
  spectradf = self.ms1_df.to_pandas()
@@ -1057,7 +1119,7 @@ def plot_2d_oracle(
1057
1119
  dynamic=dyn, # alpha=10, min_alpha=0,
1058
1120
  ).opts(
1059
1121
  active_tools=["box_zoom"],
1060
- cmap=process_cmap(cmap, provider="bokeh"), # blues
1122
+ cmap=cmap_palette,
1061
1123
  tools=["hover"],
1062
1124
  hooks=[new_bounds_hook],
1063
1125
  width=1000,
@@ -1183,13 +1245,45 @@ def plot_2d_oracle(
1183
1245
 
1184
1246
  if cvalues is not None:
1185
1247
  num_colors = len(cvalues)
1186
- cmap = "rainbow"
1187
- cmap_provider = "colorcet"
1188
- cm = process_cmap(cmap, ncolors=num_colors, provider=cmap_provider)
1189
- colors = [
1190
- rgb2hex(cm[int(i * (len(cm) - 1) / (num_colors - 1))]) if num_colors > 1 else rgb2hex(cm[0])
1191
- for i in range(num_colors)
1192
- ]
1248
+
1249
+ # Use cmap package for categorical colormap
1250
+ try:
1251
+ if Colormap is not None:
1252
+ # Use rainbow colormap for categorical data
1253
+ colormap = Colormap("rainbow")
1254
+ colors = []
1255
+ for i in range(num_colors):
1256
+ # Generate evenly spaced colors across the colormap
1257
+ t = i / (num_colors - 1) if num_colors > 1 else 0.5
1258
+ color = colormap(t)
1259
+ # Convert to hex
1260
+ import matplotlib.colors as mcolors
1261
+ # Convert color to hex - handle different color formats
1262
+ if hasattr(color, '__len__') and len(color) >= 3:
1263
+ # It's an array-like color (RGB or RGBA)
1264
+ colors.append(mcolors.rgb2hex(color[:3]))
1265
+ else:
1266
+ # It's a single value, convert to RGB
1267
+ colors.append(mcolors.rgb2hex([color, color, color]))
1268
+ else:
1269
+ # Fallback to original method
1270
+ cmap = "rainbow"
1271
+ cmap_provider = "colorcet"
1272
+ cm = process_cmap(cmap, ncolors=num_colors, provider=cmap_provider)
1273
+ colors = [
1274
+ rgb2hex(cm[int(i * (len(cm) - 1) / (num_colors - 1))]) if num_colors > 1 else rgb2hex(cm[0])
1275
+ for i in range(num_colors)
1276
+ ]
1277
+ except Exception:
1278
+ # Final fallback to original method
1279
+ cmap = "rainbow"
1280
+ cmap_provider = "colorcet"
1281
+ cm = process_cmap(cmap, ncolors=num_colors, provider=cmap_provider)
1282
+ colors = [
1283
+ rgb2hex(cm[int(i * (len(cm) - 1) / (num_colors - 1))]) if num_colors > 1 else rgb2hex(cm[0])
1284
+ for i in range(num_colors)
1285
+ ]
1286
+
1193
1287
  # assign color to each row based on id_class. If id_class is null, assign 'black'
1194
1288
  feats["color"] = "black"
1195
1289
 
@@ -1577,10 +1671,8 @@ def plot_ms2_cycle(
1577
1671
  print("Cycle number not found in scans_df.")
1578
1672
  return
1579
1673
 
1580
- if cmap is None:
1581
- cmap = "iridescent_r"
1582
- elif cmap == "grey":
1583
- cmap = "Greys256"
1674
+ # Process colormap using the cmap package
1675
+ cmap_palette = _process_cmap(cmap, fallback="iridescent_r", logger=self.logger)
1584
1676
 
1585
1677
  # find all scans in cycle
1586
1678
  scans = self.scans_df.filter(pl.col("cycle") == cycle)
@@ -1645,7 +1737,7 @@ def plot_ms2_cycle(
1645
1737
  dynamic=raster_dynamic, # alpha=10, min_alpha=0,
1646
1738
  ).opts(
1647
1739
  active_tools=["box_zoom"],
1648
- cmap=process_cmap(cmap, provider="bokeh"), # blues
1740
+ cmap=cmap_palette,
1649
1741
  tools=["hover"],
1650
1742
  hooks=[new_bounds_hook],
1651
1743
  width=1000,
masster/sample/sample.py CHANGED
@@ -57,10 +57,11 @@ from masster.sample.helpers import _get_scan_uids
57
57
  from masster.sample.helpers import _get_feature_uids
58
58
  # from masster.sample.helpers import _features_sync - made internal only
59
59
  from masster.sample.adducts import find_adducts
60
+ from masster.sample.adducts import _get_adducts
60
61
  # Removed _get_adducts - only used in study modules
61
62
  from masster.sample.helpers import features_delete
62
63
  from masster.sample.helpers import features_filter
63
- from masster.sample.helpers import select
64
+ from masster.sample.helpers import features_select
64
65
  from masster.sample.helpers import select_closest_scan
65
66
  from masster.sample.helpers import get_dda_stats
66
67
  from masster.sample.helpers import get_feature
@@ -110,6 +111,7 @@ from masster.sample.save import export_chrom
110
111
  from masster.sample.save import export_dda_stats
111
112
  from masster.sample.save import export_features
112
113
  from masster.sample.save import export_mgf
114
+ from masster.sample.save import export_xlsx
113
115
  from masster.sample.save import save
114
116
  # Removed internal-only import: _save_featureXML
115
117
 
@@ -139,7 +141,6 @@ class Sample:
139
141
 
140
142
  Core initialization parameters:
141
143
  - file (str, optional): The file path or file object to be loaded
142
- - ondisk (bool): Whether to keep data on disk or load into memory. Default is False
143
144
  - label (str, optional): An optional label to identify the file or dataset
144
145
  - log_level (str): The logging level to be set for the logger. Defaults to 'INFO'
145
146
  - log_label (str, optional): Optional label for the logger
@@ -221,11 +222,12 @@ class Sample:
221
222
  save = save
222
223
  find_features = find_features
223
224
  find_adducts = find_adducts
225
+ _get_adducts= _get_adducts
224
226
  find_iso = find_iso
225
227
  find_ms2 = find_ms2
226
228
  get_spectrum = get_spectrum
227
229
  filter = features_filter
228
- select = select
230
+ select = features_select
229
231
  features_filter = filter # New function that keeps only specified features
230
232
  filter_features = filter
231
233
  features_select = select
@@ -238,6 +240,7 @@ class Sample:
238
240
  get_parameters_property = get_parameters_property
239
241
  set_parameters_property = set_parameters_property
240
242
  export_features = export_features
243
+ export_xlsx = export_xlsx
241
244
  export_mgf = export_mgf
242
245
  export_chrom = export_chrom
243
246
  export_dda_stats = export_dda_stats
masster/sample/save.py CHANGED
@@ -105,7 +105,7 @@ def save(self, filename=None):
105
105
  self._save_sample5(filename=filename)
106
106
  self.file_path = filename
107
107
 
108
-
108
+ '''
109
109
  def _save_featureXML(self, filename="features.featureXML"):
110
110
  if self._oms_features_map is None:
111
111
  self.logger.warning("No features found.")
@@ -114,7 +114,7 @@ def _save_featureXML(self, filename="features.featureXML"):
114
114
  fh.store(filename, self._oms_features_map)
115
115
  self.logger.debug(f"Features Map saved to {filename}")
116
116
 
117
-
117
+ '''
118
118
  def export_features(self, filename="features.csv"):
119
119
  """
120
120
  Export the features DataFrame to a CSV or Excel file.
@@ -827,6 +827,60 @@ def export_dda_stats(self, filename="stats.csv"):
827
827
  self.logger.info(f"DDA statistics exported to {filename}")
828
828
 
829
829
 
830
+ def export_xlsx(self, filename="features.xlsx"):
831
+ """
832
+ Export the features DataFrame to an Excel file.
833
+
834
+ This method exports the features DataFrame (features_df) to an Excel (.xlsx) file.
835
+ Columns with data types 'List' or 'Object' are excluded from the export to ensure
836
+ compatibility with Excel format. A boolean column 'has_ms2' is added to indicate
837
+ whether MS2 data is available for each feature.
838
+
839
+ Parameters:
840
+ filename (str): The path to the output Excel file. Must end with '.xlsx' or '.xls'.
841
+ Defaults to 'features.xlsx'.
842
+
843
+ Raises:
844
+ ValueError: If filename doesn't end with '.xlsx' or '.xls'
845
+
846
+ Side Effects:
847
+ Writes the exported data to the specified Excel file and logs the export operation.
848
+ """
849
+ if self.features_df is None:
850
+ self.logger.warning("No features found. Cannot export to Excel.")
851
+ return
852
+
853
+ # Validate filename extension
854
+ if not filename.lower().endswith(('.xlsx', '.xls')):
855
+ raise ValueError("Filename must end with '.xlsx' or '.xls' for Excel export")
856
+
857
+ filename = os.path.abspath(filename)
858
+
859
+ # Clone the DataFrame to avoid modifying the original
860
+ clean_df = self.features_df.clone()
861
+
862
+ # Add a column has_ms2=True if column ms2_scans is not None
863
+ if "ms2_scans" in clean_df.columns:
864
+ clean_df = clean_df.with_columns(
865
+ (pl.col("ms2_scans").is_not_null()).alias("has_ms2")
866
+ )
867
+
868
+ # Filter out columns with List or Object data types that can't be exported to Excel
869
+ exportable_columns = [
870
+ col for col in clean_df.columns
871
+ if clean_df[col].dtype not in (pl.List, pl.Object)
872
+ ]
873
+
874
+ clean_df = clean_df.select(exportable_columns)
875
+
876
+ # Convert to pandas and export to Excel
877
+ pandas_df = clean_df.to_pandas()
878
+ pandas_df.to_excel(filename, index=False)
879
+
880
+ self.logger.info(f"Features exported to {filename} (Excel format)")
881
+ self.logger.debug(f"Exported {len(clean_df)} features with {len(exportable_columns)} columns")
882
+
883
+
830
884
  def export_chrom(self, filename="chrom.csv"):
831
885
  # saves self.chrom_df to a csv file. Remove the scan_uid and chrom columns if the file already exists
832
886
  if self.chrom_df is None:
masster/spectrum.py CHANGED
@@ -827,8 +827,11 @@ class Spectrum:
827
827
  inty = inty[idx]
828
828
  p.line(mz, inty, line_color="black", legend_label=label)
829
829
  else:
830
- data = self.to_dict()
831
- data = {key: val for key, val in data.items() if isinstance(val, np.ndarray) and val.size == mz.size}
830
+ # Build data dictionary from spectrum attributes (numpy arrays)
831
+ data = {}
832
+ for key, val in self.__dict__.items():
833
+ if isinstance(val, np.ndarray) and val.size == mz.size:
834
+ data[key] = val
832
835
  if ylog:
833
836
  data["zeros"] = np.ones_like(mz)
834
837
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: masster
3
- Version: 0.5.5
3
+ Version: 0.5.6
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
@@ -1,8 +1,8 @@
1
1
  masster/__init__.py,sha256=ueZ224WPNRRjQEYTaQUol818nwQgJwB93HbEfmtPRmg,1041
2
- masster/_version.py,sha256=gwA0FHD4Z-_YF_DHvv1fia5KlwKC04Tq47mBa_FkOEo,256
2
+ masster/_version.py,sha256=rLineW-O0OSBF7JBd31acdcshluNBFss77bXVJCx5BY,256
3
3
  masster/chromatogram.py,sha256=iYpdv8C17zVnlWvOFgAn9ns2uFGiF-GgoYf5QVVAbHs,19319
4
4
  masster/logger.py,sha256=tR65N23zfrNpcZNbZm2ot_Aual9XrGB1MWjLrovZkMs,16749
5
- masster/spectrum.py,sha256=XJSUrqXZSzfpWnD8v5IMClXMRZLKLYIk014qaMOS9_k,49738
5
+ masster/spectrum.py,sha256=TWIgDcl0lveG40cLVZTWGp8-FxMolu-P8EjZyRBtXL4,49850
6
6
  masster/data/dda/20250530_VH_IQX_KW_RP_HSST3_100mm_12min_pos_v4_DDA_OT_C-MiLUT_QC_dil2_01_20250602151849.sample5,sha256=LdJMF8uLoDm9ixZNHBoOzBH6hX7NGY7vTvqa2Pzetb8,6539174
7
7
  masster/data/dda/20250530_VH_IQX_KW_RP_HSST3_100mm_12min_pos_v4_DDA_OT_C-MiLUT_QC_dil3_01_20250602150634.sample5,sha256=hWUfslGoOTiQw59jENSBXP4sa6DdkbOi40FJ68ep61Q,6956773
8
8
  masster/data/dda/20250530_VH_IQX_KW_RP_HSST3_100mm_12min_pos_v4_MS1_C-MiLUT_C008_v6_r38_01.sample5,sha256=dSd2cIgYYdRcNSzkhqlZCeWKi3x8Hhhcx8BFMuiVG4c,11382948
@@ -10,6 +10,7 @@ masster/data/dda/20250530_VH_IQX_KW_RP_HSST3_100mm_12min_pos_v4_MS1_C-MiLUT_C008
10
10
  masster/data/dda/20250530_VH_IQX_KW_RP_HSST3_100mm_12min_pos_v4_MS1_C-MiLUT_C017_v5_r99_01.sample5,sha256=h2OOAWWTwKXzTNewhiYeL-cMYdp_JYLPya8Q9Nv9Lvw,12389587
11
11
  masster/data/libs/aa.csv,sha256=Sja1DyMsiaM2NfLcct4kAAcXYwPCukJJW8sDkup9w_c,1924
12
12
  masster/data/libs/ccm.csv,sha256=Q6nylV1152uTpX-ydqWeGrc6L9kgv45xN_fBZ4f7Tvo,12754
13
+ masster/data/libs/hilic.csv,sha256=Ao2IN9t7GiFWEBJg21TmNJZjTbyHC3e0dJcfftAKsM4,671265
13
14
  masster/data/libs/urine.csv,sha256=iRrR4N8Wzb8KDhHJA4LqoQC35pp93FSaOKvXPrgFHis,653736
14
15
  masster/data/wiff/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.timeseries.data,sha256=01vC6m__Qqm2rLvlTMZoeKIKowFvovBTUnrNl8Uav3E,24576
15
16
  masster/data/wiff/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.wiff,sha256=go5N9gAM1rn4PZAVaoCmdteY9f7YGEM9gyPdSmkQ8PE,1447936
@@ -18,18 +19,18 @@ masster/data/wiff/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecR
18
19
  masster/lib/__init__.py,sha256=TcePNx3SYZHz6763TL9Sg4gUNXaRWjlrOtyS6vsu-hg,178
19
20
  masster/lib/lib.py,sha256=SSN06UtiM-hIdjS3eCiIHsJ_8S4YHRGOLGmdPIh-efo,27481
20
21
  masster/sample/__init__.py,sha256=HL0m1ept0PMAYUCQtDDnkdOS12IFl6oLAq4TZQz83uY,170
21
- masster/sample/adducts.py,sha256=5aEZPVcjGywCsN06ZuUWIi7h1817NsUp6o8L26P0bpY,32592
22
+ masster/sample/adducts.py,sha256=nl5KEuat0hvktgar6Ca4PbY8JXt9SD05EeTn0HOKt64,32592
22
23
  masster/sample/h5.py,sha256=tlTPGrT9AMUhduvY_YPDzk6dZF5dI-9NRc1xeiuze5c,115442
23
- masster/sample/helpers.py,sha256=avW7gKT1wH47NUU0tEB3hkzm6ayQdfHpWR730kgWPSI,41342
24
+ masster/sample/helpers.py,sha256=27eZFFidr02-DlSi4-eF4bpSk_y-qU3eoFCAOshRO20,42138
24
25
  masster/sample/lib.py,sha256=E-j9c3Wd8f9a-H8xj7CAOwlA8KcyXPoFyYm3c8r7LtI,33755
25
26
  masster/sample/load.py,sha256=swjRBCoFGni9iPztHIKPVB5ru_xDMVryB_inPXdujTw,51819
26
27
  masster/sample/parameters.py,sha256=Gg2KcuNbV_wZ_Wwv93QlM5J19ji0oSIvZLPV1NoBmq0,4456
27
- masster/sample/plot.py,sha256=0v4FzO_yzpUdATjdHZU4YO7UoW73Xlf51vVQByQ33X0,82574
28
+ masster/sample/plot.py,sha256=vA37dwmpeymVW8xobrsLhsD7X8x7EQIOw50Csiica84,86675
28
29
  masster/sample/processing.py,sha256=CjaLCElDKECeCvYWqzT5EH_-rPQ0Y4A30zKjZfqmS5s,55915
29
30
  masster/sample/quant.py,sha256=tHNjvUFTdehKR31BXBZnVsBxMD9XJHgaltITOjr71uE,7562
30
- masster/sample/sample.py,sha256=O2PY7DnRx7VkASBU4qKQcTqND1aRfd0OCjKK9Rjn5uw,20574
31
+ masster/sample/sample.py,sha256=VhQik_ev1liRqGUtbZvV1NOjfFzgfZI1orfQT87gai4,20643
31
32
  masster/sample/sample5_schema.json,sha256=H5e2T6rHIDzul2kp_yP-ILUUWUpW08wP2pEQjMR0nSk,3977
32
- masster/sample/save.py,sha256=q1DjzVCB2FsTi9Sk-szd2-Nr7kPbqqFhJpjAWNfSCno,36536
33
+ masster/sample/save.py,sha256=IwWfcsmWLWM-2ASdhHXWAiPyrZBv5JUynvciNPppDUs,38643
33
34
  masster/sample/sciex.py,sha256=vnbxsq_qnAQVuzcpziP1o3IC4kM5amGBcPmC2TAuDLw,46319
34
35
  masster/sample/defaults/__init__.py,sha256=A09AOP44cxD_oYohyt7XFUho0zndRcrzVD4DUaGnKH4,447
35
36
  masster/sample/defaults/find_adducts_def.py,sha256=Bu2KiBJRxD0SAnOPNMm_Nk-6fx6QYoRXjFNGzz-0_o0,13570
@@ -66,8 +67,8 @@ masster/wizard/README.md,sha256=mL1A3YWJZOefpJ6D0-HqGLkVRmUlOpwyVFdvJBeeoZM,1414
66
67
  masster/wizard/__init__.py,sha256=a2hcZnHASjfuw1lqZhZnvTR58rc33rRnoGAY_JfvGhI,683
67
68
  masster/wizard/example.py,sha256=xEZFTH9UZ8HKOm6s3JL8Js0Uw5ChnISWBHSZCL32vsM,7983
68
69
  masster/wizard/wizard.py,sha256=UobIGFZtp1s_9WJlpl6DQ2-pp7flPQ6dlYZJqYE92OM,38131
69
- masster-0.5.5.dist-info/METADATA,sha256=ALpQYEYxgqYZ0XGZjcdXvgkEE_AKC0-KqepR1fwQ3hc,45113
70
- masster-0.5.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
71
- masster-0.5.5.dist-info/entry_points.txt,sha256=ZHguQ_vPmdbpqq2uGtmEOLJfgP-DQ1T0c07Lxh30wc8,58
72
- masster-0.5.5.dist-info/licenses/LICENSE,sha256=bx5iLIKjgAdYQ7sISn7DsfHRKkoCUm1154sJJKhgqnU,35184
73
- masster-0.5.5.dist-info/RECORD,,
70
+ masster-0.5.6.dist-info/METADATA,sha256=Vbsgbvaxv5TP83vvlXhTlG7vdrkUaN8fvdkSwVil3HY,45113
71
+ masster-0.5.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
72
+ masster-0.5.6.dist-info/entry_points.txt,sha256=ZHguQ_vPmdbpqq2uGtmEOLJfgP-DQ1T0c07Lxh30wc8,58
73
+ masster-0.5.6.dist-info/licenses/LICENSE,sha256=bx5iLIKjgAdYQ7sISn7DsfHRKkoCUm1154sJJKhgqnU,35184
74
+ masster-0.5.6.dist-info/RECORD,,