annotate FeaturesParser.py @ 0:de6a6afc5a79 draft default tip

Uploaded
author drosofff
date Tue, 24 Jun 2014 12:16:43 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
1 #!/usr/bin/python
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
2 # python parser module to analyse Features in sRbowtie alignments (guided by a GFF3 file)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
3 # version 0.9
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
4 # Usage FeaturesParser.py <1:index source> <2:extraction directive> <3:output> <4:GFF3 guide file> <5:6:7 filePath:FileExt:FileLabel> <.. ad lib>
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
5
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
6 import sys
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
7 from smRtools import *
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
8 from collections import *
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
9
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
10 IndexSource = sys.argv[1]
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
11 ExtractionDirective = sys.argv[2]
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
12 if ExtractionDirective == "--do_not_extract_index":
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
13 genomeRefFormat = "fastaSource"
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
14 elif ExtractionDirective == "--extract_index":
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
15 genomeRefFormat = "bowtieIndex"
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
16 Output = sys.argv[3]
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
17 GFF3_file = sys.argv[4]
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
18 Triplets = [sys.argv[5:][i:i+3] for i in xrange(0, len(sys.argv[5:]), 3)]
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
19 MasterListOfGenomes = {}
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
20 FeatureDict = defaultdict(dict)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
21
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
22 for [filePath, FileExt, FileLabel] in Triplets:
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
23 MasterListOfGenomes[FileLabel] = HandleSmRNAwindows (filePath, FileExt, IndexSource, genomeRefFormat)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
24 FeatureDict[FileLabel] = MasterListOfGenomes[FileLabel].CountFeatures(GFF3=GFF3_file)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
25
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
26 # add some code to pick up the GFF3 features in their order of appearence.
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
27 F = open(GFF3_file, "r")
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
28 featureList = []
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
29 for line in F:
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
30 if line[0] == "#": continue
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
31 feature = line.split()[2]
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
32 if feature not in featureList:
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
33 featureList.append(feature)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
34 F.close()
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
35
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
36 header = ["#Feature"]
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
37 for [filePath, FileExt, FileLabel] in Triplets:
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
38 header.append(FileLabel)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
39
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
40 F = open (sys.argv[3], "w")
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
41 print >> F, "\t".join(header)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
42 for feature in featureList:
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
43 line=[feature]
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
44 for sample in header[1:]:
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
45 count = str (FeatureDict[sample][feature])
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
46 # uncomment to get percentage in addition to counts
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
47 # percent = float(FeatureDict[sample][feature]) / MasterListOfGenomes[sample].alignedReads
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
48 # value = "%s | %0.2f" % (count, percent)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
49 # line.append(value)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
50 line.append(count)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
51 print >> F, "\t".join(line )
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
52 line = ["Unfeatured"]
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
53 for sample in header[1:]:
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
54 matched = 0
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
55 for feature in FeatureDict[sample]:
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
56 matched += FeatureDict[sample][feature]
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
57 unmatched = MasterListOfGenomes[sample].alignedReads - matched
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
58 # uncomment to get percentage in addition to counts
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
59 # percent = float (unmatched) / (matched + unmatched)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
60 # value = "%s | %0.2f" % (unmatched, percent)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
61 # line.append(value)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
62 line.append("%s" % unmatched)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
63 print >> F, "\t".join(line)
de6a6afc5a79 Uploaded
drosofff
parents:
diff changeset
64 F.close()