smftools 0.1.3__tar.gz → 0.1.6__tar.gz

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.
Files changed (196) hide show
  1. {smftools-0.1.3 → smftools-0.1.6}/PKG-INFO +44 -11
  2. {smftools-0.1.3 → smftools-0.1.6}/README.md +13 -7
  3. smftools-0.1.6/docs/source/_static/smftools-1.svg +1 -0
  4. smftools-0.1.6/docs/source/_static/smftools-1.tif +0 -0
  5. {smftools-0.1.3 → smftools-0.1.6}/experiment_config.csv +3 -1
  6. {smftools-0.1.3 → smftools-0.1.6}/pyproject.toml +15 -5
  7. {smftools-0.1.3 → smftools-0.1.6}/requirements.txt +11 -2
  8. {smftools-0.1.3/src → smftools-0.1.6}/smftools/__init__.py +5 -1
  9. smftools-0.1.6/smftools/_version.py +1 -0
  10. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/__init__.py +2 -0
  11. smftools-0.1.6/smftools/informatics/archived/print_bam_query_seq.py +29 -0
  12. smftools-0.1.6/smftools/informatics/basecall_pod5s.py +80 -0
  13. smftools-0.1.6/smftools/informatics/conversion_smf.py +132 -0
  14. smftools-0.1.6/smftools/informatics/direct_smf.py +137 -0
  15. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/LoadExperimentConfig.py +1 -0
  16. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/__init__.py +16 -2
  17. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/align_and_sort_BAM.py +27 -16
  18. smftools-0.1.6/smftools/informatics/helpers/aligned_BAM_to_bed.py +74 -0
  19. smftools-0.1.6/smftools/informatics/helpers/bam_qc.py +66 -0
  20. smftools-0.1.6/smftools/informatics/helpers/binarize_converted_base_identities.py +79 -0
  21. smftools-0.1.6/smftools/informatics/helpers/canoncall.py +34 -0
  22. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/concatenate_fastqs_to_bam.py +5 -4
  23. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/converted_BAM_to_adata.py +34 -22
  24. smftools-0.1.6/smftools/informatics/helpers/converted_BAM_to_adata_II.py +369 -0
  25. smftools-0.1.6/smftools/informatics/helpers/demux_and_index_BAM.py +52 -0
  26. smftools-0.1.6/smftools/informatics/helpers/extract_base_identities.py +44 -0
  27. smftools-0.1.6/smftools/informatics/helpers/extract_mods.py +83 -0
  28. smftools-0.1.6/smftools/informatics/helpers/extract_read_features_from_bam.py +31 -0
  29. smftools-0.1.6/smftools/informatics/helpers/extract_read_lengths_from_bed.py +25 -0
  30. smftools-0.1.6/smftools/informatics/helpers/find_conversion_sites.py +50 -0
  31. smftools-0.1.6/smftools/informatics/helpers/generate_converted_FASTA.py +99 -0
  32. smftools-0.1.6/smftools/informatics/helpers/modcall.py +36 -0
  33. smftools-0.1.6/smftools/informatics/helpers/modkit_extract_to_adata.py +884 -0
  34. smftools-0.1.6/smftools/informatics/helpers/ohe_batching.py +76 -0
  35. smftools-0.1.6/smftools/informatics/helpers/ohe_layers_decode.py +32 -0
  36. smftools-0.1.6/smftools/informatics/helpers/one_hot_decode.py +27 -0
  37. smftools-0.1.6/smftools/informatics/helpers/one_hot_encode.py +57 -0
  38. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/plot_read_length_and_coverage_histograms.py +1 -0
  39. smftools-0.1.6/smftools/informatics/helpers/run_multiqc.py +28 -0
  40. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/split_and_index_BAM.py +3 -8
  41. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/load_adata.py +58 -3
  42. smftools-0.1.6/smftools/plotting/__init__.py +15 -0
  43. smftools-0.1.6/smftools/plotting/classifiers.py +355 -0
  44. smftools-0.1.6/smftools/plotting/general_plotting.py +205 -0
  45. smftools-0.1.6/smftools/plotting/position_stats.py +462 -0
  46. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/__init__.py +6 -7
  47. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/append_C_context.py +22 -9
  48. {smftools-0.1.3/src/smftools/preprocessing → smftools-0.1.6/smftools/preprocessing/archives}/mark_duplicates.py +38 -26
  49. smftools-0.1.6/smftools/preprocessing/binarize_on_Youden.py +45 -0
  50. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/binary_layers_to_ohe.py +13 -3
  51. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/calculate_complexity.py +3 -2
  52. smftools-0.1.6/smftools/preprocessing/calculate_converted_read_methylation_stats.py +94 -0
  53. smftools-0.1.6/smftools/preprocessing/calculate_coverage.py +42 -0
  54. smftools-0.1.6/smftools/preprocessing/calculate_pairwise_differences.py +49 -0
  55. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/calculate_position_Youden.py +18 -7
  56. smftools-0.1.6/smftools/preprocessing/calculate_read_length_stats.py +79 -0
  57. smftools-0.1.6/smftools/preprocessing/clean_NaN.py +46 -0
  58. smftools-0.1.6/smftools/preprocessing/filter_adata_by_nan_proportion.py +31 -0
  59. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/filter_converted_reads_on_methylation.py +20 -5
  60. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/filter_reads_on_length.py +14 -4
  61. smftools-0.1.6/smftools/preprocessing/flag_duplicate_reads.py +149 -0
  62. smftools-0.1.6/smftools/preprocessing/invert_adata.py +30 -0
  63. smftools-0.1.6/smftools/preprocessing/load_sample_sheet.py +38 -0
  64. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/recipes.py +22 -20
  65. smftools-0.1.6/smftools/preprocessing/subsample_adata.py +58 -0
  66. smftools-0.1.6/smftools/readwrite.py +198 -0
  67. smftools-0.1.6/smftools/tools/__init__.py +49 -0
  68. smftools-0.1.6/smftools/tools/apply_hmm.py +202 -0
  69. smftools-0.1.6/smftools/tools/apply_hmm_batched.py +241 -0
  70. smftools-0.1.6/smftools/tools/archived/classify_methylated_features.py +66 -0
  71. smftools-0.1.6/smftools/tools/archived/classify_non_methylated_features.py +75 -0
  72. smftools-0.1.6/smftools/tools/archived/subset_adata_v2.py +46 -0
  73. smftools-0.1.6/smftools/tools/calculate_distances.py +18 -0
  74. smftools-0.1.6/smftools/tools/calculate_umap.py +62 -0
  75. smftools-0.1.6/smftools/tools/call_hmm_peaks.py +105 -0
  76. smftools-0.1.6/smftools/tools/classifiers.py +787 -0
  77. smftools-0.1.6/smftools/tools/cluster_adata_on_methylation.py +105 -0
  78. smftools-0.1.6/smftools/tools/data/__init__.py +1 -0
  79. smftools-0.1.6/smftools/tools/data/preprocessing.py +6 -0
  80. smftools-0.1.6/smftools/tools/display_hmm.py +18 -0
  81. smftools-0.1.6/smftools/tools/general_tools.py +69 -0
  82. smftools-0.1.6/smftools/tools/hmm_readwrite.py +16 -0
  83. smftools-0.1.6/smftools/tools/models/__init__.py +7 -0
  84. smftools-0.1.6/smftools/tools/models/base.py +14 -0
  85. smftools-0.1.6/smftools/tools/models/cnn.py +34 -0
  86. smftools-0.1.6/smftools/tools/models/mlp.py +17 -0
  87. smftools-0.1.6/smftools/tools/models/positional.py +17 -0
  88. smftools-0.1.6/smftools/tools/models/rnn.py +16 -0
  89. smftools-0.1.6/smftools/tools/models/transformer.py +133 -0
  90. smftools-0.1.6/smftools/tools/models/wrappers.py +20 -0
  91. smftools-0.1.6/smftools/tools/nucleosome_hmm_refinement.py +104 -0
  92. smftools-0.1.6/smftools/tools/position_stats.py +239 -0
  93. smftools-0.1.6/smftools/tools/read_stats.py +70 -0
  94. smftools-0.1.6/smftools/tools/subset_adata.py +28 -0
  95. smftools-0.1.6/smftools/tools/train_hmm.py +78 -0
  96. smftools-0.1.6/smftools/tools/training/__init__.py +0 -0
  97. smftools-0.1.6/smftools/tools/utils/__init__.py +2 -0
  98. smftools-0.1.6/smftools/tools/utils/device.py +10 -0
  99. smftools-0.1.6/smftools/tools/utils/grl.py +14 -0
  100. smftools-0.1.3/src/smftools/_version.py +0 -1
  101. smftools-0.1.3/src/smftools/informatics/conversion_smf.py +0 -79
  102. smftools-0.1.3/src/smftools/informatics/direct_smf.py +0 -89
  103. smftools-0.1.3/src/smftools/informatics/helpers/aligned_BAM_to_bed.py +0 -73
  104. smftools-0.1.3/src/smftools/informatics/helpers/binarize_converted_base_identities.py +0 -31
  105. smftools-0.1.3/src/smftools/informatics/helpers/canoncall.py +0 -25
  106. smftools-0.1.3/src/smftools/informatics/helpers/extract_base_identities.py +0 -57
  107. smftools-0.1.3/src/smftools/informatics/helpers/extract_mods.py +0 -51
  108. smftools-0.1.3/src/smftools/informatics/helpers/find_conversion_sites.py +0 -61
  109. smftools-0.1.3/src/smftools/informatics/helpers/generate_converted_FASTA.py +0 -98
  110. smftools-0.1.3/src/smftools/informatics/helpers/modcall.py +0 -28
  111. smftools-0.1.3/src/smftools/informatics/helpers/modkit_extract_to_adata.py +0 -518
  112. smftools-0.1.3/src/smftools/informatics/helpers/ohe_batching.py +0 -52
  113. smftools-0.1.3/src/smftools/informatics/helpers/one_hot_encode.py +0 -21
  114. smftools-0.1.3/src/smftools/preprocessing/binarize_on_Youden.py +0 -42
  115. smftools-0.1.3/src/smftools/preprocessing/calculate_converted_read_methylation_stats.py +0 -96
  116. smftools-0.1.3/src/smftools/preprocessing/calculate_coverage.py +0 -41
  117. smftools-0.1.3/src/smftools/preprocessing/calculate_read_length_stats.py +0 -86
  118. smftools-0.1.3/src/smftools/preprocessing/clean_NaN.py +0 -38
  119. smftools-0.1.3/src/smftools/preprocessing/invert_adata.py +0 -23
  120. smftools-0.1.3/src/smftools/preprocessing/load_sample_sheet.py +0 -24
  121. smftools-0.1.3/src/smftools/readwrite.py +0 -106
  122. smftools-0.1.3/src/smftools/tools/apply_HMM.py +0 -1
  123. smftools-0.1.3/src/smftools/tools/read_HMM.py +0 -1
  124. smftools-0.1.3/src/smftools/tools/train_HMM.py +0 -43
  125. {smftools-0.1.3 → smftools-0.1.6}/.gitattributes +0 -0
  126. {smftools-0.1.3 → smftools-0.1.6}/.gitignore +0 -0
  127. {smftools-0.1.3 → smftools-0.1.6}/.readthedocs.yaml +0 -0
  128. {smftools-0.1.3 → smftools-0.1.6}/CONTRIBUTING.md +0 -0
  129. {smftools-0.1.3 → smftools-0.1.6}/LICENSE +0 -0
  130. {smftools-0.1.3 → smftools-0.1.6}/docs/Makefile +0 -0
  131. {smftools-0.1.3 → smftools-0.1.6}/docs/make.bat +0 -0
  132. {smftools-0.1.3 → smftools-0.1.6}/docs/source/_static/converted_BAM_to_adata.png +0 -0
  133. {smftools-0.1.3 → smftools-0.1.6}/docs/source/_static/modkit_extract_to_adata.png +0 -0
  134. {smftools-0.1.3 → smftools-0.1.6}/docs/source/_static/smftools_informatics_diagram.pdf +0 -0
  135. {smftools-0.1.3 → smftools-0.1.6}/docs/source/_static/smftools_informatics_diagram.png +0 -0
  136. {smftools-0.1.3 → smftools-0.1.6}/docs/source/_static/smftools_preprocessing_diagram.png +0 -0
  137. {smftools-0.1.3 → smftools-0.1.6}/docs/source/_templates/tmp +0 -0
  138. {smftools-0.1.3 → smftools-0.1.6}/docs/source/api/datasets.md +0 -0
  139. {smftools-0.1.3 → smftools-0.1.6}/docs/source/api/index.md +0 -0
  140. {smftools-0.1.3 → smftools-0.1.6}/docs/source/api/informatics.md +0 -0
  141. {smftools-0.1.3 → smftools-0.1.6}/docs/source/api/preprocessing.md +0 -0
  142. {smftools-0.1.3 → smftools-0.1.6}/docs/source/api/tools.md +0 -0
  143. {smftools-0.1.3 → smftools-0.1.6}/docs/source/basic_usage.md +0 -0
  144. {smftools-0.1.3 → smftools-0.1.6}/docs/source/conf.py +0 -0
  145. {smftools-0.1.3 → smftools-0.1.6}/docs/source/contributors.md +0 -0
  146. {smftools-0.1.3 → smftools-0.1.6}/docs/source/dev/index.md +0 -0
  147. {smftools-0.1.3 → smftools-0.1.6}/docs/source/index.md +0 -0
  148. {smftools-0.1.3 → smftools-0.1.6}/docs/source/installation.md +0 -0
  149. {smftools-0.1.3 → smftools-0.1.6}/docs/source/references.bib +0 -0
  150. {smftools-0.1.3 → smftools-0.1.6}/docs/source/references.rst +0 -0
  151. {smftools-0.1.3 → smftools-0.1.6}/docs/source/release-notes/0.1.0.md +0 -0
  152. {smftools-0.1.3 → smftools-0.1.6}/docs/source/release-notes/index.md +0 -0
  153. {smftools-0.1.3 → smftools-0.1.6}/docs/source/requirements.txt +0 -0
  154. {smftools-0.1.3 → smftools-0.1.6}/docs/source/tutorials/index.md +0 -0
  155. {smftools-0.1.3 → smftools-0.1.6}/notebooks/Kissiov_and_McKenna_2025_example_notebook.ipynb +0 -0
  156. {smftools-0.1.3 → smftools-0.1.6}/notebooks/Kissiov_and_McKenna_2025_sample_sheet.csv +0 -0
  157. {smftools-0.1.3 → smftools-0.1.6}/sample_sheet.csv +0 -0
  158. {smftools-0.1.3/src → smftools-0.1.6}/smftools/_settings.py +0 -0
  159. {smftools-0.1.3/src → smftools-0.1.6}/smftools/datasets/F1_hybrid_NKG2A_enhander_promoter_GpC_conversion_SMF.h5ad.gz +0 -0
  160. {smftools-0.1.3/src → smftools-0.1.6}/smftools/datasets/F1_sample_sheet.csv +0 -0
  161. {smftools-0.1.3/src → smftools-0.1.6}/smftools/datasets/__init__.py +0 -0
  162. {smftools-0.1.3/src → smftools-0.1.6}/smftools/datasets/dCas9_m6A_invitro_kinetics.h5ad.gz +0 -0
  163. {smftools-0.1.3/src → smftools-0.1.6}/smftools/datasets/datasets.py +0 -0
  164. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/archived/bam_conversion.py +0 -0
  165. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/archived/bam_direct.py +0 -0
  166. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/archived/basecalls_to_adata.py +0 -0
  167. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/fast5_to_pod5.py +0 -0
  168. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/archived/informatics.py +0 -0
  169. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/archived/load_adata.py +0 -0
  170. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/bed_to_bigwig.py +0 -0
  171. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/complement_base_list.py +0 -0
  172. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/count_aligned_reads.py +0 -0
  173. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/extract_readnames_from_BAM.py +0 -0
  174. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/get_chromosome_lengths.py +0 -0
  175. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/get_native_references.py +0 -0
  176. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/index_fasta.py +0 -0
  177. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/make_dirs.py +0 -0
  178. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/make_modbed.py +0 -0
  179. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/modQC.py +0 -0
  180. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/helpers/separate_bam_by_bc.py +0 -0
  181. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/readwrite.py +0 -0
  182. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/subsample_fasta_from_bed.py +0 -0
  183. {smftools-0.1.3/src → smftools-0.1.6}/smftools/informatics/subsample_pod5.py +0 -0
  184. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/archives/preprocessing.py +0 -0
  185. {smftools-0.1.3/src/smftools/preprocessing → smftools-0.1.6/smftools/preprocessing/archives}/remove_duplicates.py +0 -0
  186. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/calculate_consensus.py +0 -0
  187. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/calculate_pairwise_hamming_distances.py +0 -0
  188. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/make_dirs.py +0 -0
  189. {smftools-0.1.3/src → smftools-0.1.6}/smftools/preprocessing/min_non_diagonal.py +0 -0
  190. /smftools-0.1.3/src/smftools/tools/subset_adata.py → /smftools-0.1.6/smftools/tools/archived/subset_adata_v1.py +0 -0
  191. {smftools-0.1.3/src/smftools/plotting → smftools-0.1.6/smftools/tools/evaluation}/__init__.py +0 -0
  192. {smftools-0.1.3/src/smftools/tools → smftools-0.1.6/smftools/tools/inference}/__init__.py +0 -0
  193. /smftools-0.1.3/src/smftools/tools/cluster.py → /smftools-0.1.6/smftools/tools/models/sklearn_models.py +0 -0
  194. {smftools-0.1.3 → smftools-0.1.6}/tests/datasets/test_datasets.py +0 -0
  195. {smftools-0.1.3 → smftools-0.1.6}/tests/informatics/helpers/test_LoadExperimentConfig.py +0 -0
  196. {smftools-0.1.3 → smftools-0.1.6}/tests/test_readwrite.py +0 -0
@@ -1,12 +1,32 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: smftools
3
- Version: 0.1.3
3
+ Version: 0.1.6
4
4
  Summary: Single Molecule Footprinting Analysis in Python.
5
5
  Project-URL: Source, https://github.com/jkmckenna/smftools
6
6
  Project-URL: Documentation, https://smftools.readthedocs.io/
7
7
  Author: Joseph McKenna
8
8
  Maintainer-email: Joseph McKenna <jkmckenna@berkeley.edu>
9
- License-Expression: MIT
9
+ License: MIT License
10
+
11
+ Copyright (c) 2024 jkmckenna
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ of this software and associated documentation files (the "Software"), to deal
15
+ in the Software without restriction, including without limitation the rights
16
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ copies of the Software, and to permit persons to whom the Software is
18
+ furnished to do so, subject to the following conditions:
19
+
20
+ The above copyright notice and this permission notice shall be included in all
21
+ copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
+ SOFTWARE.
10
30
  License-File: LICENSE
11
31
  Keywords: anndata,chromatin-accessibility,machine-learning,nanopore,protein-dna-binding,single-locus,single-molecule-footprinting
12
32
  Classifier: Development Status :: 2 - Pre-Alpha
@@ -26,12 +46,18 @@ Classifier: Topic :: Scientific/Engineering :: Visualization
26
46
  Requires-Python: >=3.9
27
47
  Requires-Dist: anndata>=0.10.0
28
48
  Requires-Dist: biopython>=1.79
29
- Requires-Dist: cython>=0.29.28
49
+ Requires-Dist: fastcluster
50
+ Requires-Dist: hydra-core
51
+ Requires-Dist: igraph
52
+ Requires-Dist: leidenalg
53
+ Requires-Dist: lightning
54
+ Requires-Dist: multiqc
30
55
  Requires-Dist: networkx>=3.2
31
56
  Requires-Dist: numpy<2,>=1.22.0
57
+ Requires-Dist: omegaconf
32
58
  Requires-Dist: pandas>=1.4.2
33
59
  Requires-Dist: pod5>=0.1.21
34
- Requires-Dist: pomegranate>1.0.0
60
+ Requires-Dist: pomegranate>=1.0.0
35
61
  Requires-Dist: pyfaidx>=0.8.0
36
62
  Requires-Dist: pysam>=0.19.1
37
63
  Requires-Dist: scanpy>=1.9
@@ -40,6 +66,7 @@ Requires-Dist: scipy>=1.7.3
40
66
  Requires-Dist: seaborn>=0.11
41
67
  Requires-Dist: torch>=1.9.0
42
68
  Requires-Dist: tqdm
69
+ Requires-Dist: wandb
43
70
  Provides-Extra: docs
44
71
  Requires-Dist: ipython>=7.20; extra == 'docs'
45
72
  Requires-Dist: matplotlib!=3.6.1; extra == 'docs'
@@ -67,7 +94,7 @@ Description-Content-Type: text/markdown
67
94
  A Python tool for processing raw sequencing data derived from single molecule footprinting experiments into [anndata](https://anndata.readthedocs.io/en/latest/) objects. Additional functionality for preprocessing, analysis, and visualization.
68
95
 
69
96
  ## Philosophy
70
- While most genomic data structures handle low-coverage data (<100X) along large references, smftools prioritizes high-coverage data (scalable to at least 1 million X coverage) of a few genomic loci at a time. This enables efficient data storage, rapid data operations, hierarchical metadata handling, seamless integration with various machine-learning packages, and ease of visualization. Furthermore, functionality is modularized, enabling analysis sessions to be saved, reloaded, and easily shared with collaborators. Analyses are centered around the [anndata](https://anndata.readthedocs.io/en/latest/) object, and are heavily inspired by the work conducted within the single-cell genomics community.
97
+ While most genomic data structures handle low-coverage data (<100X) along large references, smftools prioritizes high-coverage data (scalable to >1,000,000X coverage) of a few genomic loci at a time. This enables efficient data storage, rapid data operations, hierarchical metadata handling, seamless integration with various machine-learning packages, and ease of visualization. Furthermore, functionality is modularized, enabling analysis sessions to be saved, reloaded, and easily shared with collaborators. Analyses are centered around the [anndata](https://anndata.readthedocs.io/en/latest/) object, and are heavily inspired by the work conducted within the single-cell genomics community.
71
98
 
72
99
  ## Dependencies
73
100
  The following CLI tools need to be installed and configured before using the informatics (smftools.inform) module of smftools:
@@ -81,14 +108,20 @@ The following CLI tools need to be installed and configured before using the inf
81
108
  ## Modules
82
109
  ### Informatics: Processes raw Nanopore/Illumina data from SMF experiments into an AnnData object.
83
110
  ![](docs/source/_static/smftools_informatics_diagram.png)
84
- ### Preprocessing: Appends QC metrics to the AnnData object and perfroms filtering.
111
+ ### Preprocessing: Appends QC metrics to the AnnData object and performs filtering.
85
112
  ![](docs/source/_static/smftools_preprocessing_diagram.png)
86
- - Tools: Appends various analyses to the AnnData object.
87
- - Plotting: Visualization of analyses stored within the AnnData object.
113
+ ### Tools: Appends analyses to the AnnData object.
114
+ - Currently Includes: Position X Position correlation matrices, Hidden Markov Model feature detection, clustering, dimensionality reduction, peak calling, train/test workflows for various ML classifiers.
115
+ - To do: Additional ML methods for learning predictive single molecule features on condition labels: Autoencoders, Variational Autoencoders, Transformers.
116
+ ### Plotting: Visualization of analyses stored within the AnnData object.
117
+ - Most analyses appended to the adata object by a tools method have, or will have, an accompanying plotting method.
88
118
 
89
119
  ## Announcements
90
- ### 09/09/24 - The pre-alpha phase package ([smftools-0.1.1](https://pypi.org/project/smftools/))
120
+
121
+ ### 10/01/24 - More recent versions are being updated through github and are not currently on pypi, please install from source. Thank you!
122
+
123
+ ### 09/09/24 - The version 0.1.1 package ([smftools-0.1.1](https://pypi.org/project/smftools/)) is installable through pypi!
91
124
  The informatics module has been bumped to alpha-phase status. This module can deal with POD5s and unaligned BAMS from nanopore conversion and direct SMF experiments, as well as FASTQs from Illumina conversion SMF experiments. Primary output from this module is an AnnData object containing all relevant SMF data, which is compatible with all downstream smftools modules. The other modules are still in pre-alpha phase. Preprocessing, Tools, and Plotting modules should be promoted to alpha-phase within the next month or so.
92
125
 
93
- ### 08/30/24 - The pre-alpha phase package ([smftools-0.1.0](https://pypi.org/project/smftools/)) is installable through pypi!
94
- Currently, this package (smftools-0.1.0) is going through rapid improvement (dependency handling accross Linux and Mac OS, testing, documentation, debugging) and is still too early in development for standard use. The underlying functionality was originally developed as a collection of scripts for single molecule footprinting (SMF) experiments in our lab, but is being packaged/developed to facilitate the expansion of SMF to any lab that is interested in performing these styles of experiments/analyses. The alpha-phase package is expected to be available within a couple months, so stay tuned!
126
+ ### 08/30/24 - The version 0.1.0 package ([smftools-0.1.0](https://pypi.org/project/smftools/)) is installable through pypi!
127
+ Currently, this package (smftools-0.1.0) is going through rapid improvement (dependency handling accross Linux and Mac OS, testing, documentation, debugging) and is still too early in development for widespread use. The underlying functionality was originally developed as a collection of scripts for single molecule footprinting (SMF) experiments in our lab, but is being packaged/developed to facilitate the expansion of SMF to any lab that is interested in performing these styles of experiments/analyses. The alpha-phase package is expected to be available within a couple months, so stay tuned!
@@ -5,7 +5,7 @@
5
5
  A Python tool for processing raw sequencing data derived from single molecule footprinting experiments into [anndata](https://anndata.readthedocs.io/en/latest/) objects. Additional functionality for preprocessing, analysis, and visualization.
6
6
 
7
7
  ## Philosophy
8
- While most genomic data structures handle low-coverage data (<100X) along large references, smftools prioritizes high-coverage data (scalable to at least 1 million X coverage) of a few genomic loci at a time. This enables efficient data storage, rapid data operations, hierarchical metadata handling, seamless integration with various machine-learning packages, and ease of visualization. Furthermore, functionality is modularized, enabling analysis sessions to be saved, reloaded, and easily shared with collaborators. Analyses are centered around the [anndata](https://anndata.readthedocs.io/en/latest/) object, and are heavily inspired by the work conducted within the single-cell genomics community.
8
+ While most genomic data structures handle low-coverage data (<100X) along large references, smftools prioritizes high-coverage data (scalable to >1,000,000X coverage) of a few genomic loci at a time. This enables efficient data storage, rapid data operations, hierarchical metadata handling, seamless integration with various machine-learning packages, and ease of visualization. Furthermore, functionality is modularized, enabling analysis sessions to be saved, reloaded, and easily shared with collaborators. Analyses are centered around the [anndata](https://anndata.readthedocs.io/en/latest/) object, and are heavily inspired by the work conducted within the single-cell genomics community.
9
9
 
10
10
  ## Dependencies
11
11
  The following CLI tools need to be installed and configured before using the informatics (smftools.inform) module of smftools:
@@ -19,14 +19,20 @@ The following CLI tools need to be installed and configured before using the inf
19
19
  ## Modules
20
20
  ### Informatics: Processes raw Nanopore/Illumina data from SMF experiments into an AnnData object.
21
21
  ![](docs/source/_static/smftools_informatics_diagram.png)
22
- ### Preprocessing: Appends QC metrics to the AnnData object and perfroms filtering.
22
+ ### Preprocessing: Appends QC metrics to the AnnData object and performs filtering.
23
23
  ![](docs/source/_static/smftools_preprocessing_diagram.png)
24
- - Tools: Appends various analyses to the AnnData object.
25
- - Plotting: Visualization of analyses stored within the AnnData object.
24
+ ### Tools: Appends analyses to the AnnData object.
25
+ - Currently Includes: Position X Position correlation matrices, Hidden Markov Model feature detection, clustering, dimensionality reduction, peak calling, train/test workflows for various ML classifiers.
26
+ - To do: Additional ML methods for learning predictive single molecule features on condition labels: Autoencoders, Variational Autoencoders, Transformers.
27
+ ### Plotting: Visualization of analyses stored within the AnnData object.
28
+ - Most analyses appended to the adata object by a tools method have, or will have, an accompanying plotting method.
26
29
 
27
30
  ## Announcements
28
- ### 09/09/24 - The pre-alpha phase package ([smftools-0.1.1](https://pypi.org/project/smftools/))
31
+
32
+ ### 10/01/24 - More recent versions are being updated through github and are not currently on pypi, please install from source. Thank you!
33
+
34
+ ### 09/09/24 - The version 0.1.1 package ([smftools-0.1.1](https://pypi.org/project/smftools/)) is installable through pypi!
29
35
  The informatics module has been bumped to alpha-phase status. This module can deal with POD5s and unaligned BAMS from nanopore conversion and direct SMF experiments, as well as FASTQs from Illumina conversion SMF experiments. Primary output from this module is an AnnData object containing all relevant SMF data, which is compatible with all downstream smftools modules. The other modules are still in pre-alpha phase. Preprocessing, Tools, and Plotting modules should be promoted to alpha-phase within the next month or so.
30
36
 
31
- ### 08/30/24 - The pre-alpha phase package ([smftools-0.1.0](https://pypi.org/project/smftools/)) is installable through pypi!
32
- Currently, this package (smftools-0.1.0) is going through rapid improvement (dependency handling accross Linux and Mac OS, testing, documentation, debugging) and is still too early in development for standard use. The underlying functionality was originally developed as a collection of scripts for single molecule footprinting (SMF) experiments in our lab, but is being packaged/developed to facilitate the expansion of SMF to any lab that is interested in performing these styles of experiments/analyses. The alpha-phase package is expected to be available within a couple months, so stay tuned!
37
+ ### 08/30/24 - The version 0.1.0 package ([smftools-0.1.0](https://pypi.org/project/smftools/)) is installable through pypi!
38
+ Currently, this package (smftools-0.1.0) is going through rapid improvement (dependency handling accross Linux and Mac OS, testing, documentation, debugging) and is still too early in development for widespread use. The underlying functionality was originally developed as a collection of scripts for single molecule footprinting (SMF) experiments in our lab, but is being packaged/developed to facilitate the expansion of SMF to any lab that is interested in performing these styles of experiments/analyses. The alpha-phase package is expected to be available within a couple months, so stay tuned!
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 306 304"><g id="Ylu31t.tif"><image id="Layer_1-2" width="306" height="304" xlink:href="data:image/png;base64,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"/></g></svg>
@@ -14,4 +14,6 @@ m5C_threshold,0.8,Minimum probability to flag m5C as True,,float
14
14
  hm5C_threshold,0.8,Minimum probability to flag hm5C as True,,float
15
15
  mod_list,[5mC_5hmC],Modified base names for Dorado,"""6mA"", ""5mC_5hmC""",list
16
16
  batch_size,4,number of samples to analyze at a time,,int
17
- conversion_types,[5mC],Types of modification types to use in conversion SMF,"5mC', '6mA'",list
17
+ conversion_types,[5mC],Types of modification types to use in conversion SMF,"5mC', '6mA'",list
18
+ barcode_both_ends,TRUE,whether to require both ends of a read to be barcoded for demultiplexing,,bool
19
+ trim,FALSE,whether to trim barcodes and adapters from reads during demultiplexing,,bool
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
  name = "smftools"
7
7
  description = "Single Molecule Footprinting Analysis in Python."
8
8
  requires-python = ">=3.9"
9
- license = "MIT"
9
+ license = { file = "LICENSE" }
10
10
  authors = [
11
11
  {name = "Joseph McKenna"}
12
12
  ]
@@ -42,12 +42,18 @@ classifiers = [
42
42
  dependencies = [
43
43
  "anndata>=0.10.0",
44
44
  "biopython>=1.79",
45
- "Cython>=0.29.28",
45
+ "fastcluster",
46
+ "hydra-core",
47
+ "igraph",
48
+ "leidenalg",
49
+ "lightning",
50
+ "multiqc",
46
51
  "networkx>=3.2",
47
52
  "numpy>=1.22.0,<2",
53
+ "omegaconf",
48
54
  "pandas>=1.4.2",
49
55
  "pod5>=0.1.21",
50
- "pomegranate>1.0.0",
56
+ "pomegranate>=1.0.0",
51
57
  "pyfaidx>=0.8.0",
52
58
  "pysam>=0.19.1",
53
59
  "scanpy>=1.9",
@@ -55,7 +61,8 @@ dependencies = [
55
61
  "scipy>=1.7.3",
56
62
  "seaborn>=0.11",
57
63
  "torch>=1.9.0",
58
- "tqdm"
64
+ "tqdm",
65
+ "wandb"
59
66
  ]
60
67
  dynamic = ["version"]
61
68
 
@@ -86,8 +93,11 @@ docs = [
86
93
  "setuptools"
87
94
  ]
88
95
 
96
+ [tool.hatch.build]
97
+ sources = ["src"]
98
+
89
99
  [tool.hatch.build.targets.wheel]
90
- packages = ["src/smftools"]
100
+ packages = ["smftools"]
91
101
 
92
102
  [tool.hatch.version]
93
103
  path = "src/smftools/_version.py"
@@ -1,12 +1,20 @@
1
1
  # Essential packages
2
2
  anndata>=0.10.0
3
3
  biopython>=1.79
4
- Cython>=0.29.28
4
+ fastcluster
5
+ hydra-core
6
+ leidenalg
7
+ lightning
8
+ igraph
9
+ leidenalg
10
+ lightning
11
+ multiqc
5
12
  networkx>=3.2
6
13
  numpy>=1.22.0,<2
14
+ omegaconf
7
15
  pandas>=1.4.2
8
- pomegranate>1.0.0
9
16
  pod5>=0.1.21
17
+ pomegranate>=1.0.0
10
18
  pyfaidx>=0.8.0
11
19
  pysam>=0.19.1
12
20
  scanpy>=1.9
@@ -15,3 +23,4 @@ scipy>=1.7.3
15
23
  seaborn>=0.11
16
24
  torch>=1.9.0
17
25
  tqdm
26
+ wandb
@@ -8,6 +8,7 @@ from . import preprocessing as pp
8
8
  from . import tools as tl
9
9
  from . import plotting as pl
10
10
  from . import readwrite, datasets
11
+ from .readwrite import adata_to_df, safe_write_h5ad, merge_barcoded_anndatas
11
12
 
12
13
 
13
14
  from importlib.metadata import version
@@ -16,10 +17,13 @@ package_name = "smftools"
16
17
  __version__ = version(package_name)
17
18
 
18
19
  __all__ = [
20
+ "adata_to_df",
19
21
  "inform",
20
22
  "pp",
21
23
  "tl",
22
24
  "pl",
23
25
  "readwrite",
24
- "datasets"
26
+ "datasets",
27
+ "safe_write_h5ad",
28
+ "merge_barcoded_anndatas"
25
29
  ]
@@ -0,0 +1 @@
1
+ __version__ = "0.1.6"
@@ -1,4 +1,5 @@
1
1
  from . import helpers
2
+ from .basecall_pod5s import basecall_pod5s
2
3
  from .load_adata import load_adata
3
4
  from .subsample_fasta_from_bed import subsample_fasta_from_bed
4
5
  from .subsample_pod5 import subsample_pod5
@@ -6,6 +7,7 @@ from .fast5_to_pod5 import fast5_to_pod5
6
7
 
7
8
 
8
9
  __all__ = [
10
+ "basecall_pod5s",
9
11
  "load_adata",
10
12
  "subsample_fasta_from_bed",
11
13
  "subsample_pod5",
@@ -0,0 +1,29 @@
1
+ import pysam
2
+ import sys
3
+
4
+ def extract_reads(bam_file_path, num_reads=10):
5
+ # Open the BAM file
6
+ bam_file = pysam.AlignmentFile(bam_file_path, "rb")
7
+
8
+ # Iterate through the first 'num_reads' reads and print the sequences
9
+ count = 0
10
+ for read in bam_file:
11
+ print(f"Read {count + 1}: {read.query_sequence}")
12
+ count += 1
13
+ if count >= num_reads:
14
+ break
15
+
16
+ # Close the BAM file
17
+ bam_file.close()
18
+
19
+ if __name__ == "__main__":
20
+ # Ensure a BAM file path is provided as a command line argument
21
+ if len(sys.argv) < 2:
22
+ print("Usage: python extract_reads.py <path_to_bam_file>")
23
+ sys.exit(1)
24
+
25
+ # Get the BAM file path from command line arguments
26
+ bam_file_path = sys.argv[1]
27
+
28
+ # Call the function to extract the first 10 reads
29
+ extract_reads(bam_file_path)
@@ -0,0 +1,80 @@
1
+ # basecall_pod5s
2
+
3
+ def basecall_pod5s(config_path):
4
+ """
5
+ Basecall from pod5s given a config file.
6
+
7
+ Parameters:
8
+ config_path (str): File path to the basecall configuration file
9
+
10
+ Returns:
11
+ None
12
+ """
13
+ # Lazy importing of packages
14
+ from .helpers import LoadExperimentConfig, make_dirs, canoncall, modcall
15
+ from .fast5_to_pod5 import fast5_to_pod5
16
+ import os
17
+ from pathlib import Path
18
+
19
+ # Default params
20
+ bam_suffix = '.bam' # If different, change from here.
21
+
22
+ # Load experiment config parameters into global variables
23
+ experiment_config = LoadExperimentConfig(config_path)
24
+ var_dict = experiment_config.var_dict
25
+
26
+ # These below variables will point to default_value if they are empty in the experiment_config.csv or if the variable is fully omitted from the csv.
27
+ default_value = None
28
+
29
+ # General config variable init
30
+ input_data_path = var_dict.get('input_data_path', default_value) # Path to a directory of POD5s/FAST5s or to a BAM/FASTQ file. Necessary.
31
+ output_directory = var_dict.get('output_directory', default_value) # Path to the output directory to make for the analysis. Necessary.
32
+ model = var_dict.get('model', default_value) # needed for dorado basecaller
33
+ barcode_kit = var_dict.get('barcode_kit', default_value) # needed for dorado basecaller
34
+ barcode_both_ends = var_dict.get('barcode_both_ends', default_value) # dorado demultiplexing
35
+ trim = var_dict.get('trim', default_value) # dorado adapter and barcode removal
36
+ device = var_dict.get('device', 'auto')
37
+
38
+ # Modified basecalling specific variable init
39
+ filter_threshold = var_dict.get('filter_threshold', default_value)
40
+ m6A_threshold = var_dict.get('m6A_threshold', default_value)
41
+ m5C_threshold = var_dict.get('m5C_threshold', default_value)
42
+ hm5C_threshold = var_dict.get('hm5C_threshold', default_value)
43
+ thresholds = [filter_threshold, m6A_threshold, m5C_threshold, hm5C_threshold]
44
+ mod_list = var_dict.get('mod_list', default_value)
45
+
46
+ # Make initial output directory
47
+ make_dirs([output_directory])
48
+ os.chdir(output_directory)
49
+
50
+ # Get the input filetype
51
+ if Path(input_data_path).is_file():
52
+ input_data_filetype = '.' + os.path.basename(input_data_path).split('.')[1].lower()
53
+ input_is_pod5 = input_data_filetype in ['.pod5','.p5']
54
+ input_is_fast5 = input_data_filetype in ['.fast5','.f5']
55
+
56
+ elif Path(input_data_path).is_dir():
57
+ # Get the file names in the input data dir
58
+ input_files = os.listdir(input_data_path)
59
+ input_is_pod5 = sum([True for file in input_files if '.pod5' in file or '.p5' in file])
60
+ input_is_fast5 = sum([True for file in input_files if '.fast5' in file or '.f5' in file])
61
+
62
+ # If the input files are not pod5 files, and they are fast5 files, convert the files to a pod5 file before proceeding.
63
+ if input_is_fast5 and not input_is_pod5:
64
+ # take the input directory of fast5 files and write out a single pod5 file into the output directory.
65
+ output_pod5 = os.path.join(output_directory, 'FAST5s_to_POD5.pod5')
66
+ print(f'Input directory contains fast5 files, converting them and concatenating into a single pod5 file in the {output_pod5}')
67
+ fast5_to_pod5(input_data_path, output_pod5)
68
+ # Reassign the pod5_dir variable to point to the new pod5 file.
69
+ input_data_path = output_pod5
70
+
71
+ model_basename = os.path.basename(model)
72
+ model_basename = model_basename.replace('.', '_')
73
+
74
+ if mod_list:
75
+ mod_string = "_".join(mod_list)
76
+ bam=f"{output_directory}/{model_basename}_{mod_string}_calls"
77
+ modcall(model, input_data_path, barcode_kit, mod_list, bam, bam_suffix, barcode_both_ends, trim, device)
78
+ else:
79
+ bam=f"{output_directory}/{model_basename}_canonical_basecalls"
80
+ canoncall(model, input_data_path, barcode_kit, bam, bam_suffix, barcode_both_ends, trim, device)