Source code for hestia_earth.calculation.emissions.pToSurfacewaterSalcaPrasuhn2006

from hestia_earth.calculation.abstract_model import Model
from hestia_earth.calculation.utils import most_relevant_measurement, summation
from hestia_earth.utils.api import download_hestia

MODEL_KEY = 'pToSurfacewaterSalcaPrasuhn2006'


[docs]class PToSurfacewaterSalcaPrasuhn2006(Model): def __init__(self): # Define model tier self.tier = 1 self.term = download_hestia(MODEL_KEY) # Define model requirements self.inorgP = None self.orgP = None self.excrP = None self.slope = None # Instantiate variables self.pToDrainageWaterAllInputs = None def get_lqd_slurry_sluge(self, cycle): slurryAndSludgeAsN = summation(cycle['inputs']['slurryAndSludgeAsN']['value']) cattleLiquidManureAsN = summation(cycle['inputs']['cattleLiquidManureAsN']['value']) pigsLiquidManureAsN = summation(cycle['inputs']['pigsLiquidManureAsN']['value']) return summation([slurryAndSludgeAsN, cattleLiquidManureAsN, pigsLiquidManureAsN]) def get_solid(self, cycle): non_solid = ['cattleUrineAsN', 'compostAsN', 'greenManureAsN', 'oliveMillWastewaterAsN', 'palmOilMillEffluentAsN', 'pigsLiquidManureAsN', 'sewageSludgeAsN', 'slurryAndSludgeAsN'] inputs = list(cycle['inputs'].evalues()) orgN_filter = [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] return summation(orgN_filter) def get_compost(self, cycle): compostAsN = summation(cycle['inputs']['compostAsN']['value']) mushroomCompostAsN = summation(cycle['inputs']['mushroomCompostAsN']['value']) compost = [compostAsN, mushroomCompostAsN] return summation(compost) def get_greenManure(self, cycle): greenManure_array = summation(cycle['inputs']['greenManureAsN']['value']) return greenManure_array def calculate_pToSurfacewaterAllOrigins(self): self.pToSurfacewaterAllOrigins = \ (0 if self.slope < 0.03 else 1) * (1 + self.inorgP * 0.2/80 + self.orgP * 0.7/80 * (0 if self.lqd_slurry_sluge == {} else self.lqd_slurry_sluge) + (self.orgP * self.livestockfert + self.excrP) * 0.4/80) return self.pToSurfacewaterAllOrigins def complete(self, completeness): self.inorgP = 0 if self.inorgP == {} and completeness['fertilizer'] else self.inorgP self.orgP = 0 if self.orgP == {} and completeness['fertilizer'] else self.orgP self.livestockfert = 0 if self.livestockfert == {} and completeness['fertilizer'] else self.livestockfert self.excrP = 0 if self.excrP == {} and completeness['products'] else self.excrP def check_pToSurfacewaterAllOrigins(self, cycle): inputs = cycle['inputs'].evalues() self.inorgP = summation([sum(input['value']) if 'units' in input['term'] and input['term']['units'] == 'kg P2O5' and input['term']['termType'] == 'inorganicFertilizer' else {} for input in inputs]) self.orgP = summation([sum(input['value']) if 'units' in input['term'] and input['term']['units'] == 'kg P2O5' and input['term']['termType'] == 'organicFertilizer' else {} for input in inputs]) products = cycle['products'].evalues() self.excrP = summation([sum(product['value']) if 'units' in product['term'] and product['term']['units'] == 'kg P2O5' and product['term']['termType'] == 'animalProduct' else {} for product in products]) self.slope = most_relevant_measurement(cycle['site']['measurements']['slope'], cycle['endDate']) self.lqd_slurry_sluge = self.get_lqd_slurry_sluge(cycle) self.solid = self.get_solid(cycle) self.compost = self.get_compost(cycle) self.greenManure = self.get_greenManure(cycle) self.livestockfert = summation([self.lqd_slurry_sluge, self.solid, self.compost, self.greenManure]) self.complete(cycle['dataCompleteness']) return self.inorgP != {} and self.orgP != {} and self.excrP != {} and self.slope != {}