예제 #1
0
def getShortLongModeShareDistance(user, start, end):
    displayModes = getDisplayModes()
    modeDistanceMap = {}
    for mode in displayModes:
        modeId = mode['mode_id']
        if mode['mode_name'] in (motorizedModeList + longMotorizedModeList):
            # We need to split it into short and long
            if mode['mode_name'] in motorizedModeList:
                specShort = appendDistanceFilter(
                    getQuerySpec(user, modeId, start, end), {"$lte": 5000})
                specLong = appendDistanceFilter(
                    getQuerySpec(user, modeId, start, end), {"$gte": 5000})
            else:
                assert (mode['mode_name'] in longMotorizedModeList)
                threshold = 600 * 1000  # 600km in meters
                specShort = appendDistanceFilter(
                    getQuerySpec(user, modeId, start, end),
                    {"$lte": threshold})
                specLong = appendDistanceFilter(
                    getQuerySpec(user, modeId, start, end),
                    {"$gte": threshold})
            shortDistanceForMode = getDistanceForMode(specShort)
            modeDistanceMap[mode['mode_name'] +
                            "_short"] = shortDistanceForMode
            longDistanceForMode = getDistanceForMode(specLong)
            modeDistanceMap[mode['mode_name'] + "_long"] = longDistanceForMode
        else:
            spec = getQuerySpec(user, mode['mode_id'], start, end)
            distanceForMode = getDistanceForMode(spec)
            modeDistanceMap[mode['mode_name']] = distanceForMode
    return modeDistanceMap
예제 #2
0
def getSummaryAllTrips(start, end):
    # totalModeShareDistance = getModeShareDistance(None, start, end)
    totalShortLongModeShareDistance = getShortLongModeShareDistance(
        None, start, end)

    totalModeCarbonFootprint = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, carbonFootprintForMode)
    totalOptimalCarbonFootprint = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, optimalCarbonFootprintForMode)

    # Hack to prevent divide by zero on an empty DB.
    # We will never really have an empty DB in the real production world,
    # but shouldn't crash in that case.
    # This is pretty safe because if we have no users, we won't have any modeCarbonFootprint either
    nUsers = getDistinctUserCount(getQuerySpec(None, None, start, end))
    if nUsers == 0:
        nUsers = 1
    sumModeCarbonFootprint = sum(totalModeCarbonFootprint.values())
    sumOptimalCarbonFootprint = sum(totalOptimalCarbonFootprint.values())
    sumModeShareDistance = old_div(
        sum(totalShortLongModeShareDistance.values()), 1000)

    # We need to calculate the sums before we delete certain modes from the mode share dict
    delLongMotorizedModes(totalShortLongModeShareDistance)
    logging.debug("After deleting long motorized mode, map is %s",
                  totalShortLongModeShareDistance)

    totalModeCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, carbonFootprintForMode)
    totalOptimalCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, optimalCarbonFootprintForMode)
    return {
        "current":
        old_div(float(sumModeCarbonFootprint), nUsers),
        "optimal":
        old_div(float(sumOptimalCarbonFootprint), nUsers),
        "current no air":
        old_div(float(sum(totalModeCarbonFootprintNoLongMotorized.values())),
                nUsers),
        "optimal no air":
        old_div(
            float(sum(totalOptimalCarbonFootprintNoLongMotorized.values())),
            nUsers),
        "all drive":
        old_div(
            float(
                (sumModeShareDistance * carbonFootprintForMode['car_short'])),
            nUsers),
        "SB375 mandate for 2035":
        40.142892,
        "EO 2050 goal (80% below 1990)":
        8.28565
    }
예제 #3
0
def getShortLongModeShareDistance(user, start, end):
    displayModes = getDisplayModes()
    modeDistanceMap = {}
    for mode in displayModes:
        modeId = mode["mode_id"]
        if mode["mode_name"] in (motorizedModeList + longMotorizedModeList):
            # We need to split it into short and long
            if mode["mode_name"] in motorizedModeList:
                specShort = appendDistanceFilter(getQuerySpec(user, modeId, start, end), {"$lte": 5000})
                specLong = appendDistanceFilter(getQuerySpec(user, modeId, start, end), {"$gte": 5000})
            else:
                assert mode["mode_name"] in longMotorizedModeList
                threshold = 600 * 1000  # 600km in meters
                specShort = appendDistanceFilter(getQuerySpec(user, modeId, start, end), {"$lte": threshold})
                specLong = appendDistanceFilter(getQuerySpec(user, modeId, start, end), {"$gte": threshold})
            shortDistanceForMode = getDistanceForMode(specShort)
            modeDistanceMap[mode["mode_name"] + "_short"] = shortDistanceForMode
            longDistanceForMode = getDistanceForMode(specLong)
            modeDistanceMap[mode["mode_name"] + "_long"] = longDistanceForMode
        else:
            spec = getQuerySpec(user, mode["mode_id"], start, end)
            distanceForMode = getDistanceForMode(spec)
            modeDistanceMap[mode["mode_name"]] = distanceForMode
    return modeDistanceMap
예제 #4
0
def getSummaryAllTrips(start, end):
    # totalModeShareDistance = getModeShareDistance(None, start, end)
    totalShortLongModeShareDistance = getShortLongModeShareDistance(None, start, end)

    totalModeCarbonFootprint = getCarbonFootprintsForMap(totalShortLongModeShareDistance, carbonFootprintForMode)
    totalOptimalCarbonFootprint = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, optimalCarbonFootprintForMode
    )

    # Hack to prevent divide by zero on an empty DB.
    # We will never really have an empty DB in the real production world,
    # but shouldn't crash in that case.
    # This is pretty safe because if we have no users, we won't have any modeCarbonFootprint either
    nUsers = getDistinctUserCount(getQuerySpec(None, None, start, end))
    if nUsers == 0:
        nUsers = 1
    sumModeCarbonFootprint = sum(totalModeCarbonFootprint.values())
    sumOptimalCarbonFootprint = sum(totalOptimalCarbonFootprint.values())
    sumModeShareDistance = sum(totalShortLongModeShareDistance.values()) / 1000

    # We need to calculate the sums before we delete certain modes from the mode share dict
    delLongMotorizedModes(totalShortLongModeShareDistance)
    logging.debug("After deleting long motorized mode, map is %s", totalShortLongModeShareDistance)

    totalModeCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, carbonFootprintForMode
    )
    totalOptimalCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, optimalCarbonFootprintForMode
    )
    return {
        "current": float(sumModeCarbonFootprint) / nUsers,
        "optimal": float(sumOptimalCarbonFootprint) / nUsers,
        "current no air": float(sum(totalModeCarbonFootprintNoLongMotorized.values())) / nUsers,
        "optimal no air": float(sum(totalOptimalCarbonFootprintNoLongMotorized.values())) / nUsers,
        "all drive": float((sumModeShareDistance * carbonFootprintForMode["car_short"])) / nUsers,
        "SB375 mandate for 2035": 40.142892,
        "EO 2050 goal (80% below 1990)": 8.28565,
    }
예제 #5
0
 def getMyQuerySpec(self, user, modeId):
     return common.getQuerySpec(user, modeId, self.weekago, self.now)
예제 #6
0
def getFootprintCompareForRange(user_uuid, start, end):
    """
    The input userObj is assumed to be a UUID, not a User object
  """
    assert (not isinstance(user_uuid, User))
    userObj = User.fromUUID(user_uuid)
    myCarbonFootprintForMode = userObj.getCarbonFootprintForMode()

    myModeShareCount = getModeShare(user_uuid, start, end)
    totalModeShareCount = getModeShare(None, start, end)
    logging.debug("myModeShareCount = %s totalModeShareCount = %s" %
                  (myModeShareCount, totalModeShareCount))

    myModeShareDistance = getModeShareDistance(user_uuid, start, end)
    totalModeShareDistance = getModeShareDistance(None, start, end)
    logging.debug("myModeShareDistance = %s totalModeShareDistance = %s" %
                  (myModeShareDistance, totalModeShareDistance))
    myShortLongModeShareDistance = getShortLongModeShareDistance(
        user_uuid, start, end)
    totalShortLongModeShareDistance = getShortLongModeShareDistance(
        None, start, end)

    myModeCarbonFootprint = getCarbonFootprintsForMap(
        myShortLongModeShareDistance, myCarbonFootprintForMode)
    totalModeCarbonFootprint = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, myCarbonFootprintForMode)
    logging.debug("myModeCarbonFootprint = %s, totalModeCarbonFootprint = %s" %
                  (myModeCarbonFootprint, totalModeCarbonFootprint))

    myOptimalCarbonFootprint = getCarbonFootprintsForMap(
        myShortLongModeShareDistance, optimalCarbonFootprintForMode)
    totalOptimalCarbonFootprint = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, optimalCarbonFootprintForMode)
    logging.debug(
        "myOptimalCarbonFootprint = %s, totalOptimalCarbonFootprint = %s" %
        (myOptimalCarbonFootprint, totalOptimalCarbonFootprint))

    delLongMotorizedModes(myShortLongModeShareDistance)
    delLongMotorizedModes(totalShortLongModeShareDistance)
    logging.debug("After deleting long motorized mode, map is %s",
                  myShortLongModeShareDistance)

    myModeCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        myShortLongModeShareDistance, myCarbonFootprintForMode)
    totalModeCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, myCarbonFootprintForMode)
    myOptimalCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        myShortLongModeShareDistance, optimalCarbonFootprintForMode)
    totalOptimalCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, optimalCarbonFootprintForMode)

    nUsers = getDistinctUserCount(getQuerySpec(None, None, start, end))
    # Hack to prevent divide by zero on an empty DB.
    # We will never really have an empty DB in the real production world,
    # but shouldn't crash in that case.
    # This is pretty safe because if we have no user_uuids, we won't have any modeCarbonFootprint either
    if nUsers == 0:
        nUsers = 1

    avgModeShareCount = convertToAvg(totalModeShareCount, nUsers)
    avgModeShareDistance = convertToAvg(totalModeShareDistance, nUsers)
    avgModeCarbonFootprint = convertToAvg(totalModeCarbonFootprint, nUsers)
    avgModeCarbonFootprintNoLongMotorized = convertToAvg(
        totalModeCarbonFootprintNoLongMotorized, nUsers)
    avgOptimalCarbonFootprint = convertToAvg(totalModeCarbonFootprint, nUsers)
    avgOptimalCarbonFootprintNoLongMotorized = convertToAvg(
        totalModeCarbonFootprintNoLongMotorized, nUsers)

    #   avgCarbonFootprint = totalCarbonFootprint/nUsers
    #
    #   carbonFootprint = {"mine": myCarbonFootprint,
    #          "mean": avgCarbonFootprint,
    #          "2005 avg": 47173.568,
    #          "2020 target": 43771.628,
    #          "2035 target": 40142.892}

    return (myModeShareCount, avgModeShareCount, myModeShareDistance,
            avgModeShareDistance, myModeCarbonFootprint,
            avgModeCarbonFootprint, myModeCarbonFootprintNoLongMotorized,
            avgModeCarbonFootprintNoLongMotorized, myOptimalCarbonFootprint,
            avgOptimalCarbonFootprint, myOptimalCarbonFootprintNoLongMotorized,
            avgOptimalCarbonFootprintNoLongMotorized)
예제 #7
0
 def getMyQuerySpec(self, user, modeId):
   return common.getQuerySpec(user, modeId, self.weekago, self.now)
예제 #8
0
def getFootprintCompareForRange(user_uuid, start, end):
    """
    The input userObj is assumed to be a UUID, not a User object
  """
    assert not isinstance(user_uuid, User)
    userObj = User.fromUUID(user_uuid)
    myCarbonFootprintForMode = userObj.getCarbonFootprintForMode()

    myModeShareCount = getModeShare(user_uuid, start, end)
    totalModeShareCount = getModeShare(None, start, end)
    logging.debug("myModeShareCount = %s totalModeShareCount = %s" % (myModeShareCount, totalModeShareCount))

    myModeShareDistance = getModeShareDistance(user_uuid, start, end)
    totalModeShareDistance = getModeShareDistance(None, start, end)
    logging.debug(
        "myModeShareDistance = %s totalModeShareDistance = %s" % (myModeShareDistance, totalModeShareDistance)
    )
    myShortLongModeShareDistance = getShortLongModeShareDistance(user_uuid, start, end)
    totalShortLongModeShareDistance = getShortLongModeShareDistance(None, start, end)

    myModeCarbonFootprint = getCarbonFootprintsForMap(myShortLongModeShareDistance, myCarbonFootprintForMode)
    totalModeCarbonFootprint = getCarbonFootprintsForMap(totalShortLongModeShareDistance, myCarbonFootprintForMode)
    logging.debug(
        "myModeCarbonFootprint = %s, totalModeCarbonFootprint = %s" % (myModeCarbonFootprint, totalModeCarbonFootprint)
    )

    myOptimalCarbonFootprint = getCarbonFootprintsForMap(myShortLongModeShareDistance, optimalCarbonFootprintForMode)
    totalOptimalCarbonFootprint = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, optimalCarbonFootprintForMode
    )
    logging.debug(
        "myOptimalCarbonFootprint = %s, totalOptimalCarbonFootprint = %s"
        % (myOptimalCarbonFootprint, totalOptimalCarbonFootprint)
    )

    delLongMotorizedModes(myShortLongModeShareDistance)
    delLongMotorizedModes(totalShortLongModeShareDistance)
    logging.debug("After deleting long motorized mode, map is %s", myShortLongModeShareDistance)

    myModeCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        myShortLongModeShareDistance, myCarbonFootprintForMode
    )
    totalModeCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, myCarbonFootprintForMode
    )
    myOptimalCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        myShortLongModeShareDistance, optimalCarbonFootprintForMode
    )
    totalOptimalCarbonFootprintNoLongMotorized = getCarbonFootprintsForMap(
        totalShortLongModeShareDistance, optimalCarbonFootprintForMode
    )

    nUsers = getDistinctUserCount(getQuerySpec(None, None, start, end))
    # Hack to prevent divide by zero on an empty DB.
    # We will never really have an empty DB in the real production world,
    # but shouldn't crash in that case.
    # This is pretty safe because if we have no user_uuids, we won't have any modeCarbonFootprint either
    if nUsers == 0:
        nUsers = 1

    avgModeShareCount = convertToAvg(totalModeShareCount, nUsers)
    avgModeShareDistance = convertToAvg(totalModeShareDistance, nUsers)
    avgModeCarbonFootprint = convertToAvg(totalModeCarbonFootprint, nUsers)
    avgModeCarbonFootprintNoLongMotorized = convertToAvg(totalModeCarbonFootprintNoLongMotorized, nUsers)
    avgOptimalCarbonFootprint = convertToAvg(totalModeCarbonFootprint, nUsers)
    avgOptimalCarbonFootprintNoLongMotorized = convertToAvg(totalModeCarbonFootprintNoLongMotorized, nUsers)

    #   avgCarbonFootprint = totalCarbonFootprint/nUsers
    #
    #   carbonFootprint = {"mine": myCarbonFootprint,
    #          "mean": avgCarbonFootprint,
    #          "2005 avg": 47173.568,
    #          "2020 target": 43771.628,
    #          "2035 target": 40142.892}

    return (
        myModeShareCount,
        avgModeShareCount,
        myModeShareDistance,
        avgModeShareDistance,
        myModeCarbonFootprint,
        avgModeCarbonFootprint,
        myModeCarbonFootprintNoLongMotorized,
        avgModeCarbonFootprintNoLongMotorized,
        myOptimalCarbonFootprint,
        avgOptimalCarbonFootprint,
        myOptimalCarbonFootprintNoLongMotorized,
        avgOptimalCarbonFootprintNoLongMotorized,
    )