masster 0.2.0__py3-none-any.whl → 0.2.2__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/study/load.py CHANGED
@@ -256,7 +256,8 @@ def load(self, filename=None):
256
256
  else:
257
257
  self.logger.error("Either filename or default_folder must be provided")
258
258
  return
259
-
259
+
260
+ self.logger.info(f"Loading study from {filename}")
260
261
  self._load_study5(filename)
261
262
  # After loading the study, check if consensus XML exists and load it
262
263
  consensus_xml_path = filename.replace(".study5", ".consensusXML")
@@ -267,13 +268,13 @@ def load(self, filename=None):
267
268
  self.logger.warning(f"No consensus XML file found at {consensus_xml_path}")
268
269
 
269
270
 
270
- def fill_chrom(
271
+ def fill_chrom_single(
271
272
  self,
272
- uids=fill_chrom_defaults().uids,
273
- mz_tol=fill_chrom_defaults().mz_tol,
274
- rt_tol=fill_chrom_defaults().rt_tol,
275
- min_samples_rel=fill_chrom_defaults().min_samples_rel,
276
- min_samples_abs=fill_chrom_defaults().min_samples_abs,
273
+ uids=None,
274
+ mz_tol: float = 0.010,
275
+ rt_tol: float = 10.0,
276
+ min_samples_rel: float = 0.0,
277
+ min_samples_abs: int = 2,
277
278
  ):
278
279
  """Fill missing chromatograms by extracting from raw data.
279
280
 
@@ -281,10 +282,10 @@ def fill_chrom(
281
282
 
282
283
  Args:
283
284
  uids: Consensus UIDs to process (default: all)
284
- mz_tol: m/z tolerance for extraction
285
- rt_tol: RT tolerance for extraction
286
- min_samples_rel: Relative minimum sample threshold
287
- min_samples_abs: Absolute minimum sample threshold
285
+ mz_tol: m/z tolerance for extraction (default: 0.010 Da)
286
+ rt_tol: RT tolerance for extraction (default: 10.0 seconds)
287
+ min_samples_rel: Relative minimum sample threshold (default: 0.0)
288
+ min_samples_abs: Absolute minimum sample threshold (default: 2)
288
289
  """
289
290
  uids = self._get_consensus_uids(uids)
290
291
 
@@ -685,28 +686,28 @@ def _process_sample_for_parallel_fill(
685
686
  return new_features, new_mapping, counter
686
687
 
687
688
 
688
- def fill_chrom_parallel(
689
+ def fill_chrom(
689
690
  self,
690
- uids=fill_chrom_defaults().uids,
691
- mz_tol=fill_chrom_defaults().mz_tol,
692
- rt_tol=fill_chrom_defaults().rt_tol,
693
- min_samples_rel=fill_chrom_defaults().min_samples_rel,
694
- min_samples_abs=fill_chrom_defaults().min_samples_abs,
691
+ uids=None,
692
+ mz_tol: float = 0.010,
693
+ rt_tol: float = 10.0,
694
+ min_samples_rel: float = 0.0,
695
+ min_samples_abs: int = 2,
695
696
  num_workers=4,
696
697
  ):
697
698
  """Fill missing chromatograms by extracting from raw data using parallel processing.
698
699
 
699
700
  Args:
700
701
  uids: Consensus UIDs to process (default: all)
701
- mz_tol: m/z tolerance for extraction
702
- rt_tol: RT tolerance for extraction
703
- min_samples_rel: Relative minimum sample threshold
704
- min_samples_abs: Absolute minimum sample threshold
702
+ mz_tol: m/z tolerance for extraction (default: 0.010 Da)
703
+ rt_tol: RT tolerance for extraction (default: 10.0 seconds)
704
+ min_samples_rel: Relative minimum sample threshold (default: 0.0)
705
+ min_samples_abs: Absolute minimum sample threshold (default: 2)
705
706
  num_workers: Number of parallel workers (default: 4)
706
707
  """
707
708
  uids = self._get_consensus_uids(uids)
708
709
 
709
- self.logger.info("Gap filling...")
710
+ self.logger.info(f"Gap filling with {num_workers} workers...")
710
711
  self.logger.debug(
711
712
  f"Parameters: mz_tol={mz_tol}, rt_tol={rt_tol}, min_samples_rel={min_samples_rel}, min_samples_abs={min_samples_abs}, num_workers={num_workers}",
712
713
  )
@@ -1075,115 +1076,3 @@ def _load_consensusXML(self, filename="alignment.consensusXML"):
1075
1076
  fh.load(filename, self.consensus_map)
1076
1077
  self.logger.debug(f"Loaded consensus map from {filename}.")
1077
1078
 
1078
-
1079
- """def find_features(
1080
- self,
1081
- reset=None,
1082
- chrom_peak_snr=None,
1083
- noise=None,
1084
- chrom_fwhm=None,
1085
- chrom_coherence=None,
1086
- prominence_scaled=None,
1087
- link_ms2=None,
1088
- save_mgf=None,
1089
- save_stats=None,
1090
- ):
1091
- self.logger.debug("Finding features for all samples in the study.")
1092
- # Initialize default parameters inside the function
1093
- if reset is None:
1094
- reset = False
1095
- if chrom_peak_snr is None:
1096
- chrom_peak_snr = 10.0
1097
- if noise is None:
1098
- noise = 200
1099
-
1100
- # Create parameter object and update with provided values
1101
- params = fill_chrom_defaults()
1102
-
1103
- # Set explicit parameters
1104
- params.set('uids', uids, validate=True)
1105
- params.set('mz_tol', mz_tol, validate=True)
1106
- params.set('rt_tol', rt_tol, validate=True)
1107
- params.set('min_samples_rel', min_samples_rel, validate=True)
1108
- params.set('min_samples_abs', min_samples_abs, validate=True)
1109
-
1110
- # Store parameters in the Study object
1111
- self.store_history(["fill_chrom"], params.to_dict())
1112
- self.logger.debug("Parameters stored to fill_chrom")
1113
-
1114
- if chrom_fwhm is None:
1115
- chrom_fwhm = 1.0
1116
- if chrom_coherence is None:
1117
- chrom_coherence = 0.3
1118
- if prominence_scaled is None:
1119
- prominence_scaled = 1.0
1120
- if link_ms2 is None:
1121
- link_ms2 = True
1122
- if save_mgf is None:
1123
- save_mgf = False
1124
- if save_stats is None:
1125
- save_stats = False
1126
-
1127
- # iterate over all samples in samples_df - using Polars iteration
1128
- for index, row_dict in enumerate(self.samples_df.iter_rows(named=True)):
1129
- # check if features_maps is None
1130
- if self.features_maps[index] is not None and not reset:
1131
- # skip this sample
1132
- continue
1133
- if self.features_maps[index] is not None and not reset:
1134
- # skip this sample
1135
- continue
1136
- # load the sample
1137
- ddaobj = Sample(row_dict["sample_path"])
1138
- # find features
1139
- ddaobj.find_features(
1140
- chrom_peak_snr=chrom_peak_snr,
1141
- noise=noise,
1142
- chrom_fwhm=chrom_fwhm,
1143
- )
1144
- ddaobj.filter_features(
1145
- prominence_scaled=prominence_scaled,
1146
- coherence=chrom_coherence,
1147
- )
1148
- # link MS2
1149
- if link_ms2:
1150
- ddaobj.find_ms2()
1151
-
1152
- # add to features_maps at the index of the sample
1153
- self.features_maps[index] = ddaobj.features
1154
- # add to features_df
1155
- f_df = ddaobj.features_df.clone()
1156
- # add column 'feature_uid' with the uid as uint64
1157
-
1158
- f_df = f_df.with_columns(pl.lit(row_dict["sample_uid"]).alias("sample_uid"))
1159
- # move sample_uid to the first column
1160
- other_cols = [col for col in f_df.columns if col != "sample_uid"]
1161
- f_df = f_df.select(["sample_uid"] + other_cols)
1162
-
1163
- offset = (
1164
- self.features_df.get_column("feature_uid").max() + 1
1165
- if not self.features_df.is_empty()
1166
- else 1
1167
- )
1168
- f_df = f_df.with_columns(
1169
- pl.int_range(offset, offset + len(f_df)).alias("feature_uid"),
1170
- )
1171
- # remove all rows with sample_uid=row_dict['sample_uid']
1172
- self.features_df = self.features_df.filter(
1173
- pl.col("sample_uid") != row_dict["sample_uid"],
1174
- )
1175
- self.features_df = pl.concat([self.features_df, f_df])
1176
-
1177
- if self.default_folder is not None:
1178
- bname = os.path.join(self.default_folder, row_dict["sample_name"])
1179
- ddaobj.save(filename=bname + ".mzpkl")
1180
- ddaobj.save_features(filename=bname + ".featureXML")
1181
- else:
1182
- bname = row_dict["sample_path"].replace(".mzpkl", "").replace(".wiff", "")
1183
- ddaobj.save(filename=bname + ".mzpkl")
1184
- ddaobj.save_features(filename=bname + ".featureXML")
1185
- if save_stats:
1186
- ddaobj.save_stats(filename=bname + "_stats.csv")
1187
- if save_mgf:
1188
- ddaobj.save_mgf(filename=bname + ".mgf", include_all_ms1=True)
1189
- """
masster/study/study.py CHANGED
@@ -63,6 +63,7 @@ from masster.study.helpers import get_chrom
63
63
  from masster.study.helpers import get_consensus
64
64
  from masster.study.helpers import get_consensus_matches
65
65
  from masster.study.helpers import get_consensus_matrix
66
+ from masster.study.helpers import get_orphans
66
67
  from masster.study.helpers import get_gaps_matrix
67
68
  from masster.study.helpers import get_gaps_stats
68
69
  from masster.study.helpers import align_reset
@@ -70,8 +71,8 @@ from masster.study.helpers import set_default_folder
70
71
  from masster.study.load import add_folder
71
72
  from masster.study.load import add_sample
72
73
  from masster.study.load import (
74
+ fill_chrom_single,
73
75
  fill_chrom,
74
- fill_chrom_parallel,
75
76
  _process_sample_for_parallel_fill,
76
77
  )
77
78
  from masster.study.load import _get_missing_consensus_sample_combinations
@@ -241,7 +242,7 @@ class Study:
241
242
  save_consensus = save_consensus
242
243
  save_samples = save_samples
243
244
  align = align
244
- fill_chrom = fill_chrom
245
+ fill_chrom_single = fill_chrom_single
245
246
  find_consensus = find_consensus
246
247
  find_ms2 = find_ms2
247
248
  integrate_chrom = integrate_chrom
@@ -273,8 +274,9 @@ class Study:
273
274
  get_consensus_matrix = get_consensus_matrix
274
275
  get_gaps_matrix = get_gaps_matrix
275
276
  get_gaps_stats = get_gaps_stats
277
+ get_orphans = get_orphans
276
278
  set_default_folder = set_default_folder
277
- fill_chrom_parallel = fill_chrom_parallel
279
+ fill_chrom = fill_chrom
278
280
  _process_sample_for_parallel_fill = _process_sample_for_parallel_fill
279
281
  _get_missing_consensus_sample_combinations = _get_missing_consensus_sample_combinations
280
282
  _load_consensusXML = _load_consensusXML
@@ -423,6 +425,12 @@ class Study:
423
425
  mean_samples = 0
424
426
  max_samples = 0
425
427
 
428
+ # Count only features where 'filled' == False
429
+ if not self.features_df.is_empty() and 'filled' in self.features_df.columns:
430
+ unfilled_features_count = self.features_df.filter(~self.features_df['filled']).height
431
+ else:
432
+ unfilled_features_count = 0
433
+
426
434
  # Optimize chrom completeness calculation
427
435
  if consensus_df_len > 0 and samples_df_len > 0 and not self.features_df.is_empty():
428
436
 
@@ -441,8 +449,17 @@ class Study:
441
449
  chrom_completeness = (
442
450
  non_null_chroms / total_possible if total_possible > 0 else 0
443
451
  )
452
+ not_in_consensus = len(self.features_df.filter(~self.features_df['feature_uid'].is_in(self.consensus_mapping_df['feature_uid'].to_list())))
453
+ ratio_not_in_consensus_to_total = not_in_consensus / unfilled_features_count if unfilled_features_count > 0 else 0
454
+ ratio_in_consensus_to_total = (unfilled_features_count- not_in_consensus) / len(self.features_df) if len(self.features_df) > 0 else 0
455
+
444
456
  else:
445
457
  chrom_completeness = 0
458
+ not_in_consensus = 0
459
+ ratio_not_in_consensus_to_total = 0
460
+ ratio_in_consensus_to_total = 0
461
+
462
+
446
463
 
447
464
  # calculate for how many consensus features there is at least one MS2 spectrum linked
448
465
  consensus_with_ms2 = self.consensus_ms2.select(
@@ -458,17 +475,18 @@ class Study:
458
475
  self.consensus_mapping_df.estimated_size()
459
476
  )
460
477
 
461
- # Build summary string efficiently
462
478
  summary = (
463
479
  f"Default folder: {self.default_folder}\n"
464
- f"Consensus features: {consensus_df_len}\n"
465
480
  f"Samples: {samples_df_len}\n"
466
- f"Min samples/consensus: {min_samples:.0f}\n"
467
- f"Mean samples/consensus: {mean_samples:.0f}\n"
468
- f"Max samples/consensus: {max_samples:.0f}\n"
469
- f"Chrom completeness: {chrom_completeness:.2f}\n"
470
- f"Linked MS2 spectra: {consensus_ms2_len}\n"
471
- f"Consensus with MS2: {consensus_with_ms2}\n"
481
+ f"Features: {unfilled_features_count}\n"
482
+ f"- in consensus: {ratio_in_consensus_to_total*100:.0f}%\n"
483
+ f"- non in consensus: {ratio_not_in_consensus_to_total*100:.0f}%\n"
484
+ f"Consensus: {consensus_df_len}\n"
485
+ f"- Min samples count: {min_samples:.0f}\n"
486
+ f"- Mean samples count: {mean_samples:.0f}\n"
487
+ f"- Max samples count: {max_samples:.0f}\n"
488
+ f"- with MS2: {consensus_with_ms2}\n"
489
+ f"Chrom completeness: {chrom_completeness*100:.0f}%\n"
472
490
  f"Memory usage: {memory_usage / (1024 ** 2):.2f} MB\n"
473
491
  )
474
492
 
@@ -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,5 +1,5 @@
1
1
  masster/__init__.py,sha256=xeh-hwR_2umE0CpRXn8t22wbkt4IT-FBEzeJknL8J6c,670
2
- masster/_version.py,sha256=Fe1PEQVE1GASf5wPGp1Sox8lfKZVowJRy5eooPmbnPU,239
2
+ masster/_version.py,sha256=CE1l1ajIZe8NnlO_z6wnQkbMvTvA7ky9zk-mlENBeo4,239
3
3
  masster/chromatogram.py,sha256=f25rMrNvCQN0A93wp9QPdG3H4FiOlYPbRY3H4yd7Q5Y,18910
4
4
  masster/logger.py,sha256=9uzuVEPwQkVlnsqT_eVvh33FZY_FIm3Wn2TaJcGhZP8,10674
5
5
  masster/spectrum.py,sha256=XiClDcN1uiG-_2TIr7Bqp7x8gWvHPbC5oh3zUu3fr6Y,46789
@@ -9,14 +9,14 @@ masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005m
9
9
  masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.wiff.scan,sha256=ahi1Y3UhAj9Bj4Q2MlbgPekNdkJvMOoMXVOoR6CeIxc,13881220
10
10
  masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.wiff2,sha256=TFB0HW4Agkig6yht7FtgjUdbXax8jjKaHpSZSvuU5vs,3252224
11
11
  masster/sample/__init__.py,sha256=WLWbcbvF0kPz3-fYoP0JNP8lX51v5z7Mof-BEjRZmgY,161
12
- masster/sample/h5.py,sha256=BpSCg5uBahsRJfwRYBoxQKT-r4_YhzoXLrOx6vqJHLg,60987
12
+ masster/sample/h5.py,sha256=d4hzN0xL9Br0Se6kw-dr85qqnBghIJKq-rXPyAbIGpU,62039
13
13
  masster/sample/helpers.py,sha256=gaf0MbuuZUpGF0siUaZpom3JdrjBMTGBFHIIwb9NfGM,13901
14
14
  masster/sample/load.py,sha256=MqFIHjUjoIq1EUoFLMhM0IczkS3dUinmEppDKB7tqjY,44605
15
15
  masster/sample/parameters.py,sha256=VmYuYewgQCNRgfYhRiG9vRrLoDxa-AAs8bG_OpPzq5M,4345
16
16
  masster/sample/plot.py,sha256=7iyBddUa8-4OAcNhbgNUR_mNJgh5KKLwIlIL0s14g9w,58110
17
17
  masster/sample/processing.py,sha256=-kWNWTYpyqlD2adF5uQ3laGZ9Zg8h79RgL5DY6qEoxM,56972
18
18
  masster/sample/sample.py,sha256=uTsLmm7aWvRZO1mIGD_9sYDlKO3Ws74aLp7fIeLn9Eo,15282
19
- masster/sample/sample5_schema.json,sha256=Ydmp85pJTfC-3UZ87ECYPkGOBrpBSF9MXvkYhwwmc20,3026
19
+ masster/sample/sample5_schema.json,sha256=pnQMOM4z0P6BdrXGOovVoVZwt-1gS-v8KkhTgbSH8R8,3405
20
20
  masster/sample/save.py,sha256=Msr_wVV4O8nUYI28l_tIsZdXbSMGFIyjlnCnar5qnqw,27292
21
21
  masster/sample/defaults/__init__.py,sha256=aNVdfpiJnyQQ9Jm5KCaJm-ySsi6S4aPEWFglVdKYnag,432
22
22
  masster/sample/defaults/find_adducts_def.py,sha256=dhk_F-cAd1lc39mmC7Xt5sZF20LmLugR8JS2hu0DHYE,11305
@@ -26,14 +26,14 @@ masster/sample/defaults/get_spectrum_def.py,sha256=hy3t3zbIVvKRQmVQl8xAXrmQ4LSDb
26
26
  masster/sample/defaults/sample_def.py,sha256=WHjw-jsYinPKCC02J2Fn5SGB2OW12ntEQn-sHmqESqs,13758
27
27
  masster/study/__init__.py,sha256=bTbxmTgBAL_1iB73JE8fKdo9wik9m4dcmMppElU0V18,157
28
28
  masster/study/export.py,sha256=xmT2WhAuSGGcqHw8Wa44r6g5ud1mzzywOc3TnNqNh8E,12624
29
- masster/study/h5.py,sha256=hvXhR40uHUz3opJDYD5JqtmB-8T2ur-jeaK3uiJqTBE,30813
30
- masster/study/helpers.py,sha256=NIZurJ8SlXjd4rYKn9EHoLCkz1LMf3807jAP5yK_DvM,17049
31
- masster/study/load.py,sha256=SptaAH3L1jAk_tbSY6WpuLeekrcqjIL5HuF2NH5cfQc,42626
29
+ masster/study/h5.py,sha256=BPpcEV_fZ3dJCEkzEga_V1zUkKQEj_kxAeMSF56sSts,39260
30
+ masster/study/helpers.py,sha256=ePh5hPgSAgfu7-crsm4th0QYGeQbHk9kNj7OyHMclpQ,15860
31
+ masster/study/load.py,sha256=rTmm5E-UsTg0SJqwa4i4II5ca82m8OEn05yWW2G_YPc,38718
32
32
  masster/study/parameters.py,sha256=iKCIf7_bivi0Jkz4hreKmCyusXpQX5IIuuhnmS52-Q4,3177
33
33
  masster/study/plot.py,sha256=nY6zWKUOhlyDHra4BI0c8dx7PX5fHFW8v2Ma9YpscvU,21437
34
34
  masster/study/processing.py,sha256=PjfpsVASaR0uSE4vqKzBppq4jM3HexzbGw_bn5kDwdA,42552
35
35
  masster/study/save.py,sha256=hfbYoGMaBwKPvoTm5eV3OJoSw7o3Rbed68S4RaEz1I8,5053
36
- masster/study/study.py,sha256=LEFbL5SoJ99AkIGU_58NhRnkWNrPQCHkEqCCPWG467M,19309
36
+ masster/study/study.py,sha256=jScjivP6UyBvF_BoNpPeJq2Q_ON0wtPxCVldqAEwCOU,20376
37
37
  masster/study/study5_schema.json,sha256=7LfsgI-dZGpoaPiAy0kh6gDJL4yKuA7-7PHbo9j4A6E,4630
38
38
  masster/study/defaults/__init__.py,sha256=wkul1Qq83nPHI5XebWvu3yKjp5tF8OdZDJJho8r2_qA,569
39
39
  masster/study/defaults/align_def.py,sha256=8Itwit6gaqVhF9A3w9V-uqgKlcQE6uCXyC3ul_gPWFo,8872
@@ -43,8 +43,8 @@ masster/study/defaults/find_consensus_def.py,sha256=artvErq4w07SfHB0WHi68ZjxGg0X
43
43
  masster/study/defaults/find_ms2_def.py,sha256=k-GmnCKgQuVO6M-EAjzGOqgdFrqZviRaNAdiFmwVujY,4907
44
44
  masster/study/defaults/integrate_chrom_def.py,sha256=FY9QdJpdWe18sYucrwNKoZYY0eoOo0a_hcdkZHm_W00,7107
45
45
  masster/study/defaults/study_def.py,sha256=SzUzd2YTGDGCHNMR-Dw57j5PprEnPhpITonv7wx6HQA,9035
46
- masster-0.2.0.dist-info/METADATA,sha256=zjXD29h3VsuHmiAEjDWmclTiuTKfnNcRAAM31q9EWFQ,47257
47
- masster-0.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
48
- masster-0.2.0.dist-info/entry_points.txt,sha256=ZHguQ_vPmdbpqq2uGtmEOLJfgP-DQ1T0c07Lxh30wc8,58
49
- masster-0.2.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
50
- masster-0.2.0.dist-info/RECORD,,
46
+ masster-0.2.2.dist-info/METADATA,sha256=YDUoFk7NrZYKgoPNkStSPn7G9jCbtKrLxxa9Q-fBKF8,47089
47
+ masster-0.2.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
48
+ masster-0.2.2.dist-info/entry_points.txt,sha256=ZHguQ_vPmdbpqq2uGtmEOLJfgP-DQ1T0c07Lxh30wc8,58
49
+ masster-0.2.2.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
50
+ masster-0.2.2.dist-info/RECORD,,