| 
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() 
 |