# Author Michele Mattioni # date Tue Dec 8 15:55:10 GMT 2009 from helpers.loader import Loader import matplotlib import matplotlib.pyplot as plt class spinePercentual(object): def __init__(self): self.soma_radius = 8 self.prox_ex = self.soma_radius + 20 self.mid_ex = self.prox_ex + 20 self.dist_ex = self.mid_ex + 190 def reduce_noise(self, spines_pos): """We don't take in account the first 5 spines position""" pos_to_remove = 5 for i in range(pos_to_remove): spines_pos.pop(0) return spines_pos def convert_to_perc(self, spines_pos): """Convert the position to a normalized per dend pos""" # Divide the spines for branch # Two mid dendrite for branch self.mids = [[],[]] # 4 Distal dendrite for branch. self.dists = [[],[],[],[]] for sp in spines_pos: if self.prox_ex < sp < self.mid_ex: #Mid dend x = self.calc_perc_pos(self.prox_ex, self.mid_ex, sp) # Add the spine to the dendrite which have less spines shortest = min(self.mids, key=len) shortest.append(x) elif self.mid_ex < sp < self.dist_ex: # Dist dend x = self.calc_perc_pos(self.mid_ex, self.dist_ex, sp) shortest = min(self.dists, key=len) shortest.append(x) # Insert the spines in perc def calc_perc_pos(self, start, end, value): """Calc the percentual of the spine in the dends lenght : 1 = value : x x = value/lenght """ real_value = value - start length = end -start x = real_value/length return x if __name__ == "__main__": l = Loader() spines_pos = l.load('spines_pos.pickle') plt.hist(spines_pos, bins=30, label='normal') spinePer = spinePercentual() spines_pos = spinePer.reduce_noise(spines_pos) plt.hist(spines_pos, bins=30, label='noise red') plt.legend() print "Calculating the spines pos normalized to 1" spinePer.convert_to_perc(spines_pos) l.save(spinePer.mids, '.', 'mid_spines_per_branch.pickle') l.save(spinePer.dists, '.', 'dist_spines_per_branch.pickle') plt.show()