annotate rename_tracks.py @ 0:dd6d3b009659 draft

planemo upload
author yating-l
date Fri, 22 Jun 2018 16:25:42 -0400
parents
children 75d9357a0a53
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
1 # -*- coding: utf8 -*-
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
2
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
3 """
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
4 Rename the custom evidence tracks so that the tracks use the same sequence names as the renamed reference
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
5 """
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
6 import sys
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
7 import csv
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
8 import subprocess
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
9
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
10 def rename_interval(inputFile, nameDict, renamedFile):
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
11 writer = open(renamedFile, 'w')
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
12 with open(inputFile, 'r') as f:
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
13 lines = f.readlines()
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
14 for l in lines:
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
15 if not l.startswith("#"):
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
16 scaffold_name = l.split()[0]
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
17 if scaffold_name in nameDict:
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
18 l = l.replace(scaffold_name, nameDict[scaffold_name])
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
19 writer.write(l)
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
20 writer.close()
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
21
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
22 def rename_bam(inputFile, nameDict, renamedFile):
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
23 header = subprocess.Popen(['samtools', 'view', '-H', inputFile], stdout=subprocess.PIPE)
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
24 array_call = ['sed']
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
25 for k,v in nameDict.items():
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
26 substitute = "s/%s/%s/" % (str(k), str(v))
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
27 array_call.append('-e')
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
28 array_call.append(substitute)
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
29 reheader = subprocess.Popen(array_call, stdin=header.stdout, stdout=subprocess.PIPE)
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
30 out = open(renamedFile, 'w')
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
31 subprocess.Popen(['samtools', 'reheader', '-', inputFile], stdin=reheader.stdout, stdout=out)
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
32
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
33 def getNameDict(nameMapping):
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
34 nameDict = {}
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
35 with open(nameMapping, 'r') as f:
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
36 reader = csv.reader(f)
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
37 for row in reader:
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
38 nameDict[row[0]] = row[1]
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
39 return nameDict
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
40
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
41 def main():
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
42 inputFile = sys.argv[1]
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
43 nameMapping = sys.argv[2]
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
44 inputFormat = sys.argv[3]
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
45 outputfile = sys.argv[4]
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
46 nameDict = getNameDict(nameMapping)
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
47 if inputFormat == "bed" or inputFormat == "gff3" or inputFormat == "gtf":
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
48 rename_interval(inputFile, nameDict, outputfile)
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
49 elif inputFormat == "bam":
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
50 rename_bam(inputFile, nameDict, outputfile)
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
51
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
52 if __name__ == "__main__":
dd6d3b009659 planemo upload
yating-l
parents:
diff changeset
53 main()