Source code for raytraverse.sky.skydatamask
# -*- coding: utf-8 -*-
# Copyright (c) 2020 Stephen Wasilewski, HSLU and EPFL
# =======================================================================
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# =======================================================================
import numpy as np
from raytraverse.sky.skydata import SkyData
[docs]class SkyDataMask(SkyData):
"""spoofed skydata class for use with light results
Parameters
----------
hours: np.array
hours of year given as (m, d, h) where hour is H.5 (assumes 8760) to
use as daymask.
"""
def __init__(self, hours):
#: sky patch resolution
wea = []
md = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
nh = 0
for m in range(1, 13):
days = md[m-1]
for d in range(1, days+1):
for h in range(24):
mdh = (m, d, h + 0.5)
if nh < len(hours) and np.allclose(hours[nh], mdh):
nh += 1
wea.append(mdh + (100, 100))
else:
wea.append(mdh + (0, 0))
wea = np.asarray(wea)
super().__init__(wea, loc=(0, 0, 0), skyro=0.0, ground_fac=0.2,
intersky=True, skyres=1, minalt=0.0, mindiff=50.0,
mindir=50.0)
@property
def skydata(self):
"""sun position and dirnorm diffhoriz"""
return self._skydata
@skydata.setter
def skydata(self, wea):
"""spoof skydata
Parameters
----------
wea: np.array
- 5 col: m, d, h, dir, diff
"""
md = wea[:, 0:2].astype(int)
self._rowlabel = wea[:, 0:3]
self._daymask = wea[:, 4] > self._mindiff
self._daysteps = np.sum(self.daymask)
self._smtx = np.ones((self.daysteps, self.skyres**2 + 1))
self._sun = np.ones((self.daysteps, 5))
self._skydata = np.ones((8760, 5))
self._sunproxy = np.zeros(self.daysteps)