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