def create_rods_with_length_process(length, length_error, real_kappa,
                            radius_correction_ratio, names,
                            index, states_queue):
    """
    Process of method.
    """
    name = names[index]
    file_ = open(name, 'r')
    state = SystemState(kappas=real_kappa, real_kappas=real_kappa,
                        allowed_kappa_error=0,
                        radius_correction_ratio=radius_correction_ratio,
                        id_string=name, zone_coords=settings.zone_coords)
    data = methods.import_data(file_)
    if not len(data):
        states_queue.put([index, None])
        return
    for dataline in data:
        try:
            parameters = tuple(dataline)
            new_rod = rod.Rod(parameters, kappa=real_kappa, real_length=real_kappa)
            state.put_rod(new_rod)
        except ValueError:
            pass
    file_.close()
    file_ = None
    state.compute_center_and_radius()
    state.check_rods_with_length(length, length_error)
    state = methods.compress_state(state)
    states_queue.put([index, state])
 def _compute_Q4_matrix(self, divisions):
     """
     Computes Q4 matrix
     """
     self.divide_in_circles(divisions)
     subdivision = self._actual_subdivision
     Q4_subsystems = []
     for subsystem_ in subdivision:
             subsystem = methods.decompress_state(subsystem_)
             Q4 = [subsystem.center[0], subsystem.center[1]]
             Q4.append(subsystem.Q4)
             Q4_subsystems.append(methods.compress_state(Q4))
     return Q4_subsystems
 def _subsystems(self, possible_x_values, possible_y_values, rad, diff,
                         divisions, real_rad, rods_by_coords):
     """
         Creates subsystems
     """
     subsystems = []
     centers = []
     for actual_y in possible_y_values:
         for actual_x in possible_x_values:
             centers.append((actual_x, actual_y))
     array2 = [self.center for dummy in range(len(centers))]
     distances = methods.compute_distances(centers, array2)
     array2 = None
     x_min = min(possible_x_values)
     y_min = min(possible_y_values)
     for index in range(len(centers)):
         distance = distances[index]
         #time.sleep(settings.waiting_time_process)
         if distance < self.radius:
             center = centers[index]
             available_rods = set([])
             index_x = int((center[0]-x_min)/diff)
             index_y = int((center[1]-y_min)/diff)
             number_of_squares = self.coef*2 #int(self.coef/2)+1
             for diff_index_x in range(number_of_squares):
                 for diff_index_y in range(number_of_squares):
                     try:
                         available_rods |= set(rods_by_coords[index_x-diff_index_x][index_y-diff_index_y])
                         available_rods |= set(rods_by_coords[index_x+diff_index_x][index_y+diff_index_y])
                         available_rods |= set(rods_by_coords[index_x-diff_index_x][index_y+diff_index_y])
                         available_rods |= set(rods_by_coords[index_x+diff_index_x][index_y-diff_index_y])
                     except IndexError:
                         continue
             available_rods = list(available_rods)
             subsystem = SubsystemState(center, rad, self.zone_coords,
                                        available_rods, self._kappas, self._real_kappas,
                                        self._allowed_kappa_error, real_rad)
             subsystem.check_rods()
             subsystems.append(methods.compress_state(subsystem))
     return subsystems
 def _create_subgroups_matrix(self, divisions):
     """
         Put subsystems in a matrix form.
     """
     if divisions != self._divisions:
         self._reset()
     if not len(self._subdivision_centers):
         self.divide_in_circles(divisions)
         act_sub = self._actual_subdivision
         actual_y = methods.decompress_state(act_sub[0]).center[1]
         row = []
         subgroups_matrix = []
         for index in range(len(act_sub)):
             element = methods.decompress_state(act_sub[index])
             element_y = element.center[1]
             if element_y != actual_y:
                 subgroups_matrix.append(row)
                 row = []
                 actual_y = element_y
             row.append(element)
         subgroups_matrix.append(row)
         act_sub = None
         self._subdivision_centers = methods.compress_state(subgroups_matrix)
def create_rods_with_length(folder="./", length=10, length_error=.3, real_kappas=10,
                radius_correction_ratio=0.1, file_range=[]):
    """
    Create rods using rod length instead of kappa.
    """
    print "--"*(len(inspect.stack())-2)+">"+"["+str(inspect.stack()[1][3])+"]->["+str(inspect.stack()[0][3])+"]: " + "Importing data"
    names = methods.get_file_names(folder=folder)
    if len(file_range) != 0:
        try:
            names = names[file_range[0]:file_range[1]]
        except:
            pass
    num_of_files = len(names)
    if not num_of_files:
        print "No files to import.\n\n"
        raise ValueError
    states = [None for dummy_ in range(num_of_files)]
    processes = []
    states_queue = mp.Queue()
    for index in range(num_of_files):
        process = mp.Process(target=create_rods_with_length_process,
                            args=(length, length_error, real_kappas,
                            radius_correction_ratio, names,
                            index, states_queue))
        processes.append(process)
    num_processes = len(processes)
    running, processes_left = methods.run_processes(processes)
    finished_ = 0
    previous_time = datetime.datetime.now()
    counter = 0
    time_left = None
    times = []
    print " "
    empty_states = []
    while finished_ < num_processes:
        counter += 1
        finished_ += 1
        previous_time, counter, time_left, times = methods.print_progress(finished_, num_processes,
                                counter, times, time_left, previous_time)
        [index, state] = states_queue.get()
        if state is not None:
            states[index] = state
        else:
            empty_states.append(index)
        if len(processes_left):
            new_process = processes_left.pop(0)
            time.sleep(settings.waiting_time)
            new_process.start()
    for process in processes:
        if process.is_alive():
            process.terminate()
    for empty_state in empty_states:
        diff = 1
        while True:
            new_state = empty_state - diff
            if states[new_state] is not None:
                break
            diff += 1
        new_state = methods.decompress_state(states[new_state]).clone
        states[empty_state] = methods.compress_state(new_state)
    print(CURSOR_UP_ONE + ERASE_LINE + CURSOR_UP_ONE)
    return names, states