annotate commons/tools/tabFileReader.py @ 18:94ab73e8a190

Uploaded
author m-zytnicki
date Mon, 29 Apr 2013 03:20:15 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
1 #!/usr/bin/env python
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
2
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
3 ###@file
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
4 # Read a file recording matches in the 'tab' format (output from Matcher) and return the number of matches between queries and subjects being CC, CI, IC and II.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
5 # A match is said to be CC (for complete-complete) when both query and subject match over x% of their entire respective length. By default, x=95.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
6 #
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
7 # usage: tabFileReader.py [ options ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
8 # options:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
9 # -h: this help
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
10 # -m: name of the file recording the matches (format='tab', output from Matcher)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
11 # -q: name of the fasta file recording the queries
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
12 # -s: name of the fasta file recording the subjects
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
13 # -t: threshold over which the match is 'complete', in % of the seq length (default=95)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
14 # -i: identity below which matches are ignored (default=0)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
15 # -l: length below which matches are ignored (default=0)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
16 # -o: overlap on query and subject below which matches are ignored (default=0)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
17 # -v: verbose (default=0/1)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
18
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
19 import sys
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
20 import getopt
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
21 from string import *
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
22
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
23 import pyRepet.seq.BioseqDB
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
24 import pyRepet.util.Stat
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
25
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
26 #TODO: remove case changes in headers (4 lower() method calls in this script)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
27
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
28 #----------------------------------------------------------------------------
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
29
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
30 def help():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
31 print
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
32 print "usage: %s [ options ]" % ( sys.argv[0].split("/")[-1] )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
33 print "options:"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
34 print " -h: this help"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
35 print " -m: name of the file recording the matches (format='tab', output from Matcher)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
36 print " -q: name of the fasta file recording the queries"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
37 print " -s: name of the fasta file recording the subjects"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
38 print " -t: coverage threshold over which the match is 'complete' (in %% of the seq length, default=95)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
39 print " -i: identity below which matches are ignored (default=0)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
40 print " -l: length below which matches are ignored (default=0)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
41 print " -o: overlap on query and subject below which matches are ignored (default=0)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
42 print " -I: identity threshold for 'CC' matches (default=90)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
43 print " -E: E-value threshold for 'CC' matches (default=1e-10)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
44 print " -T: coverage threshold for match length on query compare to subject length (default=90)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
45 print " -v: verbose (default=0/1)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
46 print
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
47
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
48 #----------------------------------------------------------------------------
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
49
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
50 #here are the fields of a '.tab' file:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
51 #[0]: query sequence name
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
52 #[1]: whole match start coordinate on the query sequence
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
53 #[2]: whole match end coordinate on the query sequence
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
54 #[3]: length on the query sequence
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
55 #[4]: length in percentage of the query sequence
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
56 #[5]: length on the query relative to the subject length in percentage
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
57 #[6]: subject sequence name
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
58 #[7]: whole match start coordinate on the subject sequence
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
59 #[8]: whole match end coordinate on the subject sequence
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
60 #[9]: length on the subject sequence
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
61 #[10]: length in percentage of the subject sequence
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
62 #[11]: BLAST E-value
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
63 #[12]: BLAST score
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
64 #[13]: identity percentage
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
65 #[14]: path
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
66
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
67 class tabFileReader( object ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
68
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
69 def __init__( self, line ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
70
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
71 columns = line.split("\t")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
72
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
73 self.name_sbj = (columns[6])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
74 self.length_sbj = int(round(int(columns[9])/float(columns[10]),0)) #length of the subject
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
75 self.prct_sbj = float(columns[10]) * 100 #prct_sbj = length of the match on the subject divided by the length of the subject * 100
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
76 if int(columns[7]) < int(columns[8]):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
77 self.start_sbj = int(columns[7]) #start of the match on the subject
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
78 self.end_sbj = int(columns[8]) #end of the match on the subject
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
79 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
80 self.start_sbj = int(columns[8])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
81 self.end_sbj = int(columns[7])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
82 self.sbj_dist_ends = int(columns[9]) #length on the subject that matches with the query
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
83
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
84 self.name_qry = columns[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
85 self.length_qry = int(round(int(columns[3])/float(columns[4]),0)) #length of the query
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
86 self.prct_qry = float(columns[4]) * 100 #prct_qry = length of the match on the query divided by the length of the query * 100
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
87 if int(columns[1]) < int(columns[2]):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
88 self.start_qry = int(columns[1]) #start of the match on the query
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
89 self.end_qry = int(columns[2]) #end of the match on the query
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
90 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
91 self.start_qry = int(columns[2])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
92 self.end_qry = int(columns[1])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
93 self.qry_dist_ends = int(columns[3]) #length on the query that matches with the subject
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
94
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
95 self.length_match = int(columns[3])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
96 self.prct_matchQryOverSbj = float(columns[5]) * 100 #length on the query relative to the subject length in percentage
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
97 self.identity = float(columns[13])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
98 self.score = int(columns[12])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
99 self.evalue = float(columns[11])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
100
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
101 self.sbj2qry = [self.length_sbj,self.prct_sbj,self.start_sbj,self.end_sbj,self.name_qry,self.length_sbj,self.prct_qry,self.start_qry,self.end_qry,self.identity,self.score]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
102
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
103 self.qry2sbj = [self.length_qry,self.prct_qry,self.start_qry,self.end_qry,self.name_sbj,self.length_sbj,self.prct_sbj,self.start_sbj,self.end_sbj,self.identity,self.score]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
104
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
105 #----------------------------------------------------------------------------
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
106
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
107 def make_dico( lMatches ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
108 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
109 Record the matches in two dictionaries which keys are the queries or the subjects.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
110 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
111
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
112 Sbj2Qry = {}
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
113 Qry2Sbj = {}
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
114
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
115 for match in lMatches:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
116 if Sbj2Qry.has_key( match.name_sbj ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
117 Sbj2Qry[match.name_sbj].append( match )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
118 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
119 Sbj2Qry[match.name_sbj] = [ match ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
120 if Qry2Sbj.has_key( match.name_qry ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
121 Qry2Sbj[match.name_qry].append( match )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
122 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
123 Qry2Sbj[match.name_qry] = [ match ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
124
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
125 return [ Sbj2Qry, Qry2Sbj ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
126
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
127 #----------------------------------------------------------------------------
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
128
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
129 def find_UniqRedun( list_matchs ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
130
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
131 list_total_sbj = [];list_total_qry = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
132 list_uniq_sbj = [];list_redun_sbj = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
133 list_uniq_qry = [];list_redun_qry = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
134
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
135 for match in list_matchs:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
136 list_total_sbj.append(match.name_sbj)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
137 list_total_qry.append(match.name_qry)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
138
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
139 for name_sbj in list_total_sbj:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
140 if list_total_sbj.count(name_sbj) == 1:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
141 list_uniq_sbj.append(name_sbj)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
142 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
143 if name_sbj not in list_redun_sbj:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
144 list_redun_sbj.append(name_sbj)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
145
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
146 for name_qry in list_total_qry:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
147 if list_total_qry.count(name_qry) == 1:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
148 list_uniq_qry.append(name_qry)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
149 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
150 if name_qry not in list_redun_qry:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
151 list_redun_qry.append(name_qry)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
152
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
153 return [ list_uniq_sbj, list_redun_sbj, list_uniq_qry, list_redun_qry ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
154
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
155 #----------------------------------------------------------------------------
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
156
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
157 def remove( all, sup_sbjqry, sup_sbj, sup_qry, inf_sbjqry ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
158
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
159 for name_sbj in all.keys():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
160
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
161 if sup_sbjqry.has_key( name_sbj ) and sup_sbj.has_key( name_sbj ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
162 del sup_sbj[ name_sbj ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
163
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
164 if sup_sbjqry.has_key( name_sbj ) and sup_qry.has_key( name_sbj ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
165 del sup_qry[ name_sbj ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
166
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
167 if sup_sbjqry.has_key( name_sbj ) and inf_sbjqry.has_key( name_sbj ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
168 del inf_sbjqry[ name_sbj ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
169
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
170 if sup_sbj.has_key( name_sbj ) and sup_qry.has_key( name_sbj ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
171 del sup_qry[ name_sbj ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
172
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
173 if sup_sbj.has_key( name_sbj ) and inf_sbjqry.has_key( name_sbj ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
174 del inf_sbjqry[ name_sbj ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
175
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
176 if sup_qry.has_key( name_sbj ) and inf_sbjqry.has_key( name_sbj ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
177 del inf_sbjqry[ name_sbj ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
178
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
179 return [ sup_sbj, sup_qry, inf_sbjqry ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
180
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
181 #----------------------------------------------------------------------------
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
182
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
183 def write_output( outFile, match_type, Sbj2Qry, dSbj2Cat, Qry2Sbj, dQry2Cat ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
184 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
185 Save the results (subjects in each category and its matches) in a human-readable way.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
186 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
187
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
188 if match_type == 'CC':
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
189 msg = "Matches with L >= %i%% for subject and query (CC)" % ( thresholdCoverage )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
190 elif match_type == 'CI':
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
191 msg = "Matches with L >= %i%% for subject and L < %i%% for query (CI)" % ( thresholdCoverage, thresholdCoverage )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
192 elif match_type == 'IC':
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
193 msg = "Matches with L < %i%% for subject and L >= %i%% for query (IC)" % ( thresholdCoverage, thresholdCoverage )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
194 elif match_type == 'II':
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
195 msg ="Matches with L < %i%% for subject and query (II)" % ( thresholdCoverage )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
196 if verbose > 1:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
197 print "%s: %i subjects" % ( msg, len(Sbj2Qry.keys()) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
198 outFile.write("\n%s\n" % ( msg ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
199
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
200 for name_sbj in Sbj2Qry.keys():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
201 matchs = Sbj2Qry[name_sbj]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
202 if len(matchs) == 1:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
203 outFile.write("-> subject %s (%s: %s,%s) matches with query %s (%s: %s,%s): prct_sbj %.3f & prct_qry %.3f (id=%.3f,Eval=%g)\n" % (name_sbj,matchs[0].length_sbj,matchs[0].start_sbj,matchs[0].end_sbj,matchs[0].name_qry,matchs[0].length_qry,matchs[0].start_qry,matchs[0].end_qry,matchs[0].prct_sbj,matchs[0].prct_qry,matchs[0].identity,matchs[0].evalue))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
204 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
205 outFile.write("-> subject %s (%s: %s,%s) matches with %s queries:\n" % (name_sbj,matchs[0].length_sbj,matchs[0].start_sbj,matchs[0].end_sbj,len(matchs)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
206 for match in matchs:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
207 outFile.write("%s versus %s (%s: %s,%s): prct_sbj %.3f & prct_qry %.3f (id=%.3f,Eval=%g)\n"%(name_sbj,match.name_qry,match.length_qry,match.start_qry,match.end_qry,match.prct_sbj,match.prct_qry,match.identity,match.evalue))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
208
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
209 tmpList = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
210 for name_sbj in Sbj2Qry.keys():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
211 tmpList.append( name_sbj.split(" ")[0].lower() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
212 tmpList.sort()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
213 for name_sbj in tmpList:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
214 outFile.write( name_sbj+"\n" )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
215 dSbj2Cat[ name_sbj ] = match_type
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
216
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
217 tmpList = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
218 for name_qry in Qry2Sbj.keys():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
219 tmpList.append( name_qry.split(" ")[0].lower() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
220 tmpList.sort()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
221 for name_qry in tmpList:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
222 outFile.write( name_qry+"\n" )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
223 dQry2Cat[ name_qry ] = match_type
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
224
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
225 #----------------------------------------------------------------------------
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
226
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
227 def writeSubjectCategory( dSbj2Cat ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
228 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
229 Save the category (CC/CI/IC/II/NA) in which each subject has been found.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
230
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
231 @param dSbj2Cat: dictionary which keys are subject names and values the category of that subject
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
232 @type dSbj2Cat: dictionary
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
233 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
234
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
235 # sort the subject names in alphabetical order
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
236 lSbjSorted = dSbj2Cat.keys()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
237 lSbjSorted.sort()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
238
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
239 catFile = open( tabFileName + "_sbjCategories.txt", "w" )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
240 for sbj in lSbjSorted:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
241 string = "%s\t%s\n" % ( sbj, dSbj2Cat[ sbj ] )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
242 catFile.write( string )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
243 catFile.close()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
244
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
245 #----------------------------------------------------------------------------
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
246
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
247 def writeQueryCategory( dQry2Cat ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
248 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
249 Save the category (CC/CI/IC/II/NA) in which each query has been found.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
250
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
251 @param dQry2Cat: dictionary which keys are query names and values the category of that query
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
252 @type dQry2Cat: dictionary
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
253 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
254
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
255 # sort the query names in alphabetical order
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
256 lQrySorted = dQry2Cat.keys()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
257 lQrySorted.sort()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
258
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
259 catFile = open( tabFileName + "_qryCategories.txt", "w" )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
260 for qry in lQrySorted:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
261 string = "%s\t%s\n" % ( qry, dQry2Cat[ qry ] )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
262 catFile.write( string )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
263 catFile.close()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
264
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
265 #----------------------------------------------------------------------------
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
266
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
267 def main():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
268
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
269 global tabFileName
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
270 tabFileName = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
271 qryFileName = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
272 sbjFileName = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
273 global thresholdCoverage
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
274 thresholdCoverage = 95
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
275 minIdentity = 0
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
276 minLength = 0
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
277 minOverlap = 0
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
278 global thresholdIdentity
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
279 thresholdIdentity = 90
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
280 global thresholdEvalue
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
281 thresholdEvalue = 1e-10
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
282 global thresholdCoverageMatch
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
283 thresholdCoverageMatch = 90
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
284 global verbose
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
285 verbose = 0
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
286
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
287 try:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
288 opts, args = getopt.getopt(sys.argv[1:],"hm:q:s:t:i:l:I:E:T:o:v:")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
289 except getopt.GetoptError, err:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
290 print str(err); help(); sys.exit(1)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
291 for o,a in opts:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
292 if o == "-h":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
293 help()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
294 sys.exit(0)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
295 elif o == "-m":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
296 tabFileName = a
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
297 elif o == "-q":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
298 qryFileName = a
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
299 elif o == "-s":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
300 sbjFileName = a
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
301 elif o == "-t":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
302 thresholdCoverage = int(a)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
303 elif o == "-i":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
304 minIdentity = float(a)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
305 elif o == "-l":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
306 minLength = int(a)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
307 elif o == "-o":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
308 minOverlap = float(a)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
309 elif o == "-I":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
310 thresholdIdentity = int(a)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
311 elif o == "-E":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
312 thresholdEvalue = float(a)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
313 elif o == "-T":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
314 thresholdCoverageMatch = int(a)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
315 elif o == "-v":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
316 verbose = int(a)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
317
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
318 if tabFileName == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
319 msg = "ERROR: missing 'tab' file (-m)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
320 sys.stderr.write( "%s\n" % msg )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
321 help()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
322 sys.exit(1)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
323 if qryFileName == "" or sbjFileName == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
324 msg = "ERROR: missing 'fasta' files (-q or -s)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
325 sys.stderr.write( "%s\n" % msg )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
326 help()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
327 sys.exit(1)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
328
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
329 if verbose > 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
330 print "START %s" % (sys.argv[0].split("/")[-1])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
331 sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
332
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
333 # 4 categories of matchs:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
334 # type 1 (CC): the length of the match on the subject is >= 95% of the total length of the subject, idem for the query
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
335 # type 2 (CI): sbj >= 95% & qry < 95%
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
336 # type 3 (IC): sbj < 95% & qry >= 95%
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
337 # type 4 (II): sbj & qry < 95%
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
338 ListMatches_all = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
339 ListMatches_sup_sbjqry = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
340 ListMatches_sup_sbj = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
341 ListMatches_sup_qry = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
342 ListMatches_inf_sbjqry = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
343
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
344 qryDB = pyRepet.seq.BioseqDB.BioseqDB( qryFileName )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
345 nbQry = qryDB.getSize()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
346 if verbose > 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
347 print "nb of queries in '%s': %i" % ( qryFileName, nbQry )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
348 dQry2Cat = {}
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
349 for bs in qryDB.db:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
350 dQry2Cat[ bs.header.split(" ")[0].lower() ] = "NA"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
351
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
352 sbjDB = pyRepet.seq.BioseqDB.BioseqDB( sbjFileName )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
353 nbSbj = sbjDB.getSize()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
354 if verbose > 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
355 print "nb of subjects in '%s': %i" % ( sbjFileName, nbSbj )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
356 dSbj2Cat = {}
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
357 for bs in sbjDB.db:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
358 dSbj2Cat[ bs.header.split(" ")[0].lower() ] = "NA"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
359
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
360 tabFile = open( tabFileName )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
361 nbMatchesInTab = 0
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
362 dSubject2DistinctQueries = {}
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
363 dQuery2DistinctSubjects = {}
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
364
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
365 # For each match, create a 'tabFileReader' object and record it in a list according to the type of the match
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
366 if verbose > 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
367 print "parse the 'tab' file..."; sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
368 while True:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
369 line = tabFile.readline()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
370 if line == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
371 break
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
372 if line[0:10] == "query.name":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
373 continue
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
374 nbMatchesInTab += 1
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
375
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
376 match = tabFileReader( line )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
377 if match.identity < minIdentity:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
378 line = tabFile.readline()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
379 continue
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
380 if match.length_match < minLength:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
381 line = tabFile.readline()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
382 continue
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
383 if match.prct_qry < minOverlap or match.prct_sbj < minOverlap:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
384 line = tabFile.readline()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
385 continue
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
386 ListMatches_all.append( match )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
387
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
388 # type 1: sbj C & qry C
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
389 if match.prct_sbj >= thresholdCoverage and match.prct_qry >= thresholdCoverage:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
390 qsLengthRatio = 100 * match.length_qry / float(match.length_sbj)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
391 if match.identity >= thresholdIdentity \
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
392 and match.evalue <= thresholdEvalue \
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
393 and qsLengthRatio >= thresholdCoverage - 2 \
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
394 and qsLengthRatio <= 100 + (100-thresholdCoverage) + 2 \
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
395 and match.prct_matchQryOverSbj >= thresholdCoverageMatch:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
396 ListMatches_sup_sbjqry.append( match )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
397 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
398 ListMatches_inf_sbjqry.append( match )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
399
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
400 # type 2: sbj C & qry I
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
401 elif match.prct_sbj >= thresholdCoverage and match.prct_qry < thresholdCoverage:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
402 ListMatches_sup_sbj.append( match )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
403
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
404 # type 3: sbj I & qry C
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
405 elif match.prct_qry >= thresholdCoverage and match.prct_sbj < thresholdCoverage:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
406 ListMatches_sup_qry.append( match )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
407
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
408 # type 4: sbj I & qry I
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
409 elif match.prct_qry < thresholdCoverage and match.prct_sbj < thresholdCoverage:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
410 ListMatches_inf_sbjqry.append( match )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
411
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
412 if not dSubject2DistinctQueries.has_key( match.name_sbj ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
413 dSubject2DistinctQueries[ match.name_sbj ] = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
414 if not match.name_qry in dSubject2DistinctQueries[ match.name_sbj ]:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
415 dSubject2DistinctQueries[ match.name_sbj ].append( match.name_qry )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
416 if not dQuery2DistinctSubjects.has_key( match.name_qry ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
417 dQuery2DistinctSubjects[ match.name_qry ] = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
418 if not match.name_sbj in dQuery2DistinctSubjects[ match.name_qry ]:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
419 dQuery2DistinctSubjects[ match.name_qry ].append( match.name_sbj )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
420
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
421 if verbose > 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
422 print "parsing done !"; sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
423 print "nb matches in '%s': %i" % ( tabFileName, nbMatchesInTab )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
424 print "nb matches 'CC': %i" % ( len(ListMatches_sup_sbjqry) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
425 if verbose > 1:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
426 for match in ListMatches_sup_sbjqry:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
427 print "\t%s (%.2f%%) - %s (%.2f%%) id=%.2f" % ( match.name_sbj, match.prct_sbj, match.name_qry, match.prct_qry, match.identity )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
428 print "nb matches 'CI': %i" % ( len(ListMatches_sup_sbj) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
429 if verbose > 1:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
430 for match in ListMatches_sup_sbj:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
431 print "\t%s (%.2f%%) - %s (%.2f%%) id=%.2f" % ( match.name_sbj, match.prct_sbj, match.name_qry, match.prct_qry, match.identity )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
432 print "nb matches 'IC': %i" % ( len(ListMatches_sup_qry) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
433 print "nb matches 'II': %i" % ( len(ListMatches_inf_sbjqry) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
434
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
435 if nbMatchesInTab == 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
436 print "nothing to do"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
437 sys.exit(0)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
438
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
439 # For each type of matchs, record them in 2 dictionaries: Sbj2Qry and Qry2Sbj
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
440 D_all = make_dico( ListMatches_all )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
441 Sbj2Qry_all = D_all[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
442 Qry2Sbj_all = D_all[1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
443
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
444 D_sup_sbjqry = make_dico(ListMatches_sup_sbjqry)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
445 Sbj2Qry_sup_sbjqry = D_sup_sbjqry[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
446 Qry2Sbj_sup_sbjqry = D_sup_sbjqry[1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
447
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
448 D_sup_sbj = make_dico(ListMatches_sup_sbj)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
449 Sbj2Qry_sup_sbj = D_sup_sbj[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
450 Qry2Sbj_sup_sbj = D_sup_sbj[1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
451
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
452 D_sup_qry = make_dico(ListMatches_sup_qry)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
453 Sbj2Qry_sup_qry = D_sup_qry[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
454 Qry2Sbj_sup_qry = D_sup_qry[1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
455
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
456 D_inf_sbjqry = make_dico(ListMatches_inf_sbjqry)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
457 Sbj2Qry_inf_sbjqry = D_inf_sbjqry[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
458 Qry2Sbj_inf_sbjqry = D_inf_sbjqry[1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
459
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
460
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
461 # For each type of matches, find the subjects/queries that are involve in one or several match
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
462 list_all = find_UniqRedun(ListMatches_all)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
463 UniqSbj_all = list_all[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
464 RedunSbj_all = list_all[1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
465 UniqQry_all = list_all[2]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
466 RedunQry_all = list_all[3]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
467
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
468 list1 = find_UniqRedun(ListMatches_sup_sbjqry)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
469 UniqSbj_sup_sbjqry = list1[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
470 RedunSbj_sup_sbjqry = list1[1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
471 UniqQry_sup_sbjqry = list1[2]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
472 RedunQry_sup_sbjqry = list1[3]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
473
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
474 list2 = find_UniqRedun(ListMatches_sup_sbj)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
475 UniqSbj_sup_sbj = list2[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
476 RedunSbj_sup_sbj = list2[1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
477 UniqQry_sup_sbj = list2[2]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
478 RedunQry_sup_sbj = list2[3]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
479
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
480 list3 = find_UniqRedun(ListMatches_sup_qry)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
481 UniqSbj_sup_qry = list3[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
482 RedunSbj_sup_qry = list3[1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
483 UniqQry_sup_qry = list3[2]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
484 RedunQry_sup_qry = list3[3]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
485
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
486 list4 = find_UniqRedun(ListMatches_inf_sbjqry)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
487 UniqSbj_inf_sbjqry = list4[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
488 RedunSbj_inf_sbjqry = list4[1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
489 UniqQry_inf_sbjqry = list4[2]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
490 RedunQry_inf_sbjqry = list4[3]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
491
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
492 iStatSbj = pyRepet.util.Stat.Stat()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
493 for subject in dSubject2DistinctQueries.keys():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
494 iStatSbj.add( len( dSubject2DistinctQueries[ subject ] ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
495 iStatQry = pyRepet.util.Stat.Stat()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
496 for query in dQuery2DistinctSubjects.keys():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
497 iStatQry.add( len( dQuery2DistinctSubjects[ query ] ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
498
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
499
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
500 # Write the review of the '.tab' file
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
501 outFile = open( tabFileName + "_tabFileReader.txt", "w" )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
502 outFile.write( "Input: %s\n" % ( tabFileName ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
503
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
504 outFile.write( "\n# Number of subjects in '%s': %i\n" % ( sbjFileName, nbSbj ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
505 outFile.write( "# Number of queries in '%s': %i\n" % ( qryFileName, nbQry ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
506
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
507 outFile.write( "\nNumber of matches: %s\n" % (len(ListMatches_all)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
508 outFile.write( " # Number of different subjects that match: %s (Sn*=%.2f%%)\n" % ( len(Sbj2Qry_all.keys()), 100 * len(Sbj2Qry_all.keys()) / float(nbSbj) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
509 outFile.write( " Among them, number of different subjects having exactly one match: %s (%.2f%%)\n" % ( len(UniqSbj_all), 100 * len(UniqSbj_all) / float(len(Sbj2Qry_all.keys())) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
510 outFile.write( " Among them, number of different subjects having more than one match: %s\n" % (len(RedunSbj_all)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
511 outFile.write( " Different queries per subject: mean=%.2f sd=%.2f min=%.2f q25=%.2f med=%.2f q75=%.2f max=%.2f\n" % ( iStatSbj.mean(), iStatSbj.sd(), iStatSbj.min, iStatSbj.quantile(0.25), iStatSbj.median(), iStatSbj.quantile(0.75), iStatSbj.max ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
512 outFile.write( " # Number of different queries that match: %s (Sp*=%.2f%%)\n" % ( len(Qry2Sbj_all.keys()), 100 * len(Qry2Sbj_all.keys()) / float(nbQry) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
513 outFile.write( " Among them, number of different queries having exactly one match: %s (%.2f%%)\n" % ( len(UniqQry_all), 100 * len(UniqQry_all) / float(len(Qry2Sbj_all.keys())) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
514 outFile.write( " Among them, number of different queries having more than one match: %s\n" % (len(RedunQry_all)) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
515 outFile.write( " Different subjects per query: mean=%.2f sd=%.2f min=%.2f q25=%.2f med=%.2f q75=%.2f max=%.2f\n" % ( iStatQry.mean(), iStatQry.sd(), iStatQry.min, iStatQry.quantile(0.25), iStatQry.median(), iStatQry.quantile(0.75), iStatQry.max ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
516
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
517 outFile.write( "\nNumber of matches with L >= %i%% for subject & query: %i\n" % ( thresholdCoverage, len(ListMatches_sup_sbjqry) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
518 outFile.write( " # Number of different subjects in the 'CC' case: %s (%.2f%%)\n" % ( len(Sbj2Qry_sup_sbjqry), 100 * len(Sbj2Qry_sup_sbjqry) / float(nbSbj) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
519 outFile.write( " Among them, number of different subjects having exactly one match: %s\n" % (len(UniqSbj_sup_sbjqry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
520 outFile.write( " Among them, number of different subjects having more than one match: %s\n" % (len(RedunSbj_sup_sbjqry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
521 outFile.write( " # Number of different queries in the 'CC' case: %s (%.2f%%)\n" % ( len(Qry2Sbj_sup_sbjqry), 100 * len(Qry2Sbj_sup_sbjqry) / float(nbQry) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
522 outFile.write( " Among them, number of different queries having exactly one match: %s\n" % (len(UniqQry_sup_sbjqry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
523 outFile.write( " Among them, number of different queries having more than one match: %s\n" % (len(RedunQry_sup_sbjqry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
524
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
525 outFile.write( "\nNumber of matches with L >= %i%% for subject and L < %i%% for query: %i\n" % ( thresholdCoverage, thresholdCoverage, len(ListMatches_sup_sbj) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
526 outFile.write( " Number of different subjects in that case: %s\n" % (len(Sbj2Qry_sup_sbj)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
527 outFile.write( " Among them, number of different subjects having exactly one match: %s\n" % (len(UniqSbj_sup_sbj)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
528 outFile.write( " Among them, number of different subjects having more than one match: %s\n" % (len(RedunSbj_sup_sbj)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
529 outFile.write( " Number of different queries in that case: %s\n" % (len(Qry2Sbj_sup_sbj)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
530 outFile.write( " Among them, number of different queries having exactly one match: %s\n" % (len(UniqQry_sup_sbj)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
531 outFile.write( " Among them, number of different queries having more than one match: %s\n" % (len(RedunQry_sup_sbj)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
532
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
533 outFile.write( "\nNumber of matches with L < %i%% for subject and L >= %i%% for query: %i\n" % ( thresholdCoverage, thresholdCoverage, len(ListMatches_sup_qry) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
534 outFile.write( " Number of different subjects in that case: %s\n" % (len(Sbj2Qry_sup_qry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
535 outFile.write( " Among them, number of different subjects having exactly one match: %s\n" % (len(UniqSbj_sup_qry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
536 outFile.write( " Among them, number of different subjects having more than one match: %s\n" % (len(RedunSbj_sup_qry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
537 outFile.write( " Number of different queries in that case: %s\n" % (len(Qry2Sbj_sup_qry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
538 outFile.write( " Among them, number of different queries having exactly one match: %s\n" % (len(UniqQry_sup_qry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
539 outFile.write( " Among them, number of different queries having more than one match: %s\n" % (len(RedunQry_sup_qry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
540
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
541 outFile.write( "\nNumber of matches with L < %i%% for subject & query: %i\n" % ( thresholdCoverage, len(ListMatches_inf_sbjqry) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
542 outFile.write( " Number of different subjects in that case: %s\n" % (len(Sbj2Qry_inf_sbjqry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
543 outFile.write( " Among them, number of different subjects having exactly one match: %s\n" % (len(UniqSbj_inf_sbjqry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
544 outFile.write( " Among them, number of different subjects having more than one match: %s\n" % (len(RedunSbj_inf_sbjqry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
545 outFile.write( " Number of different queries in that case: %s\n" % (len(Qry2Sbj_inf_sbjqry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
546 outFile.write( " Among them, number of different queries having exactly one match: %s\n" % (len(UniqQry_inf_sbjqry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
547 outFile.write( " Among them, number of different queries having more than one match: %s\n" % (len(RedunQry_inf_sbjqry)))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
548
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
549
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
550 # For the elements already counted in the matches with L >= 95% for subject & query, remove them from the other dictionnaries
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
551 rmv_Sbj2Qry = remove( Sbj2Qry_all, Sbj2Qry_sup_sbjqry, Sbj2Qry_sup_sbj, Sbj2Qry_sup_qry, Sbj2Qry_inf_sbjqry )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
552 rmv_Qry2Sbj = remove( Qry2Sbj_all, Qry2Sbj_sup_sbjqry, Qry2Sbj_sup_sbj, Qry2Sbj_sup_qry, Qry2Sbj_inf_sbjqry )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
553
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
554 outFile.write("\n\nAfter removal of the subjects/queries already counted in the matches with L >= %i%% for them:\n" % ( thresholdCoverage ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
555
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
556 outFile.write( "\nMatches with L >= %i%% for subject and L < %i%% for query:\n" % ( thresholdCoverage, thresholdCoverage ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
557 outFile.write( " # Number of different subjects in the 'CI' case: %s (%.2f%%)\n" % ( len(rmv_Sbj2Qry[0]), 100*len(rmv_Sbj2Qry[0])/float(nbSbj) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
558 outFile.write( " # Number of different queries in the 'CI' case: %s (%.2f%%)\n" % ( len(rmv_Qry2Sbj[0]), 100*len(rmv_Qry2Sbj[0])/float(nbQry) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
559
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
560 outFile.write( "\nMatches with L < %i%% for subject and L >= %i%% for query:\n" % ( thresholdCoverage, thresholdCoverage ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
561 outFile.write( " # Number of different subjects in the 'IC' case: %s (%.2f%%)\n" % (len(rmv_Sbj2Qry[1]), 100*len(rmv_Sbj2Qry[1])/float(nbSbj) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
562 outFile.write( " # Number of different queries in the 'IC' case: %s (%.2f%%)\n" % (len(rmv_Qry2Sbj[1]), 100*len(rmv_Qry2Sbj[1])/float(nbQry) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
563
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
564 outFile.write( "\nMatches with L < %i%% for subject & query:\n" % ( thresholdCoverage ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
565 outFile.write( " # Number of different subjects in the 'II' case: %s (%.2f%%)\n" % (len(rmv_Sbj2Qry[2]), 100*len(rmv_Sbj2Qry[2])/float(nbSbj) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
566 outFile.write( " # Number of different queries in the 'II' case: %s (%.2f%%)\n" % (len(rmv_Qry2Sbj[2]), 100*len(rmv_Qry2Sbj[2])/float(nbQry) ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
567
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
568 outFile.write("\n==========================================================================\n")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
569
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
570 write_output( outFile, 'CC', Sbj2Qry_sup_sbjqry, dSbj2Cat, Qry2Sbj_sup_sbjqry, dQry2Cat )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
571
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
572 outFile.write("\n==========================================================================\n")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
573
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
574 write_output( outFile, 'CI', rmv_Sbj2Qry[0], dSbj2Cat, rmv_Qry2Sbj[0], dQry2Cat )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
575
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
576 outFile.write("\n==========================================================================\n")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
577
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
578 write_output( outFile, 'IC', rmv_Sbj2Qry[1], dSbj2Cat, rmv_Qry2Sbj[1], dQry2Cat )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
579
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
580 outFile.write("\n==========================================================================\n")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
581
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
582 write_output( outFile, 'II', rmv_Sbj2Qry[2], dSbj2Cat, rmv_Qry2Sbj[2], dQry2Cat )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
583
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
584 outFile.write("\n==========================================================================\n")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
585
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
586 outFile.close()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
587
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
588 writeSubjectCategory( dSbj2Cat )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
589 writeQueryCategory( dQry2Cat )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
590
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
591 if verbose > 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
592 print "END %s" % (sys.argv[0].split("/")[-1])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
593 sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
594
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
595 return 0
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
596
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
597 #-----------------------------------------------------------------------------------------------------
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
598
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
599 if __name__ == "__main__":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
600 main()