masster 0.5.17__py3-none-any.whl → 0.5.19__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of masster might be problematic. Click here for more details.

masster/study/study.py CHANGED
@@ -905,6 +905,7 @@ class Study:
905
905
  f"Study folder: {self.folder}\n"
906
906
  f"Last save: {self.filename}\n"
907
907
  f"Samples: {samples_df_len}\n"
908
+ f"Polarity: {self.polarity}\n"
908
909
  f"Features: {unfilled_features_count}\n"
909
910
  f"- in consensus: {ratio_in_consensus_to_total:.0f}%\n"
910
911
  f"- not in consensus: {ratio_not_in_consensus_to_total:.0f}%\n"
masster/wizard/README.md CHANGED
@@ -12,7 +12,7 @@ from masster import Wizard
12
12
  # Create wizard with minimal configuration
13
13
  wizard = Wizard(
14
14
  data_source="./raw_data", # Directory with raw files
15
- study_folder="./processed", # Output directory
15
+ study_folder="./processed", # Output directory
16
16
  polarity="positive", # or "negative"
17
17
  num_cores=4 # CPU cores to use
18
18
  )
@@ -35,22 +35,22 @@ params = wizard_def(
35
35
  study_folder="./processed_advanced",
36
36
  polarity="negative",
37
37
  num_cores=8,
38
-
38
+
39
39
  # File discovery
40
40
  file_extensions=[".wiff", ".raw", ".mzML"],
41
41
  search_subfolders=True,
42
42
  skip_patterns=["blank", "QC", "test"],
43
-
43
+
44
44
  # Processing parameters
45
45
  adducts=["H-1:-:0.95", "Cl:-:0.05", "CH2O2:0:0.2"],
46
46
  chrom_fwhm=0.15,
47
47
  noise_threshold=5e4,
48
-
48
+
49
49
  # Study assembly
50
50
  rt_tolerance=1.0,
51
51
  mz_tolerance=0.008,
52
52
  min_samples_for_merge=30,
53
-
53
+
54
54
  # Output options
55
55
  export_formats=["csv", "xlsx", "mgf", "parquet"],
56
56
  generate_plots=True,
@@ -73,7 +73,7 @@ wizard.run_full_pipeline()
73
73
 
74
74
  ### 💾 Intelligent Resume
75
75
  - **Checkpoint System**: Automatically saves progress at key points
76
- - **File Tracking**: Remembers which files have been processed successfully
76
+ - **File Tracking**: Remembers which files have been processed successfully
77
77
  - **Smart Recovery**: Resumes from last successful step after interruption
78
78
  - **Validation**: Verifies existing outputs before skipping
79
79
 
@@ -112,7 +112,7 @@ wizard.run_full_pipeline()
112
112
 
113
113
  ### 4. Feature Alignment
114
114
  - **RT Alignment**: Corrects retention time shifts between samples
115
- - **Mass Alignment**: Accounts for mass calibration differences
115
+ - **Mass Alignment**: Accounts for mass calibration differences
116
116
  - **Algorithm Selection**: Supports KD-tree, QT-clustering, and chunked methods
117
117
  - **Validation**: Reports alignment statistics and quality metrics
118
118
 
@@ -232,7 +232,7 @@ Returns detailed status dictionary with current step, processed files, timing, a
232
232
  - Ensure sufficient disk space in output directory
233
233
  - Close any applications that might lock files
234
234
 
235
- **Processing Failures**
235
+ **Processing Failures**
236
236
  - Check individual file integrity
237
237
  - Review `skip_patterns` to exclude problematic files
238
238
  - Examine detailed logs in `wizard.log` and `processing.log`
@@ -249,7 +249,7 @@ The Wizard includes built-in validation at each step:
249
249
 
250
250
  - **File Validation**: Checks file accessibility and format compatibility
251
251
  - **Processing Validation**: Verifies sample5 outputs can be loaded
252
- - **Study Validation**: Ensures study assembly completed successfully
252
+ - **Study Validation**: Ensures study assembly completed successfully
253
253
  - **Alignment Validation**: Reports alignment statistics and warnings
254
254
  - **Export Validation**: Confirms all requested outputs were created
255
255
 
@@ -257,7 +257,7 @@ The Wizard includes built-in validation at each step:
257
257
 
258
258
  ### System Requirements
259
259
  - **Minimum**: 4 CPU cores, 8 GB RAM
260
- - **Recommended**: 8+ CPU cores, 16+ GB RAM
260
+ - **Recommended**: 8+ CPU cores, 16+ GB RAM
261
261
  - **Large Studies**: 16+ CPU cores, 32+ GB RAM
262
262
  - **Storage**: SSD recommended, ~2-3x raw data size free space
263
263
 
@@ -265,7 +265,7 @@ The Wizard includes built-in validation at each step:
265
265
 
266
266
  **For Small Studies (< 50 samples)**
267
267
  - Use `num_cores = 4-6`
268
- - Set `batch_size = 4-8`
268
+ - Set `batch_size = 4-8`
269
269
  - Use `merge_method = "kd"`
270
270
  - Enable all export formats
271
271
 
@@ -297,7 +297,7 @@ if not wizard.study_folder_path.glob("*.sample5"):
297
297
 
298
298
  # Continue with study-level processing
299
299
  wizard.assemble_study()
300
- wizard.align_and_merge()
300
+ wizard.align_and_merge()
301
301
  wizard.export_results()
302
302
  ```
303
303
 
@@ -312,7 +312,7 @@ studies = [
312
312
  for study_config in studies:
313
313
  wizard = Wizard(**study_config, num_cores=8)
314
314
  success = wizard.run_full_pipeline()
315
-
315
+
316
316
  if success:
317
317
  print(f"✅ {study_config['output']} completed")
318
318
  else:
@@ -338,7 +338,7 @@ if hasattr(wizard.study, 'features_filter'):
338
338
  )
339
339
  wizard.study.features_filter(selection)
340
340
 
341
- # Continue with standard pipeline
341
+ # Continue with standard pipeline
342
342
  wizard.align_and_merge()
343
343
  wizard.generate_plots()
344
344
  ```
@@ -370,4 +370,4 @@ The Wizard generates several types of output files:
370
370
  - `sample_name.mgf` - Individual sample MS2 spectra
371
371
  - `sample_name_2d.html` - Individual sample 2D plot
372
372
 
373
- The Wizard provides a complete, automated solution for mass spectrometry data processing while maintaining flexibility for custom workflows and providing robust error handling and recovery capabilities.
373
+ The Wizard provides a complete, automated solution for mass spectrometry data processing while maintaining flexibility for custom workflows and providing robust error handling and recovery capabilities.
masster/wizard/wizard.py CHANGED
@@ -66,7 +66,7 @@ class wizard_def:
66
66
  # Core Configuration
67
67
  source (str): Path to directory containing raw data files
68
68
  folder (str): Output directory for processed study
69
- polarity (str): Ion polarity mode ("positive" or "negative")
69
+ polarity (Optional[str]): Ion polarity mode ("positive", "negative", or None for auto-detection)
70
70
  num_cores (int): Number of CPU cores to use for parallel processing
71
71
 
72
72
  # File Discovery
@@ -98,7 +98,7 @@ class wizard_def:
98
98
  # === Core Configuration ===
99
99
  source: str = ""
100
100
  folder: str = ""
101
- polarity: str = "positive"
101
+ polarity: Optional[str] = None
102
102
  num_cores: int = 4
103
103
 
104
104
  # === File Discovery ===
@@ -198,12 +198,12 @@ class wizard_def:
198
198
  """Set polarity-specific defaults after initialization."""
199
199
  # Set default adducts based on polarity if not provided
200
200
  if not self.adducts:
201
- if self.polarity.lower() in ["positive", "pos"]:
201
+ if self.polarity and self.polarity.lower() in ["positive", "pos"]:
202
202
  self.adducts = ["H:+:0.8", "Na:+:0.1", "NH4:+:0.1"]
203
- elif self.polarity.lower() in ["negative", "neg"]:
203
+ elif self.polarity and self.polarity.lower() in ["negative", "neg"]:
204
204
  self.adducts = ["H-1:-:1.0", "CH2O2:0:0.5"]
205
205
  else:
206
- # Default to positive
206
+ # Default to positive if polarity is None or unknown
207
207
  self.adducts = ["H:+:0.8", "Na:+:0.1", "NH4:+:0.1"]
208
208
 
209
209
  # Validate num_cores
@@ -245,7 +245,7 @@ class Wizard:
245
245
  self,
246
246
  source: str = "",
247
247
  folder: str = "",
248
- polarity: str = "positive",
248
+ polarity: Optional[str] = None,
249
249
  adducts: Optional[List[str]] = None,
250
250
  num_cores: int = 6,
251
251
  **kwargs
@@ -256,7 +256,7 @@ class Wizard:
256
256
  Parameters:
257
257
  source: Directory containing raw data files
258
258
  folder: Output directory for processed study
259
- polarity: Ion polarity mode ("positive" or "negative")
259
+ polarity: Ion polarity mode ("positive", "negative", or None for auto-detection)
260
260
  adducts: List of adduct specifications (auto-set if None)
261
261
  num_cores: Number of CPU cores (0 = auto-detect 75% of available)
262
262
  **kwargs: Additional parameters (see wizard_def for full list)
@@ -298,8 +298,8 @@ class Wizard:
298
298
  self.folder_path = Path(self.params.folder)
299
299
  self.folder_path.mkdir(parents=True, exist_ok=True)
300
300
 
301
- # Auto-infer polarity from the first file if not explicitly set by user
302
- if polarity == "positive" and "polarity" not in kwargs:
301
+ # Auto-infer polarity from the first file if polarity is None
302
+ if self.params.polarity is None:
303
303
  inferred_polarity = self._infer_polarity_from_first_file()
304
304
  if inferred_polarity:
305
305
  self.params.polarity = inferred_polarity
@@ -311,7 +311,7 @@ class Wizard:
311
311
  Infer polarity from the first available raw data file.
312
312
 
313
313
  Returns:
314
- Inferred polarity string ("positive" or "negative") or None if detection fails
314
+ Inferred polarity string ("positive" or "negative") or "positive" as fallback
315
315
  """
316
316
  try:
317
317
  # Find first file
@@ -324,31 +324,85 @@ class Wizard:
324
324
  else:
325
325
  return 'positive'
326
326
 
327
- # Only implement for .wiff files initially (most common format)
327
+ # Handle different file formats
328
328
  if first_file.suffix.lower() == '.wiff':
329
- from masster.sample.load import _wiff_to_dict
330
-
331
- # Extract metadata from first file
332
- metadata_df = _wiff_to_dict(str(first_file))
333
-
334
- if not metadata_df.empty and 'polarity' in metadata_df.columns:
335
- # Get polarity from first experiment
336
- first_polarity = metadata_df['polarity'].iloc[0]
337
-
338
- # Convert numeric polarity codes to string
339
- if first_polarity == 1 or str(first_polarity).lower() in ['positive', 'pos', '+']:
340
- return "positive"
341
- elif first_polarity == -1 or str(first_polarity).lower() in ['negative', 'neg', '-']:
342
- return "negative"
329
+ return self._infer_polarity_from_wiff(str(first_file))
330
+ elif first_file.suffix.lower() == '.raw':
331
+ return self._infer_polarity_from_raw(str(first_file))
332
+ elif first_file.suffix.lower() == '.mzml':
333
+ return self._infer_polarity_from_mzml(str(first_file))
343
334
 
344
335
  except Exception:
345
336
  # Silently fall back to default if inference fails
346
337
  pass
347
338
 
348
339
  return 'positive'
340
+
341
+ def _infer_polarity_from_wiff(self, filename: str) -> str:
342
+ """Infer polarity from WIFF file."""
343
+ try:
344
+ from masster.sample.load import _wiff_to_dict
345
+
346
+ # Extract metadata from first file
347
+ metadata_df = _wiff_to_dict(filename)
348
+
349
+ if not metadata_df.empty and 'polarity' in metadata_df.columns:
350
+ # Get polarity from first experiment
351
+ first_polarity = metadata_df['polarity'].iloc[0]
352
+
353
+ # Convert numeric polarity codes to string
354
+ if first_polarity == 1 or str(first_polarity).lower() in ['positive', 'pos', '+']:
355
+ return "positive"
356
+ elif first_polarity == -1 or str(first_polarity).lower() in ['negative', 'neg', '-']:
357
+ return "negative"
358
+ except Exception:
359
+ pass
360
+ return 'positive'
361
+
362
+ def _infer_polarity_from_raw(self, filename: str) -> str:
363
+ """Infer polarity from Thermo RAW file."""
364
+ try:
365
+ from masster.sample.thermo import ThermoRawFileReader
366
+
367
+ with ThermoRawFileReader(filename) as raw_reader:
368
+ # Get polarity from first scan
369
+ first_scan = 1
370
+ polarity = raw_reader.get_polarity_from_scan_event(first_scan)
371
+ if polarity in ['positive', 'negative']:
372
+ return polarity
373
+ except Exception:
374
+ pass
375
+ return 'positive'
376
+
377
+ def _infer_polarity_from_mzml(self, filename: str) -> str:
378
+ """Infer polarity from mzML file."""
379
+ try:
380
+ # Import pyopenms with warnings suppression
381
+ import warnings
382
+ with warnings.catch_warnings():
383
+ warnings.filterwarnings("ignore", message=".*OPENMS_DATA_PATH.*", category=UserWarning)
384
+ import pyopenms as oms
385
+
386
+ # Load the first few spectra to check polarity
387
+ omsexp = oms.MSExperiment()
388
+ oms.MzMLFile().load(filename, omsexp)
389
+
390
+ if omsexp.getNrSpectra() > 0:
391
+ first_spectrum = omsexp.getSpectra()[0]
392
+ try:
393
+ pol = first_spectrum.getInstrumentSettings().getPolarity()
394
+ if pol == 1:
395
+ return "positive"
396
+ elif pol == 2:
397
+ return "negative"
398
+ except Exception:
399
+ pass
400
+ except Exception:
401
+ pass
402
+ return 'positive'
349
403
 
350
404
  @property
351
- def polarity(self) -> str:
405
+ def polarity(self) -> Optional[str]:
352
406
  """Get the ion polarity mode."""
353
407
  return self.params.polarity
354
408
 
@@ -1323,7 +1377,7 @@ class Wizard:
1323
1377
  def create_scripts(
1324
1378
  source: str = "",
1325
1379
  folder: str = "",
1326
- polarity: str = "positive",
1380
+ polarity: Optional[str] = None,
1327
1381
  adducts: Optional[List[str]] = None,
1328
1382
  num_cores: int = 0,
1329
1383
  **kwargs
@@ -1337,7 +1391,7 @@ def create_scripts(
1337
1391
  Parameters:
1338
1392
  source: Directory containing raw data files
1339
1393
  folder: Output directory for processed study
1340
- polarity: Ion polarity mode ("positive" or "negative")
1394
+ polarity: Ion polarity mode ("positive", "negative", or None for auto-detection)
1341
1395
  adducts: List of adduct specifications (auto-set if None)
1342
1396
  num_cores: Number of CPU cores (0 = auto-detect)
1343
1397
  **kwargs: Additional parameters
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: masster
3
- Version: 0.5.17
3
+ Version: 0.5.19
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
@@ -747,10 +747,11 @@ pip install masster
747
747
 
748
748
  ```python
749
749
  import masster
750
- masster.wizard.execute(
750
+ wiz = masster.wizard.create_scripts(
751
751
  source=r'..\..\folder_with_raw_data',
752
752
  folder=r'..\..folder_to_store_results'
753
753
  )
754
+ wiz.run()
754
755
  ```
755
756
 
756
757
  This will run a wizard that should perform all key steps and save the results to the `folder`.
@@ -1,5 +1,5 @@
1
1
  masster/__init__.py,sha256=B7zftzdElF2Wb5B7KvkD6TONnMIY-Jxeen3s49dgmzs,1029
2
- masster/_version.py,sha256=KD2SEuC2rjv2RLni1gIwB7iF2uzGndbyPLJm7M_E38U,257
2
+ masster/_version.py,sha256=uCkE1NJ7J1aQrPg6o1mVRwVi9N10aB8nbGRTr0cwkNY,257
3
3
  masster/chromatogram.py,sha256=iYpdv8C17zVnlWvOFgAn9ns2uFGiF-GgoYf5QVVAbHs,19319
4
4
  masster/logger.py,sha256=XT2gUcUIct8LWzTp9n484g5MaB89toT76CGA41oBvfA,18375
5
5
  masster/spectrum.py,sha256=TWIgDcl0lveG40cLVZTWGp8-FxMolu-P8EjZyRBtXL4,49850
@@ -19,39 +19,40 @@ masster/data/wiff/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecR
19
19
  masster/lib/__init__.py,sha256=TcePNx3SYZHz6763TL9Sg4gUNXaRWjlrOtyS6vsu-hg,178
20
20
  masster/lib/lib.py,sha256=cDV4bL2Ax0WWZReiTYze0W6XVMTJRC9DMlVYd6piRIs,38934
21
21
  masster/sample/__init__.py,sha256=HL0m1ept0PMAYUCQtDDnkdOS12IFl6oLAq4TZQz83uY,170
22
- masster/sample/adducts.py,sha256=HDqb8QMpImRr3lZePE4GO1glA1C9ApyDVTDbr839XMk,32965
23
- masster/sample/h5.py,sha256=X5VBHBpgJ2FJc9mtCggJ1HSQ3ujRmb1Wnpr9sJ8bGVA,115445
22
+ masster/sample/adducts.py,sha256=SU6S3pyyLQUSg6yPcdj3p4MfwNDsp0_FYwYYb7F4li0,33798
23
+ masster/sample/h5.py,sha256=0FE6eH9n8RaO59HjKnFo0kKmr8L44UOQIBqcpD3LW0s,117749
24
24
  masster/sample/helpers.py,sha256=Mt9LX-Dy1Xro1a_Sy6nxQzCkP_-q7nK4xVnNm44v7UA,43872
25
- masster/sample/lib.py,sha256=E-j9c3Wd8f9a-H8xj7CAOwlA8KcyXPoFyYm3c8r7LtI,33755
26
- masster/sample/load.py,sha256=swjRBCoFGni9iPztHIKPVB5ru_xDMVryB_inPXdujTw,51819
25
+ masster/sample/lib.py,sha256=jrzqvglaCGzZQSSRXEQXYSJ_UTaFMdpSQbWiZd1DJyc,33976
26
+ masster/sample/load.py,sha256=GP8oYICEqHdog9_sFPiBJVwdy7foavVF7g1ffZ729-s,48711
27
27
  masster/sample/parameters.py,sha256=Gg2KcuNbV_wZ_Wwv93QlM5J19ji0oSIvZLPV1NoBmq0,4456
28
28
  masster/sample/plot.py,sha256=5qn2Cpl363f3hW1ZeI4BZV9_36VLx39PKQMrebJhfp4,104864
29
- masster/sample/processing.py,sha256=mKm73pscK7L1o0DS3X957LeOBoYiCe9b2-P8mCPX8gk,56333
29
+ masster/sample/processing.py,sha256=iPbkC2yxBZZfDkXb4xl12qeu0Z1qwm0VLQfk3bQq33w,56322
30
30
  masster/sample/quant.py,sha256=tHNjvUFTdehKR31BXBZnVsBxMD9XJHgaltITOjr71uE,7562
31
- masster/sample/sample.py,sha256=pw4fIE5gecdupZOOWFUiRCs0x-3qa3Nv7V_UdJ-CAsc,22202
31
+ masster/sample/sample.py,sha256=Khhjcd1okZBxVM6bOvGV4ZU-FUagiqgZjkWm3afhECs,22365
32
32
  masster/sample/sample5_schema.json,sha256=H5e2T6rHIDzul2kp_yP-ILUUWUpW08wP2pEQjMR0nSk,3977
33
33
  masster/sample/save.py,sha256=pbiRoWEA2DnhDKmMJncjveNlBqizJLOVRm5cug4ZwyM,38658
34
- masster/sample/sciex.py,sha256=vnbxsq_qnAQVuzcpziP1o3IC4kM5amGBcPmC2TAuDLw,46319
34
+ masster/sample/sciex.py,sha256=1jwy40Ime4wPWiyfGHVnlaY8Q8dkHdQ9aGafvumdYoI,21771
35
+ masster/sample/thermo.py,sha256=X5yDVWroHOFkWvugezrcCV5ZKPVcpTX5VKEvFSJK1vU,28128
35
36
  masster/sample/defaults/__init__.py,sha256=A09AOP44cxD_oYohyt7XFUho0zndRcrzVD4DUaGnKH4,447
36
37
  masster/sample/defaults/find_adducts_def.py,sha256=Bu2KiBJRxD0SAnOPNMm_Nk-6fx6QYoRXjFNGzz-0_o0,13570
37
38
  masster/sample/defaults/find_features_def.py,sha256=Bcd39uav1BniwKgrsB-I1maF3ljf4Wb1f5yv0pDYfts,17745
38
- masster/sample/defaults/find_ms2_def.py,sha256=KTELMAnioGLYbhzAwOgK14TZqboPEvzeBN0HC-v0Z5A,9872
39
+ masster/sample/defaults/find_ms2_def.py,sha256=mr_XtzlhYfXt7kYWVFPt1ReGqHZQDPXe-1pGND2VvV8,9844
39
40
  masster/sample/defaults/get_spectrum_def.py,sha256=o62p31PhGd-LiIkTOzKQhwPtnO2AtQDHcPu-O-YoQPs,11460
40
- masster/sample/defaults/sample_def.py,sha256=keoXyMyrm_iLgbYqfIbqCpJ3XHBVlNwCNmb5iMQL0iY,14579
41
+ masster/sample/defaults/sample_def.py,sha256=XJPtQPqgkpaLEng3eqBPznCwcKVPJSw3FC6wNVcEu5E,15460
41
42
  masster/study/__init__.py,sha256=55axdFuqRX4aXtJ8ocnhcLB32fNtmmJpCi58moO0r4g,237
42
43
  masster/study/analysis.py,sha256=L-wXBnGZCLB5UUDrjIdOiMG9zdej3Tw_SftcEmmTukM,84264
43
44
  masster/study/export.py,sha256=c1HJdLAM6Ply0n8f0DjMk4mXd9lOYePr60UJTBksUho,60092
44
45
  masster/study/h5.py,sha256=bznE9kKEfLNo0QtbyC6a6snfnR3Zjkx5BcjBNbRVlJ8,99579
45
46
  masster/study/helpers.py,sha256=FdvQV-CgQyBhXMqk6_92aKSBsZhJBK4joLxEdKzmuhw,192011
46
- masster/study/id.py,sha256=_ZqPz3dWZ-o7mIE0eW1cWQV8xdcdgJUaf1TT7paG5SU,90716
47
+ masster/study/id.py,sha256=GtOyu5vuK8utydpZn-zNjTbHZsEabqAUGrCwVbauzWA,90844
47
48
  masster/study/importers.py,sha256=1Oco0yMid_siMMZdK7rQlhS20XikgjBBNAirbTHx5O8,13958
48
- masster/study/load.py,sha256=BMjoUDkXNI6iU2tRE2eBRzxMrvW0gRyLepqYOWaMPXU,101192
49
+ masster/study/load.py,sha256=EsKpxUuduu-w1TREfHTYxRdEncWTd15h2IwoB3D_nuc,72070
49
50
  masster/study/merge.py,sha256=SwrsbcoI6hIuepvTJEFNoXncwMx1XXr6FVOvkSyfIbs,169239
50
51
  masster/study/parameters.py,sha256=bTvmcwX9INxzcrEAmTiFH8qeWVhwkvMTZjuP394pz5o,3279
51
52
  masster/study/plot.py,sha256=RXuTlL-jpdLn9aRrxNvTrRU8Zr4504pia-BEWYzpSfY,114048
52
53
  masster/study/processing.py,sha256=5b8K4tP-Xu1-mhdf0om-m-g65Z9Uz3Dp4UBhuMLh0yU,58627
53
54
  masster/study/save.py,sha256=47AP518epJJ9TjaGGyrLKsMsyjIk8_J4ka7bmsnRtFQ,9268
54
- masster/study/study.py,sha256=pu6JQKvrT2AVKhAixlt3vfaKzJqbJfBY3xPt6-MWdyU,38833
55
+ masster/study/study.py,sha256=Qt1ltc20LRjPvfuwHLX3AGszNAzZG3t7oM0GbS6Ixbc,38891
55
56
  masster/study/study5_schema.json,sha256=uLA9TIb5loki87_BEdwSNyPYahwOanacYisXdIK0_Z0,8044
56
57
  masster/study/defaults/__init__.py,sha256=m3Z5KXGqsTdh7GjYzZoENERt39yRg0ceVRV1DeCt1P0,610
57
58
  masster/study/defaults/align_def.py,sha256=Du0F592ej2einT8kOx8EUs610axSvur8_-6N19O-uJY,10209
@@ -64,12 +65,12 @@ masster/study/defaults/integrate_chrom_def.py,sha256=0MNIWGTjty-Zu-NTQsIweuj3UVq
64
65
  masster/study/defaults/integrate_def.py,sha256=Vf4SAzdBfnsSZ3IRaF0qZvWu3gMDPHdgPfMYoPKeWv8,7246
65
66
  masster/study/defaults/merge_def.py,sha256=krR099IkENLlJVxpSjdje3E6h-_qtlc3Ep6Hpy6inrU,12978
66
67
  masster/study/defaults/study_def.py,sha256=h8dYbi9xv0sesCSQik49Z53IkskMmNtW6ixl7it5pL0,16033
67
- masster/wizard/README.md,sha256=mL1A3YWJZOefpJ6D0-HqGLkVRmUlOpwyVFdvJBeeoZM,14149
68
+ masster/wizard/README.md,sha256=RX3uxT1qD5i9iDSznZUbnukixonqr96JlUE4TwssAgY,14111
68
69
  masster/wizard/__init__.py,sha256=L9G_datyGSFJjrBVklEVpZVLGXzUhDiWobtiygBH8vQ,669
69
70
  masster/wizard/example.py,sha256=xEZFTH9UZ8HKOm6s3JL8Js0Uw5ChnISWBHSZCL32vsM,7983
70
- masster/wizard/wizard.py,sha256=_co4abB8lNNryfqwS3AZtw6TGxw6NLowRjLXTUzJA0o,62994
71
- masster-0.5.17.dist-info/METADATA,sha256=SnOZZo7h6E7XV_AIjomMkMYAwbibu23vZYyhQnRMEOM,45130
72
- masster-0.5.17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
73
- masster-0.5.17.dist-info/entry_points.txt,sha256=ZHguQ_vPmdbpqq2uGtmEOLJfgP-DQ1T0c07Lxh30wc8,58
74
- masster-0.5.17.dist-info/licenses/LICENSE,sha256=bx5iLIKjgAdYQ7sISn7DsfHRKkoCUm1154sJJKhgqnU,35184
75
- masster-0.5.17.dist-info/RECORD,,
71
+ masster/wizard/wizard.py,sha256=ckOz-8zrk8i7tDjqkk-shYFA2Ni9fV4nejocEjTX78M,65265
72
+ masster-0.5.19.dist-info/METADATA,sha256=bpOG_-B3UKjR1JtWcnze5-g4uNyob2mXeNbHYVWf61M,45153
73
+ masster-0.5.19.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
74
+ masster-0.5.19.dist-info/entry_points.txt,sha256=ZHguQ_vPmdbpqq2uGtmEOLJfgP-DQ1T0c07Lxh30wc8,58
75
+ masster-0.5.19.dist-info/licenses/LICENSE,sha256=bx5iLIKjgAdYQ7sISn7DsfHRKkoCUm1154sJJKhgqnU,35184
76
+ masster-0.5.19.dist-info/RECORD,,