masster 0.3.10__py3-none-any.whl → 0.3.11__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/docs/SCX_API_Documentation.md +0 -0
- masster/docs/SCX_DLL_Analysis.md +0 -0
- masster/logger.py +92 -78
- masster/sample/defaults/find_features_def.py +16 -6
- masster/sample/defaults/sample_def.py +1 -1
- masster/sample/h5.py +2 -2
- masster/sample/helpers.py +137 -136
- masster/sample/load.py +13 -9
- masster/sample/plot.py +156 -131
- masster/sample/processing.py +18 -12
- masster/sample/sample.py +4 -4
- masster/sample/sample5_schema.json +62 -62
- masster/sample/save.py +16 -13
- masster/sample/sciex.py +187 -176
- masster/study/defaults/align_def.py +224 -6
- masster/study/defaults/fill_chrom_def.py +1 -5
- masster/study/defaults/integrate_chrom_def.py +1 -5
- masster/study/defaults/study_def.py +2 -2
- masster/study/export.py +144 -131
- masster/study/h5.py +193 -133
- masster/study/helpers.py +293 -245
- masster/study/helpers_optimized.py +99 -57
- masster/study/load.py +51 -25
- masster/study/plot.py +453 -17
- masster/study/processing.py +159 -76
- masster/study/save.py +7 -7
- masster/study/study.py +97 -88
- masster/study/study5_schema.json +82 -82
- {masster-0.3.10.dist-info → masster-0.3.11.dist-info}/METADATA +1 -1
- {masster-0.3.10.dist-info → masster-0.3.11.dist-info}/RECORD +33 -31
- {masster-0.3.10.dist-info → masster-0.3.11.dist-info}/WHEEL +0 -0
- {masster-0.3.10.dist-info → masster-0.3.11.dist-info}/entry_points.txt +0 -0
- {masster-0.3.10.dist-info → masster-0.3.11.dist-info}/licenses/LICENSE +0 -0
masster/study/study.py
CHANGED
|
@@ -95,9 +95,10 @@ from masster.study.plot import plot_alignment
|
|
|
95
95
|
from masster.study.plot import plot_alignment_bokeh
|
|
96
96
|
from masster.study.plot import plot_chrom
|
|
97
97
|
from masster.study.plot import plot_consensus_2d
|
|
98
|
+
from masster.study.plot import plot_consensus_stats
|
|
99
|
+
from masster.study.plot import plot_pca
|
|
98
100
|
from masster.study.plot import plot_samples_2d
|
|
99
101
|
from masster.study.processing import align
|
|
100
|
-
from masster.study.processing import filter_consensus
|
|
101
102
|
from masster.study.processing import merge
|
|
102
103
|
from masster.study.processing import integrate
|
|
103
104
|
from masster.study.processing import find_ms2
|
|
@@ -170,7 +171,7 @@ class Study:
|
|
|
170
171
|
- `ddafile`: For individual sample processing before study-level analysis.
|
|
171
172
|
- `StudyParameters`: For configuring study-specific parameters.
|
|
172
173
|
"""
|
|
173
|
-
|
|
174
|
+
|
|
174
175
|
# Defaults class attributes
|
|
175
176
|
study_defaults = study_defaults
|
|
176
177
|
sample_defaults = sample_defaults
|
|
@@ -219,15 +220,15 @@ class Study:
|
|
|
219
220
|
# Handle filename parameter for automatic loading
|
|
220
221
|
auto_load_filename = None
|
|
221
222
|
if filename is not None:
|
|
222
|
-
if not filename.endswith(
|
|
223
|
+
if not filename.endswith(".study5"):
|
|
223
224
|
raise ValueError("filename must be a .study5 file")
|
|
224
225
|
if not os.path.exists(filename):
|
|
225
226
|
raise FileNotFoundError(f"Study file not found: {filename}")
|
|
226
|
-
|
|
227
|
+
|
|
227
228
|
# Set folder to the directory containing the file if not already specified
|
|
228
|
-
if
|
|
229
|
-
kwargs[
|
|
230
|
-
|
|
229
|
+
if "folder" not in kwargs:
|
|
230
|
+
kwargs["folder"] = os.path.dirname(os.path.abspath(filename))
|
|
231
|
+
|
|
231
232
|
auto_load_filename = filename
|
|
232
233
|
|
|
233
234
|
# Check if a study_defaults instance was passed
|
|
@@ -257,7 +258,7 @@ class Study:
|
|
|
257
258
|
self.log_level = params.log_level.upper() if params.log_level else "INFO"
|
|
258
259
|
self.log_label = params.log_label + " | " if params.log_label else ""
|
|
259
260
|
self.log_sink = params.log_sink
|
|
260
|
-
|
|
261
|
+
|
|
261
262
|
if self.folder is not None and not os.path.exists(self.folder):
|
|
262
263
|
# create the folder if it does not exist
|
|
263
264
|
os.makedirs(self.folder)
|
|
@@ -308,42 +309,42 @@ class Study:
|
|
|
308
309
|
if auto_load_filename is not None:
|
|
309
310
|
self.load(filename=auto_load_filename)
|
|
310
311
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
# Attach module functions as class methods
|
|
312
|
+
# Attach module functions as class methods
|
|
314
313
|
load = load
|
|
315
|
-
save = save
|
|
316
|
-
save_consensus = save_consensus
|
|
317
|
-
save_samples = save_samples
|
|
318
|
-
align = align
|
|
319
|
-
fill_single = fill_single
|
|
314
|
+
save = save
|
|
315
|
+
save_consensus = save_consensus
|
|
316
|
+
save_samples = save_samples
|
|
317
|
+
align = align
|
|
318
|
+
fill_single = fill_single
|
|
320
319
|
fill_chrom_single = fill_single # Backward compatibility alias
|
|
321
|
-
merge = merge
|
|
320
|
+
merge = merge
|
|
322
321
|
find_consensus = merge # Backward compatibility alias
|
|
323
|
-
find_ms2 = find_ms2
|
|
322
|
+
find_ms2 = find_ms2
|
|
324
323
|
integrate = integrate
|
|
325
324
|
integrate_chrom = integrate # Backward compatibility alias
|
|
326
|
-
store_history = store_history
|
|
327
|
-
get_parameters = get_parameters
|
|
328
|
-
update_parameters = update_parameters
|
|
329
|
-
get_parameters_property = get_parameters_property
|
|
330
|
-
set_parameters_property = set_parameters_property
|
|
331
|
-
plot_alignment = plot_alignment
|
|
332
|
-
plot_alignment_bokeh = plot_alignment_bokeh
|
|
333
|
-
plot_chrom = plot_chrom
|
|
334
|
-
plot_consensus_2d = plot_consensus_2d
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
325
|
+
store_history = store_history
|
|
326
|
+
get_parameters = get_parameters
|
|
327
|
+
update_parameters = update_parameters
|
|
328
|
+
get_parameters_property = get_parameters_property
|
|
329
|
+
set_parameters_property = set_parameters_property
|
|
330
|
+
plot_alignment = plot_alignment
|
|
331
|
+
plot_alignment_bokeh = plot_alignment_bokeh
|
|
332
|
+
plot_chrom = plot_chrom
|
|
333
|
+
plot_consensus_2d = plot_consensus_2d
|
|
334
|
+
plot_consensus_stats = plot_consensus_stats
|
|
335
|
+
plot_pca = plot_pca
|
|
336
|
+
plot_samples_2d = plot_samples_2d
|
|
337
|
+
get_consensus = get_consensus
|
|
338
|
+
get_chrom = get_chrom
|
|
339
|
+
get_consensus_matches = get_consensus_matches
|
|
340
|
+
compress = compress
|
|
340
341
|
compress_features = compress_features
|
|
341
342
|
compress_ms2 = compress_ms2
|
|
342
343
|
compress_chrom = compress_chrom
|
|
343
|
-
restore_features = restore_features
|
|
344
|
+
restore_features = restore_features
|
|
344
345
|
restore_chrom = restore_chrom
|
|
345
|
-
fill_reset = fill_reset
|
|
346
|
-
align_reset = align_reset
|
|
346
|
+
fill_reset = fill_reset
|
|
347
|
+
align_reset = align_reset
|
|
347
348
|
set_source = set_source
|
|
348
349
|
features_select = features_select
|
|
349
350
|
features_filter = features_filter
|
|
@@ -351,37 +352,37 @@ class Study:
|
|
|
351
352
|
consensus_select = consensus_select
|
|
352
353
|
consensus_filter = consensus_filter
|
|
353
354
|
consensus_delete = consensus_delete
|
|
354
|
-
filter_consensus = consensus_filter
|
|
355
|
+
filter_consensus = consensus_filter
|
|
355
356
|
select_consensus = consensus_select
|
|
356
357
|
filter_features = features_filter
|
|
357
358
|
select_features = features_select
|
|
358
359
|
consensus_find = merge
|
|
359
|
-
filter_features = features_filter
|
|
360
|
+
filter_features = features_filter
|
|
360
361
|
|
|
361
362
|
# Additional method assignments for all imported functions
|
|
362
|
-
add_folder = add
|
|
363
|
-
add = add
|
|
363
|
+
add_folder = add # backward compatibility alias
|
|
364
|
+
add = add
|
|
364
365
|
add_sample = add_sample
|
|
365
|
-
_load_study5 = _load_study5
|
|
366
|
-
_save_study5 = _save_study5
|
|
367
|
-
_save_study5_compressed = _save_study5_compressed
|
|
368
|
-
_get_consensus_uids = _get_consensus_uids
|
|
369
|
-
_get_feature_uids = _get_feature_uids
|
|
370
|
-
_get_sample_uids = _get_sample_uids
|
|
371
|
-
get_consensus_matrix = get_consensus_matrix
|
|
372
|
-
get_gaps_matrix = get_gaps_matrix
|
|
373
|
-
get_gaps_stats = get_gaps_stats
|
|
366
|
+
_load_study5 = _load_study5
|
|
367
|
+
_save_study5 = _save_study5
|
|
368
|
+
_save_study5_compressed = _save_study5_compressed
|
|
369
|
+
_get_consensus_uids = _get_consensus_uids
|
|
370
|
+
_get_feature_uids = _get_feature_uids
|
|
371
|
+
_get_sample_uids = _get_sample_uids
|
|
372
|
+
get_consensus_matrix = get_consensus_matrix
|
|
373
|
+
get_gaps_matrix = get_gaps_matrix
|
|
374
|
+
get_gaps_stats = get_gaps_stats
|
|
374
375
|
get_orphans = get_orphans
|
|
375
|
-
set_folder = set_folder
|
|
376
|
-
fill = fill
|
|
376
|
+
set_folder = set_folder
|
|
377
|
+
fill = fill
|
|
377
378
|
fill_chrom = fill # Backward compatibility alias
|
|
378
|
-
_process_sample_for_parallel_fill = _process_sample_for_parallel_fill
|
|
379
|
-
_get_missing_consensus_sample_combinations = _get_missing_consensus_sample_combinations
|
|
380
|
-
_load_consensusXML = _load_consensusXML
|
|
381
|
-
load_features = load_features
|
|
382
|
-
sanitize = sanitize
|
|
383
|
-
_save_consensusXML = _save_consensusXML
|
|
384
|
-
export_mgf = export_mgf
|
|
379
|
+
_process_sample_for_parallel_fill = _process_sample_for_parallel_fill
|
|
380
|
+
_get_missing_consensus_sample_combinations = _get_missing_consensus_sample_combinations
|
|
381
|
+
_load_consensusXML = _load_consensusXML
|
|
382
|
+
load_features = load_features
|
|
383
|
+
sanitize = sanitize
|
|
384
|
+
_save_consensusXML = _save_consensusXML
|
|
385
|
+
export_mgf = export_mgf
|
|
385
386
|
export_mztab = export_mztab
|
|
386
387
|
_get_mgf_df = _get_mgf_df # New function for MGF data extraction
|
|
387
388
|
|
|
@@ -404,13 +405,13 @@ class Study:
|
|
|
404
405
|
This ensures that the instance uses the latest implementation without restarting the interpreter.
|
|
405
406
|
"""
|
|
406
407
|
# Reset logger configuration flags to allow proper reconfiguration after reload
|
|
407
|
-
|
|
408
|
+
""" try:
|
|
408
409
|
import masster.sample.logger as logger_module
|
|
409
410
|
|
|
410
411
|
if hasattr(logger_module, "_STUDY_LOGGER_CONFIGURED"):
|
|
411
412
|
logger_module._STUDY_LOGGER_CONFIGURED = False
|
|
412
413
|
except Exception:
|
|
413
|
-
pass
|
|
414
|
+
pass"""
|
|
414
415
|
|
|
415
416
|
# Get the base module name (masster)
|
|
416
417
|
base_modname = self.__class__.__module__.split(".")[0]
|
|
@@ -508,7 +509,7 @@ class Study:
|
|
|
508
509
|
# Cache DataFrame lengths and existence checks
|
|
509
510
|
consensus_df_len = len(self.consensus_df) if not self.consensus_df.is_empty() else 0
|
|
510
511
|
samples_df_len = len(self.samples_df) if not self.samples_df.is_empty() else 0
|
|
511
|
-
|
|
512
|
+
|
|
512
513
|
# Calculate consensus statistics only if consensus_df exists and has data
|
|
513
514
|
if consensus_df_len > 0:
|
|
514
515
|
# Execute the aggregation once
|
|
@@ -525,40 +526,44 @@ class Study:
|
|
|
525
526
|
min_samples = 0
|
|
526
527
|
mean_samples = 0
|
|
527
528
|
max_samples = 0
|
|
528
|
-
|
|
529
|
+
|
|
529
530
|
# Count only features where 'filled' == False
|
|
530
|
-
if not self.features_df.is_empty() and
|
|
531
|
-
unfilled_features_count = self.features_df.filter(~self.features_df[
|
|
531
|
+
if not self.features_df.is_empty() and "filled" in self.features_df.columns:
|
|
532
|
+
unfilled_features_count = self.features_df.filter(~self.features_df["filled"]).height
|
|
532
533
|
else:
|
|
533
534
|
unfilled_features_count = 0
|
|
534
535
|
|
|
535
536
|
# Calculate features in consensus vs not in consensus (only for unfilled features)
|
|
536
537
|
if not self.features_df.is_empty() and not self.consensus_mapping_df.is_empty():
|
|
537
538
|
# Get unfilled features only
|
|
538
|
-
unfilled_features =
|
|
539
|
-
|
|
539
|
+
unfilled_features = (
|
|
540
|
+
self.features_df.filter(~self.features_df["filled"])
|
|
541
|
+
if "filled" in self.features_df.columns
|
|
542
|
+
else self.features_df
|
|
543
|
+
)
|
|
544
|
+
|
|
540
545
|
# Ensure the column and list have matching data types
|
|
541
|
-
consensus_feature_uids = self.consensus_mapping_df[
|
|
542
|
-
|
|
546
|
+
consensus_feature_uids = self.consensus_mapping_df["feature_uid"].to_list()
|
|
547
|
+
|
|
543
548
|
# Check if we need to cast either side to match types
|
|
544
|
-
unfilled_dtype = unfilled_features[
|
|
545
|
-
consensus_dtype = self.consensus_mapping_df[
|
|
546
|
-
|
|
549
|
+
unfilled_dtype = unfilled_features["feature_uid"].dtype
|
|
550
|
+
consensus_dtype = self.consensus_mapping_df["feature_uid"].dtype
|
|
551
|
+
|
|
547
552
|
if unfilled_dtype != consensus_dtype:
|
|
548
553
|
# Cast both to Int64 if possible, otherwise keep as string
|
|
549
554
|
try:
|
|
550
|
-
unfilled_features = unfilled_features.with_columns(pl.col(
|
|
555
|
+
unfilled_features = unfilled_features.with_columns(pl.col("feature_uid").cast(pl.Int64))
|
|
551
556
|
consensus_feature_uids = [int(uid) for uid in consensus_feature_uids]
|
|
552
557
|
except Exception:
|
|
553
558
|
# If casting fails, ensure both are strings
|
|
554
|
-
unfilled_features = unfilled_features.with_columns(pl.col(
|
|
559
|
+
unfilled_features = unfilled_features.with_columns(pl.col("feature_uid").cast(pl.Utf8))
|
|
555
560
|
consensus_feature_uids = [str(uid) for uid in consensus_feature_uids]
|
|
556
561
|
|
|
557
562
|
# Count unfilled features that are in consensus
|
|
558
563
|
in_consensus_count = unfilled_features.filter(
|
|
559
|
-
pl.col(
|
|
564
|
+
pl.col("feature_uid").is_in(consensus_feature_uids),
|
|
560
565
|
).height
|
|
561
|
-
|
|
566
|
+
|
|
562
567
|
# Calculate ratios that sum to 100%
|
|
563
568
|
total_unfilled = unfilled_features.height
|
|
564
569
|
ratio_in_consensus_to_total = (in_consensus_count / total_unfilled * 100) if total_unfilled > 0 else 0
|
|
@@ -572,16 +577,20 @@ class Study:
|
|
|
572
577
|
# Ensure matching data types for join keys
|
|
573
578
|
features_dtype = self.features_df["feature_uid"].dtype
|
|
574
579
|
consensus_dtype = self.consensus_mapping_df["feature_uid"].dtype
|
|
575
|
-
|
|
580
|
+
|
|
576
581
|
if features_dtype != consensus_dtype:
|
|
577
582
|
# Try to cast both to Int64, fallback to string if needed
|
|
578
583
|
try:
|
|
579
584
|
self.features_df = self.features_df.with_columns(pl.col("feature_uid").cast(pl.Int64))
|
|
580
|
-
self.consensus_mapping_df = self.consensus_mapping_df.with_columns(
|
|
585
|
+
self.consensus_mapping_df = self.consensus_mapping_df.with_columns(
|
|
586
|
+
pl.col("feature_uid").cast(pl.Int64)
|
|
587
|
+
)
|
|
581
588
|
except Exception:
|
|
582
589
|
# If casting to Int64 fails, cast both to string
|
|
583
590
|
self.features_df = self.features_df.with_columns(pl.col("feature_uid").cast(pl.Utf8))
|
|
584
|
-
self.consensus_mapping_df = self.consensus_mapping_df.with_columns(
|
|
591
|
+
self.consensus_mapping_df = self.consensus_mapping_df.with_columns(
|
|
592
|
+
pl.col("feature_uid").cast(pl.Utf8)
|
|
593
|
+
)
|
|
585
594
|
|
|
586
595
|
# Use more efficient counting - count non-null chroms only for features in consensus mapping
|
|
587
596
|
if not self.consensus_mapping_df.is_empty():
|
|
@@ -599,21 +608,21 @@ class Study:
|
|
|
599
608
|
else:
|
|
600
609
|
non_null_chroms = 0
|
|
601
610
|
total_possible = samples_df_len * consensus_df_len
|
|
602
|
-
chrom_completeness =
|
|
603
|
-
non_null_chroms / total_possible if total_possible > 0 else 0
|
|
604
|
-
)
|
|
611
|
+
chrom_completeness = non_null_chroms / total_possible if total_possible > 0 else 0
|
|
605
612
|
else:
|
|
606
613
|
chrom_completeness = 0
|
|
607
|
-
|
|
614
|
+
|
|
608
615
|
# Calculate consensus features with MS2 (count unique consensus_uids with MS2)
|
|
609
616
|
if not self.consensus_ms2.is_empty():
|
|
610
617
|
consensus_with_ms2_count = self.consensus_ms2["consensus_uid"].n_unique()
|
|
611
618
|
else:
|
|
612
619
|
consensus_with_ms2_count = 0
|
|
613
|
-
|
|
620
|
+
|
|
614
621
|
# Calculate percentage of consensus features with MS2
|
|
615
|
-
consensus_with_ms2_percentage = (
|
|
616
|
-
|
|
622
|
+
consensus_with_ms2_percentage = (
|
|
623
|
+
(consensus_with_ms2_count / consensus_df_len * 100) if consensus_df_len > 0 else 0
|
|
624
|
+
)
|
|
625
|
+
|
|
617
626
|
# Total MS2 spectra count
|
|
618
627
|
total_ms2_count = len(self.consensus_ms2) if not self.consensus_ms2.is_empty() else 0
|
|
619
628
|
|
|
@@ -632,15 +641,15 @@ class Study:
|
|
|
632
641
|
f"Samples: {samples_df_len}\n"
|
|
633
642
|
f"Features: {unfilled_features_count}\n"
|
|
634
643
|
f"- in consensus: {ratio_in_consensus_to_total:.0f}%\n"
|
|
635
|
-
f"- not in consensus: {ratio_not_in_consensus_to_total:.0f}%\n"
|
|
644
|
+
f"- not in consensus: {ratio_not_in_consensus_to_total:.0f}%\n"
|
|
636
645
|
f"Consensus: {consensus_df_len}\n"
|
|
637
646
|
f"- Min samples count: {min_samples:.0f}\n"
|
|
638
647
|
f"- Mean samples count: {mean_samples:.0f}\n"
|
|
639
|
-
f"- Max samples count: {max_samples:.0f}\n"
|
|
648
|
+
f"- Max samples count: {max_samples:.0f}\n"
|
|
640
649
|
f"- with MS2: {consensus_with_ms2_percentage:.0f}%\n"
|
|
641
650
|
f"- total MS2: {total_ms2_count}\n"
|
|
642
|
-
f"Chrom completeness: {chrom_completeness*100:.0f}%\n"
|
|
643
|
-
f"Memory usage: {memory_usage / (1024
|
|
651
|
+
f"Chrom completeness: {chrom_completeness * 100:.0f}%\n"
|
|
652
|
+
f"Memory usage: {memory_usage / (1024**2):.2f} MB\n"
|
|
644
653
|
)
|
|
645
654
|
|
|
646
655
|
print(summary)
|
masster/study/study5_schema.json
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"consensus_df": {
|
|
3
3
|
"columns": {
|
|
4
|
-
"
|
|
5
|
-
"dtype": "pl.
|
|
6
|
-
},
|
|
7
|
-
"consensus_id": {
|
|
8
|
-
"dtype": "pl.Utf8"
|
|
4
|
+
"adducts": {
|
|
5
|
+
"dtype": "pl.Object"
|
|
9
6
|
},
|
|
10
|
-
"
|
|
7
|
+
"bl": {
|
|
11
8
|
"dtype": "pl.Float64"
|
|
12
9
|
},
|
|
13
|
-
"
|
|
14
|
-
"dtype": "pl.Int64"
|
|
15
|
-
},
|
|
16
|
-
"rt": {
|
|
10
|
+
"charge_mean": {
|
|
17
11
|
"dtype": "pl.Float64"
|
|
18
12
|
},
|
|
19
|
-
"
|
|
13
|
+
"chrom_coherence_mean": {
|
|
20
14
|
"dtype": "pl.Float64"
|
|
21
15
|
},
|
|
22
|
-
"
|
|
16
|
+
"chrom_height_scaled_mean": {
|
|
23
17
|
"dtype": "pl.Float64"
|
|
24
18
|
},
|
|
25
|
-
"
|
|
19
|
+
"chrom_prominence_mean": {
|
|
26
20
|
"dtype": "pl.Float64"
|
|
27
21
|
},
|
|
28
|
-
"
|
|
22
|
+
"chrom_prominence_scaled_mean": {
|
|
29
23
|
"dtype": "pl.Float64"
|
|
30
24
|
},
|
|
31
|
-
"
|
|
25
|
+
"consensus_id": {
|
|
26
|
+
"dtype": "pl.Utf8"
|
|
27
|
+
},
|
|
28
|
+
"consensus_uid": {
|
|
29
|
+
"dtype": "pl.Int64"
|
|
30
|
+
},
|
|
31
|
+
"inty_mean": {
|
|
32
32
|
"dtype": "pl.Float64"
|
|
33
33
|
},
|
|
34
|
-
"
|
|
34
|
+
"iso_mean": {
|
|
35
35
|
"dtype": "pl.Float64"
|
|
36
36
|
},
|
|
37
|
-
"
|
|
37
|
+
"mz": {
|
|
38
38
|
"dtype": "pl.Float64"
|
|
39
39
|
},
|
|
40
|
-
"
|
|
40
|
+
"mz_end_mean": {
|
|
41
41
|
"dtype": "pl.Float64"
|
|
42
42
|
},
|
|
43
43
|
"mz_max": {
|
|
@@ -46,41 +46,41 @@
|
|
|
46
46
|
"mz_mean": {
|
|
47
47
|
"dtype": "pl.Float64"
|
|
48
48
|
},
|
|
49
|
-
"
|
|
49
|
+
"mz_min": {
|
|
50
50
|
"dtype": "pl.Float64"
|
|
51
51
|
},
|
|
52
|
-
"
|
|
52
|
+
"mz_start_mean": {
|
|
53
53
|
"dtype": "pl.Float64"
|
|
54
54
|
},
|
|
55
|
-
"
|
|
56
|
-
"dtype": "pl.
|
|
55
|
+
"number_ms2": {
|
|
56
|
+
"dtype": "pl.Int64"
|
|
57
57
|
},
|
|
58
|
-
"
|
|
59
|
-
"dtype": "pl.
|
|
58
|
+
"number_samples": {
|
|
59
|
+
"dtype": "pl.Int64"
|
|
60
60
|
},
|
|
61
|
-
"
|
|
61
|
+
"quality": {
|
|
62
62
|
"dtype": "pl.Float64"
|
|
63
63
|
},
|
|
64
|
-
"
|
|
64
|
+
"rt": {
|
|
65
65
|
"dtype": "pl.Float64"
|
|
66
66
|
},
|
|
67
|
-
"
|
|
67
|
+
"rt_delta_mean": {
|
|
68
68
|
"dtype": "pl.Float64"
|
|
69
69
|
},
|
|
70
|
-
"
|
|
70
|
+
"rt_end_mean": {
|
|
71
71
|
"dtype": "pl.Float64"
|
|
72
72
|
},
|
|
73
|
-
"
|
|
73
|
+
"rt_max": {
|
|
74
74
|
"dtype": "pl.Float64"
|
|
75
75
|
},
|
|
76
|
-
"
|
|
76
|
+
"rt_mean": {
|
|
77
77
|
"dtype": "pl.Float64"
|
|
78
78
|
},
|
|
79
|
-
"
|
|
80
|
-
"dtype": "pl.
|
|
79
|
+
"rt_min": {
|
|
80
|
+
"dtype": "pl.Float64"
|
|
81
81
|
},
|
|
82
|
-
"
|
|
83
|
-
"dtype": "pl.
|
|
82
|
+
"rt_start_mean": {
|
|
83
|
+
"dtype": "pl.Float64"
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
},
|
|
@@ -133,106 +133,112 @@
|
|
|
133
133
|
},
|
|
134
134
|
"features_df": {
|
|
135
135
|
"columns": {
|
|
136
|
-
"
|
|
136
|
+
"adduct": {
|
|
137
|
+
"dtype": "pl.Utf8"
|
|
138
|
+
},
|
|
139
|
+
"adduct_group": {
|
|
137
140
|
"dtype": "pl.Int64"
|
|
138
141
|
},
|
|
139
|
-
"
|
|
142
|
+
"adduct_mass": {
|
|
143
|
+
"dtype": "pl.Float64"
|
|
144
|
+
},
|
|
145
|
+
"charge": {
|
|
140
146
|
"dtype": "pl.Int32"
|
|
141
147
|
},
|
|
142
|
-
"
|
|
143
|
-
"dtype": "pl.
|
|
148
|
+
"chrom": {
|
|
149
|
+
"dtype": "pl.Object"
|
|
144
150
|
},
|
|
145
|
-
"
|
|
151
|
+
"chrom_area": {
|
|
146
152
|
"dtype": "pl.Float64"
|
|
147
153
|
},
|
|
148
|
-
"
|
|
154
|
+
"chrom_coherence": {
|
|
149
155
|
"dtype": "pl.Float64"
|
|
150
156
|
},
|
|
151
|
-
"
|
|
157
|
+
"chrom_height_scaled": {
|
|
152
158
|
"dtype": "pl.Float64"
|
|
153
159
|
},
|
|
154
|
-
"
|
|
160
|
+
"chrom_prominence": {
|
|
155
161
|
"dtype": "pl.Float64"
|
|
156
162
|
},
|
|
157
|
-
"
|
|
163
|
+
"chrom_prominence_scaled": {
|
|
158
164
|
"dtype": "pl.Float64"
|
|
159
165
|
},
|
|
160
|
-
"
|
|
161
|
-
"dtype": "pl.
|
|
166
|
+
"feature_id": {
|
|
167
|
+
"dtype": "pl.Utf8"
|
|
162
168
|
},
|
|
163
|
-
"
|
|
164
|
-
"dtype": "pl.
|
|
169
|
+
"feature_uid": {
|
|
170
|
+
"dtype": "pl.Int64"
|
|
165
171
|
},
|
|
166
|
-
"
|
|
167
|
-
"dtype": "pl.
|
|
172
|
+
"filled": {
|
|
173
|
+
"dtype": "pl.Boolean"
|
|
168
174
|
},
|
|
169
175
|
"inty": {
|
|
170
176
|
"dtype": "pl.Float64"
|
|
171
177
|
},
|
|
172
|
-
"quality": {
|
|
173
|
-
"dtype": "pl.Float64"
|
|
174
|
-
},
|
|
175
|
-
"charge": {
|
|
176
|
-
"dtype": "pl.Int32"
|
|
177
|
-
},
|
|
178
178
|
"iso": {
|
|
179
179
|
"dtype": "pl.Int64"
|
|
180
180
|
},
|
|
181
181
|
"iso_of": {
|
|
182
182
|
"dtype": "pl.Int64"
|
|
183
183
|
},
|
|
184
|
-
"
|
|
185
|
-
"dtype": "pl.
|
|
184
|
+
"ms2_scans": {
|
|
185
|
+
"dtype": "pl.Object"
|
|
186
186
|
},
|
|
187
|
-
"
|
|
188
|
-
"dtype": "pl.
|
|
187
|
+
"ms2_specs": {
|
|
188
|
+
"dtype": "pl.Object"
|
|
189
189
|
},
|
|
190
|
-
"
|
|
190
|
+
"mz": {
|
|
191
191
|
"dtype": "pl.Float64"
|
|
192
192
|
},
|
|
193
|
-
"
|
|
194
|
-
"dtype": "pl.
|
|
193
|
+
"mz_end": {
|
|
194
|
+
"dtype": "pl.Float64"
|
|
195
195
|
},
|
|
196
|
-
"
|
|
196
|
+
"mz_start": {
|
|
197
197
|
"dtype": "pl.Float64"
|
|
198
198
|
},
|
|
199
|
-
"
|
|
200
|
-
"dtype": "pl.
|
|
199
|
+
"quality": {
|
|
200
|
+
"dtype": "pl.Float64"
|
|
201
201
|
},
|
|
202
|
-
"
|
|
202
|
+
"rt": {
|
|
203
203
|
"dtype": "pl.Float64"
|
|
204
204
|
},
|
|
205
|
-
"
|
|
205
|
+
"rt_delta": {
|
|
206
206
|
"dtype": "pl.Float64"
|
|
207
207
|
},
|
|
208
|
-
"
|
|
208
|
+
"rt_end": {
|
|
209
209
|
"dtype": "pl.Float64"
|
|
210
210
|
},
|
|
211
|
-
"
|
|
211
|
+
"rt_original": {
|
|
212
212
|
"dtype": "pl.Float64"
|
|
213
213
|
},
|
|
214
|
-
"
|
|
215
|
-
"dtype": "pl.
|
|
214
|
+
"rt_start": {
|
|
215
|
+
"dtype": "pl.Float64"
|
|
216
216
|
},
|
|
217
|
-
"
|
|
218
|
-
"dtype": "pl.
|
|
217
|
+
"sample_uid": {
|
|
218
|
+
"dtype": "pl.Int32"
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
},
|
|
222
222
|
"samples_df": {
|
|
223
223
|
"columns": {
|
|
224
|
+
"file_source": {
|
|
225
|
+
"dtype": "pl.Utf8"
|
|
226
|
+
},
|
|
224
227
|
"map_id": {
|
|
225
228
|
"dtype": "pl.Utf8"
|
|
226
229
|
},
|
|
230
|
+
"ms1": {
|
|
231
|
+
"dtype": "pl.Int64"
|
|
232
|
+
},
|
|
233
|
+
"ms2": {
|
|
234
|
+
"dtype": "pl.Int64"
|
|
235
|
+
},
|
|
227
236
|
"sample_name": {
|
|
228
237
|
"dtype": "pl.Utf8"
|
|
229
238
|
},
|
|
230
239
|
"sample_path": {
|
|
231
240
|
"dtype": "pl.Utf8"
|
|
232
241
|
},
|
|
233
|
-
"file_source": {
|
|
234
|
-
"dtype": "pl.Utf8"
|
|
235
|
-
},
|
|
236
242
|
"sample_type": {
|
|
237
243
|
"dtype": "pl.Utf8"
|
|
238
244
|
},
|
|
@@ -241,12 +247,6 @@
|
|
|
241
247
|
},
|
|
242
248
|
"size": {
|
|
243
249
|
"dtype": "pl.Int64"
|
|
244
|
-
},
|
|
245
|
-
"ms1": {
|
|
246
|
-
"dtype": "pl.Int64"
|
|
247
|
-
},
|
|
248
|
-
"ms2": {
|
|
249
|
-
"dtype": "pl.Int64"
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
252
|
}
|