offtracker 2.11.2__zip → 2.11.5__zip
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.
- {offtracker-2.11.2/offtracker.egg-info → offtracker-2.11.5}/PKG-INFO +1 -1
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/_version.py +3 -2
- {offtracker-2.11.2 → offtracker-2.11.5/offtracker.egg-info}/PKG-INFO +1 -1
- {offtracker-2.11.2 → offtracker-2.11.5}/scripts/offtracker_analysis.py +30 -27
- {offtracker-2.11.2 → offtracker-2.11.5}/scripts/offtracker_candidates.py +8 -10
- {offtracker-2.11.2 → offtracker-2.11.5}/LICENSE.txt +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/MANIFEST.in +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/README.md +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/X_offplot.py +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/X_offtracker.py +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/X_sequence.py +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/__init__.py +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/snakefile/Snakefile_QC.smk +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/snakefile/Snakefile_offtracker.smk +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/utility/1.1_bed2fr.py +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/utility/1.3_bdg_normalize_v4.0.py +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/utility/bedGraphToBigWig +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/utility/hg38.chrom.sizes +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/utility/mm10.chrom.sizes +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/utility/offtracker_blacklist_hg38.merged.bed +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker/utility/offtracker_blacklist_mm10.merged.bed +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker.egg-info/SOURCES.txt +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker.egg-info/dependency_links.txt +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker.egg-info/requires.txt +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/offtracker.egg-info/top_level.txt +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/scripts/offtracker_config.py +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/scripts/offtracker_init.py +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/scripts/offtracker_plot.py +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/scripts/offtracker_qc.py +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/setup.cfg +0 -0
- {offtracker-2.11.2 → offtracker-2.11.5}/setup.py +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
__version__ = "2.11.
|
|
1
|
+
__version__ = "2.11.5"
|
|
2
2
|
# 2023.08.11. v1.1.0 adding a option for not normalizing the bw file
|
|
3
3
|
# 2023.10.26. v1.9.0 prerelease for v2.0
|
|
4
4
|
# 2023.10.27. v2.0.0 大更新,还没微调
|
|
@@ -38,4 +38,5 @@ __version__ = "2.11.2"
|
|
|
38
38
|
# 2025.06.28. v2.10.9 现在 pip 都是从 wheel 安装,不再运行 setup.py,所以增加一个 offtracker_init.py
|
|
39
39
|
# 2025.06.28. v2.10.10 直接塞 script 里试试
|
|
40
40
|
# 2025.06.28. v2.10.11 回滚到2.10.9外加修正
|
|
41
|
-
# 2025.07.02. v2.11.
|
|
41
|
+
# 2025.07.02. v2.11.4 基于 blast 的缺陷更新 candidates,去除 quick mode
|
|
42
|
+
# 2025.07.04. v2.11.5 offtracker_analysis 提前 skip 已有结果的样本
|
|
@@ -192,7 +192,8 @@ def main():
|
|
|
192
192
|
|
|
193
193
|
if args.signal_only:
|
|
194
194
|
return 'signal_only is on, stop here.'
|
|
195
|
-
|
|
195
|
+
|
|
196
|
+
|
|
196
197
|
####################
|
|
197
198
|
## group analysis ##
|
|
198
199
|
####################
|
|
@@ -204,6 +205,11 @@ def main():
|
|
|
204
205
|
else:
|
|
205
206
|
outname = args.outname
|
|
206
207
|
|
|
208
|
+
# skip finished
|
|
209
|
+
output = f'Offtracker_result_{outname}.csv'
|
|
210
|
+
if (os.path.isfile(output))&(not args.overwrite):
|
|
211
|
+
return 'skip {output} as the result exists!'
|
|
212
|
+
|
|
207
213
|
output = f'./temp/df_score_{outname}.csv'
|
|
208
214
|
if (os.path.isfile(output))&(not args.overwrite):
|
|
209
215
|
print(f'skip {output}')
|
|
@@ -353,33 +359,30 @@ def main():
|
|
|
353
359
|
df_result.to_csv(output)
|
|
354
360
|
|
|
355
361
|
output = f'Offtracker_result_{outname}.csv'
|
|
356
|
-
|
|
357
|
-
|
|
362
|
+
# 2024.06.03. 以防 fdr<=fdr_thresh 滤掉了 track_score>=2 的位点
|
|
363
|
+
bool_fdr = df_result['fdr']<=fdr_thresh
|
|
364
|
+
bool_score = df_result['track_score']>=score_thresh
|
|
365
|
+
# 2025.06.05. BE可能会形成单边信号,导致 track_score 为负数,也保留
|
|
366
|
+
bool_neg_score = df_result['track_score']< -1
|
|
367
|
+
df_output = df_result[bool_fdr|bool_score|bool_neg_score].copy()
|
|
368
|
+
if pattern_ctr != 'none':
|
|
369
|
+
df_output = df_output[['target_location', 'best_strand','best_target','deletion','insertion','mismatch',
|
|
370
|
+
'exp_L_length', 'exp_R_length','ctr_L_length','ctr_R_length','L_length','R_length','signal_length',
|
|
371
|
+
'norm_best_seq_score','track_score', 'log2_track_score','fdr','rank']]
|
|
372
|
+
df_output.columns = ['target_location', 'strand', 'target', 'deletion', 'insertion', 'mismatch',
|
|
373
|
+
'exp_L_length', 'exp_R_length','ctr_L_length','ctr_R_length','L_length','R_length','signal_length',
|
|
374
|
+
'seq_score', 'track_score', 'log2_track_score','FDR', 'rank']
|
|
358
375
|
else:
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
df_output.columns = ['target_location', 'strand', 'target', 'deletion', 'insertion', 'mismatch',
|
|
370
|
-
'exp_L_length', 'exp_R_length','ctr_L_length','ctr_R_length','L_length','R_length','signal_length',
|
|
371
|
-
'seq_score', 'track_score', 'log2_track_score','FDR', 'rank']
|
|
372
|
-
else:
|
|
373
|
-
df_output = df_output[['target_location', 'best_strand','best_target','deletion','insertion','mismatch',
|
|
374
|
-
'L_length', 'R_length','signal_length',
|
|
375
|
-
'norm_best_seq_score','track_score', 'log2_track_score','fdr','rank']]
|
|
376
|
-
df_output.columns = ['target_location', 'strand', 'target', 'deletion', 'insertion', 'mismatch',
|
|
377
|
-
'L_length', 'R_length','signal_length',
|
|
378
|
-
'seq_score', 'track_score', 'log2_track_score','FDR', 'rank']
|
|
379
|
-
df_output.to_csv(f'Offtracker_result_{outname}.csv', index=False)
|
|
380
|
-
|
|
381
|
-
if args.clean:
|
|
382
|
-
shutil.rmtree('./temp')
|
|
376
|
+
df_output = df_output[['target_location', 'best_strand','best_target','deletion','insertion','mismatch',
|
|
377
|
+
'L_length', 'R_length','signal_length',
|
|
378
|
+
'norm_best_seq_score','track_score', 'log2_track_score','fdr','rank']]
|
|
379
|
+
df_output.columns = ['target_location', 'strand', 'target', 'deletion', 'insertion', 'mismatch',
|
|
380
|
+
'L_length', 'R_length','signal_length',
|
|
381
|
+
'seq_score', 'track_score', 'log2_track_score','FDR', 'rank']
|
|
382
|
+
df_output.to_csv(f'Offtracker_result_{outname}.csv', index=False)
|
|
383
|
+
|
|
384
|
+
if args.clean:
|
|
385
|
+
shutil.rmtree('./temp')
|
|
383
386
|
|
|
384
387
|
return 'Done!'
|
|
385
388
|
|
|
@@ -37,7 +37,7 @@ def main():
|
|
|
37
37
|
parser.add_argument('-o','--outdir' , type=str, required=True, help='The output folder')
|
|
38
38
|
parser.add_argument('-g','--genome' , type=str, default='hg38', help='File of chromosome sizes, or "hg38", "mm10" ')
|
|
39
39
|
parser.add_argument('-t','--thread' , type=int, default=4, help='Number of threads for parallel computing')
|
|
40
|
-
parser.add_argument('--quick_mode' , action='store_true', help='
|
|
40
|
+
# parser.add_argument('--quick_mode' , action='store_true', help='Quick mode is deprecated due to blast flaw.')
|
|
41
41
|
|
|
42
42
|
args = parser.parse_args()
|
|
43
43
|
|
|
@@ -57,7 +57,7 @@ def main():
|
|
|
57
57
|
os.makedirs(dir_output)
|
|
58
58
|
dir_ref_fa = args.ref
|
|
59
59
|
blast_db = args.blastdb
|
|
60
|
-
quick_mode = args.quick_mode
|
|
60
|
+
# quick_mode = args.quick_mode
|
|
61
61
|
|
|
62
62
|
# parameters for alignment
|
|
63
63
|
half_width = 100
|
|
@@ -95,15 +95,9 @@ def main():
|
|
|
95
95
|
if os.path.isfile(dir_sgRNA_blast):
|
|
96
96
|
print(f'{dir_sgRNA_blast} exists, skipped.')
|
|
97
97
|
else:
|
|
98
|
-
|
|
99
|
-
print('Using quick mode for BLAST')
|
|
100
|
-
blastx_cline = NcbiblastnCommandline(query=dir_sgRNA_fasta, task='blastn-short',out=dir_sgRNA_blast,
|
|
98
|
+
blastx_cline = NcbiblastnCommandline(query=dir_sgRNA_fasta, task='blastn-short',out=dir_sgRNA_blast,
|
|
101
99
|
db=blast_db, evalue=100000,outfmt=6, num_threads=n_threads,
|
|
102
|
-
gapopen=4, gapextend=2, reward=2, word_size=
|
|
103
|
-
else:
|
|
104
|
-
blastx_cline = NcbiblastnCommandline(query=dir_sgRNA_fasta, task='blastn-short',out=dir_sgRNA_blast,
|
|
105
|
-
db=blast_db, evalue=100000,outfmt=6, num_threads=n_threads,
|
|
106
|
-
gapopen=4, gapextend=2, reward=2, word_size=5, dust='no', soft_masking=False)
|
|
100
|
+
gapopen=4, gapextend=2, reward=2, word_size=4, dust='no', soft_masking=False)
|
|
107
101
|
print(f'BLAST for candidate off-target sites of {sgRNA_name}.')
|
|
108
102
|
blastx_cline()
|
|
109
103
|
print(f'BLAST finished.')
|
|
@@ -312,6 +306,10 @@ def main():
|
|
|
312
306
|
# df_candidate['midpoint'] = ((df_candidate['ed'] + df_candidate['st'])/2).astype(int)
|
|
313
307
|
df_candidate = xseq.add_ID(df_candidate, midpoint='cleavage_site')
|
|
314
308
|
|
|
309
|
+
# 2025.07.02 为了削弱 blast 缺陷增加了候选位点数量,这里过滤一下减少计算
|
|
310
|
+
df_candidate['mis_all'] = df_candidate[['mismatch','deletion','insertion']].sum(axis=1)
|
|
311
|
+
df_candidate = df_candidate[df_candidate['mis_all']<8]
|
|
312
|
+
|
|
315
313
|
df_candidate.to_csv(dir_df_candidate)
|
|
316
314
|
print(f'Output df_candidate_{sgRNA_name}.csv')
|
|
317
315
|
os.remove(temp_bed)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{offtracker-2.11.2 → offtracker-2.11.5}/offtracker/utility/offtracker_blacklist_hg38.merged.bed
RENAMED
|
File without changes
|
{offtracker-2.11.2 → offtracker-2.11.5}/offtracker/utility/offtracker_blacklist_mm10.merged.bed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|