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

@@ -33,6 +33,7 @@ def align(self, **kwargs):
33
33
  - algo (str): Alignment algorithm ('pc' for PoseClustering, 'kd' for KD).
34
34
 
35
35
  KD algorithm specific parameters:
36
+ - min_samples (int): Minimum number of samples required for KD alignment.
36
37
  - nr_partitions (int): Number of partitions in m/z dimension.
37
38
  - warp_enabled (bool): Enable non-linear retention time transformation.
38
39
  - warp_rt_tol (float): RT tolerance for the LOWESS fit.
@@ -87,131 +88,17 @@ def align(self, **kwargs):
87
88
 
88
89
  fmaps = self.features_maps
89
90
 
90
- # Initialize OpenMS parameters
91
- params_oms = oms.Param()
92
- # Choose alignment algorithm based on parameter
91
+ # Choose alignment algorithm
93
92
  algo = params.get("algo").lower()
94
-
95
- # Set common parameters for both algorithms
96
- if algo == "pc":
97
- # Parameters specific to PoseClustering
98
- params_oms.setValue("pairfinder:distance_intensity:log_transform", "disabled")
99
- params_oms.setValue("pairfinder:ignore_charge", "true")
100
- params_oms.setValue("max_num_peaks_considered", 1000)
101
- params_oms.setValue("pairfinder:distance_RT:max_difference", params.get("rt_max_diff"))
102
- params_oms.setValue("pairfinder:distance_MZ:max_difference", params.get("mz_max_diff"))
103
- params_oms.setValue("superimposer:rt_pair_distance_fraction", params.get("rt_pair_distance_frac"))
104
- params_oms.setValue("superimposer:mz_pair_max_distance", params.get("mz_pair_max_distance"))
105
- params_oms.setValue("superimposer:num_used_points", params.get("num_used_points"))
106
- params_oms.setValue("pairfinder:distance_MZ:exponent", 3.0)
107
- params_oms.setValue("pairfinder:distance_RT:exponent", 2.0)
108
-
109
- """
110
- {b'max_num_peaks_considered': 1000,
111
- b'superimposer:mz_pair_max_distance': 0.5,
112
- b'superimposer:rt_pair_distance_fraction': 0.1,
113
- b'superimposer:num_used_points': 2000,
114
- b'superimposer:scaling_bucket_size': 0.005,
115
- b'superimposer:shift_bucket_size': 3.0,
116
- b'superimposer:max_shift': 1000.0,
117
- b'superimposer:max_scaling': 2.0,
118
- b'superimposer:dump_buckets': '',
119
- b'superimposer:dump_pairs': '',
120
- b'pairfinder:second_nearest_gap': 2.0,
121
- b'pairfinder:use_identifications': 'false',
122
- b'pairfinder:ignore_charge': 'false',
123
- b'pairfinder:ignore_adduct': 'true',
124
- b'pairfinder:distance_RT:max_difference': 100.0,
125
- b'pairfinder:distance_RT:exponent': 1.0,
126
- b'pairfinder:distance_RT:weight': 1.0,
127
- b'pairfinder:distance_MZ:max_difference': 0.3,
128
- b'pairfinder:distance_MZ:unit': 'Da',
129
- b'pairfinder:distance_MZ:exponent': 2.0,
130
- b'pairfinder:distance_MZ:weight': 1.0,
131
- b'pairfinder:distance_intensity:exponent': 1.0,
132
- b'pairfinder:distance_intensity:weight': 0.0,
133
- b'pairfinder:distance_intensity:log_transform': 'disabled'}
134
- """
135
- elif algo == "kd":
136
- # Parameters specific to KD algorithm
137
- params_oms.setValue("mz_unit", "Da")
138
- params_oms.setValue("nr_partitions", params.get("nr_partitions"))
139
-
140
- # Warp parameters for non-linear RT transformation
141
- params_oms.setValue("warp:enabled", "true" if params.get("warp_enabled") else "false")
142
- params_oms.setValue("warp:rt_tol", params.get("warp_rt_tol"))
143
- params_oms.setValue("warp:mz_tol", params.get("warp_mz_tol"))
144
- params_oms.setValue("warp:max_pairwise_log_fc", params.get("warp_max_pairwise_log_fc"))
145
- params_oms.setValue("warp:min_rel_cc_size", params.get("warp_min_rel_cc_size"))
146
- params_oms.setValue("warp:max_nr_conflicts", params.get("warp_max_nr_conflicts"))
147
-
148
- # Link parameters
149
- params_oms.setValue("link:rt_tol", params.get("link_rt_tol"))
150
- params_oms.setValue("link:mz_tol", params.get("link_mz_tol"))
151
- params_oms.setValue("link:charge_merging", params.get("link_charge_merging"))
152
- params_oms.setValue("link:adduct_merging", params.get("link_adduct_merging"))
153
-
154
- # Distance parameters
155
- params_oms.setValue("distance_RT:exponent", params.get("distance_RT_exponent"))
156
- params_oms.setValue("distance_RT:weight", params.get("distance_RT_weight"))
157
- params_oms.setValue("distance_MZ:exponent", params.get("distance_MZ_exponent"))
158
- params_oms.setValue("distance_MZ:weight", params.get("distance_MZ_weight"))
159
- params_oms.setValue("distance_intensity:exponent", params.get("distance_intensity_exponent"))
160
- params_oms.setValue("distance_intensity:weight", params.get("distance_intensity_weight"))
161
- params_oms.setValue("distance_intensity:log_transform", params.get("distance_intensity_log_transform"))
162
-
163
- # LOWESS parameters
164
- params_oms.setValue("LOWESS:span", params.get("LOWESS_span"))
165
- params_oms.setValue("LOWESS:num_iterations", params.get("LOWESS_num_iterations"))
166
- params_oms.setValue("LOWESS:delta", params.get("LOWESS_delta"))
167
- params_oms.setValue("LOWESS:interpolation_type", params.get("LOWESS_interpolation_type"))
168
- params_oms.setValue("LOWESS:extrapolation_type", params.get("LOWESS_extrapolation_type"))
169
-
93
+
170
94
  if algo == "pc":
171
- aligner = oms.MapAlignmentAlgorithmPoseClustering()
172
- self.logger.info("Starting alignment with PoseClustering")
173
- # set ref_index to feature map index with largest number of features
174
- ref_index = [i[0] for i in sorted(enumerate([fm.size() for fm in fmaps]), key=lambda x: x[1])][-1]
175
- self.logger.debug(
176
- f"Reference map is {self.samples_df.row(ref_index, named=True)['sample_name']}",
177
- )
178
- aligner.setParameters(params_oms)
179
- aligner.setReference(fmaps[ref_index])
180
- self.logger.debug(f"Parameters for alignment: {params}")
181
- # perform alignment and transformation of feature maps to the reference map (exclude reference map)
182
- tdqm_disable = self.log_level not in ["TRACE", "DEBUG", "INFO"]
183
- for index, fm in tqdm(
184
- list(enumerate(fmaps)),
185
- total=len(fmaps),
186
- desc=f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]} | INFO | {self.log_label}Align feature maps",
187
- disable=tdqm_disable,
188
- ):
189
- if index == ref_index:
190
- continue
191
- if params.get("skip_blanks") and self.samples_df.row(index, named=True)["sample_type"] == "blank":
192
- continue
193
- trafo = oms.TransformationDescription()
194
- aligner.align(fm, trafo)
195
- transformer = oms.MapAlignmentTransformer()
196
- transformer.transformRetentionTimes(fm, trafo, True)
197
-
198
- self.alignment_ref_index = ref_index
199
-
95
+ _align_pose_clustering(self, fmaps, params)
96
+
200
97
  elif algo == "kd":
201
- # KD algorithm requires num_maps and Param parameters
202
- num_maps = len(fmaps)
203
- aligner = oms.MapAlignmentAlgorithmKD(3, params_oms)
204
- self.logger.info(f"Starting alignment with KD algorithm using {num_maps} maps")
205
-
206
- kdtree = oms.KDTreeFeatureMaps()
207
- kdtree.addMaps(fmaps) # Add all feature maps to the KDTree
208
- # kdtree.optimizeTree()
209
- aligner.addRTFitData(kdtree)
210
- aligner.fitLOWESS()
211
- aligner.transform(kdtree)
212
-
98
+ _align_kd_algorithm(self, fmaps, params)
213
99
  else:
214
100
  self.logger.error(f"Unknown alignment algorithm '{algo}'")
101
+ self.logger.error(f"Unknown alignment algorithm '{algo}'")
215
102
 
216
103
  # check if rt_original exists in features_df, if not, add it after rt
217
104
  if "rt_original" not in self.features_df.columns:
@@ -1163,3 +1050,145 @@ def _find_closest_valley(chrom, rt, dir="left", threshold=0.9):
1163
1050
  else:
1164
1051
  break
1165
1052
  return chrom.rt[idx]
1053
+
1054
+
1055
+ def _align_pose_clustering(study_obj, fmaps, params):
1056
+ """Perform alignment using PoseClustering algorithm."""
1057
+ import pyopenms as oms
1058
+ from tqdm import tqdm
1059
+ from datetime import datetime
1060
+
1061
+ # Create PC-specific OpenMS parameters
1062
+ params_oms = oms.Param()
1063
+ params_oms.setValue("pairfinder:distance_intensity:log_transform", "disabled")
1064
+ params_oms.setValue("pairfinder:ignore_charge", "true")
1065
+ params_oms.setValue("max_num_peaks_considered", 1000)
1066
+ params_oms.setValue("pairfinder:distance_RT:max_difference", params.get("rt_max_diff"))
1067
+ params_oms.setValue("pairfinder:distance_MZ:max_difference", params.get("mz_max_diff"))
1068
+ params_oms.setValue("superimposer:rt_pair_distance_fraction", params.get("rt_pair_distance_frac"))
1069
+ params_oms.setValue("superimposer:mz_pair_max_distance", params.get("mz_pair_max_distance"))
1070
+ params_oms.setValue("superimposer:num_used_points", params.get("num_used_points"))
1071
+ params_oms.setValue("pairfinder:distance_MZ:exponent", 3.0)
1072
+ params_oms.setValue("pairfinder:distance_RT:exponent", 2.0)
1073
+
1074
+ aligner = oms.MapAlignmentAlgorithmPoseClustering()
1075
+ study_obj.logger.info("Starting alignment with PoseClustering")
1076
+
1077
+ # Set ref_index to feature map index with largest number of features
1078
+ ref_index = [i[0] for i in sorted(enumerate([fm.size() for fm in fmaps]), key=lambda x: x[1])][-1]
1079
+ study_obj.logger.debug(
1080
+ f"Reference map is {study_obj.samples_df.row(ref_index, named=True)['sample_name']}",
1081
+ )
1082
+
1083
+ aligner.setParameters(params_oms)
1084
+ aligner.setReference(fmaps[ref_index])
1085
+ study_obj.logger.debug(f"Parameters for alignment: {params}")
1086
+
1087
+ # Perform alignment and transformation of feature maps to the reference map (exclude reference map)
1088
+ tdqm_disable = study_obj.log_level not in ["TRACE", "DEBUG", "INFO"]
1089
+ for index, fm in tqdm(
1090
+ list(enumerate(fmaps)),
1091
+ total=len(fmaps),
1092
+ desc=f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]} | INFO | {study_obj.log_label}Align feature maps",
1093
+ disable=tdqm_disable,
1094
+ ):
1095
+ if index == ref_index:
1096
+ continue
1097
+ if params.get("skip_blanks") and study_obj.samples_df.row(index, named=True)["sample_type"] == "blank":
1098
+ continue
1099
+ trafo = oms.TransformationDescription()
1100
+ aligner.align(fm, trafo)
1101
+ transformer = oms.MapAlignmentTransformer()
1102
+ transformer.transformRetentionTimes(fm, trafo, True)
1103
+
1104
+ study_obj.alignment_ref_index = ref_index
1105
+
1106
+
1107
+ def _align_kd_algorithm(study_obj, fmaps, params):
1108
+ """Perform alignment using KD algorithm."""
1109
+ import pyopenms as oms
1110
+
1111
+ num_maps = len(fmaps)
1112
+ study_obj.logger.info(f"Starting alignment with KD algorithm using {num_maps} maps")
1113
+
1114
+ try:
1115
+ # Use the EXACT approach from test_oms.py that works
1116
+ # First parameter is DIMENSIONS (3), not min_samples!
1117
+ study_obj.logger.debug("Creating MapAlignmentAlgorithmKD with 3 dimensions and empty parameters...")
1118
+ empty_params = oms.Param() # Empty params - this is what worked in test_oms.py!
1119
+ aligner = oms.MapAlignmentAlgorithmKD(3, empty_params) # 3 = dimensions, not min_samples
1120
+ study_obj.logger.debug("Created MapAlignmentAlgorithmKD successfully")
1121
+
1122
+ # Create KD-tree structure
1123
+ kdtree = oms.KDTreeFeatureMaps()
1124
+
1125
+ # Set all required warping parameters based on OpenMS requirements
1126
+ kd_params = oms.Param()
1127
+ # Core warp parameters that OpenMS expects
1128
+ kd_params.setValue(b"warp:min_rel_cc_size", 0.2, b"Minimum relative connected component size")
1129
+ kd_params.setValue(b"warp:max_ratio_small_big", 0.5, b"Maximum ratio of small to big connected component")
1130
+ kd_params.setValue(b"warp:min_score", 0.3, b"Minimum score for warping")
1131
+ kd_params.setValue(b"warp:rt_tol", 5.0, b"RT tolerance for feature matching")
1132
+ kd_params.setValue(b"warp:mz_tol", 0.015, b"m/z tolerance for feature matching")
1133
+ # Additional potentially required parameters
1134
+ kd_params.setValue(b"warp:max_shift", 30.0, b"Maximum RT shift allowed")
1135
+ kd_params.setValue(b"warp:bins", 100, b"Number of bins for warping")
1136
+ kdtree.setParameters(kd_params)
1137
+
1138
+ # Add all feature maps to KD-tree (NO limiting - this worked with 38k features!)
1139
+ study_obj.logger.debug("Adding maps to KD-tree structure...")
1140
+ kdtree.addMaps(fmaps)
1141
+ study_obj.logger.debug("Successfully added maps to KD-tree")
1142
+
1143
+ # Add RT fitting data (this is where the magic happens)
1144
+ study_obj.logger.debug("Adding RT fitting data to aligner...")
1145
+ aligner.addRTFitData(kdtree)
1146
+ study_obj.logger.debug("Successfully added RT fitting data")
1147
+
1148
+ # Perform LOWESS fitting
1149
+ study_obj.logger.debug("Performing LOWESS fitting...")
1150
+ aligner.fitLOWESS()
1151
+ study_obj.logger.debug("Successfully completed LOWESS fitting")
1152
+
1153
+ # Apply transformations to feature maps
1154
+ study_obj.logger.debug("Applying transformations to feature maps...")
1155
+ for i, fmap in enumerate(fmaps):
1156
+ trafo = oms.TransformationDescription()
1157
+ aligner.getTransformation(i, trafo)
1158
+ oms.MapAlignmentTransformer.transformRetentionTimes(fmap, trafo, True)
1159
+
1160
+ study_obj.logger.info("KD alignment completed successfully")
1161
+
1162
+ except Exception as e:
1163
+ study_obj.logger.error(f"KD alignment failed with error: {e}")
1164
+ study_obj.logger.info("Falling back to PoseClustering alignment...")
1165
+
1166
+ # Fallback to pose clustering with basic parameters
1167
+ _align_pose_clustering_fallback(study_obj, fmaps, params)
1168
+
1169
+
1170
+ def _align_pose_clustering_fallback(study_obj, fmaps, params):
1171
+ """Fallback PoseClustering alignment with minimal parameters."""
1172
+ import pyopenms as oms
1173
+
1174
+ aligner = oms.MapAlignmentAlgorithmPoseClustering()
1175
+ ref_index = [i[0] for i in sorted(enumerate([fm.size() for fm in fmaps]), key=lambda x: x[1])][-1]
1176
+
1177
+ # Set up basic parameters for pose clustering
1178
+ pc_params = oms.Param()
1179
+ pc_params.setValue("max_num_peaks_considered", 1000)
1180
+ pc_params.setValue("pairfinder:distance_RT:max_difference", params.get("rt_max_diff"))
1181
+ pc_params.setValue("pairfinder:distance_MZ:max_difference", params.get("mz_max_diff"))
1182
+
1183
+ aligner.setParameters(pc_params)
1184
+ aligner.setReference(fmaps[ref_index])
1185
+
1186
+ for index, fm in enumerate(fmaps):
1187
+ if index == ref_index:
1188
+ continue
1189
+ trafo = oms.TransformationDescription()
1190
+ aligner.align(fm, trafo)
1191
+ transformer = oms.MapAlignmentTransformer()
1192
+ transformer.transformRetentionTimes(fm, trafo, True)
1193
+
1194
+ study_obj.alignment_ref_index = ref_index
masster/study/study.py CHANGED
@@ -93,6 +93,10 @@ from masster.study.helpers import consensus_delete
93
93
  from masster.study.helpers import migrate_map_id_to_index
94
94
  from masster.study.load import add
95
95
  from masster.study.load import add_sample
96
+ from masster.study.load import _add_samples_batch
97
+ from masster.study.load import _add_sample_optimized
98
+ from masster.study.load import _add_sample_standard
99
+ from masster.study.load import _sample_color_reset_optimized
96
100
  from masster.study.load import fill_single
97
101
  from masster.study.load import fill
98
102
  from masster.study.load import _process_sample_for_parallel_fill
@@ -399,6 +403,10 @@ class Study:
399
403
  add_folder = add # backward compatibility alias
400
404
  add = add
401
405
  add_sample = add_sample
406
+ _add_samples_batch = _add_samples_batch
407
+ _add_sample_optimized = _add_sample_optimized
408
+ _add_sample_standard = _add_sample_standard
409
+ _sample_color_reset_optimized = _sample_color_reset_optimized
402
410
  _load_study5 = _load_study5
403
411
  _save_study5 = _save_study5
404
412
  _save_study5_compressed = _save_study5_compressed
@@ -248,6 +248,9 @@
248
248
  "sample_sequence": {
249
249
  "dtype": "pl.Int64"
250
250
  },
251
+ "sample_color": {
252
+ "dtype": "pl.Utf8"
253
+ },
251
254
  "num_features": {
252
255
  "dtype": "pl.Int64"
253
256
  },
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: masster
3
- Version: 0.3.15
3
+ Version: 0.3.17
4
4
  Summary: Mass spectrometry data analysis package
5
5
  Project-URL: homepage, https://github.com/zamboni-lab/masster
6
6
  Project-URL: repository, https://github.com/zamboni-lab/masster
@@ -1,23 +1,23 @@
1
1
  masster/__init__.py,sha256=G7hbKO8F_o1wFwQlvO25M8JYGka_YSAVU2_O__2rjlI,697
2
- masster/_version.py,sha256=ioQa4W_2pWdKSoU7hw7Pn6WMBm3nMuuLKfSR4f8171A,256
2
+ masster/_version.py,sha256=aFPcwPY-GKnZFcAMlTHNlS4nlezVPNLaTH72j5pMbqM,257
3
3
  masster/chromatogram.py,sha256=NgPr1uLGJHjRu6PWZZGOrS3pCl7sye1yQCJjlRi9ZSY,19305
4
4
  masster/logger.py,sha256=W50V_uh8RSYwGxDrDFhOuj5jpu2tKJyt_16lMw9kQwA,14755
5
- masster/spectrum.py,sha256=LuDa7qP_JInctzkmxC9c5468opHOholy321KpUgyW2U,47550
5
+ masster/spectrum.py,sha256=7wKQes97sI-O2lxrkQnYuoroXFyAWgwSzS4TnjUX8RY,47710
6
6
  masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.mzML,sha256=3RS_crLN-aoPSacMYaQ45sxszmp_EcQElrg8tiuAQyA,39741920
7
7
  masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.timeseries.data,sha256=01vC6m__Qqm2rLvlTMZoeKIKowFvovBTUnrNl8Uav3E,24576
8
8
  masster/data/examples/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.wiff,sha256=go5N9gAM1rn4PZAVaoCmdteY9f7YGEM9gyPdSmkQ8PE,1447936
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=HL0m1ept0PMAYUCQtDDnkdOS12IFl6oLAq4TZQz83uY,170
12
- masster/sample/h5.py,sha256=IdfbdkDgKcij-jMQTxnjW-gsBhb6vwi8w1XXL795yEs,63793
12
+ masster/sample/h5.py,sha256=40H_o2Rno61KZwlWOGuwUmU9YcdVVzecs533fg8uRvI,98042
13
13
  masster/sample/helpers.py,sha256=ThmabX_-gXxLFyok-mYMNOr5JErIO_zcrIHwqovXE1c,36541
14
14
  masster/sample/lib.py,sha256=l5YdU9TxEWJI0kJxXxrRCxgDDwbzO5zBf1_Qi_HY87w,33556
15
- masster/sample/load.py,sha256=jeGP-f4nYDJlDt4MoqVEYXJ7ZQEwV8ZtM34S1ATEaNc,47774
15
+ masster/sample/load.py,sha256=ZeTB7Rr5c0XEDTt1OfyfjxogWb9TLuiAoBg4loyvnRQ,50013
16
16
  masster/sample/parameters.py,sha256=Gg2KcuNbV_wZ_Wwv93QlM5J19ji0oSIvZLPV1NoBmq0,4456
17
17
  masster/sample/plot.py,sha256=mXrQbgBfMhXtfat_xAuliyXNTanW_kezq4hmWQYtFiQ,78445
18
18
  masster/sample/processing.py,sha256=-H93MEUysA-B9PB4nU31WFjtaU_flqbu2gY35ce4vVs,57827
19
19
  masster/sample/quant.py,sha256=tHNjvUFTdehKR31BXBZnVsBxMD9XJHgaltITOjr71uE,7562
20
- masster/sample/sample.py,sha256=QxKjXPO5lWRrIq5eDsYzNQPjp0zI_vuPdPlRQe1y3uI,16925
20
+ masster/sample/sample.py,sha256=2Hq3mUZHAN8AVw_-1m5v7Jg1-yqF5Pv7AWWBlhEDSXo,17096
21
21
  masster/sample/sample5_schema.json,sha256=4g_uBMODLvxnhZU6iCK61W3fbaT6sTgOvBhEFc3U1nI,3772
22
22
  masster/sample/save.py,sha256=kQULZkuhx2ED8jMlQsi5yK98dRKlQKvQf5uJDvI01ZA,31896
23
23
  masster/sample/sciex.py,sha256=vnbxsq_qnAQVuzcpziP1o3IC4kM5amGBcPmC2TAuDLw,46319
@@ -28,30 +28,30 @@ masster/sample/defaults/find_ms2_def.py,sha256=KTELMAnioGLYbhzAwOgK14TZqboPEvzeB
28
28
  masster/sample/defaults/get_spectrum_def.py,sha256=o62p31PhGd-LiIkTOzKQhwPtnO2AtQDHcPu-O-YoQPs,11460
29
29
  masster/sample/defaults/sample_def.py,sha256=keoXyMyrm_iLgbYqfIbqCpJ3XHBVlNwCNmb5iMQL0iY,14579
30
30
  masster/study/__init__.py,sha256=Zspv6U8jFqjkHGYdNdDy1rfUnCSolCzUdgSSg98PRgE,166
31
- masster/study/export.py,sha256=9Bhz8wpO3ZHdwV0iWSX0E38GS3UfqfAFlW9VN8ht2-Y,28845
31
+ masster/study/export.py,sha256=E3Ps350T-STFlx-OQc3fU592WvenO1i6Dq7PVH6QUbA,28989
32
32
  masster/study/h5.py,sha256=Tl_jdV75yOZ5PH76jvMvTdOJdhiup6uINPC04DhcDX0,71815
33
33
  masster/study/helpers.py,sha256=PZ0Lb3eFSnEmPQ3sFzHn-cYr_OehHGzTOogfo3r5K-0,133432
34
34
  masster/study/helpers_optimized.py,sha256=sd87kNPIEPdMijekXzZWSyeZzJ_DTAW8HQjAry-jVyY,13922
35
- masster/study/load.py,sha256=xh-5CX7rCiw_AIY8Wwe_jr4n6BPRSAUIoRr6x6EG8Cs,50192
35
+ masster/study/load.py,sha256=8Y_hoRRRA9zW5SeAtZHnQlmGm3mnvz1MddWTSdfMArE,65334
36
36
  masster/study/parameters.py,sha256=0elaF7YspTsB7qyajWAbRNL2VfKlGz5GJLifmO8IGkk,3276
37
37
  masster/study/plot.py,sha256=RZ-ko0ocsXzaPtsa5QzBDX4FIwQkx4lYf5RPLJAH5Ss,76147
38
- masster/study/processing.py,sha256=ijLaVKZlPJQpcQh_u-Cj6acrSEOaB3vKMNzS9alXdzg,52661
38
+ masster/study/processing.py,sha256=ZXpeY_vpKs23de4rlvllQegmUrzj2DcH-X6D50MW6YA,53302
39
39
  masster/study/save.py,sha256=YjFEiuiB4OFLVvW_AX4-kgnsbjCWrYZeqF85VNEtbdw,6560
40
- masster/study/study.py,sha256=IrgkZPFwdgRFyAFrm0KpA7pRXuhvtwzHuVq2ee-3Hj8,31292
41
- masster/study/study5_schema.json,sha256=k1D6LhHWVioe4GY9-Xg0ro2wp9Z_Oc1MbZ4lBkrAkys,5316
40
+ masster/study/study.py,sha256=U6_tUk0SD1FaADq6ChwFTBVNYqgOTcva8QDN5Xdp4Ws,31724
41
+ masster/study/study5_schema.json,sha256=Fwt6U6r1J1BQxwR8ArFv1yN_2Cq1tt3tadS2sQCzjhg,5379
42
42
  masster/study/defaults/__init__.py,sha256=m3Z5KXGqsTdh7GjYzZoENERt39yRg0ceVRV1DeCt1P0,610
43
- masster/study/defaults/align_def.py,sha256=QSJXfe5kAtYp_IN8LUuXjq61IkxT74ml84k5kmmRjqM,19846
43
+ masster/study/defaults/align_def.py,sha256=K_6xh7B1vf96maYIBTDZGjyA2zBHEgIP5ASzD9--n2Y,20241
44
44
  masster/study/defaults/export_def.py,sha256=eXl3h4aoLX88XkHTpqahLd-QZ2gjUqrmjq8IJULXeWo,1203
45
45
  masster/study/defaults/fill_chrom_def.py,sha256=hB6-tyC9bhx-IpGj2HC8FinQdW4VLYj_pn5t1rlj-Ew,8887
46
- masster/study/defaults/fill_def.py,sha256=5B7-iNCngdwHPbf0146LzrqxKCi7_g5OC1XtkxvckeQ,8869
46
+ masster/study/defaults/fill_def.py,sha256=TdDqOt-fva44JptLvxOy7GNUCR5isOKz1jR2xj_V8sQ,8869
47
47
  masster/study/defaults/find_consensus_def.py,sha256=uWB4NKCXDMQgNp4BaQUExkDofnXz0ZDffsxH1tvH2_Q,8599
48
48
  masster/study/defaults/find_ms2_def.py,sha256=RL0DFG41wQ05U8UQKUGr3vzSl3mU0m0knQus8DpSoJE,5070
49
49
  masster/study/defaults/integrate_chrom_def.py,sha256=0MNIWGTjty-Zu-NTQsIweuj3UVqEY3x1x8pK0mPwYak,7264
50
50
  masster/study/defaults/integrate_def.py,sha256=Vf4SAzdBfnsSZ3IRaF0qZvWu3gMDPHdgPfMYoPKeWv8,7246
51
51
  masster/study/defaults/merge_def.py,sha256=EBsKE3hsAkTEzN9dpdRD5W3_suTKy_WZ_96rwS0uBuE,8572
52
52
  masster/study/defaults/study_def.py,sha256=v2V5i5y288gydhMOM78m8u_GaWC2XdjLM5nJP6e17sI,10476
53
- masster-0.3.15.dist-info/METADATA,sha256=RZMq52mkrHMq9vTYpMRwAcZ-hZkCYkYaZDMm68tcYw0,44320
54
- masster-0.3.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
55
- masster-0.3.15.dist-info/entry_points.txt,sha256=ZHguQ_vPmdbpqq2uGtmEOLJfgP-DQ1T0c07Lxh30wc8,58
56
- masster-0.3.15.dist-info/licenses/LICENSE,sha256=bx5iLIKjgAdYQ7sISn7DsfHRKkoCUm1154sJJKhgqnU,35184
57
- masster-0.3.15.dist-info/RECORD,,
53
+ masster-0.3.17.dist-info/METADATA,sha256=ThbBliz3HIe_59xDsd4IK2Ai3TdsEnQ9JqgdkyUrz3Q,44320
54
+ masster-0.3.17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
55
+ masster-0.3.17.dist-info/entry_points.txt,sha256=ZHguQ_vPmdbpqq2uGtmEOLJfgP-DQ1T0c07Lxh30wc8,58
56
+ masster-0.3.17.dist-info/licenses/LICENSE,sha256=bx5iLIKjgAdYQ7sISn7DsfHRKkoCUm1154sJJKhgqnU,35184
57
+ masster-0.3.17.dist-info/RECORD,,