| 0 | 1 # ----------------------------------------------------------------------# | 
|  | 2 # Copyright (c) 2011, Richard Lupat & Jason Li. | 
|  | 3 # | 
|  | 4 # > Source License < | 
|  | 5 # This file is part of CONTRA. | 
|  | 6 # | 
|  | 7 #    CONTRA is free software: you can redistribute it and/or modify | 
|  | 8 #    it under the terms of the GNU General Public License as published by | 
|  | 9 #    the Free Software Foundation, either version 3 of the License, or | 
|  | 10 #    (at your option) any later version. | 
|  | 11 # | 
|  | 12 #    CONTRA is distributed in the hope that it will be useful, | 
|  | 13 #    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | 14 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | 15 #    GNU General Public License for more details. | 
|  | 16 # | 
|  | 17 #    You should have received a copy of the GNU General Public License | 
|  | 18 #    along with CONTRA.  If not, see <http://www.gnu.org/licenses/>. | 
|  | 19 # | 
|  | 20 # | 
|  | 21 #-----------------------------------------------------------------------# | 
|  | 22 # Last Updated : 12 Oct 2011 11:00AM | 
|  | 23 | 
|  | 24 def applyThreshold(outputName, bufTable, threshold, maxGap): | 
|  | 25 	srcFile = outputName + ".txt" | 
|  | 26 	outFile = bufTable + ".LargeVariations.txt" | 
|  | 27 	bedFile = bufTable + ".BED" | 
|  | 28 	fFile 	= outputName + ".DetailsFILTERED.txt" | 
|  | 29 	ts	= float(threshold) | 
|  | 30 | 
|  | 31 	# Read and open files | 
|  | 32 	srcTable = file.readlines(open(srcFile)) | 
|  | 33 	outTable = open(outFile, "w") | 
|  | 34 	bedOut	 = open(bedFile, "w") | 
|  | 35 	filteredTable = open(fFile, "w") | 
|  | 36 | 
|  | 37 | 
|  | 38 	#header | 
|  | 39 	outTable.write("Chr \tStartCoordinate \tEndCoordinate \tGenes \tGain.Loss \n") | 
|  | 40 	filteredTable.write(srcTable[0]) | 
|  | 41 | 
|  | 42 	prevChr = '' | 
|  | 43 	prevStatus = '' | 
|  | 44 	prevEnd = -1 | 
|  | 45 	genes = [] | 
|  | 46 	chrList = [] | 
|  | 47 | 
|  | 48 	for exons in srcTable: | 
|  | 49 		exon = exons.split() | 
|  | 50 		try: | 
|  | 51 			adjPVal = float(exon[12]) | 
|  | 52 		except: | 
|  | 53 			continue | 
|  | 54 | 
|  | 55 		if adjPVal <= ts: | 
|  | 56 			chr 	= exon[3] | 
|  | 57 			gene 	= exon[2] | 
|  | 58 			status 	= exon[13] | 
|  | 59 			start 	= exon[4] | 
|  | 60 			end	= exon[5] | 
|  | 61 | 
|  | 62 			# For first row | 
|  | 63 			if prevEnd == -1: | 
|  | 64 				gap = 0 | 
|  | 65 			else: | 
|  | 66 				gap = int(prevEnd) - int(start) | 
|  | 67 | 
|  | 68 			# Write Filtered Table | 
|  | 69 			filteredTable.write(exons) | 
|  | 70 | 
|  | 71 			# Write Bed File | 
|  | 72 			bedOut.write(chr.strip("chr") +"\t" +start +"\t"+ end+"\t"+ | 
|  | 73 			   chr.strip("chr")+":"+start+"-"+end+":"+str(adjPVal)+"\n") | 
|  | 74 | 
|  | 75 			if prevChr == '' and prevStatus == '': | 
|  | 76 				if chr not in chrList: | 
|  | 77 					print chr | 
|  | 78 					chrList.append(chr) | 
|  | 79 			elif (chr == prevChr) and (status == prevStatus) and (gap < maxGap): | 
|  | 80 				start = prevStart | 
|  | 81 			else: | 
|  | 82 				outTable.write(prevChr +"\t" +prevStart +"\t" +prevEnd + "\t") | 
|  | 83 				for gsym in genes: | 
|  | 84 					outTable.write(gsym + ", ") | 
|  | 85 				outTable.write("\t" + prevStatus + "\n") | 
|  | 86 				genes=[] | 
|  | 87 | 
|  | 88 			if gene not in genes: | 
|  | 89 				genes.append(gene) | 
|  | 90 			prevChr = chr | 
|  | 91 			prevStatus = status | 
|  | 92 			prevStart = start | 
|  | 93 			prevEnd = end | 
|  | 94 		elif len(genes) > 0: | 
|  | 95 			outTable.write(prevChr +"\t" +prevStart +"\t" +prevEnd + "\t") | 
|  | 96 			for gsym in genes: | 
|  | 97 				outTable.write(gsym + ", " ) | 
|  | 98 			outTable.write("\t" + prevStatus + "\n") | 
|  | 99 			prevChr = '' | 
|  | 100 			prevStatus = '' | 
|  | 101 			genes = [] | 
|  | 102 | 
|  | 103 	if len(genes) > 0: | 
|  | 104         	outTable.write(prevChr +"\t" +prevStart +"\t" +prevEnd + "\t") | 
|  | 105         	for gsym in genes: | 
|  | 106                 	outTable.write(gsym + ", ") | 
|  | 107         	outTable.write("\t" + prevStatus + "\n") | 
|  | 108 | 
|  | 109 	filteredTable.close() | 
|  | 110 	bedOut.close() | 
|  | 111 	outTable.close() |