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/_version.py +1 -1
- masster/sample/h5.py +18 -2
- masster/sample/sample5_schema.json +76 -58
- masster/study/h5.py +317 -138
- masster/study/helpers.py +6 -39
- masster/study/load.py +23 -134
- masster/study/study.py +29 -11
- {masster-0.2.0.dist-info → masster-0.2.2.dist-info}/METADATA +31 -55
- {masster-0.2.0.dist-info → masster-0.2.2.dist-info}/RECORD +12 -12
- {masster-0.2.0.dist-info → masster-0.2.2.dist-info}/WHEEL +0 -0
- {masster-0.2.0.dist-info → masster-0.2.2.dist-info}/entry_points.txt +0 -0
- {masster-0.2.0.dist-info → masster-0.2.2.dist-info}/licenses/LICENSE +0 -0
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
|
|
271
|
+
def fill_chrom_single(
|
|
271
272
|
self,
|
|
272
|
-
uids=
|
|
273
|
-
mz_tol=
|
|
274
|
-
rt_tol=
|
|
275
|
-
min_samples_rel=
|
|
276
|
-
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
|
|
689
|
+
def fill_chrom(
|
|
689
690
|
self,
|
|
690
|
-
uids=
|
|
691
|
-
mz_tol=
|
|
692
|
-
rt_tol=
|
|
693
|
-
min_samples_rel=
|
|
694
|
-
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
|
-
|
|
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
|
-
|
|
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"
|
|
467
|
-
f"
|
|
468
|
-
f"
|
|
469
|
-
f"
|
|
470
|
-
f"
|
|
471
|
-
f"
|
|
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.
|
|
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.
|
|
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
|
-
###
|
|
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
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
30
|
-
masster/study/helpers.py,sha256=
|
|
31
|
-
masster/study/load.py,sha256=
|
|
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=
|
|
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.
|
|
47
|
-
masster-0.2.
|
|
48
|
-
masster-0.2.
|
|
49
|
-
masster-0.2.
|
|
50
|
-
masster-0.2.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|