from hestia_earth.calculation.abstract_model import Model
from hestia_earth.utils.api import download_hestia
from hestia_earth.calculation.utils import residue_nitrogen, summation, format_lookup
MODEL_KEY = 'noxToAirFertilizerAndExcretaStehfestBouwman2006Tier1'
[docs]class NOXToAirFertilizerAndExcretaStehfestBouwman2006Tier1(Model):
def __init__(self):
# Define model tier
self.tier = 1
self.term = download_hestia(MODEL_KEY)
# Define model requirements
self.n_inputs = None
self.n_outputs = None
self.country = None
# Instantiate variables
self.noxToAirAllOrigins = None
# Define model coeffients
self.nox_conv_factors = format_lookup('region.csv', 'ef_nox')
def calculate_noxToAirAllOrigins(self):
# Calculate total NOX emission
self.noxToAirAllOrigins = float(self.nox_conv_factors[self.country]) * (self.n_inputs + self.n_outputs)
return self.noxToAirAllOrigins
def complete(self, completeness):
self.n_inputs = 0 if self.n_inputs == {} and completeness['fertilizer'] else self.n_inputs
self.n_outputs = 0 if self.n_outputs == {} and completeness['cropResidue'] else self.n_outputs
def check_noxToAirAllOrigins(self, cycle):
# Check that we have all the inputs
inputs = cycle['inputs'].evalues()
self.n_inputs = summation([sum(input['value']) if 'units' in input['term'] and
input['term']['units'] == 'kg N' else
{} for input in inputs])
self.n_outputs = residue_nitrogen(cycle['products'])
self.country = cycle['site']['country']['@id']
self.complete(cycle['dataCompleteness'])
return self.n_inputs != {} and self.n_outputs != {} and self.country != {} and self.country in\
self.nox_conv_factors