Example #1
0
 def recognizer_asymmetry(self):
     A = 0
     T = 1
     C = 2
     G = 3
     positions = transpose(self.input_layer)
     end = len(positions) - 1
     asymmetry = sum([((positions[i][A] - positions[end-i][T])**2 +
                       (positions[i][T] - positions[end-i][A])**2 +
                       (positions[i][G] - positions[end-i][C])**2 +
                       (positions[i][C] - positions[end-i][G])**2)
                      for i in range(int((end + 1)/2))])
     return asymmetry
Example #2
0
 def detect_correlations2(self,site):
     """Does the MLP exhibit any correlations of the type
     demonstrated by Man & Stormo (NAR 2001)?"""
     bases = "ATCG" # follow ordering defined in Recognizer class
     w = len(site)
     all_dependent = True
     dependencies = 0
     discrepancy_dict = {}
     for (i,j) in choose2(range(w)):
         print (i,j)
         base1 = site[i]
         base2 = site[j]
         base_index1 = Recognizer.base_index[base1]
         base_index2 = Recognizer.base_index[base2]
         default_energy = self.binding_energy(site)
         alt_sites = [[subst(subst(site,b1,i),b2,j)
                       for b2 in bases]
                      for b1 in bases]
         alt_energies = mmap(self.binding_energy,alt_sites)
         best_energy = min(map(min,alt_energies))
         norm_energies = mmap(lambda x:x/best_energy,alt_energies)
         norm_default_energy = default_energy/best_energy
         independent = all((sorted_indices(alt_energy_row) ==
                            sorted_indices(alt_energies[0]))
                           for alt_energy_row in alt_energies)
         
         #independent = False
         if independent:
             all_dependent = False
         else:
             dependencies += 1
             ###Print motif
             print (i,j)
             print "     "
             for c2 in bases:
                 print "    ",c2,
             print
             
             for b_i1,c1 in enumerate(bases):
                 print c1,
                 for b_i2 in range(4):
                     print "%1.4f" % norm_energies[b_i1][b_i2],
                 print
             print "actual bases:",base1,base2,(base_index1,base_index2)
             ###Finish printing motif
             for base,row in zip(bases,norm_energies):
                 if (norm_energies[base_index1][base_index2] > row[base_index2] and
                     (all(norm_energies[base_index1][b] < row[b]
                          for b in range(4) if b != base_index1))):
                     print "discrepancy:", (norm_energies[base_index1][base_index2] -
                                           row[base_index2])
                     print "consider row:",base,row
             tr_norm_energies = transpose(norm_energies)
             for base,col in zip(bases,tr_norm_energies):
                 if (norm_energies[base_index1][base_index2] > col[base_index1]
                     and
                     (all(norm_energies[b][base_index2] < col[b]
                          for b in range(4) if b != base_index1))):
                     print "discrepancy:",(norm_energies[base_index1][base_index2] -
                                           col[base_index1])
                     print "consider col:",base,col
                   
             
     print "all dependent:",all_dependent
     print "# dependencies:", dependencies, "out of:",len(choose2(range(w)))
     return discrepancy_dict
Example #3
0
 def max_binding_site(self):
     """Return the site yielding the minimum binding energy"""
     return "".join([max(zip("ATCG",col),key=lambda (c,w):w)[0]
                     for col in transpose(self.input_layer)])
Example #4
0
 def activation(self,site):
     positions = transpose(self.input_layer)
     total = sum([positions[i][Recognizer.base_index[base]]
                  for i,base in enumerate(site)])
     return 1/(1+exp(-total))