def testQueryStopsForTrip(self):
     new_trip = self.create_fake_trip()
     new_stop = esdst.create_new_stop(self.testUserId, new_trip.get_id())
     new_stop.enter_ts = 5
     new_stop.exit_ts = 6
     esdst.save_stop(new_stop)
     ret_stops = esdt.get_stops_for_trip(self.testUserId, new_trip.get_id())
     self.assertEqual(ret_stops, [new_stop])
 def testSaveStop(self):
     new_stop = esds.create_new_stop(self.testUserId, self.test_trip_id)
     new_stop.enter_ts = 5
     new_stop.exit_ts = 6
     esds.save_stop(new_stop)
     self.assertEqual(edb.get_stop_db().find({"exit_ts": 6}).count(), 1)
     self.assertEqual(edb.get_stop_db().find_one({"exit_ts": 6})["_id"], new_stop.get_id())
     self.assertEqual(edb.get_stop_db().find_one({"exit_ts": 6})["user_id"], self.testUserId)
     self.assertEqual(edb.get_stop_db().find_one({"exit_ts": 6})["trip_id"], self.test_trip_id)
def segment_trip_into_sections(user_id, trip_id):
    ts = esta.TimeSeries.get_time_series(user_id)
    trip = esdt.get_trip(trip_id)
    time_query = esdt.get_time_query_for_trip(trip_id)

    import emission.analysis.intake.segmentation.section_segmentation_methods.smoothed_high_confidence_motion as shcm
    shcmsm = shcm.SmoothedHighConfidenceMotion(60, [ecwm.MotionTypes.TILTING,
                                                    ecwm.MotionTypes.UNKNOWN,
                                                    ecwm.MotionTypes.STILL,
                                                    ecwm.MotionTypes.NONE, # iOS only
                                                    ecwm.MotionTypes.STOPPED_WHILE_IN_VEHICLE]) # iOS only
    segmentation_points = shcmsm.segment_into_sections(ts, time_query)

    # Since we are segmenting an existing trip into sections, we do not need to worry about linking with
    # a prior place, since it will be linked through the trip object.
    # So this is much simpler than the trip case.
    # Again, since this is segmenting a trip, we can just start with a section

    prev_section = None

    # TODO: Should we link the locations to the trips this way, or by using a foreign key?
    # If we want to use a foreign key, then we need to include the object id in the data df as well so that we can
    # set it properly.
    trip_start_loc = ecwl.Location(ts.get_entry_at_ts("background/filtered_location", "data.ts", trip.start_ts)["data"])
    trip_end_loc = ecwl.Location(ts.get_entry_at_ts("background/filtered_location", "data.ts", trip.end_ts)["data"])
    logging.debug("trip_start_loc = %s, trip_end_loc = %s" % (trip_start_loc, trip_end_loc))

    for (i, (start_loc_doc, end_loc_doc, sensed_mode)) in enumerate(segmentation_points):
        logging.debug("start_loc_doc = %s, end_loc_doc = %s" % (start_loc_doc, end_loc_doc))
        start_loc = ecwl.Location(start_loc_doc)
        end_loc = ecwl.Location(end_loc_doc)
        logging.debug("start_loc = %s, end_loc = %s" % (start_loc, end_loc))

        section = esds.create_new_section(user_id, trip_id)
        if prev_section is None:
            # This is the first point, so we want to start from the start of the trip, not the start of this segment
            start_loc = trip_start_loc
        if i == len(segmentation_points) - 1:
            # This is the last point, so we want to end at the end of the trip, not at the end of this segment
            # Particularly in this case, if we don't do this, then the trip end may overshoot the section end
            end_loc = trip_end_loc

        fill_section(section, start_loc, end_loc, sensed_mode)

        if prev_section is not None:
            # If this is not the first section, create a stop to link the two sections together
            # The expectation is prev_section -> stop -> curr_section
            stop = esdst.create_new_stop(user_id, trip_id)
            stitch_together(prev_section, stop, section)
            esdst.save_stop(stop)
            esds.save_section(prev_section) # Because we have now linked it to the stop, we need to save it again

        esds.save_section(section)
        prev_section = section
 def testSaveStop(self):
     new_stop = esds.create_new_stop(self.testUserId, self.test_trip_id)
     new_stop.enter_ts = 5
     new_stop.exit_ts = 6
     esds.save_stop(new_stop)
     self.assertEqual(edb.get_stop_db().find({"exit_ts": 6}).count(), 1)
     self.assertEqual(edb.get_stop_db().find_one({"exit_ts": 6})["_id"],
                      new_stop.get_id())
     self.assertEqual(edb.get_stop_db().find_one({"exit_ts": 6})["user_id"],
                      self.testUserId)
     self.assertEqual(edb.get_stop_db().find_one({"exit_ts": 6})["trip_id"],
                      self.test_trip_id)
 def testQueryStops(self):
     new_stop = esds.create_new_stop(self.testUserId, self.test_trip_id)
     new_stop.enter_ts = 5
     new_stop.exit_ts = 6
     esds.save_stop(new_stop)
     ret_arr_one = esds.get_stops_for_trip(self.testUserId, self.test_trip_id)
     self.assertEqual(len(ret_arr_one), 1)
     self.assertEqual(ret_arr_one, [new_stop])
     ret_arr_list = esds.get_stops_for_trip_list(self.testUserId, [self.test_trip_id])
     self.assertEqual(ret_arr_one, ret_arr_list)
     ret_arr_time = esds.get_stops(self.testUserId, enua.UserCache.TimeQuery("enter_ts", 4, 6))
     self.assertEqual(ret_arr_list, ret_arr_time)
 def testQueryStops(self):
     new_stop = esds.create_new_stop(self.testUserId, self.test_trip_id)
     new_stop.enter_ts = 5
     new_stop.exit_ts = 6
     esds.save_stop(new_stop)
     ret_arr_one = esds.get_stops_for_trip(self.testUserId,
                                           self.test_trip_id)
     self.assertEqual(len(ret_arr_one), 1)
     self.assertEqual(ret_arr_one, [new_stop])
     ret_arr_list = esds.get_stops_for_trip_list(self.testUserId,
                                                 [self.test_trip_id])
     self.assertEqual(ret_arr_one, ret_arr_list)
     ret_arr_time = esds.get_stops(
         self.testUserId, enua.UserCache.TimeQuery("enter_ts", 4, 6))
     self.assertEqual(ret_arr_list, ret_arr_time)
Exemple #7
0
def segment_trip_into_sections(user_id, trip_id, trip_source):
    ts = esta.TimeSeries.get_time_series(user_id)
    trip = esdt.get_trip(trip_id)
    time_query = esdt.get_time_query_for_trip(trip_id)

    if (trip_source == "DwellSegmentationTimeFilter"):
        import emission.analysis.intake.segmentation.section_segmentation_methods.smoothed_high_confidence_motion as shcm
        shcmsm = shcm.SmoothedHighConfidenceMotion(60, [
            ecwm.MotionTypes.TILTING, ecwm.MotionTypes.UNKNOWN,
            ecwm.MotionTypes.STILL
        ])
    else:
        assert (trip_source == "DwellSegmentationDistFilter")
        import emission.analysis.intake.segmentation.section_segmentation_methods.smoothed_high_confidence_with_visit_transitions as shcmvt
        shcmsm = shcmvt.SmoothedHighConfidenceMotionWithVisitTransitions(
            49,
            [
                ecwm.MotionTypes.TILTING,
                ecwm.MotionTypes.UNKNOWN,
                ecwm.MotionTypes.STILL,
                ecwm.MotionTypes.NONE,  # iOS only
                ecwm.MotionTypes.STOPPED_WHILE_IN_VEHICLE
            ])  # iOS only

    segmentation_points = shcmsm.segment_into_sections(ts, time_query)

    # Since we are segmenting an existing trip into sections, we do not need to worry about linking with
    # a prior place, since it will be linked through the trip object.
    # So this is much simpler than the trip case.
    # Again, since this is segmenting a trip, we can just start with a section

    prev_section = None

    # TODO: Should we link the locations to the trips this way, or by using a foreign key?
    # If we want to use a foreign key, then we need to include the object id in the data df as well so that we can
    # set it properly.
    trip_start_loc = ecwl.Location(
        ts.get_entry_at_ts("background/filtered_location", "data.ts",
                           trip.start_ts)["data"])
    trip_end_loc = ecwl.Location(
        ts.get_entry_at_ts("background/filtered_location", "data.ts",
                           trip.end_ts)["data"])
    logging.debug("trip_start_loc = %s, trip_end_loc = %s" %
                  (trip_start_loc, trip_end_loc))

    for (i, (start_loc_doc, end_loc_doc,
             sensed_mode)) in enumerate(segmentation_points):
        logging.debug("start_loc_doc = %s, end_loc_doc = %s" %
                      (start_loc_doc, end_loc_doc))
        start_loc = ecwl.Location(start_loc_doc)
        end_loc = ecwl.Location(end_loc_doc)
        logging.debug("start_loc = %s, end_loc = %s" % (start_loc, end_loc))

        section = esds.create_new_section(user_id, trip_id)
        if prev_section is None:
            # This is the first point, so we want to start from the start of the trip, not the start of this segment
            start_loc = trip_start_loc
        if i == len(segmentation_points) - 1:
            # This is the last point, so we want to end at the end of the trip, not at the end of this segment
            # Particularly in this case, if we don't do this, then the trip end may overshoot the section end
            end_loc = trip_end_loc

        fill_section(section, start_loc, end_loc, sensed_mode)

        if prev_section is not None:
            # If this is not the first section, create a stop to link the two sections together
            # The expectation is prev_section -> stop -> curr_section
            stop = esdst.create_new_stop(user_id, trip_id)
            stitch_together(prev_section, stop, section)
            esdst.save_stop(stop)
            esds.save_section(
                prev_section
            )  # Because we have now linked it to the stop, we need to save it again

        esds.save_section(section)
        prev_section = section