db_get_footprint.py 3.9 KB
from db_scaling_laws import *
import numpy as np
from geopy.distance import great_circle


# Sample function used by Didier in the prototype.
# We do not use this in the project right now.


def db_get_co2eq_per_city_pairs(in_methods, lat_city1, long_city1, lat_city2,
                                long_city2, rfiatmosfair, dist_min,
                                coeff_connecting_flight, all_economy,
                                seat_category_non_economy,
                                gcd_min_for_business,
                                frac_flights_in_non_economy):
    gcd = great_circle((np.float(lat_city1), np.float(long_city1)),
                       (np.float(lat_city2), np.float(long_city2))).km
    round_trip_distance = gcd * coeff_connecting_flight * 2.
    verbose = True
    co2eq = []

    co2eq_train = 0.
    by_train = False
    if gcd * coeff_connecting_flight < dist_min:
        co2eq_train = 2. * db_get_train_footprint(type_train="mixed",
                                                  distance=gcd * coeff_connecting_flight)
        seat_factor = 0
        seat_cat = "Train seat"
        rfi = 0.
        eq_seat_factor = 0.
        by_train = True
        if verbose:
            print "Minimum distance=", dist_min
            print "Coeff_connecting flight=", coeff_connecting_flight
            print "Selected rfi", rfi
            print "GCD=", gcd
            print "Corrected GCD=", coeff_connecting_flight * gcd
            print "Round trip corrected distance=", 2. * coeff_connecting_flight * gcd
            print "CO2 by train", co2eq_train
            co2eq = np.zeros(len(in_methods))
        return rfi, round_trip_distance, co2eq, co2eq_train, by_train, seat_factor, eq_seat_factor, seat_cat

    seat_factor = 1.
    seat_cat = "economy"
    eq_seat_factor = 1.

    if all_economy: frac_flights_in_non_economy = 0.
    if gcd * coeff_connecting_flight > gcd_min_for_business and not all_economy and not by_train:
        seat_cat = seat_category_non_economy
        seat_factor = db_def_seat_class_coeff_from_defra(
            seat_category_non_economy)

    rfi = 1.9
    if rfiatmosfair: rfi = get_rfi_from_atmosfair(gcd)
    for m in in_methods:
        if verbose:
            print "-------------------------------------------------------------------------------------------"
            print "Method=", m
            print "Minimum distance=", dist_min
            print "Coeff_connecting flight=", coeff_connecting_flight
            print "Selected rfi", rfi
            print "GCD=", gcd
            print "Corrected GCD=", coeff_connecting_flight * gcd
            print "Round trip corrected distance=", 2. * coeff_connecting_flight * gcd
            print "CO2eq per leg without RFI=", db_direct_emission(m, dist_min,
                                                                   coeff_connecting_flight * gcd)
            print "CO2eq=", rfi * 2. * db_direct_emission(m, dist_min,
                                                          coeff_connecting_flight * gcd)
            print "CO2 by train", co2eq_train
            print "Fraction of flights in non economy seating (%)=", frac_flights_in_non_economy
            print "Business correction factor=", seat_factor
            eq_seat_factor = (
                    frac_flights_in_non_economy / 100. * seat_factor + (
                    1. - frac_flights_in_non_economy / 100.))
            print "Equivalent seat factor=", eq_seat_factor
            print "Seat catagory=", seat_cat
            print "CO2eq after correcting for non economy seating=", eq_seat_factor * rfi * 2. * db_direct_emission(
                m, dist_min, coeff_connecting_flight * gcd)
        co2eq.append(
            eq_seat_factor * rfi * 2. * db_direct_emission(m, dist_min,
                                                           coeff_connecting_flight * gcd))

    return rfi, round_trip_distance, co2eq, co2eq_train, by_train, seat_factor, eq_seat_factor, seat_cat