offtracker 2.10.9__zip → 2.10.11__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.
Files changed (33) hide show
  1. {offtracker-2.10.9/offtracker.egg-info → offtracker-2.10.11}/PKG-INFO +4 -1
  2. {offtracker-2.10.9 → offtracker-2.10.11}/README.md +3 -0
  3. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/_version.py +4 -2
  4. {offtracker-2.10.9 → offtracker-2.10.11/offtracker.egg-info}/PKG-INFO +4 -1
  5. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker.egg-info/requires.txt +1 -1
  6. offtracker-2.10.11/scripts/offtracker_config.py +107 -0
  7. offtracker-2.10.11/scripts/offtracker_qc.py +73 -0
  8. {offtracker-2.10.9 → offtracker-2.10.11}/setup.py +7 -33
  9. offtracker-2.10.9/scripts/offtracker_config.py +0 -97
  10. offtracker-2.10.9/scripts/offtracker_qc.py +0 -63
  11. {offtracker-2.10.9 → offtracker-2.10.11}/LICENSE.txt +0 -0
  12. {offtracker-2.10.9 → offtracker-2.10.11}/MANIFEST.in +0 -0
  13. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/X_offplot.py +0 -0
  14. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/X_offtracker.py +0 -0
  15. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/X_sequence.py +0 -0
  16. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/__init__.py +0 -0
  17. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/snakefile/Snakefile_QC.smk +0 -0
  18. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/snakefile/Snakefile_offtracker.smk +0 -0
  19. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/utility/1.1_bed2fr.py +0 -0
  20. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/utility/1.3_bdg_normalize_v4.0.py +0 -0
  21. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/utility/bedGraphToBigWig +0 -0
  22. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/utility/hg38.chrom.sizes +0 -0
  23. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/utility/mm10.chrom.sizes +0 -0
  24. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/utility/offtracker_blacklist_hg38.merged.bed +0 -0
  25. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker/utility/offtracker_blacklist_mm10.merged.bed +0 -0
  26. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker.egg-info/SOURCES.txt +0 -0
  27. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker.egg-info/dependency_links.txt +0 -0
  28. {offtracker-2.10.9 → offtracker-2.10.11}/offtracker.egg-info/top_level.txt +0 -0
  29. {offtracker-2.10.9 → offtracker-2.10.11}/scripts/offtracker_analysis.py +0 -0
  30. {offtracker-2.10.9 → offtracker-2.10.11}/scripts/offtracker_candidates.py +0 -0
  31. {offtracker-2.10.9 → offtracker-2.10.11}/scripts/offtracker_init.py +0 -0
  32. {offtracker-2.10.9 → offtracker-2.10.11}/scripts/offtracker_plot.py +0 -0
  33. {offtracker-2.10.9 → offtracker-2.10.11}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: offtracker
3
- Version: 2.10.9
3
+ Version: 2.10.11
4
4
  Summary: Tracking-seq data analysis
5
5
  Home-page: https://github.com/Lan-lab/offtracker
6
6
  Author: Runda Xu
@@ -78,6 +78,9 @@ offtracker_candidates.py -t 8 -g hg38 \
78
78
  --name 'VEGFA2' --sgrna 'GACCCCCTCCACCCCGCCTC' --pam 'NGG' \
79
79
  -o /Your_Path_To_Candidates_Folder
80
80
 
81
+ # if analyzing Cas12a, whose pam is upstream of the sgRNA, add this:
82
+ --pam_location 'upstream'
83
+
81
84
  ```
82
85
 
83
86
 
@@ -66,6 +66,9 @@ offtracker_candidates.py -t 8 -g hg38 \
66
66
  --name 'VEGFA2' --sgrna 'GACCCCCTCCACCCCGCCTC' --pam 'NGG' \
67
67
  -o /Your_Path_To_Candidates_Folder
68
68
 
69
+ # if analyzing Cas12a, whose pam is upstream of the sgRNA, add this:
70
+ --pam_location 'upstream'
71
+
69
72
  ```
70
73
 
71
74
 
@@ -1,4 +1,4 @@
1
- __version__ = "2.10.9"
1
+ __version__ = "2.10.11"
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 大更新,还没微调
@@ -35,4 +35,6 @@ __version__ = "2.10.9"
35
35
  # 2025.06.05. v2.10.0 增加了QC模块。保留了负数score的记录,并在plot时显示为红字。增加了 "--ignore_chr" 用于跳过common chr过滤。
36
36
  # 2025.06.17. v2.10.7 修复翻新代码结构导致的bug
37
37
  # 2025.06.27. v2.10.8 将 chmod 放在了 setup.py 里
38
- # 2025.06.28. v2.10.9 现在 pip 都是从 wheel 安装,不再运行 setup.py,所以增加一个 offtracker_init.py
38
+ # 2025.06.28. v2.10.9 现在 pip 都是从 wheel 安装,不再运行 setup.py,所以增加一个 offtracker_init.py
39
+ # 2025.06.28. v2.10.10 直接塞 script 里试试
40
+ # 2025.06.28. v2.10.11 回滚到2.10.9外加修正
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: offtracker
3
- Version: 2.10.9
3
+ Version: 2.10.11
4
4
  Summary: Tracking-seq data analysis
5
5
  Home-page: https://github.com/Lan-lab/offtracker
6
6
  Author: Runda Xu
@@ -78,6 +78,9 @@ offtracker_candidates.py -t 8 -g hg38 \
78
78
  --name 'VEGFA2' --sgrna 'GACCCCCTCCACCCCGCCTC' --pam 'NGG' \
79
79
  -o /Your_Path_To_Candidates_Folder
80
80
 
81
+ # if analyzing Cas12a, whose pam is upstream of the sgRNA, add this:
82
+ --pam_location 'upstream'
83
+
81
84
  ```
82
85
 
83
86
 
@@ -1,5 +1,5 @@
1
1
  pandas
2
2
  numpy
3
- biopython
3
+ biopython<=1.85
4
4
  pybedtools
5
5
  pyyaml
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ # 2023.08.11. adding a option for not normalizing the bw file
5
+ # 2025.05.22. refine the structure
6
+ # 2025.06.05. 增加 ignore_chr 选项,默认只取 common chromosomes,用于 1.1_bed2fr.py
7
+
8
+ import argparse
9
+ import os, glob, yaml
10
+ import pandas as pd
11
+ import shutil, re
12
+ import offtracker
13
+ import offtracker.X_sequence as xseq
14
+ script_dir = os.path.abspath(os.path.dirname(offtracker.__file__))
15
+ utility_dir = os.path.join(script_dir, 'utility')
16
+ file_path = os.path.join(utility_dir, 'bedGraphToBigWig')
17
+ file_stat = os.stat(file_path)
18
+ file_mode = oct(file_stat.st_mode & 0o777)
19
+ if file_mode != '0o755':
20
+ try:
21
+ os.chmod( os.path.join(utility_dir, 'bedGraphToBigWig'), 0o755)
22
+ except:
23
+ print('offtracker may be installed in root but not initialized. Please run "offtracker_init.py" with root permission first.')
24
+
25
+ ###
26
+ def main():
27
+ parser = argparse.ArgumentParser()
28
+ parser.description='Mapping fastq files of Tracking-seq.'
29
+ parser.add_argument('-f','--folder', type=str, required=True, help='Directory of the input folder' )
30
+ parser.add_argument('-r','--ref' , type=str, required=True, help='The fasta file of reference genome')
31
+ parser.add_argument('-i','--index' , type=str, required=True, help='The index file of chromap')
32
+ parser.add_argument('-g','--genome', type=str, required=True, help='File of chromosome sizes, or "hg38", "mm10" ')
33
+ parser.add_argument('-o','--outdir', type=str, default='same', help='The output folder')
34
+ parser.add_argument('--subfolder' , type=int, default=0, help='subfolder level')
35
+ parser.add_argument('-t','--thread', type=int, default=4, help='Number of threads to be used')
36
+ parser.add_argument('--blacklist' , type=str, default='same', help='Blacklist of genome regions in bed format. "none" for no filter')
37
+ parser.add_argument('--binsize' , type=str, default=100, help='Bin size for calculating bw residue')
38
+ parser.add_argument('--normalize' , type=str, default='True', help='Whether to normalize the BigWig file. "True" or "False"')
39
+ parser.add_argument('--ignore_chr' , action='store_true', help='If not set, only chr1-chr22, chrX, chrY, chrM will be analyzed.')
40
+
41
+
42
+ args = parser.parse_args()
43
+
44
+ if (args.genome == 'hg38') or (args.genome == 'mm10'):
45
+ dir_chrom_sizes = os.path.join(utility_dir, f'{args.genome}.chrom.sizes')
46
+ else:
47
+ dir_chrom_sizes = args.genome
48
+
49
+ if (args.normalize != 'True') & (args.normalize != 'False'):
50
+ raise ValueError('Please provide "True" or "False" for "--normalize"')
51
+
52
+ if args.blacklist == 'same':
53
+ assert ((args.genome == 'hg38') or (args.genome == 'mm10')), 'Please provide blacklist file, or "--blacklist none" to skip'
54
+ args.blacklist = args.genome
55
+
56
+ if (args.blacklist == 'hg38') or (args.blacklist == 'mm10'):
57
+ blacklist = os.path.join(utility_dir, f'offtracker_blacklist_{args.blacklist}.merged.bed')
58
+ else:
59
+ blacklist = args.blacklist
60
+
61
+ if args.outdir == 'same':
62
+ args.outdir = args.folder
63
+ else:
64
+ if not os.path.exists(args.outdir):
65
+ os.makedirs(args.outdir)
66
+
67
+ if args.ignore_chr:
68
+ args.ignore_chr = '--ignore_chr'
69
+ else:
70
+ args.ignore_chr = ''
71
+
72
+ # 搜索 folder 的 n级子目录下的所有 fastq/fastq.gz/fq/fq.gz 文件
73
+ sample_names, files_R1, files_R2 = xseq.detect_fastq(args.folder, n_subfolder=args.subfolder)
74
+
75
+ assert not isinstance(sample_names, str), 'No fastq file is detected!'
76
+
77
+ dict_yaml = {
78
+ # fastq 信息
79
+ 'files_R1':dict(zip(sample_names,files_R1)),
80
+ 'files_R2':dict(zip(sample_names,files_R2)), # 单端 files_R2=[] 结果会自动为 {}
81
+ # 输入输出文件夹
82
+ 'input_dir':args.folder,
83
+ 'output_dir':args.outdir,
84
+ # 运行参数
85
+ 'thread':args.thread,
86
+ 'index':args.index,
87
+ 'fasta':args.ref,
88
+ 'binsize':args.binsize,
89
+ 'blacklist':blacklist,
90
+ 'genomelen':dir_chrom_sizes,
91
+ 'normalize':args.normalize,
92
+ 'utility_dir':utility_dir,
93
+ 'ignore_chr':args.ignore_chr,
94
+ }
95
+
96
+ with open( os.path.join(args.outdir,'config.yaml'), 'w') as outfile:
97
+ yaml.dump(dict_yaml, outfile, default_flow_style=False)
98
+
99
+ snakefile = os.path.join(script_dir, 'snakefile/Snakefile_offtracker.smk')
100
+ shutil.copy(snakefile, os.path.join(args.outdir,'Snakefile'))
101
+
102
+ return 'config_main finished'
103
+
104
+ if __name__ == '__main__' :
105
+ result = main()
106
+ print(result)
107
+
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ THIS_VERSION = '0.4.1'
5
+
6
+ import argparse
7
+ import os, glob, yaml
8
+ import pandas as pd
9
+ import shutil, re
10
+ import offtracker
11
+ import offtracker.X_sequence as xseq
12
+
13
+ script_dir = os.path.abspath(os.path.dirname(offtracker.__file__))
14
+ utility_dir = os.path.join(script_dir, 'utility')
15
+ file_path = os.path.join(utility_dir, 'bedGraphToBigWig')
16
+ file_stat = os.stat(file_path)
17
+ file_mode = oct(file_stat.st_mode & 0o777)
18
+ if file_mode != '0o755':
19
+ try:
20
+ os.chmod( os.path.join(utility_dir, 'bedGraphToBigWig'), 0o755)
21
+ except:
22
+ print('offtracker may be installed in root but not initialized. Please run "offtracker_init.py" with root permission first.')
23
+
24
+ ###
25
+ def main():
26
+ parser = argparse.ArgumentParser()
27
+ parser.description=f'xbulk_qc v{THIS_VERSION}. QC and trim fastq files.'
28
+ parser.add_argument('-f','--folder', type=str, required=True, help='Directory of the input folder' )
29
+ parser.add_argument('-o','--outdir', type=str, default='same', help='The output folder')
30
+ parser.add_argument('--subfolder' , type=int, default=0, help='subfolder level')
31
+ parser.add_argument('-t','--thread', type=int, default=8, help='Number of threads to be used')
32
+
33
+ args = parser.parse_args()
34
+
35
+ # 自动化的参数调整和报错
36
+ if args.outdir == 'same':
37
+ args.outdir = os.path.join(args.folder,'Trimmed_data')
38
+ if not os.path.exists( args.outdir ):
39
+ os.makedirs( args.outdir )
40
+ else:
41
+ if not os.path.exists(args.outdir):
42
+ os.makedirs(args.outdir)
43
+
44
+ # 搜索 folder 的 n级子目录下的所有 fastq/fastq.gz/fq/fq.gz 文件
45
+ sample_names, files_R1, files_R2 = xseq.detect_fastq(args.folder, n_subfolder=args.subfolder)
46
+
47
+ assert not isinstance(sample_names, str), 'No fastq file is detected!'
48
+
49
+ dict_yaml = {
50
+ # fastq 信息
51
+ 'files_R1':dict(zip(sample_names,files_R1)),
52
+ 'files_R2':dict(zip(sample_names,files_R2)), # 单端 files_R2=[] 结果会自动为 {}
53
+ # 输入输出文件夹
54
+ 'input_dir':args.folder,
55
+ 'output_dir':args.outdir,
56
+ # 运行参数
57
+ 'thread':args.thread,
58
+ 'utility_dir':utility_dir
59
+ }
60
+
61
+
62
+ with open( os.path.join(args.outdir,'config.yaml'), 'w', encoding='utf-8') as outfile:
63
+ yaml.dump(dict_yaml, outfile, default_flow_style=False)
64
+
65
+ snakefile = os.path.join(script_dir, 'snakefile/Snakefile_QC.smk')
66
+ shutil.copy(snakefile, os.path.join(args.outdir,'Snakefile'))
67
+
68
+ return 'config_qc finished'
69
+
70
+ if __name__ == '__main__' :
71
+ result = main()
72
+ print(result)
73
+
@@ -6,10 +6,6 @@ import io, os
6
6
  # from shutil import rmtree
7
7
  from setuptools import setup
8
8
 
9
- # import pkg_resources
10
- from importlib_metadata import distribution
11
- from setuptools.command.install import install
12
- from setuptools.command.develop import develop
13
9
 
14
10
  #
15
11
  NAME = 'offtracker'
@@ -30,7 +26,7 @@ with open(os.path.join(here, package_folder, '_version.py'),'r',encoding='utf-8'
30
26
 
31
27
  # requirements
32
28
  REQUIRED = [
33
- 'pandas', 'numpy', 'biopython', 'pybedtools', 'pyyaml',
29
+ 'pandas', 'numpy', 'biopython<=1.85', 'pybedtools', 'pyyaml',
34
30
  ]
35
31
  ## pybedtools may be not supported in Windows
36
32
 
@@ -41,24 +37,6 @@ except FileNotFoundError:
41
37
  long_description = DESCRIPTION
42
38
 
43
39
 
44
- class PostInstallCommand(install):
45
- def run(self):
46
- install.run(self)
47
- # 获取文件位置
48
- dist = distribution('offtracker')
49
- package_path = dist.locate_file('')
50
- utility_dir = os.path.join(package_path, 'offtracker/utility')
51
- os.chmod( os.path.join(utility_dir, 'bedGraphToBigWig'), 0o755)
52
-
53
- class PostDevelopCommand(develop):
54
- def run(self):
55
- develop.run(self)
56
- # 获取文件位置
57
- dist = distribution('offtracker')
58
- package_path = dist.locate_file('')
59
- utility_dir = os.path.join(package_path, 'offtracker/utility')
60
- os.chmod( os.path.join(utility_dir, 'bedGraphToBigWig'), 0o755)
61
-
62
40
  setup(
63
41
  name=NAME,
64
42
  version=VERSION,
@@ -71,16 +49,12 @@ setup(
71
49
  python_requires=REQUIRES_PYTHON,
72
50
  packages=['offtracker'],
73
51
  package_data={'offtracker': ['snakefile/*','utility/*']},
74
- cmdclass={
75
- 'install': PostInstallCommand,
76
- 'develop': PostDevelopCommand,
77
- },
78
- scripts = ['scripts/offtracker_init.py',
79
- 'scripts/offtracker_qc.py',
80
- 'scripts/offtracker_config.py',
81
- 'scripts/offtracker_candidates.py',
82
- 'scripts/offtracker_analysis.py',
83
- 'scripts/offtracker_plot.py'],
52
+ scripts = [ 'scripts/offtracker_init.py',
53
+ 'scripts/offtracker_qc.py',
54
+ 'scripts/offtracker_config.py',
55
+ 'scripts/offtracker_candidates.py',
56
+ 'scripts/offtracker_analysis.py',
57
+ 'scripts/offtracker_plot.py'],
84
58
  install_requires=REQUIRED,
85
59
  include_package_data=True
86
60
  )
@@ -1,97 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
-
4
- # 2023.08.11. adding a option for not normalizing the bw file
5
- # 2025.05.22. refine the structure
6
- # 2025.06.05. 增加 ignore_chr 选项,默认只取 common chromosomes,用于 1.1_bed2fr.py
7
-
8
- import argparse
9
- import os, glob, yaml
10
- import pandas as pd
11
- import shutil, re
12
- import offtracker
13
- import offtracker.X_sequence as xseq
14
- script_dir = os.path.abspath(os.path.dirname(offtracker.__file__))
15
- utility_dir = os.path.join(script_dir, 'utility')
16
- try:
17
- os.chmod( os.path.join(utility_dir, 'bedGraphToBigWig'), 0o755)
18
- except:
19
- print('offtracker may be installed in root but not initialized. Please run "offtracker_init.py" with root permission first.')
20
-
21
- ###
22
- parser = argparse.ArgumentParser()
23
- parser.description='Mapping fastq files of Tracking-seq.'
24
- parser.add_argument('-f','--folder', type=str, required=True, help='Directory of the input folder' )
25
- parser.add_argument('-r','--ref' , type=str, required=True, help='The fasta file of reference genome')
26
- parser.add_argument('-i','--index' , type=str, required=True, help='The index file of chromap')
27
- parser.add_argument('-g','--genome', type=str, required=True, help='File of chromosome sizes, or "hg38", "mm10" ')
28
- parser.add_argument('-o','--outdir', type=str, default='same', help='The output folder')
29
- parser.add_argument('--subfolder' , type=int, default=0, help='subfolder level')
30
- parser.add_argument('-t','--thread', type=int, default=4, help='Number of threads to be used')
31
- parser.add_argument('--blacklist' , type=str, default='same', help='Blacklist of genome regions in bed format. "none" for no filter')
32
- parser.add_argument('--binsize' , type=str, default=100, help='Bin size for calculating bw residue')
33
- parser.add_argument('--normalize' , type=str, default='True', help='Whether to normalize the BigWig file. "True" or "False"')
34
- parser.add_argument('--ignore_chr' , action='store_true', help='If not set, only chr1-chr22, chrX, chrY, chrM will be analyzed.')
35
-
36
-
37
- args = parser.parse_args()
38
-
39
- if (args.genome == 'hg38') or (args.genome == 'mm10'):
40
- dir_chrom_sizes = os.path.join(utility_dir, f'{args.genome}.chrom.sizes')
41
- else:
42
- dir_chrom_sizes = args.genome
43
-
44
- if (args.normalize != 'True') & (args.normalize != 'False'):
45
- raise ValueError('Please provide "True" or "False" for "--normalize"')
46
-
47
- if args.blacklist == 'same':
48
- assert ((args.genome == 'hg38') or (args.genome == 'mm10')), 'Please provide blacklist file, or "--blacklist none" to skip'
49
- args.blacklist = args.genome
50
-
51
- if (args.blacklist == 'hg38') or (args.blacklist == 'mm10'):
52
- blacklist = os.path.join(utility_dir, f'offtracker_blacklist_{args.blacklist}.merged.bed')
53
- else:
54
- blacklist = args.blacklist
55
-
56
- if args.outdir == 'same':
57
- args.outdir = args.folder
58
- else:
59
- if not os.path.exists(args.outdir):
60
- os.makedirs(args.outdir)
61
-
62
- if args.ignore_chr:
63
- args.ignore_chr = '--ignore_chr'
64
- else:
65
- args.ignore_chr = ''
66
-
67
- # 搜索 folder 的 n级子目录下的所有 fastq/fastq.gz/fq/fq.gz 文件
68
- sample_names, files_R1, files_R2 = xseq.detect_fastq(args.folder, n_subfolder=args.subfolder)
69
-
70
- assert not isinstance(sample_names, str), 'No fastq file is detected!'
71
-
72
- dict_yaml = {
73
- # fastq 信息
74
- 'files_R1':dict(zip(sample_names,files_R1)),
75
- 'files_R2':dict(zip(sample_names,files_R2)), # 单端 files_R2=[] 结果会自动为 {}
76
- # 输入输出文件夹
77
- 'input_dir':args.folder,
78
- 'output_dir':args.outdir,
79
- # 运行参数
80
- 'thread':args.thread,
81
- 'index':args.index,
82
- 'fasta':args.ref,
83
- 'binsize':args.binsize,
84
- 'blacklist':blacklist,
85
- 'genomelen':dir_chrom_sizes,
86
- 'normalize':args.normalize,
87
- 'utility_dir':utility_dir,
88
- 'ignore_chr':args.ignore_chr,
89
- }
90
-
91
- with open( os.path.join(args.outdir,'config.yaml'), 'w') as outfile:
92
- yaml.dump(dict_yaml, outfile, default_flow_style=False)
93
-
94
- snakefile = os.path.join(script_dir, 'snakefile/Snakefile_offtracker.smk')
95
- shutil.copy(snakefile, os.path.join(args.outdir,'Snakefile'))
96
-
97
-
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
-
4
- THIS_VERSION = '0.4.1'
5
-
6
- import argparse
7
- import os, glob, yaml
8
- import pandas as pd
9
- import shutil, re
10
- import offtracker
11
- import offtracker.X_sequence as xseq
12
-
13
- script_dir = os.path.abspath(os.path.dirname(offtracker.__file__))
14
- utility_dir = os.path.join(script_dir, 'utility')
15
- try:
16
- os.chmod( os.path.join(utility_dir, 'bedGraphToBigWig'), 0o755)
17
- except:
18
- print('offtracker may be installed in root but not initialized. Please run "offtracker_init.py" with root permission first.')
19
-
20
- ###
21
- parser = argparse.ArgumentParser()
22
- parser.description=f'xbulk_qc v{THIS_VERSION}. QC and trim fastq files.'
23
- parser.add_argument('-f','--folder', type=str, required=True, help='Directory of the input folder' )
24
- parser.add_argument('-o','--outdir', type=str, default='same', help='The output folder')
25
- parser.add_argument('--subfolder' , type=int, default=0, help='subfolder level')
26
- parser.add_argument('-t','--thread', type=int, default=8, help='Number of threads to be used')
27
-
28
- args = parser.parse_args()
29
-
30
- # 自动化的参数调整和报错
31
- if args.outdir == 'same':
32
- args.outdir = os.path.join(args.folder,'Trimmed_data')
33
- if not os.path.exists( args.outdir ):
34
- os.makedirs( args.outdir )
35
- else:
36
- if not os.path.exists(args.outdir):
37
- os.makedirs(args.outdir)
38
-
39
- # 搜索 folder 的 n级子目录下的所有 fastq/fastq.gz/fq/fq.gz 文件
40
- sample_names, files_R1, files_R2 = xseq.detect_fastq(args.folder, n_subfolder=args.subfolder)
41
-
42
- assert not isinstance(sample_names, str), 'No fastq file is detected!'
43
-
44
- dict_yaml = {
45
- # fastq 信息
46
- 'files_R1':dict(zip(sample_names,files_R1)),
47
- 'files_R2':dict(zip(sample_names,files_R2)), # 单端 files_R2=[] 结果会自动为 {}
48
- # 输入输出文件夹
49
- 'input_dir':args.folder,
50
- 'output_dir':args.outdir,
51
- # 运行参数
52
- 'thread':args.thread,
53
- 'utility_dir':utility_dir
54
- }
55
-
56
-
57
- with open( os.path.join(args.outdir,'config.yaml'), 'w', encoding='utf-8') as outfile:
58
- yaml.dump(dict_yaml, outfile, default_flow_style=False)
59
-
60
- snakefile = os.path.join(script_dir, 'snakefile/Snakefile_QC.smk')
61
- shutil.copy(snakefile, os.path.join(args.outdir,'Snakefile'))
62
-
63
-
File without changes
File without changes
File without changes