import numpy as np
from hestia_earth.calculation.abstract_model import Model
from hestia_earth.calculation.data.constants.nh3 import NH3_TAN_FACTOR
from hestia_earth.utils.api import download_hestia
from hestia_earth.calculation.utils import summation
MODEL_KEY = 'nh3ToAirOrganicFertilizerWebbEtAl2012AndSintermannEtAl2012'
[docs]class NH3ToAirOrganicFertilizerWebbEtAl2012AndSintermannEtAl2012(Model):
def __init__(self):
# Define model tier
self.tier = 1
self.term = download_hestia(MODEL_KEY)
# Define model requirements
self.lqd_slurry_sluge = None
self.solid = None
self.compost = None
self.greenManure = None
# Instantiate variables
self.nh3ToAirOrganicFertilizer = None
# Define model coeffients
self.eafs_lookup = NH3_TAN_FACTOR
def calculate_nh3ToAirOrganicFertilizer(self):
# Calculate total nh3 emissions
eafs = self.eafs_lookup.values()
n_inputs = np.array([self.lqd_slurry_sluge, self.solid, self.compost, self.greenManure])
self.nh3ToAirOrganicFertilizer = sum([x * y for x, y in zip(n_inputs, eafs)])
return self.nh3ToAirOrganicFertilizer
def access_lqd_slurry_sluge(self, cycle):
slurryAndSludgeAsN = summation(cycle['inputs']['slurryAndSludgeAsN']['value'])
cattleLiquidManureAsN = summation(cycle['inputs']['cattleLiquidManureAsN']['value'])
pigsLiquidManureAsN = summation(cycle['inputs']['pigsLiquidManureAsN']['value'])
self.lqd_slurry_sluge = summation([slurryAndSludgeAsN, cattleLiquidManureAsN, pigsLiquidManureAsN])
def access_solid(self, cycle):
non_solid = ['cattleUrineAsN', 'compostAsN', 'greenManureAsN', 'oliveMillWastewaterAsN',
'palmOilMillEffluentAsN', 'pigsLiquidManureAsN', 'sewageSludgeAsN', 'slurryAndSludgeAsN']
inputs = list(cycle['inputs'].evalues())
self.solid = summation([sum(input['value']) if 'units' in input['term'] and
input['term']['@id'] not in non_solid and
input['term']['units'] == 'kg N' and
input['term']['termType'] == 'organicFertilizer' else {}
for input in inputs])
def access_compost(self, cycle):
compostAsN = summation(cycle['inputs']['compostAsN']['value'])
mushroomCompostAsN = summation(cycle['inputs']['mushroomCompostAsN']['value'])
self.compost = summation([compostAsN, mushroomCompostAsN])
def access_greenManure(self, cycle):
self.greenManure = summation(cycle['inputs']['greenManureAsN']['value'])
def complete(self, completeness):
self.lqd_slurry_sluge = 0 if self.lqd_slurry_sluge == {} and completeness['fertilizer'] else\
self.lqd_slurry_sluge
self.solid = 0 if self.solid == {} and completeness['fertilizer'] else self.solid
self.compost = 0 if self.compost == {} and completeness['fertilizer'] else self.compost
self.greenManure = 0 if self.greenManure == {} and completeness['fertilizer'] else self.greenManure
def check_nh3ToAirOrganicFertilizer(self, cycle):
# Check that we have all the inputs
self.access_lqd_slurry_sluge(cycle)
self.access_solid(cycle)
self.access_compost(cycle)
self.access_greenManure(cycle)
self.complete(cycle['dataCompleteness'])
return self.lqd_slurry_sluge != {} and self.solid != {} and self.compost != {} and self.greenManure != {}