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 = 'pToDrainageWaterSalcaPrasuhn2006'
[docs]class PToDrainageWaterSalcaPrasuhn2006(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
self.pToSurfacewaterAllOrigins = None
self.lqd_slurry_sluge = None
# Instantiate variables
self.pToDrainageWaterAllOrigins = None
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'])
lqd_slurry_sluge = [slurryAndSludgeAsN, cattleLiquidManureAsN, pigsLiquidManureAsN]
self.lqd_slurry_sluge = summation(lqd_slurry_sluge)
def calculate_pToDrainageWaterAllOrigins(self):
if self.pToSurfacewaterAllOrigins != {}:
self.pToDrainageWaterAllOrigins =\
0.07 * (1 + 0 if self.orgP == 0 else self.orgP * 0.2/80 * (0 if self.lqd_slurry_sluge == {}
else self.lqd_slurry_sluge)) * \
(6 if self.drainageClass > 3 else 0)
return self.pToDrainageWaterAllOrigins
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_pToDrainageWaterAllOrigins(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.pToSurfacewaterAllOrigins = summation(cycle['emissions']['pToSurfacewaterAllOrigins']['value'])
self.access_lqd_slurry_sluge(cycle)
self.complete(cycle['dataCompleteness'])
return self.orgP != {} and self.pToSurfacewaterAllOrigins != {} and self.drainageClass != {}