def _run(self, context_index, simulation_id, group_pedestrians):

        self.time = 0.0
        self.frames = 0

        if group_pedestrians is not None and len(group_pedestrians) > 0:
            for group_member in group_pedestrians:
                '''should modify target position based on y'''
                (x, y) = group_member['position']
                if y <= self.y_horizontal_line:
                    del group_member['target']
                    group_member['target'] = self.target_upper
                else:
                    del group_member['target']
                    group_member['target'] = self.target_below

                force_model.add_group_pedestrian(group_member)

                #pedestrian_id = group_member['pedestrian_id']
                #friend_zone =  group_member['friend_zone']
                #print(str(pedestrian_id) + "-" + str(friend_zone))

        self._init_drawing(simulation_id)

        finished = False

        try:
            while self._tick() and not finished:
                force_model.update_pedestrians()

                if self.drawing:
                    self._draw()

                if (not self.frames % self.sample_frequency):
                    self._plot_sample()

                if (not self.frames % self.frame_save_frequency):
                    self._dump_frame(context_index, self.frames)

                self._revise_target()

                if (not self.frames % self.spawn_frequency):
                    self._spawn_pedestrians(context_index)

                self.time += self.timestep
                self.frames += 1

                if self._done():
                    finished = True

        except KeyboardInterrupt:
            pass

        if self.drawing:
            self._uninit_drawing()
    def _run(self, context_index, simulation_id, group_pedestrians):

        self.time = 0.0
        self.frames = 0

        if group_pedestrians is not None and len(group_pedestrians) > 0:
            for group_member in group_pedestrians:
                force_model.add_group_pedestrian(group_member)

                #pedestrian_id = group_member['pedestrian_id']
                #friend_zone =  group_member['friend_zone']
                #print(str(pedestrian_id) + "-" + str(friend_zone))

        self._init_drawing(simulation_id)

        finished = False

        try:
            while self._tick() and not finished:
                force_model.update_pedestrians()

                if self.drawing:
                    self._draw()

                if (not self.frames % self.sample_frequency):
                    self._plot_sample()

                if (not self.frames % self.frame_save_frequency):
                    self._dump_frame(context_index, self.frames)

                if (not self.frames % self.spawn_frequency):
                    self._spawn_pedestrians(context_index)

                self.time += self.timestep
                self.frames += 1

                if self._done():
                    finished = True

        except KeyboardInterrupt:
            pass

        if self.drawing:
            self._uninit_drawing()
    def replay_frame(self, constant, index_simulation, time_replay,
                     constant_target, constant_target_magnitude,
                     in_group_a_strength, in_group_a_range,
                     in_group_r_strength, in_group_r_range):

        frame = (time_replay / constants.frame_store_sample_frequency) * (
            constants.frame_store_sample_frequency / constants.timestep)
        intframe = int(frame)
        #filename = str(constant) + "_" + str(index_simulation) + "_" + str(intframe)
        filename = "%s" % (str(in_group_r_strength) + "_" +
                           str(in_group_a_strength) + "_" + str(constant) +
                           "_" + str(index_simulation) + "_" + str(intframe))

        index_simulation = index_simulation * 2
        #filename = str(index_simulation) + "_" + str(intframe)

        frame_log_file = open(
            "%s.json" % os.path.join(constants.framecontext_dir, filename))

        json_str = frame_log_file.read()
        currentframecontext = json.loads(json_str, cls=FrameContextLog_Decoder)

        pedestrian_list = currentframecontext.get_pedestrian_list()
        ''' set parameter '''
        self.in_group_a_strength = in_group_a_strength
        self.in_group_a_range = in_group_a_range
        self.in_group_r_strength = in_group_r_strength
        self.in_group_r_range = in_group_r_range

        self.parameters['in_group_a_strength'] = in_group_a_strength
        self.parameters['in_group_a_range'] = in_group_a_range
        self.parameters['in_group_r_strength'] = in_group_r_strength
        self.parameters['in_group_r_range'] = in_group_r_range
        self.parameters['out_group_a_strength'] = self.parameters[
            'in_group_a_strength'] * (1 / constant)
        self.parameters['out_group_a_range'] = self.parameters[
            'in_group_a_range']
        self.parameters['out_group_r_strength'] = self.parameters[
            'in_group_r_strength'] * constant
        self.parameters['out_group_r_range'] = self.parameters[
            'in_group_r_range']
        self.parameters['target_a_strength'] = 22000000000
        self.parameters['target_a_range'] = 435

        self.parameters['constant_target'] = constant_target
        self.parameters[
            'constant_target_magnitude'] = constant_target_magnitude
        '''update position and target shift for pedestrian list '''
        for pedestrian in pedestrian_list:
            position = (pedestrian['position'][0] - self.shift,
                        pedestrian['position'][1])  #
            del pedestrian['position']
            pedestrian['position'] = position

            target = (pedestrian['target'][0] - self.shift,
                      pedestrian['target'][1])  #
            del pedestrian['target']
            pedestrian['target'] = target

        simulation_id = "Replay frame"
        """ initialize social force model """
        force_model.set_parameters(self.parameters)
        force_model.set_start_simulation_time(time_replay)

        self.time = time_replay
        self.frames = frame

        if pedestrian_list is not None and len(pedestrian_list) > 0:
            for group_member in pedestrian_list:
                '''should modify target position based on y'''
                (x, y) = group_member['position']
                if y <= self.y_horizontal_line:
                    del group_member['target']
                    group_member['target'] = self.target_upper
                else:
                    del group_member['target']
                    group_member['target'] = self.target_below

                force_model.add_group_pedestrian(group_member)

        self._init_drawing(simulation_id)

        finished = False

        ###IMPORTANT PART FOR SHARED OBJECT
        constants.tracked_pedestrian_id = -1
        """ initialize the real-time plot """
        self.pedestrian_track = Pedestrian_Track(self.time)
        self.tracking_sample_frequency = int(constants.plot_sample_frequency /
                                             (2 * self.timestep))
        count = 0
        try:
            while self._tick() and not finished:
                force_model.update_pedestrians()

                self._draw()

                self._revise_target()

                if (not self.frames % self.spawn_frequency):
                    self._spawn_pedestrians(index_simulation)

                #if not self.frames % self.tracking_sample_frequency:
                #    self._plot_track_ped()
                self.show_canvas.create_image(count)  #self.frames)
                count += 1

                self.time += self.timestep
                self.frames += 1

                if self._done():
                    finished = True

        except KeyboardInterrupt:
            pass

        self._uninit_drawing()