| 
63
 | 
     1 #!/usr/bin/env python
 | 
| 
 | 
     2 # -*- coding: utf-8 -*-
 | 
| 
 | 
     3 import sys
 | 
| 
 | 
     4 from Bio import SeqIO
 | 
| 
 | 
     5 import math
 | 
| 
 | 
     6 from parse_dis_react import *
 | 
| 
 | 
     7 from react_norm_function import *
 | 
| 
 | 
     8 import os
 | 
| 
 | 
     9 import random
 | 
| 
 | 
    10 import string
 | 
| 
 | 
    11 
 | 
| 
 | 
    12 
 | 
| 
 | 
    13 dist_file1 = sys.argv[1] #plus library
 | 
| 
 | 
    14 dist_file2 = sys.argv[2] #minus library
 | 
| 
 | 
    15 seq_file = sys.argv[3] #Reference library(genome/cDNA)
 | 
| 
 | 
    16 nt_spec = sys.argv[4] #only show reactivity for AC or ATCG
 | 
| 
 | 
    17 flag_in = sys.argv[5] # perform 2-8% normalization (1) or not (0)
 | 
| 
 | 
    18 threshold = sys.argv[6] #Threshold to cap the reactivities
 | 
| 
 | 
    19 output_file = sys.argv[7]
 | 
| 
 | 
    20 
 | 
| 
 | 
    21 
 | 
| 
 | 
    22 distri_p = parse_dist(dist_file1)
 | 
| 
 | 
    23 distri_m = parse_dist(dist_file2)
 | 
| 
 | 
    24 threshold = float(threshold)
 | 
| 
 | 
    25 
 | 
| 
 | 
    26 
 | 
| 
 | 
    27 syspathrs = os.getcwd()
 | 
| 
 | 
    28 
 | 
| 
 | 
    29 h = file(syspathrs+"react.txt",'w')
 | 
| 
 | 
    30 flag_in = int(flag_in)
 | 
| 
 | 
    31 
 | 
| 
 | 
    32 seqs = SeqIO.parse(open(seq_file),'fasta');
 | 
| 
 | 
    33 nt_s = set()
 | 
| 
 | 
    34 for i in range(len(nt_spec)):
 | 
| 
 | 
    35     nt_s.add(nt_spec[i])
 | 
| 
 | 
    36 
 | 
| 
 | 
    37 flag = 0
 | 
| 
 | 
    38 trans = []
 | 
| 
 | 
    39 distri_p = distri_p[1]
 | 
| 
 | 
    40 distri_m = distri_m[1]
 | 
| 
 | 
    41 
 | 
| 
 | 
    42 #thres = int(threshold)
 | 
| 
 | 
    43 
 | 
| 
 | 
    44 
 | 
| 
 | 
    45 transcripts = {}
 | 
| 
 | 
    46 for seq in seqs:
 | 
| 
 | 
    47     n = seq.id
 | 
| 
 | 
    48     trans.append(n)
 | 
| 
 | 
    49     transcripts[n] = seq.seq.tostring()
 | 
| 
 | 
    50     
 | 
| 
 | 
    51 
 | 
| 
 | 
    52 #print(distri_p)
 | 
| 
 | 
    53         
 | 
| 
 | 
    54 
 | 
| 
 | 
    55 for i in range(0, len(trans)):
 | 
| 
 | 
    56     h.write(trans[i])
 | 
| 
 | 
    57     h.write('\n')       
 | 
| 
 | 
    58     for j in range(len(distri_p[trans[i]])):
 | 
| 
 | 
    59         distri_p[trans[i]][j] = math.log((int(distri_p[trans[i]][j])+1),math.e)
 | 
| 
 | 
    60     for j in range(len(distri_m[trans[i]])):
 | 
| 
 | 
    61         distri_m[trans[i]][j] = math.log((int(distri_m[trans[i]][j])+1),math.e)       
 | 
| 
 | 
    62     s_p = sum(distri_p[trans[i]])
 | 
| 
 | 
    63     s_m = sum(distri_m[trans[i]])
 | 
| 
 | 
    64     length = len(distri_p[trans[i]])
 | 
| 
 | 
    65     if s_p!= 0 and s_m!= 0:
 | 
| 
 | 
    66         r = []
 | 
| 
 | 
    67         for j in range(0, len(distri_p[trans[i]])):
 | 
| 
 | 
    68             f_p = (float(distri_p[trans[i]][j]))/float(s_p)*length
 | 
| 
 | 
    69             f_m = (float(distri_m[trans[i]][j]))/float(s_m)*length
 | 
| 
 | 
    70             raw_react = f_p-f_m
 | 
| 
 | 
    71             r.append(max(0, raw_react))
 | 
| 
 | 
    72                 
 | 
| 
 | 
    73     if s_p!= 0 and s_m!= 0:    
 | 
| 
 | 
    74         for k in range(1,(len(r)-1)):
 | 
| 
 | 
    75             if transcripts[trans[i]][k-1] in nt_s:
 | 
| 
 | 
    76                 h.write(str(r[k]))
 | 
| 
 | 
    77                 h.write('\t')
 | 
| 
 | 
    78             else:
 | 
| 
 | 
    79                 h.write('NA')
 | 
| 
 | 
    80                 h.write('\t')
 | 
| 
 | 
    81         k = k+1
 | 
| 
 | 
    82         if transcripts[trans[i]][k-1] in nt_s:
 | 
| 
 | 
    83             h.write(str(r[k]))
 | 
| 
 | 
    84             h.write('\n')
 | 
| 
 | 
    85         else:
 | 
| 
 | 
    86             h.write('NA')
 | 
| 
 | 
    87             h.write('\n')
 | 
| 
 | 
    88             
 | 
| 
 | 
    89 
 | 
| 
 | 
    90 h.close()
 | 
| 
 | 
    91 
 | 
| 
 | 
    92 if flag_in:
 | 
| 
 | 
    93     react_norm((syspathrs+"react.txt"),output_file, threshold)
 | 
| 
 | 
    94 else:
 | 
| 
 | 
    95     h_o = file(output_file, 'w')
 | 
| 
 | 
    96     f_i = open(syspathrs+"react.txt")
 | 
| 
 | 
    97     for aline in f_i.readlines():
 | 
| 
 | 
    98         h_o.write(aline.strip())
 | 
| 
 | 
    99         h_o.write('\n')
 | 
| 
 | 
   100 os.system("rm -f "+syspathrs+"react.txt")
 | 
| 
 | 
   101 
 | 
| 
 | 
   102 #os.system("rm -r "+syspathrs)
 | 
| 
 | 
   103     
 | 
| 
 | 
   104      
 | 
| 
 | 
   105             
 | 
| 
 | 
   106     
 | 
| 
 | 
   107     
 | 
| 
 | 
   108         
 | 
| 
 | 
   109 
 | 
| 
 | 
   110 
 | 
| 
 | 
   111 
 | 
| 
 | 
   112 
 | 
| 
 | 
   113 
 | 
| 
 | 
   114 
 | 
| 
 | 
   115 
 | 
| 
 | 
   116 
 | 
| 
 | 
   117 
 | 
| 
 | 
   118 
 | 
| 
 | 
   119 
 | 
| 
 | 
   120 
 | 
| 
 | 
   121 
 | 
| 
 | 
   122 
 | 
| 
 | 
   123 
 | 
| 
 | 
   124 
 | 
| 
 | 
   125 
 | 
| 
 | 
   126 
 | 
| 
 | 
   127 
 | 
| 
 | 
   128 
 | 
| 
 | 
   129 
 | 
| 
 | 
   130         
 | 
| 
 | 
   131 
 | 
| 
 | 
   132 
 | 
| 
 | 
   133 
 | 
| 
 | 
   134 
 | 
| 
 | 
   135 
 |