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

@@ -222,7 +222,7 @@ def align(self, **kwargs):
222
222
 
223
223
  # iterate through all feature_maps and add the transformed retention times to the features_df
224
224
 
225
- # Build a fast lookup for (sample_uid, feature_uid) to index in features_df
225
+ # Build a fast lookup for (sample_uid, featureUid) to index in features_df
226
226
  feats = self.features_df
227
227
 
228
228
  # Pre-build sample_uid lookup for faster access
@@ -233,7 +233,7 @@ def align(self, **kwargs):
233
233
 
234
234
  # Build the main lookup using feature_uid (not feature_id)
235
235
  if "feature_id" in feats.columns:
236
- # Create lookup mapping (sample_uid, feature_uid) to DataFrame index using Polars
236
+ # Create lookup mapping (sample_uid, feature_id) to DataFrame index using Polars
237
237
  # Since we need a pandas-style index lookup, we'll create a simple dict
238
238
  sample_uids = feats.get_column("sample_uid").to_list()
239
239
 
@@ -289,14 +289,39 @@ def align(self, **kwargs):
289
289
 
290
290
  # Single batch update for all features at once
291
291
  if all_update_idx:
292
- # Update "rt" column for specified indices using Polars
293
- self.features_df = self.features_df.with_columns(
294
- pl.when(pl.int_range(0, self.features_df.height).is_in(all_update_idx))
295
- .then(pl.Series("rt", all_update_rt))
296
- .otherwise(pl.col("rt"))
297
- .alias("rt"),
298
- )
299
- # self.features_df.loc[all_update_idx, "rt_original"] = all_update_rt_original
292
+ # Build a full-length Python list of rt values, update specified indices,
293
+ # then replace the DataFrame column with a Series that has the same length
294
+ try:
295
+ current_rt = self.features_df["rt"].to_list()
296
+ except Exception:
297
+ current_rt = [None] * self.features_df.height
298
+
299
+ # Defensive: ensure list length equals dataframe height
300
+ if len(current_rt) != self.features_df.height:
301
+ current_rt = [None] * self.features_df.height
302
+
303
+ for idx, new_rt in zip(all_update_idx, all_update_rt):
304
+ current_rt[idx] = new_rt
305
+
306
+ new_cols = [pl.Series("rt", current_rt)]
307
+
308
+ # Update rt_original if corresponding updates were collected
309
+ if 'all_update_rt_original' in locals() and all_update_rt_original:
310
+ try:
311
+ current_rt_orig = self.features_df["rt_original"].to_list() if "rt_original" in self.features_df.columns else [None] * self.features_df.height
312
+ except Exception:
313
+ current_rt_orig = [None] * self.features_df.height
314
+
315
+ if len(current_rt_orig) != self.features_df.height:
316
+ current_rt_orig = [None] * self.features_df.height
317
+
318
+ for idx, new_orig in zip(all_update_idx, all_update_rt_original):
319
+ current_rt_orig[idx] = new_orig
320
+
321
+ new_cols.append(pl.Series("rt_original", current_rt_orig))
322
+
323
+ # Replace columns in one call
324
+ self.features_df = self.features_df.with_columns(*new_cols)
300
325
 
301
326
  self.logger.debug("Alignment completed successfully.")
302
327
 
masster/study/study.py CHANGED
@@ -50,6 +50,7 @@ import os
50
50
  import sys
51
51
 
52
52
  import polars as pl
53
+ import numpy as np
53
54
 
54
55
  # Study-specific imports
55
56
  from masster.study.h5 import _load_study5
@@ -66,6 +67,7 @@ from masster.study.helpers import restore_features
66
67
  from masster.study.helpers import restore_chrom
67
68
  from masster.study.helpers import fill_reset
68
69
  from masster.study.helpers import get_chrom
70
+ from masster.study.helpers import get_sample
69
71
  from masster.study.helpers import get_consensus
70
72
  from masster.study.helpers import get_consensus_matches
71
73
  from masster.study.helpers import get_consensus_matrix
@@ -75,6 +77,8 @@ from masster.study.helpers import get_gaps_stats
75
77
  from masster.study.helpers import align_reset
76
78
  from masster.study.helpers import set_folder
77
79
  from masster.study.helpers import set_source
80
+ from masster.study.helpers import name_replace
81
+ from masster.study.helpers import name_reset
78
82
  from masster.study.helpers import features_select
79
83
  from masster.study.helpers import features_filter
80
84
  from masster.study.helpers import features_delete
@@ -92,12 +96,15 @@ from masster.study.load import _load_consensusXML
92
96
  from masster.study.load import load_features
93
97
  from masster.study.load import sanitize
94
98
  from masster.study.plot import plot_alignment
95
- from masster.study.plot import plot_alignment_bokeh
96
- from masster.study.plot import plot_chrom
97
99
  from masster.study.plot import plot_consensus_2d
100
+ from masster.study.plot import plot_samples_2d
98
101
  from masster.study.plot import plot_consensus_stats
102
+ from masster.study.plot import plot_chrom
99
103
  from masster.study.plot import plot_pca
100
- from masster.study.plot import plot_samples_2d
104
+ from masster.study.plot import plot_bpc
105
+ from masster.study.plot import plot_tic
106
+ from masster.study.plot import plot_eic
107
+ from masster.study.plot import plot_rt_correction
101
108
  from masster.study.processing import align
102
109
  from masster.study.processing import merge
103
110
  from masster.study.processing import integrate
@@ -309,6 +316,11 @@ class Study:
309
316
  if auto_load_filename is not None:
310
317
  self.load(filename=auto_load_filename)
311
318
 
319
+ # cache for Sample instances created/loaded by this Study
320
+ self._samples_cache = {}
321
+
322
+
323
+
312
324
  # Attach module functions as class methods
313
325
  load = load
314
326
  save = save
@@ -328,14 +340,18 @@ class Study:
328
340
  get_parameters_property = get_parameters_property
329
341
  set_parameters_property = set_parameters_property
330
342
  plot_alignment = plot_alignment
331
- plot_alignment_bokeh = plot_alignment_bokeh
332
343
  plot_chrom = plot_chrom
333
344
  plot_consensus_2d = plot_consensus_2d
334
345
  plot_consensus_stats = plot_consensus_stats
335
346
  plot_pca = plot_pca
336
347
  plot_samples_2d = plot_samples_2d
348
+ plot_bpc = plot_bpc
349
+ plot_rt_correction = plot_rt_correction
350
+ plot_tic = plot_tic
351
+ plot_eic = plot_eic
337
352
  get_consensus = get_consensus
338
353
  get_chrom = get_chrom
354
+ get_sample = get_sample
339
355
  get_consensus_matches = get_consensus_matches
340
356
  compress = compress
341
357
  compress_features = compress_features
@@ -346,6 +362,8 @@ class Study:
346
362
  fill_reset = fill_reset
347
363
  align_reset = align_reset
348
364
  set_source = set_source
365
+ name_replace = name_replace
366
+ name_reset = name_reset
349
367
  features_select = features_select
350
368
  features_filter = features_filter
351
369
  features_delete = features_delete
@@ -618,6 +636,18 @@ class Study:
618
636
  else:
619
637
  consensus_with_ms2_count = 0
620
638
 
639
+ if not self.consensus_df.is_empty():
640
+ # Compute RT spread using only consensus rows with number_samples >= half the number of samples
641
+ threshold = len(self.samples_df) / 2 if not self.samples_df.is_empty() else 0
642
+ filtered = self.consensus_df.filter(pl.col("number_samples") >= threshold)
643
+ if filtered.is_empty():
644
+ rt_spread = -1.0
645
+ else:
646
+ rt_spread_row = filtered.select((pl.col("rt_max") - pl.col("rt_min")).mean()).row(0)
647
+ rt_spread = float(rt_spread_row[0]) if rt_spread_row and rt_spread_row[0] is not None else 0.0
648
+ else:
649
+ rt_spread = -1.0
650
+
621
651
  # Calculate percentage of consensus features with MS2
622
652
  consensus_with_ms2_percentage = (
623
653
  (consensus_with_ms2_count / consensus_df_len * 100) if consensus_df_len > 0 else 0
@@ -643,6 +673,7 @@ class Study:
643
673
  f"- in consensus: {ratio_in_consensus_to_total:.0f}%\n"
644
674
  f"- not in consensus: {ratio_not_in_consensus_to_total:.0f}%\n"
645
675
  f"Consensus: {consensus_df_len}\n"
676
+ f"- RT spread: {rt_spread:.3f}s\n"
646
677
  f"- Min samples count: {min_samples:.0f}\n"
647
678
  f"- Mean samples count: {mean_samples:.0f}\n"
648
679
  f"- Max samples count: {max_samples:.0f}\n"
@@ -654,6 +685,31 @@ class Study:
654
685
 
655
686
  print(summary)
656
687
 
688
+ def _ensure_features_df_schema_order(self):
689
+ """
690
+ Ensure features_df columns are ordered according to study5_schema.json.
691
+
692
+ This method should be called after operations that might scramble the column order.
693
+ """
694
+ if self.features_df is None or self.features_df.is_empty():
695
+ return
696
+
697
+ try:
698
+ import os
699
+ import json
700
+ from masster.study.h5 import _reorder_columns_by_schema
701
+
702
+ # Load schema
703
+ schema_path = os.path.join(os.path.dirname(__file__), "study5_schema.json")
704
+ with open(schema_path, 'r') as f:
705
+ schema = json.load(f)
706
+
707
+ # Reorder columns to match schema
708
+ self.features_df = _reorder_columns_by_schema(self.features_df, schema, 'features_df')
709
+
710
+ except Exception as e:
711
+ self.logger.warning(f"Failed to reorder features_df columns: {e}")
712
+
657
713
 
658
714
  if __name__ == "__main__":
659
715
  # This block is executed when the script is run directly
@@ -1,43 +1,43 @@
1
1
  {
2
2
  "consensus_df": {
3
3
  "columns": {
4
- "adducts": {
5
- "dtype": "pl.Object"
4
+ "consensus_uid": {
5
+ "dtype": "pl.Int64"
6
6
  },
7
- "bl": {
8
- "dtype": "pl.Float64"
7
+ "consensus_id": {
8
+ "dtype": "pl.Utf8"
9
9
  },
10
- "charge_mean": {
10
+ "quality": {
11
11
  "dtype": "pl.Float64"
12
12
  },
13
- "chrom_coherence_mean": {
14
- "dtype": "pl.Float64"
13
+ "number_samples": {
14
+ "dtype": "pl.Int64"
15
15
  },
16
- "chrom_height_scaled_mean": {
16
+ "rt": {
17
17
  "dtype": "pl.Float64"
18
18
  },
19
- "chrom_prominence_mean": {
19
+ "mz": {
20
20
  "dtype": "pl.Float64"
21
21
  },
22
- "chrom_prominence_scaled_mean": {
22
+ "rt_min": {
23
23
  "dtype": "pl.Float64"
24
24
  },
25
- "consensus_id": {
26
- "dtype": "pl.Utf8"
25
+ "rt_max": {
26
+ "dtype": "pl.Float64"
27
27
  },
28
- "consensus_uid": {
29
- "dtype": "pl.Int64"
28
+ "rt_mean": {
29
+ "dtype": "pl.Float64"
30
30
  },
31
- "inty_mean": {
31
+ "rt_start_mean": {
32
32
  "dtype": "pl.Float64"
33
33
  },
34
- "iso_mean": {
34
+ "rt_end_mean": {
35
35
  "dtype": "pl.Float64"
36
36
  },
37
- "mz": {
37
+ "rt_delta_mean": {
38
38
  "dtype": "pl.Float64"
39
39
  },
40
- "mz_end_mean": {
40
+ "mz_min": {
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
- "mz_min": {
50
- "dtype": "pl.Float64"
51
- },
52
49
  "mz_start_mean": {
53
50
  "dtype": "pl.Float64"
54
51
  },
55
- "number_ms2": {
56
- "dtype": "pl.Int64"
57
- },
58
- "number_samples": {
59
- "dtype": "pl.Int64"
52
+ "mz_end_mean": {
53
+ "dtype": "pl.Float64"
60
54
  },
61
- "quality": {
55
+ "inty_mean": {
62
56
  "dtype": "pl.Float64"
63
57
  },
64
- "rt": {
58
+ "bl": {
65
59
  "dtype": "pl.Float64"
66
60
  },
67
- "rt_delta_mean": {
61
+ "chrom_coherence_mean": {
68
62
  "dtype": "pl.Float64"
69
63
  },
70
- "rt_end_mean": {
64
+ "chrom_prominence_mean": {
71
65
  "dtype": "pl.Float64"
72
66
  },
73
- "rt_max": {
67
+ "chrom_prominence_scaled_mean": {
74
68
  "dtype": "pl.Float64"
75
69
  },
76
- "rt_mean": {
70
+ "chrom_height_scaled_mean": {
77
71
  "dtype": "pl.Float64"
78
72
  },
79
- "rt_min": {
73
+ "iso_mean": {
80
74
  "dtype": "pl.Float64"
81
75
  },
82
- "rt_start_mean": {
76
+ "charge_mean": {
83
77
  "dtype": "pl.Float64"
78
+ },
79
+ "number_ms2": {
80
+ "dtype": "pl.Int64"
81
+ },
82
+ "adducts": {
83
+ "dtype": "pl.Object"
84
84
  }
85
85
  }
86
86
  },
@@ -133,105 +133,102 @@
133
133
  },
134
134
  "features_df": {
135
135
  "columns": {
136
- "adduct": {
137
- "dtype": "pl.Utf8"
138
- },
139
- "adduct_group": {
136
+ "feature_uid": {
140
137
  "dtype": "pl.Int64"
141
138
  },
142
- "adduct_mass": {
143
- "dtype": "pl.Float64"
139
+ "feature_id": {
140
+ "dtype": "pl.Utf8"
144
141
  },
145
- "charge": {
142
+ "sample_uid": {
146
143
  "dtype": "pl.Int32"
147
144
  },
148
- "chrom": {
149
- "dtype": "pl.Object"
150
- },
151
- "chrom_area": {
145
+ "mz": {
152
146
  "dtype": "pl.Float64"
153
147
  },
154
- "chrom_coherence": {
148
+ "rt": {
155
149
  "dtype": "pl.Float64"
156
150
  },
157
- "chrom_height_scaled": {
151
+ "rt_original": {
158
152
  "dtype": "pl.Float64"
159
153
  },
160
- "chrom_prominence": {
154
+ "rt_start": {
161
155
  "dtype": "pl.Float64"
162
156
  },
163
- "chrom_prominence_scaled": {
157
+ "rt_end": {
164
158
  "dtype": "pl.Float64"
165
159
  },
166
- "feature_id": {
167
- "dtype": "pl.Utf8"
160
+ "rt_delta": {
161
+ "dtype": "pl.Float64"
168
162
  },
169
- "feature_uid": {
170
- "dtype": "pl.Int64"
163
+ "mz_start": {
164
+ "dtype": "pl.Float64"
171
165
  },
172
- "filled": {
173
- "dtype": "pl.Boolean"
166
+ "mz_end": {
167
+ "dtype": "pl.Float64"
174
168
  },
175
169
  "inty": {
176
170
  "dtype": "pl.Float64"
177
171
  },
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
- "ms2_scans": {
185
- "dtype": "pl.Object"
186
- },
187
- "ms2_specs": {
188
- "dtype": "pl.Object"
184
+ "adduct": {
185
+ "dtype": "pl.Utf8"
189
186
  },
190
- "mz": {
187
+ "adduct_mass": {
191
188
  "dtype": "pl.Float64"
192
189
  },
193
- "mz_end": {
194
- "dtype": "pl.Float64"
190
+ "adduct_group": {
191
+ "dtype": "pl.Int64"
195
192
  },
196
- "mz_start": {
197
- "dtype": "pl.Float64"
193
+ "chrom": {
194
+ "dtype": "pl.Object"
198
195
  },
199
- "quality": {
200
- "dtype": "pl.Float64"
196
+ "filled": {
197
+ "dtype": "pl.Boolean"
201
198
  },
202
- "rt": {
199
+ "chrom_area": {
203
200
  "dtype": "pl.Float64"
204
201
  },
205
- "rt_delta": {
202
+ "chrom_coherence": {
206
203
  "dtype": "pl.Float64"
207
204
  },
208
- "rt_end": {
205
+ "chrom_prominence": {
209
206
  "dtype": "pl.Float64"
210
207
  },
211
- "rt_original": {
208
+ "chrom_prominence_scaled": {
212
209
  "dtype": "pl.Float64"
213
210
  },
214
- "rt_start": {
211
+ "chrom_height_scaled": {
215
212
  "dtype": "pl.Float64"
216
213
  },
217
- "sample_uid": {
218
- "dtype": "pl.Int32"
214
+ "ms2_scans": {
215
+ "dtype": "pl.Object"
216
+ },
217
+ "ms2_specs": {
218
+ "dtype": "pl.Object"
219
219
  }
220
220
  }
221
221
  },
222
222
  "samples_df": {
223
223
  "columns": {
224
- "file_source": {
225
- "dtype": "pl.Utf8"
224
+ "sample_uid": {
225
+ "dtype": "pl.Int64"
226
226
  },
227
227
  "map_id": {
228
228
  "dtype": "pl.Utf8"
229
229
  },
230
- "ms1": {
231
- "dtype": "pl.Int64"
232
- },
233
- "ms2": {
234
- "dtype": "pl.Int64"
230
+ "file_source": {
231
+ "dtype": "pl.Utf8"
235
232
  },
236
233
  "sample_name": {
237
234
  "dtype": "pl.Utf8"
@@ -242,10 +239,13 @@
242
239
  "sample_type": {
243
240
  "dtype": "pl.Utf8"
244
241
  },
245
- "sample_uid": {
242
+ "size": {
246
243
  "dtype": "pl.Int64"
247
244
  },
248
- "size": {
245
+ "ms1": {
246
+ "dtype": "pl.Int64"
247
+ },
248
+ "ms2": {
249
249
  "dtype": "pl.Int64"
250
250
  }
251
251
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: masster
3
- Version: 0.3.11
3
+ Version: 0.3.13
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
@@ -14,15 +14,15 @@ masster/docs/SCX_API_Documentation.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
14
14
  masster/docs/SCX_DLL_Analysis.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  masster/sample/__init__.py,sha256=HL0m1ept0PMAYUCQtDDnkdOS12IFl6oLAq4TZQz83uY,170
16
16
  masster/sample/h5.py,sha256=IdfbdkDgKcij-jMQTxnjW-gsBhb6vwi8w1XXL795yEs,63793
17
- masster/sample/helpers.py,sha256=mzBd6q4myzI2I1yTWkXZrOKzR0f0Cw7-bqPixBiFhm0,34362
17
+ masster/sample/helpers.py,sha256=U2VyboRdTsQbOefCy7VXh6PlSQtEsR6BK5QF2jGUd94,36208
18
18
  masster/sample/lib.py,sha256=l5YdU9TxEWJI0kJxXxrRCxgDDwbzO5zBf1_Qi_HY87w,33556
19
19
  masster/sample/load.py,sha256=5Ig94gEWBfdxR86yNwaPj9mdNvPI1nVCp0LXcFJt05U,47577
20
20
  masster/sample/parameters.py,sha256=Gg2KcuNbV_wZ_Wwv93QlM5J19ji0oSIvZLPV1NoBmq0,4456
21
- masster/sample/plot.py,sha256=q3YlOrGMrYFo5wUJhxh7JXEaAtK9cKJsmzu_rCGrsq8,74846
21
+ masster/sample/plot.py,sha256=C8Y2DLLHw3Bo_U0MPhKMI3AKOkqj0zMUQxasRVWp26U,77964
22
22
  masster/sample/processing.py,sha256=-H93MEUysA-B9PB4nU31WFjtaU_flqbu2gY35ce4vVs,57827
23
23
  masster/sample/quant.py,sha256=tHNjvUFTdehKR31BXBZnVsBxMD9XJHgaltITOjr71uE,7562
24
- masster/sample/sample.py,sha256=TMz6dS79ygYDiwrZ22BC_VOvwJ4MUW2WhzFISgDuQvY,16724
25
- masster/sample/sample5_schema.json,sha256=8mXO_Qt2UKQrP_VfR05KjojDcTx1tBFbRQoMXPBWJlg,3586
24
+ masster/sample/sample.py,sha256=QxKjXPO5lWRrIq5eDsYzNQPjp0zI_vuPdPlRQe1y3uI,16925
25
+ masster/sample/sample5_schema.json,sha256=4g_uBMODLvxnhZU6iCK61W3fbaT6sTgOvBhEFc3U1nI,3772
26
26
  masster/sample/save.py,sha256=kQULZkuhx2ED8jMlQsi5yK98dRKlQKvQf5uJDvI01ZA,31896
27
27
  masster/sample/sciex.py,sha256=vnbxsq_qnAQVuzcpziP1o3IC4kM5amGBcPmC2TAuDLw,46319
28
28
  masster/sample/defaults/__init__.py,sha256=A09AOP44cxD_oYohyt7XFUho0zndRcrzVD4DUaGnKH4,447
@@ -34,17 +34,17 @@ masster/sample/defaults/sample_def.py,sha256=keoXyMyrm_iLgbYqfIbqCpJ3XHBVlNwCNmb
34
34
  masster/study/__init__.py,sha256=Zspv6U8jFqjkHGYdNdDy1rfUnCSolCzUdgSSg98PRgE,166
35
35
  masster/study/export.py,sha256=9Bhz8wpO3ZHdwV0iWSX0E38GS3UfqfAFlW9VN8ht2-Y,28845
36
36
  masster/study/h5.py,sha256=UOc4tbeWr8Xa_5Aescz7rMMnkzpu8PSTsOAnTfPv0-E,67109
37
- masster/study/helpers.py,sha256=Y4mElxcVIYUUAILYEQVLvqoxp3m730xWOvI2jRFEkoY,74620
37
+ masster/study/helpers.py,sha256=qf5_4DVW5X3MI3TgoZes5bNzuIt-r_esSeJoNOO8a6A,92540
38
38
  masster/study/helpers_optimized.py,sha256=sd87kNPIEPdMijekXzZWSyeZzJ_DTAW8HQjAry-jVyY,13922
39
- masster/study/load.py,sha256=E32d4l9bARlys_0haKjsH6aIAVTzX56gwpL5j1QTjXM,48195
39
+ masster/study/load.py,sha256=bpiyMQU6rtiz4d_EdsI4w1p_T2l8YkRcDmdBUeI3pEk,49571
40
40
  masster/study/parameters.py,sha256=0elaF7YspTsB7qyajWAbRNL2VfKlGz5GJLifmO8IGkk,3276
41
- masster/study/plot.py,sha256=ISEaaStj5HDsAXLvq9Fo1kBzPE8IUehI_gjLVVchSl8,40927
42
- masster/study/processing.py,sha256=fS2YPil2brI-ZHRFkJ0XWAkTu3cWP_-L1tUv84g5QbY,51173
41
+ masster/study/plot.py,sha256=Vvbh19f94X8D4aX5mLVyPso-iC0ZpsyQCe3NTib34VU,68389
42
+ masster/study/processing.py,sha256=EZlzcMmMWcCW0dMdC3tc4r8ii6kncWQC2_Lc_ybfLFc,52286
43
43
  masster/study/save.py,sha256=YjFEiuiB4OFLVvW_AX4-kgnsbjCWrYZeqF85VNEtbdw,6560
44
- masster/study/study.py,sha256=5ewkqWZ1zvamqeytPn45yS-7NPhIxxzDvDKwTYnEM9k,29055
45
- masster/study/study5_schema.json,sha256=wj1PmXX5XY3P2xbN77P-IvjbZW4gtZ9_TtVyjMtfOPQ,5103
44
+ masster/study/study.py,sha256=ZeCwKgZfAIrvEywxn7HbtBFssWCYxgkRnsNzgmfApyo,31343
45
+ masster/study/study5_schema.json,sha256=Grm2vfi2NnfNfcqKndz3IX9JNyhgwh92T8x-IofLay4,5103
46
46
  masster/study/defaults/__init__.py,sha256=m3Z5KXGqsTdh7GjYzZoENERt39yRg0ceVRV1DeCt1P0,610
47
- masster/study/defaults/align_def.py,sha256=hAeAOcXenTmLyVbebHgj2yTz4-099LRsEjsXeXKTOHM,19847
47
+ masster/study/defaults/align_def.py,sha256=QSJXfe5kAtYp_IN8LUuXjq61IkxT74ml84k5kmmRjqM,19846
48
48
  masster/study/defaults/export_def.py,sha256=eXl3h4aoLX88XkHTpqahLd-QZ2gjUqrmjq8IJULXeWo,1203
49
49
  masster/study/defaults/fill_chrom_def.py,sha256=hB6-tyC9bhx-IpGj2HC8FinQdW4VLYj_pn5t1rlj-Ew,8887
50
50
  masster/study/defaults/fill_def.py,sha256=5B7-iNCngdwHPbf0146LzrqxKCi7_g5OC1XtkxvckeQ,8869
@@ -54,8 +54,8 @@ masster/study/defaults/integrate_chrom_def.py,sha256=0MNIWGTjty-Zu-NTQsIweuj3UVq
54
54
  masster/study/defaults/integrate_def.py,sha256=Vf4SAzdBfnsSZ3IRaF0qZvWu3gMDPHdgPfMYoPKeWv8,7246
55
55
  masster/study/defaults/merge_def.py,sha256=EBsKE3hsAkTEzN9dpdRD5W3_suTKy_WZ_96rwS0uBuE,8572
56
56
  masster/study/defaults/study_def.py,sha256=d8mQWIpvWEWI8grPTAcQa4jKTG7QrM98RRgHZVoh134,9519
57
- masster-0.3.11.dist-info/METADATA,sha256=GfcJZjMBroCMpjwC7vIpNACaJ9lMyY__ZxW-Hmshlyg,44293
58
- masster-0.3.11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
59
- masster-0.3.11.dist-info/entry_points.txt,sha256=ZHguQ_vPmdbpqq2uGtmEOLJfgP-DQ1T0c07Lxh30wc8,58
60
- masster-0.3.11.dist-info/licenses/LICENSE,sha256=bx5iLIKjgAdYQ7sISn7DsfHRKkoCUm1154sJJKhgqnU,35184
61
- masster-0.3.11.dist-info/RECORD,,
57
+ masster-0.3.13.dist-info/METADATA,sha256=3UgZrlVxDb1GIwA_8y6-LW0407iuS6s9RNBpOpMmijE,44293
58
+ masster-0.3.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
59
+ masster-0.3.13.dist-info/entry_points.txt,sha256=ZHguQ_vPmdbpqq2uGtmEOLJfgP-DQ1T0c07Lxh30wc8,58
60
+ masster-0.3.13.dist-info/licenses/LICENSE,sha256=bx5iLIKjgAdYQ7sISn7DsfHRKkoCUm1154sJJKhgqnU,35184
61
+ masster-0.3.13.dist-info/RECORD,,