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 = 'pToGroundwaterSalcaPrasuhn2006'
[docs]class PToGroundwaterSalcaPrasuhn2006(Model):
def __init__(self):
# Define model tier
self.tier = 1
self.term = download_hestia(MODEL_KEY)
# Define model requirements
self.orgP = None
self.drainageClass = None
# Instantiate variables
self.pToGroundwaterAllOrigins = None
self.lqd_slurry_sluge = 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'])
lqd_slurry_sluge = summation([slurryAndSludgeAsN, cattleLiquidManureAsN, pigsLiquidManureAsN])
self.lqd_slurry_sluge = summation(lqd_slurry_sluge)
return lqd_slurry_sluge
def calculate_pToGroundwaterAllOrigins(self):
if self.orgP != {}:
self.pToGroundwaterAllOrigins = \
0.07 * (1 + 0 if self.orgP == 0 else self.orgP * 0.2/80 * (0 if self.lqd_slurry_sluge is None
else self.lqd_slurry_sluge)) * \
(0 if self.drainageClass > 3 else 1)
return self.pToGroundwaterAllOrigins
def complete(self, completeness):
self.orgP = 0 if self.orgP == {} and completeness['fertilizer'] else self.orgP
self.lqd_slurry_sluge = 0 if self.lqd_slurry_sluge == {} and completeness['fertilizer'] else\
self.lqd_slurry_sluge
def check_pToGroundwaterAllOrigins(self, cycle):
inputs = cycle['inputs'].evalues()
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])
self.drainageClass = most_relevant_measurement(cycle['site']['measurements']['drainageClass'], cycle['endDate'])
self.lqd_slurry_sluge = self.get_lqd_slurry_sluge(cycle)
self.complete(cycle['dataCompleteness'])
return self.orgP != {} and self.drainageClass != {}