masster 0.5.5__py3-none-any.whl → 0.5.7__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,76 @@ 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
+
90
+ # If cmap package is not available, fall back to process_cmap
91
+ if Colormap is None:
92
+ if logger:
93
+ logger.warning("cmap package not available, using holoviews process_cmap")
94
+ return process_cmap(cmap, provider="bokeh")
95
+
96
+ try:
97
+ # Handle colormap using cmap.Colormap
98
+ if isinstance(cmap, str):
99
+ colormap = Colormap(cmap)
100
+ # Generate 256 colors and convert to hex
101
+ import matplotlib.colors as mcolors
102
+ colors = colormap(np.linspace(0, 1, 256))
103
+ palette = [mcolors.rgb2hex(color) for color in colors]
104
+ else:
105
+ colormap = cmap
106
+ # Try to use to_bokeh() method first
107
+ try:
108
+ palette = colormap.to_bokeh()
109
+ # Ensure we got a color palette, not another mapper
110
+ if not isinstance(palette, (list, tuple)):
111
+ # Fall back to generating colors manually
112
+ import matplotlib.colors as mcolors
113
+ colors = colormap(np.linspace(0, 1, 256))
114
+ palette = [mcolors.rgb2hex(color) for color in colors]
115
+ except AttributeError:
116
+ # Fall back to generating colors manually
117
+ import matplotlib.colors as mcolors
118
+ colors = colormap(np.linspace(0, 1, 256))
119
+ palette = [mcolors.rgb2hex(color) for color in colors]
120
+
121
+ return palette
122
+
123
+ except (AttributeError, ValueError, TypeError) as e:
124
+ # Fallback to process_cmap if cmap interpretation fails
125
+ if logger:
126
+ logger.warning(f"Could not interpret colormap '{cmap}': {e}, falling back to {fallback}")
127
+ return process_cmap(fallback, provider="bokeh")
128
+
129
+
66
130
  def _is_notebook_environment():
67
131
  """
68
132
  Detect if code is running in a notebook environment (Jupyter, JupyterLab, or Marimo).
@@ -389,15 +453,15 @@ def plot_2d(
389
453
  show_ms2=False,
390
454
  show_in_browser=False,
391
455
  title=None,
392
- cmap=None,
456
+ cmap='iridescent',
393
457
  marker="circle",
394
- markersize=10,
458
+ markersize=5,
395
459
  size="static",
396
460
  raster_dynamic=True,
397
461
  raster_max_px=8,
398
462
  raster_threshold=0.8,
399
463
  height=600,
400
- width=800,
464
+ width=750,
401
465
  mz_range=None,
402
466
  rt_range=None
403
467
  ):
@@ -462,10 +526,8 @@ def plot_2d(
462
526
  self.logger.error("No MS1 data available.")
463
527
  return
464
528
 
465
- if cmap is None:
466
- cmap = "iridescent_r"
467
- elif cmap == "grey":
468
- cmap = "Greys256"
529
+ # Process colormap using the cmap package
530
+ cmap_palette = _process_cmap(cmap, fallback="iridescent", logger=self.logger)
469
531
 
470
532
  # get columns rt, mz, inty from self.ms1_df, It's polars DataFrame
471
533
  spectradf = self.ms1_df.select(["rt", "mz", "inty"])
@@ -585,7 +647,7 @@ def plot_2d(
585
647
  dynamic=dyn, # alpha=10, min_alpha=0,
586
648
  ).opts(
587
649
  active_tools=["box_zoom"],
588
- cmap=process_cmap(cmap, provider="bokeh"), # blues
650
+ cmap=cmap_palette,
589
651
  tools=["hover"],
590
652
  hooks=[new_bounds_hook],
591
653
  width=width,
@@ -1003,10 +1065,8 @@ def plot_2d_oracle(
1003
1065
  print("Please load a file first.")
1004
1066
  return
1005
1067
 
1006
- if cmap is None or cmap == "grey":
1007
- cmap = "Greys256"
1008
- elif cmap == "iridescent":
1009
- cmap = "iridescent_r"
1068
+ # Process colormap using the cmap package
1069
+ cmap_palette = _process_cmap(cmap, fallback="Greys256", logger=self.logger)
1010
1070
 
1011
1071
  # get columns rt, mz, inty from self.ms1_df, It's polars DataFrame
1012
1072
  spectradf = self.ms1_df.to_pandas()
@@ -1057,7 +1117,7 @@ def plot_2d_oracle(
1057
1117
  dynamic=dyn, # alpha=10, min_alpha=0,
1058
1118
  ).opts(
1059
1119
  active_tools=["box_zoom"],
1060
- cmap=process_cmap(cmap, provider="bokeh"), # blues
1120
+ cmap=cmap_palette,
1061
1121
  tools=["hover"],
1062
1122
  hooks=[new_bounds_hook],
1063
1123
  width=1000,
@@ -1183,13 +1243,45 @@ def plot_2d_oracle(
1183
1243
 
1184
1244
  if cvalues is not None:
1185
1245
  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
- ]
1246
+
1247
+ # Use cmap package for categorical colormap
1248
+ try:
1249
+ if Colormap is not None:
1250
+ # Use rainbow colormap for categorical data
1251
+ colormap = Colormap("rainbow")
1252
+ colors = []
1253
+ for i in range(num_colors):
1254
+ # Generate evenly spaced colors across the colormap
1255
+ t = i / (num_colors - 1) if num_colors > 1 else 0.5
1256
+ color = colormap(t)
1257
+ # Convert to hex
1258
+ import matplotlib.colors as mcolors
1259
+ # Convert color to hex - handle different color formats
1260
+ if hasattr(color, '__len__') and len(color) >= 3:
1261
+ # It's an array-like color (RGB or RGBA)
1262
+ colors.append(mcolors.rgb2hex(color[:3]))
1263
+ else:
1264
+ # It's a single value, convert to RGB
1265
+ colors.append(mcolors.rgb2hex([color, color, color]))
1266
+ else:
1267
+ # Fallback to original method
1268
+ cmap = "rainbow"
1269
+ cmap_provider = "colorcet"
1270
+ cm = process_cmap(cmap, ncolors=num_colors, provider=cmap_provider)
1271
+ colors = [
1272
+ rgb2hex(cm[int(i * (len(cm) - 1) / (num_colors - 1))]) if num_colors > 1 else rgb2hex(cm[0])
1273
+ for i in range(num_colors)
1274
+ ]
1275
+ except Exception:
1276
+ # Final fallback to original method
1277
+ cmap = "rainbow"
1278
+ cmap_provider = "colorcet"
1279
+ cm = process_cmap(cmap, ncolors=num_colors, provider=cmap_provider)
1280
+ colors = [
1281
+ rgb2hex(cm[int(i * (len(cm) - 1) / (num_colors - 1))]) if num_colors > 1 else rgb2hex(cm[0])
1282
+ for i in range(num_colors)
1283
+ ]
1284
+
1193
1285
  # assign color to each row based on id_class. If id_class is null, assign 'black'
1194
1286
  feats["color"] = "black"
1195
1287
 
@@ -1577,10 +1669,8 @@ def plot_ms2_cycle(
1577
1669
  print("Cycle number not found in scans_df.")
1578
1670
  return
1579
1671
 
1580
- if cmap is None:
1581
- cmap = "iridescent_r"
1582
- elif cmap == "grey":
1583
- cmap = "Greys256"
1672
+ # Process colormap using the cmap package
1673
+ cmap_palette = _process_cmap(cmap, fallback="iridescent_r", logger=self.logger)
1584
1674
 
1585
1675
  # find all scans in cycle
1586
1676
  scans = self.scans_df.filter(pl.col("cycle") == cycle)
@@ -1645,7 +1735,7 @@ def plot_ms2_cycle(
1645
1735
  dynamic=raster_dynamic, # alpha=10, min_alpha=0,
1646
1736
  ).opts(
1647
1737
  active_tools=["box_zoom"],
1648
- cmap=process_cmap(cmap, provider="bokeh"), # blues
1738
+ cmap=cmap_palette,
1649
1739
  tools=["hover"],
1650
1740
  hooks=[new_bounds_hook],
1651
1741
  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:
@@ -25,7 +25,7 @@ class merge_defaults:
25
25
  link_ms2 (bool): Whether to link MS2 spectra to consensus features. Default is True.
26
26
  """
27
27
 
28
- method: str = "kd"
28
+ method: str = "qt"
29
29
  min_samples: int = 2
30
30
  rt_tol: float = 5.0
31
31
  mz_tol: float = 0.05
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: masster
3
- Version: 0.5.5
3
+ Version: 0.5.7
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=ioQa4W_2pWdKSoU7hw7Pn6WMBm3nMuuLKfSR4f8171A,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=-rHqdi6q7jqjS8ENpTlxjwJBMZAwo-6OsNmE_d1JVQk,86617
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
@@ -60,14 +61,14 @@ masster/study/defaults/find_ms2_def.py,sha256=RL0DFG41wQ05U8UQKUGr3vzSl3mU0m0knQ
60
61
  masster/study/defaults/identify_def.py,sha256=96rxoCAPQj_yX-3mRoD2LTkTLJgG27eJQqwarLv5jL0,10580
61
62
  masster/study/defaults/integrate_chrom_def.py,sha256=0MNIWGTjty-Zu-NTQsIweuj3UVqEY3x1x8pK0mPwYak,7264
62
63
  masster/study/defaults/integrate_def.py,sha256=Vf4SAzdBfnsSZ3IRaF0qZvWu3gMDPHdgPfMYoPKeWv8,7246
63
- masster/study/defaults/merge_def.py,sha256=3W13QSZaIzxHTDFifW-Nncu_phIqZgf0TpcllaKwbHE,12978
64
+ masster/study/defaults/merge_def.py,sha256=krR099IkENLlJVxpSjdje3E6h-_qtlc3Ep6Hpy6inrU,12978
64
65
  masster/study/defaults/study_def.py,sha256=h8dYbi9xv0sesCSQik49Z53IkskMmNtW6ixl7it5pL0,16033
65
66
  masster/wizard/README.md,sha256=mL1A3YWJZOefpJ6D0-HqGLkVRmUlOpwyVFdvJBeeoZM,14149
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.7.dist-info/METADATA,sha256=DpCKFnXCQ5SXZnw95QXJM1yEpZETz882BwJp5scuvqc,45113
71
+ masster-0.5.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
72
+ masster-0.5.7.dist-info/entry_points.txt,sha256=ZHguQ_vPmdbpqq2uGtmEOLJfgP-DQ1T0c07Lxh30wc8,58
73
+ masster-0.5.7.dist-info/licenses/LICENSE,sha256=bx5iLIKjgAdYQ7sISn7DsfHRKkoCUm1154sJJKhgqnU,35184
74
+ masster-0.5.7.dist-info/RECORD,,