Beispiel #1
0
 def findCenterOfSoma(self):
     '''
     Method find start point for work main algorithm
     first point should be in soma. Soma is the 
     biggest segment of cell. 
     '''
     iter = 0
     temp_points = []
     slices = []
     for p in range(len(self.vertices)):
         temp_points.append(HelpPoint(p,0))
     slice = Slice(temp_points,self.faces)
     slices.append(slice)
     while len(slice) != 0:
         temp_points = filter(lambda p: not slice.__contains__(p), temp_points)
         slice = None
         slice = Slice(temp_points,self.faces)
         if len(slice) != 0:
             slices.append(slice)
             print len(temp_points)
             #slice.printSlice()
             #print slice.getPerimetr(self.vertices)
             
     perimiter_coll = sorted(slices,key=lambda slice:slice.getPerimetr(self.vertices), reverse=True)
     startSlice = Slice(perimiter_coll[0],self.faces)
     self.start_center_point = self.__getCenterPoint(startSlice)
     self.start_center_point.diametr = 2 * self.start_center_point.len_between_point(self.vertices[perimiter_coll[0][0].point])
Beispiel #2
0
 def __more4AdjacentPointCase(self, adjacentPoints, slice, isBrunch,iteration, current_point, center_point):
     '''
     Work when algorithm find more that 4 adjacent points 
     '''
     branchesCollection = self.__fillUpBrachesCollection(adjacentPoints, slice)
     if len(branchesCollection) >= 2 :
         center_points = {}
         thirdBrunchCollection = []
         for branch in branchesCollection:
             branch_center_point = self.__getCenterPoint(branch) 
             center_points[branch_center_point] = branch
         for branch_center_point,branch in center_points.items():
             self.find_point(branch_center_point,iteration,current_point,True,True, _slice=branch)
             if len(adjacentPoints) > 6:
                 thirdBrunchCollection.extend(branch) 
         thirdBrunchPoints = [HelpPoint(p.point,self.vertices[p.point].len_between_point(center_point)) \
                    for p in thirdBrunchCollection if not slice.__contains__(p)]
         slice_t = Slice(thirdBrunchPoints, self.faces)
         if len(slice_t) == 4:
             third_brunch_center_point = self.__getCenterPoint(slice_t)
             self.find_point(third_brunch_center_point,iteration, current_point,True,True, _slice=slice_t)
         return True
     elif len(branchesCollection) == 0 or (len(branchesCollection) == 1 and not isBrunch):
             sortedadjacentPoints = sorted(adjacentPoints,key=lambda p:p.lenght)
             first_slice = Slice(sortedadjacentPoints,self.faces)
             second_slice = Slice(filter(lambda p: first_slice.__contains__(p) == False, sortedadjacentPoints),self.faces)
             perimeter_1 = first_slice.getPerimetr(self.vertices)
             perimeter_2 = second_slice.getPerimetr(self.vertices)
             if perimeter_1 > perimeter_2 and perimeter_2 != 0:
                 new_center_point = self.__getCenterPoint(second_slice)
                 self.find_point(new_center_point,iteration, current_point,False,False, _slice=second_slice)
                 return True
             elif perimeter_1 < perimeter_2 or perimeter_2 == 0:
                 if perimeter_1 == 0:
                     if len(branchesCollection) == 1:
                         first_slice = branchesCollection[0] 
                     else:
                         first_slice.getFaceFromColl(adjacentPoints,self.faces)
                     new_center_point = self.__getCenterPoint(first_slice)
                     self.find_point(new_center_point,iteration, current_point,isBrunch,False, _slice=first_slice)
                 else:
                     new_center_point = self.__getCenterPoint(first_slice)
                     self.find_point(new_center_point,iteration, current_point,False,False, _slice=first_slice)
                 return True
     elif len(branchesCollection) == 1 and isBrunch:
         slice = branchesCollection[0]
         if len(slice) == 0:
             slice = slice.getFaceFromColl(adjacentPoints,self.faces)
         new_center_point = self.__getCenterPoint(slice)
         self.find_point(new_center_point,iteration, parentPoint=current_point,isNeurite=True,isBrunchStart=False, _slice=slice)
         return True
     return False
Beispiel #3
0
 def __checkDendrite(self, slice, center_point, vector_len, current_point):
     '''
     Private Method.
     Check if soma has other output processes
     if it's contain than run find_point for it.
     '''
     iteration = 1
     vector_len = filter(lambda p: slice.__contains__(p) == False 
                             and self.checked_points.__contains__(p.point) == False, vector_len)
     vector_len = sorted(vector_len,key=lambda p:p.lenght)
     for i in range(5):
         slice2 = Slice(vector_len,self.faces)
         if (len(slice2) == 4 and
             int(slice.getPerimetr(self.vertices) / slice2.getPerimetr(self.vertices)) <= 1 and 
             int(slice2.getPerimetr(self.vertices) / slice.getPerimetr(self.vertices)) <= 1):
             new_center_point = self.__getCenterPoint(slice2) 
             iteration += 1
             self.find_point(new_center_point,iteration,parentPoint=current_point,isNeurite=False,isBrunchStart=False, _slice=slice2)
         vector_len = filter(lambda p: slice2.__contains__(p) == False 
                             and self.checked_points.__contains__(p.point) == False, vector_len)
         vector_len = sorted(vector_len, key=lambda p:p.lenght)