Source code for hestia_earth.calculation.emissions.nh3ToAirOrganicFertilizerWebbEtAl2012AndSintermannEtAl2012

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 != {}