smftools 0.1.7__py3-none-any.whl → 0.2.3__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.
- smftools/__init__.py +7 -6
- smftools/_version.py +1 -1
- smftools/cli/cli_flows.py +94 -0
- smftools/cli/hmm_adata.py +338 -0
- smftools/cli/load_adata.py +577 -0
- smftools/cli/preprocess_adata.py +363 -0
- smftools/cli/spatial_adata.py +564 -0
- smftools/cli_entry.py +435 -0
- smftools/config/__init__.py +1 -0
- smftools/config/conversion.yaml +38 -0
- smftools/config/deaminase.yaml +61 -0
- smftools/config/default.yaml +264 -0
- smftools/config/direct.yaml +41 -0
- smftools/config/discover_input_files.py +115 -0
- smftools/config/experiment_config.py +1288 -0
- smftools/hmm/HMM.py +1576 -0
- smftools/hmm/__init__.py +20 -0
- smftools/{tools → hmm}/apply_hmm_batched.py +8 -7
- smftools/hmm/call_hmm_peaks.py +106 -0
- smftools/{tools → hmm}/display_hmm.py +3 -3
- smftools/{tools → hmm}/nucleosome_hmm_refinement.py +2 -2
- smftools/{tools → hmm}/train_hmm.py +1 -1
- smftools/informatics/__init__.py +13 -9
- smftools/informatics/archived/deaminase_smf.py +132 -0
- smftools/informatics/archived/fast5_to_pod5.py +43 -0
- smftools/informatics/archived/helpers/archived/__init__.py +71 -0
- smftools/informatics/archived/helpers/archived/align_and_sort_BAM.py +126 -0
- smftools/informatics/archived/helpers/archived/aligned_BAM_to_bed.py +87 -0
- smftools/informatics/archived/helpers/archived/bam_qc.py +213 -0
- smftools/informatics/archived/helpers/archived/bed_to_bigwig.py +90 -0
- smftools/informatics/archived/helpers/archived/concatenate_fastqs_to_bam.py +259 -0
- smftools/informatics/{helpers → archived/helpers/archived}/count_aligned_reads.py +2 -2
- smftools/informatics/{helpers → archived/helpers/archived}/demux_and_index_BAM.py +8 -10
- smftools/informatics/{helpers → archived/helpers/archived}/extract_base_identities.py +30 -4
- smftools/informatics/{helpers → archived/helpers/archived}/extract_mods.py +15 -13
- smftools/informatics/{helpers → archived/helpers/archived}/extract_read_features_from_bam.py +4 -2
- smftools/informatics/{helpers → archived/helpers/archived}/find_conversion_sites.py +5 -4
- smftools/informatics/{helpers → archived/helpers/archived}/generate_converted_FASTA.py +2 -0
- smftools/informatics/{helpers → archived/helpers/archived}/get_chromosome_lengths.py +9 -8
- smftools/informatics/archived/helpers/archived/index_fasta.py +24 -0
- smftools/informatics/{helpers → archived/helpers/archived}/make_modbed.py +1 -2
- smftools/informatics/{helpers → archived/helpers/archived}/modQC.py +2 -2
- smftools/informatics/archived/helpers/archived/plot_bed_histograms.py +250 -0
- smftools/informatics/{helpers → archived/helpers/archived}/separate_bam_by_bc.py +8 -7
- smftools/informatics/{helpers → archived/helpers/archived}/split_and_index_BAM.py +8 -12
- smftools/informatics/archived/subsample_fasta_from_bed.py +49 -0
- smftools/informatics/bam_functions.py +812 -0
- smftools/informatics/basecalling.py +67 -0
- smftools/informatics/bed_functions.py +366 -0
- smftools/informatics/binarize_converted_base_identities.py +172 -0
- smftools/informatics/{helpers/converted_BAM_to_adata_II.py → converted_BAM_to_adata.py} +198 -50
- smftools/informatics/fasta_functions.py +255 -0
- smftools/informatics/h5ad_functions.py +197 -0
- smftools/informatics/{helpers/modkit_extract_to_adata.py → modkit_extract_to_adata.py} +147 -61
- smftools/informatics/modkit_functions.py +129 -0
- smftools/informatics/ohe.py +160 -0
- smftools/informatics/pod5_functions.py +224 -0
- smftools/informatics/{helpers/run_multiqc.py → run_multiqc.py} +5 -2
- smftools/machine_learning/__init__.py +12 -0
- smftools/machine_learning/data/__init__.py +2 -0
- smftools/machine_learning/data/anndata_data_module.py +234 -0
- smftools/machine_learning/evaluation/__init__.py +2 -0
- smftools/machine_learning/evaluation/eval_utils.py +31 -0
- smftools/machine_learning/evaluation/evaluators.py +223 -0
- smftools/machine_learning/inference/__init__.py +3 -0
- smftools/machine_learning/inference/inference_utils.py +27 -0
- smftools/machine_learning/inference/lightning_inference.py +68 -0
- smftools/machine_learning/inference/sklearn_inference.py +55 -0
- smftools/machine_learning/inference/sliding_window_inference.py +114 -0
- smftools/machine_learning/models/base.py +295 -0
- smftools/machine_learning/models/cnn.py +138 -0
- smftools/machine_learning/models/lightning_base.py +345 -0
- smftools/machine_learning/models/mlp.py +26 -0
- smftools/{tools → machine_learning}/models/positional.py +3 -2
- smftools/{tools → machine_learning}/models/rnn.py +2 -1
- smftools/machine_learning/models/sklearn_models.py +273 -0
- smftools/machine_learning/models/transformer.py +303 -0
- smftools/machine_learning/training/__init__.py +2 -0
- smftools/machine_learning/training/train_lightning_model.py +135 -0
- smftools/machine_learning/training/train_sklearn_model.py +114 -0
- smftools/plotting/__init__.py +4 -1
- smftools/plotting/autocorrelation_plotting.py +609 -0
- smftools/plotting/general_plotting.py +1292 -140
- smftools/plotting/hmm_plotting.py +260 -0
- smftools/plotting/qc_plotting.py +270 -0
- smftools/preprocessing/__init__.py +15 -8
- smftools/preprocessing/add_read_length_and_mapping_qc.py +129 -0
- smftools/preprocessing/append_base_context.py +122 -0
- smftools/preprocessing/append_binary_layer_by_base_context.py +143 -0
- smftools/preprocessing/binarize.py +17 -0
- smftools/preprocessing/binarize_on_Youden.py +2 -2
- smftools/preprocessing/calculate_complexity_II.py +248 -0
- smftools/preprocessing/calculate_coverage.py +10 -1
- smftools/preprocessing/calculate_position_Youden.py +1 -1
- smftools/preprocessing/calculate_read_modification_stats.py +101 -0
- smftools/preprocessing/clean_NaN.py +17 -1
- smftools/preprocessing/filter_reads_on_length_quality_mapping.py +158 -0
- smftools/preprocessing/filter_reads_on_modification_thresholds.py +352 -0
- smftools/preprocessing/flag_duplicate_reads.py +1326 -124
- smftools/preprocessing/invert_adata.py +12 -5
- smftools/preprocessing/load_sample_sheet.py +19 -4
- smftools/readwrite.py +1021 -89
- smftools/tools/__init__.py +3 -32
- smftools/tools/calculate_umap.py +5 -5
- smftools/tools/general_tools.py +3 -3
- smftools/tools/position_stats.py +468 -106
- smftools/tools/read_stats.py +115 -1
- smftools/tools/spatial_autocorrelation.py +562 -0
- {smftools-0.1.7.dist-info → smftools-0.2.3.dist-info}/METADATA +14 -9
- smftools-0.2.3.dist-info/RECORD +173 -0
- smftools-0.2.3.dist-info/entry_points.txt +2 -0
- smftools/informatics/fast5_to_pod5.py +0 -21
- smftools/informatics/helpers/LoadExperimentConfig.py +0 -75
- smftools/informatics/helpers/__init__.py +0 -74
- smftools/informatics/helpers/align_and_sort_BAM.py +0 -59
- smftools/informatics/helpers/aligned_BAM_to_bed.py +0 -74
- smftools/informatics/helpers/bam_qc.py +0 -66
- smftools/informatics/helpers/bed_to_bigwig.py +0 -39
- smftools/informatics/helpers/binarize_converted_base_identities.py +0 -79
- smftools/informatics/helpers/concatenate_fastqs_to_bam.py +0 -55
- smftools/informatics/helpers/index_fasta.py +0 -12
- smftools/informatics/helpers/make_dirs.py +0 -21
- smftools/informatics/helpers/plot_read_length_and_coverage_histograms.py +0 -53
- smftools/informatics/load_adata.py +0 -182
- smftools/informatics/readwrite.py +0 -106
- smftools/informatics/subsample_fasta_from_bed.py +0 -47
- smftools/preprocessing/append_C_context.py +0 -82
- smftools/preprocessing/calculate_converted_read_methylation_stats.py +0 -94
- smftools/preprocessing/filter_converted_reads_on_methylation.py +0 -44
- smftools/preprocessing/filter_reads_on_length.py +0 -51
- smftools/tools/call_hmm_peaks.py +0 -105
- smftools/tools/data/__init__.py +0 -2
- smftools/tools/data/anndata_data_module.py +0 -90
- smftools/tools/inference/__init__.py +0 -1
- smftools/tools/inference/lightning_inference.py +0 -41
- smftools/tools/models/base.py +0 -14
- smftools/tools/models/cnn.py +0 -34
- smftools/tools/models/lightning_base.py +0 -41
- smftools/tools/models/mlp.py +0 -17
- smftools/tools/models/sklearn_models.py +0 -40
- smftools/tools/models/transformer.py +0 -133
- smftools/tools/training/__init__.py +0 -1
- smftools/tools/training/train_lightning_model.py +0 -47
- smftools-0.1.7.dist-info/RECORD +0 -136
- /smftools/{tools/evaluation → cli}/__init__.py +0 -0
- /smftools/{tools → hmm}/calculate_distances.py +0 -0
- /smftools/{tools → hmm}/hmm_readwrite.py +0 -0
- /smftools/informatics/{basecall_pod5s.py → archived/basecall_pod5s.py} +0 -0
- /smftools/informatics/{conversion_smf.py → archived/conversion_smf.py} +0 -0
- /smftools/informatics/{direct_smf.py → archived/direct_smf.py} +0 -0
- /smftools/informatics/{helpers → archived/helpers/archived}/canoncall.py +0 -0
- /smftools/informatics/{helpers → archived/helpers/archived}/converted_BAM_to_adata.py +0 -0
- /smftools/informatics/{helpers → archived/helpers/archived}/extract_read_lengths_from_bed.py +0 -0
- /smftools/informatics/{helpers → archived/helpers/archived}/extract_readnames_from_BAM.py +0 -0
- /smftools/informatics/{helpers → archived/helpers/archived}/get_native_references.py +0 -0
- /smftools/informatics/{helpers → archived/helpers}/archived/informatics.py +0 -0
- /smftools/informatics/{helpers → archived/helpers}/archived/load_adata.py +0 -0
- /smftools/informatics/{helpers → archived/helpers/archived}/modcall.py +0 -0
- /smftools/informatics/{helpers → archived/helpers/archived}/ohe_batching.py +0 -0
- /smftools/informatics/{helpers → archived/helpers/archived}/ohe_layers_decode.py +0 -0
- /smftools/informatics/{helpers → archived/helpers/archived}/one_hot_decode.py +0 -0
- /smftools/informatics/{helpers → archived/helpers/archived}/one_hot_encode.py +0 -0
- /smftools/informatics/{subsample_pod5.py → archived/subsample_pod5.py} +0 -0
- /smftools/informatics/{helpers/complement_base_list.py → complement_base_list.py} +0 -0
- /smftools/{tools → machine_learning}/data/preprocessing.py +0 -0
- /smftools/{tools → machine_learning}/models/__init__.py +0 -0
- /smftools/{tools → machine_learning}/models/wrappers.py +0 -0
- /smftools/{tools → machine_learning}/utils/__init__.py +0 -0
- /smftools/{tools → machine_learning}/utils/device.py +0 -0
- /smftools/{tools → machine_learning}/utils/grl.py +0 -0
- /smftools/tools/{apply_hmm.py → archived/apply_hmm.py} +0 -0
- /smftools/tools/{classifiers.py → archived/classifiers.py} +0 -0
- {smftools-0.1.7.dist-info → smftools-0.2.3.dist-info}/WHEEL +0 -0
- {smftools-0.1.7.dist-info → smftools-0.2.3.dist-info}/licenses/LICENSE +0 -0
smftools/tools/__init__.py
CHANGED
|
@@ -1,49 +1,20 @@
|
|
|
1
|
-
from .
|
|
2
|
-
from .apply_hmm_batched import apply_hmm_batched
|
|
3
|
-
from .position_stats import calculate_relative_risk_on_activity, compute_positionwise_statistic
|
|
4
|
-
from .calculate_distances import calculate_distances
|
|
1
|
+
from .position_stats import calculate_relative_risk_on_activity, compute_positionwise_statistics
|
|
5
2
|
from .calculate_umap import calculate_umap
|
|
6
|
-
from .call_hmm_peaks import call_hmm_peaks
|
|
7
|
-
from .classifiers import run_training_loop, run_inference, evaluate_models_by_subgroup, prepare_melted_model_data, sliding_window_train_test
|
|
8
3
|
from .cluster_adata_on_methylation import cluster_adata_on_methylation
|
|
9
|
-
from .display_hmm import display_hmm
|
|
10
4
|
from .general_tools import create_nan_mask_from_X, combine_layers, create_nan_or_non_gpc_mask
|
|
11
|
-
from .hmm_readwrite import load_hmm, save_hmm
|
|
12
|
-
from .nucleosome_hmm_refinement import refine_nucleosome_calls, infer_nucleosomes_in_large_bound
|
|
13
5
|
from .read_stats import calculate_row_entropy
|
|
6
|
+
from .spatial_autocorrelation import *
|
|
14
7
|
from .subset_adata import subset_adata
|
|
15
|
-
from .train_hmm import train_hmm
|
|
16
8
|
|
|
17
|
-
from . import models
|
|
18
|
-
from . import data
|
|
19
|
-
from . import utils
|
|
20
|
-
from . import evaluation
|
|
21
|
-
from . import inference
|
|
22
|
-
from . import training
|
|
23
9
|
|
|
24
10
|
__all__ = [
|
|
25
|
-
"
|
|
26
|
-
"apply_hmm_batched",
|
|
27
|
-
"calculate_distances",
|
|
28
|
-
"compute_positionwise_statistic",
|
|
11
|
+
"compute_positionwise_statistics",
|
|
29
12
|
"calculate_row_entropy",
|
|
30
13
|
"calculate_umap",
|
|
31
14
|
"calculate_relative_risk_on_activity",
|
|
32
|
-
"call_hmm_peaks",
|
|
33
15
|
"cluster_adata_on_methylation",
|
|
34
16
|
"create_nan_mask_from_X",
|
|
35
17
|
"create_nan_or_non_gpc_mask",
|
|
36
18
|
"combine_layers",
|
|
37
|
-
"display_hmm",
|
|
38
|
-
"evaluate_models_by_subgroup",
|
|
39
|
-
"load_hmm",
|
|
40
|
-
"prepare_melted_model_data",
|
|
41
|
-
"refine_nucleosome_calls",
|
|
42
|
-
"infer_nucleosomes_in_large_bound",
|
|
43
|
-
"run_training_loop",
|
|
44
|
-
"run_inference",
|
|
45
|
-
"save_hmm",
|
|
46
|
-
"sliding_window_train_test"
|
|
47
19
|
"subset_adata",
|
|
48
|
-
"train_hmm"
|
|
49
20
|
]
|
smftools/tools/calculate_umap.py
CHANGED
|
@@ -10,10 +10,10 @@ def calculate_umap(adata, layer='nan_half', var_filters=None, n_pcs=15, knn_neig
|
|
|
10
10
|
if var_filters:
|
|
11
11
|
subset_mask = np.logical_or.reduce([adata.var[f].values for f in var_filters])
|
|
12
12
|
adata_subset = adata[:, subset_mask].copy()
|
|
13
|
-
print(f"
|
|
13
|
+
print(f"Subsetting adata: Retained {adata_subset.shape[1]} features based on filters {var_filters}")
|
|
14
14
|
else:
|
|
15
15
|
adata_subset = adata.copy()
|
|
16
|
-
print("
|
|
16
|
+
print("No var filters provided. Using all features.")
|
|
17
17
|
|
|
18
18
|
# Step 2: NaN handling inside layer
|
|
19
19
|
if layer:
|
|
@@ -24,9 +24,9 @@ def calculate_umap(adata, layer='nan_half', var_filters=None, n_pcs=15, knn_neig
|
|
|
24
24
|
data = np.nan_to_num(data, nan=0.5)
|
|
25
25
|
adata_subset.layers[layer] = data
|
|
26
26
|
else:
|
|
27
|
-
print("
|
|
27
|
+
print("No NaNs detected.")
|
|
28
28
|
else:
|
|
29
|
-
print("
|
|
29
|
+
print("Sparse matrix detected; skipping NaN check (sparse formats typically do not store NaNs).")
|
|
30
30
|
|
|
31
31
|
# Step 3: PCA + neighbors + UMAP on subset
|
|
32
32
|
if "X_umap" not in adata_subset.obsm or overwrite:
|
|
@@ -57,6 +57,6 @@ def calculate_umap(adata, layer='nan_half', var_filters=None, n_pcs=15, knn_neig
|
|
|
57
57
|
adata.varm["PCs"] = pc_matrix
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
print(f"
|
|
60
|
+
print(f"Stored: adata.obsm['X_pca'] and adata.obsm['X_umap']")
|
|
61
61
|
|
|
62
62
|
return adata
|
smftools/tools/general_tools.py
CHANGED
|
@@ -5,7 +5,7 @@ def create_nan_mask_from_X(adata, new_layer_name="nan_mask"):
|
|
|
5
5
|
import numpy as np
|
|
6
6
|
nan_mask = np.isnan(adata.X).astype(int)
|
|
7
7
|
adata.layers[new_layer_name] = nan_mask
|
|
8
|
-
print(f"
|
|
8
|
+
print(f"Created '{new_layer_name}' layer based on NaNs in adata.X")
|
|
9
9
|
return adata
|
|
10
10
|
|
|
11
11
|
def create_nan_or_non_gpc_mask(adata, obs_column, new_layer_name="nan_or_non_gpc_mask"):
|
|
@@ -22,7 +22,7 @@ def create_nan_or_non_gpc_mask(adata, obs_column, new_layer_name="nan_or_non_gpc
|
|
|
22
22
|
mask = np.maximum(nan_mask, combined_mask)
|
|
23
23
|
adata.layers[new_layer_name] = mask
|
|
24
24
|
|
|
25
|
-
print(f"
|
|
25
|
+
print(f"Created '{new_layer_name}' layer based on NaNs in adata.X and non-GpC regions using {obs_column}")
|
|
26
26
|
return adata
|
|
27
27
|
|
|
28
28
|
def combine_layers(adata, input_layers, output_layer, negative_mask=None, values=None, binary_mode=False):
|
|
@@ -64,6 +64,6 @@ def combine_layers(adata, input_layers, output_layer, negative_mask=None, values
|
|
|
64
64
|
combined[mask == 0] = 0
|
|
65
65
|
|
|
66
66
|
adata.layers[output_layer] = combined
|
|
67
|
-
print(f"
|
|
67
|
+
print(f"Combined layers into {output_layer} {'(binary)' if binary_mode else f'with values {values}'}")
|
|
68
68
|
|
|
69
69
|
return adata
|